mbox series

[v6,0/8] iio: add new backend framework

Message ID 20240119-iio-backend-v6-0-189536c35a05@analog.com
Headers show
Series iio: add new backend framework | expand

Message

Nuno Sa via B4 Relay Jan. 19, 2024, 4 p.m. UTC
v1:
 https://lore.kernel.org/linux-iio/20231204144925.4fe9922f@jic23-huawei/T/#m222f5175273b81dbfe40b7f0daffcdc67d6cb8ff

v2:
 https://lore.kernel.org/r/20231208-dev-iio-backend-v2-0-5450951895e1@analog.com

v3:
 https://lore.kernel.org/linux-iio/20231213-dev-iio-backend-v3-0-bb9f12a5c6dc@analog.com/

v4:
 https://lore.kernel.org/r/20231220-iio-backend-v4-0-998e9148b692@analog.com

v5:
 https://lore.kernel.org/r/20240112-iio-backend-v5-0-bdecad041ab4@analog.com

Changes in v6:
 - Patch 2
  * Add '#io-backends-cells' property to the example dts.
 - Patch 6
  * Improve comment on struct iio_backend_buffer_pair;
  * Be consistent with dots in kernel-docs. So dots only exist now in
    description and return. Also be consistent on device managed APIs
    subject and @dev description;
  * Added devm_iio_backend_enable() and hence (and for now)
    iio_backend_disable is static;
  * Fixed __devm_iio_backend_get_from_fwnode_lookup() kernel-doc;
  * Improved english in devm_iio_backend_register() comment;
  * Don't make private data mandatory;
 - Patch 7
  * Use local ad9467_chip_info *info variable;
  * Improve error handling for optional devm_iio_backend_get();
  * Make use of devm_iio_backend_enable().
 - Patch 8
  * Also change string format in version error path.

Not that big of change in this version (more small things). The most
noticeable is perhaps the introduction of devm_iio_backend_enable().

Keeping the block diagram  so we don't have to follow links
to check one of the typical setups.

                                           -------------------------------------------------------
 ------------------                        | -----------         ------------      -------  FPGA |
 |     ADC        |------------------------| | AXI ADC |---------| DMA CORE |------| RAM |       |
 | (Frontend/IIO) | Serial Data (eg: LVDS) | |(backend)|---------|          |------|     |       |
 |                |------------------------| -----------         ------------      -------       |
 ------------------                        -------------------------------------------------------

---
Nuno Sa (7):
      dt-bindings: adc: ad9467: add new io-backend property
      dt-bindings: adc: axi-adc: update bindings for backend framework
      driver: core: allow modifying device_links flags
      iio: buffer-dmaengine: export buffer alloc and free functions
      iio: add the IIO backend framework
      iio: adc: ad9467: convert to backend framework
      iio: adc: adi-axi-adc: move to backend framework

Olivier Moysan (1):
      of: property: add device link support for io-backends

 .../devicetree/bindings/iio/adc/adi,ad9467.yaml    |   4 +
 .../devicetree/bindings/iio/adc/adi,axi-adc.yaml   |   8 +-
 MAINTAINERS                                        |   8 +
 drivers/base/core.c                                |  14 +-
 drivers/iio/Kconfig                                |   9 +
 drivers/iio/Makefile                               |   1 +
 drivers/iio/adc/Kconfig                            |   4 +-
 drivers/iio/adc/ad9467.c                           | 272 +++++++++-----
 drivers/iio/adc/adi-axi-adc.c                      | 383 +++++--------------
 drivers/iio/buffer/industrialio-buffer-dmaengine.c |   8 +-
 drivers/iio/industrialio-backend.c                 | 412 +++++++++++++++++++++
 drivers/of/property.c                              |   2 +
 include/linux/iio/adc/adi-axi-adc.h                |  68 ----
 include/linux/iio/backend.h                        |  72 ++++
 include/linux/iio/buffer-dmaengine.h               |   3 +
 15 files changed, 806 insertions(+), 462 deletions(-)
---
base-commit: 801590b27bfbdb6721f85e2c3af70e627e52c8d5
change-id: 20231219-iio-backend-a3dc1a6a7a58
--

Thanks!
- Nuno Sá

Comments

Rob Herring (Arm) Jan. 19, 2024, 5:15 p.m. UTC | #1
On Fri, 19 Jan 2024 17:00:47 +0100, Nuno Sa wrote:
> The ad9467 will make use of the new IIO backend framework which is a
> provider - consumer interface where IIO backends provide services to
> consumers. As such, and being this device a consumer,  add the new
> generic io-backend property to the bindings.
> 
> Reviewed-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Nuno Sa <nuno.sa@analog.com>
> ---
>  Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml | 4 ++++
>  1 file changed, 4 insertions(+)
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad9467.yaml: io-backends: missing type definition

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20240119-iio-backend-v6-1-189536c35a05@analog.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
Jonathan Cameron Jan. 21, 2024, 5:20 p.m. UTC | #2
On Fri, 19 Jan 2024 17:00:49 +0100
Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org> wrote:

> From: Nuno Sa <nuno.sa@analog.com>
> 
> If a device_link is previously created (eg: via
> fw_devlink_create_devlink()) before the supplier + consumer are both
> present and bound to their respective drivers, there's no way to set
> DL_FLAG_AUTOREMOVE_CONSUMER anymore while one can still set
> DL_FLAG_AUTOREMOVE_SUPPLIER. Hence, rework the flags checks to allow
> for DL_FLAG_AUTOREMOVE_CONSUMER in the same way
> DL_FLAG_AUTOREMOVE_SUPPLIER is done.
> 
> While at it, make sure that we are never left with
> DL_FLAG_AUTOPROBE_CONSUMER set together with one of
> DL_FLAG_AUTOREMOVE_CONSUMER or DL_FLAG_AUTOREMOVE_SUPPLIER.
> 
> Signed-off-by: Nuno Sa <nuno.sa@analog.com>

Looking for an Ack or RB from someone more familiar with device links
than I am.

Greg / Rafael?  

thanks

Jonathan

> ---
>  drivers/base/core.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 67ba592afc77..fdbb5abc75d5 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -807,11 +807,15 @@ struct device_link *device_link_add(struct device *consumer,
>  		 * update the existing link to stay around longer.
>  		 */
>  		if (flags & DL_FLAG_AUTOREMOVE_SUPPLIER) {
> -			if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
> -				link->flags &= ~DL_FLAG_AUTOREMOVE_CONSUMER;
> -				link->flags |= DL_FLAG_AUTOREMOVE_SUPPLIER;
> -			}
> -		} else if (!(flags & DL_FLAG_AUTOREMOVE_CONSUMER)) {
> +			link->flags &= ~DL_FLAG_AUTOREMOVE_CONSUMER;
> +			link->flags &= ~DL_FLAG_AUTOPROBE_CONSUMER;
> +			link->flags |= DL_FLAG_AUTOREMOVE_SUPPLIER;
> +
> +		} else if (flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
> +			link->flags &= ~DL_FLAG_AUTOREMOVE_SUPPLIER;
> +			link->flags &= ~DL_FLAG_AUTOPROBE_CONSUMER;
> +			link->flags |= DL_FLAG_AUTOREMOVE_CONSUMER;
> +		} else {
>  			link->flags &= ~(DL_FLAG_AUTOREMOVE_CONSUMER |
>  					 DL_FLAG_AUTOREMOVE_SUPPLIER);
>  		}
>
Jonathan Cameron Jan. 21, 2024, 5:57 p.m. UTC | #3
On Fri, 19 Jan 2024 17:00:46 +0100
Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org> wrote:


> Changes in v6:
>  - Patch 2
>   * Add '#io-backends-cells' property to the example dts.
>  - Patch 6
>   * Improve comment on struct iio_backend_buffer_pair;
>   * Be consistent with dots in kernel-docs. So dots only exist now in
>     description and return. Also be consistent on device managed APIs
>     subject and @dev description;
>   * Added devm_iio_backend_enable() and hence (and for now)
>     iio_backend_disable is static;
>   * Fixed __devm_iio_backend_get_from_fwnode_lookup() kernel-doc;
>   * Improved english in devm_iio_backend_register() comment;
>   * Don't make private data mandatory;
>  - Patch 7
>   * Use local ad9467_chip_info *info variable;
>   * Improve error handling for optional devm_iio_backend_get();
>   * Make use of devm_iio_backend_enable().
>  - Patch 8
>   * Also change string format in version error path.
Hi Nuno,

Other than wanting a few acks (one for 2nd DT patch with the fix and one
for the device link changes) this looks good to me.

Ideally of course I'd like to see the second user if that happens to be
available in the first few weeks of this cycle, but I don't propose to hold
this indefinitely to wait for additional users as the framework seems logical
and it's all in kernel anyway so we can probably change whatever is needed
later without too much trouble.

Jonathan

>