On Tuesday 01 Mar 2011 04:15:33 Andrew Dwyer wrote:
> Dwyer, Andrew <Andrew.Dwyer@...> writes:
> > I'm hitting ctrl+b at the first prompt because that's the only one I
> > get.  After that the screen goes blank and then the devices in the boot
> > order attempt to boot.
> >
> > I'm doing this on a HP Z400 which has a HP branded BIOS.  The network
> > card definitely appears in the boot order selection with the stock Intel
> > pxe rom, but when I replace it with iPXE it disappears.
> >
> > The BIOS detection line:
> >
> > iPXE (http://ipxe.org) 37:09.0 1000 PCI3.00 PnP PMM+004D1200+004E1EF0
> > D740
> 
> Does anyone have any suggestions for me on this issue?  I'm still having
>  the same problem of iPXE on my network card not showing up as a bootable
>  device.

HP BIOSes are known to do some strange things, such as using random unmarked 
areas of system memory to hold critical BIOS data structures.  You could try 
the attached patch, which will convert iPXE to a dumb pre-PCI3 ROM that 
doesn't do *anything* on initialisation except inform the BIOS that it is a 
bootable device.  It should then show up as "iPXE" (rather than the usual 
"iPXE (PCI 37:09.0)").

Note that this may prevent other option ROMs in the system from functioning, 
since the iPXE ROM will no longer shrink itself in order to take up less 
option ROM space.  You should check that you can boot the system without 
relying on option ROMs that are loaded after iPXE before you apply this patch.

(As an illustration, on one of my machines I had to boot from a SATA disk in 
order to recover, because the unshrunk iPXE ROM prevented the IDE controller's 
option ROM from loading.)

Michael
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S
index ede0fb4..9d865ac 100644
--- a/src/arch/i386/prefix/romprefix.S
+++ b/src/arch/i386/prefix/romprefix.S
@@ -79,7 +79,7 @@ pciheader:
 	.word	pci_device_id		/* Device identification */
 	.word	0x0000			/* Device list pointer */
 	.word	pciheader_len		/* PCI data structure length */
-	.byte	0x03			/* PCI data structure revision */
+	.byte	0x00			/* PCI data structure revision */
 	.byte	0x02, 0x00, 0x00	/* Class code */
 pciheader_image_length:
 	.word	0			/* Image length */
@@ -88,8 +88,6 @@ pciheader_image_length:
 	.byte	0x80			/* Last image indicator */
 pciheader_runtime_length:
 	.word	0			/* Maximum run-time image length */
-	.word	0x0000			/* Configuration utility code header */
-	.word	0x0000			/* DMTF CLP entry point */
 	.equ pciheader_len, . - pciheader
 	.size pciheader, . - pciheader
 
@@ -170,6 +168,11 @@ undiheader:
  * if it wants to boot us.  If it is not PnP, hook INT 19.
  */
 init:
+
+	// Do nothing except indicating that we are a boot-capable device
+	movw	$0x20, %ax
+	lret
+
 	/* Preserve registers, clear direction flag, set %ds=%cs */
 	pushaw
 	pushw	%ds
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo/ipxe-devel

Reply via email to