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

Гранулярность выделенных PCI ресурсрв MMIO

проблемма в чем , есть тазик устройств некоторые(10-20шт) "резервируют" по 64Мб

но самая злая видеокарта 128Мб и потому у нее объявляется гранулярность 0x7FF FFFF

 

вот в процессе выделения ресурсов видео карте мы даем ей диапазон (с оглядкой на гранулярность 0x7FF FFFF)

0х7800 0000 - 0x8000 0000

или

0х8000 0000 - 0x8800 0000

0х8800 0000 - 0x9000 0000

0х9000 0000 - 0x9800 0000

0х9800 0000 - 0xА000 0000

 

да, но принципиальная гранулярность то 1 Мбайт !!

почему бы не дать

0х7810 0000 - 0x8010 0000

или

0х8020 0000 - 0x8820 0000

0х8830 0000 - 0x9030 0000

0х90А0 0000 - 0x98А0 0000

0х98F0 0000 - 0xА0F0 0000

 

есть ли ограничения "принципиального" характера в спецификации PCI, P2P мостов (или при написании драйверов/OpROM и пр.)

или это от "ленивости" писателей биоса :biggrin: :crying:

 

на Win7/32 4G RAM, из них выделяем 2G на PCI MMIO и остается менее 2G на ось с приложениями

мы теряем в дырах выделенной памяти до 200Мб (где 112Мб, где по 30Мб/12Мб и т.д)

виндоза начинает свопить и производительность падает ниже плинтуса

PS:на Win7/64 все нормально там 16Gb RAM

 

post-35249-1397198051_thumb.png

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


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

почему бы не дать

0х7810 0000 - 0x8010 0000

или

0х8020 0000 - 0x8820 0000

0х8830 0000 - 0x9030 0000

0х90А0 0000 - 0x98А0 0000

0х98F0 0000 - 0xА0F0 0000

 

есть ли ограничения "принципиального" характера в спецификации PCI, P2P мостов (или при написании драйверов/OpROM и пр.)

или это от "ленивости" писателей биоса :biggrin: :crying:

В спецификации PCI указано, что PCI устройство сигнализирует о востребовании себе величины адресного пространства путём "зануления" ("hardwiring to 0") неиспользуемых бит в регистре базового адреса. БИОС (или ОС) в процессе энумерации записывает в базовый адрес 0xFFFFFFFF и затем считывает обратно какое-то число. К примеру, если считано 0xF8000000, то устройство требует себе 128 Мбайт. Если система выделит физический адрес не 0x78000000, а 0x78100000 - то его просто нельзя будет записать в регистр базового адреса, так как младшие 27 бит аппаратно занулены и не хранятся в регистре устройства. Всё равно будет записано 0x78000000.

Это сделано для упрощения декодирования адреса при обращении к устройству по шине PCI. При такой схеме работы достаточно сравнить на равенство старшую часть адреса, чтобы определить, что устройство адресовано. В этом случае младшая часть является смещением (offset) внутри пространства регистров устройства. Это решается просто наложением логической маски по AND.

Если позволить записывать произвольный адрес (как Вы предлагаете), то для определения адресации внутри устройства нужно будет производить вычитание адресов в каждом цикле, и хранить целиком все 32 бита базового адреса, что довольно накладно с точки зрения реализации аппаратной логики PCI устройства.

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


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

Если система выделит физический адрес не 0x78000000, а 0x78100000 - то его просто нельзя будет записать в регистр базового адреса, так как младшие 27 бит аппаратно занулены и не хранятся в регистре устройства. Всё равно будет записано 0x78000000.

 

спасибо за развернутый ответ,

 

собственно, я нашел ответ "методом научного тыка"(С) сам, но не мог найти "каноничного" обьяснения увиденному,

пишем 0x78100000, читаем обратно 0x78000000 т.е. не просто гранулярность, а и игнорирование "битов составляющих ту самую гранулярность"

 

вопрос исчерпан, данке

 

PS: PCI Express System Architecture

Chapter 22: PCI Compatible Configuration Registers

page 799

The binary-weighted value of the least-significant bit set to one in the Base Address field indicates the required amount of space. This is also the first read/writable bit in the register and all of the bits above it are by definition read/writable.

 

Изменено пользователем Bios71

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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