Bios71 0 11 апреля, 2014 Опубликовано 11 апреля, 2014 · Жалоба проблемма в чем , есть тазик устройств некоторые(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 и пр.) или это от "ленивости" писателей биоса :crying: на Win7/32 4G RAM, из них выделяем 2G на PCI MMIO и остается менее 2G на ось с приложениями мы теряем в дырах выделенной памяти до 200Мб (где 112Мб, где по 30Мб/12Мб и т.д) виндоза начинает свопить и производительность падает ниже плинтуса PS:на Win7/64 все нормально там 16Gb RAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 7 22 апреля, 2014 Опубликовано 22 апреля, 2014 · Жалоба почему бы не дать 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 и пр.) или это от "ленивости" писателей биоса :crying: В спецификации PCI указано, что PCI устройство сигнализирует о востребовании себе величины адресного пространства путём "зануления" ("hardwiring to 0") неиспользуемых бит в регистре базового адреса. БИОС (или ОС) в процессе энумерации записывает в базовый адрес 0xFFFFFFFF и затем считывает обратно какое-то число. К примеру, если считано 0xF8000000, то устройство требует себе 128 Мбайт. Если система выделит физический адрес не 0x78000000, а 0x78100000 - то его просто нельзя будет записать в регистр базового адреса, так как младшие 27 бит аппаратно занулены и не хранятся в регистре устройства. Всё равно будет записано 0x78000000. Это сделано для упрощения декодирования адреса при обращении к устройству по шине PCI. При такой схеме работы достаточно сравнить на равенство старшую часть адреса, чтобы определить, что устройство адресовано. В этом случае младшая часть является смещением (offset) внутри пространства регистров устройства. Это решается просто наложением логической маски по AND. Если позволить записывать произвольный адрес (как Вы предлагаете), то для определения адресации внутри устройства нужно будет производить вычитание адресов в каждом цикле, и хранить целиком все 32 бита базового адреса, что довольно накладно с точки зрения реализации аппаратной логики PCI устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bios71 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 (изменено) · Жалоба Если система выделит физический адрес не 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. Изменено 28 апреля, 2014 пользователем Bios71 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться