BSACPLD 9 13 июля, 2019 Опубликовано 13 июля, 2019 · Жалоба Поставил дополнительные printk. Функция ocidec_init вызывается, а вот до pata_ocidec_probe не доходит. Подключение в dts: pata_ocidec@ff204000 { compatible = "pata_ocidec"; reg = <0xff204000 0x100>; }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 15 июля, 2019 Опубликовано 15 июля, 2019 · Жалоба С probe разобрался. Нужно было добавить в код драйвера имя для дерева устройств. static const struct of_device_id ocidec_pata_dt_ids[] = { { .compatible = "pata_ocidec", }, { /* sentinel */ } }; static struct platform_driver pata_ocidec_driver = { .probe = pata_ocidec_probe, .remove = pata_ocidec_remove, .driver = { .name = DRV_NAME, .of_match_table = ocidec_pata_dt_ids, .owner = THIS_MODULE, }, }; MODULE_DEVICE_TABLE(of, ocidec_pata_dt_ids); Обновил dts до следующего: pata_ocidec@ff204000 { compatible = "pata_ocidec"; reg = <0xff204000 0x100>; interrupts = <0x0 0x47 0x1>; }; Но при запуске драйвера получаю ошибку: root@atlas_sockit:~/project/pata_ocidec# insmod pata_ocidec.ko pata_ocidec start pata_ocidec probing pata_ocidec ff204000.pata_ocidec: no IDE IRQ resource pata_ocidec: probe of ff204000.pata_ocidec failed with error -22 Я так понимаю, что linux не может найти номер IRQ, но я вроде его прописал... pata_ocidec.c zImage-socfpga_cyclone5_de0_sockit.dts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 1 15 июля, 2019 Опубликовано 15 июля, 2019 · Жалоба Так у вас .dts принципиально неправильно написан. interrupts пишется с указанием phandle контроллера прерываний, как-то так: interrupts = <&intc 0x47> Ну и по остальному .dts куча вопросов, лень проверять все phandles. И почему не используете include .dtsi ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 15 июля, 2019 Опубликовано 15 июля, 2019 · Жалоба 32 minutes ago, gosha-z said: И почему не используете include .dtsi ? Я просто взял готовый dts шедший с отладочной платой и дописал недостающую периферию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 15 июля, 2019 Опубликовано 15 июля, 2019 · Жалоба 4 hours ago, gosha-z said: interrupts = <&intc 0x47> Странно... В этом примере первый аргумент всегда 0: https://rocketboards.org/foswiki/Documentation/HOWTOCreateADeviceTree Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 1 15 июля, 2019 Опубликовано 15 июля, 2019 · Жалоба 1 hour ago, BSACPLD said: Странно... Ничего странного. Читайте первоисточник Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба С interrupt тоже разобрался :) Нужно было указать parent для прерывания. Теперь драйвер стартует, но не может определить диск. root@atlas_sockit:~/project/pata_ocidec# insmod pata_ocidec.ko pata_ocidec start pata_ocidec probing pata_ocidec: registered at ff204000 100 irq 44 Mapped, setup port cmd_addr = 0x00000000 ctl_addr = 0xC1562078 altstatus_addr = 0xC1562078 data_addr = 0xC1562040 error_addr = 0xC1562044 feature_addr = 0xC1562044 nsect_addr = 0xC1562048 lbal_addr = 0xC156204C lbam_addr = 0xC1562050 lbah_addr = 0xC1562054 device_addr = 0xC1562058 status_addr = 0xC156205C command_addr = 0xC156205C pata_ocidec probe: priv=0xbeaf5350 READBACK : PATA_OCIDEC_CTRL = 0x00000092 READBACK : PATA_OCIDEC_PCTR = 0x17021C06 READBACK : PATA_OCIDEC_PCTR STS32 = 0x00000080 READBACK : PATA_OCIDEC_PCTR STS8 = 0x00000080 scsi host4: pata_ocidec ata5: PATA max PIO6 cmd 0xff204040 ctl 0xff204078 irq 44 pata_ocidec_set_mode 0xBEAF5350 0 pata_ocidec: 0x0D000D02 0x000000FE 0x0D000D02 0x0D000D02 pata_ocidec: ctrl = 0x000000FE ata5.00: failed to IDENTIFY (I/O error, err_mask=0x2) pata_ocidec_set_mode 0xBEAF5350 0 pata_ocidec: 0x61066202 0x000000FE 0x61066202 0x61066202 pata_ocidec: ctrl = 0x000000FE ata5: link is slow to respond, please be patient (ready=0) ata5: device not ready (errno=-16), forcing hardreset ata5.00: failed to IDENTIFY (I/O error, err_mask=0x2) pata_ocidec_set_mode 0xBEAF5350 0 pata_ocidec: 0x0D000D02 0x000000FE 0x0D000D02 0x0D000D02 pata_ocidec: ctrl = 0x000000FE ata5: link is slow to respond, please be patient (ready=0) ata5: device not ready (errno=-16), forcing hardreset ata5.00: failed to IDENTIFY (I/O error, err_mask=0x2) pata_ocidec_set_mode 0xBEAF5350 0 pata_ocidec: 0x61066202 0x000000FE 0x61066202 0x61066202 pata_ocidec: ctrl = 0x000000FE ata5: link is slow to respond, please be patient (ready=0) ata5: device not ready (errno=-16), forcing hardreset Хотя если выполнить команду IDENTIFY через самопальную утилиту, то она проходит. Во всяком случает серийный номер и прочая информация считывается нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба Все. Заработало :) 1. Был битый кабель. 2. В последней версии контроллера с opencores.org была ошибка. Залипал сигнал прерывания. В более старой версии с форума Intel такой проблемы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 1 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 12 minutes ago, BSACPLD said: Все. Заработало :) И каков Performance? Или задачи "выжать максимум" не стояло? Интересно было бы сравнить с HW решением, например, от ZynqMP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 53 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 43 minutes ago, gosha-z said: И каков Performance? Интересно даже просто узнать, что к нему подключать по нынешним временам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 1 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 2 minutes ago, aaarrr said: что к нему подключать по нынешним временам. SATA III диск - мало? Не знаю, как там у Интела, у цинка самые простенькие GTRы (которые насмерть к PS прибиты) 6G тянут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 53 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 2 minutes ago, gosha-z said: SATA III диск - мало? Так в теме PATA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 1 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 3 minutes ago, aaarrr said: Так в теме PATA. Совсем мне цинк глаза закрыл... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 1 hour ago, aaarrr said: Интересно даже просто узнать, что к нему подключать по нынешним временам. PC card ATA диск. Это требование заказчика. По принципу "шоб было". Т.к. такую древность еще надо постараться найти, для тестов я взял китайский переходник IDE<->SATA. Теперь по Performance. К сожалению, текущий вариант драйвера, не поддерживает DMA. Готового решения я не нашел, так что придется писать самому. В режиме PIO получилось 10МБ/с на чтение и около 4МБ/с на запись. Насчет цинка и SATA могу сказать, что это следующая задача. Просто пока отлаживал то, что мог, и на том, что есть под рукой. Честно говоря, не знаю с какой стороны взяться за эту задачу. Готового решения нет, корку вряд ли купят. Нашел корку x393, но там опять же только HDL без драйвера. https://git.elphel.com/Elphel/x393_sata Собраться то она собралась, но как её прикручивать к системе я пока не представляю... P.S. Приложил поправленный драйвер, dts и HDL. pata_ocidec.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 3 hours ago, BSACPLD said: Все. Заработало :) поздравляю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться