Index | Thread | Search

From:
Thomas Dettbarn <dettus@dettus.net>
Subject:
New port 3/4: cad/openfpgaloader-1.1.1pl20260604
To:
ports@openbsd.org
Date:
Sat, 13 Jun 2026 23:07:53 +0200

Download raw body.

Thread
  • Thomas Dettbarn:

    New port 3/4: cad/openfpgaloader-1.1.1pl20260604

Please find new port cad/nextpnr attached to this email. (In the form of 
a git
diff).
Please disregard the attachments to my previous emails, this is the one I
would like to release to the ports tree of OpenBSD. Thus far, the only thing
I can say with confidence is that ItWorksOnMyMachine(tm).

In response to Stuarts comments, which you can find in this email:
  https://marc.info/?l=openbsd-ports&m=178096049470406&w=2
There is a chance that people have gotten a board, which will cause problems
with the uftdi(4) module. Sadly, patching the kernel is the most precise 
method
of dealing with it, so I have decided to devote the package README to 
it. You
can find my reasoning for it inside said file.



In total, I plan on sending four ports over this email list:
cad/prjpeppercorn-1.13
cad/nextpnr-0.10pl20260613
cad/openfpgaloader-1.1.1pl20260604
cad/yosys-takeover-0.66pl20260612 ... this one needs a better name. (See its
accompanying email for details).

In lieu of a proper method of checking, I have set up a website with a 
simple
helloworld style example: https://dettus.net/fpga_stuff/1.html. Even if you
do not have a physical FPGA board at home, the instructions might give 
you an
idea about how the tools are supposed to work together.

So, please have another review. Thank you so so much!

