From: eran.liberty at gmail.com <eran.liberty@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] add: fpga loadi <dev> <src> sub command.
Date: Tue, 03 Jul 2007 16:51:45 -0000 [thread overview]
Message-ID: <E1I5lbL-0004T6-WE@mail.sourceforge.net> (raw)
Adds the capability to load an image packaged with mkimage either in compressed form or not.
(raw gzip & bzip2 images packed with mkimage)
fpga loadi <device number> <address of image>
Signed-off-by: Eran Liberty <eran.liberty@gmail.com>
Index: common/cmd_fpga.c
===================================================================
--- common/cmd_fpga.c (.../tags/trunk/20070620_2_merge_to_exsw6000) (revision 69)
+++ common/cmd_fpga.c (.../branches/exsw6000) (revision 69)
@@ -32,6 +32,7 @@
#endif
#include <fpga.h>
#include <malloc.h>
+#include <bzlib.h>
#if 0
#define FPGA_DEBUG
@@ -45,6 +46,9 @@
#if defined (CONFIG_FPGA) && ( CONFIG_COMMANDS & CFG_CMD_FPGA )
+extern int gunzip (void *dst, int dstlen, unsigned char *src,
+ unsigned long *lenp);
+
/* Local functions */
static void fpga_usage (cmd_tbl_t * cmdtp);
static int fpga_get_op (char *opstr);
@@ -56,7 +60,92 @@
#define FPGA_LOADB 2
#define FPGA_DUMP 3
#define FPGA_LOADMK 4
+#define FPGA_LOADI 5
+/* Load an image */
+int fpga_loadi (int devnum, void *buf)
+{
+ ulong addr = (ulong) (buf);
+ ulong data, len, checksum;
+ image_header_t hdr;
+ unsigned int unc_len;
+ unsigned int *punc_len = &unc_len;
+ int i;
+
+ /* Copy header so we can blank CRC field for re-calculation */
+#ifdef CONFIG_HAS_DATAFLASH
+ if (addr_dataflash (addr)) {
+ read_dataflash (addr, sizeof (image_header_t), (char *)&hdr);
+ } else
+#endif
+ memmove (&hdr, (char *)addr, sizeof (image_header_t));
+ if (ntohl (hdr.ih_magic) != IH_MAGIC) {
+ puts ("Bad Magic Number\n");
+ return 1;
+ }
+ data = (ulong) & hdr;
+ len = sizeof (image_header_t);
+
+ checksum = ntohl (hdr.ih_hcrc);
+ hdr.ih_hcrc = 0;
+
+ if (crc32 (0, (uchar *) data, len) != checksum) {
+ puts ("Bad Header Checksum\n");
+ return 1;
+ }
+#ifdef CONFIG_HAS_DATAFLASH
+ if (addr_dataflash (addr)) {
+ len = ntohl (hdr.ih_size) + sizeof (image_header_t);
+ read_dataflash (addr, len, (char *)CFG_LOAD_ADDR);
+ addr = CFG_LOAD_ADDR;
+ }
+#endif
+
+ print_image_hdr ((image_header_t *) addr);
+
+ data = addr + sizeof (image_header_t);
+ len = ntohl (hdr.ih_size);
+
+ puts (" Verifying Checksum ... ");
+ if (crc32 (0, (uchar *) data, len) != ntohl (hdr.ih_dcrc)) {
+ printf ("Bad Data CRC\n");
+ return 1;
+ }
+ puts ("OK\n");
+
+ switch (hdr.ih_comp) {
+ case IH_COMP_NONE:
+ memmove ((char *)CFG_LOAD_ADDR, (void *)data, len);
+ break;
+ case IH_COMP_GZIP:
+ if (gunzip
+ ((char *)CFG_LOAD_ADDR, unc_len, (uchar *) data, &len)
+ != 0) {
+ puts ("GUNZIP ERROR - FPGA not loaded\n");
+ return 1;
+ }
+ len = unc_len;
+ break;
+
+#ifdef CONFIG_BZIP2
+ case IH_COMP_BZIP2:
+ i = BZ2_bzBuffToBuffDecompress ((char *)CFG_LOAD_ADDR, punc_len,
+ (char *)data, len, 1, 0);
+ if (i != BZ_OK) {
+ printf ("BUNZIP2 ERROR %d - FPGA not loaded!\n", i);
+ return 1;
+ }
+ len = unc_len;
+ break;
+#endif /* CONFIG_BZIP2 */
+ default:
+ printf ("Unimplemented compression type %d\n", hdr.ih_comp);
+ return 1;
+ }
+
+ return fpga_load(devnum,(char *)CFG_LOAD_ADDR,len);
+}
+
/* Convert bitstream data and load into the fpga */
int fpga_loadbitstream(unsigned long dev, char* fpgadata, size_t size)
{
@@ -248,6 +337,10 @@
rc = fpga_load (dev, fpga_data, data_size);
break;
+ case FPGA_LOADI:
+ rc = fpga_loadi (dev, fpga_data);
+ break;
+
case FPGA_LOADB:
rc = fpga_loadbitstream(dev, fpga_data, data_size);
break;
@@ -298,6 +391,8 @@
op = FPGA_INFO;
} else if (!strcmp ("loadb", opstr)) {
op = FPGA_LOADB;
+ } else if (!strcmp ("loadi", opstr)) {
+ op = FPGA_LOADI;
} else if (!strcmp ("load", opstr)) {
op = FPGA_LOAD;
} else if (!strcmp ("loadmk", opstr)) {
@@ -317,6 +412,7 @@
"fpga [operation type] [device number] [image address] [image size]\n"
"fpga operations:\n"
"\tinfo\tlist known device information\n"
+ "\tloadi\tLoad device from u-boot image\n"
"\tload\tLoad device from memory buffer\n"
"\tloadb\tLoad device from bitstream buffer (Xilinx devices only)\n"
"\tloadmk\tLoad device generated with mkimage\n"
next reply other threads:[~2007-07-03 16:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-03 16:51 eran.liberty at gmail.com [this message]
2007-07-03 17:50 ` [U-Boot-Users] [PATCH] add: fpga loadi <dev> <src> sub command Grant Likely
2007-07-04 7:13 ` eran liberty
2007-07-04 16:23 ` Grant Likely
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1I5lbL-0004T6-WE@mail.sourceforge.net \
--to=eran.liberty@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox