From nobody Wed Dec 17 15:40:59 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06F381E9B34; Tue, 13 May 2025 05:46:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; cv=none; b=X8cCPK2VlK6nGs7PuEepX9gr93CO8KsybXK54wOhqUn0wWFYE9A0ZX5dblkPtzLr0X6wb3bqhYUn8K8gF4APj0+/u3UphB1KMJKY9DTUc+IOWGYgG7DHCzs49j+/btZ042rtJex1haOtx1p60TarA6iMtXPrleDh72H8ix7joXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; c=relaxed/simple; bh=q2aRBC/WdIMOIDJgJKCgznMsZxzv6Y2BODRvntSmO7M=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tIcQeK2L6x0JIHaf+aQdEg0LPK4wr5VbKYvt435WRr3TQceE+APc69c0QffGy+YjB6lTzBzIlyWLQvkrP7jz0Y85fLUp0OmKbG7nkLkmOBEQD6poDlv/S1vEk1xbVGkaNiz143CcAQi5RNM/Jp+xChciwhN70U/MUW6+QJcTUxw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=skhBIm/A; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="skhBIm/A" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k5rj2985601 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115165; bh=Nlg+t0iIZY1uRFMTiviA+uqxiI6apZZRnck8wBZ/UsQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=skhBIm/AJYjDNiRutyPlt49Gq+dwZ8NQSoGmhb1sDTgheFB/Ue6ACArvLjZkSFX+q NkYKnek3A53hLvQunBHQt80AXl3x8F/sV2PdcZSslnFA3deoqxYY+RpXrRBNrwBHTc MLylHI+iIMK7q6JUohwOqpp1tSeSUbaGYj6Sy36s= Received: from DLEE111.ent.ti.com (dlee111.ent.ti.com [157.170.170.22]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k5AL063223 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:05 -0500 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE111.ent.ti.com (157.170.170.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:05 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:05 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqL131001; Tue, 13 May 2025 00:46:01 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 12/36] remoteproc: k3: Refactor shared data structures Date: Tue, 13 May 2025 11:14:46 +0530 Message-ID: <20250513054510.3439842-13-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The TI K3 R5, DSP and M4 remoteproc drivers share the same data structure definitions. Refactor the shared data structures into a new common header file, 'ti_k3_common.h', and update the drivers to use the unified data structures. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Updated comment to call out that the header file is refactored out of R5= , DSP and M4 drivers. 2. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-12-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-12-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-10-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.h | 96 ++++++++++++++++ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 120 ++++---------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 105 +++-------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 132 +++++----------------- 4 files changed, 166 insertions(+), 287 deletions(-) create mode 100644 drivers/remoteproc/ti_k3_common.h diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h new file mode 100644 index 0000000000000..3e09e090cb337 --- /dev/null +++ b/drivers/remoteproc/ti_k3_common.h @@ -0,0 +1,96 @@ +/* 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 + * + * ti_k3_dsp_remoteproc.c: + * Copyright (C) 2018-2022 Texas Instruments Incorporated - https://www.ti= .com/ + * Suman Anna + * + * ti_k3_m4_remoteproc.c: + * Copyright (C) 2021-2024 Texas Instruments Incorporated - https://www.ti= .com/ + * Hari Nagalla + */ + +#ifndef REMOTEPROC_TI_K3_COMMON_H +#define REMOTEPROC_TI_K3_COMMON_H + +/** + * 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 vi= ew + * @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; +}; + +#endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 2191547529c55..e92fab831670c 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -20,81 +20,10 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" +#include "ti_k3_common.h" =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/** - * struct k3_dsp_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 DSP view - * @size: Size of the memory region - */ -struct k3_dsp_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - -/** - * struct k3_dsp_mem_data - memory definitions for a DSP - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_dsp_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_dsp_dev_data - device data structure for a DSP - * @mems: pointer to memory definitions for a DSP - * @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_dsp_dev_data { - const struct k3_dsp_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - -/** - * struct k3_dsp_rproc - k3 DSP 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: Remote processor private data - */ -struct k3_dsp_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_dsp_mem *mem; - int num_mems; - struct k3_dsp_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_dsp_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; -}; - /** * k3_dsp_rproc_mbox_callback() - inbound mailbox message handler * @client: mailbox client pointer used for requesting the mailbox channel @@ -111,8 +40,7 @@ struct k3_dsp_rproc { */ static void k3_dsp_rproc_mbox_callback(struct mbox_client *client, void *d= ata) { - struct k3_dsp_rproc *kproc =3D container_of(client, struct k3_dsp_rproc, - client); + struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); struct device *dev =3D kproc->rproc->dev.parent; const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); @@ -152,7 +80,7 @@ static void k3_dsp_rproc_mbox_callback(struct mbox_clien= t *client, void *data) */ static void k3_dsp_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D rproc->dev.parent; mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; @@ -165,7 +93,7 @@ static void k3_dsp_rproc_kick(struct rproc *rproc, int v= qid) } =20 /* Put the DSP processor into reset */ -static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kproc) +static int k3_dsp_rproc_reset(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -191,7 +119,7 @@ static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kpro= c) } =20 /* Release the DSP processor from reset */ -static int k3_dsp_rproc_release(struct k3_dsp_rproc *kproc) +static int k3_dsp_rproc_release(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -220,7 +148,7 @@ static int k3_dsp_rproc_release(struct k3_dsp_rproc *kp= roc) =20 static int k3_dsp_rproc_request_mbox(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct mbox_client *client =3D &kproc->client; struct device *dev =3D kproc->dev; int ret; @@ -264,7 +192,7 @@ static int k3_dsp_rproc_request_mbox(struct rproc *rpro= c) */ static int k3_dsp_rproc_prepare(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -288,7 +216,7 @@ static int k3_dsp_rproc_prepare(struct rproc *rproc) */ static int k3_dsp_rproc_unprepare(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -309,7 +237,7 @@ static int k3_dsp_rproc_unprepare(struct rproc *rproc) */ static int k3_dsp_rproc_start(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; u32 boot_addr; int ret; @@ -341,7 +269,7 @@ static int k3_dsp_rproc_start(struct rproc *rproc) */ static int k3_dsp_rproc_stop(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; =20 k3_dsp_rproc_reset(kproc); =20 @@ -381,7 +309,7 @@ static int k3_dsp_rproc_detach(struct rproc *rproc) { r= eturn 0; } static struct resource_table *k3_dsp_get_loaded_rsc_table(struct rproc *rp= roc, size_t *rsc_table_sz) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -410,7 +338,7 @@ static struct resource_table *k3_dsp_get_loaded_rsc_tab= le(struct rproc *rproc, */ static void *k3_dsp_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len= , bool *is_iomem) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; u32 dev_addr, offset; @@ -467,9 +395,9 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { }; =20 static int k3_dsp_rproc_of_get_memories(struct platform_device *pdev, - struct k3_dsp_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_dsp_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct resource *res; int num_mems =3D 0; @@ -525,7 +453,7 @@ static void k3_dsp_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_dsp_reserved_mem_init(struct k3_dsp_rproc *kproc) +static int k3_dsp_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev->of_node; @@ -606,8 +534,8 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) { struct device *dev =3D &pdev->dev; struct device_node *np =3D dev->of_node; - const struct k3_dsp_dev_data *data; - struct k3_dsp_rproc *kproc; + const struct k3_rproc_dev_data *data; + struct k3_rproc *kproc; struct rproc *rproc; const char *fw_name; bool p_state =3D false; @@ -723,7 +651,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) =20 static void k3_dsp_rproc_remove(struct platform_device *pdev) { - struct k3_dsp_rproc *kproc =3D platform_get_drvdata(pdev); + struct k3_rproc *kproc =3D platform_get_drvdata(pdev); struct rproc *rproc =3D kproc->rproc; struct device *dev =3D &pdev->dev; int ret; @@ -737,37 +665,37 @@ static void k3_dsp_rproc_remove(struct platform_devic= e *pdev) mbox_free_channel(kproc->mbox); } =20 -static const struct k3_dsp_mem_data c66_mems[] =3D { +static const struct k3_rproc_mem_data c66_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, { .name =3D "l1pram", .dev_addr =3D 0xe00000 }, { .name =3D "l1dram", .dev_addr =3D 0xf00000 }, }; =20 /* C71x cores only have a L1P Cache, there are no L1P SRAMs */ -static const struct k3_dsp_mem_data c71_mems[] =3D { +static const struct k3_rproc_mem_data c71_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, { .name =3D "l1dram", .dev_addr =3D 0xe00000 }, }; =20 -static const struct k3_dsp_mem_data c7xv_mems[] =3D { +static const struct k3_rproc_mem_data c7xv_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, }; =20 -static const struct k3_dsp_dev_data c66_data =3D { +static const struct k3_rproc_dev_data c66_data =3D { .mems =3D c66_mems, .num_mems =3D ARRAY_SIZE(c66_mems), .boot_align_addr =3D SZ_1K, .uses_lreset =3D true, }; =20 -static const struct k3_dsp_dev_data c71_data =3D { +static const struct k3_rproc_dev_data c71_data =3D { .mems =3D c71_mems, .num_mems =3D ARRAY_SIZE(c71_mems), .boot_align_addr =3D SZ_2M, .uses_lreset =3D false, }; =20 -static const struct k3_dsp_dev_data c7xv_data =3D { +static const struct k3_rproc_dev_data c7xv_data =3D { .mems =3D c7xv_mems, .num_mems =3D ARRAY_SIZE(c7xv_mems), .boot_align_addr =3D SZ_2M, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 90c0bff113439..053d50cf5e72b 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -19,78 +19,7 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" - -/** - * struct k3_m4_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 vi= ew - * @size: Size of the memory region - */ -struct k3_m4_rproc_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - -/** - * struct k3_m4_mem_data - memory definitions for a remote processor - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_m4_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_m4_dev_data - device data structure for a M4 core - * @mems: pointer to memory definitions for a M4 core - * @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_m4_dev_data { - const struct k3_m4_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - -/** - * struct k3_m4_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 M4-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: Remote processor private data - */ -struct k3_m4_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_m4_rproc_mem *mem; - int num_mems; - struct k3_m4_rproc_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_m4_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; -}; +#include "ti_k3_common.h" =20 /** * k3_m4_rproc_mbox_callback() - inbound mailbox message handler @@ -147,7 +76,7 @@ static void k3_m4_rproc_mbox_callback(struct mbox_client= *client, void *data) */ static void k3_m4_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; u32 msg =3D (u32)vqid; int ret; @@ -163,7 +92,7 @@ static void k3_m4_rproc_kick(struct rproc *rproc, int vq= id) ret); } =20 -static int k3_m4_rproc_ping_mbox(struct k3_m4_rproc *kproc) +static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -195,7 +124,7 @@ static int k3_m4_rproc_ping_mbox(struct k3_m4_rproc *kp= roc) */ static int k3_m4_rproc_prepare(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -240,7 +169,7 @@ static int k3_m4_rproc_prepare(struct rproc *rproc) */ static int k3_m4_rproc_unprepare(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -271,7 +200,7 @@ static int k3_m4_rproc_unprepare(struct rproc *rproc) static struct resource_table *k3_m4_get_loaded_rsc_table(struct rproc *rpr= oc, size_t *rsc_table_sz) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -301,7 +230,7 @@ static struct resource_table *k3_m4_get_loaded_rsc_tabl= e(struct rproc *rproc, */ static void *k3_m4_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; u32 dev_addr, offset; @@ -347,9 +276,9 @@ static void *k3_m4_rproc_da_to_va(struct rproc *rproc, = u64 da, size_t len, bool } =20 static int k3_m4_rproc_of_get_memories(struct platform_device *pdev, - struct k3_m4_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_m4_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct resource *res; int num_mems; @@ -405,7 +334,7 @@ static void k3_m4_rproc_dev_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_m4_reserved_mem_init(struct k3_m4_rproc *kproc) +static int k3_m4_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev->of_node; @@ -490,7 +419,7 @@ static void k3_m4_release_tsp(void *data) */ static int k3_m4_rproc_start(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -515,7 +444,7 @@ static int k3_m4_rproc_start(struct rproc *rproc) */ static int k3_m4_rproc_stop(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -537,7 +466,7 @@ static int k3_m4_rproc_stop(struct rproc *rproc) */ static int k3_m4_rproc_attach(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; int ret; =20 ret =3D k3_m4_rproc_ping_mbox(kproc); @@ -573,9 +502,9 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { =20 static int k3_m4_rproc_probe(struct platform_device *pdev) { - const struct k3_m4_dev_data *data; + const struct k3_rproc_dev_data *data; struct device *dev =3D &pdev->dev; - struct k3_m4_rproc *kproc; + struct k3_rproc *kproc; struct rproc *rproc; const char *fw_name; bool r_state =3D false; @@ -668,12 +597,12 @@ static int k3_m4_rproc_probe(struct platform_device *= pdev) return 0; } =20 -static const struct k3_m4_mem_data am64_m4_mems[] =3D { +static const struct k3_rproc_mem_data am64_m4_mems[] =3D { { .name =3D "iram", .dev_addr =3D 0x0 }, { .name =3D "dram", .dev_addr =3D 0x30000 }, }; =20 -static const struct k3_m4_dev_data am64_m4_data =3D { +static const struct k3_rproc_dev_data am64_m4_data =3D { .mems =3D am64_m4_mems, .num_mems =3D ARRAY_SIZE(am64_m4_mems), .boot_align_addr =3D SZ_1K, diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 183e211c00550..ec9101972ff9e 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -26,6 +26,7 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" +#include "ti_k3_common.h" =20 /* This address can either be for ATCM or BTCM with the other at address 0= x0 */ #define K3_R5_TCM_DEV_ADDR 0x41010000 @@ -55,20 +56,6 @@ /* Applicable to only AM64x SoCs */ #define PROC_BOOT_STATUS_FLAG_R5_SINGLECORE_ONLY 0x00000200 =20 -/** - * struct k3_r5_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 from remoteproc view - * @size: Size of the memory region - */ -struct k3_r5_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - /* * All cluster mode values are not applicable on all SoCs. The following * are the modes supported on various SoCs: @@ -84,30 +71,6 @@ enum cluster_mode { CLUSTER_MODE_SINGLECORE }; =20 -/** - * struct k3_r5_mem_data - memory definitions for a R5 - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_r5_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_r5_dev_data - device data structure for a R5 - * @mems: pointer to memory definitions for a R5 - * @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_r5_dev_data { - const struct k3_r5_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - /** * struct k3_r5_soc_data - match data to handle SoC variations * @tcm_is_double: flag to denote the larger unified TCMs in certain modes @@ -121,7 +84,7 @@ struct k3_r5_soc_data { bool tcm_ecc_autoinit; bool single_cpu_mode; bool is_single_core; - const struct k3_r5_dev_data *core_data; + const struct k3_rproc_dev_data *core_data; }; =20 /** @@ -140,8 +103,6 @@ struct k3_r5_cluster { const struct k3_r5_soc_data *soc_data; }; =20 -struct k3_r5_rproc; - /** * struct k3_r5_core - K3 R5 core structure * @elem: linked list item @@ -158,9 +119,9 @@ struct k3_r5_rproc; struct k3_r5_core { struct list_head elem; struct device *dev; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_cluster *cluster; - struct k3_r5_mem *sram; + struct k3_rproc_mem *sram; int num_sram; u32 atcm_enable; u32 btcm_enable; @@ -168,40 +129,6 @@ struct k3_r5_core { bool released_from_reset; }; =20 -/** - * struct k3_r5_rproc - K3 remote processor state - * @dev: cached device pointer - * @rproc: rproc 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 R5-core-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: Remote processor private data - */ -struct k3_r5_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_r5_mem *mem; - int num_mems; - struct k3_r5_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_r5_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; -}; - /** * k3_r5_rproc_mbox_callback() - inbound mailbox message handler * @client: mailbox client pointer used for requesting the mailbox channel @@ -218,8 +145,7 @@ struct k3_r5_rproc { */ static void k3_r5_rproc_mbox_callback(struct mbox_client *client, void *da= ta) { - struct k3_r5_rproc *kproc =3D container_of(client, struct k3_r5_rproc, - client); + struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); struct device *dev =3D kproc->rproc->dev.parent; const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); @@ -254,7 +180,7 @@ static void k3_r5_rproc_mbox_callback(struct mbox_clien= t *client, void *data) /* kick a virtqueue */ static void k3_r5_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D rproc->dev.parent; mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; @@ -266,7 +192,7 @@ static void k3_r5_rproc_kick(struct rproc *rproc, int v= qid) ret); } =20 -static int k3_r5_split_reset(struct k3_r5_rproc *kproc) +static int k3_r5_split_reset(struct k3_rproc *kproc) { int ret; =20 @@ -289,7 +215,7 @@ static int k3_r5_split_reset(struct k3_r5_rproc *kproc) return ret; } =20 -static int k3_r5_split_release(struct k3_r5_rproc *kproc) +static int k3_r5_split_release(struct k3_rproc *kproc) { int ret; =20 @@ -316,7 +242,7 @@ static int k3_r5_split_release(struct k3_r5_rproc *kpro= c) static int k3_r5_lockstep_reset(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; int ret; =20 /* assert local reset on all applicable cores */ @@ -364,7 +290,7 @@ static int k3_r5_lockstep_reset(struct k3_r5_cluster *c= luster) static int k3_r5_lockstep_release(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; int ret; =20 /* enable PSC modules on all applicable cores */ @@ -409,13 +335,13 @@ static int k3_r5_lockstep_release(struct k3_r5_cluste= r *cluster) return ret; } =20 -static inline int k3_r5_core_halt(struct k3_r5_rproc *kproc) +static inline int k3_r5_core_halt(struct k3_rproc *kproc) { return ti_sci_proc_set_control(kproc->tsp, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT, 0); } =20 -static inline int k3_r5_core_run(struct k3_r5_rproc *kproc) +static inline int k3_r5_core_run(struct k3_rproc *kproc) { return ti_sci_proc_set_control(kproc->tsp, 0, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT); @@ -423,7 +349,7 @@ static inline int k3_r5_core_run(struct k3_r5_rproc *kp= roc) =20 static int k3_r5_rproc_request_mbox(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct mbox_client *client =3D &kproc->client; struct device *dev =3D kproc->dev; int ret; @@ -474,7 +400,7 @@ static int k3_r5_rproc_request_mbox(struct rproc *rproc) */ static int k3_r5_rproc_prepare(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv, *core0, *core1; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -572,7 +498,7 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) */ static int k3_r5_rproc_unprepare(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv, *core0, *core1; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -635,7 +561,7 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) */ static int k3_r5_rproc_start(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -700,7 +626,7 @@ static int k3_r5_rproc_start(struct rproc *rproc) */ static int k3_r5_rproc_stop(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; int ret; @@ -764,7 +690,7 @@ static int k3_r5_rproc_detach(struct rproc *rproc) { re= turn 0; } static struct resource_table *k3_r5_get_loaded_rsc_table(struct rproc *rpr= oc, size_t *rsc_table_sz) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -793,7 +719,7 @@ static struct resource_table *k3_r5_get_loaded_rsc_tabl= e(struct rproc *rproc, */ static void *k3_r5_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; @@ -896,7 +822,7 @@ static const struct rproc_ops k3_r5_rproc_ops =3D { * both the cores with the same settings, before reconfiguing again for * LockStep mode. */ -static int k3_r5_rproc_configure(struct k3_r5_rproc *kproc) +static int k3_r5_rproc_configure(struct k3_rproc *kproc) { struct k3_r5_core *temp, *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1025,7 +951,7 @@ static void k3_r5_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_r5_reserved_mem_init(struct k3_r5_rproc *kproc) +static int k3_r5_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev_of_node(dev); @@ -1118,7 +1044,7 @@ static int k3_r5_reserved_mem_init(struct k3_r5_rproc= *kproc) * supported SoCs. The Core0 TCM sizes therefore have to be adjusted to on= ly * half the original size in Split mode. */ -static void k3_r5_adjust_tcm_sizes(struct k3_r5_rproc *kproc) +static void k3_r5_adjust_tcm_sizes(struct k3_rproc *kproc) { struct k3_r5_core *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1156,7 +1082,7 @@ static void k3_r5_adjust_tcm_sizes(struct k3_r5_rproc= *kproc) * actual values configured by bootloader. The driver internal device memo= ry * addresses for TCMs are also updated. */ -static int k3_r5_rproc_configure_mode(struct k3_r5_rproc *kproc) +static int k3_r5_rproc_configure_mode(struct k3_rproc *kproc) { struct k3_r5_core *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1261,9 +1187,9 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_rp= roc *kproc) } =20 static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, - struct k3_r5_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_r5_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct k3_r5_core *core =3D kproc->priv; struct resource *res; @@ -1403,7 +1329,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(pdev); struct device *dev =3D &pdev->dev; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_core *core, *core1; struct device_node *np; struct device *cdev; @@ -1562,7 +1488,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) static void k3_r5_cluster_rproc_exit(void *data) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(data); - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_core *core; struct rproc *rproc; int ret; @@ -1803,12 +1729,12 @@ static int k3_r5_probe(struct platform_device *pdev) return 0; } =20 -static const struct k3_r5_mem_data r5_mems[] =3D { +static const struct k3_rproc_mem_data r5_mems[] =3D { { .name =3D "atcm", .dev_addr =3D 0x0 }, { .name =3D "btcm", .dev_addr =3D K3_R5_TCM_DEV_ADDR }, }; =20 -static const struct k3_r5_dev_data r5_data =3D { +static const struct k3_rproc_dev_data r5_data =3D { .mems =3D r5_mems, .num_mems =3D ARRAY_SIZE(r5_mems), .boot_align_addr =3D 0, --=20 2.34.1