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]

 



Hi,

On Wed, Feb 01, 2023 at 05:04:36PM +0000, Rajnesh Kanwal wrote:
> On Wed, Feb 1, 2023 at 4:35 PM
> Andre Przywara <andre.przywara@xxxxxxxxxxxx> wrote:
> >
> > 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.

It might actually be better to have both ways of specifying the UART using
earlycon in the commit message. Some might find it easier to do git log
hw/serial.c to find the exact parameters than to follow the code and do the
math.

Spearking for myself, the commit message for the coresponding arm change
contains the exact parameters (earlycon=uart,mmio,0x1000000) and that has
been helpful when trying to figure out the address (for example, for
kvm-unit-tests, you can configure the uart address at compile time, and
that provides an earlycon which is usable even before the DTB is parsed).

I think Andre was just trying to be helpful and point out that you don't
need to full parameters to get earlycon working for a Linux guest.

Thanks,
Alex

> >
> 
> Sorry I didn't know that. Thanks for pointing this out. Just tested this and it
>  works fine with just "earlycon".
> 
> $ ./lkvm-static run -c1 --console virtio -p "console=hvc1 earlycon
> root=/dev/vda " -k ./Image -d rootfs.ext4
> [    0.000000] earlycon: ns16550a0 at MMIO 0x0000000010000000 (options '')
> [    0.000000] printk: bootconsole [ns16550a0] enabled
> 
> I will update the commit message in the next version.
> 
> Thanks,
> Rajnesh
> 
> > 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