LINUX.ORG.RU

PLX9656 PCI Bus mastering


0

0

Железяка работает в режиме BUS Mastering на PCI шине под управлением драйвера. Данные передаются без ошибок. После этого выгружаю драйвер и загружаю вновь. Загрузка и захват ресурсов происходит без ошибок, но BUS Mastering не стартует. Настройка регистров контроллера PCI, и устройства одинакова в обоих случаях. Спин блокировки не используются. Память выделяется pci_alloc_consistent(), освобождается pci_free_consistent(). Пользовательское приложение делает mmap() для этой памяти. В качестве контроллера PCI используется PLX9656. Почему так происходит не могу понять. Если кто сталкивался с подобным плиз помогите советом...


Ну если startup sequence одинаковый но после ресета работает а после остановки драйвера нет то наверное стоп не пашет правильно.

Хотя может быть и сама железка. VHDL щики они тоже бажисты. Да и чипина аккурат как год с производства снята. Это жжж не спроста

zZzZ
()
Ответ на: комментарий от zZzZ

Я забыл добавить, если загрузить драйвер, а потом сразу выгрузить, не запуская DMA, опосле чего опять загрузить драйвер, то DMA не стартует ни в какую. Я даже не могу сформулировать правильно вопрос, из-за того что не знаю где, тут может быть глюк. Драйвер регистрируется в системе так:
      static struct pci_driver 	pci_drv;

	pci_drv.name = DRV_NAME;
	pci_drv.id_table = NULL;
	pci_drv.probe = adp_probe;
	pci_drv.remove = adp_remove;
	pci_drv.save_state = adp_save_state;
	pci_drv.suspend = adp_suspend;
	pci_drv.resume = adp_resume;  
	pci_drv.enable_wake = adp_enable_wake;

	err = pci_register_driver( &pci_drv );
	if(err < 0) {
		return err;
	}

	major = register_chrdev( 0, DRV_NAME, &fops );

	if( major < 0 )	{
	    return major;
	}
}
Может быть есть какие-то особенности работы с struct pci_driver? Если кто сталкивался подскажите. Спасибо.

karak
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.