Module Name:    src
Committed By:   rkujawa
Date:           Wed May 29 20:47:14 UTC 2013

Modified Files:
        src/sys/arch/arm/marvell: mvsoc.c mvsoc_intr.c mvsoc_space.c mvsocreg.h
            mvsocvar.h

Log Message:
Add support for mvsoc-based Armada XP peripherals.

Obtained from Marvell, Semihalf.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/marvell/mvsoc.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/marvell/mvsoc_intr.c \
    src/sys/arch/arm/marvell/mvsoc_space.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/marvell/mvsocreg.h \
    src/sys/arch/arm/marvell/mvsocvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/marvell/mvsoc.c
diff -u src/sys/arch/arm/marvell/mvsoc.c:1.10 src/sys/arch/arm/marvell/mvsoc.c:1.11
--- src/sys/arch/arm/marvell/mvsoc.c:1.10	Fri Oct 19 06:14:44 2012
+++ src/sys/arch/arm/marvell/mvsoc.c	Wed May 29 20:47:14 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsoc.c,v 1.10 2012/10/19 06:14:44 msaitoh Exp $	*/
+/*	$NetBSD: mvsoc.c,v 1.11 2013/05/29 20:47:14 rkujawa Exp $	*/
 /*
  * Copyright (c) 2007, 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.10 2012/10/19 06:14:44 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.11 2013/05/29 20:47:14 rkujawa Exp $");
 
 #include "opt_cputypes.h"
 #include "opt_mvsoc.h"
@@ -46,6 +46,11 @@ __KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.
 #include <arm/marvell/orionreg.h>
 #include <arm/marvell/kirkwoodreg.h>
 
+#if defined(ARMADAXP)
+#include <evbarm/armadaxp/armadaxpreg.h>
+#include <evbarm/marvell/marvellreg.h>
+#endif
+
 #include "locators.h"
 
 #ifdef MVSOC_CONSOLE_EARLY
@@ -64,6 +69,9 @@ uint32_t mvPclk, mvSysclk, mvTclk = 0;
 int nwindow = 0, nremap = 0;
 static vaddr_t regbase = 0xffffffff, dsc_base, pex_base;
 vaddr_t mlmb_base;
+#if defined(ARMADAXP)
+vaddr_t misc_base;
+#endif
 
 void (*mvsoc_intr_init)(void);
 
@@ -175,8 +183,38 @@ static struct {
 	{ KIRKWOOD_TAG_CRYPT,
 	  KIRKWOOD_ATTR_CRYPT,		KIRKWOOD_UNITID_CRYPT },
 #endif
+#if defined(ARMADAXP)
+	{ ARMADAXP_TAG_PEX00_MEM,
+	  ARMADAXP_ATTR_PEXx0_MEM,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX00_IO,
+	  ARMADAXP_ATTR_PEXx0_IO,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX01_MEM,
+	  ARMADAXP_ATTR_PEXx1_MEM,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX01_IO,
+	  ARMADAXP_ATTR_PEXx1_IO,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX02_MEM,
+	  ARMADAXP_ATTR_PEXx2_MEM,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX02_IO,
+	  ARMADAXP_ATTR_PEXx2_IO,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX03_MEM,
+	  ARMADAXP_ATTR_PEXx3_MEM,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX03_IO,
+	  ARMADAXP_ATTR_PEXx3_IO,	ARMADAXP_UNITID_PEX0 },
+	{ ARMADAXP_TAG_PEX2_MEM,
+	  ARMADAXP_ATTR_PEX2_MEM,	ARMADAXP_UNITID_PEX2 },
+	{ ARMADAXP_TAG_PEX2_IO,
+	  ARMADAXP_ATTR_PEX2_IO,	ARMADAXP_UNITID_PEX2 },
+	{ ARMADAXP_TAG_PEX3_MEM,
+	  ARMADAXP_ATTR_PEX3_MEM,	ARMADAXP_UNITID_PEX3 },
+	{ ARMADAXP_TAG_PEX3_IO,
+	  ARMADAXP_ATTR_PEX3_IO,	ARMADAXP_UNITID_PEX3 },
+#endif
 };
 
+#if defined(ARMADAXP)
+#undef ARMADAXP
+#define ARMADAXP(m)	MARVELL_ARMADAXP_ ## m
+#endif
 #if defined(ORION)
 #define ORION_1(m)	MARVELL_ORION_1_ ## m
 #define ORION_2(m)	MARVELL_ORION_2_ ## m
@@ -242,6 +280,15 @@ static struct {
 	{ MV78XX0(MV78100),	2, "MV78100",	"A1",  "Discovery Innovation" },
 	{ MV78XX0(MV78200),	1, "MV78200",	"A0",  "Discovery Innovation" },
 #endif
+
+#if defined(ARMADAXP)
+	{ ARMADAXP(MV78130),	1, "MV78130",	"A0",  "Armada XP" },
+	{ ARMADAXP(MV78160),	1, "MV78160",	"A0",  "Armada XP" },
+	{ ARMADAXP(MV78230),	1, "MV78260",	"A0",  "Armada XP" },
+	{ ARMADAXP(MV78260),	1, "MV78260",	"A0",  "Armada XP" },
+	{ ARMADAXP(MV78460),	1, "MV78460",	"A0",  "Armada XP" },
+	{ ARMADAXP(MV78460),	2, "MV78460",	"B0",  "Armada XP" },
+#endif
 };
 
 #define OFFSET_DEFAULT	MVA_OFFSET_DEFAULT
@@ -445,6 +492,83 @@ static const struct mvsoc_periph {
     { MV78XX0(MV78200),	"gttwsi",0,MVSOC_TWSI_BASE,	MV78XX0_IRQ_TWSI },
       :
 #endif
+
+#if defined(ARMADAXP)
+    { ARMADAXP(MV78130), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
+    { ARMADAXP(MV78130), "com",	0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0INT },
+    { ARMADAXP(MV78130), "com",	1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1INT },
+    { ARMADAXP(MV78130), "com",	2, ARMADAXP_COM2_BASE,	ARMADAXP_IRQ_UART2INT },
+    { ARMADAXP(MV78130), "com",	3, ARMADAXP_COM3_BASE,	ARMADAXP_IRQ_UART3INT },
+    { ARMADAXP(MV78130), "mvsocrtc",0, ARMADAXP_RTC_BASE, ARMADAXP_IRQ_RTCINT },
+    { ARMADAXP(MV78130), "ehci", 0, ARMADAXP_USB0_BASE,	ARMADAXP_IRQ_USB0INT },
+    { ARMADAXP(MV78130), "ehci", 1, ARMADAXP_USB1_BASE,	ARMADAXP_IRQ_USB1INT },
+    { ARMADAXP(MV78130), "mvpex", 0, ARMADAXP_PEX00_BASE, ARMADAXP_IRQ_PEX00},
+    { ARMADAXP(MV78130), "mvpex", 1, ARMADAXP_PEX01_BASE, ARMADAXP_IRQ_PEX01},
+    { ARMADAXP(MV78130), "mvpex", 2, ARMADAXP_PEX02_BASE, ARMADAXP_IRQ_PEX02},
+    { ARMADAXP(MV78130), "mvpex", 3, ARMADAXP_PEX03_BASE, ARMADAXP_IRQ_PEX03},
+
+    { ARMADAXP(MV78160), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
+    { ARMADAXP(MV78160), "com",	0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0INT },
+    { ARMADAXP(MV78160), "com",	1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1INT },
+    { ARMADAXP(MV78160), "com",	2, ARMADAXP_COM2_BASE,	ARMADAXP_IRQ_UART2INT },
+    { ARMADAXP(MV78160), "com",	3, ARMADAXP_COM3_BASE,	ARMADAXP_IRQ_UART3INT },
+    { ARMADAXP(MV78160), "mvsocrtc",0, ARMADAXP_RTC_BASE, ARMADAXP_IRQ_RTCINT },
+    { ARMADAXP(MV78160), "ehci", 0, ARMADAXP_USB0_BASE,	ARMADAXP_IRQ_USB0INT },
+    { ARMADAXP(MV78160), "ehci", 1, ARMADAXP_USB1_BASE,	ARMADAXP_IRQ_USB1INT },
+    { ARMADAXP(MV78160), "mvpex", 0, ARMADAXP_PEX00_BASE, ARMADAXP_IRQ_PEX00},
+    { ARMADAXP(MV78160), "mvpex", 1, ARMADAXP_PEX01_BASE, ARMADAXP_IRQ_PEX01},
+    { ARMADAXP(MV78160), "mvpex", 2, ARMADAXP_PEX02_BASE, ARMADAXP_IRQ_PEX02},
+    { ARMADAXP(MV78160), "mvpex", 3, ARMADAXP_PEX03_BASE, ARMADAXP_IRQ_PEX03},
+    { ARMADAXP(MV78160), "mvpex", 4, ARMADAXP_PEX2_BASE, ARMADAXP_IRQ_PEX2},
+
+    { ARMADAXP(MV78230), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
+    { ARMADAXP(MV78230), "com",	0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0INT },
+    { ARMADAXP(MV78230), "com",	1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1INT },
+    { ARMADAXP(MV78230), "com",	2, ARMADAXP_COM2_BASE,	ARMADAXP_IRQ_UART2INT },
+    { ARMADAXP(MV78230), "com",	3, ARMADAXP_COM3_BASE,	ARMADAXP_IRQ_UART3INT },
+    { ARMADAXP(MV78230), "mvsocrtc",0, ARMADAXP_RTC_BASE, ARMADAXP_IRQ_RTCINT },
+    { ARMADAXP(MV78230), "ehci", 0, ARMADAXP_USB0_BASE,	ARMADAXP_IRQ_USB0INT },
+    { ARMADAXP(MV78230), "ehci", 1, ARMADAXP_USB1_BASE,	ARMADAXP_IRQ_USB1INT },
+    { ARMADAXP(MV78230), "mvpex", 0, ARMADAXP_PEX00_BASE, ARMADAXP_IRQ_PEX00},
+    { ARMADAXP(MV78230), "mvpex", 1, ARMADAXP_PEX01_BASE, ARMADAXP_IRQ_PEX01},
+    { ARMADAXP(MV78230), "mvpex", 2, ARMADAXP_PEX02_BASE, ARMADAXP_IRQ_PEX02},
+    { ARMADAXP(MV78230), "mvpex", 3, ARMADAXP_PEX03_BASE, ARMADAXP_IRQ_PEX03},
+    { ARMADAXP(MV78230), "mvpex", 4, ARMADAXP_PEX2_BASE, ARMADAXP_IRQ_PEX2},
+
+    { ARMADAXP(MV78260), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
+    { ARMADAXP(MV78260), "com",	0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0INT },
+    { ARMADAXP(MV78260), "com",	1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1INT },
+    { ARMADAXP(MV78260), "com",	2, ARMADAXP_COM2_BASE,	ARMADAXP_IRQ_UART2INT },
+    { ARMADAXP(MV78260), "com",	3, ARMADAXP_COM3_BASE,	ARMADAXP_IRQ_UART3INT },
+    { ARMADAXP(MV78260), "mvsocrtc",0, ARMADAXP_RTC_BASE, ARMADAXP_IRQ_RTCINT },
+    { ARMADAXP(MV78260), "ehci", 0, ARMADAXP_USB0_BASE,	ARMADAXP_IRQ_USB0INT },
+    { ARMADAXP(MV78260), "ehci", 1, ARMADAXP_USB1_BASE,	ARMADAXP_IRQ_USB1INT },
+    { ARMADAXP(MV78260), "mvpex", 0, ARMADAXP_PEX00_BASE, ARMADAXP_IRQ_PEX00},
+    { ARMADAXP(MV78260), "mvpex", 1, ARMADAXP_PEX01_BASE, ARMADAXP_IRQ_PEX01},
+    { ARMADAXP(MV78260), "mvpex", 2, ARMADAXP_PEX02_BASE, ARMADAXP_IRQ_PEX02},
+    { ARMADAXP(MV78260), "mvpex", 3, ARMADAXP_PEX03_BASE, ARMADAXP_IRQ_PEX03},
+    { ARMADAXP(MV78260), "mvpex", 4, ARMADAXP_PEX2_BASE, ARMADAXP_IRQ_PEX2},
+
+    { ARMADAXP(MV78460), "mvsoctmr",0,MVSOC_TMR_BASE,	ARMADAXP_IRQ_TIMER0 },
+    { ARMADAXP(MV78460), "com",	0, MVSOC_COM0_BASE,	ARMADAXP_IRQ_UART0INT },
+    { ARMADAXP(MV78460), "com",	1, MVSOC_COM1_BASE,	ARMADAXP_IRQ_UART1INT },
+    { ARMADAXP(MV78460), "com",	2, ARMADAXP_COM2_BASE,	ARMADAXP_IRQ_UART2INT },
+    { ARMADAXP(MV78460), "com",	3, ARMADAXP_COM3_BASE,	ARMADAXP_IRQ_UART3INT },
+    { ARMADAXP(MV78460), "mvsocrtc",0, ARMADAXP_RTC_BASE, ARMADAXP_IRQ_RTCINT },
+    { ARMADAXP(MV78460), "ehci", 0, ARMADAXP_USB0_BASE,	ARMADAXP_IRQ_USB0INT },
+    { ARMADAXP(MV78460), "ehci", 1, ARMADAXP_USB1_BASE,	ARMADAXP_IRQ_USB1INT },
+    { ARMADAXP(MV78460), "mvpex", 0, ARMADAXP_PEX00_BASE, ARMADAXP_IRQ_PEX00},
+    { ARMADAXP(MV78460), "mvpex", 1, ARMADAXP_PEX01_BASE, ARMADAXP_IRQ_PEX01},
+    { ARMADAXP(MV78460), "mvpex", 2, ARMADAXP_PEX02_BASE, ARMADAXP_IRQ_PEX02},
+    { ARMADAXP(MV78460), "mvpex", 3, ARMADAXP_PEX03_BASE, ARMADAXP_IRQ_PEX03},
+    { ARMADAXP(MV78460), "mvpex", 4, ARMADAXP_PEX2_BASE, ARMADAXP_IRQ_PEX2},
+    { ARMADAXP(MV78460), "mvpex", 5, ARMADAXP_PEX3_BASE, ARMADAXP_IRQ_PEX3},
+    { ARMADAXP(MV78460), "mvsata", 0, ARMADAXP_SATAHC_BASE, ARMADAXP_IRQ_SATA0 },
+    { ARMADAXP(MV78460), "gttwsi", 0, ARMADAXP_TWSI0_BASE, ARMADAXP_IRQ_TWSI0},
+    { ARMADAXP(MV78460), "gttwsi", 1, ARMADAXP_TWSI1_BASE, ARMADAXP_IRQ_TWSI1},
+    { ARMADAXP(MV78460), "mvspi", 0, ARMADAXP_SPI0_BASE, ARMADAXP_IRQ_SPI0},
+    { ARMADAXP(MV78460), "mvspi", 1, ARMADAXP_SPI1_BASE, ARMADAXP_IRQ_SPI0},
+#endif
 };
 
 
@@ -594,7 +718,12 @@ void
 mvsoc_bootstrap(bus_addr_t iobase)
 {
 
+#if defined(ARMADAXP)
+	regbase = MARVELL_INTERREGS_PBASE;
+	misc_base = iobase + MVSOC_MISC_BASE;
+#else
 	regbase = iobase;
+#endif
 	dsc_base = iobase + MVSOC_DSC_BASE;
 	mlmb_base = iobase + MVSOC_MLMB_BASE;
 	pex_base = iobase + MVSOC_PEX_BASE;

Index: src/sys/arch/arm/marvell/mvsoc_intr.c
diff -u src/sys/arch/arm/marvell/mvsoc_intr.c:1.5 src/sys/arch/arm/marvell/mvsoc_intr.c:1.6
--- src/sys/arch/arm/marvell/mvsoc_intr.c:1.5	Sun Jul 29 00:07:10 2012
+++ src/sys/arch/arm/marvell/mvsoc_intr.c	Wed May 29 20:47:14 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsoc_intr.c,v 1.5 2012/07/29 00:07:10 matt Exp $	*/
+/*	$NetBSD: mvsoc_intr.c,v 1.6 2013/05/29 20:47:14 rkujawa Exp $	*/
 /*
  * Copyright (c) 2010 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsoc_intr.c,v 1.5 2012/07/29 00:07:10 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsoc_intr.c,v 1.6 2013/05/29 20:47:14 rkujawa Exp $");
 
 #define _INTR_PRIVATE
 
@@ -40,6 +40,12 @@ __KERNEL_RCSID(0, "$NetBSD: mvsoc_intr.c
 #include <arm/marvell/mvsocreg.h>
 #include <arm/marvell/mvsocvar.h>
 
+#include "opt_mvsoc.h"
+
+#if defined(ARMADAXP)
+extern void armadaxp_handle_irq(void *);
+#endif
+
 int (*find_pending_irqs)(void);
 
 static void mvsoc_bridge_pic_unblock_irqs(struct pic_softc *, size_t, uint32_t);
@@ -74,6 +80,10 @@ void
 mvsoc_irq_handler(void *frame)
 {
 	struct cpu_info * const ci = curcpu();
+#if defined(ARMADAXP)
+	ci->ci_data.cpu_nintr++;
+	armadaxp_handle_irq(frame);
+#else
 	const int oldipl = ci->ci_cpl;
 	const uint32_t oldipl_mask = __BIT(oldipl);
 	int ipl_mask = 0;
@@ -87,6 +97,7 @@ mvsoc_irq_handler(void *frame)
 	 */
 	if ((ipl_mask & ~oldipl_mask) > oldipl_mask)
 		pic_do_pending_ints(I32_bit, oldipl, frame);
+#endif
 }
 
 /*
Index: src/sys/arch/arm/marvell/mvsoc_space.c
diff -u src/sys/arch/arm/marvell/mvsoc_space.c:1.5 src/sys/arch/arm/marvell/mvsoc_space.c:1.6
--- src/sys/arch/arm/marvell/mvsoc_space.c:1.5	Sat Jul 28 23:13:16 2012
+++ src/sys/arch/arm/marvell/mvsoc_space.c	Wed May 29 20:47:14 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsoc_space.c,v 1.5 2012/07/28 23:13:16 matt Exp $	*/
+/*	$NetBSD: mvsoc_space.c,v 1.6 2013/05/29 20:47:14 rkujawa Exp $	*/
 /*
  * Copyright (c) 2007 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsoc_space.c,v 1.5 2012/07/28 23:13:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsoc_space.c,v 1.6 2013/05/29 20:47:14 rkujawa Exp $");
 
 #include "opt_mvsoc.h"
 #include "mvpex.h"
@@ -214,6 +214,81 @@ struct bus_space kirkwood_pex1_io_bs_tag
 #endif
 };
 #endif
+
+#if defined(ARMADAXP)
+struct bus_space armadaxp_pex00_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX00_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex00_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX00_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex01_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX01_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex01_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX01_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex02_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX02_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex02_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX02_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex03_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX03_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex03_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX03_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex2_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX2_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex2_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX2_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex3_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX3_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex3_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX3_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+#endif
 #endif
 
 #if NGTPCI > 0
@@ -248,6 +323,14 @@ mvsoc_bs_map(void *space, bus_addr_t add
 	paddr_t startpa, endpa, offset, pa;
 	pt_entry_t *pte;
 	vaddr_t va;
+
+/*
+ * XXX: We are not configuring any decode windows for Armada XP
+ * 	at the moment. We rely on those that have been set by u-boot.
+ *	Hence we don't want to mess around with decode windows,
+ *	till we get full controll over them.
+ */
+
 	int tag = (int)space;
 
 	if (tag != 0) {

Index: src/sys/arch/arm/marvell/mvsocreg.h
diff -u src/sys/arch/arm/marvell/mvsocreg.h:1.3 src/sys/arch/arm/marvell/mvsocreg.h:1.4
--- src/sys/arch/arm/marvell/mvsocreg.h:1.3	Fri Oct 19 06:14:44 2012
+++ src/sys/arch/arm/marvell/mvsocreg.h	Wed May 29 20:47:14 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsocreg.h,v 1.3 2012/10/19 06:14:44 msaitoh Exp $	*/
+/*	$NetBSD: mvsocreg.h,v 1.4 2013/05/29 20:47:14 rkujawa Exp $	*/
 /*
  * Copyright (c) 2007, 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -55,6 +55,11 @@
 #define MVSOC_DSC_CSSR_WINEN		0x00000001
 #define MVSOC_DSC_CSSR_SIZE_MASK	0xff000000
 
+/*
+ * SoC MISC Register
+ */
+
+#define MVSOC_MISC_BASE		(MVSOC_DEVBUS_BASE + 0x8200) /* For Armada XP */
 
 /*
  * Device Bus
@@ -84,13 +89,23 @@
 #define MVSOC_MLMB_BASE		(UNITID2PHYS(MLMB))	/* 0x20000 */
 
 /* CPU Address Map Registers */
+#if defined(ARMADAXP)
+#define MVSOC_MLMB_WCR(w)		  ((w) < 8 ? ((w) << 4) + 0x0 :\
+						     (((w) - 8) << 3) + 0x90)
+#else
 #define MVSOC_MLMB_WCR(w)		  (((w) << 4) + 0x0)
+#endif
 #define MVSOC_MLMB_WCR_WINEN			(1 << 0)
 #define MVSOC_MLMB_WCR_TARGET(t)		(((t) & 0xf) << 4)
 #define MVSOC_MLMB_WCR_ATTR(a)			(((a) & 0xff) << 8)
 #define MVSOC_MLMB_WCR_SIZE_MASK		0xffff0000
 #define MVSOC_MLMB_WCR_SIZE(s)		  (((s) - 1) & MVSOC_MLMB_WCR_SIZE_MASK)
+#if defined(ARMADAXP)
+#define MVSOC_MLMB_WBR(w)		  ((w) < 8 ? ((w) << 4) + 0x4 :\
+						     (((w) - 8) << 3) + 0x94)
+#else
 #define MVSOC_MLMB_WBR(w)		  (((w) << 4) + 0x4)
+#endif
 #define MVSOC_MLMB_WBR_BASE_MASK		0xffff0000
 #define MVSOC_MLMB_WRLR(w)		  (((w) << 4) + 0x8)
 #define MVSOC_MLMB_WRLR_REMAP_MASK		0xffff0000
@@ -101,11 +116,17 @@
 /* CPU Control and Status Registers */
 #define MVSOC_MLMB_CPUCR		  0x100	/* CPU Configuration Register */
 #define MVSOC_MLMB_CPUCSR		  0x104	/* CPU Control/Status Register*/
+#if defined(ARMADAXP)
+#define MVSOC_MLMB_RSTOUTNMASKR		  0x60 /* RSTOUTn Mask Register */
+#define MVSOC_MLMB_SSRR			  0x64	/* System Soft Reset Register */
+#define MVSOC_MLMB_RSTOUTNMASKR_SOFTRSTOUTEN    (1 << 0)
+#else
 #define MVSOC_MLMB_RSTOUTNMASKR		  0x108 /* RSTOUTn Mask Register */
+#define MVSOC_MLMB_SSRR			  0x10c	/* System Soft Reset Register */
+#define MVSOC_MLMB_RSTOUTNMASKR_SOFTRSTOUTEN    (1 << 2)
+#endif
 #define MVSOC_MLMB_RSTOUTNMASKR_PEXRSTOUTEN     (1 << 0)
 #define MVSOC_MLMB_RSTOUTNMASKR_WDRSTOUTEN      (1 << 1)
-#define MVSOC_MLMB_RSTOUTNMASKR_SOFTRSTOUTEN    (1 << 2)
-#define MVSOC_MLMB_SSRR			  0x10c	/* System Soft Reset Register */
 #define MVSOC_MLMB_SSRR_SYSTEMSOFTRST           (1 << 0)
 #define MVSOC_MLMB_MLMBICR		  0x110	/*Mb-L to Mb Bridge Intr Cause*/
 #define MVSOC_MLMB_MLMBIMR		  0x114	/*Mb-L to Mb Bridge Intr Mask */
