All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-07 10:22 ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Hi,
This is v4 of the series to add support for TI-SCI Generic PM Domains.
Previous versions can be found here:

v3: https://www.spinics.net/lists/kernel/msg2413975.html
v2: https://www.spinics.net/lists/kernel/msg2364612.html
v1: http://www.spinics.net/lists/arm-kernel/msg525204.html

After much debate I have returned to using the phandle cell to pass the SCI ID
rather than the separate "ti,sci-id" property that was not very popular. In
order to do this I needed to make a change to the genpd framework which can be
seen in patch 2 and should benefit others that have client . Rather than
checking for zero phandle args and failing if any are present the
of_genpd_add_provider_simple call does not check at all and instead leaves
parsing and interpretation up to the platform genpd driver.

This allows the ti_sci_pm_domains driver to parse the phandle and use the first
phandle cell as the sci-id rather than getting it from a separate property.

Besides that none of the original patches have changed apart from updating the
year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
looking for the rejected ti,sci-id property.

I did not update the "power-domain" binding document because in regards to
#power-domain-cells it already states "can be any value as specified by device
tree binding documentation of particular provider" which I think already
describes the change in patch 2.

Regards,
Dave

Dave Gerlach (5):
  PM / Domains: Add generic data pointer to genpd data struct
  PM / Domains: Do not check if simple providers have phandle cells
  dt-bindings: Add TI SCI PM Domains
  soc: ti: Add ti_sci_pm_domains driver
  ARM: keystone: Drop PM domain support for k2g

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
 MAINTAINERS                                        |   3 +
 arch/arm/mach-keystone/Kconfig                     |   1 +
 arch/arm/mach-keystone/pm_domain.c                 |   4 +-
 drivers/base/power/domain.c                        |   2 -
 drivers/soc/ti/Kconfig                             |  12 ++
 drivers/soc/ti/Makefile                            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c                 | 202 +++++++++++++++++++++
 include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
 include/linux/pm_domain.h                          |   1 +
 10 files changed, 372 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
 create mode 100644 include/dt-bindings/genpd/k2g.h

-- 
2.11.0

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

* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-07 10:22 ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

Hi,
This is v4 of the series to add support for TI-SCI Generic PM Domains.
Previous versions can be found here:

v3: https://www.spinics.net/lists/kernel/msg2413975.html
v2: https://www.spinics.net/lists/kernel/msg2364612.html
v1: http://www.spinics.net/lists/arm-kernel/msg525204.html

After much debate I have returned to using the phandle cell to pass the SCI ID
rather than the separate "ti,sci-id" property that was not very popular. In
order to do this I needed to make a change to the genpd framework which can be
seen in patch 2 and should benefit others that have client . Rather than
checking for zero phandle args and failing if any are present the
of_genpd_add_provider_simple call does not check at all and instead leaves
parsing and interpretation up to the platform genpd driver.

This allows the ti_sci_pm_domains driver to parse the phandle and use the first
phandle cell as the sci-id rather than getting it from a separate property.

Besides that none of the original patches have changed apart from updating the
year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
looking for the rejected ti,sci-id property.

I did not update the "power-domain" binding document because in regards to
#power-domain-cells it already states "can be any value as specified by device
tree binding documentation of particular provider" which I think already
describes the change in patch 2.

Regards,
Dave

Dave Gerlach (5):
  PM / Domains: Add generic data pointer to genpd data struct
  PM / Domains: Do not check if simple providers have phandle cells
  dt-bindings: Add TI SCI PM Domains
  soc: ti: Add ti_sci_pm_domains driver
  ARM: keystone: Drop PM domain support for k2g

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
 MAINTAINERS                                        |   3 +
 arch/arm/mach-keystone/Kconfig                     |   1 +
 arch/arm/mach-keystone/pm_domain.c                 |   4 +-
 drivers/base/power/domain.c                        |   2 -
 drivers/soc/ti/Kconfig                             |  12 ++
 drivers/soc/ti/Makefile                            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c                 | 202 +++++++++++++++++++++
 include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
 include/linux/pm_domain.h                          |   1 +
 10 files changed, 372 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
 create mode 100644 include/dt-bindings/genpd/k2g.h

-- 
2.11.0

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

* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-07 10:22 ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,
This is v4 of the series to add support for TI-SCI Generic PM Domains.
Previous versions can be found here:

v3: https://www.spinics.net/lists/kernel/msg2413975.html
v2: https://www.spinics.net/lists/kernel/msg2364612.html
v1: http://www.spinics.net/lists/arm-kernel/msg525204.html

After much debate I have returned to using the phandle cell to pass the SCI ID
rather than the separate "ti,sci-id" property that was not very popular. In
order to do this I needed to make a change to the genpd framework which can be
seen in patch 2 and should benefit others that have client . Rather than
checking for zero phandle args and failing if any are present the
of_genpd_add_provider_simple call does not check at all and instead leaves
parsing and interpretation up to the platform genpd driver.

This allows the ti_sci_pm_domains driver to parse the phandle and use the first
phandle cell as the sci-id rather than getting it from a separate property.

Besides that none of the original patches have changed apart from updating the
year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
looking for the rejected ti,sci-id property.

I did not update the "power-domain" binding document because in regards to
#power-domain-cells it already states "can be any value as specified by device
tree binding documentation of particular provider" which I think already
describes the change in patch 2.

Regards,
Dave

Dave Gerlach (5):
  PM / Domains: Add generic data pointer to genpd data struct
  PM / Domains: Do not check if simple providers have phandle cells
  dt-bindings: Add TI SCI PM Domains
  soc: ti: Add ti_sci_pm_domains driver
  ARM: keystone: Drop PM domain support for k2g

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
 MAINTAINERS                                        |   3 +
 arch/arm/mach-keystone/Kconfig                     |   1 +
 arch/arm/mach-keystone/pm_domain.c                 |   4 +-
 drivers/base/power/domain.c                        |   2 -
 drivers/soc/ti/Kconfig                             |  12 ++
 drivers/soc/ti/Makefile                            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c                 | 202 +++++++++++++++++++++
 include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
 include/linux/pm_domain.h                          |   1 +
 10 files changed, 372 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
 create mode 100644 include/dt-bindings/genpd/k2g.h

-- 
2.11.0

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

* [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
  2017-03-07 10:22 ` Dave Gerlach
  (?)
@ 2017-03-07 10:22   ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Add a void *data pointer to struct generic_pm_domain_data. Because this
exists for each device associated with a genpd it will allow us to
assign per-device data if needed on a platform for control of that
specific device.

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 include/linux/pm_domain.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 5339ed5bd6f9..b213d22daefd 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -117,6 +117,7 @@ struct generic_pm_domain_data {
 	struct pm_domain_data base;
 	struct gpd_timing_data td;
 	struct notifier_block nb;
+	void *data;
 };
 
 #ifdef CONFIG_PM_GENERIC_DOMAINS
-- 
2.11.0

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

* [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

Add a void *data pointer to struct generic_pm_domain_data. Because this
exists for each device associated with a genpd it will allow us to
assign per-device data if needed on a platform for control of that
specific device.

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 include/linux/pm_domain.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 5339ed5bd6f9..b213d22daefd 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -117,6 +117,7 @@ struct generic_pm_domain_data {
 	struct pm_domain_data base;
 	struct gpd_timing_data td;
 	struct notifier_block nb;
+	void *data;
 };
 
 #ifdef CONFIG_PM_GENERIC_DOMAINS
-- 
2.11.0

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

* [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

Add a void *data pointer to struct generic_pm_domain_data. Because this
exists for each device associated with a genpd it will allow us to
assign per-device data if needed on a platform for control of that
specific device.

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 include/linux/pm_domain.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 5339ed5bd6f9..b213d22daefd 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -117,6 +117,7 @@ struct generic_pm_domain_data {
 	struct pm_domain_data base;
 	struct gpd_timing_data td;
 	struct notifier_block nb;
+	void *data;
 };
 
 #ifdef CONFIG_PM_GENERIC_DOMAINS
-- 
2.11.0

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

* [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
  2017-03-07 10:22 ` Dave Gerlach
  (?)
@ 2017-03-07 10:22   ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

<<< No Message Collected >>>

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

* [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

There is no reason that a platform genpd driver registered using
of_genpd_add_provider_simple needs to be constrained to having no cells
in the "power-domains" phandle. Currently the genpd framework will fail
if any arguments are passed with for a simple provider but the framework
does not actually care, so remove the check for phandle argument count.

This will allow greater flexibility for genpd providers to use their own
arguments that are passed in the phandle and interpret them however they
see fit.

Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v3->v4:
 Drop ti,sci-id device property and instead describe using phandle cell
 for id.

 drivers/base/power/domain.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index e697dec9d25b..8e0550c27394 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
 					struct of_phandle_args *genpdspec,
 					void *data)
 {
-	if (genpdspec->args_count != 0)
-		return ERR_PTR(-EINVAL);
 	return data;
 }
 
-- 
2.11.0

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

* [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

There is no reason that a platform genpd driver registered using
of_genpd_add_provider_simple needs to be constrained to having no cells
in the "power-domains" phandle. Currently the genpd framework will fail
if any arguments are passed with for a simple provider but the framework
does not actually care, so remove the check for phandle argument count.

This will allow greater flexibility for genpd providers to use their own
arguments that are passed in the phandle and interpret them however they
see fit.

Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v3->v4:
 Drop ti,sci-id device property and instead describe using phandle cell
 for id.

 drivers/base/power/domain.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index e697dec9d25b..8e0550c27394 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
 					struct of_phandle_args *genpdspec,
 					void *data)
 {
-	if (genpdspec->args_count != 0)
-		return ERR_PTR(-EINVAL);
 	return data;
 }
 
-- 
2.11.0

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
  2017-03-07 10:22 ` Dave Gerlach
  (?)
@ 2017-03-07 10:22   ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 151 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..86a6a3d52ed6
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,59 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1]. This pm domain
+implementation plugs into the generic pm domain framework and makes use of
+the TI SCI protocol power on and off each device when needed.
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 151 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..86a6a3d52ed6
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,59 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1]. This pm domain
+implementation plugs into the generic pm domain framework and makes use of
+the TI SCI protocol power on and off each device when needed.
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 151 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..86a6a3d52ed6
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,59 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1]. This pm domain
+implementation plugs into the generic pm domain framework and makes use of
+the TI SCI protocol power on and off each device when needed.
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial at 02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
  2017-03-07 10:22 ` Dave Gerlach
  (?)
@ 2017-03-07 10:22   ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Introduce a ti_sci_pm_domains driver to act as a generic pm domain
provider to allow each device to attach and associate it's ti-sci-id so
that it can be controlled through the TI SCI protocol.

This driver implements a simple genpd where each device node has a
phandle to the power domain node and also must provide an index which
represents the ID to be passed with TI SCI representing the device using
a single phandle cell. The driver manually parses the phandle to get the
cell value. Through this interface the genpd dev_ops start and stop
hooks will use TI SCI to turn on and off each device as determined by
pm_runtime usage.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v3->v4:
 Parse phandle directly instead of reading ti,sci-id property per device.
 
 MAINTAINERS                        |   1 +
 arch/arm/mach-keystone/Kconfig     |   1 +
 drivers/soc/ti/Kconfig             |  12 +++
 drivers/soc/ti/Makefile            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
 5 files changed, 217 insertions(+)
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c

diff --git a/MAINTAINERS b/MAINTAINERS
index aaf96a9b4cd4..5cce85ade551 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
 F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 F:	include/dt-bindings/genpd/k2g.h
+F:	drivers/soc/ti/ti_sci_pm_domains.c
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
index 554357035f30..db122356b410 100644
--- a/arch/arm/mach-keystone/Kconfig
+++ b/arch/arm/mach-keystone/Kconfig
@@ -10,6 +10,7 @@ config ARCH_KEYSTONE
 	select ARCH_SUPPORTS_BIG_ENDIAN
 	select ZONE_DMA if ARM_LPAE
 	select PINCTRL
+	select PM_GENERIC_DOMAINS if PM
 	help
 	  Support for boards based on the Texas Instruments Keystone family of
 	  SoCs.
diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
index 3557c5e32a93..39e152abe6b9 100644
--- a/drivers/soc/ti/Kconfig
+++ b/drivers/soc/ti/Kconfig
@@ -38,4 +38,16 @@ config WKUP_M3_IPC
 	  to communicate and use the Wakeup M3 for PM features like suspend
 	  resume and boots it using wkup_m3_rproc driver.
 
+config TI_SCI_PM_DOMAINS
+	tristate "TI SCI PM Domains Driver"
+	depends on TI_SCI_PROTOCOL
+	depends on PM_GENERIC_DOMAINS
+	help
+	  Generic power domain implementation for TI device implementing
+	  the TI SCI protocol.
+
+	  To compile this as a module, choose M here. The module will be
+	  called ti_sci_pm_domains. Note this is needed early in boot before
+	  rootfs may be available.
+
 endif # SOC_TI
diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
index 48ff3a79634f..7d572736c86e 100644
--- a/drivers/soc/ti/Makefile
+++ b/drivers/soc/ti/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
 knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
 obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
 obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
+obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
new file mode 100644
index 000000000000..b0b283810e72
--- /dev/null
+++ b/drivers/soc/ti/ti_sci_pm_domains.c
@@ -0,0 +1,202 @@
+/*
+ * TI SCI Generic Power Domain Driver
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *	J Keerthy <j-keerthy@ti.com>
+ *	Dave Gerlach <d-gerlach@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/err.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/slab.h>
+#include <linux/soc/ti/ti_sci_protocol.h>
+
+/**
+ * struct ti_sci_genpd_dev_data: holds data needed for every device attached
+ *				 to this genpd
+ * @idx: index of the device that identifies it with the system
+ *	 control processor.
+ */
+struct ti_sci_genpd_dev_data {
+	int idx;
+};
+
+/**
+ * struct ti_sci_pm_domain: TI specific data needed for power domain
+ * @ti_sci: handle to TI SCI protocol driver that provides ops to
+ *	    communicate with system control processor.
+ * @dev: pointer to dev for the driver for devm allocs
+ * @pd: generic_pm_domain for use with the genpd framework
+ */
+struct ti_sci_pm_domain {
+	const struct ti_sci_handle *ti_sci;
+	struct device *dev;
+	struct generic_pm_domain pd;
+};
+
+#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
+
+/**
+ * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns device_id stored from ti,sci_id property
+ */
+static int ti_sci_dev_id(struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	return sci_dev_data->idx;
+}
+
+/**
+ * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns ti_sci_handle to be used to communicate with system
+ *	   control processor.
+ */
+static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
+{
+	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
+
+	return ti_sci_genpd->ti_sci;
+}
+
+/**
+ * ti_sci_dev_start(): genpd device start hook called to turn device on
+ * @dev: pointer to device associated with this genpd to be powered on
+ */
+static int ti_sci_dev_start(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
+}
+
+/**
+ * ti_sci_dev_stop(): genpd device stop hook called to turn device off
+ * @dev: pointer to device associated with this genpd to be powered off
+ */
+static int ti_sci_dev_stop(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
+}
+
+static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
+				struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+	struct of_phandle_args pd_args;
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
+	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
+	struct ti_sci_genpd_dev_data *sci_dev_data;
+	struct generic_pm_domain_data *genpd_data;
+	int idx, ret = 0;
+
+	ret = of_parse_phandle_with_args(np, "power-domains",
+					 "#power-domain-cells", 0, &pd_args);
+	if (ret < 0)
+		return ret;
+
+	if (pd_args.args_count != 1)
+		return -EINVAL;
+
+	idx = pd_args.args[0];
+
+	/*
+	 * Check the validity of the requested idx, if the index is not valid
+	 * the PMMC will return a NAK here and we will not allocate it.
+	 */
+	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
+	if (ret)
+		return -EINVAL;
+
+	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
+	if (!sci_dev_data)
+		return -ENOMEM;
+
+	sci_dev_data->idx = idx;
+
+	genpd_data = dev_gpd_data(dev);
+	genpd_data->data = sci_dev_data;
+
+	return 0;
+}
+
+static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
+				 struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	kfree(sci_dev_data);
+	genpd_data->data = NULL;
+}
+
+static const struct of_device_id ti_sci_pm_domain_matches[] = {
+	{ .compatible = "ti,sci-pm-domain", },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
+
+static int ti_sci_pm_domain_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+	struct ti_sci_pm_domain *ti_sci_pd;
+	int ret;
+
+	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
+	if (!ti_sci_pd)
+		return -ENOMEM;
+
+	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
+	if (IS_ERR(ti_sci_pd->ti_sci))
+		return PTR_ERR(ti_sci_pd->ti_sci);
+
+	ti_sci_pd->dev = dev;
+
+	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
+	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
+
+	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
+	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
+
+	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
+
+	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
+
+	return ret;
+}
+
+static struct platform_driver ti_sci_pm_domains_driver = {
+	.probe = ti_sci_pm_domain_probe,
+	.driver = {
+		.name = "ti_sci_pm_domains",
+		.of_match_table = ti_sci_pm_domain_matches,
+	},
+};
+module_platform_driver(ti_sci_pm_domains_driver);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
+MODULE_AUTHOR("Dave Gerlach");
-- 
2.11.0

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

Introduce a ti_sci_pm_domains driver to act as a generic pm domain
provider to allow each device to attach and associate it's ti-sci-id so
that it can be controlled through the TI SCI protocol.

This driver implements a simple genpd where each device node has a
phandle to the power domain node and also must provide an index which
represents the ID to be passed with TI SCI representing the device using
a single phandle cell. The driver manually parses the phandle to get the
cell value. Through this interface the genpd dev_ops start and stop
hooks will use TI SCI to turn on and off each device as determined by
pm_runtime usage.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v3->v4:
 Parse phandle directly instead of reading ti,sci-id property per device.
 
 MAINTAINERS                        |   1 +
 arch/arm/mach-keystone/Kconfig     |   1 +
 drivers/soc/ti/Kconfig             |  12 +++
 drivers/soc/ti/Makefile            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
 5 files changed, 217 insertions(+)
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c

diff --git a/MAINTAINERS b/MAINTAINERS
index aaf96a9b4cd4..5cce85ade551 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
 F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 F:	include/dt-bindings/genpd/k2g.h
+F:	drivers/soc/ti/ti_sci_pm_domains.c
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
index 554357035f30..db122356b410 100644
--- a/arch/arm/mach-keystone/Kconfig
+++ b/arch/arm/mach-keystone/Kconfig
@@ -10,6 +10,7 @@ config ARCH_KEYSTONE
 	select ARCH_SUPPORTS_BIG_ENDIAN
 	select ZONE_DMA if ARM_LPAE
 	select PINCTRL
+	select PM_GENERIC_DOMAINS if PM
 	help
 	  Support for boards based on the Texas Instruments Keystone family of
 	  SoCs.
diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
index 3557c5e32a93..39e152abe6b9 100644
--- a/drivers/soc/ti/Kconfig
+++ b/drivers/soc/ti/Kconfig
@@ -38,4 +38,16 @@ config WKUP_M3_IPC
 	  to communicate and use the Wakeup M3 for PM features like suspend
 	  resume and boots it using wkup_m3_rproc driver.
 
+config TI_SCI_PM_DOMAINS
+	tristate "TI SCI PM Domains Driver"
+	depends on TI_SCI_PROTOCOL
+	depends on PM_GENERIC_DOMAINS
+	help
+	  Generic power domain implementation for TI device implementing
+	  the TI SCI protocol.
+
+	  To compile this as a module, choose M here. The module will be
+	  called ti_sci_pm_domains. Note this is needed early in boot before
+	  rootfs may be available.
+
 endif # SOC_TI
diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
index 48ff3a79634f..7d572736c86e 100644
--- a/drivers/soc/ti/Makefile
+++ b/drivers/soc/ti/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
 knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
 obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
 obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
+obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
new file mode 100644
index 000000000000..b0b283810e72
--- /dev/null
+++ b/drivers/soc/ti/ti_sci_pm_domains.c
@@ -0,0 +1,202 @@
+/*
+ * TI SCI Generic Power Domain Driver
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *	J Keerthy <j-keerthy@ti.com>
+ *	Dave Gerlach <d-gerlach@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/err.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/slab.h>
+#include <linux/soc/ti/ti_sci_protocol.h>
+
+/**
+ * struct ti_sci_genpd_dev_data: holds data needed for every device attached
+ *				 to this genpd
+ * @idx: index of the device that identifies it with the system
+ *	 control processor.
+ */
+struct ti_sci_genpd_dev_data {
+	int idx;
+};
+
+/**
+ * struct ti_sci_pm_domain: TI specific data needed for power domain
+ * @ti_sci: handle to TI SCI protocol driver that provides ops to
+ *	    communicate with system control processor.
+ * @dev: pointer to dev for the driver for devm allocs
+ * @pd: generic_pm_domain for use with the genpd framework
+ */
+struct ti_sci_pm_domain {
+	const struct ti_sci_handle *ti_sci;
+	struct device *dev;
+	struct generic_pm_domain pd;
+};
+
+#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
+
+/**
+ * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns device_id stored from ti,sci_id property
+ */
+static int ti_sci_dev_id(struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	return sci_dev_data->idx;
+}
+
+/**
+ * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns ti_sci_handle to be used to communicate with system
+ *	   control processor.
+ */
+static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
+{
+	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
+
+	return ti_sci_genpd->ti_sci;
+}
+
+/**
+ * ti_sci_dev_start(): genpd device start hook called to turn device on
+ * @dev: pointer to device associated with this genpd to be powered on
+ */
+static int ti_sci_dev_start(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
+}
+
+/**
+ * ti_sci_dev_stop(): genpd device stop hook called to turn device off
+ * @dev: pointer to device associated with this genpd to be powered off
+ */
+static int ti_sci_dev_stop(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
+}
+
+static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
+				struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+	struct of_phandle_args pd_args;
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
+	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
+	struct ti_sci_genpd_dev_data *sci_dev_data;
+	struct generic_pm_domain_data *genpd_data;
+	int idx, ret = 0;
+
+	ret = of_parse_phandle_with_args(np, "power-domains",
+					 "#power-domain-cells", 0, &pd_args);
+	if (ret < 0)
+		return ret;
+
+	if (pd_args.args_count != 1)
+		return -EINVAL;
+
+	idx = pd_args.args[0];
+
+	/*
+	 * Check the validity of the requested idx, if the index is not valid
+	 * the PMMC will return a NAK here and we will not allocate it.
+	 */
+	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
+	if (ret)
+		return -EINVAL;
+
+	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
+	if (!sci_dev_data)
+		return -ENOMEM;
+
+	sci_dev_data->idx = idx;
+
+	genpd_data = dev_gpd_data(dev);
+	genpd_data->data = sci_dev_data;
+
+	return 0;
+}
+
+static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
+				 struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	kfree(sci_dev_data);
+	genpd_data->data = NULL;
+}
+
+static const struct of_device_id ti_sci_pm_domain_matches[] = {
+	{ .compatible = "ti,sci-pm-domain", },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
+
+static int ti_sci_pm_domain_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+	struct ti_sci_pm_domain *ti_sci_pd;
+	int ret;
+
+	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
+	if (!ti_sci_pd)
+		return -ENOMEM;
+
+	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
+	if (IS_ERR(ti_sci_pd->ti_sci))
+		return PTR_ERR(ti_sci_pd->ti_sci);
+
+	ti_sci_pd->dev = dev;
+
+	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
+	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
+
+	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
+	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
+
+	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
+
+	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
+
+	return ret;
+}
+
+static struct platform_driver ti_sci_pm_domains_driver = {
+	.probe = ti_sci_pm_domain_probe,
+	.driver = {
+		.name = "ti_sci_pm_domains",
+		.of_match_table = ti_sci_pm_domain_matches,
+	},
+};
+module_platform_driver(ti_sci_pm_domains_driver);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
+MODULE_AUTHOR("Dave Gerlach");
-- 
2.11.0

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

Introduce a ti_sci_pm_domains driver to act as a generic pm domain
provider to allow each device to attach and associate it's ti-sci-id so
that it can be controlled through the TI SCI protocol.

This driver implements a simple genpd where each device node has a
phandle to the power domain node and also must provide an index which
represents the ID to be passed with TI SCI representing the device using
a single phandle cell. The driver manually parses the phandle to get the
cell value. Through this interface the genpd dev_ops start and stop
hooks will use TI SCI to turn on and off each device as determined by
pm_runtime usage.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v3->v4:
 Parse phandle directly instead of reading ti,sci-id property per device.
 
 MAINTAINERS                        |   1 +
 arch/arm/mach-keystone/Kconfig     |   1 +
 drivers/soc/ti/Kconfig             |  12 +++
 drivers/soc/ti/Makefile            |   1 +
 drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
 5 files changed, 217 insertions(+)
 create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c

diff --git a/MAINTAINERS b/MAINTAINERS
index aaf96a9b4cd4..5cce85ade551 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
 F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 F:	include/dt-bindings/genpd/k2g.h
+F:	drivers/soc/ti/ti_sci_pm_domains.c
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
index 554357035f30..db122356b410 100644
--- a/arch/arm/mach-keystone/Kconfig
+++ b/arch/arm/mach-keystone/Kconfig
@@ -10,6 +10,7 @@ config ARCH_KEYSTONE
 	select ARCH_SUPPORTS_BIG_ENDIAN
 	select ZONE_DMA if ARM_LPAE
 	select PINCTRL
+	select PM_GENERIC_DOMAINS if PM
 	help
 	  Support for boards based on the Texas Instruments Keystone family of
 	  SoCs.
diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
index 3557c5e32a93..39e152abe6b9 100644
--- a/drivers/soc/ti/Kconfig
+++ b/drivers/soc/ti/Kconfig
@@ -38,4 +38,16 @@ config WKUP_M3_IPC
 	  to communicate and use the Wakeup M3 for PM features like suspend
 	  resume and boots it using wkup_m3_rproc driver.
 
+config TI_SCI_PM_DOMAINS
+	tristate "TI SCI PM Domains Driver"
+	depends on TI_SCI_PROTOCOL
+	depends on PM_GENERIC_DOMAINS
+	help
+	  Generic power domain implementation for TI device implementing
+	  the TI SCI protocol.
+
+	  To compile this as a module, choose M here. The module will be
+	  called ti_sci_pm_domains. Note this is needed early in boot before
+	  rootfs may be available.
+
 endif # SOC_TI
diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
index 48ff3a79634f..7d572736c86e 100644
--- a/drivers/soc/ti/Makefile
+++ b/drivers/soc/ti/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
 knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
 obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
 obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
+obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
new file mode 100644
index 000000000000..b0b283810e72
--- /dev/null
+++ b/drivers/soc/ti/ti_sci_pm_domains.c
@@ -0,0 +1,202 @@
+/*
+ * TI SCI Generic Power Domain Driver
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *	J Keerthy <j-keerthy@ti.com>
+ *	Dave Gerlach <d-gerlach@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/err.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/slab.h>
+#include <linux/soc/ti/ti_sci_protocol.h>
+
+/**
+ * struct ti_sci_genpd_dev_data: holds data needed for every device attached
+ *				 to this genpd
+ * @idx: index of the device that identifies it with the system
+ *	 control processor.
+ */
+struct ti_sci_genpd_dev_data {
+	int idx;
+};
+
+/**
+ * struct ti_sci_pm_domain: TI specific data needed for power domain
+ * @ti_sci: handle to TI SCI protocol driver that provides ops to
+ *	    communicate with system control processor.
+ * @dev: pointer to dev for the driver for devm allocs
+ * @pd: generic_pm_domain for use with the genpd framework
+ */
+struct ti_sci_pm_domain {
+	const struct ti_sci_handle *ti_sci;
+	struct device *dev;
+	struct generic_pm_domain pd;
+};
+
+#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
+
+/**
+ * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns device_id stored from ti,sci_id property
+ */
+static int ti_sci_dev_id(struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	return sci_dev_data->idx;
+}
+
+/**
+ * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
+ * @dev: pointer to device associated with this genpd
+ *
+ * Returns ti_sci_handle to be used to communicate with system
+ *	   control processor.
+ */
+static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
+{
+	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
+
+	return ti_sci_genpd->ti_sci;
+}
+
+/**
+ * ti_sci_dev_start(): genpd device start hook called to turn device on
+ * @dev: pointer to device associated with this genpd to be powered on
+ */
+static int ti_sci_dev_start(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
+}
+
+/**
+ * ti_sci_dev_stop(): genpd device stop hook called to turn device off
+ * @dev: pointer to device associated with this genpd to be powered off
+ */
+static int ti_sci_dev_stop(struct device *dev)
+{
+	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
+	int idx = ti_sci_dev_id(dev);
+
+	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
+}
+
+static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
+				struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+	struct of_phandle_args pd_args;
+	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
+	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
+	struct ti_sci_genpd_dev_data *sci_dev_data;
+	struct generic_pm_domain_data *genpd_data;
+	int idx, ret = 0;
+
+	ret = of_parse_phandle_with_args(np, "power-domains",
+					 "#power-domain-cells", 0, &pd_args);
+	if (ret < 0)
+		return ret;
+
+	if (pd_args.args_count != 1)
+		return -EINVAL;
+
+	idx = pd_args.args[0];
+
+	/*
+	 * Check the validity of the requested idx, if the index is not valid
+	 * the PMMC will return a NAK here and we will not allocate it.
+	 */
+	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
+	if (ret)
+		return -EINVAL;
+
+	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
+	if (!sci_dev_data)
+		return -ENOMEM;
+
+	sci_dev_data->idx = idx;
+
+	genpd_data = dev_gpd_data(dev);
+	genpd_data->data = sci_dev_data;
+
+	return 0;
+}
+
+static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
+				 struct device *dev)
+{
+	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
+	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
+
+	kfree(sci_dev_data);
+	genpd_data->data = NULL;
+}
+
+static const struct of_device_id ti_sci_pm_domain_matches[] = {
+	{ .compatible = "ti,sci-pm-domain", },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
+
+static int ti_sci_pm_domain_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+	struct ti_sci_pm_domain *ti_sci_pd;
+	int ret;
+
+	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
+	if (!ti_sci_pd)
+		return -ENOMEM;
+
+	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
+	if (IS_ERR(ti_sci_pd->ti_sci))
+		return PTR_ERR(ti_sci_pd->ti_sci);
+
+	ti_sci_pd->dev = dev;
+
+	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
+	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
+
+	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
+	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
+
+	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
+
+	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
+
+	return ret;
+}
+
+static struct platform_driver ti_sci_pm_domains_driver = {
+	.probe = ti_sci_pm_domain_probe,
+	.driver = {
+		.name = "ti_sci_pm_domains",
+		.of_match_table = ti_sci_pm_domain_matches,
+	},
+};
+module_platform_driver(ti_sci_pm_domains_driver);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
+MODULE_AUTHOR("Dave Gerlach");
-- 
2.11.0

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

