Commit 58b6b3d5 authored by Martin Habets's avatar Martin Habets Committed by Jakub Kicinski
Browse files

sfc/siena: Make MCDI logging support specific for Siena



Add a Siena Kconfig option and use it in stead of the sfc one.
Rename the internal variable for the 'mcdi_logging_default' module
parameter to avoid a naming conflict with the one in sfc.ko.

Signed-off-by: default avatarMartin Habets <habetsm.xilinx@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f62a0745
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ config SFC_SRIOV
	  features, allowing accelerated network performance in
	  virtualized environments.
config SFC_MCDI_LOGGING
	bool "Solarflare SFC9000/SFC9100-family MCDI logging support"
	bool "Solarflare SFC9100-family MCDI logging support"
	depends on SFC
	default y
	help
+10 −0
Original line number Diff line number Diff line
@@ -33,3 +33,13 @@ config SFC_SIENA_SRIOV
	  This enables support for the Single Root I/O Virtualization
	  features, allowing accelerated network performance in
	  virtualized environments.
config SFC_SIENA_MCDI_LOGGING
	bool "Solarflare SFC9000-family MCDI logging support"
	depends on SFC_SIENA
	default y
	help
	  This enables support for tracing of MCDI (Management-Controller-to-
	  Driver-Interface) commands and responses, allowing debugging of
	  driver/firmware interaction.  The tracing is actually enabled by
	  a sysfs file 'mcdi_logging' under the PCI device, or via module
	  parameter mcdi_logging_default.
+1 −1
Original line number Diff line number Diff line
@@ -1170,7 +1170,7 @@ void efx_siena_fini_io(struct efx_nic *efx)
		pci_disable_device(efx->pci_dev);
}

#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
static ssize_t mcdi_logging_show(struct device *dev,
				 struct device_attribute *attr,
				 char *buf)
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ static inline void efx_schedule_channel_irq(struct efx_channel *channel)
	efx_schedule_channel(channel);
}

#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
void efx_siena_init_mcdi_logging(struct efx_nic *efx);
void efx_siena_fini_mcdi_logging(struct efx_nic *efx);
#else
+12 −11
Original line number Diff line number Diff line
@@ -51,9 +51,10 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
static bool efx_mcdi_poll_once(struct efx_nic *efx);
static void efx_mcdi_abandon(struct efx_nic *efx);

#ifdef CONFIG_SFC_MCDI_LOGGING
static bool mcdi_logging_default;
module_param(mcdi_logging_default, bool, 0644);
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
static bool efx_siena_mcdi_logging_default;
module_param_named(mcdi_logging_default, efx_siena_mcdi_logging_default,
		   bool, 0644);
MODULE_PARM_DESC(mcdi_logging_default,
		 "Enable MCDI logging on newly-probed functions");
#endif
@@ -70,12 +71,12 @@ int efx_siena_mcdi_init(struct efx_nic *efx)

	mcdi = efx_mcdi(efx);
	mcdi->efx = efx;
#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	/* consuming code assumes buffer is page-sized */
	mcdi->logging_buffer = (char *)__get_free_page(GFP_KERNEL);
	if (!mcdi->logging_buffer)
		goto fail1;
	mcdi->logging_enabled = mcdi_logging_default;
	mcdi->logging_enabled = efx_siena_mcdi_logging_default;
#endif
	init_waitqueue_head(&mcdi->wq);
	init_waitqueue_head(&mcdi->proxy_rx_wq);
@@ -114,7 +115,7 @@ int efx_siena_mcdi_init(struct efx_nic *efx)

	return 0;
fail2:
#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	free_page((unsigned long)mcdi->logging_buffer);
fail1:
#endif
@@ -140,7 +141,7 @@ void efx_siena_mcdi_fini(struct efx_nic *efx)
	if (!efx->mcdi)
		return;

#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	free_page((unsigned long)efx->mcdi->iface.logging_buffer);
#endif

@@ -151,7 +152,7 @@ static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd,
				  const efx_dword_t *inbuf, size_t inlen)
{
	struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	char *buf = mcdi->logging_buffer; /* page-sized */
#endif
	efx_dword_t hdr[2];
@@ -198,7 +199,7 @@ static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd,
		hdr_len = 8;
	}

#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	if (mcdi->logging_enabled && !WARN_ON_ONCE(!buf)) {
		int bytes = 0;
		int i;
@@ -266,7 +267,7 @@ static void efx_mcdi_read_response_header(struct efx_nic *efx)
{
	struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
	unsigned int respseq, respcmd, error;
#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	char *buf = mcdi->logging_buffer; /* page-sized */
#endif
	efx_dword_t hdr;
@@ -286,7 +287,7 @@ static void efx_mcdi_read_response_header(struct efx_nic *efx)
			EFX_DWORD_FIELD(hdr, MC_CMD_V2_EXTN_IN_ACTUAL_LEN);
	}

#ifdef CONFIG_SFC_MCDI_LOGGING
#ifdef CONFIG_SFC_SIENA_MCDI_LOGGING
	if (mcdi->logging_enabled && !WARN_ON_ONCE(!buf)) {
		size_t hdr_len, data_len;
		int bytes = 0;
Loading