Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-11 Thread Jingoo Han
On Tuesday, October 08, 2013 8:45 PM, Yuvaraj Kumar wrote:
 On Fri, Oct 4, 2013 at 6:03 AM, Jingoo Han jg1@samsung.com wrote:
  On Thursday, October 03, 2013 8:32 PM, Bartlomiej Zolnierkiewicz wrote:
  On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
   Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
   ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
   clock related initialization.
  
   This patch adds exynos specific ahci sata driver,contained the exynos
   specific initialized codes, re-use the generic ahci_platform driver, and
   keep the generic ahci_platform driver clean as much as possible.
  
   This patch depends on the below patch
   [1].drivers: phy: add generic PHY framework
   by Kishon Vijay Abraham Ikis...@ti.com
  
   Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
   ---
drivers/ata/Kconfig   |9 ++
drivers/ata/Makefile  |1 +
drivers/ata/ahci_exynos.c |  226 
   +
3 files changed, 236 insertions(+)
create mode 100644 drivers/ata/ahci_exynos.c
  
 
 
  [.]
 
   +   priv-phy = devm_phy_get(dev , sata-phy);
   +   if (IS_ERR(priv-phy))
   +   return PTR_ERR(priv-phy);
 
  [.]
 
  Also please take a look at the following patch:
 
  https://lkml.org/lkml/2013/9/19/173
 
  it adds PHY support to ahci_platform driver, maybe it can be used
  for your needs as well.
 
  I also agree with Bartlomiej Zolnierkiewicz's opinion.
  'ahci_exynos.c' just calls PHY API, without any additional control
  for Exynos AHCI IP.
 In addition to PHY handling,it also deals with the special clock
 sclk_sata which is not dealt in ahci_platform.c(certainly exynos
 specific).

Handling the special clock 'sclk_sata' is another issue.
Please, look at that other 'sclk_*'s are handled.
Also, if possible, please add 'the code handling the special clock'
to 'ahci_platform.c'.

 
 Morever there is a wrapper driver to handle the platform specific
 things for the sata.Please refer the  patch[1]
 [1]ata: ti_sata: Add Texas Instruments SATA Wrapper driver
 https://lkml.org/lkml/2013/9/19/166

As Roger Quadros mentioned, 'ti_sata' driver will be dropped.

 [2]ahci_imx: add ahci sata support on imx platforms
 

'ahci_imx' is necessary, because 'ahci_imx' controls some
specific registers.

However, 'ahci_exynos.c' does not control any registers.

 I think, if we have platform specific driver like ahci_xxx.c , it
 would be better to handle the sata PHY in ahci_xxx.c so that we can
 retain and re-use the ahci_platform.c as it is.

I think that the platform specific driver like ahci_xxx.c is not
necessary, because 'ahci_exynos.c' does not control any special
registers.

Best regards,
Jingoo Han

 
 Further comments will be much appreciated.
 


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-11 Thread Tomasz Figa
Hi,

On Friday 11 of October 2013 15:49:04 Jingoo Han wrote:
 On Tuesday, October 08, 2013 8:45 PM, Yuvaraj Kumar wrote:
  On Fri, Oct 4, 2013 at 6:03 AM, Jingoo Han jg1@samsung.com wrote:
   On Thursday, October 03, 2013 8:32 PM, Bartlomiej Zolnierkiewicz wrote:
   On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
clock related initialization.
   
This patch adds exynos specific ahci sata driver,contained the exynos
specific initialized codes, re-use the generic ahci_platform driver, 
and
keep the generic ahci_platform driver clean as much as possible.
   
This patch depends on the below patch
[1].drivers: phy: add generic PHY framework
by Kishon Vijay Abraham Ikis...@ti.com
   
Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
---
 drivers/ata/Kconfig   |9 ++
 drivers/ata/Makefile  |1 +
 drivers/ata/ahci_exynos.c |  226 
+
 3 files changed, 236 insertions(+)
 create mode 100644 drivers/ata/ahci_exynos.c
   
  
  
   [.]
  
