Page MenuHomeFreeBSD

D50278.id155237.diff
No OneTemporary

D50278.id155237.diff

diff --git a/sys/dev/amdsmn/amdsmn.c b/sys/dev/amdsmn/amdsmn.c
--- a/sys/dev/amdsmn/amdsmn.c
+++ b/sys/dev/amdsmn/amdsmn.c
@@ -25,7 +25,7 @@
*/
/*
- * Driver for the AMD Family 15h and 17h CPU System Management Network.
+ * Driver for the AMD Family 15h, 17h, 19h, 1Ah CPU System Management Network.
*/
#include <sys/param.h>
@@ -62,6 +62,10 @@
#define PCI_DEVICE_ID_AMD_19H_M40H_ROOT 0x14b5
#define PCI_DEVICE_ID_AMD_19H_M60H_ROOT 0x14d8 /* Also F1AH M40H */
#define PCI_DEVICE_ID_AMD_19H_M70H_ROOT 0x14e8
+#define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT 0x153a
+#define PCI_DEVICE_ID_AMD_1AH_M20H_ROOT 0x1507
+#define PCI_DEVICE_ID_AMD_1AH_M60H_ROOT 0x1122
+
struct pciid;
struct amdsmn_softc {
@@ -129,6 +133,24 @@
.amdsmn_addr_reg = F17H_SMN_ADDR_REG,
.amdsmn_data_reg = F17H_SMN_DATA_REG,
},
+ {
+ .amdsmn_vendorid = CPU_VENDOR_AMD,
+ .amdsmn_deviceid = PCI_DEVICE_ID_AMD_1AH_M00H_ROOT,
+ .amdsmn_addr_reg = F17H_SMN_ADDR_REG,
+ .amdsmn_data_reg = F17H_SMN_DATA_REG,
+ },
+ {
+ .amdsmn_vendorid = CPU_VENDOR_AMD,
+ .amdsmn_deviceid = PCI_DEVICE_ID_AMD_1AH_M20H_ROOT,
+ .amdsmn_addr_reg = F17H_SMN_ADDR_REG,
+ .amdsmn_data_reg = F17H_SMN_DATA_REG,
+ },
+ {
+ .amdsmn_vendorid = CPU_VENDOR_AMD,
+ .amdsmn_deviceid = PCI_DEVICE_ID_AMD_1AH_M60H_ROOT,
+ .amdsmn_addr_reg = F17H_SMN_ADDR_REG,
+ .amdsmn_data_reg = F17H_SMN_DATA_REG,
+ },
};
/*
@@ -216,7 +238,7 @@
default:
return (ENXIO);
}
- device_set_descf(dev, "AMD Family %xh System Management Network",
+ device_set_descf(dev, "AMD Family %02Xh System Management Network",
family);
return (BUS_PROBE_GENERIC);
diff --git a/sys/dev/amdtemp/amdtemp.c b/sys/dev/amdtemp/amdtemp.c
--- a/sys/dev/amdtemp/amdtemp.c
+++ b/sys/dev/amdtemp/amdtemp.c
@@ -117,6 +117,9 @@
#define DEVICEID_AMD_HOSTB19H_M40H_ROOT 0x14b5
#define DEVICEID_AMD_HOSTB19H_M60H_ROOT 0x14d8 /* Also F1AH M40H */
#define DEVICEID_AMD_HOSTB19H_M70H_ROOT 0x14e8
+#define DEVICEID_AMD_HOSTB1AH_M00H_ROOT 0x153a
+#define DEVICEID_AMD_HOSTB1AH_M20H_ROOT 0x1507
+#define DEVICEID_AMD_HOSTB1AH_M60H_ROOT 0x1122
static const struct amdtemp_product {
uint16_t amdtemp_vendorid;
@@ -145,6 +148,9 @@
{ VENDORID_AMD, DEVICEID_AMD_HOSTB19H_M40H_ROOT, false },
{ VENDORID_AMD, DEVICEID_AMD_HOSTB19H_M60H_ROOT, false },
{ VENDORID_AMD, DEVICEID_AMD_HOSTB19H_M70H_ROOT, false },
+ { VENDORID_AMD, DEVICEID_AMD_HOSTB1AH_M00H_ROOT, false },
+ { VENDORID_AMD, DEVICEID_AMD_HOSTB1AH_M20H_ROOT, false },
+ { VENDORID_AMD, DEVICEID_AMD_HOSTB1AH_M60H_ROOT, false },
};
/*
@@ -166,7 +172,7 @@
#define AMDTEMP_15H_M60H_REPTMP_CTRL 0xd8200ca4
/*
- * Reported Temperature, Family 17h
+ * Reported Temperature, Family 17h - 1Ah
*
* According to AMD OSRR for 17H, section 4.2.1, bits 31-21 of this register
* provide the current temp. bit 19, when clear, means the temp is reported in
@@ -294,21 +300,33 @@
static int
amdtemp_probe(device_t dev)
{
- uint32_t family, model;
+ uint32_t family, model, stepping;
- if (resource_disabled("amdtemp", 0))
+ if (resource_disabled("amdtemp", 0)) {
+ if (bootverbose)
+ device_printf(dev, "Resource disabled\n");
return (ENXIO);
- if (!amdtemp_match(device_get_parent(dev), NULL))
+ }
+ if (!amdtemp_match(device_get_parent(dev), NULL)) {
+ if (bootverbose)
+ device_printf(dev, "amdtemp_match() failed\n");
return (ENXIO);
+ }
family = CPUID_TO_FAMILY(cpu_id);
model = CPUID_TO_MODEL(cpu_id);
+ stepping = CPUID_TO_STEPPING(cpu_id);
switch (family) {
case 0x0f:
- if ((model == 0x04 && (cpu_id & CPUID_STEPPING) == 0) ||
- (model == 0x05 && (cpu_id & CPUID_STEPPING) <= 1))
+ if ((model == 0x04 && stepping == 0) ||
+ (model == 0x05 && stepping <= 1)) {
+ if (bootverbose)
+ device_printf(dev,
+ "Unsupported (Family=%02Xh, Model=%02Xh, Stepping=%02Xh)\n",
+ family, model, stepping);
return (ENXIO);
+ }
break;
case 0x10:
case 0x11:
@@ -323,7 +341,8 @@
default:
return (ENXIO);
}
- device_set_desc(dev, "AMD CPU On-Die Thermal Sensors");
+ device_set_descf(dev, "AMD Family %02Xh CPU On-Die Thermal Sensors",
+ family);
return (BUS_PROBE_GENERIC);
}
@@ -484,7 +503,7 @@
needsmn = true;
break;
default:
- device_printf(dev, "Bogus family 0x%x\n", family);
+ device_printf(dev, "Bogus family %02Xh\n", family);
return (ENXIO);
}
@@ -493,7 +512,7 @@
device_get_parent(dev), "amdsmn", -1);
if (sc->sc_smn == NULL) {
if (bootverbose)
- device_printf(dev, "No SMN device found\n");
+ device_printf(dev, "No amdsmn(4) device found\n");
return (ENXIO);
}
}
@@ -509,7 +528,7 @@
device_printf(dev,
"Erratum 319: temperature measurement may be inaccurate\n");
if (bootverbose)
- device_printf(dev, "Found %d cores and %d sensors.\n",
+ device_printf(dev, "Found %d cores and %d sensors\n",
sc->sc_ncores,
sc->sc_ntemps > 1 ? sc->sc_ntemps * sc->sc_ncores : 1);
@@ -857,7 +876,7 @@
break;
default:
device_printf(dev,
- "Unrecognized Family 17h Model: %02xh\n", model);
+ "Unrecognized Family 17h Model: %02Xh\n", model);
return;
}
@@ -877,7 +896,7 @@
maxreg = 8;
_Static_assert((int)NUM_CCDS >= 8, "");
break;
- case 0x10 ... 0x1f:
+ case 0x10 ... 0x1f: /* Zen4 EPYC "Genoa" */
sc->sc_temp_base = AMDTEMP_ZEN4_10H_CCD_TMP_BASE;
maxreg = 12;
_Static_assert((int)NUM_CCDS >= 12, "");
@@ -891,7 +910,7 @@
break;
default:
device_printf(dev,
- "Unrecognized Family 19h Model: %02xh\n", model);
+ "Unrecognized Family 19h Model: %02Xh\n", model);
return;
}
@@ -905,14 +924,16 @@
uint32_t maxreg;
switch (model) {
+ case 0x00 ... 0x2f: /* Zen5 EPYC "Turin" */
case 0x40 ... 0x4f: /* Zen5 Ryzen "Granite Ridge" */
+ case 0x60 ... 0x7f: /* ??? */
sc->sc_temp_base = AMDTEMP_ZEN4_CCD_TMP_BASE;
maxreg = 8;
_Static_assert((int)NUM_CCDS >= 8, "");
break;
default:
device_printf(dev,
- "Unrecognized Family 1ah Model: %02xh\n", model);
+ "Unrecognized Family 1Ah Model: %02Xh\n", model);
return;
}

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 8:40 AM (4 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28478642
Default Alt Text
D50278.id155237.diff (5 KB)

Event Timeline