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

Commit f2080fa3 authored by Bryan O'Sullivan's avatar Bryan O'Sullivan Committed by Roland Dreier
Browse files

IB/ipath: enable GPIO interrupt on HT-460



This is required for even semi-decent performance on OpenIB.

Signed-off-by: default avatarBryan O'Sullivan <bos@pathscale.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent b0ff7c20
Loading
Loading
Loading
Loading
+3 −4
Original line number Original line Diff line number Diff line
@@ -505,11 +505,10 @@ static u8 flash_csum(struct ipath_flash *ifp, int adjust)
 * ipath_get_guid - get the GUID from the i2c device
 * ipath_get_guid - get the GUID from the i2c device
 * @dd: the infinipath device
 * @dd: the infinipath device
 *
 *
 * When we add the multi-chip support, we will probably have to add
 * We have the capability to use the ipath_nguid field, and get
 * the ability to use the number of guids field, and get the guid from
 * the guid from the first chip's flash, to use for all of them.
 * the first chip's flash, to use for all of them.
 */
 */
void ipath_get_guid(struct ipath_devdata *dd)
void ipath_get_eeprom_info(struct ipath_devdata *dd)
{
{
	void *buf;
	void *buf;
	struct ipath_flash *ifp;
	struct ipath_flash *ifp;
+19 −2
Original line number Original line Diff line number Diff line
@@ -607,7 +607,12 @@ static int ipath_ht_boardname(struct ipath_devdata *dd, char *name,
	case 4:		/* Ponderosa is one of the bringup boards */
	case 4:		/* Ponderosa is one of the bringup boards */
		n = "Ponderosa";
		n = "Ponderosa";
		break;
		break;
	case 5:		/* HT-460 original production board */
	case 5:
		/*
		 * HT-460 original production board; two production levels, with
		 * different serial number ranges.   See ipath_ht_early_init() for
		 * case where we enable IPATH_GPIO_INTR for later serial # range.
		 */
		n = "InfiniPath_HT-460";
		n = "InfiniPath_HT-460";
		break;
		break;
	case 6:
	case 6:
@@ -642,7 +647,7 @@ static int ipath_ht_boardname(struct ipath_devdata *dd, char *name,
	if (n)
	if (n)
		snprintf(name, namelen, "%s", n);
		snprintf(name, namelen, "%s", n);


	if (dd->ipath_majrev != 3 || dd->ipath_minrev != 2) {
	if (dd->ipath_majrev != 3 || (dd->ipath_minrev < 2 || dd->ipath_minrev > 3)) {
		/*
		/*
		 * This version of the driver only supports the HT-400
		 * This version of the driver only supports the HT-400
		 * Rev 3.2
		 * Rev 3.2
@@ -1520,6 +1525,18 @@ static int ipath_ht_early_init(struct ipath_devdata *dd)
	 */
	 */
	ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
	ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
			 INFINIPATH_S_ABORT);
			 INFINIPATH_S_ABORT);

	ipath_get_eeprom_info(dd);
	if(dd->ipath_boardrev == 5 && dd->ipath_serial[0] == '1' &&
		dd->ipath_serial[1] == '2' && dd->ipath_serial[2] == '8') {
		/*
		 * Later production HT-460 has same changes as HT-465, so
		 * can use GPIO interrupts.  They have serial #'s starting
		 * with 128, rather than 112.
		 */
		dd->ipath_flags |= IPATH_GPIO_INTR;
		dd->ipath_flags &= ~IPATH_POLL_RX_INTR;
	}
	return 0;
	return 0;
}
}


+0 −1
Original line number Original line Diff line number Diff line
@@ -879,7 +879,6 @@ int ipath_init_chip(struct ipath_devdata *dd, int reinit)


done:
done:
	if (!ret) {
	if (!ret) {
		ipath_get_guid(dd);
		*dd->ipath_statusp |= IPATH_STATUS_CHIP_PRESENT;
		*dd->ipath_statusp |= IPATH_STATUS_CHIP_PRESENT;
		if (!dd->ipath_f_intrsetup(dd)) {
		if (!dd->ipath_f_intrsetup(dd)) {
			/* now we can enable all interrupts from the chip */
			/* now we can enable all interrupts from the chip */
+1 −1
Original line number Original line Diff line number Diff line
@@ -650,7 +650,7 @@ u32 __iomem *ipath_getpiobuf(struct ipath_devdata *, u32 *);
void ipath_init_pe800_funcs(struct ipath_devdata *);
void ipath_init_pe800_funcs(struct ipath_devdata *);
/* init HT-400-specific func */
/* init HT-400-specific func */
void ipath_init_ht400_funcs(struct ipath_devdata *);
void ipath_init_ht400_funcs(struct ipath_devdata *);
void ipath_get_guid(struct ipath_devdata *);
void ipath_get_eeprom_info(struct ipath_devdata *);
u64 ipath_snap_cntr(struct ipath_devdata *, ipath_creg);
u64 ipath_snap_cntr(struct ipath_devdata *, ipath_creg);


/*
/*
+2 −0
Original line number Original line Diff line number Diff line
@@ -1180,6 +1180,8 @@ static int ipath_pe_early_init(struct ipath_devdata *dd)
	 */
	 */
	dd->ipath_rhdrhead_intr_off = 1ULL<<32;
	dd->ipath_rhdrhead_intr_off = 1ULL<<32;


	ipath_get_eeprom_info(dd);

	return 0;
	return 0;
}
}