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

Commit 30b81cda authored by Ben Hutchings's avatar Ben Hutchings
Browse files

sfc: Remove efx_nic_type::push_multicast_hash operation



Both implementations of efx_nic_type::reconfigure_mac operation
push the multicast hash filter to the hardware.  It is therefore
redundant to call efx_nic_type::push_multicast_hash as well.

efx_mcdi_mac_reconfigure() also uses this operation, but the
implementation for Siena just uses MCDI anyway.  Merge that into
efx_mcdi_mac_reconfigure().

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
parent 1daf4170
Loading
Loading
Loading
Loading
+1 −4
Original line number Original line Diff line number Diff line
@@ -898,10 +898,8 @@ static void efx_mac_work(struct work_struct *data)
	struct efx_nic *efx = container_of(data, struct efx_nic, mac_work);
	struct efx_nic *efx = container_of(data, struct efx_nic, mac_work);


	mutex_lock(&efx->mac_lock);
	mutex_lock(&efx->mac_lock);
	if (efx->port_enabled) {
	if (efx->port_enabled)
		efx->type->push_multicast_hash(efx);
		efx->type->reconfigure_mac(efx);
		efx->type->reconfigure_mac(efx);
	}
	mutex_unlock(&efx->mac_lock);
	mutex_unlock(&efx->mac_lock);
}
}


@@ -968,7 +966,6 @@ static void efx_start_port(struct efx_nic *efx)


	/* efx_mac_work() might have been scheduled after efx_stop_port(),
	/* efx_mac_work() might have been scheduled after efx_stop_port(),
	 * and then cancelled by efx_flush_all() */
	 * and then cancelled by efx_flush_all() */
	efx->type->push_multicast_hash(efx);
	efx->type->reconfigure_mac(efx);
	efx->type->reconfigure_mac(efx);


	mutex_unlock(&efx->mac_lock);
	mutex_unlock(&efx->mac_lock);
