• Doug Anderson's avatar
    mmc: dw_mmc: Only enable CD after setup and only if needed · fa0c3283
    Doug Anderson authored
    We really don't want to get a card detect interrupt during probe time
    since it can confuse things.  Let's disable the card detect interrupt
    until we're in a really good place: the end of probe.  Let's also
    simply avoid enabling the card detect interrupt if it's not used.
    
    It appears that (at least on rk3288) when vqmmc is turned on it can
    cause a bogus "card detect" interrupt.  That meant that we were
    getting a predictable card detect interrupt while we were in
    mmc_add_host().  On the version of the kernel I'm working with at
    least (3.14), this is not a great time to get a card detect interrupt
    since I think that we don't grab all the needed locks in
    mmc_add_host() and children.  I put stack dumps in dw_mci_setup_bus()
    and found that I could see two distinct stack crawls that looked like:
    
    Caller one:
    * dw_mci_setup_bus
    * dw_mci_set_ios
    * mmc_power_up
    * mmc_start_host
    * mmc_add_host
    
    Caller two:
    * dw_mci_setup_bus
    * dw_mci_set_ios
    * mmc_set_chip_select
    * mmc_go_idle
    * mmc_rescan
    * process_one_work
    * worker_thread
    * kthread
    Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
    Tested-by: default avatarJavier Martinez Canillas <javier.martinez@collabora.co.uk>
    Signed-off-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    fa0c3283
dw_mmc.c 74.4 KB