On Thu 16 Jul 15:20 PDT 2020, Rishabh Bhatnagar wrote:

> From: Sibi Sankar <si...@codeaurora.org>
> 
> In order to land inline coredump support for mss, the dump_segment
> function would need to support granularities less than the segment
> size. This is achieved by replacing mask based tracking with size.
> 
> Signed-off-by: Sibi Sankar <si...@codeaurora.org>
> Signed-off-by: Rishabh Bhatnagar <risha...@codeaurora.org>

Reviewed-by: Bjorn Andersson <bjorn.anders...@linaro.org>

> ---
>  drivers/remoteproc/qcom_q6v5_mss.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c 
> b/drivers/remoteproc/qcom_q6v5_mss.c
> index feb70283b..037cd45 100644
> --- a/drivers/remoteproc/qcom_q6v5_mss.c
> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> @@ -181,8 +181,8 @@ struct q6v5 {
>       bool running;
>  
>       bool dump_mba_loaded;
> -     unsigned long dump_segment_mask;
> -     unsigned long dump_complete_mask;
> +     size_t current_dump_size;
> +     size_t total_dump_size;
>  
>       phys_addr_t mba_phys;
>       void *mba_region;
> @@ -1203,7 +1203,6 @@ static void qcom_q6v5_dump_segment(struct rproc *rproc,
>  {
>       int ret = 0;
>       struct q6v5 *qproc = rproc->priv;
> -     unsigned long mask = BIT((unsigned long)segment->priv);
>       int offset = segment->da - qproc->mpss_reloc;
>       void *ptr = NULL;
>  
> @@ -1229,10 +1228,10 @@ static void qcom_q6v5_dump_segment(struct rproc 
> *rproc,
>               memset(dest, 0xff, segment->size);
>       }
>  
> -     qproc->dump_segment_mask |= mask;
> +     qproc->current_dump_size += segment->size;
>  
>       /* Reclaim mba after copying segments */
> -     if (qproc->dump_segment_mask == qproc->dump_complete_mask) {
> +     if (qproc->current_dump_size == qproc->total_dump_size) {
>               if (qproc->dump_mba_loaded) {
>                       /* Try to reset ownership back to Q6 */
>                       q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm,
> @@ -1274,7 +1273,7 @@ static int q6v5_start(struct rproc *rproc)
>                       "Failed to reclaim mba buffer system may become 
> unstable\n");
>  
>       /* Reset Dump Segment Mask */
> -     qproc->dump_segment_mask = 0;
> +     qproc->current_dump_size = 0;
>       qproc->running = true;
>  
>       return 0;
> @@ -1323,7 +1322,7 @@ static int qcom_q6v5_register_dump_segments(struct 
> rproc *rproc,
>  
>       ehdr = (struct elf32_hdr *)fw->data;
>       phdrs = (struct elf32_phdr *)(ehdr + 1);
> -     qproc->dump_complete_mask = 0;
> +     qproc->total_dump_size = 0;
>  
>       for (i = 0; i < ehdr->e_phnum; i++) {
>               phdr = &phdrs[i];
> @@ -1334,11 +1333,11 @@ static int qcom_q6v5_register_dump_segments(struct 
> rproc *rproc,
>               ret = rproc_coredump_add_custom_segment(rproc, phdr->p_paddr,
>                                                       phdr->p_memsz,
>                                                       qcom_q6v5_dump_segment,
> -                                                     (void *)i);
> +                                                     NULL);
>               if (ret)
>                       break;
>  
> -             qproc->dump_complete_mask |= BIT(i);
> +             qproc->total_dump_size += phdr->p_memsz;
>       }
>  
>       release_firmware(fw);
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
> 

Reply via email to