Message ID | 20230106034305.2868740-5-peng.fan@oss.nxp.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp621742wrt; Thu, 5 Jan 2023 19:46:09 -0800 (PST) X-Google-Smtp-Source: AMrXdXvXTFxS/Kc8cblsaz2bL8D/4so2tjCDanGpdtHImfdgew+0oVGEZM2XrfQOTEOVtBncoXZc X-Received: by 2002:a17:906:7fc3:b0:7c1:10b8:e6a4 with SMTP id r3-20020a1709067fc300b007c110b8e6a4mr43282320ejs.19.1672976769019; Thu, 05 Jan 2023 19:46:09 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1672976768; cv=pass; d=google.com; s=arc-20160816; b=Q4W8okGqPs8B4kSglVEm9ELZ7rg06rUr9lj1RzhWcPg2W04cfTHK2PDMGsae+j/hjN ohfDk1A99Bq2vCJjT65qXMriCDTA61gHw/M89cz2FZYU3lHhlJuIY4Z0YtH1wKXxIxkV pkf/JTAeIb/l60r+jcHe0GmB/0eqCfLmodtD9OYCWKrmKmGBaCJAZgMvLvudWXzFWmv7 7ZjQ9q8Q81xrL35zCqdyVObhiiPQ6QgR4AN1X/u6P+9uh/hbERKWe61CcgKJYrFAcfgr Ykj/G5MYyAKPScoQ+Wu2O8AZsouzzhSuB27vawo0/Hgp84KL68t9d0MNAxm6Gj5Q7DFM vq2w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xYjpcui40d53tWYIiBAMBJIEqPJx9z+VymgxfqhVTZ8=; b=HhV4ZlssBdIxg+GMk/QNkpt1aCh/nlysNmehAnAJggxSQxn2gKASjYXy94CBd2vzo7 LpKL/D65SqMWuMimGZsXXlZoz/LqE3mTava8n04+FJBdVvs/7PY5qEJfDnQQmlnPX61t +K5JOA3YgGhoskwUTDG6VYwce+RtBwEegQ9RCGrXR60i317vSrGGK8MaHh1H5fg9vAA2 zrAGmBX3SW/N2dgT1o1uTn/rV5dl5UokoULmNKI11IfpL41d7suOKBCYzmt8/DZsh8YK eJIofF+O5/Jj7Cx4s04eWO2bDOtTUT/eCWKeBQy0IGd0HbqEZ4WWpNdTVLGs5Glb9eve 7uug== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@NXP1.onmicrosoft.com header.s=selector2-NXP1-onmicrosoft-com header.b=B12EREub; arc=pass (i=1 spf=pass spfdomain=oss.nxp.com dkim=pass dkdomain=oss.nxp.com dmarc=pass fromdomain=oss.nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b8-20020a056402350800b0048589250850si292594edd.11.2023.01.05.19.45.45; Thu, 05 Jan 2023 19:46:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@NXP1.onmicrosoft.com header.s=selector2-NXP1-onmicrosoft-com header.b=B12EREub; arc=pass (i=1 spf=pass spfdomain=oss.nxp.com dkim=pass dkdomain=oss.nxp.com dmarc=pass fromdomain=oss.nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232088AbjAFDma (ORCPT <rfc822;tmhikaru@gmail.com> + 99 others); Thu, 5 Jan 2023 22:42:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231923AbjAFDmL (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 5 Jan 2023 22:42:11 -0500 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2057.outbound.protection.outlook.com [40.107.247.57]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A95946A0FC; Thu, 5 Jan 2023 19:42:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Enxzq+IxHpTyAGM9cS3xviSCBBjP2+JRw3jb8g9Q0oT9Myu7EprZMHTbrkO+69hvkruwOJE4AHdcBZvO6zcVLCsOjDssPKZq3dxfET9T9AEtmOJBL3Huq8ONh9DKUmY7bPIvLQvM8Qh3TL7oSK7aQgzUMQxRIZbpBqMVcbz+Pk/FUzMFjSqfnFUCdbhVTX7Sdr14blbYffJyORCMhZVOpl9/2CKNviEvtrTkKzAGFj9u8ElJeVHUjTxEwplkcdx7/58rCk3GCu8ggIjCycDUCozv7NHV7rtSQV4Wof4mv27/XUNQEiYn2L7j9WsmzSPK9vVwwUOsmzv9THaSRTA54A== 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=xYjpcui40d53tWYIiBAMBJIEqPJx9z+VymgxfqhVTZ8=; b=dzYEOSkYTwbBLhoYM1oFY4xa1k5QHgyi2OXf8iewBl9i+5VloRGI3tMhBDSMwa96KZycxxe+hWtW3k/wh/DLUh2tmaIAy+MxDqFBaOfrkfCWo8ylOBCtpikQVqcdvxNx/909hnuqwRhzIum9sNNJi64jjz9I1mRi9G8vz1UhNAn7XyGZ1fXQhznjpmpkCGGZPExh+rckcud3kyvPDPP//09nKAtoCeEunUx7RRLEeAUvkjtQkur3ZPqHXdZet/dmLEvCSpJmX7d8vch0XHD9ktBGUsgpJVYTPib+9A573dEGBzh23kEYwRPeNFpPf/MnYxZHJyPuwCF3AKNB9U+TMA== 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=xYjpcui40d53tWYIiBAMBJIEqPJx9z+VymgxfqhVTZ8=; b=B12EREubryABvAAgQa9lxXk8BbJtIAVDoSjSfSTU6RSIpTTdiF7Er7JHSyVl7gBpTjztnX0X84Zz7R2UrBEvz0tM/mIGsh4DsLeFpe2W/uymWmJnHbDIVvQeJkraAAN6E2R5W1mkwFdM+hpxju8QGr7ctlCgXYvL9x+hoj0HyzA= 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 DB9PR04MB8480.eurprd04.prod.outlook.com (2603:10a6:10:2c6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Fri, 6 Jan 2023 03:42:00 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::29b9:5061:2054:174b]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::29b9:5061:2054:174b%7]) with mapi id 15.20.5944.019; Fri, 6 Jan 2023 03:42:00 +0000 From: "Peng Fan (OSS)" <peng.fan@oss.nxp.com> To: andersson@kernel.org, mathieu.poirier@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, arnaud.pouliquen@foss.st.com Cc: kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, linux-remoteproc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Peng Fan <peng.fan@nxp.com> Subject: [PATCH 4/5] remoteproc: imx_rproc: set Cortex-M stack/pc to TCML Date: Fri, 6 Jan 2023 11:43:04 +0800 Message-Id: <20230106034305.2868740-5-peng.fan@oss.nxp.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230106034305.2868740-1-peng.fan@oss.nxp.com> References: <20230106034305.2868740-1-peng.fan@oss.nxp.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SI2P153CA0017.APCP153.PROD.OUTLOOK.COM (2603:1096:4:140::10) 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-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|DB9PR04MB8480:EE_ X-MS-Office365-Filtering-Correlation-Id: a8fb7b01-4c6e-4418-0ed9-08daef97f79e 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: 4Jx4C45/GhhUVIdWcy3Ga5xLWKr1LuXmvoCtxaEuLyE66rx/Huo2k+pgnFA4DSJmkksXgMSDVFt9wFP5uGrSeaVMuVdSS5/G5k6DnukPbPEYhedTamtKEclUuIRMb4QLZ7vbUIfxnRAZV5HPL96rHqReTg6NXRxvIoMT4NBfoKTvMNz94z7bx0CeVo2RpvljQjjo2ISQltDvC0d7PkalFe1Zy3dmDbE7a9YSaPfkdNLK+XwT0OoJh3qbDofKk/975CcynAhcTTOaY+SgqYwDewpSicgR0FxkP389/HF85JuAWpKix8q4RkRAY1uZA9cmgUhZtkFdOsll0Akg7PhxAR1oHLfSl2WAVMf4N64cdD+UIrWVaYYYBO2c91Jn7RgVulkd4B15tW31q8xL8LxQ/P4GxfFqNbksGAk6VuH4GobvdHm26bgva1ecOhEJmvkDf84gp2wO8nBSG3azUKOPGtEY2zK42VF9I0mw72QH6Wd9LmoSidtdxOijbVkhGngCFYgfV+mbsQjl2owPGXPrDxmbdi/ZgxcwfeVv7Yb4EtGv7t7OKPHuTKIzmhUcNq6Fqq8tfJzu7nLgcNkihkT2isH475AUs3o0f/9N1wIJePMQAQTt6YmNWr9m/9iHt8Opw8QGmYRezld0gU/bzEI1cwth+GJvmyKa9HaFSw91kePl1hDt6zW1fcQDlM8dJYLGWg6CzTQoOXFbFNZcURsgWg== 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:(13230022)(4636009)(366004)(39860400002)(346002)(376002)(136003)(396003)(451199015)(38350700002)(38100700002)(6512007)(86362001)(186003)(6486002)(316002)(26005)(4326008)(8676002)(66946007)(66556008)(478600001)(2616005)(1076003)(66476007)(52116002)(2906002)(6506007)(41300700001)(7416002)(83380400001)(5660300002)(8936002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lEAFr+rCpHYT0TrJmffcCAuHlwz281ipEOdhWVGtfnL0orM1FP4L6PZe2NPWTn56WcRewkH4R7F8nnvkfpJMA4eAxuReeQtrOsN5A9d9pio3x5Ax/cDPIfXuO/wF2AtC+71F9YGU3EIfh8qgZ2mCthFwlfaBSZCYFpPbQ5Xz2u8hFD/HsOqIzq3xU8cCVSB9we21vqLvM7txYTn1EW2EreTgtw9EplO8nNjcL8Voiijy5cyqnJ7APJ3oOA3ICmPSCL1B6FA9Z3tDYm+vaZ3LVLzZEE9zvpr/8uoETYmVYDen7MgDiHRePs05QT1fX4V6ILnR0TI9LSQVCRZM735sMGSwCtDjUq9goBhR+p+E4vTtlANmx1wyICxw7UEWc5oZqzkvX3rNGsotUzN+sr9uLirWj3ZJLjDBirBpAnMfPJJtyDWhh7dijvAenwjKoa8MFRfmoe8hNtNymtBds1Yn0zJk5iEA4A76nyXB6JfPNchJsK8+p9WN2P/+0Fv++0K6mqnbcqBvyeRaSFwYdsyeMOEqAw0OTnOWLYmikyF64jc8B+Dxpm40Nqy/VQ/hHHpY1/QrQZaXGZDWNfjoprjOzyU7OT8rbAVFbbuZ4fzzH/Luiv5HZD5GAzqZnEOP6S3pBwbhfWYsbk3DHilswM9/quvTScGOFC+eY3GFgx+cerxliXwIH5RU5nN8Ted01IsxQe3lK0nHbx6FAozw23meF9RkKMU8DP5qvbLIdU8raeQa+cELzTdrZONvuVB2IB1TI3fWuxvyPjg9OcdXBhBPX9PhIfV8vDYm5hwsa8srlM/qh4qet5BaIS85dxvdDmOfTkgkCyT5lia/5WPePuTQWeqFOXbV7Wy3fgMb04wxhN6MSCv7YX9dzHDczbVE158NE490yYyS428horOCZZOuYP0mDLIJndtyR4jwzp7jVXSQnXCy81ESyVCofpQZXCQOiXNAU+6hFmv2aBLYyXSbcdFnoslnuKnynp1dY8hQQ/8YX5CZbJMyxVwLR29i9xH5YH4ADRZQ1xWg0IOPtrg81VXcGw+CzIjh+hVSntsNCnYmG7DCx5X3GExQ20LiEBJCwdokEIwSQL/sKQnfcCRgwMJAYW4w+9kzpc+WJSf8BuuFkf6hmJmCpwvwYLWdH7qg9EZIlwsTukjglIKC5g79AeeT8aHTVpSE18Ydt6TTquN6UrDj45780FXtr8HtYrc4KXt/qyIzNkFJPyiXMxC2ugKxXDU9KKuRb+1OKIyT9MTJGzIrVKJK9WmgswicQv1zd/z1jvAUNwxMdYZPd5q6EfyaoALiLBL9vY1LJKlkFI16QSKbl9N5cPUxcdzyTQ1EzbQr5b57zB8Y25pnuxnllHvxJZZY9q+MCnYP/dhbrSN9W4AfJFnjEQsXpAfhzGwio7LWdAtbIs5KZsPSqpaskpeNcJM9XUyS5wPUxH38SG3KH9L6yHZ5YrgDB1yjm03K+FH96XtSR4+Ic7gliq3/9lSEwr5ZG7nYXBzSK2eVknZmYCfMnXpkza2R6a0e1BsMlS9pp5YG3uwokQ7F4caYj4h6qsmoT7JPZ6kZC9c8zpLGkwpTaZsVkU7HSAI7ANzR X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8fb7b01-4c6e-4418-0ed9-08daef97f79e X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2023 03:42:00.1339 (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: gp0S0rpwl5l5yF4Un+8TS1IaYr8JdchuqXGgqL/Dr5dlSM01CY22l2unDMOYPkHgWmYwFdQngsFjYwUP2bFeIA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8480 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754243288289207193?= X-GMAIL-MSGID: =?utf-8?q?1754243288289207193?= |
Series |
remoteproc: imx_rproc: support firmware in DDR
|
|
Commit Message
Peng Fan (OSS)
Jan. 6, 2023, 3:43 a.m. UTC
From: Peng Fan <peng.fan@nxp.com> The i.MX8M Cortex-M core not has ROM. It has a requirement is the stack, pc value should be set in address 0 and 4 from the view of itself. From Cortex-A core view, the region is at TCML start address. The stack and pc value are the first two words stored in section ".interrupts" of the firmware, and the section is the first section in the firmware. When the firmware is built to run in TCML, there is no issue, because when copying elf segments, the first two words are copied to TCML also. However when the firmware is built ro run in DDR, the first two words are not copied to TCML start address. This patch is to find the ".interrupts" section, read out the first two words and write to TCML start address at offset 0 and 4. Signed-off-by: Peng Fan <peng.fan@nxp.com> --- drivers/remoteproc/imx_rproc.c | 37 +++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
Comments
Hi Peng, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on remoteproc/rproc-next] [also build test WARNING on linus/master v6.2-rc2 next-20230106] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Peng-Fan-OSS/remoteproc-elf_loader-introduce-rproc_elf_find_shdr/20230106-114403 base: git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git rproc-next patch link: https://lore.kernel.org/r/20230106034305.2868740-5-peng.fan%40oss.nxp.com patch subject: [PATCH 4/5] remoteproc: imx_rproc: set Cortex-M stack/pc to TCML config: arm64-randconfig-r022-20230106 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 8d9828ef5aa9688500657d36cd2aefbe12bbd162) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/40239477bcfaaea196729da9c6e4b68b862eeff7 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Peng-Fan-OSS/remoteproc-elf_loader-introduce-rproc_elf_find_shdr/20230106-114403 git checkout 40239477bcfaaea196729da9c6e4b68b862eeff7 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/remoteproc/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/remoteproc/imx_rproc.c:647:6: warning: variable 'sh_addr' set but not used [-Wunused-but-set-variable] u64 sh_addr, offset; ^ 1 warning generated. vim +/sh_addr +647 drivers/remoteproc/imx_rproc.c 638 639 static u64 imx_rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw) 640 { 641 struct imx_rproc *priv = rproc->priv; 642 const u8 *elf_data = (void *)fw->data; 643 u8 class = fw_elf_get_class(fw); 644 u64 bootaddr = rproc_elf_get_boot_addr(rproc, fw); 645 const void *shdr; 646 void *va; > 647 u64 sh_addr, offset; 648 649 if (priv->dcfg->devtype == IMX_RPROC_IMX8M) { 650 /* 651 * i.MX8M Cortex-M requires [stack, pc] be put in address 652 * [0, 4], so the da address is 0, size is 8 words. 653 */ 654 va = rproc_da_to_va(rproc, 0, 8, NULL); 655 shdr = rproc_elf_find_shdr(rproc, fw, ".interrupts"); 656 if (!shdr || !va) 657 return bootaddr; 658 sh_addr = elf_shdr_get_sh_addr(class, shdr); 659 offset = elf_shdr_get_sh_offset(class, shdr); 660 661 /* 662 * Write stack, pc to TCML start address. The TCML region 663 * is marked with ATT_IOMEM, so use writel. 664 */ 665 writel(*(u32 *)(elf_data + offset), va); 666 writel(*(u32 *)(elf_data + offset + 4), va + 4); 667 } 668 669 return bootaddr; 670 } 671
Hi Peng, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on remoteproc/rproc-next] [also build test WARNING on linus/master v6.2-rc3 next-20230111] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Peng-Fan-OSS/remoteproc-elf_loader-introduce-rproc_elf_find_shdr/20230106-114403 base: git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git rproc-next patch link: https://lore.kernel.org/r/20230106034305.2868740-5-peng.fan%40oss.nxp.com patch subject: [PATCH 4/5] remoteproc: imx_rproc: set Cortex-M stack/pc to TCML config: arm-randconfig-s031-20230110 compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/40239477bcfaaea196729da9c6e4b68b862eeff7 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Peng-Fan-OSS/remoteproc-elf_loader-introduce-rproc_elf_find_shdr/20230106-114403 git checkout 40239477bcfaaea196729da9c6e4b68b862eeff7 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm SHELL=/bin/bash drivers/remoteproc/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) drivers/remoteproc/imx_rproc.c:503:12: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void *va @@ got void [noderef] __iomem * @@ drivers/remoteproc/imx_rproc.c:503:12: sparse: expected void *va drivers/remoteproc/imx_rproc.c:503:12: sparse: got void [noderef] __iomem * drivers/remoteproc/imx_rproc.c:520:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void volatile [noderef] __iomem *io_addr @@ got void *va @@ drivers/remoteproc/imx_rproc.c:520:20: sparse: expected void volatile [noderef] __iomem *io_addr drivers/remoteproc/imx_rproc.c:520:20: sparse: got void *va drivers/remoteproc/imx_rproc.c:636:17: sparse: sparse: cast removes address space '__iomem' of expression >> drivers/remoteproc/imx_rproc.c:665:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void *[assigned] va @@ drivers/remoteproc/imx_rproc.c:665:17: sparse: expected void volatile [noderef] __iomem *addr drivers/remoteproc/imx_rproc.c:665:17: sparse: got void *[assigned] va >> drivers/remoteproc/imx_rproc.c:666:17: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/remoteproc/imx_rproc.c:666:17: sparse: expected void volatile [noderef] __iomem *addr drivers/remoteproc/imx_rproc.c:666:17: sparse: got void * vim +665 drivers/remoteproc/imx_rproc.c 495 496 static int imx_rproc_mem_alloc(struct rproc *rproc, 497 struct rproc_mem_entry *mem) 498 { 499 struct device *dev = rproc->dev.parent; 500 void *va; 501 502 dev_dbg(dev, "map memory: %p+%zx\n", &mem->dma, mem->len); > 503 va = ioremap_wc(mem->dma, mem->len); 504 if (IS_ERR_OR_NULL(va)) { 505 dev_err(dev, "Unable to map memory region: %p+%zx\n", 506 &mem->dma, mem->len); 507 return -ENOMEM; 508 } 509 510 /* Update memory entry va */ 511 mem->va = va; 512 513 return 0; 514 } 515 516 static int imx_rproc_mem_release(struct rproc *rproc, 517 struct rproc_mem_entry *mem) 518 { 519 dev_dbg(rproc->dev.parent, "unmap memory: %pa\n", &mem->dma); 520 iounmap(mem->va); 521 522 return 0; 523 } 524 525 static int imx_rproc_prepare(struct rproc *rproc) 526 { 527 struct imx_rproc *priv = rproc->priv; 528 struct device_node *np = priv->dev->of_node; 529 struct of_phandle_iterator it; 530 struct rproc_mem_entry *mem; 531 struct reserved_mem *rmem; 532 u32 da; 533 534 /* Register associated reserved memory regions */ 535 of_phandle_iterator_init(&it, np, "memory-region", NULL, 0); 536 while (of_phandle_iterator_next(&it) == 0) { 537 /* 538 * Ignore the first memory region which will be used vdev buffer. 539 * No need to do extra handlings, rproc_add_virtio_dev will handle it. 540 */ 541 if (!strcmp(it.node->name, "vdev0buffer")) 542 continue; 543 544 if (!strcmp(it.node->name, "rsc-table")) 545 continue; 546 547 rmem = of_reserved_mem_lookup(it.node); 548 if (!rmem) { 549 dev_err(priv->dev, "unable to acquire memory-region\n"); 550 return -EINVAL; 551 } 552 553 /* No need to translate pa to da, i.MX use same map */ 554 da = rmem->base; 555 556 /* Register memory region */ 557 mem = rproc_mem_entry_init(priv->dev, NULL, (dma_addr_t)rmem->base, rmem->size, da, 558 imx_rproc_mem_alloc, imx_rproc_mem_release, 559 it.node->name); 560 561 if (mem) 562 rproc_coredump_add_segment(rproc, da, rmem->size); 563 else 564 return -ENOMEM; 565 566 rproc_add_carveout(rproc, mem); 567 } 568 569 return 0; 570 } 571 572 static int imx_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) 573 { 574 int ret; 575 576 ret = rproc_elf_load_rsc_table(rproc, fw); 577 if (ret) 578 dev_info(&rproc->dev, "No resource table in elf\n"); 579 580 return 0; 581 } 582 583 static void imx_rproc_kick(struct rproc *rproc, int vqid) 584 { 585 struct imx_rproc *priv = rproc->priv; 586 int err; 587 __u32 mmsg; 588 589 if (!priv->tx_ch) { 590 dev_err(priv->dev, "No initialized mbox tx channel\n"); 591 return; 592 } 593 594 /* 595 * Send the index of the triggered virtqueue as the mu payload. 596 * Let remote processor know which virtqueue is used. 597 */ 598 mmsg = vqid << 16; 599 600 err = mbox_send_message(priv->tx_ch, (void *)&mmsg); 601 if (err < 0) 602 dev_err(priv->dev, "%s: failed (%d, err:%d)\n", 603 __func__, vqid, err); 604 } 605 606 static int imx_rproc_attach(struct rproc *rproc) 607 { 608 return imx_rproc_xtr_mbox_init(rproc); 609 } 610 611 static int imx_rproc_detach(struct rproc *rproc) 612 { 613 struct imx_rproc *priv = rproc->priv; 614 const struct imx_rproc_dcfg *dcfg = priv->dcfg; 615 616 if (dcfg->method != IMX_RPROC_SCU_API) 617 return -EOPNOTSUPP; 618 619 if (imx_sc_rm_is_resource_owned(priv->ipc_handle, priv->rsrc_id)) 620 return -EOPNOTSUPP; 621 622 imx_rproc_free_mbox(rproc); 623 624 return 0; 625 } 626 627 static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz) 628 { 629 struct imx_rproc *priv = rproc->priv; 630 631 /* The resource table has already been mapped in imx_rproc_addr_init */ 632 if (!priv->rsc_table) 633 return NULL; 634 635 *table_sz = SZ_1K; 636 return (struct resource_table *)priv->rsc_table; 637 } 638 639 static u64 imx_rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw) 640 { 641 struct imx_rproc *priv = rproc->priv; 642 const u8 *elf_data = (void *)fw->data; 643 u8 class = fw_elf_get_class(fw); 644 u64 bootaddr = rproc_elf_get_boot_addr(rproc, fw); 645 const void *shdr; 646 void *va; 647 u64 sh_addr, offset; 648 649 if (priv->dcfg->devtype == IMX_RPROC_IMX8M) { 650 /* 651 * i.MX8M Cortex-M requires [stack, pc] be put in address 652 * [0, 4], so the da address is 0, size is 8 words. 653 */ 654 va = rproc_da_to_va(rproc, 0, 8, NULL); 655 shdr = rproc_elf_find_shdr(rproc, fw, ".interrupts"); 656 if (!shdr || !va) 657 return bootaddr; 658 sh_addr = elf_shdr_get_sh_addr(class, shdr); 659 offset = elf_shdr_get_sh_offset(class, shdr); 660 661 /* 662 * Write stack, pc to TCML start address. The TCML region 663 * is marked with ATT_IOMEM, so use writel. 664 */ > 665 writel(*(u32 *)(elf_data + offset), va); > 666 writel(*(u32 *)(elf_data + offset + 4), va + 4); 667 } 668 669 return bootaddr; 670 } 671
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 13199e593b47..2ddf89e15dc6 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -7,6 +7,7 @@ #include <linux/arm-smccc.h> #include <linux/clk.h> #include <linux/err.h> +#include <linux/firmware.h> #include <linux/firmware/imx/sci.h> #include <linux/interrupt.h> #include <linux/kernel.h> @@ -23,6 +24,7 @@ #include <linux/workqueue.h> #include "imx_rproc.h" +#include "remoteproc_elf_helpers.h" #include "remoteproc_internal.h" #define IMX7D_SRC_SCR 0x0C @@ -634,6 +636,39 @@ static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc return (struct resource_table *)priv->rsc_table; } +static u64 imx_rproc_get_boot_addr(struct rproc *rproc, const struct firmware *fw) +{ + struct imx_rproc *priv = rproc->priv; + const u8 *elf_data = (void *)fw->data; + u8 class = fw_elf_get_class(fw); + u64 bootaddr = rproc_elf_get_boot_addr(rproc, fw); + const void *shdr; + void *va; + u64 sh_addr, offset; + + if (priv->dcfg->devtype == IMX_RPROC_IMX8M) { + /* + * i.MX8M Cortex-M requires [stack, pc] be put in address + * [0, 4], so the da address is 0, size is 8 words. + */ + va = rproc_da_to_va(rproc, 0, 8, NULL); + shdr = rproc_elf_find_shdr(rproc, fw, ".interrupts"); + if (!shdr || !va) + return bootaddr; + sh_addr = elf_shdr_get_sh_addr(class, shdr); + offset = elf_shdr_get_sh_offset(class, shdr); + + /* + * Write stack, pc to TCML start address. The TCML region + * is marked with ATT_IOMEM, so use writel. + */ + writel(*(u32 *)(elf_data + offset), va); + writel(*(u32 *)(elf_data + offset + 4), va + 4); + } + + return bootaddr; +} + static const struct rproc_ops imx_rproc_ops = { .prepare = imx_rproc_prepare, .attach = imx_rproc_attach, @@ -647,7 +682,7 @@ static const struct rproc_ops imx_rproc_ops = { .find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table, .get_loaded_rsc_table = imx_rproc_get_loaded_rsc_table, .sanity_check = rproc_elf_sanity_check, - .get_boot_addr = rproc_elf_get_boot_addr, + .get_boot_addr = imx_rproc_get_boot_addr, }; static int imx_rproc_addr_init(struct imx_rproc *priv,