Добрый день!
Пытаюсь прочесть конфиг. пространство PCIe RootPort из NiosII. Просмотрел исходники Linux, использую функции для общения через интерфейс TLP на шине CRA.
К рутпорту цепляю endpoint - система переходит в L0 и DataLinkLayer работает.
Используемая функция:
pcie-altera.c
static int tlp_cfg_dword_read(struct altera_pcie *pcie, u8 bus, u32 devfn,
int where, u8 byte_en, u32 *value)
{
u32 headers[TLP_HDR_SIZE];
if (bus == pcie->root_bus_nr)
headers[0] = TLP_CFG_DW0(TLP_FMTTYPE_CFGRD0);
else
headers[0] = TLP_CFG_DW0(TLP_FMTTYPE_CFGRD1);
headers[1] = TLP_CFG_DW1(TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN),
TLP_READ_TAG, byte_en);
headers[2] = TLP_CFG_DW2(bus, devfn, where);
tlp_write_packet(pcie, headers, 0, false);
return tlp_read_packet(pcie, value);
}
Посылаю конф.запрос type 0 на чтение шины 0, dev 0, func 0 (на что должен откликнуться Rootport).
Т.е. это самая первая операция которую я делаю до енумерации.
Заголовок TLP header:
[0] 0x04000001
[1] 0x00001D0F
[2] 0x00000000
Функция возвращает PCIBIOS_DEVICE_NOT_FOUND.
Корректен ли мой отправляемый рутпорту запрос/пакет?
Спасибо!