reboot on PQ2FADS board.

2006-08-18 Thread Liu Dave-r63238
Hi Liu,
 
please try this..
 
 u32 msr;
 
 volatile immap_t *immap = (immap_t *) IMAP_ADDR;
 
 
 /* Interrupts and MachineCheck off */
 __asm__ __volatile__ (mfmsr%0:=r (msr):);
 
 msr = ~(MSR_ME | MSR_EE);
 __asm__ __volatile__ (mtmsr%0::r (msr)); 
 
 immap-im_clkrst.car_rmr = 1;/* Checkstop Reset enable */

 immap-resxxx = 0;/* please find one immap illegal address
   access it, trig reset */
 for (;;);





From: linuxppc-embedded-bounces+daveliu=freescale.com at ozlabs.org
[mailto:linuxppc-embedded-bounces+daveliu=freescale.com at ozlabs.org] On
Behalf Of Zhimin (Jimmy) Liu
Sent: Friday, August 18, 2006 1:00 AM
To: linuxppc-embedded at ozlabs.org
Subject: reboot on PQ2FADS board.



Did you sovlve the problem? I have same issue for the  PQ2FADS
board. 

jimmy 

-- next part --
An HTML attachment was scrubbed...
URL: 
http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20060818/968e753a/attachment.htm
 


reboot on PQ2FADS board.

2006-08-17 Thread Zhimin (Jimmy) Liu
Did you sovlve the problem? I have same issue for the  PQ2FADS board.

jimmy
-- next part --
An HTML attachment was scrubbed...
URL: 
http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20060817/3eb9347a/attachment.htm
 


reboot on PQ2FADS board.

2006-07-20 Thread Lei Sun
Hi :
  The following is the version I am using, it's pretty much same as
do_reset() code in u-boot -1.1.4 for m8260 target. However the machine
just hangs.
  I wonder if there are any difference between Power on Reset and Hard
reset?  in my case maybe the machine did get reset, but the u-boot
didn't get executed correctly in the case of hard reset ?  It doesn't
explain the fact that i can run reset in u-boot console though.

Any comments are highly appreciated! I am stucked in here now.

m8260_restart(char * cmd)
uintstartaddr;
unsigned long msr;
char badval;
volatile cpm2_map_t *immap = cpm2_immr;

/* Enable CheckStop reset. */
immap-im_clkrst.car_rmr |= 0x0001;
/* Interrupts and MMU off */
__asm__ __volatile__(mfmsr %0:=r (msr):);
msr = ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR);
__asm__ __volatile__(mtmsr %0:: r (msr));
startaddr = 0x0440; /* this is taken from u-boot-1.1.4 */
/* Access bad address.*/
((void (*)(void)) startaddr) ();
return 1;
}

On 7/19/06, Wolfgang Denk wd at denx.de wrote:
 In message 4879B0C6C249214CBE7AB04453F84E4D050B0F at 
 zch01exm20.fsl.freescale.net you wrote:
 
   command cause machine check and kernel ooops.  The problem seems in
   the m8260_gorom in head.S.  The restart() function in m8260_setup.c
   passed 2 parameters to that assembly code, r3 is the bd_info , r4 is
   the warm start address,  I changed it to 0xFF800100, that's where the
   u-boot's _start_warm lives, I have verified that address by typing g
   ff800100 in u-boot console, which cause the board reset.
 
  Are you sure ff800100 is _start_warm lives?  In latest u-boot

 Trying to jump to some boot rom address is IMHO always a bad approach
 to reboot a system. You should always try to cause a reset  condition
 for  the CPU, and thus for all the associated hardware. On 8xx / 8260
 systems this is usually done by going through  a  machine  check.  We
 have  the  following code in our linuxppc_2_4_devel tree, which works
 on ALL 8260 systems, no matter whioch boot loder they use:

 static void
 m8260_restart(char *cmd)
 {
 __volatile__ unsigned char dummy;
 ulong msr;

 cli();
 volatile immap_t *immap = (immap_t *) IMAP_ADDR;

 immap-im_clkrst.car_rmr = 1;/* Checkstop Reset enable */

 /* Interrupts and MMU off */
 __asm__ __volatile__ (mfmsr%0:=r (msr):);

 msr = ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR);
 __asm__ __volatile__ (mtmsr%0::r (msr));

 dummy = ((immap_t *)IMAP_ADDR)-im_clkrst.res[0];

 printk(Restart failed\n);
 for (;;);
 }


 Best regards,

 Wolfgang Denk

 --
 Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
 Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
 If a group of N persons implements a COBOL compiler,  there  will  be
 N-1 passes. Someone in the group has to be the manager. - T. Cheatham




reboot on PQ2FADS board.

2006-07-20 Thread Wolfgang Denk
In message f9a7e7a80607192046s3f17e8a5s4cfba43f1747e9ec at mail.gmail.com you 
wrote:

 m8260_restart(char * cmd)
