You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (408 commits) [POWERPC] Add memchr() to the bootwrapper [POWERPC] Implement logging of unhandled signals [POWERPC] Add legacy serial support for OPB with flattened device tree [POWERPC] Use 1TB segments [POWERPC] XilinxFB: Allow fixed framebuffer base address [POWERPC] XilinxFB: Add support for custom screen resolution [POWERPC] XilinxFB: Use pdata to pass around framebuffer parameters [POWERPC] PCI: Add 64-bit physical address support to setup_indirect_pci [POWERPC] 4xx: Kilauea defconfig file [POWERPC] 4xx: Kilauea DTS [POWERPC] 4xx: Add AMCC Kilauea eval board support to platforms/40x [POWERPC] 4xx: Add AMCC 405EX support to cputable.c [POWERPC] Adjust TASK_SIZE on ppc32 systems to 3GB that are capable [POWERPC] Use PAGE_OFFSET to tell if an address is user/kernel in SW TLB handlers [POWERPC] 85xx: Enable FP emulation in MPC8560 ADS defconfig [POWERPC] 85xx: Killed <asm/mpc85xx.h> [POWERPC] 85xx: Add cpm nodes for 8541/8555 CDS [POWERPC] 85xx: Convert mpc8560ads to the new CPM binding. [POWERPC] mpc8272ads: Remove muram from the CPM reg property. [POWERPC] Make clockevents work on PPC601 processors ... Fixed up conflict in Documentation/powerpc/booting-without-of.txt manually.
This commit is contained in:
+43
-7
@@ -14,6 +14,11 @@ config 64BIT
|
||||
bool
|
||||
default y if PPC64
|
||||
|
||||
config WORD_SIZE
|
||||
int
|
||||
default 64 if PPC64
|
||||
default 32 if !PPC64
|
||||
|
||||
config PPC_MERGE
|
||||
def_bool y
|
||||
|
||||
@@ -21,6 +26,18 @@ config MMU
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CMOS_UPDATE
|
||||
def_bool y
|
||||
|
||||
config GENERIC_TIME
|
||||
def_bool y
|
||||
|
||||
config GENERIC_TIME_VSYSCALL
|
||||
def_bool y
|
||||
|
||||
config GENERIC_CLOCKEVENTS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
@@ -156,6 +173,7 @@ config HIGHMEM
|
||||
bool "High memory support"
|
||||
depends on PPC32
|
||||
|
||||
source kernel/time/Kconfig
|
||||
source kernel/Kconfig.hz
|
||||
source kernel/Kconfig.preempt
|
||||
source "fs/Kconfig.binfmt"
|
||||
@@ -180,17 +198,29 @@ config MATH_EMULATION
|
||||
unit, which will allow programs that use floating-point
|
||||
instructions to run.
|
||||
|
||||
config 8XX_MINIMAL_FPEMU
|
||||
bool "Minimal math emulation for 8xx"
|
||||
depends on 8xx && !MATH_EMULATION
|
||||
help
|
||||
Older arch/ppc kernels still emulated a few floating point
|
||||
instructions such as load and store, even when full math
|
||||
emulation is disabled. Say "Y" here if you want to preserve
|
||||
this behavior.
|
||||
|
||||
It is recommended that you build a soft-float userspace instead.
|
||||
|
||||
config IOMMU_VMERGE
|
||||
bool "Enable IOMMU virtual merging (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && PPC64
|
||||
default n
|
||||
bool "Enable IOMMU virtual merging"
|
||||
depends on PPC64
|
||||
default y
|
||||
help
|
||||
Cause IO segments sent to a device for DMA to be merged virtually
|
||||
by the IOMMU when they happen to have been allocated contiguously.
|
||||
This doesn't add pressure to the IOMMU allocator. However, some
|
||||
drivers don't support getting large merged segments coming back
|
||||
from *_map_sg(). Say Y if you know the drivers you are using are
|
||||
properly handling this case.
|
||||
from *_map_sg().
|
||||
|
||||
Most drivers don't have this problem; it is safe to say Y here.
|
||||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for enabling/disabling CPUs"
|
||||
@@ -465,7 +495,7 @@ config PCI_8260
|
||||
|
||||
config 8260_PCI9
|
||||
bool "Enable workaround for MPC826x erratum PCI 9"
|
||||
depends on PCI_8260 && !ADS8272
|
||||
depends on PCI_8260 && !8272
|
||||
default y
|
||||
|
||||
choice
|
||||
@@ -569,7 +599,8 @@ config TASK_SIZE_BOOL
|
||||
|
||||
config TASK_SIZE
|
||||
hex "Size of user task space" if TASK_SIZE_BOOL
|
||||
default "0x80000000"
|
||||
default "0x80000000" if PPC_PREP || PPC_8xx
|
||||
default "0xc0000000"
|
||||
|
||||
config CONSISTENT_START_BOOL
|
||||
bool "Set custom consistent memory pool address"
|
||||
@@ -581,6 +612,7 @@ config CONSISTENT_START_BOOL
|
||||
|
||||
config CONSISTENT_START
|
||||
hex "Base virtual address of consistent memory pool" if CONSISTENT_START_BOOL
|
||||
default "0xfd000000" if (NOT_COHERENT_CACHE && 8xx)
|
||||
default "0xff100000" if NOT_COHERENT_CACHE
|
||||
|
||||
config CONSISTENT_SIZE_BOOL
|
||||
@@ -662,3 +694,7 @@ config KEYS_COMPAT
|
||||
default y
|
||||
|
||||
source "crypto/Kconfig"
|
||||
|
||||
config PPC_CLOCK
|
||||
bool
|
||||
default n
|
||||
|
||||
@@ -124,6 +124,16 @@ config IRQSTACKS
|
||||
for handling hard and soft interrupts. This can help avoid
|
||||
overflowing the process kernel stacks.
|
||||
|
||||
config VIRQ_DEBUG
|
||||
bool "Expose hardware/virtual IRQ mapping via debugfs"
|
||||
depends on DEBUG_FS && PPC_MERGE
|
||||
help
|
||||
This option will show the mapping relationship between hardware irq
|
||||
numbers and virtual irq numbers. The mapping is exposed via debugfs
|
||||
in the file powerpc/virq_mapping.
|
||||
|
||||
If you don't know what this means you don't need it.
|
||||
|
||||
config BDI_SWITCH
|
||||
bool "Include BDI-2000 user context switcher"
|
||||
depends on DEBUG_KERNEL && PPC32
|
||||
@@ -211,6 +221,15 @@ config PPC_EARLY_DEBUG_44x
|
||||
Select this to enable early debugging for IBM 44x chips via the
|
||||
inbuilt serial port.
|
||||
|
||||
config PPC_EARLY_DEBUG_CPM
|
||||
bool "Early serial debugging for Freescale CPM-based serial ports"
|
||||
depends on SERIAL_CPM
|
||||
select PIN_TLB if PPC_8xx
|
||||
help
|
||||
Select this to enable early debugging for Freescale chips
|
||||
using a CPM-based serial port. This assumes that the bootwrapper
|
||||
has run, and set up the CPM in a particular way.
|
||||
|
||||
endchoice
|
||||
|
||||
config PPC_EARLY_DEBUG_44x_PHYSLOW
|
||||
@@ -223,4 +242,16 @@ config PPC_EARLY_DEBUG_44x_PHYSHIGH
|
||||
depends PPC_EARLY_DEBUG_44x
|
||||
default "0x1"
|
||||
|
||||
config PPC_EARLY_DEBUG_CPM_ADDR
|
||||
hex "CPM UART early debug transmit descriptor address"
|
||||
depends on PPC_EARLY_DEBUG_CPM
|
||||
default "0xfa202008" if PPC_EP88XC
|
||||
default "0xf0000008" if CPM2
|
||||
default "0xff002008" if CPM1
|
||||
help
|
||||
This specifies the address of the transmit descriptor
|
||||
used for early debug output. Because it is needed before
|
||||
platform probing is done, all platforms selected must
|
||||
share the same address.
|
||||
|
||||
endmenu
|
||||
|
||||
+29
-27
@@ -35,11 +35,14 @@ endif
|
||||
|
||||
export CROSS32CC CROSS32AS CROSS32LD CROSS32AR CROSS32OBJCOPY
|
||||
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
|
||||
else
|
||||
KBUILD_DEFCONFIG := ppc64_defconfig
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_PPC64),y)
|
||||
OLDARCH := ppc64
|
||||
SZ := 64
|
||||
|
||||
new_nm := $(shell if $(NM) --help 2>&1 | grep -- '--synthetic' > /dev/null; then echo y; else echo n; fi)
|
||||
|
||||
@@ -49,22 +52,26 @@ endif
|
||||
|
||||
else
|
||||
OLDARCH := ppc
|
||||
SZ := 32
|
||||
endif
|
||||
|
||||
# It seems there are times we use this Makefile without
|
||||
# including the config file, but this replicates the old behaviour
|
||||
ifeq ($(CONFIG_WORD_SIZE),)
|
||||
CONFIG_WORD_SIZE := 32
|
||||
endif
|
||||
|
||||
UTS_MACHINE := $(OLDARCH)
|
||||
|
||||
ifeq ($(HAS_BIARCH),y)
|
||||
override AS += -a$(SZ)
|
||||
override LD += -m elf$(SZ)ppc
|
||||
override CC += -m$(SZ)
|
||||
override AR := GNUTARGET=elf$(SZ)-powerpc $(AR)
|
||||
override AS += -a$(CONFIG_WORD_SIZE)
|
||||
override LD += -m elf$(CONFIG_WORD_SIZE)ppc
|
||||
override CC += -m$(CONFIG_WORD_SIZE)
|
||||
override AR := GNUTARGET=elf$(CONFIG_WORD_SIZE)-powerpc $(AR)
|
||||
endif
|
||||
|
||||
LDFLAGS_vmlinux := -Bstatic
|
||||
|
||||
# The -Iarch/$(ARCH)/include is temporary while we are merging
|
||||
CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -Iarch/$(ARCH)/include
|
||||
CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
|
||||
AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
|
||||
CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc
|
||||
CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple
|
||||
@@ -72,11 +79,8 @@ CPPFLAGS += $(CPPFLAGS-y)
|
||||
AFLAGS += $(AFLAGS-y)
|
||||
CFLAGS += -msoft-float -pipe $(CFLAGS-y)
|
||||
CPP = $(CC) -E $(CFLAGS)
|
||||
# Temporary hack until we have migrated to asm-powerpc
|
||||
LINUXINCLUDE-$(CONFIG_PPC32) := -Iarch/$(ARCH)/include
|
||||
LINUXINCLUDE += $(LINUXINCLUDE-y)
|
||||
|
||||
CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__
|
||||
CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__
|
||||
|
||||
ifeq ($(CONFIG_PPC64),y)
|
||||
GCC_BROKEN_VEC := $(shell if [ $(call cc-version) -lt 0400 ] ; then echo "y"; fi)
|
||||
@@ -96,6 +100,10 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_TUNE_CELL),y)
|
||||
CFLAGS += $(call cc-option,-mtune=cell)
|
||||
endif
|
||||
|
||||
# No AltiVec instruction when building kernel
|
||||
CFLAGS += $(call cc-option,-mno-altivec)
|
||||
|
||||
@@ -120,10 +128,9 @@ cpu-as-$(CONFIG_E200) += -Wa,-me200
|
||||
AFLAGS += $(cpu-as-y)
|
||||
CFLAGS += $(cpu-as-y)
|
||||
|
||||
head-y := arch/powerpc/kernel/head_32.o
|
||||
head-$(CONFIG_PPC64) := arch/powerpc/kernel/head_64.o
|
||||
head-y := arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
|
||||
head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o
|
||||
head-$(CONFIG_4xx) := arch/powerpc/kernel/head_4xx.o
|
||||
head-$(CONFIG_40x) := arch/powerpc/kernel/head_40x.o
|
||||
head-$(CONFIG_44x) := arch/powerpc/kernel/head_44x.o
|
||||
head-$(CONFIG_FSL_BOOKE) := arch/powerpc/kernel/head_fsl_booke.o
|
||||
|
||||
@@ -166,25 +173,20 @@ define archhelp
|
||||
@echo ' *_defconfig - Select default config from arch/$(ARCH)/configs'
|
||||
endef
|
||||
|
||||
install:
|
||||
install: vdso_install
|
||||
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
|
||||
|
||||
vdso_install:
|
||||
ifeq ($(CONFIG_PPC64),y)
|
||||
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
|
||||
endif
|
||||
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso32 $@
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
archmrproper:
|
||||
$(Q)rm -rf arch/$(ARCH)/include
|
||||
|
||||
archprepare: checkbin
|
||||
|
||||
ifeq ($(CONFIG_PPC32),y)
|
||||
# Temporary hack until we have migrated to asm-powerpc
|
||||
include/asm: arch/$(ARCH)/include/asm
|
||||
arch/$(ARCH)/include/asm: FORCE
|
||||
$(Q)if [ ! -d arch/$(ARCH)/include ]; then mkdir -p arch/$(ARCH)/include; fi
|
||||
$(Q)ln -fsn $(srctree)/include/asm-$(OLDARCH) arch/$(ARCH)/include/asm
|
||||
endif
|
||||
|
||||
# Use the file '.tmp_gas_check' for binutils tests, as gas won't output
|
||||
# to stdout and these checks are run even on install targets.
|
||||
TOUT := .tmp_gas_check
|
||||
|
||||
@@ -18,14 +18,15 @@ kernel-vmlinux.strip.c
|
||||
kernel-vmlinux.strip.gz
|
||||
mktree
|
||||
uImage
|
||||
cuImage
|
||||
cuImage.bin.gz
|
||||
cuImage.elf
|
||||
cuImage.*
|
||||
treeImage.*
|
||||
zImage
|
||||
zImage.bin.*
|
||||
zImage.chrp
|
||||
zImage.coff
|
||||
zImage.coff.lds
|
||||
zImage.lds
|
||||
zImage.ep*
|
||||
zImage.*lds
|
||||
zImage.miboot
|
||||
zImage.pmac
|
||||
zImage.pseries
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright 2007 David Gibson, IBM Corporation.
|
||||
*
|
||||
* Based on earlier code:
|
||||
* Matt Porter <mporter@kernel.crashing.org>
|
||||
* Copyright 2002-2005 MontaVista Software Inc.
|
||||
*
|
||||
* Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
|
||||
* Copyright (c) 2003, 2004 Zultys Technologies
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <stddef.h>
|
||||
#include "types.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "ops.h"
|
||||
#include "reg.h"
|
||||
#include "dcr.h"
|
||||
|
||||
/* Read the 44x memory controller to get size of system memory. */
|
||||
void ibm44x_fixup_memsize(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long memsize, bank_config;
|
||||
|
||||
memsize = 0;
|
||||
for (i = 0; i < ARRAY_SIZE(sdram_bxcr); i++) {
|
||||
mtdcr(DCRN_SDRAM0_CFGADDR, sdram_bxcr[i]);
|
||||
bank_config = mfdcr(DCRN_SDRAM0_CFGDATA);
|
||||
|
||||
if (bank_config & SDRAM_CONFIG_BANK_ENABLE)
|
||||
memsize += SDRAM_CONFIG_BANK_SIZE(bank_config);
|
||||
}
|
||||
|
||||
dt_fixup_memory(0, memsize);
|
||||
}
|
||||
|
||||
#define SPRN_DBCR0 0x134
|
||||
#define DBCR0_RST_SYSTEM 0x30000000
|
||||
|
||||
void ibm44x_dbcr_reset(void)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
asm volatile (
|
||||
"mfspr %0,%1\n"
|
||||
"oris %0,%0,%2@h\n"
|
||||
"mtspr %1,%0"
|
||||
: "=&r"(tmp) : "i"(SPRN_DBCR0), "i"(DBCR0_RST_SYSTEM)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/* Read 4xx EBC bus bridge registers to get mappings of the peripheral
|
||||
* banks into the OPB address space */
|
||||
void ibm4xx_fixup_ebc_ranges(const char *ebc)
|
||||
{
|
||||
void *devp;
|
||||
u32 bxcr;
|
||||
u32 ranges[EBC_NUM_BANKS*4];
|
||||
u32 *p = ranges;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < EBC_NUM_BANKS; i++) {
|
||||
mtdcr(DCRN_EBC0_CFGADDR, EBC_BXCR(i));
|
||||
bxcr = mfdcr(DCRN_EBC0_CFGDATA);
|
||||
|
||||
if ((bxcr & EBC_BXCR_BU) != EBC_BXCR_BU_OFF) {
|
||||
*p++ = i;
|
||||
*p++ = 0;
|
||||
*p++ = bxcr & EBC_BXCR_BAS;
|
||||
*p++ = EBC_BXCR_BANK_SIZE(bxcr);
|
||||
}
|
||||
}
|
||||
|
||||
devp = finddevice(ebc);
|
||||
if (! devp)
|
||||
fatal("Couldn't locate EBC node %s\n\r", ebc);
|
||||
|
||||
setprop(devp, "ranges", ranges, (p - ranges) * sizeof(u32));
|
||||
}
|
||||
@@ -10,10 +10,7 @@
|
||||
#ifndef _PPC_BOOT_44X_H_
|
||||
#define _PPC_BOOT_44X_H_
|
||||
|
||||
void ibm44x_fixup_memsize(void);
|
||||
void ibm4xx_fixup_ebc_ranges(const char *ebc);
|
||||
|
||||
void ibm44x_dbcr_reset(void);
|
||||
void ebony_init(void *mac0, void *mac1);
|
||||
void bamboo_init(void *mac0, void *mac1);
|
||||
|
||||
#endif /* _PPC_BOOT_44X_H_ */
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
/*
|
||||
* Copyright 2007 David Gibson, IBM Corporation.
|
||||
*
|
||||
* Based on earlier code:
|
||||
* Matt Porter <mporter@kernel.crashing.org>
|
||||
* Copyright 2002-2005 MontaVista Software Inc.
|
||||
*
|
||||
* Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
|
||||
* Copyright (c) 2003, 2004 Zultys Technologies
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <stddef.h>
|
||||
#include "types.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "ops.h"
|
||||
#include "reg.h"
|
||||
#include "dcr.h"
|
||||
|
||||
/* Read the 4xx SDRAM controller to get size of system memory. */
|
||||
void ibm4xx_fixup_memsize(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long memsize, bank_config;
|
||||
|
||||
memsize = 0;
|
||||
for (i = 0; i < ARRAY_SIZE(sdram_bxcr); i++) {
|
||||
mtdcr(DCRN_SDRAM0_CFGADDR, sdram_bxcr[i]);
|
||||
bank_config = mfdcr(DCRN_SDRAM0_CFGDATA);
|
||||
|
||||
if (bank_config & SDRAM_CONFIG_BANK_ENABLE)
|
||||
memsize += SDRAM_CONFIG_BANK_SIZE(bank_config);
|
||||
}
|
||||
|
||||
dt_fixup_memory(0, memsize);
|
||||
}
|
||||
|
||||
/* 4xx DDR1/2 Denali memory controller support */
|
||||
/* DDR0 registers */
|
||||
#define DDR0_02 2
|
||||
#define DDR0_08 8
|
||||
#define DDR0_10 10
|
||||
#define DDR0_14 14
|
||||
#define DDR0_42 42
|
||||
#define DDR0_43 43
|
||||
|
||||
/* DDR0_02 */
|
||||
#define DDR_START 0x1
|
||||
#define DDR_START_SHIFT 0
|
||||
#define DDR_MAX_CS_REG 0x3
|
||||
#define DDR_MAX_CS_REG_SHIFT 24
|
||||
#define DDR_MAX_COL_REG 0xf
|
||||
#define DDR_MAX_COL_REG_SHIFT 16
|
||||
#define DDR_MAX_ROW_REG 0xf
|
||||
#define DDR_MAX_ROW_REG_SHIFT 8
|
||||
/* DDR0_08 */
|
||||
#define DDR_DDR2_MODE 0x1
|
||||
#define DDR_DDR2_MODE_SHIFT 0
|
||||
/* DDR0_10 */
|
||||
#define DDR_CS_MAP 0x3
|
||||
#define DDR_CS_MAP_SHIFT 8
|
||||
/* DDR0_14 */
|
||||
#define DDR_REDUC 0x1
|
||||
#define DDR_REDUC_SHIFT 16
|
||||
/* DDR0_42 */
|
||||
#define DDR_APIN 0x7
|
||||
#define DDR_APIN_SHIFT 24
|
||||
/* DDR0_43 */
|
||||
#define DDR_COL_SZ 0x7
|
||||
#define DDR_COL_SZ_SHIFT 8
|
||||
#define DDR_BANK8 0x1
|
||||
#define DDR_BANK8_SHIFT 0
|
||||
|
||||
#define DDR_GET_VAL(val, mask, shift) (((val) >> (shift)) & (mask))
|
||||
|
||||
static inline u32 mfdcr_sdram0(u32 reg)
|
||||
{
|
||||
mtdcr(DCRN_SDRAM0_CFGADDR, reg);
|
||||
return mfdcr(DCRN_SDRAM0_CFGDATA);
|
||||
}
|
||||
|
||||
void ibm4xx_denali_fixup_memsize(void)
|
||||
{
|
||||
u32 val, max_cs, max_col, max_row;
|
||||
u32 cs, col, row, bank, dpath;
|
||||
unsigned long memsize;
|
||||
|
||||
val = mfdcr_sdram0(DDR0_02);
|
||||
if (!DDR_GET_VAL(val, DDR_START, DDR_START_SHIFT))
|
||||
fatal("DDR controller is not initialized\n");
|
||||
|
||||
/* get maximum cs col and row values */
|
||||
max_cs = DDR_GET_VAL(val, DDR_MAX_CS_REG, DDR_MAX_CS_REG_SHIFT);
|
||||
max_col = DDR_GET_VAL(val, DDR_MAX_COL_REG, DDR_MAX_COL_REG_SHIFT);
|
||||
max_row = DDR_GET_VAL(val, DDR_MAX_ROW_REG, DDR_MAX_ROW_REG_SHIFT);
|
||||
|
||||
/* get CS value */
|
||||
val = mfdcr_sdram0(DDR0_10);
|
||||
|
||||
val = DDR_GET_VAL(val, DDR_CS_MAP, DDR_CS_MAP_SHIFT);
|
||||
cs = 0;
|
||||
while (val) {
|
||||
if (val && 0x1)
|
||||
cs++;
|
||||
val = val >> 1;
|
||||
}
|
||||
|
||||
if (!cs)
|
||||
fatal("No memory installed\n");
|
||||
if (cs > max_cs)
|
||||
fatal("DDR wrong CS configuration\n");
|
||||
|
||||
/* get data path bytes */
|
||||
val = mfdcr_sdram0(DDR0_14);
|
||||
|
||||
if (DDR_GET_VAL(val, DDR_REDUC, DDR_REDUC_SHIFT))
|
||||
dpath = 8; /* 64 bits */
|
||||
else
|
||||
dpath = 4; /* 32 bits */
|
||||
|
||||
/* get adress pins (rows) */
|
||||
val = mfdcr_sdram0(DDR0_42);
|
||||
|
||||
row = DDR_GET_VAL(val, DDR_APIN, DDR_APIN_SHIFT);
|
||||
if (row > max_row)
|
||||
fatal("DDR wrong APIN configuration\n");
|
||||
row = max_row - row;
|
||||
|
||||
/* get collomn size and banks */
|
||||
val = mfdcr_sdram0(DDR0_43);
|
||||
|
||||
col = DDR_GET_VAL(val, DDR_COL_SZ, DDR_COL_SZ_SHIFT);
|
||||
if (col > max_col)
|
||||
fatal("DDR wrong COL configuration\n");
|
||||
col = max_col - col;
|
||||
|
||||
if (DDR_GET_VAL(val, DDR_BANK8, DDR_BANK8_SHIFT))
|
||||
bank = 8; /* 8 banks */
|
||||
else
|
||||
bank = 4; /* 4 banks */
|
||||
|
||||
memsize = cs * (1 << (col+row)) * bank * dpath;
|
||||
dt_fixup_memory(0, memsize);
|
||||
}
|
||||
|
||||
#define SPRN_DBCR0_40X 0x3F2
|
||||
#define SPRN_DBCR0_44X 0x134
|
||||
#define DBCR0_RST_SYSTEM 0x30000000
|
||||
|
||||
void ibm44x_dbcr_reset(void)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
asm volatile (
|
||||
"mfspr %0,%1\n"
|
||||
"oris %0,%0,%2@h\n"
|
||||
"mtspr %1,%0"
|
||||
: "=&r"(tmp) : "i"(SPRN_DBCR0_44X), "i"(DBCR0_RST_SYSTEM)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
void ibm40x_dbcr_reset(void)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
asm volatile (
|
||||
"mfspr %0,%1\n"
|
||||
"oris %0,%0,%2@h\n"
|
||||
"mtspr %1,%0"
|
||||
: "=&r"(tmp) : "i"(SPRN_DBCR0_40X), "i"(DBCR0_RST_SYSTEM)
|
||||
);
|
||||
}
|
||||
|
||||
#define EMAC_RESET 0x20000000
|
||||
void ibm4xx_quiesce_eth(u32 *emac0, u32 *emac1)
|
||||
{
|
||||
/* Quiesce the MAL and EMAC(s) since PIBS/OpenBIOS don't do this for us */
|
||||
if (emac0)
|
||||
*emac0 = EMAC_RESET;
|
||||
if (emac1)
|
||||
*emac1 = EMAC_RESET;
|
||||
|
||||
mtdcr(DCRN_MAL0_CFG, MAL_RESET);
|
||||
}
|
||||
|
||||
/* Read 4xx EBC bus bridge registers to get mappings of the peripheral
|
||||
* banks into the OPB address space */
|
||||
void ibm4xx_fixup_ebc_ranges(const char *ebc)
|
||||
{
|
||||
void *devp;
|
||||
u32 bxcr;
|
||||
u32 ranges[EBC_NUM_BANKS*4];
|
||||
u32 *p = ranges;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < EBC_NUM_BANKS; i++) {
|
||||
mtdcr(DCRN_EBC0_CFGADDR, EBC_BXCR(i));
|
||||
bxcr = mfdcr(DCRN_EBC0_CFGDATA);
|
||||
|
||||
if ((bxcr & EBC_BXCR_BU) != EBC_BXCR_BU_OFF) {
|
||||
*p++ = i;
|
||||
*p++ = 0;
|
||||
*p++ = bxcr & EBC_BXCR_BAS;
|
||||
*p++ = EBC_BXCR_BANK_SIZE(bxcr);
|
||||
}
|
||||
}
|
||||
|
||||
devp = finddevice(ebc);
|
||||
if (! devp)
|
||||
fatal("Couldn't locate EBC node %s\n\r", ebc);
|
||||
|
||||
setprop(devp, "ranges", ranges, (p - ranges) * sizeof(u32));
|
||||
}
|
||||
|
||||
#define SPRN_CCR1 0x378
|
||||
void ibm440ep_fixup_clocks(unsigned int sysclk, unsigned int ser_clk)
|
||||
{
|
||||
u32 cpu, plb, opb, ebc, tb, uart0, m, vco;
|
||||
u32 reg;
|
||||
u32 fwdva, fwdvb, fbdv, lfbdv, opbdv0, perdv0, spcid0, prbdv0, tmp;
|
||||
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_PLLD0);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x000F0000) >> 16;
|
||||
fwdva = tmp ? tmp : 16;
|
||||
tmp = (reg & 0x00000700) >> 8;
|
||||
fwdvb = tmp ? tmp : 8;
|
||||
tmp = (reg & 0x1F000000) >> 24;
|
||||
fbdv = tmp ? tmp : 32;
|
||||
lfbdv = (reg & 0x0000007F);
|
||||
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_OPBD0);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x03000000) >> 24;
|
||||
opbdv0 = tmp ? tmp : 4;
|
||||
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_PERD0);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x07000000) >> 24;
|
||||
perdv0 = tmp ? tmp : 8;
|
||||
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_PRIMBD0);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x07000000) >> 24;
|
||||
prbdv0 = tmp ? tmp : 8;
|
||||
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_SCPID);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x03000000) >> 24;
|
||||
spcid0 = tmp ? tmp : 4;
|
||||
|
||||
/* Calculate M */
|
||||
mtdcr(DCRN_CPR0_ADDR, CPR0_PLLC0);
|
||||
reg = mfdcr(DCRN_CPR0_DATA);
|
||||
tmp = (reg & 0x03000000) >> 24;
|
||||
if (tmp == 0) { /* PLL output */
|
||||
tmp = (reg & 0x20000000) >> 29;
|
||||
if (!tmp) /* PLLOUTA */
|
||||
m = fbdv * lfbdv * fwdva;
|
||||
else
|
||||
m = fbdv * lfbdv * fwdvb;
|
||||
}
|
||||
else if (tmp == 1) /* CPU output */
|
||||
m = fbdv * fwdva;
|
||||
else
|
||||
m = perdv0 * opbdv0 * fwdvb;
|
||||
|
||||
vco = (m * sysclk) + (m >> 1);
|
||||
cpu = vco / fwdva;
|
||||
plb = vco / fwdvb / prbdv0;
|
||||
opb = plb / opbdv0;
|
||||
ebc = plb / perdv0;
|
||||
|
||||
/* FIXME */
|
||||
uart0 = ser_clk;
|
||||
|
||||
/* Figure out timebase. Either CPU or default TmrClk */
|
||||
asm volatile (
|
||||
"mfspr %0,%1\n"
|
||||
:
|
||||
"=&r"(reg) : "i"(SPRN_CCR1));
|
||||
if (reg & 0x0080)
|
||||
tb = 25000000; /* TmrClk is 25MHz */
|
||||
else
|
||||
tb = cpu;
|
||||
|
||||
dt_fixup_cpu_clocks(cpu, tb, 0);
|
||||
dt_fixup_clock("/plb", plb);
|
||||
dt_fixup_clock("/plb/opb", opb);
|
||||
dt_fixup_clock("/plb/opb/ebc", ebc);
|
||||
dt_fixup_clock("/plb/opb/serial@ef600300", uart0);
|
||||
dt_fixup_clock("/plb/opb/serial@ef600400", uart0);
|
||||
dt_fixup_clock("/plb/opb/serial@ef600500", uart0);
|
||||
dt_fixup_clock("/plb/opb/serial@ef600600", uart0);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* PowerPC 4xx related functions
|
||||
*
|
||||
* Copyright 2007 IBM Corporation.
|
||||
* Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
#ifndef _POWERPC_BOOT_4XX_H_
|
||||
#define _POWERPC_BOOT_4XX_H_
|
||||
|
||||
void ibm4xx_fixup_memsize(void);
|
||||
void ibm4xx_denali_fixup_memsize(void);
|
||||
void ibm44x_dbcr_reset(void);
|
||||
void ibm40x_dbcr_reset(void);
|
||||
void ibm4xx_quiesce_eth(u32 *emac0, u32 *emac1);
|
||||
void ibm4xx_fixup_ebc_ranges(const char *ebc);
|
||||
void ibm440ep_fixup_clocks(unsigned int sysclk, unsigned int ser_clk);
|
||||
|
||||
#endif /* _POWERPC_BOOT_4XX_H_ */
|
||||
@@ -25,14 +25,19 @@ BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-isystem $(shell $(CROSS32CC) -print-file-name=include)
|
||||
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
BOOTCFLAGS += -g
|
||||
endif
|
||||
|
||||
ifeq ($(call cc-option-yn, -fstack-protector),y)
|
||||
BOOTCFLAGS += -fno-stack-protector
|
||||
endif
|
||||
|
||||
BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj)
|
||||
|
||||
$(obj)/44x.o: BOOTCFLAGS += -mcpu=440
|
||||
$(obj)/4xx.o: BOOTCFLAGS += -mcpu=440
|
||||
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
|
||||
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
|
||||
|
||||
zlib := inffast.c inflate.c inftrees.c
|
||||
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
|
||||
@@ -44,10 +49,14 @@ $(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \
|
||||
src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \
|
||||
ns16550.c serial.c simple_alloc.c div64.S util.S \
|
||||
gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
|
||||
44x.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c
|
||||
src-plat := of.c cuboot-83xx.c cuboot-85xx.c holly.c \
|
||||
4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
|
||||
cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
|
||||
fsl-soc.c mpc8xx.c pq2.c
|
||||
src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \
|
||||
cuboot-ebony.c treeboot-ebony.c prpmc2800.c \
|
||||
ps3-head.S ps3-hvcall.S ps3.c
|
||||
ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
|
||||
cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \
|
||||
fixed-head.S ep88xc.c cuboot-hpc2.c
|
||||
src-boot := $(src-wlib) $(src-plat) empty.c
|
||||
|
||||
src-boot := $(addprefix $(obj)/, $(src-boot))
|
||||
@@ -139,9 +148,17 @@ image-$(CONFIG_PPC_ISERIES) += zImage.iseries
|
||||
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
|
||||
|
||||
ifneq ($(CONFIG_DEVICE_TREE),"")
|
||||
image-$(CONFIG_PPC_8xx) += cuImage.8xx
|
||||
image-$(CONFIG_PPC_EP88XC) += zImage.ep88xc
|
||||
image-$(CONFIG_8260) += cuImage.pq2
|
||||
image-$(CONFIG_PPC_MPC52xx) += cuImage.52xx
|
||||
image-$(CONFIG_PPC_83xx) += cuImage.83xx
|
||||
image-$(CONFIG_PPC_85xx) += cuImage.85xx
|
||||
image-$(CONFIG_MPC7448HPC2) += cuImage.hpc2
|
||||
image-$(CONFIG_EBONY) += treeImage.ebony cuImage.ebony
|
||||
image-$(CONFIG_BAMBOO) += treeImage.bamboo cuImage.bamboo
|
||||
image-$(CONFIG_SEQUOIA) += cuImage.sequoia
|
||||
image-$(CONFIG_WALNUT) += treeImage.walnut
|
||||
endif
|
||||
|
||||
# For 32-bit powermacs, build the COFF and miboot images
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright IBM Corporation, 2007
|
||||
* Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
*
|
||||
* Based on ebony wrapper:
|
||||
* Copyright 2007 David Gibson, IBM Corporation.
|
||||
*
|
||||
* Clocking code based on code by:
|
||||
* Stefan Roese <sr@denx.de>
|
||||
*
|
||||
* 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; version 2 of the License
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "types.h"
|
||||
#include "elf.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "page.h"
|
||||
#include "ops.h"
|
||||
#include "dcr.h"
|
||||
#include "4xx.h"
|
||||
#include "44x.h"
|
||||
|
||||
static u8 *bamboo_mac0, *bamboo_mac1;
|
||||
|
||||
static void bamboo_fixups(void)
|
||||
{
|
||||
unsigned long sysclk = 33333333;
|
||||
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200);
|
||||
ibm4xx_fixup_memsize();
|
||||
ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
|
||||
dt_fixup_mac_addresses(bamboo_mac0, bamboo_mac1);
|
||||
}
|
||||
|
||||
void bamboo_init(void *mac0, void *mac1)
|
||||
{
|
||||
platform_ops.fixups = bamboo_fixups;
|
||||
platform_ops.exit = ibm44x_dbcr_reset;
|
||||
bamboo_mac0 = mac0;
|
||||
bamboo_mac1 = mac1;
|
||||
ft_init(_dtb_start, 0, 32);
|
||||
serial_console_init();
|
||||
}
|
||||
@@ -0,0 +1,269 @@
|
||||
/*
|
||||
* CPM serial console support.
|
||||
*
|
||||
* Copyright 2007 Freescale Semiconductor, Inc.
|
||||
* Author: Scott Wood <scottwood@freescale.com>
|
||||
*
|
||||
* It is assumed that the firmware (or the platform file) has already set
|
||||
* up the port.
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
#include "io.h"
|
||||
#include "ops.h"
|
||||
|
||||
struct cpm_scc {
|
||||
u32 gsmrl;
|
||||
u32 gsmrh;
|
||||
u16 psmr;
|
||||
u8 res1[2];
|
||||
u16 todr;
|
||||
u16 dsr;
|
||||
u16 scce;
|
||||
u8 res2[2];
|
||||
u16 sccm;
|
||||
u8 res3;
|
||||
u8 sccs;
|
||||
u8 res4[8];
|
||||
};
|
||||
|
||||
struct cpm_smc {
|
||||
u8 res1[2];
|
||||
u16 smcmr;
|
||||
u8 res2[2];
|
||||
u8 smce;
|
||||
u8 res3[3];
|
||||
u8 smcm;
|
||||
u8 res4[5];
|
||||
};
|
||||
|
||||
struct cpm_param {
|
||||
u16 rbase;
|
||||
u16 tbase;
|
||||
u8 rfcr;
|
||||
u8 tfcr;
|
||||
};
|
||||
|
||||
struct cpm_bd {
|
||||
u16 sc; /* Status and Control */
|
||||
u16 len; /* Data length in buffer */
|
||||
u8 *addr; /* Buffer address in host memory */
|
||||
};
|
||||
|
||||
static void *cpcr;
|
||||
static struct cpm_param *param;
|
||||
static struct cpm_smc *smc;
|
||||
static struct cpm_scc *scc;
|
||||
struct cpm_bd *tbdf, *rbdf;
|
||||
static u32 cpm_cmd;
|
||||
static u8 *muram_start;
|
||||
static u32 muram_offset;
|
||||
|
||||
static void (*do_cmd)(int op);
|
||||
static void (*enable_port)(void);
|
||||
static void (*disable_port)(void);
|
||||
|
||||
#define CPM_CMD_STOP_TX 4
|
||||
#define CPM_CMD_RESTART_TX 6
|
||||
#define CPM_CMD_INIT_RX_TX 0
|
||||
|
||||
static void cpm1_cmd(int op)
|
||||
{
|
||||
while (in_be16(cpcr) & 1)
|
||||
;
|
||||
|
||||
out_be16(cpcr, (op << 8) | cpm_cmd | 1);
|
||||
|
||||
while (in_be16(cpcr) & 1)
|
||||
;
|
||||
}
|
||||
|
||||
static void cpm2_cmd(int op)
|
||||
{
|
||||
while (in_be32(cpcr) & 0x10000)
|
||||
;
|
||||
|
||||
out_be32(cpcr, op | cpm_cmd | 0x10000);
|
||||
|
||||
while (in_be32(cpcr) & 0x10000)
|
||||
;
|
||||
}
|
||||
|
||||
static void smc_disable_port(void)
|
||||
{
|
||||
do_cmd(CPM_CMD_STOP_TX);
|
||||
out_be16(&smc->smcmr, in_be16(&smc->smcmr) & ~3);
|
||||
}
|
||||
|
||||
static void scc_disable_port(void)
|
||||
{
|
||||
do_cmd(CPM_CMD_STOP_TX);
|
||||
out_be32(&scc->gsmrl, in_be32(&scc->gsmrl) & ~0x30);
|
||||
}
|
||||
|
||||
static void smc_enable_port(void)
|
||||
{
|
||||
out_be16(&smc->smcmr, in_be16(&smc->smcmr) | 3);
|
||||
do_cmd(CPM_CMD_RESTART_TX);
|
||||
}
|
||||
|
||||
static void scc_enable_port(void)
|
||||
{
|
||||
out_be32(&scc->gsmrl, in_be32(&scc->gsmrl) | 0x30);
|
||||
do_cmd(CPM_CMD_RESTART_TX);
|
||||
}
|
||||
|
||||
static int cpm_serial_open(void)
|
||||
{
|
||||
disable_port();
|
||||
|
||||
out_8(¶m->rfcr, 0x10);
|
||||
out_8(¶m->tfcr, 0x10);
|
||||
|
||||
rbdf = (struct cpm_bd *)muram_start;
|
||||
rbdf->addr = (u8 *)(rbdf + 2);
|
||||
rbdf->sc = 0xa000;
|
||||
rbdf->len = 1;
|
||||
|
||||
tbdf = rbdf + 1;
|
||||
tbdf->addr = (u8 *)(rbdf + 2) + 1;
|
||||
tbdf->sc = 0x2000;
|
||||
tbdf->len = 1;
|
||||
|
||||
sync();
|
||||
out_be16(¶m->rbase, muram_offset);
|
||||
out_be16(¶m->tbase, muram_offset + sizeof(struct cpm_bd));
|
||||
|
||||
do_cmd(CPM_CMD_INIT_RX_TX);
|
||||
|
||||
enable_port();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cpm_serial_putc(unsigned char c)
|
||||
{
|
||||
while (tbdf->sc & 0x8000)
|
||||
barrier();
|
||||
|
||||
sync();
|
||||
|
||||
tbdf->addr[0] = c;
|
||||
eieio();
|
||||
tbdf->sc |= 0x8000;
|
||||
}
|
||||
|
||||
static unsigned char cpm_serial_tstc(void)
|
||||
{
|
||||
barrier();
|
||||
return !(rbdf->sc & 0x8000);
|
||||
}
|
||||
|
||||
static unsigned char cpm_serial_getc(void)
|
||||
{
|
||||
unsigned char c;
|
||||
|
||||
while (!cpm_serial_tstc())
|
||||
;
|
||||
|
||||
sync();
|
||||
c = rbdf->addr[0];
|
||||
eieio();
|
||||
rbdf->sc |= 0x8000;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
int cpm_console_init(void *devp, struct serial_console_data *scdp)
|
||||
{
|
||||
void *reg_virt[2];
|
||||
int is_smc = 0, is_cpm2 = 0, n;
|
||||
unsigned long reg_phys;
|
||||
void *parent, *muram;
|
||||
|
||||
if (dt_is_compatible(devp, "fsl,cpm1-smc-uart")) {
|
||||
is_smc = 1;
|
||||
} else if (dt_is_compatible(devp, "fsl,cpm2-scc-uart")) {
|
||||
is_cpm2 = 1;
|
||||
} else if (dt_is_compatible(devp, "fsl,cpm2-smc-uart")) {
|
||||
is_cpm2 = 1;
|
||||
is_smc = 1;
|
||||
}
|
||||
|
||||
if (is_smc) {
|
||||
enable_port = smc_enable_port;
|
||||
disable_port = smc_disable_port;
|
||||
} else {
|
||||
enable_port = scc_enable_port;
|
||||
disable_port = scc_disable_port;
|
||||
}
|
||||
|
||||
if (is_cpm2)
|
||||
do_cmd = cpm2_cmd;
|
||||
else
|
||||
do_cmd = cpm1_cmd;
|
||||
|
||||
n = getprop(devp, "fsl,cpm-command", &cpm_cmd, 4);
|
||||
if (n < 4)
|
||||
return -1;
|
||||
|
||||
n = getprop(devp, "virtual-reg", reg_virt, sizeof(reg_virt));
|
||||
if (n < (int)sizeof(reg_virt)) {
|
||||
for (n = 0; n < 2; n++) {
|
||||
if (!dt_xlate_reg(devp, n, ®_phys, NULL))
|
||||
return -1;
|
||||
|
||||
reg_virt[n] = (void *)reg_phys;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_smc)
|
||||
smc = reg_virt[0];
|
||||
else
|
||||
scc = reg_virt[0];
|
||||
|
||||
param = reg_virt[1];
|
||||
|
||||
parent = get_parent(devp);
|
||||
if (!parent)
|
||||
return -1;
|
||||
|
||||
n = getprop(parent, "virtual-reg", reg_virt, sizeof(reg_virt));
|
||||
if (n < (int)sizeof(reg_virt)) {
|
||||
if (!dt_xlate_reg(parent, 0, ®_phys, NULL))
|
||||
return -1;
|
||||
|
||||
reg_virt[0] = (void *)reg_phys;
|
||||
}
|
||||
|
||||
cpcr = reg_virt[0];
|
||||
|
||||
muram = finddevice("/soc/cpm/muram/data");
|
||||
if (!muram)
|
||||
return -1;
|
||||
|
||||
/* For bootwrapper-compatible device trees, we assume that the first
|
||||
* entry has at least 18 bytes, and that #address-cells/#data-cells
|
||||
* is one for both parent and child.
|
||||
*/
|
||||
|
||||
n = getprop(muram, "virtual-reg", reg_virt, sizeof(reg_virt));
|
||||
if (n < (int)sizeof(reg_virt)) {
|
||||
if (!dt_xlate_reg(muram, 0, ®_phys, NULL))
|
||||
return -1;
|
||||
|
||||
reg_virt[0] = (void *)reg_phys;
|
||||
}
|
||||
|
||||
muram_start = reg_virt[0];
|
||||
|
||||
n = getprop(muram, "reg", &muram_offset, 4);
|
||||
if (n < 4)
|
||||
return -1;
|
||||
|
||||
scdp->open = cpm_serial_open;
|
||||
scdp->putc = cpm_serial_putc;
|
||||
scdp->getc = cpm_serial_getc;
|
||||
scdp->tstc = cpm_serial_tstc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Old U-boot compatibility for MPC5200
|
||||
*
|
||||
* Author: Grant Likely <grant.likely@secretlab.ca>
|
||||
*
|
||||
* Copyright (c) 2007 Secret Lab Technologies Ltd.
|
||||
* Copyright (c) 2007 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* 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 "stdio.h"
|
||||
#include "io.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_PPC_MPC52xx
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
void *soc, *reg;
|
||||
int div;
|
||||
u32 sysfreq;
|
||||
|
||||
|
||||
dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr);
|
||||
dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
|
||||
|
||||
/* Unfortunately, the specific model number is encoded in the
|
||||
* soc node name in existing dts files -- once that is fixed,
|
||||
* this can do a simple path lookup.
|
||||
*/
|
||||
soc = find_node_by_devtype(NULL, "soc");
|
||||
if (soc) {
|
||||
setprop(soc, "bus-frequency", &bd.bi_ipbfreq,
|
||||
sizeof(bd.bi_ipbfreq));
|
||||
|
||||
if (!dt_xlate_reg(soc, 0, (void*)®, NULL))
|
||||
return;
|
||||
div = in_8(reg + 0x204) & 0x0020 ? 8 : 4;
|
||||
sysfreq = bd.bi_busfreq * div;
|
||||
setprop(soc, "system-frequency", &sysfreq, sizeof(sysfreq));
|
||||
}
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
ft_init(_dtb_start, _dtb_end - _dtb_start, 32);
|
||||
serial_console_init();
|
||||
platform_ops.fixups = platform_fixups;
|
||||
}
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
extern char _dtb_start[], _dtb_end[];
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
extern char _dtb_start[], _dtb_end[];
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Old U-boot compatibility for 8xx
|
||||
*
|
||||
* Author: Scott Wood <scottwood@freescale.com>
|
||||
*
|
||||
* Copyright (c) 2007 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* 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 "stdio.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_8xx
|
||||
#define TARGET_HAS_ETH1
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
void *node;
|
||||
|
||||
dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
|
||||
dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 16, bd.bi_busfreq);
|
||||
|
||||
node = finddevice("/soc/cpm");
|
||||
if (node)
|
||||
setprop(node, "clock-frequency", &bd.bi_busfreq, 4);
|
||||
|
||||
node = finddevice("/soc/cpm/brg");
|
||||
if (node)
|
||||
setprop(node, "clock-frequency", &bd.bi_busfreq, 4);
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
ft_init(_dtb_start, _dtb_end - _dtb_start, 32);
|
||||
serial_console_init();
|
||||
platform_ops.fixups = platform_fixups;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Old U-boot compatibility for Bamboo
|
||||
*
|
||||
* Author: Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
*
|
||||
* Copyright 2007 IBM Corporation
|
||||
*
|
||||
* Based on cuboot-ebony.c
|
||||
*
|
||||
* 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 "stdio.h"
|
||||
#include "44x.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_44x
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
bamboo_init(&bd.bi_enetaddr, &bd.bi_enet1addr);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
|
||||
*
|
||||
* Author: Roy Zang <tie-fei.zang@freescale.com>
|
||||
*
|
||||
* Description:
|
||||
* Old U-boot compatibility for mpc7448hpc2 board
|
||||
* Based on the code of Scott Wood <scottwood@freescale.com>
|
||||
* for 83xx and 85xx.
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ops.h"
|
||||
#include "stdio.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_HAS_ETH1
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
extern char _dtb_start[], _dtb_end[];
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
void *tsi;
|
||||
|
||||
dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
|
||||
dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
|
||||
tsi = find_node_by_devtype(NULL, "tsi-bridge");
|
||||
if (tsi)
|
||||
setprop(tsi, "bus-frequency", &bd.bi_busfreq,
|
||||
sizeof(bd.bi_busfreq));
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
ft_init(_dtb_start, _dtb_end - _dtb_start, 32);
|
||||
serial_console_init();
|
||||
platform_ops.fixups = platform_fixups;
|
||||
}
|
||||
@@ -0,0 +1,261 @@
|
||||
/*
|
||||
* Old U-boot compatibility for PowerQUICC II
|
||||
* (a.k.a. 82xx with CPM, not the 8240 family of chips)
|
||||
*
|
||||
* Author: Scott Wood <scottwood@freescale.com>
|
||||
*
|
||||
* Copyright (c) 2007 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* 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 "stdio.h"
|
||||
#include "cuboot.h"
|
||||
#include "io.h"
|
||||
#include "fsl-soc.h"
|
||||
|
||||
#define TARGET_CPM2
|
||||
#define TARGET_HAS_ETH1
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
struct cs_range {
|
||||
u32 csnum;
|
||||
u32 base; /* must be zero */
|
||||
u32 addr;
|
||||
u32 size;
|
||||
};
|
||||
|
||||
struct pci_range {
|
||||
u32 flags;
|
||||
u32 pci_addr[2];
|
||||
u32 phys_addr;
|
||||
u32 size[2];
|
||||
};
|
||||
|
||||
struct cs_range cs_ranges_buf[MAX_PROP_LEN / sizeof(struct cs_range)];
|
||||
struct pci_range pci_ranges_buf[MAX_PROP_LEN / sizeof(struct pci_range)];
|
||||
|
||||
/* Different versions of u-boot put the BCSR in different places, and
|
||||
* some don't set up the PCI PIC at all, so we assume the device tree is
|
||||
* sane and update the BRx registers appropriately.
|
||||
*
|
||||
* For any node defined as compatible with fsl,pq2-localbus,
|
||||
* #address/#size must be 2/1 for the localbus, and 1/1 for the parent bus.
|
||||
* Ranges must be for whole chip selects.
|
||||
*/
|
||||
static void update_cs_ranges(void)
|
||||
{
|
||||
void *bus_node, *parent_node;
|
||||
u32 *ctrl_addr;
|
||||
unsigned long ctrl_size;
|
||||
u32 naddr, nsize;
|
||||
int len;
|
||||
int i;
|
||||
|
||||
bus_node = finddevice("/localbus");
|
||||
if (!bus_node || !dt_is_compatible(bus_node, "fsl,pq2-localbus"))
|
||||
return;
|
||||
|
||||
dt_get_reg_format(bus_node, &naddr, &nsize);
|
||||
if (naddr != 2 || nsize != 1)
|
||||
goto err;
|
||||
|
||||
parent_node = get_parent(bus_node);
|
||||
if (!parent_node)
|
||||
goto err;
|
||||
|
||||
dt_get_reg_format(parent_node, &naddr, &nsize);
|
||||
if (naddr != 1 || nsize != 1)
|
||||
goto err;
|
||||
|
||||
if (!dt_xlate_reg(bus_node, 0, (unsigned long *)&ctrl_addr,
|
||||
&ctrl_size))
|
||||
goto err;
|
||||
|
||||
len = getprop(bus_node, "ranges", cs_ranges_buf, sizeof(cs_ranges_buf));
|
||||
|
||||
for (i = 0; i < len / sizeof(struct cs_range); i++) {
|
||||
u32 base, option;
|
||||
int cs = cs_ranges_buf[i].csnum;
|
||||
if (cs >= ctrl_size / 8)
|
||||
goto err;
|
||||
|
||||
if (cs_ranges_buf[i].base != 0)
|
||||
goto err;
|
||||
|
||||
base = in_be32(&ctrl_addr[cs * 2]);
|
||||
|
||||
/* If CS is already valid, use the existing flags.
|
||||
* Otherwise, guess a sane default.
|
||||
*/
|
||||
if (base & 1) {
|
||||
base &= 0x7fff;
|
||||
option = in_be32(&ctrl_addr[cs * 2 + 1]) & 0x7fff;
|
||||
} else {
|
||||
base = 0x1801;
|
||||
option = 0x10;
|
||||
}
|
||||
|
||||
out_be32(&ctrl_addr[cs * 2], 0);
|
||||
out_be32(&ctrl_addr[cs * 2 + 1],
|
||||
option | ~(cs_ranges_buf[i].size - 1));
|
||||
out_be32(&ctrl_addr[cs * 2], base | cs_ranges_buf[i].addr);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
err:
|
||||
printf("Bad /localbus node\r\n");
|
||||
}
|
||||
|
||||
/* Older u-boots don't set PCI up properly. Update the hardware to match
|
||||
* the device tree. The prefetch mem region and non-prefetch mem region
|
||||
* must be contiguous in the host bus. As required by the PCI binding,
|
||||
* PCI #addr/#size must be 3/2. The parent bus must be 1/1. Only
|
||||
* 32-bit PCI is supported. All three region types (prefetchable mem,
|
||||
* non-prefetchable mem, and I/O) must be present.
|
||||
*/
|
||||
static void fixup_pci(void)
|
||||
{
|
||||
struct pci_range *mem = NULL, *mmio = NULL,
|
||||
*io = NULL, *mem_base = NULL;
|
||||
u32 *pci_regs[3];
|
||||
u8 *soc_regs;
|
||||
int i, len;
|
||||
void *node, *parent_node;
|
||||
u32 naddr, nsize, mem_log2;
|
||||
|
||||
node = finddevice("/pci");
|
||||
if (!node || !dt_is_compatible(node, "fsl,pq2-pci"))
|
||||
return;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
if (!dt_xlate_reg(node, i,
|
||||
(unsigned long *)&pci_regs[i], NULL))
|
||||
goto err;
|
||||
|
||||
soc_regs = (u8 *)fsl_get_immr();
|
||||
if (!soc_regs)
|
||||
goto err;
|
||||
|
||||
dt_get_reg_format(node, &naddr, &nsize);
|
||||
if (naddr != 3 || nsize != 2)
|
||||
goto err;
|
||||
|
||||
parent_node = get_parent(node);
|
||||
if (!parent_node)
|
||||
goto err;
|
||||
|
||||
dt_get_reg_format(parent_node, &naddr, &nsize);
|
||||
if (naddr != 1 || nsize != 1)
|
||||
goto err;
|
||||
|
||||
len = getprop(node, "ranges", pci_ranges_buf,
|
||||
sizeof(pci_ranges_buf));
|
||||
|
||||
for (i = 0; i < len / sizeof(struct pci_range); i++) {
|
||||
u32 flags = pci_ranges_buf[i].flags & 0x43000000;
|
||||
|
||||
if (flags == 0x42000000)
|
||||
mem = &pci_ranges_buf[i];
|
||||
else if (flags == 0x02000000)
|
||||
mmio = &pci_ranges_buf[i];
|
||||
else if (flags == 0x01000000)
|
||||
io = &pci_ranges_buf[i];
|
||||
}
|
||||
|
||||
if (!mem || !mmio || !io)
|
||||
goto err;
|
||||
|
||||
if (mem->phys_addr + mem->size[1] == mmio->phys_addr)
|
||||
mem_base = mem;
|
||||
else if (mmio->phys_addr + mmio->size[1] == mem->phys_addr)
|
||||
mem_base = mmio;
|
||||
else
|
||||
goto err;
|
||||
|
||||
out_be32(&pci_regs[1][0], mem_base->phys_addr | 1);
|
||||
out_be32(&pci_regs[2][0], ~(mem->size[1] + mmio->size[1] - 1));
|
||||
|
||||
out_be32(&pci_regs[1][1], io->phys_addr | 1);
|
||||
out_be32(&pci_regs[2][1], ~(io->size[1] - 1));
|
||||
|
||||
out_le32(&pci_regs[0][0], mem->pci_addr[1] >> 12);
|
||||
out_le32(&pci_regs[0][2], mem->phys_addr >> 12);
|
||||
out_le32(&pci_regs[0][4], (~(mem->size[1] - 1) >> 12) | 0xa0000000);
|
||||
|
||||
out_le32(&pci_regs[0][6], mmio->pci_addr[1] >> 12);
|
||||
out_le32(&pci_regs[0][8], mmio->phys_addr >> 12);
|
||||
out_le32(&pci_regs[0][10], (~(mmio->size[1] - 1) >> 12) | 0x80000000);
|
||||
|
||||
out_le32(&pci_regs[0][12], io->pci_addr[1] >> 12);
|
||||
out_le32(&pci_regs[0][14], io->phys_addr >> 12);
|
||||
out_le32(&pci_regs[0][16], (~(io->size[1] - 1) >> 12) | 0xc0000000);
|
||||
|
||||
/* Inbound translation */
|
||||
out_le32(&pci_regs[0][58], 0);
|
||||
out_le32(&pci_regs[0][60], 0);
|
||||
|
||||
mem_log2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1);
|
||||
out_le32(&pci_regs[0][62], 0xa0000000 | ~((1 << (mem_log2 - 12)) - 1));
|
||||
|
||||
/* If PCI is disabled, drive RST high to enable. */
|
||||
if (!(in_le32(&pci_regs[0][32]) & 1)) {
|
||||
/* Tpvrh (Power valid to RST# high) 100 ms */
|
||||
udelay(100000);
|
||||
|
||||
out_le32(&pci_regs[0][32], 1);
|
||||
|
||||
/* Trhfa (RST# high to first cfg access) 2^25 clocks */
|
||||
udelay(1020000);
|
||||
}
|
||||
|
||||
/* Enable bus master and memory access */
|
||||
out_le32(&pci_regs[0][64], 0x80000004);
|
||||
out_le32(&pci_regs[0][65], in_le32(&pci_regs[0][65]) | 6);
|
||||
|
||||
/* Park the bus on PCI, and elevate PCI's arbitration priority,
|
||||
* as required by section 9.6 of the user's manual.
|
||||
*/
|
||||
out_8(&soc_regs[0x10028], 3);
|
||||
out_be32((u32 *)&soc_regs[0x1002c], 0x01236745);
|
||||
|
||||
return;
|
||||
|
||||
err:
|
||||
printf("Bad PCI node\r\n");
|
||||
}
|
||||
|
||||
static void pq2_platform_fixups(void)
|
||||
{
|
||||
void *node;
|
||||
|
||||
dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
|
||||
dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
|
||||
|
||||
node = finddevice("/soc/cpm");
|
||||
if (node)
|
||||
setprop(node, "clock-frequency", &bd.bi_cpmfreq, 4);
|
||||
|
||||
node = finddevice("/soc/cpm/brg");
|
||||
if (node)
|
||||
setprop(node, "clock-frequency", &bd.bi_brgfreq, 4);
|
||||
|
||||
update_cs_ranges();
|
||||
fixup_pci();
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
ft_init(_dtb_start, _dtb_end - _dtb_start, 32);
|
||||
serial_console_init();
|
||||
platform_ops.fixups = pq2_platform_fixups;
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Old U-boot compatibility for Sequoia
|
||||
*
|
||||
* Valentine Barshak <vbarshak@ru.mvista.com>
|
||||
* Copyright 2007 MontaVista Software, Inc
|
||||
*
|
||||
* Based on Ebony code by David Gibson <david@gibson.dropbear.id.au>
|
||||
* Copyright IBM Corporation, 2007
|
||||
*
|
||||
* Based on Bamboo code by Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
* Copyright IBM Corporation, 2007
|
||||
*
|
||||
* 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; version 2 of the License
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "types.h"
|
||||
#include "elf.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "page.h"
|
||||
#include "ops.h"
|
||||
#include "dcr.h"
|
||||
#include "4xx.h"
|
||||
#include "44x.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_4xx
|
||||
#define TARGET_44x
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
|
||||
static void sequoia_fixups(void)
|
||||
{
|
||||
unsigned long sysclk = 33333333;
|
||||
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200);
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
ibm4xx_denali_fixup_memsize();
|
||||
dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr);
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
CUBOOT_INIT();
|
||||
platform_ops.fixups = sequoia_fixups;
|
||||
platform_ops.exit = ibm44x_dbcr_reset;
|
||||
ft_init(_dtb_start, 0, 32);
|
||||
serial_console_init();
|
||||
}
|
||||
@@ -17,9 +17,6 @@
|
||||
|
||||
#include "ppcboot.h"
|
||||
|
||||
extern char _end[];
|
||||
extern char _dtb_start[], _dtb_end[];
|
||||
|
||||
void cuboot_init(unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7,
|
||||
unsigned long end_of_ram)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user