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, 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.
>

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