* [U-Boot] [RFC, PATCH] mmc: prepare SDHCI_HOST_CONTROL for SDMA operation
@ 2012-11-07 21:46 Rommel G Custodio
2012-11-08 1:37 ` Jaehoon Chung
0 siblings, 1 reply; 2+ messages in thread
From: Rommel G Custodio @ 2012-11-07 21:46 UTC (permalink / raw)
To: u-boot
modification for commit 804c7f422169212e92530e1ddaf74bf1ca9ebfa1
The original patch contained a bug.
Using a char with sdhci_readl/sdhci_writel operation.
The adjacent bytes to SDHCI_HOST_CONTROL (specially SDHCI_POWER_CONTROL)
get mangled and can result in the controller entering an unstable state.
This patch also moves the process inside sdhci_init().
Signed-off-by: Rommel G Custodio <sessyargc@gmail.com>
---
drivers/mmc/sdhci.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 7845f87..fae2169 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -82,13 +82,6 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
unsigned int start_addr)
{
unsigned int stat, rdy, mask, timeout, block = 0;
-#ifdef CONFIG_MMC_SDMA
- unsigned char ctrl;
- ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
- ctrl &= ~SDHCI_CTRL_DMA_MASK;
- ctrl |= SDHCI_CTRL_SDMA;
- sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
-#endif
timeout = 1000000;
rdy = SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_AVAIL;
@@ -386,6 +379,14 @@ int sdhci_init(struct mmc *mmc)
{
struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
+#ifdef CONFIG_MMC_SDMA
+ unsigned int ctrl;
+ ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
+ ctrl &= ~SDHCI_CTRL_DMA_MASK;
+ ctrl |= SDHCI_CTRL_SDMA;
+ sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
+#endif
+
if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) && !aligned_buffer) {
aligned_buffer = memalign(8, 512*1024);
if (!aligned_buffer) {
--
1.8.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121108/44e83d25/attachment.pgp>
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [U-Boot] [RFC, PATCH] mmc: prepare SDHCI_HOST_CONTROL for SDMA operation
2012-11-07 21:46 [U-Boot] [RFC, PATCH] mmc: prepare SDHCI_HOST_CONTROL for SDMA operation Rommel G Custodio
@ 2012-11-08 1:37 ` Jaehoon Chung
0 siblings, 0 replies; 2+ messages in thread
From: Jaehoon Chung @ 2012-11-08 1:37 UTC (permalink / raw)
To: u-boot
Hi Rommel,
Looks good to me. Thank you.
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
On 11/08/2012 06:46 AM, Rommel G Custodio wrote:
> modification for commit 804c7f422169212e92530e1ddaf74bf1ca9ebfa1
>
> The original patch contained a bug.
> Using a char with sdhci_readl/sdhci_writel operation.
> The adjacent bytes to SDHCI_HOST_CONTROL (specially SDHCI_POWER_CONTROL)
> get mangled and can result in the controller entering an unstable state.
>
> This patch also moves the process inside sdhci_init().
>
> Signed-off-by: Rommel G Custodio <sessyargc@gmail.com>
> ---
> drivers/mmc/sdhci.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 7845f87..fae2169 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -82,13 +82,6 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
> unsigned int start_addr)
> {
> unsigned int stat, rdy, mask, timeout, block = 0;
> -#ifdef CONFIG_MMC_SDMA
> - unsigned char ctrl;
> - ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
> - ctrl &= ~SDHCI_CTRL_DMA_MASK;
> - ctrl |= SDHCI_CTRL_SDMA;
> - sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
> -#endif
>
> timeout = 1000000;
> rdy = SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_AVAIL;
> @@ -386,6 +379,14 @@ int sdhci_init(struct mmc *mmc)
> {
> struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
>
> +#ifdef CONFIG_MMC_SDMA
> + unsigned int ctrl;
> + ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
> + ctrl &= ~SDHCI_CTRL_DMA_MASK;
> + ctrl |= SDHCI_CTRL_SDMA;
> + sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
> +#endif
> +
> if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) && !aligned_buffer) {
> aligned_buffer = memalign(8, 512*1024);
> if (!aligned_buffer) {
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-11-08 1:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-07 21:46 [U-Boot] [RFC, PATCH] mmc: prepare SDHCI_HOST_CONTROL for SDMA operation Rommel G Custodio
2012-11-08 1:37 ` Jaehoon Chung
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).