Module Name:    src
Committed By:   martin
Date:           Mon Sep  8 14:26:16 UTC 2014

Modified Files:
        src/sys/arch/arm/allwinner: awin_gige.c files.awin
        src/sys/conf: files

Log Message:
Config glue for the Designware GMAC core.
Switch allwinner specific awge driver over to use it.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/allwinner/awin_gige.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/allwinner/files.awin
cvs rdiff -u -r1.1102 -r1.1103 src/sys/conf/files

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/allwinner/awin_gige.c
diff -u src/sys/arch/arm/allwinner/awin_gige.c:1.4 src/sys/arch/arm/allwinner/awin_gige.c:1.5
--- src/sys/arch/arm/allwinner/awin_gige.c:1.4	Wed Feb 26 00:29:23 2014
+++ src/sys/arch/arm/allwinner/awin_gige.c	Mon Sep  8 14:26:16 2014
@@ -1,9 +1,9 @@
 /*-
- * Copyright (c) 2013 The NetBSD Foundation, Inc.
+ * Copyright (c) 2013, 2014 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Matt Thomas of 3am Software Foundry.
+ * by Matt Thomas of 3am Software Foundry and Martin Husemann.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_gige.c,v 1.4 2014/02/26 00:29:23 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_gige.c,v 1.5 2014/09/08 14:26:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -42,14 +42,21 @@ __KERNEL_RCSID(1, "$NetBSD: awin_gige.c,
 #include <arm/allwinner/awin_reg.h>
 #include <arm/allwinner/awin_var.h>
 
+#include <net/if.h>
+#include <net/if_ether.h>
+#include <net/if_media.h>
+
+#include <dev/mii/miivar.h>
+
+#include <dev/ic/dwc_gmac_var.h>
+
 static int awin_gige_match(device_t, cfdata_t, void *);
 static void awin_gige_attach(device_t, device_t, void *);
+static int awin_gige_intr(void*);
 
 struct awin_gige_softc {
-	device_t sc_dev;
-	bus_space_tag_t sc_bst;
-	bus_space_handle_t sc_bsh;
-	bus_dma_tag_t sc_dmat;
+	struct dwc_gmac_softc sc_core;
+	void *sc_ih;
 };
 
 static const struct awin_gpio_pinset awin_gige_gpio_pinset = {
@@ -85,16 +92,51 @@ awin_gige_attach(device_t parent, device
 	struct awin_gige_softc * const sc = device_private(self);
 	struct awinio_attach_args * const aio = aux;
 	const struct awin_locators * const loc = &aio->aio_loc;
+	prop_dictionary_t dict;
+	uint8_t enaddr[ETHER_ADDR_LEN], *ep = NULL;
 
-	sc->sc_dev = self;
+	sc->sc_core.sc_dev = self;
+	dict = device_properties(sc->sc_core.sc_dev);
 
 	awin_gpio_pinset_acquire(&awin_gige_gpio_pinset);
 
-	sc->sc_bst = aio->aio_core_bst;
-	sc->sc_dmat = aio->aio_dmat;
-	bus_space_subregion(sc->sc_bst, aio->aio_core_bsh,
-	    loc->loc_offset, loc->loc_size, &sc->sc_bsh);
+	sc->sc_core.sc_bst = aio->aio_core_bst;
+	sc->sc_core.sc_dmat = aio->aio_dmat;
+	bus_space_subregion(sc->sc_core.sc_bst, aio->aio_core_bsh,
+	    loc->loc_offset, loc->loc_size, &sc->sc_core.sc_bsh);
 
 	aprint_naive("\n");
 	aprint_normal(": Gigabit Ethernet Controller\n");
+	
+	prop_data_t ea = dict ? prop_dictionary_get(dict, "mac-address") : NULL;
+	if (ea != NULL) {
+		KASSERT(prop_object_type(ea) == PROP_TYPE_DATA);
+		KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN);
+		memcpy(enaddr, prop_data_data_nocopy(ea), ETHER_ADDR_LEN);
+		ep = enaddr;
+	}
+
+	/*
+	 * Interrupt handler
+	 */
+	sc->sc_ih = intr_establish(loc->loc_intr, IPL_VM, IST_LEVEL|IST_MPSAFE,
+	    awin_gige_intr, sc);
+	if (sc->sc_ih == NULL) {
+		aprint_error_dev(self, "failed to establish interrupt %d\n",
+		     loc->loc_intr);
+		return;
+	}
+	aprint_normal_dev(self, "interrupting on irq %d\n",
+	     loc->loc_intr);
+
+	dwc_gmac_attach(&sc->sc_core, ep);
+}
+
+
+static int
+awin_gige_intr(void *arg)
+{
+	struct awin_gige_softc *sc = arg;
+
+	return dwc_gmac_intr(&sc->sc_core);
 }

Index: src/sys/arch/arm/allwinner/files.awin
diff -u src/sys/arch/arm/allwinner/files.awin:1.11 src/sys/arch/arm/allwinner/files.awin:1.12
--- src/sys/arch/arm/allwinner/files.awin:1.11	Sun Sep  7 17:49:39 2014
+++ src/sys/arch/arm/allwinner/files.awin	Mon Sep  8 14:26:16 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: files.awin,v 1.11 2014/09/07 17:49:39 jmcneill Exp $
+#	$NetBSD: files.awin,v 1.12 2014/09/08 14:26:16 martin Exp $
 #
 # Configuration info for Allwinner ARM Peripherals
 #
@@ -88,7 +88,6 @@ attach	awe at awinio with awin_eth
 file	arch/arm/allwinner/awin_eth.c		awin_eth
 
 # A20 GMAC
-device	awge { } : ether, ifnet, arp, mii
 attach	awge at awinio with awin_gige
 file	arch/arm/allwinner/awin_gige.c		awin_gige
 

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1102 src/sys/conf/files:1.1103
--- src/sys/conf/files:1.1102	Sun Aug 24 20:23:38 2014
+++ src/sys/conf/files	Mon Sep  8 14:26:16 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.1102 2014/08/24 20:23:38 joerg Exp $
+#	$NetBSD: files,v 1.1103 2014/09/08 14:26:16 martin Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20140824
@@ -705,6 +705,11 @@ file	dev/ic/hme.c			hme
 device	gem: arp, ether, ifnet, mii
 file	dev/ic/gem.c			gem
 
+# Synopsis Designware GMAC core, as found on allwinner a20
+# and other SoCs
+device	awge: arp, ether, ifnet, mii
+file	dev/ic/dwc_gmac.c		awge
+
 # 8390-family Ethernet controllers
 #
 defflag	opt_ipkdb.h		IPKDB_DP8390

Reply via email to