[PATCH v2 07/10] soc: mediatek: refine scysys for mediatek platforms
Matthias Brugger
matthias.bgg at gmail.com
Sat Feb 11 15:15:14 PST 2017
On 02/06/2017 01:15 PM, Mars Cheng wrote:
> This adds 2 refinements: avoid fixed spm power statue and add vdec item
>
Please be more explicit in the commit message.
> Signed-off-by: Mars Cheng <mars.cheng at mediatek.com>
> Signed-off-by: Kevin-CW Chen <kevin-cw.chen at mediatek.com>
> ---
> drivers/soc/mediatek/mtk-scpsys.c | 35 +++++++++++++++++++++++++++++------
> 1 file changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c
> index beb7916..a8ba800 100644
> --- a/drivers/soc/mediatek/mtk-scpsys.c
> +++ b/drivers/soc/mediatek/mtk-scpsys.c
> @@ -71,6 +71,7 @@ enum clk_id {
> CLK_VENC,
> CLK_VENC_LT,
> CLK_ETHIF,
> + CLK_VDEC,
> CLK_MAX,
> };
>
> @@ -81,6 +82,7 @@ enum clk_id {
> "venc",
> "venc_lt",
> "ethif",
> + "vdec",
> NULL,
> };
Put CLK_VDEC addition in the patch where you add support for mt6797.
Thanks,
Matthias
>
> @@ -107,21 +109,28 @@ struct scp_domain {
> struct regulator *supply;
> };
>
> +struct scp_ctrl_reg {
> + int pwr_sta_offs;
> + int pwr_sta2nd_offs;
> +};
> +
> struct scp {
> struct scp_domain *domains;
> struct genpd_onecell_data pd_data;
> struct device *dev;
> void __iomem *base;
> struct regmap *infracfg;
> + struct scp_ctrl_reg ctrl_reg;
> };
>
> static int scpsys_domain_is_on(struct scp_domain *scpd)
> {
> struct scp *scp = scpd->scp;
>
> - u32 status = readl(scp->base + SPM_PWR_STATUS) & scpd->data->sta_mask;
> - u32 status2 = readl(scp->base + SPM_PWR_STATUS_2ND) &
> - scpd->data->sta_mask;
> + u32 status = readl(scp->base + scp->ctrl_reg.pwr_sta_offs) &
> + scpd->data->sta_mask;
> + u32 status2 = readl(scp->base + scp->ctrl_reg.pwr_sta2nd_offs) &
> + scpd->data->sta_mask;
>
> /*
> * A domain is on when both status bits are set. If only one is set
> @@ -346,7 +355,8 @@ static void init_clks(struct platform_device *pdev, struct clk **clk)
> }
>
> static struct scp *init_scp(struct platform_device *pdev,
> - const struct scp_domain_data *scp_domain_data, int num)
> + const struct scp_domain_data *scp_domain_data, int num,
> + struct scp_ctrl_reg *scp_ctrl_reg)
> {
> struct genpd_onecell_data *pd_data;
> struct resource *res;
> @@ -358,6 +368,9 @@ static struct scp *init_scp(struct platform_device *pdev,
> if (!scp)
> return ERR_PTR(-ENOMEM);
>
> + scp->ctrl_reg.pwr_sta_offs = scp_ctrl_reg->pwr_sta_offs;
> + scp->ctrl_reg.pwr_sta2nd_offs = scp_ctrl_reg->pwr_sta2nd_offs;
> +
> scp->dev = &pdev->dev;
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -556,8 +569,13 @@ static void mtk_register_power_domains(struct platform_device *pdev,
> static int __init scpsys_probe_mt2701(struct platform_device *pdev)
> {
> struct scp *scp;
> + struct scp_ctrl_reg scp_reg;
>
> - scp = init_scp(pdev, scp_domain_data_mt2701, NUM_DOMAINS_MT2701);
> + scp_reg.pwr_sta_offs = SPM_PWR_STATUS;
> + scp_reg.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND;
> +
> + scp = init_scp(pdev, scp_domain_data_mt2701, NUM_DOMAINS_MT2701,
> + &scp_reg);
> if (IS_ERR(scp))
> return PTR_ERR(scp);
>
> @@ -667,8 +685,13 @@ static int __init scpsys_probe_mt8173(struct platform_device *pdev)
> struct scp *scp;
> struct genpd_onecell_data *pd_data;
> int ret;
> + struct scp_ctrl_reg scp_reg;
> +
> + scp_reg.pwr_sta_offs = SPM_PWR_STATUS;
> + scp_reg.pwr_sta2nd_offs = SPM_PWR_STATUS_2ND;
>
> - scp = init_scp(pdev, scp_domain_data_mt8173, NUM_DOMAINS_MT8173);
> + scp = init_scp(pdev, scp_domain_data_mt8173, NUM_DOMAINS_MT8173,
> + &scp_reg);
> if (IS_ERR(scp))
> return PTR_ERR(scp);
>
>
More information about the Linux-mediatek
mailing list