commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=f856db305f31a9994a6cb7f8e13da2b13df331e6 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
Signed-off-by: Bob Liu <[email protected]> --- drivers/net/ethernet/stmicro/stmmac/dwmac100.h | 28 ++++++++++++++++++++ .../net/ethernet/stmicro/stmmac/dwmac100_core.c | 17 +++++++++++- drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 3 ++ drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h | 5 +++ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 + 5 files changed, 54 insertions(+), 1 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100.h b/drivers/net/ethernet/stmicro/stmmac/dwmac100.h index 7c6d857..473ac61 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100.h +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100.h @@ -29,6 +29,18 @@ * MAC BLOCK defines *---------------------------------------------------------------------------*/ /* MAC CSR offset */ +#if defined(CONFIG_BLACKFIN) +#define MAC_CONTROL 0x00000000 /* MAC Control */ +#define MAC_FRAME_FILTER 0x0000004 /* Frame filter */ +#define MAC_HASH_HIGH 0x00000008 /* Multicast Hash Table High */ +#define MAC_HASH_LOW 0x0000000c /* Multicast Hash Table Low */ +#define MAC_MII_ADDR 0x00000010 /* MII Address */ +#define MAC_MII_DATA 0x00000014 /* MII Data */ +#define MAC_FLOW_CTRL 0x00000018 /* Flow Control */ +#define MAC_VLAN1 0x0000001c /* VLAN1 Tag */ +#define MAC_ADDR_HIGH 0x00000040 /* MAC Address High */ +#define MAC_ADDR_LOW 0x00000044 /* MAC Address Low */ +#else #define MAC_CONTROL 0x00000000 /* MAC Control */ #define MAC_ADDR_HIGH 0x00000004 /* MAC Address High */ #define MAC_ADDR_LOW 0x00000008 /* MAC Address Low */ @@ -39,6 +51,18 @@ #define MAC_FLOW_CTRL 0x0000001c /* Flow Control */ #define MAC_VLAN1 0x00000020 /* VLAN1 Tag */ #define MAC_VLAN2 0x00000024 /* VLAN2 Tag */ +#endif + +#ifdef CONFIG_BLACKFIN +/* MAC_FRAME_FILTER defines */ +#define MAC_FRAME_FILTER_RA 0x80000000 +#define MAC_FRAME_FILTER_PR 0x00000001 +#define MAC_FRAME_FILTER_HMC 0x00000004 +#define MAC_FRAME_FILTER_PM 0x00000010 + +#define MAC_FRAME_FILTER_INIT (MAC_FRAME_FILTER_RA | MAC_FRAME_FILTER_PR |\ + MAC_FRAME_FILTER_HMC | MAC_FRAME_FILTER_PM) +#endif /* MAC CTRL defines */ #define MAC_CONTROL_RA 0x80000000 /* Receive All Mode */ @@ -67,7 +91,11 @@ #define MAC_CONTROL_TE 0x00000008 /* Transmitter Enable */ #define MAC_CONTROL_RE 0x00000004 /* Receiver Enable */ +#ifdef CONFIG_BLACKFIN +#define MAC_CORE_INIT ((1 << 14) | MAC_CONTROL_DBF) +#else #define MAC_CORE_INIT (MAC_CONTROL_HBD | MAC_CONTROL_ASTP) +#endif /* MAC FLOW CTRL defines */ #define MAC_FLOW_CTRL_PT_MASK 0xffff0000 /* Pause Time Mask */ diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c index 138fb8d..b02dfe1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c @@ -35,7 +35,9 @@ static void dwmac100_core_init(void __iomem *ioaddr) { u32 value = readl(ioaddr + MAC_CONTROL); - +#ifdef CONFIG_BLACKFIN + writel(MAC_FRAME_FILTER_INIT, ioaddr + MAC_FRAME_FILTER); +#endif writel((value | MAC_CORE_INIT), ioaddr + MAC_CONTROL); #ifdef STMMAC_VLAN_TAG_USED @@ -68,8 +70,21 @@ static void dwmac100_dump_mac_regs(void __iomem *ioaddr) MAC_FLOW_CTRL, readl(ioaddr + MAC_FLOW_CTRL)); pr_info("\tVLAN1 tag (offset 0x%x): 0x%08x\n", MAC_VLAN1, readl(ioaddr + MAC_VLAN1)); +#ifndef CONFIG_BLACKFIN pr_info("\tVLAN2 tag (offset 0x%x): 0x%08x\n", MAC_VLAN2, readl(ioaddr + MAC_VLAN2)); +#endif + pr_info("\n\tMAC management counter registers\n"); + pr_info("\t MMC crtl (offset 0x%x): 0x%08x\n", + MMC_CONTROL, readl(ioaddr + MMC_CONTROL)); + pr_info("\t MMC High Interrupt (offset 0x%x): 0x%08x\n", + MMC_HIGH_INTR, readl(ioaddr + MMC_HIGH_INTR)); + pr_info("\t MMC Low Interrupt (offset 0x%x): 0x%08x\n", + MMC_LOW_INTR, readl(ioaddr + MMC_LOW_INTR)); + pr_info("\t MMC High Interrupt Mask (offset 0x%x): 0x%08x\n", + MMC_HIGH_INTR_MASK, readl(ioaddr + MMC_HIGH_INTR_MASK)); + pr_info("\t MMC Low Interrupt Mask (offset 0x%x): 0x%08x\n", + MMC_LOW_INTR_MASK, readl(ioaddr + MMC_LOW_INTR_MASK)); } static void dwmac100_irq_status(void __iomem *ioaddr) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c index bc17fd0..d682a0b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c @@ -50,6 +50,9 @@ static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, u32 dma_tx, if (limit < 0) return -EBUSY; +#ifdef CONFIG_BLACKFIN + writel(DMA_AXI_BUS_BLEN4 | DMA_AXI_BUS_UNDEF, ioaddr + DMA_AXI_BUS); +#endif /* Enable Application Access by writing to DMA CSR0 */ writel(DMA_BUS_MODE_DEFAULT | (pbl << DMA_BUS_MODE_PBL_SHIFT), ioaddr + DMA_BUS_MODE); diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h b/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h index 437edac..e75269a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h @@ -32,6 +32,7 @@ #define DMA_CONTROL 0x00001018 /* Ctrl (Operational Mode) */ #define DMA_INTR_ENA 0x0000101c /* Interrupt Enable */ #define DMA_MISSED_FRAME_CTR 0x00001020 /* Missed Frame Counter */ +#define DMA_AXI_BUS 0x00001028 /* Axi Bus */ #define DMA_CUR_TX_BUF_ADDR 0x00001050 /* Current Host Tx Buffer */ #define DMA_CUR_RX_BUF_ADDR 0x00001054 /* Current Host Rx Buffer */ #define DMA_HW_FEATURE 0x00001058 /* HW Feature Register */ @@ -40,6 +41,10 @@ #define DMA_CONTROL_ST 0x00002000 /* Start/Stop Transmission */ #define DMA_CONTROL_SR 0x00000002 /* Start/Stop Receive */ +/* DMA Axi bus register defines */ +#define DMA_AXI_BUS_UNDEF 0x00000001 +#define DMA_AXI_BUS_BLEN4 0x00000002 + /* DMA Normal interrupt */ #define DMA_INTR_ENA_NIE 0x00010000 /* Normal Summary */ #define DMA_INTR_ENA_TIE 0x00000001 /* Transmit Interrupt */ diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 6ee593a..0d9b86b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1280,8 +1280,10 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit) frame_len = priv->hw->desc->get_rx_frame_len(p); /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3 * Type frames (LLC/LLC-SNAP) */ +#ifndef CONFIG_BLACKFIN if (unlikely(status != llc_snap)) frame_len -= ETH_FCS_LEN; +#endif #ifdef STMMAC_RX_DEBUG if (frame_len > ETH_FRAME_LEN) pr_debug("\tRX frame size %d, COE status: %d\n",
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
