--- /dev/null
+Add option for L3 request without retry on failure
+
+This allows to attempt an orderly shutdown via L3 request while avoiding
+excessive delay in the failure case (up to 6 seconds with the currently
+hard-coded 3 attempts).
+--- a/src/g997/drv_dsl_cpe_api_g997_vrx.c
++++ b/src/g997/drv_dsl_cpe_api_g997_vrx.c
+@@ -1053,6 +1053,7 @@ DSL_Error_t DSL_DRV_DEV_G997_PowerManage
+ {
+ DSL_Error_t nErrCode = DSL_SUCCESS, nRet = DSL_SUCCESS;
+ DSL_int_t nAttempt = 0, i = 0;
++ DSL_int_t nAttemptCount = DSL_LX_TO_L3_ATTEMPT_COUNT;
+ const DSL_int_t nMaxRetry = DSL_LX_TO_L3_TIMEOUT/DSL_L3_WAIT_INTERVAL;
+ DSL_G997_PowerManagementStatusData_t PmStatus = {DSL_G997_PMS_NA};
+ DSL_VRX_L3RequestStatus_t L3RequestStatus = DSL_VRX_L3_STATUS_NA;
+@@ -1095,11 +1096,15 @@ DSL_Error_t DSL_DRV_DEV_G997_PowerManage
+ nErrCode = DSL_ERR_NOT_SUPPORTED_BY_DEVICE;
+ break;
+
++ case DSL_G997_PMSF_LX_TO_L3_NO_RETRY:
++ nAttemptCount = 1;
++ fallthrough;
++
+ case DSL_G997_PMSF_LX_TO_L3:
+ if (PmStatus.nPowerManagementStatus != DSL_G997_PMS_L3)
+ {
+ /* retry it DSL_LX_TO_L3_ATTEMPT_COUNT times */
+- for (nAttempt = 0; nAttempt < DSL_LX_TO_L3_ATTEMPT_COUNT; nAttempt++)
++ for (nAttempt = 0; nAttempt < nAttemptCount; nAttempt++)
+ {
+ /* L3 shutdown request*/
+ nErrCode = DSL_DRV_VRX_SendMsgShutdownRequest(pContext);
+--- a/src/include/drv_dsl_cpe_api_g997.h
++++ b/src/include/drv_dsl_cpe_api_g997.h
+@@ -1199,7 +1199,10 @@ typedef enum
+ procedure. After reaching the L3 state, the line shall remain in the L3 idle
+ state until it is forced into another state through this configuration
+ parameter. */
+- DSL_G997_PMSF_LX_TO_L3 = 3
++ DSL_G997_PMSF_LX_TO_L3 = 3,
++ /**
++ Same as above, but does not retry in case of failure. */
++ DSL_G997_PMSF_LX_TO_L3_NO_RETRY = 4
+ } DSL_G997_PowerManagementStateForce_t;
+
+ /**