Commit d466dc84 authored by Chamira Perera's avatar Chamira Perera Committed by Erwan Gouriou
Browse files

stm32cube: stm32h7: use transmit timestamp status flag.

Read timestamp only when status flag is set in Tx descriptor.
Fire transmit timestamp callbacks only when there is a valid
non-zero timestamp.

Co-authored-by: default avatarNaeem Bacha <naeem.bacha@audinate.com>
Signed-off-by: default avatarChamira Perera <chamira.perera@audinate.com>
parent 1bc72c29
Loading
Loading
Loading
Loading
+8 −0
Changes for stm32cube/stm32h7xx/README: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -68,4 +68,12 @@ Patch List:
      drivers/include/stm32h7xx_hal_def.h
     ST Internal Reference: 136825

   *Fix to use transmit timestamp when it is valid
    Read timestamp only when status flag is set in Tx descriptor.
    Fire transmit timestamp callbacks only when there is a valid
    non-zero timestamp.
    Impacted files:
     drivers/src/stm32h7xx_hal_eth.c
    ST Internal Reference: 157129

   See release_note.html from STM32Cube
+15 −0
Changes for stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_eth.c: 15 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -1432,17 +1432,29 @@ HAL_StatusTypeDef HAL_ETH_ReleaseTxPacket(ETH_HandleTypeDef *heth)
        /* Disable Ptp transmission */
        CLEAR_BIT(heth->Init.TxDesc[idx].DESC3, (0x40000000U));

        if ((heth->Init.TxDesc[idx].DESC3 & ETH_DMATXNDESCWBF_LD )
          && (heth->Init.TxDesc[idx].DESC3 & ETH_DMATXNDESCWBF_TTSS))
        {
          /* Get timestamp low */
          timestamp->TimeStampLow = heth->Init.TxDesc[idx].DESC0;
          /* Get timestamp high */
          timestamp->TimeStampHigh = heth->Init.TxDesc[idx].DESC1;
        }
        else
        {
          timestamp->TimeStampHigh = timestamp->TimeStampLow = UINT32_MAX;
        }

#endif /* HAL_ETH_USE_PTP */

#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1)
        /*Call registered callbacks*/
#ifdef HAL_ETH_USE_PTP
        /* Handle Ptp  */
        if (timestamp->TimeStampHigh != UINT32_MAX && timestamp->TimeStampLow != UINT32_MAX)
        {
          heth->txPtpCallback(dmatxdesclist->PacketAddress[idx], timestamp);
        }
#endif  /* HAL_ETH_USE_PTP */
        /* Release the packet.  */
        heth->txFreeCallback(dmatxdesclist->PacketAddress[idx]);
@@ -1450,7 +1462,10 @@ HAL_StatusTypeDef HAL_ETH_ReleaseTxPacket(ETH_HandleTypeDef *heth)
        /* Call callbacks */
#ifdef HAL_ETH_USE_PTP
        /* Handle Ptp  */
        if (timestamp->TimeStampHigh != UINT32_MAX && timestamp->TimeStampLow != UINT32_MAX)
        {
          HAL_ETH_TxPtpCallback(dmatxdesclist->PacketAddress[idx], timestamp);
        }
#endif  /* HAL_ETH_USE_PTP */
        /* Release the packet.  */
        HAL_ETH_TxFreeCallback(dmatxdesclist->PacketAddress[idx]);