Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Nov 2015 07:20:30 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r291443 - in projects/powernv: amd64/amd64 amd64/conf amd64/linux amd64/linux32 arm/arm arm/freescale/imx arm/include arm/samsung/exynos arm64/arm64 arm64/include boot/common boot/i386/...
Message-ID:  <201511290720.tAT7KUxf082883@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sun Nov 29 07:20:30 2015
New Revision: 291443
URL: https://svnweb.freebsd.org/changeset/base/291443

Log:
  Up to date with HEAD.

Added:
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9462_2p0_initvals.h
     - copied unchanged from r291442, head/sys/contrib/dev/ath/ath_hal/ar9300/ar9462_2p0_initvals.h
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9462_2p1_initvals.h
     - copied unchanged from r291442, head/sys/contrib/dev/ath/ath_hal/ar9300/ar9462_2p1_initvals.h
  projects/powernv/dev/ath/if_ath_descdma.c
     - copied unchanged from r291442, head/sys/dev/ath/if_ath_descdma.c
  projects/powernv/dev/ath/if_ath_descdma.h
     - copied unchanged from r291442, head/sys/dev/ath/if_ath_descdma.h
  projects/powernv/dev/ath/if_ath_ioctl.c
     - copied unchanged from r291442, head/sys/dev/ath/if_ath_ioctl.c
  projects/powernv/dev/ath/if_ath_ioctl.h
     - copied unchanged from r291442, head/sys/dev/ath/if_ath_ioctl.h
  projects/powernv/modules/if_enc/
     - copied from r291442, head/sys/modules/if_enc/
Modified:
  projects/powernv/amd64/amd64/elf_machdep.c
  projects/powernv/amd64/conf/GENERIC
  projects/powernv/amd64/linux/linux_sysvec.c
  projects/powernv/amd64/linux32/linux32_sysvec.c
  projects/powernv/arm/arm/cpufunc.c
  projects/powernv/arm/arm/elf_machdep.c
  projects/powernv/arm/arm/gic.c
  projects/powernv/arm/arm/identcpu.c
  projects/powernv/arm/arm/pmap-v6-new.c
  projects/powernv/arm/arm/pmu.c
  projects/powernv/arm/freescale/imx/imx6_anatop.c
  projects/powernv/arm/freescale/imx/imx6_machdep.c
  projects/powernv/arm/freescale/imx/imx_machdep.c
  projects/powernv/arm/freescale/imx/imx_machdep.h
  projects/powernv/arm/freescale/imx/imx_wdogreg.h
  projects/powernv/arm/include/armreg.h
  projects/powernv/arm/include/atomic-v4.h
  projects/powernv/arm/include/atomic-v6.h
  projects/powernv/arm/include/atomic.h
  projects/powernv/arm/include/sf_buf.h
  projects/powernv/arm/samsung/exynos/exynos5_combiner.c
  projects/powernv/arm/samsung/exynos/exynos5_ehci.c
  projects/powernv/arm/samsung/exynos/exynos5_pad.c
  projects/powernv/arm64/arm64/elf_machdep.c
  projects/powernv/arm64/arm64/gic_v3.c
  projects/powernv/arm64/arm64/pmap.c
  projects/powernv/arm64/include/vmparam.h
  projects/powernv/boot/common/disk.c
  projects/powernv/boot/common/disk.h
  projects/powernv/boot/i386/boot2/Makefile
  projects/powernv/boot/kshim/bsd_busspace.c
  projects/powernv/boot/kshim/bsd_global.h
  projects/powernv/boot/kshim/bsd_kernel.c
  projects/powernv/boot/kshim/bsd_kernel.h
  projects/powernv/boot/usb/storage/umass_common.c
  projects/powernv/boot/usb/storage/umass_loader.c
  projects/powernv/boot/usb/usb_busdma_loader.c
  projects/powernv/boot/usb/usbcore.mk
  projects/powernv/cam/ctl/ctl.c
  projects/powernv/compat/ia32/ia32_sysvec.c
  projects/powernv/compat/svr4/svr4_sysvec.c
  projects/powernv/conf/NOTES
  projects/powernv/conf/files
  projects/powernv/conf/ldscript.powerpc64
  projects/powernv/conf/newvers.sh
  projects/powernv/conf/options
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_attach.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_freebsd_inc.h
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_radar.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_radio.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_recv.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300_reset.c
  projects/powernv/contrib/dev/ath/ath_hal/ar9300/ar9300reg.h
  projects/powernv/ddb/db_run.c
  projects/powernv/dev/ahci/ahci.c
  projects/powernv/dev/ath/ath_hal/ah.c
  projects/powernv/dev/ath/ath_hal/ah_devid.h
  projects/powernv/dev/ath/ath_hal/ar9003/ar9300_devid.h
  projects/powernv/dev/ath/if_ath.c
  projects/powernv/dev/ath/if_ath_misc.h
  projects/powernv/dev/ath/if_ath_rx.c
  projects/powernv/dev/ath/if_ath_rx_edma.c
  projects/powernv/dev/ath/if_ath_tx_edma.c
  projects/powernv/dev/ath/if_ath_tx_ht.c
  projects/powernv/dev/drm2/i915/i915_debug.c
  projects/powernv/dev/drm2/i915/i915_dma.c
  projects/powernv/dev/drm2/i915/i915_drm.h
  projects/powernv/dev/isp/isp.c
  projects/powernv/dev/isp/isp_freebsd.c
  projects/powernv/dev/isp/isp_freebsd.h
  projects/powernv/dev/isp/isp_library.c
  projects/powernv/dev/isp/isp_pci.c
  projects/powernv/dev/isp/isp_sbus.c
  projects/powernv/dev/isp/isp_target.c
  projects/powernv/dev/isp/ispmbox.h
  projects/powernv/dev/isp/ispvar.h
  projects/powernv/dev/ntb/ntb_hw/ntb_hw.c
  projects/powernv/dev/ntb/ntb_hw/ntb_hw.h
  projects/powernv/dev/pci/pcireg.h
  projects/powernv/dev/pci/pcivar.h
  projects/powernv/dev/sfxge/common/efsys.h
  projects/powernv/dev/sfxge/common/efx.h
  projects/powernv/dev/sfxge/common/efx_bootcfg.c
  projects/powernv/dev/sfxge/common/efx_ev.c
  projects/powernv/dev/sfxge/common/efx_filter.c
  projects/powernv/dev/sfxge/common/efx_impl.h
  projects/powernv/dev/sfxge/common/efx_intr.c
  projects/powernv/dev/sfxge/common/efx_mac.c
  projects/powernv/dev/sfxge/common/efx_mcdi.c
  projects/powernv/dev/sfxge/common/efx_mcdi.h
  projects/powernv/dev/sfxge/common/efx_mon.c
  projects/powernv/dev/sfxge/common/efx_nic.c
  projects/powernv/dev/sfxge/common/efx_nvram.c
  projects/powernv/dev/sfxge/common/efx_phy.c
  projects/powernv/dev/sfxge/common/efx_port.c
  projects/powernv/dev/sfxge/common/efx_rx.c
  projects/powernv/dev/sfxge/common/efx_sram.c
  projects/powernv/dev/sfxge/common/efx_tx.c
  projects/powernv/dev/sfxge/common/efx_vpd.c
  projects/powernv/dev/sfxge/common/efx_wol.c
  projects/powernv/dev/sfxge/common/hunt_ev.c
  projects/powernv/dev/sfxge/common/hunt_filter.c
  projects/powernv/dev/sfxge/common/hunt_impl.h
  projects/powernv/dev/sfxge/common/hunt_intr.c
  projects/powernv/dev/sfxge/common/hunt_mac.c
  projects/powernv/dev/sfxge/common/hunt_mcdi.c
  projects/powernv/dev/sfxge/common/hunt_nic.c
  projects/powernv/dev/sfxge/common/hunt_nvram.c
  projects/powernv/dev/sfxge/common/hunt_phy.c
  projects/powernv/dev/sfxge/common/hunt_rx.c
  projects/powernv/dev/sfxge/common/hunt_sram.c
  projects/powernv/dev/sfxge/common/hunt_tx.c
  projects/powernv/dev/sfxge/common/hunt_vpd.c
  projects/powernv/dev/sfxge/common/mcdi_mon.c
  projects/powernv/dev/sfxge/common/mcdi_mon.h
  projects/powernv/dev/sfxge/common/siena_flash.h
  projects/powernv/dev/sfxge/common/siena_impl.h
  projects/powernv/dev/sfxge/common/siena_mac.c
  projects/powernv/dev/sfxge/common/siena_mcdi.c
  projects/powernv/dev/sfxge/common/siena_nic.c
  projects/powernv/dev/sfxge/common/siena_nvram.c
  projects/powernv/dev/sfxge/common/siena_phy.c
  projects/powernv/dev/sfxge/common/siena_sram.c
  projects/powernv/dev/sfxge/common/siena_vpd.c
  projects/powernv/dev/usb/wlan/if_urtwn.c
  projects/powernv/dev/usb/wlan/if_urtwnreg.h
  projects/powernv/dev/usb/wlan/if_urtwnvar.h
  projects/powernv/i386/conf/GENERIC
  projects/powernv/i386/conf/NOTES
  projects/powernv/i386/i386/elf_machdep.c
  projects/powernv/i386/i386/machdep.c
  projects/powernv/i386/linux/linux_sysvec.c
  projects/powernv/kern/imgact_aout.c
  projects/powernv/kern/init_main.c
  projects/powernv/kern/kern_hhook.c
  projects/powernv/kern/subr_witness.c
  projects/powernv/kern/vfs_subr.c
  projects/powernv/mips/conf/AP143.hints
  projects/powernv/mips/conf/QCA953X_BASE
  projects/powernv/mips/conf/QCA953X_BASE.hints
  projects/powernv/mips/mips/elf_machdep.c
  projects/powernv/mips/mips/freebsd32_machdep.c
  projects/powernv/modules/Makefile
  projects/powernv/modules/ath/Makefile
  projects/powernv/net/if.c
  projects/powernv/net/if_enc.c
  projects/powernv/net/if_enc.h
  projects/powernv/net/if_var.h
  projects/powernv/net80211/ieee80211_ht.c
  projects/powernv/net80211/ieee80211_ioctl.c
  projects/powernv/netinet/in_pcb.c
  projects/powernv/netinet/ip_input.c
  projects/powernv/netinet/sctp_output.c
  projects/powernv/netinet/sctp_usrreq.c
  projects/powernv/netinet/sctputil.c
  projects/powernv/netinet6/ip6_input.c
  projects/powernv/netipsec/ipsec.c
  projects/powernv/netipsec/ipsec.h
  projects/powernv/netipsec/ipsec_input.c
  projects/powernv/netipsec/ipsec_output.c
  projects/powernv/netpfil/ipfw/ip_fw_private.h
  projects/powernv/netpfil/ipfw/ip_fw_sockopt.c
  projects/powernv/ofed/include/rdma/ib_pma.h
  projects/powernv/pc98/conf/GENERIC
  projects/powernv/pc98/conf/NOTES
  projects/powernv/powerpc/aim/locore64.S
  projects/powernv/powerpc/aim/slb.c
  projects/powernv/powerpc/conf/GENERIC
  projects/powernv/powerpc/include/asm.h
  projects/powernv/powerpc/include/atomic.h
  projects/powernv/powerpc/powerpc/elf32_machdep.c
  projects/powernv/powerpc/powerpc/elf64_machdep.c
  projects/powernv/powerpc/powerpc/exec_machdep.c
  projects/powernv/powerpc/powerpc/swtch64.S
  projects/powernv/powerpc/powerpc/vm_machdep.c
  projects/powernv/sparc64/conf/GENERIC
  projects/powernv/sparc64/include/kerneldump.h
  projects/powernv/sparc64/sparc64/elf_machdep.c
  projects/powernv/sys/hhook.h
  projects/powernv/sys/sysent.h
  projects/powernv/sys/vnode.h
  projects/powernv/vm/vm_pageout.c
  projects/powernv/vm/vm_reserv.c
  projects/powernv/x86/x86/identcpu.c