+   priv-phy = devm_phy_get(dev , sata-phy);
+   if (IS_ERR(priv-phy))
+   return PTR_ERR(priv-phy);
  
   [.]
  
   Also please take a look at the following patch:
  
   https://lkml.org/lkml/2013/9/19/173
  
   it adds PHY support to ahci_platform driver, maybe it can be used
   for your needs as well.
  
   I also agree with Bartlomiej Zolnierkiewicz's opinion.
   'ahci_exynos.c' just calls PHY API, without any additional control
   for Exynos AHCI IP.
  In addition to PHY handling,it also deals with the special clock
  sclk_sata which is not dealt in ahci_platform.c(certainly exynos
  specific).
 
 Handling the special clock 'sclk_sata' is another issue.
 Please, look at that other 'sclk_*'s are handled.
 Also, if possible, please add 'the code handling the special clock'
 to 'ahci_platform.c'.
 
  
  Morever there is a wrapper driver to handle the platform specific
  things for the sata.Please refer the  patch[1]
  [1]ata: ti_sata: Add Texas Instruments SATA Wrapper driver
  https://lkml.org/lkml/2013/9/19/166
 
 As Roger Quadros mentioned, 'ti_sata' driver will be dropped.
 
  [2]ahci_imx: add ahci sata support on imx platforms
  
 
 'ahci_imx' is necessary, because 'ahci_imx' controls some
 specific registers.
 
 However, 'ahci_exynos.c' does not control any registers.
 
  I think, if we have platform specific driver like ahci_xxx.c , it
  would be better to handle the sata PHY in ahci_xxx.c so that we can
  retain and re-use the ahci_platform.c as it is.
 
 I think that the platform specific driver like ahci_xxx.c is not
 necessary, because 'ahci_exynos.c' does not control any special
 registers.

My big +1 to all the JIngoo's points above.

Best regards,
Tomasz

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-08 Thread Yuvaraj Kumar
On Fri, Oct 4, 2013 at 6:03 AM, Jingoo Han jg1@samsung.com wrote:
 On Thursday, October 03, 2013 8:32 PM, Bartlomiej Zolnierkiewicz wrote:
 On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
  Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
  ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
  clock related initialization.
 
  This patch adds exynos specific ahci sata driver,contained the exynos
  specific initialized codes, re-use the generic ahci_platform driver, and
  keep the generic ahci_platform driver clean as much as possible.
 
  This patch depends on the below patch
  [1].drivers: phy: add generic PHY framework
  by Kishon Vijay Abraham Ikis...@ti.com
 
  Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
  ---
   drivers/ata/Kconfig   |9 ++
   drivers/ata/Makefile  |1 +
   drivers/ata/ahci_exynos.c |  226 
  +
   3 files changed, 236 insertions(+)
   create mode 100644 drivers/ata/ahci_exynos.c
 


 [.]

  +   priv-phy = devm_phy_get(dev , sata-phy);
  +   if (IS_ERR(priv-phy))
  +   return PTR_ERR(priv-phy);

 [.]

 Also please take a look at the following patch:

 https://lkml.org/lkml/2013/9/19/173

 it adds PHY support to ahci_platform driver, maybe it can be used
 for your needs as well.

 I also agree with Bartlomiej Zolnierkiewicz's opinion.
 'ahci_exynos.c' just calls PHY API, without any additional control
 for Exynos AHCI IP.
In addition to PHY handling,it also deals with the special clock
sclk_sata which is not dealt in ahci_platform.c(certainly exynos
specific).

Morever there is a wrapper driver to handle the platform specific
things for the sata.Please refer the  patch[1]
[1]ata: ti_sata: Add Texas Instruments SATA Wrapper driver
https://lkml.org/lkml/2013/9/19/166

[2]ahci_imx: add ahci sata support on imx platforms

I think, if we have platform specific driver like ahci_xxx.c , it
would be better to handle the sata PHY in ahci_xxx.c so that we can
retain and re-use the ahci_platform.c as it is.

Further comments will be much appreciated.


 Best regards,
 Jingoo Han


  +   ret = phy_init(priv-phy);
  +   if (ret  0) {
  +   dev_err(dev, failed to init SATA PHY\n);
  +   return ret;
  +   }
  +

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-08 Thread Roger Quadros
Hi,

On 10/08/2013 02:44 PM, Yuvaraj Kumar wrote:
 On Fri, Oct 4, 2013 at 6:03 AM, Jingoo Han jg1@samsung.com wrote:
 On Thursday, October 03, 2013 8:32 PM, Bartlomiej Zolnierkiewicz wrote:
 On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
 Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
 ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
 clock related initialization.

 This patch adds exynos specific ahci sata driver,contained the exynos
 specific initialized codes, re-use the generic ahci_platform driver, and
 keep the generic ahci_platform driver clean as much as possible.

 This patch depends on the below patch
 [1].drivers: phy: add generic PHY framework
 by Kishon Vijay Abraham Ikis...@ti.com

 Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
 ---
  drivers/ata/Kconfig   |9 ++
  drivers/ata/Makefile  |1 +
  drivers/ata/ahci_exynos.c |  226 
 +
  3 files changed, 236 insertions(+)
  create mode 100644 drivers/ata/ahci_exynos.c



 [.]

 +   priv-phy = devm_phy_get(dev , sata-phy);
 +   if (IS_ERR(priv-phy))
 +   return PTR_ERR(priv-phy);

 [.]

 Also please take a look at the following patch:

 https://lkml.org/lkml/2013/9/19/173

 it adds PHY support to ahci_platform driver, maybe it can be used
 for your needs as well.

 I also agree with Bartlomiej Zolnierkiewicz's opinion.
 'ahci_exynos.c' just calls PHY API, without any additional control
 for Exynos AHCI IP.
 In addition to PHY handling,it also deals with the special clock
 sclk_sata which is not dealt in ahci_platform.c(certainly exynos
 specific).
 
 Morever there is a wrapper driver to handle the platform specific
 things for the sata.Please refer the  patch[1]
 [1]ata: ti_sata: Add Texas Instruments SATA Wrapper driver
 https://lkml.org/lkml/2013/9/19/166

This driver doesn't do anything at the moment since the OMAP hwmod layer
takes care of enabling the relevant clocks. So I was planning to drop it
for now.

 
 [2]ahci_imx: add ahci sata support on imx platforms
 
 I think, if we have platform specific driver like ahci_xxx.c , it
 would be better to handle the sata PHY in ahci_xxx.c so that we can
 retain and re-use the ahci_platform.c as it is.
 

The Generic PHY framework [3] has been merged into Greg's usb-next branch.
The operations there are pretty generic and IMO the PHY can be handled in
the ahci_platform driver.

[3] Generic PHY framework
https://lkml.org/lkml/2013/9/27/581

cheers,
-roger

 Further comments will be much appreciated.
 

 Best regards,
 Jingoo Han


 +   ret = phy_init(priv-phy);
 +   if (ret  0) {
 +   dev_err(dev, failed to init SATA PHY\n);
 +   return ret;
 +   }
 +


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-03 Thread Bartlomiej Zolnierkiewicz

Hi,

On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
 Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
 ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
 clock related initialization.
 
 This patch adds exynos specific ahci sata driver,contained the exynos
 specific initialized codes, re-use the generic ahci_platform driver, and
 keep the generic ahci_platform driver clean as much as possible.
 
 This patch depends on the below patch
   [1].drivers: phy: add generic PHY framework
   by Kishon Vijay Abraham Ikis...@ti.com
 
 Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
 ---
  drivers/ata/Kconfig   |9 ++
  drivers/ata/Makefile  |1 +
  drivers/ata/ahci_exynos.c |  226 
 +
  3 files changed, 236 insertions(+)
  create mode 100644 drivers/ata/ahci_exynos.c
 
 diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
 index 4e73772..99b2392 100644
 --- a/drivers/ata/Kconfig
 +++ b/drivers/ata/Kconfig
 @@ -106,6 +106,15 @@ config AHCI_IMX
  
 If unsure, say N.
  
 +config AHCI_EXYNOS
 + tristate Samsung Exynos AHCI SATA support
 + depends on SATA_AHCI_PLATFORM