diff --git a/cad/openfpgaloader/Makefile b/cad/openfpgaloader/Makefile
new file mode 100644
index 00000000000..fbb65f85aeb
--- /dev/null
+++ b/cad/openfpgaloader/Makefile
@@ -0,0 +1,26 @@
+COMMENT=	universal utility for programming FPGAs
+CATEGORIES=	cad
+V=		1.1.1pl20260604
+DISTNAME=	openfpgaloader-${V}
+
+GH_ACCOUNT=	trabucayre
+GH_PROJECT=	openFPGALoader
+GH_COMMIT=	bf8106ef5f6e92017c5901737db3c3c9593e8b4d
+
+HOMEPAGE=	https://github.com/trabucayre/openFPGALoader
+MAINTAINER=	Thomas Dettbarn <dettus@dettus.net>
+
+# APACHE-2.0
+PERMIT_PACKAGE=	yes
+
+WANTLIB=	c c++ c++abi m pthread z
+MODULES=	devel/cmake
+
+NO_TEST=	Yes
+
+LIB_DEPENDS=	devel/libftdi1
+LIB_DEPENDS+=	devel/libusb1
+
+
+.include <bsd.port.mk>
+
diff --git a/cad/openfpgaloader/distinfo b/cad/openfpgaloader/distinfo
new file mode 100644
index 00000000000..f7b4fe5df52
--- /dev/null
+++ b/cad/openfpgaloader/distinfo
@@ -0,0 +1,2 @@
+SHA256 (openfpgaloader-1.1.1pl20260604-bf8106ef.tar.gz) = wBNVSeoPICa1PcMDLwmw1CUJUq+u+IQ+NwoIFMOpGlc=
+SIZE (openfpgaloader-1.1.1pl20260604-bf8106ef.tar.gz) = 2931988
diff --git a/cad/openfpgaloader/pkg/DESCR b/cad/openfpgaloader/pkg/DESCR
new file mode 100644
index 00000000000..e738c352fbe
--- /dev/null
+++ b/cad/openfpgaloader/pkg/DESCR
@@ -0,0 +1,6 @@
+Universal utility for programming FPGAs. Compatible with many boards,
+cables and FPGA from major manufacturers (Xilinx, Altera/Intel,
+Lattice, Gowin, Efinix, Anlogic, Cologne Chip). openFPGALoader works on
+Linux, Windows, macOS and OpenBSD.
+
+
diff --git a/cad/openfpgaloader/pkg/PLIST b/cad/openfpgaloader/pkg/PLIST
new file mode 100644
index 00000000000..82f98ecfdef
--- /dev/null
+++ b/cad/openfpgaloader/pkg/PLIST
@@ -0,0 +1,115 @@
+@bin bin/openFPGALoader
+share/doc/pkg-readmes/${PKGSTEM}
+share/openFPGALoader/
+share/openFPGALoader/bpiOverJtag_xc7k480tffg1156.bit.gz
+share/openFPGALoader/spiOverJtag_10cl006144.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl016484.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl025256.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl055484.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce215.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce223.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce423.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce523.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce927.rbf.gz
+share/openFPGALoader/spiOverJtag_5sgsd5.rbf.gz
+share/openFPGALoader/spiOverJtag_efinix_t120f324.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_t13f256.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_t8f81.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_ti180j484.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_ti60f225.bit.gz
+share/openFPGALoader/spiOverJtag_ep4ce1017.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce11523.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce1523.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce2217.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce622.rbf.gz
+share/openFPGALoader/spiOverJtag_xc3s500evq100.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx100fgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx150tcsg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx150tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx16csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx16ftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx25csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx25tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx45csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx45tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx9csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx9tqg144.bit.gz
+share/openFPGALoader/spiOverJtag_xc6vlx130tff784.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tfgg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12tcpg238.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tfbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tfbg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tffg1156.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tsbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25tcpg238.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg325_1v35.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tfgg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k160tffg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tfbg900.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tffg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tffg900.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k420tffg901.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k70tfbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k70tfbg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100fgga676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15cpga196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25csga324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50csga324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6cpga196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75fgga676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7vx330tffg1157.bit.gz
+share/openFPGALoader/spiOverJtag_xcau10p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcau15p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcku040-ffva1156.bit.gz
+share/openFPGALoader/spiOverJtag_xcku060-ffva1156.bit.gz
+share/openFPGALoader/spiOverJtag_xcku3p-ffva676.bit.gz
+share/openFPGALoader/spiOverJtag_xcku5p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcvu37p-fsvh2892.bit.gz
+share/openFPGALoader/spiOverJtag_xcvu9p-flga2104.bit.gz
diff --git a/cad/openfpgaloader/pkg/README b/cad/openfpgaloader/pkg/README
new file mode 100644
index 00000000000..188ef10aec4
--- /dev/null
+++ b/cad/openfpgaloader/pkg/README
@@ -0,0 +1,70 @@
++-------------------------------------------------------------------------------
+| Running ${PKGSTEM} on OpenBSD
++-------------------------------------------------------------------------------
+
+Note about uftdi(4)
+===================
+
+Up until OpenBSD 7.9, using some FPGA devices with openFPGALoader is sligthly
+problematic, resulting in error messages like this:
+
+  fail to read data usb bulk read failed
+  JTAG init failed with: low level FTDI init failed
+
+This happens because of the FPGA devices being incorrectly attached to the
+uftdi(4) module inside the kernel. There are two ways of preventing this:
+
+ 1. By deactivating uftdi(4) completely
+ 2. By patching uftdi(4), so that it does not recognize the USB device.
+
+In both cases, the ugen(4) module will be attached as a fallback.
+
+Deactivating uftdi(4) with bsd.re-config(5)
+-------------------------------------------
+The following commands
+
+  echo "disable uftdi" >>/etc/bsd.re-config
+  /usr/libexec/reorder_kernel
+  reboot
+
+are disabling the utfi(4) module and relinking the kernel. After the reboot,
+the device can be used.
+
+
+
+Deactivating uftdi(4) with config
+---------------------------------
+The following commands
+
+  config -e -f -o /bsd.nouftdi /bsd
+  ukc> disable uftdi*
+  ukc> quit
+  reboot
+
+Are disabling the module inside the kernel binary.
+
+
+Patching the kernel
+-------------------
+The most precise method is to patch the uftdi(4) module inside the kernel.
+The list of devices uftdi(4) attaches itself to is the array uftdi_devs[] in
+the file /usr/src/sys/dev/usb/uftdi.c.
+
+One single device can be deactived by commenting out the corresponding line:
+
+  { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20 },
+  //{ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C },
+  { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L },
+
+To find said line, the output of lsusb
+
+  Bus 001 Device 006: ID 0403:6010 Future Technology Devices International
+
+can be mapped to the constant defines in /usr/src/sys/dev/usb/usbdevs.h
+Afterwards, the kernel can be rebuild, as described in the OpenBSD FAQ5:
+
+  https://www.openbsd.org/faq/faq5.html#Options
+
+This method is recommend for FPGA projects where an additional USB to UART
+adapter is involved.
+