]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
zynq: Add fpga support to u-boot SPL
authorMichal Simek <michal.simek@xilinx.com>
Fri, 17 Jan 2014 08:56:07 +0000 (09:56 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 31 Jan 2014 08:35:22 +0000 (09:35 +0100)
Call board_init to ensure that fpga is properly detected.
Enable bit and bin formats.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/cpu/armv7/zynq/spl.c
common/spl/spl_mmc.c
drivers/fpga/fpga.c
include/configs/zynq-common.h
include/fpga.h
spl/Makefile

index e41523017cde774937070e1abab2da0103bdcaea..f6686b4d649b606dc8539bd50575c86dfb9990ba 100644 (file)
@@ -33,6 +33,11 @@ void board_init_f(ulong dummy)
        board_init_r(NULL, 0);
 }
 
+void spl_board_init(void)
+{
+       board_init();
+}
+
 u32 spl_boot_device(void)
 {
        u32 mode;
index fc2f2260f888a308d26d7a63fb5db6e5b95b78df..a1703f0899c68323d410b91551527fd64253f6f4 100644 (file)
@@ -13,6 +13,8 @@
 #include <fat.h>
 #include <version.h>
 #include <image.h>
+#include <fpga.h>
+#include <xilinx.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -69,6 +71,35 @@ static int mmc_load_image_raw_os(struct mmc *mmc)
 }
 #endif
 
+#ifdef CONFIG_SPL_FPGA_SUPPORT
+static int mmc_load_fpga_image_fat(struct mmc *mmc)
+{
+       int err;
+       int devnum = 0;
+       const fpga_desc *const desc = fpga_get_desc(devnum);
+       Xilinx_desc *desc_xilinx = desc->devdesc;
+
+       /* FIXME = standard file size + header desc_xilinx->size + 0x6c */
+       err = file_fat_read(CONFIG_SPL_FPGA_LOAD_ARGS_NAME,
+                           (void *)CONFIG_SPL_FPGA_LOAD_ADDR,
+                           0);
+       if (err <= 0) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+               printf("spl: error reading image %s, err - %d\n",
+                      CONFIG_SPL_FAT_LOAD_ARGS_NAME, err);
+#endif
+               return -1;
+       }
+#ifdef CONFIG_SPL_FPGA_BIT
+       return fpga_loadbitstream(devnum, (char *)CONFIG_SPL_FPGA_LOAD_ADDR,
+                                 desc_xilinx->size);
+#else
+       return fpga_load(devnum, (const void *)CONFIG_SPL_FPGA_LOAD_ADDR,
+                        desc_xilinx->size);
+#endif
+}
+#endif
+
 #ifdef CONFIG_SPL_FAT_SUPPORT
 static int mmc_load_image_fat(struct mmc *mmc, const char *filename)
 {
@@ -161,6 +192,9 @@ void spl_mmc_load_image(void)
 #endif
                        hang();
                }
+#ifdef CONFIG_SPL_FPGA_SUPPORT
+               mmc_load_fpga_image_fat(mmc);
+#endif
 
 #ifdef CONFIG_SPL_OS_BOOT
                if (spl_start_uboot() || mmc_load_image_fat_os(mmc))
index b940d9b316bc67ead42096066502032207c88650..2ed2f959a1e04b61752bf2e0dbcd8f97bbf31e99 100644 (file)
@@ -38,7 +38,7 @@ static void fpga_no_sup(char *fn, char *msg)
 /* fpga_get_desc
  *     map a device number to a descriptor
  */
-static const fpga_desc *const fpga_get_desc(int devnum)
+const fpga_desc *const fpga_get_desc(int devnum)
 {
        fpga_desc *desc = (fpga_desc *)NULL;
 
index 993656f2d95eb4d28d1dbb64e0bc22053bc26daa..cc00280c51a25877e8c2e2dbe4febce7ee21c146 100644 (file)
 #define CONFIG_SPL_LIBCOMMON_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_BOARD_INIT
 
 #define CONFIG_SPL_LDSCRIPT    "arch/arm/cpu/armv7/zynq/u-boot-spl.lds"
 
 /* Disable dcache for SPL just for sure */
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_SYS_DCACHE_OFF
-#undef CONFIG_FPGA
+#endif
+
+/* FPGA support */
+#define CONFIG_SPL_FPGA_SUPPORT
+#define CONFIG_SPL_FPGA_LOAD_ADDR      0x1000000
+/* #define CONFIG_SPL_FPGA_BIT */
+#ifdef CONFIG_SPL_FPGA_BIT
+# define CONFIG_SPL_FPGA_LOAD_ARGS_NAME "download.bit"
+#else
+# define CONFIG_SPL_FPGA_LOAD_ARGS_NAME "fpga.bin"
 #endif
 
 /* MMC support */
index 15e603a169d9f643173d84baf914e7690f56b5f0..acc9efc883b2fe5cc03e616935dd16db41aaa334 100644 (file)
@@ -40,6 +40,7 @@ typedef struct {              /* typedef fpga_desc */
 extern void fpga_init(void);
 extern int fpga_add(fpga_type devtype, void *desc);
 extern int fpga_count(void);
+extern const fpga_desc *const fpga_get_desc(int devnum);
 extern int fpga_load(int devnum, const void *buf, size_t bsize);
 extern int fpga_loadbitstream(int devnum, char *fpgadata, size_t size);
 extern int fpga_dump(int devnum, const void *buf, size_t bsize);
index 5e5472d97cefe583abd8be8c06e2834945e79c77..c7b626c4bcc17339637447b53444175d2aac4367 100644 (file)
@@ -68,6 +68,7 @@ LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/
 LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/
 LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/
 LIBS-y += fs/
+LIBS-$(CONFIG_SPL_FPGA_SUPPORT) += drivers/fpga/
 LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/
 LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/ \
        drivers/power/pmic/