Re: [U-Boot] [PATCH 2/2] HACK: arndale: deinit scsi before launching Linux

2014-10-09 Thread Ian Campbell
On Wed, 2014-10-08 at 10:18 +0200, Wolfgang Denk wrote:
 Dear Ian Campbell,
 
 In message 1412690200-6630-2-git-send-email-...@hellion.org.uk you wrote:
  From: Ian Campbell ian.campb...@citrix.com
  
  NOT TO BE APPLIED AS IS
  
  Without this Linux fails to correctly init the phy (or something) and cannot
  detect the disk.
  
  Even with this we can fail to detect the disk outselves on some fraction of
  boots, so something else is clearly up too.
 
 Why does the Subject: say scsi when you actually mean SATA?

The patch is adding scsi_deinit to mirror the existing scsi_init
function, and the u-boot CLI command (and dev name to load etc) is
scsi. On this platform (as with several others) it happens that scsi
is backed by a sata device, that's all.

 Note that this is a bug fix.

But as noted above and in the series cover letter (more details there)
it is not a complete one. I'm hoping the maintainers might know of a
correct fix, which probably means correct peripheral shutdown
processs.

Ian.

   U-Boot should _always_ shut down all
 peripherals it used before booting an OS, see [1]
 
 [1] http://www.denx.de/wiki/U-Boot/DesignPrinciples
 
 Best regards,
 
 Wolfgang Denk
 


___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 2/2] HACK: arndale: deinit scsi before launching Linux

2014-10-08 Thread Wolfgang Denk
Dear Ian Campbell,

In message 1412690200-6630-2-git-send-email-...@hellion.org.uk you wrote:
 From: Ian Campbell ian.campb...@citrix.com
 
 NOT TO BE APPLIED AS IS
 
 Without this Linux fails to correctly init the phy (or something) and cannot
 detect the disk.
 
 Even with this we can fail to detect the disk outselves on some fraction of
 boots, so something else is clearly up too.

Why does the Subject: say scsi when you actually mean SATA?

Note that this is a bug fix.  U-Boot should _always_ shut down all
peripherals it used before booting an OS, see [1]

[1] http://www.denx.de/wiki/U-Boot/DesignPrinciples

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH, MD: Wolfgang Denk  Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
If you want strict real-time behavior, run in the real  time  schedu-
ling class.  But there are no seatbelts or airbags;  main(){for(;;);}
can hard hang your system.  -- Bart Smaalders
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 2/2] HACK: arndale: deinit scsi before launching Linux

2014-10-07 Thread Ian Campbell
From: Ian Campbell ian.campb...@citrix.com

NOT TO BE APPLIED AS IS

Without this Linux fails to correctly init the phy (or something) and cannot
detect the disk.

Even with this we can fail to detect the disk outselves on some fraction of
boots, so something else is clearly up too.
---
 arch/arm/cpu/armv7/exynos/sata.c | 11 +++
 arch/arm/lib/bootm.c |  4 
 board/samsung/arndale/arndale.c  |  5 +
 drivers/block/ahci.c |  4 
 include/scsi.h   |  1 +
 5 files changed, 25 insertions(+)

diff --git a/arch/arm/cpu/armv7/exynos/sata.c b/arch/arm/cpu/armv7/exynos/sata.c
index 14d42e7..05f1372 100644
--- a/arch/arm/cpu/armv7/exynos/sata.c
+++ b/arch/arm/cpu/armv7/exynos/sata.c
@@ -310,6 +310,11 @@ static int exynos5_ahci_init(void __iomem *mmio)
printf(%s: already calibrated?\n, __func__);
}
 
+   /* Clear phy control enable. Seems to be necessary to
+* reinitialise on a warm reboot, at least sometimes. */
+   clrbits_le32(EXYNOS5_SATA_PHY_CONTROL, S5P_PMU_SATA_PHY_CONTROL_EN);
+   udelay(1000);
+
setbits_le32(EXYNOS5_SATA_PHY_CONTROL, S5P_PMU_SATA_PHY_CONTROL_EN);
 
__raw_writel(0, phy_ctrl + SATA_RESET);
@@ -368,3 +373,9 @@ int exynos5_sata_init(void)
}
return -ENODEV;
 }
+
+int exynos5_sata_deinit(void)
+{
+   clrbits_le32(EXYNOS5_SATA_PHY_CONTROL, S5P_PMU_SATA_PHY_CONTROL_EN);
+   return 0;
+}
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 39fe7a1..9c8d242 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -15,6 +15,7 @@
 #include common.h
 #include command.h
 #include image.h
+#include scsi.h
 #include u-boot/zlib.h
 #include asm/byteorder.h
 #include libfdt.h
@@ -81,6 +82,9 @@ static void announce_and_cleanup(int fake)
 #ifdef CONFIG_USB_DEVICE
udc_disconnect();
 #endif
+#ifdef CONFIG_SCSI_AHCI_PLAT
+   scsi_deinit();
+#endif
cleanup_before_linux();
 }
 
diff --git a/board/samsung/arndale/arndale.c b/board/samsung/arndale/arndale.c
index 551bfce..43c9694 100644
--- a/board/samsung/arndale/arndale.c
+++ b/board/samsung/arndale/arndale.c
@@ -36,6 +36,11 @@ int scsi_init(void)
printf(ARNDALE SCSI INIT\n);
return exynos5_sata_init();
 }
+
+int scsi_deinit(void)
+{
+   return exynos5_sata_deinit();
+}
 #endif
 
 int board_init(void)
diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c
index a93a8e1..a7e57be 100644
--- a/drivers/block/ahci.c
+++ b/drivers/block/ahci.c
@@ -959,6 +959,10 @@ void __weak scsi_init(void)
 {
 }
 
+void __weak scsi_deinit(void)
+{
+}
+
 #endif
 
 /*
diff --git a/include/scsi.h b/include/scsi.h
index 73de7b7..06ad192 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -172,6 +172,7 @@ void scsi_low_level_init(int busdevfunc);
  * functions residing inside cmd_scsi.c
  */
 void scsi_init(void);
+void scsi_deinit(void);
 void scsi_scan(int mode);
 
 /** @return the number of scsi disks */
-- 
2.1.0

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot