PowerPC iotable_init equivalent?
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?
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?
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?
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