From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EE3E8C43334 for ; Mon, 27 Jun 2022 02:48:00 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B760B8450D; Mon, 27 Jun 2022 04:43:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=oss.nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="H4IxLqFd"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7C6DE8450F; Mon, 27 Jun 2022 04:43:33 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50085.outbound.protection.outlook.com [40.107.5.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 3EA81844F4 for ; Mon, 27 Jun 2022 04:43:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=oss.nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=peng.fan@oss.nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ethFeGPkAvCr40MLwxMaNrbc1NSh6/m8xhgU47Znn4EHyX2ugsD2OOE6/lSHFTdyYOOndKe2CyvyOp2ZlmWa1f0cZEbZU7Ug6EVl3WZ5mhYh7f4jwS7t2GV4Jwp0W3WTtFrbtHSWvWL/NzH/ccyNikCWzPhyjcB4bFNQ/euibg8WhGpMdXn4/FdgirSqTXkwtvPNXWUIqxONiopcDkBzP3zbqwjjM3vTRiyrbHlTmHxsOpg4FeVXU58sGB8dx6fZxmJ2wPZtVWNj5E93on+m3ErLjY0VZtei5+ob4ERX4hwhM7TMdeeCh8AzyKF2/hQM2WDk0JW3eijgJ+OTk5mCYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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; bh=HArM5udVl9IRjtFL5izhFb6K3B10EyfFglTAJRl35jM=; b=lHaSA/YfMZfGz35k3l6FsHdmKNHmOw8COE9euazE5iov7CMruio6hpyNfj/rp+un5KIvSCkYxvyhVuQUlCJVouMpm1lN4LDtQg+gMehVc02fTBJiOjc0C2+ylZ5x+rNd71aZl8AlqnPJRr8WIV96C7LMaUod4W1bC6/QKysYtQG1X9jhE7PICZ5SwmiEgebI9g9m9LPmXC68ihW/48aoEDUaBcAOJ5sgyJagrtJ48a2Ntk9KPJmZpGKXiDtCNfucVCXWW9r9SswNrx/NjZjRRfTYH/ZcEDTy8iaLKdREUEIW2DFmBQMjIyMNg8c0jYHC/NrsaIvv0Vz6iUSVBOHHhg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HArM5udVl9IRjtFL5izhFb6K3B10EyfFglTAJRl35jM=; b=H4IxLqFdZgfttc/1mVdRphrdEDI1xk4sxniS8iMFax1rfJEo0E8GVM/uCqtuK3NLemEzK3HvJ6Fc86VzXqBahV2TliGZY9C8v5r0hnOgA+/i+Wc51z2PIUhVfGoKWybYzYcft7ZuAECiA1CdckDhja42NYXhQFF8/uVMIZNlxfo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by VI1PR04MB4109.eurprd04.prod.outlook.com (2603:10a6:803:46::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.18; Mon, 27 Jun 2022 02:43:28 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::fdd4:8557:334b:180d]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::fdd4:8557:334b:180d%6]) with mapi id 15.20.5373.018; Mon, 27 Jun 2022 02:43:28 +0000 From: "Peng Fan (OSS)" To: sbabic@denx.de, festevam@gmail.com, "NXP i.MX U-Boot Team" Cc: u-boot@lists.denx.de, Peng Fan Subject: [PATCH V2 34/49] imx: imx9: Support booting m33 from Acore Date: Mon, 27 Jun 2022 11:24:40 +0800 Message-Id: <20220627032455.28280-35-peng.fan@oss.nxp.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220627032455.28280-1-peng.fan@oss.nxp.com> References: <20220627032455.28280-1-peng.fan@oss.nxp.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SI2PR02CA0020.apcprd02.prod.outlook.com (2603:1096:4:195::7) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f60734cd-f865-488d-ec19-08da57e6d0aa X-MS-TrafficTypeDiagnostic: VI1PR04MB4109:EE_ X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Bjm7EPG/L1JQGmiklPAPVH9IRzzFSETqrOsy3ZhiVbpDrTGkp+/2dimm7jO+CFXBeuXI3P7/eEOdhEWcih5etArbz7UiAFyw6RF3xD4TfS/nRrIDpKJtvSWPJg7L0fCM1zdAa3TxWF0ntGUONax8IIuk55knncv7zQt0TLuKsfbdA68cfKQVZkCG83aSDXmSUYeIMFiNDi0sSRZ/mObFxqilsEiogkEsCkr4GmJAP8h4Ph2AT75a6mK7wsTR0tKDQFro3zDz8ws52tMMeSC58goP1cDtFtiu8YI+kjIiNXsG/yK6B0mcKCIrM2etZ36ci1puUzqB0bduP7lczhIEw/wgvD1+ki7niuiWNL9W6gP35i/t69C3+CwyKgDcsywmZUATVY5bmWFYlX9MPxPFTgwhx58Ky2kzpHKMR3ajnSRv4h9sE94OeZMoSyClUx4rebztZ8Tp7MRs9BLs0UHh3GZFoZ82o8TsLGVQgN4zjKZcSmMbfim3XkYAzUHoWcvILAyepOQMDNhkhyrwiZiAn9p24J6yUciz429REzdeviTAYxwqHebc1CamxGJGhFjrkq5WD9gTEM0vr3JnIw7SaWAR24MmBGYjYucT16wP4lfLctXmI6fuKcrSnyxj98kShXKnTHUfZ1cE400CE4B/TWc+XZsrtiNy0W0lDvau5YkBkYEOtOsc7rWxHQqjfjLVEEdQvQoWq9bCdAsfl61FRpfvRat8Rb4AdT9qv2ICH3bzTL8jRcRgxZZbUVsxZei1C56HPgFwc4hBDtSpqVkHesa6bSqTB4kkDFzx2m1NWTE= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR04MB9417.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(366004)(396003)(346002)(39860400002)(376002)(136003)(1076003)(41300700001)(8936002)(2616005)(52116002)(83380400001)(6862004)(5660300002)(38350700002)(38100700002)(2906002)(6486002)(186003)(478600001)(6666004)(86362001)(316002)(26005)(6512007)(66476007)(66946007)(4326008)(8676002)(66556008)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QUBsKHfLk+BNBznDkX2gnq986AKFpbyhXK6ciizsY+R6z9PLSRimvS8kkbQ4?= =?us-ascii?Q?MBBGKTIuBEJJZIRDO4vkAOMym9CqwMlrnqcQk0w9oR42OI1gna0U9JbPKwKz?= =?us-ascii?Q?eEJrH7s8v2dHVfAntZXdthkIRr4Md1nbLIAfTjAuuW6AoDXBxXEodDdQG/X4?= =?us-ascii?Q?1U5jGjMCWYmahiIqVMkrl9fiMpVloTsaxYsF4XlDiD9vDAxm0GnMAAK57Jbz?= =?us-ascii?Q?efzGN85c/8XpAm+4BO7CvGRyxCoPJ6/sV7X0iAlW28ENIoIg9/ay10LD3lro?= =?us-ascii?Q?f0qXqmdARpkLSycgk29Dmr7mPLcORr621iVRZGa31jsGPEVcq60Md2Fw8SU9?= =?us-ascii?Q?CB/34qyqztAv5yS7vneAilZg8dT3Cif6pltZghNIyteMqxa9id31aNeGx67c?= =?us-ascii?Q?UGVjS7zM/bAwtRhxj60ks9j6emXgvdvfg6AxCzQIp3250oR4OuWh3D6pMvub?= =?us-ascii?Q?gVr1y7cK4xDihuWb6OUiQhIipuLDOu2jBc7WEUeViNdbWei1AycKicyi1kUE?= =?us-ascii?Q?QL6xvSfy9gw0KpXVRR5GBUXXtDFuzi5BdUT/KnHM10AE6GtIvNwyXDoY21Uj?= =?us-ascii?Q?iskmAazqwUDga23InQrKnhbpebHhimdNTUeJwo8A3l+XBAw2VPCAiTK6l0m0?= =?us-ascii?Q?izbxmZRRUGUNttZ1uWW8YT92GRRFPc81JsCoAcq4GtdA+6V0vJwbePGMyMVm?= =?us-ascii?Q?IoTnJygvP43R27lgMMCVLL75A0uooivUvZvX398X2vh228cw5IFPXLdGXBrT?= =?us-ascii?Q?9boM3CRJXKV27R9iWvA8KmNMadnpWiB1CxYoWxLddM9a8ohKSj2XGI2LJdVG?= =?us-ascii?Q?WLg+sBrA+Y9T9WLR/mo1glUJJNui014nzfrbKYJ3EMtsaZNrRgPvuAaoHOwB?= =?us-ascii?Q?7C/0SGw3ODFVKH3S09QcOUKwjNRSN0DVGCvuLe2/g/twxClpStU1rc+I71Un?= =?us-ascii?Q?OWtgd6vIqcfLfpgRaG3SMYR5K/Nbyj0WeBGa8gt0vlcXtEt4X4JpJ2fBlUQB?= =?us-ascii?Q?qcv15PXyU7aGwVVkeCVbX1zaXLNT6DEMY8we4F0Uko3to2VpqQKuzZIM4cja?= =?us-ascii?Q?TifHFnG47pBOCnzgf8Hgg1nJ63VQ7xaRTAZsUBrTKyhPbiZCRuJC6kdEq6BU?= =?us-ascii?Q?2IP3jaXofS9tlWvc+WJe5C4UhPC0rjHtmyH/rED4SuyL7tEyTGtbxyMw9hHz?= =?us-ascii?Q?/w/z16CQpYwlzMi3OoDsv/LnQb8/3hc1dackcKp5TED7spW7d271gj+cBPkB?= =?us-ascii?Q?SSOrf9EY+9JfI4JT2QpSMVWiYa3W9yk4c1os28/sSlTH9CpnI54gkHagfJVV?= =?us-ascii?Q?9d5g6W2IMmlpSfBTGO/87T5uNBTE1pIUUjU9VEX8W61o/dO4JxUFrO1s+JWx?= =?us-ascii?Q?mz+1I4d6M72BwHyMGSblY3Jc0EQKGKda8N20I+GXAg1Ax3O/TD5+JA+a23e9?= =?us-ascii?Q?cmDahmYjMEyDuyi9eF127tDbBdpCzZtslmLsN0EA2YLLrZaT4vooCKf+IVrW?= =?us-ascii?Q?wFEE0LxQM84s8ow8xY8UMkY8/xrrwbPB9o3kb1Ryv6N3SlNsZeu3lgwYc2pj?= =?us-ascii?Q?uogBjd8E+3PthbC9UZkYH+61uzSxoVH3JKLCBRAP?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f60734cd-f865-488d-ec19-08da57e6d0aa X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2022 02:43:28.3190 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oj6tzgJ7Y6M/wZpnIK7C+ohe1PCExHrspVqe1uf6DMtzKDAkg/X62DlflruInStDkCjw5UoNYasLHh/KGA3TeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4109 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Peng Fan Add bootaux command to support on-demand booting M33 from u-boot. It kicks M33 via ATF by "bootaux 0x201e0000 0" Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx9/Makefile | 4 + arch/arm/mach-imx/imx9/imx_bootaux.c | 133 +++++++++++++++++++++++++++ arch/arm/mach-imx/imx9/soc.c | 10 +- include/imx_sip.h | 1 + 4 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 arch/arm/mach-imx/imx9/imx_bootaux.c diff --git a/arch/arm/mach-imx/imx9/Makefile b/arch/arm/mach-imx/imx9/Makefile index 41a22500c95..6d038a60c67 100644 --- a/arch/arm/mach-imx/imx9/Makefile +++ b/arch/arm/mach-imx/imx9/Makefile @@ -5,3 +5,7 @@ obj-y += lowlevel_init.o obj-y += soc.o clock.o clock_root.o trdc.o obj-$(CONFIG_AHAB_BOOT) += ahab.o + +#ifndef CONFIG_SPL_BUILD +obj-y += imx_bootaux.o +#endif diff --git a/arch/arm/mach-imx/imx9/imx_bootaux.c b/arch/arm/mach-imx/imx9/imx_bootaux.c new file mode 100644 index 00000000000..3b6662aeb81 --- /dev/null +++ b/arch/arm/mach-imx/imx9/imx_bootaux.c @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2022 NXP + */ + +#include +#include +#include +#include +#include + +int arch_auxiliary_core_check_up(u32 core_id) +{ + struct arm_smccc_res res; + + arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0, + 0, 0, 0, 0, &res); + + return res.a0; +} + +int arch_auxiliary_core_down(u32 core_id) +{ + struct arm_smccc_res res; + + printf("## Stopping auxiliary core\n"); + + arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_STOP, 0, 0, + 0, 0, 0, 0, &res); + + return 0; +} + +int arch_auxiliary_core_up(u32 core_id, ulong addr) +{ + struct arm_smccc_res res; + u32 stack, pc; + + if (!addr) + return -EINVAL; + + stack = *(u32 *)addr; + pc = *(u32 *)(addr + 4); + + printf("## Starting auxiliary core stack = 0x%08X, pc = 0x%08X...\n", stack, pc); + + arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0, + 0, 0, 0, 0, &res); + + return 0; +} + +/* + * To i.MX6SX and i.MX7D, the image supported by bootaux needs + * the reset vector at the head for the image, with SP and PC + * as the first two words. + * + * Per the cortex-M reference manual, the reset vector of M4/M7 needs + * to exist at 0x0 (TCMUL/IDTCM). The PC and SP are the first two addresses + * of that vector. So to boot M4/M7, the A core must build the M4/M7's reset + * vector with getting the PC and SP from image and filling them to + * TCMUL/IDTCM. When M4/M7 is kicked, it will load the PC and SP by itself. + * The TCMUL/IDTCM is mapped to (MCU_BOOTROM_BASE_ADDR) at A core side for + * accessing the M4/M7 TCMUL/IDTCM. + */ +static int do_bootaux(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong addr; + int ret, up; + u32 core = 0; + u32 stop = 0; + + if (argc < 2) + return CMD_RET_USAGE; + + if (argc > 2) + core = simple_strtoul(argv[2], NULL, 10); + + if (argc > 3) + stop = simple_strtoul(argv[3], NULL, 10); + + up = arch_auxiliary_core_check_up(core); + if (up) { + printf("## Auxiliary core is already up\n"); + return CMD_RET_SUCCESS; + } + + addr = simple_strtoul(argv[1], NULL, 16); + + if (!addr) + return CMD_RET_FAILURE; + + ret = arch_auxiliary_core_up(core, addr); + if (ret) + return CMD_RET_FAILURE; + + return CMD_RET_SUCCESS; +} + +static int do_stopaux(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + int ret, up; + + up = arch_auxiliary_core_check_up(0); + if (!up) { + printf("## Auxiliary core is already down\n"); + return CMD_RET_SUCCESS; + } + + ret = arch_auxiliary_core_down(0); + if (ret) + return CMD_RET_FAILURE; + + return CMD_RET_SUCCESS; +} + +U_BOOT_CMD( + stopaux, CONFIG_SYS_MAXARGS, 1, do_stopaux, + "Stop auxiliary core", + "
[]\n" + " - start auxiliary core [] (default 0),\n" + " at address
\n" +); + +U_BOOT_CMD( + bootaux, CONFIG_SYS_MAXARGS, 1, do_bootaux, + "Start auxiliary core", + "
[]\n" + " - start auxiliary core [] (default 0),\n" + " at address
\n" +); diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c index 2a29454d1eb..ca88271564c 100644 --- a/arch/arm/mach-imx/imx9/soc.c +++ b/arch/arm/mach-imx/imx9/soc.c @@ -131,6 +131,14 @@ static struct mm_region imx93_mem_map[] = { .size = 0x100000UL, .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_OUTER_SHARE + }, { + /* TCM */ + .virt = 0x201c0000UL, + .phys = 0x201c0000UL, + .size = 0x80000UL, + .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN }, { /* OCRAM */ .virt = 0x20480000UL, @@ -380,7 +388,7 @@ void soc_power_init(void) disable_isolation(); } -static bool m33_is_rom_kicked(void) +bool m33_is_rom_kicked(void) { struct blk_ctrl_s_aonmix_regs *s_regs = (struct blk_ctrl_s_aonmix_regs *)BLK_CTRL_S_ANOMIX_BASE_ADDR; diff --git a/include/imx_sip.h b/include/imx_sip.h index 26dbe0421a0..1b873f231be 100644 --- a/include/imx_sip.h +++ b/include/imx_sip.h @@ -15,5 +15,6 @@ #define IMX_SIP_SRC 0xC2000005 #define IMX_SIP_SRC_M4_START 0x00 #define IMX_SIP_SRC_M4_STARTED 0x01 +#define IMX_SIP_SRC_M4_STOP 0x02 #endif -- 2.36.0