From patchwork Sat Aug 12 00:06:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Edwards X-Patchwork-Id: 1820448 X-Patchwork-Delegate: dario.binacchi@amarulasolutions.com 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 (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=mmYTOYOR; 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 4RN1Dm4Ngxz1yf2 for ; Sat, 12 Aug 2023 10:07:04 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9AFDE86958; Sat, 12 Aug 2023 02:06:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com 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=gmail.com header.i=@gmail.com header.b="mmYTOYOR"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id BEB518696C; Sat, 12 Aug 2023 02:06:24 +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=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id A4F478694A for ; Sat, 12 Aug 2023 02:06:22 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=cfsworks@gmail.com Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-6874d1c8610so1974727b3a.0 for ; Fri, 11 Aug 2023 17:06:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691798781; x=1692403581; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=B1cPWvDUSrchITPUFqDJKG/h7PP+aMoFZka7Erfphvg=; b=mmYTOYORjuqYxkSIWl/Oqn+XwZY5Tx2ljfIcYKITBslPrGOW4Mc24SgBP451f6a0Jv n9Bwf8SWjRcGWqp4lfHlm6+E4bIvTHDkl02TbrAXWoJtUV2FsV7l+CAj9yKEWKkTEEWY KOgGsBliArDOA44G8v1yRbs4R5Rd5XSITR/UT8ynIjuSSO7O5sFD0ic5RMZewzH6DhiH Ik1kkbIum7CBDAT1F2wPGsRyGfxsFK+oPwEzOD2sWqQuXD7sJoCq0fctXsyoKwow9gGH ATtJfb2PrDLZ26x6uQ0SUb66UVwofWu47WCYOa8ElpnBAuryyl1xjV3F1qjANbLgjqD4 IUWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691798781; x=1692403581; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B1cPWvDUSrchITPUFqDJKG/h7PP+aMoFZka7Erfphvg=; b=cL+Be7UK13DHT7KMGPL0F4lWOJYHuO5H/Bb11cWsdCWJVzjz1PzB5az+QGoJZ191uK AIMetpsAJ8ATYEPbsBjPcR9LryDmm2WFm+cBh9ukQ49Goruw+nvaoT622m+78kgaz5rv rwRUZMJarjB0tMD3qyz8jJKciFpMXhqDCKVRqxjI7/R4xEpyMNnuAE/0MH+06AQe43Z/ l1/GtARYvofBtoqQ05g48H9+RpOfVAmpo9vDs9DBcon0Acr586XgMBa7PpSIAw0q24B0 5rursW4/lBHDWvZezKTd6XOx3LjTQ4utduKCYfoo/jWftmGNbnelXamxOaJ/QBe/FT2y aaig== X-Gm-Message-State: AOJu0Yy87kghh0NBMjkQQieG78q96dHzfoVzgw2F1nUyZ+XBGysHhuho 2S6+T6iZ5uiDp4xrLSfK4tw= X-Google-Smtp-Source: AGHT+IEutgawaGmRcB/4/PZs919nb5bHGbeyMa2+uJI/MH+kEKeBREtp0SAT2rkGkV6pNYGP3D8Hyw== X-Received: by 2002:a05:6a21:2790:b0:13f:cd07:2b3c with SMTP id rn16-20020a056a21279000b0013fcd072b3cmr3159949pzb.36.1691798781058; Fri, 11 Aug 2023 17:06:21 -0700 (PDT) Received: from celestia.nettie.lan (static-198-54-134-172.cust.tzulo.com. [198.54.134.172]) by smtp.gmail.com with ESMTPSA id x16-20020a62fb10000000b00686bef8e55csm3848834pfm.39.2023.08.11.17.06.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Aug 2023 17:06:20 -0700 (PDT) From: Sam Edwards X-Google-Original-From: Sam Edwards To: Heiko Schocher , Kyungmin Park Cc: u-boot@lists.denx.de, Sam Edwards Subject: [RFC PATCH 4/4] HACK: enable access to `ubi 0:volname` block devices Date: Fri, 11 Aug 2023 18:06:06 -0600 Message-ID: <20230812000606.72319-5-CFSworks@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230812000606.72319-1-CFSworks@gmail.com> References: <20230812000606.72319-1-CFSworks@gmail.com> MIME-Version: 1.0 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 --- disk/part.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/disk/part.c b/disk/part.c index 1ad8277b65..85eb51429a 100644 --- a/disk/part.c +++ b/disk/part.c @@ -14,6 +14,9 @@ #include #include #include +#include +#include +#include #undef PART_DEBUG @@ -505,6 +508,59 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, } #endif +#if IS_ENABLED(CONFIG_CMD_UBI) && !IS_ENABLED(CONFIG_SPL_BUILD) + /* + * Also special-case UBI, which may use names to find the specific + * volumes, so this deviates a bit from the typical devnum:partnum + * syntax. + */ + if (!strcmp(ifname, "ubi")) { + dev = hextoul(dev_part_str, &ep); + if (*ep == ':') { + struct udevice *ubi_dev = NULL; + struct udevice *vol_dev = NULL; + part_str = &ep[1]; + + ret = uclass_find_device(UCLASS_UBI, dev, &ubi_dev); + if (!ubi_dev || ret) { + printf("** Cannot find UBI %x\n", dev); + return -EINVAL; + } + + part = hextoul(part_str, &ep); + if (!*ep) { + struct udevice *tmp_dev; + device_foreach_child(tmp_dev, ubi_dev) { + struct blk_desc *desc = dev_get_uclass_plat(tmp_dev); + if (desc->devnum == part) { + vol_dev = tmp_dev; + break; + } + } + } + + if (!vol_dev) + ret = device_find_child_by_name(ubi_dev, part_str, &vol_dev); + + if (!vol_dev || ret) { + printf("** UBI volume %s not found\n", part_str); + return -EINVAL; + } + + ret = device_probe(vol_dev); + if (ret) + return ret; + + *dev_desc = dev_get_uclass_plat(vol_dev); + part_get_info_whole_disk(*dev_desc, info); + return 0; + } + + printf("UBIFS not mounted, use ubifsmount to mount volume first!\n"); + return -EINVAL; + } +#endif + /* If no dev_part_str, use bootdevice environment variable */ if (!dev_part_str || !strlen(dev_part_str) || !strcmp(dev_part_str, "-"))