mbox series

[v2,00/14] ARM: da850-lcdk: add SATA support

Message ID 1484655976-25382-1-git-send-email-bgolaszewski@baylibre.com
Headers show
Series ARM: da850-lcdk: add SATA support | expand

Message

Bartosz Golaszewski Jan. 17, 2017, 12:26 p.m. UTC
This series contains all the changes necessary to make SATA work on
the da850-lcdk board.

The first patch adds DT bindings for the ahci-da850 driver.

The second enables relevant modules in davinci_all_defconfig.

Patches 03/14-06/14 modify the way the clocks are handled regarding
SATA on the da850 platform. We modify the ahci driver to retrieve
the clock via con_id and model the external SATA oscillator as
a real clock.

Patches 07/14-11/14 extend the ahci-da850 driver. Add DT support,
implement workarounds necessary to make SATA work on the da850-lcdk
board and un-hardcode the external clock multiplier.

Last three patches add device tree changes required to probe the
driver.

v1 -> v2:
- dropped patch 04/10 - replaced with local changes in the
  ahci-da850 driver
- added comments explaining the workaround in ahci softreset
- s/0x218000/218000 in the sata DT node label
- added patches chaning the way clocks are handled in the da850 SATA
  code both in arch/ and in the ahci driver
- dropped the clock multiplier property in the DT bindings in favor
  of using struct clk to pass the refclk rate to the driver
- minor tweaks in commit messages

Bartosz Golaszewski (14):
  devicetree: bindings: add bindings for ahci-da850
  ARM: davinci_all_defconfig: enable SATA modules
  ARM: davinci: add a clock lookup entry for the SATA clock
  sata: ahci-da850: get the sata clock using a connector id
  ARM: davinci: da850: add con_id for the SATA clock
  ARM: davinci: da850: model the SATA refclk
  sata: ahci-da850: add device tree match table
  sata: ahci-da850: implement a workaround for the softreset quirk
  sata: ahci: export ahci_do_hardreset() locally
  sata: ahci-da850: add a workaround for controller instability
  sata: ahci-da850: un-hardcode the MPY bits
  ARM: dts: da850: add pinmux settings for the SATA controller
  ARM: dts: da850: add the SATA node
  ARM: dts: da850-lcdk: enable the SATA node

 .../devicetree/bindings/ata/ahci-da850.txt         |  18 +++
 arch/arm/boot/dts/da850-lcdk.dts                   |   4 +
 arch/arm/boot/dts/da850.dtsi                       |  30 ++++
 arch/arm/configs/davinci_all_defconfig             |   2 +
 arch/arm/mach-davinci/da850.c                      |   2 +-
 arch/arm/mach-davinci/da8xx-dt.c                   |   9 ++
 arch/arm/mach-davinci/devices-da8xx.c              |  23 +++
 arch/arm/mach-davinci/include/mach/da8xx.h         |   1 +
 drivers/ata/ahci.h                                 |   3 +
 drivers/ata/ahci_da850.c                           | 172 +++++++++++++++++++--
 drivers/ata/libahci.c                              |  18 ++-
 11 files changed, 262 insertions(+), 20 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/ata/ahci-da850.txt

-- 
2.9.3

Comments

Sergei Shtylyov Jan. 17, 2017, 4:02 p.m. UTC | #1
Hello!

On 01/17/2017 03:26 PM, Bartosz Golaszewski wrote:

> In preparation for using two clocks in the driver (the sysclk2-based

> clock and the external REFCLK), check if we got a functional clock

> after calling ahci_platform_get_resources(). If not, retry calling

> get_clk() with con_id specified.


    clk_get().

> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>

> ---

>  drivers/ata/ahci_da850.c | 16 ++++++++++++++++

>  1 file changed, 16 insertions(+)

>

> diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c

> index 267a3d3..18f57c2 100644

> --- a/drivers/ata/ahci_da850.c

> +++ b/drivers/ata/ahci_da850.c

> @@ -71,12 +71,28 @@ static int ahci_da850_probe(struct platform_device *pdev)

>  	struct ahci_host_priv *hpriv;

>  	struct resource *res;

>  	void __iomem *pwrdn_reg;

> +	struct clk *clk;

>  	int rc;

>

>  	hpriv = ahci_platform_get_resources(pdev);

>  	if (IS_ERR(hpriv))

>  		return PTR_ERR(hpriv);

>

> +	/*

> +	 * Internally ahci_platform_get_resources() calls clk_get(dev, NULL)

> +	 * when trying to obtain the first clock. This SATA controller uses

> +	 * two clocks for which we specify two connector ids. If we don't


    It's called connection ID, IIRC.

[...]

MBR, Sergei