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

Reply via email to