Use smu_pcie_table for SMUv13 SOCs.
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
uint32_t soc_clock;
};
-struct smu_13_0_pcie_table {
- uint8_t pcie_gen[MAX_PCIE_CONF];
- uint8_t pcie_lane[MAX_PCIE_CONF];
- uint16_t clk_freq[MAX_PCIE_CONF];
- uint32_t num_of_link_levels;
-};
-
struct smu_13_0_dpm_tables {
struct smu_dpm_table soc_table;
struct smu_dpm_table gfx_table;
struct smu_dpm_table display_table;
struct smu_dpm_table phy_table;
struct smu_dpm_table fclk_table;
- struct smu_13_0_pcie_table pcie_table;
+ struct smu_pcie_table pcie_table;
};
struct smu_13_0_dpm_context {
uint8_t pcie_width_cap)
{
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
- struct smu_13_0_pcie_table *pcie_table =
- &dpm_context->dpm_tables.pcie_table;
- int num_of_levels = pcie_table->num_of_link_levels;
+ struct smu_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table;
+ int num_of_levels = pcie_table->lclk_levels;
uint32_t smu_pcie_arg;
int ret = 0;
int i;
(OverDriveTableExternal_t *)smu->smu_table.overdrive_table;
int i, curr_freq, size = *offset, start_offset = *offset;
struct smu_dpm_table *single_dpm_table;
- struct smu_13_0_pcie_table *pcie_table;
+ struct smu_pcie_table *pcie_table;
+ uint32_t pcie_speed, pcie_width;
uint32_t gen_speed, lane_width;
int32_t min_value, max_value;
int ret = 0;
return ret;
pcie_table = &(dpm_context->dpm_tables.pcie_table);
- for (i = 0; i < pcie_table->num_of_link_levels; i++)
- size += sysfs_emit_at(buf, size, "%d: %s %s %dMhz %s\n", i,
- (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
- (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
- (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
- (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," : "",
- (pcie_table->pcie_lane[i] == 1) ? "x1" :
- (pcie_table->pcie_lane[i] == 2) ? "x2" :
- (pcie_table->pcie_lane[i] == 3) ? "x4" :
- (pcie_table->pcie_lane[i] == 4) ? "x8" :
- (pcie_table->pcie_lane[i] == 5) ? "x12" :
- (pcie_table->pcie_lane[i] == 6) ? "x16" : "",
- pcie_table->clk_freq[i],
- (gen_speed == DECODE_GEN_SPEED(pcie_table->pcie_gen[i])) &&
- (lane_width == DECODE_LANE_WIDTH(pcie_table->pcie_lane[i])) ?
- "*" : "");
+ for (i = 0; i < pcie_table->lclk_levels; i++) {
+ pcie_speed = DECODE_GEN_SPEED(pcie_table->pcie_gen[i]);
+ pcie_width =
+ DECODE_LANE_WIDTH(pcie_table->pcie_lane[i]);
+ size += sysfs_emit_at(
+ buf, size, "%d: %s %s %dMhz %s\n", i,
+ (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
+ (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
+ (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
+ (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," :
+ "",
+ (pcie_table->pcie_lane[i] == 1) ? "x1" :
+ (pcie_table->pcie_lane[i] == 2) ? "x2" :
+ (pcie_table->pcie_lane[i] == 3) ? "x4" :
+ (pcie_table->pcie_lane[i] == 4) ? "x8" :
+ (pcie_table->pcie_lane[i] == 5) ? "x12" :
+ (pcie_table->pcie_lane[i] == 6) ? "x16" :
+ "",
+ pcie_table->lclk_freq[i],
+ (gen_speed == pcie_speed &&
+ lane_width == pcie_width) ?
+ "*" :
+ "");
+ }
break;
case SMU_OD_SCLK:
uint8_t pcie_width_cap)
{
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
- struct smu_13_0_pcie_table *pcie_table =
- &dpm_context->dpm_tables.pcie_table;
+ struct smu_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table;
int num_of_levels;
uint32_t smu_pcie_arg;
uint32_t link_level;
int ret = 0;
int i;
- pcie_table->num_of_link_levels = 0;
+ pcie_table->lclk_levels = 0;
for (link_level = 0; link_level < NUM_LINK_LEVELS; link_level++) {
if (!skutable->PcieGenSpeed[link_level] &&
!skutable->LclkFreq[link_level])
continue;
- pcie_table->pcie_gen[pcie_table->num_of_link_levels] =
- skutable->PcieGenSpeed[link_level];
- pcie_table->pcie_lane[pcie_table->num_of_link_levels] =
- skutable->PcieLaneCount[link_level];
- pcie_table->clk_freq[pcie_table->num_of_link_levels] =
- skutable->LclkFreq[link_level];
- pcie_table->num_of_link_levels++;
+ pcie_table->pcie_gen[pcie_table->lclk_levels] =
+ skutable->PcieGenSpeed[link_level];
+ pcie_table->pcie_lane[pcie_table->lclk_levels] =
+ skutable->PcieLaneCount[link_level];
+ pcie_table->lclk_freq[pcie_table->lclk_levels] =
+ skutable->LclkFreq[link_level];
+ pcie_table->lclk_levels++;
}
- num_of_levels = pcie_table->num_of_link_levels;
+ num_of_levels = pcie_table->lclk_levels;
if (!num_of_levels)
return 0;
(OverDriveTableExternal_t *)smu->smu_table.overdrive_table;
int i, curr_freq, size = *offset, start_offset = *offset;
struct smu_dpm_table *single_dpm_table;
- struct smu_13_0_pcie_table *pcie_table;
+ struct smu_pcie_table *pcie_table;
+ uint32_t pcie_speed, pcie_width;
uint32_t gen_speed, lane_width;
int32_t min_value, max_value;
int ret = 0;
return ret;
pcie_table = &(dpm_context->dpm_tables.pcie_table);
- for (i = 0; i < pcie_table->num_of_link_levels; i++)
- size += sysfs_emit_at(buf, size, "%d: %s %s %dMhz %s\n", i,
- (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
- (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
- (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
- (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," : "",
- (pcie_table->pcie_lane[i] == 1) ? "x1" :
- (pcie_table->pcie_lane[i] == 2) ? "x2" :
- (pcie_table->pcie_lane[i] == 3) ? "x4" :
- (pcie_table->pcie_lane[i] == 4) ? "x8" :
- (pcie_table->pcie_lane[i] == 5) ? "x12" :
- (pcie_table->pcie_lane[i] == 6) ? "x16" : "",
- pcie_table->clk_freq[i],
- (gen_speed == DECODE_GEN_SPEED(pcie_table->pcie_gen[i])) &&
- (lane_width == DECODE_LANE_WIDTH(pcie_table->pcie_lane[i])) ?
- "*" : "");
+ for (i = 0; i < pcie_table->lclk_levels; i++) {
+ pcie_speed = DECODE_GEN_SPEED(pcie_table->pcie_gen[i]);
+ pcie_width =
+ DECODE_LANE_WIDTH(pcie_table->pcie_lane[i]);
+ size += sysfs_emit_at(
+ buf, size, "%d: %s %s %dMhz %s\n", i,
+ (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
+ (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
+ (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
+ (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," :
+ "",
+ (pcie_table->pcie_lane[i] == 1) ? "x1" :
+ (pcie_table->pcie_lane[i] == 2) ? "x2" :
+ (pcie_table->pcie_lane[i] == 3) ? "x4" :
+ (pcie_table->pcie_lane[i] == 4) ? "x8" :
+ (pcie_table->pcie_lane[i] == 5) ? "x12" :
+ (pcie_table->pcie_lane[i] == 6) ? "x16" :
+ "",
+ pcie_table->lclk_freq[i],
+ (gen_speed == pcie_speed &&
+ lane_width == pcie_width) ?
+ "*" :
+ "");
+ }
break;
case SMU_OD_SCLK:
uint8_t pcie_width_cap)
{
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
- struct smu_13_0_pcie_table *pcie_table =
- &dpm_context->dpm_tables.pcie_table;
+ struct smu_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table;
int num_of_levels;
int link_level;
uint32_t smu_pcie_arg;
int ret = 0;
int i;
- pcie_table->num_of_link_levels = 0;
+ pcie_table->lclk_levels = 0;
for (link_level = 0; link_level < NUM_LINK_LEVELS; link_level++) {
if (!skutable->PcieGenSpeed[link_level] &&
!skutable->PcieLaneCount[link_level] &&
!skutable->LclkFreq[link_level])
continue;
- pcie_table->pcie_gen[pcie_table->num_of_link_levels] =
- skutable->PcieGenSpeed[link_level];
- pcie_table->pcie_lane[pcie_table->num_of_link_levels] =
- skutable->PcieLaneCount[link_level];
- pcie_table->clk_freq[pcie_table->num_of_link_levels] =
- skutable->LclkFreq[link_level];
- pcie_table->num_of_link_levels++;
+ pcie_table->pcie_gen[pcie_table->lclk_levels] =
+ skutable->PcieGenSpeed[link_level];
+ pcie_table->pcie_lane[pcie_table->lclk_levels] =
+ skutable->PcieLaneCount[link_level];
+ pcie_table->lclk_freq[pcie_table->lclk_levels] =
+ skutable->LclkFreq[link_level];
+ pcie_table->lclk_levels++;
}
- num_of_levels = pcie_table->num_of_link_levels;
+ num_of_levels = pcie_table->lclk_levels;
if (!num_of_levels)
return 0;