From patchwork Fri Apr 28 04:08:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 1774726 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-NXP1-onmicrosoft-com header.b=ZioMMeng; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q6ybZ0CSDz23s0 for ; Fri, 28 Apr 2023 13:22:50 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 654D3863EA; Fri, 28 Apr 2023 05:19:46 +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="ZioMMeng"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id ABACD86385; Fri, 28 Apr 2023 05:18:37 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0631.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe02::631]) (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 104F3863A0 for ; Fri, 28 Apr 2023 05:18:31 +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=F98SSEcLhWuuBOf0fv5iF78X3QFQwmuKSu9Di4k5RuGT4gelqO/sp0n88pJERjZuEMUsZ5ulNh7tLeYeubLZigTEueNCC3fRcjN/7ketqbHAlRLKGUE1Rwzfhoogy0P5Dt+2wa7xfwEApvFOg7PU186dwqQVSkzThymAZg1XuqBHpj/eUwYt3FjHMUjZJwlrmD/6yYGr48SilurN8610pj1WbIFRbGfUeTXpr64Aner7cMNsMobi3Y/fuBTd6RWII1yGoV65Gf+CkPxAJWgLkH0/5ZwUSLxF9RLJGUBJclWPtJTGCp+d7V8urQFK2rNegNjntv2JqOmpyek++ElUJA== 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=TZikvwQZrnk8oqXOinUG3AESM/yiJqkvpbpsG+pDl0g=; b=PJ8s+j7apmkwDuemgSNyzyZ9Qs2iQcgle/cvrSV8p5MQ4cVpL6+KdwG0bXU4UXi5O9O89swSreFfrwf4U9hdpU+kJb9yx0qODQcG2LBvFZp07NhY6EIkk/RiYsAba99Oj7Y9ygAtDbbr65Hd17Lq1yIOSs1phPpkLrqJKaV0muO9xS4Yn7Okcgiqq72uHkwjQ8vQtK6GcealSzLrMMyZrF1MMzS0PPsWlPE8tuiM4t4aUMWaI3IX3GxcjzzO5/L+BztX9X2bVrYIpgsoclUcHHwf/gk7zn3ZkWNcAKT6tsvqzZQv33qSqxI6wTKYXyphe1RsRReehQPxlcCH4hwbGA== 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=TZikvwQZrnk8oqXOinUG3AESM/yiJqkvpbpsG+pDl0g=; b=ZioMMengRakqE89i2kyZbcrrsv2JLueNaALpV4nmBXwUSMESu59Wlf20peGmWHVI/qkSxzM7uoA9MQWTScBVFM+Ukba40KtYJDM8s90RpCiYqiiCE2OQAYeqB0zM8PxQI+yOQOPSnUa+aFdVpkIzZJpUP+nrKDhFcyG4hUmqFro= 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 DBBPR04MB8009.eurprd04.prod.outlook.com (2603:10a6:10:1ef::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.23; Fri, 28 Apr 2023 03:18:29 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4%5]) with mapi id 15.20.6340.022; Fri, 28 Apr 2023 03:18:29 +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 15/42] imx9: cut off OPTEE memory region from U-Boot Date: Fri, 28 Apr 2023 12:08:20 +0800 Message-Id: <20230428040847.10841-16-peng.fan@oss.nxp.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428040847.10841-1-peng.fan@oss.nxp.com> References: <20230428040847.10841-1-peng.fan@oss.nxp.com> X-ClientProxiedBy: SI1PR02CA0033.apcprd02.prod.outlook.com (2603:1096:4:1f6::14) 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_|DBBPR04MB8009:EE_ X-MS-Office365-Filtering-Correlation-Id: d9bfb46b-3e1e-479e-5bf4-08db47973cee 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: OJq4AtiMKqXls55Avkxv9s9li6CHn4PvunQRrhLQQlipSCiBF9ealip41xmFuOz6/7i53V+cJNvpmwmZIcGXUnC77D7d68RYOQx4ck0xBWLMjOV0eCeBBT2exTJvjB1aqT/xM/gqCsz4KSSbnb57+rh8IQEuBO4oo5XKDbZm+eb+FsBqp/+WW7ZkPcfGvTHPkUbeBaw7q8GdUVZOeWJQhCj1/9gCmnHOBQTybZW7tACFKhou9IsonegUi8r4jA9ySOUmwLH+s5jEEPxV/jYPOan2LufMpiZD+iDS/pnXc7pebXFDJdCAGQuPmS4LVAMNMgiShN2XboeVHbgP3IZvKqGE3ynsMGBMI+TP+YBOAYZlWJd8edscq7I2cEUS5MIbe5ePS4qXQQgbpeveEfe3M6SDOomn0zSrZ3fQshZdmWV7kgQARUydF8fBPNSNeaM+9WeVm8juIwUq0CXJTWIZ7FNmx/hqOiQxel5/RHO8kSaDfaTpaylu+Abd6A75QZRGld5/CCIxVArhM8CTexV2bFuYEClqFw2ugLtr14I1pM+YCaeTcDUk8Q5qXeuuAFMHGCFa9RlsRbPsuuLbzIYbzya4jSMz3ZWjqtyWZIw9rX5UoqfolbyeC2Mng4ULvMSX 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:(13230028)(4636009)(396003)(39860400002)(366004)(136003)(346002)(376002)(451199021)(6862004)(8936002)(8676002)(5660300002)(83380400001)(66476007)(66556008)(66946007)(316002)(4326008)(38100700002)(41300700001)(38350700002)(2616005)(2906002)(478600001)(86362001)(52116002)(6512007)(26005)(186003)(1076003)(6506007)(6666004)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7yyzcmHboes6kFv98mwTmIs+g73vMJLil206HA3d0lxFbIuz9VM2aJMP/BzxNIHIPiidQ+rTUAeCVoY5RvEa3f+u9/ts+UqIeX70xVYuU0NbVHDAGwaESxkySw+J75l3Jq0fWg5g8GCRDiFvY9X+28JE7sKm8NbCQxH68Cv98E1lGxgs3tVzB3nikOgPuIXsMYL9lI2K8WtgNQ4VYxj1mPK6K+hwzaHM/qERTcSk/aYxCfe5K/QuKZyA0IkO5PAiYAz4PF4cFGBOa3tyzCxVxxQwNDXYCmLXmGgkgqqQ/vrZl/URFC8AqAyCaUv1XaqA3ahKeki7E8F7apjYZVP2o5ofaxJOioBEg1iE41Xtfu2quPenvFXlO3rm2bl0KoQVrKW2W4wgZ2R5LMoJRJkBwFpuP9OpBpMVmh1uKzoWQctN9YPgpJCEKp2ZQjVkUbXAYQGfb3F1BnCppWAnnnBdS7eZ8TiMdY9pKxS97hlte7DZfKUlx7aleF/Ac7J4kP1ZT0GapRJsNTp/zqF5Rz9+v8KoXrFJqcyA9mw/d9SjQNQ3890kid9KHCo3rxmTXQFOpwR7WURvK9l4Dpk5TEZrf8xcMXbVrBUyWcSAgFdjbsoxmWVJgaeDvz8mzOpexi9j8+sLanDKoRaKqHV8zdgN3b6pz3WbKWa56OKNbDYTDlrF6Z0OAJkw5GFEemm8iuGsBcUjy9nhRe6Iz0QwjVBHPpwuaZQoXtfiHhF5H0Fyqm6s+HS4gGO9WzQpt+caQlkMLmQk/cojTMLHzqD/eBeLmianFOBJcDq+WMzJuneXW5cWGA8xCD6XmGvG+aNkEnEA9ZO8gmjlciI9WTbRnevxZ1rxU/lMR+QzrWlGaHsoimZ+ttw+nTHXsSMXoSu2QkEW5MKOgE8jCkrWMMFDvswuZvkK9WE+8CfBn0ThB87qOUsRdkqfsMbTWiZP507jai2qzqV6JdsTxW54i0aNMdd2Z6jdaJKa+WXC4ADZIndDkMsSV/wwY3K4kMn1AtbpbS8r8sEtxh3yl2TsTrIo6VRix2aI0TRXYTygnThDJe1856m6dHMcnCGZSf7tFnS0t1x0TYheUUOd5iJXTPLLzJhhv2j7slj8f+eiGHN2QkGLsKigXgqx90ws79P3I59a39X7ao+PNAGUHdmipPtYOmImANSEeyT4bwHNqTSRqidSFLRwqk8RRAXpU4zqh9U1O/n0KkhQZOaSK7r/oI6OlC1Ea18fPPQekpqt9fv/RoIPkK2besgX+L4/Ae+E7LZqht8TJ8xnMHftWTPWK6NkLDqRx4Q1YL13dgOwTPHhp+1yu7IXS0pl1t0JUHaSeOtNudZsHDO8MKXXib7GMrEmA9HgWA8jOgvlU0acjtoBuUqixU7gb7RuB0qzQDjFTNe0fvYtjzEAjJgOHb9p0xZJZatEQ7qUaSCEdUy5CnLcHdBkKGZ9ckSvAxHHV8BrqFYykL5a1EAgmSX30ixSHWDdbSvvj2mOvxrciIxYpmrVu1SDBKtc3jHDYt1mxtkvKtNGIeyT1oC5W3N0Voj0VNaCNhMcVAS1+bppo5uGkcrHddMnF10kOHhHiNWWyzYTapZ+MXLA X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9bfb46b-3e1e-479e-5bf4-08db47973cee X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2023 03:18:29.3745 (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: 4aK40Veze8NQTMWEAsjRALuIqdV1h+mS3xDYcWAAjXUJo25r89+6OK97Ien6H1+g3E7sSYBRhd6IsaEF10t/zw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB8009 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.8 at phobos.denx.de X-Virus-Status: Clean From: Peng Fan OPTEE memory region is set secure access only in ATF with configuration to TRDC, and need to remove it from U-Boot, otherwise U-Boot and Kernel may crash when accessing the memory Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx9/soc.c | 149 ++++++++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c index a16e22ea6bb..a27262492e7 100644 --- a/arch/arm/mach-imx/imx9/soc.c +++ b/arch/arm/mach-imx/imx9/soc.c @@ -180,13 +180,160 @@ static struct mm_region imx93_mem_map[] = { struct mm_region *mem_map = imx93_mem_map; +static unsigned int imx9_find_dram_entry_in_mem_map(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(imx93_mem_map); i++) + if (imx93_mem_map[i].phys == CFG_SYS_SDRAM_BASE) + return i; + + hang(); /* Entry not found, this must never happen. */ +} + +void enable_caches(void) +{ + /* If OPTEE runs, remove OPTEE memory from MMU table to avoid speculative prefetch + * If OPTEE does not run, still update the MMU table according to dram banks structure + * to set correct dram size from board_phys_sdram_size + */ + int i = 0; + /* + * please make sure that entry initial value matches + * imx93_mem_map for DRAM1 + */ + int entry = imx9_find_dram_entry_in_mem_map(); + u64 attrs = imx93_mem_map[entry].attrs; + + while (i < CONFIG_NR_DRAM_BANKS && + entry < ARRAY_SIZE(imx93_mem_map)) { + if (gd->bd->bi_dram[i].start == 0) + break; + imx93_mem_map[entry].phys = gd->bd->bi_dram[i].start; + imx93_mem_map[entry].virt = gd->bd->bi_dram[i].start; + imx93_mem_map[entry].size = gd->bd->bi_dram[i].size; + imx93_mem_map[entry].attrs = attrs; + debug("Added memory mapping (%d): %llx %llx\n", entry, + imx93_mem_map[entry].phys, imx93_mem_map[entry].size); + i++; entry++; + } + + icache_enable(); + dcache_enable(); +} + +__weak int board_phys_sdram_size(phys_size_t *size) +{ + if (!size) + return -EINVAL; + + *size = PHYS_SDRAM_SIZE; + +#ifdef PHYS_SDRAM_2_SIZE + *size += PHYS_SDRAM_2_SIZE; +#endif + return 0; +} + int dram_init(void) { - gd->ram_size = PHYS_SDRAM_SIZE; + phys_size_t sdram_size; + int ret; + + ret = board_phys_sdram_size(&sdram_size); + if (ret) + return ret; + + /* rom_pointer[1] contains the size of TEE occupies */ + if (rom_pointer[1]) + gd->ram_size = sdram_size - rom_pointer[1]; + else + gd->ram_size = sdram_size; + + return 0; +} + +int dram_init_banksize(void) +{ + int bank = 0; + int ret; + phys_size_t sdram_size; + phys_size_t sdram_b1_size, sdram_b2_size; + + ret = board_phys_sdram_size(&sdram_size); + if (ret) + return ret; + + /* Bank 1 can't cross over 4GB space */ + if (sdram_size > 0x80000000) { + sdram_b1_size = 0x80000000; + sdram_b2_size = sdram_size - 0x80000000; + } else { + sdram_b1_size = sdram_size; + sdram_b2_size = 0; + } + + gd->bd->bi_dram[bank].start = PHYS_SDRAM; + if (rom_pointer[1]) { + phys_addr_t optee_start = (phys_addr_t)rom_pointer[0]; + phys_size_t optee_size = (size_t)rom_pointer[1]; + + gd->bd->bi_dram[bank].size = optee_start - gd->bd->bi_dram[bank].start; + if ((optee_start + optee_size) < (PHYS_SDRAM + sdram_b1_size)) { + if (++bank >= CONFIG_NR_DRAM_BANKS) { + puts("CONFIG_NR_DRAM_BANKS is not enough\n"); + return -1; + } + + gd->bd->bi_dram[bank].start = optee_start + optee_size; + gd->bd->bi_dram[bank].size = PHYS_SDRAM + + sdram_b1_size - gd->bd->bi_dram[bank].start; + } + } else { + gd->bd->bi_dram[bank].size = sdram_b1_size; + } + + if (sdram_b2_size) { + if (++bank >= CONFIG_NR_DRAM_BANKS) { + puts("CONFIG_NR_DRAM_BANKS is not enough for SDRAM_2\n"); + return -1; + } + gd->bd->bi_dram[bank].start = 0x100000000UL; + gd->bd->bi_dram[bank].size = sdram_b2_size; + } return 0; } +phys_size_t get_effective_memsize(void) +{ + int ret; + phys_size_t sdram_size; + phys_size_t sdram_b1_size; + + ret = board_phys_sdram_size(&sdram_size); + if (!ret) { + /* Bank 1 can't cross over 4GB space */ + if (sdram_size > 0x80000000) + sdram_b1_size = 0x80000000; + else + sdram_b1_size = sdram_size; + + if (rom_pointer[1]) { + /* We will relocate u-boot to top of dram1. TEE position has two cases: + * 1. At the top of dram1, Then return the size removed optee size. + * 2. In the middle of dram1, return the size of dram1. + */ + if ((rom_pointer[0] + rom_pointer[1]) == (PHYS_SDRAM + sdram_b1_size)) + return ((phys_addr_t)rom_pointer[0] - PHYS_SDRAM); + } + + return sdram_b1_size; + } else { + return PHYS_SDRAM_SIZE; + } +} + void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) { mac[0] = 0x1;