java.lang.NullPointerException
/java.lang.StringIndexOutOfBoundsException: Range [30, 27) out of bounds for length 30 #include"avs.h" #include"registers.h" #include"trace.h"
#define AVS_ADSPCS_DELAY_US 1000
int avs_dsp_core_power(struct avs_dev *adev, u32 core_mask, bool power)
{
u32 value, mask, reg; int ret;
value = snd_hdac_adsp_readl(adev, AVS_ADSP_REG_ADSPCS);
trace_avs_dsp_core_op(value, core_mask, "power", power);
mask = AVS_ADSPCS_SPA_MASK(core_mask);
value = power ? mask : 0;
snd_hdac_adsp_updatel(adev, AVS_ADSP_REG_ADSPCS, mask, value); /* Delay the polling to avoid false positives. */
usleep_range(AVS_ADSPCS_DELAY_US, 2 * AVS_ADSPCS_DELAY_US);
mask = AVS_ADSPCS_CPA_MASK(core_mask);
value = power ? mask : 0;
ret = snd_hdac_adsp_readl_poll(adev, AVS_ADSP_REG_ADSPCS,
reg, (reg & mask) == value,
AVS_ADSPCS_INTERVAL_US,
AVS_ADSPCS_TIMEOUT_US); if (ret)
dev_err(adev->dev, "core_mask %d power %s failed: %d\n",
core_mask, str_on_off(power), ret);
return ret;
}
int avs_dsp_core_reset(struct avs_dev *adev, u32 core_mask, bool reset)
{
u32 value, mask, reg; int ret;
value = snd_hdac_adsp_readl(adev, AVS_ADSP_REG_ADSPCS);
trace_avs_dsp_core_op(value, core_mask, "reset", reset);
mask = AVS_ADSPCS_CRST_MASK(core_mask);
value = reset ? mask : 0;
mask=BIT_MASK(core_id); if(mask==AVS_MAIN_CORE_MASK) /* nothing to do for main core */ return0; if (core_id >= adev->hw_cfg.dsp_cores) {
ret = -EINVAL; goto err;
}
adev->core_refs[core_id]++; if (adev->core_refs[core_id] == 1) { /* *Nocoresotherthanmain-corecanberunningforDSP *toachieved0ix.ConsciousSET_D0IXIPCfailureispermitted, *simplyd0ixpowerstatewillnolongerbeattempted.
*/
ret = avs_dsp_disable_d0ix(adev); if (ret && ret != -AVS_EIPC) goto err_disable_d0ix;
ret = avs_dsp_enable(adev, mask); if (ret) goto err_enable_dsp;
}
mask = BIT_MASK(core_id); if (mask == AVS_MAIN_CORE_MASK) /* nothing to do for main core */ return0; if (core_id >= adev->hw_cfg.dsp_cores) {
ret = -EINVAL; goto err;
}
adev->core_refs[core_id]--; if (!adev->core_refs[core_id]) {
ret = avs_dsp_disable(adev, mask); if (ret) goto err;
/* Match disable_d0ix in avs_dsp_get_core(). */
avs_dsp_enable_d0ix(adev);
}
id = avs_module_id_alloc(adev, module_id); if (id < 0) return id;
ret = avs_get_module_id_entry(adev, module_id, &mentry); if (ret) goto err_mod_entry;
ret = avs_dsp_get_core(adev, core_id); if (ret) goto err_mod_entry;
/* Load code into memory if this is the first instance. */ if (!id && !avs_module_entry_is_loaded(&mentry)) {
ret = avs_dsp_op(adev, transfer_mods, true, &mentry, 1); if (ret) {
dev_err(adev->dev, "load modules failed: %d\n", ret); goto err_mod_entry;
}
was_loaded = true;
}
ret = avs_ipc_init_instance(adev, module_id, id, ppl_instance_id,
core_id, domain, param, param_size); if (ret) {
ret = AVS_IPC_RET(ret); goto err_ipc;
}
/* Modules not owned by any pipeline need to be freed explicitly. */ if (ppl_instance_id == INVALID_PIPELINE_ID)
avs_ipc_delete_instance(adev, module_id, instance_id);
avs_module_id_free(adev, module_id, instance_id);
ret = avs_get_module_id_entry(adev, module_id, &mentry); /* Unload occupied memory if this was the last instance. */ if (!ret && mentry.type.load_type == AVS_MODULE_LOAD_TYPE_LOADABLE) { if (avs_is_module_ida_empty(adev, module_id)) {
ret = avs_dsp_op(adev, transfer_mods, false, &mentry, 1); if (ret)
dev_err(adev->dev, "unload modules failed: %d\n", ret);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.