Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Oct 2010 23:09:37 +0200
From:      Milan Obuch <freebsd-arm@dino.sk>
To:        freebsd-arm@freebsd.org
Subject:   Guruplug Server Plus working to some extent...
Message-ID:  <201010202309.40148.freebsd-arm@dino.sk>

next in thread | raw e-mail | index | archive | help
--Boundary-00=_Tq1vMElMvCDDZQ4
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hi,

after some trials I did manage to boot FreeBSD on Guruplug Server Plus (see 
http://www.globalscaletechnologies.com/p-32-guruplug-server-plus.aspx for some 
description). I based my work on Sheevaplug config's. What I changed (and 
renamed) is attached.

My load address is 800000 instead of 900000 in Sheevaplug's configs. This is 
just a small lazyness issue... I can load kernel via TFTP typing shorter 
command  'tftpboot kernel.bin', otherwise I must type address where kernel 
should be loaded to...

For USB to work well, patch [1] published on this mailing list by Johny 
Mattsson at September 18 was necessary as well, but nothing else in sources 
needs to be changed. 

There is micro SD device, looks like USB umass device and works well. Nothing 
special needed here. By default there are two devices created, da0 and da1, 
the latter being actuall micro SD drive. What the first one is, I do not 
know. As long as micro SD works, this one does not bothers me.

I added SATA definition to .dts file and controller and both channels gets 
detected. No test made yet with actual disk, so I can't say if it really 
works.

Second ethernet interface could be created uncommenting its definition in .dts 
file. With this configuration active, interface gets detected and created, 
but still something is wrong. Maybe my phy definition should be changed, but 
I do not have much knowledge in this part of system. I did not found much 
information detailing creation of .dts files, either.

Actually it looks like receiving packets works but not sending. Interface 
status changes on plugging/unplugging cable, tcpdump shows packets coming in 
and replies coming out on guruplug, but no reply is seen on wire. If arp 
packet is coming in, it is seen in arp table on guruplug device. On the other 
side, it is not.

Also, mge1 does not have ethernet link address (MAC) initialised, they are 
all-zero:

# ifconfig mge1
mge1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        ether 00:00:00:00:00:00
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active

When devd is active on startup, system hangs when mge1 is detected. No 
difference whether cable is plugged or not.

