[U-Boot-Users] Freescale MPC8349EMDS hang on boot
Ira Snyder
iws at ovro.caltech.edu
Thu Jul 17 00:28:21 CEST 2008
Hello u-boot-users,
I am currently in the process of developing a new driver in U-Boot. It
is a software "virtual ethernet over PCI" driver. The driver itself is
largely irrelevant for this problem.
During the development, I noticed that adding and removing certain
pieces of debugging code (which did not change any program state) caused
the board to hang on boot, like so:
================================================================================
U-Boot 1.3.4-rc1-00001-gb89881c-dirty (Jul 16 2008 - 14:54:56) MPC83XX
Reset Status: External/Internal Soft, External/Internal Hard
CPU: e300c1, MPC8349EA, Rev: 3.0 at 528 MHz, CSB: 264 MHz
Board: Freescale MPC8349EMDS
I2C:
As opposed to a normal boot:
================================================================================
U-Boot 1.3.4-rc1-00001-g8ff17d3-dirty (Jul 16 2008 - 12:00:01) MPC83XX
Reset Status: External/Internal Soft, External/Internal Hard
CPU: e300c1, MPC8349EA, Rev: 3.0 at 528 MHz, CSB: 264 MHz
Board: Freescale MPC8349EMDS
I2C: ready
SPI: ready
DRAM: 256 MB (DDR2, 64-bit, ECC on, 264 MHz)
FLASH: 32 MB
In: serial
Out: serial
Err: serial
Net: TSEC0, TSEC1
Type "run flash_nfs" to mount root filesystem over NFS
I have tried to narrow the problem down as much as possible, by removing
as much of my code as possible. I succeeded in reproducing the problem
using code that seemingly "does nothing wrong". The inlined patch is
against U-Boot v1.3.4-rc1
During my testing, it seemed that elf section alignment in the image
mattered. I took a broken, non-booting image and saved the section
offsets. They are reproduced below, generated with:
$ powerpc-linux-strip u-boot
$ powerpc-linux-readelf -e u-boot
Here is the output of the readelf command for my bad image:
================================================================================
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: PowerPC
Version: 0x1
Entry point address: 0xfe000100
Start of program headers: 52 (bytes into file)
Start of section headers: 225328 (bytes into file)
Flags: 0x8000, relocatable-lib
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 2
Size of section headers: 40 (bytes)
Number of section headers: 12
Section header string table index: 11
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS fe000000 000078 032c50 00 AX 0 0 4
[ 2] .reloc PROGBITS fe033000 033078 0014c0 00 WA 0 0 1
[ 3] .data PROGBITS fe0344c0 034538 000bdc 00 WA 0 0 4
[ 4] .data.rel.ro.loca PROGBITS fe03509c 035114 000078 00 WA 0 0 4
[ 5] .data.rel PROGBITS fe035114 03518c 000710 00 WA 0 0 4
[ 6] data PROGBITS fe035824 03589c 000004 00 WA 0 0 4
[ 7] .data.rel.local PROGBITS fe035828 0358a0 000be4 00 WA 0 0 4
[ 8] .u_boot_cmd PROGBITS fe03640c 036484 000570 00 WA 0 0 4
[ 9] .bss NOBITS fe037000 000000 0068e0 00 WA 0 0 8
[10] .comment PROGBITS 00000000 0369f4 0005d6 00 0 0 1
[11] .shstrtab STRTAB 00000000 036fca 000065 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000078 0xfe000000 0xfe000000 0x3697c 0x3697c RWE 0x8
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
Section to Segment mapping:
Segment Sections...
00 .text .reloc .data .data.rel.ro.local .data.rel data .data.rel.local .u_boot_cmd
01
The part I found important was the size of each section. The .bss,
.comment, and .shstrtab don't seem to matter (but I may be wrong!)
I wrote some code that went into the appropriate sections to get the
sizes I needed. This is why there are lots of "a" in the patch (to boost
the .data section) and the extern variables (to boost the .reloc
section) and the extern variables with values (to boost the data section).
I also did my best to trim down the code that was added in
board/freescale/mpc8349emds/mpc8394emds.c checkboard(). In my original
code, all of the code is there. I left it there in the patch, but
#if 0'd out all of the parts that made no difference.
Removing the BCSR read does seem to fix the problem (while concurrently
adjusting the padding bits until the sections are the correct size). I
see nothing wrong with the BCSR read, and it may just be another
unrelated symptom.
Here is the readelf output on my non-working U-Boot binary (produced
from v1.3.4-rc1 + the attached patch), produced using the exact same
procedure as above:
================================================================================
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: PowerPC
Version: 0x1
Entry point address: 0xfe000100
Start of program headers: 52 (bytes into file)
Start of section headers: 225232 (bytes into file)
Flags: 0x8000, relocatable-lib
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 2
Size of section headers: 40 (bytes)
Number of section headers: 12
Section header string table index: 11
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS fe000000 000078 032c50 00 AX 0 0 4
[ 2] .reloc PROGBITS fe033000 033078 0014c0 00 WA 0 0 1
[ 3] .data PROGBITS fe0344c0 034538 000bdc 00 WA 0 0 4
[ 4] .data.rel.ro.loca PROGBITS fe03509c 035114 000078 00 WA 0 0 4
[ 5] .data.rel PROGBITS fe035114 03518c 000710 00 WA 0 0 4
[ 6] data PROGBITS fe035824 03589c 000004 00 WA 0 0 4
[ 7] .data.rel.local PROGBITS fe035828 0358a0 000be4 00 WA 0 0 4
[ 8] .u_boot_cmd PROGBITS fe03640c 036484 000558 00 WA 0 0 4
[ 9] .bss NOBITS fe037000 000000 0068f0 00 WA 0 0 8
[10] .comment PROGBITS 00000000 0369dc 00058e 00 0 0 1
[11] .shstrtab STRTAB 00000000 036f6a 000065 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000078 0xfe000000 0xfe000000 0x36964 0x36964 RWE 0x8
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
Section to Segment mapping:
Segment Sections...
00 .text .reloc .data .data.rel.ro.local .data.rel data .data.rel.local .u_boot_cmd
01
I built U-Boot using ELDK-4.2, using the following:
$ make mrproper
$ make MPC8349EMDS_config
My board is a Freescale MPC8349EMDS evaluation board.
If you need any more information, I am happy to provide it.
I appreciate any help in tracking down this problem,
Ira Snyder
Here is the patch (I apologize for the 100 character "a" lines, but they
made counting the correct number much easier)
================================================================================
>From c537102983b207ad0855309aeb214a5a08cb0a4e Mon Sep 17 00:00:00 2001
From: Ira W. Snyder <iws at ovro.caltech.edu>
Date: Wed, 16 Jul 2008 11:58:16 -0700
Subject: [PATCH] Simplified brokenness
This patch breaks the MPC8349EMDS board boot, using as simple of
code as I could manage to find.
Signed-off-by: Ira W. Snyder <iws at ovro.caltech.edu>
---
board/freescale/mpc8349emds/mpc8349emds.c | 21 ++
cpu/mpc83xx/cpu.c | 2 +
drivers/net/Makefile | 1 +
drivers/net/pcinet.c | 428 +++++++++++++++++++++++++++++
drivers/net/pcinet2.c | 133 +++++++++
5 files changed, 585 insertions(+), 0 deletions(-)
create mode 100644 drivers/net/pcinet.c
create mode 100644 drivers/net/pcinet2.c
diff --git a/board/freescale/mpc8349emds/mpc8349emds.c b/board/freescale/mpc8349emds/mpc8349emds.c
index 9a312c3..5c110c9 100644
--- a/board/freescale/mpc8349emds/mpc8349emds.c
+++ b/board/freescale/mpc8349emds/mpc8349emds.c
@@ -165,7 +165,28 @@ int fixed_sdram(void)
int checkboard (void)
{
+ volatile immap_t *immr = (immap_t *)CFG_IMMR;
+ volatile u8 *bcsr = (u8 *)CFG_BCSR;
+ int host;
+ int in_pci_slot;
+
+#if 0
+ /* host or agent mode */
+ host = (immr->reset.rcwh & HRCWH_PCI_HOST) ? 1 : 0;
+#endif
+
+#if 1
+ /* in a pci slot or standalone */
+ in_pci_slot = (bcsr[10] & 0x80) ? 1 : 0;
+#endif
+
puts("Board: Freescale MPC8349EMDS\n");
+
+#if 0
+ printf("Mode: %s, %s\n",
+ host ? "Host" : "Agent",
+ in_pci_slot ? "in PCI slot" : "standalone");
+#endif
return 0;
}
diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c
index 52e4476..5c68e2a 100644
--- a/cpu/mpc83xx/cpu.c
+++ b/cpu/mpc83xx/cpu.c
@@ -365,6 +365,7 @@ int dma_xfer(void *dest, u32 count, void *src)
*/
extern int tsec_initialize(bd_t * bis, int index, char *devname);
+extern int pcinet_initialize(bd_t *bis, int index, char *devname);
int cpu_eth_init(bd_t *bis)
{
@@ -374,6 +375,7 @@ int cpu_eth_init(bd_t *bis)
#if defined(CONFIG_TSEC2)
tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
#endif
+ pcinet_initialize(bis, 0, "pcinet");
return 0;
}
#endif
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index bcf31cb..3ce13c2 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -51,6 +51,7 @@ COBJS-$(CONFIG_NETCONSOLE) += netconsole.o
COBJS-$(CONFIG_DRIVER_NS7520_ETHERNET) += ns7520_eth.o
COBJS-$(CONFIG_NS8382X) += ns8382x.o
COBJS-$(CONFIG_DRIVER_NS9750_ETHERNET) += ns9750_eth.o
+COBJS-y += pcinet.o pcinet2.o
COBJS-$(CONFIG_PCNET) += pcnet.o
COBJS-$(CONFIG_PLB2800_ETHER) += plb2800_eth.o
COBJS-$(CONFIG_DRIVER_RTL8019) += rtl8019.o
diff --git a/drivers/net/pcinet.c b/drivers/net/pcinet.c
new file mode 100644
index 0000000..abfab48
--- /dev/null
+++ b/drivers/net/pcinet.c
@@ -0,0 +1,428 @@
+/*
+ * PCINet Virtual Ethernet over PCI driver
+ *
+ * This software may be used and distributed according to the
+ * terms of the GNU General Public License, Version 2, incorporated
+ * herein by reference.
+ *
+ * Copyright (c) 2008, Ira W. Snyder <iws at ovro.caltech.edu>
+ */
+
+#include <config.h>
+#include <common.h>
+#include <malloc.h>
+#include <net.h>
+#include <command.h>
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <asm/atomic.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+const char longstring[] =
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+;
+
+extern volatile int pcinet_i1 = 1234;
+extern volatile int pcinet_i2;
+extern volatile int pcinet_i3;
+extern volatile int pcinet_i4;
+extern volatile int pcinet_i5;
+extern volatile int pcinet_i6;
+extern volatile int pcinet_i7;
+extern volatile int pcinet_i8;
+extern volatile int pcinet_i9;
+extern volatile int pcinet_i10;
+extern volatile int pcinet_i11;
+extern volatile int pcinet_i12;
+extern volatile int pcinet_i13;
+extern volatile int pcinet_i14;
+extern volatile int pcinet_i15;
+extern volatile int pcinet_i16;
+extern volatile int pcinet_i17;
+extern volatile int pcinet_i18;
+extern volatile int pcinet_i19;
+extern volatile int pcinet_i20;
+extern volatile int pcinet_i21;
+extern volatile int pcinet_i22;
+extern volatile int pcinet_i23;
+extern volatile int pcinet_i24;
+extern volatile int pcinet_i25;
+extern volatile int pcinet_i26;
+extern volatile int pcinet_i27;
+extern volatile int pcinet_i28;
+extern volatile int pcinet_i29;
+extern volatile int pcinet_i30;
+extern volatile int pcinet_i31;
+extern volatile int pcinet_i32;
+extern volatile int pcinet_i33;
+extern volatile int pcinet_i34;
+extern volatile int pcinet_i35;
+extern volatile int pcinet_i36;
+extern volatile int pcinet_i37;
+extern volatile int pcinet_i38;
+extern volatile int pcinet_i39;
+extern volatile int pcinet_i40;
+extern volatile int pcinet_i41;
+extern volatile int pcinet_i42;
+extern volatile int pcinet_i43;
+extern volatile int pcinet_i44;
+extern volatile int pcinet_i45;
+extern volatile int pcinet_i46;
+extern volatile int pcinet_i47;
+extern volatile int pcinet_i48;
+extern volatile int pcinet_i49;
+extern volatile int pcinet_i50;
+extern volatile int pcinet_i51;
+extern volatile int pcinet_i52;
+extern volatile int pcinet_i53;
+extern volatile int pcinet_i54;
+extern volatile int pcinet_i55;
+extern volatile int pcinet_i56;
+extern volatile int pcinet_i57;
+extern volatile int pcinet_i58;
+extern volatile int pcinet_i59;
+extern volatile int pcinet_i60;
+extern volatile int pcinet_i61;
+extern volatile int pcinet_i62;
+extern volatile int pcinet_i63;
+extern volatile int pcinet_i64;
+extern volatile int pcinet_i65;
+extern volatile int pcinet_i66;
+extern volatile int pcinet_i67;
+extern volatile int pcinet_i68;
+extern volatile int pcinet_i69;
+extern volatile int pcinet_i70;
+extern volatile int pcinet_i71;
+extern volatile int pcinet_i72;
+extern volatile int pcinet_i73;
+extern volatile int pcinet_i74;
+extern volatile int pcinet_i75;
+extern volatile int pcinet_i76;
+extern volatile int pcinet_i77;
+extern volatile int pcinet_i78;
+extern volatile int pcinet_i79;
+extern volatile int pcinet_i80;
+extern volatile int pcinet_i81;
+extern volatile int pcinet_i82;
+extern volatile int pcinet_i83;
+extern volatile int pcinet_i84;
+extern volatile int pcinet_i85;
+extern volatile int pcinet_i86;
+extern volatile int pcinet_i87;
+extern volatile int pcinet_i88;
+extern volatile int pcinet_i89;
+extern volatile int pcinet_i90;
+extern volatile int pcinet_i91;
+extern volatile int pcinet_i92;
+extern volatile int pcinet_i93;
+extern volatile int pcinet_i94;
+extern volatile int pcinet_i95;
+extern volatile int pcinet_i96;
+extern volatile int pcinet_i97;
+extern volatile int pcinet_i98;
+extern volatile int pcinet_i99;
+extern volatile int pcinet_i100;
+extern volatile int pcinet_i101;
+extern volatile int pcinet_i102;
+extern volatile int pcinet_i103;
+extern volatile int pcinet_i104;
+extern volatile int pcinet_i105;
+extern volatile int pcinet_i106;
+extern volatile int pcinet_i107;
+extern volatile int pcinet_i108;
+extern volatile int pcinet_i109;
+extern volatile int pcinet_i110;
+extern volatile int pcinet_i111;
+extern volatile int pcinet_i112;
+extern volatile int pcinet_i113;
+extern volatile int pcinet_i114;
+extern volatile int pcinet_i115;
+extern volatile int pcinet_i116;
+extern volatile int pcinet_i117;
+extern volatile int pcinet_i118;
+
+/* Called from net/eth.c to start the ethernet controller */
+int pcinet_initialize (bd_t *bis, int index, char *devname)
+{
+ volatile void *p = malloc(8192);
+ volatile void *p2 = memalign(4096, 4096);
+ volatile int i = pcinet_i1;
+ i = pcinet_i2;
+ i = pcinet_i3;
+ i = pcinet_i4;
+ i = pcinet_i5;
+ i = pcinet_i6;
+ i = pcinet_i7;
+ i = pcinet_i8;
+ i = pcinet_i9;
+ i = pcinet_i10;
+ i = pcinet_i11;
+ i = pcinet_i12;
+ i = pcinet_i13;
+ i = pcinet_i14;
+ i = pcinet_i15;
+ i = pcinet_i16;
+ i = pcinet_i17;
+ i = pcinet_i18;
+ i = pcinet_i19;
+ i = pcinet_i20;
+ i = pcinet_i21;
+ i = pcinet_i22;
+ i = pcinet_i23;
+ i = pcinet_i24;
+ i = pcinet_i25;
+ i = pcinet_i26;
+ i = pcinet_i27;
+ i = pcinet_i28;
+ i = pcinet_i29;
+ i = pcinet_i30;
+ i = pcinet_i31;
+ i = pcinet_i32;
+ i = pcinet_i33;
+ i = pcinet_i34;
+ i = pcinet_i35;
+ i = pcinet_i36;
+ i = pcinet_i37;
+ i = pcinet_i38;
+ i = pcinet_i39;
+ i = pcinet_i40;
+ i = pcinet_i41;
+ i = pcinet_i42;
+ i = pcinet_i43;
+ i = pcinet_i44;
+ i = pcinet_i45;
+ i = pcinet_i46;
+ i = pcinet_i47;
+ i = pcinet_i48;
+ i = pcinet_i49;
+ i = pcinet_i50;
+ i = pcinet_i51;
+ i = pcinet_i52;
+ i = pcinet_i53;
+ i = pcinet_i54;
+ i = pcinet_i55;
+ i = pcinet_i56;
+ i = pcinet_i57;
+ i = pcinet_i58;
+ i = pcinet_i59;
+ i = pcinet_i60;
+ i = pcinet_i61;
+ i = pcinet_i62;
+ i = pcinet_i63;
+ i = pcinet_i64;
+ i = pcinet_i65;
+ i = pcinet_i66;
+ i = pcinet_i67;
+ i = pcinet_i68;
+ i = pcinet_i69;
+ i = pcinet_i70;
+ i = pcinet_i71;
+ i = pcinet_i72;
+ i = pcinet_i73;
+ i = pcinet_i74;
+ i = pcinet_i75;
+ i = pcinet_i76;
+ i = pcinet_i77;
+ i = pcinet_i78;
+ i = pcinet_i79;
+ i = pcinet_i80;
+ i = pcinet_i81;
+ i = pcinet_i82;
+ i = pcinet_i83;
+ i = pcinet_i84;
+ i = pcinet_i85;
+ i = pcinet_i86;
+ i = pcinet_i87;
+ i = pcinet_i88;
+ i = pcinet_i89;
+ i = pcinet_i90;
+ i = pcinet_i91;
+ i = pcinet_i92;
+ i = pcinet_i93;
+ i = pcinet_i94;
+ i = pcinet_i95;
+ i = pcinet_i96;
+ i = pcinet_i97;
+ i = pcinet_i98;
+ i = pcinet_i99;
+ i = pcinet_i100;
+ i = pcinet_i101;
+ i = pcinet_i102;
+ i = pcinet_i103;
+ i = pcinet_i104;
+ i = pcinet_i105;
+ i = pcinet_i106;
+ i = pcinet_i107;
+ i = pcinet_i108;
+ i = pcinet_i109;
+ i = pcinet_i110;
+ i = pcinet_i111;
+ i = pcinet_i112;
+ i = pcinet_i113;
+ i = pcinet_i114;
+ i = pcinet_i115;
+ i = pcinet_i116;
+ i = pcinet_i117;
+ i = pcinet_i118;
+
+ printf("PCINET INIT: Alloc @ 0x%p\n", p);
+
+ for (i=0; i<10000000; ++i)
+ if (i % 100000 == 0)
+ printf("i=%d\n", i);
+
+ return 0;
+}
+
+/* vim: set ts=8 sts=8 sw=8 noet tw=92: */
diff --git a/drivers/net/pcinet2.c b/drivers/net/pcinet2.c
new file mode 100644
index 0000000..cfdfd33
--- /dev/null
+++ b/drivers/net/pcinet2.c
@@ -0,0 +1,133 @@
+/*
+ * ONE-LINE DESCRIPTION
+ *
+ * Copyright (c) 2008 Ira W. Snyder <iws at ovro.caltech.edu>
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+/* if you add a non-zero initializer here, the space moves from the
+ * .bss to the .data section */
+volatile int pcinet_i1;
+volatile int pcinet_i2;
+volatile int pcinet_i3;
+volatile int pcinet_i4;
+volatile int pcinet_i5;
+volatile int pcinet_i6;
+volatile int pcinet_i7;
+volatile int pcinet_i8;
+volatile int pcinet_i9;
+volatile int pcinet_i10;
+volatile int pcinet_i11;
+volatile int pcinet_i12;
+volatile int pcinet_i13;
+volatile int pcinet_i14;
+volatile int pcinet_i15;
+volatile int pcinet_i16;
+volatile int pcinet_i17;
+volatile int pcinet_i18;
+volatile int pcinet_i19;
+volatile int pcinet_i20;
+volatile int pcinet_i21;
+volatile int pcinet_i22;
+volatile int pcinet_i23;
+volatile int pcinet_i24;
+volatile int pcinet_i25;
+volatile int pcinet_i26;
+volatile int pcinet_i27;
+volatile int pcinet_i28;
+volatile int pcinet_i29;
+volatile int pcinet_i30;
+volatile int pcinet_i31;
+volatile int pcinet_i32;
+volatile int pcinet_i33;
+volatile int pcinet_i34;
+volatile int pcinet_i35;
+volatile int pcinet_i36;
+volatile int pcinet_i37;
+volatile int pcinet_i38;
+volatile int pcinet_i39;
+volatile int pcinet_i40;
+volatile int pcinet_i41;
+volatile int pcinet_i42;
+volatile int pcinet_i43;
+volatile int pcinet_i44;
+volatile int pcinet_i45;
+volatile int pcinet_i46;
+volatile int pcinet_i47;
+volatile int pcinet_i48;
+volatile int pcinet_i49;
+volatile int pcinet_i50;
+volatile int pcinet_i51;
+volatile int pcinet_i52;
+volatile int pcinet_i53;
+volatile int pcinet_i54;
+volatile int pcinet_i55;
+volatile int pcinet_i56;
+volatile int pcinet_i57;
+volatile int pcinet_i58;
+volatile int pcinet_i59;
+volatile int pcinet_i60;
+volatile int pcinet_i61;
+volatile int pcinet_i62;
+volatile int pcinet_i63;
+volatile int pcinet_i64;
+volatile int pcinet_i65;
+volatile int pcinet_i66;
+volatile int pcinet_i67;
+volatile int pcinet_i68;
+volatile int pcinet_i69;
+volatile int pcinet_i70;
+volatile int pcinet_i71;
+volatile int pcinet_i72;
+volatile int pcinet_i73;
+volatile int pcinet_i74;
+volatile int pcinet_i75;
+volatile int pcinet_i76;
+volatile int pcinet_i77;
+volatile int pcinet_i78;
+volatile int pcinet_i79;
+volatile int pcinet_i80;
+volatile int pcinet_i81;
+volatile int pcinet_i82;
+volatile int pcinet_i83;
+volatile int pcinet_i84;
+volatile int pcinet_i85;
+volatile int pcinet_i86;
+volatile int pcinet_i87;
+volatile int pcinet_i88;
+volatile int pcinet_i89;
+volatile int pcinet_i90;
+volatile int pcinet_i91;
+volatile int pcinet_i92;
+volatile int pcinet_i93;
+volatile int pcinet_i94;
+volatile int pcinet_i95;
+volatile int pcinet_i96;
+volatile int pcinet_i97;
+volatile int pcinet_i98;
+volatile int pcinet_i99;
+volatile int pcinet_i100;
+volatile int pcinet_i101;
+volatile int pcinet_i102;
+volatile int pcinet_i103;
+volatile int pcinet_i104;
+volatile int pcinet_i105;
+volatile int pcinet_i106;
+volatile int pcinet_i107;
+volatile int pcinet_i108;
+volatile int pcinet_i109;
+volatile int pcinet_i110;
+volatile int pcinet_i111;
+volatile int pcinet_i112;
+volatile int pcinet_i113;
+volatile int pcinet_i114;
+volatile int pcinet_i115;
+volatile int pcinet_i116;
+volatile int pcinet_i117;
+volatile int pcinet_i118;
+
+
+/* vim: set ts=8 sts=8 sw=8 noet tw=92: */
--
1.5.4.3
More information about the U-Boot
mailing list