
On Fri, Oct 01, 2021 at 12:01:07PM +0300, Cosmin-Florin Aluchenesei wrote:
+static void mc_dump_log(void) +{
- struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR;
- u64 high = in_le64(&mc_ccsr_regs->reg_mcfbahr) & MC_FW_ADDR_MASK_HIGH;
- u64 low = in_le64(&mc_ccsr_regs->reg_mcfbalr) & MC_FW_ADDR_MASK_LOW;
- u64 mc_addr = (high << 32) | low | MC_STRUCT_BUFFER_OFFSET;
- u32 buf_len, wrapped, last_byte, magic, buf_start;
- struct log_header *header;
- ssize_t size, bytes_end;
- const void *end_of_data;
- const void *map_addr;
- const void *end_addr;
- const void *cur_ptr;
- const void *buf;
- map_addr = map_sysmem(mc_addr + MC_STRUCT_BUFFER_OFFSET,
MC_BUFFER_SIZE);
This does not work as it is.
You are adding the MC_STRUCT_BUFFER_OFFSET twice to the base address of the MC - mc_addr. This means that the magic check below will fail always.
A diff like the following fixes the issue.
--- a/drivers/net/fsl-mc/mc.c +++ b/drivers/net/fsl-mc/mc.c @@ -1799,7 +1799,7 @@ static void mc_dump_log(void) struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR; u64 high = in_le64(&mc_ccsr_regs->reg_mcfbahr) & MC_FW_ADDR_MASK_HIGH; u64 low = in_le64(&mc_ccsr_regs->reg_mcfbalr) & MC_FW_ADDR_MASK_LOW; - u64 mc_addr = (high << 32) | low | MC_STRUCT_BUFFER_OFFSET; + u64 mc_addr = (high << 32) | low; u32 buf_len, wrapped, last_byte, magic, buf_start; struct log_header *header; ssize_t size, bytes_end;
Please fix this and send a v2.
Ioana