]> www.infradead.org Git - users/jedix/linux-maple.git/commit
bnx2x: bug fix when loading after SAN boot
authorAriel Elior <ariele@broadcom.com>
Sun, 6 May 2012 07:05:57 +0000 (07:05 +0000)
committerJoe Jin <joe.jin@oracle.com>
Wed, 29 Aug 2012 00:22:03 +0000 (08:22 +0800)
commitec9492c91e7daff9eeb6fe6bd42ad6e0175e0d3c
treeac63a51d0b6411cf42c437dd2823a3d583ea6f16
parent3c98be1ddd62f96f8e91131e12a366f6a4114720
bnx2x: bug fix when loading after SAN boot

This is a bug fix for an "interface fails to load" issue.
The issue occurs when bnx2x driver loads after UNDI driver was previously
loaded over the chip. In such a scenario the UNDI driver is loaded and operates
in the pre-boot kernel, within its own specific host memory address range.
When the pre-boot stage is complete, the real kernel is loaded, in a new and
distinct host memory address range. The transition from pre-boot stage to boot
is asynchronous from UNDI point of view.

A race condition occurs when UNDI driver triggers a DMAE transaction to valid
host addresses in the pre-boot stage, when control is diverted to the real
kernel. This results in access to illegal addresses by our HW as the addresses
which were valid in the preboot stage are no longer considered valid.
Specifically, the 'was_error' bit in the pci glue of our device is set. This
causes all following pci transactions from chip to host to timeout (in
accordance to the pci spec).

(cherry picked from commit 24f06716cd5dbfc3d737ec2a24ac58ef76f68dc7)
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/bnx2x/bnx2x_main.c