I have a question for everyone on the list. I am booting u-boot on a custom mpc824x board (utx8245) and I have run into a minor annoyance. In start.S you have the following code in relocate_code:

 

relocate_code:

 

            mr        r1,  r3                /* Set new stack pointer             */

            mr        r9,  r4                /* Save copy of Global Data pointer          */

            mr        r10, r5               /* Save copy of Destination Address        */

 

            mr        r3,  r5                                        /* Destination Address    */

#ifdef DEBUG

            lis         r4, CFG_SDRAM_BASE@h                   /* Source      Address     */

            ori         r4, r4, CFG_SDRAM_BASE@l

#else

            lis         r4, CFG_MONITOR_BASE@h                /* Source      Address     */

            ori         r4, r4, CFG_MONITOR_BASE@l

#endif

            lis         r5, CFG_MONITOR_LEN@h                   /* Length in Bytes          */

            ori         r5, r5, CFG_MONITOR_LEN@l

            li           r6, CFG_CACHELINE_SIZE                    /* Cache Line Size         */

 

            /*

             * Fix GOT pointer:

             *

             * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address

             *

             * Offset:

 

Now I am curious why when you are running in debug mode you choose to copy everything from CFG_SDRAM_BASE, while working normally you copy it from CFG_MONITOR_BASE. For us there is nothing to be copied at CFG_SDRAM_BASE and u-boot crashes right after it relocates the code and jumps to the copied point. We get around this obviously by doing the following:

 

relocate_code:

 

            mr        r1,  r3                /* Set new stack pointer             */

            mr        r9,  r4                /* Save copy of Global Data pointer          */

            mr        r10, r5               /* Save copy of Destination Address        */

 

            mr        r3,  r5                                        /* Destination Address    */

#ifdef DEBUG

            lis         r4, CFG_MONITOR_BASE@h                /* Source      Address     */

            ori         r4, r4, CFG_MONITOR_BASE@l

#else

            lis         r4, CFG_MONITOR_BASE@h                /* Source      Address     */

            ori         r4, r4, CFG_MONITOR_BASE@l

#endif

            lis         r5, CFG_MONITOR_LEN@h                   /* Length in Bytes          */

            ori         r5, r5, CFG_MONITOR_LEN@l

            li           r6, CFG_CACHELINE_SIZE                    /* Cache Line Size         */

 

            /*

             * Fix GOT pointer:

             *

             * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address

             *

             * Offset:

 

This is a hack, and it cannot be merged back into u-boot so I was wondering if there was a more eloquent way to do this, something else I am missing that will make my program work while in debug mode with an unmodified start.S.

 

Thanks for your time,

Matthew