e6bf81de08
1 OBS-URL: https://build.opensuse.org/request/show/248054 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/u-boot?expand=0&rev=29
195 lines
5.3 KiB
Diff
195 lines
5.3 KiB
Diff
--- ./include/spl.h.orig 2014-08-21 09:49:13.104157699 +0200
|
|
+++ ./include/spl.h 2014-08-21 09:49:55.343156204 +0200
|
|
@@ -72,6 +72,10 @@ void spl_sata_load_image(void);
|
|
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);
|
|
|
|
+/* SPL EXT image functions */
|
|
+int spl_load_image_ext(block_dev_desc_t *block_dev, int partition, const char *filename);
|
|
+int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition);
|
|
+
|
|
#ifdef CONFIG_SPL_BOARD_INIT
|
|
void spl_board_init(void);
|
|
#endif
|
|
--- ./common/spl/Makefile.orig 2014-08-21 09:55:50.011143645 +0200
|
|
+++ ./common/spl/Makefile 2014-08-21 09:56:05.061143112 +0200
|
|
@@ -18,5 +18,6 @@ obj-$(CONFIG_SPL_NET_SUPPORT) += spl_net
|
|
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_EXT_SUPPORT) += spl_ext.o
|
|
obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
|
|
endif
|
|
--- ./fs/Makefile.orig 2014-08-21 09:58:00.612139021 +0200
|
|
+++ ./fs/Makefile 2014-08-21 09:58:15.603138490 +0200
|
|
@@ -8,6 +8,7 @@
|
|
|
|
ifdef CONFIG_SPL_BUILD
|
|
obj-$(CONFIG_SPL_FAT_SUPPORT) += fat/
|
|
+obj-$(CONFIG_SPL_EXT_SUPPORT) += ext4/
|
|
else
|
|
obj-y += fs.o
|
|
|
|
--- /dev/null 2014-08-21 08:33:45.854318006 +0200
|
|
+++ common/spl/spl_ext.c 2014-08-21 10:26:03.376079435 +0200
|
|
@@ -0,0 +1,139 @@
|
|
+/*
|
|
+ * SPDX-License-Identifier: GPL-2.0+
|
|
+ */
|
|
+
|
|
+#include <common.h>
|
|
+#include <spl.h>
|
|
+#include <asm/u-boot.h>
|
|
+#include <ext4fs.h>
|
|
+#include <image.h>
|
|
+
|
|
+#ifdef CONFIG_SPL_EXT_SUPPORT
|
|
+int spl_load_image_ext(block_dev_desc_t *block_dev,
|
|
+ int partition,
|
|
+ const char *filename)
|
|
+{
|
|
+ s32 err;
|
|
+ struct image_header *header;
|
|
+ int filelen;
|
|
+ disk_partition_t part_info = {};
|
|
+
|
|
+ header = (struct image_header *)(CONFIG_SYS_TEXT_BASE -
|
|
+ sizeof(struct image_header));
|
|
+
|
|
+ if (get_partition_info(block_dev,
|
|
+ partition, &part_info)) {
|
|
+ printf("spl: no partition table found\n");
|
|
+ goto end;
|
|
+ }
|
|
+
|
|
+ ext4fs_set_blk_dev(block_dev, &part_info);
|
|
+
|
|
+ err = ext4fs_mount(0);
|
|
+ if (!err) {
|
|
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
+ printf("%s: ext4fs mount err - %d\n", __func__, err);
|
|
+#endif
|
|
+ goto end;
|
|
+ }
|
|
+
|
|
+ filelen = err = ext4fs_open(filename);
|
|
+ if (err < 0) {
|
|
+ puts("spl: ext4fs_open failed\n");
|
|
+ goto end;
|
|
+ }
|
|
+ err = ext4fs_read((u8 *)header, sizeof(struct image_header));
|
|
+ if (err <= 0) {
|
|
+ puts("spl: ext4fs_read failed\n");
|
|
+ goto end;
|
|
+ }
|
|
+
|
|
+ spl_parse_image_header(header);
|
|
+
|
|
+ err = ext4fs_read((u8 *)spl_image.load_addr, filelen);
|
|
+
|
|
+end:
|
|
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
+ if (err <= 0)
|
|
+ printf("%s: error reading image %s, err - %d\n",
|
|
+ __func__, filename, err);
|
|
+#endif
|
|
+
|
|
+ return (err <= 0);
|
|
+}
|
|
+
|
|
+#ifdef CONFIG_SPL_OS_BOOT
|
|
+int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition)
|
|
+{
|
|
+ int err;
|
|
+ int filelen;
|
|
+ disk_partition_t part_info = {};
|
|
+ __maybe_unused char *file;
|
|
+
|
|
+ if (get_partition_info(block_dev,
|
|
+ partition, &part_info)) {
|
|
+ printf("spl: no partition table found\n");
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ ext4fs_set_blk_dev(block_dev, &part_info);
|
|
+
|
|
+ err = ext4fs_mount(0);
|
|
+ if (!err) {
|
|
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
+ printf("%s: ext4fs mount err - %d\n", __func__, err);
|
|
+#endif
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+#if defined(CONFIG_SPL_ENV_SUPPORT) && defined(CONFIG_SPL_OS_BOOT)
|
|
+ file = getenv("falcon_args_file");
|
|
+ if (file) {
|
|
+ filelen = err = ext4fs_open(file);
|
|
+ if (err < 0) {
|
|
+ puts("spl: ext4fs_open failed\n");
|
|
+ goto defaults;
|
|
+ }
|
|
+ err = ext4fs_read( (void *)CONFIG_SYS_SPL_ARGS_ADDR, filelen);
|
|
+ if (err <= 0) {
|
|
+ printf("spl: error reading image %s, err - %d, falling back to default\n",
|
|
+ file, err);
|
|
+ goto defaults;
|
|
+ }
|
|
+ file = getenv("falcon_image_file");
|
|
+ if (file) {
|
|
+ err = spl_load_image_ext(block_dev, partition, file);
|
|
+ if (err != 0) {
|
|
+ puts("spl: falling back to default\n");
|
|
+ goto defaults;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+ } else
|
|
+ puts("spl: falcon_image_file not set in environment, falling back to default\n");
|
|
+ } else
|
|
+ puts("spl: falcon_args_file not set in environment, falling back to default\n");
|
|
+
|
|
+defaults:
|
|
+#endif
|
|
+
|
|
+ filelen = err = ext4fs_open(CONFIG_SPL_FAT_LOAD_ARGS_NAME);
|
|
+ if (err < 0) {
|
|
+ puts("spl: ext4fs_open failed\n");
|
|
+ //goto defaults;
|
|
+ }
|
|
+ err = ext4fs_read( (void *)CONFIG_SYS_SPL_ARGS_ADDR, filelen);
|
|
+ if (err <= 0) {
|
|
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
+ printf("%s: error reading image %s, err - %d\n",
|
|
+ __func__, CONFIG_SPL_FAT_LOAD_ARGS_NAME, err);
|
|
+#endif
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ return spl_load_image_ext(block_dev, partition,
|
|
+ CONFIG_SPL_FAT_LOAD_KERNEL_NAME);
|
|
+}
|
|
+#endif
|
|
+#endif
|
|
+
|
|
--- common/spl/spl_mmc.c.orig 2014-08-06 15:12:58.000000000 +0200
|
|
+++ common/spl/spl_mmc.c 2014-08-21 10:38:25.144053170 +0200
|
|
@@ -100,6 +102,17 @@ void spl_mmc_load_image(void)
|
|
#endif
|
|
err = mmc_load_image_raw(mmc,
|
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
|
|
+#ifdef CONFIG_SPL_EXT_SUPPORT
|
|
+ } else if (boot_mode == MMCSD_MODE_FAT) {
|
|
+ debug("boot mode - EXT\n");
|
|
+#ifdef CONFIG_SPL_OS_BOOT
|
|
+ if (spl_start_uboot() || spl_load_image_ext_os(&mmc->block_dev,
|
|
+ CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION))
|
|
+#endif
|
|
+ err = spl_load_image_ext(&mmc->block_dev,
|
|
+ CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION,
|
|
+ CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
|
|
+#endif
|
|
#ifdef CONFIG_SPL_FAT_SUPPORT
|
|
} else if (boot_mode == MMCSD_MODE_FAT) {
|
|
debug("boot mode - FAT\n");
|