Commit cf7e399f authored by Mike Frysinger's avatar Mike Frysinger Committed by Wolfgang Denk

SATA: do not auto-initialize during boot

Rather than have the board code initialize SATA automatically during boot,
make the user manually run "sata init".  This brings the SATA subsystem in
line with common U-Boot policy.

Rather than having a dedicated weak function "is_sata_supported", people
can override sata_initialize() to do their weird board stuff.  Then they
can call the actual __sata_initialize().
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 50970839
......@@ -582,15 +582,15 @@ get_board_ddr_clk(ulong dummy)
}
#endif
int is_sata_supported(void)
int sata_initialize(void)
{
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
uint sdrs2_io_sel =
(gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;
if (sdrs2_io_sel & 0x04)
return 0;
return 1;
return 1;
return __sata_initialize();
}
int board_eth_init(bd_t *bis)
......
......@@ -31,7 +31,7 @@
int curr_device = -1;
block_dev_desc_t sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
int sata_initialize(void)
int __sata_initialize(void)
{
int rc;
int i;
......@@ -55,6 +55,7 @@ int sata_initialize(void)
curr_device = 0;
return rc;
}
int sata_initialize(void) __attribute__((weak,alias("__sata_initialize")));
block_dev_desc_t *sata_get_dev(int dev)
{
......@@ -65,6 +66,14 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int rc = 0;
if (argc == 2 && strcmp(argv[1], "init") == 0)
return sata_initialize();
/* If the user has not yet run `sata init`, do it now */
if (curr_device == -1)
if (sata_initialize())
return 1;
switch (argc) {
case 0:
case 1:
......@@ -186,6 +195,7 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD(
sata, 5, 1, do_sata,
"sata - SATA sub system\n",
"init - init SATA sub system\n"
"sata info - show available SATA devices\n"
"sata device [dev] - show or set current device\n"
"sata part [dev] - print partition table\n"
......
......@@ -7,5 +7,6 @@ ulong sata_read(int dev, ulong blknr, ulong blkcnt, void *buffer);
ulong sata_write(int dev, ulong blknr, ulong blkcnt, const void *buffer);
int sata_initialize(void);
int __sata_initialize(void);
#endif
......@@ -38,9 +38,6 @@
#if defined(CONFIG_CMD_IDE)
#include <ide.h>
#endif
#if defined(CONFIG_CMD_SATA)
#include <sata.h>
#endif
#if defined(CONFIG_CMD_SCSI)
#include <scsi.h>
#endif
......@@ -639,16 +636,6 @@ void board_init_f (ulong bootflag)
/* NOTREACHED - relocate_code() does not return */
}
int __is_sata_supported(void)
{
/* 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(void) __attribute__((weak, alias("__is_sata_supported")));
/************************************************************************
*
* This is the next part if the initialization sequence: we are now
......@@ -1152,13 +1139,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
#endif
#endif
#if defined(CONFIG_CMD_SATA)
if (is_sata_supported()) {
puts("SATA: ");
sata_initialize();
}
#endif
#ifdef CONFIG_LAST_STAGE_INIT
WATCHDOG_RESET ();
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment