All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergei Shtylyov <sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
To: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
Cc: Tuomas Tynkkynen <tuomas.tynkkynen-X3B1VOXEql0@public.gmane.org>,
	Tuomas Tynkkynen
	<ttynkkynen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Mikko Perttunen
	<mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Subject: Re: [PATCH 2/2] ARM: dts: USB for Tegra114 Dalmore
Date: Thu, 01 Aug 2013 02:20:02 +0400	[thread overview]
Message-ID: <51F98D92.3010607@cogentembedded.com> (raw)
In-Reply-To: <51F98A78.9060309-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>

On 08/01/2013 02:06 AM, Stephen Warren wrote:

>>>>> Device tree entries for the three EHCI controllers on Tegra114.
>>>>> Enables the the third controller (USB host) on Dalmore.

>>>>> diff --git a/arch/arm/boot/dts/tegra114.dtsi
>>>>> b/arch/arm/boot/dts/tegra114.dtsi
>>>>> index abf6c40..2905145 100644
>>>>> --- a/arch/arm/boot/dts/tegra114.dtsi
>>>>> +++ b/arch/arm/boot/dts/tegra114.dtsi
>>>>> @@ -430,6 +430,68 @@
>>>>>            status = "disable";
>>>>>        };
>>>>>
>>>>> +    usb@7d000000 {
>>>>> +        compatible = "nvidia,tegra30-ehci", "usb-ehci";
>>>>> +        reg = <0x7d000000 0x4000>;
>>>>> +        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
>>>>> +        phy_type = "utmi";
>>>>> +        clocks = <&tegra_car TEGRA114_CLK_USBD>;
>>>>> +        nvidia,phy = <&phy1>;
>>>>> +        status = "disabled";
>>>>> +    };
>>>>> +
>>>>> +    phy1: usb-phy@7d000000 {

>>>>      At the same address as the previous node?

>>> Yes. The first node is for the EHCI driver and the second for the PHY
>>> driver.
>>> There is some overlap in the exact registers used, so both drives map the
>>> whole USB controller block.

>>     That's really horrible design.

> Yup. Both USB PHY and EHCI controller registers really are interleaved
> in one range.

    But the standard EHCI register space has no holes IIRC, so they can't be 
really that much interleaved as you're describing (unless you have some 
non-standard registers of course)...
    We just had a case of misinterpreting the EHCI/PHY register spaces as 
interleaved (while in fact they weren't) on Renesas R-Car which I had to 
resolve for 3.11.

>>>>> +        compatible = "nvidia,tegra30-usb-phy";
>>>>> +        reg = <0x7d000000 0x4000 0x7d000000 0x4000>;

>>>>      Hm, there must be some mistake: two similar register ranges.

>>> The second range is used to configure the UTMI pad registers. All the
>>> UTMI pad
>>> registers are located in the first USB controller's range.

>>     Which second range? This is one and the same range.

> Some registers in the USB1 register range actually are "global" and
> relevant to all USB controllers. So:

> There are two 2-cell entries in that reg property. The first entry
> defines the registers for this USB PHY, and hence is unique for each USB
> PHY node. The second defines the registers for whichever USB PHY
> contains various shared registers across multiple PHYs, so is expected
> to be identical across all USB PHY DT nodes.

    Hm, couldn't you have those shared registers as a separate device?

> Yes, the HW design really is this screwy.

    Ugh...

>>     Don't they cause numerous resource conflicts while device nodes being
>> instantiated as the platform devices?

> No; the driver knows that the HW is screwy and there's lots of
> register-range sharing going on, so it simply maps the registers, rather
> than reserving the physical address range and mapping it.

    Yes, it's clear that the driver should take special measures, I was asking 
about the platform device creation phase. What do you see in /proc/iomem?

WBR, Sergei

WARNING: multiple messages have this Message-ID (diff)
From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
To: Stephen Warren <swarren@wwwdotorg.org>
Cc: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>,
	Tuomas Tynkkynen <ttynkkynen@nvidia.com>,
	linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-usb@vger.kernel.org,
	Mikko Perttunen <mperttunen@nvidia.com>
Subject: Re: [PATCH 2/2] ARM: dts: USB for Tegra114 Dalmore
Date: Thu, 01 Aug 2013 02:20:02 +0400	[thread overview]
Message-ID: <51F98D92.3010607@cogentembedded.com> (raw)
In-Reply-To: <51F98A78.9060309@wwwdotorg.org>

On 08/01/2013 02:06 AM, Stephen Warren wrote:

>>>>> Device tree entries for the three EHCI controllers on Tegra114.
>>>>> Enables the the third controller (USB host) on Dalmore.

>>>>> diff --git a/arch/arm/boot/dts/tegra114.dtsi
>>>>> b/arch/arm/boot/dts/tegra114.dtsi
>>>>> index abf6c40..2905145 100644
>>>>> --- a/arch/arm/boot/dts/tegra114.dtsi
>>>>> +++ b/arch/arm/boot/dts/tegra114.dtsi
>>>>> @@ -430,6 +430,68 @@
>>>>>            status = "disable";
>>>>>        };
>>>>>
>>>>> +    usb@7d000000 {
>>>>> +        compatible = "nvidia,tegra30-ehci", "usb-ehci";
>>>>> +        reg = <0x7d000000 0x4000>;
>>>>> +        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
>>>>> +        phy_type = "utmi";
>>>>> +        clocks = <&tegra_car TEGRA114_CLK_USBD>;
>>>>> +        nvidia,phy = <&phy1>;
>>>>> +        status = "disabled";
>>>>> +    };
>>>>> +
>>>>> +    phy1: usb-phy@7d000000 {

>>>>      At the same address as the previous node?

>>> Yes. The first node is for the EHCI driver and the second for the PHY
>>> driver.
>>> There is some overlap in the exact registers used, so both drives map the
>>> whole USB controller block.

>>     That's really horrible design.

> Yup. Both USB PHY and EHCI controller registers really are interleaved
> in one range.

    But the standard EHCI register space has no holes IIRC, so they can't be 
really that much interleaved as you're describing (unless you have some 
non-standard registers of course)...
    We just had a case of misinterpreting the EHCI/PHY register spaces as 