If someone has any idea or patches to test, I am all ears. What I already 
found, does not aplly well to current status, but having unusable interface 
does not make me happy :(

There are other devices I did not test yet, but it really works well as I can 
tell (exception is the second ethernet) so really big, big thanks to all who 
took part in original Sheevaplug and OpenRD ports development.

Regards,
Milan

[1] http://lists.freebsd.org/pipermail/freebsd-arm/2010-September/002582.html

--Boundary-00=_Tq1vMElMvCDDZQ4
Content-Type: text/plain;
  charset="us-ascii";
  name="GURUPLUGPLUS"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="GURUPLUGPLUS"

#
# Custom kernel for Marvell GuruPlug server plus devices.
#
# $FreeBSD$
#

ident		GURUPLUGPLUS
include		"../mv/kirkwood/std.guruplugplus"

options		SOC_MV_KIRKWOOD
makeoptions	MODULES_OVERRIDE=""

makeoptions	WERROR="-Werror"

options		SCHED_4BSD			# 4BSD scheduler
options		INET				# InterNETworking
options		FFS				# Berkeley Fast Filesystem

options		GEOM_LABEL
options		GEOM_PART_GPT
options		SOFTUPDATES			# Enable FF Soft updates support
options		MSDOSFS				# Enable MSDOS Filesystems
options		PROCFS				# Process Filesystem
options		PSEUDOFS			# Pseudo-filesystem support

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
options 	USB_DEBUG			# enable debug msgs
device		usb
device		ehci
device		umass
device		scbus
device		da

device		ata
device		atadisk

# Flattened Device Tree
options		FDT
options		FDT_DTB_STATIC
makeoptions	FDT_DTS_FILE=guruplugplus.dts

# extra
options		SW_WATCHDOG

--Boundary-00=_Tq1vMElMvCDDZQ4
Content-Type: text/plain;
  charset="us-ascii";
  name="guruplugplus.dts"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="guruplugplus.dts"

/*
 * Copyright (c) 2010 The FreeBSD Foundation
 * All rights reserved.
 *
 * This software was developed by Semihalf under sponsorship from
 * the FreeBSD Foundation.
 *
 * 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.
 *
 * Marvell SheevaPlug Device Tree Source.
 *
 * $FreeBSD: src/sys/boot/fdt/dts/sheevaplug.dts,v 1.1 2010/05/26 09:50:09 raj Exp $
 */

/dts-v1/;

/ {
	model = "mrvl,GuruPlugPlus";
	compatible = "GuruPlugPlus";
	#address-cells = <1>;
	#size-cells = <1>;

	aliases {
		ethernet0 = &enet0;
/*
		ethernet1 = &enet1;
*/
		mpp = &MPP;
		serial0 = &serial0;
		serial1 = &serial1;
		soc = &SOC;
		sram = &SRAM;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "ARM,88FR131";
			reg = <0x0>;
			d-cache-line-size = <32>;	// 32 bytes
			i-cache-line-size = <32>;	// 32 bytes
			d-cache-size = <0x4000>;	// L1, 16K
			i-cache-size = <0x4000>;	// L1, 16K
			timebase-frequency = <0>;
			bus-frequency = <0>;
			clock-frequency = <0>;
		};
	};

	memory {
		device_type = "memory";
		reg = <0x0 0x20000000>;		// 512M at 0x0
	};

	localbus@f1000000 {
		#address-cells = <2>;
		#size-cells = <1>;
		compatible = "mrvl,lbc";

		/* This reflects CPU decode windows setup. */
		ranges = <0x0 0x0f 0xf9300000 0x00100000
			  0x1 0x1e 0xfa000000 0x00100000
			  0x2 0x1d 0xfa100000 0x02000000
			  0x3 0x1b 0xfc100000 0x00000400>;

		nor@0,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "cfi-flash";
			reg = <0x0 0x0 0x00100000>;
			bank-width = <2>;
			device-width = <1>;
		};

		led@1,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "led";
			reg = <0x1 0x0 0x00100000>;
		};

		nor@2,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "cfi-flash";
			reg = <0x2 0x0 0x02000000>;
			bank-width = <2>;
			device-width = <1>;
		};

		nand@3,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			reg = <0x3 0x0 0x00100000>;
			bank-width = <2>;
			device-width = <1>;
		};
	};

	SOC: soc88f6281@f1000000 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "simple-bus";
		ranges = <0x0 0xf1000000 0x00100000>;
		bus-frequency = <0>;

		PIC: pic@20200 {
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <1>;
			reg = <0x20200 0x3c>;
			compatible = "mrvl,pic";
		};

		timer@20300 {
			compatible = "mrvl,timer";
			reg = <0x20300 0x30>;
			interrupts = <1>;
			interrupt-parent = <&PIC>;
			mrvl,has-wdt;
		};

		MPP: mpp@10000 {
			#pin-cells = <2>;
			compatible = "mrvl,mpp";
			reg = <0x10000 0x34>;
			pin-count = <50>;
			pin-map = <
				0  1		/* MPP[0]:  NF_IO[2] */
				1  1		/* MPP[1]:  NF_IO[3] */
				2  1		/* MPP[2]:  NF_IO[4] */
				3  1		/* MPP[3]:  NF_IO[5] */
				4  1		/* MPP[4]:  NF_IO[6] */
				5  1		/* MPP[5]:  NF_IO[7] */
				6  1		/* MPP[6]:  SYSRST_OUTn */
				8  2		/* MPP[8]:  UA0_RTS */
				9  2		/* MPP[9]:  UA0_CTS */
				10 3		/* MPP[10]: UA0_TXD */
				11 3		/* MPP[11]: UA0_RXD */
				12 1		/* MPP[12]: SD_CLK */
				13 1		/* MPP[13]: SD_CMD */
				14 1		/* MPP[14]: SD_D[0] */
				15 1		/* MPP[15]: SD_D[1] */
				16 1		/* MPP[16]: SD_D[2] */
				17 1		/* MPP[17]: SD_D[3] */
				18 1		/* MPP[18]: NF_IO[0] */
				19 1		/* MPP[19]: NF_IO[1] */
				29 1 >;		/* MPP[29]: TSMP[9] */
		};

		GPIO: gpio@10100 {
			#gpio-cells = <3>;
			compatible = "mrvl,gpio";
			reg = <0x10100 0x20>;
			gpio-controller;
			interrupts = <35 36 37 38 39 40 41>;
			interrupt-parent = <&PIC>;
		};

		rtc@10300 {
			compatible = "mrvl,rtc";
			reg = <0x10300 0x08>;
		};

		twsi@11000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "mrvl,twsi";
			reg = <0x11000 0x20>;
			interrupts = <43>;
			interrupt-parent = <&PIC>;
		};

		enet0: ethernet@72000 {
			#address-cells = <1>;
			#size-cells = <1>;
			model = "V2";
			compatible = "mrvl,ge";
			reg = <0x72000 0x2000>;
			ranges = <0x0 0x72000 0x2000>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <12 13 14 11 46>;
			interrupt-parent = <&PIC>;
			phy-handle = <&phy0>;

			mdio@0 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "mrvl,mdio";

				phy0: ethernet-phy@0 {
					reg = <0x0>;
				};
			};
		};

