| |
| uio_usbdebug - Run coreboot's usbdebug driver in userspace |
| ========================================================== |
| |
| |
| ## Purpose |
| |
| uio_usbdebug enables you to debug coreboot's usbdebug driver inside a |
| running operating system (only Linux at this time). This comes very |
| handy if you're hacking the usbdebug driver and don't have any other |
| debug output from coreboot itself. |
| |
| |
| ## State |
| |
| Currently only Intel chipsets are supported. Support for other chipsets |
| should be straightforward (normally just some port-enable code has to |
| be implemented). |
| |
| The Linux kernel driver (see linux/uio_ehci_pci.c) has only one PCI ID |
| hardcoded (for ICH7). The whole setup has been developed and tested on |
| a ThinkPad T60. |
| |
| ### Files |
| |
| uio_usbdebug.c - The userspace part of the uio interface. |
| |
| uio_usbdebug_intel.c - Port enable code for Intel chipsets. |
| |
| linux/uio_ehci_pci.c - Kernel part of the uio interface. |
| |
| console/printk.c - A printk() implementation so you can see debug |
| output with CONFIG_DEBUG_USBDEBUG enabled. |
| |
| device/*.c lib/*.c - Some stubs for (hopefully) unneeded functions for |
| proper linking. |
| |
| |
| ## Usage |
| |
| ### Preparations |
| |
| The MMIO space has to be a whole 4K page in size and alignment to be |
| mapped into userspace. This is very uncommon, so you'll most probably |
| have to remap the MMIO space. The Linux kernel does that for you with |
| the `pci=resource_alignment=<pci address>` kernel parameter (e.g. |
| `pci=resource_alignment=0:1d.7` for ICH7). |
| |
| If your PCI device isn't listed in the kernel driver yet, you might want |
| to add it to the `ehci_pci_ids` table in `linux/uio_ehci_pci.c` (or do |
| some module alias magic if you know how to). |
| |
| ### Build / Install |
| |
| Somehow like this: |
| |
| $ # Configure coreboot for your board and enable CONFIG_USBDEBUG |
| $ make menuconfig |
| $ cd util/uio_usbdebug/ |
| $ make -Clinux/ |
| $ sudo make -Clinux/ install |
| $ make |
| |
| ### Run |
| |
| $ # Unload Linux' EHCI driver (high-speed devices will stop working) |
| $ sudo modprobe -r ehci-pci |
| $ # Load the uio driver |
| $ sudo modprobe uio-ehci-pci |
| $ # Find your uio device |
| $ ls /sys/module/uio_ehci_pci/drivers/*/*/uio/ |
| uio0 |
| $ # Run uio_usbdebug on this device |
| $ sudo ./uio_usbdebug /dev/uio0 |
| |
| Sadly, uio_usbdebug has to be run with root privileges since there are |
| port-80 writes in the usbdebug driver. |