[U-Boot-Users] Optimized U-boot : Optimization of UCC and TFTP codes of UBOOT

hello all,
I am currently trying to optimize the Ethernet driver initialization code and the Tftp code of the U-boot so that it can fit into the I2CPROM of the 8321 LCDB board whose PROM size is 32 KB, but out of which only 18 KB is available for the code.
The main aim of this project is to be able to provide support for booting up for those boards whose flash memory has gone bad or boards not having any flash.
The code which will be present on the PROM will have the first stage boot up code, which will initialize the board. The second part of the part does Ethernet initialization and provide support for Tftp so that the board will be able to download the images to the RAM and then start booting up from RAM.
The main problem in implementing this feature is the size of the PROM that is available to us. The Ethernet initialization code (UCC) needs to do bare initialization of the Ethernet and does not implement any complex functionalities. The only functions that are required are the (1) TX event (2) RX event (3) Error Control and (4)CRC.
The Tftp code (present in the net directory of the U-Boot) then should support a simple file transfer protocol implemented in a minimal fashion.
The Ethernet initialization code and the Tftp code size should not be more than 18 KB. Can anyone suggest me a method like how to go on with the optimization of the codes or is there any other way of implementing this feature.
Regards Sandeep Gopalpet

In message 1034141BCEB1424784F14A38BD006D82165BB5@zin33exm22.fsl.freescale.net you wrote:
I am currently trying to optimize the Ethernet driver
initialization code and the Tftp code of the U-boot so that it can fit into the I2CPROM of the 8321 LCDB board whose PROM size is 32 KB, but out of which only 18 KB is available for the code.
I recommend to check code and data sizes of a few objects in the U-Boot tree, and to re-consiser if it is worth to spent effort on this.
...
do bare initialization of the Ethernet and does not implement any complex functionalities. The only functions that are required are the (1) TX event (2) RX event (3) Error Control and (4)CRC.
Yes, and you will need initialization of the CPU, the RAM (for stack and I/O buffers, and you will need support for the environment and code to read it (for things like MAC address), and you may want to be able to see what's happening, so a minimal serial driver is needed, which in turn asks for things like printf, and... and...
The Tftp code (present in the net directory of the U-Boot) then should support a simple file transfer protocol implemented in a minimal fashion.
Right. That's what the initiual 'T' stands for. I don;t think that the current code is overly bloated.
The Ethernet initialization code and the Tftp code size should not be more than 18 KB.
Let's give it a quick check on a TQM834x system:
-> size cpu/mpc83xx/*.o net/*.o lib_generic/string.o lib_generic/vsprintf.o text data bss dec hex filename 468 24 0 492 1ec cpu/mpc83xx/cpu.o 304 0 0 304 130 cpu/mpc83xx/cpu_init.o 1868 8 0 1876 754 cpu/mpc83xx/i2c.o 104 0 0 104 68 cpu/mpc83xx/interrupts.o 0 0 0 0 0 cpu/mpc83xx/resetvec.o 0 0 0 0 0 cpu/mpc83xx/spd_sdram.o 1260 248 0 1508 5e4 cpu/mpc83xx/speed.o 14584 92 0 14676 3954 cpu/mpc83xx/start.o 1804 76 0 1880 758 cpu/mpc83xx/traps.o 2296 120 0 2416 970 net/bootp.o 2588 76 12 2676 a74 net/eth.o 6528 324 204 7056 1b90 net/net.o 4784 208 2224 7216 1c30 net/nfs.o 576 48 0 624 270 net/rarp.o 0 0 0 0 0 net/sntp.o 2220 196 52 2468 9a4 net/tftp.o 1256 4 0 1260 4ec lib_generic/string.o 3032 24 0 3056 bf0 lib_generic/vsprintf.o ============================================================== 43467 1448
Just this fraction of the U-Boot code gives a total of more than 44 kB. I doubt that you can optimize away 60% of this...
Best regards,
Wolfgang Denk

Hi Denk,
Thank you for the immediate reply to my mail but in my case I will not be using the entire U-boot and hence not bothered about the total size of U-boot. We already have a "startup code" for our board and this startup code runs from the I2CPROM. Once the start up code gets executed, the next step is to initialize the Ethernet driver and then run Tftp over this. The ipaddr, serverip, etc., will be hard coded.
The startup code basically does some register initialization required to up the board. Another point here is that the user will not be able to access the serial console till the board downloads the images and boots up.
Now, the startup code contains a function call to the Ethernet driver initialization which actually sets up the Ethernet driver and then over this Tftp support is provided to download the kernel images to the RAM.
So, in this case I need not use the entire U-boot and I require only the following files
ucc_geth.c, ucc_fast.c, ucc_geth_phy.c and the corresponding header files for the Ethernet initialization and
tftp.c, eth.c and net.c and some other supportive functions. The size of libucc.a is around 44KB and that of libnet.a is around 42KB and I need to optimize these codes providing minimal features. The size of the startup code is less than 1KB and the rest of the code should fit in the rest of 17KB.
So, any ideas on how to proceed with this feature of booting from PROM, plz do share them with me.
Regards
Sandeep Gopalpet
-----Original Message----- From: wd@denx.de [mailto:wd@denx.de] Sent: Tuesday, November 21, 2006 2:02 PM To: KUMAR GOPALPET-B05799 Cc: u-boot-users@lists.sourceforge.net Subject: Re: [U-Boot-Users] Optimized U-boot : Optimization of UCC and TFTP codes of UBOOT
In message 1034141BCEB1424784F14A38BD006D82165BB5@zin33exm22.fsl.freescale.net you wrote:
I am currently trying to optimize the Ethernet driver
initialization code and the Tftp code of the U-boot so that it can fit
into the I2CPROM of the 8321 LCDB board whose PROM size is 32 KB, but out of which only 18 KB is available for the code.
I recommend to check code and data sizes of a few objects in the U-Boot tree, and to re-consiser if it is worth to spent effort on this.
...
do bare initialization of the Ethernet and does not implement any complex functionalities. The only functions that are required are the (1) TX event (2) RX event (3) Error Control and (4)CRC.
Yes, and you will need initialization of the CPU, the RAM (for stack and I/O buffers, and you will need support for the environment and code to read it (for things like MAC address), and you may want to be able to see what's happening, so a minimal serial driver is needed, which in turn asks for things like printf, and... and...
The Tftp code (present in the net directory of the U-Boot) then should
support a simple file transfer protocol implemented in a minimal fashion.
Right. That's what the initiual 'T' stands for. I don;t think that the current code is overly bloated.
The Ethernet initialization code and the Tftp code size should not be more than 18 KB.
Let's give it a quick check on a TQM834x system:
-> size cpu/mpc83xx/*.o net/*.o lib_generic/string.o -> lib_generic/vsprintf.o text data bss dec hex filename 468 24 0 492 1ec cpu/mpc83xx/cpu.o 304 0 0 304 130 cpu/mpc83xx/cpu_init.o 1868 8 0 1876 754 cpu/mpc83xx/i2c.o 104 0 0 104 68 cpu/mpc83xx/interrupts.o 0 0 0 0 0 cpu/mpc83xx/resetvec.o 0 0 0 0 0 cpu/mpc83xx/spd_sdram.o 1260 248 0 1508 5e4 cpu/mpc83xx/speed.o 14584 92 0 14676 3954 cpu/mpc83xx/start.o 1804 76 0 1880 758 cpu/mpc83xx/traps.o 2296 120 0 2416 970 net/bootp.o 2588 76 12 2676 a74 net/eth.o 6528 324 204 7056 1b90 net/net.o 4784 208 2224 7216 1c30 net/nfs.o 576 48 0 624 270 net/rarp.o 0 0 0 0 0 net/sntp.o 2220 196 52 2468 9a4 net/tftp.o 1256 4 0 1260 4ec lib_generic/string.o 3032 24 0 3056 bf0 lib_generic/vsprintf.o ============================================================== 43467 1448
Just this fraction of the U-Boot code gives a total of more than 44 kB. I doubt that you can optimize away 60% of this...
Best regards,
Wolfgang Denk
-- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de The rule on staying alive as a program manager is to give 'em a num- ber or give 'em a date, but never give 'em both at once.

In message 1034141BCEB1424784F14A38BD006D82165BCB@zin33exm22.fsl.freescale.net you wrote:
Thank you for the immediate reply to my mail but in my
case I will not be using the entire U-boot and hence not bothered about the total size of U-boot. We already have a "startup code" for our board and this startup code runs from the I2CPROM. Once the start up code gets executed, the next step is to initialize the Ethernet driver and then run Tftp over this. The ipaddr, serverip, etc., will be hard coded.
RAM initialization? Will you be reading and processing SPD infor- mation?
The startup code basically does some register initialization required to up the board. Another point here is that the user will not be able to access the serial console till the board downloads the images and boots up.
Great. Happy debugging!
So, any ideas on how to proceed with this feature of booting from PROM, plz do share them with me.
The idea I have about this is this: don't use U-Boot code for it. U-Boot follows a very different design model.
Best regards,
Wolfgang Denk
participants (2)
-
KUMAR GOPALPET-B05799
-
Wolfgang Denk