The branch main has been updated by kbowling:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=6058dfa40238e2cd6ac6f2377986fdff99d14686

commit 6058dfa40238e2cd6ac6f2377986fdff99d14686
Author:     Kevin Bowling <[email protected]>
AuthorDate: 2026-08-11 16:18:33 +0000
Commit:     Kevin Bowling <[email protected]>
CommitDate: 2026-08-11 20:44:58 +0000

    e1000: Compare decoded PCH LTR latencies
    
    The LTR encoding combines a value and a nonlinear scale, so encoded
    values cannot be compared directly.  Decode both the device latency and
    the platform maximum before deciding whether to clamp the request.
    
    MFC after:      2 weeks
---
 sys/dev/e1000/e1000_ich8lan.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/sys/dev/e1000/e1000_ich8lan.c b/sys/dev/e1000/e1000_ich8lan.c
index 29f5b2ff69bd..e7ff5a581ad1 100644
--- a/sys/dev/e1000/e1000_ich8lan.c
+++ b/sys/dev/e1000/e1000_ich8lan.c
@@ -1218,6 +1218,7 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, 
bool link)
                u16 speed, duplex, scale = 0;
                u16 max_snoop, max_nosnoop;
                u16 max_ltr_enc;        /* max LTR latency encoded */
+               u64 max_ltr_ns;
                s64 lat_ns;
                s64 value;
                u32 rxa;
@@ -1266,10 +1267,11 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw 
*hw, bool link)
                e1000_read_pci_cfg(hw, E1000_PCI_LTR_CAP_LPT, &max_snoop);
                e1000_read_pci_cfg(hw, E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop);
                max_ltr_enc = E1000_MAX(max_snoop, max_nosnoop);
+               max_ltr_ns = e1000_ltr2ns(max_ltr_enc);
 
-               if (lat_enc > max_ltr_enc) {
+               if (e1000_ltr2ns(lat_enc) > max_ltr_ns) {
                        lat_enc = max_ltr_enc;
-                       lat_ns = e1000_ltr2ns(max_ltr_enc);
+                       lat_ns = max_ltr_ns;
                }
 
                if (lat_ns) {

Reply via email to