Re: usb devices passthrough in bhyve

From: Mario Marietto <marietto2008_at_gmail.com>
Date: Sat, 28 Dec 2024 09:41:05 UTC
Hello.

I have a situation similar to yours. This is my USB controller integrated
with the motherboard (INTEL AORUS PRO) :

00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host
Controller (rev 10)

I have attached a lot of USB disks to that USB controller,but I never
reserved it, placing it on the /boot/loader.

Let's take this disk for example,that's attached there :

=>        40  3907029095  da5  GPT  (1.8T)
          40      532480    1  efi  (260M)
      532520        1024    2  freebsd-boot  (512K)
      533544         984       - free -  (492K)
      534528     4194304    3  freebsd-swap  (2.0G)
     4728832  3902300160    4  freebsd-zfs  (1.8T)
  3907028992         143       - free -  (72K)

If I want to use it with bhyve,I do :

bhyve-lin -S -c sockets=2,cores=1,threads=1 -m 4G -w -H -A \
-s 0,hostbridge \
-s 1,ahci-hd,/dev/da5 \

Easy,isn't it ? But this technique works only with the disks. If you have a
different kind of device,you should use an additional USB to PCI
controller....

On Sat, Dec 28, 2024 at 3:13 AM Steven Friedrich <
freebsdlouisville@gmail.com> wrote:

> I have an HP Envy running FreeBSD 14.2.
>
> I am a bhyve noob, but I am able to create a bhyve guest, and installed
> freebsd 14.2 on it.
>
> Here's my host pci devices:
>
> xhci1@pci0:0:20:0:      class=0x0c0330 rev=0x00 hdr=0x00 vendor=0x8086
> device=0x06ed subvendor=0x103c subdevice=0x8767
>     vendor     = 'Intel Corporation'
>     device     = 'Comet Lake USB 3.1 xHCI Host Controller'
>     class      = serial bus
>     subclass   = USB
>
> xhci0@pci0:1:0:0:       class=0x0c0330 rev=0x00 hdr=0x00 vendor=0x1b21
> device=0x3242 subvendor=0x1b21 subdevice=0x3242
>     vendor     = 'ASMedia Technology Inc.'
>     device     = 'ASM3242 USB 3.2 Host Controller'
>     class      = serial bus
>     subclass   = USB
>
> Here's my usbconfig:
>
> usbconfig
> ugen1.1: <Intel XHCI root HUB> at usbus1, cfg=0 md=HOST spd=SUPER
> (5.0Gbps) pwr=SAVE (0mA)
> ugen0.1: <(0x1b21) XHCI root HUB> at usbus0, cfg=0 md=HOST spd=SUPER
> (5.0Gbps) pwr=SAVE (0mA)
> ugen0.2: <Hub Genesys Logic, Inc.> at usbus0, cfg=0 md=HOST spd=SUPER
> (5.0Gbps) pwr=SAVE (0mA)
> ugen1.2: <PixArt HP USB Optical Mouse> at usbus1, cfg=0 md=HOST spd=LOW
> (1.5Mbps) pwr=ON (100mA)
> ugen1.3: <Chicony HP USB Keyboard> at usbus1, cfg=0 md=HOST spd=LOW
> (1.5Mbps) pwr=ON (100mA)
> ugen1.4: <Realtek Bluetooth Radio> at usbus1, cfg=0 md=HOST spd=FULL
> (12Mbps) pwr=ON (500mA)
> ugen0.3: <PNY USB 3.2.1 FD> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps)
> pwr=ON (126mA)
> ugen0.4: <Hub Genesys Logic, Inc.> at usbus0, cfg=0 md=HOST spd=HIGH
> (480Mbps) pwr=SAVE (100mA)
>
> Originally, my PNY flash drive was on usbus1, but when I added pptdevs="0/20/0"
> to  /boot/loader.conf, I lost my mouse and keyboard.
>
> Fortunately, I recently added a pcie card supporting usb 20 gbps rates.
>
> So I changed /boot/loader.conf to  pptdevs="1/0/0"
>
> But I don't know how to see the PNY flash drive in the guest.  I was
> hoping I could use gpart show -l and see a /dev/da0 or /dev/da1 drive, but
> I don't.
>
> In the guest, usbconfig:
>
> usbconfig
> No device match or lack of permissions.
>
> and pciconf -v -l:
>
> pciconf -v -l
> hostb0@pci0:0:0:0:      class=0x060000 rev=0x00 hdr=0x00 vendor=0x1275
> device=0x1275 subvendor=0x0000 subdevice=0x0000
>     vendor     = 'Network Appliance Corporation'
>     class      = bridge
>     subclass   = HOST-PCI
> isab0@pci0:0:1:0:       class=0x060100 rev=0x00 hdr=0x00 vendor=0x8086
> device=0x7000 subvendor=0x0000 subdevice=0x0000
>     vendor     = 'Intel Corporation'
>     device     = '82371SB PIIX3 ISA [Natoma/Triton II]'
>     class      = bridge
>     subclass   = PCI-ISA
> virtio_pci0@pci0:0:2:0: class=0x020000 rev=0x00 hdr=0x00 vendor=0x1af4
> device=0x1000 subvendor=0x1af4 subdevice=0x0001
>     vendor     = 'Red Hat, Inc.'
>     device     = 'Virtio network device'
>     class      = network
>     subclass   = ethernet
> virtio_pci1@pci0:0:3:0: class=0x010000 rev=0x00 hdr=0x00 vendor=0x1af4
> device=0x1001 subvendor=0x1af4 subdevice=0x0002
>     vendor     = 'Red Hat, Inc.'
>     device     = 'Virtio block device'
>     class      = mass storage
>     subclass   = SCSI
>
> How do I fix this?
>


-- 
Mario.