Re: [PATCH 2/3] interconnect: qcom: msm8939: Merge snoc and snoc_mm into one

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 28 Jan 2022 at 19:10, Bryan O'Donoghue
<bryan.odonoghue@xxxxxxxxxx> wrote:
>
> The current msm8939 snoc and snoc_mm definitions are represented as
> separate entities based on downstream definition which declares two
> identical and therefore overlapping mmio regions.
>
> Downstream:
> reg = <0x580000 0x14080>,
>       <0x580000 0x14080>;
> reg-names = "snoc-base", "snoc-mm-base";
>
> Upstream:
> snoc: interconnect@580000 {
>         compatible = "qcom,msm8939-snoc";
>         #interconnect-cells = <1>;
>         reg = <0x580000 0x14080>;
>         clock-names = "bus", "bus_a";
>         clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
>                  <&rpmcc RPM_SMD_SNOC_A_CLK>;
>         status = "okay";
> };
>
> snoc: interconnect@580000 {
>         compatible = "qcom,msm8939-snoc_mm";
>         #interconnect-cells = <1>;
>         reg = <0x580000 0x14080>;
>         clock-names = "bus", "bus_a",
>         clocks = <&rpmcc RPM_SMD_SYSMMNOC_CLK>,
>                  <&rpmcc RPM_SMD_SYSMMNOC_A_CLK>;
>         status = "okay";
> };
>
> This overlapping declaration leads to the following failure on boot.
>
> [    1.212340] qnoc-msm8939 580000.interconnect_mm: can't request region for resource [mem 0x00580000-0x0059407f]
> [    1.212391] qnoc-msm8939 580000.interconnect_mm: Cannot ioremap interconnect bus resource
> [    1.221524] qnoc-msm8939: probe of 580000.interconnect_mm failed with error -16
>
> snoc_mm is a complete misnomer though, as there is no distinct register
> space, simply an additional clock to drive higher frequences on snoc for
> new multi-media 'mm' devices tacked on to the old msm8916 snoc.
>
> The difference can be captured with
>
> - A new clock
> - Performance points/clock settings in the relevant multi-media devices.
>
> Fix the above bug by representing snoc_mm as two new clocks to the existing
> snoc, not a separate interconnect bus.

This would lead to higher frequencies being set on both 'normal' and
mm snoc clocks, thus (possibly) increasing power consumption.

The proper fix should be implemented following patches 4 and 5 from
https://lore.kernel.org/all/20211215002324.1727-1-shawn.guo@xxxxxxxxxx/

>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
> ---
>  drivers/interconnect/qcom/msm8939.c | 30 +++++------------------------
>  1 file changed, 5 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/interconnect/qcom/msm8939.c b/drivers/interconnect/qcom/msm8939.c
> index d188f3636e4c3..7030911e25adc 100644
> --- a/drivers/interconnect/qcom/msm8939.c
> +++ b/drivers/interconnect/qcom/msm8939.c
> @@ -1271,25 +1271,6 @@ static struct qcom_icc_node *msm8939_snoc_nodes[] = {
>         [SNOC_INT_BIMC] = &snoc_int_bimc,
>         [SNOC_PCNOC_MAS] = &snoc_pcnoc_mas,
>         [SNOC_QDSS_INT] = &qdss_int,
> -};
> -
> -static const struct regmap_config msm8939_snoc_regmap_config = {
> -       .reg_bits       = 32,
> -       .reg_stride     = 4,
> -       .val_bits       = 32,
> -       .max_register   = 0x14080,
> -       .fast_io        = true,
> -};
> -
> -static struct qcom_icc_desc msm8939_snoc = {
> -       .type = QCOM_ICC_NOC,
> -       .nodes = msm8939_snoc_nodes,
> -       .num_nodes = ARRAY_SIZE(msm8939_snoc_nodes),
> -       .regmap_cfg = &msm8939_snoc_regmap_config,
> -       .qos_offset = 0x7000,
> -};
> -
> -static struct qcom_icc_node *msm8939_snoc_mm_nodes[] = {
>         [MASTER_VIDEO_P0] = &mas_video,
>         [MASTER_JPEG] = &mas_jpeg,
>         [MASTER_VFE] = &mas_vfe,
> @@ -1301,7 +1282,7 @@ static struct qcom_icc_node *msm8939_snoc_mm_nodes[] = {
>         [SNOC_MM_INT_2] = &mm_int_2,
>  };
>
> -static const struct regmap_config msm8939_snoc_mm_regmap_config = {
> +static const struct regmap_config msm8939_snoc_regmap_config = {
>         .reg_bits       = 32,
>         .reg_stride     = 4,
>         .val_bits       = 32,
> @@ -1309,11 +1290,11 @@ static const struct regmap_config msm8939_snoc_mm_regmap_config = {
>         .fast_io        = true,
>  };
>
> -static struct qcom_icc_desc msm8939_snoc_mm = {
> +static struct qcom_icc_desc msm8939_snoc = {
>         .type = QCOM_ICC_NOC,
> -       .nodes = msm8939_snoc_mm_nodes,
> -       .num_nodes = ARRAY_SIZE(msm8939_snoc_mm_nodes),
> -       .regmap_cfg = &msm8939_snoc_mm_regmap_config,
> +       .nodes = msm8939_snoc_nodes,
> +       .num_nodes = ARRAY_SIZE(msm8939_snoc_nodes),
> +       .regmap_cfg = &msm8939_snoc_regmap_config,
>         .qos_offset = 0x7000,
>  };
>
> @@ -1420,7 +1401,6 @@ static const struct of_device_id msm8939_noc_of_match[] = {
>         { .compatible = "qcom,msm8939-bimc", .data = &msm8939_bimc },
>         { .compatible = "qcom,msm8939-pcnoc", .data = &msm8939_pcnoc },
>         { .compatible = "qcom,msm8939-snoc", .data = &msm8939_snoc },
> -       { .compatible = "qcom,msm8939-snoc-mm", .data = &msm8939_snoc_mm },
>         { }
>  };
>  MODULE_DEVICE_TABLE(of, msm8939_noc_of_match);
> --
> 2.33.0
>


-- 
With best wishes
Dmitry



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux