Re: [PATCH] PCI: tegra: Convert to MSI domains

From: Jason Gunthorpe
Date: Fri Sep 04 2020 - 08:31:37 EST


On Fri, Sep 04, 2020 at 02:28:27PM +0200, Thierry Reding wrote:
> On Fri, Sep 04, 2020 at 08:45:01AM -0300, Jason Gunthorpe wrote:
> > On Fri, Sep 04, 2020 at 12:56:13PM +0200, Thierry Reding wrote:
> > > +static void tegra_msi_irq_mask(struct irq_data *d)
> > > +{
> > > + struct tegra_msi *msi = irq_data_get_irq_chip_data(d);
> > > + struct tegra_pcie *pcie = msi_to_pcie(msi);
> > > + unsigned int index = d->hwirq / 32;
> > > + u32 value;
> > > +
> > > + value = afi_readl(pcie, AFI_MSI_EN_VEC(index));
> > > + value &= ~BIT(d->hwirq % 32);
> > > + afi_writel(pcie, value, AFI_MSI_EN_VEC(index));
> > > +}
> >
> > Do these need a flushing write? The Mask operation should be synchronous?
>
> Did you mean a flushing read? We typically flush out writes by reading
> from the same register. Another write wouldn't guarantee that both
> writes are actually flushed to hardware, would it?

Yes ready, sorry :)

The read should 'pull back' any in flight MSIs and ensure that no MSI
is delivered to the GIC after the tegra_msi_irq_mask() completes.

Jason