Message ID | 20231118-b4-camss-named-power-domains-v5-5-55eb0f35a30a@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: qcom: camss: Introduce support for named power-domains | expand |
On 11/18/23 13:11, Bryan O'Donoghue wrote: > Right now we use fixed indexes to assign power-domains, with a > requirement for the TOP GDSC to come last in the list. > > Adding support for named power-domains means the declaration in the dtsi > can come in any order. > > After this change we continue to support the old indexing - if a SoC > resource declaration or the in-use dtb doesn't declare power-domain names > we fall back to the default legacy indexing. > > From this point on though new SoC additions should contain named > power-domains, eventually we will drop support for legacy indexing. > > Tested-by: Matti Lehtimäki <matti.lehtimaki@gmail.com> > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > --- So, this commit should be a NOP within this series? res->pd_name isn't defined anywhere afaics Konrad
On 22/11/2023 19:55, Konrad Dybcio wrote: > > > On 11/18/23 13:11, Bryan O'Donoghue wrote: >> Right now we use fixed indexes to assign power-domains, with a >> requirement for the TOP GDSC to come last in the list. >> >> Adding support for named power-domains means the declaration in the dtsi >> can come in any order. >> >> After this change we continue to support the old indexing - if a SoC >> resource declaration or the in-use dtb doesn't declare power-domain names >> we fall back to the default legacy indexing. >> >> From this point on though new SoC additions should contain named >> power-domains, eventually we will drop support for legacy indexing. >> >> Tested-by: Matti Lehtimäki <matti.lehtimaki@gmail.com> >> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> >> --- > So, this commit should be a NOP within this series? > > res->pd_name isn't defined anywhere afaics > > Konrad This series is mergeable though the linux-media tree standalone, yes. Once merged, the dtsi change given in the cover letter will be submitted. The sm8250 change is posted here : https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/b4/b4-camss-named-power-domains-v5+sm8250 --- bod
On 11/22/23 21:55, Bryan O'Donoghue wrote: > On 22/11/2023 19:55, Konrad Dybcio wrote: >> >> >> On 11/18/23 13:11, Bryan O'Donoghue wrote: >>> Right now we use fixed indexes to assign power-domains, with a >>> requirement for the TOP GDSC to come last in the list. >>> >>> Adding support for named power-domains means the declaration in the dtsi >>> can come in any order. >>> >>> After this change we continue to support the old indexing - if a SoC >>> resource declaration or the in-use dtb doesn't declare power-domain names >>> we fall back to the default legacy indexing. >>> >>> From this point on though new SoC additions should contain named >>> power-domains, eventually we will drop support for legacy indexing. >>> >>> Tested-by: Matti Lehtimäki <matti.lehtimaki@gmail.com> >>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> >>> --- >> So, this commit should be a NOP within this series? >> >> res->pd_name isn't defined anywhere afaics >> >> Konrad > > This series is mergeable though the linux-media tree standalone, yes. > > Once merged, the dtsi change given in the cover letter will be submitted. What I meant to say is that something similar to [1] is missing to make use of the infra introduced with this patch. Konrad [1] https://git.codelinaro.org/bryan.odonoghue/kernel/-/commit/f43942091c01c1f263a6e7adbcd0ed8ce723a303
On 23/11/2023 11:49, Konrad Dybcio wrote: > > > On 11/22/23 21:55, Bryan O'Donoghue wrote: >> On 22/11/2023 19:55, Konrad Dybcio wrote: >>> >>> >>> On 11/18/23 13:11, Bryan O'Donoghue wrote: >>>> Right now we use fixed indexes to assign power-domains, with a >>>> requirement for the TOP GDSC to come last in the list. >>>> >>>> Adding support for named power-domains means the declaration in the >>>> dtsi >>>> can come in any order. >>>> >>>> After this change we continue to support the old indexing - if a SoC >>>> resource declaration or the in-use dtb doesn't declare power-domain >>>> names >>>> we fall back to the default legacy indexing. >>>> >>>> From this point on though new SoC additions should contain named >>>> power-domains, eventually we will drop support for legacy indexing. >>>> >>>> Tested-by: Matti Lehtimäki <matti.lehtimaki@gmail.com> >>>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> >>>> --- >>> So, this commit should be a NOP within this series? >>> >>> res->pd_name isn't defined anywhere afaics >>> >>> Konrad >> >> This series is mergeable though the linux-media tree standalone, yes. >> >> Once merged, the dtsi change given in the cover letter will be submitted. > What I meant to say is that something similar to [1] is missing to > make use of the infra introduced with this patch. > > Konrad > > [1] > https://git.codelinaro.org/bryan.odonoghue/kernel/-/commit/f43942091c01c1f263a6e7adbcd0ed8ce723a303 Yeah, to be honest I debated with myself whether or not to include that patch since once defined the code here will execute looking for named pd. I'm not opposed to sending a v6 to include this additional change though, I've thoroughly tested on rb5. --- bod
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c index defff24f07ce3..123e5ead7602d 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -1382,7 +1382,29 @@ int msm_vfe_subdev_init(struct camss *camss, struct vfe_device *vfe, if (!res->line_num) return -EINVAL; - if (res->has_pd) { + /* Power domain */ + + if (res->pd_name) { + vfe->genpd = dev_pm_domain_attach_by_name(camss->dev, + res->pd_name); + if (IS_ERR(vfe->genpd)) { + ret = PTR_ERR(vfe->genpd); + return ret; + } + } + + if (!vfe->genpd && res->has_pd) { + /* + * Legacy magic index. + * Requires + * power-domain = <VFE_X>, + * <VFE_Y>, + * <TITAN_TOP> + * id must correspondng to the index of the VFE which must + * come before the TOP GDSC. VFE Lite has no individually + * collapasible domain which is why id < vfe_num is a valid + * check. + */ vfe->genpd = dev_pm_domain_attach_by_id(camss->dev, id); if (IS_ERR(vfe->genpd)) { ret = PTR_ERR(vfe->genpd); diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c index 5f7a3b17e25d7..ee3e8cefa9b1f 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -1522,12 +1522,28 @@ static int camss_configure_pd(struct camss *camss) return 0; /* - * VFE power domains are in the beginning of the list, and while all - * power domains should be attached, only if TITAN_TOP power domain is - * found in the list, it should be linked over here. + * If a power-domain name is defined try to use it. + * It is possible we are running a new kernel with an old dtb so + * fallback to indexes even if a pd_name is defined but not found. */ - camss->genpd = dev_pm_domain_attach_by_id(camss->dev, camss->genpd_num - 1); - if (IS_ERR(camss->genpd)) { + if (camss->res->pd_name) { + camss->genpd = dev_pm_domain_attach_by_name(camss->dev, + camss->res->pd_name); + if (IS_ERR(camss->genpd)) { + ret = PTR_ERR(camss->genpd); + goto fail_pm; + } + } + + if (!camss->genpd) { + /* + * Legacy magic index. TITAN_TOP GDSC must be the last + * item in the power-domain list. + */ + camss->genpd = dev_pm_domain_attach_by_id(camss->dev, + camss->genpd_num - 1); + } + if (IS_ERR_OR_NULL(camss->genpd)) { ret = PTR_ERR(camss->genpd); goto fail_pm; } diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h index 1ba824a2cb76c..cd8186fe1797b 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -48,6 +48,7 @@ struct camss_subdev_resources { u32 clock_rate[CAMSS_RES_MAX][CAMSS_RES_MAX]; char *reg[CAMSS_RES_MAX]; char *interrupt[CAMSS_RES_MAX]; + char *pd_name; u8 line_num; bool has_pd; const void *ops; @@ -84,6 +85,7 @@ enum icc_count { struct camss_resources { enum camss_version version; + const char *pd_name; const struct camss_subdev_resources *csiphy_res; const struct camss_subdev_resources *csid_res; const struct camss_subdev_resources *ispif_res;