1 /*
2  * SLIM core rproc driver header
3  *
4  * Copyright (C) 2016 STMicroelectronics
5  *
6  * Author: Peter Griffin <peter.griffin@linaro.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  */
13 #ifndef _ST_REMOTEPROC_SLIM_H
14 #define _ST_REMOTEPROC_SLIM_H
15 
16 #define ST_SLIM_MEM_MAX 2
17 #define ST_SLIM_MAX_CLK 4
18 
19 enum {
20 	ST_SLIM_DMEM,
21 	ST_SLIM_IMEM,
22 };
23 
24 /**
25  * struct st_slim_mem - slim internal memory structure
26  * @cpu_addr: MPU virtual address of the memory region
27  * @bus_addr: Bus address used to access the memory region
28  * @size: Size of the memory region
29  */
30 struct st_slim_mem {
31 	void __iomem *cpu_addr;
32 	phys_addr_t bus_addr;
33 	size_t size;
34 };
35 
36 /**
37  * struct st_slim_rproc - SLIM slim core
38  * @rproc: rproc handle
39  * @mem: slim memory information
40  * @slimcore: slim slimcore regs
41  * @peri: slim peripheral regs
42  * @clks: slim clocks
43  */
44 struct st_slim_rproc {
45 	struct rproc *rproc;
46 	struct st_slim_mem mem[ST_SLIM_MEM_MAX];
47 	void __iomem *slimcore;
48 	void __iomem *peri;
49 
50 	/* st_slim_rproc private */
51 	struct clk *clks[ST_SLIM_MAX_CLK];
52 };
53 
54 struct st_slim_rproc *st_slim_rproc_alloc(struct platform_device *pdev,
55 					char *fw_name);
56 void st_slim_rproc_put(struct st_slim_rproc *slim_rproc);
57 
58 #endif
59