* [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