linux-mips
[Top] [All Lists]

[PATCH 04/10] MIPS: Netlogic: Add support for XLP2XX

To: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: [PATCH 04/10] MIPS: Netlogic: Add support for XLP2XX
From: "Jayachandran C" <jchandra@broadcom.com>
Date: Sun, 11 Aug 2013 14:43:54 +0530
Cc: "Jayachandran C" <jchandra@broadcom.com>
In-reply-to: <1376212440-21038-1-git-send-email-jchandra@broadcom.com>
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1376212440-21038-1-git-send-email-jchandra@broadcom.com>
Sender: linux-mips-bounce@linux-mips.org
XLP2XX is first in the series of 28nm XLPII processors.

The changes are to:
* Add processor ID for XLP2XX to asm/cpu.h and kernel/cpu-probe.c.
* Add a cpu_is_xlpii() function to check for XLPII processors.
* Update xlp_mmu_init() to use config4 to enable extended TLB.

Signed-off-by: Jayachandran C <jchandra@broadcom.com>
---
 arch/mips/include/asm/cpu.h                  |    1 +
 arch/mips/include/asm/netlogic/xlp-hal/xlp.h |    7 +++++++
 arch/mips/kernel/cpu-probe.c                 |    5 +++++
 arch/mips/netlogic/xlp/setup.c               |   27 +++++++++++++++++++-------
 4 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h
index 632bbe5..7c8d15d 100644
--- a/arch/mips/include/asm/cpu.h
+++ b/arch/mips/include/asm/cpu.h
@@ -176,6 +176,7 @@
 
 #define PRID_IMP_NETLOGIC_XLP8XX       0x1000
 #define PRID_IMP_NETLOGIC_XLP3XX       0x1100
+#define PRID_IMP_NETLOGIC_XLP2XX       0x1200
 
 /*
  * Definitions for 7:0 on legacy processors
diff --git a/arch/mips/include/asm/netlogic/xlp-hal/xlp.h 
b/arch/mips/include/asm/netlogic/xlp-hal/xlp.h
index d59cdd6..7a4a514 100644
--- a/arch/mips/include/asm/netlogic/xlp-hal/xlp.h
+++ b/arch/mips/include/asm/netlogic/xlp-hal/xlp.h
@@ -64,5 +64,12 @@ int xlp_get_dram_map(int n, uint64_t *dram_map);
 /* Device tree related */
 void *xlp_dt_init(void *fdtp);
 
+static inline int cpu_is_xlpii(void)
+{
+       int chip = read_c0_prid() & 0xff00;
+
+       return chip == PRID_IMP_NETLOGIC_XLP2XX;
+}
+
 #endif /* !__ASSEMBLY__ */
 #endif /* _ASM_NLM_XLP_H */
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index 4c6167a..bfd5acb 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -899,6 +899,11 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips 
*c, int cpu)
                        MIPS_CPU_LLSC);
 
        switch (c->processor_id & 0xff00) {
+       case PRID_IMP_NETLOGIC_XLP2XX:
+               c->cputype = CPU_XLP;
+               __cpu_name[cpu] = "Broadcom XLPII";
+               break;
+
        case PRID_IMP_NETLOGIC_XLP8XX:
        case PRID_IMP_NETLOGIC_XLP3XX:
                c->cputype = CPU_XLP;
diff --git a/arch/mips/netlogic/xlp/setup.c b/arch/mips/netlogic/xlp/setup.c
index 0c6e300..0a99cd5 100644
--- a/arch/mips/netlogic/xlp/setup.c
+++ b/arch/mips/netlogic/xlp/setup.c
@@ -110,7 +110,12 @@ void __init plat_mem_setup(void)
 
 const char *get_system_type(void)
 {
-       return "Netlogic XLP Series";
+       switch (read_c0_prid() & 0xff00) {
+       case PRID_IMP_NETLOGIC_XLP2XX:
+               return "Broadcom XLPII Series";
+       default:
+               return "Netlogic XLP Series";
+       }
 }
 
 void __init prom_free_prom_memory(void)
@@ -120,12 +125,20 @@ void __init prom_free_prom_memory(void)
 
 void xlp_mmu_init(void)
 {
-       /* enable extended TLB and Large Fixed TLB */
-       write_c0_config6(read_c0_config6() | 0x24);
-
-       /* set page mask of Fixed TLB in config7 */
-       write_c0_config7(PM_DEFAULT_MASK >>
-               (13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
+       u32 conf4;
+
+       if (cpu_is_xlpii()) {
+               /* XLPII series has extended pagesize in config 4 */
+               conf4 = read_c0_config4() & ~0x1f00u;
+               write_c0_config4(conf4 | ((PAGE_SHIFT - 10) / 2 << 8));
+       } else {
+               /* enable extended TLB and Large Fixed TLB */
+               write_c0_config6(read_c0_config6() | 0x24);
+
+               /* set page mask of extended Fixed TLB in config7 */
+               write_c0_config7(PM_DEFAULT_MASK >>
+                       (13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
+       }
 }
 
 void nlm_percpu_init(int hwcpuid)
-- 
1.7.9.5



<Prev in Thread] Current Thread [Next in Thread>