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>,
Brian Norris <briannorris@chromium.org>,
Matthias Brugger <mbrugger@suse.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>,
Jeffy Chen <jeffy.chen@rock-chips.com>,
Vicente Bergas <vicencb@gmail.com>, Randy Li <ayaka@soulik.info>,
Tony Xie <tony.xie@rock-chips.com>,
Ezequiel Garcia <ezequiel@collabora.com>,
Lin Huang <hl@rock-chips.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infrad
Subject: Re: [PATCH v2 1/4] phy: rockchip-emmc: Allow to set drive impedance via DTS.
Date: Tue, 12 Mar 2019 14:07:39 +0100 [thread overview]
Message-ID: <1571188.ajMNexS2DJ@phil> (raw)
In-Reply-To: <20190307084159.25236-1-christoph.muellner@theobroma-systems.com>
Am Donnerstag, 7. März 2019, 09:41:53 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>
change itself looks good
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Though I cannot say too much about the electrical side.
Heiko
> ---
> drivers/phy/rockchip/phy-rockchip-emmc.c | 30 ++++++++++++++++++++++++++++--
> 1 file changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 19bf84f0bc67..b804c6bf4b55 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,26 @@ 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.\n",
> + dr_ohm);
> + return PHYCTRL_DR_50OHM;
> +}
> +
> static int rockchip_emmc_phy_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -322,6 +343,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;
> @@ -344,6 +366,10 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>
> rk_phy->reg_offset = reg_offset;
> rk_phy->reg_base = grf;
> + rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> +
> + if (!of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val))
> + 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)) {
>
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>,
Lin Huang <hl@rock-chips.com>, Tony Xie <tony.xie@rock-chips.com>,
Viresh Kumar <viresh.kumar@linaro.org>,
shawn.lin@rock-chips.com, Brian Norris <briannorris@chromium.org>,
Douglas Anderson <dianders@chromium.org>,
Vicente Bergas <vicencb@gmail.com>,
Kishon Vijay Abraham I <kishon@ti.com>,
linux-rockchip@lists.infradead.org,
Jeffy Chen <jeffy.chen@rock-chips.com>,
robh+dt@kernel.org,
Klaus Goger <klaus.goger@theobroma-systems.com>,
linux-arm-kernel@lists.infradead.org,
Enric Balletbo i Serra <enric.balletbo@collabora.com>,
Randy Li <ayaka@soulik.info>,
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>,
Ezequiel Garcia <ezequiel@collabora.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/4] phy: rockchip-emmc: Allow to set drive impedance via DTS.
Date: Tue, 12 Mar 2019 14:07:39 +0100 [thread overview]
Message-ID: <1571188.ajMNexS2DJ@phil> (raw)
In-Reply-To: <20190307084159.25236-1-christoph.muellner@theobroma-systems.com>
Am Donnerstag, 7. März 2019, 09:41:53 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>
change itself looks good
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Though I cannot say too much about the electrical side.
Heiko
> ---
> drivers/phy/rockchip/phy-rockchip-emmc.c | 30 ++++++++++++++++++++++++++++--
> 1 file changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 19bf84f0bc67..b804c6bf4b55 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,26 @@ 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.\n",
> + dr_ohm);
> + return PHYCTRL_DR_50OHM;
> +}
> +
> static int rockchip_emmc_phy_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -322,6 +343,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;
> @@ -344,6 +366,10 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>
> rk_phy->reg_offset = reg_offset;
> rk_phy->reg_base = grf;
> + rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> +
> + if (!of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val))
> + 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)) {
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
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>,
Brian Norris <briannorris@chromium.org>,
Matthias Brugger <mbrugger@suse.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>,
Jeffy Chen <jeffy.chen@rock-chips.com>,
Vicente Bergas <vicencb@gmail.com>, Randy Li <ayaka@soulik.info>,
Tony Xie <tony.xie@rock-chips.com>,
Ezequiel Garcia <ezequiel@collabora.com>,
Lin Huang <hl@rock-chips.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org
Subject: Re: [PATCH v2 1/4] phy: rockchip-emmc: Allow to set drive impedance via DTS.
Date: Tue, 12 Mar 2019 14:07:39 +0100 [thread overview]
Message-ID: <1571188.ajMNexS2DJ@phil> (raw)
In-Reply-To: <20190307084159.25236-1-christoph.muellner@theobroma-systems.com>
Am Donnerstag, 7. März 2019, 09:41:53 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>
change itself looks good
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Though I cannot say too much about the electrical side.
Heiko
> ---
> drivers/phy/rockchip/phy-rockchip-emmc.c | 30 ++++++++++++++++++++++++++++--
> 1 file changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c
> index 19bf84f0bc67..b804c6bf4b55 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,26 @@ 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.\n",
> + dr_ohm);
> + return PHYCTRL_DR_50OHM;
> +}
> +
> static int rockchip_emmc_phy_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -322,6 +343,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;
> @@ -344,6 +366,10 @@ static int rockchip_emmc_phy_probe(struct platform_device *pdev)
>
> rk_phy->reg_offset = reg_offset;
> rk_phy->reg_base = grf;
> + rk_phy->drive_impedance = PHYCTRL_DR_50OHM;
> +
> + if (!of_property_read_u32(dev->of_node, "drive-impedance-ohm", &val))
> + 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)) {
>
next prev parent reply other threads:[~2019-03-12 13:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-07 8:41 [PATCH v2 1/4] phy: rockchip-emmc: Allow to set drive impedance via DTS Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-07 8:41 ` [PATCH v2 2/4] dt-bindings: phy: Add a new property drive-impedance-ohm for RK's emmc PHY Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-12 12:52 ` Heiko Stuebner
2019-03-12 12:52 ` Heiko Stuebner
2019-03-12 13:01 ` Christoph Müllner
2019-03-12 13:01 ` Christoph Müllner
2019-03-07 8:41 ` [PATCH v2 3/4] arm64: dts: rockchip: Define drive-impedance-ohm for RK3399's emmc-phy Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-07 8:41 ` [PATCH v2 4/4] arm64: dts: rockchip: Decrease emmc-phy's drive impedance on rk3399-puma Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-07 8:41 ` Christoph Muellner
2019-03-12 13:07 ` Heiko Stuebner [this message]
2019-03-12 13:07 ` [PATCH v2 1/4] phy: rockchip-emmc: Allow to set drive impedance via DTS Heiko Stuebner
2019-03-12 13:07 ` Heiko Stuebner
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=1571188.ajMNexS2DJ@phil \
--to=heiko@sntech.de \
--cc=ayaka@soulik.info \
--cc=briannorris@chromium.org \
--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=hl@rock-chips.com \
--cc=jeffy.chen@rock-chips.com \
--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.infrad \
--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.