File Index
Files and directories
Sign in
FILE

ti_k3_common.h

File preview with syntax highlighting.

linux-6.19.14/drivers/remoteproc/ti_k3_common.h C
  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 */
 33struct 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 */
 45struct 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 */
 57struct 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 */
 81struct 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
 98void k3_rproc_mbox_callback(struct mbox_client *client, void *data);
 99void k3_rproc_kick(struct rproc *rproc, int vqid);
100int k3_rproc_reset(struct k3_rproc *kproc);
101int k3_rproc_release(struct k3_rproc *kproc);
102int k3_rproc_request_mbox(struct rproc *rproc);
103int k3_rproc_prepare(struct rproc *rproc);
104int k3_rproc_unprepare(struct rproc *rproc);
105int k3_rproc_start(struct rproc *rproc);
106int k3_rproc_stop(struct rproc *rproc);
107int k3_rproc_attach(struct rproc *rproc);
108int k3_rproc_detach(struct rproc *rproc);
109struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc,
110					       size_t *rsc_table_sz);
111void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,
112			bool *is_iomem);
113int k3_rproc_of_get_memories(struct platform_device *pdev,
114			     struct k3_rproc *kproc);
115void k3_mem_release(void *data);
116int k3_reserved_mem_init(struct k3_rproc *kproc);
117void k3_release_tsp(void *data);
118#endif /* REMOTEPROC_TI_K3_COMMON_H */
~/ Read-only file preview.