All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model
@ 2017-04-07 11:41 Jean-Jacques Hiblot
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks() Jean-Jacques Hiblot
                   ` (9 more replies)
  0 siblings, 10 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:41 UTC (permalink / raw)
  To: u-boot

This series adds support for SATA using the driver model on omap platforms.
It is based on the work of Mugunthan V N <mugunthanvnm@ti.com> in Feb 2016

The first 2 patches are preparatory work.
The 3rd patch adds a new framework to handle PHYs in a generic manner. The idea
is to move the phy initialization out of the board-specific code into a proper
driver. The link between the phy device and the controller device is done in
by device-tree as it's done in linux. The API to control a phy has been copied
from linux, excpet that the functions are prefixed by 'generic_phy_' instead of
just 'phy_' because phy_reset() is already used to handle the Ethernet phys.
The 4th patch adds a phy driver for the pipe3 sata phy found in the
omaps/am5x/dra7x SOCs.
The 5th patch allows the device under the node ocp2scp at 4a090000 to be probed.
The 6th patch implements a driver for the SATA controller found in the
omaps/am5x/dra7x SOCs.
The 7th patch is cosmetic and changes the interface of scsi_detect_dev()
The 8th patch moves the call to part_init() out of scsi_detect_dev(). This is
a preparatory work path #9.
The 9th patches fix a divide-by-0 error that happens in scsi_scan()
when DM is used.
The last patch enables the DM sata by default for the dra7 platforms.


changes since v1:
* changed the way the 'old' sata code is compiled out when DM_SCSI is enabled.
* added a new framework for PHY management.
* added a new driver for the PIPE3 phy and use it in the dwc_ahci driver.
* changed the interface of scsi_detect_dev() and moved the call part_init() out
  of it.
* modified the fix to scsi_scan() in order to call scsi_detect_dev() only once.
* the max_lun and max_id parameters are now taken from the device-tree.
* Updated the defconfig changes to include the PHY driver and its dependencies.


Jean-Jacques Hiblot (8):
  arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI
    is defined
  drivers: phy: add generic PHY framework
  drivers: phy: add PIPE3 phy driver
  dra7: dtsi: mark ocp2scp bus compatible with "simple-bus"
  scsi: make the LUN a parameter of scsi_detect_dev()
  scsi: move the partition initialization out of the scsi detection
  dm: scsi: fix divide-by-0 error in scsi_scan()
  defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for
    SCSI

Mugunthan V N (2):
  arm: omap: sata: move enable sata clocks to enable_basic_clocks()
  drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata
    device

 Makefile                            |   1 +
 arch/arm/dts/dra7.dtsi              |   2 +-
 arch/arm/mach-omap2/Makefile        |   2 +
 arch/arm/mach-omap2/omap5/hw_data.c |  12 ++
 arch/arm/mach-omap2/sata.c          |  23 ---
 common/scsi.c                       |  48 +++--
 configs/dra7xx_evm_defconfig        |  12 +-
 configs/dra7xx_hs_evm_defconfig     |  11 +-
 drivers/Kconfig                     |   2 +
 drivers/Makefile                    |   1 +
 drivers/block/Kconfig               |  10 +
 drivers/block/Makefile              |   1 +
 drivers/block/dwc_ahci.c            | 100 ++++++++++
 drivers/phy/Kconfig                 |  34 ++++
 drivers/phy/Makefile                |   6 +
 drivers/phy/phy-uclass.c            |  77 ++++++++
 drivers/phy/ti-pipe3-phy.c          | 368 ++++++++++++++++++++++++++++++++++++
 include/dm/uclass-id.h              |   1 +
 include/generic-phy.h               |  38 ++++
 19 files changed, 708 insertions(+), 41 deletions(-)
 create mode 100644 drivers/block/dwc_ahci.c
 create mode 100644 drivers/phy/Kconfig
 create mode 100644 drivers/phy/Makefile
 create mode 100644 drivers/phy/phy-uclass.c
 create mode 100644 drivers/phy/ti-pipe3-phy.c
 create mode 100644 include/generic-phy.h

-- 
1.9.1

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks()
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-15 16:07   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined Jean-Jacques Hiblot
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

From: Mugunthan V N <mugunthanvnm@ti.com>

All the clocks which has to be enabled has to be done in
enable_basic_clocks(), so moving enable sata clock to common
clocks enable function.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
---

the patch hasn't changed since v1

arch/arm/mach-omap2/omap5/hw_data.c | 12 ++++++++++++
 arch/arm/mach-omap2/sata.c          | 23 -----------------------
 2 files changed, 12 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-omap2/omap5/hw_data.c b/arch/arm/mach-omap2/omap5/hw_data.c
index 5d956b5..a8a6b8a 100644
--- a/arch/arm/mach-omap2/omap5/hw_data.c
+++ b/arch/arm/mach-omap2/omap5/hw_data.c
@@ -361,6 +361,9 @@ void enable_basic_clocks(void)
 		(*prcm)->cm_l4per_gpio6_clkctrl,
 		(*prcm)->cm_l4per_gpio7_clkctrl,
 		(*prcm)->cm_l4per_gpio8_clkctrl,
+#ifdef CONFIG_SCSI_AHCI_PLAT
+		(*prcm)->cm_l3init_ocp2scp3_clkctrl,
+#endif
 		0
 	};
 
@@ -379,6 +382,9 @@ void enable_basic_clocks(void)
 #ifdef CONFIG_TI_QSPI
 		(*prcm)->cm_l4per_qspi_clkctrl,
 #endif
+#ifdef CONFIG_SCSI_AHCI_PLAT
+		(*prcm)->cm_l3init_sata_clkctrl,
+#endif
 		0
 	};
 
@@ -411,6 +417,12 @@ void enable_basic_clocks(void)
 	setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24));
 #endif
 
+#ifdef CONFIG_SCSI_AHCI_PLAT
+	/* Enable optional functional clock for SATA */
+	setbits_le32((*prcm)->cm_l3init_sata_clkctrl,
+		     SATA_CLKCTRL_OPTFCLKEN_MASK);
+#endif
+
 	/* Enable SCRM OPT clocks for PER and CORE dpll */
 	setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
 			OPTFCLKEN_SCRM_PER_MASK);
diff --git a/arch/arm/mach-omap2/sata.c b/arch/arm/mach-omap2/sata.c
index 2c2d1bc..0c82689 100644
--- a/arch/arm/mach-omap2/sata.c
+++ b/arch/arm/mach-omap2/sata.c
@@ -37,29 +37,6 @@ int init_sata(int dev)
 	int ret;
 	u32 val;
 
-	u32 const clk_domains_sata[] = {
-		0
-	};
-
-	u32 const clk_modules_hw_auto_sata[] = {
-		(*prcm)->cm_l3init_ocp2scp3_clkctrl,
-		0
-	};
-
-	u32 const clk_modules_explicit_en_sata[] = {
-		(*prcm)->cm_l3init_sata_clkctrl,
-		0
-	};
-
-	do_enable_clocks(clk_domains_sata,
-			 clk_modules_hw_auto_sata,
-			 clk_modules_explicit_en_sata,
-			 0);
-
-	/* Enable optional functional clock for SATA */
-	setbits_le32((*prcm)->cm_l3init_sata_clkctrl,
-		     SATA_CLKCTRL_OPTFCLKEN_MASK);
-
 	sata_phy.power_reg = (void __iomem *)(*ctrl)->control_phy_power_sata;
 
 	/* Power up the PHY */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks() Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework Jean-Jacques Hiblot
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

When CONFIG_DM_SCSI is defined, the SATA initialization will be implemented
in the scsi-uclass driver.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 Instead of compiling out the code inside the C file, let's just not compile the files at all.

 arch/arm/mach-omap2/Makefile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index e814eb0..aa3986d 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -29,9 +29,11 @@ obj-y	+= abb.o
 endif
 
 ifneq ($(CONFIG_OMAP54XX),)
+ifeq ($(CONFIG_DM_SCSI),)
 obj-y	+= pipe3-phy.o
 obj-$(CONFIG_SCSI_AHCI_PLAT) += sata.o
 endif
+endif
 
 ifeq ($(CONFIG_SYS_DCACHE_OFF),)
 obj-y	+= omap-cache.o
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks() Jean-Jacques Hiblot
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver Jean-Jacques Hiblot
                   ` (6 subsequent siblings)
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

The PHY framework provides a set of APIs to control a PHY. This API is
derived from the linux version of the generic PHY framework.
Currently the API supports init(), deinit(), power_on, power_off() and
reset(). The framework provides a way to get a reference to a phy from the
device-tree.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 Makefile                 |  1 +
 drivers/Kconfig          |  2 ++
 drivers/Makefile         |  1 +
 drivers/phy/Kconfig      | 22 ++++++++++++++
 drivers/phy/Makefile     |  5 ++++
 drivers/phy/phy-uclass.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/dm/uclass-id.h   |  1 +
 include/generic-phy.h    | 38 ++++++++++++++++++++++++
 8 files changed, 147 insertions(+)
 create mode 100644 drivers/phy/Kconfig
 create mode 100644 drivers/phy/Makefile
 create mode 100644 drivers/phy/phy-uclass.c
 create mode 100644 include/generic-phy.h

diff --git a/Makefile b/Makefile
index 2638acf..06454ce 100644
--- a/Makefile
+++ b/Makefile
@@ -650,6 +650,7 @@ libs-y += fs/
 libs-y += net/
 libs-y += disk/
 libs-y += drivers/
+libs-y += drivers/phy/
 libs-y += drivers/dma/
 libs-y += drivers/gpio/
 libs-y += drivers/i2c/
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 0e5d97d..a90ceca 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -88,6 +88,8 @@ source "drivers/video/Kconfig"
 
 source "drivers/watchdog/Kconfig"
 
+source "drivers/phy/Kconfig"
+
 config PHYS_TO_BUS
 	bool "Custom physical to bus address mapping"
 	help
diff --git a/drivers/Makefile b/drivers/Makefile
index 5d8baa5..4656509 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -47,6 +47,7 @@ obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
 obj-$(CONFIG_SPL_SATA_SUPPORT) += block/
 obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
 obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
+obj-$(CONFIG_SPL_GENERIC_PHY) += phy/
 endif
 
 ifdef CONFIG_TPL_BUILD
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
new file mode 100644
index 0000000..b6fed9e
--- /dev/null
+++ b/drivers/phy/Kconfig
@@ -0,0 +1,22 @@
+
+menu "PHY Subsystem"
+
+config GENERIC_PHY
+	bool "PHY Core"
+	depends on DM
+	help
+	  Generic PHY support.
+
+	  This framework is designed to provide a generic interface for PHY
+	  devices.
+
+config SPL_GENERIC_PHY
+	bool "PHY Core in SPL"
+	depends on DM
+	help
+	  Generic PHY support in SPL.
+
+	  This framework is designed to provide a generic interface for PHY
+	  devices.
+
+endmenu
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
new file mode 100644
index 0000000..ccd15ed
--- /dev/null
+++ b/drivers/phy/Makefile
@@ -0,0 +1,5 @@
+obj-$(CONFIG_$(SPL_)GENERIC_PHY) += phy-uclass.o
+
+ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),)
+obj-y += marvell/
+endif
diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c
new file mode 100644
index 0000000..4d1584d
--- /dev/null
+++ b/drivers/phy/phy-uclass.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <generic-phy.h>
+
+#define get_ops(dev)        ((struct generic_phy_ops *)(dev)->driver->ops)
+
+#define generic_phy_to_dev(x) ((struct udevice *)(x))
+#define dev_to_generic_phy(x) ((struct generic_phy *)(x))
+
+struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string)
+{
+	struct udevice *generic_phy_dev;
+
+	int rc = uclass_get_device_by_phandle(UCLASS_PHY, dev,
+					   string, &generic_phy_dev);
+	if (rc) {
+		error("unable to find generic_phy device %d\n", rc);
+		return ERR_PTR(rc);
+	}
+	return dev_to_generic_phy(generic_phy_dev);
+}
+
+int generic_phy_init(struct generic_phy *generic_phy)
+{
+	struct udevice *dev = generic_phy_to_dev(generic_phy);
+	struct generic_phy_ops *ops = get_ops(dev);
+
+	return (ops && ops->init) ? ops->init(dev) : 0;
+}
+
+int generic_phy_reset(struct generic_phy *generic_phy)
+{
+	struct udevice *dev = generic_phy_to_dev(generic_phy);
+	struct generic_phy_ops *ops = get_ops(dev);
+
+	return (ops && ops->reset) ? ops->reset(dev) : 0;
+}
+
+int generic_phy_exit(struct generic_phy *generic_phy)
+{
+	struct udevice *dev = generic_phy_to_dev(generic_phy);
+	struct generic_phy_ops *ops = get_ops(dev);
+
+	return (ops && ops->exit) ? ops->exit(dev) : 0;
+}
+
+int generic_phy_power_on(struct generic_phy *generic_phy)
+{
+	struct udevice *dev = generic_phy_to_dev(generic_phy);
+	struct generic_phy_ops *ops = get_ops(dev);
+
+	return (ops && ops->power_on) ? ops->power_on(dev) : 0;
+}
+
+int generic_phy_power_off(struct generic_phy *generic_phy)
+{
+	struct udevice *dev = generic_phy_to_dev(generic_phy);
+	struct generic_phy_ops *ops = get_ops(dev);
+
+	return (ops && ops->power_off) ? ops->power_off(dev) : 0;
+}
+
+
+
+UCLASS_DRIVER(simple_generic_phy) = {
+	.id		= UCLASS_PHY,
+	.name		= "generic_phy",
+};
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 8c92d0b..9d34a32 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -83,6 +83,7 @@ enum uclass_id {
 	UCLASS_VIDEO,		/* Video or LCD device */
 	UCLASS_VIDEO_BRIDGE,	/* Video bridge, e.g. DisplayPort to LVDS */
 	UCLASS_VIDEO_CONSOLE,	/* Text console driver for video device */
+	UCLASS_PHY,		/* generic PHY device */
 
 	UCLASS_COUNT,
 	UCLASS_INVALID = -1,
diff --git a/include/generic-phy.h b/include/generic-phy.h
new file mode 100644
index 0000000..f02e9ce
--- /dev/null
+++ b/include/generic-phy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __GENERIC_PHY_H
+#define __GENERIC_PHY_H
+
+struct generic_phy;
+/*
+ * struct generic_phy_ops - set of function pointers for phy operations
+ * @init: operation to be performed for initializing phy
+ * @exit: operation to be performed while exiting
+ * @power_on: powering on the phy
+ * @power_off: powering off the phy
+ */
+struct generic_phy_ops {
+	int	(*init)(struct udevice *phy);
+	int	(*exit)(struct udevice *phy);
+	int	(*reset)(struct udevice *phy);
+	int	(*power_on)(struct udevice *phy);
+	int	(*power_off)(struct udevice *phy);
+};
+
+
+int generic_phy_init(struct generic_phy *phy);
+int generic_phy_reset(struct generic_phy *phy);
+int generic_phy_exit(struct generic_phy *phy);
+int generic_phy_power_on(struct generic_phy *phy);
+int generic_phy_power_off(struct generic_phy *phy);
+
+struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string);
+
+#endif /*__GENERIC_PHY_H */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (2 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus" Jean-Jacques Hiblot
                   ` (5 subsequent siblings)
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

This phy is found on omap platforms with sata capabilities.
Except for the part related to the DM and the PHY framework, the code is
basically a copy paste from arch/arm/mach-omap2/pipe3-phy.c

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 drivers/phy/Kconfig        |  12 ++
 drivers/phy/Makefile       |   1 +
 drivers/phy/ti-pipe3-phy.c | 368 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 381 insertions(+)
 create mode 100644 drivers/phy/ti-pipe3-phy.c

diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index b6fed9e..6a48343 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -19,4 +19,16 @@ config SPL_GENERIC_PHY
 	  This framework is designed to provide a generic interface for PHY
 	  devices.
 
+config PIPE3_PHY
+	bool "Support omap's PIPE3 PHY"
+	depends on GENERIC_PHY
+	help
+	  Support for the omap PIPE3 phy for sata
+
+config SPL_PIPE3_PHY
+	bool "Support omap's PIPE3 PHY in SPL"
+	depends on SPL_GENERIC_PHY
+	help
+	  Support for the omap PIPE3 phy for sata in SPL
+
 endmenu
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index ccd15ed..60c8a56 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -1,4 +1,5 @@
 obj-$(CONFIG_$(SPL_)GENERIC_PHY) += phy-uclass.o
+obj-$(CONFIG_$(SPL_)PIPE3_PHY) += ti-pipe3-phy.o
 
 ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),)
 obj-y += marvell/
diff --git a/drivers/phy/ti-pipe3-phy.c b/drivers/phy/ti-pipe3-phy.c
new file mode 100644
index 0000000..94942d3
--- /dev/null
+++ b/drivers/phy/ti-pipe3-phy.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/device.h>
+#include <generic-phy.h>
+#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <syscon.h>
+#include <regmap.h>
+
+/* PLLCTRL Registers */
+#define PLL_STATUS              0x00000004
+#define PLL_GO                  0x00000008
+#define PLL_CONFIGURATION1      0x0000000C
+#define PLL_CONFIGURATION2      0x00000010
+#define PLL_CONFIGURATION3      0x00000014
+#define PLL_CONFIGURATION4      0x00000020
+
+#define PLL_REGM_MASK           0x001FFE00
+#define PLL_REGM_SHIFT          9
+#define PLL_REGM_F_MASK         0x0003FFFF
+#define PLL_REGM_F_SHIFT        0
+#define PLL_REGN_MASK           0x000001FE
+#define PLL_REGN_SHIFT          1
+#define PLL_SELFREQDCO_MASK     0x0000000E
+#define PLL_SELFREQDCO_SHIFT    1
+#define PLL_SD_MASK             0x0003FC00
+#define PLL_SD_SHIFT            10
+#define SET_PLL_GO              0x1
+#define PLL_TICOPWDN            BIT(16)
+#define PLL_LDOPWDN             BIT(15)
+#define PLL_LOCK                0x2
+#define PLL_IDLE                0x1
+
+/* Software rest for the SATA PLL (in CTRL_CORE_SMA_SW_0 register)*/
+#define SATA_PLL_SOFT_RESET (1<<18)
+
+/* PHY POWER CONTROL Register */
+#define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_MASK         0x003FC000
+#define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT        0xE
+
+#define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_MASK        0xFFC00000
+#define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_SHIFT       0x16
+
+#define OMAP_CTRL_PIPE3_PHY_TX_RX_POWERON       0x3
+#define OMAP_CTRL_PIPE3_PHY_TX_RX_POWEROFF      0x0
+
+
+#define PLL_IDLE_TIME   100     /* in milliseconds */
+#define PLL_LOCK_TIME   100     /* in milliseconds */
+
+struct omap_pipe3 {
+	void __iomem		*pll_ctrl_base;
+	void __iomem		*power_reg;
+	void __iomem		*pll_reset_reg;
+	struct pipe3_dpll_map	*dpll_map;
+};
+
+
+struct pipe3_dpll_params {
+	u16     m;
+	u8      n;
+	u8      freq:3;
+	u8      sd;
+	u32     mf;
+};
+
+struct pipe3_dpll_map {
+	unsigned long rate;
+	struct pipe3_dpll_params params;
+};
+
+static inline u32 omap_pipe3_readl(void __iomem *addr, unsigned offset)
+{
+	return readl(addr + offset);
+}
+
+static inline void omap_pipe3_writel(void __iomem *addr, unsigned offset,
+		u32 data)
+{
+	writel(data, addr + offset);
+}
+
+static struct pipe3_dpll_params *omap_pipe3_get_dpll_params(struct omap_pipe3
+									*pipe3)
+{
+	u32 rate;
+	struct pipe3_dpll_map *dpll_map = pipe3->dpll_map;
+
+	rate = get_sys_clk_freq();
+
+	for (; dpll_map->rate; dpll_map++) {
+		if (rate == dpll_map->rate)
+			return &dpll_map->params;
+	}
+
+	printf("%s: No DPLL configuration for %u Hz SYS CLK\n",
+	       __func__, rate);
+	return NULL;
+}
+
+static int omap_pipe3_wait_lock(struct omap_pipe3 *pipe3)
+{
+	u32 val;
+	int timeout = PLL_LOCK_TIME;
+
+	do {
+		mdelay(1);
+		val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_STATUS);
+		if (val & PLL_LOCK)
+			break;
+	} while (--timeout);
+
+	if (!(val & PLL_LOCK)) {
+		printf("%s: DPLL failed to lock\n", __func__);
+		return -EBUSY;
+	}
+
+	return 0;
+}
+
+static int omap_pipe3_dpll_program(struct omap_pipe3 *pipe3)
+{
+	u32                     val;
+	struct pipe3_dpll_params *dpll_params;
+
+	dpll_params = omap_pipe3_get_dpll_params(pipe3);
+	if (!dpll_params) {
+		printf("%s: Invalid DPLL parameters\n", __func__);
+		return -EINVAL;
+	}
+
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION1);
+	val &= ~PLL_REGN_MASK;
+	val |= dpll_params->n << PLL_REGN_SHIFT;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION1, val);
+
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION2);
+	val &= ~PLL_SELFREQDCO_MASK;
+	val |= dpll_params->freq << PLL_SELFREQDCO_SHIFT;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION2, val);
+
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION1);
+	val &= ~PLL_REGM_MASK;
+	val |= dpll_params->m << PLL_REGM_SHIFT;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION1, val);
+
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION4);
+	val &= ~PLL_REGM_F_MASK;
+	val |= dpll_params->mf << PLL_REGM_F_SHIFT;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION4, val);
+
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION3);
+	val &= ~PLL_SD_MASK;
+	val |= dpll_params->sd << PLL_SD_SHIFT;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION3, val);
+
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_GO, SET_PLL_GO);
+
+	return omap_pipe3_wait_lock(pipe3);
+}
+
+static void omap_control_pipe3_power(struct omap_pipe3 *pipe3, int on)
+{
+	u32 val, rate;
+
+	val = readl(pipe3->power_reg);
+
+	rate = get_sys_clk_freq();
+	rate = rate/1000000;
+
+	if (on) {
+		val &= ~(OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_MASK |
+				OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_MASK);
+		val |= OMAP_CTRL_PIPE3_PHY_TX_RX_POWERON <<
+			OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT;
+		val |= rate <<
+			OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_SHIFT;
+	} else {
+		val &= ~OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_MASK;
+		val |= OMAP_CTRL_PIPE3_PHY_TX_RX_POWEROFF <<
+			OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT;
+	}
+
+	writel(val, pipe3->power_reg);
+}
+
+static int pipe3_power_on(struct udevice *dev)
+{
+	int ret;
+	u32 val;
+	struct omap_pipe3 *pipe3 = dev_get_priv(dev);
+
+	/* Program the DPLL only if not locked */
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_STATUS);
+	if (!(val & PLL_LOCK)) {
+		ret = omap_pipe3_dpll_program(pipe3);
+		if (ret)
+			return ret;
+	} else {
+		/* else just bring it out of IDLE mode */
+		val = omap_pipe3_readl(pipe3->pll_ctrl_base,
+				       PLL_CONFIGURATION2);
+		if (val & PLL_IDLE) {
+			val &= ~PLL_IDLE;
+			omap_pipe3_writel(pipe3->pll_ctrl_base,
+					  PLL_CONFIGURATION2, val);
+			ret = omap_pipe3_wait_lock(pipe3);
+			if (ret)
+				return ret;
+		}
+	}
+
+	/* Power up the PHY */
+	omap_control_pipe3_power(pipe3, 1);
+
+	return 0;
+}
+
+static int pipe3_power_off(struct udevice *dev)
+{
+	u32 val;
+	int timeout = PLL_IDLE_TIME;
+	struct omap_pipe3 *pipe3 = dev_get_priv(dev);
+
+	/* Power down the PHY */
+	omap_control_pipe3_power(pipe3, 0);
+
+	/* Put DPLL in IDLE mode */
+	val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION2);
+	val |= PLL_IDLE;
+	omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION2, val);
+
+	/* wait for LDO and Oscillator to power down */
+	do {
+		mdelay(1);
+		val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_STATUS);
+		if ((val & PLL_TICOPWDN) && (val & PLL_LDOPWDN))
+			break;
+	} while (--timeout);
+
+	if (!(val & PLL_TICOPWDN) || !(val & PLL_LDOPWDN)) {
+		printf("%s: Failed to power down DPLL: PLL_STATUS 0x%x\n",
+		       __func__, val);
+		return -EBUSY;
+	}
+
+	return 0;
+}
+
+static int pipe3_reset(struct udevice *dev)
+{
+	u32 val;
+	struct omap_pipe3 *pipe3 = dev_get_priv(dev);
+
+	val = readl(pipe3->pll_reset_reg);
+	writel(val | SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
+	mdelay(1);
+	writel(val & ~SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
+	return 0;
+}
+
+static void *get_reg(struct udevice *dev, const char *name)
+{
+	struct udevice *syscon;
+	struct regmap *regmap;
+	const fdt32_t *cell;
+	int len, err;
+	void *base;
+
+	err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
+					   name, &syscon);
+	if (err) {
+		error("unable to find syscon device for %s (%d)\n",
+		      name, err);
+		return NULL;
+	}
+
+	regmap = syscon_get_regmap(syscon);
+	if (IS_ERR(regmap)) {
+		error("unable to find regmap for %s (%ld)\n",
+		      name, PTR_ERR(regmap));
+		return NULL;
+	}
+
+	cell = fdt_getprop(gd->fdt_blob, dev->of_offset, name,
+			   &len);
+	if (len < 2*sizeof(fdt32_t)) {
+		error("offset not available for %s\n", name);
+		return NULL;
+	}
+
+	base = regmap_get_range(regmap, 0);
+	if (!base)
+		return NULL;
+
+	return fdtdec_get_number(cell + 1, 1) + base;
+}
+
+static int pipe3_phy_probe(struct udevice *dev)
+{
+	fdt_addr_t addr;
+	fdt_size_t sz;
+	struct omap_pipe3 *pipe3 = dev_get_priv(dev);
+
+	addr = dev_get_addr_size_index(dev, 2, &sz);
+	if (addr == FDT_ADDR_T_NONE) {
+		error("missing pll ctrl address\n");
+		return -EINVAL;
+	}
+
+	pipe3->pll_ctrl_base = map_physmem(addr, sz, MAP_NOCACHE);
+	if (!pipe3->pll_ctrl_base) {
+		error("unable to remap pll ctrl\n");
+		return -EINVAL;
+	}
+
+	pipe3->power_reg = get_reg(dev, "syscon-phy-power");
+	if (!pipe3->power_reg)
+		return -EINVAL;
+
+	pipe3->pll_reset_reg = get_reg(dev, "syscon-pllreset");
+	if (!pipe3->pll_reset_reg)
+		return -EINVAL;
+
+	pipe3->dpll_map = (struct pipe3_dpll_map *)dev_get_driver_data(dev);
+
+	return 0;
+}
+
+static struct pipe3_dpll_map dpll_map_sata[] = {
+	{12000000, {1000, 7, 4, 6, 0} },        /* 12 MHz */
+	{16800000, {714, 7, 4, 6, 0} },         /* 16.8 MHz */
+	{19200000, {625, 7, 4, 6, 0} },         /* 19.2 MHz */
+	{20000000, {600, 7, 4, 6, 0} },         /* 20 MHz */
+	{26000000, {461, 7, 4, 6, 0} },         /* 26 MHz */
+	{38400000, {312, 7, 4, 6, 0} },         /* 38.4 MHz */
+	{ },                                    /* Terminator */
+};
+
+static const struct udevice_id pipe3_phy_ids[] = {
+	{ .compatible = "ti,phy-pipe3-sata", .data = (ulong)&dpll_map_sata },
+	{ }
+};
+
+
+static struct generic_phy_ops pipe3_phy_ops = {
+	.power_on = pipe3_power_on,
+	.power_off = pipe3_power_off,
+	.reset = pipe3_reset
+};
+
+U_BOOT_DRIVER(pipe3_phy) = {
+	.name	= "pipe3_phy",
+	.id	= UCLASS_PHY,
+	.of_match = pipe3_phy_ids,
+	.ops = &pipe3_phy_ops,
+	.probe = pipe3_phy_probe,
+	.priv_auto_alloc_size = sizeof(struct omap_pipe3),
+};
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus"
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (3 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device Jean-Jacques Hiblot
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

This is needed to probe devices under that bus such as the SATA PHY.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 arch/arm/dts/dra7.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/dts/dra7.dtsi b/arch/arm/dts/dra7.dtsi
index 5570e30..6978359 100644
--- a/arch/arm/dts/dra7.dtsi
+++ b/arch/arm/dts/dra7.dtsi
@@ -1317,7 +1317,7 @@
 
 		/* OCP2SCP3 */
 		ocp2scp at 4a090000 {
-			compatible = "ti,omap-ocp2scp";
+			compatible = "ti,omap-ocp2scp", "simple-bus";
 			#address-cells = <1>;
 			#size-cells = <1>;
 			ranges;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (4 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus" Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev() Jean-Jacques Hiblot
                   ` (3 subsequent siblings)
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

