svn commit: r197251 - in stable/8/sys: . amd64/include/xen arm/conf arm/mv arm/mv/discovery arm/mv/kirkwood arm/mv/orion cddl/contrib/opensolaris conf contrib/dev/acpica contrib/pf dev/mge dev/xen/...

Rafal Jaworowski raj at FreeBSD.org
Wed Sep 16 12:07:58 UTC 2009


Author: raj
Date: Wed Sep 16 12:07:58 2009
New Revision: 197251
URL: http://svn.freebsd.org/changeset/base/197251

Log:
  MFC r196531-196534,196536
  
  Clean up Marvell platform code.
  
  Introduce SheevaPlug support.
  
     - The device is based on Marvell 88F6281 system on chip.
     - More info about the platform at http://www.plugcomputer.org
  
     - To build the FreeBSD kernel:
       make buildkernel TARGET_ARCH=arm KERNCONF=SHEEVAPLUG
  
     - Installation notes at: http://wiki.freebsd.org/FreeBSDMarvell
  
  Submitted by:	Michal Hajduk
  Approved by:	re (kib)
  Obtained from:	Semihalf

Added:
  stable/8/sys/arm/conf/SHEEVAPLUG
     - copied unchanged from r196536, head/sys/arm/conf/SHEEVAPLUG
  stable/8/sys/arm/mv/kirkwood/files.kirkwood
     - copied unchanged from r196533, head/sys/arm/mv/kirkwood/files.kirkwood
  stable/8/sys/arm/mv/kirkwood/files.sheevaplug
     - copied unchanged from r196536, head/sys/arm/mv/kirkwood/files.sheevaplug
  stable/8/sys/arm/mv/kirkwood/sheevaplug.c
     - copied unchanged from r196536, head/sys/arm/mv/kirkwood/sheevaplug.c
  stable/8/sys/arm/mv/kirkwood/std.kirkwood
     - copied unchanged from r196533, head/sys/arm/mv/kirkwood/std.kirkwood
  stable/8/sys/arm/mv/kirkwood/std.sheevaplug
     - copied unchanged from r196536, head/sys/arm/mv/kirkwood/std.sheevaplug
Modified:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/arm/mv/common.c
  stable/8/sys/arm/mv/discovery/db78xxx.c
  stable/8/sys/arm/mv/kirkwood/db88f6xxx.c
  stable/8/sys/arm/mv/kirkwood/files.db88f6xxx
  stable/8/sys/arm/mv/kirkwood/std.db88f6xxx
  stable/8/sys/arm/mv/mv_machdep.c
  stable/8/sys/arm/mv/mvreg.h
  stable/8/sys/arm/mv/mvvar.h
  stable/8/sys/arm/mv/orion/db88f5xxx.c
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/conf/options.arm
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/mge/if_mge.c
  stable/8/sys/dev/xen/xenpci/   (props changed)

Copied: stable/8/sys/arm/conf/SHEEVAPLUG (from r196536, head/sys/arm/conf/SHEEVAPLUG)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/conf/SHEEVAPLUG	Wed Sep 16 12:07:58 2009	(r197251, copy of r196536, head/sys/arm/conf/SHEEVAPLUG)
@@ -0,0 +1,70 @@
+#
+# Custom kernel for Marvell SheevaPlug devices.
+#
+# $FreeBSD$
+#
+
+ident		SHEEVAPLUG
+include		"../mv/kirkwood/std.sheevaplug"
+
+options 	SOC_MV_KIRKWOOD
+makeoptions	MODULES_OVERRIDE=""
+
+#makeoptions	DEBUG=-g		#Build kernel with gdb(1) debug symbols
+makeoptions	WERROR="-Werror"
+
+options 	SCHED_4BSD		#4BSD scheduler
+options 	INET			#InterNETworking
+options 	INET6			#IPv6 communications protocols
+options 	FFS			#Berkeley Fast Filesystem
+options 	NFSCLIENT		#Network Filesystem Client
+options 	NFSLOCKD		#Network Lock Manager
+options 	NFS_ROOT		#NFS usable as /, requires NFSCLIENT
+options 	BOOTP
+options 	BOOTP_NFSROOT
+options 	BOOTP_NFSV3
+options 	BOOTP_WIRED_TO=mge0
+
+# Root fs on USB device
+#options 	ROOTDEVNAME=\"ufs:/dev/da0a\"
+
+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 	MUTEX_NOINLINE
+options 	RWLOCK_NOINLINE
+options 	NO_FFS_SNAPSHOT
+options 	NO_SWAPPING
+
+# Debugging
+options 	ALT_BREAK_TO_DEBUGGER
+options 	DDB
+options 	KDB
+
+# Pseudo devices
+device		random
+device		pty
+device		loop
+
+# Serial ports
+device		uart
+
+# Networking
+device		ether
+device		mge			# Marvell Gigabit Ethernet controller
+device		mii
+device		e1000phy
+device		bpf
+options		HZ=1000
+options		DEVICE_POLLING
+device		vlan
+
+# USB
+device		usb
+device		ehci
+device		umass
+device		scbus
+device		pass
+device		da
+

Modified: stable/8/sys/arm/mv/common.c
==============================================================================
--- stable/8/sys/arm/mv/common.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/common.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -32,8 +32,10 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
+#include <sys/kernel.h>
 
 #include <machine/bus.h>
 
@@ -62,6 +64,76 @@ static void decode_win_usb_dump(void);
 
 static uint32_t used_cpu_wins;
 
+static __inline int
+pm_is_disabled(uint32_t mask)
+{
+
+	return (soc_power_ctrl_get(mask) == mask ? 0 : 1);
+}
+
+static __inline uint32_t
+obio_get_pm_mask(uint32_t base)
+{
+	struct obio_device *od;
+
+	for (od = obio_devices; od->od_name != NULL; od++)
+		if (od->od_base == base)
+			return (od->od_pwr_mask);
+
+	return (CPU_PM_CTRL_NONE);
+}
+
+/*
+ * Disable device using power management register.
+ * 1 - Device Power On
+ * 0 - Device Power Off
+ * Mask can be set in loader.
+ * EXAMPLE:
+ * loader> set hw.pm-disable-mask=0x2
+ *
+ * Common mask:
+ * |-------------------------------|
+ * | Device | Kirkwood | Discovery |
+ * |-------------------------------|
+ * | USB0   | 0x00008  | 0x020000  |
+ * |-------------------------------|
+ * | USB1   |     -    | 0x040000  |
+ * |-------------------------------|
+ * | USB2   |     -    | 0x080000  |
+ * |-------------------------------|
+ * | GE0    | 0x00001  | 0x000002  |
+ * |-------------------------------|
+ * | GE1    |     -    | 0x000004  |
+ * |-------------------------------|
+ * | IDMA   |     -    | 0x100000  |
+ * |-------------------------------|
+ * | XOR    | 0x10000  | 0x200000  |
+ * |-------------------------------|
+ * | CESA   | 0x20000  | 0x400000  |
+ * |-------------------------------|
+ * | SATA   | 0x04000  | 0x004000  |
+ * --------------------------------|
+ * This feature can be used only on Kirkwood and Discovery
+ * machines.
+ */
+static __inline void
+pm_disable_device(int mask)
+{
+#ifdef DIAGNOSTIC
+	uint32_t reg;
+
+	reg = soc_power_ctrl_get(CPU_PM_CTRL_ALL);
+	printf("Power Management Register: 0%x\n", reg);
+
+	reg &= ~mask;
+	soc_power_ctrl_set(reg);
+	printf("Device %x is disabled\n", mask);
+
+	reg = soc_power_ctrl_get(CPU_PM_CTRL_ALL);
+	printf("Power Management Register: 0%x\n", reg);
+#endif
+}
+
 uint32_t
 read_cpu_ctrl(uint32_t reg)
 {
@@ -103,14 +175,36 @@ cpu_extra_feat(void)
 	return (ef);
 }
 
