[PATCH] mmci: fixup broken_blockend variant patch v2
From: Linus Walleij <hidden>
Date: 2011-01-18 15:01:48
2011/1/17 Rabin Vincent [off-list ref]:
On Mon, Jan 17, 2011 at 21:26, Linus Walleijquoted
The intention is to turn it off for HW which we know is broken, (has broken_blocken set true) which is what happens above.Right, but don't you already remove the place where it was being set? | - ? ? ? mask = MCI_IRQENABLE; | - ? ? ? /* Don't use the datablockend flag if it's broken */ | - ? ? ? if (variant->broken_blockend) | - ? ? ? ? ? ? ? mask &= ~MCI_DATABLOCKEND; | - | - ? ? ? writel(mask, host->base + MMCIMASK0); | + ? ? ? writel(MCI_IRQENABLE, host->base + MMCIMASK0); | | ? ? ? ?amba_set_drvdata(dev, mmc); | | diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h | index df06f01..7ac8c4d 100644 | --- a/drivers/mmc/host/mmci.h | +++ b/drivers/mmc/host/mmci.h | @@ -137,7 +137,7 @@ | ?#define MCI_IRQENABLE ?\ | ? ? ? ?(MCI_CMDCRCFAILMASK|MCI_DATACRCFAILMASK|MCI_CMDTIMEOUTMASK| ? ? \ | ? ? ? ?MCI_DATATIMEOUTMASK|MCI_TXUNDERRUNMASK|MCI_RXOVERRUNMASK| ? ? ? \ | - ? ? ? MCI_CMDRESPENDMASK|MCI_CMDSENTMASK|MCI_DATABLOCKENDMASK) | + ? ? ? MCI_CMDRESPENDMASK|MCI_CMDSENTMASK)
Um, this shows I should really split the patch, yes MCI_DATABLOCKENDMASK
is removed as set by default, then added back depending on whether the
.broken_blockend flag is set or not.
In the code quoted earlier actually:
writel(datactrl, base + MMCIDATACTRL);
- writel(readl(base + MMCIMASK0)& ~MCI_DATAENDMASK, base + MMCIMASK0);
- mmci_set_mask1(host, irqmask);
+ irqmask0 = readl(base + MMCIMASK0);
+ if (variant->broken_blockend)
+ irqmask0&= ~MCI_DATABLOCKENDMASK;
+ else
+ irqmask0 |= MCI_DATABLOCKENDMASK;
+ irqmask0&= ~MCI_DATAENDMASK;
+ writel(irqmask0, base + MMCIMASK0);
+ mmci_set_mask1(host, irqmask1);
Sorry for the confusion...
Yours,
Linus Walleij