soc: qcom: llcc: Do not create EDAC platform device on SDM845
[ Upstream commit cca94f1dd6
]
The platforms based on SDM845 SoC locks the access to EDAC registers in the
bootloader. So probing the EDAC driver will result in a crash. Hence,
disable the creation of EDAC platform device on all SDM845 devices.
The issue has been observed on Lenovo Yoga C630 and DB845c.
While at it, also sort the members of `struct qcom_llcc_config` to avoid
any holes in-between.
Cc: <stable@vger.kernel.org> # 5.10
Reported-by: Steev Klimaszewski <steev@kali.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230314080443.64635-15-manivannan.sadhasivam@linaro.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
bf9712195f
commit
b12078b67a
|
@ -101,10 +101,11 @@ struct llcc_slice_config {
|
|||
|
||||
struct qcom_llcc_config {
|
||||
const struct llcc_slice_config *sct_data;
|
||||
int size;
|
||||
bool need_llcc_cfg;
|
||||
const u32 *reg_offset;
|
||||
const struct llcc_edac_reg_offset *edac_reg_offset;
|
||||
int size;
|
||||
bool need_llcc_cfg;
|
||||
bool no_edac;
|
||||
};
|
||||
|
||||
enum llcc_reg_offset {
|
||||
|
@ -401,6 +402,7 @@ static const struct qcom_llcc_config sdm845_cfg = {
|
|||
.need_llcc_cfg = false,
|
||||
.reg_offset = llcc_v1_reg_offset,
|
||||
.edac_reg_offset = &llcc_v1_edac_reg_offset,
|
||||
.no_edac = true,
|
||||
};
|
||||
|
||||
static const struct qcom_llcc_config sm6350_cfg = {
|
||||
|
@ -851,11 +853,19 @@ static int qcom_llcc_probe(struct platform_device *pdev)
|
|||
|
||||
drv_data->ecc_irq = platform_get_irq_optional(pdev, 0);
|
||||
|
||||
llcc_edac = platform_device_register_data(&pdev->dev,
|
||||
"qcom_llcc_edac", -1, drv_data,
|
||||
sizeof(*drv_data));
|
||||
if (IS_ERR(llcc_edac))
|
||||
dev_err(dev, "Failed to register llcc edac driver\n");
|
||||
/*
|
||||
* On some platforms, the access to EDAC registers will be locked by
|
||||
* the bootloader. So probing the EDAC driver will result in a crash.
|
||||
* Hence, disable the creation of EDAC platform device for the
|
||||
* problematic platforms.
|
||||
*/
|
||||
if (!cfg->no_edac) {
|
||||
llcc_edac = platform_device_register_data(&pdev->dev,
|
||||
"qcom_llcc_edac", -1, drv_data,
|
||||
sizeof(*drv_data));
|
||||
if (IS_ERR(llcc_edac))
|
||||
dev_err(dev, "Failed to register llcc edac driver\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
|
|
Loading…
Reference in New Issue