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 X-Spam-Level: X-Spam-Status: No, score=-19.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3DA74C4338F for ; Thu, 19 Aug 2021 03:51:04 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 8FE3260E78 for ; Thu, 19 Aug 2021 03:51:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 8FE3260E78 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B39938325A; Thu, 19 Aug 2021 05:47:51 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org 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=chromium.org header.i=@chromium.org header.b="T7ETOX0q"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E18C3831C8; Thu, 19 Aug 2021 05:46:54 +0200 (CEST) Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com [IPv6:2607:f8b0:4864:20::22d]) (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 E645B831D3 for ; Thu, 19 Aug 2021 05:46:42 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sjg@chromium.org Received: by mail-oi1-x22d.google.com with SMTP id u25so6677827oiv.5 for ; Wed, 18 Aug 2021 20:46:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n51PYXAUqpaM3N4zFSBFUZ+gC4ErAsoSNiINT+HtK9s=; b=T7ETOX0qclF0PeGV31OeukU61kTx0HsvdZ8DMtJO0sBxWNxri8+eR2OgjN6XfY1Qae u5bBEbqbN3NGGU4oo9vK9AoshDaDYXgAh5c5kjbdtp1qBHytk9AvoZskHJxEaddDMqPJ JlsETSx3AE6OKqA5BgZvIZE0fUwG77+JFfx98= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n51PYXAUqpaM3N4zFSBFUZ+gC4ErAsoSNiINT+HtK9s=; b=CdOKDGv3pxNdiMSngGAhPFE1qE6I0GwLPPZMGWUDXeqPU7G9CMcTvbW5fDN66Yeej4 37iV10WxAoF9jKDakPBg2ifJjhUv/kBTmj4sKBwOLNlg5oE0g2GczDMYSRxPhy4bRkJw xqFFBjsoDbUAgh8bcehaKcncbrIwzsjhDZB3pDBf0FqX/eOqqA+MobnaTocJNXp3Bozc r24u5VS5adCR2qFRWKNFmXvTC7uy7qe80FwZYWBQRbZtfCkmo5At58RBp2BxmUCDfwcD AxFEuzt/8gbIN+C1ezV6TEbP72VYzdSAN5XUQvpG3NzH49ZQ8m1cKKOe3ePy5nsABy4c +0QQ== X-Gm-Message-State: AOAM531VeVHrVah9m0/zKew6sgfbVhQE9orMBAGWib67gGwKGubZwDTn YVB2jX2n58ytlUojvmSZYLvanYlr161rJw== X-Google-Smtp-Source: ABdhPJwU9kyWaiDjSD8fOSY0B9ovogB+59/MKc3O/Y3nMjYvq5BTWqpk+tezAyivDhthmHnXHipLOg== X-Received: by 2002:aca:3885:: with SMTP id f127mr1111461oia.77.1629344801343; Wed, 18 Aug 2021 20:46:41 -0700 (PDT) Received: from kiwi.bld.corp.google.com (c-67-190-101-114.hsd1.co.comcast.net. [67.190.101.114]) by smtp.gmail.com with ESMTPSA id q3sm370025ooa.13.2021.08.18.20.46.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Aug 2021 20:46:40 -0700 (PDT) From: Simon Glass To: U-Boot Mailing List Cc: Ilias Apalodimas , Steffen Jaeckel , Michal Simek , Tom Rini , Dennis Gilmore , Daniel Schwierzeck , Lukas Auer , Simon Glass , Jaehoon Chung , Peng Fan Subject: [PATCH 26/28] mmc: Add a bootmethod Date: Wed, 18 Aug 2021 21:45:59 -0600 Message-Id: <20210818214547.26.Idda0c29539776a431958d22f1ac59dd20eec9697@changeid> X-Mailer: git-send-email 2.33.0.rc1.237.g0d66db33f3-goog In-Reply-To: <20210819034601.1618773-1-sjg@chromium.org> References: <20210819034601.1618773-1-sjg@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean Add a bootmethod for MMC. It mostly just calls the bootmethod helper function. Add a function to obtain the block device for an MMC controller. Fix up the comment for mmc_get_blk_desc() while we are here. Signed-off-by: Simon Glass --- MAINTAINERS | 1 + drivers/mmc/Makefile | 5 ++++ drivers/mmc/mmc-uclass.c | 19 +++++++++++++++ drivers/mmc/mmc_bootmethod.c | 46 ++++++++++++++++++++++++++++++++++++ include/mmc.h | 12 +++++++++- 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 drivers/mmc/mmc_bootmethod.c diff --git a/MAINTAINERS b/MAINTAINERS index f472a589f61..246c5e60270 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -640,6 +640,7 @@ F: cmd/bootmethod.c F: doc/develop/bootflow.rst F: doc/usage/bootflow.rst F: doc/usage/bootmethod.rst +F: drivers/mmc/mmc_bootmethod.c F: include/bootmethod.h F: include/distro.h F: test/boot/bootmethod.c diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index dde6cd563ff..0b6ddfb5165 100644 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile @@ -5,6 +5,11 @@ obj-y += mmc.o obj-$(CONFIG_$(SPL_)DM_MMC) += mmc-uclass.o + +ifdef CONFIG_$(SPL_TPL_)DM_MMC +obj-$(CONFIG_$(SPL_TPL_)BOOTMETHOD) += mmc_bootmethod.o +endif + obj-$(CONFIG_$(SPL_)MMC_WRITE) += mmc_write.o obj-$(CONFIG_MMC_PWRSEQ) += mmc-pwrseq.o obj-$(CONFIG_MMC_SDHCI_ADMA_HELPERS) += sdhci-adma.o diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index 9e39fdd6c44..42474bc197e 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -8,6 +8,7 @@ #define LOG_CATEGORY UCLASS_MMC #include +#include #include #include #include @@ -315,6 +316,20 @@ int mmc_get_next_devnum(void) return blk_find_max_devnum(IF_TYPE_MMC); } +int mmc_get_blk(struct udevice *dev, struct udevice **blkp) +{ + struct udevice *blk; + int ret; + + device_find_first_child_by_uclass(dev, UCLASS_BLK, &blk); + ret = device_probe(blk); + if (ret) + return ret; + *blkp = blk; + + return 0; +} + struct blk_desc *mmc_get_blk_desc(struct mmc *mmc) { struct blk_desc *desc; @@ -403,6 +418,10 @@ int mmc_bind(struct udevice *dev, struct mmc *mmc, const struct mmc_config *cfg) mmc->cfg = cfg; mmc->priv = dev; + ret = bootmethod_setup_for_dev(dev, "mmc_bootmethod"); + if (ret) + return log_msg_ret("bootmethod", ret); + /* the following chunk was from mmc_register() */ /* Setup dsr related values */ diff --git a/drivers/mmc/mmc_bootmethod.c b/drivers/mmc/mmc_bootmethod.c new file mode 100644 index 00000000000..eab13036d89 --- /dev/null +++ b/drivers/mmc/mmc_bootmethod.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Bootmethod for MMC + * + * Copyright 2021 Google LLC + * Written by Simon Glass + */ + +#include +#include +#include +#include + +static int mmc_get_bootflow(struct udevice *dev, int seq, + struct bootflow *bflow) +{ + struct udevice *mmc_dev = dev_get_parent(dev); + struct udevice *blk; + int ret; + + ret = mmc_get_blk(mmc_dev, &blk); + /* + * If there is no media, indicate that no more partitions should be + * checked + */ + if (ret == -EOPNOTSUPP) + ret = -ESHUTDOWN; + if (ret) + return log_msg_ret("blk", ret); + assert(blk); + ret = bootmethod_find_in_blk(dev, blk, seq, bflow); + if (ret) + return log_msg_ret("find", ret); + + return 0; +} + +struct bootmethod_ops mmc_bootmethod_ops = { + .get_bootflow = mmc_get_bootflow, +}; + +U_BOOT_DRIVER(mmc_bootmethod) = { + .name = "mmc_bootmethod", + .id = UCLASS_BOOTMETHOD, + .ops = &mmc_bootmethod_ops, +}; diff --git a/include/mmc.h b/include/mmc.h index 0bf19de20e5..1cd274f6253 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -959,10 +959,20 @@ int mmc_get_env_dev(void); * mmc_get_blk_desc() - Get the block descriptor for an MMC device * * @mmc: MMC device - * @return block device if found, else NULL + * @return block descriptor if found, else NULL */ struct blk_desc *mmc_get_blk_desc(struct mmc *mmc); +/** + * mmc_get_blk() - Get the block device for an MMC device + * + * @dev: MMC device + * @blkp: Returns pointer to probed block device on sucesss + * + * @return 0 on success, -ve on error + */ +int mmc_get_blk(struct udevice *dev, struct udevice **blkp); + /** * mmc_send_ext_csd() - read the extended CSD register * -- 2.33.0.rc1.237.g0d66db33f3-goog