| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * TI K3 Remote Processor(s) driver common code | |
| * | |
| * Refactored out of ti_k3_r5_remoteproc.c, ti_k3_dsp_remoteproc.c and | |
| * ti_k3_m4_remoteproc.c. | |
| * | |
| * ti_k3_r5_remoteproc.c: | |
| * Copyright (C) 2017-2022 Texas Instruments Incorporated - https://www.ti.com/ | |
| * Suman Anna <s-anna@ti.com> | |
| * | |
| * ti_k3_dsp_remoteproc.c: | |
| * Copyright (C) 2018-2022 Texas Instruments Incorporated - https://www.ti.com/ | |
| * Suman Anna <s-anna@ti.com> | |
| * | |
| * ti_k3_m4_remoteproc.c: | |
| * Copyright (C) 2021-2024 Texas Instruments Incorporated - https://www.ti.com/ | |
| * Hari Nagalla <hnagalla@ti.com> | |
| */ | |
| #ifndef REMOTEPROC_TI_K3_COMMON_H | |
| #define REMOTEPROC_TI_K3_COMMON_H | |
| #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) | |
| /** | |
| * struct k3_rproc_mem - internal memory structure | |
| * @cpu_addr: MPU virtual address of the memory region | |
| * @bus_addr: Bus address used to access the memory region | |
| * @dev_addr: Device address of the memory region from remote processor view | |
| * @size: Size of the memory region | |
| */ | |
| struct k3_rproc_mem { | |
| void __iomem *cpu_addr; | |
| phys_addr_t bus_addr; | |
| u32 dev_addr; | |
| size_t size; | |
| }; | |
| /** | |
| * struct k3_rproc_mem_data - memory definitions for a remote processor | |
| * @name: name for this memory entry | |
| * @dev_addr: device address for the memory entry | |
| */ | |
| struct k3_rproc_mem_data { | |
| const char *name; | |
| const u32 dev_addr; | |
| }; | |
| /** | |
| * struct k3_rproc_dev_data - device data structure for a remote processor | |
| * @mems: pointer to memory definitions for a remote processor | |
| * @num_mems: number of memory regions in @mems | |
| * @boot_align_addr: boot vector address alignment granularity | |
| * @uses_lreset: flag to denote the need for local reset management | |
| */ | |
| struct k3_rproc_dev_data { | |
| const struct k3_rproc_mem_data *mems; | |
| u32 num_mems; | |
| u32 boot_align_addr; | |
| bool uses_lreset; | |
| }; | |
| /** | |
| * struct k3_rproc - k3 remote processor driver structure | |
| * @dev: cached device pointer | |
| * @rproc: remoteproc device handle | |
| * @mem: internal memory regions data | |
| * @num_mems: number of internal memory regions | |
| * @rmem: reserved memory regions data | |
| * @num_rmems: number of reserved memory regions | |
| * @reset: reset control handle | |
| * @data: pointer to DSP-specific device data | |
| * @tsp: TI-SCI processor control handle | |
| * @ti_sci: TI-SCI handle | |
| * @ti_sci_id: TI-SCI device identifier | |
| * @mbox: mailbox channel handle | |
| * @client: mailbox client to request the mailbox channel | |
| * @priv: void pointer to carry any private data | |
| */ | |
| struct k3_rproc { | |
| struct device *dev; | |
| struct rproc *rproc; | |
| struct k3_rproc_mem *mem; | |
| int num_mems; | |
| struct k3_rproc_mem *rmem; | |
| int num_rmems; | |
| struct reset_control *reset; | |
| const struct k3_rproc_dev_data *data; | |
| struct ti_sci_proc *tsp; | |
| const struct ti_sci_handle *ti_sci; | |
| u32 ti_sci_id; | |
| struct mbox_chan *mbox; | |
| struct mbox_client client; | |
| void *priv; | |
| }; | |
| void k3_rproc_mbox_callback(struct mbox_client *client, void *data); | |
| void k3_rproc_kick(struct rproc *rproc, int vqid); | |
| int k3_rproc_reset(struct k3_rproc *kproc); | |
| int k3_rproc_release(struct k3_rproc *kproc); | |
| int k3_rproc_request_mbox(struct rproc *rproc); | |
| int k3_rproc_prepare(struct rproc *rproc); | |
| int k3_rproc_unprepare(struct rproc *rproc); | |
| int k3_rproc_start(struct rproc *rproc); | |
| int k3_rproc_stop(struct rproc *rproc); | |
| int k3_rproc_attach(struct rproc *rproc); | |
| int k3_rproc_detach(struct rproc *rproc); | |
| struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc, | |
| size_t *rsc_table_sz); | |
| void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, | |
| bool *is_iomem); | |
| int k3_rproc_of_get_memories(struct platform_device *pdev, | |
| struct k3_rproc *kproc); | |
| void k3_mem_release(void *data); | |
| int k3_reserved_mem_init(struct k3_rproc *kproc); | |
| void k3_release_tsp(void *data); | |
| #endif /* REMOTEPROC_TI_K3_COMMON_H */ |