|
23 | 23 | #define AIE2_SMU_SET_SOFT_DPMLEVEL 0x7 |
24 | 24 | #define AIE2_SMU_SET_HARD_DPMLEVEL 0x8 |
25 | 25 |
|
| 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 | + |
26 | 33 | static int aie2_smu_exec(struct amdxdna_dev_hdl *ndev, u32 reg_cmd, |
27 | 34 | u32 reg_arg, u32 *out) |
28 | 35 | { |
@@ -84,6 +91,8 @@ int npu1_set_dpm(struct amdxdna_dev_hdl *ndev, u32 dpm_level) |
84 | 91 | amdxdna_pm_suspend_put(ndev->xdna); |
85 | 92 | ndev->hclk_freq = freq; |
86 | 93 | ndev->dpm_level = dpm_level; |
| 94 | + ndev->max_tops = 2 * ndev->total_col; |
| 95 | + ndev->curr_tops = ndev->max_tops * freq / 1028; |
87 | 96 |
|
88 | 97 | XDNA_DBG(ndev->xdna, "MP-NPU clock %d, H clock %d\n", |
89 | 98 | ndev->npuclk_freq, ndev->hclk_freq); |
@@ -121,6 +130,8 @@ int npu4_set_dpm(struct amdxdna_dev_hdl *ndev, u32 dpm_level) |
121 | 130 | ndev->npuclk_freq = ndev->priv->dpm_clk_tbl[dpm_level].npuclk; |
122 | 131 | ndev->hclk_freq = ndev->priv->dpm_clk_tbl[dpm_level].hclk; |
123 | 132 | 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); |
124 | 135 |
|
125 | 136 | XDNA_DBG(ndev->xdna, "MP-NPU clock %d, H clock %d\n", |
126 | 137 | ndev->npuclk_freq, ndev->hclk_freq); |
|
0 commit comments