Subject: accessing on-card ram/rom

Hi All,

I have a PCI card which has on-card ram/rom which gets mapped
into pci address space and there is a separate base register
for this memory. Now the question is : can I access this on-card
memory by converting the pci base address into the virtual address
using bus_to_virt and adding the required offset ? Or do I need
to use ioremap function to map the physical address space starting
from the pci base address into the kernel virtual address space ?
Or is there any other interface to access the on-card memory ?
Is it that bus_to_virt can be used only for the normal RAM ?

I tried using bus_to_virt to get the virtual address and then access
it and the kernel panics.

Please copy me on your replies as I am not on the list.

Thanks and regards,
-hiren


2000-11-08 22:53:57

by Jeff Garzik

[permalink] [raw]
Subject: Re: accessing on-card ram/rom

"MEHTA,HIREN (A-SanJose,ex1)" wrote:
> I have a PCI card which has on-card ram/rom which gets mapped
> into pci address space and there is a separate base register
> for this memory. Now the question is : can I access this on-card
> memory by converting the pci base address into the virtual address
> using bus_to_virt and adding the required offset ? Or do I need
> to use ioremap function to map the physical address space starting
> from the pci base address into the kernel virtual address space ?
> Or is there any other interface to access the on-card memory ?
> Is it that bus_to_virt can be used only for the normal RAM ?

Use ioremap.

For more details, read linux/Documentation/IO-mapping.txt.

Jeff


--
Jeff Garzik | "When I do this, my computer freezes."
Building 1024 | -user
MandrakeSoft | "Don't do that."
| -level 1

Subject: RE: accessing on-card ram/rom

I looked at the IO-mapping.txt file. It says that
on x86 architecture it should not make any difference.
It also says that "on x86 it _is_ the same memory space. So
on x86 it actually works to just dereference a pointer".

Any inputs on this ?

Thanks and regards,
-hiren

> -----Original Message-----
> From: Jeff Garzik [mailto:[email protected]]
> Sent: Wednesday, November 08, 2000 2:53 PM
> To: MEHTA,HIREN (A-SanJose,ex1)
> Cc: '[email protected]'
> Subject: Re: accessing on-card ram/rom
>
>
> "MEHTA,HIREN (A-SanJose,ex1)" wrote:
> > I have a PCI card which has on-card ram/rom which gets mapped
> > into pci address space and there is a separate base register
> > for this memory. Now the question is : can I access this on-card
> > memory by converting the pci base address into the virtual address
> > using bus_to_virt and adding the required offset ? Or do I need
> > to use ioremap function to map the physical address space starting
> > from the pci base address into the kernel virtual address space ?
> > Or is there any other interface to access the on-card memory ?
> > Is it that bus_to_virt can be used only for the normal RAM ?
>
> Use ioremap.
>
> For more details, read linux/Documentation/IO-mapping.txt.
>
> Jeff
>
>
> --
> Jeff Garzik | "When I do this, my computer freezes."
> Building 1024 | -user
> MandrakeSoft | "Don't do that."
> | -level 1
>

2000-11-08 23:07:29

by Jeff Garzik

[permalink] [raw]
Subject: Re: accessing on-card ram/rom

[email protected] wrote:
> I looked at the IO-mapping.txt file. It says that
> on x86 architecture it should not make any difference.
> It also says that "on x86 it _is_ the same memory space. So
> on x86 it actually works to just dereference a pointer".

> Any inputs on this ?

Don't depend on architecture-specific guarantees like this, it could
change, etc.

Use ioremap, it's portable, it's standard, it's the way to go. ;-)

Jeff


--
Jeff Garzik | "When I do this, my computer freezes."
Building 1024 | -user
MandrakeSoft | "Don't do that."
| -level 1

2000-11-09 13:04:23

by Richard B. Johnson

[permalink] [raw]
Subject: Re: accessing on-card ram/rom


You need ioremap(), etc. Paging is enabled, you need ioremap() to
create a page-table entry (PTE).

Cheers,
Dick Johnson

Penguin : Linux version 2.4.0 on an i686 machine (799.54 BogoMips).

"Memory is like gasoline. You use it up when you are running. Of
course you get it all back when you reboot..."; Actual explanation
obtained from the Micro$oft help desk.


2000-11-09 20:27:33

by Gérard Roudier

[permalink] [raw]
Subject: RE: accessing on-card ram/rom



On Wed, 8 Nov 2000 [email protected] wrote:

> I looked at the IO-mapping.txt file. It says that
> on x86 architecture it should not make any difference.
> It also says that "on x86 it _is_ the same memory space. So
> on x86 it actually works to just dereference a pointer".

For bus_to_virt() to give a usable virtual address, such a virtual
mapping must exist and additionnally be part of the linear kernel
mapping. A PCI MMIO address is generally _not_ even mapped by default
by the kernel.

On the other hand, bus_to_virt() hasn't the proper semantic for your
problem, since it applies to main memory addresses as seen from the PCI
BUS, and you want an MMIO address usable by the CPU (=virtual).

Hmmm... ioremap() just create a virtual mapping for the CPU to access
the MMIO window of your PCI chip just fine.

G?rard.

> Any inputs on this ?
>
> Thanks and regards,
> -hiren
>
> > -----Original Message-----
> > From: Jeff Garzik [mailto:[email protected]]
> > Sent: Wednesday, November 08, 2000 2:53 PM
> > To: MEHTA,HIREN (A-SanJose,ex1)
> > Cc: '[email protected]'
> > Subject: Re: accessing on-card ram/rom
> >
> >
> > "MEHTA,HIREN (A-SanJose,ex1)" wrote:
> > > I have a PCI card which has on-card ram/rom which gets mapped
> > > into pci address space and there is a separate base register
> > > for this memory. Now the question is : can I access this on-card
> > > memory by converting the pci base address into the virtual address
> > > using bus_to_virt and adding the required offset ? Or do I need
> > > to use ioremap function to map the physical address space starting
> > > from the pci base address into the kernel virtual address space ?
> > > Or is there any other interface to access the on-card memory ?
> > > Is it that bus_to_virt can be used only for the normal RAM ?
> >
> > Use ioremap.
> >
> > For more details, read linux/Documentation/IO-mapping.txt.
> >
> > Jeff
> >
> >
> > --
> > Jeff Garzik | "When I do this, my computer freezes."
> > Building 1024 | -user
> > MandrakeSoft | "Don't do that."
> > | -level 1
> >
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> Please read the FAQ at http://www.tux.org/lkml/
>