diff --git a/drivers/soc/qcom/cdsprm.c b/drivers/soc/qcom/cdsprm.c index 8b2961188d6d..c12b4ed1b0ec 100644 --- a/drivers/soc/qcom/cdsprm.c +++ b/drivers/soc/qcom/cdsprm.c @@ -617,29 +617,29 @@ static void qos_cores_init(struct device *dev) dev_err(dev, "kcalloc failed for cpucores\n"); gcdsprm.b_silver_en = false; - } + } else { + for (i = 0; i < gcdsprm.corecount; i++) { + err = of_property_read_u32_index(dev->of_node, + "qcom,qos-cores", i, &cpucores[i]); + if (err) { + dev_err(dev, + "%s: failed to read QOS coree for core:%d\n", + __func__, i); + gcdsprm.b_silver_en = false; + } + } - for (i = 0; i < gcdsprm.corecount; i++) { - err = of_property_read_u32_index(dev->of_node, - "qcom,qos-cores", i, &cpucores[i]); - if (err) { + gcdsprm.coreno = cpucores; + + gcdsprm.dev_pm_qos_req = kcalloc(gcdsprm.corecount, + sizeof(struct dev_pm_qos_request), GFP_KERNEL); + + if (gcdsprm.dev_pm_qos_req == NULL) { dev_err(dev, - "%s: failed to read QOS coree for core:%d\n", - __func__, i); + "kcalloc failed for dev_pm_qos_req\n"); gcdsprm.b_silver_en = false; } } - - gcdsprm.coreno = cpucores; - - gcdsprm.dev_pm_qos_req = kcalloc(gcdsprm.corecount, - sizeof(struct dev_pm_qos_request), GFP_KERNEL); - - if (gcdsprm.dev_pm_qos_req == NULL) { - dev_err(dev, - "kcalloc failed for dev_pm_qos_req\n"); - gcdsprm.b_silver_en = false; - } } } @@ -875,11 +875,11 @@ static int process_cdsp_request_thread(void *data) msg = &req->msg; - if ((msg->feature_id == SYSMON_CDSP_FEATURE_RM_RX) && + if (msg && (msg->feature_id == SYSMON_CDSP_FEATURE_RM_RX) && gcdsprm.b_qosinitdone) { process_rm_request(msg); - } else if (msg->feature_id == - SYSMON_CDSP_FEATURE_L3_RX) { + } else if (msg && (msg->feature_id == + SYSMON_CDSP_FEATURE_L3_RX)) { l3_clock_khz = msg->fs.l3_struct.l3_clock_khz; spin_lock_irqsave(&gcdsprm.l3_lock, flags); @@ -891,8 +891,8 @@ static int process_cdsp_request_thread(void *data) pr_debug("Set L3 clock %d done\n", l3_clock_khz); } - } else if (msg->feature_id == - SYSMON_CDSP_FEATURE_NPU_LIMIT_RX) { + } else if (msg && (msg->feature_id == + SYSMON_CDSP_FEATURE_NPU_LIMIT_RX)) { mutex_lock(&gcdsprm.npu_activity_lock); gcdsprm.set_corner_limit_cached = @@ -936,8 +936,8 @@ static int process_cdsp_request_thread(void *data) pr_err("rpmsg send failed %d\n", result); else pr_debug("NPU limit ack sent\n"); - } else if (msg->feature_id == - SYSMON_CDSP_FEATURE_VERSION_RX) { + } else if (msg && (msg->feature_id == + SYSMON_CDSP_FEATURE_VERSION_RX)) { cdsprm_rpmsg_send_details(); pr_debug("Sent preserved data to DSP\n"); }