diff mbox series

[1/2] arm64: dts: imx8mp: Fix SDMA2/3 clocks

Message ID 20230813162906.22640-1-aford173@gmail.com
State Superseded
Headers show
Series [1/2] arm64: dts: imx8mp: Fix SDMA2/3 clocks | expand

Commit Message

Adam Ford Aug. 13, 2023, 4:29 p.m. UTC
A previous patch to remove the Audio clocks from the main clock node
was intended to force people to setup the audio PLL clocks per board
instead of having a common set of rates since not all boards may use
the various audio PLL clocks for audio devices.

Unfortunately, with this parenting removed, the SDMA2 and SDMA3
clocks were slowed to 24MHz because the SDMA2/3 clocks are controlled
via the audio_blk_ctrl which is clocked from IMX8MP_CLK_AUDIO_ROOT,
and that clock is enabled by pgc_audio.

Per the TRM, "The SDMA2/3 target frequency is 400MHz IPG and 400MHz
AHB, always 1:1 mode, to make sure there is enough throughput for all
the audio use cases."

Instead of cluttering the clock node, place the clock rate and parent
information into the pgc_audio node.

With the parenting and clock rates restored for  IMX8MP_CLK_AUDIO_AHB,
and IMX8MP_CLK_AUDIO_AXI_SRC, it appears the SDMA2 and SDMA3 run at
400MHz again.

Fixes: 16c984524862 ("arm64: dts: imx8mp: don't initialize audio clocks from CCM node")
Signed-off-by: Adam Ford <aford173@gmail.com>

Comments

Lucas Stach Aug. 14, 2023, 8:22 a.m. UTC | #1
Am Sonntag, dem 13.08.2023 um 11:29 -0500 schrieb Adam Ford:
> A previous patch to remove the Audio clocks from the main clock node
> was intended to force people to setup the audio PLL clocks per board
> instead of having a common set of rates since not all boards may use
> the various audio PLL clocks for audio devices.
> 
> Unfortunately, with this parenting removed, the SDMA2 and SDMA3
> clocks were slowed to 24MHz because the SDMA2/3 clocks are controlled
> via the audio_blk_ctrl which is clocked from IMX8MP_CLK_AUDIO_ROOT,
> and that clock is enabled by pgc_audio.
> 
> Per the TRM, "The SDMA2/3 target frequency is 400MHz IPG and 400MHz
> AHB, always 1:1 mode, to make sure there is enough throughput for all
> the audio use cases."
> 
> Instead of cluttering the clock node, place the clock rate and parent
> information into the pgc_audio node.
> 
> With the parenting and clock rates restored for  IMX8MP_CLK_AUDIO_AHB,
> and IMX8MP_CLK_AUDIO_AXI_SRC, it appears the SDMA2 and SDMA3 run at
> 400MHz again.
> 
Note that 800MHz for the AXI clock is overdrive mode for the chip. For
other i.MX8M* chips we tried to have the nominal drive rates as
assigned rates in DT. With the i.MX8MP it's currently a wild mix and
most of the AXI clocks are set to OD rates, so I won't reject this
patch based on this.

Most boards run the DRAM at DDR4-4000, which already requires OD
voltages, so there isn't much point in trying to stick to ND rates on
those boards. We should probably do some consolidation here and come up
with a proper policy for the i.MX8MP soon.

> Fixes: 16c984524862 ("arm64: dts: imx8mp: don't initialize audio clocks from CCM node")
> Signed-off-by: Adam Ford <aford173@gmail.com>

Reviewed-by: Lucas Stach <l.stach@pengutronix.de>

