mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 08:01:08 +00:00
Eliminate hard-coded address of Ethernet transfer buffer on at91rm9200
Patch by Anders Larsen, 07 Oct 2005 The Atmel errata #11 states that the transfer buffer descriptor table must be aligned on a 16-word boundary. As it turned out, this is insufficient - it seems the table must be aligned on a boundary at least as large as the table itself (in Linux this is not an issue - the table is aligned on a PAGE_SIZE (4096) boundary).
This commit is contained in:
parent
47340a46f6
commit
95f9dda216
3 changed files with 18 additions and 15 deletions
|
@ -2,6 +2,15 @@
|
|||
Changes for U-Boot 1.1.4:
|
||||
======================================================================
|
||||
|
||||
* Eliminate hard-coded address of Ethernet transfer buffer on at91rm9200
|
||||
Patch by Anders Larsen, 07 Oct 2005
|
||||
|
||||
The Atmel errata #11 states that the transfer buffer descriptor
|
||||
table must be aligned on a 16-word boundary. As it turned out, this
|
||||
is insufficient - it seems the table must be aligned on a boundary
|
||||
at least as large as the table itself (in Linux this is not an
|
||||
issue - the table is aligned on a PAGE_SIZE (4096) boundary).
|
||||
|
||||
* Fixed compilation for ARM when using a (standard) hard-FP toolchain
|
||||
Patch by Anders Larsen, 07 Oct 2005
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
TEXT_BASE = 0x23fe0000
|
||||
TEXT_BASE = 0x23fc0000
|
||||
|
|
|
@ -44,21 +44,19 @@ typedef struct {
|
|||
#define RBF_LOCAL2 (1<<24)
|
||||
#define RBF_LOCAL1 (1<<23)
|
||||
|
||||
/* Emac Buffers in last 512KBytes of SDRAM*/
|
||||
/* Be careful, buffer size is limited to 512KBytes !!! */
|
||||
#define RBF_FRAMEMAX 100
|
||||
/*#define RBF_FRAMEMEM 0x200000 */
|
||||
#define RBF_FRAMEMEM 0x21F80000
|
||||
#define RBF_FRAMEMAX 64
|
||||
#define RBF_FRAMELEN 0x600
|
||||
|
||||
#define RBF_FRAMEBTD RBF_FRAMEMEM
|
||||
#define RBF_FRAMEBUF (RBF_FRAMEMEM + RBF_FRAMEMAX*sizeof(rbf_t))
|
||||
|
||||
|
||||
#ifdef CONFIG_DRIVER_ETHER
|
||||
|
||||
#if (CONFIG_COMMANDS & CFG_CMD_NET)
|
||||
|
||||
/* alignment as per Errata #11 (64 bytes) is insufficient! */
|
||||
rbf_t rbfdt[RBF_FRAMEMAX] __attribute((aligned(512)));
|
||||
rbf_t *rbfp;
|
||||
|
||||
unsigned char rbf_framebuf[RBF_FRAMEMAX][RBF_FRAMELEN] __attribute((aligned(4)));
|
||||
|
||||
/* structure to interface the PHY */
|
||||
AT91S_PhyOps PhyOps;
|
||||
|
||||
|
@ -153,9 +151,6 @@ UCHAR at91rm9200_EmacWritePhy (AT91PS_EMAC p_mac,
|
|||
}
|
||||
|
||||
|
||||
rbf_t *rbfdt;
|
||||
rbf_t *rbfp;
|
||||
|
||||
int eth_init (bd_t * bd)
|
||||
{
|
||||
int ret;
|
||||
|
@ -188,9 +183,8 @@ int eth_init (bd_t * bd)
|
|||
p_mac->EMAC_CFG |= AT91C_EMAC_CSR; /* Clear statistics */
|
||||
|
||||
/* Init Ehternet buffers */
|
||||
rbfdt = (rbf_t *) RBF_FRAMEBTD;
|
||||
for (i = 0; i < RBF_FRAMEMAX; i++) {
|
||||
rbfdt[i].addr = RBF_FRAMEBUF + RBF_FRAMELEN * i;
|
||||
rbfdt[i].addr = rbf_framebuf[i];
|
||||
rbfdt[i].size = 0;
|
||||
}
|
||||
rbfdt[RBF_FRAMEMAX - 1].addr |= RBF_WRAP;
|
||||
|
|
Loading…
Reference in a new issue