In bitstream decoding you can directly check device
which you want to load and in fpga.c are fpga_validate
and fpga_dev_info functions which should be used for it.
Signed-off-by: Michal Simek michal.si...@xilinx.com
---
Changes in v2: None
common/cmd_fpga.c | 94 -
drivers/fpga/fpga.c | 94 +
include/fpga.h | 1 +
3 files changed, 95 insertions(+), 94 deletions(-)
diff --git a/common/cmd_fpga.c b/common/cmd_fpga.c
index f3579bb..aa14ceb 100644
--- a/common/cmd_fpga.c
+++ b/common/cmd_fpga.c
@@ -44,100 +44,6 @@ static int fpga_get_op(char *opstr);
#define FPGA_DUMP 3
#define FPGA_LOADMK 4
-/* Convert bitstream data and load into the fpga */
-int fpga_loadbitstream(unsigned long dev, char *fpgadata, size_t size)
-{
-#if defined(CONFIG_FPGA_XILINX)
- unsigned int length;
- unsigned int swapsize;
- char buffer[80];
- unsigned char *dataptr;
- unsigned int i;
- int rc;
-
- dataptr = (unsigned char *)fpgadata;
-
- /* skip the first bytes of the bitsteam, their meaning is unknown */
- length = (*dataptr 8) + *(dataptr + 1);
- dataptr += 2;
- dataptr += length;
-
- /* get design name (identifier, length, string) */
- length = (*dataptr 8) + *(dataptr + 1);
- dataptr += 2;
- if (*dataptr++ != 0x61) {
- debug(%s: Design name id not recognized in bitstream\n,
- __func__);
- return FPGA_FAIL;
- }
-
- length = (*dataptr 8) + *(dataptr + 1);
- dataptr += 2;
- for (i = 0; i length; i++)
- buffer[i] = *dataptr++;
-
- printf( design filename = \%s\\n, buffer);
-
- /* get part number (identifier, length, string) */
- if (*dataptr++ != 0x62) {
- printf(%s: Part number id not recognized in bitstream\n,
- __func__);
- return FPGA_FAIL;
- }
-
- length = (*dataptr 8) + *(dataptr + 1);
- dataptr += 2;
- for (i = 0; i length; i++)
- buffer[i] = *dataptr++;
- printf( part number = \%s\\n, buffer);
-
- /* get date (identifier, length, string) */
- if (*dataptr++ != 0x63) {
- printf(%s: Date identifier not recognized in bitstream\n,
- __func__);
- return FPGA_FAIL;
- }
-
- length = (*dataptr 8) + *(dataptr+1);
- dataptr += 2;
- for (i = 0; i length; i++)
- buffer[i] = *dataptr++;
- printf( date = \%s\\n, buffer);
-
- /* get time (identifier, length, string) */
- if (*dataptr++ != 0x64) {
- printf(%s: Time identifier not recognized in bitstream\n,
- __func__);
- return FPGA_FAIL;
- }
-
- length = (*dataptr 8) + *(dataptr+1);
- dataptr += 2;
- for (i = 0; i length; i++)
- buffer[i] = *dataptr++;
- printf( time = \%s\\n, buffer);
-
- /* get fpga data length (identifier, length) */
- if (*dataptr++ != 0x65) {
- printf(%s: Data length id not recognized in bitstream\n,
- __func__);
- return FPGA_FAIL;
- }
- swapsize = ((unsigned int) *dataptr 24) +
- ((unsigned int) *(dataptr + 1) 16) +
- ((unsigned int) *(dataptr + 2) 8) +
- ((unsigned int) *(dataptr + 3));
- dataptr += 4;
- printf( bytes in bitstream = %d\n, swapsize);
-
- rc = fpga_load(dev, dataptr, swapsize);
- return rc;
-#else
- printf(Bitstream support only for Xilinx devices\n);
- return FPGA_FAIL;
-#endif
-}
-
/* - */
/* command form:
* fpga op device number data addr datasize
diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c
index 43bdf4f..b74c84f 100644
--- a/drivers/fpga/fpga.c
+++ b/drivers/fpga/fpga.c
@@ -187,6 +187,100 @@ int fpga_add(fpga_type devtype, void *desc)
return devnum;
}
+/* Convert bitstream data and load into the fpga */
+int fpga_loadbitstream(unsigned long dev, char *fpgadata, size_t size)
+{
+#if defined(CONFIG_FPGA_XILINX)
+ unsigned int length;
+ unsigned int swapsize;
+ char buffer[80];
+ unsigned char *dataptr;
+ unsigned int i;
+ int rc;
+
+ dataptr = (unsigned char *)fpgadata;
+
+ /* skip the first bytes of the bitsteam, their meaning is unknown */
+ length = (*dataptr 8) + *(dataptr + 1);
+ dataptr += 2;
+ dataptr += length;
+
+ /* get design name (identifier, length, string) */
+ length = (*dataptr 8) + *(dataptr + 1);
+ dataptr += 2;
+ if (*dataptr++ != 0x61) {
+ debug(%s: Design name id not recognized in bitstream\n,
+ __func__);
+ return