|  | @@ -556,16 +556,15 @@ static void xhci_legacy_init ( struct xhci_device *xhci ) {
 | 
		
	
		
			
			| 556 | 556 |   * Claim ownership from BIOS
 | 
		
	
		
			
			| 557 | 557 |   *
 | 
		
	
		
			
			| 558 | 558 |   * @v xhci		xHCI device
 | 
		
	
		
			
			| 559 |  | - * @ret rc		Return status code
 | 
		
	
		
			
			| 560 | 559 |   */
 | 
		
	
		
			
			| 561 |  | -static int xhci_legacy_claim ( struct xhci_device *xhci ) {
 | 
		
	
		
			
			|  | 560 | +static void xhci_legacy_claim ( struct xhci_device *xhci ) {
 | 
		
	
		
			
			| 562 | 561 |  	uint32_t ctlsts;
 | 
		
	
		
			
			| 563 | 562 |  	uint8_t bios;
 | 
		
	
		
			
			| 564 | 563 |  	unsigned int i;
 | 
		
	
		
			
			| 565 | 564 |  
 | 
		
	
		
			
			| 566 | 565 |  	/* Do nothing unless legacy support capability is present */
 | 
		
	
		
			
			| 567 | 566 |  	if ( ! xhci->legacy )
 | 
		
	
		
			
			| 568 |  | -		return 0;
 | 
		
	
		
			
			|  | 567 | +		return;
 | 
		
	
		
			
			| 569 | 568 |  
 | 
		
	
		
			
			| 570 | 569 |  	/* Claim ownership */
 | 
		
	
		
			
			| 571 | 570 |  	writeb ( XHCI_USBLEGSUP_OS_OWNED,
 | 
		
	
	
		
			
			|  | @@ -585,16 +584,19 @@ static int xhci_legacy_claim ( struct xhci_device *xhci ) {
 | 
		
	
		
			
			| 585 | 584 |  				DBGC ( xhci, "XHCI %p warning: BIOS retained "
 | 
		
	
		
			
			| 586 | 585 |  				       "SMIs: %08x\n", xhci, ctlsts );
 | 
		
	
		
			
			| 587 | 586 |  			}
 | 
		
	
		
			
			| 588 |  | -			return 0;
 | 
		
	
		
			
			|  | 587 | +			return;
 | 
		
	
		
			
			| 589 | 588 |  		}
 | 
		
	
		
			
			| 590 | 589 |  
 | 
		
	
		
			
			| 591 | 590 |  		/* Delay */
 | 
		
	
		
			
			| 592 | 591 |  		mdelay ( 1 );
 | 
		
	
		
			
			| 593 | 592 |  	}
 | 
		
	
		
			
			| 594 | 593 |  
 | 
		
	
		
			
			| 595 |  | -	DBGC ( xhci, "XHCI %p timed out waiting for BIOS to release "
 | 
		
	
		
			
			| 596 |  | -	       "ownership\n", xhci );
 | 
		
	
		
			
			| 597 |  | -	return -ETIMEDOUT;
 | 
		
	
		
			
			|  | 594 | +	/* BIOS did not release ownership.  Claim it forcibly by
 | 
		
	
		
			
			|  | 595 | +	 * disabling all SMIs.
 | 
		
	
		
			
			|  | 596 | +	 */
 | 
		
	
		
			
			|  | 597 | +	DBGC ( xhci, "XHCI %p could not claim ownership from BIOS: forcibly "
 | 
		
	
		
			
			|  | 598 | +	       "disabling SMIs\n", xhci );
 | 
		
	
		
			
			|  | 599 | +	writel ( 0, xhci->cap + xhci->legacy + XHCI_USBLEGSUP_CTLSTS );
 | 
		
	
		
			
			| 598 | 600 |  }
 | 
		
	
		
			
			| 599 | 601 |  
 | 
		
	
		
			
			| 600 | 602 |  /**
 | 
		
	
	
		
			
			|  | @@ -3105,8 +3107,7 @@ static int xhci_probe ( struct pci_device *pci ) {
 | 
		
	
		
			
			| 3105 | 3107 |  
 | 
		
	
		
			
			| 3106 | 3108 |  	/* Initialise USB legacy support and claim ownership */
 | 
		
	
		
			
			| 3107 | 3109 |  	xhci_legacy_init ( xhci );
 | 
		
	
		
			
			| 3108 |  | -	if ( ( rc = xhci_legacy_claim ( xhci ) ) != 0 )
 | 
		
	
		
			
			| 3109 |  | -		goto err_legacy_claim;
 | 
		
	
		
			
			|  | 3110 | +	xhci_legacy_claim ( xhci );
 | 
		
	
		
			
			| 3110 | 3111 |  
 | 
		
	
		
			
			| 3111 | 3112 |  	/* Fix Intel PCH-specific quirks, if applicable */
 | 
		
	
		
			
			| 3112 | 3113 |  	if ( pci->id->driver_data & XHCI_PCH )
 | 
		
	
	
		
			
			|  | @@ -3148,7 +3149,6 @@ static int xhci_probe ( struct pci_device *pci ) {
 | 
		
	
		
			
			| 3148 | 3149 |  	if ( pci->id->driver_data & XHCI_PCH )
 | 
		
	
		
			
			| 3149 | 3150 |  		xhci_pch_undo ( xhci, pci );
 | 
		
	
		
			
			| 3150 | 3151 |  	xhci_legacy_release ( xhci );
 | 
		
	
		
			
			| 3151 |  | - err_legacy_claim:
 | 
		
	
		
			
			| 3152 | 3152 |  	iounmap ( xhci->regs );
 | 
		
	
		
			
			| 3153 | 3153 |   err_ioremap:
 | 
		
	
		
			
			| 3154 | 3154 |  	free ( xhci );
 |