@@ -34,3 +34,14 @@ config BRIDGE_DEBUG
depends on MPU_BRIDGE
help
Say Y to enable Bridge debugging capabilities
+
+comment "Bridge Notifications"
+ depends on MPU_BRIDGE
+
+config BRIDGE_NTFY_PWRERR
+ bool "Notify DSP Power Error"
+ depends on MPU_BRIDGE
+ help
+ Enable notifications to registered clients on the event of power errror
+ trying to suspend bridge driver. Say Y, to signal this event as a fatal
+ error, this will require a bridge restart to recover.
@@ -192,7 +192,9 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd,
DSP_STATUS status = DSP_SOK;
#ifdef CONFIG_PM
struct CFG_HOSTRES resources;
+#ifdef CONFIG_BRIDGE_NTFY_PWRERR
struct DEH_MGR *hDehMgr;
+#endif /* CONFIG_BRIDGE_NTFY_PWRERR */
u16 usCount = TIHELEN_ACKTIMEOUT;
enum HW_PwrState_t pwrState, targetPwrState;
@@ -267,8 +269,10 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd,
if (!usCount) {
DBG_Trace(DBG_LEVEL7, "SleepDSP: Timed out Waiting for DSP"
" STANDBY %x \n", pwrState);
+#ifdef CONFIG_BRIDGE_NTFY_PWRERR
DEV_GetDehMgr(pDevContext->hDevObject, &hDehMgr);
WMD_DEH_Notify(hDehMgr, DSP_PWRERROR, 0);
+#endif /* CONFIG_BRIDGE_NTFY_PWRERR */
return WMD_E_TIMEOUT;
} else {
DBG_Trace(DBG_LEVEL7, "SleepDSP: DSP STANDBY Pwr state %x \n",
@@ -280,6 +280,7 @@ DBG_Trace(DBG_LEVEL6, "WMD_DEH_Notify: DSP_MMUFAULT, "
HW_MMU_EventAck(resources.dwDmmuBase,
HW_MMU_TRANSLATION_FAULT);
break;
+#ifdef CONFIG_BRIDGE_NTFY_PWRERR
case DSP_PWRERROR:
/* reset errInfo structure before use */
pDehMgr->errInfo.dwErrMask = DSP_PWRERROR;
@@ -290,6 +291,7 @@ DBG_Trace(DBG_LEVEL6, "WMD_DEH_Notify: DSP_MMUFAULT, "
printk(KERN_ERR "WMD_DEH_Notify: DSP_PWRERROR, errInfo "
"= 0x%x\n", dwErrInfo);
break;
+#endif /* CONFIG_BRIDGE_NTFY_PWRERR */
default:
DBG_Trace(DBG_LEVEL6,
"WMD_DEH_Notify: Unknown Error, errInfo = "