Перейти к содержанию
    

Kintex Ultrascale PCI-E не получает результаты MRd

21 minutes ago, makc said:

Распишите в удобоваримом для человека виде отправляемый TLP в виде массива 32-битных значений, чтобы можно было удобно читать и сверять со стандартом и давайте разбираться с ним

device->mrd_drv = dma_alloc_coherent(&device->pci->dev, 1024, &device->mrd_fpga, GFP_DMA);
dev_info(&device->pci->dev, "mrd drv= 0x%016llX, fpga= 0x%016llX !\n", device->mrd_drv, device->mrd_fpga);
writel(device->mrd_fpga, device->mmio + 0x6A0);
writel(0, device->mmio + 0x6A4);
writel(0x05000020, device->mmio + 0x6A8);
writel(0x000000CC, device->mmio + 0x6AC);

Вот что я отсылаю: превое слово адрес, второе нули (32 битное), затем третье с BDF и 32 слова DW, в конце tag СС. Остальное нули. Нули же означают тип запроса MRd

Младшие биты адреса точно нулевые, но там же AT (address type), но оно 00: Address in the request is untranslated - верно?

 

Далее адрес 30 бит, второе DW там нули, хотя запрос поддерживает 64 битную адресацию. На этой же системе в обход порта эти 32 битные адреса работают как надо.

BDF - точно верный, хоть задаю вручную, но совпадает с lspci (в боевой прошивке через драйвер это задаю). Word count 0x20 - это 32 слова или 128 байт. Далее Req Type 0000 Memory Read Request. Poisoned 0

 

Про tag не ясно, но я пробовал и счетчик, чтобы не совпадали. Completer ID = 0-0-0, ведь рут всегда ноль? Или вот тут как раз и ошибка, что какие то мосты понимают что ноль это до рута, а какие то нет? Requester ID Enable у меня ноль, но может для этого моста надо именно указать requester id иначе оно не найдет обратную дорогу по BDF устройства??? В первых постах этой темы я отметил что у меня это ноль. Начинаю догадываться что это причина

 

Далее нулевые TC (transaction class) и Attr, почитал пока не вижу тут потенциальной проблемы

Screenshot_20230330_102806.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, 1891ВМ12Я сказал:

Младшие биты адреса точно нулевые, но там же AT (address type), но оно 00: Address in the request is untranslated - верно?

Да.

20 минут назад, 1891ВМ12Я сказал:

BDF - точно верный, хоть задаю вручную, но совпадает с lspci (в боевой прошивке через драйвер это задаю). Word count 0x20 - это 32 слова или 128 байт. Далее Req Type 0000 Memory Read Request. Poisoned 0

BDF нет смысла задавать, т.к. судя по документации если Requester ID Enable == 1'b0, то "IP uses Bus and Device numbers captured from received Configuration requests and the client supplies Function numbers in the descriptor to be populated as the Requester ID field in the TLP header."

22 минуты назад, 1891ВМ12Я сказал:

Про tag не ясно, но я пробовал и счетчик, чтобы не совпадали.

0 должно быть хорошо.

22 минуты назад, 1891ВМ12Я сказал:

Completer ID = 0-0-0, ведь рут всегда ноль?

"This field is applicable only to Configuration requests and messages routed by ID. " - это не ваш случай, поэтому нули.

25 минут назад, 1891ВМ12Я сказал:

 Requester ID Enable у меня ноль, но может для этого моста надо именно указать requester id иначе оно не найдет обратную дорогу по BDF устройства??? В первых постах этой темы я отметил что у меня это ноль. Начинаю догадываться что это причина

Нет, дело не в этом, т.к. для Endpoint mode и должен быть 0 - данные маршрутизации будут браться из конфигурационного пространства вашего устройства (см. выше).

Вы привели данные, которые должны попадать на вход PCIe EP. Но что в действительности проходит через AXI вы смотрели в анализаторе? Вот это бы и хотелось увидеть, чтобы делать выводы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, makc said:

Вы привели данные, которые должны попадать на вход PCIe EP. Но что в действительности проходит через AXI вы смотрели в анализаторе? Вот это бы и хотелось увидеть, чтобы делать выводы.

То есть приведенный мной MRd запрос всё же не содержит ошибок? Эти слова на AXI загоняются так:

	201: if(s_axis_rq_tready == 4'b1111) begin
		state <= 202;
		mrd_tag <= mrd_tag + 1;
		if(use_raw) begin
			s_axis_rq_tdata <= mrd_raw[127:0];
		end else begin
...
		end
		s_axis_rq_tuser <= {4'b0, 4'b0};
		s_axis_rq_tkeep <= 8'h0F;
		s_axis_rq_tvalid <= 1;
		s_axis_rq_tlast <= 1;
		m_axis_rc_tready <= 1;
	end
	202: begin
		if(s_axis_rq_tready == 4'b1111) begin
			s_axis_rq_tuser <= 0; // i60
			s_axis_rq_tkeep <= 8'h00;
			s_axis_rq_tvalid <= 0;
			s_axis_rq_tlast <= 0;
			s_axis_rq_tdata <= 0;
		end

Ждем что ready и снимаем данные и флаги. mrd_raw это 4 DW которые пишутся из драйвера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, 1891ВМ12Я сказал:
s_axis_rq_tuser <= {4'b0, 4'b0};

Вот эта строчка вызывает у меня большие сомнения, по-моему там должно быть {4'hF, 4'hF} или вроде того, т.к. это задаёт Byte Enable для формирования заголовка TLP на шине. См. картинку ниже и далее текст стандарта:
image.thumb.png.f3bcfdfc96a7b35548dd308b23300f35.png

image.thumb.png.0ae75d17f67a249fa3d0de7612a99742.png

image.thumb.png.0bc16d7d324e5c47f57bbe31ad91ed2a.png

А у вас получается, что вы хотите передать в первом и последнем слове приблизительно ничего. Похоже мосту это не нравится. 😉

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, makc said:

А у вас получается, что вы хотите передать в первом и последнем слове приблизительно ничего. Похоже мосту это не нравится. 😉

Ох, там еще пишут "The valid bytes in the first and last Dwords of the data block to be read must be indicated using first_be[3:0] and last_be[3:0], respectively". Там выше я писал что это тоже подозреваю но почему то подумал что это относится конкретно к этому запросу, а не ответу. Но не подумал что ведь именно читающий должен хотеть наложить маску на слова которые читаются. Немедленно ставлю выпекать новую прошу!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, 1891ВМ12Я сказал:

Ох, там еще пишут "The valid bytes in the first and last Dwords of the data block to be read must be indicated using first_be[3:0] and last_be[3:0], respectively". Там выше я писал что это тоже подозреваю но почему то подумал что это относится конкретно к этому запросу, а не ответу. Но не подумал что ведь именно читающий должен хотеть наложить маску на слова которые читаются. Немедленно ставлю выпекать новую прошу!

Да, нужно аккуратно формировать эти BE, т.к. некоторые их сочетания дают совершенно неожиданные результаты. 🤦‍♂️

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, makc said:

Да, нужно аккуратно формировать эти BE, т.к. некоторые их сочетания дают совершенно неожиданные результаты. 🤦‍♂️

Я просто считал что это относится к данному конкретному TLP, а раз у меня запрос на чтение, без данных, то нет последующих слов, а значит не следует говорить что у запроса без данных есть какие то данные. Во всех других местах у меня эти first last byte enable корректные. И не вспомнил я балбес про картинку, не подумал что ядру надо как то понимать как заполнить эти поля, откуда то брать это...

tlp-read-small.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, 1891ВМ12Я сказал:

Немедленно ставлю выпекать новую прошу!

Испеклась? Заработало?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, makc said:

Испеклась? Заработало?

Только что проверил! Да, действительно заработало через PCI-E Switch! Данная проблема ушла. Благодарю всех за помощь и советы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...