RTEMS soft reboot
Till Straumann
strauman at slac.stanford.edu
Sat Jan 24 21:41:04 UTC 2009
Matt.
Thanks for the extensive test.
It would be a good idea to document
the results in the BSP's README
and/or the wiki.
As for the code modification, I'd suggest
to use
outb(1, 0x92);
instead of directly accessing the memory-mapped
device.
T.
Matt Rippa wrote:
> Hi Till -
>
> Till Straumann wrote:
>> Matt Rippa wrote:
>>> Hi Till, Kate -
>>>
>>> Thanks for the responses. It turns out the keyboard reset was
>>> not actually causing trouble --that code was never executing.
>> ?? I thought it would execute (but not have any effect). Didn't it
>> look like
>> this:
>>
>> printk("Printing a stack trace for your convenience :-)\n");
>> CPU_print_stack();
>> /* shutdown and reboot */
>> #if defined(BSP_KBD_IOBASE)
>> kbd_outb(0x4, 0xFE); /* use keyboard controler to do the
>> job... */
>> #endif
>> #if defined(mvme2100)
>> *(unsigned char*)0xffe00000 |= 0x80;
>> #endif
>>
>> And in bsp.h
>>
>> #if defined(mvme2100)
>> ...
>> #else
>> ...
>> #define BSP_KBD_IOBASE ((_IO_BASE)+0x60)
>> #endif
>>
>> So I guess the code just didn't do anything.
>> The winbond w83c553 simply has nothing mapped at
>> the kbd register address (0x60).
>
> Sorry, yes that's correct.
>
>>
>> I'm not sure if a VME sysreset is the best solution.
>> Unfortunately, the semantics of 'bsp_reset' are not
>> fully defined (board reset, yes, but what happens
>> at the system level?). On a VME system it would
>> be desirable to have 3 variants:
>>
>> board reset only, no VME reset
>> board + VME reset
>> board reset, VME reset only if board is the system controller
>
> oh yes, this does make good sense.
>
> Here's what I did:
> 1. I set bit 1 port 0x92 and removed the vmeUniverseBusReset call. I
> verified that exit did (at least) a board reset. That works.
>
> 2. I also performed an exit with the board SYSCON disabled (J20). I
> again verified the exit performed a board reset, but it did not affect
> any peripheral boards.
>
> 3. SYSCON reenabled now, I included a peripheral board (vmic5588) and
> initialized it to make the fail light turn off. I again issued an exit
> and the 5588 fail light remained off, while the 2700 reset.
>
> 4. I verified pushing the RST on the 2700 that my 5588 fail light
> transition from OFF->fail, implying this is what I should see during a
> VME bus reset.
>
> So I think this is a sufficient test indicating the board reset is not
> resetting the VME bus. code below.
>
> Thanks for the help,
> -Matt
>
> void bsp_reset(void)
> {
> printk("Printing a stack trace for your convenience :-)\n");
> CPU_print_stack();
> /* shutdown and reboot */
> #if defined(BSP_KBD_IOBASE)
> kbd_outb(0x4, 0xFE); /* use keyboard controler to do the job... */
> printk("Setting p92\n");
> *(unsigned char*)0x80000092 |= 0x01;
>
> #endif
> #if defined(mvme2100)
> *(unsigned char*)0xffe00000 |= 0x80;
> #else
>
> #endif
> } /* bsp_reset */
>
>
>
>> You can try setting bit 1 of port 0x92 which should
>> perform a board reset -- it would be interesting to
>> know if that also causes a VME sysreset, especially
>> if the board is not the SYSCON.
>>
>> -- Till
>>
>>> In
>>> fact (for the 2700) no reset of any kind was attempted. The
>>> stackTrace seems to just have been called for debugging reasons.
>>>
>>> Adding vmeUniverseResetBus() works great and now exit perform as
>>> expected. I've attached a patch, but it still includes the stack
>>> trace in case whom ever included it still wants it.
>>>
>>> If it's ok, I'll request this be added to the 4.10 release on
>>> the rtems site.
>>>
>>> Thanks!
>>>
>>> -Matt
>>>
>>> Till Straumann wrote:
>>>> Matt Rippa wrote:
>>>>> Running 'exit' on an RTEMS ioc I get a stack trace. Is exit the
>>>>> intended mechanism for a soft reboot?
>>>> Well - 'exit' should bring you back to the point where you
>>>> started RTEMS. However, this is not really possible on all
>>>> boards because the environment that booted RTEMS may
>>>> have been destroyed (in your case, RTEMS overwrites
>>>> critical memory that was used by PPCBug) and in this case
>>>> a hard reset may be required (IIRC, 'exit' should in these
>>>> cases do that for you so you may have encountered a bug).
>>>>
>>>> Different BSPs used to have their own API to reset the board
>>>> (PPC/shared boards used to call this rtemsReboot(), IIRC)
>>>> but, again IIRC, this should have been made more consistent
>>>> (don't recall if this happened before or after forking 4.9) and
>>>> renamed 'bsp_reset()' across multiple architectures/boards.
>>>>
>>>> Now that I write all this I believe I remember that the old
>>>> motorola BSP (mvme2300..2700) indeed has a bug; it tries
>>>> to reset via the KBD controller and (again IIRC) that doesn't
>>>> work. If it did, rtemsReboot()/bsp_reset() or 'exit()' should both
>>>> do the job...
>>>>
>>>> You should be able to reset the board via a VME sysreset
>>>> (vmeUniverseResetBus())
>>>>
>>>> -- T.
>>>>> I've shown gdb output below. This is running on an MVME-2700.
>>>>>
>>>>> Thanks,
>>>>> -Matt
>>>>>
>>>>> EPICS 3.14.10 /RTEMS 4.9.1
>>>>> ------
>>>>> 10.1.5.253> exit
>>>>> Printing a stack trace for your convenience :-)
>>>>>
>>>>> 0x0011A8E0--> 0x0010F55C--> 0x0010A888--> 0x0010A76C--> 0x0000322C
>>>>>
>>>>>
>>>>> gdb shows:
>>>>> (gdb) x 0x0000322C
>>>>>
>>>>> 0x322c <enter_C_code+68>: 0x4800004d
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3230 <MMUon>: 0x7c0000a6
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3234 <MMUon+4>: 0x6000a972
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3238 <MMUon+8>: 0x68008940
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x323c <MMUon+12>: 0x7d6802a6
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3240 <MMUon+16>: 0x7d7a03a6
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3244 <MMUon+20>: 0x7c1b03a6
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3248 <MMUon+24>: 0x7c0004ac
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x324c <MMUon+28>: 0x4c00012c
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3250 <MMUon+32>: 0x4c000064
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3254 <MMUoff>: 0x7c0000a6
>>>>>
>>>>> (gdb)
>>>>>
>>>>> 0x3258 <MMUoff+4>: 0x60000070
>>>>>
>>>>> (gdb)
>>>>> 0x325c <MMUoff+8>: 0x7d6802a6
>>>>> (gdb)
>>>>> 0x3260 <MMUoff+12>: 0x68000030
>>>>> (gdb)
>>>>> 0x3264 <MMUoff+16>: 0x7d7a03a6
>>>>> (gdb)
>>>>> 0x3268 <MMUoff+20>: 0x7c1b03a6
>>>>> (gdb)
>>>>> 0x326c <MMUoff+24>: 0x7c0004ac
>>>>> (gdb)
>>>>> 0x3270 <MMUoff+28>: 0x4c00012c
>>>>> (gdb)
>>>>> 0x3274 <MMUoff+32>: 0x4c000064
>>>>> (gdb)
>>>>> 0x3278 <_return_to_ppcbug>: 0x7fc802a6
>>>>> (gdb)
>>>>>
>>>>>
>>>>>
>>>
>>
>
>
More information about the users
mailing list