From: hdegoede@redhat.com (Hans de Goede)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] mmc: sunxi: Don't start commands while the card is busy
Date: Tue, 25 Aug 2015 14:09:45 +0200 [thread overview]
Message-ID: <55DC5B09.2020705@redhat.com> (raw)
In-Reply-To: <CAPDyKFrYvL33DsaATg4fyAJg=G3SEuOP+xU=o_UwasmNZ+a07Q@mail.gmail.com>
Hi,
On 25-08-15 14:05, Ulf Hansson wrote:
> On 1 August 2015 at 11:01, Hans de Goede <hdegoede@redhat.com> wrote:
>> Hi,
>>
>> On 21-07-15 14:15, Ulf Hansson wrote:
>>>
>>> On 10 July 2015 at 17:14, Hans de Goede <hdegoede@redhat.com> wrote:
>>>>
>>>> Some sdio wifi modules have not been working reliable with the sunxi-mmc
>>>> host code. This turns out to be caused by it starting new commands while
>>>> the card signals that it is still busy processing a previous command.
>>>
>>>
>>> Which are those commands?
>>
>>
>> The code were things get stuck when not waiting for the busy signal uses
>> the following sdio helper functions:
>>
>> sdio_readb/sdio_writeb
>> sdio_f0_readb/sdio_f0_writeb
>> sdio_readw/sdio_writew
>> sdio_readl/sdio_writel
>> sdio_readsb
>> sdio_memcpy_fromio/sdio_memcpy_toio
>>
>> And directly issues the following command:
>>
>> mmc_dat.flags = write ? MMC_DATA_WRITE : MMC_DATA_READ;
>> mmc_cmd.opcode = SD_IO_RW_EXTENDED;
>> mmc_cmd.arg = write ? 1<<31 : 0; /* write flag */
>> mmc_cmd.arg |= (fn & 0x7) << 28; /* SDIO func num */
>> mmc_cmd.arg |= 1<<27; /* block mode */
>> /* for function 1 the addr will be incremented */
>> mmc_cmd.arg |= (fn == 1) ? 1<<26 : 0;
>> mmc_cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC;
>>
>> I do not know if the busy wait is necessary for all
>> of these, but the hack in the android kernel code,
>> which inserts calls to a wait_card_busy function directly
>> into: drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
>>
>> Does so for all of these.
>>
>>> Or more interesting, which response types do
>>>
>>> these commands expect?
>>> I don't think this is a sunxi specific issue, I have seen similar
>>> issues for other host controllers.
>>
>>
>> Agreed, recent dw-mmc patches address the same issue, also involving
>> broadcom sdio wifi chips.
>>
>>> I am thinking that perhaps this should be managed by the mmc core
>>> instead of local hacks to sunxi. Potentially we could make the core to
>>> invoke the already existing host_ops->card_busy() callback when
>>> needed...
>>
>>
>> I'm fine with solving this either way, implementing host_ops->card_busy()
>> for sunxi is easy, and if the core os modified to call that function
>> before issue sdio io ops (which seems to be the common thing here),
>> then that indeed is better then having the sunxi code always do
>> the busy check.
>
> Okay, so let's make the core to call the ->card_busy() callback and
> then it's up to each host driver to implement that callback.
Ok, do you plan to do a patch for this, or do you expect to get
one submitted to you ?
Regards,
Hans
> As an optimization, we might consider (in a separate step) to add
> MMC_RSP_BUSY to the response type. I realize that would somewhat be a
> violation of the spec, but apparently the SDIO spec isn't really clear
> on this area.
>
>>
>>> Within this context, could I ask whether you controller supports IRQ
>>> based HW-busy detection? Or you need polling of the status register?
>>
>>
>> I'm afraid that we need to poll the status register. I've been unable
>> to find an irq flag corresponding to this.
>
> Okay, thanks for the info.
>
> [...]
>
> Kind regards
> Uffe
>
next prev parent reply other threads:[~2015-08-25 12:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-10 15:14 [PATCH v2] mmc: sunxi: Don't start commands while the card is busy Hans de Goede
2015-07-20 8:00 ` Maxime Ripard
2015-07-20 15:23 ` [linux-sunxi] " Hans de Goede
2015-07-24 8:26 ` Maxime Ripard
2015-07-21 12:15 ` Ulf Hansson
2015-07-28 19:22 ` Arend van Spriel
2015-08-01 9:01 ` Hans de Goede
2015-08-25 12:05 ` Ulf Hansson
2015-08-25 12:09 ` Hans de Goede [this message]
2015-08-25 13:58 ` Ulf Hansson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55DC5B09.2020705@redhat.com \
--to=hdegoede@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).