mbox series

[v7,0/9] crypto: qcom-qce: Add YAML bindings & support for newer SoCs

Message ID 20220920114051.1116441-1-bhupesh.sharma@linaro.org
Headers show
Series crypto: qcom-qce: Add YAML bindings & support for newer SoCs | expand

Message

Bhupesh Sharma Sept. 20, 2022, 11:40 a.m. UTC
Changes since v6:
=================
- v6 can be seen here: https://lore.kernel.org/linux-arm-msm/30756e6f-952f-ccf2-b493-e515ba4f0a64@linaro.org/
- As per Krzysztof's suggestion on v6, clubbed the crypto driver and
  dt-bindings changes together. Now the overall v5 patchset into 3
  separate patchsets, one each for the following areas to allow easier
  review and handling from the maintainer:
	arm-msm, crypto and dma 

Changes since v5:
=================
- v5 can be seen here: https://lore.kernel.org/lkml/20211110105922.217895-1-bhupesh.sharma@linaro.org/
- As per Bjorn's suggestion on irc, broke down the patchset into 4
  separate patchsets, one each for the following areas to allow easier
  review and handling from the maintainer:
	arm-msm, crypto, dma and devicetree 
- Addressed Rob's, Vladimir's and Bjorn's review comments received on
  v5.
- Added Tested-by from Jordan received on the v5.

Changes since v4:
=================
- v4 for sm8250 can be seen here: https://lore.kernel.org/linux-arm-msm/20211013105541.68045-1-bhupesh.sharma@linaro.org/
- v1 for sm8150 qce enablement can be seen here: https://lore.kernel.org/linux-arm-msm/20211013165823.88123-1-bhupesh.sharma@linaro.org/
- Merged the sm8150 and sm8250 enablement patches in the same patchset,
  as per suggestions from Bjorn.
- Dropped a couple of patches from v4, as these have been picked by
  Bjorn already via his tree.
- Addressed review comments from Vladimir, Thara and Rob.
- Collect Reviewed-by from Rob and Thara on some of the patches from the
  v4 patchset.

Changes since v3:
=================
- v3 can be seen here: https://lore.kernel.org/linux-arm-msm/20210519143700.27392-1-bhupesh.sharma@linaro.org/
- Dropped a couple of patches from v3, on basis of the review comments:
   ~ [PATCH 13/17] crypto: qce: core: Make clocks optional
   ~ [PATCH 15/17] crypto: qce: Convert the device found dev_dbg() to dev_info()
- Addressed review comments from Thara, Rob and Stephan Gerhold.
- Collect Reviewed-by from Rob and Thara on some of the patches from the
  v3 patchset.

Changes since v2:
=================
- v2 can be seen here: https://lore.kernel.org/dmaengine/20210505213731.538612-1-bhupesh.sharma@linaro.org/
- Drop a couple of patches from v1, which tried to address the defered
  probing of qce driver in case bam dma driver is not yet probed.
  Replace it instead with a single (simpler) patch [PATCH 16/17].
- Convert bam dma and qce crypto dt-bindings to YAML.
- Addressed review comments from Thara, Bjorn, Vinod and Rob.

Changes since v1:
=================
- v1 can be seen here: https://lore.kernel.org/linux-arm-msm/20210310052503.3618486-1-bhupesh.sharma@linaro.org/ 
- v1 did not work well as reported earlier by Dmitry, so v2 contains the following
  changes/fixes:
  ~ Enable the interconnect path b/w BAM DMA and main memory first
    before trying to access the BAM DMA registers.
  ~ Enable the interconnect path b/w qce crytpo and main memory first
    before trying to access the qce crypto registers.
  ~ Make sure to document the required and optional properties for both
    BAM DMA and qce crypto drivers.
  ~ Add a few debug related print messages in case the qce crypto driver
    passes or fails to probe.
  ~ Convert the qce crypto driver probe to a defered one in case the BAM DMA
    or the interconnect driver(s) (needed on specific Qualcomm parts) are not
    yet probed.

Qualcomm crypto engine (qce) is available on several Snapdragon SoCs.
The qce block supports hardware accelerated algorithms for encryption
and authentication. It also provides support for aes, des, 3des
encryption algorithms and sha1, sha256, hmac(sha1), hmac(sha256)
authentication algorithms.

Tested the enabled crypto algorithms with cryptsetup test utilities
on sm8150-mtp, sa8155p-adp, sm8250-mtp and RB5 boards (see [1]) and
also with crypto self-tests, including the fuzz tests
 (CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y).

[1]. https://linux.die.net/man/8/cryptsetup

Cc: herbert@gondor.apana.org.au 
Cc: thara.gopinath@gmail.com
Cc: robh@kernel.org
Cc: andersson@kernel.org
Tested-by: Jordan Crouse <jorcrous@amazon.com>

Bhupesh Sharma (7):
  dt-bindings: qcom-qce: Convert bindings to yaml
  dt-bindings: qcom-qce: Add 'interconnects' and 'interconnect-names'
  dt-bindings: qcom-qce: Add 'iommus' to optional properties
  dt-bindings: qcom-qce: Add new SoC compatible strings for qcom-qce
  crypto: qce: core: Add new compatibles for qce crypto driver
  MAINTAINERS: Add qcom-qce dt-binding file to QUALCOMM CRYPTO DRIVERS
    section
  MAINTAINERS: Add myself as a co-maintainer for Qualcomm Crypto Drivers

Thara Gopinath (2):
  crypto: qce: core: Add support to initialize interconnect path
  crypto: qce: core: Make clocks optional

 .../devicetree/bindings/crypto/qcom-qce.txt   | 25 -----
 .../devicetree/bindings/crypto/qcom-qce.yaml  | 93 +++++++++++++++++++
 MAINTAINERS                                   |  2 +
 drivers/crypto/qce/core.c                     | 31 ++++++-
 drivers/crypto/qce/core.h                     |  1 +
 5 files changed, 123 insertions(+), 29 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/crypto/qcom-qce.txt
 create mode 100644 Documentation/devicetree/bindings/crypto/qcom-qce.yaml

Comments

Krzysztof Kozlowski Sept. 20, 2022, 3:12 p.m. UTC | #1
On 20/09/2022 13:40, Bhupesh Sharma wrote:
> Since we decided to use soc specific compatibles for describing
> the qce crypto IP nodes in the device-trees, adapt the driver
> now to handle the same.
> 
> Keep the old deprecated compatible strings still in the driver,
> to ensure backward compatibility.
> 
> Cc: Bjorn Andersson <andersson@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: herbert@gondor.apana.org.au
> Tested-by: Jordan Crouse <jorcrous@amazon.com>
> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
> ---
>  drivers/crypto/qce/core.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
> index 63be06df5519..99ed540611ab 100644
> --- a/drivers/crypto/qce/core.c
> +++ b/drivers/crypto/qce/core.c
> @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
>  }
>  
>  static const struct of_device_id qce_crypto_of_match[] = {
> +	/* Following two entries are deprecated (kept only for backward compatibility) */
>  	{ .compatible = "qcom,crypto-v5.1", },
>  	{ .compatible = "qcom,crypto-v5.4", },

This is okay, so there is no ABI break.

> +	/* Add compatible strings as per updated dt-bindings, here: */
> +	{ .compatible = "qcom,ipq4019-qce", },
> +	{ .compatible = "qcom,ipq6018-qce", },
> +	{ .compatible = "qcom,ipq8074-qce", },
> +	{ .compatible = "qcom,msm8996-qce", },
> +	{ .compatible = "qcom,sdm845-qce", },
> +	{ .compatible = "qcom,sm8150-qce", },
> +	{ .compatible = "qcom,sm8250-qce", },

This is a bit odd... you have 7 devices which are simply compatible or
even the same. This should be instead one compatible.

I don't really get why do you want to deprecate "qcom,crypto-v5.1".
Commit msg only says "we decided" but I do not know who is "we" and "why
we decided like this". If you want to deprecate it, perfectly fine by
me, but please say in commit msg why you are doing it.

Best regards,
Krzysztof
Bhupesh Sharma Sept. 21, 2022, 6:16 a.m. UTC | #2
On 9/20/22 8:42 PM, Krzysztof Kozlowski wrote:
> On 20/09/2022 13:40, Bhupesh Sharma wrote:
>> Since we decided to use soc specific compatibles for describing
>> the qce crypto IP nodes in the device-trees, adapt the driver
>> now to handle the same.
>>
>> Keep the old deprecated compatible strings still in the driver,
>> to ensure backward compatibility.
>>
>> Cc: Bjorn Andersson <andersson@kernel.org>
>> Cc: Rob Herring <robh@kernel.org>
>> Cc: herbert@gondor.apana.org.au
>> Tested-by: Jordan Crouse <jorcrous@amazon.com>
>> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
>> ---
>>   drivers/crypto/qce/core.c | 9 +++++++++
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
>> index 63be06df5519..99ed540611ab 100644
>> --- a/drivers/crypto/qce/core.c
>> +++ b/drivers/crypto/qce/core.c
>> @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
>>   }
>>   
>>   static const struct of_device_id qce_crypto_of_match[] = {
>> +	/* Following two entries are deprecated (kept only for backward compatibility) */
>>   	{ .compatible = "qcom,crypto-v5.1", },
>>   	{ .compatible = "qcom,crypto-v5.4", },
> 
> This is okay, so there is no ABI break.

Great. Thanks for the confirmation.

>> +	/* Add compatible strings as per updated dt-bindings, here: */
>> +	{ .compatible = "qcom,ipq4019-qce", },
>> +	{ .compatible = "qcom,ipq6018-qce", },
>> +	{ .compatible = "qcom,ipq8074-qce", },
>> +	{ .compatible = "qcom,msm8996-qce", },
>> +	{ .compatible = "qcom,sdm845-qce", },
>> +	{ .compatible = "qcom,sm8150-qce", },
>> +	{ .compatible = "qcom,sm8250-qce", },
> 
> This is a bit odd... you have 7 devices which are simply compatible or
> even the same. This should be instead one compatible.
> 
> I don't really get why do you want to deprecate "qcom,crypto-v5.1".
> Commit msg only says "we decided" but I do not know who is "we" and "why
> we decided like this". If you want to deprecate it, perfectly fine by
> me, but please say in commit msg why you are doing it.

I understand. This patchset has been in flight for some time and hence I 
might have missed sharing some detailed information about the review 
comments and rework done along the way (in the cover letter for this 
series).

Coming back to your concern, here is the relevant background:
- Please see: 
https://lore.kernel.org/linux-arm-msm/20210316222825.GA3792517@robh.at.kernel.org/

- Rob shared some comments on the v1 series regarding the soc-specific 
compatibles. He mentioned in the above thread that 'you should stick 
with SoC specific compatibles as *everyone* else does (including most 
QCom bindings).'

- So, while I had proposed "qcom,crypto-v5.1" (for ipq6018) and 
"qcom,crypto-v5.4" (for sdm845, sm8150) etc. as the compatible(s) in the 
v1 series, I shifted to using the soc-specific compatibles from the v2 
series, onwards.

- Basically, since we are going to have newer qce IP versions available 
in near future, e.g. "qcom,crypto-v5.5" etc, and we will have 2 or more 
SoCs also sharing 1 version, these compatibles would grow and become 
more confusing. IMO, having a soc-specific compatible in such cases is 
probably a much cleaner approach.

Hope this helps answer some of your concerns and provides some relevant 
background information.

Thanks,
Bhupesh
Krzysztof Kozlowski Sept. 21, 2022, 6:27 a.m. UTC | #3
On 21/09/2022 08:16, Bhupesh Sharma wrote:
> 
> 
> On 9/20/22 8:42 PM, Krzysztof Kozlowski wrote:
>> On 20/09/2022 13:40, Bhupesh Sharma wrote:
>>> Since we decided to use soc specific compatibles for describing
>>> the qce crypto IP nodes in the device-trees, adapt the driver
>>> now to handle the same.
>>>
>>> Keep the old deprecated compatible strings still in the driver,
>>> to ensure backward compatibility.
>>>
>>> Cc: Bjorn Andersson <andersson@kernel.org>
>>> Cc: Rob Herring <robh@kernel.org>
>>> Cc: herbert@gondor.apana.org.au
>>> Tested-by: Jordan Crouse <jorcrous@amazon.com>
>>> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
>>> ---
>>>   drivers/crypto/qce/core.c | 9 +++++++++
>>>   1 file changed, 9 insertions(+)
>>>
>>> diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
>>> index 63be06df5519..99ed540611ab 100644
>>> --- a/drivers/crypto/qce/core.c
>>> +++ b/drivers/crypto/qce/core.c
>>> @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
>>>   }
>>>   
>>>   static const struct of_device_id qce_crypto_of_match[] = {
>>> +	/* Following two entries are deprecated (kept only for backward compatibility) */
>>>   	{ .compatible = "qcom,crypto-v5.1", },
>>>   	{ .compatible = "qcom,crypto-v5.4", },
>>
>> This is okay, so there is no ABI break.
> 
> Great. Thanks for the confirmation.
> 
>>> +	/* Add compatible strings as per updated dt-bindings, here: */
>>> +	{ .compatible = "qcom,ipq4019-qce", },
>>> +	{ .compatible = "qcom,ipq6018-qce", },
>>> +	{ .compatible = "qcom,ipq8074-qce", },
>>> +	{ .compatible = "qcom,msm8996-qce", },
>>> +	{ .compatible = "qcom,sdm845-qce", },
>>> +	{ .compatible = "qcom,sm8150-qce", },
>>> +	{ .compatible = "qcom,sm8250-qce", },
>>
>> This is a bit odd... you have 7 devices which are simply compatible or
>> even the same. This should be instead one compatible.
>>
>> I don't really get why do you want to deprecate "qcom,crypto-v5.1".
>> Commit msg only says "we decided" but I do not know who is "we" and "why
>> we decided like this". If you want to deprecate it, perfectly fine by
>> me, but please say in commit msg why you are doing it.
> 
> I understand. This patchset has been in flight for some time and hence I 
> might have missed sharing some detailed information about the review 
> comments and rework done along the way (in the cover letter for this 
> series).
> 
> Coming back to your concern, here is the relevant background:
> - Please see: 
> https://lore.kernel.org/linux-arm-msm/20210316222825.GA3792517@robh.at.kernel.org/
> 
> - Rob shared some comments on the v1 series regarding the soc-specific 
> compatibles. He mentioned in the above thread that 'you should stick 
> with SoC specific compatibles as *everyone* else does (including most 
> QCom bindings).'
> 
> - So, while I had proposed "qcom,crypto-v5.1" (for ipq6018) and 
> "qcom,crypto-v5.4" (for sdm845, sm8150) etc. as the compatible(s) in the 
> v1 series, I shifted to using the soc-specific compatibles from the v2 
> series, onwards.

Then the reason could be - Reviewers preferred SoC-based compatible
instead of IP-block-version-based.

What is confusing is the difference between that link and here. That
link wanted to introduce 4 different compatibles... and here you have
even 7 compatibles being the same.

> 
> - Basically, since we are going to have newer qce IP versions available 
> in near future, e.g. "qcom,crypto-v5.5" etc, and we will have 2 or more 
> SoCs also sharing 1 version, these compatibles would grow and become 
> more confusing. IMO, having a soc-specific compatible in such cases is 
> probably a much cleaner approach.
> 
> Hope this helps answer some of your concerns and provides some relevant 
> background information.

Sure, but I still think you should have only one compatible in the
driver in such case. You don't have differences between them from the
driver point of view, so the devices seem to be compatible.

If not, what are the differences?

Best regards,
Krzysztof
Bhupesh Sharma Sept. 21, 2022, 6:52 a.m. UTC | #4
On 9/21/22 11:57 AM, Krzysztof Kozlowski wrote:
> On 21/09/2022 08:16, Bhupesh Sharma wrote:
>>
>>
>> On 9/20/22 8:42 PM, Krzysztof Kozlowski wrote:
>>> On 20/09/2022 13:40, Bhupesh Sharma wrote:
>>>> Since we decided to use soc specific compatibles for describing
>>>> the qce crypto IP nodes in the device-trees, adapt the driver
>>>> now to handle the same.
>>>>
>>>> Keep the old deprecated compatible strings still in the driver,
>>>> to ensure backward compatibility.
>>>>
>>>> Cc: Bjorn Andersson <andersson@kernel.org>
>>>> Cc: Rob Herring <robh@kernel.org>
>>>> Cc: herbert@gondor.apana.org.au
>>>> Tested-by: Jordan Crouse <jorcrous@amazon.com>
>>>> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
>>>> ---
>>>>    drivers/crypto/qce/core.c | 9 +++++++++
>>>>    1 file changed, 9 insertions(+)
>>>>
>>>> diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
>>>> index 63be06df5519..99ed540611ab 100644
>>>> --- a/drivers/crypto/qce/core.c
>>>> +++ b/drivers/crypto/qce/core.c
>>>> @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
>>>>    }
>>>>    
>>>>    static const struct of_device_id qce_crypto_of_match[] = {
>>>> +	/* Following two entries are deprecated (kept only for backward compatibility) */
>>>>    	{ .compatible = "qcom,crypto-v5.1", },
>>>>    	{ .compatible = "qcom,crypto-v5.4", },
>>>
>>> This is okay, so there is no ABI break.
>>
>> Great. Thanks for the confirmation.
>>
>>>> +	/* Add compatible strings as per updated dt-bindings, here: */
>>>> +	{ .compatible = "qcom,ipq4019-qce", },
>>>> +	{ .compatible = "qcom,ipq6018-qce", },
>>>> +	{ .compatible = "qcom,ipq8074-qce", },
>>>> +	{ .compatible = "qcom,msm8996-qce", },
>>>> +	{ .compatible = "qcom,sdm845-qce", },
>>>> +	{ .compatible = "qcom,sm8150-qce", },
>>>> +	{ .compatible = "qcom,sm8250-qce", },
>>>
>>> This is a bit odd... you have 7 devices which are simply compatible or
>>> even the same. This should be instead one compatible.
>>>
>>> I don't really get why do you want to deprecate "qcom,crypto-v5.1".
>>> Commit msg only says "we decided" but I do not know who is "we" and "why
>>> we decided like this". If you want to deprecate it, perfectly fine by
>>> me, but please say in commit msg why you are doing it.
>>
>> I understand. This patchset has been in flight for some time and hence I
>> might have missed sharing some detailed information about the review
>> comments and rework done along the way (in the cover letter for this
>> series).
>>
>> Coming back to your concern, here is the relevant background:
>> - Please see:
>> https://lore.kernel.org/linux-arm-msm/20210316222825.GA3792517@robh.at.kernel.org/
>>
>> - Rob shared some comments on the v1 series regarding the soc-specific
>> compatibles. He mentioned in the above thread that 'you should stick
>> with SoC specific compatibles as *everyone* else does (including most
>> QCom bindings).'
>>
>> - So, while I had proposed "qcom,crypto-v5.1" (for ipq6018) and
>> "qcom,crypto-v5.4" (for sdm845, sm8150) etc. as the compatible(s) in the
>> v1 series, I shifted to using the soc-specific compatibles from the v2
>> series, onwards.
> 
> Then the reason could be - Reviewers preferred SoC-based compatible
> instead of IP-block-version-based.
> 
> What is confusing is the difference between that link and here. That
> link wanted to introduce 4 different compatibles... and here you have
> even 7 compatibles being the same.

The link points to v1 version and we are on v7 currently. So there have 
been other comments and reworks along the way :)

