devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
Cc: Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>,
	Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org>,
	Maxime Ripard
	<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	Roman Byshko <rbyshko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@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 02/15] phy-sun4i-usb: Add a helper function to update the iscr register
Date: Tue, 10 Mar 2015 11:13:49 +0100	[thread overview]
Message-ID: <54FEC3DD.10108@redhat.com> (raw)
In-Reply-To: <2515825.598CypcWU3@wuerfel>

Hi,

On 10-03-15 09:57, Arnd Bergmann wrote:
> On Tuesday 10 March 2015 09:04:43 Hans de Goede wrote:
>> Hi,
>>
>> On 09-03-15 22:47, Arnd Bergmann wrote:
>>> On Monday 09 March 2015 21:40:15 Hans de Goede wrote:
>>>> +void sun4i_usb_phy_update_iscr(struct phy *_phy, u32 clr, u32 set)
>>>> +{
>>>> +       struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
>>>> +       struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
>>>> +       u32 iscr;
>>>> +
>>>> +       iscr = readl(data->base + REG_ISCR);
>>>> +       iscr &= ~clr;
>>>> +       iscr |= set;
>>>> +       writel(iscr, data->base + REG_ISCR);
>>>> +}
>>>> +EXPORT_SYMBOL(sun4i_usb_phy_update_iscr);
>>>> +
>>>>
>>>
>>> I would generally consider this a bad design. What is the purpose of
>>> calling sun4i_usb_phy_update_iscr()
>>
>> There are 2 different use cases for this one is to enable the dataline
>> pull-ups at driver init and disable them at driver exit, this could /
>> should probably be moved to the phy_init / phy_exit code for the usb0 phy
>> removing the need to do this from within the sunxi musb glue.
>>
>> The second use-case is more tricky, for some reasons Allwinner has decided
>> to not use the dedicated id-detect and vusb-sense pins of the phy they are
>> using (these pins are not routed to the outside).
>>
>> Instead id-detect and vusb-sense are done through any $random gpio pins
>> (including non irq capable pins on some designs requiring polling).
>>
>> But the musb-core still needs to know the status of the id and vbus pins,
>> and gets this from the usb0-phy iscr register, which reflects the status of
>> the not connected dedicated pins of the phy. The reason this can still
>> work at all is because the iscr register allows the user to override
>> whatever the not connected phy pins are seeing and forcing a value to
>> report to the musb core as id and vbus status.
>>
>> This is done by these 2 functions in the musb sunxi glue:
>>
>> static void sunxi_musb_force_id(struct musb *musb, u32 val)
>> {
>>           struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
>>
>>           if (val)
>>                   val = SUNXI_ISCR_FORCE_ID_HIGH;
>>           else
>>                   val = SUNXI_ISCR_FORCE_ID_LOW;
>>
>>           sun4i_usb_phy_update_iscr(glue->phy, SUNXI_ISCR_FORCE_ID_MASK, val);
>> }
>>
>> static void sunxi_musb_force_vbus(struct musb *musb, u32 val)
>> {
>>           struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
>>
>>           if (val)
>>                   val = SUNXI_ISCR_FORCE_VBUS_HIGH;
>>           else
>>                   val = SUNXI_ISCR_FORCE_VBUS_LOW;
>>
>>           sun4i_usb_phy_update_iscr(glue->phy, SUNXI_ISCR_FORCE_VBUS_MASK, val);
>> }
>>
>> I will happily admit that these 2 functions are a better API between the sunxi musb
>> glue and the sunxi usb phy driver. I started with the minimal sun4i_usb_phy_update_iscr
>> approach as I wanted to keep the API as small as possible, but having 2 functions like
>> the one above, which actually reflect what is happening would indeed be better.
>
> Ok, that would definitely improve things.
>
>> Note that the polling of the pins cannot (easily) be moved into the phy driver for various
>> reasons:
>>
>> 1) It depends on dr_mode, the otg may be used in host only mode in which case there are no
>> pins at all.
>> 2) the musb set_vbus callback needs access to the pins
>> 3) When id changes some musb core state changes are necessary.
>>
>> I'll respin the patch set to do things this way as soon as we've agreement on
>> your second point.
>>
>>   > and why can't there be a high-level
>>> PHY API for this?
>>
>> The current generic phy API seems to not have any bus specific methods, I know that
>> in the long run people want to get rid of struct usb_phy, so maybe we should consider
>> adding bus specific methods to the generic phy API for things like otg.
>>
>> If we decide to add bus specific methods, then the question becomes if having
>>
>> int phy_usb_set_id_detect(struct phy *phy, bool val);
>> int phy_usb_set_vbus_detect(struct phy *phy, bool val);
>>
>> Functions in the generic phy API is a good idea, or if this is too sunxi specific,
>> I'm fine with doing this either way. If we want to go the generic phy route
>> I'll split this in 2 patches, one adding these 2 generic functions & phy-ops, and
>> 1 doing the sunxi implementation.
>>
>> If people believe this is too sunxi specific (I believe it is, but as said I'm
>> fine with doing this either way). I'll respin this patch to remove the too
>> generic sun4i_usb_phy_update_iscr function, and instead add these 2:
>>
>> void sun4i_usb_phy_set_id_detect(struct phy *phy, bool val);
>> void sun4i_usb_phy_set_vbus_detect(struct phy *phy, bool val);
>
> Thanks for your detailed explanations. I think this is something for
> Kishon to decide, based on where he wants to take the phy API in the
> long run. I'm fine with it either way, and it seems easy enough to
> change between those two interfaces if we make up our minds about it
> later.

Ok, so I've fixed things in my personal tree to use 2 sun4i private functions for
now:

void sun4i_usb_phy_set_id_detect(struct phy *phy, bool val);
void sun4i_usb_phy_set_vbus_detect(struct phy *phy, bool val);

You can find this change here:
https://github.com/jwrdegoede/linux-sunxi/commits/sunxi-wip

I'll wait a bit to see if there are more review comments and then
I'll send a v2 of the set.

Regards,

Hans

  reply	other threads:[~2015-03-10 10:13 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-09 20:40 [PATCH 00/15] musb: Add support for the Allwinner sunxi musb controller Hans de Goede
     [not found] ` <1425933628-9672-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-09 20:40   ` [PATCH 01/15] ARM: sunxi: Add register bit definitions for SRAM mapping syscon Hans de Goede
2015-03-09 20:40   ` [PATCH 02/15] phy-sun4i-usb: Add a helper function to update the iscr register Hans de Goede
     [not found]     ` <1425933628-9672-3-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-09 21:47       ` Arnd Bergmann
2015-03-10  8:04         ` Hans de Goede
     [not found]           ` <54FEA59B.7020400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10  8:57             ` Arnd Bergmann
2015-03-10 10:13               ` Hans de Goede [this message]
     [not found]                 ` <54FEC3DD.10108-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10 10:53                   ` Kishon Vijay Abraham I
     [not found]                     ` <54FECD30.6080106-l0cyMroinI0@public.gmane.org>
2015-03-10 11:03                       ` Hans de Goede
     [not found]                         ` <54FECF9F.7020606-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-11  9:13                           ` Kishon Vijay Abraham I
     [not found]                             ` <55000749.9040606-l0cyMroinI0@public.gmane.org>
2015-03-11 11:39                               ` Hans de Goede
     [not found]                                 ` <55002970.8090206-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-11 12:50                                   ` Kishon Vijay Abraham I
     [not found]                                     ` <55003A15.2070900-l0cyMroinI0@public.gmane.org>
2015-03-11 13:03                                       ` Hans de Goede
     [not found]                                         ` <55003D2B.60502-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-11 13:07                                           ` Kishon Vijay Abraham I
     [not found]                                             ` <55003E0D.9040509-l0cyMroinI0@public.gmane.org>
2015-03-11 14:44                                               ` Hans de Goede
2015-03-09 20:40   ` [PATCH 03/15] musb: Make musb_write_rxfun* and musb_write_rxhub* work like their tx versions Hans de Goede
2015-03-09 20:40   ` [PATCH 04/15] musb: Make busctl_offset an io-op rather then a define Hans de Goede
2015-03-09 20:40   ` [PATCH 05/15] musb: Do not use musb_read[b|w] / _write[b|w] wrappers in generic fifo functions Hans de Goede
     [not found]     ` <1425933628-9672-6-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-09 21:50       ` Arnd Bergmann
2015-03-10  7:43         ` Hans de Goede
     [not found]           ` <54FEA09A.6040401-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10  8:50             ` Arnd Bergmann
2015-03-10  8:56               ` Hans de Goede
     [not found]                 ` <54FEB1D4.3080700-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10 13:43                   ` Arnd Bergmann
2015-03-09 20:40   ` [PATCH 06/15] musb: Fix platform code being unable to override ep access ops Hans de Goede
2015-03-09 20:40   ` [PATCH 07/15] musb: Add support for the Allwinner sunxi musb controller Hans de Goede
2015-03-09 20:40   ` [PATCH 08/15] ARM: dts: sunxi: Add syscon node for controlling SRAM mapping Hans de Goede
2015-03-09 20:40   ` [PATCH 09/15] ARM: dts: sun4i: Add USB Dual Role Controller Hans de Goede
     [not found]     ` <1425933628-9672-10-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-09 23:31       ` Julian Calaby
     [not found]         ` <CAGRGNgVsf05rtLC2+yOPrbrPV-ceQzPC=ZX1zX+hfNxdC7OX-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-10  9:10           ` Hans de Goede
2015-03-09 20:40   ` [PATCH 10/15] ARM: dts: sun5i: " Hans de Goede
2015-03-09 20:40   ` [PATCH 11/15] ARM: dts: sun7i: " Hans de Goede
2015-03-09 20:40   ` [PATCH 12/15] ARM: dts: sun4i: Enable USB DRC on Chuwi V7 CW0825 Hans de Goede
     [not found]     ` <1425933628-9672-13-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10 15:07       ` Maxime Ripard
2015-03-10 15:23         ` Hans de Goede
     [not found]           ` <54FF0C5D.3090706-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-03-10 18:17             ` Maxime Ripard
2015-03-09 20:40   ` [PATCH 13/15] ARM: dts: sun5i: Enable USB DRC on UTOO P66 Hans de Goede
2015-03-09 20:40   ` [PATCH 14/15] ARM: dts: sun7i: Enable USB DRC on Cubietruck Hans de Goede
2015-03-09 20:40   ` [PATCH 15/15] ARM: dts: sun7i: Enable USB DRC on A20-OLinuxIno-Lime Hans de Goede
2015-03-09 21:44   ` [PATCH 00/15] musb: Add support for the Allwinner sunxi musb controller Arnd Bergmann
2015-03-10  1:46     ` Chen-Yu Tsai
     [not found]       ` <CAGb2v67GkL9Mdr98Chf6MhMff7CO8OGgfF2kaB3Xcnz=SkMG3w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-10  7:38         ` Hans de Goede
2015-03-10  8:31         ` Arnd Bergmann
2015-03-10 17:41   ` Maxime Ripard
2015-03-10 22:35     ` 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=54FEC3DD.10108@redhat.com \
    --to=hdegoede-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=balbi-l0cyMroinI0@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=kishon-l0cyMroinI0@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=rbyshko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=wens-jdAy2FN1RRM@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 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).