Re: [PATCH v3 3/3] soc: qcom: rpmh-rsc: Output debug information from RSC
Konrad Dybcio <[email protected]>
| Newsgroups | org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 8/12/26 8:12 AM, Maulik Shah wrote: > From: "Raju P.L.S.S.S.N" <[email protected]> > > When an RPMh transfer times out there is no visibility into which > TCS was stuck, what commands it was carrying, or whether the > completion IRQ was pending at the GIC. Add rpmh_rsc_debug() to > capture this state at timeout: [...] Looking good overall, some minor comments > +static void print_tcs_info(struct rsc_drv *drv, int tcs_id, > + bool *aoss_irq_sts) > +{ > + const struct tcs_request *req = get_req_from_tcs(drv, tcs_id); > + unsigned long cmds_enabled; > + char rname[CMD_DB_ID_SIZE + 1]; > + u32 addr, data, msgid, sts, irq_sts; > + bool in_use = test_bit(tcs_id, drv->tcs_in_use); > + int i; > + > + sts = read_tcs_reg(drv, drv->regs[RSC_DRV_STATUS], tcs_id); > + cmds_enabled = read_tcs_reg(drv, drv->regs[RSC_DRV_CMD_ENABLE], tcs_id); > + if (!cmds_enabled) > + return; > + > + if (!req) > + goto print_tcs_data; > + > + data = read_tcs_reg(drv, drv->regs[RSC_DRV_CONTROL], tcs_id); > + irq_sts = readl_relaxed(drv->tcs_base + drv->regs[RSC_DRV_IRQ_STATUS]); > + pr_warn("Request: tcs-in-use:%s state=%d wait_for_compl=%u\n", Let's use dev_foo() everywhere instead of pr_foo, you have a struct dev* in drv->dev > + in_use ? "YES" : "NO", Please use str_yes_no() here, or AI contributors will rush to "fix" it.. [...] > +/** > + * rpmh_rsc_debug() - Dump debug information on a transfer timeout. > + * @drv: The RSC controller. > + * @compl: The completion object that timed out. > + * > + * Dumps TCS state for all in-use TCSes and reports which accelerators > + * did not respond, to aid in diagnosing RPMH timeout failures. > + */ > +void rpmh_rsc_debug(struct rsc_drv *drv, struct completion *compl) > +{ > + struct irq_data *rsc_irq_data = irq_get_irq_data(drv->irq); > + bool gic_irq_sts, aoss_irq_sts = false; > + int i, busy = 0; > + > + pr_err("RSC:%s\n", drv->name); Let's perhaps touch this up to sth like "Timeout on RSC %s\n" Konrad