Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7b35cc5 authored by Sasha Neftin's avatar Sasha Neftin Committed by Greg Kroah-Hartman
Browse files

e1000e: Fix the max snoop/no-snoop latency for 10M



[ Upstream commit 44a13a5d99c71bf9e1676d9e51679daf4d7b3d73 ]

We should decode the latency and the max_latency before directly compare.
The latency should be presented as lat_enc = scale x value:
lat_enc_d = (lat_enc & 0x0x3ff) x (1U << (5*((max_ltr_enc & 0x1c00)
>> 10)))

Fixes: cf8fb73c ("e1000e: add support for LTR on I217/I218")
Suggested-by: default avatarYee Li <seven.yi.lee@gmail.com>
Signed-off-by: default avatarSasha Neftin <sasha.neftin@intel.com>
Tested-by: default avatarDvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent de4cd416
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -1010,6 +1010,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
{
	u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) |
	    link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND;
	u16 max_ltr_enc_d = 0;	/* maximum LTR decoded by platform */
	u16 lat_enc_d = 0;	/* latency decoded */
	u16 lat_enc = 0;	/* latency encoded */

	if (link) {
@@ -1063,7 +1065,17 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
				     E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop);
		max_ltr_enc = max_t(u16, max_snoop, max_nosnoop);

		if (lat_enc > max_ltr_enc)
		lat_enc_d = (lat_enc & E1000_LTRV_VALUE_MASK) *
			     (1U << (E1000_LTRV_SCALE_FACTOR *
			     ((lat_enc & E1000_LTRV_SCALE_MASK)
			     >> E1000_LTRV_SCALE_SHIFT)));

		max_ltr_enc_d = (max_ltr_enc & E1000_LTRV_VALUE_MASK) *
				 (1U << (E1000_LTRV_SCALE_FACTOR *
				 ((max_ltr_enc & E1000_LTRV_SCALE_MASK)
				 >> E1000_LTRV_SCALE_SHIFT)));

		if (lat_enc_d > max_ltr_enc_d)
			lat_enc = max_ltr_enc;
	}

+3 −0
Original line number Diff line number Diff line
@@ -284,8 +284,11 @@

/* Latency Tolerance Reporting */
#define E1000_LTRV			0x000F8
#define E1000_LTRV_VALUE_MASK		0x000003FF
#define E1000_LTRV_SCALE_MAX		5
#define E1000_LTRV_SCALE_FACTOR		5
#define E1000_LTRV_SCALE_SHIFT		10
#define E1000_LTRV_SCALE_MASK		0x00001C00
#define E1000_LTRV_REQ_SHIFT		15
#define E1000_LTRV_NOSNOOP_SHIFT	16
#define E1000_LTRV_SEND			(1 << 30)