Re: VirtIO MMIO for amd64

Emile 'iMil' Heitor <[email protected]>
Newsgroups gmane.os.netbsd.devel.kernel
Message-ID <[email protected]>
On 12/20/23 16:56, Taylor R Campbell wrote:

> My guess is that this is not going to be MSI -- it'll either be i8259
> or ioapic.  In that case, it may work to do this:

Thanks a lot for that, here's the result, unfortunately it still
hangs at the first VOP_OPEN() from subr_disk_open.c and the
handler function never gets triggered:

static int
virtio_mmio_cmdline_alloc_interrupts(struct virtio_mmio_softc *msc)
{
	struct virtio_mmio_cmdline_softc *const sc =
		(struct virtio_mmio_cmdline_softc *)msc;
	struct virtio_softc *const vsc = &msc->sc_sc;
	struct ioapic_softc *ioapic;
	struct pic *pic;
	int irq = sc->margs.irq;
	int pin = irq;

	ioapic = ioapic_find_bybase(irq);

	/* we don't enter here */
	if (ioapic != NULL) {
		pic = &ioapic->sc_pic;
		pin = irq - pic->pic_vecbase;
		irq = -1;
	} else
		pic = &i8259_pic;

	msc->sc_ih = intr_establish_xname(irq, pic, pin, IST_EDGE, IPL_BIO,
		virtio_mmio_intr, msc, false, device_xname(vsc->sc_dev));
	if (msc->sc_ih == NULL) {
		aprint_error_dev(vsc->sc_dev,
		    "failed to establish interrupt\n");
		return -1;
	}
	aprint_normal_dev(vsc->sc_dev, "interrupting on %d\n", irq);

	return 0;
}

/* --- */

intr_establish_xname() does get through :

[   1.0000030] viommio: 4K@0xd0000000:5
[   1.0000030] virtio0: block device (id 2, rev. 0x02)
[   1.0000030] ld0 at virtio0: features: 0x100000000<V1>
[   1.0000030] virtio0: interrupting on 5 <---
[   1.0000030] ld0: 30720 KB, 60 cyl, 16 head, 63 sec, 512 bytes/sect x 
61441 sectors
[   1.0107398] boot device: ld0

-- 
------------------------------------------------------------------------
Emile `iMil' Heitor <imil@{home.imil.net,NetBSD.org}> | https://imil.net
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.