Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: Nicolas Schichan <nschichan@freebox.fr>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Andrew Sharp <andy.sharp@onstor.com>, linux-mips@linux-mips.org
Subject: Re: kexec - not happening on mipsel?
Date: Mon, 20 Aug 2007 15:57:38 +0200	[thread overview]
Message-ID: <200708201557.38810.nschichan@freebox.fr> (raw)
In-Reply-To: <20070814094738.GC16958@linux-mips.org>

On Tuesday 14 August 2007 11:47:38 Ralf Baechle wrote:

Hi,

> flush_icache_all() is a nop except on VIVT caches.  Anyway, following a
> __flush_cache_all it's pointless unless you want to flush caches a little
> harder.

The updated patch only uses __flush_cache_all().

> > -	printk("Will call new kernel at %08x\n", image->start);
> > -	printk("Bye ...\n");
> > -	flush_cache_all();
> > +	/*
> > +	 * avoid cache operation related headache in
> > +	 * relocate_kernel.S: disable caches in kseg0, the new kernel
> > +	 * will take care to re-enable cache in kseg0.
> > +	 */
> > +	change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
>
> And that line is the kernel's one way ticket to hell on some platforms.
>
> There is a hazard barrier missing here.

Just for my culture, could you please specify which kind of barrier macro 
should I use here ? should it be a back_to_back_c0_hazard() ?

> Only KSEG0 (or CKSEG0 in 64-bit parlance) is affected by changing Config.K0
> field.  But 64-bit kernels do not necessarily run in one of the 32-bit
> compatibility segments (R8000 doesn't but that's an academic counter
> example) - if they exist at all there is no guarantee that there is any RAM
> mapped in them (IP30 and others).
>
> On IP27 the kernel will run in CKSEG0 and if you switch that to 0 it'll
> mean BRIDGE ASIC will start looking at the uncached attribute which will be
> defaulted to 0 meaning that in CKSEG0 the CPU will no longer address RAM
> but the ECC and Backdoor Directory information.
>
> Basically it boils down to be very, very careful about cache modes
> on MIPS.  What the kernel does on bootup only happens to work because for
> all the platforms that have potencial issues with the change of the CCA
> for KSEG0 we know that Linux will set the CCA to the same value that is
> already in that field.  So that mode switch is sort of useless for most
> platforms except a few where firmware doesn't initialize Config0.K0.

Ok, updated patch does not try to disable caching in KSEG0 using Config0.K0. 

Hoewever I so feel a bit unsafe now because D-Cache is not wrote-back and 
I-Cache is not invalidated in relocate_kernel.S, before jumping to the new 
kernel. This happens to work on my board, but I think that it is mostly 
because of luck. Maybe using KSEG1 or XKPHYS (not sure about this one, I am 
not familiar with 64bit mips) when fixing the indirection list addresses 
should be safer.

However, updated patch follows.

Regards.

Signed-off-by: Nicolas Schichan <nschichan@freebox.fr>

--- linux/arch/mips/kernel/machine_kexec.c	(revision 5975)
+++ linux/arch/mips/kernel/machine_kexec.c	(revision 5976)
@@ -78,11 +78,8 @@
 	 */
 	local_irq_disable();
 
-	flush_icache_range(reboot_code_buffer,
-			   reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
-
 	printk("Will call new kernel at %08lx\n", image->start);
 	printk("Bye ...\n");
-	flush_cache_all();
+	__flush_cache_all();
 	((noretfun_t) reboot_code_buffer)();
 }

-- 
Nicolas Schichan

  reply	other threads:[~2007-08-20 13:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-09  0:08 kexec - not happening on mipsel? Andrew Sharp
2007-08-09  1:41 ` Andrew Sharp
2007-08-09 12:35   ` Ralf Baechle
2007-08-10 16:57     ` Nicolas Schichan
2007-08-14  9:47       ` Ralf Baechle
2007-08-20 13:57         ` Nicolas Schichan [this message]
2007-08-20 16:28           ` Ralf Baechle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200708201557.38810.nschichan@freebox.fr \
    --to=nschichan@freebox.fr \
    --cc=andy.sharp@onstor.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox