Re: [Patch v7 2/4] memory: tegra: Add MC error logging on tegra186 onward

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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).




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux