LimeSuiteNG support of LimeSDR-PCIe

Hello everybody,

I have LimeSDR (USB version) and LimeSDR PCIe.
Now I’m porting my projects from LimeSuite to LimeSuiteNG.
I have some progress in porting LimeSDR (USB version), but I’m stuck on LimeSDR PCIe.

The old version of the LimeSuite supports the Xillybus connection, allowing interaction with the LimeSDR PCIe board via xillybus_core and xillybus_pcie Linux Kernel modules.

As I can see the new version of the LimeSuiteNG doesn’t have such type of connection and as I can understand from the source code and documentation the limepcie module should be used instead.

When I try to use the limepcie module it successfully loaded, but doesn’t see my LimeSDR PCIe board. As I can see from the source code the PCIe board is mentioned in the list of supported devices:

src/comms/PCIe/linux-kernel-module/boards.h

enum eLMS_DEV {
...
    LMS_DEV_LIMESDR_PCIE = 15,

...
const char LMS_DEV_NAMES[][80] = {
...
    "LimeSDR-PCIe",

But per my understanding, the module doesn’t see the board because LimeSDR PCIe has an unexpected combination of device and vendor IDs.

To make the board visible for the module I tried to add the following lines:

src/comms/PCIe/linux-kernel-module/limepcie.c

+ #define PCI_ALTERA_VENDOR_ID 0x1172
+ #define PCI_DEVICE_ID_XILLYBUS 0xebeb
...
 static const struct pci_device_id limepcie_pci_ids[] = {{PCI_DEVICE(XILINX_FPGA_VENDOR_ID, XILINX_FPGA_DEVICE_ID)},
     {PCI_DEVICE(XILINX_FPGA_VENDOR_ID, XTRX_FPGA_DEVICE_ID)},
     {PCI_DEVICE(ALTERA_FPGA_VENDOR_ID, ALTERA_FPGA_DEVICE_ID)},
+    {PCI_DEVICE(PCI_ALTERA_VENDOR_ID, PCI_DEVICE_ID_XILLYBUS)},

After the above modification, the module can see the LimeSDR PCIe board, but it can’t initialize it. The issue occurs during reading the device-specific info:

src/comms/PCIe/linux-kernel-module/limepcie.c

static int ReadInfo(struct limepcie_device *myDevice)
...
    if (pkt.status == 0) {
        return -EIO;
    }

So my questions are the following:

  • does the current version of the LimeSuiteNG (and the limepcie module in particular) support the LimeSDR PCIe?
  • if the answer is No, is it planned to add such support in the future?

Thank you in advance!

1 Like

Hi, the LimeSDR-PCIe board is currently not supported in LimeSuiteNG.

The original board gateware uses Xillybus frontend, so it’s not compatible with the limepcie driver. I’ve tried adding support of the Xillybus, it’s doable, but the implementation of RF samples streaming is very tricky, due to lack of some features in the Xillybus.

The better option would be to replace LimeSDR-PCIe gateware, so that it would be compatible with limepcie driver. There was such attempt GitHub - myriadrf/LimeSDR-PCIe_GW at LitePCIe but it’s quite old, and I’m not sure if it is fully compatible with the latest software, the gateware might need to be regenerated with the latest version of PCIe implementation. I’ll need to test it, but it’s a low priority right now.

1 Like

Hi @ricardas ,

Thank you very much for the detailed answer!

Best Regards,
Sergii.