+/*
+ * Get the power status of device. This feature is only supported on
+ * Kirkwood and Discovery SoCs.
+ */
 uint32_t
 soc_power_ctrl_get(uint32_t mask)
 {
 
+#ifndef SOC_MV_ORION
 	if (mask != CPU_PM_CTRL_NONE)
 		mask &= read_cpu_ctrl(CPU_PM_CTRL);
 
 	return (mask);
+#else
+	return (mask);
+#endif
+}
+
+/*
+ * Set the power status of device. This feature is only supported on
+ * Kirkwood and Discovery SoCs.
+ */
+void
+soc_power_ctrl_set(uint32_t mask)
+{
+
+#ifndef SOC_MV_ORION
+	if (mask != CPU_PM_CTRL_NONE)
+		write_cpu_ctrl(CPU_PM_CTRL, mask);
+#endif
 }
 
 void
@@ -191,6 +285,13 @@ int
 soc_decode_win(void)
 {
 	uint32_t dev, rev;
+	int mask;
+
+	mask = 0;
+	TUNABLE_INT_FETCH("hw.pm-disable-mask", &mask);
+
+	if (mask != 0)
+		pm_disable_device(mask);
 
 	/* Retrieve our ID: some windows facilities vary between SoC models */
 	soc_id(&dev, &rev);
@@ -623,8 +724,12 @@ decode_win_usb_setup(void)
 
 	/* Disable and clear all USB windows for all ports */
 	m = usb_max_ports();
+
 	for (p = 0; p < m; p++) {
 
+		if (pm_is_disabled(CPU_PM_CTRL_USB(p)))
+			continue;
+
 		for (i = 0; i < MV_WIN_USB_MAX; i++) {
 			win_usb_cr_write(i, p, 0);
 			win_usb_br_write(i, p, 0);
@@ -710,6 +815,9 @@ decode_win_eth_setup(uint32_t base)
 	uint32_t br, sz;
 	int i, j;
 
+	if (pm_is_disabled(obio_get_pm_mask(base)))
+		return;
+
 	/* Disable, clear and revoke protection for all ETH windows */
 	for (i = 0; i < MV_WIN_ETH_MAX; i++) {
 
@@ -880,6 +988,8 @@ decode_win_idma_setup(void)
 	uint32_t br, sz;
 	int i, j;
 
+	if (pm_is_disabled(CPU_PM_CTRL_IDMA))
+		return;
 	/*
 	 * Disable and clear all IDMA windows, revoke protection for all channels
 	 */
@@ -1172,6 +1282,9 @@ decode_win_xor_setup(void)
 	uint32_t br, sz;
 	int i, j, z, e = 1, m, window;
 
+	if (pm_is_disabled(CPU_PM_CTRL_XOR))
+		return;
+
 	/*
 	 * Disable and clear all XOR windows, revoke protection for all
 	 * channels
@@ -1364,6 +1477,9 @@ decode_win_cesa_setup(void)
 	uint32_t br, cr;
 	int i, j;
 
+	if (pm_is_disabled(CPU_PM_CTRL_CRYPTO))
+		return;
+
 	/* Disable and clear all CESA windows */
 	for (i = 0; i < MV_WIN_CESA_MAX; i++) {
 		win_cesa_cr_write(i, 0);
@@ -1432,6 +1548,9 @@ decode_win_sata_setup(void)
 	uint32_t cr, br;
 	int i, j;
 
+	if (pm_is_disabled(CPU_PM_CTRL_SATA))
+		return;
+
 	for (i = 0; i < MV_WIN_SATA_MAX; i++) {
 		win_sata_cr_write(i, 0);
 		win_sata_br_write(i, 0);

Modified: stable/8/sys/arm/mv/discovery/db78xxx.c
==============================================================================
--- stable/8/sys/arm/mv/discovery/db78xxx.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/discovery/db78xxx.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -68,11 +68,8 @@ __FBSDID("$FreeBSD$");
  * 0xffff_2000 - 0xffff_ffff	: unused (~55KB)
  */
 
-const struct pmap_devmap *pmap_devmap_bootstrap_table;
-vm_offset_t pmap_bootstrap_lastaddr;
-
 /* Static device mappings. */
-static const struct pmap_devmap pmap_devmap[] = {
+const struct pmap_devmap pmap_devmap[] = {
 	/*
 	 * Map the on-board devices VA == PA so that we can access them
 	 * with the MMU on or off.
@@ -105,16 +102,6 @@ const struct gpio_config mv_gpio_config[
 	{ -1, -1, -1 }
 };
 
-int
-platform_pmap_init(void)
-{
-
-	pmap_bootstrap_lastaddr = MV_BASE - ARM_NOCACHE_KVA_SIZE;
-	pmap_devmap_bootstrap_table = &pmap_devmap[0];
-
-	return (0);
-}
-
 void
 platform_mpp_init(void)
 {

Modified: stable/8/sys/arm/mv/kirkwood/db88f6xxx.c
==============================================================================
--- stable/8/sys/arm/mv/kirkwood/db88f6xxx.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/kirkwood/db88f6xxx.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -68,11 +68,8 @@ __FBSDID("$FreeBSD$");
  * 0xffff_2000 - 0xffff_ffff	: unused (~55KB)
  */
 
-const struct pmap_devmap *pmap_devmap_bootstrap_table;
-vm_offset_t pmap_bootstrap_lastaddr;
-
 /* Static device mappings. */
-static const struct pmap_devmap pmap_devmap[] = {
+const struct pmap_devmap pmap_devmap[] = {
 	/*
 	 * Map the on-board devices VA == PA so that we can access them
 	 * with the MMU on or off.
@@ -105,16 +102,6 @@ const struct gpio_config mv_gpio_config[
 	{ -1, -1, -1 }
 };
 
-int
-platform_pmap_init(void)
-{
-
-	pmap_bootstrap_lastaddr = MV_BASE - ARM_NOCACHE_KVA_SIZE;
-	pmap_devmap_bootstrap_table = &pmap_devmap[0];
-
-	return (0);
-}
-
 void
 platform_mpp_init(void)
 {

Modified: stable/8/sys/arm/mv/kirkwood/files.db88f6xxx
==============================================================================
--- stable/8/sys/arm/mv/kirkwood/files.db88f6xxx	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/kirkwood/files.db88f6xxx	Wed Sep 16 12:07:58 2009	(r197251)
@@ -1,5 +1,4 @@
 # $FreeBSD$
 
-arm/mv/rtc.c			standard
-arm/mv/kirkwood/kirkwood.c	standard
+include "arm/mv/kirkwood/files.kirkwood"
 arm/mv/kirkwood/db88f6xxx.c	standard

Copied: stable/8/sys/arm/mv/kirkwood/files.kirkwood (from r196533, head/sys/arm/mv/kirkwood/files.kirkwood)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/mv/kirkwood/files.kirkwood	Wed Sep 16 12:07:58 2009	(r197251, copy of r196533, head/sys/arm/mv/kirkwood/files.kirkwood)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+arm/mv/rtc.c			standard
+arm/mv/kirkwood/kirkwood.c	standard

Copied: stable/8/sys/arm/mv/kirkwood/files.sheevaplug (from r196536, head/sys/arm/mv/kirkwood/files.sheevaplug)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/mv/kirkwood/files.sheevaplug	Wed Sep 16 12:07:58 2009	(r197251, copy of r196536, head/sys/arm/mv/kirkwood/files.sheevaplug)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+include "arm/mv/kirkwood/files.kirkwood"
+arm/mv/kirkwood/sheevaplug.c	standard

Copied: stable/8/sys/arm/mv/kirkwood/sheevaplug.c (from r196536, head/sys/arm/mv/kirkwood/sheevaplug.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/mv/kirkwood/sheevaplug.c	Wed Sep 16 12:07:58 2009	(r197251, copy of r196536, head/sys/arm/mv/kirkwood/sheevaplug.c)
@@ -0,0 +1,152 @@
+/*-
+ * Copyright (C) 2008 MARVELL INTERNATIONAL LTD.
+ * Copyright (C) 2009 Semihalf
+ * 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.
+ * 3. Neither the name of MARVELL nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY 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 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
+#include <machine/bus.h>
+#include <machine/pte.h>
+#include <machine/pmap.h>
+#include <machine/vmparam.h>
+
+#include <arm/mv/mvreg.h>
+#include <arm/mv/mvvar.h>
+#include <arm/mv/mvwin.h>
+
+/*
+ * Virtual address space layout:
+ * -----------------------------
+ * 0x0000_0000 - 0x7FFF_FFFF	: User Process (2 GB)
+ * 0x8000_0000 - 0xBBFF_FFFF	: Unused (960 MB)
+ * 0xBC00_0000 - 0xBDFF_FFFF	: Device Bus: CS1 (32 MB)
+ * 0xBE00_0000 - 0xBECF_FFFF	: Unused (13 MB)
+ * 0xBED0_0000 - 0xBEDF_FFFF	: Device Bus: CS2 (1 MB)
+ * 0xBEE0_0000 - 0xBEEF_FFFF	: Device Bus: CS0 (1 MB)
+ * 0xBEF0_0000 - 0xBEFF_FFFF	: Device Bus: BOOT (1 MB)
+ * 0xBF00_0000 - 0xBFFF_FFFF	: Unused (16 MB)
+ * 0xC000_0000 - virtual_avail	: Kernel Reserved (text, data, page tables,
+ * 				: stack etc.)
+ * virtual-avail - 0xEFFF_FFFF	: KVA (virtual_avail is typically < 0xc0a0_0000)
+ * 0xF000_0000 - 0xF0FF_FFFF	: No-Cache allocation area (16 MB)
+ * 0xF100_0000 - 0xF10F_FFFF	: SoC Integrated devices registers range (1 MB)
+ * 0xF110_0000 - 0xF11F_FFFF	: CESA SRAM (1 MB)
+ * 0xF120_0000 - 0xFFFE_FFFF	: Unused (237 MB + 960 kB)
+ * 0xFFFF_0000 - 0xFFFF_0FFF	: 'High' vectors page (4 kB)
+ * 0xFFFF_1000 - 0xFFFF_1FFF	: ARM_TP_ADDRESS/RAS page (4 kB)
+ * 0xFFFF_2000 - 0xFFFF_FFFF	: Unused (56 kB)
+ */
+
+/* Static device mappings. */
+const struct pmap_devmap pmap_devmap[] = {
+	/*
+	 * Map the on-board devices VA == PA so that we can access them
+	 * with the MMU on or off.
+	 */
+	{ /* SoC integrated peripherals registers range */
+		MV_BASE,
+		MV_PHYS_BASE,
+		MV_SIZE,
+		VM_PROT_READ | VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	{ /* CESA SRAM */
+		MV_CESA_SRAM_BASE,
+		MV_CESA_SRAM_PHYS_BASE,
+		MV_CESA_SRAM_SIZE,
+		VM_PROT_READ | VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	{ 0, 0, 0, 0, 0, }
+};
+
+const struct gpio_config mv_gpio_config[] = {
+	{ -1, -1, -1 }
+};
+
+void
+platform_mpp_init(void)
+{
+
+	/*
+	 * MPP configuration for Sheeva Plug
+	 *
+	 * MPP[0]:  NF_IO[2]
+	 * MPP[1]:  NF_IO[3]
+	 * MPP[2]:  NF_IO[4]
+	 * MPP[3]:  NF_IO[5]
+	 * MPP[4]:  NF_IO[6]
+	 * MPP[5]:  NF_IO[7]
+	 * MPP[6]:  SYSRST_OUTn
+	 * MPP[8]:  UA0_RTS
+	 * MPP[9]:  UA0_CTS
+	 * MPP[10]: UA0_TXD
+	 * MPP[11]: UA0_RXD
+	 * MPP[12]: SD_CLK
+	 * MPP[13]: SD_CMD
+	 * MPP[14]: SD_D[0]
+	 * MPP[15]: SD_D[1]
+	 * MPP[16]: SD_D[2]
+	 * MPP[17]: SD_D[3]
+	 * MPP[18]: NF_IO[0]
+	 * MPP[19]: NF_IO[1]
+	 * MPP[29]: TSMP[9]
+	 *
+	 * Others:  GPIO
+	 */
+
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL0, 0x01111111);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL1, 0x11113322);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL2, 0x00001111);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL3, 0x00100000);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL4, 0x00000000);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL5, 0x00000000);
+	bus_space_write_4(obio_tag, MV_MPP_BASE, MPP_CONTROL6, 0x00000000);
+}
+
+static void
+platform_identify(void *dummy)
+{
+
+	soc_identify();
+
+	/*
+	 * XXX Board identification e.g. read out from FPGA or similar should
+	 * go here
+	 */
+}
+SYSINIT(platform_identify, SI_SUB_CPU, SI_ORDER_SECOND, platform_identify, NULL);

Modified: stable/8/sys/arm/mv/kirkwood/std.db88f6xxx
==============================================================================
--- stable/8/sys/arm/mv/kirkwood/std.db88f6xxx	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/kirkwood/std.db88f6xxx	Wed Sep 16 12:07:58 2009	(r197251)
@@ -1,13 +1,8 @@
 # $FreeBSD$
 
 include	"../mv/std.mv"
+include "../mv/kirkwood/std.kirkwood"
 files	"../mv/kirkwood/files.db88f6xxx"
 
-makeoptions	KERNPHYSADDR=0x00900000
-makeoptions	KERNVIRTADDR=0xc0900000
 
-options		KERNPHYSADDR=0x00900000
-options		KERNVIRTADDR=0xc0900000
-options		PHYSADDR=0x00000000
 options		PHYSMEM_SIZE=0x20000000
-options		STARTUP_PAGETABLE_ADDR=0x00100000

Copied: stable/8/sys/arm/mv/kirkwood/std.kirkwood (from r196533, head/sys/arm/mv/kirkwood/std.kirkwood)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/mv/kirkwood/std.kirkwood	Wed Sep 16 12:07:58 2009	(r197251, copy of r196533, head/sys/arm/mv/kirkwood/std.kirkwood)
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+# kernel gets loaded at 0x00900000 by the loader, but runs at virtual address
+# 0xc0900000.  RAM starts at 0.  We put the pagetable at a reasonable place
+# in memory, but may need to bounce it higher if there's a problem with this.
+# We could paper over this by loading the kernel at 0xc0000000 virtual, but
+# that leads to other complications, so we'll just reclaim the lower region of
+# ram after we're loaded.  Put the page tables for startup at 1MB.
+makeoptions	KERNPHYSADDR=0x00900000
+makeoptions	KERNVIRTADDR=0xc0900000
+
+options		KERNPHYSADDR=0x00900000
+options		KERNVIRTADDR=0xc0900000
+options		PHYSADDR=0x00000000
+options		STARTUP_PAGETABLE_ADDR=0x00100000

Copied: stable/8/sys/arm/mv/kirkwood/std.sheevaplug (from r196536, head/sys/arm/mv/kirkwood/std.sheevaplug)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/arm/mv/kirkwood/std.sheevaplug	Wed Sep 16 12:07:58 2009	(r197251, copy of r196536, head/sys/arm/mv/kirkwood/std.sheevaplug)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+include	"../mv/std.mv"
+include "../mv/kirkwood/std.kirkwood"
+files	"../mv/kirkwood/files.sheevaplug"
+
+options		PHYSMEM_SIZE=0x20000000
+options		MII_ADDR_BASE=0

Modified: stable/8/sys/arm/mv/mv_machdep.c
==============================================================================
--- stable/8/sys/arm/mv/mv_machdep.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/mv_machdep.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -86,6 +86,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/bootinfo.h>
 
 #include <arm/mv/mvvar.h>	/* XXX eventually this should be eliminated */
+#include <arm/mv/mvwin.h>
 
 #ifdef  DEBUG
 #define debugf(fmt, args...) printf(fmt, ##args)
@@ -133,7 +134,9 @@ struct pcpu *pcpup = &__pcpu;
 vm_paddr_t phys_avail[10];
 vm_paddr_t dump_avail[4];
 vm_offset_t physical_pages;
+vm_offset_t pmap_bootstrap_lastaddr;
 
+const struct pmap_devmap *pmap_devmap_bootstrap_table;
 struct pv_addr systempage;
 struct pv_addr msgbufpv;
 struct pv_addr irqstack;
@@ -423,8 +426,8 @@ initarm(void *mdp, void *unused __unused
 		while (1);
 
 	/* Platform-specific initialisation */
-	if (platform_pmap_init() != 0)
-		return (NULL);
+	pmap_bootstrap_lastaddr = MV_BASE - ARM_NOCACHE_KVA_SIZE;
+	pmap_devmap_bootstrap_table = &pmap_devmap[0];
 
 	pcpu_init(pcpup, 0, sizeof(struct pcpu));
 	PCPU_SET(curthread, &thread0);

Modified: stable/8/sys/arm/mv/mvreg.h
==============================================================================
--- stable/8/sys/arm/mv/mvreg.h	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/mvreg.h	Wed Sep 16 12:07:58 2009	(r197251)
@@ -218,6 +218,7 @@
  */
 #define CPU_PM_CTRL		0x1C
 #define CPU_PM_CTRL_NONE	0
+#define CPU_PM_CTRL_ALL		~0x0
 
 #if defined(SOC_MV_KIRKWOOD)
 #define CPU_PM_CTRL_GE0		(1 << 0)
@@ -234,8 +235,11 @@
 #define CPU_PM_CTRL_SATA1	(1 << 15)
 #define CPU_PM_CTRL_XOR1	(1 << 16)
 #define CPU_PM_CTRL_CRYPTO	(1 << 17)
-#define CPU_PM_CTRL_GE1		(1 << 18)
-#define CPU_PM_CTRL_TDM		(1 << 19)
+#define CPU_PM_CTRL_GE1		(1 << 19)
+#define CPU_PM_CTRL_TDM		(1 << 20)
+#define CPU_PM_CTRL_XOR		(CPU_PM_CTRL_XOR0 | CPU_PM_CTRL_XOR1)
+#define CPU_PM_CTRL_USB(u)	(CPU_PM_CTRL_USB0)
+#define CPU_PM_CTRL_SATA	(CPU_PM_CTRL_SATA0 | CPU_PM_CTRL_SATA1)
 #elif defined(SOC_MV_DISCOVERY)
 #define CPU_PM_CTRL_GE0		(1 << 1)
 #define CPU_PM_CTRL_GE1		(1 << 2)
@@ -258,6 +262,14 @@
 #define CPU_PM_CTRL_XOR		(1 << 21)
 #define CPU_PM_CTRL_CRYPTO	(1 << 22)
 #define CPU_PM_CTRL_DEVICE	(1 << 23)
+#define CPU_PM_CTRL_USB(u)	(1 << (17 + (u)))
+#define CPU_PM_CTRL_SATA	(CPU_PM_CTRL_SATA0 | CPU_PM_CTRL_SATA1)
+#else
+#define CPU_PM_CTRL_CRYPTO	(CPU_PM_CTRL_NONE)
+#define CPU_PM_CTRL_IDMA	(CPU_PM_CTRL_NONE)
+#define CPU_PM_CTRL_XOR		(CPU_PM_CTRL_NONE)
+#define CPU_PM_CTRL_SATA	(CPU_PM_CTRL_NONE)
+#define CPU_PM_CTRL_USB(u)	(CPU_PM_CTRL_NONE)
 #endif
 
 /*

Modified: stable/8/sys/arm/mv/mvvar.h
==============================================================================
--- stable/8/sys/arm/mv/mvvar.h	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/mvvar.h	Wed Sep 16 12:07:58 2009	(r197251)
@@ -41,6 +41,10 @@
 #define _MVVAR_H_
 
 #include <sys/rman.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <machine/pmap.h>
+#include <machine/vm.h>
 
 #define	MV_TYPE_PCI		0
 #define	MV_TYPE_PCIE		1
@@ -104,6 +108,7 @@ struct decode_win {
 	int		remap;
 };
 
+extern const struct pmap_devmap pmap_devmap[];
 extern const struct obio_pci mv_pci_info[];
 extern const struct gpio_config mv_gpio_config[];
 extern bus_space_tag_t obio_tag;
@@ -124,13 +129,13 @@ int mv_gpio_configure(uint32_t pin, uint
 void mv_gpio_out(uint32_t pin, uint8_t val, uint8_t enable);
 uint8_t mv_gpio_in(uint32_t pin);
 
-int platform_pmap_init(void);
 void platform_mpp_init(void);
 int soc_decode_win(void);
 void soc_id(uint32_t *dev, uint32_t *rev);
 void soc_identify(void);
 void soc_dump_decode_win(void);
 uint32_t soc_power_ctrl_get(uint32_t mask);
+void soc_power_ctrl_set(uint32_t mask);
 
 int decode_win_cpu_set(int target, int attr, vm_paddr_t base, uint32_t size,
     int remap);

Modified: stable/8/sys/arm/mv/orion/db88f5xxx.c
==============================================================================
--- stable/8/sys/arm/mv/orion/db88f5xxx.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/arm/mv/orion/db88f5xxx.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -70,12 +70,10 @@ __FBSDID("$FreeBSD$");
  * 0xffff_2000 - 0xffff_ffff	: unused (~55KB)
  */
 
-const struct pmap_devmap *pmap_devmap_bootstrap_table;
-vm_offset_t pmap_bootstrap_lastaddr;
 int platform_pci_get_irq(u_int bus, u_int slot, u_int func, u_int pin);
 
 /* Static device mappings. */
-static const struct pmap_devmap pmap_devmap[] = {
+const struct pmap_devmap pmap_devmap[] = {
 	/*
 	 * Map the on-board devices VA == PA so that we can access them
 	 * with the MMU on or off.
@@ -184,16 +182,6 @@ const struct gpio_config mv_gpio_config[
 };
 #endif
 
-int
-platform_pmap_init(void)
-{
-
-	pmap_bootstrap_lastaddr = MV_BASE - ARM_NOCACHE_KVA_SIZE;
-	pmap_devmap_bootstrap_table = &pmap_devmap[0];
-
-	return (0);
-}
-
 void
 platform_mpp_init(void)
 {

Modified: stable/8/sys/conf/options.arm
==============================================================================
--- stable/8/sys/conf/options.arm	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/conf/options.arm	Wed Sep 16 12:07:58 2009	(r197251)
@@ -24,6 +24,7 @@ KERNVIRTADDR		opt_global.h
 LOADERRAMADDR		opt_global.h
 PHYSADDR		opt_global.h
 PHYSMEM_SIZE		opt_global.h
+MII_ADDR_BASE		opt_global.h
 SKYEYE_WORKAROUNDS	opt_global.h
 SOC_MV_DISCOVERY	opt_global.h
 SOC_MV_KIRKWOOD		opt_global.h

Modified: stable/8/sys/dev/mge/if_mge.c
==============================================================================
--- stable/8/sys/dev/mge/if_mge.c	Wed Sep 16 11:56:44 2009	(r197250)
+++ stable/8/sys/dev/mge/if_mge.c	Wed Sep 16 12:07:58 2009	(r197251)
@@ -69,7 +69,9 @@ __FBSDID("$FreeBSD$");
 #include <dev/mii/mii.h>
 #include <dev/mii/miivar.h>
 
-#define	MV_PHY_ADDR_BASE	8
+#ifndef MII_ADDR_BASE
+#define MII_ADDR_BASE 8
+#endif
 
 #include <dev/mge/if_mgevar.h>
 #include <arm/mv/mvreg.h>
@@ -1264,14 +1266,15 @@ mge_miibus_readreg(device_t dev, int phy
 
 	/*
 	 * We assume static PHY address <=> device unit mapping:
-	 * PHY Address = MV_PHY_ADDR_BASE + devce unit.
+	 * PHY Address = MII_ADDR_BASE + devce unit.
 	 * This is true for most Marvell boards.
 	 * 
 	 * Code below grants proper PHY detection on each device
 	 * unit.
 	 */
 
-	if ((MV_PHY_ADDR_BASE + device_get_unit(dev)) != phy)
+	
+	if ((MII_ADDR_BASE + device_get_unit(dev)) != phy)
 		return (0);
 
 	MGE_WRITE(sc_mge0, MGE_REG_SMI, 0x1fffffff &
@@ -1292,7 +1295,7 @@ mge_miibus_writereg(device_t dev, int ph
 {
 	uint32_t retries;
 
-	if ((MV_PHY_ADDR_BASE + device_get_unit(dev)) != phy)
+	if ((MII_ADDR_BASE + device_get_unit(dev)) != phy)
 		return (0);
 
 	MGE_WRITE(sc_mge0, MGE_REG_SMI, 0x1fffffff &


More information about the svn-src-all mailing list