|  | @@ -743,6 +743,8 @@ static unsigned int xhci_port_protocol ( struct xhci_device *xhci,
 | 
		
	
		
			
			| 743 | 743 |  					xhci_speed_name ( psi ) );
 | 
		
	
		
			
			| 744 | 744 |  			}
 | 
		
	
		
			
			| 745 | 745 |  		}
 | 
		
	
		
			
			|  | 746 | +		if ( xhci->quirks & XHCI_BAD_PSIV )
 | 
		
	
		
			
			|  | 747 | +			DBGC2 ( xhci, " (ignored)" );
 | 
		
	
		
			
			| 746 | 748 |  		DBGC2 ( xhci, "\n" );
 | 
		
	
		
			
			| 747 | 749 |  	}
 | 
		
	
		
			
			| 748 | 750 |  
 | 
		
	
	
		
			
			|  | @@ -800,7 +802,7 @@ static int xhci_port_speed ( struct xhci_device *xhci, unsigned int port,
 | 
		
	
		
			
			| 800 | 802 |  	psic = XHCI_SUPPORTED_PORTS_PSIC ( ports );
 | 
		
	
		
			
			| 801 | 803 |  
 | 
		
	
		
			
			| 802 | 804 |  	/* Use the default mappings if applicable */
 | 
		
	
		
			
			| 803 |  | -	if ( ! psic ) {
 | 
		
	
		
			
			|  | 805 | +	if ( ( psic == 0 ) || ( xhci->quirks & XHCI_BAD_PSIV ) ) {
 | 
		
	
		
			
			| 804 | 806 |  		switch ( psiv ) {
 | 
		
	
		
			
			| 805 | 807 |  		case XHCI_SPEED_LOW :	return USB_SPEED_LOW;
 | 
		
	
		
			
			| 806 | 808 |  		case XHCI_SPEED_FULL :	return USB_SPEED_FULL;
 | 
		
	
	
		
			
			|  | @@ -857,14 +859,14 @@ static int xhci_port_psiv ( struct xhci_device *xhci, unsigned int port,
 | 
		
	
		
			
			| 857 | 859 |  	psic = XHCI_SUPPORTED_PORTS_PSIC ( ports );
 | 
		
	
		
			
			| 858 | 860 |  
 | 
		
	
		
			
			| 859 | 861 |  	/* Use the default mappings if applicable */
 | 
		
	
		
			
			| 860 |  | -	if ( ! psic ) {
 | 
		
	
		
			
			|  | 862 | +	if ( ( psic == 0 ) || ( xhci->quirks & XHCI_BAD_PSIV ) ) {
 | 
		
	
		
			
			| 861 | 863 |  		switch ( speed ) {
 | 
		
	
		
			
			| 862 | 864 |  		case USB_SPEED_LOW :	return XHCI_SPEED_LOW;
 | 
		
	
		
			
			| 863 | 865 |  		case USB_SPEED_FULL :	return XHCI_SPEED_FULL;
 | 
		
	
		
			
			| 864 | 866 |  		case USB_SPEED_HIGH :	return XHCI_SPEED_HIGH;
 | 
		
	
		
			
			| 865 | 867 |  		case USB_SPEED_SUPER :	return XHCI_SPEED_SUPER;
 | 
		
	
		
			
			| 866 | 868 |  		default:
 | 
		
	
		
			
			| 867 |  | -			DBGC ( xhci, "XHCI %s-%d non-standad speed %d\n",
 | 
		
	
		
			
			|  | 869 | +			DBGC ( xhci, "XHCI %s-%d non-standard speed %d\n",
 | 
		
	
		
			
			| 868 | 870 |  			       xhci->name, port, speed );
 | 
		
	
		
			
			| 869 | 871 |  			return -ENOTSUP;
 | 
		
	
		
			
			| 870 | 872 |  		}
 | 
		
	
	
		
			
			|  | @@ -3286,6 +3288,7 @@ static void xhci_remove ( struct pci_device *pci ) {
 | 
		
	
		
			
			| 3286 | 3288 |  
 | 
		
	
		
			
			| 3287 | 3289 |  /** XHCI PCI device IDs */
 | 
		
	
		
			
			| 3288 | 3290 |  static struct pci_device_id xhci_ids[] = {
 | 
		
	
		
			
			|  | 3291 | +	PCI_ROM ( 0x8086, 0x9d2f, "xhci-skylake", "xHCI (Skylake)", ( XHCI_PCH | XHCI_BAD_PSIV ) ),
 | 
		
	
		
			
			| 3289 | 3292 |  	PCI_ROM ( 0x8086, 0xffff, "xhci-pch", "xHCI (Intel PCH)", XHCI_PCH ),
 | 
		
	
		
			
			| 3290 | 3293 |  	PCI_ROM ( 0xffff, 0xffff, "xhci", "xHCI", 0 ),
 | 
		
	
		
			
			| 3291 | 3294 |  };
 |