Message ID | 1485473846-24537-5-git-send-email-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017/1/27 7:37, Gerd Hoffmann wrote: > Factor out common code. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > drivers/mmc/host/bcm2835.c | 30 ++++++++++++------------------ > 1 file changed, 12 insertions(+), 18 deletions(-) > > diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c > index 6f9fb12..d25b85a 100644 > --- a/drivers/mmc/host/bcm2835.c > +++ b/drivers/mmc/host/bcm2835.c > @@ -951,6 +951,16 @@ static void bcm2835_timeout(unsigned long data) > spin_unlock_irqrestore(&host->lock, flags); > } > > +static void bcm2835_check_data_error(struct bcm2835_host *host, u32 intmask) > +{ > + if (!host->data) > + return; > + if (intmask & (SDHSTS_CRC16_ERROR | SDHSTS_FIFO_ERROR)) > + host->data->error = -EILSEQ; > + if (intmask & SDHSTS_REW_TIME_OUT) > + host->data->error = -ETIMEDOUT; > +} > + > static void bcm2835_busy_irq(struct bcm2835_host *host, u32 intmask) > { > struct device *dev = &host->pdev->dev; > @@ -1007,15 +1017,7 @@ static void bcm2835_data_irq(struct bcm2835_host *host, u32 intmask) > if (!host->data) > return; > remove this check, !host->data, as well. > - if (intmask & (SDHSTS_CRC16_ERROR | > - SDHSTS_FIFO_ERROR | > - SDHSTS_REW_TIME_OUT)) { > - if (intmask & (SDHSTS_CRC16_ERROR | > - SDHSTS_FIFO_ERROR)) > - host->data->error = -EILSEQ; > - else > - host->data->error = -ETIMEDOUT; > - } > + bcm2835_check_data_error(host, intmask); > > if (host->data->error) { > bcm2835_finish_data(host); > @@ -1043,15 +1045,7 @@ static void bcm2835_block_irq(struct bcm2835_host *host, u32 intmask) > return; > } > > - if (intmask & (SDHSTS_CRC16_ERROR | > - SDHSTS_FIFO_ERROR | > - SDHSTS_REW_TIME_OUT)) { > - if (intmask & (SDHSTS_CRC16_ERROR | > - SDHSTS_FIFO_ERROR)) > - host->data->error = -EILSEQ; > - else > - host->data->error = -ETIMEDOUT; > - } > + bcm2835_check_data_error(host, intmask); > > if (!host->dma_desc) { > WARN_ON(!host->blocks); >
Hi, > > @@ -1007,15 +1017,7 @@ static void bcm2835_data_irq(struct bcm2835_host *host, u32 intmask) > > if (!host->data) > > return; > > > > remove this check, !host->data, as well. There is a comment in the code saying it is needed, here is more context: static void bcm2835_data_irq(struct bcm2835_host *host, u32 intmask) { /* There are no dedicated data/space available interrupt * status bits, so it is necessary to use the single shared * data/space available FIFO status bits. It is therefore not * an error to get here when there is no data transfer in * progress. */ if (!host->data) return; bcm2835_check_data_error(host, intmask); cheers, Gerd
diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c index 6f9fb12..d25b85a 100644 --- a/drivers/mmc/host/bcm2835.c +++ b/drivers/mmc/host/bcm2835.c @@ -951,6 +951,16 @@ static void bcm2835_timeout(unsigned long data) spin_unlock_irqrestore(&host->lock, flags); } +static void bcm2835_check_data_error(struct bcm2835_host *host, u32 intmask) +{ + if (!host->data) + return; + if (intmask & (SDHSTS_CRC16_ERROR | SDHSTS_FIFO_ERROR)) + host->data->error = -EILSEQ; + if (intmask & SDHSTS_REW_TIME_OUT) + host->data->error = -ETIMEDOUT; +} + static void bcm2835_busy_irq(struct bcm2835_host *host, u32 intmask) { struct device *dev = &host->pdev->dev; @@ -1007,15 +1017,7 @@ static void bcm2835_data_irq(struct bcm2835_host *host, u32 intmask) if (!host->data) return; - if (intmask & (SDHSTS_CRC16_ERROR | - SDHSTS_FIFO_ERROR | - SDHSTS_REW_TIME_OUT)) { - if (intmask & (SDHSTS_CRC16_ERROR | - SDHSTS_FIFO_ERROR)) - host->data->error = -EILSEQ; - else - host->data->error = -ETIMEDOUT; - } + bcm2835_check_data_error(host, intmask); if (host->data->error) { bcm2835_finish_data(host); @@ -1043,15 +1045,7 @@ static void bcm2835_block_irq(struct bcm2835_host *host, u32 intmask) return; } - if (intmask & (SDHSTS_CRC16_ERROR | - SDHSTS_FIFO_ERROR | - SDHSTS_REW_TIME_OUT)) { - if (intmask & (SDHSTS_CRC16_ERROR | - SDHSTS_FIFO_ERROR)) - host->data->error = -EILSEQ; - else - host->data->error = -ETIMEDOUT; - } + bcm2835_check_data_error(host, intmask); if (!host->dma_desc) { WARN_ON(!host->blocks);
Factor out common code. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/mmc/host/bcm2835.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-)