interleaved (while in fact they weren't) on Renesas R-Car which I had to 
resolve for 3.11.

>>>>> +        compatible = "nvidia,tegra30-usb-phy";
>>>>> +        reg = <0x7d000000 0x4000 0x7d000000 0x4000>;

>>>>      Hm, there must be some mistake: two similar register ranges.

>>> The second range is used to configure the UTMI pad registers. All the
>>> UTMI pad
>>> registers are located in the first USB controller's range.

>>     Which second range? This is one and the same range.

> Some registers in the USB1 register range actually are "global" and
> relevant to all USB controllers. So:

> There are two 2-cell entries in that reg property. The first entry
> defines the registers for this USB PHY, and hence is unique for each USB
> PHY node. The second defines the registers for whichever USB PHY
> contains various shared registers across multiple PHYs, so is expected
> to be identical across all USB PHY DT nodes.

    Hm, couldn't you have those shared registers as a separate device?

> Yes, the HW design really is this screwy.

    Ugh...

>>     Don't they cause numerous resource conflicts while device nodes being
>> instantiated as the platform devices?

> No; the driver knows that the HW is screwy and there's lots of
> register-range sharing going on, so it simply maps the registers, rather
> than reserving the physical address range and mapping it.

    Yes, it's clear that the driver should take special measures, I was asking 
about the platform device creation phase. What do you see in /proc/iomem?

WBR, Sergei


  parent reply	other threads:[~2013-07-31 22:20 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-31 17:42 [PATCH 0/2] Device tree changes for Tegra30 and Tegra114 USB Host support Tuomas Tynkkynen
2013-07-31 17:42 ` Tuomas Tynkkynen
2013-07-31 17:42 ` [PATCH 1/2] ARM: DTS: tegra: Add USB entries for Tegra30 Tuomas Tynkkynen
2013-07-31 17:42   ` Tuomas Tynkkynen
     [not found]   ` <1375292543-7896-2-git-send-email-ttynkkynen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-31 22:13     ` Stephen Warren
2013-07-31 22:13       ` Stephen Warren
     [not found]       ` <51F98C27.40904-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-08-01 15:15         ` Tuomas Tynkkynen
2013-08-01 15:15           ` Tuomas Tynkkynen
2013-07-31 17:42 ` [PATCH 2/2] ARM: dts: USB for Tegra114 Dalmore Tuomas Tynkkynen
2013-07-31 17:42   ` Tuomas Tynkkynen
     [not found]   ` <1375292543-7896-3-git-send-email-ttynkkynen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-07-31 18:18     ` Sergei Shtylyov
2013-07-31 18:18       ` Sergei Shtylyov
2013-07-31 19:31       ` Tuomas Tynkkynen
     [not found]         ` <51F9660C.6090604-X3B1VOXEql0@public.gmane.org>
2013-07-31 19:53           ` Sergei Shtylyov
2013-07-31 19:53             ` Sergei Shtylyov
     [not found]             ` <51F96B48.10209-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2013-07-31 22:06               ` Stephen Warren
2013-07-31 22:06                 ` Stephen Warren
     [not found]                 ` <51F98A78.9060309-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-07-31 22:20                   ` Sergei Shtylyov [this message]
2013-07-31 22:20                     ` Sergei Shtylyov
     [not found]                     ` <51F98D92.3010607-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2013-07-31 23:29                       ` Stephen Warren
2013-07-31 23:29                         ` Stephen Warren
     [not found]                         ` <51F99DE4.7010503-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-08-01 12:37                           ` Sergei Shtylyov
2013-08-01 12:37                             ` Sergei Shtylyov
2013-08-15 10:54                           ` Thierry Reding
2013-08-15 10:54                             ` Thierry Reding

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=51F98D92.3010607@cogentembedded.com \
    --to=sergei.shtylyov-m4dtvfq/zs1mrggop+s0pdbpr1lh4cv8@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=ttynkkynen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=tuomas.tynkkynen-X3B1VOXEql0@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.