1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2019 Intel Corporation <www.intel.com>
4  */
5 
6 #ifndef __CACHE_H
7 #define __CACHE_H
8 
9 #include <linux/types.h>
10 
11 struct udevice;
12 
13 /*
14  * Structure for the cache controller
15  */
16 struct cache_info {
17 	phys_addr_t base; /* Base physical address of cache device. */
18 };
19 
20 struct cache_ops {
21 	/**
22 	 * get_info() - Get basic cache info
23 	 *
24 	 * @dev:	Device to check (UCLASS_CACHE)
25 	 * @info:	Place to put info
26 	 * @return 0 if OK, -ve on error
27 	 */
28 	int (*get_info)(struct udevice *dev, struct cache_info *info);
29 
30 	/**
31 	 * enable() - Enable cache
32 	 *
33 	 * @dev:	Device to check (UCLASS_CACHE)
34 	 * @return 0 if OK, -ve on error
35 	 */
36 	int (*enable)(struct udevice *dev);
37 
38 	/**
39 	 * disable() - Flush and disable cache
40 	 *
41 	 * @dev:	Device to check (UCLASS_CACHE)
42 	 * @return 0 if OK, -ve on error
43 	 */
44 	int (*disable)(struct udevice *dev);
45 };
46 
47 #define cache_get_ops(dev)	((struct cache_ops *)(dev)->driver->ops)
48 
49 /**
50  * cache_get_info() - Get information about a cache controller
51  *
52  * @dev:	Device to check (UCLASS_CACHE)
53  * @info:	Returns cache info
54  * Return: 0 if OK, -ve on error
55  */
56 int cache_get_info(struct udevice *dev, struct cache_info *info);
57 
58 /**
59  * cache_enable() - Enable cache
60  *
61  * @dev:	Device to check (UCLASS_CACHE)
62  * Return: 0 if OK, -ve on error
63  */
64 int cache_enable(struct udevice *dev);
65 
66 /**
67  * cache_disable() - Flush and disable cache
68  *
69  * @dev:	Device to check (UCLASS_CACHE)
70  * Return: 0 if OK, -ve on error
71  */
72 int cache_disable(struct udevice *dev);
73 #endif
74