|  | @@ -72,13 +72,19 @@ void efx_probe(struct net_device *netdev, enum efx_revision revision)
 | 
		
	
		
			
			| 72 | 72 |  	struct efx_nic *efx = netdev_priv(netdev);
 | 
		
	
		
			
			| 73 | 73 |  	struct pci_device *pci = container_of(netdev->dev,
 | 
		
	
		
			
			| 74 | 74 |  					      struct pci_device, dev);
 | 
		
	
		
			
			|  | 75 | +	unsigned int reg = PCI_BASE_ADDRESS_0;
 | 
		
	
		
			
			|  | 76 | +	uint32_t bar_low;
 | 
		
	
		
			
			| 75 | 77 |  
 | 
		
	
		
			
			| 76 | 78 |  	efx->netdev = netdev;
 | 
		
	
		
			
			| 77 | 79 |  	efx->revision = revision;
 | 
		
	
		
			
			| 78 | 80 |  
 | 
		
	
		
			
			| 79 |  | -	/* MMIO bar */
 | 
		
	
		
			
			| 80 |  | -	efx->mmio_start = pci_bar_start(pci, PCI_BASE_ADDRESS_2);
 | 
		
	
		
			
			| 81 |  | -	efx->mmio_len = pci_bar_size(pci, PCI_BASE_ADDRESS_2);
 | 
		
	
		
			
			|  | 81 | +	/* Find the memory bar to use */
 | 
		
	
		
			
			|  | 82 | +	pci_read_config_dword(pci, reg, &bar_low);
 | 
		
	
		
			
			|  | 83 | +	if ((bar_low & PCI_BASE_ADDRESS_IO_MASK) == PCI_BASE_ADDRESS_SPACE_IO)
 | 
		
	
		
			
			|  | 84 | +		reg = PCI_BASE_ADDRESS_2;
 | 
		
	
		
			
			|  | 85 | +
 | 
		
	
		
			
			|  | 86 | +	efx->mmio_start = pci_bar_start(pci, reg);
 | 
		
	
		
			
			|  | 87 | +	efx->mmio_len = pci_bar_size(pci, reg);
 | 
		
	
		
			
			| 82 | 88 |  	efx->membase = ioremap(efx->mmio_start, efx->mmio_len);
 | 
		
	
		
			
			| 83 | 89 |  
 | 
		
	
		
			
			| 84 | 90 |  	DBGCP(efx, "BAR of %lx bytes at phys %lx mapped at %p\n",
 |