Re: [PATCH 1/3] mmc: dw_mmc: amend using error interrupt status

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

 



On 1 August 2012 06:00, Seungwon Jeon <tgih.jun@xxxxxxxxxxx> wrote:
> RINTSTS status includes masked interrupts as well as unmasked.
> data_status and cmd_status are set by value of RINTSTS in interrupt handler
> and tasklet finally uses it to decide whether error is happened or not.
> In addition, MINTSTS status is used for setting data_status in PIO.
> Masked error interrupt will not be handled and that status can be considered
> non-error case.
>
> Signed-off-by: Seungwon Jeon <tgih.jun@xxxxxxxxxxx>
> ---
>  drivers/mmc/host/dw_mmc.c |   11 +++++------
>  1 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 72dc3cd..7baed45 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -1547,12 +1547,11 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)
>  static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>  {
>         struct dw_mci *host = dev_id;
> -       u32 status, pending;
> +       u32 pending;
>         unsigned int pass_count = 0;
>         int i;
>
>         do {
> -               status = mci_readl(host, RINTSTS);
>                 pending = mci_readl(host, MINTSTS); /* read-only mask reg */
>
>                 /*
> @@ -1570,7 +1569,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>
>                 if (pending & DW_MCI_CMD_ERROR_FLAGS) {
>                         mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
> -                       host->cmd_status = status;
> +                       host->cmd_status = pending;
>                         smp_wmb();
>                         set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
>                 }
> @@ -1578,7 +1577,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>                 if (pending & DW_MCI_DATA_ERROR_FLAGS) {
>                         /* if there is an error report DATA_ERROR */
>                         mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
> -                       host->data_status = status;
> +                       host->data_status = pending;
>                         smp_wmb();
>                         set_bit(EVENT_DATA_ERROR, &host->pending_events);
>                         if (!(pending & (SDMMC_INT_DTO | SDMMC_INT_DCRC |
> @@ -1589,7 +1588,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>                 if (pending & SDMMC_INT_DATA_OVER) {
>                         mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);
>                         if (!host->data_status)
> -                               host->data_status = status;
> +                               host->data_status = pending;
>                         smp_wmb();
>                         if (host->dir_status == DW_MCI_RECV_STATUS) {
>                                 if (host->sg != NULL)
> @@ -1613,7 +1612,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
>
>                 if (pending & SDMMC_INT_CMD_DONE) {
>                         mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);
> -                       dw_mci_cmd_interrupt(host, status);
> +                       dw_mci_cmd_interrupt(host, pending);
>                 }
>
>                 if (pending & SDMMC_INT_CD) {
> --
Looks good to me
Reviewed By:- Girish K S <girish.shivananjappa@xxxxxxxxxx>

> 1.7.0.4
>
>
> --
> 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
--
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