目标

在 Windows VM 中使用 GPU。

方法

Passthrough GPU。 其实 Linux 那边有很成熟的方法了,不过 FreeBSD 这边还有问题。

MMIO

NVidia 显卡有4个BAR:

  • 16M 的BAR0,据说有各种控制寄存器,主要控制接口。
  • 256M 的BAR1,据说是显存窗口。
  • 32M 的BAR3,据说其实也是显存窗口。
  • 128 字节的IO Ports,据说可以在实模式访问显存。

Interrupt

MSI

验证

Guest to Card: 已确认,Guest中访问mapped bar符合host访问结果 MSI: nouveau可正常设置中断,有中断产生。


问题

目前载入nouveau经常碰到的问题是初始化失败:在gp102_disp_dmac_init()里面,会有初始化超时。 这个超时貌似是在初始化DMA channel之后,等待DMA引擎空闲超时。看来DMA那边还是有问题。

参考资料

Envytools: https://media.readthedocs.org/pdf/envytools/latest/envytools.pdf