1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * SLIM core rproc driver header 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2016 STMicroelectronics 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: Peter Griffin <peter.griffin@linaro.org> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun #ifndef _ST_REMOTEPROC_SLIM_H 10*4882a593Smuzhiyun #define _ST_REMOTEPROC_SLIM_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define ST_SLIM_MEM_MAX 2 13*4882a593Smuzhiyun #define ST_SLIM_MAX_CLK 4 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun enum { 16*4882a593Smuzhiyun ST_SLIM_DMEM, 17*4882a593Smuzhiyun ST_SLIM_IMEM, 18*4882a593Smuzhiyun }; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /** 21*4882a593Smuzhiyun * struct st_slim_mem - slim internal memory structure 22*4882a593Smuzhiyun * @cpu_addr: MPU virtual address of the memory region 23*4882a593Smuzhiyun * @bus_addr: Bus address used to access the memory region 24*4882a593Smuzhiyun * @size: Size of the memory region 25*4882a593Smuzhiyun */ 26*4882a593Smuzhiyun struct st_slim_mem { 27*4882a593Smuzhiyun void __iomem *cpu_addr; 28*4882a593Smuzhiyun phys_addr_t bus_addr; 29*4882a593Smuzhiyun size_t size; 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /** 33*4882a593Smuzhiyun * struct st_slim_rproc - SLIM slim core 34*4882a593Smuzhiyun * @rproc: rproc handle 35*4882a593Smuzhiyun * @mem: slim memory information 36*4882a593Smuzhiyun * @slimcore: slim slimcore regs 37*4882a593Smuzhiyun * @peri: slim peripheral regs 38*4882a593Smuzhiyun * @clks: slim clocks 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun struct st_slim_rproc { 41*4882a593Smuzhiyun struct rproc *rproc; 42*4882a593Smuzhiyun struct st_slim_mem mem[ST_SLIM_MEM_MAX]; 43*4882a593Smuzhiyun void __iomem *slimcore; 44*4882a593Smuzhiyun void __iomem *peri; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* st_slim_rproc private */ 47*4882a593Smuzhiyun struct clk *clks[ST_SLIM_MAX_CLK]; 48*4882a593Smuzhiyun }; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun struct st_slim_rproc *st_slim_rproc_alloc(struct platform_device *pdev, 51*4882a593Smuzhiyun char *fw_name); 52*4882a593Smuzhiyun void st_slim_rproc_put(struct st_slim_rproc *slim_rproc); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #endif 55