qemu-e2k/hw
Peter Delevoryas 6827ff20b2 hw: aspeed: Init all UART's with serial devices
Background:

AspeedMachineClass.uart_default specifies the serial console UART, which
usually corresponds to the "stdout-path" in the device tree.

The default value is UART5, since most boards use UART5 for this:

    amc->uart_default = ASPEED_DEV_UART5;

Users can override AspeedMachineClass.uart_default in their board's machine
class init to specify something besides UART5. For example, for fuji-bmc:

    amc->uart_default = ASPEED_DEV_UART1;

We only connect this one UART, of the 5 UART's on the AST2400 and AST2500
and the 13 UART's on the AST2600 and AST1030, to a serial device that QEMU
users can use. None of the other UART's are initialized, and the only way
to override this attribute is by creating a specialized board definition,
requiring QEMU source code changes and rebuilding.

The result of this is that if you want to get serial console output on a
board that uses UART3, you need to add a board definition. This was
encountered by Zev in OpenBMC. [1]

Changes:

This commit initializes all of the UART's present on each Aspeed chip with
serial devices and allows the QEMU user to connect as many or few as they
like to serial devices. For example, you can still run QEMU and just connect
stdout to the machine's default UART, without specifying any additional
serial devices:

    qemu-system-arm -machine fuji-bmc \
        -drive file=fuji.mtd,format=raw,if=mtd \
        -nographic

However, if you don't want to add a special machine definition, you can now
manually configure UART1 to connect to stdout and get serial console output,
even if the machine's default is UART5:

    qemu-system-arm -machine ast2600-evb \
        -drive file=fuji.mtd,format=raw,if=mtd \
        -serial null -serial mon:stdio -display none

In the example above, the first "-serial null" argument is connected to
UART5, and "-serial mon:stdio" is connected to UART1.

Another example: you can get serial console output from Wedge100, which uses
UART3, by reusing the palmetto AST2400 machine and rewiring the serial
device arguments:

    qemu-system-arm -machine palmetto-bmc \
        -drive file=wedge100.mtd,format=raw,if=mtd \
        -serial null -serial null -serial null \
        -serial mon:stdio -display none

There is a slight change in behavior introduced with this change: now, each
UART's memory-mapped IO region will have a serial device model connected to
it. Previously, all reads and writes to those regions would be ineffective
and return zero values, but now some values will be nonzero, even when the
user doesn't connect a serial device backend (like a socket, file, etc). For
example, the line status register might indicate that the transmit buffer is
empty now, whereas previously it might have always indicated it was full.

[1] https://lore.kernel.org/openbmc/YnzGnWjkYdMUUNyM@hatter.bewilderbeest.net/
[2] https://github.com/facebook/openbmc/releases/download/v2021.49.0/fuji.mtd
[3] https://github.com/facebook/openbmc/releases/download/v2021.49.0/wedge100.mtd

Signed-off-by: Peter Delevoryas <pdel@fb.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20220516062328.298336-6-pdel@fb.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
2022-05-25 10:31:33 +02:00
..
9pfs virtio: drop name parameter for virtio_init() 2022-05-16 04:38:40 -04:00
acpi acpi/cxl: Introduce CFMWS structures in CEDT 2022-05-13 07:57:26 -04:00
adc hw/adc/zynq-xadc: Use qemu_irq typedef 2022-05-19 16:19:02 +01:00
alpha
arm hw: aspeed: Init all UART's with serial devices 2022-05-25 10:31:33 +02:00
audio introduce -audio as a replacement for -soundhw 2022-05-14 12:33:44 +02:00
avr
block hw: m25p80: allow write_enable latch get/set 2022-05-25 10:31:33 +02:00
char virtio: drop name parameter for virtio_init() 2022-05-16 04:38:40 -04:00
core hw/intc/arm_gicv3: Use correct number of priority bits for the CPU 2022-05-19 16:19:02 +01:00
cpu
cris
cxl hw/cxl/component Add a dumb HDM decoder handler 2022-05-13 07:57:26 -04:00
display hppa: Artist graphics driver fixes for HP-UX and keyboard fix in firmware boot console 2022-05-18 09:32:15 -07:00
dma ptimer: Rename PTIMER_POLICY_DEFAULT to PTIMER_POLICY_LEGACY 2022-05-19 16:19:03 +01:00
gpio
hppa
hyperv
i2c
i386 hw/i386/amd_iommu: Fix IOMMU event log encoding errors 2022-05-16 16:15:40 -04:00
ide
input virtio: add vhost support for virtio devices 2022-05-16 04:38:40 -04:00
intc hw/intc/arm_gicv3: Provide ich_num_aprs() 2022-05-19 16:19:02 +01:00
ipack
ipmi
isa
m68k ptimer: Rename PTIMER_POLICY_DEFAULT to PTIMER_POLICY_LEGACY 2022-05-19 16:19:03 +01:00
mem mem/cxl_type3: Add read and write functions for associated hostmem. 2022-05-13 07:57:26 -04:00
microblaze
mips
misc
net ptimer: Rename PTIMER_POLICY_DEFAULT to PTIMER_POLICY_LEGACY 2022-05-19 16:19:03 +01:00
nios2
nubus
nvme
nvram
openrisc hw/openrisc: use right OMPIC size variable 2022-05-15 10:33:01 +09:00
pci pci/pcie_port: Add pci_find_port_by_pn() 2022-05-13 07:57:26 -04:00
pci-bridge CXL/cxl_component: Add cxl_get_hb_cstate() 2022-05-13 07:57:26 -04:00
pci-host hw/pci-host/gpex-acpi: Add support for dsdt construction for pxb-cxl 2022-05-13 07:57:26 -04:00
pcmcia
ppc
rdma
remote QIOChannel: Add flags on io_writev and introduce io_flush callback 2022-05-16 13:56:24 +01:00
riscv hw/riscv: Enable TPM backends 2022-04-29 10:48:48 +10:00
rtc ptimer: Rename PTIMER_POLICY_DEFAULT to PTIMER_POLICY_LEGACY 2022-05-19 16:19:03 +01:00
rx
s390x
scsi virtio: add vhost support for virtio devices 2022-05-16 04:38:40 -04:00
sd
sensor
sh4
smbios
sparc
sparc64
ssi
timer ptimer: Rename PTIMER_POLICY_DEFAULT to PTIMER_POLICY_LEGACY 2022-05-19 16:19:03 +01:00
tpm
tricore
usb
vfio linux-headers: Update to v5.18-rc6 2022-05-13 08:20:11 -06:00
virtio vhost-vdpa: change name and polarity for vhost_vdpa_one_time_request() 2022-05-16 16:15:41 -04:00
watchdog
xen
xenpv
xtensa
Kconfig hw/cxl/component: Introduce CXL components (8.1.x, 8.2.5) 2022-05-13 06:13:35 -04:00
meson.build hw/cxl/component: Introduce CXL components (8.1.x, 8.2.5) 2022-05-13 06:13:35 -04:00