HI Thara, On Mon, 10 May 2021 at 18:52, Thara Gopinath <thara.gopinath@xxxxxxxxxx> wrote: > > > > On 5/5/21 5:37 PM, Bhupesh Sharma wrote: > > Since the Qualcomm qce crypto driver needs the BAM dma driver to be > > setup first (to allow crypto operations), it makes sense to defer > > the qce crypto driver probing in case the BAM dma driver is not yet > > probed. > > > > This fixes the qce probe failure issues when both qce and BMA dma > > are compiled as static part of the kernel. > > > > Cc: Thara Gopinath <thara.gopinath@xxxxxxxxxx> > > Cc: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > > Cc: Andy Gross <agross@xxxxxxxxxx> > > Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> > > Cc: David S. Miller <davem@xxxxxxxxxxxxx> > > Cc: Stephen Boyd <sboyd@xxxxxxxxxx> > > Cc: Michael Turquette <mturquette@xxxxxxxxxxxx> > > Cc: Vinod Koul <vkoul@xxxxxxxxxx> > > Cc: dmaengine@xxxxxxxxxxxxxxx > > Cc: linux-clk@xxxxxxxxxxxxxxx > > Cc: linux-crypto@xxxxxxxxxxxxxxx > > Cc: devicetree@xxxxxxxxxxxxxxx > > Cc: linux-kernel@xxxxxxxxxxxxxxx > > Cc: bhupesh.linux@xxxxxxxxx > > Signed-off-by: Bhupesh Sharma <bhupesh.sharma@xxxxxxxxxx> > > --- > > drivers/crypto/qce/core.c | 4 ++++ > > drivers/dma/qcom/bam_dma.c | 7 +++++++ > > 2 files changed, 11 insertions(+) > > > > diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c > > index 9a7d7ef94687..3e742e9911fa 100644 > > --- a/drivers/crypto/qce/core.c > > +++ b/drivers/crypto/qce/core.c > > @@ -15,6 +15,7 @@ > > #include <linux/types.h> > > #include <crypto/algapi.h> > > #include <crypto/internal/hash.h> > > +#include <soc/qcom/bam_dma.h> > > > > #include "core.h" > > #include "cipher.h" > > @@ -201,6 +202,9 @@ static int qce_crypto_probe(struct platform_device *pdev) > > of_match_device(qce_crypto_of_match, &pdev->dev); > > int ret; > > > > + /* qce driver requires BAM dma driver to be setup first */ > > + if (!bam_is_probed()) > > + return -EPROBE_DEFER; > > Hi Bhupesh, > > You don't need this here. qce_dma_request returns -EPROBE_DEFER if the > dma controller is not probed yet. Thanks for the review. Yes, we can just use qce_dma_request() return value to return from the qce probe() function early, in case the bam dma channels are not available yet. I have made the changes in v3 and will post it for review shortly. Regards, Bhupesh > > > > qce = devm_kzalloc(dev, sizeof(*qce), GFP_KERNEL); > > if (!qce) > > diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c > > index 2bc3b7c7ee5a..c854fcc82dbf 100644 > > --- a/drivers/dma/qcom/bam_dma.c > > +++ b/drivers/dma/qcom/bam_dma.c > > @@ -935,6 +935,12 @@ static void bam_channel_init(struct bam_device *bdev, struct bam_chan *bchan, > > INIT_LIST_HEAD(&bchan->desc_list); > > } > > > > +bool bam_is_probed(void) > > +{ > > + return bam_probed; > > +} > > +EXPORT_SYMBOL_GPL(bam_is_probed); > > + > > static const struct of_device_id bam_of_match[] = { > > { .compatible = "qcom,bam-v1.3.0", .data = &bam_v1_3_reg_info }, > > { .compatible = "qcom,bam-v1.4.0", .data = &bam_v1_4_reg_info }, > > @@ -1084,6 +1090,7 @@ static int bam_dma_probe(struct platform_device *pdev) > > if (ret) > > goto err_unregister_dma; > > > > + bam_probed = true; > > if (!bdev->bamclk) { > > pm_runtime_disable(&pdev->dev); > > return 0; > > >