1f261b633SAymeric Wibo /* 2f261b633SAymeric Wibo * SPDX-License-Identifier: BSD-2-Clause 3f261b633SAymeric Wibo * 4f261b633SAymeric Wibo * Copyright (c) 2025 The FreeBSD Foundation 5f261b633SAymeric Wibo * 6f261b633SAymeric Wibo * This software was developed by Aymeric Wibo <obiwac@freebsd.org> 7f261b633SAymeric Wibo * under sponsorship from the FreeBSD Foundation. 8f261b633SAymeric Wibo */ 9f261b633SAymeric Wibo #ifndef _AMDSMU_REG_H_ 10f261b633SAymeric Wibo #define _AMDSMU_REG_H_ 11f261b633SAymeric Wibo 12e4e44f69SAymeric Wibo #include <sys/types.h> 13e4e44f69SAymeric Wibo 14f261b633SAymeric Wibo /* 15f261b633SAymeric Wibo * TODO These are in common with amdtemp; should we find a way to factor these 16f261b633SAymeric Wibo * out? Also, there are way more of these. I couldn't find a centralized place 17f261b633SAymeric Wibo * which lists them though. 18f261b633SAymeric Wibo */ 19f261b633SAymeric Wibo #define PCI_DEVICEID_AMD_REMBRANDT_ROOT 0x14B5 20f261b633SAymeric Wibo #define PCI_DEVICEID_AMD_PHOENIX_ROOT 0x14E8 21f261b633SAymeric Wibo #define PCI_DEVICEID_AMD_STRIX_POINT_ROOT 0x14A4 22f261b633SAymeric Wibo 23f261b633SAymeric Wibo #define SMU_INDEX_ADDRESS 0xB8 24f261b633SAymeric Wibo #define SMU_INDEX_DATA 0xBC 25f261b633SAymeric Wibo 26f261b633SAymeric Wibo #define SMU_PHYSBASE_ADDR_LO 0x13B102E8 27f261b633SAymeric Wibo #define SMU_PHYSBASE_ADDR_HI 0x13B102EC 28f261b633SAymeric Wibo 29f261b633SAymeric Wibo #define SMU_MEM_SIZE 0x1000 30f261b633SAymeric Wibo #define SMU_REG_SPACE_OFF 0x10000 31f261b633SAymeric Wibo 32f261b633SAymeric Wibo #define SMU_REG_MESSAGE 0x538 33f261b633SAymeric Wibo #define SMU_REG_RESPONSE 0x980 34f261b633SAymeric Wibo #define SMU_REG_ARGUMENT 0x9BC 35*f2de5a6dSAymeric Wibo #define SMU_REG_IDLEMASK 0xD14 36f261b633SAymeric Wibo 37f261b633SAymeric Wibo enum amdsmu_res { 38f261b633SAymeric Wibo SMU_RES_WAIT = 0x00, 39f261b633SAymeric Wibo SMU_RES_OK = 0x01, 40f261b633SAymeric Wibo SMU_RES_REJECT_BUSY = 0xFC, 41f261b633SAymeric Wibo SMU_RES_REJECT_PREREQ = 0xFD, 42f261b633SAymeric Wibo SMU_RES_UNKNOWN = 0xFE, 43f261b633SAymeric Wibo SMU_RES_FAILED = 0xFF, 44f261b633SAymeric Wibo }; 45f261b633SAymeric Wibo 46f261b633SAymeric Wibo enum amdsmu_msg { 47f261b633SAymeric Wibo SMU_MSG_GETSMUVERSION = 0x02, 48f261b633SAymeric Wibo SMU_MSG_LOG_GETDRAM_ADDR_HI = 0x04, 49f261b633SAymeric Wibo SMU_MSG_LOG_GETDRAM_ADDR_LO = 0x05, 50f261b633SAymeric Wibo SMU_MSG_LOG_START = 0x06, 51f261b633SAymeric Wibo SMU_MSG_LOG_RESET = 0x07, 52f261b633SAymeric Wibo SMU_MSG_LOG_DUMP_DATA = 0x08, 53f261b633SAymeric Wibo SMU_MSG_GET_SUP_CONSTRAINTS = 0x09, 54f261b633SAymeric Wibo }; 55f261b633SAymeric Wibo 56e4e44f69SAymeric Wibo /* XXX Copied from Linux struct smu_metrics. */ 57e4e44f69SAymeric Wibo struct amdsmu_metrics { 58e4e44f69SAymeric Wibo uint32_t table_version; 59e4e44f69SAymeric Wibo uint32_t hint_count; 60e4e44f69SAymeric Wibo uint32_t s0i3_last_entry_status; 61e4e44f69SAymeric Wibo uint32_t time_last_in_s0i2; 62e4e44f69SAymeric Wibo uint64_t time_last_entering_s0i3; 63e4e44f69SAymeric Wibo uint64_t total_time_entering_s0i3; 64e4e44f69SAymeric Wibo uint64_t time_last_resuming; 65e4e44f69SAymeric Wibo uint64_t total_time_resuming; 66e4e44f69SAymeric Wibo uint64_t time_last_in_s0i3; 67e4e44f69SAymeric Wibo uint64_t total_time_in_s0i3; 68e4e44f69SAymeric Wibo uint64_t time_last_in_sw_drips; 69e4e44f69SAymeric Wibo uint64_t total_time_in_sw_drips; 70e4e44f69SAymeric Wibo /* 71e4e44f69SAymeric Wibo * This is how long each IP block was active for (us), i.e., blocking 72e4e44f69SAymeric Wibo * entry to S0i3. In Linux, these are called "timecondition_notmet_*". 73e4e44f69SAymeric Wibo * 74e4e44f69SAymeric Wibo * XXX Total active time for IP blocks seems to be buggy and reporting 75e4e44f69SAymeric Wibo * garbage (at least on Phoenix), so it's disabled for now. The last 76e4e44f69SAymeric Wibo * active time for the USB4_0 IP block also seems to be buggy. 77e4e44f69SAymeric Wibo */ 78e4e44f69SAymeric Wibo uint64_t ip_block_last_active_time[32]; 79e4e44f69SAymeric Wibo #ifdef IP_BLOCK_TOTAL_ACTIVE_TIME 80e4e44f69SAymeric Wibo uint64_t ip_block_total_active_time[32]; 81e4e44f69SAymeric Wibo #endif 82e4e44f69SAymeric Wibo } __attribute__((packed)); 83e4e44f69SAymeric Wibo 84f261b633SAymeric Wibo #endif /* _AMDSMU_REG_H_ */ 85