I have a couple questions regarding the Linux-FPGA interactions in the ADRV9009-ZU11EG SOM.
I hope this is not considered a repost as the scope of the question I posted in the FPGA Reference Design forum here has changed, and I apologize if it is considered as such.
I have been trying to modify the FPGA reference design for the ADRV9009-ZU11EG SOM. The resulting expected putput has not appeared, and so I have tried to do less and less complicated modifications. After input from Adrian on the previous linked post, I have an FPGA design the statically assigns user LEDs values. After going through the BOOT.BIN generation process and turning on the board, the LEDs that should be on are not. Adrian gave me some simple Linux commands to turn them on/off, however, and that worked.
After consulting with colleagues, we are concerned that the Linux OS is overriding some of the FPGA processes we are interested in modifying or changing. In this case, it is something simple like LED control, but could extend to things that are critical to our modified design. I found this post here with a similar topic about Linux-FPGA interactions, and in it the ADI responder says:
"Depends what you are changing in the FPGA, you need to change or not change the rest of that boot image.
[an example] If you change an LED control that Linux has no knowledge of, you can just update the BOOT.BIN only [where the FPGA is]."
Well, I thought that the LEDs I was controlling in the FPGA was not Linux controlled/connected, but Adrian gave me Linux commands that show my line of thinking was wrong.
My questions are as follow:
1) Where can I find a detailed, comprehensive list of what is and isn't controlled by the Linux OS/LIBIIO? If something like LED control from the FPGA is overridden, it would be prudent for me to know what else can be or is being overridden.
2) Is there a list of default values for all the FPGA parameters instantiated by the Linux drivers? If possible, I would like to change some of the default values for testing purposes (I believe there are guides already detailing how to make changes to the drivers, but I haven't found a detailed documentation of what already exists and where, other than looking at each driver's C code).
3) If I change something in the FPGA, such as LEDs which Linux has knowledge of, what else do I need to change other than the BOOT.BIN? I can export the .hdf file with the bitstream to make the BOOT.BIN, but do I also need to modify the device tree? Or image? Is there documentation regarding changing those files? In the ADRV9009-ZU11EG RF System-on-Module wiki I couldn't find (or perhaps missed) that information.
The kernel doesn't do random things. It only controls resources he is requested for.
The device tree describes the hardware components of a particular system so that the operating system's kernel can use and manage those components. In other words it describes buses and their attached devices.
In the LED case the kernel was told that there are 4 LEDs and which GPIO resources they are connected to.
So when the kernel booted it defaulted the GPIOs controlling these.
Please see the device trees responsible for this platform:
Thanks for the clarification Michael! It turns out I was putting my BOOT.BIN image in the wrong location on the SD card, and none of the HDL modifications I had made were reflected due to that.