diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 3139debc..7b42edce 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -25,6 +25,20 @@ The full set of tests is only run for tagged releases. - RSX11-M uses buffer chaining, will not work ### Summary +- Update USB serial latency handling + - 99-retro-usb-permissions.rules renamed to 90-retro-usb-permissions.rules + - 91-retro-usb-latency.rules: udev rule to set low latency for FDTI USB UART + - 92-retro-usb-persistent.rules: udev rule for persistent device names + - for all FTDI USB-UART it is essential to set them to `low latency` mode. + That was default for linux kernels 2.6.32 to 4.4.52. Since about March + 2017 one gets kernels with 16 ms default latency again, thanks to + [kernel patch 9589541](https://patchwork.kernel.org/patch/9589541/). + **For newer systems it is essential to install a udev rule** which + automatically sets low latency, see [docu](../tools/sys/README.md). +- Miscellaneous fixes and changes + - ibdr_deuna: add logic to handle 'PDMD issued while busy' + - Rw11CntlDEUNA: adopt trace and statistics + - hook_ibmon_xua.tcl: use .imf,.ime - Miscellaneous fixes and changes - Rw11VirtDiskOver: BUGFIX: correct write count accumulation - svn_set_ignore: check svn:ignore existance before reading it diff --git a/doc/w11a_os_guide.md b/doc/w11a_os_guide.md index d645601f..5363bbaf 100644 --- a/doc/w11a_os_guide.md +++ b/doc/w11a_os_guide.md @@ -13,7 +13,7 @@ ### I/O emulation setup All UNIBUS peripherals which exchange data (currently DL11, LP11, PC11, RK11, -RL11, RPRH and TM11 ) are currently emulated via a backend process. The +RL11, RPRH, TM11, and DENUA ) are currently emulated via a backend process. The communication between FPGA board and backend server can be via - Serial port @@ -21,10 +21,16 @@ communication between FPGA board and backend server can be via - on Arty, Basys3, and Nexys4 and Nexys4 DDR with a `FT2232HQ`, allows up to 12M Baud - on nexys3 with a `FT232R`, allows up to 2M Baud + - for all FTDI USB-UART it is essential to set them to `low latency` mode. + That was default for linux kernels 2.6.32 to 4.4.52. Since about March + 2017 one gets kernels with 16 ms default latency again, thanks to + [kernel patch 9589541](https://patchwork.kernel.org/patch/9589541/). + **For newer systems it is essential to install a udev rule** which + automatically sets low latency, see [docu](../tools/sys/README.md). - via RS232 port, as on s3board and nexys2 - using a serial port (/dev/ttySx) is limited to 115 kBaud on most PCs. - using a USB-RS232 adapter was tested up to 460k Baud. - + - Direct USB connection using a Cypress FX2 USB controller - is supported on the nexys2 and nexys3 FPGA boards - much faster than serial port connections (see below) @@ -183,7 +189,7 @@ simh to reflect the w11a setup as close as possible: - `setup_w11a_max.scmd` Planned configuration for the w11a, in addition - processor: 4 Mbyte memory (as on Nexys2, Nexys3,...) - - periphery: DZ11, RL11/RL02, RK70/RP06, TM11/TU10 + - periphery: in addition DZ11, RL11/RL02, RK70/RP06, TM11/TU10 Startup scripts are provided with each oskit. They call the w11a_max configuration, so will show in the emulator what w11a can do when @@ -201,7 +207,7 @@ All examples below use the same basic setup pdp11 _boot.scmd -###oskits +### oskits Ready to be used 'oskits' are provided under @@ -210,7 +216,7 @@ Ready to be used 'oskits' are provided under The tarballs with the disk images are provided from a web server and have to be installed separately. -###Unix systems +### Unix systems #### Legal and license issues diff --git a/tools/README.md b/tools/README.md index 3bbe4364..6eb33925 100644 --- a/tools/README.md +++ b/tools/README.md @@ -12,6 +12,7 @@ This directory tree contains **many tools** and is organized in | [oskit](oskit) | support files for OS disk/tape image kits | | [simh](simh) | configuration files for `simh pdp11` | | [src](src) | C++ sources for rlink backend | +| [sys](sys) | udev rules for USB device handling | | [tbench](tbench) | w11 test bench | | [tcl](tcl) | TCL sources for rlink backend | | [vivado](vivado) | scripts for Xilinx Vivado | diff --git a/tools/fx2/sys/99-retro-usb-permissions.rules b/tools/fx2/sys/90-retro-usb-permissions.rules similarity index 94% rename from tools/fx2/sys/99-retro-usb-permissions.rules rename to tools/fx2/sys/90-retro-usb-permissions.rules index 5121a506..21f89021 100644 --- a/tools/fx2/sys/99-retro-usb-permissions.rules +++ b/tools/fx2/sys/90-retro-usb-permissions.rules @@ -1,4 +1,4 @@ -# $Id: 99-retro-usb-permissions.rules 467 2013-01-02 19:49:05Z mueller $ +# $Id: 90-retro-usb-permissions.rules 902 2017-06-03 14:02:17Z mueller $ # # udev rules to make some USB adaptors writable to group plugdev # diff --git a/tools/fx2/sys/README.md b/tools/fx2/sys/README.md index 4f38c2b9..dc1885a6 100644 --- a/tools/fx2/sys/README.md +++ b/tools/fx2/sys/README.md @@ -13,8 +13,8 @@ is read/write accessible for user land processes, either in To setup udev rules do ```bash - sudo cp -a 99-retro-usb-permissions.rules /etc/udev/rules.d/ - sudo chown root:root /etc/udev/rules.d/99-retro-usb-permissions.rules + sudo cp -a 90-retro-usb-permissions.rules /etc/udev/rules.d/ + sudo chown root:root /etc/udev/rules.d/90-retro-usb-permissions.rules dir /etc/udev/rules.d/ sudo udevadm control --reload-rules diff --git a/tools/oskit/211bsd_rpmin/README.md b/tools/oskit/211bsd_rpmin/README.md index b906b7ea..63f64439 100644 --- a/tools/oskit/211bsd_rpmin/README.md +++ b/tools/oskit/211bsd_rpmin/README.md @@ -45,6 +45,7 @@ Download, unpack and copy the disk images (*.dsk), e.g. ``` - Hit `` in the `xterm` window to connnect to backend server. + System with as low as 512 kB memory can be used, like in example below. The boot dialog in the console `xterm` window will look like (required input is in `{..}`, with `{}` denoting a carriage return: ``` @@ -56,8 +57,8 @@ Download, unpack and copy the disk images (*.dsk), e.g. 2.11 BSD UNIX #1: Fri May 26 12:48:54 PDT 2017 root@w11a:/usr/src/sys/RETRONFPMIN - phys mem = 3932160 - avail mem = 3721408 + phys mem = 524288 + avail mem = 313536 user mem = 307200 May 26 12:49:35 init: configure system @@ -109,8 +110,8 @@ Download, unpack and copy the disk images (*.dsk), e.g. 47/128 inodes 9/ 80 processes 8/ 36 texts active, 32 used - 3/ 72 swapmap entries, 437 kB used, 3742 kB free, 3736 kB max - 30/ 80 coremap entries, 3069 kB free, 2993 kB max + 6/ 72 swapmap entries, 475 kB used, 3704 kB free, 3673 kB max + 15/ 80 coremap entries, 107 kB free, 43 kB max 1/ 10 ub_map entries, 25 free, 25 max # {mount} /dev/xp0a on / diff --git a/tools/sys/91-retro-usb-latency.rules b/tools/sys/91-retro-usb-latency.rules new file mode 100644 index 00000000..38fad49b --- /dev/null +++ b/tools/sys/91-retro-usb-latency.rules @@ -0,0 +1,16 @@ +# $Id: 91-retro-usb-latency.rules 902 2017-06-03 14:02:17Z mueller $ +# +# udev rules to set FTDI USB-serial adaptors to low latency mode +# +# copy into /etc/udev/rules.d +# +# Notes: +# - prior to linux 2.6.32 the default was the built in 16 ms device latency +# - from linux 2.6.32 till 4.4 patch 9589541 low latency (1 ms) was the default +# - the patch https://patchwork.kernel.org/patch/9589541/ reverted this +# - the entered the 4.4.52 and higher kernel lines under the changelog heading +# USB: serial: ftdi_sio: fix extreme low-latency setting +# - this rule ensures that low (1ms) latency is used +# +ACTION=="add", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", RUN+="/bin/setserial /dev/$kernel low_latency" +# diff --git a/tools/sys/92-retro-usb-persistent.rules b/tools/sys/92-retro-usb-persistent.rules new file mode 100644 index 00000000..0fcfbd49 --- /dev/null +++ b/tools/sys/92-retro-usb-persistent.rules @@ -0,0 +1,17 @@ +# $Id: 92-retro-usb-persistent.rules 902 2017-06-03 14:02:17Z mueller $ +# +# udev rules to create persistent names for Digilent FT2232C style FPGA boards +# +# copy into /etc/udev/rules.d +# +# Notes: +# - the FT2232C has two interfaces, 1st: JTAG, 2nd: UART +# - the persistent name points to the 2nd, the USB UART +# - the rule uses ENV{} and not ATTRS{} because The serial number and the +# interface number are properties of different device layers and multiple +# ATTRS{} must match in one layer +# +# NOTE: this is an example, adopt ID_SERIAL_SHORT to your needs +# +# - Digilent nexys4 board ------------------------------------------------ +SUBSYSTEM=="tty", ENV{ID_USB_INTERFACE_NUM}=="01", ENV{ID_MODEL}=="Digilent_USB_Device", ENV{ID_SERIAL_SHORT}=="210274628291", SYMLINK="fpga_n4" diff --git a/tools/sys/README.md b/tools/sys/README.md new file mode 100644 index 00000000..fab3aba7 --- /dev/null +++ b/tools/sys/README.md @@ -0,0 +1,21 @@ +This directory contains udev rule files which ensure that +- FTDI based USB UARTs are operated with low latency +- Digilent FT2232C style FPGA boards receive a persistent device name + +To setup udev rules do +```bash + # !! adopt 92-retro-usb-persistent.rules to your needs !! + sudo cp -a 91-retro-usb-latency.rules /etc/udev/rules.d/ + sudo cp -a 92-retro-usb-persistent.rules /etc/udev/rules.d/ + sudo chown root:root /etc/udev/rules.d/*-retro-usb-*.rules + ls -al /etc/udev/rules.d/ + + sudo udevadm control --reload-rules +``` + +to verify whether usb device has low latency use +```bash + # --> deterime the /dev/ttyUSB* device of interest + cat /sys/bus/usb-serial/devices/ttyUSB1/latency_timer + # --> should show '1' and not '16' +```