All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: Steven Lee <steven_lee@aspeedtech.com>
Cc: Andrew Jeffery <andrew@aj.id.au>,
	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>,
	"open list:ASPEED SD/MMC DRIVER" <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>,
	Hongweiz@ami.com, ryan_chen@aspeedtech.com,
	chin-ting_kuo@aspeedtech.com
Subject: Re: [PATCH v3 5/5] mmc: sdhci-of-aspeed: Assert/Deassert reset signal before probing eMMC
Date: Thu, 6 May 2021 12:24:58 +0200	[thread overview]
Message-ID: <20210506102458.GA20777@pengutronix.de> (raw)
In-Reply-To: <20210506100312.1638-6-steven_lee@aspeedtech.com>

Hi Steven,

On Thu, May 06, 2021 at 06:03:12PM +0800, Steven Lee wrote:
> For cleaning up the AST2600 eMMC controller, the reset signal should be
> asserted and deasserted before it is probed.
> 
> Signed-off-by: Steven Lee <steven_lee@aspeedtech.com>
> ---
>  drivers/mmc/host/sdhci-of-aspeed.c | 49 ++++++++++++++++++++++++------
>  1 file changed, 40 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of-aspeed.c
> index 4979f98ffb52..8ef06f32abff 100644
> --- a/drivers/mmc/host/sdhci-of-aspeed.c
> +++ b/drivers/mmc/host/sdhci-of-aspeed.c
[...]
> @@ -533,11 +545,22 @@ static struct platform_driver aspeed_sdhci_driver = {
>  	.remove		= aspeed_sdhci_remove,
>  };
>  
> +static const struct of_device_id aspeed_sdc_of_match[] = {
> +	{ .compatible = "aspeed,ast2400-sd-controller", },
> +	{ .compatible = "aspeed,ast2500-sd-controller", },
> +	{ .compatible = "aspeed,ast2600-sd-controller", .data = &ast2600_sdc_info},
> +	{ }
> +};
> +
> +MODULE_DEVICE_TABLE(of, aspeed_sdc_of_match);
> +
>  static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  {
>  	struct device_node *parent, *child;
>  	struct aspeed_sdc *sdc;
> +	const struct of_device_id *match = NULL;
> +	const struct aspeed_sdc_info *info = NULL;

There is no need to initialize these variables to NULL, see below:

>  	int ret;
>  
>  	sdc = devm_kzalloc(&pdev->dev, sizeof(*sdc), GFP_KERNEL);
> @@ -546,6 +569,23 @@ static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  	spin_lock_init(&sdc->lock);
>  
> +	match = of_match_device(aspeed_sdc_of_match, &pdev->dev);

match is set unconditionally before it is used,

> +	if (!match)
> +		return -ENODEV;
> +
> +	if (match->data)
> +		info = match->data;

and info could be set unconditionally as well:

	info = match->data;

> +	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?

> +				reset_control_assert(sdc->rst);
> +				reset_control_deassert(sdc->rst);

Is there no need for delays between assertion and deassertion or after
the reset is deasserted?

> +			}
> +		}
> +	}
> +
>  	sdc->clk = devm_clk_get(&pdev->dev, NULL);
>  	if (IS_ERR(sdc->clk))
>  		return PTR_ERR(sdc->clk);

In general, I would assert/deassert the reset only after all resources
are successfully acquired. This might avoid unnecessary resets in case
of probe deferrals.

regards
Philipp

WARNING: multiple messages have this Message-ID (diff)
From: Philipp Zabel <p.zabel@pengutronix.de>
To: Steven Lee <steven_lee@aspeedtech.com>
Cc: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
	<devicetree@vger.kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	ryan_chen@aspeedtech.com,
	"moderated list:ASPEED SD/MMC DRIVER"
	<linux-aspeed@lists.ozlabs.org>, Andrew Jeffery <andrew@aj.id.au>,
	"open list:ASPEED SD/MMC DRIVER" <linux-mmc@vger.kernel.org>,
	"moderated list:ASPEED SD/MMC DRIVER" <openbmc@lists.ozlabs.org>,
	Ryan Chen <ryanchen.aspeed@gmail.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	chin-ting_kuo@aspeedtech.com,
	open list <linux-kernel@vger.kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Hongweiz@ami.com,
	"moderated list:ARM/ASPEED MACHINE SUPPORT"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3 5/5] mmc: sdhci-of-aspeed: Assert/Deassert reset signal before probing eMMC
Date: Thu, 6 May 2021 12:24:58 +0200	[thread overview]
Message-ID: <20210506102458.GA20777@pengutronix.de> (raw)
In-Reply-To: <20210506100312.1638-6-steven_lee@aspeedtech.com>

Hi Steven,

