We developed a Matter product that uses external flash memory both for firmware updates as for storing application specific data. In the ncs-2.8.0 sdk release the flash is put into sleep mode when it is not used anymore. However this is done using pm_device_action_run that doesn't take into account that other parts of the application maybe still need access to the external flash. Therefore we propose to use pm_device_runtime_get and pm_device_runtime_put if CONFIG_PM_DEVICE_RUNTIME is enabled:
void DoAction(Action aAction) { #if defined(CONFIG_PM_DEVICE) && defined(CONFIG_NORDIC_QSPI_NOR) // utilize the QSPI driver sleep power mode const auto * qspi_dev = DEVICE_DT_GET(DT_INST(0, nordic_qspi_nor)); if (device_is_ready(qspi_dev)) { #if defined(CONFIG_PM_DEVICE_RUNTIME) if(Action::WAKE_UP == aAction) { pm_device_runtime_get(qspi_dev); } else { pm_device_runtime_put(qspi_dev); } #elif const auto requestedAction = Action::WAKE_UP == aAction ? PM_DEVICE_ACTION_RESUME : PM_DEVICE_ACTION_SUSPEND; (void) pm_device_action_run(qspi_dev, requestedAction); // not much can be done in case of a failure #endif } #endif }
This makes sure that the flash is only put into deep power mode when it is not used anywhere anymore.
Any feedback? Could this change be added to a next sdk release?