Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c15eed22 authored by Ben Hutchings's avatar Ben Hutchings
Browse files

sfc: Allow efx_nic_type::dimension_resources to fail

parent 261e4d96
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -1513,9 +1513,11 @@ static int efx_probe_nic(struct efx_nic *efx)
	 * in MSI-X interrupts. */
	 * in MSI-X interrupts. */
	rc = efx_probe_interrupts(efx);
	rc = efx_probe_interrupts(efx);
	if (rc)
	if (rc)
		goto fail;
		goto fail1;


	efx->type->dimension_resources(efx);
	rc = efx->type->dimension_resources(efx);
	if (rc)
		goto fail2;


	if (efx->n_channels > 1)
	if (efx->n_channels > 1)
		get_random_bytes(&efx->rx_hash_key, sizeof(efx->rx_hash_key));
		get_random_bytes(&efx->rx_hash_key, sizeof(efx->rx_hash_key));
@@ -1533,7 +1535,9 @@ static int efx_probe_nic(struct efx_nic *efx)


	return 0;
	return 0;


fail:
fail2:
	efx_remove_interrupts(efx);
fail1:
	efx->type->remove(efx);
	efx->type->remove(efx);
	return rc;
	return rc;
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -2174,10 +2174,11 @@ static int falcon_probe_nvconfig(struct efx_nic *efx)
	return rc;
	return rc;
}
}


static void falcon_dimension_resources(struct efx_nic *efx)
static int falcon_dimension_resources(struct efx_nic *efx)
{
{
	efx->rx_dc_base = 0x20000;
	efx->rx_dc_base = 0x20000;
	efx->tx_dc_base = 0x26000;
	efx->tx_dc_base = 0x26000;
	return 0;
}
}


/* Probe all SPI devices on the NIC */
/* Probe all SPI devices on the NIC */
+1 −1
Original line number Original line Diff line number Diff line
@@ -1036,7 +1036,7 @@ struct efx_nic_type {
	int (*probe)(struct efx_nic *efx);
	int (*probe)(struct efx_nic *efx);
	void (*remove)(struct efx_nic *efx);
	void (*remove)(struct efx_nic *efx);
	int (*init)(struct efx_nic *efx);
	int (*init)(struct efx_nic *efx);
	void (*dimension_resources)(struct efx_nic *efx);
	int (*dimension_resources)(struct efx_nic *efx);
	void (*fini)(struct efx_nic *efx);
	void (*fini)(struct efx_nic *efx);
	void (*monitor)(struct efx_nic *efx);
	void (*monitor)(struct efx_nic *efx);
	enum reset_type (*map_reset_reason)(enum reset_type reason);
	enum reset_type (*map_reset_reason)(enum reset_type reason);
+2 −1
Original line number Original line Diff line number Diff line
@@ -177,13 +177,14 @@ static int siena_probe_nvconfig(struct efx_nic *efx)
	return rc;
	return rc;
}
}


static void siena_dimension_resources(struct efx_nic *efx)
static int siena_dimension_resources(struct efx_nic *efx)
{
{
	/* Each port has a small block of internal SRAM dedicated to
	/* Each port has a small block of internal SRAM dedicated to
	 * the buffer table and descriptor caches.  In theory we can
	 * the buffer table and descriptor caches.  In theory we can
	 * map both blocks to one port, but we don't.
	 * map both blocks to one port, but we don't.
	 */
	 */
	efx_farch_dimension_resources(efx, FR_CZ_BUF_FULL_TBL_ROWS / 2);
	efx_farch_dimension_resources(efx, FR_CZ_BUF_FULL_TBL_ROWS / 2);
	return 0;
}
}


static unsigned int siena_mem_map_size(struct efx_nic *efx)
static unsigned int siena_mem_map_size(struct efx_nic *efx)