Directory Properties:
  projects/powernv/   (props changed)
  projects/powernv/boot/   (props changed)
  projects/powernv/conf/   (props changed)

Modified: projects/powernv/amd64/amd64/elf_machdep.c
==============================================================================
--- projects/powernv/amd64/amd64/elf_machdep.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/amd64/amd64/elf_machdep.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -51,8 +51,6 @@ struct sysentvec elf64_freebsd_sysvec = 
 	.sv_size	= SYS_MAXSYSCALL,
 	.sv_table	= sysent,
 	.sv_mask	= 0,
-	.sv_sigsize	= 0,
-	.sv_sigtbl	= NULL,
 	.sv_errsize	= 0,
 	.sv_errtbl	= NULL,
 	.sv_transtrap	= NULL,
@@ -60,7 +58,6 @@ struct sysentvec elf64_freebsd_sysvec = 
 	.sv_sendsig	= sendsig,
 	.sv_sigcode	= sigcode,
 	.sv_szsigcode	= &szsigcode,
-	.sv_prepsyscall	= NULL,
 	.sv_name	= "FreeBSD ELF64",
 	.sv_coredump	= __elfN(coredump),
 	.sv_imgact_try	= NULL,

Modified: projects/powernv/amd64/conf/GENERIC
==============================================================================
--- projects/powernv/amd64/conf/GENERIC	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/amd64/conf/GENERIC	Sun Nov 29 07:20:30 2015	(r291443)
@@ -28,7 +28,7 @@ options 	SCHED_ULE		# ULE scheduler
 options 	PREEMPTION		# Enable kernel thread preemption
 options 	INET			# InterNETworking
 options 	INET6			# IPv6 communications protocols
-options		IPSEC			# IP (v4/v6) security
+options 	IPSEC			# IP (v4/v6) security
 options 	TCP_OFFLOAD		# TCP offload
 options 	SCTP			# Stream Control Transmission Protocol
 options 	FFS			# Berkeley Fast Filesystem

Modified: projects/powernv/amd64/linux/linux_sysvec.c
==============================================================================
--- projects/powernv/amd64/linux/linux_sysvec.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/amd64/linux/linux_sysvec.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -750,8 +750,6 @@ struct sysentvec elf_linux_sysvec = {
 	.sv_size	= LINUX_SYS_MAXSYSCALL,
 	.sv_table	= linux_sysent,
 	.sv_mask	= 0,
-	.sv_sigsize	= 0,
-	.sv_sigtbl	= NULL,
 	.sv_errsize	= ELAST + 1,
 	.sv_errtbl	= bsd_to_linux_errno,
 	.sv_transtrap	= translate_traps,
@@ -759,7 +757,6 @@ struct sysentvec elf_linux_sysvec = {
 	.sv_sendsig	= linux_rt_sendsig,
 	.sv_sigcode	= &_binary_linux_locore_o_start,
 	.sv_szsigcode	= &linux_szsigcode,
-	.sv_prepsyscall	= NULL,
 	.sv_name	= "Linux ELF64",
 	.sv_coredump	= elf64_coredump,
 	.sv_imgact_try	= exec_linux_imgact_try,

Modified: projects/powernv/amd64/linux32/linux32_sysvec.c
==============================================================================
--- projects/powernv/amd64/linux32/linux32_sysvec.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/amd64/linux32/linux32_sysvec.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -1011,8 +1011,6 @@ struct sysentvec elf_linux_sysvec = {
 	.sv_size	= LINUX32_SYS_MAXSYSCALL,
 	.sv_table	= linux32_sysent,
 	.sv_mask	= 0,
-	.sv_sigsize	= 0,
-	.sv_sigtbl	= NULL,
 	.sv_errsize	= ELAST + 1,
 	.sv_errtbl	= bsd_to_linux_errno,
 	.sv_transtrap	= translate_traps,
@@ -1020,7 +1018,6 @@ struct sysentvec elf_linux_sysvec = {
 	.sv_sendsig	= linux_sendsig,
 	.sv_sigcode	= &_binary_linux32_locore_o_start,
 	.sv_szsigcode	= &linux_szsigcode,
-	.sv_prepsyscall	= NULL,
 	.sv_name	= "Linux ELF32",
 	.sv_coredump	= elf32_coredump,
 	.sv_imgact_try	= exec_linux_imgact_try,

Modified: projects/powernv/arm/arm/cpufunc.c
==============================================================================
--- projects/powernv/arm/arm/cpufunc.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/cpufunc.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -910,7 +910,8 @@ set_cpufuncs()
 	    cputype == CPU_ID_CORTEXA15R1 ||
 	    cputype == CPU_ID_CORTEXA15R2 ||
 	    cputype == CPU_ID_CORTEXA15R3 ||
-	    cputype == CPU_ID_KRAIT ) {
+	    cputype == CPU_ID_KRAIT300R0 ||
+	    cputype == CPU_ID_KRAIT300R1 ) {
 		cpufuncs = cortexa_cpufuncs;
 		cpu_reset_needs_v4_MMU_disable = 1;     /* V4 or higher */
 		get_cachetype_cp15();

Modified: projects/powernv/arm/arm/elf_machdep.c
==============================================================================
--- projects/powernv/arm/arm/elf_machdep.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/elf_machdep.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -52,8 +52,6 @@ struct sysentvec elf32_freebsd_sysvec = 
 	.sv_size	= SYS_MAXSYSCALL,
 	.sv_table	= sysent,
 	.sv_mask	= 0,
-	.sv_sigsize	= 0,
-	.sv_sigtbl	= NULL,
 	.sv_errsize	= 0,
 	.sv_errtbl	= NULL,
 	.sv_transtrap	= NULL,
@@ -61,7 +59,6 @@ struct sysentvec elf32_freebsd_sysvec = 
 	.sv_sendsig	= sendsig,
 	.sv_sigcode	= sigcode,
 	.sv_szsigcode	= &szsigcode,
-	.sv_prepsyscall	= NULL,
 	.sv_name	= "FreeBSD ELF32",
 	.sv_coredump	= __elfN(coredump),
 	.sv_imgact_try	= NULL,

Modified: projects/powernv/arm/arm/gic.c
==============================================================================
--- projects/powernv/arm/arm/gic.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/gic.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -68,6 +68,8 @@ __FBSDID("$FreeBSD$");
 #include "pic_if.h"
 #endif
 
+#define GIC_DEBUG_SPURIOUS
+
 /* We are using GICv2 register naming */
 
 /* Distributor Registers */
@@ -135,6 +137,9 @@ struct arm_gic_softc {
 	uint8_t			ver;
 	struct mtx		mutex;
 	uint32_t		nirqs;
+#ifdef GIC_DEBUG_SPURIOUS
+	uint32_t		last_irq[MAXCPU];
+#endif
 };
 
 static struct resource_spec arm_gic_spec[] = {
@@ -287,7 +292,7 @@ arm_gic_init_secondary(device_t dev)
 }
 #endif /* ARM_INTRNG */
 #endif /* SMP */
- 
+
 #ifndef ARM_INTRNG
 int
 gic_decode_fdt(phandle_t iparent, pcell_t *intr, int *interrupt,
@@ -335,11 +340,10 @@ gic_decode_fdt(phandle_t iparent, pcell_
 		 */
 		if (fdt32_to_cpu(intr[2]) & 0x0a) {
 			printf("unsupported trigger/polarity configuration "
-			    "0x%2x\n", fdt32_to_cpu(intr[2]) & 0x0f);
-			return (ENOTSUP);
+			    "0x%02x\n", fdt32_to_cpu(intr[2]) & 0x0f);
 		}
 		*pol  = INTR_POLARITY_CONFORM;
-		if (fdt32_to_cpu(intr[2]) & 0x01)
+		if (fdt32_to_cpu(intr[2]) & 0x03)
 			*trig = INTR_TRIGGER_EDGE;
 		else
 			*trig = INTR_TRIGGER_LEVEL;
@@ -367,6 +371,7 @@ arm_gic_attach(device_t dev)
 	int		i;
 	uint32_t	icciidr;
 #ifdef ARM_INTRNG
+	phandle_t	pxref;
 	intptr_t	xref = gic_xref(dev);
 #endif
 
@@ -456,7 +461,9 @@ arm_gic_attach(device_t dev)
 		goto cleanup;
 	}
 
-	if (sc->gic_res[2] == NULL) {
+	i = OF_getencprop(ofw_bus_get_node(dev), "interrupt-parent",
+	    &pxref, sizeof(pxref));
+	if (i > 0 && xref == pxref) {
 		if (arm_pic_claim_root(dev, xref, arm_gic_intr, sc,
 		    GIC_LAST_SGI - GIC_FIRST_SGI + 1) != 0) {
 			device_printf(dev, "could not set PIC as a root\n");
@@ -472,6 +479,7 @@ arm_gic_attach(device_t dev)
 		}
 	}
 
+	OF_device_register_xref(xref, dev);
 	return (0);
 
 cleanup:
@@ -516,8 +524,11 @@ arm_gic_intr(void *arg)
 	 */
 
 	if (irq >= sc->nirqs) {
-		device_printf(sc->gic_dev, "Spurious interrupt detected\n");
-		gic_c_write_4(sc, GICC_EOIR, irq_active_reg);
+#ifdef GIC_DEBUG_SPURIOUS
+		device_printf(sc->gic_dev,
+		    "Spurious interrupt detected: last irq: %d on CPU%d\n",
+		    sc->last_irq[PCPU_GET(cpuid)], PCPU_GET(cpuid));
+#endif
 		return (FILTER_HANDLED);
 	}
 
@@ -542,12 +553,16 @@ dispatch_irq:
 		arm_ipi_dispatch(isrc, tf);
 		goto next_irq;
 #else
-		printf("SGI %u on UP system detected\n", irq - GIC_FIRST_SGI);
+		device_printf(sc->gic_dev, "SGI %u on UP system detected\n",
+		    irq - GIC_FIRST_SGI);
 		gic_c_write_4(sc, GICC_EOIR, irq_active_reg);
 		goto next_irq;
 #endif
 	}
 
+#ifdef GIC_DEBUG_SPURIOUS
+	sc->last_irq[PCPU_GET(cpuid)] = irq;
+#endif
 	if (isrc->isrc_trig == INTR_TRIGGER_EDGE)
 		gic_c_write_4(sc, GICC_EOIR, irq_active_reg);
 
@@ -729,12 +744,12 @@ gic_map_fdt(struct arm_gic_softc *sc, st
 		 */
 		tripol = isrc->isrc_cells[2];
 		if (tripol & 0x0a) {
-			printf("unsupported trigger/polarity configuration "
-			    "0x%2x\n", tripol & 0x0f);
-			return (ENOTSUP);
+			device_printf(sc->gic_dev,
+			   "unsupported trigger/polarity configuration "
+			   "0x%02x\n",  tripol & 0x0f);
 		}
 		pol = INTR_POLARITY_CONFORM;
-		if (tripol & 0x01)
+		if (tripol & 0x03)
 			trig = INTR_TRIGGER_EDGE;
 		else
 			trig = INTR_TRIGGER_LEVEL;
@@ -911,7 +926,8 @@ arm_gic_next_irq(struct arm_gic_softc *s
 
 	if (active_irq == 0x3FF) {
 		if (last_irq == -1)
-			printf("Spurious interrupt detected\n");
+			device_printf(sc->gic_dev,
+			    "Spurious interrupt detected\n");
 		return -1;
 	}
 

Modified: projects/powernv/arm/arm/identcpu.c
==============================================================================
--- projects/powernv/arm/arm/identcpu.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/identcpu.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -197,7 +197,9 @@ const struct cpuidtab cpuids[] = {
 	  generic_steppings },
 	{ CPU_ID_CORTEXA15R3,	CPU_CLASS_CORTEXA,	"Cortex A15-r3",
 	  generic_steppings },
-	{ CPU_ID_KRAIT,		CPU_CLASS_KRAIT,	"Krait",
+	{ CPU_ID_KRAIT300R0,	CPU_CLASS_KRAIT,	"Krait 300-r0",
+	  generic_steppings },
+	{ CPU_ID_KRAIT300R1,	CPU_CLASS_KRAIT,	"Krait 300-r1",
 	  generic_steppings },
 
 	{ CPU_ID_80200,		CPU_CLASS_XSCALE,	"i80200",

Modified: projects/powernv/arm/arm/pmap-v6-new.c
==============================================================================
--- projects/powernv/arm/arm/pmap-v6-new.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/pmap-v6-new.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -1541,12 +1541,12 @@ pmap_pt2pg_zero(vm_page_t m)
 		panic("%s: CMAP2 busy", __func__);
 	pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(pa, PTE2_AP_KRW,
 	    m->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR2);
 	/*  Even VM_ALLOC_ZERO request is only advisory. */
 	if ((m->flags & PG_ZERO) == 0)
 		pagezero(sysmaps->CADDR2);
 	pte2_sync_range((pt2_entry_t *)sysmaps->CADDR2, PAGE_SIZE);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 
@@ -5470,7 +5470,6 @@ pmap_page_set_memattr(vm_page_t m, vm_me
 	struct sysmaps *sysmaps;
 	vm_memattr_t oma;
 	vm_paddr_t pa;
-	vm_offset_t va;
 
 	oma = m->md.pat_mode;
 	m->md.pat_mode = ma;
@@ -5502,10 +5501,9 @@ pmap_page_set_memattr(vm_page_t m, vm_me
 		if (*sysmaps->CMAP2)
 			panic("%s: CMAP2 busy", __func__);
 		pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(pa, PTE2_AP_KRW, ma));
-		va = (vm_offset_t)sysmaps->CADDR2;
-		tlb_flush_local(va);
-		dcache_wbinv_poc(va, pa, PAGE_SIZE);
+		dcache_wbinv_poc((vm_offset_t)sysmaps->CADDR2, pa, PAGE_SIZE);
 		pte2_clear(sysmaps->CMAP2);
+		tlb_flush((vm_offset_t)sysmaps->CADDR2);
 		sched_unpin();
 		mtx_unlock(&sysmaps->lock);
 	}
@@ -5594,9 +5592,9 @@ pmap_zero_page(vm_page_t m)
 		panic("%s: CMAP2 busy", __func__);
 	pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    m->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR2);
 	pagezero(sysmaps->CADDR2);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }
@@ -5619,12 +5617,12 @@ pmap_zero_page_area(vm_page_t m, int off
 		panic("%s: CMAP2 busy", __func__);
 	pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    m->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR2);
 	if (off == 0 && size == PAGE_SIZE)
 		pagezero(sysmaps->CADDR2);
 	else
 		bzero(sysmaps->CADDR2 + off, size);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }
@@ -5644,9 +5642,9 @@ pmap_zero_page_idle(vm_page_t m)
 	sched_pin();
 	pte2_store(CMAP3, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    m->md.pat_mode));
-	tlb_flush_local((vm_offset_t)CADDR3);
 	pagezero(CADDR3);
 	pte2_clear(CMAP3);
+	tlb_flush((vm_offset_t)CADDR3);
 	sched_unpin();
 }
 
@@ -5670,13 +5668,13 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 		panic("%s: CMAP2 busy", __func__);
 	pte2_store(sysmaps->CMAP1, PTE2_KERN_NG(VM_PAGE_TO_PHYS(src),
 	    PTE2_AP_KR | PTE2_NM, src->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR1);
 	pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(VM_PAGE_TO_PHYS(dst),
 	    PTE2_AP_KRW, dst->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR2);
 	bcopy(sysmaps->CADDR1, sysmaps->CADDR2, PAGE_SIZE);
 	pte2_clear(sysmaps->CMAP1);
+	tlb_flush((vm_offset_t)sysmaps->CADDR1);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }
@@ -5721,7 +5719,9 @@ pmap_copy_pages(vm_page_t ma[], vm_offse
 		xfersize -= cnt;
 	}
 	pte2_clear(sysmaps->CMAP1);
+	tlb_flush((vm_offset_t)sysmaps->CADDR1);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }
@@ -5740,8 +5740,6 @@ pmap_quick_enter_page(vm_page_t m)
 
 	pte2_store(pte2p, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    pmap_page_get_memattr(m)));
-	tlb_flush_local(qmap_addr);
-
 	return (qmap_addr);
 }
 
