diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-10-06 00:29:05 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-10-06 00:29:05 +0200 |
| commit | f9839ed0a29a0598fa383f9c5e8d5c366f93596a (patch) | |
| tree | 6ead35c7a7cf83d8b75c7f9d9c26b110c81b1856 | |
| parent | 83876083c9bba29e01ce1a82cba77d84f6382f07 (diff) | |
| download | plan9front-f9839ed0a29a0598fa383f9c5e8d5c366f93596a.tar.xz | |
usbehci, usbxhci: add *noehcihandoff= and *noxhcihandoff= parameters
on Samsung ATIV Smart PC Pro XE00T1C-A01CL, the EHCI handoff
causes the system to freeze in UEFI mode as soon as we assert
the os semaphore bit.
until a general solution is found, provide these parameters to
disable the handoff for now as it seems to otherwise work fine.
| -rw-r--r-- | sys/src/9/pc/usbehcipc.c | 2 | ||||
| -rw-r--r-- | sys/src/9/pc/usbxhci.c | 10 |
2 files changed, 7 insertions, 5 deletions
diff --git a/sys/src/9/pc/usbehcipc.c b/sys/src/9/pc/usbehcipc.c index 082117c31..29a49bb6f 100644 --- a/sys/src/9/pc/usbehcipc.c +++ b/sys/src/9/pc/usbehcipc.c @@ -41,7 +41,7 @@ getehci(Ctlr* ctlr) off = ehciecap(ctlr, Clegacy); if(off == -1) return; - if(pcicfgr8(ctlr->pcidev, off+CLbiossem) != 0){ + if(getconf("*noehcihandoff") == nil && pcicfgr8(ctlr->pcidev, off+CLbiossem) != 0){ dprint("ehci %#p: bios active, taking over...\n", ctlr->capio); pcicfgw8(ctlr->pcidev, off+CLossem, 1); for(i = 0; i < 100; i++){ diff --git a/sys/src/9/pc/usbxhci.c b/sys/src/9/pc/usbxhci.c index 489de15a3..42947173f 100644 --- a/sys/src/9/pc/usbxhci.c +++ b/sys/src/9/pc/usbxhci.c @@ -393,11 +393,13 @@ handoff(Ctlr *ctlr) if((r = xecp(ctlr, 1, nil)) == nil) return; - r[0] |= 1<<24; /* request ownership */ - for(i = 0; (r[0] & (1<<16)) != 0 && i<100; i++) - tsleep(&up->sleep, return0, nil, 10); + if(getconf("*noxhcihandoff") == nil){ + r[0] |= 1<<24; /* request ownership */ + for(i = 0; (r[0] & (1<<16)) != 0 && i<100; i++) + tsleep(&up->sleep, return0, nil, 10); + r[0] &= ~(1<<16); /* in case of timeout */ + } r[1] = 0; /* disable SMI interrupts */ - r[0] &= ~(1<<16); /* in case of timeout */ } static void |
