From: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: "David Lanzendörfer"
<david.lanzendoerfer-Z7Kmv9EsliU@public.gmane.org>,
"Chris Ball" <chris-OsFVWbfNK3isTnJN9+BGXg@public.gmane.org>,
"Emilio Lopez" <emilio-0Z03zUJReD5OxF6Tv1QG9Q@public.gmane.org>,
"Mike Turquette"
<mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"Maxime Ripard"
<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
linux-mmc <linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: [PATCH v10 03/15] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs
Date: Thu, 08 May 2014 13:26:50 +0200 [thread overview]
Message-ID: <536B69FA.5090600@redhat.com> (raw)
In-Reply-To: <CAPDyKFpAGNLaKagJ_RPt1vbz70pNWJzo-s6Ao50Mh0gFrRLN0g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
Hi,
On 05/05/2014 10:33 PM, Ulf Hansson wrote:
> [snip]
>
>> On 05/05/2014 02:41 PM, Ulf Hansson wrote:
>>>> +struct sunxi_mmc_host {
>>>> + struct mmc_host *mmc;
>>>> + struct regulator *vmmc;
>>>
>>> Instead of having a specific regulator for this driver, please use the
>>> mmc_regulator_get_supply API.
>>
>> We cannot use mmc_regulator_get_supply because for the sunxi mmc controller
>> not only vqmmc but also vmmc itself is optional, and mmc_regulator_get_supply
>> calls devm_regulator_get rather then devm_regulator_get_optional for vmmc.
>
> Is that because the mmc controller handle the power to the card or
> because you have a fixed supply?
>
> Having a fixed regulator supply could easily be set up in DT, which
> then also dynamically gives you the ocr mask instead of having a them
> "hard coded".
It is because the sdcard slot power tends to be hooked directly to the 3.3V
of the board. So in a sense this is a fixed regulator, but I really, REALLY
don't want to add fixed regulator boilerplate to all sunxi dts files for this.
In other subsystems where there are similar cases (ie ahci-platform, supply for
various ethernet phys), the regulator is always optional and does not need
to be specified in the dts when the device is just hardwired to the power.
>
>>
>> Using mmc_regulator_get_supply would lead to false postive errors being logged
>> on 99/100 boards.
>
> I was kind of expecting a response like this. :-) Actually I would
> prefer if we could make the API suit drivers like this one as well.
>
> For reference, there are currently a patch being discussed which
> relates to this topic.
> "mmc: core: Improve support for deferred regulators"
Ok, so that patch seems to replace the somewhat alarming message
reported by devm_regulator_get by an acceptable:
dev_info(dev, "No vmmc regulator found\n");
I can live with that, so I'm going to assume that something like that
patch will get merged in the near future and I'll switch to mmc_regulator_get_supply
in the next version and just live with the error messages this causes for now.
>>>> + struct reset_control *reset;
>>>> +
>>>> + /* IO mapping base */
>>>> + void __iomem *reg_base;
>>>> +
>>>> + spinlock_t lock;
>>>> + struct tasklet_struct manual_stop_tasklet;
>>>
>>> Any reason why you can't use a threaded IRQ handler instead of a tasklet?
>>
>> AFAIK IRQ threaded handlers always have the highest priority. When
>> the manual_stop_tasklet runs we disable irqs and start polling to
>> recover from an error condition, which is nothing something I want
>> todo with the highest priority on the system.
>
> To me, that seems like a good match for a threaded irq handler.
Ok, I've done some reading up on threaded irq handlers and I'll
I'll convert this to a threaded irq handler (only using the thread for the error
handling case).
<snip>
>>>> + if (err) {
>>>> + host->ferror = 1;
>>>> + return;
>>>> + }
>>>> +
>>>> + enable_irq(host->irq);
>
> Just realize that I also think you should move the enable|disable_irq
> to ->probe|remove().
>
> That will mean you will be better prepared to implement runtime PM
> support and thus make it possible to disable irqs during request
> inactivity.
Ok.
<snip>
>>>> + /* set up clock */
>>>> + if (ios->clock && ios->power_mode) {
>>>> + dev_dbg(mmc_dev(host->mmc), "ios->clock: %d\n", ios->clock);
>>>> + sunxi_mmc_clk_set_rate(host, ios->clock);
>>>> + usleep_range(50000, 55000);
>>>
>>> Is those values for usleep really correct? I am not sure how many
>>> times we execute this path while detecting/powering the card, but
>>> quite a few.
>>> Detecting/powering the card is also done during each system
>>> suspend/resume cycle - thus this will heavily affect these cycles.
>>
>> The problem is we've no docs, so this is all based on android code, the
>> android code has 2 drivers, lets call them the old and the new one.
>>
>> This works is based on the new driver as that one was significantly
>> cleaner then the old driver. This bit comes directly from the new driver,
>> but it seems that the old driver has no delay at all. And clk_set_rate
>> already does a busy-wait waiting for the hardware to acknowledge the
>> clock rate change, so I think this is not really necessary. I'll run
>> some tests with it removed and if everything still works I'll drop it.
>
> Okay, great!
>
> Maybe we could add some comments, no matter what!?
Yeah I'll add a comment that there used to be a usleep there :)
Regards,
Hans
WARNING: multiple messages have this Message-ID (diff)
From: hdegoede@redhat.com (Hans de Goede)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v10 03/15] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs
Date: Thu, 08 May 2014 13:26:50 +0200 [thread overview]
Message-ID: <536B69FA.5090600@redhat.com> (raw)
In-Reply-To: <CAPDyKFpAGNLaKagJ_RPt1vbz70pNWJzo-s6Ao50Mh0gFrRLN0g@mail.gmail.com>
Hi,
On 05/05/2014 10:33 PM, Ulf Hansson wrote:
> [snip]
>
>> On 05/05/2014 02:41 PM, Ulf Hansson wrote:
>>>> +struct sunxi_mmc_host {
>>>> + struct mmc_host *mmc;
>>>> + struct regulator *vmmc;
>>>
>>> Instead of having a specific regulator for this driver, please use the
>>> mmc_regulator_get_supply API.
>>
>> We cannot use mmc_regulator_get_supply because for the sunxi mmc controller
>> not only vqmmc but also vmmc itself is optional, and mmc_regulator_get_supply
>> calls devm_regulator_get rather then devm_regulator_get_optional for vmmc.
>
> Is that because the mmc controller handle the power to the card or
> because you have a fixed supply?
>
> Having a fixed regulator supply could easily be set up in DT, which
> then also dynamically gives you the ocr mask instead of having a them
> "hard coded".
It is because the sdcard slot power tends to be hooked directly to the 3.3V
of the board. So in a sense this is a fixed regulator, but I really, REALLY
don't want to add fixed regulator boilerplate to all sunxi dts files for this.
In other subsystems where there are similar cases (ie ahci-platform, supply for
various ethernet phys), the regulator is always optional and does not need
to be specified in the dts when the device is just hardwired to the power.
>
>>
>> Using mmc_regulator_get_supply would lead to false postive errors being logged
>> on 99/100 boards.
>
> I was kind of expecting a response like this. :-) Actually I would
> prefer if we could make the API suit drivers like this one as well.
>
> For reference, there are currently a patch being discussed which
> relates to this topic.
> "mmc: core: Improve support for deferred regulators"
Ok, so that patch seems to replace the somewhat alarming message
reported by devm_regulator_get by an acceptable:
dev_info(dev, "No vmmc regulator found\n");
I can live with that, so I'm going to assume that something like that
patch will get merged in the near future and I'll switch to mmc_regulator_get_supply
in the next version and just live with the error messages this causes for now.
>>>> + struct reset_control *reset;
>>>> +
>>>> + /* IO mapping base */
>>>> + void __iomem *reg_base;
>>>> +
>>>> + spinlock_t lock;
>>>> + struct tasklet_struct manual_stop_tasklet;
>>>
>>> Any reason why you can't use a threaded IRQ handler instead of a tasklet?
>>
>> AFAIK IRQ threaded handlers always have the highest priority. When
>> the manual_stop_tasklet runs we disable irqs and start polling to
>> recover from an error condition, which is nothing something I want
>> todo with the highest priority on the system.
>
> To me, that seems like a good match for a threaded irq handler.
Ok, I've done some reading up on threaded irq handlers and I'll
I'll convert this to a threaded irq handler (only using the thread for the error
handling case).
<snip>
>>>> + if (err) {
>>>> + host->ferror = 1;
>>>> + return;
>>>> + }
>>>> +
>>>> + enable_irq(host->irq);
>
> Just realize that I also think you should move the enable|disable_irq
> to ->probe|remove().
>
> That will mean you will be better prepared to implement runtime PM
> support and thus make it possible to disable irqs during request
> inactivity.
Ok.
<snip>
>>>> + /* set up clock */
>>>> + if (ios->clock && ios->power_mode) {
>>>> + dev_dbg(mmc_dev(host->mmc), "ios->clock: %d\n", ios->clock);
>>>> + sunxi_mmc_clk_set_rate(host, ios->clock);
>>>> + usleep_range(50000, 55000);
>>>
>>> Is those values for usleep really correct? I am not sure how many
>>> times we execute this path while detecting/powering the card, but
>>> quite a few.
>>> Detecting/powering the card is also done during each system
>>> suspend/resume cycle - thus this will heavily affect these cycles.
>>
>> The problem is we've no docs, so this is all based on android code, the
>> android code has 2 drivers, lets call them the old and the new one.
>>
>> This works is based on the new driver as that one was significantly
>> cleaner then the old driver. This bit comes directly from the new driver,
>> but it seems that the old driver has no delay at all. And clk_set_rate
>> already does a busy-wait waiting for the hardware to acknowledge the
>> clock rate change, so I think this is not really necessary. I'll run
>> some tests with it removed and if everything still works I'll drop it.
>
> Okay, great!
>
> Maybe we could add some comments, no matter what!?
Yeah I'll add a comment that there used to be a usleep there :)
Regards,
Hans
next prev parent reply other threads:[~2014-05-08 11:26 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-02 15:57 [PATCH v10 00/15] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs Hans de Goede
2014-05-02 15:57 ` Hans de Goede
[not found] ` <1399046249-19472-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-05-02 15:57 ` [PATCH v10 01/15] clk: sunxi: factors: automatic reparenting support Hans de Goede
2014-05-02 15:57 ` Hans de Goede
[not found] ` <1399046249-19472-2-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-05-06 18:51 ` Maxime Ripard
2014-05-06 18:51 ` Maxime Ripard
2014-05-06 20:24 ` Emilio López
2014-05-06 20:24 ` Emilio López
2014-05-02 15:57 ` [PATCH v10 02/15] clk: sunxi: Implement MMC phase control Hans de Goede
2014-05-02 15:57 ` Hans de Goede
[not found] ` <1399046249-19472-3-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-05-06 18:53 ` Maxime Ripard
2014-05-06 18:53 ` Maxime Ripard
2014-05-02 15:57 ` [PATCH v10 03/15] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-05 12:41 ` Ulf Hansson
2014-05-05 12:41 ` Ulf Hansson
[not found] ` <CAPDyKFoinhyob7GZLgH4Dm7KdHCxj1+OpuZYKDK3OkU8RFsY8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-05 13:10 ` Hans de Goede
2014-05-05 13:10 ` Hans de Goede
2014-05-05 20:33 ` Ulf Hansson
2014-05-05 20:33 ` Ulf Hansson
[not found] ` <CAPDyKFpAGNLaKagJ_RPt1vbz70pNWJzo-s6Ao50Mh0gFrRLN0g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-08 11:26 ` Hans de Goede [this message]
2014-05-08 11:26 ` Hans de Goede
2014-05-08 12:17 ` Ulf Hansson
2014-05-08 12:17 ` Ulf Hansson
[not found] ` <CAPDyKFqbN61EgiTbktL-vm+L7q06OTeedCTVXJsP16ZZZd8g8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-08 12:30 ` Hans de Goede
2014-05-08 12:30 ` Hans de Goede
[not found] ` <536B78FF.2020808-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-05-08 15:35 ` Maxime Ripard
2014-05-08 15:35 ` Maxime Ripard
2014-05-08 16:37 ` Hans de Goede
2014-05-08 16:37 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 04/15] ARM: dts: sun4i: Add mmc controller nodes Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 05/15] ARM: dts: sun4i: Add pin-muxing info for the mmc0 controller Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 06/15] ARM: dts: sun4i: Enable mmc controller on various A10 boards Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 07/15] ARM: dts: sun5i: Add mmc controller nodes Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 08/15] ARM: dts: sun5i: Enable mmc controller on various A10s and A13 boards Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 09/15] ARM: dts: sun6i: Add mmc clocks Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 10/15] ARM: dts: sun6i: Add mmc controller nodes Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 11/15] ARM: dts: sun6i: Add new sun6i-a31-m9 dts file for Mele M9 Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 12/15] ARM: dts: sun7i: Add mmc controller nodes Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 13/15] ARM: dts: sun7i: Add pin-muxing info for the mmc controllers Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 14/15] ARM: dts: sun7i: Enable mmc controller on various A20 boards Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-02 15:57 ` [PATCH v10 15/15] ARM: dts: sun7i: Add basic support for the Cubietruck WiFi module Hans de Goede
2014-05-02 15:57 ` Hans de Goede
2014-05-05 4:02 ` Maxime Ripard
2014-05-05 4:02 ` Maxime Ripard
2014-05-05 4:20 ` Chen-Yu Tsai
2014-05-05 4:20 ` Chen-Yu Tsai
2014-05-05 22:46 ` Maxime Ripard
2014-05-05 22:46 ` Maxime Ripard
[not found] ` <1399046249-19472-16-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-05-05 22:45 ` Maxime Ripard
2014-05-05 22:45 ` Maxime Ripard
2014-05-05 4:00 ` [PATCH v10 00/15] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs Maxime Ripard
2014-05-05 4:00 ` Maxime Ripard
2014-05-06 17:04 ` Mike Turquette
2014-05-06 17:04 ` Mike Turquette
2014-05-08 11:05 ` Hans de Goede
2014-05-08 11:05 ` Hans de Goede
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=536B69FA.5090600@redhat.com \
--to=hdegoede-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=chris-OsFVWbfNK3isTnJN9+BGXg@public.gmane.org \
--cc=david.lanzendoerfer-Z7Kmv9EsliU@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=emilio-0Z03zUJReD5OxF6Tv1QG9Q@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.