DesignWare ATU PCIE_ATU_TYPE_MEM usage

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

 



Hi guys,

This code in dw_pcie_host_init() looks wrong:

    if (!pp->ops->rd_other_conf)
	    dw_pcie_prog_outbound_atu(pp, PCIE_ATU_REGION_INDEX1,
				      PCIE_ATU_TYPE_MEM, pp->mem_base,
				      pp->mem_bus_addr, pp->mem_size);

    dw_pcie_wr_own_conf(pp, PCI_BASE_ADDRESS_0, 4, 0);
    ...
    dw_pcie_rd_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, &val);

Evidently you need to program the ATU with PCIE_ATU_TYPE_MEM before
doing config accesses on the root bus?

If that's the case, what about other config accesses after these few
in dw_pcie_host_init()?  I don't see anything that changes the ATU
programming for things coming through dw_pcie_wr_conf().

I assume you need some sort of locking around this sequence:

    dw_pcie_prog_outbound_atu(pp, PCIE_ATU_REGION_INDEX0, type, ...
    ret = dw_pcie_cfg_read(va_cfg_base + where, size, val);
    dw_pcie_prog_outbound_atu(pp, PCIE_ATU_REGION_INDEX0, PCIE_ATU_TYPE_IO, ...

Are you relying on pci_lock?  If so, a comment to that effect would be
nice.

The whole ATU management looks pretty inefficient.  It's likely that
there'll be a whole sequence of operations where we don't need to
touch the ATU, but since we don't remember its current state, we
configure the whole thing from scratch each time, which is at least
eight register writes (plus a read for the new synchronization).

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux