[U-Boot] [PATCH 2/2] Do not init SATA when disabled.

Jason Jin Jason.jin at freescale.com
Sat Sep 27 08:40:58 CEST 2008


SGMII and SATA share the serdes on MPC8536 CPU, When SATA disabled
and the driver access the SATA registers, the cpu will hangup.
This patch try to fix this by reading the serdes status before the SATA
initialize.

Signed-off-by: Jason Jin <Jason.jin at freescale.com>
---
 board/freescale/mpc8536ds/mpc8536ds.c |   12 ++++++++++++
 lib_ppc/board.c                       |   16 ++++++++++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/board/freescale/mpc8536ds/mpc8536ds.c b/board/freescale/mpc8536ds/mpc8536ds.c
index 88a2c5e..5d39fb4 100644
--- a/board/freescale/mpc8536ds/mpc8536ds.c
+++ b/board/freescale/mpc8536ds/mpc8536ds.c
@@ -651,6 +651,18 @@ int board_eth_init(bd_t *bis)
 	return pci_eth_init(bis);
 }
 
+int is_sata_supported()
+{
+	volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+	uint devdisr = gur->devdisr;
+	uint sdrs2_io_sel =
+		(gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;
+	if (sdrs2_io_sel & 0x04)
+		return 0;
+
+	return 1;
+}
+
 #if defined(CONFIG_OF_BOARD_SETUP)
 void
 ft_board_setup(void *blob, bd_t *bd)
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index c02ac62..0e4e8d1 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -635,6 +635,16 @@ void board_init_f (ulong bootflag)
 	/* NOTREACHED - relocate_code() does not return */
 }
 
+int __is_sata_supported()
+{
+	/* For some boards, when sata disabled by the switch, and the
+	 * driver still access the sata registers, the cpu will hangup.
+	 * please define platform specific is_sata_supported() if your
+	 * board have such issue.*/
+	return 1;
+}
+int is_sata_supported() __attribute__((weak, alias("__is_sata_supported")));
+
 /************************************************************************
  *
  * This is the next part if the initialization sequence: we are now
@@ -1105,8 +1115,10 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #endif
 
 #if defined(CONFIG_CMD_SATA)
-	puts ("SATA:  ");
-	sata_initialize ();
+	if (is_sata_supported()) {
+		puts("SATA:  ");
+		sata_initialize();
+	}
 #endif
 
 #ifdef CONFIG_LAST_STAGE_INIT
-- 
1.5.4



More information about the U-Boot mailing list