summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/sama5/sam_emac.c
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-09-27 13:12:04 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-09-27 13:12:04 -0600
commit4686e08c8931ffe4f02137ec203000fbf339515d (patch)
tree149b141f22d8e0502ffe1267054134568147cc4f /nuttx/arch/arm/src/sama5/sam_emac.c
parentcbdb77a10a33626f51bc3402a6893c04c686d2d1 (diff)
downloadnuttx-4686e08c8931ffe4f02137ec203000fbf339515d.tar.gz
nuttx-4686e08c8931ffe4f02137ec203000fbf339515d.tar.bz2
nuttx-4686e08c8931ffe4f02137ec203000fbf339515d.zip
SAMA5 GMAC and GMII support is code complete and ready for test
Diffstat (limited to 'nuttx/arch/arm/src/sama5/sam_emac.c')
-rw-r--r--nuttx/arch/arm/src/sama5/sam_emac.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/nuttx/arch/arm/src/sama5/sam_emac.c b/nuttx/arch/arm/src/sama5/sam_emac.c
index 1c5198020..ea81bfd01 100644
--- a/nuttx/arch/arm/src/sama5/sam_emac.c
+++ b/nuttx/arch/arm/src/sama5/sam_emac.c
@@ -1307,7 +1307,7 @@ static int sam_emac_interrupt(int irq, void *context)
tsr = sam_getreg(priv, SAM_EMAC_TSR);
imr = sam_getreg(priv, SAM_EMAC_IMR);
- pending = isr & ~(imr | 0xffc300);
+ pending = isr & ~(imr | EMAC_INT_UNUSED);
nllvdbg("isr: %08x pending: %08x\n", isr, pending);
/* Check for the completion of a transmission. This should be done before
@@ -2159,10 +2159,12 @@ static int sam_autonegotiate(struct sam_emac_s *priv)
nllvdbg("PHYID2: %04x PHY address: %02x\n", phyid2, priv->phyaddr);
if (phyid1 == MII_OUI_MSB &&
- ((phyid2 & MII_PHYID2_OUI) >> 10) == MII_OUI_LSB)
+ ((phyid2 & MII_PHYID2_OUI_MASK) >> MII_PHYID2_OUI_SHIFT) == MII_OUI_LSB)
{
- nllvdbg(" Vendor Model Number: %04x\n", ((phyid2 >> 4) & 0x3f));
- nllvdbg(" Model Revision Number: %04x\n", (phyid2 & 7));
+ nllvdbg(" Vendor Model Number: %04x\n",
+ (phyid2 & MII_PHYID2_MODEL_MASK) >> MII_PHYID2_MODEL_SHIFT);
+ nllvdbg(" Model Revision Number: %04x\n",
+ (phyid2 & MII_PHYID2_REV_MASK) >> MII_PHYID2_REV_SHIFT);
}
else
{
@@ -2570,6 +2572,12 @@ static void sam_txreset(struct sam_emac_s *priv)
txdesc[CONFIG_SAMA5_EMAC_NTXBUFFERS - 1].status =
EMACTXD_STA_USED | EMACTXD_STA_WRAP;
+ /* Flush the entire TX descriptor table to RAM */
+
+ cp15_clean_dcache((uintptr_t)txdesc,
+ (uintptr_t)txdesc +
+ CONFIG_SAMA5_EMAC_NTXBUFFERS * sizeof(struct emac_txdesc_s));
+
/* Set the Transmit Buffer Queue Pointer Register */
physaddr = sam_physramaddr((uintptr_t)txdesc);