All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Zach Brown <zach.brown@ni.com>
Cc: robh+dt@kernel.org, ulf.hansson@linaro.org, mark.rutland@arm.com,
	linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, michal.simek@xilinx.com,
	soren.brinkmann@xilinx.com, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] sdhci-of-arasan: Add quirk and device tree parameter to fake CD bit
Date: Thu, 25 Aug 2016 11:50:07 +0300	[thread overview]
Message-ID: <38d4d636-dc98-cc3b-3397-75924200ef9f@intel.com> (raw)
In-Reply-To: <1472080984-17373-2-git-send-email-zach.brown@ni.com>

On 25/08/16 02:23, Zach Brown wrote:
> The sdhci controller on xilinx zynq devices will not function unless
> the cd bit is provided. http://www.xilinx.com/support/answers/61064.html
> In cases where it is impossible to provide the cd bit in hardware,
> setting the controller to test mode and then setting inserted to true
> will get the controller to function with out the cd bit.

with out -> without

> 
> The device property "fake-cd" will let the arasan driver know it needs
> to fake the cd bit for the controller inorder for the controller to

inorder -> in order

> function with a SD card that does not provide the CD bit.

Please use either 'cd' or 'CD' consistently.

> 
> Signed-off-by: Zach Brown <zach.brown@ni.com>
> ---
>  drivers/mmc/host/sdhci-of-arasan.c | 23 ++++++++++++++++++++++-
>  drivers/mmc/host/sdhci.h           |  4 ++++
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
> index e0f193f..a74bcf5 100644
> --- a/drivers/mmc/host/sdhci-of-arasan.c
> +++ b/drivers/mmc/host/sdhci-of-arasan.c
> @@ -26,6 +26,7 @@
>  #include <linux/phy/phy.h>
>  #include <linux/regmap.h>
>  #include "sdhci-pltfm.h"
> +#include <linux/of.h>
>  
>  #define SDHCI_ARASAN_CLK_CTRL_OFFSET	0x2c
>  #define SDHCI_ARASAN_VENDOR_REGISTER	0x78
> @@ -203,12 +204,26 @@ static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc,
>  	writel(vendor, host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER);
>  }
>  
> +void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
> +{
> +	u8 ctrl;
> +
> +	sdhci_reset(host, mask);
> +
> +	if (host->quirks2 & SDHCI_QUIRK2_NEED_FAKE_CD) {
> +		ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);

Is there a reason this is sdhci_readl instead of sdhci_readb

> +		ctrl |= SDHCI_CTRL_CD_TEST_INSERTED |
> +		SDHCI_CTRL_CD_TEST_ENABLE;

Please indent SDHCI_CTRL_CD_TEST_ENABLE

> +		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
> +	}
> +}
> +
>  static struct sdhci_ops sdhci_arasan_ops = {
>  	.set_clock = sdhci_arasan_set_clock,
>  	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
>  	.get_timeout_clock = sdhci_arasan_get_timeout_clock,
>  	.set_bus_width = sdhci_set_bus_width,
> -	.reset = sdhci_reset,
> +	.reset = sdhci_arasan_reset,
>  	.set_uhs_signaling = sdhci_set_uhs_signaling,
>  };
>  
> @@ -516,6 +531,12 @@ static int sdhci_arasan_probe(struct platform_device *pdev)
>  	}
>  
>  	sdhci_get_of_property(pdev);
> +
> +	if (of_get_property(pdev->dev.of_node, "fake-cd", NULL))
> +		host->quirks2 |= SDHCI_QUIRK2_NEED_FAKE_CD;

Please don't use a quirk bit for this.  Instead add a flag to, for example,
struct sdhci_arasan_data.

> +
> +	pltfm_host = sdhci_priv(host);
> +	pltfm_host->priv = sdhci_arasan;

These 2 lines don't belong.

>  	pltfm_host->clk = clk_xin;
>  
>  	sdhci_arasan_update_baseclkfreq(host);
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 0411c9f..ff3c8ba 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -84,6 +84,8 @@
>  #define   SDHCI_CTRL_ADMA32	0x10
>  #define   SDHCI_CTRL_ADMA64	0x18
>  #define   SDHCI_CTRL_8BITBUS	0x20
> +#define  SDHCI_CTRL_CD_TEST_INSERTED   0x40
> +#define  SDHCI_CTRL_CD_TEST_ENABLE     0x80

For the sake of neatness, let's make these a little more abbreviated, say:

	SDHCI_CTRL_CDTEST_INS
	SDHCI_CTRL_CDTEST_EN

>  
>  #define SDHCI_POWER_CONTROL	0x29
>  #define  SDHCI_POWER_ON		0x01
> @@ -422,6 +424,8 @@ struct sdhci_host {
>  #define SDHCI_QUIRK2_ACMD23_BROKEN			(1<<14)
>  /* Broken Clock divider zero in controller */
>  #define SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN		(1<<15)
> +/* Controller needs the cd bit faked */
> +#define SDHCI_QUIRK2_NEED_FAKE_CD (1<<16)
>  
>  	int irq;		/* Device IRQ */
>  	void __iomem *ioaddr;	/* Mapped address */
> 

WARNING: multiple messages have this Message-ID (diff)
From: Adrian Hunter <adrian.hunter@intel.com>
To: Zach Brown <zach.brown@ni.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	ulf.hansson@linaro.org, linux-mmc@vger.kernel.org,
	linux-kernel@vger.kernel.org, michal.simek@xilinx.com,
	robh+dt@kernel.org, linux-arm-kernel@lists.infradead.org,
	soren.brinkmann@xilinx.com
Subject: Re: [PATCH 2/2] sdhci-of-arasan: Add quirk and device tree parameter to fake CD bit
Date: Thu, 25 Aug 2016 11:50:07 +0300	[thread overview]
Message-ID: <38d4d636-dc98-cc3b-3397-75924200ef9f@intel.com> (raw)
In-Reply-To: <1472080984-17373-2-git-send-email-zach.brown@ni.com>

On 25/08/16 02:23, Zach Brown wrote:
> The sdhci controller on xilinx zynq devices will not function unless
> the cd bit is provided. http://www.xilinx.com/support/answers/61064.html
> In cases where it is impossible to provide the cd bit in hardware,
> setting the controller to test mode and then setting inserted to true
> will get the controller to function with out the cd bit.

with out -> without

> 
> The device property "fake-cd" will let the arasan driver know it needs
> to fake the cd bit for the controller inorder for the controller to

inorder -> in order

> function with a SD card that does not provide the CD bit.

Please use either 'cd' or 'CD' consistently.

> 
> Signed-off-by: Zach Brown <zach.brown@ni.com>
> ---
>  drivers/mmc/host/sdhci-of-arasan.c | 23 ++++++++++++++++++++++-
>  drivers/mmc/host/sdhci.h           |  4 ++++
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
> index e0f193f..a74bcf5 100644
> --- a/drivers/mmc/host/sdhci-of-arasan.c
> +++ b/drivers/mmc/host/sdhci-of-arasan.c
> @@ -26,6 +26,7 @@
>  #include <linux/phy/phy.h>
>  #include <linux/regmap.h>
>  #include "sdhci-pltfm.h"
> +#include <linux/of.h>
>  
>  #define SDHCI_ARASAN_CLK_CTRL_OFFSET	0x2c
>  #define SDHCI_ARASAN_VENDOR_REGISTER	0x78
> @@ -203,12 +204,26 @@ static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc,
>  	writel(vendor, host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER);
>  }
>  
> +void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
> +{
> +	u8 ctrl;
> +
> +	sdhci_reset(host, mask);
> +
> +	if (host->quirks2 & SDHCI_QUIRK2_NEED_FAKE_CD) {
> +		ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);

Is there a reason this is sdhci_readl instead of sdhci_readb

> +		ctrl |= SDHCI_CTRL_CD_TEST_INSERTED |
> +		SDHCI_CTRL_CD_TEST_ENABLE;

Please indent SDHCI_CTRL_CD_TEST_ENABLE

> +		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
> +	}
> +}
> +
>  static struct sdhci_ops sdhci_arasan_ops = {
>  	.set_clock = sdhci_arasan_set_clock,
>  	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
>  	.get_timeout_clock = sdhci_arasan_get_timeout_clock,
>  	.set_bus_width = sdhci_set_bus_width,
> -	.reset = sdhci_reset,
> +	.reset = sdhci_arasan_reset,
>  	.set_uhs_signaling = sdhci_set_uhs_signaling,
>  };
>  
> @@ -516,6 +531,12 @@ static int sdhci_arasan_probe(struct platform_device *pdev)
>  	}
>  
>  	sdhci_get_of_property(pdev);
> +
> +	if (of_get_property(pdev->dev.of_node, "fake-cd", NULL))
> +		host->quirks2 |= SDHCI_QUIRK2_NEED_FAKE_CD;

Please don't use a quirk bit for this.  Instead add a flag to, for example,
struct sdhci_arasan_data.

> +
> +	pltfm_host = sdhci_priv(host);
> +	pltfm_host->priv = sdhci_arasan;

These 2 lines don't belong.

>  	pltfm_host->clk = clk_xin;
>  
>  	sdhci_arasan_update_baseclkfreq(host);
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 0411c9f..ff3c8ba 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -84,6 +84,8 @@
>  #define   SDHCI_CTRL_ADMA32	0x10
>  #define   SDHCI_CTRL_ADMA64	0x18
>  #define   SDHCI_CTRL_8BITBUS	0x20
> +#define  SDHCI_CTRL_CD_TEST_INSERTED   0x40
> +#define  SDHCI_CTRL_CD_TEST_ENABLE     0x80

For the sake of neatness, let's make these a little more abbreviated, say:

	SDHCI_CTRL_CDTEST_INS
	SDHCI_CTRL_CDTEST_EN

>  
>  #define SDHCI_POWER_CONTROL	0x29
>  #define  SDHCI_POWER_ON		0x01
> @@ -422,6 +424,8 @@ struct sdhci_host {
>  #define SDHCI_QUIRK2_ACMD23_BROKEN			(1<<14)
>  /* Broken Clock divider zero in controller */
>  #define SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN		(1<<15)
> +/* Controller needs the cd bit faked */
> +#define SDHCI_QUIRK2_NEED_FAKE_CD (1<<16)
>  
>  	int irq;		/* Device IRQ */
>  	void __iomem *ioaddr;	/* Mapped address */
> 

WARNING: multiple messages have this Message-ID (diff)
From: adrian.hunter@intel.com (Adrian Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] sdhci-of-arasan: Add quirk and device tree parameter to fake CD bit
Date: Thu, 25 Aug 2016 11:50:07 +0300	[thread overview]
Message-ID: <38d4d636-dc98-cc3b-3397-75924200ef9f@intel.com> (raw)
In-Reply-To: <1472080984-17373-2-git-send-email-zach.brown@ni.com>

On 25/08/16 02:23, Zach Brown wrote:
> The sdhci controller on xilinx zynq devices will not function unless
> the cd bit is provided. http://www.xilinx.com/support/answers/61064.html
> In cases where it is impossible to provide the cd bit in hardware,
> setting the controller to test mode and then setting inserted to true
> will get the controller to function with out the cd bit.

with out -> without

> 
> The device property "fake-cd" will let the arasan driver know it needs
> to fake the cd bit for the controller inorder for the controller to

inorder -> in order

> function with a SD card that does not provide the CD bit.

Please use either 'cd' or 'CD' consistently.

> 
> Signed-off-by: Zach Brown <zach.brown@ni.com>
> ---
>  drivers/mmc/host/sdhci-of-arasan.c | 23 ++++++++++++++++++++++-
>  drivers/mmc/host/sdhci.h           |  4 ++++
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
> index e0f193f..a74bcf5 100644
> --- a/drivers/mmc/host/sdhci-of-arasan.c
> +++ b/drivers/mmc/host/sdhci-of-arasan.c
> @@ -26,6 +26,7 @@
>  #include <linux/phy/phy.h>
>  #include <linux/regmap.h>
>  #include "sdhci-pltfm.h"
> +#include <linux/of.h>
>  
>  #define SDHCI_ARASAN_CLK_CTRL_OFFSET	0x2c
>  #define SDHCI_ARASAN_VENDOR_REGISTER	0x78
> @@ -203,12 +204,26 @@ static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc,
>  	writel(vendor, host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER);
>  }
>  
> +void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
> +{
> +	u8 ctrl;
> +
> +	sdhci_reset(host, mask);
> +
> +	if (host->quirks2 & SDHCI_QUIRK2_NEED_FAKE_CD) {
> +		ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);

Is there a reason this is sdhci_readl instead of sdhci_readb

> +		ctrl |= SDHCI_CTRL_CD_TEST_INSERTED |
> +		SDHCI_CTRL_CD_TEST_ENABLE;

Please indent SDHCI_CTRL_CD_TEST_ENABLE

> +		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
> +	}
> +}
> +
>  static struct sdhci_ops sdhci_arasan_ops = {
>  	.set_clock = sdhci_arasan_set_clock,
>  	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
>  	.get_timeout_clock = sdhci_arasan_get_timeout_clock,
>  	.set_bus_width = sdhci_set_bus_width,
> -	.reset = sdhci_reset,
> +	.reset = sdhci_arasan_reset,
>  	.set_uhs_signaling = sdhci_set_uhs_signaling,
>  };
>  
> @@ -516,6 +531,12 @@ static int sdhci_arasan_probe(struct platform_device *pdev)
>  	}
>  
>  	sdhci_get_of_property(pdev);
> +
> +	if (of_get_property(pdev->dev.of_node, "fake-cd", NULL))
> +		host->quirks2 |= SDHCI_QUIRK2_NEED_FAKE_CD;

Please don't use a quirk bit for this.  Instead add a flag to, for example,
struct sdhci_arasan_data.

> +
> +	pltfm_host = sdhci_priv(host);
> +	pltfm_host->priv = sdhci_arasan;

These 2 lines don't belong.

