From: Srinivas Kandagatla <redacted>
Hi Andy,
I did hit few issues while trying out SLIMBus BAM on DB820c, this BAM instance
is remotely controlled and powered up after ADSP is booted using QMI commands.
Firstly some of the master registers are written even when the BAM is remotely
controlled, and secondly reading registers when bam is not ready yet.
These 4 patches address these issues, there are few more issues like doing PM
in simillar usecase, these will be addressed soon.
Thanks,
Srini
Changes since v2:
return clk error in default case, suggested by Bjorn
Srinivas Kandagatla (5):
dmaengine: qcom: bam_dma: make bam clk optional
dt-bindings: dmaengine: bam_dma: add remote controlled bindings
dmaengine: qcom: bam_dma: get num-channels and num-ees from dt
dmaengine: qcom: bam_dma: do not write to global regs in remote mode
dmaengine: qcom: bam_dma: disable runtime pm on remote controlled
.../devicetree/bindings/dma/qcom_bam_dma.txt | 4 ++
drivers/dma/qcom/bam_dma.c | 59 +++++++++++++++++-----
2 files changed, 49 insertions(+), 14 deletions(-)
--
2.15.1
From: Srinivas Kandagatla <redacted>
BAM_DESC_CNT_TRSHLD register is global register, which can only be written
when BAM is in master mode, So check the mode of operation before writing
it.
Without this check SOC's xPU would catch such access and crash the system.
First noticed on DB820c while testing SLIMBus BAM.
Signed-off-by: Srinivas Kandagatla <redacted>
---
drivers/dma/qcom/bam_dma.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
From: Srinivas Kandagatla <redacted>
Remotely controlled BAM instance should not do any power management from
CPU side, as cpu can not reliably say if the BAM is busy or not.
Disable it for such instances.
Signed-off-by: Srinivas Kandagatla <redacted>
---
drivers/dma/qcom/bam_dma.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
From: Srinivas Kandagatla <redacted>
When Linux is master of BAM, it can directly read registers to know number
of supported channels, however when its remotely controlled reading these
registers would trigger a crash if the BAM is not yet initialized or
powered up on the remote side.
This patch allows driver to read num-channels and num-ees from Device Tree
for remotely controlled BAM.
Signed-off-by: Srinivas Kandagatla <redacted>
---
drivers/dma/qcom/bam_dma.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
@@ -1128,15 +1129,19 @@ static int bam_init(struct bam_device *bdev)u32val;/* read revision and configuration information */-val=readl_relaxed(bam_addr(bdev,0,BAM_REVISION))>>NUM_EES_SHIFT;-val&=NUM_EES_MASK;+if(!bdev->num_ees){+val=readl_relaxed(bam_addr(bdev,0,BAM_REVISION));+bdev->num_ees=(val>>NUM_EES_SHIFT)&NUM_EES_MASK;+}/* check that configured EE is within range */-if(bdev->ee>=val)+if(bdev->ee>=bdev->num_ees)return-EINVAL;-val=readl_relaxed(bam_addr(bdev,0,BAM_NUM_PIPES));-bdev->num_channels=val&BAM_NUM_PIPES_MASK;+if(!bdev->num_channels){+val=readl_relaxed(bam_addr(bdev,0,BAM_NUM_PIPES));+bdev->num_channels=val&BAM_NUM_PIPES_MASK;+}if(bdev->controlled_remotely)return0;
@@ -1232,6 +1237,18 @@ static int bam_dma_probe(struct platform_device *pdev)bdev->controlled_remotely=of_property_read_bool(pdev->dev.of_node,"qcom,controlled-remotely");+if(bdev->controlled_remotely){+ret=of_property_read_u32(pdev->dev.of_node,"num-channels",+&bdev->num_channels);+if(ret)+dev_err(bdev->dev,"num-channels unspecified in dt\n");++ret=of_property_read_u32(pdev->dev.of_node,"qcom,num-ees",+&bdev->num_ees);+if(ret)+dev_err(bdev->dev,"num-ees unspecified in dt\n");+}+bdev->bamclk=devm_clk_get(bdev->dev,"bam_clk");if(IS_ERR(bdev->bamclk)){if(!bdev->controlled_remotely)
--
2.15.1
--
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
@@ -15,6 +15,10 @@ Required properties: the secure world. - qcom,controlled-remotely : optional, indicates that the bam is controlled by remote proccessor i.e. execution environment.+- num-channels : optional, indicates supported number of DMA channels in a+ remotely controlled bam.+- qcom,num-ees : optional, indicates supported number of Execution Environments+ in a remotely controlled bam. Example:
From: Srinivas Kandagatla <redacted>
When BAM is remotely controlled it does not sound correct to control
its clk on Linux side. Make it optional, so that its not mandatory
for remote controlled BAM instances.
Signed-off-by: Srinivas Kandagatla <redacted>
---
drivers/dma/qcom/bam_dma.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
On Thu, Feb 15, 2018 at 12:25:06PM +0000, srinivas.kandagatla@linaro.org wrote:
From: Srinivas Kandagatla <redacted>
Hi Andy,
I did hit few issues while trying out SLIMBus BAM on DB820c, this BAM instance
is remotely controlled and powered up after ADSP is booted using QMI commands.
Firstly some of the master registers are written even when the BAM is remotely
controlled, and secondly reading registers when bam is not ready yet.
These 4 patches address these issues, there are few more issues like doing PM
in simillar usecase, these will be addressed soon.