From: Mugunthan V N <mugunthanvnm@ti.com>

Implement a sata driver for Synopsys DWC sata device based on
U-boot driver model.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 drivers/block/Kconfig    |  10 +++++
 drivers/block/Makefile   |   1 +
 drivers/block/dwc_ahci.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 111 insertions(+)
 create mode 100644 drivers/block/dwc_ahci.c

diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index 88e66e2..b3d35bd 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -48,4 +48,14 @@ config SATA_CEVA
 	  ZynqMP. Support up to 2 external devices. Complient with SATA 3.1 and
 	  AHCI 1.3 specifications with hot-plug detect feature.
 
+
+config DWC_AHCI
+	bool "Enable Synopsys DWC AHCI driver support"
+	select SCSI_AHCI
+	select GENERIC_PHY
+	depends on DM_SCSI
+	help
+	  Enable this driver to support Sata devices through
+	  Synopsys DWC AHCI module.
+
 endmenu
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index a72feec..cffe498 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -11,6 +11,7 @@ ifndef CONFIG_BLK
 obj-y += blk_legacy.o
 endif
 
+obj-$(CONFIG_DWC_AHCI) += dwc_ahci.o
 obj-$(CONFIG_AHCI) += ahci-uclass.o
 obj-$(CONFIG_DM_SCSI) += scsi-uclass.o
 obj-$(CONFIG_SCSI_AHCI) += ahci.o
