Message ID | 20230111074528.29354-12-roger.lu@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Enahance SVS's robustness | expand |
On 11/01/2023 08:45, Roger Lu wrote: > From: Matthias Brugger <matthias.bgg@gmail.com> > > The platform name and efuse parsing function pointer are only used while > probing the device. Use them from the svs_platform_data struct instead. > > Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com> > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > Signed-off-by: Roger Lu <roger.lu@mediatek.com> Applied, thanks! > --- > drivers/soc/mediatek/mtk-svs.c | 22 ++++++++++++---------- > 1 file changed, 12 insertions(+), 10 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c > index 9d9210c22289..bd23d1111d7b 100644 > --- a/drivers/soc/mediatek/mtk-svs.c > +++ b/drivers/soc/mediatek/mtk-svs.c > @@ -313,14 +313,12 @@ static const u32 svs_regs_v2[] = { > > /** > * struct svs_platform - svs platform control > - * @name: svs platform name > * @base: svs platform register base > * @dev: svs platform device > * @main_clk: main clock for svs bank > * @pbank: svs bank pointer needing to be protected by spin_lock section > * @banks: svs banks that svs platform supports > * @rst: svs platform reset control > - * @efuse_parsing: svs platform efuse parsing function pointer > * @efuse_max: total number of svs efuse > * @tefuse_max: total number of thermal efuse > * @regs: svs platform registers map > @@ -330,14 +328,12 @@ static const u32 svs_regs_v2[] = { > * @clk_cnt: clock count shows the clk enable/disable times by svs driver > */ > struct svs_platform { > - char *name; > void __iomem *base; > struct device *dev; > struct clk *main_clk; > struct svs_bank *pbank; > struct svs_bank *banks; > struct reset_control *rst; > - bool (*efuse_parsing)(struct svs_platform *svsp); > size_t efuse_max; > size_t tefuse_max; > const u32 *regs; > @@ -2066,7 +2062,7 @@ static bool svs_is_efuse_data_correct(struct svs_platform *svsp) > svsp->efuse_max /= sizeof(u32); > nvmem_cell_put(cell); > > - return svsp->efuse_parsing(svsp); > + return true; > } > > static struct device *svs_get_subsys_device(struct svs_platform *svsp, > @@ -2400,9 +2396,7 @@ static int svs_probe(struct platform_device *pdev) > return -ENOMEM; > > svsp->dev = &pdev->dev; > - svsp->name = svsp_data->name; > svsp->banks = svsp_data->banks; > - svsp->efuse_parsing = svsp_data->efuse_parsing; > svsp->regs = svsp_data->regs; > svsp->bank_max = svsp_data->bank_max; > > @@ -2413,6 +2407,12 @@ static int svs_probe(struct platform_device *pdev) > if (!svs_is_efuse_data_correct(svsp)) { > dev_notice(svsp->dev, "efuse data isn't correct\n"); > ret = -EPERM; > + goto svs_probe_free_efuse; > + } > + > + if (!svsp_data->efuse_parsing(svsp)) { > + dev_err(svsp->dev, "efuse data parsing failed\n"); > + ret = -EPERM; > goto svs_probe_free_resource; > } > > @@ -2448,7 +2448,7 @@ static int svs_probe(struct platform_device *pdev) > } > > ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr, > - IRQF_ONESHOT, svsp->name, svsp); > + IRQF_ONESHOT, svsp_data->name, svsp); > if (ret) { > dev_err(svsp->dev, "register irq(%d) failed: %d\n", > svsp_irq, ret); > @@ -2478,11 +2478,13 @@ static int svs_probe(struct platform_device *pdev) > svs_clk_disable(svsp); > > svs_probe_free_resource: > - if (!IS_ERR_OR_NULL(svsp->efuse)) > - kfree(svsp->efuse); > if (!IS_ERR_OR_NULL(svsp->tefuse)) > kfree(svsp->tefuse); > > +svs_probe_free_efuse: > + if (!IS_ERR_OR_NULL(svsp->efuse)) > + kfree(svsp->efuse); > + > return ret; > } >
diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c index 9d9210c22289..bd23d1111d7b 100644 --- a/drivers/soc/mediatek/mtk-svs.c +++ b/drivers/soc/mediatek/mtk-svs.c @@ -313,14 +313,12 @@ static const u32 svs_regs_v2[] = { /** * struct svs_platform - svs platform control - * @name: svs platform name * @base: svs platform register base * @dev: svs platform device * @main_clk: main clock for svs bank * @pbank: svs bank pointer needing to be protected by spin_lock section * @banks: svs banks that svs platform supports * @rst: svs platform reset control - * @efuse_parsing: svs platform efuse parsing function pointer * @efuse_max: total number of svs efuse * @tefuse_max: total number of thermal efuse * @regs: svs platform registers map @@ -330,14 +328,12 @@ static const u32 svs_regs_v2[] = { * @clk_cnt: clock count shows the clk enable/disable times by svs driver */ struct svs_platform { - char *name; void __iomem *base; struct device *dev; struct clk *main_clk; struct svs_bank *pbank; struct svs_bank *banks; struct reset_control *rst; - bool (*efuse_parsing)(struct svs_platform *svsp); size_t efuse_max; size_t tefuse_max; const u32 *regs; @@ -2066,7 +2062,7 @@ static bool svs_is_efuse_data_correct(struct svs_platform *svsp) svsp->efuse_max /= sizeof(u32); nvmem_cell_put(cell); - return svsp->efuse_parsing(svsp); + return true; } static struct device *svs_get_subsys_device(struct svs_platform *svsp, @@ -2400,9 +2396,7 @@ static int svs_probe(struct platform_device *pdev) return -ENOMEM; svsp->dev = &pdev->dev; - svsp->name = svsp_data->name; svsp->banks = svsp_data->banks; - svsp->efuse_parsing = svsp_data->efuse_parsing; svsp->regs = svsp_data->regs; svsp->bank_max = svsp_data->bank_max; @@ -2413,6 +2407,12 @@ static int svs_probe(struct platform_device *pdev) if (!svs_is_efuse_data_correct(svsp)) { dev_notice(svsp->dev, "efuse data isn't correct\n"); ret = -EPERM; + goto svs_probe_free_efuse; + } + + if (!svsp_data->efuse_parsing(svsp)) { + dev_err(svsp->dev, "efuse data parsing failed\n"); + ret = -EPERM; goto svs_probe_free_resource; } @@ -2448,7 +2448,7 @@ static int svs_probe(struct platform_device *pdev) } ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr, - IRQF_ONESHOT, svsp->name, svsp); + IRQF_ONESHOT, svsp_data->name, svsp); if (ret) { dev_err(svsp->dev, "register irq(%d) failed: %d\n", svsp_irq, ret); @@ -2478,11 +2478,13 @@ static int svs_probe(struct platform_device *pdev) svs_clk_disable(svsp); svs_probe_free_resource: - if (!IS_ERR_OR_NULL(svsp->efuse)) - kfree(svsp->efuse); if (!IS_ERR_OR_NULL(svsp->tefuse)) kfree(svsp->tefuse); +svs_probe_free_efuse: + if (!IS_ERR_OR_NULL(svsp->efuse)) + kfree(svsp->efuse); + return ret; }