/*
		enet1: ethernet@76000 {
			#address-cells = <1>;
			#size-cells = <1>;
			model = "V2";
			compatible = "mrvl,ge";
			reg = <0x76000 0x2000>;
			ranges = <0x0 0x76000 0x2000>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <16 17 18 15 47>;
			interrupt-parent = <&PIC>;
			phy-handle = <&phy1>;

			mdio@1 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "mrvl,mdio";

				phy1: ethernet-phy@1 {
					reg = <0x1>;
				};
			};
		};
*/

		serial0: serial@12000 {
			compatible = "ns16550";
			reg = <0x12000 0x20>;
			reg-shift = <2>;
			clock-frequency = <0>;
			interrupts = <33>;
			interrupt-parent = <&PIC>;
		};

		serial1: serial@12100 {
			compatible = "ns16550";
			reg = <0x12100 0x20>;
			reg-shift = <2>;
			clock-frequency = <0>;
			interrupts = <34>;
			interrupt-parent = <&PIC>;
		};

		crypto@30000 {
			compatible = "mrvl,cesa";
			reg = <0x30000 0x10000>;
			interrupts = <22>;
			interrupt-parent = <&PIC>;
		};

		usb@50000 {
			compatible = "mrvl,usb-ehci", "usb-ehci";
			reg = <0x50000 0x1000>;
			interrupts = <48 19>;
			interrupt-parent = <&PIC>;
		};

		xor@60000 {
			compatible = "mrvl,xor";
			reg = <0x60000 0x1000>;
			interrupts = <5 6 7 8>;
			interrupt-parent = <&PIC>;
		};

		sata@80000 {
			compatible = "mrvl,sata";
			reg = <0x80000 0x6000>;
			interrupts = <21>;
			interrupt-parent = <&PIC>;
		};
	};

	SRAM: sram@fd000000 {
		compatible = "mrvl,cesa-sram";
		reg = <0xfd000000 0x00100000>;
	};

	chosen {
		stdin = "serial0";
		stdout = "serial0";
	};
};

--Boundary-00=_Tq1vMElMvCDDZQ4
Content-Type: text/plain;
  charset="us-ascii";
  name="std.guruplugplus"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="std.guruplugplus"

# $FreeBSD$

include	"../mv/std.mv"

#include "../mv/kirkwood/std.kirkwood"

# $FreeBSD: src/sys/arm/mv/kirkwood/std.kirkwood,v 1.1 2009/08/25 09:39:11 raj Exp $

# kernel gets loaded at 0x00800000 by the loader, but runs at virtual address
# 0xc0800000.  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=0x00800000
makeoptions	KERNVIRTADDR=0xc0800000

options		KERNPHYSADDR=0x00800000
options		KERNVIRTADDR=0xc0800000
options		PHYSADDR=0x00000000
options		STARTUP_PAGETABLE_ADDR=0x00100000

files	"../mv/kirkwood/files.sheevaplug"

--Boundary-00=_Tq1vMElMvCDDZQ4--



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