Given the following simple PCIe design, how do I define device tree entries for the devices on my AXI-lite bus, so that the existing drivers get loaded with the correct base address?
I know that typically PCIe doesn't use the device tree, because the pcie subsystem does its own probing, and the driver typically knows what is attached. However, in this case I don't want to have to rewrite the drivers for the UART and the SPI and I2C masters, nor do I want to re-write the drivers for the the devices that will connect to the I2C and SPI buses. I am certain that I am not the first person to attach a device with an existing driver on the other side of a PCIe block, but I have not been able to find much useful information on how to tell the kernel about these devices, and more critically, tell the drivers the correct translated base address for the devices on my AXI-lite bus.
In this case the kernel doesn't notify either my "hello-bus" driver or my "hello-world" driver that a device is present. However, if I put my fpga node as a child of the root node, then my driver gets notified. But as a child of the root node, I don't have a chance of getting the address translation to work correctly. I could hard code my physical address, but I am sure that will end up causing a problem when the base address suddenly changes because the BAR got mapped some other place.
I can see these nodes under /proc/device-tree/, so I know that the kernel knows about them. It just doesn't want to notify my driver.