Skip to content

Commit c48f1f4

Browse files
committed
accel/amdxdna: Add hardware specific attributes
Add three hardware specific attributes to describe device capabilities: hwctx_limit: The maximum number of hardware context supported. max_tops: The maximum TOPS supported. curr_tops: The TOPS achievable with the current power and frequency configuration. Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com> Link: https://patch.msgid.link/20251104062546.833771-1-lizhi.hou@amd.com
1 parent a3fcdda commit c48f1f4

7 files changed

Lines changed: 19 additions & 0 deletions

File tree

drivers/accel/amdxdna/aie2_pci.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ struct amdxdna_dev_hdl {
195195
u32 clk_gating;
196196
u32 npuclk_freq;
197197
u32 hclk_freq;
198+
u32 max_tops;
199+
u32 curr_tops;
198200

199201
/* Mailbox and the management channel */
200202
struct mailbox *mbox;
@@ -246,6 +248,7 @@ struct amdxdna_dev_priv {
246248
u32 mbox_dev_addr;
247249
/* If mbox_size is 0, use BAR size. See MBOX_SIZE macro */
248250
u32 mbox_size;
251+
u32 hwctx_limit;
249252
u32 sram_dev_addr;
250253
struct aie2_bar_off_pair sram_offs[SRAM_MAX_INDEX];
251254
struct aie2_bar_off_pair psp_regs_off[PSP_MAX_REGS];

drivers/accel/amdxdna/aie2_smu.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
#define AIE2_SMU_SET_SOFT_DPMLEVEL 0x7
2424
#define AIE2_SMU_SET_HARD_DPMLEVEL 0x8
2525

26+
#define NPU4_DPM_TOPS(ndev, dpm_level) \
27+
({ \
28+
typeof(ndev) _ndev = ndev; \
29+
(4096 * (_ndev)->total_col * \
30+
(_ndev)->priv->dpm_clk_tbl[dpm_level].hclk / 1000000); \
31+
})
32+
2633
static int aie2_smu_exec(struct amdxdna_dev_hdl *ndev, u32 reg_cmd,
2734
u32 reg_arg, u32 *out)
2835
{
@@ -84,6 +91,8 @@ int npu1_set_dpm(struct amdxdna_dev_hdl *ndev, u32 dpm_level)
8491
amdxdna_pm_suspend_put(ndev->xdna);
8592
ndev->hclk_freq = freq;
8693
ndev->dpm_level = dpm_level;
94+
ndev->max_tops = 2 * ndev->total_col;
95+
ndev->curr_tops = ndev->max_tops * freq / 1028;
8796

8897
XDNA_DBG(ndev->xdna, "MP-NPU clock %d, H clock %d\n",
8998
ndev->npuclk_freq, ndev->hclk_freq);
@@ -121,6 +130,8 @@ int npu4_set_dpm(struct amdxdna_dev_hdl *ndev, u32 dpm_level)
121130
ndev->npuclk_freq = ndev->priv->dpm_clk_tbl[dpm_level].npuclk;
122131
ndev->hclk_freq = ndev->priv->dpm_clk_tbl[dpm_level].hclk;
123132
ndev->dpm_level = dpm_level;
133+
ndev->max_tops = NPU4_DPM_TOPS(ndev, ndev->max_dpm_level);
134+
ndev->curr_tops = NPU4_DPM_TOPS(ndev, dpm_level);
124135

125136
XDNA_DBG(ndev->xdna, "MP-NPU clock %d, H clock %d\n",
126137
ndev->npuclk_freq, ndev->hclk_freq);

drivers/accel/amdxdna/npu1_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ static const struct amdxdna_dev_priv npu1_dev_priv = {
7979
.mbox_dev_addr = NPU1_MBOX_BAR_BASE,
8080
.mbox_size = 0, /* Use BAR size */
8181
.sram_dev_addr = NPU1_SRAM_BAR_BASE,
82+
.hwctx_limit = 6,
8283
.sram_offs = {
8384
DEFINE_BAR_OFFSET(MBOX_CHANN_OFF, NPU1_SRAM, MPNPU_SRAM_X2I_MAILBOX_0),
8485
DEFINE_BAR_OFFSET(FW_ALIVE_OFF, NPU1_SRAM, MPNPU_SRAM_I2X_MAILBOX_15),

drivers/accel/amdxdna/npu2_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ static const struct amdxdna_dev_priv npu2_dev_priv = {
7272
.mbox_dev_addr = NPU2_MBOX_BAR_BASE,
7373
.mbox_size = 0, /* Use BAR size */
7474
.sram_dev_addr = NPU2_SRAM_BAR_BASE,
75+
.hwctx_limit = 16,
7576
.sram_offs = {
7677
DEFINE_BAR_OFFSET(MBOX_CHANN_OFF, NPU2_SRAM, MPNPU_SRAM_X2I_MAILBOX_0),
7778
DEFINE_BAR_OFFSET(FW_ALIVE_OFF, NPU2_SRAM, MPNPU_SRAM_X2I_MAILBOX_15),

drivers/accel/amdxdna/npu4_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ static const struct amdxdna_dev_priv npu4_dev_priv = {
9999
.mbox_dev_addr = NPU4_MBOX_BAR_BASE,
100100
.mbox_size = 0, /* Use BAR size */
101101
.sram_dev_addr = NPU4_SRAM_BAR_BASE,
102+
.hwctx_limit = 16,
102103
.sram_offs = {
103104
DEFINE_BAR_OFFSET(MBOX_CHANN_OFF, NPU4_SRAM, MPNPU_SRAM_X2I_MAILBOX_0),
104105
DEFINE_BAR_OFFSET(FW_ALIVE_OFF, NPU4_SRAM, MPNPU_SRAM_X2I_MAILBOX_15),

drivers/accel/amdxdna/npu5_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ static const struct amdxdna_dev_priv npu5_dev_priv = {
7272
.mbox_dev_addr = NPU5_MBOX_BAR_BASE,
7373
.mbox_size = 0, /* Use BAR size */
7474
.sram_dev_addr = NPU5_SRAM_BAR_BASE,
75+
.hwctx_limit = 16,
7576
.sram_offs = {
7677
DEFINE_BAR_OFFSET(MBOX_CHANN_OFF, NPU5_SRAM, MPNPU_SRAM_X2I_MAILBOX_0),
7778
DEFINE_BAR_OFFSET(FW_ALIVE_OFF, NPU5_SRAM, MPNPU_SRAM_X2I_MAILBOX_15),

drivers/accel/amdxdna/npu6_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ static const struct amdxdna_dev_priv npu6_dev_priv = {
7272
.mbox_dev_addr = NPU6_MBOX_BAR_BASE,
7373
.mbox_size = 0, /* Use BAR size */
7474
.sram_dev_addr = NPU6_SRAM_BAR_BASE,
75+
.hwctx_limit = 16,
7576
.sram_offs = {
7677
DEFINE_BAR_OFFSET(MBOX_CHANN_OFF, NPU6_SRAM, MPNPU_SRAM_X2I_MAILBOX_0),
7778
DEFINE_BAR_OFFSET(FW_ALIVE_OFF, NPU6_SRAM, MPNPU_SRAM_X2I_MAILBOX_15),

0 commit comments

Comments
 (0)