From owner-svn-src-user@FreeBSD.ORG Fri Sep 14 18:57:08 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 58EB4106566B; Fri, 14 Sep 2012 18:57:08 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F1418FC0C; Fri, 14 Sep 2012 18:57:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q8EIv8FD086811; Fri, 14 Sep 2012 18:57:08 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q8EIv75n086793; Fri, 14 Sep 2012 18:57:07 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201209141857.q8EIv75n086793@svn.freebsd.org> From: Matt Jacob Date: Fri, 14 Sep 2012 18:57:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r240511 - in user/mjacob/sys: amd64/amd64 amd64/conf arm/arm arm/broadcom/bcm2835 arm/conf arm/include arm/mv arm/mv/armadaxp boot/arm/uboot boot/common boot/fdt/dts boot/i386/libi386 b... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Sep 2012 18:57:08 -0000 Author: mjacob Date: Fri Sep 14 18:57:07 2012 New Revision: 240511 URL: http://svn.freebsd.org/changeset/base/240511 Log: IFC Added: user/mjacob/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c - copied unchanged from r240510, head/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c user/mjacob/sys/boot/fdt/dts/db78460.dts - copied unchanged from r240510, head/sys/boot/fdt/dts/db78460.dts user/mjacob/sys/cddl/compat/opensolaris/sys/assfail.h - copied unchanged from r240510, head/sys/cddl/compat/opensolaris/sys/assfail.h user/mjacob/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu - copied unchanged from r240510, head/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu user/mjacob/sys/net/if_pflog.h - copied unchanged from r240510, head/sys/net/if_pflog.h user/mjacob/sys/net/if_pfsync.h - copied unchanged from r240510, head/sys/net/if_pfsync.h user/mjacob/sys/net/pf_mtag.h - copied unchanged from r240510, head/sys/net/pf_mtag.h user/mjacob/sys/net/pfvar.h - copied unchanged from r240510, head/sys/net/pfvar.h user/mjacob/sys/netpfil/ - copied from r240510, head/sys/netpfil/ Deleted: user/mjacob/sys/boot/fdt/dts/db88f78160.dts user/mjacob/sys/cam/scsi/scsi_low_pisa.c user/mjacob/sys/cam/scsi/scsi_low_pisa.h user/mjacob/sys/compat/netbsd/physio_proc.h user/mjacob/sys/contrib/pf/ user/mjacob/sys/netinet/ipfw/ Modified: user/mjacob/sys/amd64/amd64/pmap.c user/mjacob/sys/amd64/amd64/trap.c user/mjacob/sys/amd64/conf/GENERIC user/mjacob/sys/arm/arm/cpufunc.c user/mjacob/sys/arm/arm/identcpu.c user/mjacob/sys/arm/arm/pmap-v6.c user/mjacob/sys/arm/arm/pmap.c user/mjacob/sys/arm/broadcom/bcm2835/files.bcm2835 user/mjacob/sys/arm/conf/ARMADAXP user/mjacob/sys/arm/conf/RPI-B user/mjacob/sys/arm/include/armreg.h user/mjacob/sys/arm/include/intr.h user/mjacob/sys/arm/mv/armadaxp/armadaxp.c user/mjacob/sys/arm/mv/common.c user/mjacob/sys/arm/mv/mpic.c user/mjacob/sys/arm/mv/mv_pci.c user/mjacob/sys/arm/mv/mvreg.h user/mjacob/sys/arm/mv/mvvar.h user/mjacob/sys/arm/mv/mvwin.h user/mjacob/sys/arm/mv/timer.c user/mjacob/sys/boot/arm/uboot/Makefile user/mjacob/sys/boot/common/load_elf.c user/mjacob/sys/boot/common/module.c user/mjacob/sys/boot/common/part.c user/mjacob/sys/boot/i386/libi386/pxe.c user/mjacob/sys/boot/i386/libi386/pxe.h user/mjacob/sys/boot/i386/loader/conf.c user/mjacob/sys/boot/i386/loader/main.c user/mjacob/sys/boot/powerpc/uboot/Makefile user/mjacob/sys/boot/sparc64/loader/main.c user/mjacob/sys/boot/uboot/common/main.c user/mjacob/sys/boot/uboot/lib/Makefile user/mjacob/sys/boot/uboot/lib/devicename.c user/mjacob/sys/boot/uboot/lib/disk.c user/mjacob/sys/boot/uboot/lib/libuboot.h user/mjacob/sys/boot/zfs/zfs.c user/mjacob/sys/boot/zfs/zfsimpl.c user/mjacob/sys/cam/scsi/scsi_low.c user/mjacob/sys/cam/scsi/scsi_low.h user/mjacob/sys/cddl/boot/zfs/zfsimpl.h user/mjacob/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c user/mjacob/sys/cddl/compat/opensolaris/sys/debug.h user/mjacob/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_debug.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_rlock.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/mjacob/sys/cddl/contrib/opensolaris/uts/common/sys/debug.h user/mjacob/sys/compat/linux/linux_file.c user/mjacob/sys/conf/Makefile.amd64 user/mjacob/sys/conf/Makefile.arm user/mjacob/sys/conf/Makefile.powerpc user/mjacob/sys/conf/files user/mjacob/sys/conf/files.amd64 user/mjacob/sys/conf/files.i386 user/mjacob/sys/conf/kern.mk user/mjacob/sys/conf/kern.pre.mk user/mjacob/sys/conf/kmod.mk user/mjacob/sys/conf/options.amd64 user/mjacob/sys/conf/options.i386 user/mjacob/sys/contrib/altq/altq/altq_cbq.c user/mjacob/sys/contrib/altq/altq/altq_hfsc.c user/mjacob/sys/contrib/altq/altq/altq_priq.c user/mjacob/sys/contrib/altq/altq/altq_subr.c user/mjacob/sys/dev/acpica/acpi_hpet.c user/mjacob/sys/dev/ahci/ahci.c user/mjacob/sys/dev/ath/ath_hal/ah.c user/mjacob/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c user/mjacob/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c user/mjacob/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c user/mjacob/sys/dev/ath/ath_hal/ar5416/ar5416reg.h user/mjacob/sys/dev/ath/ath_hal/ar9002/ar9280.c user/mjacob/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c user/mjacob/sys/dev/ath/if_ath.c user/mjacob/sys/dev/ath/if_ath_tx.c user/mjacob/sys/dev/ath/if_ath_tx_ht.c user/mjacob/sys/dev/ct/bshw_machdep.c user/mjacob/sys/dev/ct/ct.c user/mjacob/sys/dev/ct/ct_isa.c user/mjacob/sys/dev/ct/ct_machdep.h user/mjacob/sys/dev/ct/ctvar.h user/mjacob/sys/dev/cxgbe/common/common.h user/mjacob/sys/dev/cxgbe/firmware/t4fw_interface.h user/mjacob/sys/dev/cxgbe/osdep.h user/mjacob/sys/dev/cxgbe/t4_l2t.h user/mjacob/sys/dev/cxgbe/t4_main.c user/mjacob/sys/dev/cxgbe/tom/t4_ddp.c user/mjacob/sys/dev/fdt/fdt_common.c user/mjacob/sys/dev/fdt/fdt_common.h user/mjacob/sys/dev/fdt/fdt_pci.c user/mjacob/sys/dev/hwpmc/hwpmc_arm.c user/mjacob/sys/dev/hwpmc/hwpmc_x86.c user/mjacob/sys/dev/isp/isp_pci.c user/mjacob/sys/dev/ixgbe/ixgbe.c user/mjacob/sys/dev/ixgbe/ixgbe_osdep.h user/mjacob/sys/dev/ncv/ncr53c500.c user/mjacob/sys/dev/ncv/ncr53c500_pccard.c user/mjacob/sys/dev/ncv/ncr53c500hw.h user/mjacob/sys/dev/ncv/ncr53c500var.h user/mjacob/sys/dev/nsp/nsp.c user/mjacob/sys/dev/nsp/nsp_pccard.c user/mjacob/sys/dev/nsp/nspvar.h user/mjacob/sys/dev/pci/pcireg.h user/mjacob/sys/dev/random/ivy.c user/mjacob/sys/dev/random/probe.c user/mjacob/sys/dev/stg/tmc18c30.c user/mjacob/sys/dev/stg/tmc18c30_isa.c user/mjacob/sys/dev/stg/tmc18c30_pccard.c user/mjacob/sys/dev/stg/tmc18c30_pci.c user/mjacob/sys/dev/stg/tmc18c30_subr.c user/mjacob/sys/dev/stg/tmc18c30var.h user/mjacob/sys/dev/usb/controller/at91dci.c user/mjacob/sys/dev/usb/controller/at91dci_atmelarm.c user/mjacob/sys/dev/usb/controller/dwc_otg.c user/mjacob/sys/dev/usb/controller/dwc_otg.h user/mjacob/sys/dev/usb/controller/dwc_otgreg.h user/mjacob/sys/dev/usb/controller/usb_controller.c user/mjacob/sys/dev/usb/serial/ufoma.c user/mjacob/sys/dev/virtio/virtio.h user/mjacob/sys/dev/virtio/virtqueue.c user/mjacob/sys/fs/deadfs/dead_vnops.c user/mjacob/sys/fs/ext2fs/ext2_inode.c user/mjacob/sys/fs/nandfs/bmap.c user/mjacob/sys/fs/nfs/nfs_commonport.c user/mjacob/sys/fs/nfs/nfscl.h user/mjacob/sys/fs/nfsclient/nfs_clrpcops.c user/mjacob/sys/fs/ntfs/ntfs_vfsops.c user/mjacob/sys/fs/nullfs/null.h user/mjacob/sys/fs/nullfs/null_subr.c user/mjacob/sys/fs/nullfs/null_vfsops.c user/mjacob/sys/fs/nullfs/null_vnops.c user/mjacob/sys/geom/mirror/g_mirror.c user/mjacob/sys/geom/raid/g_raid.c user/mjacob/sys/geom/raid/g_raid.h user/mjacob/sys/geom/raid/md_ddf.c user/mjacob/sys/geom/raid/md_intel.c user/mjacob/sys/geom/raid/md_jmicron.c user/mjacob/sys/geom/raid/md_nvidia.c user/mjacob/sys/geom/raid/md_promise.c user/mjacob/sys/geom/raid/md_sii.c user/mjacob/sys/geom/raid/tr_concat.c user/mjacob/sys/geom/raid/tr_raid0.c user/mjacob/sys/geom/raid/tr_raid1.c user/mjacob/sys/geom/raid/tr_raid1e.c user/mjacob/sys/geom/raid/tr_raid5.c user/mjacob/sys/geom/raid3/g_raid3.c user/mjacob/sys/gnu/fs/xfs/FreeBSD/xfs_mountops.c user/mjacob/sys/i386/conf/GENERIC user/mjacob/sys/i386/i386/pmap.c user/mjacob/sys/i386/i386/trap.c user/mjacob/sys/i386/xen/pmap.c user/mjacob/sys/ia64/ia32/ia32_trap.c user/mjacob/sys/ia64/ia64/trap.c user/mjacob/sys/kern/kern_condvar.c user/mjacob/sys/kern/kern_exit.c user/mjacob/sys/kern/kern_fork.c user/mjacob/sys/kern/kern_lock.c user/mjacob/sys/kern/kern_mutex.c user/mjacob/sys/kern/kern_rmlock.c user/mjacob/sys/kern/kern_rwlock.c user/mjacob/sys/kern/kern_sig.c user/mjacob/sys/kern/kern_sx.c user/mjacob/sys/kern/kern_thread.c user/mjacob/sys/kern/subr_sleepqueue.c user/mjacob/sys/kern/subr_syscall.c user/mjacob/sys/kern/subr_trap.c user/mjacob/sys/kern/subr_turnstile.c user/mjacob/sys/kern/vfs_lookup.c user/mjacob/sys/kern/vfs_mount.c user/mjacob/sys/kern/vfs_subr.c user/mjacob/sys/mips/mips/pmap.c user/mjacob/sys/mips/mips/trap.c user/mjacob/sys/modules/Makefile user/mjacob/sys/modules/cxgbe/firmware/Makefile user/mjacob/sys/modules/dummynet/Makefile user/mjacob/sys/modules/ipfw/Makefile user/mjacob/sys/modules/ipfw_nat/Makefile user/mjacob/sys/modules/pf/Makefile user/mjacob/sys/modules/pflog/Makefile user/mjacob/sys/modules/pfsync/Makefile user/mjacob/sys/modules/scsi_low/Makefile user/mjacob/sys/net/if.c user/mjacob/sys/netgraph/ng_ipfw.c user/mjacob/sys/netinet/in_gif.c user/mjacob/sys/netinet/ip_icmp.c user/mjacob/sys/netinet/raw_ip.c user/mjacob/sys/netinet/sctp_asconf.c user/mjacob/sys/netinet/sctp_pcb.c user/mjacob/sys/netinet/sctputil.c user/mjacob/sys/netinet/tcp_subr.c user/mjacob/sys/netinet6/icmp6.c user/mjacob/sys/netinet6/in6_gif.c user/mjacob/sys/netipsec/ipsec_input.c user/mjacob/sys/netipsec/ipsec_output.c user/mjacob/sys/netipsec/key.c user/mjacob/sys/netipsec/xform_ipip.c user/mjacob/sys/powerpc/aim/trap.c user/mjacob/sys/powerpc/booke/trap.c user/mjacob/sys/powerpc/wii/wii_bus.c user/mjacob/sys/sparc64/sparc64/trap.c user/mjacob/sys/sys/cdefs.h user/mjacob/sys/sys/mbuf.h user/mjacob/sys/sys/mount.h user/mjacob/sys/sys/param.h user/mjacob/sys/sys/queue.h Directory Properties: user/mjacob/sys/ (props changed) user/mjacob/sys/boot/ (props changed) user/mjacob/sys/cddl/contrib/opensolaris/ (props changed) user/mjacob/sys/conf/ (props changed) Modified: user/mjacob/sys/amd64/amd64/pmap.c ============================================================================== --- user/mjacob/sys/amd64/amd64/pmap.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/amd64/amd64/pmap.c Fri Sep 14 18:57:07 2012 (r240511) @@ -4998,7 +4998,7 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t si void pmap_unmapdev(vm_offset_t va, vm_size_t size) { - vm_offset_t base, offset, tmpva; + vm_offset_t base, offset; /* If we gave a direct map region in pmap_mapdev, do nothing */ if (va >= DMAP_MIN_ADDRESS && va < DMAP_MAX_ADDRESS) @@ -5006,9 +5006,6 @@ pmap_unmapdev(vm_offset_t va, vm_size_t base = trunc_page(va); offset = va & PAGE_MASK; size = roundup(offset + size, PAGE_SIZE); - for (tmpva = base; tmpva < (base + size); tmpva += PAGE_SIZE) - pmap_kremove(tmpva); - pmap_invalidate_range(kernel_pmap, va, tmpva); kmem_free(kernel_map, base, size); } Modified: user/mjacob/sys/amd64/amd64/trap.c ============================================================================== --- user/mjacob/sys/amd64/amd64/trap.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/amd64/amd64/trap.c Fri Sep 14 18:57:07 2012 (r240511) @@ -632,7 +632,6 @@ trap(struct trapframe *frame) user: userret(td, frame); - mtx_assert(&Giant, MA_NOTOWNED); KASSERT(PCB_USER_FPU(td->td_pcb), ("Return from trap with kernel FPU ctx leaked")); userout: Modified: user/mjacob/sys/amd64/conf/GENERIC ============================================================================== --- user/mjacob/sys/amd64/conf/GENERIC Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/amd64/conf/GENERIC Fri Sep 14 18:57:07 2012 (r240511) @@ -293,7 +293,7 @@ device wpi # Intel 3945ABG wireless NI device loop # Network loopback device random # Entropy device options PADLOCK_RNG # VIA Padlock RNG -options IVY_RNG # Intel Bull Mountain RNG +options RDRAND_RNG # Intel Bull Mountain RNG device ether # Ethernet support device vlan # 802.1Q VLAN support device tun # Packet tunnel. Modified: user/mjacob/sys/arm/arm/cpufunc.c ============================================================================== --- user/mjacob/sys/arm/arm/cpufunc.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/arm/cpufunc.c Fri Sep 14 18:57:07 2012 (r240511) @@ -1415,6 +1415,7 @@ set_cpufuncs() #if defined(CPU_MV_PJ4B) if (cputype == CPU_ID_MV88SV581X_V6 || cputype == CPU_ID_MV88SV581X_V7 || + cputype == CPU_ID_MV88SV584X_V7 || cputype == CPU_ID_ARM_88SV581X_V6 || cputype == CPU_ID_ARM_88SV581X_V7) { if (cpu_pfr(0) & ARM_PFR0_THUMBEE_MASK) @@ -1425,8 +1426,8 @@ set_cpufuncs() get_cachetype_cp15(); pmap_pte_init_mmu_v6(); goto out; - } else if (cputype == CPU_ID_ARM_88SV584X || - cputype == CPU_ID_MV88SV584X) { + } else if (cputype == CPU_ID_ARM_88SV584X_V6 || + cputype == CPU_ID_MV88SV584X_V6) { cpufuncs = pj4bv6_cpufuncs; get_cachetype_cp15(); pmap_pte_init_mmu_v6(); Modified: user/mjacob/sys/arm/arm/identcpu.c ============================================================================== --- user/mjacob/sys/arm/arm/identcpu.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/arm/identcpu.c Fri Sep 14 18:57:07 2012 (r240511) @@ -321,9 +321,11 @@ const struct cpuidtab cpuids[] = { generic_steppings }, { CPU_ID_ARM_88SV581X_V7, CPU_CLASS_MARVELL, "Sheeva 88SV581x", generic_steppings }, - { CPU_ID_MV88SV584X, CPU_CLASS_MARVELL, "Sheeva 88SV584x", + { CPU_ID_MV88SV584X_V6, CPU_CLASS_MARVELL, "Sheeva 88SV584x", generic_steppings }, - { CPU_ID_ARM_88SV584X, CPU_CLASS_MARVELL, "Sheeva 88SV584x", + { CPU_ID_ARM_88SV584X_V6, CPU_CLASS_MARVELL, "Sheeva 88SV584x", + generic_steppings }, + { CPU_ID_MV88SV584X_V7, CPU_CLASS_MARVELL, "Sheeva 88SV584x", generic_steppings }, { 0, CPU_CLASS_NONE, NULL, NULL } Modified: user/mjacob/sys/arm/arm/pmap-v6.c ============================================================================== --- user/mjacob/sys/arm/arm/pmap-v6.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/arm/pmap-v6.c Fri Sep 14 18:57:07 2012 (r240511) @@ -153,10 +153,12 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include +#include #include #include #include @@ -164,12 +166,10 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -400,6 +400,7 @@ static vm_offset_t pmap_kernel_l2ptp_kva static vm_paddr_t pmap_kernel_l2ptp_phys; static struct vm_object pvzone_obj; static int pv_entry_count=0, pv_entry_max=0, pv_entry_high_water=0; +static struct rwlock pvh_global_lock; int l1_mem_types[] = { ARM_L1S_STRONG_ORD, @@ -613,7 +614,7 @@ pmap_alloc_l2_bucket(pmap_t pm, vm_offse l1idx = L1_IDX(va); PMAP_ASSERT_LOCKED(pm); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); if ((l2 = pm->pm_l2[L2_IDX(l1idx)]) == NULL) { /* * No mapping at this address, as there is @@ -622,19 +623,19 @@ pmap_alloc_l2_bucket(pmap_t pm, vm_offse */ again_l2table: PMAP_UNLOCK(pm); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); if ((l2 = pmap_alloc_l2_dtable()) == NULL) { - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); return (NULL); } - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); if (pm->pm_l2[L2_IDX(l1idx)] != NULL) { PMAP_UNLOCK(pm); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); uma_zfree(l2table_zone, l2); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); l2 = pm->pm_l2[L2_IDX(l1idx)]; if (l2 == NULL) @@ -666,16 +667,16 @@ again_l2table: */ again_ptep: PMAP_UNLOCK(pm); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); ptep = (void*)uma_zalloc(l2zone, M_NOWAIT|M_USE_RESERVE); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); if (l2b->l2b_kva != 0) { /* We lost the race. */ PMAP_UNLOCK(pm); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); uma_zfree(l2zone, ptep); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); if (l2b->l2b_kva == 0) goto again_ptep; @@ -851,7 +852,7 @@ pmap_clearbit(struct vm_page *pg, u_int u_int oflags; int count = 0; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); if (maskbits & PVF_WRITE) maskbits |= PVF_MOD; @@ -861,7 +862,7 @@ pmap_clearbit(struct vm_page *pg, u_int pg->md.pvh_attrs &= ~(maskbits & (PVF_MOD | PVF_REF)); if (TAILQ_EMPTY(&pg->md.pv_list)) { - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (0); } @@ -917,7 +918,7 @@ pmap_clearbit(struct vm_page *pg, u_int if (maskbits & PVF_WRITE) vm_page_aflag_clear(pg, PGA_WRITEABLE); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (count); } @@ -927,15 +928,15 @@ pmap_clearbit(struct vm_page *pg, u_int * pmap_remove_pv: remove a mappiing from a vm_page list * * NOTE: pmap_enter_pv expects to lock the pvh itself - * pmap_remove_pv expects te caller to lock the pvh before calling + * pmap_remove_pv expects the caller to lock the pvh before calling */ /* - * pmap_enter_pv: enter a mapping onto a vm_page lst + * pmap_enter_pv: enter a mapping onto a vm_page's PV list * - * => caller should hold the proper lock on pmap_main_lock + * => caller should hold the proper lock on pvh_global_lock * => caller should have pmap locked - * => we will gain the lock on the vm_page and allocate the new pv_entry + * => we will (someday) gain the lock on the vm_page's PV list * => caller should adjust ptp's wire_count before calling * => caller should not adjust pmap's wire_count */ @@ -944,7 +945,7 @@ pmap_enter_pv(struct vm_page *pg, struct vm_offset_t va, u_int flags) { - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_ASSERT_LOCKED(pm); pve->pv_pmap = pm; @@ -970,7 +971,7 @@ pmap_find_pv(struct vm_page *pg, pmap_t { struct pv_entry *pv; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); TAILQ_FOREACH(pv, &pg->md.pv_list, pv_list) if (pm == pv->pv_pmap && va == pv->pv_va) break; @@ -1031,7 +1032,7 @@ static void pmap_nuke_pv(struct vm_page *pg, pmap_t pm, struct pv_entry *pve) { - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_ASSERT_LOCKED(pm); TAILQ_REMOVE(&pg->md.pv_list, pve, pv_list); @@ -1064,7 +1065,7 @@ pmap_remove_pv(struct vm_page *pg, pmap_ { struct pv_entry *pve; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); pve = TAILQ_FIRST(&pg->md.pv_list); while (pve) { @@ -1096,7 +1097,7 @@ pmap_modify_pv(struct vm_page *pg, pmap_ u_int flags, oflags; PMAP_ASSERT_LOCKED(pm); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); if ((npv = pmap_find_pv(pg, pm, va)) == NULL) return (0); @@ -1210,7 +1211,7 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t int rv = 0; l1idx = L1_IDX(va); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); /* @@ -1374,7 +1375,7 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t rv = 1; out: - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pm); return (rv); } @@ -1682,6 +1683,11 @@ pmap_bootstrap(vm_offset_t firstaddr, vm TAILQ_INIT(&kernel_pmap->pm_pvlist); /* + * Initialize the global pv list lock. + */ + rw_init_flags(&pvh_global_lock, "pmap pv global", RW_RECURSE); + + /* * Reserve some special page table entries/VA space for temporary * mapping of pages. */ @@ -1946,7 +1952,7 @@ pmap_remove_pages(pmap_t pmap) vm_page_t m; pt_entry_t *pt; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); for (pv = TAILQ_FIRST(&pmap->pm_pvlist); pv; pv = npv) { if (pv->pv_flags & PVF_WIRED) { @@ -1969,7 +1975,7 @@ pmap_remove_pages(pmap_t pmap) pmap_free_pv_entry(pv); pmap_free_l2_bucket(pmap, l2b, 1); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); cpu_tlb_flushID(); cpu_cpwait(); PMAP_UNLOCK(pmap); @@ -2326,7 +2332,7 @@ pmap_remove_all(vm_page_t m) if (TAILQ_EMPTY(&m->md.pv_list)) return; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); pmap_remove_write(m); curpm = vmspace_pmap(curproc->p_vmspace); while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) { @@ -2356,7 +2362,7 @@ pmap_remove_all(vm_page_t m) cpu_tlb_flushD(); } vm_page_aflag_clear(m, PGA_WRITEABLE); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } int @@ -2444,7 +2450,7 @@ pmap_protect(pmap_t pm, vm_offset_t sva, return; } - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); /* @@ -2506,7 +2512,7 @@ pmap_protect(pmap_t pm, vm_offset_t sva, if (PV_BEEN_REFD(flags)) cpu_tlb_flushD(); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pm); } @@ -2530,11 +2536,11 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t prot, boolean_t wired) { - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); pmap_enter_locked(pmap, va, m, prot, wired, M_WAITOK); PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2554,7 +2560,7 @@ pmap_enter_locked(pmap_t pmap, vm_offset u_char user; PMAP_ASSERT_LOCKED(pmap); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); if (va == vector_page) { pa = systempage.pv_pa; m = NULL; @@ -2594,9 +2600,9 @@ do_l2b_alloc: if (l2b == NULL) { if (flags & M_WAITOK) { PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); VM_WAIT; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); goto do_l2b_alloc; } @@ -2789,7 +2795,7 @@ pmap_enter_object(pmap_t pmap, vm_offset psize = atop(end - start); m = m_start; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { pmap_enter_locked(pmap, start + ptoa(diff), m, prot & @@ -2797,7 +2803,7 @@ pmap_enter_object(pmap_t pmap, vm_offset m = TAILQ_NEXT(m, listq); } PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2813,12 +2819,12 @@ void pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); pmap_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), FALSE, M_NOWAIT); PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2835,7 +2841,7 @@ pmap_change_wiring(pmap_t pmap, vm_offse pt_entry_t *ptep, pte; vm_page_t pg; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); l2b = pmap_get_l2_bucket(pmap, va); KASSERT(l2b, ("No l2b bucket in pmap_change_wiring")); @@ -2844,7 +2850,7 @@ pmap_change_wiring(pmap_t pmap, vm_offse pg = PHYS_TO_VM_PAGE(l2pte_pa(pte)); if (pg) pmap_modify_pv(pg, pmap, va, PVF_WIRED, wired); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3091,7 +3097,7 @@ pmap_remove(pmap_t pm, vm_offset_t sva, * we lock in the pmap => pv_head direction */ - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pm); total = 0; while (sva < eva) { @@ -3170,7 +3176,7 @@ pmap_remove(pmap_t pm, vm_offset_t sva, pmap_free_l2_bucket(pm, l2b, mappings); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); if (flushall) cpu_tlb_flushID(); PMAP_UNLOCK(pm); @@ -3323,7 +3329,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_p KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_page_exists_quick: page %p is not managed", m)); rv = FALSE; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { if (pv->pv_pmap == pmap) { rv = TRUE; @@ -3334,7 +3340,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_p break; } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (rv); } @@ -3353,11 +3359,11 @@ pmap_page_wired_mappings(vm_page_t m) count = 0; if ((m->flags & PG_FICTITIOUS) != 0) return (count); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) if ((pv->pv_flags & PVF_WIRED) != 0) count++; - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (count); } Modified: user/mjacob/sys/arm/arm/pmap.c ============================================================================== --- user/mjacob/sys/arm/arm/pmap.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/arm/pmap.c Fri Sep 14 18:57:07 2012 (r240511) @@ -1588,11 +1588,11 @@ pmap_clearbit(struct vm_page *pg, u_int */ /* - * pmap_enter_pv: enter a mapping onto a vm_page lst + * pmap_enter_pv: enter a mapping onto a vm_page's PV list * * => caller should hold the proper lock on pvh_global_lock * => caller should have pmap locked - * => we will gain the lock on the vm_page and allocate the new pv_entry + * => we will (someday) gain the lock on the vm_page's PV list * => caller should adjust ptp's wire_count before calling * => caller should not adjust pmap's wire_count */ @@ -1600,33 +1600,26 @@ static void pmap_enter_pv(struct vm_page *pg, struct pv_entry *pve, pmap_t pm, vm_offset_t va, u_int flags) { - int km; rw_assert(&pvh_global_lock, RA_WLOCKED); - + PMAP_ASSERT_LOCKED(pm); if (pg->md.pv_kva != 0) { - /* PMAP_ASSERT_LOCKED(pmap_kernel()); */ - pve->pv_pmap = pmap_kernel(); + pve->pv_pmap = kernel_pmap; pve->pv_va = pg->md.pv_kva; pve->pv_flags = PVF_WRITE | PVF_UNMAN; - pg->md.pv_kva = 0; - - if (!(km = PMAP_OWNED(pmap_kernel()))) - PMAP_LOCK(pmap_kernel()); + if (pm != kernel_pmap) + PMAP_LOCK(kernel_pmap); TAILQ_INSERT_HEAD(&pg->md.pv_list, pve, pv_list); - TAILQ_INSERT_HEAD(&pve->pv_pmap->pm_pvlist, pve, pv_plist); - PMAP_UNLOCK(pmap_kernel()); + TAILQ_INSERT_HEAD(&kernel_pmap->pm_pvlist, pve, pv_plist); + if (pm != kernel_pmap) + PMAP_UNLOCK(kernel_pmap); + pg->md.pv_kva = 0; if ((pve = pmap_get_pv_entry()) == NULL) panic("pmap_kenter_pv: no pv entries"); - if (km) - PMAP_LOCK(pmap_kernel()); } - - PMAP_ASSERT_LOCKED(pm); pve->pv_pmap = pm; pve->pv_va = va; pve->pv_flags = flags; - TAILQ_INSERT_HEAD(&pg->md.pv_list, pve, pv_list); TAILQ_INSERT_HEAD(&pm->pm_pvlist, pve, pv_plist); pg->md.pvh_attrs |= flags & (PVF_REF | PVF_MOD); Copied: user/mjacob/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c (from r240510, head/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/mjacob/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c Fri Sep 14 18:57:07 2012 (r240511, copy of r240510, head/sys/arm/broadcom/bcm2835/dwc_otg_brcm.c) @@ -0,0 +1,211 @@ +/*- + * Copyright (c) 2012 Hans Petter Selasky. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +static device_probe_t dwc_otg_probe; +static device_attach_t dwc_otg_attach; +static device_detach_t dwc_otg_detach; + +struct dwc_otg_super_softc { + struct dwc_otg_softc sc_otg; /* must be first */ +}; + +static int +dwc_otg_probe(device_t dev) +{ + if (!ofw_bus_is_compatible(dev, "synopsys,designware-hs-otg2")) + return (ENXIO); + + device_set_desc(dev, "DWC OTG 2.0 integrated USB controller"); + + return (0); +} + +static int +dwc_otg_attach(device_t dev) +{ + struct dwc_otg_super_softc *sc = device_get_softc(dev); + int err; + int rid; + + /* initialise some bus fields */ + sc->sc_otg.sc_bus.parent = dev; + sc->sc_otg.sc_bus.devices = sc->sc_otg.sc_devices; + sc->sc_otg.sc_bus.devices_max = DWC_OTG_MAX_DEVICES; + + /* get all DMA memory */ + if (usb_bus_mem_alloc_all(&sc->sc_otg.sc_bus, + USB_GET_DMA_TAG(dev), NULL)) { + return (ENOMEM); + } + rid = 0; + sc->sc_otg.sc_io_res = + bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); + + if (!(sc->sc_otg.sc_io_res)) { + err = ENOMEM; + goto error; + } + sc->sc_otg.sc_io_tag = rman_get_bustag(sc->sc_otg.sc_io_res); + sc->sc_otg.sc_io_hdl = rman_get_bushandle(sc->sc_otg.sc_io_res); + sc->sc_otg.sc_io_size = rman_get_size(sc->sc_otg.sc_io_res); + + rid = 0; + sc->sc_otg.sc_irq_res = + bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); + if (sc->sc_otg.sc_irq_res == NULL) + goto error; + + sc->sc_otg.sc_bus.bdev = device_add_child(dev, "usbus", -1); + if (sc->sc_otg.sc_bus.bdev == NULL) + goto error; + + device_set_ivars(sc->sc_otg.sc_bus.bdev, &sc->sc_otg.sc_bus); + + err = bus_setup_intr(dev, sc->sc_otg.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)dwc_otg_interrupt, sc, &sc->sc_otg.sc_intr_hdl); + if (err) { + sc->sc_otg.sc_intr_hdl = NULL; + goto error; + } + err = dwc_otg_init(&sc->sc_otg); + if (err == 0) { + err = device_probe_and_attach(sc->sc_otg.sc_bus.bdev); + } + if (err) + goto error; + + + return (0); + +error: + dwc_otg_detach(dev); + return (ENXIO); +} + +static int +dwc_otg_detach(device_t dev) +{ + struct dwc_otg_super_softc *sc = device_get_softc(dev); + device_t bdev; + int err; + + if (sc->sc_otg.sc_bus.bdev) { + bdev = sc->sc_otg.sc_bus.bdev; + device_detach(bdev); + device_delete_child(dev, bdev); + } + /* during module unload there are lots of children leftover */ + device_delete_children(dev); + + if (sc->sc_otg.sc_irq_res && sc->sc_otg.sc_intr_hdl) { + /* + * only call dwc_otg_uninit() after dwc_otg_init() + */ + dwc_otg_uninit(&sc->sc_otg); + + err = bus_teardown_intr(dev, sc->sc_otg.sc_irq_res, + sc->sc_otg.sc_intr_hdl); + sc->sc_otg.sc_intr_hdl = NULL; + } + /* free IRQ channel, if any */ + if (sc->sc_otg.sc_irq_res) { + bus_release_resource(dev, SYS_RES_IRQ, 0, + sc->sc_otg.sc_irq_res); + sc->sc_otg.sc_irq_res = NULL; + } + /* free memory resource, if any */ + if (sc->sc_otg.sc_io_res) { + bus_release_resource(dev, SYS_RES_MEMORY, 0, + sc->sc_otg.sc_io_res); + sc->sc_otg.sc_io_res = NULL; + } + usb_bus_mem_free_all(&sc->sc_otg.sc_bus, NULL); + + return (0); +} + +static device_method_t dwc_otg_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, dwc_otg_probe), + DEVMETHOD(device_attach, dwc_otg_attach), + DEVMETHOD(device_detach, dwc_otg_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t dwc_otg_driver = { + .name = "dwcotg", + .methods = dwc_otg_methods, + .size = sizeof(struct dwc_otg_super_softc), +}; + +static devclass_t dwc_otg_devclass; + +DRIVER_MODULE(dwcotg, simplebus, dwc_otg_driver, dwc_otg_devclass, 0, 0); +MODULE_DEPEND(dwcotg, usb, 1, 1, 1); Modified: user/mjacob/sys/arm/broadcom/bcm2835/files.bcm2835 ============================================================================== --- user/mjacob/sys/arm/broadcom/bcm2835/files.bcm2835 Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/broadcom/bcm2835/files.bcm2835 Fri Sep 14 18:57:07 2012 (r240511) @@ -8,6 +8,7 @@ arm/broadcom/bcm2835/bcm2835_systimer.c arm/broadcom/bcm2835/bcm2835_wdog.c standard arm/broadcom/bcm2835/bus_space.c optional fdt arm/broadcom/bcm2835/common.c optional fdt +arm/broadcom/bcm2835/dwc_otg_brcm.c optional dwcotg arm/arm/bus_space_generic.c standard arm/arm/bus_space_asm_generic.S standard Modified: user/mjacob/sys/arm/conf/ARMADAXP ============================================================================== --- user/mjacob/sys/arm/conf/ARMADAXP Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/conf/ARMADAXP Fri Sep 14 18:57:07 2012 (r240511) @@ -96,7 +96,10 @@ options HZ=1000 options DEVICE_POLLING device vlan +#PCI/PCIE +device pci + #FDT options FDT options FDT_DTB_STATIC -makeoptions FDT_DTS_FILE=db88f78160.dts +makeoptions FDT_DTS_FILE=db78460.dts Modified: user/mjacob/sys/arm/conf/RPI-B ============================================================================== --- user/mjacob/sys/arm/conf/RPI-B Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/conf/RPI-B Fri Sep 14 18:57:07 2012 (r240511) @@ -59,6 +59,7 @@ options SYSVMSG #SYSV-style message q options SYSVSEM #SYSV-style semaphores options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions options KBD_INSTALL_CDEV # install a CDEV entry in /dev +#options ROOTDEVNAME=\"ufs:/dev/da0s1a\" options PREEMPTION @@ -85,15 +86,20 @@ options INVARIANT_SUPPORT #Extra sanity device md device random # Entropy device -# Not yet: USB support -# device usb -# options USB_DEBUG - - -# Not yet: USB Ethernet support, requires miibus -# device mii -# device smc -# device smcphy +# USB support +device usb +options USB_DEBUG +device dwcotg #DWC OTG controller + +# USB storage support +device scbus +device da +device umass + +# USB ethernet support +device smcphy +device mii +device smsc # Flattened Device Tree options FDT Modified: user/mjacob/sys/arm/include/armreg.h ============================================================================== --- user/mjacob/sys/arm/include/armreg.h Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/include/armreg.h Fri Sep 14 18:57:07 2012 (r240511) @@ -170,11 +170,12 @@ #define CPU_ID_MV88SV581X_V6 0x560F5810 /* Marvell Sheeva 88SV581x v6 Core */ #define CPU_ID_MV88SV581X_V7 0x561F5810 /* Marvell Sheeva 88SV581x v7 Core */ -#define CPU_ID_MV88SV584X 0x561F5840 /* Marvell Sheeva 88SV584x v6 Core */ +#define CPU_ID_MV88SV584X_V6 0x561F5840 /* Marvell Sheeva 88SV584x v6 Core */ +#define CPU_ID_MV88SV584X_V7 0x562F5840 /* Marvell Sheeva 88SV584x v7 Core */ /* Marvell's CPUIDs with ARM ID in implementor field */ #define CPU_ID_ARM_88SV581X_V6 0x410fb760 /* Marvell Sheeva 88SV581x v6 Core */ #define CPU_ID_ARM_88SV581X_V7 0x413FC080 /* Marvell Sheeva 88SV581x v7 Core */ -#define CPU_ID_ARM_88SV584X 0x410FB024 /* Marvell Sheeva 88SV584x v6 Core */ +#define CPU_ID_ARM_88SV584X_V6 0x410FB020 /* Marvell Sheeva 88SV584x v6 Core */ #define CPU_ID_FA526 0x66015260 #define CPU_ID_FA626TE 0x66056260 Modified: user/mjacob/sys/arm/include/intr.h ============================================================================== --- user/mjacob/sys/arm/include/intr.h Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/include/intr.h Fri Sep 14 18:57:07 2012 (r240511) @@ -54,6 +54,13 @@ #define NIRQ 128 #elif defined(CPU_ARM11) #define NIRQ 128 +#elif defined(SOC_MV_ARMADAXP) +#define MAIN_IRQ_NUM 116 +#define ERR_IRQ_NUM 32 +#define ERR_IRQ (MAIN_IRQ_NUM) +#define MSI_IRQ_NUM 32 +#define MSI_IRQ (ERR_IRQ + ERR_IRQ_NUM) +#define NIRQ (MAIN_IRQ_NUM + ERR_IRQ_NUM + MSI_IRQ_NUM) #else #define NIRQ 32 #endif Modified: user/mjacob/sys/arm/mv/armadaxp/armadaxp.c ============================================================================== --- user/mjacob/sys/arm/mv/armadaxp/armadaxp.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/mv/armadaxp/armadaxp.c Fri Sep 14 18:57:07 2012 (r240511) @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -43,31 +44,119 @@ __FBSDID("$FreeBSD$"); #include +#define CPU_FREQ_FIELD(sar) (((0x01 & (sar >> 52)) << 3) | \ + (0x07 & (sar >> 21))) +#define FAB_FREQ_FIELD(sar) (((0x01 & (sar >> 51)) << 4) | \ + (0x0F & (sar >> 24))) + +static uint32_t count_l2clk(void); + +/* XXX Make gpio driver optional and remove it */ struct resource_spec mv_gpio_res[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, { SYS_RES_IRQ, 0, RF_ACTIVE }, { -1, 0 } }; +struct vco_freq_ratio { + uint8_t vco_cpu; /* VCO to CLK0(CPU) clock ratio */ + uint8_t vco_l2c; /* VCO to NB(L2 cache) clock ratio */ + uint8_t vco_hcl; /* VCO to HCLK(DDR controller) clock ratio */ + uint8_t vco_ddr; /* VCO to DR(DDR memory) clock ratio */ +}; + +static struct vco_freq_ratio freq_conf_table[] = { +/*00*/ { 1, 1, 4, 2 }, +/*01*/ { 1, 2, 2, 2 }, +/*02*/ { 2, 2, 6, 3 }, +/*03*/ { 2, 2, 3, 3 }, +/*04*/ { 1, 2, 3, 3 }, +/*05*/ { 1, 2, 4, 2 }, +/*06*/ { 1, 1, 2, 2 }, +/*07*/ { 2, 3, 6, 6 }, +/*08*/ { 2, 3, 5, 5 }, +/*09*/ { 1, 2, 6, 3 }, +/*10*/ { 2, 4, 10, 5 }, +/*11*/ { 1, 3, 6, 6 }, +/*12*/ { 1, 2, 5, 5 }, +/*13*/ { 1, 3, 6, 3 }, +/*14*/ { 1, 2, 5, 5 }, +/*15*/ { 2, 2, 5, 5 }, +/*16*/ { 1, 1, 3, 3 }, +/*17*/ { 2, 5, 10, 10 }, +/*18*/ { 1, 3, 8, 4 }, +/*19*/ { 1, 1, 2, 1 }, +/*20*/ { 2, 3, 6, 3 }, +/*21*/ { 1, 2, 8, 4 }, +/*22*/ { 2, 5, 10, 5 } +}; + +static uint16_t cpu_clock_table[] = { + 1000, 1066, 1200, 1333, 1500, 1666, 1800, 2000, 600, 667, 800, 1600, + 2133, 2200, 2400 }; + uint32_t get_tclk(void) { + uint32_t cputype; - return (TCLK_200MHZ); + cputype = cpufunc_id(); + cputype &= CPU_ID_CPU_MASK; + + if (cputype == CPU_ID_MV88SV584X_V7) + return (TCLK_250MHZ); + else + return (TCLK_200MHZ); } -uint32_t -get_l2clk(void) +static uint32_t +count_l2clk(void) { + uint64_t sar_reg; + uint32_t freq_vco, freq_l2clk; + uint8_t sar_cpu_freq, sar_fab_freq, array_size; + + /* Get value of the SAR register and process it */ + sar_reg = get_sar_value(); + sar_cpu_freq = CPU_FREQ_FIELD(sar_reg); + sar_fab_freq = FAB_FREQ_FIELD(sar_reg); + + /* Check if CPU frequency field has correct value */ + array_size = sizeof(cpu_clock_table) / sizeof(cpu_clock_table[0]); + if (sar_cpu_freq >= array_size) + panic("Reserved value in cpu frequency configuration field: " + "%d", sar_cpu_freq); + + /* Check if fabric frequency field has correct value */ + array_size = sizeof(freq_conf_table) / sizeof(freq_conf_table[0]); + if (sar_fab_freq >= array_size) + panic("Reserved value in fabric frequency configuration field: " + "%d", sar_fab_freq); + + /* Get CPU clock frequency */ + freq_vco = cpu_clock_table[sar_cpu_freq] * + freq_conf_table[sar_fab_freq].vco_cpu; + + /* Get L2CLK clock frequency */ + freq_l2clk = freq_vco / freq_conf_table[sar_fab_freq].vco_l2c; + + /* Round L2CLK value to integer MHz */ + if (((freq_vco % freq_conf_table[sar_fab_freq].vco_l2c) * 10 / + freq_conf_table[sar_fab_freq].vco_l2c) >= 5) + freq_l2clk++; - return (TCLK_667MHZ); + return (freq_l2clk * 1000000); } -int -fdt_pci_devmap(phandle_t node, struct pmap_devmap *devmap, vm_offset_t io_va, - vm_offset_t mem_va) +uint32_t +get_l2clk(void) { + static uint32_t l2clk_freq = 0; + + /* If get_l2clk is called first time get L2CLK value from register */ + if (l2clk_freq == 0) + l2clk_freq = count_l2clk(); - return (0); + return (l2clk_freq); } Modified: user/mjacob/sys/arm/mv/common.c ============================================================================== --- user/mjacob/sys/arm/mv/common.c Fri Sep 14 18:45:14 2012 (r240510) +++ user/mjacob/sys/arm/mv/common.c Fri Sep 14 18:57:07 2012 (r240511) @@ -249,12 +249,47 @@ write_cpu_ctrl(uint32_t reg, uint32_t va bus_space_write_4(fdtbus_bs_tag, MV_CPU_CONTROL_BASE, reg, val); } +#if defined(SOC_MV_ARMADAXP) +uint32_t +read_cpu_mp_clocks(uint32_t reg) +{ + *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***