Logo Search packages:      
Sourcecode: linux version File versions

cuboot-warp.c

/*
 * Copyright (c) 2008 PIKA Technologies
 *   Sean MacLennan <smaclennan@pikatech.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation.
 */

#include "ops.h"
#include "4xx.h"
#include "cuboot.h"
#include "stdio.h"

#define TARGET_4xx
#define TARGET_44x
#include "ppcboot.h"

static bd_t bd;

static void warp_fixup_one_nor(u32 from, u32 to)
{
      void *devp;
      char name[50];
      u32 v[2];

      sprintf(name, "/plb/opb/ebc/nor_flash@0,0/partition@%x", from);

      devp = finddevice(name);
      if (!devp)
            return;

      if (getprop(devp, "reg", v, sizeof(v)) == sizeof(v)) {
            v[0] = to;
            setprop(devp, "reg", v, sizeof(v));

            printf("NOR 64M fixup %x -> %x\r\n", from, to);
      }
}


static void warp_fixups(void)
{
      ibm440ep_fixup_clocks(66000000, 11059200, 50000000);
      ibm4xx_sdram_fixup_memsize();
      ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);

      /* Fixup for 64M flash on Rev A boards. */
      if (bd.bi_flashsize == 0x4000000) {
            void *devp;
            u32 v[3];

            devp = finddevice("/plb/opb/ebc/nor_flash@0,0");
            if (!devp)
                  return;

            /* Fixup the size */
            if (getprop(devp, "reg", v, sizeof(v)) == sizeof(v)) {
                  v[2] = bd.bi_flashsize;
                  setprop(devp, "reg", v, sizeof(v));
            }

            /* Fixup parition offsets */
            warp_fixup_one_nor(0x300000, 0x3f00000);
            warp_fixup_one_nor(0x340000, 0x3f40000);
            warp_fixup_one_nor(0x380000, 0x3f80000);
      }
}


void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
               unsigned long r6, unsigned long r7)
{
      CUBOOT_INIT();

      platform_ops.fixups = warp_fixups;
      platform_ops.exit = ibm44x_dbcr_reset;
      fdt_init(_dtb_start);
      serial_console_init();
}

Generated by  Doxygen 1.6.0   Back to index