| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /* 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 */
|