From nobody Fri May 1 10:25:06 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g6Rxh3qjFz6cMMr for ; Fri, 01 May 2026 10:25:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g6Rxh1wZNz43j0 for ; Fri, 01 May 2026 10:25:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777631112; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3Ed0Zu8b6R6mMuXKw7rDz5dOr49ViuCRCPTWg/dWn4Y=; b=DJW544Z/HsPNFs/CJQcTyyoBOC5k8C+Xj+N2VK1bw/s3jdbC+gP9IgeGdqoJ1DYhnOnViE tlZ91HbPsYrRzj4eUrvkb65SLSeVFi41DWWbyJZ/GF5MsO7BA/R6mmti7+EhamT2W1lPxZ oq/M9arqnWzwrOnfk7ne0+CmNrROp/SYu2nhjBdMX77zISROCuChR+aHC8Npt3gfGGqMBP nBGnsKJ2cDz9mDbW9SC7cGb3JhcigXeXxkvzOQRwgMGrfUYE9cHVLXPapze2OBIogt8uA2 tQTcqXKF0gg+KyJ18Y5cUOk6B3Boq1ssJNcei70kDvXOcH9EzOGkgomphOHJ6w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777631112; a=rsa-sha256; cv=none; b=FCF5j7f+Zv7iyna8RuYxBN9XkdNKLEqdqFFvsN/sHTCiJjm6HJLc45FxL6YTu2dSjNo0mp QZn8QEw49VDicG1Ygmg6qP5YsdTLMQnh+99FuwMg3ZuiU40Ao5GGcmcr0RBbvlUoU0aYxD HBA9WA+gynViJCQb/iVSVhw8o3aKcvrqfctoIoreXelE7WVVEW4AR/7ckIsJ+bOyzT9esJ pkDvLdjTUpoNJkwMfPgikWZ9YayeZMTAylGf14Tf8CLfVdMI6du/nWJEYV0A8myRtlEZZ1 RY5qtX3CFTzFQavM7a5QA5brcmTS0q85LAJkydu/ftGf4KlsYZPi1r/gII0XGQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777631112; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3Ed0Zu8b6R6mMuXKw7rDz5dOr49ViuCRCPTWg/dWn4Y=; b=yp0Pi1uM0C+qRRXeb1KBv3Yi3Wb0L8BASJhm2z6OyogKjIHO0KoiYv0apUhBLF+/+ZbMAj Cdm5jPyQCe1MpLNzNnS7ZYtRVHXt6ntP7L98CFB1qKBZytW4mcPyKnTJMr1YGvprpk+rH4 bFRCNNZ5mHwwkMgZI0VFeX0P/8mH7b41QdZ7bRdLGN9tOKcuifdrIG2CWyJMndvWS7Um4y q4/F+8X640IoeiT4s3yuyBW5p1Bi1rIvsq3HY5T7YfmWbrgXXbRgANN6/sZwpATdFn+tzM lHU3bA4bxLAKxCbw4roKEdAaSp1gSnc8whKVhBpI6YSO6m4JAESt91tQKkl02w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g6Rxh17xJzvP0 for ; Fri, 01 May 2026 10:25:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22753 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 01 May 2026 10:25:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Tom Jones Subject: git: 9c77fb6aaa36 - main - amdsmu: Add Krackan Point support List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: thj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9c77fb6aaa366cbabc80ee1b834bcfe4df135491 Auto-Submitted: auto-generated Date: Fri, 01 May 2026 10:25:06 +0000 Message-Id: <69f47f82.22753.31ea2c08@gitrepo.freebsd.org> The branch main has been updated by thj: URL: https://cgit.FreeBSD.org/src/commit/?id=9c77fb6aaa366cbabc80ee1b834bcfe4df135491 commit 9c77fb6aaa366cbabc80ee1b834bcfe4df135491 Author: Tom Jones AuthorDate: 2026-04-24 12:47:04 +0000 Commit: Tom Jones CommitDate: 2026-05-01 10:24:50 +0000 amdsmu: Add Krackan Point support Reviewed by: obiwac, emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56619 --- sys/dev/amdsmu/amdsmu.c | 18 +++++++-- sys/dev/amdsmu/amdsmu.h | 98 +++++++++++++++++++++++++++++++++------------ sys/dev/amdsmu/amdsmu_reg.h | 7 +++- 3 files changed, 92 insertions(+), 31 deletions(-) diff --git a/sys/dev/amdsmu/amdsmu.c b/sys/dev/amdsmu/amdsmu.c index 7b97888887c5..5029336af9cb 100644 --- a/sys/dev/amdsmu/amdsmu.c +++ b/sys/dev/amdsmu/amdsmu.c @@ -30,11 +30,21 @@ amdsmu_match(device_t dev, const struct amdsmu_product **product_out) const uint16_t vendorid = pci_get_vendor(dev); const uint16_t deviceid = pci_get_device(dev); + const uint32_t model = CPUID_TO_MODEL(cpu_id); + for (size_t i = 0; i < nitems(amdsmu_products); i++) { const struct amdsmu_product *prod = &amdsmu_products[i]; if (vendorid == prod->amdsmu_vendorid && deviceid == prod->amdsmu_deviceid) { + + /* + * Some Krackan Point devices have different ip blocks + * based on CPU model. + */ + if (prod->model != 0x00 && model != prod->model) + continue; + if (product_out != NULL) *product_out = prod; return (true); @@ -105,7 +115,7 @@ amdsmu_cmd(device_t dev, enum amdsmu_msg msg, uint32_t arg, uint32_t *ret) amdsmu_write4(sc, SMU_REG_RESPONSE, SMU_RES_WAIT); /* Write out command to registers. */ - amdsmu_write4(sc, SMU_REG_MESSAGE, msg); + amdsmu_write4(sc, sc->product->amdsmu_msg, msg); amdsmu_write4(sc, SMU_REG_ARGUMENT, arg); /* Wait for SMU response and handle it. */ @@ -175,7 +185,7 @@ amdsmu_get_ip_blocks(device_t dev) sc->ip_blocks_active[i] = active; if (!active) continue; - printf("%s%s", amdsmu_ip_blocks_names[i], + printf("%s%s", sc->product->ip_blocks_names[i], i + 1 < sc->product->ip_block_count ? " " : "\n"); } @@ -193,10 +203,10 @@ amdsmu_get_ip_blocks(device_t dev) /* Create the sysctl node itself for the IP block. */ snprintf(sysctl_descr, sizeof sysctl_descr, "Metrics about the %s AMD IP block", - amdsmu_ip_blocks_names[i]); + sc->product->ip_blocks_names[i]); sc->ip_block_sysctlnodes[i] = SYSCTL_ADD_NODE(sc->sysctlctx, SYSCTL_CHILDREN(sc->ip_blocks_sysctlnode), OID_AUTO, - amdsmu_ip_blocks_names[i], CTLFLAG_RD, NULL, sysctl_descr); + sc->product->ip_blocks_names[i], CTLFLAG_RD, NULL, sysctl_descr); if (sc->ip_block_sysctlnodes[i] == NULL) { device_printf(dev, "could not add sysctl node for \"%s\"\n", sysctl_descr); diff --git a/sys/dev/amdsmu/amdsmu.h b/sys/dev/amdsmu/amdsmu.h index 4286d515ae77..0e7c4df37a43 100644 --- a/sys/dev/amdsmu/amdsmu.h +++ b/sys/dev/amdsmu/amdsmu.h @@ -14,7 +14,11 @@ #include #include #include -#include + +#include +#include +#include +#include #include #include @@ -22,26 +26,7 @@ #define SMU_RES_READ_PERIOD_US 50 #define SMU_RES_READ_MAX 20000 -static const struct amdsmu_product { - uint16_t amdsmu_vendorid; - uint16_t amdsmu_deviceid; - int16_t idlemask_reg; - size_t ip_block_count; -} amdsmu_products[] = { - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_CEZANNE_ROOT, - SMU_REG_IDLEMASK_CEZANNE, 12 }, - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_REMBRANDT_ROOT, - SMU_REG_IDLEMASK_PHOENIX, 12 }, - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_PHOENIX_ROOT, - SMU_REG_IDLEMASK_PHOENIX, 21 }, - /* - * XXX Strix Point (PCI_DEVICEID_AMD_STRIX_POINT_ROOT) doesn't support - * S0i3 and thus doesn't have an idlemask. Since our driver doesn't - * yet understand this, don't attach to Strix Point for the time being. - */ -}; - -static const char *const amdsmu_ip_blocks_names[] = { +static const char *amdsmu_ip_blocks_names[] = { "DISPLAY", "CPU", "GFX", @@ -66,7 +51,69 @@ static const char *const amdsmu_ip_blocks_names[] = { "VPE", }; -CTASSERT(nitems(amdsmu_ip_blocks_names) <= 32); +static const char *amdsmu_ip_blocks_names_v2[] = { + "DISPLAY", + "CPU", + "GFX", + "VDD", + "VDD_CCX", + "ACP", + "VCN_0", + "VCN_1", + "ISP", + "NBIO", + "DF", + "USB3_0", + "USB3_1", + "LAPIC", + "USB3_2", + "USB4_RT0", + "USB4_RT1", + "USB4_0", + "USB4_1", + "MPM", + "JPEG_0", + "JPEG_1", + "IPU", + "UMSCH", + "VPE", +}; + +#define IP_MAX_BLOCK_NAMES 32 + +CTASSERT(nitems(amdsmu_ip_blocks_names) <= IP_MAX_BLOCK_NAMES); +CTASSERT(nitems(amdsmu_ip_blocks_names_v2) <= IP_MAX_BLOCK_NAMES); + +static const struct amdsmu_product { + uint16_t amdsmu_vendorid; + uint16_t amdsmu_deviceid; + uint32_t model; + int16_t idlemask_reg; + size_t ip_block_count; + const char **ip_blocks_names; + uint32_t amdsmu_msg; +} amdsmu_products[] = { + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_CEZANNE_ROOT, 0x00, + SMU_REG_IDLEMASK_CEZANNE, 12 , amdsmu_ip_blocks_names, + SMU_REG_MSG_CEZANNE}, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_REMBRANDT_ROOT, 0x00, + SMU_REG_IDLEMASK_PHOENIX, 12 , amdsmu_ip_blocks_names, + SMU_REG_MSG_CEZANNE}, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_PHOENIX_ROOT, 0x00, + SMU_REG_IDLEMASK_PHOENIX, 21 , amdsmu_ip_blocks_names, + SMU_REG_MSG_CEZANNE}, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_KRACKAN_POINT_ROOT, 0x00, + SMU_REG_IDLEMASK_KRACKAN, 22, amdsmu_ip_blocks_names, + SMU_REG_MSG_KRACKAN }, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_KRACKAN_POINT_ROOT, 0x70, + SMU_REG_IDLEMASK_KRACKAN, 25, amdsmu_ip_blocks_names_v2, + SMU_REG_MSG_KRACKAN }, + /* + * XXX Strix Point (PCI_DEVICEID_AMD_STRIX_POINT_ROOT) doesn't support + * S0i3 and thus doesn't have an idlemask. Since our driver doesn't + * yet understand this, don't attach to Strix Point for the time being. + */ +}; struct amdsmu_softc { const struct amdsmu_product *product; @@ -88,14 +135,13 @@ struct amdsmu_softc { uint32_t active_ip_blocks; struct sysctl_oid *ip_blocks_sysctlnode; - struct sysctl_oid *ip_block_sysctlnodes[ - nitems(amdsmu_ip_blocks_names)]; - bool ip_blocks_active[ - nitems(amdsmu_ip_blocks_names)]; + struct sysctl_oid *ip_block_sysctlnodes[IP_MAX_BLOCK_NAMES]; + bool ip_blocks_active[IP_MAX_BLOCK_NAMES]; bus_space_handle_t metrics_space; struct amdsmu_metrics metrics; uint32_t idlemask; + uint32_t smu_msg; }; static inline uint32_t diff --git a/sys/dev/amdsmu/amdsmu_reg.h b/sys/dev/amdsmu/amdsmu_reg.h index 6afbcf006535..c71082072b60 100644 --- a/sys/dev/amdsmu/amdsmu_reg.h +++ b/sys/dev/amdsmu/amdsmu_reg.h @@ -16,6 +16,7 @@ * out? Also, there are way more of these. I couldn't find a centralized place * which lists them though. */ +#define PCI_DEVICEID_AMD_KRACKAN_POINT_ROOT 0x1122 #define PCI_DEVICEID_AMD_CEZANNE_ROOT 0x1630 #define PCI_DEVICEID_AMD_REMBRANDT_ROOT 0x14B5 #define PCI_DEVICEID_AMD_PHOENIX_ROOT 0x14E8 @@ -28,14 +29,18 @@ #define SMU_PHYSBASE_ADDR_HI 0x13B102EC #define SMU_MEM_SIZE 0x1000 + #define SMU_REG_SPACE_OFF 0x10000 -#define SMU_REG_MESSAGE 0x538 #define SMU_REG_RESPONSE 0x980 #define SMU_REG_ARGUMENT 0x9BC #define SMU_REG_IDLEMASK_CEZANNE 0x94 #define SMU_REG_IDLEMASK_PHOENIX 0xD14 +#define SMU_REG_IDLEMASK_KRACKAN 0xF14 + +#define SMU_REG_MSG_CEZANNE 0x538 +#define SMU_REG_MSG_KRACKAN 0x938 enum amdsmu_res { SMU_RES_WAIT = 0x00,