From 58271f20498ef738a53e3bdc61b938983d38bd9d Mon Sep 17 00:00:00 2001
From: edolomb <none@example.com>
Date: Tue, 30 Jan 2018 15:34:43 +0000
Subject: MAC now works with checksum offload

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11412 35acf78f-673a-0410-8e92-d51de3d6d3f4
---
 os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c | 21 +++++----------------
 os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h |  2 +-
 2 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c
index 0be3c7d91..35f82f4f2 100644
--- a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c
+++ b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c
@@ -358,7 +358,7 @@ void mac_lld_start(MACDriver *macp) {
   macp->rxptr = (sama_eth_rx_descriptor_t *)__eth_rd;
 
   for (i = 0; i < SAMA_MAC_TRANSMIT_BUFFERS; i++)
-    __eth_td[i].tdes1 |= SAMA_TDES1_LAST_BUFF | SAMA_TDES1_USED;
+    __eth_td[i].tdes1 |= SAMA_TDES1_LAST_BUFF | SAMA_TDES1_USED | (SAMA_TDES1_LENGTH_BUFF & BUFFER_SIZE);
 
   macp->txptr = (sama_eth_tx_descriptor_t *)__eth_td;
 
@@ -387,14 +387,12 @@ void mac_lld_start(MACDriver *macp) {
   uint32_t ncfgr = GMAC0->GMAC_NCFGR;
 
 #if SAMA_MAC_IP_CHECKSUM_OFFLOAD
-  GMAC0->GMAC_NCFGR = GMAC_NCFGR_RXCOEN | GMAC_NCFGR_SPD |
-                      GMAC_NCFGR_FD | GMAC_NCFGR_MAXFS |
-                      GMAC_NCFGR_RFCS | ncfgr;
+  GMAC0->GMAC_NCFGR = GMAC_NCFGR_SPD | GMAC_NCFGR_FD | GMAC_NCFGR_RXCOEN |
+                      GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS | ncfgr;
   GMAC0->GMAC_DCFGR |= GMAC_DCFGR_TXCOEN;
 #else
   GMAC0->GMAC_NCFGR = GMAC_NCFGR_SPD | GMAC_NCFGR_FD |
-                      GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS |
-                      ncfgr;
+                      GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS| ncfgr;
 #endif
 
   /* DMA configuration:
@@ -428,8 +426,6 @@ void mac_lld_start(MACDriver *macp) {
   /* Enable RX and TX.*/
   GMAC0->GMAC_NCR |= GMAC_NCR_RXEN | GMAC_NCR_TXEN;
 
-  /* Starts transmission */
-//  GMAC0->GMAC_NCR |= GMAC_NCR_TSTART;
 }
 
 /**
@@ -574,11 +570,7 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp,
   /* Iterates through received frames until a valid one is found, invalid
      frames are discarded.*/
   while (rdes->rdes0 & SAMA_RDES0_OWN) {
-    if (rdes->rdes1 & (SAMA_RDES1_EOF | SAMA_RDES1_SOF)
-#if SAMA_MAC_IP_CHECKSUM_OFFLOAD
-        && (rdes->rdes1 & (SAMA_RDES1_CHECKSUM_IP_TCP | SAMA_RDES1_CHECKSUM_IP_UDP))
-#endif
-       ) {
+    if (rdes->rdes1 & (SAMA_RDES1_EOF | SAMA_RDES1_SOF)) {
       /* Found a valid one.*/
       rdp->offset   = 0;
       /* Only with RFCS set */
@@ -728,9 +720,6 @@ size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp,
   if (size > tdp->size - tdp->offset)
     size = tdp->size - tdp->offset;
 
-  /* Configure lentgh of buffer */
-  tdp->physdesc->tdes1 |= (SAMA_TDES1_LENGTH_BUFF & size);
-
   if (size > 0) {
     memcpy((uint8_t *)(tdp->physdesc->tdes0) + tdp->offset, buf, size);
     tdp->offset += size;
diff --git a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h
index 81e019aaf..7ca57bbf2 100644
--- a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h
+++ b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h
@@ -153,7 +153,7 @@
  * @brief   IP checksum offload.
  * @details The following modes are available:
  *          - 0 Function disabled.
- *          - 1 Only IP header checksum calculation and insertion are enabled.
+ *          - 1 IP/TCP/UDP header checksum calculation and insertion are enabled.
  */
 #if !defined(SAMA_MAC_IP_CHECKSUM_OFFLOAD) || defined(__DOXYGEN__)
 #define SAMA_MAC_IP_CHECKSUM_OFFLOAD        1
-- 
cgit v1.2.3