summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Monkman <jtm@smoothsmoothie.com>2005-02-25 05:21:13 +0000
committerJay Monkman <jtm@smoothsmoothie.com>2005-02-25 05:21:13 +0000
commit6a184ff0d137933130e8f99953840e52ab4afa07 (patch)
tree413c90593c2cb498b8ee1b54eef935541c586b20
parent2005-02-24 Jay Monkman <jtm@lopingdog.com> (diff)
downloadrtems-6a184ff0d137933130e8f99953840e52ab4afa07.tar.bz2
2005-02-24 Jay Monkman <jtm@lopingdog.com>
PR 751/bsps * startup/linkcmds: Cleanup. * network/network.c: Added hardware initialization code.
-rw-r--r--c/src/lib/libbsp/arm/csb337/ChangeLog7
-rw-r--r--c/src/lib/libbsp/arm/csb337/network/network.c39
-rw-r--r--c/src/lib/libbsp/arm/csb337/startup/linkcmds2
3 files changed, 46 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/arm/csb337/ChangeLog b/c/src/lib/libbsp/arm/csb337/ChangeLog
index 658292967e..76ab2100e2 100644
--- a/c/src/lib/libbsp/arm/csb337/ChangeLog
+++ b/c/src/lib/libbsp/arm/csb337/ChangeLog
@@ -1,3 +1,10 @@
+2005-02-24 Jay Monkman <jtm@lopingdog.com>
+
+ PR 751/bsps
+ * startup/linkcmds: Cleanup.
+ * network/network.c: Added hardware initialization
+ code.
+
2005-01-07 Ralf Corsepius <ralf.corsepius@rtems.org>
* Makefile.am: Eliminate CFLAGS_OPTIMIZE_V.
diff --git a/c/src/lib/libbsp/arm/csb337/network/network.c b/c/src/lib/libbsp/arm/csb337/network/network.c
index 69a16d2e61..ff28237aa0 100644
--- a/c/src/lib/libbsp/arm/csb337/network/network.c
+++ b/c/src/lib/libbsp/arm/csb337/network/network.c
@@ -12,6 +12,8 @@
#include <rtems/rtems_bsdnet.h>
#include <at91rm9200.h>
#include <at91rm9200_emac.h>
+#include <at91rm9200_gpio.h>
+#include <at91rm9200_pmc.h>
#include <stdio.h>
#include <string.h>
@@ -308,7 +310,41 @@ void at91rm9200_emac_init(void *arg)
void at91rm9200_emac_init_hw(at91rm9200_emac_softc_t *sc)
{
int i;
-
+
+ /* Configure shared pins for Ethernet, not GPIO */
+ PIOA_REG(PIO_PDR) = ( BIT7 | /* tx clock */
+ BIT8 | /* tx enable */
+ BIT9 | /* tx data 0 */
+ BIT10 | /* tx data 1 */
+ BIT11 | /* carrier sense */
+ BIT12 | /* rx data 0 */
+ BIT13 | /* rx data 1 */
+ BIT14 | /* rx error */
+ BIT15 | /* MII clock */
+ BIT16 ); /* MII data */
+
+ PIOB_REG(PIO_PDR) = ( BIT12 | /* tx data 2 */
+ BIT13 | /* tx data 3 */
+ BIT14 | /* tx error */
+ BIT15 | /* rx data 2 */
+ BIT16 | /* rx data 3 */
+ BIT17 | /* rx data valid */
+ BIT18 | /* rx collistion */
+ BIT19 ); /* rx clock */
+
+ PIOB_REG(PIO_BSR) = ( BIT12 | /* tx data 2 */
+ BIT13 | /* tx data 3 */
+ BIT14 | /* tx error */
+ BIT15 | /* rx data 2 */
+ BIT16 | /* rx data 3 */
+ BIT17 | /* rx data valid */
+ BIT18 | /* rx collistion */
+ BIT19 ); /* rx clock */
+
+
+ /* Enable the clock to the EMAC */
+ PMC_REG(PMC_PCER) |= PMC_PCR_PID_EMAC;
+
/* initialize our receive buffer descriptors */
for (i = 0; i < NUM_RXBDS-1; i++) {
rxbuf_hdrs[i].address = (unsigned long)(&rxbuf[i * RX_BUFFER_SIZE]);
@@ -327,6 +363,7 @@ void at91rm9200_emac_init_hw(at91rm9200_emac_softc_t *sc)
EMAC_REG(EMAC_RSR) &= ~(EMAC_RSR_OVR | EMAC_RSR_REC | EMAC_RSR_BNA);
/* set the MII clock divder to MCK/64 */
+ EMAC_REG(EMAC_CFG) &= EMAC_CFG_CLK_MASK;
EMAC_REG(EMAC_CFG) = (EMAC_CFG_CLK_64 | EMAC_CFG_BIG | EMAC_CFG_FD);
/* enable the MII interface */
diff --git a/c/src/lib/libbsp/arm/csb337/startup/linkcmds b/c/src/lib/libbsp/arm/csb337/startup/linkcmds
index b9591d45cf..3ae98f2058 100644
--- a/c/src/lib/libbsp/arm/csb337/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/csb337/startup/linkcmds
@@ -62,7 +62,7 @@ SECTIONS
at91rm9200_emac_txbuf = .;
. += (0x600);
- /* 4 receive buffers, 0x600 each */
+ /* 8 receive buffers, 0x600 each */
at91rm9200_emac_rxbufs = .;
. += (0x600 * 8);