/ util / uio_usbdebug / uio_usbdebug_intel.c
uio_usbdebug_intel.c
 1  /* SPDX-License-Identifier: GPL-2.0-only */
 2  
 3  #include <arch/io.h>
 4  #include <device/device.h>
 5  #include <device/pci_ehci.h>
 6  #include <console/usb.h>
 7  
 8  extern void *ehci_bar;
 9  
10  pci_devfn_t pci_ehci_dbg_dev(unsigned hcd_idx)
11  {
12  	u32 class;
13  	pci_devfn_t dev;
14  
15  #if CONFIG_HAVE_USBDEBUG_OPTIONS
16  	if (hcd_idx==2)
17  		dev = PCI_DEV(0, 0x1a, 0);
18  	else
19  		dev = PCI_DEV(0, 0x1d, 0);
20  #else
21  	dev = PCI_DEV(0, 0x1d, 7);
22  #endif
23  
24  	class = pci_read_config32(dev, PCI_CLASS_REVISION) >> 8;
25  #if CONFIG_HAVE_USBDEBUG_OPTIONS
26  	if (class != PCI_EHCI_CLASSCODE) {
27  		/* If we enter here before RCBA programming, EHCI function may
28  		 * appear with the highest function number instead.
29  		 */
30  		dev |= PCI_DEV(0, 0, 7);
31  		class = pci_read_config32(dev, PCI_CLASS_REVISION) >> 8;
32  	}
33  #endif
34  	if (class != PCI_EHCI_CLASSCODE)
35  		return 0;
36  
37  	return dev;
38  }
39  
40  void pci_ehci_dbg_set_port(pci_devfn_t dev, unsigned int port)
41  {
42  	/* claim USB debug port */
43  	const unsigned long dbgctl_addr =
44  		((unsigned long)ehci_bar) + CONFIG_EHCI_DEBUG_OFFSET;
45  	write32(dbgctl_addr, read32(dbgctl_addr) | (1 << 30));
46  }
47  
48  void pci_ehci_dbg_enable(pci_devfn_t dev, unsigned long base)
49  {
50  }