Re: [PATCH v19 3/7] soc: mediatek: SVS: introduce MTK SVS engine
From: Roger Lu <hidden>
Date: 2021-07-02 09:19:20
Also in:
linux-devicetree, linux-mediatek, linux-pm, lkml
Hi Philipp, Thanks for the advice. On Fri, 2021-07-02 at 10:33 +0200, Philipp Zabel wrote:
Hi Roger, On Fri, 2021-07-02 at 11:12 +0800, Roger Lu wrote: [...]quoted
diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c new file mode 100644 index 000000000000..c2fcbc204b1d --- /dev/null +++ b/drivers/soc/mediatek/mtk-svs.c@@ -0,0 +1,1724 @@[...]quoted
+static int svs_suspend(struct device *dev) +{ + struct svs_platform *svsp = dev_get_drvdata(dev); + struct svs_bank *svsb; + unsigned long flags; + int ret; + u32 idx; + + for (idx = 0; idx < svsp->bank_num; idx++) { + svsb = &svsp->banks[idx]; + + /* Wait if svs_isr() is still in process. */ + spin_lock_irqsave(&mtk_svs_lock, flags); + svsp->pbank = svsb; + svs_switch_bank(svsp); + svs_writel(svsp, SVSB_EN_OFF, SVSEN); + svs_writel(svsp, SVSB_INTSTS_CLEAN, INTSTS); + spin_unlock_irqrestore(&mtk_svs_lock, flags); + + svsb->suspended = true; + if (svsb->phase != SVSB_PHASE_INIT01) { + svsb->phase = SVSB_PHASE_ERROR; + svs_adjust_pm_opp_volts(svsb, true); + } + } + + if (svsp->rst) {This is not necessary, reset_control_assert() checks for (rstc == NULL) itself.
Okay. We'll remove "if (svsp->rst) {" in the next patch. Thanks.
quoted
+ ret = reset_control_assert(svsp->rst); + if (ret) { + dev_err(svsp->dev, "cannot assert reset %d\n", ret); + return ret; + } + } + + clk_disable_unprepare(svsp->main_clk); + + return 0; +} + +static int svs_resume(struct device *dev) +{ + struct svs_platform *svsp = dev_get_drvdata(dev); + struct svs_bank *svsb; + int ret; + u32 idx; + + ret = clk_prepare_enable(svsp->main_clk); + if (ret) { + dev_err(svsp->dev, "cannot enable main_clk, disable svs\n"); + return ret; + } + + if (svsp->rst) {Same as above, reset_control_deassert(NULL) will just return 0.
Okay. We'll remove "if (svsp->rst) {" in the next patch. Thanks.quoted
+ ret = reset_control_deassert(svsp->rst); + if (ret) { + dev_err(svsp->dev, "cannot deassert reset %d\n", ret); + return ret; + } + } + + for (idx = 0; idx < svsp->bank_num; idx++) { + svsb = &svsp->banks[idx]; + svsb->suspended = false; + } + + ret = svs_init02(svsp); + if (ret) + return ret; + + svs_mon_mode(svsp); + + return 0; +}regards Philipp
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel