Котроллер SATA в режиме эмуляции IDE.

На ПЛИС Virtex5 реализовал Serial ATA Host Bus Adapter (HBA) с интерфейсом PCI Express. Работает в режиме эмуляции IDE. Тестировал на материнке (Intel MB950F). Пробовал под Linux (Ubuntu 10.04), Windows XP SP3. В конфигурационном пространстве моей платы прописана следующая инфа:
1) VendorID/DeviceID = 8086/3B26h (подсмотрел по аналогии на встроенных контроллерах).
2) ClassCode = 010105h. Интерфейс 05h потому что пока только в PIO режиме тестирую.
3) BAR0/BAR2 -- ATA Command/Control блоки. Размеры регистров прописаны по 128 байт (аппаратное ядро PCI Express в virtex5 не позволяет поставить меньший размер IO, только больше).
4) BAR1/BAR3/BAR4 пока 0h (не используются).

Проблема в том, что под Linux контроллер работает как надо с помощью стандартных драйверов, а под Windows нет, загрузка с диска тоже невозможна.

Начну с BIOS(AMI BIOS 8). На этапе загрузки выводится список HDD. Подключенного через мою плату HDD в этом списке нет. В Setup Utility также диск отсутствует во всех соответствующих вкладках. Загрузка продолжается. На экране появляется табличка с номерами прерываний. Вижу там свой контроллер с номером прерывания (пишет: PCIe to IDE bridge). Далее boot menu загрузчика grub, который установлен на другом диске. Если в системе оставить только 1 hdd, который подключен через мой контроллер, то BIOS говорит, что нет системного диска. Смотрю, что происходит на интерфейсе PCI Express внутри ПЛИС с помощью отладчика chipscope во время загрузки BIOS. Меня интересуют только транзакции уровня TLP. Таковых не наблюдается вообще в процессе загрузки BIOS. Вероятно, и скорее всего, что конфигурационные запросы приходят, так как прерывание моей плате все же назначается. Далее BIOS-у что-то не нравится в конфиге и он не работает с мои контроллером (вопрос что именно?). Есть предположение, что BIOS для класса устройства 0101h проверяет размеры BAR'ов. Ведь другие контроллеры на плате имеют размеры по 8/4 байта на BAR для соответственно Command и Control блоков ATA.

Теперь о Windows. Система обнаруживает новое устройство и ставит ему стандартный драйвер драйвер (Стандартный двухканальный контроллер PCI IDE), и отмечает его восклицательным знаком. На вкладке "Ресурсы" не отображаются занимаемые диапазоны IO/MEM. Только присутствует надпись: "устройство не использует ресурсов, возможно, в его работе присутствуют ошибки". Далее просматриваю конфигурационное пространство своего контроллера прог-ой PCI Tree. К моему удивлению, диапазоны IO для BAR'ов все-таки выделены и адреса прописаны в BAR'ы (сс00h-сс7Fh, 8800h-887Fh). Смотрю, что происходит на интерфейсе PCI Express внутри ПЛИС с помощью отладчика chipscope во время загрузки Windows. Меня интересуют только транзакции уровня TLP. Таковых не наблюдается вообще в процессе загрузки Windows. Вероятно, и скорее всего, что конфигурационные запросы приходят, так как прерывание моей плате все же назначается и IO ресурсы также выделяются (хотя в диспетчере устройств они не отображаются).

Из всех этих экспериментов прихожу к выводу, что драйвера HDD контроллеров в BIOS и Windows проверяют размер BAR'ов для устройств класса 0101h, а при несовпадении с ожидаемыми просто прекращают работать с таким устройством.

Проверял на другой материнке с BIOS от AWARD -- все также.

Какие есть соображения по этому поводу?

Аватар пользователя savely

А попробуйте драйвер Альтера с интересом
alter.org.ua/soft/win/uni_ata/

Если не заработает - дебаговую версию поюзать и посмотреть, что ему не нравится.

Цитата:
На вкладке "Ресурсы" не отображаются занимаемые диапазоны IO/MEM. Только присутствует надпись: "устройство не использует ресурсов, возможно, в его работе присутствуют ошибки".

Пока нет нормально стартовавшего драйвера железки - винда в той закладке не покажет ресурсы.

А кому счас легко...

MarK писал(-а):
Intel MB950F
Не Intel, а iBASE:).

BIOS не будет выводить информацию о подключенных к вашему устройству HDD. Реализовывать загрузку с этих HDD BIOS будет только если вы создадите соответствующий программный модуль, а в BIOS сможете выбрать опцию аля "Загрузка с прочих устройств".

Аватар пользователя savely

Не, я так понимаю - родной контроллер задизейблен и MarK c интеловскими VID/DID надеется, что BIOS его поделку примет за чипсетный контроллер. Но тут столько засад, что я даже не знаю...

А так - да. Кошерный путь (для загрузки) известен - написать Addon BIOS.

P.S. Начиная от того, что родной контроллер - это не "мост PCIe-IDE", насколько я помню.
Дизайн откуда взялся? До какого момента это Xilinx-овский дизайн?

P.P.S. Но сразу скажу - я не FPGA-шник. Так, краем глаза.

А кому счас легко...

to maco. Где почитать подробнее?
to savely.


1) Какие засады могут быть? Я же реализовал стандартный интерфейс дискового контроллера. Я бы с вами согласился, если бы хост хоть что-то писал в регистры моего контроллера, но он ничего не пишет. Из описанного мною в первом посте становится ясно, что проблема начинается раньше, чем драйвер вообще начинает что-либо вычитывать из моего контроллера. Почему в линуксе устройство работает с такими же VID/DID без проприетарного драйвера?
В винде на эти контроллеры и на все остальные загружены стандартные драйвера и ничего, работают же.
2) UniATA пробовал. Винда уходит на на ребут при загрузке...Пробовал давно, но не на дебаговой. Вернусь к эксперименту.

Дизайн чего? Если всего контроллера, то все кроме аппаратной корки pcie самописное + gtx.

PS: А у меня и не мост PCI-IDE. С чего вы это взяли?

savely писал(-а):
родной контроллер задизейблен и MarK c интеловскими VID/DID надеется, что BIOS его поделку примет за чипсетный контроллер
Значения VID/DID я видел:). Но вот надежду уж очень не разделяю - отключение автор мог сделать только путем выбора соответствующих опций в BIOS (судя по скудному описанию), а при этом я сильно сомневаюсь, что BIOS полезет к отключенному контроллеру за данными:). При этом я вообще сомневаюсь, что автор вообще что-то отключал из штатных контроллеров:D. Т.е. одно сомнение на другом.
Попутно - может/должен ли любой компонент чипсета (в данном случае Intel Q57) транслировать запросы к "штатно внутреннему устройству" на внешнюю шину (в данном случае PCI-E)? Документацию читать пока лень:).


MarK писал(-а):
Где почитать подробнее?
О чем именно?
Об использовании BIOS'ом внешних контроллеров? Тогда поглядите в сторону матплат с интегрированными PATA/SATA контроллерами - дизассемблируйте BIOS (или просто покопайтесь каким-нибудь редактором) и сравните с BIOS'ом той матплаты, которую вы используете.
О возможности загрузки с помощью внешних контроллеров? Дык savely уже упоминял Addon BIOS.

MarK писал(-а):
А у меня и не мост PCI-IDE. С чего вы это взяли?
1. PCI-E, а не PCI
2. Вы сами упоминали:
MarK писал(-а):
пишет: PCIe to IDE bridge

Цитата:
Значения VID/DID я видел:). Но вот надежду уж очень не разделяю - отключение автор мог сделать только путем выбора соответствующих опций в BIOS (судя по скудному описанию), а при этом я сильно сомневаюсь, что BIOS полезет к отключенному за данными:). При этом я вообще сомневаюсь, что автор вообще что-то отключал из штатных контроллеров:D. Т.е. одно сомнение на другом.
Попутно - может/должен ли любой компонент чипсета (в данном случае Intel Q57) транслировать запросы к "штатно внутреннему устройству" на внешнюю шину (в данном случае PCI-E)? Документацию читать пока лень:).

Вы, верно, под отключением(я так и не понял чего) имеете ввиду отключение жесткого диска? Так это делается простым выниманием sata кабеля и кабеля питания, а больше я ничего не отключал:) Откуда такая информация, что родной контроллер задизейблин?

Цитата:
О чем именно?
Об использовании BIOS'ом внешних контроллеров? Тогда поглядите в сторону матплат с интегрированными PATA/SATA контроллерами - дизассемблируйте BIOS (или просто покопайтесь каким-нибудь редактором) и сравните с BIOS'ом той матплаты, которую вы используете.
О возможности загрузки с помощью внешних контроллеров? Дык savely уже упоминял Addon BIOS.

А для того чтобы узнать как устроен SATA HBA Вы, наверное, посоветуете сканировать рентгеном какой-нибудь конкретный чип?:)
Не понимаю, на чем основано ваше утверждение, что написание addon rom единственный верный путь. Пруфлинк в студию!
И еще один разгромный комент:) Чтобы ваш addon rom (в стандарте PCI он называется Expansion ROM) вообще заработал, нужно, чтобы хост начал читать выделенную под BAR6 область памяти, чего не происходит вообще-то (описывал в первом посте) при загрузки Win, BIOS.