...
 startaddr = 0x0440; /* this is taken from u-boot-1.1.4 */

This is a random address which  happens  to  be  not  mapped  in  the
specific  board  (MPC8260ADS.h).  The approach taken here is strongly
deprecated - it is juat an examp[le of a badly maintained board.  In-
stead, I recommend to use an addrress which causes a checkstop on all
boards,  idependently of the cspecific memory map. This is what we do
here:

  dummy = ((immap_t *)IMAP_ADDR)-im_clkrst.res[0];

In the end, the effect is the same.

And I have no idea why it would not work  on  your  board.  Attach  a
debugger and find out where exactly the code is hanging.

Ummm... and if you run under a debugger, *detach*  it  and  check  if
reset starts to work...

Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
It's certainly  convenient  the  way  the  crime  (or  condition)  of
stupidity   carries   with   it  its  own  punishment,  automatically
admisistered without remorse, pity, or prejudice. :-)
 -- Tom Christiansen in 559seq$ag1$1 at csnews.cs.colorado.edu



reboot on PQ2FADS board.

2006-07-20 Thread Liu Dave-r63238
This way maybe can not work. when the MMU turn off, 
the next instructions maybe can not be fetched if these instructions
didn't exist cache. 
so it is possible these instruction can not executed.  

 
 Trying to jump to some boot rom address is IMHO always a bad 
 approach to reboot a system. You should always try to cause a 
 reset  condition for  the CPU, and thus for all the 
 associated hardware. On 8xx / 8260 systems this is usually 
 done by going through  a  machine  check.  We have  the  
 following code in our linuxppc_2_4_devel tree, which works on 
 ALL 8260 systems, no matter whioch boot loder they use:
 
 static void
 m8260_restart(char *cmd)
 {   
 __volatile__ unsigned char dummy;
 ulong msr;
 
 cli();
 volatile immap_t *immap = (immap_t *) IMAP_ADDR;
 
 immap-im_clkrst.car_rmr = 1;/* Checkstop Reset enable */
 
 /* Interrupts and MMU off */
 __asm__ __volatile__ (mfmsr%0:=r (msr):);
 
 msr = ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR);
 __asm__ __volatile__ (mtmsr%0::r (msr)); 
 
Now the MMU trun off, is real address mode. But the PC still is
0xC00.. It is old effective address.

 dummy = ((immap_t *)IMAP_ADDR)-im_clkrst.res[0];
These instructions will locate on the real address space.. It is
0xC00- KERNELBASE
 
 printk(Restart failed\n);
 for (;;);
 }   
 



reboot on PQ2FADS board.

2006-07-19 Thread Li Yang-r58472
 -Original Message-
 From: linuxppc-embedded-bounces+leoli=freescale.com at ozlabs.org
 [mailto:linuxppc-embedded-bounces+leoli=freescale.com at ozlabs.org] On
Behalf Of Lei Sun
 Sent: Tuesday, July 18, 2006 11:41 AM
 To: linuxppc-embedded at ozlabs.org
 Subject: reboot on PQ2FADS board.
 
 Hi:
 I have linux 2.4.30 runnning on this board, the reboot -f
 command cause machine check and kernel ooops.  The problem seems in
 the m8260_gorom in head.S.  The restart() function in m8260_setup.c
 passed 2 parameters to that assembly code, r3 is the bd_info , r4 is
 the warm start address,  I changed it to 0xFF800100, that's where the
 u-boot's _start_warm lives, I have verified that address by typing g
 ff800100 in u-boot console, which cause the board reset.

Are you sure ff800100 is _start_warm lives?  In latest u-boot
_start_warm is at
EXC_OFF_SYS_RESET + 0x10.  In your case, that will be 0xff800110.
Please try
with the correct address.

 I assume the m8260_gorom  has been heavily tested for other
 boards. I wonder if anyone got a PQ2FADS-VR board that has the similar
 problem?  I am not familar with the assembly code for PPC.  Any
 suggestions?
 
 Thanks
 lei
 ___
 Linuxppc-embedded mailing list
 Linuxppc-embedded at ozlabs.org
 https://ozlabs.org/mailman/listinfo/linuxppc-embedded



reboot on PQ2FADS board.

2006-07-19 Thread Wolfgang Denk
In message 4879B0C6C249214CBE7AB04453F84E4D050B0F at 
zch01exm20.fsl.freescale.net you wrote:

  command cause machine check and kernel ooops.  The problem seems in
  the m8260_gorom in head.S.  The restart() function in m8260_setup.c
  passed 2 parameters to that assembly code, r3 is the bd_info , r4 is
  the warm start address,  I changed it to 0xFF800100, that's where the
  u-boot's _start_warm lives, I have verified that address by typing g
  ff800100 in u-boot console, which cause the board reset.
 
 Are you sure ff800100 is _start_warm lives?  In latest u-boot

