[PATCH v2 12/13] arm64: dts: imx8mm: add GPC node and power domains
Adam Ford
aford173 at gmail.com
Thu Feb 18 07:54:58 EST 2021
On Thu, Jan 14, 2021 at 4:39 AM Frieder Schrempf
<frieder.schrempf at kontron.de> wrote:
>
> On 09.12.20 16:26, Frieder Schrempf wrote:
> > Hi Lucas,
> >
> > On 05.11.20 18:44, Lucas Stach wrote:
> >> This adds the DT nodes to describe the power domains available on the
> >> i.MX8MM. Things are a bit more complex compared to other GPCv2 power
> >> domain setups, as there is now a hierarchy of domains where complete
> >> subsystems (HSIO, GPU, DISPLAY) can be gated as a whole, but also
> >> fine granular gating within those subsystems is possible.
> >>
> >> Note that this is still incomplete, as both VPU and DISP domains are
> >> missing their reset clocks. Those aren't directly sourced from the CCM,
> >> but have another level of clock gating in the BLKCTL of those domains,
> >> which needs a separate driver.
> >>
> >> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> >> ---
> >> arch/arm64/boot/dts/freescale/imx8mm.dtsi | 58 +++++++++++++++++++++++
> >> 1 file changed, 58 insertions(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/freescale/imx8mm.dtsi
> >> b/arch/arm64/boot/dts/freescale/imx8mm.dtsi
> >> index b83f400def8b..c21901a8aea9 100644
> >> --- a/arch/arm64/boot/dts/freescale/imx8mm.dtsi
> >> +++ b/arch/arm64/boot/dts/freescale/imx8mm.dtsi
> >> @@ -4,6 +4,8 @@
> >> */
> >> #include <dt-bindings/clock/imx8mm-clock.h>
> >> +#include <dt-bindings/power/imx8mm-power.h>
> >> +#include <dt-bindings/reset/imx8mq-reset.h>
> >> #include <dt-bindings/gpio/gpio.h>
> >> #include <dt-bindings/input/input.h>
> >> #include <dt-bindings/interrupt-controller/arm-gic.h>
> >> @@ -547,6 +549,62 @@
> >> interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
> >> #reset-cells = <1>;
> >> };
> >> +
> >> + gpc: gpc at 303a0000 {
> >> + compatible = "fsl,imx8mm-gpc";
> >> + reg = <0x303a0000 0x10000>;
> >> + interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
> >> + interrupt-parent = <&gic>;
> >> + interrupt-controller;
> >> + #interrupt-cells = <3>;
> >> +
> >> + pgc {
> >> + #address-cells = <1>;
> >> + #size-cells = <0>;
> >> +
> >> + pgc_hsiomix: power-domain at 0 {
> >> + #power-domain-cells = <0>;
> >> + reg = <IMX8MM_POWER_DOMAIN_HSIOMIX>;
> >> + clocks = <&clk IMX8MM_CLK_USB_BUS>;
> >> + };
> >> +
> >> + pgc_pcie: power-domain at 1 {
> >> + #power-domain-cells = <0>;
> >> + reg = <IMX8MM_POWER_DOMAIN_PCIE>;
> >> + power-domains = <&pgc_hsiomix>;
> >> + };
> >> +
> >> + pgc_otg1: power-domain at 2 {
> >> + #power-domain-cells = <0>;
> >> + reg = <IMX8MM_POWER_DOMAIN_OTG1>;
> >> + power-domains = <&pgc_hsiomix>;
> >> + };
> >> +
> >> + pgc_otg2: power-domain at 3 {
> >> + #power-domain-cells = <0>;
> >> + reg = <IMX8MM_POWER_DOMAIN_OTG2>;
> >> + power-domains = <&pgc_hsiomix>;
> >> + };
> >
> > I'm currently doing some testing on top of v5.10-rc with GPC, BLK-CTL,
> > DSIM, etc. I noticed that as soon as I add the nodes above for HSIO/OTG
> > (even without referencing them elsewhere) my system freezes on
> > suspend/resume.
> >
> > The same problem exists when I remove the power domains for HSIO/USB and
> > add the ones for DISPMIX and DSI to test Marek's work on BLK-CTL.
> >
> > I'm not really sure at what point exactly the system freezes but this is
> > what I see (no_console_suspend is set) and the system does not wake up
> > anymore:
> >
> > echo mem > /sys/power/state
> > [ 13.888711] PM: suspend entry (deep)
> > [ 13.892429] Filesystems sync: 0.000 seconds
> > [ 13.907231] Freezing user space processes ... (elapsed 0.031 seconds)
> > done.
> > [ 13.945407] OOM killer disabled.
> > [ 13.948642] Freezing remaining freezable tasks ... (elapsed 0.001
> > seconds) done.
> > [ 13.957216] printk: Suspending console(s) (use no_console_suspend to
> > debug)
>
> It seems like I failed to set no_console_suspend correctly. Here is a
> proper log with kernel 5.10.6. The system wakes up, but stalls.
>
> Can you reproduce this on your system?
>
[snip]
Frieder / Lucas,
I was able to get similar behavior on the Nano. I rebased Lucas'
patch on the 5.11 kernel, and applied the corresponding patches to my
Nano board. It works fine until the system sleeps, but after it
wakes, even the heartbeat LED stops beating. I don't know if there is
a conflict between TF-A and the gpc driver in there, or if the gpcv2
driver needs to do something differently to wake the system from
sleep.
# echo mem > /sys/power/state
[ 3754.346162] PM: suspend entry (deep)
[ 3754.349872] Filesystems sync: 0.000 seconds
[ 3754.387641] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 3754.395890] OOM killer disabled.
[ 3754.399141] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 3754.407674] printk: Suspending console(s) (use no_console_suspend to debug)
[ 3754.992015] Disabling non-boot CPUs ...
[ 3755.027902] i.mx8mm_thermal 30260000.tmu: failed to register
thermal zone sensor[0]: -517
[ 3755.036317] OOM killer enabled.
[ 3755.039467] Restarting tasks ... done.
[ 3755.050669] PM: suspend exit
root at imx8mmevk:~#
Then it hangs.
adam
More information about the linux-arm-kernel
mailing list