Hey folks,
so I was handed an Xilinx FPGA board with the standard SPI core by Xilinx, which is handled by the Microblaze processor also in there, using the Xilinx-provided XSpi library. In particular, trying the SPI-slave-interrupt based example of theirs.
(I know of the existence of the Xilinx forum, which seems to be largely useless)
I'm coding for the Microblaze, and then the ARM Cortex A based Linux board as the master, where I'm using the standard linux "spidev" driver.
The master is clocking at 6 MHz, connected to the slave via ~ 20cm long loose wires, which are tapped to connect a logic analyzer.
The Microblaze slave does receive the data sent by the master correctly, e.g. sending 8x uint32's (it's set up for 32bit width at both ends) of 0x0badf00d, 0xc0cac01a and what have you.
So this would seem to mean to me that both ends' hardware is set up correctly, as clocks, polarities and such are set up for both directions, not independently.
But the data the slave sends gets *not* received correctly. It is mangled in a repeatable pattern.
E.g. the slave sends as 32bit numbers 0x50...0x57, the master receives this: {0x28, 0x28, 0x80000029, 0x29, 0x8000002a, 0x2a, 0x8000002b, 0x2b}, which looks like integer 1/2 of the expected values, plus the MSB sometimes set additionally.
Interestingly, the logic analyzer (sampling at 125MHz) also does not decode the MISO line, it shows hex/ascii only for MOSI line, but there are not separate settings, only one for what you want to display. So I guess it can't.

The MISO phase looks a bit delayed compared to the rest, but I don't know whether that's bad or not.
Any idea what might cause this?
-------------------------------
UPDATE:
Ok folks, it now works - the exp_spi_clk of the AXI Quad SPI core was set too low vs. the intended SPI speed. That was the only change made resulting in seeing the expected data on both ends.