[coreboot] [RFC] network console for coreboot and ethernet support for SerialICE
r.marek at assembler.cz
Thu Nov 5 10:32:48 CET 2009
You may ask what is it all about? Well, for SerialICE we have no RAM, therefore
sending through network adapter is not quite easy - you can't even place a
descriptors for DMA in RAM ;) For coreboot we have CAR but same problem, DMA
wants a working memory. Remember those old days with Novell Netware? Packwars?
Netwars? This time is connected with a NE2000 cards. To reduce a cost it is
nearly an reference design of the NS8390 chip. No external DMA, insane registers
;) The Novell needed very cheap Ethernet adapters - because their business was
to license of Nowell Netware per node. They simple needed to make the ethernet
adapters affordable. As the consequence of this NE2000 chips survived even to
PCI era. The Realtek made some chip called RTL8029AS. This chip is still quite
wide spread. I bet you have some 10Mbit/s ethernet cards around (twisted pair)
most likely with this chip...
End of story? No! The sweet features of this chip:
* insane registers
* no DMA, only PIO
* 8bit/16 IO bit access
* 10Mbit/Full duplex ;)
* Nice hardware bugs ;) ?
* 16KB SRAM for TX/RX buffers
Now you know ;) The idea is to create the packets in the card SRAM, construct
some UDP packets with destination eth address as broadcasts. This will ensure we
need no ARP. Packets can be also received, parsing of packets is like reading a
very long FIFO byte to byte or word by word. Therefore I think one could have
this card plugged to some PCI slot in the system and use it for quite fast IO.
The K8 HT chain most likely works to SB so the PCI adpaters are accessible early
too. The only way which needs to be set is the IO resource and enable decoding
of this resource in PCI_CMD. I think problems will only arise if the bus for PCI
slot is not the primary. For the coreboot, I think we can use pci_find_device to
"dynamically" read the current IO port from PCI BAR.
What do you think? I and agaran (aka Maciej) started to hack this together. We
used GPXE as code base for this, now we are able to send/receive data in linux
The usage idea is to have 8029 card as the "console" similar way as linux
netconsole for coreboot. The SerialICE could be changed to use the network
instead of slow serial.
Any clue what might cause that this does not work?
More information about the coreboot