All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Stuebner <heiko@sntech.de>
To: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Cc: robh+dt@kernel.org, mark.rutland@arm.com,
	shawn.lin@rock-chips.com,
	Philipp Tomsich <philipp.tomsich@theobroma-systems.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	Klaus Goger <klaus.goger@theobroma-systems.com>,
	Douglas Anderson <dianders@chromium.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Matthias Brugger <mbrugger@suse.com>,
	Emil Renner Berthing <kernel@esmil.dk>,
	Tony Xie <tony.xie@rock-chips.com>, Randy Li <ayaka@soulik.info>,
	Vicente Bergas <vicencb@gmail.com>,
	Ezequiel Garcia <ezequiel@collabora.com>,
	devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] phy: rockchip-emmc: Allow to set drive impedance via DTS.
Date: Fri, 01 Mar 2019 16:59:25 +0100	[thread overview]
Message-ID: <2706069.0FZLJLT2V8@phil> (raw)
In-Reply-To: <20190301153348.29870-1-christoph.muellner@theobroma-systems.com>

Hi Christoph,

Am Freitag, 1. März 2019, 16:33:43 CET schrieb Christoph Muellner:
> The rockchip-emmc PHY can be configured with different
> drive impedance values. Currenlty a value of 50 Ohm is
> hard coded into the driver.
> 
> This patch introduces the DTS property 'drive-impedance-ohm'
> for the rockchip-emmc phy node, which uses the value from the DTS
> to setup the drive impedance accordingly.
> 
> Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> ---
>  drivers/phy/rockchip/phy-rockchip-emmc.c | 38 ++++++++++++++++++++++++++++++--

looks good on first glance, but is missing an addition to the emmc-phy
devicetree binding in
	Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt


Heiko

>  1 file changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 19bf84f0bc67..5413fa73dd45 100644
> --- a/drivers/phy/rockchip/phy-rockchip-emmc.c
> +++ b/drivers/phy/rockchip/phy-rockchip-emmc.c
> @@ -87,6 +87,7 @@ struct rockchip_emmc_phy {
>  	unsigned int	reg_offset;
>  	struct regmap	*reg_base;
>  	struct clk	*emmcclk;
> +	unsigned int drive_impedance;
>  };
>  
>  static int rockchip_emmc_phy_power(struct phy *phy, bool on_off)
> @@ -281,10 +282,10 @@ static int rockchip_emmc_phy_power_on(struct phy *phy)
>  {
>  	struct rockchip_emmc_phy *rk_phy = phy_get_drvdata(phy);
>  
> -	/* Drive impedance: 50 Ohm */
> +	/* Drive impedance: from DTS */
>  	regmap_write(rk_phy->reg_base,
>  		     rk_phy->reg_offset + GRF_EMMCPHY_CON6,
> -		     HIWORD_UPDATE(PHYCTRL_DR_50OHM,
> +		     HIWORD_UPDATE(rk_phy->drive_impedance,
>  				   PHYCTRL_DR_MASK,
>  				   PHYCTRL_DR_SHIFT));
>  
> @@ -314,6 +315,28 @@ static const struct phy_ops ops = {
>  	.owner		= THIS_MODULE,
>  };
>  
> +static u32 convert_drive_impedance_ohm(struct platform_device *pdev, u32 dr_ohm)
> +{
> +	switch (dr_ohm) {
> +	case 100:
> +		return PHYCTRL_DR_100OHM;
> +	case 66:
> +		return PHYCTRL_DR_66OHM;
> +	case 50:
> +		return PHYCTRL_DR_50OHM;
> +	case 40:
> +		return PHYCTRL_DR_40OHM;
> +	case 33:
> +		return PHYCTRL_DR_33OHM;
> +	}
> +
> +	dev_warn(&pdev->dev,
> +		"Invalid value %u for drive-impedance-ohm. "
> +		"Falling back to 50 Ohm.\n",
> +		dr_ohm);
> +	return PHYCTRL_DR_50OHM;
> +}
> +
>  static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
> @@ -322,6 +345,7 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  	struct phy_provider *phy_provider;
>  	struct regmap *grf;
>  	unsigned int reg_offset;
> +	u32 val;
>  
>  	if (!dev->parent || !dev->parent->of_node)
>  		return -ENODEV;
> @@ -345,6 +369,16 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  	rk_phy->reg_offset = reg_offset;
>  	rk_phy->reg_base = grf;
>  
> +	if (of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val)) {
> +		dev_info(dev,
> +			"Missing drive-impedance-ohm property in node %s "
> +			"Falling back to 50 Ohm.\n",
> +			dev->of_node->name);
> +		rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> +	} else {
> +		rk_phy->drive_impedance = convert_drive_impedance_ohm(pdev, val);
> +	}
> +
>  	generic_phy = devm_phy_create(dev, dev->of_node, &ops);
>  	if (IS_ERR(generic_phy)) {
>  		dev_err(dev, "failed to create PHY\n");
> 

WARNING: multiple messages have this Message-ID (diff)
From: Heiko Stuebner <heiko@sntech.de>
To: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	Matthias Brugger <mbrugger@suse.com>,
	linux-kernel@vger.kernel.org,
	Emil Renner Berthing <kernel@esmil.dk>,
	Tony Xie <tony.xie@rock-chips.com>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	shawn.lin@rock-chips.com, Randy Li <ayaka@soulik.info>,
	Douglas Anderson <dianders@chromium.org>,
	Vicente Bergas <vicencb@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	linux-rockchip@lists.infradead.org, robh+dt@kernel.org,
	Klaus Goger <klaus.goger@theobroma-systems.com>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	Philipp Tomsich <philipp.tomsich@theobroma-systems.com>,
	Ezequiel Garcia <ezequiel@collabora.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/3] phy: rockchip-emmc: Allow to set drive impedance via DTS.
Date: Fri, 01 Mar 2019 16:59:25 +0100	[thread overview]
Message-ID: <2706069.0FZLJLT2V8@phil> (raw)
In-Reply-To: <20190301153348.29870-1-christoph.muellner@theobroma-systems.com>

Hi Christoph,

Am Freitag, 1. März 2019, 16:33:43 CET schrieb Christoph Muellner:
> The rockchip-emmc PHY can be configured with different
> drive impedance values. Currenlty a value of 50 Ohm is
> hard coded into the driver.
> 
> This patch introduces the DTS property 'drive-impedance-ohm'
> for the rockchip-emmc phy node, which uses the value from the DTS
> to setup the drive impedance accordingly.
> 
> Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> ---
>  drivers/phy/rockchip/phy-rockchip-emmc.c | 38 ++++++++++++++++++++++++++++++--

looks good on first glance, but is missing an addition to the emmc-phy
devicetree binding in
	Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt


Heiko

>  1 file changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 19bf84f0bc67..5413fa73dd45 100644
> --- a/drivers/phy/rockchip/phy-rockchip-emmc.c
> +++ b/drivers/phy/rockchip/phy-rockchip-emmc.c
> @@ -87,6 +87,7 @@ struct rockchip_emmc_phy {
>  	unsigned int	reg_offset;
>  	struct regmap	*reg_base;
>  	struct clk	*emmcclk;
> +	unsigned int drive_impedance;
>  };
>  
>  static int rockchip_emmc_phy_power(struct phy *phy, bool on_off)
> @@ -281,10 +282,10 @@ static int rockchip_emmc_phy_power_on(struct phy *phy)
>  {
>  	struct rockchip_emmc_phy *rk_phy = phy_get_drvdata(phy);
>  
> -	/* Drive impedance: 50 Ohm */
> +	/* Drive impedance: from DTS */
>  	regmap_write(rk_phy->reg_base,
>  		     rk_phy->reg_offset + GRF_EMMCPHY_CON6,
> -		     HIWORD_UPDATE(PHYCTRL_DR_50OHM,
> +		     HIWORD_UPDATE(rk_phy->drive_impedance,
>  				   PHYCTRL_DR_MASK,
>  				   PHYCTRL_DR_SHIFT));
>  
> @@ -314,6 +315,28 @@ static const struct phy_ops ops = {
>  	.owner		= THIS_MODULE,
>  };
>  
> +static u32 convert_drive_impedance_ohm(struct platform_device *pdev, u32 dr_ohm)
> +{
> +	switch (dr_ohm) {
> +	case 100:
> +		return PHYCTRL_DR_100OHM;
> +	case 66:
> +		return PHYCTRL_DR_66OHM;
> +	case 50:
> +		return PHYCTRL_DR_50OHM;
> +	case 40:
> +		return PHYCTRL_DR_40OHM;
> +	case 33:
> +		return PHYCTRL_DR_33OHM;
> +	}
> +
> +	dev_warn(&pdev->dev,
> +		"Invalid value %u for drive-impedance-ohm. "
> +		"Falling back to 50 Ohm.\n",
> +		dr_ohm);
> +	return PHYCTRL_DR_50OHM;
> +}
> +
>  static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
> @@ -322,6 +345,7 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  	struct phy_provider *phy_provider;
>  	struct regmap *grf;
>  	unsigned int reg_offset;
> +	u32 val;
>  
>  	if (!dev->parent || !dev->parent->of_node)
>  		return -ENODEV;
> @@ -345,6 +369,16 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>  	rk_phy->reg_offset = reg_offset;
>  	rk_phy->reg_base = grf;
>  
> +	if (of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val)) {
> +		dev_info(dev,
> +			"Missing drive-impedance-ohm property in node %s "
> +			"Falling back to 50 Ohm.\n",
> +			dev->of_node->name);
> +		rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> +	} else {
> +		rk_phy->drive_impedance = convert_drive_impedance_ohm(pdev, val);
> +	}
> +
>  	generic_phy = devm_phy_create(dev, dev->of_node, &ops);
>  	if (IS_ERR(generic_phy)) {
>  		dev_err(dev, "failed to create PHY\n");
> 





_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-03-01 15:59 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-01 15:33 [PATCH 1/3] phy: rockchip-emmc: Allow to set drive impedance via DTS Christoph Muellner
2019-03-01 15:33 ` Christoph Muellner
2019-03-01 15:33 ` Christoph Muellner
2019-03-01 15:33 ` [PATCH 2/3] arm64: dts: rockchip: Define drive-impedance-ohm for RK3399's emmc-phy Christoph Muellner
2019-03-01 15:33   ` Christoph Muellner
2019-03-01 15:33   ` Christoph Muellner
2019-11-11  9:51   ` arm64: dts: rockchip: Disable HS400 for mmc on rk3399-roc-pc Markus Reichl
2019-11-14 13:10     ` Heiko Stuebner
2019-11-14 13:10       ` Heiko Stuebner
2019-11-14 13:10       ` Heiko Stuebner
2019-11-15 10:37       ` Markus Reichl
2019-11-15 10:37         ` Markus Reichl
2019-11-15 10:37         ` Markus Reichl
2019-11-15 11:19         ` Heiko Stübner
2019-11-15 11:19           ` Heiko Stübner
2019-11-15 11:19           ` Heiko Stübner
2019-11-18 16:08           ` Doug Anderson
2019-11-18 16:08             ` Doug Anderson
2019-11-18 16:08             ` Doug Anderson
2019-11-18 19:05             ` Markus Reichl
2019-11-18 19:05               ` Markus Reichl
2019-11-18 19:05               ` Markus Reichl
     [not found]     ` <367bf78a-f079-f0b4-68fe-52c86823c174-SRyzfwRm/0rPTwkrwQOX7A@public.gmane.org>
2019-11-18  1:01       ` Heiko Stuebner
2019-11-18  1:01         ` Heiko Stuebner
2019-11-18  1:01         ` Heiko Stuebner
2019-03-01 15:33 ` [PATCH 3/3] arm64: dts: rockchip: Decrease emmc-phy's drive impedance on rk3399-puma Christoph Muellner
2019-03-01 15:33   ` Christoph Muellner
2019-03-01 15:33   ` Christoph Muellner
2019-03-01 15:59 ` Heiko Stuebner [this message]
2019-03-01 15:59   ` [PATCH 1/3] phy: rockchip-emmc: Allow to set drive impedance via DTS Heiko Stuebner
2019-03-01 16:21   ` Christoph Müllner
2019-03-01 16:21     ` Christoph Müllner
2019-03-01 16:48 ` Doug Anderson
2019-03-01 16:48   ` Doug Anderson
2019-03-01 16:48   ` Doug Anderson
2019-03-01 16:59   ` Philipp Tomsich
2019-03-01 16:59     ` Philipp Tomsich
2019-03-01 16:59     ` Philipp Tomsich
     [not found]   ` <CAD=FV=UUuQYwh2DMgB5FLuiE1BwbTMTuc9rAte1J5L_JP5qk1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-03-01 18:09     ` Christoph Müllner
2019-03-01 18:09       ` Christoph Müllner
2019-03-01 18:09       ` Christoph Müllner
2019-03-01 18:41       ` Philipp Tomsich
2019-03-01 18:41         ` Philipp Tomsich
2019-03-01 18:41         ` Philipp Tomsich
2019-03-01 16:51 ` Robin Murphy
2019-03-01 16:51   ` Robin Murphy
2019-03-01 17:38   ` Christoph Müllner
2019-03-01 17:38     ` Christoph Müllner

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=2706069.0FZLJLT2V8@phil \
    --to=heiko@sntech.de \
    --cc=ayaka@soulik.info \
    --cc=christoph.muellner@theobroma-systems.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dianders@chromium.org \
    --cc=enric.balletbo@collabora.com \
    --cc=ezequiel@collabora.com \
    --cc=kernel@esmil.dk \
    --cc=kishon@ti.com \
    --cc=klaus.goger@theobroma-systems.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=mbrugger@suse.com \
    --cc=philipp.tomsich@theobroma-systems.com \
    --cc=robh+dt@kernel.org \
    --cc=shawn.lin@rock-chips.com \
    --cc=tony.xie@rock-chips.com \
    --cc=vicencb@gmail.com \
    --cc=viresh.kumar@linaro.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 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.