public inbox for ecos-patches@sourceware.org
 help / color / mirror / Atom feed
* Ethernet support for LPC2468 OEM board
@ 2008-09-11  9:01 uwe.kindler
  0 siblings, 0 replies; only message in thread
From: uwe.kindler @ 2008-09-11  9:01 UTC (permalink / raw)
  To: ecos-patches

[-- Attachment #1: Type: text/plain, Size: 415 bytes --]

Hello,

the following patch adds ethernet support for the LPC2468 OEM board from Embedded Artists. The patch also adds support for Mircrel KSZ8001 phy that is mounted on the 16 bit version of the OEM board.

Regards,

Dipl. Inf. (FH)
Uwe Kindler
Software Engineering

--

cetoni GmbH
Am Wiesenring 6
D-07554 Korbussen

Tel.: +49 (0) 36602 338 28
Fax:  +49 (0) 36602 338 11
uwe.kindler@cetoni.de
http://www.cetoni.de

[-- Attachment #2: ksz8001_phy.patch --]
[-- Type: application/octet-stream, Size: 8472 bytes --]

diff -ruN ecos_web_cvs/ecos/packages/devs/eth/phy/current/ChangeLog ecos/ecos/packages/devs/eth/phy/current/ChangeLog
--- ecos_web_cvs/ecos/packages/devs/eth/phy/current/ChangeLog	2007-11-20 22:21:49.000000000 +0100
+++ ecos/ecos/packages/devs/eth/phy/current/ChangeLog	2008-08-05 21:41:19.000000000 +0200
@@ -1,3 +1,8 @@
+2008-08-05  Uwe Kindler <uwe_kindler@web.de>
+
+	* cdl/phy_eth_drivers.cdl: 
+	* src/KSZ8001.c: Add support for Micrel KSZ8001 PHY
+	
 2007-04-06  Uwe Kindler <uwe_kindler@web.de>
 
 	* cdl/phy_eth_drivers.cdl: 
diff -ruN ecos_web_cvs/ecos/packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl ecos/ecos/packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl
--- ecos_web_cvs/ecos/packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl	2007-11-20 22:21:49.000000000 +0100
+++ ecos/ecos/packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl	2008-08-05 21:38:46.000000000 +0200
@@ -149,5 +149,14 @@
         description "
           Include support for the Micrel KS8721 PHY"
     }
+    
+    cdl_option CYGHWR_DEVS_ETH_PHY_KSZ8001 {
+        display       "Micrel KSZ8001"
+        flavor        bool
+        default_value 0
+        compile       -library=libextras.a KSZ8001.c
+        description "
+          Include support for the Micrel KSZ8001 PHY"
+    }
 
 }