All of these have been referred to in the cover letter logs.

Again please refer to Vladimir's comments on v5 version here, where he 
suggested adding soc compatibles for 'ipq8074' and 'msm8996' as well.

- 
https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/
- 
https://lore.kernel.org/lkml/f5b7c89c-3bdd-1e1e-772e-721aa5e95bbf@linaro.org/
- 
https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/

Also the 7 SoC compatibles do not point to the same crypto IP version. 
We have two IP versions currently supported upstream, "qcom,crypto-v5.1" 
and "qcom,crypto-v5.4" (with patches for support for newer versions 
under work and can be expected to land upstream in near future).

However, if you suggest, we can add some comments in the dt-binding doc
to reflect which SoC supports which version.

>> - Basically, since we are going to have newer qce IP versions available
>> in near future, e.g. "qcom,crypto-v5.5" etc, and we will have 2 or more
>> SoCs also sharing 1 version, these compatibles would grow and become
>> more confusing. IMO, having a soc-specific compatible in such cases is
>> probably a much cleaner approach.
>>
>> Hope this helps answer some of your concerns and provides some relevant
>> background information.
> 
> Sure, but I still think you should have only one compatible in the
> driver in such case. You don't have differences between them from the
> driver point of view, so the devices seem to be compatible.
> 
> If not, what are the differences?