This should also depend on SOC_EXYNOS5250.

 + help
 +   This option enables support for the Samsung's Exynos SoC's
 +   onboard AHCI SATA.
 +
 +   If unsure, say N.
 +
  config SATA_FSL
   tristate Freescale 3.0Gbps SATA support
   depends on FSL_SOC
 diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
 index 46518c6..0e1f420f 100644
 --- a/drivers/ata/Makefile
 +++ b/drivers/ata/Makefile
 @@ -11,6 +11,7 @@ obj-$(CONFIG_SATA_SIL24)+= sata_sil24.o
  obj-$(CONFIG_SATA_DWC)   += sata_dwc_460ex.o
  obj-$(CONFIG_SATA_HIGHBANK)  += sata_highbank.o libahci.o
  obj-$(CONFIG_AHCI_IMX)   += ahci_imx.o
 +obj-$(CONFIG_AHCI_EXYNOS)+= ahci_exynos.o
  
  # SFF w/ custom DMA
  obj-$(CONFIG_PDC_ADMA)   += pdc_adma.o
 diff --git a/drivers/ata/ahci_exynos.c b/drivers/ata/ahci_exynos.c
 new file mode 100644
 index 000..7f0af00
 --- /dev/null
 +++ b/drivers/ata/ahci_exynos.c
 @@ -0,0 +1,226 @@
 +/*
 + * Samsung AHCI SATA platform driver
 + * Copyright 2013 Samsung Electronics Co., Ltd.
 + *
 + * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
 + *
 + * This program is free software; you can redistribute it and/or modify it
 + * under the terms and conditions of the GNU General Public License,
 + * version 2, as published by the Free Software Foundation.
 + *
 + * This program is distributed in the hope it will be useful, but WITHOUT
 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 + * more details.
 + *
 + * You should have received a copy of the GNU General Public License along 
 with
 + * this program. If not, see http://www.gnu.org/licenses/.
 + */
 +
 +#include linux/kernel.h
 +#include linux/module.h
 +#include linux/platform_device.h
 +#include linux/i2c.h

