Commit Graph

19 Commits

Author SHA1 Message Date
Michael Brown e117c894fd EmbeddedPkg/Lan9118Dxe: Do not return uninitialised TxBuff
Conform to the specification for GetStatus(), which states that "if
there are no transmit buffers to recycle and TxBuf is not NULL, *TxBuf
will be set to NULL".

Cc: Leif Lindholm <leif.lindholm@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-05-12 10:01:17 +02:00
Mark Rutland 505e7fd5d0 EmbeddedPkg/Lan9118Dxe: remove redundant stalls
Now that the LAN9118-specific MMIO accessors provide the required
delays, remove the redundant stalls.

Stalls in delay loops are kept, as these give time for work to happen
beyond synchronisation of the device register file.

Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Ryan Harkin <ryan.harkin@linaro.org>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-05-10 14:49:40 +02:00
Mark Rutland e68449c999 EmbeddedPkg/Lan9118Dxe: Use LAN9118 MMIO wrappers
Migrate the existing code to use the new LAN9118 MMIO wrappers, ensuring
that timing requirements are respected.

The newly redundant stalls will be removed in a subsequent patch.

Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Ryan Harkin <ryan.harkin@linaro.org>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-05-10 14:49:20 +02:00
Mark Rutland 28f52b9fae Revert "EmbeddedPkg/Lan9118Dxe: use MemoryFence"
Commit a4626006bb ("EmbeddedPkg/Lan9118Dxe: use MemoryFence")
replaced some stalls with memory fences, on the presumption that these
were erroneously being used to order memory accesses. However, this was
not the case.

LAN9118 devices require a timing delay between state-changing
reads/writes and subsequent reads, as updates to the register file are
asynchronous and the effects of state-changes are not immediately
visible to subsequent reads.

This delay cannot be ensured through the use of memory barriers, which
only enforce observable ordering, and not timing. Thus, converting these
stalls to memory fences was erroneous, and may result in stale values
being read.

This reverts commit a4626006bb.

Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Ryan Harkin <ryan.harkin@linaro.org>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-05-10 14:48:25 +02:00
Ryan Harkin c64aa7c409 EmbeddedPkg/Lan9118Dxe: minor DEBUG tidyup
This patch makes a few minor DEBUG output changes:

- Fix typo in DEBUG output: Negociation->Negotiation

- Change DEBUG occurrences of "Lan9118" to "LAN9118" to make grepping
  the log output easier.

- Change the warning that auto-negotiation is not supported when
  AutoNegotiate() returns an error.
  The function already reports if the feature is supported or not and
  can also return an error for other reasons.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-02-10 17:56:47 +01:00
Ryan Harkin a4626006bb EmbeddedPkg/Lan9118Dxe: use MemoryFence
When reviewing my LAN9118 driver PCD patch [1], Ard Biesheuvel noted
that most calls to gBS->Stall() in this driver seem to be used to
prevent timing issues between the device updating data and the host
reading the values.  And that replacing most of these calls with a
MemoryFence() would be more robust.

The only exceptions are the stalls that are enclosed inside retry loops:

 - in the AutoNegotiate() function.
   This stall is waiting for the link to negotiate, which may require
   stalling until it is ready.

 - in the Lan9118Initialize() function.
   These two stalls are waiting for devices and time out after a number
   of retries.

 - in the SoftReset() function.
   This stall is inside a loop where the comment states:
   "If time taken exceeds 100us, then there was an error condition"

In these instances, I kept the stall, but also added a MemoryFence().

