public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Reboot Dreamcast under software control
@ 2007-07-29 18:04 Adrian McMenamin
  2007-07-29 18:25 ` Fwd: " Adrian McMenamin
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian McMenamin @ 2007-07-29 18:04 UTC (permalink / raw)
  To: lethal

In the light of more up to date technical information I have
discovered there is a register at physical address 0x005F6890 on the
Dreamcast that if written a magic number (0x00007611) will force a
reboot under software control.

Presumably a better option than the current catch-all mechanism.

Signed-off by: Adrian McMenamin <adrian@mcmen.demon.co.uk>

diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 6334a4c..6f5e9e4 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -97,6 +97,11 @@ void cpu_idle(void)

 void machine_restart(char * __unused)
 {
+
+#ifdef CONFIG_SH_DREAMCAST
+       /*reboot the Dreamcast under software control*/
+       writel(0x00007611, 0xA05F6890);
+#endif
        /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
        asm volatile("ldc %0, sr\n\t"
                     "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Fwd: [PATCH] Reboot Dreamcast under software control
  2007-07-29 18:04 [PATCH] Reboot Dreamcast under software control Adrian McMenamin
@ 2007-07-29 18:25 ` Adrian McMenamin
  2007-07-29 22:50   ` Paul Mundt
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian McMenamin @ 2007-07-29 18:25 UTC (permalink / raw)
  To: linux-kernel, linuxsh-dev

Apologies. I meant to cc: this to the lists first time round and
appear to have bcc'ed it instead.

---------- Forwarded message ----------
From: Adrian McMenamin <lkmladrian@gmail.com>
Date: 29-Jul-2007 19:04
Subject: [PATCH] Reboot Dreamcast under software control
To: lethal@linux-sh.org


In the light of more up to date technical information I have
discovered there is a register at physical address 0x005F6890 on the
Dreamcast that if written a magic number (0x00007611) will force a
reboot under software control.

Presumably a better option than the current catch-all mechanism.

Signed-off by: Adrian McMenamin <adrian@mcmen.demon.co.uk>

diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 6334a4c..6f5e9e4 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -97,6 +97,11 @@ void cpu_idle(void)

 void machine_restart(char * __unused)
 {
+
+#ifdef CONFIG_SH_DREAMCAST
+       /*reboot the Dreamcast under software control*/
+       writel(0x00007611, 0xA05F6890);
+#endif
        /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
        asm volatile("ldc %0, sr\n\t"
                     "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: Fwd: [PATCH] Reboot Dreamcast under software control
  2007-07-29 18:25 ` Fwd: " Adrian McMenamin
@ 2007-07-29 22:50   ` Paul Mundt
  2007-07-29 23:05     ` Adrian McMenamin
  0 siblings, 1 reply; 5+ messages in thread
From: Paul Mundt @ 2007-07-29 22:50 UTC (permalink / raw)
  To: Adrian McMenamin; +Cc: linux-kernel, linuxsh-dev

On Sun, Jul 29, 2007 at 07:25:21PM +0100, Adrian McMenamin wrote:
> diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
> index 6334a4c..6f5e9e4 100644
> --- a/arch/sh/kernel/process.c
> +++ b/arch/sh/kernel/process.c
> @@ -97,6 +97,11 @@ void cpu_idle(void)
> 
>  void machine_restart(char * __unused)
>  {
> +
> +#ifdef CONFIG_SH_DREAMCAST
> +       /*reboot the Dreamcast under software control*/
> +       writel(0x00007611, 0xA05F6890);
> +#endif
>         /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
>         asm volatile("ldc %0, sr\n\t"
>                      "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));

No, if you want to do this, at least use a function pointer and leave
this as the default implementation. The dreamcast presumably only needs
this magic write anyways, rather than the SR.BL trick.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Fwd: [PATCH] Reboot Dreamcast under software control
  2007-07-29 22:50   ` Paul Mundt
@ 2007-07-29 23:05     ` Adrian McMenamin
  2007-07-29 23:25       ` Paul Mundt
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian McMenamin @ 2007-07-29 23:05 UTC (permalink / raw)
  To: Paul Mundt; +Cc: Adrian McMenamin, linux-kernel, linuxsh-dev

On Mon, 2007-07-30 at 07:50 +0900, Paul Mundt wrote:
> On Sun, Jul 29, 2007 at 07:25:21PM +0100, Adrian McMenamin wrote:
> > diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
> > index 6334a4c..6f5e9e4 100644
> > --- a/arch/sh/kernel/process.c
> > +++ b/arch/sh/kernel/process.c
> > @@ -97,6 +97,11 @@ void cpu_idle(void)
> > 
> >  void machine_restart(char * __unused)
> >  {
> > +
> > +#ifdef CONFIG_SH_DREAMCAST
> > +       /*reboot the Dreamcast under software control*/
> > +       writel(0x00007611, 0xA05F6890);
> > +#endif
> >         /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
> >         asm volatile("ldc %0, sr\n\t"
> >                      "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));
> 
> No, if you want to do this, at least use a function pointer and leave
> this as the default implementation. The dreamcast presumably only needs
> this magic write anyways, rather than the SR.BL trick.
> 

Well, when I tested it, it did have a "return" in after the call and it
worked - but I took that out as it looked like code bloat to me :)

Explain what you mean by using a function pointer and I'll do that.

Adrian

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Fwd: [PATCH] Reboot Dreamcast under software control
  2007-07-29 23:05     ` Adrian McMenamin
@ 2007-07-29 23:25       ` Paul Mundt
  0 siblings, 0 replies; 5+ messages in thread
From: Paul Mundt @ 2007-07-29 23:25 UTC (permalink / raw)
  To: Adrian McMenamin; +Cc: Adrian McMenamin, linux-kernel, linuxsh-dev

On Mon, Jul 30, 2007 at 12:05:31AM +0100, Adrian McMenamin wrote:
> On Mon, 2007-07-30 at 07:50 +0900, Paul Mundt wrote:
> > On Sun, Jul 29, 2007 at 07:25:21PM +0100, Adrian McMenamin wrote:
> > > diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
> > > index 6334a4c..6f5e9e4 100644
> > > --- a/arch/sh/kernel/process.c
> > > +++ b/arch/sh/kernel/process.c
> > > @@ -97,6 +97,11 @@ void cpu_idle(void)
> > > 
> > >  void machine_restart(char * __unused)
> > >  {
> > > +
> > > +#ifdef CONFIG_SH_DREAMCAST
> > > +       /*reboot the Dreamcast under software control*/
> > > +       writel(0x00007611, 0xA05F6890);
> > > +#endif
> > >         /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
> > >         asm volatile("ldc %0, sr\n\t"
> > >                      "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));
> > 
> > No, if you want to do this, at least use a function pointer and leave
> > this as the default implementation. The dreamcast presumably only needs
> > this magic write anyways, rather than the SR.BL trick.
> > 
> 
> Well, when I tested it, it did have a "return" in after the call and it
> worked - but I took that out as it looked like code bloat to me :)
> 
> Explain what you mean by using a function pointer and I'll do that.
> 
Look at the other implementations that are overloaded by the boards.
machine_power_off, the idle loop, etc.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-07-29 23:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-29 18:04 [PATCH] Reboot Dreamcast under software control Adrian McMenamin
2007-07-29 18:25 ` Fwd: " Adrian McMenamin
2007-07-29 22:50   ` Paul Mundt
2007-07-29 23:05     ` Adrian McMenamin
2007-07-29 23:25       ` Paul Mundt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox