MPC8555CDS CCSRBAR
Trying to port an SEC driver to Linux/PPC8555. Reading the default CCSRBAR @ 0xFF70 I read 0x which is wrong. Looking at Metrowerks init files and uboot code (1.1.2) I see it's likely been moved to 0xE000, but I get a seg fault when I try to read there. So, what am I doing wrong, and even better, how do I at runtime find out where CCSRBAR is? Thanks in advance, and please forgive the likely ignorance, Eric Start your day with Yahoo! - make it your home page http://www.yahoo.com/r/hs
MPC8555CDS CCSRBAR
On Tuesday 09 August 2005 16:04, Eric Kampman wrote: Trying to port an SEC driver to Linux/PPC8555. Reading the default CCSRBAR @ 0xFF70 I read 0x which is wrong. Looking at Metrowerks init files and uboot code (1.1.2) I see it's likely been moved to 0xE000, but I get a seg fault when I try to read there. So, what am I doing wrong, and even better, how do I at runtime find out where CCSRBAR is? Thanks in advance, and please forgive the likely ignorance, Eric use the get_ccsrbar() function to get the address, then ioremap() will be your friend ;) HTH Gerhard -- Gerhard Jaeger gjaeger at sysgo.com SYSGO AG Embedded and Real-Time Software www.sysgo.com | www.elinos.com | www.pikeos.com | www.osek.de
MPC8555CDS CCSRBAR
On Aug 9, 2005, at 9:15 AM, Gerhard Jaeger wrote: On Tuesday 09 August 2005 16:04, Eric Kampman wrote: Trying to port an SEC driver to Linux/PPC8555. Reading the default CCSRBAR @ 0xFF70 I read 0x which is wrong. Looking at Metrowerks init files and uboot code (1.1.2) I see it's likely been moved to 0xE000, but I get a seg fault when I try to read there. So, what am I doing wrong, and even better, how do I at runtime find out where CCSRBAR is? Thanks in advance, and please forgive the likely ignorance, Eric use the get_ccsrbar() function to get the address, then ioremap() will be your friend ;) Depending on the kernel version you might want to use the driver model instead. There is an entry for the security engine which will give you the physical address to ioremap and the interrupt number to use. Doing this will be more portable. However, this is only in newer 2.6 kernels. - kumar
MPC8555CDS CCSRBAR
Hi! You might want to try that: #include asm/mpc85xx.h #include immap_85xx.h /* see mail archives for complete mpc8540 version */ ... void foo(void) { volatile ccsr_t *immap; phys_addr_t ccsrbar; ccsrbar=get_ccsrbar(); immap=ioremap(ccsrbar,sizeof(ccsr_t)); /* is ioremap_nochache() the same on mpc85xx? */ if (!immap) { printk(KERN_ALERT Failed to ioremap CCSRBAR!\n); err = -EIO; goto out; } /* examples */ printk(KERN_INFO CCSRBAR addr%.8lx\n,ccsrbar); printk(KERN_INFO IMMAP addr %p\n,immap); printk(KERN_INFO BR0%.8x\n,immap-im_lbc.br0); printk(KERN_INFO OR0%.8x\n,immap-im_lbc.or0); /* unmap the ccsr*/ iounmap(immap); out: } I hope that's all current code. Comments are welcome. Greets, Clemens Koller ___ RD Imaging Devices Anagramm GmbH Rupert-Mayer-Str. 45/1 81379 Muenchen Germany http://www.anagramm.de Phone: +49-89-741518-50 Fax: +49-89-741518-19 Gerhard Jaeger wrote: On Tuesday 09 August 2005 16:04, Eric Kampman wrote: Trying to port an SEC driver to Linux/PPC8555. Reading the default CCSRBAR @ 0xFF70 I read 0x which is wrong. Looking at Metrowerks init files and uboot code (1.1.2) I see it's likely been moved to 0xE000, but I get a seg fault when I try to read there. So, what am I doing wrong, and even better, how do I at runtime find out where CCSRBAR is? Thanks in advance, and please forgive the likely ignorance, Eric use the get_ccsrbar() function to get the address, then ioremap() will be your friend ;) HTH Gerhard
MPC8555CDS CCSRBAR
or this... static int sec_probe(struct device *device) { struct platform_device *pdev = to_platform_device(device); struct resource *r; sec_irq = platform_get_irq(pdev, 0); rc = request_irq(sc-sc_irq, talitos_intr, 0, talitos, sc); if (rc) { printk(failed to hook irq %d\n, sec_irq); sec_irq = -1; goto out; } /* we read its hardware registers as memory */ r = platform_get_resource(pdev, IORESOURCE_MEM, 0); sec_base_addr = (ocf_iomem_t) ioremap(r-start, (r-end - r-start)); if (!sec_base_addr) { printk(failed to ioremap 0x%x-0x%x\n, (u32)r-start, (u32)r-end - (u32)r-start); goto out; } ... } Kim On Tue, 09 Aug 2005 17:53:42 +0200 Clemens Koller clemens.koller at anagramm.de wrote: Hi! You might want to try that: #include asm/mpc85xx.h #include immap_85xx.h /* see mail archives for complete mpc8540 version */ ... void foo(void) { volatile ccsr_t *immap; phys_addr_t ccsrbar; ccsrbar=get_ccsrbar(); immap=ioremap(ccsrbar,sizeof(ccsr_t));/* is ioremap_nochache() the same on mpc85xx? */ if (!immap) { printk(KERN_ALERT Failed to ioremap CCSRBAR!\n); err = -EIO; goto out; } /* examples */ printk(KERN_INFO CCSRBAR addr%.8lx\n,ccsrbar); printk(KERN_INFO IMMAP addr %p\n,immap); printk(KERN_INFO BR0%.8x\n,immap-im_lbc.br0); printk(KERN_INFO OR0%.8x\n,immap-im_lbc.or0); /* unmap the ccsr*/ iounmap(immap); out: } I hope that's all current code. Comments are welcome. Greets, Clemens Koller ___ RD Imaging Devices Anagramm GmbH Rupert-Mayer-Str. 45/1 81379 Muenchen Germany http://www.anagramm.de Phone: +49-89-741518-50 Fax: +49-89-741518-19 Gerhard Jaeger wrote: On Tuesday 09 August 2005 16:04, Eric Kampman wrote: Trying to port an SEC driver to Linux/PPC8555. Reading the default CCSRBAR @ 0xFF70 I read 0x which is wrong. Looking at Metrowerks init files and uboot code (1.1.2) I see it's likely been moved to 0xE000, but I get a seg fault when I try to read there. So, what am I doing wrong, and even better, how do I at runtime find out where CCSRBAR is? Thanks in advance, and please forgive the likely ignorance, Eric use the get_ccsrbar() function to get the address, then ioremap() will be your friend ;) HTH Gerhard ___ Linuxppc-embedded mailing list Linuxppc-embedded at ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded -- Kim