[PATCH v4 05/12] rvtrace: Add trace encoder driver

Mayuresh Chitale mayuresh.chitale at oss.qualcomm.com
Tue Jun 2 04:29:36 PDT 2026


Hi Sergey,

On Sat, May 23, 2026 at 12:16 AM Sergey Matyukevich <geomatsi at gmail.com> wrote:
>
> Hi,
>
> > From: Mayuresh Chitale <mayuresh.chitale at oss.qualcomm.com>
> >
> > Add initial implementation of RISC-V trace encoder driver. The encoder
> > is defined in the RISC-V Trace Control Interface specification.
> >
> > Co-developed-by: Anup Patel <anup.patel at oss.qualcomm.com>
> > Signed-off-by: Anup Patel <anup.patel at oss.qualcomm.com>
> > Signed-off-by: Mayuresh Chitale <mayuresh.chitale at oss.qualcomm.com>
> > ---
> >  drivers/hwtracing/rvtrace/Kconfig           |   7 ++
> >  drivers/hwtracing/rvtrace/Makefile          |   1 +
> >  drivers/hwtracing/rvtrace/rvtrace-encoder.c | 130 ++++++++++++++++++++
> >  3 files changed, 138 insertions(+)
> >  create mode 100644 drivers/hwtracing/rvtrace/rvtrace-encoder.c
>
> ...
>
> > +static int rvtrace_encoder_start(struct rvtrace_component *comp)
> > +{
> > +     int ret;
> > +     u32 val;
> > +
> > +     val = rvtrace_read32(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     val |= BIT(RVTRACE_COMPONENT_CTRL_ENABLE_SHIFT);
> > +     rvtrace_write32(comp->pdata, val, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     ret = rvtrace_poll_bit(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET,
> > +                            RVTRACE_COMPONENT_CTRL_ENABLE_SHIFT, 1,
> > +                            comp->pdata->control_poll_timeout_usecs);
>
> IIUC the code fragment above duplicates 'rvtrace_enable_component' from
> rvtrace-core.c.
>
> > +     if (ret) {
> > +             dev_err(&comp->dev, "failed to enable encoder.\n");
> > +             return ret;
> > +     }
> > +
> > +     /* set mode */
> > +     val = rvtrace_read32(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     val |= (RVTRACE_COMPONENT_CTRL_INSTMODE_OPIT << RVTRACE_COMPONENT_CTRL_INSTMODE_SHIFT);
> > +     rvtrace_write32(comp->pdata, val, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +
> > +     val = rvtrace_read32(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     val |= BIT(RVTRACE_COMPONENT_CTRL_ITRACE_SHIFT);
> > +     rvtrace_write32(comp->pdata, val, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     ret = rvtrace_poll_bit(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET,
> > +                            RVTRACE_COMPONENT_CTRL_ITRACE_SHIFT, 1,
> > +                            comp->pdata->control_poll_timeout_usecs);
> > +     if (ret)
> > +             dev_err(&comp->dev, "failed to enable tracing.\n");
> > +
> > +     return ret;
> > +}
> > +
> > +static int rvtrace_encoder_stop(struct rvtrace_component *comp)
> > +{
> > +     int ret;
> > +     u32 val;
> > +
> > +     val = rvtrace_read32(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     val &= ~BIT(RVTRACE_COMPONENT_CTRL_ITRACE_SHIFT);
> > +     rvtrace_write32(comp->pdata, val, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     ret = rvtrace_poll_bit(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET,
> > +                            RVTRACE_COMPONENT_CTRL_ITRACE_SHIFT, 0,
> > +                            comp->pdata->control_poll_timeout_usecs);
> > +     if (ret) {
> > +             dev_err(&comp->dev, "failed to stop tracing.\n");
> > +             return ret;
> > +     }
> > +
> > +     val = rvtrace_read32(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     val &= ~BIT(RVTRACE_COMPONENT_CTRL_ENABLE_SHIFT);
> > +     rvtrace_write32(comp->pdata, val, RVTRACE_COMPONENT_CTRL_OFFSET);
> > +     ret = rvtrace_poll_bit(comp->pdata, RVTRACE_COMPONENT_CTRL_OFFSET,
> > +                            RVTRACE_COMPONENT_CTRL_ENABLE_SHIFT, 0,
> > +                            comp->pdata->control_poll_timeout_usecs);
>
> IIUC the code fragment above duplicates 'rvtrace_disable_component' from
> rvtrace-core.c.
>
I will replace both of these with calls to the respective core functions.
> > +     if (ret) {
> > +             dev_err(&comp->dev, "failed to disable encoder.\n");
> > +             return ret;
> > +     }
> > +
> > +     return rvtrace_comp_poll_empty(comp);
> > +}
>
> Regards,
> Sergey



More information about the linux-riscv mailing list