-
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 <leonard.crestez@nxp.com> Reviewed-by: Stephen Boyd <sboyd@kernel.org> Cc: Kieran Bingham <kbingham@kernel.org> Cc: Jan Kiszka <jan.kiszka@siemens.com> Cc: "Rafael J. Wysocki" <rafael@kernel.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
- Loading branch information
Leonard Crestez
authored and
Linus Torvalds
committed
Jul 17, 2019
1 parent
5515e9a
commit 8207d4a
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 |