* [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
  2017-03-07 10:22 ` Dave Gerlach
  (?)
@ 2017-03-07 10:22   ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla, Lokesh Vutla

K2G will use a different power domain driver than the rest of the
keystone family in order to make use of the TI SCI protocol so prevent
the standard keystone pm_domain code from registering itself in
preparation for a new driver.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 arch/arm/mach-keystone/pm_domain.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-keystone/pm_domain.c b/arch/arm/mach-keystone/pm_domain.c
index 8cbb35765a19..fe57e2692629 100644
--- a/arch/arm/mach-keystone/pm_domain.c
+++ b/arch/arm/mach-keystone/pm_domain.c
@@ -32,7 +32,9 @@ static struct pm_clk_notifier_block platform_domain_notifier = {
 };
 
 static const struct of_device_id of_keystone_table[] = {
-	{.compatible = "ti,keystone"},
+	{.compatible = "ti,k2hk"},
+	{.compatible = "ti,k2e"},
+	{.compatible = "ti,k2l"},
 	{ /* end of list */ },
 };
 
-- 
2.11.0

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

* [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Lokesh Vutla, Keerthy,
	linux-pm, linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

K2G will use a different power domain driver than the rest of the
keystone family in order to make use of the TI SCI protocol so prevent
the standard keystone pm_domain code from registering itself in
preparation for a new driver.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 arch/arm/mach-keystone/pm_domain.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-keystone/pm_domain.c b/arch/arm/mach-keystone/pm_domain.c
index 8cbb35765a19..fe57e2692629 100644
--- a/arch/arm/mach-keystone/pm_domain.c
+++ b/arch/arm/mach-keystone/pm_domain.c
@@ -32,7 +32,9 @@ static struct pm_clk_notifier_block platform_domain_notifier = {
 };
 
 static const struct of_device_id of_keystone_table[] = {
-	{.compatible = "ti,keystone"},
+	{.compatible = "ti,k2hk"},
+	{.compatible = "ti,k2e"},
+	{.compatible = "ti,k2l"},
 	{ /* end of list */ },
 };
 
-- 
2.11.0

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

* [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
@ 2017-03-07 10:22   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-07 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

K2G will use a different power domain driver than the rest of the
keystone family in order to make use of the TI SCI protocol so prevent
the standard keystone pm_domain code from registering itself in
preparation for a new driver.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 arch/arm/mach-keystone/pm_domain.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-keystone/pm_domain.c b/arch/arm/mach-keystone/pm_domain.c
index 8cbb35765a19..fe57e2692629 100644
--- a/arch/arm/mach-keystone/pm_domain.c
+++ b/arch/arm/mach-keystone/pm_domain.c
@@ -32,7 +32,9 @@ static struct pm_clk_notifier_block platform_domain_notifier = {
 };
 
 static const struct of_device_id of_keystone_table[] = {
-	{.compatible = "ti,keystone"},
+	{.compatible = "ti,k2hk"},
+	{.compatible = "ti,k2e"},
+	{.compatible = "ti,k2l"},
 	{ /* end of list */ },
 };
 
-- 
2.11.0

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

* Re: [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
  2017-03-07 10:22   ` Dave Gerlach
  (?)
@ 2017-03-10 21:18     ` Kevin Hilman
  -1 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:18 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Dave Gerlach <d-gerlach@ti.com> writes:

> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>  					struct of_phandle_args *genpdspec,
>  					void *data)
>  {
> -	if (genpdspec->args_count != 0)
> -		return ERR_PTR(-EINVAL);
>  	return data;
>  }

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

* Re: [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-10 21:18     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:18 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Dave Gerlach <d-gerlach@ti.com> writes:

> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>  					struct of_phandle_args *genpdspec,
>  					void *data)
>  {
> -	if (genpdspec->args_count != 0)
> -		return ERR_PTR(-EINVAL);
>  	return data;
>  }

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

* [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-10 21:18     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:18 UTC (permalink / raw)
  To: linux-arm-kernel

Dave Gerlach <d-gerlach@ti.com> writes:

> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>  					struct of_phandle_args *genpdspec,
>  					void *data)
>  {
> -	if (genpdspec->args_count != 0)
> -		return ERR_PTR(-EINVAL);
>  	return data;
>  }

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

* Re: [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
  2017-03-07 10:22   ` Dave Gerlach
  (?)
@ 2017-03-10 21:19     ` Kevin Hilman
  -1 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:19 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Dave Gerlach <d-gerlach@ti.com> writes:

> Add a void *data pointer to struct generic_pm_domain_data. Because this
> exists for each device associated with a genpd it will allow us to
> assign per-device data if needed on a platform for control of that
> specific device.
>
> Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  include/linux/pm_domain.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
> index 5339ed5bd6f9..b213d22daefd 100644
> --- a/include/linux/pm_domain.h
> +++ b/include/linux/pm_domain.h
> @@ -117,6 +117,7 @@ struct generic_pm_domain_data {
>  	struct pm_domain_data base;
>  	struct gpd_timing_data td;
>  	struct notifier_block nb;
> +	void *data;
>  };
>  
>  #ifdef CONFIG_PM_GENERIC_DOMAINS

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

* Re: [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
@ 2017-03-10 21:19     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:19 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Nishanth Menon, devicetree, Ulf Hansson, linux-pm, Keerthy,
	Sudeep Holla, Rafael J. Wysocki, linux-kernel, Tero Kristo,
	Russell King, Rob Herring, Santosh Shilimkar, linux-arm-kernel

Dave Gerlach <d-gerlach@ti.com> writes:

> Add a void *data pointer to struct generic_pm_domain_data. Because this
> exists for each device associated with a genpd it will allow us to
> assign per-device data if needed on a platform for control of that
> specific device.
>
> Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  include/linux/pm_domain.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
> index 5339ed5bd6f9..b213d22daefd 100644
> --- a/include/linux/pm_domain.h
> +++ b/include/linux/pm_domain.h
> @@ -117,6 +117,7 @@ struct generic_pm_domain_data {
>  	struct pm_domain_data base;
>  	struct gpd_timing_data td;
>  	struct notifier_block nb;
> +	void *data;
>  };
>  
>  #ifdef CONFIG_PM_GENERIC_DOMAINS

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

* [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct
@ 2017-03-10 21:19     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:19 UTC (permalink / raw)
  To: linux-arm-kernel

Dave Gerlach <d-gerlach@ti.com> writes:

> Add a void *data pointer to struct generic_pm_domain_data. Because this
> exists for each device associated with a genpd it will allow us to
> assign per-device data if needed on a platform for control of that
> specific device.
>
> Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  include/linux/pm_domain.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
> index 5339ed5bd6f9..b213d22daefd 100644
> --- a/include/linux/pm_domain.h
> +++ b/include/linux/pm_domain.h
> @@ -117,6 +117,7 @@ struct generic_pm_domain_data {
>  	struct pm_domain_data base;
>  	struct gpd_timing_data td;
>  	struct notifier_block nb;
> +	void *data;
>  };
>  
>  #ifdef CONFIG_PM_GENERIC_DOMAINS

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

* Re: [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
  2017-03-07 10:22   ` Dave Gerlach
  (?)
@ 2017-03-10 21:22     ` Kevin Hilman
  -1 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:22 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Dave Gerlach <d-gerlach@ti.com> writes:

> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>  
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
>  F:	include/linux/soc/ti/ti_sci_protocol.h
>  F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:	include/dt-bindings/genpd/k2g.h
> +F:	drivers/soc/ti/ti_sci_pm_domains.c
>  
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:	Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>  	select ARCH_SUPPORTS_BIG_ENDIAN
>  	select ZONE_DMA if ARM_LPAE
>  	select PINCTRL
> +	select PM_GENERIC_DOMAINS if PM
>  	help
>  	  Support for boards based on the Texas Instruments Keystone family of
>  	  SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>  	  to communicate and use the Wakeup M3 for PM features like suspend
>  	  resume and boots it using wkup_m3_rproc driver.
>  
> +config TI_SCI_PM_DOMAINS
> +	tristate "TI SCI PM Domains Driver"
> +	depends on TI_SCI_PROTOCOL
> +	depends on PM_GENERIC_DOMAINS
> +	help
> +	  Generic power domain implementation for TI device implementing
> +	  the TI SCI protocol.
> +
> +	  To compile this as a module, choose M here. The module will be
> +	  called ti_sci_pm_domains. Note this is needed early in boot before
> +	  rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *	J Keerthy <j-keerthy@ti.com>
> + *	Dave Gerlach <d-gerlach@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *				 to this genpd
> + * @idx: index of the device that identifies it with the system
> + *	 control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +	int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *	    communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +	const struct ti_sci_handle *ti_sci;
> +	struct device *dev;
> +	struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *	   control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +	return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +				struct device *dev)
> +{
> +	struct device_node *np = dev->of_node;
> +	struct of_phandle_args pd_args;
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +	struct ti_sci_genpd_dev_data *sci_dev_data;
> +	struct generic_pm_domain_data *genpd_data;
> +	int idx, ret = 0;
> +
> +	ret = of_parse_phandle_with_args(np, "power-domains",
> +					 "#power-domain-cells", 0, &pd_args);
> +	if (ret < 0)
> +		return ret;
> +
> +	if (pd_args.args_count != 1)
> +		return -EINVAL;
> +
> +	idx = pd_args.args[0];
> +
> +	/*
> +	 * Check the validity of the requested idx, if the index is not valid
> +	 * the PMMC will return a NAK here and we will not allocate it.
> +	 */
> +	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +	if (ret)
> +		return -EINVAL;
> +
> +	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +	if (!sci_dev_data)
> +		return -ENOMEM;
> +
> +	sci_dev_data->idx = idx;
> +
> +	genpd_data = dev_gpd_data(dev);
> +	genpd_data->data = sci_dev_data;
> +
> +	return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +				 struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	kfree(sci_dev_data);
> +	genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +	{ .compatible = "ti,sci-pm-domain", },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct device_node *np = dev->of_node;
> +	struct ti_sci_pm_domain *ti_sci_pd;
> +	int ret;
> +
> +	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +	if (!ti_sci_pd)
> +		return -ENOMEM;
> +
> +	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +	if (IS_ERR(ti_sci_pd->ti_sci))
> +		return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +	ti_sci_pd->dev = dev;
> +
> +	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +	return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +	.probe = ti_sci_pm_domain_probe,
> +	.driver = {
> +		.name = "ti_sci_pm_domains",
> +		.of_match_table = ti_sci_pm_domain_matches,
> +	},
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");

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

* Re: [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-10 21:22     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:22 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Dave Gerlach <d-gerlach@ti.com> writes:

> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>  
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
>  F:	include/linux/soc/ti/ti_sci_protocol.h
>  F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:	include/dt-bindings/genpd/k2g.h
> +F:	drivers/soc/ti/ti_sci_pm_domains.c
>  
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:	Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>  	select ARCH_SUPPORTS_BIG_ENDIAN
>  	select ZONE_DMA if ARM_LPAE
>  	select PINCTRL
> +	select PM_GENERIC_DOMAINS if PM
>  	help
>  	  Support for boards based on the Texas Instruments Keystone family of
>  	  SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>  	  to communicate and use the Wakeup M3 for PM features like suspend
>  	  resume and boots it using wkup_m3_rproc driver.
>  
> +config TI_SCI_PM_DOMAINS
> +	tristate "TI SCI PM Domains Driver"
> +	depends on TI_SCI_PROTOCOL
> +	depends on PM_GENERIC_DOMAINS
> +	help
> +	  Generic power domain implementation for TI device implementing
> +	  the TI SCI protocol.
> +
> +	  To compile this as a module, choose M here. The module will be
> +	  called ti_sci_pm_domains. Note this is needed early in boot before
> +	  rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *	J Keerthy <j-keerthy@ti.com>
> + *	Dave Gerlach <d-gerlach@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *				 to this genpd
> + * @idx: index of the device that identifies it with the system
> + *	 control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +	int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *	    communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +	const struct ti_sci_handle *ti_sci;
> +	struct device *dev;
> +	struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *	   control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +	return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +				struct device *dev)
> +{
> +	struct device_node *np = dev->of_node;
> +	struct of_phandle_args pd_args;
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +	struct ti_sci_genpd_dev_data *sci_dev_data;
> +	struct generic_pm_domain_data *genpd_data;
> +	int idx, ret = 0;
> +
> +	ret = of_parse_phandle_with_args(np, "power-domains",
> +					 "#power-domain-cells", 0, &pd_args);
> +	if (ret < 0)
> +		return ret;
> +
> +	if (pd_args.args_count != 1)
> +		return -EINVAL;
> +
> +	idx = pd_args.args[0];
> +
> +	/*
> +	 * Check the validity of the requested idx, if the index is not valid
> +	 * the PMMC will return a NAK here and we will not allocate it.
> +	 */
> +	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +	if (ret)
> +		return -EINVAL;
> +
> +	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +	if (!sci_dev_data)
> +		return -ENOMEM;
> +
> +	sci_dev_data->idx = idx;
> +
> +	genpd_data = dev_gpd_data(dev);
> +	genpd_data->data = sci_dev_data;
> +
> +	return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +				 struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	kfree(sci_dev_data);
> +	genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +	{ .compatible = "ti,sci-pm-domain", },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct device_node *np = dev->of_node;
> +	struct ti_sci_pm_domain *ti_sci_pd;
> +	int ret;
> +
> +	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +	if (!ti_sci_pd)
> +		return -ENOMEM;
> +
> +	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +	if (IS_ERR(ti_sci_pd->ti_sci))
> +		return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +	ti_sci_pd->dev = dev;
> +
> +	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +	return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +	.probe = ti_sci_pm_domain_probe,
> +	.driver = {
> +		.name = "ti_sci_pm_domains",
> +		.of_match_table = ti_sci_pm_domain_matches,
> +	},
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-10 21:22     ` Kevin Hilman
  0 siblings, 0 replies; 67+ messages in thread
From: Kevin Hilman @ 2017-03-10 21:22 UTC (permalink / raw)
  To: linux-arm-kernel

Dave Gerlach <d-gerlach@ti.com> writes:

> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>  
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:	drivers/firmware/ti_sci*
>  F:	include/linux/soc/ti/ti_sci_protocol.h
>  F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:	include/dt-bindings/genpd/k2g.h
> +F:	drivers/soc/ti/ti_sci_pm_domains.c
>  
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:	Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>  	select ARCH_SUPPORTS_BIG_ENDIAN
>  	select ZONE_DMA if ARM_LPAE
>  	select PINCTRL
> +	select PM_GENERIC_DOMAINS if PM
>  	help
>  	  Support for boards based on the Texas Instruments Keystone family of
>  	  SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>  	  to communicate and use the Wakeup M3 for PM features like suspend
>  	  resume and boots it using wkup_m3_rproc driver.
>  
> +config TI_SCI_PM_DOMAINS
> +	tristate "TI SCI PM Domains Driver"
> +	depends on TI_SCI_PROTOCOL
> +	depends on PM_GENERIC_DOMAINS
> +	help
> +	  Generic power domain implementation for TI device implementing
> +	  the TI SCI protocol.
> +
> +	  To compile this as a module, choose M here. The module will be
> +	  called ti_sci_pm_domains. Note this is needed early in boot before
> +	  rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)	+= knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)	+= knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)		+= wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)		+= ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *	J Keerthy <j-keerthy@ti.com>
> + *	Dave Gerlach <d-gerlach@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *				 to this genpd
> + * @idx: index of the device that identifies it with the system
> + *	 control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +	int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *	    communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +	const struct ti_sci_handle *ti_sci;
> +	struct device *dev;
> +	struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *	   control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +	struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +	return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +	const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +	int idx = ti_sci_dev_id(dev);
> +
> +	return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +				struct device *dev)
> +{
> +	struct device_node *np = dev->of_node;
> +	struct of_phandle_args pd_args;
> +	struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +	const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +	struct ti_sci_genpd_dev_data *sci_dev_data;
> +	struct generic_pm_domain_data *genpd_data;
> +	int idx, ret = 0;
> +
> +	ret = of_parse_phandle_with_args(np, "power-domains",
> +					 "#power-domain-cells", 0, &pd_args);
> +	if (ret < 0)
> +		return ret;
> +
> +	if (pd_args.args_count != 1)
> +		return -EINVAL;
> +
> +	idx = pd_args.args[0];
> +
> +	/*
> +	 * Check the validity of the requested idx, if the index is not valid
> +	 * the PMMC will return a NAK here and we will not allocate it.
> +	 */
> +	ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +	if (ret)
> +		return -EINVAL;
> +
> +	sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +	if (!sci_dev_data)
> +		return -ENOMEM;
> +
> +	sci_dev_data->idx = idx;
> +
> +	genpd_data = dev_gpd_data(dev);
> +	genpd_data->data = sci_dev_data;
> +
> +	return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +				 struct device *dev)
> +{
> +	struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +	struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +	kfree(sci_dev_data);
> +	genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +	{ .compatible = "ti,sci-pm-domain", },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct device_node *np = dev->of_node;
> +	struct ti_sci_pm_domain *ti_sci_pd;
> +	int ret;
> +
> +	ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +	if (!ti_sci_pd)
> +		return -ENOMEM;
> +
> +	ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +	if (IS_ERR(ti_sci_pd->ti_sci))
> +		return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +	ti_sci_pd->dev = dev;
> +
> +	ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +	ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +	ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +	ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +	pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +	ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +	return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +	.probe = ti_sci_pm_domain_probe,
> +	.driver = {
> +		.name = "ti_sci_pm_domains",
> +		.of_match_table = ti_sci_pm_domain_matches,
> +	},
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-12 17:02   ` Rafael J. Wysocki
  0 siblings, 0 replies; 67+ messages in thread
From: Rafael J. Wysocki @ 2017-03-12 17:02 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
> Hi,
> This is v4 of the series to add support for TI-SCI Generic PM Domains.
> Previous versions can be found here:
> 
> v3: https://www.spinics.net/lists/kernel/msg2413975.html
> v2: https://www.spinics.net/lists/kernel/msg2364612.html
> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
> 
> After much debate I have returned to using the phandle cell to pass the SCI ID
> rather than the separate "ti,sci-id" property that was not very popular. In
> order to do this I needed to make a change to the genpd framework which can be
> seen in patch 2 and should benefit others that have client . Rather than
> checking for zero phandle args and failing if any are present the
> of_genpd_add_provider_simple call does not check at all and instead leaves
> parsing and interpretation up to the platform genpd driver.
> 
> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
> phandle cell as the sci-id rather than getting it from a separate property.
> 
> Besides that none of the original patches have changed apart from updating the
> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
> looking for the rejected ti,sci-id property.
> 
> I did not update the "power-domain" binding document because in regards to
> #power-domain-cells it already states "can be any value as specified by device
> tree binding documentation of particular provider" which I think already
> describes the change in patch 2.

I'm assuming that this will go in through the arm-soc tree.

Thanks,
Rafael

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-12 17:02   ` Rafael J. Wysocki
  0 siblings, 0 replies; 67+ messages in thread
From: Rafael J. Wysocki @ 2017-03-12 17:02 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
> Hi,
> This is v4 of the series to add support for TI-SCI Generic PM Domains.
> Previous versions can be found here:
> 
> v3: https://www.spinics.net/lists/kernel/msg2413975.html
> v2: https://www.spinics.net/lists/kernel/msg2364612.html
> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
> 
> After much debate I have returned to using the phandle cell to pass the SCI ID
> rather than the separate "ti,sci-id" property that was not very popular. In
> order to do this I needed to make a change to the genpd framework which can be
> seen in patch 2 and should benefit others that have client . Rather than
> checking for zero phandle args and failing if any are present the
> of_genpd_add_provider_simple call does not check at all and instead leaves
> parsing and interpretation up to the platform genpd driver.
> 
> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
> phandle cell as the sci-id rather than getting it from a separate property.
> 
> Besides that none of the original patches have changed apart from updating the
> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
> looking for the rejected ti,sci-id property.
> 
> I did not update the "power-domain" binding document because in regards to
> #power-domain-cells it already states "can be any value as specified by device
> tree binding documentation of particular provider" which I think already
> describes the change in patch 2.

I'm assuming that this will go in through the arm-soc tree.

Thanks,
Rafael

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-12 17:02   ` Rafael J. Wysocki
  0 siblings, 0 replies; 67+ messages in thread
From: Rafael J. Wysocki @ 2017-03-12 17:02 UTC (permalink / raw)
  To: linux-arm-kernel

On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
> Hi,
> This is v4 of the series to add support for TI-SCI Generic PM Domains.
> Previous versions can be found here:
> 
> v3: https://www.spinics.net/lists/kernel/msg2413975.html
> v2: https://www.spinics.net/lists/kernel/msg2364612.html
> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
> 
> After much debate I have returned to using the phandle cell to pass the SCI ID
> rather than the separate "ti,sci-id" property that was not very popular. In
> order to do this I needed to make a change to the genpd framework which can be
> seen in patch 2 and should benefit others that have client . Rather than
> checking for zero phandle args and failing if any are present the
> of_genpd_add_provider_simple call does not check at all and instead leaves
> parsing and interpretation up to the platform genpd driver.
> 
> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
> phandle cell as the sci-id rather than getting it from a separate property.
> 
> Besides that none of the original patches have changed apart from updating the
> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
> looking for the rejected ti,sci-id property.
> 
> I did not update the "power-domain" binding document because in regards to
> #power-domain-cells it already states "can be any value as specified by device
> tree binding documentation of particular provider" which I think already
> describes the change in patch 2.

I'm assuming that this will go in through the arm-soc tree.

Thanks,
Rafael

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

* Re: [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
@ 2017-03-12 17:20     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar @ 2017-03-12 17:20 UTC (permalink / raw)
  To: Dave Gerlach, Ulf Hansson, Rafael J. Wysocki, Kevin Hilman,
	Santosh Shilimkar, Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla,
	Lokesh Vutla

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> K2G will use a different power domain driver than the rest of the
> keystone family in order to make use of the TI SCI protocol so prevent
> the standard keystone pm_domain code from registering itself in
> preparation for a new driver.
>
> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* Re: [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
@ 2017-03-12 17:20     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA @ 2017-03-12 17:20 UTC (permalink / raw)
  To: Dave Gerlach, Ulf Hansson, Rafael J. Wysocki, Kevin Hilman,
	Santosh Shilimkar, Rob Herring
  Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla, Lokesh Vutla

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> K2G will use a different power domain driver than the rest of the
> keystone family in order to make use of the TI SCI protocol so prevent
> the standard keystone pm_domain code from registering itself in
> preparation for a new driver.
>
> Signed-off-by: Lokesh Vutla <lokeshvutla-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>
> ---
Acked-by: Santosh Shilimkar <ssantosh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g
@ 2017-03-12 17:20     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar at oracle.com @ 2017-03-12 17:20 UTC (permalink / raw)
  To: linux-arm-kernel

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> K2G will use a different power domain driver than the rest of the
> keystone family in order to make use of the TI SCI protocol so prevent
> the standard keystone pm_domain code from registering itself in
> preparation for a new driver.
>
> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* Re: [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
  2017-03-07 10:22   ` Dave Gerlach
@ 2017-03-12 17:20     ` santosh.shilimkar at oracle.com
  -1 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar @ 2017-03-12 17:20 UTC (permalink / raw)
  To: Dave Gerlach, Ulf Hansson, Rafael J. Wysocki, Kevin Hilman,
	Santosh Shilimkar, Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-12 17:20     ` santosh.shilimkar at oracle.com
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar at oracle.com @ 2017-03-12 17:20 UTC (permalink / raw)
  To: linux-arm-kernel

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-12 17:21     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar @ 2017-03-12 17:21 UTC (permalink / raw)
  To: Dave Gerlach, Ulf Hansson, Rafael J. Wysocki, Kevin Hilman,
	Santosh Shilimkar, Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-12 17:21     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA @ 2017-03-12 17:21 UTC (permalink / raw)
  To: Dave Gerlach, Ulf Hansson, Rafael J. Wysocki, Kevin Hilman,
	Santosh Shilimkar, Rob Herring
  Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>
> ---

Acked-by: Santosh Shilimkar <ssantosh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-12 17:21     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar at oracle.com @ 2017-03-12 17:21 UTC (permalink / raw)
  To: linux-arm-kernel

On 3/7/17 2:22 AM, Dave Gerlach wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>

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

* Re: [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
  2017-03-07 10:22   ` Dave Gerlach
  (?)
@ 2017-03-13  8:20     ` Ulf Hansson
  -1 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:20 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>                                         struct of_phandle_args *genpdspec,
>                                         void *data)
>  {
> -       if (genpdspec->args_count != 0)
> -               return ERR_PTR(-EINVAL);
>         return data;
>  }
>
> --
> 2.11.0
>

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

* Re: [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-13  8:20     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:20 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>                                         struct of_phandle_args *genpdspec,
>                                         void *data)
>  {
> -       if (genpdspec->args_count != 0)
> -               return ERR_PTR(-EINVAL);
>         return data;
>  }
>
> --
> 2.11.0
>

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

* [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells
@ 2017-03-13  8:20     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:20 UTC (permalink / raw)
  To: linux-arm-kernel

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> There is no reason that a platform genpd driver registered using
> of_genpd_add_provider_simple needs to be constrained to having no cells
> in the "power-domains" phandle. Currently the genpd framework will fail
> if any arguments are passed with for a simple provider but the framework
> does not actually care, so remove the check for phandle argument count.
>
> This will allow greater flexibility for genpd providers to use their own
> arguments that are passed in the phandle and interpret them however they
> see fit.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3->v4:
>  Drop ti,sci-id device property and instead describe using phandle cell
>  for id.
>
>  drivers/base/power/domain.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index e697dec9d25b..8e0550c27394 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1622,8 +1622,6 @@ static struct generic_pm_domain *genpd_xlate_simple(
>                                         struct of_phandle_args *genpdspec,
>                                         void *data)
>  {
> -       if (genpdspec->args_count != 0)
> -               return ERR_PTR(-EINVAL);
>         return data;
>  }
>
> --
> 2.11.0
>

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 151 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h
>
> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> new file mode 100644
> index 000000000000..86a6a3d52ed6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> @@ -0,0 +1,59 @@
> +Texas Instruments TI-SCI Generic Power Domain
> +---------------------------------------------
> +
> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
> +responsible for controlling the state of the IPs that are present.
> +Communication between the host processor running an OS and the system
> +controller happens through a protocol known as TI-SCI [1]. This pm domain
> +implementation plugs into the generic pm domain framework and makes use of
> +the TI SCI protocol power on and off each device when needed.
> +
> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
> +
> +PM Domain Node
> +==============
> +The PM domain node represents the global PM domain managed by the PMMC, which
> +in this case is the implementation as documented by the generic PM domain
> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
> +child of the pmmc node.
> +
> +Required Properties:
> +--------------------
> +- compatible: should be "ti,sci-pm-domain"
> +- #power-domain-cells: Must be 1 so that an id can be provided in each
> +                      device node.
> +
> +Example (K2G):
> +-------------
> +       pmmc: pmmc {
> +               compatible = "ti,k2g-sci";
> +               ...
> +
> +               k2g_pds: power-controller {
> +                       compatible = "ti,sci-pm-domain";
> +                       #power-domain-cells = <1>;
> +               };
> +       };
> +
> +PM Domain Consumers
> +===================
> +Hardware blocks belonging to a PM domain should contain a "power-domains"
> +property that is a phandle pointing to the corresponding PM domain node
> +along with an index representing the device id to be passed to the PMMC
> +for device control.
> +
> +Required Properties:
> +--------------------
> +- power-domains: phandle pointing to the corresponding PM domain node
> +                and an ID representing the device.
> +
> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
> +
> +Example (K2G):
> +--------------------
> +       uart0: serial@02530c00 {
> +               compatible = "ns16550a";
> +               ...
> +               power-domains = <&k2g_pds K2G_DEV_UART0>;
> +       };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index c265a5fe4848..aaf96a9b4cd4 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12383,6 +12383,8 @@ S:      Maintained
>  F:     Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>  F:     drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
> +F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> +F:     include/dt-bindings/genpd/k2g.h
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
> new file mode 100644
> index 000000000000..1f31f17e19eb
> --- /dev/null
> +++ b/include/dt-bindings/genpd/k2g.h
> @@ -0,0 +1,90 @@
> +/*
> + * TI K2G SoC Device definitions
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef _DT_BINDINGS_GENPD_K2G_H
> +#define _DT_BINDINGS_GENPD_K2G_H
> +
> +/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
> +
> +#define K2G_DEV_PMMC0                  0x0000
> +#define K2G_DEV_MLB0                   0x0001
> +#define K2G_DEV_DSS0                   0x0002
> +#define K2G_DEV_MCBSP0                 0x0003
> +#define K2G_DEV_MCASP0                 0x0004
> +#define K2G_DEV_MCASP1                 0x0005
> +#define K2G_DEV_MCASP2                 0x0006
> +#define K2G_DEV_DCAN0                  0x0008
> +#define K2G_DEV_DCAN1                  0x0009
> +#define K2G_DEV_EMIF0                  0x000a
> +#define K2G_DEV_MMCHS0                 0x000b
> +#define K2G_DEV_MMCHS1                 0x000c
> +#define K2G_DEV_GPMC0                  0x000d
> +#define K2G_DEV_ELM0                   0x000e
> +#define K2G_DEV_SPI0                   0x0010
> +#define K2G_DEV_SPI1                   0x0011
> +#define K2G_DEV_SPI2                   0x0012
> +#define K2G_DEV_SPI3                   0x0013
> +#define K2G_DEV_ICSS0                  0x0014
> +#define K2G_DEV_ICSS1                  0x0015
> +#define K2G_DEV_USB0                   0x0016
> +#define K2G_DEV_USB1                   0x0017
> +#define K2G_DEV_NSS0                   0x0018
> +#define K2G_DEV_PCIE0                  0x0019
> +#define K2G_DEV_GPIO0                  0x001b
> +#define K2G_DEV_GPIO1                  0x001c
> +#define K2G_DEV_TIMER64_0              0x001d
> +#define K2G_DEV_TIMER64_1              0x001e
> +#define K2G_DEV_TIMER64_2              0x001f
> +#define K2G_DEV_TIMER64_3              0x0020
> +#define K2G_DEV_TIMER64_4              0x0021
> +#define K2G_DEV_TIMER64_5              0x0022
> +#define K2G_DEV_TIMER64_6              0x0023
> +#define K2G_DEV_MSGMGR0                        0x0025
> +#define K2G_DEV_BOOTCFG0               0x0026
> +#define K2G_DEV_ARM_BOOTROM0           0x0027
> +#define K2G_DEV_DSP_BOOTROM0           0x0029
> +#define K2G_DEV_DEBUGSS0               0x002b
> +#define K2G_DEV_UART0                  0x002c
> +#define K2G_DEV_UART1                  0x002d
> +#define K2G_DEV_UART2                  0x002e
> +#define K2G_DEV_EHRPWM0                        0x002f
> +#define K2G_DEV_EHRPWM1                        0x0030
> +#define K2G_DEV_EHRPWM2                        0x0031
> +#define K2G_DEV_EHRPWM3                        0x0032
> +#define K2G_DEV_EHRPWM4                        0x0033
> +#define K2G_DEV_EHRPWM5                        0x0034
> +#define K2G_DEV_EQEP0                  0x0035
> +#define K2G_DEV_EQEP1                  0x0036
> +#define K2G_DEV_EQEP2                  0x0037
> +#define K2G_DEV_ECAP0                  0x0038
> +#define K2G_DEV_ECAP1                  0x0039
> +#define K2G_DEV_I2C0                   0x003a
> +#define K2G_DEV_I2C1                   0x003b
> +#define K2G_DEV_I2C2                   0x003c
> +#define K2G_DEV_EDMA0                  0x003f
> +#define K2G_DEV_SEMAPHORE0             0x0040
> +#define K2G_DEV_INTC0                  0x0041
> +#define K2G_DEV_GIC0                   0x0042
> +#define K2G_DEV_QSPI0                  0x0043
> +#define K2G_DEV_ARM_64B_COUNTER0       0x0044
> +#define K2G_DEV_TETRIS0                        0x0045
> +#define K2G_DEV_CGEM0                  0x0046
> +#define K2G_DEV_MSMC0                  0x0047
> +#define K2G_DEV_CBASS0                 0x0049
> +#define K2G_DEV_BOARD0                 0x004c
> +#define K2G_DEV_EDMA1                  0x004f
> +
> +#endif
> --
> 2.11.0
>

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>

Reviewed-by: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>

> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 151 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h
>
> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> new file mode 100644
> index 000000000000..86a6a3d52ed6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> @@ -0,0 +1,59 @@
> +Texas Instruments TI-SCI Generic Power Domain
> +---------------------------------------------
> +
> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
> +responsible for controlling the state of the IPs that are present.
> +Communication between the host processor running an OS and the system
> +controller happens through a protocol known as TI-SCI [1]. This pm domain
> +implementation plugs into the generic pm domain framework and makes use of
> +the TI SCI protocol power on and off each device when needed.
> +
> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
> +
> +PM Domain Node
> +==============
> +The PM domain node represents the global PM domain managed by the PMMC, which
> +in this case is the implementation as documented by the generic PM domain
> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
> +child of the pmmc node.
> +
> +Required Properties:
> +--------------------
> +- compatible: should be "ti,sci-pm-domain"
> +- #power-domain-cells: Must be 1 so that an id can be provided in each
> +                      device node.
> +
> +Example (K2G):
> +-------------
> +       pmmc: pmmc {
> +               compatible = "ti,k2g-sci";
> +               ...
> +
> +               k2g_pds: power-controller {
> +                       compatible = "ti,sci-pm-domain";
> +                       #power-domain-cells = <1>;
> +               };
> +       };
> +
> +PM Domain Consumers
> +===================
> +Hardware blocks belonging to a PM domain should contain a "power-domains"
> +property that is a phandle pointing to the corresponding PM domain node
> +along with an index representing the device id to be passed to the PMMC
> +for device control.
> +
> +Required Properties:
> +--------------------
> +- power-domains: phandle pointing to the corresponding PM domain node
> +                and an ID representing the device.
> +
> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
> +
> +Example (K2G):
> +--------------------
> +       uart0: serial@02530c00 {
> +               compatible = "ns16550a";
> +               ...
> +               power-domains = <&k2g_pds K2G_DEV_UART0>;
> +       };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index c265a5fe4848..aaf96a9b4cd4 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12383,6 +12383,8 @@ S:      Maintained
>  F:     Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>  F:     drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
> +F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> +F:     include/dt-bindings/genpd/k2g.h
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
> diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
> new file mode 100644
> index 000000000000..1f31f17e19eb
> --- /dev/null
> +++ b/include/dt-bindings/genpd/k2g.h
> @@ -0,0 +1,90 @@
> +/*
> + * TI K2G SoC Device definitions
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef _DT_BINDINGS_GENPD_K2G_H
> +#define _DT_BINDINGS_GENPD_K2G_H
> +
> +/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
> +
> +#define K2G_DEV_PMMC0                  0x0000
> +#define K2G_DEV_MLB0                   0x0001
> +#define K2G_DEV_DSS0                   0x0002
> +#define K2G_DEV_MCBSP0                 0x0003
> +#define K2G_DEV_MCASP0                 0x0004
> +#define K2G_DEV_MCASP1                 0x0005
> +#define K2G_DEV_MCASP2                 0x0006
> +#define K2G_DEV_DCAN0                  0x0008
> +#define K2G_DEV_DCAN1                  0x0009
> +#define K2G_DEV_EMIF0                  0x000a
> +#define K2G_DEV_MMCHS0                 0x000b
> +#define K2G_DEV_MMCHS1                 0x000c
> +#define K2G_DEV_GPMC0                  0x000d
> +#define K2G_DEV_ELM0                   0x000e
> +#define K2G_DEV_SPI0                   0x0010
> +#define K2G_DEV_SPI1                   0x0011
> +#define K2G_DEV_SPI2                   0x0012
> +#define K2G_DEV_SPI3                   0x0013
> +#define K2G_DEV_ICSS0                  0x0014
> +#define K2G_DEV_ICSS1                  0x0015
> +#define K2G_DEV_USB0                   0x0016
> +#define K2G_DEV_USB1                   0x0017
> +#define K2G_DEV_NSS0                   0x0018
> +#define K2G_DEV_PCIE0                  0x0019
> +#define K2G_DEV_GPIO0                  0x001b
> +#define K2G_DEV_GPIO1                  0x001c
> +#define K2G_DEV_TIMER64_0              0x001d
> +#define K2G_DEV_TIMER64_1              0x001e
> +#define K2G_DEV_TIMER64_2              0x001f
> +#define K2G_DEV_TIMER64_3              0x0020
> +#define K2G_DEV_TIMER64_4              0x0021
> +#define K2G_DEV_TIMER64_5              0x0022
> +#define K2G_DEV_TIMER64_6              0x0023
> +#define K2G_DEV_MSGMGR0                        0x0025
> +#define K2G_DEV_BOOTCFG0               0x0026
> +#define K2G_DEV_ARM_BOOTROM0           0x0027
> +#define K2G_DEV_DSP_BOOTROM0           0x0029
> +#define K2G_DEV_DEBUGSS0               0x002b
> +#define K2G_DEV_UART0                  0x002c
> +#define K2G_DEV_UART1                  0x002d
> +#define K2G_DEV_UART2                  0x002e
> +#define K2G_DEV_EHRPWM0                        0x002f
> +#define K2G_DEV_EHRPWM1                        0x0030
> +#define K2G_DEV_EHRPWM2                        0x0031
> +#define K2G_DEV_EHRPWM3                        0x0032
> +#define K2G_DEV_EHRPWM4                        0x0033
> +#define K2G_DEV_EHRPWM5                        0x0034
> +#define K2G_DEV_EQEP0                  0x0035
> +#define K2G_DEV_EQEP1                  0x0036
> +#define K2G_DEV_EQEP2                  0x0037
> +#define K2G_DEV_ECAP0                  0x0038
> +#define K2G_DEV_ECAP1                  0x0039
> +#define K2G_DEV_I2C0                   0x003a
> +#define K2G_DEV_I2C1                   0x003b
> +#define K2G_DEV_I2C2                   0x003c
> +#define K2G_DEV_EDMA0                  0x003f
> +#define K2G_DEV_SEMAPHORE0             0x0040
> +#define K2G_DEV_INTC0                  0x0041
> +#define K2G_DEV_GIC0                   0x0042
> +#define K2G_DEV_QSPI0                  0x0043
> +#define K2G_DEV_ARM_64B_COUNTER0       0x0044
> +#define K2G_DEV_TETRIS0                        0x0045
> +#define K2G_DEV_CGEM0                  0x0046
> +#define K2G_DEV_MSMC0                  0x0047
> +#define K2G_DEV_CBASS0                 0x0049
> +#define K2G_DEV_BOARD0                 0x004c
> +#define K2G_DEV_EDMA1                  0x004f
> +
> +#endif
> --
> 2.11.0
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: linux-arm-kernel

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 151 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h
>
> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> new file mode 100644
> index 000000000000..86a6a3d52ed6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> @@ -0,0 +1,59 @@
> +Texas Instruments TI-SCI Generic Power Domain
> +---------------------------------------------
> +
> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
> +responsible for controlling the state of the IPs that are present.
> +Communication between the host processor running an OS and the system
> +controller happens through a protocol known as TI-SCI [1]. This pm domain
> +implementation plugs into the generic pm domain framework and makes use of
> +the TI SCI protocol power on and off each device when needed.
> +
> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
> +
> +PM Domain Node
> +==============
> +The PM domain node represents the global PM domain managed by the PMMC, which
> +in this case is the implementation as documented by the generic PM domain
> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
> +child of the pmmc node.
> +
> +Required Properties:
> +--------------------
> +- compatible: should be "ti,sci-pm-domain"
> +- #power-domain-cells: Must be 1 so that an id can be provided in each
> +                      device node.
> +
> +Example (K2G):
> +-------------
> +       pmmc: pmmc {
> +               compatible = "ti,k2g-sci";
> +               ...
> +
> +               k2g_pds: power-controller {
> +                       compatible = "ti,sci-pm-domain";
> +                       #power-domain-cells = <1>;
> +               };
> +       };
> +
> +PM Domain Consumers
> +===================
> +Hardware blocks belonging to a PM domain should contain a "power-domains"
> +property that is a phandle pointing to the corresponding PM domain node
> +along with an index representing the device id to be passed to the PMMC
> +for device control.
> +
> +Required Properties:
> +--------------------
> +- power-domains: phandle pointing to the corresponding PM domain node
> +                and an ID representing the device.
> +
> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
> +
> +Example (K2G):
> +--------------------
> +       uart0: serial at 02530c00 {
> +               compatible = "ns16550a";
> +               ...
> +               power-domains = <&k2g_pds K2G_DEV_UART0>;
> +       };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index c265a5fe4848..aaf96a9b4cd4 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12383,6 +12383,8 @@ S:      Maintained
>  F:     Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>  F:     drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
> +F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> +F:     include/dt-bindings/genpd/k2g.h
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
> new file mode 100644
> index 000000000000..1f31f17e19eb
> --- /dev/null
> +++ b/include/dt-bindings/genpd/k2g.h
> @@ -0,0 +1,90 @@
> +/*
> + * TI K2G SoC Device definitions
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef _DT_BINDINGS_GENPD_K2G_H
> +#define _DT_BINDINGS_GENPD_K2G_H
> +
> +/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
> +
> +#define K2G_DEV_PMMC0                  0x0000
> +#define K2G_DEV_MLB0                   0x0001
> +#define K2G_DEV_DSS0                   0x0002
> +#define K2G_DEV_MCBSP0                 0x0003
> +#define K2G_DEV_MCASP0                 0x0004
> +#define K2G_DEV_MCASP1                 0x0005
> +#define K2G_DEV_MCASP2                 0x0006
> +#define K2G_DEV_DCAN0                  0x0008
> +#define K2G_DEV_DCAN1                  0x0009
> +#define K2G_DEV_EMIF0                  0x000a
> +#define K2G_DEV_MMCHS0                 0x000b
> +#define K2G_DEV_MMCHS1                 0x000c
> +#define K2G_DEV_GPMC0                  0x000d
> +#define K2G_DEV_ELM0                   0x000e
> +#define K2G_DEV_SPI0                   0x0010
> +#define K2G_DEV_SPI1                   0x0011
> +#define K2G_DEV_SPI2                   0x0012
> +#define K2G_DEV_SPI3                   0x0013
> +#define K2G_DEV_ICSS0                  0x0014
> +#define K2G_DEV_ICSS1                  0x0015
> +#define K2G_DEV_USB0                   0x0016
> +#define K2G_DEV_USB1                   0x0017
> +#define K2G_DEV_NSS0                   0x0018
> +#define K2G_DEV_PCIE0                  0x0019
> +#define K2G_DEV_GPIO0                  0x001b
> +#define K2G_DEV_GPIO1                  0x001c
> +#define K2G_DEV_TIMER64_0              0x001d
> +#define K2G_DEV_TIMER64_1              0x001e
> +#define K2G_DEV_TIMER64_2              0x001f
> +#define K2G_DEV_TIMER64_3              0x0020
> +#define K2G_DEV_TIMER64_4              0x0021
> +#define K2G_DEV_TIMER64_5              0x0022
> +#define K2G_DEV_TIMER64_6              0x0023
> +#define K2G_DEV_MSGMGR0                        0x0025
> +#define K2G_DEV_BOOTCFG0               0x0026
> +#define K2G_DEV_ARM_BOOTROM0           0x0027
> +#define K2G_DEV_DSP_BOOTROM0           0x0029
> +#define K2G_DEV_DEBUGSS0               0x002b
> +#define K2G_DEV_UART0                  0x002c
> +#define K2G_DEV_UART1                  0x002d
> +#define K2G_DEV_UART2                  0x002e
> +#define K2G_DEV_EHRPWM0                        0x002f
> +#define K2G_DEV_EHRPWM1                        0x0030
> +#define K2G_DEV_EHRPWM2                        0x0031
> +#define K2G_DEV_EHRPWM3                        0x0032
> +#define K2G_DEV_EHRPWM4                        0x0033
> +#define K2G_DEV_EHRPWM5                        0x0034
> +#define K2G_DEV_EQEP0                  0x0035
> +#define K2G_DEV_EQEP1                  0x0036
> +#define K2G_DEV_EQEP2                  0x0037
> +#define K2G_DEV_ECAP0                  0x0038
> +#define K2G_DEV_ECAP1                  0x0039
> +#define K2G_DEV_I2C0                   0x003a
> +#define K2G_DEV_I2C1                   0x003b
> +#define K2G_DEV_I2C2                   0x003c
> +#define K2G_DEV_EDMA0                  0x003f
> +#define K2G_DEV_SEMAPHORE0             0x0040
> +#define K2G_DEV_INTC0                  0x0041
> +#define K2G_DEV_GIC0                   0x0042
> +#define K2G_DEV_QSPI0                  0x0043
> +#define K2G_DEV_ARM_64B_COUNTER0       0x0044
> +#define K2G_DEV_TETRIS0                        0x0045
> +#define K2G_DEV_CGEM0                  0x0046
> +#define K2G_DEV_MSMC0                  0x0047
> +#define K2G_DEV_CBASS0                 0x0049
> +#define K2G_DEV_BOARD0                 0x004c
> +#define K2G_DEV_EDMA1                  0x004f
> +
> +#endif
> --
> 2.11.0
>

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

* Re: [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:      drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
>  F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:     include/dt-bindings/genpd/k2g.h
> +F:     drivers/soc/ti/ti_sci_pm_domains.c
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>         select ARCH_SUPPORTS_BIG_ENDIAN
>         select ZONE_DMA if ARM_LPAE
>         select PINCTRL
> +       select PM_GENERIC_DOMAINS if PM
>         help
>           Support for boards based on the Texas Instruments Keystone family of
>           SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>           to communicate and use the Wakeup M3 for PM features like suspend
>           resume and boots it using wkup_m3_rproc driver.
>
> +config TI_SCI_PM_DOMAINS
> +       tristate "TI SCI PM Domains Driver"
> +       depends on TI_SCI_PROTOCOL
> +       depends on PM_GENERIC_DOMAINS
> +       help
> +         Generic power domain implementation for TI device implementing
> +         the TI SCI protocol.
> +
> +         To compile this as a module, choose M here. The module will be
> +         called ti_sci_pm_domains. Note this is needed early in boot before
> +         rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)   += knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)   += knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)              += wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)                += ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *     J Keerthy <j-keerthy@ti.com>
> + *     Dave Gerlach <d-gerlach@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *                              to this genpd
> + * @idx: index of the device that identifies it with the system
> + *      control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +       int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *         communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +       const struct ti_sci_handle *ti_sci;
> +       struct device *dev;
> +       struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *        control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +       struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +       return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +                               struct device *dev)
> +{
> +       struct device_node *np = dev->of_node;
> +       struct of_phandle_args pd_args;
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +       const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +       struct ti_sci_genpd_dev_data *sci_dev_data;
> +       struct generic_pm_domain_data *genpd_data;
> +       int idx, ret = 0;
> +
> +       ret = of_parse_phandle_with_args(np, "power-domains",
> +                                        "#power-domain-cells", 0, &pd_args);
> +       if (ret < 0)
> +               return ret;
> +
> +       if (pd_args.args_count != 1)
> +               return -EINVAL;
> +
> +       idx = pd_args.args[0];
> +
> +       /*
> +        * Check the validity of the requested idx, if the index is not valid
> +        * the PMMC will return a NAK here and we will not allocate it.
> +        */
> +       ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +       if (ret)
> +               return -EINVAL;
> +
> +       sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +       if (!sci_dev_data)
> +               return -ENOMEM;
> +
> +       sci_dev_data->idx = idx;
> +
> +       genpd_data = dev_gpd_data(dev);
> +       genpd_data->data = sci_dev_data;
> +
> +       return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +                                struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       kfree(sci_dev_data);
> +       genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +       { .compatible = "ti,sci-pm-domain", },
> +       { },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +       struct device *dev = &pdev->dev;
> +       struct device_node *np = dev->of_node;
> +       struct ti_sci_pm_domain *ti_sci_pd;
> +       int ret;
> +
> +       ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +       if (!ti_sci_pd)
> +               return -ENOMEM;
> +
> +       ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +       if (IS_ERR(ti_sci_pd->ti_sci))
> +               return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +       ti_sci_pd->dev = dev;
> +
> +       ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +       ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +       ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +       ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +       pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +       ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +       return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +       .probe = ti_sci_pm_domain_probe,
> +       .driver = {
> +               .name = "ti_sci_pm_domains",
> +               .of_match_table = ti_sci_pm_domain_matches,
> +       },
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");
> --
> 2.11.0
>

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

* Re: [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar, Rob Herring,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org> wrote:
> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>

Reviewed-by: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:      drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
>  F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:     include/dt-bindings/genpd/k2g.h
> +F:     drivers/soc/ti/ti_sci_pm_domains.c
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>         select ARCH_SUPPORTS_BIG_ENDIAN
>         select ZONE_DMA if ARM_LPAE
>         select PINCTRL
> +       select PM_GENERIC_DOMAINS if PM
>         help
>           Support for boards based on the Texas Instruments Keystone family of
>           SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>           to communicate and use the Wakeup M3 for PM features like suspend
>           resume and boots it using wkup_m3_rproc driver.
>
> +config TI_SCI_PM_DOMAINS
> +       tristate "TI SCI PM Domains Driver"
> +       depends on TI_SCI_PROTOCOL
> +       depends on PM_GENERIC_DOMAINS
> +       help
> +         Generic power domain implementation for TI device implementing
> +         the TI SCI protocol.
> +
> +         To compile this as a module, choose M here. The module will be
> +         called ti_sci_pm_domains. Note this is needed early in boot before
> +         rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)   += knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)   += knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)              += wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)                += ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *     J Keerthy <j-keerthy-l0cyMroinI0@public.gmane.org>
> + *     Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *                              to this genpd
> + * @idx: index of the device that identifies it with the system
> + *      control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +       int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *         communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +       const struct ti_sci_handle *ti_sci;
> +       struct device *dev;
> +       struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *        control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +       struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +       return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +                               struct device *dev)
> +{
> +       struct device_node *np = dev->of_node;
> +       struct of_phandle_args pd_args;
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +       const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +       struct ti_sci_genpd_dev_data *sci_dev_data;
> +       struct generic_pm_domain_data *genpd_data;
> +       int idx, ret = 0;
> +
> +       ret = of_parse_phandle_with_args(np, "power-domains",
> +                                        "#power-domain-cells", 0, &pd_args);
> +       if (ret < 0)
> +               return ret;
> +
> +       if (pd_args.args_count != 1)
> +               return -EINVAL;
> +
> +       idx = pd_args.args[0];
> +
> +       /*
> +        * Check the validity of the requested idx, if the index is not valid
> +        * the PMMC will return a NAK here and we will not allocate it.
> +        */
> +       ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +       if (ret)
> +               return -EINVAL;
> +
> +       sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +       if (!sci_dev_data)
> +               return -ENOMEM;
> +
> +       sci_dev_data->idx = idx;
> +
> +       genpd_data = dev_gpd_data(dev);
> +       genpd_data->data = sci_dev_data;
> +
> +       return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +                                struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       kfree(sci_dev_data);
> +       genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +       { .compatible = "ti,sci-pm-domain", },
> +       { },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +       struct device *dev = &pdev->dev;
> +       struct device_node *np = dev->of_node;
> +       struct ti_sci_pm_domain *ti_sci_pd;
> +       int ret;
> +
> +       ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +       if (!ti_sci_pd)
> +               return -ENOMEM;
> +
> +       ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +       if (IS_ERR(ti_sci_pd->ti_sci))
> +               return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +       ti_sci_pd->dev = dev;
> +
> +       ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +       ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +       ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +       ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +       pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +       ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +       return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +       .probe = ti_sci_pm_domain_probe,
> +       .driver = {
> +               .name = "ti_sci_pm_domains",
> +               .of_match_table = ti_sci_pm_domain_matches,
> +       },
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");
> --
> 2.11.0
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver
@ 2017-03-13  8:21     ` Ulf Hansson
  0 siblings, 0 replies; 67+ messages in thread
From: Ulf Hansson @ 2017-03-13  8:21 UTC (permalink / raw)
  To: linux-arm-kernel

On 7 March 2017 at 11:22, Dave Gerlach <d-gerlach@ti.com> wrote:
> Introduce a ti_sci_pm_domains driver to act as a generic pm domain
> provider to allow each device to attach and associate it's ti-sci-id so
> that it can be controlled through the TI SCI protocol.
>
> This driver implements a simple genpd where each device node has a
> phandle to the power domain node and also must provide an index which
> represents the ID to be passed with TI SCI representing the device using
> a single phandle cell. The driver manually parses the phandle to get the
> cell value. Through this interface the genpd dev_ops start and stop
> hooks will use TI SCI to turn on and off each device as determined by
> pm_runtime usage.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3->v4:
>  Parse phandle directly instead of reading ti,sci-id property per device.
>
>  MAINTAINERS                        |   1 +
>  arch/arm/mach-keystone/Kconfig     |   1 +
>  drivers/soc/ti/Kconfig             |  12 +++
>  drivers/soc/ti/Makefile            |   1 +
>  drivers/soc/ti/ti_sci_pm_domains.c | 202 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 217 insertions(+)
>  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index aaf96a9b4cd4..5cce85ade551 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12385,6 +12385,7 @@ F:      drivers/firmware/ti_sci*
>  F:     include/linux/soc/ti/ti_sci_protocol.h
>  F:     Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  F:     include/dt-bindings/genpd/k2g.h
> +F:     drivers/soc/ti/ti_sci_pm_domains.c
>
>  THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
>  M:     Hans Verkuil <hverkuil@xs4all.nl>
> diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
> index 554357035f30..db122356b410 100644
> --- a/arch/arm/mach-keystone/Kconfig
> +++ b/arch/arm/mach-keystone/Kconfig
> @@ -10,6 +10,7 @@ config ARCH_KEYSTONE
>         select ARCH_SUPPORTS_BIG_ENDIAN
>         select ZONE_DMA if ARM_LPAE
>         select PINCTRL
> +       select PM_GENERIC_DOMAINS if PM
>         help
>           Support for boards based on the Texas Instruments Keystone family of
>           SoCs.
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 3557c5e32a93..39e152abe6b9 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -38,4 +38,16 @@ config WKUP_M3_IPC
>           to communicate and use the Wakeup M3 for PM features like suspend
>           resume and boots it using wkup_m3_rproc driver.
>
> +config TI_SCI_PM_DOMAINS
> +       tristate "TI SCI PM Domains Driver"
> +       depends on TI_SCI_PROTOCOL
> +       depends on PM_GENERIC_DOMAINS
> +       help
> +         Generic power domain implementation for TI device implementing
> +         the TI SCI protocol.
> +
> +         To compile this as a module, choose M here. The module will be
> +         called ti_sci_pm_domains. Note this is needed early in boot before
> +         rootfs may be available.
> +
>  endif # SOC_TI
> diff --git a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile
> index 48ff3a79634f..7d572736c86e 100644
> --- a/drivers/soc/ti/Makefile
> +++ b/drivers/soc/ti/Makefile
> @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYSTONE_NAVIGATOR_QMSS)   += knav_qmss.o
>  knav_qmss-y := knav_qmss_queue.o knav_qmss_acc.o
>  obj-$(CONFIG_KEYSTONE_NAVIGATOR_DMA)   += knav_dma.o
>  obj-$(CONFIG_WKUP_M3_IPC)              += wkup_m3_ipc.o
> +obj-$(CONFIG_TI_SCI_PM_DOMAINS)                += ti_sci_pm_domains.o
> diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c
> new file mode 100644
> index 000000000000..b0b283810e72
> --- /dev/null
> +++ b/drivers/soc/ti/ti_sci_pm_domains.c
> @@ -0,0 +1,202 @@
> +/*
> + * TI SCI Generic Power Domain Driver
> + *
> + * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
> + *     J Keerthy <j-keerthy@ti.com>
> + *     Dave Gerlach <d-gerlach@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> +#include <linux/slab.h>
> +#include <linux/soc/ti/ti_sci_protocol.h>
> +
> +/**
> + * struct ti_sci_genpd_dev_data: holds data needed for every device attached
> + *                              to this genpd
> + * @idx: index of the device that identifies it with the system
> + *      control processor.
> + */
> +struct ti_sci_genpd_dev_data {
> +       int idx;
> +};
> +
> +/**
> + * struct ti_sci_pm_domain: TI specific data needed for power domain
> + * @ti_sci: handle to TI SCI protocol driver that provides ops to
> + *         communicate with system control processor.
> + * @dev: pointer to dev for the driver for devm allocs
> + * @pd: generic_pm_domain for use with the genpd framework
> + */
> +struct ti_sci_pm_domain {
> +       const struct ti_sci_handle *ti_sci;
> +       struct device *dev;
> +       struct generic_pm_domain pd;
> +};
> +
> +#define genpd_to_ti_sci_pd(gpd) container_of(gpd, struct ti_sci_pm_domain, pd)
> +
> +/**
> + * ti_sci_dev_id(): get prepopulated ti_sci id from struct dev
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns device_id stored from ti,sci_id property
> + */
> +static int ti_sci_dev_id(struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       return sci_dev_data->idx;
> +}
> +
> +/**
> + * ti_sci_dev_to_sci_handle(): get pointer to ti_sci_handle
> + * @dev: pointer to device associated with this genpd
> + *
> + * Returns ti_sci_handle to be used to communicate with system
> + *        control processor.
> + */
> +static const struct ti_sci_handle *ti_sci_dev_to_sci_handle(struct device *dev)
> +{
> +       struct generic_pm_domain *pd = pd_to_genpd(dev->pm_domain);
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(pd);
> +
> +       return ti_sci_genpd->ti_sci;
> +}
> +
> +/**
> + * ti_sci_dev_start(): genpd device start hook called to turn device on
> + * @dev: pointer to device associated with this genpd to be powered on
> + */
> +static int ti_sci_dev_start(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.get_device(ti_sci, idx);
> +}
> +
> +/**
> + * ti_sci_dev_stop(): genpd device stop hook called to turn device off
> + * @dev: pointer to device associated with this genpd to be powered off
> + */
> +static int ti_sci_dev_stop(struct device *dev)
> +{
> +       const struct ti_sci_handle *ti_sci = ti_sci_dev_to_sci_handle(dev);
> +       int idx = ti_sci_dev_id(dev);
> +
> +       return ti_sci->ops.dev_ops.put_device(ti_sci, idx);
> +}
> +
> +static int ti_sci_pd_attach_dev(struct generic_pm_domain *domain,
> +                               struct device *dev)
> +{
> +       struct device_node *np = dev->of_node;
> +       struct of_phandle_args pd_args;
> +       struct ti_sci_pm_domain *ti_sci_genpd = genpd_to_ti_sci_pd(domain);
> +       const struct ti_sci_handle *ti_sci = ti_sci_genpd->ti_sci;
> +       struct ti_sci_genpd_dev_data *sci_dev_data;
> +       struct generic_pm_domain_data *genpd_data;
> +       int idx, ret = 0;
> +
> +       ret = of_parse_phandle_with_args(np, "power-domains",
> +                                        "#power-domain-cells", 0, &pd_args);
> +       if (ret < 0)
> +               return ret;
> +
> +       if (pd_args.args_count != 1)
> +               return -EINVAL;
> +
> +       idx = pd_args.args[0];
> +
> +       /*
> +        * Check the validity of the requested idx, if the index is not valid
> +        * the PMMC will return a NAK here and we will not allocate it.
> +        */
> +       ret = ti_sci->ops.dev_ops.is_valid(ti_sci, idx);
> +       if (ret)
> +               return -EINVAL;
> +
> +       sci_dev_data = kzalloc(sizeof(*sci_dev_data), GFP_KERNEL);
> +       if (!sci_dev_data)
> +               return -ENOMEM;
> +
> +       sci_dev_data->idx = idx;
> +
> +       genpd_data = dev_gpd_data(dev);
> +       genpd_data->data = sci_dev_data;
> +
> +       return 0;
> +}
> +
> +static void ti_sci_pd_detach_dev(struct generic_pm_domain *domain,
> +                                struct device *dev)
> +{
> +       struct generic_pm_domain_data *genpd_data = dev_gpd_data(dev);
> +       struct ti_sci_genpd_dev_data *sci_dev_data = genpd_data->data;
> +
> +       kfree(sci_dev_data);
> +       genpd_data->data = NULL;
> +}
> +
> +static const struct of_device_id ti_sci_pm_domain_matches[] = {
> +       { .compatible = "ti,sci-pm-domain", },
> +       { },
> +};
> +MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);
> +
> +static int ti_sci_pm_domain_probe(struct platform_device *pdev)
> +{
> +       struct device *dev = &pdev->dev;
> +       struct device_node *np = dev->of_node;
> +       struct ti_sci_pm_domain *ti_sci_pd;
> +       int ret;
> +
> +       ti_sci_pd = devm_kzalloc(dev, sizeof(*ti_sci_pd), GFP_KERNEL);
> +       if (!ti_sci_pd)
> +               return -ENOMEM;
> +
> +       ti_sci_pd->ti_sci = devm_ti_sci_get_handle(dev);
> +       if (IS_ERR(ti_sci_pd->ti_sci))
> +               return PTR_ERR(ti_sci_pd->ti_sci);
> +
> +       ti_sci_pd->dev = dev;
> +
> +       ti_sci_pd->pd.attach_dev = ti_sci_pd_attach_dev;
> +       ti_sci_pd->pd.detach_dev = ti_sci_pd_detach_dev;
> +
> +       ti_sci_pd->pd.dev_ops.start = ti_sci_dev_start;
> +       ti_sci_pd->pd.dev_ops.stop = ti_sci_dev_stop;
> +
> +       pm_genpd_init(&ti_sci_pd->pd, NULL, true);
> +
> +       ret = of_genpd_add_provider_simple(np, &ti_sci_pd->pd);
> +
> +       return ret;
> +}
> +
> +static struct platform_driver ti_sci_pm_domains_driver = {
> +       .probe = ti_sci_pm_domain_probe,
> +       .driver = {
> +               .name = "ti_sci_pm_domains",
> +               .of_match_table = ti_sci_pm_domain_matches,
> +       },
> +};
> +module_platform_driver(ti_sci_pm_domains_driver);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("TI System Control Interface (SCI) Power Domain driver");
> +MODULE_AUTHOR("Dave Gerlach");
> --
> 2.11.0
>

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
  2017-03-07 10:22   ` Dave Gerlach
@ 2017-03-15 17:53     ` Rob Herring
  -1 siblings, 0 replies; 67+ messages in thread
From: Rob Herring @ 2017-03-15 17:53 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On Tue, Mar 07, 2017 at 04:22:32AM -0600, Dave Gerlach wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
> 
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
> 
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 151 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h
> 
> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> new file mode 100644
> index 000000000000..86a6a3d52ed6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> @@ -0,0 +1,59 @@
> +Texas Instruments TI-SCI Generic Power Domain
> +---------------------------------------------
> +
> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
> +responsible for controlling the state of the IPs that are present.
> +Communication between the host processor running an OS and the system
> +controller happens through a protocol known as TI-SCI [1]. This pm domain
> +implementation plugs into the generic pm domain framework and makes use of
> +the TI SCI protocol power on and off each device when needed.

The last sentence is mostly Linux implementation details. The binding is 
power domains. The Linux framework is PM domains. Let's keep those 
distinct and the latter doesn't belong in bindings.

> +
> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
> +
> +PM Domain Node
> +==============
> +The PM domain node represents the global PM domain managed by the PMMC, which
> +in this case is the implementation as documented by the generic PM domain
> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
> +child of the pmmc node.
> +
> +Required Properties:
> +--------------------
> +- compatible: should be "ti,sci-pm-domain"
> +- #power-domain-cells: Must be 1 so that an id can be provided in each
> +		       device node.
> +
> +Example (K2G):
> +-------------
> +	pmmc: pmmc {
> +		compatible = "ti,k2g-sci";
> +		...
> +
> +		k2g_pds: power-controller {
> +			compatible = "ti,sci-pm-domain";
> +			#power-domain-cells = <1>;
> +		};
> +	};
> +
> +PM Domain Consumers
> +===================
> +Hardware blocks belonging to a PM domain should contain a "power-domains"
> +property that is a phandle pointing to the corresponding PM domain node
> +along with an index representing the device id to be passed to the PMMC
> +for device control.
> +
> +Required Properties:
> +--------------------
> +- power-domains: phandle pointing to the corresponding PM domain node
> +		 and an ID representing the device.
> +
> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
> +
> +Example (K2G):
> +--------------------
> +	uart0: serial@02530c00 {
> +		compatible = "ns16550a";
> +		...
> +		power-domains = <&k2g_pds K2G_DEV_UART0>;
> +	};

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-15 17:53     ` Rob Herring
  0 siblings, 0 replies; 67+ messages in thread
From: Rob Herring @ 2017-03-15 17:53 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Mar 07, 2017 at 04:22:32AM -0600, Dave Gerlach wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
> 
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
> 
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 151 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h
> 
> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> new file mode 100644
> index 000000000000..86a6a3d52ed6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
> @@ -0,0 +1,59 @@
> +Texas Instruments TI-SCI Generic Power Domain
> +---------------------------------------------
> +
> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
> +responsible for controlling the state of the IPs that are present.
> +Communication between the host processor running an OS and the system
> +controller happens through a protocol known as TI-SCI [1]. This pm domain
> +implementation plugs into the generic pm domain framework and makes use of
> +the TI SCI protocol power on and off each device when needed.

The last sentence is mostly Linux implementation details. The binding is 
power domains. The Linux framework is PM domains. Let's keep those 
distinct and the latter doesn't belong in bindings.

> +
> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
> +
> +PM Domain Node
> +==============
> +The PM domain node represents the global PM domain managed by the PMMC, which
> +in this case is the implementation as documented by the generic PM domain
> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
> +child of the pmmc node.
> +
> +Required Properties:
> +--------------------
> +- compatible: should be "ti,sci-pm-domain"
> +- #power-domain-cells: Must be 1 so that an id can be provided in each
> +		       device node.
> +
> +Example (K2G):
> +-------------
> +	pmmc: pmmc {
> +		compatible = "ti,k2g-sci";
> +		...
> +
> +		k2g_pds: power-controller {
> +			compatible = "ti,sci-pm-domain";
> +			#power-domain-cells = <1>;
> +		};
> +	};
> +
> +PM Domain Consumers
> +===================
> +Hardware blocks belonging to a PM domain should contain a "power-domains"
> +property that is a phandle pointing to the corresponding PM domain node
> +along with an index representing the device id to be passed to the PMMC
> +for device control.
> +
> +Required Properties:
> +--------------------
> +- power-domains: phandle pointing to the corresponding PM domain node
> +		 and an ID representing the device.
> +
> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
> +
> +Example (K2G):
> +--------------------
> +	uart0: serial at 02530c00 {
> +		compatible = "ns16550a";
> +		...
> +		power-domains = <&k2g_pds K2G_DEV_UART0>;
> +	};

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
  2017-03-15 17:53     ` Rob Herring
  (?)
@ 2017-03-15 20:14       ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-15 20:14 UTC (permalink / raw)
  To: Rob Herring
  Cc: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On 03/15/2017 12:53 PM, Rob Herring wrote:
> On Tue, Mar 07, 2017 at 04:22:32AM -0600, Dave Gerlach wrote:
>> Add a generic power domain implementation, TI SCI PM Domains, that
>> will hook into the genpd framework and allow the TI SCI protocol to
>> control device power states.
>>
>> Also, provide macros representing each device index as understood
>> by TI SCI to be used in the device node power-domain references.
>> These are identifiers for the K2G devices managed by the PMMC.
>>
>> Signed-off-by: Nishanth Menon <nm@ti.com>
>> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
>> ---
>>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>>  MAINTAINERS                                        |  2 +
>>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>>  3 files changed, 151 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>>  create mode 100644 include/dt-bindings/genpd/k2g.h
>>
>> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> new file mode 100644
>> index 000000000000..86a6a3d52ed6
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> @@ -0,0 +1,59 @@
>> +Texas Instruments TI-SCI Generic Power Domain
>> +---------------------------------------------
>> +
>> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
>> +responsible for controlling the state of the IPs that are present.
>> +Communication between the host processor running an OS and the system
>> +controller happens through a protocol known as TI-SCI [1]. This pm domain
>> +implementation plugs into the generic pm domain framework and makes use of
>> +the TI SCI protocol power on and off each device when needed.
>
> The last sentence is mostly Linux implementation details. The binding is
> power domains. The Linux framework is PM domains. Let's keep those
> distinct and the latter doesn't belong in bindings.

Ok, I will send an update to just this patch and drop the last sentence above.

Regards,
Dave

>
>> +
>> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>> +
>> +PM Domain Node
>> +==============
>> +The PM domain node represents the global PM domain managed by the PMMC, which
>> +in this case is the implementation as documented by the generic PM domain
>> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
>> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
>> +child of the pmmc node.
>> +
>> +Required Properties:
>> +--------------------
>> +- compatible: should be "ti,sci-pm-domain"
>> +- #power-domain-cells: Must be 1 so that an id can be provided in each
>> +		       device node.
>> +
>> +Example (K2G):
>> +-------------
>> +	pmmc: pmmc {
>> +		compatible = "ti,k2g-sci";
>> +		...
>> +
>> +		k2g_pds: power-controller {
>> +			compatible = "ti,sci-pm-domain";
>> +			#power-domain-cells = <1>;
>> +		};
>> +	};
>> +
>> +PM Domain Consumers
>> +===================
>> +Hardware blocks belonging to a PM domain should contain a "power-domains"
>> +property that is a phandle pointing to the corresponding PM domain node
>> +along with an index representing the device id to be passed to the PMMC
>> +for device control.
>> +
>> +Required Properties:
>> +--------------------
>> +- power-domains: phandle pointing to the corresponding PM domain node
>> +		 and an ID representing the device.
>> +
>> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
>> +
>> +Example (K2G):
>> +--------------------
>> +	uart0: serial@02530c00 {
>> +		compatible = "ns16550a";
>> +		...
>> +		power-domains = <&k2g_pds K2G_DEV_UART0>;
>> +	};

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

* Re: [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-15 20:14       ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-15 20:14 UTC (permalink / raw)
  To: Rob Herring
  Cc: Ulf Hansson, Rafael J. Wysocki, Kevin Hilman, Santosh Shilimkar,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On 03/15/2017 12:53 PM, Rob Herring wrote:
> On Tue, Mar 07, 2017 at 04:22:32AM -0600, Dave Gerlach wrote:
>> Add a generic power domain implementation, TI SCI PM Domains, that
>> will hook into the genpd framework and allow the TI SCI protocol to
>> control device power states.
>>
>> Also, provide macros representing each device index as understood
>> by TI SCI to be used in the device node power-domain references.
>> These are identifiers for the K2G devices managed by the PMMC.
>>
>> Signed-off-by: Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
>> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>
>> ---
>>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>>  MAINTAINERS                                        |  2 +
>>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>>  3 files changed, 151 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>>  create mode 100644 include/dt-bindings/genpd/k2g.h
>>
>> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> new file mode 100644
>> index 000000000000..86a6a3d52ed6
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> @@ -0,0 +1,59 @@
>> +Texas Instruments TI-SCI Generic Power Domain
>> +---------------------------------------------
>> +
>> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
>> +responsible for controlling the state of the IPs that are present.
>> +Communication between the host processor running an OS and the system
>> +controller happens through a protocol known as TI-SCI [1]. This pm domain
>> +implementation plugs into the generic pm domain framework and makes use of
>> +the TI SCI protocol power on and off each device when needed.
>
> The last sentence is mostly Linux implementation details. The binding is
> power domains. The Linux framework is PM domains. Let's keep those
> distinct and the latter doesn't belong in bindings.

Ok, I will send an update to just this patch and drop the last sentence above.

Regards,
Dave

>
>> +
>> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>> +
>> +PM Domain Node
>> +==============
>> +The PM domain node represents the global PM domain managed by the PMMC, which
>> +in this case is the implementation as documented by the generic PM domain
>> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
>> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
>> +child of the pmmc node.
>> +
>> +Required Properties:
>> +--------------------
>> +- compatible: should be "ti,sci-pm-domain"
>> +- #power-domain-cells: Must be 1 so that an id can be provided in each
>> +		       device node.
>> +
>> +Example (K2G):
>> +-------------
>> +	pmmc: pmmc {
>> +		compatible = "ti,k2g-sci";
>> +		...
>> +
>> +		k2g_pds: power-controller {
>> +			compatible = "ti,sci-pm-domain";
>> +			#power-domain-cells = <1>;
>> +		};
>> +	};
>> +
>> +PM Domain Consumers
>> +===================
>> +Hardware blocks belonging to a PM domain should contain a "power-domains"
>> +property that is a phandle pointing to the corresponding PM domain node
>> +along with an index representing the device id to be passed to the PMMC
>> +for device control.
>> +
>> +Required Properties:
>> +--------------------
>> +- power-domains: phandle pointing to the corresponding PM domain node
>> +		 and an ID representing the device.
>> +
>> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
>> +
>> +Example (K2G):
>> +--------------------
>> +	uart0: serial@02530c00 {
>> +		compatible = "ns16550a";
>> +		...
>> +		power-domains = <&k2g_pds K2G_DEV_UART0>;
>> +	};

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-15 20:14       ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-15 20:14 UTC (permalink / raw)
  To: linux-arm-kernel

On 03/15/2017 12:53 PM, Rob Herring wrote:
> On Tue, Mar 07, 2017 at 04:22:32AM -0600, Dave Gerlach wrote:
>> Add a generic power domain implementation, TI SCI PM Domains, that
>> will hook into the genpd framework and allow the TI SCI protocol to
>> control device power states.
>>
>> Also, provide macros representing each device index as understood
>> by TI SCI to be used in the device node power-domain references.
>> These are identifiers for the K2G devices managed by the PMMC.
>>
>> Signed-off-by: Nishanth Menon <nm@ti.com>
>> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
>> ---
>>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 59 ++++++++++++++
>>  MAINTAINERS                                        |  2 +
>>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>>  3 files changed, 151 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>>  create mode 100644 include/dt-bindings/genpd/k2g.h
>>
>> diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> new file mode 100644
>> index 000000000000..86a6a3d52ed6
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>> @@ -0,0 +1,59 @@
>> +Texas Instruments TI-SCI Generic Power Domain
>> +---------------------------------------------
>> +
>> +Some TI SoCs contain a system controller (like the PMMC, etc...) that is
>> +responsible for controlling the state of the IPs that are present.
>> +Communication between the host processor running an OS and the system
>> +controller happens through a protocol known as TI-SCI [1]. This pm domain
>> +implementation plugs into the generic pm domain framework and makes use of
>> +the TI SCI protocol power on and off each device when needed.
>
> The last sentence is mostly Linux implementation details. The binding is
> power domains. The Linux framework is PM domains. Let's keep those
> distinct and the latter doesn't belong in bindings.

Ok, I will send an update to just this patch and drop the last sentence above.

Regards,
Dave

>
>> +
>> +[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
>> +
>> +PM Domain Node
>> +==============
>> +The PM domain node represents the global PM domain managed by the PMMC, which
>> +in this case is the implementation as documented by the generic PM domain
>> +bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
>> +this relies on the TI SCI protocol to communicate with the PMMC it must be a
>> +child of the pmmc node.
>> +
>> +Required Properties:
>> +--------------------
>> +- compatible: should be "ti,sci-pm-domain"
>> +- #power-domain-cells: Must be 1 so that an id can be provided in each
>> +		       device node.
>> +
>> +Example (K2G):
>> +-------------
>> +	pmmc: pmmc {
>> +		compatible = "ti,k2g-sci";
>> +		...
>> +
>> +		k2g_pds: power-controller {
>> +			compatible = "ti,sci-pm-domain";
>> +			#power-domain-cells = <1>;
>> +		};
>> +	};
>> +
>> +PM Domain Consumers
>> +===================
>> +Hardware blocks belonging to a PM domain should contain a "power-domains"
>> +property that is a phandle pointing to the corresponding PM domain node
>> +along with an index representing the device id to be passed to the PMMC
>> +for device control.
>> +
>> +Required Properties:
>> +--------------------
>> +- power-domains: phandle pointing to the corresponding PM domain node
>> +		 and an ID representing the device.
>> +
>> +See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
>> +
>> +Example (K2G):
>> +--------------------
>> +	uart0: serial at 02530c00 {
>> +		compatible = "ns16550a";
>> +		...
>> +		power-domains = <&k2g_pds K2G_DEV_UART0>;
>> +	};

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
  2017-03-07 10:22   ` Dave Gerlach
  (?)
@ 2017-03-16 18:27     ` Dave Gerlach
  -1 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:27 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-16 18:27     ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:27 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-16 18:27     ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:27 UTC (permalink / raw)
  To: linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial at 02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index c265a5fe4848..aaf96a9b4cd4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12383,6 +12383,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-16 18:31     ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:31 UTC (permalink / raw)
  To: Santosh Shilimkar
  Cc: Rafael J. Wysocki, Ulf Hansson, Kevin Hilman, Rob Herring,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

Santosh,
On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:
> On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
>> Hi,
>> This is v4 of the series to add support for TI-SCI Generic PM Domains.
>> Previous versions can be found here:
>>
>> v3: https://www.spinics.net/lists/kernel/msg2413975.html
>> v2: https://www.spinics.net/lists/kernel/msg2364612.html
>> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
>>
>> After much debate I have returned to using the phandle cell to pass the SCI ID
>> rather than the separate "ti,sci-id" property that was not very popular. In
>> order to do this I needed to make a change to the genpd framework which can be
>> seen in patch 2 and should benefit others that have client . Rather than
>> checking for zero phandle args and failing if any are present the
>> of_genpd_add_provider_simple call does not check at all and instead leaves
>> parsing and interpretation up to the platform genpd driver.
>>
>> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
>> phandle cell as the sci-id rather than getting it from a separate property.
>>
>> Besides that none of the original patches have changed apart from updating the
>> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
>> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
>> looking for the rejected ti,sci-id property.
>>
>> I did not update the "power-domain" binding document because in regards to
>> #power-domain-cells it already states "can be any value as specified by device
>> tree binding documentation of particular provider" which I think already
>> describes the change in patch 2.
> 
> I'm assuming that this will go in through the arm-soc tree.

Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
the v4 patch email, can this series go through you? We should be good to go with
v4 of the series + the small v5 update to patch 3 if Rob is ok with it.

Regards,
Dave

> 
> Thanks,
> Rafael
> 

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-16 18:31     ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:31 UTC (permalink / raw)
  To: Santosh Shilimkar
  Cc: Rafael J. Wysocki, Ulf Hansson, Kevin Hilman, Rob Herring,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

Santosh,
On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:
> On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
>> Hi,
>> This is v4 of the series to add support for TI-SCI Generic PM Domains.
>> Previous versions can be found here:
>>
>> v3: https://www.spinics.net/lists/kernel/msg2413975.html
>> v2: https://www.spinics.net/lists/kernel/msg2364612.html
>> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
>>
>> After much debate I have returned to using the phandle cell to pass the SCI ID
>> rather than the separate "ti,sci-id" property that was not very popular. In
>> order to do this I needed to make a change to the genpd framework which can be
>> seen in patch 2 and should benefit others that have client . Rather than
>> checking for zero phandle args and failing if any are present the
>> of_genpd_add_provider_simple call does not check at all and instead leaves
>> parsing and interpretation up to the platform genpd driver.
>>
>> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
>> phandle cell as the sci-id rather than getting it from a separate property.
>>
>> Besides that none of the original patches have changed apart from updating the
>> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
>> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
>> looking for the rejected ti,sci-id property.
>>
>> I did not update the "power-domain" binding document because in regards to
>> #power-domain-cells it already states "can be any value as specified by device
>> tree binding documentation of particular provider" which I think already
>> describes the change in patch 2.
> 
> I'm assuming that this will go in through the arm-soc tree.

Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
the v4 patch email, can this series go through you? We should be good to go with
v4 of the series + the small v5 update to patch 3 if Rob is ok with it.

Regards,
Dave

> 
> Thanks,
> Rafael
> 

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-03-16 18:31     ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-03-16 18:31 UTC (permalink / raw)
  To: linux-arm-kernel

Santosh,
On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:
> On Tuesday, March 07, 2017 04:22:29 AM Dave Gerlach wrote:
>> Hi,
>> This is v4 of the series to add support for TI-SCI Generic PM Domains.
>> Previous versions can be found here:
>>
>> v3: https://www.spinics.net/lists/kernel/msg2413975.html
>> v2: https://www.spinics.net/lists/kernel/msg2364612.html
>> v1: http://www.spinics.net/lists/arm-kernel/msg525204.html
>>
>> After much debate I have returned to using the phandle cell to pass the SCI ID
>> rather than the separate "ti,sci-id" property that was not very popular. In
>> order to do this I needed to make a change to the genpd framework which can be
>> seen in patch 2 and should benefit others that have client . Rather than
>> checking for zero phandle args and failing if any are present the
>> of_genpd_add_provider_simple call does not check at all and instead leaves
>> parsing and interpretation up to the platform genpd driver.
>>
>> This allows the ti_sci_pm_domains driver to parse the phandle and use the first
>> phandle cell as the sci-id rather than getting it from a separate property.
>>
>> Besides that none of the original patches have changed apart from updating the
>> year to 2017 in patches 3 and 4 and of course a small update to patch 4 to let
>> the ti_sci_pm_domains parse the phandle and extract the sci-id rather than
>> looking for the rejected ti,sci-id property.
>>
>> I did not update the "power-domain" binding document because in regards to
>> #power-domain-cells it already states "can be any value as specified by device
>> tree binding documentation of particular provider" which I think already
>> describes the change in patch 2.
> 
> I'm assuming that this will go in through the arm-soc tree.

Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
the v4 patch email, can this series go through you? We should be good to go with
v4 of the series + the small v5 update to patch 3 if Rob is ok with it.

Regards,
Dave

> 
> Thanks,
> Rafael
> 

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

* Re: [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-18 20:38       ` Rob Herring
  0 siblings, 0 replies; 67+ messages in thread
From: Rob Herring @ 2017-03-18 20:38 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Keerthy, Russell King, Tero Kristo, Sudeep Holla

On Thu, Mar 16, 2017 at 1:27 PM, Dave Gerlach <d-gerlach@ti.com> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 149 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h

Acked-by: Rob Herring <robh@kernel.org>

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

* Re: [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-18 20:38       ` Rob Herring
  0 siblings, 0 replies; 67+ messages in thread
From: Rob Herring @ 2017-03-18 20:38 UTC (permalink / raw)
  To: Dave Gerlach
  Cc: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Nishanth Menon, Keerthy,
	Russell King, Tero Kristo, Sudeep Holla

On Thu, Mar 16, 2017 at 1:27 PM, Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Dave Gerlach <d-gerlach-l0cyMroinI0@public.gmane.org>
> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 149 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h

Acked-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-03-18 20:38       ` Rob Herring
  0 siblings, 0 replies; 67+ messages in thread
From: Rob Herring @ 2017-03-18 20:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Mar 16, 2017 at 1:27 PM, Dave Gerlach <d-gerlach@ti.com> wrote:
> Add a generic power domain implementation, TI SCI PM Domains, that
> will hook into the genpd framework and allow the TI SCI protocol to
> control device power states.
>
> Also, provide macros representing each device index as understood
> by TI SCI to be used in the device node power-domain references.
> These are identifiers for the K2G devices managed by the PMMC.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
>  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
>  MAINTAINERS                                        |  2 +
>  include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
>  3 files changed, 149 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
>  create mode 100644 include/dt-bindings/genpd/k2g.h

Acked-by: Rob Herring <robh@kernel.org>

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
  2017-03-16 18:31     ` Dave Gerlach
  (?)
@ 2017-04-03 16:58       ` santosh.shilimkar
  -1 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar @ 2017-04-03 16:58 UTC (permalink / raw)
  To: Dave Gerlach, Arnd Bergmann, Olof Johansson
  Cc: Santosh Shilimkar, Rafael J. Wysocki, Ulf Hansson, Kevin Hilman,
	Rob Herring, linux-arm-kernel, linux-kernel, linux-pm,
	devicetree, Nishanth Menon, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla

Hi Dave,

On 3/16/17 11:31 AM, Dave Gerlach wrote:
> Santosh,
> On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:

[...]

>>> I did not update the "power-domain" binding document because in regards to
>>> #power-domain-cells it already states "can be any value as specified by device
>>> tree binding documentation of particular provider" which I think already
>>> describes the change in patch 2.
>>
>> I'm assuming that this will go in through the arm-soc tree.
>
> Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
> the v4 patch email, can this series go through you? We should be good to go with
> v4 of the series + the small v5 update to patch 3 if Rob is ok with it.
>
Yes I can queue this up for arm-soc. Please repost the v5 with all the
patches and acks.


Hi Arnd, Olof,
Is it ok to send this as a single pull request ? Am asking since it
is touching few topics which goes via different heads.

------------------------
Dave Gerlach (5):
   PM / Domains: Add generic data pointer to genpd data struct
   PM / Domains: Do not check if simple providers have phandle cells
   dt-bindings: Add TI SCI PM Domains
   soc: ti: Add ti_sci_pm_domains driver
   ARM: keystone: Drop PM domain support for k2g

  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
  MAINTAINERS                                        |   3 +
  arch/arm/mach-keystone/Kconfig                     |   1 +
  arch/arm/mach-keystone/pm_domain.c                 |   4 +-
  drivers/base/power/domain.c                        |   2 -
  drivers/soc/ti/Kconfig                             |  12 ++
  drivers/soc/ti/Makefile                            |   1 +
  drivers/soc/ti/ti_sci_pm_domains.c                 | 202 
+++++++++++++++++++++
  include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
  include/linux/pm_domain.h                          |   1 +
  10 files changed, 372 insertions(+), 3 deletions(-)
  create mode 100644 
Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
  create mode 100644 include/dt-bindings/genpd/k2g.h


regards,
Santosh

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

* Re: [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-04-03 16:58       ` santosh.shilimkar
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar @ 2017-04-03 16:58 UTC (permalink / raw)
  To: Dave Gerlach, Arnd Bergmann, Olof Johansson
  Cc: Nishanth Menon, devicetree, Ulf Hansson, Sudeep Holla,
	Kevin Hilman, Keerthy, linux-pm, Rafael J. Wysocki, linux-kernel,
	Tero Kristo, Russell King, Rob Herring, Santosh Shilimkar,
	linux-arm-kernel

Hi Dave,

On 3/16/17 11:31 AM, Dave Gerlach wrote:
> Santosh,
> On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:

[...]

>>> I did not update the "power-domain" binding document because in regards to
>>> #power-domain-cells it already states "can be any value as specified by device
>>> tree binding documentation of particular provider" which I think already
>>> describes the change in patch 2.
>>
>> I'm assuming that this will go in through the arm-soc tree.
>
> Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
> the v4 patch email, can this series go through you? We should be good to go with
> v4 of the series + the small v5 update to patch 3 if Rob is ok with it.
>
Yes I can queue this up for arm-soc. Please repost the v5 with all the
patches and acks.


Hi Arnd, Olof,
Is it ok to send this as a single pull request ? Am asking since it
is touching few topics which goes via different heads.

------------------------
Dave Gerlach (5):
   PM / Domains: Add generic data pointer to genpd data struct
   PM / Domains: Do not check if simple providers have phandle cells
   dt-bindings: Add TI SCI PM Domains
   soc: ti: Add ti_sci_pm_domains driver
   ARM: keystone: Drop PM domain support for k2g

  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
  MAINTAINERS                                        |   3 +
  arch/arm/mach-keystone/Kconfig                     |   1 +
  arch/arm/mach-keystone/pm_domain.c                 |   4 +-
  drivers/base/power/domain.c                        |   2 -
  drivers/soc/ti/Kconfig                             |  12 ++
  drivers/soc/ti/Makefile                            |   1 +
  drivers/soc/ti/ti_sci_pm_domains.c                 | 202 
+++++++++++++++++++++
  include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
  include/linux/pm_domain.h                          |   1 +
  10 files changed, 372 insertions(+), 3 deletions(-)
  create mode 100644 
Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
  create mode 100644 include/dt-bindings/genpd/k2g.h


regards,
Santosh

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

* [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains
@ 2017-04-03 16:58       ` santosh.shilimkar
  0 siblings, 0 replies; 67+ messages in thread
From: santosh.shilimkar at oracle.com @ 2017-04-03 16:58 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Dave,

On 3/16/17 11:31 AM, Dave Gerlach wrote:
> Santosh,
> On 03/12/2017 12:02 PM, Rafael J. Wysocki wrote:

[...]

>>> I did not update the "power-domain" binding document because in regards to
>>> #power-domain-cells it already states "can be any value as specified by device
>>> tree binding documentation of particular provider" which I think already
>>> describes the change in patch 2.
>>
>> I'm assuming that this will go in through the arm-soc tree.
>
> Assuming that Rob is OK with the v5 of patch 3 that I just sent in response to
> the v4 patch email, can this series go through you? We should be good to go with
> v4 of the series + the small v5 update to patch 3 if Rob is ok with it.
>
Yes I can queue this up for arm-soc. Please repost the v5 with all the
patches and acks.


Hi Arnd, Olof,
Is it ok to send this as a single pull request ? Am asking since it
is touching few topics which goes via different heads.

------------------------
Dave Gerlach (5):
   PM / Domains: Add generic data pointer to genpd data struct
   PM / Domains: Do not check if simple providers have phandle cells
   dt-bindings: Add TI SCI PM Domains
   soc: ti: Add ti_sci_pm_domains driver
   ARM: keystone: Drop PM domain support for k2g

  .../devicetree/bindings/soc/ti/sci-pm-domain.txt   |  59 ++++++
  MAINTAINERS                                        |   3 +
  arch/arm/mach-keystone/Kconfig                     |   1 +
  arch/arm/mach-keystone/pm_domain.c                 |   4 +-
  drivers/base/power/domain.c                        |   2 -
  drivers/soc/ti/Kconfig                             |  12 ++
  drivers/soc/ti/Makefile                            |   1 +
  drivers/soc/ti/ti_sci_pm_domains.c                 | 202 
+++++++++++++++++++++
  include/dt-bindings/genpd/k2g.h                    |  90 +++++++++
  include/linux/pm_domain.h                          |   1 +
  10 files changed, 372 insertions(+), 3 deletions(-)
  create mode 100644 
Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
  create mode 100644 drivers/soc/ti/ti_sci_pm_domains.c
  create mode 100644 include/dt-bindings/genpd/k2g.h


regards,
Santosh

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
  2017-04-04  2:47 [PATCH v5 " Dave Gerlach
  2017-04-04  2:47   ` Dave Gerlach
@ 2017-04-04  2:47   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-04-04  2:47 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring, Arnd Bergmann
  Cc: linux-arm-kernel, linux-kernel, linux-pm, devicetree,
	Nishanth Menon, Dave Gerlach, Keerthy, Russell King, Tero Kristo,
	Sudeep Holla, Olof Johansson

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v4->v5: Drop last sentence of first paragraph to avoid describing Linux
	driver behavior in dt binding doc.

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index 1b0a87ffffab..ae43f3e95b47 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12382,6 +12382,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-04-04  2:47   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-04-04  2:47 UTC (permalink / raw)
  To: Ulf Hansson, Rafael J . Wysocki, Kevin Hilman, Santosh Shilimkar,
	Rob Herring, Arnd Bergmann
  Cc: Nishanth Menon, devicetree, Dave Gerlach, Keerthy, linux-pm,
	linux-kernel, Tero Kristo, Russell King, Sudeep Holla,
	Olof Johansson, linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v4->v5: Drop last sentence of first paragraph to avoid describing Linux
	driver behavior in dt binding doc.

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial@02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index 1b0a87ffffab..ae43f3e95b47 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12382,6 +12382,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

* [PATCH v5 3/5] dt-bindings: Add TI SCI PM Domains
@ 2017-04-04  2:47   ` Dave Gerlach
  0 siblings, 0 replies; 67+ messages in thread
From: Dave Gerlach @ 2017-04-04  2:47 UTC (permalink / raw)
  To: linux-arm-kernel

Add a generic power domain implementation, TI SCI PM Domains, that
will hook into the genpd framework and allow the TI SCI protocol to
control device power states.

Also, provide macros representing each device index as understood
by TI SCI to be used in the device node power-domain references.
These are identifiers for the K2G devices managed by the PMMC.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
v4->v5: Drop last sentence of first paragraph to avoid describing Linux
	driver behavior in dt binding doc.

 .../devicetree/bindings/soc/ti/sci-pm-domain.txt   | 57 ++++++++++++++
 MAINTAINERS                                        |  2 +
 include/dt-bindings/genpd/k2g.h                    | 90 ++++++++++++++++++++++
 3 files changed, 149 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
 create mode 100644 include/dt-bindings/genpd/k2g.h

diff --git a/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
new file mode 100644
index 000000000000..c705db07d820
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
@@ -0,0 +1,57 @@
+Texas Instruments TI-SCI Generic Power Domain
+---------------------------------------------
+
+Some TI SoCs contain a system controller (like the PMMC, etc...) that is
+responsible for controlling the state of the IPs that are present.
+Communication between the host processor running an OS and the system
+controller happens through a protocol known as TI-SCI [1].
+
+[1] Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
+
+PM Domain Node
+==============
+The PM domain node represents the global PM domain managed by the PMMC, which
+in this case is the implementation as documented by the generic PM domain
+bindings in Documentation/devicetree/bindings/power/power_domain.txt.  Because
+this relies on the TI SCI protocol to communicate with the PMMC it must be a
+child of the pmmc node.
+
+Required Properties:
+--------------------
+- compatible: should be "ti,sci-pm-domain"
+- #power-domain-cells: Must be 1 so that an id can be provided in each
+		       device node.
+
+Example (K2G):
+-------------
+	pmmc: pmmc {
+		compatible = "ti,k2g-sci";
+		...
+
+		k2g_pds: power-controller {
+			compatible = "ti,sci-pm-domain";
+			#power-domain-cells = <1>;
+		};
+	};
+
+PM Domain Consumers
+===================
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node
+along with an index representing the device id to be passed to the PMMC
+for device control.
+
+Required Properties:
+--------------------
+- power-domains: phandle pointing to the corresponding PM domain node
+		 and an ID representing the device.
+
+See dt-bindings/genpd/k2g.h for the list of valid identifiers for k2g.
+
+Example (K2G):
+--------------------
+	uart0: serial at 02530c00 {
+		compatible = "ns16550a";
+		...
+		power-domains = <&k2g_pds K2G_DEV_UART0>;
+	};
diff --git a/MAINTAINERS b/MAINTAINERS
index 1b0a87ffffab..ae43f3e95b47 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12382,6 +12382,8 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
 F:	drivers/firmware/ti_sci*
 F:	include/linux/soc/ti/ti_sci_protocol.h
+F:	Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
+F:	include/dt-bindings/genpd/k2g.h
 
 THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
 M:	Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/dt-bindings/genpd/k2g.h b/include/dt-bindings/genpd/k2g.h
new file mode 100644
index 000000000000..1f31f17e19eb
--- /dev/null
+++ b/include/dt-bindings/genpd/k2g.h
@@ -0,0 +1,90 @@
+/*
+ * TI K2G SoC Device definitions
+ *
+ * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_GENPD_K2G_H
+#define _DT_BINDINGS_GENPD_K2G_H
+
+/* Documented in http://processors.wiki.ti.com/index.php/TISCI */
+
+#define K2G_DEV_PMMC0			0x0000
+#define K2G_DEV_MLB0			0x0001
+#define K2G_DEV_DSS0			0x0002
+#define K2G_DEV_MCBSP0			0x0003
+#define K2G_DEV_MCASP0			0x0004
+#define K2G_DEV_MCASP1			0x0005
+#define K2G_DEV_MCASP2			0x0006
+#define K2G_DEV_DCAN0			0x0008
+#define K2G_DEV_DCAN1			0x0009
+#define K2G_DEV_EMIF0			0x000a
+#define K2G_DEV_MMCHS0			0x000b
+#define K2G_DEV_MMCHS1			0x000c
+#define K2G_DEV_GPMC0			0x000d
+#define K2G_DEV_ELM0			0x000e
+#define K2G_DEV_SPI0			0x0010
+#define K2G_DEV_SPI1			0x0011
+#define K2G_DEV_SPI2			0x0012
+#define K2G_DEV_SPI3			0x0013
+#define K2G_DEV_ICSS0			0x0014
+#define K2G_DEV_ICSS1			0x0015
+#define K2G_DEV_USB0			0x0016
+#define K2G_DEV_USB1			0x0017
+#define K2G_DEV_NSS0			0x0018
+#define K2G_DEV_PCIE0			0x0019
+#define K2G_DEV_GPIO0			0x001b
+#define K2G_DEV_GPIO1			0x001c
+#define K2G_DEV_TIMER64_0		0x001d
+#define K2G_DEV_TIMER64_1		0x001e
+#define K2G_DEV_TIMER64_2		0x001f
+#define K2G_DEV_TIMER64_3		0x0020
+#define K2G_DEV_TIMER64_4		0x0021
+#define K2G_DEV_TIMER64_5		0x0022
+#define K2G_DEV_TIMER64_6		0x0023
+#define K2G_DEV_MSGMGR0			0x0025
+#define K2G_DEV_BOOTCFG0		0x0026
+#define K2G_DEV_ARM_BOOTROM0		0x0027
+#define K2G_DEV_DSP_BOOTROM0		0x0029
+#define K2G_DEV_DEBUGSS0		0x002b
+#define K2G_DEV_UART0			0x002c
+#define K2G_DEV_UART1			0x002d
+#define K2G_DEV_UART2			0x002e
+#define K2G_DEV_EHRPWM0			0x002f
+#define K2G_DEV_EHRPWM1			0x0030
+#define K2G_DEV_EHRPWM2			0x0031
+#define K2G_DEV_EHRPWM3			0x0032
+#define K2G_DEV_EHRPWM4			0x0033
+#define K2G_DEV_EHRPWM5			0x0034
+#define K2G_DEV_EQEP0			0x0035
+#define K2G_DEV_EQEP1			0x0036
+#define K2G_DEV_EQEP2			0x0037
+#define K2G_DEV_ECAP0			0x0038
+#define K2G_DEV_ECAP1			0x0039
+#define K2G_DEV_I2C0			0x003a
+#define K2G_DEV_I2C1			0x003b
+#define K2G_DEV_I2C2			0x003c
+#define K2G_DEV_EDMA0			0x003f
+#define K2G_DEV_SEMAPHORE0		0x0040
+#define K2G_DEV_INTC0			0x0041
+#define K2G_DEV_GIC0			0x0042
+#define K2G_DEV_QSPI0			0x0043
+#define K2G_DEV_ARM_64B_COUNTER0	0x0044
+#define K2G_DEV_TETRIS0			0x0045
+#define K2G_DEV_CGEM0			0x0046
+#define K2G_DEV_MSMC0			0x0047
+#define K2G_DEV_CBASS0			0x0049
+#define K2G_DEV_BOARD0			0x004c
+#define K2G_DEV_EDMA1			0x004f
+
+#endif
-- 
2.11.0

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

end of thread, other threads:[~2017-04-04  2:50 UTC | newest]

Thread overview: 67+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-07 10:22 [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains Dave Gerlach
2017-03-07 10:22 ` Dave Gerlach
2017-03-07 10:22 ` Dave Gerlach
2017-03-07 10:22 ` [PATCH v4 1/5] PM / Domains: Add generic data pointer to genpd data struct Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-10 21:19   ` Kevin Hilman
2017-03-10 21:19     ` Kevin Hilman
2017-03-10 21:19     ` Kevin Hilman
2017-03-07 10:22 ` [PATCH v4 2/5] PM / Domains: Do not check if simple providers have phandle cells Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-10 21:18   ` Kevin Hilman
2017-03-10 21:18     ` Kevin Hilman
2017-03-10 21:18     ` Kevin Hilman
2017-03-13  8:20   ` Ulf Hansson
2017-03-13  8:20     ` Ulf Hansson
2017-03-13  8:20     ` Ulf Hansson
2017-03-07 10:22 ` [PATCH v4 3/5] dt-bindings: Add TI SCI PM Domains Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-12 17:21   ` santosh.shilimkar
2017-03-12 17:21     ` santosh.shilimkar at oracle.com
2017-03-12 17:21     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
2017-03-13  8:21   ` Ulf Hansson
2017-03-13  8:21     ` Ulf Hansson
2017-03-13  8:21     ` Ulf Hansson
2017-03-15 17:53   ` Rob Herring
2017-03-15 17:53     ` Rob Herring
2017-03-15 20:14     ` Dave Gerlach
2017-03-15 20:14       ` Dave Gerlach
2017-03-15 20:14       ` Dave Gerlach
2017-03-16 18:27   ` [PATCH v5 " Dave Gerlach
2017-03-16 18:27     ` Dave Gerlach
2017-03-16 18:27     ` Dave Gerlach
2017-03-18 20:38     ` Rob Herring
2017-03-18 20:38       ` Rob Herring
2017-03-18 20:38       ` Rob Herring
2017-03-07 10:22 ` [PATCH v4 4/5] soc: ti: Add ti_sci_pm_domains driver Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-10 21:22   ` Kevin Hilman
2017-03-10 21:22     ` Kevin Hilman
2017-03-10 21:22     ` Kevin Hilman
2017-03-12 17:20   ` santosh.shilimkar
2017-03-12 17:20     ` santosh.shilimkar at oracle.com
2017-03-13  8:21   ` Ulf Hansson
2017-03-13  8:21     ` Ulf Hansson
2017-03-13  8:21     ` Ulf Hansson
2017-03-07 10:22 ` [PATCH v4 5/5] ARM: keystone: Drop PM domain support for k2g Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-07 10:22   ` Dave Gerlach
2017-03-12 17:20   ` santosh.shilimkar
2017-03-12 17:20     ` santosh.shilimkar at oracle.com
2017-03-12 17:20     ` santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA
2017-03-12 17:02 ` [PATCH v4 0/5] ARM: K2G: Add support for TI-SCI Generic PM Domains Rafael J. Wysocki
2017-03-12 17:02   ` Rafael J. Wysocki
2017-03-12 17:02   ` Rafael J. Wysocki
2017-03-16 18:31   ` Dave Gerlach
2017-03-16 18:31     ` Dave Gerlach
2017-03-16 18:31     ` Dave Gerlach
2017-04-03 16:58     ` santosh.shilimkar
2017-04-03 16:58       ` santosh.shilimkar at oracle.com
2017-04-03 16:58       ` santosh.shilimkar
2017-04-04  2:47 [PATCH v5 " Dave Gerlach
2017-04-04  2:47 ` [PATCH v5 3/5] dt-bindings: Add TI SCI " Dave Gerlach
2017-04-04  2:47   ` Dave Gerlach
2017-04-04  2:47   ` Dave Gerlach

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.