On 10/02/2025 17:44, Alexander Dahl wrote: > The OTPC requires both the peripheral clock through PMC and the main RC > oscillator. Seemed to work without explicitly enabling those clocks on > sama7g5 before, but did not on sam9x60. > > Older datasheets were not clear and explicit about this, but recent are, > e.g. SAMA7G5 series datasheet (DS60001765B), > section 30.4.1 Power Management: > >> The OTPC is clocked through the Power Management Controller (PMC). >> The user must power on the main RC oscillator and enable the >> peripheral clock of the OTPC prior to reading or writing the OTP >> memory. > > Link: https://lore.kernel.org/linux-clk/ec34efc2-2051-4b8a-b5d8-6e2fd5e08c28@xxxxxxxxxxxxx/T/#u > Signed-off-by: Alexander Dahl <ada@xxxxxxxxxxx> > --- > > Notes: > v2: > - new patch, not present in v1 > > .../nvmem/microchip,sama7g5-otpc.yaml | 28 +++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml b/Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml > index 9a7aaf64eef32..1fa40610888f3 100644 > --- a/Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml > +++ b/Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml > @@ -29,6 +29,16 @@ properties: > reg: > maxItems: 1 > > + clocks: > + items: > + - description: main rc oscillator > + - description: otpc peripheral clock > + > + clock-names: > + items: > + - const: main_rc_osc osc > + - const: otpc_clk otpc or bus or whatever logically this is > + > required: > - compatible > - reg > @@ -37,6 +47,8 @@ unevaluatedProperties: false > > examples: > - | > + #include <dt-bindings/clock/at91.h> > + #include <dt-bindings/clock/microchip,sama7g5-pmc.h> > #include <dt-bindings/nvmem/microchip,sama7g5-otpc.h> > > otpc: efuse@e8c00000 { > @@ -44,10 +56,26 @@ examples: > reg = <0xe8c00000 0xec>; > #address-cells = <1>; > #size-cells = <1>; > + clocks = <&pmc PMC_TYPE_CORE SAMA7G5_PMC_MAIN_RC>, <&pmc PMC_TYPE_PERIPHERAL 67>; > + clock-names = "main_rc_osc", "otpc_clk"; > > temperature_calib: calib@1 { > reg = <OTP_PKT(1) 76>; > }; > }; > > + - | > + #include <dt-bindings/clock/at91.h> > + #include <dt-bindings/clock/microchip,sam9x60-pmc.h> > + #include <dt-bindings/nvmem/microchip,sama7g5-otpc.h> > + > + efuse@eff00000 { > + compatible = "microchip,sam9x60-otpc", "syscon"; > + reg = <0xeff00000 0xec>; No need for new example with difference in what exactly? Even compatible was not added here... > + #address-cells = <1>; > + #size-cells = <1>; > + clocks = <&pmc PMC_TYPE_CORE SAM9X60_PMC_MAIN_RC>, <&pmc PMC_TYPE_PERIPHERAL 46>; > + clock-names = "main_rc_osc", "otpc_clk"; > + }; > + > ... Best regards, Krzysztof