@@ -5758,6 +5756,7 @@ pmap_quick_remove_page(vm_offset_t addr)
 	KASSERT(pte2_load(pte2p) != 0, ("%s: PTE2 not in use", __func__));
 
 	pte2_clear(pte2p);
+	tlb_flush(qmap_addr);
 	critical_exit();
 }
 
@@ -6059,9 +6058,9 @@ pmap_dcache_wb_pou(vm_paddr_t pa, vm_siz
 	if (*sysmaps->CMAP3)
 		panic("%s: CMAP3 busy", __func__);
 	pte2_store(sysmaps->CMAP3, PTE2_KERN_NG(pa, PTE2_AP_KRW, ma));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR3);
 	dcache_wb_pou((vm_offset_t)sysmaps->CADDR3 + (pa & PAGE_MASK), size);
 	pte2_clear(sysmaps->CMAP3);
+	tlb_flush((vm_offset_t)sysmaps->CADDR3);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }
@@ -6313,13 +6312,13 @@ pmap_zero_page_check(vm_page_t m)
 		panic("%s: CMAP2 busy", __func__);
 	pte2_store(sysmaps->CMAP2, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    m->md.pat_mode));
-	tlb_flush_local((vm_offset_t)sysmaps->CADDR2);
 	end = (uint32_t*)(sysmaps->CADDR2 + PAGE_SIZE);
 	for (p = (uint32_t*)sysmaps->CADDR2; p < end; p++)
 		if (*p != 0)
 			panic("%s: page %p not zero, va: %p", __func__, m,
 			    sysmaps->CADDR2);
 	pte2_clear(sysmaps->CMAP2);
+	tlb_flush((vm_offset_t)sysmaps->CADDR2);
 	sched_unpin();
 	mtx_unlock(&sysmaps->lock);
 }

Modified: projects/powernv/arm/arm/pmu.c
==============================================================================
--- projects/powernv/arm/arm/pmu.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/arm/pmu.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -89,7 +89,7 @@ static struct ofw_compat_data compat_dat
 static struct resource_spec pmu_spec[] = {
 	{ SYS_RES_IRQ,		0,	RF_ACTIVE },
 	/* We don't currently handle pmu events, other than on cpu 0 */
-#if notyet
+#ifdef notyet
 	{ SYS_RES_IRQ,		1,	RF_ACTIVE | RF_OPTIONAL },
 	{ SYS_RES_IRQ,		2,	RF_ACTIVE | RF_OPTIONAL },
 	{ SYS_RES_IRQ,		3,	RF_ACTIVE | RF_OPTIONAL },

Modified: projects/powernv/arm/freescale/imx/imx6_anatop.c
==============================================================================
--- projects/powernv/arm/freescale/imx/imx6_anatop.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/freescale/imx/imx6_anatop.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -72,11 +72,10 @@ __FBSDID("$FreeBSD$");
 #include <arm/freescale/fsl_ocotpreg.h>
 #include <arm/freescale/fsl_ocotpvar.h>
 #include <arm/freescale/imx/imx_ccmvar.h>
+#include <arm/freescale/imx/imx_machdep.h>
 #include <arm/freescale/imx/imx6_anatopreg.h>
 #include <arm/freescale/imx/imx6_anatopvar.h>
 
-static SYSCTL_NODE(_hw, OID_AUTO, imx6, CTLFLAG_RW, NULL, "i.MX6 container");
-
 static struct resource_spec imx6_anatop_spec[] = {
 	{ SYS_RES_MEMORY,	0,	RF_ACTIVE },
 	{ SYS_RES_IRQ,		0,	RF_ACTIVE },
@@ -395,23 +394,23 @@ cpufreq_initialize(struct imx6_anatop_so
 	uint32_t cfg3speed;
 	struct oppt * op;
 
-	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6),
+	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx),
 	    OID_AUTO, "cpu_mhz", CTLFLAG_RD, &sc->cpu_curmhz, 0, 
 	    "CPU frequency");
 
-	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6), 
+	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx), 
 	    OID_AUTO, "cpu_minmhz", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NOFETCH,
 	    sc, 0, cpufreq_sysctl_minmhz, "IU", "Minimum CPU frequency");
 
-	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6),
+	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx),
 	    OID_AUTO, "cpu_maxmhz", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NOFETCH,
 	    sc, 0, cpufreq_sysctl_maxmhz, "IU", "Maximum CPU frequency");
 
-	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6),
+	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx),
 	    OID_AUTO, "cpu_maxmhz_hw", CTLFLAG_RD, &sc->cpu_maxmhz_hw, 0, 
 	    "Maximum CPU frequency allowed by hardware");
 
-	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6),
+	SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx),
 	    OID_AUTO, "cpu_overclock_enable", CTLFLAG_RWTUN, 
 	    &sc->cpu_overclock_enable, 0, 
 	    "Allow setting CPU frequency higher than cpu_maxmhz_hw");
@@ -626,10 +625,10 @@ initialize_tempmon(struct imx6_anatop_so
 	callout_reset_sbt(&sc->temp_throttle_callout, sc->temp_throttle_delay, 
 	    0, tempmon_throttle_check, sc, 0);
 
-	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6), 
+	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx), 
 	    OID_AUTO, "temperature", CTLTYPE_INT | CTLFLAG_RD, sc, 0,
 	    temp_sysctl_handler, "IK", "Current die temperature");
-	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx6), 
+	SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_imx), 
 	    OID_AUTO, "throttle_temperature", CTLTYPE_INT | CTLFLAG_RW, sc,
 	    0, temp_throttle_sysctl_handler, "IK", 
 	    "Throttle CPU when exceeding this temperature");

Modified: projects/powernv/arm/freescale/imx/imx6_machdep.c
==============================================================================
--- projects/powernv/arm/freescale/imx/imx6_machdep.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/freescale/imx/imx6_machdep.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -104,7 +104,6 @@ imx6_lastaddr(platform_t plat)
 static int
 imx6_attach(platform_t plat)
 {
-
 	/* Inform the MPCore timer driver that its clock is variable. */
 	arm_tmr_change_frequency(ARM_TMR_FREQUENCY_VARIES);
 
@@ -114,6 +113,9 @@ imx6_attach(platform_t plat)
 static void
 imx6_late_init(platform_t plat)
 {
+	const uint32_t IMX6_WDOG_SR_PHYS = 0x020bc004;
+
+	imx_wdog_init_last_reset(IMX6_WDOG_SR_PHYS);
 
 	/* Cache the gpio1 node handle for imx6_decode_fdt() workaround code. */
 	gpio1_node = OF_node_from_xref(

Modified: projects/powernv/arm/freescale/imx/imx_machdep.c
==============================================================================
--- projects/powernv/arm/freescale/imx/imx_machdep.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/freescale/imx/imx_machdep.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -45,6 +45,15 @@ __FBSDID("$FreeBSD$");
 #include <arm/freescale/imx/imx_machdep.h>
 #include <arm/freescale/imx/imx_wdogreg.h>
 
+SYSCTL_NODE(_hw, OID_AUTO, imx, CTLFLAG_RW, NULL, "i.MX container");
+
+static int last_reset_status;
+SYSCTL_UINT(_hw_imx, OID_AUTO, last_reset_status, CTLFLAG_RD, 
+    &last_reset_status, 0, "Last reset status register");
+
+SYSCTL_STRING(_hw_imx, OID_AUTO, last_reset_reason, CTLFLAG_RD, 
+    "unknown", 0, "Last reset reason");
+
 struct arm32_dma_range *
 bus_dma_get_range(void)
 {
@@ -85,6 +94,23 @@ imx_wdog_cpu_reset(vm_offset_t wdcr_phys
 		continue;
 }
 
+void
+imx_wdog_init_last_reset(vm_offset_t wdsr_phys)
+{
+	volatile uint16_t * psr;
+
+	if ((psr = arm_devmap_ptov(wdsr_phys, sizeof(*psr))) == NULL)
+		return;
+	last_reset_status = *psr;
+	if (last_reset_status & WDOG_RSR_SFTW) {
+		sysctl___hw_imx_last_reset_reason.oid_arg1 = "SoftwareReset";
+	} else if (last_reset_status & WDOG_RSR_TOUT) {
+		sysctl___hw_imx_last_reset_reason.oid_arg1 = "WatchdogTimeout";
+	} else if (last_reset_status & WDOG_RSR_POR) {
+		sysctl___hw_imx_last_reset_reason.oid_arg1 = "PowerOnReset";
+	}
+}
+
 u_int
 imx_soc_family(void)
 {

Modified: projects/powernv/arm/freescale/imx/imx_machdep.h
==============================================================================
--- projects/powernv/arm/freescale/imx/imx_machdep.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/freescale/imx/imx_machdep.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -30,10 +30,14 @@
 #define	IMX_MACHDEP_H
 
 #include <sys/types.h>
+#include <sys/sysctl.h>
+
+SYSCTL_DECL(_hw_imx);
 
 /* Common functions, implemented in imx_machdep.c. */
 
 void imx_wdog_cpu_reset(vm_offset_t _wdcr_phys)  __attribute__((__noreturn__));
+void imx_wdog_init_last_reset(vm_offset_t _wdsr_phys);
 
 /* From here down, routines are implemented in imxNN_machdep.c. */
 

Modified: projects/powernv/arm/freescale/imx/imx_wdogreg.h
==============================================================================
--- projects/powernv/arm/freescale/imx/imx_wdogreg.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/freescale/imx/imx_wdogreg.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -47,6 +47,7 @@
 #define		WDOG_SR_STEP2		0xaaaa
 
 #define	WDOG_RSR_REG	0x04	/* Reset Status Register */
+#define		WDOG_RSR_POR		(1 << 4) /* Due to Power-On Reset */
 #define		WDOG_RSR_TOUT		(1 << 1) /* Due WDog timeout reset */
 #define		WDOG_RSR_SFTW		(1 << 0) /* Due Soft reset */
 

Modified: projects/powernv/arm/include/armreg.h
==============================================================================
--- projects/powernv/arm/include/armreg.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/include/armreg.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -139,7 +139,9 @@
 #define CPU_ID_CORTEXA15R1	0x411fc0f0
 #define CPU_ID_CORTEXA15R2	0x412fc0f0
 #define CPU_ID_CORTEXA15R3	0x413fc0f0
-#define	CPU_ID_KRAIT		0x510f06f0 /* Snapdragon S4 Pro/APQ8064 */
+#define	CPU_ID_KRAIT300R0	0x510f06f0 /* Snapdragon S4 Pro/APQ8064 */
+#define	CPU_ID_KRAIT300R1	0x511f06f0
+
 #define	CPU_ID_TI925T		0x54029250
 #define CPU_ID_MV88FR131	0x56251310 /* Marvell Feroceon 88FR131 Core */
 #define CPU_ID_MV88FR331	0x56153310 /* Marvell Feroceon 88FR331 Core */

Modified: projects/powernv/arm/include/atomic-v4.h
==============================================================================
--- projects/powernv/arm/include/atomic-v4.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/include/atomic-v4.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -363,6 +363,13 @@ atomic_readandclear_32(volatile u_int32_
 	return (__swp(0, p));
 }
 
+static __inline uint32_t
+atomic_swap_32(volatile u_int32_t *p, u_int32_t v)
+{
+
+	return (__swp(v, p));
+}
+
 #define atomic_cmpset_rel_32	atomic_cmpset_32
 #define atomic_cmpset_acq_32	atomic_cmpset_32
 #define atomic_set_rel_32	atomic_set_32

Modified: projects/powernv/arm/include/atomic-v6.h
==============================================================================
--- projects/powernv/arm/include/atomic-v6.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/include/atomic-v6.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -641,6 +641,25 @@ atomic_testandset_64(volatile uint64_t *
 	return (atomic_testandset_32(p32, v));
 }
 
+static __inline uint32_t
+atomic_swap_32(volatile uint32_t *p, uint32_t v)
+{
+	uint32_t ret, exflag;
+
+	__asm __volatile(
+	    "1: ldrex	%[ret], [%[ptr]]		\n"
+	    "   strex	%[exf], %[val], [%[ptr]]	\n"
+	    "   teq	%[exf], #0			\n"
+	    "   it	ne				\n"
+	    "   bne	1b				\n"
+	    : [ret] "=r"  (ret),
+	      [exf] "=&r" (exflag)
+	    : [val] "r"  (v),
+	      [ptr] "r"  (p)
+	    : "cc", "memory");
+	return (ret);
+}
+
 #undef ATOMIC_ACQ_REL
 #undef ATOMIC_ACQ_REL_LONG
 

Modified: projects/powernv/arm/include/atomic.h
==============================================================================
--- projects/powernv/arm/include/atomic.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/include/atomic.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -109,5 +109,6 @@ atomic_store_long(volatile u_long *dst, 
 #define atomic_readandclear_int		atomic_readandclear_32
 #define atomic_load_acq_int		atomic_load_acq_32
 #define atomic_store_rel_int		atomic_store_rel_32
+#define atomic_swap_int			atomic_swap_32
 
 #endif /* _MACHINE_ATOMIC_H_ */

Modified: projects/powernv/arm/include/sf_buf.h
==============================================================================
--- projects/powernv/arm/include/sf_buf.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/include/sf_buf.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -44,7 +44,11 @@ static inline int
 sf_buf_unmap(struct sf_buf *sf)
 {
 
+#ifdef ARM_NEW_PMAP
+	pmap_qremove(sf->kva, 1);
+#else
 	pmap_kremove(sf->kva);
+#endif
 	return (1);
 }
 #endif /* !_MACHINE_SF_BUF_H_ */

Modified: projects/powernv/arm/samsung/exynos/exynos5_combiner.c
==============================================================================
--- projects/powernv/arm/samsung/exynos/exynos5_combiner.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/samsung/exynos/exynos5_combiner.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -28,7 +28,9 @@
  * Samsung Exynos 5 Interrupt Combiner
  * Chapter 7, Exynos 5 Dual User's Manual Public Rev 1.00
  */
-
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -50,6 +52,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/bus.h>
 #include <machine/cpu.h>
 #include <machine/intr.h>
+#endif
 
 #include <arm/samsung/exynos/exynos5_common.h>
 #include <arm/samsung/exynos/exynos5_combiner.h>

Modified: projects/powernv/arm/samsung/exynos/exynos5_ehci.c
==============================================================================
--- projects/powernv/arm/samsung/exynos/exynos5_ehci.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/samsung/exynos/exynos5_ehci.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -24,6 +24,9 @@
  * SUCH DAMAGE.
  */
 
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -59,6 +62,7 @@ __FBSDID("$FreeBSD$");
 #include "gpio_if.h"
 
 #include "opt_platform.h"
+#endif
 
 /* GPIO control */
 #define	GPIO_OUTPUT	1

Modified: projects/powernv/arm/samsung/exynos/exynos5_pad.c
==============================================================================
--- projects/powernv/arm/samsung/exynos/exynos5_pad.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm/samsung/exynos/exynos5_pad.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -28,7 +28,9 @@
  * Samsung Exynos 5 Pad Control
  * Chapter 4, Exynos 5 Dual User's Manual Public Rev 1.00
  */
-
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -55,6 +57,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/intr.h>
 
 #include "gpio_if.h"
+#endif
 
 #include <arm/samsung/exynos/exynos5_combiner.h>
 #include <arm/samsung/exynos/exynos5_pad.h>

Modified: projects/powernv/arm64/arm64/elf_machdep.c
==============================================================================
--- projects/powernv/arm64/arm64/elf_machdep.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm64/arm64/elf_machdep.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -59,8 +59,6 @@ static struct sysentvec elf64_freebsd_sy
 	.sv_size	= SYS_MAXSYSCALL,
 	.sv_table	= sysent,
 	.sv_mask	= 0,
-	.sv_sigsize	= 0,
-	.sv_sigtbl	= NULL,
 	.sv_errsize	= 0,
 	.sv_errtbl	= NULL,
 	.sv_transtrap	= NULL,
@@ -68,7 +66,6 @@ static struct sysentvec elf64_freebsd_sy
 	.sv_sendsig	= sendsig,
 	.sv_sigcode	= sigcode,
 	.sv_szsigcode	= &szsigcode,
-	.sv_prepsyscall	= NULL,
 	.sv_name	= "FreeBSD ELF64",
 	.sv_coredump	= __elfN(coredump),
 	.sv_imgact_try	= NULL,

Modified: projects/powernv/arm64/arm64/gic_v3.c
==============================================================================
--- projects/powernv/arm64/arm64/gic_v3.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm64/arm64/gic_v3.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -155,7 +155,7 @@ gic_v3_attach(device_t dev)
 	 * One entry for Distributor and all remaining for Re-Distributor.
 	 */
 	sc->gic_res = malloc(
-	    sizeof(sc->gic_res) * (sc->gic_redists.nregions + 1),
+	    sizeof(*sc->gic_res) * (sc->gic_redists.nregions + 1),
 	    M_GIC_V3, M_WAITOK);
 
 	/* Now allocate corresponding resources */

Modified: projects/powernv/arm64/arm64/pmap.c
==============================================================================
--- projects/powernv/arm64/arm64/pmap.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm64/arm64/pmap.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -215,6 +215,8 @@ struct msgbuf *msgbufp = NULL;
 
 static struct rwlock_padalign pvh_global_lock;
 
+vm_paddr_t dmap_phys_base;	/* The start of the dmap region */
+
 /*
  * Data for the pv entry allocation mechanism
  */
@@ -446,18 +448,19 @@ pmap_early_vtophys(vm_offset_t l1pt, vm_
 }
 
 static void
-pmap_bootstrap_dmap(vm_offset_t l1pt)
+pmap_bootstrap_dmap(vm_offset_t l1pt, vm_paddr_t kernstart)
 {
 	vm_offset_t va;
 	vm_paddr_t pa;
 	pd_entry_t *l1;
 	u_int l1_slot;
 
+	pa = dmap_phys_base = kernstart & ~L1_OFFSET;
 	va = DMAP_MIN_ADDRESS;
 	l1 = (pd_entry_t *)l1pt;
 	l1_slot = pmap_l1_index(DMAP_MIN_ADDRESS);
 
-	for (pa = 0; va < DMAP_MAX_ADDRESS;
+	for (; va < DMAP_MAX_ADDRESS;
 	    pa += L1_SIZE, va += L1_SIZE, l1_slot++) {
 		KASSERT(l1_slot < Ln_ENTRIES, ("Invalid L1 index"));
 
@@ -548,7 +551,8 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd
 	pt_entry_t *l2;
 	vm_offset_t va, freemempos;
 	vm_offset_t dpcpu, msgbufpv;
-	vm_paddr_t pa;
+	vm_paddr_t pa, min_pa;
+	int i;
 
 	kern_delta = KERNBASE - kernstart;
 	physmem = 0;
@@ -566,8 +570,23 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd
 	 */
 	rw_init(&pvh_global_lock, "pmap pv global");
 
+	/* Assume the address we were loaded to is a valid physical address */
+	min_pa = KERNBASE - kern_delta;
+
+	/*
+	 * Find the minimum physical address. physmap is sorted,
+	 * but may contain empty ranges.
+	 */
+	for (i = 0; i < (physmap_idx * 2); i += 2) {
+		if (physmap[i] == physmap[i + 1])
+			continue;
+		if (physmap[i] <= min_pa)
+			min_pa = physmap[i];
+		break;
+	}
+
 	/* Create a direct map region early so we can use it for pa -> va */
-	pmap_bootstrap_dmap(l1pt);
+	pmap_bootstrap_dmap(l1pt, min_pa);
 
 	va = KERNBASE;
 	pa = KERNBASE - kern_delta;

Modified: projects/powernv/arm64/include/vmparam.h
==============================================================================
--- projects/powernv/arm64/include/vmparam.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/arm64/include/vmparam.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -160,11 +160,13 @@
 #define	DMAP_MIN_ADDRESS	(0xffffffc000000000UL)
 #define	DMAP_MAX_ADDRESS	(0xffffffdfffffffffUL)
 
-#define	DMAP_MIN_PHYSADDR	(0x0000000000000000UL)
-#define	DMAP_MAX_PHYSADDR	(DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS)
+extern vm_paddr_t dmap_phys_base;
+#define	DMAP_MIN_PHYSADDR	(dmap_phys_base)
+#define	DMAP_MAX_PHYSADDR	(dmap_phys_base + (DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS))
 
 /* True if pa is in the dmap range */
-#define	PHYS_IN_DMAP(pa)	((pa) <= DMAP_MAX_PHYSADDR)
+#define	PHYS_IN_DMAP(pa)	((pa) >= DMAP_MIN_PHYSADDR && \
+    (pa) <= DMAP_MAX_PHYSADDR)
 /* True if va is in the dmap range */
 #define	VIRT_IN_DMAP(va)	((va) >= DMAP_MIN_ADDRESS && \
     (va) <= DMAP_MAX_ADDRESS)
@@ -174,7 +176,7 @@
 	KASSERT(PHYS_IN_DMAP(pa),					\
 	    ("%s: PA out of range, PA: 0x%lx", __func__,		\
 	    (vm_paddr_t)(pa)));						\
-	(pa) | DMAP_MIN_ADDRESS;					\
+	((pa) - dmap_phys_base) | DMAP_MIN_ADDRESS;			\
 })
 
 #define	DMAP_TO_PHYS(va)						\
@@ -182,7 +184,7 @@
 	KASSERT(VIRT_IN_DMAP(va),					\
 	    ("%s: VA out of range, VA: 0x%lx", __func__,		\
 	    (vm_offset_t)(va)));					\
-	(va) & ~DMAP_MIN_ADDRESS;					\
+	((va) & ~DMAP_MIN_ADDRESS) + dmap_phys_base;			\
 })
 
 #define	VM_MIN_USER_ADDRESS	(0x0000000000000000UL)

Modified: projects/powernv/boot/common/disk.c
==============================================================================
--- projects/powernv/boot/common/disk.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/common/disk.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -233,6 +233,42 @@ disk_print(struct disk_devdesc *dev, cha
 }
 
 int
+disk_read(struct disk_devdesc *dev, void *buf, off_t offset, u_int blocks)
+{
+	struct open_disk *od;
+	int ret;
+
+	od = (struct open_disk *)dev->d_opendata;
+	ret = dev->d_dev->dv_strategy(dev, F_READ, dev->d_offset + offset,
+	    blocks * od->sectorsize, buf, NULL);
+
+	return (ret);
+}
+
+int
+disk_write(struct disk_devdesc *dev, void *buf, off_t offset, u_int blocks)
+{
+	struct open_disk *od;
+	int ret;
+
+	od = (struct open_disk *)dev->d_opendata;
+	ret = dev->d_dev->dv_strategy(dev, F_WRITE, dev->d_offset + offset,
+	    blocks * od->sectorsize, buf, NULL);
+
+	return (ret);
+}
+
+int
+disk_ioctl(struct disk_devdesc *dev, u_long cmd, void *buf)
+{
+
+	if (dev->d_dev->dv_ioctl)
+		return ((*dev->d_dev->dv_ioctl)(dev->d_opendata, cmd, buf));
+
+	return (ENXIO);
+}
+
+int
 disk_open(struct disk_devdesc *dev, off_t mediasize, u_int sectorsize,
     u_int flags)
 {

Modified: projects/powernv/boot/common/disk.h
==============================================================================
--- projects/powernv/boot/common/disk.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/common/disk.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -89,6 +89,11 @@ struct disk_devdesc
 	off_t		d_offset;
 };
 
+enum disk_ioctl {
+	IOCTL_GET_BLOCKS,
+	IOCTL_GET_BLOCK_SIZE
+};
+
 /*
  * Parse disk metadata and initialise dev->d_offset.
  */
@@ -97,6 +102,11 @@ extern int disk_open(struct disk_devdesc
 #define	DISK_F_NOCACHE	0x0001		/* Do not use metadata caching */
 extern int disk_close(struct disk_devdesc *dev);
 extern void disk_cleanup(const struct devsw *d_dev);
+extern int disk_ioctl(struct disk_devdesc *dev, u_long cmd, void *buf);
+extern int disk_read(struct disk_devdesc *dev, void *buf, off_t offset,
+    u_int blocks);
+extern int disk_write(struct disk_devdesc *dev, void *buf, off_t offset,
+    u_int blocks);
 
 /*
  * Print information about slices on a disk.

Modified: projects/powernv/boot/i386/boot2/Makefile
==============================================================================
--- projects/powernv/boot/i386/boot2/Makefile	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/i386/boot2/Makefile	Sun Nov 29 07:20:30 2015	(r291443)
@@ -107,8 +107,8 @@ boot2.h: boot1.out
 .if ${MACHINE_CPUARCH} == "amd64"
 beforedepend boot2.s: machine
 CLEANFILES+=	machine
-machine:
-	ln -sf ${.CURDIR}/../../../i386/include machine
+machine: ${.CURDIR}/../../../i386/include .NOMETA
+	ln -sf ${.ALLSRC} ${.TARGET}
 .endif
 
 .include <bsd.prog.mk>

Modified: projects/powernv/boot/kshim/bsd_busspace.c
==============================================================================
--- projects/powernv/boot/kshim/bsd_busspace.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/kshim/bsd_busspace.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -37,6 +37,15 @@ struct burst {
 	uint32_t dw7;
 };
 
+int
+bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
+    bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)
+{
+
+	*nbshp = bsh + offset;
+	return (0);
+}
+
 void
 bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h,
     bus_size_t offset, uint8_t *datap, bus_size_t count)

Modified: projects/powernv/boot/kshim/bsd_global.h
==============================================================================
--- projects/powernv/boot/kshim/bsd_global.h	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/kshim/bsd_global.h	Sun Nov 29 07:20:30 2015	(r291443)
@@ -29,6 +29,8 @@
 
 #include <bsd_kernel.h>
 
+#include <sys/gpio.h>
+
 #define	USB_DEBUG_VAR usb_debug
 #include <dev/usb/usb_freebsd_loader.h>
 #include <dev/usb/usb_endian.h>
@@ -59,6 +61,8 @@
 #include <dev/usb/usb_generic.h>
 #include <dev/usb/quirk/usb_quirk.h>
 #include <dev/usb/template/usb_template.h>
+#include <dev/usb/controller/ehci.h>
+#include <dev/usb/controller/ehcireg.h>
 
 extern struct usb_process usb_process[USB_PROC_MAX];
 

Modified: projects/powernv/boot/kshim/bsd_kernel.c
==============================================================================
--- projects/powernv/boot/kshim/bsd_kernel.c	Sun Nov 29 07:16:08 2015	(r291442)
+++ projects/powernv/boot/kshim/bsd_kernel.c	Sun Nov 29 07:20:30 2015	(r291443)
@@ -35,6 +35,10 @@ static device_t usb_pci_root;
  *------------------------------------------------------------------------*/
 
 struct mtx Giant;
+int (*bus_alloc_resource_any_cb)(struct resource *res, device_t dev,
+    int type, int *rid, unsigned int flags);
+int (*ofw_bus_status_ok_cb)(device_t dev);
+int (*ofw_bus_is_compatible_cb)(device_t dev, char *name);
 
 static void
 mtx_system_init(void *arg)
@@ -43,6 +47,146 @@ mtx_system_init(void *arg)
 }
 SYSINIT(mtx_system_init, SI_SUB_LOCK, SI_ORDER_MIDDLE, mtx_system_init, NULL);
 
+struct resource *
+bus_alloc_resource_any(device_t dev, int type, int *rid, unsigned int flags)
+{
+	struct resource *res;
+	int ret = EINVAL;
+
+	res = malloc(sizeof(*res), XXX, XXX);
+	if (res == NULL)
+		return (NULL);
+
+	res->__r_i = malloc(sizeof(struct resource_i), XXX, XXX);
+	if (res->__r_i == NULL) {
+		free(res, XXX);
+		return (NULL);
+	}
+
+	if (bus_alloc_resource_any_cb != NULL)
+		ret = (*bus_alloc_resource_any_cb)(res, dev, type, rid, flags);
+	if (ret == 0)
+		return (res);
+
+	free(res->__r_i, XXX);
+	free(res, XXX);
+	return (NULL);
+}
+
+int
+bus_alloc_resources(device_t dev, struct resource_spec *rs,
+    struct resource **res)
+{
+	int i;
+
+	for (i = 0; rs[i].type != -1; i++)
+		res[i] = NULL;
+	for (i = 0; rs[i].type != -1; i++) {
+		res[i] = bus_alloc_resource_any(dev,
+		    rs[i].type, &rs[i].rid, rs[i].flags);
+		if (res[i] == NULL && !(rs[i].flags & RF_OPTIONAL)) {
+			bus_release_resources(dev, rs, res);
+			return (ENXIO);
+		}
+	}
+	return (0);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201511290720.tAT7KUxf082883>