Hi Andrew

Thank you for your comment.

>>  #define ack_mmc_irqs(host, i) \
>>      do { \
>> -            u32 mask;\
>> -            mask  = sd_ctrl_read32((host), CTL_STATUS); \
>> -            mask &= ~((i) & TMIO_MASK_IRQ); \
>> -            sd_ctrl_write32((host), CTL_STATUS, mask); \
>> +            sd_ctrl_write32((host), CTL_STATUS, ~(i)); \
>>      } while (0)
> 
> Can we have a better changelog please?
> 
> What was wrong with the old code?
> 
> How does the patch fix it?
> 
> What are the user-visible runtime effects of the bug?
> 
> (It looks like that was a pretty gross bug - how did it pass testing??)
Example
 - CMD53(Single block read / Received data size : 64Byte)

 1) Send CMD53
 2) Receive "CMD53 response"
 3) Call tmio_mmc_cmd_irq(host, status);
-- original code ----------------------------------------------------
 #define ack_mmc_irqs(host, i) \
        do { \
                u32 mask;\
                mask  = sd_ctrl_read32((host), CTL_STATUS); \
        < case 1 >
                mask &= ~((i) & TMIO_MASK_IRQ); \
        < case 2 >
                sd_ctrl_write32((host), CTL_STATUS, mask); \
        } while (0)
---------------------------------------------------------------------

TMIO_STAT_RXRDY status will be cleared by "sd_ctrl_write32((host), CTL_STATUS, 
mask);"
if TMIO_STAT_RXRDY becomes effective between "< case 1 >" and "< case 2 >".

This causes the phenomenon that a TMIO_STAT_RXRDY interrupt does not occur.
When received data are small, it rarely occurs.


Thanks,
Goda

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

Reply via email to