icE1usb fw: Add support for the ICE1USB_DEV_GET_FW_BUILD control request

This was already defined but not implemented

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: Id65734153c92ef87bc9ecf967447e9bf11804f24
diff --git a/firmware/ice40-riscv/icE1usb/Makefile b/firmware/ice40-riscv/icE1usb/Makefile
index 1240a9f..36fd921 100644
--- a/firmware/ice40-riscv/icE1usb/Makefile
+++ b/firmware/ice40-riscv/icE1usb/Makefile
@@ -10,11 +10,12 @@
 DFU_UTIL = dfu-util
 
 TAG_PREFIX = icE1usb-fw
-GITVER = $(shell git describe --match '$(TAG_PREFIX)*')
+GITVER = $(shell git describe --match '$(TAG_PREFIX)*' --dirty)
 TARGET = $(GITVER)
 
 BOARD_DEFINE=BOARD_$(shell echo $(BOARD) | tr a-z\- A-Z_)
 CFLAGS=-Wall -Wextra -Wno-unused-parameter -Os -march=rv32i -mabi=ilp32 -ffreestanding -flto -nostartfiles -fomit-frame-pointer -Wl,--gc-section --specs=nano.specs -D$(BOARD_DEFINE) -I. -I../common
+CFLAGS += -DBUILD_INFO="\"$(GITVER) built $(shell date) on $(shell hostname)\""
 
 NO2USB_FW_VERSION=0
 include ../../../gateware/cores/no2usb/fw/fw.mk
diff --git a/firmware/ice40-riscv/icE1usb/fw_app.c b/firmware/ice40-riscv/icE1usb/fw_app.c
index 41ef3ab..880d2d6 100644
--- a/firmware/ice40-riscv/icE1usb/fw_app.c
+++ b/firmware/ice40-riscv/icE1usb/fw_app.c
@@ -69,7 +69,7 @@
 
 	/* Init console IO */
 	console_init();
-	puts("Booting App image..\n");
+	printf("\n\nBooting %s\n", fw_build_str);
 
 	/* LED */
 	led_init();
diff --git a/firmware/ice40-riscv/icE1usb/usb_dev.c b/firmware/ice40-riscv/icE1usb/usb_dev.c
index 1187047..e19d9a0 100644
--- a/firmware/ice40-riscv/icE1usb/usb_dev.c
+++ b/firmware/ice40-riscv/icE1usb/usb_dev.c
@@ -6,6 +6,7 @@
  */
 
 #include <stdint.h>
+#include <string.h>
 
 #include <no2usb/usb.h>
 #include <no2usb/usb_proto.h>
@@ -16,6 +17,9 @@
 #include "ice1usb_proto.h"
 
 
+const char *fw_build_str = BUILD_INFO;
+
+
 static enum usb_fnd_resp
 _usb_dev_ctrl_req(struct usb_ctrl_req *req, struct usb_xfer *xfer)
 {
@@ -29,6 +33,10 @@
 		xfer->data[0] = (1 << ICE1USB_DEV_CAP_GPSDO);
 		xfer->len = 1;
 		break;
+	case ICE1USB_DEV_GET_FW_BUILD:
+		xfer->data = (void*) fw_build_str;
+		xfer->len  = strlen(fw_build_str);
+		break;
 	default:
 		return USB_FND_ERROR;
 	}
diff --git a/firmware/ice40-riscv/icE1usb/usb_dev.h b/firmware/ice40-riscv/icE1usb/usb_dev.h
index ca32a46..b2c4855 100644
--- a/firmware/ice40-riscv/icE1usb/usb_dev.h
+++ b/firmware/ice40-riscv/icE1usb/usb_dev.h
@@ -7,4 +7,6 @@
 
 #pragma once
 
+extern const char *fw_build_str;
+
 void usb_dev_init(void);