libpayload: reintroduce optional PCI in XHCI driver
being a good citizen on the box, libpayload tries to return to EHCI mode on shutdown, so a non-XHCI capable USB driver after it (eg. in the OS) finds something to work with. Change-Id: Id227d646e08a258b841c644263112f0815dd486c Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/4547 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
4dba06a827
commit
fdb348a1d1
|
@ -303,16 +303,15 @@ hci_t *
|
||||||
xhci_pci_init (pcidev_t addr)
|
xhci_pci_init (pcidev_t addr)
|
||||||
{
|
{
|
||||||
u32 reg_addr;
|
u32 reg_addr;
|
||||||
hci_t controller;
|
hci_t *controller;
|
||||||
|
|
||||||
reg_addr = (u32)phys_to_virt(pci_read_config32 (addr, 0x10) & ~0xf);
|
reg_addr = (u32)phys_to_virt(pci_read_config32 (addr, 0x10) & ~0xf);
|
||||||
//controller->reg_base = pci_read_config32 (addr, 0x14) & ~0xf;
|
|
||||||
if (pci_read_config32 (addr, 0x14) > 0) {
|
if (pci_read_config32 (addr, 0x14) > 0) {
|
||||||
fatal("We don't do 64bit addressing.\n");
|
fatal("We don't do 64bit addressing.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
controller = xhci_init((void *)(unsigned long)reg_addr);
|
controller = xhci_init((void *)(unsigned long)reg_addr);
|
||||||
controller->bus_address = addr;
|
controller->pcidev = addr;
|
||||||
|
|
||||||
xhci_switch_ppt_ports(addr);
|
xhci_switch_ppt_ports(addr);
|
||||||
|
|
||||||
|
@ -414,7 +413,8 @@ xhci_shutdown(hci_t *const controller)
|
||||||
|
|
||||||
xhci_stop(controller);
|
xhci_stop(controller);
|
||||||
|
|
||||||
xhci_switchback_ppt_ports(controller->bus_address);
|
if (controller->pcidev)
|
||||||
|
xhci_switchback_ppt_ports(controller->pcidev);
|
||||||
|
|
||||||
if (xhci->sp_ptrs) {
|
if (xhci->sp_ptrs) {
|
||||||
const size_t max_sp_bufs = xhci->capreg->Max_Scratchpad_Bufs;
|
const size_t max_sp_bufs = xhci->capreg->Max_Scratchpad_Bufs;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include <usb/usb.h>
|
#include <usb/usb.h>
|
||||||
|
|
||||||
hci_t *xhci_pci_init (pcidev_t addr);
|
hci_t *xhci_pci_init (pcidev_t addr);
|
||||||
hci_t *xhci_init (void *bar);
|
hci_t *xhci_init (const void *bar);
|
||||||
|
|
||||||
void xhci_rh_init (usbdev_t *dev);
|
void xhci_rh_init (usbdev_t *dev);
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,7 @@ typedef enum { OHCI = 0, UHCI = 1, EHCI = 2, XHCI = 3} hc_type;
|
||||||
struct usbdev_hc {
|
struct usbdev_hc {
|
||||||
hci_t *next;
|
hci_t *next;
|
||||||
u32 reg_base;
|
u32 reg_base;
|
||||||
|
pcidev_t pcidev; // 0 if not used (eg on ARM)
|
||||||
hc_type type;
|
hc_type type;
|
||||||
usbdev_t *devices[128]; // dev 0 is root hub, 127 is last addressable
|
usbdev_t *devices[128]; // dev 0 is root hub, 127 is last addressable
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue