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/...
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Nov 29 07:20:35 UTC 2015
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 ***
More information about the svn-src-projects
mailing list