Skip to content

Commit 101e63b

Browse files
committed
Merge branch 'cxgb4-next'
Hariprasad Shenai says: ==================== cxgb4: minor fixes, decode msgs and code refactor for few functions This patch series adds new routine to get adapter information and removes some redundant messages logged in dmesg. Fixes race while freeing tx descriptors. Decodes module type and link down reason codes obtained from firmware. Refactor port initialization and FW_PORT_CMD handling. Pass correct port id in DCB message handler to obtain netdev associated. This patch series has been created against net-next tree and includes patches on cxgb4 driver. We have included all the maintainers of respective drivers. Kindly review the change and let us know in case of any review comments. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents c0b0479 + ddc7740 commit 101e63b

File tree

8 files changed

+281
-87
lines changed

8 files changed

+281
-87
lines changed

drivers/net/ethernet/chelsio/cxgb4/cxgb4.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,9 @@ struct adapter_params {
324324
unsigned int sf_fw_start; /* start of FW image in flash */
325325

326326
unsigned int fw_vers;
327+
unsigned int bs_vers; /* bootstrap version */
327328
unsigned int tp_vers;
329+
unsigned int er_vers; /* expansion ROM version */
328330
u8 api_vers[7];
329331

330332
unsigned short mtus[NMTUS];
@@ -394,6 +396,7 @@ struct link_config {
394396
unsigned char fc; /* actual link flow control */
395397
unsigned char autoneg; /* autonegotiating? */
396398
unsigned char link_ok; /* link up? */
399+
unsigned char link_down_rc; /* link down reason */
397400
};
398401

399402
#define FW_LEN16(fw_struct) FW_CMD_LEN16_V(sizeof(fw_struct) / 16)
@@ -731,6 +734,7 @@ struct adapter {
731734
u32 t4_bar0;
732735
struct pci_dev *pdev;
733736
struct device *pdev_dev;
737+
const char *name;
734738
unsigned int mbox;
735739
unsigned int pf;
736740
unsigned int flags;
@@ -1306,6 +1310,7 @@ int t4_fl_pkt_align(struct adapter *adap);
13061310
unsigned int t4_flash_cfg_addr(struct adapter *adapter);
13071311
int t4_check_fw_version(struct adapter *adap);
13081312
int t4_get_fw_version(struct adapter *adapter, u32 *vers);
1313+
int t4_get_bs_version(struct adapter *adapter, u32 *vers);
13091314
int t4_get_tp_version(struct adapter *adapter, u32 *vers);
13101315
int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
13111316
int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
@@ -1329,6 +1334,8 @@ int t4_init_sge_params(struct adapter *adapter);
13291334
int t4_init_tp_params(struct adapter *adap);
13301335
int t4_filter_field_shift(const struct adapter *adap, int filter_sel);
13311336
int t4_init_rss_mode(struct adapter *adap, int mbox);
1337+
int t4_init_portinfo(struct port_info *pi, int mbox,
1338+
int port, int pf, int vf, u8 mac[]);
13321339
int t4_port_init(struct adapter *adap, int mbox, int pf, int vf);
13331340
void t4_fatal_err(struct adapter *adapter);
13341341
int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
@@ -1464,6 +1471,7 @@ int t4_ctrl_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
14641471
int t4_ofld_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
14651472
unsigned int vf, unsigned int eqid);
14661473
int t4_sge_ctxt_flush(struct adapter *adap, unsigned int mbox);
1474+
void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl);
14671475
int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl);
14681476
void t4_db_full(struct adapter *adapter);
14691477
void t4_db_dropped(struct adapter *adapter);

drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ void cxgb4_dcb_handle_fw_update(struct adapter *adap,
253253
{
254254
const union fw_port_dcb *fwdcb = &pcmd->u.dcb;
255255
int port = FW_PORT_CMD_PORTID_G(be32_to_cpu(pcmd->op_to_portid));
256-
struct net_device *dev = adap->port[port];
256+
struct net_device *dev = adap->port[adap->chan_map[port]];
257257
struct port_info *pi = netdev_priv(dev);
258258
struct port_dcb_info *dcb = &pi->dcb;
259259
int dcb_type = pcmd->u.dcb.pgid.type;

drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,6 +1572,7 @@ static const struct file_operations flash_debugfs_fops = {
15721572
.owner = THIS_MODULE,
15731573
.open = mem_open,
15741574
.read = flash_read,
1575+
.llseek = default_llseek,
15751576
};
15761577

15771578
static inline void tcamxy2valmask(u64 x, u64 y, u8 *addr, u64 *mask)

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,17 @@ void t4_os_portmod_changed(const struct adapter *adap, int port_id)
337337
netdev_info(dev, "port module unplugged\n");
338338
else if (pi->mod_type < ARRAY_SIZE(mod_str))
339339
netdev_info(dev, "%s module inserted\n", mod_str[pi->mod_type]);
340+
else if (pi->mod_type == FW_PORT_MOD_TYPE_NOTSUPPORTED)
341+
netdev_info(dev, "%s: unsupported port module inserted\n",
342+
dev->name);
343+
else if (pi->mod_type == FW_PORT_MOD_TYPE_UNKNOWN)
344+
netdev_info(dev, "%s: unknown port module inserted\n",
345+
dev->name);
346+
else if (pi->mod_type == FW_PORT_MOD_TYPE_ERROR)
347+
netdev_info(dev, "%s: transceiver module error\n", dev->name);
348+
else
349+
netdev_info(dev, "%s: unknown module type %d inserted\n",
350+
dev->name, pi->mod_type);
340351
}
341352

342353
int dbfifo_int_thresh = 10; /* 10 == 640 entry threshold */
@@ -504,7 +515,7 @@ EXPORT_SYMBOL(cxgb4_dcb_enabled);
504515
static void dcb_rpl(struct adapter *adap, const struct fw_port_cmd *pcmd)
505516
{
506517
int port = FW_PORT_CMD_PORTID_G(ntohl(pcmd->op_to_portid));
507-
struct net_device *dev = adap->port[port];
518+
struct net_device *dev = adap->port[adap->chan_map[port]];
508519
int old_dcb_enabled = cxgb4_dcb_enabled(dev);
509520
int new_dcb_enabled;
510521

@@ -634,7 +645,8 @@ static int fwevtq_handler(struct sge_rspq *q, const __be64 *rsp,
634645
action == FW_PORT_ACTION_GET_PORT_INFO) {
635646
int port = FW_PORT_CMD_PORTID_G(
636647
be32_to_cpu(pcmd->op_to_portid));
637-
struct net_device *dev = q->adap->port[port];
648+
struct net_device *dev =
649+
q->adap->port[q->adap->chan_map[port]];
638650
int state_input = ((pcmd->u.info.dcbxdis_pkd &
639651
FW_PORT_CMD_DCBXDIS_F)
640652
? CXGB4_DCB_INPUT_FW_DISABLED
@@ -3738,7 +3750,10 @@ static int adap_init0(struct adapter *adap)
37383750
* is excessively mismatched relative to the driver.)
37393751
*/
37403752
t4_get_fw_version(adap, &adap->params.fw_vers);
3753+
t4_get_bs_version(adap, &adap->params.bs_vers);
37413754
t4_get_tp_version(adap, &adap->params.tp_vers);
3755+
t4_get_exprom_version(adap, &adap->params.er_vers);
3756+
37423757
ret = t4_check_fw_version(adap);
37433758
/* If firmware is too old (not supported by driver) force an update. */
37443759
if (ret)
@@ -4652,6 +4667,68 @@ static void cxgb4_check_pcie_caps(struct adapter *adap)
46524667
"suggested for optimal performance.\n");
46534668
}
46544669

4670+
/* Dump basic information about the adapter */
4671+
static void print_adapter_info(struct adapter *adapter)
4672+
{
4673+
/* Device information */
4674+
dev_info(adapter->pdev_dev, "Chelsio %s rev %d\n",
4675+
adapter->params.vpd.id,
4676+
CHELSIO_CHIP_RELEASE(adapter->params.chip));
4677+
dev_info(adapter->pdev_dev, "S/N: %s, P/N: %s\n",
4678+
adapter->params.vpd.sn, adapter->params.vpd.pn);
4679+
4680+
/* Firmware Version */
4681+
if (!adapter->params.fw_vers)
4682+
dev_warn(adapter->pdev_dev, "No firmware loaded\n");
4683+
else
4684+
dev_info(adapter->pdev_dev, "Firmware version: %u.%u.%u.%u\n",
4685+
FW_HDR_FW_VER_MAJOR_G(adapter->params.fw_vers),
4686+
FW_HDR_FW_VER_MINOR_G(adapter->params.fw_vers),
4687+
FW_HDR_FW_VER_MICRO_G(adapter->params.fw_vers),
4688+
FW_HDR_FW_VER_BUILD_G(adapter->params.fw_vers));
4689+
4690+
/* Bootstrap Firmware Version. (Some adapters don't have Bootstrap
4691+
* Firmware, so dev_info() is more appropriate here.)
4692+
*/
4693+
if (!adapter->params.bs_vers)
4694+
dev_info(adapter->pdev_dev, "No bootstrap loaded\n");
4695+
else
4696+
dev_info(adapter->pdev_dev, "Bootstrap version: %u.%u.%u.%u\n",
4697+
FW_HDR_FW_VER_MAJOR_G(adapter->params.bs_vers),
4698+
FW_HDR_FW_VER_MINOR_G(adapter->params.bs_vers),
4699+
FW_HDR_FW_VER_MICRO_G(adapter->params.bs_vers),
4700+
FW_HDR_FW_VER_BUILD_G(adapter->params.bs_vers));
4701+
4702+
/* TP Microcode Version */
4703+
if (!adapter->params.tp_vers)
4704+
dev_warn(adapter->pdev_dev, "No TP Microcode loaded\n");
4705+
else
4706+
dev_info(adapter->pdev_dev,
4707+
"TP Microcode version: %u.%u.%u.%u\n",
4708+
FW_HDR_FW_VER_MAJOR_G(adapter->params.tp_vers),
4709+
FW_HDR_FW_VER_MINOR_G(adapter->params.tp_vers),
4710+
FW_HDR_FW_VER_MICRO_G(adapter->params.tp_vers),
4711+
FW_HDR_FW_VER_BUILD_G(adapter->params.tp_vers));
4712+
4713+
/* Expansion ROM version */
4714+
if (!adapter->params.er_vers)
4715+
dev_info(adapter->pdev_dev, "No Expansion ROM loaded\n");
4716+
else
4717+
dev_info(adapter->pdev_dev,
4718+
"Expansion ROM version: %u.%u.%u.%u\n",
4719+
FW_HDR_FW_VER_MAJOR_G(adapter->params.er_vers),
4720+
FW_HDR_FW_VER_MINOR_G(adapter->params.er_vers),
4721+
FW_HDR_FW_VER_MICRO_G(adapter->params.er_vers),
4722+
FW_HDR_FW_VER_BUILD_G(adapter->params.er_vers));
4723+
4724+
/* Software/Hardware configuration */
4725+
dev_info(adapter->pdev_dev, "Configuration: %sNIC %s, %s capable\n",
4726+
is_offload(adapter) ? "R" : "",
4727+
((adapter->flags & USING_MSIX) ? "MSI-X" :
4728+
(adapter->flags & USING_MSI) ? "MSI" : ""),
4729+
is_offload(adapter) ? "Offload" : "non-Offload");
4730+
}
4731+
46554732
static void print_port_info(const struct net_device *dev)
46564733
{
46574734
char buf[80];
@@ -4679,14 +4756,8 @@ static void print_port_info(const struct net_device *dev)
46794756
--bufp;
46804757
sprintf(bufp, "BASE-%s", t4_get_port_type_description(pi->port_type));
46814758

4682-
netdev_info(dev, "Chelsio %s rev %d %s %sNIC %s\n",
4683-
adap->params.vpd.id,
4684-
CHELSIO_CHIP_RELEASE(adap->params.chip), buf,
4685-
is_offload(adap) ? "R" : "",
4686-
(adap->flags & USING_MSIX) ? " MSI-X" :
4687-
(adap->flags & USING_MSI) ? " MSI" : "");
4688-
netdev_info(dev, "S/N: %s, P/N: %s\n",
4689-
adap->params.vpd.sn, adap->params.vpd.pn);
4759+
netdev_info(dev, "%s: Chelsio %s (%s) %s\n",
4760+
dev->name, adap->params.vpd.id, adap->name, buf);
46904761
}
46914762

46924763
static void enable_pcie_relaxed_ordering(struct pci_dev *dev)
@@ -4844,6 +4915,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
48444915
adapter->regs = regs;
48454916
adapter->pdev = pdev;
48464917
adapter->pdev_dev = &pdev->dev;
4918+
adapter->name = pci_name(pdev);
48474919
adapter->mbox = func;
48484920
adapter->pf = func;
48494921
adapter->msg_enable = dflt_msg_enable;
@@ -5074,6 +5146,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
50745146
if (is_offload(adapter))
50755147
attach_ulds(adapter);
50765148

5149+
print_adapter_info(adapter);
5150+
50775151
sriov:
50785152
#ifdef CONFIG_PCI_IOV
50795153
if (func < ARRAY_SIZE(num_vf) && num_vf[func] > 0)

drivers/net/ethernet/chelsio/cxgb4/sge.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3006,7 +3006,9 @@ void t4_free_sge_resources(struct adapter *adap)
30063006
if (etq->q.desc) {
30073007
t4_eth_eq_free(adap, adap->mbox, adap->pf, 0,
30083008
etq->q.cntxt_id);
3009+
__netif_tx_lock_bh(etq->txq);
30093010
free_tx_desc(adap, &etq->q, etq->q.in_use, true);
3011+
__netif_tx_unlock_bh(etq->txq);
30103012
kfree(etq->q.sdesc);
30113013
free_txq(adap, &etq->q);
30123014
}

0 commit comments

Comments
 (0)