Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Aug 2011 00:52:58 GMT
From:      Jakub Wojciech Klama <jceel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 198110 for review
Message-ID:  <201108250052.p7P0qwQ7070544@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@198110?ac=10

Change 198110 by jceel@jceel_cyclone on 2011/08/25 00:52:30

	Cosmetic changes and fixes, added #defines instead of
	hadcoded values, added proper resource handling in *_attach()
	method, added lpe_miibus_statchg() body.

Affected files ...

.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpe.c#6 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpereg.h#5 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_dmac.c#5 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_fb.c#2 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_gpio.c#5 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_intc.c#2 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_mmc.c#6 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_ohci.c#4 edit
.. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcreg.h#12 edit

Differences ...

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpe.c#6 (text+ko) ====

@@ -43,8 +43,6 @@
 #include <machine/bus.h>
 #include <machine/intr.h>
 
-#include <sys/kdb.h>
-
 #include <net/if.h>
 #include <net/if_arp.h>
 #include <net/ethernet.h>
@@ -66,6 +64,16 @@
 
 #include "miibus_if.h"
 
+#define	DEBUG
+#undef	DEBUG
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__);   \
+    printf(fmt,##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
 struct lpe_dmamap_arg {
 	bus_addr_t		lpe_dma_busaddr;
 };
@@ -123,6 +131,7 @@
 	void *			lpe_intrhand;
 	bus_space_tag_t		lpe_bst;
 	bus_space_handle_t	lpe_bsh;
+#define	LPE_FLAG_LINK		(1 << 0)
 	uint32_t		lpe_flags;
 	struct callout		lpe_tick;
 
@@ -324,7 +333,9 @@
 	lpe_write_4(sc, LPE_MCMD, 0);
 
 	int x = (lpe_read_4(sc, LPE_MRDD) & LPE_MRDD_DATAMASK);
-//	printf("mii read: phy=%d reg=%d result=0x%04x\n", phy, reg, x);
+
+	
+	debugf("phy=%d reg=%d result=0x%04x\n", phy, reg, x);
 	return (x);
 }
 
@@ -334,7 +345,7 @@
 	struct lpe_softc *sc = device_get_softc(dev);
 	uint32_t val;
 
-//	printf("mii write: phy=%d reg=%d data=0x%04x\n", phy, reg, data);
+	debugf("phy=%d reg=%d data=0x%04x\n", phy, reg, data);
 
 	lpe_write_4(sc, LPE_MCMD, LPE_MCMD_WRITE);
 	lpe_write_4(sc, LPE_MADR, 
@@ -358,10 +369,16 @@
 lpe_miibus_statchg(device_t dev)
 {
 	struct lpe_softc *sc = device_get_softc(dev);
-	//struct mii_data *mii = device_get_softc(sc->lpe_miibus);
+	struct mii_data *mii = device_get_softc(sc->lpe_miibus);
 
 	lpe_lock(sc);
 
+	if ((mii->mii_media_status & IFM_ACTIVE) &&
+	    (mii->mii_media_status & IFM_AVALID))
+		sc->lpe_flags |= LPE_FLAG_LINK;
+	else
+		sc->lpe_flags &= ~LPE_FLAG_LINK;
+
 	lpe_unlock(sc);
 }
 
@@ -423,12 +440,10 @@
 	mac1 = lpe_read_4(sc, LPE_MAC1);
 	lpe_write_4(sc, LPE_MAC1, /*mac1 |*/ LPE_MAC1_RXENABLE | LPE_MAC1_PASSALL);
 
-	/* XXX */
 	lpe_write_4(sc, LPE_MAC2, LPE_MAC2_CRCENABLE | LPE_MAC2_PADCRCENABLE |
 	    LPE_MAC2_FULLDUPLEX);
 
-	/* XXX */
-	lpe_write_4(sc, LPE_MCFG, (((7) & 0x7) << 2));
+	lpe_write_4(sc, LPE_MCFG, LPE_MCFG_CLKSEL(7));
 
 	/* Set up Rx filter */
 	lpe_write_4(sc, LPE_RXFILTER_CTRL, 0xffffffff);
@@ -489,7 +504,7 @@
 
 	lpe_lock_assert(sc);
 
-//	device_printf(sc->lpe_dev, "lpe_start_locked()\n");
+	debugf("entry");
 
 	while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
 		if (lpe_read_4(sc, LPE_TXDESC_PROD) ==
@@ -518,7 +533,6 @@
 {
 	struct lpe_txdesc *txd;
 	struct lpe_hwdesc *hwd;
-	//struct lpe_hwstatus *hws;
 	bus_dma_segment_t segs[LPE_MAXFRAGS];
 	int i, err, nsegs, prod;
 
@@ -528,10 +542,7 @@
 	prod = sc->lpe_cdata.lpe_tx_prod;
 	txd = &sc->lpe_cdata.lpe_tx_desc[prod];
 
-//	device_printf(sc->lpe_dev, "lpe_encap: starting with prod=%d\n", prod);
-
-//	device_printf(sc->lpe_dev, "lpe_encap: packet data: %16D\n",
-//	    mtod(*m_head, const char *), " ");
+	debugf("lpe_encap: starting with prod=%d\n", prod);
 
 	err = bus_dmamap_load_mbuf_sg(sc->lpe_cdata.lpe_tx_buf_tag,
 	    txd->lpe_txdesc_dmamap, *m_head, segs, &nsegs, BUS_DMA_NOWAIT);
@@ -553,7 +564,7 @@
 	for (i = 0; i < nsegs; i++) {
 		hwd = &sc->lpe_rdata.lpe_tx_ring[prod];
 		hwd->lhr_data = segs[i].ds_addr;
-		hwd->lhr_control = segs[i].ds_len - 1;// & LPE_HWDESC_SIZE_MASK;
+		hwd->lhr_control = segs[i].ds_len - 1;
 
 		if (i == nsegs - 1) {
 			hwd->lhr_control |= LPE_HWDESC_LASTFLAG;
@@ -563,9 +574,6 @@
 		}
 
 		LPE_INC(prod, LPE_TXDESC_NUM);
-
-//		device_printf(sc->lpe_dev, "lpe_encap: 1 segment done @ %p, size: %ld\n",
-//			hwd, segs[i].ds_len);
 	}
 
 	bus_dmamap_sync(sc->lpe_cdata.lpe_tx_ring_tag, sc->lpe_cdata.lpe_tx_ring_map,
@@ -618,7 +626,7 @@
 	struct lpe_softc *sc = (struct lpe_softc *)arg;
 	uint32_t intstatus;
 
-//	device_printf(sc->lpe_dev, "intr(): 0x%08x\n", lpe_read_4(sc, LPE_INTSTATUS));
+	debugf("status=0x%08x\n", lpe_read_4(sc, LPE_INTSTATUS));
 
 	while ((intstatus = lpe_read_4(sc, LPE_INTSTATUS))) {
 		if (intstatus & LPE_INT_RXDONE)
@@ -643,8 +651,6 @@
 	struct mbuf *m;
 	int prod, cons;
 
-//	device_printf(sc->lpe_dev, "receive interrupt\n");
-
 	for (;;) {
 		prod = lpe_read_4(sc, LPE_RXDESC_PROD);
 		cons = lpe_read_4(sc, LPE_RXDESC_CONS);
@@ -655,11 +661,6 @@
 		hwd = &sc->lpe_rdata.lpe_rx_ring[cons];
 		hws = &sc->lpe_rdata.lpe_rx_status[cons];
 
-//		device_printf(sc->lpe_dev, "incoming packet: idx=%d len=%d data=%16D\n",
-//		    cons, hws->lhs_info & 0x7ff,
-//		    mtod(rxd->lpe_rxdesc_mbuf, const char *), " ");
-
-
 		m = rxd->lpe_rxdesc_mbuf;
 		m->m_pkthdr.rcvif = ifp;
 		m->m_data += 2;
@@ -671,14 +672,14 @@
 		LPE_INC(cons, LPE_RXDESC_NUM);
 		lpe_write_4(sc, LPE_RXDESC_CONS, cons);
 	}
-
-//	device_printf(sc->lpe_dev, "rx: prod=%d cons=%d\n", prod, cons);
 }
 
 static void
 lpe_txintr(struct lpe_softc *sc)
 {
-///	device_printf(sc->lpe_dev, "transmit interrupt\n");
+
+	/* XXX add TX error handling */
+	debugf("transmit interrupt\n");
 }
 
 static void
@@ -968,9 +969,6 @@
 
 	bus_dmamap_unload(sc->lpe_cdata.lpe_rx_buf_tag, rxd->lpe_rxdesc_dmamap);
 
-//	printf("i=%d sc=%p lpe_rx_buf_tag=%p lpe_rxdesc_dmamap=%p m=%p\n",
-//		n, sc, sc->lpe_cdata.lpe_rx_buf_tag, rxd->lpe_rxdesc_dmamap, m);
-
 	if (bus_dmamap_load_mbuf_sg(sc->lpe_cdata.lpe_rx_buf_tag, 
 	    rxd->lpe_rxdesc_dmamap, m, segs, &nsegs, 0)) {
 		m_freem(m);

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpereg.h#5 (text+ko) ====

@@ -61,6 +61,10 @@
 #define	LPE_SUPP_SPEED		(1 << 8)
 #define	LPE_TEST		0x01c
 #define	LPE_MCFG		0x020
+#define	LPE_MCFG_SCANINCR	(1 << 0)
+#define	LPE_MCFG_SUPPREAMBLE	(1 << 1)
+#define	LPE_MCFG_CLKSEL(_n)	((_n & 0x7) << 2)
+#define	LPC_MCFG_RESETMII	(1 << 15)
 #define	LPE_MCMD		0x024
 #define	LPE_MCMD_READ		(1 << 0)
 #define	LPE_MCMD_WRITE		(0 << 0)

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_dmac.c#5 (text+ko) ====

@@ -218,7 +218,7 @@
 	cfg = LPC_DMAC_CH_CONFIG_ITC | LPC_DMAC_CH_CONFIG_IE |
 	    LPC_DMAC_CH_CONFIG_FLOWCNTL(ch->ldc_config->ldc_fcntl) |
 	    LPC_DMAC_CH_CONFIG_DESTP(ch->ldc_config->ldc_dst_periph) |
-	    LPC_DMAC_CH_CONFIG_SRCP(ch->ldc_config->ldc_src_periph) | LPC_DMAC_CH_CONFIG_E; // XXX
+	    LPC_DMAC_CH_CONFIG_SRCP(ch->ldc_config->ldc_src_periph) | LPC_DMAC_CH_CONFIG_E;
 	lpc_dmac_write_ch_4(sc, chno, LPC_DMAC_CH_SRCADDR, src);
 	lpc_dmac_write_ch_4(sc, chno, LPC_DMAC_CH_DSTADDR, dst);
 	lpc_dmac_write_ch_4(sc, chno, LPC_DMAC_CH_LLI, 0);

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_fb.c#2 (text+ko) ====

@@ -429,7 +429,7 @@
 lpc_fb_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int x,
     struct thread *td)
 {
-	/* XXX */
+	
 	return (EINVAL);
 }
 

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_gpio.c#5 (text+ko) ====

@@ -443,9 +443,8 @@
 static int
 lpc_gpio_pin_toggle(device_t dev, uint32_t pin)
 {
-	//struct lpc_gpio_softc *sc = device_get_softc(dev);
 	const struct lpc_gpio_pinmap *map;
-	uint32_t /*state,*/ flags;
+	uint32_t flags;
 
 	map = lpc_gpio_get_pinmap(pin);
 

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_intc.c#2 (text+ko) ====

@@ -220,8 +220,6 @@
 
 }
 
-/* XXX */
-
 struct fdt_fixup_entry fdt_fixup_table[] = {
 	{ NULL, NULL }
 };

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_mmc.c#6 (text+ko) ====

@@ -66,7 +66,7 @@
 #include <arm/lpc/lpcvar.h>
 
 #define	DEBUG
-//#undef	DEBUG
+#undef	DEBUG
 
 #ifdef DEBUG
 #define debugf(fmt, args...) do { printf("%s(): ", __func__);   \

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_ohci.c#4 (text+ko) ====

@@ -151,7 +151,7 @@
 	strlcpy(sc->sc_vendor, "NXP", sizeof(sc->sc_vendor));
 
 	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
-	    NULL , (void *)ohci_interrupt, sc, &sc->sc_intr_hdl);
+	    NULL, (void *)ohci_interrupt, sc, &sc->sc_intr_hdl);
 	if (err) {
 		sc->sc_intr_hdl = NULL;
 		goto fail;
@@ -215,7 +215,13 @@
 	return (0);
 
 fail:
-	/* XXX */
+	if (sc->sc_intr_hdl)
+		bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_intr_hdl);
+	if (sc->sc_irq_res)
+		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_irq_res);
+	if (sc->sc_io_res)
+		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_io_res);
+
 	return (ENXIO);
 }
 

==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcreg.h#12 (text+ko) ====




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