Цитата:

1. PCI-E, а не PCI
2. Вы сами упоминали:
MarK писал(-а):
пишет: PCIe to IDE bridge

1) Я везде писал PCIe. Извиняюсь, наверное, правильно будет PCI-E сокращать.
2) Это сообщение BIOS, а не я писал:)

Предлагаю пока не упираться именно в загрузку с hdd, подключенного к моему контроллеру. Невозможность загрузки тут является лишь следствием того, что BIOS и WIN вообще не обращаются к регистрам контроллера (кроме конфигурационного пространства), под которые выделены ресурсы IO в BAR'ах. Под Linux'ом ведь все работает с теми же VID/DID, и никакой контроллер с такими же VID/DID не мешает (у них же адреса на шине разные). Все решают первые 2 байта ClassCode (0101h).

MarK писал(-а):
под отключением(я так и не понял чего) имеете ввиду отключение жесткого диска?
Нет, отключение штатного SATA контроллера, которому соответствуют указанные вами VID/DID.

MarK писал(-а):
Откуда такая информация, что родной контроллер задизейблин?
Это было не более, чем одно из предположений.

MarK писал(-а):
Вы, наверное, посоветуете сканировать рентгеном какой-нибудь конкретный чип?
Могу и такое посоветовать - мне не жалко:). Вопрос только в доступности инструментов и качества получаемой информации. Если вы еще раз внимательно почитаете то, что процитировали, то в скобках указана возможность исследования BIOS более простым инструментом.

MarK писал(-а):
Не понимаю, на чем основано ваше утверждение, что написание addon rom единственный верный путь.
Для начала желательно понимать, для чего вам может понадобиться Addon ROM:). Это не панацея от всех проблем:D. В вашем случае - всего лишь возможность начальной инициализации и возможно последующей загрузки ОС с носителей, которые подключены к вашему устройству.
Если вам не нравится этот путь, никто не запрещает вам верить в то, что любой BIOS сможет выполнить определенный набор действий для осуществления загрузки ОС с помощью вашего контроллера.

MarK писал(-а):
Чтобы ваш addon rom (в стандарте PCI он называется Expansion ROM) вообще заработал, нужно, чтобы хост начал читать выделенную под BAR6 область памяти
Зависит от того, где расположен этот Addon ROM. Если на физическом устройстве, то да - было бы неплохо сначала произвести обращение к XROMBAR. Но никто не мешает интегрировать Addon ROM в основной образ BIOS в целях отладки, например. В этом случае наличие устройства не обязательно:).
--> тема, связанная с Addon ROM в составе устройства.

Цитата:
Могу и такое посоветовать - мне не жалко:). Вопрос только в доступности инструментов и качества получаемой информации. Если вы еще раз внимательно почитаете то, что процитировали, то в скобках указана возможность исследования BIOS более простым инструментом.

Прочитал еще раз. Неверно воспринял предложение " (или просто покопайтесь каким-нибудь редактором) ". Подумал, почему-то о текстовом редакторе, выходные, однако:)

Цитата:
Для начала желательно понимать, для чего вам может понадобиться Addon ROM:). Это не панацея от всех проблем:D. В вашем случае - всего лишь возможность начальной инициализации и возможно последующей загрузки ОС с носителей, которые подключены к вашему устройству.
Если вам не нравится этот путь, никто не запрещает вам верить в то, что любой BIOS сможет выпонить определенный набор действий для осуществления загрузки ОС с помощью вашего контроллера.

Давайте все-таки различать. Мое устройство это не контроллер hdd (тот например, что в самих hdd) это адаптер интерфейса, написанный по стандарту knowledgetek.com/graphicsNew/SerialATA_Revision_3_1_Gold-KT.pdf .

Цитата:
4.1.1.62 HBA (Host Bus Adapter) HBA is a component that connects to the host system’s expansion bus to provide connectivity for devices. HBAs are also often referred to as controller cards or merely controllers.

Это устройство не выполняет команды ATA, и ничего о них не знает. Оно просто содержит теневые регистры - копии регистров реального дискового контроллера (того который в sata-hdd живет) и предоставляет доступ к ним хосту и передает их устройству. Этот адаптер поддерживает legacy набор регистров (движок ACHI работает вообще отдельно, как написано в спеке на ACHI, да я его и не делал). Про эту тему хорошо написано в SATA Storage Technology от Mindshare. Надеюсь, теперь вы точно представляете, что именно за устройство я делаю?

Не пойму только зачем нужно городить свой addon rom чтобы выполнить стандартный набор действий со стандартным устройством, которое имеет стандартный интерфейс? Видимо, я чего-то не понимаю...

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей