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>