There can always be requirements for compatible specific handling done 
in the driver. See Bjorn's comment here for example: 
https://lore.kernel.org/lkml/YZKhqJuFlRVeQkCc@builder.lan/ , as an 
example of 'clk_get' calls conditional based on the compatible instead.

This series is to get some early comments and might need some further 
rework / rearrangement.

However, I would request Rob to share his views as well on the soc 
specific compatibles, since it was originally his suggestion. I can 
rework the patchset accordingly.

Thanks,
Bhupesh
Bjorn Andersson Nov. 7, 2022, 3:43 a.m. UTC | #5
On Wed, Sep 21, 2022 at 12:22:03PM +0530, Bhupesh Sharma wrote:
> On 9/21/22 11:57 AM, Krzysztof Kozlowski wrote:
> > On 21/09/2022 08:16, Bhupesh Sharma wrote:
> > > 
> > > 
> > > On 9/20/22 8:42 PM, Krzysztof Kozlowski wrote:
> > > > On 20/09/2022 13:40, Bhupesh Sharma wrote:
> > > > > Since we decided to use soc specific compatibles for describing
> > > > > the qce crypto IP nodes in the device-trees, adapt the driver
> > > > > now to handle the same.
> > > > > 
> > > > > Keep the old deprecated compatible strings still in the driver,
> > > > > to ensure backward compatibility.
> > > > > 
> > > > > Cc: Bjorn Andersson <andersson@kernel.org>
> > > > > Cc: Rob Herring <robh@kernel.org>
> > > > > Cc: herbert@gondor.apana.org.au
> > > > > Tested-by: Jordan Crouse <jorcrous@amazon.com>
> > > > > Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
> > > > > ---
> > > > >    drivers/crypto/qce/core.c | 9 +++++++++
> > > > >    1 file changed, 9 insertions(+)
> > > > > 
> > > > > diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
> > > > > index 63be06df5519..99ed540611ab 100644
> > > > > --- a/drivers/crypto/qce/core.c
> > > > > +++ b/drivers/crypto/qce/core.c
> > > > > @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
> > > > >    }
> > > > >    static const struct of_device_id qce_crypto_of_match[] = {
> > > > > +	/* Following two entries are deprecated (kept only for backward compatibility) */
> > > > >    	{ .compatible = "qcom,crypto-v5.1", },
> > > > >    	{ .compatible = "qcom,crypto-v5.4", },
> > > > 
> > > > This is okay, so there is no ABI break.
> > > 
> > > Great. Thanks for the confirmation.
> > > 
> > > > > +	/* Add compatible strings as per updated dt-bindings, here: */
> > > > > +	{ .compatible = "qcom,ipq4019-qce", },
> > > > > +	{ .compatible = "qcom,ipq6018-qce", },
> > > > > +	{ .compatible = "qcom,ipq8074-qce", },
> > > > > +	{ .compatible = "qcom,msm8996-qce", },
> > > > > +	{ .compatible = "qcom,sdm845-qce", },
> > > > > +	{ .compatible = "qcom,sm8150-qce", },
> > > > > +	{ .compatible = "qcom,sm8250-qce", },
> > > > 
> > > > This is a bit odd... you have 7 devices which are simply compatible or
> > > > even the same. This should be instead one compatible.
> > > > 
> > > > I don't really get why do you want to deprecate "qcom,crypto-v5.1".
> > > > Commit msg only says "we decided" but I do not know who is "we" and "why
> > > > we decided like this". If you want to deprecate it, perfectly fine by
> > > > me, but please say in commit msg why you are doing it.
> > > 
> > > I understand. This patchset has been in flight for some time and hence I
> > > might have missed sharing some detailed information about the review
> > > comments and rework done along the way (in the cover letter for this
> > > series).
> > > 
> > > Coming back to your concern, here is the relevant background:
> > > - Please see:
> > > https://lore.kernel.org/linux-arm-msm/20210316222825.GA3792517@robh.at.kernel.org/
> > > 
> > > - Rob shared some comments on the v1 series regarding the soc-specific
> > > compatibles. He mentioned in the above thread that 'you should stick
> > > with SoC specific compatibles as *everyone* else does (including most
> > > QCom bindings).'
> > > 
> > > - So, while I had proposed "qcom,crypto-v5.1" (for ipq6018) and
> > > "qcom,crypto-v5.4" (for sdm845, sm8150) etc. as the compatible(s) in the
> > > v1 series, I shifted to using the soc-specific compatibles from the v2
> > > series, onwards.
> > 
> > Then the reason could be - Reviewers preferred SoC-based compatible
> > instead of IP-block-version-based.
> > 
> > What is confusing is the difference between that link and here. That
> > link wanted to introduce 4 different compatibles... and here you have
> > even 7 compatibles being the same.
> 
> The link points to v1 version and we are on v7 currently. So there have been
> other comments and reworks along the way :)
> 
> All of these have been referred to in the cover letter logs.
> 
> Again please refer to Vladimir's comments on v5 version here, where he
> suggested adding soc compatibles for 'ipq8074' and 'msm8996' as well.
> 
> -
> https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/
> -
> https://lore.kernel.org/lkml/f5b7c89c-3bdd-1e1e-772e-721aa5e95bbf@linaro.org/
> -
> https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/
> 
> Also the 7 SoC compatibles do not point to the same crypto IP version. We
> have two IP versions currently supported upstream, "qcom,crypto-v5.1" and
> "qcom,crypto-v5.4" (with patches for support for newer versions under work
> and can be expected to land upstream in near future).
> 
> However, if you suggest, we can add some comments in the dt-binding doc
> to reflect which SoC supports which version.
> 
> > > - Basically, since we are going to have newer qce IP versions available
> > > in near future, e.g. "qcom,crypto-v5.5" etc, and we will have 2 or more
> > > SoCs also sharing 1 version, these compatibles would grow and become
> > > more confusing. IMO, having a soc-specific compatible in such cases is
> > > probably a much cleaner approach.
> > > 
> > > Hope this helps answer some of your concerns and provides some relevant
> > > background information.
> > 
> > Sure, but I still think you should have only one compatible in the
> > driver in such case. You don't have differences between them from the
> > driver point of view, so the devices seem to be compatible.
> > 
> > If not, what are the differences?
> 
> There can always be requirements for compatible specific handling done in
> the driver. See Bjorn's comment here for example:
> https://lore.kernel.org/lkml/YZKhqJuFlRVeQkCc@builder.lan/ , as an example
> of 'clk_get' calls conditional based on the compatible instead.
> 

