Part Number: TMDSIDK574
Hi TI,
refrerring to TRM AM5748, section 24.12.4.5.5 Interrupt Pacing:
For a test, I set rx_pacing to 500us: ethtool -C eth0 rx-usecs 500.
I'm using Linux SDK5.3. Driver sets INT_PRESCALE and WR_C0_RX_IMAX as expected:
WR_INT_CONTROL Read at address 0x4848520C : 0x003F01F4
--> pacing is enabled
--> INT_PRESCALE = 1F4h = 500d, 500 x GMAC_MAIN_CLK^-1 (125MHz) = 4us
WR_C0_RX_IMAX: Read at address 0x48485270 (0xb6f92270): 0x00000002 --> 2 interrupts per 1ms, as expected. This is intr_max
"The interrupt pacing module counts the number of interrupts that occur over a 1 ms interval of time.". Let's assume I get 10 rx ints per ms
-> intr_cnt = 10
If we look a the algorithm
if (intr_count > 2*intr_max)
pace_timer = 255;
else ...
Or
if (10 > 4)
pace_timer = 255;
else ...
The way I understand the algo is:
- interrupts are (always) suppressed for 255*4 = about 1ms
- always the first "if" is taken, so we get and interrputs every second
In reality I get an int every 500us.
So it seems I do not fully understand the algorithm or is it not properly documented?
Best regards, Chris