From owner-freebsd-arm@FreeBSD.ORG Thu Jan 29 16:23:39 2015 Return-Path: Delivered-To: freebsd-arm@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id DAC0A3B9 for ; Thu, 29 Jan 2015 16:23:39 +0000 (UTC) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C239E22E for ; Thu, 29 Jan 2015 16:23:39 +0000 (UTC) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.14.9/8.14.9) with ESMTP id t0TGNdms080693 for ; Thu, 29 Jan 2015 16:23:39 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-arm@FreeBSD.org Subject: [Bug 197177] Wrong registers used for linkup status and tx fifo empty status in mge driver on ramada 370 and armada xp socs Date: Thu, 29 Jan 2015 16:23:39 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: arm X-Bugzilla-Version: 11.0-CURRENT X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Only Me X-Bugzilla-Who: callthethunder@gmail.com X-Bugzilla-Status: New X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: freebsd-arm@FreeBSD.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 Jan 2015 16:23:39 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=197177 Bug ID: 197177 Summary: Wrong registers used for linkup status and tx fifo empty status in mge driver on ramada 370 and armada xp socs Product: Base System Version: 11.0-CURRENT Hardware: arm OS: Any Status: New Severity: Affects Only Me Priority: --- Component: arm Assignee: freebsd-arm@FreeBSD.org Reporter: callthethunder@gmail.com Registers used in mge driver are valid for marvell kirkwood family soc, but they are not valid for armada xp and armada 370 socs. As you can see in marvell documentation - registers are changed on armada 370 and armada xp. kirkwood: http://www.marvell.com/embedded-processors/kirkwood/assets/FS_88F6180_9x_6281_OpenSource.pdf armada xp (same for armada 370): http://www.marvell.com/embedded-processors/armada-xp/assets/ARMADA-XP-Functional-SpecDatasheet.pdf So mge driver doesn't work in current distribution on armada xp and armada 370 SoCs. So here is my diff. diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c index c35dd04..e2305b8 100644 --- a/sys/dev/mge/if_mge.c +++ b/sys/dev/mge/if_mge.c @@ -1654,11 +1654,11 @@ mge_stop(struct mge_softc *sc) } /* Wait for end of transmission */ - count = 0x100000; - while (count--) { - reg_val = MGE_READ(sc, MGE_PORT_STATUS); - if ( !(reg_val & MGE_STATUS_TX_IN_PROG) && - (reg_val & MGE_STATUS_TX_FIFO_EMPTY)) + count = 0x100001; + while (--count) { + reg_val = MGE_READ(sc, MGE_ETH_PORT_STATUS); + if ( !(reg_val & MGE_ETH_STATUS_TX_IN_PROG) && + (reg_val & MGE_ETH_STATUS_TX_FIFO_EMPTY)) break; DELAY(100); } diff --git a/sys/dev/mge/if_mgevar.h b/sys/dev/mge/if_mgevar.h index 0ab28bf..7cfd20e 100644 --- a/sys/dev/mge/if_mgevar.h +++ b/sys/dev/mge/if_mgevar.h @@ -228,14 +228,21 @@ struct mge_softc { #define PORT_SERIAL_GMII_SPEED_1000 (1 << 23) #define PORT_SERIAL_MII_SPEED_100 (1 << 24) -#define MGE_PORT_STATUS 0x444 -#define MGE_STATUS_LINKUP (1 << 1) -#define MGE_STATUS_FULL_DUPLEX (1 << 2) -#define MGE_STATUS_FLOW_CONTROL (1 << 3) -#define MGE_STATUS_1000MB (1 << 4) -#define MGE_STATUS_100MB (1 << 5) -#define MGE_STATUS_TX_IN_PROG (1 << 7) -#define MGE_STATUS_TX_FIFO_EMPTY (1 << 10) +#define MGE_ETH_PORT_STATUS 0x444 +#define MGE_ETH_STATUS_RX_FIFO_EMPTY (1 << 16) +#define MGE_ETH_STATUS_TX_IN_PROG (1 << 0) +#define MGE_ETH_STATUS_TX_FIFO_EMPTY (1 << 8) + +#define MGE_PORT_STATUS 0xc10 +#define MGE_STATUS_LINKUP (1 << 0) +#define MGE_STATUS_GMII_SPEED (1 << 1) /* 0 = 10/100 Mbps: Port speed is 10 Mbps or 100 Mbps according to . 1 = 1000 Mbps: Port speed is 1000 Mbps. */ +#define MGE_STATUS_MII_SPEED (1 << 2) /* 0 = 10: Port speed is 10 Mbps. 1 = 100: Port speed is 100 Mbps. */ +#define MGE_STATUS_FULL_DUPLEX (1 << 3) /* 0 = half-duplex: Port is in half-duplex mode. 1 = full-duplex: Port is in full-duplex mode. */ +#define MGE_STATUS_RX_FLOW_CONTROL (1 << 4) +#define MGE_STATUS_TX_FLOW_CONTROL (1 << 5) +#define MGE_STATUS_RX_PAUSE (1 << 6) +#define MGE_STATUS_TX_PAUSE (1 << 7) +#define MGE_STATUS_AUTONEG_DONE (1 << 11) #define MGE_TX_QUEUE_CMD 0x448 #define MGE_ENABLE_TXQ (1 << 0) Maybe we need to check soc id in header file and alter definition for registers? Can you add my changes to make possible usage of onchip ethernet controller on armada xp soc? -- You are receiving this mail because: You are the assignee for the bug.