diff -ruN ecos_web_cvs/ecos/packages/devs/eth/phy/current/src/KSZ8001.c ecos/ecos/packages/devs/eth/phy/current/src/KSZ8001.c
--- ecos_web_cvs/ecos/packages/devs/eth/phy/current/src/KSZ8001.c	1970-01-01 01:00:00.000000000 +0100
+++ ecos/ecos/packages/devs/eth/phy/current/src/KSZ8001.c	2008-09-11 09:28:53.000000000 +0200
@@ -0,0 +1,161 @@
+//==========================================================================
+//
+//      dev/KSZ8001.c
+//
+//      Ethernet transceiver (PHY) support for Micrel KSZ8001
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2008 Free Software Foundation, Inc.
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+// at http://sources.redhat.com/ecos/ecos-license/
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    Uwe Kindler <uwe_kindler@web.de>
+// Contributors:
+// Date:         2008-08-05
+// Purpose:
+// Description:  Support for ethernet PHY Micrel KSZ8001
+//
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+
+//==========================================================================
+//                                INCLUDES
+//==========================================================================
+#include <pkgconf/system.h>
+#include <pkgconf/devs_eth_phy.h>
+
+#include <cyg/infra/cyg_type.h>
+
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/drv_api.h>
+#include <cyg/hal/hal_if.h>
+#include <cyg/hal/hal_tables.h>
+
+#include <cyg/io/eth_phy.h>
+#include <cyg/io/eth_phy_dev.h>
+
+
+//==========================================================================
+//                                DEFINES
+//==========================================================================
+#define PHY_100BASE_CTRL                0x1f  // 100BASE-TX PHY Control Register
+#define PHY_100BASE_CTRL_OP_MODE_MASK   (0x07 << 2)
+#define PHY_100BASE_CTRL_AN_MODE        (0x00 << 2)
+#define PHY_100BASE_CTRL_10T_HDX        (0x01 << 2)
+#define PHY_100BASE_CTRL_100T_HDX       (0x02 << 2)
+#define PHY_100BASE_CTRL_DEFAULT        (0x03 << 2)
+#define PHY_100BASE_CTRL_10T_FDX        (0x05 << 2)
+#define PHY_100BASE_CTRL_100T_FDX       (0x06 << 2)
+
+
+//==========================================================================
+// Query the 100BASE-TX PHY Control Register and return a status bitmap
+// indicating the state of the physical connection
+//==========================================================================
+static bool ksz8001_stat(eth_phy_access_t *f, int *state)
+{
+    unsigned short phy_state;
+    unsigned short phy_100ctrl_reg;
+    int tries;
+    int ms;
+
+    // Read negotiated state
+    if (_eth_phy_read(f, PHY_BMSR, f->phy_addr, &phy_state))
+    {
+        if ((phy_state & PHY_BMSR_AUTO_NEG) == 0)
+        {
+            eth_phy_printf("... waiting for auto-negotiation");
+            for (tries = 0;  tries < CYGINT_DEVS_ETH_PHY_AUTO_NEGOTIATION_TIME;  tries++)
+            {
+                if (_eth_phy_read(f, PHY_BMSR, f->phy_addr, &phy_state))
+                {
+                    if ((phy_state & PHY_BMSR_AUTO_NEG) != 0)
+                    {
+                        break;
+                    }
+                }
+
+                //
+                // Wait for 1 second
+                //
+                for (ms = 0; ms < 1000; ++ms)
+                {
+                    CYGACC_CALL_IF_DELAY_US(1000);   // 1 ms
+                }
+                eth_phy_printf(".");
+            }
+            eth_phy_printf("\n");
+        }
+        if ((phy_state & PHY_BMSR_AUTO_NEG) != 0)
+        {
+            *state = 0;
+            if ((phy_state & PHY_BMSR_LINK) != 0)
+            {
+            	*state |= ETH_PHY_STAT_LINK;
+            }
+
+        	_eth_phy_read(f, PHY_100BASE_CTRL, f->phy_addr, &phy_100ctrl_reg);
+            phy_100ctrl_reg &= PHY_100BASE_CTRL_OP_MODE_MASK;
+            switch (phy_100ctrl_reg)
+            {
+                case PHY_100BASE_CTRL_10T_HDX:
+                	 break;
+
+                case PHY_100BASE_CTRL_100T_HDX:
+                	*state |= ETH_PHY_STAT_100MB;
+                     break;
+
+                case PHY_100BASE_CTRL_10T_FDX:
+                	*state |= ETH_PHY_STAT_FDX;
+                     break;
+
+                case PHY_100BASE_CTRL_100T_FDX:
+                	*state |= ETH_PHY_STAT_100MB | ETH_PHY_STAT_FDX;
+                     break;
+
+                default:
+                	 // force to set default 100 Full Duplex
+                	*state |= ETH_PHY_STAT_100MB | ETH_PHY_STAT_FDX;
+            } // switch (phy_100ctrl_reg)
+
+            return true;
+        }
+    }
+    return false;
+}
+
+_eth_phy_dev("Micrel KSZ8001", 0x00221613, ksz8001_stat)
diff -ruN ecos_web_cvs/ecos/packages/devs/eth/phy/current/src/eth_phy.c ecos/ecos/packages/devs/eth/phy/current/src/eth_phy.c
--- ecos_web_cvs/ecos/packages/devs/eth/phy/current/src/eth_phy.c	2007-11-20 22:21:49.000000000 +0100
+++ ecos/ecos/packages/devs/eth/phy/current/src/eth_phy.c	2008-08-18 23:27:56.000000000 +0200
@@ -169,7 +169,7 @@
                 f->phy_addr = addr;
                 for (dev = __ETH_PHY_TAB__; dev != &__ETH_PHY_TAB_END__;  dev++) {
                     if (dev->id == id) {
-                        eth_phy_printf("PHY: %s\n", dev->name);
+                        eth_phy_printf("PHY: %s at addr %x\n", dev->name, f->phy_addr);
                         f->dev = dev;
                         return true;
                     }

[-- Attachment #3: lpc2xxx_eth.patch --]
[-- Type: application/octet-stream, Size: 980 bytes --]

--- ecos_web_cvs/ecos/packages/ecos.db	2008-08-21 22:40:36.000000000 +0200
+++ ecos/ecos/packages/ecos.db	2008-09-11 10:33:24.000000000 +0200
@@ -4416,6 +4416,14 @@
         description     "Ethernet driver for the AT91 family of chips"
 }
 
+package CYGPKG_DEVS_ETH_ARM_LPC2XXX {
+        alias           { "LPC2xxx Ethernet driver" lpc2xxx_eth_driver }
+        directory       devs/eth/arm/lpc2xxx
+        script          lpc2xxx_eth.cdl
+        hardware
+        description     "Ethernet driver for the LPC2xxx family of chips"
+}
+
 
 # --------------------------------------------------------------------------
 
@@ -4799,6 +4807,8 @@
                    CYGPKG_DEVS_CAN_LPC2XXX
                    CYGPKG_DEVS_FLASH_EA2468
                    CYGPKG_DEVS_FLASH_SST_39VFXXX
+                   CYGPKG_DEVS_ETH_PHY
+                   CYGPKG_DEVS_ETH_ARM_LPC2XXX
         }
         description "
             The Embedded Artists LPC2468 HAL package provides the support

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-09-11  9:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-11  9:01 Ethernet support for LPC2468 OEM board uwe.kindler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).