Patchwork [03/20] eepro100: Fix PXE boot

login
register
mail settings
Submitter Stefan Weil
Date March 2, 2010, 6:43 p.m.
Message ID <1267555416-12400-1-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/46689/
State New
Headers show

Comments

Stefan Weil - March 2, 2010, 6:43 p.m.
The phy handling was wrong for PXE, GPXE boot:
GPXE's eepro100 driver did not detect a valid link.

This is fixed here.

V2 - Use UPPER_CASE for enum values

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/eepro100.c |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)
Michael S. Tsirkin - March 2, 2010, 8:04 p.m.
On Tue, Mar 02, 2010 at 07:43:36PM +0100, Stefan Weil wrote:
> The phy handling was wrong for PXE, GPXE boot:
> GPXE's eepro100 driver did not detect a valid link.
> 
> This is fixed here.
> 
> V2 - Use UPPER_CASE for enum values
> 
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>

Please repost the whole series, using prefix PATCHv3
and Cc me.

Thanks!

Patch

diff --git a/hw/eepro100.c b/hw/eepro100.c
index 124bc49..f6764cc 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -20,7 +20,7 @@ 
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  *
  * Tested features (i82559):
- *      PXE boot (i386) no valid link
+ *      PXE boot (i386) ok
  *      Linux networking (i386) ok
  *
  * Untested:
@@ -33,10 +33,6 @@ 
  * Open Source Software Developer Manual
  */
 
-#if defined(TARGET_I386)
-# warning "PXE boot still not working!"
-#endif
-
 #include <stddef.h>             /* offsetof */
 #include <stdbool.h>
 #include "hw.h"
@@ -243,6 +239,17 @@  typedef struct {
     bool has_extended_tcb_support;
 } EEPRO100State;
 
+/* Word indices in EEPROM. */
+typedef enum {
+    EEPROM_CNFG_MDIX  = 0x03,
+    EEPROM_ID         = 0x05,
+    EEPROM_PHY_ID     = 0x06,
+    EEPROM_VENDOR_ID  = 0x0c,
+    EEPROM_CONFIG_ASF = 0x0d,
+    EEPROM_DEVICE_ID  = 0x23,
+    EEPROM_SMBUS_ADDR = 0x90,
+} EEPROMOffset;
+
 /* Default values for MDI (PHY) registers */
 static const uint16_t eepro100_mdi_default[] = {
     /* MDI Registers 0 - 6, 7 */
@@ -632,9 +639,10 @@  static void nic_selective_reset(EEPRO100State * s)
     uint16_t *eeprom_contents = eeprom93xx_data(s->eeprom);
     //~ eeprom93xx_reset(s->eeprom);
     memcpy(eeprom_contents, s->conf.macaddr.a, 6);
-    eeprom_contents[0xa] = 0x4000;
+    eeprom_contents[EEPROM_ID] = 0x4000;
     if (s->device == i82557B || s->device == i82557C)
         eeprom_contents[5] = 0x0100;
+    eeprom_contents[EEPROM_PHY_ID] = 1;
     uint16_t sum = 0;
     for (i = 0; i < EEPROM_SIZE - 1; i++) {
         sum += eeprom_contents[i];