31 Oct, 2008

1 commit

  • Fix format string warning in arch/powerpc/boot/main.c. Also correct
    a typo ("uncomressed") on the same line.

    BOOTCC arch/powerpc/boot/main.o
    arch/powerpc/boot/main.c: In function 'prep_kernel':
    arch/powerpc/boot/main.c:65: warning: format '%08x' expects type
    'unsigned int', but argument 3 has type 'long unsigned int'

    Signed-off-by: Jon Smirl
    Acked-by: David Gibson
    Signed-off-by: Paul Mackerras

    Jon Smirl
     

21 Oct, 2008

1 commit

  • If the vmlinux binary in memory is larger than 4 MiB than it collides
    with the initial boot code which is linked at 4 MiB in case of cuBoot.
    If the the uncompressed image size (on disk size) is less than 4 MiB
    then it would fit. The difference between those two sizes is the bss
    section. In cuBoot we have the dtb embedded right after the data
    section so it is very likely that the reset of the bss section (in
    kernel's start up code) will overwrite the dtb blob. Therefore we
    reallocate the dtb. Something similar is allready done to the initrd.

    Signed-off-by: Sebastian Andrzej Siewior
    Acked-by: David Gibson
    Signed-off-by: Benjamin Herrenschmidt

    Sebastian Siewior
     

11 Dec, 2007

1 commit

  • Now that earlier patches have switched the bootwrapper to using libfdt
    for device tree manipulation, this patch removes the now unused
    flatdevtree.c and related files.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

22 Aug, 2007

1 commit


28 Jun, 2007

1 commit


13 Apr, 2007

4 commits

  • Our kernels put everything in the first load segment, and we read that.
    Instead of decompressing to the end of the gzip stream or supplied image
    and hoping we get it all, decompress the expected size and complain if
    it is not available.

    Signed-off-by: Milton Miller
    Signed-off-by: Paul Mackerras

    Milton Miller
     
  • The ELF parsing routines local to arch/powerpc/boot/main.c are useful
    to other callers therefore move them to their own file.

    Signed-off-by: Mark A. Greer
    Signed-off-by: Paul Mackerras

    Mark A. Greer
     
  • This cleans up how the zImage code manipulates the kernel
    command line. Notable improvements from the old handling:
    - Command line manipulation is consolidated into a new
    prep_cmdline() function, rather than being scattered across start()
    and some helper functions
    - Less stack space use: we use just a single global command
    line buffer, which can be initialized by an external tool as before,
    we no longer need another command line sized buffer on the stack.
    - Easier to support platforms whose firmware passes a
    commandline, but not a device tree. Platform code can now point new
    loader_info fields to the firmware's command line, rather than having
    to do early manipulation of the /chosen bootargs property which may
    then be rewritten again by the core.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • This patch adds a library of useful device tree manipulation functions
    to the zImage library, for use by platform code. These functions are
    based on the hooks already in dt_ops, so they're not dependent on a
    particular device tree implementation. This patch also slightly
    streamlines the code in main.c using these new functions.

    This is a consolidation of my work in this area with Scott Wood's
    patches to a very similar end.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

26 Mar, 2007

3 commits

  • This patch adds a reg.h to the zImage code, with common definitions
    for accessing system registers. For now, this includes functions for
    retrieving the PVR and the stack pointer. This patch then uses the
    new reg.h to let start() display the running stack address without
    having to explicitly pass the stack as a parameter from the asm code.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • This patch adds the correct attributes to the zImage's versions of
    printf to make gcc generate format string mismatch warnings. It also
    corrects several minor problems with format strings in the zImage thus
    discovered.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • Add a macro fatal that calls printf then exit. User must include stdio.h.

    Typically replaces 3 lines with 1, although I added back some whitespace.

    Signed-off-by: Milton Miller
    Signed-off-by: Paul Mackerras

    Milton Miller
     

21 Mar, 2007

1 commit


13 Mar, 2007

3 commits

  • This patch re-organises the way the zImage wrapper code is entered, to
    allow more flexibility on platforms with unusual entry conditions.
    After this patch, a platform .o file has two options:

    1) It can define a _zimage_start, in which case the platform code gets
    control from the very beginning of execution. In this case the
    platform code is responsible for relocating the zImage if necessary,
    clearing the BSS, performing any platform specific initialization, and
    finally calling start() to load and enter the kernel.

    2) It can define platform_init(). In this case the generic crt0.S
    handles initial entry, and calls platform_init() before calling
    start(). The signature of platform_init() is changed, however, to
    take up to 5 parameters (in r3..r7) as they come from the platform's
    initial loader, instead of a fixed set of parameters based on OF's
    usage.

    When using the generic crt0.S, the platform .o can optionally
    supply a custom stack to use, using the BSS_STACK() macro. If this
    is not supplied, the crt0.S will assume that the loader has
    supplied a usable stack.

    In either case, the platform code communicates information to the
    generic code (specifically, a PROM pointer for OF systems, and/or an
    initrd image address supplied by the bootloader) via a global
    structure "loader_info".

    In addition the wrapper script is rearranged to ensure that the
    platform .o is always linked first. This means that platforms where
    the zImage entry point is at a fixed address or offset, rather than
    being encoded in the binary header can be supported using option (1).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • This patch rewrites prep_kernel() in the zImage wrapper code to be
    clearer and more flexible. Notable changes:

    - Handling of the initrd image from prep_kernel() has moved
    into a new prep_initrd() function.
    - The address of the initrd image is now added as device tree
    properties, as the kernel expects.
    - We only copy a packaged initrd image to a new location if it
    is in danger of being clobbered when the kernel moves to its final
    location, instead of always.
    - By default we decompress the kernel directly to address 0,
    instead of requiring it to relocate itself. Platforms (such as OF)
    where doing this could clobber still-live firmware data structures can
    override the vmlinux_alloc hook to provide an alternate place to
    decompress the kernel.
    - We no longer pass lots of information between functions in
    global variables.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • At present, arch/powerpc/boot/main.c includes a gunzip() function
    which is a convenient wrapper around zlib. However, it doesn't
    conveniently allow decompressing part of an image to one location,
    then the remainder to a different address.

    This patch adds a new set of more flexible convenience wrappers around
    zlib, moving them to their own file, gunzip_util.c, in the process.
    These wrappers allow decompressing sections of the compressed image to
    different locations. In addition, they transparently handle
    uncompressed data, avoiding special case code to handle uncompressed
    vmlinux images.

    The patch also converts main.c to use the new wrappers, using the new
    flexibility to avoid decompressing the vmlinux's ELF header twice as
    we did previously. That in turn means we avoid extending our
    allocations for the vmlinux to allow space for the extra copy of the
    ELF header.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

04 Dec, 2006

2 commits

  • This makes 2 changes to clean up the flat device tree handling
    logic in the zImage wrapper.

    First, there were two callbacks from the dt_ops structure used for
    producing a final flat tree to pass to the kerne: dt_ops.ft_pack()
    which packed the flat tree (possibly a no-op) and dt_ops.ft_addr()
    which retreived the address of the final blob. Since they were only
    ever called together, this patch combines the two into a single new
    callback, dt_ops.finalize(). This new callback does whatever
    platform-dependent things are necessary to produce a final flat device
    tree blob, and returns the blob's addres.

    Second, the current logic calls the kernel with a flat device tree if
    one is build into the zImage wrapper, otherwise it boots the kernel
    with a PROM pointer, expecting the kernel to copy the OF device tree
    itself. This approach precludes the possibility of the platform
    wrapper code building a flat device tree from whatever
    platform-specific information firmware provides. Thus, this patch
    takes the more sensible approach of invoking the kernel with a flat
    tree if the dt_ops.finalize callback provides one (by whatever means).

    So, the dt_ops.finalize callback can be NULL, or can be a function
    which returns NULL. In either case, the zImage wrapper logic assumes
    that this is a platform with OF and invokes the kernel accordingly.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • This patch makes the handling of the initrd (or initramfs) in the
    zImage wrapper a little easier to follow. Instead of passing the
    initrd addresses out from prep_kernel() via the cryptic a1 and a2
    parameters, use the global struct add_range, 'initrd'. prep_kernel()
    already passes information through the 'vmlinux' addr_range struct, so
    this seems like a reasonable extension.

    Some comments also clarify the logic with prep_kernel(): we use an
    initrd included in the zImage if present, otherwise we use an initrd
    passed in by the bootloader in the a1 and a2 parameters (yaboot, at
    least, uses this mechanism to pass an initrd).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

18 Oct, 2006

1 commit

  • More reorganization of the bootwrapper:
    - Add dtb section to zImage
    - ft_init now called by platform_init
    - Pack a flat dt before calling kernel
    - Remove size parameter from free
    - printf only calls console_ops.write it its not NULL
    - Some cleanup

    Signed-off-by: Mark A. Greer
    Signed-off-by: Paul Mackerras

    Mark A. Greer
     

20 Sep, 2006

1 commit

  • This abstracts the operations used in the bootwrapper, and defines
    the operations needed for the bootwrapper to run on an OF platform.

    The operations have been divided up into platform ops (platform_ops),
    firmware ops (fw_ops), device tree ops (dt_ops), and console ops
    (console_ops).

    The proper operations will be hooked up at runtime to provide the
    functionality that you need.

    Signed-off-by: Mark A. Greer
    Signed-off-by: Paul Mackerras

    Mark A. Greer
     

15 Jun, 2006

1 commit


07 Feb, 2006

1 commit


14 Jan, 2006

1 commit


16 Nov, 2005

1 commit