Hi, Working on a mx6solo board with PCIe driver enabled in U-boot, I notice that after doing several reboots a hang is seen on the PCIe driver:
PCI Autoconfig: Bus Memory region: [0x1100000-0x1efffff], Physical Memory [1100000-1efffffx] PCI Autoconfig: Bus I/O region: [0x1000000-0x10fffff], Physical Memory: [1000000-10fffff] ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc00c ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc000 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc000 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc008 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config 00:01.0 - 16c3:abcd - Bridge device ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc008 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc004 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc010 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config PCI Autoconfig: BAR 0, I/O, size=0xfff4, address=0x1000000 bus_lower=0x100fff4### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc014 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc004 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc00c ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc00c ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config PCI Autoconfig: Found P2P bridge, device 1 ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc004 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc018 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc018 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc018 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc020 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc024 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc024 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc01c ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc030 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1ffc004 ### 5 -> imx_pcie_read_config ### OUT -> imx_pcie_read_config ### IN -> imx_pcie_write_config ### OUT -> imx_pcie_write_config ### IN -> imx_pcie_read_config ### 1 -> imx_pcie_read_config ### 2 -> imx_pcie_read_config ### 3 -> imx_pcie_read_config ### 4 -> imx_pcie_read_config - va_address = 0x 1f0000c (Hang) As a quick workaround I tried the following: --- a/drivers/pci/pcie_imx.c +++ b/drivers/pci/pcie_imx.c @@ -385,7 +385,8 @@ static int imx_pcie_read_config(struct pci_controller *hose, */ imx_pcie_fix_dabt_handler(true); writel(0xffffffff, val); - *val = readl(va_address); + if (0x01ffc000 <= va_address && va_address <= 0x01ffffff) + *val = readl(va_address); imx_pcie_fix_dabt_handler(false); and the hang does not happen. However, not all devices connected to the PCI switch can be discovered. Any suggestions? Thanks, Fabio Estevam _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot