Commit eba9718e authored by Stephen Boyd's avatar Stephen Boyd Committed by Greg Kroah-Hartman

spmi: pmic-arb: Always allocate ppid_to_apid table

After commit 7f1d4e58 ("spmi: pmic-arb: optimize table
lookups") we always need the ppid_to_apid table regardless of the
version of pmic arbiter we have. Otherwise, we will try to deref
the array when we don't allocate it on v2 hardware like the
msm8974 SoCs.

Cc: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Cc: Kiran Gunda <kgunda@codeaurora.org>
Fixes: 7f1d4e58 ("spmi: pmic-arb: optimize table lookups")
Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Tested-by: default avatarLuca Weiss <luca@z3ntu.xyz>
Reviewed-by: default avatarKiran Gunda <kgunda@codeaurora.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6b71016e
...@@ -134,7 +134,6 @@ struct apid_data { ...@@ -134,7 +134,6 @@ struct apid_data {
* @spmic: SPMI controller object * @spmic: SPMI controller object
* @ver_ops: version dependent operations. * @ver_ops: version dependent operations.
* @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping table. * @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping table.
* v2 only.
*/ */
struct spmi_pmic_arb { struct spmi_pmic_arb {
void __iomem *rd_base; void __iomem *rd_base;
...@@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev) ...@@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev)
goto err_put_ctrl; goto err_put_ctrl;
} }
pa->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID,
sizeof(*pa->ppid_to_apid), GFP_KERNEL);
if (!pa->ppid_to_apid) {
err = -ENOMEM;
goto err_put_ctrl;
}
hw_ver = readl_relaxed(core + PMIC_ARB_VERSION); hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);
if (hw_ver < PMIC_ARB_VERSION_V2_MIN) { if (hw_ver < PMIC_ARB_VERSION_V2_MIN) {
...@@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev) ...@@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev)
err = PTR_ERR(pa->wr_base); err = PTR_ERR(pa->wr_base);
goto err_put_ctrl; goto err_put_ctrl;
} }
pa->ppid_to_apid = devm_kcalloc(&ctrl->dev,
PMIC_ARB_MAX_PPID,
sizeof(*pa->ppid_to_apid),
GFP_KERNEL);
if (!pa->ppid_to_apid) {
err = -ENOMEM;
goto err_put_ctrl;
}
} }
dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n", dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment