Hi,
The Aspeed SoCs AST2400 and AST2500 have two FTGMAC100 ethernet
controllers. This series proposes a model for this device and a way to
customize the bit definitions which are slightly different from the
Faraday definitions.
The last patch adds a fake NC-SI (Network Controller Sideband
Interface) backend to pretend a NIC is being managed. This is only
usable with the slirp stack for the moment.
The model has been tested on the 'palmetto', 'romulus' and
'ast2500-evb' machines using different implementations of the Linux
driver and with U-Boot. It has been stressed with iperf.
The full patchset is available here, based on QEMU v2.9.0-rc4 :
https://github.com/legoater/qemu/commits/aspeed
To test, grab a palmetto or a romulus BMC firmware image :
https://openpower.xyz/job/openbmc-build/distro=ubuntu,target=palmetto/lastSuccessfulBuild/artifact/images/palmetto/flash-palmetto
https://openpower.xyz/job/openbmc-build/distro=ubuntu,target=romulus/lastSuccessfulBuild/artifact/images/romulus/flash-romulus
and start the machines with :
qemu-system-arm -m 512 -M romulus-bmc -drive
file=flash-romulus,format=raw,if=mtd -nographic
qemu-system-arm -m 512 -M palmetto-bmc -drive
file=flash-palmetto,format=raw,if=mtd -nographic
the fake NC-SI NIC should come up :
ftgmac100 1e660000.ethernet eth0: NCSI interface up
and to log, use credentials root/0penBmc
Thanks,
C.
Changes since v2:
- rebased on QEMU v2.9.0-rc4
- modified the 'ncsi-pkt.h' file to add its location under the Linux
tree
- removed useless zeroing of the 'reserved' fields
- introduced a ncsi_rsp_handlers array to hold the payload size and
a specific handler routine for each command
- fixed the output size of the frame to match the command payload
size
Changes since v1:
- removed TODO comments and used LOG_UNIMP in the read/write ops
- used camelcase for struct names and typedefs.
- removed the useless struct definitions for ring descriptors and
the alignment pragma
- introduced a frame buffer at the machine level to reduce stack
usage in the tx path.
- introduced symbolic constants for PHY values.
- introduced rtl8211e PHY chip specific registers
- removed qemu_set_irq() in reset path
- checked for dma_memory_read() errors. Also for write but that was
less important as the descriptor is first read so it should be
valid for the write.
- removed the irq state
- removed the weird hack to catch a first valid descriptor.
- fixed the read of the mac address
Cédric Le Goater (5):
hw/net: add MII definitions
net: add FTGMAC100 support
net/ftgmac100: add a 'aspeed' property
aspeed: add a FTGMAC100 nic
slirp: add a fake NC-SI backend
default-configs/arm-softmmu.mak | 1 +
hw/arm/aspeed_soc.c | 21 +
hw/net/Makefile.objs | 1 +
hw/net/ftgmac100.c | 1016 +++++++++++++++++++++++++++++++++++++++
include/hw/arm/aspeed_soc.h | 2 +
include/hw/net/ftgmac100.h | 64 +++
include/hw/net/mii.h | 71 ++-
include/net/eth.h | 1 +
slirp/Makefile.objs | 2 +-
slirp/ncsi-pkt.h | 419 ++++++++++++++++
slirp/ncsi.c | 130 +++++
slirp/slirp.c | 4 +
slirp/slirp.h | 3 +
13 files changed, 1716 insertions(+), 19 deletions(-)
create mode 100644 hw/net/ftgmac100.c
create mode 100644 include/hw/net/ftgmac100.h
create mode 100644 slirp/ncsi-pkt.h
create mode 100644 slirp/ncsi.c