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

Commit 60948a41 authored by Ralph Campbell's avatar Ralph Campbell Committed by Roland Dreier
Browse files

IB/ipath: Port config has on-chip effects for 7220



The number of configured ports for the 7220 changes the number of eager
TIDs available per port, for all but port 0 (kernel port) which remains
constant, so add a field to give port0 count separate from the portdata
structure.

Signed-off-by: default avatarRalph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent a18e26ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -882,7 +882,7 @@ static int ipath_create_user_egr(struct ipath_portdata *pd)

	egrcnt = dd->ipath_rcvegrcnt;
	/* TID number offset for this port */
	egroff = pd->port_port * egrcnt;
	egroff = (pd->port_port - 1) * egrcnt + dd->ipath_p0_rcvegrcnt;
	egrsize = dd->ipath_rcvegrbufsize;
	ipath_cdbg(VERBOSE, "Allocating %d egr buffers, at egrtid "
		   "offset %x, egrsize %u\n", egrcnt, egroff, egrsize);
+9 −0
Original line number Diff line number Diff line
@@ -1669,6 +1669,14 @@ static void ipath_ht_free_irq(struct ipath_devdata *dd)
	dd->ipath_intconfig = 0;
}

static void ipath_ht_config_ports(struct ipath_devdata *dd, ushort cfgports)
{
	dd->ipath_portcnt =
		ipath_read_kreg32(dd, dd->ipath_kregs->kr_portcnt);
	dd->ipath_p0_rcvegrcnt =
		ipath_read_kreg32(dd, dd->ipath_kregs->kr_rcvegrcnt);
}

static void ipath_ht_read_counters(struct ipath_devdata *dd,
				   struct infinipath_counters *cntrs)
{
@@ -1798,6 +1806,7 @@ void ipath_init_iba6110_funcs(struct ipath_devdata *dd)
	dd->ipath_f_setextled = ipath_setup_ht_setextled;
	dd->ipath_f_get_base_info = ipath_ht_get_base_info;
	dd->ipath_f_free_irq = ipath_ht_free_irq;
	dd->ipath_f_config_ports = ipath_ht_config_ports;
	dd->ipath_f_read_counters = ipath_ht_read_counters;

	/*
+9 −0
Original line number Diff line number Diff line
@@ -1423,6 +1423,14 @@ static void ipath_pe_free_irq(struct ipath_devdata *dd)
	dd->ipath_irq = 0;
}

static void ipath_pe_config_ports(struct ipath_devdata *dd, ushort cfgports)
{
	dd->ipath_portcnt =
		ipath_read_kreg32(dd, dd->ipath_kregs->kr_portcnt);
	dd->ipath_p0_rcvegrcnt =
		ipath_read_kreg32(dd, dd->ipath_kregs->kr_rcvegrcnt);
}

static void ipath_pe_read_counters(struct ipath_devdata *dd,
				   struct infinipath_counters *cntrs)
{
@@ -1581,6 +1589,7 @@ void ipath_init_iba6120_funcs(struct ipath_devdata *dd)

	/* initialize chip-specific variables */
	dd->ipath_f_tidtemplate = ipath_pe_tidtemplate;
	dd->ipath_f_config_ports = ipath_pe_config_ports;
	dd->ipath_f_read_counters = ipath_pe_read_counters;

	/*
+2 −3
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ static int create_port0_egr(struct ipath_devdata *dd)
	struct ipath_skbinfo *skbinfo;
	int ret;

	egrcnt = dd->ipath_rcvegrcnt;
	egrcnt = dd->ipath_p0_rcvegrcnt;

	skbinfo = vmalloc(sizeof(*dd->ipath_port0_skbinfo) * egrcnt);
	if (skbinfo == NULL) {
@@ -244,8 +244,7 @@ static int init_chip_first(struct ipath_devdata *dd,
	 * cfgports.  We do still check and report a difference, if
	 * not same (should be impossible).
	 */
	dd->ipath_portcnt =
		ipath_read_kreg32(dd, dd->ipath_kregs->kr_portcnt);
	dd->ipath_f_config_ports(dd, ipath_cfgports);
	if (!ipath_cfgports)
		dd->ipath_cfgports = dd->ipath_portcnt;
	else if (ipath_cfgports <= dd->ipath_portcnt) {
+3 −0
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ struct ipath_devdata {
	int (*ipath_f_get_base_info)(struct ipath_portdata *, void *);
	/* free irq */
	void (*ipath_f_free_irq)(struct ipath_devdata *);
	void (*ipath_f_config_ports)(struct ipath_devdata *, ushort);
	void (*ipath_f_read_counters)(struct ipath_devdata *,
				      struct infinipath_counters *);
	struct ipath_ibdev *verbs_dev;
@@ -326,6 +327,8 @@ struct ipath_devdata {
	u32 ipath_cfgports;
	/* count of port 0 hdrqfull errors */
	u32 ipath_p0_hdrqfull;
	/* port 0 number of receive eager buffers */
	u32 ipath_p0_rcvegrcnt;

	/*
	 * index of last piobuffer we used.  Speeds up searching, by