more ppc
This commit is contained in:
parent
d17a78e726
commit
3732abd09f
5 changed files with 236 additions and 0 deletions
2
src/mainboard/motorola/sandpoint/nvram/Config
Normal file
2
src/mainboard/motorola/sandpoint/nvram/Config
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
object bsp_nvram.o
|
||||
object nvram.o
|
||||
54
src/mainboard/motorola/sandpoint/nvram/bsp_nvram.c
Normal file
54
src/mainboard/motorola/sandpoint/nvram/bsp_nvram.c
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* (C) Copyright 2001
|
||||
* Humboldt Solutions Ltd, adrian@humboldt.co.uk.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include "../nvram.h"
|
||||
|
||||
static unsigned bsp_size(struct nvram_device *data)
|
||||
{
|
||||
return 8 * 1024;
|
||||
}
|
||||
|
||||
static int bsp_read_block(struct nvram_device *dev, unsigned offset,
|
||||
unsigned char *data, unsigned length)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for(i = 0; i < length; i++)
|
||||
{
|
||||
outb(((offset + i) >> 8) & 0xff, 0x74);
|
||||
outb((offset + i) & 0xff, 0x75);
|
||||
data[i] = inb(0x76);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
static int bsp_write_byte(struct nvram_device *data, unsigned offset, unsigned char byte)
|
||||
{
|
||||
outb((offset >> 8) & 0xff, 0x74);
|
||||
outb(offset & 0xff, 0x75);
|
||||
outb(byte, 0x76);
|
||||
return 1;
|
||||
}
|
||||
|
||||
nvram_device bsp_nvram = {
|
||||
bsp_size, bsp_read_block, bsp_write_byte, NULL, NULL
|
||||
};
|
||||
|
||||
103
src/mainboard/motorola/sandpoint/nvram/nvram.c
Normal file
103
src/mainboard/motorola/sandpoint/nvram/nvram.c
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/* $Id$ */
|
||||
/* Copyright 2000 AG Electronics Ltd. */
|
||||
/* This code is distributed without warranty under the GPL v2 (see COPYING) */
|
||||
|
||||
#include <types.h>
|
||||
#include <printk.h>
|
||||
#include <stdlib.h>
|
||||
#include "../nvram.h"
|
||||
|
||||
/* NVRAM layout
|
||||
*
|
||||
* Environment variable record runs:
|
||||
* [length]NAME=value[length]NAME=value[0]\0
|
||||
* A deleted variable is:
|
||||
* [length]\0AME=value
|
||||
*
|
||||
* When memory is full, we compact.
|
||||
*
|
||||
*/
|
||||
static nvram_device *nvram_dev = 0;
|
||||
static unsigned char *nvram_buffer = 0;
|
||||
static unsigned nvram_size = 0;
|
||||
static u8 nvram_csum = 0;
|
||||
#define NVRAM_INVALID (! nvram_dev)
|
||||
|
||||
static void update_device(unsigned i, unsigned char data)
|
||||
{
|
||||
if (i < nvram_size)
|
||||
{
|
||||
nvram_csum -= nvram_buffer[i];
|
||||
nvram_buffer[i] = data;
|
||||
nvram_dev->write_byte(nvram_dev, i, data);
|
||||
nvram_csum += data;
|
||||
}
|
||||
else
|
||||
printk_info("Offset %d out of range in nvram\n", i);
|
||||
}
|
||||
|
||||
static void update_csum(void)
|
||||
{
|
||||
nvram_dev->write_byte(nvram_dev, nvram_size, nvram_csum);
|
||||
if (nvram_dev->commit)
|
||||
nvram_dev->commit(nvram_dev);
|
||||
}
|
||||
|
||||
static void update_string_device(unsigned i, const unsigned char *data,
|
||||
unsigned len)
|
||||
{
|
||||
if (i + len < nvram_size)
|
||||
{
|
||||
unsigned j;
|
||||
for(j = 0; j < len; j++)
|
||||
{
|
||||
nvram_csum -= nvram_buffer[i];
|
||||
nvram_buffer[i] = *data;
|
||||
nvram_dev->write_byte(nvram_dev, i, *data);
|
||||
nvram_csum += *data;
|
||||
data++;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
printk_info("Offset %d out of range in nvram\n", i + len);
|
||||
}
|
||||
|
||||
int nvram_init (struct nvram_device *dev)
|
||||
{
|
||||
nvram_dev = dev;
|
||||
|
||||
if (! nvram_size)
|
||||
nvram_size = dev->size(dev) - 1;
|
||||
printk_info("NVRAM size is %d\n", nvram_size);
|
||||
if (!nvram_buffer)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
nvram_buffer = malloc (nvram_size);
|
||||
if (!nvram_buffer)
|
||||
return -1;
|
||||
|
||||
nvram_csum = 0;
|
||||
dev->read_block(dev, 0, nvram_buffer, nvram_size+1);
|
||||
for(i = 0; i < nvram_size; i++)
|
||||
nvram_csum += nvram_buffer[i];
|
||||
|
||||
if (nvram_csum != nvram_buffer[nvram_size])
|
||||
{
|
||||
printk_info("NVRAM checksum invalid - erasing\n");
|
||||
//update_device(0, 0);
|
||||
//update_csum();
|
||||
}
|
||||
}
|
||||
printk_info("Initialised nvram\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nvram_clear(void)
|
||||
{
|
||||
printk_info("Erasing NVRAM\n");
|
||||
update_device(0, 0);
|
||||
update_csum();
|
||||
}
|
||||
|
||||
9
src/pmc/altimus/mpc7410/Config
Normal file
9
src/pmc/altimus/mpc7410/Config
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
##
|
||||
## Include the secondary Configuration files
|
||||
##
|
||||
northbridge motorola/mpc107
|
||||
|
||||
##
|
||||
## Build the objects we have code for in this directory.
|
||||
##
|
||||
object mpc7410.o
|
||||
68
src/pmc/altimus/mpc7410/mpc7410.c
Normal file
68
src/pmc/altimus/mpc7410/mpc7410.c
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/* $Id$ */
|
||||
/* Copyright 2000 AG Electronics Ltd. */
|
||||
/* This code is distributed without warranty under the GPL v2 (see COPYING) */
|
||||
|
||||
#include <ppc.h>
|
||||
#include <ppcreg.h>
|
||||
#include <types.h>
|
||||
#include <string.h>
|
||||
#include <pci.h>
|
||||
#include <printk.h>
|
||||
|
||||
#define ONEMEG 0x00100000
|
||||
#define HALFMEG 0x00080000
|
||||
|
||||
unsigned long memory_base = 0;
|
||||
unsigned long memory_top = 0;
|
||||
unsigned long memory_size = 0;
|
||||
|
||||
//extern char __heap_end[];
|
||||
extern unsigned mpc107_config_memory(void);
|
||||
|
||||
unsigned config_memory(unsigned offset)
|
||||
{
|
||||
//extern char __start[];
|
||||
//extern char __bss_start[];
|
||||
//unsigned rom_image = (unsigned) __start & 0xfff00000;
|
||||
//unsigned physical = rom_image + offset;
|
||||
//unsigned codesize = (unsigned) __bss_start - rom_image;
|
||||
|
||||
#if 0
|
||||
/* At this point, DBAT 0 is memory, 1 is variable, 2 is the rom image,
|
||||
and 3 is IO. */
|
||||
ppc_set_io_dbat_reloc(2, rom_image, physical, ONEMEG);
|
||||
ppc_set_io_dbat (3, 0xf0000000, 0x10000000);
|
||||
if ( rom_image != physical )
|
||||
ppc_set_ibats_reloc(rom_image, physical, ONEMEG);
|
||||
else
|
||||
ppc_set_ibats(physical, ONEMEG);
|
||||
|
||||
printk_debug("bsp_init_memory...\n");
|
||||
#endif
|
||||
|
||||
ppc_setup_cpu(1); /* icache enable = 1 */
|
||||
//ppc_enable_mmu();
|
||||
|
||||
memory_size = mpc107_config_memory();
|
||||
|
||||
/* If we have some working RAM, we copy the code and rodata into it.
|
||||
* This allows us to reprogram the flash later. */
|
||||
#if 0
|
||||
if (memory_size)
|
||||
{
|
||||
unsigned onemeg = memory_size - ONEMEG;
|
||||
ppc_set_mem_dbat_reloc(1, onemeg, onemeg, ONEMEG);
|
||||
memcpy((void *)onemeg, (void *)rom_image, codesize);
|
||||
memset((void *)(onemeg + codesize), 0, ONEMEG - codesize);
|
||||
ppc_set_ibats_reloc2(rom_image, physical, onemeg, ONEMEG);
|
||||
ppc_set_mem_dbat_reloc(2, rom_image, onemeg, ONEMEG);
|
||||
make_coherent((void *)onemeg, ONEMEG);
|
||||
}
|
||||
|
||||
ppc_set_memory_dbat (memory_size);
|
||||
#endif
|
||||
|
||||
//ppc_enable_dcache ();
|
||||
|
||||
return memory_size;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue