Re: [PATCH v3 04/12] clk: renesas: clk-vbattb: Add VBATTB clock driver

Geert Uytterhoeven
2024-10-10T10:06:38Z

Hi Claudiu,

Thanks for your patch!

On Fri, Aug 30, 2024 at 3:02 PM Claudiu <claudiu.beznea@tuxon.dev> wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> The VBATTB IP of the Renesas RZ/G3S SoC controls the clock that is used
> by the RTC. The input to the VBATTB could be a 32KHz crystal oscillator

Please drop "oscillator".

> or an external clock device.
>
> The HW block diagram for the clock generator is as follows:
>
> +----------+ XC `\
> RTXIN --->| |----->| \ +----+ VBATTCLK
> | 32K clock| | |----->|gate|----------->
> | osc | XBYP | | +----+
> RTXOUT --->| |----->| /
> +----------+ ,
>
> After discussions w/ Stephen Boyd the clock tree associated with this
> hardware block was exported in Linux as:
>
> vbattb-xtal
> xbyp
> xc
> mux
> vbattbclk
>
> where:
> - input-xtal is the input clock (connected to RTXIN, RTXOUT pins)
> - xc, xbyp are mux inputs
> - mux is the internal mux
> - vbattclk is the gate clock that feeds in the end the RTC
>
> to allow selecting the input of the MUX though assigned-clock DT
> properties, using the already existing clock drivers and avoid adding
> other DT properties. If the crystal oscillator is connected as on RTXIN,

Please drop "oscillator".

> RTXOUT pins the XC will be selected as mux input. If an external clock
> device is connected on RTXIN, RTXOUT pins the XBYP will be selected as
> mux input.
>
> The load capacitance of the on-board crystal oscillator can be configured

s/on-board/internal/

> with renesas,vbattb-load-nanofarads DT property.
>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

> --- /dev/null
> +++ b/drivers/clk/renesas/clk-vbattb.c
> @@ -0,0 +1,204 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * VBATTB clock driver
> + *
> + * Copyright (C) 2024 Renesas Electronics Corp.
> + */
> +
> +#include <linux/cleanup.h>
> +#include <linux/clk-provider.h>
> +#include <linux/device.h>
> +#include <linux/io.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/reset.h>
> +
> +#include <dt-bindings/clock/r9a08g045-vbattb.h>
> +
> +#define VBATTB_BKSCCR 0x1c
> +#define VBATTB_BKSCCR_SOSEL_BIT 6
> +#define VBATTB_SOSCCR2 0x24
> +#define VBATTB_SOSCCR2_SOSTP2_BIT 0
> +#define VBATTB_XOSCCR 0x30
> +#define VBATTB_XOSCCR_OUTEN_BIT 16

Please either drop the "_BIT"-suffixes...

> +#define VBATTB_XOSCCR_XSEL GENMASK(1, 0)

or add a "_MASK"-suffix here.

> +#define VBATTB_XOSCCR_XSEL_4_PF 0x0
> +#define VBATTB_XOSCCR_XSEL_7_PF 0x1
> +#define VBATTB_XOSCCR_XSEL_9_PF 0x2
> +#define VBATTB_XOSCCR_XSEL_12_5_PF 0x3

The rest LGTM.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds