From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: "Tejun Heo" <tj@kernel.org>,
linux-ide@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
"Christian Lamparter" <chunkeey@googlemail.com>,
"Måns Rullgård" <mans@mansr.com>,
"Julian Margetson" <runaway@candw.ms>
Subject: [PATCH v1 10/23] ata: sata_dwc_460ex: add phy support
Date: Thu, 21 Apr 2016 21:15:31 +0300 [thread overview]
Message-ID: <1461262544-115408-11-git-send-email-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <1461262544-115408-1-git-send-email-andriy.shevchenko@linux.intel.com>
From: Mans Rullgard <mans@mansr.com>
This adds support for powering on an optional PHY when activating the
device.
Signed-off-by: Mans Rullgard <mans@mansr.com>
---
drivers/ata/Kconfig | 1 +
drivers/ata/sata_dwc_460ex.c | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index ede126d..41b0725 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -313,6 +313,7 @@ config ATA_PIIX
config SATA_DWC
tristate "DesignWare Cores SATA support"
+ select GENERIC_PHY
help
This option enables support for the on-chip SATA controller of the
AppliedMicro processor 460EX.
diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index daaa8a6..4d23fbd 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -35,6 +35,7 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
+#include <linux/phy/phy.h>
#include <linux/libata.h>
#include <linux/slab.h>
@@ -145,6 +146,7 @@ struct sata_dwc_device {
struct ata_host *host;
u8 __iomem *reg_base;
struct sata_dwc_regs *sata_dwc_regs; /* DW Synopsys SATA specific */
+ struct phy *phy;
#ifdef CONFIG_SATA_DWC_OLD_DMA
struct dw_dma_chip *dma;
#endif
@@ -948,6 +950,10 @@ static int sata_dwc_port_start(struct ata_port *ap)
if (err)
goto CLEANUP_ALLOC;
+ err = phy_power_on(hsdev->phy);
+ if (err)
+ goto CLEANUP_ALLOC;
+
for (i = 0; i < SATA_DWC_QCMD_MAX; i++)
hsdevp->cmd_issued[i] = SATA_DWC_CMD_ISSUED_NOT;
@@ -983,11 +989,13 @@ CLEANUP:
static void sata_dwc_port_stop(struct ata_port *ap)
{
struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
+ struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
dev_dbg(ap->dev, "%s: ap->id = %d\n", __func__, ap->print_id);
dmaengine_terminate_all(hsdevp->chan);
dma_release_channel(hsdevp->chan);
+ phy_power_off(hsdev->phy);
kfree(hsdevp);
ap->private_data = NULL;
@@ -1323,6 +1331,17 @@ static int sata_dwc_probe(struct platform_device *ofdev)
}
#endif
+ hsdev->phy = devm_phy_optional_get(hsdev->dev, "sata-phy");
+ if (IS_ERR(hsdev->phy)) {
+ err = PTR_ERR(hsdev->phy);
+ hsdev->phy = NULL;
+ goto error_out;
+ }
+
+ err = phy_init(hsdev->phy);
+ if (err)
+ goto error_out;
+
/*
* Now, register with libATA core, this will also initiate the
* device discovery process, invoking our port_start() handler &
@@ -1336,6 +1355,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
return 0;
error_out:
+ phy_exit(hsdev->phy);
iounmap(base);
return err;
}
@@ -1348,6 +1368,8 @@ static int sata_dwc_remove(struct platform_device *ofdev)
ata_host_detach(host);
+ phy_exit(hsdev->phy);
+
#ifdef CONFIG_SATA_DWC_OLD_DMA
/* Free SATA DMA resources */
sata_dwc_dma_exit_old(hsdev);
--
2.8.0.rc3
next prev parent reply other threads:[~2016-04-21 18:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-21 18:15 [PATCH v1 00/23] ata: sata_dwc_460ex: make it working again Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 01/23] ata: sata_dwc_460ex: remove incorrect locking Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 02/23] ata: sata_dwc_460ex: fix crash on offline links without an attached drive Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 03/23] ata: sata_dwc_460ex: set dma_boundary to 0x1fff Andy Shevchenko
2016-04-22 13:13 ` Sergei Shtylyov
2016-04-21 18:15 ` [PATCH v1 04/23] ata: sata_dwc_460ex: burst size must be in items not bytes Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 05/23] ata: sata_dwc_460ex: DMA is always a flow controller Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 06/23] ata: sata_dwc_460ex: select only core part of DMA driver Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 07/23] ata: sata_dwc_460ex: skip dma setup for non-dma commands Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 08/23] ata: sata_dwc_460ex: don't call ata_sff_qc_issue() on DMA commands Andy Shevchenko
2016-04-22 11:32 ` David Laight
2016-04-22 11:44 ` Christian Lamparter
2016-04-21 18:15 ` [PATCH v1 09/23] ata: sata_dwc_460ex: use "dmas" DT property to find dma channel Andy Shevchenko
2016-04-21 18:15 ` Andy Shevchenko [this message]
2016-04-21 18:15 ` [PATCH v1 11/23] ata: sata_dwc_460ex: get rid of global data Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 12/23] ata: sata_dwc_460ex: correct HOSTDEV{P}_FROM_*() macros Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 13/23] ata: sata_dwc_460ex: remove empty libata callback Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 14/23] ata: sata_dwc_460ex: get rid of some pointless casts Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 15/23] ata: sata_dwc_460ex: get rid of incorrect cast Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 16/23] ata: sata_dwc_460ex: add __iomem to register base pointer Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 17/23] ata: sata_dwc_460ex: supply physical address of FIFO to DMA Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 18/23] ata: sata_dwc_460ex: switch to new dmaengine_terminate_* API Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 19/23] ata: sata_dwc_460ex: use readl/writel_relaxed() Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 20/23] ata: sata_dwc_460ex: tidy up sata_dwc_clear_dmacr() Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 21/23] ata: sata_dwc_460ex: use devm_ioremap Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 22/23] ata: sata_dwc_460ex: make debug messages neat Andy Shevchenko
2016-04-21 18:15 ` [PATCH v1 23/23] powerpc/4xx: Device tree update for the 460ex DWC SATA Andy Shevchenko
2016-04-21 19:59 ` Rob Herring
2016-04-21 20:25 ` [PATCH v1 00/23] ata: sata_dwc_460ex: make it working again Christian Lamparter
2016-04-22 10:50 ` Julian Margetson
2016-04-22 11:06 ` Christian Lamparter
2016-04-23 12:02 ` Julian Margetson
2016-04-23 15:44 ` Julian Margetson
2016-04-23 19:41 ` Christian Lamparter
2016-04-24 13:05 ` Julian Margetson
2016-04-24 15:21 ` Christian Lamparter
2016-04-24 17:51 ` Julian Margetson
2016-04-23 15:44 ` Julian Margetson
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=1461262544-115408-11-git-send-email-andriy.shevchenko@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=chunkeey@googlemail.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mans@mansr.com \
--cc=robh+dt@kernel.org \
--cc=runaway@candw.ms \
--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).