>>> +static int avs_dsp_enable(struct avs_dev *adev, u32 core_mask) >>> +{ >>> + u32 mask; >>> + int ret; >>> + >>> + ret = avs_dsp_core_enable(adev, core_mask); >>> + if (ret < 0) >>> + return ret; >>> + >>> + mask = core_mask & ~AVS_MAIN_CORE_MASK; >> >> so here BIT(MAIN_CORE) is zero in mask > > > What's wrong with AVS_MAIN_CORE_MASK being used explicitly? > >>> + if (!mask) >>> + /* >>> + * without main core, fw is dead anyway >>> + * so setting D0 for it is futile. >> >> I don't get the comment, you explicitly discarded the main core with >> your logical AND above, so this test means that all other non-main cores >> are disabled. > > There is no setting D0 for MAIN_CORE as firmware is not operational > without it. Firmware needs to be notified about D3 -> D0 transitions > only in case of non-MAIN_COREs. the comment was about 'without main core'. This is difficult to follow, because you've discarded the main code in the if (!mask), so that's an always-true case, which makes the rest of the explanations not so clear.