cache: add flush_range interface in cache_ops struct

Signed-off-by: Wei Fu <wefu@redhat.com>
This commit is contained in:
Wei Fu 2021-09-19 14:12:45 +08:00 committed by Tekkaman Ninja
parent ae8609677b
commit 28db513a7d
2 changed files with 32 additions and 0 deletions

View file

@ -39,6 +39,17 @@ int cache_disable(struct udevice *dev)
return ops->disable(dev);
}
int flush_range(struct udevice *dev, unsigned long start, unsigned long end)
{
struct cache_ops *ops = cache_get_ops(dev);
if (!ops->flush_range)
return -ENOSYS;
return ops->flush_range(dev, start, end);
}
UCLASS_DRIVER(cache) = {
.id = UCLASS_CACHE,
.name = "cache",

View file

@ -40,6 +40,17 @@ struct cache_ops {
* @return 0 if OK, -ve on error
*/
int (*disable)(struct udevice *dev);
/**
* flush_range() - Flush cache in a range
*
* @dev: Device to check (UCLASS_CACHE)
* @start: start address of the range
* @end: end address of the range
* @return 0 if OK, -ve on error
*/
int (*flush_range)(struct udevice *dev,
unsigned long start, unsigned long end);
};
#define cache_get_ops(dev) ((struct cache_ops *)(dev)->driver->ops)
@ -68,4 +79,14 @@ int cache_enable(struct udevice *dev);
* Return: 0 if OK, -ve on error
*/
int cache_disable(struct udevice *dev);
/**
* flush_range() - Flush cache
*
* @dev: Device to check (UCLASS_CACHE)
* @start: start address of the range
* @end: end address of the range
* @return 0 if OK, -ve on error
*/
int flush_range(struct udevice *dev, unsigned long start, unsigned long end);
#endif