Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 May 2014 19:37:05 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r266341 - in stable/10/sys: arm/arm arm/conf arm/include arm/samsung/exynos boot/fdt/dts/arm
Message-ID:  <201405171937.s4HJb5HD039538@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sat May 17 19:37:04 2014
New Revision: 266341
URL: http://svnweb.freebsd.org/changeset/base/266341

Log:
  MFC 263910, 263913, 263914, 263933, 263934, 263935, 263936, 263981, 263982,
  
    Add more flags for the fpexc register from the ARM1176JZF-S Manual
  
    Initialise fpscr to a sane value when we create the pcb. This sets NaNs to
    be the default NaN and for denormalised numbers to be flushed to zero.
  
    VFP fixes/cleanups for ARM11:
     * Save the required VFP registers on context switch. If the exception bit
       is set we need to save and restore the FPINST register, and if the fp2v
       bit is also set we need to save and restore FPINST2.
     * Move saving and restoring the floating point control registers to C.
     * Clear the fpexc exception and fp2v flags on a floating-point exception.
     * Signal a SIGFPE if the fpexc exception flag is set on an undefined
       instruction. This is how the ARM core signals to software there is a
       floating-point exception.
  
    Add Cortex-A15 cpu id revisions.
  
    Exynos/Arndale...
    - Merge SoC-common parts
    - Enable iicbus device
    - Directly call kmem_alloc_contig to allocate framebuffer memory
      and pass VM_MEMATTR_UNCACHEABLE (no-cache, no-buffer).
      This fixes screen refreshing problem when data is updated too slowly.
    - Add support for keyboard used in Samsung Chromebook (ARM machine)
      Support covers device drivers for:
      - Interrupt Combiner
      - gpio/pad, External Interrupts Controller (pad)
      - I2C Interface
      - Chrome Embedded Controller
      - Chrome Keyboard
    - Use new gpio dev class in EHCI driver
    - Expand device tree information
    - Release i2c bus on detach.

Added:
  stable/10/sys/arm/conf/CHROMEBOOK.hints
     - copied unchanged from r263936, head/sys/arm/conf/CHROMEBOOK.hints
  stable/10/sys/arm/conf/EXYNOS5250.common
     - copied unchanged from r263935, head/sys/arm/conf/EXYNOS5250.common
  stable/10/sys/arm/samsung/exynos/chrome_ec.c
     - copied, changed from r263936, head/sys/arm/samsung/exynos/chrome_ec.c
  stable/10/sys/arm/samsung/exynos/chrome_ec.h
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/chrome_ec.h
  stable/10/sys/arm/samsung/exynos/chrome_kb.c
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/chrome_kb.c
  stable/10/sys/arm/samsung/exynos/chrome_kb.h
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/chrome_kb.h
  stable/10/sys/arm/samsung/exynos/exynos5_combiner.c
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/exynos5_combiner.c
  stable/10/sys/arm/samsung/exynos/exynos5_combiner.h
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/exynos5_combiner.h
  stable/10/sys/arm/samsung/exynos/exynos5_i2c.c
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/exynos5_i2c.c
  stable/10/sys/arm/samsung/exynos/exynos5_pad.c
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/exynos5_pad.c
  stable/10/sys/arm/samsung/exynos/exynos5_pad.h
     - copied unchanged from r263936, head/sys/arm/samsung/exynos/exynos5_pad.h
Modified:
  stable/10/sys/arm/arm/cpufunc.c
  stable/10/sys/arm/arm/identcpu.c
  stable/10/sys/arm/arm/machdep.c
  stable/10/sys/arm/arm/vfp.c
  stable/10/sys/arm/arm/vm_machdep.c
  stable/10/sys/arm/conf/ARNDALE
  stable/10/sys/arm/conf/CHROMEBOOK
  stable/10/sys/arm/include/armreg.h
  stable/10/sys/arm/include/fp.h
  stable/10/sys/arm/include/vfp.h
  stable/10/sys/arm/samsung/exynos/exynos5_ehci.c
  stable/10/sys/arm/samsung/exynos/exynos5_fimd.c
  stable/10/sys/arm/samsung/exynos/files.exynos5
  stable/10/sys/boot/fdt/dts/arm/exynos5250-arndale.dts
  stable/10/sys/boot/fdt/dts/arm/exynos5250-chromebook.dts
  stable/10/sys/boot/fdt/dts/arm/exynos5250.dtsi
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/arm/arm/cpufunc.c
==============================================================================
--- stable/10/sys/arm/arm/cpufunc.c	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/arm/cpufunc.c	Sat May 17 19:37:04 2014	(r266341)
@@ -1055,7 +1055,10 @@ set_cpufuncs()
 	    cputype == CPU_ID_CORTEXA9R1 ||
 	    cputype == CPU_ID_CORTEXA9R2 ||
 	    cputype == CPU_ID_CORTEXA9R3 ||
-	    cputype == CPU_ID_CORTEXA15 ||
+	    cputype == CPU_ID_CORTEXA15R0 ||
+	    cputype == CPU_ID_CORTEXA15R1 ||
+	    cputype == CPU_ID_CORTEXA15R2 ||
+	    cputype == CPU_ID_CORTEXA15R3 ||
 	    cputype == CPU_ID_KRAIT ) {
 		cpufuncs = cortexa_cpufuncs;
 		cpu_reset_needs_v4_MMU_disable = 1;     /* V4 or higher */

Modified: stable/10/sys/arm/arm/identcpu.c
==============================================================================
--- stable/10/sys/arm/arm/identcpu.c	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/arm/identcpu.c	Sat May 17 19:37:04 2014	(r266341)
@@ -183,7 +183,13 @@ const struct cpuidtab cpuids[] = {
 	  generic_steppings },
 	{ CPU_ID_CORTEXA9R3,	CPU_CLASS_CORTEXA,	"Cortex A9-r3",
 	  generic_steppings },
-	{ CPU_ID_CORTEXA15,     CPU_CLASS_CORTEXA,      "Cortex A15",
+	{ CPU_ID_CORTEXA15R0,	CPU_CLASS_CORTEXA,	"Cortex A15-r0",
+	  generic_steppings },
+	{ CPU_ID_CORTEXA15R1,	CPU_CLASS_CORTEXA,	"Cortex A15-r1",
+	  generic_steppings },
+	{ CPU_ID_CORTEXA15R2,	CPU_CLASS_CORTEXA,	"Cortex A15-r2",
+	  generic_steppings },
+	{ CPU_ID_CORTEXA15R3,	CPU_CLASS_CORTEXA,	"Cortex A15-r3",
 	  generic_steppings },
 	{ CPU_ID_KRAIT,		CPU_CLASS_KRAIT,	"Krait",
 	  generic_steppings },

Modified: stable/10/sys/arm/arm/machdep.c
==============================================================================
--- stable/10/sys/arm/arm/machdep.c	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/arm/machdep.c	Sat May 17 19:37:04 2014	(r266341)
@@ -101,6 +101,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/reg.h>
 #include <machine/trap.h>
 #include <machine/undefined.h>
+#include <machine/vfp.h>
 #include <machine/vmparam.h>
 #include <machine/sysarch.h>
 
@@ -990,6 +991,7 @@ init_proc0(vm_offset_t kstack)
 		(thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
 	thread0.td_pcb->pcb_flags = 0;
 	thread0.td_pcb->pcb_vfpcpu = -1;
+	thread0.td_pcb->pcb_vfpstate.fpscr = VFPSCR_DN | VFPSCR_FZ;
 	thread0.td_frame = &proc0_tf;
 	pcpup->pc_curpcb = thread0.td_pcb;
 }

Modified: stable/10/sys/arm/arm/vfp.c
==============================================================================
--- stable/10/sys/arm/arm/vfp.c	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/arm/vfp.c	Sat May 17 19:37:04 2014	(r266341)
@@ -149,6 +149,7 @@ vfp_bounce(u_int addr, u_int insn, struc
 {
 	u_int cpu, fpexc;
 	struct pcb *curpcb;
+	ksiginfo_t ksi;
 
 	if ((code & FAULT_USER) == 0)
 		panic("undefined floating point instruction in supervisor mode");
@@ -162,9 +163,27 @@ vfp_bounce(u_int addr, u_int insn, struc
 	 */
 	fpexc = fmrx(VFPEXC);
 	if (fpexc & VFPEXC_EN) {
+		/* Clear any exceptions */
+		fmxr(VFPEXC, fpexc & ~(VFPEXC_EX | VFPEXC_FP2V));
+
 		/* kill the process - we do not handle emulation */
 		critical_exit();
-		killproc(curthread->td_proc, "vfp emulation");
+
+		if (fpexc & VFPEXC_EX) {
+			/* We have an exception, signal a SIGFPE */
+			ksiginfo_init_trap(&ksi);
+			ksi.ksi_signo = SIGFPE;
+			if (fpexc & VFPEXC_UFC)
+				ksi.ksi_code = FPE_FLTUND;
+			else if (fpexc & VFPEXC_OFC)
+				ksi.ksi_code = FPE_FLTOVF;
+			else if (fpexc & VFPEXC_IOC)
+				ksi.ksi_code = FPE_FLTINV;
+			ksi.ksi_addr = (void *)addr;
+			trapsignal(curthread, &ksi);
+			return 0;
+		}
+
 		return 1;
 	}
 
@@ -192,15 +211,24 @@ vfp_bounce(u_int addr, u_int insn, struc
 static void
 vfp_restore(struct vfp_state *vfpsave)
 {
-	u_int vfpscr = 0;
+	uint32_t fpexc;
+
+	/* On VFPv2 we may need to restore FPINST and FPINST2 */
+	fpexc = vfpsave->fpexec;
+	if (fpexc & VFPEXC_EX) {
+		fmxr(VFPINST, vfpsave->fpinst);
+		if (fpexc & VFPEXC_FP2V)
+			fmxr(VFPINST2, vfpsave->fpinst2);
+	}
+	fmxr(VFPSCR, vfpsave->fpscr);
 
-	__asm __volatile("ldc	p10, c0, [%1], #128\n" /* d0-d15 */
-			"cmp	%2, #0\n"		/* -D16 or -D32? */
-			LDCLNE "p11, c0, [%1], #128\n"	/* d16-d31 */
-			"addeq	%1, %1, #128\n"		/* skip missing regs */
-			"ldr	%0, [%1]\n"		/* set old vfpscr */
-			"mcr	p10, 7, %0, cr1, c0, 0\n"
-			: "=&r" (vfpscr) : "r" (vfpsave), "r" (is_d32) : "cc");
+	__asm __volatile("ldc	p10, c0, [%0], #128\n" /* d0-d15 */
+			"cmp	%1, #0\n"		/* -D16 or -D32? */
+			LDCLNE "p11, c0, [%0], #128\n"	/* d16-d31 */
+			"addeq	%0, %0, #128\n"		/* skip missing regs */
+			: : "r" (vfpsave), "r" (is_d32) : "cc");
+
+	fmxr(VFPEXC, fpexc);
 }
 
 /*
@@ -211,20 +239,30 @@ vfp_restore(struct vfp_state *vfpsave)
 void
 vfp_store(struct vfp_state *vfpsave, boolean_t disable_vfp)
 {
-	u_int tmp, vfpscr;
+	uint32_t fpexc;
+
+	fpexc = fmrx(VFPEXC);		/* Is the vfp enabled? */
+	if (fpexc & VFPEXC_EN) {
+		vfpsave->fpexec = fpexc;
+		vfpsave->fpscr = fmrx(VFPSCR);
+
+		/* On VFPv2 we may need to save FPINST and FPINST2 */
+		if (fpexc & VFPEXC_EX) {
+			vfpsave->fpinst = fmrx(VFPINST);
+			if (fpexc & VFPEXC_FP2V)
+				vfpsave->fpinst2 = fmrx(VFPINST2);
+			fpexc &= ~VFPEXC_EX;
+		}
 
-	tmp = fmrx(VFPEXC);		/* Is the vfp enabled? */
-	if (tmp & VFPEXC_EN) {
 		__asm __volatile(
-			"stc	p11, c0, [%1], #128\n"  /* d0-d15 */
-			"cmp	%2, #0\n"		/* -D16 or -D32? */
-			STCLNE "p11, c0, [%1], #128\n"	/* d16-d31 */
-			"addeq	%1, %1, #128\n"		/* skip missing regs */
-			"mrc	p10, 7, %0, cr1, c0, 0\n" /* fmxr(VFPSCR) */
-			"str	%0, [%1]\n"		/* save vfpscr */
-			: "=&r" (vfpscr) : "r" (vfpsave), "r" (is_d32) : "cc");
+			"stc	p11, c0, [%0], #128\n"  /* d0-d15 */
+			"cmp	%1, #0\n"		/* -D16 or -D32? */
+			STCLNE "p11, c0, [%0], #128\n"	/* d16-d31 */
+			"addeq	%0, %0, #128\n"		/* skip missing regs */
+			: : "r" (vfpsave), "r" (is_d32) : "cc");
+
 		if (disable_vfp)
-			fmxr(VFPEXC , tmp & ~VFPEXC_EN);
+			fmxr(VFPEXC , fpexc & ~VFPEXC_EN);
 	}
 }
 

Modified: stable/10/sys/arm/arm/vm_machdep.c
==============================================================================
--- stable/10/sys/arm/arm/vm_machdep.c	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/arm/vm_machdep.c	Sat May 17 19:37:04 2014	(r266341)
@@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$");
 #include <vm/uma_int.h>
 
 #include <machine/md_var.h>
+#include <machine/vfp.h>
 
 /*
  * struct switchframe and trapframe must both be a multiple of 8
@@ -147,6 +148,7 @@ cpu_fork(register struct thread *td1, re
 	pcb2->un_32.pcb32_sp = td2->td_kstack +
 	    USPACE_SVC_STACK_TOP - sizeof(*pcb2);
 	pcb2->pcb_vfpcpu = -1;
+	pcb2->pcb_vfpstate.fpscr = VFPSCR_DN | VFPSCR_FZ;
 	pmap_activate(td2);
 	td2->td_frame = tf = (struct trapframe *)STACKALIGN(
 	    pcb2->un_32.pcb32_sp - sizeof(struct trapframe));

Modified: stable/10/sys/arm/conf/ARNDALE
==============================================================================
--- stable/10/sys/arm/conf/ARNDALE	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/conf/ARNDALE	Sat May 17 19:37:04 2014	(r266341)
@@ -17,122 +17,9 @@
 #
 # $FreeBSD$
 
+include		"EXYNOS5250.common"
 ident		ARNDALE
 
-include		"../samsung/exynos/std.exynos5"
-
-makeoptions	MODULES_OVERRIDE=""
-makeoptions	WITHOUT_MODULES="ahc"
-
-makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
-makeoptions	WERROR="-Werror"
-
-options 	HZ=100
-options 	SCHED_4BSD		# 4BSD scheduler
-options 	INET			# InterNETworking
-options 	INET6			# IPv6 communications protocols
-options 	GEOM_PART_BSD		# BSD partition scheme
-options 	GEOM_PART_MBR		# MBR partition scheme
-options 	TMPFS			# Efficient memory filesystem
-options 	FFS			# Berkeley Fast Filesystem
-options 	SOFTUPDATES
-options 	UFS_ACL			# Support for access control lists
-options 	UFS_DIRHASH		# Improve performance on big directories
-options 	MSDOSFS			# MSDOS Filesystem
-options 	CD9660			# ISO 9660 Filesystem
-options 	PROCFS			# Process filesystem (requires PSEUDOFS)
-options 	PSEUDOFS		# Pseudo-filesystem framework
-options 	COMPAT_43		# Compatible with BSD 4.3 [KEEP THIS!]
-options 	SCSI_DELAY=5000		# Delay (in ms) before probing SCSI
-options 	KTRACE
-options 	SYSVSHM			# SYSV-style shared memory
-options 	SYSVMSG			# SYSV-style message queues
-options 	SYSVSEM			# SYSV-style semaphores
-options 	_KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
-options 	KBD_INSTALL_CDEV
-options 	PREEMPTION
-options 	FREEBSD_BOOT_LOADER
-options 	VFP			# vfp/neon
-
-# Debugging
-makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
-options 	BREAK_TO_DEBUGGER
-#options	VERBOSE_SYSINIT		# Enable verbose sysinit messages
-options 	KDB
-options 	DDB			# Enable the kernel debugger
-#options 	INVARIANTS		# Enable calls of extra sanity checking
-#options 	INVARIANT_SUPPORT	# Extra sanity checks of internal structures, required by INVARIANTS
-#options	WITNESS			# Enable checks to detect deadlocks and cycles
-#options	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
-#options 	DIAGNOSTIC
-
-# NFS support
-options 	NFSCL			# Network Filesystem Client
-options 	NFSLOCKD		# Network Lock Manager
-options 	NFS_ROOT		# NFS usable as /, requires NFSCLIENT
-
-# Uncomment this for NFS root
-#options	NFS_ROOT		# NFS usable as /, requires NFSCL
-#options	BOOTP_NFSROOT
-#options	BOOTP_COMPAT
-#options	BOOTP
-#options	BOOTP_NFSV3
-#options	BOOTP_WIRED_TO=cpsw0
-
-device		mmc			# mmc/sd bus
-device		mmcsd			# mmc/sd flash cards
-device		sdhci			# generic sdhci
-
-options 	ROOTDEVNAME=\"ufs:/dev/da0\"
-
-#options	SMP
-
-# Pseudo devices
-
-device		loop
-device		random
-device		pty
-device		md
-device		gpio
-
-# USB support
-options 	USB_HOST_ALIGN=64	# Align usb buffers to cache line size.
-device		usb
-options 	USB_DEBUG
-#options	USB_REQ_DEBUG
-#options	USB_VERBOSE
-#device		musb
-device		ehci
-#device		ohci
-
-device		umass
-device		scbus			# SCSI bus (required for SCSI)
-device		da			# Direct Access (disks)
-device		pass
-
-# SATA
-#device		ata
-#device		atadisk
-#device		mvs
-
-# Serial ports
-device		uart
-
-# I2C (TWSI)
-#device		iic
-#device		iicbus
-
-# Ethernet
-device		ether
-device		mii
-device		smsc
-device		smscphy
-
-# USB ethernet support, requires miibus
-device		miibus
-device		axe			# ASIX Electronics USB Ethernet
-device		bpf			# Berkeley packet filter
-
 #FDT
 options 	FDT
 options 	FDT_DTB_STATIC

Modified: stable/10/sys/arm/conf/CHROMEBOOK
==============================================================================
--- stable/10/sys/arm/conf/CHROMEBOOK	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/conf/CHROMEBOOK	Sat May 17 19:37:04 2014	(r266341)
@@ -17,106 +17,13 @@
 #
 # $FreeBSD$
 
+include		"EXYNOS5250.common"
 ident		CHROMEBOOK
 
-include		"../samsung/exynos/std.exynos5"
+hints		"CHROMEBOOK.hints"
 
-makeoptions	MODULES_OVERRIDE=""
-makeoptions	WITHOUT_MODULES="ahc"
-
-makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
-makeoptions	WERROR="-Werror"
-
-options 	HZ=100
-options 	SCHED_4BSD		# 4BSD scheduler
-options 	INET			# InterNETworking
-options 	INET6			# IPv6 communications protocols
-options 	GEOM_PART_BSD		# BSD partition scheme
-options 	GEOM_PART_MBR		# MBR partition scheme
-options 	TMPFS			# Efficient memory filesystem
-options 	FFS			# Berkeley Fast Filesystem
-options 	SOFTUPDATES
-options 	UFS_ACL			# Support for access control lists
-options 	UFS_DIRHASH		# Improve performance on big directories
-options 	MSDOSFS			# MSDOS Filesystem
-options 	CD9660			# ISO 9660 Filesystem
-options 	PROCFS			# Process filesystem (requires PSEUDOFS)
-options 	PSEUDOFS		# Pseudo-filesystem framework
-options 	COMPAT_43		# Compatible with BSD 4.3 [KEEP THIS!]
-options 	SCSI_DELAY=5000		# Delay (in ms) before probing SCSI
-options 	KTRACE
-options 	SYSVSHM			# SYSV-style shared memory
-options 	SYSVMSG			# SYSV-style message queues
-options 	SYSVSEM			# SYSV-style semaphores
-options 	_KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
-options 	KBD_INSTALL_CDEV
-options 	PREEMPTION
-options 	FREEBSD_BOOT_LOADER
-options 	VFP			# vfp/neon
-
-# Debugging
-makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
-options 	BREAK_TO_DEBUGGER
-#options	VERBOSE_SYSINIT		# Enable verbose sysinit messages
-options 	KDB
-options 	DDB			# Enable the kernel debugger
-#options 	INVARIANTS		# Enable calls of extra sanity checking
-#options 	INVARIANT_SUPPORT	# Extra sanity checks of internal structures, required by INVARIANTS
-#options	WITNESS			# Enable checks to detect deadlocks and cycles
-#options	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
-#options 	DIAGNOSTIC
-
-# NFS support
-options 	NFSCL			# Network Filesystem Client
-options 	NFSLOCKD		# Network Lock Manager
-options 	NFS_ROOT		# NFS usable as /, requires NFSCLIENT
-
-# Uncomment this for NFS root
-#options	NFS_ROOT		# NFS usable as /, requires NFSCL
-#options	BOOTP_NFSROOT
-#options	BOOTP_COMPAT
-#options	BOOTP
-#options	BOOTP_NFSV3
-#options	BOOTP_WIRED_TO=cpsw0
-
-device		mmc			# mmc/sd bus
-device		mmcsd			# mmc/sd flash cards
-device		sdhci			# generic sdhci
-
-options 	ROOTDEVNAME=\"ufs:/dev/da0\"
-
-#options	SMP
-
-# Pseudo devices
-
-device		loop
-device		random
-device		pty
-device		md
-device		gpio
-
-# USB support
-options 	USB_HOST_ALIGN=64	# Align usb buffers to cache line size.
-device		usb
-options 	USB_DEBUG
-#options	USB_REQ_DEBUG
-#options	USB_VERBOSE
-#device		musb
-device		ehci
-#device		ohci
-
-device		umass
-device		scbus			# SCSI bus (required for SCSI)
-device		da			# Direct Access (disks)
-device		pass
-
-# SATA
-#device		ata
-#device		atadisk
-#device		mvs
-
-# Serial ports
-device		uart
+device		chrome_ec	# Chrome Embedded Controller
+device		chrome_kb	# Chrome Keyboard
 
 # Framebuffer
 device		vt
@@ -125,21 +32,6 @@ options 	SC_DFLT_FONT		# compile font in
 makeoptions	SC_DFLT_FONT=cp437
 device		ukbd
 
-# I2C (TWSI)
-#device		iic
-#device		iicbus
-
-# Ethernet
-device		ether
-device		mii
-device		smsc
-device		smscphy
-
-# USB ethernet support, requires miibus
-device		miibus
-device		axe			# ASIX Electronics USB Ethernet
-device		bpf			# Berkeley packet filter
-
 #FDT
 options 	FDT
 options 	FDT_DTB_STATIC

Copied: stable/10/sys/arm/conf/CHROMEBOOK.hints (from r263936, head/sys/arm/conf/CHROMEBOOK.hints)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/conf/CHROMEBOOK.hints	Sat May 17 19:37:04 2014	(r266341, copy of r263936, head/sys/arm/conf/CHROMEBOOK.hints)
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+# Chrome Embedded Controller
+hint.chrome_ec.0.at="iicbus0"
+hint.chrome_ec.0.addr=0x1e

Copied: stable/10/sys/arm/conf/EXYNOS5250.common (from r263935, head/sys/arm/conf/EXYNOS5250.common)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/conf/EXYNOS5250.common	Sat May 17 19:37:04 2014	(r266341, copy of r263935, head/sys/arm/conf/EXYNOS5250.common)
@@ -0,0 +1,132 @@
+# Kernel configuration for Samsung Exynos 5250 boards.
+#
+# For more information on this file, please read the config(5) manual page,
+# and/or the handbook section on Kernel Configuration Files:
+#
+#    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files.
+# If you are in doubt as to the purpose or necessity of a line, check first
+# in NOTES.
+#
+# $FreeBSD$
+
+include		"../samsung/exynos/std.exynos5"
+
+makeoptions	MODULES_OVERRIDE=""
+makeoptions	WITHOUT_MODULES="ahc"
+
+makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
+makeoptions	WERROR="-Werror"
+
+options 	HZ=100
+options 	SCHED_4BSD		# 4BSD scheduler
+options 	INET			# InterNETworking
+options 	INET6			# IPv6 communications protocols
+options 	GEOM_PART_BSD		# BSD partition scheme
+options 	GEOM_PART_MBR		# MBR partition scheme
+options 	TMPFS			# Efficient memory filesystem
+options 	FFS			# Berkeley Fast Filesystem
+options 	SOFTUPDATES
+options 	UFS_ACL			# Support for access control lists
+options 	UFS_DIRHASH		# Improve performance on big directories
+options 	MSDOSFS			# MSDOS Filesystem
+options 	CD9660			# ISO 9660 Filesystem
+options 	PROCFS			# Process filesystem (requires PSEUDOFS)
+options 	PSEUDOFS		# Pseudo-filesystem framework
+options 	COMPAT_43		# Compatible with BSD 4.3 [KEEP THIS!]
+options 	SCSI_DELAY=5000		# Delay (in ms) before probing SCSI
+options 	KTRACE
+options 	SYSVSHM			# SYSV-style shared memory
+options 	SYSVMSG			# SYSV-style message queues
+options 	SYSVSEM			# SYSV-style semaphores
+options 	_KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
+options 	KBD_INSTALL_CDEV
+options 	PREEMPTION
+options 	FREEBSD_BOOT_LOADER
+options 	VFP			# vfp/neon
+
+# Debugging
+makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
+options 	BREAK_TO_DEBUGGER
+#options	VERBOSE_SYSINIT		# Enable verbose sysinit messages
+options 	KDB
+options 	DDB			# Enable the kernel debugger
+#options 	INVARIANTS		# Enable calls of extra sanity checking
+#options 	INVARIANT_SUPPORT	# Extra sanity checks of internal structures, required by INVARIANTS
+#options	WITNESS			# Enable checks to detect deadlocks and cycles
+#options	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
+#options 	DIAGNOSTIC
+
+# NFS support
+options 	NFSCL			# Network Filesystem Client
+options 	NFSLOCKD		# Network Lock Manager
+options 	NFS_ROOT		# NFS usable as /, requires NFSCLIENT
+
+# Uncomment this for NFS root
+#options	NFS_ROOT		# NFS usable as /, requires NFSCL
+#options	BOOTP_NFSROOT
+#options	BOOTP_COMPAT
+#options	BOOTP
+#options	BOOTP_NFSV3
+#options	BOOTP_WIRED_TO=ue0
+
+device		mmc			# mmc/sd bus
+device		mmcsd			# mmc/sd flash cards
+device		sdhci			# generic sdhci
+
+options 	ROOTDEVNAME=\"ufs:/dev/da0\"
+
+#options	SMP
+
+# Pseudo devices
+
+device		loop
+device		random
+device		pty
+device		md
+device		gpio
+
+# USB support
+options 	USB_HOST_ALIGN=64	# Align usb buffers to cache line size.
+device		usb
+options 	USB_DEBUG
+#options	USB_REQ_DEBUG
+#options	USB_VERBOSE
+#device		musb
+device		ehci
+#device		ohci
+
+device		umass
+device		scbus			# SCSI bus (required for SCSI)
+device		da			# Direct Access (disks)
+device		pass
+
+# SATA
+#device		ata
+#device		atadisk
+#device		mvs
+
+# Serial ports
+device		uart
+
+# I2C (TWSI)
+device		iic
+device		iicbus
+
+# Ethernet
+device		ether
+device		mii
+device		smsc
+device		smscphy
+
+# USB ethernet support, requires miibus
+device		miibus
+device		axe			# ASIX Electronics USB Ethernet
+device		bpf			# Berkeley packet filter

Modified: stable/10/sys/arm/include/armreg.h
==============================================================================
--- stable/10/sys/arm/include/armreg.h	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/include/armreg.h	Sat May 17 19:37:04 2014	(r266341)
@@ -122,7 +122,10 @@
 #define CPU_ID_CORTEXA9R1	0x411fc090
 #define CPU_ID_CORTEXA9R2	0x412fc090
 #define CPU_ID_CORTEXA9R3	0x413fc090
-#define CPU_ID_CORTEXA15	0x410fc0f0
+#define CPU_ID_CORTEXA15R0	0x410fc0f0
+#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_TI925T		0x54029250
 #define CPU_ID_MV88FR131	0x56251310 /* Marvell Feroceon 88FR131 Core */

Modified: stable/10/sys/arm/include/fp.h
==============================================================================
--- stable/10/sys/arm/include/fp.h	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/include/fp.h	Sat May 17 19:37:04 2014	(r266341)
@@ -69,6 +69,9 @@ typedef struct fp_extended_precision fp_
 struct vfp_state {
 	u_int64_t reg[32];
 	u_int32_t fpscr;
+	u_int32_t fpexec;
+	u_int32_t fpinst;
+	u_int32_t fpinst2;
 };
 
 /*

Modified: stable/10/sys/arm/include/vfp.h
==============================================================================
--- stable/10/sys/arm/include/vfp.h	Sat May 17 19:16:45 2014	(r266340)
+++ stable/10/sys/arm/include/vfp.h	Sat May 17 19:37:04 2014	(r266341)
@@ -92,6 +92,11 @@
 /* VFPEXC */
 #define	VFPEXC_EX 		(0x80000000)	/* exception v1 v2 */
 #define	VFPEXC_EN		(0x40000000)	/* vfp enable */
+#define	VFPEXC_FP2V		(0x10000000)	/* FPINST2 valid */
+#define	VFPEXC_INV		(0x00000080)	/* Input exception */
+#define	VFPEXC_UFC		(0x00000008)	/* Underflow exception */
+#define	VFPEXC_OFC		(0x00000004)	/* Overflow exception */
+#define	VFPEXC_IOC		(0x00000001)	/* Invlaid operation */
 
 /* version 3 registers */
 /* VMVFR0 */

Copied and modified: stable/10/sys/arm/samsung/exynos/chrome_ec.c (from r263936, head/sys/arm/samsung/exynos/chrome_ec.c)
==============================================================================
--- head/sys/arm/samsung/exynos/chrome_ec.c	Sun Mar 30 15:22:36 2014	(r263936, copy source)
+++ stable/10/sys/arm/samsung/exynos/chrome_ec.c	Sat May 17 19:37:04 2014	(r266341)
@@ -234,9 +234,22 @@ ec_attach(device_t dev)
 	return (0);
 }
 
+static int
+ec_detach(device_t dev)
+{
+	struct ec_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	bus_release(sc);
+
+	return (0);
+}
+
 static device_method_t ec_methods[] = {
 	DEVMETHOD(device_probe,		ec_probe),
 	DEVMETHOD(device_attach,	ec_attach),
+	DEVMETHOD(device_detach,	ec_detach),
 	{ 0, 0 }
 };
 

Copied: stable/10/sys/arm/samsung/exynos/chrome_ec.h (from r263936, head/sys/arm/samsung/exynos/chrome_ec.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/samsung/exynos/chrome_ec.h	Sat May 17 19:37:04 2014	(r266341, copy of r263936, head/sys/arm/samsung/exynos/chrome_ec.h)
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
+ * 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.
+ *
+ * $FreeBSD$
+ */
+
+#define	EC_CMD_HELLO		0x01
+#define	EC_CMD_GET_VERSION	0x02
+#define	EC_CMD_MKBP_STATE	0x60
+#define	EC_CMD_VERSION0		0xdc
+
+int ec_command(uint8_t cmd, uint8_t *dout, uint8_t dout_len,
+    uint8_t *dinp, uint8_t dinp_len);
+int ec_hello(void);

Copied: stable/10/sys/arm/samsung/exynos/chrome_kb.c (from r263936, head/sys/arm/samsung/exynos/chrome_kb.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/samsung/exynos/chrome_kb.c	Sat May 17 19:37:04 2014	(r266341, copy of r263936, head/sys/arm/samsung/exynos/chrome_kb.c)
@@ -0,0 +1,792 @@
+/*-
+ * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
+ * 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.
+ */
+
+/*
+ * Samsung Chromebook Keyboard
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+#include <sys/rman.h>
+#include <sys/proc.h>
+#include <sys/sched.h>
+#include <sys/kdb.h>
+#include <sys/timeet.h>
+#include <sys/timetc.h>
+#include <sys/mutex.h>
+#include <sys/gpio.h>
+
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <sys/ioccom.h>
+#include <sys/filio.h>
+#include <sys/tty.h>
+#include <sys/kbio.h>
+
+#include <machine/bus.h>
+#include <machine/fdt.h>
+#include <machine/cpu.h>
+#include <machine/intr.h>
+
+#include "gpio_if.h"
+
+#include <arm/samsung/exynos/chrome_ec.h>
+#include <arm/samsung/exynos/chrome_kb.h>
+
+#include <arm/samsung/exynos/exynos5_combiner.h>
+#include <arm/samsung/exynos/exynos5_pad.h>
+
+#define	CKB_LOCK()	mtx_lock(&Giant)
+#define	CKB_UNLOCK()	mtx_unlock(&Giant)
+
+#ifdef	INVARIANTS
+/*
+ * Assert that the lock is held in all contexts
+ * where the code can be executed.
+ */
+#define	CKB_LOCK_ASSERT()	mtx_assert(&Giant, MA_OWNED)
+/*
+ * Assert that the lock is held in the contexts
+ * where it really has to be so.
+ */
+#define	CKB_CTX_LOCK_ASSERT()			 	\
+	do {						\
+		if (!kdb_active && panicstr == NULL)	\
+			mtx_assert(&Giant, MA_OWNED);	\
+	} while (0)
+#else
+#define CKB_LOCK_ASSERT()	(void)0
+#define CKB_CTX_LOCK_ASSERT()	(void)0
+#endif
+
+/*
+ * Define a stub keyboard driver in case one hasn't been
+ * compiled into the kernel
+ */
+#include <sys/kbio.h>
+#include <dev/kbd/kbdreg.h>
+#include <dev/kbd/kbdtables.h>
+
+#define	CKB_NFKEY		12
+#define	CKB_FLAG_COMPOSE	0x1
+#define	CKB_FLAG_POLLING	0x2
+#define	KBD_DRIVER_NAME		"ckbd"
+
+/* TODO: take interrupt from DTS */
+#define	KB_GPIO_INT		146
+
+struct ckb_softc {
+	keyboard_t sc_kbd;
+	keymap_t sc_keymap;
+	accentmap_t sc_accmap;
+	fkeytab_t sc_fkeymap[CKB_NFKEY];
+
+	struct resource*	sc_mem_res;
+	struct resource*	sc_irq_res;
+	void*			sc_intr_hl;
+
+	int	sc_mode;	/* input mode (K_XLATE,K_RAW,K_CODE) */
+	int	sc_state;	/* shift/lock key state */
+	int	sc_accents;	/* accent key index (> 0) */
+	int	sc_flags;	/* flags */
+
+	struct callout		sc_repeat_callout;
+	int			sc_repeat_key;
+	int			sc_repeating;
+
+	int			flag;
+	int			rows;
+	int			cols;
+	device_t		dev;
+	struct thread		*sc_poll_thread;
+
+	uint8_t			*scan_local;
+	uint8_t			*scan;
+};
+
+/* prototypes */
+static void	ckb_set_leds(struct ckb_softc *, uint8_t);
+static int	ckb_set_typematic(keyboard_t *, int);
+static uint32_t	ckb_read_char(keyboard_t *, int);
+static void	ckb_clear_state(keyboard_t *);
+static int	ckb_ioctl(keyboard_t *, u_long, caddr_t);
+static int	ckb_enable(keyboard_t *);
+static int	ckb_disable(keyboard_t *);
+
+static void
+ckb_repeat(void *arg)
+{
+	struct ckb_softc *sc;
+
+	sc = arg;
+
+	if (KBD_IS_ACTIVE(&sc->sc_kbd) && KBD_IS_BUSY(&sc->sc_kbd)) {
+		if (sc->sc_repeat_key != -1) {
+			sc->sc_repeating = 1;
+			sc->sc_kbd.kb_callback.kc_func(&sc->sc_kbd,
+			    KBDIO_KEYINPUT, sc->sc_kbd.kb_callback.kc_arg);
+		}
+	}
+}
+
+/* detect a keyboard, not used */
+static int
+ckb__probe(int unit, void *arg, int flags)
+{
+
+	return (ENXIO);
+}
+
+/* reset and initialize the device, not used */
+static int
+ckb_init(int unit, keyboard_t **kbdp, void *arg, int flags)
+{
+
+	return (ENXIO);
+}
+
+/* test the interface to the device, not used */
+static int
+ckb_test_if(keyboard_t *kbd)
+{
+
+	return (0);
+}
+
+/* finish using this keyboard, not used */
+static int
+ckb_term(keyboard_t *kbd)
+{
+
+	return (ENXIO);
+}
+
+/* keyboard interrupt routine, not used */
+static int
+ckb_intr(keyboard_t *kbd, void *arg)
+{
+
+        return (0);
+}
+
+/* lock the access to the keyboard, not used */
+static int
+ckb_lock(keyboard_t *kbd, int lock)
+{
+
+        return (1);
+}
+
+/* clear the internal state of the keyboard */
+static void
+ckb_clear_state(keyboard_t *kbd)
+{
+	struct ckb_softc *sc;
+
+	sc = kbd->kb_data;
+
+	CKB_CTX_LOCK_ASSERT();
+
+	sc->sc_flags &= ~(CKB_FLAG_COMPOSE | CKB_FLAG_POLLING);
+	sc->sc_state &= LOCK_MASK; /* preserve locking key state */
+	sc->sc_accents = 0;
+}
+
+/* save the internal state, not used */
+static int
+ckb_get_state(keyboard_t *kbd, void *buf, size_t len)
+{
+
+	return (len == 0) ? 1 : -1;
+}
+
+/* set the internal state, not used */
+static int
+ckb_set_state(keyboard_t *kbd, void *buf, size_t len)
+{
+
+	return (EINVAL);
+}
+
+
+/* check if data is waiting */
+static int
+ckb_check(keyboard_t *kbd)
+{
+	struct ckb_softc *sc;
+	int i;
+
+	sc = kbd->kb_data;
+
+	CKB_CTX_LOCK_ASSERT();
+
+	if (!KBD_IS_ACTIVE(kbd))
+		return (0);
+
+	if (sc->sc_flags & CKB_FLAG_POLLING) {
+		return (1);
+	};
+
+	for (i = 0; i < sc->cols; i++)
+		if (sc->scan_local[i] != sc->scan[i]) {
+			return (1);
+		};
+
+	if (sc->sc_repeating)
+		return (1);
+
+	return (0);
+}
+
+/* check if char is waiting */
+static int
+ckb_check_char_locked(keyboard_t *kbd)
+{
+	CKB_CTX_LOCK_ASSERT();
+
+	if (!KBD_IS_ACTIVE(kbd))
+		return (0);
+
+	return (ckb_check(kbd));
+}
+
+static int
+ckb_check_char(keyboard_t *kbd)
+{
+	int result;
+
+	CKB_LOCK();
+	result = ckb_check_char_locked(kbd);
+	CKB_UNLOCK();
+
+	return (result);
+}
+
+/* read one byte from the keyboard if it's allowed */
+/* Currently unused. */
+static int
+ckb_read(keyboard_t *kbd, int wait)
+{
+	CKB_CTX_LOCK_ASSERT();
+
+	if (!KBD_IS_ACTIVE(kbd))
+		return (-1);
+
+	printf("Implement ME: %s\n", __func__);

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



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