So physical address 0x003eff0000 corresponds to virtual address fffffbfffe800000, which corresponds to logical PIO port number 0. The serial port in the kernel was probed at port number 0, so the driver attempts to write to the 8250 compatible UART_IER at address fffffbfffe800001, which is in register x19.
That seems correct, and could probably be improved. In this case, I know that _outb() only writes within the PCI PIO virtual address between fffffbfffe800000 and fffffbffff800000, which according to the boot log (https:/ /gist.githubuse rcontent. com/dvyukov/ 084890d9b4aa7cd 54f468e652a9b58 81/raw/ 54c12248ff6a488 5ba6c530d56b3ad ad59bc6187/ gistfile1. txt) was mapped to qemu's PCI IO space, using DEVICE_nGnRnE attributes (PIO space unlike any other MMIO in the kernel uses 'nE'):
[ 3.973419][ T1] pci-host-generic 4010000000.pcie: host bridge /pcie@10000000 ranges: .0x003effffff -> 0x0000000000 .0x003efeffff -> 0x0010000000
[ 3.974309][ T1] pci-host-generic 4010000000.pcie: IO 0x003eff0000.
[ 3.975021][ T1] pci-host-generic 4010000000.pcie: MEM 0x0010000000.
So physical address 0x003eff0000 corresponds to virtual address fffffbfffe800000, which corresponds to logical PIO port number 0. The serial port in the kernel was probed at port number 0, so the driver attempts to write to the 8250 compatible UART_IER at address fffffbfffe800001, which is in register x19.