X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=fx2%2Fcypress_fx2_xilprg.patch;h=23984e075e1b388f4d337dc5fc7433d6575a4178;hb=HEAD;hp=6b9f5133d09a90a7a294f6cc7fb70af2d12f618b;hpb=c3e1d629125a9b6e9c3e47c600593562dcad0a21;p=my-code%2Ffpga.git diff --git a/fx2/cypress_fx2_xilprg.patch b/fx2/cypress_fx2_xilprg.patch index 6b9f513..23984e0 100644 --- a/fx2/cypress_fx2_xilprg.patch +++ b/fx2/cypress_fx2_xilprg.patch @@ -1,218 +1,6 @@ -diff -Nur xilprg-0.5/cypress_fx2_xilprg.patch xilprg-new/cypress_fx2_xilprg.patch ---- xilprg-0.5/cypress_fx2_xilprg.patch 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/cypress_fx2_xilprg.patch 2007-04-10 10:33:17.000000000 +0200 -@@ -0,0 +1,208 @@ -+diff -Nur xilprg-0.5/makefile xilprg-new/makefile -+--- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200 -++++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200 -+@@ -40,6 +40,7 @@ -+ $(SRC_DIR)/prgfile.cpp \ -+ $(SRC_DIR)/chip.cpp \ -+ $(SRC_DIR)/parport.cpp \ -++ $(SRC_DIR)/onbusb.cpp \ -+ $(SRC_DIR)/cable.cpp \ -+ $(SRC_DIR)/digilent.cpp \ -+ $(SRC_DIR)/xilinx.cpp -+diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp -+--- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200 -++++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200 -+@@ -49,6 +49,7 @@ -+ #include "chip.h" -+ #include "cmdline.h" -+ #include "digilent.h" -++#include "onbusb.h" -+ #include "parport.h" -+ -+ cable::cable() -+@@ -587,6 +588,9 @@ -+ if (stricmp(argv[0], "dusb") == 0) -+ cbl = new digilent; -+ else -++ if (stricmp(argv[0], "ousb") ==0) -++ cbl = new onbusb; -++ else -+ { -+ msgf(STR_INVALID_CABLE_DEF); -+ return NULL; -+diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp -+--- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100 -++++ xilprg-new/src/onbusb.cpp 2007-04-07 17:15:34.000000000 +0200 -+@@ -0,0 +1,113 @@ -++/* -++ * onboard usb -++ * -++ * author: till & frank zirkelbach -++ * -++ */ -++ -++#include "xilprg.h" -++#include "utils.h" -++#include "onbusb.h" -++ -++onbusb::onbusb() -++{ -++ handle=NULL; -++} -++ -++onbusb::~onbusb() -++{ -++} -++ -++int onbusb::open() -++{ -++ -++ struct usb_bus *bus; -++ -++ usb_init(); -++ usb_find_busses(); -++ usb_find_devices(); -++ -++ bus=usb_get_busses(); -++ while(bus) { -++ dev=bus->devices; -++ while(dev) { -++ if(dev->descriptor.idVendor==USB_VENDOR_ID && -++ dev->descriptor.idProduct==USB_PRODUCT_ID) -++ /* found the device */ -++ return 0; -++ dev=dev->next; -++ } -++ bus=bus->next; -++ } -++ -++ return -1; -++ -++ handle=usb_open(dev); -++ if(handle==NULL) -++ goto cleanup; -++ -++ if(usb_set_configuration(handle,1)<0) -++ goto cleanup; -++ -++ if(usb_claim_interface(handle,0)<0) -++ goto cleanup; -++ -++ if(usb_set_altinterface(handle,1)<0) -++ goto cleanup; -++ -++ data = 0x10; -++ -++ reset_tap_state(); -++ -++ return 0; -++ -++cleanup: -++ -++ close(); -++ -++ return 1; -++ -++} -++ -++int onbusb::close() -++{ -++ -++ usb_close(handle); -++ -++ return 0; -++} -++ -++int onbusb::get_description(string& desc) -++{ -++ char s[256]; -++ sprintf(s, "onboard usb bitbanging"); -++ desc = s; -++ return 0; -++} -++ -++void onbusb::set_tdi(int bit) -++{ -++ if (bit) data |= 0x04; else data &= ~0x04; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++void onbusb::set_tck(int bit) -++{ -++ if (bit) data |= 0x10; else data &= ~0x10; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++void onbusb::set_tms(int bit) -++{ -++ if (bit) data |= 0x08; else data &= ~0x08; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++int onbusb::get_tdo() -++{ -++ usb_bulk_read(handle,0x81,&data,1,0); -++ return data & 0x01 ? 1 : 0; -++} -+diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h -+--- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100 -++++ xilprg-new/src/onbusb.h 2007-04-07 17:14:07.000000000 +0200 -+@@ -0,0 +1,43 @@ -++/* -++ * onboard usb -++ * -++ * author: till & frank zirkelbach -++ * -++ */ -++ -++#ifndef _ONBUSB_H_INCLUDED_ -++#define _ONBUSB_H_INCLUDED_ -++ -++#include "cable.h" -++ -++#include -++ -++class onbusb : public cable -++{ -++public: -++ onbusb(); -++ virtual ~onbusb(); -++ -++ enum -++ { -++ USB_VENDOR_ID = 0x04b4, -++ USB_PRODUCT_ID = 0x8613 -++ }; -++ -++ virtual int open(); -++ virtual int close(); -++ -++ virtual int get_description(string&); -++ -++ virtual void set_tdi(int); -++ virtual void set_tck(int); -++ virtual void set_tms(int); -++ virtual int get_tdo(); -++ -++protected: -++ char data; -++ struct usb_device *dev; -++ usb_dev_handle *handle; -++}; -++ -++#endif -+diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp -+--- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200 -++++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200 -+@@ -137,7 +137,7 @@ -+ //STR_CMD_CABLE -+ "cable\0" -+ "Sets programmer cable\0" -+- "cable {xil3 [ioaddr]|dusb}\0", -++ "cable {xil3 [ioaddr]|dusb|ousb}\0", -+ //STR_CMD_CHIPS -+ "chips\0" -+ "Prints supported devices\0" -diff -Nur xilprg-0.5/makefile xilprg-new/makefile +diff -Nur xilprg-0.5/makefile xilprg-patched/makefile --- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200 -+++ xilprg-new/makefile 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-patched/makefile 2007-09-04 20:59:03.000000000 +0200 @@ -40,6 +40,7 @@ $(SRC_DIR)/prgfile.cpp \ $(SRC_DIR)/chip.cpp \ @@ -221,9 +9,9 @@ diff -Nur xilprg-0.5/makefile xilprg-new/makefile $(SRC_DIR)/cable.cpp \ $(SRC_DIR)/digilent.cpp \ $(SRC_DIR)/xilinx.cpp -diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp +diff -Nur xilprg-0.5/src/cable.cpp xilprg-patched/src/cable.cpp --- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200 -+++ xilprg-new/src/cable.cpp 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-patched/src/cable.cpp 2007-09-04 20:59:03.000000000 +0200 @@ -49,6 +49,7 @@ #include "chip.h" #include "cmdline.h" @@ -242,14 +30,14 @@ diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp { msgf(STR_INVALID_CABLE_DEF); return NULL; -diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-patched/src/onbusb.cpp --- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/src/onbusb.cpp 2007-04-10 11:32:01.000000000 +0200 -@@ -0,0 +1,126 @@ ++++ xilprg-patched/src/onbusb.cpp 2007-09-04 22:12:47.000000000 +0200 +@@ -0,0 +1,124 @@ +/* + * onboard usb + * -+ * author: till & frank zirkelbach ++ * author: till, hunz, koppi, hackbard + * + */ + @@ -257,6 +45,8 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +#include "utils.h" +#include "onbusb.h" + ++#define GET_TDO 0x20 ++ +onbusb::onbusb() +{ + handle=NULL; @@ -280,39 +70,28 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp + dev=bus->devices; + while(dev) { + if(dev->descriptor.idVendor==USB_VENDOR_ID && -+ dev->descriptor.idProduct==USB_PRODUCT_ID) { -+ -+ /* found the device */ -+ -+ printf("found matching usb device\n"); -+ -+ handle=usb_open(dev); -+ if(handle==NULL) -+ goto cleanup; -+ -+ printf("got handle\n"); -+ -+ if(usb_set_configuration(handle,1)<0) ++ dev->descriptor.idProduct==USB_PRODUCT_ID) { ++ ++ /* found the device */ ++ handle=usb_open(dev); ++ if(handle==NULL) + goto cleanup; -+ -+ printf("set configuration\n"); + -+ if(usb_claim_interface(handle,0)<0) ++ if(usb_set_configuration(handle,1)<0) + goto cleanup; -+ -+ printf("claimed interface\n"); + -+ if(usb_set_altinterface(handle,1)<0) -+ goto cleanup; -+ -+ printf("set alt interface\n"); ++ if(usb_claim_interface(handle,0)<0) ++ goto cleanup; + -+ data = 0x10; ++ if(usb_set_altinterface(handle,1)<0) ++ goto cleanup; + -+ reset_tap_state(); ++ data = 0x10; + -+ return 0; -+ } ++ reset_tap_state(); ++ ++ return 0; ++ } + dev=dev->next; + } + bus=bus->next; @@ -322,10 +101,10 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp + +cleanup: + -+ perror("device open"); -+ + close(); + ++ printf("usb init failed!\n"); ++ + return -1; + +} @@ -341,7 +120,7 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +int onbusb::get_description(string& desc) +{ + char s[256]; -+ sprintf(s, "onboard usb bitbanging"); ++ sprintf(s, "onboard usb bitbanging (till, hunz, koppi, hackbard)"); + desc = s; + return 0; +} @@ -349,37 +128,44 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +void onbusb::set_tdi(int bit) +{ + if (bit) data |= 0x04; else data &= ~0x04; -+ data|=0xa0; -+ //usb_bulk_write(handle,0x01,&data,1,0); ++ usb_bulk_write(handle,0x01,&data,1,0); +} + +void onbusb::set_tck(int bit) +{ + if (bit) data |= 0x10; else data &= ~0x10; -+ data|=0xa0; + usb_bulk_write(handle,0x01,&data,1,0); +} + +void onbusb::set_tms(int bit) +{ + if (bit) data |= 0x08; else data &= ~0x08; -+ data|=0xa0; -+ //usb_bulk_write(handle,0x01,&data,1,0); ++ usb_bulk_write(handle,0x01,&data,1,0); +} + +int onbusb::get_tdo() +{ ++int i; ++ /* send get tdo command */ ++ //data=GET_TDO; ++ //usb_bulk_write(handle,0x01,&data,1,0); ++ /* receive tdo */ ++ // dirty! 1 dummy read is enough. my guess: ++ // - either we have to wait that time for correct state at tdi ++ // - or/and it's due to the EP1INBUF=1 (buf size?) todo: ez-usb doc! ++ // - initial wrong states don't harm ++ for(i=0;i<1;i++) usb_bulk_read(handle,0x81,&data,1,1); + usb_bulk_read(handle,0x81,&data,1,0); + return data & 0x01 ? 1 : 0; +} -diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h +diff -Nur xilprg-0.5/src/onbusb.h xilprg-patched/src/onbusb.h --- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/src/onbusb.h 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-patched/src/onbusb.h 2007-09-04 20:59:03.000000000 +0200 @@ -0,0 +1,43 @@ +/* + * onboard usb + * -+ * author: till & frank zirkelbach ++ * author: till, hunz, koppi, hackbard + * + */ + @@ -419,9 +205,9 @@ diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h +}; + +#endif -diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp +diff -Nur xilprg-0.5/src/strtable.cpp xilprg-patched/src/strtable.cpp --- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200 -+++ xilprg-new/src/strtable.cpp 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-patched/src/strtable.cpp 2007-09-04 20:59:03.000000000 +0200 @@ -137,7 +137,7 @@ //STR_CMD_CABLE "cable\0"