On 14 June 2016 at 10:36, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote: > On 14/06/16 11:19, Gregory CLEMENT wrote: >> Hi Adrian, >> >> On mar., juin 14 2016, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote: >> >>> On 09/06/16 10:10, Gregory CLEMENT wrote: >>>> From: Victor Gu <xigu@xxxxxxxxxxx> >>>> >>>> This path adds the driver for the Marvell Xenon eMMC host controller >>>> which supports eMMC 5.1, SD 3.0. >>>> >>>> However this driver supports only up to eMMC 5.0 since the command queue >>>> feature is not included (yet) in the driver. >>>> >>>> [gregory.clement@xxxxxxxxxxxxxxxxxx: >>>> - reformulate commit log >>>> - overload the sdhci_set_uhs_signaling function instead of using a quirk >>>> - fix a kconfig dependency >>>> - remove dead code] >>>> >>>> Signed-off-by: Victor Gu <xigu@xxxxxxxxxxx> >>>> Signed-off-by: Gregory CLEMENT <gregory.clement@xxxxxxxxxxxxxxxxxx> >>>> --- >>>> drivers/mmc/host/Kconfig | 10 + >>>> drivers/mmc/host/Makefile | 1 + >>>> drivers/mmc/host/sdhci-xenon.c | 1164 ++++++++++++++++++++++++++++++++++++++++ >>>> 3 files changed, 1175 insertions(+) >>>> create mode 100644 drivers/mmc/host/sdhci-xenon.c >>>> >>> >>> <SNIP> >>> >>>> diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c >>>> new file mode 100644 >>>> index 000000000000..43c06db95872 >>>> --- /dev/null >>>> +++ b/drivers/mmc/host/sdhci-xenon.c >>> >>> <SNIP> >>> >>>> +static int sdhci_xenon_delay_adj_test(struct sdhci_host *host, >>>> + struct mmc_card *card, unsigned int delay, >>>> + bool invert, bool phase) >>>> +{ >>>> + int ret; >>>> + struct mmc_card *oldcard; >>>> + >>>> + sdhci_xenon_set_fix_delay(host, delay, invert, phase); >>>> + >>>> + /* >>>> + * If the card is not yet associated to the host, we >>>> + * temporally do it >>>> + */ >>>> + oldcard = card->host->card; >>>> + if (!oldcard) >>>> + card->host->card = card; >>>> + ret = card_alive(card); >>> >>> This looks like an abuse of bus_ops->alive(). You will need to get >>> agreement with Ulf how to handle this. I will wait for Ulf's comments >>> before reviewing this patch set further. >> >> Actually I modified this part of the driver to use >> bus_ops->alive(). Initially, the alive() code was more or less copied >> and paste from the mmc core with ugly include from mmc_ops.h and >> sdio_ops.h to make it work. I find it cleaner to directly access the >> alive() function. >> >> Could you explain why it is an abuse of bus_ops->alive()? Because it's an internal callback to be used only by the mmc core. > > bus_ops->alive() is used to determine if the card is present and able to > respond. You seem to be using it for a different purpose. I will wait for > Ulf's comments. > I looked briefly at your code, which uses the ->alive() ops. Indeed it's a workaround which I cannot accept. Could you elaborate why you need to send a CMD13 from your host driver? It's the responsibility of the mmc core to know/implement the (e)MMC/SD/SDIO protocols. Is there something missing in core to be able to support your host driver? Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html