On Thu, May 06, 2021 at 06:03:12PM +0800, Steven Lee wrote:
> For cleaning up the AST2600 eMMC controller, the reset signal should be
> asserted and deasserted before it is probed.
> 
> Signed-off-by: Steven Lee <steven_lee@aspeedtech.com>
> ---
>  drivers/mmc/host/sdhci-of-aspeed.c | 49 ++++++++++++++++++++++++------
>  1 file changed, 40 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of-aspeed.c
> index 4979f98ffb52..8ef06f32abff 100644
> --- a/drivers/mmc/host/sdhci-of-aspeed.c
> +++ b/drivers/mmc/host/sdhci-of-aspeed.c
[...]
> @@ -533,11 +545,22 @@ static struct platform_driver aspeed_sdhci_driver = {
>  	.remove		= aspeed_sdhci_remove,
>  };
>  
> +static const struct of_device_id aspeed_sdc_of_match[] = {
> +	{ .compatible = "aspeed,ast2400-sd-controller", },
> +	{ .compatible = "aspeed,ast2500-sd-controller", },
> +	{ .compatible = "aspeed,ast2600-sd-controller", .data = &ast2600_sdc_info},
> +	{ }
> +};
> +
> +MODULE_DEVICE_TABLE(of, aspeed_sdc_of_match);
> +
>  static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  {
>  	struct device_node *parent, *child;
>  	struct aspeed_sdc *sdc;
> +	const struct of_device_id *match = NULL;
> +	const struct aspeed_sdc_info *info = NULL;

There is no need to initialize these variables to NULL, see below:

>  	int ret;
>  
>  	sdc = devm_kzalloc(&pdev->dev, sizeof(*sdc), GFP_KERNEL);
> @@ -546,6 +569,23 @@ static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  	spin_lock_init(&sdc->lock);
>  
> +	match = of_match_device(aspeed_sdc_of_match, &pdev->dev);

match is set unconditionally before it is used,

> +	if (!match)
> +		return -ENODEV;
> +
> +	if (match->data)
> +		info = match->data;

and info could be set unconditionally as well:

	info = match->data;

> +	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?

> +				reset_control_assert(sdc->rst);
> +				reset_control_deassert(sdc->rst);

Is there no need for delays between assertion and deassertion or after
the reset is deasserted?

> +			}
> +		}
> +	}
> +
>  	sdc->clk = devm_clk_get(&pdev->dev, NULL);
>  	if (IS_ERR(sdc->clk))
>  		return PTR_ERR(sdc->clk);

In general, I would assert/deassert the reset only after all resources
are successfully acquired. This might avoid unnecessary resets in case
of probe deferrals.

regards
Philipp

WARNING: multiple messages have this Message-ID (diff)
From: Philipp Zabel <p.zabel@pengutronix.de>
To: Steven Lee <steven_lee@aspeedtech.com>
Cc: Andrew Jeffery <andrew@aj.id.au>,
	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>,
	"open list:ASPEED SD/MMC DRIVER" <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>,
	Hongweiz@ami.com, ryan_chen@aspeedtech.com,
	chin-ting_kuo@aspeedtech.com
Subject: Re: [PATCH v3 5/5] mmc: sdhci-of-aspeed: Assert/Deassert reset signal before probing eMMC
Date: Thu, 6 May 2021 12:24:58 +0200	[thread overview]
Message-ID: <20210506102458.GA20777@pengutronix.de> (raw)
In-Reply-To: <20210506100312.1638-6-steven_lee@aspeedtech.com>

Hi Steven,

On Thu, May 06, 2021 at 06:03:12PM +0800, Steven Lee wrote:
> For cleaning up the AST2600 eMMC controller, the reset signal should be
> asserted and deasserted before it is probed.
> 
> Signed-off-by: Steven Lee <steven_lee@aspeedtech.com>
> ---
>  drivers/mmc/host/sdhci-of-aspeed.c | 49 ++++++++++++++++++++++++------
>  1 file changed, 40 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of-aspeed.c
> index 4979f98ffb52..8ef06f32abff 100644
> --- a/drivers/mmc/host/sdhci-of-aspeed.c
> +++ b/drivers/mmc/host/sdhci-of-aspeed.c
[...]
> @@ -533,11 +545,22 @@ static struct platform_driver aspeed_sdhci_driver = {
>  	.remove		= aspeed_sdhci_remove,
>  };
>  
> +static const struct of_device_id aspeed_sdc_of_match[] = {
> +	{ .compatible = "aspeed,ast2400-sd-controller", },
> +	{ .compatible = "aspeed,ast2500-sd-controller", },
> +	{ .compatible = "aspeed,ast2600-sd-controller", .data = &ast2600_sdc_info},
> +	{ }
> +};
> +
> +MODULE_DEVICE_TABLE(of, aspeed_sdc_of_match);
> +
>  static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  {
>  	struct device_node *parent, *child;
>  	struct aspeed_sdc *sdc;
> +	const struct of_device_id *match = NULL;
> +	const struct aspeed_sdc_info *info = NULL;

There is no need to initialize these variables to NULL, see below:

>  	int ret;
>  
>  	sdc = devm_kzalloc(&pdev->dev, sizeof(*sdc), GFP_KERNEL);
> @@ -546,6 +569,23 @@ static int aspeed_sdc_probe(struct platform_device *pdev)
>  
>  	spin_lock_init(&sdc->lock);
>  
> +	match = of_match_device(aspeed_sdc_of_match, &pdev->dev);

match is set unconditionally before it is used,

> +	if (!match)
> +		return -ENODEV;
> +
> +	if (match->data)
> +		info = match->data;

and info could be set unconditionally as well:

	info = match->data;

> +	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?

> +				reset_control_assert(sdc->rst);
> +				reset_control_deassert(sdc->rst);

Is there no need for delays between assertion and deassertion or after
the reset is deasserted?

> +			}
> +		}
> +	}
> +
>  	sdc->clk = devm_clk_get(&pdev->dev, NULL);
>  	if (IS_ERR(sdc->clk))
>  		return PTR_ERR(sdc->clk);

In general, I would assert/deassert the reset only after all resources
are successfully acquired. This might avoid unnecessary resets in case
of probe deferrals.

regards
Philipp

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-05-06 10:25 UTC|newest]

Thread overview: 84+ 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 ` Steven Lee
2021-05-06 10:03 ` 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-06 10:03   ` Steven Lee
2021-05-06 10:03   ` Steven Lee
2021-05-07  1:13   ` Rob Herring
2021-05-07  1:13     ` Rob Herring
2021-05-07  1:13     ` Rob Herring
2021-05-07  3:13     ` Steven Lee
2021-05-07  3:13       ` Steven Lee
2021-05-07  3:13       ` Steven Lee
2021-05-07 17:21       ` Rob Herring
2021-05-07 17:21         ` Rob Herring
2021-05-07 17:21         ` Rob Herring
2021-05-10  2:32         ` Steven Lee
2021-05-10  2:32           ` Steven Lee
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-06 10:03   ` Steven Lee
2021-05-06 10:03   ` Steven Lee
2021-05-07  1:40   ` Andrew Jeffery
2021-05-07  1:40     ` Andrew Jeffery
2021-05-07  1:40     ` Andrew Jeffery
2021-05-07  3:30     ` Steven Lee
2021-05-07  3:30       ` Steven Lee
2021-05-07  3:30       ` Steven Lee
2021-05-07  3:42       ` Andrew Jeffery
2021-05-07  3:42         ` Andrew Jeffery
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-06 10:03   ` Steven Lee
2021-05-06 10:03   ` Steven Lee
2021-05-07  1:34   ` Andrew Jeffery
2021-05-07  1:34     ` Andrew Jeffery
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-06 10:03   ` Steven Lee
2021-05-06 10:03   ` Steven Lee
2021-05-07  2:13   ` Andrew Jeffery
2021-05-07  2:13     ` Andrew Jeffery
2021-05-07  2:13     ` Andrew Jeffery
2021-05-07  6:59     ` Steven Lee
2021-05-07  6:59       ` Steven Lee
2021-05-07  6:59       ` Steven Lee
2021-05-07  7:07       ` Andrew Jeffery
2021-05-07  7:07         ` Andrew Jeffery
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:03   ` Steven Lee
2021-05-06 10:03   ` Steven Lee
2021-05-06 10:24   ` Philipp Zabel [this message]
2021-05-06 10:24     ` Philipp Zabel
2021-05-06 10:24     ` Philipp Zabel
2021-05-07  1:32     ` Andrew Jeffery
2021-05-07  1:32       ` Andrew Jeffery
2021-05-07  1:32       ` Andrew Jeffery
2021-05-07  6:24       ` Steven Lee
2021-05-07  6:24         ` Steven Lee
2021-05-07  6:24         ` Steven Lee
2021-05-07  7:36         ` Andrew Jeffery
2021-05-07  7:36           ` Andrew Jeffery
2021-05-07  7:36           ` Andrew Jeffery
2021-05-10  6:03           ` Steven Lee
2021-05-10  6:03             ` Steven Lee
2021-05-10  6:03             ` Steven Lee
2021-05-13  0:42             ` Andrew Jeffery
2021-05-13  0:42               ` Andrew Jeffery
2021-05-13  0:42               ` Andrew Jeffery
2021-05-14  2:09               ` Steven Lee
2021-05-14  2:09                 ` Steven Lee
2021-05-14  2:09                 ` Steven Lee
2021-05-14  2:37                 ` Andrew Jeffery
2021-05-14  2:37                   ` Andrew Jeffery
2021-05-14  2:37                   ` Andrew Jeffery
2021-05-19 10:57                   ` Steven Lee
2021-05-19 10:57                     ` Steven Lee
2021-05-19 10:57                     ` Steven Lee
2021-05-19 23:09                     ` Andrew Jeffery
2021-05-19 23:09                       ` Andrew Jeffery
2021-05-19 23:09                       ` Andrew Jeffery
2021-05-07  6:02     ` Steven Lee
2021-05-07  6:02       ` Steven Lee
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=20210506102458.GA20777@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=Hongweiz@ami.com \
    --cc=adrian.hunter@intel.com \
    --cc=andrew@aj.id.au \
    --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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.