Messages in this thread | | | Date | Thu, 14 Apr 2022 11:01:44 +0530 | Subject | Re: [Patch v7 2/4] memory: tegra: Add MC error logging on tegra186 onward | From | Ashish Mhetre <> |
| |
On 4/14/2022 2:43 AM, Dmitry Osipenko wrote: > External email: Use caution opening links or attachments > > > On 4/13/22 12:40, Ashish Mhetre wrote: >> +irqreturn_t tegra30_mc_handle_irq(int irq, void *data) >> { >> struct tegra_mc *mc = data; >> + unsigned int bit, channel; >> unsigned long status; >> - unsigned int bit; >> >> - /* mask all interrupts to avoid flooding */ >> - status = mc_readl(mc, MC_INTSTATUS) & mc->soc->intmask; >> + if (mc->soc->num_channels) { >> + u32 global_status; >> + int err; >> + >> + global_status = mc_ch_readl(mc, MC_BROADCAST_CHANNEL, MC_GLOBAL_INTSTATUS); > > This will crash if mc->bcast_ch_regs = ERR_PTR(-EINVAL) for older dtbs.
Actually interrupts won't occur till we write MC_INTMASK register from broadcast channel with appropriate intmask value. I have added check in tegra_mc_probe() while registering irq which will write MC_INTMASK from broadcast only when mc->bcast_ch_regs is initialized i.e. !IS_ERR(mc->bcast_ch_regs). So interrupt handler won't be triggered at all if mc->bcast_ch_regs = ERR_PTR(-EINVAL).
| |