When you run QEMU with an Aspeed machine and a single serial device
using stdio like this:
    qemu -machine ast2600-evb -drive ... -serial stdio
The guest OS can read and write to the UART5 registers at 0x1E784000 and
it will receive from stdin and write to stdout. The Aspeed SoC's have a
lot more UART's though (AST2500 has 5, AST2600 has 13) and depending on
the board design, may be using any of them as the serial console. (See
"stdout-path" in a DTS to check which one is chosen).
Most boards, including all of those currently defined in
hw/arm/aspeed.c, just use UART5, but some use UART1. This change adds
some flexibility for different boards without requiring users to change
their command-line invocation of QEMU.
I tested this doesn't break existing code by booting an AST2500 OpenBMC
image and an AST2600 OpenBMC image, each using UART5 as the console.
Then I tested switching the default to UART1 and booting an AST2600
OpenBMC image that uses UART1, and that worked too.
Signed-off-by: Peter Delevoryas <pdel@fb.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20210901153615.2746885-2-pdel@fb.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
		
	
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Aspeed Machines
 | 
						|
 *
 | 
						|
 * Copyright 2018 IBM Corp.
 | 
						|
 *
 | 
						|
 * This code is licensed under the GPL version 2 or later.  See
 | 
						|
 * the COPYING file in the top-level directory.
 | 
						|
 */
 | 
						|
#ifndef ARM_ASPEED_H
 | 
						|
#define ARM_ASPEED_H
 | 
						|
 | 
						|
#include "hw/boards.h"
 | 
						|
#include "qom/object.h"
 | 
						|
 | 
						|
typedef struct AspeedMachineState AspeedMachineState;
 | 
						|
 | 
						|
#define TYPE_ASPEED_MACHINE       MACHINE_TYPE_NAME("aspeed")
 | 
						|
typedef struct AspeedMachineClass AspeedMachineClass;
 | 
						|
DECLARE_OBJ_CHECKERS(AspeedMachineState, AspeedMachineClass,
 | 
						|
                     ASPEED_MACHINE, TYPE_ASPEED_MACHINE)
 | 
						|
 | 
						|
#define ASPEED_MAC0_ON   (1 << 0)
 | 
						|
#define ASPEED_MAC1_ON   (1 << 1)
 | 
						|
#define ASPEED_MAC2_ON   (1 << 2)
 | 
						|
#define ASPEED_MAC3_ON   (1 << 3)
 | 
						|
 | 
						|
 | 
						|
struct AspeedMachineClass {
 | 
						|
    MachineClass parent_obj;
 | 
						|
 | 
						|
    const char *name;
 | 
						|
    const char *desc;
 | 
						|
    const char *soc_name;
 | 
						|
    uint32_t hw_strap1;
 | 
						|
    uint32_t hw_strap2;
 | 
						|
    const char *fmc_model;
 | 
						|
    const char *spi_model;
 | 
						|
    uint32_t num_cs;
 | 
						|
    uint32_t macs_mask;
 | 
						|
    void (*i2c_init)(AspeedMachineState *bmc);
 | 
						|
    uint32_t uart_default;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#endif
 |