1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * TI K3 Remote Processor(s) driver common code 4 * 5 * Refactored out of ti_k3_r5_remoteproc.c, ti_k3_dsp_remoteproc.c and 6 * ti_k3_m4_remoteproc.c. 7 * 8 * ti_k3_r5_remoteproc.c: 9 * Copyright (C) 2017-2022 Texas Instruments Incorporated - https://www.ti.com/ 10 * Suman Anna <s-anna@ti.com> 11 * 12 * ti_k3_dsp_remoteproc.c: 13 * Copyright (C) 2018-2022 Texas Instruments Incorporated - https://www.ti.com/ 14 * Suman Anna <s-anna@ti.com> 15 * 16 * ti_k3_m4_remoteproc.c: 17 * Copyright (C) 2021-2024 Texas Instruments Incorporated - https://www.ti.com/ 18 * Hari Nagalla <hnagalla@ti.com> 19 */ 20 21 #ifndef REMOTEPROC_TI_K3_COMMON_H 22 #define REMOTEPROC_TI_K3_COMMON_H 23 24 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) 25 26 /** 27 * struct k3_rproc_mem - internal memory structure 28 * @cpu_addr: MPU virtual address of the memory region 29 * @bus_addr: Bus address used to access the memory region 30 * @dev_addr: Device address of the memory region from remote processor view 31 * @size: Size of the memory region 32 */ 33 struct k3_rproc_mem { 34 void __iomem *cpu_addr; 35 phys_addr_t bus_addr; 36 u32 dev_addr; 37 size_t size; 38 }; 39 40 /** 41 * struct k3_rproc_mem_data - memory definitions for a remote processor 42 * @name: name for this memory entry 43 * @dev_addr: device address for the memory entry 44 */ 45 struct k3_rproc_mem_data { 46 const char *name; 47 const u32 dev_addr; 48 }; 49 50 /** 51 * struct k3_rproc_dev_data - device data structure for a remote processor 52 * @mems: pointer to memory definitions for a remote processor 53 * @num_mems: number of memory regions in @mems 54 * @boot_align_addr: boot vector address alignment granularity 55 * @uses_lreset: flag to denote the need for local reset management 56 */ 57 struct k3_rproc_dev_data { 58 const struct k3_rproc_mem_data *mems; 59 u32 num_mems; 60 u32 boot_align_addr; 61 bool uses_lreset; 62 }; 63 64 /** 65 * struct k3_rproc - k3 remote processor driver structure 66 * @dev: cached device pointer 67 * @rproc: remoteproc device handle 68 * @mem: internal memory regions data 69 * @num_mems: number of internal memory regions 70 * @rmem: reserved memory regions data 71 * @num_rmems: number of reserved memory regions 72 * @reset: reset control handle 73 * @data: pointer to DSP-specific device data 74 * @tsp: TI-SCI processor control handle 75 * @ti_sci: TI-SCI handle 76 * @ti_sci_id: TI-SCI device identifier 77 * @mbox: mailbox channel handle 78 * @client: mailbox client to request the mailbox channel 79 * @priv: void pointer to carry any private data 80 */ 81 struct k3_rproc { 82 struct device *dev; 83 struct rproc *rproc; 84 struct k3_rproc_mem *mem; 85 int num_mems; 86 struct k3_rproc_mem *rmem; 87 int num_rmems; 88 struct reset_control *reset; 89 const struct k3_rproc_dev_data *data; 90 struct ti_sci_proc *tsp; 91 const struct ti_sci_handle *ti_sci; 92 u32 ti_sci_id; 93 struct mbox_chan *mbox; 94 struct mbox_client client; 95 void *priv; 96 }; 97 98 void k3_rproc_mbox_callback(struct mbox_client *client, void *data); 99 void k3_rproc_kick(struct rproc *rproc, int vqid); 100 int k3_rproc_reset(struct k3_rproc *kproc); 101 int k3_rproc_release(struct k3_rproc *kproc); 102 int k3_rproc_request_mbox(struct rproc *rproc); 103 int k3_rproc_prepare(struct rproc *rproc); 104 int k3_rproc_unprepare(struct rproc *rproc); 105 int k3_rproc_start(struct rproc *rproc); 106 int k3_rproc_stop(struct rproc *rproc); 107 int k3_rproc_attach(struct rproc *rproc); 108 int k3_rproc_detach(struct rproc *rproc); 109 struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc, 110 size_t *rsc_table_sz); 111 void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, 112 bool *is_iomem); 113 int k3_rproc_of_get_memories(struct platform_device *pdev, 114 struct k3_rproc *kproc); 115 void k3_mem_release(void *data); 116 int k3_reserved_mem_init(struct k3_rproc *kproc); 117 void k3_release_tsp(void *data); 118 #endif /* REMOTEPROC_TI_K3_COMMON_H */ 119