LINUX.ORG.RU

Вопрос по драйверу для PCI устройства


0

0

Есть плата с DSP процессором от SpectrumDigital. У платы есть PCI
интерфейс. Вместе с платой шёл пример работы с PCI сделанный с помощью
Jungo, в примере можно почитать/пописать память устройства и.т.д. 
Теперь мне бы хотелось написать драйвер для этой платы под Linux, 
который для начала мог бы моргать светодиодами на самой плате. Я 
написал простой дарйвер, который находит эту плату, определяет её 
ресурсы (там два MMIO) и делает ioremap. Теперь я хотел бы через 
writeb записать в регистр определящий состояние светодиодов своё 
значение. 

В примере идущим с платой есть файл dm642_lib.h
в нём есть следующие определения.

#define kBaseAddr_CE0    (0x80000000u)
#define kBaseAddr_CE1    (0x90000000u)
#define kBaseAddr_CE2    (0xA0000000u)
#define kBaseAddr_CE3    (0xB0000000u)

#define kFpgaAmrOffs           (0x00080010)
#define kFpgaAmrBaseAddress    (kBaseAddr_CE1 + kFpgaAmrOffs)

enum
{
    kFamrOffs_OSDCR = kFpgaAmrOffs,  // OSD Control Reg       => 0x9008_0010
    kFamrOffs_DMATLR,                // DMA Threshold LSB Reg => 0x9008_0011
    kFamrOffs_DMATMR,                // DMA Threshold MSB Reg => 0x9008_0012
    kFamrOffs_ISR,                   // Interrupt Status Reg
    kFamrOffs_IER,                   // Interrupt Enable Reg
    kFamrOffs_GPIODR,                // GPIO Direction Reg
    kFamrOffs_GPIOSR,                // GPIO Status Reg
    kFamrOffs_LEDR,                  // LED Reg
    kFamrOffs_FPR,                   // Flash Page Reg        => 0x9008_0018

    kFamrOffs_RESERVED,              // Reserved (19 - 1E)

    kFamrOffs_FVR = kFpgaAmrOffs + 0xF  // FPGA Version Reg   => 0x9008_001F
};


И когда из программы-примера (того что в комплекте) пишу по адресу 
0x90080017 своё значение, то светодиоды меняют своё состояние. 
Соотвественно у меня такой вопрос как мне имея на руках адрес 
полученный через ioremap(mmio_start, mmio_len) записать по адресу 
0x90080017 своё значение в драйвере под Linux?

> как мне имея на руках адрес 
> полученный через ioremap(mmio_start, mmio_len) записать по адресу 
> 0x90080017 своё значение в драйвере под Linux?

Попробуй так:
К адресу, полученному через ioremap прибавляешь смещение 0x00080010
(странное оно какое-то) а потом смещение регистра определящий состояние
светодиодов - я так пологаю = 0x07. 

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

mmio_len для первого ресурса имеет размер в 4 мегабайта, для второго 8 мегабайт. Я так пробовал, к сожалению ничего не получается. Даже прочитать содержимое FPGA Version Register (которое по адресу 9008001F не получается). Засада.

sigill
() автор топика
Ответ на: комментарий от senjy

На самом деле я просто тупил. Внимательно почитав документацию на плату, я понял что KbaseAddr_CE0,CE_1 это вообще внутрення память платы, никак не связанная с PCI контроллером :) Спасибо за помощь!

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