fw/icE1usb: Import firmware for the icE1usb and icE1usb-proto boards

Currently only the icE1usb-proto is supported. Adaptation for the
final production hardware is yet to be done.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
diff --git a/firmware/ice40-riscv/icE1usb/Makefile b/firmware/ice40-riscv/icE1usb/Makefile
new file mode 100644
index 0000000..67d0a5d
--- /dev/null
+++ b/firmware/ice40-riscv/icE1usb/Makefile
@@ -0,0 +1,82 @@
+#ice1usb
+#ice1usb-proto-icebreaker
+#ice1usb-proto-bitsty
+#e1-tracer
+BOARD ?= ice1usb-proto-icebreaker
+CROSS ?= riscv-none-embed-
+CC = $(CROSS)gcc
+OBJCOPY = $(CROSS)objcopy
+ICEPROG = iceprog
+DFU_UTIL = dfu-util
+
+BOARD_DEFINE=BOARD_$(shell echo $(BOARD) | tr a-z\- A-Z_)
+CFLAGS=-Wall -Os -march=rv32i -mabi=ilp32 -ffreestanding -flto -nostartfiles -fomit-frame-pointer -Wl,--gc-section --specs=nano.specs -D$(BOARD_DEFINE) -I. -I../common
+
+NO2USB_FW_VERSION=0
+include ../../../gateware/cores/no2usb/fw/fw.mk
+CFLAGS += $(INC_no2usb)
+
+LNK=../common/lnk-app.lds
+
+HEADERS_common := $(addprefix ../common/, \
+	console.h \
+	dma.h \
+	led.h \
+	mini-printf.h \
+	spi.h \
+	utils.h \
+)
+
+SOURCES_common := $(addprefix ../common/, \
+	../common/start.S \
+	console.c \
+	dma.c \
+	led.c \
+	mini-printf.c  \
+	spi.c \
+	utils.c \
+)
+
+HEADERS_common += $(HEADERS_no2usb)
+SOURCES_common += $(SOURCES_no2usb)
+
+HEADERS_app=\
+	config.h \
+	e1.h \
+	misc.h \
+	usb_str_app.gen.h \
+	$(NULL)
+
+SOURCES_app=\
+	e1.c \
+	fw_app.c \
+	misc.c \
+	usb_desc_app.c \
+	usb_e1.c \
+	$(NULL)
+
+
+all: fw_app.bin
+
+
+fw_app.elf: $(LNK) $(HEADERS_app) $(SOURCES_app) $(HEADERS_common) $(SOURCES_common)
+	$(CC) $(CFLAGS) -Wl,-Bstatic,-T,$(LNK),--strip-debug -o $@ $(SOURCES_common) $(SOURCES_app)
+
+
+%.hex: %.bin
+	../common/bin2hex.py $< $@
+
+%.bin: %.elf
+	$(OBJCOPY) -O binary $< $@
+
+prog: fw_app.bin
+	$(ICEPROG) -o 640k $<
+
+dfuprog: fw_app.bin
+	$(DFU_UTIL) -R -a 1 -D $<
+
+
+clean:
+	rm -f *.bin *.hex *.elf *.o *.gen.h
+
+.PHONY: prog dfuprog clean