diff --git a/drivers/block/dwc_ahci.c b/drivers/block/dwc_ahci.c
new file mode 100644
index 0000000..bf44946
--- /dev/null
+++ b/drivers/block/dwc_ahci.c
@@ -0,0 +1,100 @@
+/*
+ * DWC SATA platform driver
+ *
+ * (C) Copyright 2016
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * Author: Mugunthan V N <mugunthanvnm@ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <ahci.h>
+#include <scsi.h>
+#include <sata.h>
+#include <asm/arch/sata.h>
+#include <asm/io.h>
+#include <generic-phy.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct dwc_ahci_priv {
+	void *base;
+	void *wrapper_base;
+};
+
+static int dwc_ahci_ofdata_to_platdata(struct udevice *dev)
+{
+	struct dwc_ahci_priv *priv = dev_get_priv(dev);
+	struct scsi_platdata *plat = dev_get_platdata(dev);
+	fdt_addr_t addr;
+
+	plat->max_id = fdtdec_get_uint(gd->fdt_blob, dev->of_offset, "max-id",
+				       CONFIG_SYS_SCSI_MAX_SCSI_ID);
+	plat->max_lun = fdtdec_get_uint(gd->fdt_blob, dev->of_offset,
+					"max-lun", CONFIG_SYS_SCSI_MAX_LUN);
+
+	priv->base = map_physmem(dev_get_addr(dev), sizeof(void *),
+				 MAP_NOCACHE);
+
+	addr = dev_get_addr_index(dev, 1);
+	if (addr != FDT_ADDR_T_NONE) {
+		priv->wrapper_base = map_physmem(addr, sizeof(void *),
+						 MAP_NOCACHE);
+	} else {
+		priv->wrapper_base = NULL;
+	}
+
+	return 0;
+}
+
+static int dwc_ahci_probe(struct udevice *dev)
+{
+	struct dwc_ahci_priv *priv = dev_get_priv(dev);
+	int ret;
+	struct generic_phy *phy = dm_generic_phy_get(dev, "phys");
+
+	if (IS_ERR(phy)) {
+		error("can't get the phy from DT\n");
+		return PTR_ERR(phy);
+	}
+
+	ret = generic_phy_init(phy);
+	if (ret) {
+		error("unable to initialize the sata phy\n");
+		return ret;
+	}
+
+	ret = generic_phy_power_on(phy);
+	if (ret) {
+		error("unable to power on the sata phy\n");
+		return ret;
+	}
+
+	if (priv->wrapper_base) {
+		u32 val = TI_SATA_IDLE_NO | TI_SATA_STANDBY_NO;
+
+		/* Enable SATA module, No Idle, No Standby */
+		writel(val, priv->wrapper_base + TI_SATA_SYSCONFIG);
+	}
+
+	return ahci_init(priv->base);
+}
+
+static const struct udevice_id dwc_ahci_ids[] = {
+	{ .compatible = "snps,dwc-ahci" },
+	{ }
+};
+
+U_BOOT_DRIVER(dwc_ahci) = {
+	.name	= "dwc_ahci",
+	.id	= UCLASS_SCSI,
+	.of_match = dwc_ahci_ids,
+	.ofdata_to_platdata = dwc_ahci_ofdata_to_platdata,
+	.probe	= dwc_ahci_probe,
+	.priv_auto_alloc_size = sizeof(struct dwc_ahci_priv),
+	.platdata_auto_alloc_size = sizeof(struct scsi_platdata),
+	.flags = DM_FLAG_ALLOC_PRIV_DMA,
+};
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev()
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (5 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection Jean-Jacques Hiblot
                   ` (2 subsequent siblings)
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

This is a cosmetic change. target and LUN have kind of the same role in
this function. One of them was passed as a parameter and the other was
embedded in a structure. For consistency, pass both of them as parameters.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 common/scsi.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/common/scsi.c b/common/scsi.c
index fb5b407..d55ba89 100644
--- a/common/scsi.c
+++ b/common/scsi.c
@@ -473,14 +473,15 @@ static void scsi_init_dev_desc(struct blk_desc *dev_desc, int devnum)
  * scsi_detect_dev - Detect scsi device
  *
  * @target: target id
+ * @lun: target lun
  * @dev_desc: block device description
  *
  * The scsi_detect_dev detects and fills a dev_desc structure when the device is
- * detected. The LUN number is taken from the struct blk_desc *dev_desc.
+ * detected.
  *
  * Return: 0 on success, error value otherwise
  */
-static int scsi_detect_dev(int target, struct blk_desc *dev_desc)
+static int scsi_detect_dev(int target, int lun, struct blk_desc *dev_desc)
 {
 	unsigned char perq, modi;
 	lbaint_t capacity;
@@ -488,7 +489,7 @@ static int scsi_detect_dev(int target, struct blk_desc *dev_desc)
 	ccb *pccb = (ccb *)&tempccb;
 
 	pccb->target = target;
-	pccb->lun = dev_desc->lun;
+	pccb->lun = lun;
 	pccb->pdata = (unsigned char *)&tempbuff;
 	pccb->datalen = 512;
 	scsi_setup_inquiry(pccb);
@@ -599,8 +600,7 @@ int scsi_scan(int mode)
 				bdesc = dev_get_uclass_platdata(bdev);
 
 				scsi_init_dev_desc_priv(bdesc);
-				bdesc->lun = lun;
-				ret = scsi_detect_dev(i, bdesc);
+				ret = scsi_detect_dev(i, lun, bdesc);
 				if (ret) {
 					device_unbind(bdev);
 					continue;
@@ -630,8 +630,8 @@ int scsi_scan(int mode)
 	scsi_max_devs = 0;
 	for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
 		for (lun = 0; lun < CONFIG_SYS_SCSI_MAX_LUN; lun++) {
-			scsi_dev_desc[scsi_max_devs].lun = lun;
-			ret = scsi_detect_dev(i, &scsi_dev_desc[scsi_max_devs]);
+			ret = scsi_detect_dev(i, lun,
+					      &scsi_dev_desc[scsi_max_devs]);
 			if (ret)
 				continue;
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (6 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev() Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan() Jean-Jacques Hiblot
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI Jean-Jacques Hiblot
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

We might want to get information about the scsi device without initializing the partition.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 common/scsi.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/common/scsi.c b/common/scsi.c
index d55ba89..972ef338 100644
--- a/common/scsi.c
+++ b/common/scsi.c
@@ -540,7 +540,6 @@ static int scsi_detect_dev(int target, int lun, struct blk_desc *dev_desc)
 	dev_desc->blksz = blksz;
 	dev_desc->log2blksz = LOG2(dev_desc->blksz);
 	dev_desc->type = perq;
-	part_init(&dev_desc[0]);
 removable:
 	return 0;
 }
@@ -605,6 +604,7 @@ int scsi_scan(int mode)
 					device_unbind(bdev);
 					continue;
 				}
+				part_init(bdesc);
 
 				if (mode == 1) {
 					printf("  Device %d: ", 0);
@@ -634,6 +634,7 @@ int scsi_scan(int mode)
 					      &scsi_dev_desc[scsi_max_devs]);
 			if (ret)
 				continue;
+			part_init(&scsi_dev_desc[scsi_max_devs]);
 
 			if (mode == 1) {
 				printf("  Device %d: ", 0);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan()
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (7 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI Jean-Jacques Hiblot
  9 siblings, 2 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

With DM_SCSI enabled, blk_create_devicef() is called with blkz = 0, leading
to a divide-by-0 exception.
scsi_detect_dev() can be used to get the required parameters (block size
and number of blocks) from the drive before calling blk_create_devicef().

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 common/scsi.c | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/common/scsi.c b/common/scsi.c
index 972ef338..d37222c 100644
--- a/common/scsi.c
+++ b/common/scsi.c
@@ -580,9 +580,19 @@ int scsi_scan(int mode)
 			for (lun = 0; lun < plat->max_lun; lun++) {
 				struct udevice *bdev; /* block device */
 				/* block device description */
+				struct blk_desc _bd;
 				struct blk_desc *bdesc;
 				char str[10];
 
+				scsi_init_dev_desc_priv(&_bd);
+				ret = scsi_detect_dev(i, lun, &_bd);
+				if (ret)
+					/*
+					 * no device detected?
+					 * check the next lun.
+					 */
+					continue;
+
 				/*
 				 * Create only one block device and do detection
 				 * to make sure that there won't be a lot of
@@ -590,20 +600,27 @@ int scsi_scan(int mode)
 				 */
 				snprintf(str, sizeof(str), "id%dlun%d", i, lun);
 				ret = blk_create_devicef(dev, "scsi_blk",
-							  str, IF_TYPE_SCSI,
-							  -1, 0, 0, &bdev);
+						str, IF_TYPE_SCSI,
+						-1,
+						_bd.blksz,
+						_bd.blksz * _bd.lba,
+						&bdev);
 				if (ret) {
 					debug("Can't create device\n");
 					return ret;
 				}
-				bdesc = dev_get_uclass_platdata(bdev);
 
-				scsi_init_dev_desc_priv(bdesc);
-				ret = scsi_detect_dev(i, lun, bdesc);
-				if (ret) {
-					device_unbind(bdev);
-					continue;
-				}
+				bdesc = dev_get_uclass_platdata(bdev);
+				bdesc->target = i;
+				bdesc->lun = lun;
+				bdesc->removable = _bd.removable;
+				bdesc->type = _bd.type;
+				memcpy(&bdesc->vendor, &_bd.vendor,
+				       sizeof(_bd.vendor));
+				memcpy(&bdesc->product, &_bd.product,
+				       sizeof(_bd.product));
+				memcpy(&bdesc->revision, &_bd.revision,
+				       sizeof(_bd.revision));
 				part_init(bdesc);
 
 				if (mode == 1) {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI
  2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
                   ` (8 preceding siblings ...)
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan() Jean-Jacques Hiblot
@ 2017-04-07 11:42 ` Jean-Jacques Hiblot
  2017-04-09  1:14   ` Tom Rini
  9 siblings, 1 reply; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-07 11:42 UTC (permalink / raw)
  To: u-boot

Enable disk driver model for dra7xx_evm as dwc_ahci supports
driver model. As a consequence we must also enable CONFIG_BLK and
CONFIG_DM_USB.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 configs/dra7xx_evm_defconfig    | 12 +++++++++++-
 configs/dra7xx_hs_evm_defconfig | 11 ++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig
index 42f87b3..8bc395f 100644
--- a/configs/dra7xx_evm_defconfig
+++ b/configs/dra7xx_evm_defconfig
@@ -59,7 +59,13 @@ CONFIG_SPL_OF_CONTROL=y
 CONFIG_OF_LIST="dra7-evm dra72-evm dra72-evm-revc dra71-evm"
 CONFIG_DM=y
 CONFIG_SPL_DM=y
-# CONFIG_BLK is not set
+CONFIG_REGMAP=y
+CONFIG_SPL_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_SPL_SYSCON=y
+CONFIG_BLK=y
+CONFIG_DM_SCSI=y
+CONFIG_DWC_AHCI=y
 CONFIG_DFU_MMC=y
 CONFIG_DFU_RAM=y
 CONFIG_DFU_SF=y
@@ -89,6 +95,7 @@ CONFIG_TI_QSPI=y
 CONFIG_TIMER=y
 CONFIG_OMAP_TIMER=y
 CONFIG_USB=y
+CONFIG_DM_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
@@ -101,3 +108,6 @@ CONFIG_USB_GADGET_DOWNLOAD=y
 CONFIG_G_DNL_MANUFACTURER="Texas Instruments"
 CONFIG_G_DNL_VENDOR_NUM=0x0451
 CONFIG_G_DNL_PRODUCT_NUM=0xd022
+CONFIG_SPL_GENERIC_PHY=y
+CONFIG_PIPE3_PHY=y
+CONFIG_SPL_PIPE3_PHY=y
diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig
index f3a9c68..dce3da2 100644
--- a/configs/dra7xx_hs_evm_defconfig
+++ b/configs/dra7xx_hs_evm_defconfig
@@ -63,7 +63,12 @@ CONFIG_SPL_OF_CONTROL=y
 CONFIG_OF_LIST="dra7-evm dra72-evm dra72-evm-revc dra71-evm"
 CONFIG_DM=y
 CONFIG_SPL_DM=y
-# CONFIG_BLK is not set
+CONFIG_REGMAP=y
+CONFIG_SPL_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_SPL_SYSCON=y
+CONFIG_DM_SCSI=y
+CONFIG_DWC_AHCI=y
 CONFIG_DFU_MMC=y
 CONFIG_DFU_RAM=y
 CONFIG_DFU_SF=y
@@ -93,6 +98,7 @@ CONFIG_TI_QSPI=y
 CONFIG_TIMER=y
 CONFIG_OMAP_TIMER=y
 CONFIG_USB=y
+CONFIG_DM_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
@@ -105,3 +111,6 @@ CONFIG_USB_GADGET_DOWNLOAD=y
 CONFIG_G_DNL_MANUFACTURER="Texas Instruments"
 CONFIG_G_DNL_VENDOR_NUM=0x0451
 CONFIG_G_DNL_PRODUCT_NUM=0xd022
+CONFIG_SPL_GENERIC_PHY=y
+CONFIG_PIPE3_PHY=y
+CONFIG_SPL_PIPE3_PHY=y
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-15 16:07     ` Simon Glass
  0 siblings, 1 reply; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:01PM +0200, Jean-Jacques Hiblot wrote:

> When CONFIG_DM_SCSI is defined, the SATA initialization will be implemented
> in the scsi-uclass driver.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/7f648da8/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:02PM +0200, Jean-Jacques Hiblot wrote:

> The PHY framework provides a set of APIs to control a PHY. This API is
> derived from the linux version of the generic PHY framework.
> Currently the API supports init(), deinit(), power_on, power_off() and
> reset(). The framework provides a way to get a reference to a phy from the
> device-tree.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/fac48bde/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:03PM +0200, Jean-Jacques Hiblot wrote:

> This phy is found on omap platforms with sata capabilities.
> Except for the part related to the DM and the PHY framework, the code is
> basically a copy paste from arch/arm/mach-omap2/pipe3-phy.c
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/6f3f03ac/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus"
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus" Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-13 14:18     ` Jean-Jacques Hiblot
  0 siblings, 1 reply; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:04PM +0200, Jean-Jacques Hiblot wrote:

> This is needed to probe devices under that bus such as the SATA PHY.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  arch/arm/dts/dra7.dtsi | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/dts/dra7.dtsi b/arch/arm/dts/dra7.dtsi
> index 5570e30..6978359 100644
> --- a/arch/arm/dts/dra7.dtsi
> +++ b/arch/arm/dts/dra7.dtsi
> @@ -1317,7 +1317,7 @@
>  
>  		/* OCP2SCP3 */
>  		ocp2scp at 4a090000 {
> -			compatible = "ti,omap-ocp2scp";
> +			compatible = "ti,omap-ocp2scp", "simple-bus";
>  			#address-cells = <1>;
>  			#size-cells = <1>;
>  			ranges;

This is U-Boot specific I assume?  It should end up in a -u-boot.dtsi
file instead so we don't overwrite it later.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/d5f45455/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:05PM +0200, Jean-Jacques Hiblot wrote:

> From: Mugunthan V N <mugunthanvnm@ti.com>
> 
> Implement a sata driver for Synopsys DWC sata device based on
> U-boot driver model.
> 
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/a899f810/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev()
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev() Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:06PM +0200, Jean-Jacques Hiblot wrote:

> This is a cosmetic change. target and LUN have kind of the same role in
> this function. One of them was passed as a parameter and the other was
> embedded in a structure. For consistency, pass both of them as parameters.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/6a2b1fd6/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:07PM +0200, Jean-Jacques Hiblot wrote:

> We might want to get information about the scsi device without initializing the partition.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/c38cab28/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan()
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan() Jean-Jacques Hiblot
@ 2017-04-09  1:13   ` Tom Rini
  2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:13 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:08PM +0200, Jean-Jacques Hiblot wrote:

> With DM_SCSI enabled, blk_create_devicef() is called with blkz = 0, leading
> to a divide-by-0 exception.
> scsi_detect_dev() can be used to get the required parameters (block size
> and number of blocks) from the drive before calling blk_create_devicef().
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/948634dd/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI Jean-Jacques Hiblot
@ 2017-04-09  1:14   ` Tom Rini
  0 siblings, 0 replies; 35+ messages in thread
From: Tom Rini @ 2017-04-09  1:14 UTC (permalink / raw)
  To: u-boot

On Fri, Apr 07, 2017 at 01:42:09PM +0200, Jean-Jacques Hiblot wrote:

> Enable disk driver model for dra7xx_evm as dwc_ahci supports
> driver model. As a consequence we must also enable CONFIG_BLK and
> CONFIG_DM_USB.
> 
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170408/4abc0f20/attachment.sig>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  2017-04-13 14:17     ` Jean-Jacques Hiblot
  1 sibling, 1 reply; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

Hi,

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> The PHY framework provides a set of APIs to control a PHY. This API is
> derived from the linux version of the generic PHY framework.
> Currently the API supports init(), deinit(), power_on, power_off() and
> reset(). The framework provides a way to get a reference to a phy from the
> device-tree.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  Makefile                 |  1 +
>  drivers/Kconfig          |  2 ++
>  drivers/Makefile         |  1 +
>  drivers/phy/Kconfig      | 22 ++++++++++++++
>  drivers/phy/Makefile     |  5 ++++
>  drivers/phy/phy-uclass.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
>  include/dm/uclass-id.h   |  1 +
>  include/generic-phy.h    | 38 ++++++++++++++++++++++++
>  8 files changed, 147 insertions(+)
>  create mode 100644 drivers/phy/Kconfig
>  create mode 100644 drivers/phy/Makefile
>  create mode 100644 drivers/phy/phy-uclass.c
>  create mode 100644 include/generic-phy.h

Can you please create a sandbox driver and a test?

>
> diff --git a/Makefile b/Makefile
> index 2638acf..06454ce 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -650,6 +650,7 @@ libs-y += fs/
>  libs-y += net/
>  libs-y += disk/
>  libs-y += drivers/
> +libs-y += drivers/phy/

Could this go in drivers/Makefile?

>  libs-y += drivers/dma/
>  libs-y += drivers/gpio/
>  libs-y += drivers/i2c/
> diff --git a/drivers/Kconfig b/drivers/Kconfig
> index 0e5d97d..a90ceca 100644
> --- a/drivers/Kconfig
> +++ b/drivers/Kconfig
> @@ -88,6 +88,8 @@ source "drivers/video/Kconfig"
>
>  source "drivers/watchdog/Kconfig"
>
> +source "drivers/phy/Kconfig"
> +
>  config PHYS_TO_BUS
>         bool "Custom physical to bus address mapping"
>         help
> diff --git a/drivers/Makefile b/drivers/Makefile
> index 5d8baa5..4656509 100644
> --- a/drivers/Makefile
> +++ b/drivers/Makefile
> @@ -47,6 +47,7 @@ obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
>  obj-$(CONFIG_SPL_SATA_SUPPORT) += block/
>  obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
>  obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
> +obj-$(CONFIG_SPL_GENERIC_PHY) += phy/
>  endif
>
>  ifdef CONFIG_TPL_BUILD
> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
> new file mode 100644
> index 0000000..b6fed9e
> --- /dev/null
> +++ b/drivers/phy/Kconfig
> @@ -0,0 +1,22 @@
> +
> +menu "PHY Subsystem"
> +
> +config GENERIC_PHY

Just a question: do you think we need the word GENERIC in this config?
I'm OK with it, but wonder if CONFIG_PHY would be enough?

> +       bool "PHY Core"
> +       depends on DM
> +       help
> +         Generic PHY support.
> +
> +         This framework is designed to provide a generic interface for PHY
> +         devices.

Could you given a few examples of PHY devices and the types of
operations you can perform on them.

> +
> +config SPL_GENERIC_PHY
> +       bool "PHY Core in SPL"
> +       depends on DM
> +       help
> +         Generic PHY support in SPL.
> +
> +         This framework is designed to provide a generic interface for PHY
> +         devices.
> +
> +endmenu
> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
> new file mode 100644
> index 0000000..ccd15ed
> --- /dev/null
> +++ b/drivers/phy/Makefile
> @@ -0,0 +1,5 @@
> +obj-$(CONFIG_$(SPL_)GENERIC_PHY) += phy-uclass.o
> +
> +ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),)
> +obj-y += marvell/
> +endif
> diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c
> new file mode 100644
> index 0000000..4d1584d
> --- /dev/null
> +++ b/drivers/phy/phy-uclass.c
> @@ -0,0 +1,77 @@
> +/*
> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> + * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.

SPDX?

> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <generic-phy.h>
> +
> +#define get_ops(dev)        ((struct generic_phy_ops *)(dev)->driver->ops)
> +
> +#define generic_phy_to_dev(x) ((struct udevice *)(x))
> +#define dev_to_generic_phy(x) ((struct generic_phy *)(x))
> +
> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string)
> +{
> +       struct udevice *generic_phy_dev;

dev is a shorter name :-)

> +
> +       int rc = uclass_get_device_by_phandle(UCLASS_PHY, dev,
> +                                          string, &generic_phy_dev);
> +       if (rc) {
> +               error("unable to find generic_phy device %d\n", rc);
> +               return ERR_PTR(rc);
> +       }
> +       return dev_to_generic_phy(generic_phy_dev);
> +}
> +
> +int generic_phy_init(struct generic_phy *generic_phy)
> +{
> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
> +       struct generic_phy_ops *ops = get_ops(dev);
> +
> +       return (ops && ops->init) ? ops->init(dev) : 0;
> +}
> +
> +int generic_phy_reset(struct generic_phy *generic_phy)
> +{
> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
> +       struct generic_phy_ops *ops = get_ops(dev);
> +
> +       return (ops && ops->reset) ? ops->reset(dev) : 0;
> +}
> +
> +int generic_phy_exit(struct generic_phy *generic_phy)
> +{
> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
> +       struct generic_phy_ops *ops = get_ops(dev);
> +
> +       return (ops && ops->exit) ? ops->exit(dev) : 0;
> +}
> +
> +int generic_phy_power_on(struct generic_phy *generic_phy)
> +{
> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
> +       struct generic_phy_ops *ops = get_ops(dev);
> +
> +       return (ops && ops->power_on) ? ops->power_on(dev) : 0;
> +}
> +
> +int generic_phy_power_off(struct generic_phy *generic_phy)
> +{
> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
> +       struct generic_phy_ops *ops = get_ops(dev);
> +
> +       return (ops && ops->power_off) ? ops->power_off(dev) : 0;
> +}
> +

Drop 2 extra blank ilnes

> +
> +
> +UCLASS_DRIVER(simple_generic_phy) = {

remove the word 'simple' ?

> +       .id             = UCLASS_PHY,
> +       .name           = "generic_phy",
> +};
> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
> index 8c92d0b..9d34a32 100644
> --- a/include/dm/uclass-id.h
> +++ b/include/dm/uclass-id.h
> @@ -83,6 +83,7 @@ enum uclass_id {
>         UCLASS_VIDEO,           /* Video or LCD device */
>         UCLASS_VIDEO_BRIDGE,    /* Video bridge, e.g. DisplayPort to LVDS */
>         UCLASS_VIDEO_CONSOLE,   /* Text console driver for video device */
> +       UCLASS_PHY,             /* generic PHY device */
>
>         UCLASS_COUNT,
>         UCLASS_INVALID = -1,
> diff --git a/include/generic-phy.h b/include/generic-phy.h
> new file mode 100644
> index 0000000..f02e9ce
> --- /dev/null
> +++ b/include/generic-phy.h
> @@ -0,0 +1,38 @@
> +/*
> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> + * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef __GENERIC_PHY_H
> +#define __GENERIC_PHY_H
> +
> +struct generic_phy;
> +/*
> + * struct generic_phy_ops - set of function pointers for phy operations
> + * @init: operation to be performed for initializing phy
> + * @exit: operation to be performed while exiting
> + * @power_on: powering on the phy
> + * @power_off: powering off the phy

Need to mention that these are all optional (from what I can tell above).

> + */
> +struct generic_phy_ops {
> +       int     (*init)(struct udevice *phy);
> +       int     (*exit)(struct udevice *phy);
> +       int     (*reset)(struct udevice *phy);
> +       int     (*power_on)(struct udevice *phy);
> +       int     (*power_off)(struct udevice *phy);
> +};
> +
> +
> +int generic_phy_init(struct generic_phy *phy);

Why do these not use struct udevice?

> +int generic_phy_reset(struct generic_phy *phy);
> +int generic_phy_exit(struct generic_phy *phy);
> +int generic_phy_power_on(struct generic_phy *phy);
> +int generic_phy_power_off(struct generic_phy *phy);
> +
> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string);
> +
> +#endif /*__GENERIC_PHY_H */
> --
> 1.9.1
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> From: Mugunthan V N <mugunthanvnm@ti.com>
>
> Implement a sata driver for Synopsys DWC sata device based on
> U-boot driver model.
>
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  drivers/block/Kconfig    |  10 +++++
>  drivers/block/Makefile   |   1 +
>  drivers/block/dwc_ahci.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 111 insertions(+)
>  create mode 100644 drivers/block/dwc_ahci.c

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  1 sibling, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> This phy is found on omap platforms with sata capabilities.
> Except for the part related to the DM and the PHY framework, the code is
> basically a copy paste from arch/arm/mach-omap2/pipe3-phy.c
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  drivers/phy/Kconfig        |  12 ++
>  drivers/phy/Makefile       |   1 +
>  drivers/phy/ti-pipe3-phy.c | 368 +++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 381 insertions(+)
>  create mode 100644 drivers/phy/ti-pipe3-phy.c
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev()
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev() Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  2017-04-15 16:07     ` Simon Glass
  1 sibling, 1 reply; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> This is a cosmetic change. target and LUN have kind of the same role in
> this function. One of them was passed as a parameter and the other was
> embedded in a structure. For consistency, pass both of them as parameters.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  common/scsi.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  2017-04-15 16:07     ` Simon Glass
  1 sibling, 1 reply; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> We might want to get information about the scsi device without initializing the partition.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  common/scsi.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan()
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan() Jean-Jacques Hiblot
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-09 19:27   ` Simon Glass
  2017-04-15 16:07     ` Simon Glass
  1 sibling, 1 reply; 35+ messages in thread
From: Simon Glass @ 2017-04-09 19:27 UTC (permalink / raw)
  To: u-boot

Hi,

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> With DM_SCSI enabled, blk_create_devicef() is called with blkz = 0, leading
> to a divide-by-0 exception.
> scsi_detect_dev() can be used to get the required parameters (block size
> and number of blocks) from the drive before calling blk_create_devicef().
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
>  common/scsi.c | 35 ++++++++++++++++++++++++++---------
>  1 file changed, 26 insertions(+), 9 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Please see below.

>
> diff --git a/common/scsi.c b/common/scsi.c
> index 972ef338..d37222c 100644
> --- a/common/scsi.c
> +++ b/common/scsi.c
> @@ -580,9 +580,19 @@ int scsi_scan(int mode)
>                         for (lun = 0; lun < plat->max_lun; lun++) {
>                                 struct udevice *bdev; /* block device */
>                                 /* block device description */
> +                               struct blk_desc _bd;
>                                 struct blk_desc *bdesc;
>                                 char str[10];
>
> +                               scsi_init_dev_desc_priv(&_bd);
> +                               ret = scsi_detect_dev(i, lun, &_bd);
> +                               if (ret)
> +                                       /*
> +                                        * no device detected?
> +                                        * check the next lun.
> +                                        */
> +                                       continue;
> +
>                                 /*
>                                  * Create only one block device and do detection
>                                  * to make sure that there won't be a lot of
> @@ -590,20 +600,27 @@ int scsi_scan(int mode)
>                                  */
>                                 snprintf(str, sizeof(str), "id%dlun%d", i, lun);
>                                 ret = blk_create_devicef(dev, "scsi_blk",
> -                                                         str, IF_TYPE_SCSI,
> -                                                         -1, 0, 0, &bdev);
> +                                               str, IF_TYPE_SCSI,
> +                                               -1,
> +                                               _bd.blksz,
> +                                               _bd.blksz * _bd.lba,
> +                                               &bdev);
>                                 if (ret) {
>                                         debug("Can't create device\n");
>                                         return ret;
>                                 }
> -                               bdesc = dev_get_uclass_platdata(bdev);
>
> -                               scsi_init_dev_desc_priv(bdesc);
> -                               ret = scsi_detect_dev(i, lun, bdesc);
> -                               if (ret) {
> -                                       device_unbind(bdev);
> -                                       continue;
> -                               }
> +                               bdesc = dev_get_uclass_platdata(bdev);
> +                               bdesc->target = i;
> +                               bdesc->lun = lun;
> +                               bdesc->removable = _bd.removable;
> +                               bdesc->type = _bd.type;
> +                               memcpy(&bdesc->vendor, &_bd.vendor,
> +                                      sizeof(_bd.vendor));
> +                               memcpy(&bdesc->product, &_bd.product,
> +                                      sizeof(_bd.product));
> +                               memcpy(&bdesc->revision, &_bd.revision,
> +                                      sizeof(_bd.revision));

Can you please move this block (inside the double for loops) into a
separate function? It is getting too long. A follow-up patch is fine
since you have already done this.

>                                 part_init(bdesc);
>
>                                 if (mode == 1) {
> --
> 1.9.1
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-09 19:27   ` Simon Glass
@ 2017-04-13 14:17     ` Jean-Jacques Hiblot
  2017-04-14 10:36       ` Simon Glass
  0 siblings, 1 reply; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-13 14:17 UTC (permalink / raw)
  To: u-boot



On 09/04/2017 21:27, Simon Glass wrote:
> Hi,
>
> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> The PHY framework provides a set of APIs to control a PHY. This API is
>> derived from the linux version of the generic PHY framework.
>> Currently the API supports init(), deinit(), power_on, power_off() and
>> reset(). The framework provides a way to get a reference to a phy from the
>> device-tree.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>   Makefile                 |  1 +
>>   drivers/Kconfig          |  2 ++
>>   drivers/Makefile         |  1 +
>>   drivers/phy/Kconfig      | 22 ++++++++++++++
>>   drivers/phy/Makefile     |  5 ++++
>>   drivers/phy/phy-uclass.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
>>   include/dm/uclass-id.h   |  1 +
>>   include/generic-phy.h    | 38 ++++++++++++++++++++++++
>>   8 files changed, 147 insertions(+)
>>   create mode 100644 drivers/phy/Kconfig
>>   create mode 100644 drivers/phy/Makefile
>>   create mode 100644 drivers/phy/phy-uclass.c
>>   create mode 100644 include/generic-phy.h
> Can you please create a sandbox driver and a test?
Sure. I'll add something. It'll be pretty basic though
>
>> diff --git a/Makefile b/Makefile
>> index 2638acf..06454ce 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -650,6 +650,7 @@ libs-y += fs/
>>   libs-y += net/
>>   libs-y += disk/
>>   libs-y += drivers/
>> +libs-y += drivers/phy/
> Could this go in drivers/Makefile?
OK
>
>>   libs-y += drivers/dma/
>>   libs-y += drivers/gpio/
>>   libs-y += drivers/i2c/
>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>> index 0e5d97d..a90ceca 100644
>> --- a/drivers/Kconfig
>> +++ b/drivers/Kconfig
>> @@ -88,6 +88,8 @@ source "drivers/video/Kconfig"
>>
>>   source "drivers/watchdog/Kconfig"
>>
>> +source "drivers/phy/Kconfig"
>> +
>>   config PHYS_TO_BUS
>>          bool "Custom physical to bus address mapping"
>>          help
>> diff --git a/drivers/Makefile b/drivers/Makefile
>> index 5d8baa5..4656509 100644
>> --- a/drivers/Makefile
>> +++ b/drivers/Makefile
>> @@ -47,6 +47,7 @@ obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
>>   obj-$(CONFIG_SPL_SATA_SUPPORT) += block/
>>   obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
>>   obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
>> +obj-$(CONFIG_SPL_GENERIC_PHY) += phy/
>>   endif
>>
>>   ifdef CONFIG_TPL_BUILD
>> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
>> new file mode 100644
>> index 0000000..b6fed9e
>> --- /dev/null
>> +++ b/drivers/phy/Kconfig
>> @@ -0,0 +1,22 @@
>> +
>> +menu "PHY Subsystem"
>> +
>> +config GENERIC_PHY
> Just a question: do you think we need the word GENERIC in this config?
> I'm OK with it, but wonder if CONFIG_PHY would be enough?
GENERIC_PHY is the name of the config option in the kernel and the 
functions are also prefixed with generic_phy_.
BTW the functions in linux are not prefixed with generic_phy_ but only 
phy_, but in the case of u-boot  a lot of phy_xxx() functions already 
exist and are not necessarily static (like phy_reset() for ther ethernet 
phy).

>
>> +       bool "PHY Core"
>> +       depends on DM
>> +       help
>> +         Generic PHY support.
>> +
>> +         This framework is designed to provide a generic interface for PHY
>> +         devices.
> Could you given a few examples of PHY devices and the types of
> operations you can perform on them.
OK
>
>> +
>> +config SPL_GENERIC_PHY
>> +       bool "PHY Core in SPL"
>> +       depends on DM
>> +       help
>> +         Generic PHY support in SPL.
>> +
>> +         This framework is designed to provide a generic interface for PHY
>> +         devices.
>> +
>> +endmenu
>> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
>> new file mode 100644
>> index 0000000..ccd15ed
>> --- /dev/null
>> +++ b/drivers/phy/Makefile
>> @@ -0,0 +1,5 @@
>> +obj-$(CONFIG_$(SPL_)GENERIC_PHY) += phy-uclass.o
>> +
>> +ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),)
>> +obj-y += marvell/
>> +endif
>> diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c
>> new file mode 100644
>> index 0000000..4d1584d
>> --- /dev/null
>> +++ b/drivers/phy/phy-uclass.c
>> @@ -0,0 +1,77 @@
>> +/*
>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>> + * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
> SPDX?
OK
>
>> + */
>> +
>> +#include <common.h>
>> +#include <dm.h>
>> +#include <generic-phy.h>
>> +
>> +#define get_ops(dev)        ((struct generic_phy_ops *)(dev)->driver->ops)
>> +
>> +#define generic_phy_to_dev(x) ((struct udevice *)(x))
>> +#define dev_to_generic_phy(x) ((struct generic_phy *)(x))
>> +
>> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string)
>> +{
>> +       struct udevice *generic_phy_dev;
> dev is a shorter name :-)
indeed
>
>> +
>> +       int rc = uclass_get_device_by_phandle(UCLASS_PHY, dev,
>> +                                          string, &generic_phy_dev);
>> +       if (rc) {
>> +               error("unable to find generic_phy device %d\n", rc);
>> +               return ERR_PTR(rc);
>> +       }
>> +       return dev_to_generic_phy(generic_phy_dev);
>> +}
>> +
>> +int generic_phy_init(struct generic_phy *generic_phy)
>> +{
>> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
>> +       struct generic_phy_ops *ops = get_ops(dev);
>> +
>> +       return (ops && ops->init) ? ops->init(dev) : 0;
>> +}
>> +
>> +int generic_phy_reset(struct generic_phy *generic_phy)
>> +{
>> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
>> +       struct generic_phy_ops *ops = get_ops(dev);
>> +
>> +       return (ops && ops->reset) ? ops->reset(dev) : 0;
>> +}
>> +
>> +int generic_phy_exit(struct generic_phy *generic_phy)
>> +{
>> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
>> +       struct generic_phy_ops *ops = get_ops(dev);
>> +
>> +       return (ops && ops->exit) ? ops->exit(dev) : 0;
>> +}
>> +
>> +int generic_phy_power_on(struct generic_phy *generic_phy)
>> +{
>> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
>> +       struct generic_phy_ops *ops = get_ops(dev);
>> +
>> +       return (ops && ops->power_on) ? ops->power_on(dev) : 0;
>> +}
>> +
>> +int generic_phy_power_off(struct generic_phy *generic_phy)
>> +{
>> +       struct udevice *dev = generic_phy_to_dev(generic_phy);
>> +       struct generic_phy_ops *ops = get_ops(dev);
>> +
>> +       return (ops && ops->power_off) ? ops->power_off(dev) : 0;
>> +}
>> +
> Drop 2 extra blank ilnes
>
>> +
>> +
>> +UCLASS_DRIVER(simple_generic_phy) = {
> remove the word 'simple' ?
OK
>
>> +       .id             = UCLASS_PHY,
>> +       .name           = "generic_phy",
>> +};
>> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
>> index 8c92d0b..9d34a32 100644
>> --- a/include/dm/uclass-id.h
>> +++ b/include/dm/uclass-id.h
>> @@ -83,6 +83,7 @@ enum uclass_id {
>>          UCLASS_VIDEO,           /* Video or LCD device */
>>          UCLASS_VIDEO_BRIDGE,    /* Video bridge, e.g. DisplayPort to LVDS */
>>          UCLASS_VIDEO_CONSOLE,   /* Text console driver for video device */
>> +       UCLASS_PHY,             /* generic PHY device */
>>
>>          UCLASS_COUNT,
>>          UCLASS_INVALID = -1,
>> diff --git a/include/generic-phy.h b/include/generic-phy.h
>> new file mode 100644
>> index 0000000..f02e9ce
>> --- /dev/null
>> +++ b/include/generic-phy.h
>> @@ -0,0 +1,38 @@
>> +/*
>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>> + * Written by Jean-Jacques Hiblot  <jjhiblot@ti.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#ifndef __GENERIC_PHY_H
>> +#define __GENERIC_PHY_H
>> +
>> +struct generic_phy;
>> +/*
>> + * struct generic_phy_ops - set of function pointers for phy operations
>> + * @init: operation to be performed for initializing phy
>> + * @exit: operation to be performed while exiting
>> + * @power_on: powering on the phy
>> + * @power_off: powering off the phy
> Need to mention that these are all optional (from what I can tell above).
OK
>
>> + */
>> +struct generic_phy_ops {
>> +       int     (*init)(struct udevice *phy);
>> +       int     (*exit)(struct udevice *phy);
>> +       int     (*reset)(struct udevice *phy);
>> +       int     (*power_on)(struct udevice *phy);
>> +       int     (*power_off)(struct udevice *phy);
>> +};
>> +
>> +
>> +int generic_phy_init(struct generic_phy *phy);
> Why do these not use struct udevice?
It's quite easy for the PHY driver to get its internal data structure 
from the struct udevice*.
I could also have passed struct generic_phy * but it adds another 
translation that I don't think is necessary.

>
>> +int generic_phy_reset(struct generic_phy *phy);
>> +int generic_phy_exit(struct generic_phy *phy);
>> +int generic_phy_power_on(struct generic_phy *phy);
>> +int generic_phy_power_off(struct generic_phy *phy);
>> +
>> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char *string);
>> +
>> +#endif /*__GENERIC_PHY_H */
>> --
>> 1.9.1
>>
> Regards,
> Simon
>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus"
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-13 14:18     ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-13 14:18 UTC (permalink / raw)
  To: u-boot



On 09/04/2017 03:13, Tom Rini wrote:
> On Fri, Apr 07, 2017 at 01:42:04PM +0200, Jean-Jacques Hiblot wrote:
>
>> This is needed to probe devices under that bus such as the SATA PHY.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>   arch/arm/dts/dra7.dtsi | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/arm/dts/dra7.dtsi b/arch/arm/dts/dra7.dtsi
>> index 5570e30..6978359 100644
>> --- a/arch/arm/dts/dra7.dtsi
>> +++ b/arch/arm/dts/dra7.dtsi
>> @@ -1317,7 +1317,7 @@
>>   
>>   		/* OCP2SCP3 */
>>   		ocp2scp at 4a090000 {
>> -			compatible = "ti,omap-ocp2scp";
>> +			compatible = "ti,omap-ocp2scp", "simple-bus";
>>   			#address-cells = <1>;
>>   			#size-cells = <1>;
>>   			ranges;
> This is U-Boot specific I assume?  It should end up in a -u-boot.dtsi
> file instead so we don't overwrite it later.
OK. I'll put it in omap5-u-boot.dtsi
>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-13 14:17     ` Jean-Jacques Hiblot
@ 2017-04-14 10:36       ` Simon Glass
  2017-04-14 11:12         ` Jean-Jacques Hiblot
  0 siblings, 1 reply; 35+ messages in thread
From: Simon Glass @ 2017-04-14 10:36 UTC (permalink / raw)
  To: u-boot

Hi Jean-Jacques,

On 13 April 2017 at 08:17, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
>
> On 09/04/2017 21:27, Simon Glass wrote:
>>
>> Hi,
>>
>> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>>
>>> The PHY framework provides a set of APIs to control a PHY. This API is
>>> derived from the linux version of the generic PHY framework.
>>> Currently the API supports init(), deinit(), power_on, power_off() and
>>> reset(). The framework provides a way to get a reference to a phy from
>>> the
>>> device-tree.
>>>
>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>> ---
>>>   Makefile                 |  1 +
>>>   drivers/Kconfig          |  2 ++
>>>   drivers/Makefile         |  1 +
>>>   drivers/phy/Kconfig      | 22 ++++++++++++++
>>>   drivers/phy/Makefile     |  5 ++++
>>>   drivers/phy/phy-uclass.c | 77
>>> ++++++++++++++++++++++++++++++++++++++++++++++++
>>>   include/dm/uclass-id.h   |  1 +
>>>   include/generic-phy.h    | 38 ++++++++++++++++++++++++
>>>   8 files changed, 147 insertions(+)
>>>   create mode 100644 drivers/phy/Kconfig
>>>   create mode 100644 drivers/phy/Makefile
>>>   create mode 100644 drivers/phy/phy-uclass.c
>>>   create mode 100644 include/generic-phy.h
>>
>> Can you please create a sandbox driver and a test?
>
> Sure. I'll add something. It'll be pretty basic though

Basic is fine. It needs to create a device or two and call some methods.

>>
>>
>>> diff --git a/Makefile b/Makefile
>>> index 2638acf..06454ce 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -650,6 +650,7 @@ libs-y += fs/
>>>   libs-y += net/
>>>   libs-y += disk/
>>>   libs-y += drivers/
>>> +libs-y += drivers/phy/
>>
>> Could this go in drivers/Makefile?
>
> OK
>
>>
>>>   libs-y += drivers/dma/
>>>   libs-y += drivers/gpio/
>>>   libs-y += drivers/i2c/
>>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>>> index 0e5d97d..a90ceca 100644
>>> --- a/drivers/Kconfig
>>> +++ b/drivers/Kconfig
>>> @@ -88,6 +88,8 @@ source "drivers/video/Kconfig"
>>>
>>>   source "drivers/watchdog/Kconfig"
>>>
>>> +source "drivers/phy/Kconfig"
>>> +
>>>   config PHYS_TO_BUS
>>>          bool "Custom physical to bus address mapping"
>>>          help
>>> diff --git a/drivers/Makefile b/drivers/Makefile
>>> index 5d8baa5..4656509 100644
>>> --- a/drivers/Makefile
>>> +++ b/drivers/Makefile
>>> @@ -47,6 +47,7 @@ obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
>>>   obj-$(CONFIG_SPL_SATA_SUPPORT) += block/
>>>   obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
>>>   obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
>>> +obj-$(CONFIG_SPL_GENERIC_PHY) += phy/
>>>   endif
>>>
>>>   ifdef CONFIG_TPL_BUILD
>>> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
>>> new file mode 100644
>>> index 0000000..b6fed9e
>>> --- /dev/null
>>> +++ b/drivers/phy/Kconfig
>>> @@ -0,0 +1,22 @@
>>> +
>>> +menu "PHY Subsystem"
>>> +
>>> +config GENERIC_PHY
>>
>> Just a question: do you think we need the word GENERIC in this config?
>> I'm OK with it, but wonder if CONFIG_PHY would be enough?
>
> GENERIC_PHY is the name of the config option in the kernel and the functions
> are also prefixed with generic_phy_.
> BTW the functions in linux are not prefixed with generic_phy_ but only phy_,
> but in the case of u-boot  a lot of phy_xxx() functions already exist and
> are not necessarily static (like phy_reset() for ther ethernet phy).

OK.
[..]

>>> + */
>>> +struct generic_phy_ops {
>>> +       int     (*init)(struct udevice *phy);
>>> +       int     (*exit)(struct udevice *phy);
>>> +       int     (*reset)(struct udevice *phy);
>>> +       int     (*power_on)(struct udevice *phy);
>>> +       int     (*power_off)(struct udevice *phy);
>>> +};
>>> +
>>> +
>>> +int generic_phy_init(struct generic_phy *phy);
>>
>> Why do these not use struct udevice?
>
> It's quite easy for the PHY driver to get its internal data structure from
> the struct udevice*.
> I could also have passed struct generic_phy * but it adds another
> translation that I don't think is necessary.

I'd like to change that for consistency. A uclass API is supposed to
take a struct udevice * rather than anything else. It is confusing if
one uclass does this differently. The translation is cheap and some
users will have a struct udevice * readily available.

>
>
>>
>>> +int generic_phy_reset(struct generic_phy *phy);
>>> +int generic_phy_exit(struct generic_phy *phy);
>>> +int generic_phy_power_on(struct generic_phy *phy);
>>> +int generic_phy_power_off(struct generic_phy *phy);
>>> +
>>> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char
>>> *string);
>>> +
>>> +#endif /*__GENERIC_PHY_H */
>>> --
>>> 1.9.1
>>>
>> Regards,
>> Simon
>>
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework
  2017-04-14 10:36       ` Simon Glass
@ 2017-04-14 11:12         ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 35+ messages in thread
From: Jean-Jacques Hiblot @ 2017-04-14 11:12 UTC (permalink / raw)
  To: u-boot



On 14/04/2017 12:36, Simon Glass wrote:
> Hi Jean-Jacques,
>
> On 13 April 2017 at 08:17, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>
>> On 09/04/2017 21:27, Simon Glass wrote:
>>> Hi,
>>>
>>> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>>> The PHY framework provides a set of APIs to control a PHY. This API is
>>>> derived from the linux version of the generic PHY framework.
>>>> Currently the API supports init(), deinit(), power_on, power_off() and
>>>> reset(). The framework provides a way to get a reference to a phy from
>>>> the
>>>> device-tree.
>>>>
>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>> ---
>>>>    Makefile                 |  1 +
>>>>    drivers/Kconfig          |  2 ++
>>>>    drivers/Makefile         |  1 +
>>>>    drivers/phy/Kconfig      | 22 ++++++++++++++
>>>>    drivers/phy/Makefile     |  5 ++++
>>>>    drivers/phy/phy-uclass.c | 77
>>>> ++++++++++++++++++++++++++++++++++++++++++++++++
>>>>    include/dm/uclass-id.h   |  1 +
>>>>    include/generic-phy.h    | 38 ++++++++++++++++++++++++
>>>>    8 files changed, 147 insertions(+)
>>>>    create mode 100644 drivers/phy/Kconfig
>>>>    create mode 100644 drivers/phy/Makefile
>>>>    create mode 100644 drivers/phy/phy-uclass.c
>>>>    create mode 100644 include/generic-phy.h
>>> Can you please create a sandbox driver and a test?
>> Sure. I'll add something. It'll be pretty basic though
> Basic is fine. It needs to create a device or two and call some methods.
>
>>>
>>>> diff --git a/Makefile b/Makefile
>>>> index 2638acf..06454ce 100644
>>>> --- a/Makefile
>>>> +++ b/Makefile
>>>> @@ -650,6 +650,7 @@ libs-y += fs/
>>>>    libs-y += net/
>>>>    libs-y += disk/
>>>>    libs-y += drivers/
>>>> +libs-y += drivers/phy/
>>> Could this go in drivers/Makefile?
>> OK
>>
>>>>    libs-y += drivers/dma/
>>>>    libs-y += drivers/gpio/
>>>>    libs-y += drivers/i2c/
>>>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>>>> index 0e5d97d..a90ceca 100644
>>>> --- a/drivers/Kconfig
>>>> +++ b/drivers/Kconfig
>>>> @@ -88,6 +88,8 @@ source "drivers/video/Kconfig"
>>>>
>>>>    source "drivers/watchdog/Kconfig"
>>>>
>>>> +source "drivers/phy/Kconfig"
>>>> +
>>>>    config PHYS_TO_BUS
>>>>           bool "Custom physical to bus address mapping"
>>>>           help
>>>> diff --git a/drivers/Makefile b/drivers/Makefile
>>>> index 5d8baa5..4656509 100644
>>>> --- a/drivers/Makefile
>>>> +++ b/drivers/Makefile
>>>> @@ -47,6 +47,7 @@ obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
>>>>    obj-$(CONFIG_SPL_SATA_SUPPORT) += block/
>>>>    obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += block/
>>>>    obj-$(CONFIG_SPL_MMC_SUPPORT) += block/
>>>> +obj-$(CONFIG_SPL_GENERIC_PHY) += phy/
>>>>    endif
>>>>
>>>>    ifdef CONFIG_TPL_BUILD
>>>> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
>>>> new file mode 100644
>>>> index 0000000..b6fed9e
>>>> --- /dev/null
>>>> +++ b/drivers/phy/Kconfig
>>>> @@ -0,0 +1,22 @@
>>>> +
>>>> +menu "PHY Subsystem"
>>>> +
>>>> +config GENERIC_PHY
>>> Just a question: do you think we need the word GENERIC in this config?
>>> I'm OK with it, but wonder if CONFIG_PHY would be enough?
>> GENERIC_PHY is the name of the config option in the kernel and the functions
>> are also prefixed with generic_phy_.
>> BTW the functions in linux are not prefixed with generic_phy_ but only phy_,
>> but in the case of u-boot  a lot of phy_xxx() functions already exist and
>> are not necessarily static (like phy_reset() for ther ethernet phy).
> OK.
> [..]
>
>>>> + */
>>>> +struct generic_phy_ops {
>>>> +       int     (*init)(struct udevice *phy);
>>>> +       int     (*exit)(struct udevice *phy);
>>>> +       int     (*reset)(struct udevice *phy);
>>>> +       int     (*power_on)(struct udevice *phy);
>>>> +       int     (*power_off)(struct udevice *phy);
>>>> +};
>>>> +
>>>> +
>>>> +int generic_phy_init(struct generic_phy *phy);
>>> Why do these not use struct udevice?
>> It's quite easy for the PHY driver to get its internal data structure from
>> the struct udevice*.
>> I could also have passed struct generic_phy * but it adds another
>> translation that I don't think is necessary.
> I'd like to change that for consistency. A uclass API is supposed to
> take a struct udevice * rather than anything else. It is confusing if
> one uclass does this differently. The translation is cheap and some
> users will have a struct udevice * readily available..
Yes I eventually figured this out while working on the unit tests v3. 
This has been changed.

Jean-Jacques
>
>>
>>>> +int generic_phy_reset(struct generic_phy *phy);
>>>> +int generic_phy_exit(struct generic_phy *phy);
>>>> +int generic_phy_power_on(struct generic_phy *phy);
>>>> +int generic_phy_power_off(struct generic_phy *phy);
>>>> +
>>>> +struct generic_phy *dm_generic_phy_get(struct udevice *dev, const char
>>>> *string);
>>>> +
>>>> +#endif /*__GENERIC_PHY_H */
>>>> --
>>>> 1.9.1
>>>>
>>> Regards,
>>> Simon
>>>
> Regards,
> Simon
>

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks()
  2017-04-07 11:42 ` [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks() Jean-Jacques Hiblot
@ 2017-04-15 16:07   ` Simon Glass
  0 siblings, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-15 16:07 UTC (permalink / raw)
  To: u-boot

On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> From: Mugunthan V N <mugunthanvnm@ti.com>
>
> All the clocks which has to be enabled has to be done in
> enable_basic_clocks(), so moving enable sata clock to common
> clocks enable function.
>
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> ---
>
> the patch hasn't changed since v1
>
> arch/arm/mach-omap2/omap5/hw_data.c | 12 ++++++++++++
>  arch/arm/mach-omap2/sata.c          | 23 -----------------------
>  2 files changed, 12 insertions(+), 23 deletions(-)

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined
  2017-04-09  1:13   ` Tom Rini
@ 2017-04-15 16:07     ` Simon Glass
  0 siblings, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-15 16:07 UTC (permalink / raw)
  To: u-boot

On 8 April 2017 at 19:13, Tom Rini <trini@konsulko.com> wrote:
> On Fri, Apr 07, 2017 at 01:42:01PM +0200, Jean-Jacques Hiblot wrote:
>
>> When CONFIG_DM_SCSI is defined, the SATA initialization will be implemented
>> in the scsi-uclass driver.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>
> Reviewed-by: Tom Rini <trini@konsulko.com>
>
> --
> Tom

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev()
  2017-04-09 19:27   ` Simon Glass
@ 2017-04-15 16:07     ` Simon Glass
  0 siblings, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-15 16:07 UTC (permalink / raw)
  To: u-boot

On 9 April 2017 at 13:27, Simon Glass <sjg@chromium.org> wrote:
> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> This is a cosmetic change. target and LUN have kind of the same role in
>> this function. One of them was passed as a parameter and the other was
>> embedded in a structure. For consistency, pass both of them as parameters.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>  common/scsi.c | 14 +++++++-------
>>  1 file changed, 7 insertions(+), 7 deletions(-)
>>
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection
  2017-04-09 19:27   ` Simon Glass
@ 2017-04-15 16:07     ` Simon Glass
  0 siblings, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-15 16:07 UTC (permalink / raw)
  To: u-boot

On 9 April 2017 at 13:27, Simon Glass <sjg@chromium.org> wrote:
> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> We might want to get information about the scsi device without initializing the partition.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>  common/scsi.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 35+ messages in thread

* [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan()
  2017-04-09 19:27   ` Simon Glass
@ 2017-04-15 16:07     ` Simon Glass
  0 siblings, 0 replies; 35+ messages in thread
From: Simon Glass @ 2017-04-15 16:07 UTC (permalink / raw)
  To: u-boot

On 9 April 2017 at 13:27, Simon Glass <sjg@chromium.org> wrote:
> Hi,
>
> On 7 April 2017 at 05:42, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> With DM_SCSI enabled, blk_create_devicef() is called with blkz = 0, leading
>> to a divide-by-0 exception.
>> scsi_detect_dev() can be used to get the required parameters (block size
>> and number of blocks) from the drive before calling blk_create_devicef().
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>  common/scsi.c | 35 ++++++++++++++++++++++++++---------
>>  1 file changed, 26 insertions(+), 9 deletions(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> Please see below.
>
>>
>> diff --git a/common/scsi.c b/common/scsi.c
>> index 972ef338..d37222c 100644
>> --- a/common/scsi.c
>> +++ b/common/scsi.c
>> @@ -580,9 +580,19 @@ int scsi_scan(int mode)
>>                         for (lun = 0; lun < plat->max_lun; lun++) {
>>                                 struct udevice *bdev; /* block device */
>>                                 /* block device description */
>> +                               struct blk_desc _bd;
>>                                 struct blk_desc *bdesc;
>>                                 char str[10];
>>
>> +                               scsi_init_dev_desc_priv(&_bd);
>> +                               ret = scsi_detect_dev(i, lun, &_bd);
>> +                               if (ret)
>> +                                       /*
>> +                                        * no device detected?
>> +                                        * check the next lun.
>> +                                        */
>> +                                       continue;
>> +
>>                                 /*
>>                                  * Create only one block device and do detection
>>                                  * to make sure that there won't be a lot of
>> @@ -590,20 +600,27 @@ int scsi_scan(int mode)
>>                                  */
>>                                 snprintf(str, sizeof(str), "id%dlun%d", i, lun);
>>                                 ret = blk_create_devicef(dev, "scsi_blk",
>> -                                                         str, IF_TYPE_SCSI,
>> -                                                         -1, 0, 0, &bdev);
>> +                                               str, IF_TYPE_SCSI,
>> +                                               -1,
>> +                                               _bd.blksz,
>> +                                               _bd.blksz * _bd.lba,
>> +                                               &bdev);
>>                                 if (ret) {
>>                                         debug("Can't create device\n");
>>                                         return ret;
>>                                 }
>> -                               bdesc = dev_get_uclass_platdata(bdev);
>>
>> -                               scsi_init_dev_desc_priv(bdesc);
>> -                               ret = scsi_detect_dev(i, lun, bdesc);
>> -                               if (ret) {
>> -                                       device_unbind(bdev);
>> -                                       continue;
>> -                               }
>> +                               bdesc = dev_get_uclass_platdata(bdev);
>> +                               bdesc->target = i;
>> +                               bdesc->lun = lun;
>> +                               bdesc->removable = _bd.removable;
>> +                               bdesc->type = _bd.type;
>> +                               memcpy(&bdesc->vendor, &_bd.vendor,
>> +                                      sizeof(_bd.vendor));
>> +                               memcpy(&bdesc->product, &_bd.product,
>> +                                      sizeof(_bd.product));
>> +                               memcpy(&bdesc->revision, &_bd.revision,
>> +                                      sizeof(_bd.revision));
>
> Can you please move this block (inside the double for loops) into a
> separate function? It is getting too long. A follow-up patch is fine
> since you have already done this.
>
>>                                 part_init(bdesc);
>>
>>                                 if (mode == 1) {
>> --
>> 1.9.1
>>
>
> Regards,
> Simon

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2017-04-15 16:07 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-07 11:41 [U-Boot] [PATCH v2 00/10] OMAP: Move SATA to use block driver model Jean-Jacques Hiblot
2017-04-07 11:42 ` [U-Boot] [PATCH v2 01/10] arm: omap: sata: move enable sata clocks to enable_basic_clocks() Jean-Jacques Hiblot
2017-04-15 16:07   ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 02/10] arm: omap: sata: compile out board-level sata code when CONFIG_DM_SCSI is defined Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-15 16:07     ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 03/10] drivers: phy: add generic PHY framework Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-13 14:17     ` Jean-Jacques Hiblot
2017-04-14 10:36       ` Simon Glass
2017-04-14 11:12         ` Jean-Jacques Hiblot
2017-04-07 11:42 ` [U-Boot] [PATCH v2 04/10] drivers: phy: add PIPE3 phy driver Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 05/10] dra7: dtsi: mark ocp2scp bus compatible with "simple-bus" Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-13 14:18     ` Jean-Jacques Hiblot
2017-04-07 11:42 ` [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 07/10] scsi: make the LUN a parameter of scsi_detect_dev() Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-15 16:07     ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 08/10] scsi: move the partition initialization out of the scsi detection Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-15 16:07     ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 09/10] dm: scsi: fix divide-by-0 error in scsi_scan() Jean-Jacques Hiblot
2017-04-09  1:13   ` Tom Rini
2017-04-09 19:27   ` Simon Glass
2017-04-15 16:07     ` Simon Glass
2017-04-07 11:42 ` [U-Boot] [PATCH v2 10/10] defconfig: dra7xx_evm: enable CONFIG_BLK and disk driver model for SCSI Jean-Jacques Hiblot
2017-04-09  1:14   ` Tom Rini

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.