Message ID | 20241219-imx8m-clk-v1-1-cfaffa087da6@pengutronix.de (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | arm64: dts: freescale: imx8mp-skov: switch to nominal drive mode | expand |
On Thu, Dec 19, 2024 at 08:27:32AM +0100, Ahmad Fatoum wrote: > The imx8m-clock.yaml binding covers the clock controller inside all > of the i.MX8M Q/M/N/P SoCs. All of them have in common that they > support two operating modes: nominal and overdrive mode. This implies that only the two modes you mention are possible, but you leave the option open to a dts author to use either. How come? Makes it seem like we only need one of these, for whatever the non-default option is? > > While the overdrive mode allows for higher frequencies for many IPs, > the nominal mode needs a lower SoC voltage, thereby reducing > heat generation and power usage. > > In any case, software should respect the maximum clock rate limits > described in the datasheet for each of the two operating modes. > > To allow device tree consumers to enforce these limits, document two new > optional properties that can be used to sanity check the clock tree. > > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > Documentation/devicetree/bindings/clock/imx8m-clock.yaml | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml > index c643d4a81478..a6ae5257ef53 100644 > --- a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml > +++ b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml > @@ -43,6 +43,14 @@ properties: > ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx8m-clock.h > for the full list of i.MX8M clock IDs. > > + fsl,nominal-mode: > + description: Set if SoC is operated in nominal mode > + $ref: /schemas/types.yaml#/definitions/flag > + > + fsl,overdrive-mode: > + description: Set if SoC is operated in overdrive mode > + $ref: /schemas/types.yaml#/definitions/flag > + > required: > - compatible > - reg > @@ -95,6 +103,12 @@ allOf: > - const: clk_ext2 > - const: clk_ext3 > - const: clk_ext4 > + - if: > + required: > + - fsl,overdrive-mode > + then: > + properties: > + fsl,nominal-mode: false > > additionalProperties: false > > > -- > 2.39.5 >
Hello Conor, On 19.12.24 20:49, Conor Dooley wrote: > On Thu, Dec 19, 2024 at 08:27:32AM +0100, Ahmad Fatoum wrote: >> The imx8m-clock.yaml binding covers the clock controller inside all >> of the i.MX8M Q/M/N/P SoCs. All of them have in common that they >> support two operating modes: nominal and overdrive mode. > > This implies that only the two modes you mention are possible, but you > leave the option open to a dts author to use either. How come? > > Makes it seem like we only need one of these, for whatever the > non-default option is? There is no real default. The mode is configured implicitly by the bootloader setting VDD_SOC and then kernel needs to adhere to the limits that imposes. For i.MX8M Mini and Nano, the kernel SoC DTSIs has assigned-clock-rates that are all achievable in nominal mode. For i.MX8MP, there are some rates only validated for overdrive mode. But even for the i.MX8M Mini/Nano boards, we don't know what rates they may configure at runtime, so it's not possible to infer from just the device tree what the mode is, which is why I need to allow for absence of either property. I can make it a single property with two possible values though if that's preferable. Theoretically, we could infer mode at runtime from VDD_SOC voltage, but we need to set up clocks to read out the PMIC and I want to apply the constraints as early as possible as I don't want the SoC to run outside of spec even for a short while. Thanks, Ahmad > >> >> While the overdrive mode allows for higher frequencies for many IPs, >> the nominal mode needs a lower SoC voltage, thereby reducing >> heat generation and power usage. >> >> In any case, software should respect the maximum clock rate limits >> described in the datasheet for each of the two operating modes. >> >> To allow device tree consumers to enforce these limits, document two new >> optional properties that can be used to sanity check the clock tree. >> >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> >> --- >> Documentation/devicetree/bindings/clock/imx8m-clock.yaml | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml >> index c643d4a81478..a6ae5257ef53 100644 >> --- a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml >> +++ b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml >> @@ -43,6 +43,14 @@ properties: >> ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx8m-clock.h >> for the full list of i.MX8M clock IDs. >> >> + fsl,nominal-mode: >> + description: Set if SoC is operated in nominal mode >> + $ref: /schemas/types.yaml#/definitions/flag >> + >> + fsl,overdrive-mode: >> + description: Set if SoC is operated in overdrive mode >> + $ref: /schemas/types.yaml#/definitions/flag >> + >> required: >> - compatible >> - reg >> @@ -95,6 +103,12 @@ allOf: >> - const: clk_ext2 >> - const: clk_ext3 >> - const: clk_ext4 >> + - if: >> + required: >> + - fsl,overdrive-mode >> + then: >> + properties: >> + fsl,nominal-mode: false >> >> additionalProperties: false >> >> >> -- >> 2.39.5 >>
diff --git a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml index c643d4a81478..a6ae5257ef53 100644 --- a/Documentation/devicetree/bindings/clock/imx8m-clock.yaml +++ b/Documentation/devicetree/bindings/clock/imx8m-clock.yaml @@ -43,6 +43,14 @@ properties: ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx8m-clock.h for the full list of i.MX8M clock IDs. + fsl,nominal-mode: + description: Set if SoC is operated in nominal mode + $ref: /schemas/types.yaml#/definitions/flag + + fsl,overdrive-mode: + description: Set if SoC is operated in overdrive mode + $ref: /schemas/types.yaml#/definitions/flag + required: - compatible - reg @@ -95,6 +103,12 @@ allOf: - const: clk_ext2 - const: clk_ext3 - const: clk_ext4 + - if: + required: + - fsl,overdrive-mode + then: + properties: + fsl,nominal-mode: false additionalProperties: false
The imx8m-clock.yaml binding covers the clock controller inside all of the i.MX8M Q/M/N/P SoCs. All of them have in common that they support two operating modes: nominal and overdrive mode. While the overdrive mode allows for higher frequencies for many IPs, the nominal mode needs a lower SoC voltage, thereby reducing heat generation and power usage. In any case, software should respect the maximum clock rate limits described in the datasheet for each of the two operating modes. To allow device tree consumers to enforce these limits, document two new optional properties that can be used to sanity check the clock tree. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- Documentation/devicetree/bindings/clock/imx8m-clock.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+)