Something strange :
I can't change my TIMER_LATENCY !! I have added the few lines following
:
pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
printk("PCI:latency timer of device %x equal to
%d\n",dev->device,lat);
if (lat < 16) {
pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
printk("PCI: Increasing latency timer of device %x set to %d\n",
dev->device,lat);
}
and the result are not very good :
Aug 22 19:24:34 Xport kernel: Starting Real Time Piraq II module
Aug 22 19:24:34 Xport kernel: PCI:latency timer of device 5920 equal to
0
Aug 22 19:24:34 Xport kernel: PCI: Increasing latency timer of device
5920 set to 0
Aug 22 19:24:34 Xport kernel: @DPRAM = 0xc8c64000 d7080000
Aug 22 19:24:34 Xport kernel: @TIMER = 0xc8c85000 d70a0000
Aug 22 19:24:34 Xport kernel: @STATUS = 0xc8c87000 d70a1000
Aug 22 19:24:34 Xport kernel: @LOOKUP = 0xc8c89000 d7000000
Aug 22 19:24:34 Xport kernel: Piraq II board found at 0xec01 interrupt
0xa
Concerning the readl and readb, I have tested all the possibilities :
read/wrire u8 :
unsigned char read_mem (u32 * Base)
{
Mem_RW def;
u8 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_read received\n");
#endif
ptr = (u8*)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
mem = (u8*)(Base+def.offset);
for(i=0;i<def.size*sizeof(u32);i++)
*ptr++ = readb(mem++);
return(SUCCESS);
}
unsigned char write_mem (u32 * Base)
{
Mem_RW def;
u8 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_write received\n");
#endif
ptr = (u8 *)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
ptr+=sizeof(Mem_RW);
mem = (u8 *)(Base+def.offset);
for(i=0;i<def.size*sizeof(u32);i++)
writeb(*ptr++,mem++);
return(SUCCESS);
}
or with writew/readw
unsigned char read_mem (u32 * Base)
{
Mem_RW def;
u16 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_read received\n");
#endif
ptr = (u16*)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
mem = (u16 *)(Base+def.offset);
for(i=0;i<def.size*sizeof(u16);i++)
*ptr++ = readw(mem++);
return(SUCCESS);
}
unsigned char write_mem (u32 * Base)
{
Mem_RW def;
u16 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_write received\n");
#endif
ptr = (u16 *)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
ptr+=sizeof(Mem_RW);
mem = (u16 *)(Base+def.offset);
for(i=0;i<def.size*sizeof(u16);i++)
writew(*ptr++,mem++);
return(SUCCESS);
}
readl/writel
unsigned char read_mem (u32 * Base)
{
Mem_RW def;
u32 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_read received\n");
#endif
ptr = (u32*)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
mem = (u32 *)(Base+def.offset);
for(i=0;i<def.size;i++)
*ptr++ = readl(mem++);
return(SUCCESS);
}
unsigned char write_mem (u32 * Base)
{
Mem_RW def;
u32 *ptr,*mem;
int i;
#ifdef DEBUG
printk("Cmd Mem_write received\n");
#endif
ptr = (u32 *)shm;
memcpy (&def,(Mem_RW *)ptr,sizeof(Mem_RW));
ptr+=sizeof(Mem_RW);
mem = (u32*)(Base+def.offset);
for(i=0;i<def.size;i++)
writew(*ptr++,mem++);
return(SUCCESS);
}
I think all this read_mem functions or write_mem functions should
provide the
same result if I try to fill memory with u32.
Unfortunatly only the one using writel and readl give me good result on
DPRAM.
Could it be a problem of timer latency due to a faster readb than a
readl ????
tahnks
Fred
begin:vcard
n:Cazenave;Frederic
tel;fax:514 398 77 55
tel;work:514 398 77 33
x-mozilla-html:FALSE
org:IRD MRWO
version:2.1
email;internet:[EMAIL PROTECTED]
adr;quoted-printable:;;JS Marshall Observatory=0D=0AMac Donald College=0D=0ABox 198;Sainte Anne de Bellevue;Quebec;H9X 3V9;Canada
x-mozilla-cpt:;0
fn:FredericCazenave
end:vcard