diff options
author | zbb <zbb@FreeBSD.org> | 2016-06-02 18:33:26 +0000 |
---|---|---|
committer | zbb <zbb@FreeBSD.org> | 2016-06-02 18:33:26 +0000 |
commit | b408dead16d7c05d7bccafd522bb42c5358195ac (patch) | |
tree | 77c855e64515fe6ceb6b9d1810e97459e544f502 | |
parent | 4f50db82704b83f0e922df1c00524872f9bbd88a (diff) | |
download | FreeBSD-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
-rw-r--r-- | sys/arm/mv/mv_common.c | 31 | ||||
-rw-r--r-- | sys/arm/mv/mvwin.h | 13 |
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 |