Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2590730

Browse files
Asad Kamalalexdeucher
authored andcommitted
drm/amd/pm: Fetch fru product info for smu_v13_0_12
Fetch fru product info for smu_v13_0_12 from static metrics table v2: Field by field copy for fru info(Lijo) Signed-off-by: Asad Kamal <[email protected]> Reviewed-by: Lijo Lazar <[email protected]> Reviewed-by: Hawking Zhang <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 95eebc0 commit 2590730

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
#define FRU_EEPROM_MADDR_6 0x60000
3333
#define FRU_EEPROM_MADDR_8 0x80000
34+
#define FRU_EEPROM_MADDR_INV 0xFFFFF
3435

3536
static bool is_fru_eeprom_supported(struct amdgpu_device *adev, u32 *fru_addr)
3637
{
@@ -104,6 +105,10 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev, u32 *fru_addr)
104105
if (fru_addr)
105106
*fru_addr = FRU_EEPROM_MADDR_8;
106107
return true;
108+
case IP_VERSION(13, 0, 12):
109+
if (fru_addr)
110+
*fru_addr = FRU_EEPROM_MADDR_INV;
111+
return true;
107112
default:
108113
return false;
109114
}
@@ -120,6 +125,10 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
120125
if (!is_fru_eeprom_supported(adev, &fru_addr))
121126
return 0;
122127

128+
/* FRU data avaialble, but no direct EEPROM access */
129+
if (fru_addr == FRU_EEPROM_MADDR_INV)
130+
return 0;
131+
123132
if (!adev->fru_info) {
124133
adev->fru_info = kzalloc(sizeof(*adev->fru_info), GFP_KERNEL);
125134
if (!adev->fru_info)

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "smu_v13_0_12_ppsmc.h"
3232
#include "smu_v13_0.h"
3333
#include "amdgpu_xgmi.h"
34+
#include "amdgpu_fru_eeprom.h"
3435
#include <linux/pci.h>
3536
#include "smu_cmn.h"
3637

@@ -145,6 +146,33 @@ static int smu_v13_0_12_get_enabled_mask(struct smu_context *smu,
145146
return ret;
146147
}
147148

149+
static int smu_v13_0_12_fru_get_product_info(struct smu_context *smu,
150+
StaticMetricsTable_t *static_metrics)
151+
{
152+
struct amdgpu_fru_info *fru_info;
153+
struct amdgpu_device *adev = smu->adev;
154+
155+
if (!adev->fru_info) {
156+
adev->fru_info = kzalloc(sizeof(*adev->fru_info), GFP_KERNEL);
157+
if (!adev->fru_info)
158+
return -ENOMEM;
159+
}
160+
161+
fru_info = adev->fru_info;
162+
strscpy(fru_info->product_number, static_metrics->ProductInfo.ModelNumber,
163+
sizeof(fru_info->product_number));
164+
strscpy(fru_info->product_name, static_metrics->ProductInfo.Name,
165+
sizeof(fru_info->product_name));
166+
strscpy(fru_info->serial, static_metrics->ProductInfo.Serial,
167+
sizeof(fru_info->serial));
168+
strscpy(fru_info->manufacturer_name, static_metrics->ProductInfo.ManufacturerName,
169+
sizeof(fru_info->manufacturer_name));
170+
strscpy(fru_info->fru_id, static_metrics->ProductInfo.FruId,
171+
sizeof(fru_info->fru_id));
172+
173+
return 0;
174+
}
175+
148176
int smu_v13_0_12_get_max_metrics_size(void)
149177
{
150178
return sizeof(StaticMetricsTable_t);
@@ -208,6 +236,9 @@ int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu)
208236
/* use AID0 serial number by default */
209237
pptable->PublicSerialNumber_AID =
210238
static_metrics->PublicSerialNumber_AID[0];
239+
ret = smu_v13_0_12_fru_get_product_info(smu, static_metrics);
240+
if (ret)
241+
return ret;
211242

212243
pptable->Init = true;
213244
}

0 commit comments

Comments
 (0)