Изменение размера P CIe BAR - PullRequest
       110

Изменение размера P CIe BAR

1 голос
/ 06 августа 2020

Может кто-нибудь сказать мне, как увеличить размер бара (например, с помощью setpci или каким-либо другим способом)?

Я могу читать регистр BAR, а также могу определять его размер. Но что, если я хочу увеличить или уменьшить размер BAR? Например: BAR 4 имеет предварительную выборку, а размер - «1M». Что, если я хочу расширить его до 16 МБ?

Я могу успешно работать с драйвером, но что, если я хочу сделать это без помощи драйвера (например, с помощью setpci, поскольку мы можем редактировать значения регистров BAR) .

Изменить: дал неправильный пример (изменить на 16M)

Ответы [ 2 ]

2 голосов
/ 08 августа 2020

Адресное пространство для устройства PCI назначается очень рано при загрузке (на ПК это обычно делается в B IOS еще до загрузки ОС). Есть некоторые устройства, которые позволяют изменять размер BAR, но способ сделать это будет очень специфичным для устройства. Скорее всего, вам нужно будет сделать что-то физически с устройством (установить перемычку) или записать в какое-либо энергонезависимое хранилище (NVRAM или что-то еще) на устройстве, потому что эта настройка должна будет пережить сброс или цикл питания.

Если ваше устройство действительно поддерживает изменение размера полосы, в таблице данных должно быть объяснено, как его настроить. Как сказано в @ prl , для большинства устройств его нельзя изменить.

Со стороны хоста существует протокол, используемый комплексом PCI root во время перечисления устройств для обнаружения сколько места «требуется» устройству, а затем сообщить устройству, какой диапазон адресов ему был назначен (и, следовательно, должен отвечать). Но, как упоминалось выше, обычно это делается очень рано при загрузке, потому что для этого требуется координация: вам достаточно просто записать в регистры конфигурации устройства, чтобы сообщить ему, что у него больше адресного пространства, но контроллер памяти и root сложный должны быть знайте и это, иначе фактические ссылки на память никогда не дойдут до устройства (и система, скорее всего, тоже будет работать со сбоями). И вы не можете просто добровольно расширить это адресное окно, потому что, вероятно, есть какое-то другое устройство, которому уже была назначена память чуть выше и ниже вашего устройства.

0 голосов
/ 06 августа 2020

Для большинства устройств размер BAR является физическим свойством устройства и не может быть изменен.

Устройство реализует фиксированный объем MMIO или памяти, поэтому в нем нет смысла делая БАР больше, чем это.

...