* NOC (interconnect) lockup on i.MX8MP during resume
@ 2023-03-09 14:57 Alexander Stein
2023-03-09 15:03 ` Ahmad Fatoum
2023-03-13 19:17 ` Adam Ford
0 siblings, 2 replies; 5+ messages in thread
From: Alexander Stein @ 2023-03-09 14:57 UTC (permalink / raw)
To: linux-arm-kernel, linux-pm; +Cc: Pengutronix Kernel Team
Hi,
while debugging another issue regarding suspend/resume I noticed that the imx
interconnect driver locks up the system when writing into registers. This
happens during resume of the 'g2' power domain. imx8m_blk_ctrl_power_on()
will eventually call down to imx_icc_node_set(). Using the debug diff furthe
down I get this output:
[ 71.493062] imx_icc_node_set: node: VPU G2
[ 71.497163] imx_icc_node_set: peak_bw: 1
[ 71.501091] imx_icc_node_set: prio: 0x80000303
<freeze here>
Unfortunately there is absolutely no documentation regarding NOC in the
reference manual, so no idea whats happening here.
This is on next-20230309 using imx8mp-tqma8mpql-mba8mpxl.dts with USB
disabled (prevents suspend) and Ethernet-PHY-IRQ disabled (the issue I'm
tackling).
Is there some idea what do in order to support resume on i.MX8MP?
Best regards,
Alexander
---8<---
diff --git a/drivers/interconnect/imx/imx.c b/drivers/interconnect/imx/imx.c
index 979ed610f704..93ec79cc7c06 100644
--- a/drivers/interconnect/imx/imx.c
+++ b/drivers/interconnect/imx/imx.c
@@ -44,13 +44,18 @@ static int imx_icc_node_set(struct icc_node *node)
u32 prio;
u64 freq;
+ pr_info("%s: node: %s\n", __func__, node->name);
+ pr_info("%s: peak_bw: %u\n", __func__, node->peak_bw);
if (node_data->setting && node->peak_bw) {
base = node_data->setting->reg + node_data->imx_provider->noc_base;
if (node_data->setting->mode == IMX_NOC_MODE_FIXED) {
prio = node_data->setting->prio_level;
prio = PRIORITY_COMP_MARK | (prio << 8) | prio;
+ pr_info("%s: prio: %#x\n", __func__, prio);
writel(prio, base + IMX_NOC_PRIO_REG);
+ pr_info("%s: mode: %#x\n", __func__, node_data->setting->mode);
writel(node_data->setting->mode, base + IMX_NOC_MODE_REG);
+ pr_info("%s: ext_control: #%x\n", __func__, node_data->setting->ext_control);
writel(node_data->setting->ext_control, base + IMX_NOC_EXT_CTL_REG);
dev_dbg(dev, "%s: mode: 0x%x, prio: 0x%x, ext_control: 0x%x\n",
node_data->desc->name, node_data->setting->mode, prio,
---8<---
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: NOC (interconnect) lockup on i.MX8MP during resume
2023-03-09 14:57 NOC (interconnect) lockup on i.MX8MP during resume Alexander Stein
@ 2023-03-09 15:03 ` Ahmad Fatoum
2023-03-09 15:17 ` Alexander Stein
2023-03-13 19:17 ` Adam Ford
1 sibling, 1 reply; 5+ messages in thread
From: Ahmad Fatoum @ 2023-03-09 15:03 UTC (permalink / raw)
To: Alexander Stein, linux-arm-kernel, linux-pm; +Cc: Pengutronix Kernel Team
Hello Alexander,
On 09.03.23 15:57, Alexander Stein wrote:
> Hi,
>
> while debugging another issue regarding suspend/resume I noticed that the imx
> interconnect driver locks up the system when writing into registers. This
> happens during resume of the 'g2' power domain. imx8m_blk_ctrl_power_on()
> will eventually call down to imx_icc_node_set(). Using the debug diff furthe
> down I get this output:
>
> [ 71.493062] imx_icc_node_set: node: VPU G2
> [ 71.497163] imx_icc_node_set: peak_bw: 1
> [ 71.501091] imx_icc_node_set: prio: 0x80000303
> <freeze here>
>
> Unfortunately there is absolutely no documentation regarding NOC in the
> reference manual, so no idea whats happening here.
> This is on next-20230309 using imx8mp-tqma8mpql-mba8mpxl.dts with USB
> disabled (prevents suspend) and Ethernet-PHY-IRQ disabled (the issue I'm
> tackling).
> Is there some idea what do in order to support resume on i.MX8MP?
Could it be that you don't have a fully featured 8MP, but a 8MPUL
or 8MPL, which lacks VPUs? In that case, it's not enough to disable
the VPU nodes in the DT, but you need to disable the VPU power domains as well.
Cheers,
Ahmad
>
> Best regards,
> Alexander
>
> ---8<---
> diff --git a/drivers/interconnect/imx/imx.c b/drivers/interconnect/imx/imx.c
> index 979ed610f704..93ec79cc7c06 100644
> --- a/drivers/interconnect/imx/imx.c
> +++ b/drivers/interconnect/imx/imx.c
> @@ -44,13 +44,18 @@ static int imx_icc_node_set(struct icc_node *node)
> u32 prio;
> u64 freq;
>
> + pr_info("%s: node: %s\n", __func__, node->name);
> + pr_info("%s: peak_bw: %u\n", __func__, node->peak_bw);
> if (node_data->setting && node->peak_bw) {
> base = node_data->setting->reg + node_data->imx_provider->noc_base;
> if (node_data->setting->mode == IMX_NOC_MODE_FIXED) {
> prio = node_data->setting->prio_level;
> prio = PRIORITY_COMP_MARK | (prio << 8) | prio;
> + pr_info("%s: prio: %#x\n", __func__, prio);
> writel(prio, base + IMX_NOC_PRIO_REG);
> + pr_info("%s: mode: %#x\n", __func__, node_data->setting->mode);
> writel(node_data->setting->mode, base + IMX_NOC_MODE_REG);
> + pr_info("%s: ext_control: #%x\n", __func__, node_data->setting->ext_control);
> writel(node_data->setting->ext_control, base + IMX_NOC_EXT_CTL_REG);
> dev_dbg(dev, "%s: mode: 0x%x, prio: 0x%x, ext_control: 0x%x\n",
> node_data->desc->name, node_data->setting->mode, prio,
> ---8<---
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: NOC (interconnect) lockup on i.MX8MP during resume
2023-03-09 15:03 ` Ahmad Fatoum
@ 2023-03-09 15:17 ` Alexander Stein
0 siblings, 0 replies; 5+ messages in thread
From: Alexander Stein @ 2023-03-09 15:17 UTC (permalink / raw)
To: linux-arm-kernel, linux-pm, Ahmad Fatoum; +Cc: Pengutronix Kernel Team
Hi Ahmad,
Am Donnerstag, 9. März 2023, 16:03:26 CET schrieb Ahmad Fatoum:
> Hello Alexander,
>
> On 09.03.23 15:57, Alexander Stein wrote:
> > Hi,
> >
> > while debugging another issue regarding suspend/resume I noticed that the
> > imx interconnect driver locks up the system when writing into registers.
> > This happens during resume of the 'g2' power domain.
> > imx8m_blk_ctrl_power_on() will eventually call down to
> > imx_icc_node_set(). Using the debug diff furthe down I get this output:
> >
> > [ 71.493062] imx_icc_node_set: node: VPU G2
> > [ 71.497163] imx_icc_node_set: peak_bw: 1
> > [ 71.501091] imx_icc_node_set: prio: 0x80000303
> > <freeze here>
> >
> > Unfortunately there is absolutely no documentation regarding NOC in the
> > reference manual, so no idea whats happening here.
> > This is on next-20230309 using imx8mp-tqma8mpql-mba8mpxl.dts with USB
> > disabled (prevents suspend) and Ethernet-PHY-IRQ disabled (the issue I'm
> > tackling).
> > Is there some idea what do in order to support resume on i.MX8MP?
>
> Could it be that you don't have a fully featured 8MP, but a 8MPUL
> or 8MPL, which lacks VPUs? In that case, it's not enough to disable
> the VPU nodes in the DT, but you need to disable the VPU power domains as
> well.
That's reasonable to question this, but in this case this is a full-fledged
8MP. I just noticed that during boot those settings are done as well and there
I get the (expected) output:
[ 12.696371] imx_icc_node_set: node: VPU G2
[ 12.700472] imx_icc_node_set: peak_bw: 1
[ 12.704401] imx_icc_node_set: prio: 0x80000303
[ 12.708850] imx_icc_node_set: mode: 0x0
[ 12.712691] imx_icc_node_set: ext_control: #0
[ 12.717053] imx_icc_node_set: node: NOC_VIDEO
[ 12.721419] imx_icc_node_set: peak_bw: 1
So there is something wrong during resume. Both clk_ignore_unused
pd_ignore_unused did not help.
Best regards,
Alexander
> Cheers,
> Ahmad
>
> > Best regards,
> > Alexander
> >
> > ---8<---
> > diff --git a/drivers/interconnect/imx/imx.c
> > b/drivers/interconnect/imx/imx.c index 979ed610f704..93ec79cc7c06 100644
> > --- a/drivers/interconnect/imx/imx.c
> > +++ b/drivers/interconnect/imx/imx.c
> > @@ -44,13 +44,18 @@ static int imx_icc_node_set(struct icc_node *node)
> >
> > u32 prio;
> > u64 freq;
> >
> > + pr_info("%s: node: %s\n", __func__, node->name);
> > + pr_info("%s: peak_bw: %u\n", __func__, node->peak_bw);
> >
> > if (node_data->setting && node->peak_bw) {
> >
> > base = node_data->setting->reg +
> > node_data->imx_provider->noc_base;
> > if (node_data->setting->mode == IMX_NOC_MODE_FIXED) {
> >
> > prio = node_data->setting->prio_level;
> > prio = PRIORITY_COMP_MARK | (prio << 8) | prio;
> >
> > + pr_info("%s: prio: %#x\n", __func__, prio);
> >
> > writel(prio, base + IMX_NOC_PRIO_REG);
> >
> > + pr_info("%s: mode: %#x\n", __func__,
> > node_data->setting->mode);>
> > writel(node_data->setting->mode, base +
> > IMX_NOC_MODE_REG);
> >
> > + pr_info("%s: ext_control: #%x\n", __func__,
> > node_data->setting->ext_control);>
> > writel(node_data->setting->ext_control, base +
> > IMX_NOC_EXT_CTL_REG);
> > dev_dbg(dev, "%s: mode: 0x%x, prio: 0x%x,
> > ext_control: 0x%x\n",
> >
> > node_data->desc->name,
> > node_data->setting->mode, prio,
> >
> > ---8<---
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: NOC (interconnect) lockup on i.MX8MP during resume
2023-03-09 14:57 NOC (interconnect) lockup on i.MX8MP during resume Alexander Stein
2023-03-09 15:03 ` Ahmad Fatoum
@ 2023-03-13 19:17 ` Adam Ford
2023-03-14 7:39 ` Alexander Stein
1 sibling, 1 reply; 5+ messages in thread
From: Adam Ford @ 2023-03-13 19:17 UTC (permalink / raw)
To: Alexander Stein; +Cc: linux-arm-kernel, linux-pm, Pengutronix Kernel Team
On Thu, Mar 9, 2023 at 9:11 AM Alexander Stein
<alexander.stein@ew.tq-group.com> wrote:
>
> Hi,
>
> while debugging another issue regarding suspend/resume I noticed that the imx
> interconnect driver locks up the system when writing into registers. This
> happens during resume of the 'g2' power domain. imx8m_blk_ctrl_power_on()
> will eventually call down to imx_icc_node_set(). Using the debug diff furthe
> down I get this output:
>
> [ 71.493062] imx_icc_node_set: node: VPU G2
> [ 71.497163] imx_icc_node_set: peak_bw: 1
> [ 71.501091] imx_icc_node_set: prio: 0x80000303
> <freeze here>
>
> Unfortunately there is absolutely no documentation regarding NOC in the
> reference manual, so no idea whats happening here.
> This is on next-20230309 using imx8mp-tqma8mpql-mba8mpxl.dts with USB
> disabled (prevents suspend) and Ethernet-PHY-IRQ disabled (the issue I'm
> tackling).
> Is there some idea what do in order to support resume on i.MX8MP?
I haven't played with suspend-resume myself, but there was a thread
[1] with discussions about fixing a race condition on the imx8mp
interconnect.
adam
[1] - https://lore.kernel.org/lkml/20230201101559.15529-5-johan+linaro@kernel.org/
>
> Best regards,
> Alexander
>
> ---8<---
> diff --git a/drivers/interconnect/imx/imx.c b/drivers/interconnect/imx/imx.c
> index 979ed610f704..93ec79cc7c06 100644
> --- a/drivers/interconnect/imx/imx.c
> +++ b/drivers/interconnect/imx/imx.c
> @@ -44,13 +44,18 @@ static int imx_icc_node_set(struct icc_node *node)
> u32 prio;
> u64 freq;
>
> + pr_info("%s: node: %s\n", __func__, node->name);
> + pr_info("%s: peak_bw: %u\n", __func__, node->peak_bw);
> if (node_data->setting && node->peak_bw) {
> base = node_data->setting->reg + node_data->imx_provider->noc_base;
> if (node_data->setting->mode == IMX_NOC_MODE_FIXED) {
> prio = node_data->setting->prio_level;
> prio = PRIORITY_COMP_MARK | (prio << 8) | prio;
> + pr_info("%s: prio: %#x\n", __func__, prio);
> writel(prio, base + IMX_NOC_PRIO_REG);
> + pr_info("%s: mode: %#x\n", __func__, node_data->setting->mode);
> writel(node_data->setting->mode, base + IMX_NOC_MODE_REG);
> + pr_info("%s: ext_control: #%x\n", __func__, node_data->setting->ext_control);
> writel(node_data->setting->ext_control, base + IMX_NOC_EXT_CTL_REG);
> dev_dbg(dev, "%s: mode: 0x%x, prio: 0x%x, ext_control: 0x%x\n",
> node_data->desc->name, node_data->setting->mode, prio,
> ---8<---
>
> --
> TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> Amtsgericht München, HRB 105018
> Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> http://www.tq-group.com/
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: NOC (interconnect) lockup on i.MX8MP during resume
2023-03-13 19:17 ` Adam Ford
@ 2023-03-14 7:39 ` Alexander Stein
0 siblings, 0 replies; 5+ messages in thread
From: Alexander Stein @ 2023-03-14 7:39 UTC (permalink / raw)
To: Adam Ford; +Cc: linux-arm-kernel, linux-pm, Pengutronix Kernel Team
Hi Adam,
Am Montag, 13. März 2023, 20:17:55 CET schrieb Adam Ford:
> On Thu, Mar 9, 2023 at 9:11 AM Alexander Stein
>
> <alexander.stein@ew.tq-group.com> wrote:
> > Hi,
> >
> > while debugging another issue regarding suspend/resume I noticed that the
> > imx interconnect driver locks up the system when writing into registers.
> > This happens during resume of the 'g2' power domain.
> > imx8m_blk_ctrl_power_on() will eventually call down to
> > imx_icc_node_set(). Using the debug diff furthe down I get this output:
> >
> > [ 71.493062] imx_icc_node_set: node: VPU G2
> > [ 71.497163] imx_icc_node_set: peak_bw: 1
> > [ 71.501091] imx_icc_node_set: prio: 0x80000303
> > <freeze here>
> >
> > Unfortunately there is absolutely no documentation regarding NOC in the
> > reference manual, so no idea whats happening here.
> > This is on next-20230309 using imx8mp-tqma8mpql-mba8mpxl.dts with USB
> > disabled (prevents suspend) and Ethernet-PHY-IRQ disabled (the issue I'm
> > tackling).
> > Is there some idea what do in order to support resume on i.MX8MP?
>
> I haven't played with suspend-resume myself, but there was a thread
> [1] with discussions about fixing a race condition on the imx8mp
> interconnect.
Thanks for this link, but I think this is addressing a race condition during
(un)registering. This works for me so far. I'm dealing with a freezing
hardware write upon resume.
Best regards,
Alexander
> adam
>
> [1] -
> https://lore.kernel.org/lkml/20230201101559.15529-5-johan+linaro@kernel.org
> /
> > Best regards,
> > Alexander
> >
> > ---8<---
> > diff --git a/drivers/interconnect/imx/imx.c
> > b/drivers/interconnect/imx/imx.c index 979ed610f704..93ec79cc7c06 100644
> > --- a/drivers/interconnect/imx/imx.c
> > +++ b/drivers/interconnect/imx/imx.c
> > @@ -44,13 +44,18 @@ static int imx_icc_node_set(struct icc_node *node)
> >
> > u32 prio;
> > u64 freq;
> >
> > + pr_info("%s: node: %s\n", __func__, node->name);
> > + pr_info("%s: peak_bw: %u\n", __func__, node->peak_bw);
> >
> > if (node_data->setting && node->peak_bw) {
> >
> > base = node_data->setting->reg +
> > node_data->imx_provider->noc_base;
> > if (node_data->setting->mode == IMX_NOC_MODE_FIXED) {
> >
> > prio = node_data->setting->prio_level;
> > prio = PRIORITY_COMP_MARK | (prio << 8) | prio;
> >
> > + pr_info("%s: prio: %#x\n", __func__, prio);
> >
> > writel(prio, base + IMX_NOC_PRIO_REG);
> >
> > + pr_info("%s: mode: %#x\n", __func__,
> > node_data->setting->mode);>
> > writel(node_data->setting->mode, base +
> > IMX_NOC_MODE_REG);
> >
> > + pr_info("%s: ext_control: #%x\n", __func__,
> > node_data->setting->ext_control);>
> > writel(node_data->setting->ext_control, base +
> > IMX_NOC_EXT_CTL_REG);
> > dev_dbg(dev, "%s: mode: 0x%x, prio: 0x%x,
> > ext_control: 0x%x\n",
> >
> > node_data->desc->name,
> > node_data->setting->mode, prio,
> >
> > ---8<---
> >
> > --
> > TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> > Amtsgericht München, HRB 105018
> > Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> > http://www.tq-group.com/
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-03-14 7:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-09 14:57 NOC (interconnect) lockup on i.MX8MP during resume Alexander Stein
2023-03-09 15:03 ` Ahmad Fatoum
2023-03-09 15:17 ` Alexander Stein
2023-03-13 19:17 ` Adam Ford
2023-03-14 7:39 ` Alexander Stein
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).