Skip to content
Snippets Groups Projects
Commit 4226f099 authored by Ritesh Harjani's avatar Ritesh Harjani
Browse files

lrdp-v2: mmcdoctor: Add support to extract mmc ring buffer.

Starting from sdm660(kernel version 4.4) mmc driver keeps last 64
mmc trace events in ring buffer.
This patch adds the support to extract it to mmcreport.txt
for both mmc0/mmc1.

Change-Id: I4b1d95106cbdd7262afe604a289ce2ebc59ccc52
parent 3f41fbab
No related branches found
No related tags found
No related merge requests found
...@@ -30,6 +30,10 @@ PATTERN_END = "sdhci: ====================" ...@@ -30,6 +30,10 @@ PATTERN_END = "sdhci: ===================="
MMC_DATA_HEAD = "#################### MMC(mmc%d) INFO START #######################\n" MMC_DATA_HEAD = "#################### MMC(mmc%d) INFO START #######################\n"
MMC_DATA_FOOT = "#################### MMC(mmc%d) INFO END #########################\n\n" MMC_DATA_FOOT = "#################### MMC(mmc%d) INFO END #########################\n\n"
MMC_TRACE_HEADER = "\n################ MMC(mmc%d) RING BUFFER ################\n"
MMC_TRACE_BUF_EVENTS = 64
MMC_TRACE_EVENT_SIZE = 256
card_data = { card_data = {
0x2: "SANDISK", 0x2: "SANDISK",
0x11: "TOSHIBA", 0x11: "TOSHIBA",
...@@ -264,6 +268,43 @@ class MmcDataStructure(): ...@@ -264,6 +268,43 @@ class MmcDataStructure():
self.parse = ParseMmcLog(self.ramdump) self.parse = ParseMmcLog(self.ramdump)
return return
def dump_trace_buf(self, fd):
if (not self.mmc_host or (fd <= 0) or (self.ramdump.kernel_version < (4, 4))):
return
mmc_host = self.mmc_host
ramdump = self.ramdump
fd.write(MMC_TRACE_HEADER % self.index)
buf_offset = ramdump.field_offset('struct mmc_host', 'trace_buf')
if (not buf_offset):
return 0
data_offset = ramdump.field_offset('struct mmc_trace_buffer', 'data')
if (not data_offset):
return 0
trace_buf = mmc_host + buf_offset
wr_idx = ramdump.read_int(trace_buf)
if (wr_idx >= 0xFFFFFFFF):
fd.write("mmc%d trace buffer empty\n" %(self.index))
return 0
dataptr = ramdump.read_word(trace_buf + data_offset)
if (not dataptr):
return
datastr = []
for i in xrange(MMC_TRACE_BUF_EVENTS):
trace_str = ramdump.read_cstring(dataptr, MMC_TRACE_EVENT_SIZE)
dataptr += MMC_TRACE_EVENT_SIZE
datastr.append(trace_str)
num = MMC_TRACE_BUF_EVENTS - 1
idx = wr_idx & num
cur_idx = (idx + 1) & num
for i in xrange(MMC_TRACE_BUF_EVENTS):
fd.write("event[%d] = %s" %(cur_idx, datastr[cur_idx]))
cur_idx = (cur_idx + 1 ) & num
def dump_data(self, mode): def dump_data(self, mode):
fd = self.ramdump.open_file(F_MMCDEBUG, mode) fd = self.ramdump.open_file(F_MMCDEBUG, mode)
fd.write(MMC_DATA_HEAD % self.index) fd.write(MMC_DATA_HEAD % self.index)
...@@ -286,6 +327,7 @@ class MmcDataStructure(): ...@@ -286,6 +327,7 @@ class MmcDataStructure():
fd.write("Host ios_timing = %d\n" %self.hostinfo.ios_timing) fd.write("Host ios_timing = %d\n" %self.hostinfo.ios_timing)
fd.write("Host ios_signal_voltage = %d\n" %self.hostinfo.ios_signal_voltage) fd.write("Host ios_signal_voltage = %d\n" %self.hostinfo.ios_signal_voltage)
fd.write("Host ios_drv_type = %d\n" %self.hostinfo.ios_drv_type) fd.write("Host ios_drv_type = %d\n" %self.hostinfo.ios_drv_type)
self.dump_trace_buf(fd)
fd.write(MMC_DATA_FOOT % self.index) fd.write(MMC_DATA_FOOT % self.index)
fd.close() fd.close()
return return
......
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