mbox series

[0/3] Add hardware unbusy interrupt support for dw_mmc

Message ID 1551238603-82412-1-git-send-email-shawn.lin@rock-chips.com (mailing list archive)
Headers show
Series Add hardware unbusy interrupt support for dw_mmc | expand

Message

Shawn Lin Feb. 27, 2019, 3:36 a.m. UTC
DesignWare MMC controler lacks proper hardware wait
busy support, so the software must check the busy
state if the following tranfser need use data line.
And dw_mci_wait_while_busy() now use busy check mostly
with host's lock hold, and we can't relinguish CPU
at this moment, which makes it rather painful when used
in low-end platform. To solve this, Rockchip invent
a new hardware unbusy interrupt module, which could
generate interrupt if the state machine runs from
busy state into idle state.



Shawn Lin (3):
  mmc: dw_mmc: Check busy state in dw_mci_request()
  mmc: dw_mmc: Add hardware unbusy interrupt support
  mmc: dw_mmc-rockchip: Enable hardware unbusy interrupt support

 drivers/mmc/host/dw_mmc-rockchip.c | 30 +++++++++++++++++++
 drivers/mmc/host/dw_mmc.c          | 60 +++++++++++++++++++++++++++++++++++++-
 drivers/mmc/host/dw_mmc.h          |  6 ++++
 3 files changed, 95 insertions(+), 1 deletion(-)

Comments

ziyuan March 7, 2019, 8:21 a.m. UTC | #1
Thanks for quickly work this out, it works fine by testing until now, 
and it perfactly make the system work better in single core platform.

Tested-by: Ziyuan Xu <xzy.xu@rock-chips.com>

On 2019/2/27 上午11:36, Shawn Lin wrote:
> DesignWare MMC controler lacks proper hardware wait
> busy support, so the software must check the busy
> state if the following tranfser need use data line.
> And dw_mci_wait_while_busy() now use busy check mostly
> with host's lock hold, and we can't relinguish CPU
> at this moment, which makes it rather painful when used
> in low-end platform. To solve this, Rockchip invent
> a new hardware unbusy interrupt module, which could
> generate interrupt if the state machine runs from
> busy state into idle state.
>
>
>
> Shawn Lin (3):
>    mmc: dw_mmc: Check busy state in dw_mci_request()
>    mmc: dw_mmc: Add hardware unbusy interrupt support
>    mmc: dw_mmc-rockchip: Enable hardware unbusy interrupt support
>
>   drivers/mmc/host/dw_mmc-rockchip.c | 30 +++++++++++++++++++
>   drivers/mmc/host/dw_mmc.c          | 60 +++++++++++++++++++++++++++++++++++++-
>   drivers/mmc/host/dw_mmc.h          |  6 ++++
>   3 files changed, 95 insertions(+), 1 deletion(-)
>
Shawn Lin March 8, 2019, 6:37 a.m. UTC | #2
On 2019/3/7 16:21, ziyuan wrote:
> Thanks for quickly work this out, it works fine by testing until now, 
> and it perfactly make the system work better in single core platform.
> 
> Tested-by: Ziyuan Xu <xzy.xu@rock-chips.com>

Thanks for testing. I'm still waiting for any other
comments before respin v2.

> 
> On 2019/2/27 上午11:36, Shawn Lin wrote:
>> DesignWare MMC controler lacks proper hardware wait
>> busy support, so the software must check the busy
>> state if the following tranfser need use data line.
>> And dw_mci_wait_while_busy() now use busy check mostly
>> with host's lock hold, and we can't relinguish CPU
>> at this moment, which makes it rather painful when used
>> in low-end platform. To solve this, Rockchip invent
>> a new hardware unbusy interrupt module, which could
>> generate interrupt if the state machine runs from
>> busy state into idle state.
>>
>>
>>
>> Shawn Lin (3):
>>    mmc: dw_mmc: Check busy state in dw_mci_request()
>>    mmc: dw_mmc: Add hardware unbusy interrupt support
>>    mmc: dw_mmc-rockchip: Enable hardware unbusy interrupt support
>>
>>   drivers/mmc/host/dw_mmc-rockchip.c | 30 +++++++++++++++++++
>>   drivers/mmc/host/dw_mmc.c          | 60 
>> +++++++++++++++++++++++++++++++++++++-
>>   drivers/mmc/host/dw_mmc.h          |  6 ++++
>>   3 files changed, 95 insertions(+), 1 deletion(-)
>>