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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.