| Message ID | 20190402112843.992-1-jagan@amarulasolutions.com |
|---|---|
| Headers |
Return-Path: <linux-amarula+bncBD7MFH7A7EEBBA4PRXSQKGQECQ3GPZI@amarulasolutions.com> X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 24F7C3F078 for <linux-amarula@patchwork.amarulasolutions.com>; Tue, 2 Apr 2019 13:29:13 +0200 (CEST) Received: by mail-pf1-f198.google.com with SMTP id g1sf9645436pfo.2 for <linux-amarula@patchwork.amarulasolutions.com>; Tue, 02 Apr 2019 04:29:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1554204548; cv=pass; d=google.com; s=arc-20160816; b=lycUxmhOyGN4xHNuH5aUv4qwDK1kBJ6id4coPc9Ciu5ZtbS3ZVgZmQhN/9i9XlicI3 CdC/ImY2CD0RcYr8zyOKgk67jJl5GQaHneMwJvsbMqyBMXGNa0VRjVgk8sQN7z+pcTEG nmTxplcVlFbpnn78at3a+V6d4IewRxGZ7mXyuRQf2tEbMmdQ2siruLavq+DIqlATWfMP SJXyCvk+Xmm1moTdzYxtUXPuUA8liDWlzpVqKCu3ZTp0PLGClhosTAAXaATzd6SUPzYF Hdbn1jyxPzzOKUcLeXO6oIGKkGDG9kZTdjOcPTQg1uBk3ys+day7U6RdQ34vCQonrVFq AFIA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:message-id:date:subject:cc:to :from:dkim-signature; bh=IvGMxryWwITbSENtARgChHhycIdwAnXObnV0KefXG8w=; b=K6vxgCeLSDGHz5P3MqLy9Zwvcaaq1i/Gld3JFIbBEvX9U1iPfu7tbQEzl43elrAV/8 LkKJcHjUePjpCfd5QEl63ePG4vV1ye6bpaQcaxWZ19pYva+MhSYIqy/a/EAQPz6iFVoX rOO0RO4VjfRXDQ5B5wXN5kf2/AK6L/X5bb6epI8tRQkk/y/RC9PhSij4A+OsTTPJxn0c KVA051ve9RFuy8O4NK75MsNFkKvGu9hJ0PeKRjihwmEcWZLlqqUJTyF0FkJ6gpPjxWJK 5eI4TJLTkwW8vkqHjInaufrUVYbwVd0J8dZhidq7C4j/Erq8OjG/+/nIAMV1uuP4EmY2 ms/A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=h+r1VbK6; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe; bh=IvGMxryWwITbSENtARgChHhycIdwAnXObnV0KefXG8w=; b=rF2EheBCV5xHJhtvT/AnRg04umO9BERUW3Dms9L+yTa5QBhEdTA1ZhyX0cAmNbfPjp CGjMUMehpn1ZiowcsqgbgeS6EqqjmO3FDr/hSdZaJeb90bMNahAEYTeACHsPbd1u7qR0 sj9DopAjTZqLbAlFGl3OD7ivABdGeE0VhA38I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:x-spam-checked-in-group:list-post:list-help :list-archive:list-unsubscribe; bh=IvGMxryWwITbSENtARgChHhycIdwAnXObnV0KefXG8w=; b=ttaYEn7q4c++1aGWivgq71QiB197CuKZPzg0IGKIFVOQsLdrv2nDUwDXsENyVkL861 cUTJ2qPdc6uwOvkzRiPazYU8GZuZypHxxUOIJNz7ZRKQhY56WFZjp6eVvECrTY6dccn8 WT+FRHCm6QpuXZds0Sy/9ibn8AqTdO4kD/2S3qBpE4TY93YIFCe5yeTAJSvW6N9nv7Fi LYsikn7tGIrqCcFmwapfoJnqZ7mgh5CCa9+Pl4ciL0b01D1ntTS+P1zH44Fi9Oi+3Y8x P28GT6d9FpkKmoYAWN9hIZbsKavV1JephuLPo2zTeOTxLBER1ydOikxf5Hn0fJKJj2k8 ee1w== X-Gm-Message-State: APjAAAW8EgTBcJ13+i8TxBCX7/E6ILU6Irg/VXlpMu2pGptFGDfgVOmC oKZMWf74wVXwIVyy2w/cCikcJF41 X-Google-Smtp-Source: APXvYqwFHH4gOUtodhwqtxYbr3hiAOzU+iQXehO1RbAqQL+6ULFUBlqpGDAk6TB2cxpEhQ5lMxo88g== X-Received: by 2002:a17:902:b402:: with SMTP id x2mr1519626plr.135.1554204547434; Tue, 02 Apr 2019 04:29:07 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a65:6285:: with SMTP id f5ls188499pgv.9.gmail; Tue, 02 Apr 2019 04:29:07 -0700 (PDT) X-Received: by 2002:a63:4e4e:: with SMTP id o14mr67012339pgl.254.1554204547011; Tue, 02 Apr 2019 04:29:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554204547; cv=none; d=google.com; s=arc-20160816; b=i9kdCG+P/iUm8R+7E5CjVmrjyTktDpOAKQb2vSbmHVQatwBXkL8QR8TYSa00+asVrv 2kPprx7wG54p2Q/gcYiU3gjrVG5tI2p935PBgYi/bFy2UHjADXubPtAmi0E2fgFgkg+I 6T5UM1XeaYCOlad9Q8r+JsarzNrIKbJTPTEwNkSKC9IK8TPq3iaDI53BHhEkqfueZ1Fe r3xrx62n9e75Xedn4rqopawN+b1p853OdDIxeFlruwfqWyok84qku6Xr4epWPYOcZyGa BPk4h6cyynD535zGUW0r7QpEf4ZkUxfukkQQtHsite3nVwnb0VCdxvocaMehvzqIrK1C AC6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=hm403mnnJhsn9Y+Lo1nIIDO7xZQTpI+rhkRSTmxZ+2s=; b=wErfoWw1DOSx0uwSsEuOYNOUzgfgVjW6MPOHOrBaxbLYOLhspyyqs8NTQhWi741h+M 1OWhw/1qb9HAKtF6UMVyC7eHdVWlhTVnYtfttKxIIDEKzAb/keNppY+uGEsCqzOtp2/N +YxeYgBKdgog2x9oIPBKlHRZhjPfYCPTDHLYt31ojBgHKi6hjdx4Z6bcihhhZXLsFRfT aPilmLaxFdDzzLuR5uT6Qb1uRry5cDgYN+5Fw4Vl5O/yIWkDQMDcHDv6QKa6PpSF+c+Y JNVr6a/7ykGQPyya/3HzrcongREHASqEdLcJx0rKavHH9Fy5ZEXDzz5t7/OpFVURywjX o8OQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=h+r1VbK6; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id w16sor14443408plp.55.2019.04.02.04.29.03 for <linux-amarula@amarulasolutions.com> (Google Transport Security); Tue, 02 Apr 2019 04:29:03 -0700 (PDT) Received-SPF: pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; X-Received: by 2002:a17:902:586:: with SMTP id f6mr68556287plf.68.1554204543467; Tue, 02 Apr 2019 04:29:03 -0700 (PDT) Received: from jagan-XPS-13-9350.imgcgcw.net ([147.50.13.10]) by smtp.gmail.com with ESMTPSA id u62sm23992715pfa.124.2019.04.02.04.28.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Apr 2019 04:29:02 -0700 (PDT) From: Jagan Teki <jagan@amarulasolutions.com> To: Simon Glass <sjg@chromium.org>, Tom Rini <trini@konsulko.com>, Neil Armstrong <narmstrong@baylibre.com>, Philipp Tomsich <philipp.tomsich@theobroma-systems.com>, Marek Vasut <marek.vasut+renesas@gmail.com>, Stefano Babic <sbabic@denx.de>, Fabio Estevam <fabio.estevam@nxp.com>, Peng Fan <peng.fan@nxp.com>, Maxime Ripard <maxime.ripard@bootlin.com>, Michael Trimarchi <michael@amarulasolutions.com>, Andre Przywara <andre.przywara@arm.com> Cc: u-boot@lists.denx.de, uboot-imx@nxp.com, Shyam Saini <shyam.saini@amarulasolutions.com>, linux-amarula@amarulasolutions.com, Jagan Teki <jagan@amarulasolutions.com> Subject: [PATCH v2 00/10] clk: imx: Add i.MX6 CLK support Date: Tue, 2 Apr 2019 16:58:33 +0530 Message-Id: <20190402112843.992-1-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.18.0.321.gffc6fa0e3 MIME-Version: 1.0 X-Original-Sender: jagan@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=h+r1VbK6; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: <linux-amarula.amarulasolutions.com> X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: <https://groups.google.com/a/amarulasolutions.com/group/linux-amarula/post>, <mailto:linux-amarula@amarulasolutions.com> List-Help: <https://support.google.com/a/amarulasolutions.com/bin/topic.py?topic=25838>, <mailto:linux-amarula+help@amarulasolutions.com> List-Archive: <https://groups.google.com/a/amarulasolutions.com/group/linux-amarula/> List-Unsubscribe: <mailto:googlegroups-manage+476853432473+unsubscribe@googlegroups.com>, <https://groups.google.com/a/amarulasolutions.com/group/linux-amarula/subscribe> |
| Series |
clk: imx: Add i.MX6 CLK support
|
|
Message
Jagan Teki
April 2, 2019, 11:28 a.m. UTC
This is revised version of previous i.MX6 clock management [1]. The main difference between previous version is - Group the i.MX6 ccm clocks into gates and tree instead of handling the clocks in simple way using case statement. - use gate clocks for enable/disable management. - use tree clocks for get/set rate or parent traverse management. - parent clock handling via clock type. - traverse the parent clock using recursive functionlaity. The main motive behind this tree framework is to make the clock tree management simple and useful for U-Boot requirements instead of garbing Linux clock management code. We are trying to manage the Allwinner clocks with similar kind, so having this would really help i.MX6 as well. Added simple names for clock macros, but will update it in future version. I have skipped ENET clocks from previous series, will add it in future patches. Changes for v2: - changed framework patches. - add support for imx6qdl and imx6ul boards - add clock gates, tree. [1] https://patchwork.ozlabs.org/cover/950964/ Any inputs? Jagan. Jagan Teki (10): clk: imx: Kconfig: Make CONFIG_CLK available for selection clk: imx: Add i.MX6Q clock driver clk: imx: Add i.MX6UL clock driver clk: Add clk_div_mask helper clk: imx: Add imx6q clock tree support clk: imx6: Add imx6ul clock tree support ARM: dts: i.MX6QDL: Add u-boot,dm-spl for clks ARM: dts: i.MX6UL: Add u-boot,dm-spl for clks configs: icore_mipi: Enable CLK ARM: imx6: Enable CLK for Engicam i.MX6UL boards arch/arm/dts/imx6qdl-u-boot.dtsi | 4 + arch/arm/dts/imx6ul-u-boot.dtsi | 4 + arch/arm/include/asm/arch-mx6/clock.h | 109 ++++++++++++++++ arch/arm/mach-imx/mx6/Kconfig | 2 + configs/imx6qdl_icore_mipi_defconfig | 2 + configs/imx8qxp_mek_defconfig | 2 +- drivers/clk/imx/Kconfig | 29 ++++- drivers/clk/imx/Makefile | 6 + drivers/clk/imx/clk-imx6-common.c | 172 ++++++++++++++++++++++++++ drivers/clk/imx/clk-imx6q.c | 109 ++++++++++++++++ drivers/clk/imx/clk-imx6ul.c | 85 +++++++++++++ include/clk-uclass.h | 2 + 12 files changed, 523 insertions(+), 3 deletions(-) create mode 100644 drivers/clk/imx/clk-imx6-common.c create mode 100644 drivers/clk/imx/clk-imx6q.c create mode 100644 drivers/clk/imx/clk-imx6ul.c
Comments
On Tue, 2 Apr 2019 16:58:33 +0530 Jagan Teki <jagan@amarulasolutions.com> wrote: > This is revised version of previous i.MX6 clock management [1]. > > The main difference between previous version is > - Group the i.MX6 ccm clocks into gates and tree instead of handling > the clocks in simple way using case statement. > - use gate clocks for enable/disable management. > - use tree clocks for get/set rate or parent traverse management. > - parent clock handling via clock type. > - traverse the parent clock using recursive functionlaity. > > The main motive behind this tree framework is to make the clock tree > management simple and useful for U-Boot requirements instead of > garbing Linux clock management code. > > We are trying to manage the Allwinner clocks with similar kind, so > having this would really help i.MX6 as well. > > Added simple names for clock macros, but will update it in future > version. > > I have skipped ENET clocks from previous series, will add it in future > patches. > > Changes for v2: > - changed framework patches. > - add support for imx6qdl and imx6ul boards > - add clock gates, tree. > > [1] https://patchwork.ozlabs.org/cover/950964/ > > Any inputs? Hmm.... It looks like we are doing some development in parallel. Please look into following commit [1]: https://patchwork.ozlabs.org/patch/1034051/ It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO in the long term is a better approach. The code is kept simple and resembles the code from Barebox. Please correct me if I'm wrong, but the code from your work is not modeling muxes, gates and other components from Linux CCF. Unfortunately for [1] - I did not have time recently to finish it ... (address Simon's comments about uclass). > Jagan. > > Jagan Teki (10): > clk: imx: Kconfig: Make CONFIG_CLK available for selection > clk: imx: Add i.MX6Q clock driver > clk: imx: Add i.MX6UL clock driver > clk: Add clk_div_mask helper > clk: imx: Add imx6q clock tree support > clk: imx6: Add imx6ul clock tree support > ARM: dts: i.MX6QDL: Add u-boot,dm-spl for clks > ARM: dts: i.MX6UL: Add u-boot,dm-spl for clks > configs: icore_mipi: Enable CLK > ARM: imx6: Enable CLK for Engicam i.MX6UL boards > > arch/arm/dts/imx6qdl-u-boot.dtsi | 4 + > arch/arm/dts/imx6ul-u-boot.dtsi | 4 + > arch/arm/include/asm/arch-mx6/clock.h | 109 ++++++++++++++++ > arch/arm/mach-imx/mx6/Kconfig | 2 + > configs/imx6qdl_icore_mipi_defconfig | 2 + > configs/imx8qxp_mek_defconfig | 2 +- > drivers/clk/imx/Kconfig | 29 ++++- > drivers/clk/imx/Makefile | 6 + > drivers/clk/imx/clk-imx6-common.c | 172 > ++++++++++++++++++++++++++ drivers/clk/imx/clk-imx6q.c | > 109 ++++++++++++++++ drivers/clk/imx/clk-imx6ul.c | 85 > +++++++++++++ include/clk-uclass.h | 2 + > 12 files changed, 523 insertions(+), 3 deletions(-) > create mode 100644 drivers/clk/imx/clk-imx6-common.c > create mode 100644 drivers/clk/imx/clk-imx6q.c > create mode 100644 drivers/clk/imx/clk-imx6ul.c > 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
On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > On Tue, 2 Apr 2019 16:58:33 +0530 > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > This is revised version of previous i.MX6 clock management [1]. > > > > The main difference between previous version is > > - Group the i.MX6 ccm clocks into gates and tree instead of handling > > the clocks in simple way using case statement. > > - use gate clocks for enable/disable management. > > - use tree clocks for get/set rate or parent traverse management. > > - parent clock handling via clock type. > > - traverse the parent clock using recursive functionlaity. > > > > The main motive behind this tree framework is to make the clock tree > > management simple and useful for U-Boot requirements instead of > > garbing Linux clock management code. > > > > We are trying to manage the Allwinner clocks with similar kind, so > > having this would really help i.MX6 as well. > > > > Added simple names for clock macros, but will update it in future > > version. > > > > I have skipped ENET clocks from previous series, will add it in future > > patches. > > > > Changes for v2: > > - changed framework patches. > > - add support for imx6qdl and imx6ul boards > > - add clock gates, tree. > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > Any inputs? > > Hmm.... It looks like we are doing some development in parallel. > > Please look into following commit [1]: > https://patchwork.ozlabs.org/patch/1034051/ > > It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO in the > long term is a better approach. > The code is kept simple and resembles the code from Barebox. > > Please correct me if I'm wrong, but the code from your work is not > modeling muxes, gates and other components from Linux CCF. The U-Boot implementation of CLK would require as minimal and simple as possible due to requirement of U-Boot itself. Hope you agree this point? if yes having CCF stack code to handle all clock with respective separate drivers management is may not require as of now, IMHO. This series is using recursive calls for handling parenting stuff to handle get or set rates, which is fine for handling clock tree management as far as U-Boot point-of-view. We have faced similar situation as I explained in commit message about Allwinner clocks [2] and we ended up going this way. The patches where I get introduced clock tree is based on muxes, gates which were similar like Linux but I've managed to update according to U-Boot need. I have tried enet, enet_ref clocks as well and those are working out-of-box. Feel free to comments, I have no intention to block anything. let's have a proper discussion. [2] https://patchwork.ozlabs.org/patch/1019673/
On Thu, 4 Apr 2019 14:56:36 +0530 Jagan Teki <jagan@amarulasolutions.com> wrote: > On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > > > On Tue, 2 Apr 2019 16:58:33 +0530 > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > This is revised version of previous i.MX6 clock management [1]. > > > > > > The main difference between previous version is > > > - Group the i.MX6 ccm clocks into gates and tree instead of > > > handling the clocks in simple way using case statement. > > > - use gate clocks for enable/disable management. > > > - use tree clocks for get/set rate or parent traverse management. > > > - parent clock handling via clock type. > > > - traverse the parent clock using recursive functionlaity. > > > > > > The main motive behind this tree framework is to make the clock > > > tree management simple and useful for U-Boot requirements instead > > > of garbing Linux clock management code. > > > > > > We are trying to manage the Allwinner clocks with similar kind, so > > > having this would really help i.MX6 as well. > > > > > > Added simple names for clock macros, but will update it in future > > > version. > > > > > > I have skipped ENET clocks from previous series, will add it in > > > future patches. > > > > > > Changes for v2: > > > - changed framework patches. > > > - add support for imx6qdl and imx6ul boards > > > - add clock gates, tree. > > > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > > > Any inputs? > > > > Hmm.... It looks like we are doing some development in parallel. > > > > Please look into following commit [1]: > > https://patchwork.ozlabs.org/patch/1034051/ > > > > It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO in > > the long term is a better approach. > > The code is kept simple and resembles the code from Barebox. > > > > Please correct me if I'm wrong, but the code from your work is not > > modeling muxes, gates and other components from Linux CCF. > > The U-Boot implementation of CLK would require as minimal and simple > as possible due to requirement of U-Boot itself. Hope you agree this > point? Now i.MX6 is using clock.c CLK implementation. If we decide to replace it - we shall do it in a way, which would allow us to follow Linux kernel. (the barebox implementation is a stripped CCF from Linux, the same is in patch [1]). > if yes having CCF stack code to handle all clock with > respective separate drivers management is may not require as of now, > IMHO. I do have a gut feeling, that we will end up with the need to have the CCF framework ported anyway. As for example imx7/8 can re-use muxes, gates code. However, those are only my "feelings" after a glimpse look - I will look into your code more thoroughly and provide feedback. > > This series is using recursive calls for handling parenting stuff to > handle get or set rates, which is fine for handling clock tree > management as far as U-Boot point-of-view. We have faced similar > situation as I explained in commit message about Allwinner clocks [2] > and we ended up going this way. I'm not Allwinner expert - but if I may ask - how far away is this implementation from mainline Linux kernel? How difficult is it to port the new code (or update it)? > > The patches where I get introduced clock tree is based on muxes, gates > which were similar like Linux but I've managed to update according to > U-Boot need. > I have tried enet, enet_ref clocks as well and those are > working out-of-box. > > Feel free to comments, I have no intention to block anything. let's > have a proper discussion. Fabio, Stefano what do you think? As we change the clock.c code, IMHO we shall do the new port properly. > > [2] https://patchwork.ozlabs.org/patch/1019673/ 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
On Thu, Apr 4, 2019 at 7:01 AM Lukasz Majewski <lukma@denx.de> wrote: > Fabio, Stefano what do you think? > > As we change the clock.c code, IMHO we shall do the new port properly. I think the CCF solution proposed by Lukasz looks good and it will be easier to maintain and sync with the kernel. Thanks
On Thu, Apr 04, 2019 at 12:48:58PM -0300, Fabio Estevam wrote: > On Thu, Apr 4, 2019 at 7:01 AM Lukasz Majewski <lukma@denx.de> wrote: > > > Fabio, Stefano what do you think? > > > > As we change the clock.c code, IMHO we shall do the new port properly. > > I think the CCF solution proposed by Lukasz looks good and it will be > easier to maintain and sync with the kernel. This sounds like an important goal as well, to me. Thanks!
On Thu, Apr 4, 2019 at 9:26 PM Tom Rini <trini@konsulko.com> wrote: > > On Thu, Apr 04, 2019 at 12:48:58PM -0300, Fabio Estevam wrote: > > On Thu, Apr 4, 2019 at 7:01 AM Lukasz Majewski <lukma@denx.de> wrote: > > > > > Fabio, Stefano what do you think? > > > > > > As we change the clock.c code, IMHO we shall do the new port properly. > > > > I think the CCF solution proposed by Lukasz looks good and it will be > > easier to maintain and sync with the kernel. > > This sounds like an important goal as well, to me. Thanks! I don't know why we rely too-much on Linux to import the big stack code, since the requirement of U-Boot here is to handle the clocks as minimum(as required) as compared to what OS is looking for. Are we looking for handling clock tree management for a whole or looking as required (or as simple) is the main criteria to think about.
On Thu, Apr 4, 2019 at 3:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > On Thu, 4 Apr 2019 14:56:36 +0530 > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > > > > > On Tue, 2 Apr 2019 16:58:33 +0530 > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > This is revised version of previous i.MX6 clock management [1]. > > > > > > > > The main difference between previous version is > > > > - Group the i.MX6 ccm clocks into gates and tree instead of > > > > handling the clocks in simple way using case statement. > > > > - use gate clocks for enable/disable management. > > > > - use tree clocks for get/set rate or parent traverse management. > > > > - parent clock handling via clock type. > > > > - traverse the parent clock using recursive functionlaity. > > > > > > > > The main motive behind this tree framework is to make the clock > > > > tree management simple and useful for U-Boot requirements instead > > > > of garbing Linux clock management code. > > > > > > > > We are trying to manage the Allwinner clocks with similar kind, so > > > > having this would really help i.MX6 as well. > > > > > > > > Added simple names for clock macros, but will update it in future > > > > version. > > > > > > > > I have skipped ENET clocks from previous series, will add it in > > > > future patches. > > > > > > > > Changes for v2: > > > > - changed framework patches. > > > > - add support for imx6qdl and imx6ul boards > > > > - add clock gates, tree. > > > > > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > > > > > Any inputs? > > > > > > Hmm.... It looks like we are doing some development in parallel. > > > > > > Please look into following commit [1]: > > > https://patchwork.ozlabs.org/patch/1034051/ > > > > > > It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO in > > > the long term is a better approach. > > > The code is kept simple and resembles the code from Barebox. > > > > > > Please correct me if I'm wrong, but the code from your work is not > > > modeling muxes, gates and other components from Linux CCF. > > > > The U-Boot implementation of CLK would require as minimal and simple > > as possible due to requirement of U-Boot itself. Hope you agree this > > point? > > Now i.MX6 is using clock.c CLK implementation. If we decide to > replace it - we shall do it in a way, which would allow us to follow > Linux kernel. (the barebox implementation is a stripped CCF from > Linux, the same is in patch [1]). > > > if yes having CCF stack code to handle all clock with > > respective separate drivers management is may not require as of now, > > IMHO. > > I do have a gut feeling, that we will end up with the need to have the > CCF framework ported anyway. As for example imx7/8 can re-use muxes, > gates code. As per my experience the main the over-ahead to handle clocks in U-Boot if we go with separate clock drivers is for Video and Ethernet peripherals. these are key IP's which use more clocks from U-Boot point-of-view, others can be handle pretty straight-forward unless if they don't have too much tree chain. On this series, the tree management is already supported ENET in i.MX6, and Allwinner platforms. As of now, I'm thinking I can handle reset of the clocks with similar way. > > However, those are only my "feelings" after a glimpse look - I will look > into your code more thoroughly and provide feedback. Please have a look, if possible check even the code size by adding USDHC clocks. > > > > > This series is using recursive calls for handling parenting stuff to > > handle get or set rates, which is fine for handling clock tree > > management as far as U-Boot point-of-view. We have faced similar > > situation as I explained in commit message about Allwinner clocks [2] > > and we ended up going this way. > > I'm not Allwinner expert - but if I may ask - how far away is this > implementation from mainline Linux kernel? > > How difficult is it to port the new code (or update it)? Allwinner clocks also has similar gates, muxs, and with other platform stuff which has too much scope in Linux to use CCM.
On Thu, Apr 04, 2019 at 09:35:43PM +0530, Jagan Teki wrote: > On Thu, Apr 4, 2019 at 9:26 PM Tom Rini <trini@konsulko.com> wrote: > > > > On Thu, Apr 04, 2019 at 12:48:58PM -0300, Fabio Estevam wrote: > > > On Thu, Apr 4, 2019 at 7:01 AM Lukasz Majewski <lukma@denx.de> wrote: > > > > > > > Fabio, Stefano what do you think? > > > > > > > > As we change the clock.c code, IMHO we shall do the new port properly. > > > > > > I think the CCF solution proposed by Lukasz looks good and it will be > > > easier to maintain and sync with the kernel. > > > > This sounds like an important goal as well, to me. Thanks! > > I don't know why we rely too-much on Linux to import the big stack > code, since the requirement of U-Boot here is to handle the clocks as > minimum(as required) as compared to what OS is looking for. > > Are we looking for handling clock tree management for a whole or > looking as required (or as simple) is the main criteria to think > about. We rely on leveraging Linux when possible for a lot of reasons. First, it's generally going to have to solve most of the same problems we have to solve. Second, it's what most folks are going to be familiar with. So if we can strip down that same framework to work for us, it'll make life easier on everyone involved.
Hi Jagan, > On Thu, Apr 4, 2019 at 3:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > > > On Thu, 4 Apr 2019 14:56:36 +0530 > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> > > > wrote: > > > > > > > > On Tue, 2 Apr 2019 16:58:33 +0530 > > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > > > This is revised version of previous i.MX6 clock management > > > > > [1]. > > > > > > > > > > The main difference between previous version is > > > > > - Group the i.MX6 ccm clocks into gates and tree instead of > > > > > handling the clocks in simple way using case statement. > > > > > - use gate clocks for enable/disable management. > > > > > - use tree clocks for get/set rate or parent traverse > > > > > management. > > > > > - parent clock handling via clock type. > > > > > - traverse the parent clock using recursive functionlaity. > > > > > > > > > > The main motive behind this tree framework is to make the > > > > > clock tree management simple and useful for U-Boot > > > > > requirements instead of garbing Linux clock management code. > > > > > > > > > > We are trying to manage the Allwinner clocks with similar > > > > > kind, so having this would really help i.MX6 as well. > > > > > > > > > > Added simple names for clock macros, but will update it in > > > > > future version. > > > > > > > > > > I have skipped ENET clocks from previous series, will add it > > > > > in future patches. > > > > > > > > > > Changes for v2: > > > > > - changed framework patches. > > > > > - add support for imx6qdl and imx6ul boards > > > > > - add clock gates, tree. > > > > > > > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > > > > > > > Any inputs? > > > > > > > > Hmm.... It looks like we are doing some development in parallel. > > > > > > > > Please look into following commit [1]: > > > > https://patchwork.ozlabs.org/patch/1034051/ > > > > > > > > It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO > > > > in the long term is a better approach. > > > > The code is kept simple and resembles the code from Barebox. > > > > > > > > Please correct me if I'm wrong, but the code from your work is > > > > not modeling muxes, gates and other components from Linux CCF. > > > > > > The U-Boot implementation of CLK would require as minimal and > > > simple as possible due to requirement of U-Boot itself. Hope you > > > agree this point? > > > > Now i.MX6 is using clock.c CLK implementation. If we decide to > > replace it - we shall do it in a way, which would allow us to follow > > Linux kernel. (the barebox implementation is a stripped CCF from > > Linux, the same is in patch [1]). > > > > > if yes having CCF stack code to handle all clock with > > > respective separate drivers management is may not require as of > > > now, IMHO. > > > > I do have a gut feeling, that we will end up with the need to have > > the CCF framework ported anyway. As for example imx7/8 can re-use > > muxes, gates code. > > As per my experience the main the over-ahead to handle clocks in > U-Boot if we go with separate clock drivers is for Video and Ethernet > peripherals. these are key IP's which use more clocks from U-Boot > point-of-view, others can be handle pretty straight-forward unless if > they don't have too much tree chain. > > On this series, the tree management is already supported ENET in > i.MX6, and Allwinner platforms. > > As of now, I'm thinking I can handle reset of the clocks with similar > way. But this code also supports ENET and ESDHCI clocks on i.MX6Q (as supporting those was the motivator for this work). One important thing to be aware of - the problem with SPL's footprint. The implementation with clock.c is small and simple, but doesn't scale well. > > > > > However, those are only my "feelings" after a glimpse look - I will > > look into your code more thoroughly and provide feedback. > > Please have a look, if possible check even the code size by adding > USDHC clocks. Yes, code size (especially in SPL) is an _important_ factor here. > > > > > > > > > This series is using recursive calls for handling parenting stuff > > > to handle get or set rates, which is fine for handling clock tree > > > management as far as U-Boot point-of-view. We have faced similar > > > situation as I explained in commit message about Allwinner clocks > > > [2] and we ended up going this way. > > > > I'm not Allwinner expert - but if I may ask - how far away is this > > implementation from mainline Linux kernel? > > > > How difficult is it to port the new code (or update it)? > > Allwinner clocks also has similar gates, muxs, and with other platform > stuff which has too much scope in Linux to use CCM. For example the barebox managed to get subset of Linux CCF ported, without loosing the CCF similarity. Important factors/requirements for the i.MX clock code: 1. Easy maintenance in long-term 2. Reusing the code in SPL (with a very important factor of _code_size_). 3. Reuse the code for other i.MX SoCs (imx7, imx8) 4. Effort needed to use DM with this code 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
On Fri, Apr 5, 2019 at 2:20 AM Lukasz Majewski <lukma@denx.de> wrote: > > Hi Jagan, > > > On Thu, Apr 4, 2019 at 3:31 PM Lukasz Majewski <lukma@denx.de> wrote: > > > > > > On Thu, 4 Apr 2019 14:56:36 +0530 > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> > > > > wrote: > > > > > > > > > > On Tue, 2 Apr 2019 16:58:33 +0530 > > > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > > > > > This is revised version of previous i.MX6 clock management > > > > > > [1]. > > > > > > > > > > > > The main difference between previous version is > > > > > > - Group the i.MX6 ccm clocks into gates and tree instead of > > > > > > handling the clocks in simple way using case statement. > > > > > > - use gate clocks for enable/disable management. > > > > > > - use tree clocks for get/set rate or parent traverse > > > > > > management. > > > > > > - parent clock handling via clock type. > > > > > > - traverse the parent clock using recursive functionlaity. > > > > > > > > > > > > The main motive behind this tree framework is to make the > > > > > > clock tree management simple and useful for U-Boot > > > > > > requirements instead of garbing Linux clock management code. > > > > > > > > > > > > We are trying to manage the Allwinner clocks with similar > > > > > > kind, so having this would really help i.MX6 as well. > > > > > > > > > > > > Added simple names for clock macros, but will update it in > > > > > > future version. > > > > > > > > > > > > I have skipped ENET clocks from previous series, will add it > > > > > > in future patches. > > > > > > > > > > > > Changes for v2: > > > > > > - changed framework patches. > > > > > > - add support for imx6qdl and imx6ul boards > > > > > > - add clock gates, tree. > > > > > > > > > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > > > > > > > > > Any inputs? > > > > > > > > > > Hmm.... It looks like we are doing some development in parallel. > > > > > > > > > > Please look into following commit [1]: > > > > > https://patchwork.ozlabs.org/patch/1034051/ > > > > > > > > > > It ports from Linux 5.0 the CCF framework for iMX6Q, which IMHO > > > > > in the long term is a better approach. > > > > > The code is kept simple and resembles the code from Barebox. > > > > > > > > > > Please correct me if I'm wrong, but the code from your work is > > > > > not modeling muxes, gates and other components from Linux CCF. > > > > > > > > The U-Boot implementation of CLK would require as minimal and > > > > simple as possible due to requirement of U-Boot itself. Hope you > > > > agree this point? > > > > > > Now i.MX6 is using clock.c CLK implementation. If we decide to > > > replace it - we shall do it in a way, which would allow us to follow > > > Linux kernel. (the barebox implementation is a stripped CCF from > > > Linux, the same is in patch [1]). > > > > > > > if yes having CCF stack code to handle all clock with > > > > respective separate drivers management is may not require as of > > > > now, IMHO. > > > > > > I do have a gut feeling, that we will end up with the need to have > > > the CCF framework ported anyway. As for example imx7/8 can re-use > > > muxes, gates code. > > > > As per my experience the main the over-ahead to handle clocks in > > U-Boot if we go with separate clock drivers is for Video and Ethernet > > peripherals. these are key IP's which use more clocks from U-Boot > > point-of-view, others can be handle pretty straight-forward unless if > > they don't have too much tree chain. > > > > On this series, the tree management is already supported ENET in > > i.MX6, and Allwinner platforms. > > > > As of now, I'm thinking I can handle reset of the clocks with similar > > way. > > But this code also supports ENET and ESDHCI clocks on i.MX6Q (as > supporting those was the motivator for this work). > > One important thing to be aware of - the problem with SPL's footprint. > The implementation with clock.c is small and simple, but doesn't scale > well. > > > > > > > > > However, those are only my "feelings" after a glimpse look - I will > > > look into your code more thoroughly and provide feedback. > > > > Please have a look, if possible check even the code size by adding > > USDHC clocks. > > Yes, code size (especially in SPL) is an _important_ factor here. > > > > > > > > > > > > > > This series is using recursive calls for handling parenting stuff > > > > to handle get or set rates, which is fine for handling clock tree > > > > management as far as U-Boot point-of-view. We have faced similar > > > > situation as I explained in commit message about Allwinner clocks > > > > [2] and we ended up going this way. > > > > > > I'm not Allwinner expert - but if I may ask - how far away is this > > > implementation from mainline Linux kernel? > > > > > > How difficult is it to port the new code (or update it)? > > > > Allwinner clocks also has similar gates, muxs, and with other platform > > stuff which has too much scope in Linux to use CCM. > > For example the barebox managed to get subset of Linux CCF ported, > without loosing the CCF similarity. > > > Important factors/requirements for the i.MX clock code: > > 1. Easy maintenance in long-term > > 2. Reusing the code in SPL (with a very important factor of > _code_size_). > > 3. Reuse the code for other i.MX SoCs (imx7, imx8) > > 4. Effort needed to use DM with this code I understand your points, I was managed this series based on these requirements as well. We even consider the foot-print, atleast for recursive calls of handling parenting scale well. May be we can consider to design based on this as per U-Boot. Let me come-back with another series or do you have any inputs or questions, please post it. Jagan.
On Fri, 19 Apr 2019 11:56:25 +0530 Jagan Teki <jagan@amarulasolutions.com> wrote: > On Fri, Apr 5, 2019 at 2:20 AM Lukasz Majewski <lukma@denx.de> wrote: > > > > Hi Jagan, > > > > > On Thu, Apr 4, 2019 at 3:31 PM Lukasz Majewski <lukma@denx.de> > > > wrote: > > > > > > > > On Thu, 4 Apr 2019 14:56:36 +0530 > > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > > > On Thu, Apr 4, 2019 at 2:31 PM Lukasz Majewski <lukma@denx.de> > > > > > wrote: > > > > > > > > > > > > On Tue, 2 Apr 2019 16:58:33 +0530 > > > > > > Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > > > > > > > This is revised version of previous i.MX6 clock management > > > > > > > [1]. > > > > > > > > > > > > > > The main difference between previous version is > > > > > > > - Group the i.MX6 ccm clocks into gates and tree instead > > > > > > > of handling the clocks in simple way using case statement. > > > > > > > - use gate clocks for enable/disable management. > > > > > > > - use tree clocks for get/set rate or parent traverse > > > > > > > management. > > > > > > > - parent clock handling via clock type. > > > > > > > - traverse the parent clock using recursive functionlaity. > > > > > > > > > > > > > > The main motive behind this tree framework is to make the > > > > > > > clock tree management simple and useful for U-Boot > > > > > > > requirements instead of garbing Linux clock management > > > > > > > code. > > > > > > > > > > > > > > We are trying to manage the Allwinner clocks with similar > > > > > > > kind, so having this would really help i.MX6 as well. > > > > > > > > > > > > > > Added simple names for clock macros, but will update it in > > > > > > > future version. > > > > > > > > > > > > > > I have skipped ENET clocks from previous series, will add > > > > > > > it in future patches. > > > > > > > > > > > > > > Changes for v2: > > > > > > > - changed framework patches. > > > > > > > - add support for imx6qdl and imx6ul boards > > > > > > > - add clock gates, tree. > > > > > > > > > > > > > > [1] https://patchwork.ozlabs.org/cover/950964/ > > > > > > > > > > > > > > Any inputs? > > > > > > > > > > > > Hmm.... It looks like we are doing some development in > > > > > > parallel. > > > > > > > > > > > > Please look into following commit [1]: > > > > > > https://patchwork.ozlabs.org/patch/1034051/ > > > > > > > > > > > > It ports from Linux 5.0 the CCF framework for iMX6Q, which > > > > > > IMHO in the long term is a better approach. > > > > > > The code is kept simple and resembles the code from Barebox. > > > > > > > > > > > > Please correct me if I'm wrong, but the code from your work > > > > > > is not modeling muxes, gates and other components from > > > > > > Linux CCF. > > > > > > > > > > The U-Boot implementation of CLK would require as minimal and > > > > > simple as possible due to requirement of U-Boot itself. Hope > > > > > you agree this point? > > > > > > > > Now i.MX6 is using clock.c CLK implementation. If we decide to > > > > replace it - we shall do it in a way, which would allow us to > > > > follow Linux kernel. (the barebox implementation is a stripped > > > > CCF from Linux, the same is in patch [1]). > > > > > > > > > if yes having CCF stack code to handle all clock with > > > > > respective separate drivers management is may not require as > > > > > of now, IMHO. > > > > > > > > I do have a gut feeling, that we will end up with the need to > > > > have the CCF framework ported anyway. As for example imx7/8 can > > > > re-use muxes, gates code. > > > > > > As per my experience the main the over-ahead to handle clocks in > > > U-Boot if we go with separate clock drivers is for Video and > > > Ethernet peripherals. these are key IP's which use more clocks > > > from U-Boot point-of-view, others can be handle pretty > > > straight-forward unless if they don't have too much tree chain. > > > > > > On this series, the tree management is already supported ENET in > > > i.MX6, and Allwinner platforms. > > > > > > As of now, I'm thinking I can handle reset of the clocks with > > > similar way. > > > > But this code also supports ENET and ESDHCI clocks on i.MX6Q (as > > supporting those was the motivator for this work). > > > > One important thing to be aware of - the problem with SPL's > > footprint. The implementation with clock.c is small and simple, but > > doesn't scale well. > > > > > > > > > > > > > However, those are only my "feelings" after a glimpse look - I > > > > will look into your code more thoroughly and provide feedback. > > > > > > Please have a look, if possible check even the code size by adding > > > USDHC clocks. > > > > Yes, code size (especially in SPL) is an _important_ factor here. > > > > > > > > > > > > > > > > > > > This series is using recursive calls for handling parenting > > > > > stuff to handle get or set rates, which is fine for handling > > > > > clock tree management as far as U-Boot point-of-view. We have > > > > > faced similar situation as I explained in commit message > > > > > about Allwinner clocks [2] and we ended up going this way. > > > > > > > > I'm not Allwinner expert - but if I may ask - how far away is > > > > this implementation from mainline Linux kernel? > > > > > > > > How difficult is it to port the new code (or update it)? > > > > > > Allwinner clocks also has similar gates, muxs, and with other > > > platform stuff which has too much scope in Linux to use CCM. > > > > For example the barebox managed to get subset of Linux CCF ported, > > without loosing the CCF similarity. > > > > > > Important factors/requirements for the i.MX clock code: > > > > 1. Easy maintenance in long-term > > > > 2. Reusing the code in SPL (with a very important factor of > > _code_size_). > > > > 3. Reuse the code for other i.MX SoCs (imx7, imx8) > > > > 4. Effort needed to use DM with this code > > I understand your points, I was managed this series based on these > requirements as well. Ok. Could you share the delta of footprint size (u-boot.img/SPL) with and without your patch (on imx6q) ? In my case the CCF caused increase of u-boot.img proper (as it was not yet adapted to SPL): 415KiB -> 421KiB = 6KiB increase of size (< 2%). (This can be further reduced by using OF_PLATDATA). This CCF code hasn't been ported to SPL (yet) > We even consider the foot-print, atleast for > recursive calls of handling parenting scale well. With CCF porting v3 I'm going to provide some caching, so the descending would be done at most once. > May be we can > consider to design based on this as per U-Boot. > Please look into point 1. Having code ported from Linux is IMHO better in the long term. > Let me come-back with another series or do you have any inputs or > questions, please post it. I will post CCF port for imx6q v3 in a few days. > > Jagan. 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