[U-Boot] [PATCH v2 1/7] dm: cache: Add enable and disable ops for cache uclass

Bin Meng bmeng.cn at gmail.com
Thu Jul 11 02:49:21 UTC 2019


On Tue, Jul 9, 2019 at 5:33 PM Andes <uboot at andestech.com> wrote:
>
> From: Rick Chen <rick at andestech.com>
>
> The L2 cache will be enabled in init flow of dm cache
> driver when it detect L2 node in dtb.
>
> When U-Boot jump to Linux Kernel, the disable ops will

jumps

> be called to flush and disable the L2 cache via the dm
> cache driver.
>
> Signed-off-by: Rick Chen <rick at andestech.com>
> Cc: KC Lin <kclin at andestech.com>
> ---
>  drivers/cache/cache-uclass.c | 20 ++++++++++++++++++++
>  include/cache.h              | 31 +++++++++++++++++++++++++++++++
>  test/dm/cache.c              |  2 ++
>  3 files changed, 53 insertions(+)
>
> diff --git a/drivers/cache/cache-uclass.c b/drivers/cache/cache-uclass.c
> index 97ce024..3b20a10 100644
> --- a/drivers/cache/cache-uclass.c
> +++ b/drivers/cache/cache-uclass.c
> @@ -17,6 +17,26 @@ int cache_get_info(struct udevice *dev, struct cache_info *info)
>         return ops->get_info(dev, info);
>  }
>
> +int cache_enable(struct udevice *dev)
> +{
> +       struct cache_ops *ops = cache_get_ops(dev);
> +
> +       if (!ops->enable)
> +               return -ENOSYS;
> +
> +       return ops->enable(dev);
> +}
> +
> +int cache_disable(struct udevice *dev)
> +{
> +       struct cache_ops *ops = cache_get_ops(dev);
> +
> +       if (!ops->disable)
> +               return -ENOSYS;
> +
> +       return ops->disable(dev);
> +}
> +
>  UCLASS_DRIVER(cache) = {
>         .id             = UCLASS_CACHE,
>         .name           = "cache",
> diff --git a/include/cache.h b/include/cache.h
> index c6334ca..32f59fd 100644
> --- a/include/cache.h
> +++ b/include/cache.h
> @@ -22,6 +22,22 @@ struct cache_ops {
>          * @return 0 if OK, -ve on error
>          */
>         int (*get_info)(struct udevice *dev, struct cache_info *info);
> +
> +       /**
> +        * enable() - Enable cache
> +        *
> +        * @dev:        Device to check (UCLASS_CACHE)
> +        * @return 0 if OK, -ve on error
> +        */
> +       int (*enable)(struct udevice *dev);
> +
> +       /**
> +        * disable() - Flush and disable cache
> +        *
> +        * @dev:        Device to check (UCLASS_CACHE)
> +        * @return 0 if OK, -ve on error
> +        */
> +       int (*disable)(struct udevice *dev);
>  };
>
>  #define cache_get_ops(dev)     ((struct cache_ops *)(dev)->driver->ops)
> @@ -35,4 +51,19 @@ struct cache_ops {
>   */
>  int cache_get_info(struct udevice *dev, struct cache_info *info);
>
> +/**
> + * cache_enable() - Enable cache
> + *
> + * @dev:       Device to check (UCLASS_CACHE)
> + * @return 0 if OK, -ve on error
> + */
> +int cache_enable(struct udevice *dev);
> +
> +/**
> + * cache_disable() - Flush and disable cache
> + *
> + * @dev:       Device to check (UCLASS_CACHE)
> + * @return 0 if OK, -ve on error
> + */
> +int cache_disable(struct udevice *dev);
>  #endif
> diff --git a/test/dm/cache.c b/test/dm/cache.c

Please separate the test case changes in another patch, together with
sandbox_cache.c changes. (see below)

> index d4144aa..2e244b1 100644
> --- a/test/dm/cache.c
> +++ b/test/dm/cache.c
> @@ -14,6 +14,8 @@ static int dm_test_reset(struct unit_test_state *uts)
>
>         ut_assertok(uclass_get_device(UCLASS_CACHE, 0, &dev_cache));
>         ut_assertok(cache_get_info(dev, &info));
> +       ut_assertok(cache_enable(dev));
> +       ut_assertok(cache_disable(dev));

This can't be passed as you did not update sandbox_cache.c to add the
enable/disable OP.

>
>         return 0;

Regards,
Bin


More information about the U-Boot mailing list