linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-04 22:14   ` Rob Herring
  2017-12-02  4:27 ` [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function Sinan Kaya
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Vinod Koul,
	Rob Herring, Mark Rutland, open list

A new version of the HIDMA IP has been released with bug fixes. Bumping the
hardware version to differentiate from others.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt b/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
index 55492c2..5d93d6d 100644
--- a/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
+++ b/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
@@ -47,8 +47,8 @@ When the OS is not in control of the management interface (i.e. it's a guest),
 the channel nodes appear on their own, not under a management node.
 
 Required properties:
-- compatible: must contain "qcom,hidma-1.0" for initial HW or "qcom,hidma-1.1"
-for MSI capable HW.
+- compatible: must contain "qcom,hidma-1.0" for initial HW or
+  "qcom,hidma-1.1"/"qcom,hidma-1.2" for MSI capable HW.
 - reg: Addresses for the transfer and event channel
 - interrupts: Should contain the event interrupt
 - desc-count: Number of asynchronous requests this channel can handle
-- 
1.9.1

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

* [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
  2017-12-02  4:27 ` [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-04 21:59   ` Rafael J. Wysocki
  2017-12-02  4:27 ` [PATCH V5 3/7] device property: Introduce a common API to fetch device match data Sinan Kaya
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Rafael J. Wysocki,
	Len Brown, open list:ACPI, open list

OF has of_device_get_match_data() function to extract driver specific data
structure. Add a similar function for ACPI.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/acpi/bus.c   | 13 +++++++++++++
 include/linux/acpi.h |  8 ++++++++
 2 files changed, 21 insertions(+)

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 4d0979e..05d8d9a 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -785,6 +785,19 @@ const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
 }
 EXPORT_SYMBOL_GPL(acpi_match_device);
 
+void *acpi_get_match_data(struct acpi_device *device,
+			  const struct acpi_device_id *ids)
+{
+	const struct acpi_device_id *match;
+
+	match =  __acpi_match_device(device, ids, NULL);
+	if (!match)
+		return NULL;
+
+	return (void *)match->driver_data;
+}
+EXPORT_SYMBOL_GPL(acpi_get_match_data);
+
 int acpi_match_device_ids(struct acpi_device *device,
 			  const struct acpi_device_id *ids)
 {
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 502af53..196bc7a 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -584,6 +584,8 @@ extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
 					       const struct device *dev);
 
+void *acpi_get_match_data(struct acpi_device *device,
+			  const struct acpi_device_id *ids);
 extern bool acpi_driver_match_device(struct device *dev,
 				     const struct device_driver *drv);
 int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *);
@@ -755,6 +757,12 @@ static inline const struct acpi_device_id *acpi_match_device(
 	return NULL;
 }
 
+static inline void *acpi_get_match_data(struct acpi_device *device,
+					const struct acpi_device_id *ids)
+{
+	return NULL;
+}
+
 static inline bool acpi_driver_match_device(struct device *dev,
 					    const struct device_driver *drv)
 {
-- 
1.9.1

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

* [PATCH V5 3/7] device property: Introduce a common API to fetch device match data
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
  2017-12-02  4:27 ` [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW Sinan Kaya
  2017-12-02  4:27 ` [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-02  4:27 ` [PATCH V5 4/7] OF: properties: Implement get_match_data() callback Sinan Kaya
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Greg Kroah-Hartman,
	Rafael J. Wysocki, Len Brown, Mika Westerberg, Sakari Ailus,
	Dmitry Torokhov, Rob Herring, Kieran Bingham, open list,
	open list:ACPI

There is an OF/ACPI function to obtain the driver data. We want to hide
OF/ACPI details from the device drivers and abstract following the device
family of functions.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/base/property.c  | 7 +++++++
 include/linux/fwnode.h   | 4 ++++
 include/linux/property.h | 2 ++
 3 files changed, 13 insertions(+)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index 7ed99c1..dfc53af 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1335,3 +1335,10 @@ int fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 	return fwnode_call_int_op(fwnode, graph_parse_endpoint, endpoint);
 }
 EXPORT_SYMBOL(fwnode_graph_parse_endpoint);
+
+void *device_get_match_data(struct device *dev)
+{
+	return fwnode_call_ptr_op(dev_fwnode(dev), get_match_data,
+				  dev->driver);
+}
+EXPORT_SYMBOL_GPL(device_get_match_data);
diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index 0c35b6c..6e5e1dd 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -15,6 +15,7 @@
 #include <linux/types.h>
 
 struct fwnode_operations;
+struct device_driver;
 
 struct fwnode_handle {
 	struct fwnode_handle *secondary;
@@ -66,6 +67,7 @@ struct fwnode_reference_args {
  *			       endpoint node.
  * @graph_get_port_parent: Return the parent node of a port node.
  * @graph_parse_endpoint: Parse endpoint for port and endpoint id.
+ * @get_match_data: Return the driver match data.
  */
 struct fwnode_operations {
 	void (*get)(struct fwnode_handle *fwnode);
@@ -101,6 +103,8 @@ struct fwnode_operations {
 	(*graph_get_port_parent)(struct fwnode_handle *fwnode);
 	int (*graph_parse_endpoint)(const struct fwnode_handle *fwnode,
 				    struct fwnode_endpoint *endpoint);
+	void *(*get_match_data)(const struct fwnode_handle *fwnode,
+				const struct device_driver *drv);
 };
 
 #define fwnode_has_op(fwnode, op)				\
diff --git a/include/linux/property.h b/include/linux/property.h
index 6bebee1..01fa55b 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -275,6 +275,8 @@ int device_add_properties(struct device *dev,
 
 enum dev_dma_attr device_get_dma_attr(struct device *dev);
 
+void *device_get_match_data(struct device *dev);
+
 int device_get_phy_mode(struct device *dev);
 
 void *device_get_mac_address(struct device *dev, char *addr, int alen);
-- 
1.9.1

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

* [PATCH V5 4/7] OF: properties: Implement get_match_data() callback
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
                   ` (2 preceding siblings ...)
  2017-12-02  4:27 ` [PATCH V5 3/7] device property: Introduce a common API to fetch device match data Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-04 16:23   ` Rob Herring
  2017-12-02  4:27 ` [PATCH V5 5/7] ACPI: " Sinan Kaya
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Rob Herring,
	Frank Rowand, open list

Now that we have a get_match_data() callback as part of the firmware node,
implement the OF specific piece for it.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/of/property.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index 264c355..adcde1a 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -981,6 +981,22 @@ static int of_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 	return 0;
 }
 
+void *of_fwnode_get_match_data(const struct fwnode_handle *fwnode,
+			       const struct device_driver *drv)
+{
+	const struct device_node *node = to_of_node(fwnode);
+	const struct of_device_id *match;
+
+	if (!node)
+		return NULL;
+
+	match = of_match_node(drv->of_match_table, node);
+	if (!match)
+		return NULL;
+
+	return (void *)match->data;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -996,5 +1012,6 @@ static int of_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 	.graph_get_port_parent = of_fwnode_graph_get_port_parent,
 	.graph_parse_endpoint = of_fwnode_graph_parse_endpoint,
+	.get_match_data = of_fwnode_get_match_data,
 };
 EXPORT_SYMBOL_GPL(of_fwnode_ops);
-- 
1.9.1

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

* [PATCH V5 5/7] ACPI: properties: Implement get_match_data() callback
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
                   ` (3 preceding siblings ...)
  2017-12-02  4:27 ` [PATCH V5 4/7] OF: properties: Implement get_match_data() callback Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-02  4:27 ` [PATCH V5 6/7] dmaengine: qcom_hidma: Add support for the new revision Sinan Kaya
  2017-12-02  4:27 ` [PATCH V5 7/7] dmaengine: qcom_hidma: Add identity register support Sinan Kaya
  6 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Rafael J. Wysocki,
	Len Brown, open list:ACPI, open list

Now that we have a get_match_data() callback as part of the firmware node,
implement the ACPI specific piece for it.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/acpi/property.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index e26ea20..49dd50b 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1271,6 +1271,17 @@ static int acpi_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 	return 0;
 }
 
+static void *acpi_fwnode_get_match_data(const struct fwnode_handle *fwnode,
+					const struct device_driver *drv)
+{
+	struct acpi_device *adev = to_acpi_device_node(fwnode);
+
+	if (!adev)
+		return NULL;
+
+	return acpi_get_match_data(adev, drv->acpi_match_table);
+}
+
 #define DECLARE_ACPI_FWNODE_OPS(ops) \
 	const struct fwnode_operations ops = {				\
 		.device_is_available = acpi_fwnode_device_is_available, \
@@ -1289,6 +1300,7 @@ static int acpi_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 			acpi_fwnode_graph_get_remote_endpoint,		\
 		.graph_get_port_parent = acpi_fwnode_get_parent,	\
 		.graph_parse_endpoint = acpi_fwnode_graph_parse_endpoint, \
+		.get_match_data = acpi_fwnode_get_match_data,		\
 	};								\
 	EXPORT_SYMBOL_GPL(ops)
 
-- 
1.9.1

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

* [PATCH V5 6/7] dmaengine: qcom_hidma: Add support for the new revision
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
                   ` (4 preceding siblings ...)
  2017-12-02  4:27 ` [PATCH V5 5/7] ACPI: " Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  2017-12-02  4:27 ` [PATCH V5 7/7] dmaengine: qcom_hidma: Add identity register support Sinan Kaya
  6 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Andy Gross,
	David Brown, Vinod Koul, Dan Williams,
	open list:ARM/QUALCOMM SUPPORT, open list

Add support for probing the newer HW and also organize MSI capable hardware
into an array for maintenance reasons.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/dma/qcom/hidma.c | 34 +++++++++++++---------------------
 1 file changed, 13 insertions(+), 21 deletions(-)

diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c
index e366985..c146c6d 100644
--- a/drivers/dma/qcom/hidma.c
+++ b/drivers/dma/qcom/hidma.c
@@ -50,6 +50,7 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/of_dma.h>
+#include <linux/of_device.h>
 #include <linux/property.h>
 #include <linux/delay.h>
 #include <linux/acpi.h>
@@ -104,6 +105,9 @@ static void hidma_free(struct hidma_dev *dmadev)
 module_param(nr_desc_prm, uint, 0644);
 MODULE_PARM_DESC(nr_desc_prm, "number of descriptors (default: 0)");
 
+enum hidma_cap {
+	HIDMA_MSI_CAP = 1,
+};
 
 /* process completed descriptors */
 static void hidma_process_completed(struct hidma_chan *mchan)
@@ -736,25 +740,12 @@ static int hidma_request_msi(struct hidma_dev *dmadev,
 #endif
 }
 
-static bool hidma_msi_capable(struct device *dev)
+static bool hidma_test_capability(struct device *dev, enum hidma_cap test_cap)
 {
-	struct acpi_device *adev = ACPI_COMPANION(dev);
-	const char *of_compat;
-	int ret = -EINVAL;
-
-	if (!adev || acpi_disabled) {
-		ret = device_property_read_string(dev, "compatible",
-						  &of_compat);
-		if (ret)
-			return false;
+	enum hidma_cap cap;
 
-		ret = strcmp(of_compat, "qcom,hidma-1.1");
-	} else {
-#ifdef CONFIG_ACPI
-		ret = strcmp(acpi_device_hid(adev), "QCOM8062");
-#endif
-	}
-	return ret == 0;
+	cap = (enum hidma_cap) device_get_match_data(dev);
+	return cap ? ((cap & test_cap) > 0) : 0;
 }
 
 static int hidma_probe(struct platform_device *pdev)
@@ -834,8 +825,7 @@ static int hidma_probe(struct platform_device *pdev)
 	 * Determine the MSI capability of the platform. Old HW doesn't
 	 * support MSI.
 	 */
-	msi = hidma_msi_capable(&pdev->dev);
-
+	msi = hidma_test_capability(&pdev->dev, HIDMA_MSI_CAP);
 	device_property_read_u32(&pdev->dev, "desc-count",
 				 &dmadev->nr_descriptors);
 
@@ -953,7 +943,8 @@ static int hidma_remove(struct platform_device *pdev)
 #if IS_ENABLED(CONFIG_ACPI)
 static const struct acpi_device_id hidma_acpi_ids[] = {
 	{"QCOM8061"},
-	{"QCOM8062"},
+	{"QCOM8062", HIDMA_MSI_CAP},
+	{"QCOM8063", HIDMA_MSI_CAP},
 	{},
 };
 MODULE_DEVICE_TABLE(acpi, hidma_acpi_ids);
@@ -961,7 +952,8 @@ static int hidma_remove(struct platform_device *pdev)
 
 static const struct of_device_id hidma_match[] = {
 	{.compatible = "qcom,hidma-1.0",},
-	{.compatible = "qcom,hidma-1.1",},
+	{.compatible = "qcom,hidma-1.1", .data = (void *)(HIDMA_MSI_CAP),},
+	{.compatible = "qcom,hidma-1.2", .data = (void *)(HIDMA_MSI_CAP),},
 	{},
 };
 MODULE_DEVICE_TABLE(of, hidma_match);
-- 
1.9.1

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

* [PATCH V5 7/7] dmaengine: qcom_hidma: Add identity register support
       [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
                   ` (5 preceding siblings ...)
  2017-12-02  4:27 ` [PATCH V5 6/7] dmaengine: qcom_hidma: Add support for the new revision Sinan Kaya
@ 2017-12-02  4:27 ` Sinan Kaya
  6 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-02  4:27 UTC (permalink / raw)
  To: dmaengine, timur, devicetree
  Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Andy Gross,
	David Brown, Dan Williams, Vinod Koul,
	open list:ARM/QUALCOMM SUPPORT, open list

The location for destination event channel register has been relocated from
offset 0x28 to 0x40. Update the code accordingly.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/dma/qcom/hidma.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c
index c146c6d..963cc52 100644
--- a/drivers/dma/qcom/hidma.c
+++ b/drivers/dma/qcom/hidma.c
@@ -107,6 +107,7 @@ static void hidma_free(struct hidma_dev *dmadev)
 
 enum hidma_cap {
 	HIDMA_MSI_CAP = 1,
+	HIDMA_IDENTITY_CAP,
 };
 
 /* process completed descriptors */
@@ -838,7 +839,10 @@ static int hidma_probe(struct platform_device *pdev)
 	if (!dmadev->nr_descriptors)
 		dmadev->nr_descriptors = HIDMA_NR_DEFAULT_DESC;
 
-	dmadev->chidx = readl(dmadev->dev_trca + 0x28);
+	if (hidma_test_capability(&pdev->dev, HIDMA_IDENTITY_CAP))
+		dmadev->chidx = readl(dmadev->dev_trca + 0x40);
+	else
+		dmadev->chidx = readl(dmadev->dev_trca + 0x28);
 
 	/* Set DMA mask to 64 bits. */
 	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
@@ -944,7 +948,7 @@ static int hidma_remove(struct platform_device *pdev)
 static const struct acpi_device_id hidma_acpi_ids[] = {
 	{"QCOM8061"},
 	{"QCOM8062", HIDMA_MSI_CAP},
-	{"QCOM8063", HIDMA_MSI_CAP},
+	{"QCOM8063", (HIDMA_MSI_CAP | HIDMA_IDENTITY_CAP)},
 	{},
 };
 MODULE_DEVICE_TABLE(acpi, hidma_acpi_ids);
@@ -953,7 +957,8 @@ static int hidma_remove(struct platform_device *pdev)
 static const struct of_device_id hidma_match[] = {
 	{.compatible = "qcom,hidma-1.0",},
 	{.compatible = "qcom,hidma-1.1", .data = (void *)(HIDMA_MSI_CAP),},
-	{.compatible = "qcom,hidma-1.2", .data = (void *)(HIDMA_MSI_CAP),},
+	{.compatible = "qcom,hidma-1.2",
+	 .data = (void *)(HIDMA_MSI_CAP | HIDMA_IDENTITY_CAP),},
 	{},
 };
 MODULE_DEVICE_TABLE(of, hidma_match);
-- 
1.9.1

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

* Re: [PATCH V5 4/7] OF: properties: Implement get_match_data() callback
  2017-12-02  4:27 ` [PATCH V5 4/7] OF: properties: Implement get_match_data() callback Sinan Kaya
@ 2017-12-04 16:23   ` Rob Herring
  2017-12-04 18:05     ` Sinan Kaya
  0 siblings, 1 reply; 14+ messages in thread
From: Rob Herring @ 2017-12-04 16:23 UTC (permalink / raw)
  To: Sinan Kaya
  Cc: open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Timur Tabi,
	devicetree, linux-arm-msm, linux-arm-kernel, Frank Rowand,
	open list

On Fri, Dec 1, 2017 at 10:27 PM, Sinan Kaya <okaya@codeaurora.org> wrote:
> Now that we have a get_match_data() callback as part of the firmware node,
> implement the OF specific piece for it.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
>  drivers/of/property.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
>
> diff --git a/drivers/of/property.c b/drivers/of/property.c
> index 264c355..adcde1a 100644
> --- a/drivers/of/property.c
> +++ b/drivers/of/property.c
> @@ -981,6 +981,22 @@ static int of_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
>         return 0;
>  }
>
> +void *of_fwnode_get_match_data(const struct fwnode_handle *fwnode,
> +                              const struct device_driver *drv)
> +{
> +       const struct device_node *node = to_of_node(fwnode);
> +       const struct of_device_id *match;
> +
> +       if (!node)
> +               return NULL;

of_match_node checks this.

> +
> +       match = of_match_node(drv->of_match_table, node);
> +       if (!match)
> +               return NULL;
> +
> +       return (void *)match->data;

Don't need a cast here.

of_device_get_match_data() already does most of this, but getting a
device ptr from fwnode_handle may not be possible?

Rob

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

* Re: [PATCH V5 4/7] OF: properties: Implement get_match_data() callback
  2017-12-04 16:23   ` Rob Herring
@ 2017-12-04 18:05     ` Sinan Kaya
  2017-12-04 22:25       ` Rob Herring
  0 siblings, 1 reply; 14+ messages in thread
From: Sinan Kaya @ 2017-12-04 18:05 UTC (permalink / raw)
  To: Rob Herring
  Cc: open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Timur Tabi,
	devicetree, linux-arm-msm, linux-arm-kernel, Frank Rowand,
	open list

On 12/4/2017 11:23 AM, Rob Herring wrote:
> On Fri, Dec 1, 2017 at 10:27 PM, Sinan Kaya <okaya@codeaurora.org> wrote:
>> Now that we have a get_match_data() callback as part of the firmware node,
>> implement the OF specific piece for it.
>>
>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
>> ---
>>  drivers/of/property.c | 17 +++++++++++++++++
>>  1 file changed, 17 insertions(+)
>>
..

>>
>> +void *of_fwnode_get_match_data(const struct fwnode_handle *fwnode,
>> +                              const struct device_driver *drv)
>> +{
>> +       const struct device_node *node = to_of_node(fwnode);
>> +       const struct of_device_id *match;
>> +
>> +       if (!node)
>> +               return NULL;
> 
> of_match_node checks this.

I see a check for the matches argument but not for the node argument.
Am I missing something?

> 
>> +
>> +       match = of_match_node(drv->of_match_table, node);
>> +       if (!match)
>> +               return NULL;
>> +
>> +       return (void *)match->data;
> 
> Don't need a cast here.

I can fix this.

> 
> of_device_get_match_data() already does most of this, but getting a
> device ptr from fwnode_handle may not be possible?

I couldn't figure out how to do that. Do you have a suggestion?
I have been looking for examples with no luck.

> 
> Rob
> 


-- 
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

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

* Re: [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function
  2017-12-02  4:27 ` [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function Sinan Kaya
@ 2017-12-04 21:59   ` Rafael J. Wysocki
  2017-12-04 22:01     ` Sinan Kaya
  0 siblings, 1 reply; 14+ messages in thread
From: Rafael J. Wysocki @ 2017-12-04 21:59 UTC (permalink / raw)
  To: Sinan Kaya
  Cc: dmaengine, Timur Tabi, devicetree, linux-arm-msm,
	linux-arm-kernel, Rafael J. Wysocki, Len Brown, open list:ACPI,
	open list

On Sat, Dec 2, 2017 at 5:27 AM, Sinan Kaya <okaya@codeaurora.org> wrote:
> OF has of_device_get_match_data() function to extract driver specific data
> structure. Add a similar function for ACPI.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>

Haven't I ACKed this already?

Anyway, please resend the whole series with a CC to linux-acpi.

Thanks,
Rafael

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

* Re: [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function
  2017-12-04 21:59   ` Rafael J. Wysocki
@ 2017-12-04 22:01     ` Sinan Kaya
  0 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-04 22:01 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: dmaengine, Timur Tabi, devicetree, linux-arm-msm,
	linux-arm-kernel, Rafael J. Wysocki, Len Brown, open list:ACPI,
	open list

On 12/4/2017 4:59 PM, Rafael J. Wysocki wrote:
> On Sat, Dec 2, 2017 at 5:27 AM, Sinan Kaya <okaya@codeaurora.org> wrote:
>> OF has of_device_get_match_data() function to extract driver specific data
>> structure. Add a similar function for ACPI.
>>
>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> 
> Haven't I ACKed this already?
> 
> Anyway, please resend the whole series with a CC to linux-acpi.

Yeah, you acked the previous one. Then, I changed the calling parameter from
struct device to struct acpi_device and removed your ACK.


-- 
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

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

* Re: [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW
  2017-12-02  4:27 ` [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW Sinan Kaya
@ 2017-12-04 22:14   ` Rob Herring
  2017-12-05 17:13     ` Sinan Kaya
  0 siblings, 1 reply; 14+ messages in thread
From: Rob Herring @ 2017-12-04 22:14 UTC (permalink / raw)
  To: Sinan Kaya
  Cc: dmaengine, timur, devicetree, linux-arm-msm, linux-arm-kernel,
	Vinod Koul, Mark Rutland, open list

On Fri, Dec 01, 2017 at 11:27:38PM -0500, Sinan Kaya wrote:
> A new version of the HIDMA IP has been released with bug fixes. Bumping the
> hardware version to differentiate from others.
> 
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
>  Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt b/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
> index 55492c2..5d93d6d 100644
> --- a/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
> +++ b/Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
> @@ -47,8 +47,8 @@ When the OS is not in control of the management interface (i.e. it's a guest),
>  the channel nodes appear on their own, not under a management node.
>  
>  Required properties:
> -- compatible: must contain "qcom,hidma-1.0" for initial HW or "qcom,hidma-1.1"
> -for MSI capable HW.
> +- compatible: must contain "qcom,hidma-1.0" for initial HW or
> +  "qcom,hidma-1.1"/"qcom,hidma-1.2" for MSI capable HW.

Hopefully 1.2 corresponds to some actual version numbering and not just 
something you made up. I'd really rather have SoC based compatible 
strings unless you have dozens of SoCs for each version. I'll probably 
just say the same thing again when 1.3 or 2.0 gets added...

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

>  - reg: Addresses for the transfer and event channel
>  - interrupts: Should contain the event interrupt
>  - desc-count: Number of asynchronous requests this channel can handle
> -- 
> 1.9.1
> 

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

* Re: [PATCH V5 4/7] OF: properties: Implement get_match_data() callback
  2017-12-04 18:05     ` Sinan Kaya
@ 2017-12-04 22:25       ` Rob Herring
  0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2017-12-04 22:25 UTC (permalink / raw)
  To: Sinan Kaya
  Cc: open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Timur Tabi,
	devicetree, linux-arm-msm, linux-arm-kernel, Frank Rowand,
	open list

On Mon, Dec 04, 2017 at 01:05:51PM -0500, Sinan Kaya wrote:
> On 12/4/2017 11:23 AM, Rob Herring wrote:
> > On Fri, Dec 1, 2017 at 10:27 PM, Sinan Kaya <okaya@codeaurora.org> wrote:
> >> Now that we have a get_match_data() callback as part of the firmware node,
> >> implement the OF specific piece for it.
> >>
> >> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> >> ---
> >>  drivers/of/property.c | 17 +++++++++++++++++
> >>  1 file changed, 17 insertions(+)
> >>
> ..
> 
> >>
> >> +void *of_fwnode_get_match_data(const struct fwnode_handle *fwnode,
> >> +                              const struct device_driver *drv)
> >> +{
> >> +       const struct device_node *node = to_of_node(fwnode);
> >> +       const struct of_device_id *match;
> >> +
> >> +       if (!node)
> >> +               return NULL;
> > 
> > of_match_node checks this.
> 
> I see a check for the matches argument but not for the node argument.
> Am I missing something?

Ah yes, you are right.

> 
> > 
> >> +
> >> +       match = of_match_node(drv->of_match_table, node);
> >> +       if (!match)
> >> +               return NULL;
> >> +
> >> +       return (void *)match->data;
> > 
> > Don't need a cast here.
> 
> I can fix this.
> 
> > 
> > of_device_get_match_data() already does most of this, but getting a
> > device ptr from fwnode_handle may not be possible?
> 
> I couldn't figure out how to do that. Do you have a suggestion?
> I have been looking for examples with no luck.

Change the property API to pass struct device instead. That's maybe not 
worth it.

Rob

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

* Re: [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW
  2017-12-04 22:14   ` Rob Herring
@ 2017-12-05 17:13     ` Sinan Kaya
  0 siblings, 0 replies; 14+ messages in thread
From: Sinan Kaya @ 2017-12-05 17:13 UTC (permalink / raw)
  To: Rob Herring
  Cc: dmaengine, timur, devicetree, linux-arm-msm, linux-arm-kernel,
	Vinod Koul, Mark Rutland, open list

On 12/4/2017 5:14 PM, Rob Herring wrote:
> Hopefully 1.2 corresponds to some actual version numbering and not just 
> something you made up. I'd really rather have SoC based compatible 
> strings unless you have dozens of SoCs for each version. I'll probably 
> just say the same thing again when 1.3 or 2.0 gets added...
> 

No, these are coming from the HW. They are user visible. 

[  107.167207] hidma-mgmt QCOM8060:00: HW rev: 1.2 @ 0x0000ffff8b800000 with 6 physical channels

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

Thanks

-- 
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

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

end of thread, other threads:[~2017-12-05 17:13 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1512188864-773-1-git-send-email-okaya@codeaurora.org>
2017-12-02  4:27 ` [PATCH V5 1/7] Documentation: DT: qcom_hidma: Bump HW revision for the bugfixed HW Sinan Kaya
2017-12-04 22:14   ` Rob Herring
2017-12-05 17:13     ` Sinan Kaya
2017-12-02  4:27 ` [PATCH V5 2/7] ACPI / bus: Introduce acpi_get_match_data() function Sinan Kaya
2017-12-04 21:59   ` Rafael J. Wysocki
2017-12-04 22:01     ` Sinan Kaya
2017-12-02  4:27 ` [PATCH V5 3/7] device property: Introduce a common API to fetch device match data Sinan Kaya
2017-12-02  4:27 ` [PATCH V5 4/7] OF: properties: Implement get_match_data() callback Sinan Kaya
2017-12-04 16:23   ` Rob Herring
2017-12-04 18:05     ` Sinan Kaya
2017-12-04 22:25       ` Rob Herring
2017-12-02  4:27 ` [PATCH V5 5/7] ACPI: " Sinan Kaya
2017-12-02  4:27 ` [PATCH V5 6/7] dmaengine: qcom_hidma: Add support for the new revision Sinan Kaya
2017-12-02  4:27 ` [PATCH V5 7/7] dmaengine: qcom_hidma: Add identity register support Sinan Kaya

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).