On 24/08/2017 15:44, Bjorn Helgaas wrote: > On Thu, Aug 24, 2017 at 11:14:07AM +0800, mtk11102 wrote: > >> @@ -531,8 +533,10 @@ static const struct irq_domain_ops msi_domain_ops = >> { >> static void mtk_pcie_enable_msi(struct mtk_pcie_port *port) >> { >> u32 val; >> + phys_addr_t msg_addr; >> >> - val = lower_32_bits((u64)(port->base + PCIE_MSI_VECTOR)); >> + msg_addr = virt_to_phys(port->base + PCIE_MSI_VECTOR); >> + val = lower_32_bits(msg_addr); >> writel(val, port->base + PCIE_IMSI_ADDR); >> >> val = readl(port->base + PCIE_INT_MASK); > > I don't think this is quite right: virt_to_phys() converts a CPU > virtual address to a CPU physical address, but the msg_addr is a PCI > bus address. In many cases, PCI bus addresses are identical to CPU > physical addresses, but not always. Is the virt_to_bus() function not appropriate? Regards.