2022-07-03 09:32:53

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 0/7] imx: blk-ctrl: Add interconnect for i.MX8MP

From: Peng Fan <[email protected]>

V3:
Move adding NoC node patch to i.MX8MP ICC driver patchset
Per Lucas's comments, warn once when icc bulk get not return probe defer and continue.

V2:
Use a low bandwidth value instead INT_MAX
Minor fix to move fsl,imx8mp.h out to dts patch, not driver patch
Add A-b tag from DT maintainer

i.MX8MP NoC settings is invalid after related power domain up. So
need to set valid values after power domain up.

This patchset is to bind interconnect for each entry in blk ctrl.

This patchset is not include DVFS DDRC feature.

A repo created here: https://github.com/MrVan/linux/tree/imx8mp-interconnect

Peng Fan (7):
dt-bindings: soc: imx: add interconnect property for i.MX8MP media blk
ctrl
dt-bindings: soc: imx: add interconnect property for i.MX8MP hdmi blk
ctrl
dt-bindings: soc: imx: add interconnect property for i.MX8MP hsio blk
ctrl
soc: imx: add icc paths for i.MX8MP media blk ctrl
soc: imx: add icc paths for i.MX8MP hsio/hdmi blk ctrl
arm64: dts: imx8mp: add interconnects for media blk ctrl
arm64: dts: imx8mp: add interconnect for hsio blk ctrl

.../soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml | 9 +++++
.../soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml | 10 +++++
.../soc/imx/fsl,imx8mp-media-blk-ctrl.yaml | 14 +++++++
arch/arm64/boot/dts/freescale/imx8mp.dtsi | 17 ++++++++
drivers/soc/imx/imx8m-blk-ctrl.c | 39 +++++++++++++++++++
drivers/soc/imx/imx8mp-blk-ctrl.c | 35 +++++++++++++++++
6 files changed, 124 insertions(+)

--
2.25.1


2022-07-03 09:32:53

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 3/7] dt-bindings: soc: imx: add interconnect property for i.MX8MP hsio blk ctrl

From: Peng Fan <[email protected]>

Add interconnect property for i.MX8MP hsio blk ctrl

Signed-off-by: Peng Fan <[email protected]>
Acked-by: Krzysztof Kozlowski <[email protected]>
---
.../bindings/soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml
index c1e29d94f40e..c29181a9745b 100644
--- a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml
+++ b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hsio-blk-ctrl.yaml
@@ -48,6 +48,16 @@ properties:
- const: usb
- const: pcie

+ interconnects:
+ maxItems: 4
+
+ interconnect-names:
+ items:
+ - const: noc-pcie
+ - const: usb1
+ - const: usb2
+ - const: pcie
+
required:
- compatible
- reg
--
2.25.1

2022-07-03 09:33:50

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 2/7] dt-bindings: soc: imx: add interconnect property for i.MX8MP hdmi blk ctrl

From: Peng Fan <[email protected]>

Add interconnect property for i.MX8MP hdmi blk ctrl

Signed-off-by: Peng Fan <[email protected]>
Acked-by: Krzysztof Kozlowski <[email protected]>
---
.../bindings/soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml
index 563e1d0e327f..1be4ce2a45e8 100644
--- a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml
+++ b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-hdmi-blk-ctrl.yaml
@@ -52,6 +52,15 @@ properties:
- const: ref_266m
- const: ref_24m

+ interconnects:
+ maxItems: 3
+
+ interconnect-names:
+ items:
+ - const: hrv
+ - const: lcdif-hdmi
+ - const: hdcp
+
required:
- compatible
- reg
--
2.25.1

2022-07-03 09:33:55

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 6/7] arm64: dts: imx8mp: add interconnects for media blk ctrl

From: Peng Fan <[email protected]>

Add interconnect property for media blk ctrl