Trying to jump to some boot rom address is IMHO always a bad approach
to reboot a system. You should always try to cause a reset  condition
for  the CPU, and thus for all the associated hardware. On 8xx / 8260
systems this is usually done by going through  a  machine  check.  We
have  the  following code in our linuxppc_2_4_devel tree, which works
on ALL 8260 systems, no matter whioch boot loder they use:

static void
m8260_restart(char *cmd)
{   
__volatile__ unsigned char dummy;
ulong msr;

cli();
volatile immap_t *immap = (immap_t *) IMAP_ADDR;

immap-im_clkrst.car_rmr = 1;/* Checkstop Reset enable */

/* Interrupts and MMU off */
__asm__ __volatile__ (mfmsr%0:=r (msr):);

msr = ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR);
__asm__ __volatile__ (mtmsr%0::r (msr)); 

dummy = ((immap_t *)IMAP_ADDR)-im_clkrst.res[0];

printk(Restart failed\n);
for (;;);
}   


Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
If a group of N persons implements a COBOL compiler,  there  will  be
N-1 passes. Someone in the group has to be the manager. - T. Cheatham



reboot on PQ2FADS board.

2006-07-19 Thread Lei Sun
Hi :
  I  tried your approach last ight, (in fact I copied part of the
do_reboot() code from u-boot and put it in m8260_restart() function in
the kernel).  The only difference is the first line,
 volatile immap_t *immap = (immap_t *) IMAP_ADDR;
in my case it is
 volatile immap_t * immap = cpm2_immr;
I am using different source tree.
it simply hangs, rather then reset.

On 7/19/06, Wolfgang Denk wd at denx.de wrote:
 In message 4879B0C6C249214CBE7AB04453F84E4D050B0F at 
 zch01exm20.fsl.freescale.net you wrote:
 
   command cause machine check and kernel ooops.  The problem seems in
   the m8260_gorom in head.S.  The restart() function in m8260_setup.c
   passed 2 parameters to that assembly code, r3 is the bd_info , r4 is
   the warm start address,  I changed it to 0xFF800100, that's where the
   u-boot's _start_warm lives, I have verified that address by typing g
   ff800100 in u-boot console, which cause the board reset.
 
  Are you sure ff800100 is _start_warm lives?  In latest u-boot

 Trying to jump to some boot rom address is IMHO always a bad approach
 to reboot a system. You should always try to cause a reset  condition
 for  the CPU, and thus for all the associated hardware. On 8xx / 8260
 systems this is usually done by going through  a  machine  check.  We
 have  the  following code in our linuxppc_2_4_devel tree, which works
 on ALL 8260 systems, no matter whioch boot loder they use:

 static void
 m8260_restart(char *cmd)
 {
__volatile__ unsigned char dummy;
ulong msr;

cli();
volatile immap_t *immap = (immap_t *) IMAP_ADDR;

immap-im_clkrst.car_rmr = 1;/* Checkstop Reset enable */

/* Interrupts and MMU off */
__asm__ __volatile__ (mfmsr%0:=r (msr):);

msr = ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR);
__asm__ __volatile__ (mtmsr%0::r (msr));

dummy = ((immap_t *)IMAP_ADDR)-im_clkrst.res[0];

printk(Restart failed\n);
for (;;);
 }


 Best regards,

 Wolfgang Denk

 --
 Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
 Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
 If a group of N persons implements a COBOL compiler,  there  will  be
 N-1 passes. Someone in the group has to be the manager. - T. Cheatham




reboot on PQ2FADS board.

2006-07-19 Thread Mathieu Deschamps
Hi,

On Wednesday 19 July 2006 16:12, Lei Sun wrote:
 Hi :
   I  tried your approach last ight, (in fact I copied part of the
 do_reboot() code from u-boot and put it in m8260_restart() function in
 the kernel).  The only difference is the first line,
  volatile immap_t *immap = (immap_t *) IMAP_ADDR;
 in my case it is
  volatile immap_t * immap = cpm2_immr;
 I am using different source tree.
 it simply hangs, rather then reset.

[...]

Give a try to :
startaddr = 0xff000104;



-- 
Mathieu Deschamps
Com2gether Design Center
Electronic and Embedded Engineering Services
www.com2gether.net 



reboot on PQ2FADS board.

2006-07-18 Thread Lei Sun
Hi:
I have linux 2.4.30 runnning on this board, the reboot -f
command cause machine check and kernel ooops.  The problem seems in
the m8260_gorom in head.S.  The restart() function in m8260_setup.c
passed 2 parameters to that assembly code, r3 is the bd_info , r4 is
the warm start address,  I changed it to 0xFF800100, that's where the
u-boot's _start_warm lives, I have verified that address by typing g
ff800100 in u-boot console, which cause the board reset.
I assume the m8260_gorom  has been heavily tested for other
boards. I wonder if anyone got a PQ2FADS-VR board that has the similar
problem?  I am not familar with the assembly code for PPC.  Any
suggestions?

Thanks
lei