Display driver crash while system suspend on Orin-NX 16G

Hi Nvidia

We are using orin-nx 16G module doing suspend test on customer barrier board with hdmi display output .
We found system may randomly reboot , due to nvidia_modeset driver crash while system enter to /resume from suspend.

kernel log as attached.
JetsonOrinNX-16G-DisplayDriver-Crash-In-Suspend.log (8.3 KB)

Is this is an known issue? We found it also happen on AGX Orin 32G(p2701-0004) module.

Due to suspend may cause system task hang and reboot, we would like to know how to disable suspend feature in devicetree file.

Blockquote
==method on 32.7.1==
psci {
nvidia,system-lp0-disable;
};

Which JetPack SW you’re using?

Hi Kayccc,

BSP 35.4.1 without Jetapck installed.

Regards

[ 2089.422291] MASTER_ID : DCE
[ 2089.422294] Address : 0xdc9ed80

Hi,

Above log should be okay and known issue.

But the panic you hit is not expected. How frequent did you hit that panic? We cannot reproduce that on our side.

Hi WayneWWW,

100 cycle may happen 2~5 times.

Due to kernel panic , is it possible to disable suspend feature as BSP 32.7.1 does in devicetree?

Regards

Hi,

Rel-35.4.1 needs this patch added first so that you can add that property to device tree.

diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index c70b8d6..6917a5f 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -2,7 +2,7 @@
 /*
  *
  * Copyright (C) 2015 ARM Limited
- * Copyright (C) 2021 NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (C) 2021-2022 NVIDIA CORPORATION.  All rights reserved.
  */
 
 #define pr_fmt(fmt) "psci: " fmt
@@ -504,6 +504,10 @@
 {
 	int err;
 
+#ifdef CONFIG_SUSPEND
+	system_lp0_disable = of_property_read_bool(np, "nvidia,system-lp0-disable");
+#endif
+
 	err = get_set_conduit_method(np);
 	if (err)
 		return err;
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index f402775..1db331a 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -330,6 +330,9 @@
 
 extern int pm_suspend(suspend_state_t state);
 extern bool sync_on_suspend_enabled;
+
+/* drivers/firmware/psci/psci.c */
+extern bool system_lp0_disable;
 #else /* !CONFIG_SUSPEND */
 #define suspend_valid_only_mem	NULL
 
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 4aa4d5d..4816c21 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -5,6 +5,7 @@
  * Copyright (c) 2003 Patrick Mochel
  * Copyright (c) 2003 Open Source Development Lab
  * Copyright (c) 2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
+ * Copyright (C) 2022 NVIDIA CORPORATION.  All rights reserved.
  */
 
 #define pr_fmt(fmt) "PM: " fmt
@@ -61,6 +62,8 @@
 enum s2idle_states __read_mostly s2idle_state;
 static DEFINE_RAW_SPINLOCK(s2idle_lock);
 
+bool system_lp0_disable;
+
 /**
  * pm_suspend_default_s2idle - Check if suspend-to-idle is the default suspend.
  *
@@ -170,7 +173,7 @@
 void __init pm_states_init(void)
 {
 	/* "mem" and "freeze" are always present in /sys/power/state. */
-	pm_states[PM_SUSPEND_MEM] = pm_labels[PM_SUSPEND_MEM];
+	pm_states[PM_SUSPEND_MEM] = system_lp0_disable ? NULL : pm_labels[PM_SUSPEND_MEM];
 	pm_states[PM_SUSPEND_TO_IDLE] = pm_labels[PM_SUSPEND_TO_IDLE];
 	/*
 	 * Suspend-to-idle should be supported even without any suspend_ops,

Device tree patch:

        psci {  
                compatible = "arm,psci-1.0";
                method = "smc";
+                nvidia,system-lp0-disable;
                status = "okay";
        };

Hi WayneWWW,

Thanks, we will add these patch to disable suspend feature.

Regards

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.