Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/amdsmu/amdsmu.h
39534 views
1
/*
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2025 The FreeBSD Foundation
5
*
6
* This software was developed by Aymeric Wibo <[email protected]>
7
* under sponsorship from the FreeBSD Foundation.
8
*/
9
#ifndef _AMDSMU_H_
10
#define _AMDSMU_H_
11
12
#include <sys/param.h>
13
#include <sys/bus.h>
14
#include <sys/kernel.h>
15
#include <machine/bus.h>
16
#include <x86/cputypes.h>
17
18
#include <dev/amdsmu/amdsmu_reg.h>
19
20
#define SMU_RES_READ_PERIOD_US 50
21
#define SMU_RES_READ_MAX 20000
22
23
static const struct amdsmu_product {
24
uint16_t amdsmu_vendorid;
25
uint16_t amdsmu_deviceid;
26
} amdsmu_products[] = {
27
{ CPU_VENDOR_AMD, PCI_DEVICEID_AMD_REMBRANDT_ROOT },
28
{ CPU_VENDOR_AMD, PCI_DEVICEID_AMD_PHOENIX_ROOT },
29
{ CPU_VENDOR_AMD, PCI_DEVICEID_AMD_STRIX_POINT_ROOT },
30
};
31
32
static const char *const amdsmu_ip_blocks_names[] = {
33
"DISPLAY",
34
"CPU",
35
"GFX",
36
"VDD",
37
"ACP",
38
"VCN",
39
"ISP",
40
"NBIO",
41
"DF",
42
"USB3_0",
43
"USB3_1",
44
"LAPIC",
45
"USB3_2",
46
"USB3_3",
47
"USB3_4",
48
"USB4_0",
49
"USB4_1",
50
"MPM",
51
"JPEG",
52
"IPU",
53
"UMSCH",
54
"VPE",
55
};
56
57
CTASSERT(nitems(amdsmu_ip_blocks_names) <= 32);
58
59
struct amdsmu_softc {
60
struct sysctl_ctx_list *sysctlctx;
61
struct sysctl_oid *sysctlnode;
62
63
struct resource *res;
64
bus_space_tag_t bus_tag;
65
66
bus_space_handle_t smu_space;
67
bus_space_handle_t reg_space;
68
69
uint8_t smu_program;
70
uint8_t smu_maj, smu_min, smu_rev;
71
72
uint32_t active_ip_blocks;
73
struct sysctl_oid *ip_blocks_sysctlnode;
74
size_t ip_block_count;
75
struct sysctl_oid *ip_block_sysctlnodes[nitems(amdsmu_ip_blocks_names)];
76
bool ip_blocks_active[nitems(amdsmu_ip_blocks_names)];
77
78
bus_space_handle_t metrics_space;
79
struct amdsmu_metrics metrics;
80
uint32_t idlemask;
81
};
82
83
static inline uint32_t
84
amdsmu_read4(const struct amdsmu_softc *sc, bus_size_t reg)
85
{
86
return (bus_space_read_4(sc->bus_tag, sc->reg_space, reg));
87
}
88
89
static inline void
90
amdsmu_write4(const struct amdsmu_softc *sc, bus_size_t reg, uint32_t val)
91
{
92
bus_space_write_4(sc->bus_tag, sc->reg_space, reg, val);
93
}
94
95
#endif /* _AMDSMU_H_ */
96
97