+0 −2
Original line number Original line Diff line number Diff line
@@ -1766,7 +1766,6 @@ const struct efx_nic_type falcon_a1_nic_type = {
	.stop_stats = falcon_stop_nic_stats,
	.stop_stats = falcon_stop_nic_stats,
	.set_id_led = falcon_set_id_led,
	.set_id_led = falcon_set_id_led,
	.push_irq_moderation = falcon_push_irq_moderation,
	.push_irq_moderation = falcon_push_irq_moderation,
	.push_multicast_hash = falcon_push_multicast_hash,
	.reconfigure_port = falcon_reconfigure_port,
	.reconfigure_port = falcon_reconfigure_port,
	.reconfigure_mac = falcon_reconfigure_xmac,
	.reconfigure_mac = falcon_reconfigure_xmac,
	.check_mac_fault = falcon_xmac_check_fault,
	.check_mac_fault = falcon_xmac_check_fault,
@@ -1809,7 +1808,6 @@ const struct efx_nic_type falcon_b0_nic_type = {
	.stop_stats = falcon_stop_nic_stats,
	.stop_stats = falcon_stop_nic_stats,
	.set_id_led = falcon_set_id_led,
	.set_id_led = falcon_set_id_led,
	.push_irq_moderation = falcon_push_irq_moderation,
	.push_irq_moderation = falcon_push_irq_moderation,
	.push_multicast_hash = falcon_push_multicast_hash,
	.reconfigure_port = falcon_reconfigure_port,
	.reconfigure_port = falcon_reconfigure_port,
	.reconfigure_mac = falcon_reconfigure_xmac,
	.reconfigure_mac = falcon_reconfigure_xmac,
	.check_mac_fault = falcon_xmac_check_fault,
	.check_mac_fault = falcon_xmac_check_fault,
+6 −4
Original line number Original line Diff line number Diff line
@@ -115,12 +115,14 @@ int efx_mcdi_mac_reconfigure(struct efx_nic *efx)
{
{
	int rc;
	int rc;


	WARN_ON(!mutex_is_locked(&efx->mac_lock));

	rc = efx_mcdi_set_mac(efx);
	rc = efx_mcdi_set_mac(efx);
	if (rc != 0)
	if (rc != 0)
		return rc;
		return rc;


	/* Restore the multicast hash registers. */
	return efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH,
	efx->type->push_multicast_hash(efx);
			    efx->multicast_hash.byte,

			    sizeof(efx->multicast_hash),
	return 0;
			    NULL, 0, NULL);
}
}
+2 −3
Original line number Original line Diff line number Diff line
@@ -826,9 +826,9 @@ static inline unsigned int efx_port_num(struct efx_nic *efx)
 * @stop_stats: Stop the regular fetching of statistics
 * @stop_stats: Stop the regular fetching of statistics
 * @set_id_led: Set state of identifying LED or revert to automatic function
 * @set_id_led: Set state of identifying LED or revert to automatic function
 * @push_irq_moderation: Apply interrupt moderation value
 * @push_irq_moderation: Apply interrupt moderation value
 * @push_multicast_hash: Apply multicast hash table
 * @reconfigure_port: Push loopback/power/txdis changes to the MAC and PHY
 * @reconfigure_port: Push loopback/power/txdis changes to the MAC and PHY
 * @reconfigure_mac: Reconfigure MAC only. Serialised by the mac_lock
 * @reconfigure_mac: Push MAC address, MTU, flow control and filter settings
 *	to the hardware.  Serialised by the mac_lock.
 * @check_mac_fault: Check MAC fault state. True if fault present.
 * @check_mac_fault: Check MAC fault state. True if fault present.
 * @get_wol: Get WoL configuration from driver state
 * @get_wol: Get WoL configuration from driver state
 * @set_wol: Push WoL configuration to the NIC
 * @set_wol: Push WoL configuration to the NIC
@@ -872,7 +872,6 @@ struct efx_nic_type {
	void (*stop_stats)(struct efx_nic *efx);
	void (*stop_stats)(struct efx_nic *efx);
	void (*set_id_led)(struct efx_nic *efx, enum efx_led_mode mode);
	void (*set_id_led)(struct efx_nic *efx, enum efx_led_mode mode);
	void (*push_irq_moderation)(struct efx_channel *channel);
	void (*push_irq_moderation)(struct efx_channel *channel);
	void (*push_multicast_hash)(struct efx_nic *efx);
	int (*reconfigure_port)(struct efx_nic *efx);
	int (*reconfigure_port)(struct efx_nic *efx);
	int (*reconfigure_mac)(struct efx_nic *efx);
	int (*reconfigure_mac)(struct efx_nic *efx);
	bool (*check_mac_fault)(struct efx_nic *efx);
	bool (*check_mac_fault)(struct efx_nic *efx);
+0 −10
Original line number Original line Diff line number Diff line
@@ -52,15 +52,6 @@ static void siena_push_irq_moderation(struct efx_channel *channel)
			       channel->channel);
			       channel->channel);
}
}


static void siena_push_multicast_hash(struct efx_nic *efx)
{
	WARN_ON(!mutex_is_locked(&efx->mac_lock));

	efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH,
		     efx->multicast_hash.byte, sizeof(efx->multicast_hash),
		     NULL, 0, NULL);
}

static int siena_mdio_write(struct net_device *net_dev,
static int siena_mdio_write(struct net_device *net_dev,
			    int prtad, int devad, u16 addr, u16 value)
			    int prtad, int devad, u16 addr, u16 value)
{
{
@@ -629,7 +620,6 @@ const struct efx_nic_type siena_a0_nic_type = {
	.stop_stats = siena_stop_nic_stats,
	.stop_stats = siena_stop_nic_stats,
	.set_id_led = efx_mcdi_set_id_led,
	.set_id_led = efx_mcdi_set_id_led,
	.push_irq_moderation = siena_push_irq_moderation,
	.push_irq_moderation = siena_push_irq_moderation,
	.push_multicast_hash = siena_push_multicast_hash,
	.reconfigure_mac = efx_mcdi_mac_reconfigure,
	.reconfigure_mac = efx_mcdi_mac_reconfigure,
	.check_mac_fault = efx_mcdi_mac_check_fault,
	.check_mac_fault = efx_mcdi_mac_check_fault,
	.reconfigure_port = efx_mcdi_phy_reconfigure,
	.reconfigure_port = efx_mcdi_phy_reconfigure,