PowerPC iotable_init equivalent?

2009-04-17 Thread Eddie Dawydiuk

Hello,

In the past I've worked with ARM architectures where I could setup virtual / 
physical address mappings so I don't have to ioremap then pass around pointers. 
Does PowerPC have an equivalent abstraction? If not whats the recommended approach?


That is, is there a better approach to the following...

volatile static unsigned char *my_reg = NULL;

static inline void read_func() {

if (!my_reg)
my_reg = (unsigned char *)
ioremap(REG_PHYS_BASE, REG_SIZE);
//do something with the reg
}


static inline void write_func() {

if (!my_reg)
my_reg = (unsigned char *)
ioremap(REG_PHYS_BASE, REG_SIZE);
//do something with the reg
}

--
Best Regards,

 Eddie Dawydiuk, Technologic Systems | voice:  (480) 837-5200
 16525 East Laser Drive  | fax:(480) 837-5300
 Fountain Hills, AZ 85268| web: www.embeddedARM.com
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: PowerPC iotable_init equivalent?

2009-04-17 Thread Roderick Colenbrander
On Fri, Apr 17, 2009 at 11:21 PM, Eddie Dawydiuk ed...@embeddedarm.com wrote:
 Hello,

 In the past I've worked with ARM architectures where I could setup virtual /
 physical address mappings so I don't have to ioremap then pass around
 pointers. Does PowerPC have an equivalent abstraction? If not whats the
 recommended approach?

 That is, is there a better approach to the following...

 volatile static unsigned char *my_reg = NULL;

 static inline void read_func() {

        if (!my_reg)
                my_reg = (unsigned char *)
                        ioremap(REG_PHYS_BASE, REG_SIZE);
 //do something with the reg
 }


 static inline void write_func() {

        if (!my_reg)
                my_reg = (unsigned char *)
                        ioremap(REG_PHYS_BASE, REG_SIZE);
 //do something with the reg
 }

 --
 Best Regards,
 
  Eddie Dawydiuk, Technologic Systems | voice:  (480) 837-5200
  16525 East Laser Drive              | fax:    (480) 837-5300
  Fountain Hills, AZ 85268            | web: www.embeddedARM.com
 ___
 Linuxppc-dev mailing list
 Linuxppc-dev@ozlabs.org
 https://ozlabs.org/mailman/listinfo/linuxppc-dev


In general you set devices up a dts file. You can reach its contents
using openfirmware functions (of_*). In general you use an of_*
function to look up your periperhal in the device tree. Once you have
its node you would able to do e.g. of_iomap (which uses ioremap with
the right offsets behind its back) to map the device. So you don't
hard code physical addresses anymore in the code.

Regards,
Roderick Colenbrander
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: PowerPC iotable_init equivalent?

2009-04-17 Thread Kumar Gala


On Apr 17, 2009, at 4:21 PM, Eddie Dawydiuk wrote:


Hello,

In the past I've worked with ARM architectures where I could setup  
virtual / physical address mappings so I don't have to ioremap then  
pass around pointers. Does PowerPC have an equivalent abstraction?  
If not whats the recommended approach?


That is, is there a better approach to the following...

volatile static unsigned char *my_reg = NULL;

static inline void read_func() {

if (!my_reg)
my_reg = (unsigned char *)
ioremap(REG_PHYS_BASE, REG_SIZE);
//do something with the reg
}


static inline void write_func() {

if (!my_reg)
my_reg = (unsigned char *)
ioremap(REG_PHYS_BASE, REG_SIZE);
//do something with the reg
}


Yes have a struct that keeps track of the virt addr and do the mapping  
once at init time.  This is what most drivers do.


- k
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: PowerPC iotable_init equivalent?

2009-04-17 Thread Grant Likely
On Fri, Apr 17, 2009 at 3:21 PM, Eddie Dawydiuk ed...@embeddedarm.com wrote:
 Hello,

 In the past I've worked with ARM architectures where I could setup virtual /
 physical address mappings so I don't have to ioremap then pass around
 pointers. Does PowerPC have an equivalent abstraction? If not whats the
 recommended approach?

No.  Predefining virt-phys mappings is fragile since it makes
assumptions about how the kernel is going to carve up the virtual
address space.  Better to let the kernel allocate virtual ranges as it
needs them.

As Kumar says, do your ioremap() (or, even better: of_iomap()) in your
driver's probe function and store it in the driver's private data
structure.

g.

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev