[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