lkml.org 
[lkml]   [2020]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 2/4] remoteproc: qcom_q6v5_mss: Replace mask based tracking with size
    Date
    From: Sibi Sankar <sibis@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 <sibis@codeaurora.org>
    Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
    ---
    drivers/remoteproc/qcom_q6v5_mss.c | 15 +++++++--------
    1 file changed, 7 insertions(+), 8 deletions(-)

    diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
    index feb70283b..c6ce032 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];
    @@ -1338,7 +1337,7 @@ static int qcom_q6v5_register_dump_segments(struct rproc *rproc,
    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
    \
     
     \ /
      Last update: 2020-07-09 22:32    [W:7.222 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site