blob: bf0fad459bbde59c5a4d0d4869f24196dab99aec [file] [log] [blame]
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +09001/*
2 * Initialization of ARM Corelink CCI-500 Cache Coherency Interconnect
3 *
Masahiro Yamada4e3d8402016-07-19 21:56:13 +09004 * Copyright (C) 2016 Socionext Inc.
5 * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +09006 *
7 * SPDX-License-Identifier: GPL-2.0+
8 */
9
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +090010#include <linux/bitops.h>
11#include <linux/io.h>
12#include <linux/sizes.h>
13
Masahiro Yamada1d21e1b2017-06-22 16:42:04 +090014#include "../init.h"
15
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +090016#define CCI500_BASE 0x5FD00000
17#define CCI500_SLAVE_OFFSET 0x1000
18
19#define CCI500_SNOOP_CTRL
20#define CCI500_SNOOP_CTRL_EN_DVM BIT(1)
21#define CCI500_SNOOP_CTRL_EN_SNOOP BIT(0)
22
23void cci500_init(unsigned int nr_slaves)
24{
25 unsigned long slave_base = CCI500_BASE + CCI500_SLAVE_OFFSET;
26 int i;
27
28 for (i = 0; i < nr_slaves; i++) {
29 void __iomem *base;
30 u32 tmp;
31
Masahiro Yamada4e3d8402016-07-19 21:56:13 +090032 base = ioremap(slave_base, SZ_4K);
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +090033
34 tmp = readl(base);
35 tmp |= CCI500_SNOOP_CTRL_EN_DVM | CCI500_SNOOP_CTRL_EN_SNOOP;
36 writel(tmp, base);
37
Masahiro Yamada4e3d8402016-07-19 21:56:13 +090038 iounmap(base);
Masahiro Yamada9d0c2ce2016-04-21 14:43:18 +090039
40 slave_base += CCI500_SLAVE_OFFSET;
41 }
42}