diff options
author | Nico Huber <nico.huber@secunet.com> | 2012-11-12 16:20:32 +0100 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2012-11-14 17:45:16 +0100 |
commit | 6e711c6a97a9d4122615018121d0d2a37b642ed1 (patch) | |
tree | 745114ff1c6b485f4194818203edea3714cf56ce /payloads/libpayload/drivers/usb/uhci.c | |
parent | aaa212d17d0070850f1dd2195129788acc978a9f (diff) | |
download | coreboot-6e711c6a97a9d4122615018121d0d2a37b642ed1.tar.xz |
libpayload: Add init() function to hci_t and rework uhci_reset()
uhci_reset() differs in semantics compared to the other HCI's reset()
implementations. uhci_reset() does some initialization work after a
controller reset. So move the initialization part to a new function,
uhci_reinit(), which get's exported through a new entry in hci_t:
hci_t.init().
Warning: This breaks code that relies on the current, special,
counterintuitive behaviour of uhci_reset(). If one wants a working host
controller after calling hci_t.reset(), he should call hci_t.init()
afterwards.
Change-Id: Ia7ce80865d12d11157645ce251f77f349f8e3c34
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/1851
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'payloads/libpayload/drivers/usb/uhci.c')
-rw-r--r-- | payloads/libpayload/drivers/usb/uhci.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/usb/uhci.c b/payloads/libpayload/drivers/usb/uhci.c index ab4f7982d1..2eea375bcc 100644 --- a/payloads/libpayload/drivers/usb/uhci.c +++ b/payloads/libpayload/drivers/usb/uhci.c @@ -114,7 +114,11 @@ uhci_reset (hci_t *controller) udelay (500); if (timeout < 0) usb_debug ("Warning: uhci: host controller reset timed out.\n"); +} +static void +uhci_reinit (hci_t *controller) +{ uhci_reg_write32 (controller, FLBASEADD, (u32) virt_to_phys (UHCI_INST (controller)-> framelistptr)); @@ -152,6 +156,7 @@ uhci_init (pcidev_t addr) controller->start = uhci_start; controller->stop = uhci_stop; controller->reset = uhci_reset; + controller->init = uhci_reinit; controller->shutdown = uhci_shutdown; controller->bulk = uhci_bulk; controller->control = uhci_control; @@ -228,6 +233,7 @@ uhci_init (pcidev_t addr) controller->devices[0]->init = uhci_rh_init; controller->devices[0]->init (controller->devices[0]); uhci_reset (controller); + uhci_reinit (controller); return controller; } |