Hi All
there is
/* Controller has hardware checksum support */
#define FEC_QUIRK_HAS_CSUM (1 << 5)
in linux 3.10.17/53
and
.name = "imx6q-fec",
.driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR006358 |
FEC_QUIRK_BUG_WAITMODE,
that is the FEC can do hardware checksum,but it does not work!
which register control this ? and How can I set the register ?
thanks.
Hi ant
yes i.MX6 ENET (FEC) can do hardware checksum, for example refer to
sect.23.5.9 Receive Control Register (ENET_RCR) IMX6DQRM
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks for your answer.
But are ENET_RACC and ENET_TACC about hardware checksum.
In Kernel,there ard some codes
/* set RX checksum */
val = readl(fep->hwp + FEC_RACC);
if (fep->csum_flags & FLAG_RX_CSUM_ENABLED)
val |= FEC_RACC_OPTIONS;
else
val &= ~FEC_RACC_OPTIONS;
writel(val, fep->hwp + FEC_RACC);
If
.driver_data = | FEC_QUIRK_HAS_CSUM
Rx will do checksum,But The kernel does not do checksum for Tx.
there are not any codes about TACC.
So if I want do hard checksum for Tx ,What should I do?
I set TACC[PROCHK] and TACC[IPCHK] to 1,But it does not work.
Thanks again!