Skip to content

Commit 76abf9c

Browse files
Rishabh Bhatnagarandersson
Rishabh Bhatnagar
authored andcommitted
remoteproc: Pass size and offset as arguments to segment dump function
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. Tested-by: Sibi Sankar <[email protected]> Reviewed-by: Bjorn Andersson <[email protected]> Reviewed-by: Sibi Sankar <[email protected]> Reviewed-by: Mathieu Poirier <[email protected]> Signed-off-by: Rishabh Bhatnagar <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Bjorn Andersson <[email protected]>
1 parent 7ac516d commit 76abf9c

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

drivers/remoteproc/qcom_q6v5_mss.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
12021202

12031203
static void qcom_q6v5_dump_segment(struct rproc *rproc,
12041204
struct rproc_dump_segment *segment,
1205-
void *dest)
1205+
void *dest, size_t cp_offset, size_t size)
12061206
{
12071207
int ret = 0;
12081208
struct q6v5 *qproc = rproc->priv;
@@ -1222,16 +1222,16 @@ static void qcom_q6v5_dump_segment(struct rproc *rproc,
12221222
}
12231223

12241224
if (!ret)
1225-
ptr = ioremap_wc(qproc->mpss_phys + offset, segment->size);
1225+
ptr = ioremap_wc(qproc->mpss_phys + offset + cp_offset, size);
12261226

12271227
if (ptr) {
1228-
memcpy(dest, ptr, segment->size);
1228+
memcpy(dest, ptr, size);
12291229
iounmap(ptr);
12301230
} else {
1231-
memset(dest, 0xff, segment->size);
1231+
memset(dest, 0xff, size);
12321232
}
12331233

1234-
qproc->current_dump_size += segment->size;
1234+
qproc->current_dump_size += size;
12351235

12361236
/* Reclaim mba after copying segments */
12371237
if (qproc->current_dump_size == qproc->total_dump_size) {

drivers/remoteproc/remoteproc_coredump.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc,
7272
dma_addr_t da, size_t size,
7373
void (*dumpfn)(struct rproc *rproc,
7474
struct rproc_dump_segment *segment,
75-
void *dest),
75+
void *dest, size_t offset,
76+
size_t size),
7677
void *priv)
7778
{
7879
struct rproc_dump_segment *segment;
@@ -183,7 +184,7 @@ void rproc_coredump(struct rproc *rproc)
183184
elf_phdr_set_p_align(class, phdr, 0);
184185

185186
if (segment->dump) {
186-
segment->dump(rproc, segment, data + offset);
187+
segment->dump(rproc, segment, data + offset, 0, segment->size);
187188
} else {
188189
ptr = rproc_da_to_va(rproc, segment->da, segment->size);
189190
if (!ptr) {

include/linux/remoteproc.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ struct rproc_dump_segment {
456456

457457
void *priv;
458458
void (*dump)(struct rproc *rproc, struct rproc_dump_segment *segment,
459-
void *dest);
459+
void *dest, size_t offset, size_t size);
460460
loff_t offset;
461461
};
462462

@@ -638,7 +638,8 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc,
638638
dma_addr_t da, size_t size,
639639
void (*dumpfn)(struct rproc *rproc,
640640
struct rproc_dump_segment *segment,
641-
void *dest),
641+
void *dest, size_t offset,
642+
size_t size),
642643
void *priv);
643644
int rproc_coredump_set_elf_info(struct rproc *rproc, u8 class, u16 machine);
644645

0 commit comments

Comments
 (0)