From patchwork Thu Jun 27 11:35:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1953216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=TA3w14tN; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4W8xN22LKnz20Xg for ; Thu, 27 Jun 2024 21:36:02 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id DAD98885B6; Thu, 27 Jun 2024 13:35:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="TA3w14tN"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4A3DB885BE; Thu, 27 Jun 2024 13:35:58 +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=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20701.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::701]) (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 45AB1885AE for ; Thu, 27 Jun 2024 13:35:56 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HirbAN8rVheAObX2h5NNi/JEfT7W8D60UUGLPXkM0R48m4g9H8SFjJWIRXbxOjx58eJnZEhatpjAwrDeHxlIgwe0ygj5ed+2IpVc3IQ4fskGX6ZILN9NxVzv3uQGFIGaLiklhivbQITLHWC2pjMmyB3jOLBLKLRnZXsnBFbVxEL1KLgFh8f68T3XnU6X4PPuELXymrixuzwqZ1+3yNYt2LhqvY/wnSCgNHjPOX/jyJfRF3eMTQzYMw/WYBCyCbbpvTL98BrJgr6oqjCdVPHq919lw9e2DFfeWW5IaP7QOA+6wFyzG3RmMXBpBbTdOtmQ41oqjJ+KznvYLHurto+AlQ== 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=/fWLUmhTpLR6N+P+OYT+eImBCmH6DUVY96GYWxMdTTk=; b=Yj4OwXe3d9YCgHwYnhFBAtLK7uTmreDRp0truvfhaaCsQqhJiHzLZHeTxiXAVEigbff4IbiJWlL58y15pnUkUPlbANCkWd6WwEeoRZ2HGBSIS9jMsrhbCbAXwbEmRSer8x0718SECLVcUKE/hIf42hurOISFzR4rWJ1iGfmNsv7L/YsZ3aV/RQs8HgFoyPrfdn3pAD8FZWhj1Qia/n52GOQQ3mBdhVfozkUqjZuLw90TZuye2HqhZACA785lypbynelL5ah3Id5d1ngO/89nBEE6yV0J+gYyZo2NV3FNREwxGt5DXnNQs7lLSx8RZL72BfG3cqSIuNN/3Jl1a8YyMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/fWLUmhTpLR6N+P+OYT+eImBCmH6DUVY96GYWxMdTTk=; b=TA3w14tNqb2XYHdw8HVb9GVuho4Woi9MVr6oaqyinCqX8+zAmM5A9+7erAdjX2l3BRJ4Ph2u9LVsIhnVTNLr/88C2ORAo8Ui5xKVvYK0+id5h0lLWuz1D75AhJJblp7dPuNHS0iZHydA3FOEyKxbl9hoT/8pdEwu7l8DPVYVCHPl8xaZesMe/dlzVG8uz42W6wwZYBGx4ykJcCq6SNhYrrvnfj6XKEU0sXNzZ1l5sByBRj46SyasORW/z377iYf3q+tV0u3lvbjynigOWN7uEzcJTaLSgLZZrpoT0YUZ1k3FwrxrMcEeZIkVIJbI8jbDfgQD5wcZ9kJbocK/LMB8kA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by DBBPR08MB6140.eurprd08.prod.outlook.com (2603:10a6:10:20a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.35; Thu, 27 Jun 2024 11:35:54 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%5]) with mapi id 15.20.7698.025; Thu, 27 Jun 2024 11:35:53 +0000 From: Mikhail Kshevetskiy To: Tom Rini , Simon Glass , Peng Fan , Jaehoon Chung , Bin Meng , Devarsh Thakkar , Kunihiko Hayashi , Sean Anderson , Nikhil M Jain , Shiji Yang , Raymond Mao , Chanho Park , Marek Vasut , Dragan Simic , Jonas Karlman , Sumit Garg , Neil Armstrong , Caleb Connolly , Heinrich Schuchardt , u-boot@lists.denx.de Subject: [PATCH 1/3] fit_dtb: relocate whole fit dtb image instead of selected dtb only Date: Thu, 27 Jun 2024 14:35:44 +0300 Message-ID: <20240627113546.100333-1-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.43.0 X-ClientProxiedBy: MM0P280CA0055.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:b::18) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|DBBPR08MB6140:EE_ X-MS-Office365-Filtering-Correlation-Id: 816aae1a-88b2-4db3-8cd7-08dc969d4dba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|52116014|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: PpcDvghrDxeozTQ3f9wnQXEAFwnexoTdvyvIkWXmnkRTeBtEkogMxoScna1U7f45exP6dyR2I2+Szeo6hTkePOYyxnoUYw2qiX0z5dqU8AtCSaMZMo0B3Jsj+klEjCsbTSysaVMwNAryxnQs2OELYBfdB7+eJsBCdoMMqG1ceWwg9qn16X8lKVdJljHRxiyeQUNzdkfsAl+v9J+v1ciYoCpImqC0fD5Q4JRIchYJiWG1okrnylah/Zzw6v3s4pbb09A9astTN/7aejIs+UWAn+s7LLzbz5C03ncMmHpkcrpBvC9AboklCNnrpXYOcgYzuKvWiAUGe5ePjhOinMUZ3H22HIORUmZZZic6Cet/EMmjVCyJbNvAeNRULAvcw+puSGis+KAXjKVWwazduBuemJncaWZGFVLr14b9Y/sLUc8qHRmZ9DfVnbC3NfIb0ZtaFRTCz047k5KvofgucsS688Ie9LuIsoxFChdbZY73k9gxQsLEbKvhdlVPKcPNThbXCl6V0yJBOz/YDD/irJVIbdX4Qr2ueNhBQ6k+qeoF0gyQAykSEWiO8W/d+He0Po4XpMGgfpDBzn/RJ1PQMk/W0BmnSzlxq6r8okyAjnbGXbnjfSZ/a49UzCrHRZCZoaO2aU4CxBx98YEdXP4E1JxMR98dQAm1tM4mq+Zys6tq2c1vmYiFPk4FQ5yjVkQrXn7pkM4jjQL27WHz0VaOPaquLGh7SwOa0/kdOGd2cv5y+DjDt3tyJZ+xejUkFM4eCub2nRqjXwE4uEfQkuGYTkp/jXyFo2hOeD9V+iRMQytattfUzO5b0KqMVDomSfLq8ush5/C8ELVQ2m5YOEnOS6BgRGsmun1HCGEvXZaa3FVrVspP7K1BT3szNbi2fGCppIzX2u/mumnCbcbXI1ujQ0j3HWJP/JPNNDUGI2eSVZ3Cwlivpvg7MiL68nul5fg48Fk4zEMK5mi2VV4xkYUduCdtAVaecOYSWcDDdJxVrTH56ha5J5MivNFvJM6/5wW8EV+gpR4Q6Cn/5cwOPAS6H2BA0B79E8bkR9RW1XmGd/5dB+8/N51BGzRbNZVQ/jbDVN+vG7STHmDfF5e+GGfwSgHf2gZTjJ58wVIyhbsAyeoj5C4x7Ud1wc460xIiPBtGBnYDmDsD4YjiMFjCteIklB7aasJHYBnN5cJra+bKuYQ1Enl6QuGD9Bk2DsPVu7vitWwrqd+bNnS+EVceb6fmJjklVFKRslzhZMrsEk36tD00VcH6o/iMQ6ltlgi360crBlTBcSbZRhmjAfDbjunVeBhG5+RFdZOH3StV/eXqdw2nFGdTiBOPz354GwU3a+Yn1TXnWt/VPq0SBzhhVUaY2aru5BtwUwx9xg7vmhAhLf43YkOWbW5UwTV8BkmN3zlUINJXZmai0gqW/hH90GWc4habR+ioixpaw8+9xA6GSxTXYqI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(52116014)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: W8IOduAzxb23QmsSZr8QcRLTS58f6zQo2aWSEJHCQsMDwCE5joapXQwkUmSuBZeEsckIUEDGRMnRz6EawfxeFYJRIc0FUQmTm5Bqfb2wC0ikM61NzPut7bDFlGvhSyS5NisdwCIoRkO55vfQGoPCaC9HmxMZ+NThiqxhUZxSbgApmj5DL4Nbgr0kzk9S4j4EsHRWKl/GYe95N1mbcIfUMOUagxV6GeKICR65Pzi749m8U/R01+7a2WGxfnFGNuYDVRl5EuYm33iYZUMtMpBYeZgoH/akE6YQiFoKGXtZ2RgrIW15xVby4CuBx6ysbV7LOVtkKOgA1BVaAR2GYn1j9qwyFKDDZsmCHUAsI2smVA9oZSBVy32ui74EDPHUYl8Ri17Jm1KDzRizHRsEUfxlRxtnxRKmcGbBTw2FJDE8bEZO6oC3Y/eMaRM2HSHUY0wwVCN82BJjhstTbgNquzyplqLffKIp2g+ShACQ5a5I8iHldvmZN29kqWesgjGbjPN8+kasbmoYqNQCSXaw14uhou7CeN6qIJCBZX+1KiSwWjNqkCxSaWKw5EVCEgG7lo0m2n8G46vL+taiD50VUqn5TqWYaebyN/YUBjWt5CnC3o7rYOOUCqCA2jC147LOLpNgBMq6Jr0PWzEhSRusCjga9E1ifh+ofsOikz7LkHQhui5WI54VyKD/hBgvz+qcLpxdsquyHY8D475/ZxfoOe2aqAll1VJdbMf+xsREDsg6ndfJladHQez/Wl8PYuS8j+tRIzrWr+AerPxp1iB8CIkckUtB/g+JLYiRQjmSHuT8dc6QQr4bFO2UjMpfWyELeDb/a47m6AOXib81Mj9cYTC9YF/cociQog1OHQicpKq/iWGxGQRIbo1zIDgeA9e+17ZWRpaxfcD/hZ98fvBTG6HkAlYcaoXU6WU3SPvv6JmtPDgKnDrQrHIc5nnV+JUyIqBNea5bQDwRxOcsXrvJyvhQYUh+ZfShca7ph2xfQmVXAgu+dSyhyz9EzxWzA2hIJqCBneDF+ip/tuh6gic5hlhLkS2HSMyRZJx0faXeK4DfBvrVXSVU1kPOzTKaF9tsfvMINbMD//1e7Z5PthQ0XZVp+meC6YpTF04XTuLm0TWD0KtQAnTFLXTOe1UYnWRPPuSpQ+1DrsAwaPhkKoriYnpKP6kQuylVv3TdXGo39u7Y4TqrpTrBXIOr7/I5Ss4N6Qg+OouCS7mvZJqPizYBvpb4t9j0LDHleUJ2p+vX9iF21ATMFB319t2NC3Qj+hEb80S7wOhyWRwzHzgt34MhCJ8vaLg6AdIy4A2FBkXadsq1RxQFwOy3kgdnP7ILySKW0wR0+R66FVMwtx3SUtcIjHfJdaeQ/2Ubk5Vr+K3+U3SGs/XuS4GAFFdVSlzJFn6VnneaKxdsuKW5yWvZ4KTzCJNqasekwjN9V7BJJmi5hQh2hUGYMSKcA2WIX9otn5+vKVWlee7Th4SDnpKsKHpftTtor6Olr7jbBW8binxdSX9UqCR2V+3MeQC7YJUdcRIGFTzp+A/1tDgy2IXbx3ax+2inV0jGlJzyMLEimU5GekaLDANqI38GE03fnmrop3pguOE6DMt1ziMiT1KldneS/T4m5wddRe5s86k/rBqRike/Ug0= X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 816aae1a-88b2-4db3-8cd7-08dc969d4dba X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2024 11:35:53.9291 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: K/PgPHXMUyxzTCbN5zwrvnOcQ20K/Vxp3RD8JZrYUSFbJmXBii0t9R+P3rzOjxRftRv654SugmAt3fjHxFcB6CqE6y/8ItePKZWMp4Z1ggA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6140 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 U-Boot with linked fit dtb image may be loaded by a bootloader to a low memory. On a later stage U-Boot will relocate itself and used dtb. There is no problem until we decide to reselect dtb on a later stage. In this case dtb placed in the low memory address may be selected. But this data can be overwritted by flash reading or network file transfer. Thus we will use damaged dtb. To fix it move the whole fit dtb image instead of just used dtb. Signed-off-by: Mikhail Kshevetskiy --- boot/boot_fit.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ common/board_f.c | 34 ++++++++++++++++++++++++++++---- include/boot_fit.h | 8 ++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/boot/boot_fit.c b/boot/boot_fit.c index 9d394126563..e9aac61c6a8 100644 --- a/boot/boot_fit.c +++ b/boot/boot_fit.c @@ -13,6 +13,54 @@ #include #include +int dtb_fit_image_size(const void *fit) +{ + struct legacy_img_hdr *header; + int fdt_size, blob_total_size; + int images, conf, node; + int blob_offset, blob_len; + + header = (struct legacy_img_hdr *)fit; + if (image_get_magic(header) != FDT_MAGIC) { + debug("No FIT image appended to U-Boot\n"); + return -EINVAL; + } + + fdt_size = fdt_totalsize(fit); + fdt_size = (fdt_size + 3) & ~3; + + conf = fdt_path_offset(fit, FIT_CONFS_PATH); + if (conf < 0) { + debug("%s: Cannot find /configurations node: %d\n", __func__, conf); + return -EINVAL; + } + + images = fdt_path_offset(fit, FIT_IMAGES_PATH); + if (images < 0) { + debug("%s: Cannot find /images node: %d\n", __func__, images); + return -EINVAL; + } + + blob_total_size = 0; + node = fdt_first_subnode(fit, images); + while (node >= 0) { + blob_offset = fdt_getprop_u32(fit, node, "data-offset"); + if (blob_offset == FDT_ERROR) + return -ENOENT; + + blob_len = fdt_getprop_u32(fit, node, "data-size"); + if (blob_len < 0) + return blob_len; + + if (blob_total_size < blob_offset + blob_len) + blob_total_size = blob_offset + blob_len; + + node = fdt_next_subnode(fit, node); + } + + return fdt_size + blob_total_size; +} + static int fdt_offset(const void *fit) { int images, node, fdt_len, fdt_node, fdt_offset; diff --git a/common/board_f.c b/common/board_f.c index 039d6d712d0..89a1a0b563c 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -49,6 +49,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -574,7 +575,24 @@ static int reserve_fdt(void) * section, then it will be relocated with other data. */ if (gd->fdt_blob) { - gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob), 32); + if (gd_multi_dtb_fit()) { + int dtb_fit_size = dtb_fit_image_size(gd_multi_dtb_fit()); + + if (dtb_fit_size < 0) { + /* + * Fallback to default: + * - switch to non-multi dtb case (single dtb) + * - reserve space for current dtb only + */ + gd_set_multi_dtb_fit(NULL); + gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob), 32); + } else { + /* reserve space for the whole dtb fit image */ + gd->fdt_size = ALIGN(dtb_fit_size, 32); + } + } else { + gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob), 32); + } gd->start_addr_sp = reserve_stack_aligned(gd->fdt_size); gd->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size); @@ -668,9 +686,17 @@ static int reloc_fdt(void) { if (!IS_ENABLED(CONFIG_OF_EMBED)) { if (gd->new_fdt) { - memcpy(gd->new_fdt, gd->fdt_blob, - fdt_totalsize(gd->fdt_blob)); - gd->fdt_blob = gd->new_fdt; + if (gd_multi_dtb_fit()) { + memcpy(gd->new_fdt, gd_multi_dtb_fit(), + dtb_fit_image_size(gd_multi_dtb_fit())); + gd->fdt_blob = gd->new_fdt + (gd->fdt_blob - + gd_multi_dtb_fit()); + gd_set_multi_dtb_fit(gd->new_fdt); + } else { + memcpy(gd->new_fdt, gd->fdt_blob, + fdt_totalsize(gd->fdt_blob)); + gd->fdt_blob = gd->new_fdt; + } } } diff --git a/include/boot_fit.h b/include/boot_fit.h index 092cfb0b7fb..bf146286a70 100644 --- a/include/boot_fit.h +++ b/include/boot_fit.h @@ -4,6 +4,14 @@ * Written by Franklin Cooper Jr. */ +/** + * dtb_fit_image_size - Find a size of a DTB FIT image + * @fit: pointer to the FIT image + * + * Return: a size of DTB FIT image (negative value on error) + */ +int dtb_fit_image_size(const void *fit); + /** * locate_dtb_in_fit - Find a DTB matching the board in a FIT image * @fit: pointer to the FIT image From patchwork Thu Jun 27 11:35:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1953217 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=XQ1GZMA1; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4W8xNB1trvz20Xg for ; Thu, 27 Jun 2024 21:36:10 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 50ACC885A8; Thu, 27 Jun 2024 13:36:01 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="XQ1GZMA1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4321C885C7; Thu, 27 Jun 2024 13:36:00 +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=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20700.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::700]) (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 EDA8F885B8 for ; Thu, 27 Jun 2024 13:35:56 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mWOMsySyyDer9wLPjfIuyWSxmhP4QmWWDgS4Jpo1k6XTnkFj3aTK15A9wbuTNf8fGxlUJ8MU7Dw354j436C++467+5RlKHePxx2KO1OGyFpz4YWlqkqsGxzyyq1q6wgoqRp4HMNU4GBSf5mfO32cQ5jYiI+TBCW/QvF6YL5B2cfGSvsjNYy7ZlnPWGaMy5xaiIQSfzHyjCx222Y9xsJr93zdjoInKfjH+hN/KvcJjWA5L5vDz1w5eHUzAGOdnXTcWByNR2Hyp9vXXc5A2JFumhba2e0eARPeOxTi/vwg1r7bORe4CfY9ov7jdCtGHJwCX4SmL2WtBBS32l8MzQxiwQ== 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=Rf9DvgQVo2C0VVYwKS1mq5E4sdgw6UfmMqwj7Qfl3vs=; b=L9mXaiKpmvARGClIGUR+BumesxJf6gFzvZSS+j5GL+EGlJ+QgFrknWEmvad6pg5ExVyl0ki+2khjUMDDeP/TgvSiqjb+7tEujqDz28yw7jMCFkMakUcBXwPUHMquhe8909dlFuZbg0d0LXTESK4V03ns8HYxy8PyGfCHzi/EOMebeT+R19RthAeZt40j22s5FfR6HdPU4n8jGhu691PfOTnZwEbm9W8R4xQdQS6edzcZuUzTncUcGr0H2ghDE0gLK+FVHEzlMDaNOLD2HzoXm+TPlIPMDUSA/Um4C2yLbFq6JDKdEsp3qUNfFx6Kkb0sO0yADVZP8KZ9gQSU3a6e0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Rf9DvgQVo2C0VVYwKS1mq5E4sdgw6UfmMqwj7Qfl3vs=; b=XQ1GZMA12dyGGIGp5nYDfYCF6nYV1P0qzItt//r1+JQY2nd9rzsv+rbL4Ko1688s7QqWKYpJC1uHHknCP30OKOkzf0rTVLesbQhR4NVZHTc77hSOnElka12W5W83lixValoUBMaQi2fmobOKNXUM2Z9hRhvuoZZDvepcBazQzERCuwNMKJh9jlLnMgGMiwMeHIerzjdBR/eu8k9vhE5Ghkxl5FxkcWcJo5bPAn06TMKcUxstMfVZ0vTupZAFf/zrq+7UQJwsa0kYAKea0DBbUtMDb46kzhtjuZUa5FDntxe/RSZ6YIJuPEO2UhELdSOy2ibE759R/61QNF1HlMvdeQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by DBBPR08MB6140.eurprd08.prod.outlook.com (2603:10a6:10:20a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.35; Thu, 27 Jun 2024 11:35:55 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%5]) with mapi id 15.20.7698.025; Thu, 27 Jun 2024 11:35:55 +0000 From: Mikhail Kshevetskiy To: Tom Rini , Simon Glass , Peng Fan , Jaehoon Chung , Bin Meng , Devarsh Thakkar , Kunihiko Hayashi , Sean Anderson , Nikhil M Jain , Shiji Yang , Raymond Mao , Chanho Park , Marek Vasut , Dragan Simic , Jonas Karlman , Sumit Garg , Neil Armstrong , Caleb Connolly , Heinrich Schuchardt , u-boot@lists.denx.de Subject: [PATCH 2/3] dm: core: support dtb switching without devices/drivers unloading Date: Thu, 27 Jun 2024 14:35:45 +0300 Message-ID: <20240627113546.100333-2-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240627113546.100333-1-mikhail.kshevetskiy@iopsys.eu> References: <20240627113546.100333-1-mikhail.kshevetskiy@iopsys.eu> X-ClientProxiedBy: MM0P280CA0055.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:b::18) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|DBBPR08MB6140:EE_ X-MS-Office365-Filtering-Correlation-Id: 3afcc66d-e0c2-4709-d3e9-08dc969d4eb1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|52116014|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: XRkGhbRZhzgTK51uL6hFVC7q+S2h1l1FmAz7GpijH4dNRcVR0ltj2rWgshln5YlDyVfdZnW2wRXyOtrwHvm5ZCCVGUmFeBczUde5+8YSeqSC7G4SuPdTIHtj8IHBHAyvyLAPytq9JZlJz+1f1F2lrVnkVj/sYdBUo91/GAXDFzwFJ2g0KhNCchmtfxvVlfYfDBfwBqTKm5oY1ZJPoF5nsm/86lWfj9yqagmkmtlYnXC52NypWyBEuyjr47lQOg5wF0a9zlPmUPxuxyZV/rGSedmAwKUyFr3xcfuyYYurMvpijGULxS5Lw08pxk12+KIJ8JNYI5ztkTl09+1rMiJY4rNPvADlcl5sACft+OVDSU+2ZHR3wTFW/ZfTaXMz6OrJAc4ctCG8561jzsZNMjtg6s2Kld6KuxA98bzCJ0ZHbMJjcBE31fttlnGZ4v+5t8XrxzNbMh09H1hV1rIuKpaYf6BQ/O0DY77uhjhWrAjw07oukawhG5RZfz86aqiSIbLO/32t679HOofExCPFhKLPsaYqJBHosbT0gI8oA9/Id5+gES8ed+SU+DGBN+KwARPI2ZngU9sFY9lKZZwvasVQatYVU2OLXKntuwKC9uI/hwfVpstvuPi61SGPp51jvckqtKAcDBY3x+dqvtnBsbqT2ce22NnbQa9N33EBcUCBM7wt6QaMq4Ghnjr8ujiw6NMqxwCIc0B+1oliWMMpL1rJQ7mnwy/KDjZIsbktNO1e2+QH9+st4cwZefltJl8lDf9/qp4QtvFmRnlrCDUDIPkiYVEFruOqUtcRQ56LQS2aZnBr3sNaG0G1eFeaCHUvkeQ4QVI2GbrZ6UA4oHZbHG2LcKsRbdqxGtME23SLzGkC21TvvYQmDOdGiaiyaowfZxSkr2sUdHv+5y6upseTMOXt6pWQf04qAcbjNIqp31oapJ6G70ue6YdWm3XE9RtVcoQDe9HcQiagCXuT8VKWttmY644aG2oIczSieUppjUrFQCiTYNcsr8eZE51HT3kB3rFnBj5QX57yOldvcwJ3OFn3f5V13h5ttRNOpLW9VSabKIHQ3Wfocp4JEGmYnRxG+32P2y67ROzaysSudzZ/PI1AWqeDGBllhk3nocLGzrcjCwvCthaNSOZNW4APwu1kELDyNxle848JyUQzU92iY6aNLEs/nnZ34KctyvKMeBDGGYYUI767jV2tVIjLvSATM0VZKSriAWNu7KZk5N5B98s7BqKyakmMUNMiv2pn3LJQJp/OHq1NmwhnB8dKPHL4VuKbmRBSiuIM8ABfRSdeWj6T6qOcsmInQ5AmxtA6rMbavSe/9GVopV9H3j2riQ7aN9oruAhdf2CruNri/CJUgVckgFqGEO0f3L5gBCZsjQxVPiFe08tJ9jIzZbFKT02vAUfZqRkR6s/tfKKhLgkFsQ2YbHmI9l3UV6EH2xnoReDV2no= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(52116014)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BFCbeBx0WOCe1fqiwQMmmDkKNfXsNUctQaDI8f0W4f+BfxN9ZuN1Ff/Alh6hQWPZ+C8hmiD70XOzcOQ18XgwfDpQaWGSdwKNp2pH271meeWHYG+uk5MY/yANRQJfjipzk8ADA0neotsgzDXa28/S17wFEU1gSvi4vxPdvBQ8rVlpxz6nuZzSGDHgSm+4YMQU20Z1SL1GmsyCxkOejq73N8TEHU5o5A9cNcEWbyYM3jrInIw89zwNg0EdEIEb2JKnoYlzGgYYsAr1iM7Wma5aNJNKjOZCoUGulYy2SKvwK+AbuYgwhLTbnc9dkFsBcI2t/K9GhNq5Pa8p63XAguog5+c/FDTmd2RVGKKxjoMGp43ys580UOLk26RO9ilfYwwRLwMFiargLIMgzk5xUhUeReSIpOxFe+HrFO7FrI4bvebrWE4QPKEUmRqObYk9ASZ4uowCvR8iK2bEktba/FbVYaIThKFqdokQsmsbG1T4ZNVomhjbdg9t2uGxp7BR2kwIEZ9t3rtNFF1l+1PByrUFzh4URuIqaufm1fFllCxesi/WVB1pvsk7D3nkXzhSyg+icEsCSwCrn0vIS2CYAp3npNVk3wXB4YNUj3aD/c0+p+0H0FbtrSd4h1sC73t+PAhO/zOHsBU6yNbAAnAihjqXGc0BJpwXpsvyGowQEmnQn2sP+UJ5Iptn+G48Zi+BzaCrQQv+8EsWesMF78olhw8Kq5HYZ8z3rcG2gsDTIEzp09x7r05gttCAzOFbtcmVjT9zxF9QKuoRPwfiQwAzm322+drSmrBPnmHmLCPHKIrgFOS5vMQEAutHM1DkhV1P1BfxII4RbsDoSVPbUN79xHEgOc1LYPFNjic4C3idmWym4gzlNaLMnC18EEh3Pc9Lo85chHas2OCKJR530XlsIHVdnlQ3k1iKmVpczS1PZdGx46KIQ8GPW2OvUur2lCKmQJFPDTvEAa5oXWqeazF8/EsrEla4OlfKf4NbzQYK8fTnK3Jy5HuTlE18Cn+EbsSwzCGgd0DOvCx9LGeA6zZPFa09XqkJPKCxil8Gjauu66kLsuhGZYx7ctZKnbXWD3pVBtV0snRIzLa/2IbKhBxIGuDNYhROcDv7jnFlKwlonHxgiffDoohAR9j3aKpsUySfBgGP+bmQ2hRAa7INNq5R2jfhCPnJR0pkWiYsDZ0cXu0Ui8oPRqL+W1DOFTR398dWcZ7zDVYval1EIkF4yGcSxLuAuG0uylnGoXUltPa2pfg1Cks1GCz4IHeBSWoyVquxXWmIyXmtirmc14OapQbgSo56Z7duxMeywwIn4zSWTEVyI0pOhRHe0siRJY97zCQtXHVqU1NABZdnD6n6pts2Kv+Pz1GldM3QYPPeYtKG4SW8SGWDeobl2CkKt4cqg38MuqJkkV1qgEfej8TCxLKJkxbPZypEubjHG7Lx4bEqWGWePGNB4DBXC8qq+afKpFNC8MzcTqkQLhgAz3rElHrJduIf46xG2hMIB2GB90pLCuR+E//aJqMOXM3jO8Euaaes+4/25LGrKAPkId+LR351qul3PND2Re+dn5pDi1utX+/K4+3pQMMO8eDTFaoX9OqJ4bS6btrB1eRr64kAkBzHe68uWTQBlzh5x7jm/3KfqcQFKfI= X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 3afcc66d-e0c2-4709-d3e9-08dc969d4eb1 X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2024 11:35:55.5467 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OpLrJ9Jn0HMg7EO+eE/JcTDs4ZpHp1vwhql9x330LiCtxp75jYmj/zMfuzlXuDh/s7LNnwMPJAo/bBAGsZzQuKXBO5iDvhrLmnSCYBVaFMw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6140 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 Consider a case when we have several similar boards but leds & buttons connected differently. Some of leds uses gpio, other pwm, third gpio over spi bitbang. Also different board may have different gpio hogs. And last but not least: board type stored inside a ubi volume. We want a single u-boot image that will support all these boards (we are not using SPL). So we need runtime dtb switching. We can't use MULTI_DTB_FIT and DTB_RESELECT because they tries to switch dtb too early when flash & ubi drivers are not loaded/activated. The following code do runtime switching ret = fdtdec_resetup(&rescan); if (!ret && rescan){ dm_uninit(); dm_init_and_scan(false); } but it have several nasty issues * additional code required to reinitialize console otherwise board will hang. * MTD subsystem is not cleared, we need to remove mtd partition before switching to new dtb * spi-nand flash will be named "spi-nand1" instead of "spi-nand0", thus flash becomes unusable * some drivers are unable to deinitialize properly (ex: network driver will not release mdio interface) * some memory will leak, because most of drivers assumes that it will never be unloaded To avoid this nasty issues the following hack was implemented * Full DM and console reinitialization was skipped * Only missed device/subdevice added from new dtb during device scan. * Some driver renames their devices. As result we can't use device names to match old device node with a new one. The special field was added to struct udevice for this purposes. * Driver must be binded to the old device one more time to add missed subdevices. * uclass must be post_bind to the old device one more time to add missed subdevices. * We can't use old dtb anymore, so replace old device node with a new one for existing devices. The following restrictions are present: * initial dtb MUST be a subset of a new one * old devices will NOT be reinitialised * no devices will be deleted or deactivated * only new devices will be added Typical usage: ret = fdtdec_resetup(&rescan); if (!ret && rescan) dm_rescan(); The code was tested with: gpio, gpio_hog, leds, buttons. Signed-off-by: Mikhail Kshevetskiy --- drivers/core/device.c | 31 +++++++++++++++++++++++++++++++ drivers/core/root.c | 15 +++++++++++++++ dts/Kconfig | 8 ++++++++ include/dm/device.h | 3 +++ include/dm/root.h | 23 +++++++++++++++++++++++ 5 files changed, 80 insertions(+) diff --git a/drivers/core/device.c b/drivers/core/device.c index bf7f261cbce..4f575ca82e7 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -62,6 +62,34 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv, return ret; } +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) + if (parent) { + struct list_head *entry; + ofnode dev_node; + + list_for_each(entry, &parent->child_head) { + dev = list_entry(entry, struct udevice, sibling_node); + dev_node = dev_ofnode(dev); + if ((dev->driver == drv) && (dev->uclass == uc) && + (dev->driver_data == driver_data) && + (strcmp(dev->node_name, ofnode_get_name(node)) == 0)) + { + ret = 0; + dev_set_ofnode(dev, node); + if (drv->bind) + ret = drv->bind(dev); + + if (!ret && uc->uc_drv->post_bind) + ret = uc->uc_drv->post_bind(dev); + + if (!ret && devp) + *devp = dev; + return ret; + } + } + } +#endif + dev = calloc(1, sizeof(struct udevice)); if (!dev) return -ENOMEM; @@ -75,6 +103,9 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv, dev_set_plat(dev, plat); dev->driver_data = driver_data; dev->name = name; +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) + dev->node_name = name; +#endif dev_set_ofnode(dev, node); dev->parent = parent; dev->driver = drv; diff --git a/drivers/core/root.c b/drivers/core/root.c index d4ae652bcfb..4bf1ff80636 100644 --- a/drivers/core/root.c +++ b/drivers/core/root.c @@ -340,6 +340,21 @@ static int dm_scan(bool pre_reloc_only) return dm_probe_devices(gd->dm_root, pre_reloc_only); } +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) +int dm_rescan(void) +{ + int ret; + + ret = dm_extended_scan(false); + if (ret) { + debug("dm_extended_scan() failed: %d\n", ret); + return ret; + } + + return dm_probe_devices(gd->dm_root, false); +} +#endif + int dm_init_and_scan(bool pre_reloc_only) { int ret; diff --git a/dts/Kconfig b/dts/Kconfig index 6883a000a05..ab486b21fe2 100644 --- a/dts/Kconfig +++ b/dts/Kconfig @@ -292,6 +292,14 @@ config DTB_RESELECT config allows boards to implement a function at a later point during boot to switch to the "correct" dtb. +config MULTI_DTB_FIT_RESCAN + bool "Support switching dtb without drivers unloading (experimental)" + depends on MULTI_DTB_FIT + help + This configs adds possibility to switch from initial (minimal) dtb + to a "correct" one without devices/drivers unloading (ex: board type + required to switch dtb stored in ubi volume) + config MULTI_DTB_FIT bool "Support embedding several DTBs in a FIT image for u-boot" help diff --git a/include/dm/device.h b/include/dm/device.h index add67f9ec06..409b1c4861a 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -170,6 +170,9 @@ enum { struct udevice { const struct driver *driver; const char *name; +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) + const char *node_name; +#endif void *plat_; void *parent_plat_; void *uclass_plat_; diff --git a/include/dm/root.h b/include/dm/root.h index b2f30a842f5..dcab28f6c47 100644 --- a/include/dm/root.h +++ b/include/dm/root.h @@ -155,6 +155,29 @@ int dm_init(bool of_live); */ int dm_uninit(void); +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) +/** + * dm_rescan - Rescan ftd and add missed DM devices (experimental) + * + * This function can be used for switching from initial (minimal) dtb + * to a "correct" one without devices/drivers unloading. + * + * Restrictions: + * - initial dtb MUST be a subset of a new one + * - old devices will NOT be reinitialised + * - no devices will be deleted or deactivated + * - only new devices will be added + * + * Typical usage: + * ret = fdtdec_resetup(&rescan); + * if (!ret && rescan) + * dm_rescan(); + * + * Return: 0 if OK, -ve on error + */ +int dm_rescan(void); +#endif + #if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE) /** * dm_remove_devices_flags - Call remove function of all drivers with From patchwork Thu Jun 27 11:35:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1953218 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=ktVlPFzo; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4W8xNM6Clrz20Xg for ; Thu, 27 Jun 2024 21:36:19 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B1CEC885CC; Thu, 27 Jun 2024 13:36:01 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="ktVlPFzo"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A3FC9885B8; Thu, 27 Jun 2024 13:36:00 +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=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20700.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::700]) (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 ADFF08858C for ; Thu, 27 Jun 2024 13:35:58 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DzRXs8KTTSqenchogz8BTnnu6djR00NvRi8f9TE9Zxq2fM7ndTELKulrNQeMYmOhwrPmudR6uC+vujubzbpuLaGWAxU/RhIZWFxwGBTfhpMZYI6fiuatGCEVTU95IkWo2EZp3v3vYIifYSH5raqw0mGAXA20bFmUPN7U81drNbmDogW73SAvRSPZ4VOwvX6JS06qP3GHyJyO7NBYePWS1nwetIqwvXI07R7jiFQP4slkKe5pdNSUkDtxRH/y9/qekCsbxmEnQSESWsQvD1LWAmzBKprObQF0yuOYqf/Nkref0wIlDPCBwwbQlHpftTBZ0oyGD6cRtZRP/Py7Iwy9NA== 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=ful18EmvDhp2X9veMW00DNfyyONycwhMsW96mngoUoI=; b=Nxk1/tOlxNTUduIGfWeVeS9u/zHLPRcaWdakdTVUdQbt3dcOfDbAvg4M1kLA5pAKdSKZq/8y5nhHPAxuwvh6+JNxjkWnbG7nXD2opWGy5YdPXh4RhdJDoL+Sx/w0UL35yQLTmPGriUVJcdVxZpx/3qiyjos+GqnNQ1+9RudJPmWG3kwNKEQwIVhAUUVw0dNoFC5lSWs21VZMOpLV6X+X0tW6aI2HuqOjSgU/BvX96IxV9heOZ5PPftdd8MXs7aQwxkb45fwTK6bu5pl3kb8urb7sWL2/fIsIKHqEKE3qLjBr/vAU3kdy++5IRhZfJ4JmIjz8zbg2gqIW94ZnHZxoEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ful18EmvDhp2X9veMW00DNfyyONycwhMsW96mngoUoI=; b=ktVlPFzov4NWNICNoex9hol6lParY2DPv2EAXQfUWgyKK5F3xjj0u8/4bp8dD9qDVz/bqKPGcQfZKdTGkOxHiVU6wCEUGU4JIvu44luYAphY4xnwpShxZ35DpBZdMs69Z5PSomJ26NF9t2t8GAIb3tx+biw1Bo8yY1pv3PJjM5DMyksZUQDXVMwIJUCQRy+YdqYQnziQgJ5z7olYtUKMKipqBI7/bmysKgZQc6o6EI9Jl4dsAjsQRViXxbkyV+qV/Mf2fI8QJU4UncJhYT22/gBKYkj1SQv4pXrIa0fvdRdyKp123IhjgAOgLOjme9siE87r7gk9+Jb3MkM8F7TwVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by DBBPR08MB6140.eurprd08.prod.outlook.com (2603:10a6:10:20a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.35; Thu, 27 Jun 2024 11:35:57 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%5]) with mapi id 15.20.7698.025; Thu, 27 Jun 2024 11:35:57 +0000 From: Mikhail Kshevetskiy To: Tom Rini , Simon Glass , Peng Fan , Jaehoon Chung , Bin Meng , Devarsh Thakkar , Kunihiko Hayashi , Sean Anderson , Nikhil M Jain , Shiji Yang , Raymond Mao , Chanho Park , Marek Vasut , Dragan Simic , Jonas Karlman , Sumit Garg , Neil Armstrong , Caleb Connolly , Heinrich Schuchardt , u-boot@lists.denx.de Subject: [PATCH 3/3] dm: mmc: fix driver rebinding in the case of dtb reloading Date: Thu, 27 Jun 2024 14:35:46 +0300 Message-ID: <20240627113546.100333-3-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240627113546.100333-1-mikhail.kshevetskiy@iopsys.eu> References: <20240627113546.100333-1-mikhail.kshevetskiy@iopsys.eu> X-ClientProxiedBy: MM0P280CA0055.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:b::18) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|DBBPR08MB6140:EE_ X-MS-Office365-Filtering-Correlation-Id: 74bacafc-211c-4a5e-a45f-08dc969d4fa8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|52116014|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: qlFm0y81SkS5RA9m0nJfDiVlHi8jNZLguplPHSVqsuVyB3nI72KHq1e+i/Po6tL9/qqsmCaRWGMetCScKnZW6DW2RtiEooQjKtqzj8rLuXEcI7DUz0NWrWAjCt2BPltVuE/BjAoY29yhi1f3CFDLUldmLYAtctb5s8rdsln6ZY2feeooBf+hWvhID+GdRaR73o99lKSKuatdLf6EjQm8MhTaJmqhSMXwVVeE3hVCDE01eXvz7zozmC036HAVOFUZeKeBSI+KhBQ8sAdZwtwv0u+fkY8jy/oYQJG1UKVKYr69pt2Ue4lLRlNaYQl2P8BLMKNOCPYQoUI2f8yqwdfp1hrLj4qTJ8B+lcM0dkTSxwO8SSs+keT4N7Xz9SUHwLIc6RdYSsfP5gGvHkX1Zo/GOFo9LuTrmSqcg5dMCgqsWMG9MiE1feC6+XX/ciB8Q6zbKAi7+GKMX2nc8H/qo/Ql+XL5+Clp+S3Anc/hok9qvm6QUMySgTdBL3KeZ5MdILZMuoqAUzqKs+Krk1ImotfGm5EglbeR6vRbRCrWF9pY92jPu33s5CCX6Jstc0W/EH6dLrI5tuFGwnsai7kmJRnJ3PAKIIPAV9DjMcxGXCxPdbxoyuXRpzdfGrq2Hf6HCgKn9AOE9Cfa21gn2hrpZtCn4XeuJyXrgsU4yd/nj5AjoseynsBCV8Lc0VMmekon9ts7C+lk19a9tmkbvJ3dNzOOwuJe83ldNc9+Ty+O88Q1Atu1pvMTlagr56y4p0Sb75TGnGTRn6yuDv3TJsviZn3t8YeZEWIlenEHYimO3shw83SG291vlvceK7DMNLzrJg3YIry9VCd1D33zzCQ+tT6QVAD/Fe4tDN/l3H60yh3ZZGM74VsUzWnRHbdg50K1oqg2nQi9oOeuaRmTTOjPPFFcQnqN4TDERJozJ+GkjHobycyEsFNTVLSBZc3mE3VxMpcPkgxY+MUavyBPgqyKwPbsDG/qHLoKIcNETiIgcFieDlZHlilrYbsVEjllCcG7UYGHkA9/U+JKEl67hrxgMn7qlif0i1MEaVgfr9S0sdlS8z9wwkC0i9fmLK5gp6Ruk0ZfYjlUgY/dhmxDgBjUyQRnutEX+T9o6EfSZUEGkNM8tys7/hKzUwtH0HfldkKseSSQAxnOrP3Ly726j92lMNFkgtlb/LE1Hs5lhmiBrb/qComplmcOF3Yb+LQqIh51X9R0c2v0B0ikEbntRO9eQl9OJi+8jEPY9IW4es0VynQ7hPhyj3HsYI04si5JeixstIbWmgFv2CnR4C+03Us0iX9JPJbEjdhZ47geoSjupEixt+K3XmfWrhZsOAeYqfsbFtNv3UrYKgZiKSltwsuNwL+PVLxi7tzncLVlz0/n7FZ6GmmbpIxOoIdVDPq0Uq6FuJoYHAO4buvnVGitmKv6HUgwG/BAUQKPMoPYK+RM8ZiS6GQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(52116014)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Fxz/TyNmPb3GxtEX5GLwmQ6zxPbELOs4Zox+x/vTZgHQRmcDdOef8JdOk/SfG6lZclRY55ZHVwlOJZwnyLZoQB72xipN2uGdHkwxiz9qw1JbEGjlOHrio1syLZlp5a00xDOnmz4koF+KytbBFEtoBNh05kUqnojD2fpJSc1G2aiEKd7MuMdHmGU6o1AF9yBqhEVnwewK6uHcAxkXba8hV6OKg15jeXGs34rgNXJN3aLwwdn3DW2zWc3XHG0yuSaAXwAf6kX3MXgh4Jzwo+qz8d6y2nIHzSC0gGVWhQvvfExthBnvpmQSyAsWjD0UW8OE33Dotgse2GDDCjDmWurjaNfOTMaCqZVQvn6i8PbuyjYYhv0p7m7ji1k6NqIO713VIn/ip2q0ib/3E59U68FNpPtrDphrzDJGYB5xoApB2+PCBzG02OH595zPu8nOSGuogiMFG9KFWbo0pHEN97couIx3kV7QgVnzpb4SNI5/7+DpHk5ZYpha6qe8tlwkOlgZJf4IDBgIoqtG8OT6KJfyF1u1aRgAGxRyxm2kRUUH5bZ9efE7knJZmKwTQcfNhE4KrDGljnc7ibvk7D7KNlJ5x00yuruaGnIFYWiVrgdYr48Bdc5rivCXWDmm2gAcGQI3s6jNta0rkXYpq/xuUBlwVtqraotJp6Y64kiBAaK43YxDRmP0XFlpaIy2oZ6HOds3a9YCtvfVHj+lBuabFeM3VZHWYZv6lfJdsTvD/4keRmvG3psED2fR+pG06pY3IGJdLeaQFn5ruzr9Py1qRUTr1QgBEQiptiDanaXA85bGRBCkFDaB6PzgMIWNj//8EAwl5wnGX2wSu9kt9evq3Ef7MQGMEoTMQ5lHjj4q/ZyK3iTfZPZBGre3q/Bi7fqfrhdxq9Mov01qUynSywnKtM7tSgxjs2E89NqWnuWcAtaHrRctGnY8bdGXi0KSAyAhsdY991PcHH08rRhHfqSkzzZzldMgsOjOZvBqmbagn1QpjhpTDT6j/gXug2GYxNLJkz/cdTGMc4x9+8nJh9srPGuS5EDKQIYyAFfJcwCKN6WGLW76cdt+v26LQbTupBsoyQgTM/2nwJAiXfWS1c6GcRcA5Gbwg/CBCb/y7DaZFjzktPTOxGKwVSVE3erau+VttfoeA+QF/a1WHa3+7XE/SzT7RTw/SwpdVZqZDhi4sOlLhk0+Cg7U/AD48LHoJun1RpJ+FSrPpC6H5nzwbnF97ZIsokiIjoYWgJXHQsC6gsjOjd1H9VZAiZDRMk+FgsG5VpWnz5gXX3sa3nZ6ToLbgCa/t8uC4+3L0h9lXKnIRm9PEpZPv4cEew8No1ZUA/2r5imDyUDEH4SUmH/hrUJrvbD++Lwm7wl9ADuXYeDJqlBmnhLiaUfu9Q0WzKqiKCYhRdS9tlqiTPno/LDiUjd4B2BZ/demx2qg/ldOZ+1FhoaEsPMtxk1QLQlGnYgNp4NYIgmZ25S6Xhsj8Q6ZR+2zMEb3i75OUHkDKa2H181ZK8xsfNFTPHPuJeO8M01/aqYIFY1GaHAmT7tDHxiiitgog4/Q/RA9LT1qXFevGIpVIpdbAISse6VbPT98D5I9RkhzUkF5htG0J+HzrHrVHrpcf8/kVvKqw5IQ1cZJiBVOT7yCZPA= X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 74bacafc-211c-4a5e-a45f-08dc969d4fa8 X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2024 11:35:57.1892 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AnDN9lorQUGtHeQRI6Qvifs56ni3gEtLXmi5r1HAOM8FHajDuwZrkF0v9nXOFA4ioRC0KK3dMFOpPdAUd8K/ttK8K9ybAab0AqSN1e0j/9Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6140 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 Rebinding of the mmc driver causes reregistration of block device. Thus second mmc device appears and the first becomes broken. Fix an issue by using already registered block device instead of registering a new one. Signed-off-by: Mikhail Kshevetskiy --- drivers/mmc/mmc-uclass.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index 24170c59ecc..403d20dad53 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -420,11 +420,17 @@ int mmc_bind(struct udevice *dev, struct mmc *mmc, const struct mmc_config *cfg) /* Use the fixed index with aliases node's index */ debug("%s: alias devnum=%d\n", __func__, dev_seq(dev)); - ret = blk_create_devicef(dev, "mmc_blk", "blk", UCLASS_MMC, - dev_seq(dev), DEFAULT_BLKSZ, 0, &bdev); - if (ret) { - debug("Cannot create block device\n"); - return ret; +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT_RESCAN) + device_find_first_child_by_uclass(dev, UCLASS_BLK, &bdev); + if (!bdev) +#endif + { + ret = blk_create_devicef(dev, "mmc_blk", "blk", UCLASS_MMC, + dev_seq(dev), DEFAULT_BLKSZ, 0, &bdev); + if (ret) { + debug("Cannot create block device\n"); + return ret; + } } bdesc = dev_get_uclass_plat(bdev); mmc->cfg = cfg;