Suppose I have a peripheral device (connected with PCIe) that has 32GB of memory on it, and the device wishes to make all 32GB available to Linux. I can see that there's a limitation with the amount of IO memory made available at boot to any given PCI controller (examining /proc/iomem it looks like 256MB).
What's the most effective way of getting around this problem? The T1024RM describes LAWs and ATMUs and my first thought was to try the following:
When I try this though, and then attempt to read from the physical address that I had set using the LAW, which is the same value to which I had set the outbound window's base address, I get a bus error.
Is there a step that I am missing here?
I am sure that LAW (1), outbound PCIe window (2), PCIe controller (3) configurations is enough for access to memory of the properly configured PCIe device (4) at suitable physical address (5). So there is can be misconfiguration in any of these five. Notice also that the PCIe LAW has to be in accordance to other LAWs. I.e. there should not be overlapping with other LAW which has higher priority.
It is not quite clear do you write Linux device driver or software for a bare-metal system or something else.
r8070z I guess what I'd really like to know is if a device requests X amount of memory in BARn, and the PCIe controller assigns BARn to a region of designated IO memory, so I guess by default (C00000000 + some offset) - (C0000000 + some offset + size of BARn), can a driver edit the outbound window in the ATMU to access memory beyond this region requested by BARn, provided of course that the device on the other end will let it.
I'd be writing with a Linux driver.