[U-Boot] [PATCH v4 01/13] clk: doc: Add documentation entry for Common Clock Framework [CCF] (i.MX)
Peng Fan
peng.fan at nxp.com
Fri May 17 06:15:05 UTC 2019
> Subject: [PATCH v4 01/13] clk: doc: Add documentation entry for Common
> Clock Framework [CCF] (i.MX)
>
> This patch describes the design decisions considerations and taken approach
> for porting in a separate documentation entry.
>
> Signed-off-by: Lukasz Majewski <lukma at denx.de>
>
> ---
>
> Changes in v4:
> - New patch
>
> Changes in v3: None
>
> doc/imx/clk/ccf.txt | 83
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 83 insertions(+)
> create mode 100644 doc/imx/clk/ccf.txt
>
> diff --git a/doc/imx/clk/ccf.txt b/doc/imx/clk/ccf.txt new file mode 100644
> index 0000000000..cc167095f7
> --- /dev/null
> +++ b/doc/imx/clk/ccf.txt
> @@ -0,0 +1,83 @@
> +Introduction:
> +=============
> +
> +This documentation entry describes the Common Clock Framework [CCF]
> +port from Linux kernel (5.0-rc3) to U-Boot.
> +
> +This code is supposed to bring CCF to IMX based devices (imx6q, imx7
> +imx8). Moreover, it also provides some common clock code, which would
> +allow easy porting of CCF Linux code to other platforms.
> +
> +Design decisions:
> +=================
> +
> +* U-boot's DM for clk differs from Linux CCF. The most notably
> +difference
> + is the lack of support for hierarchical clocks and "clock as a
> +manager
> + driver" (single clock DTS node acts as a starting point for all other
> + clocks).
> +
> +* The clk_get_rate() caches the previously read data if
> +CLK_GET_RATE_NOCACHE
> + is not set (no need for recursive access).
> +
> +* On purpose the "manager" clk driver (clk-imx6q.c) is not using large
> + table to store pointers to clocks - e.g. clk[IMX6QDL_CLK_USDHC2_SEL]
> = ....
> + Instead we use udevice's linked list for the same class (UCLASS_CLK).
> +
> + Rationale:
> + ----------
> + When porting the code as is from Linux, one would need ~1KiB of RAM
> to
> + store it. This is way too much if we do plan to use this driver in SPL.
> +
> +* The "central" structure of this patch series is struct udevice and
> +its
> + driver_data field contains the struct clk pointer (to the originally
> +created
> + one).
> +
> +* Up till now U-boot's driver model's CLK operates on udevice (main
> +access to
> + clock is by udevice ops)
> + In the CCF the access to struct clk (comprising pointer to *dev) is
> + possible via dev_get_driver_data()
> +
> + Storing back pointer (from udevice to struct clk) as driver_data is a
> + convention for CCF.
> +
> +* I could use *private_alloc_size to allocate driver's 'private"
> + structures (dev->priv) for e.g. divider (struct clk_divider *divider)
> + for IMX6Q clock, but this would change the original structure of the CCF
> code.
> +
> + Question:
> + ---------
> +
> + Would it be better to use private_alloc_size (and dev->private) or stay
> with
> + driver_data to store struct clk pointer?
I prefer to use driver_data. Not want to bother with malloc failure.
Regards,
Peng
> +
> + The former requires some rewritting in CCF original code (to remove
> + (c)malloc, etc), but comply with u-boot DM. The latter allows re-using
> the
> + CCF code as is, but introduces some convention special for CCF (I'm not
> + sure thought if dev->priv is NOT another convention as well).
> +
> + This port uses the former approach with driver_data storing pointer to
> + struct clk.
> +
> +* I've added the clk_get_parent(), which reads parent's
> +dev->driver_data to
> + provide parent's struct clk pointer. This seems the easiest way to
> +get
> + child/parent relationship for struct clk in U-boot's udevice
> + based clocks.
> +
> +* For tests I had to "emulate" CCF code structure to test functionality
> +of
> + clk_get_parent_rate() and clk_get_by_id(). Those functions will not
> +work
> + properly with "standard" (i.e. non CCF) clock setup (with not set
> + dev->driver_data to struct clk).
> +
> +* Linux's CCF 'struct clk_core' corresponds to u-boot's udevice in 'struct clk'.
> + Clock IP block agnostic flags from 'struct clk_core' (e.g. NOCACHE)
> +have been
> + moved from this struct one level up to 'struct clk'.
> +
> +To do:
> +------
> +
> +* Use of OF_PLATDATA in the SPL setup for CCF - as it is now - the SPL
> +grows
> + considerably and using CCF in boards with tiny resources (OCRAM) is
> + problematic.
> +
> +* On demand port other parts of CCF to U-Boot - as now only features
> +_really_
> + needed by DM/DTS converted drivers are used.
> --
> 2.11.0
More information about the U-Boot
mailing list