Skip to content

Commit

Permalink
remoteproc: qcom: q6v5-mss: Add custom dump function for modem
Browse files Browse the repository at this point in the history
The per segment dump function is responsible for loading the mba
before device memory segments associated with coredump can be populated
and for cleaning up the resources post coredump.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
  • Loading branch information
Sibi Sankar authored and Bjorn Andersson committed Oct 19, 2018
1 parent 0304530 commit 7dd8ade
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions drivers/remoteproc/qcom_q6v5_mss.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@ struct q6v5 {
bool running;

bool dump_mba_loaded;
unsigned long dump_segment_mask;
unsigned long dump_complete_mask;

phys_addr_t mba_phys;
void *mba_region;
size_t mba_size;
Expand Down Expand Up @@ -961,6 +964,33 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
return ret < 0 ? ret : 0;
}

static void qcom_q6v5_dump_segment(struct rproc *rproc,
struct rproc_dump_segment *segment,
void *dest)
{
int ret = 0;
struct q6v5 *qproc = rproc->priv;
unsigned long mask = BIT((unsigned long)segment->priv);
void *ptr = rproc_da_to_va(rproc, segment->da, segment->size);

/* Unlock mba before copying segments */
if (!qproc->dump_mba_loaded)
ret = q6v5_mba_load(qproc);

if (!ptr || ret)
memset(dest, 0xff, segment->size);
else
memcpy(dest, ptr, segment->size);

qproc->dump_segment_mask |= mask;

/* Reclaim mba after copying segments */
if (qproc->dump_segment_mask == qproc->dump_complete_mask) {
if (qproc->dump_mba_loaded)
q6v5_mba_reclaim(qproc);
}
}

static int q6v5_start(struct rproc *rproc)
{
struct q6v5 *qproc = (struct q6v5 *)rproc->priv;
Expand Down Expand Up @@ -989,6 +1019,9 @@ static int q6v5_start(struct rproc *rproc)
if (xfermemop_ret)
dev_err(qproc->dev,
"Failed to reclaim mba buffer system may become unstable\n");

/* Reset Dump Segment Mask */
qproc->dump_segment_mask = 0;
qproc->running = true;

return 0;
Expand Down

0 comments on commit 7dd8ade

Please sign in to comment.