* [PATCH 1/3] Documentation: DT: qcom_hidma: bump HW revision for the bugfixed HW @ 2017-11-06 17:26 Sinan Kaya 2017-11-06 17:26 ` [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision Sinan Kaya 2017-11-06 17:26 ` [PATCH 3/3] dmaengine: qcom_hidma: add identity register support Sinan Kaya 0 siblings, 2 replies; 7+ messages in thread From: Sinan Kaya @ 2017-11-06 17:26 UTC (permalink / raw) To: linux-arm-kernel 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] 7+ messages in thread
* [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision 2017-11-06 17:26 [PATCH 1/3] Documentation: DT: qcom_hidma: bump HW revision for the bugfixed HW Sinan Kaya @ 2017-11-06 17:26 ` Sinan Kaya 2017-11-06 18:03 ` Robin Murphy 2017-11-06 17:26 ` [PATCH 3/3] dmaengine: qcom_hidma: add identity register support Sinan Kaya 1 sibling, 1 reply; 7+ messages in thread From: Sinan Kaya @ 2017-11-06 17:26 UTC (permalink / raw) To: linux-arm-kernel Add support for probing the newer HW. Signed-off-by: Sinan Kaya <okaya@codeaurora.org> --- drivers/dma/qcom/hidma.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c index e366985..29d6aaa 100644 --- a/drivers/dma/qcom/hidma.c +++ b/drivers/dma/qcom/hidma.c @@ -749,9 +749,13 @@ static bool hidma_msi_capable(struct device *dev) return false; ret = strcmp(of_compat, "qcom,hidma-1.1"); + if (ret) + ret = strcmp(of_compat, "qcom,hidma-1.2"); } else { #ifdef CONFIG_ACPI ret = strcmp(acpi_device_hid(adev), "QCOM8062"); + if (ret) + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); #endif } return ret == 0; @@ -954,6 +958,7 @@ static int hidma_remove(struct platform_device *pdev) static const struct acpi_device_id hidma_acpi_ids[] = { {"QCOM8061"}, {"QCOM8062"}, + {"QCOM8063"}, {}, }; MODULE_DEVICE_TABLE(acpi, hidma_acpi_ids); @@ -962,6 +967,7 @@ 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.2",}, {}, }; MODULE_DEVICE_TABLE(of, hidma_match); -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision 2017-11-06 17:26 ` [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision Sinan Kaya @ 2017-11-06 18:03 ` Robin Murphy 2017-11-06 18:15 ` Sinan Kaya 0 siblings, 1 reply; 7+ messages in thread From: Robin Murphy @ 2017-11-06 18:03 UTC (permalink / raw) To: linux-arm-kernel On 06/11/17 17:26, Sinan Kaya wrote: > Add support for probing the newer HW. > > Signed-off-by: Sinan Kaya <okaya@codeaurora.org> > --- > drivers/dma/qcom/hidma.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c > index e366985..29d6aaa 100644 > --- a/drivers/dma/qcom/hidma.c > +++ b/drivers/dma/qcom/hidma.c > @@ -749,9 +749,13 @@ static bool hidma_msi_capable(struct device *dev) > return false; > > ret = strcmp(of_compat, "qcom,hidma-1.1"); > + if (ret) > + ret = strcmp(of_compat, "qcom,hidma-1.2"); > } else { > #ifdef CONFIG_ACPI > ret = strcmp(acpi_device_hid(adev), "QCOM8062"); > + if (ret) > + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); This string-juggling looks to have already hit the point at which it doesn't scale well - it would be a lot nicer to make use of of_device_get_match_data() and the ACPI equivalent to abstract the version-specific data appropriately. Robin. > #endif > } > return ret == 0; > @@ -954,6 +958,7 @@ static int hidma_remove(struct platform_device *pdev) > static const struct acpi_device_id hidma_acpi_ids[] = { > {"QCOM8061"}, > {"QCOM8062"}, > + {"QCOM8063"}, > {}, > }; > MODULE_DEVICE_TABLE(acpi, hidma_acpi_ids); > @@ -962,6 +967,7 @@ 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.2",}, > {}, > }; > MODULE_DEVICE_TABLE(of, hidma_match); > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision 2017-11-06 18:03 ` Robin Murphy @ 2017-11-06 18:15 ` Sinan Kaya 2017-11-06 22:09 ` Sinan Kaya 0 siblings, 1 reply; 7+ messages in thread From: Sinan Kaya @ 2017-11-06 18:15 UTC (permalink / raw) To: linux-arm-kernel On 11/6/2017 1:03 PM, Robin Murphy wrote: >> #ifdef CONFIG_ACPI >> ret = strcmp(acpi_device_hid(adev), "QCOM8062"); >> + if (ret) >> + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); > This string-juggling looks to have already hit the point at which it > doesn't scale well - it would be a lot nicer to make use of > of_device_get_match_data() and the ACPI equivalent to abstract the > version-specific data appropriately. Sure, let me do some research. -- 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] 7+ messages in thread
* [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision 2017-11-06 18:15 ` Sinan Kaya @ 2017-11-06 22:09 ` Sinan Kaya 2017-11-08 5:47 ` Vinod Koul 0 siblings, 1 reply; 7+ messages in thread From: Sinan Kaya @ 2017-11-06 22:09 UTC (permalink / raw) To: linux-arm-kernel On 11/6/2017 1:15 PM, Sinan Kaya wrote: > On 11/6/2017 1:03 PM, Robin Murphy wrote: >>> #ifdef CONFIG_ACPI >>> ret = strcmp(acpi_device_hid(adev), "QCOM8062"); >>> + if (ret) >>> + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); >> This string-juggling looks to have already hit the point at which it >> doesn't scale well - it would be a lot nicer to make use of >> of_device_get_match_data() and the ACPI equivalent to abstract the >> version-specific data appropriately. > > Sure, let me do some research. > I just wanted to double check here. This is what I can do: 1. Maintain different match tables for different driver capabilities. 2. Instead of doing open-coded strcmp, I can do match against different tables using acpi_match_device/of_match_device. Hope this works for you. -- 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] 7+ messages in thread
* [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision 2017-11-06 22:09 ` Sinan Kaya @ 2017-11-08 5:47 ` Vinod Koul 0 siblings, 0 replies; 7+ messages in thread From: Vinod Koul @ 2017-11-08 5:47 UTC (permalink / raw) To: linux-arm-kernel On Mon, Nov 06, 2017 at 05:09:29PM -0500, Sinan Kaya wrote: > On 11/6/2017 1:15 PM, Sinan Kaya wrote: > > On 11/6/2017 1:03 PM, Robin Murphy wrote: > >>> #ifdef CONFIG_ACPI > >>> ret = strcmp(acpi_device_hid(adev), "QCOM8062"); > >>> + if (ret) > >>> + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); > >> This string-juggling looks to have already hit the point at which it > >> doesn't scale well - it would be a lot nicer to make use of > >> of_device_get_match_data() and the ACPI equivalent to abstract the > >> version-specific data appropriately. > > > > Sure, let me do some research. > > > > I just wanted to double check here. > > This is what I can do: > 1. Maintain different match tables for different driver capabilities. > 2. Instead of doing open-coded strcmp, I can do match against different tables > using acpi_match_device/of_match_device. > > Hope this works for you. Sounds better to me. You should have common match where capabilities are same. -- ~Vinod ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] dmaengine: qcom_hidma: add identity register support 2017-11-06 17:26 [PATCH 1/3] Documentation: DT: qcom_hidma: bump HW revision for the bugfixed HW Sinan Kaya 2017-11-06 17:26 ` [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision Sinan Kaya @ 2017-11-06 17:26 ` Sinan Kaya 1 sibling, 0 replies; 7+ messages in thread From: Sinan Kaya @ 2017-11-06 17:26 UTC (permalink / raw) To: linux-arm-kernel 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 | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c index 29d6aaa..50640c9 100644 --- a/drivers/dma/qcom/hidma.c +++ b/drivers/dma/qcom/hidma.c @@ -761,6 +761,27 @@ static bool hidma_msi_capable(struct device *dev) return ret == 0; } +static bool hidma_identity_capable(struct device *dev) +{ + 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; + + ret = strcmp(of_compat, "qcom,hidma-1.2"); + } else { +#ifdef CONFIG_ACPI + ret = strcmp(acpi_device_hid(adev), "QCOM8063"); +#endif + } + return ret == 0; +} + static int hidma_probe(struct platform_device *pdev) { struct hidma_dev *dmadev; @@ -852,7 +873,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_identity_capable(&pdev->dev)) + 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)); -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-11-08 5:47 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-11-06 17:26 [PATCH 1/3] Documentation: DT: qcom_hidma: bump HW revision for the bugfixed HW Sinan Kaya 2017-11-06 17:26 ` [PATCH 2/3] dmaengine: qcom_hidma: add support for the new revision Sinan Kaya 2017-11-06 18:03 ` Robin Murphy 2017-11-06 18:15 ` Sinan Kaya 2017-11-06 22:09 ` Sinan Kaya 2017-11-08 5:47 ` Vinod Koul 2017-11-06 17:26 ` [PATCH 3/3] 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).