diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-10-27 08:01:55 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-11-23 20:34:42 +0100 |
commit | 618d179bfefba32e1672a58f2ee9b969cb313130 (patch) | |
tree | 41cecbf4bed1cb07775f7aaee1c186cdc980f16b /src | |
parent | 33b535f15ded011c92cd1757408a3453a55b44bd (diff) | |
download | coreboot-618d179bfefba32e1672a58f2ee9b969cb313130.tar.xz |
usbdebug: Fix migration to ramstage
On entry to ramstage CBMEM is looked for a copy of an already initialized
EHCI debug dongle state. If a copy is found, it contained the state before
CAR migration and the USB protocol data toggle can be out of sync. It's an
even/odd kind of a parity check, so roughly every other build would
show the problem as invalid first line: 'ug found in CBMEM.'
After CAR migration, re-direct the state changes to correct CBMEM table.
Change-Id: I7c54e76ce29af5c8ee5e9ce6fd3dc6bdf700dcf1
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/7206
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/usb/ehci_debug.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/drivers/usb/ehci_debug.c b/src/drivers/usb/ehci_debug.c index c60fbaaaad..5a62999dc3 100644 --- a/src/drivers/usb/ehci_debug.c +++ b/src/drivers/usb/ehci_debug.c @@ -96,10 +96,14 @@ static int dbgp_enabled(void); #define DBGP_MAX_PACKET 8 static struct ehci_debug_info glob_dbg_info CAR_GLOBAL; +static struct ehci_debug_info * glob_dbg_info_p CAR_GLOBAL; static inline struct ehci_debug_info *dbgp_ehci_info(void) { - return car_get_var_ptr(&glob_dbg_info); + if (car_get_var(glob_dbg_info_p) == NULL) + car_set_var(glob_dbg_info_p, &glob_dbg_info); + + return car_get_var(glob_dbg_info_p); } static int dbgp_wait_until_complete(struct ehci_dbg_port *ehci_debug) @@ -905,6 +909,7 @@ static void migrate_ehci_debug(void) return; memcpy(dbg_info_cbmem, dbg_info, sizeof(*dbg_info)); + car_set_var(glob_dbg_info_p, dbg_info_cbmem); } CAR_MIGRATE(migrate_ehci_debug); #endif |