All of lore.kernel.org
 help / color / mirror / Atom feed
From: Giulio Benetti <giulio.benetti@benettiengineering.com>
To: u-boot@lists.denx.de
Subject: [PATCH v2 09/21] clk: imx: pllv3: add support for PLLV3_AV type
Date: Fri, 31 Jan 2020 14:50:35 +0100	[thread overview]
Message-ID: <e1c755ed-5b81-be0e-caa5-40e9048e4d3a@benettiengineering.com> (raw)
In-Reply-To: <20200128092019.325baae8@jawa>

Hi Lukasz,

On 1/28/20 9:20 AM, Lukasz Majewski wrote:
> Hi Giulio,
> 
>> Add support for PLLV3 AV type.
> 
> If this code has been ported from Linux kernel, then provide SHA1,
> branch, and commit message.

Oh sorry,

Code taken from Linux with below commit:
"ARM: imx: add common clock support for pllv3"
(sha1: a3f6b9dbf2a964b85f0523e577807d6f63d6b29d)

Hope this way is ok, I imitated other commit logs in u-boot.

Best regards
-- 
Giulio Benetti
Benetti Engineering sas

> Acked-by: Lukasz Majewski <lukma@denx.de>
> 
>>
>> Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
>> ---
>>   drivers/clk/imx/clk-pllv3.c | 76
>> +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+)
>>
>> diff --git a/drivers/clk/imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c
>> index d5087a104e..fc16416d5f 100644
>> --- a/drivers/clk/imx/clk-pllv3.c
>> +++ b/drivers/clk/imx/clk-pllv3.c
>> @@ -6,6 +6,7 @@
>>   
>>   #include <common.h>
>>   #include <asm/io.h>
>> +#include <div64.h>
>>   #include <malloc.h>
>>   #include <clk-uclass.h>
>>   #include <dm/device.h>
>> @@ -16,6 +17,10 @@
>>   #define UBOOT_DM_CLK_IMX_PLLV3_GENERIC	"imx_clk_pllv3_generic"
>>   #define UBOOT_DM_CLK_IMX_PLLV3_SYS	"imx_clk_pllv3_sys"
>>   #define UBOOT_DM_CLK_IMX_PLLV3_USB	"imx_clk_pllv3_usb"
>> +#define UBOOT_DM_CLK_IMX_PLLV3_AV	"imx_clk_pllv3_av"
>> +
>> +#define PLL_NUM_OFFSET		0x10
>> +#define PLL_DENOM_OFFSET	0x20
>>   
>>   #define BM_PLL_POWER		(0x1 << 12)
>>   #define BM_PLL_LOCK		(0x1 << 31)
>> @@ -143,6 +148,65 @@ static const struct clk_ops clk_pllv3_sys_ops = {
>>   	.set_rate	= clk_pllv3_sys_set_rate,
>>   };
>>   
>> +static ulong clk_pllv3_av_get_rate(struct clk *clk)
>> +{
>> +	struct clk_pllv3 *pll = to_clk_pllv3(clk);
>> +	unsigned long parent_rate = clk_get_parent_rate(clk);
>> +	u32 mfn = readl(pll->base + PLL_NUM_OFFSET);
>> +	u32 mfd = readl(pll->base + PLL_DENOM_OFFSET);
>> +	u32 div = readl(pll->base) & pll->div_mask;
>> +	u64 temp64 = (u64)parent_rate;
>> +
>> +	temp64 *= mfn;
>> +	do_div(temp64, mfd);
>> +
>> +	return parent_rate * div + (unsigned long)temp64;
>> +}
>> +
>> +static ulong clk_pllv3_av_set_rate(struct clk *clk, ulong rate)
>> +{
>> +	struct clk_pllv3 *pll = to_clk_pllv3(clk);
>> +	unsigned long parent_rate = clk_get_parent_rate(clk);
>> +	unsigned long min_rate = parent_rate * 27;
>> +	unsigned long max_rate = parent_rate * 54;
>> +	u32 val, div;
>> +	u32 mfn, mfd = 1000000;
>> +	u32 max_mfd = 0x3FFFFFFF;
>> +	u64 temp64;
>> +
>> +	if (rate < min_rate || rate > max_rate)
>> +		return -EINVAL;
>> +
>> +	if (parent_rate <= max_mfd)
>> +		mfd = parent_rate;
>> +
>> +	div = rate / parent_rate;
>> +	temp64 = (u64)(rate - div * parent_rate);
>> +	temp64 *= mfd;
>> +	do_div(temp64, parent_rate);
>> +	mfn = temp64;
>> +
>> +	val = readl(pll->base);
>> +	val &= ~pll->div_mask;
>> +	val |= div;
>> +	writel(val, pll->base);
>> +	writel(mfn, pll->base + PLL_NUM_OFFSET);
>> +	writel(mfd, pll->base + PLL_DENOM_OFFSET);
>> +
>> +	/* Wait for PLL to lock */
>> +	while (!(readl(pll->base) & BM_PLL_LOCK))
>> +		;
>> +
>> +	return 0;
>> +}
>> +
>> +static const struct clk_ops clk_pllv3_av_ops = {
>> +	.enable		= clk_pllv3_generic_enable,
>> +	.disable	= clk_pllv3_generic_disable,
>> +	.get_rate	= clk_pllv3_av_get_rate,
>> +	.set_rate	= clk_pllv3_av_set_rate,
>> +};
>> +
>>   struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
>>   			  const char *parent_name, void __iomem
>> *base, u32 div_mask)
>> @@ -174,6 +238,11 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type
>> type, const char *name, pll->div_shift = 1;
>>   		pll->powerup_set = true;
>>   		break;
>> +	case IMX_PLLV3_AV:
>> +		drv_name = UBOOT_DM_CLK_IMX_PLLV3_AV;
>> +		pll->div_shift = 0;
>> +		pll->powerup_set = false;
>> +		break;
>>   	default:
>>   		kfree(pll);
>>   		return ERR_PTR(-ENOTSUPP);
>> @@ -212,3 +281,10 @@ U_BOOT_DRIVER(clk_pllv3_usb) = {
>>   	.ops	= &clk_pllv3_generic_ops,
>>   	.flags = DM_FLAG_PRE_RELOC,
>>   };
>> +
>> +U_BOOT_DRIVER(clk_pllv3_av) = {
>> +	.name	= UBOOT_DM_CLK_IMX_PLLV3_AV,
>> +	.id	= UCLASS_CLK,
>> +	.ops	= &clk_pllv3_av_ops,
>> +	.flags = DM_FLAG_PRE_RELOC,
>> +};
> 
> 
> 
> 
> 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 at denx.de
> 

  reply	other threads:[~2020-01-31 13:50 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-10 14:46 [PATCH v2 00/21] Add i.MXRT family support Giulio Benetti
2020-01-10 14:46 ` [PATCH v2 01/21] spl: fix entry_point equal to load_addr Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:09   ` Lukasz Majewski
2020-01-28 16:37     ` Giulio Benetti
2020-01-29  8:33       ` Lukasz Majewski
2020-01-10 14:46 ` [PATCH v2 02/21] armv7m: cache: add mmu_set_region_dcache_behaviour() stub for compatibility Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:10   ` Lukasz Majewski
2020-01-28 16:50     ` Giulio Benetti
2020-01-29  8:36       ` Lukasz Majewski
2020-01-10 14:46 ` [PATCH v2 03/21] clk: imx: pllv3: register PLLV3 GENERIC and USB as 2 different clocks Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-10 14:46 ` [PATCH v2 04/21] clk: imx: pllv3: set div_mask differently if PLLV3 is GENERIC or USB Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-10 14:46 ` [PATCH v2 05/21] clk: imx: pllv3: add enable() support Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:14   ` Lukasz Majewski
2020-01-28 18:46     ` Giulio Benetti
2020-01-10 14:46 ` [PATCH v2 06/21] clk: imx: pllv3: add disable() support Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-10 14:46 ` [PATCH v2 07/21] clk: imx: pllv3: add set_rate() support Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-10 14:46 ` [PATCH v2 08/21] clk: imx: pllv3: add PLLV3_SYS support Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-10 14:46 ` [PATCH v2 09/21] clk: imx: pllv3: add support for PLLV3_AV type Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:20   ` Lukasz Majewski
2020-01-31 13:50     ` Giulio Benetti [this message]
2020-01-10 14:47 ` [PATCH v2 10/21] clk: imx: pfd: add set_rate() Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-10 14:47 ` [PATCH v2 11/21] clk: imx: add i.IMXRT1050 clk driver Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:23   ` Lukasz Majewski
2020-01-10 14:47 ` [PATCH v2 12/21] pinctrl: add i.MXRT driver Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-28  8:27   ` Lukasz Majewski
2020-01-10 14:47 ` [PATCH v2 13/21] gpio: mxc_gpio: add support for i.MXRT1050 Giulio Benetti
2020-01-15 12:46   ` sbabic at denx.de
2020-01-28  8:27   ` Lukasz Majewski
2020-01-10 14:47 ` [PATCH v2 14/21] ARM: dts: imxrt1050: add dtsi file Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-28  8:31   ` Lukasz Majewski
2020-01-28 18:48     ` Giulio Benetti
2020-01-10 14:47 ` [PATCH v2 15/21] serial_lpuart: add clock enable if CONFIG_CLK is defined Giulio Benetti
2020-01-15 12:47   ` sbabic at denx.de
2020-01-28  8:36   ` Lukasz Majewski
2020-01-28 18:49     ` Giulio Benetti
2020-01-31 13:39       ` [PATCH] serial_lpuart: make clock failure less verbose Giulio Benetti
2020-01-31 18:14         ` Simon Glass
2020-01-31 20:24           ` Giulio Benetti
2020-02-01 12:48             ` Lukasz Majewski
2020-02-10 22:17               ` Giulio Benetti
2020-03-10 15:31         ` sbabic at denx.de

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=e1c755ed-5b81-be0e-caa5-40e9048e4d3a@benettiengineering.com \
    --to=giulio.benetti@benettiengineering.com \
    --cc=u-boot@lists.denx.de \
    /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.