From: Roger Quadros <rogerq@ti.com>
To: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: tj@kernel.org, sergei.shtylyov@cogentembedded.com, kishon@ti.com,
linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org,
Balaji T K <balajitk@ti.com>
Subject: Re: [PATCH v2 1/2] ata: ahci_platform: Manage SATA PHY
Date: Fri, 18 Oct 2013 10:31:01 +0300 [thread overview]
Message-ID: <5260E3B5.2010900@ti.com> (raw)
In-Reply-To: <1896416.QtZRH9T0D7@amdc1032>
On 10/17/2013 04:57 PM, Bartlomiej Zolnierkiewicz wrote:
>
> Hi,
>
> On Wednesday, October 16, 2013 02:42:52 PM Roger Quadros wrote:
>> From: Balaji T K <balajitk@ti.com>
>>
>> Some platforms have a PHY hooked up to the
>> SATA controller. The PHY needs to be initialized
>> and powered up for SATA to work. We do that
>> using the PHY framework.
>>
>> [Roger Q] Cleaned up.
>>
>> CC: Tejun Heo <tj@kernel.org>
>> Signed-off-by: Balaji T K <balajitk@ti.com>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> ---
>> .../devicetree/bindings/ata/ahci-platform.txt | 3 +-
>> drivers/ata/ahci.h | 2 ++
>> drivers/ata/ahci_platform.c | 29 +++++++++++++++++++-
>> 3 files changed, 32 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> index 89de156..c8a6cea 100644
>> --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> @@ -4,7 +4,8 @@ SATA nodes are defined to describe on-chip Serial ATA controllers.
>> Each SATA controller should have its own node.
>>
>> Required properties:
>> -- compatible : compatible list, contains "snps,spear-ahci"
>> +- compatible : compatible list, contains "snps,spear-ahci",
>> + snps,exynos5440-ahci or "snps,dwc-ahci"
>
> minor nit:
> s/snps,exynos5440-ahci/"snps,exynos5440-ahci"/
OK.
>
>> - interrupts : <interrupt mapping for SATA IRQ>
>> - reg : <registers mapping>
>>
>> diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
>> index 1145637..94484cb 100644
>> --- a/drivers/ata/ahci.h
>> +++ b/drivers/ata/ahci.h
>> @@ -37,6 +37,7 @@
>>
>> #include <linux/clk.h>
>> #include <linux/libata.h>
>> +#include <linux/phy/phy.h>
>>
>> /* Enclosure Management Control */
>> #define EM_CTRL_MSG_TYPE 0x000f0000
>> @@ -322,6 +323,7 @@ struct ahci_host_priv {
>> u32 em_buf_sz; /* EM buffer size in byte */
>> u32 em_msg_type; /* EM message type */
>> struct clk *clk; /* Only for platforms supporting clk */
>> + struct phy *phy; /* If platforms use phy */
>
> minor nit:
> s/If platforms use phy/If platform uses PHY/
Right.
>
>> void *plat_data; /* Other platform data */
>> };
>>
>> diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
>> index 2daaee0..5a0f1418 100644
>> --- a/drivers/ata/ahci_platform.c
>> +++ b/drivers/ata/ahci_platform.c
>> @@ -141,6 +141,21 @@ static int ahci_probe(struct platform_device *pdev)
>> }
>> }
>>
>> + hpriv->phy = devm_phy_get(dev, "sata-phy");
>> + if (IS_ERR(hpriv->phy)) {
>> + dev_dbg(dev, "can't get sata-phy\n");
>> + /* return only if -EPROBE_DEFER */
>> + if (PTR_ERR(hpriv->phy) == -EPROBE_DEFER) {
>> + rc = -EPROBE_DEFER;
>> + goto disable_unprepare_clk;
>> + }
>> + }
>> +
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_init(hpriv->phy);
>> + phy_power_on(hpriv->phy);
>> + }
>> +
>> /*
>> * Some platforms might need to prepare for mmio region access,
>> * which could be done in the following init call. So, the mmio
>> @@ -150,7 +165,7 @@ static int ahci_probe(struct platform_device *pdev)
>> if (pdata && pdata->init) {
>> rc = pdata->init(dev, hpriv->mmio);
>> if (rc)
>> - goto disable_unprepare_clk;
>> + goto disable_phy;
>> }
>>
>> ahci_save_initial_config(dev, hpriv,
>> @@ -220,6 +235,12 @@ static int ahci_probe(struct platform_device *pdev)
>> pdata_exit:
>> if (pdata && pdata->exit)
>> pdata->exit(dev);
>> +disable_phy:
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_power_off(hpriv->phy);
>> + phy_exit(hpriv->phy);
>> + }
>> +
>> disable_unprepare_clk:
>> if (!IS_ERR(hpriv->clk))
>> clk_disable_unprepare(hpriv->clk);
>> @@ -238,6 +259,11 @@ static void ahci_host_stop(struct ata_host *host)
>> if (pdata && pdata->exit)
>> pdata->exit(dev);
>>
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_power_off(hpriv->phy);
>> + phy_exit(hpriv->phy);
>> + }
>> +
>> if (!IS_ERR(hpriv->clk)) {
>> clk_disable_unprepare(hpriv->clk);
>> clk_put(hpriv->clk);
>> @@ -328,6 +354,7 @@ static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
>
> Shouldn't phy_power_off/on also be used in ahci_suspend() and ahci_resume()?
I think so. Maybe even phy_exit and phy_init?
>
>> static const struct of_device_id ahci_of_match[] = {
>> { .compatible = "snps,spear-ahci", },
>> { .compatible = "snps,exynos5440-ahci", },
>> + { .compatible = "snps,dwc-ahci", },
>
> This change together with ahci-platform.txt one should be in a separate patch.
Agreed.
>
>> {},
>> };
>> MODULE_DEVICE_TABLE(of, ahci_of_match);
cheers,
-roger
WARNING: multiple messages have this Message-ID (diff)
From: Roger Quadros <rogerq@ti.com>
To: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: <tj@kernel.org>, <sergei.shtylyov@cogentembedded.com>,
<kishon@ti.com>, <linux-ide@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, Balaji T K <balajitk@ti.com>
Subject: Re: [PATCH v2 1/2] ata: ahci_platform: Manage SATA PHY
Date: Fri, 18 Oct 2013 10:31:01 +0300 [thread overview]
Message-ID: <5260E3B5.2010900@ti.com> (raw)
In-Reply-To: <1896416.QtZRH9T0D7@amdc1032>
On 10/17/2013 04:57 PM, Bartlomiej Zolnierkiewicz wrote:
>
> Hi,
>
> On Wednesday, October 16, 2013 02:42:52 PM Roger Quadros wrote:
>> From: Balaji T K <balajitk@ti.com>
>>
>> Some platforms have a PHY hooked up to the
>> SATA controller. The PHY needs to be initialized
>> and powered up for SATA to work. We do that
>> using the PHY framework.
>>
>> [Roger Q] Cleaned up.
>>
>> CC: Tejun Heo <tj@kernel.org>
>> Signed-off-by: Balaji T K <balajitk@ti.com>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> ---
>> .../devicetree/bindings/ata/ahci-platform.txt | 3 +-
>> drivers/ata/ahci.h | 2 ++
>> drivers/ata/ahci_platform.c | 29 +++++++++++++++++++-
>> 3 files changed, 32 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> index 89de156..c8a6cea 100644
>> --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> @@ -4,7 +4,8 @@ SATA nodes are defined to describe on-chip Serial ATA controllers.
>> Each SATA controller should have its own node.
>>
>> Required properties:
>> -- compatible : compatible list, contains "snps,spear-ahci"
>> +- compatible : compatible list, contains "snps,spear-ahci",
>> + snps,exynos5440-ahci or "snps,dwc-ahci"
>
> minor nit:
> s/snps,exynos5440-ahci/"snps,exynos5440-ahci"/
OK.
>
>> - interrupts : <interrupt mapping for SATA IRQ>
>> - reg : <registers mapping>
>>
>> diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
>> index 1145637..94484cb 100644
>> --- a/drivers/ata/ahci.h
>> +++ b/drivers/ata/ahci.h
>> @@ -37,6 +37,7 @@
>>
>> #include <linux/clk.h>
>> #include <linux/libata.h>
>> +#include <linux/phy/phy.h>
>>
>> /* Enclosure Management Control */
>> #define EM_CTRL_MSG_TYPE 0x000f0000
>> @@ -322,6 +323,7 @@ struct ahci_host_priv {
>> u32 em_buf_sz; /* EM buffer size in byte */
>> u32 em_msg_type; /* EM message type */
>> struct clk *clk; /* Only for platforms supporting clk */
>> + struct phy *phy; /* If platforms use phy */
>
> minor nit:
> s/If platforms use phy/If platform uses PHY/
Right.
>
>> void *plat_data; /* Other platform data */
>> };
>>
>> diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
>> index 2daaee0..5a0f1418 100644
>> --- a/drivers/ata/ahci_platform.c
>> +++ b/drivers/ata/ahci_platform.c
>> @@ -141,6 +141,21 @@ static int ahci_probe(struct platform_device *pdev)
>> }
>> }
>>
>> + hpriv->phy = devm_phy_get(dev, "sata-phy");
>> + if (IS_ERR(hpriv->phy)) {
>> + dev_dbg(dev, "can't get sata-phy\n");
>> + /* return only if -EPROBE_DEFER */
>> + if (PTR_ERR(hpriv->phy) == -EPROBE_DEFER) {
>> + rc = -EPROBE_DEFER;
>> + goto disable_unprepare_clk;
>> + }
>> + }
>> +
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_init(hpriv->phy);
>> + phy_power_on(hpriv->phy);
>> + }
>> +
>> /*
>> * Some platforms might need to prepare for mmio region access,
>> * which could be done in the following init call. So, the mmio
>> @@ -150,7 +165,7 @@ static int ahci_probe(struct platform_device *pdev)
>> if (pdata && pdata->init) {
>> rc = pdata->init(dev, hpriv->mmio);
>> if (rc)
>> - goto disable_unprepare_clk;
>> + goto disable_phy;
>> }
>>
>> ahci_save_initial_config(dev, hpriv,
>> @@ -220,6 +235,12 @@ static int ahci_probe(struct platform_device *pdev)
>> pdata_exit:
>> if (pdata && pdata->exit)
>> pdata->exit(dev);
>> +disable_phy:
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_power_off(hpriv->phy);
>> + phy_exit(hpriv->phy);
>> + }
>> +
>> disable_unprepare_clk:
>> if (!IS_ERR(hpriv->clk))
>> clk_disable_unprepare(hpriv->clk);
>> @@ -238,6 +259,11 @@ static void ahci_host_stop(struct ata_host *host)
>> if (pdata && pdata->exit)
>> pdata->exit(dev);
>>
>> + if (!IS_ERR(hpriv->phy)) {
>> + phy_power_off(hpriv->phy);
>> + phy_exit(hpriv->phy);
>> + }
>> +
>> if (!IS_ERR(hpriv->clk)) {
>> clk_disable_unprepare(hpriv->clk);
>> clk_put(hpriv->clk);
>> @@ -328,6 +354,7 @@ static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
>
> Shouldn't phy_power_off/on also be used in ahci_suspend() and ahci_resume()?
I think so. Maybe even phy_exit and phy_init?
>
>> static const struct of_device_id ahci_of_match[] = {
>> { .compatible = "snps,spear-ahci", },
>> { .compatible = "snps,exynos5440-ahci", },
>> + { .compatible = "snps,dwc-ahci", },
>
> This change together with ahci-platform.txt one should be in a separate patch.
Agreed.
>
>> {},
>> };
>> MODULE_DEVICE_TABLE(of, ahci_of_match);
cheers,
-roger
next prev parent reply other threads:[~2013-10-18 7:31 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-16 11:42 [PATCH v2 0/2] ata: ahci_platform: Add PHY support and OMAP support Roger Quadros
2013-10-16 11:42 ` Roger Quadros
2013-10-16 11:42 ` [PATCH v2 1/2] ata: ahci_platform: Manage SATA PHY Roger Quadros
2013-10-16 11:42 ` Roger Quadros
2013-10-17 13:57 ` Bartlomiej Zolnierkiewicz
2013-10-18 7:31 ` Roger Quadros [this message]
2013-10-18 7:31 ` Roger Quadros
2013-10-16 11:42 ` [PATCH v2 2/2] ata: ahci_platform: runtime resume the device before use Roger Quadros
2013-10-16 11:42 ` Roger Quadros
2013-10-17 14:15 ` Bartlomiej Zolnierkiewicz
2013-10-18 12:24 ` Roger Quadros
2013-10-18 12:24 ` Roger Quadros
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=5260E3B5.2010900@ti.com \
--to=rogerq@ti.com \
--cc=b.zolnierkie@samsung.com \
--cc=balajitk@ti.com \
--cc=kishon@ti.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
--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 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.