How about providing a generic compatible without the version number
(i.e. qcom,crypto) and then in the DT binding require this and
qcom,<platform>-crypto, and if we have such quirky integration behavior
for a particular platform we can add the special handling in the driver
for the platform compatible.

(And we obviously keep the two existing version-based compatibles in the
driver, for backwards compatibility)

Regards,
Bjorn

> This series is to get some early comments and might need some further rework
> / rearrangement.
> 
> However, I would request Rob to share his views as well on the soc specific
> compatibles, since it was originally his suggestion. I can rework the
> patchset accordingly.
> 
> Thanks,
> Bhupesh
Krzysztof Kozlowski Nov. 7, 2022, 9:07 a.m. UTC | #6
On 07/11/2022 04:43, Bjorn Andersson wrote:
> On Wed, Sep 21, 2022 at 12:22:03PM +0530, Bhupesh Sharma wrote:
>> On 9/21/22 11:57 AM, Krzysztof Kozlowski wrote:
>>> On 21/09/2022 08:16, Bhupesh Sharma wrote:
>>>>
>>>>
>>>> On 9/20/22 8:42 PM, Krzysztof Kozlowski wrote:
>>>>> On 20/09/2022 13:40, Bhupesh Sharma wrote:
>>>>>> Since we decided to use soc specific compatibles for describing
>>>>>> the qce crypto IP nodes in the device-trees, adapt the driver
>>>>>> now to handle the same.
>>>>>>
>>>>>> Keep the old deprecated compatible strings still in the driver,
>>>>>> to ensure backward compatibility.
>>>>>>
>>>>>> Cc: Bjorn Andersson <andersson@kernel.org>
>>>>>> Cc: Rob Herring <robh@kernel.org>
>>>>>> Cc: herbert@gondor.apana.org.au
>>>>>> Tested-by: Jordan Crouse <jorcrous@amazon.com>
>>>>>> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
>>>>>> ---
>>>>>>    drivers/crypto/qce/core.c | 9 +++++++++
>>>>>>    1 file changed, 9 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c
>>>>>> index 63be06df5519..99ed540611ab 100644
>>>>>> --- a/drivers/crypto/qce/core.c
>>>>>> +++ b/drivers/crypto/qce/core.c
>>>>>> @@ -291,8 +291,17 @@ static int qce_crypto_remove(struct platform_device *pdev)
>>>>>>    }
>>>>>>    static const struct of_device_id qce_crypto_of_match[] = {
>>>>>> +	/* Following two entries are deprecated (kept only for backward compatibility) */
>>>>>>    	{ .compatible = "qcom,crypto-v5.1", },
>>>>>>    	{ .compatible = "qcom,crypto-v5.4", },
>>>>>
>>>>> This is okay, so there is no ABI break.
>>>>
>>>> Great. Thanks for the confirmation.
>>>>
>>>>>> +	/* Add compatible strings as per updated dt-bindings, here: */
>>>>>> +	{ .compatible = "qcom,ipq4019-qce", },
>>>>>> +	{ .compatible = "qcom,ipq6018-qce", },
>>>>>> +	{ .compatible = "qcom,ipq8074-qce", },
>>>>>> +	{ .compatible = "qcom,msm8996-qce", },
>>>>>> +	{ .compatible = "qcom,sdm845-qce", },
>>>>>> +	{ .compatible = "qcom,sm8150-qce", },
>>>>>> +	{ .compatible = "qcom,sm8250-qce", },
>>>>>
>>>>> This is a bit odd... you have 7 devices which are simply compatible or
>>>>> even the same. This should be instead one compatible.
>>>>>
>>>>> I don't really get why do you want to deprecate "qcom,crypto-v5.1".
>>>>> Commit msg only says "we decided" but I do not know who is "we" and "why
>>>>> we decided like this". If you want to deprecate it, perfectly fine by
>>>>> me, but please say in commit msg why you are doing it.
>>>>
>>>> I understand. This patchset has been in flight for some time and hence I
>>>> might have missed sharing some detailed information about the review
>>>> comments and rework done along the way (in the cover letter for this
>>>> series).
>>>>
>>>> Coming back to your concern, here is the relevant background:
>>>> - Please see:
>>>> https://lore.kernel.org/linux-arm-msm/20210316222825.GA3792517@robh.at.kernel.org/
>>>>
>>>> - Rob shared some comments on the v1 series regarding the soc-specific
>>>> compatibles. He mentioned in the above thread that 'you should stick
>>>> with SoC specific compatibles as *everyone* else does (including most
>>>> QCom bindings).'
>>>>
>>>> - So, while I had proposed "qcom,crypto-v5.1" (for ipq6018) and
>>>> "qcom,crypto-v5.4" (for sdm845, sm8150) etc. as the compatible(s) in the
>>>> v1 series, I shifted to using the soc-specific compatibles from the v2
>>>> series, onwards.
>>>
>>> Then the reason could be - Reviewers preferred SoC-based compatible
>>> instead of IP-block-version-based.
>>>
>>> What is confusing is the difference between that link and here. That
>>> link wanted to introduce 4 different compatibles... and here you have
>>> even 7 compatibles being the same.
>>
>> The link points to v1 version and we are on v7 currently. So there have been
>> other comments and reworks along the way :)
>>
>> All of these have been referred to in the cover letter logs.
>>
>> Again please refer to Vladimir's comments on v5 version here, where he
>> suggested adding soc compatibles for 'ipq8074' and 'msm8996' as well.
>>
>> -
>> https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/
>> -
>> https://lore.kernel.org/lkml/f5b7c89c-3bdd-1e1e-772e-721aa5e95bbf@linaro.org/
>> -
>> https://lore.kernel.org/lkml/7328ae17-1dc7-eaa1-5993-411b986e5e02@linaro.org/
>>
>> Also the 7 SoC compatibles do not point to the same crypto IP version. We
>> have two IP versions currently supported upstream, "qcom,crypto-v5.1" and
>> "qcom,crypto-v5.4" (with patches for support for newer versions under work
>> and can be expected to land upstream in near future).
>>
>> However, if you suggest, we can add some comments in the dt-binding doc
>> to reflect which SoC supports which version.
>>
>>>> - Basically, since we are going to have newer qce IP versions available
>>>> in near future, e.g. "qcom,crypto-v5.5" etc, and we will have 2 or more
>>>> SoCs also sharing 1 version, these compatibles would grow and become
>>>> more confusing. IMO, having a soc-specific compatible in such cases is
>>>> probably a much cleaner approach.
>>>>
>>>> Hope this helps answer some of your concerns and provides some relevant
>>>> background information.
>>>
>>> Sure, but I still think you should have only one compatible in the
>>> driver in such case. You don't have differences between them from the
>>> driver point of view, so the devices seem to be compatible.
>>>
>>> If not, what are the differences?
>>
>> There can always be requirements for compatible specific handling done in
>> the driver. See Bjorn's comment here for example:
>> https://lore.kernel.org/lkml/YZKhqJuFlRVeQkCc@builder.lan/ , as an example
>> of 'clk_get' calls conditional based on the compatible instead.
>>
> 
> How about providing a generic compatible without the version number
> (i.e. qcom,crypto) and then in the DT binding require this and
> qcom,<platform>-crypto, and if we have such quirky integration behavior
> for a particular platform we can add the special handling in the driver
> for the platform compatible.
> 
> (And we obviously keep the two existing version-based compatibles in the
> driver, for backwards compatibility)

In general, compatibles should not be generic, just like wild-cards or
family-types. All are discouraged because they do not reflect hardware
or cause troubles later, when it turns out generic is not generic
enough... We had such cases where a wild-card (which is another way to
represent a "generic" compatible) turned out to be incompatible with a
specific version matched by it.

What are you going to do when this happens? Have a generic compatible
which covers only some of implementations? Using a generic compatible
for specific hardware is admitting "we do not know what is generic, so
we make something up and hope it stays generic".


Best regards,
Krzysztof