diff mbox series

[v2] USB: serial: ftdi_sio: add support for Altera USB Blaster 3

Message ID 20250307154355.30772-1-boon.khai.ng@intel.com (mailing list archive)
State Superseded
Headers show
Series [v2] USB: serial: ftdi_sio: add support for Altera USB Blaster 3 | expand

Commit Message

Boon Khai Ng March 7, 2025, 3:43 p.m. UTC
The Altera USB Blaster 3, available as both a cable and an on-board
solution, is primarily used for programming and debugging FPGAs.

It interfaces with host software such as Quartus Programmer,
System Console, SignalTap, and Nios Debugger. The device utilizes
either an FT2232 or FT4232 chip.

Enabling support for various configurations of the USB Blaster 3
by including the appropriate VID/PID pairs, allowing it to function
as a serial device via ftdi_sio. The configurations are determined
by the hardware design and include:

1) PID 0x6020, FT2232, 1 JTAG port
2) PID 0x6021, FT2232, 2 JTAG ports
3) PID 0x6022, FT2232, 1 JTAG port + Port B as UART
4) PID 0x6023, FT2232, Cable USB-Blaster 3
5) PID 0x6024, FT4232, 1 JTAG port
6) PID 0x6025, FT4232, 1 JTAG port + Port C as UART
7) PID 0x6026, FT4232, 1 JTAG port + Port C, D as UART
8) PID 0x602e, FT4232, 1 JTAG port + Port B, C, D as UART

These configurations allow for flexibility in how the
USB Blaster 3 is used, depending on the specific needs of the
hardware design.

Signed-off-by: Boon Khai Ng <boon.khai.ng@intel.com>
---
 drivers/usb/serial/ftdi_sio.c     | 14 ++++++++++++++
 drivers/usb/serial/ftdi_sio_ids.h | 13 +++++++++++++
 2 files changed, 27 insertions(+)

Comments

Johan Hovold March 11, 2025, 7:58 a.m. UTC | #1
On Fri, Mar 07, 2025 at 11:43:55PM +0800, Boon Khai Ng wrote:
> The Altera USB Blaster 3, available as both a cable and an on-board
> solution, is primarily used for programming and debugging FPGAs.
> 
> It interfaces with host software such as Quartus Programmer,
> System Console, SignalTap, and Nios Debugger. The device utilizes
> either an FT2232 or FT4232 chip.
> 
> Enabling support for various configurations of the USB Blaster 3
> by including the appropriate VID/PID pairs, allowing it to function
> as a serial device via ftdi_sio. The configurations are determined
> by the hardware design and include:
> 
> 1) PID 0x6020, FT2232, 1 JTAG port
> 2) PID 0x6021, FT2232, 2 JTAG ports
> 3) PID 0x6022, FT2232, 1 JTAG port + Port B as UART
> 4) PID 0x6023, FT2232, Cable USB-Blaster 3
> 5) PID 0x6024, FT4232, 1 JTAG port
> 6) PID 0x6025, FT4232, 1 JTAG port + Port C as UART
> 7) PID 0x6026, FT4232, 1 JTAG port + Port C, D as UART
> 8) PID 0x602e, FT4232, 1 JTAG port + Port B, C, D as UART
> 
> These configurations allow for flexibility in how the
> USB Blaster 3 is used, depending on the specific needs of the
> hardware design.
> 
> Signed-off-by: Boon Khai Ng <boon.khai.ng@intel.com>
> ---

Thanks for the update, I've applied this one now.

But for your future contributions, remember to put a short changelog
here under the cut-off (---) line when revising patches.

>  drivers/usb/serial/ftdi_sio.c     | 14 ++++++++++++++
>  drivers/usb/serial/ftdi_sio_ids.h | 13 +++++++++++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
> index e07c5e3eb18c..9b34e23b7091 100644
> --- a/drivers/usb/serial/ftdi_sio.c
> +++ b/drivers/usb/serial/ftdi_sio.c
> @@ -1079,6 +1079,20 @@ static const struct usb_device_id id_table_combined[] = {
>  		.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
>  	/* GMC devices */
>  	{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
> +	/* Altera USB Blaster 3 */
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6022_PID, 1) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6025_PID, 2) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 2) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 3) },

> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6029_PID, 2) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 2) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 3) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602C_PID, 1) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 1) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 2) },

These configurations were not mentioned in the commit message. Are they
also used for embedded designs?

> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 1) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 2) },
> +	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 3) },
>  	{ }					/* Terminating entry */
>  };

Johan
Boon Khai Ng March 11, 2025, 10:34 a.m. UTC | #2
> But for your future contributions, remember to put a short changelog here
> under the cut-off (---) line when revising patches.

My apology will include that next time.

