forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
scripts/gdb: add lx-genpd-summary command
This is like /sys/kernel/debug/pm/pm_genpd_summary except it's accessible through a debugger. This can be useful if the target crashes or hangs because power domains were not properly enabled. Link: http://lkml.kernel.org/r/f9ee627a0d4f94b894aa202fee8a98444049bed8.1561492937.git.leonard.crestez@nxp.com Signed-off-by: Leonard Crestez <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Cc: Kieran Bingham <[email protected]> Cc: Jan Kiszka <[email protected]> Cc: "Rafael J. Wysocki" <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Showing
2 changed files
with
84 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# | ||
# Copyright (c) NXP 2019 | ||
|
||
import gdb | ||
import sys | ||
|
||
from linux.utils import CachedType | ||
from linux.lists import list_for_each_entry | ||
|
||
generic_pm_domain_type = CachedType('struct generic_pm_domain') | ||
pm_domain_data_type = CachedType('struct pm_domain_data') | ||
device_link_type = CachedType('struct device_link') | ||
|
||
|
||
def kobject_get_path(kobj): | ||
path = kobj['name'].string() | ||
parent = kobj['parent'] | ||
if parent: | ||
path = kobject_get_path(parent) + '/' + path | ||
return path | ||
|
||
|
||
def rtpm_status_str(dev): | ||
if dev['power']['runtime_error']: | ||
return 'error' | ||
if dev['power']['disable_depth']: | ||
return 'unsupported' | ||
_RPM_STATUS_LOOKUP = [ | ||
"active", | ||
"resuming", | ||
"suspended", | ||
"suspending" | ||
] | ||
return _RPM_STATUS_LOOKUP[dev['power']['runtime_status']] | ||
|
||
|
||
class LxGenPDSummary(gdb.Command): | ||
'''Print genpd summary | ||
Output is similar to /sys/kernel/debug/pm_genpd/pm_genpd_summary''' | ||
|
||
def __init__(self): | ||
super(LxGenPDSummary, self).__init__('lx-genpd-summary', gdb.COMMAND_DATA) | ||
|
||
def summary_one(self, genpd): | ||
if genpd['status'] == 0: | ||
status_string = 'on' | ||
else: | ||
status_string = 'off-{}'.format(genpd['state_idx']) | ||
|
||
slave_names = [] | ||
for link in list_for_each_entry( | ||
genpd['master_links'], | ||
device_link_type.get_type().pointer(), | ||
'master_node'): | ||
slave_names.apend(link['slave']['name']) | ||
|
||
gdb.write('%-30s %-15s %s\n' % ( | ||
genpd['name'].string(), | ||
status_string, | ||
', '.join(slave_names))) | ||
|
||
# Print devices in domain | ||
for pm_data in list_for_each_entry(genpd['dev_list'], | ||
pm_domain_data_type.get_type().pointer(), | ||
'list_node'): | ||
dev = pm_data['dev'] | ||
kobj_path = kobject_get_path(dev['kobj']) | ||
gdb.write(' %-50s %s\n' % (kobj_path, rtpm_status_str(dev))) | ||
|
||
def invoke(self, arg, from_tty): | ||
gdb.write('domain status slaves\n'); | ||
gdb.write(' /device runtime status\n'); | ||
gdb.write('----------------------------------------------------------------------\n'); | ||
for genpd in list_for_each_entry( | ||
gdb.parse_and_eval('&gpd_list'), | ||
generic_pm_domain_type.get_type().pointer(), | ||
'gpd_list_node'): | ||
self.summary_one(genpd) | ||
|
||
|
||
LxGenPDSummary() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,3 +35,4 @@ | |
import linux.constants | ||
import linux.timerlist | ||
import linux.clk | ||
import linux.genpd |