[PATCH 09/12] mmc: sdhci-xenon: add initial Xenon eMMC driver
Ulf Hansson
ulf.hansson at linaro.org
Wed Jun 22 04:04:14 PDT 2016
On 14 June 2016 at 10:36, Adrian Hunter <adrian.hunter at intel.com> wrote:
> On 14/06/16 11:19, Gregory CLEMENT wrote:
>> Hi Adrian,
>>
>> On mar., juin 14 2016, Adrian Hunter <adrian.hunter at intel.com> wrote:
>>
>>> On 09/06/16 10:10, Gregory CLEMENT wrote:
>>>> From: Victor Gu <xigu at marvell.com>
>>>>
>>>> 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 at free-electrons.com:
>>>> - 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 at marvell.com>
>>>> Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
>>>> ---
>>>> 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
More information about the linux-arm-kernel
mailing list