Release Notes¶
This page contains release notes for firmware updates. For general information on building and installing firmware, please consult Firmware Upgrades.
There are two kinds of directory in pydfmux/firmware
: dated release
directories (containing incremental updates to parts of the firmware), and
named “aggregation” directories (containing a firmware snapshot that takes its
elements from a “known good” set of dated directories.) You should ordinarily be
using one of the following aggregation directories:
pydfmux/firmware/mcgill
:- This firmware is McGill’s “lab” firmware, and is intended to track a working (but early-release) state.
pydfmux/firmware/latest
:- This firmware tracks the latest release build, which should always be the current recommended firmware package.
This page tracks release notes for the date directories. To inspect which date directories make up an aggregation release, please inspect the symlinks in the aggregation directory.
Firmware Releases
- February 02, 2020: DfMUX Release R11.4 [EXPERIMENTAL, DO NOT USE]
- January 28, 2020: DfMUX Release R11.3 (128x only)
- Dec. 5, 2019: DfMUX Release R11.2 (128x only)
- Nov. 8, 2018: 128x (DfMUX Release 10.0_128x)
- Oct. 5, 2018: Cumulative Update (DfMUX Release 10.0)
- Sept 19, 2017: Minor update fixing negative temperature readout in SQCBs and housekeeping typo (DfMUX Release 8.3)
- June 26, 2017: Minor update extending the receive queue buffer on the C-side of the boards (DfMUX Release 8.2)
- November 08, 2016: Buck Synchronization, website, and DAN gain stepping (DfMUX Release 8.1)
- September 09, 2016: Streaming and IceCore changes (DfMUX Release 8.0)
- July 11, 2016: 24 Bit DMS / DAN / DMFD throughput (DfMUX Release 7.1)
- May 17, 2016: DfMUX Release 7.0
- April 15, 2014: 128x Firmware (mcgill_128x)
- Earlier Releases
Note
How to upgrade using constituent pieces and building your own image file:
$ cd firmware
$ ./fetch.sh latest
$ ./image.sh -d latest -o dfmux_release8.img
$ sudo dd if=dfmux_release8.img bs=10M of=/dev/YOURCFCARD
Note
How to upgrade using a pre-made image file (example with release 8.0):
$ cd pydfmux
$ git-annex get firmware/2016-09-09/dfmux_release8.img
$ sudo dd if=firmware/2016-09-09/dfmux_release8.img bs=10M of=/dev/YOURCFCARD
February 02, 2020: DfMUX Release R11.4 [EXPERIMENTAL, DO NOT USE]¶
All files for this release live in pydfmux/firmware/r11.4
This release changes the signal path streaming away from multicast and instead uses a protocol called “SCTP”. It was an experimental build to test a networking fix for the South Pole Telescope.
It is not being used anywhere right now, and should not be used.
January 28, 2020: DfMUX Release R11.3 (128x only)¶
All files for this release live in pydfmux/firmware/r11.3
This is the first release NOT to use git-annex. The appropriate way to download these files is:
pydfmux/firmware$ git lfs fetch --exclude= --include=r11.3
This update fixes a number of issues that were related to the move to a new linux kernel, and the “ADC Alignment Bug”
All performance improvements are related to operating large numbers of boards in crates, otherwise this looks like R11.2
Changes:
- Fix to ADC alignment bug, which statistically failed occasionally when boards were first powered on. This failure was mostly hidden in pydfmux previously, but the firmware fix makes this unnecessary.
- Fix to the problem where boards that boot first sometimes prevent neighboring boards from effectively multicasting their data.
Dec. 5, 2019: DfMUX Release R11.2 (128x only)¶
All files for this release live in pydfmux/firmware/r11.2
Please do not use r11.1 or r11.0.
This is the first big release after 128x. It represents a substantial upgrade of the ARM kernel to v5.3, and fixes some bugs in netbooting and in the R10 128x release.
This is the first firmware release that is 128x-only. 64x will no longer be updated. For users still operating 64x this upgrade should be drop-in compatible.
This release:
- Fixes backplane contention on boot-up with NetBoot.
- Crates should now bring every board up successfully on the first try when using netboot.
- Requires rewriting the board spi flash. Instructions below.
- Removes the nyquist line in the downsampled data.
- 64x used a strong roll-off when downsampling the streamed data, which hid the nyquist line. R10_128x had an FIR that was less resource intensive with a less strong roll-off, consequently users saw the nyquist tone in downsampled data (which was then just filtered offline in the data processing pipeline).
- R11.2 implements a re-designed FIR stage with better filtering parameters that hide this line again. Downsampled data should now look the same in R11.2 as it did in the original 64x builds.
- Webpage access can no longer crash boards.
- This also fixes the rare bug when initializing an already initialized board can give an “ADC Delay” error.
- ”.clear_all()” methods are now available for ReadoutModule and Mezzanine
objects (rmod.clear_all(), mezz.clear_all())
- This will vastly speed up zero_combs() calls when they are written into the algorithm and when zero_combs() is called on less than an entire iceboard.
Netboot installation is now simplified with included filesystem .tar.bz file.
To set up your netboot environment:
$ cd pydfmux/firmware/r11.2
$ mkdir tempdir
$ cd tempdir
$ tar -xjf ../dfmux_release_11.2_netboot.tar.bz2 .
$ cd ..
$ mv tempdir /srv/iceboardnfs
$ cp u-boot.bin /srv/tftp/u-boot.bin
$ cp uImage /srv/tftp/uImage
You must also add ”,nfsvers=3” suffix to the NFS root path exported by your DHCP daemon (dhcpd.conf). For example:
option root-path "192.168.1.1:/srv/nfs/r11.0,nfsvers=3";
To use this firmware to boot boards in a crate the boards MUST have their SPI flash rewritten. It is easiest to do this before updating your netboot environment.
For a single board:
$ cd pydfmux/firmware/r11.2
$ scp u-boot.min.spieth.spi root@iceboard<SERIAL>.local:/tmp
$ ssh root@iceboard<SERIAL>.local /usr/sbin/flashcp /tmp/u-boot.min.spieth.spi /dev/mtd0
For an entire crate worth of boards:
$ cd pydfmux/firmware/r11.2
$ for i in `seq 1 16`
> do scp u-boot.min.spieth.spi root@slot"$i".icecrate<SERIAL>.local:/tmp
> ssh root@slot"$i".icecrate005.local /usr/sbin/flashcp /tmp/u-boot.min.spieth.spi /dev/mtd0
> done
Nov. 8, 2018: 128x (DfMUX Release 10.0_128x)¶
This is the first official 128x release. Note that 128x releases are not backwards compatible with 64x builds (those lacking the 128x suffix) without extra work.
Why? Although the Python/Tuber API is interchangeable, the streamed packets necessarily carry more samples and thus are not expected to be compatible until the downstream software has been adjusted to expect them.
Functionally, the two releases are similar with notable exceptions:
- You can no longer tune a single channel to different frequencies for the carrier, nuller, and demodulator. The target argument (with value CARRIER, NULLER, or DEMOD) is ignored, and affects all three frequencies identically.
Oct. 5, 2018: Cumulative Update (DfMUX Release 10.0)¶
This release supersedes several unofficial releases that made it “into the wild” but were not present in this repository. There is no new functionality in this release that was not present in the unofficial versions.
All files for this release live in pydfmux/firmware/r10.0
. Going forward, we
are going to use this kind of structure rather than date-specific identifiers
because it’s easier to track.
Buck syncs changed in R10 (128x and 64x) to be 781.25 kHz (motherboard) / 1.5625 MHz (mezzanines) Additionally duty cycle for syncs changed to 20%
Sept 19, 2017: Minor update fixing negative temperature readout in SQCBs and housekeeping typo (DfMUX Release 8.3)¶
All new files live in pydfmux/firmware/2017-09-19
pydfmux/firmware/latest
has been updated and can be used to make an image file.
Additionally, a copy of the dfmux_release8_3.img
is provided in git-annex
at pydfmux/firmware/2017-09-19/dfmux_release8_3.img
icecore-dfmux commit: 82a639f
Image file md5sum: 900b993b848f09ba5a7d1461b4ea2104
This release rolls in some icecore changes that don’t effect dfmux, and also fixes the IIC read from
SQUIDController Board temperature sensors so they properly read out negative numbers.
Finally, a typo in the dump_housekeeping()
is fixed to report both carrier and nuller channel amplitudes
rather than duplicating carrier amplitudes.
June 26, 2017: Minor update extending the receive queue buffer on the C-side of the boards (DfMUX Release 8.2)¶
All new files live in pydfmux/firmware/2017-06-26
.
pydfmux/firmware/latest
is updated to reflect this and can be used to
make an image file.
Additionally, a copy of the dfmux_release8_2.img
is provided in git-annex
at pydfmux/firmware/2017-06-26/dfmux_release8_2.img
icecore-dfmux commit f9a5eaa
Image file md5sum: df95a16420ba9df93429ebae68c867b0
This release rolls in some icecore changes that don’t effect dfmux, and also extends the receiving buffer on the iceboard-side tuber interface. This should fix 599 timeouts that users get when running very long asynchronous netanals with only one or two iceboards or modules.
Note that this update already exists at Pole, and thus is only for northern testbeds.
November 08, 2016: Buck Synchronization, website, and DAN gain stepping (DfMUX Release 8.1)¶
All new files live in pydfmux/firmware/2016-11-08
.
pydfmux/firmware/latest
is updated to reflect this and can be used to
make an image file.
Additionally, a copy of the dfmux_release8.img
is provided in git-annex
at pydfmux/firmware/2016-11-08/dfmux_release8_1.img
icecore-dfmux commit fd0d10e74810a0580508199f909be5d0dc84291a
Image file md5sum: 7c290e3149396ba707e7e12ca202bad8
This release touches only OPKs, but includes a new bitstream that changes buck regulator synchronization frequencies (1MHz -> 1.25 MHz, 2 MHz -> 2.5 MHz). The backplane buck regulator (if present) is also synchronized to 1.25 MHz. These values share a common multiple with the clock, which is the base frequency we use for our bias frequencies.
Additionally the SQCB section of the website is updated to disable auto-polling (instead making it an option).
Finally the set_dan_gain
now accepts the a stepping parameter, which is implemented
in C on the board. This speeds up dan tuning considerably, and smooths one
of the bigger sources of transients.
September 09, 2016: Streaming and IceCore changes (DfMUX Release 8.0)¶
This release touches every constituent part of the firmware.
This is largely because of the changes to the PLL programming in IceCore.
Additionally it includes some changes that anticipate 128x data streaming format changes so spt3g_software
can get a head start on preparation.
Finally, there are a few feature requests that got addressed.
All files required to generate an image live in pydfmux/firmware/2016-09-09
.
icecore-dfmux commit 23c4505039d5ec08dbbfa65441c3b99f62e14e93
cross-repository tag: R8.0
pydfmux/firmware/latest
is updated to reflect this.
Additionally, a copy of the dfmux_release8.img
is provided in git-annex
at pydfmux/firmware/2016-09-09/dfmux_release8.img
Image file md5sum: f23ecfe6e2d521cff41bf0fd578c82ac
There are a few improvements in this update. I’ll divide them by IceCore and Dfmux:
IceCore¶
New features:
- PLL programming through the tuber interface for debugging
d.get_build_info()
now returns a tuber object with firmware build informationd.set_fantray_duty_cycle()
andd.get_fantray_tachometer()
exposes control of the fan controller (requires appropriate setup, not advisable for DfMUX)d.set_power_on_slot()
allows one board to reboot any slot in a shared backplaned.reset_arm_on_slot()
allows one board to reset the ARM of any other board in a backplaned._reset_all_power()
resets power for all boards in the crateprint d._get_syslog_buffer()
displays the tail of the iceboard syslog buffer in the console (useful for debugging)
DfMux¶
V3 Packet type for streamers (version that is/will be used for 128x, allows DAQ to be ready for switchover)
Boards use unicasting on loopback to accumulate their own packets, rather than sniffing the global multicast for them
- This fixes the problem of 128x boards bringing down 64x boards
- Removes the need to multicast filter on the ARM (frees up memory and CPU)
- Fixes the error
"Too much time elapsed while waiting for packets! Is the FPGA correctly attached to the network?"
- from DDOSing the boards.
d._dump_housekeeping()
call now includes state information stored on the board and rail information.
July 11, 2016: 24 Bit DMS / DAN / DMFD throughput (DfMUX Release 7.1)¶
New dfmux-bitstream.opk
and dfmux-runtime.opk
which live in pydfmux/firmware/2016-07-11
.
Commit 85855257ef6e15b999231b61387b0bac9f7610e7
pydfmux/firmware/latest
is updated to reflect this. To build image file:
$ cd firmware
$ ./fetch.sh latest
$ ./image.sh -d latest -o dfmux_release7_1.img
Additionally, a copy of the dfmux_release7_1.img
is provided in git-annex
at pydfmux/firmware/2016-07-11/dfmux_release7_1.img
Image file md5sum: 5fe38796b0f622a646253aea9bd26298
This update extends the logic throughput in the synthesis, demodulation, and DAN data paths from 18 bits to 24 bits.
We already natively used 24 bit numbers for the streamer output, but internally the logic was 18 bits, a holdover from smaller FPGAs.
A consequence of the 18 bit truncation was the addition of a small (64 count) DC bias to modulation and demodulation channels. While ordinarily irrelevant, this bias was a roadblock to the development of a Tau-ETF algorithm.
This update removes the aformentioned bias. It does not effect any of the transferfunctions and should be completely transparent to anybody not developing Tau-ETF.
May 17, 2016: DfMUX Release 7.0¶
Tagged release uses the R7
tag in all of the relevant repos.
This includes many bug-fixes and improvements under the hood on the main icecore
repos, which can be read about in the commit logs there.
Relevant improvements to the icecore-dfmux repository include:
- Fixed mezzanine temperature sensor readout (added important delay and divide-by-two)
- Mezzanine power down sequence now more gentle (and symmetric with power up)
- Use kernel-side filtering to make sure we get packets only from the board itself (fixes errors that happened with long netanals)
- Added DAN Gain to the housekeeping tuber call
- Added remote state-tracking functionality to the iceboards (to be used with pydfmux functions
store_bolo/squid_state(...)
andretreive_bolo/squid_state(...)
)
File Locations:
- All Release 7 files are in git-annex at
pydfmux/firmware/2016-05-17
- This includes a pre-made image file at
pydfmux/firmware/2016-05-17/dfmux_release7.img
- md5sum for this file is 8024644a54045dcfb4c77396d05bf787
- Symlinks for use with the fetch.sh script have been updated in the “latest” directory at
pydfmux/firmware/latest
For detailed building instructions see Firmware Upgrades
NetBoot:
- The u-boot file required in order to netboot has been included in this release
- as well, at
pydfmux/firmware/2016-05-17/u-boot.min.spieth.spi
.
- Consult the documentation for instructions on using this file.
- For now these live at http://www.mcgillcosmology.com/twiki/bin/view/NextGen_Dfmux/IceBoardNetboot
Warning
The front panel boot-up light sequence has changed!
Successful bootup is indicated by the illumination of the following front panel lights:
- GP3 (green)
- FPGA Done (red)
- PLL Lock 1 (yellow)
- PLL Lock 2 (green)
Sequence is:
- PLL Lock Lights 1 & 2: PLLs are locked (clock is probably good)
- GP1-3 flashing in decending order ending with GP3 staying lit: Linux successfully booted
- FPGA Done on: FPGA successfully programmed
April 15, 2014: 128x Firmware (mcgill_128x)¶
SO-called “128x firmware” is a significantly new signal path, using polyphase filter banks for both modulator and demodulator paths. Release notes for PFB firmware can be found at 128x.
Earlier Releases¶
Please inspect the git logs (git log --stat firmware/
) for release
information prior to 2014-09-26.