summaryrefslogtreecommitdiffstats
path: root/sys/arm/mv
diff options
context:
space:
mode:
authorzbb <zbb@FreeBSD.org>2016-06-02 18:33:26 +0000
committerzbb <zbb@FreeBSD.org>2016-06-02 18:33:26 +0000
commitb408dead16d7c05d7bccafd522bb42c5358195ac (patch)
tree77c855e64515fe6ceb6b9d1810e97459e544f502 /sys/arm/mv
parent4f50db82704b83f0e922df1c00524872f9bbd88a (diff)
downloadFreeBSD-src-b408dead16d7c05d7bccafd522bb42c5358195ac.zip
FreeBSD-src-b408dead16d7c05d7bccafd522bb42c5358195ac.tar.gz
Configure CPU window to second CESA SRAM
Check if there is a second CESA SRAM node in FDT and add a CPU window for it. Define A38X specific macro for setting device attribute for each node. Submitted by: Michal Stanek <mst@semihalf.com> Obtained from: Semihalf Sponsored by: Stormshield Differential revision: https://reviews.freebsd.org/D6216
Diffstat (limited to 'sys/arm/mv')
-rw-r--r--sys/arm/mv/mv_common.c31
-rw-r--r--sys/arm/mv/mvwin.h13
2 files changed, 44 insertions, 0 deletions
diff --git a/sys/arm/mv/mv_common.c b/sys/arm/mv/mv_common.c
index 55e3cd1..e24612c 100644
--- a/sys/arm/mv/mv_common.c
+++ b/sys/arm/mv/mv_common.c
@@ -2107,6 +2107,37 @@ moveon:
return (EINVAL);
cpu_win_tbl[t].target = MV_WIN_CESA_TARGET;
+#ifdef SOC_MV_ARMADA38X
+ cpu_win_tbl[t].attr = MV_WIN_CESA_ATTR(0);
+#else
+ cpu_win_tbl[t].attr = MV_WIN_CESA_ATTR(1);
+#endif
+ cpu_win_tbl[t].base = sram_base;
+ cpu_win_tbl[t].size = sram_size;
+ cpu_win_tbl[t].remap = ~0;
+ cpu_wins_no++;
+ debugf("sram: base = 0x%0lx size = 0x%0lx\n", sram_base, sram_size);
+
+ /* Check if there is a second CESA node */
+ while ((node = OF_peer(node)) != 0) {
+ if (fdt_is_compatible(node, "mrvl,cesa-sram")) {
+ if (fdt_regsize(node, &sram_base, &sram_size) != 0)
+ return (EINVAL);
+ break;
+ }
+ }
+
+ if (node == 0)
+ return (0);
+
+ t++;
+ if (t >= ((sizeof(cpu_win_tbl))/(sizeof(cpu_win_tbl[0])))) {
+ debugf("cannot fit CESA tuple into cpu_win_tbl\n");
+ return (ENOMEM);
+ }
+
+ /* Configure window for CESA1 */
+ cpu_win_tbl[t].target = MV_WIN_CESA_TARGET;
cpu_win_tbl[t].attr = MV_WIN_CESA_ATTR(1);
cpu_win_tbl[t].base = sram_base;
cpu_win_tbl[t].size = sram_size;
diff --git a/sys/arm/mv/mvwin.h b/sys/arm/mv/mvwin.h
index a9c2b8c..7e773a9 100644
--- a/sys/arm/mv/mvwin.h
+++ b/sys/arm/mv/mvwin.h
@@ -233,6 +233,19 @@
* 2: engine0
*/
#define MV_WIN_CESA_ATTR(eng_sel) (1 | ((eng_sel) << 2))
+#elif defined(SOC_MV_ARMADA38X)
+#define MV_WIN_CESA_TARGET 9
+/*
+ * Bits [1:0] = Data swapping
+ * 0x0 = Byte swap
+ * 0x1 = No swap
+ * 0x2 = Byte and word swap
+ * 0x3 = Word swap
+ * Bits [4:2] = CESA select:
+ * 0x6 = CESA0
+ * 0x5 = CESA1
+ */
+#define MV_WIN_CESA_ATTR(eng_sel) (0x11 | (1 << (3 - (eng_sel))))
#else
#define MV_WIN_CESA_TARGET 3
#define MV_WIN_CESA_ATTR(eng_sel) 0
OpenPOWER on IntegriCloud