diff --git a/ThirdParty/sw_services/lwip141/data/lwip141.tcl b/ThirdParty/sw_services/lwip141/data/lwip141.tcl index a0d812ae..7cea80c0 100755 --- a/ThirdParty/sw_services/lwip141/data/lwip141.tcl +++ b/ThirdParty/sw_services/lwip141/data/lwip141.tcl @@ -121,7 +121,7 @@ proc lwip_temac_hw_drc {libhandle emac} { # - if fifo, fifo intr (not verified) proc lwip_axi_ethernet_hw_drc {libhandle emac} { - set emacname $emac + set emacname [common::get_property IP_NAME [hsi::get_cells -hier $emac]] set mhs_handle [hsi::get_cells -hier $emac] set intr_port [hsi::get_pins -of_objects [hsi::get_cells -hier $emac] INTERRUPT] @@ -152,7 +152,14 @@ proc lwip_axi_ethernet_hw_drc {libhandle emac} { if {$target_periph_type == "axi_fifo_mm_s"} { error "ERROR: Checksum offload is possible only with a DMA engine" "" "MDT_ERROR" } - set hw_tx_csum [common::get_property CONFIG.TXCSUM $emac] + + if {$emacname == "axi_ethernet_buffer" } { + set hw_tx_csum [common::get_property CONFIG.C_TXCSUM $mhs_handle] + } else { + set hw_tx_csum [common::get_property CONFIG.TXCSUM $mhs_handle] + set hw_tx_csum [get_checksum $hw_tx_csum] + } + if {$hw_tx_csum == "1" && $tx_full_csum } { error "ERROR: lwIP cannot offload full TX checksum calculation since hardware \ supports partial TX checksum offload" "" "MDT_ERROR" @@ -175,7 +182,13 @@ proc lwip_axi_ethernet_hw_drc {libhandle emac} { if {$target_periph_type == "axi_fifo_mm_s"} { error "ERROR: Checksum offload is possible only with a DMA engine" "" "MDT_ERROR" } - set hw_rx_csum [common::get_property CONFIG.RXCSUM $emac] + if {$emacname == "axi_ethernet_buffer" } { + set hw_rx_csum [common::get_property CONFIG.C_RXCSUM $mhs_handle] + } else { + set hw_rx_csum [common::get_property CONFIG.RXCSUM $mhs_handle] + set hw_rx_csum [get_checksum $hw_rx_csum] + } + if {$hw_rx_csum == "1" && $rx_full_csum } { error "ERROR: lwIP cannot offload full RX checksum calculation since hardware \ supports partial RX checksum offload" "" "MDT_ERROR" @@ -344,7 +357,13 @@ proc generate_lwip_opts {libhandle} { if {$iptype == "xps_ethernetlite" || $iptype == "opb_ethernetlite" || $iptype == "axi_ethernetlite"} { set have_emaclite 1 } - if {$iptype == "axi_ethernet" || $iptype == "axi_ethernet_buffer" } { + if {$iptype == "axi_ethernet"} { + set checksum_txoption [common::get_property CONFIG.TXCSUM $emac] + set checksum_txoption [get_checksum $checksum_txoption] + set checksum_rxoption [common::get_property CONFIG.RXCSUM $emac] + set checksum_rxoption [get_checksum $checksum_rxoption] + } + if {$iptype == "axi_ethernet_buffer" } { set checksum_txoption [common::get_property CONFIG.C_TXCSUM $emac] set checksum_rxoption [common::get_property CONFIG.C_RXCSUM $emac] } @@ -1317,6 +1336,18 @@ proc axieth_target_periph {emac} { return $target_periph_type } +proc get_checksum {value} { + if {[string compare -nocase $value "None"] == 0} { + set value 0 + } elseif {[string compare -nocase $value "Partial"] == 0} { + set value 1 + } else { + set value 2 + } + + return $value +} + #------- # generate: called after OS and library files are copied into project dir # we need to generate the following: diff --git a/ThirdParty/sw_services/lwip141/src/ChangeLog b/ThirdParty/sw_services/lwip141/src/ChangeLog index 3b1582cc..186531f5 100644 --- a/ThirdParty/sw_services/lwip141/src/ChangeLog +++ b/ThirdParty/sw_services/lwip141/src/ChangeLog @@ -1,5 +1,7 @@ Change Log for lwip ================================= +2015-09-09 + * Fix compilation issues with the non hier axi eth design 2015-09-04 * Update makefile to allow incremental build. * Add support for latest freertos (freertos821_xilinx)