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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.