This include doesn't seem to be needed.

 +#include linux/io.h
 +#include linux/ahci_platform.h
 +#include linux/of_device.h
 +#include linux/phy/phy.h
 +#include ahci.h
 +
 +#define MHZ (1000 * 1000)
 +
 +struct exynos_ahci_priv {
 + struct platform_device *ahci_pdev;
 + struct clk *sclk;
 + unsigned int freq;
 + struct phy *phy;
 +};
 +
 +static int exynos_sata_init(struct device *dev, void __iomem *mmio)
 +{
 + struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
 + int ret;
 +
 + priv-phy = devm_phy_get(dev , sata-phy);
 + if (IS_ERR(priv-phy))
 + return PTR_ERR(priv-phy);

This should happen in -probe (exynos_sata_init() is also called in
exynos_sata_resume() so the above code will be executed on every
resume operation which is incorrect).

Also please take a look at the following patch:

https://lkml.org/lkml/2013/9/19/173

it adds PHY support to ahci_platform driver, maybe it can be used
for your needs as well.

 + ret = phy_init(priv-phy);
 + if (ret  0) {
 + dev_err(dev, failed to init SATA PHY\n);
 + return ret;
 + }
 +
 + ret = clk_prepare_enable(priv-sclk);
 + if (ret  0) {
 + dev_err(dev, failed to enable source clk\n);
 + return ret;
 + }
 +
 + ret = clk_set_rate(priv-sclk, priv-freq * MHZ);
 + if (ret  0) {
 + dev_err(dev, failed to set clk frequency\n);
 + clk_disable_unprepare(priv-sclk);
 + return ret;
 + }
 +
 + return 0;
 +}
 +
 +static void exynos_sata_exit(struct device *dev)
 +{
 + struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
 + if (!IS_ERR(priv-sclk))
 + clk_disable_unprepare(priv-sclk);
 +}
 +
 +static int exynos_sata_suspend(struct device *dev)
 +{
 + struct exynos_ahci_priv *priv = 

Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-03 Thread Jingoo Han
On Thursday, October 03, 2013 8:32 PM, Bartlomiej Zolnierkiewicz wrote:
 On Tuesday, October 01, 2013 12:03:01 PM Yuvaraj Kumar C D wrote:
  Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
  ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
  clock related initialization.
 
  This patch adds exynos specific ahci sata driver,contained the exynos
  specific initialized codes, re-use the generic ahci_platform driver, and
  keep the generic ahci_platform driver clean as much as possible.
 
  This patch depends on the below patch
  [1].drivers: phy: add generic PHY framework
  by Kishon Vijay Abraham Ikis...@ti.com
 
  Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
  ---
   drivers/ata/Kconfig   |9 ++
   drivers/ata/Makefile  |1 +
   drivers/ata/ahci_exynos.c |  226 
  +
   3 files changed, 236 insertions(+)
   create mode 100644 drivers/ata/ahci_exynos.c
 


[.]

  +   priv-phy = devm_phy_get(dev , sata-phy);
  +   if (IS_ERR(priv-phy))
  +   return PTR_ERR(priv-phy);

[.]

 Also please take a look at the following patch:
 
 https://lkml.org/lkml/2013/9/19/173
 
 it adds PHY support to ahci_platform driver, maybe it can be used
 for your needs as well.

I also agree with Bartlomiej Zolnierkiewicz's opinion.
'ahci_exynos.c' just calls PHY API, without any additional control
for Exynos AHCI IP.

Best regards,
Jingoo Han

 
  +   ret = phy_init(priv-phy);
  +   if (ret  0) {
  +   dev_err(dev, failed to init SATA PHY\n);
  +   return ret;
  +   }
  +

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-01 Thread Yuvaraj Kumar C D
Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
clock related initialization.

This patch adds exynos specific ahci sata driver,contained the exynos
specific initialized codes, re-use the generic ahci_platform driver, and
keep the generic ahci_platform driver clean as much as possible.

This patch depends on the below patch
[1].drivers: phy: add generic PHY framework
by Kishon Vijay Abraham Ikis...@ti.com

Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
---
 drivers/ata/Kconfig   |9 ++
 drivers/ata/Makefile  |1 +
 drivers/ata/ahci_exynos.c |  226 +
 3 files changed, 236 insertions(+)
 create mode 100644 drivers/ata/ahci_exynos.c

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 4e73772..99b2392 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -106,6 +106,15 @@ config AHCI_IMX
 
  If unsure, say N.
 
+config AHCI_EXYNOS
+   tristate Samsung Exynos AHCI SATA support
+   depends on SATA_AHCI_PLATFORM
+   help
+ This option enables support for the Samsung's Exynos SoC's
+ onboard AHCI SATA.
+
+ If unsure, say N.
+
 config SATA_FSL
tristate Freescale 3.0Gbps SATA support
depends on FSL_SOC
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
index 46518c6..0e1f420f 100644
--- a/drivers/ata/Makefile
+++ b/drivers/ata/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_SATA_SIL24)  += sata_sil24.o
 obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o
 obj-$(CONFIG_SATA_HIGHBANK)+= sata_highbank.o libahci.o
 obj-$(CONFIG_AHCI_IMX) += ahci_imx.o
+obj-$(CONFIG_AHCI_EXYNOS)  += ahci_exynos.o
 
 # SFF w/ custom DMA
 obj-$(CONFIG_PDC_ADMA) += pdc_adma.o