>  	pltfm_host->clk = clk_xin;
>  
>  	sdhci_arasan_update_baseclkfreq(host);
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 0411c9f..ff3c8ba 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -84,6 +84,8 @@
>  #define   SDHCI_CTRL_ADMA32	0x10
>  #define   SDHCI_CTRL_ADMA64	0x18
>  #define   SDHCI_CTRL_8BITBUS	0x20
> +#define  SDHCI_CTRL_CD_TEST_INSERTED   0x40
> +#define  SDHCI_CTRL_CD_TEST_ENABLE     0x80

For the sake of neatness, let's make these a little more abbreviated, say:

	SDHCI_CTRL_CDTEST_INS
	SDHCI_CTRL_CDTEST_EN

>  
>  #define SDHCI_POWER_CONTROL	0x29
>  #define  SDHCI_POWER_ON		0x01
> @@ -422,6 +424,8 @@ struct sdhci_host {
>  #define SDHCI_QUIRK2_ACMD23_BROKEN			(1<<14)
>  /* Broken Clock divider zero in controller */
>  #define SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN		(1<<15)
> +/* Controller needs the cd bit faked */
> +#define SDHCI_QUIRK2_NEED_FAKE_CD (1<<16)
>  
>  	int irq;		/* Device IRQ */
>  	void __iomem *ioaddr;	/* Mapped address */
> 

  parent reply	other threads:[~2016-08-25  8:56 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-24 23:23 [PATCH 1/2] sdhci-of-arasan: Add quirk and device tree parameter to fake CD bit Zach Brown
2016-08-24 23:23 ` Zach Brown
2016-08-24 23:23 ` [PATCH 2/2] " Zach Brown
2016-08-24 23:23   ` Zach Brown
2016-08-24 23:23   ` Zach Brown
2016-08-25  1:08   ` Shawn Lin
2016-08-25  1:08     ` Shawn Lin
2016-08-25  6:56   ` kbuild test robot
2016-08-25  6:56     ` kbuild test robot
2016-08-25  6:56     ` kbuild test robot
2016-08-25  8:50   ` Adrian Hunter [this message]
2016-08-25  8:50     ` Adrian Hunter
2016-08-25  8:50     ` Adrian Hunter
2016-08-25 10:37   ` Lars-Peter Clausen
2016-08-25 10:37     ` Lars-Peter Clausen
2016-08-25 10:37     ` Lars-Peter Clausen
2016-08-25 10:56 ` [PATCH 1/2] " Mark Rutland
2016-08-25 10:56   ` Mark Rutland
2016-08-25 17:15   ` Zach Brown
2016-08-25 17:15     ` Zach Brown
2016-08-25 17:15     ` Zach Brown
2016-08-25 18:10     ` Mark Rutland
2016-08-25 18:10       ` Mark Rutland
2016-08-25 18:10       ` Mark Rutland
2016-08-25 18:26       ` Zach Brown
2016-08-25 18:26         ` Zach Brown
2016-08-25 18:26         ` Zach Brown
2016-08-25 18:28         ` Mark Rutland
2016-08-25 18:28           ` Mark Rutland
2016-08-25 18:28           ` Mark Rutland
2016-08-25 20:46           ` Zach Brown
2016-08-25 20:46             ` Zach Brown
2016-08-25 20:46             ` Zach Brown
2016-08-26  7:42             ` Ulf Hansson
2016-08-26  7:42               ` Ulf Hansson
2016-08-26 22:29               ` Zach Brown
2016-08-26 22:29                 ` Zach Brown
2016-08-26 22:29                 ` Zach Brown
2016-08-29 11:21                 ` Ulf Hansson
2016-08-29 11:21                   ` Ulf Hansson
2016-08-25 15:10 ` Sören Brinkmann
2016-08-25 15:10   ` Sören Brinkmann
2016-08-25 15:10   ` Sören Brinkmann
2016-08-25 15:23   ` Lars-Peter Clausen
2016-08-25 15:23     ` Lars-Peter Clausen
2016-08-25 15:23     ` Lars-Peter Clausen
2016-08-25 15:29     ` Sören Brinkmann
2016-08-25 15:29       ` Sören Brinkmann
2016-08-25 15:29       ` Sören Brinkmann
2016-08-25 15:50       ` Lars-Peter Clausen
2016-08-25 15:50         ` Lars-Peter Clausen
2016-08-25 15:50         ` Lars-Peter Clausen

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=38d4d636-dc98-cc3b-3397-75924200ef9f@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=michal.simek@xilinx.com \
    --cc=robh+dt@kernel.org \
    --cc=soren.brinkmann@xilinx.com \
    --cc=ulf.hansson@linaro.org \
    --cc=zach.brown@ni.com \
    /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.