[1] http://article.gmane.org/gmane.comp.bios.edk2.devel/7389

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-02-10 17:56:39 +01:00
Ronald Cron 1130106eb2 EmbeddedPkg/Lan9118Dxe: Ignore spurious RXE errors
Spurious error might appear during network transaction,
ignore them when there are not relevant.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <Ronald.Cron@arm.com>
Reviewed-by: Olivier Martin <Olivier.Martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18028 6f19259b-4bc3-4df7-8a09-765794883524
2015-07-16 11:24:42 +00:00
Olivier Martin f22e965895 EmbeddedPkg/Lan9118Dxe: Fix risk of buffer overflow.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-by: Ronald Cron <ronald.cron@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17107 6f19259b-4bc3-4df7-8a09-765794883524
2015-04-02 13:50:18 +00:00
Ronald Cron ac8f1e103d EmbeddedPkg/Lan9118Dxe: Fix the reset after a receiver or transmitter error
The Lan9118 driver did not recover after a receiver error as the error
handling code stopped the transmitter but did not restart it. Added the
restart of the transmitter.

Added also the restart of the receiver after a transmitter error and
the reactivation of the LEDs after all resets.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>




git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17106 6f19259b-4bc3-4df7-8a09-765794883524
2015-04-02 13:49:05 +00:00
Ronald Cron 6382e5df4e EmbeddedPkg/Lan9118Dxe: Remove link check in SNP initialization
The UEFI specification does not require the initialisation and reset
interface to check if an Ethernet cable is connected or not, and provides
the GetStatus() interface to do this. Furthermore, the 'Managed Network
Protocol' take care of the cable connection check in edk2 network stack.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16326 6f19259b-4bc3-4df7-8a09-765794883524
2014-11-11 00:49:50 +00:00
Ronald Cron 11bbc25789 EmbeddedPkg/Lan9118Dxe: Rework filter init, enabling and disabling
Correct the setting of the hardware filters according to what it asked
to the driver through the ReceiveFilters() interface function.

Keep track of the hardware settings in the "ReceiveFilterSetting" field of
 the EFI_SIMPLE_NETWORK_MODE structure.

From now, after initialization, all filters are disabled and thus no packet
received.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16243 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:42:13 +00:00
Ronald Cron e52aee5d31 EmbeddedPkg/Lan9118Dxe: Fix interrupt's mask returned by GetStatus
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16242 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:41:29 +00:00
Ronald Cron 0f0a6fe907 EmbeddedPkg/Lan9118Dxe: Switch back the driver in stopped state after shutdown
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16240 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:39:52 +00:00
Ronald Cron 0150e14dba EmbeddedPkg/Lan9118Dxe: Add or fix input parameter checks
Add or fix checking of the input parameters of the functions that constitute
the EFI_SIMPLE_NETWORK_PROTOCOL interface provided by the LAN9118 driver.
In case of invalid calls, the returned error codes are now compliant with the
UEFI specificationi and the SCT tests checking for those error codes do not
fail anymore.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16239 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:39:12 +00:00
Olivier Martin a537c71726 EmbeddedPkg/Lan9118Dxe: Fixed dereferencing optional NULL pointer
TxBuff argument is optional in SNP.GetStatus(). This argument can be NULL.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16236 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:35:57 +00:00
Ronald Cron c9263c7dd2 EmbeddedPkg: Fix crash when retrieving LAN9118 network statistics
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16235 6f19259b-4bc3-4df7-8a09-765794883524
2014-10-27 10:34:56 +00:00
Olivier Martin 42589b9ac9 EmbeddedPkg/Lan9118Dxe: Handle EFI_STATUS from PhySoftReset() & SoftReset()
- Make the function PhySoftReset() return EFI_STATUS
- EFI_STATUS was treated as a signed integer by the caller which is not correct.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15630 6f19259b-4bc3-4df7-8a09-765794883524
2014-07-04 14:47:11 +00:00
Olivier Martin b0fdce95f7 ARM Packages: Fixed missing braces (the warning was disabled by GCC)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15578 6f19259b-4bc3-4df7-8a09-765794883524
2014-06-20 18:24:51 +00:00
Olivier Martin 46f2c53b54 EmbeddedPkg: Added Lan9118 Dxe driver
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Signed-off-by: Brendan Jackman <brendan.jackman@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15485 6f19259b-4bc3-4df7-8a09-765794883524
2014-04-24 19:29:11 +00:00