From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anatolij Gustschin Date: Thu, 24 Nov 2016 10:12:23 +0100 Subject: [U-Boot] FDT retrived raspberry pi bootargs length > 350 characters cause setenv errors, sequemce fdt get/ set/ get truncates at the first blank in the string. In-Reply-To: <217373290.719742.1479933982741@mail.yahoo.com> References: <217373290.719742.1479933982741.ref@mail.yahoo.com> <217373290.719742.1479933982741@mail.yahoo.com> Message-ID: <20161124101223.72ee16b6@crub> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Wed, 23 Nov 2016 20:46:22 +0000 (UTC) dh at synoia.com dh at synoia.com wrote: >On Wed, 23 Nov 2016 01:26:22 +0000 (UTC) >dh at synoia.com dh at synoia.com wrote: >... >> 8250.nr_uarts=0 dma.dmachans=0x7f35 bcm2708_fb.fbwidth=3840 bcm2708_fb.fbheight=2160 bcm2709.boardrev=0xa02082 bcm2709.serial=0x998f552d smsc95xx.macaddr=B8:27:EB:8F:55:2D bcm2708_fb.fbswap=1 bcm2709.uart_clock=48000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000? dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait >> 1 ) Note: bootargs is over 480 characters long >> >> setenv abc $bootargs fails...when bootargs is over 350 (approx) characters long.? >> fdt set bootargs /chosen bootargs >> fdt get value bootargs /chosen bootargsbootargs=8250.nr_uarts=0Bootargs is truncated >> The PI firmware generated bootargs parameters have blanks in the bootargs line.? >> nvalue.c implements setenv in the _do_env_set()? routine, but I cannot find a length limit in that routine. >> I'm willing to make the changes and test them. > >please check CONFIG_SYS_MAXARGS and CONFIG_SYS_BARGSIZE and increase >them in your board config file (include/configs/rpi.h ?). See README >for description of these macros. >If CONFIG_SYS_BARGSIZE is not defined, the default value 512 is used. >Define a bigger value and test if it works. > >Also if you set long environment strings manually with console >commands, the console input buffer might be to small. In that >case check CONFIG_SYS_CBSIZE in your board config file. > > >Set: >CONFIG_SYS_MAXARGS ????32 >CONFIG_SYS_BARGSIZE???? 1024 > >Success! This works. > >Console is not a problem, I cannot type that many characters without >an error or two. okay, I just wanted to mention CONFIG_SYS_CBSIZE for the sake of completeness. >Issue possibly remaining: >sequence fdt get/ set/ get truncates bootargs at the first blank >in the string of bootargs. >This is only a problem if bootargs is passed to the kernel through >the fdt, and not as separate character string. I do not know which >is the mechanism used. >Further testing on this remains. In your description above I see the command: fdt set bootargs /chosen bootargs This is wrong and could not work. You probably used: fdt set /chosen bootargs $bootargs It will insert multiple tokens separated by comma, e.g.: => setenv bootargs 'arg1 arg2 arg3' => fdt set /chosen bootargs $bootargs => fdt pri /chosen chosen { bootargs = "arg1", "arg2", "arg3"; }; => fdt get value bootargs /chosen bootargs => pri bootargs bootargs=arg1 This is the behaviour you observe. To avoid tokenizing the bootargs property in the blob you have to use an intermediate step, e.g.: => seten args "\"$bootargs\"" => pri args args="arg1 arg2 arg3" => fdt set /chosen bootargs $args => fdt pri /chosen chosen { bootargs = "arg1 arg2 arg3"; }; => fdt get value bootargs /chosen bootargs => pri bootargs bootargs=arg1 arg2 arg3 -- Anatolij