Merge with /home/raj/git/u-boot#ads5121_fixes

This commit is contained in:
Wolfgang Denk 2007-09-08 20:45:59 +02:00
commit fd63d832cd
3 changed files with 22 additions and 15 deletions

View File

@ -51,7 +51,6 @@ SECTIONS
{ {
cpu/mpc512x/start.o (.text) cpu/mpc512x/start.o (.text)
*(.text) *(.text)
*(.fixup)
*(.got1) *(.got1)
. = ALIGN(16); . = ALIGN(16);
*(.rodata) *(.rodata)

View File

@ -19,7 +19,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA # MA 02111-1307 USA
# #
PLATFORM_RELFLAGS += -fPIC -ffixed-r14 -meabi PLATFORM_RELFLAGS += -fPIC -ffixed-r14 -meabi -mrelocatable
PLATFORM_CPPFLAGS += -DCONFIG_MPC512X -DCONFIG_E300 \ PLATFORM_CPPFLAGS += -DCONFIG_MPC512X -DCONFIG_E300 \
-ffixed-r2 -ffixed-r29 -msoft-float -mcpu=603e -ffixed-r2 -ffixed-r29 -msoft-float -mcpu=603e

View File

@ -32,6 +32,9 @@ int fec512x_miiphy_read(char *devname, uint8 phyAddr, uint8 regAddr, uint16 * re
int fec512x_miiphy_write(char *devname, uint8 phyAddr, uint8 regAddr, uint16 data); int fec512x_miiphy_write(char *devname, uint8 phyAddr, uint8 regAddr, uint16 data);
int mpc512x_fec_init_phy(struct eth_device *dev, bd_t * bis); int mpc512x_fec_init_phy(struct eth_device *dev, bd_t * bis);
static uchar rx_buff[FEC_MAX_PKT_SIZE];
static int rx_buff_idx = 0;
/********************************************************************/ /********************************************************************/
#if (DEBUG & 0x2) #if (DEBUG & 0x2)
static void mpc512x_fec_phydump (char *devname) static void mpc512x_fec_phydump (char *devname)
@ -235,7 +238,7 @@ static int mpc512x_fec_init (struct eth_device *dev, bd_t * bis)
fec->eth->op_pause = 0x00010020; fec->eth->op_pause = 0x00010020;
/* Frame length=1518; MII mode */ /* Frame length=1518; MII mode */
fec->eth->r_cntrl = 0x05ee000c; fec->eth->r_cntrl = 0x05ee0024;
/* Half-duplex, heartbeat disabled */ /* Half-duplex, heartbeat disabled */
fec->eth->x_cntrl = 0x00000000; fec->eth->x_cntrl = 0x00000000;
@ -520,8 +523,7 @@ static int mpc512x_fec_recv (struct eth_device *dev)
mpc512x_fec_priv *fec = (mpc512x_fec_priv *)dev->priv; mpc512x_fec_priv *fec = (mpc512x_fec_priv *)dev->priv;
volatile FEC_RBD *pRbd = &fec->bdBase->rbd[fec->rbdIndex]; volatile FEC_RBD *pRbd = &fec->bdBase->rbd[fec->rbdIndex];
unsigned long ievent; unsigned long ievent;
int frame_length, len = 0; int frame_length = 0;
uchar buff[FEC_MAX_PKT_SIZE];
#if (DEBUG & 0x1) #if (DEBUG & 0x1)
printf ("mpc512x_fec_recv %d Start...\n", fec->rbdIndex); printf ("mpc512x_fec_recv %d Start...\n", fec->rbdIndex);
@ -555,31 +557,37 @@ static int mpc512x_fec_recv (struct eth_device *dev)
} }
if (!(pRbd->status & FEC_RBD_EMPTY)) { if (!(pRbd->status & FEC_RBD_EMPTY)) {
if ((pRbd->status & FEC_RBD_LAST) && if (!(pRbd->status & FEC_RBD_ERR) &&
!(pRbd->status & FEC_RBD_ERR) &&
((pRbd->dataLength - 4) > 14)) { ((pRbd->dataLength - 4) > 14)) {
/* /*
* Get buffer size * Get buffer size
*/ */
frame_length = pRbd->dataLength - 4; if (pRbd->status & FEC_RBD_LAST)
frame_length = pRbd->dataLength - 4;
else
frame_length = pRbd->dataLength;
#if (DEBUG & 0x20) #if (DEBUG & 0x20)
{ {
int i; int i;
printf ("recv data hdr:"); printf ("recv data length 0x%08x data hdr: ",
pRbd->dataLength);
for (i = 0; i < 14; i++) for (i = 0; i < 14; i++)
printf ("%x ", *((uint8*)pRbd->dataPointer + i)); printf ("%x ", *((uint8*)pRbd->dataPointer + i));
printf("\n"); printf("\n");
} }
#endif #endif
/* /*
* Fill the buffer and pass it to upper layers * Fill the buffer and pass it to upper layers
*/ */
memcpy (buff, (void*)pRbd->dataPointer, frame_length); memcpy (&rx_buff[rx_buff_idx], (void*)pRbd->dataPointer,
NetReceive ((uchar*)buff, frame_length); frame_length - rx_buff_idx);
len = frame_length; rx_buff_idx = frame_length;
if (pRbd->status & FEC_RBD_LAST) {
NetReceive ((uchar*)rx_buff, frame_length);
rx_buff_idx = 0;
}
} }
/* /*
@ -590,7 +598,7 @@ static int mpc512x_fec_recv (struct eth_device *dev)
/* Try to fill Buffer Descriptors */ /* Try to fill Buffer Descriptors */
fec->eth->r_des_active = 0x01000000; /* Descriptor polling active */ fec->eth->r_des_active = 0x01000000; /* Descriptor polling active */
return len; return frame_length;
} }
/********************************************************************/ /********************************************************************/