mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-05 14:21:37 +00:00
Work around for Ethernet problems on Xaeniax board
This commit is contained in:
parent
983fda8391
commit
1f6d4258c2
4 changed files with 55 additions and 4 deletions
|
@ -2,6 +2,8 @@
|
||||||
Changes since U-Boot 1.1.1:
|
Changes since U-Boot 1.1.1:
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
* Work around for Ethernet problems on Xaeniax board
|
||||||
|
|
||||||
* Patch by TsiChung Liew, 23 Sep 2004:
|
* Patch by TsiChung Liew, 23 Sep 2004:
|
||||||
- add support for MPC8220 CPU
|
- add support for MPC8220 CPU
|
||||||
- Add support for Alaska and Yukon boards
|
- Add support for Alaska and Yukon boards
|
||||||
|
|
|
@ -640,8 +640,15 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we have a packet address, so tell the card to use it */
|
/* we have a packet address, so tell the card to use it */
|
||||||
|
#ifndef CONFIG_XAENIAX
|
||||||
SMC_outb (packet_no, PN_REG);
|
SMC_outb (packet_no, PN_REG);
|
||||||
|
#else
|
||||||
|
/* On Xaeniax board, we can't use SMC_outb here because that way
|
||||||
|
* the Allocate MMU command will end up written to the command register
|
||||||
|
* as well, which will lead to a problem.
|
||||||
|
*/
|
||||||
|
SMC_outl (packet_no << 16, 0);
|
||||||
|
#endif
|
||||||
/* do not write new ptr value if Write data fifo not empty */
|
/* do not write new ptr value if Write data fifo not empty */
|
||||||
while ( saved_ptr & PTR_NOTEMPTY )
|
while ( saved_ptr & PTR_NOTEMPTY )
|
||||||
printf ("Write data fifo not empty!\n");
|
printf ("Write data fifo not empty!\n");
|
||||||
|
@ -702,7 +709,9 @@ again:
|
||||||
|
|
||||||
/* release packet */
|
/* release packet */
|
||||||
/* no need to release, MMU does that now */
|
/* no need to release, MMU does that now */
|
||||||
/* SMC_outw (MC_FREEPKT, MMU_CMD_REG); */
|
#ifdef CONFIG_XAENIAX
|
||||||
|
SMC_outw (MC_FREEPKT, MMU_CMD_REG);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* wait for MMU getting ready (low) */
|
/* wait for MMU getting ready (low) */
|
||||||
while (SMC_inw (MMU_CMD_REG) & MC_BUSY) {
|
while (SMC_inw (MMU_CMD_REG) & MC_BUSY) {
|
||||||
|
@ -722,7 +731,9 @@ again:
|
||||||
|
|
||||||
/* release packet */
|
/* release packet */
|
||||||
/* no need to release, MMU does that now */
|
/* no need to release, MMU does that now */
|
||||||
/* SMC_outw (MC_FREEPKT, MMU_CMD_REG); */
|
#ifdef CONFIG_XAENIAX
|
||||||
|
SMC_outw (MC_FREEPKT, MMU_CMD_REG);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* wait for MMU getting ready (low) */
|
/* wait for MMU getting ready (low) */
|
||||||
while (SMC_inw (MMU_CMD_REG) & MC_BUSY) {
|
while (SMC_inw (MMU_CMD_REG) & MC_BUSY) {
|
||||||
|
@ -735,7 +746,15 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* restore previously saved registers */
|
/* restore previously saved registers */
|
||||||
|
#ifndef CONFIG_XAENIAX
|
||||||
SMC_outb( saved_pnr, PN_REG );
|
SMC_outb( saved_pnr, PN_REG );
|
||||||
|
#else
|
||||||
|
/* On Xaeniax board, we can't use SMC_outb here because that way
|
||||||
|
* the Allocate MMU command will end up written to the command register
|
||||||
|
* as well, which will lead to a problem.
|
||||||
|
*/
|
||||||
|
SMC_outl(saved_pnr << 16, 0);
|
||||||
|
#endif
|
||||||
SMC_outw( saved_ptr, PTR_REG );
|
SMC_outw( saved_ptr, PTR_REG );
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
|
@ -913,7 +932,15 @@ static int smc_rcv()
|
||||||
udelay(1); /* Wait until not busy */
|
udelay(1); /* Wait until not busy */
|
||||||
|
|
||||||
/* restore saved registers */
|
/* restore saved registers */
|
||||||
|
#ifndef CONFIG_XAENIAX
|
||||||
SMC_outb( saved_pnr, PN_REG );
|
SMC_outb( saved_pnr, PN_REG );
|
||||||
|
#else
|
||||||
|
/* On Xaeniax board, we can't use SMC_outb here because that way
|
||||||
|
* the Allocate MMU command will end up written to the command register
|
||||||
|
* as well, which will lead to a problem.
|
||||||
|
*/
|
||||||
|
SMC_outl( saved_pnr << 16, 0);
|
||||||
|
#endif
|
||||||
SMC_outw( saved_ptr, PTR_REG );
|
SMC_outw( saved_ptr, PTR_REG );
|
||||||
|
|
||||||
if (!is_error) {
|
if (!is_error) {
|
||||||
|
|
|
@ -85,6 +85,19 @@ typedef unsigned long int dword;
|
||||||
if (__p & 2) __v >>= 8; \
|
if (__p & 2) __v >>= 8; \
|
||||||
else __v &= 0xff; \
|
else __v &= 0xff; \
|
||||||
__v; })
|
__v; })
|
||||||
|
#elif defined(CONFIG_XAENIAX)
|
||||||
|
#define SMC_inl(r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))))
|
||||||
|
#define SMC_inw(z) ({ \
|
||||||
|
unsigned int __p = (unsigned int)(SMC_BASE_ADDRESS + (z)); \
|
||||||
|
unsigned int __v = *(volatile unsigned int *)((__p) & ~3); \
|
||||||
|
if (__p & 3) __v >>= 16; \
|
||||||
|
else __v &= 0xffff; \
|
||||||
|
__v; })
|
||||||
|
#define SMC_inb(p) ({ \
|
||||||
|
unsigned int ___v = SMC_inw((p) & ~1); \
|
||||||
|
if (p & 1) ___v >>= 8; \
|
||||||
|
else ___v &= 0xff; \
|
||||||
|
___v; })
|
||||||
#else
|
#else
|
||||||
#define SMC_inl(r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))))
|
#define SMC_inl(r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))))
|
||||||
#define SMC_inw(r) (*((volatile word *)(SMC_BASE_ADDRESS+(r))))
|
#define SMC_inw(r) (*((volatile word *)(SMC_BASE_ADDRESS+(r))))
|
||||||
|
@ -99,6 +112,15 @@ typedef unsigned long int dword;
|
||||||
#ifdef CONFIG_XSENGINE
|
#ifdef CONFIG_XSENGINE
|
||||||
#define SMC_outl(d,r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r<<1))) = d)
|
#define SMC_outl(d,r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r<<1))) = d)
|
||||||
#define SMC_outw(d,r) (*((volatile word *)(SMC_BASE_ADDRESS+(r<<1))) = d)
|
#define SMC_outw(d,r) (*((volatile word *)(SMC_BASE_ADDRESS+(r<<1))) = d)
|
||||||
|
#elif defined (CONFIG_XAENIAX)
|
||||||
|
#define SMC_outl(d,r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))) = d)
|
||||||
|
#define SMC_outw(d,p) ({ \
|
||||||
|
dword __dwo = SMC_inl((p) & ~3); \
|
||||||
|
dword __dwn = (word)(d); \
|
||||||
|
__dwo &= ((p) & 3) ? 0x0000ffff : 0xffff0000; \
|
||||||
|
__dwo |= ((p) & 3) ? __dwn << 16 : __dwn; \
|
||||||
|
SMC_outl(__dwo, (p) & ~3); \
|
||||||
|
})
|
||||||
#else
|
#else
|
||||||
#define SMC_outl(d,r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))) = d)
|
#define SMC_outl(d,r) (*((volatile dword *)(SMC_BASE_ADDRESS+(r))) = d)
|
||||||
#define SMC_outw(d,r) (*((volatile word *)(SMC_BASE_ADDRESS+(r))) = d)
|
#define SMC_outw(d,r) (*((volatile word *)(SMC_BASE_ADDRESS+(r))) = d)
|
||||||
|
|
|
@ -181,7 +181,7 @@
|
||||||
* SMSC91C111 Network Card
|
* SMSC91C111 Network Card
|
||||||
*/
|
*/
|
||||||
#define CONFIG_DRIVER_SMC91111 1
|
#define CONFIG_DRIVER_SMC91111 1
|
||||||
#define CONFIG_SMC91111_BASE 0x0C00030 /* chip select 3 */
|
#define CONFIG_SMC91111_BASE 0x10000300 /* chip select 3 */
|
||||||
#define CONFIG_SMC_USE_32_BIT 1 /* 32 bit bus */
|
#define CONFIG_SMC_USE_32_BIT 1 /* 32 bit bus */
|
||||||
#undef CONFIG_SMC_91111_EXT_PHY /* we use internal phy */
|
#undef CONFIG_SMC_91111_EXT_PHY /* we use internal phy */
|
||||||
#undef CONFIG_SHOW_ACTIVITY
|
#undef CONFIG_SHOW_ACTIVITY
|
||||||
|
|
Loading…
Add table
Reference in a new issue