From: claudiu beznea <claudiu.beznea@tuxon.dev>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Sergey Shtylyov <s.shtylyov@omp.ru>,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, p.zabel@pengutronix.de,
yoshihiro.shimoda.uh@renesas.com,
wsa+renesas@sang-engineering.com, biju.das.jz@bp.renesas.com,
prabhakar.mahadev-lad.rj@bp.renesas.com,
sergei.shtylyov@cogentembedded.com,
mitsuhiro.kimura.kc@renesas.com, masaru.nagai.vx@renesas.com,
netdev@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
linux-kernel@vger.kernel.org,
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Subject: Re: [PATCH 13/13] net: ravb: Add runtime PM support
Date: Mon, 27 Nov 2023 16:46:38 +0200 [thread overview]
Message-ID: <ece2601d-9311-462b-8687-c241d889ec16@tuxon.dev> (raw)
In-Reply-To: <CAMuHMdVCRXYKtcwaC=v-HhJW-PLV-zhj_3GmeU6Vu1JOK_eu0Q@mail.gmail.com>
Hi, Geert,
On 27.11.2023 16:05, Geert Uytterhoeven wrote:
> Hi Claudiu,
>
> On Sat, Nov 25, 2023 at 12:00 AM claudiu beznea
> <claudiu.beznea@tuxon.dev> wrote:
>> On 23.11.2023 21:19, Sergey Shtylyov wrote:
>>> On 11/23/23 8:04 PM, claudiu beznea wrote:
>>>>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>>>
>>>>>> RZ/G3S supports enabling/disabling clocks for its modules (including
>>>>>> Ethernet module). For this commit adds runtime PM support which
>>>>>> relies on PM domain to enable/disable Ethernet clocks.
>>>>>
>>>>> That's not exactly something new in RZ/G3S. The ravb driver has unconditional
>>>>> RPM calls already in the probe() and remove() methods...
>>>>> And the sh_eth driver
>>>>> has RPM support since 2009...
>>>>>
>>>>>> At the end of probe ravb_pm_runtime_put() is called which will turn
>>>>>
>>>>> I'd suggest a shorter name, like ravb_rpm_put() but (looking at this function)
>>>>>> off the Ethernet clocks (if no other request arrives at the driver).
>>>>>> After that if the interface is brought up (though ravb_open()) then
>>>>>> the clocks remain enabled until interface is brought down (operation
>>>>>> done though ravb_close()).
>>>>>>
>>>>>> If any request arrives to the driver while the interface is down the
>>>>>> clocks are enabled to serve the request and then disabled.
>>>>>>
>>>>>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
>>>>>> --- a/drivers/net/ethernet/renesas/ravb.h
>>>>>> +++ b/drivers/net/ethernet/renesas/ravb.h
>>>>>> @@ -1044,6 +1044,7 @@ struct ravb_hw_info {
>>>>>> unsigned magic_pkt:1; /* E-MAC supports magic packet detection */
>>>>>> unsigned half_duplex:1; /* E-MAC supports half duplex mode */
>>>>>> unsigned refclk_in_pd:1; /* Reference clock is part of a power domain. */
>>>>>> + unsigned rpm:1; /* Runtime PM available. */
>>>>>
>>>>> No, I don't think this flag makes any sense. We should support RPM
>>>>> unconditionally...
>>>
>>> If RPM calls work in the probe()/remove() methods, they should work
>>> in the ndo_{open|stop}() methods, right?
>>
>> It might depend on hardware support... E.g.
>>
>> I debugged it further the issue I had with this implementation on other
>> SoCs and it seems we cannot do RPM for those w/o reworking way the driver
>> is configured.
>>
>> I wiped out the RPM code from this patch and just called:
>>
>> pm_runtime_put_sync(); // [1]
>> usleep_range(300000, 400000); // [2]
>> pm_runtime_get_sync(); // [3]
>>
>> at the end of ravb_probe(); with this the interfaces fails to work. I
>> continue debugging it and interrogated CSR and this returns RESET after
>> [3]. I tried to switched it back to configuration mode after [3] but fails
>> to restore to a proper working state.
>>
>> Then continued to debug it further to see what happens on the clock driver.
>> The clk enable/disable reaches function at [4] which sets control_regs[reg]
>> which is one of the System module stop control registers. Setting this
>> activates module standby (AFICT). Switch to reset state on Ethernet IP
>> might be backed by note (2) on "Operating Mode Transitions Due to Hardware"
>> chapter of the G1H HW manual (which I don't fully understand).
>
> You mean 37A.3.1.3 (2) "Transition during power-off by module standby"?
Yes!
>
> The AVB-DMAC completes the bus master access in progress,
> and then shifts to reset mode. At this time, the operating mode
> configuration bits in the AVB-DMAC mode register (CCC.OPC) are
> set to B'00.
>
> "reset mode" could be interpreted as "register contents are reset (lost)".
> However, the R-Car Gen3 documentation contains the same paragraph,
> and register contents are known not to be lost...
I remember (from the debugging session I've run few weeks ago) that I
checked on G1H an Ethernet register before point [1] and after point [3]
and the values were the same (but I may be wrong, I need to double check it).
I will double check also the value of MSTOP for Ethernet on RZ/G3S (though
I checked that this worked on my code), maybe RZ/G3S doesn't go to standby,
I have a bug in my code and that's why it works for RZ/G3S...
Also, I see that the STANDBY state is missing from CCC.OPC documentation
(chapter "37A.3.1 AVB-DMAC Operating Modes" on RZ/G1H vs "31.5.1 DMAC
Operating Modes" on RZ/G3S).
>
> 37.7.2 for Ether ("sh-eth") states:
>
> After returning from the standby state, the ether should be reset
> and initialized.
Ok, I found that one in my G1H manual. It is not available on RZ/G3S
manual, though.
>
> Sergey: does sh_eth.c really reinitialize the hardware completely after
> pm_runtime_get_sync()?
>
>> Also, the manual of G1H states from some IPs that register state is
>> preserved in standby mode but not for AVB.
>
> Indeed, AFAIK all modules on SH/R-Mobile, R-Car, and RZ/G SoCs keep
> their register contents when in standby-mode (module standby enabled).
> On modules in a (not always-on) power area (e.g. SH/R-Mobile), register
> contents are lost when the power area is powered down.
> So I'd be surprised if EtherAVB behaves differently. Of course that
> is still possible, there are big difference between EtherAVB in R-Car
> Gen2 and RZ/G1, and the revision found in later SoC families.
>
>>>> The reasons I've limited only to RZ/G3S are:
>>>> 1/ I don't have all the platforms to test it
>>>
>>> That's a usual problem with the kernel development...
>>>
>>>> 2/ on G1H this doesn't work. I tried to debugged it but I don't have a
>>>> platform at hand, only remotely, and is hardly to debug once the
>>>> ethernet fails to work: probe is working(), open is executed, PHY is
>>>> initialized and then TX/RX is not working... don't know why ATM.
>>>
>>> That's why we have the long bug fixing period after -rc1...
>>
>> I prefer to not introduce any bug by intention.
>
> Iff register contents are lost on RZ/G1H, I'd rather add
> an extra clk_prepare_enable(priv->clk) to ravb_probe() on
> "renesas,etheravb-rcar-gen2"....
This should work, though I would go with a pm_runtime_put_noidle().
Thank you,
Claudiu Beznea
>
> Gr{oetje,eeting}s,
>
> Geert
>
next prev parent reply other threads:[~2023-11-27 14:46 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-20 8:45 [PATCH 00/13] net: ravb: Add suspend to RAM and runtime PM support for RZ/G3S Claudiu
2023-11-20 8:45 ` [PATCH 01/13] net: ravb: Check return value of reset_control_deassert() Claudiu
2023-11-20 19:03 ` Sergey Shtylyov
2023-11-21 5:59 ` claudiu beznea
2023-11-24 19:04 ` Sergey Shtylyov
2023-11-20 8:45 ` [PATCH 02/13] net: ravb: Use pm_runtime_resume_and_get() Claudiu
2023-11-20 19:23 ` Sergey Shtylyov
2023-11-21 5:57 ` claudiu beznea
2023-11-24 19:02 ` Sergey Shtylyov
2023-11-20 8:45 ` [PATCH 03/13] net: ravb: Make write access to CXR35 first before accessing other EMAC registers Claudiu
2023-11-20 19:44 ` Sergey Shtylyov
2023-11-21 6:02 ` claudiu beznea
2023-11-23 19:30 ` Sergey Shtylyov
2023-11-20 8:45 ` [PATCH 04/13] net: ravb: Start TX queues after HW initialization succeeded Claudiu
2023-11-20 19:49 ` Sergey Shtylyov
2023-11-20 8:45 ` [PATCH 05/13] net: ravb: Stop DMA in case of failures on ravb_open() Claudiu
2023-11-20 20:01 ` Sergey Shtylyov
2023-11-20 8:45 ` [PATCH 06/13] net: ravb: Let IP specific receive function to interrogate descriptors Claudiu
2023-11-23 16:37 ` Sergey Shtylyov
2023-11-23 16:48 ` Biju Das
2023-11-23 16:54 ` Sergey Shtylyov
2023-11-23 17:02 ` Biju Das
2023-11-23 17:15 ` claudiu beznea
2023-11-24 17:27 ` Sergey Shtylyov
2023-11-20 8:46 ` [PATCH 07/13] net: ravb: Rely on PM domain to enable gptp_clk Claudiu
2023-11-22 16:59 ` Sergey Shtylyov
2023-11-20 8:46 ` [PATCH 08/13] net: ravb: Rely on PM domain to enable refclk Claudiu
2023-11-22 17:31 ` Sergey Shtylyov
2023-11-23 8:48 ` Geert Uytterhoeven
2023-11-23 17:10 ` claudiu beznea
2023-11-23 19:26 ` Sergey Shtylyov
2023-11-20 8:46 ` [PATCH 09/13] net: ravb: Make reset controller support mandatory Claudiu
2023-11-21 18:46 ` Sergey Shtylyov
2023-11-24 8:07 ` Geert Uytterhoeven
2023-11-20 8:46 ` [PATCH 10/13] net: ravb: Switch to SYSTEM_SLEEP_PM_OPS()/RUNTIME_PM_OPS() and pm_ptr() Claudiu
2023-11-21 20:29 ` Sergey Shtylyov
2023-12-06 11:36 ` Geert Uytterhoeven
2023-11-20 8:46 ` [PATCH 11/13] net: ravb: Use tabs instead of spaces Claudiu
2023-11-21 18:43 ` Sergey Shtylyov
2023-11-20 8:46 ` [PATCH 12/13] net: ravb: Assert/deassert reset on suspend/resume Claudiu
2023-11-21 19:13 ` Sergey Shtylyov
2023-11-22 16:41 ` Sergey Shtylyov
2023-11-20 8:46 ` [PATCH 13/13] net: ravb: Add runtime PM support Claudiu
2023-11-22 16:25 ` Sergey Shtylyov
2023-11-23 17:04 ` claudiu beznea
2023-11-23 19:19 ` Sergey Shtylyov
2023-11-24 18:03 ` claudiu beznea
2023-11-27 14:05 ` Geert Uytterhoeven
2023-11-27 14:46 ` claudiu beznea [this message]
2023-11-28 9:23 ` claudiu beznea
2023-11-27 19:01 ` Sergey Shtylyov
2023-11-30 17:35 ` Simon Horman
2023-11-20 20:48 ` [PATCH 00/13] net: ravb: Add suspend to RAM and runtime PM support for RZ/G3S Sergey Shtylyov
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=ece2601d-9311-462b-8687-c241d889ec16@tuxon.dev \
--to=claudiu.beznea@tuxon.dev \
--cc=biju.das.jz@bp.renesas.com \
--cc=claudiu.beznea.uj@bp.renesas.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=geert@linux-m68k.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=masaru.nagai.vx@renesas.com \
--cc=mitsuhiro.kimura.kc@renesas.com \
--cc=netdev@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=s.shtylyov@omp.ru \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=wsa+renesas@sang-engineering.com \
--cc=yoshihiro.shimoda.uh@renesas.com \
/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).