From: "Andrew Jeffery" <andrew@aj.id.au>
To: "Steven Lee" <steven_lee@aspeedtech.com>
Cc: "Philipp Zabel" <p.zabel@pengutronix.de>,
"Ulf Hansson" <ulf.hansson@linaro.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Joel Stanley" <joel@jms.id.au>,
"Adrian Hunter" <adrian.hunter@intel.com>,
"Ryan Chen" <ryanchen.aspeed@gmail.com>,
"moderated list:ASPEED SD/MMC DRIVER"
<linux-aspeed@lists.ozlabs.org>,
"moderated list:ASPEED SD/MMC DRIVER" <openbmc@lists.ozlabs.org>,
linux-mmc <linux-mmc@vger.kernel.org>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@vger.kernel.org>,
"moderated list:ARM/ASPEED MACHINE SUPPORT"
<linux-arm-kernel@lists.infradead.org>,
"open list" <linux-kernel@vger.kernel.org>,
"Hongwei Zhang" <Hongweiz@ami.com>,
"Ryan Chen" <ryan_chen@aspeedtech.com>,
"Chin-Ting Kuo" <chin-ting_kuo@aspeedtech.com>
Subject: Re: [PATCH v3 5/5] mmc: sdhci-of-aspeed: Assert/Deassert reset signal before probing eMMC
Date: Thu, 20 May 2021 08:39:29 +0930 [thread overview]
Message-ID: <1516d2c0-0497-48b3-a366-711287132c35@www.fastmail.com> (raw)
In-Reply-To: <20210519105736.GA27246@aspeedtech.com>
On Wed, 19 May 2021, at 20:27, Steven Lee wrote:
> The 05/14/2021 10:37, Andrew Jeffery wrote:
> >
> >
> > On Fri, 14 May 2021, at 11:39, Steven Lee wrote:
> > > The 05/13/2021 08:42, Andrew Jeffery wrote:
> > > >
> > > >
> > > > On Mon, 10 May 2021, at 15:33, Steven Lee wrote:
> > > > > The 05/07/2021 15:36, Andrew Jeffery wrote:
> > > > > >
> > > > > >
> > > > > > On Fri, 7 May 2021, at 15:54, Steven Lee wrote:
> > > > > > > The 05/07/2021 09:32, Andrew Jeffery wrote:
> > > > > > > >
> > > > > > > >
> > > > > > > > On Thu, 6 May 2021, at 19:54, Philipp Zabel wrote:
> > > > > > > > > Hi Steven,
> > > > > > > > >
> > > > > > > > > On Thu, May 06, 2021 at 06:03:12PM +0800, Steven Lee wrote:
> > > > > > > > > > + if (info) {
> > > > > > > > > > + if (info->flag & PROBE_AFTER_ASSET_DEASSERT) {
> > > > > > > > > > + sdc->rst = devm_reset_control_get(&pdev->dev, NULL);
> > > > > > > > >
> > > > > > > > > Please use devm_reset_control_get_exclusive() or
> > > > > > > > > devm_reset_control_get_optional_exclusive().
> > > > > > > > >
> > > > > > > > > > + if (!IS_ERR(sdc->rst)) {
> > > > > > > > >
> > > > > > > > > Please just return errors here instead of ignoring them.
> > > > > > > > > The reset_control_get_optional variants return NULL in case the
> > > > > > > > > device node doesn't contain a resets phandle, in case you really
> > > > > > > > > consider this reset to be optional even though the flag is set?
> > > > > > > >
> > > > > > > > It feels like we should get rid of the flag and leave it to the
> > > > > > > > devicetree.
> > > > > > > >
> > > > > > >
> > > > > > > Do you mean adding a flag, for instance, "mmc-reset" in the
> > > > > > > device tree and call of_property_read_bool() in aspeed_sdc_probe()?
> > > > > > >
> > > > > > > > I'm still kind of surprised it's not something we want to do for the
> > > > > > > > 2400 and 2500 as well.
> > > > > > > >
> > > > > > >
> > > > > > > Per discussion with the chip designer, AST2400 and AST2500 doesn't need
> > > > > > > this implementation since the chip design is different to AST2600.
> > > > > >
> > > > > > So digging a bit more deeply on this, it looks like the reset is
> > > > > > already taken care of by drivers/clk/clk-ast2600.c in the
> > > > > > clk_prepare_enable() path.
> > > > > >
> > > > > > clk-ast2600 handles resets when enabling the clock for most peripherals:
> > > > > >
> > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/clk/clk-ast2600.c?h=v5.12#n276
> > > > > >
> > > > > > and this is true for both the SD controller and the eMMC controller:
> > > > > >
> > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/clk/clk-ast2600.c?h=v5.12#n94
> > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/clk/clk-ast2600.c?h=v5.12#n88
> > > > > >
> > > > > > If this weren't the case you'd specify a reset property in the SD/eMMC
> > > > > > devicetree nodes for the 2600 and then use
> > > > > > devm_reset_control_get_optional_exclusive() as Philipp suggested. See
> > > > > > the reset binding here:
> > > > > >
> > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/reset/reset.txt?h=v5.12
> > > > > >
> > > > > > So on the surface it seems the reset handling in this patch is
> > > > > > unnecessary. Have you observed an issue with the SoC that means it's
> > > > > > required?
> > > > > >
> > > > >
> > > > > Yes, you are right, aspeed_sdc_probe() calls clk_prepare_enable(),
> > > > > aspeed_g6_clk_enable() does reset eMMC.
> > > > >
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/mmc/host/sdhci-of-aspeed.c#n496
> > > > >
> > > > > However, the clock of eMMC is enabled in my u-boot(2019.04).
> > > > > So it is retruned in the condition of aspeed_g6_clk_is_enabled() below
> > > > > and doesn't reset eMMC.
> > > > >
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/clk/clk-ast2600.c?h=v5.12#n285
> > > >
> > > > Okay, so what's the issue that the patch addresses? Is there a bug?
> > > > Presumably if u-boot isn't making use of the eMMC the clock won't be
> > > > on, so we'll do the reset if the kernel wants to make use of the
> > > > device. If u-boot _is_ using the eMMC, u-boot will have done the
> > > > correct clock enable/reset sequence and so the controller should be
> > > > ready to go?
> > > >
> > > > The only potential issue remaining is u-boot leaving the controller in
> > > > a configuration the kernel isn't expecting when handing over. If that's
> > > > the issue then we've forgotten to do some specific initialisation (i.e.
> > > > not just reset the entire thing) of the controller in the driver probe
> > > > path, right?
> > > >
> > >
> > > If DMA engine is used before probing eMMC in kernel stage,
> > > eMMC controller may have unexpected behavior when re-exectuing
> > > identifying process.
> > > Thus, we need to reset at the beginning of kernel since
> > > kernel is a new stage. We should not assume some one do something
> > > before.
> > >
> > > > FWIW I haven't recently seen any poor behaviour from the controller or
> > > > driver. For us (IBM) it seems to be working well since we sorted out
> > > > the phase configuration.
> > > >
> > >
> > > Yes, you are right, everything work well currently. But, kernel is a new
> > > stage, we cannot assume eMMC controller is at initial state when
> > > entering kernel stage.
> >
> > Okay. That sounds true no matter what the hardware design though (going
> > back to the difference between the 2400/2500 and 2600).
> >
> > Given the reset is tied up in the clock gating, it would be nice if we
> > could do the following in aspeed_sdc_probe():
> >
> > ```
> > /* Clean up the controller in case it wasn't left in a good state by the bootloader */
> > clock_disable_unprepare(...);
> >
> > clock_prepare_enable(...);
> > ```
> >
> > But the enable_count tracked by clock_core_{en,dis}able() kills that
> > idea.
> >
> > This makes it seem like we need to break out the appropriate indexes
> > to add `resets` properties in the devicetree. This will need some input
> > from Joel, given the eMMC/SD resets can't currently be handled that way.
> >
>
> Hi Adnrew,
>
> I was wondering if I should wait for Joel's comment, or
>
> 1. Drop this patch in this patch series, and prepare another patch
> series for this issue in the future. Since sdhci works well as long as we
> don't use DMA engine before kernel stage.
I think this is the way forward, it's kind of separate to what you're
trying to achieve with the rest of the patches in this series.
I'll poke Joel.
Cheers,
Andrew
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-05-19 23:12 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-06 10:03 [PATCH v3 0/5] mmc: sdhci-of-aspeed: Support toggling SD bus signal Steven Lee
2021-05-06 10:03 ` [PATCH v3 1/5] dt-bindings: mmc: sdhci-of-aspeed: Add an example for AST2600-A2 EVB Steven Lee
2021-05-07 1:13 ` Rob Herring
2021-05-07 3:13 ` Steven Lee
2021-05-07 17:21 ` Rob Herring
2021-05-10 2:32 ` Steven Lee
2021-05-06 10:03 ` [PATCH v3 2/5] ARM: dts: aspeed: ast2600evb: Add comment for gpio regulator of sdhci Steven Lee
2021-05-07 1:40 ` Andrew Jeffery
2021-05-07 3:30 ` Steven Lee
2021-05-07 3:42 ` Andrew Jeffery
2021-05-06 10:03 ` [PATCH v3 3/5] ARM: dts: aspeed: ast2600evb: Add phase correction for emmc controller Steven Lee
2021-05-07 1:34 ` Andrew Jeffery
2021-05-06 10:03 ` [PATCH v3 4/5] mmc: sdhci-of-aspeed: Add a helper for updating capability register Steven Lee
2021-05-07 2:13 ` Andrew Jeffery
2021-05-07 6:59 ` Steven Lee
2021-05-07 7:07 ` Andrew Jeffery
2021-05-06 10:03 ` [PATCH v3 5/5] mmc: sdhci-of-aspeed: Assert/Deassert reset signal before probing eMMC Steven Lee
2021-05-06 10:24 ` Philipp Zabel
2021-05-07 1:32 ` Andrew Jeffery
2021-05-07 6:24 ` Steven Lee
2021-05-07 7:36 ` Andrew Jeffery
2021-05-10 6:03 ` Steven Lee
2021-05-13 0:42 ` Andrew Jeffery
2021-05-14 2:09 ` Steven Lee
2021-05-14 2:37 ` Andrew Jeffery
2021-05-19 10:57 ` Steven Lee
2021-05-19 23:09 ` Andrew Jeffery [this message]
2021-05-07 6:02 ` Steven Lee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1516d2c0-0497-48b3-a366-711287132c35@www.fastmail.com \
--to=andrew@aj.id.au \
--cc=Hongweiz@ami.com \
--cc=adrian.hunter@intel.com \
--cc=chin-ting_kuo@aspeedtech.com \
--cc=devicetree@vger.kernel.org \
--cc=joel@jms.id.au \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-aspeed@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=openbmc@lists.ozlabs.org \
--cc=p.zabel@pengutronix.de \
--cc=robh+dt@kernel.org \
--cc=ryan_chen@aspeedtech.com \
--cc=ryanchen.aspeed@gmail.com \
--cc=steven_lee@aspeedtech.com \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).