On Thu 16 Jul 15:20 PDT 2020, Rishabh Bhatnagar wrote: > Change the segment dump API signature to include size and offset > arguments. Refactor the qcom_q6v5_mss driver to use these > arguments while copying the segment. Doing this lays the ground > work for "inline" coredump functionality being added in the next > patch. > Reviewed-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > Signed-off-by: Rishabh Bhatnagar <rishabhb@xxxxxxxxxxxxxx> > --- > drivers/remoteproc/qcom_q6v5_mss.c | 10 +++++----- > drivers/remoteproc/remoteproc_coredump.c | 5 +++-- > include/linux/remoteproc.h | 5 +++-- > 3 files changed, 11 insertions(+), 9 deletions(-) > > diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c > index 037cd45..6baa3ae 100644 > --- a/drivers/remoteproc/qcom_q6v5_mss.c > +++ b/drivers/remoteproc/qcom_q6v5_mss.c > @@ -1199,7 +1199,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc) > > static void qcom_q6v5_dump_segment(struct rproc *rproc, > struct rproc_dump_segment *segment, > - void *dest) > + void *dest, size_t cp_offset, size_t size) > { > int ret = 0; > struct q6v5 *qproc = rproc->priv; > @@ -1219,16 +1219,16 @@ static void qcom_q6v5_dump_segment(struct rproc *rproc, > } > > if (!ret) > - ptr = ioremap_wc(qproc->mpss_phys + offset, segment->size); > + ptr = ioremap_wc(qproc->mpss_phys + offset + cp_offset, size); > > if (ptr) { > - memcpy(dest, ptr, segment->size); > + memcpy(dest, ptr, size); > iounmap(ptr); > } else { > - memset(dest, 0xff, segment->size); > + memset(dest, 0xff, size); > } > > - qproc->current_dump_size += segment->size; > + qproc->current_dump_size += size; > > /* Reclaim mba after copying segments */ > if (qproc->current_dump_size == qproc->total_dump_size) { > diff --git a/drivers/remoteproc/remoteproc_coredump.c b/drivers/remoteproc/remoteproc_coredump.c > index ded0244..390f563 100644 > --- a/drivers/remoteproc/remoteproc_coredump.c > +++ b/drivers/remoteproc/remoteproc_coredump.c > @@ -72,7 +72,8 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc, > dma_addr_t da, size_t size, > void (*dumpfn)(struct rproc *rproc, > struct rproc_dump_segment *segment, > - void *dest), > + void *dest, size_t offset, > + size_t size), > void *priv) > { > struct rproc_dump_segment *segment; > @@ -183,7 +184,7 @@ void rproc_coredump(struct rproc *rproc) > elf_phdr_set_p_align(class, phdr, 0); > > if (segment->dump) { > - segment->dump(rproc, segment, data + offset); > + segment->dump(rproc, segment, data + offset, 0, segment->size); > } else { > ptr = rproc_da_to_va(rproc, segment->da, segment->size); > if (!ptr) { > diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h > index e7b7bab..eb08139 100644 > --- a/include/linux/remoteproc.h > +++ b/include/linux/remoteproc.h > @@ -451,7 +451,7 @@ struct rproc_dump_segment { > > void *priv; > void (*dump)(struct rproc *rproc, struct rproc_dump_segment *segment, > - void *dest); > + void *dest, size_t offset, size_t size); > loff_t offset; > }; > > @@ -630,7 +630,8 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc, > dma_addr_t da, size_t size, > void (*dumpfn)(struct rproc *rproc, > struct rproc_dump_segment *segment, > - void *dest), > + void *dest, size_t offset, > + size_t size), > void *priv); > int rproc_coredump_set_elf_info(struct rproc *rproc, u8 class, u16 machine); > > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >