[PATCH 21/32] agp/nvidia: Stop using 32-bit MSR interfaces
From: Juergen Gross
Date: Mon Jun 29 2026 - 02:13:27 EST
The 32-bit MSR interfaces rdmsr() and wrmsr() are planned to be
removed. Use the related 64-bit variants instead.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
drivers/char/agp/nvidia-agp.c | 32 +++++++++++++++-----------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/drivers/char/agp/nvidia-agp.c b/drivers/char/agp/nvidia-agp.c
index 4787391bb6b4..3e760bc00afa 100644
--- a/drivers/char/agp/nvidia-agp.c
+++ b/drivers/char/agp/nvidia-agp.c
@@ -65,22 +65,20 @@ static int nvidia_fetch_size(void)
static int nvidia_init_iorr(u32 base, u32 size)
{
- u32 base_hi, base_lo;
- u32 mask_hi, mask_lo;
- u32 sys_hi, sys_lo;
+ struct msr base_msr, mask_msr, sys_msr;
u32 iorr_addr, free_iorr_addr;
/* Find the iorr that is already used for the base */
/* If not found, determine the uppermost available iorr */
free_iorr_addr = AMD_K7_NUM_IORR;
for (iorr_addr = 0; iorr_addr < AMD_K7_NUM_IORR; iorr_addr++) {
- rdmsr(IORR_BASE0 + 2 * iorr_addr, base_lo, base_hi);
- rdmsr(IORR_MASK0 + 2 * iorr_addr, mask_lo, mask_hi);
+ rdmsrq(IORR_BASE0 + 2 * iorr_addr, base_msr.q);
+ rdmsrq(IORR_MASK0 + 2 * iorr_addr, mask_msr.q);
- if ((base_lo & 0xfffff000) == (base & 0xfffff000))
+ if ((base_msr.l & 0xfffff000) == (base & 0xfffff000))
break;
- if ((mask_lo & 0x00000800) == 0)
+ if ((mask_msr.l & 0x00000800) == 0)
free_iorr_addr = iorr_addr;
}
@@ -89,16 +87,16 @@ static int nvidia_init_iorr(u32 base, u32 size)
if (iorr_addr >= AMD_K7_NUM_IORR)
return -EINVAL;
}
- base_hi = 0x0;
- base_lo = (base & ~0xfff) | 0x18;
- mask_hi = 0xf;
- mask_lo = ((~(size - 1)) & 0xfffff000) | 0x800;
- wrmsr(IORR_BASE0 + 2 * iorr_addr, base_lo, base_hi);
- wrmsr(IORR_MASK0 + 2 * iorr_addr, mask_lo, mask_hi);
-
- rdmsr(SYSCFG, sys_lo, sys_hi);
- sys_lo |= 0x00100000;
- wrmsr(SYSCFG, sys_lo, sys_hi);
+ base_msr.h = 0x0;
+ base_msr.l = (base & ~0xfff) | 0x18;
+ mask_msr.h = 0xf;
+ mask_msr.l = ((~(size - 1)) & 0xfffff000) | 0x800;
+ wrmsrq(IORR_BASE0 + 2 * iorr_addr, base_msr.q);
+ wrmsrq(IORR_MASK0 + 2 * iorr_addr, mask_msr.q);
+
+ rdmsrq(SYSCFG, sys_msr.q);
+ sys_msr.l |= 0x00100000;
+ wrmsrq(SYSCFG, sys_msr.q);
return 0;
}
--
2.54.0