Re: [Patch v7 2/4] memory: tegra: Add MC error logging on tegra186 onward
From: Dmitry Osipenko
Date: Thu Apr 14 2022 - 17:15:39 EST
On 4/14/22 08:31, Ashish Mhetre wrote:
>
>
> 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).
>
Should be cleaner to set mc->bcast_ch_regs to NULL anyways. The ERR_PTR
doesn't add much value and only makes code less readable.