From: John Crispin <john@phrozen.org>
To: linux-mips@linux-mips.org
Subject: Re: [PATCH 2/5] MIPS: BCM47XX: improve memory size detection
Date: Tue, 02 Oct 2012 09:18:18 +0200 [thread overview]
Message-ID: <506A953A.4010908@phrozen.org> (raw)
In-Reply-To: <1348942326-27195-3-git-send-email-hauke@hauke-m.de>
On 29/09/12 20:12, Hauke Mehrtens wrote:
> The memory size is detected by finding a place where it repeats in
> memory. Currently we are just checking when the function prom_init is
> seen again, but with this patch it also checks some more bytes.
>
> This should fix a problem we saw in OpenWrt, where the detected
> available memory decreased on some devices when doing a soft reboot.
>
> Signed-off-by: Hauke Mehrtens<hauke@hauke-m.de>
> ---
> arch/mips/bcm47xx/prom.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
> index 22258a4..c18f59a 100644
> --- a/arch/mips/bcm47xx/prom.c
> +++ b/arch/mips/bcm47xx/prom.c
> @@ -1,6 +1,7 @@
> /*
> * Copyright (C) 2004 Florian Schirmer<jolt@tuxbox.org>
> * Copyright (C) 2007 Aurelien Jarno<aurelien@aurel32.net>
> + * Copyright (C) 2010-2012 Hauke Mehrtens<hauke@hauke-m.de>
> *
> * This program is free software; you can redistribute it and/or modify it
> * under the terms of the GNU General Public License as published by the
> @@ -128,6 +129,7 @@ static __init void prom_init_mem(void)
> {
> unsigned long mem;
> unsigned long max;
> + unsigned long off, data, off1, data1;
> struct cpuinfo_mips *c =¤t_cpu_data;
>
> /* Figure out memory size by finding aliases.
> @@ -145,15 +147,19 @@ static __init void prom_init_mem(void)
> * max contains the biggest possible address supported by the platform.
> * If the method wants to try something above we assume 128MB ram.
> */
> - max = ((unsigned long)(prom_init) | ((128<< 20) - 1));
> + off = (unsigned long)prom_init;
> + data = *(unsigned long *)prom_init;
> + off1 = off + 4;
> + data1 = *(unsigned long *)off1;
> + max = off | ((128<< 20) - 1);
> for (mem = (1<< 20); mem< (128<< 20); mem += (1<< 20)) {
> - if (((unsigned long)(prom_init) + mem)> max) {
> + if ((off + mem)> max) {
> mem = (128<< 20);
> printk(KERN_DEBUG "assume 128MB RAM\n");
> break;
> }
> - if (*(unsigned long *)((unsigned long)(prom_init) + mem) ==
> - *(unsigned long *)(prom_init))
> + if ((*(unsigned long *)(off + mem) == data)&&
> + (*(unsigned long *)(off1 + mem) == data1))
> break;
> }
>
Hi Hauke,
somehow i have the feeling, that using memcmp() should be used here
instead of comparing memory by hand.
John
next prev parent reply other threads:[~2012-10-02 7:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-29 18:12 [PATCH 0/5] MIPS: BCM47XX: mostly sprom fixes Hauke Mehrtens
2012-09-29 18:12 ` [PATCH 1/5] MIPS: BCM47XX: ignore last memory page Hauke Mehrtens
2012-09-29 18:12 ` [PATCH 2/5] MIPS: BCM47XX: improve memory size detection Hauke Mehrtens
2012-10-02 7:18 ` John Crispin [this message]
2012-09-29 18:12 ` [PATCH 3/5] MIPS: BCM47xx: read out full board data Hauke Mehrtens
2012-09-29 18:12 ` [PATCH 4/5] MIPS: BCM47XX: read sprom without prefix if no ieee80211 core Hauke Mehrtens
2012-09-29 18:12 ` [PATCH 5/5] MIPS: BCM47xx: sprom: read values without prefix as fallback Hauke Mehrtens
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=506A953A.4010908@phrozen.org \
--to=john@phrozen.org \
--cc=linux-mips@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