lkml.org 
[lkml]   [2021]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCHv1 1/6] rtc: m41t80: add support for protected clock
    On 22/02/2021 18:12:42+0100, Sebastian Reichel wrote:
    > Congatec's QMX6 system on module (SoM) uses a m41t62 as RTC. The
    > modules SQW clock output defaults to 32768 Hz. This behaviour is
    > used to provide the i.MX6 CKIL clock. Once the RTC driver is probed,
    > the clock is disabled and all i.MX6 functionality depending on
    > the 32 KHz clock has undefined behaviour. On systems using hardware
    > watchdog it seems to likely trigger a lot earlier than configured.
    >
    > The proper solution would be to describe this dependency in DT,
    > but that will result in a deadlock. The kernel will see, that
    > i.MX6 system clock needs the RTC clock and do probe deferral.
    > But the i.MX6 I2C module never becomes usable without the i.MX6
    > CKIL clock and thus the RTC's clock will not be probed. So from
    > the kernel's perspective this is a chicken-and-egg problem.
    >

    Reading the previous paragraph, I was going to suggest describing the
    dependency and wondering whether this would cause a circular dependency.
    I guess this will keep being an issue for clocks on an I2C or SPI bus...

    > Technically everything is fine by not touching anything, since
    > the RTC clock correctly enables the clock on reset (i.e. on
    > battery backup power loss) and also the bootloader enables it
    > in case a kernel without this support has been booted.
    >
    > The 'protected-clocks' property is already in use for some clocks
    > that may not be touched because of firmware limitations and is
    > described in Documentation/devicetree/bindings/clock/clock-bindings.txt.
    >
    > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

    > ---
    > Documentation/devicetree/bindings/rtc/rtc-m41t80.txt | 1 +
    > drivers/rtc/rtc-m41t80.c | 3 +++
    > 2 files changed, 4 insertions(+)
    >
    > diff --git a/Documentation/devicetree/bindings/rtc/rtc-m41t80.txt b/Documentation/devicetree/bindings/rtc/rtc-m41t80.txt
    > index c746cb221210..ea4bbf5c4282 100644
    > --- a/Documentation/devicetree/bindings/rtc/rtc-m41t80.txt
    > +++ b/Documentation/devicetree/bindings/rtc/rtc-m41t80.txt
    > @@ -19,6 +19,7 @@ Optional properties:
    > - interrupts: rtc alarm interrupt.
    > - clock-output-names: From common clock binding to override the default output
    > clock name
    > +- protected-clocks: Bool, if set operating system should not handle clock.
    > - wakeup-source: Enables wake up of host system on alarm
    >
    > Example:
    > diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
    > index 160dcf68e64e..3296583853a8 100644
    > --- a/drivers/rtc/rtc-m41t80.c
    > +++ b/drivers/rtc/rtc-m41t80.c
    > @@ -546,6 +546,9 @@ static struct clk *m41t80_sqw_register_clk(struct m41t80_data *m41t80)
    > struct clk_init_data init;
    > int ret;
    >
    > + if (of_property_read_bool(node, "protected-clocks"))
    > + return 0;
    > +
    > /* First disable the clock */
    > ret = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_MON);
    > if (ret < 0)
    > --
    > 2.30.0
    >

    --
    Alexandre Belloni, co-owner and COO, Bootlin
    Embedded Linux and Kernel engineering
    https://bootlin.com

    \
     
     \ /
      Last update: 2021-02-22 22:25    [W:8.035 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site