problem when read internal memory

Daris A Nevil dnevil at
Thu Apr 12 03:06:54 EST 2001


It sounds as though you have already changed the value of IMAP_ADDR in
the header file for your specific board (found in linux/include/asm).
You must also make sure that your processor's boot code sets the IMMR
register to this same value before booting the Linux kernel.  Your boot
code should also setup an MMU entry for the IMMR's address by writing to
the MD_EPN register (MMU Data Effective Page Number Reg) of the PPC.
For an example of how this is done you can refer to the boot code for
the QS850 (MPC850-based board).  The source is located at  Once you uncompress the tarball you can go to
snmc/qslinux/qs850boot and view the file init_qs850.s.  Hope this helps.

Daris Nevil

Alan Wang wrote:
> Hi, all
>   we're porting linux-2.2.13 to our customized board(MPC823e). I modified some head file according
> the specification of our board such as memory map. the IMMR is set to 0xff000000. now, the kernel
> can be loaded by bootloader(written by ourselves). but inm8xx_cpm_reset() which is called in
> setup_arch:
> void m8xx_cpm_reset(uint host_page_addr)
> {
>         volatile immap_t         *imp;
>         volatile cpm8xx_t       *commproc;
>         pte_t                   *pte;
>         imp = (immap_t *)IMAP_ADDR;
>         commproc = (cpm8xx_t *)&imp->im_cpm;
>  this line generates a machine check exception when write/read to internal memory.
> why? any suggestion and comment are welcome. thank you.
> A.W.

Daris A Nevil
Simple Network Magic Corporation
401 Kentucky Lane
McKinney, TX 75069
dnevil at

** Sent via the linuxppc-embedded mail list. See

More information about the Linuxppc-embedded mailing list