devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Lechner <david@lechnology.com>
To: Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	Kevin Hilman <khilman@kernel.org>, Sekhar Nori <nsekhar@ti.com>,
	Patrick Titiano <ptitiano@baylibre.com>,
	Michael Turquette <mturquette@baylibre.com>,
	Tejun Heo <tj@kernel.org>, Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Russell King <linux@armlinux.org.uk>
Cc: linux-ide@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 11/14] sata: ahci-da850: un-hardcode the MPY bits
Date: Tue, 17 Jan 2017 12:51:49 -0600	[thread overview]
Message-ID: <062b5ef3-cc3a-0f9c-c040-93495f374dac@lechnology.com> (raw)
In-Reply-To: <1484655976-25382-12-git-send-email-bgolaszewski@baylibre.com>

On 01/17/2017 06:26 AM, Bartosz Golaszewski wrote:
> In order to make the MPY bits configurable, try to obtain the refclk
> and calculate the required multiplier from its rate.
>
> If we fail to get the clock, fall back to the default value which
> keeps backwards compatibility.

It seems like it would be wiser to make is so that if we fail to get the 
clock, it is an error. This way, if someone makes a new board and 
forgets to configure a clock, they will get an error instead of 
wondering why things are not working because it is using the wrong 
multiplier.

>
> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> ---
>  drivers/ata/ahci_da850.c | 88 +++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 76 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c
> index a7a7161..f48b7d0 100644
> --- a/drivers/ata/ahci_da850.c
> +++ b/drivers/ata/ahci_da850.c
> @@ -14,6 +14,7 @@
>  #include <linux/platform_device.h>
>  #include <linux/libata.h>
>  #include <linux/ahci_platform.h>
> +#include <asm/div64.h>
>  #include "ahci.h"
>
>  #define DRV_NAME		"ahci_da850"
> @@ -30,16 +31,14 @@
>  #define SATA_PHY_ENPLL(x)	((x) << 31)
>
>  /*
> - * The multiplier needed for 1.5GHz PLL output.
> - *
> - * NOTE: This is currently hardcoded to be suitable for 100MHz crystal
> - * frequency (which is used by DA850 EVM board) and may need to be changed
> - * if you would like to use this driver on some other board.
> + * This is the default multiplier value used if the refclk could not be
> + * obtained. It corresponds with a crystal rate of 100MHz for 1.5GHz PLL
> + * output.
>   */
> -#define DA850_SATA_CLK_MULTIPLIER	7
> +#define DA850_SATA_MPY_DEFAULT	0x8
>
>  static void da850_sata_init(struct device *dev, void __iomem *pwrdn_reg,
> -			    void __iomem *ahci_base)
> +			    void __iomem *ahci_base, u32 mpy)
>  {
>  	unsigned int val;
>
> @@ -48,13 +47,56 @@ static void da850_sata_init(struct device *dev, void __iomem *pwrdn_reg,
>  	val &= ~BIT(0);
>  	writel(val, pwrdn_reg);
>
> -	val = SATA_PHY_MPY(DA850_SATA_CLK_MULTIPLIER + 1) | SATA_PHY_LOS(1) |
> -	      SATA_PHY_RXCDR(4) | SATA_PHY_RXEQ(1) | SATA_PHY_TXSWING(3) |
> -	      SATA_PHY_ENPLL(1);
> +	val = SATA_PHY_MPY(mpy) | SATA_PHY_LOS(1) | SATA_PHY_RXCDR(4) |
> +	      SATA_PHY_RXEQ(1) | SATA_PHY_TXSWING(3) | SATA_PHY_ENPLL(1);
>
>  	writel(val, ahci_base + SATA_P0PHYCR_REG);
>  }
>
> +static u32 ahci_da850_calculate_mpy(unsigned long refclk_rate)
> +{
> +	u64 pll_output = 1500000000;
> +	u32 needed;
> +
> +	/*
> +	 * We need to determine the value of the multiplier (MPY) bits.
> +	 *
> +	 * In order to include the 12.5 multiplier we need to first multiply
> +	 * the desired rate of 1.5GHz by 10 before division.
> +	 */
> +	pll_output *= 10;
> +	needed = __div64_32(&pll_output, refclk_rate);

What if this does not divide evenly and there is a remainder. Shouldn't 
there be an error in that case?

...

  reply	other threads:[~2017-01-17 18:51 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-17 12:26 [PATCH v2 00/14] ARM: da850-lcdk: add SATA support Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 01/14] devicetree: bindings: add bindings for ahci-da850 Bartosz Golaszewski
2017-01-17 18:35   ` David Lechner
2017-01-18  9:05     ` Sekhar Nori
2017-01-17 12:26 ` [PATCH v2 02/14] ARM: davinci_all_defconfig: enable SATA modules Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 03/14] ARM: davinci: add a clock lookup entry for the SATA clock Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 04/14] sata: ahci-da850: get the sata clock using a connector id Bartosz Golaszewski
2017-01-17 16:02   ` Sergei Shtylyov
2017-01-17 12:26 ` [PATCH v2 05/14] ARM: davinci: da850: add con_id for the SATA clock Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 06/14] ARM: davinci: da850: model the SATA refclk Bartosz Golaszewski
2017-01-17 18:40   ` David Lechner
2017-01-18  9:02   ` Sekhar Nori
2017-01-17 12:26 ` [PATCH v2 08/14] sata: ahci-da850: implement a workaround for the softreset quirk Bartosz Golaszewski
     [not found] ` <1484655976-25382-1-git-send-email-bgolaszewski-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-01-17 12:26   ` [PATCH v2 07/14] sata: ahci-da850: add device tree match table Bartosz Golaszewski
2017-01-17 12:26   ` [PATCH v2 09/14] sata: ahci: export ahci_do_hardreset() locally Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 10/14] sata: ahci-da850: add a workaround for controller instability Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 11/14] sata: ahci-da850: un-hardcode the MPY bits Bartosz Golaszewski
2017-01-17 18:51   ` David Lechner [this message]
2017-01-17 12:26 ` [PATCH v2 12/14] ARM: dts: da850: add pinmux settings for the SATA controller Bartosz Golaszewski
2017-01-18  9:39   ` Sekhar Nori
2017-01-17 12:26 ` [PATCH v2 13/14] ARM: dts: da850: add the SATA node Bartosz Golaszewski
2017-01-17 12:26 ` [PATCH v2 14/14] ARM: dts: da850-lcdk: enable " Bartosz Golaszewski
2017-01-17 18:53   ` David Lechner
2017-01-18  0:39   ` Kevin Hilman

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=062b5ef3-cc3a-0f9c-c040-93495f374dac@lechnology.com \
    --to=david@lechnology.com \
    --cc=bgolaszewski@baylibre.com \
    --cc=devicetree@vger.kernel.org \
    --cc=khilman@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=mturquette@baylibre.com \
    --cc=nsekhar@ti.com \
    --cc=ptitiano@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=tj@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).