> 
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> index 6f2f50e1639c..408b0c4ec4f8 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> @@ -790,6 +790,12 @@ pgc_audio: power-domain@5 {
>  						reg = <IMX8MP_POWER_DOMAIN_AUDIOMIX>;
>  						clocks = <&clk IMX8MP_CLK_AUDIO_ROOT>,
>  							 <&clk IMX8MP_CLK_AUDIO_AXI>;
> +						assigned-clocks = <&clk IMX8MP_CLK_AUDIO_AHB>,
> +								  <&clk IMX8MP_CLK_AUDIO_AXI_SRC>;
> +						assigned-clock-parents =  <&clk IMX8MP_SYS_PLL1_800M>,
> +									  <&clk IMX8MP_SYS_PLL1_800M>;
> +						assigned-clock-rates = <400000000>,
> +								       <800000000>;
>  					};
>  
>  					pgc_gpu2d: power-domain@6 {
Adam Ford Aug. 14, 2023, 11:49 a.m. UTC | #2
On Mon, Aug 14, 2023 at 3:22 AM Lucas Stach <l.stach@pengutronix.de> wrote:
>
> Am Sonntag, dem 13.08.2023 um 11:29 -0500 schrieb Adam Ford:
> > A previous patch to remove the Audio clocks from the main clock node
> > was intended to force people to setup the audio PLL clocks per board
> > instead of having a common set of rates since not all boards may use
> > the various audio PLL clocks for audio devices.
> >
> > Unfortunately, with this parenting removed, the SDMA2 and SDMA3
> > clocks were slowed to 24MHz because the SDMA2/3 clocks are controlled
> > via the audio_blk_ctrl which is clocked from IMX8MP_CLK_AUDIO_ROOT,
> > and that clock is enabled by pgc_audio.
> >
> > Per the TRM, "The SDMA2/3 target frequency is 400MHz IPG and 400MHz
> > AHB, always 1:1 mode, to make sure there is enough throughput for all
> > the audio use cases."
> >
> > Instead of cluttering the clock node, place the clock rate and parent
> > information into the pgc_audio node.
> >
> > With the parenting and clock rates restored for  IMX8MP_CLK_AUDIO_AHB,
> > and IMX8MP_CLK_AUDIO_AXI_SRC, it appears the SDMA2 and SDMA3 run at
> > 400MHz again.
> >
> Note that 800MHz for the AXI clock is overdrive mode for the chip. For
> other i.MX8M* chips we tried to have the nominal drive rates as
> assigned rates in DT. With the i.MX8MP it's currently a wild mix and
> most of the AXI clocks are set to OD rates, so I won't reject this
> patch based on this.
>
> Most boards run the DRAM at DDR4-4000, which already requires OD
> voltages, so there isn't much point in trying to stick to ND rates on
> those boards. We should probably do some consolidation here and come up
> with a proper policy for the i.MX8MP soon.

I didn't realize 800MHz was OD.  I just set it to the rate that it was
before the previous patch.  I think the defaults should be ND, and let
boards who need OD set them.  Unless someone objects, I'll submit a
V2.

adam
>
> > Fixes: 16c984524862 ("arm64: dts: imx8mp: don't initialize audio clocks from CCM node")
> > Signed-off-by: Adam Ford <aford173@gmail.com>
>
> Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
>
> >
> > diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > index 6f2f50e1639c..408b0c4ec4f8 100644
> > --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > @@ -790,6 +790,12 @@ pgc_audio: power-domain@5 {
> >                                               reg = <IMX8MP_POWER_DOMAIN_AUDIOMIX>;
> >                                               clocks = <&clk IMX8MP_CLK_AUDIO_ROOT>,
> >                                                        <&clk IMX8MP_CLK_AUDIO_AXI>;
> > +                                             assigned-clocks = <&clk IMX8MP_CLK_AUDIO_AHB>,
> > +                                                               <&clk IMX8MP_CLK_AUDIO_AXI_SRC>;
> > +                                             assigned-clock-parents =  <&clk IMX8MP_SYS_PLL1_800M>,
> > +                                                                       <&clk IMX8MP_SYS_PLL1_800M>;
> > +                                             assigned-clock-rates = <400000000>,
> > +                                                                    <800000000>;
> >                                       };
> >
> >                                       pgc_gpu2d: power-domain@6 {
>
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
index 6f2f50e1639c..408b0c4ec4f8 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -790,6 +790,12 @@  pgc_audio: power-domain@5 {
 						reg = <IMX8MP_POWER_DOMAIN_AUDIOMIX>;
 						clocks = <&clk IMX8MP_CLK_AUDIO_ROOT>,
 							 <&clk IMX8MP_CLK_AUDIO_AXI>;
+						assigned-clocks = <&clk IMX8MP_CLK_AUDIO_AHB>,
+								  <&clk IMX8MP_CLK_AUDIO_AXI_SRC>;
+						assigned-clock-parents =  <&clk IMX8MP_SYS_PLL1_800M>,
+									  <&clk IMX8MP_SYS_PLL1_800M>;
+						assigned-clock-rates = <400000000>,
+								       <800000000>;
 					};
 
 					pgc_gpu2d: power-domain@6 {