Re: [PATCH 2/2] mmc: dw_mmc: make sure of clearing HLE interrupt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 28/11/12 10:26, Seungwon Jeon wrote:
> Even though HLE interrupt is enabled, there is no touch.
> This patch clears HLE interrupt which is not unhandled.

It's not entirely clear from this description what the patch is trying
to do. I presume from the patch you're trying to say something like:
"Even though the HLE interrupt is enabled, it isn't handled, so handle
the HLE interrupt by printing an error message."

According to the TRM though, in the section Error Handling (HLE is also
mentioned elsewhere):
>  Hardware locked error – Set when the DWC_mobile_storage cannot load a command issued by
> software. When software sets the start_cmd bit in the CMD register, the DWC_mobile_storage tries
> to load the command. If the command buffer is already filled with a command, this error is raised.
> The software then has to reload the command.

So it sounds like the last command should be reloaded (either on
interrupt or the interrupt status should be checked after starting a
command). Is this done elsewhere already?

Cheers
James

> 
> Signed-off-by: Seungwon Jeon <tgih.jun@xxxxxxxxxxx>
> ---
>  drivers/mmc/host/dw_mmc.c |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 6785d62..b6db0ae 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -1009,6 +1009,11 @@ static void dw_mci_tasklet_func(unsigned long priv)
>  	state = host->state;
>  	data = host->data;
>  
> +	if (host->cmd_status & SDMMC_INT_HLE) {
> +		dev_err(host->dev, "hardware locked write error\n");
> +		goto unlock;
> +	}
> +
>  	do {
>  		prev_state = state;
>  
> @@ -1577,6 +1582,12 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>  		if (!pending)
>  			break;
>  
> +		if (pending & SDMMC_INT_HLE) {
> +			mci_writel(host, RINTSTS, SDMMC_INT_HLE);
> +			host->cmd_status = pending;
> +			tasklet_schedule(&host->tasklet);
> +		}
> +
>  		if (pending & DW_MCI_CMD_ERROR_FLAGS) {
>  			mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
>  			host->cmd_status = pending;
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux