Skip to content
Snippets Groups Projects
Commit a8774d52 authored by Vignesh Radhakrishnan's avatar Vignesh Radhakrishnan
Browse files

linux-ramdump-parser-v2: Add support fort RTB timestamps

Currrently RTB logging does not have timestamps getting
printed in the logs.
Add support for the same in the parser.

Change-Id: Ibe957c7217e51cf2e336643b82800a93ee20bcce
parent 8a36966c
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ from parser_util import register_parser, RamParser ...@@ -20,6 +20,7 @@ from parser_util import register_parser, RamParser
# void *caller; # void *caller;
# unsigned long idx; # unsigned long idx;
# void *data; # void *data;
# void *time
#} __attribute__ ((__packed__)); #} __attribute__ ((__packed__));
print_table = { print_table = {
...@@ -54,6 +55,14 @@ class RTB(RamParser): ...@@ -54,6 +55,14 @@ class RTB(RamParser):
symname = 'Unknown function' symname = 'Unknown function'
return symname return symname
def get_timestamp(self, rtb_ptr):
timestamp = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'timestamp')
if timestamp == None:
return 0
timestamp = round(float(timestamp)/10**9,6)
timestamp = format(timestamp,'.6f')
return timestamp
def print_none(self, rtbout, rtb_ptr, logtype): def print_none(self, rtbout, rtb_ptr, logtype):
rtbout.write('{0} No data\n'.format(logtype).encode('ascii', 'ignore')) rtbout.write('{0} No data\n'.format(logtype).encode('ascii', 'ignore'))
...@@ -62,37 +71,41 @@ class RTB(RamParser): ...@@ -62,37 +71,41 @@ class RTB(RamParser):
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} from address {1:x} called from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} from address {2:x} called from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_logbuf(self, rtbout, rtb_ptr, logtype): def print_logbuf(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data') data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} log end {1:x} called from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} log end {2:x} called from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_hotplug(self, rtbout, rtb_ptr, logtype): def print_hotplug(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data') data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} cpu data {1:x} called from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} cpu data {2:x} called from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_ctxid(self, rtbout, rtb_ptr, logtype): def print_ctxid(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data') data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} context id {1:x} called from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} context id {2:x} called from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_timestamp(self, rtbout, rtb_ptr, logtype): def print_timestamp(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data') data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
rtbout.write('{0} Timestamp: {1:x}{2:x}\n'.format( rtbout.write('[{0}] Timestamp: {1:x}{2:x}\n'.format(
logtype, data, caller).encode('ascii', 'ignore')) logtype, data, caller).encode('ascii', 'ignore'))
def print_cp_rw(self, rtbout, rtb_ptr, logtype): def print_cp_rw(self, rtbout, rtb_ptr, logtype):
...@@ -100,16 +113,18 @@ class RTB(RamParser): ...@@ -100,16 +113,18 @@ class RTB(RamParser):
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} from offset {1:x} called from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} from offset {2:x} called from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_irq(self, rtbout, rtb_ptr, logtype): def print_irq(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data') data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller') caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller) func = self.get_fun_name(caller)
line = self.get_caller(caller) line = self.get_caller(caller)
rtbout.write('{0} interrupt {1:x} handled from addr {2:x} {3} {4}\n'.format( timestamp = self.get_timestamp(rtb_ptr)
logtype, data, caller, func, line).encode('ascii', 'ignore')) rtbout.write('[{0}] : {1} interrupt {2:x} handled from addr {3:x} {4} {5}\n'.format(
timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
def parse(self): def parse(self):
rtb = self.ramdump.addr_lookup('msm_rtb') rtb = self.ramdump.addr_lookup('msm_rtb')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment