Hi Dan, On 01/28/2014 10:01 PM, Dan Murphy wrote: > Add spl_sata to read a fat partition from a bootable SATA > drive. > > Signed-off-by: Dan Murphy <dmur...@ti.com> > --- > common/Makefile | 3 +++ > common/cmd_scsi.c | 2 ++ > common/spl/Makefile | 1 + > common/spl/spl.c | 5 +++++ > common/spl/spl_sata.c | 51 > +++++++++++++++++++++++++++++++++++++++++++++++++ > include/spl.h | 3 +++ > spl/Makefile | 1 + > 7 files changed, 66 insertions(+) > create mode 100644 common/spl/spl_sata.c > > diff --git a/common/Makefile b/common/Makefile > index 4d99ecd..b0f5b62 100644 > --- a/common/Makefile > +++ b/common/Makefile > @@ -201,6 +201,9 @@ ifdef CONFIG_SPL_USB_HOST_SUPPORT > obj-$(CONFIG_SPL_USB_SUPPORT) += usb.o usb_hub.o > obj-$(CONFIG_USB_STORAGE) += usb_storage.o > endif > +ifdef CONFIG_SPL_SATA_SUPPORT > +obj-$(CONFIG_CMD_SCSI) += cmd_scsi.o > +endif > ifneq ($(CONFIG_SPL_NET_SUPPORT),y) > obj-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o > obj-$(CONFIG_ENV_IS_IN_MMC) += env_mmc.o > diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c > index 7b97dc9..b3f7687 100644 > --- a/common/cmd_scsi.c > +++ b/common/cmd_scsi.c > @@ -168,7 +168,9 @@ removable: > scsi_curr_dev = -1; > > printf("Found %d device(s).\n", scsi_max_devs); > +#ifndef CONFIG_SPL_BUILD > setenv_ulong("scsidevs", scsi_max_devs); > +#endif > } > > int scsi_get_disk_count(void) > diff --git a/common/spl/Makefile b/common/spl/Makefile > index 65a1484f..64569c2 100644 > --- a/common/spl/Makefile > +++ b/common/spl/Makefile > @@ -18,4 +18,5 @@ obj-$(CONFIG_SPL_NET_SUPPORT) += spl_net.o > obj-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o > obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o > obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o > +obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o > endif > diff --git a/common/spl/spl.c b/common/spl/spl.c > index 0645cee..774fdad 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -210,6 +210,11 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > spl_usb_load_image(); > break; > #endif > +#ifdef CONFIG_SPL_SATA_SUPPORT > + case BOOT_DEVICE_SATA: > + spl_sata_load_image(); > + break; > +#endif > default: > debug("SPL: Un-supported Boot Device\n"); > hang(); > diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c > new file mode 100644 > index 0000000..88d6b06 > --- /dev/null > +++ b/common/spl/spl_sata.c > @@ -0,0 +1,51 @@ > +/* > + * (C) Copyright 2013 > + * Texas Instruments, <www.ti.com> > + * > + * Dan Murphy <dmur...@ti.com> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + * > + * Derived work from spl_usb.c > + */ > + > +#include <common.h> > +#include <spl.h> > +#include <asm/u-boot.h> > +#include <sata.h> > +#include <fat.h> > +#include <version.h> > +#include <image.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +void spl_sata_load_image(void) > +{ > + int err; > + block_dev_desc_t *stor_dev; > + > + err = init_sata(CONFIG_SPL_SATA_BOOT_DEVICE); > + if (err) { > +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT > + printf("spl: sata init failed: err - %d\n", err);
Why the conditional print only if CONFIG_SPL_LIBCOMMON_SUPPORT. > +#endif > + hang(); > + } else { > + /* try to recognize storage devices immediately */ > + stor_dev = scsi_get_dev(0); > + } > + > + debug("boot mode - FAT\n"); Do you really need this debug message? If yes could it be more descriptive like printing function name to point out where it comes from? > + > +#ifdef CONFIG_SPL_OS_BOOT > + if (spl_start_uboot() || spl_load_image_fat_os(stor_dev, > + > CONFIG_SYS_SATA_FAT_BOOT_PARTITION)) > +#endif > + err = spl_load_image_fat(stor_dev, Do you need to tab space this to align with the above if statement? > + CONFIG_SYS_SATA_FAT_BOOT_PARTITION, > + CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME); Just cross checking. If CONFIG_SPL_OS_BOOT is defined then you need to call both spl_load_image_fat_os() as well as spl_load_image_fat ? > + if (err) { > + puts("Error loading sata device\n"); > + hang(); > + } > +} > diff --git a/include/spl.h b/include/spl.h > index 5e24856..ee09fb6 100644 > --- a/include/spl.h > +++ b/include/spl.h > @@ -64,6 +64,9 @@ void spl_net_load_image(const char *device); > /* USB SPL functions */ > void spl_usb_load_image(void); > > +/* SATA SPL functions */ > +void spl_sata_load_image(void); > + > /* SPL FAT image functions */ > int spl_load_image_fat(block_dev_desc_t *block_dev, int partition, const > char *filename); > int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition); > diff --git a/spl/Makefile b/spl/Makefile > index 4143e38..28fcfdd 100644 > --- a/spl/Makefile > +++ b/spl/Makefile > @@ -85,6 +85,7 @@ LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/ > LIBS-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/ > LIBS-$(CONFIG_SPL_USB_HOST_SUPPORT) += drivers/usb/host/ > LIBS-$(CONFIG_OMAP_USB_PHY) += drivers/usb/phy/ > +LIBS-$(CONFIG_SPL_SATA_SUPPORT) += drivers/block/ > > ifneq (,$(CONFIG_MX23)$(CONFIG_MX35)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 > mx35)) > LIBS-y += arch/$(ARCH)/imx-common/ > cheers, -roger _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot