On Friday, April 14, 2023 3:06 AM , Jesper Dangaard Brouer <jbrouer@xxxxxxxxxx> wrote: >On 13/04/2023 17.12, Song Yoong Siang wrote: >> igc_configure_rx_ring() function will be called as part of XDP program >> setup. If Rx hardware timestamp is enabled prio to XDP program setup, >> this timestamp enablement will be overwritten when buffer size is >> written into SRRCTL register. >> >> Thus, this commit read the register value before write to SRRCTL >> register. This commit is tested by using xdp_hw_metadata bpf selftest >> tool. The tool enables Rx hardware timestamp and then attach XDP >> program to igc driver. It will display hardware timestamp of UDP >> packet with port number 9092. Below are detail of test steps and results. >[...] >> diff --git a/drivers/net/ethernet/intel/igc/igc_base.h >> b/drivers/net/ethernet/intel/igc/igc_base.h >> index 7a992befca24..b95007d51d13 100644 >> --- a/drivers/net/ethernet/intel/igc/igc_base.h >> +++ b/drivers/net/ethernet/intel/igc/igc_base.h >> @@ -87,8 +87,11 @@ union igc_adv_rx_desc { >> #define IGC_RXDCTL_SWFLUSH 0x04000000 /* Receive Software Flush */ >> >> /* SRRCTL bit definitions */ >> -#define IGC_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */ >> -#define IGC_SRRCTL_BSIZEHDRSIZE_SHIFT 2 /* Shift _left_ */ >> +#define IGC_SRRCTL_BSIZEPKT_MASK GENMASK(6, 0) >> +#define IGC_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */ >> +#define IGC_SRRCTL_BSIZEHDRSIZE_MASK GENMASK(13, 8) >> +#define IGC_SRRCTL_BSIZEHDRSIZE_SHIFT 2 /* Shift _left_ */ >> +#define IGC_SRRCTL_DESCTYPE_MASK GENMASK(27, 25) >> #define IGC_SRRCTL_DESCTYPE_ADV_ONEBUF 0x02000000 >> >> #endif /* _IGC_BASE_H */ >> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c >> b/drivers/net/ethernet/intel/igc/igc_main.c >> index 25fc6c65209b..de7b21c2ccd6 100644 >> --- a/drivers/net/ethernet/intel/igc/igc_main.c >> +++ b/drivers/net/ethernet/intel/igc/igc_main.c >> @@ -641,7 +641,10 @@ static void igc_configure_rx_ring(struct igc_adapter *adapter, >> else >> buf_size = IGC_RXBUFFER_2048; >> >> - srrctl = IGC_RX_HDR_LEN << IGC_SRRCTL_BSIZEHDRSIZE_SHIFT; >> + srrctl = rd32(IGC_SRRCTL(reg_idx)); >> + srrctl &= ~(IGC_SRRCTL_BSIZEPKT_MASK | IGC_SRRCTL_BSIZEHDRSIZE_MASK | >> + IGC_SRRCTL_DESCTYPE_MASK); > ^^ >Please fix indention, moving IGC_SRRCTL_DESCTYPE_MASK such that it aligns >with IGC_SRRCTL_BSIZEPKT_MASK. This make is easier for the eye to spot that it >is part of the negation (~). Sure. Thanks for your comment. I will fix it in v2. > >> + srrctl |= IGC_RX_HDR_LEN << IGC_SRRCTL_BSIZEHDRSIZE_SHIFT; >> srrctl |= buf_size >> IGC_SRRCTL_BSIZEPKT_SHIFT; >> srrctl |= IGC_SRRCTL_DESCTYPE_ADV_ONEBUF; >>