On Wed, Sep 19, 2012 at 01:05:13PM +0800, [email protected] wrote:
> From: Haijun Zhang <[email protected]>
> 
> A-003500: False ADMA Error might be reported when ADMA is used for
> multiple block read command with Stop at Block Gap. If PROCTL[SABGREQ]
> is set when the particular block's data is received by the System side
> logic before entire block(with CRC) data is received by the SD side logic,
> and also if ADMA descriptor line is fetched at the same time,
> then DMA engine might report false ADMA error. eSDHC might not be able
> to Continue(PROCTL[CREQ]=1)after Stop at Block Gap.
> This issue will impact the eSDHC IP VVN2.3.
> 
> 
> Signed-off-by: Haijun Zhang <[email protected]>
> Signed-off-by: Jerry Huang <[email protected]>
> CC: Anton Vorontsov <[email protected]>
> ---
> changes for v2:
>       - Invert the condition of the if statement in function workground

Hm.

[...]
> +static void esdhci_of_adma_workaround(struct sdhci_host *host, u32 intmask)
> +{
> +     u32 tmp = in_be32(host->ioaddr + SDHCI_SLOT_INT_STATUS);
> +
> +     tmp = (tmp & SDHCI_VENDOR_VER_MASK) >> SDHCI_VENDOR_VER_SHIFT;
> +     if ((intmask & SDHCI_INT_DATA_END) &&
> +             (intmask & SDHCI_INT_BLK_GAP) &&
> +             (tmp == VENDOR_V_23)) {

I really don't see it inverted. :-)

What I meant was this:

static void esdhci_of_adma_workaround(struct sdhci_host *host, u32 intmask)
{
        u32 vendor;
        bool applicable;
        dma_addr_t dmastart;
        dma_addr_t dmanow;

        vendor = in_be32(host->ioaddr + SDHCI_SLOT_INT_STATUS);
        vendor = (vendor & SDHCI_VENDOR_VER_MASK) >> SDHCI_VENDOR_VER_SHIFT;

        applicable = intmask & SDHCI_INT_DATA_END &&
                     intmask & SDHCI_INT_BLK_GAP &&
                     vendor == VENDOR_V_23;
        if (!applicable)
                return;

        host->data->error = 0;
        dmastart = sg_dma_address(host->data->sg);
        dmanow = dmastart + host->data->bytes_xfered;
        ...
        ...
}

This is human-readable and there's no additional indentation.

Thanks,

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

Reply via email to