diff --git a/drivers/ata/ahci_exynos.c b/drivers/ata/ahci_exynos.c
new file mode 100644
index 000..7f0af00
--- /dev/null
+++ b/drivers/ata/ahci_exynos.c
@@ -0,0 +1,226 @@
+/*
+ * Samsung AHCI SATA platform driver
+ * Copyright 2013 Samsung Electronics Co., Ltd.
+ *
+ * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+#include linux/kernel.h
+#include linux/module.h
+#include linux/platform_device.h
+#include linux/i2c.h
+#include linux/io.h
+#include linux/ahci_platform.h
+#include linux/of_device.h
+#include linux/phy/phy.h
+#include ahci.h
+
+#define MHZ (1000 * 1000)
+
+struct exynos_ahci_priv {
+   struct platform_device *ahci_pdev;
+   struct clk *sclk;
+   unsigned int freq;
+   struct phy *phy;
+};
+
+static int exynos_sata_init(struct device *dev, void __iomem *mmio)
+{
+   struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
+   int ret;
+
+   priv-phy = devm_phy_get(dev , sata-phy);
+   if (IS_ERR(priv-phy))
+   return PTR_ERR(priv-phy);
+
+   ret = phy_init(priv-phy);
+   if (ret  0) {
+   dev_err(dev, failed to init SATA PHY\n);
+   return ret;
+   }
+
+   ret = clk_prepare_enable(priv-sclk);
+   if (ret  0) {
+   dev_err(dev, failed to enable source clk\n);
+   return ret;
+   }
+
+   ret = clk_set_rate(priv-sclk, priv-freq * MHZ);
+   if (ret  0) {
+   dev_err(dev, failed to set clk frequency\n);
+   clk_disable_unprepare(priv-sclk);
+   return ret;
+   }
+
+   return 0;
+}
+
+static void exynos_sata_exit(struct device *dev)
+{
+   struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
+   if (!IS_ERR(priv-sclk))
+   clk_disable_unprepare(priv-sclk);
+}
+
+static int exynos_sata_suspend(struct device *dev)
+{
+   struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
+
+   if (!IS_ERR(priv-sclk))
+   clk_disable_unprepare(priv-sclk);
+   phy_power_off(priv-phy);
+   return 0;
+}
+
+static int exynos_sata_resume(struct device *dev)
+{
+   struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
+   phy_power_on(priv-phy);
+   exynos_sata_init(dev, NULL);
+   return 0;
+}
+
+static struct ahci_platform_data exynos_sata_pdata = {
+   .init = exynos_sata_init,
+   .exit = exynos_sata_exit,
+   .suspend = exynos_sata_suspend,
+   .resume = 

Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-01 Thread Sachin Kamat
Hi Yuvaraj,

On 1 October 2013 12:03, Yuvaraj Kumar C D yuvaraj...@gmail.com wrote:
 Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
 ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
 clock related initialization.

 +err_out:
 +   platform_set_drvdata(pdev, NULL);

This is not necessary. Driver core clears it upon detach or failure.

 +   platform_device_put(ahci_pdev);
 +   return ret;
 +   }
 +
 +   return 0;
 +}
 +
 +static int exynos_ahci_remove(struct platform_device *pdev)
 +{
 +   struct exynos_ahci_priv *priv = platform_get_drvdata(pdev);
 +   struct platform_device *ahci_pdev = priv-ahci_pdev;
 +
 +   platform_device_unregister(ahci_pdev);
 +   platform_set_drvdata(pdev, NULL);

ditto

-- 
With warm regards,
Sachin
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] ahci: exynos: add ahci sata support on Exynos platform

2013-10-01 Thread Kishon Vijay Abraham I
On Tuesday 01 October 2013 12:03 PM, Yuvaraj Kumar C D wrote:
 Exynos5250 contains one Synopsys AHCI SATA controller.The avalaible
 ahci_platform driver is not sufficient to handle the AHCI PHY and PHY
 clock related initialization.
 
 This patch adds exynos specific ahci sata driver,contained the exynos
 specific initialized codes, re-use the generic ahci_platform driver, and
 keep the generic ahci_platform driver clean as much as possible.
 
 This patch depends on the below patch
   [1].drivers: phy: add generic PHY framework
   by Kishon Vijay Abraham Ikis...@ti.com
 
 Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
 ---
  drivers/ata/Kconfig   |9 ++
  drivers/ata/Makefile  |1 +
  drivers/ata/ahci_exynos.c |  226 
 +
  3 files changed, 236 insertions(+)
  create mode 100644 drivers/ata/ahci_exynos.c
 
 diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
 index 4e73772..99b2392 100644
 --- a/drivers/ata/Kconfig
 +++ b/drivers/ata/Kconfig
 @@ -106,6 +106,15 @@ config AHCI_IMX
  
 If unsure, say N.
  
 +config AHCI_EXYNOS
 + tristate Samsung Exynos AHCI SATA support
 + depends on SATA_AHCI_PLATFORM

Can we select GENERIC_PHY here?
 + help
 +   This option enables support for the Samsung's Exynos SoC's
 +   onboard AHCI SATA.
 +
 +   If unsure, say N.
 +
  config SATA_FSL
   tristate Freescale 3.0Gbps SATA support
   depends on FSL_SOC
 diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
 index 46518c6..0e1f420f 100644
 --- a/drivers/ata/Makefile
 +++ b/drivers/ata/Makefile
 @@ -11,6 +11,7 @@ obj-$(CONFIG_SATA_SIL24)+= sata_sil24.o
  obj-$(CONFIG_SATA_DWC)   += sata_dwc_460ex.o
  obj-$(CONFIG_SATA_HIGHBANK)  += sata_highbank.o libahci.o
  obj-$(CONFIG_AHCI_IMX)   += ahci_imx.o
 +obj-$(CONFIG_AHCI_EXYNOS)+= ahci_exynos.o
  
  # SFF w/ custom DMA
  obj-$(CONFIG_PDC_ADMA)   += pdc_adma.o
 diff --git a/drivers/ata/ahci_exynos.c b/drivers/ata/ahci_exynos.c
 new file mode 100644
 index 000..7f0af00
 --- /dev/null
 +++ b/drivers/ata/ahci_exynos.c
 @@ -0,0 +1,226 @@
 +/*
 + * Samsung AHCI SATA platform driver
 + * Copyright 2013 Samsung Electronics Co., Ltd.
 + *
 + * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
 + *
 + * This program is free software; you can redistribute it and/or modify it
 + * under the terms and conditions of the GNU General Public License,
 + * version 2, as published by the Free Software Foundation.
 + *
 + * This program is distributed in the hope it will be useful, but WITHOUT
 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 + * more details.
 + *
 + * You should have received a copy of the GNU General Public License along 
 with
 + * this program. If not, see http://www.gnu.org/licenses/.
 + */
 +
 +#include linux/kernel.h
 +#include linux/module.h
 +#include linux/platform_device.h
 +#include linux/i2c.h
 +#include linux/io.h
 +#include linux/ahci_platform.h
 +#include linux/of_device.h
 +#include linux/phy/phy.h
 +#include ahci.h
 +
 +#define MHZ (1000 * 1000)
 +
 +struct exynos_ahci_priv {
 + struct platform_device *ahci_pdev;
 + struct clk *sclk;
 + unsigned int freq;
 + struct phy *phy;
 +};
 +
 +static int exynos_sata_init(struct device *dev, void __iomem *mmio)
 +{
 + struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
 + int ret;
 +
 + priv-phy = devm_phy_get(dev , sata-phy);
^^
 spurious space here

phy_get should be called from probe.
 + if (IS_ERR(priv-phy))
 + return PTR_ERR(priv-phy);
 +
 + ret = phy_init(priv-phy);
 + if (ret  0) {
 + dev_err(dev, failed to init SATA PHY\n);
single tab is sufficient here and below.
 + return ret;
 + }
 +
 + ret = clk_prepare_enable(priv-sclk);
 + if (ret  0) {
 + dev_err(dev, failed to enable source clk\n);
 + return ret;
 + }
 +
 + ret = clk_set_rate(priv-sclk, priv-freq * MHZ);
 + if (ret  0) {
 + dev_err(dev, failed to set clk frequency\n);
 + clk_disable_unprepare(priv-sclk);
 + return ret;
 + }
 +
 + return 0;
 +}
 +
 +static void exynos_sata_exit(struct device *dev)
 +{
 + struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
 + if (!IS_ERR(priv-sclk))

This error check is not needed. You fail probe if you dont get clock anyways.
 + clk_disable_unprepare(priv-sclk);
 +}
 +
 +static int exynos_sata_suspend(struct device *dev)
 +{
 + struct exynos_ahci_priv *priv = dev_get_drvdata(dev-parent);
 +
 + if (!IS_ERR(priv-sclk))
ditto..
 + clk_disable_unprepare(priv-sclk);
 + phy_power_off(priv-phy);
 + return 0;
 +}