Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2228202/?format=api
{ "id": 2228202, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2228202/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260425033742.1519298-11-b-padhi@ti.com/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/1.1/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<20260425033742.1519298-11-b-padhi@ti.com>", "date": "2026-04-25T03:37:41", "name": "[v4,10/11] remoteproc: k3-hsm: Introduce a remoteproc driver for K3 HSM core", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "960bc9c64b5b7e586b21337b6393958dafd8256a", "submitter": { "id": 88460, "url": "http://patchwork.ozlabs.org/api/1.1/people/88460/?format=api", "name": "Padhi, Beleswar", "email": "b-padhi@ti.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260425033742.1519298-11-b-padhi@ti.com/mbox/", "series": [ { "id": 501450, "url": "http://patchwork.ozlabs.org/api/1.1/series/501450/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=501450", "date": "2026-04-25T03:37:39", "name": "Add support to boot TI K3 HSM M4 core", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/501450/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2228202/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2228202/checks/", "tags": {}, "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=ti.com header.i=@ti.com header.a=rsa-sha256\n header.s=selector1 header.b=EXBNU67o;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=ti.com header.i=@ti.com header.b=\"EXBNU67o\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com", "phobos.denx.de; spf=pass smtp.mailfrom=b-padhi@ti.com" ], "Received": [ "from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g2w4z4MY6z1yHS\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 02:19:15 +1000 (AEST)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 827A2841DF;\n\tSat, 25 Apr 2026 18:19:13 +0200 (CEST)", "by phobos.denx.de (Postfix, from userid 109)\n id 229CD841DF; Sat, 25 Apr 2026 18:19:13 +0200 (CEST)", "from SA9PR02CU001.outbound.protection.outlook.com\n (mail-southcentralusazlp170130001.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c10c::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 60FB3840CB\n for <u-boot@lists.denx.de>; Sat, 25 Apr 2026 18:19:10 +0200 (CEST)", "from IA0PR10MB7229.namprd10.prod.outlook.com (2603:10b6:208:400::10)\n by PH7PR10MB7838.namprd10.prod.outlook.com (2603:10b6:510:30a::19)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.23; Sat, 25 Apr\n 2026 16:19:08 +0000", "from DM4PR10MB7508.namprd10.prod.outlook.com (2603:10b6:8:17d::13)\n by IA0PR10MB7229.namprd10.prod.outlook.com (2603:10b6:208:400::10) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.20; Sat, 25 Apr\n 2026 05:16:35 +0000", "from PH8P221CA0027.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:2d8::6)\n by DM4PR10MB7508.namprd10.prod.outlook.com (2603:10b6:8:17d::13) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr\n 2026 03:38:32 +0000", "from CY4PEPF0000EE3D.namprd03.prod.outlook.com\n (2603:10b6:510:2d8:cafe::a0) by PH8P221CA0027.outlook.office365.com\n (2603:10b6:510:2d8::6) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat,\n 25 Apr 2026 03:38:31 +0000", "from flwvzet200.ext.ti.com (198.47.21.194) by\n CY4PEPF0000EE3D.mail.protection.outlook.com (10.167.242.15) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 03:38:29 +0000", "from DFLE201.ent.ti.com (10.64.6.59) by flwvzet200.ext.ti.com\n (10.248.192.31) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr\n 2026 22:38:28 -0500", "from DFLE204.ent.ti.com (10.64.6.62) by DFLE201.ent.ti.com\n (10.64.6.59) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr\n 2026 22:38:28 -0500", "from lelvem-mr06.itg.ti.com (10.180.75.8) by DFLE204.ent.ti.com\n (10.64.6.62) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend\n Transport; Fri, 24 Apr 2026 22:38:28 -0500", "from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [10.24.50.162])\n by lelvem-mr06.itg.ti.com (8.18.1/8.18.1) with ESMTP id\n 63P3bk892903263; Fri, 24 Apr 2026 22:38:25 -0500" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,T_SPF_PERMERROR autolearn=no\n autolearn_force=no version=3.4.2", "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=B0F5W2xhvOn+CHNflQOohZxN1E+Q03TRICgIecJgq7CInXZbNPYkAmDjqBBBv3cRmm4DPs9pSG5iI+nYf5rPTSVBzMQWMqgWA1nYwhvucrbaKeB9vX/ZhUrLxzLhHP/bgXTb9+Zf9TIJX9wJYsb311lIcClYnYQz4fVK92DDorcW+E89oE9yoMsUeCoel3+HtnTrbtqHRJ8STBphBYrtBhqXlePMSgAPTX9iqEe6nMjuvBh2ca9SU9ySG4HtcKmnGX3/kp1jQs8CBCH4OIta3l0LA/hiUHSjCgx7xpSIU5CY3uRvD1K+67lSrrauC3CPWMC+7rx1ohJprlknRxOimw==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=YyZvgal0xdhxn50f03PuWGivdysxKM7woLEhLX4Gi7Y=;\n b=tpVWBMcgR6H9+v3MjBY60cgEFmJY2LtlVrtgXX3JRipaGCVijZ+5vwKVPcZ/cIJdr3QwNzpbQ4zy8qftHSPLH7JSMkpAU608bd1lh8jcpw12wpjq8lEBXQvAi42Wkjn3zlHpbhn+9mJd3P0EXfWdteH8zRMhhpt7jCwn+4fanUI+57P8ONKJAkZMDQtT0NpS+5cww9JzOL8b+IhHtjiy8BUiLYWVXFdU84ok8lPJ1pPQAvv+aNsRzm5oriBm/NySGONLq0A46hu6vfY19b08jsNqUtUlo88TCObdnxNKqmDvhBk1J/Zqlpznzuj31TYDTE6X5azICBIjbHcs+4JtxQ==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 198.47.21.194) smtp.rcpttodomain=lists.denx.de smtp.mailfrom=ti.com;\n dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=ti.com;\n dkim=none (message not signed); arc=none (0)", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=YyZvgal0xdhxn50f03PuWGivdysxKM7woLEhLX4Gi7Y=;\n b=EXBNU67ontYgLhbtgxnZypfMIZ1b4bCI08/hSoOAYKFK9lnNHWrIcUeXLqQd7r+3raR6UPs1piUHGdPE6m1B1ZTmdpz7b5HPlPLB2pkcaDZWwvNf5QQliK1KIssnleTVuo2AP7+IEwpgFML8x+7Fo+oCmvBFJfufojKGCNPEQYY=", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 198.47.21.194)\n smtp.mailfrom=ti.com; dkim=none (message not signed) header.d=none;\n dmarc=pass\n action=none header.from=ti.com;", "Received-SPF": "Pass (protection.outlook.com: domain of ti.com designates\n 198.47.21.194 as permitted sender) receiver=protection.outlook.com;\n client-ip=198.47.21.194; helo=flwvzet200.ext.ti.com; pr=C", "From": "Beleswar Padhi <b-padhi@ti.com>", "To": "<trini@konsulko.com>", "CC": "<afd@ti.com>, <bb@ti.com>, <anshuld@ti.com>, <hnagalla@ti.com>,\n <jm@ti.com>, <nm@ti.com>, <n-francis@ti.com>, <u-kumar1@ti.com>,\n <b-padhi@ti.com>, <u-boot@lists.denx.de>", "Subject": "[PATCH v4 10/11] remoteproc: k3-hsm: Introduce a remoteproc driver\n for K3 HSM core", "Date": "Sat, 25 Apr 2026 09:07:41 +0530", "Message-ID": "<20260425033742.1519298-11-b-padhi@ti.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20260425033742.1519298-1-b-padhi@ti.com>", "References": "<20260425033742.1519298-1-b-padhi@ti.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-C2ProcessedOrg": "333ef613-75bf-4e12-a4b1-8e3623f5dcea", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "\n CY4PEPF0000EE3D:EE_|DM4PR10MB7508:EE_|IA0PR10MB7229:EE_|PH7PR10MB7838:EE_", "X-MS-Office365-Filtering-Correlation-Id": "5e349925-fcde-4e0d-17a5-08dea27c1deb", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|376014|1800799024|82310400026|36860700016|56012099003|22082099003|18002099003;", "X-Microsoft-Antispam-Message-Info": "\n Z8hrJkLsuRzvCeq7OQiQXwpzk7Vt7vfawEgzzSq+45i884HpuhAQNKV32PWRE+6YR8m8wBRhJjNDgAuvMBoUu1zwAJEymxYQr7UkB2cpzgcp7LFNv3TiIjtIG1wi9T+S0IseCnwNDFcl721cqE0hG3vMhc5Is1Wd1klmc1OVu+gBvqSgRzyZV78sPd/yMuDz3m/DbOBO80/yMX53oGxXbOVGZCbkbVNkHKk03fVNj9sIpGmN5lIpaQxLZ8/k4fc/idL1CQS/DLX8h6jQuaIfguP4Wizf4vph0rMaJHaYXJQynlD7LcFTxhzv55dDfGRaoKFCKFWpa81HD7FZs3ZaKSQmMEk3oA5tKz13gx1X0TNCeVGM1tAnMUzqKylZJupU/KnMZsjqnnMbd/poJLALz2Y9GVSypdQBoKoZGhmLcy8fM7UCG0dBIn4VzwxqJW3BTmr2yZAHgCYrZW5BGass5fKTkJ+m0dAqWn5gNbV6BwM1jP4V9lCKBYbboIBriNNK6X8xp52kg7LuXm1sAK3LFIzmqlkJys4ERmNX2z5rDlmlX1Px3HIM8U/pee1oNvXVaTM3AYHeXMrooe7VR9Gd4gJyDnBAgoG7Wyuhj+QG0vCGV7XfN9RGMNlOpWUGrvmaYHX9ESh+5Um0+Q+AVHjjJE4bOR9I9YSoppapzAuA7zRNIaZOVHFYhs4AS3AYWd+tgknsSqZR0j29FSimNcNMPUUrWP+EzFKk6gHZ1HRPV4U=", "X-Forefront-Antispam-Report": "CIP:198.47.21.194; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:flwvzet200.ext.ti.com; PTR:ErrorRetry; CAT:NONE;\n SFS:(13230040)(376014)(1800799024)(82310400026)(36860700016)(56012099003)(22082099003)(18002099003);\n DIR:OUT; SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n JQHuKQ2byAXvsfMw6UQz1TZbIOWCH3uElMC71UuBy3SeL0ubF6/ZQCJpmt3j7/T7su4gO9jPHfq44x397/tmvgnbCovCKtDkGryVgZwSAWlVW5auAU9151irIbqft4LkCY3eL95M59C/ZnhMuTYa32qwp2lAqnvR1ore4l/3fWJwUijxYxO2eA8hDCn2gdikBI3NCtY3d4446hCORwphmV7mHRWbBeMTg81Wt+5VEIMjpfYm9QDQ9O7Xo3vMdvagBTl9QP6IpYyWW9PiQC9aBB0Als15YROYy5bRkc8rN27H2OmogS2K8/4UedkaoOIfQNjFZDaGdGbMthUfu6Aa8bK+Exmc9sD1wUAel5id7QNPkpXnRpjAWfvkbCa1KpEAf4S1+4Ki4B2P6goJxlo1vaSXbNMB+ubtEpg05Y6aKb2o1nQZzN3S/5enC+i+ak10", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Apr 2026 03:38:29.3938 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 5e349925-fcde-4e0d-17a5-08dea27c1deb", "X-MS-Exchange-CrossTenant-Id": "e5b49634-450b-4709-8abb-1e2b19b982b7", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=e5b49634-450b-4709-8abb-1e2b19b982b7; Ip=[198.47.21.194];\n Helo=[flwvzet200.ext.ti.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n CY4PEPF0000EE3D.namprd03.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR10MB7508", "X-OriginatorOrg": "ti.com", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "Some K3 SoCs like J721S2, J784S4, J722S, AM62X and AM62PX have a HSM\n(High Security Module) M4F core in the Wakeup Voltage Domain which could\nbe used to run secure services like Authentication. Boot flow for HSM M4\ncore is different than the general purpose M4F cores, and is as below:\n\n1. Request control of HSM M4F remote processor.\n2. Assert Reset on the HSM M4F remote processor.\n3. For HS devices, Request Secure Entity to Authenticate and Load HSM\n firmware into core's internal SRAM memory region. For GP devices,\n load the unsigned firmware manually.\n4. Deassert Reset on the HSM M4F remote processor.\n5. Release control of HSM M4F remote processor.\n\nAdd a new remoteproc driver to support this boot flow for HSM M4F core.\n\nSigned-off-by: Beleswar Padhi <b-padhi@ti.com>\n---\nv4: Changelog:\n1. None\n\nLink to v3:\nhttps://lore.kernel.org/all/20251231173621.1069988-10-b-padhi@ti.com/\n\nv3: Changelog:\n1. New patch. Add a dedicated remoteproc driver to boot HSM core.\n\n MAINTAINERS | 1 +\n drivers/remoteproc/Kconfig | 10 ++\n drivers/remoteproc/Makefile | 1 +\n drivers/remoteproc/ti_k3_hsm_rproc.c | 252 +++++++++++++++++++++++++++\n 4 files changed, 264 insertions(+)\n create mode 100644 drivers/remoteproc/ti_k3_hsm_rproc.c", "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex fc5cd553ec3..0678f4d59e8 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -814,6 +814,7 @@ F:\tdrivers/phy/ti-pipe3-phy.c\n F:\tdrivers/ram/k3*\n F:\tdrivers/ram/k3*/\n F:\tdrivers/remoteproc/ipu_rproc.c\n+F:\tdrivers/remoteproc/ti_k3_hsm_rproc.c\n F:\tdrivers/remoteproc/k3_system_controller.c\n F:\tdrivers/remoteproc/pruc_rpoc.c\n F:\tdrivers/remoteproc/ti*\ndiff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig\nindex f07ae903a28..c09905b46d7 100644\n--- a/drivers/remoteproc/Kconfig\n+++ b/drivers/remoteproc/Kconfig\n@@ -99,6 +99,16 @@ config REMOTEPROC_TI_K3_M4F\n \t on various TI K3 family of SoCs through the remote processor\n \t framework.\n \n+config REMOTEPROC_TI_K3_HSM_M4F\n+\tbool \"TI K3 HSM M4F remoteproc support\"\n+\tselect REMOTEPROC\n+\tdepends on ARCH_K3\n+\tdepends on TI_SCI_PROTOCOL\n+\thelp\n+\t Say y here to support TI's HSM M4F remote processor subsystems\n+\t on various TI K3 family of SoCs through the remote processor\n+\t framework.\n+\n config REMOTEPROC_TI_K3_R5F\n \tbool \"TI K3 R5F remoteproc support\"\n \tselect REMOTEPROC\ndiff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile\nindex 7ea8023c50b..d29e1bf9db2 100644\n--- a/drivers/remoteproc/Makefile\n+++ b/drivers/remoteproc/Makefile\n@@ -16,6 +16,7 @@ obj-$(CONFIG_REMOTEPROC_STM32_COPRO) += stm32_copro.o\n obj-$(CONFIG_REMOTEPROC_TI_K3_ARM64) += ti_k3_arm64_rproc.o\n obj-$(CONFIG_REMOTEPROC_TI_K3_DSP) += ti_k3_dsp_rproc.o\n obj-$(CONFIG_REMOTEPROC_TI_K3_M4F) += ti_k3_m4_rproc.o\n+obj-$(CONFIG_REMOTEPROC_TI_K3_HSM_M4F) += ti_k3_hsm_rproc.o\n obj-$(CONFIG_REMOTEPROC_TI_K3_R5F) += ti_k3_r5f_rproc.o\n obj-$(CONFIG_REMOTEPROC_TI_POWER) += ti_power_proc.o\n obj-$(CONFIG_REMOTEPROC_TI_PRU) += pru_rproc.o\ndiff --git a/drivers/remoteproc/ti_k3_hsm_rproc.c b/drivers/remoteproc/ti_k3_hsm_rproc.c\nnew file mode 100644\nindex 00000000000..4c05fef487a\n--- /dev/null\n+++ b/drivers/remoteproc/ti_k3_hsm_rproc.c\n@@ -0,0 +1,252 @@\n+// SPDX-License-Identifier: GPL-2.0+\n+/*\n+ * Texas Instruments' K3 HSM M4 Remoteproc driver\n+ *\n+ * Copyright (C) 2025 Texas Instruments Incorporated - http://www.ti.com/\n+ *\tBeleswar Padhi <b-padhi@ti.com>\n+ */\n+\n+#include <cpu_func.h>\n+#include <dm.h>\n+#include <log.h>\n+#include <malloc.h>\n+#include <remoteproc.h>\n+#include <errno.h>\n+#include <asm/io.h>\n+#include <dm/device_compat.h>\n+#include <linux/err.h>\n+#include <linux/sizes.h>\n+#include <linux/soc/ti/ti_sci_protocol.h>\n+#include \"ti_sci_proc.h\"\n+#include <mach/security.h>\n+\n+#define PROC_BOOT_CTRL_RESET_FLAG_HSM_M4 0x00000001\n+\n+/**\n+ * struct k3_hsm_mem - internal memory structure\n+ * @cpu_addr: MPU virtual address of the memory region\n+ * @bus_addr: Bus address used to access the memory region\n+ * @dev_addr: Device address from remoteproc view\n+ * @size: Size of the memory region\n+ */\n+struct k3_hsm_mem {\n+\tvoid __iomem *cpu_addr;\n+\tphys_addr_t bus_addr;\n+\tphys_addr_t dev_addr;\n+\tsize_t size;\n+};\n+\n+/**\n+ * struct k3_hsm_mem_data - memory definitions for hsm remote core\n+ * @name: name for this memory entry\n+ * @dev_addr: device address for the memory entry\n+ */\n+struct k3_hsm_mem_data {\n+\tconst char *name;\n+\tconst u32 dev_addr;\n+};\n+\n+/**\n+ * struct k3_hsm_privdata - Structure representing Remote processor data.\n+ * @tsp:\tPointer to TISCI proc control handle\n+ * @mem:\tArray of available memories\n+ * @num_mems:\tNumber of available memories\n+ */\n+struct k3_hsm_privdata {\n+\tstruct ti_sci_proc tsp;\n+\tstruct k3_hsm_mem *mem;\n+\tint num_mems;\n+};\n+\n+/**\n+ * k3_hsm_load() - Load up the Remote processor image\n+ * @dev:\trproc device pointer\n+ * @addr:\tAddress at which image is available\n+ * @size:\tsize of the image\n+ *\n+ * Return: 0 if all goes good, else appropriate error message.\n+ */\n+static int k3_hsm_load(struct udevice *dev, ulong addr, ulong size)\n+{\n+\tstruct k3_hsm_privdata *hsm = dev_get_priv(dev);\n+\tsize_t image_size = size;\n+\tint ret;\n+\n+\tret = ti_sci_proc_request(&hsm->tsp);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ti_sci_proc_set_control(&hsm->tsp,\n+\t\t\t\t PROC_BOOT_CTRL_RESET_FLAG_HSM_M4, 0);\n+\tif (ret)\n+\t\tgoto proc_release;\n+\n+\tti_secure_image_post_process((void *)&addr, &image_size);\n+\n+\tif (image_size == size) {\n+\t\tdebug(\"Loading HSM GP binary into SRAM0_0\\n\");\n+\t\tmemcpy((void *)hsm->mem[0].cpu_addr, (void *)(u32)addr, size);\n+\t\tflush_dcache_range((unsigned long)hsm->mem[0].cpu_addr,\n+\t\t\t\t (unsigned long)(hsm->mem[0].cpu_addr + size));\n+\t}\n+\n+proc_release:\n+\tti_sci_proc_release(&hsm->tsp);\n+\treturn ret;\n+}\n+\n+/**\n+ * k3_hsm_start() - Start the remote processor\n+ * @dev:\trproc device pointer\n+ *\n+ * Return: 0 if all went ok, else return appropriate error\n+ */\n+static int k3_hsm_start(struct udevice *dev)\n+{\n+\tstruct k3_hsm_privdata *hsm = dev_get_priv(dev);\n+\tint ret;\n+\n+\tret = ti_sci_proc_request(&hsm->tsp);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ti_sci_proc_set_control(&hsm->tsp, 0,\n+\t\t\t\t PROC_BOOT_CTRL_RESET_FLAG_HSM_M4);\n+\n+\tti_sci_proc_release(&hsm->tsp);\n+\n+\treturn ret;\n+}\n+\n+static int k3_hsm_stop(struct udevice *dev)\n+{\n+\tstruct k3_hsm_privdata *hsm = dev_get_priv(dev);\n+\tint ret;\n+\n+\tti_sci_proc_request(&hsm->tsp);\n+\n+\tret = ti_sci_proc_set_control(&hsm->tsp,\n+\t\t\t\t PROC_BOOT_CTRL_RESET_FLAG_HSM_M4, 0);\n+\n+\tti_sci_proc_release(&hsm->tsp);\n+\n+\treturn ret;\n+}\n+\n+static const struct dm_rproc_ops k3_hsm_ops = {\n+\t.load = k3_hsm_load,\n+\t.start = k3_hsm_start,\n+\t.stop = k3_hsm_stop,\n+};\n+\n+static int ti_sci_proc_of_to_priv(struct udevice *dev, struct ti_sci_proc *tsp)\n+{\n+\tu32 ids[2];\n+\tint ret;\n+\n+\ttsp->sci = ti_sci_get_by_phandle(dev, \"ti,sci\");\n+\tif (IS_ERR(tsp->sci)) {\n+\t\tdev_err(dev, \"ti_sci get failed: %ld\\n\", PTR_ERR(tsp->sci));\n+\t\treturn PTR_ERR(tsp->sci);\n+\t}\n+\n+\tret = dev_read_u32_array(dev, \"ti,sci-proc-ids\", ids, 2);\n+\tif (ret) {\n+\t\tdev_err(dev, \"Proc IDs not populated %d\\n\", ret);\n+\t\treturn ret;\n+\t}\n+\n+\ttsp->ops = &tsp->sci->ops.proc_ops;\n+\ttsp->proc_id = ids[0];\n+\ttsp->host_id = ids[1];\n+\ttsp->dev_id = dev_read_u32_default(dev, \"ti,sci-dev-id\",\n+\t\t\t\t\t TI_SCI_RESOURCE_NULL);\n+\tif (tsp->dev_id == TI_SCI_RESOURCE_NULL) {\n+\t\tdev_err(dev, \"Device ID not populated %d\\n\", ret);\n+\t\treturn -ENODEV;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static const struct k3_hsm_mem_data hsm_mems[] = {\n+\t{ .name = \"sram0_0\", .dev_addr = 0x0 },\n+\t{ .name = \"sram0_1\", .dev_addr = 0x20000 },\n+\t{ .name = \"sram1\", .dev_addr = 0x30000 },\n+};\n+\n+static int k3_hsm_of_get_memories(struct udevice *dev)\n+{\n+\tstruct k3_hsm_privdata *hsm = dev_get_priv(dev);\n+\tint i;\n+\n+\thsm->num_mems = ARRAY_SIZE(hsm_mems);\n+\thsm->mem = calloc(hsm->num_mems, sizeof(*hsm->mem));\n+\tif (!hsm->mem)\n+\t\treturn -ENOMEM;\n+\n+\tfor (i = 0; i < hsm->num_mems; i++) {\n+\t\thsm->mem[i].bus_addr = dev_read_addr_size_name(dev,\n+\t\t\t\t\t\t\t hsm_mems[i].name,\n+\t\t\t\t\t\t\t (fdt_addr_t *)&hsm->mem[i].size);\n+\t\tif (hsm->mem[i].bus_addr == FDT_ADDR_T_NONE) {\n+\t\t\tdev_err(dev, \"%s bus address not found\\n\",\n+\t\t\t\thsm_mems[i].name);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\thsm->mem[i].cpu_addr = map_physmem(hsm->mem[i].bus_addr,\n+\t\t\t\t\t\t hsm->mem[i].size,\n+\t\t\t\t\t\t MAP_NOCACHE);\n+\t\thsm->mem[i].dev_addr = hsm_mems[i].dev_addr;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * k3_hsm_probe() - Basic probe\n+ * @dev:\tcorresponding k3 remote processor device\n+ *\n+ * Return: 0 if all goes good, else appropriate error message.\n+ */\n+static int k3_hsm_probe(struct udevice *dev)\n+{\n+\tstruct k3_hsm_privdata *hsm;\n+\tint ret;\n+\n+\thsm = dev_get_priv(dev);\n+\n+\tret = ti_sci_proc_of_to_priv(dev, &hsm->tsp);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = k3_hsm_of_get_memories(dev);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\treturn 0;\n+}\n+\n+static int k3_hsm_remove(struct udevice *dev)\n+{\n+\tstruct k3_hsm_privdata *hsm = dev_get_priv(dev);\n+\n+\tfree(hsm->mem);\n+\n+\treturn 0;\n+}\n+\n+static const struct udevice_id k3_hsm_ids[] = {\n+\t{ .compatible = \"ti,hsm-m4fss\" },\n+\t{}\n+};\n+\n+U_BOOT_DRIVER(k3_hsm) = {\n+\t.name = \"k3_hsm\",\n+\t.of_match = k3_hsm_ids,\n+\t.id = UCLASS_REMOTEPROC,\n+\t.ops = &k3_hsm_ops,\n+\t.probe = k3_hsm_probe,\n+\t.remove = k3_hsm_remove,\n+\t.priv_auto = sizeof(struct k3_hsm_privdata),\n+};\n", "prefixes": [ "v4", "10/11" ] }