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