Signed-off-by: Peng Fan <[email protected]>
---
arch/arm64/boot/dts/freescale/imx8mp.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
index 13a2ee77d3c6..08bd57742294 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -1066,6 +1066,18 @@ media_blk_ctrl: blk-ctrl@32ec0000 {
"lcdif1", "isi", "mipi-csi2",
"lcdif2", "isp", "dwe",
"mipi-dsi2";
+ interconnects =
+ <&noc IMX8MP_ICM_LCDIF_RD &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_LCDIF_WR &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_ISI0 &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_ISI1 &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_ISI2 &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_ISP0 &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_ISP1 &noc IMX8MP_ICN_MEDIA>,
+ <&noc IMX8MP_ICM_DWE &noc IMX8MP_ICN_MEDIA>;
+ interconnect-names = "lcdif-rd", "lcdif-wr", "isi0",
+ "isi1", "isi2", "isp0", "isp1",
+ "dwe";
clocks = <&clk IMX8MP_CLK_MEDIA_APB_ROOT>,
<&clk IMX8MP_CLK_MEDIA_AXI_ROOT>,
<&clk IMX8MP_CLK_MEDIA_CAM1_PIX_ROOT>,
--
2.25.1

2022-07-03 09:34:22

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 4/7] soc: imx: add icc paths for i.MX8MP media blk ctrl

From: Peng Fan <[email protected]>

Add interconnect paths for i.MX8MP media blk ctrl

Signed-off-by: Peng Fan <[email protected]>
---
drivers/soc/imx/imx8m-blk-ctrl.c | 39 ++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

diff --git a/drivers/soc/imx/imx8m-blk-ctrl.c b/drivers/soc/imx/imx8m-blk-ctrl.c
index dff7529268e4..9b0f81dc292b 100644
--- a/drivers/soc/imx/imx8m-blk-ctrl.c
+++ b/drivers/soc/imx/imx8m-blk-ctrl.c
@@ -5,6 +5,7 @@
*/

#include <linux/device.h>
+#include <linux/interconnect.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
@@ -37,6 +38,8 @@ struct imx8m_blk_ctrl_domain_data {
const char *name;
const char * const *clk_names;
int num_clks;
+ const char * const *path_names;
+ int num_paths;
const char *gpc_name;
u32 rst_mask;
u32 clk_mask;
@@ -52,13 +55,16 @@ struct imx8m_blk_ctrl_domain_data {
};

#define DOMAIN_MAX_CLKS 4
+#define DOMAIN_MAX_PATHS 4

struct imx8m_blk_ctrl_domain {
struct generic_pm_domain genpd;
const struct imx8m_blk_ctrl_domain_data *data;
struct clk_bulk_data clks[DOMAIN_MAX_CLKS];
+ struct icc_bulk_data paths[DOMAIN_MAX_PATHS];
struct device *power_dev;
struct imx8m_blk_ctrl *bc;
+ int num_paths;
};

struct imx8m_blk_ctrl_data {
@@ -117,6 +123,10 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd)
if (data->mipi_phy_rst_mask)
regmap_set_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask);

+ ret = icc_bulk_set_bw(domain->num_paths, domain->paths);
+ if (ret)
+ dev_err(bc->dev, "failed to set icc bw\n");
+
/* disable upstream clocks */
clk_bulk_disable_unprepare(data->num_clks, domain->clks);

@@ -224,10 +234,29 @@ static int imx8m_blk_ctrl_probe(struct platform_device *pdev)
int j;

domain->data = data;
+ domain->num_paths = data->num_paths;

for (j = 0; j < data->num_clks; j++)
domain->clks[j].id = data->clk_names[j];

+ for (j = 0; j < data->num_paths; j++) {
+ domain->paths[j].name = data->path_names[j];
+ /* Fake value for now, just let ICC could configure NoC mode/priority */
+ domain->paths[j].avg_bw = 1;
+ domain->paths[j].peak_bw = 1;
+ }
+
+ ret = devm_of_icc_bulk_get(dev, data->num_paths, domain->paths);
+ if (ret) {
+ if (ret != -EPROBE_DEFER) {
+ dev_warn_once(dev, "Could not get interconnect paths, NoC will stay unconfigured!\n");
+ domain->num_paths = 0;
+ } else {
+ dev_err_probe(dev, ret, "failed to get noc entries\n");
+ goto cleanup_pds;
+ }
+ }
+
ret = devm_clk_bulk_get(dev, data->num_clks, domain->clks);
if (ret) {
dev_err_probe(dev, ret, "failed to get clock\n");
@@ -650,6 +679,8 @@ static const struct imx8m_blk_ctrl_domain_data imx8mp_media_blk_ctl_domain_data[
.gpc_name = "lcdif1",
.rst_mask = BIT(4) | BIT(5) | BIT(23),
.clk_mask = BIT(4) | BIT(5) | BIT(23),
+ .path_names = (const char *[]){"lcdif-rd", "lcdif-wr"},
+ .num_paths = 2,
},
[IMX8MP_MEDIABLK_PD_ISI] = {
.name = "mediablk-isi",
@@ -658,6 +689,8 @@ static const struct imx8m_blk_ctrl_domain_data imx8mp_media_blk_ctl_domain_data[
.gpc_name = "isi",
.rst_mask = BIT(6) | BIT(7),
.clk_mask = BIT(6) | BIT(7),
+ .path_names = (const char *[]){"isi0", "isi1", "isi2"},
+ .num_paths = 3,
},
[IMX8MP_MEDIABLK_PD_MIPI_CSI2_2] = {
.name = "mediablk-mipi-csi2-2",
@@ -675,6 +708,8 @@ static const struct imx8m_blk_ctrl_domain_data imx8mp_media_blk_ctl_domain_data[
.gpc_name = "lcdif2",
.rst_mask = BIT(11) | BIT(12) | BIT(24),
.clk_mask = BIT(11) | BIT(12) | BIT(24),
+ .path_names = (const char *[]){"lcdif-rd", "lcdif-wr"},
+ .num_paths = 2,
},
[IMX8MP_MEDIABLK_PD_ISP] = {
.name = "mediablk-isp",
@@ -683,6 +718,8 @@ static const struct imx8m_blk_ctrl_domain_data imx8mp_media_blk_ctl_domain_data[
.gpc_name = "isp",
.rst_mask = BIT(16) | BIT(17) | BIT(18),
.clk_mask = BIT(16) | BIT(17) | BIT(18),
+ .path_names = (const char *[]){"isp0", "isp1"},
+ .num_paths = 2,
},
[IMX8MP_MEDIABLK_PD_DWE] = {
.name = "mediablk-dwe",
@@ -691,6 +728,8 @@ static const struct imx8m_blk_ctrl_domain_data imx8mp_media_blk_ctl_domain_data[
.gpc_name = "dwe",
.rst_mask = BIT(19) | BIT(20) | BIT(21),
.clk_mask = BIT(19) | BIT(20) | BIT(21),
+ .path_names = (const char *[]){"dwe"},
+ .num_paths = 1,
},
[IMX8MP_MEDIABLK_PD_MIPI_DSI_2] = {
.name = "mediablk-mipi-dsi-2",
--
2.25.1

2022-07-03 09:57:58

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH V3 1/7] dt-bindings: soc: imx: add interconnect property for i.MX8MP media blk ctrl

From: Peng Fan <[email protected]>

Add interconnect property for i.MX8MP mediamix blk ctrl

Signed-off-by: Peng Fan <[email protected]>
Acked-by: Krzysztof Kozlowski <[email protected]>
---
.../soc/imx/fsl,imx8mp-media-blk-ctrl.yaml | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-media-blk-ctrl.yaml b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-media-blk-ctrl.yaml
index b246d8386ba4..dadb6108e321 100644
--- a/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-media-blk-ctrl.yaml
+++ b/Documentation/devicetree/bindings/soc/imx/fsl,imx8mp-media-blk-ctrl.yaml
@@ -64,6 +64,20 @@ properties:
- const: isp
- const: phy

+ interconnects:
+ maxItems: 8
+
+ interconnect-names:
+ items:
+ - const: lcdif-rd
+ - const: lcdif-wr
+ - const: isi0
+ - const: isi1
+ - const: isi2
+ - const: isp0
+ - const: isp1
+ - const: dwe
+
required:
- compatible
- reg
--
2.25.1

2022-07-07 11:41:04

by Marco Felsch

[permalink] [raw]
Subject: Re: [PATCH V3 6/7] arm64: dts: imx8mp: add interconnects for media blk ctrl

Hi,

thanks for your patch and the work on this.

On 22-07-03, Peng Fan (OSS) wrote:
> From: Peng Fan <[email protected]>
>
> Add interconnect property for media blk ctrl
>
> Signed-off-by: Peng Fan <[email protected]>
> ---
> arch/arm64/boot/dts/freescale/imx8mp.dtsi | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> index 13a2ee77d3c6..08bd57742294 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi

Can you please add:

#include <dt-bindings/interconnect/fsl,imx8mp.h>

else this won't compile.

Regards,
Marco

> @@ -1066,6 +1066,18 @@ media_blk_ctrl: blk-ctrl@32ec0000 {
> "lcdif1", "isi", "mipi-csi2",
> "lcdif2", "isp", "dwe",
> "mipi-dsi2";
> + interconnects =
> + <&noc IMX8MP_ICM_LCDIF_RD &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_LCDIF_WR &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_ISI0 &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_ISI1 &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_ISI2 &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_ISP0 &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_ISP1 &noc IMX8MP_ICN_MEDIA>,
> + <&noc IMX8MP_ICM_DWE &noc IMX8MP_ICN_MEDIA>;
> + interconnect-names = "lcdif-rd", "lcdif-wr", "isi0",
> + "isi1", "isi2", "isp0", "isp1",
> + "dwe";
> clocks = <&clk IMX8MP_CLK_MEDIA_APB_ROOT>,
> <&clk IMX8MP_CLK_MEDIA_AXI_ROOT>,
> <&clk IMX8MP_CLK_MEDIA_CAM1_PIX_ROOT>,
> --
> 2.25.1
>
>
>

2022-07-08 00:44:35

by Peng Fan (OSS)

[permalink] [raw]
Subject: Re: [PATCH V3 6/7] arm64: dts: imx8mp: add interconnects for media blk ctrl



On 7/7/2022 7:38 PM, Marco Felsch wrote:
> Hi,
>
> thanks for your patch and the work on this.
>
> On 22-07-03, Peng Fan (OSS) wrote:
>> From: Peng Fan <[email protected]>
>>
>> Add interconnect property for media blk ctrl
>>
>> Signed-off-by: Peng Fan <[email protected]>
>> ---
>> arch/arm64/boot/dts/freescale/imx8mp.dtsi | 12 ++++++++++++
>> 1 file changed, 12 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
>> index 13a2ee77d3c6..08bd57742294 100644
>> --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
>> +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
>
> Can you please add:
>
> #include <dt-bindings/interconnect/fsl,imx8mp.h>
>
> else this won't compile.

oh, ICC maintainer asked me to drop this header when adding
NoC node, and I need to add this header when there
is user. Here it is, I will add it and post a V4.

Thanks,
Peng.

>
> Regards,
> Marco
>
>> @@ -1066,6 +1066,18 @@ media_blk_ctrl: blk-ctrl@32ec0000 {
>> "lcdif1", "isi", "mipi-csi2",
>> "lcdif2", "isp", "dwe",
>> "mipi-dsi2";
>> + interconnects =
>> + <&noc IMX8MP_ICM_LCDIF_RD &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_LCDIF_WR &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_ISI0 &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_ISI1 &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_ISI2 &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_ISP0 &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_ISP1 &noc IMX8MP_ICN_MEDIA>,
>> + <&noc IMX8MP_ICM_DWE &noc IMX8MP_ICN_MEDIA>;
>> + interconnect-names = "lcdif-rd", "lcdif-wr", "isi0",
>> + "isi1", "isi2", "isp0", "isp1",
>> + "dwe";
>> clocks = <&clk IMX8MP_CLK_MEDIA_APB_ROOT>,
>> <&clk IMX8MP_CLK_MEDIA_AXI_ROOT>,
>> <&clk IMX8MP_CLK_MEDIA_CAM1_PIX_ROOT>,
>> --
>> 2.25.1
>>
>>
>>