We are implementing a custom network device with MII interface in the PL side of Zynq-7000. One GEM of PS is connected to the module via EMIO. We want to disable FCS (CRC) calculation of GEM because we will calculate CRC later.
PS runs Petalinux 2019.1. We tried to disable CRC calculation with the following command:
# ethtool -k eth0 tx off
Although ethtool reports (ethtool -K eth0) that tx-checksumming off after the command, packets send via MII interface have still valid CRC at the end. I think that although TX CRC offloading is disabled for eth0, somewhat CRC is calculated by Linux network stack on the CPU not by GEM and appended to the packet.
So, how can we disable CRC calculation for TX packets? It is suggested that the above command should work but in our case we still get CRC .
How are you sending frames? If it's with raw sockets, Linux still generates the frame checksums whether its done in software or hardware. I don't think you can transmit an ethernet frame with no or an invalid layer 2 checksum without modifications.
If you need to strip the frame checksum, you could do it in custom hardware, or modify Linux (preferably the MACB driver) to not send it for you at all with something like a device tree option. Modifying the network stack is also possible, though I'm not sure how much effort and risk is involved.