@@ -115,6 +136,13 @@
 
 #define MVSOC_MLMB_L2CFG		  0x128	/* L2 Cache Config */
 
+/* Coherent Fabric Control and Status */
+#define MVSOC_MLMB_COHERENCY_FABRIC_CTRL  0x200
+#define MVSOC_MLMB_COHERENCY_FABRIC_CFG	  0x204
+
+/* CIB registers offsets */
+#define MVSOC_MLMB_CIB_CTRL_CFG		  0x280
+
 #define MVSOC_TMR_BASE			(MVSOC_MLMB_BASE + 0x0300)
 
 /* CPU Doorbell Registers */
Index: src/sys/arch/arm/marvell/mvsocvar.h
diff -u src/sys/arch/arm/marvell/mvsocvar.h:1.3 src/sys/arch/arm/marvell/mvsocvar.h:1.4
--- src/sys/arch/arm/marvell/mvsocvar.h:1.3	Wed Jul 18 09:45:58 2012
+++ src/sys/arch/arm/marvell/mvsocvar.h	Wed May 29 20:47:14 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsocvar.h,v 1.3 2012/07/18 09:45:58 kiyohara Exp $	*/
+/*	$NetBSD: mvsocvar.h,v 1.4 2013/05/29 20:47:14 rkujawa Exp $	*/
 /*
  * Copyright (c) 2007, 2010 KIYOHARA Takashi
  * All rights reserved.
@@ -47,6 +47,11 @@ extern int nwindow, nremap;
 extern int gpp_npins, gpp_irqbase;
 extern struct bus_space mvsoc_bs_tag;
 extern struct arm32_bus_dma_tag mvsoc_bus_dma_tag;
+#if defined(ARMADAXP)
+extern vaddr_t misc_base;
+#define read_miscreg(o)		(*(volatile uint32_t *)(misc_base + (o)))
+#define write_miscreg(o, v)	(*(volatile uint32_t *)(misc_base + (o)) = (v))
+#endif
 
 #define read_mlmbreg(o)		(*(volatile uint32_t *)(mlmb_base + (o)))
 #define write_mlmbreg(o, v)	(*(volatile uint32_t *)(mlmb_base + (o)) = (v))
@@ -82,9 +87,25 @@ enum mvsoc_tags {
 	KIRKWOOD_TAG_SPI,
 	KIRKWOOD_TAG_BOOTROM,
 	KIRKWOOD_TAG_CRYPT,
+
+	ARMADAXP_TAG_PEX00_MEM,
+	ARMADAXP_TAG_PEX00_IO,
+	ARMADAXP_TAG_PEX01_MEM,
+	ARMADAXP_TAG_PEX01_IO,
+	ARMADAXP_TAG_PEX02_MEM,
+	ARMADAXP_TAG_PEX02_IO,
+	ARMADAXP_TAG_PEX03_MEM,
+	ARMADAXP_TAG_PEX03_IO,
+	ARMADAXP_TAG_PEX2_MEM,
+	ARMADAXP_TAG_PEX2_IO,
+	ARMADAXP_TAG_PEX3_MEM,
+	ARMADAXP_TAG_PEX3_IO,
 };
 int mvsoc_target(int, uint32_t *, uint32_t *, uint32_t *, uint32_t *);
 
+void armadaxp_getclks(void);
+void armadaxp_intr_bootstrap(void);
+
 void orion_intr_bootstrap(void);
 void orion_getclks(bus_addr_t);
 

Reply via email to