* [PATCH v3 0/3] Add compatible for Tegra234 GPCDMA @ 2022-07-11 15:45 Akhil R 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Akhil R @ 2022-07-11 15:45 UTC (permalink / raw) To: dmaengine, jonathanh, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree Cc: akhilrajeev Tegra234 supports recovery of a channel hung in pause flush mode. This could happen when the client bus gets corrupted or if the end device ceases to send/receive data. Add a separate compatible for Tegra234 so that this scenario can be handled in the driver. v2->v3: * Updated binding docs and device tree compatible v1->v2: * split device tree change to a different patch. * Update commit message Akhil R (3): dt-bindings: dmaengine: Add compatible for Tegra234 dmaengine: tegra: Add terminate() for Tegra234 arm64: tegra: Update compatible for Tegra234 GPCDMA .../bindings/dma/nvidia,tegra186-gpc-dma.yaml | 4 +++ arch/arm64/boot/dts/nvidia/tegra234.dtsi | 4 +-- drivers/dma/tegra186-gpc-dma.c | 26 +++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 2022-07-11 15:45 [PATCH v3 0/3] Add compatible for Tegra234 GPCDMA Akhil R @ 2022-07-11 15:45 ` Akhil R 2022-07-13 15:21 ` Jon Hunter 2022-07-18 19:16 ` Rob Herring 2022-07-11 15:45 ` [PATCH v3 2/3] dmaengine: tegra: Add terminate() " Akhil R 2022-07-11 15:45 ` [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA Akhil R 2 siblings, 2 replies; 9+ messages in thread From: Akhil R @ 2022-07-11 15:45 UTC (permalink / raw) To: dmaengine, jonathanh, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree Cc: akhilrajeev Document the compatible string used by GPCDMA controller for Tegra234. Signed-off-by: Akhil R <akhilrajeev@nvidia.com> --- .../devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml index 9dd1476d1849..399edcd5cecf 100644 --- a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml +++ b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml @@ -26,6 +26,10 @@ properties: - const: nvidia,tegra194-gpcdma - const: nvidia,tegra186-gpcdma + - items: + - const: nvidia,tegra234-gpcdma + - const: nvidia,tegra186-gpcdma + "#dma-cells": const: 1 -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R @ 2022-07-13 15:21 ` Jon Hunter 2022-07-18 19:16 ` Rob Herring 1 sibling, 0 replies; 9+ messages in thread From: Jon Hunter @ 2022-07-13 15:21 UTC (permalink / raw) To: Akhil R, dmaengine, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree On 11/07/2022 16:45, Akhil R wrote: > Document the compatible string used by GPCDMA controller for Tegra234. > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > --- > .../devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > index 9dd1476d1849..399edcd5cecf 100644 > --- a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > +++ b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > @@ -26,6 +26,10 @@ properties: > - const: nvidia,tegra194-gpcdma > - const: nvidia,tegra186-gpcdma > > + - items: > + - const: nvidia,tegra234-gpcdma > + - const: nvidia,tegra186-gpcdma > + > "#dma-cells": > const: 1 > Reviewed-by: Jon Hunter <jonathanh@nvidia.com> Cheers Jon -- nvpublic ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R 2022-07-13 15:21 ` Jon Hunter @ 2022-07-18 19:16 ` Rob Herring 2022-07-19 7:41 ` Akhil R 1 sibling, 1 reply; 9+ messages in thread From: Rob Herring @ 2022-07-18 19:16 UTC (permalink / raw) To: Akhil R Cc: dmaengine, jonathanh, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, devicetree On Mon, Jul 11, 2022 at 09:15:34PM +0530, Akhil R wrote: > Document the compatible string used by GPCDMA controller for Tegra234. > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > --- > .../devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > index 9dd1476d1849..399edcd5cecf 100644 > --- a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > +++ b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > @@ -26,6 +26,10 @@ properties: > - const: nvidia,tegra194-gpcdma > - const: nvidia,tegra186-gpcdma > > + - items: > + - const: nvidia,tegra234-gpcdma This can be added to the above entry changing it from a const to enum. > + - const: nvidia,tegra186-gpcdma > + > "#dma-cells": > const: 1 > > -- > 2.17.1 > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 2022-07-18 19:16 ` Rob Herring @ 2022-07-19 7:41 ` Akhil R 0 siblings, 0 replies; 9+ messages in thread From: Akhil R @ 2022-07-19 7:41 UTC (permalink / raw) To: Rob Herring Cc: dmaengine, Jonathan Hunter, Laxman Dewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, devicetree > On Mon, Jul 11, 2022 at 09:15:34PM +0530, Akhil R wrote: > > Document the compatible string used by GPCDMA controller for Tegra234. > > > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > > --- > > .../devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc- > dma.yaml b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc- > dma.yaml > > index 9dd1476d1849..399edcd5cecf 100644 > > --- a/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc-dma.yaml > > +++ b/Documentation/devicetree/bindings/dma/nvidia,tegra186-gpc- > dma.yaml > > @@ -26,6 +26,10 @@ properties: > > - const: nvidia,tegra194-gpcdma > > - const: nvidia,tegra186-gpcdma > > > > + - items: > > + - const: nvidia,tegra234-gpcdma > > This can be added to the above entry changing it from a const to enum. > So, it could look like this, correct? compatible: oneOf: - const: nvidia,tegra186-gpcdma - items: - enum: - nvidia,tegra234-gpcdma - nvidia,tegra194-gpcdma - const: nvidia,tegra186-gpcdma Tried dt_binding_check and dtbs_check with this change and did not see any error. Regards, Akhil -- nvpublic ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/3] dmaengine: tegra: Add terminate() for Tegra234 2022-07-11 15:45 [PATCH v3 0/3] Add compatible for Tegra234 GPCDMA Akhil R 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R @ 2022-07-11 15:45 ` Akhil R 2022-07-13 15:22 ` Jon Hunter 2022-07-11 15:45 ` [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA Akhil R 2 siblings, 1 reply; 9+ messages in thread From: Akhil R @ 2022-07-11 15:45 UTC (permalink / raw) To: dmaengine, jonathanh, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree Cc: akhilrajeev In certain cases where the DMA client bus gets corrupted or if the end device ceases to send/receive data, DMA can wait indefinitely for the data to be received/sent. Attempting to terminate the transfer will put the DMA in pause flush mode and it remains there. The channel is irrecoverable once this pause times out in Tegra194 and earlier chips. Whereas, from Tegra234, it can be recovered by disabling the channel and reprograming it. Hence add a new terminate() function that ignores the outcome of dma_pause() so that terminate_all() can proceed to disable the channel. Signed-off-by: Akhil R <akhilrajeev@nvidia.com> --- drivers/dma/tegra186-gpc-dma.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/dma/tegra186-gpc-dma.c b/drivers/dma/tegra186-gpc-dma.c index 05cd451f541d..fa9bda4a2bc6 100644 --- a/drivers/dma/tegra186-gpc-dma.c +++ b/drivers/dma/tegra186-gpc-dma.c @@ -157,8 +157,8 @@ * If any burst is in flight and DMA paused then this is the time to complete * on-flight burst and update DMA status register. */ -#define TEGRA_GPCDMA_BURST_COMPLETE_TIME 20 -#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT 100 +#define TEGRA_GPCDMA_BURST_COMPLETE_TIME 10 +#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT 5000 /* 5 msec */ /* Channel base address offset from GPCDMA base address */ #define TEGRA_GPCDMA_CHANNEL_BASE_ADD_OFFSET 0x20000 @@ -432,6 +432,17 @@ static int tegra_dma_device_resume(struct dma_chan *dc) return 0; } +static inline int tegra_dma_pause_noerr(struct tegra_dma_channel *tdc) +{ + /* Return 0 irrespective of PAUSE status. + * This is useful to recover channels that can exit out of flush + * state when the channel is disabled. + */ + + tegra_dma_pause(tdc); + return 0; +} + static void tegra_dma_disable(struct tegra_dma_channel *tdc) { u32 csr, status; @@ -1292,6 +1303,14 @@ static const struct tegra_dma_chip_data tegra194_dma_chip_data = { .terminate = tegra_dma_pause, }; +static const struct tegra_dma_chip_data tegra234_dma_chip_data = { + .nr_channels = 31, + .channel_reg_size = SZ_64K, + .max_dma_count = SZ_1G, + .hw_support_pause = true, + .terminate = tegra_dma_pause_noerr, +}; + static const struct of_device_id tegra_dma_of_match[] = { { .compatible = "nvidia,tegra186-gpcdma", @@ -1299,6 +1318,9 @@ static const struct of_device_id tegra_dma_of_match[] = { }, { .compatible = "nvidia,tegra194-gpcdma", .data = &tegra194_dma_chip_data, + }, { + .compatible = "nvidia,tegra234-gpcdma", + .data = &tegra234_dma_chip_data, }, { }, }; -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/3] dmaengine: tegra: Add terminate() for Tegra234 2022-07-11 15:45 ` [PATCH v3 2/3] dmaengine: tegra: Add terminate() " Akhil R @ 2022-07-13 15:22 ` Jon Hunter 0 siblings, 0 replies; 9+ messages in thread From: Jon Hunter @ 2022-07-13 15:22 UTC (permalink / raw) To: Akhil R, dmaengine, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree On 11/07/2022 16:45, Akhil R wrote: > In certain cases where the DMA client bus gets corrupted or if the > end device ceases to send/receive data, DMA can wait indefinitely > for the data to be received/sent. Attempting to terminate the transfer > will put the DMA in pause flush mode and it remains there. > > The channel is irrecoverable once this pause times out in Tegra194 and > earlier chips. Whereas, from Tegra234, it can be recovered by disabling > the channel and reprograming it. > > Hence add a new terminate() function that ignores the outcome of > dma_pause() so that terminate_all() can proceed to disable the channel. > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > --- > drivers/dma/tegra186-gpc-dma.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/drivers/dma/tegra186-gpc-dma.c b/drivers/dma/tegra186-gpc-dma.c > index 05cd451f541d..fa9bda4a2bc6 100644 > --- a/drivers/dma/tegra186-gpc-dma.c > +++ b/drivers/dma/tegra186-gpc-dma.c > @@ -157,8 +157,8 @@ > * If any burst is in flight and DMA paused then this is the time to complete > * on-flight burst and update DMA status register. > */ > -#define TEGRA_GPCDMA_BURST_COMPLETE_TIME 20 > -#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT 100 > +#define TEGRA_GPCDMA_BURST_COMPLETE_TIME 10 > +#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT 5000 /* 5 msec */ > > /* Channel base address offset from GPCDMA base address */ > #define TEGRA_GPCDMA_CHANNEL_BASE_ADD_OFFSET 0x20000 > @@ -432,6 +432,17 @@ static int tegra_dma_device_resume(struct dma_chan *dc) > return 0; > } > > +static inline int tegra_dma_pause_noerr(struct tegra_dma_channel *tdc) > +{ > + /* Return 0 irrespective of PAUSE status. > + * This is useful to recover channels that can exit out of flush > + * state when the channel is disabled. > + */ > + > + tegra_dma_pause(tdc); > + return 0; > +} > + > static void tegra_dma_disable(struct tegra_dma_channel *tdc) > { > u32 csr, status; > @@ -1292,6 +1303,14 @@ static const struct tegra_dma_chip_data tegra194_dma_chip_data = { > .terminate = tegra_dma_pause, > }; > > +static const struct tegra_dma_chip_data tegra234_dma_chip_data = { > + .nr_channels = 31, > + .channel_reg_size = SZ_64K, > + .max_dma_count = SZ_1G, > + .hw_support_pause = true, > + .terminate = tegra_dma_pause_noerr, > +}; > + > static const struct of_device_id tegra_dma_of_match[] = { > { > .compatible = "nvidia,tegra186-gpcdma", > @@ -1299,6 +1318,9 @@ static const struct of_device_id tegra_dma_of_match[] = { > }, { > .compatible = "nvidia,tegra194-gpcdma", > .data = &tegra194_dma_chip_data, > + }, { > + .compatible = "nvidia,tegra234-gpcdma", > + .data = &tegra234_dma_chip_data, > }, { > }, > }; Reviewed-by: Jon Hunter <jonathanh@nvidia.com> Cheers Jon -- nvpublic ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA 2022-07-11 15:45 [PATCH v3 0/3] Add compatible for Tegra234 GPCDMA Akhil R 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R 2022-07-11 15:45 ` [PATCH v3 2/3] dmaengine: tegra: Add terminate() " Akhil R @ 2022-07-11 15:45 ` Akhil R 2022-07-13 15:22 ` Jon Hunter 2 siblings, 1 reply; 9+ messages in thread From: Akhil R @ 2022-07-11 15:45 UTC (permalink / raw) To: dmaengine, jonathanh, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree Cc: akhilrajeev Use the compatible specific to Tegra234 for GPCDMA to support additional features. Signed-off-by: Akhil R <akhilrajeev@nvidia.com> --- arch/arm64/boot/dts/nvidia/tegra234.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts/nvidia/tegra234.dtsi index cf611eff7f6b..c3d2e48994d1 100644 --- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi @@ -22,8 +22,8 @@ ranges = <0x0 0x0 0x0 0x40000000>; gpcdma: dma-controller@2600000 { - compatible = "nvidia,tegra194-gpcdma", - "nvidia,tegra186-gpcdma"; + compatible = "nvidia,tegra234-gpcdma", + "nvidia,tegra186-gpcdma"; reg = <0x2600000 0x210000>; resets = <&bpmp TEGRA234_RESET_GPCDMA>; reset-names = "gpcdma"; -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA 2022-07-11 15:45 ` [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA Akhil R @ 2022-07-13 15:22 ` Jon Hunter 0 siblings, 0 replies; 9+ messages in thread From: Jon Hunter @ 2022-07-13 15:22 UTC (permalink / raw) To: Akhil R, dmaengine, ldewangan, linux-kernel, linux-tegra, p.zabel, thierry.reding, vkoul, robh+dt, devicetree On 11/07/2022 16:45, Akhil R wrote: > Use the compatible specific to Tegra234 for GPCDMA to support > additional features. > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > --- > arch/arm64/boot/dts/nvidia/tegra234.dtsi | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts/nvidia/tegra234.dtsi > index cf611eff7f6b..c3d2e48994d1 100644 > --- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi > +++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi > @@ -22,8 +22,8 @@ > ranges = <0x0 0x0 0x0 0x40000000>; > > gpcdma: dma-controller@2600000 { > - compatible = "nvidia,tegra194-gpcdma", > - "nvidia,tegra186-gpcdma"; > + compatible = "nvidia,tegra234-gpcdma", > + "nvidia,tegra186-gpcdma"; > reg = <0x2600000 0x210000>; > resets = <&bpmp TEGRA234_RESET_GPCDMA>; > reset-names = "gpcdma"; Reviewed-by: Jon Hunter <jonathanh@nvidia.com> Cheers Jon -- nvpublic ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-07-19 7:41 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-07-11 15:45 [PATCH v3 0/3] Add compatible for Tegra234 GPCDMA Akhil R 2022-07-11 15:45 ` [PATCH v3 1/3] dt-bindings: dmaengine: Add compatible for Tegra234 Akhil R 2022-07-13 15:21 ` Jon Hunter 2022-07-18 19:16 ` Rob Herring 2022-07-19 7:41 ` Akhil R 2022-07-11 15:45 ` [PATCH v3 2/3] dmaengine: tegra: Add terminate() " Akhil R 2022-07-13 15:22 ` Jon Hunter 2022-07-11 15:45 ` [PATCH v3 3/3] arm64: tegra: Update compatible for Tegra234 GPCDMA Akhil R 2022-07-13 15:22 ` Jon Hunter
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).