From owner-freebsd-arm@FreeBSD.ORG Wed Oct 20 21:19:50 2010 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 085941065679 for ; Wed, 20 Oct 2010 21:19:50 +0000 (UTC) (envelope-from freebsd-arm@dino.sk) Received: from loki.netlab.sk (loki.netlab.sk [84.245.65.11]) by mx1.freebsd.org (Postfix) with ESMTP id 9B7758FC14 for ; Wed, 20 Oct 2010 21:19:49 +0000 (UTC) Received: from door.dino.sk (fw1.dino.sk [84.245.95.252]) (AUTH: PLAIN milan, TLS: TLSv1/SSLv3,256bits,AES256-SHA) by loki.netlab.sk with esmtp; Wed, 20 Oct 2010 23:11:13 +0200 id 00033C07.4CBF5AF1.00010098 From: Milan Obuch To: freebsd-arm@freebsd.org Date: Wed, 20 Oct 2010 23:09:37 +0200 User-Agent: KMail/1.13.5 (FreeBSD/8.1-STABLE; KDE/4.5.2; i386; ; ) MIME-Version: 1.0 X-Length: 1568 X-UID: 15 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Tq1vMElMvCDDZQ4" Message-Id: <201010202309.40148.freebsd-arm@dino.sk> Subject: Guruplug Server Plus working to some extent... X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Oct 2010 21:19:50 -0000 --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 metric 0 mtu 1500 options=8000b ether 00:00:00:00:00:00 media: Ethernet autoselect (100baseTX ) 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--