All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: Sean Anderson <seanga2@gmail.com>
Cc: u-boot@lists.denx.de, Damien Le Moal <Damien.LeMoal@wdc.com>,
	Leo Liang <ycliang@andestech.com>,
	Andreas Dannenberg <dannenberg@ti.com>,
	Lokesh Vutla <lokeshvutla@ti.com>,
	Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Subject: Re: [PATCH v3 00/11] clk: k210: Rewrite K210 clock without CCF
Date: Fri, 11 Jun 2021 10:21:24 +0200	[thread overview]
Message-ID: <20210611102124.4f95c62f@ktm> (raw)
In-Reply-To: <20210611041617.1665833-1-seanga2@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 6376 bytes --]

On Fri, 11 Jun 2021 00:16:06 -0400
Sean Anderson <seanga2@gmail.com> wrote:

> This is something I've been meaning to do for a while but only just
> got around to. The CCF has been quite unwieldy in a few ways:
> 
> * It is very rigid, and there are not easy ways to hook into it
> without rewriting many things. See e.g. things like the bypass clock
> and all the _half clocks which were created because CCF didn't
> support the dividers used on the k210. While preparing this series, I
> encountered several edge cases which I had initially overlooked (or
> which were not supported in the initial release). These would have
> been very difficult to fix with CCF, but were much easier to address
> because each funcion is implemented in one place.
> * There is a lot of magic going on under the curtains because of all
> the CCF code which lives in many different files. Some things live in
> drivers, but many things live in e.g. clk-uclass.c. So many things
> live in so many files and it can be very difficult to get a handle on
> what exactly happens. Complicating this is that there is a conflation
> of struct clk as a handle and struct clk as a device. In this regard,
> refcounting is completely broken. IMO we should just do away with
> refcounts and only disable clocks when explicitly asked for.
> * It is very dependent on runtime initialization. Typically,
> everything is initialized by calling into various register()
> functions, usually with several wrappers to avoid specifying all the
> arguments. This balloons the runtime memory usage since there are so
> many devices created. It also makes it hard to debug, since if you do
> it the "typical" way it is easy to accidentally assign a clock to the
> wrong register.
> * It inflates code size by pulling in not just some dead code (e.g.
> this driver does not use divider tables but they are in clk-divider
> anyway) but also pulling in numerous imx-specific clocks. This could
> be fixed, but I don't want to due to the other reasons listed.
> 
> I am very happy to have completely excised it from my driver. IMO
> there should be big warning signs on the CCF warning not to use it
> for new code. This would hopefully dissuade those like myself who had
> no idea that CCF was *not* in fact a good way to write a clock driver.

You mean for U-Boot or for Linux ?

> 
> Overall there is a total savings of 12k from this series.
>    text	   data	    bss	    dec
> hex	filename 292485	  32672	  12624
> 337781	  52775	before/u-boot 283125
> 29856	  12624	 325605	  4f7e5	after/u-boot
> 

I'm not going to defend CCF to the last breath, I know their issues.

However, the goal for CCF was to have:

1. Ported code from Linux (with some code simplification)
2. Get the standard approach to the clock subsystem.

I'm just wondering if we (as a community) want to have such diversity -
I mean each architecture would have different clock driver (under the
device model)

As fair as I can see - the K210 already has support for CCF in Linux:
drivers/clk/clk-k210.c 
Reading the above comment - it looks like you couldn't simplyfy this
Linux driver to be smaller and fit into U-Boot?

Sean, do you think that other archs can benefit from your work?

> This series depends on
> https://patchwork.ozlabs.org/project/uboot/list/?series=238211
> 
> Changes in v3:
> - Always define clk_defaults_stage, even if clk_set_defaults is a
> dummy
> - Fix inverted condition for setting defaults
> - Fix val not being set for K210_DIV_POWER
> - Add CLK_K210_SET_RATE to defconfig so these changes apply
> 
> Changes in v2:
> - Convert stage to enum
> - Only force probe clocks pre-reloc
> - Rebase on u-boot/master
> 
> Sean Anderson (11):
>   clk: Allow force setting clock defaults before relocation
>   clk: k210: Rewrite to remove CCF
>   clk: k210: Move pll into the rest of the driver
>   clk: k210: Implement soc_clk_dump
>   clk: k210: Re-add support for setting rate
>   clk: k210: Don't set PLL rates if we are already at the correct rate
>   clk: k210: Remove bypass driver
>   clk: k210: Move k210 clock out of its own subdirectory
>   k210: dts: Set PLL1 to the same rate as PLL0
>   k210: Don't imply CCF
>   test: Add K210 PLL tests to sandbox defconfigs
> 
>  MAINTAINERS                             |    4 +-
>  arch/riscv/dts/k210.dtsi                |    2 +
>  board/sipeed/maix/Kconfig               |    2 -
>  configs/sandbox64_defconfig             |    2 +
>  configs/sandbox_defconfig               |    2 +
>  configs/sandbox_flattree_defconfig      |    2 +
>  configs/sipeed_maix_bitm_defconfig      |    2 +-
>  drivers/clk/Kconfig                     |   14 +-
>  drivers/clk/Makefile                    |    2 +-
>  drivers/clk/clk-uclass.c                |   27 +-
>  drivers/clk/clk_kendryte.c              | 1320
> +++++++++++++++++++++++ drivers/clk/kendryte/Kconfig            |
> 12 - drivers/clk/kendryte/Makefile           |    1 -
>  drivers/clk/kendryte/bypass.c           |  273 -----
>  drivers/clk/kendryte/clk.c              |  668 ------------
>  drivers/clk/kendryte/pll.c              |  585 ----------
>  drivers/clk/rockchip/clk_rk3308.c       |    2 +-
>  drivers/core/device.c                   |    2 +-
>  drivers/net/gmac_rockchip.c             |    2 +-
>  include/clk.h                           |   30 +-
>  include/dt-bindings/clock/k210-sysctl.h |   94 +-
>  include/kendryte/bypass.h               |   31 -
>  include/kendryte/clk.h                  |   35 -
>  include/kendryte/pll.h                  |   34 -
>  24 files changed, 1437 insertions(+), 1711 deletions(-)
>  create mode 100644 drivers/clk/clk_kendryte.c
>  delete mode 100644 drivers/clk/kendryte/Kconfig
>  delete mode 100644 drivers/clk/kendryte/Makefile
>  delete mode 100644 drivers/clk/kendryte/bypass.c
>  delete mode 100644 drivers/clk/kendryte/clk.c
>  delete mode 100644 drivers/clk/kendryte/pll.c
>  delete mode 100644 include/kendryte/bypass.h
>  delete mode 100644 include/kendryte/clk.h
> 



Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  parent reply	other threads:[~2021-06-11  8:21 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-11  4:16 [PATCH v3 00/11] clk: k210: Rewrite K210 clock without CCF Sean Anderson
2021-06-11  4:16 ` [PATCH v3 01/11] clk: Allow force setting clock defaults before relocation Sean Anderson
2021-06-11  4:16 ` [PATCH v3 02/11] clk: k210: Rewrite to remove CCF Sean Anderson
2021-06-16  1:54   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 03/11] clk: k210: Move pll into the rest of the driver Sean Anderson
2021-06-16  1:55   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 04/11] clk: k210: Implement soc_clk_dump Sean Anderson
2021-06-16  1:56   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 05/11] clk: k210: Re-add support for setting rate Sean Anderson
2021-06-16  1:57   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 06/11] clk: k210: Don't set PLL rates if we are already at the correct rate Sean Anderson
2021-06-16  1:58   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 07/11] clk: k210: Remove bypass driver Sean Anderson
2021-06-16  1:59   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 08/11] clk: k210: Move k210 clock out of its own subdirectory Sean Anderson
2021-06-16  2:01   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 09/11] k210: dts: Set PLL1 to the same rate as PLL0 Sean Anderson
2021-06-16  2:01   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 10/11] k210: Don't imply CCF Sean Anderson
2021-06-16  2:02   ` Leo Liang
2021-06-11  4:16 ` [PATCH v3 11/11] test: Add K210 PLL tests to sandbox defconfigs Sean Anderson
2021-06-11  8:21 ` Lukasz Majewski [this message]
2021-06-11 13:57   ` [PATCH v3 00/11] clk: k210: Rewrite K210 clock without CCF Sean Anderson
2021-06-13 23:08     ` Damien Le Moal
2021-06-11 23:14 ` Sean Anderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210611102124.4f95c62f@ktm \
    --to=lukma@denx.de \
    --cc=Damien.LeMoal@wdc.com \
    --cc=dannenberg@ti.com \
    --cc=lokeshvutla@ti.com \
    --cc=philipp.tomsich@theobroma-systems.com \
    --cc=seanga2@gmail.com \
    --cc=u-boot@lists.denx.de \
    --cc=ycliang@andestech.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.