Skip to content
Snippets Groups Projects
  1. Sep 19, 2010
    • Wolfgang Denk's avatar
      Make getenv() work before relocation. · 91a76751
      Wolfgang Denk authored
      
      So far, getenv() would work before relocation is most cases, even
      though it was not intended to be used that way.  When switching to a
      hash table based implementation, this would break a number of boards.
      
      For convenience, we make getenv() check if it's running before
      relocation and, if so, use getenv_f() internally.
      
      Note that this is limited to simple cases, as we use a small static
      buffer (32 bytes) in the global data for this purpose.
      
      For this reason, it is also not a good idea to convert all current
      uses of getenv_f() into getenv() - some of the existing use cases need
      to be able to deal with longer variable values, so getenv_f() is still
      needed and recommended for use before relocation.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      91a76751
  2. Sep 03, 2010
    • Haavard Skinnemoen's avatar
      avr32: Add simple paging support · 1f36f73f
      Haavard Skinnemoen authored
      
      Use the MMU hardware to set up 1:1 mappings between physical and virtual
      addresses. This allows us to bypass the cache when accessing the flash
      without having to do any physical-to-virtual address mapping in the CFI
      driver.
      
      The virtual memory mappings are defined at compile time through a sorted
      array of virtual memory range objects. When a TLB miss exception
      happens, the exception handler does a binary search through the array
      until it finds a matching entry and loads it into the TLB. The u-boot
      image itself is covered by a fixed TLB entry which is never replaced.
      
      This makes the 'saveenv' command work again on ATNGW100 and other boards
      using the CFI driver, hopefully without breaking any rules.
      
      Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
      1f36f73f
    • Haavard Skinnemoen's avatar
      avr32: Print unrelocated PC on exception · 8d1334a7
      Haavard Skinnemoen authored
      
      In addition to the real PC value, also print the value of PC after
      subtracting the relocation offset. This value will match the address in
      the ELF file so it's much easier to figure out where things went wrong.
      
      Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
      8d1334a7
  3. Aug 03, 2010
    • Wolfgang Denk's avatar
      Rename getenv_r() into getenv_f() · cdb74977
      Wolfgang Denk authored
      
      While running from flash, i. e. before relocation, we have only a
      limited C runtime environment without writable data segment. In this
      phase, some configurations (for example with environment in EEPROM)
      must not use the normal getenv(), but a special function.  This
      function had been called getenv_r(), with the idea that the "_r"
      suffix would mean the same as in the _r_eentrant versions of some of
      the C library functions (for example getdate vs. getdate_r, getgrent
      vs. getgrent_r, etc.).
      
      Unfortunately this was a misleading name, as in U-Boot the "_r"
      generally means "running from RAM", i. e. _after_ relocation.
      
      To avoid confusion, rename into getenv_f() [as "running from flash"]
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Acked-by: default avatarDetlev Zundel <dzu@denx.de>
      cdb74977
  4. Jul 04, 2010
    • Wolfgang Denk's avatar
      Make sure that argv[] argument pointers are not modified. · 54841ab5
      Wolfgang Denk authored
      
      The hush shell dynamically allocates (and re-allocates) memory for the
      argument strings in the "char *argv[]" argument vector passed to
      commands.  Any code that modifies these pointers will cause serious
      corruption of the malloc data structures and crash U-Boot, so make
      sure the compiler can check that no such modifications are being done
      by changing the code into "char * const argv[]".
      
      This modification is the result of debugging a strange crash caused
      after adding a new command, which used the following argument
      processing code which has been working perfectly fine in all Unix
      systems since version 6 - but not so in U-Boot:
      
      int main (int argc, char **argv)
      {
      	while (--argc > 0 && **++argv == '-') {
      /* ====> */	while (*++*argv) {
      			switch (**argv) {
      			case 'd':
      				debug++;
      				break;
      			...
      			default:
      				usage ();
      			}
      		}
      	}
      	...
      }
      
      The line marked "====>" will corrupt the malloc data structures and
      usually cause U-Boot to crash when the next command gets executed by
      the shell.  With the modification, the compiler will prevent this with
      an
      	error: increment of read-only location '*argv'
      
      N.B.: The code above can be trivially rewritten like this:
      
      	while (--argc > 0 && **++argv == '-') {
      		char *arg = *argv;
      		while (*++arg) {
      			switch (*arg) {
      			...
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Acked-by: default avatarMike Frysinger <vapier@gentoo.org>
      54841ab5
  5. Jun 29, 2010
  6. Apr 13, 2010
Loading