| To: | David Daney <ddaney@caviumnetworks.com> |
|---|---|
| Subject: | Re: [PATCH] MIPS: Calculate proper ebase value for 64-bit kernels |
| From: | Wu Zhangjin <wuzhangjin@gmail.com> |
| Date: | Tue, 13 Apr 2010 13:03:54 +0800 |
| Cc: | linux-mips@linux-mips.org, ralf@linux-mips.org |
| Dkim-signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:reply-to:to:cc :in-reply-to:references:x-priority:content-type:organization:date :message-id:mime-version:x-mailer:content-transfer-encoding; bh=VCIsg488Y94CsX4qRUs4W4d8c5HkkeO/d7gARqWJld0=; b=Rxh67ftAozcSC4uTfV98nEAHebGmyLZhjDM//IwEYr/AdV6tOGgyJOD2+8OZaNi7ju Lk0sF8voTTeLOEUgqhCk7ipphdbWU/j73EuyidmZosog3jRn6Sxmlwyn9arc1aLI9ACd psZAbriIgH6rOm5JHrV60puMG4Ec7d7IjcHI0= |
| Domainkey-signature: | a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:reply-to:to:cc:in-reply-to:references:x-priority :content-type:organization:date:message-id:mime-version:x-mailer :content-transfer-encoding; b=aN+V5A//CUw80reeTqZyEcc4YLAiJ/Og58zSWDgZv97Zm8U+xoUCOYTmkYxVH9Xith 1p+Hrj611nSiH8l020RBPe3bgb1i7QS2YMHnXaF0tRpT8GfaDAD/Q5SdT1LLNVAlaRw+ n4SVmf/IcvPsQm4RAKbUScmCXi08gqueSZeT8= |
| In-reply-to: | <1270585790-12730-1-git-send-email-ddaney@caviumnetworks.com> |
| Organization: | DSLab, Lanzhou University, China |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| References: | <1270585790-12730-1-git-send-email-ddaney@caviumnetworks.com> |
| Reply-to: | wuzhangjin@gmail.com |
| Sender: | linux-mips-bounce@linux-mips.org |
Hi, David and Ralf
This patch have broken the support to the MIPS variants whose
cpu_has_mips_r2 is 0 for the CAC_BASE and CKSEG0 is completely different
in these MIPSs.
With the patch, the kernel will exit when booting(later after
trap_init()).
A potential patch to fix the above problem is:
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 1a4dd65..d8cb554 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -1599,7 +1599,7 @@ void __init trap_init(void)
ebase = (unsigned long)
__alloc_bootmem(size, 1 << fls(size), 0);
} else {
- ebase = CKSEG0;
+ ebase = (cpu_has_mips_r2) ? CKSEG0 : CAC_BASE;
if (cpu_has_mips_r2)
ebase += (read_c0_ebase() & 0x3ffff000);
}
Regards,
Wu Zhangjin
On Tue, 2010-04-06 at 13:29 -0700, David Daney wrote:
> The ebase is relative to CKSEG0 not CAC_BASE. On a 32-bit kernel they
> are the same thing, for a 64-bit kernel they are not.
>
> It happens to kind of work on a 64-bit kernel as they both reference
> the same physical memory. However since the CPU uses the CKSEG0 base,
> determining if a J instruction will reach always gives the wrong
> result unless we use the same number the CPU uses.
>
> Signed-off-by: David Daney <ddaney@caviumnetworks.com>
> ---
> arch/mips/kernel/traps.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
> index 7ce84bb..b122f76 100644
> --- a/arch/mips/kernel/traps.c
> +++ b/arch/mips/kernel/traps.c
> @@ -1706,7 +1706,7 @@ void __init trap_init(void)
> ebase = (unsigned long)
> __alloc_bootmem(size, 1 << fls(size), 0);
> } else {
> - ebase = CAC_BASE;
> + ebase = CKSEG0;
> if (cpu_has_mips_r2)
> ebase += (read_c0_ebase() & 0x3ffff000);
> }
|
| Previous by Date: | About MIPS specific dma_mmap_coherent(), Wu Zhangjin |
|---|---|
| Next by Date: | [PATCH] Loongson: update cpu-feature-overrides.h, Wu Zhangjin |
| Previous by Thread: | Re: [PATCH] MIPS: Calculate proper ebase value for 64-bit kernels, Ralf Baechle |
| Next by Thread: | Re: [PATCH] MIPS: Calculate proper ebase value for 64-bit kernels, Thomas Bogendoerfer |
| Indexes: | [Date] [Thread] [Top] [All Lists] |