1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * PRU-ICSS sub-system specific definitions
4  *
5  * Copyright (C) 2014-2020 Texas Instruments Incorporated - http://www.ti.com/
6  *	Suman Anna <s-anna@ti.com>
7  */
8 
9 #ifndef _PRUSS_DRIVER_H_
10 #define _PRUSS_DRIVER_H_
11 
12 #include <linux/types.h>
13 
14 /*
15  * enum pruss_mem - PRUSS memory range identifiers
16  */
17 enum pruss_mem {
18 	PRUSS_MEM_DRAM0 = 0,
19 	PRUSS_MEM_DRAM1,
20 	PRUSS_MEM_SHRD_RAM2,
21 	PRUSS_MEM_MAX,
22 };
23 
24 /**
25  * struct pruss_mem_region - PRUSS memory region structure
26  * @va: kernel virtual address of the PRUSS memory region
27  * @pa: physical (bus) address of the PRUSS memory region
28  * @size: size of the PRUSS memory region
29  */
30 struct pruss_mem_region {
31 	void __iomem *va;
32 	phys_addr_t pa;
33 	size_t size;
34 };
35 
36 /**
37  * struct pruss - PRUSS parent structure
38  * @dev: pruss device pointer
39  * @cfg_base: base iomap for CFG region
40  * @cfg_regmap: regmap for config region
41  * @mem_regions: data for each of the PRUSS memory regions
42  * @core_clk_mux: clk handle for PRUSS CORE_CLK_MUX
43  * @iep_clk_mux: clk handle for PRUSS IEP_CLK_MUX
44  */
45 struct pruss {
46 	struct device *dev;
47 	void __iomem *cfg_base;
48 	struct regmap *cfg_regmap;
49 	struct pruss_mem_region mem_regions[PRUSS_MEM_MAX];
50 	struct clk *core_clk_mux;
51 	struct clk *iep_clk_mux;
52 };
53 
54 #endif	/* _PRUSS_DRIVER_H_ */
55