>For my Problem, I've wrote it to the list few day's ago, this patch
>does not help. For me it's very imortant that the eepro100.lzpxe + an
>dos tagged image works, but against the realy good working
>3c905c.lzpxe it hard hangs directly after the start of the dos tagged
>image. It works great for the 3com nic's but the eepro100 onboard nic
>of my compaq en sff machines it doesn't work for all I have done.
The eepro100.c driver in both Etherboot and Linux is unusual in the way
the close is done, it issues a PortPartialReset. However a look at the
e100/ which is the driver Intel released, shows that this driver does
more. A *_close calls e100_sw_reset with reset_cmd ==
PORT_SELECTIVE_RESET:
e100_sw_reset(struct e100_private *bdp, u32 reset_cmd)
{
/* Do a selective reset first to avoid a potential PCI hang */
writel(PORT_SELECTIVE_RESET, &bdp->scb->scb_port);
readw(&(bdp->scb->scb_status)); /* flushes last write, read-safe */
/* wait for the reset to take effect */
udelay(20);
if (reset_cmd == PORT_SOFTWARE_RESET) {
writel(PORT_SOFTWARE_RESET, &bdp->scb->scb_port);
/* wait 20 micro seconds for the reset to take effect */
udelay(20);
}
/* Mask off our interrupt line -- its unmasked after reset */
e100_dis_intr(bdp);
}
PORT_SELECTIVE_RESET == PortPartialReset (different names for the same
constant in different drivers). The interesting bit is the last
operation and the comment. Linux doesn't seem to mind finding the NIC
after a PortPartialReset but it could be that the DOS driver doesn't
like finding interrupts unmasked after it loads. Perhaps Etherboot
should issue a disable interrupts too. This is done in the e100 by:
static inline void
e100_dis_intr(struct e100_private *bdp)
{
/* Disable interrupts on our PCI board by setting the mask bit */
writeb(SCB_INT_MASK, &bdp->scb->scb_cmd_hi);
readw(&(bdp->scb->scb_status)); /* flushes last write, read-safe */
}
The e100 driver can be found in recent 2.5 kernel sources. If somebody
could hack this in (with the obvious changes to register names etc) and
let us know if it helps, that would be good.
|