diff --git a/Makefile b/Makefile index 29309729..325ef7e3 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ $(error " 3] export VIVADO_VERSION=v20xx.x") endif TARGET ?= pluto -SUPPORTED_TARGETS:=pluto sidekiqz2 +SUPPORTED_TARGETS:=pluto sidekiqz2 plutoplus # Include target specific constants include scripts/$(TARGET).mk @@ -59,7 +59,7 @@ endif ifeq ($(findstring $(TARGET),$(SUPPORTED_TARGETS)),) all: - @echo "Invalid `TARGET variable ; valid values are: pluto, sidekiqz2" && + @echo "Invalid `TARGET variable ; valid values are: pluto, sidekiqz2, plutoplus" && exit 1 else all: clean-build $(TARGETS) zip-all legal-info @@ -119,7 +119,7 @@ maia-sdr/maia-kmod/maia-sdr.ko: .PHONY: maia-sdr/maia-kmod/maia-sdr.ko -buildroot/board/pluto/maia-sdr.ko: maia-sdr/maia-kmod/maia-sdr.ko | build +buildroot/board/$(TARGET)/maia-sdr.ko: maia-sdr/maia-kmod/maia-sdr.ko | build cp $< $@ ### maia-httpd ### @@ -134,7 +134,7 @@ maia-sdr/maia-httpd/target/armv7-unknown-linux-gnueabihf/release/maia-httpd: bui .PHONY: maia-sdr/maia-httpd/target/armv7-unknown-linux-gnueabihf/release/maia-httpd -buildroot/board/pluto/maia-httpd: maia-sdr/maia-httpd/target/armv7-unknown-linux-gnueabihf/release/maia-httpd | build +buildroot/board/$(TARGET)/maia-httpd: maia-sdr/maia-httpd/target/armv7-unknown-linux-gnueabihf/release/maia-httpd | build cp $< $@ ### maia-wasm ### @@ -143,16 +143,16 @@ maia-sdr/maia-wasm/pkg: .PHONY: maia-sdr/maia-wasm/pkg -buildroot/board/pluto/maia-wasm: +buildroot/board/$(TARGET)/maia-wasm: mkdir $@ -buildroot/board/pluto/maia-wasm/pkg: maia-sdr/maia-wasm/pkg | build buildroot/board/pluto/maia-wasm - cp -r $< buildroot/board/pluto/maia-wasm/ +buildroot/board/$(TARGET)/maia-wasm/pkg: maia-sdr/maia-wasm/pkg | build buildroot/board/$(TARGET)/maia-wasm + cp -r $< buildroot/board/$(TARGET)/maia-wasm/ -buildroot/board/pluto/maia-wasm/assets: maia-sdr/maia-wasm/assets | build buildroot/board/pluto/maia-wasm - cp -r $< buildroot/board/pluto/maia-wasm/ +buildroot/board/$(TARGET)/maia-wasm/assets: maia-sdr/maia-wasm/assets | build buildroot/board/$(TARGET)/maia-wasm + cp -r $< buildroot/board/$(TARGET)/maia-wasm/ -maia-wasm: buildroot/board/pluto/maia-wasm/pkg buildroot/board/pluto/maia-wasm/assets +maia-wasm: buildroot/board/$(TARGET)/maia-wasm/pkg buildroot/board/$(TARGET)/maia-wasm/assets .PHONY: maia-wasm @@ -167,7 +167,7 @@ buildroot/output/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc: make -C buildroot ARCH=arm zynq_$(TARGET)_defconfig make -C buildroot ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) toolchain -buildroot/output/images/rootfs.cpio.gz: buildroot/output/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc buildroot/board/pluto/maia-sdr.ko buildroot/board/pluto/maia-httpd maia-wasm +buildroot/output/images/rootfs.cpio.gz: buildroot/output/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc buildroot/board/$(TARGET)/maia-sdr.ko buildroot/board/$(TARGET)/maia-httpd maia-wasm make -C buildroot legal-info scripts/legal_info_html.sh "$(COMPLETE_NAME)" "$(CURDIR)/buildroot/board/$(TARGET)/VERSIONS" cp build/LICENSE.html buildroot/board/$(TARGET)/msd/LICENSE.html diff --git a/README.md b/README.md index 6e546691..41c3aec9 100644 --- a/README.md +++ b/README.md @@ -68,4 +68,49 @@ make | zynq-pluto-sdr-revb.dtb | Device Tree Blob for Rev.B| | zynq-pluto-sdr-revc.dtb | Device Tree Blob for Rev.C| +## Pluto+ +**Disclaimer:** The Maia SDR project acknowledges that the name Pluto+ is + unfortunate, because this hardware device is unrelated to Analog Devices + ADALM products. However, this device is not known by any other name, so us + referring to it in another way would have been very confusing. Therefore, + within Maia SDR, the firmware build for the Pluto+ is refered to as Pluto+ or + `plutoplus`. + +Here are some notes about the Pluto+ Maia SDR firmware. + +The Pluto+ is largerly compatible with the ADALM-Pluto in terms of firmware. It +uses a different Zynq 7010 package and FPGA pinout, but its pinout ensures that +all the signals go to the same FPGA wirebonding pads (even though the BGA pins +are called differently and placed differently in the package). This means that a +regular ADALM-Pluto firmware mostly works on the Pluto+, though Ethernet and the +SD card will not work because the ADALM-Pluto does not have this hardware. There +is one pinout difference between the ADALM-Pluto and the Pluto+: the USB PHY +reset (URST) on the ADALM-Pluto is connected to MIO52. On the Pluto+ it is +usually connected to MIO46, because MIO52 is required for the Ethernet +MDIO. However, the Pluto+ has a jumper to allow connecting the USB PHY reset to +MIO52 instead when a firmware for the ADALM-Pluto (which does not support +Ethernet) is used (see the [plutoplus +README](https://github.com/plutoplus/plutoplus/tree/master#jumpers-and-pinouts)). When +using the Pluto+ Maia SDR firmware, it is required to connect the jumper to +MIO46. + +There is usually no point in using the ADALM-Pluto Maia SDR firmware in a +Pluto+. Generally, the Pluto+ Maia SDR firmware should be used, as it supports +Ethernet and the SD card. + +In order to distinguish it from the ADALM-Pluto firmware, the files for the +Pluto+ Maia SDR firmware are called `plutoplus` instead of `plutosdr` or +`pluto`. When using the USB storage firmware update method, the file that is +copied to the USB storage device must be called `pluto.frm`. The file +`plutoplus.frm` must be renamed to `pluto.frm`. + +The +[`ipaddrmulti`](https://maia-sdr.org/installation/#configure-the-pluto-usb-ethernet) +feature can conflict with the IP address assignment for the Pluto+ Ethernet. It +is probably better to disable `ipaddrmulti` in the Pluto+. + +The Pluto+ firmware can be built with +``` +TARGET=plutoplus make +``` diff --git a/buildroot b/buildroot index d7cb10cb..becfffbb 160000 --- a/buildroot +++ b/buildroot @@ -1 +1 @@ -Subproject commit d7cb10cb57f0dad0d31ae515078154f6f9e2b1b8 +Subproject commit becfffbbc78071a336b44ae0c37f460cef8f639c diff --git a/linux b/linux index bc04a13d..a3ce075d 160000 --- a/linux +++ b/linux @@ -1 +1 @@ -Subproject commit bc04a13d1fe762d2ce97c3342e11fcf2f8eb744d +Subproject commit a3ce075d2379c8208dcadda96f366bd739753e4f diff --git a/maia-sdr b/maia-sdr index a50515a5..92eb0cde 160000 --- a/maia-sdr +++ b/maia-sdr @@ -1 +1 @@ -Subproject commit a50515a5b9a65ed1eb87413ff3f7e2d4b9d4c927 +Subproject commit 92eb0cde95099ce3bbed3472a0240c75d5e143c5 diff --git a/scripts/plutoplus.its b/scripts/plutoplus.its new file mode 100644 index 00000000..37a8df4b --- /dev/null +++ b/scripts/plutoplus.its @@ -0,0 +1,157 @@ +/* + * U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs + * This example makes use of the 'loadables' field + */ + +/* + * fdt get addr foo /images/fdt@1 data + */ + +/dts-v1/; + +/ { + description = "Configuration to load fpga before Kernel"; + magic = "ITB PlutoSDR (ADALM-PLUTO)"; + #address-cells = <1>; + images { + + fdt@1 { + description = "zynq-plutoplus"; + data = /incbin/("../build/zynq-plutoplus-maiasdr.dtb"); + type = "flat_dt"; + arch = "arm"; + compression = "none"; + }; + + fpga@1 { + description = "FPGA"; + data = /incbin/("../build/system_top.bit"); + type = "fpga"; + arch = "arm"; + compression = "none"; + load = <0xF000000>; + hash@1 { + algo = "md5"; + }; + }; + + linux_kernel@1 { + description = "Linux"; + data = /incbin/("../build/zImage"); + type = "kernel"; + arch = "arm"; + os = "linux"; + compression = "none"; + load = <0x8000>; + entry = <0x8000>; + hash@1 { + algo = "md5"; + }; + }; + ramdisk@1 { + description = "Ramdisk"; + data = /incbin/("../build/rootfs.cpio.gz"); + type = "ramdisk"; + arch = "arm"; + os = "linux"; + compression = "gzip"; + hash@1 { + algo = "md5"; + }; + }; + + }; + + configurations { + default = "config@0"; + /* TODO: can all these configurations be deleted except config@0 ? */ + config@0 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@1 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@2 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@3 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@4 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@5 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@6 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + + config@7 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@8 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@9 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + + config@10 { + description = "Linux with fpga Pluto+"; + fdt = "fdt@1"; + kernel = "linux_kernel@1"; + ramdisk = "ramdisk@1"; + fpga = "fpga@1"; + }; + }; +}; diff --git a/scripts/plutoplus.mk b/scripts/plutoplus.mk new file mode 100644 index 00000000..56448bb6 --- /dev/null +++ b/scripts/plutoplus.mk @@ -0,0 +1,8 @@ + +# Target specific constants go here + +TARGET_DTS_FILES:= zynq-plutoplus-maiasdr.dtb +COMPLETE_NAME:=Pluto+ +ZIP_ARCHIVE_PREFIX:=plutoplus +DEVICE_VID:=0x0456 +DEVICE_PID:=0xb673 diff --git a/u-boot-xlnx b/u-boot-xlnx index c6c58e7a..49f86d89 160000 --- a/u-boot-xlnx +++ b/u-boot-xlnx @@ -1 +1 @@ -Subproject commit c6c58e7a4799e864f61261b2e85a4feae80cb810 +Subproject commit 49f86d8991e192898b58599052b29e0280bcbd79