xref: /netbsd-src/sys/arch/arm/marvell/mvsoc.c (revision 4e7cd6980945784a5920db424192dc10d2f6a15a)
1*4e7cd698Smsaitoh /*	$NetBSD: mvsoc.c,v 1.33 2023/06/19 08:40:29 msaitoh Exp $	*/
252d286fbSkiyohara /*
3a4c1b5d6Skiyohara  * Copyright (c) 2007, 2008, 2013, 2014, 2016 KIYOHARA Takashi
452d286fbSkiyohara  * All rights reserved.
552d286fbSkiyohara  *
652d286fbSkiyohara  * Redistribution and use in source and binary forms, with or without
752d286fbSkiyohara  * modification, are permitted provided that the following conditions
852d286fbSkiyohara  * are met:
952d286fbSkiyohara  * 1. Redistributions of source code must retain the above copyright
1052d286fbSkiyohara  *    notice, this list of conditions and the following disclaimer.
1152d286fbSkiyohara  * 2. Redistributions in binary form must reproduce the above copyright
1252d286fbSkiyohara  *    notice, this list of conditions and the following disclaimer in the
1352d286fbSkiyohara  *    documentation and/or other materials provided with the distribution.
1452d286fbSkiyohara  *
1552d286fbSkiyohara  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1652d286fbSkiyohara  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1752d286fbSkiyohara  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1852d286fbSkiyohara  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
1952d286fbSkiyohara  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2052d286fbSkiyohara  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2152d286fbSkiyohara  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2252d286fbSkiyohara  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2352d286fbSkiyohara  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
2452d286fbSkiyohara  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2552d286fbSkiyohara  * POSSIBILITY OF SUCH DAMAGE.
2652d286fbSkiyohara  */
2752d286fbSkiyohara 
2852d286fbSkiyohara #include <sys/cdefs.h>
29*4e7cd698Smsaitoh __KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.33 2023/06/19 08:40:29 msaitoh Exp $");
3052d286fbSkiyohara 
3152d286fbSkiyohara #include "opt_cputypes.h"
3252d286fbSkiyohara #include "opt_mvsoc.h"
33761e6dbdShsuenaga #ifdef ARMADAXP
344e3bd610Shsuenaga #include "mvxpe.h"
351a8031e1Shsuenaga #include "mvxpsec.h"
36761e6dbdShsuenaga #endif
3752d286fbSkiyohara 
3852d286fbSkiyohara #include <sys/param.h>
39761e6dbdShsuenaga #include <sys/boot_flag.h>
40761e6dbdShsuenaga #include <sys/systm.h>
4152d286fbSkiyohara #include <sys/bus.h>
4252d286fbSkiyohara #include <sys/device.h>
4352d286fbSkiyohara #include <sys/errno.h>
4452d286fbSkiyohara 
4552d286fbSkiyohara #include <dev/pci/pcidevs.h>
4652d286fbSkiyohara #include <dev/pci/pcireg.h>
4752d286fbSkiyohara #include <dev/marvell/marvellreg.h>
4852d286fbSkiyohara #include <dev/marvell/marvellvar.h>
4952d286fbSkiyohara 
5052d286fbSkiyohara #include <arm/marvell/mvsocreg.h>
5152d286fbSkiyohara #include <arm/marvell/mvsocvar.h>
5252d286fbSkiyohara #include <arm/marvell/orionreg.h>
5352d286fbSkiyohara #include <arm/marvell/kirkwoodreg.h>
547fc0e74eSkiyohara #include <arm/marvell/mv78xx0reg.h>
55a4c1b5d6Skiyohara #include <arm/marvell/dovereg.h>
56761e6dbdShsuenaga #include <arm/marvell/armadaxpvar.h>
577fc0e74eSkiyohara #include <arm/marvell/armadaxpreg.h>
5852d286fbSkiyohara 
597fc0e74eSkiyohara #include <uvm/uvm.h>
60a9160f60Srkujawa 
6152d286fbSkiyohara #include "locators.h"
6252d286fbSkiyohara 
632a16a1d4Smatt #ifdef MVSOC_CONSOLE_EARLY
642a16a1d4Smatt #include <dev/ic/ns16550reg.h>
652a16a1d4Smatt #include <dev/ic/comreg.h>
662a16a1d4Smatt #include <dev/cons.h>
672a16a1d4Smatt #endif
6852d286fbSkiyohara 
6952d286fbSkiyohara static int mvsoc_match(device_t, struct cfdata *, void *);
7052d286fbSkiyohara static void mvsoc_attach(device_t, device_t, void *);
7152d286fbSkiyohara 
7252d286fbSkiyohara static int mvsoc_print(void *, const char *);
7352d286fbSkiyohara static int mvsoc_search(device_t, cfdata_t, const int *, void *);
7452d286fbSkiyohara 
7551f2e145Skiyohara static int mvsoc_target_ddr(uint32_t, uint32_t *, uint32_t *);
7651f2e145Skiyohara static int mvsoc_target_ddr3(uint32_t, uint32_t *, uint32_t *);
77a4c1b5d6Skiyohara static int mvsoc_target_axi(int, uint32_t *, uint32_t *);
7851f2e145Skiyohara static int mvsoc_target_peripheral(uint32_t, uint32_t, uint32_t *, uint32_t *);
7951f2e145Skiyohara 
8052d286fbSkiyohara uint32_t mvPclk, mvSysclk, mvTclk = 0;
8152d286fbSkiyohara int nwindow = 0, nremap = 0;
8252d286fbSkiyohara static vaddr_t regbase = 0xffffffff, dsc_base, pex_base;
837fc0e74eSkiyohara vaddr_t mlmb_base;
8452d286fbSkiyohara 
8552d286fbSkiyohara void (*mvsoc_intr_init)(void);
864200b0baSkiyohara int (*mvsoc_clkgating)(struct marvell_attach_args *);
8752d286fbSkiyohara 
8852d286fbSkiyohara 
892a16a1d4Smatt #ifdef MVSOC_CONSOLE_EARLY
902a16a1d4Smatt static vaddr_t com_base;
912a16a1d4Smatt 
922a16a1d4Smatt static inline uint32_t
uart_read(bus_size_t o)932a16a1d4Smatt uart_read(bus_size_t o)
942a16a1d4Smatt {
957d0ac446Srin 	return le32toh(*(volatile uint32_t *)(com_base + (o << 2)));
962a16a1d4Smatt }
972a16a1d4Smatt 
982a16a1d4Smatt static inline void
uart_write(bus_size_t o,uint32_t v)992a16a1d4Smatt uart_write(bus_size_t o, uint32_t v)
1002a16a1d4Smatt {
1017d0ac446Srin 	*(volatile uint32_t *)(com_base + (o << 2)) = htole32(v);
1022a16a1d4Smatt }
1032a16a1d4Smatt 
1042a16a1d4Smatt static int
mvsoc_cngetc(dev_t dv)1052a16a1d4Smatt mvsoc_cngetc(dev_t dv)
1062a16a1d4Smatt {
1072a16a1d4Smatt         if ((uart_read(com_lsr) & LSR_RXRDY) == 0)
1082a16a1d4Smatt 		return -1;
1092a16a1d4Smatt 
1102a16a1d4Smatt 	return uart_read(com_data) & 0xff;
1112a16a1d4Smatt }
1122a16a1d4Smatt 
1132a16a1d4Smatt static void
mvsoc_cnputc(dev_t dv,int c)1142a16a1d4Smatt mvsoc_cnputc(dev_t dv, int c)
1152a16a1d4Smatt {
1162a16a1d4Smatt 	int timo = 150000;
1172a16a1d4Smatt 
1182a16a1d4Smatt         while ((uart_read(com_lsr) & LSR_TXRDY) == 0 && --timo > 0)
1192a16a1d4Smatt 		;
1202a16a1d4Smatt 
1212a16a1d4Smatt 	uart_write(com_data, c);
1222a16a1d4Smatt 
1232a16a1d4Smatt 	timo = 150000;
1242a16a1d4Smatt         while ((uart_read(com_lsr) & LSR_TSRE) == 0 && --timo > 0)
1252a16a1d4Smatt 		;
1262a16a1d4Smatt }
1272a16a1d4Smatt 
1282a16a1d4Smatt static struct consdev mvsoc_earlycons = {
1292a16a1d4Smatt 	.cn_putc = mvsoc_cnputc,
1302a16a1d4Smatt 	.cn_getc = mvsoc_cngetc,
1312a16a1d4Smatt 	.cn_pollc = nullcnpollc,
1322a16a1d4Smatt };
1332a16a1d4Smatt #endif
1342a16a1d4Smatt 
1352a16a1d4Smatt 
13652d286fbSkiyohara /* attributes */
13752d286fbSkiyohara static struct {
13852d286fbSkiyohara 	int tag;
13952d286fbSkiyohara 	uint32_t attr;
14052d286fbSkiyohara 	uint32_t target;
14152d286fbSkiyohara } mvsoc_tags[] = {
14252d286fbSkiyohara 	{ MARVELL_TAG_SDRAM_CS0,
14352d286fbSkiyohara 	  MARVELL_ATTR_SDRAM_CS0,	MVSOC_UNITID_DDR },
14452d286fbSkiyohara 	{ MARVELL_TAG_SDRAM_CS1,
14552d286fbSkiyohara 	  MARVELL_ATTR_SDRAM_CS1,	MVSOC_UNITID_DDR },
14652d286fbSkiyohara 	{ MARVELL_TAG_SDRAM_CS2,
14752d286fbSkiyohara 	  MARVELL_ATTR_SDRAM_CS2,	MVSOC_UNITID_DDR },
14852d286fbSkiyohara 	{ MARVELL_TAG_SDRAM_CS3,
14952d286fbSkiyohara 	  MARVELL_ATTR_SDRAM_CS3,	MVSOC_UNITID_DDR },
15052d286fbSkiyohara 
151a4c1b5d6Skiyohara 	{ MARVELL_TAG_AXI_CS0,
152a4c1b5d6Skiyohara 	  MARVELL_ATTR_AXI_DDR,		MVSOC_UNITID_DDR },
153a4c1b5d6Skiyohara 	{ MARVELL_TAG_AXI_CS1,
154a4c1b5d6Skiyohara 	  MARVELL_ATTR_AXI_DDR,		MVSOC_UNITID_DDR },
155a4c1b5d6Skiyohara 
15651f2e145Skiyohara 	{ MARVELL_TAG_DDR3_CS0,
15751f2e145Skiyohara 	  MARVELL_ATTR_SDRAM_CS0,	MVSOC_UNITID_DDR },
15851f2e145Skiyohara 	{ MARVELL_TAG_DDR3_CS1,
15951f2e145Skiyohara 	  MARVELL_ATTR_SDRAM_CS1,	MVSOC_UNITID_DDR },
16051f2e145Skiyohara 	{ MARVELL_TAG_DDR3_CS2,
16151f2e145Skiyohara 	  MARVELL_ATTR_SDRAM_CS2,	MVSOC_UNITID_DDR },
16251f2e145Skiyohara 	{ MARVELL_TAG_DDR3_CS3,
16351f2e145Skiyohara 	  MARVELL_ATTR_SDRAM_CS3,	MVSOC_UNITID_DDR },
16451f2e145Skiyohara 
16552d286fbSkiyohara #if defined(ORION)
16652d286fbSkiyohara 	{ ORION_TAG_DEVICE_CS0,
16752d286fbSkiyohara 	  ORION_ATTR_DEVICE_CS0,	MVSOC_UNITID_DEVBUS },
16852d286fbSkiyohara 	{ ORION_TAG_DEVICE_CS1,
16952d286fbSkiyohara 	  ORION_ATTR_DEVICE_CS1,	MVSOC_UNITID_DEVBUS },
17052d286fbSkiyohara 	{ ORION_TAG_DEVICE_CS2,
17152d286fbSkiyohara 	  ORION_ATTR_DEVICE_CS2,	MVSOC_UNITID_DEVBUS },
17252d286fbSkiyohara 	{ ORION_TAG_DEVICE_BOOTCS,
17352d286fbSkiyohara 	  ORION_ATTR_BOOT_CS,		MVSOC_UNITID_DEVBUS },
17452d286fbSkiyohara 	{ ORION_TAG_FLASH_CS,
17552d286fbSkiyohara 	  ORION_ATTR_FLASH_CS,		MVSOC_UNITID_DEVBUS },
17652d286fbSkiyohara 	{ ORION_TAG_PEX0_MEM,
177983ce0cbSkiyohara 	  ORION_ATTR_PEX_MEM,		MVSOC_UNITID_PEX },
17852d286fbSkiyohara 	{ ORION_TAG_PEX0_IO,
179983ce0cbSkiyohara 	  ORION_ATTR_PEX_IO,		MVSOC_UNITID_PEX },
18052d286fbSkiyohara 	{ ORION_TAG_PEX1_MEM,
18152d286fbSkiyohara 	  ORION_ATTR_PEX_MEM,		ORION_UNITID_PEX1 },
18252d286fbSkiyohara 	{ ORION_TAG_PEX1_IO,
18352d286fbSkiyohara 	  ORION_ATTR_PEX_IO,		ORION_UNITID_PEX1 },
18452d286fbSkiyohara 	{ ORION_TAG_PCI_MEM,
18552d286fbSkiyohara 	  ORION_ATTR_PCI_MEM,		ORION_UNITID_PCI },
18652d286fbSkiyohara 	{ ORION_TAG_PCI_IO,
18752d286fbSkiyohara 	  ORION_ATTR_PCI_IO,		ORION_UNITID_PCI },
18852d286fbSkiyohara 	{ ORION_TAG_CRYPT,
18952d286fbSkiyohara 	  ORION_ATTR_CRYPT,		ORION_UNITID_CRYPT },
19052d286fbSkiyohara #endif
19152d286fbSkiyohara 
19252d286fbSkiyohara #if defined(KIRKWOOD)
19352d286fbSkiyohara 	{ KIRKWOOD_TAG_NAND,
19452d286fbSkiyohara 	  KIRKWOOD_ATTR_NAND,		MVSOC_UNITID_DEVBUS },
19552d286fbSkiyohara 	{ KIRKWOOD_TAG_SPI,
19652d286fbSkiyohara 	  KIRKWOOD_ATTR_SPI,		MVSOC_UNITID_DEVBUS },
19752d286fbSkiyohara 	{ KIRKWOOD_TAG_BOOTROM,
19852d286fbSkiyohara 	  KIRKWOOD_ATTR_BOOTROM,	MVSOC_UNITID_DEVBUS },
19952d286fbSkiyohara 	{ KIRKWOOD_TAG_PEX_MEM,
200983ce0cbSkiyohara 	  KIRKWOOD_ATTR_PEX_MEM,	MVSOC_UNITID_PEX },
20152d286fbSkiyohara 	{ KIRKWOOD_TAG_PEX_IO,
202983ce0cbSkiyohara 	  KIRKWOOD_ATTR_PEX_IO,		MVSOC_UNITID_PEX },
203983ce0cbSkiyohara 	{ KIRKWOOD_TAG_PEX1_MEM,
204983ce0cbSkiyohara 	  KIRKWOOD_ATTR_PEX1_MEM,	MVSOC_UNITID_PEX },
205983ce0cbSkiyohara 	{ KIRKWOOD_TAG_PEX1_IO,
206983ce0cbSkiyohara 	  KIRKWOOD_ATTR_PEX1_IO,	MVSOC_UNITID_PEX },
20752d286fbSkiyohara 	{ KIRKWOOD_TAG_CRYPT,
20852d286fbSkiyohara 	  KIRKWOOD_ATTR_CRYPT,		KIRKWOOD_UNITID_CRYPT },
20952d286fbSkiyohara #endif
2107fc0e74eSkiyohara 
2117fc0e74eSkiyohara #if defined(MV78XX0)
2127fc0e74eSkiyohara 	{ MV78XX0_TAG_DEVICE_CS0,
2137fc0e74eSkiyohara 	  MV78XX0_ATTR_DEVICE_CS0,	MVSOC_UNITID_DEVBUS },
2147fc0e74eSkiyohara 	{ MV78XX0_TAG_DEVICE_CS1,
2157fc0e74eSkiyohara 	  MV78XX0_ATTR_DEVICE_CS1,	MVSOC_UNITID_DEVBUS },
2167fc0e74eSkiyohara 	{ MV78XX0_TAG_DEVICE_CS2,
2177fc0e74eSkiyohara 	  MV78XX0_ATTR_DEVICE_CS2,	MVSOC_UNITID_DEVBUS },
2187fc0e74eSkiyohara 	{ MV78XX0_TAG_DEVICE_CS3,
2197fc0e74eSkiyohara 	  MV78XX0_ATTR_DEVICE_CS3,	MVSOC_UNITID_DEVBUS },
2207fc0e74eSkiyohara 	{ MV78XX0_TAG_DEVICE_BOOTCS,
2217fc0e74eSkiyohara 	  MV78XX0_ATTR_BOOT_CS,		MVSOC_UNITID_DEVBUS },
2227fc0e74eSkiyohara 	{ MV78XX0_TAG_SPI,
2237fc0e74eSkiyohara 	  MV78XX0_ATTR_SPI,		MVSOC_UNITID_DEVBUS },
2247fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX0_MEM,
2257fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_0_MEM,	MVSOC_UNITID_PEX },
2267fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX01_MEM,
2277fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_1_MEM,	MVSOC_UNITID_PEX },
2287fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX02_MEM,
2297fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_2_MEM,	MVSOC_UNITID_PEX },
2307fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX03_MEM,
2317fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_3_MEM,	MVSOC_UNITID_PEX },
2327fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX0_IO,
2337fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_0_IO,	MVSOC_UNITID_PEX },
2347fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX01_IO,
2357fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_1_IO,	MVSOC_UNITID_PEX },
2367fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX02_IO,
2377fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_2_IO,	MVSOC_UNITID_PEX },
2387fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX03_IO,
2397fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_3_IO,	MVSOC_UNITID_PEX },
2407fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX1_MEM,
2417fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_0_MEM,	MV78XX0_UNITID_PEX1 },
2427fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX11_MEM,
2437fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_1_MEM,	MV78XX0_UNITID_PEX1 },
2447fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX12_MEM,
2457fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_2_MEM,	MV78XX0_UNITID_PEX1 },
2467fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX13_MEM,
2477fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_3_MEM,	MV78XX0_UNITID_PEX1 },
2487fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX1_IO,
2497fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_0_IO,	MV78XX0_UNITID_PEX1 },
2507fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX11_IO,
2517fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_1_IO,	MV78XX0_UNITID_PEX1 },
2527fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX12_IO,
2537fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_2_IO,	MV78XX0_UNITID_PEX1 },
2547fc0e74eSkiyohara 	{ MV78XX0_TAG_PEX13_IO,
2557fc0e74eSkiyohara 	  MV78XX0_ATTR_PEX_3_IO,	MV78XX0_UNITID_PEX1 },
2567fc0e74eSkiyohara 	{ MV78XX0_TAG_CRYPT,
2577fc0e74eSkiyohara 	  MV78XX0_ATTR_CRYPT,		MV78XX0_UNITID_CRYPT },
2587fc0e74eSkiyohara #endif
2597fc0e74eSkiyohara 
260a4c1b5d6Skiyohara #if defined(DOVE)
261a4c1b5d6Skiyohara 	{ DOVE_TAG_PEX0_MEM,
262a4c1b5d6Skiyohara 	  DOVE_ATTR_PEX_MEM,		MVSOC_UNITID_PEX },
263a4c1b5d6Skiyohara 	{ DOVE_TAG_PEX0_IO,
264a4c1b5d6Skiyohara 	  DOVE_ATTR_PEX_IO,		MVSOC_UNITID_PEX },
265a4c1b5d6Skiyohara 	{ DOVE_TAG_PEX1_MEM,
266a4c1b5d6Skiyohara 	  DOVE_ATTR_PEX_MEM,		DOVE_UNITID_PEX1 },
267a4c1b5d6Skiyohara 	{ DOVE_TAG_PEX1_IO,
268a4c1b5d6Skiyohara 	  DOVE_ATTR_PEX_IO,		DOVE_UNITID_PEX1 },
269a4c1b5d6Skiyohara 	{ DOVE_TAG_CRYPT,
270a4c1b5d6Skiyohara 	  DOVE_ATTR_SA,			DOVE_UNITID_SA },
271a4c1b5d6Skiyohara 	{ DOVE_TAG_SPI0,
272a4c1b5d6Skiyohara 	  DOVE_ATTR_SPI0,		MVSOC_UNITID_DEVBUS },
273a4c1b5d6Skiyohara 	{ DOVE_TAG_SPI1,
274a4c1b5d6Skiyohara 	  DOVE_ATTR_SPI1,		MVSOC_UNITID_DEVBUS },
275a4c1b5d6Skiyohara 	{ DOVE_TAG_BOOTROM,
276a4c1b5d6Skiyohara 	  DOVE_ATTR_BOOTROM,		MVSOC_UNITID_DEVBUS },
277a4c1b5d6Skiyohara 	{ DOVE_TAG_PMU,
278a4c1b5d6Skiyohara 	  DOVE_ATTR_NAND,		DOVE_UNITID_NAND },
279a4c1b5d6Skiyohara 	{ DOVE_TAG_PMU,
280a4c1b5d6Skiyohara 	  DOVE_ATTR_PMU,		DOVE_UNITID_PMU },
281a4c1b5d6Skiyohara #endif
282a4c1b5d6Skiyohara 
283a9160f60Srkujawa #if defined(ARMADAXP)
284a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX00_MEM,
285a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx0_MEM,	ARMADAXP_UNITID_PEX0 },
286a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX00_IO,
287a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx0_IO,	ARMADAXP_UNITID_PEX0 },
288fc510911Sskrll 
289a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX01_MEM,
290a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx1_MEM,	ARMADAXP_UNITID_PEX0 },
291a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX01_IO,
292a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx1_IO,	ARMADAXP_UNITID_PEX0 },
293fc510911Sskrll 
294a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX02_MEM,
295a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx2_MEM,	ARMADAXP_UNITID_PEX0 },
296a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX02_IO,
297a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx2_IO,	ARMADAXP_UNITID_PEX0 },
298fc510911Sskrll 
299a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX03_MEM,
300a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx3_MEM,	ARMADAXP_UNITID_PEX0 },
301a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX03_IO,
302a9160f60Srkujawa 	  ARMADAXP_ATTR_PEXx3_IO,	ARMADAXP_UNITID_PEX0 },
303fc510911Sskrll 
304fc510911Sskrll 	{ ARMADAXP_TAG_PEX10_MEM,
305fc510911Sskrll 	  ARMADAXP_ATTR_PEXx0_MEM,	ARMADAXP_UNITID_PEX1 },
306fc510911Sskrll 	{ ARMADAXP_TAG_PEX10_IO,
307fc510911Sskrll 	  ARMADAXP_ATTR_PEXx0_IO,	ARMADAXP_UNITID_PEX1 },
308fc510911Sskrll 
309fc510911Sskrll 	{ ARMADAXP_TAG_PEX11_MEM,
310fc510911Sskrll 	  ARMADAXP_ATTR_PEXx1_MEM,	ARMADAXP_UNITID_PEX1 },
311fc510911Sskrll 	{ ARMADAXP_TAG_PEX11_IO,
312fc510911Sskrll 	  ARMADAXP_ATTR_PEXx1_IO,	ARMADAXP_UNITID_PEX1 },
313fc510911Sskrll 
314fc510911Sskrll 	{ ARMADAXP_TAG_PEX12_MEM,
315fc510911Sskrll 	  ARMADAXP_ATTR_PEXx2_MEM,	ARMADAXP_UNITID_PEX1 },
316fc510911Sskrll 	{ ARMADAXP_TAG_PEX12_IO,
317fc510911Sskrll 	  ARMADAXP_ATTR_PEXx2_IO,	ARMADAXP_UNITID_PEX1 },
318fc510911Sskrll 
319fc510911Sskrll 	{ ARMADAXP_TAG_PEX13_MEM,
320fc510911Sskrll 	  ARMADAXP_ATTR_PEXx3_MEM,	ARMADAXP_UNITID_PEX1 },
321fc510911Sskrll 	{ ARMADAXP_TAG_PEX13_IO,
322fc510911Sskrll 	  ARMADAXP_ATTR_PEXx3_IO,	ARMADAXP_UNITID_PEX1 },
323fc510911Sskrll 
324a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX2_MEM,
325a9160f60Srkujawa 	  ARMADAXP_ATTR_PEX2_MEM,	ARMADAXP_UNITID_PEX2 },
326a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX2_IO,
327a9160f60Srkujawa 	  ARMADAXP_ATTR_PEX2_IO,	ARMADAXP_UNITID_PEX2 },
328fc510911Sskrll 
329a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX3_MEM,
330a9160f60Srkujawa 	  ARMADAXP_ATTR_PEX3_MEM,	ARMADAXP_UNITID_PEX3 },
331a9160f60Srkujawa 	{ ARMADAXP_TAG_PEX3_IO,
332a9160f60Srkujawa 	  ARMADAXP_ATTR_PEX3_IO,	ARMADAXP_UNITID_PEX3 },
333fc510911Sskrll 
3341a8031e1Shsuenaga 	{ ARMADAXP_TAG_CRYPT0,
3351a8031e1Shsuenaga 	  ARMADAXP_ATTR_CRYPT0_NOSWAP,	ARMADAXP_UNITID_CRYPT },
3361a8031e1Shsuenaga 	{ ARMADAXP_TAG_CRYPT1,
3371a8031e1Shsuenaga 	  ARMADAXP_ATTR_CRYPT1_NOSWAP,	ARMADAXP_UNITID_CRYPT },
338a9160f60Srkujawa #endif
33952d286fbSkiyohara };
34052d286fbSkiyohara 
34152d286fbSkiyohara #if defined(ORION)
34252d286fbSkiyohara #define ORION_1(m)	MARVELL_ORION_1_ ## m
34352d286fbSkiyohara #define ORION_2(m)	MARVELL_ORION_2_ ## m
34452d286fbSkiyohara #endif
34552d286fbSkiyohara #if defined(KIRKWOOD)
34652d286fbSkiyohara #undef KIRKWOOD
34752d286fbSkiyohara #define KIRKWOOD(m)	MARVELL_KIRKWOOD_ ## m
34852d286fbSkiyohara #endif
34952d286fbSkiyohara #if defined(MV78XX0)
35052d286fbSkiyohara #undef MV78XX0
35152d286fbSkiyohara #define MV78XX0(m)	MARVELL_MV78XX0_ ## m
35252d286fbSkiyohara #endif
353a4c1b5d6Skiyohara #if defined(DOVE)
354a4c1b5d6Skiyohara #undef DOVE
355a4c1b5d6Skiyohara #define DOVE(m)		MARVELL_DOVE_ ## m
356a4c1b5d6Skiyohara #endif
357cf549ef2Skiyohara #if defined(ARMADAXP)
358cf549ef2Skiyohara #undef ARMADAXP
359cf549ef2Skiyohara #define ARMADAXP(m)	MARVELL_ARMADAXP_ ## m
360cf549ef2Skiyohara #define ARMADA370(m)	MARVELL_ARMADA370_ ## m
361cf549ef2Skiyohara #endif
36252d286fbSkiyohara static struct {
36352d286fbSkiyohara 	uint16_t model;
36452d286fbSkiyohara 	uint8_t rev;
36552d286fbSkiyohara 	const char *modelstr;
36652d286fbSkiyohara 	const char *revstr;
36752d286fbSkiyohara 	const char *typestr;
36852d286fbSkiyohara } nametbl[] = {
36952d286fbSkiyohara #if defined(ORION)
37052d286fbSkiyohara 	{ ORION_1(88F1181),	0, "MV88F1181", NULL,	"Orion1" },
37152d286fbSkiyohara 	{ ORION_1(88F5082),	2, "MV88F5082", "A2",	"Orion1" },
37252d286fbSkiyohara 	{ ORION_1(88F5180N),	3, "MV88F5180N","B1",	"Orion1" },
37352d286fbSkiyohara 	{ ORION_1(88F5181),	0, "MV88F5181",	"A0",	"Orion1" },
37452d286fbSkiyohara 	{ ORION_1(88F5181),	1, "MV88F5181",	"A1",	"Orion1" },
37552d286fbSkiyohara 	{ ORION_1(88F5181),	2, "MV88F5181",	"B0",	"Orion1" },
37652d286fbSkiyohara 	{ ORION_1(88F5181),	3, "MV88F5181",	"B1",	"Orion1" },
37752d286fbSkiyohara 	{ ORION_1(88F5181),	8, "MV88F5181L","A0",	"Orion1" },
37852d286fbSkiyohara 	{ ORION_1(88F5181),	9, "MV88F5181L","A1",	"Orion1" },
37952d286fbSkiyohara 	{ ORION_1(88F5182),	0, "MV88F5182",	"A0",	"Orion1" },
38052d286fbSkiyohara 	{ ORION_1(88F5182),	1, "MV88F5182",	"A1",	"Orion1" },
38152d286fbSkiyohara 	{ ORION_1(88F5182),	2, "MV88F5182",	"A2",	"Orion1" },
38252d286fbSkiyohara 	{ ORION_1(88F6082),	0, "MV88F6082",	"A0",	"Orion1" },
38352d286fbSkiyohara 	{ ORION_1(88F6082),	1, "MV88F6082",	"A1",	"Orion1" },
38452d286fbSkiyohara 	{ ORION_1(88F6183),	0, "MV88F6183",	"A0",	"Orion1" },
38552d286fbSkiyohara 	{ ORION_1(88F6183),	1, "MV88F6183",	"Z0",	"Orion1" },
38652d286fbSkiyohara 	{ ORION_1(88W8660),	0, "MV88W8660",	"A0",	"Orion1" },
38752d286fbSkiyohara 	{ ORION_1(88W8660),	1, "MV88W8660",	"A1",	"Orion1" },
38852d286fbSkiyohara 
38952d286fbSkiyohara 	{ ORION_2(88F1281),	0, "MV88F1281",	"A0",	"Orion2" },
39052d286fbSkiyohara 	{ ORION_2(88F5281),	0, "MV88F5281",	"A0",	"Orion2" },
39152d286fbSkiyohara 	{ ORION_2(88F5281),	1, "MV88F5281",	"B0",	"Orion2" },
39252d286fbSkiyohara 	{ ORION_2(88F5281),	2, "MV88F5281",	"C0",	"Orion2" },
39352d286fbSkiyohara 	{ ORION_2(88F5281),	3, "MV88F5281",	"C1",	"Orion2" },
39452d286fbSkiyohara 	{ ORION_2(88F5281),	4, "MV88F5281",	"D0",	"Orion2" },
39552d286fbSkiyohara #endif
39652d286fbSkiyohara 
39752d286fbSkiyohara #if defined(KIRKWOOD)
39852d286fbSkiyohara 	{ KIRKWOOD(88F6180),	2, "88F6180",	"A0",	"Kirkwood" },
399983ce0cbSkiyohara 	{ KIRKWOOD(88F6180),	3, "88F6180",	"A1",	"Kirkwood" },
40052d286fbSkiyohara 	{ KIRKWOOD(88F6192),	0, "88F619x",	"Z0",	"Kirkwood" },
40152d286fbSkiyohara 	{ KIRKWOOD(88F6192),	2, "88F619x",	"A0",	"Kirkwood" },
4020d504109Sreinoud 	{ KIRKWOOD(88F6192),	3, "88F619x",	"A1",	"Kirkwood" },
40352d286fbSkiyohara 	{ KIRKWOOD(88F6281),	0, "88F6281",	"Z0",	"Kirkwood" },
40452d286fbSkiyohara 	{ KIRKWOOD(88F6281),	2, "88F6281",	"A0",	"Kirkwood" },
40552d286fbSkiyohara 	{ KIRKWOOD(88F6281),	3, "88F6281",	"A1",	"Kirkwood" },
406983ce0cbSkiyohara 	{ KIRKWOOD(88F6282),	0, "88F6282",	"A0",	"Kirkwood" },
407983ce0cbSkiyohara 	{ KIRKWOOD(88F6282),	1, "88F6282",	"A1",	"Kirkwood" },
40852d286fbSkiyohara #endif
40952d286fbSkiyohara 
41052d286fbSkiyohara #if defined(MV78XX0)
41152d286fbSkiyohara 	{ MV78XX0(MV78100),	1, "MV78100",	"A0",  "Discovery Innovation" },
41252d286fbSkiyohara 	{ MV78XX0(MV78100),	2, "MV78100",	"A1",  "Discovery Innovation" },
41352d286fbSkiyohara 	{ MV78XX0(MV78200),	1, "MV78200",	"A0",  "Discovery Innovation" },
41452d286fbSkiyohara #endif
415a9160f60Srkujawa 
416a4c1b5d6Skiyohara #if defined(DOVE)
417a4c1b5d6Skiyohara 	{ DOVE(88AP510),	0, "88AP510",	"Z0",  "Dove" },
418a4c1b5d6Skiyohara 	{ DOVE(88AP510),	1, "88AP510",	"Z1",  "Dove" },
419a4c1b5d6Skiyohara 	{ DOVE(88AP510),	2, "88AP510",	"Y0",  "Dove" },
420a4c1b5d6Skiyohara 	{ DOVE(88AP510),	3, "88AP510",	"Y1",  "Dove" },
421a4c1b5d6Skiyohara 	{ DOVE(88AP510),	4, "88AP510",	"X0",  "Dove" },
422a4c1b5d6Skiyohara 	{ DOVE(88AP510),	6, "88AP510",	"A0",  "Dove" },
423a4c1b5d6Skiyohara 	{ DOVE(88AP510),	7, "88AP510",	"A1",  "Dove" },
424a4c1b5d6Skiyohara #endif
425a4c1b5d6Skiyohara 
426a9160f60Srkujawa #if defined(ARMADAXP)
427a9160f60Srkujawa 	{ ARMADAXP(MV78130),	1, "MV78130",	"A0",  "Armada XP" },
428a9160f60Srkujawa 	{ ARMADAXP(MV78160),	1, "MV78160",	"A0",  "Armada XP" },
42948ca38c3Sskrll 	{ ARMADAXP(MV78230),	1, "MV78230",	"A0",  "Armada XP" },
430a9160f60Srkujawa 	{ ARMADAXP(MV78260),	1, "MV78260",	"A0",  "Armada XP" },
431afdcc548Shsuenaga 	{ ARMADAXP(MV78260),	2, "MV78260",	"B0",  "Armada XP" },
432a9160f60Srkujawa 	{ ARMADAXP(MV78460),	1, "MV78460",	"A0",  "Armada XP" },
433a9160f60Srkujawa 	{ ARMADAXP(MV78460),	2, "MV78460",	"B0",  "Armada XP" },
434cf549ef2Skiyohara 
435cf549ef2Skiyohara 	{ ARMADA370(MV6707),	0, "MV6707",	"A0",  "Armada 370" },
436cf549ef2Skiyohara 	{ ARMADA370(MV6707),	1, "MV6707",	"A1",  "Armada 370" },
437cf549ef2Skiyohara 	{ ARMADA370(MV6710),	0, "MV6710",	"A0",  "Armada 370" },
438cf549ef2Skiyohara 	{ ARMADA370(MV6710),	1, "MV6710",	"A1",  "Armada 370" },
439cf549ef2Skiyohara 	{ ARMADA370(MV6W11),	0, "MV6W11",	"A0",  "Armada 370" },
440cf549ef2Skiyohara 	{ ARMADA370(MV6W11),	1, "MV6W11",	"A1",  "Armada 370" },
441a9160f60Srkujawa #endif
44252d286fbSkiyohara };
44352d286fbSkiyohara 
444cf549ef2Skiyohara enum marvell_tags ddr_tags[] = {
445cf549ef2Skiyohara 	MARVELL_TAG_SDRAM_CS0,
446cf549ef2Skiyohara 	MARVELL_TAG_SDRAM_CS1,
447cf549ef2Skiyohara 	MARVELL_TAG_SDRAM_CS2,
448cf549ef2Skiyohara 	MARVELL_TAG_SDRAM_CS3,
449cf549ef2Skiyohara 
450cf549ef2Skiyohara 	MARVELL_TAG_UNDEFINED
451cf549ef2Skiyohara };
452cf549ef2Skiyohara enum marvell_tags ddr3_tags[] = {
453cf549ef2Skiyohara 	MARVELL_TAG_DDR3_CS0,
454cf549ef2Skiyohara 	MARVELL_TAG_DDR3_CS1,
455cf549ef2Skiyohara 	MARVELL_TAG_DDR3_CS2,
456cf549ef2Skiyohara 	MARVELL_TAG_DDR3_CS3,
457cf549ef2Skiyohara 
458cf549ef2Skiyohara 	MARVELL_TAG_UNDEFINED
459cf549ef2Skiyohara };
460a4c1b5d6Skiyohara enum marvell_tags axi_tags[] = {
461a4c1b5d6Skiyohara 	MARVELL_TAG_AXI_CS0,
462a4c1b5d6Skiyohara 	MARVELL_TAG_AXI_CS1,
463a4c1b5d6Skiyohara 
464a4c1b5d6Skiyohara 	MARVELL_TAG_UNDEFINED
465a4c1b5d6Skiyohara };
466cf549ef2Skiyohara static struct {
467cf549ef2Skiyohara 	uint16_t model;
468cf549ef2Skiyohara 	uint8_t rev;
469cf549ef2Skiyohara 	enum marvell_tags *tags;
470cf549ef2Skiyohara } tagstbl[] = {
471cf549ef2Skiyohara #if defined(ORION)
472cf549ef2Skiyohara 	{ ORION_1(88F1181),	0, ddr_tags },
473cf549ef2Skiyohara 	{ ORION_1(88F5082),	2, ddr_tags },
474cf549ef2Skiyohara 	{ ORION_1(88F5180N),	3, ddr_tags },
475cf549ef2Skiyohara 	{ ORION_1(88F5181),	0, ddr_tags },
476cf549ef2Skiyohara 	{ ORION_1(88F5181),	1, ddr_tags },
477cf549ef2Skiyohara 	{ ORION_1(88F5181),	2, ddr_tags },
478cf549ef2Skiyohara 	{ ORION_1(88F5181),	3, ddr_tags },
479cf549ef2Skiyohara 	{ ORION_1(88F5181),	8, ddr_tags },
480cf549ef2Skiyohara 	{ ORION_1(88F5181),	9, ddr_tags },
481cf549ef2Skiyohara 	{ ORION_1(88F5182),	0, ddr_tags },
482cf549ef2Skiyohara 	{ ORION_1(88F5182),	1, ddr_tags },
483cf549ef2Skiyohara 	{ ORION_1(88F5182),	2, ddr_tags },
484cf549ef2Skiyohara 	{ ORION_1(88F6082),	0, ddr_tags },
485cf549ef2Skiyohara 	{ ORION_1(88F6082),	1, ddr_tags },
486cf549ef2Skiyohara 	{ ORION_1(88F6183),	0, ddr_tags },
487cf549ef2Skiyohara 	{ ORION_1(88F6183),	1, ddr_tags },
488cf549ef2Skiyohara 	{ ORION_1(88W8660),	0, ddr_tags },
489cf549ef2Skiyohara 	{ ORION_1(88W8660),	1, ddr_tags },
490cf549ef2Skiyohara 
491cf549ef2Skiyohara 	{ ORION_2(88F1281),	0, ddr_tags },
492cf549ef2Skiyohara 	{ ORION_2(88F5281),	0, ddr_tags },
493cf549ef2Skiyohara 	{ ORION_2(88F5281),	1, ddr_tags },
494cf549ef2Skiyohara 	{ ORION_2(88F5281),	2, ddr_tags },
495cf549ef2Skiyohara 	{ ORION_2(88F5281),	3, ddr_tags },
496cf549ef2Skiyohara 	{ ORION_2(88F5281),	4, ddr_tags },
497cf549ef2Skiyohara #endif
498cf549ef2Skiyohara 
499cf549ef2Skiyohara #if defined(KIRKWOOD)
500cf549ef2Skiyohara 	{ KIRKWOOD(88F6180),	2, ddr_tags },
501cf549ef2Skiyohara 	{ KIRKWOOD(88F6180),	3, ddr_tags },
502cf549ef2Skiyohara 	{ KIRKWOOD(88F6192),	0, ddr_tags },
503cf549ef2Skiyohara 	{ KIRKWOOD(88F6192),	2, ddr_tags },
504cf549ef2Skiyohara 	{ KIRKWOOD(88F6192),	3, ddr_tags },
505cf549ef2Skiyohara 	{ KIRKWOOD(88F6281),	0, ddr_tags },
506cf549ef2Skiyohara 	{ KIRKWOOD(88F6281),	2, ddr_tags },
507cf549ef2Skiyohara 	{ KIRKWOOD(88F6281),	3, ddr_tags },
508cf549ef2Skiyohara 	{ KIRKWOOD(88F6282),	0, ddr_tags },
509cf549ef2Skiyohara 	{ KIRKWOOD(88F6282),	1, ddr_tags },
510cf549ef2Skiyohara #endif
511cf549ef2Skiyohara 
512cf549ef2Skiyohara #if defined(MV78XX0)
513cf549ef2Skiyohara 	{ MV78XX0(MV78100),	1, ddr_tags },
514cf549ef2Skiyohara 	{ MV78XX0(MV78100),	2, ddr_tags },
515cf549ef2Skiyohara 	{ MV78XX0(MV78200),	1, ddr_tags },
516cf549ef2Skiyohara #endif
517cf549ef2Skiyohara 
518a4c1b5d6Skiyohara #if defined(DOVE)
519a4c1b5d6Skiyohara 	{ DOVE(88AP510),	0, axi_tags },
520a4c1b5d6Skiyohara 	{ DOVE(88AP510),	1, axi_tags },
521a4c1b5d6Skiyohara 	{ DOVE(88AP510),	2, axi_tags },
522a4c1b5d6Skiyohara 	{ DOVE(88AP510),	3, axi_tags },
523a4c1b5d6Skiyohara 	{ DOVE(88AP510),	4, axi_tags },
524a4c1b5d6Skiyohara 	{ DOVE(88AP510),	5, axi_tags },
525a4c1b5d6Skiyohara 	{ DOVE(88AP510),	6, axi_tags },
526a4c1b5d6Skiyohara 	{ DOVE(88AP510),	7, axi_tags },
527a4c1b5d6Skiyohara #endif
528a4c1b5d6Skiyohara 
529cf549ef2Skiyohara #if defined(ARMADAXP)
530cf549ef2Skiyohara 	{ ARMADAXP(MV78130),	1, ddr3_tags },
531cf549ef2Skiyohara 	{ ARMADAXP(MV78160),	1, ddr3_tags },
532cf549ef2Skiyohara 	{ ARMADAXP(MV78230),	1, ddr3_tags },
533cf549ef2Skiyohara 	{ ARMADAXP(MV78260),	1, ddr3_tags },
534afdcc548Shsuenaga 	{ ARMADAXP(MV78260),	2, ddr3_tags },
535cf549ef2Skiyohara 	{ ARMADAXP(MV78460),	1, ddr3_tags },
536cf549ef2Skiyohara 	{ ARMADAXP(MV78460),	2, ddr3_tags },
537cf549ef2Skiyohara 
538cf549ef2Skiyohara 	{ ARMADA370(MV6707),	0, ddr3_tags },
539cf549ef2Skiyohara 	{ ARMADA370(MV6707),	1, ddr3_tags },
540cf549ef2Skiyohara 	{ ARMADA370(MV6710),	0, ddr3_tags },
541cf549ef2Skiyohara 	{ ARMADA370(MV6710),	1, ddr3_tags },
542cf549ef2Skiyohara 	{ ARMADA370(MV6W11),	0, ddr3_tags },
543cf549ef2Skiyohara 	{ ARMADA370(MV6W11),	1, ddr3_tags },
544cf549ef2Skiyohara #endif
545cf549ef2Skiyohara };
546cf549ef2Skiyohara 
547cf549ef2Skiyohara 
54852d286fbSkiyohara #define OFFSET_DEFAULT	MVA_OFFSET_DEFAULT
54952d286fbSkiyohara #define IRQ_DEFAULT	MVA_IRQ_DEFAULT
55052d286fbSkiyohara static const struct mvsoc_periph {
55152d286fbSkiyohara 	int model;
55252d286fbSkiyohara 	const char *name;
55352d286fbSkiyohara 	int unit;
55452d286fbSkiyohara 	bus_size_t offset;
55552d286fbSkiyohara 	int irq;
55652d286fbSkiyohara } mvsoc_periphs[] = {
55752d286fbSkiyohara #if defined(ORION)
5587fc0e74eSkiyohara #define ORION_IRQ_TMR		(32 + MVSOC_MLMB_MLMBI_CPUTIMER0INTREQ)
5597fc0e74eSkiyohara 
5607fc0e74eSkiyohara     { ORION_1(88F1181),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
56152d286fbSkiyohara     { ORION_1(88F1181),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
56252d286fbSkiyohara     { ORION_1(88F1181),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
56352d286fbSkiyohara     { ORION_1(88F1181),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
56452d286fbSkiyohara     { ORION_1(88F1181),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
56552d286fbSkiyohara     { ORION_1(88F1181),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
56652d286fbSkiyohara     { ORION_1(88F1181),	"mvpex",   1, ORION_PEX1_BASE,	ORION_IRQ_PEX1INT },
56752d286fbSkiyohara 
5687fc0e74eSkiyohara     { ORION_1(88F5082),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
56952d286fbSkiyohara     { ORION_1(88F5082),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
57052d286fbSkiyohara     { ORION_1(88F5082),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
57152d286fbSkiyohara     { ORION_1(88F5082),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
57252d286fbSkiyohara     { ORION_1(88F5082),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
57352d286fbSkiyohara     { ORION_1(88F5082),	"ehci",    1, ORION_USB1_BASE,	ORION_IRQ_USBCNT1 },
574a2068f09Skiyohara     { ORION_1(88F5082),	"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
57552d286fbSkiyohara     { ORION_1(88F5082),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
57652d286fbSkiyohara     { ORION_1(88F5082),	"mvcesa",  0, ORION_CESA_BASE,	ORION_IRQ_SECURITYINTR},
57752d286fbSkiyohara     { ORION_1(88F5082),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
57852d286fbSkiyohara     { ORION_1(88F5082),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
57952d286fbSkiyohara     { ORION_1(88F5082),	"mvsata",  0, ORION_SATAHC_BASE,ORION_IRQ_SATAINTR },
58052d286fbSkiyohara 
5817fc0e74eSkiyohara     { ORION_1(88F5180N),"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
58252d286fbSkiyohara     { ORION_1(88F5180N),"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
58352d286fbSkiyohara     { ORION_1(88F5180N),"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
58452d286fbSkiyohara     { ORION_1(88F5180N),"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
58552d286fbSkiyohara     { ORION_1(88F5180N),"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
586a2068f09Skiyohara     { ORION_1(88F5180N),"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
58752d286fbSkiyohara     { ORION_1(88F5180N),"gtpci",   0, ORION_PCI_BASE,	ORION_IRQ_PEX0INT },
58852d286fbSkiyohara     { ORION_1(88F5180N),"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
58952d286fbSkiyohara     { ORION_1(88F5180N),"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
59052d286fbSkiyohara     { ORION_1(88F5180N),"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
59152d286fbSkiyohara 
5927fc0e74eSkiyohara     { ORION_1(88F5181),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
59352d286fbSkiyohara     { ORION_1(88F5181),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
59452d286fbSkiyohara     { ORION_1(88F5181),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
59552d286fbSkiyohara     { ORION_1(88F5181),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
59652d286fbSkiyohara     { ORION_1(88F5181),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
597a2068f09Skiyohara     { ORION_1(88F5181),	"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
59852d286fbSkiyohara     { ORION_1(88F5181),	"gtpci",   0, ORION_PCI_BASE,	ORION_IRQ_PEX0INT },
59952d286fbSkiyohara     { ORION_1(88F5181),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
60052d286fbSkiyohara     { ORION_1(88F5181),	"mvcesa",  0, ORION_CESA_BASE,	ORION_IRQ_SECURITYINTR},
60152d286fbSkiyohara     { ORION_1(88F5181),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
60252d286fbSkiyohara     { ORION_1(88F5181),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
60352d286fbSkiyohara 
6047fc0e74eSkiyohara     { ORION_1(88F5182),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
60552d286fbSkiyohara     { ORION_1(88F5182),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
60652d286fbSkiyohara     { ORION_1(88F5182),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
60752d286fbSkiyohara     { ORION_1(88F5182),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
60852d286fbSkiyohara     { ORION_1(88F5182),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
60952d286fbSkiyohara     { ORION_1(88F5182),	"ehci",    1, ORION_USB1_BASE,	ORION_IRQ_USBCNT1 },
610a2068f09Skiyohara     { ORION_1(88F5182),	"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
61152d286fbSkiyohara     { ORION_1(88F5182),	"gtpci",   0, ORION_PCI_BASE,	ORION_IRQ_PEX0INT },
61252d286fbSkiyohara     { ORION_1(88F5182),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
61352d286fbSkiyohara     { ORION_1(88F5182),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
61452d286fbSkiyohara     { ORION_1(88F5182),	"mvsata",  0, ORION_SATAHC_BASE,ORION_IRQ_SATAINTR },
61552d286fbSkiyohara     { ORION_1(88F5182),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
61652d286fbSkiyohara 
6177fc0e74eSkiyohara     { ORION_1(88F6082),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
61852d286fbSkiyohara     { ORION_1(88F6082),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
61952d286fbSkiyohara     { ORION_1(88F6082),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
62052d286fbSkiyohara     { ORION_1(88F6082),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
62152d286fbSkiyohara     { ORION_1(88F6082),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
62252d286fbSkiyohara     { ORION_1(88F6082),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
62352d286fbSkiyohara     { ORION_1(88F6082),	"mvcesa",  0, ORION_CESA_BASE,	ORION_IRQ_SECURITYINTR},
62452d286fbSkiyohara     { ORION_1(88F6082),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
62552d286fbSkiyohara     { ORION_1(88F6082),	"mvsata",  0, ORION_SATAHC_BASE,ORION_IRQ_SATAINTR },
62652d286fbSkiyohara     { ORION_1(88F6082),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
62752d286fbSkiyohara 
6287fc0e74eSkiyohara     { ORION_1(88F6183),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
62952d286fbSkiyohara     { ORION_1(88F6183),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
63052d286fbSkiyohara     { ORION_1(88F6183),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
63152d286fbSkiyohara     { ORION_1(88F6183),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
63252d286fbSkiyohara 
6337fc0e74eSkiyohara     { ORION_1(88W8660),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
63452d286fbSkiyohara     { ORION_1(88W8660),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
63552d286fbSkiyohara     { ORION_1(88W8660),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
63652d286fbSkiyohara     { ORION_1(88W8660),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
63752d286fbSkiyohara     { ORION_1(88W8660),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
638a2068f09Skiyohara     { ORION_1(88W8660),	"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
63952d286fbSkiyohara     { ORION_1(88W8660),	"gtpci",   0, ORION_PCI_BASE,	ORION_IRQ_PEX0INT },
64052d286fbSkiyohara     { ORION_1(88W8660),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
64152d286fbSkiyohara     { ORION_1(88W8660),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
64252d286fbSkiyohara     { ORION_1(88W8660),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
64352d286fbSkiyohara 
6447fc0e74eSkiyohara     { ORION_2(88F1281),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
64552d286fbSkiyohara     { ORION_2(88F1281),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
64652d286fbSkiyohara     { ORION_2(88F1281),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
64752d286fbSkiyohara     { ORION_2(88F1281),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
64852d286fbSkiyohara     { ORION_2(88F1281),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
64952d286fbSkiyohara     { ORION_2(88F1281),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
65052d286fbSkiyohara     { ORION_2(88F1281),	"mvpex",   1, ORION_PEX1_BASE,	ORION_IRQ_PEX1INT },
65152d286fbSkiyohara 
6527fc0e74eSkiyohara     { ORION_2(88F5281),	"mvsoctmr",0, MVSOC_TMR_BASE,	ORION_IRQ_TMR },
65352d286fbSkiyohara     { ORION_2(88F5281),	"mvsocgpp",0, MVSOC_GPP_BASE,	ORION_IRQ_GPIO7_0 },
65452d286fbSkiyohara     { ORION_2(88F5281),	"com",     0, MVSOC_COM0_BASE,	ORION_IRQ_UART0 },
65552d286fbSkiyohara     { ORION_2(88F5281),	"com",     1, MVSOC_COM1_BASE,	ORION_IRQ_UART1 },
65652d286fbSkiyohara     { ORION_2(88F5281),	"ehci",    0, ORION_USB0_BASE,	ORION_IRQ_USBCNT0 },
657a2068f09Skiyohara     { ORION_2(88F5281),	"gtidmac", 0, ORION_IDMAC_BASE,	IRQ_DEFAULT },
65852d286fbSkiyohara     { ORION_2(88F5281),	"gtpci",   0, ORION_PCI_BASE,	ORION_IRQ_PEX0INT },
65952d286fbSkiyohara     { ORION_2(88F5281),	"gttwsi",  0, MVSOC_TWSI_BASE,	ORION_IRQ_TWSI },
66052d286fbSkiyohara     { ORION_2(88F5281),	"mvgbec",  0, ORION_GBE_BASE,	IRQ_DEFAULT },
66152d286fbSkiyohara     { ORION_2(88F5281),	"mvpex",   0, MVSOC_PEX_BASE,	ORION_IRQ_PEX0INT },
66252d286fbSkiyohara #endif
66352d286fbSkiyohara 
66452d286fbSkiyohara #if defined(KIRKWOOD)
6657fc0e74eSkiyohara #define KIRKWOOD_IRQ_TMR	(64 + MVSOC_MLMB_MLMBI_CPUTIMER0INTREQ)
6667fc0e74eSkiyohara 
6677fc0e74eSkiyohara     { KIRKWOOD(88F6180),"mvsoctmr",0, MVSOC_TMR_BASE,	KIRKWOOD_IRQ_TMR },
66852d286fbSkiyohara     { KIRKWOOD(88F6180),"mvsocgpp",0, MVSOC_GPP_BASE,	KIRKWOOD_IRQ_GPIOLO7_0},
6698d7cb782Smatt     { KIRKWOOD(88F6180),"mvsocrtc",0, KIRKWOOD_RTC_BASE,IRQ_DEFAULT },
67052d286fbSkiyohara     { KIRKWOOD(88F6180),"com",     0, MVSOC_COM0_BASE,	KIRKWOOD_IRQ_UART0INT },
67152d286fbSkiyohara     { KIRKWOOD(88F6180),"com",     1, MVSOC_COM1_BASE,	KIRKWOOD_IRQ_UART1INT },
67252d286fbSkiyohara     { KIRKWOOD(88F6180),"ehci",    0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT },
673a2068f09Skiyohara     { KIRKWOOD(88F6180),"gtidmac", 0, KIRKWOOD_IDMAC_BASE,IRQ_DEFAULT },
67452d286fbSkiyohara     { KIRKWOOD(88F6180),"gttwsi",  0, MVSOC_TWSI_BASE,	KIRKWOOD_IRQ_TWSI },
67552d286fbSkiyohara     { KIRKWOOD(88F6180),"mvcesa",  0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT},
67652d286fbSkiyohara     { KIRKWOOD(88F6180),"mvgbec",  0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT },
67752d286fbSkiyohara     { KIRKWOOD(88F6180),"mvpex",   0, MVSOC_PEX_BASE,	KIRKWOOD_IRQ_PEX0INT },
67852d286fbSkiyohara     { KIRKWOOD(88F6180),"mvsdio",  0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT },
67952d286fbSkiyohara 
6807fc0e74eSkiyohara     { KIRKWOOD(88F6192),"mvsoctmr",0, MVSOC_TMR_BASE,	KIRKWOOD_IRQ_TMR },
68152d286fbSkiyohara     { KIRKWOOD(88F6192),"mvsocgpp",0, MVSOC_GPP_BASE,	KIRKWOOD_IRQ_GPIOLO7_0},
6828d7cb782Smatt     { KIRKWOOD(88F6192),"mvsocrtc",0, KIRKWOOD_RTC_BASE,IRQ_DEFAULT },
68352d286fbSkiyohara     { KIRKWOOD(88F6192),"com",     0, MVSOC_COM0_BASE,	KIRKWOOD_IRQ_UART0INT },
68452d286fbSkiyohara     { KIRKWOOD(88F6192),"com",     1, MVSOC_COM1_BASE,	KIRKWOOD_IRQ_UART1INT },
68552d286fbSkiyohara     { KIRKWOOD(88F6192),"ehci",    0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT },
686a2068f09Skiyohara     { KIRKWOOD(88F6192),"gtidmac", 0, KIRKWOOD_IDMAC_BASE,IRQ_DEFAULT },
68752d286fbSkiyohara     { KIRKWOOD(88F6192),"gttwsi",  0, MVSOC_TWSI_BASE,	KIRKWOOD_IRQ_TWSI },
68852d286fbSkiyohara     { KIRKWOOD(88F6192),"mvcesa",  0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT},
68952d286fbSkiyohara     { KIRKWOOD(88F6192),"mvgbec",  0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT },
69052d286fbSkiyohara     { KIRKWOOD(88F6192),"mvgbec",  1, KIRKWOOD_GBE1_BASE,IRQ_DEFAULT },
69152d286fbSkiyohara     { KIRKWOOD(88F6192),"mvpex",   0, MVSOC_PEX_BASE,	KIRKWOOD_IRQ_PEX0INT },
69252d286fbSkiyohara     { KIRKWOOD(88F6192),"mvsata",  0, KIRKWOOD_SATAHC_BASE,KIRKWOOD_IRQ_SATA },
69352d286fbSkiyohara     { KIRKWOOD(88F6192),"mvsdio",  0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT },
69452d286fbSkiyohara 
6957fc0e74eSkiyohara     { KIRKWOOD(88F6281),"mvsoctmr",0, MVSOC_TMR_BASE,	KIRKWOOD_IRQ_TMR },
69652d286fbSkiyohara     { KIRKWOOD(88F6281),"mvsocgpp",0, MVSOC_GPP_BASE,	KIRKWOOD_IRQ_GPIOLO7_0},
6978d7cb782Smatt     { KIRKWOOD(88F6281),"mvsocrtc",0, KIRKWOOD_RTC_BASE,IRQ_DEFAULT },
69852d286fbSkiyohara     { KIRKWOOD(88F6281),"com",     0, MVSOC_COM0_BASE,	KIRKWOOD_IRQ_UART0INT },
69952d286fbSkiyohara     { KIRKWOOD(88F6281),"com",     1, MVSOC_COM1_BASE,	KIRKWOOD_IRQ_UART1INT },
7004200b0baSkiyohara     { KIRKWOOD(88F6281),"ehci",    0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT },
701a2068f09Skiyohara     { KIRKWOOD(88F6281),"gtidmac", 0, KIRKWOOD_IDMAC_BASE,IRQ_DEFAULT },
70252d286fbSkiyohara     { KIRKWOOD(88F6281),"gttwsi",  0, MVSOC_TWSI_BASE,	KIRKWOOD_IRQ_TWSI },
7034200b0baSkiyohara     { KIRKWOOD(88F6281),"mvcesa",  0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT },
7044200b0baSkiyohara     { KIRKWOOD(88F6281),"mvgbec",  0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT },
7054200b0baSkiyohara     { KIRKWOOD(88F6281),"mvgbec",  1, KIRKWOOD_GBE1_BASE,IRQ_DEFAULT },
7064200b0baSkiyohara     { KIRKWOOD(88F6281),"mvpex",   0, MVSOC_PEX_BASE,	KIRKWOOD_IRQ_PEX0INT },
7074200b0baSkiyohara     { KIRKWOOD(88F6281),"mvsata",  0, KIRKWOOD_SATAHC_BASE,KIRKWOOD_IRQ_SATA },
7084200b0baSkiyohara     { KIRKWOOD(88F6281),"mvsdio",  0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT },
709983ce0cbSkiyohara 
7107fc0e74eSkiyohara     { KIRKWOOD(88F6282),"mvsoctmr",0, MVSOC_TMR_BASE,	KIRKWOOD_IRQ_TMR },
711983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvsocgpp",0, MVSOC_GPP_BASE,	KIRKWOOD_IRQ_GPIOLO7_0},
712983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvsocrtc",0, KIRKWOOD_RTC_BASE,IRQ_DEFAULT },
7137c20facfSkiyohara     { KIRKWOOD(88F6282),"mvsocts", 0, KIRKWOOD_TS_BASE,	IRQ_DEFAULT },
714983ce0cbSkiyohara     { KIRKWOOD(88F6282),"com",     0, MVSOC_COM0_BASE,	KIRKWOOD_IRQ_UART0INT },
715983ce0cbSkiyohara     { KIRKWOOD(88F6282),"com",     1, MVSOC_COM1_BASE,	KIRKWOOD_IRQ_UART1INT },
716983ce0cbSkiyohara     { KIRKWOOD(88F6282),"ehci",    0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT },
717a2068f09Skiyohara     { KIRKWOOD(88F6282),"gtidmac", 0, KIRKWOOD_IDMAC_BASE,IRQ_DEFAULT },
718983ce0cbSkiyohara     { KIRKWOOD(88F6282),"gttwsi",  0, MVSOC_TWSI_BASE,	KIRKWOOD_IRQ_TWSI },
719983ce0cbSkiyohara     { KIRKWOOD(88F6282),"gttwsi",  1, KIRKWOOD_TWSI1_BASE,KIRKWOOD_IRQ_TWSI1 },
720983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvcesa",  0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT},
721983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvgbec",  0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT },
722983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvgbec",  1, KIRKWOOD_GBE1_BASE,IRQ_DEFAULT },
723983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvpex",   0, MVSOC_PEX_BASE,	KIRKWOOD_IRQ_PEX0INT },
724983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvpex",   1, KIRKWOOD_PEX1_BASE,KIRKWOOD_IRQ_PEX1INT },
725983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvsata",  0, KIRKWOOD_SATAHC_BASE,KIRKWOOD_IRQ_SATA },
726983ce0cbSkiyohara     { KIRKWOOD(88F6282),"mvsdio",  0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT },
72752d286fbSkiyohara #endif
72852d286fbSkiyohara 
72952d286fbSkiyohara #if defined(MV78XX0)
7307fc0e74eSkiyohara     { MV78XX0(MV78100),	"mvsoctmr",0, MVSOC_TMR_BASE,	MV78XX0_IRQ_TIMER0 },
7317fc0e74eSkiyohara     { MV78XX0(MV78100),	"mvsocgpp",0, MVSOC_GPP_BASE,	MV78XX0_IRQ_GPIO0_7 },
7327fc0e74eSkiyohara     { MV78XX0(MV78100),	"com",	   0, MVSOC_COM0_BASE,	MV78XX0_IRQ_UART0 },
7337fc0e74eSkiyohara     { MV78XX0(MV78100),	"com",	   1, MVSOC_COM1_BASE,	MV78XX0_IRQ_UART1 },
7347fc0e74eSkiyohara     { MV78XX0(MV78100),	"com",	   2, MV78XX0_COM2_BASE,MV78XX0_IRQ_UART2 },
7357fc0e74eSkiyohara     { MV78XX0(MV78100),	"com",	   3, MV78XX0_COM3_BASE,MV78XX0_IRQ_UART3 },
7367fc0e74eSkiyohara     { MV78XX0(MV78100),	"gttwsi",  0, MVSOC_TWSI_BASE,	MV78XX0_IRQ_TWSI0 },
7377fc0e74eSkiyohara     { MV78XX0(MV78100),	"gttwsi",  1, MV78XX0_TWSI1_BASE,MV78XX0_IRQ_TWSI1 },
7387fc0e74eSkiyohara     { MV78XX0(MV78100), "mvgbec",  0, MV78XX0_GBE0_BASE,IRQ_DEFAULT },
7397fc0e74eSkiyohara     { MV78XX0(MV78100), "mvgbec",  1, MV78XX0_GBE1_BASE,IRQ_DEFAULT },
7407fc0e74eSkiyohara     { MV78XX0(MV78100), "mvsata",  0, MV78XX0_SATAHC_BASE,MV78XX0_IRQ_SATA },
74152d286fbSkiyohara 
7427fc0e74eSkiyohara     { MV78XX0(MV78200),	"mvsoctmr",0, MVSOC_TMR_BASE,	MV78XX0_IRQ_TIMER0 },
7437fc0e74eSkiyohara     { MV78XX0(MV78200),	"mvsocgpp",0, MVSOC_GPP_BASE,	MV78XX0_IRQ_GPIO0_7 },
7447fc0e74eSkiyohara     { MV78XX0(MV78200),	"com",     0, MVSOC_COM0_BASE,	MV78XX0_IRQ_UART0 },
7457fc0e74eSkiyohara     { MV78XX0(MV78200),	"com",     1, MVSOC_COM1_BASE,	MV78XX0_IRQ_UART1 },
7467fc0e74eSkiyohara     { MV78XX0(MV78200),	"com",	   2, MV78XX0_COM2_BASE,MV78XX0_IRQ_UART2 },
7477fc0e74eSkiyohara     { MV78XX0(MV78200),	"com",	   3, MV78XX0_COM3_BASE,MV78XX0_IRQ_UART3 },
7487fc0e74eSkiyohara     { MV78XX0(MV78200),	"gttwsi",  0, MVSOC_TWSI_BASE,	MV78XX0_IRQ_TWSI0 },
7497fc0e74eSkiyohara     { MV78XX0(MV78200),	"gttwsi",  1, MV78XX0_TWSI1_BASE,MV78XX0_IRQ_TWSI1 },
7507fc0e74eSkiyohara     { MV78XX0(MV78200), "mvgbec",  0, MV78XX0_GBE0_BASE,IRQ_DEFAULT },
7517fc0e74eSkiyohara     { MV78XX0(MV78200), "mvgbec",  1, MV78XX0_GBE1_BASE,IRQ_DEFAULT },
7527fc0e74eSkiyohara     { MV78XX0(MV78200), "mvgbec",  2, MV78XX0_GBE2_BASE,IRQ_DEFAULT },
7537fc0e74eSkiyohara     { MV78XX0(MV78200), "mvgbec",  3, MV78XX0_GBE3_BASE,IRQ_DEFAULT },
7547fc0e74eSkiyohara     { MV78XX0(MV78200), "mvsata",  0, MV78XX0_SATAHC_BASE,MV78XX0_IRQ_SATA },
75552d286fbSkiyohara #endif
756a9160f60Srkujawa 
757a4c1b5d6Skiyohara #if defined(DOVE)
758a4c1b5d6Skiyohara #define DOVE_IRQ_TMR		(64 + MVSOC_MLMB_MLMBI_CPUTIMER0INTREQ)
759a4c1b5d6Skiyohara 
760a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvsoctmr",0, MVSOC_TMR_BASE,	DOVE_IRQ_TMR },
761a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvsocpmu",0, DOVE_PMU_BASE,	DOVE_IRQ_PMU },
762a4c1b5d6Skiyohara     { DOVE(88AP510),	"com",     0, MVSOC_COM0_BASE,	DOVE_IRQ_UART0 },
763a4c1b5d6Skiyohara     { DOVE(88AP510),	"com",     1, MVSOC_COM1_BASE,	DOVE_IRQ_UART1 },
764a4c1b5d6Skiyohara     { DOVE(88AP510),	"com",     2, DOVE_COM2_BASE,	DOVE_IRQ_UART2 },
765a4c1b5d6Skiyohara     { DOVE(88AP510),	"com",     3, DOVE_COM3_BASE,	DOVE_IRQ_UART3 },
766a4c1b5d6Skiyohara     { DOVE(88AP510),	"gttwsi",  0, MVSOC_TWSI_BASE,	DOVE_IRQ_TWSI },
767a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvspi",   0, DOVE_SPI0_BASE,	DOVE_IRQ_SPI0 },
768a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvspi",   1, DOVE_SPI1_BASE,	DOVE_IRQ_SPI1 },
769a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvcesa",  0, DOVE_CESA_BASE,	DOVE_IRQ_SECURITYINT },
770a4c1b5d6Skiyohara     { DOVE(88AP510),	"ehci",    0, DOVE_USB0_BASE,	DOVE_IRQ_USB0CNT },
771a4c1b5d6Skiyohara     { DOVE(88AP510),	"ehci",    1, DOVE_USB1_BASE,	DOVE_IRQ_USB1CNT },
772a4c1b5d6Skiyohara     { DOVE(88AP510),	"gtidmac", 0, DOVE_XORE_BASE,	IRQ_DEFAULT },
773a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvgbec",  0, DOVE_GBE_BASE,	IRQ_DEFAULT },
774a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvpex",   0, MVSOC_PEX_BASE,	DOVE_IRQ_PEX0_INT },
775a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvpex",   1, DOVE_PEX1_BASE,	DOVE_IRQ_PEX1_INT },
776a4c1b5d6Skiyohara     { DOVE(88AP510),	"sdhc",    0, DOVE_SDHC0_BASE,	DOVE_IRQ_SD0 },
777a4c1b5d6Skiyohara     { DOVE(88AP510),	"sdhc",    1, DOVE_SDHC1_BASE,	DOVE_IRQ_SD1 },
778a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvsata",  0, DOVE_SATAHC_BASE,	DOVE_IRQ_SATAINT },
779a4c1b5d6Skiyohara //    { DOVE(88AP510),	"mvsocgpp",0, MVSOC_GPP_BASE,	IRQ_DEFAULT },
780a4c1b5d6Skiyohara     { DOVE(88AP510),	"mvsocrtc",0, DOVE_RTC_BASE,	IRQ_DEFAULT },
781a4c1b5d6Skiyohara #endif
782a4c1b5d6Skiyohara 
783a9160f60Srkujawa #if defined(ARMADAXP)
784a9160f60Srkujawa     { ARMADAXP(MV78130), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
7857fc0e74eSkiyohara     { ARMADAXP(MV78130), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
7867fc0e74eSkiyohara     { ARMADAXP(MV78130), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
7877fc0e74eSkiyohara     { ARMADAXP(MV78130), "com",    2, ARMADAXP_COM2_BASE,ARMADAXP_IRQ_UART2 },
7887fc0e74eSkiyohara     { ARMADAXP(MV78130), "com",    3, ARMADAXP_COM3_BASE,ARMADAXP_IRQ_UART3 },
7897fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
7907fc0e74eSkiyohara     { ARMADAXP(MV78130), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
7917fc0e74eSkiyohara     { ARMADAXP(MV78130), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
7927fc0e74eSkiyohara     { ARMADAXP(MV78130), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
7937fc0e74eSkiyohara     { ARMADAXP(MV78130), "gtidmac",1, ARMADAXP_XORE1_BASE,IRQ_DEFAULT },
7947be4e0d8Skiyohara     { ARMADAXP(MV78130), "mvsocts",0, ARMADAXP_TS_BASE,	ARMADAXP_IRQ_PMU },
7957fc0e74eSkiyohara     { ARMADAXP(MV78130), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
7967fc0e74eSkiyohara     { ARMADAXP(MV78130), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
7977fc0e74eSkiyohara     { ARMADAXP(MV78130), "ehci",   2, ARMADAXP_USB2_BASE,ARMADAXP_IRQ_USB2 },
7987fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
799a9160f60Srkujawa     { ARMADAXP(MV78130), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
800a9160f60Srkujawa     { ARMADAXP(MV78130), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
801a9160f60Srkujawa     { ARMADAXP(MV78130), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
8027fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
8037fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
804bf8e0d4cSrkujawa     { ARMADAXP(MV78130), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
8054e3bd610Shsuenaga     { ARMADAXP(MV78130), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
8064e3bd610Shsuenaga #if NMVXPE > 0
807ea5bc4c3Shsuenaga     { ARMADAXP(MV78130), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
8084e3bd610Shsuenaga     { ARMADAXP(MV78130), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
8094e3bd610Shsuenaga     { ARMADAXP(MV78130), "mvxpe", 2, ARMADAXP_GBE2_BASE,ARMADAXP_IRQ_GBE2_TH_RXTX },
8104e3bd610Shsuenaga #else
8117fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
8127fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvgbec", 2, ARMADAXP_GBE2_BASE,IRQ_DEFAULT },
8134e3bd610Shsuenaga #endif
8141a8031e1Shsuenaga #if NMVXPSEC > 0
8151a8031e1Shsuenaga     { ARMADAXP(MV78130), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
8161a8031e1Shsuenaga     { ARMADAXP(MV78130), "mvxpsec", 1, ARMADAXP_XPSEC1_BASE,ARMADAXP_IRQ_CESA1 },
8171a8031e1Shsuenaga #else
8187fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
8197fc0e74eSkiyohara     { ARMADAXP(MV78130), "mvcesa", 1, ARMADAXP_CESA1_BASE,ARMADAXP_IRQ_CESA1 },
8201a8031e1Shsuenaga #endif
821a9160f60Srkujawa 
822a9160f60Srkujawa     { ARMADAXP(MV78160), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
8237fc0e74eSkiyohara     { ARMADAXP(MV78160), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
8247fc0e74eSkiyohara     { ARMADAXP(MV78160), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
8257fc0e74eSkiyohara     { ARMADAXP(MV78160), "com",    2, ARMADAXP_COM2_BASE,ARMADAXP_IRQ_UART2 },
8267fc0e74eSkiyohara     { ARMADAXP(MV78160), "com",    3, ARMADAXP_COM3_BASE,ARMADAXP_IRQ_UART3 },
8277fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
8287fc0e74eSkiyohara     { ARMADAXP(MV78160), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
8297fc0e74eSkiyohara     { ARMADAXP(MV78160), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
8307fc0e74eSkiyohara     { ARMADAXP(MV78160), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
8317fc0e74eSkiyohara     { ARMADAXP(MV78160), "gtidmac",1, ARMADAXP_XORE1_BASE,IRQ_DEFAULT },
8327be4e0d8Skiyohara     { ARMADAXP(MV78160), "mvsocts",0, ARMADAXP_TS_BASE,	ARMADAXP_IRQ_PMU },
8337fc0e74eSkiyohara     { ARMADAXP(MV78160), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
8347fc0e74eSkiyohara     { ARMADAXP(MV78160), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
8357fc0e74eSkiyohara     { ARMADAXP(MV78160), "ehci",   2, ARMADAXP_USB2_BASE,ARMADAXP_IRQ_USB2 },
8367fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
837a9160f60Srkujawa     { ARMADAXP(MV78160), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
838a9160f60Srkujawa     { ARMADAXP(MV78160), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
839a9160f60Srkujawa     { ARMADAXP(MV78160), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
840a9160f60Srkujawa     { ARMADAXP(MV78160), "mvpex",  4, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
8417fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
8427fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
843bf8e0d4cSrkujawa     { ARMADAXP(MV78160), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
8444e3bd610Shsuenaga #if NMVXPE > 0
845ea5bc4c3Shsuenaga     { ARMADAXP(MV78160), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
8464e3bd610Shsuenaga     { ARMADAXP(MV78160), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
8474e3bd610Shsuenaga     { ARMADAXP(MV78160), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
8484e3bd610Shsuenaga     { ARMADAXP(MV78160), "mvxpe", 2, ARMADAXP_GBE2_BASE,ARMADAXP_IRQ_GBE2_TH_RXTX },
8494e3bd610Shsuenaga     { ARMADAXP(MV78160), "mvxpe", 3, ARMADAXP_GBE3_BASE,ARMADAXP_IRQ_GBE3_TH_RXTX },
8504e3bd610Shsuenaga #else
8517fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvgbec", 0, ARMADAXP_GBE0_BASE,IRQ_DEFAULT },
8527fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
8537fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvgbec", 2, ARMADAXP_GBE2_BASE,IRQ_DEFAULT },
8547fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvgbec", 3, ARMADAXP_GBE3_BASE,IRQ_DEFAULT },
8554e3bd610Shsuenaga #endif
8561a8031e1Shsuenaga #if NMVXPSEC > 0
8571a8031e1Shsuenaga     { ARMADAXP(MV78160), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
8581a8031e1Shsuenaga     { ARMADAXP(MV78160), "mvxpsec", 1, ARMADAXP_XPSEC1_BASE,ARMADAXP_IRQ_CESA1 },
8591a8031e1Shsuenaga #else
8607fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
8617fc0e74eSkiyohara     { ARMADAXP(MV78160), "mvcesa", 1, ARMADAXP_CESA1_BASE,ARMADAXP_IRQ_CESA1 },
8621a8031e1Shsuenaga #endif
863a9160f60Srkujawa 
864a9160f60Srkujawa     { ARMADAXP(MV78230), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
8657fc0e74eSkiyohara     { ARMADAXP(MV78230), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
8667fc0e74eSkiyohara     { ARMADAXP(MV78230), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
8677fc0e74eSkiyohara     { ARMADAXP(MV78230), "com",    2, ARMADAXP_COM2_BASE,ARMADAXP_IRQ_UART2 },
8687fc0e74eSkiyohara     { ARMADAXP(MV78230), "com",    3, ARMADAXP_COM3_BASE,ARMADAXP_IRQ_UART3 },
8697fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
8707fc0e74eSkiyohara     { ARMADAXP(MV78230), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
8717fc0e74eSkiyohara     { ARMADAXP(MV78230), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
8727fc0e74eSkiyohara     { ARMADAXP(MV78230), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
8737fc0e74eSkiyohara     { ARMADAXP(MV78230), "gtidmac",1, ARMADAXP_XORE1_BASE,IRQ_DEFAULT },
8747be4e0d8Skiyohara     { ARMADAXP(MV78230), "mvsocts",0, ARMADAXP_TS_BASE,	ARMADAXP_IRQ_PMU },
8757fc0e74eSkiyohara     { ARMADAXP(MV78230), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
8767fc0e74eSkiyohara     { ARMADAXP(MV78230), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
8777fc0e74eSkiyohara     { ARMADAXP(MV78230), "ehci",   2, ARMADAXP_USB2_BASE,ARMADAXP_IRQ_USB2 },
8787fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
879a9160f60Srkujawa     { ARMADAXP(MV78230), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
880a9160f60Srkujawa     { ARMADAXP(MV78230), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
881a9160f60Srkujawa     { ARMADAXP(MV78230), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
882fc510911Sskrll     { ARMADAXP(MV78230), "mvpex",  4, ARMADAXP_PEX10_BASE,ARMADAXP_IRQ_PEX10 },
883fc510911Sskrll     { ARMADAXP(MV78230), "mvpex",  5, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
884fc510911Sskrll     { ARMADAXP(MV78230), "mvpex",  6, ARMADAXP_PEX3_BASE,ARMADAXP_IRQ_PEX3 },
8857fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
8867fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
887bf8e0d4cSrkujawa     { ARMADAXP(MV78230), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
8884e3bd610Shsuenaga #if NMVXPE > 0
889ea5bc4c3Shsuenaga     { ARMADAXP(MV78230), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
8904e3bd610Shsuenaga     { ARMADAXP(MV78230), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
8914e3bd610Shsuenaga     { ARMADAXP(MV78230), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
8924e3bd610Shsuenaga     { ARMADAXP(MV78230), "mvxpe", 2, ARMADAXP_GBE2_BASE,ARMADAXP_IRQ_GBE2_TH_RXTX },
8934e3bd610Shsuenaga #else
8947fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvgbec", 0, ARMADAXP_GBE0_BASE,IRQ_DEFAULT },
8957fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
8967fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvgbec", 2, ARMADAXP_GBE2_BASE,IRQ_DEFAULT },
8974e3bd610Shsuenaga #endif
8981a8031e1Shsuenaga #if NMVXPSEC > 0
8991a8031e1Shsuenaga     { ARMADAXP(MV78230), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
9001a8031e1Shsuenaga     { ARMADAXP(MV78230), "mvxpsec", 1, ARMADAXP_XPSEC1_BASE,ARMADAXP_IRQ_CESA1 },
9011a8031e1Shsuenaga #else
9027fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
9037fc0e74eSkiyohara     { ARMADAXP(MV78230), "mvcesa", 1, ARMADAXP_CESA1_BASE,ARMADAXP_IRQ_CESA1 },
9041a8031e1Shsuenaga #endif
905a9160f60Srkujawa 
906a9160f60Srkujawa     { ARMADAXP(MV78260), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
9077fc0e74eSkiyohara     { ARMADAXP(MV78260), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
9087fc0e74eSkiyohara     { ARMADAXP(MV78260), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
9097fc0e74eSkiyohara     { ARMADAXP(MV78260), "com",    2, ARMADAXP_COM2_BASE,ARMADAXP_IRQ_UART2 },
9107fc0e74eSkiyohara     { ARMADAXP(MV78260), "com",    3, ARMADAXP_COM3_BASE,ARMADAXP_IRQ_UART3 },
9117fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
9127fc0e74eSkiyohara     { ARMADAXP(MV78260), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
9137fc0e74eSkiyohara     { ARMADAXP(MV78260), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
9147fc0e74eSkiyohara     { ARMADAXP(MV78260), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
9157fc0e74eSkiyohara     { ARMADAXP(MV78260), "gtidmac",1, ARMADAXP_XORE1_BASE,IRQ_DEFAULT },
9167be4e0d8Skiyohara     { ARMADAXP(MV78260), "mvsocts",0, ARMADAXP_TS_BASE,	ARMADAXP_IRQ_PMU },
9177fc0e74eSkiyohara     { ARMADAXP(MV78260), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
9187fc0e74eSkiyohara     { ARMADAXP(MV78260), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
9197fc0e74eSkiyohara     { ARMADAXP(MV78260), "ehci",   2, ARMADAXP_USB2_BASE,ARMADAXP_IRQ_USB2 },
9207fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
921a9160f60Srkujawa     { ARMADAXP(MV78260), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
922a9160f60Srkujawa     { ARMADAXP(MV78260), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
923a9160f60Srkujawa     { ARMADAXP(MV78260), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
924a9160f60Srkujawa     { ARMADAXP(MV78260), "mvpex",  4, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
9257fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
9267fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
927bf8e0d4cSrkujawa     { ARMADAXP(MV78260), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
9284e3bd610Shsuenaga #if NMVXPE > 0
929ea5bc4c3Shsuenaga     { ARMADAXP(MV78260), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
9304e3bd610Shsuenaga     { ARMADAXP(MV78260), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
9314e3bd610Shsuenaga     { ARMADAXP(MV78260), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
9324e3bd610Shsuenaga     { ARMADAXP(MV78260), "mvxpe", 2, ARMADAXP_GBE2_BASE,ARMADAXP_IRQ_GBE2_TH_RXTX },
9334e3bd610Shsuenaga     { ARMADAXP(MV78260), "mvxpe", 3, ARMADAXP_GBE3_BASE,ARMADAXP_IRQ_GBE3_TH_RXTX },
9344e3bd610Shsuenaga #else
9357fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvgbec", 0, ARMADAXP_GBE0_BASE,IRQ_DEFAULT },
9367fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
9377fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvgbec", 2, ARMADAXP_GBE2_BASE,IRQ_DEFAULT },
9387fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvgbec", 3, ARMADAXP_GBE3_BASE,IRQ_DEFAULT },
9394e3bd610Shsuenaga #endif
9401a8031e1Shsuenaga #if NMVXPSEC > 0
9411a8031e1Shsuenaga     { ARMADAXP(MV78260), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
9421a8031e1Shsuenaga     { ARMADAXP(MV78260), "mvxpsec", 1, ARMADAXP_XPSEC1_BASE,ARMADAXP_IRQ_CESA1 },
9431a8031e1Shsuenaga #else
9447fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
9457fc0e74eSkiyohara     { ARMADAXP(MV78260), "mvcesa", 1, ARMADAXP_CESA1_BASE,ARMADAXP_IRQ_CESA1 },
9461a8031e1Shsuenaga #endif
947a9160f60Srkujawa 
948a9160f60Srkujawa     { ARMADAXP(MV78460), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
9497fc0e74eSkiyohara     { ARMADAXP(MV78460), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
9507fc0e74eSkiyohara     { ARMADAXP(MV78460), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
9517fc0e74eSkiyohara     { ARMADAXP(MV78460), "com",    2, ARMADAXP_COM2_BASE,ARMADAXP_IRQ_UART2 },
9527fc0e74eSkiyohara     { ARMADAXP(MV78460), "com",    3, ARMADAXP_COM3_BASE,ARMADAXP_IRQ_UART3 },
9537fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
9547fc0e74eSkiyohara     { ARMADAXP(MV78460), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
9557fc0e74eSkiyohara     { ARMADAXP(MV78460), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
9567fc0e74eSkiyohara     { ARMADAXP(MV78460), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
9577fc0e74eSkiyohara     { ARMADAXP(MV78460), "gtidmac",1, ARMADAXP_XORE1_BASE,IRQ_DEFAULT },
9587be4e0d8Skiyohara     { ARMADAXP(MV78460), "mvsocts",0, ARMADAXP_TS_BASE,	ARMADAXP_IRQ_PMU },
9597fc0e74eSkiyohara     { ARMADAXP(MV78460), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
9607fc0e74eSkiyohara     { ARMADAXP(MV78460), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
9617fc0e74eSkiyohara     { ARMADAXP(MV78460), "ehci",   2, ARMADAXP_USB2_BASE,ARMADAXP_IRQ_USB2 },
9627fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
963a9160f60Srkujawa     { ARMADAXP(MV78460), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
964a9160f60Srkujawa     { ARMADAXP(MV78460), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
965a9160f60Srkujawa     { ARMADAXP(MV78460), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
966a9160f60Srkujawa     { ARMADAXP(MV78460), "mvpex",  4, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
967a9160f60Srkujawa     { ARMADAXP(MV78460), "mvpex",  5, ARMADAXP_PEX3_BASE,ARMADAXP_IRQ_PEX3 },
968a9160f60Srkujawa     { ARMADAXP(MV78460), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
9697fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
970bf8e0d4cSrkujawa     { ARMADAXP(MV78460), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
9714e3bd610Shsuenaga #if NMVXPE > 0
972ea5bc4c3Shsuenaga     { ARMADAXP(MV78460), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
9734e3bd610Shsuenaga     { ARMADAXP(MV78460), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
9744e3bd610Shsuenaga     { ARMADAXP(MV78460), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
9754e3bd610Shsuenaga     { ARMADAXP(MV78460), "mvxpe", 2, ARMADAXP_GBE2_BASE,ARMADAXP_IRQ_GBE2_TH_RXTX },
9764e3bd610Shsuenaga     { ARMADAXP(MV78460), "mvxpe", 3, ARMADAXP_GBE3_BASE,ARMADAXP_IRQ_GBE3_TH_RXTX },
9774e3bd610Shsuenaga #else
9787fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvgbec", 0, ARMADAXP_GBE0_BASE,IRQ_DEFAULT },
9797fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
9807fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvgbec", 2, ARMADAXP_GBE2_BASE,IRQ_DEFAULT },
9817fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvgbec", 3, ARMADAXP_GBE3_BASE,IRQ_DEFAULT },
9824e3bd610Shsuenaga #endif
9831a8031e1Shsuenaga #if NMVXPSEC > 0
9841a8031e1Shsuenaga     { ARMADAXP(MV78460), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
9851a8031e1Shsuenaga     { ARMADAXP(MV78460), "mvxpsec", 1, ARMADAXP_XPSEC1_BASE,ARMADAXP_IRQ_CESA1 },
9861a8031e1Shsuenaga #else
9877fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
9887fc0e74eSkiyohara     { ARMADAXP(MV78460), "mvcesa", 1, ARMADAXP_CESA1_BASE,ARMADAXP_IRQ_CESA1 },
9891a8031e1Shsuenaga #endif
990cf549ef2Skiyohara 
991cf549ef2Skiyohara     { ARMADA370(MV6710), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
992cf549ef2Skiyohara     { ARMADA370(MV6710), "com",    0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0 },
993cf549ef2Skiyohara     { ARMADA370(MV6710), "com",    1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1 },
994cf549ef2Skiyohara     { ARMADA370(MV6710), "mvsocrtc",0,ARMADAXP_RTC_BASE,ARMADAXP_IRQ_RTC },
995cf549ef2Skiyohara     { ARMADA370(MV6710), "gttwsi", 0, MVSOC_TWSI_BASE,	ARMADAXP_IRQ_TWSI0 },
996cf549ef2Skiyohara     { ARMADA370(MV6710), "gttwsi", 1, ARMADAXP_TWSI1_BASE,ARMADAXP_IRQ_TWSI1 },
997cf549ef2Skiyohara     { ARMADA370(MV6710), "gtidmac",0, ARMADAXP_XORE0_BASE,IRQ_DEFAULT },
998cf549ef2Skiyohara     { ARMADA370(MV6710), "ehci",   0, ARMADAXP_USB0_BASE,ARMADAXP_IRQ_USB0 },
999cf549ef2Skiyohara     { ARMADA370(MV6710), "ehci",   1, ARMADAXP_USB1_BASE,ARMADAXP_IRQ_USB1 },
1000cf549ef2Skiyohara     { ARMADA370(MV6710), "mvpex",  0, MVSOC_PEX_BASE,	ARMADAXP_IRQ_PEX00 },
1001cf549ef2Skiyohara     { ARMADA370(MV6710), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
1002cf549ef2Skiyohara     { ARMADA370(MV6710), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
1003cf549ef2Skiyohara     { ARMADA370(MV6710), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
1004cf549ef2Skiyohara     { ARMADA370(MV6710), "mvspi",  1, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
1005cf549ef2Skiyohara     { ARMADA370(MV6710), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },
10064e3bd610Shsuenaga #if NMVXPE > 0
1007ea5bc4c3Shsuenaga     { ARMADA370(MV6710), "mvxpbm", 0, MVA_OFFSET_DEFAULT,IRQ_DEFAULT },
10084e3bd610Shsuenaga     { ARMADA370(MV6710), "mvxpe", 0, ARMADAXP_GBE0_BASE,ARMADAXP_IRQ_GBE0_TH_RXTX },
10094e3bd610Shsuenaga     { ARMADA370(MV6710), "mvxpe", 1, ARMADAXP_GBE1_BASE,ARMADAXP_IRQ_GBE1_TH_RXTX },
10104e3bd610Shsuenaga #else
1011cf549ef2Skiyohara     { ARMADA370(MV6710), "mvgbec", 0, ARMADAXP_GBE0_BASE,IRQ_DEFAULT },
1012cf549ef2Skiyohara     { ARMADA370(MV6710), "mvgbec", 1, ARMADAXP_GBE1_BASE,IRQ_DEFAULT },
10134e3bd610Shsuenaga #endif
10141a8031e1Shsuenaga #if NMVXPSEC > 0
10151a8031e1Shsuenaga     { ARMADA370(MV6710), "mvxpsec", 0, ARMADAXP_XPSEC0_BASE,ARMADAXP_IRQ_CESA0 },
10161a8031e1Shsuenaga #else
1017cf549ef2Skiyohara     { ARMADA370(MV6710), "mvcesa", 0, ARMADAXP_CESA0_BASE,ARMADAXP_IRQ_CESA0 },
1018a9160f60Srkujawa #endif
10191a8031e1Shsuenaga #endif
102052d286fbSkiyohara };
102152d286fbSkiyohara 
102252d286fbSkiyohara 
102352d286fbSkiyohara CFATTACH_DECL_NEW(mvsoc, sizeof(struct mvsoc_softc),
102452d286fbSkiyohara     mvsoc_match, mvsoc_attach, NULL, NULL);
102552d286fbSkiyohara 
102652d286fbSkiyohara /* ARGSUSED */
102752d286fbSkiyohara static int
mvsoc_match(device_t parent,struct cfdata * match,void * aux)102852d286fbSkiyohara mvsoc_match(device_t parent, struct cfdata *match, void *aux)
102952d286fbSkiyohara {
103052d286fbSkiyohara 
103152d286fbSkiyohara 	return 1;
103252d286fbSkiyohara }
103352d286fbSkiyohara 
103452d286fbSkiyohara /* ARGSUSED */
103552d286fbSkiyohara static void
mvsoc_attach(device_t parent,device_t self,void * aux)103652d286fbSkiyohara mvsoc_attach(device_t parent, device_t self, void *aux)
103752d286fbSkiyohara {
103852d286fbSkiyohara 	struct mvsoc_softc *sc = device_private(self);
103952d286fbSkiyohara 	struct marvell_attach_args mva;
1040cf549ef2Skiyohara 	enum marvell_tags *tags;
104152d286fbSkiyohara 	uint16_t model;
104252d286fbSkiyohara 	uint8_t rev;
104352d286fbSkiyohara 	int i;
104452d286fbSkiyohara 
104552d286fbSkiyohara 	sc->sc_dev = self;
104652d286fbSkiyohara 	sc->sc_iot = &mvsoc_bs_tag;
10477fc0e74eSkiyohara 	sc->sc_addr = vtophys(regbase);
104852d286fbSkiyohara 	sc->sc_dmat = &mvsoc_bus_dma_tag;
104952d286fbSkiyohara 	if (bus_space_map(sc->sc_iot, sc->sc_addr, 0x100000, 0, &sc->sc_ioh) !=
105052d286fbSkiyohara 	    0) {
105152d286fbSkiyohara 		aprint_error_dev(self, "can't map registers\n");
105252d286fbSkiyohara 		return;
105352d286fbSkiyohara 	}
105452d286fbSkiyohara 
105552d286fbSkiyohara 	model = mvsoc_model();
105652d286fbSkiyohara 	rev = mvsoc_rev();
105752d286fbSkiyohara 	for (i = 0; i < __arraycount(nametbl); i++)
105852d286fbSkiyohara 		if (nametbl[i].model == model && nametbl[i].rev == rev)
105952d286fbSkiyohara 			break;
106052d286fbSkiyohara 	if (i >= __arraycount(nametbl))
106152d286fbSkiyohara 		panic("unknown SoC: model 0x%04x, rev 0x%02x", model, rev);
106252d286fbSkiyohara 
106352d286fbSkiyohara 	aprint_normal(": Marvell %s %s%s  %s\n",
106452d286fbSkiyohara 	    nametbl[i].modelstr,
106552d286fbSkiyohara 	    nametbl[i].revstr != NULL ? "Rev. " : "",
106652d286fbSkiyohara 	    nametbl[i].revstr != NULL ? nametbl[i].revstr : "",
106752d286fbSkiyohara 	    nametbl[i].typestr);
106852d286fbSkiyohara         aprint_normal("%s: CPU Clock %d.%03d MHz"
106952d286fbSkiyohara 	    "  SysClock %d.%03d MHz  TClock %d.%03d MHz\n",
107052d286fbSkiyohara 	    device_xname(self),
107152d286fbSkiyohara 	    mvPclk / 1000000, (mvPclk / 1000) % 1000,
107252d286fbSkiyohara 	    mvSysclk / 1000000, (mvSysclk / 1000) % 1000,
107352d286fbSkiyohara 	    mvTclk / 1000000, (mvTclk / 1000) % 1000);
107452d286fbSkiyohara 	aprint_naive("\n");
107552d286fbSkiyohara 
107652d286fbSkiyohara 	mvsoc_intr_init();
107752d286fbSkiyohara 
1078cf549ef2Skiyohara 	for (i = 0; i < __arraycount(tagstbl); i++)
1079cf549ef2Skiyohara 		if (tagstbl[i].model == model && tagstbl[i].rev == rev)
1080cf549ef2Skiyohara 			break;
1081cf549ef2Skiyohara 	if (i >= __arraycount(tagstbl))
1082cf549ef2Skiyohara 		panic("unknown SoC: model 0x%04x, rev 0x%02x", model, rev);
1083cf549ef2Skiyohara 	tags = tagstbl[i].tags;
1084cf549ef2Skiyohara 
1085761e6dbdShsuenaga 	if (boothowto & (AB_VERBOSE | AB_DEBUG))
1086761e6dbdShsuenaga 		mvsoc_target_dump(sc);
1087761e6dbdShsuenaga 
108852d286fbSkiyohara 	for (i = 0; i < __arraycount(mvsoc_periphs); i++) {
108952d286fbSkiyohara 		if (mvsoc_periphs[i].model != model)
109052d286fbSkiyohara 			continue;
109152d286fbSkiyohara 
109252d286fbSkiyohara 		mva.mva_name = mvsoc_periphs[i].name;
109352d286fbSkiyohara 		mva.mva_model = model;
109452d286fbSkiyohara 		mva.mva_revision = rev;
109552d286fbSkiyohara 		mva.mva_iot = sc->sc_iot;
109652d286fbSkiyohara 		mva.mva_ioh = sc->sc_ioh;
109752d286fbSkiyohara 		mva.mva_unit = mvsoc_periphs[i].unit;
109852d286fbSkiyohara 		mva.mva_addr = sc->sc_addr;
109952d286fbSkiyohara 		mva.mva_offset = mvsoc_periphs[i].offset;
110052d286fbSkiyohara 		mva.mva_size = 0;
110152d286fbSkiyohara 		mva.mva_dmat = sc->sc_dmat;
110252d286fbSkiyohara 		mva.mva_irq = mvsoc_periphs[i].irq;
1103cf549ef2Skiyohara 		mva.mva_tags = tags;
110452d286fbSkiyohara 
11054200b0baSkiyohara 		/* Skip clock disabled devices */
11064200b0baSkiyohara 		if (mvsoc_clkgating != NULL && mvsoc_clkgating(&mva)) {
11074200b0baSkiyohara 			aprint_normal_dev(self, "%s%d clock disabled\n",
11084200b0baSkiyohara 			    mvsoc_periphs[i].name, mvsoc_periphs[i].unit);
11094200b0baSkiyohara 			continue;
11104200b0baSkiyohara 		}
11114200b0baSkiyohara 
11122685996bSthorpej 		config_found(sc->sc_dev, &mva, mvsoc_print,
1113c7fb772bSthorpej 		    CFARGS(.submatch = mvsoc_search));
111452d286fbSkiyohara 	}
111552d286fbSkiyohara }
111652d286fbSkiyohara 
111752d286fbSkiyohara static int
mvsoc_print(void * aux,const char * pnp)111852d286fbSkiyohara mvsoc_print(void *aux, const char *pnp)
111952d286fbSkiyohara {
112052d286fbSkiyohara 	struct marvell_attach_args *mva = aux;
112152d286fbSkiyohara 
112252d286fbSkiyohara 	if (pnp)
112352d286fbSkiyohara 		aprint_normal("%s at %s unit %d",
112452d286fbSkiyohara 		    mva->mva_name, pnp, mva->mva_unit);
112552d286fbSkiyohara 	else {
112652d286fbSkiyohara 		if (mva->mva_unit != MVA_UNIT_DEFAULT)
112752d286fbSkiyohara 			aprint_normal(" unit %d", mva->mva_unit);
112852d286fbSkiyohara 		if (mva->mva_offset != MVA_OFFSET_DEFAULT) {
112952d286fbSkiyohara 			aprint_normal(" offset 0x%04lx", mva->mva_offset);
113052d286fbSkiyohara 			if (mva->mva_size > 0)
113152d286fbSkiyohara 				aprint_normal("-0x%04lx",
113252d286fbSkiyohara 				    mva->mva_offset + mva->mva_size - 1);
113352d286fbSkiyohara 		}
113452d286fbSkiyohara 		if (mva->mva_irq != MVA_IRQ_DEFAULT)
113552d286fbSkiyohara 			aprint_normal(" irq %d", mva->mva_irq);
113652d286fbSkiyohara 	}
113752d286fbSkiyohara 
113852d286fbSkiyohara 	return UNCONF;
113952d286fbSkiyohara }
114052d286fbSkiyohara 
114152d286fbSkiyohara /* ARGSUSED */
114252d286fbSkiyohara static int
mvsoc_search(device_t parent,cfdata_t cf,const int * ldesc,void * aux)114352d286fbSkiyohara mvsoc_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
114452d286fbSkiyohara {
114552d286fbSkiyohara 
114652d286fbSkiyohara 	return config_match(parent, cf, aux);
114752d286fbSkiyohara }
114852d286fbSkiyohara 
114952d286fbSkiyohara /* ARGSUSED */
115052d286fbSkiyohara int
marvell_winparams_by_tag(device_t dev,int tag,int * target,int * attribute,uint64_t * base,uint32_t * size)115152d286fbSkiyohara marvell_winparams_by_tag(device_t dev, int tag, int *target, int *attribute,
115252d286fbSkiyohara 			 uint64_t *base, uint32_t *size)
115352d286fbSkiyohara {
115452d286fbSkiyohara 	uint32_t base32;
115552d286fbSkiyohara 	int rv;
115652d286fbSkiyohara 
115752d286fbSkiyohara 	rv = mvsoc_target(tag, target, attribute, &base32, size);
115852d286fbSkiyohara 	*base = base32;
115952d286fbSkiyohara 	if (rv == -1)
116052d286fbSkiyohara 		return -1;
116152d286fbSkiyohara 	return 0;
116252d286fbSkiyohara }
116352d286fbSkiyohara 
116452d286fbSkiyohara 
116552d286fbSkiyohara /*
116652d286fbSkiyohara  * These functions is called before bus_space is initialized.
116752d286fbSkiyohara  */
116852d286fbSkiyohara 
116952d286fbSkiyohara void
mvsoc_bootstrap(bus_addr_t iobase)117052d286fbSkiyohara mvsoc_bootstrap(bus_addr_t iobase)
117152d286fbSkiyohara {
117252d286fbSkiyohara 
117352d286fbSkiyohara 	regbase = iobase;
117452d286fbSkiyohara 	dsc_base = iobase + MVSOC_DSC_BASE;
117552d286fbSkiyohara 	mlmb_base = iobase + MVSOC_MLMB_BASE;
117652d286fbSkiyohara 	pex_base = iobase + MVSOC_PEX_BASE;
11772a16a1d4Smatt #ifdef MVSOC_CONSOLE_EARLY
11782a16a1d4Smatt 	com_base = iobase + MVSOC_COM0_BASE;
11792a16a1d4Smatt 	cn_tab = &mvsoc_earlycons;
11802a16a1d4Smatt 	printf("Hello\n");
11812a16a1d4Smatt #endif
118252d286fbSkiyohara }
118352d286fbSkiyohara 
118452d286fbSkiyohara /*
118552d286fbSkiyohara  * We can read register of PCI configurations from (MVSOC_PEX_BASE + 0).
118652d286fbSkiyohara  */
118752d286fbSkiyohara uint16_t
mvsoc_model(void)11881d7f24eaSmatt mvsoc_model(void)
118952d286fbSkiyohara {
119052d286fbSkiyohara 	/*
119152d286fbSkiyohara 	 * We read product-id from vendor/device register of PCI-Express.
119252d286fbSkiyohara 	 */
119352d286fbSkiyohara 	uint32_t reg;
119452d286fbSkiyohara 	uint16_t model;
119552d286fbSkiyohara 
119652d286fbSkiyohara 	KASSERT(regbase != 0xffffffff);
119752d286fbSkiyohara 
11987d0ac446Srin 	reg = le32toh(*(volatile uint32_t *)(pex_base + PCI_ID_REG));
119952d286fbSkiyohara 	model = PCI_PRODUCT(reg);
120052d286fbSkiyohara 
120152d286fbSkiyohara #if defined(ORION)
120252d286fbSkiyohara 	if (model == PCI_PRODUCT_MARVELL_88F5182) {
12037d0ac446Srin 		reg = le32toh(*(volatile uint32_t *)(regbase + ORION_PMI_BASE +
12047d0ac446Srin 		    ORION_PMI_SAMPLE_AT_RESET));
120552d286fbSkiyohara 		if ((reg & ORION_PMISMPL_TCLK_MASK) == 0)
120652d286fbSkiyohara 			model = PCI_PRODUCT_MARVELL_88F5082;
120752d286fbSkiyohara 	}
120852d286fbSkiyohara #endif
1209bde63c5aSkiyohara #if defined(KIRKWOOD)
1210bde63c5aSkiyohara 	if (model == PCI_PRODUCT_MARVELL_88F6281) {
12117d0ac446Srin 		reg = le32toh(*(volatile uint32_t *)(regbase +
12127d0ac446Srin 		    KIRKWOOD_MISC_BASE + KIRKWOOD_MISC_DEVICEID));
1213bde63c5aSkiyohara 		if (reg == 1)	/* 88F6192 is 1 */
1214bde63c5aSkiyohara 			model = MARVELL_KIRKWOOD_88F6192;
1215bde63c5aSkiyohara 	}
1216bde63c5aSkiyohara #endif
121752d286fbSkiyohara 
121852d286fbSkiyohara 	return model;
121952d286fbSkiyohara }
122052d286fbSkiyohara 
122152d286fbSkiyohara uint8_t
mvsoc_rev(void)12221d7f24eaSmatt mvsoc_rev(void)
122352d286fbSkiyohara {
122452d286fbSkiyohara 	uint32_t reg;
122552d286fbSkiyohara 	uint8_t rev;
122652d286fbSkiyohara 
122752d286fbSkiyohara 	KASSERT(regbase != 0xffffffff);
122852d286fbSkiyohara 
12297d0ac446Srin 	reg = le32toh(*(volatile uint32_t *)(pex_base + PCI_CLASS_REG));
123052d286fbSkiyohara 	rev = PCI_REVISION(reg);
123152d286fbSkiyohara 
123252d286fbSkiyohara 	return rev;
123352d286fbSkiyohara }
123452d286fbSkiyohara 
123552d286fbSkiyohara 
123652d286fbSkiyohara int
mvsoc_target(int tag,uint32_t * target,uint32_t * attr,uint32_t * base,uint32_t * size)123752d286fbSkiyohara mvsoc_target(int tag, uint32_t *target, uint32_t *attr, uint32_t *base,
123852d286fbSkiyohara 	     uint32_t *size)
123952d286fbSkiyohara {
124052d286fbSkiyohara 	int i;
124152d286fbSkiyohara 
124252d286fbSkiyohara 	KASSERT(regbase != 0xffffffff);
124352d286fbSkiyohara 
124452d286fbSkiyohara 	if (tag == MVSOC_TAG_INTERNALREG) {
124552d286fbSkiyohara 		if (target != NULL)
124652d286fbSkiyohara 			*target = 0;
124752d286fbSkiyohara 		if (attr != NULL)
124852d286fbSkiyohara 			*attr = 0;
124952d286fbSkiyohara 		if (base != NULL)
125052d286fbSkiyohara 			*base = read_mlmbreg(MVSOC_MLMB_IRBAR) &
125152d286fbSkiyohara 			    MVSOC_MLMB_IRBAR_BASE_MASK;
125252d286fbSkiyohara 		if (size != NULL)
125352d286fbSkiyohara 			*size = 0;
125452d286fbSkiyohara 
125552d286fbSkiyohara 		return 0;
125652d286fbSkiyohara 	}
125752d286fbSkiyohara 
125852d286fbSkiyohara 	/* sanity check */
125952d286fbSkiyohara 	for (i = 0; i < __arraycount(mvsoc_tags); i++)
126052d286fbSkiyohara 		if (mvsoc_tags[i].tag == tag)
126152d286fbSkiyohara 			break;
126252d286fbSkiyohara 	if (i >= __arraycount(mvsoc_tags))
126352d286fbSkiyohara 		return -1;
126452d286fbSkiyohara 
126552d286fbSkiyohara 	if (target != NULL)
126652d286fbSkiyohara 		*target = mvsoc_tags[i].target;
126752d286fbSkiyohara 	if (attr != NULL)
126852d286fbSkiyohara 		*attr = mvsoc_tags[i].attr;
126952d286fbSkiyohara 
127052d286fbSkiyohara 	if (mvsoc_tags[i].target == MVSOC_UNITID_DDR) {
127151f2e145Skiyohara 		if (tag == MARVELL_TAG_SDRAM_CS0 ||
127251f2e145Skiyohara 		    tag == MARVELL_TAG_SDRAM_CS1 ||
127351f2e145Skiyohara 		    tag == MARVELL_TAG_SDRAM_CS2 ||
127451f2e145Skiyohara 		    tag == MARVELL_TAG_SDRAM_CS3)
127551f2e145Skiyohara 			return mvsoc_target_ddr(mvsoc_tags[i].attr, base, size);
1276a4c1b5d6Skiyohara 		else if (tag == MARVELL_TAG_AXI_CS0 ||
1277a4c1b5d6Skiyohara 		    tag == MARVELL_TAG_AXI_CS1)
1278a4c1b5d6Skiyohara 			return mvsoc_target_axi(tag, base, size);
127951f2e145Skiyohara 		else
128051f2e145Skiyohara 			return mvsoc_target_ddr3(mvsoc_tags[i].attr, base,
128151f2e145Skiyohara 			    size);
128251f2e145Skiyohara 	} else
128351f2e145Skiyohara 		return mvsoc_target_peripheral(mvsoc_tags[i].target,
128451f2e145Skiyohara 		    mvsoc_tags[i].attr, base, size);
128551f2e145Skiyohara }
128651f2e145Skiyohara 
128751f2e145Skiyohara static int
mvsoc_target_ddr(uint32_t attr,uint32_t * base,uint32_t * size)128851f2e145Skiyohara mvsoc_target_ddr(uint32_t attr, uint32_t *base, uint32_t *size)
128951f2e145Skiyohara {
129051f2e145Skiyohara 	uint32_t baseaddrreg, sizereg;
129151f2e145Skiyohara 	int cs;
129251f2e145Skiyohara 
129352d286fbSkiyohara 	/*
129452d286fbSkiyohara 	 * Read DDR SDRAM Controller Address Decode Registers
129552d286fbSkiyohara 	 */
129652d286fbSkiyohara 
129751f2e145Skiyohara 	switch (attr) {
129852d286fbSkiyohara 	case MARVELL_ATTR_SDRAM_CS0:
129952d286fbSkiyohara 		cs = 0;
130052d286fbSkiyohara 		break;
130152d286fbSkiyohara 	case MARVELL_ATTR_SDRAM_CS1:
130252d286fbSkiyohara 		cs = 1;
130352d286fbSkiyohara 		break;
130452d286fbSkiyohara 	case MARVELL_ATTR_SDRAM_CS2:
130552d286fbSkiyohara 		cs = 2;
130652d286fbSkiyohara 		break;
130752d286fbSkiyohara 	case MARVELL_ATTR_SDRAM_CS3:
130852d286fbSkiyohara 		cs = 3;
130952d286fbSkiyohara 		break;
131051f2e145Skiyohara 	default:
1311*4e7cd698Smsaitoh 		aprint_error("unknown ATTR: 0x%x", attr);
131251f2e145Skiyohara 		return -1;
131352d286fbSkiyohara 	}
13147d0ac446Srin 	sizereg = le32toh(*(volatile uint32_t *)(dsc_base +
13157d0ac446Srin 	    MVSOC_DSC_CSSR(cs)));
131652d286fbSkiyohara 	if (sizereg & MVSOC_DSC_CSSR_WINEN) {
13177d0ac446Srin 		baseaddrreg = le32toh(*(volatile uint32_t *)(dsc_base +
13187d0ac446Srin 		    MVSOC_DSC_CSBAR(cs)));
131952d286fbSkiyohara 
132052d286fbSkiyohara 		if (base != NULL)
132152d286fbSkiyohara 			*base = baseaddrreg & MVSOC_DSC_CSBAR_BASE_MASK;
132252d286fbSkiyohara 		if (size != NULL)
132352d286fbSkiyohara 			*size = (sizereg & MVSOC_DSC_CSSR_SIZE_MASK) +
132452d286fbSkiyohara 			    (~MVSOC_DSC_CSSR_SIZE_MASK + 1);
132552d286fbSkiyohara 	} else {
132652d286fbSkiyohara 		if (base != NULL)
132752d286fbSkiyohara 			*base = 0;
132852d286fbSkiyohara 		if (size != NULL)
132952d286fbSkiyohara 			*size = 0;
133052d286fbSkiyohara 	}
133152d286fbSkiyohara 	return 0;
133251f2e145Skiyohara }
133351f2e145Skiyohara 
133451f2e145Skiyohara static int
mvsoc_target_ddr3(uint32_t attr,uint32_t * base,uint32_t * size)133551f2e145Skiyohara mvsoc_target_ddr3(uint32_t attr, uint32_t *base, uint32_t *size)
133651f2e145Skiyohara {
133751f2e145Skiyohara 	uint32_t baseaddrreg, sizereg;
133851f2e145Skiyohara 	int cs, i;
133951f2e145Skiyohara 
134051f2e145Skiyohara 	/*
134151f2e145Skiyohara 	 * Read DDR3 SDRAM Address Decoding Registers
134251f2e145Skiyohara 	 */
134351f2e145Skiyohara 
134451f2e145Skiyohara 	switch (attr) {
134551f2e145Skiyohara 	case MARVELL_ATTR_SDRAM_CS0:
134651f2e145Skiyohara 		cs = 0;
134751f2e145Skiyohara 		break;
134851f2e145Skiyohara 	case MARVELL_ATTR_SDRAM_CS1:
134951f2e145Skiyohara 		cs = 1;
135051f2e145Skiyohara 		break;
135151f2e145Skiyohara 	case MARVELL_ATTR_SDRAM_CS2:
135251f2e145Skiyohara 		cs = 2;
135351f2e145Skiyohara 		break;
135451f2e145Skiyohara 	case MARVELL_ATTR_SDRAM_CS3:
135551f2e145Skiyohara 		cs = 3;
135651f2e145Skiyohara 		break;
135751f2e145Skiyohara 	default:
1358*4e7cd698Smsaitoh 		aprint_error("unknown ATTR: 0x%x", attr);
135951f2e145Skiyohara 		return -1;
136051f2e145Skiyohara 	}
136151f2e145Skiyohara 	for (i = 0; i < MVSOC_MLMB_NWIN; i++) {
136251f2e145Skiyohara 		sizereg = read_mlmbreg(MVSOC_MLMB_WINCR(i));
136351f2e145Skiyohara 		if ((sizereg & MVSOC_MLMB_WINCR_EN) &&
136451f2e145Skiyohara 		    MVSOC_MLMB_WINCR_WINCS(sizereg) == cs)
136551f2e145Skiyohara 			break;
136651f2e145Skiyohara 	}
136751f2e145Skiyohara 	if (i == MVSOC_MLMB_NWIN) {
136851f2e145Skiyohara 		if (base != NULL)
136951f2e145Skiyohara 			*base = 0;
137051f2e145Skiyohara 		if (size != NULL)
137151f2e145Skiyohara 			*size = 0;
137251f2e145Skiyohara 		return 0;
137351f2e145Skiyohara 	}
137451f2e145Skiyohara 
137551f2e145Skiyohara 	baseaddrreg = read_mlmbreg(MVSOC_MLMB_WINBAR(i));
137651f2e145Skiyohara 	if (base != NULL)
137751f2e145Skiyohara 		*base = baseaddrreg & MVSOC_MLMB_WINBAR_BASE_MASK;
137851f2e145Skiyohara 	if (size != NULL)
137951f2e145Skiyohara 		*size = (sizereg & MVSOC_MLMB_WINCR_SIZE_MASK) +
138051f2e145Skiyohara 		    (~MVSOC_MLMB_WINCR_SIZE_MASK + 1);
138151f2e145Skiyohara 	return 0;
138251f2e145Skiyohara }
138351f2e145Skiyohara 
138451f2e145Skiyohara static int
mvsoc_target_axi(int tag,uint32_t * base,uint32_t * size)1385a4c1b5d6Skiyohara mvsoc_target_axi(int tag, uint32_t *base, uint32_t *size)
1386a4c1b5d6Skiyohara {
1387a4c1b5d6Skiyohara 	uint32_t val;
1388a4c1b5d6Skiyohara 	int cs;
1389a4c1b5d6Skiyohara 
1390a4c1b5d6Skiyohara 	/*
1391a4c1b5d6Skiyohara 	 * Read MMAP1 Chip Select N the other side of AXI DDR Registers
1392a4c1b5d6Skiyohara 	 */
1393a4c1b5d6Skiyohara 
1394a4c1b5d6Skiyohara 	switch (tag) {
1395a4c1b5d6Skiyohara 	case MARVELL_TAG_AXI_CS0:
1396a4c1b5d6Skiyohara 		cs = 0;
1397a4c1b5d6Skiyohara 		break;
1398a4c1b5d6Skiyohara 	case MARVELL_TAG_AXI_CS1:
1399a4c1b5d6Skiyohara 		cs = 1;
1400a4c1b5d6Skiyohara 		break;
1401a4c1b5d6Skiyohara 	default:
1402*4e7cd698Smsaitoh 		aprint_error("unknown TAG: 0x%x", tag);
1403a4c1b5d6Skiyohara 		return -1;
1404a4c1b5d6Skiyohara 	}
14057d0ac446Srin 	val = le32toh(*(volatile uint32_t *)(regbase + MVSOC_AXI_MMAP1(cs)));
1406a4c1b5d6Skiyohara 	if (val & MVSOC_AXI_MMAP1_VALID) {
1407a4c1b5d6Skiyohara 		if (base != NULL)
1408a4c1b5d6Skiyohara 			*base = MVSOC_AXI_MMAP1_STARTADDRESS(val);
1409a4c1b5d6Skiyohara 		if (size != NULL)
1410a4c1b5d6Skiyohara 			*size = MVSOC_AXI_MMAP1_AREALENGTH(val);
1411a4c1b5d6Skiyohara 	} else {
1412a4c1b5d6Skiyohara 		if (base != NULL)
1413a4c1b5d6Skiyohara 			*base = 0;
1414a4c1b5d6Skiyohara 		if (size != NULL)
1415a4c1b5d6Skiyohara 			*size = 0;
1416a4c1b5d6Skiyohara 	}
1417a4c1b5d6Skiyohara 	return 0;
1418a4c1b5d6Skiyohara }
1419a4c1b5d6Skiyohara 
1420a4c1b5d6Skiyohara static int
mvsoc_target_peripheral(uint32_t target,uint32_t attr,uint32_t * base,uint32_t * size)142151f2e145Skiyohara mvsoc_target_peripheral(uint32_t target, uint32_t attr, uint32_t *base,
142251f2e145Skiyohara 			uint32_t *size)
142351f2e145Skiyohara {
142451f2e145Skiyohara 	uint32_t basereg, ctrlreg, ta, tamask;
142551f2e145Skiyohara 	int i;
142651f2e145Skiyohara 
142752d286fbSkiyohara 	/*
142852d286fbSkiyohara 	 * Read CPU Address Map Registers
142952d286fbSkiyohara 	 */
143052d286fbSkiyohara 
143151f2e145Skiyohara 	ta = MVSOC_MLMB_WCR_TARGET(target) | MVSOC_MLMB_WCR_ATTR(attr);
143252d286fbSkiyohara 	tamask = MVSOC_MLMB_WCR_TARGET(MVSOC_UNITID_MASK) |
143352d286fbSkiyohara 	    MVSOC_MLMB_WCR_ATTR(MARVELL_ATTR_MASK);
143452d286fbSkiyohara 
143552d286fbSkiyohara 	if (base != NULL)
143652d286fbSkiyohara 		*base = 0;
143752d286fbSkiyohara 	if (size != NULL)
143852d286fbSkiyohara 		*size = 0;
143952d286fbSkiyohara 
144052d286fbSkiyohara 	for (i = 0; i < nwindow; i++) {
144152d286fbSkiyohara 		ctrlreg = read_mlmbreg(MVSOC_MLMB_WCR(i));
144252d286fbSkiyohara 		if ((ctrlreg & tamask) != ta)
144352d286fbSkiyohara 			continue;
144452d286fbSkiyohara 		if (ctrlreg & MVSOC_MLMB_WCR_WINEN) {
144552d286fbSkiyohara 			basereg = read_mlmbreg(MVSOC_MLMB_WBR(i));
144652d286fbSkiyohara 
144752d286fbSkiyohara 			if (base != NULL)
144851f2e145Skiyohara 				*base = basereg & MVSOC_MLMB_WBR_BASE_MASK;
144952d286fbSkiyohara 			if (size != NULL)
145052d286fbSkiyohara 				*size = (ctrlreg &
145152d286fbSkiyohara 				    MVSOC_MLMB_WCR_SIZE_MASK) +
145252d286fbSkiyohara 				    (~MVSOC_MLMB_WCR_SIZE_MASK + 1);
145352d286fbSkiyohara 		}
145452d286fbSkiyohara 		break;
145552d286fbSkiyohara 	}
145652d286fbSkiyohara 	return i;
145752d286fbSkiyohara }
1458761e6dbdShsuenaga 
1459761e6dbdShsuenaga int
mvsoc_target_dump(struct mvsoc_softc * sc)1460761e6dbdShsuenaga mvsoc_target_dump(struct mvsoc_softc *sc)
1461761e6dbdShsuenaga {
1462761e6dbdShsuenaga 	uint32_t reg, base, size, target, attr, enable;
1463761e6dbdShsuenaga 	int i, n;
1464761e6dbdShsuenaga 
1465761e6dbdShsuenaga 	for (i = 0, n = 0; i < nwindow; i++) {
1466761e6dbdShsuenaga 		reg = read_mlmbreg(MVSOC_MLMB_WCR(i));
1467761e6dbdShsuenaga 		enable = reg & MVSOC_MLMB_WCR_WINEN;
1468761e6dbdShsuenaga 		target = MVSOC_MLMB_WCR_GET_TARGET(reg);
1469761e6dbdShsuenaga 		attr = MVSOC_MLMB_WCR_GET_ATTR(reg);
1470761e6dbdShsuenaga 		size = MVSOC_MLMB_WCR_GET_SIZE(reg);
1471761e6dbdShsuenaga 
1472761e6dbdShsuenaga 		reg = read_mlmbreg(MVSOC_MLMB_WBR(i));
1473761e6dbdShsuenaga 		base = MVSOC_MLMB_WBR_GET_BASE(reg);
1474761e6dbdShsuenaga 
1475761e6dbdShsuenaga 		if (!enable)
1476761e6dbdShsuenaga 			continue;
1477761e6dbdShsuenaga 
1478761e6dbdShsuenaga 		aprint_verbose_dev(sc->sc_dev,
1479761e6dbdShsuenaga 		    "Mbus window %2d: Base 0x%08x Size 0x%08x ", i, base, size);
1480761e6dbdShsuenaga #ifdef ARMADAXP
1481761e6dbdShsuenaga 		armadaxp_attr_dump(sc, target, attr);
1482761e6dbdShsuenaga #else
1483761e6dbdShsuenaga 		mvsoc_attr_dump(sc, target, attr);
1484761e6dbdShsuenaga #endif
1485761e6dbdShsuenaga 		printf("\n");
1486761e6dbdShsuenaga 		n++;
1487761e6dbdShsuenaga 	}
1488761e6dbdShsuenaga 
1489761e6dbdShsuenaga 	return n;
1490761e6dbdShsuenaga }
1491761e6dbdShsuenaga 
1492761e6dbdShsuenaga int
mvsoc_attr_dump(struct mvsoc_softc * sc,uint32_t target,uint32_t attr)1493761e6dbdShsuenaga mvsoc_attr_dump(struct mvsoc_softc *sc, uint32_t target, uint32_t attr)
1494761e6dbdShsuenaga {
1495761e6dbdShsuenaga 	aprint_verbose_dev(sc->sc_dev, "target 0x%x(attr 0x%x)", target, attr);
1496761e6dbdShsuenaga 	return 0;
1497761e6dbdShsuenaga }
1498