> 
> These configurations were not mentioned in the commit message. Are they
> also used for embedded designs?

Looks like the table I provided in the commit message is mismatched with 
the one that I intended to check in for upstream.

Let me correct this, the one that I published for upstream was the actual tested
code, whereby we want the UART to be exposed to the ftdi_sio driver.

Below is the updated table, 
1) PID 0x6022, FT2232, 1 JTAG port(Port A) + Port B as UART
2) PID 0x6025, FT4232, 1 JTAG port(Port A) + Port C as UART
3) PID 0x6026, FT4232, 1 JTAG port(Port A) + Port C, D as UART
4) PID 0x6029, FT4232, 1 JTAG port(Port B) + Port C as UART
5) PID 0x602a, FT4232, 1 JTAG port(Port B) + Port C, D as UART
6) PID 0x602c, FT4232, 1 JTAG port(Port A) + Port B as UART
7) PID 0x602d, FT4232, 1 JTAG port(Port A) + Port B, C as UART
8) PID 0x602e, FT4232, 1 JTAG port(Port A) + Port B, C, D as UART

Since we need UART to be exposed to the ftdi_sio driver and the cable USB Blaster
does not support UART, will reword that on the commit message to remove the 
cable USB Blaster and left only the on-board USB Blaster.

Will submit a v3 on this, with the reworded commit message plus the change log.
Johan Hovold March 11, 2025, 12:33 p.m. UTC | #3
On Tue, Mar 11, 2025 at 10:34:33AM +0000, Ng, Boon Khai wrote:

> > These configurations were not mentioned in the commit message. Are they
> > also used for embedded designs?
> 
> Looks like the table I provided in the commit message is mismatched with 
> the one that I intended to check in for upstream.
> 
> Let me correct this, the one that I published for upstream was the actual tested
> code, whereby we want the UART to be exposed to the ftdi_sio driver.
> 
> Below is the updated table, 
> 1) PID 0x6022, FT2232, 1 JTAG port(Port A) + Port B as UART
> 2) PID 0x6025, FT4232, 1 JTAG port(Port A) + Port C as UART
> 3) PID 0x6026, FT4232, 1 JTAG port(Port A) + Port C, D as UART
> 4) PID 0x6029, FT4232, 1 JTAG port(Port B) + Port C as UART
> 5) PID 0x602a, FT4232, 1 JTAG port(Port B) + Port C, D as UART
> 6) PID 0x602c, FT4232, 1 JTAG port(Port A) + Port B as UART
> 7) PID 0x602d, FT4232, 1 JTAG port(Port A) + Port B, C as UART
> 8) PID 0x602e, FT4232, 1 JTAG port(Port A) + Port B, C, D as UART
> 
> Since we need UART to be exposed to the ftdi_sio driver and the cable USB Blaster
> does not support UART, will reword that on the commit message to remove the 
> cable USB Blaster and left only the on-board USB Blaster.

It may still be good to mention the cable in some way as it's not
obvious that there are both standalone (cable) and embedded variants.
 
> Will submit a v3 on this, with the reworded commit message plus the change log.

Sounds good. I'll wait for the v3.

Johan
Ng, Boon Khai March 11, 2025, 1:12 p.m. UTC | #4
> It may still be good to mention the cable in some way as it's not obvious that
> there are both standalone (cable) and embedded variants.

Alright Johan, will keep the USB Blaster 3 cable in the commit message,
and mention about the changes in this commit not including the cable because
it does not have UART.

Regards,
Boon Khai
diff mbox series

Patch

diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index e07c5e3eb18c..9b34e23b7091 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -1079,6 +1079,20 @@  static const struct usb_device_id id_table_combined[] = {
 		.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
 	/* GMC devices */
 	{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
+	/* Altera USB Blaster 3 */
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6022_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6025_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 3) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6029_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 3) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602C_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 3) },
 	{ }					/* Terminating entry */
 };
 
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
index 5ee60ba2a73c..52be47d684ea 100644
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -1612,3 +1612,16 @@ 
  */
 #define GMC_VID				0x1cd7
 #define GMC_Z216C_PID			0x0217 /* GMC Z216C Adapter IR-USB */
+
+/*
+ *  Altera USB Blaster 3 (http://www.altera.com).
+ */
+#define ALTERA_VID			0x09fb
+#define ALTERA_UB3_6022_PID		0x6022
+#define ALTERA_UB3_6025_PID		0x6025
+#define ALTERA_UB3_6026_PID		0x6026
+#define ALTERA_UB3_6029_PID		0x6029
+#define ALTERA_UB3_602A_PID		0x602a
+#define ALTERA_UB3_602C_PID		0x602c
+#define ALTERA_UB3_602D_PID		0x602d
+#define ALTERA_UB3_602E_PID		0x602e