diff options
| author | Burt P <pburt0@gmail.com> | 2018-09-28 20:43:41 -0500 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2018-10-22 19:45:03 -0700 | 
| commit | 61ffa17d01ef8668def03e15c33d1bd0dc9be93e (patch) | |
| tree | e0f92bde2f13d5ae246f41d54678ed13ac1198cd /modules/devices | |
| parent | 7c3ba61e9e433bbad816833320c39cf5bb8afcd8 (diff) | |
devicetree: get opp-v2 freq range for gpu, if available
* opp-v2 = operating-points-v2, frequency scaling information
  from device tree that can be used for cpu, gpu, etc.
* adds helper function to get the opp-v2 range of frequencies
  for a node, dtr_get_opp_range() in dt_util.c
* adds a freq range in opp-v2 property for a node in dt
* reports a gpu's max clock frequency if avaiable via opp-v2
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices')
| -rw-r--r-- | modules/devices/gpu.c | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/modules/devices/gpu.c b/modules/devices/gpu.c index 429b0b0f..75776d7e 100644 --- a/modules/devices/gpu.c +++ b/modules/devices/gpu.c @@ -127,12 +127,19 @@ static void _gpu_pci_dev(gpud* gpu) {      } else          nv_str = strdup(""); +    gchar *freq = g_strdup(_("(Unknown)")); +    if (gpu->khz_max > 0) { +        freq = g_strdup_printf("%0.2f %s", (double) gpu->khz_max / 1000, _("MHz")); +    } +      str = g_strdup_printf("[%s]\n"               /* Location */  "%s=%s\n"               /* DRM Dev */   "%s=%s\n"               /* Class */     "%s=[%04x] %s\n"                               "%s"               /* Revision */  "%s=%02x\n" +                             "[%s]\n" +             /* Frequency */ "%s=%s\n"               /* NV */        "%s"               /* PCIe */      "%s"                               "[%s]\n" @@ -144,6 +151,8 @@ static void _gpu_pci_dev(gpud* gpu) {                  _("Class"), p->class, p->class_str,                  vendor_device_str,                  _("Revision"), p->revision, +                _("Clocks"), +                _("Core"), freq,                  nv_str,                  pcie_str,                  _("Driver"), @@ -169,10 +178,28 @@ int _dt_soc_gpu(gpud *gpu) {      gchar *device = gpu->device_str;      if (vendor == NULL) vendor = UNKSOC;      if (device == NULL) device = UNKSOC; +    gchar *freq = g_strdup(_("(Unknown)")); +    if (gpu->khz_max > 0) { +        freq = g_strdup_printf("%0.2f %s", (double) gpu->khz_max / 1000, _("MHz")); +    }      gchar *key = g_strdup(gpu->id);      gchar *name = (vendor == UNKSOC && device == UNKSOC)              ? g_strdup(_("Unknown integrated GPU"))              : g_strdup_printf("%s %s", vendor, device); + +    gchar *opp_str; +    if (gpu->dt_opp) { +        opp_str = g_strdup_printf("[%s]\n" +                     /* MinFreq */  "%s=%d %s\n" +                     /* MaxFreq */  "%s=%d %s\n" +                     /* Latency */  "%s=%d %s\n", +                    _("Frequency Scaling"), +                    _("Minimum"), gpu->dt_opp->khz_min, _("kHz"), +                    _("Maximum"), gpu->dt_opp->khz_max, _("kHz"), +                    _("Transition Latency"), gpu->dt_opp->clock_latency_ns, _("ns") ); +    } else +        opp_str = strdup(""); +      gpu_summary_add((gpu->nice_name) ? gpu->nice_name : name);      gpu_list = h_strdup_cprintf("$%s$%s=%s\n", gpu_list, key, key, name);      gchar *str = g_strdup_printf("[%s]\n" @@ -180,6 +207,9 @@ int _dt_soc_gpu(gpud *gpu) {               /* Vendor */  "%s=%s\n"               /* Device */  "%s=%s\n"                             "[%s]\n" +             /* Freq */    "%s=%s\n" +             /* opp-v2 */  "%s" +                           "[%s]\n"               /* Path */    "%s=%s\n"               /* Compat */  "%s=%s\n"               /* Status */  "%s=%s\n" @@ -188,6 +218,9 @@ int _dt_soc_gpu(gpud *gpu) {                  _("Location"), gpu->location,                  _("Vendor"), vendor,                  _("Device"), device, +                _("Clocks"), +                _("Core"), freq, +                opp_str,                  _("Device Tree Node"),                  _("Path"), gpu->dt_path,                  _("Compatible"), gpu->dt_compat, @@ -195,6 +228,8 @@ int _dt_soc_gpu(gpud *gpu) {                  _("Name"), gpu->dt_name                  );      moreinfo_add_with_prefix("DEV", key, str); /* str now owned by morinfo */ +    g_free(freq); +    g_free(opp_str);      return 1;  } | 
