|
|
  |
Sata HBA |
|
|
|
Aug 16 2013, 10:26
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727

|
Добрый день.
Написал Sata2 контроллер для virtex5vfx. Поддерживает DMA, PIO -- как в спецификации написано, реализованы ata-шные теневые регистры. Предполагается работа в режие legacy. Прикрутил к нему интерфейс pci express gen1. Для этого использую PCI express end point block plus. Пока задача минимум, чтобы его увидел bios и увидел сам диск. Работа в режиме PIO пока. Выделил 4 IO BAR'а по 128 байт (на ATA command и DISK control интерфейсы). Пробовал прописать Class Code = 0x010185 и 0x010601. В BIOS ничего нового не появляется. Загружаю винду (XP SP3), в диспетчере устройств моя плата определяется как "Стандартный двухканальный контроллер IDE", но ресурсы IO ей не выделяются (пишет, что не хватает ресурсов). Посмотрел как у других контроллеров BAR'ы реализованы с помощью проги PCITree. Там такая схема: BAR0,BAR2 -- IO 8 bytes, BAR1,BAR3 -- IO 4 bytes, BAR4,BAR5 -- IO 16 bytes. Корка от Xilinx не позволяет выделить меньше 128 байт на IO BAR. Интересует несколько вопросов:
1) Могут ли быть проблемы именно из-за того что у меня BAR'ы по 128 байт? Если да, то как сделать их правильными по 4,8,16? 2) Какие еще танцы нужны, чтобы диск увиделся операционкой?
|
|
|
|
|
Aug 17 2013, 17:00
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727

|
Попробовал указать нужные значения BAR'ов вручную в исходниках pcie корки. В XP драйвер устанавливается, но ресурсы опять же не выделяются (пишет, что не хватает ресурсов). В PCI Tree почему-то все BAR'ы моей платы теперь имеют размер 8 байт, хотя я указывал разные значения (4, 8, 16 байт). То есть установить меньше 128 байт на IO BAR можно в обход гуя, но вот как оно работать будет...и будет ли?
Направьте пожалуйста на путь истинный.
|
|
|
|
|
Aug 21 2013, 06:53
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727

|
Сейчас ситуация следующая. Установил ClassCode = 0x010105 (то есть в IDE контроллер с двумя каналами в native PCI mode). BIOS контроллер находит, и ставит ему прерывание 14 или 15, но никаких обращений в BAR'ы не делает, в BIOS Setup попрежнему без изменений. В window смотрю в PCITree, что IO выделено для всех BAR'ов, но при загрузке никаках обращений к BAR'ам также не происходит. В диспетчере устройств попрежнему ошибка( устройство не использует ресурсов так как, наверное, в его работе присутсвуют ошибки) В Linux ситуация немного иная. При загрузке во все 4 BAR'a есть обращения. Для первого канала в регистр device control пишется значение 0x0A, затем из регистра status командного блока АТА читается статуст (чипскоп показывает 0x50 что говорит, что устройство готово к использованию). Для второго канала выполняются теже действия. Посмотрел в логах. Ошибок нет, устройству назначен драйвер ata_piix. На этом все. Сам диск не определяется.
|
|
|
|
|
Aug 26 2013, 17:18
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727

|
Продолжаю свой рассказ. Нашел кучу багов в своей sata корке, естественно, то что не тестировал ранее из-за большой сложности и повылезло. Сечас в linux нормально определяется диск, могу с помощью dd прочитать любое количество секторов, начиная с любого. Судя по логам, диск конфигурируется в PIO4 mode. Пробую читать 8 мегабайт блоками по 1КБ, скорость еле дотягивала до 1 МБ/с. Попробовал записать на диск и все повисло, этого я и ждал, так как это дело еще не отлажено. С этим я разберусь В винде ситуация прежняя -- ресурсы выделены, но в BAR'ы никто не пишет, соответственно диск не определяется, мой контроллер в диспетчере висит со значком конфликта. BIOS также нефига не видит его. Все-таки склоняюсь к тому, что это из-за BAR'ов по 128 байт..., BIOS и винда проверяют размер при выделении ресурсов (наверное). У кого какие соображения по этому поводу?
Сообщение отредактировал Mar_K - Aug 26 2013, 17:21
|
|
|
|
|
Oct 24 2013, 08:36
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727

|
Вобщем, как выяснил, проблема не в размерах BAR. Для того, чтобы BIOS увидил контроллер и произвел загрузку с него нужно написать драйвер и положить его в XROM. А операционки дальше грузят свои драйвера.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|