diff options
| author | fishsoupisgood <github@madingley.org> | 2019-04-29 01:17:54 +0100 | 
|---|---|---|
| committer | fishsoupisgood <github@madingley.org> | 2019-05-27 03:43:43 +0100 | 
| commit | 3f2546b2ef55b661fd8dd69682b38992225e86f6 (patch) | |
| tree | 65ca85f13617aee1dce474596800950f266a456c /roms/u-boot/board/kup/kup4x | |
| download | qemu-master.tar.gz qemu-master.tar.bz2 qemu-master.zip  | |
Diffstat (limited to 'roms/u-boot/board/kup/kup4x')
| -rw-r--r-- | roms/u-boot/board/kup/kup4x/Makefile | 8 | ||||
| -rw-r--r-- | roms/u-boot/board/kup/kup4x/kup4x.c | 185 | ||||
| -rw-r--r-- | roms/u-boot/board/kup/kup4x/u-boot.lds | 82 | ||||
| -rw-r--r-- | roms/u-boot/board/kup/kup4x/u-boot.lds.debug | 121 | 
4 files changed, 396 insertions, 0 deletions
diff --git a/roms/u-boot/board/kup/kup4x/Makefile b/roms/u-boot/board/kup/kup4x/Makefile new file mode 100644 index 00000000..6945943d --- /dev/null +++ b/roms/u-boot/board/kup/kup4x/Makefile @@ -0,0 +1,8 @@ +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y	= kup4x.o ../common/flash.o ../common/kup.o ../common/load_sernum_ethaddr.o ../common/pcmcia.o diff --git a/roms/u-boot/board/kup/kup4x/kup4x.c b/roms/u-boot/board/kup/kup4x/kup4x.c new file mode 100644 index 00000000..0e51bd1c --- /dev/null +++ b/roms/u-boot/board/kup/kup4x/kup4x.c @@ -0,0 +1,185 @@ +/* + * (C) Copyright 2000-2004 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * Klaus Heydeck, Kieback & Peter GmbH & Co KG, heydeck@kieback-peter.de + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <mpc8xx.h> +#include <post.h> +#include "../common/kup.h" +#include <asm/io.h> + + +#define	_NOT_USED_	0xFFFFFFFF + +const uint sdram_table[] = { +	/* +	 * Single Read. (Offset 0 in UPMA RAM) +	 */ +	0x1F07FC04, 0xEEAEFC04, 0x11ADFC04, 0xEFBBBC00, +	0x1FF77C47,		/* last */ + +	/* +	 * SDRAM Initialization (offset 5 in UPMA RAM) +	 * +	 * This is no UPM entry point. The following definition uses +	 * the remaining space to establish an initialization +	 * sequence, which is executed by a RUN command. +	 * +	 */ +	0x1FF77C35, 0xEFEABC34, 0x1FB57C35,	/* last */ + +	/* +	 * Burst Read. (Offset 8 in UPMA RAM) +	 */ +	0x1F07FC04, 0xEEAEFC04, 0x10ADFC04, 0xF0AFFC00, +	0xF0AFFC00, 0xF1AFFC00, 0xEFBBBC00, 0x1FF77C47,	/* last */ +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + +	/* +	 * Single Write. (Offset 18 in UPMA RAM) +	 */ +	0x1F27FC04, 0xEEAEBC00, 0x01B93C04, 0x1FF77C47,	/* last */ +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + +	/* +	 * Burst Write. (Offset 20 in UPMA RAM) +	 */ +	0x1F07FC04, 0xEEAEBC00, 0x10AD7C00, 0xF0AFFC00, +	0xF0AFFC00, 0xE1BBBC04, 0x1FF77C47,	/* last */ +	_NOT_USED_, +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + +	/* +	 * Refresh  (Offset 30 in UPMA RAM) +	 */ +	0x1FF5FC84, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, +	0xFFFFFC84, 0xFFFFFC07,	/* last */ +	_NOT_USED_, _NOT_USED_, +	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + +	/* +	 * Exception. (Offset 3c in UPMA RAM) +	 */ +	0x7FFFFC07,		/* last */ +	_NOT_USED_, _NOT_USED_, _NOT_USED_, +}; + + +/* + * Check Board Identity: + */ + +int checkboard(void) +{ +	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; +	volatile memctl8xx_t *memctl = &immap->im_memctl; +	uchar latch, rev, mod; + +	/* +	 * Init ChipSelect #4 (CAN + HW-Latch) +	 */ +	out_be32(&memctl->memc_or4, 0xFFFF8926); +	out_be32(&memctl->memc_br4, 0x90000401); + +	latch = in_8( (unsigned char *) LATCH_ADDR); +	rev = (latch & 0xF8) >> 3; +	mod = (latch & 0x03); + +	printf("Board: KUP4X Rev %d.%d\n", rev, mod); + +	return 0; +} + + +phys_size_t initdram(int board_type) +{ +	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; +	volatile memctl8xx_t *memctl = &immap->im_memctl; + +	upmconfig(UPMA, (uint *) sdram_table, +		   sizeof (sdram_table) / sizeof (uint)); + +	out_be16(&memctl->memc_mptpr, CONFIG_SYS_MPTPR); + +	out_be32(&memctl->memc_mar, 0x00000088); + +	out_be32(&memctl->memc_mamr, +		 CONFIG_SYS_MAMR & (~(MAMR_PTAE))); /* no refresh yet */ + +	udelay(200); + +	/* perform SDRAM initializsation sequence */ + +	/* SDRAM bank 0 */ +	out_be32(&memctl->memc_mcr, 0x80002105); +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80002830); /* execute twice */ +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80002106); /* RUN MRS Pattern from loc 6 */ +	udelay(1); + +	/* SDRAM bank 1 */ +	out_be32(&memctl->memc_mcr, 0x80004105); +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80004830); /* execute twice */ +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80004106); /* RUN MRS Pattern from loc 6 */ +	udelay(1); + +	/* SDRAM bank 2 */ +	out_be32(&memctl->memc_mcr, 0x80006105); +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80006830); /* execute twice */ +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x80006106); /* RUN MRS Pattern from loc 6 */ +	udelay(1); + +	/* SDRAM bank 3 */ +	out_be32(&memctl->memc_mcr, 0x8000C105); +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x8000C830); /* execute twice */ +	udelay(1); +	out_be32(&memctl->memc_mcr, 0x8000C106); /* RUN MRS Pattern from loc 6 */ +	udelay(1); + +	setbits_be32(&memctl->memc_mamr, MAMR_PTAE); /* enable refresh */ + +	udelay(1000); +	/* 4 x 16 MB */ +	out_be16(&memctl->memc_mptpr, CONFIG_SYS_MPTPR); +	udelay(1000); +	out_be32(&memctl->memc_or1, 0xFF000A00); +	out_be32(&memctl->memc_br1, 0x00000081); +	out_be32(&memctl->memc_or2, 0xFE000A00); +	out_be32(&memctl->memc_br2, 0x01000081); +	out_be32(&memctl->memc_or3, 0xFD000A00); +	out_be32(&memctl->memc_br3, 0x02000081); +	out_be32(&memctl->memc_or6, 0xFC000A00); +	out_be32(&memctl->memc_br6, 0x03000081); +	udelay(10000); + +	return (4 * 16 * 1024 * 1024); +} + +int misc_init_r(void) +{ +	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; + +#ifdef CONFIG_IDE_LED +	/* Configure PA8 as output port */ +	setbits_be16(&immap->im_ioport.iop_padir, PA_8); +	setbits_be16(&immap->im_ioport.iop_paodr, PA_8); +	clrbits_be16(&immap->im_ioport.iop_papar, PA_8); +	setbits_be16(&immap->im_ioport.iop_padat, PA_8); /* turn it off */ +#endif +	load_sernum_ethaddr(); +	setenv("hw", "4x"); +	poweron_key(); +	return 0; +} diff --git a/roms/u-boot/board/kup/kup4x/u-boot.lds b/roms/u-boot/board/kup/kup4x/u-boot.lds new file mode 100644 index 00000000..0eb2fba0 --- /dev/null +++ b/roms/u-boot/board/kup/kup4x/u-boot.lds @@ -0,0 +1,82 @@ +/* + * (C) Copyright 2000-2010 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +OUTPUT_ARCH(powerpc) + +SECTIONS +{ +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .text      : +  { +    arch/powerpc/cpu/mpc8xx/start.o	(.text*) +    arch/powerpc/cpu/mpc8xx/traps.o	(.text*) + +    *(.text*) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) +  } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    _GOT2_TABLE_ = .; +    KEEP(*(.got2)) +    KEEP(*(.got)) +    PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4); +    _FIXUP_TABLE_ = .; +    KEEP(*(.fixup)) +  } +  __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1; +  __fixup_entries = (. - _FIXUP_TABLE_)>>2; + +  .data    : +  { +    *(.data*) +    *(.sdata*) +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; + +  . = ALIGN(4); +  .u_boot_list : { +	KEEP(*(SORT(.u_boot_list*))); +  } + + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss (NOLOAD)       : +  { +   *(.bss*) +   *(.sbss*) +   *(COMMON) +   . = ALIGN(4); +  } +  __bss_end = . ; +  PROVIDE (end = .); +} diff --git a/roms/u-boot/board/kup/kup4x/u-boot.lds.debug b/roms/u-boot/board/kup/kup4x/u-boot.lds.debug new file mode 100644 index 00000000..0ea27e87 --- /dev/null +++ b/roms/u-boot/board/kup/kup4x/u-boot.lds.debug @@ -0,0 +1,121 @@ +/* + * (C) Copyright 2000-2004 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +OUTPUT_ARCH(powerpc) +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text)	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data)	} +  .rel.rodata    : { *(.rel.rodata)	} +  .rela.rodata   : { *(.rela.rodata)	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + +    arch/powerpc/cpu/mpc8xx/start.o	(.text) +    common/dlmalloc.o	(.text) +    lib/vsprintf.o	(.text) +    lib/crc32.o		(.text) + +    . = env_offset; +    common/env_embedded.o(.text) + +    *(.text) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x0FFF) & 0xFFFFF000; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; +  __fixup_entries = (. - _FIXUP_TABLE_)>>2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + + +  . = ALIGN(4); +  .u_boot_list : { +	KEEP(*(SORT(.u_boot_list*))); +  } + + +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(4096); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(4096); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  __bss_end = . ; +  PROVIDE (end = .); +}  | 
