From: "Alim Akhtar" <alim.akhtar@samsung.com>
To: "'Kishon Vijay Abraham I'" <kishon@ti.com>, <robh@kernel.org>
Cc: <devicetree@vger.kernel.org>, <linux-scsi@vger.kernel.org>,
<krzk@kernel.org>, <avri.altman@wdc.com>,
<martin.petersen@oracle.com>, <kwmad.kim@samsung.com>,
<stanley.chu@mediatek.com>, <cang@codeaurora.org>,
<linux-samsung-soc@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, "'Vinod Koul'" <vkoul@kernel.org>
Subject: RE: [PATCH v7 07/10] phy: samsung-ufs: add UFS PHY driver for samsung SoC
Date: Sat, 9 May 2020 06:02:36 +0530 [thread overview]
Message-ID: <006701d62599$5fbc2c80$1f348580$@samsung.com> (raw)
In-Reply-To: <b0239aa5-004e-fc88-93a4-5b0d6f174ca3@ti.com>
Hi Kishon,
Thanks for review.
> -----Original Message-----
> From: Kishon Vijay Abraham I <kishon@ti.com>
> Sent: 07 May 2020 10:49
> To: Alim Akhtar <alim.akhtar@samsung.com>; robh@kernel.org
> Cc: devicetree@vger.kernel.org; linux-scsi@vger.kernel.org; krzk@kernel.org;
> avri.altman@wdc.com; martin.petersen@oracle.com;
> kwmad.kim@samsung.com; stanley.chu@mediatek.com;
> cang@codeaurora.org; linux-samsung-soc@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; Vinod Koul
> <vkoul@kernel.org>
> Subject: Re: [PATCH v7 07/10] phy: samsung-ufs: add UFS PHY driver for
> samsung SoC
>
.
.
.
> Okay, here you are using a state machine for the PHY configuration because of
> the way the PHY is integrated with the UFS. Would be nice to have the state
> machine documented somewhere. I only have the PHY patch in my inbox.
Ok, will document in the driver file as well as in the header file.
> > +
> > + if (ufs_phy->ufs_phy_state == CFG_POST_PWR_HS)
> > + err = samsung_ufs_phy_wait_for_lock_acq(phy);
> > +out:
> > + return err;
> > +}
> > +
> > +static int samsung_ufs_phy_symbol_clk_init(struct samsung_ufs_phy
> > +*phy) {
> > + struct clk *clk;
> > + int ret = 0;
> > +
> > + clk = devm_clk_get(phy->dev, "tx0_symbol_clk");
>
> There is no "exit" callback in phy_ops which means if there are multiple phy_init
> calls, this clock will not be freed. This could be moved to "probe" IMO.
Ok, will add exit callback.
> > + if (IS_ERR(clk)) {
> > + dev_err(phy->dev, "failed to get tx0_symbol_clk clock\n");
> > + goto out;
> > + } else {
>
> "else" here and below is not required. Something like below
>
Ack
> clk = devm_clk_get(phy->dev, "tx0_symbol_clk");
> if (IS_ERR(clk)) {
> dev_err(phy->dev, "failed to get tx0_symbol_clk clock\n");
> goto out;
> }
> phy->tx0_symbol_clk = clk;
>
> > + phy->tx0_symbol_clk = clk;
> > + }
> > +
> > + clk = devm_clk_get(phy->dev, "rx0_symbol_clk");
> > + if (IS_ERR(clk)) {
> > + dev_err(phy->dev, "failed to get rx0_symbol_clk clock\n");
> > + goto out;
> > + } else {
> > + phy->rx0_symbol_clk = clk;
> > + }
> > +
> > + clk = devm_clk_get(phy->dev, "rx1_symbol_clk");
> > + if (IS_ERR(clk)) {
> > + dev_err(phy->dev, "failed to get rx1_symbol_clk clock\n");
> > + goto out;
> > + } else {
> > + phy->rx1_symbol_clk = clk;
> > + }
> > +
> > + ret = clk_prepare_enable(phy->tx0_symbol_clk);
> > + if (ret) {
> > + dev_err(phy->dev, "%s: tx0_symbol_clk enable failed %d\n",
> > + __func__, ret);
> > + goto out;
> > + }
> > + ret = clk_prepare_enable(phy->rx0_symbol_clk);
> > + if (ret) {
> > + dev_err(phy->dev, "%s: rx0_symbol_clk enable failed %d\n",
> > + __func__, ret);
> > + goto out;
> > + }
> > + ret = clk_prepare_enable(phy->rx1_symbol_clk);
> > + if (ret) {
> > + dev_err(phy->dev, "%s: rx1_symbol_clk enable failed %d\n",
> > + __func__, ret);
> > + goto out;
> > + }
>
> All these clocks are never disabled?
Sure, will add disabling of clocks in exit callback
> > +out:
> > + return ret;
> > +}
> > +
> > +static int samsung_ufs_phy_clks_init(struct samsung_ufs_phy *phy) {
> > + struct clk *phy_ref_clk;
> > + int ret;
> > +
> > + phy_ref_clk = devm_clk_get(phy->dev, "ref_clk");
> > + if (IS_ERR(phy_ref_clk))
> > + dev_err(phy->dev, "failed to get ref_clk clock\n");
> > + else
> > + phy->ref_clk = phy_ref_clk;
> > +
> > + ret = clk_prepare_enable(phy->ref_clk);
> > + if (ret) {
> > + dev_err(phy->dev, "%s: ref_clk enable failed %d\n",
> > + __func__, ret);
> > + return ret;
> > + }
> > +
> > + dev_info(phy->dev, "UFS MPHY ref_clk_rate = %ld\n",
> > +clk_get_rate(phy_ref_clk));
> > +
> > + return 0;
> > +}
> > +
> > +static int samsung_ufs_phy_init(struct phy *phy) {
> > + struct samsung_ufs_phy *_phy = get_samsung_ufs_phy(phy);
> > + int ret;
> > +
> > + _phy->lane_cnt = phy->attrs.bus_width;
> > + _phy->ufs_phy_state = CFG_PRE_INIT;
> > +
> > + _phy->is_pre_init = true;
> > + _phy->is_post_init = false;
> > + _phy->is_pre_pmc = false;
> > + _phy->is_post_pmc = false;
> > +
> > +
> > + if (of_device_is_compatible(_phy->dev->of_node,
> > + "samsung,exynos7-ufs-phy")) {
>
> Can't it be added in driver data for this compatible?
Sure, will handle via driver data.
> > + ret = samsung_ufs_phy_symbol_clk_init(_phy);
> > + if (ret)
> > + dev_err(_phy->dev,
> > + "failed to set ufs phy symbol clocks\n");
> > + }
> > +
.
.
.
> > +static int samsung_ufs_phy_set_mode(struct phy *generic_phy,
> > + enum phy_mode mode, int submode) {
> > + struct samsung_ufs_phy *_phy = get_samsung_ufs_phy(generic_phy);
> > +
> > + _phy->mode = PHY_MODE_INVALID;
> > +
> > + if (mode > 0)
> > + _phy->mode = mode;
> > +
> > + return 0;
> > +}
> > +
> > +static struct phy_ops samsung_ufs_phy_ops = {
> > + .init = samsung_ufs_phy_init,
> > + .power_on = samsung_ufs_phy_power_on,
> > + .power_off = samsung_ufs_phy_power_off,
> > + .calibrate = samsung_ufs_phy_calibrate,
> > + .set_mode = samsung_ufs_phy_set_mode,
>
> missing .owner.
Ack,
> > +}
> > +;
.
.
> > +++ b/drivers/phy/samsung/phy-samsung-ufs.h
> > @@ -0,0 +1,142 @@
> > +/* SPDX-License-Identifier: GPL-2.0-only */
> > +/*
> > + * UFS PHY driver for Samsung EXYNOS SoC
> > + *
> > + * Copyright (C) 2015 Samsung Electronics Co., Ltd.
>
> 2020
>
Sure, will update.
> Thanks
> Kishon
next prev parent reply other threads:[~2020-05-09 0:33 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20200426174202epcas5p30e4ebe79a1de0138562219ecd7ea2e18@epcas5p3.samsung.com>
2020-04-26 17:30 ` [PATCH v7 00/10] exynos-ufs: Add support for UFS HCI Alim Akhtar
[not found] ` <CGME20200426174204epcas5p24796abe49298815cff344fba2e067169@epcas5p2.samsung.com>
2020-04-26 17:30 ` [PATCH v7 01/10] scsi: ufs: add quirk to fix mishandling utrlclr/utmrlclr Alim Akhtar
[not found] ` <CGME20200426174206epcas5p3a948de27f9eaa9256e4c3de5294ce234@epcas5p3.samsung.com>
2020-04-26 17:30 ` [PATCH v7 02/10] scsi: ufs: add quirk to disallow reset of interrupt aggregation Alim Akhtar
[not found] ` <CGME20200426174209epcas5p2fc312fae0c619674bfd784d8659d3b97@epcas5p2.samsung.com>
2020-04-26 17:30 ` [PATCH v7 03/10] scsi: ufs: add quirk to enable host controller without hce Alim Akhtar
[not found] ` <CGME20200426174211epcas5p39d7a1ca820bacb5638b5ba63c1585a53@epcas5p3.samsung.com>
2020-04-26 17:30 ` [PATCH v7 04/10] scsi: ufs: introduce UFSHCD_QUIRK_PRDT_BYTE_GRAN quirk Alim Akhtar
[not found] ` <CGME20200426174213epcas5p3f5b403eafe77d98cbe0b92ccb3fd56b2@epcas5p3.samsung.com>
2020-04-26 17:30 ` [PATCH v7 05/10] scsi: ufs: add quirk to fix abnormal ocs fatal error Alim Akhtar
2020-04-27 7:54 ` Avri Altman
[not found] ` <CGME20200426174215epcas5p3e87abccf47976f6318eb470efef9db39@epcas5p3.samsung.com>
2020-04-26 17:30 ` [PATCH v7 06/10] dt-bindings: phy: Document Samsung UFS PHY bindings Alim Akhtar
2020-05-05 15:56 ` Rob Herring
2020-05-09 0:36 ` Alim Akhtar
[not found] ` <CGME20200426174217epcas5p2c7d1606b641b73f67a169b8d22f0637d@epcas5p2.samsung.com>
2020-04-26 17:30 ` [PATCH v7 07/10] phy: samsung-ufs: add UFS PHY driver for samsung SoC Alim Akhtar
2020-05-07 5:19 ` Kishon Vijay Abraham I
2020-05-09 0:32 ` Alim Akhtar [this message]
[not found] ` <CGME20200426174219epcas5p460c8637629afd930313ae0fa936593cd@epcas5p4.samsung.com>
2020-04-26 17:30 ` [PATCH v7 08/10] dt-bindings: ufs: Add DT binding documentation for ufs Alim Akhtar
2020-05-05 15:58 ` Rob Herring
2020-05-09 0:38 ` Alim Akhtar
[not found] ` <CGME20200426174222epcas5p4c03e929a5cb86bb5fccbcc6e5e98ee80@epcas5p4.samsung.com>
2020-04-26 17:30 ` [PATCH v7 09/10] scsi: ufs-exynos: add UFS host support for Exynos SoCs Alim Akhtar
[not found] ` <CGME20200426174224epcas5p43a1223a63bb414a5060fa9044681f933@epcas5p4.samsung.com>
2020-04-26 17:30 ` [PATCH v7 10/10] arm64: dts: Add node for ufs exynos7 Alim Akhtar
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='006701d62599$5fbc2c80$1f348580$@samsung.com' \
--to=alim.akhtar@samsung.com \
--cc=avri.altman@wdc.com \
--cc=cang@codeaurora.org \
--cc=devicetree@vger.kernel.org \
--cc=kishon@ti.com \
--cc=krzk@kernel.org \
--cc=kwmad.kim@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=robh@kernel.org \
--cc=stanley.chu@mediatek.com \
--cc=vkoul@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).