diff --git a/linux-ramdump-parser-v2/parsers/mmcdoctor.py b/linux-ramdump-parser-v2/parsers/mmcdoctor.py
index 6ff28cad6c064e947ddac8195f7b63f936dfb6d8..0e4005186385b6dd83877f9a256de071c216d893 100644
--- a/linux-ramdump-parser-v2/parsers/mmcdoctor.py
+++ b/linux-ramdump-parser-v2/parsers/mmcdoctor.py
@@ -30,6 +30,10 @@ PATTERN_END = "sdhci: ===================="
 MMC_DATA_HEAD = "#################### MMC(mmc%d) INFO START #######################\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 = {
     0x2: "SANDISK",
     0x11: "TOSHIBA",
@@ -264,6 +268,43 @@ class MmcDataStructure():
         self.parse = ParseMmcLog(self.ramdump)
         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):
         fd = self.ramdump.open_file(F_MMCDEBUG, mode)
         fd.write(MMC_DATA_HEAD % self.index)
@@ -286,6 +327,7 @@ class MmcDataStructure():
         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_drv_type = %d\n" %self.hostinfo.ios_drv_type)
+        self.dump_trace_buf(fd)
         fd.write(MMC_DATA_FOOT % self.index)
         fd.close()
         return