Re: [PATCH v2 kvmtool] riscv: Move serial and rtc from IO port space to MMIO area.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed,  1 Feb 2023 16:01:37 +0000
Rajnesh Kanwal <rkanwal@xxxxxxxxxxxx> wrote:

Hi,

> The default serial and rtc IO region overlaps with PCI IO bar
> region leading bar 0 activation to fail. Moving these devices
> to MMIO region similar to ARM.
> 
> Given serial has been moved from 0x3f8 to 0x10000000, this
> requires us to now pass earlycon=uart8250,mmio,0x10000000
> from cmdline rather than earlycon=uart8250,mmio,0x3f8.

Doesn't it work either way with just "earlycon"? At least on the ARM side
it then finds the UART type and base address by following the DT's
stdout-path property. This would not only make this more robust, but also
more VMM agnostic.

Also, Atish, Anup: can one of you please provide a Reviewed-by: or
Tested-by: for this patch?

Cheers,
Andre

> 
> Signed-off-by: Rajnesh Kanwal <rkanwal@xxxxxxxxxxxx>
> ---
> v2: Added further details in the commit message regarding the
>     UART address change required in kernel cmdline parameter.
> 
> v1: https://www.spinics.net/lists/kvm/msg301835.html
> 
>  hw/rtc.c                     |  3 +++
>  hw/serial.c                  |  4 ++++
>  riscv/include/kvm/kvm-arch.h | 10 ++++++++--
>  3 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/rtc.c b/hw/rtc.c
> index 9b8785a..da696e1 100644
> --- a/hw/rtc.c
> +++ b/hw/rtc.c
> @@ -9,6 +9,9 @@
>  #if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
>  #define RTC_BUS_TYPE		DEVICE_BUS_MMIO
>  #define RTC_BASE_ADDRESS	ARM_RTC_MMIO_BASE
> +#elif defined(CONFIG_RISCV)
> +#define RTC_BUS_TYPE		DEVICE_BUS_MMIO
> +#define RTC_BASE_ADDRESS	RISCV_RTC_MMIO_BASE
>  #else
>  /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */
>  #define RTC_BUS_TYPE		DEVICE_BUS_IOPORT
> diff --git a/hw/serial.c b/hw/serial.c
> index 3d53362..b6263a0 100644
> --- a/hw/serial.c
> +++ b/hw/serial.c
> @@ -17,6 +17,10 @@
>  #define serial_iobase(nr)	(ARM_UART_MMIO_BASE + (nr) * 0x1000)
>  #define serial_irq(nr)		(32 + (nr))
>  #define SERIAL8250_BUS_TYPE	DEVICE_BUS_MMIO
> +#elif defined(CONFIG_RISCV)
> +#define serial_iobase(nr)	(RISCV_UART_MMIO_BASE + (nr) * 0x1000)
> +#define serial_irq(nr)		(1 + (nr))
> +#define SERIAL8250_BUS_TYPE	DEVICE_BUS_MMIO
>  #else
>  #define serial_iobase_0		(KVM_IOPORT_AREA + 0x3f8)
>  #define serial_iobase_1		(KVM_IOPORT_AREA + 0x2f8)
> diff --git a/riscv/include/kvm/kvm-arch.h b/riscv/include/kvm/kvm-arch.h
> index 3f96d00..620c796 100644
> --- a/riscv/include/kvm/kvm-arch.h
> +++ b/riscv/include/kvm/kvm-arch.h
> @@ -11,7 +11,7 @@
>  #define RISCV_IOPORT		0x00000000ULL
>  #define RISCV_IOPORT_SIZE	SZ_64K
>  #define RISCV_IRQCHIP		0x08000000ULL
> -#define RISCV_IRQCHIP_SIZE		SZ_128M
> +#define RISCV_IRQCHIP_SIZE	SZ_128M
>  #define RISCV_MMIO		0x10000000ULL
>  #define RISCV_MMIO_SIZE		SZ_512M
>  #define RISCV_PCI		0x30000000ULL
> @@ -35,10 +35,16 @@
>  #define RISCV_MAX_MEMORY(kvm)	RISCV_LOMAP_MAX_MEMORY
>  #endif
>  
> +#define RISCV_UART_MMIO_BASE	RISCV_MMIO
> +#define RISCV_UART_MMIO_SIZE	0x10000
> +
> +#define RISCV_RTC_MMIO_BASE	(RISCV_UART_MMIO_BASE + RISCV_UART_MMIO_SIZE)
> +#define RISCV_RTC_MMIO_SIZE	0x10000
> +
>  #define KVM_IOPORT_AREA		RISCV_IOPORT
>  #define KVM_PCI_CFG_AREA	RISCV_PCI
>  #define KVM_PCI_MMIO_AREA	(KVM_PCI_CFG_AREA + RISCV_PCI_CFG_SIZE)
> -#define KVM_VIRTIO_MMIO_AREA	RISCV_MMIO
> +#define KVM_VIRTIO_MMIO_AREA	(RISCV_RTC_MMIO_BASE + RISCV_UART_MMIO_SIZE)
>  
>  #define KVM_IOEVENTFD_HAS_PIO	0
>  




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux