summaryrefslogtreecommitdiffstats
path: root/src/drivers/infiniband
Commit message (Collapse)AuthorAgeFilesLines
...
* [arbel] Avoid unused variable warning in gcc 4.6Michael Brown2011-03-161-1/+1
| | | | | | Reported-by: Ralph Giles <giles@thaumas.net> Tested-by: Ralph Giles <giles@thaumas.net> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Make driver 64-bit safeMichael Brown2011-03-041-2/+37
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Make driver 64-bit safeMichael Brown2011-03-042-0/+37
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Add BOFM supportMichael Brown2011-03-033-58/+415
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [pci] Make driver PCI ID a property of the PCI deviceMichael Brown2011-02-174-8/+4Star
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Add missing __attribute__ (( packed ))Michael Brown2011-02-171-2/+2
| | | | | | | | | | On 64-bit builds, MLX_DECLARE_STRUCT() produces a structure that is always a multiple of 64 bits long, causing the HCR structure to be over-length by one dword. This in turn causes hermon_cmd() to write beyond the end of the HCR, which causes commands to fail. Reported-by: Itay Gazit <itayg@mellanox.co.il> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Force link speed to SDRItay Gazit2011-02-173-5/+62
| | | | | | | SDR link comes up much faster than other speeds. Signed-off-by: Itay Gazit <itaygazit@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Use circular event queueItay Gazit2011-02-172-4/+10
| | | | | | | | | Avoid memory leak of untreated events by having circular event queue operation. Signed-off-by: Itay Gazit <itaygazit@gmail.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Update PRM file with latest changesItay Gazit2011-02-171-20/+18Star
| | | | | Signed-off-by: Itay Gazit <itaygazit@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Fix hermon_cmd_sense_port() to use inline outputItay Gazit2011-02-171-3/+3
| | | | | Signed-off-by: Itay Gazit <itaygazit@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Indicate that device does not support interruptsMichael Brown2011-01-251-12/+0Star
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Fix incorrectly-padded sense_port structureMichael Brown2010-12-241-1/+1
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Work around hardware stripping of VLAN tagsMichael Brown2010-12-011-3/+17
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Fix inconsistent information in HERMON_SET_PORT_GENERAL_PARAMMichael Brown2010-11-291-6/+4Star
| | | | | | pptx and pfctx should not be set together, nor should pprx and pfcrx. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Enable priority flow control on the FCoE priorityMichael Brown2010-11-271-2/+7
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Add support for dual-protocol devicesMichael Brown2010-09-212-81/+712
| | | | | Originally-implemented-by: Itay Gazit <itaygazit@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Add infrastructure for Ethernet devicesItay Gazit2010-09-212-8/+156
| | | | | | | | Add PRM structures to support Hermon Ethernet devices. Signed-off-by: Itay Gazit <itaygazit@gmail.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Use SET_PORT to set port parametersMichael Brown2010-09-212-23/+89
| | | | | | | Unlike Arbel, port parameters must be applied via a separate call to SET_PORT, rather than as parameters to INIT_PORT. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Tidy up ICM allocationsMichael Brown2010-09-192-91/+86Star
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Minimise the number of VPM mapping operationsMichael Brown2010-09-191-7/+39
| | | | | | | | | Mapping a single page at a time causes a several-second delay at device initialisation time. Reduce this by mapping multiple pages at a time, using the largest block sizes possible given the alignment constraints. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Minimise the number of VPM mapping operationsMichael Brown2010-09-192-50/+129
| | | | | | | | | Mapping a single page at a time causes a several-second delay at device initialisation time. Reduce this by mapping multiple pages at a time, using the largest block sizes possible given the alignment constraints. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Allocate only as much memory as is needed for firmware and ICMMichael Brown2010-09-181-26/+66
| | | | | | | | Use individual page mappings rather than a single whole-region mapping, to avoid the waste of memory that occurs due to the constraint that each mapped block must be aligned on its own size. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Synchronise changes with the Hermon driverMichael Brown2010-09-172-38/+70
| | | | | | | | | | | | | Backport some changes from the Hermon driver to the Arbel driver. Specifically: o Rename reserved_lkey to lkey o Add arbel_rate() to calculate transmission rates o Structure code to allow for addition of RC queue pairs Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Optimise ICM layout to reduce overall memory usageMichael Brown2010-09-172-75/+136
| | | | | | | | | | Reduce the amount of ICM space required by choosing to order the various allocations in approximately descending order of alignment requirements. This saves approximately 512kB of host memory. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Perform ICM allocations according to the specificationMichael Brown2010-09-172-44/+87
| | | | | | | | | | | The current method for ICM allocation exactly matches the addresses chosen by the old Etherboot driver, but does not match the specification. Some ICM tables (notably the queue pair context table) therefore end up incorrectly aligned. Fix by performing allocations as per the specification. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Allow for multiple calls to ib_modify_qp()Michael Brown2010-09-172-22/+44
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Inform embedded SMA of partition key changesMichael Brown2010-09-171-5/+5
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Improve debugging output and facilitiesMichael Brown2010-09-172-71/+164
| | | | | | | | | | | Improve the utility of debugging messages by including the relevant port number, queue number (QPN, CQN, EQN), work queue entry (WQE) number, and physical addresses wherever applicable. Add arbel_dump_cqctx() for dumping a completion queue context and arbel_dump_qpctx() for dumping a queue pair context. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Randomise the high-order bits of queue pair numbersMichael Brown2010-09-172-6/+10
| | | | | | | This is a backport of commit 0b1222f ("[hermon] Randomise the high-order bits of queue pair numbers") to the Arbel driver. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Allow software GMA to receive packets destined for QP1Michael Brown2010-09-173-96/+336
| | | | | | | | | | This is a backport of commit cd5a213 ("[hermon] Allow software GMA to receive packets destined for QP1") to the Arbel driver. This patch includes a correction to a bug in the autogenerated hardware description header file. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Map all event types to our event queueMichael Brown2010-09-172-5/+21
| | | | | | | | | | | | | Only port state change events are currently mapped to our event queue, since those are the only events we are prepared to handle. This ignores a potentially useful source of diagnostic information in the case of unexpected failures. Fix by mapping all events to the event queue; a build with debugging enabled will therefore at least dump the raw content of the unexpected events. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Map all event types to our event queueMichael Brown2010-09-162-5/+21
| | | | | | | | | | | | | Only port state change events are currently mapped to our event queue, since those are the only events we are prepared to handle. This ignores a potentially useful source of diagnostic information in the case of unexpected failures. Fix by mapping all events to the event queue; a build with debugging enabled will therefore at least dump the raw content of the unexpected events. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [infiniband] Add node GUID as distinct from the first port GUIDMichael Brown2010-09-162-1/+5
| | | | | | | | | | | | | | | iPXE currently uses the first port's port GUID as the node GUID, rather than using the (possibly distinct) real node GUID. This can confuse opensm during the handover to a loaded OS: it thinks the port already belongs to a different node and so discards our port information with a warning message about duplicate ports. Everything is picked up correctly on the second subnet sweep, after opensm has established that the "old" node no longer exists, but this can delay link-up unnecessarily by several seconds. Fix by using the real node GUID. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [arbel] Poll for link state changes while DOWNMichael Brown2010-09-161-0/+9
| | | | | | | No event is generated upon reaching INIT, so we must poll separately for link state changes while we remain DOWN. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Poll for link state changes while DOWNMichael Brown2010-09-161-0/+9
| | | | | | | No event is generated upon reaching INIT, so we must poll separately for link state changes while we remain DOWN. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [infiniband] Always call ib_link_state_changed() in ib_smc_update()Michael Brown2010-09-162-12/+5Star
| | | | | | | | | | | | | | ib_smc_update() potentially updates the Infiniband port state, and so should almost always be followed by a call to ib_link_state_changed(). The one exception is the call made to ib_smc_update() before the device is registered. Fix by removing explicit calls to ib_link_state_changed() from drivers using ib_smc_update(), including a call to ib_link_state_changed() within ib_smc_update(), and creating a separate ib_smc_init() for use prior to device registration. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [infiniband] Match GID/GUID terminology as used in the IBAMichael Brown2010-09-154-32/+27Star
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Use correct alignment for doorbell recordsMichael Brown2010-09-122-11/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | Doorbell records are currently embedded within the completion queue and receive work queue strucures, which are allocated using zalloc() and so have an alignment guarantee of only sizeof(void*), i.e. four bytes. This is sufficient for the receive work queue, but not for the completion queue, which requires an alignment guarantee of eight bytes. Though not guaranteed, it so happens that zalloc() will always return a pointer that is exactly four bytes above a sixteen-byte boundary. The completion queue doorbell record is therefore always misaligned, and the value passed to the hardware via SW2HW_CQ is actually always pointing to the page_offset value within the MTT descriptor (which directly precedes the inline doorbell record). Provided that the page offset is greater than 0x100, this looks to the hardware like an update_ci value of greater than 0x010000 (taking into account endianness differences), and so the hardware will happily deliver more than 0x010000 completions before stopping. Hence this problem is rarely observable. Fix by allocating the doorbell records separately and using the correct alignment constraints. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Set event queue number for completion queuesMichael Brown2010-09-121-0/+1
| | | | | | | | Give completion queues a chance to deliver exception events by programming in the number of our event queue (currently used only for port state changes). Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Improve debugging output and facilitiesMichael Brown2010-09-122-91/+180
| | | | | | | | | | | Improve the utility of debugging messages by including the relevant port number, queue number (QPN, CQN, EQN), work queue entry (WQE) number, and physical addresses wherever applicable. Add hermon_dump_cqctx() for dumping a completion queue context, and hermon_fill_nop_send_wqe() for inserting NOPs into send work queues. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [qib7322] Fix whitespace errorsMichael Brown2010-06-011-107/+108
| | | | | | | Fix up the whitespace errors inadvertently introduced by the last-minute rename from the internal QLogic codename to "qib7322". Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [qib7322] Fix uninitialized variables warningShao Miller2010-06-011-3/+10
| | | | | | Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [qib7322] Add support for QLogic 7322 HCAMichael Brown2010-05-253-0/+10050
| | | | Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [build] Rename gPXE to iPXEMichael Brown2010-04-206-30/+30
| | | | | | | | | | | Access to the gpxe.org and etherboot.org domains and associated resources has been revoked by the registrant of the domain. Work around this problem by renaming project from gPXE to iPXE, and updating URLs to match. Also update README, LOG and COPYRIGHTS to remove obsolete information. Signed-off-by: Michael Brown <mcb30@ipxe.org>
* [hermon] Change hermon_alloc_icm() to conform to ConnectX2 requirementsItay Gazit2010-02-131-16/+58
| | | | | | | | Align each ICM member alloc to the member size instead of page size. Increase multicast table size to 128. Signed-off-by: Itay Gazit <itaygazit@gmail.com> Signed-off-by: Marty Connor <mdc@etherboot.org>
* [linda] Re-import the latest register definitionsMichael Brown2009-11-161-6/+4Star
| | | | | Two registers have been renamed, and a bugfix to qib_genbits.pl removes a harmless excess padding field.
* [susieq] Update qib_genbits.pl to handle SusieQ definitionsMichael Brown2009-11-161-4/+24
| | | | | | The latest RTL-generated register lists include (mostly redundant) xxx_MSB values alongside xxx_LSB and xxx_RMASK, and also include default register values.
* [linda] Wait up to 20us for link state to updateMichael Brown2009-11-162-0/+35
| | | | | | | | | | Some subnet managers expect the GetResponse from a SetPortInfo MAD to contain the new link state. The transition is not immediate, so we often end up returning the previous link state. This can cause the SM to fail to activate the port. Fix by waiting for up to 20us for the link state transition to take effect.
* [hermon] Reset device during probe()Michael Brown2009-10-142-0/+28
| | | | | | | | | | | Some systems will retry their boot sequence in the event of a boot failure. On these systems, the second and subsequent boot attempts will fail to initialise the Hermon HCA. Fix by resetting the HCA during probe(). This incurs a one-second cost, but there seems to be no viable alternative. Originally-fixed-by: Itay Gazit <itaygazit@gmail.com>
* [hermon] Reduce the RC ACK timeoutMichael Brown2009-08-101-1/+1
| | | | | | | | The ACK timeout determines how long we take to notice a failed Reliable Connection. Reducing it from the arbitrary value of 19 down to 14 reduces the individual ACK timeout from around 2.1s to 67ms; this in turn reduces the time to tear down and re-establish a broken SRP session from around 30s to around 1s.