
On Tue, Jul 9, 2019 at 5:33 PM Andes uboot@andestech.com wrote:
From: Rick Chen rick@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@andestech.com Cc: KC Lin kclin@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