From 5e1d3e5869f4aa1eb078823604790f102af35ce4 Mon Sep 17 00:00:00 2001 From: Steve Cohen Date: Sat, 21 Mar 2020 01:28:32 -0400 Subject: [PATCH] disp: msm: fix buffer size calculation for VBIF debug bus Fix the buffer size calculations for dumping VBIF debug bus data. The previous code didn't take in to account that not all test point reads start from 0 resulting in a much larger than necessary buffer containing lots of useless zeroed data. Change-Id: I4379f9e6517d51e1eaebe1ded32a7fc1f87cb3d4 Signed-off-by: Steve Cohen --- msm/sde_dbg.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/msm/sde_dbg.c b/msm/sde_dbg.c index 4be6fa1533cc..d7eee67b1f1b 100644 --- a/msm/sde_dbg.c +++ b/msm/sde_dbg.c @@ -4654,15 +4654,15 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) bus->cmn.name); } -static void _sde_dbg_dump_vbif_debug_bus_entry( +static int _sde_dbg_dump_vbif_debug_bus_entry( struct vbif_debug_bus_entry *head, void __iomem *mem_base, u32 *dump_addr, bool in_log) { - int i, j; + int i, j, count = 0; u32 val; if (!dump_addr && !in_log) - return; + return 0; for (i = 0; i < head->block_cnt; i++) { writel_relaxed(1 << (i + head->bit_offset), @@ -4679,6 +4679,7 @@ static void _sde_dbg_dump_vbif_debug_bus_entry( *dump_addr++ = i; *dump_addr++ = j; *dump_addr++ = val; + count += DUMP_CLMN_COUNT; } if (in_log) dev_info(sde_dbg_base.dev, @@ -4686,6 +4687,8 @@ static void _sde_dbg_dump_vbif_debug_bus_entry( head->block_bus_addr, i, j, val); } } + + return count; } static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) @@ -4701,7 +4704,7 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) struct vbif_debug_bus_entry *dbg_bus; u32 bus_size; struct sde_dbg_reg_base *reg_base; - int rc; + int rc, count; if (!bus || !bus->cmn.entries_size) return; @@ -4719,23 +4722,23 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) dbg_bus = bus->entries; bus_size = bus->cmn.entries_size; - list_size = bus->cmn.entries_size; dump_mem = &bus->cmn.dumped_content; dev_info(sde_dbg_base.dev, "======== start %s dump =========\n", bus->cmn.name); - if (!dump_mem || !dbg_bus || !bus_size || !list_size) + if (!dump_mem || !dbg_bus || !bus_size) return; /* allocate memory for each test point */ for (i = 0; i < bus_size; i++) { head = dbg_bus + i; - list_size += (head->block_cnt * head->test_pnt_cnt); + list_size += (head->block_cnt * (head->test_pnt_cnt - + head->test_pnt_start)); } /* 4 bytes * 4 entries for each test point*/ - list_size *= 16; + list_size *= DUMP_CLMN_COUNT * sizeof(u32); in_log = (bus->cmn.enable_mask & SDE_DBG_DUMP_IN_LOG); in_mem = (bus->cmn.enable_mask & SDE_DBG_DUMP_IN_MEM); @@ -4810,10 +4813,10 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) /* make sure that other bus is off */ wmb(); - _sde_dbg_dump_vbif_debug_bus_entry(head, mem_base, dump_addr, - in_log); - if (dump_addr) - dump_addr += (head->block_cnt * head->test_pnt_cnt * 4); + count = _sde_dbg_dump_vbif_debug_bus_entry(head, mem_base, + dump_addr, in_log); + if (dump_addr && (count > 0)) + dump_addr += count; } pm_runtime_put_sync(sde_dbg_base.dev);