[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1516758426-8127-6-git-send-email-f.fainelli@gmail.com>
Date: Tue, 23 Jan 2018 17:47:05 -0800
From: Florian Fainelli <f.fainelli@...il.com>
To: linux-mips@...ux-mips.org
Cc: Florian Fainelli <florian.fainelli@...adcom.com>,
Ralf Baechle <ralf@...ux-mips.org>,
Kevin Cernekee <cernekee@...il.com>,
Florian Fainelli <f.fainelli@...il.com>,
James Hogan <jhogan@...nel.org>,
Paul Burton <paul.burton@...s.com>,
Matt Redfearn <matt.redfearn@...s.com>,
"Maciej W. Rozycki" <macro@...s.com>,
Huacai Chen <chenhc@...ote.com>,
Kate Stewart <kstewart@...uxfoundation.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Marcin Nowakowski <marcin.nowakowski@...s.com>,
Andrew Morton <akpm@...ux-foundation.org>,
"Eric W. Biederman" <ebiederm@...ssion.com>,
Ingo Molnar <mingo@...nel.org>,
David Howells <dhowells@...hat.com>,
Kees Cook <keescook@...omium.org>,
Thomas Meyer <thomas@...3r.de>,
"Bryan O'Donoghue" <pure.logic@...us-software.ie>,
Robin Murphy <robin.murphy@....com>,
Michal Hocko <mhocko@...e.com>,
Lucas Stach <l.stach@...gutronix.de>,
Vladimir Murzin <vladimir.murzin@....com>,
Bart Van Assche <bart.vanassche@...disk.com>,
linux-kernel@...r.kernel.org (open list)
Subject: [PATCH RFC 5/6] MIPS: BMIPS: Handshake with CFE
From: Florian Fainelli <florian.fainelli@...adcom.com>
Handshake with CFE and retrieve the environment variable DRAM0_SIZE,
which will tell us, on Broadcom STB chips, the amount of populated RAM
that we have on the first memory controller (aka MEMC0). This is
necessary in order to know how and if we can make use of eXtended
KSEG0/1.
Signed-off-by: Florian Fainelli <florian.fainelli@...adcom.com>
---
arch/mips/bmips/setup.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c
index 3b6f687f177c..d1b7b8b82ae1 100644
--- a/arch/mips/bmips/setup.c
+++ b/arch/mips/bmips/setup.c
@@ -19,6 +19,7 @@
#include <linux/of_platform.h>
#include <linux/libfdt.h>
#include <linux/smp.h>
+#include <linux/kernel.h>
#include <asm/addrspace.h>
#include <asm/bmips.h>
#include <asm/bootinfo.h>
@@ -28,12 +29,18 @@
#include <asm/smp-ops.h>
#include <asm/time.h>
#include <asm/traps.h>
+#include <asm/fw/cfe/cfe_api.h>
+#include <asm/fw/cfe/cfe_error.h>
#define RELO_NORMAL_VEC BIT(18)
#define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))
#define BCM6328_TP1_DISABLED BIT(9)
+unsigned long __initdata cfe_seal;
+unsigned long __initdata cfe_entry;
+unsigned long __initdata cfe_handle;
+
static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000;
struct bmips_quirk {
@@ -123,9 +130,45 @@ static const struct bmips_quirk bmips_quirk_list[] = {
{ },
};
+static unsigned long dram0_size_mb;
+
+extern void bmips_tlb_init(void);
+
+static char __initdata cfe_buf[COMMAND_LINE_SIZE];
+
+static inline int __init parse_ulong(const char *buf, unsigned long *val)
+{
+ char *endp;
+ unsigned long tmp;
+
+ tmp = simple_strtoul(buf, &endp, 0);
+ if (*endp == 0) {
+ *val = tmp;
+ return 0;
+ }
+
+ return -1;
+}
+
+#define FETCH(name, fn, arg) do { \
+ if (cfe_getenv(name, cfe_buf, COMMAND_LINE_SIZE) == CFE_OK) { \
+ fn(cfe_buf, arg); \
+ } \
+ } while (0)
+
+static void __init __maybe_unused cfe_read_configuration(void)
+{
+ if (cfe_seal != CFE_EPTSEAL)
+ return;
+
+ FETCH("DRAM0_SIZE", parse_ulong, &dram0_size_mb);
+}
+
void __init prom_init(void)
{
+ cfe_init(cfe_handle, cfe_entry);
bmips_cpu_setup();
+ cfe_read_configuration();
register_bmips_smp_ops();
}
--
2.7.4
Powered by blists - more mailing lists