1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-07 14:43:57 +00:00

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 enforce low latency for FDTI USB UART
- 92-retro-usb-persistent.rules: udev rule for persistent device names
- Note:
  - 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. For newer systems it is essential to install the
    udev rule which automatically sets low latency.
This commit is contained in:
wfjm
2017-06-03 16:23:55 +02:00
parent a9425599e7
commit c4f33e1c9d
9 changed files with 88 additions and 12 deletions

View File

@@ -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

View File

@@ -13,7 +13,7 @@
### I/O emulation setup <a name="io-emu"></a>
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 <oskit-name>_boot.scmd
###oskits <a name="oskits"></a>
### oskits <a name="oskits"></a>
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 <a name="oskits-unix"></a>
### Unix systems <a name="oskits-unix"></a>
#### Legal and license issues

View File

@@ -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 |

View File

@@ -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
#

View File

@@ -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

View File

@@ -45,6 +45,7 @@ Download, unpack and copy the disk images (*.dsk), e.g.
```
- Hit `<ENTER>` 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 `{<CR>}` 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 /

View File

@@ -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"
#

View File

@@ -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"

21
tools/sys/README.md Normal file
View File

@@ -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'
```