Currently, gpu_metrics is exported a binary blob with the defintion provided by 
means of a structure
and version. Though providing the version works well for backward compatiblity, 
it doesn't work the
other way for tools like amd-smi. Installing a driver with a newer definition 
of gpu_metrics
sometimes could break compatibility with the older version of amd-smi. Even if 
newer fields are
added towards the end, a change in datatype of existing field or an increase of 
size in an array
element will break the compatiblity.

To address this, add field encoding before each metrics field. Each field is 
designated an attribute
id, and along with that the type (only integral ones are used currently) and 
number of instances are
encoded. Thus an older amd-smi tool may skip any unknown attribute field, and 
move to the next
attribute. This encoding scheme doesn't take care of elements that are not 
valid always -  say
member_field[3] is not valid under certain conditions in an array member 
member_field[10]. Hence this
still keeps the design of having all invalid elements initialized to 0xFFs.

Lijo Lazar (7):
  drm/amdgpu/pm: Add definition for gpu_metrics v1.9
  drm/amd/pm: Add helper functions for gpu metrics
  drm/amd/pm: Use gpu metrics 1.9 for SMUv13.0.6
  drm/amd/pm: Use gpu metrics 1.9 for SMUv13.0.12
  drm/amd/pm: Add schema v1.1 for parition metrics
  drm/amd/pm: Update SMUv13.0.6 partition metrics
  drm/amd/pm: Update SMUv13.0.12 partition metrics

 .../gpu/drm/amd/include/kgd_pp_interface.h    | 123 ++++++++++++++
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c |  94 +++++------
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c  | 140 ++++++++--------
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.h  | 156 +++++++++++++++++-
 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h        |  62 +++++++
 5 files changed, 450 insertions(+), 125 deletions(-)

-- 
2.49.0

Reply via email to