Module Name: src
Committed By: hsuenaga
Date: Thu May 14 05:39:32 UTC 2015
Modified Files:
src/sys/arch/arm/arm: cpufunc.c cpufunc_asm_pj4b.S
src/sys/arch/arm/include: cpufunc_proto.h
src/sys/arch/arm/marvell: armadaxp.c armadaxpreg.h mvsocreg.h
src/sys/arch/evbarm/marvell: marvell_machdep.c
Log Message:
add synchronization barrier for AURORA_IO_CACHE_COHERENCY.
cleanup MARVELL L2 cache code.
To generate a diff of this commit:
cvs rdiff -u -r1.153 -r1.154 src/sys/arch/arm/arm/cpufunc.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/arm/cpufunc_asm_pj4b.S
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/include/cpufunc_proto.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/marvell/armadaxp.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/marvell/armadaxpreg.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/marvell/mvsocreg.h
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/evbarm/marvell/marvell_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/arm/cpufunc.c
diff -u src/sys/arch/arm/arm/cpufunc.c:1.153 src/sys/arch/arm/arm/cpufunc.c:1.154
--- src/sys/arch/arm/arm/cpufunc.c:1.153 Fri Apr 17 13:39:01 2015
+++ src/sys/arch/arm/arm/cpufunc.c Thu May 14 05:39:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: cpufunc.c,v 1.153 2015/04/17 13:39:01 hsuenaga Exp $ */
+/* $NetBSD: cpufunc.c,v 1.154 2015/05/14 05:39:32 hsuenaga Exp $ */
/*
* arm7tdmi support code Copyright (c) 2001 John Fremlin
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.153 2015/04/17 13:39:01 hsuenaga Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.154 2015/05/14 05:39:32 hsuenaga Exp $");
#include "opt_compat_netbsd.h"
#include "opt_cpuoptions.h"
@@ -1371,8 +1371,7 @@ struct cpu_functions pj4bv7_cpufuncs = {
.cf_tlb_flushD = armv7_tlb_flushID,
.cf_tlb_flushD_SE = armv7_tlb_flushID_SE,
- /* Cache operations */
-
+ /* Cache operations (see also pj4bv7_setup) */
.cf_icache_sync_all = armv7_idcache_wbinv_all,
.cf_icache_sync_range = armv7_icache_sync_range,
@@ -1381,18 +1380,6 @@ struct cpu_functions pj4bv7_cpufuncs = {
.cf_dcache_inv_range = armv7_dcache_inv_range,
.cf_dcache_wb_range = armv7_dcache_wb_range,
-#if defined(L2CACHE_ENABLE) && \
- !defined(AURORA_IO_CACHE_COHERENCY) && \
- defined(ARMADAXP)
- .cf_sdcache_wbinv_range = armadaxp_sdcache_wbinv_range,
- .cf_sdcache_inv_range = armadaxp_sdcache_inv_range,
- .cf_sdcache_wb_range = armadaxp_sdcache_wb_range,
-#else
- .cf_sdcache_wbinv_range = (void *)cpufunc_nullop,
- .cf_sdcache_inv_range = (void *)cpufunc_nullop,
- .cf_sdcache_wb_range = (void *)cpufunc_nullop,
-#endif
-
.cf_idcache_wbinv_all = armv7_idcache_wbinv_all,
.cf_idcache_wbinv_range = armv7_idcache_wbinv_range,
@@ -3096,6 +3083,36 @@ pj4bv7_setup(char *args)
cpuctrl |= CPU_CONTROL_VECRELOC;
#endif
+#ifdef L2CACHE_ENABLE
+ /* Setup L2 cache */
+ arm_scache.cache_type = CPU_CT_CTYPE_WT;
+ arm_scache.cache_unified = 1;
+ arm_scache.dcache_type = arm_scache.icache_type = CACHE_TYPE_PIPT;
+ arm_scache.dcache_size = arm_scache.icache_size = ARMADAXP_L2_SIZE;
+ arm_scache.dcache_ways = arm_scache.icache_ways = ARMADAXP_L2_WAYS;
+ arm_scache.dcache_way_size = arm_scache.icache_way_size =
+ ARMADAXP_L2_WAY_SIZE;
+ arm_scache.dcache_line_size = arm_scache.icache_line_size =
+ ARMADAXP_L2_LINE_SIZE;
+ arm_scache.dcache_sets = arm_scache.icache_sets =
+ ARMADAXP_L2_SETS;
+
+ cpufuncs.cf_sdcache_wbinv_range = armadaxp_sdcache_wbinv_range;
+ cpufuncs.cf_sdcache_inv_range = armadaxp_sdcache_inv_range;
+ cpufuncs.cf_sdcache_wb_range = armadaxp_sdcache_wb_range;
+#endif
+
+#ifdef AURORA_IO_CACHE_COHERENCY
+ /* use AMBA and I/O Coherency Fabric to maintain cache */
+ cpufuncs.cf_dcache_wbinv_range = pj4b_dcache_cfu_wbinv_range;
+ cpufuncs.cf_dcache_inv_range = pj4b_dcache_cfu_inv_range;
+ cpufuncs.cf_dcache_wb_range = pj4b_dcache_cfu_wb_range;
+
+ cpufuncs.cf_sdcache_wbinv_range = (void *)cpufunc_nullop;
+ cpufuncs.cf_sdcache_inv_range = (void *)cpufunc_nullop;
+ cpufuncs.cf_sdcache_wb_range = (void *)cpufunc_nullop;
+#endif
+
/* Clear out the cache */
cpu_idcache_wbinv_all();
@@ -3104,6 +3121,9 @@ pj4bv7_setup(char *args)
/* And again. */
cpu_idcache_wbinv_all();
+#ifdef L2CACHE_ENABLE
+ armadaxp_sdcache_wbinv_all();
+#endif
curcpu()->ci_ctrl = cpuctrl;
}
Index: src/sys/arch/arm/arm/cpufunc_asm_pj4b.S
diff -u src/sys/arch/arm/arm/cpufunc_asm_pj4b.S:1.7 src/sys/arch/arm/arm/cpufunc_asm_pj4b.S:1.8
--- src/sys/arch/arm/arm/cpufunc_asm_pj4b.S:1.7 Wed Apr 15 10:52:18 2015
+++ src/sys/arch/arm/arm/cpufunc_asm_pj4b.S Thu May 14 05:39:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: cpufunc_asm_pj4b.S,v 1.7 2015/04/15 10:52:18 hsuenaga Exp $ */
+/* $NetBSD: cpufunc_asm_pj4b.S,v 1.8 2015/05/14 05:39:32 hsuenaga Exp $ */
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
@@ -41,9 +41,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
#include <arm/asm.h>
#include <arm/locore.h>
-.Lpj4b_cache_line_size:
- .word _C_LABEL(arm_dcache_align)
+.Lpj4b_l2_barrier_reg:
+ .word _C_LABEL(armadaxp_l2_barrier_reg)
+/* LINTSTUB: void pj4b_cpu_sleep(int); */
ENTRY(pj4b_cpu_sleep)
dsb
wfi @ wait for an interrupt
@@ -51,6 +52,7 @@ ENTRY(pj4b_cpu_sleep)
b irq_idle_entry @ assume we got an interrupt
END(pj4b_cpu_sleep)
+/* LINTSTUB: void pj4b_config(void); */
ENTRY(pj4b_config)
/* Set Auxiliary Debug Modes Control 0 register */
mrc p15, 1, r0, c15, c1, 0
@@ -87,3 +89,21 @@ ENTRY(pj4b_config)
RET
END(pj4b_config)
+
+/* LINTSTUB: void pj4b_io_coherency_barrier(vaddr_t, paddr_t, vsize_t); */
+ENTRY_NP(pj4b_io_coherency_barrier)
+ ldr r0, .Lpj4b_l2_barrier_reg
+ ldr r0, [r0] @ MVSOC_MLMB_CIB_BARRIER
+ mov r1, #1 @ MVSOC_MLMB_CIB_BARRIER_TRIGGER
+ str r1, [r0]
+1:
+ ldr r1, [r0]
+ tst r1, #1
+ beq 1b
+ dsb
+ RET
+END(pj4b_io_coherency_barrier)
+
+STRONG_ALIAS(pj4b_dcache_cfu_wbinv_range, pj4b_io_coherency_barrier)
+STRONG_ALIAS(pj4b_dcache_cfu_inv_range, pj4b_io_coherency_barrier)
+STRONG_ALIAS(pj4b_dcache_cfu_wb_range, pj4b_io_coherency_barrier)
Index: src/sys/arch/arm/include/cpufunc_proto.h
diff -u src/sys/arch/arm/include/cpufunc_proto.h:1.4 src/sys/arch/arm/include/cpufunc_proto.h:1.5
--- src/sys/arch/arm/include/cpufunc_proto.h:1.4 Wed Apr 15 10:52:18 2015
+++ src/sys/arch/arm/include/cpufunc_proto.h Thu May 14 05:39:32 2015
@@ -326,6 +326,10 @@ void armv7_setup(char *string);
void pj4b_cpu_sleep(int);
void pj4bv7_setup(char *string);
void pj4b_config(void);
+void pj4b_io_coherency_barrier(vaddr_t, paddr_t, vsize_t);
+void pj4b_dcache_cfu_inv_range(vaddr_t, vsize_t);
+void pj4b_dcache_cfu_wb_range(vaddr_t, vsize_t);
+void pj4b_dcache_cfu_wbinv_range(vaddr_t, vsize_t);
#endif /* CPU_PJ4B */
#if defined(CPU_ARM1136) || defined(CPU_ARM1176)
Index: src/sys/arch/arm/marvell/armadaxp.c
diff -u src/sys/arch/arm/marvell/armadaxp.c:1.12 src/sys/arch/arm/marvell/armadaxp.c:1.13
--- src/sys/arch/arm/marvell/armadaxp.c:1.12 Sun May 3 06:29:31 2015
+++ src/sys/arch/arm/marvell/armadaxp.c Thu May 14 05:39:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: armadaxp.c,v 1.12 2015/05/03 06:29:31 hsuenaga Exp $ */
+/* $NetBSD: armadaxp.c,v 1.13 2015/05/14 05:39:32 hsuenaga Exp $ */
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
@@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
*******************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: armadaxp.c,v 1.12 2015/05/03 06:29:31 hsuenaga Exp $");
+__KERNEL_RCSID(0, "$NetBSD: armadaxp.c,v 1.13 2015/05/14 05:39:32 hsuenaga Exp $");
#define _INTR_PRIVATE
@@ -89,6 +89,7 @@ int l2cache_state = 0;
int iocc_state = 0;
#define read_miscreg(r) (*(volatile uint32_t *)(misc_base + (r)))
vaddr_t misc_base;
+vaddr_t armadaxp_l2_barrier_reg;
extern void (*mvsoc_intr_init)(void);
static void armadaxp_intr_init(void);
@@ -432,11 +433,18 @@ armadaxp_l2_init(bus_addr_t pbase)
return (-1);
}
+ /* Variables for cpufunc_asm_pj4b.S */
+ armadaxp_l2_barrier_reg = mlmb_base + MVSOC_MLMB_CIB_BARRIER_TRIGGER;
+
/* Set L2 policy */
reg = L2_READ(ARMADAXP_L2_AUX_CTRL);
- reg &= ~(L2_WBWT_MODE_MASK);
- reg &= ~(L2_REP_STRAT_MASK);
- reg |= L2_REP_STRAT_SEMIPLRU;
+ reg &= ~(L2_AUX_WBWT_MODE_MASK);
+ reg &= ~(L2_AUX_REP_STRAT_MASK);
+ reg |= L2_AUX_WBWT_MODE_WB;
+ reg |= L2_AUX_ECC_ENABLE;
+ reg |= L2_AUX_PARITY_ENABLE;
+ reg |= L2_AUX_FORCE_WA;
+ reg |= L2_AUX_REP_STRAT_SEMIPLRU;
L2_WRITE(ARMADAXP_L2_AUX_CTRL, reg);
/* Invalidate L2 cache */
@@ -460,7 +468,7 @@ armadaxp_l2_init(bus_addr_t pbase)
/* Enable L2 cache */
reg = L2_READ(ARMADAXP_L2_CTRL);
- L2_WRITE(ARMADAXP_L2_CTRL, reg | L2_ENABLE);
+ L2_WRITE(ARMADAXP_L2_CTRL, reg | L2_CTRL_ENABLE);
/* Mark as enabled */
l2cache_state = 1;
@@ -497,39 +505,88 @@ armadaxp_sdcache_wbinv_all(void)
__asm__ __volatile__("dsb");
}
+static paddr_t
+armadaxp_sdcache_wbalign_base(vaddr_t va, paddr_t pa, psize_t sz)
+{
+ paddr_t line_start = pa & ~ARMADAXP_L2_ALIGN;
+ vaddr_t save_start;
+ uint8_t save_buf[ARMADAXP_L2_LINE_SIZE];
+ size_t unalign;
+
+ unalign = va & ARMADAXP_L2_ALIGN;
+ if (unalign == 0)
+ return line_start; /* request is aligned to cache line size */
+
+ /* save data that is not intended to invalidate */
+ save_start = va & ~ARMADAXP_L2_ALIGN;
+ memcpy(save_buf, (void *)save_start, unalign);
+
+ /* invalidate include saved data */
+ L2_WRITE(ARMADAXP_L2_INV_PHYS, line_start);
+
+ /* write back saved data */
+ memcpy((void *)save_start, save_buf, unalign);
+ L2_WRITE(ARMADAXP_L2_WB_PHYS, line_start);
+ L2_WRITE(ARMADAXP_L2_SYNC, 0);
+ __asm__ __volatile__("dsb");
+
+ return line_start;
+}
+
+static paddr_t
+armadaxp_sdcache_wbalign_end(vaddr_t va, paddr_t pa, psize_t sz)
+{
+ paddr_t line_start = (pa + sz - 1) & ~ARMADAXP_L2_ALIGN;
+ vaddr_t save_start = va + sz;
+ uint8_t save_buf[ARMADAXP_L2_LINE_SIZE];
+ size_t save_len;
+ size_t unalign;
+
+ unalign = save_start & ARMADAXP_L2_ALIGN;
+ if (unalign == 0)
+ return line_start; /* request is aligned to cache line size */
+
+ /* save data that is not intended to invalidate */
+ save_len = ARMADAXP_L2_LINE_SIZE - unalign;
+ memcpy(save_buf, (void *)save_start, save_len);
+
+ /* invalidate include saved data */
+ L2_WRITE(ARMADAXP_L2_INV_PHYS, line_start);
+
+ /* write back saved data */
+ memcpy((void *)save_start, save_buf, save_len);
+ L2_WRITE(ARMADAXP_L2_WB_PHYS, line_start);
+ __asm__ __volatile__("dsb");
+
+ return line_start;
+}
+
void
armadaxp_sdcache_inv_range(vaddr_t va, paddr_t pa, psize_t sz)
{
- paddr_t pa_base = pa;
- paddr_t pa_end = pa + sz - 1;
+ paddr_t pa_base;
+ paddr_t pa_end;
- /* need write back if boundary is not aligned */
- if (pa_base & 0x1f)
- L2_WRITE(ARMADAXP_L2_WB_PHYS, (pa_base & ~0x1f));
- if (pa_end & 0x1f)
- L2_WRITE(ARMADAXP_L2_WB_PHYS, (pa_end & ~0x1f));
- L2_WRITE(ARMADAXP_L2_SYNC, 0);
- __asm__ __volatile__("dsb");
+ /* align and write-back the boundary */
+ pa_base = armadaxp_sdcache_wbalign_base(va, pa, sz);
+ pa_end = armadaxp_sdcache_wbalign_end(va, pa, sz);
/* invalidate other cache */
- pa_base &= ~0x1f;
- pa_end &= ~0x1f;
- if (pa_base == pa_end)
+ if (pa_base == pa_end) {
L2_WRITE(ARMADAXP_L2_INV_PHYS, pa_base);
- else {
- L2_WRITE(ARMADAXP_L2_RANGE_BASE, pa_base);
- L2_WRITE(ARMADAXP_L2_INV_RANGE, pa_end);
+ return;
}
+
+ L2_WRITE(ARMADAXP_L2_RANGE_BASE, pa_base);
+ L2_WRITE(ARMADAXP_L2_INV_RANGE, pa_end);
}
void
armadaxp_sdcache_wb_range(vaddr_t va, paddr_t pa, psize_t sz)
{
- paddr_t pa_base = pa;
- paddr_t pa_end = pa + sz - 1;
+ paddr_t pa_base = pa & ~ARMADAXP_L2_ALIGN;
+ paddr_t pa_end = (pa + sz - 1) & ~ARMADAXP_L2_ALIGN;
- pa_base &= ~0x1f;
- pa_end &= ~0x1f;
if (pa_base == pa_end)
L2_WRITE(ARMADAXP_L2_WB_PHYS, pa_base);
else {
@@ -543,11 +600,9 @@ armadaxp_sdcache_wb_range(vaddr_t va, pa
void
armadaxp_sdcache_wbinv_range(vaddr_t va, paddr_t pa, psize_t sz)
{
- paddr_t pa_base = pa;
- paddr_t pa_end = pa + sz - 1;
+ paddr_t pa_base = pa & ~ARMADAXP_L2_ALIGN;;
+ paddr_t pa_end = (pa + sz - 1) & ~ARMADAXP_L2_ALIGN;
- pa_base &= ~0x1f;
- pa_end &= ~0x1f;
if (pa_base == pa_end)
L2_WRITE(ARMADAXP_L2_WBINV_PHYS, pa_base);
else {
@@ -565,19 +620,22 @@ armadaxp_io_coherency_init(void)
/* set CIB read snoop command to ReadUnique */
reg = read_mlmbreg(MVSOC_MLMB_CIB_CTRL_CFG);
- reg &= ~(7 << 16);
- reg |= (7 << 16);
+ reg |= MVSOC_MLMB_CIB_CTRL_CFG_WB_EN;
write_mlmbreg(MVSOC_MLMB_CIB_CTRL_CFG, reg);
+
/* enable CPUs in SMP group on Fabric coherency */
- reg = read_mlmbreg(MVSOC_MLMB_COHERENCY_FABRIC_CTRL);
- reg &= ~(0x3 << 24);
- reg |= (1 << 24);
- write_mlmbreg(MVSOC_MLMB_COHERENCY_FABRIC_CTRL, reg);
-
- reg = read_mlmbreg(MVSOC_MLMB_COHERENCY_FABRIC_CFG);
- reg &= ~(0x3 << 24);
- reg |= (1 << 24);
- write_mlmbreg(MVSOC_MLMB_COHERENCY_FABRIC_CFG, reg);
+ reg = read_mlmbreg(MVSOC_MLMB_CFU_CTRL);
+ reg |= MVSOC_MLMB_CFU_CTRL_SNOOP_CPU0;
+ write_mlmbreg(MVSOC_MLMB_CFU_CTRL, reg);
+
+ /* send all snoop request to L2 cache */
+ reg = read_mlmbreg(MVSOC_MLMB_CFU_CFG);
+#ifdef L2CACHE_ENABLE
+ reg |= MVSOC_MLMB_CFU_CFG_L2_NOTIFY;
+#else
+ reg &= ~MVSOC_MLMB_CFU_CFG_L2_NOTIFY;
+#endif
+ write_mlmbreg(MVSOC_MLMB_CFU_CFG, reg);
/* Mark as enabled */
iocc_state = 1;
Index: src/sys/arch/arm/marvell/armadaxpreg.h
diff -u src/sys/arch/arm/marvell/armadaxpreg.h:1.3 src/sys/arch/arm/marvell/armadaxpreg.h:1.4
--- src/sys/arch/arm/marvell/armadaxpreg.h:1.3 Wed Apr 15 10:40:36 2015
+++ src/sys/arch/arm/marvell/armadaxpreg.h Thu May 14 05:39:32 2015
@@ -75,7 +75,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
#define ARMADAXP_ATTR_PEX3_MEM 0xf8
#define ARMADAXP_ATTR_PEX3_IO 0xf0
-
#define ARMADAXP_IRQ_GBE0_TH_RXTX 8 /* GBE0_TH_RXTX_Int */
#define ARMADAXP_IRQ_GBE1_TH_RXTX 10 /* GBE1_TH_RXTX_Int */
#define ARMADAXP_IRQ_GBE2_TH_RXTX 12 /* GBE2_TH_RXTX_Int */
@@ -239,10 +238,45 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
#define ARMADAXP_L2_WBINV_RANGE 0x7f4
#define ARMADAXP_L2_WBINV_IDXWAY 0x7f8
#define ARMADAXP_L2_WBINV_WAY 0x7fc
-#define L2_ENABLE (1 << 0)
-#define L2_WBWT_MODE_MASK (3 << 0)
-#define L2_REP_STRAT_MASK (3 << 27)
-#define L2_REP_STRAT_SEMIPLRU (3 << 27)
+
+/* Cache line size */
+#define ARMADAXP_L2_SIZE (256 * 1024) /* bytes */
+#define ARMADAXP_L2_LINE_SIZE 32
+#define ARMADAXP_L2_ALIGN (ARMADAXP_L2_LINE_SIZE - 1)
+#define ARMADAXP_L2_WAYS 4
+#define ARMADAXP_L2_WAY_SIZE (ARMADAXP_L2_SIZE / ARMADAXP_L2_WAYS)
+#define ARMADAXP_L2_SETS \
+ (ARMADAXP_L2_WAY_SIZE / ARMADAXP_L2_LINE_SIZE)
+
+/* ARMADAXP_L2_CTRL */
+#define L2_CTRL_ENABLE (1 << 0)
+
+/* ARMADAXP_L2_AUX_CTRL */
+#define L2_AUX_WBWT_MODE_MASK (3 << 0)
+#define L2_AUX_WBWT_MODE_BY_ATTR (0 << 0)
+#define L2_AUX_WBWT_MODE_WB (1 << 0)
+#define L2_AUX_WBWT_MODE_WT (2 << 0)
+#define L2_AUX_FLUSH_ON_POWERDOWN (1 << 3)
+#define L2_AUX_ECC_ENABLE (1 << 20)
+#define L2_AUX_PARITY_ENABLE (1 << 21)
+#define L2_AUX_INVAL_UCE (1 << 22)
+#define L2_AUX_FORCE_WA (1 << 23)
+#define L2_AUX_REP_STRAT_MASK (3 << 27)
+#define L2_AUX_REP_STRAT_LFSR (1 << 27)
+#define L2_AUX_REP_STRAT_PLRU (2 << 27)
+#define L2_AUX_REP_STRAT_SEMIPLRU (3 << 27)
+#define L2_AUX_L2_SIZE_MASK (0x03 << 10)
+#define L2_AUX_L2_SIZE_256K (0x00 << 10)
+#define L2_AUX_L2_ASSOC_MASK (0x0f << 13)
+#define L2_AUX_L2_ASSOC_4WAY (0x03 << 13)
+#define L2_AUX_L2_WAY_MASK (0x07 << 17)
+#define L2_AUX_L2_WAY_16K (0x02 << 17)
+#define L2_AUX_L2_WAY_32K (0x03 << 17)
+#define L2_AUX_L2_WAY_64K (0x04 << 17)
+#define L2_AUX_L2_WAY_128K (0x05 << 17)
+#define L2_AUX_L2_WAY_256K (0x06 << 17)
+#define L2_AUX_L2_WAY_512K (0x07 << 17)
+
#define L2_ALL_WAYS 0xffffffff
/*
Index: src/sys/arch/arm/marvell/mvsocreg.h
diff -u src/sys/arch/arm/marvell/mvsocreg.h:1.9 src/sys/arch/arm/marvell/mvsocreg.h:1.10
--- src/sys/arch/arm/marvell/mvsocreg.h:1.9 Mon Feb 17 05:05:46 2014
+++ src/sys/arch/arm/marvell/mvsocreg.h Thu May 14 05:39:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: mvsocreg.h,v 1.9 2014/02/17 05:05:46 kiyohara Exp $ */
+/* $NetBSD: mvsocreg.h,v 1.10 2015/05/14 05:39:32 hsuenaga Exp $ */
/*
* Copyright (c) 2007, 2008 KIYOHARA Takashi
* All rights reserved.
@@ -129,11 +129,23 @@
#define MVSOC_MLMB_WINCR_SIZE_MASK 0xff000000
/* Coherent Fabric Control and Status */
-#define MVSOC_MLMB_COHERENCY_FABRIC_CTRL 0x200
-#define MVSOC_MLMB_COHERENCY_FABRIC_CFG 0x204
+#define MVSOC_MLMB_CFU_CTRL 0x200
+#define MVSOC_MLMB_CFU_CTRL_PROP_ERR (0x1 << 8)
+#define MVSOC_MLMB_CFU_CTRL_SNOOP_CPU0 (0x1 << 24)
+
+#define MVSOC_MLMB_CFU_CFG 0x228
+#define MVSOC_MLMB_CFU_CFG_L2_NOTIFY (0x1 << 16)
/* CIB registers offsets */
-#define MVSOC_MLMB_CIB_CTRL_CFG 0x280
+#define MVSOC_MLMB_CIB_CTRL_CFG 0x280
+#define MVSOC_MLMB_CIB_CTRL_CFG_WB_EN (0x1 << 0)
+#define MVSOC_MLMB_CIB_CTRL_CFG_STOP (0x1 << 9)
+#define MVSOC_MLMB_CIB_CTRL_CFG_IGN_SHARE (0x2 << 10)
+#define MVSOC_MLMB_CIB_CTRL_CFG_EMPTY (0x1 << 13)
+
+/* CIB barrier register */
+#define MVSOC_MLMB_CIB_BARRIER 0x1810
+#define MVSOC_MLMB_CIB_BARRIER_TRIGGER (0x1 << 0)
#define MVSOC_TMR_BASE (MVSOC_MLMB_BASE + 0x0300)
Index: src/sys/arch/evbarm/marvell/marvell_machdep.c
diff -u src/sys/arch/evbarm/marvell/marvell_machdep.c:1.30 src/sys/arch/evbarm/marvell/marvell_machdep.c:1.31
--- src/sys/arch/evbarm/marvell/marvell_machdep.c:1.30 Sat Aug 30 13:19:52 2014
+++ src/sys/arch/evbarm/marvell/marvell_machdep.c Thu May 14 05:39:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: marvell_machdep.c,v 1.30 2014/08/30 13:19:52 kiyohara Exp $ */
+/* $NetBSD: marvell_machdep.c,v 1.31 2015/05/14 05:39:32 hsuenaga Exp $ */
/*
* Copyright (c) 2007, 2008, 2010 KIYOHARA Takashi
* All rights reserved.
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: marvell_machdep.c,v 1.30 2014/08/30 13:19:52 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: marvell_machdep.c,v 1.31 2015/05/14 05:39:32 hsuenaga Exp $");
#include "opt_evbarm_boardtype.h"
#include "opt_ddb.h"
@@ -67,6 +67,7 @@ __KERNEL_RCSID(0, "$NetBSD: marvell_mach
#include <arm/marvell/kirkwoodreg.h>
#include <arm/marvell/mv78xx0reg.h>
#include <arm/marvell/armadaxpreg.h>
+#include <arm/marvell/armadaxpvar.h>
#include <arm/marvell/mvsocgppvar.h>
#include <evbarm/marvell/marvellreg.h>
@@ -345,11 +346,7 @@ initarm(void *arg)
#ifdef L2CACHE_ENABLE
/* Initialize L2 Cache */
- {
- extern int armadaxp_l2_init(bus_addr_t);
-
- (void)armadaxp_l2_init(MARVELL_INTERREGS_PBASE);
- }
+ armadaxp_l2_init(MARVELL_INTERREGS_PBASE);
#endif
#ifdef AURORA_IO_CACHE_COHERENCY