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: (202 commits) [POWERPC] Fix compile breakage for 64-bit UP configs [POWERPC] Define copy_siginfo_from_user32 [POWERPC] Add compat handler for PTRACE_GETSIGINFO [POWERPC] i2c: Fix build breakage introduced by OF helpers [POWERPC] Optimize fls64() on 64-bit processors [POWERPC] irqtrace support for 64-bit powerpc [POWERPC] Stacktrace support for lockdep [POWERPC] Move stackframe definitions to common header [POWERPC] Fix device-tree locking vs. interrupts [POWERPC] Make pci_bus_to_host()'s struct pci_bus * argument const [POWERPC] Remove unused __max_memory variable [POWERPC] Simplify xics direct/lpar irq_host setup [POWERPC] Use pseries_setup_i8259_cascade() in pseries_mpic_init_IRQ() [POWERPC] Turn xics_setup_8259_cascade() into a generic pseries_setup_i8259_cascade() [POWERPC] Move xics_setup_8259_cascade() into platforms/pseries/setup.c [POWERPC] Use asm-generic/bitops/find.h in bitops.h [POWERPC] 83xx: mpc8315 - fix USB UTMI Host setup [POWERPC] 85xx: Fix the size of qe muram for MPC8568E [POWERPC] 86xx: mpc86xx_hpcn - Temporarily accept old dts node identifier. [POWERPC] 86xx: mark functions static, other minor cleanups ...
This commit is contained in:
@@ -954,6 +954,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
l2cr= [PPC]
|
||||
|
||||
l3cr= [PPC]
|
||||
|
||||
lapic [X86-32,APIC] Enable the local APIC even if BIOS
|
||||
disabled it.
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,127 @@
|
||||
|
||||
Hypervisor-Assisted Dump
|
||||
------------------------
|
||||
November 2007
|
||||
|
||||
The goal of hypervisor-assisted dump is to enable the dump of
|
||||
a crashed system, and to do so from a fully-reset system, and
|
||||
to minimize the total elapsed time until the system is back
|
||||
in production use.
|
||||
|
||||
As compared to kdump or other strategies, hypervisor-assisted
|
||||
dump offers several strong, practical advantages:
|
||||
|
||||
-- Unlike kdump, the system has been reset, and loaded
|
||||
with a fresh copy of the kernel. In particular,
|
||||
PCI and I/O devices have been reinitialized and are
|
||||
in a clean, consistent state.
|
||||
-- As the dump is performed, the dumped memory becomes
|
||||
immediately available to the system for normal use.
|
||||
-- After the dump is completed, no further reboots are
|
||||
required; the system will be fully usable, and running
|
||||
in it's normal, production mode on it normal kernel.
|
||||
|
||||
The above can only be accomplished by coordination with,
|
||||
and assistance from the hypervisor. The procedure is
|
||||
as follows:
|
||||
|
||||
-- When a system crashes, the hypervisor will save
|
||||
the low 256MB of RAM to a previously registered
|
||||
save region. It will also save system state, system
|
||||
registers, and hardware PTE's.
|
||||
|
||||
-- After the low 256MB area has been saved, the
|
||||
hypervisor will reset PCI and other hardware state.
|
||||
It will *not* clear RAM. It will then launch the
|
||||
bootloader, as normal.
|
||||
|
||||
-- The freshly booted kernel will notice that there
|
||||
is a new node (ibm,dump-kernel) in the device tree,
|
||||
indicating that there is crash data available from
|
||||
a previous boot. It will boot into only 256MB of RAM,
|
||||
reserving the rest of system memory.
|
||||
|
||||
-- Userspace tools will parse /sys/kernel/release_region
|
||||
and read /proc/vmcore to obtain the contents of memory,
|
||||
which holds the previous crashed kernel. The userspace
|
||||
tools may copy this info to disk, or network, nas, san,
|
||||
iscsi, etc. as desired.
|
||||
|
||||
For Example: the values in /sys/kernel/release-region
|
||||
would look something like this (address-range pairs).
|
||||
CPU:0x177fee000-0x10000: HPTE:0x177ffe020-0x1000: /
|
||||
DUMP:0x177fff020-0x10000000, 0x10000000-0x16F1D370A
|
||||
|
||||
-- As the userspace tools complete saving a portion of
|
||||
dump, they echo an offset and size to
|
||||
/sys/kernel/release_region to release the reserved
|
||||
memory back to general use.
|
||||
|
||||
An example of this is:
|
||||
"echo 0x40000000 0x10000000 > /sys/kernel/release_region"
|
||||
which will release 256MB at the 1GB boundary.
|
||||
|
||||
Please note that the hypervisor-assisted dump feature
|
||||
is only available on Power6-based systems with recent
|
||||
firmware versions.
|
||||
|
||||
Implementation details:
|
||||
----------------------
|
||||
|
||||
During boot, a check is made to see if firmware supports
|
||||
this feature on this particular machine. If it does, then
|
||||
we check to see if a active dump is waiting for us. If yes
|
||||
then everything but 256 MB of RAM is reserved during early
|
||||
boot. This area is released once we collect a dump from user
|
||||
land scripts that are run. If there is dump data, then
|
||||
the /sys/kernel/release_region file is created, and
|
||||
the reserved memory is held.
|
||||
|
||||
If there is no waiting dump data, then only the highest
|
||||
256MB of the ram is reserved as a scratch area. This area
|
||||
is *not* released: this region will be kept permanently
|
||||
reserved, so that it can act as a receptacle for a copy
|
||||
of the low 256MB in the case a crash does occur. See,
|
||||
however, "open issues" below, as to whether
|
||||
such a reserved region is really needed.
|
||||
|
||||
Currently the dump will be copied from /proc/vmcore to a
|
||||
a new file upon user intervention. The starting address
|
||||
to be read and the range for each data point in provided
|
||||
in /sys/kernel/release_region.
|
||||
|
||||
The tools to examine the dump will be same as the ones
|
||||
used for kdump.
|
||||
|
||||
General notes:
|
||||
--------------
|
||||
Security: please note that there are potential security issues
|
||||
with any sort of dump mechanism. In particular, plaintext
|
||||
(unencrypted) data, and possibly passwords, may be present in
|
||||
the dump data. Userspace tools must take adequate precautions to
|
||||
preserve security.
|
||||
|
||||
Open issues/ToDo:
|
||||
------------
|
||||
o The various code paths that tell the hypervisor that a crash
|
||||
occurred, vs. it simply being a normal reboot, should be
|
||||
reviewed, and possibly clarified/fixed.
|
||||
|
||||
o Instead of using /sys/kernel, should there be a /sys/dump
|
||||
instead? There is a dump_subsys being created by the s390 code,
|
||||
perhaps the pseries code should use a similar layout as well.
|
||||
|
||||
o Is reserving a 256MB region really required? The goal of
|
||||
reserving a 256MB scratch area is to make sure that no
|
||||
important crash data is clobbered when the hypervisor
|
||||
save low mem to the scratch area. But, if one could assure
|
||||
that nothing important is located in some 256MB area, then
|
||||
it would not need to be reserved. Something that can be
|
||||
improved in subsequent versions.
|
||||
|
||||
o Still working the kdump team to integrate this with kdump,
|
||||
some work remains but this would not affect the current
|
||||
patches.
|
||||
|
||||
o Still need to write a shell script, to copy the dump away.
|
||||
Currently I am parsing it manually.
|
||||
+57
-25
@@ -49,6 +49,19 @@ config IRQ_PER_CPU
|
||||
bool
|
||||
default y
|
||||
|
||||
config STACKTRACE_SUPPORT
|
||||
bool
|
||||
default y
|
||||
|
||||
config TRACE_IRQFLAGS_SUPPORT
|
||||
bool
|
||||
depends on PPC64
|
||||
default y
|
||||
|
||||
config LOCKDEP_SUPPORT
|
||||
bool
|
||||
default y
|
||||
|
||||
config RWSEM_GENERIC_SPINLOCK
|
||||
bool
|
||||
|
||||
@@ -81,6 +94,11 @@ config GENERIC_FIND_NEXT_BIT
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_GPIO
|
||||
bool
|
||||
help
|
||||
Generic GPIO API support
|
||||
|
||||
config ARCH_NO_VIRT_TO_BUS
|
||||
def_bool PPC64
|
||||
|
||||
@@ -91,6 +109,7 @@ config PPC
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_KPROBES
|
||||
select HAVE_KRETPROBES
|
||||
select HAVE_LMB
|
||||
|
||||
config EARLY_PRINTK
|
||||
bool
|
||||
@@ -210,15 +229,6 @@ source kernel/Kconfig.hz
|
||||
source kernel/Kconfig.preempt
|
||||
source "fs/Kconfig.binfmt"
|
||||
|
||||
# We optimistically allocate largepages from the VM, so make the limit
|
||||
# large enough (16MB). This badly named config option is actually
|
||||
# max order + 1
|
||||
config FORCE_MAX_ZONEORDER
|
||||
int
|
||||
depends on PPC64
|
||||
default "9" if PPC_64K_PAGES
|
||||
default "13"
|
||||
|
||||
config HUGETLB_PAGE_SIZE_VARIABLE
|
||||
bool
|
||||
depends on HUGETLB_PAGE
|
||||
@@ -307,6 +317,16 @@ config CRASH_DUMP
|
||||
|
||||
Don't change this unless you know what you are doing.
|
||||
|
||||
config PHYP_DUMP
|
||||
bool "Hypervisor-assisted dump (EXPERIMENTAL)"
|
||||
depends on PPC_PSERIES && EXPERIMENTAL
|
||||
help
|
||||
Hypervisor-assisted dump is meant to be a kdump replacement
|
||||
offering robustness and speed not possible without system
|
||||
hypervisor assistence.
|
||||
|
||||
If unsure, say "N"
|
||||
|
||||
config PPCBUG_NVRAM
|
||||
bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC
|
||||
default y if PPC_PREP
|
||||
@@ -381,6 +401,26 @@ config PPC_64K_PAGES
|
||||
while on hardware with such support, it will be used to map
|
||||
normal application pages.
|
||||
|
||||
config FORCE_MAX_ZONEORDER
|
||||
int "Maximum zone order"
|
||||
default "9" if PPC_64K_PAGES
|
||||
default "13" if PPC64 && !PPC_64K_PAGES
|
||||
default "11"
|
||||
help
|
||||
The kernel memory allocator divides physically contiguous memory
|
||||
blocks into "zones", where each zone is a power of two number of
|
||||
pages. This option selects the largest power of two that the kernel
|
||||
keeps in the memory allocator. If you need to allocate very large
|
||||
blocks of physically contiguous memory, then you may need to
|
||||
increase this value.
|
||||
|
||||
This config option is actually maximum order plus one. For example,
|
||||
a value of 11 means that the largest free memory block is 2^10 pages.
|
||||
|
||||
The page size is not necessarily 4KB. For example, on 64-bit
|
||||
systems, 64KB pages can be enabled via CONFIG_PPC_64K_PAGES. Keep
|
||||
this in mind when choosing a value for this option.
|
||||
|
||||
config PPC_SUBPAGE_PROT
|
||||
bool "Support setting protections for 4k subpages"
|
||||
depends on PPC_64K_PAGES
|
||||
@@ -490,6 +530,14 @@ config FSL_PCI
|
||||
bool
|
||||
select PPC_INDIRECT_PCI
|
||||
|
||||
config 4xx_SOC
|
||||
bool
|
||||
|
||||
config FSL_LBC
|
||||
bool
|
||||
help
|
||||
Freescale Localbus support
|
||||
|
||||
# Yes MCA RS/6000s exist but Linux-PPC does not currently support any
|
||||
config MCA
|
||||
bool
|
||||
@@ -663,22 +711,6 @@ config CONSISTENT_SIZE
|
||||
hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL
|
||||
default "0x00200000" if NOT_COHERENT_CACHE
|
||||
|
||||
config BOOT_LOAD_BOOL
|
||||
bool "Set the boot link/load address"
|
||||
depends on ADVANCED_OPTIONS && !PPC_MULTIPLATFORM
|
||||
help
|
||||
This option allows you to set the initial load address of the zImage
|
||||
or zImage.initrd file. This can be useful if you are on a board
|
||||
which has a small amount of memory.
|
||||
|
||||
Say N here unless you know what you are doing.
|
||||
|
||||
config BOOT_LOAD
|
||||
hex "Link/load address for booting" if BOOT_LOAD_BOOL
|
||||
default "0x00400000" if 40x || 8xx || 8260
|
||||
default "0x01000000" if 44x
|
||||
default "0x00800000"
|
||||
|
||||
config PIN_TLB
|
||||
bool "Pinned Kernel TLBs (860 ONLY)"
|
||||
depends on ADVANCED_OPTIONS && 8xx
|
||||
|
||||
@@ -269,7 +269,7 @@ 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 "0xf0001ff8" if CPM2
|
||||
default "0xff002008" if CPM1
|
||||
help
|
||||
This specifies the address of the transmit descriptor
|
||||
|
||||
@@ -71,13 +71,11 @@ endif
|
||||
|
||||
LDFLAGS_vmlinux := -Bstatic
|
||||
|
||||
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
|
||||
KBUILD_CPPFLAGS += $(CPPFLAGS-y)
|
||||
KBUILD_AFLAGS += $(AFLAGS-y)
|
||||
KBUILD_CFLAGS += -msoft-float -pipe $(CFLAGS-y)
|
||||
CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 -mmultiple
|
||||
KBUILD_CPPFLAGS += -Iarch/$(ARCH)
|
||||
KBUILD_AFLAGS += -Iarch/$(ARCH)
|
||||
KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y)
|
||||
CPP = $(CC) -E $(KBUILD_CFLAGS)
|
||||
|
||||
CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__
|
||||
@@ -164,7 +162,7 @@ boot := arch/$(ARCH)/boot
|
||||
$(BOOT_TARGETS): vmlinux
|
||||
$(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
|
||||
|
||||
bootwrapper_install:
|
||||
bootwrapper_install %.dtb:
|
||||
$(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
|
||||
|
||||
define archhelp
|
||||
|
||||
+27
-13
@@ -40,6 +40,7 @@ $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
|
||||
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
|
||||
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
|
||||
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
|
||||
$(obj)/virtex405-head.o: BOOTCFLAGS += -mcpu=405
|
||||
|
||||
|
||||
zlib := inffast.c inflate.c inftrees.c
|
||||
@@ -64,7 +65,8 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c
|
||||
cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
|
||||
fixed-head.S ep88xc.c ep405.c \
|
||||
cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
|
||||
cuboot-warp.c cuboot-85xx-cpm2.c
|
||||
cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
|
||||
virtex405-head.S
|
||||
src-boot := $(src-wlib) $(src-plat) empty.c
|
||||
|
||||
src-boot := $(addprefix $(obj)/, $(src-boot))
|
||||
@@ -192,7 +194,7 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp
|
||||
image-$(CONFIG_PPC_EFIKA) += zImage.chrp
|
||||
image-$(CONFIG_PPC_PMAC) += zImage.pmac
|
||||
image-$(CONFIG_PPC_HOLLY) += zImage.holly
|
||||
image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800
|
||||
image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800
|
||||
image-$(CONFIG_PPC_ISERIES) += zImage.iseries
|
||||
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
|
||||
|
||||
@@ -216,6 +218,7 @@ image-$(CONFIG_RAINIER) += cuImage.rainier
|
||||
image-$(CONFIG_TAISHAN) += cuImage.taishan
|
||||
image-$(CONFIG_KATMAI) += cuImage.katmai
|
||||
image-$(CONFIG_WARP) += cuImage.warp
|
||||
image-$(CONFIG_YOSEMITE) += cuImage.yosemite
|
||||
|
||||
# Board ports in arch/powerpc/platform/8xx/Kconfig
|
||||
image-$(CONFIG_PPC_MPC86XADS) += cuImage.mpc866ads
|
||||
@@ -255,6 +258,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm8555
|
||||
image-$(CONFIG_TQM8560) += cuImage.tqm8560
|
||||
image-$(CONFIG_SBC8548) += cuImage.sbc8548
|
||||
image-$(CONFIG_SBC8560) += cuImage.sbc8560
|
||||
image-$(CONFIG_KSI8560) += cuImage.ksi8560
|
||||
|
||||
# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
|
||||
image-$(CONFIG_STORCENTER) += cuImage.storcenter
|
||||
@@ -285,11 +289,11 @@ $(obj)/zImage.%: vmlinux $(wrapperbits)
|
||||
$(call if_changed,wrap,$*)
|
||||
|
||||
# dtbImage% - a dtbImage is a zImage with an embedded device tree blob
|
||||
$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(dtstree)/%.dts
|
||||
$(call if_changed,wrap,$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz)
|
||||
$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb
|
||||
$(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
|
||||
|
||||
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(dtstree)/%.dts
|
||||
$(call if_changed,wrap,$*,$(dtstree)/$*.dts)
|
||||
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
|
||||
$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
|
||||
|
||||
# This cannot be in the root of $(src) as the zImage rule always adds a $(obj)
|
||||
# prefix
|
||||
@@ -302,14 +306,24 @@ $(obj)/zImage.iseries: vmlinux
|
||||
$(obj)/uImage: vmlinux $(wrapperbits)
|
||||
$(call if_changed,wrap,uboot)
|
||||
|
||||
$(obj)/cuImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
|
||||
$(call if_changed,wrap,cuboot-$*,$(dtstree)/$*.dts)
|
||||
$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
|
||||
$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
|
||||
|
||||
$(obj)/treeImage.initrd.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
|
||||
$(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz)
|
||||
$(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
|
||||
$(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
|
||||
|
||||
$(obj)/treeImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
|
||||
$(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts)
|
||||
$(obj)/simpleImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
|
||||
$(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb)
|
||||
|
||||
$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
|
||||
$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
|
||||
|
||||
$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
|
||||
$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)
|
||||
|
||||
# Rule to build device tree blobs
|
||||
$(obj)/%.dtb: $(dtstree)/%.dts $(obj)/dtc
|
||||
$(obj)/dtc -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(dtstree)/$*.dts
|
||||
|
||||
# If there isn't a platform selected then just strip the vmlinux.
|
||||
ifeq (,$(image-y))
|
||||
@@ -326,7 +340,7 @@ install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
|
||||
|
||||
# anything not in $(targets)
|
||||
clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
|
||||
otheros.bld
|
||||
otheros.bld *.dtb
|
||||
|
||||
# clean up files cached by wrapper
|
||||
clean-kernel := vmlinux.strip vmlinux.bin
|
||||
|
||||
@@ -33,7 +33,8 @@ static void bamboo_fixups(void)
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200, 25000000);
|
||||
ibm4xx_sdram_fixup_memsize();
|
||||
ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
|
||||
dt_fixup_mac_addresses(bamboo_mac0, bamboo_mac1);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bamboo_mac0);
|
||||
dt_fixup_mac_address_by_alias("ethernet1", bamboo_mac1);
|
||||
}
|
||||
|
||||
void bamboo_init(void *mac0, void *mac1)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "types.h"
|
||||
#include "io.h"
|
||||
#include "ops.h"
|
||||
#include "page.h"
|
||||
|
||||
struct cpm_scc {
|
||||
u32 gsmrl;
|
||||
@@ -42,6 +43,22 @@ struct cpm_param {
|
||||
u16 tbase;
|
||||
u8 rfcr;
|
||||
u8 tfcr;
|
||||
u16 mrblr;
|
||||
u32 rstate;
|
||||
u8 res1[4];
|
||||
u16 rbptr;
|
||||
u8 res2[6];
|
||||
u32 tstate;
|
||||
u8 res3[4];
|
||||
u16 tbptr;
|
||||
u8 res4[6];
|
||||
u16 maxidl;
|
||||
u16 idlc;
|
||||
u16 brkln;
|
||||
u16 brkec;
|
||||
u16 brkcr;
|
||||
u16 rmask;
|
||||
u8 res5[4];
|
||||
};
|
||||
|
||||
struct cpm_bd {
|
||||
@@ -54,10 +71,10 @@ static void *cpcr;
|
||||
static struct cpm_param *param;
|
||||
static struct cpm_smc *smc;
|
||||
static struct cpm_scc *scc;
|
||||
struct cpm_bd *tbdf, *rbdf;
|
||||
static struct cpm_bd *tbdf, *rbdf;
|
||||
static u32 cpm_cmd;
|
||||
static u8 *muram_start;
|
||||
static u32 muram_offset;
|
||||
static void *cbd_addr;
|
||||
static u32 cbd_offset;
|
||||
|
||||
static void (*do_cmd)(int op);
|
||||
static void (*enable_port)(void);
|
||||
@@ -119,20 +136,25 @@ static int cpm_serial_open(void)
|
||||
|
||||
out_8(¶m->rfcr, 0x10);
|
||||
out_8(¶m->tfcr, 0x10);
|
||||
out_be16(¶m->mrblr, 1);
|
||||
out_be16(¶m->maxidl, 0);
|
||||
out_be16(¶m->brkec, 0);
|
||||
out_be16(¶m->brkln, 0);
|
||||
out_be16(¶m->brkcr, 0);
|
||||
|
||||
rbdf = (struct cpm_bd *)muram_start;
|
||||
rbdf->addr = (u8 *)(rbdf + 2);
|
||||
rbdf = cbd_addr;
|
||||
rbdf->addr = (u8 *)rbdf - 1;
|
||||
rbdf->sc = 0xa000;
|
||||
rbdf->len = 1;
|
||||
|
||||
tbdf = rbdf + 1;
|
||||
tbdf->addr = (u8 *)(rbdf + 2) + 1;
|
||||
tbdf->addr = (u8 *)rbdf - 2;
|
||||
tbdf->sc = 0x2000;
|
||||
tbdf->len = 1;
|
||||
|
||||
sync();
|
||||
out_be16(¶m->rbase, muram_offset);
|
||||
out_be16(¶m->tbase, muram_offset + sizeof(struct cpm_bd));
|
||||
out_be16(¶m->rbase, cbd_offset);
|
||||
out_be16(¶m->tbase, cbd_offset + sizeof(struct cpm_bd));
|
||||
|
||||
do_cmd(CPM_CMD_INIT_RX_TX);
|
||||
|
||||
@@ -175,10 +197,12 @@ static unsigned char cpm_serial_getc(void)
|
||||
|
||||
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 *vreg[2];
|
||||
u32 reg[2];
|
||||
int is_smc = 0, is_cpm2 = 0;
|
||||
void *parent, *muram;
|
||||
void *muram_addr;
|
||||
unsigned long muram_offset, muram_size;
|
||||
|
||||
if (dt_is_compatible(devp, "fsl,cpm1-smc-uart")) {
|
||||
is_smc = 1;
|
||||
@@ -202,63 +226,64 @@ int cpm_console_init(void *devp, struct serial_console_data *scdp)
|
||||
else
|
||||
do_cmd = cpm1_cmd;
|
||||
|
||||
n = getprop(devp, "fsl,cpm-command", &cpm_cmd, 4);
|
||||
if (n < 4)
|
||||
if (getprop(devp, "fsl,cpm-command", &cpm_cmd, 4) < 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))
|
||||
if (dt_get_virtual_reg(devp, vreg, 2) < 2)
|
||||
return -1;
|
||||
|
||||
reg_virt[n] = (void *)reg_phys;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_smc)
|
||||
smc = reg_virt[0];
|
||||
smc = vreg[0];
|
||||
else
|
||||
scc = reg_virt[0];
|
||||
scc = vreg[0];
|
||||
|
||||
param = reg_virt[1];
|
||||
param = vreg[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))
|
||||
if (dt_get_virtual_reg(parent, &cpcr, 1) < 1)
|
||||
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
|
||||
* entry has at least 128 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))
|
||||
if (dt_get_virtual_reg(muram, &muram_addr, 1) < 1)
|
||||
return -1;
|
||||
|
||||
reg_virt[0] = (void *)reg_phys;
|
||||
if (getprop(muram, "reg", reg, 8) < 8)
|
||||
return -1;
|
||||
|
||||
muram_offset = reg[0];
|
||||
muram_size = reg[1];
|
||||
|
||||
/* Store the buffer descriptors at the end of the first muram chunk.
|
||||
* For SMC ports on CPM2-based platforms, relocate the parameter RAM
|
||||
* just before the buffer descriptors.
|
||||
*/
|
||||
|
||||
cbd_offset = muram_offset + muram_size - 2 * sizeof(struct cpm_bd);
|
||||
|
||||
if (is_cpm2 && is_smc) {
|
||||
u16 *smc_base = (u16 *)param;
|
||||
u16 pram_offset;
|
||||
|
||||
pram_offset = cbd_offset - 64;
|
||||
pram_offset = _ALIGN_DOWN(pram_offset, 64);
|
||||
|
||||
disable_port();
|
||||
out_be16(smc_base, pram_offset);
|
||||
param = muram_addr - muram_offset + pram_offset;
|
||||
}
|
||||
|
||||
muram_start = reg_virt[0];
|
||||
|
||||
n = getprop(muram, "reg", &muram_offset, 4);
|
||||
if (n < 4)
|
||||
return -1;
|
||||
cbd_addr = muram_addr - muram_offset + cbd_offset;
|
||||
|
||||
scdp->open = cpm_serial_open;
|
||||
scdp->putc = cpm_serial_putc;
|
||||
|
||||
@@ -128,7 +128,7 @@ static void fixup_pci(void)
|
||||
u8 *soc_regs;
|
||||
int i, len;
|
||||
void *node, *parent_node;
|
||||
u32 naddr, nsize, mem_log2;
|
||||
u32 naddr, nsize, mem_pow2, mem_mask;
|
||||
|
||||
node = finddevice("/pci");
|
||||
if (!node || !dt_is_compatible(node, "fsl,pq2-pci"))
|
||||
@@ -141,7 +141,7 @@ static void fixup_pci(void)
|
||||
|
||||
soc_regs = (u8 *)fsl_get_immr();
|
||||
if (!soc_regs)
|
||||
goto err;
|
||||
goto unhandled;
|
||||
|
||||
dt_get_reg_format(node, &naddr, &nsize);
|
||||
if (naddr != 3 || nsize != 2)
|
||||
@@ -153,7 +153,7 @@ static void fixup_pci(void)
|
||||
|
||||
dt_get_reg_format(parent_node, &naddr, &nsize);
|
||||
if (naddr != 1 || nsize != 1)
|
||||
goto err;
|
||||
goto unhandled;
|
||||
|
||||
len = getprop(node, "ranges", pci_ranges_buf,
|
||||
sizeof(pci_ranges_buf));
|
||||
@@ -170,14 +170,20 @@ static void fixup_pci(void)
|
||||
}
|
||||
|
||||
if (!mem || !mmio || !io)
|
||||
goto err;
|
||||
goto unhandled;
|
||||
if (mem->size[1] != mmio->size[1])
|
||||
goto unhandled;
|
||||
if (mem->size[1] & (mem->size[1] - 1))
|
||||
goto unhandled;
|
||||
if (io->size[1] & (io->size[1] - 1))
|
||||
goto unhandled;
|
||||
|
||||
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;
|
||||
goto unhandled;
|
||||
|
||||
out_be32(&pci_regs[1][0], mem_base->phys_addr | 1);
|
||||
out_be32(&pci_regs[2][0], ~(mem->size[1] + mmio->size[1] - 1));
|
||||
@@ -201,8 +207,9 @@ static void fixup_pci(void)
|
||||
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));
|
||||
mem_pow2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1);
|
||||
mem_mask = ~(mem_pow2 - 1) >> 12;
|
||||
out_le32(&pci_regs[0][62], 0xa0000000 | mem_mask);
|
||||
|
||||
/* If PCI is disabled, drive RST high to enable. */
|
||||
if (!(in_le32(&pci_regs[0][32]) & 1)) {
|
||||
@@ -228,7 +235,11 @@ static void fixup_pci(void)
|
||||
return;
|
||||
|
||||
err:
|
||||
printf("Bad PCI node\r\n");
|
||||
printf("Bad PCI node -- using existing firmware setup.\r\n");
|
||||
return;
|
||||
|
||||
unhandled:
|
||||
printf("Unsupported PCI node -- using existing firmware setup.\r\n");
|
||||
}
|
||||
|
||||
static void pq2_platform_fixups(void)
|
||||
|
||||
@@ -42,7 +42,8 @@ static void rainier_fixups(void)
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
ibm4xx_denali_fixup_memsize();
|
||||
dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
|
||||
dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
|
||||
@@ -42,7 +42,8 @@ static void sequoia_fixups(void)
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
ibm4xx_denali_fixup_memsize();
|
||||
dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
|
||||
dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
|
||||
@@ -40,7 +40,8 @@ static void taishan_fixups(void)
|
||||
|
||||
ibm4xx_sdram_fixup_memsize();
|
||||
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
|
||||
dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
|
||||
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ static void warp_fixups(void)
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
|
||||
ibm4xx_sdram_fixup_memsize();
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
dt_fixup_mac_addresses(&bd.bi_enetaddr);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Old U-boot compatibility for Yosemite
|
||||
*
|
||||
* Author: Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
*
|
||||
* Copyright 2008 IBM Corporation
|
||||
*
|
||||
* 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 "4xx.h"
|
||||
#include "44x.h"
|
||||
#include "cuboot.h"
|
||||
|
||||
#define TARGET_4xx
|
||||
#define TARGET_44x
|
||||
#include "ppcboot.h"
|
||||
|
||||
static bd_t bd;
|
||||
|
||||
static void yosemite_fixups(void)
|
||||
{
|
||||
unsigned long sysclk = 66666666;
|
||||
|
||||
ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
|
||||
ibm4xx_sdram_fixup_memsize();
|
||||
ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
|
||||
dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
|
||||
dt_fixup_mac_address_by_alias("ethernet1", 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 = yosemite_fixups;
|
||||
platform_ops.exit = ibm44x_dbcr_reset;
|
||||
fdt_init(_dtb_start);
|
||||
serial_console_init();
|
||||
}
|
||||
@@ -350,3 +350,23 @@ int dt_is_compatible(void *node, const char *compat)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dt_get_virtual_reg(void *node, void **addr, int nres)
|
||||
{
|
||||
unsigned long xaddr;
|
||||
int n;
|
||||
|
||||
n = getprop(node, "virtual-reg", addr, nres * 4);
|
||||
if (n > 0)
|
||||
return n / 4;
|
||||
|
||||
for (n = 0; n < nres; n++) {
|
||||
if (!dt_xlate_reg(node, n, &xaddr, NULL))
|
||||
break;
|
||||
|
||||
addr[n] = (void *)xaddr;
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +204,6 @@
|
||||
};
|
||||
|
||||
EMAC0: ethernet@ef600e00 {
|
||||
linux,network-index = <0>;
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
|
||||
interrupt-parent = <&UIC1>;
|
||||
@@ -225,7 +224,6 @@
|
||||
};
|
||||
|
||||
EMAC1: ethernet@ef600f00 {
|
||||
linux,network-index = <1>;
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
|
||||
interrupt-parent = <&UIC1>;
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
/*
|
||||
* Device Tree Source for AMCC Canyonlands (460EX)
|
||||
*
|
||||
* Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/ {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
model = "amcc,canyonlands";
|
||||
compatible = "amcc,canyonlands";
|
||||
dcr-parent = <&/cpus/cpu@0>;
|
||||
|
||||
aliases {
|
||||
ethernet0 = &EMAC0;
|
||||
ethernet1 = &EMAC1;
|
||||
serial0 = &UART0;
|
||||
serial1 = &UART1;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
model = "PowerPC,460EX";
|
||||
reg = <0>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
timebase-frequency = <0>; /* Filled in by U-Boot */
|
||||
i-cache-line-size = <20>;
|
||||
d-cache-line-size = <20>;
|
||||
i-cache-size = <8000>;
|
||||
d-cache-size = <8000>;
|
||||
dcr-controller;
|
||||
dcr-access-method = "native";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0 0>; /* Filled in by U-Boot */
|
||||
};
|
||||
|
||||
UIC0: interrupt-controller0 {
|
||||
compatible = "ibm,uic-460ex","ibm,uic";
|
||||
interrupt-controller;
|
||||
cell-index = <0>;
|
||||
dcr-reg = <0c0 009>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
UIC1: interrupt-controller1 {
|
||||
compatible = "ibm,uic-460ex","ibm,uic";
|
||||
interrupt-controller;
|
||||
cell-index = <1>;
|
||||
dcr-reg = <0d0 009>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupts = <1e 4 1f 4>; /* cascade */
|
||||
interrupt-parent = <&UIC0>;
|
||||
};
|
||||
|
||||
UIC2: interrupt-controller2 {
|
||||
compatible = "ibm,uic-460ex","ibm,uic";
|
||||
interrupt-controller;
|
||||
cell-index = <2>;
|
||||
dcr-reg = <0e0 009>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupts = <a 4 b 4>; /* cascade */
|
||||
interrupt-parent = <&UIC0>;
|
||||
};
|
||||
|
||||
UIC3: interrupt-controller3 {
|
||||
compatible = "ibm,uic-460ex","ibm,uic";
|
||||
interrupt-controller;
|
||||
cell-index = <3>;
|
||||
dcr-reg = <0f0 009>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupts = <10 4 11 4>; /* cascade */
|
||||
interrupt-parent = <&UIC0>;
|
||||
};
|
||||
|
||||
SDR0: sdr {
|
||||
compatible = "ibm,sdr-460ex";
|
||||
dcr-reg = <00e 002>;
|
||||
};
|
||||
|
||||
CPR0: cpr {
|
||||
compatible = "ibm,cpr-460ex";
|
||||
dcr-reg = <00c 002>;
|
||||
};
|
||||
|
||||
plb {
|
||||
compatible = "ibm,plb-460ex", "ibm,plb4";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
|
||||
SDRAM0: sdram {
|
||||
compatible = "ibm,sdram-460ex", "ibm,sdram-405gp";
|
||||
dcr-reg = <010 2>;
|
||||
};
|
||||
|
||||
MAL0: mcmal {
|
||||
compatible = "ibm,mcmal-460ex", "ibm,mcmal2";
|
||||
dcr-reg = <180 62>;
|
||||
num-tx-chans = <2>;
|
||||
num-rx-chans = <10>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <&UIC2>;
|
||||
interrupts = < /*TXEOB*/ 6 4
|
||||
/*RXEOB*/ 7 4
|
||||
/*SERR*/ 3 4
|
||||
/*TXDE*/ 4 4
|
||||
/*RXDE*/ 5 4>;
|
||||
};
|
||||
|
||||
POB0: opb {
|
||||
compatible = "ibm,opb-460ex", "ibm,opb";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <b0000000 4 b0000000 50000000>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
|
||||
EBC0: ebc {
|
||||
compatible = "ibm,ebc-460ex", "ibm,ebc";
|
||||
dcr-reg = <012 2>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
interrupts = <6 4>;
|
||||
interrupt-parent = <&UIC1>;
|
||||
};
|
||||
|
||||
UART0: serial@ef600300 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <ef600300 8>;
|
||||
virtual-reg = <ef600300>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
current-speed = <0>; /* Filled in by U-Boot */
|
||||
interrupt-parent = <&UIC1>;
|
||||
interrupts = <1 4>;
|
||||
};
|
||||
|
||||
UART1: serial@ef600400 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <ef600400 8>;
|
||||
virtual-reg = <ef600400>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
current-speed = <0>; /* Filled in by U-Boot */
|
||||
interrupt-parent = <&UIC0>;
|
||||
interrupts = <1 4>;
|
||||
};
|
||||
|
||||
UART2: serial@ef600500 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <ef600500 8>;
|
||||
virtual-reg = <ef600500>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
current-speed = <0>; /* Filled in by U-Boot */
|
||||
interrupt-parent = <&UIC1>;
|
||||
interrupts = <1d 4>;
|
||||
};
|
||||
|
||||
UART3: serial@ef600600 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <ef600600 8>;
|
||||
virtual-reg = <ef600600>;
|
||||
clock-frequency = <0>; /* Filled in by U-Boot */
|
||||
current-speed = <0>; /* Filled in by U-Boot */
|
||||
interrupt-parent = <&UIC1>;
|
||||
interrupts = <1e 4>;
|
||||
};
|
||||
|
||||
IIC0: i2c@ef600700 {
|
||||
compatible = "ibm,iic-460ex", "ibm,iic";
|
||||
reg = <ef600700 14>;
|
||||
interrupt-parent = <&UIC0>;
|
||||
interrupts = <2 4>;
|
||||
};
|
||||
|
||||
IIC1: i2c@ef600800 {
|
||||
compatible = "ibm,iic-460ex", "ibm,iic";
|
||||
reg = <ef600800 14>;
|
||||
interrupt-parent = <&UIC0>;
|
||||
interrupts = <3 4>;
|
||||
};
|
||||
|
||||
ZMII0: emac-zmii@ef600d00 {
|
||||
compatible = "ibm,zmii-460ex", "ibm,zmii";
|
||||
reg = <ef600d00 c>;
|
||||
};
|
||||
|
||||
RGMII0: emac-rgmii@ef601500 {
|
||||
compatible = "ibm,rgmii-460ex", "ibm,rgmii";
|
||||
reg = <ef601500 8>;
|
||||
has-mdio;
|
||||
};
|
||||
|
||||
TAH0: emac-tah@ef601350 {
|
||||
compatible = "ibm,tah-460ex", "ibm,tah";
|
||||
reg = <ef601350 30>;
|
||||
};
|
||||
|
||||
TAH1: emac-tah@ef601450 {
|
||||
compatible = "ibm,tah-460ex", "ibm,tah";
|
||||
reg = <ef601450 30>;
|
||||
};
|
||||
|
||||
EMAC0: ethernet@ef600e00 {
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-460ex", "ibm,emac4";
|
||||
interrupt-parent = <&EMAC0>;
|
||||
interrupts = <0 1>;
|
||||
#interrupt-cells = <1>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
interrupt-map = </*Status*/ 0 &UIC2 10 4
|
||||
/*Wake*/ 1 &UIC2 14 4>;
|
||||
reg = <ef600e00 70>;
|
||||
local-mac-address = [000000000000]; /* Filled in by U-Boot */
|
||||
mal-device = <&MAL0>;
|
||||
mal-tx-channel = <0>;
|
||||
mal-rx-channel = <0>;
|
||||
cell-index = <0>;
|
||||
max-frame-size = <2328>;
|
||||
rx-fifo-size = <1000>;
|
||||
tx-fifo-size = <800>;
|
||||
phy-mode = "rgmii";
|
||||
phy-map = <00000000>;
|
||||
rgmii-device = <&RGMII0>;
|
||||
rgmii-channel = <0>;
|
||||
tah-device = <&TAH0>;
|
||||
tah-channel = <0>;
|
||||
has-inverted-stacr-oc;
|
||||
has-new-stacr-staopc;
|
||||
};
|
||||
|
||||
EMAC1: ethernet@ef600f00 {
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-460ex", "ibm,emac4";
|
||||
interrupt-parent = <&EMAC1>;
|
||||
interrupts = <0 1>;
|
||||
#interrupt-cells = <1>;
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
interrupt-map = </*Status*/ 0 &UIC2 11 4
|
||||
/*Wake*/ 1 &UIC2 15 4>;
|
||||
reg = <ef600f00 70>;
|
||||
local-mac-address = [000000000000]; /* Filled in by U-Boot */
|
||||
mal-device = <&MAL0>;
|
||||
mal-tx-channel = <1>;
|
||||
mal-rx-channel = <8>;
|
||||
cell-index = <1>;
|
||||
max-frame-size = <2328>;
|
||||
rx-fifo-size = <1000>;
|
||||
tx-fifo-size = <800>;
|
||||
phy-mode = "rgmii";
|
||||
phy-map = <00000000>;
|
||||
rgmii-device = <&RGMII0>;
|
||||
rgmii-channel = <1>;
|
||||
tah-device = <&TAH1>;
|
||||
tah-channel = <1>;
|
||||
has-inverted-stacr-oc;
|
||||
has-new-stacr-staopc;
|
||||
mdio-device = <&EMAC0>;
|
||||
};
|
||||
};
|
||||
|
||||
PCIX0: pci@c0ec00000 {
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
compatible = "ibm,plb-pcix-460ex", "ibm,plb-pcix";
|
||||
primary;
|
||||
large-inbound-windows;
|
||||
enable-msi-hole;
|
||||
reg = <c 0ec00000 8 /* Config space access */
|
||||
0 0 0 /* no IACK cycles */
|
||||
c 0ed00000 4 /* Special cycles */
|
||||
c 0ec80000 100 /* Internal registers */
|
||||
c 0ec80100 fc>; /* Internal messaging registers */
|
||||
|
||||
/* Outbound ranges, one memory and one IO,
|
||||
* later cannot be changed
|
||||
*/
|
||||
ranges = <02000000 0 80000000 0000000d 80000000 0 80000000
|
||||
01000000 0 00000000 0000000c 08000000 0 00010000>;
|
||||
|
||||
/* Inbound 2GB range starting at 0 */
|
||||
dma-ranges = <42000000 0 0 0 0 0 80000000>;
|
||||
|
||||
/* This drives busses 0 to 0x3f */
|
||||
bus-range = <0 3f>;
|
||||
|
||||
/* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
|
||||
interrupt-map-mask = <0000 0 0 0>;
|
||||
interrupt-map = < 0000 0 0 0 &UIC1 0 8 >;
|
||||
};
|
||||
|
||||
PCIE0: pciex@d00000000 {
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
|
||||
primary;
|
||||
port = <0>; /* port number */
|
||||
reg = <d 00000000 20000000 /* Config space access */
|
||||
c 08010000 00001000>; /* Registers */
|
||||
dcr-reg = <100 020>;
|
||||
sdr-base = <300>;
|
||||
|
||||
/* Outbound ranges, one memory and one IO,
|
||||
* later cannot be changed
|
||||
*/
|
||||
ranges = <02000000 0 80000000 0000000e 00000000 0 80000000
|
||||
01000000 0 00000000 0000000f 80000000 0 00010000>;
|
||||
|
||||
/* Inbound 2GB range starting at 0 */
|
||||
dma-ranges = <42000000 0 0 0 0 0 80000000>;
|
||||
|
||||
/* This drives busses 40 to 0x7f */
|
||||
bus-range = <40 7f>;
|
||||
|
||||
/* Legacy interrupts (note the weird polarity, the bridge seems
|
||||
* to invert PCIe legacy interrupts).
|
||||
* We are de-swizzling here because the numbers are actually for
|
||||
* port of the root complex virtual P2P bridge. But I want
|
||||
* to avoid putting a node for it in the tree, so the numbers
|
||||
* below are basically de-swizzled numbers.
|
||||
* The real slot is on idsel 0, so the swizzling is 1:1
|
||||
*/
|
||||
interrupt-map-mask = <0000 0 0 7>;
|
||||
interrupt-map = <
|
||||
0000 0 0 1 &UIC3 c 4 /* swizzled int A */
|
||||
0000 0 0 2 &UIC3 d 4 /* swizzled int B */
|
||||
0000 0 0 3 &UIC3 e 4 /* swizzled int C */
|
||||
0000 0 0 4 &UIC3 f 4 /* swizzled int D */>;
|
||||
};
|
||||
|
||||
PCIE1: pciex@d20000000 {
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
|
||||
primary;
|
||||
port = <1>; /* port number */
|
||||
reg = <d 20000000 20000000 /* Config space access */
|
||||
c 08011000 00001000>; /* Registers */
|
||||
dcr-reg = <120 020>;
|
||||
sdr-base = <340>;
|
||||
|
||||
/* Outbound ranges, one memory and one IO,
|
||||
* later cannot be changed
|
||||
*/
|
||||
ranges = <02000000 0 80000000 0000000e 80000000 0 80000000
|
||||
01000000 0 00000000 0000000f 80010000 0 00010000>;
|
||||
|
||||
/* Inbound 2GB range starting at 0 */
|
||||
dma-ranges = <42000000 0 0 0 0 0 80000000>;
|
||||
|
||||
/* This drives busses 80 to 0xbf */
|
||||
bus-range = <80 bf>;
|
||||
|
||||
/* Legacy interrupts (note the weird polarity, the bridge seems
|
||||
* to invert PCIe legacy interrupts).
|
||||
* We are de-swizzling here because the numbers are actually for
|
||||
* port of the root complex virtual P2P bridge. But I want
|
||||
* to avoid putting a node for it in the tree, so the numbers
|
||||
* below are basically de-swizzled numbers.
|
||||
* The real slot is on idsel 0, so the swizzling is 1:1
|
||||
*/
|
||||
interrupt-map-mask = <0000 0 0 7>;
|
||||
interrupt-map = <
|
||||
0000 0 0 1 &UIC3 10 4 /* swizzled int A */
|
||||
0000 0 0 2 &UIC3 11 4 /* swizzled int B */
|
||||
0000 0 0 3 &UIC3 12 4 /* swizzled int C */
|
||||
0000 0 0 4 &UIC3 13 4 /* swizzled int D */>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -241,7 +241,6 @@
|
||||
};
|
||||
|
||||
EMAC0: ethernet@40000800 {
|
||||
linux,network-index = <0>;
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-440gp", "ibm,emac";
|
||||
interrupt-parent = <&UIC1>;
|
||||
@@ -261,7 +260,6 @@
|
||||
zmii-channel = <0>;
|
||||
};
|
||||
EMAC1: ethernet@40000900 {
|
||||
linux,network-index = <1>;
|
||||
device_type = "network";
|
||||
compatible = "ibm,emac-440gp", "ibm,emac";
|
||||
interrupt-parent = <&UIC1>;
|
||||
|
||||
@@ -121,8 +121,7 @@
|
||||
|
||||
data@0 {
|
||||
compatible = "fsl,cpm-muram-data";
|
||||
reg = <0 0x1100 0x1140
|
||||
0xec0 0x9800 0x800>;
|
||||
reg = <0 0x2000 0x9800 0x800>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -138,7 +137,7 @@
|
||||
device_type = "serial";
|
||||
compatible = "fsl,mpc8248-smc-uart",
|
||||
"fsl,cpm2-smc-uart";
|
||||
reg = <0x11a80 0x20 0x1100 0x40>;
|
||||
reg = <0x11a80 0x20 0x87fc 2>;
|
||||
interrupts = <4 8>;
|
||||
interrupt-parent = <&PIC>;
|
||||
fsl,cpm-brg = <7>;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user