aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt2
-rw-r--r--Documentation/powerpc/booting-without-of.txt622
-rw-r--r--Documentation/powerpc/phyp-assisted-dump.txt127
-rw-r--r--arch/powerpc/Kconfig82
-rw-r--r--arch/powerpc/Kconfig.debug2
-rw-r--r--arch/powerpc/Makefile12
-rw-r--r--arch/powerpc/boot/Makefile40
-rw-r--r--arch/powerpc/boot/bamboo.c3
-rw-r--r--arch/powerpc/boot/cpm-serial.c117
-rw-r--r--arch/powerpc/boot/cuboot-pq2.c27
-rw-r--r--arch/powerpc/boot/cuboot-rainier.c3
-rw-r--r--arch/powerpc/boot/cuboot-sequoia.c3
-rw-r--r--arch/powerpc/boot/cuboot-taishan.c3
-rw-r--r--arch/powerpc/boot/cuboot-warp.c2
-rw-r--r--arch/powerpc/boot/cuboot-yosemite.c44
-rw-r--r--arch/powerpc/boot/devtree.c20
-rw-r--r--arch/powerpc/boot/dts/bamboo.dts2
-rw-r--r--arch/powerpc/boot/dts/canyonlands.dts402
-rw-r--r--arch/powerpc/boot/dts/ebony.dts2
-rw-r--r--arch/powerpc/boot/dts/ep8248e.dts5
-rw-r--r--arch/powerpc/boot/dts/ep88xc.dts73
-rw-r--r--arch/powerpc/boot/dts/glacier.dts467
-rw-r--r--arch/powerpc/boot/dts/haleakala.dts4
-rw-r--r--arch/powerpc/boot/dts/katmai.dts2
-rw-r--r--arch/powerpc/boot/dts/kilauea.dts4
-rw-r--r--arch/powerpc/boot/dts/ksi8560.dts267
-rw-r--r--arch/powerpc/boot/dts/kuroboxHD.dts83
-rw-r--r--arch/powerpc/boot/dts/kuroboxHG.dts83
-rw-r--r--arch/powerpc/boot/dts/makalu.dts4
-rw-r--r--arch/powerpc/boot/dts/mpc7448hpc2.dts97
-rw-r--r--arch/powerpc/boot/dts/mpc8272ads.dts132
-rw-r--r--arch/powerpc/boot/dts/mpc832x_mds.dts7
-rw-r--r--arch/powerpc/boot/dts/mpc832x_rdb.dts4
-rw-r--r--arch/powerpc/boot/dts/mpc836x_mds.dts4
-rw-r--r--arch/powerpc/boot/dts/mpc8540ads.dts173
-rw-r--r--arch/powerpc/boot/dts/mpc8541cds.dts161
-rw-r--r--arch/powerpc/boot/dts/mpc8544ds.dts299
-rw-r--r--arch/powerpc/boot/dts/mpc8548cds.dts289
-rw-r--r--arch/powerpc/boot/dts/mpc8555cds.dts161
-rw-r--r--arch/powerpc/boot/dts/mpc8560ads.dts209
-rw-r--r--arch/powerpc/boot/dts/mpc8568mds.dts291
-rw-r--r--arch/powerpc/boot/dts/mpc8572ds.dts383
-rw-r--r--arch/powerpc/boot/dts/mpc8641_hpcn.dts2
-rw-r--r--arch/powerpc/boot/dts/mpc866ads.dts58
-rw-r--r--arch/powerpc/boot/dts/mpc885ads.dts77
-rw-r--r--arch/powerpc/boot/dts/pq2fads.dts126
-rw-r--r--arch/powerpc/boot/dts/prpmc2800.dts336
-rw-r--r--arch/powerpc/boot/dts/rainier.dts6
-rw-r--r--arch/powerpc/boot/dts/sbc8641d.dts352
-rw-r--r--arch/powerpc/boot/dts/sequoia.dts6
-rw-r--r--arch/powerpc/boot/dts/taishan.dts31
-rw-r--r--arch/powerpc/boot/dts/walnut.dts1
-rw-r--r--arch/powerpc/boot/dts/warp.dts1
-rw-r--r--arch/powerpc/boot/dts/yosemite.dts304
-rw-r--r--arch/powerpc/boot/ebony.c3
-rw-r--r--arch/powerpc/boot/libfdt-wrapper.c2
-rw-r--r--arch/powerpc/boot/mpc52xx-psc.c9
-rw-r--r--arch/powerpc/boot/mpsc.c2
-rw-r--r--arch/powerpc/boot/mv64x60.c4
-rw-r--r--arch/powerpc/boot/mv64x60_i2c.c2
-rw-r--r--arch/powerpc/boot/ns16550.c10
-rw-r--r--arch/powerpc/boot/ops.h1
-rw-r--r--arch/powerpc/boot/prpmc2800.c23
-rw-r--r--arch/powerpc/boot/ps3-head.S25
-rw-r--r--arch/powerpc/boot/ps3.c23
-rw-r--r--arch/powerpc/boot/serial.c2
-rw-r--r--arch/powerpc/boot/simpleboot.c84
-rw-r--r--arch/powerpc/boot/treeboot-walnut.c2
-rw-r--r--arch/powerpc/boot/virtex405-head.S30
-rwxr-xr-xarch/powerpc/boot/wrapper32
-rw-r--r--arch/powerpc/configs/40x/ep405_defconfig (renamed from arch/powerpc/configs/ep405_defconfig)0
-rw-r--r--arch/powerpc/configs/40x/kilauea_defconfig (renamed from arch/powerpc/configs/kilauea_defconfig)0
-rw-r--r--arch/powerpc/configs/40x/makalu_defconfig (renamed from arch/powerpc/configs/makalu_defconfig)0
-rw-r--r--arch/powerpc/configs/40x/walnut_defconfig (renamed from arch/powerpc/configs/walnut_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/bamboo_defconfig (renamed from arch/powerpc/configs/bamboo_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/canyonlands_defconfig721
-rw-r--r--arch/powerpc/configs/44x/ebony_defconfig (renamed from arch/powerpc/configs/ebony_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/katmai_defconfig (renamed from arch/powerpc/configs/katmai_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/rainier_defconfig (renamed from arch/powerpc/configs/rainier_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/sequoia_defconfig (renamed from arch/powerpc/configs/sequoia_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/taishan_defconfig (renamed from arch/powerpc/configs/taishan_defconfig)0
-rw-r--r--arch/powerpc/configs/44x/warp_defconfig (renamed from arch/powerpc/configs/warp_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc8313_rdb_defconfig (renamed from arch/powerpc/configs/mpc8313_rdb_defconfig)8
-rw-r--r--arch/powerpc/configs/83xx/mpc8315_rdb_defconfig (renamed from arch/powerpc/configs/mpc8315_rdb_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc832x_mds_defconfig (renamed from arch/powerpc/configs/mpc832x_mds_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc832x_rdb_defconfig (renamed from arch/powerpc/configs/mpc832x_rdb_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc834x_itx_defconfig (renamed from arch/powerpc/configs/mpc834x_itx_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig (renamed from arch/powerpc/configs/mpc834x_itxgp_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc834x_mds_defconfig (renamed from arch/powerpc/configs/mpc834x_mds_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc836x_mds_defconfig (renamed from arch/powerpc/configs/mpc836x_mds_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc837x_mds_defconfig (renamed from arch/powerpc/configs/mpc837x_mds_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/mpc837x_rdb_defconfig (renamed from arch/powerpc/configs/mpc837x_rdb_defconfig)0
-rw-r--r--arch/powerpc/configs/83xx/sbc834x_defconfig (renamed from arch/powerpc/configs/sbc834x_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/ksi8560_defconfig899
-rw-r--r--arch/powerpc/configs/85xx/mpc8540_ads_defconfig (renamed from arch/powerpc/configs/mpc8540_ads_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/mpc8544_ds_defconfig (renamed from arch/powerpc/configs/mpc8544_ds_defconfig)17
-rw-r--r--arch/powerpc/configs/85xx/mpc8560_ads_defconfig (renamed from arch/powerpc/configs/mpc8560_ads_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/mpc8568mds_defconfig (renamed from arch/powerpc/configs/mpc8568mds_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/mpc8572_ds_defconfig (renamed from arch/powerpc/configs/mpc8572_ds_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/mpc85xx_cds_defconfig (renamed from arch/powerpc/configs/mpc85xx_cds_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/sbc8548_defconfig (renamed from arch/powerpc/configs/sbc8548_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/sbc8560_defconfig (renamed from arch/powerpc/configs/sbc8560_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/stx_gp3_defconfig (renamed from arch/powerpc/configs/stx_gp3_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/tqm8540_defconfig (renamed from arch/powerpc/configs/tqm8540_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/tqm8541_defconfig (renamed from arch/powerpc/configs/tqm8541_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/tqm8555_defconfig (renamed from arch/powerpc/configs/tqm8555_defconfig)0
-rw-r--r--arch/powerpc/configs/85xx/tqm8560_defconfig (renamed from arch/powerpc/configs/tqm8560_defconfig)0
-rw-r--r--arch/powerpc/configs/chrp32_defconfig7
-rw-r--r--arch/powerpc/configs/g5_defconfig7
-rw-r--r--arch/powerpc/configs/iseries_defconfig7
-rw-r--r--arch/powerpc/configs/maple_defconfig131
-rw-r--r--arch/powerpc/configs/mpc83xx_defconfig164
-rw-r--r--arch/powerpc/configs/pmac32_defconfig7
-rw-r--r--arch/powerpc/configs/ppc40x_defconfig896
-rw-r--r--arch/powerpc/configs/ppc44x_defconfig14
-rw-r--r--arch/powerpc/configs/ppc64_defconfig8
-rw-r--r--arch/powerpc/configs/pseries_defconfig8
-rw-r--r--arch/powerpc/configs/sbc8641d_defconfig1342
-rw-r--r--arch/powerpc/kernel/Makefile1
-rw-r--r--arch/powerpc/kernel/asm-offsets.c10
-rw-r--r--arch/powerpc/kernel/btext.c3
-rw-r--r--arch/powerpc/kernel/cpu_setup_44x.S5
-rw-r--r--arch/powerpc/kernel/cputable.c28
-rw-r--r--arch/powerpc/kernel/crash.c3
-rw-r--r--arch/powerpc/kernel/crash_dump.c3
-rw-r--r--arch/powerpc/kernel/entry_32.S30
-rw-r--r--arch/powerpc/kernel/entry_64.S30
-rw-r--r--arch/powerpc/kernel/head_32.S22
-rw-r--r--arch/powerpc/kernel/head_44x.S4
-rw-r--r--arch/powerpc/kernel/head_64.S69
-rw-r--r--arch/powerpc/kernel/head_booke.h33
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S44
-rw-r--r--arch/powerpc/kernel/ibmebus.c12
-rw-r--r--arch/powerpc/kernel/iommu.c4
-rw-r--r--arch/powerpc/kernel/irq.c18
-rw-r--r--arch/powerpc/kernel/isa-bridge.c6
-rw-r--r--arch/powerpc/kernel/lparcfg.c12
-rw-r--r--arch/powerpc/kernel/machine_kexec.c3
-rw-r--r--arch/powerpc/kernel/paca.c34
-rw-r--r--arch/powerpc/kernel/ppc32.h2
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c7
-rw-r--r--arch/powerpc/kernel/process.c33
-rw-r--r--arch/powerpc/kernel/prom.c120
-rw-r--r--arch/powerpc/kernel/prom_init.c8
-rw-r--r--arch/powerpc/kernel/ptrace32.c27
-rw-r--r--arch/powerpc/kernel/rtas.c4
-rw-r--r--arch/powerpc/kernel/rtas_flash.c2
-rw-r--r--arch/powerpc/kernel/rtas_pci.c29
-rw-r--r--arch/powerpc/kernel/setup-common.c11
-rw-r--r--arch/powerpc/kernel/setup_32.c14
-rw-r--r--arch/powerpc/kernel/setup_64.c8
-rw-r--r--arch/powerpc/kernel/signal_32.c19
-rw-r--r--arch/powerpc/kernel/stacktrace.c47
-rw-r--r--arch/powerpc/kernel/sys_ppc32.c5
-rw-r--r--arch/powerpc/kernel/vdso.c3
-rw-r--r--arch/powerpc/kernel/vio.c10
-rw-r--r--arch/powerpc/kernel/vmlinux.lds.S51
-rw-r--r--arch/powerpc/lib/rheap.c4
-rw-r--r--arch/powerpc/lib/string.S14
-rw-r--r--arch/powerpc/math-emu/fabs.c2
-rw-r--r--arch/powerpc/math-emu/fadd.c2
-rw-r--r--arch/powerpc/math-emu/fadds.c2
-rw-r--r--arch/powerpc/math-emu/fcmpo.c2
-rw-r--r--arch/powerpc/math-emu/fcmpu.c2
-rw-r--r--arch/powerpc/math-emu/fctiw.c2
-rw-r--r--arch/powerpc/math-emu/fctiwz.c2
-rw-r--r--arch/powerpc/math-emu/fdiv.c6
-rw-r--r--arch/powerpc/math-emu/fdivs.c6
-rw-r--r--arch/powerpc/math-emu/fmadd.c2
-rw-r--r--arch/powerpc/math-emu/fmadds.c2
-rw-r--r--arch/powerpc/math-emu/fmr.c2
-rw-r--r--arch/powerpc/math-emu/fmsub.c2
-rw-r--r--arch/powerpc/math-emu/fmsubs.c2
-rw-r--r--arch/powerpc/math-emu/fmul.c2
-rw-r--r--arch/powerpc/math-emu/fmuls.c2
-rw-r--r--arch/powerpc/math-emu/fnabs.c2
-rw-r--r--arch/powerpc/math-emu/fneg.c2
-rw-r--r--arch/powerpc/math-emu/fnmadd.c2
-rw-r--r--arch/powerpc/math-emu/fnmadds.c2
-rw-r--r--arch/powerpc/math-emu/fnmsub.c2
-rw-r--r--arch/powerpc/math-emu/fnmsubs.c2
-rw-r--r--arch/powerpc/math-emu/fres.c2
-rw-r--r--arch/powerpc/math-emu/frsp.c2
-rw-r--r--arch/powerpc/math-emu/frsqrte.c2
-rw-r--r--arch/powerpc/math-emu/fsel.c2
-rw-r--r--arch/powerpc/math-emu/fsqrt.c2
-rw-r--r--arch/powerpc/math-emu/fsqrts.c2
-rw-r--r--arch/powerpc/math-emu/fsub.c2
-rw-r--r--arch/powerpc/math-emu/fsubs.c2
-rw-r--r--arch/powerpc/math-emu/lfd.c2
-rw-r--r--arch/powerpc/math-emu/lfs.c2
-rw-r--r--arch/powerpc/math-emu/mcrfs.c4
-rw-r--r--arch/powerpc/math-emu/mffs.c2
-rw-r--r--arch/powerpc/math-emu/mtfsb0.c2
-rw-r--r--arch/powerpc/math-emu/mtfsb1.c2
-rw-r--r--arch/powerpc/math-emu/mtfsf.c2
-rw-r--r--arch/powerpc/math-emu/mtfsfi.c2
-rw-r--r--arch/powerpc/math-emu/stfd.c2
-rw-r--r--arch/powerpc/math-emu/stfiwx.c2
-rw-r--r--arch/powerpc/math-emu/stfs.c2
-rw-r--r--arch/powerpc/mm/40x_mmu.c2
-rw-r--r--arch/powerpc/mm/44x_mmu.c2
-rw-r--r--arch/powerpc/mm/Makefile2
-rw-r--r--arch/powerpc/mm/fsl_booke_mmu.c48
-rw-r--r--arch/powerpc/mm/hash_utils_64.c32
-rw-r--r--arch/powerpc/mm/init_32.c27
-rw-r--r--arch/powerpc/mm/init_64.c7
-rw-r--r--arch/powerpc/mm/lmb.c357
-rw-r--r--arch/powerpc/mm/mem.c21
-rw-r--r--arch/powerpc/mm/mmu_decl.h4
-rw-r--r--arch/powerpc/mm/numa.c3
-rw-r--r--arch/powerpc/mm/pgtable_32.c5
-rw-r--r--arch/powerpc/mm/ppc_mmu_32.c15
-rw-r--r--arch/powerpc/mm/stab.c4
-rw-r--r--arch/powerpc/oprofile/cell/spu_task_sync.c12
-rw-r--r--arch/powerpc/oprofile/cell/vma_map.c10
-rw-r--r--arch/powerpc/oprofile/op_model_cell.c14
-rw-r--r--arch/powerpc/platforms/40x/ep405.c2
-rw-r--r--arch/powerpc/platforms/40x/kilauea.c4
-rw-r--r--arch/powerpc/platforms/40x/makalu.c2
-rw-r--r--arch/powerpc/platforms/40x/virtex.c2
-rw-r--r--arch/powerpc/platforms/40x/walnut.c4
-rw-r--r--arch/powerpc/platforms/44x/44x.h1
-rw-r--r--arch/powerpc/platforms/44x/Kconfig27
-rw-r--r--arch/powerpc/platforms/44x/Makefile4
-rw-r--r--arch/powerpc/platforms/44x/bamboo.c15
-rw-r--r--arch/powerpc/platforms/44x/canyonlands.c63
-rw-r--r--arch/powerpc/platforms/44x/ebony.c5
-rw-r--r--arch/powerpc/platforms/44x/idle.c67
-rw-r--r--arch/powerpc/platforms/44x/katmai.c5
-rw-r--r--arch/powerpc/platforms/44x/misc_44x.S11
-rw-r--r--arch/powerpc/platforms/44x/rainier.c4
-rw-r--r--arch/powerpc/platforms/44x/sequoia.c4
-rw-r--r--arch/powerpc/platforms/44x/taishan.c5
-rw-r--r--arch/powerpc/platforms/44x/warp-nand.c3
-rw-r--r--arch/powerpc/platforms/44x/warp.c6
-rw-r--r--arch/powerpc/platforms/52xx/lite5200.c4
-rw-r--r--arch/powerpc/platforms/82xx/Kconfig3
-rw-r--r--arch/powerpc/platforms/83xx/mpc837x_rdb.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc83xx.h2
-rw-r--r--arch/powerpc/platforms/83xx/usb.c12
-rw-r--r--arch/powerpc/platforms/85xx/Kconfig13
-rw-r--r--arch/powerpc/platforms/85xx/Makefile1
-rw-r--r--arch/powerpc/platforms/85xx/ksi8560.c257
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ads.c2
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ds.c15
-rw-r--r--arch/powerpc/platforms/86xx/Kconfig8
-rw-r--r--arch/powerpc/platforms/86xx/Makefile1
-rw-r--r--arch/powerpc/platforms/86xx/mpc8610_hpcd.c4
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx_hpcn.c14
-rw-r--r--arch/powerpc/platforms/86xx/sbc8641d.c164
-rw-r--r--arch/powerpc/platforms/8xx/Kconfig4
-rw-r--r--arch/powerpc/platforms/8xx/m8xx_setup.c7
-rw-r--r--arch/powerpc/platforms/Kconfig8
-rw-r--r--arch/powerpc/platforms/Kconfig.cputype2
-rw-r--r--arch/powerpc/platforms/cell/iommu.c10
-rw-r--r--arch/powerpc/platforms/cell/pervasive.c2
-rw-r--r--arch/powerpc/platforms/cell/ras.c10
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c8
-rw-r--r--arch/powerpc/platforms/cell/spu_callbacks.c2
-rw-r--r--arch/powerpc/platforms/cell/spu_manage.c8
-rw-r--r--arch/powerpc/platforms/cell/spufs/coredump.c8
-rw-r--r--arch/powerpc/platforms/cell/spufs/file.c8
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c14
-rw-r--r--arch/powerpc/platforms/cell/spufs/switch.c2
-rw-r--r--arch/powerpc/platforms/celleb/beat.c17
-rw-r--r--arch/powerpc/platforms/celleb/beat.h4
-rw-r--r--arch/powerpc/platforms/celleb/beat_wrapper.h3
-rw-r--r--arch/powerpc/platforms/celleb/htab.c7
-rw-r--r--arch/powerpc/platforms/celleb/interrupt.c26
-rw-r--r--arch/powerpc/platforms/celleb/scc_epci.c8
-rw-r--r--arch/powerpc/platforms/celleb/scc_sio.c4
-rw-r--r--arch/powerpc/platforms/celleb/spu_priv1.c3
-rw-r--r--arch/powerpc/platforms/celleb/udbg_beat.c5
-rw-r--r--arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c10
-rw-r--r--arch/powerpc/platforms/embedded6xx/prpmc2800.c4
-rw-r--r--arch/powerpc/platforms/iseries/exception.S12
-rw-r--r--arch/powerpc/platforms/iseries/ipl_parms.h2
-rw-r--r--arch/powerpc/platforms/iseries/lpardata.c121
-rw-r--r--arch/powerpc/platforms/iseries/naca.h2
-rw-r--r--arch/powerpc/platforms/iseries/pci.c3
-rw-r--r--arch/powerpc/platforms/iseries/release_data.h2
-rw-r--r--arch/powerpc/platforms/iseries/spcomm_area.h2
-rw-r--r--arch/powerpc/platforms/iseries/vpd_areas.h4
-rw-r--r--arch/powerpc/platforms/maple/pci.c47
-rw-r--r--arch/powerpc/platforms/maple/setup.c4
-rw-r--r--arch/powerpc/platforms/pasemi/dma_lib.c144
-rw-r--r--arch/powerpc/platforms/pasemi/iommu.c19
-rw-r--r--arch/powerpc/platforms/powermac/setup.c2
-rw-r--r--arch/powerpc/platforms/ps3/device-init.c78
-rw-r--r--arch/powerpc/platforms/ps3/htab.c3
-rw-r--r--arch/powerpc/platforms/ps3/interrupt.c2
-rw-r--r--arch/powerpc/platforms/ps3/mm.c3
-rw-r--r--arch/powerpc/platforms/ps3/os-area.c3
-rw-r--r--arch/powerpc/platforms/ps3/setup.c14
-rw-r--r--arch/powerpc/platforms/ps3/spu.c7
-rw-r--r--arch/powerpc/platforms/pseries/Makefile1
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c5
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c25
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c2
-rw-r--r--arch/powerpc/platforms/pseries/phyp_dump.c507
-rw-r--r--arch/powerpc/platforms/pseries/pseries.h2
-rw-r--r--arch/powerpc/platforms/pseries/reconfig.c12
-rw-r--r--arch/powerpc/platforms/pseries/scanlog.c37
-rw-r--r--arch/powerpc/platforms/pseries/setup.c105
-rw-r--r--arch/powerpc/platforms/pseries/xics.c87
-rw-r--r--arch/powerpc/platforms/pseries/xics.h3
-rw-r--r--arch/powerpc/sysdev/Makefile2
-rw-r--r--arch/powerpc/sysdev/cpm1.c114
-rw-r--r--arch/powerpc/sysdev/cpm2.c105
-rw-r--r--arch/powerpc/sysdev/cpm_common.c3
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c2
-rw-r--r--arch/powerpc/sysdev/fsl_lbc.c129
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c611
-rw-r--r--arch/powerpc/sysdev/fsl_soc.h1
-rw-r--r--arch/powerpc/sysdev/mpic.c41
-rw-r--r--arch/powerpc/sysdev/mv64x60_dev.c78
-rw-r--r--arch/powerpc/sysdev/mv64x60_pci.c6
-rw-r--r--arch/powerpc/sysdev/mv64x60_pic.c4
-rw-r--r--arch/powerpc/sysdev/mv64x60_udbg.c2
-rw-r--r--arch/powerpc/sysdev/ppc4xx_pci.c133
-rw-r--r--arch/powerpc/sysdev/ppc4xx_pci.h59
-rw-r--r--arch/powerpc/sysdev/ppc4xx_soc.c200
-rw-r--r--arch/powerpc/sysdev/qe_lib/qe.c13
-rw-r--r--arch/powerpc/sysdev/qe_lib/qe_io.c7
-rw-r--r--arch/powerpc/sysdev/qe_lib/ucc_fast.c32
-rw-r--r--arch/powerpc/sysdev/qe_lib/ucc_slow.c18
-rw-r--r--arch/powerpc/sysdev/rtc_cmos_setup.c2
-rw-r--r--arch/powerpc/sysdev/tsi108_dev.c4
-rw-r--r--arch/powerpc/sysdev/tsi108_pci.c4
-rw-r--r--arch/powerpc/xmon/xmon.c24
-rw-r--r--arch/ppc/8xx_io/commproc.c2
-rw-r--r--arch/ppc/8xx_io/fec.c4
-rw-r--r--arch/ppc/kernel/head.S17
-rw-r--r--arch/ppc/mm/init.c1
-rw-r--r--arch/ppc/platforms/radstone_ppc7d.c8
-rw-r--r--arch/ppc/syslib/mpc52xx_setup.c2
-rw-r--r--arch/sparc64/Kconfig1
-rw-r--r--drivers/block/viodasd.c2
-rw-r--r--drivers/char/hvc_beat.c4
-rw-r--r--drivers/char/xilinx_hwicap/buffer_icap.c22
-rw-r--r--drivers/char/xilinx_hwicap/buffer_icap.h5
-rw-r--r--drivers/char/xilinx_hwicap/fifo_icap.c31
-rw-r--r--drivers/char/xilinx_hwicap/fifo_icap.h1
-rw-r--r--drivers/char/xilinx_hwicap/xilinx_hwicap.c63
-rw-r--r--drivers/char/xilinx_hwicap/xilinx_hwicap.h24
-rw-r--r--drivers/mtd/nand/fsl_elbc_nand.c219
-rw-r--r--drivers/net/Makefile3
-rw-r--r--drivers/net/iseries_veth.c3
-rw-r--r--drivers/net/pasemi_mac.c355
-rw-r--r--drivers/net/pasemi_mac.h35
-rw-r--r--drivers/net/pasemi_mac_ethtool.c159
-rw-r--r--drivers/net/ps3_gelic_net.c81
-rw-r--r--drivers/net/ps3_gelic_net.h20
-rw-r--r--drivers/net/ucc_geth.c8
-rw-r--r--drivers/net/ucc_geth_mii.c11
-rw-r--r--drivers/of/Kconfig12
-rw-r--r--drivers/of/Makefile2
-rw-r--r--drivers/of/base.c26
-rw-r--r--drivers/of/gpio.c242
-rw-r--r--drivers/of/of_i2c.c115
-rw-r--r--drivers/ps3/ps3-sys-manager.c74
-rw-r--r--drivers/ps3/sys-manager-core.c16
-rw-r--r--drivers/serial/cpm_uart/cpm_uart.h3
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_core.c19
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_cpm1.c14
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_cpm2.c52
-rw-r--r--drivers/serial/of_serial.c4
-rw-r--r--drivers/serial/ucc_uart.c16
-rw-r--r--include/asm-powerpc/Kbuild2
-rw-r--r--include/asm-powerpc/abs_addr.h3
-rw-r--r--include/asm-powerpc/bitops.h32
-rw-r--r--include/asm-powerpc/cpm.h14
-rw-r--r--include/asm-powerpc/cpm1.h13
-rw-r--r--include/asm-powerpc/cpm2.h11
-rw-r--r--include/asm-powerpc/cputhreads.h2
-rw-r--r--include/asm-powerpc/dcr-native.h17
-rw-r--r--include/asm-powerpc/dcr-regs.h78
-rw-r--r--include/asm-powerpc/exception.h6
-rw-r--r--include/asm-powerpc/fsl_lbc.h311
-rw-r--r--include/asm-powerpc/gpio.h56
-rw-r--r--include/asm-powerpc/hw_irq.h13
-rw-r--r--include/asm-powerpc/immap_qe.h3
-rw-r--r--include/asm-powerpc/irqflags.h37
-rw-r--r--include/asm-powerpc/iseries/alpaca.h31
-rw-r--r--include/asm-powerpc/iseries/it_lp_reg_save.h85
-rw-r--r--include/asm-powerpc/lmb.h82
-rw-r--r--include/asm-powerpc/machdep.h5
-rw-r--r--include/asm-powerpc/macio.h2
-rw-r--r--include/asm-powerpc/mmu-40x.h2
-rw-r--r--include/asm-powerpc/mmu-44x.h2
-rw-r--r--include/asm-powerpc/mmu-8xx.h2
-rw-r--r--include/asm-powerpc/mmu-fsl-booke.h6
-rw-r--r--include/asm-powerpc/mmu-hash32.h2
-rw-r--r--include/asm-powerpc/mmu-hash64.h3
-rw-r--r--include/asm-powerpc/paca.h12
-rw-r--r--include/asm-powerpc/page.h1
-rw-r--r--include/asm-powerpc/page_32.h2
-rw-r--r--include/asm-powerpc/pasemi_dma.h77
-rw-r--r--include/asm-powerpc/pci-bridge.h4
-rw-r--r--include/asm-powerpc/pgtable-ppc32.h8
-rw-r--r--include/asm-powerpc/phyp_dump.h47
-rw-r--r--include/asm-powerpc/pmi.h2
-rw-r--r--include/asm-powerpc/ppc4xx.h18
-rw-r--r--include/asm-powerpc/ps3.h7
-rw-r--r--include/asm-powerpc/ptrace.h9
-rw-r--r--include/asm-powerpc/qe.h12
-rw-r--r--include/asm-powerpc/rwsem.h35
-rw-r--r--include/asm-powerpc/sparsemem.h1
-rw-r--r--include/asm-powerpc/spinlock.h1
-rw-r--r--include/asm-powerpc/string.h2
-rw-r--r--include/asm-powerpc/system.h1
-rw-r--r--include/asm-powerpc/types.h7
-rw-r--r--include/asm-sparc64/lmb.h10
-rw-r--r--include/linux/lmb.h85
-rw-r--r--include/linux/of.h1
-rw-r--r--include/linux/of_gpio.h69
-rw-r--r--include/linux/of_i2c.h24
-rw-r--r--lib/Kconfig3
-rw-r--r--lib/Makefile2
-rw-r--r--lib/lmb.c428
421 files changed, 14541 insertions, 4552 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index f4839606988b..dfb5bef24013 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -954,6 +954,8 @@ and is between 256 and 4096 characters. It is defined in the file
954 954
955 l2cr= [PPC] 955 l2cr= [PPC]
956 956
957 l3cr= [PPC]
958
957 lapic [X86-32,APIC] Enable the local APIC even if BIOS 959 lapic [X86-32,APIC] Enable the local APIC even if BIOS
958 disabled it. 960 disabled it.
959 961
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index 7b4e8a70882c..4cc780024e6c 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -59,12 +59,39 @@ Table of Contents
59 p) Freescale Synchronous Serial Interface 59 p) Freescale Synchronous Serial Interface
60 q) USB EHCI controllers 60 q) USB EHCI controllers
61 61
62 VII - Specifying interrupt information for devices 62 VII - Marvell Discovery mv64[345]6x System Controller chips
63 1) The /system-controller node
64 2) Child nodes of /system-controller
65 a) Marvell Discovery MDIO bus
66 b) Marvell Discovery ethernet controller
67 c) Marvell Discovery PHY nodes
68 d) Marvell Discovery SDMA nodes
69 e) Marvell Discovery BRG nodes
70 f) Marvell Discovery CUNIT nodes
71 g) Marvell Discovery MPSCROUTING nodes
72 h) Marvell Discovery MPSCINTR nodes
73 i) Marvell Discovery MPSC nodes
74 j) Marvell Discovery Watch Dog Timer nodes
75 k) Marvell Discovery I2C nodes
76 l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
77 m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
78 n) Marvell Discovery GPP (General Purpose Pins) nodes
79 o) Marvell Discovery PCI host bridge node
80 p) Marvell Discovery CPU Error nodes
81 q) Marvell Discovery SRAM Controller nodes
82 r) Marvell Discovery PCI Error Handler nodes
83 s) Marvell Discovery Memory Controller nodes
84
85 VIII - Specifying interrupt information for devices
63 1) interrupts property 86 1) interrupts property
64 2) interrupt-parent property 87 2) interrupt-parent property
65 3) OpenPIC Interrupt Controllers 88 3) OpenPIC Interrupt Controllers
66 4) ISA Interrupt Controllers 89 4) ISA Interrupt Controllers
67 90
91 VIII - Specifying GPIO information for devices
92 1) gpios property
93 2) gpio-controller nodes
94
68 Appendix A - Sample SOC node for MPC8540 95 Appendix A - Sample SOC node for MPC8540
69 96
70 97
@@ -1269,10 +1296,6 @@ platforms are moved over to use the flattened-device-tree model.
1269 1296
1270 Recommended properties: 1297 Recommended properties:
1271 1298
1272 - linux,network-index : This is the intended "index" of this
1273 network device. This is used by the bootwrapper to interpret
1274 MAC addresses passed by the firmware when no information other
1275 than indices is available to associate an address with a device.
1276 - phy-connection-type : a string naming the controller/PHY interface type, 1299 - phy-connection-type : a string naming the controller/PHY interface type,
1277 i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii", 1300 i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii",
1278 "tbi", or "rtbi". This property is only really needed if the connection 1301 "tbi", or "rtbi". This property is only really needed if the connection
@@ -1622,8 +1645,7 @@ platforms are moved over to use the flattened-device-tree model.
1622 - device_type : should be "network", "hldc", "uart", "transparent" 1645 - device_type : should be "network", "hldc", "uart", "transparent"
1623 "bisync", "atm", or "serial". 1646 "bisync", "atm", or "serial".
1624 - compatible : could be "ucc_geth" or "fsl_atm" and so on. 1647 - compatible : could be "ucc_geth" or "fsl_atm" and so on.
1625 - model : should be "UCC". 1648 - cell-index : the ucc number(1-8), corresponding to UCCx in UM.
1626 - device-id : the ucc number(1-8), corresponding to UCCx in UM.
1627 - reg : Offset and length of the register set for the device 1649 - reg : Offset and length of the register set for the device
1628 - interrupts : <a b> where a is the interrupt number and b is a 1650 - interrupts : <a b> where a is the interrupt number and b is a
1629 field that represents an encoding of the sense and level 1651 field that represents an encoding of the sense and level
@@ -1667,10 +1689,6 @@ platforms are moved over to use the flattened-device-tree model.
1667 - phy-handle : The phandle for the PHY connected to this controller. 1689 - phy-handle : The phandle for the PHY connected to this controller.
1668 1690
1669 Recommended properties: 1691 Recommended properties:
1670 - linux,network-index : This is the intended "index" of this
1671 network device. This is used by the bootwrapper to interpret
1672 MAC addresses passed by the firmware when no information other
1673 than indices is available to associate an address with a device.
1674 - phy-connection-type : a string naming the controller/PHY interface type, 1692 - phy-connection-type : a string naming the controller/PHY interface type,
1675 i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal 1693 i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal
1676 Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only), 1694 Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only),
@@ -1680,8 +1698,7 @@ platforms are moved over to use the flattened-device-tree model.
1680 ucc@2000 { 1698 ucc@2000 {
1681 device_type = "network"; 1699 device_type = "network";
1682 compatible = "ucc_geth"; 1700 compatible = "ucc_geth";
1683 model = "UCC"; 1701 cell-index = <1>;
1684 device-id = <1>;
1685 reg = <2000 200>; 1702 reg = <2000 200>;
1686 interrupts = <a0 0>; 1703 interrupts = <a0 0>;
1687 interrupt-parent = <700>; 1704 interrupt-parent = <700>;
@@ -1995,7 +2012,6 @@ platforms are moved over to use the flattened-device-tree model.
1995 interrupts = <20 8>; 2012 interrupts = <20 8>;
1996 interrupt-parent = <&PIC>; 2013 interrupt-parent = <&PIC>;
1997 phy-handle = <&PHY0>; 2014 phy-handle = <&PHY0>;
1998 linux,network-index = <0>;
1999 fsl,cpm-command = <12000300>; 2015 fsl,cpm-command = <12000300>;
2000 }; 2016 };
2001 2017
@@ -2217,12 +2233,6 @@ platforms are moved over to use the flattened-device-tree model.
2217 EMAC, that is the content of the current (bogus) "phy-port" 2233 EMAC, that is the content of the current (bogus) "phy-port"
2218 property. 2234 property.
2219 2235
2220 Recommended properties:
2221 - linux,network-index : This is the intended "index" of this
2222 network device. This is used by the bootwrapper to interpret
2223 MAC addresses passed by the firmware when no information other
2224 than indices is available to associate an address with a device.
2225
2226 Optional properties: 2236 Optional properties:
2227 - phy-address : 1 cell, optional, MDIO address of the PHY. If absent, 2237 - phy-address : 1 cell, optional, MDIO address of the PHY. If absent,
2228 a search is performed. 2238 a search is performed.
@@ -2246,7 +2256,6 @@ platforms are moved over to use the flattened-device-tree model.
2246 Example: 2256 Example:
2247 2257
2248 EMAC0: ethernet@40000800 { 2258 EMAC0: ethernet@40000800 {
2249 linux,network-index = <0>;
2250 device_type = "network"; 2259 device_type = "network";
2251 compatible = "ibm,emac-440gp", "ibm,emac"; 2260 compatible = "ibm,emac-440gp", "ibm,emac";
2252 interrupt-parent = <&UIC1>; 2261 interrupt-parent = <&UIC1>;
@@ -2817,9 +2826,528 @@ platforms are moved over to use the flattened-device-tree model.
2817 }; 2826 };
2818 2827
2819 2828
2820 More devices will be defined as this spec matures. 2829VII - Marvell Discovery mv64[345]6x System Controller chips
2830===========================================================
2831
2832The Marvell mv64[345]60 series of system controller chips contain
2833many of the peripherals needed to implement a complete computer
2834system. In this section, we define device tree nodes to describe
2835the system controller chip itself and each of the peripherals
2836which it contains. Compatible string values for each node are
2837prefixed with the string "marvell,", for Marvell Technology Group Ltd.
2838
28391) The /system-controller node
2840
2841 This node is used to represent the system-controller and must be
2842 present when the system uses a system contller chip. The top-level
2843 system-controller node contains information that is global to all
2844 devices within the system controller chip. The node name begins
2845 with "system-controller" followed by the unit address, which is
2846 the base address of the memory-mapped register set for the system
2847 controller chip.
2848
2849 Required properties:
2850
2851 - ranges : Describes the translation of system controller addresses
2852 for memory mapped registers.
2853 - clock-frequency: Contains the main clock frequency for the system
2854 controller chip.
2855 - reg : This property defines the address and size of the
2856 memory-mapped registers contained within the system controller
2857 chip. The address specified in the "reg" property should match
2858 the unit address of the system-controller node.
2859 - #address-cells : Address representation for system controller
2860 devices. This field represents the number of cells needed to
2861 represent the address of the memory-mapped registers of devices
2862 within the system controller chip.
2863 - #size-cells : Size representation for for the memory-mapped
2864 registers within the system controller chip.
2865 - #interrupt-cells : Defines the width of cells used to represent
2866 interrupts.
2867
2868 Optional properties:
2869
2870 - model : The specific model of the system controller chip. Such
2871 as, "mv64360", "mv64460", or "mv64560".
2872 - compatible : A string identifying the compatibility identifiers
2873 of the system controller chip.
2874
2875 The system-controller node contains child nodes for each system
2876 controller device that the platform uses. Nodes should not be created
2877 for devices which exist on the system controller chip but are not used
2878
2879 Example Marvell Discovery mv64360 system-controller node:
2880
2881 system-controller@f1000000 { /* Marvell Discovery mv64360 */
2882 #address-cells = <1>;
2883 #size-cells = <1>;
2884 model = "mv64360"; /* Default */
2885 compatible = "marvell,mv64360";
2886 clock-frequency = <133333333>;
2887 reg = <0xf1000000 0x10000>;
2888 virtual-reg = <0xf1000000>;
2889 ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */
2890 0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */
2891 0xa0000000 0xa0000000 0x4000000 /* User FLASH */
2892 0x00000000 0xf1000000 0x0010000 /* Bridge's regs */
2893 0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */
2894
2895 [ child node definitions... ]
2896 }
2897
28982) Child nodes of /system-controller
2899
2900 a) Marvell Discovery MDIO bus
2901
2902 The MDIO is a bus to which the PHY devices are connected. For each
2903 device that exists on this bus, a child node should be created. See
2904 the definition of the PHY node below for an example of how to define
2905 a PHY.
2906
2907 Required properties:
2908 - #address-cells : Should be <1>
2909 - #size-cells : Should be <0>
2910 - device_type : Should be "mdio"
2911 - compatible : Should be "marvell,mv64360-mdio"
2912
2913 Example:
2914
2915 mdio {
2916 #address-cells = <1>;
2917 #size-cells = <0>;
2918 device_type = "mdio";
2919 compatible = "marvell,mv64360-mdio";
2920
2921 ethernet-phy@0 {
2922 ......
2923 };
2924 };
2925
2926
2927 b) Marvell Discovery ethernet controller
2928
2929 The Discover ethernet controller is described with two levels
2930 of nodes. The first level describes an ethernet silicon block
2931 and the second level describes up to 3 ethernet nodes within
2932 that block. The reason for the multiple levels is that the
2933 registers for the node are interleaved within a single set
2934 of registers. The "ethernet-block" level describes the
2935 shared register set, and the "ethernet" nodes describe ethernet
2936 port-specific properties.
2937
2938 Ethernet block node
2939
2940 Required properties:
2941 - #address-cells : <1>
2942 - #size-cells : <0>
2943 - compatible : "marvell,mv64360-eth-block"
2944 - reg : Offset and length of the register set for this block
2945
2946 Example Discovery Ethernet block node:
2947 ethernet-block@2000 {
2948 #address-cells = <1>;
2949 #size-cells = <0>;
2950 compatible = "marvell,mv64360-eth-block";
2951 reg = <0x2000 0x2000>;
2952 ethernet@0 {
2953 .......
2954 };
2955 };
2956
2957 Ethernet port node
2958
2959 Required properties:
2960 - device_type : Should be "network".
2961 - compatible : Should be "marvell,mv64360-eth".
2962 - reg : Should be <0>, <1>, or <2>, according to which registers
2963 within the silicon block the device uses.
2964 - interrupts : <a> where a is the interrupt number for the port.
2965 - interrupt-parent : the phandle for the interrupt controller
2966 that services interrupts for this device.
2967 - phy : the phandle for the PHY connected to this ethernet
2968 controller.
2969 - local-mac-address : 6 bytes, MAC address
2970
2971 Example Discovery Ethernet port node:
2972 ethernet@0 {
2973 device_type = "network";
2974 compatible = "marvell,mv64360-eth";
2975 reg = <0>;
2976 interrupts = <32>;
2977 interrupt-parent = <&PIC>;
2978 phy = <&PHY0>;
2979 local-mac-address = [ 00 00 00 00 00 00 ];
2980 };
2981
2982
2983
2984 c) Marvell Discovery PHY nodes
2985
2986 Required properties:
2987 - device_type : Should be "ethernet-phy"
2988 - interrupts : <a> where a is the interrupt number for this phy.
2989 - interrupt-parent : the phandle for the interrupt controller that
2990 services interrupts for this device.
2991 - reg : The ID number for the phy, usually a small integer
2992
2993 Example Discovery PHY node:
2994 ethernet-phy@1 {
2995 device_type = "ethernet-phy";
2996 compatible = "broadcom,bcm5421";
2997 interrupts = <76>; /* GPP 12 */
2998 interrupt-parent = <&PIC>;
2999 reg = <1>;
3000 };
3001
3002
3003 d) Marvell Discovery SDMA nodes
3004
3005 Represent DMA hardware associated with the MPSC (multiprotocol
3006 serial controllers).
3007
3008 Required properties:
3009 - compatible : "marvell,mv64360-sdma"
3010 - reg : Offset and length of the register set for this device
3011 - interrupts : <a> where a is the interrupt number for the DMA
3012 device.
3013 - interrupt-parent : the phandle for the interrupt controller
3014 that services interrupts for this device.
3015
3016 Example Discovery SDMA node:
3017 sdma@4000 {
3018 compatible = "marvell,mv64360-sdma";
3019 reg = <0x4000 0xc18>;
3020 virtual-reg = <0xf1004000>;
3021 interrupts = <36>;
3022 interrupt-parent = <&PIC>;
3023 };
3024
3025
3026 e) Marvell Discovery BRG nodes
3027
3028 Represent baud rate generator hardware associated with the MPSC
3029 (multiprotocol serial controllers).
3030
3031 Required properties:
3032 - compatible : "marvell,mv64360-brg"
3033 - reg : Offset and length of the register set for this device
3034 - clock-src : A value from 0 to 15 which selects the clock
3035 source for the baud rate generator. This value corresponds
3036 to the CLKS value in the BRGx configuration register. See
3037 the mv64x60 User's Manual.
3038 - clock-frequence : The frequency (in Hz) of the baud rate
3039 generator's input clock.
3040 - current-speed : The current speed setting (presumably by
3041 firmware) of the baud rate generator.
3042
3043 Example Discovery BRG node:
3044 brg@b200 {
3045 compatible = "marvell,mv64360-brg";
3046 reg = <0xb200 0x8>;
3047 clock-src = <8>;
3048 clock-frequency = <133333333>;
3049 current-speed = <9600>;
3050 };
3051
3052
3053 f) Marvell Discovery CUNIT nodes
3054
3055 Represent the Serial Communications Unit device hardware.
3056
3057 Required properties:
3058 - reg : Offset and length of the register set for this device
3059
3060 Example Discovery CUNIT node:
3061 cunit@f200 {
3062 reg = <0xf200 0x200>;
3063 };
3064
3065
3066 g) Marvell Discovery MPSCROUTING nodes
3067
3068 Represent the Discovery's MPSC routing hardware
3069
3070 Required properties:
3071 - reg : Offset and length of the register set for this device
3072
3073 Example Discovery CUNIT node:
3074 mpscrouting@b500 {
3075 reg = <0xb400 0xc>;
3076 };
3077
3078
3079 h) Marvell Discovery MPSCINTR nodes
3080
3081 Represent the Discovery's MPSC DMA interrupt hardware registers
3082 (SDMA cause and mask registers).
3083
3084 Required properties:
3085 - reg : Offset and length of the register set for this device
2821 3086
2822VII - Specifying interrupt information for devices 3087 Example Discovery MPSCINTR node:
3088 mpsintr@b800 {
3089 reg = <0xb800 0x100>;
3090 };
3091
3092
3093 i) Marvell Discovery MPSC nodes
3094
3095 Represent the Discovery's MPSC (Multiprotocol Serial Controller)
3096 serial port.
3097
3098 Required properties:
3099 - device_type : "serial"
3100 - compatible : "marvell,mv64360-mpsc"
3101 - reg : Offset and length of the register set for this device
3102 - sdma : the phandle for the SDMA node used by this port
3103 - brg : the phandle for the BRG node used by this port
3104 - cunit : the phandle for the CUNIT node used by this port
3105 - mpscrouting : the phandle for the MPSCROUTING node used by this port
3106 - mpscintr : the phandle for the MPSCINTR node used by this port
3107 - cell-index : the hardware index of this cell in the MPSC core
3108 - max_idle : value needed for MPSC CHR3 (Maximum Frame Length)
3109 register
3110 - interrupts : <a> where a is the interrupt number for the MPSC.
3111 - interrupt-parent : the phandle for the interrupt controller
3112 that services interrupts for this device.
3113
3114 Example Discovery MPSCINTR node:
3115 mpsc@8000 {
3116 device_type = "serial";
3117 compatible = "marvell,mv64360-mpsc";
3118 reg = <0x8000 0x38>;
3119 virtual-reg = <0xf1008000>;
3120 sdma = <&SDMA0>;
3121 brg = <&BRG0>;
3122 cunit = <&CUNIT>;
3123 mpscrouting = <&MPSCROUTING>;
3124 mpscintr = <&MPSCINTR>;
3125 cell-index = <0>;
3126 max_idle = <40>;
3127 interrupts = <40>;
3128 interrupt-parent = <&PIC>;
3129 };
3130
3131
3132 j) Marvell Discovery Watch Dog Timer nodes
3133
3134 Represent the Discovery's watchdog timer hardware
3135
3136 Required properties:
3137 - compatible : "marvell,mv64360-wdt"
3138 - reg : Offset and length of the register set for this device
3139
3140 Example Discovery Watch Dog Timer node:
3141 wdt@b410 {
3142 compatible = "marvell,mv64360-wdt";
3143 reg = <0xb410 0x8>;
3144 };
3145
3146
3147 k) Marvell Discovery I2C nodes
3148
3149 Represent the Discovery's I2C hardware
3150
3151 Required properties:
3152 - device_type : "i2c"
3153 - compatible : "marvell,mv64360-i2c"
3154 - reg : Offset and length of the register set for this device
3155 - interrupts : <a> where a is the interrupt number for the I2C.
3156 - interrupt-parent : the phandle for the interrupt controller
3157 that services interrupts for this device.
3158
3159 Example Discovery I2C node:
3160 compatible = "marvell,mv64360-i2c";
3161 reg = <0xc000 0x20>;
3162 virtual-reg = <0xf100c000>;
3163 interrupts = <37>;
3164 interrupt-parent = <&PIC>;
3165 };
3166
3167
3168 l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
3169
3170 Represent the Discovery's PIC hardware
3171
3172 Required properties:
3173 - #interrupt-cells : <1>
3174 - #address-cells : <0>
3175 - compatible : "marvell,mv64360-pic"
3176 - reg : Offset and length of the register set for this device
3177 - interrupt-controller
3178
3179 Example Discovery PIC node:
3180 pic {
3181 #interrupt-cells = <1>;
3182 #address-cells = <0>;
3183 compatible = "marvell,mv64360-pic";
3184 reg = <0x0 0x88>;
3185 interrupt-controller;
3186 };
3187
3188
3189 m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
3190
3191 Represent the Discovery's MPP hardware
3192
3193 Required properties:
3194 - compatible : "marvell,mv64360-mpp"
3195 - reg : Offset and length of the register set for this device
3196
3197 Example Discovery MPP node:
3198 mpp@f000 {
3199 compatible = "marvell,mv64360-mpp";
3200 reg = <0xf000 0x10>;
3201 };
3202
3203
3204 n) Marvell Discovery GPP (General Purpose Pins) nodes
3205
3206 Represent the Discovery's GPP hardware
3207
3208 Required properties:
3209 - compatible : "marvell,mv64360-gpp"
3210 - reg : Offset and length of the register set for this device
3211
3212 Example Discovery GPP node:
3213 gpp@f000 {
3214 compatible = "marvell,mv64360-gpp";
3215 reg = <0xf100 0x20>;
3216 };
3217
3218
3219 o) Marvell Discovery PCI host bridge node
3220
3221 Represents the Discovery's PCI host bridge device. The properties
3222 for this node conform to Rev 2.1 of the PCI Bus Binding to IEEE
3223 1275-1994. A typical value for the compatible property is
3224 "marvell,mv64360-pci".
3225
3226 Example Discovery PCI host bridge node
3227 pci@80000000 {
3228 #address-cells = <3>;
3229 #size-cells = <2>;
3230 #interrupt-cells = <1>;
3231 device_type = "pci";
3232 compatible = "marvell,mv64360-pci";
3233 reg = <0xcf8 0x8>;
3234 ranges = <0x01000000 0x0 0x0
3235 0x88000000 0x0 0x01000000
3236 0x02000000 0x0 0x80000000
3237 0x80000000 0x0 0x08000000>;
3238 bus-range = <0 255>;
3239 clock-frequency = <66000000>;
3240 interrupt-parent = <&PIC>;
3241 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
3242 interrupt-map = <
3243 /* IDSEL 0x0a */
3244 0x5000 0 0 1 &PIC 80
3245 0x5000 0 0 2 &PIC 81
3246 0x5000 0 0 3 &PIC 91
3247 0x5000 0 0 4 &PIC 93
3248
3249 /* IDSEL 0x0b */
3250 0x5800 0 0 1 &PIC 91
3251 0x5800 0 0 2 &PIC 93
3252 0x5800 0 0 3 &PIC 80
3253 0x5800 0 0 4 &PIC 81
3254
3255 /* IDSEL 0x0c */
3256 0x6000 0 0 1 &PIC 91
3257 0x6000 0 0 2 &PIC 93
3258 0x6000 0 0 3 &PIC 80
3259 0x6000 0 0 4 &PIC 81
3260
3261 /* IDSEL 0x0d */
3262 0x6800 0 0 1 &PIC 93
3263 0x6800 0 0 2 &PIC 80
3264 0x6800 0 0 3 &PIC 81
3265 0x6800 0 0 4 &PIC 91
3266 >;
3267 };
3268
3269
3270 p) Marvell Discovery CPU Error nodes
3271
3272 Represent the Discovery's CPU error handler device.
3273
3274 Required properties:
3275 - compatible : "marvell,mv64360-cpu-error"
3276 - reg : Offset and length of the register set for this device
3277 - interrupts : the interrupt number for this device
3278 - interrupt-parent : the phandle for the interrupt controller
3279 that services interrupts for this device.
3280
3281 Example Discovery CPU Error node:
3282 cpu-error@0070 {
3283 compatible = "marvell,mv64360-cpu-error";
3284 reg = <0x70 0x10 0x128 0x28>;
3285 interrupts = <3>;
3286 interrupt-parent = <&PIC>;
3287 };
3288
3289
3290 q) Marvell Discovery SRAM Controller nodes
3291
3292 Represent the Discovery's SRAM controller device.
3293
3294 Required properties:
3295 - compatible : "marvell,mv64360-sram-ctrl"
3296 - reg : Offset and length of the register set for this device
3297 - interrupts : the interrupt number for this device
3298 - interrupt-parent : the phandle for the interrupt controller
3299 that services interrupts for this device.
3300
3301 Example Discovery SRAM Controller node:
3302 sram-ctrl@0380 {
3303 compatible = "marvell,mv64360-sram-ctrl";
3304 reg = <0x380 0x80>;
3305 interrupts = <13>;
3306 interrupt-parent = <&PIC>;
3307 };
3308
3309
3310 r) Marvell Discovery PCI Error Handler nodes
3311
3312 Represent the Discovery's PCI error handler device.
3313
3314 Required properties:
3315 - compatible : "marvell,mv64360-pci-error"
3316 - reg : Offset and length of the register set for this device
3317 - interrupts : the interrupt number for this device
3318 - interrupt-parent : the phandle for the interrupt controller
3319 that services interrupts for this device.
3320
3321 Example Discovery PCI Error Handler node:
3322 pci-error@1d40 {
3323 compatible = "marvell,mv64360-pci-error";
3324 reg = <0x1d40 0x40 0xc28 0x4>;
3325 interrupts = <12>;
3326 interrupt-parent = <&PIC>;
3327 };
3328
3329
3330 s) Marvell Discovery Memory Controller nodes
3331
3332 Represent the Discovery's memory controller device.
3333
3334 Required properties:
3335 - compatible : "marvell,mv64360-mem-ctrl"
3336 - reg : Offset and length of the register set for this device
3337 - interrupts : the interrupt number for this device
3338 - interrupt-parent : the phandle for the interrupt controller
3339 that services interrupts for this device.
3340
3341 Example Discovery Memory Controller node:
3342 mem-ctrl@1400 {
3343 compatible = "marvell,mv64360-mem-ctrl";
3344 reg = <0x1400 0x60>;
3345 interrupts = <17>;
3346 interrupt-parent = <&PIC>;
3347 };
3348
3349
3350VIII - Specifying interrupt information for devices
2823=================================================== 3351===================================================
2824 3352
2825The device tree represents the busses and devices of a hardware 3353The device tree represents the busses and devices of a hardware
@@ -2905,6 +3433,54 @@ encodings listed below:
2905 2 = high to low edge sensitive type enabled 3433 2 = high to low edge sensitive type enabled
2906 3 = low to high edge sensitive type enabled 3434 3 = low to high edge sensitive type enabled
2907 3435
3436VIII - Specifying GPIO information for devices
3437==============================================
3438
34391) gpios property
3440-----------------
3441
3442Nodes that makes use of GPIOs should define them using `gpios' property,
3443format of which is: <&gpio-controller1-phandle gpio1-specifier
3444 &gpio-controller2-phandle gpio2-specifier
3445 0 /* holes are permitted, means no GPIO 3 */
3446 &gpio-controller4-phandle gpio4-specifier
3447 ...>;
3448
3449Note that gpio-specifier length is controller dependent.
3450
3451gpio-specifier may encode: bank, pin position inside the bank,
3452whether pin is open-drain and whether pin is logically inverted.
3453
3454Example of the node using GPIOs:
3455
3456 node {
3457 gpios = <&qe_pio_e 18 0>;
3458 };
3459
3460In this example gpio-specifier is "18 0" and encodes GPIO pin number,
3461and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller.
3462
34632) gpio-controller nodes
3464------------------------
3465
3466Every GPIO controller node must have #gpio-cells property defined,
3467this information will be used to translate gpio-specifiers.
3468
3469Example of two SOC GPIO banks defined as gpio-controller nodes:
3470
3471 qe_pio_a: gpio-controller@1400 {
3472 #gpio-cells = <2>;
3473 compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
3474 reg = <0x1400 0x18>;
3475 gpio-controller;
3476 };
3477
3478 qe_pio_e: gpio-controller@1460 {
3479 #gpio-cells = <2>;
3480 compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
3481 reg = <0x1460 0x18>;
3482 gpio-controller;
3483 };
2908 3484
2909Appendix A - Sample SOC node for MPC8540 3485Appendix A - Sample SOC node for MPC8540
2910======================================== 3486========================================
diff --git a/Documentation/powerpc/phyp-assisted-dump.txt b/Documentation/powerpc/phyp-assisted-dump.txt
new file mode 100644
index 000000000000..c4682b982a2e
--- /dev/null
+++ b/Documentation/powerpc/phyp-assisted-dump.txt
@@ -0,0 +1,127 @@
1
2 Hypervisor-Assisted Dump
3 ------------------------
4 November 2007
5
6The goal of hypervisor-assisted dump is to enable the dump of
7a crashed system, and to do so from a fully-reset system, and
8to minimize the total elapsed time until the system is back
9in production use.
10
11As compared to kdump or other strategies, hypervisor-assisted
12dump offers several strong, practical advantages:
13
14-- Unlike kdump, the system has been reset, and loaded
15 with a fresh copy of the kernel. In particular,
16 PCI and I/O devices have been reinitialized and are
17 in a clean, consistent state.
18-- As the dump is performed, the dumped memory becomes
19 immediately available to the system for normal use.
20-- After the dump is completed, no further reboots are
21 required; the system will be fully usable, and running
22 in it's normal, production mode on it normal kernel.
23
24The above can only be accomplished by coordination with,
25and assistance from the hypervisor. The procedure is
26as follows:
27
28-- When a system crashes, the hypervisor will save
29 the low 256MB of RAM to a previously registered
30 save region. It will also save system state, system
31 registers, and hardware PTE's.
32
33-- After the low 256MB area has been saved, the
34 hypervisor will reset PCI and other hardware state.
35 It will *not* clear RAM. It will then launch the
36 bootloader, as normal.
37
38-- The freshly booted kernel will notice that there
39 is a new node (ibm,dump-kernel) in the device tree,
40 indicating that there is crash data available from
41 a previous boot. It will boot into only 256MB of RAM,
42 reserving the rest of system memory.
43
44-- Userspace tools will parse /sys/kernel/release_region
45 and read /proc/vmcore to obtain the contents of memory,
46 which holds the previous crashed kernel. The userspace
47 tools may copy this info to disk, or network, nas, san,
48 iscsi, etc. as desired.
49
50 For Example: the values in /sys/kernel/release-region
51 would look something like this (address-range pairs).
52 CPU:0x177fee000-0x10000: HPTE:0x177ffe020-0x1000: /
53 DUMP:0x177fff020-0x10000000, 0x10000000-0x16F1D370A
54
55-- As the userspace tools complete saving a portion of
56 dump, they echo an offset and size to
57 /sys/kernel/release_region to release the reserved
58 memory back to general use.
59
60 An example of this is:
61 "echo 0x40000000 0x10000000 > /sys/kernel/release_region"
62 which will release 256MB at the 1GB boundary.
63
64Please note that the hypervisor-assisted dump feature
65is only available on Power6-based systems with recent
66firmware versions.
67
68Implementation details:
69----------------------
70
71During boot, a check is made to see if firmware supports
72this feature on this particular machine. If it does, then
73we check to see if a active dump is waiting for us. If yes
74then everything but 256 MB of RAM is reserved during early
75boot. This area is released once we collect a dump from user
76land scripts that are run. If there is dump data, then
77the /sys/kernel/release_region file is created, and
78the reserved memory is held.
79
80If there is no waiting dump data, then only the highest
81256MB of the ram is reserved as a scratch area. This area
82is *not* released: this region will be kept permanently
83reserved, so that it can act as a receptacle for a copy
84of the low 256MB in the case a crash does occur. See,
85however, "open issues" below, as to whether
86such a reserved region is really needed.
87
88Currently the dump will be copied from /proc/vmcore to a
89a new file upon user intervention. The starting address
90to be read and the range for each data point in provided
91in /sys/kernel/release_region.
92
93The tools to examine the dump will be same as the ones
94used for kdump.
95
96General notes:
97--------------
98Security: please note that there are potential security issues
99with any sort of dump mechanism. In particular, plaintext
100(unencrypted) data, and possibly passwords, may be present in
101the dump data. Userspace tools must take adequate precautions to
102preserve security.
103
104Open issues/ToDo:
105------------
106 o The various code paths that tell the hypervisor that a crash
107 occurred, vs. it simply being a normal reboot, should be
108 reviewed, and possibly clarified/fixed.
109
110 o Instead of using /sys/kernel, should there be a /sys/dump
111 instead? There is a dump_subsys being created by the s390 code,
112 perhaps the pseries code should use a similar layout as well.
113
114 o Is reserving a 256MB region really required? The goal of
115 reserving a 256MB scratch area is to make sure that no
116 important crash data is clobbered when the hypervisor
117 save low mem to the scratch area. But, if one could assure
118 that nothing important is located in some 256MB area, then
119 it would not need to be reserved. Something that can be
120 improved in subsequent versions.
121
122 o Still working the kdump team to integrate this with kdump,
123 some work remains but this would not affect the current
124 patches.
125
126 o Still need to write a shell script, to copy the dump away.
127 Currently I am parsing it manually.
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 1189d8d6170d..4bb2e9310a56 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -49,6 +49,19 @@ config IRQ_PER_CPU
49 bool 49 bool
50 default y 50 default y
51 51
52config STACKTRACE_SUPPORT
53 bool
54 default y
55
56config TRACE_IRQFLAGS_SUPPORT
57 bool
58 depends on PPC64
59 default y
60
61config LOCKDEP_SUPPORT
62 bool
63 default y
64
52config RWSEM_GENERIC_SPINLOCK 65config RWSEM_GENERIC_SPINLOCK
53 bool 66 bool
54 67
@@ -81,6 +94,11 @@ config GENERIC_FIND_NEXT_BIT
81 bool 94 bool
82 default y 95 default y
83 96
97config GENERIC_GPIO
98 bool
99 help
100 Generic GPIO API support
101
84config ARCH_NO_VIRT_TO_BUS 102config ARCH_NO_VIRT_TO_BUS
85 def_bool PPC64 103 def_bool PPC64
86 104
@@ -91,6 +109,7 @@ config PPC
91 select HAVE_OPROFILE 109 select HAVE_OPROFILE
92 select HAVE_KPROBES 110 select HAVE_KPROBES
93 select HAVE_KRETPROBES 111 select HAVE_KRETPROBES
112 select HAVE_LMB
94 113
95config EARLY_PRINTK 114config EARLY_PRINTK
96 bool 115 bool
@@ -210,15 +229,6 @@ source kernel/Kconfig.hz
210source kernel/Kconfig.preempt 229source kernel/Kconfig.preempt
211source "fs/Kconfig.binfmt" 230source "fs/Kconfig.binfmt"
212 231
213# We optimistically allocate largepages from the VM, so make the limit
214# large enough (16MB). This badly named config option is actually
215# max order + 1
216config FORCE_MAX_ZONEORDER
217 int
218 depends on PPC64
219 default "9" if PPC_64K_PAGES
220 default "13"
221
222config HUGETLB_PAGE_SIZE_VARIABLE 232config HUGETLB_PAGE_SIZE_VARIABLE
223 bool 233 bool
224 depends on HUGETLB_PAGE 234 depends on HUGETLB_PAGE
@@ -307,6 +317,16 @@ config CRASH_DUMP
307 317
308 Don't change this unless you know what you are doing. 318 Don't change this unless you know what you are doing.
309 319
320config PHYP_DUMP
321 bool "Hypervisor-assisted dump (EXPERIMENTAL)"
322 depends on PPC_PSERIES && EXPERIMENTAL
323 help
324 Hypervisor-assisted dump is meant to be a kdump replacement
325 offering robustness and speed not possible without system
326 hypervisor assistence.
327
328 If unsure, say "N"
329
310config PPCBUG_NVRAM 330config PPCBUG_NVRAM
311 bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC 331 bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC
312 default y if PPC_PREP 332 default y if PPC_PREP
@@ -381,6 +401,26 @@ config PPC_64K_PAGES
381 while on hardware with such support, it will be used to map 401 while on hardware with such support, it will be used to map
382 normal application pages. 402 normal application pages.
383 403
404config FORCE_MAX_ZONEORDER
405 int "Maximum zone order"
406 default "9" if PPC_64K_PAGES
407 default "13" if PPC64 && !PPC_64K_PAGES
408 default "11"
409 help
410 The kernel memory allocator divides physically contiguous memory
411 blocks into "zones", where each zone is a power of two number of
412 pages. This option selects the largest power of two that the kernel
413 keeps in the memory allocator. If you need to allocate very large
414 blocks of physically contiguous memory, then you may need to
415 increase this value.
416
417 This config option is actually maximum order plus one. For example,
418 a value of 11 means that the largest free memory block is 2^10 pages.
419
420 The page size is not necessarily 4KB. For example, on 64-bit
421 systems, 64KB pages can be enabled via CONFIG_PPC_64K_PAGES. Keep
422 this in mind when choosing a value for this option.
423
384config PPC_SUBPAGE_PROT 424config PPC_SUBPAGE_PROT
385 bool "Support setting protections for 4k subpages" 425 bool "Support setting protections for 4k subpages"
386 depends on PPC_64K_PAGES 426 depends on PPC_64K_PAGES
@@ -490,6 +530,14 @@ config FSL_PCI
490 bool 530 bool
491 select PPC_INDIRECT_PCI 531 select PPC_INDIRECT_PCI
492 532
533config 4xx_SOC
534 bool
535
536config FSL_LBC
537 bool
538 help
539 Freescale Localbus support
540
493# Yes MCA RS/6000s exist but Linux-PPC does not currently support any 541# Yes MCA RS/6000s exist but Linux-PPC does not currently support any
494config MCA 542config MCA
495 bool 543 bool
@@ -663,22 +711,6 @@ config CONSISTENT_SIZE
663 hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL 711 hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL
664 default "0x00200000" if NOT_COHERENT_CACHE 712 default "0x00200000" if NOT_COHERENT_CACHE
665 713
666config BOOT_LOAD_BOOL
667 bool "Set the boot link/load address"
668 depends on ADVANCED_OPTIONS && !PPC_MULTIPLATFORM
669 help
670 This option allows you to set the initial load address of the zImage
671 or zImage.initrd file. This can be useful if you are on a board
672 which has a small amount of memory.
673
674 Say N here unless you know what you are doing.
675
676config BOOT_LOAD
677 hex "Link/load address for booting" if BOOT_LOAD_BOOL
678 default "0x00400000" if 40x || 8xx || 8260
679 default "0x01000000" if 44x
680 default "0x00800000"
681
682config PIN_TLB 714config PIN_TLB
683 bool "Pinned Kernel TLBs (860 ONLY)" 715 bool "Pinned Kernel TLBs (860 ONLY)"
684 depends on ADVANCED_OPTIONS && 8xx 716 depends on ADVANCED_OPTIONS && 8xx
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index db7cc34c24d4..a86d8d853214 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -269,7 +269,7 @@ config PPC_EARLY_DEBUG_CPM_ADDR
269 hex "CPM UART early debug transmit descriptor address" 269 hex "CPM UART early debug transmit descriptor address"
270 depends on PPC_EARLY_DEBUG_CPM 270 depends on PPC_EARLY_DEBUG_CPM
271 default "0xfa202008" if PPC_EP88XC 271 default "0xfa202008" if PPC_EP88XC
272 default "0xf0000008" if CPM2 272 default "0xf0001ff8" if CPM2
273 default "0xff002008" if CPM1 273 default "0xff002008" if CPM1
274 help 274 help
275 This specifies the address of the transmit descriptor 275 This specifies the address of the transmit descriptor
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index ab5cfe8ef988..e2ec4a91ccef 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -71,13 +71,11 @@ endif
71 71
72LDFLAGS_vmlinux := -Bstatic 72LDFLAGS_vmlinux := -Bstatic
73 73
74CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
75AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
76CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc 74CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc
77CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple 75CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 -mmultiple
78KBUILD_CPPFLAGS += $(CPPFLAGS-y) 76KBUILD_CPPFLAGS += -Iarch/$(ARCH)
79KBUILD_AFLAGS += $(AFLAGS-y) 77KBUILD_AFLAGS += -Iarch/$(ARCH)
80KBUILD_CFLAGS += -msoft-float -pipe $(CFLAGS-y) 78KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y)
81CPP = $(CC) -E $(KBUILD_CFLAGS) 79CPP = $(CC) -E $(KBUILD_CFLAGS)
82 80
83CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__ 81CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__
@@ -164,7 +162,7 @@ boot := arch/$(ARCH)/boot
164$(BOOT_TARGETS): vmlinux 162$(BOOT_TARGETS): vmlinux
165 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@) 163 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
166 164
167bootwrapper_install: 165bootwrapper_install %.dtb:
168 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@) 166 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
169 167
170define archhelp 168define archhelp
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 1aded8f759d0..5ba50c673390 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -40,6 +40,7 @@ $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
40$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 40$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
41$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 41$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
42$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 42$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
43$(obj)/virtex405-head.o: BOOTCFLAGS += -mcpu=405
43 44
44 45
45zlib := inffast.c inflate.c inftrees.c 46zlib := 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
64 cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \ 65 cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
65 fixed-head.S ep88xc.c ep405.c \ 66 fixed-head.S ep88xc.c ep405.c \
66 cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ 67 cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
67 cuboot-warp.c cuboot-85xx-cpm2.c 68 cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
69 virtex405-head.S
68src-boot := $(src-wlib) $(src-plat) empty.c 70src-boot := $(src-wlib) $(src-plat) empty.c
69 71
70src-boot := $(addprefix $(obj)/, $(src-boot)) 72src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -192,7 +194,7 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp
192image-$(CONFIG_PPC_EFIKA) += zImage.chrp 194image-$(CONFIG_PPC_EFIKA) += zImage.chrp
193image-$(CONFIG_PPC_PMAC) += zImage.pmac 195image-$(CONFIG_PPC_PMAC) += zImage.pmac
194image-$(CONFIG_PPC_HOLLY) += zImage.holly 196image-$(CONFIG_PPC_HOLLY) += zImage.holly
195image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800 197image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800
196image-$(CONFIG_PPC_ISERIES) += zImage.iseries 198image-$(CONFIG_PPC_ISERIES) += zImage.iseries
197image-$(CONFIG_DEFAULT_UIMAGE) += uImage 199image-$(CONFIG_DEFAULT_UIMAGE) += uImage
198 200
@@ -216,6 +218,7 @@ image-$(CONFIG_RAINIER) += cuImage.rainier
216image-$(CONFIG_TAISHAN) += cuImage.taishan 218image-$(CONFIG_TAISHAN) += cuImage.taishan
217image-$(CONFIG_KATMAI) += cuImage.katmai 219image-$(CONFIG_KATMAI) += cuImage.katmai
218image-$(CONFIG_WARP) += cuImage.warp 220image-$(CONFIG_WARP) += cuImage.warp
221image-$(CONFIG_YOSEMITE) += cuImage.yosemite
219 222
220# Board ports in arch/powerpc/platform/8xx/Kconfig 223# Board ports in arch/powerpc/platform/8xx/Kconfig
221image-$(CONFIG_PPC_MPC86XADS) += cuImage.mpc866ads 224image-$(CONFIG_PPC_MPC86XADS) += cuImage.mpc866ads
@@ -255,6 +258,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm8555
255image-$(CONFIG_TQM8560) += cuImage.tqm8560 258image-$(CONFIG_TQM8560) += cuImage.tqm8560
256image-$(CONFIG_SBC8548) += cuImage.sbc8548 259image-$(CONFIG_SBC8548) += cuImage.sbc8548
257image-$(CONFIG_SBC8560) += cuImage.sbc8560 260image-$(CONFIG_SBC8560) += cuImage.sbc8560
261image-$(CONFIG_KSI8560) += cuImage.ksi8560
258 262
259# Board ports in arch/powerpc/platform/embedded6xx/Kconfig 263# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
260image-$(CONFIG_STORCENTER) += cuImage.storcenter 264image-$(CONFIG_STORCENTER) += cuImage.storcenter
@@ -285,11 +289,11 @@ $(obj)/zImage.%: vmlinux $(wrapperbits)
285 $(call if_changed,wrap,$*) 289 $(call if_changed,wrap,$*)
286 290
287# dtbImage% - a dtbImage is a zImage with an embedded device tree blob 291# dtbImage% - a dtbImage is a zImage with an embedded device tree blob
288$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(dtstree)/%.dts 292$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb
289 $(call if_changed,wrap,$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz) 293 $(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
290 294
291$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(dtstree)/%.dts 295$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
292 $(call if_changed,wrap,$*,$(dtstree)/$*.dts) 296 $(call if_changed,wrap,$*,,$(obj)/$*.dtb)
293 297
294# This cannot be in the root of $(src) as the zImage rule always adds a $(obj) 298# This cannot be in the root of $(src) as the zImage rule always adds a $(obj)
295# prefix 299# prefix
@@ -302,14 +306,24 @@ $(obj)/zImage.iseries: vmlinux
302$(obj)/uImage: vmlinux $(wrapperbits) 306$(obj)/uImage: vmlinux $(wrapperbits)
303 $(call if_changed,wrap,uboot) 307 $(call if_changed,wrap,uboot)
304 308
305$(obj)/cuImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits) 309$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
306 $(call if_changed,wrap,cuboot-$*,$(dtstree)/$*.dts) 310 $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
307 311
308$(obj)/treeImage.initrd.%: vmlinux $(dtstree)/%.dts $(wrapperbits) 312$(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
309 $(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz) 313 $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
310 314
311$(obj)/treeImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits) 315$(obj)/simpleImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
312 $(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts) 316 $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb)
317
318$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
319 $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
320
321$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
322 $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)
323
324# Rule to build device tree blobs
325$(obj)/%.dtb: $(dtstree)/%.dts $(obj)/dtc
326 $(obj)/dtc -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(dtstree)/$*.dts
313 327
314# If there isn't a platform selected then just strip the vmlinux. 328# If there isn't a platform selected then just strip the vmlinux.
315ifeq (,$(image-y)) 329ifeq (,$(image-y))
@@ -326,7 +340,7 @@ install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
326 340
327# anything not in $(targets) 341# anything not in $(targets)
328clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \ 342clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
329 otheros.bld 343 otheros.bld *.dtb
330 344
331# clean up files cached by wrapper 345# clean up files cached by wrapper
332clean-kernel := vmlinux.strip vmlinux.bin 346clean-kernel := vmlinux.strip vmlinux.bin
diff --git a/arch/powerpc/boot/bamboo.c b/arch/powerpc/boot/bamboo.c
index 54b33f1500e2..b82cacbc60db 100644
--- a/arch/powerpc/boot/bamboo.c
+++ b/arch/powerpc/boot/bamboo.c
@@ -33,7 +33,8 @@ static void bamboo_fixups(void)
33 ibm440ep_fixup_clocks(sysclk, 11059200, 25000000); 33 ibm440ep_fixup_clocks(sysclk, 11059200, 25000000);
34 ibm4xx_sdram_fixup_memsize(); 34 ibm4xx_sdram_fixup_memsize();
35 ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00); 35 ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
36 dt_fixup_mac_addresses(bamboo_mac0, bamboo_mac1); 36 dt_fixup_mac_address_by_alias("ethernet0", bamboo_mac0);
37 dt_fixup_mac_address_by_alias("ethernet1", bamboo_mac1);
37} 38}
38 39
39void bamboo_init(void *mac0, void *mac1) 40void bamboo_init(void *mac0, void *mac1)
diff --git a/arch/powerpc/boot/cpm-serial.c b/arch/powerpc/boot/cpm-serial.c
index 28296facb2ae..19dc15abe43d 100644
--- a/arch/powerpc/boot/cpm-serial.c
+++ b/arch/powerpc/boot/cpm-serial.c
@@ -11,6 +11,7 @@
11#include "types.h" 11#include "types.h"
12#include "io.h" 12#include "io.h"
13#include "ops.h" 13#include "ops.h"
14#include "page.h"
14 15
15struct cpm_scc { 16struct cpm_scc {
16 u32 gsmrl; 17 u32 gsmrl;
@@ -42,6 +43,22 @@ struct cpm_param {
42 u16 tbase; 43 u16 tbase;
43 u8 rfcr; 44 u8 rfcr;
44 u8 tfcr; 45 u8 tfcr;
46 u16 mrblr;
47 u32 rstate;
48 u8 res1[4];
49 u16 rbptr;
50 u8 res2[6];
51 u32 tstate;
52 u8 res3[4];
53 u16 tbptr;
54 u8 res4[6];
55 u16 maxidl;
56 u16 idlc;
57 u16 brkln;
58 u16 brkec;
59 u16 brkcr;
60 u16 rmask;
61 u8 res5[4];
45}; 62};
46 63
47struct cpm_bd { 64struct cpm_bd {
@@ -54,10 +71,10 @@ static void *cpcr;
54static struct cpm_param *param; 71static struct cpm_param *param;
55static struct cpm_smc *smc; 72static struct cpm_smc *smc;
56static struct cpm_scc *scc; 73static struct cpm_scc *scc;
57struct cpm_bd *tbdf, *rbdf; 74static struct cpm_bd *tbdf, *rbdf;
58static u32 cpm_cmd; 75static u32 cpm_cmd;
59static u8 *muram_start; 76static void *cbd_addr;
60static u32 muram_offset; 77static u32 cbd_offset;
61 78
62static void (*do_cmd)(int op); 79static void (*do_cmd)(int op);
63static void (*enable_port)(void); 80static void (*enable_port)(void);
@@ -119,20 +136,25 @@ static int cpm_serial_open(void)
119 136
120 out_8(&param->rfcr, 0x10); 137 out_8(&param->rfcr, 0x10);
121 out_8(&param->tfcr, 0x10); 138 out_8(&param->tfcr, 0x10);
122 139 out_be16(&param->mrblr, 1);
123 rbdf = (struct cpm_bd *)muram_start; 140 out_be16(&param->maxidl, 0);
124 rbdf->addr = (u8 *)(rbdf + 2); 141 out_be16(&param->brkec, 0);
142 out_be16(&param->brkln, 0);
143 out_be16(&param->brkcr, 0);
144
145 rbdf = cbd_addr;
146 rbdf->addr = (u8 *)rbdf - 1;
125 rbdf->sc = 0xa000; 147 rbdf->sc = 0xa000;
126 rbdf->len = 1; 148 rbdf->len = 1;
127 149
128 tbdf = rbdf + 1; 150 tbdf = rbdf + 1;
129 tbdf->addr = (u8 *)(rbdf + 2) + 1; 151 tbdf->addr = (u8 *)rbdf - 2;
130 tbdf->sc = 0x2000; 152 tbdf->sc = 0x2000;
131 tbdf->len = 1; 153 tbdf->len = 1;
132 154
133 sync(); 155 sync();
134 out_be16(&param->rbase, muram_offset); 156 out_be16(&param->rbase, cbd_offset);
135 out_be16(&param->tbase, muram_offset + sizeof(struct cpm_bd)); 157 out_be16(&param->tbase, cbd_offset + sizeof(struct cpm_bd));
136 158
137 do_cmd(CPM_CMD_INIT_RX_TX); 159 do_cmd(CPM_CMD_INIT_RX_TX);
138 160
@@ -175,10 +197,12 @@ static unsigned char cpm_serial_getc(void)
175 197
176int cpm_console_init(void *devp, struct serial_console_data *scdp) 198int cpm_console_init(void *devp, struct serial_console_data *scdp)
177{ 199{
178 void *reg_virt[2]; 200 void *vreg[2];
179 int is_smc = 0, is_cpm2 = 0, n; 201 u32 reg[2];
180 unsigned long reg_phys; 202 int is_smc = 0, is_cpm2 = 0;
181 void *parent, *muram; 203 void *parent, *muram;
204 void *muram_addr;
205 unsigned long muram_offset, muram_size;
182 206
183 if (dt_is_compatible(devp, "fsl,cpm1-smc-uart")) { 207 if (dt_is_compatible(devp, "fsl,cpm1-smc-uart")) {
184 is_smc = 1; 208 is_smc = 1;
@@ -202,63 +226,64 @@ int cpm_console_init(void *devp, struct serial_console_data *scdp)
202 else 226 else
203 do_cmd = cpm1_cmd; 227 do_cmd = cpm1_cmd;
204 228
205 n = getprop(devp, "fsl,cpm-command", &cpm_cmd, 4); 229 if (getprop(devp, "fsl,cpm-command", &cpm_cmd, 4) < 4)
206 if (n < 4)
207 return -1; 230 return -1;
208 231
209 n = getprop(devp, "virtual-reg", reg_virt, sizeof(reg_virt)); 232 if (dt_get_virtual_reg(devp, vreg, 2) < 2)
210 if (n < (int)sizeof(reg_virt)) { 233 return -1;
211 for (n = 0; n < 2; n++) {
212 if (!dt_xlate_reg(devp, n, &reg_phys, NULL))
213 return -1;
214
215 reg_virt[n] = (void *)reg_phys;
216 }
217 }
218 234
219 if (is_smc) 235 if (is_smc)
220 smc = reg_virt[0]; 236 smc = vreg[0];
221 else 237 else
222 scc = reg_virt[0]; 238 scc = vreg[0];
223 239
224 param = reg_virt[1]; 240 param = vreg[1];
225 241
226 parent = get_parent(devp); 242 parent = get_parent(devp);
227 if (!parent) 243 if (!parent)
228 return -1; 244 return -1;
229 245
230 n = getprop(parent, "virtual-reg", reg_virt, sizeof(reg_virt)); 246 if (dt_get_virtual_reg(parent, &cpcr, 1) < 1)
231 if (n < (int)sizeof(reg_virt)) { 247 return -1;
232 if (!dt_xlate_reg(parent, 0, &reg_phys, NULL))
233 return -1;
234
235 reg_virt[0] = (void *)reg_phys;
236 }
237
238 cpcr = reg_virt[0];
239 248
240 muram = finddevice("/soc/cpm/muram/data"); 249 muram = finddevice("/soc/cpm/muram/data");
241 if (!muram) 250 if (!muram)
242 return -1; 251 return -1;
243 252
244 /* For bootwrapper-compatible device trees, we assume that the first 253 /* For bootwrapper-compatible device trees, we assume that the first
245 * entry has at least 18 bytes, and that #address-cells/#data-cells 254 * entry has at least 128 bytes, and that #address-cells/#data-cells
246 * is one for both parent and child. 255 * is one for both parent and child.
247 */ 256 */
248 257
249 n = getprop(muram, "virtual-reg", reg_virt, sizeof(reg_virt)); 258 if (dt_get_virtual_reg(muram, &muram_addr, 1) < 1)
250 if (n < (int)sizeof(reg_virt)) { 259 return -1;
251 if (!dt_xlate_reg(muram, 0, &reg_phys, NULL))
252 return -1;
253 260
254 reg_virt[0] = (void *)reg_phys; 261 if (getprop(muram, "reg", reg, 8) < 8)
255 } 262 return -1;
256 263
257 muram_start = reg_virt[0]; 264 muram_offset = reg[0];
265 muram_size = reg[1];
258 266
259 n = getprop(muram, "reg", &muram_offset, 4); 267 /* Store the buffer descriptors at the end of the first muram chunk.
260 if (n < 4) 268 * For SMC ports on CPM2-based platforms, relocate the parameter RAM
261 return -1; 269 * just before the buffer descriptors.
270 */
271
272 cbd_offset = muram_offset + muram_size - 2 * sizeof(struct cpm_bd);
273
274 if (is_cpm2 && is_smc) {
275 u16 *smc_base = (u16 *)param;
276 u16 pram_offset;
277
278 pram_offset = cbd_offset - 64;
279 pram_offset = _ALIGN_DOWN(pram_offset, 64);
280
281 disable_port();
282 out_be16(smc_base, pram_offset);
283 param = muram_addr - muram_offset + pram_offset;
284 }
285
286 cbd_addr = muram_addr - muram_offset + cbd_offset;
262 287
263 scdp->open = cpm_serial_open; 288 scdp->open = cpm_serial_open;
264 scdp->putc = cpm_serial_putc; 289 scdp->putc = cpm_serial_putc;
diff --git a/arch/powerpc/boot/cuboot-pq2.c b/arch/powerpc/boot/cuboot-pq2.c
index f56ac6cae9f3..9c7d13428293 100644
--- a/arch/powerpc/boot/cuboot-pq2.c
+++ b/arch/powerpc/boot/cuboot-pq2.c
@@ -128,7 +128,7 @@ static void fixup_pci(void)
128 u8 *soc_regs; 128 u8 *soc_regs;
129 int i, len; 129 int i, len;
130 void *node, *parent_node; 130 void *node, *parent_node;
131 u32 naddr, nsize, mem_log2; 131 u32 naddr, nsize, mem_pow2, mem_mask;
132 132
133 node = finddevice("/pci"); 133 node = finddevice("/pci");
134 if (!node || !dt_is_compatible(node, "fsl,pq2-pci")) 134 if (!node || !dt_is_compatible(node, "fsl,pq2-pci"))
@@ -141,7 +141,7 @@ static void fixup_pci(void)
141 141
142 soc_regs = (u8 *)fsl_get_immr(); 142 soc_regs = (u8 *)fsl_get_immr();
143 if (!soc_regs) 143 if (!soc_regs)
144 goto err; 144 goto unhandled;
145 145
146 dt_get_reg_format(node, &naddr, &nsize); 146 dt_get_reg_format(node, &naddr, &nsize);
147 if (naddr != 3 || nsize != 2) 147 if (naddr != 3 || nsize != 2)
@@ -153,7 +153,7 @@ static void fixup_pci(void)
153 153
154 dt_get_reg_format(parent_node, &naddr, &nsize); 154 dt_get_reg_format(parent_node, &naddr, &nsize);
155 if (naddr != 1 || nsize != 1) 155 if (naddr != 1 || nsize != 1)
156 goto err; 156 goto unhandled;
157 157
158 len = getprop(node, "ranges", pci_ranges_buf, 158 len = getprop(node, "ranges", pci_ranges_buf,
159 sizeof(pci_ranges_buf)); 159 sizeof(pci_ranges_buf));
@@ -170,14 +170,20 @@ static void fixup_pci(void)
170 } 170 }
171 171
172 if (!mem || !mmio || !io) 172 if (!mem || !mmio || !io)
173 goto err; 173 goto unhandled;
174 if (mem->size[1] != mmio->size[1])
175 goto unhandled;
176 if (mem->size[1] & (mem->size[1] - 1))
177 goto unhandled;
178 if (io->size[1] & (io->size[1] - 1))
179 goto unhandled;
174 180
175 if (mem->phys_addr + mem->size[1] == mmio->phys_addr) 181 if (mem->phys_addr + mem->size[1] == mmio->phys_addr)
176 mem_base = mem; 182 mem_base = mem;
177 else if (mmio->phys_addr + mmio->size[1] == mem->phys_addr) 183 else if (mmio->phys_addr + mmio->size[1] == mem->phys_addr)
178 mem_base = mmio; 184 mem_base = mmio;
179 else 185 else
180 goto err; 186 goto unhandled;
181 187
182 out_be32(&pci_regs[1][0], mem_base->phys_addr | 1); 188 out_be32(&pci_regs[1][0], mem_base->phys_addr | 1);
183 out_be32(&pci_regs[2][0], ~(mem->size[1] + mmio->size[1] - 1)); 189 out_be32(&pci_regs[2][0], ~(mem->size[1] + mmio->size[1] - 1));
@@ -201,8 +207,9 @@ static void fixup_pci(void)
201 out_le32(&pci_regs[0][58], 0); 207 out_le32(&pci_regs[0][58], 0);
202 out_le32(&pci_regs[0][60], 0); 208 out_le32(&pci_regs[0][60], 0);
203 209
204 mem_log2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1); 210 mem_pow2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1);
205 out_le32(&pci_regs[0][62], 0xa0000000 | ~((1 << (mem_log2 - 12)) - 1)); 211 mem_mask = ~(mem_pow2 - 1) >> 12;
212 out_le32(&pci_regs[0][62], 0xa0000000 | mem_mask);
206 213
207 /* If PCI is disabled, drive RST high to enable. */ 214 /* If PCI is disabled, drive RST high to enable. */
208 if (!(in_le32(&pci_regs[0][32]) & 1)) { 215 if (!(in_le32(&pci_regs[0][32]) & 1)) {
@@ -228,7 +235,11 @@ static void fixup_pci(void)
228 return; 235 return;
229 236
230err: 237err:
231 printf("Bad PCI node\r\n"); 238 printf("Bad PCI node -- using existing firmware setup.\r\n");
239 return;
240
241unhandled:
242 printf("Unsupported PCI node -- using existing firmware setup.\r\n");
232} 243}
233 244
234static void pq2_platform_fixups(void) 245static void pq2_platform_fixups(void)
diff --git a/arch/powerpc/boot/cuboot-rainier.c b/arch/powerpc/boot/cuboot-rainier.c
index cf452b66dce8..0a3fddee54df 100644
--- a/arch/powerpc/boot/cuboot-rainier.c
+++ b/arch/powerpc/boot/cuboot-rainier.c
@@ -42,7 +42,8 @@ static void rainier_fixups(void)
42 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000); 42 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
43 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 43 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
44 ibm4xx_denali_fixup_memsize(); 44 ibm4xx_denali_fixup_memsize();
45 dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr); 45 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
46 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
46} 47}
47 48
48void platform_init(unsigned long r3, unsigned long r4, unsigned long r5, 49void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
diff --git a/arch/powerpc/boot/cuboot-sequoia.c b/arch/powerpc/boot/cuboot-sequoia.c
index f555575a44de..caf8f2e842ea 100644
--- a/arch/powerpc/boot/cuboot-sequoia.c
+++ b/arch/powerpc/boot/cuboot-sequoia.c
@@ -42,7 +42,8 @@ static void sequoia_fixups(void)
42 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000); 42 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
43 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 43 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
44 ibm4xx_denali_fixup_memsize(); 44 ibm4xx_denali_fixup_memsize();
45 dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr); 45 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
46 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
46} 47}
47 48
48void platform_init(unsigned long r3, unsigned long r4, unsigned long r5, 49void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
diff --git a/arch/powerpc/boot/cuboot-taishan.c b/arch/powerpc/boot/cuboot-taishan.c
index b55b80467eed..9bc906a754dd 100644
--- a/arch/powerpc/boot/cuboot-taishan.c
+++ b/arch/powerpc/boot/cuboot-taishan.c
@@ -40,7 +40,8 @@ static void taishan_fixups(void)
40 40
41 ibm4xx_sdram_fixup_memsize(); 41 ibm4xx_sdram_fixup_memsize();
42 42
43 dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr); 43 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
44 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
44 45
45 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 46 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
46} 47}
diff --git a/arch/powerpc/boot/cuboot-warp.c b/arch/powerpc/boot/cuboot-warp.c
index 3db93e85e9ea..eb108a877492 100644
--- a/arch/powerpc/boot/cuboot-warp.c
+++ b/arch/powerpc/boot/cuboot-warp.c
@@ -24,7 +24,7 @@ static void warp_fixups(void)
24 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000); 24 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
25 ibm4xx_sdram_fixup_memsize(); 25 ibm4xx_sdram_fixup_memsize();
26 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 26 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
27 dt_fixup_mac_addresses(&bd.bi_enetaddr); 27 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
28} 28}
29 29
30 30
diff --git a/arch/powerpc/boot/cuboot-yosemite.c b/arch/powerpc/boot/cuboot-yosemite.c
new file mode 100644
index 000000000000..cc6e338c5d0d
--- /dev/null
+++ b/arch/powerpc/boot/cuboot-yosemite.c
@@ -0,0 +1,44 @@
1/*
2 * Old U-boot compatibility for Yosemite
3 *
4 * Author: Josh Boyer <jwboyer@linux.vnet.ibm.com>
5 *
6 * Copyright 2008 IBM Corporation
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published
10 * by the Free Software Foundation.
11 */
12
13#include "ops.h"
14#include "stdio.h"
15#include "4xx.h"
16#include "44x.h"
17#include "cuboot.h"
18
19#define TARGET_4xx
20#define TARGET_44x
21#include "ppcboot.h"
22
23static bd_t bd;
24
25static void yosemite_fixups(void)
26{
27 unsigned long sysclk = 66666666;
28
29 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
30 ibm4xx_sdram_fixup_memsize();
31 ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
32 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
33 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
34}
35
36void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
37 unsigned long r6, unsigned long r7)
38{
39 CUBOOT_INIT();
40 platform_ops.fixups = yosemite_fixups;
41 platform_ops.exit = ibm44x_dbcr_reset;
42 fdt_init(_dtb_start);
43 serial_console_init();
44}
diff --git a/arch/powerpc/boot/devtree.c b/arch/powerpc/boot/devtree.c
index 60f561e307a9..5d12336dc360 100644
--- a/arch/powerpc/boot/devtree.c
+++ b/arch/powerpc/boot/devtree.c
@@ -350,3 +350,23 @@ int dt_is_compatible(void *node, const char *compat)
350 350
351 return 0; 351 return 0;
352} 352}
353
354int dt_get_virtual_reg(void *node, void **addr, int nres)
355{
356 unsigned long xaddr;
357 int n;
358
359 n = getprop(node, "virtual-reg", addr, nres * 4);
360 if (n > 0)
361 return n / 4;
362
363 for (n = 0; n < nres; n++) {
364 if (!dt_xlate_reg(node, n, &xaddr, NULL))
365 break;
366
367 addr[n] = (void *)xaddr;
368 }
369
370 return n;
371}
372
diff --git a/arch/powerpc/boot/dts/bamboo.dts b/arch/powerpc/boot/dts/bamboo.dts
index 7dc37c9a7446..ba2521bdaab1 100644
--- a/arch/powerpc/boot/dts/bamboo.dts
+++ b/arch/powerpc/boot/dts/bamboo.dts
@@ -204,7 +204,6 @@
204 }; 204 };
205 205
206 EMAC0: ethernet@ef600e00 { 206 EMAC0: ethernet@ef600e00 {
207 linux,network-index = <0>;
208 device_type = "network"; 207 device_type = "network";
209 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 208 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
210 interrupt-parent = <&UIC1>; 209 interrupt-parent = <&UIC1>;
@@ -225,7 +224,6 @@
225 }; 224 };
226 225
227 EMAC1: ethernet@ef600f00 { 226 EMAC1: ethernet@ef600f00 {
228 linux,network-index = <1>;
229 device_type = "network"; 227 device_type = "network";
230 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 228 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
231 interrupt-parent = <&UIC1>; 229 interrupt-parent = <&UIC1>;
diff --git a/arch/powerpc/boot/dts/canyonlands.dts b/arch/powerpc/boot/dts/canyonlands.dts
new file mode 100644
index 000000000000..6f3d38a1554f
--- /dev/null
+++ b/arch/powerpc/boot/dts/canyonlands.dts
@@ -0,0 +1,402 @@
1/*
2 * Device Tree Source for AMCC Canyonlands (460EX)
3 *
4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without
8 * any warranty of any kind, whether express or implied.
9 */
10
11/ {
12 #address-cells = <2>;
13 #size-cells = <1>;
14 model = "amcc,canyonlands";
15 compatible = "amcc,canyonlands";
16 dcr-parent = <&/cpus/cpu@0>;
17
18 aliases {
19 ethernet0 = &EMAC0;
20 ethernet1 = &EMAC1;
21 serial0 = &UART0;
22 serial1 = &UART1;
23 };
24
25 cpus {
26 #address-cells = <1>;
27 #size-cells = <0>;
28
29 cpu@0 {
30 device_type = "cpu";
31 model = "PowerPC,460EX";
32 reg = <0>;
33 clock-frequency = <0>; /* Filled in by U-Boot */
34 timebase-frequency = <0>; /* Filled in by U-Boot */
35 i-cache-line-size = <20>;
36 d-cache-line-size = <20>;
37 i-cache-size = <8000>;
38 d-cache-size = <8000>;
39 dcr-controller;
40 dcr-access-method = "native";
41 };
42 };
43
44 memory {
45 device_type = "memory";
46 reg = <0 0 0>; /* Filled in by U-Boot */
47 };
48
49 UIC0: interrupt-controller0 {
50 compatible = "ibm,uic-460ex","ibm,uic";
51 interrupt-controller;
52 cell-index = <0>;
53 dcr-reg = <0c0 009>;
54 #address-cells = <0>;
55 #size-cells = <0>;
56 #interrupt-cells = <2>;
57 };
58
59 UIC1: interrupt-controller1 {
60 compatible = "ibm,uic-460ex","ibm,uic";
61 interrupt-controller;
62 cell-index = <1>;
63 dcr-reg = <0d0 009>;
64 #address-cells = <0>;
65 #size-cells = <0>;
66 #interrupt-cells = <2>;
67 interrupts = <1e 4 1f 4>; /* cascade */
68 interrupt-parent = <&UIC0>;
69 };
70
71 UIC2: interrupt-controller2 {
72 compatible = "ibm,uic-460ex","ibm,uic";
73 interrupt-controller;
74 cell-index = <2>;
75 dcr-reg = <0e0 009>;
76 #address-cells = <0>;
77 #size-cells = <0>;
78 #interrupt-cells = <2>;
79 interrupts = <a 4 b 4>; /* cascade */
80 interrupt-parent = <&UIC0>;
81 };
82
83 UIC3: interrupt-controller3 {
84 compatible = "ibm,uic-460ex","ibm,uic";
85 interrupt-controller;
86 cell-index = <3>;
87 dcr-reg = <0f0 009>;
88 #address-cells = <0>;
89 #size-cells = <0>;
90 #interrupt-cells = <2>;
91 interrupts = <10 4 11 4>; /* cascade */
92 interrupt-parent = <&UIC0>;
93 };
94
95 SDR0: sdr {
96 compatible = "ibm,sdr-460ex";
97 dcr-reg = <00e 002>;
98 };
99
100 CPR0: cpr {
101 compatible = "ibm,cpr-460ex";
102 dcr-reg = <00c 002>;
103 };
104
105 plb {
106 compatible = "ibm,plb-460ex", "ibm,plb4";
107 #address-cells = <2>;
108 #size-cells = <1>;
109 ranges;
110 clock-frequency = <0>; /* Filled in by U-Boot */
111
112 SDRAM0: sdram {
113 compatible = "ibm,sdram-460ex", "ibm,sdram-405gp";
114 dcr-reg = <010 2>;
115 };
116
117 MAL0: mcmal {
118 compatible = "ibm,mcmal-460ex", "ibm,mcmal2";
119 dcr-reg = <180 62>;
120 num-tx-chans = <2>;
121 num-rx-chans = <10>;
122 #address-cells = <0>;
123 #size-cells = <0>;
124 interrupt-parent = <&UIC2>;
125 interrupts = < /*TXEOB*/ 6 4
126 /*RXEOB*/ 7 4
127 /*SERR*/ 3 4
128 /*TXDE*/ 4 4
129 /*RXDE*/ 5 4>;
130 };
131
132 POB0: opb {
133 compatible = "ibm,opb-460ex", "ibm,opb";
134 #address-cells = <1>;
135 #size-cells = <1>;
136 ranges = <b0000000 4 b0000000 50000000>;
137 clock-frequency = <0>; /* Filled in by U-Boot */
138
139 EBC0: ebc {
140 compatible = "ibm,ebc-460ex", "ibm,ebc";
141 dcr-reg = <012 2>;
142 #address-cells = <2>;
143 #size-cells = <1>;
144 clock-frequency = <0>; /* Filled in by U-Boot */
145 interrupts = <6 4>;
146 interrupt-parent = <&UIC1>;
147 };
148
149 UART0: serial@ef600300 {
150 device_type = "serial";
151 compatible = "ns16550";
152 reg = <ef600300 8>;
153 virtual-reg = <ef600300>;
154 clock-frequency = <0>; /* Filled in by U-Boot */
155 current-speed = <0>; /* Filled in by U-Boot */
156 interrupt-parent = <&UIC1>;
157 interrupts = <1 4>;
158 };
159
160 UART1: serial@ef600400 {
161 device_type = "serial";
162 compatible = "ns16550";
163 reg = <ef600400 8>;
164 virtual-reg = <ef600400>;
165 clock-frequency = <0>; /* Filled in by U-Boot */
166 current-speed = <0>; /* Filled in by U-Boot */
167 interrupt-parent = <&UIC0>;
168 interrupts = <1 4>;
169 };
170
171 UART2: serial@ef600500 {
172 device_type = "serial";
173 compatible = "ns16550";
174 reg = <ef600500 8>;
175 virtual-reg = <ef600500>;
176 clock-frequency = <0>; /* Filled in by U-Boot */
177 current-speed = <0>; /* Filled in by U-Boot */
178 interrupt-parent = <&UIC1>;
179 interrupts = <1d 4>;
180 };
181
182 UART3: serial@ef600600 {
183 device_type = "serial";
184 compatible = "ns16550";
185 reg = <ef600600 8>;
186 virtual-reg = <ef600600>;
187 clock-frequency = <0>; /* Filled in by U-Boot */
188 current-speed = <0>; /* Filled in by U-Boot */
189 interrupt-parent = <&UIC1>;
190 interrupts = <1e 4>;
191 };
192
193 IIC0: i2c@ef600700 {
194 compatible = "ibm,iic-460ex", "ibm,iic";
195 reg = <ef600700 14>;
196 interrupt-parent = <&UIC0>;
197 interrupts = <2 4>;
198 };
199
200 IIC1: i2c@ef600800 {
201 compatible = "ibm,iic-460ex", "ibm,iic";
202 reg = <ef600800 14>;
203 interrupt-parent = <&UIC0>;
204 interrupts = <3 4>;
205 };
206
207 ZMII0: emac-zmii@ef600d00 {
208 compatible = "ibm,zmii-460ex", "ibm,zmii";
209 reg = <ef600d00 c>;
210 };
211
212 RGMII0: emac-rgmii@ef601500 {
213 compatible = "ibm,rgmii-460ex", "ibm,rgmii";
214 reg = <ef601500 8>;
215 has-mdio;
216 };
217
218 TAH0: emac-tah@ef601350 {
219 compatible = "ibm,tah-460ex", "ibm,tah";
220 reg = <ef601350 30>;
221 };
222
223 TAH1: emac-tah@ef601450 {
224 compatible = "ibm,tah-460ex", "ibm,tah";
225 reg = <ef601450 30>;
226 };
227
228 EMAC0: ethernet@ef600e00 {
229 device_type = "network";
230 compatible = "ibm,emac-460ex", "ibm,emac4";
231 interrupt-parent = <&EMAC0>;
232 interrupts = <0 1>;
233 #interrupt-cells = <1>;
234 #address-cells = <0>;
235 #size-cells = <0>;
236 interrupt-map = </*Status*/ 0 &UIC2 10 4
237 /*Wake*/ 1 &UIC2 14 4>;
238 reg = <ef600e00 70>;
239 local-mac-address = [000000000000]; /* Filled in by U-Boot */
240 mal-device = <&MAL0>;
241 mal-tx-channel = <0>;
242 mal-rx-channel = <0>;
243 cell-index = <0>;
244 max-frame-size = <2328>;
245 rx-fifo-size = <1000>;
246 tx-fifo-size = <800>;
247 phy-mode = "rgmii";
248 phy-map = <00000000>;
249 rgmii-device = <&RGMII0>;
250 rgmii-channel = <0>;
251 tah-device = <&TAH0>;
252 tah-channel = <0>;
253 has-inverted-stacr-oc;
254 has-new-stacr-staopc;
255 };
256
257 EMAC1: ethernet@ef600f00 {
258 device_type = "network";
259 compatible = "ibm,emac-460ex", "ibm,emac4";
260 interrupt-parent = <&EMAC1>;
261 interrupts = <0 1>;
262 #interrupt-cells = <1>;
263 #address-cells = <0>;
264 #size-cells = <0>;
265 interrupt-map = </*Status*/ 0 &UIC2 11 4
266 /*Wake*/ 1 &UIC2 15 4>;
267 reg = <ef600f00 70>;
268 local-mac-address = [000000000000]; /* Filled in by U-Boot */
269 mal-device = <&MAL0>;
270 mal-tx-channel = <1>;
271 mal-rx-channel = <8>;
272 cell-index = <1>;
273 max-frame-size = <2328>;
274 rx-fifo-size = <1000>;
275 tx-fifo-size = <800>;
276 phy-mode = "rgmii";
277 phy-map = <00000000>;
278 rgmii-device = <&RGMII0>;
279 rgmii-channel = <1>;
280 tah-device = <&TAH1>;
281 tah-channel = <1>;
282 has-inverted-stacr-oc;
283 has-new-stacr-staopc;
284 mdio-device = <&EMAC0>;
285 };
286 };
287
288 PCIX0: pci@c0ec00000 {
289 device_type = "pci";
290 #interrupt-cells = <1>;
291 #size-cells = <2>;
292 #address-cells = <3>;
293 compatible = "ibm,plb-pcix-460ex", "ibm,plb-pcix";
294 primary;
295 large-inbound-windows;
296 enable-msi-hole;
297 reg = <c 0ec00000 8 /* Config space access */
298 0 0 0 /* no IACK cycles */
299 c 0ed00000 4 /* Special cycles */
300 c 0ec80000 100 /* Internal registers */
301 c 0ec80100 fc>; /* Internal messaging registers */
302
303 /* Outbound ranges, one memory and one IO,
304 * later cannot be changed
305 */
306 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000
307 01000000 0 00000000 0000000c 08000000 0 00010000>;
308
309 /* Inbound 2GB range starting at 0 */
310 dma-ranges = <42000000 0 0 0 0 0 80000000>;
311
312 /* This drives busses 0 to 0x3f */
313 bus-range = <0 3f>;
314
315 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
316 interrupt-map-mask = <0000 0 0 0>;
317 interrupt-map = < 0000 0 0 0 &UIC1 0 8 >;
318 };
319
320 PCIE0: pciex@d00000000 {
321 device_type = "pci";
322 #interrupt-cells = <1>;
323 #size-cells = <2>;
324 #address-cells = <3>;
325 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
326 primary;
327 port = <0>; /* port number */
328 reg = <d 00000000 20000000 /* Config space access */
329 c 08010000 00001000>; /* Registers */
330 dcr-reg = <100 020>;
331 sdr-base = <300>;
332
333 /* Outbound ranges, one memory and one IO,
334 * later cannot be changed
335 */
336 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000
337 01000000 0 00000000 0000000f 80000000 0 00010000>;
338
339 /* Inbound 2GB range starting at 0 */
340 dma-ranges = <42000000 0 0 0 0 0 80000000>;
341
342 /* This drives busses 40 to 0x7f */
343 bus-range = <40 7f>;
344
345 /* Legacy interrupts (note the weird polarity, the bridge seems
346 * to invert PCIe legacy interrupts).
347 * We are de-swizzling here because the numbers are actually for
348 * port of the root complex virtual P2P bridge. But I want
349 * to avoid putting a node for it in the tree, so the numbers
350 * below are basically de-swizzled numbers.
351 * The real slot is on idsel 0, so the swizzling is 1:1
352 */
353 interrupt-map-mask = <0000 0 0 7>;
354 interrupt-map = <
355 0000 0 0 1 &UIC3 c 4 /* swizzled int A */
356 0000 0 0 2 &UIC3 d 4 /* swizzled int B */
357 0000 0 0 3 &UIC3 e 4 /* swizzled int C */
358 0000 0 0 4 &UIC3 f 4 /* swizzled int D */>;
359 };
360
361 PCIE1: pciex@d20000000 {
362 device_type = "pci";
363 #interrupt-cells = <1>;
364 #size-cells = <2>;
365 #address-cells = <3>;
366 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
367 primary;
368 port = <1>; /* port number */
369 reg = <d 20000000 20000000 /* Config space access */
370 c 08011000 00001000>; /* Registers */
371 dcr-reg = <120 020>;
372 sdr-base = <340>;
373
374 /* Outbound ranges, one memory and one IO,
375 * later cannot be changed
376 */
377 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000
378 01000000 0 00000000 0000000f 80010000 0 00010000>;
379
380 /* Inbound 2GB range starting at 0 */
381 dma-ranges = <42000000 0 0 0 0 0 80000000>;
382
383 /* This drives busses 80 to 0xbf */
384 bus-range = <80 bf>;
385
386 /* Legacy interrupts (note the weird polarity, the bridge seems
387 * to invert PCIe legacy interrupts).
388 * We are de-swizzling here because the numbers are actually for
389 * port of the root complex virtual P2P bridge. But I want
390 * to avoid putting a node for it in the tree, so the numbers
391 * below are basically de-swizzled numbers.
392 * The real slot is on idsel 0, so the swizzling is 1:1
393 */
394 interrupt-map-mask = <0000 0 0 7>;
395 interrupt-map = <
396 0000 0 0 1 &UIC3 10 4 /* swizzled int A */
397 0000 0 0 2 &UIC3 11 4 /* swizzled int B */
398 0000 0 0 3 &UIC3 12 4 /* swizzled int C */
399 0000 0 0 4 &UIC3 13 4 /* swizzled int D */>;
400 };
401 };
402};
diff --git a/arch/powerpc/boot/dts/ebony.dts b/arch/powerpc/boot/dts/ebony.dts
index 0b000cb7ed8b..5079dc890e0e 100644
--- a/arch/powerpc/boot/dts/ebony.dts
+++ b/arch/powerpc/boot/dts/ebony.dts
@@ -241,7 +241,6 @@
241 }; 241 };
242 242
243 EMAC0: ethernet@40000800 { 243 EMAC0: ethernet@40000800 {
244 linux,network-index = <0>;
245 device_type = "network"; 244 device_type = "network";
246 compatible = "ibm,emac-440gp", "ibm,emac"; 245 compatible = "ibm,emac-440gp", "ibm,emac";
247 interrupt-parent = <&UIC1>; 246 interrupt-parent = <&UIC1>;
@@ -261,7 +260,6 @@
261 zmii-channel = <0>; 260 zmii-channel = <0>;
262 }; 261 };
263 EMAC1: ethernet@40000900 { 262 EMAC1: ethernet@40000900 {
264 linux,network-index = <1>;
265 device_type = "network"; 263 device_type = "network";
266 compatible = "ibm,emac-440gp", "ibm,emac"; 264 compatible = "ibm,emac-440gp", "ibm,emac";
267 interrupt-parent = <&UIC1>; 265 interrupt-parent = <&UIC1>;
diff --git a/arch/powerpc/boot/dts/ep8248e.dts b/arch/powerpc/boot/dts/ep8248e.dts
index 5d2fb76a72c1..756758fb5b7b 100644
--- a/arch/powerpc/boot/dts/ep8248e.dts
+++ b/arch/powerpc/boot/dts/ep8248e.dts
@@ -121,8 +121,7 @@
121 121
122 data@0 { 122 data@0 {
123 compatible = "fsl,cpm-muram-data"; 123 compatible = "fsl,cpm-muram-data";
124 reg = <0 0x1100 0x1140 124 reg = <0 0x2000 0x9800 0x800>;
125 0xec0 0x9800 0x800>;
126 }; 125 };
127 }; 126 };
128 127
@@ -138,7 +137,7 @@
138 device_type = "serial"; 137 device_type = "serial";
139 compatible = "fsl,mpc8248-smc-uart", 138 compatible = "fsl,mpc8248-smc-uart",
140 "fsl,cpm2-smc-uart"; 139 "fsl,cpm2-smc-uart";
141 reg = <0x11a80 0x20 0x1100 0x40>; 140 reg = <0x11a80 0x20 0x87fc 2>;
142 interrupts = <4 8>; 141 interrupts = <4 8>;
143 interrupt-parent = <&PIC>; 142 interrupt-parent = <&PIC>;
144 fsl,cpm-brg = <7>; 143 fsl,cpm-brg = <7>;
diff --git a/arch/powerpc/boot/dts/ep88xc.dts b/arch/powerpc/boot/dts/ep88xc.dts
index 02705f299790..ae57d6240120 100644
--- a/arch/powerpc/boot/dts/ep88xc.dts
+++ b/arch/powerpc/boot/dts/ep88xc.dts
@@ -2,7 +2,7 @@
2 * EP88xC Device Tree Source 2 * EP88xC Device Tree Source
3 * 3 *
4 * Copyright 2006 MontaVista Software, Inc. 4 * Copyright 2006 MontaVista Software, Inc.
5 * Copyright 2007 Freescale Semiconductor, Inc. 5 * Copyright 2007,2008 Freescale Semiconductor, Inc.
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the 8 * under the terms of the GNU General Public License as published by the
@@ -10,6 +10,7 @@
10 * option) any later version. 10 * option) any later version.
11 */ 11 */
12 12
13/dts-v1/;
13 14
14/ { 15/ {
15 model = "EP88xC"; 16 model = "EP88xC";
@@ -23,44 +24,44 @@
23 24
24 PowerPC,885@0 { 25 PowerPC,885@0 {
25 device_type = "cpu"; 26 device_type = "cpu";
26 reg = <0>; 27 reg = <0x0>;
27 d-cache-line-size = <d#16>; 28 d-cache-line-size = <16>;
28 i-cache-line-size = <d#16>; 29 i-cache-line-size = <16>;
29 d-cache-size = <d#8192>; 30 d-cache-size = <8192>;
30 i-cache-size = <d#8192>; 31 i-cache-size = <8192>;
31 timebase-frequency = <0>; 32 timebase-frequency = <0>;
32 bus-frequency = <0>; 33 bus-frequency = <0>;
33 clock-frequency = <0>; 34 clock-frequency = <0>;
34 interrupts = <f 2>; // decrementer interrupt 35 interrupts = <15 2>; // decrementer interrupt
35 interrupt-parent = <&PIC>; 36 interrupt-parent = <&PIC>;
36 }; 37 };
37 }; 38 };
38 39
39 memory { 40 memory {
40 device_type = "memory"; 41 device_type = "memory";
41 reg = <0 0>; 42 reg = <0x0 0x0>;
42 }; 43 };
43 44
44 localbus@fa200100 { 45 localbus@fa200100 {
45 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus"; 46 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus";
46 #address-cells = <2>; 47 #address-cells = <2>;
47 #size-cells = <1>; 48 #size-cells = <1>;
48 reg = <fa200100 40>; 49 reg = <0xfa200100 0x40>;
49 50
50 ranges = < 51 ranges = <
51 0 0 fc000000 04000000 52 0x0 0x0 0xfc000000 0x4000000
52 3 0 fa000000 01000000 53 0x3 0x0 0xfa000000 0x1000000
53 >; 54 >;
54 55
55 flash@0,2000000 { 56 flash@0,2000000 {
56 compatible = "cfi-flash"; 57 compatible = "cfi-flash";
57 reg = <0 2000000 2000000>; 58 reg = <0x0 0x2000000 0x2000000>;
58 bank-width = <4>; 59 bank-width = <4>;
59 device-width = <2>; 60 device-width = <2>;
60 }; 61 };
61 62
62 board-control@3,400000 { 63 board-control@3,400000 {
63 reg = <3 400000 10>; 64 reg = <0x3 0x400000 0x10>;
64 compatible = "fsl,ep88xc-bcsr"; 65 compatible = "fsl,ep88xc-bcsr";
65 }; 66 };
66 }; 67 };
@@ -70,25 +71,25 @@
70 #address-cells = <1>; 71 #address-cells = <1>;
71 #size-cells = <1>; 72 #size-cells = <1>;
72 device_type = "soc"; 73 device_type = "soc";
73 ranges = <0 fa200000 00004000>; 74 ranges = <0x0 0xfa200000 0x4000>;
74 bus-frequency = <0>; 75 bus-frequency = <0>;
75 76
76 // Temporary -- will go away once kernel uses ranges for get_immrbase(). 77 // Temporary -- will go away once kernel uses ranges for get_immrbase().
77 reg = <fa200000 4000>; 78 reg = <0xfa200000 0x4000>;
78 79
79 mdio@e00 { 80 mdio@e00 {
80 compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio"; 81 compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
81 reg = <e00 188>; 82 reg = <0xe00 0x188>;
82 #address-cells = <1>; 83 #address-cells = <1>;
83 #size-cells = <0>; 84 #size-cells = <0>;
84 85
85 PHY0: ethernet-phy@0 { 86 PHY0: ethernet-phy@0 {
86 reg = <0>; 87 reg = <0x0>;
87 device_type = "ethernet-phy"; 88 device_type = "ethernet-phy";
88 }; 89 };
89 90
90 PHY1: ethernet-phy@1 { 91 PHY1: ethernet-phy@1 {
91 reg = <1>; 92 reg = <0x1>;
92 device_type = "ethernet-phy"; 93 device_type = "ethernet-phy";
93 }; 94 };
94 }; 95 };
@@ -97,7 +98,7 @@
97 device_type = "network"; 98 device_type = "network";
98 compatible = "fsl,mpc885-fec-enet", 99 compatible = "fsl,mpc885-fec-enet",
99 "fsl,pq1-fec-enet"; 100 "fsl,pq1-fec-enet";
100 reg = <e00 188>; 101 reg = <0xe00 0x188>;
101 local-mac-address = [ 00 00 00 00 00 00 ]; 102 local-mac-address = [ 00 00 00 00 00 00 ];
102 interrupts = <3 1>; 103 interrupts = <3 1>;
103 interrupt-parent = <&PIC>; 104 interrupt-parent = <&PIC>;
@@ -109,7 +110,7 @@
109 device_type = "network"; 110 device_type = "network";
110 compatible = "fsl,mpc885-fec-enet", 111 compatible = "fsl,mpc885-fec-enet",
111 "fsl,pq1-fec-enet"; 112 "fsl,pq1-fec-enet";
112 reg = <1e00 188>; 113 reg = <0x1e00 0x188>;
113 local-mac-address = [ 00 00 00 00 00 00 ]; 114 local-mac-address = [ 00 00 00 00 00 00 ];
114 interrupts = <7 1>; 115 interrupts = <7 1>;
115 interrupt-parent = <&PIC>; 116 interrupt-parent = <&PIC>;
@@ -120,7 +121,7 @@
120 PIC: interrupt-controller@0 { 121 PIC: interrupt-controller@0 {
121 interrupt-controller; 122 interrupt-controller;
122 #interrupt-cells = <2>; 123 #interrupt-cells = <2>;
123 reg = <0 24>; 124 reg = <0x0 0x24>;
124 compatible = "fsl,mpc885-pic", "fsl,pq1-pic"; 125 compatible = "fsl,mpc885-pic", "fsl,pq1-pic";
125 }; 126 };
126 127
@@ -130,29 +131,29 @@
130 #size-cells = <2>; 131 #size-cells = <2>;
131 compatible = "fsl,pq-pcmcia"; 132 compatible = "fsl,pq-pcmcia";
132 device_type = "pcmcia"; 133 device_type = "pcmcia";
133 reg = <80 80>; 134 reg = <0x80 0x80>;
134 interrupt-parent = <&PIC>; 135 interrupt-parent = <&PIC>;
135 interrupts = <d 1>; 136 interrupts = <13 1>;
136 }; 137 };
137 138
138 cpm@9c0 { 139 cpm@9c0 {
139 #address-cells = <1>; 140 #address-cells = <1>;
140 #size-cells = <1>; 141 #size-cells = <1>;
141 compatible = "fsl,mpc885-cpm", "fsl,cpm1"; 142 compatible = "fsl,mpc885-cpm", "fsl,cpm1";
142 command-proc = <9c0>; 143 command-proc = <0x9c0>;
143 interrupts = <0>; // cpm error interrupt 144 interrupts = <0>; // cpm error interrupt
144 interrupt-parent = <&CPM_PIC>; 145 interrupt-parent = <&CPM_PIC>;
145 reg = <9c0 40>; 146 reg = <0x9c0 0x40>;
146 ranges; 147 ranges;
147 148
148 muram@2000 { 149 muram@2000 {
149 #address-cells = <1>; 150 #address-cells = <1>;
150 #size-cells = <1>; 151 #size-cells = <1>;
151 ranges = <0 2000 2000>; 152 ranges = <0x0 0x2000 0x2000>;
152 153
153 data@0 { 154 data@0 {
154 compatible = "fsl,cpm-muram-data"; 155 compatible = "fsl,cpm-muram-data";
155 reg = <0 1c00>; 156 reg = <0x0 0x1c00>;
156 }; 157 };
157 }; 158 };
158 159
@@ -160,7 +161,7 @@
160 compatible = "fsl,mpc885-brg", 161 compatible = "fsl,mpc885-brg",
161 "fsl,cpm1-brg", 162 "fsl,cpm1-brg",
162 "fsl,cpm-brg"; 163 "fsl,cpm-brg";
163 reg = <9f0 10>; 164 reg = <0x9f0 0x10>;
164 }; 165 };
165 166
166 CPM_PIC: interrupt-controller@930 { 167 CPM_PIC: interrupt-controller@930 {
@@ -168,7 +169,7 @@
168 #interrupt-cells = <1>; 169 #interrupt-cells = <1>;
169 interrupts = <5 2 0 2>; 170 interrupts = <5 2 0 2>;
170 interrupt-parent = <&PIC>; 171 interrupt-parent = <&PIC>;
171 reg = <930 20>; 172 reg = <0x930 0x20>;
172 compatible = "fsl,mpc885-cpm-pic", 173 compatible = "fsl,mpc885-cpm-pic",
173 "fsl,cpm1-pic"; 174 "fsl,cpm1-pic";
174 }; 175 };
@@ -178,11 +179,11 @@
178 device_type = "serial"; 179 device_type = "serial";
179 compatible = "fsl,mpc885-smc-uart", 180 compatible = "fsl,mpc885-smc-uart",
180 "fsl,cpm1-smc-uart"; 181 "fsl,cpm1-smc-uart";
181 reg = <a80 10 3e80 40>; 182 reg = <0xa80 0x10 0x3e80 0x40>;
182 interrupts = <4>; 183 interrupts = <4>;
183 interrupt-parent = <&CPM_PIC>; 184 interrupt-parent = <&CPM_PIC>;
184 fsl,cpm-brg = <1>; 185 fsl,cpm-brg = <1>;
185 fsl,cpm-command = <0090>; 186 fsl,cpm-command = <0x90>;
186 linux,planetcore-label = "SMC1"; 187 linux,planetcore-label = "SMC1";
187 }; 188 };
188 189
@@ -191,11 +192,11 @@
191 device_type = "serial"; 192 device_type = "serial";
192 compatible = "fsl,mpc885-scc-uart", 193 compatible = "fsl,mpc885-scc-uart",
193 "fsl,cpm1-scc-uart"; 194 "fsl,cpm1-scc-uart";
194 reg = <a20 20 3d00 80>; 195 reg = <0xa20 0x20 0x3d00 0x80>;
195 interrupts = <1d>; 196 interrupts = <29>;
196 interrupt-parent = <&CPM_PIC>; 197 interrupt-parent = <&CPM_PIC>;
197 fsl,cpm-brg = <2>; 198 fsl,cpm-brg = <2>;
198 fsl,cpm-command = <0040>; 199 fsl,cpm-command = <0x40>;
199 linux,planetcore-label = "SCC2"; 200 linux,planetcore-label = "SCC2";
200 }; 201 };
201 202
@@ -204,9 +205,9 @@
204 #size-cells = <0>; 205 #size-cells = <0>;
205 compatible = "fsl,mpc885-usb", 206 compatible = "fsl,mpc885-usb",
206 "fsl,cpm1-usb"; 207 "fsl,cpm1-usb";
207 reg = <a00 18 1c00 80>; 208 reg = <0xa00 0x18 0x1c00 0x80>;
208 interrupt-parent = <&CPM_PIC>; 209 interrupt-parent = <&CPM_PIC>;
209 interrupts = <1e>; 210 interrupts = <30>;
210 fsl,cpm-command = <0000>; 211 fsl,cpm-command = <0000>;
211 }; 212 };
212 }; 213 };
diff --git a/arch/powerpc/boot/dts/glacier.dts b/arch/powerpc/boot/dts/glacier.dts
new file mode 100644
index 000000000000..958a5ca53d35
--- /dev/null
+++ b/arch/powerpc/boot/dts/glacier.dts
@@ -0,0 +1,467 @@
1/*
2 * Device Tree Source for AMCC Glacier (460GT)
3 *
4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without
8 * any warranty of any kind, whether express or implied.
9 */
10
11/ {
12 #address-cells = <2>;
13 #size-cells = <1>;
14 model = "amcc,glacier";
15 compatible = "amcc,glacier", "amcc,canyonlands";
16 dcr-parent = <&/cpus/cpu@0>;
17
18 aliases {
19 ethernet0 = &EMAC0;
20 ethernet1 = &EMAC1;
21 ethernet2 = &EMAC2;
22 ethernet3 = &EMAC3;
23 serial0 = &UART0;
24 serial1 = &UART1;
25 };
26
27 cpus {
28 #address-cells = <1>;
29 #size-cells = <0>;
30
31 cpu@0 {
32 device_type = "cpu";
33 model = "PowerPC,460GT";
34 reg = <0>;
35 clock-frequency = <0>; /* Filled in by U-Boot */
36 timebase-frequency = <0>; /* Filled in by U-Boot */
37 i-cache-line-size = <20>;
38 d-cache-line-size = <20>;
39 i-cache-size = <8000>;
40 d-cache-size = <8000>;
41 dcr-controller;
42 dcr-access-method = "native";
43 };
44 };
45
46 memory {
47 device_type = "memory";
48 reg = <0 0 0>; /* Filled in by U-Boot */
49 };
50
51 UIC0: interrupt-controller0 {
52 compatible = "ibm,uic-460gt","ibm,uic";
53 interrupt-controller;
54 cell-index = <0>;
55 dcr-reg = <0c0 009>;
56 #address-cells = <0>;
57 #size-cells = <0>;
58 #interrupt-cells = <2>;
59 };
60
61 UIC1: interrupt-controller1 {
62 compatible = "ibm,uic-460gt","ibm,uic";
63 interrupt-controller;
64 cell-index = <1>;
65 dcr-reg = <0d0 009>;
66 #address-cells = <0>;
67 #size-cells = <0>;
68 #interrupt-cells = <2>;
69 interrupts = <1e 4 1f 4>; /* cascade */
70 interrupt-parent = <&UIC0>;
71 };
72
73 UIC2: interrupt-controller2 {
74 compatible = "ibm,uic-460gt","ibm,uic";
75 interrupt-controller;
76 cell-index = <2>;
77 dcr-reg = <0e0 009>;
78 #address-cells = <0>;
79 #size-cells = <0>;
80 #interrupt-cells = <2>;
81 interrupts = <a 4 b 4>; /* cascade */
82 interrupt-parent = <&UIC0>;
83 };
84
85 UIC3: interrupt-controller3 {
86 compatible = "ibm,uic-460gt","ibm,uic";
87 interrupt-controller;
88 cell-index = <3>;
89 dcr-reg = <0f0 009>;
90 #address-cells = <0>;
91 #size-cells = <0>;
92 #interrupt-cells = <2>;
93 interrupts = <10 4 11 4>; /* cascade */
94 interrupt-parent = <&UIC0>;
95 };
96
97 SDR0: sdr {
98 compatible = "ibm,sdr-460gt";
99 dcr-reg = <00e 002>;
100 };
101
102 CPR0: cpr {
103 compatible = "ibm,cpr-460gt";
104 dcr-reg = <00c 002>;
105 };
106
107 plb {
108 compatible = "ibm,plb-460gt", "ibm,plb4";
109 #address-cells = <2>;
110 #size-cells = <1>;
111 ranges;
112 clock-frequency = <0>; /* Filled in by U-Boot */
113
114 SDRAM0: sdram {
115 compatible = "ibm,sdram-460gt", "ibm,sdram-405gp";
116 dcr-reg = <010 2>;
117 };
118
119 MAL0: mcmal {
120 compatible = "ibm,mcmal-460gt", "ibm,mcmal2";
121 dcr-reg = <180 62>;
122 num-tx-chans = <4>;
123 num-rx-chans = <20>;
124 #address-cells = <0>;
125 #size-cells = <0>;
126 interrupt-parent = <&UIC2>;
127 interrupts = < /*TXEOB*/ 6 4
128 /*RXEOB*/ 7 4
129 /*SERR*/ 3 4
130 /*TXDE*/ 4 4
131 /*RXDE*/ 5 4>;
132 desc-base-addr-high = <8>;
133 };
134
135 POB0: opb {
136 compatible = "ibm,opb-460gt", "ibm,opb";
137 #address-cells = <1>;
138 #size-cells = <1>;
139 ranges = <b0000000 4 b0000000 50000000>;
140 clock-frequency = <0>; /* Filled in by U-Boot */
141
142 EBC0: ebc {
143 compatible = "ibm,ebc-460gt", "ibm,ebc";
144 dcr-reg = <012 2>;
145 #address-cells = <2>;
146 #size-cells = <1>;
147 clock-frequency = <0>; /* Filled in by U-Boot */
148 interrupts = <6 4>;
149 interrupt-parent = <&UIC1>;
150 };
151
152 UART0: serial@ef600300 {
153 device_type = "serial";
154 compatible = "ns16550";
155 reg = <ef600300 8>;
156 virtual-reg = <ef600300>;
157 clock-frequency = <0>; /* Filled in by U-Boot */
158 current-speed = <0>; /* Filled in by U-Boot */
159 interrupt-parent = <&UIC1>;
160 interrupts = <1 4>;
161 };
162
163 UART1: serial@ef600400 {
164 device_type = "serial";
165 compatible = "ns16550";
166 reg = <ef600400 8>;
167 virtual-reg = <ef600400>;
168 clock-frequency = <0>; /* Filled in by U-Boot */
169 current-speed = <0>; /* Filled in by U-Boot */
170 interrupt-parent = <&UIC0>;
171 interrupts = <1 4>;
172 };
173
174 UART2: serial@ef600500 {
175 device_type = "serial";
176 compatible = "ns16550";
177 reg = <ef600500 8>;
178 virtual-reg = <ef600500>;
179 clock-frequency = <0>; /* Filled in by U-Boot */
180 current-speed = <0>; /* Filled in by U-Boot */
181 interrupt-parent = <&UIC1>;
182 interrupts = <1d 4>;
183 };
184
185 UART3: serial@ef600600 {
186 device_type = "serial";
187 compatible = "ns16550";
188 reg = <ef600600 8>;
189 virtual-reg = <ef600600>;
190 clock-frequency = <0>; /* Filled in by U-Boot */
191 current-speed = <0>; /* Filled in by U-Boot */
192 interrupt-parent = <&UIC1>;
193 interrupts = <1e 4>;
194 };
195
196 IIC0: i2c@ef600700 {
197 compatible = "ibm,iic-460gt", "ibm,iic";
198 reg = <ef600700 14>;
199 interrupt-parent = <&UIC0>;
200 interrupts = <2 4>;
201 };
202
203 IIC1: i2c@ef600800 {
204 compatible = "ibm,iic-460gt", "ibm,iic";
205 reg = <ef600800 14>;
206 interrupt-parent = <&UIC0>;
207 interrupts = <3 4>;
208 };
209
210 ZMII0: emac-zmii@ef600d00 {
211 compatible = "ibm,zmii-460gt", "ibm,zmii";
212 reg = <ef600d00 c>;
213 };
214
215 RGMII0: emac-rgmii@ef601500 {
216 compatible = "ibm,rgmii-460gt", "ibm,rgmii";
217 reg = <ef601500 8>;
218 has-mdio;
219 };
220
221 RGMII1: emac-rgmii@ef601600 {
222 compatible = "ibm,rgmii-460gt", "ibm,rgmii";
223 reg = <ef601600 8>;
224 has-mdio;
225 };
226
227 TAH0: emac-tah@ef601350 {
228 compatible = "ibm,tah-460gt", "ibm,tah";
229 reg = <ef601350 30>;
230 };
231
232 TAH1: emac-tah@ef601450 {
233 compatible = "ibm,tah-460gt", "ibm,tah";
234 reg = <ef601450 30>;
235 };
236
237 EMAC0: ethernet@ef600e00 {
238 device_type = "network";
239 compatible = "ibm,emac-460gt", "ibm,emac4";
240 interrupt-parent = <&EMAC0>;
241 interrupts = <0 1>;
242 #interrupt-cells = <1>;
243 #address-cells = <0>;
244 #size-cells = <0>;
245 interrupt-map = </*Status*/ 0 &UIC2 10 4
246 /*Wake*/ 1 &UIC2 14 4>;
247 reg = <ef600e00 70>;
248 local-mac-address = [000000000000]; /* Filled in by U-Boot */
249 mal-device = <&MAL0>;
250 mal-tx-channel = <0>;
251 mal-rx-channel = <0>;
252 cell-index = <0>;
253 max-frame-size = <2328>;
254 rx-fifo-size = <1000>;
255 tx-fifo-size = <800>;
256 phy-mode = "rgmii";
257 phy-map = <00000000>;
258 rgmii-device = <&RGMII0>;
259 rgmii-channel = <0>;
260 tah-device = <&TAH0>;
261 tah-channel = <0>;
262 has-inverted-stacr-oc;
263 has-new-stacr-staopc;
264 };
265
266 EMAC1: ethernet@ef600f00 {
267 device_type = "network";
268 compatible = "ibm,emac-460gt", "ibm,emac4";
269 interrupt-parent = <&EMAC1>;
270 interrupts = <0 1>;
271 #interrupt-cells = <1>;
272 #address-cells = <0>;
273 #size-cells = <0>;
274 interrupt-map = </*Status*/ 0 &UIC2 11 4
275 /*Wake*/ 1 &UIC2 15 4>;
276 reg = <ef600f00 70>;
277 local-mac-address = [000000000000]; /* Filled in by U-Boot */
278 mal-device = <&MAL0>;
279 mal-tx-channel = <1>;
280 mal-rx-channel = <8>;
281 cell-index = <1>;
282 max-frame-size = <2328>;
283 rx-fifo-size = <1000>;
284 tx-fifo-size = <800>;
285 phy-mode = "rgmii";
286 phy-map = <00000000>;
287 rgmii-device = <&RGMII0>;
288 rgmii-channel = <1>;
289 tah-device = <&TAH1>;
290 tah-channel = <1>;
291 has-inverted-stacr-oc;
292 has-new-stacr-staopc;
293 mdio-device = <&EMAC0>;
294 };
295
296 EMAC2: ethernet@ef601100 {
297 device_type = "network";
298 compatible = "ibm,emac-460gt", "ibm,emac4";
299 interrupt-parent = <&EMAC2>;
300 interrupts = <0 1>;
301 #interrupt-cells = <1>;
302 #address-cells = <0>;
303 #size-cells = <0>;
304 interrupt-map = </*Status*/ 0 &UIC2 12 4
305 /*Wake*/ 1 &UIC2 16 4>;
306 reg = <ef601100 70>;
307 local-mac-address = [000000000000]; /* Filled in by U-Boot */
308 mal-device = <&MAL0>;
309 mal-tx-channel = <2>;
310 mal-rx-channel = <10>;
311 cell-index = <2>;
312 max-frame-size = <2328>;
313 rx-fifo-size = <1000>;
314 tx-fifo-size = <800>;
315 phy-mode = "rgmii";
316 phy-map = <00000000>;
317 rgmii-device = <&RGMII1>;
318 rgmii-channel = <0>;
319 has-inverted-stacr-oc;
320 has-new-stacr-staopc;
321 mdio-device = <&EMAC0>;
322 };
323
324 EMAC3: ethernet@ef601200 {
325 device_type = "network";
326 compatible = "ibm,emac-460gt", "ibm,emac4";
327 interrupt-parent = <&EMAC3>;
328 interrupts = <0 1>;
329 #interrupt-cells = <1>;
330 #address-cells = <0>;
331 #size-cells = <0>;
332 interrupt-map = </*Status*/ 0 &UIC2 13 4
333 /*Wake*/ 1 &UIC2 17 4>;
334 reg = <ef601200 70>;
335 local-mac-address = [000000000000]; /* Filled in by U-Boot */
336 mal-device = <&MAL0>;
337 mal-tx-channel = <3>;
338 mal-rx-channel = <18>;
339 cell-index = <3>;
340 max-frame-size = <2328>;
341 rx-fifo-size = <1000>;
342 tx-fifo-size = <800>;
343 phy-mode = "rgmii";
344 phy-map = <00000000>;
345 rgmii-device = <&RGMII1>;
346 rgmii-channel = <1>;
347 has-inverted-stacr-oc;
348 has-new-stacr-staopc;
349 mdio-device = <&EMAC0>;
350 };
351 };
352
353 PCIX0: pci@c0ec00000 {
354 device_type = "pci";
355 #interrupt-cells = <1>;
356 #size-cells = <2>;
357 #address-cells = <3>;
358 compatible = "ibm,plb-pcix-460gt", "ibm,plb-pcix";
359 primary;
360 large-inbound-windows;
361 enable-msi-hole;
362 reg = <c 0ec00000 8 /* Config space access */
363 0 0 0 /* no IACK cycles */
364 c 0ed00000 4 /* Special cycles */
365 c 0ec80000 100 /* Internal registers */
366 c 0ec80100 fc>; /* Internal messaging registers */
367
368 /* Outbound ranges, one memory and one IO,
369 * later cannot be changed
370 */
371 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000
372 01000000 0 00000000 0000000c 08000000 0 00010000>;
373
374 /* Inbound 2GB range starting at 0 */
375 dma-ranges = <42000000 0 0 0 0 0 80000000>;
376
377 /* This drives busses 0 to 0x3f */
378 bus-range = <0 3f>;
379
380 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
381 interrupt-map-mask = <0000 0 0 0>;
382 interrupt-map = < 0000 0 0 0 &UIC1 0 8 >;
383 };
384
385 PCIE0: pciex@d00000000 {
386 device_type = "pci";
387 #interrupt-cells = <1>;
388 #size-cells = <2>;
389 #address-cells = <3>;
390 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
391 primary;
392 port = <0>; /* port number */
393 reg = <d 00000000 20000000 /* Config space access */
394 c 08010000 00001000>; /* Registers */
395 dcr-reg = <100 020>;
396 sdr-base = <300>;
397
398 /* Outbound ranges, one memory and one IO,
399 * later cannot be changed
400 */
401 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000
402 01000000 0 00000000 0000000f 80000000 0 00010000>;
403
404 /* Inbound 2GB range starting at 0 */
405 dma-ranges = <42000000 0 0 0 0 0 80000000>;
406
407 /* This drives busses 40 to 0x7f */
408 bus-range = <40 7f>;
409
410 /* Legacy interrupts (note the weird polarity, the bridge seems
411 * to invert PCIe legacy interrupts).
412 * We are de-swizzling here because the numbers are actually for
413 * port of the root complex virtual P2P bridge. But I want
414 * to avoid putting a node for it in the tree, so the numbers
415 * below are basically de-swizzled numbers.
416 * The real slot is on idsel 0, so the swizzling is 1:1
417 */
418 interrupt-map-mask = <0000 0 0 7>;
419 interrupt-map = <
420 0000 0 0 1 &UIC3 c 4 /* swizzled int A */
421 0000 0 0 2 &UIC3 d 4 /* swizzled int B */
422 0000 0 0 3 &UIC3 e 4 /* swizzled int C */
423 0000 0 0 4 &UIC3 f 4 /* swizzled int D */>;
424 };
425
426 PCIE1: pciex@d20000000 {
427 device_type = "pci";
428 #interrupt-cells = <1>;
429 #size-cells = <2>;
430 #address-cells = <3>;
431 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
432 primary;
433 port = <1>; /* port number */
434 reg = <d 20000000 20000000 /* Config space access */
435 c 08011000 00001000>; /* Registers */
436 dcr-reg = <120 020>;
437 sdr-base = <340>;
438
439 /* Outbound ranges, one memory and one IO,
440 * later cannot be changed
441 */
442 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000
443 01000000 0 00000000 0000000f 80010000 0 00010000>;
444
445 /* Inbound 2GB range starting at 0 */
446 dma-ranges = <42000000 0 0 0 0 0 80000000>;
447
448 /* This drives busses 80 to 0xbf */
449 bus-range = <80 bf>;
450
451 /* Legacy interrupts (note the weird polarity, the bridge seems
452 * to invert PCIe legacy interrupts).
453 * We are de-swizzling here because the numbers are actually for
454 * port of the root complex virtual P2P bridge. But I want
455 * to avoid putting a node for it in the tree, so the numbers
456 * below are basically de-swizzled numbers.
457 * The real slot is on idsel 0, so the swizzling is 1:1
458 */
459 interrupt-map-mask = <0000 0 0 7>;
460 interrupt-map = <
461 0000 0 0 1 &UIC3 10 4 /* swizzled int A */
462 0000 0 0 2 &UIC3 11 4 /* swizzled int B */
463 0000 0 0 3 &UIC3 12 4 /* swizzled int C */
464 0000 0 0 4 &UIC3 13 4 /* swizzled int D */>;
465 };
466 };
467};
diff --git a/arch/powerpc/boot/dts/haleakala.dts b/arch/powerpc/boot/dts/haleakala.dts
index ae68fefc01b6..b5d95ac24dbf 100644
--- a/arch/powerpc/boot/dts/haleakala.dts
+++ b/arch/powerpc/boot/dts/haleakala.dts
@@ -12,7 +12,7 @@
12 #address-cells = <1>; 12 #address-cells = <1>;
13 #size-cells = <1>; 13 #size-cells = <1>;
14 model = "amcc,haleakala"; 14 model = "amcc,haleakala";
15 compatible = "amcc,kilauea"; 15 compatible = "amcc,haleakala", "amcc,kilauea";
16 dcr-parent = <&/cpus/cpu@0>; 16 dcr-parent = <&/cpus/cpu@0>;
17 17
18 aliases { 18 aliases {
@@ -218,7 +218,7 @@
218 mal-tx-channel = <0>; 218 mal-tx-channel = <0>;
219 mal-rx-channel = <0>; 219 mal-rx-channel = <0>;
220 cell-index = <0>; 220 cell-index = <0>;
221 max-frame-size = <5dc>; 221 max-frame-size = <2328>;
222 rx-fifo-size = <1000>; 222 rx-fifo-size = <1000>;
223 tx-fifo-size = <800>; 223 tx-fifo-size = <800>;
224 phy-mode = "rgmii"; 224 phy-mode = "rgmii";
diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts
index fc86e5a3afc4..cc2873a531d2 100644
--- a/arch/powerpc/boot/dts/katmai.dts
+++ b/arch/powerpc/boot/dts/katmai.dts
@@ -212,7 +212,7 @@
212 mal-tx-channel = <0>; 212 mal-tx-channel = <0>;
213 mal-rx-channel = <0>; 213 mal-rx-channel = <0>;
214 cell-index = <0>; 214 cell-index = <0>;
215 max-frame-size = <5dc>; 215 max-frame-size = <2328>;
216 rx-fifo-size = <1000>; 216 rx-fifo-size = <1000>;
217 tx-fifo-size = <800>; 217 tx-fifo-size = <800>;
218 phy-mode = "gmii"; 218 phy-mode = "gmii";
diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
index 8baef61f31cd..48c9a6e71f1a 100644
--- a/arch/powerpc/boot/dts/kilauea.dts
+++ b/arch/powerpc/boot/dts/kilauea.dts
@@ -219,7 +219,7 @@
219 mal-tx-channel = <0>; 219 mal-tx-channel = <0>;
220 mal-rx-channel = <0>; 220 mal-rx-channel = <0>;
221 cell-index = <0>; 221 cell-index = <0>;
222 max-frame-size = <5dc>; 222 max-frame-size = <2328>;
223 rx-fifo-size = <1000>; 223 rx-fifo-size = <1000>;
224 tx-fifo-size = <800>; 224 tx-fifo-size = <800>;
225 phy-mode = "rgmii"; 225 phy-mode = "rgmii";
@@ -247,7 +247,7 @@
247 mal-tx-channel = <1>; 247 mal-tx-channel = <1>;
248 mal-rx-channel = <1>; 248 mal-rx-channel = <1>;
249 cell-index = <1>; 249 cell-index = <1>;
250 max-frame-size = <5dc>; 250 max-frame-size = <2328>;
251 rx-fifo-size = <1000>; 251 rx-fifo-size = <1000>;
252 tx-fifo-size = <800>; 252 tx-fifo-size = <800>;
253 phy-mode = "rgmii"; 253 phy-mode = "rgmii";
diff --git a/arch/powerpc/boot/dts/ksi8560.dts b/arch/powerpc/boot/dts/ksi8560.dts
new file mode 100644
index 000000000000..f869ce3ca0b7
--- /dev/null
+++ b/arch/powerpc/boot/dts/ksi8560.dts
@@ -0,0 +1,267 @@
1/*
2 * Device Tree Source for Emerson KSI8560
3 *
4 * Author: Alexandr Smirnov <asmirnov@ru.mvista.com>
5 *
6 * Based on mpc8560ads.dts
7 *
8 * 2008 (c) MontaVista, Software, Inc. This file is licensed under
9 * the terms of the GNU General Public License version 2. This program
10 * is licensed "as is" without any warranty of any kind, whether express
11 * or implied.
12 *
13 */
14
15/dts-v1/;
16
17/ {
18 model = "KSI8560";
19 compatible = "emerson,KSI8560";
20 #address-cells = <1>;
21 #size-cells = <1>;
22
23 aliases {
24 ethernet0 = &enet0;
25 ethernet1 = &enet1;
26 ethernet2 = &enet2;
27 };
28
29 cpus {
30 #address-cells = <1>;
31 #size-cells = <0>;
32
33 PowerPC,8560@0 {
34 device_type = "cpu";
35 reg = <0>;
36 d-cache-line-size = <32>;
37 i-cache-line-size = <32>;
38 d-cache-size = <0x8000>; /* L1, 32K */
39 i-cache-size = <0x8000>; /* L1, 32K */
40 timebase-frequency = <0>; /* From U-boot */
41 bus-frequency = <0>; /* From U-boot */
42 clock-frequency = <0>; /* From U-boot */
43 };
44 };
45
46 memory {
47 device_type = "memory";
48 reg = <0x00000000 0x10000000>; /* Fixed by bootwrapper */
49 };
50
51 soc@fdf00000 {
52 #address-cells = <1>;
53 #size-cells = <1>;
54 device_type = "soc";
55 ranges = <0x00000000 0xfdf00000 0x00100000>;
56 bus-frequency = <0>; /* Fixed by bootwrapper */
57
58 memory-controller@2000 {
59 compatible = "fsl,8540-memory-controller";
60 reg = <0x2000 0x1000>;
61 interrupt-parent = <&MPIC>;
62 interrupts = <0x12 0x2>;
63 };
64
65 l2-cache-controller@20000 {
66 compatible = "fsl,8540-l2-cache-controller";
67 reg = <0x20000 0x1000>;
68 cache-line-size = <0x20>; /* 32 bytes */
69 cache-size = <0x40000>; /* L2, 256K */
70 interrupt-parent = <&MPIC>;
71 interrupts = <0x10 0x2>;
72 };
73
74 i2c@3000 {
75 #address-cells = <1>;
76 #size-cells = <0>;
77 cell-index = <0>;
78 compatible = "fsl-i2c";
79 reg = <0x3000 0x100>;
80 interrupts = <0x2b 0x2>;
81 interrupt-parent = <&MPIC>;
82 dfsrr;
83 };
84
85 mdio@24520 { /* For TSECs */
86 #address-cells = <1>;
87 #size-cells = <0>;
88 compatible = "fsl,gianfar-mdio";
89 reg = <0x24520 0x20>;
90
91 PHY1: ethernet-phy@1 {
92 interrupt-parent = <&MPIC>;
93 reg = <0x1>;
94 device_type = "ethernet-phy";
95 };
96
97 PHY2: ethernet-phy@2 {
98 interrupt-parent = <&MPIC>;
99 reg = <0x2>;
100 device_type = "ethernet-phy";
101 };
102 };
103
104 enet0: ethernet@24000 {
105 device_type = "network";
106 model = "TSEC";
107 compatible = "gianfar";
108 reg = <0x24000 0x1000>;
109 /* Mac address filled in by bootwrapper */
110 local-mac-address = [ 00 00 00 00 00 00 ];
111 interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>;
112 interrupt-parent = <&MPIC>;
113 phy-handle = <&PHY1>;
114 };
115
116 enet1: ethernet@25000 {
117 device_type = "network";
118 model = "TSEC";
119 compatible = "gianfar";
120 reg = <0x25000 0x1000>;
121 /* Mac address filled in by bootwrapper */
122 local-mac-address = [ 00 00 00 00 00 00 ];
123 interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>;
124 interrupt-parent = <&MPIC>;
125 phy-handle = <&PHY2>;
126 };
127
128 MPIC: pic@40000 {
129 #address-cells = <0>;
130 #interrupt-cells = <2>;
131 interrupt-controller;
132 reg = <0x40000 0x40000>;
133 device_type = "open-pic";
134 };
135
136 cpm@919c0 {
137 #address-cells = <1>;
138 #size-cells = <1>;
139 compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
140 reg = <0x919c0 0x30>;
141 ranges;
142
143 muram@80000 {
144 #address-cells = <1>;
145 #size-cells = <1>;
146 ranges = <0x0 0x80000 0x10000>;
147
148 data@0 {
149 compatible = "fsl,cpm-muram-data";
150 reg = <0x0 0x4000 0x9000 0x2000>;
151 };
152 };
153
154 brg@919f0 {
155 compatible = "fsl,mpc8560-brg",
156 "fsl,cpm2-brg",
157 "fsl,cpm-brg";
158 reg = <0x919f0 0x10 0x915f0 0x10>;
159 clock-frequency = <165000000>; /* 166MHz */
160 };
161
162 CPMPIC: pic@90c00 {
163 #address-cells = <0>;
164 #interrupt-cells = <2>;
165 interrupt-controller;
166 interrupts = <0x2e 0x2>;
167 interrupt-parent = <&MPIC>;
168 reg = <0x90c00 0x80>;
169 compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
170 };
171
172 serial@91a00 {
173 device_type = "serial";
174 compatible = "fsl,mpc8560-scc-uart",
175 "fsl,cpm2-scc-uart";
176 reg = <0x91a00 0x20 0x88000 0x100>;
177 fsl,cpm-brg = <1>;
178 fsl,cpm-command = <0x800000>;
179 current-speed = <0x1c200>;
180 interrupts = <0x28 0x8>;
181 interrupt-parent = <&CPMPIC>;
182 };
183
184 serial@91a20 {
185 device_type = "serial";
186 compatible = "fsl,mpc8560-scc-uart",
187 "fsl,cpm2-scc-uart";
188 reg = <0x91a20 0x20 0x88100 0x100>;
189 fsl,cpm-brg = <2>;
190 fsl,cpm-command = <0x4a00000>;
191 current-speed = <0x1c200>;
192 interrupts = <0x29 0x8>;
193 interrupt-parent = <&CPMPIC>;
194 };
195
196 mdio@90d00 { /* For FCCs */
197 #address-cells = <1>;
198 #size-cells = <0>;
199 compatible = "fsl,cpm2-mdio-bitbang";
200 reg = <0x90d00 0x14>;
201 fsl,mdio-pin = <24>;
202 fsl,mdc-pin = <25>;
203
204 PHY0: ethernet-phy@0 {
205 interrupt-parent = <&MPIC>;
206 reg = <0x0>;
207 device_type = "ethernet-phy";
208 };
209 };
210
211 enet2: ethernet@91300 {
212 device_type = "network";
213 compatible = "fsl,mpc8560-fcc-enet",
214 "fsl,cpm2-fcc-enet";
215 reg = <0x91300 0x20 0x88400 0x100 0x91390 0x1>;
216 /* Mac address filled in by bootwrapper */
217 local-mac-address = [ 00 00 00 00 00 00 ];
218 fsl,cpm-command = <0x12000300>;
219 interrupts = <0x20 0x8>;
220 interrupt-parent = <&CPMPIC>;
221 phy-handle = <&PHY0>;
222 };
223 };
224 };
225
226 localbus@fdf05000 {
227 #address-cells = <2>;
228 #size-cells = <1>;
229 compatible = "fsl,mpc8560-localbus";
230 reg = <0xfdf05000 0x68>;
231
232 ranges = <0x0 0x0 0xe0000000 0x00800000
233 0x4 0x0 0xe8080000 0x00080000>;
234
235 flash@0,0 {
236 #address-cells = <1>;
237 #size-cells = <1>;
238 compatible = "jedec-flash";
239 reg = <0x0 0x0 0x800000>;
240 bank-width = <0x2>;
241
242 partition@0 {
243 label = "Primary Kernel";
244 reg = <0x0 0x180000>;
245 };
246 partition@180000 {
247 label = "Primary Filesystem";
248 reg = <0x180000 0x580000>;
249 };
250 partition@700000 {
251 label = "Monitor";
252 reg = <0x300000 0x100000>;
253 read-only;
254 };
255 };
256
257 cpld@4,0 {
258 compatible = "emerson,KSI8560-cpld";
259 reg = <0x4 0x0 0x80000>;
260 };
261 };
262
263
264 chosen {
265 linux,stdout-path = "/soc/cpm/serial@91a00";
266 };
267};
diff --git a/arch/powerpc/boot/dts/kuroboxHD.dts b/arch/powerpc/boot/dts/kuroboxHD.dts
index 446958854519..2e5a1a1812b6 100644
--- a/arch/powerpc/boot/dts/kuroboxHD.dts
+++ b/arch/powerpc/boot/dts/kuroboxHD.dts
@@ -7,6 +7,7 @@
7 * Based on sandpoint.dts 7 * Based on sandpoint.dts
8 * 8 *
9 * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de> 9 * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de>
10 * Copyright 2008 Freescale Semiconductor, Inc.
10 * 11 *
11 * This file is licensed under 12 * This file is licensed under
12 * the terms of the GNU General Public License version 2. This program 13 * the terms of the GNU General Public License version 2. This program
@@ -17,6 +18,8 @@ XXXX add flash parts, rtc, ??
17 18
18 */ 19 */
19 20
21/dts-v1/;
22
20/ { 23/ {
21 model = "KuroboxHD"; 24 model = "KuroboxHD";
22 compatible = "linkstation"; 25 compatible = "linkstation";
@@ -35,19 +38,19 @@ XXXX add flash parts, rtc, ??
35 38
36 PowerPC,603e { /* Really 8241 */ 39 PowerPC,603e { /* Really 8241 */
37 device_type = "cpu"; 40 device_type = "cpu";
38 reg = <0>; 41 reg = <0x0>;
39 clock-frequency = <bebc200>; /* Fixed by bootloader */ 42 clock-frequency = <200000000>; /* Fixed by bootloader */
40 timebase-frequency = <1743000>; /* Fixed by bootloader */ 43 timebase-frequency = <24391680>; /* Fixed by bootloader */
41 bus-frequency = <0>; /* Fixed by bootloader */ 44 bus-frequency = <0>; /* Fixed by bootloader */
42 /* Following required by dtc but not used */ 45 /* Following required by dtc but not used */
43 i-cache-size = <4000>; 46 i-cache-size = <0x4000>;
44 d-cache-size = <4000>; 47 d-cache-size = <0x4000>;
45 }; 48 };
46 }; 49 };
47 50
48 memory { 51 memory {
49 device_type = "memory"; 52 device_type = "memory";
50 reg = <00000000 04000000>; 53 reg = <0x0 0x4000000>;
51 }; 54 };
52 55
53 soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */ 56 soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */
@@ -56,26 +59,26 @@ XXXX add flash parts, rtc, ??
56 device_type = "soc"; 59 device_type = "soc";
57 compatible = "mpc10x"; 60 compatible = "mpc10x";
58 store-gathering = <0>; /* 0 == off, !0 == on */ 61 store-gathering = <0>; /* 0 == off, !0 == on */
59 reg = <80000000 00100000>; 62 reg = <0x80000000 0x100000>;
60 ranges = <80000000 80000000 70000000 /* pci mem space */ 63 ranges = <0x80000000 0x80000000 0x70000000 /* pci mem space */
61 fc000000 fc000000 00100000 /* EUMB */ 64 0xfc000000 0xfc000000 0x100000 /* EUMB */
62 fe000000 fe000000 00c00000 /* pci i/o space */ 65 0xfe000000 0xfe000000 0xc00000 /* pci i/o space */
63 fec00000 fec00000 00300000 /* pci cfg regs */ 66 0xfec00000 0xfec00000 0x300000 /* pci cfg regs */
64 fef00000 fef00000 00100000>; /* pci iack */ 67 0xfef00000 0xfef00000 0x100000>; /* pci iack */
65 68
66 i2c@80003000 { 69 i2c@80003000 {
67 #address-cells = <1>; 70 #address-cells = <1>;
68 #size-cells = <0>; 71 #size-cells = <0>;
69 cell-index = <0>; 72 cell-index = <0>;
70 compatible = "fsl-i2c"; 73 compatible = "fsl-i2c";
71 reg = <80003000 1000>; 74 reg = <0x80003000 0x1000>;
72 interrupts = <5 2>; 75 interrupts = <5 2>;
73 interrupt-parent = <&mpic>; 76 interrupt-parent = <&mpic>;
74 77
75 rtc@32 { 78 rtc@32 {
76 device_type = "rtc"; 79 device_type = "rtc";
77 compatible = "ricoh,rs5c372a"; 80 compatible = "ricoh,rs5c372a";
78 reg = <32>; 81 reg = <0x32>;
79 }; 82 };
80 }; 83 };
81 84
@@ -83,9 +86,9 @@ XXXX add flash parts, rtc, ??
83 cell-index = <0>; 86 cell-index = <0>;
84 device_type = "serial"; 87 device_type = "serial";
85 compatible = "ns16550"; 88 compatible = "ns16550";
86 reg = <80004500 8>; 89 reg = <0x80004500 0x8>;
87 clock-frequency = <5d08d88>; 90 clock-frequency = <97553800>;
88 current-speed = <2580>; 91 current-speed = <9600>;
89 interrupts = <9 0>; 92 interrupts = <9 0>;
90 interrupt-parent = <&mpic>; 93 interrupt-parent = <&mpic>;
91 }; 94 };
@@ -94,10 +97,10 @@ XXXX add flash parts, rtc, ??
94 cell-index = <1>; 97 cell-index = <1>;
95 device_type = "serial"; 98 device_type = "serial";
96 compatible = "ns16550"; 99 compatible = "ns16550";
97 reg = <80004600 8>; 100 reg = <0x80004600 0x8>;
98 clock-frequency = <5d08d88>; 101 clock-frequency = <97553800>;
99 current-speed = <e100>; 102 current-speed = <57600>;
100 interrupts = <a 0>; 103 interrupts = <10 0>;
101 interrupt-parent = <&mpic>; 104 interrupt-parent = <&mpic>;
102 }; 105 };
103 106
@@ -107,7 +110,7 @@ XXXX add flash parts, rtc, ??
107 device_type = "open-pic"; 110 device_type = "open-pic";
108 compatible = "chrp,open-pic"; 111 compatible = "chrp,open-pic";
109 interrupt-controller; 112 interrupt-controller;
110 reg = <80040000 40000>; 113 reg = <0x80040000 0x40000>;
111 }; 114 };
112 115
113 pci0: pci@fec00000 { 116 pci0: pci@fec00000 {
@@ -116,29 +119,29 @@ XXXX add flash parts, rtc, ??
116 #interrupt-cells = <1>; 119 #interrupt-cells = <1>;
117 device_type = "pci"; 120 device_type = "pci";
118 compatible = "mpc10x-pci"; 121 compatible = "mpc10x-pci";
119 reg = <fec00000 400000>; 122 reg = <0xfec00000 0x400000>;
120 ranges = <01000000 0 0 fe000000 0 00c00000 123 ranges = <0x1000000 0x0 0x0 0xfe000000 0x0 0xc00000
121 02000000 0 80000000 80000000 0 70000000>; 124 0x2000000 0x0 0x80000000 0x80000000 0x0 0x70000000>;
122 bus-range = <0 ff>; 125 bus-range = <0 255>;
123 clock-frequency = <7f28155>; 126 clock-frequency = <133333333>;
124 interrupt-parent = <&mpic>; 127 interrupt-parent = <&mpic>;
125 interrupt-map-mask = <f800 0 0 7>; 128 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
126 interrupt-map = < 129 interrupt-map = <
127 /* IDSEL 11 - IRQ0 ETH */ 130 /* IDSEL 11 - IRQ0 ETH */
128 5800 0 0 1 &mpic 0 1 131 0x5800 0x0 0x0 0x1 &mpic 0x0 0x1
129 5800 0 0 2 &mpic 1 1 132 0x5800 0x0 0x0 0x2 &mpic 0x1 0x1
130 5800 0 0 3 &mpic 2 1 133 0x5800 0x0 0x0 0x3 &mpic 0x2 0x1
131 5800 0 0 4 &mpic 3 1 134 0x5800 0x0 0x0 0x4 &mpic 0x3 0x1
132 /* IDSEL 12 - IRQ1 IDE0 */ 135 /* IDSEL 12 - IRQ1 IDE0 */
133 6000 0 0 1 &mpic 1 1 136 0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
134 6000 0 0 2 &mpic 2 1 137 0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
135 6000 0 0 3 &mpic 3 1 138 0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
136 6000 0 0 4 &mpic 0 1 139 0x6000 0x0 0x0 0x4 &mpic 0x0 0x1
137 /* IDSEL 14 - IRQ3 USB2.0 */ 140 /* IDSEL 14 - IRQ3 USB2.0 */
138 7000 0 0 1 &mpic 3 1 141 0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
139 7000 0 0 2 &mpic 3 1 142 0x7000 0x0 0x0 0x2 &mpic 0x3 0x1
140 7000 0 0 3 &mpic 3 1 143 0x7000 0x0 0x0 0x3 &mpic 0x3 0x1
141 7000 0 0 4 &mpic 3 1 144 0x7000 0x0 0x0 0x4 &mpic 0x3 0x1
142 >; 145 >;
143 }; 146 };
144 }; 147 };
diff --git a/arch/powerpc/boot/dts/kuroboxHG.dts b/arch/powerpc/boot/dts/kuroboxHG.dts
index 8443c85b7b30..e4916e69ad31 100644
--- a/arch/powerpc/boot/dts/kuroboxHG.dts
+++ b/arch/powerpc/boot/dts/kuroboxHG.dts
@@ -7,6 +7,7 @@
7 * Based on sandpoint.dts 7 * Based on sandpoint.dts
8 * 8 *
9 * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de> 9 * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de>
10 * Copyright 2008 Freescale Semiconductor, Inc.
10 * 11 *
11 * This file is licensed under 12 * This file is licensed under
12 * the terms of the GNU General Public License version 2. This program 13 * the terms of the GNU General Public License version 2. This program
@@ -17,6 +18,8 @@ XXXX add flash parts, rtc, ??
17 18
18 */ 19 */
19 20
21/dts-v1/;
22
20/ { 23/ {
21 model = "KuroboxHG"; 24 model = "KuroboxHG";
22 compatible = "linkstation"; 25 compatible = "linkstation";
@@ -35,19 +38,19 @@ XXXX add flash parts, rtc, ??
35 38
36 PowerPC,603e { /* Really 8241 */ 39 PowerPC,603e { /* Really 8241 */
37 device_type = "cpu"; 40 device_type = "cpu";
38 reg = <0>; 41 reg = <0x0>;
39 clock-frequency = <fdad680>; /* Fixed by bootloader */ 42 clock-frequency = <266000000>; /* Fixed by bootloader */
40 timebase-frequency = <1F04000>; /* Fixed by bootloader */ 43 timebase-frequency = <32522240>; /* Fixed by bootloader */
41 bus-frequency = <0>; /* Fixed by bootloader */ 44 bus-frequency = <0>; /* Fixed by bootloader */
42 /* Following required by dtc but not used */ 45 /* Following required by dtc but not used */
43 i-cache-size = <4000>; 46 i-cache-size = <0x4000>;
44 d-cache-size = <4000>; 47 d-cache-size = <0x4000>;
45 }; 48 };
46 }; 49 };
47 50
48 memory { 51 memory {
49 device_type = "memory"; 52 device_type = "memory";
50 reg = <00000000 08000000>; 53 reg = <0x0 0x8000000>;
51 }; 54 };
52 55
53 soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */ 56 soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */
@@ -56,26 +59,26 @@ XXXX add flash parts, rtc, ??
56 device_type = "soc"; 59 device_type = "soc";
57 compatible = "mpc10x"; 60 compatible = "mpc10x";
58 store-gathering = <0>; /* 0 == off, !0 == on */ 61 store-gathering = <0>; /* 0 == off, !0 == on */
59 reg = <80000000 00100000>; 62 reg = <0x80000000 0x100000>;
60 ranges = <80000000 80000000 70000000 /* pci mem space */ 63 ranges = <0x80000000 0x80000000 0x70000000 /* pci mem space */
61 fc000000 fc000000 00100000 /* EUMB */ 64 0xfc000000 0xfc000000 0x100000 /* EUMB */
62 fe000000 fe000000 00c00000 /* pci i/o space */ 65 0xfe000000 0xfe000000 0xc00000 /* pci i/o space */
63 fec00000 fec00000 00300000 /* pci cfg regs */ 66 0xfec00000 0xfec00000 0x300000 /* pci cfg regs */
64 fef00000 fef00000 00100000>; /* pci iack */ 67 0xfef00000 0xfef00000 0x100000>; /* pci iack */
65 68
66 i2c@80003000 { 69 i2c@80003000 {
67 #address-cells = <1>; 70 #address-cells = <1>;
68 #size-cells = <0>; 71 #size-cells = <0>;
69 cell-index = <0>; 72 cell-index = <0>;
70 compatible = "fsl-i2c"; 73 compatible = "fsl-i2c";
71 reg = <80003000 1000>; 74 reg = <0x80003000 0x1000>;
72 interrupts = <5 2>; 75 interrupts = <5 2>;
73 interrupt-parent = <&mpic>; 76 interrupt-parent = <&mpic>;
74 77
75 rtc@32 { 78 rtc@32 {
76 device_type = "rtc"; 79 device_type = "rtc";
77 compatible = "ricoh,rs5c372a"; 80 compatible = "ricoh,rs5c372a";
78 reg = <32>; 81 reg = <0x32>;
79 }; 82 };
80 }; 83 };
81 84
@@ -83,9 +86,9 @@ XXXX add flash parts, rtc, ??
83 cell-index = <0>; 86 cell-index = <0>;
84 device_type = "serial"; 87 device_type = "serial";
85 compatible = "ns16550"; 88 compatible = "ns16550";
86 reg = <80004500 8>; 89 reg = <0x80004500 0x8>;
87 clock-frequency = <7c044a8>; 90 clock-frequency = <130041000>;
88 current-speed = <2580>; 91 current-speed = <9600>;
89 interrupts = <9 0>; 92 interrupts = <9 0>;
90 interrupt-parent = <&mpic>; 93 interrupt-parent = <&mpic>;
91 }; 94 };
@@ -94,10 +97,10 @@ XXXX add flash parts, rtc, ??
94 cell-index = <1>; 97 cell-index = <1>;
95 device_type = "serial"; 98 device_type = "serial";
96 compatible = "ns16550"; 99 compatible = "ns16550";
97 reg = <80004600 8>; 100 reg = <0x80004600 0x8>;
98 clock-frequency = <7c044a8>; 101 clock-frequency = <130041000>;
99 current-speed = <e100>; 102 current-speed = <57600>;
100 interrupts = <a 0>; 103 interrupts = <10 0>;
101 interrupt-parent = <&mpic>; 104 interrupt-parent = <&mpic>;
102 }; 105 };
103 106
@@ -107,7 +110,7 @@ XXXX add flash parts, rtc, ??
107 device_type = "open-pic"; 110 device_type = "open-pic";
108 compatible = "chrp,open-pic"; 111 compatible = "chrp,open-pic";
109 interrupt-controller; 112 interrupt-controller;
110 reg = <80040000 40000>; 113 reg = <0x80040000 0x40000>;
111 }; 114 };
112 115
113 pci0: pci@fec00000 { 116 pci0: pci@fec00000 {
@@ -116,29 +119,29 @@ XXXX add flash parts, rtc, ??
116 #interrupt-cells = <1>; 119 #interrupt-cells = <1>;
117 device_type = "pci"; 120 device_type = "pci";
118 compatible = "mpc10x-pci"; 121 compatible = "mpc10x-pci";
119 reg = <fec00000 400000>; 122 reg = <0xfec00000 0x400000>;
120 ranges = <01000000 0 0 fe000000 0 00c00000 123 ranges = <0x1000000 0x0 0x0 0xfe000000 0x0 0xc00000
121 02000000 0 80000000 80000000 0 70000000>; 124 0x2000000 0x0 0x80000000 0x80000000 0x0 0x70000000>;
122 bus-range = <0 ff>; 125 bus-range = <0 255>;
123 clock-frequency = <7f28155>; 126 clock-frequency = <133333333>;
124 interrupt-parent = <&mpic>; 127 interrupt-parent = <&mpic>;
125 interrupt-map-mask = <f800 0 0 7>; 128 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
126 interrupt-map = < 129 interrupt-map = <
127 /* IDSEL 11 - IRQ0 ETH */ 130 /* IDSEL 11 - IRQ0 ETH */
128 5800 0 0 1 &mpic 0 1 131 0x5800 0x0 0x0 0x1 &mpic 0x0 0x1
129 5800 0 0 2 &mpic 1 1 132 0x5800 0x0 0x0 0x2 &mpic 0x1 0x1
130 5800 0 0 3 &mpic 2 1 133 0x5800 0x0 0x0 0x3 &mpic 0x2 0x1
131 5800 0 0 4 &mpic 3 1 134 0x5800 0x0 0x0 0x4 &mpic 0x3 0x1
132 /* IDSEL 12 - IRQ1 IDE0 */ 135 /* IDSEL 12 - IRQ1 IDE0 */
133 6000 0 0 1 &mpic 1 1 136 0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
134 6000 0 0 2 &mpic 2 1 137 0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
135 6000 0 0 3 &mpic 3 1 138 0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
136 6000 0 0 4 &mpic 0 1 139 0x6000 0x0 0x0 0x4 &mpic 0x0 0x1
137 /* IDSEL 14 - IRQ3 USB2.0 */ 140 /* IDSEL 14 - IRQ3 USB2.0 */
138 7000 0 0 1 &mpic 3 1 141 0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
139 7000 0 0 2 &mpic 3 1 142 0x7000 0x0 0x0 0x2 &mpic 0x3 0x1
140 7000 0 0 3 &mpic 3 1 143 0x7000 0x0 0x0 0x3 &mpic 0x3 0x1
141 7000 0 0 4 &mpic 3 1 144 0x7000 0x0 0x0 0x4 &mpic 0x3 0x1
142 >; 145 >;
143 }; 146 };
144 }; 147 };
diff --git a/arch/powerpc/boot/dts/makalu.dts b/arch/powerpc/boot/dts/makalu.dts
index 710c01168179..84cc5e72ddd8 100644
--- a/arch/powerpc/boot/dts/makalu.dts
+++ b/arch/powerpc/boot/dts/makalu.dts
@@ -219,7 +219,7 @@
219 mal-tx-channel = <0>; 219 mal-tx-channel = <0>;
220 mal-rx-channel = <0>; 220 mal-rx-channel = <0>;
221 cell-index = <0>; 221 cell-index = <0>;
222 max-frame-size = <5dc>; 222 max-frame-size = <2328>;
223 rx-fifo-size = <1000>; 223 rx-fifo-size = <1000>;
224 tx-fifo-size = <800>; 224 tx-fifo-size = <800>;
225 phy-mode = "rgmii"; 225 phy-mode = "rgmii";
@@ -247,7 +247,7 @@
247 mal-tx-channel = <1>; 247 mal-tx-channel = <1>;
248 mal-rx-channel = <1>; 248 mal-rx-channel = <1>;
249 cell-index = <1>; 249 cell-index = <1>;
250 max-frame-size = <5dc>; 250 max-frame-size = <2328>;
251 rx-fifo-size = <1000>; 251 rx-fifo-size = <1000>;
252 tx-fifo-size = <800>; 252 tx-fifo-size = <800>;
253 phy-mode = "rgmii"; 253 phy-mode = "rgmii";
diff --git a/arch/powerpc/boot/dts/mpc7448hpc2.dts b/arch/powerpc/boot/dts/mpc7448hpc2.dts
index 8fb542387436..4936349b87cd 100644
--- a/arch/powerpc/boot/dts/mpc7448hpc2.dts
+++ b/arch/powerpc/boot/dts/mpc7448hpc2.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC7448HPC2 (Taiga) board Device Tree Source 2 * MPC7448HPC2 (Taiga) board Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 2006 Roy Zang <Roy Zang at freescale.com>. 5 * 2006 Roy Zang <Roy Zang at freescale.com>.
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
@@ -10,6 +10,7 @@
10 * option) any later version. 10 * option) any later version.
11 */ 11 */
12 12
13/dts-v1/;
13 14
14/ { 15/ {
15 model = "mpc7448hpc2"; 16 model = "mpc7448hpc2";
@@ -23,11 +24,11 @@
23 24
24 PowerPC,7448@0 { 25 PowerPC,7448@0 {
25 device_type = "cpu"; 26 device_type = "cpu";
26 reg = <0>; 27 reg = <0x0>;
27 d-cache-line-size = <20>; // 32 bytes 28 d-cache-line-size = <32>; // 32 bytes
28 i-cache-line-size = <20>; // 32 bytes 29 i-cache-line-size = <32>; // 32 bytes
29 d-cache-size = <8000>; // L1, 32K bytes 30 d-cache-size = <0x8000>; // L1, 32K bytes
30 i-cache-size = <8000>; // L1, 32K bytes 31 i-cache-size = <0x8000>; // L1, 32K bytes
31 timebase-frequency = <0>; // 33 MHz, from uboot 32 timebase-frequency = <0>; // 33 MHz, from uboot
32 clock-frequency = <0>; // From U-Boot 33 clock-frequency = <0>; // From U-Boot
33 bus-frequency = <0>; // From U-Boot 34 bus-frequency = <0>; // From U-Boot
@@ -36,7 +37,7 @@
36 37
37 memory { 38 memory {
38 device_type = "memory"; 39 device_type = "memory";
39 reg = <00000000 20000000 // DDR2 512M at 0 40 reg = <0x0 0x20000000 // DDR2 512M at 0
40 >; 41 >;
41 }; 42 };
42 43
@@ -44,14 +45,14 @@
44 #address-cells = <1>; 45 #address-cells = <1>;
45 #size-cells = <1>; 46 #size-cells = <1>;
46 device_type = "tsi-bridge"; 47 device_type = "tsi-bridge";
47 ranges = <00000000 c0000000 00010000>; 48 ranges = <0x0 0xc0000000 0x10000>;
48 reg = <c0000000 00010000>; 49 reg = <0xc0000000 0x10000>;
49 bus-frequency = <0>; 50 bus-frequency = <0>;
50 51
51 i2c@7000 { 52 i2c@7000 {
52 interrupt-parent = <&mpic>; 53 interrupt-parent = <&mpic>;
53 interrupts = <E 0>; 54 interrupts = <14 0>;
54 reg = <7000 400>; 55 reg = <0x7000 0x400>;
55 device_type = "i2c"; 56 device_type = "i2c";
56 compatible = "tsi108-i2c"; 57 compatible = "tsi108-i2c";
57 }; 58 };
@@ -59,20 +60,20 @@
59 MDIO: mdio@6000 { 60 MDIO: mdio@6000 {
60 device_type = "mdio"; 61 device_type = "mdio";
61 compatible = "tsi108-mdio"; 62 compatible = "tsi108-mdio";
62 reg = <6000 50>; 63 reg = <0x6000 0x50>;
63 #address-cells = <1>; 64 #address-cells = <1>;
64 #size-cells = <0>; 65 #size-cells = <0>;
65 66
66 phy8: ethernet-phy@8 { 67 phy8: ethernet-phy@8 {
67 interrupt-parent = <&mpic>; 68 interrupt-parent = <&mpic>;
68 interrupts = <2 1>; 69 interrupts = <2 1>;
69 reg = <8>; 70 reg = <0x8>;
70 }; 71 };
71 72
72 phy9: ethernet-phy@9 { 73 phy9: ethernet-phy@9 {
73 interrupt-parent = <&mpic>; 74 interrupt-parent = <&mpic>;
74 interrupts = <2 1>; 75 interrupts = <2 1>;
75 reg = <9>; 76 reg = <0x9>;
76 }; 77 };
77 78
78 }; 79 };
@@ -82,9 +83,9 @@
82 #size-cells = <0>; 83 #size-cells = <0>;
83 device_type = "network"; 84 device_type = "network";
84 compatible = "tsi108-ethernet"; 85 compatible = "tsi108-ethernet";
85 reg = <6000 200>; 86 reg = <0x6000 0x200>;
86 address = [ 00 06 D2 00 00 01 ]; 87 address = [ 00 06 D2 00 00 01 ];
87 interrupts = <10 2>; 88 interrupts = <16 2>;
88 interrupt-parent = <&mpic>; 89 interrupt-parent = <&mpic>;
89 mdio-handle = <&MDIO>; 90 mdio-handle = <&MDIO>;
90 phy-handle = <&phy8>; 91 phy-handle = <&phy8>;
@@ -96,9 +97,9 @@
96 #size-cells = <0>; 97 #size-cells = <0>;
97 device_type = "network"; 98 device_type = "network";
98 compatible = "tsi108-ethernet"; 99 compatible = "tsi108-ethernet";
99 reg = <6400 200>; 100 reg = <0x6400 0x200>;
100 address = [ 00 06 D2 00 00 02 ]; 101 address = [ 00 06 D2 00 00 02 ];
101 interrupts = <11 2>; 102 interrupts = <17 2>;
102 interrupt-parent = <&mpic>; 103 interrupt-parent = <&mpic>;
103 mdio-handle = <&MDIO>; 104 mdio-handle = <&MDIO>;
104 phy-handle = <&phy9>; 105 phy-handle = <&phy9>;
@@ -107,18 +108,18 @@
107 serial@7808 { 108 serial@7808 {
108 device_type = "serial"; 109 device_type = "serial";
109 compatible = "ns16550"; 110 compatible = "ns16550";
110 reg = <7808 200>; 111 reg = <0x7808 0x200>;
111 clock-frequency = <3f6b5a00>; 112 clock-frequency = <1064000000>;
112 interrupts = <c 0>; 113 interrupts = <12 0>;
113 interrupt-parent = <&mpic>; 114 interrupt-parent = <&mpic>;
114 }; 115 };
115 116
116 serial@7c08 { 117 serial@7c08 {
117 device_type = "serial"; 118 device_type = "serial";
118 compatible = "ns16550"; 119 compatible = "ns16550";
119 reg = <7c08 200>; 120 reg = <0x7c08 0x200>;
120 clock-frequency = <3f6b5a00>; 121 clock-frequency = <1064000000>;
121 interrupts = <d 0>; 122 interrupts = <13 0>;
122 interrupt-parent = <&mpic>; 123 interrupt-parent = <&mpic>;
123 }; 124 };
124 125
@@ -127,7 +128,7 @@
127 interrupt-controller; 128 interrupt-controller;
128 #address-cells = <0>; 129 #address-cells = <0>;
129 #interrupt-cells = <2>; 130 #interrupt-cells = <2>;
130 reg = <7400 400>; 131 reg = <0x7400 0x400>;
131 compatible = "chrp,open-pic"; 132 compatible = "chrp,open-pic";
132 device_type = "open-pic"; 133 device_type = "open-pic";
133 big-endian; 134 big-endian;
@@ -138,39 +139,39 @@
138 #interrupt-cells = <1>; 139 #interrupt-cells = <1>;
139 #size-cells = <2>; 140 #size-cells = <2>;
140 #address-cells = <3>; 141 #address-cells = <3>;
141 reg = <1000 1000>; 142 reg = <0x1000 0x1000>;
142 bus-range = <0 0>; 143 bus-range = <0 0>;
143 ranges = <02000000 0 e0000000 e0000000 0 1A000000 144 ranges = <0x2000000 0x0 0xe0000000 0xe0000000 0x0 0x1a000000
144 01000000 0 00000000 fa000000 0 00010000>; 145 0x1000000 0x0 0x0 0xfa000000 0x0 0x10000>;
145 clock-frequency = <7f28154>; 146 clock-frequency = <133333332>;
146 interrupt-parent = <&mpic>; 147 interrupt-parent = <&mpic>;
147 interrupts = <17 2>; 148 interrupts = <23 2>;
148 interrupt-map-mask = <f800 0 0 7>; 149 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
149 interrupt-map = < 150 interrupt-map = <
150 151
151 /* IDSEL 0x11 */ 152 /* IDSEL 0x11 */
152 0800 0 0 1 &RT0 24 0 153 0x800 0x0 0x0 0x1 &RT0 0x24 0x0
153 0800 0 0 2 &RT0 25 0 154 0x800 0x0 0x0 0x2 &RT0 0x25 0x0
154 0800 0 0 3 &RT0 26 0 155 0x800 0x0 0x0 0x3 &RT0 0x26 0x0
155 0800 0 0 4 &RT0 27 0 156 0x800 0x0 0x0 0x4 &RT0 0x27 0x0
156 157
157 /* IDSEL 0x12 */ 158 /* IDSEL 0x12 */
158 1000 0 0 1 &RT0 25 0 159 0x1000 0x0 0x0 0x1 &RT0 0x25 0x0
159 1000 0 0 2 &RT0 26 0 160 0x1000 0x0 0x0 0x2 &RT0 0x26 0x0
160 1000 0 0 3 &RT0 27 0 161 0x1000 0x0 0x0 0x3 &RT0 0x27 0x0
161 1000 0 0 4 &RT0 24 0 162 0x1000 0x0 0x0 0x4 &RT0 0x24 0x0
162 163
163 /* IDSEL 0x13 */ 164 /* IDSEL 0x13 */
164 1800 0 0 1 &RT0 26 0 165 0x1800 0x0 0x0 0x1 &RT0 0x26 0x0
165 1800 0 0 2 &RT0 27 0 166 0x1800 0x0 0x0 0x2 &RT0 0x27 0x0
166 1800 0 0 3 &RT0 24 0 167 0x1800 0x0 0x0 0x3 &RT0 0x24 0x0
167 1800 0 0 4 &RT0 25 0 168 0x1800 0x0 0x0 0x4 &RT0 0x25 0x0
168 169
169 /* IDSEL 0x14 */ 170 /* IDSEL 0x14 */
170 2000 0 0 1 &RT0 27 0 171 0x2000 0x0 0x0 0x1 &RT0 0x27 0x0
171 2000 0 0 2 &RT0 24 0 172 0x2000 0x0 0x0 0x2 &RT0 0x24 0x0
172 2000 0 0 3 &RT0 25 0 173 0x2000 0x0 0x0 0x3 &RT0 0x25 0x0
173 2000 0 0 4 &RT0 26 0 174 0x2000 0x0 0x0 0x4 &RT0 0x26 0x0
174 >; 175 >;
175 176
176 RT0: router@1180 { 177 RT0: router@1180 {
@@ -180,7 +181,7 @@
180 #address-cells = <0>; 181 #address-cells = <0>;
181 #interrupt-cells = <2>; 182 #interrupt-cells = <2>;
182 big-endian; 183 big-endian;
183 interrupts = <17 2>; 184 interrupts = <23 2>;
184 interrupt-parent = <&mpic>; 185 interrupt-parent = <&mpic>;
185 }; 186 };
186 }; 187 };
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts
index 7285ca1325fd..46e2da30c3dd 100644
--- a/arch/powerpc/boot/dts/mpc8272ads.dts
+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8272 ADS Device Tree Source 2 * MPC8272 ADS Device Tree Source
3 * 3 *
4 * Copyright 2005 Freescale Semiconductor Inc. 4 * Copyright 2005,2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,8 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 model = "MPC8272ADS"; 15 model = "MPC8272ADS";
14 compatible = "fsl,mpc8272ads"; 16 compatible = "fsl,mpc8272ads";
@@ -21,11 +23,11 @@
21 23
22 PowerPC,8272@0 { 24 PowerPC,8272@0 {
23 device_type = "cpu"; 25 device_type = "cpu";
24 reg = <0>; 26 reg = <0x0>;
25 d-cache-line-size = <d#32>; 27 d-cache-line-size = <32>;
26 i-cache-line-size = <d#32>; 28 i-cache-line-size = <32>;
27 d-cache-size = <d#16384>; 29 d-cache-size = <16384>;
28 i-cache-size = <d#16384>; 30 i-cache-size = <16384>;
29 timebase-frequency = <0>; 31 timebase-frequency = <0>;
30 bus-frequency = <0>; 32 bus-frequency = <0>;
31 clock-frequency = <0>; 33 clock-frequency = <0>;
@@ -34,7 +36,7 @@
34 36
35 memory { 37 memory {
36 device_type = "memory"; 38 device_type = "memory";
37 reg = <0 0>; 39 reg = <0x0 0x0>;
38 }; 40 };
39 41
40 localbus@f0010100 { 42 localbus@f0010100 {
@@ -42,21 +44,21 @@
42 "fsl,pq2-localbus"; 44 "fsl,pq2-localbus";
43 #address-cells = <2>; 45 #address-cells = <2>;
44 #size-cells = <1>; 46 #size-cells = <1>;
45 reg = <f0010100 40>; 47 reg = <0xf0010100 0x40>;
46 48
47 ranges = <0 0 fe000000 02000000 49 ranges = <0x0 0x0 0xfe000000 0x2000000
48 1 0 f4500000 00008000 50 0x1 0x0 0xf4500000 0x8000
49 3 0 f8200000 00008000>; 51 0x3 0x0 0xf8200000 0x8000>;
50 52
51 flash@0,0 { 53 flash@0,0 {
52 compatible = "jedec-flash"; 54 compatible = "jedec-flash";
53 reg = <0 0 2000000>; 55 reg = <0x0 0x0 0x2000000>;
54 bank-width = <4>; 56 bank-width = <4>;
55 device-width = <1>; 57 device-width = <1>;
56 }; 58 };
57 59
58 board-control@1,0 { 60 board-control@1,0 {
59 reg = <1 0 20>; 61 reg = <0x1 0x0 0x20>;
60 compatible = "fsl,mpc8272ads-bcsr"; 62 compatible = "fsl,mpc8272ads-bcsr";
61 }; 63 };
62 64
@@ -65,46 +67,46 @@
65 "fsl,pq2ads-pci-pic"; 67 "fsl,pq2ads-pci-pic";
66 #interrupt-cells = <1>; 68 #interrupt-cells = <1>;
67 interrupt-controller; 69 interrupt-controller;
68 reg = <3 0 8>; 70 reg = <0x3 0x0 0x8>;
69 interrupt-parent = <&PIC>; 71 interrupt-parent = <&PIC>;
70 interrupts = <14 8>; 72 interrupts = <20 8>;
71 }; 73 };
72 }; 74 };
73 75
74 76
75 pci@f0010800 { 77 pci@f0010800 {
76 device_type = "pci"; 78 device_type = "pci";
77 reg = <f0010800 10c f00101ac 8 f00101c4 8>; 79 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
78 compatible = "fsl,mpc8272-pci", "fsl,pq2-pci"; 80 compatible = "fsl,mpc8272-pci", "fsl,pq2-pci";
79 #interrupt-cells = <1>; 81 #interrupt-cells = <1>;
80 #size-cells = <2>; 82 #size-cells = <2>;
81 #address-cells = <3>; 83 #address-cells = <3>;
82 clock-frequency = <d#66666666>; 84 clock-frequency = <66666666>;
83 interrupt-map-mask = <f800 0 0 7>; 85 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
84 interrupt-map = < 86 interrupt-map = <
85 /* IDSEL 0x16 */ 87 /* IDSEL 0x16 */
86 b000 0 0 1 &PCI_PIC 0 88 0xb000 0x0 0x0 0x1 &PCI_PIC 0
87 b000 0 0 2 &PCI_PIC 1 89 0xb000 0x0 0x0 0x2 &PCI_PIC 1
88 b000 0 0 3 &PCI_PIC 2 90 0xb000 0x0 0x0 0x3 &PCI_PIC 2
89 b000 0 0 4 &PCI_PIC 3 91 0xb000 0x0 0x0 0x4 &PCI_PIC 3
90 92
91 /* IDSEL 0x17 */ 93 /* IDSEL 0x17 */
92 b800 0 0 1 &PCI_PIC 4 94 0xb800 0x0 0x0 0x1 &PCI_PIC 4
93 b800 0 0 2 &PCI_PIC 5 95 0xb800 0x0 0x0 0x2 &PCI_PIC 5
94 b800 0 0 3 &PCI_PIC 6 96 0xb800 0x0 0x0 0x3 &PCI_PIC 6
95 b800 0 0 4 &PCI_PIC 7 97 0xb800 0x0 0x0 0x4 &PCI_PIC 7
96 98
97 /* IDSEL 0x18 */ 99 /* IDSEL 0x18 */
98 c000 0 0 1 &PCI_PIC 8 100 0xc000 0x0 0x0 0x1 &PCI_PIC 8
99 c000 0 0 2 &PCI_PIC 9 101 0xc000 0x0 0x0 0x2 &PCI_PIC 9
100 c000 0 0 3 &PCI_PIC a 102 0xc000 0x0 0x0 0x3 &PCI_PIC 10
101 c000 0 0 4 &PCI_PIC b>; 103 0xc000 0x0 0x0 0x4 &PCI_PIC 11>;
102 104
103 interrupt-parent = <&PIC>; 105 interrupt-parent = <&PIC>;
104 interrupts = <12 8>; 106 interrupts = <18 8>;
105 ranges = <42000000 0 80000000 80000000 0 20000000 107 ranges = <0x42000000 0x0 0x80000000 0x80000000 0x0 0x20000000
106 02000000 0 a0000000 a0000000 0 20000000 108 0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
107 01000000 0 00000000 f6000000 0 02000000>; 109 0x1000000 0x0 0x0 0xf6000000 0x0 0x2000000>;
108 }; 110 };
109 111
110 soc@f0000000 { 112 soc@f0000000 {
@@ -112,26 +114,26 @@
112 #size-cells = <1>; 114 #size-cells = <1>;
113 device_type = "soc"; 115 device_type = "soc";
114 compatible = "fsl,mpc8272", "fsl,pq2-soc"; 116 compatible = "fsl,mpc8272", "fsl,pq2-soc";
115 ranges = <00000000 f0000000 00053000>; 117 ranges = <0x0 0xf0000000 0x53000>;
116 118
117 // Temporary -- will go away once kernel uses ranges for get_immrbase(). 119 // Temporary -- will go away once kernel uses ranges for get_immrbase().
118 reg = <f0000000 00053000>; 120 reg = <0xf0000000 0x53000>;
119 121
120 cpm@119c0 { 122 cpm@119c0 {
121 #address-cells = <1>; 123 #address-cells = <1>;
122 #size-cells = <1>; 124 #size-cells = <1>;
123 compatible = "fsl,mpc8272-cpm", "fsl,cpm2"; 125 compatible = "fsl,mpc8272-cpm", "fsl,cpm2";
124 reg = <119c0 30>; 126 reg = <0x119c0 0x30>;
125 ranges; 127 ranges;
126 128
127 muram@0 { 129 muram@0 {
128 #address-cells = <1>; 130 #address-cells = <1>;
129 #size-cells = <1>; 131 #size-cells = <1>;
130 ranges = <0 0 10000>; 132 ranges = <0x0 0x0 0x10000>;
131 133
132 data@0 { 134 data@0 {
133 compatible = "fsl,cpm-muram-data"; 135 compatible = "fsl,cpm-muram-data";
134 reg = <0 2000 9800 800>; 136 reg = <0x0 0x2000 0x9800 0x800>;
135 }; 137 };
136 }; 138 };
137 139
@@ -139,29 +141,29 @@
139 compatible = "fsl,mpc8272-brg", 141 compatible = "fsl,mpc8272-brg",
140 "fsl,cpm2-brg", 142 "fsl,cpm2-brg",
141 "fsl,cpm-brg"; 143 "fsl,cpm-brg";
142 reg = <119f0 10 115f0 10>; 144 reg = <0x119f0 0x10 0x115f0 0x10>;
143 }; 145 };
144 146
145 serial@11a00 { 147 serial@11a00 {
146 device_type = "serial"; 148 device_type = "serial";
147 compatible = "fsl,mpc8272-scc-uart", 149 compatible = "fsl,mpc8272-scc-uart",
148 "fsl,cpm2-scc-uart"; 150 "fsl,cpm2-scc-uart";
149 reg = <11a00 20 8000 100>; 151 reg = <0x11a00 0x20 0x8000 0x100>;
150 interrupts = <28 8>; 152 interrupts = <40 8>;
151 interrupt-parent = <&PIC>; 153 interrupt-parent = <&PIC>;
152 fsl,cpm-brg = <1>; 154 fsl,cpm-brg = <1>;
153 fsl,cpm-command = <00800000>; 155 fsl,cpm-command = <0x800000>;
154 }; 156 };
155 157
156 serial@11a60 { 158 serial@11a60 {
157 device_type = "serial"; 159 device_type = "serial";
158 compatible = "fsl,mpc8272-scc-uart", 160 compatible = "fsl,mpc8272-scc-uart",
159 "fsl,cpm2-scc-uart"; 161 "fsl,cpm2-scc-uart";
160 reg = <11a60 20 8300 100>; 162 reg = <0x11a60 0x20 0x8300 0x100>;
161 interrupts = <2b 8>; 163 interrupts = <43 8>;
162 interrupt-parent = <&PIC>; 164 interrupt-parent = <&PIC>;
163 fsl,cpm-brg = <4>; 165 fsl,cpm-brg = <4>;
164 fsl,cpm-command = <0ce00000>; 166 fsl,cpm-command = <0xce00000>;
165 }; 167 };
166 168
167 mdio@10d40 { 169 mdio@10d40 {
@@ -169,23 +171,23 @@
169 compatible = "fsl,mpc8272ads-mdio-bitbang", 171 compatible = "fsl,mpc8272ads-mdio-bitbang",
170 "fsl,mpc8272-mdio-bitbang", 172 "fsl,mpc8272-mdio-bitbang",
171 "fsl,cpm2-mdio-bitbang"; 173 "fsl,cpm2-mdio-bitbang";
172 reg = <10d40 14>; 174 reg = <0x10d40 0x14>;
173 #address-cells = <1>; 175 #address-cells = <1>;
174 #size-cells = <0>; 176 #size-cells = <0>;
175 fsl,mdio-pin = <12>; 177 fsl,mdio-pin = <18>;
176 fsl,mdc-pin = <13>; 178 fsl,mdc-pin = <19>;
177 179
178 PHY0: ethernet-phy@0 { 180 PHY0: ethernet-phy@0 {
179 interrupt-parent = <&PIC>; 181 interrupt-parent = <&PIC>;
180 interrupts = <17 8>; 182 interrupts = <23 8>;
181 reg = <0>; 183 reg = <0x0>;
182 device_type = "ethernet-phy"; 184 device_type = "ethernet-phy";
183 }; 185 };
184 186
185 PHY1: ethernet-phy@1 { 187 PHY1: ethernet-phy@1 {
186 interrupt-parent = <&PIC>; 188 interrupt-parent = <&PIC>;
187 interrupts = <17 8>; 189 interrupts = <23 8>;
188 reg = <3>; 190 reg = <0x3>;
189 device_type = "ethernet-phy"; 191 device_type = "ethernet-phy";
190 }; 192 };
191 }; 193 };
@@ -194,33 +196,33 @@
194 device_type = "network"; 196 device_type = "network";
195 compatible = "fsl,mpc8272-fcc-enet", 197 compatible = "fsl,mpc8272-fcc-enet",
196 "fsl,cpm2-fcc-enet"; 198 "fsl,cpm2-fcc-enet";
197 reg = <11300 20 8400 100 11390 1>; 199 reg = <0x11300 0x20 0x8400 0x100 0x11390 0x1>;
198 local-mac-address = [ 00 00 00 00 00 00 ]; 200 local-mac-address = [ 00 00 00 00 00 00 ];
199 interrupts = <20 8>; 201 interrupts = <32 8>;
200 interrupt-parent = <&PIC>; 202 interrupt-parent = <&PIC>;
201 phy-handle = <&PHY0>; 203 phy-handle = <&PHY0>;
202 linux,network-index = <0>; 204 linux,network-index = <0>;
203 fsl,cpm-command = <12000300>; 205 fsl,cpm-command = <0x12000300>;
204 }; 206 };
205 207
206 ethernet@11320 { 208 ethernet@11320 {
207 device_type = "network"; 209 device_type = "network";
208 compatible = "fsl,mpc8272-fcc-enet", 210 compatible = "fsl,mpc8272-fcc-enet",
209 "fsl,cpm2-fcc-enet"; 211 "fsl,cpm2-fcc-enet";
210 reg = <11320 20 8500 100 113b0 1>; 212 reg = <0x11320 0x20 0x8500 0x100 0x113b0 0x1>;
211 local-mac-address = [ 00 00 00 00 00 00 ]; 213 local-mac-address = [ 00 00 00 00 00 00 ];
212 interrupts = <21 8>; 214 interrupts = <33 8>;
213 interrupt-parent = <&PIC>; 215 interrupt-parent = <&PIC>;
214 phy-handle = <&PHY1>; 216 phy-handle = <&PHY1>;
215 linux,network-index = <1>; 217 linux,network-index = <1>;
216 fsl,cpm-command = <16200300>; 218 fsl,cpm-command = <0x16200300>;
217 }; 219 };
218 }; 220 };
219 221
220 PIC: interrupt-controller@10c00 { 222 PIC: interrupt-controller@10c00 {
221 #interrupt-cells = <2>; 223 #interrupt-cells = <2>;
222 interrupt-controller; 224 interrupt-controller;
223 reg = <10c00 80>; 225 reg = <0x10c00 0x80>;
224 compatible = "fsl,mpc8272-pic", "fsl,cpm2-pic"; 226 compatible = "fsl,mpc8272-pic", "fsl,cpm2-pic";
225 }; 227 };
226 228
@@ -232,14 +234,14 @@
232 "fsl,talitos-sec2", 234 "fsl,talitos-sec2",
233 "fsl,talitos", 235 "fsl,talitos",
234 "talitos"; 236 "talitos";
235 reg = <30000 10000>; 237 reg = <0x30000 0x10000>;
236 interrupts = <b 8>; 238 interrupts = <11 8>;
237 interrupt-parent = <&PIC>; 239 interrupt-parent = <&PIC>;
238 num-channels = <4>; 240 num-channels = <4>;
239 channel-fifo-len = <18>; 241 channel-fifo-len = <24>;
240 exec-units-mask = <0000007e>; 242 exec-units-mask = <0x7e>;
241/* desc mask is for rev1.x, we need runtime fixup for >=2.x */ 243/* desc mask is for rev1.x, we need runtime fixup for >=2.x */
242 descriptor-types-mask = <01010ebf>; 244 descriptor-types-mask = <0x1010ebf>;
243 }; 245 };
244 }; 246 };
245 247
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index 9bb408371bcd..539e02fb3526 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -255,9 +255,7 @@
255 enet0: ucc@2200 { 255 enet0: ucc@2200 {
256 device_type = "network"; 256 device_type = "network";
257 compatible = "ucc_geth"; 257 compatible = "ucc_geth";
258 model = "UCC";
259 cell-index = <3>; 258 cell-index = <3>;
260 device-id = <3>;
261 reg = <0x2200 0x200>; 259 reg = <0x2200 0x200>;
262 interrupts = <34>; 260 interrupts = <34>;
263 interrupt-parent = <&qeic>; 261 interrupt-parent = <&qeic>;
@@ -271,9 +269,7 @@
271 enet1: ucc@3200 { 269 enet1: ucc@3200 {
272 device_type = "network"; 270 device_type = "network";
273 compatible = "ucc_geth"; 271 compatible = "ucc_geth";
274 model = "UCC";
275 cell-index = <4>; 272 cell-index = <4>;
276 device-id = <4>;
277 reg = <0x3200 0x200>; 273 reg = <0x3200 0x200>;
278 interrupts = <35>; 274 interrupts = <35>;
279 interrupt-parent = <&qeic>; 275 interrupt-parent = <&qeic>;
@@ -287,8 +283,7 @@
287 ucc@2400 { 283 ucc@2400 {
288 device_type = "serial"; 284 device_type = "serial";
289 compatible = "ucc_uart"; 285 compatible = "ucc_uart";
290 model = "UCC"; 286 cell-index = <5>; /* The UCC number, 1-7*/
291 device-id = <5>; /* The UCC number, 1-7*/
292 port-number = <0>; /* Which ttyQEx device */ 287 port-number = <0>; /* Which ttyQEx device */
293 soft-uart; /* We need Soft-UART */ 288 soft-uart; /* We need Soft-UART */
294 reg = <0x2400 0x200>; 289 reg = <0x2400 0x200>;
diff --git a/arch/powerpc/boot/dts/mpc832x_rdb.dts b/arch/powerpc/boot/dts/mpc832x_rdb.dts
index 94f93d209de8..179c81c6a7ac 100644
--- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
@@ -208,9 +208,7 @@
208 enet0: ucc@3000 { 208 enet0: ucc@3000 {
209 device_type = "network"; 209 device_type = "network";
210 compatible = "ucc_geth"; 210 compatible = "ucc_geth";
211 model = "UCC";
212 cell-index = <2>; 211 cell-index = <2>;
213 device-id = <2>;
214 reg = <0x3000 0x200>; 212 reg = <0x3000 0x200>;
215 interrupts = <33>; 213 interrupts = <33>;
216 interrupt-parent = <&qeic>; 214 interrupt-parent = <&qeic>;
@@ -224,9 +222,7 @@
224 enet1: ucc@2200 { 222 enet1: ucc@2200 {
225 device_type = "network"; 223 device_type = "network";
226 compatible = "ucc_geth"; 224 compatible = "ucc_geth";
227 model = "UCC";
228 cell-index = <3>; 225 cell-index = <3>;
229 device-id = <3>;
230 reg = <0x2200 0x200>; 226 reg = <0x2200 0x200>;
231 interrupts = <34>; 227 interrupts = <34>;
232 interrupt-parent = <&qeic>; 228 interrupt-parent = <&qeic>;
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index 55f03e8dc97f..8160ff24e87e 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -257,9 +257,7 @@
257 enet0: ucc@2000 { 257 enet0: ucc@2000 {
258 device_type = "network"; 258 device_type = "network";
259 compatible = "ucc_geth"; 259 compatible = "ucc_geth";
260 model = "UCC";
261 cell-index = <1>; 260 cell-index = <1>;
262 device-id = <1>;
263 reg = <0x2000 0x200>; 261 reg = <0x2000 0x200>;
264 interrupts = <32>; 262 interrupts = <32>;
265 interrupt-parent = <&qeic>; 263 interrupt-parent = <&qeic>;
@@ -274,9 +272,7 @@
274 enet1: ucc@3000 { 272 enet1: ucc@3000 {
275 device_type = "network"; 273 device_type = "network";
276 compatible = "ucc_geth"; 274 compatible = "ucc_geth";
277 model = "UCC";
278 cell-index = <2>; 275 cell-index = <2>;
279 device-id = <2>;
280 reg = <0x3000 0x200>; 276 reg = <0x3000 0x200>;
281 interrupts = <33>; 277 interrupts = <33>;
282 interrupt-parent = <&qeic>; 278 interrupt-parent = <&qeic>;
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts
index 975248491b7b..18033ed0b535 100644
--- a/arch/powerpc/boot/dts/mpc8540ads.dts
+++ b/arch/powerpc/boot/dts/mpc8540ads.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8540 ADS Device Tree Source 2 * MPC8540 ADS Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12 13
13/ { 14/ {
14 model = "MPC8540ADS"; 15 model = "MPC8540ADS";
@@ -31,11 +32,11 @@
31 32
32 PowerPC,8540@0 { 33 PowerPC,8540@0 {
33 device_type = "cpu"; 34 device_type = "cpu";
34 reg = <0>; 35 reg = <0x0>;
35 d-cache-line-size = <20>; // 32 bytes 36 d-cache-line-size = <32>; // 32 bytes
36 i-cache-line-size = <20>; // 32 bytes 37 i-cache-line-size = <32>; // 32 bytes
37 d-cache-size = <8000>; // L1, 32K 38 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <8000>; // L1, 32K 39 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
40 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
41 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
@@ -44,31 +45,31 @@
44 45
45 memory { 46 memory {
46 device_type = "memory"; 47 device_type = "memory";
47 reg = <00000000 08000000>; // 128M at 0x0 48 reg = <0x0 0x8000000>; // 128M at 0x0
48 }; 49 };
49 50
50 soc8540@e0000000 { 51 soc8540@e0000000 {
51 #address-cells = <1>; 52 #address-cells = <1>;
52 #size-cells = <1>; 53 #size-cells = <1>;
53 device_type = "soc"; 54 device_type = "soc";
54 ranges = <0 e0000000 00100000>; 55 ranges = <0x0 0xe0000000 0x100000>;
55 reg = <e0000000 00100000>; // CCSRBAR 1M 56 reg = <0xe0000000 0x100000>; // CCSRBAR 1M
56 bus-frequency = <0>; 57 bus-frequency = <0>;
57 58
58 memory-controller@2000 { 59 memory-controller@2000 {
59 compatible = "fsl,8540-memory-controller"; 60 compatible = "fsl,8540-memory-controller";
60 reg = <2000 1000>; 61 reg = <0x2000 0x1000>;
61 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
62 interrupts = <12 2>; 63 interrupts = <18 2>;
63 }; 64 };
64 65
65 l2-cache-controller@20000 { 66 l2-cache-controller@20000 {
66 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,8540-l2-cache-controller";
67 reg = <20000 1000>; 68 reg = <0x20000 0x1000>;
68 cache-line-size = <20>; // 32 bytes 69 cache-line-size = <32>; // 32 bytes
69 cache-size = <40000>; // L2, 256K 70 cache-size = <0x40000>; // L2, 256K
70 interrupt-parent = <&mpic>; 71 interrupt-parent = <&mpic>;
71 interrupts = <10 2>; 72 interrupts = <16 2>;
72 }; 73 };
73 74
74 i2c@3000 { 75 i2c@3000 {
@@ -76,8 +77,8 @@
76 #size-cells = <0>; 77 #size-cells = <0>;
77 cell-index = <0>; 78 cell-index = <0>;
78 compatible = "fsl-i2c"; 79 compatible = "fsl-i2c";
79 reg = <3000 100>; 80 reg = <0x3000 0x100>;
80 interrupts = <2b 2>; 81 interrupts = <43 2>;
81 interrupt-parent = <&mpic>; 82 interrupt-parent = <&mpic>;
82 dfsrr; 83 dfsrr;
83 }; 84 };
@@ -86,24 +87,24 @@
86 #address-cells = <1>; 87 #address-cells = <1>;
87 #size-cells = <0>; 88 #size-cells = <0>;
88 compatible = "fsl,gianfar-mdio"; 89 compatible = "fsl,gianfar-mdio";
89 reg = <24520 20>; 90 reg = <0x24520 0x20>;
90 91
91 phy0: ethernet-phy@0 { 92 phy0: ethernet-phy@0 {
92 interrupt-parent = <&mpic>; 93 interrupt-parent = <&mpic>;
93 interrupts = <5 1>; 94 interrupts = <5 1>;
94 reg = <0>; 95 reg = <0x0>;
95 device_type = "ethernet-phy"; 96 device_type = "ethernet-phy";
96 }; 97 };
97 phy1: ethernet-phy@1 { 98 phy1: ethernet-phy@1 {
98 interrupt-parent = <&mpic>; 99 interrupt-parent = <&mpic>;
99 interrupts = <5 1>; 100 interrupts = <5 1>;
100 reg = <1>; 101 reg = <0x1>;
101 device_type = "ethernet-phy"; 102 device_type = "ethernet-phy";
102 }; 103 };
103 phy3: ethernet-phy@3 { 104 phy3: ethernet-phy@3 {
104 interrupt-parent = <&mpic>; 105 interrupt-parent = <&mpic>;
105 interrupts = <7 1>; 106 interrupts = <7 1>;
106 reg = <3>; 107 reg = <0x3>;
107 device_type = "ethernet-phy"; 108 device_type = "ethernet-phy";
108 }; 109 };
109 }; 110 };
@@ -113,9 +114,9 @@
113 device_type = "network"; 114 device_type = "network";
114 model = "TSEC"; 115 model = "TSEC";
115 compatible = "gianfar"; 116 compatible = "gianfar";
116 reg = <24000 1000>; 117 reg = <0x24000 0x1000>;
117 local-mac-address = [ 00 00 00 00 00 00 ]; 118 local-mac-address = [ 00 00 00 00 00 00 ];
118 interrupts = <1d 2 1e 2 22 2>; 119 interrupts = <29 2 30 2 34 2>;
119 interrupt-parent = <&mpic>; 120 interrupt-parent = <&mpic>;
120 phy-handle = <&phy0>; 121 phy-handle = <&phy0>;
121 }; 122 };
@@ -125,9 +126,9 @@
125 device_type = "network"; 126 device_type = "network";
126 model = "TSEC"; 127 model = "TSEC";
127 compatible = "gianfar"; 128 compatible = "gianfar";
128 reg = <25000 1000>; 129 reg = <0x25000 0x1000>;
129 local-mac-address = [ 00 00 00 00 00 00 ]; 130 local-mac-address = [ 00 00 00 00 00 00 ];
130 interrupts = <23 2 24 2 28 2>; 131 interrupts = <35 2 36 2 40 2>;
131 interrupt-parent = <&mpic>; 132 interrupt-parent = <&mpic>;
132 phy-handle = <&phy1>; 133 phy-handle = <&phy1>;
133 }; 134 };
@@ -137,9 +138,9 @@
137 device_type = "network"; 138 device_type = "network";
138 model = "FEC"; 139 model = "FEC";
139 compatible = "gianfar"; 140 compatible = "gianfar";
140 reg = <26000 1000>; 141 reg = <0x26000 0x1000>;
141 local-mac-address = [ 00 00 00 00 00 00 ]; 142 local-mac-address = [ 00 00 00 00 00 00 ];
142 interrupts = <29 2>; 143 interrupts = <41 2>;
143 interrupt-parent = <&mpic>; 144 interrupt-parent = <&mpic>;
144 phy-handle = <&phy3>; 145 phy-handle = <&phy3>;
145 }; 146 };
@@ -148,9 +149,9 @@
148 cell-index = <0>; 149 cell-index = <0>;
149 device_type = "serial"; 150 device_type = "serial";
150 compatible = "ns16550"; 151 compatible = "ns16550";
151 reg = <4500 100>; // reg base, size 152 reg = <0x4500 0x100>; // reg base, size
152 clock-frequency = <0>; // should we fill in in uboot? 153 clock-frequency = <0>; // should we fill in in uboot?
153 interrupts = <2a 2>; 154 interrupts = <42 2>;
154 interrupt-parent = <&mpic>; 155 interrupt-parent = <&mpic>;
155 }; 156 };
156 157
@@ -158,9 +159,9 @@
158 cell-index = <1>; 159 cell-index = <1>;
159 device_type = "serial"; 160 device_type = "serial";
160 compatible = "ns16550"; 161 compatible = "ns16550";
161 reg = <4600 100>; // reg base, size 162 reg = <0x4600 0x100>; // reg base, size
162 clock-frequency = <0>; // should we fill in in uboot? 163 clock-frequency = <0>; // should we fill in in uboot?
163 interrupts = <2a 2>; 164 interrupts = <42 2>;
164 interrupt-parent = <&mpic>; 165 interrupt-parent = <&mpic>;
165 }; 166 };
166 mpic: pic@40000 { 167 mpic: pic@40000 {
@@ -168,7 +169,7 @@
168 interrupt-controller; 169 interrupt-controller;
169 #address-cells = <0>; 170 #address-cells = <0>;
170 #interrupt-cells = <2>; 171 #interrupt-cells = <2>;
171 reg = <40000 40000>; 172 reg = <0x40000 0x40000>;
172 compatible = "chrp,open-pic"; 173 compatible = "chrp,open-pic";
173 device_type = "open-pic"; 174 device_type = "open-pic";
174 big-endian; 175 big-endian;
@@ -177,90 +178,90 @@
177 178
178 pci0: pci@e0008000 { 179 pci0: pci@e0008000 {
179 cell-index = <0>; 180 cell-index = <0>;
180 interrupt-map-mask = <f800 0 0 7>; 181 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
181 interrupt-map = < 182 interrupt-map = <
182 183
183 /* IDSEL 0x02 */ 184 /* IDSEL 0x02 */
184 1000 0 0 1 &mpic 1 1 185 0x1000 0x0 0x0 0x1 &mpic 0x1 0x1
185 1000 0 0 2 &mpic 2 1 186 0x1000 0x0 0x0 0x2 &mpic 0x2 0x1
186 1000 0 0 3 &mpic 3 1 187 0x1000 0x0 0x0 0x3 &mpic 0x3 0x1
187 1000 0 0 4 &mpic 4 1 188 0x1000 0x0 0x0 0x4 &mpic 0x4 0x1
188 189
189 /* IDSEL 0x03 */ 190 /* IDSEL 0x03 */
190 1800 0 0 1 &mpic 4 1 191 0x1800 0x0 0x0 0x1 &mpic 0x4 0x1
191 1800 0 0 2 &mpic 1 1 192 0x1800 0x0 0x0 0x2 &mpic 0x1 0x1
192 1800 0 0 3 &mpic 2 1 193 0x1800 0x0 0x0 0x3 &mpic 0x2 0x1
193 1800 0 0 4 &mpic 3 1 194 0x1800 0x0 0x0 0x4 &mpic 0x3 0x1
194 195
195 /* IDSEL 0x04 */ 196 /* IDSEL 0x04 */
196 2000 0 0 1 &mpic 3 1 197 0x2000 0x0 0x0 0x1 &mpic 0x3 0x1
197 2000 0 0 2 &mpic 4 1 198 0x2000 0x0 0x0 0x2 &mpic 0x4 0x1
198 2000 0 0 3 &mpic 1 1 199 0x2000 0x0 0x0 0x3 &mpic 0x1 0x1
199 2000 0 0 4 &mpic 2 1 200 0x2000 0x0 0x0 0x4 &mpic 0x2 0x1
200 201
201 /* IDSEL 0x05 */ 202 /* IDSEL 0x05 */
202 2800 0 0 1 &mpic 2 1 203 0x2800 0x0 0x0 0x1 &mpic 0x2 0x1
203 2800 0 0 2 &mpic 3 1 204 0x2800 0x0 0x0 0x2 &mpic 0x3 0x1
204 2800 0 0 3 &mpic 4 1 205 0x2800 0x0 0x0 0x3 &mpic 0x4 0x1
205 2800 0 0 4 &mpic 1 1 206 0x2800 0x0 0x0 0x4 &mpic 0x1 0x1
206 207
207 /* IDSEL 0x0c */ 208 /* IDSEL 0x0c */
208 6000 0 0 1 &mpic 1 1 209 0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
209 6000 0 0 2 &mpic 2 1 210 0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
210 6000 0 0 3 &mpic 3 1 211 0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
211 6000 0 0 4 &mpic 4 1 212 0x6000 0x0 0x0 0x4 &mpic 0x4 0x1
212 213
213 /* IDSEL 0x0d */ 214 /* IDSEL 0x0d */
214 6800 0 0 1 &mpic 4 1 215 0x6800 0x0 0x0 0x1 &mpic 0x4 0x1
215 6800 0 0 2 &mpic 1 1 216 0x6800 0x0 0x0 0x2 &mpic 0x1 0x1
216 6800 0 0 3 &mpic 2 1 217 0x6800 0x0 0x0 0x3 &mpic 0x2 0x1
217 6800 0 0 4 &mpic 3 1 218 0x6800 0x0 0x0 0x4 &mpic 0x3 0x1
218 219
219 /* IDSEL 0x0e */ 220 /* IDSEL 0x0e */
220 7000 0 0 1 &mpic 3 1 221 0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
221 7000 0 0 2 &mpic 4 1 222 0x7000 0x0 0x0 0x2 &mpic 0x4 0x1
222 7000 0 0 3 &mpic 1 1 223 0x7000 0x0 0x0 0x3 &mpic 0x1 0x1
223 7000 0 0 4 &mpic 2 1 224 0x7000 0x0 0x0 0x4 &mpic 0x2 0x1
224 225
225 /* IDSEL 0x0f */ 226 /* IDSEL 0x0f */
226 7800 0 0 1 &mpic 2 1 227 0x7800 0x0 0x0 0x1 &mpic 0x2 0x1
227 7800 0 0 2 &mpic 3 1 228 0x7800 0x0 0x0 0x2 &mpic 0x3 0x1
228 7800 0 0 3 &mpic 4 1 229 0x7800 0x0 0x0 0x3 &mpic 0x4 0x1
229 7800 0 0 4 &mpic 1 1 230 0x7800 0x0 0x0 0x4 &mpic 0x1 0x1
230 231
231 /* IDSEL 0x12 */ 232 /* IDSEL 0x12 */
232 9000 0 0 1 &mpic 1 1 233 0x9000 0x0 0x0 0x1 &mpic 0x1 0x1
233 9000 0 0 2 &mpic 2 1 234 0x9000 0x0 0x0 0x2 &mpic 0x2 0x1
234 9000 0 0 3 &mpic 3 1 235 0x9000 0x0 0x0 0x3 &mpic 0x3 0x1
235 9000 0 0 4 &mpic 4 1 236 0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
236 237
237 /* IDSEL 0x13 */ 238 /* IDSEL 0x13 */
238 9800 0 0 1 &mpic 4 1 239 0x9800 0x0 0x0 0x1 &mpic 0x4 0x1
239 9800 0 0 2 &mpic 1 1 240 0x9800 0x0 0x0 0x2 &mpic 0x1 0x1
240 9800 0 0 3 &mpic 2 1 241 0x9800 0x0 0x0 0x3 &mpic 0x2 0x1
241 9800 0 0 4 &mpic 3 1 242 0x9800 0x0 0x0 0x4 &mpic 0x3 0x1
242 243
243 /* IDSEL 0x14 */ 244 /* IDSEL 0x14 */
244 a000 0 0 1 &mpic 3 1 245 0xa000 0x0 0x0 0x1 &mpic 0x3 0x1
245 a000 0 0 2 &mpic 4 1 246 0xa000 0x0 0x0 0x2 &mpic 0x4 0x1
246 a000 0 0 3 &mpic 1 1 247 0xa000 0x0 0x0 0x3 &mpic 0x1 0x1
247 a000 0 0 4 &mpic 2 1 248 0xa000 0x0 0x0 0x4 &mpic 0x2 0x1
248 249
249 /* IDSEL 0x15 */ 250 /* IDSEL 0x15 */
250 a800 0 0 1 &mpic 2 1 251 0xa800 0x0 0x0 0x1 &mpic 0x2 0x1
251 a800 0 0 2 &mpic 3 1 252 0xa800 0x0 0x0 0x2 &mpic 0x3 0x1
252 a800 0 0 3 &mpic 4 1 253 0xa800 0x0 0x0 0x3 &mpic 0x4 0x1
253 a800 0 0 4 &mpic 1 1>; 254 0xa800 0x0 0x0 0x4 &mpic 0x1 0x1>;
254 interrupt-parent = <&mpic>; 255 interrupt-parent = <&mpic>;
255 interrupts = <18 2>; 256 interrupts = <24 2>;
256 bus-range = <0 0>; 257 bus-range = <0 0>;
257 ranges = <02000000 0 80000000 80000000 0 20000000 258 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
258 01000000 0 00000000 e2000000 0 00100000>; 259 0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
259 clock-frequency = <3f940aa>; 260 clock-frequency = <66666666>;
260 #interrupt-cells = <1>; 261 #interrupt-cells = <1>;
261 #size-cells = <2>; 262 #size-cells = <2>;
262 #address-cells = <3>; 263 #address-cells = <3>;
263 reg = <e0008000 1000>; 264 reg = <0xe0008000 0x1000>;
264 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci"; 265 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
265 device_type = "pci"; 266 device_type = "pci";
266 }; 267 };
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts
index fa8d9aaad157..663c7c50ca45 100644
--- a/arch/powerpc/boot/dts/mpc8541cds.dts
+++ b/arch/powerpc/boot/dts/mpc8541cds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8541 CDS Device Tree Source 2 * MPC8541 CDS Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12 13
13/ { 14/ {
14 model = "MPC8541CDS"; 15 model = "MPC8541CDS";
@@ -31,11 +32,11 @@
31 32
32 PowerPC,8541@0 { 33 PowerPC,8541@0 {
33 device_type = "cpu"; 34 device_type = "cpu";
34 reg = <0>; 35 reg = <0x0>;
35 d-cache-line-size = <20>; // 32 bytes 36 d-cache-line-size = <32>; // 32 bytes
36 i-cache-line-size = <20>; // 32 bytes 37 i-cache-line-size = <32>; // 32 bytes
37 d-cache-size = <8000>; // L1, 32K 38 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <8000>; // L1, 32K 39 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
40 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
41 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
@@ -44,31 +45,31 @@
44 45
45 memory { 46 memory {
46 device_type = "memory"; 47 device_type = "memory";
47 reg = <00000000 08000000>; // 128M at 0x0 48 reg = <0x0 0x8000000>; // 128M at 0x0
48 }; 49 };
49 50
50 soc8541@e0000000 { 51 soc8541@e0000000 {
51 #address-cells = <1>; 52 #address-cells = <1>;
52 #size-cells = <1>; 53 #size-cells = <1>;
53 device_type = "soc"; 54 device_type = "soc";
54 ranges = <0 e0000000 00100000>; 55 ranges = <0x0 0xe0000000 0x100000>;
55 reg = <e0000000 00001000>; // CCSRBAR 1M 56 reg = <0xe0000000 0x1000>; // CCSRBAR 1M
56 bus-frequency = <0>; 57 bus-frequency = <0>;
57 58
58 memory-controller@2000 { 59 memory-controller@2000 {
59 compatible = "fsl,8541-memory-controller"; 60 compatible = "fsl,8541-memory-controller";
60 reg = <2000 1000>; 61 reg = <0x2000 0x1000>;
61 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
62 interrupts = <12 2>; 63 interrupts = <18 2>;
63 }; 64 };
64 65
65 l2-cache-controller@20000 { 66 l2-cache-controller@20000 {
66 compatible = "fsl,8541-l2-cache-controller"; 67 compatible = "fsl,8541-l2-cache-controller";
67 reg = <20000 1000>; 68 reg = <0x20000 0x1000>;
68 cache-line-size = <20>; // 32 bytes 69 cache-line-size = <32>; // 32 bytes
69 cache-size = <40000>; // L2, 256K 70 cache-size = <0x40000>; // L2, 256K
70 interrupt-parent = <&mpic>; 71 interrupt-parent = <&mpic>;
71 interrupts = <10 2>; 72 interrupts = <16 2>;
72 }; 73 };
73 74
74 i2c@3000 { 75 i2c@3000 {
@@ -76,8 +77,8 @@
76 #size-cells = <0>; 77 #size-cells = <0>;
77 cell-index = <0>; 78 cell-index = <0>;
78 compatible = "fsl-i2c"; 79 compatible = "fsl-i2c";
79 reg = <3000 100>; 80 reg = <0x3000 0x100>;
80 interrupts = <2b 2>; 81 interrupts = <43 2>;
81 interrupt-parent = <&mpic>; 82 interrupt-parent = <&mpic>;
82 dfsrr; 83 dfsrr;
83 }; 84 };
@@ -86,18 +87,18 @@
86 #address-cells = <1>; 87 #address-cells = <1>;
87 #size-cells = <0>; 88 #size-cells = <0>;
88 compatible = "fsl,gianfar-mdio"; 89 compatible = "fsl,gianfar-mdio";
89 reg = <24520 20>; 90 reg = <0x24520 0x20>;
90 91
91 phy0: ethernet-phy@0 { 92 phy0: ethernet-phy@0 {
92 interrupt-parent = <&mpic>; 93 interrupt-parent = <&mpic>;
93 interrupts = <5 1>; 94 interrupts = <5 1>;
94 reg = <0>; 95 reg = <0x0>;
95 device_type = "ethernet-phy"; 96 device_type = "ethernet-phy";
96 }; 97 };
97 phy1: ethernet-phy@1 { 98 phy1: ethernet-phy@1 {
98 interrupt-parent = <&mpic>; 99 interrupt-parent = <&mpic>;
99 interrupts = <5 1>; 100 interrupts = <5 1>;
100 reg = <1>; 101 reg = <0x1>;
101 device_type = "ethernet-phy"; 102 device_type = "ethernet-phy";
102 }; 103 };
103 }; 104 };
@@ -107,9 +108,9 @@
107 device_type = "network"; 108 device_type = "network";
108 model = "TSEC"; 109 model = "TSEC";
109 compatible = "gianfar"; 110 compatible = "gianfar";
110 reg = <24000 1000>; 111 reg = <0x24000 0x1000>;
111 local-mac-address = [ 00 00 00 00 00 00 ]; 112 local-mac-address = [ 00 00 00 00 00 00 ];
112 interrupts = <1d 2 1e 2 22 2>; 113 interrupts = <29 2 30 2 34 2>;
113 interrupt-parent = <&mpic>; 114 interrupt-parent = <&mpic>;
114 phy-handle = <&phy0>; 115 phy-handle = <&phy0>;
115 }; 116 };
@@ -119,9 +120,9 @@
119 device_type = "network"; 120 device_type = "network";
120 model = "TSEC"; 121 model = "TSEC";
121 compatible = "gianfar"; 122 compatible = "gianfar";
122 reg = <25000 1000>; 123 reg = <0x25000 0x1000>;
123 local-mac-address = [ 00 00 00 00 00 00 ]; 124 local-mac-address = [ 00 00 00 00 00 00 ];
124 interrupts = <23 2 24 2 28 2>; 125 interrupts = <35 2 36 2 40 2>;
125 interrupt-parent = <&mpic>; 126 interrupt-parent = <&mpic>;
126 phy-handle = <&phy1>; 127 phy-handle = <&phy1>;
127 }; 128 };
@@ -130,9 +131,9 @@
130 cell-index = <0>; 131 cell-index = <0>;
131 device_type = "serial"; 132 device_type = "serial";
132 compatible = "ns16550"; 133 compatible = "ns16550";
133 reg = <4500 100>; // reg base, size 134 reg = <0x4500 0x100>; // reg base, size
134 clock-frequency = <0>; // should we fill in in uboot? 135 clock-frequency = <0>; // should we fill in in uboot?
135 interrupts = <2a 2>; 136 interrupts = <42 2>;
136 interrupt-parent = <&mpic>; 137 interrupt-parent = <&mpic>;
137 }; 138 };
138 139
@@ -140,9 +141,9 @@
140 cell-index = <1>; 141 cell-index = <1>;
141 device_type = "serial"; 142 device_type = "serial";
142 compatible = "ns16550"; 143 compatible = "ns16550";
143 reg = <4600 100>; // reg base, size 144 reg = <0x4600 0x100>; // reg base, size
144 clock-frequency = <0>; // should we fill in in uboot? 145 clock-frequency = <0>; // should we fill in in uboot?
145 interrupts = <2a 2>; 146 interrupts = <42 2>;
146 interrupt-parent = <&mpic>; 147 interrupt-parent = <&mpic>;
147 }; 148 };
148 149
@@ -151,7 +152,7 @@
151 interrupt-controller; 152 interrupt-controller;
152 #address-cells = <0>; 153 #address-cells = <0>;
153 #interrupt-cells = <2>; 154 #interrupt-cells = <2>;
154 reg = <40000 40000>; 155 reg = <0x40000 0x40000>;
155 compatible = "chrp,open-pic"; 156 compatible = "chrp,open-pic";
156 device_type = "open-pic"; 157 device_type = "open-pic";
157 big-endian; 158 big-endian;
@@ -161,17 +162,17 @@
161 #address-cells = <1>; 162 #address-cells = <1>;
162 #size-cells = <1>; 163 #size-cells = <1>;
163 compatible = "fsl,mpc8541-cpm", "fsl,cpm2"; 164 compatible = "fsl,mpc8541-cpm", "fsl,cpm2";
164 reg = <919c0 30>; 165 reg = <0x919c0 0x30>;
165 ranges; 166 ranges;
166 167
167 muram@80000 { 168 muram@80000 {
168 #address-cells = <1>; 169 #address-cells = <1>;
169 #size-cells = <1>; 170 #size-cells = <1>;
170 ranges = <0 80000 10000>; 171 ranges = <0x0 0x80000 0x10000>;
171 172
172 data@0 { 173 data@0 {
173 compatible = "fsl,cpm-muram-data"; 174 compatible = "fsl,cpm-muram-data";
174 reg = <0 2000 9000 1000>; 175 reg = <0x0 0x2000 0x9000 0x1000>;
175 }; 176 };
176 }; 177 };
177 178
@@ -179,16 +180,16 @@
179 compatible = "fsl,mpc8541-brg", 180 compatible = "fsl,mpc8541-brg",
180 "fsl,cpm2-brg", 181 "fsl,cpm2-brg",
181 "fsl,cpm-brg"; 182 "fsl,cpm-brg";
182 reg = <919f0 10 915f0 10>; 183 reg = <0x919f0 0x10 0x915f0 0x10>;
183 }; 184 };
184 185
185 cpmpic: pic@90c00 { 186 cpmpic: pic@90c00 {
186 interrupt-controller; 187 interrupt-controller;
187 #address-cells = <0>; 188 #address-cells = <0>;
188 #interrupt-cells = <2>; 189 #interrupt-cells = <2>;
189 interrupts = <2e 2>; 190 interrupts = <46 2>;
190 interrupt-parent = <&mpic>; 191 interrupt-parent = <&mpic>;
191 reg = <90c00 80>; 192 reg = <0x90c00 0x80>;
192 compatible = "fsl,mpc8541-cpm-pic", "fsl,cpm2-pic"; 193 compatible = "fsl,mpc8541-cpm-pic", "fsl,cpm2-pic";
193 }; 194 };
194 }; 195 };
@@ -196,68 +197,68 @@
196 197
197 pci0: pci@e0008000 { 198 pci0: pci@e0008000 {
198 cell-index = <0>; 199 cell-index = <0>;
199 interrupt-map-mask = <1f800 0 0 7>; 200 interrupt-map-mask = <0x1f800 0x0 0x0 0x7>;
200 interrupt-map = < 201 interrupt-map = <
201 202
202 /* IDSEL 0x10 */ 203 /* IDSEL 0x10 */
203 08000 0 0 1 &mpic 0 1 204 0x8000 0x0 0x0 0x1 &mpic 0x0 0x1
204 08000 0 0 2 &mpic 1 1 205 0x8000 0x0 0x0 0x2 &mpic 0x1 0x1
205 08000 0 0 3 &mpic 2 1 206 0x8000 0x0 0x0 0x3 &mpic 0x2 0x1
206 08000 0 0 4 &mpic 3 1 207 0x8000 0x0 0x0 0x4 &mpic 0x3 0x1
207 208
208 /* IDSEL 0x11 */ 209 /* IDSEL 0x11 */
209 08800 0 0 1 &mpic 0 1 210 0x8800 0x0 0x0 0x1 &mpic 0x0 0x1
210 08800 0 0 2 &mpic 1 1 211 0x8800 0x0 0x0 0x2 &mpic 0x1 0x1
211 08800 0 0 3 &mpic 2 1 212 0x8800 0x0 0x0 0x3 &mpic 0x2 0x1
212 08800 0 0 4 &mpic 3 1 213 0x8800 0x0 0x0 0x4 &mpic 0x3 0x1
213 214
214 /* IDSEL 0x12 (Slot 1) */ 215 /* IDSEL 0x12 (Slot 1) */
215 09000 0 0 1 &mpic 0 1 216 0x9000 0x0 0x0 0x1 &mpic 0x0 0x1
216 09000 0 0 2 &mpic 1 1 217 0x9000 0x0 0x0 0x2 &mpic 0x1 0x1
217 09000 0 0 3 &mpic 2 1 218 0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
218 09000 0 0 4 &mpic 3 1 219 0x9000 0x0 0x0 0x4 &mpic 0x3 0x1
219 220
220 /* IDSEL 0x13 (Slot 2) */ 221 /* IDSEL 0x13 (Slot 2) */
221 09800 0 0 1 &mpic 1 1 222 0x9800 0x0 0x0 0x1 &mpic 0x1 0x1
222 09800 0 0 2 &mpic 2 1 223 0x9800 0x0 0x0 0x2 &mpic 0x2 0x1
223 09800 0 0 3 &mpic 3 1 224 0x9800 0x0 0x0 0x3 &mpic 0x3 0x1
224 09800 0 0 4 &mpic 0 1 225 0x9800 0x0 0x0 0x4 &mpic 0x0 0x1
225 226
226 /* IDSEL 0x14 (Slot 3) */ 227 /* IDSEL 0x14 (Slot 3) */
227 0a000 0 0 1 &mpic 2 1 228 0xa000 0x0 0x0 0x1 &mpic 0x2 0x1
228 0a000 0 0 2 &mpic 3 1 229 0xa000 0x0 0x0 0x2 &mpic 0x3 0x1
229 0a000 0 0 3 &mpic 0 1 230 0xa000 0x0 0x0 0x3 &mpic 0x0 0x1
230 0a000 0 0 4 &mpic 1 1 231 0xa000 0x0 0x0 0x4 &mpic 0x1 0x1
231 232
232 /* IDSEL 0x15 (Slot 4) */ 233 /* IDSEL 0x15 (Slot 4) */
233 0a800 0 0 1 &mpic 3 1 234 0xa800 0x0 0x0 0x1 &mpic 0x3 0x1
234 0a800 0 0 2 &mpic 0 1 235 0xa800 0x0 0x0 0x2 &mpic 0x0 0x1
235 0a800 0 0 3 &mpic 1 1 236 0xa800 0x0 0x0 0x3 &mpic 0x1 0x1
236 0a800 0 0 4 &mpic 2 1 237 0xa800 0x0 0x0 0x4 &mpic 0x2 0x1
237 238
238 /* Bus 1 (Tundra Bridge) */ 239 /* Bus 1 (Tundra Bridge) */
239 /* IDSEL 0x12 (ISA bridge) */ 240 /* IDSEL 0x12 (ISA bridge) */
240 19000 0 0 1 &mpic 0 1 241 0x19000 0x0 0x0 0x1 &mpic 0x0 0x1
241 19000 0 0 2 &mpic 1 1 242 0x19000 0x0 0x0 0x2 &mpic 0x1 0x1
242 19000 0 0 3 &mpic 2 1 243 0x19000 0x0 0x0 0x3 &mpic 0x2 0x1
243 19000 0 0 4 &mpic 3 1>; 244 0x19000 0x0 0x0 0x4 &mpic 0x3 0x1>;
244 interrupt-parent = <&mpic>; 245 interrupt-parent = <&mpic>;
245 interrupts = <18 2>; 246 interrupts = <24 2>;
246 bus-range = <0 0>; 247 bus-range = <0 0>;
247 ranges = <02000000 0 80000000 80000000 0 20000000 248 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
248 01000000 0 00000000 e2000000 0 00100000>; 249 0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
249 clock-frequency = <3f940aa>; 250 clock-frequency = <66666666>;
250 #interrupt-cells = <1>; 251 #interrupt-cells = <1>;
251 #size-cells = <2>; 252 #size-cells = <2>;
252 #address-cells = <3>; 253 #address-cells = <3>;
253 reg = <e0008000 1000>; 254 reg = <0xe0008000 0x1000>;
254 compatible = "fsl,mpc8540-pci"; 255 compatible = "fsl,mpc8540-pci";
255 device_type = "pci"; 256 device_type = "pci";
256 257
257 i8259@19000 { 258 i8259@19000 {
258 interrupt-controller; 259 interrupt-controller;
259 device_type = "interrupt-controller"; 260 device_type = "interrupt-controller";
260 reg = <19000 0 0 0 1>; 261 reg = <0x19000 0x0 0x0 0x0 0x1>;
261 #address-cells = <0>; 262 #address-cells = <0>;
262 #interrupt-cells = <2>; 263 #interrupt-cells = <2>;
263 compatible = "chrp,iic"; 264 compatible = "chrp,iic";
@@ -268,24 +269,24 @@
268 269
269 pci1: pci@e0009000 { 270 pci1: pci@e0009000 {
270 cell-index = <1>; 271 cell-index = <1>;
271 interrupt-map-mask = <f800 0 0 7>; 272 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
272 interrupt-map = < 273 interrupt-map = <
273 274
274 /* IDSEL 0x15 */ 275 /* IDSEL 0x15 */
275 a800 0 0 1 &mpic b 1 276 0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
276 a800 0 0 2 &mpic b 1 277 0xa800 0x0 0x0 0x2 &mpic 0xb 0x1
277 a800 0 0 3 &mpic b 1 278 0xa800 0x0 0x0 0x3 &mpic 0xb 0x1
278 a800 0 0 4 &mpic b 1>; 279 0xa800 0x0 0x0 0x4 &mpic 0xb 0x1>;
279 interrupt-parent = <&mpic>; 280 interrupt-parent = <&mpic>;
280 interrupts = <19 2>; 281 interrupts = <25 2>;
281 bus-range = <0 0>; 282 bus-range = <0 0>;
282 ranges = <02000000 0 a0000000 a0000000 0 20000000 283 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
283 01000000 0 00000000 e3000000 0 00100000>; 284 0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>;
284 clock-frequency = <3f940aa>; 285 clock-frequency = <66666666>;
285 #interrupt-cells = <1>; 286 #interrupt-cells = <1>;
286 #size-cells = <2>; 287 #size-cells = <2>;
287 #address-cells = <3>; 288 #address-cells = <3>;
288 reg = <e0009000 1000>; 289 reg = <0xe0009000 0x1000>;
289 compatible = "fsl,mpc8540-pci"; 290 compatible = "fsl,mpc8540-pci";
290 device_type = "pci"; 291 device_type = "pci";
291 }; 292 };
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts
index 688af9d06382..6a0d8db96d97 100644
--- a/arch/powerpc/boot/dts/mpc8544ds.dts
+++ b/arch/powerpc/boot/dts/mpc8544ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8544 DS Device Tree Source 2 * MPC8544 DS Device Tree Source
3 * 3 *
4 * Copyright 2007 Freescale Semiconductor Inc. 4 * Copyright 2007, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12/ { 13/ {
13 model = "MPC8544DS"; 14 model = "MPC8544DS";
14 compatible = "MPC8544DS", "MPC85xxDS"; 15 compatible = "MPC8544DS", "MPC85xxDS";
@@ -27,17 +28,16 @@
27 }; 28 };
28 29
29 cpus { 30 cpus {
30 #cpus = <1>;
31 #address-cells = <1>; 31 #address-cells = <1>;
32 #size-cells = <0>; 32 #size-cells = <0>;
33 33
34 PowerPC,8544@0 { 34 PowerPC,8544@0 {
35 device_type = "cpu"; 35 device_type = "cpu";
36 reg = <0>; 36 reg = <0x0>;
37 d-cache-line-size = <20>; // 32 bytes 37 d-cache-line-size = <32>; // 32 bytes
38 i-cache-line-size = <20>; // 32 bytes 38 i-cache-line-size = <32>; // 32 bytes
39 d-cache-size = <8000>; // L1, 32K 39 d-cache-size = <0x8000>; // L1, 32K
40 i-cache-size = <8000>; // L1, 32K 40 i-cache-size = <0x8000>; // L1, 32K
41 timebase-frequency = <0>; 41 timebase-frequency = <0>;
42 bus-frequency = <0>; 42 bus-frequency = <0>;
43 clock-frequency = <0>; 43 clock-frequency = <0>;
@@ -46,7 +46,7 @@
46 46
47 memory { 47 memory {
48 device_type = "memory"; 48 device_type = "memory";
49 reg = <00000000 00000000>; // Filled by U-Boot 49 reg = <0x0 0x0>; // Filled by U-Boot
50 }; 50 };
51 51
52 soc8544@e0000000 { 52 soc8544@e0000000 {
@@ -54,24 +54,24 @@
54 #size-cells = <1>; 54 #size-cells = <1>;
55 device_type = "soc"; 55 device_type = "soc";
56 56
57 ranges = <00000000 e0000000 00100000>; 57 ranges = <0x0 0xe0000000 0x100000>;
58 reg = <e0000000 00001000>; // CCSRBAR 1M 58 reg = <0xe0000000 0x1000>; // CCSRBAR 1M
59 bus-frequency = <0>; // Filled out by uboot. 59 bus-frequency = <0>; // Filled out by uboot.
60 60
61 memory-controller@2000 { 61 memory-controller@2000 {
62 compatible = "fsl,8544-memory-controller"; 62 compatible = "fsl,8544-memory-controller";
63 reg = <2000 1000>; 63 reg = <0x2000 0x1000>;
64 interrupt-parent = <&mpic>; 64 interrupt-parent = <&mpic>;
65 interrupts = <12 2>; 65 interrupts = <18 2>;
66 }; 66 };
67 67
68 l2-cache-controller@20000 { 68 l2-cache-controller@20000 {
69 compatible = "fsl,8544-l2-cache-controller"; 69 compatible = "fsl,8544-l2-cache-controller";
70 reg = <20000 1000>; 70 reg = <0x20000 0x1000>;
71 cache-line-size = <20>; // 32 bytes 71 cache-line-size = <32>; // 32 bytes
72 cache-size = <40000>; // L2, 256K 72 cache-size = <0x40000>; // L2, 256K
73 interrupt-parent = <&mpic>; 73 interrupt-parent = <&mpic>;
74 interrupts = <10 2>; 74 interrupts = <16 2>;
75 }; 75 };
76 76
77 i2c@3000 { 77 i2c@3000 {
@@ -79,8 +79,8 @@
79 #size-cells = <0>; 79 #size-cells = <0>;
80 cell-index = <0>; 80 cell-index = <0>;
81 compatible = "fsl-i2c"; 81 compatible = "fsl-i2c";
82 reg = <3000 100>; 82 reg = <0x3000 0x100>;
83 interrupts = <2b 2>; 83 interrupts = <43 2>;
84 interrupt-parent = <&mpic>; 84 interrupt-parent = <&mpic>;
85 dfsrr; 85 dfsrr;
86 }; 86 };
@@ -90,8 +90,8 @@
90 #size-cells = <0>; 90 #size-cells = <0>;
91 cell-index = <1>; 91 cell-index = <1>;
92 compatible = "fsl-i2c"; 92 compatible = "fsl-i2c";
93 reg = <3100 100>; 93 reg = <0x3100 0x100>;
94 interrupts = <2b 2>; 94 interrupts = <43 2>;
95 interrupt-parent = <&mpic>; 95 interrupt-parent = <&mpic>;
96 dfsrr; 96 dfsrr;
97 }; 97 };
@@ -100,30 +100,71 @@
100 #address-cells = <1>; 100 #address-cells = <1>;
101 #size-cells = <0>; 101 #size-cells = <0>;
102 compatible = "fsl,gianfar-mdio"; 102 compatible = "fsl,gianfar-mdio";
103 reg = <24520 20>; 103 reg = <0x24520 0x20>;
104 104
105 phy0: ethernet-phy@0 { 105 phy0: ethernet-phy@0 {
106 interrupt-parent = <&mpic>; 106 interrupt-parent = <&mpic>;
107 interrupts = <a 1>; 107 interrupts = <10 1>;
108 reg = <0>; 108 reg = <0x0>;
109 device_type = "ethernet-phy"; 109 device_type = "ethernet-phy";
110 }; 110 };
111 phy1: ethernet-phy@1 { 111 phy1: ethernet-phy@1 {
112 interrupt-parent = <&mpic>; 112 interrupt-parent = <&mpic>;
113 interrupts = <a 1>; 113 interrupts = <10 1>;
114 reg = <1>; 114 reg = <0x1>;
115 device_type = "ethernet-phy"; 115 device_type = "ethernet-phy";
116 }; 116 };
117 }; 117 };
118 118
119 dma@21300 {
120 #address-cells = <1>;
121 #size-cells = <1>;
122 compatible = "fsl,mpc8544-dma", "fsl,eloplus-dma";
123 reg = <0x21300 0x4>;
124 ranges = <0x0 0x21100 0x200>;
125 cell-index = <0>;
126 dma-channel@0 {
127 compatible = "fsl,mpc8544-dma-channel",
128 "fsl,eloplus-dma-channel";
129 reg = <0x0 0x80>;
130 cell-index = <0>;
131 interrupt-parent = <&mpic>;
132 interrupts = <20 2>;
133 };
134 dma-channel@80 {
135 compatible = "fsl,mpc8544-dma-channel",
136 "fsl,eloplus-dma-channel";
137 reg = <0x80 0x80>;
138 cell-index = <1>;
139 interrupt-parent = <&mpic>;
140 interrupts = <21 2>;
141 };
142 dma-channel@100 {
143 compatible = "fsl,mpc8544-dma-channel",
144 "fsl,eloplus-dma-channel";
145 reg = <0x100 0x80>;
146 cell-index = <2>;
147 interrupt-parent = <&mpic>;
148 interrupts = <22 2>;
149 };
150 dma-channel@180 {
151 compatible = "fsl,mpc8544-dma-channel",
152 "fsl,eloplus-dma-channel";
153 reg = <0x180 0x80>;
154 cell-index = <3>;
155 interrupt-parent = <&mpic>;
156 interrupts = <23 2>;
157 };
158 };
159
119 enet0: ethernet@24000 { 160 enet0: ethernet@24000 {
120 cell-index = <0>; 161 cell-index = <0>;
121 device_type = "network"; 162 device_type = "network";
122 model = "TSEC"; 163 model = "TSEC";
123 compatible = "gianfar"; 164 compatible = "gianfar";
124 reg = <24000 1000>; 165 reg = <0x24000 0x1000>;
125 local-mac-address = [ 00 00 00 00 00 00 ]; 166 local-mac-address = [ 00 00 00 00 00 00 ];
126 interrupts = <1d 2 1e 2 22 2>; 167 interrupts = <29 2 30 2 34 2>;
127 interrupt-parent = <&mpic>; 168 interrupt-parent = <&mpic>;
128 phy-handle = <&phy0>; 169 phy-handle = <&phy0>;
129 phy-connection-type = "rgmii-id"; 170 phy-connection-type = "rgmii-id";
@@ -134,9 +175,9 @@
134 device_type = "network"; 175 device_type = "network";
135 model = "TSEC"; 176 model = "TSEC";
136 compatible = "gianfar"; 177 compatible = "gianfar";
137 reg = <26000 1000>; 178 reg = <0x26000 0x1000>;
138 local-mac-address = [ 00 00 00 00 00 00 ]; 179 local-mac-address = [ 00 00 00 00 00 00 ];
139 interrupts = <1f 2 20 2 21 2>; 180 interrupts = <31 2 32 2 33 2>;
140 interrupt-parent = <&mpic>; 181 interrupt-parent = <&mpic>;
141 phy-handle = <&phy1>; 182 phy-handle = <&phy1>;
142 phy-connection-type = "rgmii-id"; 183 phy-connection-type = "rgmii-id";
@@ -146,9 +187,9 @@
146 cell-index = <0>; 187 cell-index = <0>;
147 device_type = "serial"; 188 device_type = "serial";
148 compatible = "ns16550"; 189 compatible = "ns16550";
149 reg = <4500 100>; 190 reg = <0x4500 0x100>;
150 clock-frequency = <0>; 191 clock-frequency = <0>;
151 interrupts = <2a 2>; 192 interrupts = <42 2>;
152 interrupt-parent = <&mpic>; 193 interrupt-parent = <&mpic>;
153 }; 194 };
154 195
@@ -156,15 +197,15 @@
156 cell-index = <1>; 197 cell-index = <1>;
157 device_type = "serial"; 198 device_type = "serial";
158 compatible = "ns16550"; 199 compatible = "ns16550";
159 reg = <4600 100>; 200 reg = <0x4600 0x100>;
160 clock-frequency = <0>; 201 clock-frequency = <0>;
161 interrupts = <2a 2>; 202 interrupts = <42 2>;
162 interrupt-parent = <&mpic>; 203 interrupt-parent = <&mpic>;
163 }; 204 };
164 205
165 global-utilities@e0000 { //global utilities block 206 global-utilities@e0000 { //global utilities block
166 compatible = "fsl,mpc8548-guts"; 207 compatible = "fsl,mpc8548-guts";
167 reg = <e0000 1000>; 208 reg = <0xe0000 0x1000>;
168 fsl,has-rstcr; 209 fsl,has-rstcr;
169 }; 210 };
170 211
@@ -173,7 +214,7 @@
173 interrupt-controller; 214 interrupt-controller;
174 #address-cells = <0>; 215 #address-cells = <0>;
175 #interrupt-cells = <2>; 216 #interrupt-cells = <2>;
176 reg = <40000 40000>; 217 reg = <0x40000 0x40000>;
177 compatible = "chrp,open-pic"; 218 compatible = "chrp,open-pic";
178 device_type = "open-pic"; 219 device_type = "open-pic";
179 big-endian; 220 big-endian;
@@ -184,32 +225,32 @@
184 cell-index = <0>; 225 cell-index = <0>;
185 compatible = "fsl,mpc8540-pci"; 226 compatible = "fsl,mpc8540-pci";
186 device_type = "pci"; 227 device_type = "pci";
187 interrupt-map-mask = <f800 0 0 7>; 228 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
188 interrupt-map = < 229 interrupt-map = <
189 230
190 /* IDSEL 0x11 J17 Slot 1 */ 231 /* IDSEL 0x11 J17 Slot 1 */
191 8800 0 0 1 &mpic 2 1 232 0x8800 0x0 0x0 0x1 &mpic 0x2 0x1
192 8800 0 0 2 &mpic 3 1 233 0x8800 0x0 0x0 0x2 &mpic 0x3 0x1
193 8800 0 0 3 &mpic 4 1 234 0x8800 0x0 0x0 0x3 &mpic 0x4 0x1
194 8800 0 0 4 &mpic 1 1 235 0x8800 0x0 0x0 0x4 &mpic 0x1 0x1
195 236
196 /* IDSEL 0x12 J16 Slot 2 */ 237 /* IDSEL 0x12 J16 Slot 2 */
197 238
198 9000 0 0 1 &mpic 3 1 239 0x9000 0x0 0x0 0x1 &mpic 0x3 0x1
199 9000 0 0 2 &mpic 4 1 240 0x9000 0x0 0x0 0x2 &mpic 0x4 0x1
200 9000 0 0 3 &mpic 2 1 241 0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
201 9000 0 0 4 &mpic 1 1>; 242 0x9000 0x0 0x0 0x4 &mpic 0x1 0x1>;
202 243
203 interrupt-parent = <&mpic>; 244 interrupt-parent = <&mpic>;
204 interrupts = <18 2>; 245 interrupts = <24 2>;
205 bus-range = <0 ff>; 246 bus-range = <0 255>;
206 ranges = <02000000 0 c0000000 c0000000 0 20000000 247 ranges = <0x2000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
207 01000000 0 00000000 e1000000 0 00010000>; 248 0x1000000 0x0 0x0 0xe1000000 0x0 0x10000>;
208 clock-frequency = <3f940aa>; 249 clock-frequency = <66666666>;
209 #interrupt-cells = <1>; 250 #interrupt-cells = <1>;
210 #size-cells = <2>; 251 #size-cells = <2>;
211 #address-cells = <3>; 252 #address-cells = <3>;
212 reg = <e0008000 1000>; 253 reg = <0xe0008000 0x1000>;
213 }; 254 };
214 255
215 pci1: pcie@e0009000 { 256 pci1: pcie@e0009000 {
@@ -219,33 +260,33 @@
219 #interrupt-cells = <1>; 260 #interrupt-cells = <1>;
220 #size-cells = <2>; 261 #size-cells = <2>;
221 #address-cells = <3>; 262 #address-cells = <3>;
222 reg = <e0009000 1000>; 263 reg = <0xe0009000 0x1000>;
223 bus-range = <0 ff>; 264 bus-range = <0 255>;
224 ranges = <02000000 0 80000000 80000000 0 20000000 265 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
225 01000000 0 00000000 e1010000 0 00010000>; 266 0x1000000 0x0 0x0 0xe1010000 0x0 0x10000>;
226 clock-frequency = <1fca055>; 267 clock-frequency = <33333333>;
227 interrupt-parent = <&mpic>; 268 interrupt-parent = <&mpic>;
228 interrupts = <1a 2>; 269 interrupts = <26 2>;
229 interrupt-map-mask = <f800 0 0 7>; 270 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
230 interrupt-map = < 271 interrupt-map = <
231 /* IDSEL 0x0 */ 272 /* IDSEL 0x0 */
232 0000 0 0 1 &mpic 4 1 273 0000 0x0 0x0 0x1 &mpic 0x4 0x1
233 0000 0 0 2 &mpic 5 1 274 0000 0x0 0x0 0x2 &mpic 0x5 0x1
234 0000 0 0 3 &mpic 6 1 275 0000 0x0 0x0 0x3 &mpic 0x6 0x1
235 0000 0 0 4 &mpic 7 1 276 0000 0x0 0x0 0x4 &mpic 0x7 0x1
236 >; 277 >;
237 pcie@0 { 278 pcie@0 {
238 reg = <0 0 0 0 0>; 279 reg = <0x0 0x0 0x0 0x0 0x0>;
239 #size-cells = <2>; 280 #size-cells = <2>;
240 #address-cells = <3>; 281 #address-cells = <3>;
241 device_type = "pci"; 282 device_type = "pci";
242 ranges = <02000000 0 80000000 283 ranges = <0x2000000 0x0 0x80000000
243 02000000 0 80000000 284 0x2000000 0x0 0x80000000
244 0 20000000 285 0x0 0x20000000
245 286
246 01000000 0 00000000 287 0x1000000 0x0 0x0
247 01000000 0 00000000 288 0x1000000 0x0 0x0
248 0 00010000>; 289 0x0 0x10000>;
249 }; 290 };
250 }; 291 };
251 292
@@ -256,33 +297,33 @@
256 #interrupt-cells = <1>; 297 #interrupt-cells = <1>;
257 #size-cells = <2>; 298 #size-cells = <2>;
258 #address-cells = <3>; 299 #address-cells = <3>;
259 reg = <e000a000 1000>; 300 reg = <0xe000a000 0x1000>;
260 bus-range = <0 ff>; 301 bus-range = <0 255>;
261 ranges = <02000000 0 a0000000 a0000000 0 10000000 302 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x10000000
262 01000000 0 00000000 e1020000 0 00010000>; 303 0x1000000 0x0 0x0 0xe1020000 0x0 0x10000>;
263 clock-frequency = <1fca055>; 304 clock-frequency = <33333333>;
264 interrupt-parent = <&mpic>; 305 interrupt-parent = <&mpic>;
265 interrupts = <19 2>; 306 interrupts = <25 2>;
266 interrupt-map-mask = <f800 0 0 7>; 307 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
267 interrupt-map = < 308 interrupt-map = <
268 /* IDSEL 0x0 */ 309 /* IDSEL 0x0 */
269 0000 0 0 1 &mpic 0 1 310 0000 0x0 0x0 0x1 &mpic 0x0 0x1
270 0000 0 0 2 &mpic 1 1 311 0000 0x0 0x0 0x2 &mpic 0x1 0x1
271 0000 0 0 3 &mpic 2 1 312 0000 0x0 0x0 0x3 &mpic 0x2 0x1
272 0000 0 0 4 &mpic 3 1 313 0000 0x0 0x0 0x4 &mpic 0x3 0x1
273 >; 314 >;
274 pcie@0 { 315 pcie@0 {
275 reg = <0 0 0 0 0>; 316 reg = <0x0 0x0 0x0 0x0 0x0>;
276 #size-cells = <2>; 317 #size-cells = <2>;
277 #address-cells = <3>; 318 #address-cells = <3>;
278 device_type = "pci"; 319 device_type = "pci";
279 ranges = <02000000 0 a0000000 320 ranges = <0x2000000 0x0 0xa0000000
280 02000000 0 a0000000 321 0x2000000 0x0 0xa0000000
281 0 10000000 322 0x0 0x10000000
282 323
283 01000000 0 00000000 324 0x1000000 0x0 0x0
284 01000000 0 00000000 325 0x1000000 0x0 0x0
285 0 00010000>; 326 0x0 0x10000>;
286 }; 327 };
287 }; 328 };
288 329
@@ -293,72 +334,72 @@
293 #interrupt-cells = <1>; 334 #interrupt-cells = <1>;
294 #size-cells = <2>; 335 #size-cells = <2>;
295 #address-cells = <3>; 336 #address-cells = <3>;
296 reg = <e000b000 1000>; 337 reg = <0xe000b000 0x1000>;
297 bus-range = <0 ff>; 338 bus-range = <0 255>;
298 ranges = <02000000 0 b0000000 b0000000 0 00100000 339 ranges = <0x2000000 0x0 0xb0000000 0xb0000000 0x0 0x100000
299 01000000 0 00000000 b0100000 0 00100000>; 340 0x1000000 0x0 0x0 0xb0100000 0x0 0x100000>;
300 clock-frequency = <1fca055>; 341 clock-frequency = <33333333>;
301 interrupt-parent = <&mpic>; 342 interrupt-parent = <&mpic>;
302 interrupts = <1b 2>; 343 interrupts = <27 2>;
303 interrupt-map-mask = <ff00 0 0 1>; 344 interrupt-map-mask = <0xff00 0x0 0x0 0x1>;
304 interrupt-map = < 345 interrupt-map = <
305 // IDSEL 0x1c USB 346 // IDSEL 0x1c USB
306 e000 0 0 1 &i8259 c 2 347 0xe000 0x0 0x0 0x1 &i8259 0xc 0x2
307 e100 0 0 2 &i8259 9 2 348 0xe100 0x0 0x0 0x2 &i8259 0x9 0x2
308 e200 0 0 3 &i8259 a 2 349 0xe200 0x0 0x0 0x3 &i8259 0xa 0x2
309 e300 0 0 4 &i8259 b 2 350 0xe300 0x0 0x0 0x4 &i8259 0xb 0x2
310 351
311 // IDSEL 0x1d Audio 352 // IDSEL 0x1d Audio
312 e800 0 0 1 &i8259 6 2 353 0xe800 0x0 0x0 0x1 &i8259 0x6 0x2
313 354
314 // IDSEL 0x1e Legacy 355 // IDSEL 0x1e Legacy
315 f000 0 0 1 &i8259 7 2 356 0xf000 0x0 0x0 0x1 &i8259 0x7 0x2
316 f100 0 0 1 &i8259 7 2 357 0xf100 0x0 0x0 0x1 &i8259 0x7 0x2
317 358
318 // IDSEL 0x1f IDE/SATA 359 // IDSEL 0x1f IDE/SATA
319 f800 0 0 1 &i8259 e 2 360 0xf800 0x0 0x0 0x1 &i8259 0xe 0x2
320 f900 0 0 1 &i8259 5 2 361 0xf900 0x0 0x0 0x1 &i8259 0x5 0x2
321 >; 362 >;
322 363
323 pcie@0 { 364 pcie@0 {
324 reg = <0 0 0 0 0>; 365 reg = <0x0 0x0 0x0 0x0 0x0>;
325 #size-cells = <2>; 366 #size-cells = <2>;
326 #address-cells = <3>; 367 #address-cells = <3>;
327 device_type = "pci"; 368 device_type = "pci";
328 ranges = <02000000 0 b0000000 369 ranges = <0x2000000 0x0 0xb0000000
329 02000000 0 b0000000 370 0x2000000 0x0 0xb0000000
330 0 00100000 371 0x0 0x100000
331 372
332 01000000 0 00000000 373 0x1000000 0x0 0x0
333 01000000 0 00000000 374 0x1000000 0x0 0x0
334 0 00100000>; 375 0x0 0x100000>;
335 376
336 uli1575@0 { 377 uli1575@0 {
337 reg = <0 0 0 0 0>; 378 reg = <0x0 0x0 0x0 0x0 0x0>;
338 #size-cells = <2>; 379 #size-cells = <2>;
339 #address-cells = <3>; 380 #address-cells = <3>;
340 ranges = <02000000 0 b0000000 381 ranges = <0x2000000 0x0 0xb0000000
341 02000000 0 b0000000 382 0x2000000 0x0 0xb0000000
342 0 00100000 383 0x0 0x100000
343 384
344 01000000 0 00000000 385 0x1000000 0x0 0x0
345 01000000 0 00000000 386 0x1000000 0x0 0x0
346 0 00100000>; 387 0x0 0x100000>;
347 isa@1e { 388 isa@1e {
348 device_type = "isa"; 389 device_type = "isa";
349 #interrupt-cells = <2>; 390 #interrupt-cells = <2>;
350 #size-cells = <1>; 391 #size-cells = <1>;
351 #address-cells = <2>; 392 #address-cells = <2>;
352 reg = <f000 0 0 0 0>; 393 reg = <0xf000 0x0 0x0 0x0 0x0>;
353 ranges = <1 0 394 ranges = <0x1 0x0
354 01000000 0 0 395 0x1000000 0x0 0x0
355 00001000>; 396 0x1000>;
356 interrupt-parent = <&i8259>; 397 interrupt-parent = <&i8259>;
357 398
358 i8259: interrupt-controller@20 { 399 i8259: interrupt-controller@20 {
359 reg = <1 20 2 400 reg = <0x1 0x20 0x2
360 1 a0 2 401 0x1 0xa0 0x2
361 1 4d0 2>; 402 0x1 0x4d0 0x2>;
362 interrupt-controller; 403 interrupt-controller;
363 device_type = "interrupt-controller"; 404 device_type = "interrupt-controller";
364 #address-cells = <0>; 405 #address-cells = <0>;
@@ -371,28 +412,28 @@
371 i8042@60 { 412 i8042@60 {
372 #size-cells = <0>; 413 #size-cells = <0>;
373 #address-cells = <1>; 414 #address-cells = <1>;
374 reg = <1 60 1 1 64 1>; 415 reg = <0x1 0x60 0x1 0x1 0x64 0x1>;
375 interrupts = <1 3 c 3>; 416 interrupts = <1 3 12 3>;
376 interrupt-parent = <&i8259>; 417 interrupt-parent = <&i8259>;
377 418
378 keyboard@0 { 419 keyboard@0 {
379 reg = <0>; 420 reg = <0x0>;
380 compatible = "pnpPNP,303"; 421 compatible = "pnpPNP,303";
381 }; 422 };
382 423
383 mouse@1 { 424 mouse@1 {
384 reg = <1>; 425 reg = <0x1>;
385 compatible = "pnpPNP,f03"; 426 compatible = "pnpPNP,f03";
386 }; 427 };
387 }; 428 };
388 429
389 rtc@70 { 430 rtc@70 {
390 compatible = "pnpPNP,b00"; 431 compatible = "pnpPNP,b00";
391 reg = <1 70 2>; 432 reg = <0x1 0x70 0x2>;
392 }; 433 };
393 434
394 gpio@400 { 435 gpio@400 {
395 reg = <1 400 80>; 436 reg = <0x1 0x400 0x80>;
396 }; 437 };
397 }; 438 };
398 }; 439 };
diff --git a/arch/powerpc/boot/dts/mpc8548cds.dts b/arch/powerpc/boot/dts/mpc8548cds.dts
index 1f470c6a1c63..fa298a8c81cc 100644
--- a/arch/powerpc/boot/dts/mpc8548cds.dts
+++ b/arch/powerpc/boot/dts/mpc8548cds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8548 CDS Device Tree Source 2 * MPC8548 CDS Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12 13
13/ { 14/ {
14 model = "MPC8548CDS"; 15 model = "MPC8548CDS";
@@ -36,11 +37,11 @@
36 37
37 PowerPC,8548@0 { 38 PowerPC,8548@0 {
38 device_type = "cpu"; 39 device_type = "cpu";
39 reg = <0>; 40 reg = <0x0>;
40 d-cache-line-size = <20>; // 32 bytes 41 d-cache-line-size = <32>; // 32 bytes
41 i-cache-line-size = <20>; // 32 bytes 42 i-cache-line-size = <32>; // 32 bytes
42 d-cache-size = <8000>; // L1, 32K 43 d-cache-size = <0x8000>; // L1, 32K
43 i-cache-size = <8000>; // L1, 32K 44 i-cache-size = <0x8000>; // L1, 32K
44 timebase-frequency = <0>; // 33 MHz, from uboot 45 timebase-frequency = <0>; // 33 MHz, from uboot
45 bus-frequency = <0>; // 166 MHz 46 bus-frequency = <0>; // 166 MHz
46 clock-frequency = <0>; // 825 MHz, from uboot 47 clock-frequency = <0>; // 825 MHz, from uboot
@@ -49,31 +50,31 @@
49 50
50 memory { 51 memory {
51 device_type = "memory"; 52 device_type = "memory";
52 reg = <00000000 08000000>; // 128M at 0x0 53 reg = <0x0 0x8000000>; // 128M at 0x0
53 }; 54 };
54 55
55 soc8548@e0000000 { 56 soc8548@e0000000 {
56 #address-cells = <1>; 57 #address-cells = <1>;
57 #size-cells = <1>; 58 #size-cells = <1>;
58 device_type = "soc"; 59 device_type = "soc";
59 ranges = <00000000 e0000000 00100000>; 60 ranges = <0x0 0xe0000000 0x100000>;
60 reg = <e0000000 00001000>; // CCSRBAR 61 reg = <0xe0000000 0x1000>; // CCSRBAR
61 bus-frequency = <0>; 62 bus-frequency = <0>;
62 63
63 memory-controller@2000 { 64 memory-controller@2000 {
64 compatible = "fsl,8548-memory-controller"; 65 compatible = "fsl,8548-memory-controller";
65 reg = <2000 1000>; 66 reg = <0x2000 0x1000>;
66 interrupt-parent = <&mpic>; 67 interrupt-parent = <&mpic>;
67 interrupts = <12 2>; 68 interrupts = <18 2>;
68 }; 69 };
69 70
70 l2-cache-controller@20000 { 71 l2-cache-controller@20000 {
71 compatible = "fsl,8548-l2-cache-controller"; 72 compatible = "fsl,8548-l2-cache-controller";
72 reg = <20000 1000>; 73 reg = <0x20000 0x1000>;
73 cache-line-size = <20>; // 32 bytes 74 cache-line-size = <32>; // 32 bytes
74 cache-size = <80000>; // L2, 512K 75 cache-size = <0x80000>; // L2, 512K
75 interrupt-parent = <&mpic>; 76 interrupt-parent = <&mpic>;
76 interrupts = <10 2>; 77 interrupts = <16 2>;
77 }; 78 };
78 79
79 i2c@3000 { 80 i2c@3000 {
@@ -81,8 +82,8 @@
81 #size-cells = <0>; 82 #size-cells = <0>;
82 cell-index = <0>; 83 cell-index = <0>;
83 compatible = "fsl-i2c"; 84 compatible = "fsl-i2c";
84 reg = <3000 100>; 85 reg = <0x3000 0x100>;
85 interrupts = <2b 2>; 86 interrupts = <43 2>;
86 interrupt-parent = <&mpic>; 87 interrupt-parent = <&mpic>;
87 dfsrr; 88 dfsrr;
88 }; 89 };
@@ -92,8 +93,8 @@
92 #size-cells = <0>; 93 #size-cells = <0>;
93 cell-index = <1>; 94 cell-index = <1>;
94 compatible = "fsl-i2c"; 95 compatible = "fsl-i2c";
95 reg = <3100 100>; 96 reg = <0x3100 0x100>;
96 interrupts = <2b 2>; 97 interrupts = <43 2>;
97 interrupt-parent = <&mpic>; 98 interrupt-parent = <&mpic>;
98 dfsrr; 99 dfsrr;
99 }; 100 };
@@ -102,30 +103,30 @@
102 #address-cells = <1>; 103 #address-cells = <1>;
103 #size-cells = <0>; 104 #size-cells = <0>;
104 compatible = "fsl,gianfar-mdio"; 105 compatible = "fsl,gianfar-mdio";
105 reg = <24520 20>; 106 reg = <0x24520 0x20>;
106 107
107 phy0: ethernet-phy@0 { 108 phy0: ethernet-phy@0 {
108 interrupt-parent = <&mpic>; 109 interrupt-parent = <&mpic>;
109 interrupts = <5 1>; 110 interrupts = <5 1>;
110 reg = <0>; 111 reg = <0x0>;
111 device_type = "ethernet-phy"; 112 device_type = "ethernet-phy";
112 }; 113 };
113 phy1: ethernet-phy@1 { 114 phy1: ethernet-phy@1 {
114 interrupt-parent = <&mpic>; 115 interrupt-parent = <&mpic>;
115 interrupts = <5 1>; 116 interrupts = <5 1>;
116 reg = <1>; 117 reg = <0x1>;
117 device_type = "ethernet-phy"; 118 device_type = "ethernet-phy";
118 }; 119 };
119 phy2: ethernet-phy@2 { 120 phy2: ethernet-phy@2 {
120 interrupt-parent = <&mpic>; 121 interrupt-parent = <&mpic>;
121 interrupts = <5 1>; 122 interrupts = <5 1>;
122 reg = <2>; 123 reg = <0x2>;
123 device_type = "ethernet-phy"; 124 device_type = "ethernet-phy";
124 }; 125 };
125 phy3: ethernet-phy@3 { 126 phy3: ethernet-phy@3 {
126 interrupt-parent = <&mpic>; 127 interrupt-parent = <&mpic>;
127 interrupts = <5 1>; 128 interrupts = <5 1>;
128 reg = <3>; 129 reg = <0x3>;
129 device_type = "ethernet-phy"; 130 device_type = "ethernet-phy";
130 }; 131 };
131 }; 132 };
@@ -135,9 +136,9 @@
135 device_type = "network"; 136 device_type = "network";
136 model = "eTSEC"; 137 model = "eTSEC";
137 compatible = "gianfar"; 138 compatible = "gianfar";
138 reg = <24000 1000>; 139 reg = <0x24000 0x1000>;
139 local-mac-address = [ 00 00 00 00 00 00 ]; 140 local-mac-address = [ 00 00 00 00 00 00 ];
140 interrupts = <1d 2 1e 2 22 2>; 141 interrupts = <29 2 30 2 34 2>;
141 interrupt-parent = <&mpic>; 142 interrupt-parent = <&mpic>;
142 phy-handle = <&phy0>; 143 phy-handle = <&phy0>;
143 }; 144 };
@@ -147,9 +148,9 @@
147 device_type = "network"; 148 device_type = "network";
148 model = "eTSEC"; 149 model = "eTSEC";
149 compatible = "gianfar"; 150 compatible = "gianfar";
150 reg = <25000 1000>; 151 reg = <0x25000 0x1000>;
151 local-mac-address = [ 00 00 00 00 00 00 ]; 152 local-mac-address = [ 00 00 00 00 00 00 ];
152 interrupts = <23 2 24 2 28 2>; 153 interrupts = <35 2 36 2 40 2>;
153 interrupt-parent = <&mpic>; 154 interrupt-parent = <&mpic>;
154 phy-handle = <&phy1>; 155 phy-handle = <&phy1>;
155 }; 156 };
@@ -160,9 +161,9 @@
160 device_type = "network"; 161 device_type = "network";
161 model = "eTSEC"; 162 model = "eTSEC";
162 compatible = "gianfar"; 163 compatible = "gianfar";
163 reg = <26000 1000>; 164 reg = <0x26000 0x1000>;
164 local-mac-address = [ 00 00 00 00 00 00 ]; 165 local-mac-address = [ 00 00 00 00 00 00 ];
165 interrupts = <1f 2 20 2 21 2>; 166 interrupts = <31 2 32 2 33 2>;
166 interrupt-parent = <&mpic>; 167 interrupt-parent = <&mpic>;
167 phy-handle = <&phy2>; 168 phy-handle = <&phy2>;
168 }; 169 };
@@ -172,9 +173,9 @@
172 device_type = "network"; 173 device_type = "network";
173 model = "eTSEC"; 174 model = "eTSEC";
174 compatible = "gianfar"; 175 compatible = "gianfar";
175 reg = <27000 1000>; 176 reg = <0x27000 0x1000>;
176 local-mac-address = [ 00 00 00 00 00 00 ]; 177 local-mac-address = [ 00 00 00 00 00 00 ];
177 interrupts = <25 2 26 2 27 2>; 178 interrupts = <37 2 38 2 39 2>;
178 interrupt-parent = <&mpic>; 179 interrupt-parent = <&mpic>;
179 phy-handle = <&phy3>; 180 phy-handle = <&phy3>;
180 }; 181 };
@@ -184,9 +185,9 @@
184 cell-index = <0>; 185 cell-index = <0>;
185 device_type = "serial"; 186 device_type = "serial";
186 compatible = "ns16550"; 187 compatible = "ns16550";
187 reg = <4500 100>; // reg base, size 188 reg = <0x4500 0x100>; // reg base, size
188 clock-frequency = <0>; // should we fill in in uboot? 189 clock-frequency = <0>; // should we fill in in uboot?
189 interrupts = <2a 2>; 190 interrupts = <42 2>;
190 interrupt-parent = <&mpic>; 191 interrupt-parent = <&mpic>;
191 }; 192 };
192 193
@@ -194,15 +195,15 @@
194 cell-index = <1>; 195 cell-index = <1>;
195 device_type = "serial"; 196 device_type = "serial";
196 compatible = "ns16550"; 197 compatible = "ns16550";
197 reg = <4600 100>; // reg base, size 198 reg = <0x4600 0x100>; // reg base, size
198 clock-frequency = <0>; // should we fill in in uboot? 199 clock-frequency = <0>; // should we fill in in uboot?
199 interrupts = <2a 2>; 200 interrupts = <42 2>;
200 interrupt-parent = <&mpic>; 201 interrupt-parent = <&mpic>;
201 }; 202 };
202 203
203 global-utilities@e0000 { //global utilities reg 204 global-utilities@e0000 { //global utilities reg
204 compatible = "fsl,mpc8548-guts"; 205 compatible = "fsl,mpc8548-guts";
205 reg = <e0000 1000>; 206 reg = <0xe0000 0x1000>;
206 fsl,has-rstcr; 207 fsl,has-rstcr;
207 }; 208 };
208 209
@@ -211,7 +212,7 @@
211 interrupt-controller; 212 interrupt-controller;
212 #address-cells = <0>; 213 #address-cells = <0>;
213 #interrupt-cells = <2>; 214 #interrupt-cells = <2>;
214 reg = <40000 40000>; 215 reg = <0x40000 0x40000>;
215 compatible = "chrp,open-pic"; 216 compatible = "chrp,open-pic";
216 device_type = "open-pic"; 217 device_type = "open-pic";
217 big-endian; 218 big-endian;
@@ -220,139 +221,139 @@
220 221
221 pci0: pci@e0008000 { 222 pci0: pci@e0008000 {
222 cell-index = <0>; 223 cell-index = <0>;
223 interrupt-map-mask = <f800 0 0 7>; 224 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
224 interrupt-map = < 225 interrupt-map = <
225 /* IDSEL 0x4 (PCIX Slot 2) */ 226 /* IDSEL 0x4 (PCIX Slot 2) */
226 02000 0 0 1 &mpic 0 1 227 0x2000 0x0 0x0 0x1 &mpic 0x0 0x1
227 02000 0 0 2 &mpic 1 1 228 0x2000 0x0 0x0 0x2 &mpic 0x1 0x1
228 02000 0 0 3 &mpic 2 1 229 0x2000 0x0 0x0 0x3 &mpic 0x2 0x1
229 02000 0 0 4 &mpic 3 1 230 0x2000 0x0 0x0 0x4 &mpic 0x3 0x1
230 231
231 /* IDSEL 0x5 (PCIX Slot 3) */ 232 /* IDSEL 0x5 (PCIX Slot 3) */
232 02800 0 0 1 &mpic 1 1 233 0x2800 0x0 0x0 0x1 &mpic 0x1 0x1
233 02800 0 0 2 &mpic 2 1 234 0x2800 0x0 0x0 0x2 &mpic 0x2 0x1
234 02800 0 0 3 &mpic 3 1 235 0x2800 0x0 0x0 0x3 &mpic 0x3 0x1
235 02800 0 0 4 &mpic 0 1 236 0x2800 0x0 0x0 0x4 &mpic 0x0 0x1
236 237
237 /* IDSEL 0x6 (PCIX Slot 4) */ 238 /* IDSEL 0x6 (PCIX Slot 4) */
238 03000 0 0 1 &mpic 2 1 239 0x3000 0x0 0x0 0x1 &mpic 0x2 0x1
239 03000 0 0 2 &mpic 3 1 240 0x3000 0x0 0x0 0x2 &mpic 0x3 0x1
240 03000 0 0 3 &mpic 0 1 241 0x3000 0x0 0x0 0x3 &mpic 0x0 0x1
241 03000 0 0 4 &mpic 1 1 242 0x3000 0x0 0x0 0x4 &mpic 0x1 0x1
242 243
243 /* IDSEL 0x8 (PCIX Slot 5) */ 244 /* IDSEL 0x8 (PCIX Slot 5) */
244 04000 0 0 1 &mpic 0 1 245 0x4000 0x0 0x0 0x1 &mpic 0x0 0x1
245 04000 0 0 2 &mpic 1 1 246 0x4000 0x0 0x0 0x2 &mpic 0x1 0x1
246 04000 0 0 3 &mpic 2 1 247 0x4000 0x0 0x0 0x3 &mpic 0x2 0x1
247 04000 0 0 4 &mpic 3 1 248 0x4000 0x0 0x0 0x4 &mpic 0x3 0x1
248 249
249 /* IDSEL 0xC (Tsi310 bridge) */ 250 /* IDSEL 0xC (Tsi310 bridge) */
250 06000 0 0 1 &mpic 0 1 251 0x6000 0x0 0x0 0x1 &mpic 0x0 0x1
251 06000 0 0 2 &mpic 1 1 252 0x6000 0x0 0x0 0x2 &mpic 0x1 0x1
252 06000 0 0 3 &mpic 2 1 253 0x6000 0x0 0x0 0x3 &mpic 0x2 0x1
253 06000 0 0 4 &mpic 3 1 254 0x6000 0x0 0x0 0x4 &mpic 0x3 0x1
254 255
255 /* IDSEL 0x14 (Slot 2) */ 256 /* IDSEL 0x14 (Slot 2) */
256 0a000 0 0 1 &mpic 0 1 257 0xa000 0x0 0x0 0x1 &mpic 0x0 0x1
257 0a000 0 0 2 &mpic 1 1 258 0xa000 0x0 0x0 0x2 &mpic 0x1 0x1
258 0a000 0 0 3 &mpic 2 1 259 0xa000 0x0 0x0 0x3 &mpic 0x2 0x1
259 0a000 0 0 4 &mpic 3 1 260 0xa000 0x0 0x0 0x4 &mpic 0x3 0x1
260 261
261 /* IDSEL 0x15 (Slot 3) */ 262 /* IDSEL 0x15 (Slot 3) */
262 0a800 0 0 1 &mpic 1 1 263 0xa800 0x0 0x0 0x1 &mpic 0x1 0x1
263 0a800 0 0 2 &mpic 2 1 264 0xa800 0x0 0x0 0x2 &mpic 0x2 0x1
264 0a800 0 0 3 &mpic 3 1 265 0xa800 0x0 0x0 0x3 &mpic 0x3 0x1
265 0a800 0 0 4 &mpic 0 1 266 0xa800 0x0 0x0 0x4 &mpic 0x0 0x1
266 267
267 /* IDSEL 0x16 (Slot 4) */ 268 /* IDSEL 0x16 (Slot 4) */
268 0b000 0 0 1 &mpic 2 1 269 0xb000 0x0 0x0 0x1 &mpic 0x2 0x1
269 0b000 0 0 2 &mpic 3 1 270 0xb000 0x0 0x0 0x2 &mpic 0x3 0x1
270 0b000 0 0 3 &mpic 0 1 271 0xb000 0x0 0x0 0x3 &mpic 0x0 0x1
271 0b000 0 0 4 &mpic 1 1 272 0xb000 0x0 0x0 0x4 &mpic 0x1 0x1
272 273
273 /* IDSEL 0x18 (Slot 5) */ 274 /* IDSEL 0x18 (Slot 5) */
274 0c000 0 0 1 &mpic 0 1 275 0xc000 0x0 0x0 0x1 &mpic 0x0 0x1
275 0c000 0 0 2 &mpic 1 1 276 0xc000 0x0 0x0 0x2 &mpic 0x1 0x1
276 0c000 0 0 3 &mpic 2 1 277 0xc000 0x0 0x0 0x3 &mpic 0x2 0x1
277 0c000 0 0 4 &mpic 3 1 278 0xc000 0x0 0x0 0x4 &mpic 0x3 0x1
278 279
279 /* IDSEL 0x1C (Tsi310 bridge PCI primary) */ 280 /* IDSEL 0x1C (Tsi310 bridge PCI primary) */
280 0E000 0 0 1 &mpic 0 1 281 0xe000 0x0 0x0 0x1 &mpic 0x0 0x1
281 0E000 0 0 2 &mpic 1 1 282 0xe000 0x0 0x0 0x2 &mpic 0x1 0x1
282 0E000 0 0 3 &mpic 2 1 283 0xe000 0x0 0x0 0x3 &mpic 0x2 0x1
283 0E000 0 0 4 &mpic 3 1>; 284 0xe000 0x0 0x0 0x4 &mpic 0x3 0x1>;
284 285
285 interrupt-parent = <&mpic>; 286 interrupt-parent = <&mpic>;
286 interrupts = <18 2>; 287 interrupts = <24 2>;
287 bus-range = <0 0>; 288 bus-range = <0 0>;
288 ranges = <02000000 0 80000000 80000000 0 10000000 289 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x10000000
289 01000000 0 00000000 e2000000 0 00800000>; 290 0x1000000 0x0 0x0 0xe2000000 0x0 0x800000>;
290 clock-frequency = <3f940aa>; 291 clock-frequency = <66666666>;
291 #interrupt-cells = <1>; 292 #interrupt-cells = <1>;
292 #size-cells = <2>; 293 #size-cells = <2>;
293 #address-cells = <3>; 294 #address-cells = <3>;
294 reg = <e0008000 1000>; 295 reg = <0xe0008000 0x1000>;
295 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci"; 296 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
296 device_type = "pci"; 297 device_type = "pci";
297 298
298 pci_bridge@1c { 299 pci_bridge@1c {
299 interrupt-map-mask = <f800 0 0 7>; 300 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
300 interrupt-map = < 301 interrupt-map = <
301 302
302 /* IDSEL 0x00 (PrPMC Site) */ 303 /* IDSEL 0x00 (PrPMC Site) */
303 0000 0 0 1 &mpic 0 1 304 0000 0x0 0x0 0x1 &mpic 0x0 0x1
304 0000 0 0 2 &mpic 1 1 305 0000 0x0 0x0 0x2 &mpic 0x1 0x1
305 0000 0 0 3 &mpic 2 1 306 0000 0x0 0x0 0x3 &mpic 0x2 0x1
306 0000 0 0 4 &mpic 3 1 307 0000 0x0 0x0 0x4 &mpic 0x3 0x1
307 308
308 /* IDSEL 0x04 (VIA chip) */ 309 /* IDSEL 0x04 (VIA chip) */
309 2000 0 0 1 &mpic 0 1 310 0x2000 0x0 0x0 0x1 &mpic 0x0 0x1
310 2000 0 0 2 &mpic 1 1 311 0x2000 0x0 0x0 0x2 &mpic 0x1 0x1
311 2000 0 0 3 &mpic 2 1 312 0x2000 0x0 0x0 0x3 &mpic 0x2 0x1
312 2000 0 0 4 &mpic 3 1 313 0x2000 0x0 0x0 0x4 &mpic 0x3 0x1
313 314
314 /* IDSEL 0x05 (8139) */ 315 /* IDSEL 0x05 (8139) */
315 2800 0 0 1 &mpic 1 1 316 0x2800 0x0 0x0 0x1 &mpic 0x1 0x1
316 317
317 /* IDSEL 0x06 (Slot 6) */ 318 /* IDSEL 0x06 (Slot 6) */
318 3000 0 0 1 &mpic 2 1 319 0x3000 0x0 0x0 0x1 &mpic 0x2 0x1
319 3000 0 0 2 &mpic 3 1 320 0x3000 0x0 0x0 0x2 &mpic 0x3 0x1
320 3000 0 0 3 &mpic 0 1 321 0x3000 0x0 0x0 0x3 &mpic 0x0 0x1
321 3000 0 0 4 &mpic 1 1 322 0x3000 0x0 0x0 0x4 &mpic 0x1 0x1
322 323
323 /* IDESL 0x07 (Slot 7) */ 324 /* IDESL 0x07 (Slot 7) */
324 3800 0 0 1 &mpic 3 1 325 0x3800 0x0 0x0 0x1 &mpic 0x3 0x1
325 3800 0 0 2 &mpic 0 1 326 0x3800 0x0 0x0 0x2 &mpic 0x0 0x1
326 3800 0 0 3 &mpic 1 1 327 0x3800 0x0 0x0 0x3 &mpic 0x1 0x1
327 3800 0 0 4 &mpic 2 1>; 328 0x3800 0x0 0x0 0x4 &mpic 0x2 0x1>;
328 329
329 reg = <e000 0 0 0 0>; 330 reg = <0xe000 0x0 0x0 0x0 0x0>;
330 #interrupt-cells = <1>; 331 #interrupt-cells = <1>;
331 #size-cells = <2>; 332 #size-cells = <2>;
332 #address-cells = <3>; 333 #address-cells = <3>;
333 ranges = <02000000 0 80000000 334 ranges = <0x2000000 0x0 0x80000000
334 02000000 0 80000000 335 0x2000000 0x0 0x80000000
335 0 20000000 336 0x0 0x20000000
336 01000000 0 00000000 337 0x1000000 0x0 0x0
337 01000000 0 00000000 338 0x1000000 0x0 0x0
338 0 00080000>; 339 0x0 0x80000>;
339 clock-frequency = <1fca055>; 340 clock-frequency = <33333333>;
340 341
341 isa@4 { 342 isa@4 {
342 device_type = "isa"; 343 device_type = "isa";
343 #interrupt-cells = <2>; 344 #interrupt-cells = <2>;
344 #size-cells = <1>; 345 #size-cells = <1>;
345 #address-cells = <2>; 346 #address-cells = <2>;
346 reg = <2000 0 0 0 0>; 347 reg = <0x2000 0x0 0x0 0x0 0x0>;
347 ranges = <1 0 01000000 0 0 00001000>; 348 ranges = <0x1 0x0 0x1000000 0x0 0x0 0x1000>;
348 interrupt-parent = <&i8259>; 349 interrupt-parent = <&i8259>;
349 350
350 i8259: interrupt-controller@20 { 351 i8259: interrupt-controller@20 {
351 interrupt-controller; 352 interrupt-controller;
352 device_type = "interrupt-controller"; 353 device_type = "interrupt-controller";
353 reg = <1 20 2 354 reg = <0x1 0x20 0x2
354 1 a0 2 355 0x1 0xa0 0x2
355 1 4d0 2>; 356 0x1 0x4d0 0x2>;
356 #address-cells = <0>; 357 #address-cells = <0>;
357 #interrupt-cells = <2>; 358 #interrupt-cells = <2>;
358 compatible = "chrp,iic"; 359 compatible = "chrp,iic";
@@ -362,7 +363,7 @@
362 363
363 rtc@70 { 364 rtc@70 {
364 compatible = "pnpPNP,b00"; 365 compatible = "pnpPNP,b00";
365 reg = <1 70 2>; 366 reg = <0x1 0x70 0x2>;
366 }; 367 };
367 }; 368 };
368 }; 369 };
@@ -370,64 +371,64 @@
370 371
371 pci1: pci@e0009000 { 372 pci1: pci@e0009000 {
372 cell-index = <1>; 373 cell-index = <1>;
373 interrupt-map-mask = <f800 0 0 7>; 374 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
374 interrupt-map = < 375 interrupt-map = <
375 376
376 /* IDSEL 0x15 */ 377 /* IDSEL 0x15 */
377 a800 0 0 1 &mpic b 1 378 0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
378 a800 0 0 2 &mpic 1 1 379 0xa800 0x0 0x0 0x2 &mpic 0x1 0x1
379 a800 0 0 3 &mpic 2 1 380 0xa800 0x0 0x0 0x3 &mpic 0x2 0x1
380 a800 0 0 4 &mpic 3 1>; 381 0xa800 0x0 0x0 0x4 &mpic 0x3 0x1>;
381 382
382 interrupt-parent = <&mpic>; 383 interrupt-parent = <&mpic>;
383 interrupts = <19 2>; 384 interrupts = <25 2>;
384 bus-range = <0 0>; 385 bus-range = <0 0>;
385 ranges = <02000000 0 90000000 90000000 0 10000000 386 ranges = <0x2000000 0x0 0x90000000 0x90000000 0x0 0x10000000
386 01000000 0 00000000 e2800000 0 00800000>; 387 0x1000000 0x0 0x0 0xe2800000 0x0 0x800000>;
387 clock-frequency = <3f940aa>; 388 clock-frequency = <66666666>;
388 #interrupt-cells = <1>; 389 #interrupt-cells = <1>;
389 #size-cells = <2>; 390 #size-cells = <2>;
390 #address-cells = <3>; 391 #address-cells = <3>;
391 reg = <e0009000 1000>; 392 reg = <0xe0009000 0x1000>;
392 compatible = "fsl,mpc8540-pci"; 393 compatible = "fsl,mpc8540-pci";
393 device_type = "pci"; 394 device_type = "pci";
394 }; 395 };
395 396
396 pci2: pcie@e000a000 { 397 pci2: pcie@e000a000 {
397 cell-index = <2>; 398 cell-index = <2>;
398 interrupt-map-mask = <f800 0 0 7>; 399 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
399 interrupt-map = < 400 interrupt-map = <
400 401
401 /* IDSEL 0x0 (PEX) */ 402 /* IDSEL 0x0 (PEX) */
402 00000 0 0 1 &mpic 0 1 403 00000 0x0 0x0 0x1 &mpic 0x0 0x1
403 00000 0 0 2 &mpic 1 1 404 00000 0x0 0x0 0x2 &mpic 0x1 0x1
404 00000 0 0 3 &mpic 2 1 405 00000 0x0 0x0 0x3 &mpic 0x2 0x1
405 00000 0 0 4 &mpic 3 1>; 406 00000 0x0 0x0 0x4 &mpic 0x3 0x1>;
406 407
407 interrupt-parent = <&mpic>; 408 interrupt-parent = <&mpic>;
408 interrupts = <1a 2>; 409 interrupts = <26 2>;
409 bus-range = <0 ff>; 410 bus-range = <0 255>;
410 ranges = <02000000 0 a0000000 a0000000 0 20000000 411 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
411 01000000 0 00000000 e3000000 0 08000000>; 412 0x1000000 0x0 0x0 0xe3000000 0x0 0x8000000>;
412 clock-frequency = <1fca055>; 413 clock-frequency = <33333333>;
413 #interrupt-cells = <1>; 414 #interrupt-cells = <1>;
414 #size-cells = <2>; 415 #size-cells = <2>;
415 #address-cells = <3>; 416 #address-cells = <3>;
416 reg = <e000a000 1000>; 417 reg = <0xe000a000 0x1000>;
417 compatible = "fsl,mpc8548-pcie"; 418 compatible = "fsl,mpc8548-pcie";
418 device_type = "pci"; 419 device_type = "pci";
419 pcie@0 { 420 pcie@0 {
420 reg = <0 0 0 0 0>; 421 reg = <0x0 0x0 0x0 0x0 0x0>;
421 #size-cells = <2>; 422 #size-cells = <2>;
422 #address-cells = <3>; 423 #address-cells = <3>;
423 device_type = "pci"; 424 device_type = "pci";
424 ranges = <02000000 0 a0000000 425 ranges = <0x2000000 0x0 0xa0000000
425 02000000 0 a0000000 426 0x2000000 0x0 0xa0000000
426 0 20000000 427 0x0 0x20000000
427 428
428 01000000 0 00000000 429 0x1000000 0x0 0x0
429 01000000 0 00000000 430 0x1000000 0x0 0x0
430 0 08000000>; 431 0x0 0x8000000>;
431 }; 432 };
432 }; 433 };
433}; 434};
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts
index 4538f3c38862..b025c566c10d 100644
--- a/arch/powerpc/boot/dts/mpc8555cds.dts
+++ b/arch/powerpc/boot/dts/mpc8555cds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8555 CDS Device Tree Source 2 * MPC8555 CDS Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12 13
13/ { 14/ {
14 model = "MPC8555CDS"; 15 model = "MPC8555CDS";
@@ -31,11 +32,11 @@
31 32
32 PowerPC,8555@0 { 33 PowerPC,8555@0 {
33 device_type = "cpu"; 34 device_type = "cpu";
34 reg = <0>; 35 reg = <0x0>;
35 d-cache-line-size = <20>; // 32 bytes 36 d-cache-line-size = <32>; // 32 bytes
36 i-cache-line-size = <20>; // 32 bytes 37 i-cache-line-size = <32>; // 32 bytes
37 d-cache-size = <8000>; // L1, 32K 38 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <8000>; // L1, 32K 39 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
40 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
41 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
@@ -44,31 +45,31 @@
44 45
45 memory { 46 memory {
46 device_type = "memory"; 47 device_type = "memory";
47 reg = <00000000 08000000>; // 128M at 0x0 48 reg = <0x0 0x8000000>; // 128M at 0x0
48 }; 49 };
49 50
50 soc8555@e0000000 { 51 soc8555@e0000000 {
51 #address-cells = <1>; 52 #address-cells = <1>;
52 #size-cells = <1>; 53 #size-cells = <1>;
53 device_type = "soc"; 54 device_type = "soc";
54 ranges = <0 e0000000 00100000>; 55 ranges = <0x0 0xe0000000 0x100000>;
55 reg = <e0000000 00001000>; // CCSRBAR 1M 56 reg = <0xe0000000 0x1000>; // CCSRBAR 1M
56 bus-frequency = <0>; 57 bus-frequency = <0>;
57 58
58 memory-controller@2000 { 59 memory-controller@2000 {
59 compatible = "fsl,8555-memory-controller"; 60 compatible = "fsl,8555-memory-controller";
60 reg = <2000 1000>; 61 reg = <0x2000 0x1000>;
61 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
62 interrupts = <12 2>; 63 interrupts = <18 2>;
63 }; 64 };
64 65
65 l2-cache-controller@20000 { 66 l2-cache-controller@20000 {
66 compatible = "fsl,8555-l2-cache-controller"; 67 compatible = "fsl,8555-l2-cache-controller";
67 reg = <20000 1000>; 68 reg = <0x20000 0x1000>;
68 cache-line-size = <20>; // 32 bytes 69 cache-line-size = <32>; // 32 bytes
69 cache-size = <40000>; // L2, 256K 70 cache-size = <0x40000>; // L2, 256K
70 interrupt-parent = <&mpic>; 71 interrupt-parent = <&mpic>;
71 interrupts = <10 2>; 72 interrupts = <16 2>;
72 }; 73 };
73 74
74 i2c@3000 { 75 i2c@3000 {
@@ -76,8 +77,8 @@
76 #size-cells = <0>; 77 #size-cells = <0>;
77 cell-index = <0>; 78 cell-index = <0>;
78 compatible = "fsl-i2c"; 79 compatible = "fsl-i2c";
79 reg = <3000 100>; 80 reg = <0x3000 0x100>;
80 interrupts = <2b 2>; 81 interrupts = <43 2>;
81 interrupt-parent = <&mpic>; 82 interrupt-parent = <&mpic>;
82 dfsrr; 83 dfsrr;
83 }; 84 };
@@ -86,18 +87,18 @@
86 #address-cells = <1>; 87 #address-cells = <1>;
87 #size-cells = <0>; 88 #size-cells = <0>;
88 compatible = "fsl,gianfar-mdio"; 89 compatible = "fsl,gianfar-mdio";
89 reg = <24520 20>; 90 reg = <0x24520 0x20>;
90 91
91 phy0: ethernet-phy@0 { 92 phy0: ethernet-phy@0 {
92 interrupt-parent = <&mpic>; 93 interrupt-parent = <&mpic>;
93 interrupts = <5 1>; 94 interrupts = <5 1>;
94 reg = <0>; 95 reg = <0x0>;
95 device_type = "ethernet-phy"; 96 device_type = "ethernet-phy";
96 }; 97 };
97 phy1: ethernet-phy@1 { 98 phy1: ethernet-phy@1 {
98 interrupt-parent = <&mpic>; 99 interrupt-parent = <&mpic>;
99 interrupts = <5 1>; 100 interrupts = <5 1>;
100 reg = <1>; 101 reg = <0x1>;
101 device_type = "ethernet-phy"; 102 device_type = "ethernet-phy";
102 }; 103 };
103 }; 104 };
@@ -107,9 +108,9 @@
107 device_type = "network"; 108 device_type = "network";
108 model = "TSEC"; 109 model = "TSEC";
109 compatible = "gianfar"; 110 compatible = "gianfar";
110 reg = <24000 1000>; 111 reg = <0x24000 0x1000>;
111 local-mac-address = [ 00 00 00 00 00 00 ]; 112 local-mac-address = [ 00 00 00 00 00 00 ];
112 interrupts = <1d 2 1e 2 22 2>; 113 interrupts = <29 2 30 2 34 2>;
113 interrupt-parent = <&mpic>; 114 interrupt-parent = <&mpic>;
114 phy-handle = <&phy0>; 115 phy-handle = <&phy0>;
115 }; 116 };
@@ -119,9 +120,9 @@
119 device_type = "network"; 120 device_type = "network";
120 model = "TSEC"; 121 model = "TSEC";
121 compatible = "gianfar"; 122 compatible = "gianfar";
122 reg = <25000 1000>; 123 reg = <0x25000 0x1000>;
123 local-mac-address = [ 00 00 00 00 00 00 ]; 124 local-mac-address = [ 00 00 00 00 00 00 ];
124 interrupts = <23 2 24 2 28 2>; 125 interrupts = <35 2 36 2 40 2>;
125 interrupt-parent = <&mpic>; 126 interrupt-parent = <&mpic>;
126 phy-handle = <&phy1>; 127 phy-handle = <&phy1>;
127 }; 128 };
@@ -130,9 +131,9 @@
130 cell-index = <0>; 131 cell-index = <0>;
131 device_type = "serial"; 132 device_type = "serial";
132 compatible = "ns16550"; 133 compatible = "ns16550";
133 reg = <4500 100>; // reg base, size 134 reg = <0x4500 0x100>; // reg base, size
134 clock-frequency = <0>; // should we fill in in uboot? 135 clock-frequency = <0>; // should we fill in in uboot?
135 interrupts = <2a 2>; 136 interrupts = <42 2>;
136 interrupt-parent = <&mpic>; 137 interrupt-parent = <&mpic>;
137 }; 138 };
138 139
@@ -140,9 +141,9 @@
140 cell-index = <1>; 141 cell-index = <1>;
141 device_type = "serial"; 142 device_type = "serial";
142 compatible = "ns16550"; 143 compatible = "ns16550";
143 reg = <4600 100>; // reg base, size 144 reg = <0x4600 0x100>; // reg base, size
144 clock-frequency = <0>; // should we fill in in uboot? 145 clock-frequency = <0>; // should we fill in in uboot?
145 interrupts = <2a 2>; 146 interrupts = <42 2>;
146 interrupt-parent = <&mpic>; 147 interrupt-parent = <&mpic>;
147 }; 148 };
148 149
@@ -151,7 +152,7 @@
151 interrupt-controller; 152 interrupt-controller;
152 #address-cells = <0>; 153 #address-cells = <0>;
153 #interrupt-cells = <2>; 154 #interrupt-cells = <2>;
154 reg = <40000 40000>; 155 reg = <0x40000 0x40000>;
155 compatible = "chrp,open-pic"; 156 compatible = "chrp,open-pic";
156 device_type = "open-pic"; 157 device_type = "open-pic";
157 big-endian; 158 big-endian;
@@ -161,17 +162,17 @@
161 #address-cells = <1>; 162 #address-cells = <1>;
162 #size-cells = <1>; 163 #size-cells = <1>;
163 compatible = "fsl,mpc8555-cpm", "fsl,cpm2"; 164 compatible = "fsl,mpc8555-cpm", "fsl,cpm2";
164 reg = <919c0 30>; 165 reg = <0x919c0 0x30>;
165 ranges; 166 ranges;
166 167
167 muram@80000 { 168 muram@80000 {
168 #address-cells = <1>; 169 #address-cells = <1>;
169 #size-cells = <1>; 170 #size-cells = <1>;
170 ranges = <0 80000 10000>; 171 ranges = <0x0 0x80000 0x10000>;
171 172
172 data@0 { 173 data@0 {
173 compatible = "fsl,cpm-muram-data"; 174 compatible = "fsl,cpm-muram-data";
174 reg = <0 2000 9000 1000>; 175 reg = <0x0 0x2000 0x9000 0x1000>;
175 }; 176 };
176 }; 177 };
177 178
@@ -179,16 +180,16 @@
179 compatible = "fsl,mpc8555-brg", 180 compatible = "fsl,mpc8555-brg",
180 "fsl,cpm2-brg", 181 "fsl,cpm2-brg",
181 "fsl,cpm-brg"; 182 "fsl,cpm-brg";
182 reg = <919f0 10 915f0 10>; 183 reg = <0x919f0 0x10 0x915f0 0x10>;
183 }; 184 };
184 185
185 cpmpic: pic@90c00 { 186 cpmpic: pic@90c00 {
186 interrupt-controller; 187 interrupt-controller;
187 #address-cells = <0>; 188 #address-cells = <0>;
188 #interrupt-cells = <2>; 189 #interrupt-cells = <2>;
189 interrupts = <2e 2>; 190 interrupts = <46 2>;
190 interrupt-parent = <&mpic>; 191 interrupt-parent = <&mpic>;
191 reg = <90c00 80>; 192 reg = <0x90c00 0x80>;
192 compatible = "fsl,mpc8555-cpm-pic", "fsl,cpm2-pic"; 193 compatible = "fsl,mpc8555-cpm-pic", "fsl,cpm2-pic";
193 }; 194 };
194 }; 195 };
@@ -196,68 +197,68 @@
196 197
197 pci0: pci@e0008000 { 198 pci0: pci@e0008000 {
198 cell-index = <0>; 199 cell-index = <0>;
199 interrupt-map-mask = <1f800 0 0 7>; 200 interrupt-map-mask = <0x1f800 0x0 0x0 0x7>;
200 interrupt-map = < 201 interrupt-map = <
201 202
202 /* IDSEL 0x10 */ 203 /* IDSEL 0x10 */
203 08000 0 0 1 &mpic 0 1 204 0x8000 0x0 0x0 0x1 &mpic 0x0 0x1
204 08000 0 0 2 &mpic 1 1 205 0x8000 0x0 0x0 0x2 &mpic 0x1 0x1
205 08000 0 0 3 &mpic 2 1 206 0x8000 0x0 0x0 0x3 &mpic 0x2 0x1
206 08000 0 0 4 &mpic 3 1 207 0x8000 0x0 0x0 0x4 &mpic 0x3 0x1
207 208
208 /* IDSEL 0x11 */ 209 /* IDSEL 0x11 */
209 08800 0 0 1 &mpic 0 1 210 0x8800 0x0 0x0 0x1 &mpic 0x0 0x1
210 08800 0 0 2 &mpic 1 1 211 0x8800 0x0 0x0 0x2 &mpic 0x1 0x1
211 08800 0 0 3 &mpic 2 1 212 0x8800 0x0 0x0 0x3 &mpic 0x2 0x1
212 08800 0 0 4 &mpic 3 1 213 0x8800 0x0 0x0 0x4 &mpic 0x3 0x1
213 214
214 /* IDSEL 0x12 (Slot 1) */ 215 /* IDSEL 0x12 (Slot 1) */
215 09000 0 0 1 &mpic 0 1 216 0x9000 0x0 0x0 0x1 &mpic 0x0 0x1
216 09000 0 0 2 &mpic 1 1 217 0x9000 0x0 0x0 0x2 &mpic 0x1 0x1
217 09000 0 0 3 &mpic 2 1 218 0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
218 09000 0 0 4 &mpic 3 1 219 0x9000 0x0 0x0 0x4 &mpic 0x3 0x1
219 220
220 /* IDSEL 0x13 (Slot 2) */ 221 /* IDSEL 0x13 (Slot 2) */
221 09800 0 0 1 &mpic 1 1 222 0x9800 0x0 0x0 0x1 &mpic 0x1 0x1
222 09800 0 0 2 &mpic 2 1 223 0x9800 0x0 0x0 0x2 &mpic 0x2 0x1
223 09800 0 0 3 &mpic 3 1 224 0x9800 0x0 0x0 0x3 &mpic 0x3 0x1
224 09800 0 0 4 &mpic 0 1 225 0x9800 0x0 0x0 0x4 &mpic 0x0 0x1
225 226
226 /* IDSEL 0x14 (Slot 3) */ 227 /* IDSEL 0x14 (Slot 3) */
227 0a000 0 0 1 &mpic 2 1 228 0xa000 0x0 0x0 0x1 &mpic 0x2 0x1
228 0a000 0 0 2 &mpic 3 1 229 0xa000 0x0 0x0 0x2 &mpic 0x3 0x1
229 0a000 0 0 3 &mpic 0 1 230 0xa000 0x0 0x0 0x3 &mpic 0x0 0x1
230 0a000 0 0 4 &mpic 1 1 231 0xa000 0x0 0x0 0x4 &mpic 0x1 0x1
231 232
232 /* IDSEL 0x15 (Slot 4) */ 233 /* IDSEL 0x15 (Slot 4) */
233 0a800 0 0 1 &mpic 3 1 234 0xa800 0x0 0x0 0x1 &mpic 0x3 0x1
234 0a800 0 0 2 &mpic 0 1 235 0xa800 0x0 0x0 0x2 &mpic 0x0 0x1
235 0a800 0 0 3 &mpic 1 1 236 0xa800 0x0 0x0 0x3 &mpic 0x1 0x1
236 0a800 0 0 4 &mpic 2 1 237 0xa800 0x0 0x0 0x4 &mpic 0x2 0x1
237 238
238 /* Bus 1 (Tundra Bridge) */ 239 /* Bus 1 (Tundra Bridge) */
239 /* IDSEL 0x12 (ISA bridge) */ 240 /* IDSEL 0x12 (ISA bridge) */
240 19000 0 0 1 &mpic 0 1 241 0x19000 0x0 0x0 0x1 &mpic 0x0 0x1
241 19000 0 0 2 &mpic 1 1 242 0x19000 0x0 0x0 0x2 &mpic 0x1 0x1
242 19000 0 0 3 &mpic 2 1 243 0x19000 0x0 0x0 0x3 &mpic 0x2 0x1
243 19000 0 0 4 &mpic 3 1>; 244 0x19000 0x0 0x0 0x4 &mpic 0x3 0x1>;
244 interrupt-parent = <&mpic>; 245 interrupt-parent = <&mpic>;
245 interrupts = <18 2>; 246 interrupts = <24 2>;
246 bus-range = <0 0>; 247 bus-range = <0 0>;
247 ranges = <02000000 0 80000000 80000000 0 20000000 248 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
248 01000000 0 00000000 e2000000 0 00100000>; 249 0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
249 clock-frequency = <3f940aa>; 250 clock-frequency = <66666666>;
250 #interrupt-cells = <1>; 251 #interrupt-cells = <1>;
251 #size-cells = <2>; 252 #size-cells = <2>;
252 #address-cells = <3>; 253 #address-cells = <3>;
253 reg = <e0008000 1000>; 254 reg = <0xe0008000 0x1000>;
254 compatible = "fsl,mpc8540-pci"; 255 compatible = "fsl,mpc8540-pci";
255 device_type = "pci"; 256 device_type = "pci";
256 257
257 i8259@19000 { 258 i8259@19000 {
258 interrupt-controller; 259 interrupt-controller;
259 device_type = "interrupt-controller"; 260 device_type = "interrupt-controller";
260 reg = <19000 0 0 0 1>; 261 reg = <0x19000 0x0 0x0 0x0 0x1>;
261 #address-cells = <0>; 262 #address-cells = <0>;
262 #interrupt-cells = <2>; 263 #interrupt-cells = <2>;
263 compatible = "chrp,iic"; 264 compatible = "chrp,iic";
@@ -268,24 +269,24 @@
268 269
269 pci1: pci@e0009000 { 270 pci1: pci@e0009000 {
270 cell-index = <1>; 271 cell-index = <1>;
271 interrupt-map-mask = <f800 0 0 7>; 272 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
272 interrupt-map = < 273 interrupt-map = <
273 274
274 /* IDSEL 0x15 */ 275 /* IDSEL 0x15 */
275 a800 0 0 1 &mpic b 1 276 0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
276 a800 0 0 2 &mpic b 1 277 0xa800 0x0 0x0 0x2 &mpic 0xb 0x1
277 a800 0 0 3 &mpic b 1 278 0xa800 0x0 0x0 0x3 &mpic 0xb 0x1
278 a800 0 0 4 &mpic b 1>; 279 0xa800 0x0 0x0 0x4 &mpic 0xb 0x1>;
279 interrupt-parent = <&mpic>; 280 interrupt-parent = <&mpic>;
280 interrupts = <19 2>; 281 interrupts = <25 2>;
281 bus-range = <0 0>; 282 bus-range = <0 0>;
282 ranges = <02000000 0 a0000000 a0000000 0 20000000 283 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
283 01000000 0 00000000 e3000000 0 00100000>; 284 0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>;
284 clock-frequency = <3f940aa>; 285 clock-frequency = <66666666>;
285 #interrupt-cells = <1>; 286 #interrupt-cells = <1>;
286 #size-cells = <2>; 287 #size-cells = <2>;
287 #address-cells = <3>; 288 #address-cells = <3>;
288 reg = <e0009000 1000>; 289 reg = <0xe0009000 0x1000>;
289 compatible = "fsl,mpc8540-pci"; 290 compatible = "fsl,mpc8540-pci";
290 device_type = "pci"; 291 device_type = "pci";
291 }; 292 };
diff --git a/arch/powerpc/boot/dts/mpc8560ads.dts b/arch/powerpc/boot/dts/mpc8560ads.dts
index 639ce8a709a6..0cc16ab305d1 100644
--- a/arch/powerpc/boot/dts/mpc8560ads.dts
+++ b/arch/powerpc/boot/dts/mpc8560ads.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8560 ADS Device Tree Source 2 * MPC8560 ADS Device Tree Source
3 * 3 *
4 * Copyright 2006 Freescale Semiconductor Inc. 4 * Copyright 2006, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12 13
13/ { 14/ {
14 model = "MPC8560ADS"; 15 model = "MPC8560ADS";
@@ -32,74 +33,74 @@
32 33
33 PowerPC,8560@0 { 34 PowerPC,8560@0 {
34 device_type = "cpu"; 35 device_type = "cpu";
35 reg = <0>; 36 reg = <0x0>;
36 d-cache-line-size = <20>; // 32 bytes 37 d-cache-line-size = <32>; // 32 bytes
37 i-cache-line-size = <20>; // 32 bytes 38 i-cache-line-size = <32>; // 32 bytes
38 d-cache-size = <8000>; // L1, 32K 39 d-cache-size = <0x8000>; // L1, 32K
39 i-cache-size = <8000>; // L1, 32K 40 i-cache-size = <0x8000>; // L1, 32K
40 timebase-frequency = <04ead9a0>; 41 timebase-frequency = <82500000>;
41 bus-frequency = <13ab6680>; 42 bus-frequency = <330000000>;
42 clock-frequency = <312c8040>; 43 clock-frequency = <825000000>;
43 }; 44 };
44 }; 45 };
45 46
46 memory { 47 memory {
47 device_type = "memory"; 48 device_type = "memory";
48 reg = <00000000 10000000>; 49 reg = <0x0 0x10000000>;
49 }; 50 };
50 51
51 soc8560@e0000000 { 52 soc8560@e0000000 {
52 #address-cells = <1>; 53 #address-cells = <1>;
53 #size-cells = <1>; 54 #size-cells = <1>;
54 device_type = "soc"; 55 device_type = "soc";
55 ranges = <0 e0000000 00100000>; 56 ranges = <0x0 0xe0000000 0x100000>;
56 reg = <e0000000 00000200>; 57 reg = <0xe0000000 0x200>;
57 bus-frequency = <13ab6680>; 58 bus-frequency = <330000000>;
58 59
59 memory-controller@2000 { 60 memory-controller@2000 {
60 compatible = "fsl,8540-memory-controller"; 61 compatible = "fsl,8540-memory-controller";
61 reg = <2000 1000>; 62 reg = <0x2000 0x1000>;
62 interrupt-parent = <&mpic>; 63 interrupt-parent = <&mpic>;
63 interrupts = <12 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,8540-l2-cache-controller";
68 reg = <20000 1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <20>; // 32 bytes 70 cache-line-size = <32>; // 32 bytes
70 cache-size = <40000>; // L2, 256K 71 cache-size = <0x40000>; // L2, 256K
71 interrupt-parent = <&mpic>; 72 interrupt-parent = <&mpic>;
72 interrupts = <10 2>; 73 interrupts = <16 2>;
73 }; 74 };
74 75
75 mdio@24520 { 76 mdio@24520 {
76 #address-cells = <1>; 77 #address-cells = <1>;
77 #size-cells = <0>; 78 #size-cells = <0>;
78 compatible = "fsl,gianfar-mdio"; 79 compatible = "fsl,gianfar-mdio";
79 reg = <24520 20>; 80 reg = <0x24520 0x20>;
80 81
81 phy0: ethernet-phy@0 { 82 phy0: ethernet-phy@0 {
82 interrupt-parent = <&mpic>; 83 interrupt-parent = <&mpic>;
83 interrupts = <5 1>; 84 interrupts = <5 1>;
84 reg = <0>; 85 reg = <0x0>;
85 device_type = "ethernet-phy"; 86 device_type = "ethernet-phy";
86 }; 87 };
87 phy1: ethernet-phy@1 { 88 phy1: ethernet-phy@1 {
88 interrupt-parent = <&mpic>; 89 interrupt-parent = <&mpic>;
89 interrupts = <5 1>; 90 interrupts = <5 1>;
90 reg = <1>; 91 reg = <0x1>;
91 device_type = "ethernet-phy"; 92 device_type = "ethernet-phy";
92 }; 93 };
93 phy2: ethernet-phy@2 { 94 phy2: ethernet-phy@2 {
94 interrupt-parent = <&mpic>; 95 interrupt-parent = <&mpic>;
95 interrupts = <7 1>; 96 interrupts = <7 1>;
96 reg = <2>; 97 reg = <0x2>;
97 device_type = "ethernet-phy"; 98 device_type = "ethernet-phy";
98 }; 99 };
99 phy3: ethernet-phy@3 { 100 phy3: ethernet-phy@3 {
100 interrupt-parent = <&mpic>; 101 interrupt-parent = <&mpic>;
101 interrupts = <7 1>; 102 interrupts = <7 1>;
102 reg = <3>; 103 reg = <0x3>;
103 device_type = "ethernet-phy"; 104 device_type = "ethernet-phy";
104 }; 105 };
105 }; 106 };
@@ -109,9 +110,9 @@
109 device_type = "network"; 110 device_type = "network";
110 model = "TSEC"; 111 model = "TSEC";
111 compatible = "gianfar"; 112 compatible = "gianfar";
112 reg = <24000 1000>; 113 reg = <0x24000 0x1000>;
113 local-mac-address = [ 00 00 00 00 00 00 ]; 114 local-mac-address = [ 00 00 00 00 00 00 ];
114 interrupts = <1d 2 1e 2 22 2>; 115 interrupts = <29 2 30 2 34 2>;
115 interrupt-parent = <&mpic>; 116 interrupt-parent = <&mpic>;
116 phy-handle = <&phy0>; 117 phy-handle = <&phy0>;
117 }; 118 };
@@ -121,9 +122,9 @@
121 device_type = "network"; 122 device_type = "network";
122 model = "TSEC"; 123 model = "TSEC";
123 compatible = "gianfar"; 124 compatible = "gianfar";
124 reg = <25000 1000>; 125 reg = <0x25000 0x1000>;
125 local-mac-address = [ 00 00 00 00 00 00 ]; 126 local-mac-address = [ 00 00 00 00 00 00 ];
126 interrupts = <23 2 24 2 28 2>; 127 interrupts = <35 2 36 2 40 2>;
127 interrupt-parent = <&mpic>; 128 interrupt-parent = <&mpic>;
128 phy-handle = <&phy1>; 129 phy-handle = <&phy1>;
129 }; 130 };
@@ -132,7 +133,7 @@
132 interrupt-controller; 133 interrupt-controller;
133 #address-cells = <0>; 134 #address-cells = <0>;
134 #interrupt-cells = <2>; 135 #interrupt-cells = <2>;
135 reg = <40000 40000>; 136 reg = <0x40000 0x40000>;
136 device_type = "open-pic"; 137 device_type = "open-pic";
137 }; 138 };
138 139
@@ -140,17 +141,17 @@
140 #address-cells = <1>; 141 #address-cells = <1>;
141 #size-cells = <1>; 142 #size-cells = <1>;
142 compatible = "fsl,mpc8560-cpm", "fsl,cpm2"; 143 compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
143 reg = <919c0 30>; 144 reg = <0x919c0 0x30>;
144 ranges; 145 ranges;
145 146
146 muram@80000 { 147 muram@80000 {
147 #address-cells = <1>; 148 #address-cells = <1>;
148 #size-cells = <1>; 149 #size-cells = <1>;
149 ranges = <0 80000 10000>; 150 ranges = <0x0 0x80000 0x10000>;
150 151
151 data@0 { 152 data@0 {
152 compatible = "fsl,cpm-muram-data"; 153 compatible = "fsl,cpm-muram-data";
153 reg = <0 4000 9000 2000>; 154 reg = <0x0 0x4000 0x9000 0x2000>;
154 }; 155 };
155 }; 156 };
156 157
@@ -158,17 +159,17 @@
158 compatible = "fsl,mpc8560-brg", 159 compatible = "fsl,mpc8560-brg",
159 "fsl,cpm2-brg", 160 "fsl,cpm2-brg",
160 "fsl,cpm-brg"; 161 "fsl,cpm-brg";
161 reg = <919f0 10 915f0 10>; 162 reg = <0x919f0 0x10 0x915f0 0x10>;
162 clock-frequency = <d#165000000>; 163 clock-frequency = <165000000>;
163 }; 164 };
164 165
165 cpmpic: pic@90c00 { 166 cpmpic: pic@90c00 {
166 interrupt-controller; 167 interrupt-controller;
167 #address-cells = <0>; 168 #address-cells = <0>;
168 #interrupt-cells = <2>; 169 #interrupt-cells = <2>;
169 interrupts = <2e 2>; 170 interrupts = <46 2>;
170 interrupt-parent = <&mpic>; 171 interrupt-parent = <&mpic>;
171 reg = <90c00 80>; 172 reg = <0x90c00 0x80>;
172 compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic"; 173 compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
173 }; 174 };
174 175
@@ -176,11 +177,11 @@
176 device_type = "serial"; 177 device_type = "serial";
177 compatible = "fsl,mpc8560-scc-uart", 178 compatible = "fsl,mpc8560-scc-uart",
178 "fsl,cpm2-scc-uart"; 179 "fsl,cpm2-scc-uart";
179 reg = <91a00 20 88000 100>; 180 reg = <0x91a00 0x20 0x88000 0x100>;
180 fsl,cpm-brg = <1>; 181 fsl,cpm-brg = <1>;
181 fsl,cpm-command = <00800000>; 182 fsl,cpm-command = <0x800000>;
182 current-speed = <1c200>; 183 current-speed = <115200>;
183 interrupts = <28 8>; 184 interrupts = <40 8>;
184 interrupt-parent = <&cpmpic>; 185 interrupt-parent = <&cpmpic>;
185 }; 186 };
186 187
@@ -188,11 +189,11 @@
188 device_type = "serial"; 189 device_type = "serial";
189 compatible = "fsl,mpc8560-scc-uart", 190 compatible = "fsl,mpc8560-scc-uart",
190 "fsl,cpm2-scc-uart"; 191 "fsl,cpm2-scc-uart";
191 reg = <91a20 20 88100 100>; 192 reg = <0x91a20 0x20 0x88100 0x100>;
192 fsl,cpm-brg = <2>; 193 fsl,cpm-brg = <2>;
193 fsl,cpm-command = <04a00000>; 194 fsl,cpm-command = <0x4a00000>;
194 current-speed = <1c200>; 195 current-speed = <115200>;
195 interrupts = <29 8>; 196 interrupts = <41 8>;
196 interrupt-parent = <&cpmpic>; 197 interrupt-parent = <&cpmpic>;
197 }; 198 };
198 199
@@ -200,10 +201,10 @@
200 device_type = "network"; 201 device_type = "network";
201 compatible = "fsl,mpc8560-fcc-enet", 202 compatible = "fsl,mpc8560-fcc-enet",
202 "fsl,cpm2-fcc-enet"; 203 "fsl,cpm2-fcc-enet";
203 reg = <91320 20 88500 100 913b0 1>; 204 reg = <0x91320 0x20 0x88500 0x100 0x913b0 0x1>;
204 local-mac-address = [ 00 00 00 00 00 00 ]; 205 local-mac-address = [ 00 00 00 00 00 00 ];
205 fsl,cpm-command = <16200300>; 206 fsl,cpm-command = <0x16200300>;
206 interrupts = <21 8>; 207 interrupts = <33 8>;
207 interrupt-parent = <&cpmpic>; 208 interrupt-parent = <&cpmpic>;
208 phy-handle = <&phy2>; 209 phy-handle = <&phy2>;
209 }; 210 };
@@ -212,10 +213,10 @@
212 device_type = "network"; 213 device_type = "network";
213 compatible = "fsl,mpc8560-fcc-enet", 214 compatible = "fsl,mpc8560-fcc-enet",
214 "fsl,cpm2-fcc-enet"; 215 "fsl,cpm2-fcc-enet";
215 reg = <91340 20 88600 100 913d0 1>; 216 reg = <0x91340 0x20 0x88600 0x100 0x913d0 0x1>;
216 local-mac-address = [ 00 00 00 00 00 00 ]; 217 local-mac-address = [ 00 00 00 00 00 00 ];
217 fsl,cpm-command = <1a400300>; 218 fsl,cpm-command = <0x1a400300>;
218 interrupts = <22 8>; 219 interrupts = <34 8>;
219 interrupt-parent = <&cpmpic>; 220 interrupt-parent = <&cpmpic>;
220 phy-handle = <&phy3>; 221 phy-handle = <&phy3>;
221 }; 222 };
@@ -229,87 +230,87 @@
229 #address-cells = <3>; 230 #address-cells = <3>;
230 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci"; 231 compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
231 device_type = "pci"; 232 device_type = "pci";
232 reg = <e0008000 1000>; 233 reg = <0xe0008000 0x1000>;
233 clock-frequency = <3f940aa>; 234 clock-frequency = <66666666>;
234 interrupt-map-mask = <f800 0 0 7>; 235 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
235 interrupt-map = < 236 interrupt-map = <
236 237
237 /* IDSEL 0x2 */ 238 /* IDSEL 0x2 */
238 1000 0 0 1 &mpic 1 1 239 0x1000 0x0 0x0 0x1 &mpic 0x1 0x1
239 1000 0 0 2 &mpic 2 1 240 0x1000 0x0 0x0 0x2 &mpic 0x2 0x1
240 1000 0 0 3 &mpic 3 1 241 0x1000 0x0 0x0 0x3 &mpic 0x3 0x1
241 1000 0 0 4 &mpic 4 1 242 0x1000 0x0 0x0 0x4 &mpic 0x4 0x1
242 243
243 /* IDSEL 0x3 */ 244 /* IDSEL 0x3 */
244 1800 0 0 1 &mpic 4 1 245 0x1800 0x0 0x0 0x1 &mpic 0x4 0x1
245 1800 0 0 2 &mpic 1 1 246 0x1800 0x0 0x0 0x2 &mpic 0x1 0x1
246 1800 0 0 3 &mpic 2 1 247 0x1800 0x0 0x0 0x3 &mpic 0x2 0x1
247 1800 0 0 4 &mpic 3 1 248 0x1800 0x0 0x0 0x4 &mpic 0x3 0x1
248 249
249 /* IDSEL 0x4 */ 250 /* IDSEL 0x4 */
250 2000 0 0 1 &mpic 3 1 251 0x2000 0x0 0x0 0x1 &mpic 0x3 0x1
251 2000 0 0 2 &mpic 4 1 252 0x2000 0x0 0x0 0x2 &mpic 0x4 0x1
252 2000 0 0 3 &mpic 1 1 253 0x2000 0x0 0x0 0x3 &mpic 0x1 0x1
253 2000 0 0 4 &mpic 2 1 254 0x2000 0x0 0x0 0x4 &mpic 0x2 0x1
254 255
255 /* IDSEL 0x5 */ 256 /* IDSEL 0x5 */
256 2800 0 0 1 &mpic 2 1 257 0x2800 0x0 0x0 0x1 &mpic 0x2 0x1
257 2800 0 0 2 &mpic 3 1 258 0x2800 0x0 0x0 0x2 &mpic 0x3 0x1
258 2800 0 0 3 &mpic 4 1 259 0x2800 0x0 0x0 0x3 &mpic 0x4 0x1
259 2800 0 0 4 &mpic 1 1 260 0x2800 0x0 0x0 0x4 &mpic 0x1 0x1
260 261
261 /* IDSEL 12 */ 262 /* IDSEL 12 */
262 6000 0 0 1 &mpic 1 1 263 0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
263 6000 0 0 2 &mpic 2 1 264 0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
264 6000 0 0 3 &mpic 3 1 265 0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
265 6000 0 0 4 &mpic 4 1 266 0x6000 0x0 0x0 0x4 &mpic 0x4 0x1
266 267
267 /* IDSEL 13 */ 268 /* IDSEL 13 */
268 6800 0 0 1 &mpic 4 1 269 0x6800 0x0 0x0 0x1 &mpic 0x4 0x1
269 6800 0 0 2 &mpic 1 1 270 0x6800 0x0 0x0 0x2 &mpic 0x1 0x1
270 6800 0 0 3 &mpic 2 1 271 0x6800 0x0 0x0 0x3 &mpic 0x2 0x1
271 6800 0 0 4 &mpic 3 1 272 0x6800 0x0 0x0 0x4 &mpic 0x3 0x1
272 273
273 /* IDSEL 14*/ 274 /* IDSEL 14*/
274 7000 0 0 1 &mpic 3 1 275 0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
275 7000 0 0 2 &mpic 4 1 276 0x7000 0x0 0x0 0x2 &mpic 0x4 0x1
276 7000 0 0 3 &mpic 1 1 277 0x7000 0x0 0x0 0x3 &mpic 0x1 0x1
277 7000 0 0 4 &mpic 2 1 278 0x7000 0x0 0x0 0x4 &mpic 0x2 0x1
278 279
279 /* IDSEL 15 */ 280 /* IDSEL 15 */
280 7800 0 0 1 &mpic 2 1 281 0x7800 0x0 0x0 0x1 &mpic 0x2 0x1
281 7800 0 0 2 &mpic 3 1 282 0x7800 0x0 0x0 0x2 &mpic 0x3 0x1
282 7800 0 0 3 &mpic 4 1 283 0x7800 0x0 0x0 0x3 &mpic 0x4 0x1
283 7800 0 0 4 &mpic 1 1 284 0x7800 0x0 0x0 0x4 &mpic 0x1 0x1
284 285
285 /* IDSEL 18 */ 286 /* IDSEL 18 */
286 9000 0 0 1 &mpic 1 1 287 0x9000 0x0 0x0 0x1 &mpic 0x1 0x1
287 9000 0 0 2 &mpic 2 1 288 0x9000 0x0 0x0 0x2 &mpic 0x2 0x1
288 9000 0 0 3 &mpic 3 1 289 0x9000 0x0 0x0 0x3 &mpic 0x3 0x1
289 9000 0 0 4 &mpic 4 1 290 0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
290 291
291 /* IDSEL 19 */ 292 /* IDSEL 19 */
292 9800 0 0 1 &mpic 4 1 293 0x9800 0x0 0x0 0x1 &mpic 0x4 0x1
293 9800 0 0 2 &mpic 1 1 294 0x9800 0x0 0x0 0x2 &mpic 0x1 0x1
294 9800 0 0 3 &mpic 2 1 295 0x9800 0x0 0x0 0x3 &mpic 0x2 0x1
295 9800 0 0 4 &mpic 3 1 296 0x9800 0x0 0x0 0x4 &mpic 0x3 0x1
296 297
297 /* IDSEL 20 */ 298 /* IDSEL 20 */
298 a000 0 0 1 &mpic 3 1 299 0xa000 0x0 0x0 0x1 &mpic 0x3 0x1
299 a000 0 0 2 &mpic 4 1 300 0xa000 0x0 0x0 0x2 &mpic 0x4 0x1
300 a000 0 0 3 &mpic 1 1 301 0xa000 0x0 0x0 0x3 &mpic 0x1 0x1
301 a000 0 0 4 &mpic 2 1 302 0xa000 0x0 0x0 0x4 &mpic 0x2 0x1
302 303
303 /* IDSEL 21 */ 304 /* IDSEL 21 */
304 a800 0 0 1 &mpic 2 1 305 0xa800 0x0 0x0 0x1 &mpic 0x2 0x1
305 a800 0 0 2 &mpic 3 1 306 0xa800 0x0 0x0 0x2 &mpic 0x3 0x1
306 a800 0 0 3 &mpic 4 1 307 0xa800 0x0 0x0 0x3 &mpic 0x4 0x1
307 a800 0 0 4 &mpic 1 1>; 308 0xa800 0x0 0x0 0x4 &mpic 0x1 0x1>;
308 309
309 interrupt-parent = <&mpic>; 310 interrupt-parent = <&mpic>;
310 interrupts = <18 2>; 311 interrupts = <24 2>;
311 bus-range = <0 0>; 312 bus-range = <0 0>;
312 ranges = <02000000 0 80000000 80000000 0 20000000 313 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
313 01000000 0 00000000 e2000000 0 01000000>; 314 0x1000000 0x0 0x0 0xe2000000 0x0 0x1000000>;
314 }; 315 };
315}; 316};
diff --git a/arch/powerpc/boot/dts/mpc8568mds.dts b/arch/powerpc/boot/dts/mpc8568mds.dts
index 97bc048f2158..a025a8ededc5 100644
--- a/arch/powerpc/boot/dts/mpc8568mds.dts
+++ b/arch/powerpc/boot/dts/mpc8568mds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8568E MDS Device Tree Source 2 * MPC8568E MDS Device Tree Source
3 * 3 *
4 * Copyright 2007 Freescale Semiconductor Inc. 4 * Copyright 2007, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,10 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12 12/dts-v1/;
13/*
14/memreserve/ 00000000 1000000;
15*/
16 13
17/ { 14/ {
18 model = "MPC8568EMDS"; 15 model = "MPC8568EMDS";
@@ -37,11 +34,11 @@
37 34
38 PowerPC,8568@0 { 35 PowerPC,8568@0 {
39 device_type = "cpu"; 36 device_type = "cpu";
40 reg = <0>; 37 reg = <0x0>;
41 d-cache-line-size = <20>; // 32 bytes 38 d-cache-line-size = <32>; // 32 bytes
42 i-cache-line-size = <20>; // 32 bytes 39 i-cache-line-size = <32>; // 32 bytes
43 d-cache-size = <8000>; // L1, 32K 40 d-cache-size = <0x8000>; // L1, 32K
44 i-cache-size = <8000>; // L1, 32K 41 i-cache-size = <0x8000>; // L1, 32K
45 timebase-frequency = <0>; 42 timebase-frequency = <0>;
46 bus-frequency = <0>; 43 bus-frequency = <0>;
47 clock-frequency = <0>; 44 clock-frequency = <0>;
@@ -50,36 +47,36 @@
50 47
51 memory { 48 memory {
52 device_type = "memory"; 49 device_type = "memory";
53 reg = <00000000 10000000>; 50 reg = <0x0 0x10000000>;
54 }; 51 };
55 52
56 bcsr@f8000000 { 53 bcsr@f8000000 {
57 device_type = "board-control"; 54 device_type = "board-control";
58 reg = <f8000000 8000>; 55 reg = <0xf8000000 0x8000>;
59 }; 56 };
60 57
61 soc8568@e0000000 { 58 soc8568@e0000000 {
62 #address-cells = <1>; 59 #address-cells = <1>;
63 #size-cells = <1>; 60 #size-cells = <1>;
64 device_type = "soc"; 61 device_type = "soc";
65 ranges = <0 e0000000 00100000>; 62 ranges = <0x0 0xe0000000 0x100000>;
66 reg = <e0000000 00001000>; 63 reg = <0xe0000000 0x1000>;
67 bus-frequency = <0>; 64 bus-frequency = <0>;
68 65
69 memory-controller@2000 { 66 memory-controller@2000 {
70 compatible = "fsl,8568-memory-controller"; 67 compatible = "fsl,8568-memory-controller";
71 reg = <2000 1000>; 68 reg = <0x2000 0x1000>;
72 interrupt-parent = <&mpic>; 69 interrupt-parent = <&mpic>;
73 interrupts = <12 2>; 70 interrupts = <18 2>;
74 }; 71 };
75 72
76 l2-cache-controller@20000 { 73 l2-cache-controller@20000 {
77 compatible = "fsl,8568-l2-cache-controller"; 74 compatible = "fsl,8568-l2-cache-controller";
78 reg = <20000 1000>; 75 reg = <0x20000 0x1000>;
79 cache-line-size = <20>; // 32 bytes 76 cache-line-size = <32>; // 32 bytes
80 cache-size = <80000>; // L2, 512K 77 cache-size = <0x80000>; // L2, 512K
81 interrupt-parent = <&mpic>; 78 interrupt-parent = <&mpic>;
82 interrupts = <10 2>; 79 interrupts = <16 2>;
83 }; 80 };
84 81
85 i2c@3000 { 82 i2c@3000 {
@@ -87,14 +84,14 @@
87 #size-cells = <0>; 84 #size-cells = <0>;
88 cell-index = <0>; 85 cell-index = <0>;
89 compatible = "fsl-i2c"; 86 compatible = "fsl-i2c";
90 reg = <3000 100>; 87 reg = <0x3000 0x100>;
91 interrupts = <2b 2>; 88 interrupts = <43 2>;
92 interrupt-parent = <&mpic>; 89 interrupt-parent = <&mpic>;
93 dfsrr; 90 dfsrr;
94 91
95 rtc@68 { 92 rtc@68 {
96 compatible = "dallas,ds1374"; 93 compatible = "dallas,ds1374";
97 reg = <68>; 94 reg = <0x68>;
98 }; 95 };
99 }; 96 };
100 97
@@ -103,8 +100,8 @@
103 #size-cells = <0>; 100 #size-cells = <0>;
104 cell-index = <1>; 101 cell-index = <1>;
105 compatible = "fsl-i2c"; 102 compatible = "fsl-i2c";
106 reg = <3100 100>; 103 reg = <0x3100 0x100>;
107 interrupts = <2b 2>; 104 interrupts = <43 2>;
108 interrupt-parent = <&mpic>; 105 interrupt-parent = <&mpic>;
109 dfsrr; 106 dfsrr;
110 }; 107 };
@@ -113,30 +110,30 @@
113 #address-cells = <1>; 110 #address-cells = <1>;
114 #size-cells = <0>; 111 #size-cells = <0>;
115 compatible = "fsl,gianfar-mdio"; 112 compatible = "fsl,gianfar-mdio";
116 reg = <24520 20>; 113 reg = <0x24520 0x20>;
117 114
118 phy0: ethernet-phy@7 { 115 phy0: ethernet-phy@7 {
119 interrupt-parent = <&mpic>; 116 interrupt-parent = <&mpic>;
120 interrupts = <1 1>; 117 interrupts = <1 1>;
121 reg = <7>; 118 reg = <0x7>;
122 device_type = "ethernet-phy"; 119 device_type = "ethernet-phy";
123 }; 120 };
124 phy1: ethernet-phy@1 { 121 phy1: ethernet-phy@1 {
125 interrupt-parent = <&mpic>; 122 interrupt-parent = <&mpic>;
126 interrupts = <2 1>; 123 interrupts = <2 1>;
127 reg = <1>; 124 reg = <0x1>;
128 device_type = "ethernet-phy"; 125 device_type = "ethernet-phy";
129 }; 126 };
130 phy2: ethernet-phy@2 { 127 phy2: ethernet-phy@2 {
131 interrupt-parent = <&mpic>; 128 interrupt-parent = <&mpic>;
132 interrupts = <1 1>; 129 interrupts = <1 1>;
133 reg = <2>; 130 reg = <0x2>;
134 device_type = "ethernet-phy"; 131 device_type = "ethernet-phy";
135 }; 132 };
136 phy3: ethernet-phy@3 { 133 phy3: ethernet-phy@3 {
137 interrupt-parent = <&mpic>; 134 interrupt-parent = <&mpic>;
138 interrupts = <2 1>; 135 interrupts = <2 1>;
139 reg = <3>; 136 reg = <0x3>;
140 device_type = "ethernet-phy"; 137 device_type = "ethernet-phy";
141 }; 138 };
142 }; 139 };
@@ -146,9 +143,9 @@
146 device_type = "network"; 143 device_type = "network";
147 model = "eTSEC"; 144 model = "eTSEC";
148 compatible = "gianfar"; 145 compatible = "gianfar";
149 reg = <24000 1000>; 146 reg = <0x24000 0x1000>;
150 local-mac-address = [ 00 00 00 00 00 00 ]; 147 local-mac-address = [ 00 00 00 00 00 00 ];
151 interrupts = <1d 2 1e 2 22 2>; 148 interrupts = <29 2 30 2 34 2>;
152 interrupt-parent = <&mpic>; 149 interrupt-parent = <&mpic>;
153 phy-handle = <&phy2>; 150 phy-handle = <&phy2>;
154 }; 151 };
@@ -158,9 +155,9 @@
158 device_type = "network"; 155 device_type = "network";
159 model = "eTSEC"; 156 model = "eTSEC";
160 compatible = "gianfar"; 157 compatible = "gianfar";
161 reg = <25000 1000>; 158 reg = <0x25000 0x1000>;
162 local-mac-address = [ 00 00 00 00 00 00 ]; 159 local-mac-address = [ 00 00 00 00 00 00 ];
163 interrupts = <23 2 24 2 28 2>; 160 interrupts = <35 2 36 2 40 2>;
164 interrupt-parent = <&mpic>; 161 interrupt-parent = <&mpic>;
165 phy-handle = <&phy3>; 162 phy-handle = <&phy3>;
166 }; 163 };
@@ -169,15 +166,15 @@
169 cell-index = <0>; 166 cell-index = <0>;
170 device_type = "serial"; 167 device_type = "serial";
171 compatible = "ns16550"; 168 compatible = "ns16550";
172 reg = <4500 100>; 169 reg = <0x4500 0x100>;
173 clock-frequency = <0>; 170 clock-frequency = <0>;
174 interrupts = <2a 2>; 171 interrupts = <42 2>;
175 interrupt-parent = <&mpic>; 172 interrupt-parent = <&mpic>;
176 }; 173 };
177 174
178 global-utilities@e0000 { //global utilities block 175 global-utilities@e0000 { //global utilities block
179 compatible = "fsl,mpc8548-guts"; 176 compatible = "fsl,mpc8548-guts";
180 reg = <e0000 1000>; 177 reg = <0xe0000 0x1000>;
181 fsl,has-rstcr; 178 fsl,has-rstcr;
182 }; 179 };
183 180
@@ -185,9 +182,9 @@
185 cell-index = <1>; 182 cell-index = <1>;
186 device_type = "serial"; 183 device_type = "serial";
187 compatible = "ns16550"; 184 compatible = "ns16550";
188 reg = <4600 100>; 185 reg = <0x4600 0x100>;
189 clock-frequency = <0>; 186 clock-frequency = <0>;
190 interrupts = <2a 2>; 187 interrupts = <42 2>;
191 interrupt-parent = <&mpic>; 188 interrupt-parent = <&mpic>;
192 }; 189 };
193 190
@@ -195,13 +192,13 @@
195 device_type = "crypto"; 192 device_type = "crypto";
196 model = "SEC2"; 193 model = "SEC2";
197 compatible = "talitos"; 194 compatible = "talitos";
198 reg = <30000 f000>; 195 reg = <0x30000 0xf000>;
199 interrupts = <2d 2>; 196 interrupts = <45 2>;
200 interrupt-parent = <&mpic>; 197 interrupt-parent = <&mpic>;
201 num-channels = <4>; 198 num-channels = <4>;
202 channel-fifo-len = <18>; 199 channel-fifo-len = <24>;
203 exec-units-mask = <000000fe>; 200 exec-units-mask = <0xfe>;
204 descriptor-types-mask = <012b0ebf>; 201 descriptor-types-mask = <0x12b0ebf>;
205 }; 202 };
206 203
207 mpic: pic@40000 { 204 mpic: pic@40000 {
@@ -209,73 +206,73 @@
209 interrupt-controller; 206 interrupt-controller;
210 #address-cells = <0>; 207 #address-cells = <0>;
211 #interrupt-cells = <2>; 208 #interrupt-cells = <2>;
212 reg = <40000 40000>; 209 reg = <0x40000 0x40000>;
213 compatible = "chrp,open-pic"; 210 compatible = "chrp,open-pic";
214 device_type = "open-pic"; 211 device_type = "open-pic";
215 big-endian; 212 big-endian;
216 }; 213 };
217 214
218 par_io@e0100 { 215 par_io@e0100 {
219 reg = <e0100 100>; 216 reg = <0xe0100 0x100>;
220 device_type = "par_io"; 217 device_type = "par_io";
221 num-ports = <7>; 218 num-ports = <7>;
222 219
223 pio1: ucc_pin@01 { 220 pio1: ucc_pin@01 {
224 pio-map = < 221 pio-map = <
225 /* port pin dir open_drain assignment has_irq */ 222 /* port pin dir open_drain assignment has_irq */
226 4 0a 1 0 2 0 /* TxD0 */ 223 0x4 0xa 0x1 0x0 0x2 0x0 /* TxD0 */
227 4 09 1 0 2 0 /* TxD1 */ 224 0x4 0x9 0x1 0x0 0x2 0x0 /* TxD1 */
228 4 08 1 0 2 0 /* TxD2 */ 225 0x4 0x8 0x1 0x0 0x2 0x0 /* TxD2 */
229 4 07 1 0 2 0 /* TxD3 */ 226 0x4 0x7 0x1 0x0 0x2 0x0 /* TxD3 */
230 4 17 1 0 2 0 /* TxD4 */ 227 0x4 0x17 0x1 0x0 0x2 0x0 /* TxD4 */
231 4 16 1 0 2 0 /* TxD5 */ 228 0x4 0x16 0x1 0x0 0x2 0x0 /* TxD5 */
232 4 15 1 0 2 0 /* TxD6 */ 229 0x4 0x15 0x1 0x0 0x2 0x0 /* TxD6 */
233 4 14 1 0 2 0 /* TxD7 */ 230 0x4 0x14 0x1 0x0 0x2 0x0 /* TxD7 */
234 4 0f 2 0 2 0 /* RxD0 */ 231 0x4 0xf 0x2 0x0 0x2 0x0 /* RxD0 */
235 4 0e 2 0 2 0 /* RxD1 */ 232 0x4 0xe 0x2 0x0 0x2 0x0 /* RxD1 */
236 4 0d 2 0 2 0 /* RxD2 */ 233 0x4 0xd 0x2 0x0 0x2 0x0 /* RxD2 */
237 4 0c 2 0 2 0 /* RxD3 */ 234 0x4 0xc 0x2 0x0 0x2 0x0 /* RxD3 */
238 4 1d 2 0 2 0 /* RxD4 */ 235 0x4 0x1d 0x2 0x0 0x2 0x0 /* RxD4 */
239 4 1c 2 0 2 0 /* RxD5 */ 236 0x4 0x1c 0x2 0x0 0x2 0x0 /* RxD5 */
240 4 1b 2 0 2 0 /* RxD6 */ 237 0x4 0x1b 0x2 0x0 0x2 0x0 /* RxD6 */
241 4 1a 2 0 2 0 /* RxD7 */ 238 0x4 0x1a 0x2 0x0 0x2 0x0 /* RxD7 */
242 4 0b 1 0 2 0 /* TX_EN */ 239 0x4 0xb 0x1 0x0 0x2 0x0 /* TX_EN */
243 4 18 1 0 2 0 /* TX_ER */ 240 0x4 0x18 0x1 0x0 0x2 0x0 /* TX_ER */
244 4 10 2 0 2 0 /* RX_DV */ 241 0x4 0x10 0x2 0x0 0x2 0x0 /* RX_DV */
245 4 1e 2 0 2 0 /* RX_ER */ 242 0x4 0x1e 0x2 0x0 0x2 0x0 /* RX_ER */
246 4 11 2 0 2 0 /* RX_CLK */ 243 0x4 0x11 0x2 0x0 0x2 0x0 /* RX_CLK */
247 4 13 1 0 2 0 /* GTX_CLK */ 244 0x4 0x13 0x1 0x0 0x2 0x0 /* GTX_CLK */
248 1 1f 2 0 3 0>; /* GTX125 */ 245 0x1 0x1f 0x2 0x0 0x3 0x0>; /* GTX125 */
249 }; 246 };
250 247
251 pio2: ucc_pin@02 { 248 pio2: ucc_pin@02 {
252 pio-map = < 249 pio-map = <
253 /* port pin dir open_drain assignment has_irq */ 250 /* port pin dir open_drain assignment has_irq */
254 5 0a 1 0 2 0 /* TxD0 */ 251 0x5 0xa 0x1 0x0 0x2 0x0 /* TxD0 */
255 5 09 1 0 2 0 /* TxD1 */ 252 0x5 0x9 0x1 0x0 0x2 0x0 /* TxD1 */
256 5 08 1 0 2 0 /* TxD2 */ 253 0x5 0x8 0x1 0x0 0x2 0x0 /* TxD2 */
257 5 07 1 0 2 0 /* TxD3 */ 254 0x5 0x7 0x1 0x0 0x2 0x0 /* TxD3 */
258 5 17 1 0 2 0 /* TxD4 */ 255 0x5 0x17 0x1 0x0 0x2 0x0 /* TxD4 */
259 5 16 1 0 2 0 /* TxD5 */ 256 0x5 0x16 0x1 0x0 0x2 0x0 /* TxD5 */
260 5 15 1 0 2 0 /* TxD6 */ 257 0x5 0x15 0x1 0x0 0x2 0x0 /* TxD6 */
261 5 14 1 0 2 0 /* TxD7 */ 258 0x5 0x14 0x1 0x0 0x2 0x0 /* TxD7 */
262 5 0f 2 0 2 0 /* RxD0 */ 259 0x5 0xf 0x2 0x0 0x2 0x0 /* RxD0 */
263 5 0e 2 0 2 0 /* RxD1 */ 260 0x5 0xe 0x2 0x0 0x2 0x0 /* RxD1 */
264 5 0d 2 0 2 0 /* RxD2 */ 261 0x5 0xd 0x2 0x0 0x2 0x0 /* RxD2 */
265 5 0c 2 0 2 0 /* RxD3 */ 262 0x5 0xc 0x2 0x0 0x2 0x0 /* RxD3 */
266 5 1d 2 0 2 0 /* RxD4 */ 263 0x5 0x1d 0x2 0x0 0x2 0x0 /* RxD4 */
267 5 1c 2 0 2 0 /* RxD5 */ 264 0x5 0x1c 0x2 0x0 0x2 0x0 /* RxD5 */
268 5 1b 2 0 2 0 /* RxD6 */ 265 0x5 0x1b 0x2 0x0 0x2 0x0 /* RxD6 */
269 5 1a 2 0 2 0 /* RxD7 */ 266 0x5 0x1a 0x2 0x0 0x2 0x0 /* RxD7 */
270 5 0b 1 0 2 0 /* TX_EN */ 267 0x5 0xb 0x1 0x0 0x2 0x0 /* TX_EN */
271 5 18 1 0 2 0 /* TX_ER */ 268 0x5 0x18 0x1 0x0 0x2 0x0 /* TX_ER */
272 5 10 2 0 2 0 /* RX_DV */ 269 0x5 0x10 0x2 0x0 0x2 0x0 /* RX_DV */
273 5 1e 2 0 2 0 /* RX_ER */ 270 0x5 0x1e 0x2 0x0 0x2 0x0 /* RX_ER */
274 5 11 2 0 2 0 /* RX_CLK */ 271 0x5 0x11 0x2 0x0 0x2 0x0 /* RX_CLK */
275 5 13 1 0 2 0 /* GTX_CLK */ 272 0x5 0x13 0x1 0x0 0x2 0x0 /* GTX_CLK */
276 1 1f 2 0 3 0 /* GTX125 */ 273 0x1 0x1f 0x2 0x0 0x3 0x0 /* GTX125 */
277 4 06 3 0 2 0 /* MDIO */ 274 0x4 0x6 0x3 0x0 0x2 0x0 /* MDIO */
278 4 05 1 0 2 0>; /* MDC */ 275 0x4 0x5 0x1 0x0 0x2 0x0>; /* MDC */
279 }; 276 };
280 }; 277 };
281 }; 278 };
@@ -285,28 +282,28 @@
285 #size-cells = <1>; 282 #size-cells = <1>;
286 device_type = "qe"; 283 device_type = "qe";
287 compatible = "fsl,qe"; 284 compatible = "fsl,qe";
288 ranges = <0 e0080000 00040000>; 285 ranges = <0x0 0xe0080000 0x40000>;
289 reg = <e0080000 480>; 286 reg = <0xe0080000 0x480>;
290 brg-frequency = <0>; 287 brg-frequency = <0>;
291 bus-frequency = <179A7B00>; 288 bus-frequency = <396000000>;
292 289
293 muram@10000 { 290 muram@10000 {
294 #address-cells = <1>; 291 #address-cells = <1>;
295 #size-cells = <1>; 292 #size-cells = <1>;
296 compatible = "fsl,qe-muram", "fsl,cpm-muram"; 293 compatible = "fsl,qe-muram", "fsl,cpm-muram";
297 ranges = <0 00010000 0000c000>; 294 ranges = <0x0 0x10000 0x10000>;
298 295
299 data-only@0 { 296 data-only@0 {
300 compatible = "fsl,qe-muram-data", 297 compatible = "fsl,qe-muram-data",
301 "fsl,cpm-muram-data"; 298 "fsl,cpm-muram-data";
302 reg = <0 c000>; 299 reg = <0x0 0x10000>;
303 }; 300 };
304 }; 301 };
305 302
306 spi@4c0 { 303 spi@4c0 {
307 cell-index = <0>; 304 cell-index = <0>;
308 compatible = "fsl,spi"; 305 compatible = "fsl,spi";
309 reg = <4c0 40>; 306 reg = <0x4c0 0x40>;
310 interrupts = <2>; 307 interrupts = <2>;
311 interrupt-parent = <&qeic>; 308 interrupt-parent = <&qeic>;
312 mode = "cpu"; 309 mode = "cpu";
@@ -315,7 +312,7 @@
315 spi@500 { 312 spi@500 {
316 cell-index = <1>; 313 cell-index = <1>;
317 compatible = "fsl,spi"; 314 compatible = "fsl,spi";
318 reg = <500 40>; 315 reg = <0x500 0x40>;
319 interrupts = <1>; 316 interrupts = <1>;
320 interrupt-parent = <&qeic>; 317 interrupt-parent = <&qeic>;
321 mode = "cpu"; 318 mode = "cpu";
@@ -324,11 +321,9 @@
324 enet2: ucc@2000 { 321 enet2: ucc@2000 {
325 device_type = "network"; 322 device_type = "network";
326 compatible = "ucc_geth"; 323 compatible = "ucc_geth";
327 model = "UCC";
328 cell-index = <1>; 324 cell-index = <1>;
329 device-id = <1>; 325 reg = <0x2000 0x200>;
330 reg = <2000 200>; 326 interrupts = <32>;
331 interrupts = <20>;
332 interrupt-parent = <&qeic>; 327 interrupt-parent = <&qeic>;
333 local-mac-address = [ 00 00 00 00 00 00 ]; 328 local-mac-address = [ 00 00 00 00 00 00 ];
334 rx-clock-name = "none"; 329 rx-clock-name = "none";
@@ -341,11 +336,9 @@
341 enet3: ucc@3000 { 336 enet3: ucc@3000 {
342 device_type = "network"; 337 device_type = "network";
343 compatible = "ucc_geth"; 338 compatible = "ucc_geth";
344 model = "UCC";
345 cell-index = <2>; 339 cell-index = <2>;
346 device-id = <2>; 340 reg = <0x3000 0x200>;
347 reg = <3000 200>; 341 interrupts = <33>;
348 interrupts = <21>;
349 interrupt-parent = <&qeic>; 342 interrupt-parent = <&qeic>;
350 local-mac-address = [ 00 00 00 00 00 00 ]; 343 local-mac-address = [ 00 00 00 00 00 00 ];
351 rx-clock-name = "none"; 344 rx-clock-name = "none";
@@ -358,7 +351,7 @@
358 mdio@2120 { 351 mdio@2120 {
359 #address-cells = <1>; 352 #address-cells = <1>;
360 #size-cells = <0>; 353 #size-cells = <0>;
361 reg = <2120 18>; 354 reg = <0x2120 0x18>;
362 compatible = "fsl,ucc-mdio"; 355 compatible = "fsl,ucc-mdio";
363 356
364 /* These are the same PHYs as on 357 /* These are the same PHYs as on
@@ -366,25 +359,25 @@
366 qe_phy0: ethernet-phy@07 { 359 qe_phy0: ethernet-phy@07 {
367 interrupt-parent = <&mpic>; 360 interrupt-parent = <&mpic>;
368 interrupts = <1 1>; 361 interrupts = <1 1>;
369 reg = <7>; 362 reg = <0x7>;
370 device_type = "ethernet-phy"; 363 device_type = "ethernet-phy";
371 }; 364 };
372 qe_phy1: ethernet-phy@01 { 365 qe_phy1: ethernet-phy@01 {
373 interrupt-parent = <&mpic>; 366 interrupt-parent = <&mpic>;
374 interrupts = <2 1>; 367 interrupts = <2 1>;
375 reg = <1>; 368 reg = <0x1>;
376 device_type = "ethernet-phy"; 369 device_type = "ethernet-phy";
377 }; 370 };
378 qe_phy2: ethernet-phy@02 { 371 qe_phy2: ethernet-phy@02 {
379 interrupt-parent = <&mpic>; 372 interrupt-parent = <&mpic>;
380 interrupts = <1 1>; 373 interrupts = <1 1>;
381 reg = <2>; 374 reg = <0x2>;
382 device_type = "ethernet-phy"; 375 device_type = "ethernet-phy";
383 }; 376 };
384 qe_phy3: ethernet-phy@03 { 377 qe_phy3: ethernet-phy@03 {
385 interrupt-parent = <&mpic>; 378 interrupt-parent = <&mpic>;
386 interrupts = <2 1>; 379 interrupts = <2 1>;
387 reg = <3>; 380 reg = <0x3>;
388 device_type = "ethernet-phy"; 381 device_type = "ethernet-phy";
389 }; 382 };
390 }; 383 };
@@ -394,9 +387,9 @@
394 compatible = "fsl,qe-ic"; 387 compatible = "fsl,qe-ic";
395 #address-cells = <0>; 388 #address-cells = <0>;
396 #interrupt-cells = <1>; 389 #interrupt-cells = <1>;
397 reg = <80 80>; 390 reg = <0x80 0x80>;
398 big-endian; 391 big-endian;
399 interrupts = <2e 2 2e 2>; //high:30 low:30 392 interrupts = <46 2 46 2>; //high:30 low:30
400 interrupt-parent = <&mpic>; 393 interrupt-parent = <&mpic>;
401 }; 394 };
402 395
@@ -404,30 +397,30 @@
404 397
405 pci0: pci@e0008000 { 398 pci0: pci@e0008000 {
406 cell-index = <0>; 399 cell-index = <0>;
407 interrupt-map-mask = <f800 0 0 7>; 400 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
408 interrupt-map = < 401 interrupt-map = <
409 /* IDSEL 0x12 AD18 */ 402 /* IDSEL 0x12 AD18 */
410 9000 0 0 1 &mpic 5 1 403 0x9000 0x0 0x0 0x1 &mpic 0x5 0x1
411 9000 0 0 2 &mpic 6 1 404 0x9000 0x0 0x0 0x2 &mpic 0x6 0x1
412 9000 0 0 3 &mpic 7 1 405 0x9000 0x0 0x0 0x3 &mpic 0x7 0x1
413 9000 0 0 4 &mpic 4 1 406 0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
414 407
415 /* IDSEL 0x13 AD19 */ 408 /* IDSEL 0x13 AD19 */
416 9800 0 0 1 &mpic 6 1 409 0x9800 0x0 0x0 0x1 &mpic 0x6 0x1
417 9800 0 0 2 &mpic 7 1 410 0x9800 0x0 0x0 0x2 &mpic 0x7 0x1
418 9800 0 0 3 &mpic 4 1 411 0x9800 0x0 0x0 0x3 &mpic 0x4 0x1
419 9800 0 0 4 &mpic 5 1>; 412 0x9800 0x0 0x0 0x4 &mpic 0x5 0x1>;
420 413
421 interrupt-parent = <&mpic>; 414 interrupt-parent = <&mpic>;
422 interrupts = <18 2>; 415 interrupts = <24 2>;
423 bus-range = <0 ff>; 416 bus-range = <0 255>;
424 ranges = <02000000 0 80000000 80000000 0 20000000 417 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
425 01000000 0 00000000 e2000000 0 00800000>; 418 0x1000000 0x0 0x0 0xe2000000 0x0 0x800000>;
426 clock-frequency = <3f940aa>; 419 clock-frequency = <66666666>;
427 #interrupt-cells = <1>; 420 #interrupt-cells = <1>;
428 #size-cells = <2>; 421 #size-cells = <2>;
429 #address-cells = <3>; 422 #address-cells = <3>;
430 reg = <e0008000 1000>; 423 reg = <0xe0008000 0x1000>;
431 compatible = "fsl,mpc8540-pci"; 424 compatible = "fsl,mpc8540-pci";
432 device_type = "pci"; 425 device_type = "pci";
433 }; 426 };
@@ -435,39 +428,39 @@
435 /* PCI Express */ 428 /* PCI Express */
436 pci1: pcie@e000a000 { 429 pci1: pcie@e000a000 {
437 cell-index = <2>; 430 cell-index = <2>;
438 interrupt-map-mask = <f800 0 0 7>; 431 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
439 interrupt-map = < 432 interrupt-map = <
440 433
441 /* IDSEL 0x0 (PEX) */ 434 /* IDSEL 0x0 (PEX) */
442 00000 0 0 1 &mpic 0 1 435 00000 0x0 0x0 0x1 &mpic 0x0 0x1
443 00000 0 0 2 &mpic 1 1 436 00000 0x0 0x0 0x2 &mpic 0x1 0x1
444 00000 0 0 3 &mpic 2 1 437 00000 0x0 0x0 0x3 &mpic 0x2 0x1
445 00000 0 0 4 &mpic 3 1>; 438 00000 0x0 0x0 0x4 &mpic 0x3 0x1>;
446 439
447 interrupt-parent = <&mpic>; 440 interrupt-parent = <&mpic>;
448 interrupts = <1a 2>; 441 interrupts = <26 2>;
449 bus-range = <0 ff>; 442 bus-range = <0 255>;
450 ranges = <02000000 0 a0000000 a0000000 0 10000000 443 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x10000000
451 01000000 0 00000000 e2800000 0 00800000>; 444 0x1000000 0x0 0x0 0xe2800000 0x0 0x800000>;
452 clock-frequency = <1fca055>; 445 clock-frequency = <33333333>;
453 #interrupt-cells = <1>; 446 #interrupt-cells = <1>;
454 #size-cells = <2>; 447 #size-cells = <2>;
455 #address-cells = <3>; 448 #address-cells = <3>;
456 reg = <e000a000 1000>; 449 reg = <0xe000a000 0x1000>;
457 compatible = "fsl,mpc8548-pcie"; 450 compatible = "fsl,mpc8548-pcie";
458 device_type = "pci"; 451 device_type = "pci";
459 pcie@0 { 452 pcie@0 {
460 reg = <0 0 0 0 0>; 453 reg = <0x0 0x0 0x0 0x0 0x0>;
461 #size-cells = <2>; 454 #size-cells = <2>;
462 #address-cells = <3>; 455 #address-cells = <3>;
463 device_type = "pci"; 456 device_type = "pci";
464 ranges = <02000000 0 a0000000 457 ranges = <0x2000000 0x0 0xa0000000
465 02000000 0 a0000000 458 0x2000000 0x0 0xa0000000
466 0 10000000 459 0x0 0x10000000
467 460
468 01000000 0 00000000 461 0x1000000 0x0 0x0
469 01000000 0 00000000 462 0x1000000 0x0 0x0
470 0 00800000>; 463 0x0 0x800000>;
471 }; 464 };
472 }; 465 };
473}; 466};
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts
index db37214aee37..66f27ab613a2 100644
--- a/arch/powerpc/boot/dts/mpc8572ds.dts
+++ b/arch/powerpc/boot/dts/mpc8572ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8572 DS Device Tree Source 2 * MPC8572 DS Device Tree Source
3 * 3 *
4 * Copyright 2007 Freescale Semiconductor Inc. 4 * Copyright 2007, 2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
12/ { 13/ {
13 model = "fsl,MPC8572DS"; 14 model = "fsl,MPC8572DS";
14 compatible = "fsl,MPC8572DS"; 15 compatible = "fsl,MPC8572DS";
@@ -33,11 +34,11 @@
33 34
34 PowerPC,8572@0 { 35 PowerPC,8572@0 {
35 device_type = "cpu"; 36 device_type = "cpu";
36 reg = <0>; 37 reg = <0x0>;
37 d-cache-line-size = <20>; // 32 bytes 38 d-cache-line-size = <32>; // 32 bytes
38 i-cache-line-size = <20>; // 32 bytes 39 i-cache-line-size = <32>; // 32 bytes
39 d-cache-size = <8000>; // L1, 32K 40 d-cache-size = <0x8000>; // L1, 32K
40 i-cache-size = <8000>; // L1, 32K 41 i-cache-size = <0x8000>; // L1, 32K
41 timebase-frequency = <0>; 42 timebase-frequency = <0>;
42 bus-frequency = <0>; 43 bus-frequency = <0>;
43 clock-frequency = <0>; 44 clock-frequency = <0>;
@@ -45,11 +46,11 @@
45 46
46 PowerPC,8572@1 { 47 PowerPC,8572@1 {
47 device_type = "cpu"; 48 device_type = "cpu";
48 reg = <1>; 49 reg = <0x1>;
49 d-cache-line-size = <20>; // 32 bytes 50 d-cache-line-size = <32>; // 32 bytes
50 i-cache-line-size = <20>; // 32 bytes 51 i-cache-line-size = <32>; // 32 bytes
51 d-cache-size = <8000>; // L1, 32K 52 d-cache-size = <0x8000>; // L1, 32K
52 i-cache-size = <8000>; // L1, 32K 53 i-cache-size = <0x8000>; // L1, 32K
53 timebase-frequency = <0>; 54 timebase-frequency = <0>;
54 bus-frequency = <0>; 55 bus-frequency = <0>;
55 clock-frequency = <0>; 56 clock-frequency = <0>;
@@ -58,38 +59,38 @@
58 59
59 memory { 60 memory {
60 device_type = "memory"; 61 device_type = "memory";
61 reg = <00000000 00000000>; // Filled by U-Boot 62 reg = <0x0 0x0>; // Filled by U-Boot
62 }; 63 };
63 64
64 soc8572@ffe00000 { 65 soc8572@ffe00000 {
65 #address-cells = <1>; 66 #address-cells = <1>;
66 #size-cells = <1>; 67 #size-cells = <1>;
67 device_type = "soc"; 68 device_type = "soc";
68 ranges = <00000000 ffe00000 00100000>; 69 ranges = <0x0 0xffe00000 0x100000>;
69 reg = <ffe00000 00001000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed 70 reg = <0xffe00000 0x1000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed
70 bus-frequency = <0>; // Filled out by uboot. 71 bus-frequency = <0>; // Filled out by uboot.
71 72
72 memory-controller@2000 { 73 memory-controller@2000 {
73 compatible = "fsl,mpc8572-memory-controller"; 74 compatible = "fsl,mpc8572-memory-controller";
74 reg = <2000 1000>; 75 reg = <0x2000 0x1000>;
75 interrupt-parent = <&mpic>; 76 interrupt-parent = <&mpic>;
76 interrupts = <12 2>; 77 interrupts = <18 2>;
77 }; 78 };
78 79
79 memory-controller@6000 { 80 memory-controller@6000 {
80 compatible = "fsl,mpc8572-memory-controller"; 81 compatible = "fsl,mpc8572-memory-controller";
81 reg = <6000 1000>; 82 reg = <0x6000 0x1000>;
82 interrupt-parent = <&mpic>; 83 interrupt-parent = <&mpic>;
83 interrupts = <12 2>; 84 interrupts = <18 2>;
84 }; 85 };
85 86
86 l2-cache-controller@20000 { 87 l2-cache-controller@20000 {
87 compatible = "fsl,mpc8572-l2-cache-controller"; 88 compatible = "fsl,mpc8572-l2-cache-controller";
88 reg = <20000 1000>; 89 reg = <0x20000 0x1000>;
89 cache-line-size = <20>; // 32 bytes 90 cache-line-size = <32>; // 32 bytes
90 cache-size = <80000>; // L2, 512K 91 cache-size = <0x80000>; // L2, 512K
91 interrupt-parent = <&mpic>; 92 interrupt-parent = <&mpic>;
92 interrupts = <10 2>; 93 interrupts = <16 2>;
93 }; 94 };
94 95
95 i2c@3000 { 96 i2c@3000 {
@@ -97,8 +98,8 @@
97 #size-cells = <0>; 98 #size-cells = <0>;
98 cell-index = <0>; 99 cell-index = <0>;
99 compatible = "fsl-i2c"; 100 compatible = "fsl-i2c";
100 reg = <3000 100>; 101 reg = <0x3000 0x100>;
101 interrupts = <2b 2>; 102 interrupts = <43 2>;
102 interrupt-parent = <&mpic>; 103 interrupt-parent = <&mpic>;
103 dfsrr; 104 dfsrr;
104 }; 105 };
@@ -108,8 +109,8 @@
108 #size-cells = <0>; 109 #size-cells = <0>;
109 cell-index = <1>; 110 cell-index = <1>;
110 compatible = "fsl-i2c"; 111 compatible = "fsl-i2c";
111 reg = <3100 100>; 112 reg = <0x3100 0x100>;
112 interrupts = <2b 2>; 113 interrupts = <43 2>;
113 interrupt-parent = <&mpic>; 114 interrupt-parent = <&mpic>;
114 dfsrr; 115 dfsrr;
115 }; 116 };
@@ -118,27 +119,27 @@
118 #address-cells = <1>; 119 #address-cells = <1>;
119 #size-cells = <0>; 120 #size-cells = <0>;
120 compatible = "fsl,gianfar-mdio"; 121 compatible = "fsl,gianfar-mdio";
121 reg = <24520 20>; 122 reg = <0x24520 0x20>;
122 123
123 phy0: ethernet-phy@0 { 124 phy0: ethernet-phy@0 {
124 interrupt-parent = <&mpic>; 125 interrupt-parent = <&mpic>;
125 interrupts = <a 1>; 126 interrupts = <10 1>;
126 reg = <0>; 127 reg = <0x0>;
127 }; 128 };
128 phy1: ethernet-phy@1 { 129 phy1: ethernet-phy@1 {
129 interrupt-parent = <&mpic>; 130 interrupt-parent = <&mpic>;
130 interrupts = <a 1>; 131 interrupts = <10 1>;
131 reg = <1>; 132 reg = <0x1>;
132 }; 133 };
133 phy2: ethernet-phy@2 { 134 phy2: ethernet-phy@2 {
134 interrupt-parent = <&mpic>; 135 interrupt-parent = <&mpic>;
135 interrupts = <a 1>; 136 interrupts = <10 1>;
136 reg = <2>; 137 reg = <0x2>;
137 }; 138 };
138 phy3: ethernet-phy@3 { 139 phy3: ethernet-phy@3 {
139 interrupt-parent = <&mpic>; 140 interrupt-parent = <&mpic>;
140 interrupts = <a 1>; 141 interrupts = <10 1>;
141 reg = <3>; 142 reg = <0x3>;
142 }; 143 };
143 }; 144 };
144 145
@@ -147,9 +148,9 @@
147 device_type = "network"; 148 device_type = "network";
148 model = "eTSEC"; 149 model = "eTSEC";
149 compatible = "gianfar"; 150 compatible = "gianfar";
150 reg = <24000 1000>; 151 reg = <0x24000 0x1000>;
151 local-mac-address = [ 00 00 00 00 00 00 ]; 152 local-mac-address = [ 00 00 00 00 00 00 ];
152 interrupts = <1d 2 1e 2 22 2>; 153 interrupts = <29 2 30 2 34 2>;
153 interrupt-parent = <&mpic>; 154 interrupt-parent = <&mpic>;
154 phy-handle = <&phy0>; 155 phy-handle = <&phy0>;
155 phy-connection-type = "rgmii-id"; 156 phy-connection-type = "rgmii-id";
@@ -160,9 +161,9 @@
160 device_type = "network"; 161 device_type = "network";
161 model = "eTSEC"; 162 model = "eTSEC";
162 compatible = "gianfar"; 163 compatible = "gianfar";
163 reg = <25000 1000>; 164 reg = <0x25000 0x1000>;
164 local-mac-address = [ 00 00 00 00 00 00 ]; 165 local-mac-address = [ 00 00 00 00 00 00 ];
165 interrupts = <23 2 24 2 28 2>; 166 interrupts = <35 2 36 2 40 2>;
166 interrupt-parent = <&mpic>; 167 interrupt-parent = <&mpic>;
167 phy-handle = <&phy1>; 168 phy-handle = <&phy1>;
168 phy-connection-type = "rgmii-id"; 169 phy-connection-type = "rgmii-id";
@@ -173,9 +174,9 @@
173 device_type = "network"; 174 device_type = "network";
174 model = "eTSEC"; 175 model = "eTSEC";
175 compatible = "gianfar"; 176 compatible = "gianfar";
176 reg = <26000 1000>; 177 reg = <0x26000 0x1000>;
177 local-mac-address = [ 00 00 00 00 00 00 ]; 178 local-mac-address = [ 00 00 00 00 00 00 ];
178 interrupts = <1f 2 20 2 21 2>; 179 interrupts = <31 2 32 2 33 2>;
179 interrupt-parent = <&mpic>; 180 interrupt-parent = <&mpic>;
180 phy-handle = <&phy2>; 181 phy-handle = <&phy2>;
181 phy-connection-type = "rgmii-id"; 182 phy-connection-type = "rgmii-id";
@@ -186,9 +187,9 @@
186 device_type = "network"; 187 device_type = "network";
187 model = "eTSEC"; 188 model = "eTSEC";
188 compatible = "gianfar"; 189 compatible = "gianfar";
189 reg = <27000 1000>; 190 reg = <0x27000 0x1000>;
190 local-mac-address = [ 00 00 00 00 00 00 ]; 191 local-mac-address = [ 00 00 00 00 00 00 ];
191 interrupts = <25 2 26 2 27 2>; 192 interrupts = <37 2 38 2 39 2>;
192 interrupt-parent = <&mpic>; 193 interrupt-parent = <&mpic>;
193 phy-handle = <&phy3>; 194 phy-handle = <&phy3>;
194 phy-connection-type = "rgmii-id"; 195 phy-connection-type = "rgmii-id";
@@ -198,9 +199,9 @@
198 cell-index = <0>; 199 cell-index = <0>;
199 device_type = "serial"; 200 device_type = "serial";
200 compatible = "ns16550"; 201 compatible = "ns16550";
201 reg = <4500 100>; 202 reg = <0x4500 0x100>;
202 clock-frequency = <0>; 203 clock-frequency = <0>;
203 interrupts = <2a 2>; 204 interrupts = <42 2>;
204 interrupt-parent = <&mpic>; 205 interrupt-parent = <&mpic>;
205 }; 206 };
206 207
@@ -208,15 +209,15 @@
208 cell-index = <1>; 209 cell-index = <1>;
209 device_type = "serial"; 210 device_type = "serial";
210 compatible = "ns16550"; 211 compatible = "ns16550";
211 reg = <4600 100>; 212 reg = <0x4600 0x100>;
212 clock-frequency = <0>; 213 clock-frequency = <0>;
213 interrupts = <2a 2>; 214 interrupts = <42 2>;
214 interrupt-parent = <&mpic>; 215 interrupt-parent = <&mpic>;
215 }; 216 };
216 217
217 global-utilities@e0000 { //global utilities block 218 global-utilities@e0000 { //global utilities block
218 compatible = "fsl,mpc8572-guts"; 219 compatible = "fsl,mpc8572-guts";
219 reg = <e0000 1000>; 220 reg = <0xe0000 0x1000>;
220 fsl,has-rstcr; 221 fsl,has-rstcr;
221 }; 222 };
222 223
@@ -225,7 +226,7 @@
225 interrupt-controller; 226 interrupt-controller;
226 #address-cells = <0>; 227 #address-cells = <0>;
227 #interrupt-cells = <2>; 228 #interrupt-cells = <2>;
228 reg = <40000 40000>; 229 reg = <0x40000 0x40000>;
229 compatible = "chrp,open-pic"; 230 compatible = "chrp,open-pic";
230 device_type = "open-pic"; 231 device_type = "open-pic";
231 big-endian; 232 big-endian;
@@ -239,167 +240,167 @@
239 #interrupt-cells = <1>; 240 #interrupt-cells = <1>;
240 #size-cells = <2>; 241 #size-cells = <2>;
241 #address-cells = <3>; 242 #address-cells = <3>;
242 reg = <ffe08000 1000>; 243 reg = <0xffe08000 0x1000>;
243 bus-range = <0 ff>; 244 bus-range = <0 255>;
244 ranges = <02000000 0 80000000 80000000 0 20000000 245 ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
245 01000000 0 00000000 ffc00000 0 00010000>; 246 0x1000000 0x0 0x0 0xffc00000 0x0 0x10000>;
246 clock-frequency = <1fca055>; 247 clock-frequency = <33333333>;
247 interrupt-parent = <&mpic>; 248 interrupt-parent = <&mpic>;
248 interrupts = <18 2>; 249 interrupts = <24 2>;
249 interrupt-map-mask = <ff00 0 0 7>; 250 interrupt-map-mask = <0xff00 0x0 0x0 0x7>;
250 interrupt-map = < 251 interrupt-map = <
251 /* IDSEL 0x11 func 0 - PCI slot 1 */ 252 /* IDSEL 0x11 func 0 - PCI slot 1 */
252 8800 0 0 1 &mpic 2 1 253 0x8800 0x0 0x0 0x1 &mpic 0x2 0x1
253 8800 0 0 2 &mpic 3 1 254 0x8800 0x0 0x0 0x2 &mpic 0x3 0x1
254 8800 0 0 3 &mpic 4 1 255 0x8800 0x0 0x0 0x3 &mpic 0x4 0x1
255 8800 0 0 4 &mpic 1 1 256 0x8800 0x0 0x0 0x4 &mpic 0x1 0x1
256 257
257 /* IDSEL 0x11 func 1 - PCI slot 1 */ 258 /* IDSEL 0x11 func 1 - PCI slot 1 */
258 8900 0 0 1 &mpic 2 1 259 0x8900 0x0 0x0 0x1 &mpic 0x2 0x1
259 8900 0 0 2 &mpic 3 1 260 0x8900 0x0 0x0 0x2 &mpic 0x3 0x1
260 8900 0 0 3 &mpic 4 1 261 0x8900 0x0 0x0 0x3 &mpic 0x4 0x1
261 8900 0 0 4 &mpic 1 1 262 0x8900 0x0 0x0 0x4 &mpic 0x1 0x1
262 263
263 /* IDSEL 0x11 func 2 - PCI slot 1 */ 264 /* IDSEL 0x11 func 2 - PCI slot 1 */
264 8a00 0 0 1 &mpic 2 1 265 0x8a00 0x0 0x0 0x1 &mpic 0x2 0x1
265 8a00 0 0 2 &mpic 3 1 266 0x8a00 0x0 0x0 0x2 &mpic 0x3 0x1
266 8a00 0 0 3 &mpic 4 1 267 0x8a00 0x0 0x0 0x3 &mpic 0x4 0x1
267 8a00 0 0 4 &mpic 1 1 268 0x8a00 0x0 0x0 0x4 &mpic 0x1 0x1
268 269
269 /* IDSEL 0x11 func 3 - PCI slot 1 */ 270 /* IDSEL 0x11 func 3 - PCI slot 1 */
270 8b00 0 0 1 &mpic 2 1 271 0x8b00 0x0 0x0 0x1 &mpic 0x2 0x1
271 8b00 0 0 2 &mpic 3 1 272 0x8b00 0x0 0x0 0x2 &mpic 0x3 0x1
272 8b00 0 0 3 &mpic 4 1 273 0x8b00 0x0 0x0 0x3 &mpic 0x4 0x1
273 8b00 0 0 4 &mpic 1 1 274 0x8b00 0x0 0x0 0x4 &mpic 0x1 0x1
274 275
275 /* IDSEL 0x11 func 4 - PCI slot 1 */ 276 /* IDSEL 0x11 func 4 - PCI slot 1 */
276 8c00 0 0 1 &mpic 2 1 277 0x8c00 0x0 0x0 0x1 &mpic 0x2 0x1
277 8c00 0 0 2 &mpic 3 1 278 0x8c00 0x0 0x0 0x2 &mpic 0x3 0x1
278 8c00 0 0 3 &mpic 4 1 279 0x8c00 0x0 0x0 0x3 &mpic 0x4 0x1
279 8c00 0 0 4 &mpic 1 1 280 0x8c00 0x0 0x0 0x4 &mpic 0x1 0x1
280 281
281 /* IDSEL 0x11 func 5 - PCI slot 1 */ 282 /* IDSEL 0x11 func 5 - PCI slot 1 */
282 8d00 0 0 1 &mpic 2 1 283 0x8d00 0x0 0x0 0x1 &mpic 0x2 0x1
283 8d00 0 0 2 &mpic 3 1 284 0x8d00 0x0 0x0 0x2 &mpic 0x3 0x1
284 8d00 0 0 3 &mpic 4 1 285 0x8d00 0x0 0x0 0x3 &mpic 0x4 0x1
285 8d00 0 0 4 &mpic 1 1 286 0x8d00 0x0 0x0 0x4 &mpic 0x1 0x1
286 287
287 /* IDSEL 0x11 func 6 - PCI slot 1 */ 288 /* IDSEL 0x11 func 6 - PCI slot 1 */
288 8e00 0 0 1 &mpic 2 1 289 0x8e00 0x0 0x0 0x1 &mpic 0x2 0x1
289 8e00 0 0 2 &mpic 3 1 290 0x8e00 0x0 0x0 0x2 &mpic 0x3 0x1
290 8e00 0 0 3 &mpic 4 1 291 0x8e00 0x0 0x0 0x3 &mpic 0x4 0x1
291 8e00 0 0 4 &mpic 1 1 292 0x8e00 0x0 0x0 0x4 &mpic 0x1 0x1
292 293
293 /* IDSEL 0x11 func 7 - PCI slot 1 */ 294 /* IDSEL 0x11 func 7 - PCI slot 1 */
294 8f00 0 0 1 &mpic 2 1 295 0x8f00 0x0 0x0 0x1 &mpic 0x2 0x1
295 8f00 0 0 2 &mpic 3 1 296 0x8f00 0x0 0x0 0x2 &mpic 0x3 0x1
296 8f00 0 0 3 &mpic 4 1 297 0x8f00 0x0 0x0 0x3 &mpic 0x4 0x1
297 8f00 0 0 4 &mpic 1 1 298 0x8f00 0x0 0x0 0x4 &mpic 0x1 0x1
298 299
299 /* IDSEL 0x12 func 0 - PCI slot 2 */ 300 /* IDSEL 0x12 func 0 - PCI slot 2 */
300 9000 0 0 1 &mpic 3 1 301 0x9000 0x0 0x0 0x1 &mpic 0x3 0x1
301 9000 0 0 2 &mpic 4 1 302 0x9000 0x0 0x0 0x2 &mpic 0x4 0x1
302 9000 0 0 3 &mpic 1 1 303 0x9000 0x0 0x0 0x3 &mpic 0x1 0x1
303 9000 0 0 4 &mpic 2 1 304 0x9000 0x0 0x0 0x4 &mpic 0x2 0x1
304 305
305 /* IDSEL 0x12 func 1 - PCI slot 2 */ 306 /* IDSEL 0x12 func 1 - PCI slot 2 */
306 9100 0 0 1 &mpic 3 1 307 0x9100 0x0 0x0 0x1 &mpic 0x3 0x1
307 9100 0 0 2 &mpic 4 1 308 0x9100 0x0 0x0 0x2 &mpic 0x4 0x1
308 9100 0 0 3 &mpic 1 1 309 0x9100 0x0 0x0 0x3 &mpic 0x1 0x1
309 9100 0 0 4 &mpic 2 1 310 0x9100 0x0 0x0 0x4 &mpic 0x2 0x1
310 311
311 /* IDSEL 0x12 func 2 - PCI slot 2 */ 312 /* IDSEL 0x12 func 2 - PCI slot 2 */
312 9200 0 0 1 &mpic 3 1 313 0x9200 0x0 0x0 0x1 &mpic 0x3 0x1
313 9200 0 0 2 &mpic 4 1 314 0x9200 0x0 0x0 0x2 &mpic 0x4 0x1
314 9200 0 0 3 &mpic 1 1 315 0x9200 0x0 0x0 0x3 &mpic 0x1 0x1
315 9200 0 0 4 &mpic 2 1 316 0x9200 0x0 0x0 0x4 &mpic 0x2 0x1
316 317
317 /* IDSEL 0x12 func 3 - PCI slot 2 */ 318 /* IDSEL 0x12 func 3 - PCI slot 2 */
318 9300 0 0 1 &mpic 3 1 319 0x9300 0x0 0x0 0x1 &mpic 0x3 0x1
319 9300 0 0 2 &mpic 4 1 320 0x9300 0x0 0x0 0x2 &mpic 0x4 0x1
320 9300 0 0 3 &mpic 1 1 321 0x9300 0x0 0x0 0x3 &mpic 0x1 0x1
321 9300 0 0 4 &mpic 2 1 322 0x9300 0x0 0x0 0x4 &mpic 0x2 0x1
322 323
323 /* IDSEL 0x12 func 4 - PCI slot 2 */ 324 /* IDSEL 0x12 func 4 - PCI slot 2 */
324 9400 0 0 1 &mpic 3 1 325 0x9400 0x0 0x0 0x1 &mpic 0x3 0x1
325 9400 0 0 2 &mpic 4 1 326 0x9400 0x0 0x0 0x2 &mpic 0x4 0x1
326 9400 0 0 3 &mpic 1 1 327 0x9400 0x0 0x0 0x3 &mpic 0x1 0x1
327 9400 0 0 4 &mpic 2 1 328 0x9400 0x0 0x0 0x4 &mpic 0x2 0x1
328 329
329 /* IDSEL 0x12 func 5 - PCI slot 2 */ 330 /* IDSEL 0x12 func 5 - PCI slot 2 */
330 9500 0 0 1 &mpic 3 1 331 0x9500 0x0 0x0 0x1 &mpic 0x3 0x1
331 9500 0 0 2 &mpic 4 1 332 0x9500 0x0 0x0 0x2 &mpic 0x4 0x1
332 9500 0 0 3 &mpic 1 1 333 0x9500 0x0 0x0 0x3 &mpic 0x1 0x1
333 9500 0 0 4 &mpic 2 1 334 0x9500 0x0 0x0 0x4 &mpic 0x2 0x1
334 335
335 /* IDSEL 0x12 func 6 - PCI slot 2 */ 336 /* IDSEL 0x12 func 6 - PCI slot 2 */
336 9600 0 0 1 &mpic 3 1 337 0x9600 0x0 0x0 0x1 &mpic 0x3 0x1
337 9600 0 0 2 &mpic 4 1 338 0x9600 0x0 0x0 0x2 &mpic 0x4 0x1
338 9600 0 0 3 &mpic 1 1 339 0x9600 0x0 0x0 0x3 &mpic 0x1 0x1
339 9600 0 0 4 &mpic 2 1 340 0x9600 0x0 0x0 0x4 &mpic 0x2 0x1
340 341
341 /* IDSEL 0x12 func 7 - PCI slot 2 */ 342 /* IDSEL 0x12 func 7 - PCI slot 2 */
342 9700 0 0 1 &mpic 3 1 343 0x9700 0x0 0x0 0x1 &mpic 0x3 0x1
343 9700 0 0 2 &mpic 4 1 344 0x9700 0x0 0x0 0x2 &mpic 0x4 0x1
344 9700 0 0 3 &mpic 1 1 345 0x9700 0x0 0x0 0x3 &mpic 0x1 0x1
345 9700 0 0 4 &mpic 2 1 346 0x9700 0x0 0x0 0x4 &mpic 0x2 0x1
346 347
347 // IDSEL 0x1c USB 348 // IDSEL 0x1c USB
348 e000 0 0 1 &i8259 c 2 349 0xe000 0x0 0x0 0x1 &i8259 0xc 0x2
349 e100 0 0 2 &i8259 9 2 350 0xe100 0x0 0x0 0x2 &i8259 0x9 0x2
350 e200 0 0 3 &i8259 a 2 351 0xe200 0x0 0x0 0x3 &i8259 0xa 0x2
351 e300 0 0 4 &i8259 b 2 352 0xe300 0x0 0x0 0x4 &i8259 0xb 0x2
352 353
353 // IDSEL 0x1d Audio 354 // IDSEL 0x1d Audio
354 e800 0 0 1 &i8259 6 2 355 0xe800 0x0 0x0 0x1 &i8259 0x6 0x2
355 356
356 // IDSEL 0x1e Legacy 357 // IDSEL 0x1e Legacy
357 f000 0 0 1 &i8259 7 2 358 0xf000 0x0 0x0 0x1 &i8259 0x7 0x2
358 f100 0 0 1 &i8259 7 2 359 0xf100 0x0 0x0 0x1 &i8259 0x7 0x2
359 360
360 // IDSEL 0x1f IDE/SATA 361 // IDSEL 0x1f IDE/SATA
361 f800 0 0 1 &i8259 e 2 362 0xf800 0x0 0x0 0x1 &i8259 0xe 0x2
362 f900 0 0 1 &i8259 5 2 363 0xf900 0x0 0x0 0x1 &i8259 0x5 0x2
363 364
364 >; 365 >;
365 366
366 pcie@0 { 367 pcie@0 {
367 reg = <0 0 0 0 0>; 368 reg = <0x0 0x0 0x0 0x0 0x0>;
368 #size-cells = <2>; 369 #size-cells = <2>;
369 #address-cells = <3>; 370 #address-cells = <3>;
370 device_type = "pci"; 371 device_type = "pci";
371 ranges = <02000000 0 80000000 372 ranges = <0x2000000 0x0 0x80000000
372 02000000 0 80000000 373 0x2000000 0x0 0x80000000
373 0 20000000 374 0x0 0x20000000
374 375
375 01000000 0 00000000 376 0x1000000 0x0 0x0
376 01000000 0 00000000 377 0x1000000 0x0 0x0
377 0 00100000>; 378 0x0 0x100000>;
378 uli1575@0 { 379 uli1575@0 {
379 reg = <0 0 0 0 0>; 380 reg = <0x0 0x0 0x0 0x0 0x0>;
380 #size-cells = <2>; 381 #size-cells = <2>;
381 #address-cells = <3>; 382 #address-cells = <3>;
382 ranges = <02000000 0 80000000 383 ranges = <0x2000000 0x0 0x80000000
383 02000000 0 80000000 384 0x2000000 0x0 0x80000000
384 0 20000000 385 0x0 0x20000000
385 386
386 01000000 0 00000000 387 0x1000000 0x0 0x0
387 01000000 0 00000000 388 0x1000000 0x0 0x0
388 0 00100000>; 389 0x0 0x100000>;
389 isa@1e { 390 isa@1e {
390 device_type = "isa"; 391 device_type = "isa";
391 #interrupt-cells = <2>; 392 #interrupt-cells = <2>;
392 #size-cells = <1>; 393 #size-cells = <1>;
393 #address-cells = <2>; 394 #address-cells = <2>;
394 reg = <f000 0 0 0 0>; 395 reg = <0xf000 0x0 0x0 0x0 0x0>;
395 ranges = <1 0 01000000 0 0 396 ranges = <0x1 0x0 0x1000000 0x0 0x0
396 00001000>; 397 0x1000>;
397 interrupt-parent = <&i8259>; 398 interrupt-parent = <&i8259>;
398 399
399 i8259: interrupt-controller@20 { 400 i8259: interrupt-controller@20 {
400 reg = <1 20 2 401 reg = <0x1 0x20 0x2
401 1 a0 2 402 0x1 0xa0 0x2
402 1 4d0 2>; 403 0x1 0x4d0 0x2>;
403 interrupt-controller; 404 interrupt-controller;
404 device_type = "interrupt-controller"; 405 device_type = "interrupt-controller";
405 #address-cells = <0>; 406 #address-cells = <0>;
@@ -412,29 +413,29 @@
412 i8042@60 { 413 i8042@60 {
413 #size-cells = <0>; 414 #size-cells = <0>;
414 #address-cells = <1>; 415 #address-cells = <1>;
415 reg = <1 60 1 1 64 1>; 416 reg = <0x1 0x60 0x1 0x1 0x64 0x1>;
416 interrupts = <1 3 c 3>; 417 interrupts = <1 3 12 3>;
417 interrupt-parent = 418 interrupt-parent =
418 <&i8259>; 419 <&i8259>;
419 420
420 keyboard@0 { 421 keyboard@0 {
421 reg = <0>; 422 reg = <0x0>;
422 compatible = "pnpPNP,303"; 423 compatible = "pnpPNP,303";
423 }; 424 };
424 425
425 mouse@1 { 426 mouse@1 {
426 reg = <1>; 427 reg = <0x1>;
427 compatible = "pnpPNP,f03"; 428 compatible = "pnpPNP,f03";
428 }; 429 };
429 }; 430 };
430 431
431 rtc@70 { 432 rtc@70 {
432 compatible = "pnpPNP,b00"; 433 compatible = "pnpPNP,b00";
433 reg = <1 70 2>; 434 reg = <0x1 0x70 0x2>;
434 }; 435 };
435 436
436 gpio@400 { 437 gpio@400 {
437 reg = <1 400 80>; 438 reg = <0x1 0x400 0x80>;
438 }; 439 };
439 }; 440 };
440 }; 441 };
@@ -449,33 +450,33 @@
449 #interrupt-cells = <1>; 450 #interrupt-cells = <1>;
450 #size-cells = <2>; 451 #size-cells = <2>;
451 #address-cells = <3>; 452 #address-cells = <3>;
452 reg = <ffe09000 1000>; 453 reg = <0xffe09000 0x1000>;
453 bus-range = <0 ff>; 454 bus-range = <0 255>;
454 ranges = <02000000 0 a0000000 a0000000 0 20000000 455 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
455 01000000 0 00000000 ffc10000 0 00010000>; 456 0x1000000 0x0 0x0 0xffc10000 0x0 0x10000>;
456 clock-frequency = <1fca055>; 457 clock-frequency = <33333333>;
457 interrupt-parent = <&mpic>; 458 interrupt-parent = <&mpic>;
458 interrupts = <1a 2>; 459 interrupts = <26 2>;
459 interrupt-map-mask = <f800 0 0 7>; 460 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
460 interrupt-map = < 461 interrupt-map = <
461 /* IDSEL 0x0 */ 462 /* IDSEL 0x0 */
462 0000 0 0 1 &mpic 4 1 463 0000 0x0 0x0 0x1 &mpic 0x4 0x1
463 0000 0 0 2 &mpic 5 1 464 0000 0x0 0x0 0x2 &mpic 0x5 0x1
464 0000 0 0 3 &mpic 6 1 465 0000 0x0 0x0 0x3 &mpic 0x6 0x1
465 0000 0 0 4 &mpic 7 1 466 0000 0x0 0x0 0x4 &mpic 0x7 0x1
466 >; 467 >;
467 pcie@0 { 468 pcie@0 {
468 reg = <0 0 0 0 0>; 469 reg = <0x0 0x0 0x0 0x0 0x0>;
469 #size-cells = <2>; 470 #size-cells = <2>;
470 #address-cells = <3>; 471 #address-cells = <3>;
471 device_type = "pci"; 472 device_type = "pci";
472 ranges = <02000000 0 a0000000 473 ranges = <0x2000000 0x0 0xa0000000
473 02000000 0 a0000000 474 0x2000000 0x0 0xa0000000
474 0 20000000 475 0x0 0x20000000
475 476
476 01000000 0 00000000 477 0x1000000 0x0 0x0
477 01000000 0 00000000 478 0x1000000 0x0 0x0
478 0 00100000>; 479 0x0 0x100000>;
479 }; 480 };
480 }; 481 };
481 482
@@ -486,33 +487,33 @@
486 #interrupt-cells = <1>; 487 #interrupt-cells = <1>;
487 #size-cells = <2>; 488 #size-cells = <2>;
488 #address-cells = <3>; 489 #address-cells = <3>;
489 reg = <ffe0a000 1000>; 490 reg = <0xffe0a000 0x1000>;
490 bus-range = <0 ff>; 491 bus-range = <0 255>;
491 ranges = <02000000 0 c0000000 c0000000 0 20000000 492 ranges = <0x2000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
492 01000000 0 00000000 ffc20000 0 00010000>; 493 0x1000000 0x0 0x0 0xffc20000 0x0 0x10000>;
493 clock-frequency = <1fca055>; 494 clock-frequency = <33333333>;
494 interrupt-parent = <&mpic>; 495 interrupt-parent = <&mpic>;
495 interrupts = <1b 2>; 496 interrupts = <27 2>;
496 interrupt-map-mask = <f800 0 0 7>; 497 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
497 interrupt-map = < 498 interrupt-map = <
498 /* IDSEL 0x0 */ 499 /* IDSEL 0x0 */
499 0000 0 0 1 &mpic 0 1 500 0000 0x0 0x0 0x1 &mpic 0x0 0x1
500 0000 0 0 2 &mpic 1 1 501 0000 0x0 0x0 0x2 &mpic 0x1 0x1
501 0000 0 0 3 &mpic 2 1 502 0000 0x0 0x0 0x3 &mpic 0x2 0x1
502 0000 0 0 4 &mpic 3 1 503 0000 0x0 0x0 0x4 &mpic 0x3 0x1
503 >; 504 >;
504 pcie@0 { 505 pcie@0 {
505 reg = <0 0 0 0 0>; 506 reg = <0x0 0x0 0x0 0x0 0x0>;
506 #size-cells = <2>; 507 #size-cells = <2>;
507 #address-cells = <3>; 508 #address-cells = <3>;
508 device_type = "pci"; 509 device_type = "pci";
509 ranges = <02000000 0 c0000000 510 ranges = <0x2000000 0x0 0xc0000000
510 02000000 0 c0000000 511 0x2000000 0x0 0xc0000000
511 0 20000000 512 0x0 0x20000000
512 513
513 01000000 0 00000000 514 0x1000000 0x0 0x0
514 01000000 0 00000000 515 0x1000000 0x0 0x0
515 0 00100000>; 516 0x0 0x100000>;
516 }; 517 };
517 }; 518 };
518}; 519};
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index 79385bcd5c5f..7f9b999843ce 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -13,7 +13,7 @@
13 13
14/ { 14/ {
15 model = "MPC8641HPCN"; 15 model = "MPC8641HPCN";
16 compatible = "mpc86xx"; 16 compatible = "fsl,mpc8641hpcn";
17 #address-cells = <1>; 17 #address-cells = <1>;
18 #size-cells = <1>; 18 #size-cells = <1>;
19 19
diff --git a/arch/powerpc/boot/dts/mpc866ads.dts b/arch/powerpc/boot/dts/mpc866ads.dts
index daf9433e906b..765e43c997da 100644
--- a/arch/powerpc/boot/dts/mpc866ads.dts
+++ b/arch/powerpc/boot/dts/mpc866ads.dts
@@ -2,6 +2,7 @@
2 * MPC866 ADS Device Tree Source 2 * MPC866 ADS Device Tree Source
3 * 3 *
4 * Copyright 2006 MontaVista Software, Inc. 4 * Copyright 2006 MontaVista Software, Inc.
5 * Copyright 2008 Freescale Semiconductor, Inc.
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 8 * under the terms of the GNU General Public License as published by the
@@ -9,6 +10,7 @@
9 * option) any later version. 10 * option) any later version.
10 */ 11 */
11 12
13/dts-v1/;
12 14
13/ { 15/ {
14 model = "MPC866ADS"; 16 model = "MPC866ADS";
@@ -22,37 +24,37 @@
22 24
23 PowerPC,866@0 { 25 PowerPC,866@0 {
24 device_type = "cpu"; 26 device_type = "cpu";
25 reg = <0>; 27 reg = <0x0>;
26 d-cache-line-size = <10>; // 16 bytes 28 d-cache-line-size = <16>; // 16 bytes
27 i-cache-line-size = <10>; // 16 bytes 29 i-cache-line-size = <16>; // 16 bytes
28 d-cache-size = <2000>; // L1, 8K 30 d-cache-size = <0x2000>; // L1, 8K
29 i-cache-size = <4000>; // L1, 16K 31 i-cache-size = <0x4000>; // L1, 16K
30 timebase-frequency = <0>; 32 timebase-frequency = <0>;
31 bus-frequency = <0>; 33 bus-frequency = <0>;
32 clock-frequency = <0>; 34 clock-frequency = <0>;
33 interrupts = <f 2>; // decrementer interrupt 35 interrupts = <15 2>; // decrementer interrupt
34 interrupt-parent = <&PIC>; 36 interrupt-parent = <&PIC>;
35 }; 37 };
36 }; 38 };
37 39
38 memory { 40 memory {
39 device_type = "memory"; 41 device_type = "memory";
40 reg = <00000000 800000>; 42 reg = <0x0 0x800000>;
41 }; 43 };
42 44
43 localbus@ff000100 { 45 localbus@ff000100 {
44 compatible = "fsl,mpc866-localbus", "fsl,pq1-localbus"; 46 compatible = "fsl,mpc866-localbus", "fsl,pq1-localbus";
45 #address-cells = <2>; 47 #address-cells = <2>;
46 #size-cells = <1>; 48 #size-cells = <1>;
47 reg = <ff000100 40>; 49 reg = <0xff000100 0x40>;
48 50
49 ranges = < 51 ranges = <
50 1 0 ff080000 00008000 52 0x1 0x0 0xff080000 0x8000
51 5 0 ff0a0000 00008000 53 0x5 0x0 0xff0a0000 0x8000
52 >; 54 >;
53 55
54 board-control@1,0 { 56 board-control@1,0 {
55 reg = <1 0 20 5 300 4>; 57 reg = <0x1 0x0 0x20 0x5 0x300 0x4>;
56 compatible = "fsl,mpc866ads-bcsr"; 58 compatible = "fsl,mpc866ads-bcsr";
57 }; 59 };
58 }; 60 };
@@ -61,17 +63,17 @@
61 #address-cells = <1>; 63 #address-cells = <1>;
62 #size-cells = <1>; 64 #size-cells = <1>;
63 device_type = "soc"; 65 device_type = "soc";
64 ranges = <0 ff000000 00100000>; 66 ranges = <0x0 0xff000000 0x100000>;
65 reg = <ff000000 00000200>; 67 reg = <0xff000000 0x200>;
66 bus-frequency = <0>; 68 bus-frequency = <0>;
67 69
68 mdio@e00 { 70 mdio@e00 {
69 compatible = "fsl,mpc866-fec-mdio", "fsl,pq1-fec-mdio"; 71 compatible = "fsl,mpc866-fec-mdio", "fsl,pq1-fec-mdio";
70 reg = <e00 188>; 72 reg = <0xe00 0x188>;
71 #address-cells = <1>; 73 #address-cells = <1>;
72 #size-cells = <0>; 74 #size-cells = <0>;
73 PHY: ethernet-phy@f { 75 PHY: ethernet-phy@f {
74 reg = <f>; 76 reg = <0xf>;
75 device_type = "ethernet-phy"; 77 device_type = "ethernet-phy";
76 }; 78 };
77 }; 79 };
@@ -80,7 +82,7 @@
80 device_type = "network"; 82 device_type = "network";
81 compatible = "fsl,mpc866-fec-enet", 83 compatible = "fsl,mpc866-fec-enet",
82 "fsl,pq1-fec-enet"; 84 "fsl,pq1-fec-enet";
83 reg = <e00 188>; 85 reg = <0xe00 0x188>;
84 local-mac-address = [ 00 00 00 00 00 00 ]; 86 local-mac-address = [ 00 00 00 00 00 00 ];
85 interrupts = <3 1>; 87 interrupts = <3 1>;
86 interrupt-parent = <&PIC>; 88 interrupt-parent = <&PIC>;
@@ -91,7 +93,7 @@
91 PIC: pic@0 { 93 PIC: pic@0 {
92 interrupt-controller; 94 interrupt-controller;
93 #interrupt-cells = <2>; 95 #interrupt-cells = <2>;
94 reg = <0 24>; 96 reg = <0x0 0x24>;
95 compatible = "fsl,mpc866-pic", "fsl,pq1-pic"; 97 compatible = "fsl,mpc866-pic", "fsl,pq1-pic";
96 }; 98 };
97 99
@@ -100,7 +102,7 @@
100 #size-cells = <1>; 102 #size-cells = <1>;
101 compatible = "fsl,mpc866-cpm", "fsl,cpm1"; 103 compatible = "fsl,mpc866-cpm", "fsl,cpm1";
102 ranges; 104 ranges;
103 reg = <9c0 40>; 105 reg = <0x9c0 0x40>;
104 brg-frequency = <0>; 106 brg-frequency = <0>;
105 interrupts = <0 2>; // cpm error interrupt 107 interrupts = <0 2>; // cpm error interrupt
106 interrupt-parent = <&CPM_PIC>; 108 interrupt-parent = <&CPM_PIC>;
@@ -108,11 +110,11 @@
108 muram@2000 { 110 muram@2000 {
109 #address-cells = <1>; 111 #address-cells = <1>;
110 #size-cells = <1>; 112 #size-cells = <1>;
111 ranges = <0 2000 2000>; 113 ranges = <0x0 0x2000 0x2000>;
112 114
113 data@0 { 115 data@0 {
114 compatible = "fsl,cpm-muram-data"; 116 compatible = "fsl,cpm-muram-data";
115 reg = <0 1c00>; 117 reg = <0x0 0x1c00>;
116 }; 118 };
117 }; 119 };
118 120
@@ -120,7 +122,7 @@
120 compatible = "fsl,mpc866-brg", 122 compatible = "fsl,mpc866-brg",
121 "fsl,cpm1-brg", 123 "fsl,cpm1-brg",
122 "fsl,cpm-brg"; 124 "fsl,cpm-brg";
123 reg = <9f0 10>; 125 reg = <0x9f0 0x10>;
124 clock-frequency = <0>; 126 clock-frequency = <0>;
125 }; 127 };
126 128
@@ -130,7 +132,7 @@
130 #interrupt-cells = <1>; 132 #interrupt-cells = <1>;
131 interrupts = <5 2 0 2>; 133 interrupts = <5 2 0 2>;
132 interrupt-parent = <&PIC>; 134 interrupt-parent = <&PIC>;
133 reg = <930 20>; 135 reg = <0x930 0x20>;
134 compatible = "fsl,mpc866-cpm-pic", 136 compatible = "fsl,mpc866-cpm-pic",
135 "fsl,cpm1-pic"; 137 "fsl,cpm1-pic";
136 }; 138 };
@@ -140,31 +142,31 @@
140 device_type = "serial"; 142 device_type = "serial";
141 compatible = "fsl,mpc866-smc-uart", 143 compatible = "fsl,mpc866-smc-uart",
142 "fsl,cpm1-smc-uart"; 144 "fsl,cpm1-smc-uart";
143 reg = <a80 10 3e80 40>; 145 reg = <0xa80 0x10 0x3e80 0x40>;
144 interrupts = <4>; 146 interrupts = <4>;
145 interrupt-parent = <&CPM_PIC>; 147 interrupt-parent = <&CPM_PIC>;
146 fsl,cpm-brg = <1>; 148 fsl,cpm-brg = <1>;
147 fsl,cpm-command = <0090>; 149 fsl,cpm-command = <0x90>;
148 }; 150 };
149 151
150 serial@a90 { 152 serial@a90 {
151 device_type = "serial"; 153 device_type = "serial";
152 compatible = "fsl,mpc866-smc-uart", 154 compatible = "fsl,mpc866-smc-uart",
153 "fsl,cpm1-smc-uart"; 155 "fsl,cpm1-smc-uart";
154 reg = <a90 10 3f80 40>; 156 reg = <0xa90 0x10 0x3f80 0x40>;
155 interrupts = <3>; 157 interrupts = <3>;
156 interrupt-parent = <&CPM_PIC>; 158 interrupt-parent = <&CPM_PIC>;
157 fsl,cpm-brg = <2>; 159 fsl,cpm-brg = <2>;
158 fsl,cpm-command = <00d0>; 160 fsl,cpm-command = <0xd0>;
159 }; 161 };
160 162
161 ethernet@a00 { 163 ethernet@a00 {
162 device_type = "network"; 164 device_type = "network";
163 compatible = "fsl,mpc866-scc-enet", 165 compatible = "fsl,mpc866-scc-enet",
164 "fsl,cpm1-scc-enet"; 166 "fsl,cpm1-scc-enet";
165 reg = <a00 18 3c00 100>; 167 reg = <0xa00 0x18 0x3c00 0x100>;
166 local-mac-address = [ 00 00 00 00 00 00 ]; 168 local-mac-address = [ 00 00 00 00 00 00 ];
167 interrupts = <1e>; 169 interrupts = <30>;
168 interrupt-parent = <&CPM_PIC>; 170 interrupt-parent = <&CPM_PIC>;
169 fsl,cpm-command = <0000>; 171 fsl,cpm-command = <0000>;
170 linux,network-index = <1>; 172 linux,network-index = <1>;
diff --git a/arch/powerpc/boot/dts/mpc885ads.dts b/arch/powerpc/boot/dts/mpc885ads.dts
index d84a012c2aaf..9895043722b9 100644
--- a/arch/powerpc/boot/dts/mpc885ads.dts
+++ b/arch/powerpc/boot/dts/mpc885ads.dts
@@ -2,7 +2,7 @@
2 * MPC885 ADS Device Tree Source 2 * MPC885 ADS Device Tree Source
3 * 3 *
4 * Copyright 2006 MontaVista Software, Inc. 4 * Copyright 2006 MontaVista Software, Inc.
5 * Copyright 2007 Freescale Semiconductor, Inc. 5 * Copyright 2007,2008 Freescale Semiconductor, Inc.
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the 8 * under the terms of the GNU General Public License as published by the
@@ -10,6 +10,7 @@
10 * option) any later version. 10 * option) any later version.
11 */ 11 */
12 12
13/dts-v1/;
13 14
14/ { 15/ {
15 model = "MPC885ADS"; 16 model = "MPC885ADS";
@@ -23,45 +24,45 @@
23 24
24 PowerPC,885@0 { 25 PowerPC,885@0 {
25 device_type = "cpu"; 26 device_type = "cpu";
26 reg = <0>; 27 reg = <0x0>;
27 d-cache-line-size = <d#16>; 28 d-cache-line-size = <16>;
28 i-cache-line-size = <d#16>; 29 i-cache-line-size = <16>;
29 d-cache-size = <d#8192>; 30 d-cache-size = <8192>;
30 i-cache-size = <d#8192>; 31 i-cache-size = <8192>;
31 timebase-frequency = <0>; 32 timebase-frequency = <0>;
32 bus-frequency = <0>; 33 bus-frequency = <0>;
33 clock-frequency = <0>; 34 clock-frequency = <0>;
34 interrupts = <f 2>; // decrementer interrupt 35 interrupts = <15 2>; // decrementer interrupt
35 interrupt-parent = <&PIC>; 36 interrupt-parent = <&PIC>;
36 }; 37 };
37 }; 38 };
38 39
39 memory { 40 memory {
40 device_type = "memory"; 41 device_type = "memory";
41 reg = <0 0>; 42 reg = <0x0 0x0>;
42 }; 43 };
43 44
44 localbus@ff000100 { 45 localbus@ff000100 {
45 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus"; 46 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus";
46 #address-cells = <2>; 47 #address-cells = <2>;
47 #size-cells = <1>; 48 #size-cells = <1>;
48 reg = <ff000100 40>; 49 reg = <0xff000100 0x40>;
49 50
50 ranges = < 51 ranges = <
51 0 0 fe000000 00800000 52 0x0 0x0 0xfe000000 0x800000
52 1 0 ff080000 00008000 53 0x1 0x0 0xff080000 0x8000
53 5 0 ff0a0000 00008000 54 0x5 0x0 0xff0a0000 0x8000
54 >; 55 >;
55 56
56 flash@0,0 { 57 flash@0,0 {
57 compatible = "jedec-flash"; 58 compatible = "jedec-flash";
58 reg = <0 0 800000>; 59 reg = <0x0 0x0 0x800000>;
59 bank-width = <4>; 60 bank-width = <4>;
60 device-width = <1>; 61 device-width = <1>;
61 }; 62 };
62 63
63 board-control@1,0 { 64 board-control@1,0 {
64 reg = <1 0 20 5 300 4>; 65 reg = <0x1 0x0 0x20 0x5 0x300 0x4>;
65 compatible = "fsl,mpc885ads-bcsr"; 66 compatible = "fsl,mpc885ads-bcsr";
66 }; 67 };
67 }; 68 };
@@ -71,30 +72,30 @@
71 #address-cells = <1>; 72 #address-cells = <1>;
72 #size-cells = <1>; 73 #size-cells = <1>;
73 device_type = "soc"; 74 device_type = "soc";
74 ranges = <0 ff000000 00004000>; 75 ranges = <0x0 0xff000000 0x4000>;
75 bus-frequency = <0>; 76 bus-frequency = <0>;
76 77
77 // Temporary -- will go away once kernel uses ranges for get_immrbase(). 78 // Temporary -- will go away once kernel uses ranges for get_immrbase().
78 reg = <ff000000 4000>; 79 reg = <0xff000000 0x4000>;
79 80
80 mdio@e00 { 81 mdio@e00 {
81 compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio"; 82 compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
82 reg = <e00 188>; 83 reg = <0xe00 0x188>;
83 #address-cells = <1>; 84 #address-cells = <1>;
84 #size-cells = <0>; 85 #size-cells = <0>;
85 86
86 PHY0: ethernet-phy@0 { 87 PHY0: ethernet-phy@0 {
87 reg = <0>; 88 reg = <0x0>;
88 device_type = "ethernet-phy"; 89 device_type = "ethernet-phy";
89 }; 90 };
90 91
91 PHY1: ethernet-phy@1 { 92 PHY1: ethernet-phy@1 {
92 reg = <1>; 93 reg = <0x1>;
93 device_type = "ethernet-phy"; 94 device_type = "ethernet-phy";
94 }; 95 };
95 96
96 PHY2: ethernet-phy@2 { 97 PHY2: ethernet-phy@2 {
97 reg = <2>; 98 reg = <0x2>;
98 device_type = "ethernet-phy"; 99 device_type = "ethernet-phy";
99 }; 100 };
100 }; 101 };
@@ -103,7 +104,7 @@
103 device_type = "network"; 104 device_type = "network";
104 compatible = "fsl,mpc885-fec-enet", 105 compatible = "fsl,mpc885-fec-enet",
105 "fsl,pq1-fec-enet"; 106 "fsl,pq1-fec-enet";
106 reg = <e00 188>; 107 reg = <0xe00 0x188>;
107 local-mac-address = [ 00 00 00 00 00 00 ]; 108 local-mac-address = [ 00 00 00 00 00 00 ];
108 interrupts = <3 1>; 109 interrupts = <3 1>;
109 interrupt-parent = <&PIC>; 110 interrupt-parent = <&PIC>;
@@ -115,7 +116,7 @@
115 device_type = "network"; 116 device_type = "network";
116 compatible = "fsl,mpc885-fec-enet", 117 compatible = "fsl,mpc885-fec-enet",
117 "fsl,pq1-fec-enet"; 118 "fsl,pq1-fec-enet";
118 reg = <1e00 188>; 119 reg = <0x1e00 0x188>;
119 local-mac-address = [ 00 00 00 00 00 00 ]; 120 local-mac-address = [ 00 00 00 00 00 00 ];
120 interrupts = <7 1>; 121 interrupts = <7 1>;
121 interrupt-parent = <&PIC>; 122 interrupt-parent = <&PIC>;
@@ -126,7 +127,7 @@
126 PIC: interrupt-controller@0 { 127 PIC: interrupt-controller@0 {
127 interrupt-controller; 128 interrupt-controller;
128 #interrupt-cells = <2>; 129 #interrupt-cells = <2>;
129 reg = <0 24>; 130 reg = <0x0 0x24>;
130 compatible = "fsl,mpc885-pic", "fsl,pq1-pic"; 131 compatible = "fsl,mpc885-pic", "fsl,pq1-pic";
131 }; 132 };
132 133
@@ -136,29 +137,29 @@
136 #size-cells = <2>; 137 #size-cells = <2>;
137 compatible = "fsl,pq-pcmcia"; 138 compatible = "fsl,pq-pcmcia";
138 device_type = "pcmcia"; 139 device_type = "pcmcia";
139 reg = <80 80>; 140 reg = <0x80 0x80>;
140 interrupt-parent = <&PIC>; 141 interrupt-parent = <&PIC>;
141 interrupts = <d 1>; 142 interrupts = <13 1>;
142 }; 143 };
143 144
144 cpm@9c0 { 145 cpm@9c0 {
145 #address-cells = <1>; 146 #address-cells = <1>;
146 #size-cells = <1>; 147 #size-cells = <1>;
147 compatible = "fsl,mpc885-cpm", "fsl,cpm1"; 148 compatible = "fsl,mpc885-cpm", "fsl,cpm1";
148 command-proc = <9c0>; 149 command-proc = <0x9c0>;
149 interrupts = <0>; // cpm error interrupt 150 interrupts = <0>; // cpm error interrupt
150 interrupt-parent = <&CPM_PIC>; 151 interrupt-parent = <&CPM_PIC>;
151 reg = <9c0 40>; 152 reg = <0x9c0 0x40>;
152 ranges; 153 ranges;
153 154
154 muram@2000 { 155 muram@2000 {
155 #address-cells = <1>; 156 #address-cells = <1>;
156 #size-cells = <1>; 157 #size-cells = <1>;
157 ranges = <0 2000 2000>; 158 ranges = <0x0 0x2000 0x2000>;
158 159
159 data@0 { 160 data@0 {
160 compatible = "fsl,cpm-muram-data"; 161 compatible = "fsl,cpm-muram-data";
161 reg = <0 1c00>; 162 reg = <0x0 0x1c00>;
162 }; 163 };
163 }; 164 };
164 165
@@ -167,7 +168,7 @@
167 "fsl,cpm1-brg", 168 "fsl,cpm1-brg",
168 "fsl,cpm-brg"; 169 "fsl,cpm-brg";
169 clock-frequency = <0>; 170 clock-frequency = <0>;
170 reg = <9f0 10>; 171 reg = <0x9f0 0x10>;
171 }; 172 };
172 173
173 CPM_PIC: interrupt-controller@930 { 174 CPM_PIC: interrupt-controller@930 {
@@ -175,7 +176,7 @@
175 #interrupt-cells = <1>; 176 #interrupt-cells = <1>;
176 interrupts = <5 2 0 2>; 177 interrupts = <5 2 0 2>;
177 interrupt-parent = <&PIC>; 178 interrupt-parent = <&PIC>;
178 reg = <930 20>; 179 reg = <0x930 0x20>;
179 compatible = "fsl,mpc885-cpm-pic", 180 compatible = "fsl,mpc885-cpm-pic",
180 "fsl,cpm1-pic"; 181 "fsl,cpm1-pic";
181 }; 182 };
@@ -184,34 +185,34 @@
184 device_type = "serial"; 185 device_type = "serial";
185 compatible = "fsl,mpc885-smc-uart", 186 compatible = "fsl,mpc885-smc-uart",
186 "fsl,cpm1-smc-uart"; 187 "fsl,cpm1-smc-uart";
187 reg = <a80 10 3e80 40>; 188 reg = <0xa80 0x10 0x3e80 0x40>;
188 interrupts = <4>; 189 interrupts = <4>;
189 interrupt-parent = <&CPM_PIC>; 190 interrupt-parent = <&CPM_PIC>;
190 fsl,cpm-brg = <1>; 191 fsl,cpm-brg = <1>;
191 fsl,cpm-command = <0090>; 192 fsl,cpm-command = <0x90>;
192 }; 193 };
193 194
194 serial@a90 { 195 serial@a90 {
195 device_type = "serial"; 196 device_type = "serial";
196 compatible = "fsl,mpc885-smc-uart", 197 compatible = "fsl,mpc885-smc-uart",
197 "fsl,cpm1-smc-uart"; 198 "fsl,cpm1-smc-uart";
198 reg = <a90 10 3f80 40>; 199 reg = <0xa90 0x10 0x3f80 0x40>;
199 interrupts = <3>; 200 interrupts = <3>;
200 interrupt-parent = <&CPM_PIC>; 201 interrupt-parent = <&CPM_PIC>;
201 fsl,cpm-brg = <2>; 202 fsl,cpm-brg = <2>;
202 fsl,cpm-command = <00d0>; 203 fsl,cpm-command = <0xd0>;
203 }; 204 };
204 205
205 ethernet@a40 { 206 ethernet@a40 {
206 device_type = "network"; 207 device_type = "network";
207 compatible = "fsl,mpc885-scc-enet", 208 compatible = "fsl,mpc885-scc-enet",
208 "fsl,cpm1-scc-enet"; 209 "fsl,cpm1-scc-enet";
209 reg = <a40 18 3e00 100>; 210 reg = <0xa40 0x18 0x3e00 0x100>;
210 local-mac-address = [ 00 00 00 00 00 00 ]; 211 local-mac-address = [ 00 00 00 00 00 00 ];
211 interrupts = <1c>; 212 interrupts = <28>;
212 interrupt-parent = <&CPM_PIC>; 213 interrupt-parent = <&CPM_PIC>;
213 phy-handle = <&PHY2>; 214 phy-handle = <&PHY2>;
214 fsl,cpm-command = <0080>; 215 fsl,cpm-command = <0x80>;
215 linux,network-index = <2>; 216 linux,network-index = <2>;
216 }; 217 };
217 }; 218 };
diff --git a/arch/powerpc/boot/dts/pq2fads.dts b/arch/powerpc/boot/dts/pq2fads.dts
index 2d564921897a..b2d61091b36d 100644
--- a/arch/powerpc/boot/dts/pq2fads.dts
+++ b/arch/powerpc/boot/dts/pq2fads.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * Device Tree for the PQ2FADS-ZU board with an MPC8280 chip. 2 * Device Tree for the PQ2FADS-ZU board with an MPC8280 chip.
3 * 3 *
4 * Copyright 2007 Freescale Semiconductor Inc. 4 * Copyright 2007,2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the 7 * under the terms of the GNU General Public License as published by the
@@ -9,6 +9,8 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 model = "pq2fads"; 15 model = "pq2fads";
14 compatible = "fsl,pq2fads"; 16 compatible = "fsl,pq2fads";
@@ -21,11 +23,11 @@
21 23
22 cpu@0 { 24 cpu@0 {
23 device_type = "cpu"; 25 device_type = "cpu";
24 reg = <0>; 26 reg = <0x0>;
25 d-cache-line-size = <d#32>; 27 d-cache-line-size = <32>;
26 i-cache-line-size = <d#32>; 28 i-cache-line-size = <32>;
27 d-cache-size = <d#16384>; 29 d-cache-size = <16384>;
28 i-cache-size = <d#16384>; 30 i-cache-size = <16384>;
29 timebase-frequency = <0>; 31 timebase-frequency = <0>;
30 clock-frequency = <0>; 32 clock-frequency = <0>;
31 }; 33 };
@@ -33,7 +35,7 @@
33 35
34 memory { 36 memory {
35 device_type = "memory"; 37 device_type = "memory";
36 reg = <0 0>; 38 reg = <0x0 0x0>;
37 }; 39 };
38 40
39 localbus@f0010100 { 41 localbus@f0010100 {
@@ -41,67 +43,67 @@
41 "fsl,pq2-localbus"; 43 "fsl,pq2-localbus";
42 #address-cells = <2>; 44 #address-cells = <2>;
43 #size-cells = <1>; 45 #size-cells = <1>;
44 reg = <f0010100 60>; 46 reg = <0xf0010100 0x60>;
45 47
46 ranges = <0 0 fe000000 00800000 48 ranges = <0x0 0x0 0xfe000000 0x800000
47 1 0 f4500000 00008000 49 0x1 0x0 0xf4500000 0x8000
48 8 0 f8200000 00008000>; 50 0x8 0x0 0xf8200000 0x8000>;
49 51
50 flash@0,0 { 52 flash@0,0 {
51 compatible = "jedec-flash"; 53 compatible = "jedec-flash";
52 reg = <0 0 800000>; 54 reg = <0x0 0x0 0x800000>;
53 bank-width = <4>; 55 bank-width = <4>;
54 device-width = <1>; 56 device-width = <1>;
55 }; 57 };
56 58
57 bcsr@1,0 { 59 bcsr@1,0 {
58 reg = <1 0 20>; 60 reg = <0x1 0x0 0x20>;
59 compatible = "fsl,pq2fads-bcsr"; 61 compatible = "fsl,pq2fads-bcsr";
60 }; 62 };
61 63
62 PCI_PIC: pic@8,0 { 64 PCI_PIC: pic@8,0 {
63 #interrupt-cells = <1>; 65 #interrupt-cells = <1>;
64 interrupt-controller; 66 interrupt-controller;
65 reg = <8 0 8>; 67 reg = <0x8 0x0 0x8>;
66 compatible = "fsl,pq2ads-pci-pic"; 68 compatible = "fsl,pq2ads-pci-pic";
67 interrupt-parent = <&PIC>; 69 interrupt-parent = <&PIC>;
68 interrupts = <18 8>; 70 interrupts = <24 8>;
69 }; 71 };
70 }; 72 };
71 73
72 pci@f0010800 { 74 pci@f0010800 {
73 device_type = "pci"; 75 device_type = "pci";
74 reg = <f0010800 10c f00101ac 8 f00101c4 8>; 76 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
75 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci"; 77 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci";
76 #interrupt-cells = <1>; 78 #interrupt-cells = <1>;
77 #size-cells = <2>; 79 #size-cells = <2>;
78 #address-cells = <3>; 80 #address-cells = <3>;
79 clock-frequency = <d#66000000>; 81 clock-frequency = <66000000>;
80 interrupt-map-mask = <f800 0 0 7>; 82 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
81 interrupt-map = < 83 interrupt-map = <
82 /* IDSEL 0x16 */ 84 /* IDSEL 0x16 */
83 b000 0 0 1 &PCI_PIC 0 85 0xb000 0x0 0x0 0x1 &PCI_PIC 0
84 b000 0 0 2 &PCI_PIC 1 86 0xb000 0x0 0x0 0x2 &PCI_PIC 1
85 b000 0 0 3 &PCI_PIC 2 87 0xb000 0x0 0x0 0x3 &PCI_PIC 2
86 b000 0 0 4 &PCI_PIC 3 88 0xb000 0x0 0x0 0x4 &PCI_PIC 3
87 89
88 /* IDSEL 0x17 */ 90 /* IDSEL 0x17 */
89 b800 0 0 1 &PCI_PIC 4 91 0xb800 0x0 0x0 0x1 &PCI_PIC 4
90 b800 0 0 2 &PCI_PIC 5 92 0xb800 0x0 0x0 0x2 &PCI_PIC 5
91 b800 0 0 3 &PCI_PIC 6 93 0xb800 0x0 0x0 0x3 &PCI_PIC 6
92 b800 0 0 4 &PCI_PIC 7 94 0xb800 0x0 0x0 0x4 &PCI_PIC 7
93 95
94 /* IDSEL 0x18 */ 96 /* IDSEL 0x18 */
95 c000 0 0 1 &PCI_PIC 8 97 0xc000 0x0 0x0 0x1 &PCI_PIC 8
96 c000 0 0 2 &PCI_PIC 9 98 0xc000 0x0 0x0 0x2 &PCI_PIC 9
97 c000 0 0 3 &PCI_PIC a 99 0xc000 0x0 0x0 0x3 &PCI_PIC 10
98 c000 0 0 4 &PCI_PIC b>; 100 0xc000 0x0 0x0 0x4 &PCI_PIC 11>;
99 101
100 interrupt-parent = <&PIC>; 102 interrupt-parent = <&PIC>;
101 interrupts = <12 8>; 103 interrupts = <18 8>;
102 ranges = <42000000 0 80000000 80000000 0 20000000 104 ranges = <0x42000000 0x0 0x80000000 0x80000000 0x0 0x20000000
103 02000000 0 a0000000 a0000000 0 20000000 105 0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
104 01000000 0 00000000 f6000000 0 02000000>; 106 0x1000000 0x0 0x0 0xf6000000 0x0 0x2000000>;
105 }; 107 };
106 108
107 soc@f0000000 { 109 soc@f0000000 {
@@ -109,27 +111,27 @@
109 #size-cells = <1>; 111 #size-cells = <1>;
110 device_type = "soc"; 112 device_type = "soc";
111 compatible = "fsl,mpc8280", "fsl,pq2-soc"; 113 compatible = "fsl,mpc8280", "fsl,pq2-soc";
112 ranges = <00000000 f0000000 00053000>; 114 ranges = <0x0 0xf0000000 0x53000>;
113 115
114 // Temporary -- will go away once kernel uses ranges for get_immrbase(). 116 // Temporary -- will go away once kernel uses ranges for get_immrbase().
115 reg = <f0000000 00053000>; 117 reg = <0xf0000000 0x53000>;
116 118
117 cpm@119c0 { 119 cpm@119c0 {
118 #address-cells = <1>; 120 #address-cells = <1>;
119 #size-cells = <1>; 121 #size-cells = <1>;
120 #interrupt-cells = <2>; 122 #interrupt-cells = <2>;
121 compatible = "fsl,mpc8280-cpm", "fsl,cpm2"; 123 compatible = "fsl,mpc8280-cpm", "fsl,cpm2";
122 reg = <119c0 30>; 124 reg = <0x119c0 0x30>;
123 ranges; 125 ranges;
124 126
125 muram@0 { 127 muram@0 {
126 #address-cells = <1>; 128 #address-cells = <1>;
127 #size-cells = <1>; 129 #size-cells = <1>;
128 ranges = <0 0 10000>; 130 ranges = <0x0 0x0 0x10000>;
129 131
130 data@0 { 132 data@0 {
131 compatible = "fsl,cpm-muram-data"; 133 compatible = "fsl,cpm-muram-data";
132 reg = <0 2000 9800 800>; 134 reg = <0x0 0x2000 0x9800 0x800>;
133 }; 135 };
134 }; 136 };
135 137
@@ -137,53 +139,53 @@
137 compatible = "fsl,mpc8280-brg", 139 compatible = "fsl,mpc8280-brg",
138 "fsl,cpm2-brg", 140 "fsl,cpm2-brg",
139 "fsl,cpm-brg"; 141 "fsl,cpm-brg";
140 reg = <119f0 10 115f0 10>; 142 reg = <0x119f0 0x10 0x115f0 0x10>;
141 }; 143 };
142 144
143 serial@11a00 { 145 serial@11a00 {
144 device_type = "serial"; 146 device_type = "serial";
145 compatible = "fsl,mpc8280-scc-uart", 147 compatible = "fsl,mpc8280-scc-uart",
146 "fsl,cpm2-scc-uart"; 148 "fsl,cpm2-scc-uart";
147 reg = <11a00 20 8000 100>; 149 reg = <0x11a00 0x20 0x8000 0x100>;
148 interrupts = <28 8>; 150 interrupts = <40 8>;
149 interrupt-parent = <&PIC>; 151 interrupt-parent = <&PIC>;
150 fsl,cpm-brg = <1>; 152 fsl,cpm-brg = <1>;
151 fsl,cpm-command = <00800000>; 153 fsl,cpm-command = <0x800000>;
152 }; 154 };
153 155
154 serial@11a20 { 156 serial@11a20 {
155 device_type = "serial"; 157 device_type = "serial";
156 compatible = "fsl,mpc8280-scc-uart", 158 compatible = "fsl,mpc8280-scc-uart",
157 "fsl,cpm2-scc-uart"; 159 "fsl,cpm2-scc-uart";
158 reg = <11a20 20 8100 100>; 160 reg = <0x11a20 0x20 0x8100 0x100>;
159 interrupts = <29 8>; 161 interrupts = <41 8>;
160 interrupt-parent = <&PIC>; 162 interrupt-parent = <&PIC>;
161 fsl,cpm-brg = <2>; 163 fsl,cpm-brg = <2>;
162 fsl,cpm-command = <04a00000>; 164 fsl,cpm-command = <0x4a00000>;
163 }; 165 };
164 166
165 ethernet@11320 { 167 ethernet@11320 {
166 device_type = "network"; 168 device_type = "network";
167 compatible = "fsl,mpc8280-fcc-enet", 169 compatible = "fsl,mpc8280-fcc-enet",
168 "fsl,cpm2-fcc-enet"; 170 "fsl,cpm2-fcc-enet";
169 reg = <11320 20 8500 100 113b0 1>; 171 reg = <0x11320 0x20 0x8500 0x100 0x113b0 0x1>;
170 interrupts = <21 8>; 172 interrupts = <33 8>;
171 interrupt-parent = <&PIC>; 173 interrupt-parent = <&PIC>;
172 phy-handle = <&PHY0>; 174 phy-handle = <&PHY0>;
173 linux,network-index = <0>; 175 linux,network-index = <0>;
174 fsl,cpm-command = <16200300>; 176 fsl,cpm-command = <0x16200300>;
175 }; 177 };
176 178
177 ethernet@11340 { 179 ethernet@11340 {
178 device_type = "network"; 180 device_type = "network";
179 compatible = "fsl,mpc8280-fcc-enet", 181 compatible = "fsl,mpc8280-fcc-enet",
180 "fsl,cpm2-fcc-enet"; 182 "fsl,cpm2-fcc-enet";
181 reg = <11340 20 8600 100 113d0 1>; 183 reg = <0x11340 0x20 0x8600 0x100 0x113d0 0x1>;
182 interrupts = <22 8>; 184 interrupts = <34 8>;
183 interrupt-parent = <&PIC>; 185 interrupt-parent = <&PIC>;
184 phy-handle = <&PHY1>; 186 phy-handle = <&PHY1>;
185 linux,network-index = <1>; 187 linux,network-index = <1>;
186 fsl,cpm-command = <1a400300>; 188 fsl,cpm-command = <0x1a400300>;
187 local-mac-address = [00 e0 0c 00 79 01]; 189 local-mac-address = [00 e0 0c 00 79 01];
188 }; 190 };
189 191
@@ -194,21 +196,21 @@
194 "fsl,cpm2-mdio-bitbang"; 196 "fsl,cpm2-mdio-bitbang";
195 #address-cells = <1>; 197 #address-cells = <1>;
196 #size-cells = <0>; 198 #size-cells = <0>;
197 reg = <10d40 14>; 199 reg = <0x10d40 0x14>;
198 fsl,mdio-pin = <9>; 200 fsl,mdio-pin = <9>;
199 fsl,mdc-pin = <a>; 201 fsl,mdc-pin = <10>;
200 202
201 PHY0: ethernet-phy@0 { 203 PHY0: ethernet-phy@0 {
202 interrupt-parent = <&PIC>; 204 interrupt-parent = <&PIC>;
203 interrupts = <19 2>; 205 interrupts = <25 2>;
204 reg = <0>; 206 reg = <0x0>;
205 device_type = "ethernet-phy"; 207 device_type = "ethernet-phy";
206 }; 208 };
207 209
208 PHY1: ethernet-phy@1 { 210 PHY1: ethernet-phy@1 {
209 interrupt-parent = <&PIC>; 211 interrupt-parent = <&PIC>;
210 interrupts = <19 2>; 212 interrupts = <25 2>;
211 reg = <3>; 213 reg = <0x3>;
212 device_type = "ethernet-phy"; 214 device_type = "ethernet-phy";
213 }; 215 };
214 }; 216 };
@@ -218,17 +220,17 @@
218 #size-cells = <0>; 220 #size-cells = <0>;
219 compatible = "fsl,mpc8280-usb", 221 compatible = "fsl,mpc8280-usb",
220 "fsl,cpm2-usb"; 222 "fsl,cpm2-usb";
221 reg = <11b60 18 8b00 100>; 223 reg = <0x11b60 0x18 0x8b00 0x100>;
222 interrupt-parent = <&PIC>; 224 interrupt-parent = <&PIC>;
223 interrupts = <b 8>; 225 interrupts = <11 8>;
224 fsl,cpm-command = <2e600000>; 226 fsl,cpm-command = <0x2e600000>;
225 }; 227 };
226 }; 228 };
227 229
228 PIC: interrupt-controller@10c00 { 230 PIC: interrupt-controller@10c00 {
229 #interrupt-cells = <2>; 231 #interrupt-cells = <2>;
230 interrupt-controller; 232 interrupt-controller;
231 reg = <10c00 80>; 233 reg = <0x10c00 0x80>;
232 compatible = "fsl,mpc8280-pic", "fsl,cpm2-pic"; 234 compatible = "fsl,mpc8280-pic", "fsl,cpm2-pic";
233 }; 235 };
234 236
diff --git a/arch/powerpc/boot/dts/prpmc2800.dts b/arch/powerpc/boot/dts/prpmc2800.dts
index 297dfa53fe9e..1ee6ff43dd57 100644
--- a/arch/powerpc/boot/dts/prpmc2800.dts
+++ b/arch/powerpc/boot/dts/prpmc2800.dts
@@ -11,6 +11,8 @@
11 * if it can determine the exact PrPMC type. 11 * if it can determine the exact PrPMC type.
12 */ 12 */
13 13
14/dts-v1/;
15
14/ { 16/ {
15 #address-cells = <1>; 17 #address-cells = <1>;
16 #size-cells = <1>; 18 #size-cells = <1>;
@@ -25,46 +27,46 @@
25 PowerPC,7447 { 27 PowerPC,7447 {
26 device_type = "cpu"; 28 device_type = "cpu";
27 reg = <0>; 29 reg = <0>;
28 clock-frequency = <2bb0b140>; /* Default (733 MHz) */ 30 clock-frequency = <733333333>; /* Default */
29 bus-frequency = <7f28155>; /* 133.333333 MHz */ 31 bus-frequency = <133333333>;
30 timebase-frequency = <1fca055>; /* 33.333333 MHz */ 32 timebase-frequency = <33333333>;
31 i-cache-line-size = <20>; 33 i-cache-line-size = <32>;
32 d-cache-line-size = <20>; 34 d-cache-line-size = <32>;
33 i-cache-size = <8000>; 35 i-cache-size = <32768>;
34 d-cache-size = <8000>; 36 d-cache-size = <32768>;
35 }; 37 };
36 }; 38 };
37 39
38 memory { 40 memory {
39 device_type = "memory"; 41 device_type = "memory";
40 reg = <00000000 20000000>; /* Default (512MB) */ 42 reg = <0x0 0x20000000>; /* Default (512MB) */
41 }; 43 };
42 44
43 mv64x60@f1000000 { /* Marvell Discovery */ 45 system-controller@f1000000 { /* Marvell Discovery mv64360 */
44 #address-cells = <1>; 46 #address-cells = <1>;
45 #size-cells = <1>; 47 #size-cells = <1>;
46 model = "mv64360"; /* Default */ 48 model = "mv64360"; /* Default */
47 compatible = "marvell,mv64x60"; 49 compatible = "marvell,mv64360";
48 clock-frequency = <7f28155>; /* 133.333333 MHz */ 50 clock-frequency = <133333333>;
49 reg = <f1000000 00010000>; 51 reg = <0xf1000000 0x10000>;
50 virtual-reg = <f1000000>; 52 virtual-reg = <0xf1000000>;
51 ranges = <88000000 88000000 01000000 /* PCI 0 I/O Space */ 53 ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */
52 80000000 80000000 08000000 /* PCI 0 MEM Space */ 54 0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */
53 a0000000 a0000000 04000000 /* User FLASH */ 55 0xa0000000 0xa0000000 0x4000000 /* User FLASH */
54 00000000 f1000000 00010000 /* Bridge's regs */ 56 0x00000000 0xf1000000 0x0010000 /* Bridge's regs */
55 f2000000 f2000000 00040000>; /* Integrated SRAM */ 57 0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */
56 58
57 flash@a0000000 { 59 flash@a0000000 {
58 device_type = "rom"; 60 device_type = "rom";
59 compatible = "direct-mapped"; 61 compatible = "direct-mapped";
60 reg = <a0000000 4000000>; /* Default (64MB) */ 62 reg = <0xa0000000 0x4000000>; /* Default (64MB) */
61 probe-type = "CFI"; 63 probe-type = "CFI";
62 bank-width = <4>; 64 bank-width = <4>;
63 partitions = <00000000 00100000 /* RO */ 65 partitions = <0x00000000 0x00100000 /* RO */
64 00100000 00040001 /* RW */ 66 0x00100000 0x00040001 /* RW */
65 00140000 00400000 /* RO */ 67 0x00140000 0x00400000 /* RO */
66 00540000 039c0000 /* RO */ 68 0x00540000 0x039c0000 /* RO */
67 03f00000 00100000>; /* RO */ 69 0x03f00000 0x00100000>; /* RO */
68 partition-names = "FW Image A", "FW Config Data", "Kernel Image", "Filesystem", "FW Image B"; 70 partition-names = "FW Image A", "FW Config Data", "Kernel Image", "Filesystem", "FW Image B";
69 }; 71 };
70 72
@@ -72,171 +74,153 @@
72 #address-cells = <1>; 74 #address-cells = <1>;
73 #size-cells = <0>; 75 #size-cells = <0>;
74 device_type = "mdio"; 76 device_type = "mdio";
75 compatible = "marvell,mv64x60-mdio"; 77 compatible = "marvell,mv64360-mdio";
76 ethernet-phy@1 { 78 PHY0: ethernet-phy@1 {
77 device_type = "ethernet-phy"; 79 device_type = "ethernet-phy";
78 compatible = "broadcom,bcm5421"; 80 compatible = "broadcom,bcm5421";
79 interrupts = <4c>; /* GPP 12 */ 81 interrupts = <76>; /* GPP 12 */
80 interrupt-parent = <&/mv64x60/pic>; 82 interrupt-parent = <&PIC>;
81 reg = <1>; 83 reg = <1>;
82 }; 84 };
83 ethernet-phy@3 { 85 PHY1: ethernet-phy@3 {
84 device_type = "ethernet-phy"; 86 device_type = "ethernet-phy";
85 compatible = "broadcom,bcm5421"; 87 compatible = "broadcom,bcm5421";
86 interrupts = <4c>; /* GPP 12 */ 88 interrupts = <76>; /* GPP 12 */
87 interrupt-parent = <&/mv64x60/pic>; 89 interrupt-parent = <&PIC>;
88 reg = <3>; 90 reg = <3>;
89 }; 91 };
90 }; 92 };
91 93
92 ethernet@2000 { 94 ethernet-group@2000 {
93 reg = <2000 2000>; 95 #address-cells = <1>;
94 eth0 { 96 #size-cells = <0>;
97 compatible = "marvell,mv64360-eth-group";
98 reg = <0x2000 0x2000>;
99 ethernet@0 {
95 device_type = "network"; 100 device_type = "network";
96 compatible = "marvell,mv64x60-eth"; 101 compatible = "marvell,mv64360-eth";
97 block-index = <0>; 102 reg = <0>;
98 interrupts = <20>; 103 interrupts = <32>;
99 interrupt-parent = <&/mv64x60/pic>; 104 interrupt-parent = <&PIC>;
100 phy = <&/mv64x60/mdio/ethernet-phy@1>; 105 phy = <&PHY0>;
101 local-mac-address = [ 00 00 00 00 00 00 ]; 106 local-mac-address = [ 00 00 00 00 00 00 ];
102 }; 107 };
103 eth1 { 108 ethernet@1 {
104 device_type = "network"; 109 device_type = "network";
105 compatible = "marvell,mv64x60-eth"; 110 compatible = "marvell,mv64360-eth";
106 block-index = <1>; 111 reg = <1>;
107 interrupts = <21>; 112 interrupts = <33>;
108 interrupt-parent = <&/mv64x60/pic>; 113 interrupt-parent = <&PIC>;
109 phy = <&/mv64x60/mdio/ethernet-phy@3>; 114 phy = <&PHY1>;
110 local-mac-address = [ 00 00 00 00 00 00 ]; 115 local-mac-address = [ 00 00 00 00 00 00 ];
111 }; 116 };
112 }; 117 };
113 118
114 sdma@4000 { 119 SDMA0: sdma@4000 {
115 device_type = "dma"; 120 compatible = "marvell,mv64360-sdma";
116 compatible = "marvell,mv64x60-sdma"; 121 reg = <0x4000 0xc18>;
117 reg = <4000 c18>; 122 virtual-reg = <0xf1004000>;
118 virtual-reg = <f1004000>; 123 interrupts = <36>;
119 interrupt-base = <0>; 124 interrupt-parent = <&PIC>;
120 interrupts = <24>;
121 interrupt-parent = <&/mv64x60/pic>;
122 }; 125 };
123 126
124 sdma@6000 { 127 SDMA1: sdma@6000 {
125 device_type = "dma"; 128 compatible = "marvell,mv64360-sdma";
126 compatible = "marvell,mv64x60-sdma"; 129 reg = <0x6000 0xc18>;
127 reg = <6000 c18>; 130 virtual-reg = <0xf1006000>;
128 virtual-reg = <f1006000>; 131 interrupts = <38>;
129 interrupt-base = <0>; 132 interrupt-parent = <&PIC>;
130 interrupts = <26>;
131 interrupt-parent = <&/mv64x60/pic>;
132 }; 133 };
133 134
134 brg@b200 { 135 BRG0: brg@b200 {
135 compatible = "marvell,mv64x60-brg"; 136 compatible = "marvell,mv64360-brg";
136 reg = <b200 8>; 137 reg = <0xb200 0x8>;
137 clock-src = <8>; 138 clock-src = <8>;
138 clock-frequency = <7ed6b40>; 139 clock-frequency = <133333333>;
139 current-speed = <2580>; 140 current-speed = <9600>;
140 bcr = <0>;
141 }; 141 };
142 142
143 brg@b208 { 143 BRG1: brg@b208 {
144 compatible = "marvell,mv64x60-brg"; 144 compatible = "marvell,mv64360-brg";
145 reg = <b208 8>; 145 reg = <0xb208 0x8>;
146 clock-src = <8>; 146 clock-src = <8>;
147 clock-frequency = <7ed6b40>; 147 clock-frequency = <133333333>;
148 current-speed = <2580>; 148 current-speed = <9600>;
149 bcr = <0>;
150 }; 149 };
151 150
152 cunit@f200 { 151 CUNIT: cunit@f200 {
153 reg = <f200 200>; 152 reg = <0xf200 0x200>;
154 }; 153 };
155 154
156 mpscrouting@b400 { 155 MPSCROUTING: mpscrouting@b400 {
157 reg = <b400 c>; 156 reg = <0xb400 0xc>;
158 }; 157 };
159 158
160 mpscintr@b800 { 159 MPSCINTR: mpscintr@b800 {
161 reg = <b800 100>; 160 reg = <0xb800 0x100>;
162 virtual-reg = <f100b800>; 161 virtual-reg = <0xf100b800>;
163 }; 162 };
164 163
165 mpsc@8000 { 164 MPSC0: mpsc@8000 {
166 device_type = "serial"; 165 device_type = "serial";
167 compatible = "marvell,mpsc"; 166 compatible = "marvell,mv64360-mpsc";
168 reg = <8000 38>; 167 reg = <0x8000 0x38>;
169 virtual-reg = <f1008000>; 168 virtual-reg = <0xf1008000>;
170 sdma = <&/mv64x60/sdma@4000>; 169 sdma = <&SDMA0>;
171 brg = <&/mv64x60/brg@b200>; 170 brg = <&BRG0>;
172 cunit = <&/mv64x60/cunit@f200>; 171 cunit = <&CUNIT>;
173 mpscrouting = <&/mv64x60/mpscrouting@b400>; 172 mpscrouting = <&MPSCROUTING>;
174 mpscintr = <&/mv64x60/mpscintr@b800>; 173 mpscintr = <&MPSCINTR>;
175 block-index = <0>; 174 cell-index = <0>;
176 max_idle = <28>; 175 interrupts = <40>;
177 chr_1 = <0>; 176 interrupt-parent = <&PIC>;
178 chr_2 = <0>;
179 chr_10 = <3>;
180 mpcr = <0>;
181 interrupts = <28>;
182 interrupt-parent = <&/mv64x60/pic>;
183 }; 177 };
184 178
185 mpsc@9000 { 179 MPSC1: mpsc@9000 {
186 device_type = "serial"; 180 device_type = "serial";
187 compatible = "marvell,mpsc"; 181 compatible = "marvell,mv64360-mpsc";
188 reg = <9000 38>; 182 reg = <0x9000 0x38>;
189 virtual-reg = <f1009000>; 183 virtual-reg = <0xf1009000>;
190 sdma = <&/mv64x60/sdma@6000>; 184 sdma = <&SDMA1>;
191 brg = <&/mv64x60/brg@b208>; 185 brg = <&BRG1>;
192 cunit = <&/mv64x60/cunit@f200>; 186 cunit = <&CUNIT>;
193 mpscrouting = <&/mv64x60/mpscrouting@b400>; 187 mpscrouting = <&MPSCROUTING>;
194 mpscintr = <&/mv64x60/mpscintr@b800>; 188 mpscintr = <&MPSCINTR>;
195 block-index = <1>; 189 cell-index = <1>;
196 max_idle = <28>; 190 interrupts = <42>;
197 chr_1 = <0>; 191 interrupt-parent = <&PIC>;
198 chr_2 = <0>;
199 chr_10 = <3>;
200 mpcr = <0>;
201 interrupts = <2a>;
202 interrupt-parent = <&/mv64x60/pic>;
203 }; 192 };
204 193
205 wdt@b410 { /* watchdog timer */ 194 wdt@b410 { /* watchdog timer */
206 compatible = "marvell,mv64x60-wdt"; 195 compatible = "marvell,mv64360-wdt";
207 reg = <b410 8>; 196 reg = <0xb410 0x8>;
208 timeout = <a>; /* wdt timeout in seconds */
209 }; 197 };
210 198
211 i2c@c000 { 199 i2c@c000 {
212 device_type = "i2c"; 200 device_type = "i2c";
213 compatible = "marvell,mv64x60-i2c"; 201 compatible = "marvell,mv64360-i2c";
214 reg = <c000 20>; 202 reg = <0xc000 0x20>;
215 virtual-reg = <f100c000>; 203 virtual-reg = <0xf100c000>;
216 freq_m = <8>; 204 interrupts = <37>;
217 freq_n = <3>; 205 interrupt-parent = <&PIC>;
218 timeout = <3e8>; /* 1000 = 1 second */
219 retries = <1>;
220 interrupts = <25>;
221 interrupt-parent = <&/mv64x60/pic>;
222 }; 206 };
223 207
224 pic { 208 PIC: pic {
225 #interrupt-cells = <1>; 209 #interrupt-cells = <1>;
226 #address-cells = <0>; 210 #address-cells = <0>;
227 compatible = "marvell,mv64x60-pic"; 211 compatible = "marvell,mv64360-pic";
228 reg = <0000 88>; 212 reg = <0x0 0x88>;
229 interrupt-controller; 213 interrupt-controller;
230 }; 214 };
231 215
232 mpp@f000 { 216 mpp@f000 {
233 compatible = "marvell,mv64x60-mpp"; 217 compatible = "marvell,mv64360-mpp";
234 reg = <f000 10>; 218 reg = <0xf000 0x10>;
235 }; 219 };
236 220
237 gpp@f100 { 221 gpp@f100 {
238 compatible = "marvell,mv64x60-gpp"; 222 compatible = "marvell,mv64360-gpp";
239 reg = <f100 20>; 223 reg = <0xf100 0x20>;
240 }; 224 };
241 225
242 pci@80000000 { 226 pci@80000000 {
@@ -244,73 +228,75 @@
244 #size-cells = <2>; 228 #size-cells = <2>;
245 #interrupt-cells = <1>; 229 #interrupt-cells = <1>;
246 device_type = "pci"; 230 device_type = "pci";
247 compatible = "marvell,mv64x60-pci"; 231 compatible = "marvell,mv64360-pci";
248 reg = <0cf8 8>; 232 reg = <0xcf8 0x8>;
249 ranges = <01000000 0 0 88000000 0 01000000 233 ranges = <0x01000000 0x0 0x0
250 02000000 0 80000000 80000000 0 08000000>; 234 0x88000000 0x0 0x01000000
251 bus-range = <0 ff>; 235 0x02000000 0x0 0x80000000
252 clock-frequency = <3EF1480>; 236 0x80000000 0x0 0x08000000>;
253 interrupt-pci-iack = <0c34>; 237 bus-range = <0 255>;
254 interrupt-parent = <&/mv64x60/pic>; 238 clock-frequency = <66000000>;
255 interrupt-map-mask = <f800 0 0 7>; 239 interrupt-pci-iack = <0xc34>;
240 interrupt-parent = <&PIC>;
241 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
256 interrupt-map = < 242 interrupt-map = <
257 /* IDSEL 0x0a */ 243 /* IDSEL 0x0a */
258 5000 0 0 1 &/mv64x60/pic 50 244 0x5000 0 0 1 &PIC 80
259 5000 0 0 2 &/mv64x60/pic 51 245 0x5000 0 0 2 &PIC 81
260 5000 0 0 3 &/mv64x60/pic 5b 246 0x5000 0 0 3 &PIC 91
261 5000 0 0 4 &/mv64x60/pic 5d 247 0x5000 0 0 4 &PIC 93
262 248
263 /* IDSEL 0x0b */ 249 /* IDSEL 0x0b */
264 5800 0 0 1 &/mv64x60/pic 5b 250 0x5800 0 0 1 &PIC 91
265 5800 0 0 2 &/mv64x60/pic 5d 251 0x5800 0 0 2 &PIC 93
266 5800 0 0 3 &/mv64x60/pic 50 252 0x5800 0 0 3 &PIC 80
267 5800 0 0 4 &/mv64x60/pic 51 253 0x5800 0 0 4 &PIC 81
268 254
269 /* IDSEL 0x0c */ 255 /* IDSEL 0x0c */
270 6000 0 0 1 &/mv64x60/pic 5b 256 0x6000 0 0 1 &PIC 91
271 6000 0 0 2 &/mv64x60/pic 5d 257 0x6000 0 0 2 &PIC 93
272 6000 0 0 3 &/mv64x60/pic 50 258 0x6000 0 0 3 &PIC 80
273 6000 0 0 4 &/mv64x60/pic 51 259 0x6000 0 0 4 &PIC 81
274 260
275 /* IDSEL 0x0d */ 261 /* IDSEL 0x0d */
276 6800 0 0 1 &/mv64x60/pic 5d 262 0x6800 0 0 1 &PIC 93
277 6800 0 0 2 &/mv64x60/pic 50 263 0x6800 0 0 2 &PIC 80
278 6800 0 0 3 &/mv64x60/pic 51 264 0x6800 0 0 3 &PIC 81
279 6800 0 0 4 &/mv64x60/pic 5b 265 0x6800 0 0 4 &PIC 91
280 >; 266 >;
281 }; 267 };
282 268
283 cpu-error@0070 { 269 cpu-error@0070 {
284 compatible = "marvell,mv64x60-cpu-error"; 270 compatible = "marvell,mv64360-cpu-error";
285 reg = <0070 10 0128 28>; 271 reg = <0x70 0x10 0x128 0x28>;
286 interrupts = <03>; 272 interrupts = <3>;
287 interrupt-parent = <&/mv64x60/pic>; 273 interrupt-parent = <&PIC>;
288 }; 274 };
289 275
290 sram-ctrl@0380 { 276 sram-ctrl@0380 {
291 compatible = "marvell,mv64x60-sram-ctrl"; 277 compatible = "marvell,mv64360-sram-ctrl";
292 reg = <0380 80>; 278 reg = <0x380 0x80>;
293 interrupts = <0d>; 279 interrupts = <13>;
294 interrupt-parent = <&/mv64x60/pic>; 280 interrupt-parent = <&PIC>;
295 }; 281 };
296 282
297 pci-error@1d40 { 283 pci-error@1d40 {
298 compatible = "marvell,mv64x60-pci-error"; 284 compatible = "marvell,mv64360-pci-error";
299 reg = <1d40 40 0c28 4>; 285 reg = <0x1d40 0x40 0xc28 0x4>;
300 interrupts = <0c>; 286 interrupts = <12>;
301 interrupt-parent = <&/mv64x60/pic>; 287 interrupt-parent = <&PIC>;
302 }; 288 };
303 289
304 mem-ctrl@1400 { 290 mem-ctrl@1400 {
305 compatible = "marvell,mv64x60-mem-ctrl"; 291 compatible = "marvell,mv64360-mem-ctrl";
306 reg = <1400 60>; 292 reg = <0x1400 0x60>;
307 interrupts = <11>; 293 interrupts = <17>;
308 interrupt-parent = <&/mv64x60/pic>; 294 interrupt-parent = <&PIC>;
309 }; 295 };
310 }; 296 };
311 297
312 chosen { 298 chosen {
313 bootargs = "ip=on"; 299 bootargs = "ip=on";
314 linux,stdout-path = "/mv64x60@f1000000/mpsc@8000"; 300 linux,stdout-path = &MPSC0;
315 }; 301 };
316}; 302};
diff --git a/arch/powerpc/boot/dts/rainier.dts b/arch/powerpc/boot/dts/rainier.dts
index f947c75a2e94..6a8fa7089ea2 100644
--- a/arch/powerpc/boot/dts/rainier.dts
+++ b/arch/powerpc/boot/dts/rainier.dts
@@ -254,7 +254,6 @@
254 }; 254 };
255 255
256 EMAC0: ethernet@ef600e00 { 256 EMAC0: ethernet@ef600e00 {
257 linux,network-index = <0>;
258 device_type = "network"; 257 device_type = "network";
259 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4"; 258 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
260 interrupt-parent = <&EMAC0>; 259 interrupt-parent = <&EMAC0>;
@@ -270,7 +269,7 @@
270 mal-tx-channel = <0>; 269 mal-tx-channel = <0>;
271 mal-rx-channel = <0>; 270 mal-rx-channel = <0>;
272 cell-index = <0>; 271 cell-index = <0>;
273 max-frame-size = <5dc>; 272 max-frame-size = <2328>;
274 rx-fifo-size = <1000>; 273 rx-fifo-size = <1000>;
275 tx-fifo-size = <800>; 274 tx-fifo-size = <800>;
276 phy-mode = "rgmii"; 275 phy-mode = "rgmii";
@@ -284,7 +283,6 @@
284 }; 283 };
285 284
286 EMAC1: ethernet@ef600f00 { 285 EMAC1: ethernet@ef600f00 {
287 linux,network-index = <1>;
288 device_type = "network"; 286 device_type = "network";
289 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4"; 287 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
290 interrupt-parent = <&EMAC1>; 288 interrupt-parent = <&EMAC1>;
@@ -300,7 +298,7 @@
300 mal-tx-channel = <1>; 298 mal-tx-channel = <1>;
301 mal-rx-channel = <1>; 299 mal-rx-channel = <1>;
302 cell-index = <1>; 300 cell-index = <1>;
303 max-frame-size = <5dc>; 301 max-frame-size = <2328>;
304 rx-fifo-size = <1000>; 302 rx-fifo-size = <1000>;
305 tx-fifo-size = <800>; 303 tx-fifo-size = <800>;
306 phy-mode = "rgmii"; 304 phy-mode = "rgmii";
diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts
new file mode 100644
index 000000000000..3eebeec157b3
--- /dev/null
+++ b/arch/powerpc/boot/dts/sbc8641d.dts
@@ -0,0 +1,352 @@
1/*
2 * SBC8641D Device Tree Source
3 *
4 * Copyright 2008 Wind River Systems Inc.
5 *
6 * Paul Gortmaker (see MAINTAINERS for contact information)
7 *
8 * Based largely on the mpc8641_hpcn.dts by Freescale Semiconductor Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15
16/dts-v1/;
17
18/ {
19 model = "SBC8641D";
20 compatible = "wind,sbc8641";
21 #address-cells = <1>;
22 #size-cells = <1>;
23
24 aliases {
25 ethernet0 = &enet0;
26 ethernet1 = &enet1;
27 ethernet2 = &enet2;
28 ethernet3 = &enet3;
29 serial0 = &serial0;
30 serial1 = &serial1;
31 pci0 = &pci0;
32 pci1 = &pci1;
33 };
34
35 cpus {
36 #address-cells = <1>;
37 #size-cells = <0>;
38
39 PowerPC,8641@0 {
40 device_type = "cpu";
41 reg = <0>;
42 d-cache-line-size = <32>;
43 i-cache-line-size = <32>;
44 d-cache-size = <32768>; // L1
45 i-cache-size = <32768>; // L1
46 timebase-frequency = <0>; // From uboot
47 bus-frequency = <0>; // From uboot
48 clock-frequency = <0>; // From uboot
49 };
50 PowerPC,8641@1 {
51 device_type = "cpu";
52 reg = <1>;
53 d-cache-line-size = <32>;
54 i-cache-line-size = <32>;
55 d-cache-size = <32768>;
56 i-cache-size = <32768>;
57 timebase-frequency = <0>; // From uboot
58 bus-frequency = <0>; // From uboot
59 clock-frequency = <0>; // From uboot
60 };
61 };
62
63 memory {
64 device_type = "memory";
65 reg = <0x00000000 0x20000000>; // 512M at 0x0
66 };
67
68 localbus@f8005000 {
69 #address-cells = <2>;
70 #size-cells = <1>;
71 compatible = "fsl,mpc8641-localbus", "simple-bus";
72 reg = <0xf8005000 0x1000>;
73 interrupts = <19 2>;
74 interrupt-parent = <&mpic>;
75
76 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
77 1 0 0xf0000000 0x00010000 // 64KB EEPROM
78 2 0 0xf1000000 0x00100000 // EPLD (1MB)
79 3 0 0xe0000000 0x04000000 // 64MB LB SDRAM (CS3)
80 4 0 0xe4000000 0x04000000 // 64MB LB SDRAM (CS4)
81 6 0 0xf4000000 0x00100000 // LCD display (1MB)
82 7 0 0xe8000000 0x04000000>; // 64MB OneNAND
83
84 flash@0,0 {
85 compatible = "cfi-flash";
86 reg = <0 0 0x01000000>;
87 bank-width = <2>;
88 device-width = <2>;
89 #address-cells = <1>;
90 #size-cells = <1>;
91 partition@0 {
92 label = "dtb";
93 reg = <0x00000000 0x00100000>;
94 read-only;
95 };
96 partition@300000 {
97 label = "kernel";
98 reg = <0x00100000 0x00400000>;
99 read-only;
100 };
101 partition@400000 {
102 label = "fs";
103 reg = <0x00500000 0x00a00000>;
104 };
105 partition@700000 {
106 label = "firmware";
107 reg = <0x00f00000 0x00100000>;
108 read-only;
109 };
110 };
111
112 epld@2,0 {
113 compatible = "wrs,epld-localbus";
114 #address-cells = <2>;
115 #size-cells = <1>;
116 reg = <2 0 0x100000>;
117 ranges = <0 0 5 0 1 // User switches
118 1 0 5 1 1 // Board ID/Rev
119 3 0 5 3 1>; // LEDs
120 };
121 };
122
123 soc@f8000000 {
124 #address-cells = <1>;
125 #size-cells = <1>;
126 device_type = "soc";
127 compatible = "simple-bus";
128 ranges = <0x00000000 0xf8000000 0x00100000>;
129 reg = <0xf8000000 0x00001000>; // CCSRBAR
130 bus-frequency = <0>;
131
132 i2c@3000 {
133 #address-cells = <1>;
134 #size-cells = <0>;
135 cell-index = <0>;
136 compatible = "fsl-i2c";
137 reg = <0x3000 0x100>;
138 interrupts = <43 2>;
139 interrupt-parent = <&mpic>;
140 dfsrr;
141 };
142
143 i2c@3100 {
144 #address-cells = <1>;
145 #size-cells = <0>;
146 cell-index = <1>;
147 compatible = "fsl-i2c";
148 reg = <0x3100 0x100>;
149 interrupts = <43 2>;
150 interrupt-parent = <&mpic>;
151 dfsrr;
152 };
153
154 mdio@24520 {
155 #address-cells = <1>;
156 #size-cells = <0>;
157 compatible = "fsl,gianfar-mdio";
158 reg = <0x24520 0x20>;
159
160 phy0: ethernet-phy@1f {
161 interrupt-parent = <&mpic>;
162 interrupts = <10 1>;
163 reg = <0x1f>;
164 device_type = "ethernet-phy";
165 };
166 phy1: ethernet-phy@0 {
167 interrupt-parent = <&mpic>;
168 interrupts = <10 1>;
169 reg = <0>;
170 device_type = "ethernet-phy";
171 };
172 phy2: ethernet-phy@1 {
173 interrupt-parent = <&mpic>;
174 interrupts = <10 1>;
175 reg = <1>;
176 device_type = "ethernet-phy";
177 };
178 phy3: ethernet-phy@2 {
179 interrupt-parent = <&mpic>;
180 interrupts = <10 1>;
181 reg = <2>;
182 device_type = "ethernet-phy";
183 };
184 };
185
186 enet0: ethernet@24000 {
187 cell-index = <0>;
188 device_type = "network";
189 model = "TSEC";
190 compatible = "gianfar";
191 reg = <0x24000 0x1000>;
192 local-mac-address = [ 00 00 00 00 00 00 ];
193 interrupts = <29 2 30 2 34 2>;
194 interrupt-parent = <&mpic>;
195 phy-handle = <&phy0>;
196 phy-connection-type = "rgmii-id";
197 };
198
199 enet1: ethernet@25000 {
200 cell-index = <1>;
201 device_type = "network";
202 model = "TSEC";
203 compatible = "gianfar";
204 reg = <0x25000 0x1000>;
205 local-mac-address = [ 00 00 00 00 00 00 ];
206 interrupts = <35 2 36 2 40 2>;
207 interrupt-parent = <&mpic>;
208 phy-handle = <&phy1>;
209 phy-connection-type = "rgmii-id";
210 };
211
212 enet2: ethernet@26000 {
213 cell-index = <2>;
214 device_type = "network";
215 model = "TSEC";
216 compatible = "gianfar";
217 reg = <0x26000 0x1000>;
218 local-mac-address = [ 00 00 00 00 00 00 ];
219 interrupts = <31 2 32 2 33 2>;
220 interrupt-parent = <&mpic>;
221 phy-handle = <&phy2>;
222 phy-connection-type = "rgmii-id";
223 };
224
225 enet3: ethernet@27000 {
226 cell-index = <3>;
227 device_type = "network";
228 model = "TSEC";
229 compatible = "gianfar";
230 reg = <0x27000 0x1000>;
231 local-mac-address = [ 00 00 00 00 00 00 ];
232 interrupts = <37 2 38 2 39 2>;
233 interrupt-parent = <&mpic>;
234 phy-handle = <&phy3>;
235 phy-connection-type = "rgmii-id";
236 };
237
238 serial0: serial@4500 {
239 cell-index = <0>;
240 device_type = "serial";
241 compatible = "ns16550";
242 reg = <0x4500 0x100>;
243 clock-frequency = <0>;
244 interrupts = <42 2>;
245 interrupt-parent = <&mpic>;
246 };
247
248 serial1: serial@4600 {
249 cell-index = <1>;
250 device_type = "serial";
251 compatible = "ns16550";
252 reg = <0x4600 0x100>;
253 clock-frequency = <0>;
254 interrupts = <28 2>;
255 interrupt-parent = <&mpic>;
256 };
257
258 mpic: pic@40000 {
259 clock-frequency = <0>;
260 interrupt-controller;
261 #address-cells = <0>;
262 #interrupt-cells = <2>;
263 reg = <0x40000 0x40000>;
264 compatible = "chrp,open-pic";
265 device_type = "open-pic";
266 big-endian;
267 };
268
269 global-utilities@e0000 {
270 compatible = "fsl,mpc8641-guts";
271 reg = <0xe0000 0x1000>;
272 fsl,has-rstcr;
273 };
274 };
275
276 pci0: pcie@f8008000 {
277 cell-index = <0>;
278 compatible = "fsl,mpc8641-pcie";
279 device_type = "pci";
280 #interrupt-cells = <1>;
281 #size-cells = <2>;
282 #address-cells = <3>;
283 reg = <0xf8008000 0x1000>;
284 bus-range = <0x0 0xff>;
285 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
286 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
287 clock-frequency = <33333333>;
288 interrupt-parent = <&mpic>;
289 interrupts = <24 2>;
290 interrupt-map-mask = <0xff00 0 0 7>;
291 interrupt-map = <
292 /* IDSEL 0x0 */
293 0x0000 0 0 1 &mpic 0 1
294 0x0000 0 0 2 &mpic 1 1
295 0x0000 0 0 3 &mpic 2 1
296 0x0000 0 0 4 &mpic 3 1
297 >;
298
299 pcie@0 {
300 reg = <0 0 0 0 0>;
301 #size-cells = <2>;
302 #address-cells = <3>;
303 device_type = "pci";
304 ranges = <0x02000000 0x0 0x80000000
305 0x02000000 0x0 0x80000000
306 0x0 0x20000000
307
308 0x01000000 0x0 0x00000000
309 0x01000000 0x0 0x00000000
310 0x0 0x00100000>;
311 };
312
313 };
314
315 pci1: pcie@f8009000 {
316 cell-index = <1>;
317 compatible = "fsl,mpc8641-pcie";
318 device_type = "pci";
319 #interrupt-cells = <1>;
320 #size-cells = <2>;
321 #address-cells = <3>;
322 reg = <0xf8009000 0x1000>;
323 bus-range = <0 0xff>;
324 ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
325 0x01000000 0x0 0x00000000 0xe3000000 0x0 0x00100000>;
326 clock-frequency = <33333333>;
327 interrupt-parent = <&mpic>;
328 interrupts = <25 2>;
329 interrupt-map-mask = <0xf800 0 0 7>;
330 interrupt-map = <
331 /* IDSEL 0x0 */
332 0x0000 0 0 1 &mpic 4 1
333 0x0000 0 0 2 &mpic 5 1
334 0x0000 0 0 3 &mpic 6 1
335 0x0000 0 0 4 &mpic 7 1
336 >;
337
338 pcie@0 {
339 reg = <0 0 0 0 0>;
340 #size-cells = <2>;
341 #address-cells = <3>;
342 device_type = "pci";
343 ranges = <0x02000000 0x0 0xa0000000
344 0x02000000 0x0 0xa0000000
345 0x0 0x20000000
346
347 0x01000000 0x0 0x00000000
348 0x01000000 0x0 0x00000000
349 0x0 0x00100000>;
350 };
351 };
352};
diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 8db9515d7dc3..a1ae4d6ec990 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -269,7 +269,6 @@
269 }; 269 };
270 270
271 EMAC0: ethernet@ef600e00 { 271 EMAC0: ethernet@ef600e00 {
272 linux,network-index = <0>;
273 device_type = "network"; 272 device_type = "network";
274 compatible = "ibm,emac-440epx", "ibm,emac4"; 273 compatible = "ibm,emac-440epx", "ibm,emac4";
275 interrupt-parent = <&EMAC0>; 274 interrupt-parent = <&EMAC0>;
@@ -285,7 +284,7 @@
285 mal-tx-channel = <0>; 284 mal-tx-channel = <0>;
286 mal-rx-channel = <0>; 285 mal-rx-channel = <0>;
287 cell-index = <0>; 286 cell-index = <0>;
288 max-frame-size = <5dc>; 287 max-frame-size = <2328>;
289 rx-fifo-size = <1000>; 288 rx-fifo-size = <1000>;
290 tx-fifo-size = <800>; 289 tx-fifo-size = <800>;
291 phy-mode = "rgmii"; 290 phy-mode = "rgmii";
@@ -299,7 +298,6 @@
299 }; 298 };
300 299
301 EMAC1: ethernet@ef600f00 { 300 EMAC1: ethernet@ef600f00 {
302 linux,network-index = <1>;
303 device_type = "network"; 301 device_type = "network";
304 compatible = "ibm,emac-440epx", "ibm,emac4"; 302 compatible = "ibm,emac-440epx", "ibm,emac4";
305 interrupt-parent = <&EMAC1>; 303 interrupt-parent = <&EMAC1>;
@@ -315,7 +313,7 @@
315 mal-tx-channel = <1>; 313 mal-tx-channel = <1>;
316 mal-rx-channel = <1>; 314 mal-rx-channel = <1>;
317 cell-index = <1>; 315 cell-index = <1>;
318 max-frame-size = <5dc>; 316 max-frame-size = <2328>;
319 rx-fifo-size = <1000>; 317 rx-fifo-size = <1000>;
320 tx-fifo-size = <800>; 318 tx-fifo-size = <800>;
321 phy-mode = "rgmii"; 319 phy-mode = "rgmii";
diff --git a/arch/powerpc/boot/dts/taishan.dts b/arch/powerpc/boot/dts/taishan.dts
index 8278068c802c..e808e1c5593a 100644
--- a/arch/powerpc/boot/dts/taishan.dts
+++ b/arch/powerpc/boot/dts/taishan.dts
@@ -104,6 +104,16 @@
104 // FIXME: anything else? 104 // FIXME: anything else?
105 }; 105 };
106 106
107 L2C0: l2c {
108 compatible = "ibm,l2-cache-440gx", "ibm,l2-cache";
109 dcr-reg = <20 8 /* Internal SRAM DCR's */
110 30 8>; /* L2 cache DCR's */
111 cache-line-size = <20>; /* 32 bytes */
112 cache-size = <40000>; /* L2, 256K */
113 interrupt-parent = <&UIC2>;
114 interrupts = <17 1>;
115 };
116
107 plb { 117 plb {
108 compatible = "ibm,plb-440gx", "ibm,plb4"; 118 compatible = "ibm,plb-440gx", "ibm,plb4";
109 #address-cells = <2>; 119 #address-cells = <2>;
@@ -232,10 +242,18 @@
232 reg = <40000790 8>; 242 reg = <40000790 8>;
233 }; 243 };
234 244
245 TAH0: emac-tah@40000b50 {
246 compatible = "ibm,tah-440gx", "ibm,tah";
247 reg = <40000b50 30>;
248 };
249
250 TAH1: emac-tah@40000d50 {
251 compatible = "ibm,tah-440gx", "ibm,tah";
252 reg = <40000d50 30>;
253 };
235 254
236 EMAC0: ethernet@40000800 { 255 EMAC0: ethernet@40000800 {
237 unused = <1>; 256 unused = <1>;
238 linux,network-index = <2>;
239 device_type = "network"; 257 device_type = "network";
240 compatible = "ibm,emac-440gx", "ibm,emac4"; 258 compatible = "ibm,emac-440gx", "ibm,emac4";
241 interrupt-parent = <&UIC1>; 259 interrupt-parent = <&UIC1>;
@@ -256,7 +274,6 @@
256 }; 274 };
257 EMAC1: ethernet@40000900 { 275 EMAC1: ethernet@40000900 {
258 unused = <1>; 276 unused = <1>;
259 linux,network-index = <3>;
260 device_type = "network"; 277 device_type = "network";
261 compatible = "ibm,emac-440gx", "ibm,emac4"; 278 compatible = "ibm,emac-440gx", "ibm,emac4";
262 interrupt-parent = <&UIC1>; 279 interrupt-parent = <&UIC1>;
@@ -277,7 +294,6 @@
277 }; 294 };
278 295
279 EMAC2: ethernet@40000c00 { 296 EMAC2: ethernet@40000c00 {
280 linux,network-index = <0>;
281 device_type = "network"; 297 device_type = "network";
282 compatible = "ibm,emac-440gx", "ibm,emac4"; 298 compatible = "ibm,emac-440gx", "ibm,emac4";
283 interrupt-parent = <&UIC2>; 299 interrupt-parent = <&UIC2>;
@@ -288,7 +304,7 @@
288 mal-tx-channel = <2>; 304 mal-tx-channel = <2>;
289 mal-rx-channel = <2>; 305 mal-rx-channel = <2>;
290 cell-index = <2>; 306 cell-index = <2>;
291 max-frame-size = <5dc>; 307 max-frame-size = <2328>;
292 rx-fifo-size = <1000>; 308 rx-fifo-size = <1000>;
293 tx-fifo-size = <800>; 309 tx-fifo-size = <800>;
294 phy-mode = "rgmii"; 310 phy-mode = "rgmii";
@@ -297,10 +313,11 @@
297 rgmii-channel = <0>; 313 rgmii-channel = <0>;
298 zmii-device = <&ZMII0>; 314 zmii-device = <&ZMII0>;
299 zmii-channel = <2>; 315 zmii-channel = <2>;
316 tah-device = <&TAH0>;
317 tah-channel = <0>;
300 }; 318 };
301 319
302 EMAC3: ethernet@40000e00 { 320 EMAC3: ethernet@40000e00 {
303 linux,network-index = <1>;
304 device_type = "network"; 321 device_type = "network";
305 compatible = "ibm,emac-440gx", "ibm,emac4"; 322 compatible = "ibm,emac-440gx", "ibm,emac4";
306 interrupt-parent = <&UIC2>; 323 interrupt-parent = <&UIC2>;
@@ -311,7 +328,7 @@
311 mal-tx-channel = <3>; 328 mal-tx-channel = <3>;
312 mal-rx-channel = <3>; 329 mal-rx-channel = <3>;
313 cell-index = <3>; 330 cell-index = <3>;
314 max-frame-size = <5dc>; 331 max-frame-size = <2328>;
315 rx-fifo-size = <1000>; 332 rx-fifo-size = <1000>;
316 tx-fifo-size = <800>; 333 tx-fifo-size = <800>;
317 phy-mode = "rgmii"; 334 phy-mode = "rgmii";
@@ -320,6 +337,8 @@
320 rgmii-channel = <1>; 337 rgmii-channel = <1>;
321 zmii-device = <&ZMII0>; 338 zmii-device = <&ZMII0>;
322 zmii-channel = <3>; 339 zmii-channel = <3>;
340 tah-device = <&TAH1>;
341 tah-channel = <0>;
323 }; 342 };
324 343
325 344
diff --git a/arch/powerpc/boot/dts/walnut.dts b/arch/powerpc/boot/dts/walnut.dts
index dcc21b0438e5..a328607c8f84 100644
--- a/arch/powerpc/boot/dts/walnut.dts
+++ b/arch/powerpc/boot/dts/walnut.dts
@@ -125,7 +125,6 @@
125 }; 125 };
126 126
127 EMAC: ethernet@ef600800 { 127 EMAC: ethernet@ef600800 {
128 linux,network-index = <0>;
129 device_type = "network"; 128 device_type = "network";
130 compatible = "ibm,emac-405gp", "ibm,emac"; 129 compatible = "ibm,emac-405gp", "ibm,emac";
131 interrupt-parent = <&UIC0>; 130 interrupt-parent = <&UIC0>;
diff --git a/arch/powerpc/boot/dts/warp.dts b/arch/powerpc/boot/dts/warp.dts
index dc1499d30f43..b04a52e22bf5 100644
--- a/arch/powerpc/boot/dts/warp.dts
+++ b/arch/powerpc/boot/dts/warp.dts
@@ -204,7 +204,6 @@
204 }; 204 };
205 205
206 EMAC0: ethernet@ef600e00 { 206 EMAC0: ethernet@ef600e00 {
207 linux,network-index = <0>;
208 device_type = "network"; 207 device_type = "network";
209 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 208 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
210 interrupt-parent = <&UIC1>; 209 interrupt-parent = <&UIC1>;
diff --git a/arch/powerpc/boot/dts/yosemite.dts b/arch/powerpc/boot/dts/yosemite.dts
new file mode 100644
index 000000000000..0d6d332814e0
--- /dev/null
+++ b/arch/powerpc/boot/dts/yosemite.dts
@@ -0,0 +1,304 @@
1/*
2 * Device Tree Source for AMCC Yosemite
3 *
4 * Copyright 2008 IBM Corp.
5 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
6 *
7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without
9 * any warranty of any kind, whether express or implied.
10 */
11
12/ {
13 #address-cells = <2>;
14 #size-cells = <1>;
15 model = "amcc,yosemite";
16 compatible = "amcc,yosemite","amcc,bamboo";
17 dcr-parent = <&/cpus/cpu@0>;
18
19 aliases {
20 ethernet0 = &EMAC0;
21 ethernet1 = &EMAC1;
22 serial0 = &UART0;
23 serial1 = &UART1;
24 serial2 = &UART2;
25 serial3 = &UART3;
26 };
27
28 cpus {
29 #address-cells = <1>;
30 #size-cells = <0>;
31
32 cpu@0 {
33 device_type = "cpu";
34 model = "PowerPC,440EP";
35 reg = <0>;
36 clock-frequency = <0>; /* Filled in by zImage */
37 timebase-frequency = <0>; /* Filled in by zImage */
38 i-cache-line-size = <20>;
39 d-cache-line-size = <20>;
40 i-cache-size = <8000>;
41 d-cache-size = <8000>;
42 dcr-controller;
43 dcr-access-method = "native";
44 };
45 };
46
47 memory {
48 device_type = "memory";
49 reg = <0 0 0>; /* Filled in by zImage */
50 };
51
52 UIC0: interrupt-controller0 {
53 compatible = "ibm,uic-440ep","ibm,uic";
54 interrupt-controller;
55 cell-index = <0>;
56 dcr-reg = <0c0 009>;
57 #address-cells = <0>;
58 #size-cells = <0>;
59 #interrupt-cells = <2>;
60 };
61
62 UIC1: interrupt-controller1 {
63 compatible = "ibm,uic-440ep","ibm,uic";
64 interrupt-controller;
65 cell-index = <1>;
66 dcr-reg = <0d0 009>;
67 #address-cells = <0>;
68 #size-cells = <0>;
69 #interrupt-cells = <2>;
70 interrupts = <1e 4 1f 4>; /* cascade */
71 interrupt-parent = <&UIC0>;
72 };
73
74 SDR0: sdr {
75 compatible = "ibm,sdr-440ep";
76 dcr-reg = <00e 002>;
77 };
78
79 CPR0: cpr {
80 compatible = "ibm,cpr-440ep";
81 dcr-reg = <00c 002>;
82 };
83
84 plb {
85 compatible = "ibm,plb-440ep", "ibm,plb-440gp", "ibm,plb4";
86 #address-cells = <2>;
87 #size-cells = <1>;
88 ranges;
89 clock-frequency = <0>; /* Filled in by zImage */
90
91 SDRAM0: sdram {
92 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
93 dcr-reg = <010 2>;
94 };
95
96 DMA0: dma {
97 compatible = "ibm,dma-440ep", "ibm,dma-440gp";
98 dcr-reg = <100 027>;
99 };
100
101 MAL0: mcmal {
102 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
103 dcr-reg = <180 62>;
104 num-tx-chans = <4>;
105 num-rx-chans = <2>;
106 interrupt-parent = <&MAL0>;
107 interrupts = <0 1 2 3 4>;
108 #interrupt-cells = <1>;
109 #address-cells = <0>;
110 #size-cells = <0>;
111 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
112 /*RXEOB*/ 1 &UIC0 b 4
113 /*SERR*/ 2 &UIC1 0 4
114 /*TXDE*/ 3 &UIC1 1 4
115 /*RXDE*/ 4 &UIC1 2 4>;
116 };
117
118 POB0: opb {
119 compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb";
120 #address-cells = <1>;
121 #size-cells = <1>;
122 /* Bamboo is oddball in the 44x world and doesn't use the ERPN
123 * bits.
124 */
125 ranges = <00000000 0 00000000 80000000
126 80000000 0 80000000 80000000>;
127 interrupt-parent = <&UIC1>;
128 interrupts = <7 4>;
129 clock-frequency = <0>; /* Filled in by zImage */
130
131 EBC0: ebc {
132 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
133 dcr-reg = <012 2>;
134 #address-cells = <2>;
135 #size-cells = <1>;
136 clock-frequency = <0>; /* Filled in by zImage */
137 interrupts = <5 1>;
138 interrupt-parent = <&UIC1>;
139 };
140
141 UART0: serial@ef600300 {
142 device_type = "serial";
143 compatible = "ns16550";
144 reg = <ef600300 8>;
145 virtual-reg = <ef600300>;
146 clock-frequency = <0>; /* Filled in by zImage */
147 current-speed = <1c200>;
148 interrupt-parent = <&UIC0>;
149 interrupts = <0 4>;
150 };
151
152 UART1: serial@ef600400 {
153 device_type = "serial";
154 compatible = "ns16550";
155 reg = <ef600400 8>;
156 virtual-reg = <ef600400>;
157 clock-frequency = <0>;
158 current-speed = <0>;
159 interrupt-parent = <&UIC0>;
160 interrupts = <1 4>;
161 };
162
163 UART2: serial@ef600500 {
164 device_type = "serial";
165 compatible = "ns16550";
166 reg = <ef600500 8>;
167 virtual-reg = <ef600500>;
168 clock-frequency = <0>;
169 current-speed = <0>;
170 interrupt-parent = <&UIC0>;
171 interrupts = <3 4>;
172 status = "disabled";
173 };
174
175 UART3: serial@ef600600 {
176 device_type = "serial";
177 compatible = "ns16550";
178 reg = <ef600600 8>;
179 virtual-reg = <ef600600>;
180 clock-frequency = <0>;
181 current-speed = <0>;
182 interrupt-parent = <&UIC0>;
183 interrupts = <4 4>;
184 status = "disabled";
185 };
186
187 IIC0: i2c@ef600700 {
188 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
189 reg = <ef600700 14>;
190 interrupt-parent = <&UIC0>;
191 interrupts = <2 4>;
192 };
193
194 IIC1: i2c@ef600800 {
195 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
196 reg = <ef600800 14>;
197 interrupt-parent = <&UIC0>;
198 interrupts = <7 4>;
199 };
200
201 spi@ef600900 {
202 compatible = "amcc,spi-440ep";
203 reg = <ef600900 6>;
204 interrupts = <8 4>;
205 interrupt-parent = <&UIC0>;
206 };
207
208 ZMII0: emac-zmii@ef600d00 {
209 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
210 reg = <ef600d00 c>;
211 };
212
213 EMAC0: ethernet@ef600e00 {
214 device_type = "network";
215 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
216 interrupt-parent = <&UIC1>;
217 interrupts = <1c 4 1d 4>;
218 reg = <ef600e00 70>;
219 local-mac-address = [000000000000];
220 mal-device = <&MAL0>;
221 mal-tx-channel = <0 1>;
222 mal-rx-channel = <0>;
223 cell-index = <0>;
224 max-frame-size = <5dc>;
225 rx-fifo-size = <1000>;
226 tx-fifo-size = <800>;
227 phy-mode = "rmii";
228 phy-map = <00000000>;
229 zmii-device = <&ZMII0>;
230 zmii-channel = <0>;
231 };
232
233 EMAC1: ethernet@ef600f00 {
234 device_type = "network";
235 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
236 interrupt-parent = <&UIC1>;
237 interrupts = <1e 4 1f 4>;
238 reg = <ef600f00 70>;
239 local-mac-address = [000000000000];
240 mal-device = <&MAL0>;
241 mal-tx-channel = <2 3>;
242 mal-rx-channel = <1>;
243 cell-index = <1>;
244 max-frame-size = <5dc>;
245 rx-fifo-size = <1000>;
246 tx-fifo-size = <800>;
247 phy-mode = "rmii";
248 phy-map = <00000000>;
249 zmii-device = <&ZMII0>;
250 zmii-channel = <1>;
251 };
252
253 usb@ef601000 {
254 compatible = "ohci-be";
255 reg = <ef601000 80>;
256 interrupts = <8 4 9 4>;
257 interrupt-parent = < &UIC1 >;
258 };
259 };
260
261 PCI0: pci@ec000000 {
262 device_type = "pci";
263 #interrupt-cells = <1>;
264 #size-cells = <2>;
265 #address-cells = <3>;
266 compatible = "ibm,plb440ep-pci", "ibm,plb-pci";
267 primary;
268 reg = <0 eec00000 8 /* Config space access */
269 0 eed00000 4 /* IACK */
270 0 eed00000 4 /* Special cycle */
271 0 ef400000 40>; /* Internal registers */
272
273 /* Outbound ranges, one memory and one IO,
274 * later cannot be changed. Chip supports a second
275 * IO range but we don't use it for now
276 */
277 ranges = <02000000 0 a0000000 0 a0000000 0 20000000
278 01000000 0 00000000 0 e8000000 0 00010000>;
279
280 /* Inbound 2GB range starting at 0 */
281 dma-ranges = <42000000 0 0 0 0 0 80000000>;
282
283 /* Bamboo has all 4 IRQ pins tied together per slot */
284 interrupt-map-mask = <f800 0 0 0>;
285 interrupt-map = <
286 /* IDSEL 1 */
287 0800 0 0 0 &UIC0 1c 8
288
289 /* IDSEL 2 */
290 1000 0 0 0 &UIC0 1b 8
291
292 /* IDSEL 3 */
293 1800 0 0 0 &UIC0 1a 8
294
295 /* IDSEL 4 */
296 2000 0 0 0 &UIC0 19 8
297 >;
298 };
299 };
300
301 chosen {
302 linux,stdout-path = "/plb/opb/serial@ef600300";
303 };
304};
diff --git a/arch/powerpc/boot/ebony.c b/arch/powerpc/boot/ebony.c
index f61364c47a76..5532ab3221dd 100644
--- a/arch/powerpc/boot/ebony.c
+++ b/arch/powerpc/boot/ebony.c
@@ -75,7 +75,8 @@ static void ebony_fixups(void)
75 75
76 ibm440gp_fixup_clocks(sysclk, 6 * 1843200); 76 ibm440gp_fixup_clocks(sysclk, 6 * 1843200);
77 ibm4xx_sdram_fixup_memsize(); 77 ibm4xx_sdram_fixup_memsize();
78 dt_fixup_mac_addresses(ebony_mac0, ebony_mac1); 78 dt_fixup_mac_address_by_alias("ethernet0", ebony_mac0);
79 dt_fixup_mac_address_by_alias("ethernet1", ebony_mac1);
79 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 80 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
80 ebony_flashsel_fixup(); 81 ebony_flashsel_fixup();
81} 82}
diff --git a/arch/powerpc/boot/libfdt-wrapper.c b/arch/powerpc/boot/libfdt-wrapper.c
index 59016bef1391..c541fd8a95d4 100644
--- a/arch/powerpc/boot/libfdt-wrapper.c
+++ b/arch/powerpc/boot/libfdt-wrapper.c
@@ -35,7 +35,7 @@
35#define check_err(err) \ 35#define check_err(err) \
36 ({ \ 36 ({ \
37 if (BAD_ERROR(err) || ((err < 0) && DEBUG)) \ 37 if (BAD_ERROR(err) || ((err < 0) && DEBUG)) \
38 printf("%s():%d %s\n\r", __FUNCTION__, __LINE__, \ 38 printf("%s():%d %s\n\r", __func__, __LINE__, \
39 fdt_strerror(err)); \ 39 fdt_strerror(err)); \
40 if (BAD_ERROR(err)) \ 40 if (BAD_ERROR(err)) \
41 exit(); \ 41 exit(); \
diff --git a/arch/powerpc/boot/mpc52xx-psc.c b/arch/powerpc/boot/mpc52xx-psc.c
index 1074626e6a37..d4cb4e4e0938 100644
--- a/arch/powerpc/boot/mpc52xx-psc.c
+++ b/arch/powerpc/boot/mpc52xx-psc.c
@@ -51,14 +51,9 @@ static unsigned char psc_getc(void)
51 51
52int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp) 52int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp)
53{ 53{
54 int n;
55
56 /* Get the base address of the psc registers */ 54 /* Get the base address of the psc registers */
57 n = getprop(devp, "virtual-reg", &psc, sizeof(psc)); 55 if (dt_get_virtual_reg(devp, &psc, 1) < 1)
58 if (n != sizeof(psc)) { 56 return -1;
59 if (!dt_xlate_reg(devp, 0, (void *)&psc, NULL))
60 return -1;
61 }
62 57
63 scdp->open = psc_open; 58 scdp->open = psc_open;
64 scdp->putc = psc_putc; 59 scdp->putc = psc_putc;
diff --git a/arch/powerpc/boot/mpsc.c b/arch/powerpc/boot/mpsc.c
index 802ea53790d8..425ad88cce8d 100644
--- a/arch/powerpc/boot/mpsc.c
+++ b/arch/powerpc/boot/mpsc.c
@@ -141,7 +141,7 @@ int mpsc_console_init(void *devp, struct serial_console_data *scdp)
141 if (mpscintr_base == NULL) 141 if (mpscintr_base == NULL)
142 goto err_out; 142 goto err_out;
143 143
144 n = getprop(devp, "block-index", &v, sizeof(v)); 144 n = getprop(devp, "cell-index", &v, sizeof(v));
145 if (n != sizeof(v)) 145 if (n != sizeof(v))
146 goto err_out; 146 goto err_out;
147 reg_set = (int)v; 147 reg_set = (int)v;
diff --git a/arch/powerpc/boot/mv64x60.c b/arch/powerpc/boot/mv64x60.c
index b43259455d4b..d9bb302b91d2 100644
--- a/arch/powerpc/boot/mv64x60.c
+++ b/arch/powerpc/boot/mv64x60.c
@@ -535,7 +535,7 @@ u8 *mv64x60_get_bridge_pbase(void)
535 u32 v[2]; 535 u32 v[2];
536 void *devp; 536 void *devp;
537 537
538 devp = finddevice("/mv64x60"); 538 devp = find_node_by_compatible(NULL, "marvell,mv64360");
539 if (devp == NULL) 539 if (devp == NULL)
540 goto err_out; 540 goto err_out;
541 if (getprop(devp, "reg", v, sizeof(v)) != sizeof(v)) 541 if (getprop(devp, "reg", v, sizeof(v)) != sizeof(v))
@@ -553,7 +553,7 @@ u8 *mv64x60_get_bridge_base(void)
553 u32 v; 553 u32 v;
554 void *devp; 554 void *devp;
555 555
556 devp = finddevice("/mv64x60"); 556 devp = find_node_by_compatible(NULL, "marvell,mv64360");
557 if (devp == NULL) 557 if (devp == NULL)
558 goto err_out; 558 goto err_out;
559 if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v)) 559 if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v))
diff --git a/arch/powerpc/boot/mv64x60_i2c.c b/arch/powerpc/boot/mv64x60_i2c.c
index d085377be3bc..52a3212b6638 100644
--- a/arch/powerpc/boot/mv64x60_i2c.c
+++ b/arch/powerpc/boot/mv64x60_i2c.c
@@ -185,7 +185,7 @@ int mv64x60_i2c_open(void)
185 u32 v; 185 u32 v;
186 void *devp; 186 void *devp;
187 187
188 devp = finddevice("/mv64x60/i2c"); 188 devp = find_node_by_compatible(NULL, "marvell,mv64360-i2c");
189 if (devp == NULL) 189 if (devp == NULL)
190 goto err_out; 190 goto err_out;
191 if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v)) 191 if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v))
diff --git a/arch/powerpc/boot/ns16550.c b/arch/powerpc/boot/ns16550.c
index f8f1b2f31412..aef3bdc89160 100644
--- a/arch/powerpc/boot/ns16550.c
+++ b/arch/powerpc/boot/ns16550.c
@@ -55,15 +55,9 @@ static u8 ns16550_tstc(void)
55int ns16550_console_init(void *devp, struct serial_console_data *scdp) 55int ns16550_console_init(void *devp, struct serial_console_data *scdp)
56{ 56{
57 int n; 57 int n;
58 unsigned long reg_phys;
59 58
60 n = getprop(devp, "virtual-reg", &reg_base, sizeof(reg_base)); 59 if (dt_get_virtual_reg(devp, (void **)&reg_base, 1) < 1)
61 if (n != sizeof(reg_base)) { 60 return -1;
62 if (!dt_xlate_reg(devp, 0, &reg_phys, NULL))
63 return -1;
64
65 reg_base = (void *)reg_phys;
66 }
67 61
68 n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift)); 62 n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift));
69 if (n != sizeof(reg_shift)) 63 if (n != sizeof(reg_shift))
diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h
index 4b0544b03c64..321e2f5afe71 100644
--- a/arch/powerpc/boot/ops.h
+++ b/arch/powerpc/boot/ops.h
@@ -95,6 +95,7 @@ int dt_xlate_reg(void *node, int res, unsigned long *addr, unsigned long *size);
95int dt_xlate_addr(void *node, u32 *buf, int buflen, unsigned long *xlated_addr); 95int dt_xlate_addr(void *node, u32 *buf, int buflen, unsigned long *xlated_addr);
96int dt_is_compatible(void *node, const char *compat); 96int dt_is_compatible(void *node, const char *compat);
97void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize); 97void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize);
98int dt_get_virtual_reg(void *node, void **addr, int nres);
98 99
99static inline void *finddevice(const char *name) 100static inline void *finddevice(const char *name)
100{ 101{
diff --git a/arch/powerpc/boot/prpmc2800.c b/arch/powerpc/boot/prpmc2800.c
index 05c3245b30d7..da31d6030482 100644
--- a/arch/powerpc/boot/prpmc2800.c
+++ b/arch/powerpc/boot/prpmc2800.c
@@ -344,20 +344,20 @@ static void prpmc2800_bridge_setup(u32 mem_size)
344 acc_bits); 344 acc_bits);
345 345
346 /* Get the cpu -> pci i/o & mem mappings from the device tree */ 346 /* Get the cpu -> pci i/o & mem mappings from the device tree */
347 devp = finddevice("/mv64x60/pci@80000000"); 347 devp = find_node_by_compatible(NULL, "marvell,mv64360-pci");
348 if (devp == NULL) 348 if (devp == NULL)
349 fatal("Error: Missing /mv64x60/pci@80000000" 349 fatal("Error: Missing marvell,mv64360-pci"
350 " device tree node\n\r"); 350 " device tree node\n\r");
351 351
352 rc = getprop(devp, "ranges", v, sizeof(v)); 352 rc = getprop(devp, "ranges", v, sizeof(v));
353 if (rc != sizeof(v)) 353 if (rc != sizeof(v))
354 fatal("Error: Can't find /mv64x60/pci@80000000/ranges" 354 fatal("Error: Can't find marvell,mv64360-pci ranges"
355 " property\n\r"); 355 " property\n\r");
356 356
357 /* Get the cpu -> pci i/o & mem mappings from the device tree */ 357 /* Get the cpu -> pci i/o & mem mappings from the device tree */
358 devp = finddevice("/mv64x60"); 358 devp = find_node_by_compatible(NULL, "marvell,mv64360");
359 if (devp == NULL) 359 if (devp == NULL)
360 fatal("Error: Missing /mv64x60 device tree node\n\r"); 360 fatal("Error: Missing marvell,mv64360 device tree node\n\r");
361 361
362 enables = in_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE)); 362 enables = in_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE));
363 enables |= 0x0007fe00; /* Disable all cpu->pci windows */ 363 enables |= 0x0007fe00; /* Disable all cpu->pci windows */
@@ -429,9 +429,9 @@ static void prpmc2800_fixups(void)
429 setprop(devp, "model", model, l); 429 setprop(devp, "model", model, l);
430 430
431 /* Set /cpus/PowerPC,7447/clock-frequency */ 431 /* Set /cpus/PowerPC,7447/clock-frequency */
432 devp = finddevice("/cpus/PowerPC,7447"); 432 devp = find_node_by_prop_value_str(NULL, "device_type", "cpu");
433 if (devp == NULL) 433 if (devp == NULL)
434 fatal("Error: Missing proper /cpus device tree node\n\r"); 434 fatal("Error: Missing proper cpu device tree node\n\r");
435 v[0] = bip->core_speed; 435 v[0] = bip->core_speed;
436 setprop(devp, "clock-frequency", &v[0], sizeof(v[0])); 436 setprop(devp, "clock-frequency", &v[0], sizeof(v[0]));
437 437
@@ -443,16 +443,17 @@ static void prpmc2800_fixups(void)
443 v[1] = bip->mem_size; 443 v[1] = bip->mem_size;
444 setprop(devp, "reg", v, sizeof(v)); 444 setprop(devp, "reg", v, sizeof(v));
445 445
446 /* Update /mv64x60/model, if this is a mv64362 */ 446 /* Update model, if this is a mv64362 */
447 if (bip->bridge_type == BRIDGE_TYPE_MV64362) { 447 if (bip->bridge_type == BRIDGE_TYPE_MV64362) {
448 devp = finddevice("/mv64x60"); 448 devp = find_node_by_compatible(NULL, "marvell,mv64360");
449 if (devp == NULL) 449 if (devp == NULL)
450 fatal("Error: Missing /mv64x60 device tree node\n\r"); 450 fatal("Error: Missing marvell,mv64360"
451 " device tree node\n\r");
451 setprop(devp, "model", "mv64362", strlen("mv64362") + 1); 452 setprop(devp, "model", "mv64362", strlen("mv64362") + 1);
452 } 453 }
453 454
454 /* Set User FLASH size */ 455 /* Set User FLASH size */
455 devp = finddevice("/mv64x60/flash@a0000000"); 456 devp = find_node_by_compatible(NULL, "direct-mapped");
456 if (devp == NULL) 457 if (devp == NULL)
457 fatal("Error: Missing User FLASH device tree node\n\r"); 458 fatal("Error: Missing User FLASH device tree node\n\r");
458 rc = getprop(devp, "reg", v, sizeof(v)); 459 rc = getprop(devp, "reg", v, sizeof(v));
diff --git a/arch/powerpc/boot/ps3-head.S b/arch/powerpc/boot/ps3-head.S
index a55c2735f759..b6fcbaf5027b 100644
--- a/arch/powerpc/boot/ps3-head.S
+++ b/arch/powerpc/boot/ps3-head.S
@@ -27,8 +27,9 @@
27/* 27/*
28 * __system_reset_overlay - The PS3 first stage entry. 28 * __system_reset_overlay - The PS3 first stage entry.
29 * 29 *
30 * The bootwraper build script copies the 0x100 bytes at symbol 30 * The bootwraper build script copies the 512 bytes at symbol
31 * __system_reset_overlay to offset 0x100 of the rom image. 31 * __system_reset_overlay to offset 0x100 of the rom image. This symbol
32 * must occupy 512 or less bytes.
32 * 33 *
33 * The PS3 has a single processor with two threads. 34 * The PS3 has a single processor with two threads.
34 */ 35 */
@@ -47,8 +48,6 @@ __system_reset_overlay:
47 48
48 mfspr r3, 0x88 49 mfspr r3, 0x88
49 cntlzw. r3, r3 50 cntlzw. r3, r3
50 li r4, 0
51 li r5, 0
52 beq 1f 51 beq 1f
53 52
54 /* Secondary goes to __secondary_hold in kernel. */ 53 /* Secondary goes to __secondary_hold in kernel. */
@@ -57,8 +56,14 @@ __system_reset_overlay:
57 mtctr r4 56 mtctr r4
58 bctr 57 bctr
59 58
60 /* Primary delays then goes to _zimage_start in wrapper. */
611: 591:
60 /* Save the value at addr zero for a null pointer write check later. */
61
62 li r4, 0
63 lwz r3, 0(r4)
64
65 /* Primary delays then goes to _zimage_start in wrapper. */
66
62 or 31, 31, 31 /* db16cyc */ 67 or 31, 31, 31 /* db16cyc */
63 or 31, 31, 31 /* db16cyc */ 68 or 31, 31, 31 /* db16cyc */
64 69
@@ -67,16 +72,18 @@ __system_reset_overlay:
67 mtctr r4 72 mtctr r4
68 bctr 73 bctr
69 74
75 . = __system_reset_overlay + 512
76
70/* 77/*
71 * __system_reset_kernel - Place holder for the kernel reset vector. 78 * __system_reset_kernel - Place holder for the kernel reset vector.
72 * 79 *
73 * The bootwrapper build script copies 0x100 bytes from offset 0x100 80 * The bootwrapper build script copies 512 bytes from offset 0x100
74 * of the rom image to the symbol __system_reset_kernel. At runtime 81 * of the rom image to the symbol __system_reset_kernel. At runtime
75 * the bootwrapper program copies the 0x100 bytes at __system_reset_kernel 82 * the bootwrapper program copies the 512 bytes at __system_reset_kernel
76 * to ram address 0x100. This symbol must occupy 0x100 bytes. 83 * to ram address 0x100. This symbol must occupy 512 bytes.
77 */ 84 */
78 85
79 .globl __system_reset_kernel 86 .globl __system_reset_kernel
80__system_reset_kernel: 87__system_reset_kernel:
81 88
82 . = __system_reset_kernel + 0x100 89 . = __system_reset_kernel + 512
diff --git a/arch/powerpc/boot/ps3.c b/arch/powerpc/boot/ps3.c
index 3b0ac4d006ec..9954d98871d0 100644
--- a/arch/powerpc/boot/ps3.c
+++ b/arch/powerpc/boot/ps3.c
@@ -27,10 +27,10 @@
27#include "page.h" 27#include "page.h"
28#include "ops.h" 28#include "ops.h"
29 29
30extern s64 lv1_panic(u64 in_1); 30extern int lv1_panic(u64 in_1);
31extern s64 lv1_get_logical_partition_id(u64 *out_1); 31extern int lv1_get_logical_partition_id(u64 *out_1);
32extern s64 lv1_get_logical_ppe_id(u64 *out_1); 32extern int lv1_get_logical_ppe_id(u64 *out_1);
33extern s64 lv1_get_repository_node_value(u64 in_1, u64 in_2, u64 in_3, 33extern int lv1_get_repository_node_value(u64 in_1, u64 in_2, u64 in_3,
34 u64 in_4, u64 in_5, u64 *out_1, u64 *out_2); 34 u64 in_4, u64 in_5, u64 *out_1, u64 *out_2);
35 35
36#ifdef DEBUG 36#ifdef DEBUG
@@ -46,6 +46,7 @@ BSS_STACK(4096);
46 * edit the command line passed to vmlinux (by setting /chosen/bootargs). 46 * edit the command line passed to vmlinux (by setting /chosen/bootargs).
47 * The buffer is put in it's own section so that tools may locate it easier. 47 * The buffer is put in it's own section so that tools may locate it easier.
48 */ 48 */
49
49static char cmdline[COMMAND_LINE_SIZE] 50static char cmdline[COMMAND_LINE_SIZE]
50 __attribute__((__section__("__builtin_cmdline"))); 51 __attribute__((__section__("__builtin_cmdline")));
51 52
@@ -75,7 +76,7 @@ static void ps3_exit(void)
75 76
76static int ps3_repository_read_rm_size(u64 *rm_size) 77static int ps3_repository_read_rm_size(u64 *rm_size)
77{ 78{
78 s64 result; 79 int result;
79 u64 lpar_id; 80 u64 lpar_id;
80 u64 ppe_id; 81 u64 ppe_id;
81 u64 v2; 82 u64 v2;
@@ -114,16 +115,17 @@ void ps3_copy_vectors(void)
114{ 115{
115 extern char __system_reset_kernel[]; 116 extern char __system_reset_kernel[];
116 117
117 memcpy((void *)0x100, __system_reset_kernel, 0x100); 118 memcpy((void *)0x100, __system_reset_kernel, 512);
118 flush_cache((void *)0x100, 0x100); 119 flush_cache((void *)0x100, 512);
119} 120}
120 121
121void platform_init(void) 122void platform_init(unsigned long null_check)
122{ 123{
123 const u32 heapsize = 0x1000000 - (u32)_end; /* 16MiB */ 124 const u32 heapsize = 0x1000000 - (u32)_end; /* 16MiB */
124 void *chosen; 125 void *chosen;
125 unsigned long ft_addr; 126 unsigned long ft_addr;
126 u64 rm_size; 127 u64 rm_size;
128 unsigned long val;
127 129
128 console_ops.write = ps3_console_write; 130 console_ops.write = ps3_console_write;
129 platform_ops.exit = ps3_exit; 131 platform_ops.exit = ps3_exit;
@@ -151,6 +153,11 @@ void platform_init(void)
151 153
152 printf(" flat tree at 0x%lx\n\r", ft_addr); 154 printf(" flat tree at 0x%lx\n\r", ft_addr);
153 155
156 val = *(unsigned long *)0;
157
158 if (val != null_check)
159 printf("null check failed: %lx != %lx\n\r", val, null_check);
160
154 ((kernel_entry_t)0)(ft_addr, 0, NULL); 161 ((kernel_entry_t)0)(ft_addr, 0, NULL);
155 162
156 ps3_exit(); 163 ps3_exit();
diff --git a/arch/powerpc/boot/serial.c b/arch/powerpc/boot/serial.c
index 9960421eb6b9..8b3607cb53fb 100644
--- a/arch/powerpc/boot/serial.c
+++ b/arch/powerpc/boot/serial.c
@@ -119,7 +119,7 @@ int serial_console_init(void)
119 119
120 if (dt_is_compatible(devp, "ns16550")) 120 if (dt_is_compatible(devp, "ns16550"))
121 rc = ns16550_console_init(devp, &serial_cd); 121 rc = ns16550_console_init(devp, &serial_cd);
122 else if (dt_is_compatible(devp, "marvell,mpsc")) 122 else if (dt_is_compatible(devp, "marvell,mv64360-mpsc"))
123 rc = mpsc_console_init(devp, &serial_cd); 123 rc = mpsc_console_init(devp, &serial_cd);
124 else if (dt_is_compatible(devp, "fsl,cpm1-scc-uart") || 124 else if (dt_is_compatible(devp, "fsl,cpm1-scc-uart") ||
125 dt_is_compatible(devp, "fsl,cpm1-smc-uart") || 125 dt_is_compatible(devp, "fsl,cpm1-smc-uart") ||
diff --git a/arch/powerpc/boot/simpleboot.c b/arch/powerpc/boot/simpleboot.c
new file mode 100644
index 000000000000..86cd285bccc6
--- /dev/null
+++ b/arch/powerpc/boot/simpleboot.c
@@ -0,0 +1,84 @@
1/*
2 * The simple platform -- for booting when firmware doesn't supply a device
3 * tree or any platform configuration information.
4 * All data is extracted from an embedded device tree
5 * blob.
6 *
7 * Authors: Scott Wood <scottwood@freescale.com>
8 * Grant Likely <grant.likely@secretlab.ca>
9 *
10 * Copyright (c) 2007 Freescale Semiconductor, Inc.
11 * Copyright (c) 2008 Secret Lab Technologies Ltd.
12 *
13 * This program is free software; you can redistribute it and/or modify it
14 * under the terms of the GNU General Public License version 2 as published
15 * by the Free Software Foundation.
16 */
17
18#include "ops.h"
19#include "types.h"
20#include "io.h"
21#include "stdio.h"
22#include "libfdt/libfdt.h"
23
24BSS_STACK(4*1024);
25
26void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
27 unsigned long r6, unsigned long r7)
28{
29 const u32 *na, *ns, *reg, *timebase;
30 u64 memsize64;
31 int node, size, i;
32
33 /* Make sure FDT blob is sane */
34 if (fdt_check_header(_dtb_start) != 0)
35 fatal("Invalid device tree blob\n");
36
37 /* Find the #address-cells and #size-cells properties */
38 node = fdt_path_offset(_dtb_start, "/");
39 if (node < 0)
40 fatal("Cannot find root node\n");
41 na = fdt_getprop(_dtb_start, node, "#address-cells", &size);
42 if (!na || (size != 4))
43 fatal("Cannot find #address-cells property");
44 ns = fdt_getprop(_dtb_start, node, "#size-cells", &size);
45 if (!ns || (size != 4))
46 fatal("Cannot find #size-cells property");
47
48 /* Find the memory range */
49 node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type",
50 "memory", sizeof("memory"));
51 if (node < 0)
52 fatal("Cannot find memory node\n");
53 reg = fdt_getprop(_dtb_start, node, "reg", &size);
54 if (size < (*na+*ns) * sizeof(u32))
55 fatal("cannot get memory range\n");
56
57 /* Only interested in memory based at 0 */
58 for (i = 0; i < *na; i++)
59 if (*reg++ != 0)
60 fatal("Memory range is not based at address 0\n");
61
62 /* get the memsize and trucate it to under 4G on 32 bit machines */
63 memsize64 = 0;
64 for (i = 0; i < *ns; i++)
65 memsize64 = (memsize64 << 32) | *reg++;
66 if (sizeof(void *) == 4 && memsize64 >= 0x100000000ULL)
67 memsize64 = 0xffffffff;
68
69 /* finally, setup the timebase */
70 node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type",
71 "cpu", sizeof("cpu"));
72 if (!node)
73 fatal("Cannot find cpu node\n");
74 timebase = fdt_getprop(_dtb_start, node, "timebase-frequency", &size);
75 if (timebase && (size == 4))
76 timebase_period_ns = 1000000000 / *timebase;
77
78 /* Now we have the memory size; initialize the heap */
79 simple_alloc_init(_end, memsize64 - (unsigned long)_end, 32, 64);
80
81 /* prepare the device tree and find the console */
82 fdt_init(_dtb_start);
83 serial_console_init();
84}
diff --git a/arch/powerpc/boot/treeboot-walnut.c b/arch/powerpc/boot/treeboot-walnut.c
index 472e36605a52..097974e59fac 100644
--- a/arch/powerpc/boot/treeboot-walnut.c
+++ b/arch/powerpc/boot/treeboot-walnut.c
@@ -68,7 +68,7 @@ static void walnut_fixups(void)
68 ibm4xx_quiesce_eth((u32 *)0xef600800, NULL); 68 ibm4xx_quiesce_eth((u32 *)0xef600800, NULL);
69 ibm4xx_fixup_ebc_ranges("/plb/ebc"); 69 ibm4xx_fixup_ebc_ranges("/plb/ebc");
70 walnut_flashsel_fixup(); 70 walnut_flashsel_fixup();
71 dt_fixup_mac_addresses((u8 *) WALNUT_OPENBIOS_MAC_OFF); 71 dt_fixup_mac_address_by_alias("ethernet0", (u8 *) WALNUT_OPENBIOS_MAC_OFF);
72} 72}
73 73
74void platform_init(void) 74void platform_init(void)
diff --git a/arch/powerpc/boot/virtex405-head.S b/arch/powerpc/boot/virtex405-head.S
new file mode 100644
index 000000000000..3edb13f94669
--- /dev/null
+++ b/arch/powerpc/boot/virtex405-head.S
@@ -0,0 +1,30 @@
1#include "ppc_asm.h"
2
3 .text
4 .global _zimage_start
5_zimage_start:
6
7 /* PPC errata 213: needed by Virtex-4 FX */
8 mfccr0 0
9 oris 0,0,0x50000000@h
10 mtccr0 0
11
12 /*
13 * Invalidate the data cache if the data cache is turned off.
14 * - The 405 core does not invalidate the data cache on power-up
15 * or reset but does turn off the data cache. We cannot assume
16 * that the cache contents are valid.
17 * - If the data cache is turned on this must have been done by
18 * a bootloader and we assume that the cache contents are
19 * valid.
20 */
21 mfdccr r9
22 cmplwi r9,0
23 bne 2f
24 lis r9,0
25 li r8,256
26 mtctr r8
271: dccci r0,r9
28 addi r9,r9,0x20
29 bdnz 1b
302: b _zimage_start_lib
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index 8f8b8494d62f..d6c96d9ab291 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -174,7 +174,7 @@ cuboot*)
174 *-mpc83*) 174 *-mpc83*)
175 platformo=$object/cuboot-83xx.o 175 platformo=$object/cuboot-83xx.o
176 ;; 176 ;;
177 *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555) 177 *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555|*-ksi8560*)
178 platformo=$object/cuboot-85xx-cpm2.o 178 platformo=$object/cuboot-85xx-cpm2.o
179 ;; 179 ;;
180 *-mpc85*|*-tqm8540|*-sbc85*) 180 *-mpc85*|*-tqm8540|*-sbc85*)
@@ -199,6 +199,10 @@ adder875-redboot)
199 platformo="$object/fixed-head.o $object/redboot-8xx.o" 199 platformo="$object/fixed-head.o $object/redboot-8xx.o"
200 binary=y 200 binary=y
201 ;; 201 ;;
202simpleboot-virtex405-*)
203 platformo="$object/virtex405-head.o $object/simpleboot.o"
204 binary=y
205 ;;
202esac 206esac
203 207
204vmz="$tmpdir/`basename \"$kernel\"`.$ext" 208vmz="$tmpdir/`basename \"$kernel\"`.$ext"
@@ -226,10 +230,13 @@ if [ -n "$version" ]; then
226 uboot_version="-n Linux-$version" 230 uboot_version="-n Linux-$version"
227fi 231fi
228 232
233# physical offset of kernel image
234membase=`${CROSS}objdump -p "$kernel" | grep -m 1 LOAD | awk '{print $7}'`
235
229case "$platform" in 236case "$platform" in
230uboot) 237uboot)
231 rm -f "$ofile" 238 rm -f "$ofile"
232 mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 \ 239 mkimage -A ppc -O linux -T kernel -C gzip -a $membase -e $membase \
233 $uboot_version -d "$vmz" "$ofile" 240 $uboot_version -d "$vmz" "$ofile"
234 if [ -z "$cacheit" ]; then 241 if [ -z "$cacheit" ]; then
235 rm -f "$vmz" 242 rm -f "$vmz"
@@ -298,15 +305,16 @@ treeboot*)
298 exit 0 305 exit 0
299 ;; 306 ;;
300ps3) 307ps3)
301 # The ps3's loader supports loading gzipped binary images from flash 308 # The ps3's loader supports loading a gzipped binary image from flash
302 # rom to addr zero. The loader enters the image at addr 0x100. A 309 # rom to ram addr zero. The loader then enters the system reset
303 # bootwrapper overlay is use to arrange for the kernel to be loaded 310 # vector at addr 0x100. A bootwrapper overlay is used to arrange for
304 # to addr zero and to have a suitable bootwrapper entry at 0x100. 311 # a binary image of the kernel to be at addr zero, and yet have a
305 # To construct the rom image, 0x100 bytes from offset 0x100 in the 312 # suitable bootwrapper entry at 0x100. To construct the final rom
306 # kernel is copied to the bootwrapper symbol __system_reset_kernel. 313 # image 512 bytes from offset 0x100 is copied to the bootwrapper
307 # The 0x100 bytes at the bootwrapper symbol __system_reset_overlay is 314 # place holder at symbol __system_reset_kernel. The 512 bytes of the
308 # then copied to offset 0x100. At runtime the bootwrapper program 315 # bootwrapper entry code at symbol __system_reset_overlay is then
309 # copies the 0x100 bytes at __system_reset_kernel to addr 0x100. 316 # copied to offset 0x100. At runtime the bootwrapper program copies
317 # the data at __system_reset_kernel back to addr 0x100.
310 318
311 system_reset_overlay=0x`${CROSS}nm "$ofile" \ 319 system_reset_overlay=0x`${CROSS}nm "$ofile" \
312 | grep ' __system_reset_overlay$' \ 320 | grep ' __system_reset_overlay$' \
@@ -317,7 +325,7 @@ ps3)
317 | cut -d' ' -f1` 325 | cut -d' ' -f1`
318 system_reset_kernel=`printf "%d" $system_reset_kernel` 326 system_reset_kernel=`printf "%d" $system_reset_kernel`
319 overlay_dest="256" 327 overlay_dest="256"
320 overlay_size="256" 328 overlay_size="512"
321 329
322 ${CROSS}objcopy -O binary "$ofile" "$ofile.bin" 330 ${CROSS}objcopy -O binary "$ofile" "$ofile.bin"
323 331
diff --git a/arch/powerpc/configs/ep405_defconfig b/arch/powerpc/configs/40x/ep405_defconfig
index e24240a9a047..e24240a9a047 100644
--- a/arch/powerpc/configs/ep405_defconfig
+++ b/arch/powerpc/configs/40x/ep405_defconfig
diff --git a/arch/powerpc/configs/kilauea_defconfig b/arch/powerpc/configs/40x/kilauea_defconfig
index 2f475391f1d1..2f475391f1d1 100644
--- a/arch/powerpc/configs/kilauea_defconfig
+++ b/arch/powerpc/configs/40x/kilauea_defconfig
diff --git a/arch/powerpc/configs/makalu_defconfig b/arch/powerpc/configs/40x/makalu_defconfig
index 9ef4d8a312c8..9ef4d8a312c8 100644
--- a/arch/powerpc/configs/makalu_defconfig
+++ b/arch/powerpc/configs/40x/makalu_defconfig
diff --git a/arch/powerpc/configs/walnut_defconfig b/arch/powerpc/configs/40x/walnut_defconfig
index 3b2689e5002a..3b2689e5002a 100644
--- a/arch/powerpc/configs/walnut_defconfig
+++ b/arch/powerpc/configs/40x/walnut_defconfig
diff --git a/arch/powerpc/configs/bamboo_defconfig b/arch/powerpc/configs/44x/bamboo_defconfig
index c44db554cdc6..c44db554cdc6 100644
--- a/arch/powerpc/configs/bamboo_defconfig
+++ b/arch/powerpc/configs/44x/bamboo_defconfig
diff --git a/arch/powerpc/configs/44x/canyonlands_defconfig b/arch/powerpc/configs/44x/canyonlands_defconfig
new file mode 100644
index 000000000000..a3b763c45ec6
--- /dev/null
+++ b/arch/powerpc/configs/44x/canyonlands_defconfig
@@ -0,0 +1,721 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc1
4# Thu Feb 21 14:29:28 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15CONFIG_44x=y
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18CONFIG_4xx=y
19CONFIG_BOOKE=y
20CONFIG_PTE_64BIT=y
21CONFIG_PHYS_64BIT=y
22# CONFIG_PPC_MM_SLICES is not set
23CONFIG_NOT_COHERENT_CACHE=y
24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
26CONFIG_PPC_MERGE=y
27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
34CONFIG_IRQ_PER_CPU=y
35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
36CONFIG_ARCH_HAS_ILOG2_U32=y
37CONFIG_GENERIC_HWEIGHT=y
38CONFIG_GENERIC_CALIBRATE_DELAY=y
39CONFIG_GENERIC_FIND_NEXT_BIT=y
40# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
41CONFIG_PPC=y
42CONFIG_EARLY_PRINTK=y
43CONFIG_GENERIC_NVRAM=y
44CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
45CONFIG_ARCH_MAY_HAVE_PC_FDC=y
46CONFIG_PPC_OF=y
47CONFIG_OF=y
48CONFIG_PPC_UDBG_16550=y
49# CONFIG_GENERIC_TBSYNC is not set
50CONFIG_AUDIT_ARCH=y
51CONFIG_GENERIC_BUG=y
52# CONFIG_DEFAULT_UIMAGE is not set
53CONFIG_PPC_DCR_NATIVE=y
54# CONFIG_PPC_DCR_MMIO is not set
55CONFIG_PPC_DCR=y
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
57
58#
59# General setup
60#
61CONFIG_EXPERIMENTAL=y
62CONFIG_BROKEN_ON_SMP=y
63CONFIG_INIT_ENV_ARG_LIMIT=32
64CONFIG_LOCALVERSION=""
65CONFIG_LOCALVERSION_AUTO=y
66CONFIG_SWAP=y
67CONFIG_SYSVIPC=y
68CONFIG_SYSVIPC_SYSCTL=y
69CONFIG_POSIX_MQUEUE=y
70# CONFIG_BSD_PROCESS_ACCT is not set
71# CONFIG_TASKSTATS is not set
72# CONFIG_AUDIT is not set
73# CONFIG_IKCONFIG is not set
74CONFIG_LOG_BUF_SHIFT=14
75# CONFIG_CGROUPS is not set
76# CONFIG_FAIR_GROUP_SCHED is not set
77CONFIG_SYSFS_DEPRECATED=y
78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
80CONFIG_BLK_DEV_INITRD=y
81CONFIG_INITRAMFS_SOURCE=""
82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
83CONFIG_SYSCTL=y
84CONFIG_EMBEDDED=y
85CONFIG_SYSCTL_SYSCALL=y
86CONFIG_KALLSYMS=y
87# CONFIG_KALLSYMS_ALL is not set
88# CONFIG_KALLSYMS_EXTRA_PASS is not set
89CONFIG_HOTPLUG=y
90CONFIG_PRINTK=y
91# CONFIG_LOGBUFFER is not set
92CONFIG_BUG=y
93CONFIG_ELF_CORE=y
94CONFIG_COMPAT_BRK=y
95CONFIG_BASE_FULL=y
96CONFIG_FUTEX=y
97CONFIG_ANON_INODES=y
98CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y
100CONFIG_TIMERFD=y
101CONFIG_EVENTFD=y
102CONFIG_SHMEM=y
103CONFIG_VM_EVENT_COUNTERS=y
104CONFIG_SLUB_DEBUG=y
105# CONFIG_SLAB is not set
106CONFIG_SLUB=y
107# CONFIG_SLOB is not set
108# CONFIG_PROFILING is not set
109# CONFIG_MARKERS is not set
110CONFIG_HAVE_OPROFILE=y
111# CONFIG_KPROBES is not set
112CONFIG_HAVE_KPROBES=y
113CONFIG_PROC_PAGE_MONITOR=y
114CONFIG_SLABINFO=y
115CONFIG_RT_MUTEXES=y
116# CONFIG_TINY_SHMEM is not set
117CONFIG_BASE_SMALL=0
118CONFIG_MODULES=y
119CONFIG_MODULE_UNLOAD=y
120# CONFIG_MODULE_FORCE_UNLOAD is not set
121# CONFIG_MODVERSIONS is not set
122# CONFIG_MODULE_SRCVERSION_ALL is not set
123CONFIG_KMOD=y
124CONFIG_BLOCK=y
125CONFIG_LBD=y
126# CONFIG_BLK_DEV_IO_TRACE is not set
127# CONFIG_LSF is not set
128# CONFIG_BLK_DEV_BSG is not set
129
130#
131# IO Schedulers
132#
133CONFIG_IOSCHED_NOOP=y
134CONFIG_IOSCHED_AS=y
135CONFIG_IOSCHED_DEADLINE=y
136CONFIG_IOSCHED_CFQ=y
137CONFIG_DEFAULT_AS=y
138# CONFIG_DEFAULT_DEADLINE is not set
139# CONFIG_DEFAULT_CFQ is not set
140# CONFIG_DEFAULT_NOOP is not set
141CONFIG_DEFAULT_IOSCHED="anticipatory"
142CONFIG_CLASSIC_RCU=y
143# CONFIG_PREEMPT_RCU is not set
144CONFIG_PPC4xx_PCI_EXPRESS=y
145
146#
147# Platform support
148#
149# CONFIG_PPC_MPC512x is not set
150# CONFIG_PPC_MPC5121 is not set
151# CONFIG_PPC_CELL is not set
152# CONFIG_PPC_CELL_NATIVE is not set
153# CONFIG_PQ2ADS is not set
154# CONFIG_BAMBOO is not set
155# CONFIG_EBONY is not set
156# CONFIG_SEQUOIA is not set
157# CONFIG_TAISHAN is not set
158# CONFIG_KATMAI is not set
159# CONFIG_RAINIER is not set
160# CONFIG_WARP is not set
161CONFIG_CANYONLANDS=y
162CONFIG_460EX=y
163# CONFIG_IPIC is not set
164# CONFIG_MPIC is not set
165# CONFIG_MPIC_WEIRD is not set
166# CONFIG_PPC_I8259 is not set
167# CONFIG_PPC_RTAS is not set
168# CONFIG_MMIO_NVRAM is not set
169# CONFIG_PPC_MPC106 is not set
170# CONFIG_PPC_970_NAP is not set
171# CONFIG_PPC_INDIRECT_IO is not set
172# CONFIG_GENERIC_IOMAP is not set
173# CONFIG_CPU_FREQ is not set
174# CONFIG_FSL_ULI1575 is not set
175
176#
177# Kernel options
178#
179# CONFIG_HIGHMEM is not set
180CONFIG_TICK_ONESHOT=y
181CONFIG_NO_HZ=y
182CONFIG_HIGH_RES_TIMERS=y
183CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
184# CONFIG_HZ_100 is not set
185CONFIG_HZ_250=y
186# CONFIG_HZ_300 is not set
187# CONFIG_HZ_1000 is not set
188CONFIG_HZ=250
189# CONFIG_SCHED_HRTICK is not set
190CONFIG_PREEMPT_NONE=y
191# CONFIG_PREEMPT_VOLUNTARY is not set
192# CONFIG_PREEMPT is not set
193CONFIG_RCU_TRACE=y
194CONFIG_BINFMT_ELF=y
195# CONFIG_BINFMT_MISC is not set
196# CONFIG_MATH_EMULATION is not set
197# CONFIG_IOMMU_HELPER is not set
198CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
199CONFIG_ARCH_HAS_WALK_MEMORY=y
200CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
201CONFIG_ARCH_FLATMEM_ENABLE=y
202CONFIG_ARCH_POPULATES_NODE_MAP=y
203CONFIG_SELECT_MEMORY_MODEL=y
204CONFIG_FLATMEM_MANUAL=y
205# CONFIG_DISCONTIGMEM_MANUAL is not set
206# CONFIG_SPARSEMEM_MANUAL is not set
207CONFIG_FLATMEM=y
208CONFIG_FLAT_NODE_MEM_MAP=y
209# CONFIG_SPARSEMEM_STATIC is not set
210# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
211CONFIG_SPLIT_PTLOCK_CPUS=4
212CONFIG_RESOURCES_64BIT=y
213CONFIG_ZONE_DMA_FLAG=1
214CONFIG_BOUNCE=y
215CONFIG_VIRT_TO_BUS=y
216CONFIG_PROC_DEVICETREE=y
217CONFIG_CMDLINE_BOOL=y
218CONFIG_CMDLINE=""
219CONFIG_SECCOMP=y
220CONFIG_WANT_DEVICE_TREE=y
221CONFIG_ISA_DMA_API=y
222
223#
224# Bus options
225#
226CONFIG_ZONE_DMA=y
227CONFIG_PPC_INDIRECT_PCI=y
228CONFIG_PCI=y
229CONFIG_PCI_DOMAINS=y
230CONFIG_PCI_SYSCALL=y
231# CONFIG_PCIEPORTBUS is not set
232CONFIG_ARCH_SUPPORTS_MSI=y
233# CONFIG_PCI_MSI is not set
234CONFIG_PCI_LEGACY=y
235# CONFIG_PCI_DEBUG is not set
236# CONFIG_PCCARD is not set
237# CONFIG_HOTPLUG_PCI is not set
238
239#
240# Advanced setup
241#
242# CONFIG_ADVANCED_OPTIONS is not set
243
244#
245# Default settings for advanced configuration options are used
246#
247CONFIG_HIGHMEM_START=0xfe000000
248CONFIG_LOWMEM_SIZE=0x30000000
249CONFIG_KERNEL_START=0xc0000000
250CONFIG_TASK_SIZE=0xc0000000
251CONFIG_CONSISTENT_START=0xff100000
252CONFIG_CONSISTENT_SIZE=0x00200000
253CONFIG_BOOT_LOAD=0x01000000
254
255#
256# Networking
257#
258CONFIG_NET=y
259
260#
261# Networking options
262#
263CONFIG_PACKET=y
264# CONFIG_PACKET_MMAP is not set
265CONFIG_UNIX=y
266# CONFIG_NET_KEY is not set
267CONFIG_INET=y
268# CONFIG_IP_MULTICAST is not set
269# CONFIG_IP_ADVANCED_ROUTER is not set
270CONFIG_IP_FIB_HASH=y
271CONFIG_IP_PNP=y
272CONFIG_IP_PNP_DHCP=y
273CONFIG_IP_PNP_BOOTP=y
274# CONFIG_IP_PNP_RARP is not set
275# CONFIG_NET_IPIP is not set
276# CONFIG_NET_IPGRE is not set
277# CONFIG_ARPD is not set
278# CONFIG_SYN_COOKIES is not set
279# CONFIG_INET_AH is not set
280# CONFIG_INET_ESP is not set
281# CONFIG_INET_IPCOMP is not set
282# CONFIG_INET_XFRM_TUNNEL is not set
283# CONFIG_INET_TUNNEL is not set
284# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
285# CONFIG_INET_XFRM_MODE_TUNNEL is not set
286# CONFIG_INET_XFRM_MODE_BEET is not set
287# CONFIG_INET_LRO is not set
288CONFIG_INET_DIAG=y
289CONFIG_INET_TCP_DIAG=y
290# CONFIG_TCP_CONG_ADVANCED is not set
291CONFIG_TCP_CONG_CUBIC=y
292CONFIG_DEFAULT_TCP_CONG="cubic"
293# CONFIG_TCP_MD5SIG is not set
294# CONFIG_IPV6 is not set
295# CONFIG_INET6_XFRM_TUNNEL is not set
296# CONFIG_INET6_TUNNEL is not set
297# CONFIG_NETWORK_SECMARK is not set
298# CONFIG_NETFILTER is not set
299# CONFIG_IP_DCCP is not set
300# CONFIG_IP_SCTP is not set
301# CONFIG_TIPC is not set
302# CONFIG_ATM is not set
303# CONFIG_BRIDGE is not set
304# CONFIG_VLAN_8021Q is not set
305# CONFIG_DECNET is not set
306# CONFIG_LLC2 is not set
307# CONFIG_IPX is not set
308# CONFIG_ATALK is not set
309# CONFIG_X25 is not set
310# CONFIG_LAPB is not set
311# CONFIG_ECONET is not set
312# CONFIG_WAN_ROUTER is not set
313# CONFIG_NET_SCHED is not set
314
315#
316# Network testing
317#
318# CONFIG_NET_PKTGEN is not set
319# CONFIG_HAMRADIO is not set
320# CONFIG_CAN is not set
321# CONFIG_IRDA is not set
322# CONFIG_BT is not set
323# CONFIG_AF_RXRPC is not set
324
325#
326# Wireless
327#
328# CONFIG_CFG80211 is not set
329# CONFIG_WIRELESS_EXT is not set
330# CONFIG_MAC80211 is not set
331# CONFIG_IEEE80211 is not set
332# CONFIG_RFKILL is not set
333# CONFIG_NET_9P is not set
334
335#
336# Device Drivers
337#
338
339#
340# Generic Driver Options
341#
342CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
343CONFIG_STANDALONE=y
344CONFIG_PREVENT_FIRMWARE_BUILD=y
345CONFIG_FW_LOADER=y
346# CONFIG_DEBUG_DRIVER is not set
347# CONFIG_DEBUG_DEVRES is not set
348# CONFIG_SYS_HYPERVISOR is not set
349CONFIG_CONNECTOR=y
350CONFIG_PROC_EVENTS=y
351# CONFIG_MTD is not set
352CONFIG_OF_DEVICE=y
353# CONFIG_PARPORT is not set
354CONFIG_BLK_DEV=y
355# CONFIG_BLK_DEV_FD is not set
356# CONFIG_BLK_CPQ_DA is not set
357# CONFIG_BLK_CPQ_CISS_DA is not set
358# CONFIG_BLK_DEV_DAC960 is not set
359# CONFIG_BLK_DEV_UMEM is not set
360# CONFIG_BLK_DEV_COW_COMMON is not set
361# CONFIG_BLK_DEV_LOOP is not set
362# CONFIG_BLK_DEV_NBD is not set
363# CONFIG_BLK_DEV_SX8 is not set
364CONFIG_BLK_DEV_RAM=y
365CONFIG_BLK_DEV_RAM_COUNT=16
366CONFIG_BLK_DEV_RAM_SIZE=35000
367# CONFIG_BLK_DEV_XIP is not set
368# CONFIG_CDROM_PKTCDVD is not set
369# CONFIG_ATA_OVER_ETH is not set
370# CONFIG_XILINX_SYSACE is not set
371# CONFIG_MISC_DEVICES is not set
372CONFIG_HAVE_IDE=y
373# CONFIG_IDE is not set
374
375#
376# SCSI device support
377#
378# CONFIG_RAID_ATTRS is not set
379# CONFIG_SCSI is not set
380# CONFIG_SCSI_DMA is not set
381# CONFIG_SCSI_NETLINK is not set
382# CONFIG_ATA is not set
383# CONFIG_MD is not set
384# CONFIG_FUSION is not set
385
386#
387# IEEE 1394 (FireWire) support
388#
389# CONFIG_FIREWIRE is not set
390# CONFIG_IEEE1394 is not set
391# CONFIG_I2O is not set
392# CONFIG_MACINTOSH_DRIVERS is not set
393CONFIG_NETDEVICES=y
394# CONFIG_NETDEVICES_MULTIQUEUE is not set
395# CONFIG_DUMMY is not set
396# CONFIG_BONDING is not set
397# CONFIG_MACVLAN is not set
398# CONFIG_EQUALIZER is not set
399# CONFIG_TUN is not set
400# CONFIG_VETH is not set
401# CONFIG_ARCNET is not set
402# CONFIG_PHYLIB is not set
403CONFIG_NET_ETHERNET=y
404# CONFIG_MII is not set
405# CONFIG_HAPPYMEAL is not set
406# CONFIG_SUNGEM is not set
407# CONFIG_CASSINI is not set
408# CONFIG_NET_VENDOR_3COM is not set
409# CONFIG_NET_TULIP is not set
410# CONFIG_HP100 is not set
411CONFIG_IBM_NEW_EMAC=y
412CONFIG_IBM_NEW_EMAC_RXB=256
413CONFIG_IBM_NEW_EMAC_TXB=256
414CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
415CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
416CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
417# CONFIG_IBM_NEW_EMAC_DEBUG is not set
418CONFIG_IBM_NEW_EMAC_ZMII=y
419CONFIG_IBM_NEW_EMAC_RGMII=y
420CONFIG_IBM_NEW_EMAC_TAH=y
421CONFIG_IBM_NEW_EMAC_EMAC4=y
422# CONFIG_NET_PCI is not set
423# CONFIG_B44 is not set
424# CONFIG_NETDEV_1000 is not set
425# CONFIG_NETDEV_10000 is not set
426# CONFIG_TR is not set
427
428#
429# Wireless LAN
430#
431# CONFIG_WLAN_PRE80211 is not set
432# CONFIG_WLAN_80211 is not set
433# CONFIG_WAN is not set
434# CONFIG_FDDI is not set
435# CONFIG_HIPPI is not set
436# CONFIG_PPP is not set
437# CONFIG_SLIP is not set
438# CONFIG_NETCONSOLE is not set
439# CONFIG_NETPOLL is not set
440# CONFIG_NET_POLL_CONTROLLER is not set
441# CONFIG_ISDN is not set
442# CONFIG_PHONE is not set
443
444#
445# Input device support
446#
447# CONFIG_INPUT is not set
448
449#
450# Hardware I/O ports
451#
452# CONFIG_SERIO is not set
453# CONFIG_GAMEPORT is not set
454
455#
456# Character devices
457#
458# CONFIG_VT is not set
459# CONFIG_SERIAL_NONSTANDARD is not set
460# CONFIG_NOZOMI is not set
461
462#
463# Serial drivers
464#
465CONFIG_SERIAL_8250=y
466CONFIG_SERIAL_8250_CONSOLE=y
467# CONFIG_SERIAL_8250_PCI is not set
468CONFIG_SERIAL_8250_NR_UARTS=4
469CONFIG_SERIAL_8250_RUNTIME_UARTS=4
470CONFIG_SERIAL_8250_EXTENDED=y
471# CONFIG_SERIAL_8250_MANY_PORTS is not set
472CONFIG_SERIAL_8250_SHARE_IRQ=y
473# CONFIG_SERIAL_8250_DETECT_IRQ is not set
474# CONFIG_SERIAL_8250_RSA is not set
475
476#
477# Non-8250 serial port support
478#
479# CONFIG_SERIAL_UARTLITE is not set
480CONFIG_SERIAL_CORE=y
481CONFIG_SERIAL_CORE_CONSOLE=y
482# CONFIG_SERIAL_JSM is not set
483CONFIG_SERIAL_OF_PLATFORM=y
484CONFIG_UNIX98_PTYS=y
485CONFIG_LEGACY_PTYS=y
486CONFIG_LEGACY_PTY_COUNT=256
487# CONFIG_IPMI_HANDLER is not set
488# CONFIG_HW_RANDOM is not set
489# CONFIG_NVRAM is not set
490# CONFIG_GEN_RTC is not set
491# CONFIG_R3964 is not set
492# CONFIG_APPLICOM is not set
493# CONFIG_RAW_DRIVER is not set
494# CONFIG_TCG_TPM is not set
495CONFIG_DEVPORT=y
496# CONFIG_I2C is not set
497
498#
499# SPI support
500#
501# CONFIG_SPI is not set
502# CONFIG_SPI_MASTER is not set
503# CONFIG_W1 is not set
504# CONFIG_POWER_SUPPLY is not set
505# CONFIG_HWMON is not set
506# CONFIG_THERMAL is not set
507# CONFIG_WATCHDOG is not set
508
509#
510# Sonics Silicon Backplane
511#
512CONFIG_SSB_POSSIBLE=y
513# CONFIG_SSB is not set
514
515#
516# Multifunction device drivers
517#
518# CONFIG_MFD_SM501 is not set
519
520#
521# Multimedia devices
522#
523# CONFIG_VIDEO_DEV is not set
524# CONFIG_DVB_CORE is not set
525CONFIG_DAB=y
526
527#
528# Graphics support
529#
530# CONFIG_AGP is not set
531# CONFIG_DRM is not set
532# CONFIG_VGASTATE is not set
533CONFIG_VIDEO_OUTPUT_CONTROL=m
534# CONFIG_FB is not set
535# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
536
537#
538# Display device support
539#
540# CONFIG_DISPLAY_SUPPORT is not set
541
542#
543# Sound
544#
545# CONFIG_SOUND is not set
546# CONFIG_USB_SUPPORT is not set
547# CONFIG_MMC is not set
548# CONFIG_MEMSTICK is not set
549# CONFIG_NEW_LEDS is not set
550# CONFIG_INFINIBAND is not set
551# CONFIG_EDAC is not set
552# CONFIG_RTC_CLASS is not set
553
554#
555# Userspace I/O
556#
557# CONFIG_UIO is not set
558
559#
560# File systems
561#
562CONFIG_EXT2_FS=y
563# CONFIG_EXT2_FS_XATTR is not set
564# CONFIG_EXT2_FS_XIP is not set
565# CONFIG_EXT3_FS is not set
566# CONFIG_EXT4DEV_FS is not set
567# CONFIG_REISERFS_FS is not set
568# CONFIG_JFS_FS is not set
569# CONFIG_FS_POSIX_ACL is not set
570# CONFIG_XFS_FS is not set
571# CONFIG_GFS2_FS is not set
572# CONFIG_OCFS2_FS is not set
573CONFIG_DNOTIFY=y
574CONFIG_INOTIFY=y
575CONFIG_INOTIFY_USER=y
576# CONFIG_QUOTA is not set
577# CONFIG_AUTOFS_FS is not set
578# CONFIG_AUTOFS4_FS is not set
579# CONFIG_FUSE_FS is not set
580
581#
582# CD-ROM/DVD Filesystems
583#
584# CONFIG_ISO9660_FS is not set
585# CONFIG_UDF_FS is not set
586
587#
588# DOS/FAT/NT Filesystems
589#
590# CONFIG_MSDOS_FS is not set
591# CONFIG_VFAT_FS is not set
592# CONFIG_NTFS_FS is not set
593
594#
595# Pseudo filesystems
596#
597CONFIG_PROC_FS=y
598CONFIG_PROC_KCORE=y
599CONFIG_PROC_SYSCTL=y
600CONFIG_SYSFS=y
601CONFIG_TMPFS=y
602# CONFIG_TMPFS_POSIX_ACL is not set
603# CONFIG_HUGETLB_PAGE is not set
604# CONFIG_CONFIGFS_FS is not set
605
606#
607# Miscellaneous filesystems
608#
609# CONFIG_ADFS_FS is not set
610# CONFIG_AFFS_FS is not set
611# CONFIG_HFS_FS is not set
612# CONFIG_HFSPLUS_FS is not set
613# CONFIG_BEFS_FS is not set
614# CONFIG_BFS_FS is not set
615# CONFIG_EFS_FS is not set
616CONFIG_CRAMFS=y
617# CONFIG_VXFS_FS is not set
618# CONFIG_MINIX_FS is not set
619# CONFIG_HPFS_FS is not set
620# CONFIG_QNX4FS_FS is not set
621# CONFIG_ROMFS_FS is not set
622# CONFIG_SYSV_FS is not set
623# CONFIG_UFS_FS is not set
624CONFIG_NETWORK_FILESYSTEMS=y
625CONFIG_NFS_FS=y
626CONFIG_NFS_V3=y
627# CONFIG_NFS_V3_ACL is not set
628# CONFIG_NFS_V4 is not set
629# CONFIG_NFS_DIRECTIO is not set
630# CONFIG_NFSD is not set
631CONFIG_ROOT_NFS=y
632CONFIG_LOCKD=y
633CONFIG_LOCKD_V4=y
634CONFIG_NFS_COMMON=y
635CONFIG_SUNRPC=y
636# CONFIG_SUNRPC_BIND34 is not set
637# CONFIG_RPCSEC_GSS_KRB5 is not set
638# CONFIG_RPCSEC_GSS_SPKM3 is not set
639# CONFIG_SMB_FS is not set
640# CONFIG_CIFS is not set
641# CONFIG_NCP_FS is not set
642# CONFIG_CODA_FS is not set
643# CONFIG_AFS_FS is not set
644
645#
646# Partition Types
647#
648# CONFIG_PARTITION_ADVANCED is not set
649CONFIG_MSDOS_PARTITION=y
650# CONFIG_NLS is not set
651# CONFIG_DLM is not set
652
653#
654# Library routines
655#
656CONFIG_BITREVERSE=y
657# CONFIG_CRC_CCITT is not set
658# CONFIG_CRC16 is not set
659# CONFIG_CRC_ITU_T is not set
660CONFIG_CRC32=y
661# CONFIG_CRC7 is not set
662# CONFIG_LIBCRC32C is not set
663CONFIG_ZLIB_INFLATE=y
664CONFIG_PLIST=y
665CONFIG_HAS_IOMEM=y
666CONFIG_HAS_IOPORT=y
667CONFIG_HAS_DMA=y
668
669#
670# Kernel hacking
671#
672# CONFIG_PRINTK_TIME is not set
673CONFIG_ENABLE_WARN_DEPRECATED=y
674CONFIG_ENABLE_MUST_CHECK=y
675CONFIG_MAGIC_SYSRQ=y
676# CONFIG_UNUSED_SYMBOLS is not set
677CONFIG_DEBUG_FS=y
678# CONFIG_HEADERS_CHECK is not set
679CONFIG_DEBUG_KERNEL=y
680# CONFIG_DEBUG_SHIRQ is not set
681CONFIG_DETECT_SOFTLOCKUP=y
682CONFIG_SCHED_DEBUG=y
683# CONFIG_SCHEDSTATS is not set
684# CONFIG_TIMER_STATS is not set
685# CONFIG_SLUB_DEBUG_ON is not set
686# CONFIG_SLUB_STATS is not set
687# CONFIG_DEBUG_RT_MUTEXES is not set
688# CONFIG_RT_MUTEX_TESTER is not set
689# CONFIG_DEBUG_SPINLOCK is not set
690# CONFIG_DEBUG_MUTEXES is not set
691# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
692# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
693# CONFIG_DEBUG_KOBJECT is not set
694# CONFIG_DEBUG_BUGVERBOSE is not set
695# CONFIG_DEBUG_INFO is not set
696# CONFIG_DEBUG_VM is not set
697# CONFIG_DEBUG_LIST is not set
698# CONFIG_DEBUG_SG is not set
699# CONFIG_BOOT_PRINTK_DELAY is not set
700# CONFIG_RCU_TORTURE_TEST is not set
701# CONFIG_BACKTRACE_SELF_TEST is not set
702# CONFIG_FAULT_INJECTION is not set
703# CONFIG_SAMPLES is not set
704# CONFIG_DEBUG_STACKOVERFLOW is not set
705# CONFIG_DEBUG_STACK_USAGE is not set
706# CONFIG_DEBUG_PAGEALLOC is not set
707CONFIG_DEBUGGER=y
708# CONFIG_KGDB is not set
709# CONFIG_XMON is not set
710# CONFIG_VIRQ_DEBUG is not set
711# CONFIG_BDI_SWITCH is not set
712# CONFIG_PPC_EARLY_DEBUG is not set
713
714#
715# Security options
716#
717# CONFIG_KEYS is not set
718# CONFIG_SECURITY is not set
719# CONFIG_SECURITY_FILE_CAPABILITIES is not set
720# CONFIG_CRYPTO is not set
721# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ebony_defconfig b/arch/powerpc/configs/44x/ebony_defconfig
index 07c8d4ce175a..07c8d4ce175a 100644
--- a/arch/powerpc/configs/ebony_defconfig
+++ b/arch/powerpc/configs/44x/ebony_defconfig
diff --git a/arch/powerpc/configs/katmai_defconfig b/arch/powerpc/configs/44x/katmai_defconfig
index c8804ec01ea4..c8804ec01ea4 100644
--- a/arch/powerpc/configs/katmai_defconfig
+++ b/arch/powerpc/configs/44x/katmai_defconfig
diff --git a/arch/powerpc/configs/rainier_defconfig b/arch/powerpc/configs/44x/rainier_defconfig
index dec18ca73519..dec18ca73519 100644
--- a/arch/powerpc/configs/rainier_defconfig
+++ b/arch/powerpc/configs/44x/rainier_defconfig
diff --git a/arch/powerpc/configs/sequoia_defconfig b/arch/powerpc/configs/44x/sequoia_defconfig
index dd5d6303c396..dd5d6303c396 100644
--- a/arch/powerpc/configs/sequoia_defconfig
+++ b/arch/powerpc/configs/44x/sequoia_defconfig
diff --git a/arch/powerpc/configs/taishan_defconfig b/arch/powerpc/configs/44x/taishan_defconfig
index 087aedce1338..087aedce1338 100644
--- a/arch/powerpc/configs/taishan_defconfig
+++ b/arch/powerpc/configs/44x/taishan_defconfig
diff --git a/arch/powerpc/configs/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig
index 2313c3e8ef61..2313c3e8ef61 100644
--- a/arch/powerpc/configs/warp_defconfig
+++ b/arch/powerpc/configs/44x/warp_defconfig
diff --git a/arch/powerpc/configs/mpc8313_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig
index 7a862a6e3be8..7d18440e398f 100644
--- a/arch/powerpc/configs/mpc8313_rdb_defconfig
+++ b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Mon Mar 24 08:48:14 2008 4# Fri Apr 11 11:10:09 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -196,6 +196,7 @@ CONFIG_PREEMPT_NONE=y
196# CONFIG_PREEMPT is not set 196# CONFIG_PREEMPT is not set
197CONFIG_BINFMT_ELF=y 197CONFIG_BINFMT_ELF=y
198# CONFIG_BINFMT_MISC is not set 198# CONFIG_BINFMT_MISC is not set
199CONFIG_FORCE_MAX_ZONEORDER=11
199# CONFIG_IOMMU_HELPER is not set 200# CONFIG_IOMMU_HELPER is not set
200CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 201CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
201CONFIG_ARCH_HAS_WALK_MEMORY=y 202CONFIG_ARCH_HAS_WALK_MEMORY=y
@@ -360,7 +361,7 @@ CONFIG_MTD=y
360CONFIG_MTD_PARTITIONS=y 361CONFIG_MTD_PARTITIONS=y
361# CONFIG_MTD_REDBOOT_PARTS is not set 362# CONFIG_MTD_REDBOOT_PARTS is not set
362# CONFIG_MTD_CMDLINE_PARTS is not set 363# CONFIG_MTD_CMDLINE_PARTS is not set
363# CONFIG_MTD_OF_PARTS is not set 364CONFIG_MTD_OF_PARTS=y
364 365
365# 366#
366# User Modules And Translation Layers 367# User Modules And Translation Layers
@@ -436,7 +437,7 @@ CONFIG_MTD_NAND_IDS=y
436# CONFIG_MTD_NAND_NANDSIM is not set 437# CONFIG_MTD_NAND_NANDSIM is not set
437# CONFIG_MTD_NAND_PLATFORM is not set 438# CONFIG_MTD_NAND_PLATFORM is not set
438# CONFIG_MTD_ALAUDA is not set 439# CONFIG_MTD_ALAUDA is not set
439# CONFIG_MTD_NAND_FSL_ELBC is not set 440CONFIG_MTD_NAND_FSL_ELBC=y
440# CONFIG_MTD_ONENAND is not set 441# CONFIG_MTD_ONENAND is not set
441 442
442# 443#
@@ -1293,6 +1294,7 @@ CONFIG_PLIST=y
1293CONFIG_HAS_IOMEM=y 1294CONFIG_HAS_IOMEM=y
1294CONFIG_HAS_IOPORT=y 1295CONFIG_HAS_IOPORT=y
1295CONFIG_HAS_DMA=y 1296CONFIG_HAS_DMA=y
1297CONFIG_HAVE_LMB=y
1296 1298
1297# 1299#
1298# Kernel hacking 1300# Kernel hacking
diff --git a/arch/powerpc/configs/mpc8315_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig
index 1f57456dd81e..1f57456dd81e 100644
--- a/arch/powerpc/configs/mpc8315_rdb_defconfig
+++ b/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig
diff --git a/arch/powerpc/configs/mpc832x_mds_defconfig b/arch/powerpc/configs/83xx/mpc832x_mds_defconfig
index 50cceda8994f..50cceda8994f 100644
--- a/arch/powerpc/configs/mpc832x_mds_defconfig
+++ b/arch/powerpc/configs/83xx/mpc832x_mds_defconfig
diff --git a/arch/powerpc/configs/mpc832x_rdb_defconfig b/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig
index ac913025713e..ac913025713e 100644
--- a/arch/powerpc/configs/mpc832x_rdb_defconfig
+++ b/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig
diff --git a/arch/powerpc/configs/mpc834x_itx_defconfig b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
index e1de399a7bdd..e1de399a7bdd 100644
--- a/arch/powerpc/configs/mpc834x_itx_defconfig
+++ b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
diff --git a/arch/powerpc/configs/mpc834x_itxgp_defconfig b/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig
index b4e39cf82a8c..b4e39cf82a8c 100644
--- a/arch/powerpc/configs/mpc834x_itxgp_defconfig
+++ b/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig
diff --git a/arch/powerpc/configs/mpc834x_mds_defconfig b/arch/powerpc/configs/83xx/mpc834x_mds_defconfig
index b4e82c0e2be7..b4e82c0e2be7 100644
--- a/arch/powerpc/configs/mpc834x_mds_defconfig
+++ b/arch/powerpc/configs/83xx/mpc834x_mds_defconfig
diff --git a/arch/powerpc/configs/mpc836x_mds_defconfig b/arch/powerpc/configs/83xx/mpc836x_mds_defconfig
index d50a96eddcdc..d50a96eddcdc 100644
--- a/arch/powerpc/configs/mpc836x_mds_defconfig
+++ b/arch/powerpc/configs/83xx/mpc836x_mds_defconfig
diff --git a/arch/powerpc/configs/mpc837x_mds_defconfig b/arch/powerpc/configs/83xx/mpc837x_mds_defconfig
index f377cde785b0..f377cde785b0 100644
--- a/arch/powerpc/configs/mpc837x_mds_defconfig
+++ b/arch/powerpc/configs/83xx/mpc837x_mds_defconfig
diff --git a/arch/powerpc/configs/mpc837x_rdb_defconfig b/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig
index a6331769d88f..a6331769d88f 100644
--- a/arch/powerpc/configs/mpc837x_rdb_defconfig
+++ b/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig
diff --git a/arch/powerpc/configs/sbc834x_defconfig b/arch/powerpc/configs/83xx/sbc834x_defconfig
index 1f1518229f6d..1f1518229f6d 100644
--- a/arch/powerpc/configs/sbc834x_defconfig
+++ b/arch/powerpc/configs/83xx/sbc834x_defconfig
diff --git a/arch/powerpc/configs/85xx/ksi8560_defconfig b/arch/powerpc/configs/85xx/ksi8560_defconfig
new file mode 100644
index 000000000000..2d0debcefdbf
--- /dev/null
+++ b/arch/powerpc/configs/85xx/ksi8560_defconfig
@@ -0,0 +1,899 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24
4# Mon Feb 11 16:25:19 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12CONFIG_PPC_85xx=y
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_E500=y
18CONFIG_BOOKE=y
19CONFIG_FSL_BOOKE=y
20CONFIG_FSL_EMB_PERFMON=y
21# CONFIG_PHYS_64BIT is not set
22CONFIG_SPE=y
23# CONFIG_PPC_MM_SLICES is not set
24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
26CONFIG_PPC_MERGE=y
27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
34CONFIG_IRQ_PER_CPU=y
35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
36CONFIG_ARCH_HAS_ILOG2_U32=y
37CONFIG_GENERIC_HWEIGHT=y
38CONFIG_GENERIC_CALIBRATE_DELAY=y
39CONFIG_GENERIC_FIND_NEXT_BIT=y
40# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
41CONFIG_PPC=y
42CONFIG_EARLY_PRINTK=y
43CONFIG_GENERIC_NVRAM=y
44CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
45CONFIG_ARCH_MAY_HAVE_PC_FDC=y
46CONFIG_PPC_OF=y
47CONFIG_OF=y
48CONFIG_PPC_UDBG_16550=y
49# CONFIG_GENERIC_TBSYNC is not set
50CONFIG_AUDIT_ARCH=y
51CONFIG_GENERIC_BUG=y
52CONFIG_DEFAULT_UIMAGE=y
53# CONFIG_PPC_DCR_NATIVE is not set
54# CONFIG_PPC_DCR_MMIO is not set
55CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
56
57#
58# General setup
59#
60CONFIG_EXPERIMENTAL=y
61CONFIG_BROKEN_ON_SMP=y
62CONFIG_INIT_ENV_ARG_LIMIT=32
63CONFIG_LOCALVERSION=""
64CONFIG_LOCALVERSION_AUTO=y
65CONFIG_SWAP=y
66CONFIG_SYSVIPC=y
67CONFIG_SYSVIPC_SYSCTL=y
68# CONFIG_POSIX_MQUEUE is not set
69# CONFIG_BSD_PROCESS_ACCT is not set
70# CONFIG_TASKSTATS is not set
71# CONFIG_USER_NS is not set
72# CONFIG_PID_NS is not set
73# CONFIG_AUDIT is not set
74# CONFIG_IKCONFIG is not set
75CONFIG_LOG_BUF_SHIFT=14
76# CONFIG_CGROUPS is not set
77CONFIG_FAIR_GROUP_SCHED=y
78CONFIG_FAIR_USER_SCHED=y
79# CONFIG_FAIR_CGROUP_SCHED is not set
80CONFIG_SYSFS_DEPRECATED=y
81# CONFIG_RELAY is not set
82CONFIG_BLK_DEV_INITRD=y
83CONFIG_INITRAMFS_SOURCE=""
84# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
85CONFIG_SYSCTL=y
86CONFIG_EMBEDDED=y
87CONFIG_SYSCTL_SYSCALL=y
88CONFIG_KALLSYMS=y
89# CONFIG_KALLSYMS_ALL is not set
90# CONFIG_KALLSYMS_EXTRA_PASS is not set
91CONFIG_HOTPLUG=y
92CONFIG_PRINTK=y
93CONFIG_BUG=y
94CONFIG_ELF_CORE=y
95CONFIG_BASE_FULL=y
96CONFIG_FUTEX=y
97CONFIG_ANON_INODES=y
98CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y
100CONFIG_TIMERFD=y
101CONFIG_EVENTFD=y
102CONFIG_SHMEM=y
103CONFIG_VM_EVENT_COUNTERS=y
104CONFIG_SLUB_DEBUG=y
105# CONFIG_SLAB is not set
106CONFIG_SLUB=y
107# CONFIG_SLOB is not set
108# CONFIG_PROFILING is not set
109# CONFIG_MARKERS is not set
110CONFIG_HAVE_OPROFILE=y
111CONFIG_HAVE_KPROBES=y
112CONFIG_PROC_PAGE_MONITOR=y
113CONFIG_SLABINFO=y
114CONFIG_RT_MUTEXES=y
115# CONFIG_TINY_SHMEM is not set
116CONFIG_BASE_SMALL=0
117# CONFIG_MODULES is not set
118CONFIG_BLOCK=y
119# CONFIG_LBD is not set
120# CONFIG_BLK_DEV_IO_TRACE is not set
121# CONFIG_LSF is not set
122# CONFIG_BLK_DEV_BSG is not set
123
124#
125# IO Schedulers
126#
127CONFIG_IOSCHED_NOOP=y
128CONFIG_IOSCHED_AS=y
129CONFIG_IOSCHED_DEADLINE=y
130CONFIG_IOSCHED_CFQ=y
131CONFIG_DEFAULT_AS=y
132# CONFIG_DEFAULT_DEADLINE is not set
133# CONFIG_DEFAULT_CFQ is not set
134# CONFIG_DEFAULT_NOOP is not set
135CONFIG_DEFAULT_IOSCHED="anticipatory"
136CONFIG_CLASSIC_RCU=y
137# CONFIG_PREEMPT_RCU is not set
138
139#
140# Platform support
141#
142# CONFIG_PPC_MPC512x is not set
143# CONFIG_PPC_MPC5121 is not set
144# CONFIG_PPC_CELL is not set
145# CONFIG_PPC_CELL_NATIVE is not set
146# CONFIG_PQ2ADS is not set
147CONFIG_MPC85xx=y
148# CONFIG_MPC8540_ADS is not set
149# CONFIG_MPC8560_ADS is not set
150# CONFIG_MPC85xx_CDS is not set
151# CONFIG_MPC85xx_MDS is not set
152# CONFIG_MPC85xx_DS is not set
153CONFIG_KSI8560=y
154# CONFIG_STX_GP3 is not set
155# CONFIG_TQM8540 is not set
156# CONFIG_TQM8541 is not set
157# CONFIG_TQM8555 is not set
158# CONFIG_TQM8560 is not set
159# CONFIG_SBC8548 is not set
160# CONFIG_SBC8560 is not set
161# CONFIG_IPIC is not set
162CONFIG_MPIC=y
163# CONFIG_MPIC_WEIRD is not set
164# CONFIG_PPC_I8259 is not set
165# CONFIG_PPC_RTAS is not set
166# CONFIG_MMIO_NVRAM is not set
167# CONFIG_PPC_MPC106 is not set
168# CONFIG_PPC_970_NAP is not set
169# CONFIG_PPC_INDIRECT_IO is not set
170# CONFIG_GENERIC_IOMAP is not set
171# CONFIG_CPU_FREQ is not set
172CONFIG_CPM2=y
173CONFIG_PPC_CPM_NEW_BINDING=y
174# CONFIG_FSL_ULI1575 is not set
175CONFIG_CPM=y
176
177#
178# Kernel options
179#
180CONFIG_HIGHMEM=y
181# CONFIG_TICK_ONESHOT is not set
182# CONFIG_NO_HZ is not set
183# CONFIG_HIGH_RES_TIMERS is not set
184CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
185# CONFIG_HZ_100 is not set
186CONFIG_HZ_250=y
187# CONFIG_HZ_300 is not set
188# CONFIG_HZ_1000 is not set
189CONFIG_HZ=250
190# CONFIG_SCHED_HRTICK is not set
191CONFIG_PREEMPT_NONE=y
192# CONFIG_PREEMPT_VOLUNTARY is not set
193# CONFIG_PREEMPT is not set
194CONFIG_RCU_TRACE=y
195CONFIG_BINFMT_ELF=y
196CONFIG_BINFMT_MISC=y
197CONFIG_MATH_EMULATION=y
198# CONFIG_IOMMU_HELPER is not set
199CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
200CONFIG_ARCH_FLATMEM_ENABLE=y
201CONFIG_ARCH_POPULATES_NODE_MAP=y
202CONFIG_SELECT_MEMORY_MODEL=y
203CONFIG_FLATMEM_MANUAL=y
204# CONFIG_DISCONTIGMEM_MANUAL is not set
205# CONFIG_SPARSEMEM_MANUAL is not set
206CONFIG_FLATMEM=y
207CONFIG_FLAT_NODE_MEM_MAP=y
208# CONFIG_SPARSEMEM_STATIC is not set
209# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
210CONFIG_SPLIT_PTLOCK_CPUS=4
211# CONFIG_RESOURCES_64BIT is not set
212CONFIG_ZONE_DMA_FLAG=1
213CONFIG_BOUNCE=y
214CONFIG_VIRT_TO_BUS=y
215# CONFIG_PROC_DEVICETREE is not set
216# CONFIG_CMDLINE_BOOL is not set
217# CONFIG_PM is not set
218# CONFIG_SECCOMP is not set
219CONFIG_WANT_DEVICE_TREE=y
220CONFIG_ISA_DMA_API=y
221
222#
223# Bus options
224#
225CONFIG_ZONE_DMA=y
226CONFIG_FSL_SOC=y
227# CONFIG_PCI is not set
228# CONFIG_PCI_DOMAINS is not set
229# CONFIG_PCI_SYSCALL is not set
230# CONFIG_ARCH_SUPPORTS_MSI is not set
231# CONFIG_PCCARD is not set
232
233#
234# Advanced setup
235#
236# CONFIG_ADVANCED_OPTIONS is not set
237
238#
239# Default settings for advanced configuration options are used
240#
241CONFIG_HIGHMEM_START=0xfe000000
242CONFIG_LOWMEM_SIZE=0x30000000
243CONFIG_KERNEL_START=0xc0000000
244CONFIG_TASK_SIZE=0xc0000000
245CONFIG_BOOT_LOAD=0x00800000
246
247#
248# Networking
249#
250CONFIG_NET=y
251
252#
253# Networking options
254#
255CONFIG_PACKET=y
256# CONFIG_PACKET_MMAP is not set
257CONFIG_UNIX=y
258CONFIG_XFRM=y
259# CONFIG_XFRM_USER is not set
260# CONFIG_XFRM_SUB_POLICY is not set
261# CONFIG_XFRM_MIGRATE is not set
262# CONFIG_XFRM_STATISTICS is not set
263# CONFIG_NET_KEY is not set
264CONFIG_INET=y
265CONFIG_IP_MULTICAST=y
266# CONFIG_IP_ADVANCED_ROUTER is not set
267CONFIG_IP_FIB_HASH=y
268CONFIG_IP_PNP=y
269CONFIG_IP_PNP_DHCP=y
270CONFIG_IP_PNP_BOOTP=y
271# CONFIG_IP_PNP_RARP is not set
272# CONFIG_NET_IPIP is not set
273# CONFIG_NET_IPGRE is not set
274# CONFIG_IP_MROUTE is not set
275# CONFIG_ARPD is not set
276CONFIG_SYN_COOKIES=y
277# CONFIG_INET_AH is not set
278# CONFIG_INET_ESP is not set
279# CONFIG_INET_IPCOMP is not set
280# CONFIG_INET_XFRM_TUNNEL is not set
281# CONFIG_INET_TUNNEL is not set
282CONFIG_INET_XFRM_MODE_TRANSPORT=y
283CONFIG_INET_XFRM_MODE_TUNNEL=y
284CONFIG_INET_XFRM_MODE_BEET=y
285# CONFIG_INET_LRO is not set
286CONFIG_INET_DIAG=y
287CONFIG_INET_TCP_DIAG=y
288# CONFIG_TCP_CONG_ADVANCED is not set
289CONFIG_TCP_CONG_CUBIC=y
290CONFIG_DEFAULT_TCP_CONG="cubic"
291# CONFIG_TCP_MD5SIG is not set
292# CONFIG_IPV6 is not set
293# CONFIG_INET6_XFRM_TUNNEL is not set
294# CONFIG_INET6_TUNNEL is not set
295# CONFIG_NETWORK_SECMARK is not set
296# CONFIG_NETFILTER is not set
297# CONFIG_IP_DCCP is not set
298# CONFIG_IP_SCTP is not set
299# CONFIG_TIPC is not set
300# CONFIG_ATM is not set
301# CONFIG_BRIDGE is not set
302# CONFIG_VLAN_8021Q is not set
303# CONFIG_DECNET is not set
304# CONFIG_LLC2 is not set
305# CONFIG_IPX is not set
306# CONFIG_ATALK is not set
307# CONFIG_X25 is not set
308# CONFIG_LAPB is not set
309# CONFIG_ECONET is not set
310# CONFIG_WAN_ROUTER is not set
311# CONFIG_NET_SCHED is not set
312
313#
314# Network testing
315#
316# CONFIG_NET_PKTGEN is not set
317# CONFIG_HAMRADIO is not set
318# CONFIG_CAN is not set
319# CONFIG_IRDA is not set
320# CONFIG_BT is not set
321# CONFIG_AF_RXRPC is not set
322
323#
324# Wireless
325#
326# CONFIG_CFG80211 is not set
327# CONFIG_WIRELESS_EXT is not set
328# CONFIG_MAC80211 is not set
329# CONFIG_IEEE80211 is not set
330# CONFIG_RFKILL is not set
331# CONFIG_NET_9P is not set
332
333#
334# Device Drivers
335#
336
337#
338# Generic Driver Options
339#
340CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
341CONFIG_STANDALONE=y
342CONFIG_PREVENT_FIRMWARE_BUILD=y
343# CONFIG_FW_LOADER is not set
344# CONFIG_DEBUG_DRIVER is not set
345# CONFIG_DEBUG_DEVRES is not set
346# CONFIG_SYS_HYPERVISOR is not set
347# CONFIG_CONNECTOR is not set
348CONFIG_MTD=y
349# CONFIG_MTD_DEBUG is not set
350CONFIG_MTD_CONCAT=y
351CONFIG_MTD_PARTITIONS=y
352# CONFIG_MTD_REDBOOT_PARTS is not set
353# CONFIG_MTD_CMDLINE_PARTS is not set
354
355#
356# User Modules And Translation Layers
357#
358CONFIG_MTD_CHAR=y
359CONFIG_MTD_BLKDEVS=y
360CONFIG_MTD_BLOCK=y
361# CONFIG_FTL is not set
362# CONFIG_NFTL is not set
363# CONFIG_INFTL is not set
364# CONFIG_RFD_FTL is not set
365# CONFIG_SSFDC is not set
366# CONFIG_MTD_OOPS is not set
367
368#
369# RAM/ROM/Flash chip drivers
370#
371CONFIG_MTD_CFI=y
372CONFIG_MTD_JEDECPROBE=y
373CONFIG_MTD_GEN_PROBE=y
374# CONFIG_MTD_CFI_ADV_OPTIONS is not set
375CONFIG_MTD_MAP_BANK_WIDTH_1=y
376CONFIG_MTD_MAP_BANK_WIDTH_2=y
377CONFIG_MTD_MAP_BANK_WIDTH_4=y
378# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
379# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
380# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
381CONFIG_MTD_CFI_I1=y
382CONFIG_MTD_CFI_I2=y
383# CONFIG_MTD_CFI_I4 is not set
384# CONFIG_MTD_CFI_I8 is not set
385# CONFIG_MTD_CFI_INTELEXT is not set
386CONFIG_MTD_CFI_AMDSTD=y
387# CONFIG_MTD_CFI_STAA is not set
388CONFIG_MTD_CFI_UTIL=y
389# CONFIG_MTD_RAM is not set
390# CONFIG_MTD_ROM is not set
391# CONFIG_MTD_ABSENT is not set
392
393#
394# Mapping drivers for chip access
395#
396# CONFIG_MTD_COMPLEX_MAPPINGS is not set
397# CONFIG_MTD_PHYSMAP is not set
398CONFIG_MTD_PHYSMAP_OF=y
399# CONFIG_MTD_PLATRAM is not set
400
401#
402# Self-contained MTD device drivers
403#
404# CONFIG_MTD_SLRAM is not set
405# CONFIG_MTD_PHRAM is not set
406# CONFIG_MTD_MTDRAM is not set
407# CONFIG_MTD_BLOCK2MTD is not set
408
409#
410# Disk-On-Chip Device Drivers
411#
412# CONFIG_MTD_DOC2000 is not set
413# CONFIG_MTD_DOC2001 is not set
414# CONFIG_MTD_DOC2001PLUS is not set
415# CONFIG_MTD_NAND is not set
416# CONFIG_MTD_ONENAND is not set
417
418#
419# UBI - Unsorted block images
420#
421# CONFIG_MTD_UBI is not set
422CONFIG_OF_DEVICE=y
423# CONFIG_PARPORT is not set
424CONFIG_BLK_DEV=y
425# CONFIG_BLK_DEV_FD is not set
426# CONFIG_BLK_DEV_COW_COMMON is not set
427CONFIG_BLK_DEV_LOOP=y
428# CONFIG_BLK_DEV_CRYPTOLOOP is not set
429# CONFIG_BLK_DEV_NBD is not set
430CONFIG_BLK_DEV_RAM=y
431CONFIG_BLK_DEV_RAM_COUNT=16
432CONFIG_BLK_DEV_RAM_SIZE=32768
433CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
434# CONFIG_CDROM_PKTCDVD is not set
435# CONFIG_ATA_OVER_ETH is not set
436CONFIG_MISC_DEVICES=y
437# CONFIG_EEPROM_93CX6 is not set
438CONFIG_IDE=y
439CONFIG_IDE_MAX_HWIFS=4
440CONFIG_BLK_DEV_IDE=y
441
442#
443# Please see Documentation/ide.txt for help/info on IDE drives
444#
445# CONFIG_BLK_DEV_IDE_SATA is not set
446# CONFIG_BLK_DEV_IDEDISK is not set
447# CONFIG_IDEDISK_MULTI_MODE is not set
448# CONFIG_BLK_DEV_IDECD is not set
449# CONFIG_BLK_DEV_IDETAPE is not set
450# CONFIG_BLK_DEV_IDEFLOPPY is not set
451# CONFIG_IDE_TASK_IOCTL is not set
452CONFIG_IDE_PROC_FS=y
453
454#
455# IDE chipset support/bugfixes
456#
457CONFIG_IDE_GENERIC=y
458# CONFIG_BLK_DEV_PLATFORM is not set
459# CONFIG_BLK_DEV_IDEDMA is not set
460CONFIG_IDE_ARCH_OBSOLETE_INIT=y
461# CONFIG_BLK_DEV_HD is not set
462
463#
464# SCSI device support
465#
466# CONFIG_RAID_ATTRS is not set
467# CONFIG_SCSI is not set
468# CONFIG_SCSI_DMA is not set
469# CONFIG_SCSI_NETLINK is not set
470# CONFIG_ATA is not set
471# CONFIG_MD is not set
472# CONFIG_MACINTOSH_DRIVERS is not set
473CONFIG_NETDEVICES=y
474# CONFIG_NETDEVICES_MULTIQUEUE is not set
475# CONFIG_DUMMY is not set
476# CONFIG_BONDING is not set
477# CONFIG_MACVLAN is not set
478# CONFIG_EQUALIZER is not set
479# CONFIG_TUN is not set
480# CONFIG_VETH is not set
481CONFIG_PHYLIB=y
482
483#
484# MII PHY device drivers
485#
486CONFIG_MARVELL_PHY=y
487# CONFIG_DAVICOM_PHY is not set
488# CONFIG_QSEMI_PHY is not set
489# CONFIG_LXT_PHY is not set
490# CONFIG_CICADA_PHY is not set
491# CONFIG_VITESSE_PHY is not set
492# CONFIG_SMSC_PHY is not set
493# CONFIG_BROADCOM_PHY is not set
494# CONFIG_ICPLUS_PHY is not set
495# CONFIG_REALTEK_PHY is not set
496# CONFIG_FIXED_PHY is not set
497CONFIG_MDIO_BITBANG=y
498CONFIG_NET_ETHERNET=y
499CONFIG_MII=y
500# CONFIG_IBM_NEW_EMAC_ZMII is not set
501# CONFIG_IBM_NEW_EMAC_RGMII is not set
502# CONFIG_IBM_NEW_EMAC_TAH is not set
503# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
504# CONFIG_B44 is not set
505CONFIG_FS_ENET=y
506# CONFIG_FS_ENET_HAS_SCC is not set
507CONFIG_FS_ENET_HAS_FCC=y
508CONFIG_FS_ENET_MDIO_FCC=y
509CONFIG_NETDEV_1000=y
510# CONFIG_E1000E_ENABLED is not set
511CONFIG_GIANFAR=y
512CONFIG_GFAR_NAPI=y
513CONFIG_NETDEV_10000=y
514
515#
516# Wireless LAN
517#
518# CONFIG_WLAN_PRE80211 is not set
519# CONFIG_WLAN_80211 is not set
520# CONFIG_WAN is not set
521# CONFIG_PPP is not set
522# CONFIG_SLIP is not set
523# CONFIG_NETCONSOLE is not set
524# CONFIG_NETPOLL is not set
525# CONFIG_NET_POLL_CONTROLLER is not set
526# CONFIG_ISDN is not set
527# CONFIG_PHONE is not set
528
529#
530# Input device support
531#
532CONFIG_INPUT=y
533# CONFIG_INPUT_FF_MEMLESS is not set
534# CONFIG_INPUT_POLLDEV is not set
535
536#
537# Userland interfaces
538#
539# CONFIG_INPUT_MOUSEDEV is not set
540# CONFIG_INPUT_JOYDEV is not set
541# CONFIG_INPUT_EVDEV is not set
542# CONFIG_INPUT_EVBUG is not set
543
544#
545# Input Device Drivers
546#
547# CONFIG_INPUT_KEYBOARD is not set
548# CONFIG_INPUT_MOUSE is not set
549# CONFIG_INPUT_JOYSTICK is not set
550# CONFIG_INPUT_TABLET is not set
551# CONFIG_INPUT_TOUCHSCREEN is not set
552# CONFIG_INPUT_MISC is not set
553
554#
555# Hardware I/O ports
556#
557# CONFIG_SERIO is not set
558# CONFIG_GAMEPORT is not set
559
560#
561# Character devices
562#
563# CONFIG_VT is not set
564# CONFIG_SERIAL_NONSTANDARD is not set
565
566#
567# Serial drivers
568#
569# CONFIG_SERIAL_8250 is not set
570
571#
572# Non-8250 serial port support
573#
574# CONFIG_SERIAL_UARTLITE is not set
575CONFIG_SERIAL_CORE=y
576CONFIG_SERIAL_CORE_CONSOLE=y
577CONFIG_SERIAL_CPM=y
578CONFIG_SERIAL_CPM_CONSOLE=y
579CONFIG_SERIAL_CPM_SCC1=y
580# CONFIG_SERIAL_CPM_SCC2 is not set
581# CONFIG_SERIAL_CPM_SCC3 is not set
582# CONFIG_SERIAL_CPM_SCC4 is not set
583# CONFIG_SERIAL_CPM_SMC1 is not set
584# CONFIG_SERIAL_CPM_SMC2 is not set
585CONFIG_UNIX98_PTYS=y
586CONFIG_LEGACY_PTYS=y
587CONFIG_LEGACY_PTY_COUNT=256
588# CONFIG_IPMI_HANDLER is not set
589CONFIG_HW_RANDOM=y
590# CONFIG_NVRAM is not set
591CONFIG_GEN_RTC=y
592# CONFIG_GEN_RTC_X is not set
593# CONFIG_R3964 is not set
594# CONFIG_RAW_DRIVER is not set
595# CONFIG_TCG_TPM is not set
596# CONFIG_I2C is not set
597
598#
599# SPI support
600#
601# CONFIG_SPI is not set
602# CONFIG_SPI_MASTER is not set
603# CONFIG_W1 is not set
604# CONFIG_POWER_SUPPLY is not set
605CONFIG_HWMON=y
606# CONFIG_HWMON_VID is not set
607# CONFIG_SENSORS_F71805F is not set
608# CONFIG_SENSORS_F71882FG is not set
609# CONFIG_SENSORS_IT87 is not set
610# CONFIG_SENSORS_PC87360 is not set
611# CONFIG_SENSORS_PC87427 is not set
612# CONFIG_SENSORS_SMSC47M1 is not set
613# CONFIG_SENSORS_SMSC47B397 is not set
614# CONFIG_SENSORS_VT1211 is not set
615# CONFIG_SENSORS_W83627HF is not set
616# CONFIG_SENSORS_W83627EHF is not set
617# CONFIG_HWMON_DEBUG_CHIP is not set
618# CONFIG_WATCHDOG is not set
619
620#
621# Sonics Silicon Backplane
622#
623CONFIG_SSB_POSSIBLE=y
624# CONFIG_SSB is not set
625
626#
627# Multifunction device drivers
628#
629# CONFIG_MFD_SM501 is not set
630
631#
632# Multimedia devices
633#
634# CONFIG_VIDEO_DEV is not set
635# CONFIG_DVB_CORE is not set
636CONFIG_DAB=y
637
638#
639# Graphics support
640#
641# CONFIG_VGASTATE is not set
642CONFIG_VIDEO_OUTPUT_CONTROL=y
643# CONFIG_FB is not set
644# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
645
646#
647# Display device support
648#
649# CONFIG_DISPLAY_SUPPORT is not set
650
651#
652# Sound
653#
654# CONFIG_SOUND is not set
655CONFIG_HID_SUPPORT=y
656CONFIG_HID=y
657# CONFIG_HID_DEBUG is not set
658# CONFIG_HIDRAW is not set
659CONFIG_USB_SUPPORT=y
660# CONFIG_USB_ARCH_HAS_HCD is not set
661# CONFIG_USB_ARCH_HAS_OHCI is not set
662# CONFIG_USB_ARCH_HAS_EHCI is not set
663
664#
665# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
666#
667# CONFIG_USB_GADGET is not set
668# CONFIG_MMC is not set
669# CONFIG_NEW_LEDS is not set
670# CONFIG_EDAC is not set
671# CONFIG_RTC_CLASS is not set
672
673#
674# Userspace I/O
675#
676# CONFIG_UIO is not set
677
678#
679# File systems
680#
681CONFIG_EXT2_FS=y
682# CONFIG_EXT2_FS_XATTR is not set
683# CONFIG_EXT2_FS_XIP is not set
684CONFIG_EXT3_FS=y
685CONFIG_EXT3_FS_XATTR=y
686# CONFIG_EXT3_FS_POSIX_ACL is not set
687# CONFIG_EXT3_FS_SECURITY is not set
688# CONFIG_EXT4DEV_FS is not set
689CONFIG_JBD=y
690# CONFIG_JBD_DEBUG is not set
691CONFIG_FS_MBCACHE=y
692# CONFIG_REISERFS_FS is not set
693# CONFIG_JFS_FS is not set
694# CONFIG_FS_POSIX_ACL is not set
695# CONFIG_XFS_FS is not set
696# CONFIG_GFS2_FS is not set
697# CONFIG_OCFS2_FS is not set
698# CONFIG_MINIX_FS is not set
699# CONFIG_ROMFS_FS is not set
700CONFIG_INOTIFY=y
701CONFIG_INOTIFY_USER=y
702# CONFIG_QUOTA is not set
703CONFIG_DNOTIFY=y
704# CONFIG_AUTOFS_FS is not set
705# CONFIG_AUTOFS4_FS is not set
706# CONFIG_FUSE_FS is not set
707
708#
709# CD-ROM/DVD Filesystems
710#
711# CONFIG_ISO9660_FS is not set
712# CONFIG_UDF_FS is not set
713
714#
715# DOS/FAT/NT Filesystems
716#
717# CONFIG_MSDOS_FS is not set
718# CONFIG_VFAT_FS is not set
719# CONFIG_NTFS_FS is not set
720
721#
722# Pseudo filesystems
723#
724CONFIG_PROC_FS=y
725CONFIG_PROC_KCORE=y
726CONFIG_PROC_SYSCTL=y
727CONFIG_SYSFS=y
728CONFIG_TMPFS=y
729# CONFIG_TMPFS_POSIX_ACL is not set
730# CONFIG_HUGETLB_PAGE is not set
731# CONFIG_CONFIGFS_FS is not set
732
733#
734# Miscellaneous filesystems
735#
736# CONFIG_ADFS_FS is not set
737# CONFIG_AFFS_FS is not set
738# CONFIG_HFS_FS is not set
739# CONFIG_HFSPLUS_FS is not set
740# CONFIG_BEFS_FS is not set
741# CONFIG_BFS_FS is not set
742# CONFIG_EFS_FS is not set
743# CONFIG_JFFS2_FS is not set
744# CONFIG_CRAMFS is not set
745# CONFIG_VXFS_FS is not set
746# CONFIG_HPFS_FS is not set
747# CONFIG_QNX4FS_FS is not set
748# CONFIG_SYSV_FS is not set
749# CONFIG_UFS_FS is not set
750CONFIG_NETWORK_FILESYSTEMS=y
751CONFIG_NFS_FS=y
752# CONFIG_NFS_V3 is not set
753# CONFIG_NFS_V4 is not set
754# CONFIG_NFS_DIRECTIO is not set
755# CONFIG_NFSD is not set
756CONFIG_ROOT_NFS=y
757CONFIG_LOCKD=y
758CONFIG_NFS_COMMON=y
759CONFIG_SUNRPC=y
760# CONFIG_SUNRPC_BIND34 is not set
761# CONFIG_RPCSEC_GSS_KRB5 is not set
762# CONFIG_RPCSEC_GSS_SPKM3 is not set
763# CONFIG_SMB_FS is not set
764# CONFIG_CIFS is not set
765# CONFIG_NCP_FS is not set
766# CONFIG_CODA_FS is not set
767# CONFIG_AFS_FS is not set
768
769#
770# Partition Types
771#
772CONFIG_PARTITION_ADVANCED=y
773# CONFIG_ACORN_PARTITION is not set
774# CONFIG_OSF_PARTITION is not set
775# CONFIG_AMIGA_PARTITION is not set
776# CONFIG_ATARI_PARTITION is not set
777# CONFIG_MAC_PARTITION is not set
778# CONFIG_MSDOS_PARTITION is not set
779# CONFIG_LDM_PARTITION is not set
780# CONFIG_SGI_PARTITION is not set
781# CONFIG_ULTRIX_PARTITION is not set
782# CONFIG_SUN_PARTITION is not set
783# CONFIG_KARMA_PARTITION is not set
784# CONFIG_EFI_PARTITION is not set
785# CONFIG_SYSV68_PARTITION is not set
786# CONFIG_NLS is not set
787# CONFIG_DLM is not set
788
789#
790# Library routines
791#
792CONFIG_BITREVERSE=y
793# CONFIG_CRC_CCITT is not set
794# CONFIG_CRC16 is not set
795# CONFIG_CRC_ITU_T is not set
796CONFIG_CRC32=y
797# CONFIG_CRC7 is not set
798# CONFIG_LIBCRC32C is not set
799CONFIG_PLIST=y
800CONFIG_HAS_IOMEM=y
801CONFIG_HAS_IOPORT=y
802CONFIG_HAS_DMA=y
803
804#
805# Kernel hacking
806#
807# CONFIG_PRINTK_TIME is not set
808CONFIG_ENABLE_WARN_DEPRECATED=y
809CONFIG_ENABLE_MUST_CHECK=y
810# CONFIG_MAGIC_SYSRQ is not set
811# CONFIG_UNUSED_SYMBOLS is not set
812CONFIG_DEBUG_FS=y
813# CONFIG_HEADERS_CHECK is not set
814CONFIG_DEBUG_KERNEL=y
815# CONFIG_DEBUG_SHIRQ is not set
816CONFIG_DETECT_SOFTLOCKUP=y
817CONFIG_SCHED_DEBUG=y
818# CONFIG_SCHEDSTATS is not set
819# CONFIG_TIMER_STATS is not set
820# CONFIG_SLUB_DEBUG_ON is not set
821# CONFIG_DEBUG_RT_MUTEXES is not set
822# CONFIG_RT_MUTEX_TESTER is not set
823# CONFIG_DEBUG_SPINLOCK is not set
824CONFIG_DEBUG_MUTEXES=y
825# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
826# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
827# CONFIG_DEBUG_KOBJECT is not set
828# CONFIG_DEBUG_HIGHMEM is not set
829# CONFIG_DEBUG_BUGVERBOSE is not set
830# CONFIG_DEBUG_INFO is not set
831# CONFIG_DEBUG_VM is not set
832# CONFIG_DEBUG_LIST is not set
833# CONFIG_DEBUG_SG is not set
834CONFIG_FORCED_INLINING=y
835# CONFIG_BOOT_PRINTK_DELAY is not set
836# CONFIG_BACKTRACE_SELF_TEST is not set
837# CONFIG_FAULT_INJECTION is not set
838# CONFIG_SAMPLES is not set
839# CONFIG_DEBUG_STACKOVERFLOW is not set
840# CONFIG_DEBUG_STACK_USAGE is not set
841# CONFIG_DEBUG_PAGEALLOC is not set
842# CONFIG_DEBUGGER is not set
843# CONFIG_KGDB_CONSOLE is not set
844# CONFIG_VIRQ_DEBUG is not set
845# CONFIG_BDI_SWITCH is not set
846# CONFIG_PPC_EARLY_DEBUG is not set
847
848#
849# Security options
850#
851# CONFIG_KEYS is not set
852# CONFIG_SECURITY is not set
853# CONFIG_SECURITY_FILE_CAPABILITIES is not set
854CONFIG_CRYPTO=y
855# CONFIG_CRYPTO_SEQIV is not set
856# CONFIG_CRYPTO_MANAGER is not set
857# CONFIG_CRYPTO_HMAC is not set
858# CONFIG_CRYPTO_XCBC is not set
859# CONFIG_CRYPTO_NULL is not set
860# CONFIG_CRYPTO_MD4 is not set
861# CONFIG_CRYPTO_MD5 is not set
862# CONFIG_CRYPTO_SHA1 is not set
863# CONFIG_CRYPTO_SHA256 is not set
864# CONFIG_CRYPTO_SHA512 is not set
865# CONFIG_CRYPTO_WP512 is not set
866# CONFIG_CRYPTO_TGR192 is not set
867# CONFIG_CRYPTO_GF128MUL is not set
868# CONFIG_CRYPTO_ECB is not set
869# CONFIG_CRYPTO_CBC is not set
870# CONFIG_CRYPTO_PCBC is not set
871# CONFIG_CRYPTO_LRW is not set
872# CONFIG_CRYPTO_XTS is not set
873# CONFIG_CRYPTO_CTR is not set
874# CONFIG_CRYPTO_GCM is not set
875# CONFIG_CRYPTO_CCM is not set
876# CONFIG_CRYPTO_CRYPTD is not set
877# CONFIG_CRYPTO_DES is not set
878# CONFIG_CRYPTO_FCRYPT is not set
879# CONFIG_CRYPTO_BLOWFISH is not set
880# CONFIG_CRYPTO_TWOFISH is not set
881# CONFIG_CRYPTO_SERPENT is not set
882# CONFIG_CRYPTO_AES is not set
883# CONFIG_CRYPTO_CAST5 is not set
884# CONFIG_CRYPTO_CAST6 is not set
885# CONFIG_CRYPTO_TEA is not set
886# CONFIG_CRYPTO_ARC4 is not set
887# CONFIG_CRYPTO_KHAZAD is not set
888# CONFIG_CRYPTO_ANUBIS is not set
889# CONFIG_CRYPTO_SEED is not set
890# CONFIG_CRYPTO_SALSA20 is not set
891# CONFIG_CRYPTO_DEFLATE is not set
892# CONFIG_CRYPTO_MICHAEL_MIC is not set
893# CONFIG_CRYPTO_CRC32C is not set
894# CONFIG_CRYPTO_CAMELLIA is not set
895# CONFIG_CRYPTO_AUTHENC is not set
896# CONFIG_CRYPTO_LZO is not set
897CONFIG_CRYPTO_HW=y
898# CONFIG_PPC_CLOCK is not set
899CONFIG_PPC_LIB_RHEAP=y
diff --git a/arch/powerpc/configs/mpc8540_ads_defconfig b/arch/powerpc/configs/85xx/mpc8540_ads_defconfig
index b998539da86e..b998539da86e 100644
--- a/arch/powerpc/configs/mpc8540_ads_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8540_ads_defconfig
diff --git a/arch/powerpc/configs/mpc8544_ds_defconfig b/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
index 418bcdb5f919..a9f113b243ae 100644
--- a/arch/powerpc/configs/mpc8544_ds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
@@ -162,6 +162,7 @@ CONFIG_MPC85xx=y
162# CONFIG_MPC85xx_CDS is not set 162# CONFIG_MPC85xx_CDS is not set
163# CONFIG_MPC85xx_MDS is not set 163# CONFIG_MPC85xx_MDS is not set
164CONFIG_MPC85xx_DS=y 164CONFIG_MPC85xx_DS=y
165# CONFIG_KSI8560 is not set
165# CONFIG_STX_GP3 is not set 166# CONFIG_STX_GP3 is not set
166# CONFIG_TQM8540 is not set 167# CONFIG_TQM8540 is not set
167# CONFIG_TQM8541 is not set 168# CONFIG_TQM8541 is not set
@@ -202,6 +203,7 @@ CONFIG_PREEMPT_NONE=y
202# CONFIG_PREEMPT is not set 203# CONFIG_PREEMPT is not set
203CONFIG_BINFMT_ELF=y 204CONFIG_BINFMT_ELF=y
204CONFIG_BINFMT_MISC=m 205CONFIG_BINFMT_MISC=m
206CONFIG_FORCE_MAX_ZONEORDER=11
205CONFIG_MATH_EMULATION=y 207CONFIG_MATH_EMULATION=y
206# CONFIG_IOMMU_HELPER is not set 208# CONFIG_IOMMU_HELPER is not set
207CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 209CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -1255,7 +1257,19 @@ CONFIG_RTC_DRV_CMOS=y
1255# 1257#
1256# on-CPU RTC drivers 1258# on-CPU RTC drivers
1257# 1259#
1258# CONFIG_DMADEVICES is not set 1260CONFIG_DMADEVICES=y
1261
1262#
1263# DMA Devices
1264#
1265CONFIG_FSL_DMA=y
1266# CONFIG_FSL_DMA_SELFTEST is not set
1267CONFIG_DMA_ENGINE=y
1268
1269#
1270# DMA Clients
1271#
1272# CONFIG_NET_DMA is not set
1259 1273
1260# 1274#
1261# Userspace I/O 1275# Userspace I/O
@@ -1447,6 +1461,7 @@ CONFIG_PLIST=y
1447CONFIG_HAS_IOMEM=y 1461CONFIG_HAS_IOMEM=y
1448CONFIG_HAS_IOPORT=y 1462CONFIG_HAS_IOPORT=y
1449CONFIG_HAS_DMA=y 1463CONFIG_HAS_DMA=y
1464CONFIG_HAVE_LMB=y
1450 1465
1451# 1466#
1452# Kernel hacking 1467# Kernel hacking
diff --git a/arch/powerpc/configs/mpc8560_ads_defconfig b/arch/powerpc/configs/85xx/mpc8560_ads_defconfig
index 851ac9115617..851ac9115617 100644
--- a/arch/powerpc/configs/mpc8560_ads_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8560_ads_defconfig
diff --git a/arch/powerpc/configs/mpc8568mds_defconfig b/arch/powerpc/configs/85xx/mpc8568mds_defconfig
index 2b866b385607..2b866b385607 100644
--- a/arch/powerpc/configs/mpc8568mds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8568mds_defconfig
diff --git a/arch/powerpc/configs/mpc8572_ds_defconfig b/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
index 53aa6f3173a5..53aa6f3173a5 100644
--- a/arch/powerpc/configs/mpc8572_ds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
diff --git a/arch/powerpc/configs/mpc85xx_cds_defconfig b/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig
index a469fe918816..a469fe918816 100644
--- a/arch/powerpc/configs/mpc85xx_cds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig
diff --git a/arch/powerpc/configs/sbc8548_defconfig b/arch/powerpc/configs/85xx/sbc8548_defconfig
index 67f67978c742..67f67978c742 100644
--- a/arch/powerpc/configs/sbc8548_defconfig
+++ b/arch/powerpc/configs/85xx/sbc8548_defconfig
diff --git a/arch/powerpc/configs/sbc8560_defconfig b/arch/powerpc/configs/85xx/sbc8560_defconfig
index fef605579e29..fef605579e29 100644
--- a/arch/powerpc/configs/sbc8560_defconfig
+++ b/arch/powerpc/configs/85xx/sbc8560_defconfig
diff --git a/arch/powerpc/configs/stx_gp3_defconfig b/arch/powerpc/configs/85xx/stx_gp3_defconfig
index 1d303c49bb0c..1d303c49bb0c 100644
--- a/arch/powerpc/configs/stx_gp3_defconfig
+++ b/arch/powerpc/configs/85xx/stx_gp3_defconfig
diff --git a/arch/powerpc/configs/tqm8540_defconfig b/arch/powerpc/configs/85xx/tqm8540_defconfig
index d39ee3b35bfc..d39ee3b35bfc 100644
--- a/arch/powerpc/configs/tqm8540_defconfig
+++ b/arch/powerpc/configs/85xx/tqm8540_defconfig
diff --git a/arch/powerpc/configs/tqm8541_defconfig b/arch/powerpc/configs/85xx/tqm8541_defconfig
index cbf6ad2d71da..cbf6ad2d71da 100644
--- a/arch/powerpc/configs/tqm8541_defconfig
+++ b/arch/powerpc/configs/85xx/tqm8541_defconfig
diff --git a/arch/powerpc/configs/tqm8555_defconfig b/arch/powerpc/configs/85xx/tqm8555_defconfig
index bbff962c8472..bbff962c8472 100644
--- a/arch/powerpc/configs/tqm8555_defconfig
+++ b/arch/powerpc/configs/85xx/tqm8555_defconfig
diff --git a/arch/powerpc/configs/tqm8560_defconfig b/arch/powerpc/configs/85xx/tqm8560_defconfig
index 63c5ec8b6515..63c5ec8b6515 100644
--- a/arch/powerpc/configs/tqm8560_defconfig
+++ b/arch/powerpc/configs/85xx/tqm8560_defconfig
diff --git a/arch/powerpc/configs/chrp32_defconfig b/arch/powerpc/configs/chrp32_defconfig
index 38b85b211c38..d7fd298bd234 100644
--- a/arch/powerpc/configs/chrp32_defconfig
+++ b/arch/powerpc/configs/chrp32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 10:33:36 2008 4# Thu Mar 27 13:55:37 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -74,8 +74,6 @@ CONFIG_IKCONFIG_PROC=y
74CONFIG_LOG_BUF_SHIFT=15 74CONFIG_LOG_BUF_SHIFT=15
75# CONFIG_CGROUPS is not set 75# CONFIG_CGROUPS is not set
76# CONFIG_GROUP_SCHED is not set 76# CONFIG_GROUP_SCHED is not set
77# CONFIG_USER_SCHED is not set
78# CONFIG_CGROUP_SCHED is not set
79CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
80CONFIG_SYSFS_DEPRECATED_V2=y 78CONFIG_SYSFS_DEPRECATED_V2=y
81# CONFIG_RELAY is not set 79# CONFIG_RELAY is not set
@@ -243,7 +241,7 @@ CONFIG_PCI_SYSCALL=y
243# CONFIG_PCIEPORTBUS is not set 241# CONFIG_PCIEPORTBUS is not set
244CONFIG_ARCH_SUPPORTS_MSI=y 242CONFIG_ARCH_SUPPORTS_MSI=y
245# CONFIG_PCI_MSI is not set 243# CONFIG_PCI_MSI is not set
246CONFIG_PCI_LEGACY=y 244# CONFIG_PCI_LEGACY is not set
247# CONFIG_PCI_DEBUG is not set 245# CONFIG_PCI_DEBUG is not set
248# CONFIG_PCCARD is not set 246# CONFIG_PCCARD is not set
249# CONFIG_HOTPLUG_PCI is not set 247# CONFIG_HOTPLUG_PCI is not set
@@ -1328,6 +1326,7 @@ CONFIG_PLIST=y
1328CONFIG_HAS_IOMEM=y 1326CONFIG_HAS_IOMEM=y
1329CONFIG_HAS_IOPORT=y 1327CONFIG_HAS_IOPORT=y
1330CONFIG_HAS_DMA=y 1328CONFIG_HAS_DMA=y
1329CONFIG_HAVE_LMB=y
1331 1330
1332# 1331#
1333# Kernel hacking 1332# Kernel hacking
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
index 0f82f66a60f8..a20501f89474 100644
--- a/arch/powerpc/configs/g5_defconfig
+++ b/arch/powerpc/configs/g5_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 10:36:41 2008 4# Thu Mar 27 13:55:43 2008
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7 7
@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
77CONFIG_LOG_BUF_SHIFT=17 77CONFIG_LOG_BUF_SHIFT=17
78# CONFIG_CGROUPS is not set 78# CONFIG_CGROUPS is not set
79# CONFIG_GROUP_SCHED is not set 79# CONFIG_GROUP_SCHED is not set
80# CONFIG_USER_SCHED is not set
81# CONFIG_CGROUP_SCHED is not set
82CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
83CONFIG_SYSFS_DEPRECATED_V2=y 81CONFIG_SYSFS_DEPRECATED_V2=y
84# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
@@ -276,7 +274,7 @@ CONFIG_PCI_SYSCALL=y
276# CONFIG_PCIEPORTBUS is not set 274# CONFIG_PCIEPORTBUS is not set
277CONFIG_ARCH_SUPPORTS_MSI=y 275CONFIG_ARCH_SUPPORTS_MSI=y
278CONFIG_PCI_MSI=y 276CONFIG_PCI_MSI=y
279CONFIG_PCI_LEGACY=y 277# CONFIG_PCI_LEGACY is not set
280# CONFIG_PCI_DEBUG is not set 278# CONFIG_PCI_DEBUG is not set
281# CONFIG_PCCARD is not set 279# CONFIG_PCCARD is not set
282# CONFIG_HOTPLUG_PCI is not set 280# CONFIG_HOTPLUG_PCI is not set
@@ -1596,6 +1594,7 @@ CONFIG_PLIST=y
1596CONFIG_HAS_IOMEM=y 1594CONFIG_HAS_IOMEM=y
1597CONFIG_HAS_IOPORT=y 1595CONFIG_HAS_IOPORT=y
1598CONFIG_HAS_DMA=y 1596CONFIG_HAS_DMA=y
1597CONFIG_HAVE_LMB=y
1599 1598
1600# 1599#
1601# Kernel hacking 1600# Kernel hacking
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig
index 8d9a84f50157..b3128fb7ce7e 100644
--- a/arch/powerpc/configs/iseries_defconfig
+++ b/arch/powerpc/configs/iseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 10:43:46 2008 4# Thu Mar 27 13:55:45 2008
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7 7
@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
77CONFIG_LOG_BUF_SHIFT=17 77CONFIG_LOG_BUF_SHIFT=17
78# CONFIG_CGROUPS is not set 78# CONFIG_CGROUPS is not set
79# CONFIG_GROUP_SCHED is not set 79# CONFIG_GROUP_SCHED is not set
80# CONFIG_USER_SCHED is not set
81# CONFIG_CGROUP_SCHED is not set
82CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
83CONFIG_SYSFS_DEPRECATED_V2=y 81CONFIG_SYSFS_DEPRECATED_V2=y
84# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
@@ -261,7 +259,7 @@ CONFIG_PCI_SYSCALL=y
261# CONFIG_PCIEPORTBUS is not set 259# CONFIG_PCIEPORTBUS is not set
262CONFIG_ARCH_SUPPORTS_MSI=y 260CONFIG_ARCH_SUPPORTS_MSI=y
263# CONFIG_PCI_MSI is not set 261# CONFIG_PCI_MSI is not set
264CONFIG_PCI_LEGACY=y 262# CONFIG_PCI_LEGACY is not set
265# CONFIG_PCI_DEBUG is not set 263# CONFIG_PCI_DEBUG is not set
266# CONFIG_PCCARD is not set 264# CONFIG_PCCARD is not set
267# CONFIG_HOTPLUG_PCI is not set 265# CONFIG_HOTPLUG_PCI is not set
@@ -1065,6 +1063,7 @@ CONFIG_PLIST=y
1065CONFIG_HAS_IOMEM=y 1063CONFIG_HAS_IOMEM=y
1066CONFIG_HAS_IOPORT=y 1064CONFIG_HAS_IOPORT=y
1067CONFIG_HAS_DMA=y 1065CONFIG_HAS_DMA=y
1066CONFIG_HAVE_LMB=y
1068 1067
1069# 1068#
1070# Kernel hacking 1069# Kernel hacking
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig
index 8b810d056440..7a166a39d92d 100644
--- a/arch/powerpc/configs/maple_defconfig
+++ b/arch/powerpc/configs/maple_defconfig
@@ -333,7 +333,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
333CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 333CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
334CONFIG_STANDALONE=y 334CONFIG_STANDALONE=y
335CONFIG_PREVENT_FIRMWARE_BUILD=y 335CONFIG_PREVENT_FIRMWARE_BUILD=y
336# CONFIG_FW_LOADER is not set 336CONFIG_FW_LOADER=y
337# CONFIG_DEBUG_DRIVER is not set 337# CONFIG_DEBUG_DRIVER is not set
338# CONFIG_DEBUG_DEVRES is not set 338# CONFIG_DEBUG_DEVRES is not set
339# CONFIG_SYS_HYPERVISOR is not set 339# CONFIG_SYS_HYPERVISOR is not set
@@ -374,6 +374,7 @@ CONFIG_BLK_DEV_IDEDISK=y
374CONFIG_BLK_DEV_IDECD=y 374CONFIG_BLK_DEV_IDECD=y
375# CONFIG_BLK_DEV_IDETAPE is not set 375# CONFIG_BLK_DEV_IDETAPE is not set
376# CONFIG_BLK_DEV_IDEFLOPPY is not set 376# CONFIG_BLK_DEV_IDEFLOPPY is not set
377# CONFIG_BLK_DEV_IDESCSI is not set
377CONFIG_IDE_TASK_IOCTL=y 378CONFIG_IDE_TASK_IOCTL=y
378CONFIG_IDE_PROC_FS=y 379CONFIG_IDE_PROC_FS=y
379 380
@@ -427,10 +428,129 @@ CONFIG_IDE_ARCH_OBSOLETE_INIT=y
427# SCSI device support 428# SCSI device support
428# 429#
429# CONFIG_RAID_ATTRS is not set 430# CONFIG_RAID_ATTRS is not set
430# CONFIG_SCSI is not set 431CONFIG_SCSI=y
431# CONFIG_SCSI_DMA is not set 432CONFIG_SCSI_DMA=y
433# CONFIG_SCSI_TGT is not set
432# CONFIG_SCSI_NETLINK is not set 434# CONFIG_SCSI_NETLINK is not set
433# CONFIG_ATA is not set 435# CONFIG_SCSI_PROC_FS is not set
436
437#
438# SCSI support type (disk, tape, CD-ROM)
439#
440CONFIG_BLK_DEV_SD=y
441# CONFIG_CHR_DEV_ST is not set
442# CONFIG_CHR_DEV_OSST is not set
443# CONFIG_BLK_DEV_SR is not set
444CONFIG_CHR_DEV_SG=y
445# CONFIG_CHR_DEV_SCH is not set
446
447#
448# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
449#
450# CONFIG_SCSI_MULTI_LUN is not set
451# CONFIG_SCSI_CONSTANTS is not set
452# CONFIG_SCSI_LOGGING is not set
453# CONFIG_SCSI_SCAN_ASYNC is not set
454CONFIG_SCSI_WAIT_SCAN=m
455
456#
457# SCSI Transports
458#
459# CONFIG_SCSI_SPI_ATTRS is not set
460# CONFIG_SCSI_FC_ATTRS is not set
461# CONFIG_SCSI_ISCSI_ATTRS is not set
462# CONFIG_SCSI_SAS_LIBSAS is not set
463# CONFIG_SCSI_SRP_ATTRS is not set
464CONFIG_SCSI_LOWLEVEL=y
465# CONFIG_ISCSI_TCP is not set
466# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
467# CONFIG_SCSI_3W_9XXX is not set
468# CONFIG_SCSI_ACARD is not set
469# CONFIG_SCSI_AACRAID is not set
470# CONFIG_SCSI_AIC7XXX is not set
471# CONFIG_SCSI_AIC7XXX_OLD is not set
472# CONFIG_SCSI_AIC79XX is not set
473# CONFIG_SCSI_AIC94XX is not set
474# CONFIG_SCSI_ARCMSR is not set
475# CONFIG_MEGARAID_NEWGEN is not set
476# CONFIG_MEGARAID_LEGACY is not set
477# CONFIG_MEGARAID_SAS is not set
478# CONFIG_SCSI_HPTIOP is not set
479# CONFIG_SCSI_DMX3191D is not set
480# CONFIG_SCSI_EATA is not set
481# CONFIG_SCSI_FUTURE_DOMAIN is not set
482# CONFIG_SCSI_GDTH is not set
483# CONFIG_SCSI_IPS is not set
484# CONFIG_SCSI_INITIO is not set
485# CONFIG_SCSI_INIA100 is not set
486# CONFIG_SCSI_STEX is not set
487# CONFIG_SCSI_SYM53C8XX_2 is not set
488CONFIG_SCSI_IPR=y
489CONFIG_SCSI_IPR_TRACE=y
490CONFIG_SCSI_IPR_DUMP=y
491# CONFIG_SCSI_QLOGIC_1280 is not set
492# CONFIG_SCSI_QLA_FC is not set
493# CONFIG_SCSI_QLA_ISCSI is not set
494# CONFIG_SCSI_LPFC is not set
495# CONFIG_SCSI_DC395x is not set
496# CONFIG_SCSI_DC390T is not set
497# CONFIG_SCSI_DEBUG is not set
498# CONFIG_SCSI_SRP is not set
499CONFIG_ATA=y
500CONFIG_ATA_NONSTANDARD=y
501# CONFIG_SATA_AHCI is not set
502# CONFIG_SATA_SVW is not set
503# CONFIG_ATA_PIIX is not set
504# CONFIG_SATA_MV is not set
505# CONFIG_SATA_NV is not set
506# CONFIG_PDC_ADMA is not set
507# CONFIG_SATA_QSTOR is not set
508# CONFIG_SATA_PROMISE is not set
509# CONFIG_SATA_SX4 is not set
510# CONFIG_SATA_SIL is not set
511# CONFIG_SATA_SIL24 is not set
512# CONFIG_SATA_SIS is not set
513# CONFIG_SATA_ULI is not set
514# CONFIG_SATA_VIA is not set
515# CONFIG_SATA_VITESSE is not set
516# CONFIG_SATA_INIC162X is not set
517# CONFIG_PATA_ALI is not set
518# CONFIG_PATA_AMD is not set
519# CONFIG_PATA_ARTOP is not set
520# CONFIG_PATA_ATIIXP is not set
521# CONFIG_PATA_CMD640_PCI is not set
522# CONFIG_PATA_CMD64X is not set
523# CONFIG_PATA_CS5520 is not set
524# CONFIG_PATA_CS5530 is not set
525# CONFIG_PATA_CYPRESS is not set
526# CONFIG_PATA_EFAR is not set
527# CONFIG_ATA_GENERIC is not set
528# CONFIG_PATA_HPT366 is not set
529# CONFIG_PATA_HPT37X is not set
530# CONFIG_PATA_HPT3X2N is not set
531# CONFIG_PATA_HPT3X3 is not set
532# CONFIG_PATA_IT821X is not set
533# CONFIG_PATA_IT8213 is not set
534# CONFIG_PATA_JMICRON is not set
535# CONFIG_PATA_TRIFLEX is not set
536# CONFIG_PATA_MARVELL is not set
537# CONFIG_PATA_MPIIX is not set
538# CONFIG_PATA_OLDPIIX is not set
539# CONFIG_PATA_NETCELL is not set
540# CONFIG_PATA_NS87410 is not set
541# CONFIG_PATA_NS87415 is not set
542# CONFIG_PATA_OPTI is not set
543# CONFIG_PATA_OPTIDMA is not set
544# CONFIG_PATA_PDC_OLD is not set
545# CONFIG_PATA_RADISYS is not set
546# CONFIG_PATA_RZ1000 is not set
547# CONFIG_PATA_SC1200 is not set
548# CONFIG_PATA_SERVERWORKS is not set
549# CONFIG_PATA_PDC2027X is not set
550# CONFIG_PATA_SIL680 is not set
551# CONFIG_PATA_SIS is not set
552# CONFIG_PATA_VIA is not set
553# CONFIG_PATA_WINBOND is not set
434# CONFIG_MD is not set 554# CONFIG_MD is not set
435# CONFIG_FUSION is not set 555# CONFIG_FUSION is not set
436 556
@@ -536,6 +656,7 @@ CONFIG_USB_PEGASUS=y
536# CONFIG_HIPPI is not set 656# CONFIG_HIPPI is not set
537# CONFIG_PPP is not set 657# CONFIG_PPP is not set
538# CONFIG_SLIP is not set 658# CONFIG_SLIP is not set
659# CONFIG_NET_FC is not set
539# CONFIG_SHAPER is not set 660# CONFIG_SHAPER is not set
540# CONFIG_NETCONSOLE is not set 661# CONFIG_NETCONSOLE is not set
541# CONFIG_NETPOLL is not set 662# CONFIG_NETPOLL is not set
@@ -783,12 +904,14 @@ CONFIG_USB_UHCI_HCD=y
783# 904#
784# may also be needed; see USB_STORAGE Help for more information 905# may also be needed; see USB_STORAGE Help for more information
785# 906#
907# CONFIG_USB_STORAGE is not set
786# CONFIG_USB_LIBUSUAL is not set 908# CONFIG_USB_LIBUSUAL is not set
787 909
788# 910#
789# USB Imaging devices 911# USB Imaging devices
790# 912#
791# CONFIG_USB_MDC800 is not set 913# CONFIG_USB_MDC800 is not set
914# CONFIG_USB_MICROTEK is not set
792CONFIG_USB_MON=y 915CONFIG_USB_MON=y
793 916
794# 917#
diff --git a/arch/powerpc/configs/mpc83xx_defconfig b/arch/powerpc/configs/mpc83xx_defconfig
index 029d2dab7deb..9e0dd8201691 100644
--- a/arch/powerpc/configs/mpc83xx_defconfig
+++ b/arch/powerpc/configs/mpc83xx_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc9
4# Mon Mar 24 08:48:25 2008 4# Tue Apr 15 18:07:36 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -201,6 +201,7 @@ CONFIG_PREEMPT_NONE=y
201# CONFIG_PREEMPT is not set 201# CONFIG_PREEMPT is not set
202CONFIG_BINFMT_ELF=y 202CONFIG_BINFMT_ELF=y
203# CONFIG_BINFMT_MISC is not set 203# CONFIG_BINFMT_MISC is not set
204CONFIG_FORCE_MAX_ZONEORDER=11
204CONFIG_MATH_EMULATION=y 205CONFIG_MATH_EMULATION=y
205# CONFIG_IOMMU_HELPER is not set 206# CONFIG_IOMMU_HELPER is not set
206CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 207CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -353,7 +354,90 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
353# CONFIG_FW_LOADER is not set 354# CONFIG_FW_LOADER is not set
354# CONFIG_SYS_HYPERVISOR is not set 355# CONFIG_SYS_HYPERVISOR is not set
355# CONFIG_CONNECTOR is not set 356# CONFIG_CONNECTOR is not set
356# CONFIG_MTD is not set 357CONFIG_MTD=y
358# CONFIG_MTD_DEBUG is not set
359# CONFIG_MTD_CONCAT is not set
360CONFIG_MTD_PARTITIONS=y
361# CONFIG_MTD_REDBOOT_PARTS is not set
362# CONFIG_MTD_CMDLINE_PARTS is not set
363CONFIG_MTD_OF_PARTS=y
364
365#
366# User Modules And Translation Layers
367#
368CONFIG_MTD_CHAR=y
369CONFIG_MTD_BLKDEVS=y
370CONFIG_MTD_BLOCK=y
371# CONFIG_FTL is not set
372# CONFIG_NFTL is not set
373# CONFIG_INFTL is not set
374# CONFIG_RFD_FTL is not set
375# CONFIG_SSFDC is not set
376# CONFIG_MTD_OOPS is not set
377
378#
379# RAM/ROM/Flash chip drivers
380#
381CONFIG_MTD_CFI=y
382# CONFIG_MTD_JEDECPROBE is not set
383CONFIG_MTD_GEN_PROBE=y
384# CONFIG_MTD_CFI_ADV_OPTIONS is not set
385CONFIG_MTD_MAP_BANK_WIDTH_1=y
386CONFIG_MTD_MAP_BANK_WIDTH_2=y
387CONFIG_MTD_MAP_BANK_WIDTH_4=y
388# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
389# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
390# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
391CONFIG_MTD_CFI_I1=y
392CONFIG_MTD_CFI_I2=y
393# CONFIG_MTD_CFI_I4 is not set
394# CONFIG_MTD_CFI_I8 is not set
395# CONFIG_MTD_CFI_INTELEXT is not set
396CONFIG_MTD_CFI_AMDSTD=y
397# CONFIG_MTD_CFI_STAA is not set
398CONFIG_MTD_CFI_UTIL=y
399# CONFIG_MTD_RAM is not set
400# CONFIG_MTD_ROM is not set
401# CONFIG_MTD_ABSENT is not set
402
403#
404# Mapping drivers for chip access
405#
406# CONFIG_MTD_COMPLEX_MAPPINGS is not set
407# CONFIG_MTD_PHYSMAP is not set
408CONFIG_MTD_PHYSMAP_OF=y
409# CONFIG_MTD_PLATRAM is not set
410
411#
412# Self-contained MTD device drivers
413#
414# CONFIG_MTD_SLRAM is not set
415# CONFIG_MTD_PHRAM is not set
416# CONFIG_MTD_MTDRAM is not set
417# CONFIG_MTD_BLOCK2MTD is not set
418
419#
420# Disk-On-Chip Device Drivers
421#
422# CONFIG_MTD_DOC2000 is not set
423# CONFIG_MTD_DOC2001 is not set
424# CONFIG_MTD_DOC2001PLUS is not set
425CONFIG_MTD_NAND=y
426CONFIG_MTD_NAND_VERIFY_WRITE=y
427# CONFIG_MTD_NAND_ECC_SMC is not set
428# CONFIG_MTD_NAND_MUSEUM_IDS is not set
429CONFIG_MTD_NAND_IDS=y
430# CONFIG_MTD_NAND_DISKONCHIP is not set
431# CONFIG_MTD_NAND_NANDSIM is not set
432# CONFIG_MTD_NAND_PLATFORM is not set
433# CONFIG_MTD_ALAUDA is not set
434CONFIG_MTD_NAND_FSL_ELBC=y
435# CONFIG_MTD_ONENAND is not set
436
437#
438# UBI - Unsorted block images
439#
440# CONFIG_MTD_UBI is not set
357CONFIG_OF_DEVICE=y 441CONFIG_OF_DEVICE=y
358# CONFIG_PARPORT is not set 442# CONFIG_PARPORT is not set
359CONFIG_BLK_DEV=y 443CONFIG_BLK_DEV=y
@@ -362,6 +446,7 @@ CONFIG_BLK_DEV=y
362CONFIG_BLK_DEV_LOOP=y 446CONFIG_BLK_DEV_LOOP=y
363# CONFIG_BLK_DEV_CRYPTOLOOP is not set 447# CONFIG_BLK_DEV_CRYPTOLOOP is not set
364# CONFIG_BLK_DEV_NBD is not set 448# CONFIG_BLK_DEV_NBD is not set
449# CONFIG_BLK_DEV_UB is not set
365CONFIG_BLK_DEV_RAM=y 450CONFIG_BLK_DEV_RAM=y
366CONFIG_BLK_DEV_RAM_COUNT=16 451CONFIG_BLK_DEV_RAM_COUNT=16
367CONFIG_BLK_DEV_RAM_SIZE=32768 452CONFIG_BLK_DEV_RAM_SIZE=32768
@@ -469,6 +554,15 @@ CONFIG_NETDEV_10000=y
469# 554#
470# CONFIG_WLAN_PRE80211 is not set 555# CONFIG_WLAN_PRE80211 is not set
471# CONFIG_WLAN_80211 is not set 556# CONFIG_WLAN_80211 is not set
557
558#
559# USB Network Adapters
560#
561# CONFIG_USB_CATC is not set
562# CONFIG_USB_KAWETH is not set
563# CONFIG_USB_PEGASUS is not set
564# CONFIG_USB_RTL8150 is not set
565# CONFIG_USB_USBNET is not set
472# CONFIG_WAN is not set 566# CONFIG_WAN is not set
473# CONFIG_PPP is not set 567# CONFIG_PPP is not set
474# CONFIG_SLIP is not set 568# CONFIG_SLIP is not set
@@ -563,6 +657,7 @@ CONFIG_I2C_MPC=y
563# CONFIG_I2C_SIMTEC is not set 657# CONFIG_I2C_SIMTEC is not set
564# CONFIG_I2C_TAOS_EVM is not set 658# CONFIG_I2C_TAOS_EVM is not set
565# CONFIG_I2C_STUB is not set 659# CONFIG_I2C_STUB is not set
660# CONFIG_I2C_TINY_USB is not set
566 661
567# 662#
568# Miscellaneous I2C Chip support 663# Miscellaneous I2C Chip support
@@ -648,6 +743,11 @@ CONFIG_WATCHDOG=y
648CONFIG_83xx_WDT=y 743CONFIG_83xx_WDT=y
649 744
650# 745#
746# USB-based Watchdog Cards
747#
748# CONFIG_USBPCWATCHDOG is not set
749
750#
651# Sonics Silicon Backplane 751# Sonics Silicon Backplane
652# 752#
653CONFIG_SSB_POSSIBLE=y 753CONFIG_SSB_POSSIBLE=y
@@ -664,6 +764,7 @@ CONFIG_SSB_POSSIBLE=y
664# CONFIG_VIDEO_DEV is not set 764# CONFIG_VIDEO_DEV is not set
665# CONFIG_DVB_CORE is not set 765# CONFIG_DVB_CORE is not set
666CONFIG_DAB=y 766CONFIG_DAB=y
767# CONFIG_USB_DABUSB is not set
667 768
668# 769#
669# Graphics support 770# Graphics support
@@ -686,6 +787,14 @@ CONFIG_HID_SUPPORT=y
686CONFIG_HID=y 787CONFIG_HID=y
687# CONFIG_HID_DEBUG is not set 788# CONFIG_HID_DEBUG is not set
688# CONFIG_HIDRAW is not set 789# CONFIG_HIDRAW is not set
790
791#
792# USB Input Devices
793#
794CONFIG_USB_HID=y
795# CONFIG_USB_HIDINPUT_POWERBOOK is not set
796# CONFIG_HID_FF is not set
797# CONFIG_USB_HIDDEV is not set
689CONFIG_USB_SUPPORT=y 798CONFIG_USB_SUPPORT=y
690CONFIG_USB_ARCH_HAS_HCD=y 799CONFIG_USB_ARCH_HAS_HCD=y
691# CONFIG_USB_ARCH_HAS_OHCI is not set 800# CONFIG_USB_ARCH_HAS_OHCI is not set
@@ -715,8 +824,55 @@ CONFIG_USB_EHCI_HCD_PPC_OF=y
715# CONFIG_USB_R8A66597_HCD is not set 824# CONFIG_USB_R8A66597_HCD is not set
716 825
717# 826#
827# USB Device Class drivers
828#
829# CONFIG_USB_ACM is not set
830# CONFIG_USB_PRINTER is not set
831
832#
718# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 833# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
719# 834#
835
836#
837# may also be needed; see USB_STORAGE Help for more information
838#
839# CONFIG_USB_STORAGE is not set
840# CONFIG_USB_LIBUSUAL is not set
841
842#
843# USB Imaging devices
844#
845# CONFIG_USB_MDC800 is not set
846# CONFIG_USB_MICROTEK is not set
847CONFIG_USB_MON=y
848
849#
850# USB port drivers
851#
852# CONFIG_USB_SERIAL is not set
853
854#
855# USB Miscellaneous drivers
856#
857# CONFIG_USB_EMI62 is not set
858# CONFIG_USB_EMI26 is not set
859# CONFIG_USB_ADUTUX is not set
860# CONFIG_USB_AUERSWALD is not set
861# CONFIG_USB_RIO500 is not set
862# CONFIG_USB_LEGOTOWER is not set
863# CONFIG_USB_LCD is not set
864# CONFIG_USB_BERRY_CHARGE is not set
865# CONFIG_USB_LED is not set
866# CONFIG_USB_CYPRESS_CY7C63 is not set
867# CONFIG_USB_CYTHERM is not set
868# CONFIG_USB_PHIDGET is not set
869# CONFIG_USB_IDMOUSE is not set
870# CONFIG_USB_FTDI_ELAN is not set
871# CONFIG_USB_APPLEDISPLAY is not set
872# CONFIG_USB_SISUSBVGA is not set
873# CONFIG_USB_LD is not set
874# CONFIG_USB_TRANCEVIBRATOR is not set
875# CONFIG_USB_IOWARRIOR is not set
720# CONFIG_USB_GADGET is not set 876# CONFIG_USB_GADGET is not set
721# CONFIG_MMC is not set 877# CONFIG_MMC is not set
722# CONFIG_MEMSTICK is not set 878# CONFIG_MEMSTICK is not set
@@ -792,6 +948,7 @@ CONFIG_TMPFS=y
792# CONFIG_BEFS_FS is not set 948# CONFIG_BEFS_FS is not set
793# CONFIG_BFS_FS is not set 949# CONFIG_BFS_FS is not set
794# CONFIG_EFS_FS is not set 950# CONFIG_EFS_FS is not set
951# CONFIG_JFFS2_FS is not set
795# CONFIG_CRAMFS is not set 952# CONFIG_CRAMFS is not set
796# CONFIG_VXFS_FS is not set 953# CONFIG_VXFS_FS is not set
797# CONFIG_MINIX_FS is not set 954# CONFIG_MINIX_FS is not set
@@ -862,6 +1019,7 @@ CONFIG_PLIST=y
862CONFIG_HAS_IOMEM=y 1019CONFIG_HAS_IOMEM=y
863CONFIG_HAS_IOPORT=y 1020CONFIG_HAS_IOPORT=y
864CONFIG_HAS_DMA=y 1021CONFIG_HAS_DMA=y
1022CONFIG_HAVE_LMB=y
865 1023
866# 1024#
867# Kernel hacking 1025# Kernel hacking
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig
index 558b0d348d4f..fca114252ac7 100644
--- a/arch/powerpc/configs/pmac32_defconfig
+++ b/arch/powerpc/configs/pmac32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 11:05:14 2008 4# Thu Mar 27 13:56:21 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
77CONFIG_LOG_BUF_SHIFT=14 77CONFIG_LOG_BUF_SHIFT=14
78# CONFIG_CGROUPS is not set 78# CONFIG_CGROUPS is not set
79# CONFIG_GROUP_SCHED is not set 79# CONFIG_GROUP_SCHED is not set
80# CONFIG_USER_SCHED is not set
81# CONFIG_CGROUP_SCHED is not set
82CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
83CONFIG_SYSFS_DEPRECATED_V2=y 81CONFIG_SYSFS_DEPRECATED_V2=y
84# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
@@ -272,7 +270,7 @@ CONFIG_PCI_SYSCALL=y
272# CONFIG_PCIEPORTBUS is not set 270# CONFIG_PCIEPORTBUS is not set
273CONFIG_ARCH_SUPPORTS_MSI=y 271CONFIG_ARCH_SUPPORTS_MSI=y
274# CONFIG_PCI_MSI is not set 272# CONFIG_PCI_MSI is not set
275CONFIG_PCI_LEGACY=y 273# CONFIG_PCI_LEGACY is not set
276# CONFIG_PCI_DEBUG is not set 274# CONFIG_PCI_DEBUG is not set
277CONFIG_PCCARD=m 275CONFIG_PCCARD=m
278# CONFIG_PCMCIA_DEBUG is not set 276# CONFIG_PCMCIA_DEBUG is not set
@@ -1895,6 +1893,7 @@ CONFIG_PLIST=y
1895CONFIG_HAS_IOMEM=y 1893CONFIG_HAS_IOMEM=y
1896CONFIG_HAS_IOPORT=y 1894CONFIG_HAS_IOPORT=y
1897CONFIG_HAS_DMA=y 1895CONFIG_HAS_DMA=y
1896CONFIG_HAVE_LMB=y
1898 1897
1899# 1898#
1900# Kernel hacking 1899# Kernel hacking
diff --git a/arch/powerpc/configs/ppc40x_defconfig b/arch/powerpc/configs/ppc40x_defconfig
new file mode 100644
index 000000000000..9d0140e3838e
--- /dev/null
+++ b/arch/powerpc/configs/ppc40x_defconfig
@@ -0,0 +1,896 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc9
4# Tue Apr 15 08:46:44 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14CONFIG_40x=y
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_4xx=y
18# CONFIG_PPC_MM_SLICES is not set
19CONFIG_NOT_COHERENT_CACHE=y
20CONFIG_PPC32=y
21CONFIG_WORD_SIZE=32
22CONFIG_PPC_MERGE=y
23CONFIG_MMU=y
24CONFIG_GENERIC_CMOS_UPDATE=y
25CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y
29# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
30CONFIG_IRQ_PER_CPU=y
31CONFIG_RWSEM_XCHGADD_ALGORITHM=y
32CONFIG_ARCH_HAS_ILOG2_U32=y
33CONFIG_GENERIC_HWEIGHT=y
34CONFIG_GENERIC_CALIBRATE_DELAY=y
35CONFIG_GENERIC_FIND_NEXT_BIT=y
36# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
37CONFIG_PPC=y
38CONFIG_EARLY_PRINTK=y
39CONFIG_GENERIC_NVRAM=y
40CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
41CONFIG_ARCH_MAY_HAVE_PC_FDC=y
42CONFIG_PPC_OF=y
43CONFIG_OF=y
44CONFIG_PPC_UDBG_16550=y
45# CONFIG_GENERIC_TBSYNC is not set
46CONFIG_AUDIT_ARCH=y
47CONFIG_GENERIC_BUG=y
48# CONFIG_DEFAULT_UIMAGE is not set
49CONFIG_PPC_DCR_NATIVE=y
50# CONFIG_PPC_DCR_MMIO is not set
51CONFIG_PPC_DCR=y
52CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
53
54#
55# General setup
56#
57CONFIG_EXPERIMENTAL=y
58CONFIG_BROKEN_ON_SMP=y
59CONFIG_INIT_ENV_ARG_LIMIT=32
60CONFIG_LOCALVERSION=""
61CONFIG_LOCALVERSION_AUTO=y
62CONFIG_SWAP=y
63CONFIG_SYSVIPC=y
64CONFIG_SYSVIPC_SYSCTL=y
65CONFIG_POSIX_MQUEUE=y
66# CONFIG_BSD_PROCESS_ACCT is not set
67# CONFIG_TASKSTATS is not set
68# CONFIG_AUDIT is not set
69# CONFIG_IKCONFIG is not set
70CONFIG_LOG_BUF_SHIFT=14
71# CONFIG_CGROUPS is not set
72CONFIG_GROUP_SCHED=y
73CONFIG_FAIR_GROUP_SCHED=y
74# CONFIG_RT_GROUP_SCHED is not set
75CONFIG_USER_SCHED=y
76# CONFIG_CGROUP_SCHED is not set
77CONFIG_SYSFS_DEPRECATED=y
78CONFIG_SYSFS_DEPRECATED_V2=y
79# CONFIG_RELAY is not set
80# CONFIG_NAMESPACES is not set
81CONFIG_BLK_DEV_INITRD=y
82CONFIG_INITRAMFS_SOURCE=""
83# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
84CONFIG_SYSCTL=y
85CONFIG_EMBEDDED=y
86CONFIG_SYSCTL_SYSCALL=y
87CONFIG_KALLSYMS=y
88CONFIG_KALLSYMS_ALL=y
89CONFIG_KALLSYMS_EXTRA_PASS=y
90CONFIG_HOTPLUG=y
91CONFIG_PRINTK=y
92CONFIG_BUG=y
93CONFIG_ELF_CORE=y
94CONFIG_COMPAT_BRK=y
95CONFIG_BASE_FULL=y
96CONFIG_FUTEX=y
97CONFIG_ANON_INODES=y
98CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y
100CONFIG_TIMERFD=y
101CONFIG_EVENTFD=y
102CONFIG_SHMEM=y
103CONFIG_VM_EVENT_COUNTERS=y
104CONFIG_SLUB_DEBUG=y
105# CONFIG_SLAB is not set
106CONFIG_SLUB=y
107# CONFIG_SLOB is not set
108# CONFIG_PROFILING is not set
109# CONFIG_MARKERS is not set
110CONFIG_HAVE_OPROFILE=y
111# CONFIG_KPROBES is not set
112CONFIG_HAVE_KPROBES=y
113CONFIG_HAVE_KRETPROBES=y
114CONFIG_PROC_PAGE_MONITOR=y
115CONFIG_SLABINFO=y
116CONFIG_RT_MUTEXES=y
117# CONFIG_TINY_SHMEM is not set
118CONFIG_BASE_SMALL=0
119CONFIG_MODULES=y
120CONFIG_MODULE_UNLOAD=y
121# CONFIG_MODULE_FORCE_UNLOAD is not set
122# CONFIG_MODVERSIONS is not set
123# CONFIG_MODULE_SRCVERSION_ALL is not set
124CONFIG_KMOD=y
125CONFIG_BLOCK=y
126CONFIG_LBD=y
127# CONFIG_BLK_DEV_IO_TRACE is not set
128# CONFIG_LSF is not set
129# CONFIG_BLK_DEV_BSG is not set
130
131#
132# IO Schedulers
133#
134CONFIG_IOSCHED_NOOP=y
135CONFIG_IOSCHED_AS=y
136CONFIG_IOSCHED_DEADLINE=y
137CONFIG_IOSCHED_CFQ=y
138CONFIG_DEFAULT_AS=y
139# CONFIG_DEFAULT_DEADLINE is not set
140# CONFIG_DEFAULT_CFQ is not set
141# CONFIG_DEFAULT_NOOP is not set
142CONFIG_DEFAULT_IOSCHED="anticipatory"
143CONFIG_CLASSIC_RCU=y
144CONFIG_PPC4xx_PCI_EXPRESS=y
145
146#
147# Platform support
148#
149# CONFIG_PPC_MPC512x is not set
150# CONFIG_PPC_MPC5121 is not set
151# CONFIG_PPC_CELL is not set
152# CONFIG_PPC_CELL_NATIVE is not set
153# CONFIG_PQ2ADS is not set
154CONFIG_EP405=y
155CONFIG_KILAUEA=y
156CONFIG_MAKALU=y
157CONFIG_WALNUT=y
158CONFIG_XILINX_VIRTEX_GENERIC_BOARD=y
159CONFIG_405GP=y
160CONFIG_405EX=y
161CONFIG_XILINX_VIRTEX=y
162CONFIG_XILINX_VIRTEX_II_PRO=y
163CONFIG_XILINX_VIRTEX_4_FX=y
164CONFIG_IBM405_ERR77=y
165CONFIG_IBM405_ERR51=y
166# CONFIG_IPIC is not set
167# CONFIG_MPIC is not set
168# CONFIG_MPIC_WEIRD is not set
169# CONFIG_PPC_I8259 is not set
170# CONFIG_PPC_RTAS is not set
171# CONFIG_MMIO_NVRAM is not set
172# CONFIG_PPC_MPC106 is not set
173# CONFIG_PPC_970_NAP is not set
174# CONFIG_PPC_INDIRECT_IO is not set
175# CONFIG_GENERIC_IOMAP is not set
176# CONFIG_CPU_FREQ is not set
177# CONFIG_FSL_ULI1575 is not set
178CONFIG_OF_RTC=y
179
180#
181# Kernel options
182#
183# CONFIG_HIGHMEM is not set
184# CONFIG_TICK_ONESHOT is not set
185# CONFIG_NO_HZ is not set
186# CONFIG_HIGH_RES_TIMERS is not set
187CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
188# CONFIG_HZ_100 is not set
189CONFIG_HZ_250=y
190# CONFIG_HZ_300 is not set
191# CONFIG_HZ_1000 is not set
192CONFIG_HZ=250
193# CONFIG_SCHED_HRTICK is not set
194CONFIG_PREEMPT_NONE=y
195# CONFIG_PREEMPT_VOLUNTARY is not set
196# CONFIG_PREEMPT is not set
197CONFIG_BINFMT_ELF=y
198# CONFIG_BINFMT_MISC is not set
199# CONFIG_MATH_EMULATION is not set
200# CONFIG_IOMMU_HELPER is not set
201CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
202CONFIG_ARCH_HAS_WALK_MEMORY=y
203CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
204CONFIG_ARCH_FLATMEM_ENABLE=y
205CONFIG_ARCH_POPULATES_NODE_MAP=y
206CONFIG_SELECT_MEMORY_MODEL=y
207CONFIG_FLATMEM_MANUAL=y
208# CONFIG_DISCONTIGMEM_MANUAL is not set
209# CONFIG_SPARSEMEM_MANUAL is not set
210CONFIG_FLATMEM=y
211CONFIG_FLAT_NODE_MEM_MAP=y
212# CONFIG_SPARSEMEM_STATIC is not set
213# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
214CONFIG_SPLIT_PTLOCK_CPUS=4
215CONFIG_RESOURCES_64BIT=y
216CONFIG_ZONE_DMA_FLAG=1
217CONFIG_BOUNCE=y
218CONFIG_VIRT_TO_BUS=y
219CONFIG_FORCE_MAX_ZONEORDER=11
220CONFIG_PROC_DEVICETREE=y
221# CONFIG_CMDLINE_BOOL is not set
222# CONFIG_PM is not set
223CONFIG_SECCOMP=y
224CONFIG_ISA_DMA_API=y
225
226#
227# Bus options
228#
229CONFIG_ZONE_DMA=y
230CONFIG_PPC_INDIRECT_PCI=y
231CONFIG_4xx_SOC=y
232CONFIG_PCI=y
233CONFIG_PCI_DOMAINS=y
234CONFIG_PCI_SYSCALL=y
235# CONFIG_PCIEPORTBUS is not set
236CONFIG_ARCH_SUPPORTS_MSI=y
237# CONFIG_PCI_MSI is not set
238# CONFIG_PCI_LEGACY is not set
239# CONFIG_PCI_DEBUG is not set
240# CONFIG_PCCARD is not set
241# CONFIG_HOTPLUG_PCI is not set
242
243#
244# Advanced setup
245#
246# CONFIG_ADVANCED_OPTIONS is not set
247
248#
249# Default settings for advanced configuration options are used
250#
251CONFIG_HIGHMEM_START=0xfe000000
252CONFIG_LOWMEM_SIZE=0x30000000
253CONFIG_KERNEL_START=0xc0000000
254CONFIG_TASK_SIZE=0xc0000000
255CONFIG_CONSISTENT_START=0xff100000
256CONFIG_CONSISTENT_SIZE=0x00200000
257CONFIG_BOOT_LOAD=0x00400000
258
259#
260# Networking
261#
262CONFIG_NET=y
263
264#
265# Networking options
266#
267CONFIG_PACKET=y
268# CONFIG_PACKET_MMAP is not set
269CONFIG_UNIX=y
270# CONFIG_NET_KEY is not set
271CONFIG_INET=y
272# CONFIG_IP_MULTICAST is not set
273# CONFIG_IP_ADVANCED_ROUTER is not set
274CONFIG_IP_FIB_HASH=y
275CONFIG_IP_PNP=y
276CONFIG_IP_PNP_DHCP=y
277CONFIG_IP_PNP_BOOTP=y
278# CONFIG_IP_PNP_RARP is not set
279# CONFIG_NET_IPIP is not set
280# CONFIG_NET_IPGRE is not set
281# CONFIG_ARPD is not set
282# CONFIG_SYN_COOKIES is not set
283# CONFIG_INET_AH is not set
284# CONFIG_INET_ESP is not set
285# CONFIG_INET_IPCOMP is not set
286# CONFIG_INET_XFRM_TUNNEL is not set
287# CONFIG_INET_TUNNEL is not set
288# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
289# CONFIG_INET_XFRM_MODE_TUNNEL is not set
290# CONFIG_INET_XFRM_MODE_BEET is not set
291# CONFIG_INET_LRO is not set
292CONFIG_INET_DIAG=y
293CONFIG_INET_TCP_DIAG=y
294# CONFIG_TCP_CONG_ADVANCED is not set
295CONFIG_TCP_CONG_CUBIC=y
296CONFIG_DEFAULT_TCP_CONG="cubic"
297# CONFIG_TCP_MD5SIG is not set
298# CONFIG_IPV6 is not set
299# CONFIG_INET6_XFRM_TUNNEL is not set
300# CONFIG_INET6_TUNNEL is not set
301# CONFIG_NETWORK_SECMARK is not set
302# CONFIG_NETFILTER is not set
303# CONFIG_IP_DCCP is not set
304# CONFIG_IP_SCTP is not set
305# CONFIG_TIPC is not set
306# CONFIG_ATM is not set
307# CONFIG_BRIDGE is not set
308# CONFIG_VLAN_8021Q is not set
309# CONFIG_DECNET is not set
310# CONFIG_LLC2 is not set
311# CONFIG_IPX is not set
312# CONFIG_ATALK is not set
313# CONFIG_X25 is not set
314# CONFIG_LAPB is not set
315# CONFIG_ECONET is not set
316# CONFIG_WAN_ROUTER is not set
317# CONFIG_NET_SCHED is not set
318
319#
320# Network testing
321#
322# CONFIG_NET_PKTGEN is not set
323# CONFIG_HAMRADIO is not set
324# CONFIG_CAN is not set
325# CONFIG_IRDA is not set
326# CONFIG_BT is not set
327# CONFIG_AF_RXRPC is not set
328
329#
330# Wireless
331#
332# CONFIG_CFG80211 is not set
333# CONFIG_WIRELESS_EXT is not set
334# CONFIG_MAC80211 is not set
335# CONFIG_IEEE80211 is not set
336# CONFIG_RFKILL is not set
337# CONFIG_NET_9P is not set
338
339#
340# Device Drivers
341#
342
343#
344# Generic Driver Options
345#
346CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
347CONFIG_STANDALONE=y
348CONFIG_PREVENT_FIRMWARE_BUILD=y
349CONFIG_FW_LOADER=y
350# CONFIG_DEBUG_DRIVER is not set
351# CONFIG_DEBUG_DEVRES is not set
352# CONFIG_SYS_HYPERVISOR is not set
353CONFIG_CONNECTOR=y
354CONFIG_PROC_EVENTS=y
355CONFIG_MTD=y
356# CONFIG_MTD_DEBUG is not set
357# CONFIG_MTD_CONCAT is not set
358CONFIG_MTD_PARTITIONS=y
359# CONFIG_MTD_REDBOOT_PARTS is not set
360CONFIG_MTD_CMDLINE_PARTS=y
361CONFIG_MTD_OF_PARTS=y
362
363#
364# User Modules And Translation Layers
365#
366CONFIG_MTD_CHAR=y
367CONFIG_MTD_BLKDEVS=m
368CONFIG_MTD_BLOCK=m
369# CONFIG_MTD_BLOCK_RO is not set
370# CONFIG_FTL is not set
371# CONFIG_NFTL is not set
372# CONFIG_INFTL is not set
373# CONFIG_RFD_FTL is not set
374# CONFIG_SSFDC is not set
375# CONFIG_MTD_OOPS is not set
376
377#
378# RAM/ROM/Flash chip drivers
379#
380CONFIG_MTD_CFI=y
381CONFIG_MTD_JEDECPROBE=y
382CONFIG_MTD_GEN_PROBE=y
383# CONFIG_MTD_CFI_ADV_OPTIONS is not set
384CONFIG_MTD_MAP_BANK_WIDTH_1=y
385CONFIG_MTD_MAP_BANK_WIDTH_2=y
386CONFIG_MTD_MAP_BANK_WIDTH_4=y
387# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
388# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
389# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
390CONFIG_MTD_CFI_I1=y
391CONFIG_MTD_CFI_I2=y
392# CONFIG_MTD_CFI_I4 is not set
393# CONFIG_MTD_CFI_I8 is not set
394# CONFIG_MTD_CFI_INTELEXT is not set
395CONFIG_MTD_CFI_AMDSTD=y
396# CONFIG_MTD_CFI_STAA is not set
397CONFIG_MTD_CFI_UTIL=y
398# CONFIG_MTD_RAM is not set
399# CONFIG_MTD_ROM is not set
400# CONFIG_MTD_ABSENT is not set
401
402#
403# Mapping drivers for chip access
404#
405# CONFIG_MTD_COMPLEX_MAPPINGS is not set
406# CONFIG_MTD_PHYSMAP is not set
407CONFIG_MTD_PHYSMAP_OF=y
408# CONFIG_MTD_INTEL_VR_NOR is not set
409# CONFIG_MTD_PLATRAM is not set
410
411#
412# Self-contained MTD device drivers
413#
414# CONFIG_MTD_PMC551 is not set
415# CONFIG_MTD_SLRAM is not set
416# CONFIG_MTD_PHRAM is not set
417# CONFIG_MTD_MTDRAM is not set
418# CONFIG_MTD_BLOCK2MTD is not set
419
420#
421# Disk-On-Chip Device Drivers
422#
423# CONFIG_MTD_DOC2000 is not set
424# CONFIG_MTD_DOC2001 is not set
425# CONFIG_MTD_DOC2001PLUS is not set
426# CONFIG_MTD_NAND is not set
427# CONFIG_MTD_ONENAND is not set
428
429#
430# UBI - Unsorted block images
431#
432# CONFIG_MTD_UBI is not set
433CONFIG_OF_DEVICE=y
434# CONFIG_PARPORT is not set
435CONFIG_BLK_DEV=y
436# CONFIG_BLK_DEV_FD is not set
437# CONFIG_BLK_CPQ_DA is not set
438# CONFIG_BLK_CPQ_CISS_DA is not set
439# CONFIG_BLK_DEV_DAC960 is not set
440# CONFIG_BLK_DEV_UMEM is not set
441# CONFIG_BLK_DEV_COW_COMMON is not set
442# CONFIG_BLK_DEV_LOOP is not set
443# CONFIG_BLK_DEV_NBD is not set
444# CONFIG_BLK_DEV_SX8 is not set
445CONFIG_BLK_DEV_RAM=y
446CONFIG_BLK_DEV_RAM_COUNT=16
447CONFIG_BLK_DEV_RAM_SIZE=35000
448# CONFIG_BLK_DEV_XIP is not set
449# CONFIG_CDROM_PKTCDVD is not set
450# CONFIG_ATA_OVER_ETH is not set
451# CONFIG_XILINX_SYSACE is not set
452CONFIG_MISC_DEVICES=y
453# CONFIG_PHANTOM is not set
454# CONFIG_EEPROM_93CX6 is not set
455# CONFIG_SGI_IOC4 is not set
456# CONFIG_TIFM_CORE is not set
457# CONFIG_ENCLOSURE_SERVICES is not set
458CONFIG_HAVE_IDE=y
459# CONFIG_IDE is not set
460
461#
462# SCSI device support
463#
464# CONFIG_RAID_ATTRS is not set
465# CONFIG_SCSI is not set
466# CONFIG_SCSI_DMA is not set
467# CONFIG_SCSI_NETLINK is not set
468# CONFIG_ATA is not set
469# CONFIG_MD is not set
470# CONFIG_FUSION is not set
471
472#
473# IEEE 1394 (FireWire) support
474#
475# CONFIG_FIREWIRE is not set
476# CONFIG_IEEE1394 is not set
477# CONFIG_I2O is not set
478# CONFIG_MACINTOSH_DRIVERS is not set
479CONFIG_NETDEVICES=y
480# CONFIG_NETDEVICES_MULTIQUEUE is not set
481# CONFIG_DUMMY is not set
482# CONFIG_BONDING is not set
483# CONFIG_MACVLAN is not set
484# CONFIG_EQUALIZER is not set
485# CONFIG_TUN is not set
486# CONFIG_VETH is not set
487# CONFIG_ARCNET is not set
488# CONFIG_PHYLIB is not set
489CONFIG_NET_ETHERNET=y
490# CONFIG_MII is not set
491# CONFIG_HAPPYMEAL is not set
492# CONFIG_SUNGEM is not set
493# CONFIG_CASSINI is not set
494# CONFIG_NET_VENDOR_3COM is not set
495# CONFIG_NET_TULIP is not set
496# CONFIG_HP100 is not set
497CONFIG_IBM_NEW_EMAC=y
498CONFIG_IBM_NEW_EMAC_RXB=128
499CONFIG_IBM_NEW_EMAC_TXB=64
500CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
501CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
502CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
503# CONFIG_IBM_NEW_EMAC_DEBUG is not set
504CONFIG_IBM_NEW_EMAC_ZMII=y
505CONFIG_IBM_NEW_EMAC_RGMII=y
506# CONFIG_IBM_NEW_EMAC_TAH is not set
507CONFIG_IBM_NEW_EMAC_EMAC4=y
508# CONFIG_NET_PCI is not set
509# CONFIG_B44 is not set
510CONFIG_NETDEV_1000=y
511# CONFIG_ACENIC is not set
512# CONFIG_DL2K is not set
513# CONFIG_E1000 is not set
514# CONFIG_E1000E is not set
515# CONFIG_E1000E_ENABLED is not set
516# CONFIG_IP1000 is not set
517# CONFIG_IGB is not set
518# CONFIG_NS83820 is not set
519# CONFIG_HAMACHI is not set
520# CONFIG_YELLOWFIN is not set
521# CONFIG_R8169 is not set
522# CONFIG_SIS190 is not set
523# CONFIG_SKGE is not set
524# CONFIG_SKY2 is not set
525# CONFIG_SK98LIN is not set
526# CONFIG_VIA_VELOCITY is not set
527# CONFIG_TIGON3 is not set
528# CONFIG_BNX2 is not set
529# CONFIG_QLA3XXX is not set
530# CONFIG_ATL1 is not set
531CONFIG_NETDEV_10000=y
532# CONFIG_CHELSIO_T1 is not set
533# CONFIG_CHELSIO_T3 is not set
534# CONFIG_IXGBE is not set
535# CONFIG_IXGB is not set
536# CONFIG_S2IO is not set
537# CONFIG_MYRI10GE is not set
538# CONFIG_NETXEN_NIC is not set
539# CONFIG_NIU is not set
540# CONFIG_MLX4_CORE is not set
541# CONFIG_TEHUTI is not set
542# CONFIG_BNX2X is not set
543# CONFIG_TR is not set
544
545#
546# Wireless LAN
547#
548# CONFIG_WLAN_PRE80211 is not set
549# CONFIG_WLAN_80211 is not set
550# CONFIG_WAN is not set
551# CONFIG_FDDI is not set
552# CONFIG_HIPPI is not set
553# CONFIG_PPP is not set
554# CONFIG_SLIP is not set
555# CONFIG_NETCONSOLE is not set
556# CONFIG_NETPOLL is not set
557# CONFIG_NET_POLL_CONTROLLER is not set
558# CONFIG_ISDN is not set
559# CONFIG_PHONE is not set
560
561#
562# Input device support
563#
564# CONFIG_INPUT is not set
565
566#
567# Hardware I/O ports
568#
569# CONFIG_SERIO is not set
570# CONFIG_GAMEPORT is not set
571
572#
573# Character devices
574#
575# CONFIG_VT is not set
576# CONFIG_SERIAL_NONSTANDARD is not set
577# CONFIG_NOZOMI is not set
578
579#
580# Serial drivers
581#
582CONFIG_SERIAL_8250=y
583CONFIG_SERIAL_8250_CONSOLE=y
584CONFIG_SERIAL_8250_PCI=y
585CONFIG_SERIAL_8250_NR_UARTS=4
586CONFIG_SERIAL_8250_RUNTIME_UARTS=4
587CONFIG_SERIAL_8250_EXTENDED=y
588# CONFIG_SERIAL_8250_MANY_PORTS is not set
589CONFIG_SERIAL_8250_SHARE_IRQ=y
590# CONFIG_SERIAL_8250_DETECT_IRQ is not set
591# CONFIG_SERIAL_8250_RSA is not set
592
593#
594# Non-8250 serial port support
595#
596# CONFIG_SERIAL_UARTLITE is not set
597CONFIG_SERIAL_CORE=y
598CONFIG_SERIAL_CORE_CONSOLE=y
599# CONFIG_SERIAL_JSM is not set
600CONFIG_SERIAL_OF_PLATFORM=y
601CONFIG_UNIX98_PTYS=y
602CONFIG_LEGACY_PTYS=y
603CONFIG_LEGACY_PTY_COUNT=256
604# CONFIG_IPMI_HANDLER is not set
605# CONFIG_HW_RANDOM is not set
606# CONFIG_NVRAM is not set
607# CONFIG_GEN_RTC is not set
608CONFIG_XILINX_HWICAP=m
609# CONFIG_R3964 is not set
610# CONFIG_APPLICOM is not set
611# CONFIG_RAW_DRIVER is not set
612# CONFIG_TCG_TPM is not set
613CONFIG_DEVPORT=y
614# CONFIG_I2C is not set
615
616#
617# SPI support
618#
619# CONFIG_SPI is not set
620# CONFIG_SPI_MASTER is not set
621# CONFIG_W1 is not set
622# CONFIG_POWER_SUPPLY is not set
623# CONFIG_HWMON is not set
624CONFIG_THERMAL=y
625# CONFIG_WATCHDOG is not set
626
627#
628# Sonics Silicon Backplane
629#
630CONFIG_SSB_POSSIBLE=y
631# CONFIG_SSB is not set
632
633#
634# Multifunction device drivers
635#
636# CONFIG_MFD_SM501 is not set
637
638#
639# Multimedia devices
640#
641# CONFIG_VIDEO_DEV is not set
642# CONFIG_DVB_CORE is not set
643# CONFIG_DAB is not set
644
645#
646# Graphics support
647#
648# CONFIG_AGP is not set
649# CONFIG_DRM is not set
650# CONFIG_VGASTATE is not set
651CONFIG_VIDEO_OUTPUT_CONTROL=m
652# CONFIG_FB is not set
653# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
654
655#
656# Display device support
657#
658# CONFIG_DISPLAY_SUPPORT is not set
659
660#
661# Sound
662#
663# CONFIG_SOUND is not set
664CONFIG_USB_SUPPORT=y
665CONFIG_USB_ARCH_HAS_HCD=y
666CONFIG_USB_ARCH_HAS_OHCI=y
667CONFIG_USB_ARCH_HAS_EHCI=y
668# CONFIG_USB is not set
669
670#
671# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
672#
673# CONFIG_USB_GADGET is not set
674# CONFIG_MMC is not set
675# CONFIG_MEMSTICK is not set
676# CONFIG_NEW_LEDS is not set
677# CONFIG_INFINIBAND is not set
678# CONFIG_EDAC is not set
679# CONFIG_RTC_CLASS is not set
680# CONFIG_DMADEVICES is not set
681
682#
683# Userspace I/O
684#
685# CONFIG_UIO is not set
686
687#
688# File systems
689#
690CONFIG_EXT2_FS=y
691# CONFIG_EXT2_FS_XATTR is not set
692# CONFIG_EXT2_FS_XIP is not set
693# CONFIG_EXT3_FS is not set
694# CONFIG_EXT4DEV_FS is not set
695# CONFIG_REISERFS_FS is not set
696# CONFIG_JFS_FS is not set
697# CONFIG_FS_POSIX_ACL is not set
698# CONFIG_XFS_FS is not set
699# CONFIG_GFS2_FS is not set
700# CONFIG_OCFS2_FS is not set
701CONFIG_DNOTIFY=y
702CONFIG_INOTIFY=y
703CONFIG_INOTIFY_USER=y
704# CONFIG_QUOTA is not set
705# CONFIG_AUTOFS_FS is not set
706# CONFIG_AUTOFS4_FS is not set
707# CONFIG_FUSE_FS is not set
708
709#
710# CD-ROM/DVD Filesystems
711#
712# CONFIG_ISO9660_FS is not set
713# CONFIG_UDF_FS is not set
714
715#
716# DOS/FAT/NT Filesystems
717#
718# CONFIG_MSDOS_FS is not set
719# CONFIG_VFAT_FS is not set
720# CONFIG_NTFS_FS is not set
721
722#
723# Pseudo filesystems
724#
725CONFIG_PROC_FS=y
726CONFIG_PROC_KCORE=y
727CONFIG_PROC_SYSCTL=y
728CONFIG_SYSFS=y
729CONFIG_TMPFS=y
730# CONFIG_TMPFS_POSIX_ACL is not set
731# CONFIG_HUGETLB_PAGE is not set
732# CONFIG_CONFIGFS_FS is not set
733
734#
735# Miscellaneous filesystems
736#
737# CONFIG_ADFS_FS is not set
738# CONFIG_AFFS_FS is not set
739# CONFIG_HFS_FS is not set
740# CONFIG_HFSPLUS_FS is not set
741# CONFIG_BEFS_FS is not set
742# CONFIG_BFS_FS is not set
743# CONFIG_EFS_FS is not set
744# CONFIG_JFFS2_FS is not set
745CONFIG_CRAMFS=y
746# CONFIG_VXFS_FS is not set
747# CONFIG_MINIX_FS is not set
748# CONFIG_HPFS_FS is not set
749# CONFIG_QNX4FS_FS is not set
750# CONFIG_ROMFS_FS is not set
751# CONFIG_SYSV_FS is not set
752# CONFIG_UFS_FS is not set
753CONFIG_NETWORK_FILESYSTEMS=y
754CONFIG_NFS_FS=y
755CONFIG_NFS_V3=y
756# CONFIG_NFS_V3_ACL is not set
757# CONFIG_NFS_V4 is not set
758# CONFIG_NFS_DIRECTIO is not set
759# CONFIG_NFSD is not set
760CONFIG_ROOT_NFS=y
761CONFIG_LOCKD=y
762CONFIG_LOCKD_V4=y
763CONFIG_NFS_COMMON=y
764CONFIG_SUNRPC=y
765# CONFIG_SUNRPC_BIND34 is not set
766# CONFIG_RPCSEC_GSS_KRB5 is not set
767# CONFIG_RPCSEC_GSS_SPKM3 is not set
768# CONFIG_SMB_FS is not set
769# CONFIG_CIFS is not set
770# CONFIG_NCP_FS is not set
771# CONFIG_CODA_FS is not set
772# CONFIG_AFS_FS is not set
773
774#
775# Partition Types
776#
777# CONFIG_PARTITION_ADVANCED is not set
778CONFIG_MSDOS_PARTITION=y
779# CONFIG_NLS is not set
780# CONFIG_DLM is not set
781
782#
783# Library routines
784#
785CONFIG_BITREVERSE=y
786# CONFIG_CRC_CCITT is not set
787# CONFIG_CRC16 is not set
788# CONFIG_CRC_ITU_T is not set
789CONFIG_CRC32=y
790# CONFIG_CRC7 is not set
791# CONFIG_LIBCRC32C is not set
792CONFIG_ZLIB_INFLATE=y
793CONFIG_PLIST=y
794CONFIG_HAS_IOMEM=y
795CONFIG_HAS_IOPORT=y
796CONFIG_HAS_DMA=y
797CONFIG_HAVE_LMB=y
798
799#
800# Kernel hacking
801#
802# CONFIG_PRINTK_TIME is not set
803CONFIG_ENABLE_WARN_DEPRECATED=y
804CONFIG_ENABLE_MUST_CHECK=y
805CONFIG_MAGIC_SYSRQ=y
806# CONFIG_UNUSED_SYMBOLS is not set
807CONFIG_DEBUG_FS=y
808# CONFIG_HEADERS_CHECK is not set
809CONFIG_DEBUG_KERNEL=y
810# CONFIG_DEBUG_SHIRQ is not set
811CONFIG_DETECT_SOFTLOCKUP=y
812CONFIG_SCHED_DEBUG=y
813# CONFIG_SCHEDSTATS is not set
814# CONFIG_TIMER_STATS is not set
815# CONFIG_SLUB_DEBUG_ON is not set
816# CONFIG_SLUB_STATS is not set
817# CONFIG_DEBUG_RT_MUTEXES is not set
818# CONFIG_RT_MUTEX_TESTER is not set
819# CONFIG_DEBUG_SPINLOCK is not set
820# CONFIG_DEBUG_MUTEXES is not set
821# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
822# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
823# CONFIG_DEBUG_KOBJECT is not set
824CONFIG_DEBUG_BUGVERBOSE=y
825# CONFIG_DEBUG_INFO is not set
826# CONFIG_DEBUG_VM is not set
827# CONFIG_DEBUG_LIST is not set
828# CONFIG_DEBUG_SG is not set
829# CONFIG_BOOT_PRINTK_DELAY is not set
830# CONFIG_RCU_TORTURE_TEST is not set
831# CONFIG_BACKTRACE_SELF_TEST is not set
832# CONFIG_FAULT_INJECTION is not set
833# CONFIG_SAMPLES is not set
834# CONFIG_DEBUG_STACKOVERFLOW is not set
835# CONFIG_DEBUG_STACK_USAGE is not set
836# CONFIG_DEBUG_PAGEALLOC is not set
837# CONFIG_DEBUGGER is not set
838# CONFIG_VIRQ_DEBUG is not set
839# CONFIG_BDI_SWITCH is not set
840# CONFIG_PPC_EARLY_DEBUG is not set
841
842#
843# Security options
844#
845# CONFIG_KEYS is not set
846# CONFIG_SECURITY is not set
847# CONFIG_SECURITY_FILE_CAPABILITIES is not set
848CONFIG_CRYPTO=y
849CONFIG_CRYPTO_ALGAPI=y
850CONFIG_CRYPTO_BLKCIPHER=y
851# CONFIG_CRYPTO_SEQIV is not set
852CONFIG_CRYPTO_MANAGER=y
853# CONFIG_CRYPTO_HMAC is not set
854# CONFIG_CRYPTO_XCBC is not set
855# CONFIG_CRYPTO_NULL is not set
856# CONFIG_CRYPTO_MD4 is not set
857CONFIG_CRYPTO_MD5=y
858# CONFIG_CRYPTO_SHA1 is not set
859# CONFIG_CRYPTO_SHA256 is not set
860# CONFIG_CRYPTO_SHA512 is not set
861# CONFIG_CRYPTO_WP512 is not set
862# CONFIG_CRYPTO_TGR192 is not set
863# CONFIG_CRYPTO_GF128MUL is not set
864CONFIG_CRYPTO_ECB=y
865CONFIG_CRYPTO_CBC=y
866CONFIG_CRYPTO_PCBC=y
867# CONFIG_CRYPTO_LRW is not set
868# CONFIG_CRYPTO_XTS is not set
869# CONFIG_CRYPTO_CTR is not set
870# CONFIG_CRYPTO_GCM is not set
871# CONFIG_CRYPTO_CCM is not set
872# CONFIG_CRYPTO_CRYPTD is not set
873CONFIG_CRYPTO_DES=y
874# CONFIG_CRYPTO_FCRYPT is not set
875# CONFIG_CRYPTO_BLOWFISH is not set
876# CONFIG_CRYPTO_TWOFISH is not set
877# CONFIG_CRYPTO_SERPENT is not set
878# CONFIG_CRYPTO_AES is not set
879# CONFIG_CRYPTO_CAST5 is not set
880# CONFIG_CRYPTO_CAST6 is not set
881# CONFIG_CRYPTO_TEA is not set
882# CONFIG_CRYPTO_ARC4 is not set
883# CONFIG_CRYPTO_KHAZAD is not set
884# CONFIG_CRYPTO_ANUBIS is not set
885# CONFIG_CRYPTO_SEED is not set
886# CONFIG_CRYPTO_SALSA20 is not set
887# CONFIG_CRYPTO_DEFLATE is not set
888# CONFIG_CRYPTO_MICHAEL_MIC is not set
889# CONFIG_CRYPTO_CRC32C is not set
890# CONFIG_CRYPTO_CAMELLIA is not set
891# CONFIG_CRYPTO_TEST is not set
892# CONFIG_CRYPTO_AUTHENC is not set
893# CONFIG_CRYPTO_LZO is not set
894CONFIG_CRYPTO_HW=y
895# CONFIG_CRYPTO_DEV_HIFN_795X is not set
896# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ppc44x_defconfig b/arch/powerpc/configs/ppc44x_defconfig
index 57bd775ef777..12f9b5a80220 100644
--- a/arch/powerpc/configs/ppc44x_defconfig
+++ b/arch/powerpc/configs/ppc44x_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc2 3# Linux kernel version: 2.6.25-rc6
4# Fri Feb 15 21:57:35 2008 4# Sat Apr 5 09:35:48 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -79,6 +79,7 @@ CONFIG_FAIR_GROUP_SCHED=y
79CONFIG_USER_SCHED=y 79CONFIG_USER_SCHED=y
80# CONFIG_CGROUP_SCHED is not set 80# CONFIG_CGROUP_SCHED is not set
81CONFIG_SYSFS_DEPRECATED=y 81CONFIG_SYSFS_DEPRECATED=y
82CONFIG_SYSFS_DEPRECATED_V2=y
82# CONFIG_RELAY is not set 83# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set 84# CONFIG_NAMESPACES is not set
84CONFIG_BLK_DEV_INITRD=y 85CONFIG_BLK_DEV_INITRD=y
@@ -113,6 +114,7 @@ CONFIG_SLUB=y
113CONFIG_HAVE_OPROFILE=y 114CONFIG_HAVE_OPROFILE=y
114# CONFIG_KPROBES is not set 115# CONFIG_KPROBES is not set
115CONFIG_HAVE_KPROBES=y 116CONFIG_HAVE_KPROBES=y
117CONFIG_HAVE_KRETPROBES=y
116CONFIG_PROC_PAGE_MONITOR=y 118CONFIG_PROC_PAGE_MONITOR=y
117CONFIG_SLABINFO=y 119CONFIG_SLABINFO=y
118CONFIG_RT_MUTEXES=y 120CONFIG_RT_MUTEXES=y
@@ -143,7 +145,6 @@ CONFIG_DEFAULT_AS=y
143# CONFIG_DEFAULT_NOOP is not set 145# CONFIG_DEFAULT_NOOP is not set
144CONFIG_DEFAULT_IOSCHED="anticipatory" 146CONFIG_DEFAULT_IOSCHED="anticipatory"
145CONFIG_CLASSIC_RCU=y 147CONFIG_CLASSIC_RCU=y
146# CONFIG_PREEMPT_RCU is not set
147CONFIG_PPC4xx_PCI_EXPRESS=y 148CONFIG_PPC4xx_PCI_EXPRESS=y
148 149
149# 150#
@@ -161,12 +162,15 @@ CONFIG_TAISHAN=y
161CONFIG_KATMAI=y 162CONFIG_KATMAI=y
162CONFIG_RAINIER=y 163CONFIG_RAINIER=y
163CONFIG_WARP=y 164CONFIG_WARP=y
165CONFIG_CANYONLANDS=y
166CONFIG_YOSEMITE=y
164CONFIG_440EP=y 167CONFIG_440EP=y
165CONFIG_440EPX=y 168CONFIG_440EPX=y
166CONFIG_440GRX=y 169CONFIG_440GRX=y
167CONFIG_440GP=y 170CONFIG_440GP=y
168CONFIG_440GX=y 171CONFIG_440GX=y
169CONFIG_440SPe=y 172CONFIG_440SPe=y
173CONFIG_460EX=y
170CONFIG_IBM440EP_ERR42=y 174CONFIG_IBM440EP_ERR42=y
171# CONFIG_IPIC is not set 175# CONFIG_IPIC is not set
172# CONFIG_MPIC is not set 176# CONFIG_MPIC is not set
@@ -199,7 +203,6 @@ CONFIG_HZ=250
199CONFIG_PREEMPT_NONE=y 203CONFIG_PREEMPT_NONE=y
200# CONFIG_PREEMPT_VOLUNTARY is not set 204# CONFIG_PREEMPT_VOLUNTARY is not set
201# CONFIG_PREEMPT is not set 205# CONFIG_PREEMPT is not set
202# CONFIG_RCU_TRACE is not set
203CONFIG_BINFMT_ELF=y 206CONFIG_BINFMT_ELF=y
204# CONFIG_BINFMT_MISC is not set 207# CONFIG_BINFMT_MISC is not set
205CONFIG_MATH_EMULATION=y 208CONFIG_MATH_EMULATION=y
@@ -232,6 +235,7 @@ CONFIG_ISA_DMA_API=y
232# 235#
233CONFIG_ZONE_DMA=y 236CONFIG_ZONE_DMA=y
234CONFIG_PPC_INDIRECT_PCI=y 237CONFIG_PPC_INDIRECT_PCI=y
238CONFIG_4xx_SOC=y
235CONFIG_PCI=y 239CONFIG_PCI=y
236CONFIG_PCI_DOMAINS=y 240CONFIG_PCI_DOMAINS=y
237CONFIG_PCI_SYSCALL=y 241CONFIG_PCI_SYSCALL=y
@@ -678,6 +682,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y
678# CONFIG_INFINIBAND is not set 682# CONFIG_INFINIBAND is not set
679# CONFIG_EDAC is not set 683# CONFIG_EDAC is not set
680# CONFIG_RTC_CLASS is not set 684# CONFIG_RTC_CLASS is not set
685# CONFIG_DMADEVICES is not set
681 686
682# 687#
683# Userspace I/O 688# Userspace I/O
@@ -805,6 +810,7 @@ CONFIG_PLIST=y
805CONFIG_HAS_IOMEM=y 810CONFIG_HAS_IOMEM=y
806CONFIG_HAS_IOPORT=y 811CONFIG_HAS_IOPORT=y
807CONFIG_HAS_DMA=y 812CONFIG_HAS_DMA=y
813CONFIG_HAVE_LMB=y
808 814
809# 815#
810# Kernel hacking 816# Kernel hacking
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
index 880ab7ad10c1..970282b1a004 100644
--- a/arch/powerpc/configs/ppc64_defconfig
+++ b/arch/powerpc/configs/ppc64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 11:06:28 2008 4# Thu Mar 27 13:56:24 2008
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7 7
@@ -84,8 +84,6 @@ CONFIG_CGROUPS=y
84# CONFIG_CGROUP_NS is not set 84# CONFIG_CGROUP_NS is not set
85CONFIG_CPUSETS=y 85CONFIG_CPUSETS=y
86# CONFIG_GROUP_SCHED is not set 86# CONFIG_GROUP_SCHED is not set
87# CONFIG_USER_SCHED is not set
88# CONFIG_CGROUP_SCHED is not set
89# CONFIG_CGROUP_CPUACCT is not set 87# CONFIG_CGROUP_CPUACCT is not set
90# CONFIG_RESOURCE_COUNTERS is not set 88# CONFIG_RESOURCE_COUNTERS is not set
91CONFIG_SYSFS_DEPRECATED=y 89CONFIG_SYSFS_DEPRECATED=y
@@ -289,6 +287,7 @@ CONFIG_ARCH_HAS_WALK_MEMORY=y
289CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y 287CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
290CONFIG_KEXEC=y 288CONFIG_KEXEC=y
291# CONFIG_CRASH_DUMP is not set 289# CONFIG_CRASH_DUMP is not set
290# CONFIG_PHYP_DUMP is not set
292CONFIG_IRQ_ALL_CPUS=y 291CONFIG_IRQ_ALL_CPUS=y
293# CONFIG_NUMA is not set 292# CONFIG_NUMA is not set
294CONFIG_ARCH_SELECT_MEMORY_MODEL=y 293CONFIG_ARCH_SELECT_MEMORY_MODEL=y
@@ -335,7 +334,7 @@ CONFIG_PCI_SYSCALL=y
335# CONFIG_PCIEPORTBUS is not set 334# CONFIG_PCIEPORTBUS is not set
336CONFIG_ARCH_SUPPORTS_MSI=y 335CONFIG_ARCH_SUPPORTS_MSI=y
337CONFIG_PCI_MSI=y 336CONFIG_PCI_MSI=y
338CONFIG_PCI_LEGACY=y 337# CONFIG_PCI_LEGACY is not set
339# CONFIG_PCI_DEBUG is not set 338# CONFIG_PCI_DEBUG is not set
340CONFIG_PCCARD=y 339CONFIG_PCCARD=y
341# CONFIG_PCMCIA_DEBUG is not set 340# CONFIG_PCMCIA_DEBUG is not set
@@ -1881,6 +1880,7 @@ CONFIG_PLIST=y
1881CONFIG_HAS_IOMEM=y 1880CONFIG_HAS_IOMEM=y
1882CONFIG_HAS_IOPORT=y 1881CONFIG_HAS_IOPORT=y
1883CONFIG_HAS_DMA=y 1882CONFIG_HAS_DMA=y
1883CONFIG_HAVE_LMB=y
1884 1884
1885# 1885#
1886# Kernel hacking 1886# Kernel hacking
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index 755aca72b522..3e2593c60b12 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6 3# Linux kernel version: 2.6.25-rc6
4# Thu Mar 20 11:08:01 2008 4# Thu Mar 27 13:56:28 2008
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7 7
@@ -83,8 +83,6 @@ CONFIG_CGROUPS=y
83CONFIG_CGROUP_NS=y 83CONFIG_CGROUP_NS=y
84CONFIG_CPUSETS=y 84CONFIG_CPUSETS=y
85# CONFIG_GROUP_SCHED is not set 85# CONFIG_GROUP_SCHED is not set
86# CONFIG_USER_SCHED is not set
87# CONFIG_CGROUP_SCHED is not set
88CONFIG_CGROUP_CPUACCT=y 86CONFIG_CGROUP_CPUACCT=y
89# CONFIG_RESOURCE_COUNTERS is not set 87# CONFIG_RESOURCE_COUNTERS is not set
90CONFIG_SYSFS_DEPRECATED=y 88CONFIG_SYSFS_DEPRECATED=y
@@ -237,6 +235,7 @@ CONFIG_ARCH_HAS_WALK_MEMORY=y
237CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y 235CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
238CONFIG_KEXEC=y 236CONFIG_KEXEC=y
239# CONFIG_CRASH_DUMP is not set 237# CONFIG_CRASH_DUMP is not set
238# CONFIG_PHYP_DUMP is not set
240CONFIG_IRQ_ALL_CPUS=y 239CONFIG_IRQ_ALL_CPUS=y
241CONFIG_NUMA=y 240CONFIG_NUMA=y
242CONFIG_NODES_SHIFT=4 241CONFIG_NODES_SHIFT=4
@@ -283,7 +282,7 @@ CONFIG_PCI_SYSCALL=y
283# CONFIG_PCIEPORTBUS is not set 282# CONFIG_PCIEPORTBUS is not set
284CONFIG_ARCH_SUPPORTS_MSI=y 283CONFIG_ARCH_SUPPORTS_MSI=y
285CONFIG_PCI_MSI=y 284CONFIG_PCI_MSI=y
286CONFIG_PCI_LEGACY=y 285# CONFIG_PCI_LEGACY is not set
287# CONFIG_PCI_DEBUG is not set 286# CONFIG_PCI_DEBUG is not set
288# CONFIG_PCCARD is not set 287# CONFIG_PCCARD is not set
289CONFIG_HOTPLUG_PCI=m 288CONFIG_HOTPLUG_PCI=m
@@ -1519,6 +1518,7 @@ CONFIG_PLIST=y
1519CONFIG_HAS_IOMEM=y 1518CONFIG_HAS_IOMEM=y
1520CONFIG_HAS_IOPORT=y 1519CONFIG_HAS_IOPORT=y
1521CONFIG_HAS_DMA=y 1520CONFIG_HAS_DMA=y
1521CONFIG_HAVE_LMB=y
1522 1522
1523# 1523#
1524# Kernel hacking 1524# Kernel hacking
diff --git a/arch/powerpc/configs/sbc8641d_defconfig b/arch/powerpc/configs/sbc8641d_defconfig
new file mode 100644
index 000000000000..3180125aa6c4
--- /dev/null
+++ b/arch/powerpc/configs/sbc8641d_defconfig
@@ -0,0 +1,1342 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6
4# Thu Apr 10 18:03:25 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11CONFIG_6xx=y
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18CONFIG_ALTIVEC=y
19CONFIG_PPC_STD_MMU=y
20CONFIG_PPC_STD_MMU_32=y
21# CONFIG_PPC_MM_SLICES is not set
22CONFIG_SMP=y
23CONFIG_NR_CPUS=2
24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
26CONFIG_PPC_MERGE=y
27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
34CONFIG_IRQ_PER_CPU=y
35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
36CONFIG_GENERIC_LOCKBREAK=y
37CONFIG_ARCH_HAS_ILOG2_U32=y
38CONFIG_GENERIC_HWEIGHT=y
39CONFIG_GENERIC_CALIBRATE_DELAY=y
40CONFIG_GENERIC_FIND_NEXT_BIT=y
41# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
42CONFIG_PPC=y
43CONFIG_EARLY_PRINTK=y
44CONFIG_GENERIC_NVRAM=y
45CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
46CONFIG_ARCH_MAY_HAVE_PC_FDC=y
47CONFIG_PPC_OF=y
48CONFIG_OF=y
49CONFIG_PPC_UDBG_16550=y
50CONFIG_GENERIC_TBSYNC=y
51CONFIG_AUDIT_ARCH=y
52CONFIG_GENERIC_BUG=y
53CONFIG_DEFAULT_UIMAGE=y
54# CONFIG_PPC_DCR_NATIVE is not set
55# CONFIG_PPC_DCR_MMIO is not set
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
57
58#
59# General setup
60#
61CONFIG_EXPERIMENTAL=y
62CONFIG_LOCK_KERNEL=y
63CONFIG_INIT_ENV_ARG_LIMIT=32
64CONFIG_LOCALVERSION=""
65CONFIG_LOCALVERSION_AUTO=y
66CONFIG_SWAP=y
67CONFIG_SYSVIPC=y
68CONFIG_SYSVIPC_SYSCTL=y
69CONFIG_POSIX_MQUEUE=y
70CONFIG_BSD_PROCESS_ACCT=y
71CONFIG_BSD_PROCESS_ACCT_V3=y
72# CONFIG_TASKSTATS is not set
73# CONFIG_AUDIT is not set
74CONFIG_IKCONFIG=y
75CONFIG_IKCONFIG_PROC=y
76CONFIG_LOG_BUF_SHIFT=14
77# CONFIG_CGROUPS is not set
78CONFIG_GROUP_SCHED=y
79CONFIG_FAIR_GROUP_SCHED=y
80# CONFIG_RT_GROUP_SCHED is not set
81CONFIG_USER_SCHED=y
82# CONFIG_CGROUP_SCHED is not set
83CONFIG_SYSFS_DEPRECATED=y
84CONFIG_SYSFS_DEPRECATED_V2=y
85CONFIG_RELAY=y
86# CONFIG_NAMESPACES is not set
87CONFIG_BLK_DEV_INITRD=y
88CONFIG_INITRAMFS_SOURCE=""
89# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
90CONFIG_SYSCTL=y
91CONFIG_EMBEDDED=y
92CONFIG_SYSCTL_SYSCALL=y
93CONFIG_KALLSYMS=y
94# CONFIG_KALLSYMS_ALL is not set
95# CONFIG_KALLSYMS_EXTRA_PASS is not set
96CONFIG_HOTPLUG=y
97CONFIG_PRINTK=y
98CONFIG_BUG=y
99CONFIG_ELF_CORE=y
100CONFIG_COMPAT_BRK=y
101CONFIG_BASE_FULL=y
102CONFIG_FUTEX=y
103CONFIG_ANON_INODES=y
104CONFIG_EPOLL=y
105CONFIG_SIGNALFD=y
106CONFIG_TIMERFD=y
107CONFIG_EVENTFD=y
108CONFIG_SHMEM=y
109CONFIG_VM_EVENT_COUNTERS=y
110CONFIG_SLAB=y
111# CONFIG_SLUB is not set
112# CONFIG_SLOB is not set
113# CONFIG_PROFILING is not set
114# CONFIG_MARKERS is not set
115CONFIG_HAVE_OPROFILE=y
116# CONFIG_KPROBES is not set
117CONFIG_HAVE_KPROBES=y
118CONFIG_HAVE_KRETPROBES=y
119CONFIG_PROC_PAGE_MONITOR=y
120CONFIG_SLABINFO=y
121CONFIG_RT_MUTEXES=y
122# CONFIG_TINY_SHMEM is not set
123CONFIG_BASE_SMALL=0
124CONFIG_MODULES=y
125CONFIG_MODULE_UNLOAD=y
126# CONFIG_MODULE_FORCE_UNLOAD is not set
127# CONFIG_MODVERSIONS is not set
128# CONFIG_MODULE_SRCVERSION_ALL is not set
129CONFIG_KMOD=y
130CONFIG_STOP_MACHINE=y
131CONFIG_BLOCK=y
132# CONFIG_LBD is not set
133# CONFIG_BLK_DEV_IO_TRACE is not set
134# CONFIG_LSF is not set
135# CONFIG_BLK_DEV_BSG is not set
136
137#
138# IO Schedulers
139#
140CONFIG_IOSCHED_NOOP=y
141CONFIG_IOSCHED_AS=y
142CONFIG_IOSCHED_DEADLINE=y
143CONFIG_IOSCHED_CFQ=y
144# CONFIG_DEFAULT_AS is not set
145# CONFIG_DEFAULT_DEADLINE is not set
146CONFIG_DEFAULT_CFQ=y
147# CONFIG_DEFAULT_NOOP is not set
148CONFIG_DEFAULT_IOSCHED="cfq"
149CONFIG_CLASSIC_RCU=y
150
151#
152# Platform support
153#
154# CONFIG_PPC_MULTIPLATFORM is not set
155# CONFIG_PPC_82xx is not set
156# CONFIG_PPC_83xx is not set
157CONFIG_PPC_86xx=y
158# CONFIG_PPC_MPC512x is not set
159# CONFIG_PPC_MPC5121 is not set
160# CONFIG_PPC_CELL is not set
161# CONFIG_PPC_CELL_NATIVE is not set
162# CONFIG_PQ2ADS is not set
163# CONFIG_MPC8641_HPCN is not set
164CONFIG_SBC8641D=y
165# CONFIG_MPC8610_HPCD is not set
166CONFIG_MPC8641=y
167# CONFIG_IPIC is not set
168CONFIG_MPIC=y
169# CONFIG_MPIC_WEIRD is not set
170# CONFIG_PPC_I8259 is not set
171# CONFIG_PPC_RTAS is not set
172# CONFIG_MMIO_NVRAM is not set
173# CONFIG_PPC_MPC106 is not set
174# CONFIG_PPC_970_NAP is not set
175# CONFIG_PPC_INDIRECT_IO is not set
176# CONFIG_GENERIC_IOMAP is not set
177# CONFIG_CPU_FREQ is not set
178# CONFIG_FSL_ULI1575 is not set
179
180#
181# Kernel options
182#
183# CONFIG_HIGHMEM is not set
184CONFIG_TICK_ONESHOT=y
185# CONFIG_NO_HZ is not set
186CONFIG_HIGH_RES_TIMERS=y
187CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
188# CONFIG_HZ_100 is not set
189CONFIG_HZ_250=y
190# CONFIG_HZ_300 is not set
191# CONFIG_HZ_1000 is not set
192CONFIG_HZ=250
193# CONFIG_SCHED_HRTICK is not set
194# CONFIG_PREEMPT_NONE is not set
195# CONFIG_PREEMPT_VOLUNTARY is not set
196CONFIG_PREEMPT=y
197# CONFIG_PREEMPT_RCU is not set
198CONFIG_BINFMT_ELF=y
199CONFIG_BINFMT_MISC=m
200CONFIG_FORCE_MAX_ZONEORDER=11
201# CONFIG_IOMMU_HELPER is not set
202CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
203CONFIG_ARCH_HAS_WALK_MEMORY=y
204CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
205CONFIG_IRQ_ALL_CPUS=y
206CONFIG_ARCH_FLATMEM_ENABLE=y
207CONFIG_ARCH_POPULATES_NODE_MAP=y
208CONFIG_SELECT_MEMORY_MODEL=y
209CONFIG_FLATMEM_MANUAL=y
210# CONFIG_DISCONTIGMEM_MANUAL is not set
211# CONFIG_SPARSEMEM_MANUAL is not set
212CONFIG_FLATMEM=y
213CONFIG_FLAT_NODE_MEM_MAP=y
214# CONFIG_SPARSEMEM_STATIC is not set
215# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
216CONFIG_SPLIT_PTLOCK_CPUS=4
217# CONFIG_RESOURCES_64BIT is not set
218CONFIG_ZONE_DMA_FLAG=1
219CONFIG_BOUNCE=y
220CONFIG_VIRT_TO_BUS=y
221# CONFIG_PROC_DEVICETREE is not set
222# CONFIG_CMDLINE_BOOL is not set
223# CONFIG_PM is not set
224CONFIG_SECCOMP=y
225CONFIG_ISA_DMA_API=y
226
227#
228# Bus options
229#
230CONFIG_ZONE_DMA=y
231CONFIG_GENERIC_ISA_DMA=y
232CONFIG_PPC_INDIRECT_PCI=y
233CONFIG_FSL_SOC=y
234CONFIG_FSL_PCI=y
235CONFIG_PCI=y
236CONFIG_PCI_DOMAINS=y
237CONFIG_PCI_SYSCALL=y
238CONFIG_PCIEPORTBUS=y
239CONFIG_PCIEAER=y
240CONFIG_ARCH_SUPPORTS_MSI=y
241# CONFIG_PCI_MSI is not set
242CONFIG_PCI_LEGACY=y
243# CONFIG_PCI_DEBUG is not set
244# CONFIG_PCCARD is not set
245# CONFIG_HOTPLUG_PCI is not set
246
247#
248# Advanced setup
249#
250# CONFIG_ADVANCED_OPTIONS is not set
251
252#
253# Default settings for advanced configuration options are used
254#
255CONFIG_HIGHMEM_START=0xfe000000
256CONFIG_LOWMEM_SIZE=0x30000000
257CONFIG_KERNEL_START=0xc0000000
258CONFIG_TASK_SIZE=0xc0000000
259CONFIG_BOOT_LOAD=0x00800000
260
261#
262# Networking
263#
264CONFIG_NET=y
265
266#
267# Networking options
268#
269CONFIG_PACKET=y
270CONFIG_PACKET_MMAP=y
271CONFIG_UNIX=y
272CONFIG_XFRM=y
273CONFIG_XFRM_USER=m
274# CONFIG_XFRM_SUB_POLICY is not set
275# CONFIG_XFRM_MIGRATE is not set
276# CONFIG_XFRM_STATISTICS is not set
277CONFIG_NET_KEY=m
278# CONFIG_NET_KEY_MIGRATE is not set
279CONFIG_INET=y
280CONFIG_IP_MULTICAST=y
281CONFIG_IP_ADVANCED_ROUTER=y
282CONFIG_ASK_IP_FIB_HASH=y
283# CONFIG_IP_FIB_TRIE is not set
284CONFIG_IP_FIB_HASH=y
285CONFIG_IP_MULTIPLE_TABLES=y
286CONFIG_IP_ROUTE_MULTIPATH=y
287CONFIG_IP_ROUTE_VERBOSE=y
288CONFIG_IP_PNP=y
289CONFIG_IP_PNP_DHCP=y
290CONFIG_IP_PNP_BOOTP=y
291CONFIG_IP_PNP_RARP=y
292CONFIG_NET_IPIP=m
293CONFIG_NET_IPGRE=m
294CONFIG_NET_IPGRE_BROADCAST=y
295CONFIG_IP_MROUTE=y
296CONFIG_IP_PIMSM_V1=y
297CONFIG_IP_PIMSM_V2=y
298# CONFIG_ARPD is not set
299CONFIG_SYN_COOKIES=y
300CONFIG_INET_AH=m
301CONFIG_INET_ESP=m
302CONFIG_INET_IPCOMP=m
303CONFIG_INET_XFRM_TUNNEL=m
304CONFIG_INET_TUNNEL=m
305CONFIG_INET_XFRM_MODE_TRANSPORT=y
306CONFIG_INET_XFRM_MODE_TUNNEL=y
307CONFIG_INET_XFRM_MODE_BEET=y
308# CONFIG_INET_LRO is not set
309CONFIG_INET_DIAG=y
310CONFIG_INET_TCP_DIAG=y
311# CONFIG_TCP_CONG_ADVANCED is not set
312CONFIG_TCP_CONG_CUBIC=y
313CONFIG_DEFAULT_TCP_CONG="cubic"
314# CONFIG_TCP_MD5SIG is not set
315# CONFIG_IP_VS is not set
316CONFIG_IPV6=m
317# CONFIG_IPV6_PRIVACY is not set
318# CONFIG_IPV6_ROUTER_PREF is not set
319# CONFIG_IPV6_OPTIMISTIC_DAD is not set
320CONFIG_INET6_AH=m
321CONFIG_INET6_ESP=m
322CONFIG_INET6_IPCOMP=m
323# CONFIG_IPV6_MIP6 is not set
324CONFIG_INET6_XFRM_TUNNEL=m
325CONFIG_INET6_TUNNEL=m
326CONFIG_INET6_XFRM_MODE_TRANSPORT=m
327CONFIG_INET6_XFRM_MODE_TUNNEL=m
328CONFIG_INET6_XFRM_MODE_BEET=m
329# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
330CONFIG_IPV6_SIT=m
331CONFIG_IPV6_TUNNEL=m
332# CONFIG_IPV6_MULTIPLE_TABLES is not set
333# CONFIG_NETLABEL is not set
334# CONFIG_NETWORK_SECMARK is not set
335CONFIG_NETFILTER=y
336# CONFIG_NETFILTER_DEBUG is not set
337CONFIG_NETFILTER_ADVANCED=y
338CONFIG_BRIDGE_NETFILTER=y
339
340#
341# Core Netfilter Configuration
342#
343# CONFIG_NETFILTER_NETLINK_QUEUE is not set
344# CONFIG_NETFILTER_NETLINK_LOG is not set
345# CONFIG_NF_CONNTRACK is not set
346CONFIG_NETFILTER_XTABLES=m
347# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
348# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
349# CONFIG_NETFILTER_XT_TARGET_MARK is not set
350# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
351# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
352# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
353# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
354# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
355# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
356# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
357# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
358# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
359# CONFIG_NETFILTER_XT_MATCH_ESP is not set
360# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
361# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
362# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
363# CONFIG_NETFILTER_XT_MATCH_MAC is not set
364# CONFIG_NETFILTER_XT_MATCH_MARK is not set
365# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
366# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
367# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
368# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
369# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
370# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
371# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
372# CONFIG_NETFILTER_XT_MATCH_REALM is not set
373# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
374# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
375# CONFIG_NETFILTER_XT_MATCH_STRING is not set
376# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
377# CONFIG_NETFILTER_XT_MATCH_TIME is not set
378# CONFIG_NETFILTER_XT_MATCH_U32 is not set
379# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
380
381#
382# IP: Netfilter Configuration
383#
384CONFIG_IP_NF_QUEUE=m
385CONFIG_IP_NF_IPTABLES=m
386CONFIG_IP_NF_MATCH_RECENT=m
387CONFIG_IP_NF_MATCH_ECN=m
388# CONFIG_IP_NF_MATCH_AH is not set
389CONFIG_IP_NF_MATCH_TTL=m
390CONFIG_IP_NF_MATCH_ADDRTYPE=m
391CONFIG_IP_NF_FILTER=m
392CONFIG_IP_NF_TARGET_REJECT=m
393CONFIG_IP_NF_TARGET_LOG=m
394CONFIG_IP_NF_TARGET_ULOG=m
395CONFIG_IP_NF_MANGLE=m
396CONFIG_IP_NF_TARGET_ECN=m
397# CONFIG_IP_NF_TARGET_TTL is not set
398CONFIG_IP_NF_RAW=m
399CONFIG_IP_NF_ARPTABLES=m
400CONFIG_IP_NF_ARPFILTER=m
401CONFIG_IP_NF_ARP_MANGLE=m
402
403#
404# IPv6: Netfilter Configuration
405#
406CONFIG_IP6_NF_QUEUE=m
407CONFIG_IP6_NF_IPTABLES=m
408CONFIG_IP6_NF_MATCH_RT=m
409CONFIG_IP6_NF_MATCH_OPTS=m
410CONFIG_IP6_NF_MATCH_FRAG=m
411CONFIG_IP6_NF_MATCH_HL=m
412CONFIG_IP6_NF_MATCH_IPV6HEADER=m
413# CONFIG_IP6_NF_MATCH_AH is not set
414# CONFIG_IP6_NF_MATCH_MH is not set
415CONFIG_IP6_NF_MATCH_EUI64=m
416CONFIG_IP6_NF_FILTER=m
417CONFIG_IP6_NF_TARGET_LOG=m
418# CONFIG_IP6_NF_TARGET_REJECT is not set
419CONFIG_IP6_NF_MANGLE=m
420# CONFIG_IP6_NF_TARGET_HL is not set
421CONFIG_IP6_NF_RAW=m
422
423#
424# Bridge: Netfilter Configuration
425#
426# CONFIG_BRIDGE_NF_EBTABLES is not set
427# CONFIG_IP_DCCP is not set
428CONFIG_IP_SCTP=m
429# CONFIG_SCTP_DBG_MSG is not set
430# CONFIG_SCTP_DBG_OBJCNT is not set
431# CONFIG_SCTP_HMAC_NONE is not set
432# CONFIG_SCTP_HMAC_SHA1 is not set
433CONFIG_SCTP_HMAC_MD5=y
434CONFIG_TIPC=m
435# CONFIG_TIPC_ADVANCED is not set
436# CONFIG_TIPC_DEBUG is not set
437CONFIG_ATM=m
438CONFIG_ATM_CLIP=m
439# CONFIG_ATM_CLIP_NO_ICMP is not set
440CONFIG_ATM_LANE=m
441CONFIG_ATM_MPOA=m
442CONFIG_ATM_BR2684=m
443# CONFIG_ATM_BR2684_IPFILTER is not set
444CONFIG_BRIDGE=m
445CONFIG_VLAN_8021Q=m
446# CONFIG_DECNET is not set
447CONFIG_LLC=m
448# CONFIG_LLC2 is not set
449# CONFIG_IPX is not set
450# CONFIG_ATALK is not set
451# CONFIG_X25 is not set
452# CONFIG_LAPB is not set
453# CONFIG_ECONET is not set
454CONFIG_WAN_ROUTER=m
455CONFIG_NET_SCHED=y
456
457#
458# Queueing/Scheduling
459#
460CONFIG_NET_SCH_CBQ=m
461CONFIG_NET_SCH_HTB=m
462CONFIG_NET_SCH_HFSC=m
463CONFIG_NET_SCH_ATM=m
464CONFIG_NET_SCH_PRIO=m
465# CONFIG_NET_SCH_RR is not set
466CONFIG_NET_SCH_RED=m
467CONFIG_NET_SCH_SFQ=m
468CONFIG_NET_SCH_TEQL=m
469CONFIG_NET_SCH_TBF=m
470CONFIG_NET_SCH_GRED=m
471CONFIG_NET_SCH_DSMARK=m
472CONFIG_NET_SCH_NETEM=m
473
474#
475# Classification
476#
477CONFIG_NET_CLS=y
478# CONFIG_NET_CLS_BASIC is not set
479CONFIG_NET_CLS_TCINDEX=m
480CONFIG_NET_CLS_ROUTE4=m
481CONFIG_NET_CLS_ROUTE=y
482CONFIG_NET_CLS_FW=m
483CONFIG_NET_CLS_U32=m
484# CONFIG_CLS_U32_PERF is not set
485# CONFIG_CLS_U32_MARK is not set
486CONFIG_NET_CLS_RSVP=m
487CONFIG_NET_CLS_RSVP6=m
488# CONFIG_NET_CLS_FLOW is not set
489# CONFIG_NET_EMATCH is not set
490# CONFIG_NET_CLS_ACT is not set
491# CONFIG_NET_CLS_IND is not set
492CONFIG_NET_SCH_FIFO=y
493
494#
495# Network testing
496#
497CONFIG_NET_PKTGEN=m
498# CONFIG_HAMRADIO is not set
499# CONFIG_CAN is not set
500# CONFIG_IRDA is not set
501# CONFIG_BT is not set
502# CONFIG_AF_RXRPC is not set
503CONFIG_FIB_RULES=y
504
505#
506# Wireless
507#
508# CONFIG_CFG80211 is not set
509# CONFIG_WIRELESS_EXT is not set
510# CONFIG_MAC80211 is not set
511# CONFIG_IEEE80211 is not set
512# CONFIG_RFKILL is not set
513# CONFIG_NET_9P is not set
514
515#
516# Device Drivers
517#
518
519#
520# Generic Driver Options
521#
522CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
523CONFIG_STANDALONE=y
524CONFIG_PREVENT_FIRMWARE_BUILD=y
525# CONFIG_FW_LOADER is not set
526# CONFIG_DEBUG_DRIVER is not set
527# CONFIG_DEBUG_DEVRES is not set
528# CONFIG_SYS_HYPERVISOR is not set
529# CONFIG_CONNECTOR is not set
530CONFIG_MTD=y
531# CONFIG_MTD_DEBUG is not set
532CONFIG_MTD_CONCAT=y
533CONFIG_MTD_PARTITIONS=y
534# CONFIG_MTD_REDBOOT_PARTS is not set
535# CONFIG_MTD_CMDLINE_PARTS is not set
536# CONFIG_MTD_OF_PARTS is not set
537
538#
539# User Modules And Translation Layers
540#
541CONFIG_MTD_CHAR=y
542CONFIG_MTD_BLKDEVS=y
543CONFIG_MTD_BLOCK=y
544# CONFIG_FTL is not set
545# CONFIG_NFTL is not set
546# CONFIG_INFTL is not set
547# CONFIG_RFD_FTL is not set
548# CONFIG_SSFDC is not set
549# CONFIG_MTD_OOPS is not set
550
551#
552# RAM/ROM/Flash chip drivers
553#
554CONFIG_MTD_CFI=y
555# CONFIG_MTD_JEDECPROBE is not set
556CONFIG_MTD_GEN_PROBE=y
557CONFIG_MTD_CFI_ADV_OPTIONS=y
558# CONFIG_MTD_CFI_NOSWAP is not set
559# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
560CONFIG_MTD_CFI_LE_BYTE_SWAP=y
561# CONFIG_MTD_CFI_GEOMETRY is not set
562CONFIG_MTD_MAP_BANK_WIDTH_1=y
563CONFIG_MTD_MAP_BANK_WIDTH_2=y
564CONFIG_MTD_MAP_BANK_WIDTH_4=y
565# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
566# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
567# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
568CONFIG_MTD_CFI_I1=y
569CONFIG_MTD_CFI_I2=y
570# CONFIG_MTD_CFI_I4 is not set
571# CONFIG_MTD_CFI_I8 is not set
572# CONFIG_MTD_OTP is not set
573CONFIG_MTD_CFI_INTELEXT=y
574# CONFIG_MTD_CFI_AMDSTD is not set
575# CONFIG_MTD_CFI_STAA is not set
576CONFIG_MTD_CFI_UTIL=y
577# CONFIG_MTD_RAM is not set
578# CONFIG_MTD_ROM is not set
579# CONFIG_MTD_ABSENT is not set
580
581#
582# Mapping drivers for chip access
583#
584# CONFIG_MTD_COMPLEX_MAPPINGS is not set
585# CONFIG_MTD_PHYSMAP is not set
586CONFIG_MTD_PHYSMAP_OF=y
587# CONFIG_MTD_INTEL_VR_NOR is not set
588# CONFIG_MTD_PLATRAM is not set
589
590#
591# Self-contained MTD device drivers
592#
593# CONFIG_MTD_PMC551 is not set
594# CONFIG_MTD_SLRAM is not set
595# CONFIG_MTD_PHRAM is not set
596# CONFIG_MTD_MTDRAM is not set
597# CONFIG_MTD_BLOCK2MTD is not set
598
599#
600# Disk-On-Chip Device Drivers
601#
602# CONFIG_MTD_DOC2000 is not set
603# CONFIG_MTD_DOC2001 is not set
604# CONFIG_MTD_DOC2001PLUS is not set
605# CONFIG_MTD_NAND is not set
606# CONFIG_MTD_ONENAND is not set
607
608#
609# UBI - Unsorted block images
610#
611# CONFIG_MTD_UBI is not set
612CONFIG_OF_DEVICE=y
613# CONFIG_PARPORT is not set
614CONFIG_BLK_DEV=y
615# CONFIG_BLK_DEV_FD is not set
616# CONFIG_BLK_CPQ_DA is not set
617# CONFIG_BLK_CPQ_CISS_DA is not set
618# CONFIG_BLK_DEV_DAC960 is not set
619# CONFIG_BLK_DEV_UMEM is not set
620# CONFIG_BLK_DEV_COW_COMMON is not set
621CONFIG_BLK_DEV_LOOP=m
622CONFIG_BLK_DEV_CRYPTOLOOP=m
623CONFIG_BLK_DEV_NBD=m
624# CONFIG_BLK_DEV_SX8 is not set
625CONFIG_BLK_DEV_RAM=y
626CONFIG_BLK_DEV_RAM_COUNT=16
627CONFIG_BLK_DEV_RAM_SIZE=4096
628# CONFIG_BLK_DEV_XIP is not set
629# CONFIG_CDROM_PKTCDVD is not set
630# CONFIG_ATA_OVER_ETH is not set
631CONFIG_MISC_DEVICES=y
632# CONFIG_PHANTOM is not set
633# CONFIG_EEPROM_93CX6 is not set
634# CONFIG_SGI_IOC4 is not set
635# CONFIG_TIFM_CORE is not set
636# CONFIG_ENCLOSURE_SERVICES is not set
637CONFIG_HAVE_IDE=y
638# CONFIG_IDE is not set
639
640#
641# SCSI device support
642#
643# CONFIG_RAID_ATTRS is not set
644# CONFIG_SCSI is not set
645# CONFIG_SCSI_DMA is not set
646# CONFIG_SCSI_NETLINK is not set
647# CONFIG_ATA is not set
648CONFIG_MD=y
649CONFIG_BLK_DEV_MD=y
650CONFIG_MD_LINEAR=y
651CONFIG_MD_RAID0=y
652CONFIG_MD_RAID1=y
653CONFIG_MD_RAID10=y
654# CONFIG_MD_RAID456 is not set
655CONFIG_MD_MULTIPATH=y
656CONFIG_MD_FAULTY=y
657CONFIG_BLK_DEV_DM=y
658# CONFIG_DM_DEBUG is not set
659CONFIG_DM_CRYPT=y
660CONFIG_DM_SNAPSHOT=y
661CONFIG_DM_MIRROR=y
662CONFIG_DM_ZERO=y
663# CONFIG_DM_MULTIPATH is not set
664# CONFIG_DM_DELAY is not set
665# CONFIG_DM_UEVENT is not set
666# CONFIG_FUSION is not set
667
668#
669# IEEE 1394 (FireWire) support
670#
671# CONFIG_FIREWIRE is not set
672# CONFIG_IEEE1394 is not set
673# CONFIG_I2O is not set
674# CONFIG_MACINTOSH_DRIVERS is not set
675CONFIG_NETDEVICES=y
676# CONFIG_NETDEVICES_MULTIQUEUE is not set
677CONFIG_DUMMY=m
678CONFIG_BONDING=m
679# CONFIG_MACVLAN is not set
680# CONFIG_EQUALIZER is not set
681CONFIG_TUN=m
682# CONFIG_VETH is not set
683# CONFIG_ARCNET is not set
684CONFIG_PHYLIB=y
685
686#
687# MII PHY device drivers
688#
689# CONFIG_MARVELL_PHY is not set
690# CONFIG_DAVICOM_PHY is not set
691# CONFIG_QSEMI_PHY is not set
692# CONFIG_LXT_PHY is not set
693# CONFIG_CICADA_PHY is not set
694# CONFIG_VITESSE_PHY is not set
695# CONFIG_SMSC_PHY is not set
696CONFIG_BROADCOM_PHY=y
697# CONFIG_ICPLUS_PHY is not set
698# CONFIG_REALTEK_PHY is not set
699# CONFIG_FIXED_PHY is not set
700# CONFIG_MDIO_BITBANG is not set
701CONFIG_NET_ETHERNET=y
702CONFIG_MII=y
703# CONFIG_HAPPYMEAL is not set
704# CONFIG_SUNGEM is not set
705# CONFIG_CASSINI is not set
706# CONFIG_NET_VENDOR_3COM is not set
707# CONFIG_NET_TULIP is not set
708# CONFIG_HP100 is not set
709# CONFIG_IBM_NEW_EMAC_ZMII is not set
710# CONFIG_IBM_NEW_EMAC_RGMII is not set
711# CONFIG_IBM_NEW_EMAC_TAH is not set
712# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
713# CONFIG_NET_PCI is not set
714# CONFIG_B44 is not set
715CONFIG_NETDEV_1000=y
716# CONFIG_ACENIC is not set
717# CONFIG_DL2K is not set
718# CONFIG_E1000 is not set
719# CONFIG_E1000E is not set
720# CONFIG_E1000E_ENABLED is not set
721# CONFIG_IP1000 is not set
722# CONFIG_IGB is not set
723# CONFIG_NS83820 is not set
724# CONFIG_HAMACHI is not set
725# CONFIG_YELLOWFIN is not set
726# CONFIG_R8169 is not set
727# CONFIG_SIS190 is not set
728# CONFIG_SKGE is not set
729# CONFIG_SKY2 is not set
730# CONFIG_SK98LIN is not set
731# CONFIG_VIA_VELOCITY is not set
732# CONFIG_TIGON3 is not set
733# CONFIG_BNX2 is not set
734CONFIG_GIANFAR=y
735# CONFIG_GFAR_NAPI is not set
736# CONFIG_QLA3XXX is not set
737# CONFIG_ATL1 is not set
738# CONFIG_NETDEV_10000 is not set
739# CONFIG_TR is not set
740
741#
742# Wireless LAN
743#
744# CONFIG_WLAN_PRE80211 is not set
745# CONFIG_WLAN_80211 is not set
746# CONFIG_WAN is not set
747CONFIG_ATM_DRIVERS=y
748# CONFIG_ATM_DUMMY is not set
749# CONFIG_ATM_TCP is not set
750# CONFIG_ATM_LANAI is not set
751# CONFIG_ATM_ENI is not set
752# CONFIG_ATM_FIRESTREAM is not set
753# CONFIG_ATM_ZATM is not set
754# CONFIG_ATM_NICSTAR is not set
755# CONFIG_ATM_IDT77252 is not set
756# CONFIG_ATM_AMBASSADOR is not set
757# CONFIG_ATM_HORIZON is not set
758# CONFIG_ATM_IA is not set
759# CONFIG_ATM_FORE200E_MAYBE is not set
760# CONFIG_ATM_HE is not set
761# CONFIG_FDDI is not set
762# CONFIG_HIPPI is not set
763CONFIG_PPP=m
764CONFIG_PPP_MULTILINK=y
765CONFIG_PPP_FILTER=y
766CONFIG_PPP_ASYNC=m
767CONFIG_PPP_SYNC_TTY=m
768CONFIG_PPP_DEFLATE=m
769CONFIG_PPP_BSDCOMP=m
770# CONFIG_PPP_MPPE is not set
771CONFIG_PPPOE=m
772CONFIG_PPPOATM=m
773# CONFIG_PPPOL2TP is not set
774CONFIG_SLIP=m
775CONFIG_SLIP_COMPRESSED=y
776CONFIG_SLHC=m
777CONFIG_SLIP_SMART=y
778CONFIG_SLIP_MODE_SLIP6=y
779CONFIG_NETCONSOLE=y
780# CONFIG_NETCONSOLE_DYNAMIC is not set
781CONFIG_NETPOLL=y
782CONFIG_NETPOLL_TRAP=y
783CONFIG_NET_POLL_CONTROLLER=y
784# CONFIG_ISDN is not set
785# CONFIG_PHONE is not set
786
787#
788# Input device support
789#
790CONFIG_INPUT=y
791# CONFIG_INPUT_FF_MEMLESS is not set
792# CONFIG_INPUT_POLLDEV is not set
793
794#
795# Userland interfaces
796#
797CONFIG_INPUT_MOUSEDEV=y
798CONFIG_INPUT_MOUSEDEV_PSAUX=y
799CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
800CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
801# CONFIG_INPUT_JOYDEV is not set
802# CONFIG_INPUT_EVDEV is not set
803# CONFIG_INPUT_EVBUG is not set
804
805#
806# Input Device Drivers
807#
808# CONFIG_INPUT_KEYBOARD is not set
809# CONFIG_INPUT_MOUSE is not set
810# CONFIG_INPUT_JOYSTICK is not set
811# CONFIG_INPUT_TABLET is not set
812# CONFIG_INPUT_TOUCHSCREEN is not set
813# CONFIG_INPUT_MISC is not set
814
815#
816# Hardware I/O ports
817#
818# CONFIG_SERIO is not set
819# CONFIG_GAMEPORT is not set
820
821#
822# Character devices
823#
824CONFIG_VT=y
825CONFIG_VT_CONSOLE=y
826CONFIG_HW_CONSOLE=y
827# CONFIG_VT_HW_CONSOLE_BINDING is not set
828# CONFIG_SERIAL_NONSTANDARD is not set
829# CONFIG_NOZOMI is not set
830
831#
832# Serial drivers
833#
834CONFIG_SERIAL_8250=y
835CONFIG_SERIAL_8250_CONSOLE=y
836# CONFIG_SERIAL_8250_PCI is not set
837CONFIG_SERIAL_8250_NR_UARTS=2
838CONFIG_SERIAL_8250_RUNTIME_UARTS=2
839# CONFIG_SERIAL_8250_EXTENDED is not set
840
841#
842# Non-8250 serial port support
843#
844# CONFIG_SERIAL_UARTLITE is not set
845CONFIG_SERIAL_CORE=y
846CONFIG_SERIAL_CORE_CONSOLE=y
847# CONFIG_SERIAL_JSM is not set
848# CONFIG_SERIAL_OF_PLATFORM is not set
849CONFIG_UNIX98_PTYS=y
850CONFIG_LEGACY_PTYS=y
851CONFIG_LEGACY_PTY_COUNT=256
852# CONFIG_IPMI_HANDLER is not set
853CONFIG_HW_RANDOM=m
854# CONFIG_NVRAM is not set
855# CONFIG_GEN_RTC is not set
856# CONFIG_R3964 is not set
857# CONFIG_APPLICOM is not set
858# CONFIG_RAW_DRIVER is not set
859# CONFIG_TCG_TPM is not set
860CONFIG_DEVPORT=y
861CONFIG_I2C=y
862CONFIG_I2C_BOARDINFO=y
863CONFIG_I2C_CHARDEV=y
864
865#
866# I2C Algorithms
867#
868# CONFIG_I2C_ALGOBIT is not set
869# CONFIG_I2C_ALGOPCF is not set
870# CONFIG_I2C_ALGOPCA is not set
871
872#
873# I2C Hardware Bus support
874#
875# CONFIG_I2C_ALI1535 is not set
876# CONFIG_I2C_ALI1563 is not set
877# CONFIG_I2C_ALI15X3 is not set
878# CONFIG_I2C_AMD756 is not set
879# CONFIG_I2C_AMD8111 is not set
880# CONFIG_I2C_I801 is not set
881# CONFIG_I2C_I810 is not set
882# CONFIG_I2C_PIIX4 is not set
883CONFIG_I2C_MPC=y
884# CONFIG_I2C_NFORCE2 is not set
885# CONFIG_I2C_OCORES is not set
886# CONFIG_I2C_PARPORT_LIGHT is not set
887# CONFIG_I2C_PROSAVAGE is not set
888# CONFIG_I2C_SAVAGE4 is not set
889# CONFIG_I2C_SIMTEC is not set
890# CONFIG_I2C_SIS5595 is not set
891# CONFIG_I2C_SIS630 is not set
892# CONFIG_I2C_SIS96X is not set
893# CONFIG_I2C_TAOS_EVM is not set
894# CONFIG_I2C_STUB is not set
895# CONFIG_I2C_VIA is not set
896# CONFIG_I2C_VIAPRO is not set
897# CONFIG_I2C_VOODOO3 is not set
898
899#
900# Miscellaneous I2C Chip support
901#
902# CONFIG_DS1682 is not set
903# CONFIG_SENSORS_EEPROM is not set
904# CONFIG_SENSORS_PCF8574 is not set
905# CONFIG_PCF8575 is not set
906# CONFIG_SENSORS_PCF8591 is not set
907# CONFIG_TPS65010 is not set
908# CONFIG_SENSORS_MAX6875 is not set
909# CONFIG_SENSORS_TSL2550 is not set
910# CONFIG_I2C_DEBUG_CORE is not set
911# CONFIG_I2C_DEBUG_ALGO is not set
912# CONFIG_I2C_DEBUG_BUS is not set
913# CONFIG_I2C_DEBUG_CHIP is not set
914
915#
916# SPI support
917#
918# CONFIG_SPI is not set
919# CONFIG_SPI_MASTER is not set
920# CONFIG_W1 is not set
921# CONFIG_POWER_SUPPLY is not set
922CONFIG_HWMON=y
923# CONFIG_HWMON_VID is not set
924# CONFIG_SENSORS_AD7418 is not set
925# CONFIG_SENSORS_ADM1021 is not set
926# CONFIG_SENSORS_ADM1025 is not set
927# CONFIG_SENSORS_ADM1026 is not set
928# CONFIG_SENSORS_ADM1029 is not set
929# CONFIG_SENSORS_ADM1031 is not set
930# CONFIG_SENSORS_ADM9240 is not set
931# CONFIG_SENSORS_ADT7470 is not set
932# CONFIG_SENSORS_ADT7473 is not set
933# CONFIG_SENSORS_ATXP1 is not set
934# CONFIG_SENSORS_DS1621 is not set
935# CONFIG_SENSORS_I5K_AMB is not set
936# CONFIG_SENSORS_F71805F is not set
937# CONFIG_SENSORS_F71882FG is not set
938# CONFIG_SENSORS_F75375S is not set
939# CONFIG_SENSORS_GL518SM is not set
940# CONFIG_SENSORS_GL520SM is not set
941# CONFIG_SENSORS_IT87 is not set
942# CONFIG_SENSORS_LM63 is not set
943# CONFIG_SENSORS_LM75 is not set
944# CONFIG_SENSORS_LM77 is not set
945# CONFIG_SENSORS_LM78 is not set
946# CONFIG_SENSORS_LM80 is not set
947# CONFIG_SENSORS_LM83 is not set
948# CONFIG_SENSORS_LM85 is not set
949# CONFIG_SENSORS_LM87 is not set
950# CONFIG_SENSORS_LM90 is not set
951# CONFIG_SENSORS_LM92 is not set
952# CONFIG_SENSORS_LM93 is not set
953# CONFIG_SENSORS_MAX1619 is not set
954# CONFIG_SENSORS_MAX6650 is not set
955# CONFIG_SENSORS_PC87360 is not set
956# CONFIG_SENSORS_PC87427 is not set
957# CONFIG_SENSORS_SIS5595 is not set
958# CONFIG_SENSORS_DME1737 is not set
959# CONFIG_SENSORS_SMSC47M1 is not set
960# CONFIG_SENSORS_SMSC47M192 is not set
961# CONFIG_SENSORS_SMSC47B397 is not set
962# CONFIG_SENSORS_ADS7828 is not set
963# CONFIG_SENSORS_THMC50 is not set
964# CONFIG_SENSORS_VIA686A is not set
965# CONFIG_SENSORS_VT1211 is not set
966# CONFIG_SENSORS_VT8231 is not set
967# CONFIG_SENSORS_W83781D is not set
968# CONFIG_SENSORS_W83791D is not set
969# CONFIG_SENSORS_W83792D is not set
970# CONFIG_SENSORS_W83793 is not set
971# CONFIG_SENSORS_W83L785TS is not set
972# CONFIG_SENSORS_W83L786NG is not set
973# CONFIG_SENSORS_W83627HF is not set
974# CONFIG_SENSORS_W83627EHF is not set
975# CONFIG_HWMON_DEBUG_CHIP is not set
976# CONFIG_THERMAL is not set
977CONFIG_WATCHDOG=y
978# CONFIG_WATCHDOG_NOWAYOUT is not set
979
980#
981# Watchdog Device Drivers
982#
983CONFIG_SOFT_WATCHDOG=m
984
985#
986# PCI-based Watchdog Cards
987#
988# CONFIG_PCIPCWATCHDOG is not set
989# CONFIG_WDTPCI is not set
990
991#
992# Sonics Silicon Backplane
993#
994CONFIG_SSB_POSSIBLE=y
995# CONFIG_SSB is not set
996
997#
998# Multifunction device drivers
999#
1000# CONFIG_MFD_SM501 is not set
1001
1002#
1003# Multimedia devices
1004#
1005# CONFIG_VIDEO_DEV is not set
1006# CONFIG_DVB_CORE is not set
1007CONFIG_DAB=y
1008
1009#
1010# Graphics support
1011#
1012# CONFIG_AGP is not set
1013# CONFIG_DRM is not set
1014# CONFIG_VGASTATE is not set
1015CONFIG_VIDEO_OUTPUT_CONTROL=m
1016# CONFIG_FB is not set
1017# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1018
1019#
1020# Display device support
1021#
1022# CONFIG_DISPLAY_SUPPORT is not set
1023
1024#
1025# Console display driver support
1026#
1027CONFIG_VGA_CONSOLE=y
1028# CONFIG_VGACON_SOFT_SCROLLBACK is not set
1029CONFIG_DUMMY_CONSOLE=y
1030
1031#
1032# Sound
1033#
1034# CONFIG_SOUND is not set
1035CONFIG_HID_SUPPORT=y
1036CONFIG_HID=y
1037# CONFIG_HID_DEBUG is not set
1038# CONFIG_HIDRAW is not set
1039CONFIG_USB_SUPPORT=y
1040CONFIG_USB_ARCH_HAS_HCD=y
1041CONFIG_USB_ARCH_HAS_OHCI=y
1042CONFIG_USB_ARCH_HAS_EHCI=y
1043# CONFIG_USB is not set
1044
1045#
1046# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1047#
1048# CONFIG_USB_GADGET is not set
1049# CONFIG_MMC is not set
1050# CONFIG_MEMSTICK is not set
1051# CONFIG_NEW_LEDS is not set
1052# CONFIG_INFINIBAND is not set
1053# CONFIG_EDAC is not set
1054# CONFIG_RTC_CLASS is not set
1055# CONFIG_DMADEVICES is not set
1056
1057#
1058# Userspace I/O
1059#
1060# CONFIG_UIO is not set
1061
1062#
1063# File systems
1064#
1065CONFIG_EXT2_FS=y
1066CONFIG_EXT2_FS_XATTR=y
1067CONFIG_EXT2_FS_POSIX_ACL=y
1068# CONFIG_EXT2_FS_SECURITY is not set
1069# CONFIG_EXT2_FS_XIP is not set
1070CONFIG_EXT3_FS=y
1071CONFIG_EXT3_FS_XATTR=y
1072CONFIG_EXT3_FS_POSIX_ACL=y
1073# CONFIG_EXT3_FS_SECURITY is not set
1074# CONFIG_EXT4DEV_FS is not set
1075CONFIG_JBD=y
1076# CONFIG_JBD_DEBUG is not set
1077CONFIG_FS_MBCACHE=y
1078CONFIG_REISERFS_FS=m
1079# CONFIG_REISERFS_CHECK is not set
1080# CONFIG_REISERFS_PROC_INFO is not set
1081CONFIG_REISERFS_FS_XATTR=y
1082CONFIG_REISERFS_FS_POSIX_ACL=y
1083# CONFIG_REISERFS_FS_SECURITY is not set
1084# CONFIG_JFS_FS is not set
1085CONFIG_FS_POSIX_ACL=y
1086# CONFIG_XFS_FS is not set
1087# CONFIG_GFS2_FS is not set
1088CONFIG_OCFS2_FS=m
1089CONFIG_OCFS2_DEBUG_MASKLOG=y
1090# CONFIG_OCFS2_DEBUG_FS is not set
1091CONFIG_DNOTIFY=y
1092CONFIG_INOTIFY=y
1093CONFIG_INOTIFY_USER=y
1094# CONFIG_QUOTA is not set
1095CONFIG_AUTOFS_FS=m
1096CONFIG_AUTOFS4_FS=m
1097# CONFIG_FUSE_FS is not set
1098
1099#
1100# CD-ROM/DVD Filesystems
1101#
1102# CONFIG_ISO9660_FS is not set
1103# CONFIG_UDF_FS is not set
1104
1105#
1106# DOS/FAT/NT Filesystems
1107#
1108# CONFIG_MSDOS_FS is not set
1109# CONFIG_VFAT_FS is not set
1110# CONFIG_NTFS_FS is not set
1111
1112#
1113# Pseudo filesystems
1114#
1115CONFIG_PROC_FS=y
1116CONFIG_PROC_KCORE=y
1117CONFIG_PROC_SYSCTL=y
1118CONFIG_SYSFS=y
1119CONFIG_TMPFS=y
1120# CONFIG_TMPFS_POSIX_ACL is not set
1121# CONFIG_HUGETLB_PAGE is not set
1122CONFIG_CONFIGFS_FS=m
1123
1124#
1125# Miscellaneous filesystems
1126#
1127# CONFIG_ADFS_FS is not set
1128# CONFIG_AFFS_FS is not set
1129# CONFIG_HFS_FS is not set
1130# CONFIG_HFSPLUS_FS is not set
1131# CONFIG_BEFS_FS is not set
1132# CONFIG_BFS_FS is not set
1133# CONFIG_EFS_FS is not set
1134# CONFIG_JFFS2_FS is not set
1135# CONFIG_CRAMFS is not set
1136# CONFIG_VXFS_FS is not set
1137CONFIG_MINIX_FS=m
1138# CONFIG_HPFS_FS is not set
1139# CONFIG_QNX4FS_FS is not set
1140CONFIG_ROMFS_FS=m
1141# CONFIG_SYSV_FS is not set
1142# CONFIG_UFS_FS is not set
1143CONFIG_NETWORK_FILESYSTEMS=y
1144CONFIG_NFS_FS=y
1145CONFIG_NFS_V3=y
1146# CONFIG_NFS_V3_ACL is not set
1147CONFIG_NFS_V4=y
1148CONFIG_NFS_DIRECTIO=y
1149# CONFIG_NFSD is not set
1150CONFIG_ROOT_NFS=y
1151CONFIG_LOCKD=y
1152CONFIG_LOCKD_V4=y
1153CONFIG_NFS_COMMON=y
1154CONFIG_SUNRPC=y
1155CONFIG_SUNRPC_GSS=y
1156# CONFIG_SUNRPC_BIND34 is not set
1157CONFIG_RPCSEC_GSS_KRB5=y
1158# CONFIG_RPCSEC_GSS_SPKM3 is not set
1159CONFIG_SMB_FS=m
1160CONFIG_SMB_NLS_DEFAULT=y
1161CONFIG_SMB_NLS_REMOTE="cp437"
1162CONFIG_CIFS=m
1163# CONFIG_CIFS_STATS is not set
1164# CONFIG_CIFS_WEAK_PW_HASH is not set
1165CONFIG_CIFS_XATTR=y
1166CONFIG_CIFS_POSIX=y
1167# CONFIG_CIFS_DEBUG2 is not set
1168# CONFIG_CIFS_EXPERIMENTAL is not set
1169# CONFIG_NCP_FS is not set
1170# CONFIG_CODA_FS is not set
1171# CONFIG_AFS_FS is not set
1172
1173#
1174# Partition Types
1175#
1176# CONFIG_PARTITION_ADVANCED is not set
1177CONFIG_MSDOS_PARTITION=y
1178CONFIG_NLS=m
1179CONFIG_NLS_DEFAULT="iso8859-1"
1180CONFIG_NLS_CODEPAGE_437=m
1181CONFIG_NLS_CODEPAGE_737=m
1182CONFIG_NLS_CODEPAGE_775=m
1183CONFIG_NLS_CODEPAGE_850=m
1184CONFIG_NLS_CODEPAGE_852=m
1185CONFIG_NLS_CODEPAGE_855=m
1186CONFIG_NLS_CODEPAGE_857=m
1187CONFIG_NLS_CODEPAGE_860=m
1188CONFIG_NLS_CODEPAGE_861=m
1189CONFIG_NLS_CODEPAGE_862=m
1190CONFIG_NLS_CODEPAGE_863=m
1191CONFIG_NLS_CODEPAGE_864=m
1192CONFIG_NLS_CODEPAGE_865=m
1193CONFIG_NLS_CODEPAGE_866=m
1194CONFIG_NLS_CODEPAGE_869=m
1195CONFIG_NLS_CODEPAGE_936=m
1196CONFIG_NLS_CODEPAGE_950=m
1197CONFIG_NLS_CODEPAGE_932=m
1198CONFIG_NLS_CODEPAGE_949=m
1199CONFIG_NLS_CODEPAGE_874=m
1200CONFIG_NLS_ISO8859_8=m
1201CONFIG_NLS_CODEPAGE_1250=m
1202CONFIG_NLS_CODEPAGE_1251=m
1203CONFIG_NLS_ASCII=m
1204CONFIG_NLS_ISO8859_1=m
1205CONFIG_NLS_ISO8859_2=m
1206CONFIG_NLS_ISO8859_3=m
1207CONFIG_NLS_ISO8859_4=m
1208CONFIG_NLS_ISO8859_5=m
1209CONFIG_NLS_ISO8859_6=m
1210CONFIG_NLS_ISO8859_7=m
1211CONFIG_NLS_ISO8859_9=m
1212CONFIG_NLS_ISO8859_13=m
1213CONFIG_NLS_ISO8859_14=m
1214CONFIG_NLS_ISO8859_15=m
1215CONFIG_NLS_KOI8_R=m
1216CONFIG_NLS_KOI8_U=m
1217CONFIG_NLS_UTF8=m
1218# CONFIG_DLM is not set
1219
1220#
1221# Library routines
1222#
1223CONFIG_BITREVERSE=y
1224CONFIG_CRC_CCITT=m
1225# CONFIG_CRC16 is not set
1226# CONFIG_CRC_ITU_T is not set
1227CONFIG_CRC32=y
1228# CONFIG_CRC7 is not set
1229CONFIG_LIBCRC32C=m
1230CONFIG_ZLIB_INFLATE=m
1231CONFIG_ZLIB_DEFLATE=m
1232CONFIG_PLIST=y
1233CONFIG_HAS_IOMEM=y
1234CONFIG_HAS_IOPORT=y
1235CONFIG_HAS_DMA=y
1236CONFIG_HAVE_LMB=y
1237
1238#
1239# Kernel hacking
1240#
1241# CONFIG_PRINTK_TIME is not set
1242CONFIG_ENABLE_WARN_DEPRECATED=y
1243CONFIG_ENABLE_MUST_CHECK=y
1244CONFIG_MAGIC_SYSRQ=y
1245# CONFIG_UNUSED_SYMBOLS is not set
1246CONFIG_DEBUG_FS=y
1247# CONFIG_HEADERS_CHECK is not set
1248CONFIG_DEBUG_KERNEL=y
1249# CONFIG_DEBUG_SHIRQ is not set
1250CONFIG_DETECT_SOFTLOCKUP=y
1251CONFIG_SCHED_DEBUG=y
1252# CONFIG_SCHEDSTATS is not set
1253# CONFIG_TIMER_STATS is not set
1254# CONFIG_DEBUG_SLAB is not set
1255# CONFIG_DEBUG_RT_MUTEXES is not set
1256# CONFIG_RT_MUTEX_TESTER is not set
1257# CONFIG_DEBUG_SPINLOCK is not set
1258# CONFIG_DEBUG_MUTEXES is not set
1259# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1260# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1261# CONFIG_DEBUG_KOBJECT is not set
1262# CONFIG_DEBUG_BUGVERBOSE is not set
1263CONFIG_DEBUG_INFO=y
1264# CONFIG_DEBUG_VM is not set
1265# CONFIG_DEBUG_LIST is not set
1266# CONFIG_DEBUG_SG is not set
1267# CONFIG_BOOT_PRINTK_DELAY is not set
1268# CONFIG_RCU_TORTURE_TEST is not set
1269# CONFIG_BACKTRACE_SELF_TEST is not set
1270# CONFIG_FAULT_INJECTION is not set
1271# CONFIG_SAMPLES is not set
1272# CONFIG_DEBUG_STACKOVERFLOW is not set
1273# CONFIG_DEBUG_STACK_USAGE is not set
1274# CONFIG_DEBUG_PAGEALLOC is not set
1275CONFIG_DEBUGGER=y
1276# CONFIG_XMON is not set
1277# CONFIG_VIRQ_DEBUG is not set
1278# CONFIG_BDI_SWITCH is not set
1279# CONFIG_PPC_EARLY_DEBUG is not set
1280
1281#
1282# Security options
1283#
1284# CONFIG_KEYS is not set
1285CONFIG_SECURITY=y
1286CONFIG_SECURITY_NETWORK=y
1287# CONFIG_SECURITY_NETWORK_XFRM is not set
1288CONFIG_SECURITY_CAPABILITIES=y
1289# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1290CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
1291CONFIG_CRYPTO=y
1292CONFIG_CRYPTO_ALGAPI=y
1293CONFIG_CRYPTO_AEAD=m
1294CONFIG_CRYPTO_BLKCIPHER=y
1295# CONFIG_CRYPTO_SEQIV is not set
1296CONFIG_CRYPTO_HASH=y
1297CONFIG_CRYPTO_MANAGER=y
1298CONFIG_CRYPTO_HMAC=y
1299# CONFIG_CRYPTO_XCBC is not set
1300CONFIG_CRYPTO_NULL=m
1301CONFIG_CRYPTO_MD4=m
1302CONFIG_CRYPTO_MD5=y
1303CONFIG_CRYPTO_SHA1=m
1304CONFIG_CRYPTO_SHA256=m
1305CONFIG_CRYPTO_SHA512=m
1306CONFIG_CRYPTO_WP512=m
1307# CONFIG_CRYPTO_TGR192 is not set
1308# CONFIG_CRYPTO_GF128MUL is not set
1309CONFIG_CRYPTO_ECB=m
1310CONFIG_CRYPTO_CBC=y
1311CONFIG_CRYPTO_PCBC=m
1312# CONFIG_CRYPTO_LRW is not set
1313# CONFIG_CRYPTO_XTS is not set
1314# CONFIG_CRYPTO_CTR is not set
1315# CONFIG_CRYPTO_GCM is not set
1316# CONFIG_CRYPTO_CCM is not set
1317# CONFIG_CRYPTO_CRYPTD is not set
1318CONFIG_CRYPTO_DES=y
1319# CONFIG_CRYPTO_FCRYPT is not set
1320CONFIG_CRYPTO_BLOWFISH=m
1321CONFIG_CRYPTO_TWOFISH=m
1322CONFIG_CRYPTO_TWOFISH_COMMON=m
1323CONFIG_CRYPTO_SERPENT=m
1324CONFIG_CRYPTO_AES=m
1325CONFIG_CRYPTO_CAST5=m
1326CONFIG_CRYPTO_CAST6=m
1327CONFIG_CRYPTO_TEA=m
1328CONFIG_CRYPTO_ARC4=m
1329CONFIG_CRYPTO_KHAZAD=m
1330CONFIG_CRYPTO_ANUBIS=m
1331# CONFIG_CRYPTO_SEED is not set
1332# CONFIG_CRYPTO_SALSA20 is not set
1333CONFIG_CRYPTO_DEFLATE=m
1334CONFIG_CRYPTO_MICHAEL_MIC=m
1335CONFIG_CRYPTO_CRC32C=m
1336# CONFIG_CRYPTO_CAMELLIA is not set
1337CONFIG_CRYPTO_TEST=m
1338CONFIG_CRYPTO_AUTHENC=m
1339# CONFIG_CRYPTO_LZO is not set
1340CONFIG_CRYPTO_HW=y
1341# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1342# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index b9dbfff9afe9..ce1e8d24e747 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -67,6 +67,7 @@ obj-$(CONFIG_BOOTX_TEXT) += btext.o
67obj-$(CONFIG_SMP) += smp.o 67obj-$(CONFIG_SMP) += smp.o
68obj-$(CONFIG_KPROBES) += kprobes.o 68obj-$(CONFIG_KPROBES) += kprobes.o
69obj-$(CONFIG_PPC_UDBG_16550) += legacy_serial.o udbg_16550.o 69obj-$(CONFIG_PPC_UDBG_16550) += legacy_serial.o udbg_16550.o
70obj-$(CONFIG_STACKTRACE) += stacktrace.o
70 71
71pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o 72pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o
72obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ 73obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 4b749c416464..292c6d8db0e1 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -26,8 +26,6 @@
26#ifdef CONFIG_PPC64 26#ifdef CONFIG_PPC64
27#include <linux/time.h> 27#include <linux/time.h>
28#include <linux/hardirq.h> 28#include <linux/hardirq.h>
29#else
30#include <linux/ptrace.h>
31#endif 29#endif
32 30
33#include <asm/io.h> 31#include <asm/io.h>
@@ -46,6 +44,9 @@
46#include <asm/mmu.h> 44#include <asm/mmu.h>
47#include <asm/hvcall.h> 45#include <asm/hvcall.h>
48#endif 46#endif
47#ifdef CONFIG_PPC_ISERIES
48#include <asm/iseries/alpaca.h>
49#endif
49 50
50#define DEFINE(sym, val) \ 51#define DEFINE(sym, val) \
51 asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 52 asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -60,7 +61,6 @@ int main(void)
60 DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context)); 61 DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
61#else 62#else
62 DEFINE(THREAD_INFO, offsetof(struct task_struct, stack)); 63 DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
63 DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
64#endif /* CONFIG_PPC64 */ 64#endif /* CONFIG_PPC64 */
65 65
66 DEFINE(KSP, offsetof(struct thread_struct, ksp)); 66 DEFINE(KSP, offsetof(struct thread_struct, ksp));
@@ -80,7 +80,6 @@ int main(void)
80 DEFINE(PGDIR, offsetof(struct thread_struct, pgdir)); 80 DEFINE(PGDIR, offsetof(struct thread_struct, pgdir));
81#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) 81#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
82 DEFINE(THREAD_DBCR0, offsetof(struct thread_struct, dbcr0)); 82 DEFINE(THREAD_DBCR0, offsetof(struct thread_struct, dbcr0));
83 DEFINE(PT_PTRACED, PT_PTRACED);
84#endif 83#endif
85#ifdef CONFIG_SPE 84#ifdef CONFIG_SPE
86 DEFINE(THREAD_EVR0, offsetof(struct thread_struct, evr[0])); 85 DEFINE(THREAD_EVR0, offsetof(struct thread_struct, evr[0]));
@@ -325,6 +324,9 @@ int main(void)
325 DEFINE(PAGE_OFFSET_VSID, KERNEL_VSID(PAGE_OFFSET)); 324 DEFINE(PAGE_OFFSET_VSID, KERNEL_VSID(PAGE_OFFSET));
326 DEFINE(VMALLOC_START_ESID, GET_ESID(VMALLOC_START)); 325 DEFINE(VMALLOC_START_ESID, GET_ESID(VMALLOC_START));
327 DEFINE(VMALLOC_START_VSID, KERNEL_VSID(VMALLOC_START)); 326 DEFINE(VMALLOC_START_VSID, KERNEL_VSID(VMALLOC_START));
327
328 /* alpaca */
329 DEFINE(ALPACA_SIZE, sizeof(struct alpaca));
328#endif 330#endif
329 331
330 DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE); 332 DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE);
diff --git a/arch/powerpc/kernel/btext.c b/arch/powerpc/kernel/btext.c
index 80e2eef05b2e..9f9377745490 100644
--- a/arch/powerpc/kernel/btext.c
+++ b/arch/powerpc/kernel/btext.c
@@ -7,6 +7,7 @@
7#include <linux/string.h> 7#include <linux/string.h>
8#include <linux/init.h> 8#include <linux/init.h>
9#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/lmb.h>
10 11
11#include <asm/sections.h> 12#include <asm/sections.h>
12#include <asm/prom.h> 13#include <asm/prom.h>
@@ -15,7 +16,7 @@
15#include <asm/mmu.h> 16#include <asm/mmu.h>
16#include <asm/pgtable.h> 17#include <asm/pgtable.h>
17#include <asm/io.h> 18#include <asm/io.h>
18#include <asm/lmb.h> 19#include <asm/prom.h>
19#include <asm/processor.h> 20#include <asm/processor.h>
20#include <asm/udbg.h> 21#include <asm/udbg.h>
21 22
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S
index 6250443ab9c9..5465e8de0e61 100644
--- a/arch/powerpc/kernel/cpu_setup_44x.S
+++ b/arch/powerpc/kernel/cpu_setup_44x.S
@@ -3,7 +3,7 @@
3 * Valentine Barshak <vbarshak@ru.mvista.com> 3 * Valentine Barshak <vbarshak@ru.mvista.com>
4 * MontaVista Software, Inc (c) 2007 4 * MontaVista Software, Inc (c) 2007
5 * 5 *
6 * Based on cpu_setup_6xx code by 6 * Based on cpu_setup_6xx code by
7 * Benjamin Herrenschmidt <benh@kernel.crashing.org> 7 * Benjamin Herrenschmidt <benh@kernel.crashing.org>
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
@@ -32,6 +32,9 @@ _GLOBAL(__setup_cpu_440grx)
32 bl __fixup_440A_mcheck 32 bl __fixup_440A_mcheck
33 mtlr r4 33 mtlr r4
34 blr 34 blr
35_GLOBAL(__setup_cpu_460ex)
36_GLOBAL(__setup_cpu_460gt)
37 b __init_fpu_44x
35_GLOBAL(__setup_cpu_440gx) 38_GLOBAL(__setup_cpu_440gx)
36_GLOBAL(__setup_cpu_440spe) 39_GLOBAL(__setup_cpu_440spe)
37 b __fixup_440A_mcheck 40 b __fixup_440A_mcheck
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 2a8f5cc5184f..26ffb44e2701 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -36,6 +36,8 @@ extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
36extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); 36extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
37extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); 37extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec);
38extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); 38extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec);
39extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
40extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
39extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); 41extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
40extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); 42extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
41extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); 43extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
@@ -1397,6 +1399,30 @@ static struct cpu_spec __initdata cpu_specs[] = {
1397 .machine_check = machine_check_440A, 1399 .machine_check = machine_check_440A,
1398 .platform = "ppc440", 1400 .platform = "ppc440",
1399 }, 1401 },
1402 { /* 460EX */
1403 .pvr_mask = 0xffff0002,
1404 .pvr_value = 0x13020002,
1405 .cpu_name = "460EX",
1406 .cpu_features = CPU_FTRS_44X,
1407 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1408 .icache_bsize = 32,
1409 .dcache_bsize = 32,
1410 .cpu_setup = __setup_cpu_460ex,
1411 .machine_check = machine_check_440A,
1412 .platform = "ppc440",
1413 },
1414 { /* 460GT */
1415 .pvr_mask = 0xffff0002,
1416 .pvr_value = 0x13020000,
1417 .cpu_name = "460GT",
1418 .cpu_features = CPU_FTRS_44X,
1419 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1420 .icache_bsize = 32,
1421 .dcache_bsize = 32,
1422 .cpu_setup = __setup_cpu_460gt,
1423 .machine_check = machine_check_440A,
1424 .platform = "ppc440",
1425 },
1400#endif /* CONFIG_44x */ 1426#endif /* CONFIG_44x */
1401#ifdef CONFIG_FSL_BOOKE 1427#ifdef CONFIG_FSL_BOOKE
1402#ifdef CONFIG_E200 1428#ifdef CONFIG_E200
@@ -1512,7 +1538,7 @@ struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
1512 *t = *s; 1538 *t = *s;
1513 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; 1539 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
1514#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE) 1540#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
1515 /* ppc64 and booke expect identify_cpu to also call 1541 /* ppc64 and booke expect identify_cpu to also call
1516 * setup_cpu for that processor. I will consolidate 1542 * setup_cpu for that processor. I will consolidate
1517 * that at a later time, for now, just use #ifdef. 1543 * that at a later time, for now, just use #ifdef.
1518 * we also don't need to PTRRELOC the function pointer 1544 * we also don't need to PTRRELOC the function pointer
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
index 571132ed12c1..eae401de3f76 100644
--- a/arch/powerpc/kernel/crash.c
+++ b/arch/powerpc/kernel/crash.c
@@ -24,12 +24,13 @@
24#include <linux/init.h> 24#include <linux/init.h>
25#include <linux/irq.h> 25#include <linux/irq.h>
26#include <linux/types.h> 26#include <linux/types.h>
27#include <linux/lmb.h>
27 28
28#include <asm/processor.h> 29#include <asm/processor.h>
29#include <asm/machdep.h> 30#include <asm/machdep.h>
30#include <asm/kexec.h> 31#include <asm/kexec.h>
31#include <asm/kdump.h> 32#include <asm/kdump.h>
32#include <asm/lmb.h> 33#include <asm/prom.h>
33#include <asm/firmware.h> 34#include <asm/firmware.h>
34#include <asm/smp.h> 35#include <asm/smp.h>
35#include <asm/system.h> 36#include <asm/system.h>
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
index 29ff77c468ac..9ee3c5278db0 100644
--- a/arch/powerpc/kernel/crash_dump.c
+++ b/arch/powerpc/kernel/crash_dump.c
@@ -13,8 +13,9 @@
13 13
14#include <linux/crash_dump.h> 14#include <linux/crash_dump.h>
15#include <linux/bootmem.h> 15#include <linux/bootmem.h>
16#include <linux/lmb.h>
16#include <asm/kdump.h> 17#include <asm/kdump.h>
17#include <asm/lmb.h> 18#include <asm/prom.h>
18#include <asm/firmware.h> 19#include <asm/firmware.h>
19#include <asm/uaccess.h> 20#include <asm/uaccess.h>
20 21
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 69a91bd46115..84c868633068 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -110,9 +110,9 @@ transfer_to_handler:
110 stw r11,PT_REGS(r12) 110 stw r11,PT_REGS(r12)
111#if defined(CONFIG_40x) || defined(CONFIG_BOOKE) 111#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
112 /* Check to see if the dbcr0 register is set up to debug. Use the 112 /* Check to see if the dbcr0 register is set up to debug. Use the
113 single-step bit to do this. */ 113 internal debug mode bit to do this. */
114 lwz r12,THREAD_DBCR0(r12) 114 lwz r12,THREAD_DBCR0(r12)
115 andis. r12,r12,DBCR0_IC@h 115 andis. r12,r12,DBCR0_IDM@h
116 beq+ 3f 116 beq+ 3f
117 /* From user and task is ptraced - load up global dbcr0 */ 117 /* From user and task is ptraced - load up global dbcr0 */
118 li r12,-1 /* clear all pending debug events */ 118 li r12,-1 /* clear all pending debug events */
@@ -120,6 +120,12 @@ transfer_to_handler:
120 lis r11,global_dbcr0@ha 120 lis r11,global_dbcr0@ha
121 tophys(r11,r11) 121 tophys(r11,r11)
122 addi r11,r11,global_dbcr0@l 122 addi r11,r11,global_dbcr0@l
123#ifdef CONFIG_SMP
124 rlwinm r9,r1,0,0,(31-THREAD_SHIFT)
125 lwz r9,TI_CPU(r9)
126 slwi r9,r9,3
127 add r11,r11,r9
128#endif
123 lwz r12,0(r11) 129 lwz r12,0(r11)
124 mtspr SPRN_DBCR0,r12 130 mtspr SPRN_DBCR0,r12
125 lwz r12,4(r11) 131 lwz r12,4(r11)
@@ -238,10 +244,10 @@ ret_from_syscall:
238 stw r11,_CCR(r1) 244 stw r11,_CCR(r1)
239syscall_exit_cont: 245syscall_exit_cont:
240#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) 246#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
241 /* If the process has its own DBCR0 value, load it up. The single 247 /* If the process has its own DBCR0 value, load it up. The internal
242 step bit tells us that dbcr0 should be loaded. */ 248 debug mode bit tells us that dbcr0 should be loaded. */
243 lwz r0,THREAD+THREAD_DBCR0(r2) 249 lwz r0,THREAD+THREAD_DBCR0(r2)
244 andis. r10,r0,DBCR0_IC@h 250 andis. r10,r0,DBCR0_IDM@h
245 bnel- load_dbcr0 251 bnel- load_dbcr0
246#endif 252#endif
247#ifdef CONFIG_44x 253#ifdef CONFIG_44x
@@ -666,10 +672,10 @@ user_exc_return: /* r10 contains MSR_KERNEL here */
666 672
667restore_user: 673restore_user:
668#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) 674#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
669 /* Check whether this process has its own DBCR0 value. The single 675 /* Check whether this process has its own DBCR0 value. The internal
670 step bit tells us that dbcr0 should be loaded. */ 676 debug mode bit tells us that dbcr0 should be loaded. */
671 lwz r0,THREAD+THREAD_DBCR0(r2) 677 lwz r0,THREAD+THREAD_DBCR0(r2)
672 andis. r10,r0,DBCR0_IC@h 678 andis. r10,r0,DBCR0_IDM@h
673 bnel- load_dbcr0 679 bnel- load_dbcr0
674#endif 680#endif
675 681
@@ -879,6 +885,12 @@ load_dbcr0:
879 mfspr r10,SPRN_DBCR0 885 mfspr r10,SPRN_DBCR0
880 lis r11,global_dbcr0@ha 886 lis r11,global_dbcr0@ha
881 addi r11,r11,global_dbcr0@l 887 addi r11,r11,global_dbcr0@l
888#ifdef CONFIG_SMP
889 rlwinm r9,r1,0,0,(31-THREAD_SHIFT)
890 lwz r9,TI_CPU(r9)
891 slwi r9,r9,3
892 add r11,r11,r9
893#endif
882 stw r10,0(r11) 894 stw r10,0(r11)
883 mtspr SPRN_DBCR0,r0 895 mtspr SPRN_DBCR0,r0
884 lwz r10,4(r11) 896 lwz r10,4(r11)
@@ -891,7 +903,7 @@ load_dbcr0:
891 .section .bss 903 .section .bss
892 .align 4 904 .align 4
893global_dbcr0: 905global_dbcr0:
894 .space 8 906 .space 8*NR_CPUS
895 .previous 907 .previous
896#endif /* !(CONFIG_4xx || CONFIG_BOOKE) */ 908#endif /* !(CONFIG_4xx || CONFIG_BOOKE) */
897 909
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 148a3547c9aa..c0db5b769e55 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -29,6 +29,8 @@
29#include <asm/cputable.h> 29#include <asm/cputable.h>
30#include <asm/firmware.h> 30#include <asm/firmware.h>
31#include <asm/bug.h> 31#include <asm/bug.h>
32#include <asm/ptrace.h>
33#include <asm/irqflags.h>
32 34
33/* 35/*
34 * System calls. 36 * System calls.
@@ -39,7 +41,7 @@
39 41
40/* This value is used to mark exception frames on the stack. */ 42/* This value is used to mark exception frames on the stack. */
41exception_marker: 43exception_marker:
42 .tc ID_72656773_68657265[TC],0x7265677368657265 44 .tc ID_EXC_MARKER[TC],STACK_FRAME_REGS_MARKER
43 45
44 .section ".text" 46 .section ".text"
45 .align 7 47 .align 7
@@ -88,6 +90,14 @@ system_call_common:
88 addi r9,r1,STACK_FRAME_OVERHEAD 90 addi r9,r1,STACK_FRAME_OVERHEAD
89 ld r11,exception_marker@toc(r2) 91 ld r11,exception_marker@toc(r2)
90 std r11,-16(r9) /* "regshere" marker */ 92 std r11,-16(r9) /* "regshere" marker */
93#ifdef CONFIG_TRACE_IRQFLAGS
94 bl .trace_hardirqs_on
95 REST_GPR(0,r1)
96 REST_4GPRS(3,r1)
97 REST_2GPRS(7,r1)
98 addi r9,r1,STACK_FRAME_OVERHEAD
99 ld r12,_MSR(r1)
100#endif /* CONFIG_TRACE_IRQFLAGS */
91 li r10,1 101 li r10,1
92 stb r10,PACASOFTIRQEN(r13) 102 stb r10,PACASOFTIRQEN(r13)
93 stb r10,PACAHARDIRQEN(r13) 103 stb r10,PACAHARDIRQEN(r13)
@@ -102,7 +112,7 @@ BEGIN_FW_FTR_SECTION
102 b hardware_interrupt_entry 112 b hardware_interrupt_entry
1032: 1132:
104END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 114END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
105#endif 115#endif /* CONFIG_PPC_ISERIES */
106 mfmsr r11 116 mfmsr r11
107 ori r11,r11,MSR_EE 117 ori r11,r11,MSR_EE
108 mtmsrd r11,1 118 mtmsrd r11,1
@@ -504,6 +514,10 @@ BEGIN_FW_FTR_SECTION
504 514
505 li r3,0 515 li r3,0
506 stb r3,PACASOFTIRQEN(r13) /* ensure we are soft-disabled */ 516 stb r3,PACASOFTIRQEN(r13) /* ensure we are soft-disabled */
517#ifdef CONFIG_TRACE_IRQFLAGS
518 bl .trace_hardirqs_off
519 mfmsr r10
520#endif
507 ori r10,r10,MSR_EE 521 ori r10,r10,MSR_EE
508 mtmsrd r10 /* hard-enable again */ 522 mtmsrd r10 /* hard-enable again */
509 addi r3,r1,STACK_FRAME_OVERHEAD 523 addi r3,r1,STACK_FRAME_OVERHEAD
@@ -512,7 +526,7 @@ BEGIN_FW_FTR_SECTION
5124: 5264:
513END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 527END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
514#endif 528#endif
515 stb r5,PACASOFTIRQEN(r13) 529 TRACE_AND_RESTORE_IRQ(r5);
516 530
517 /* extract EE bit and use it to restore paca->hard_enabled */ 531 /* extract EE bit and use it to restore paca->hard_enabled */
518 ld r3,_MSR(r1) 532 ld r3,_MSR(r1)
@@ -580,6 +594,16 @@ do_work:
580 bne restore 594 bne restore
581 /* here we are preempting the current task */ 595 /* here we are preempting the current task */
5821: 5961:
597#ifdef CONFIG_TRACE_IRQFLAGS
598 bl .trace_hardirqs_on
599 /* Note: we just clobbered r10 which used to contain the previous
600 * MSR before the hard-disabling done by the caller of do_work.
601 * We don't have that value anymore, but it doesn't matter as
602 * we will hard-enable unconditionally, we can just reload the
603 * current MSR into r10
604 */
605 mfmsr r10
606#endif /* CONFIG_TRACE_IRQFLAGS */
583 li r0,1 607 li r0,1
584 stb r0,PACASOFTIRQEN(r13) 608 stb r0,PACASOFTIRQEN(r13)
585 stb r0,PACAHARDIRQEN(r13) 609 stb r0,PACAHARDIRQEN(r13)
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index 0f4fac512020..785af9b56591 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -30,6 +30,7 @@
30#include <asm/thread_info.h> 30#include <asm/thread_info.h>
31#include <asm/ppc_asm.h> 31#include <asm/ppc_asm.h>
32#include <asm/asm-offsets.h> 32#include <asm/asm-offsets.h>
33#include <asm/ptrace.h>
33 34
34/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */ 35/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
35#define LOAD_BAT(n, reg, RA, RB) \ 36#define LOAD_BAT(n, reg, RA, RB) \
@@ -268,8 +269,8 @@ __secondary_hold_acknowledge:
268 li r10,MSR_KERNEL & ~(MSR_IR|MSR_DR); /* can take exceptions */ \ 269 li r10,MSR_KERNEL & ~(MSR_IR|MSR_DR); /* can take exceptions */ \
269 MTMSRD(r10); /* (except for mach check in rtas) */ \ 270 MTMSRD(r10); /* (except for mach check in rtas) */ \
270 stw r0,GPR0(r11); \ 271 stw r0,GPR0(r11); \
271 lis r10,0x7265; /* put exception frame marker */ \ 272 lis r10,STACK_FRAME_REGS_MARKER@ha; /* exception frame marker */ \
272 addi r10,r10,0x6773; \ 273 addi r10,r10,STACK_FRAME_REGS_MARKER@l; \
273 stw r10,8(r11); \ 274 stw r10,8(r11); \
274 SAVE_4GPRS(3, r11); \ 275 SAVE_4GPRS(3, r11); \
275 SAVE_2GPRS(7, r11) 276 SAVE_2GPRS(7, r11)
@@ -763,23 +764,6 @@ load_up_altivec:
763 b fast_exception_return 764 b fast_exception_return
764 765
765/* 766/*
766 * AltiVec unavailable trap from kernel - print a message, but let
767 * the task use AltiVec in the kernel until it returns to user mode.
768 */
769KernelAltiVec:
770 lwz r3,_MSR(r1)
771 oris r3,r3,MSR_VEC@h
772 stw r3,_MSR(r1) /* enable use of AltiVec after return */
773 lis r3,87f@h
774 ori r3,r3,87f@l
775 mr r4,r2 /* current */
776 lwz r5,_NIP(r1)
777 bl printk
778 b ret_from_except
77987: .string "AltiVec used in kernel (task=%p, pc=%x) \n"
780 .align 4,0
781
782/*
783 * giveup_altivec(tsk) 767 * giveup_altivec(tsk)
784 * Disable AltiVec for the task given as the argument, 768 * Disable AltiVec for the task given as the argument,
785 * and save the AltiVec registers in its thread_struct. 769 * and save the AltiVec registers in its thread_struct.
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index ad071a146a8d..b84ec6a2fc94 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -211,7 +211,7 @@ skpinv: addi r4,r4,1 /* Increment */
211 SET_IVOR(12, WatchdogTimer); 211 SET_IVOR(12, WatchdogTimer);
212 SET_IVOR(13, DataTLBError); 212 SET_IVOR(13, DataTLBError);
213 SET_IVOR(14, InstructionTLBError); 213 SET_IVOR(14, InstructionTLBError);
214 SET_IVOR(15, Debug); 214 SET_IVOR(15, DebugCrit);
215 215
216 /* Establish the interrupt vector base */ 216 /* Establish the interrupt vector base */
217 lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */ 217 lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
@@ -578,7 +578,7 @@ interrupt_base:
578 b InstructionStorage 578 b InstructionStorage
579 579
580 /* Debug Interrupt */ 580 /* Debug Interrupt */
581 DEBUG_EXCEPTION 581 DEBUG_CRIT_EXCEPTION
582 582
583/* 583/*
584 * Local functions 584 * Local functions
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index d3aee08e6814..215973a2c8d5 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -36,8 +36,7 @@
36#include <asm/firmware.h> 36#include <asm/firmware.h>
37#include <asm/page_64.h> 37#include <asm/page_64.h>
38#include <asm/exception.h> 38#include <asm/exception.h>
39 39#include <asm/irqflags.h>
40#define DO_SOFT_DISABLE
41 40
42/* 41/*
43 * We layout physical memory as follows: 42 * We layout physical memory as follows:
@@ -450,8 +449,8 @@ bad_stack:
450 */ 449 */
451fast_exc_return_irq: /* restores irq state too */ 450fast_exc_return_irq: /* restores irq state too */
452 ld r3,SOFTE(r1) 451 ld r3,SOFTE(r1)
452 TRACE_AND_RESTORE_IRQ(r3);
453 ld r12,_MSR(r1) 453 ld r12,_MSR(r1)
454 stb r3,PACASOFTIRQEN(r13) /* restore paca->soft_enabled */
455 rldicl r4,r12,49,63 /* get MSR_EE to LSB */ 454 rldicl r4,r12,49,63 /* get MSR_EE to LSB */
456 stb r4,PACAHARDIRQEN(r13) /* restore paca->hard_enabled */ 455 stb r4,PACAHARDIRQEN(r13) /* restore paca->hard_enabled */
457 b 1f 456 b 1f
@@ -621,7 +620,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
621 mtlr r10 620 mtlr r10
622 621
623 andi. r10,r12,MSR_RI /* check for unrecoverable exception */ 622 andi. r10,r12,MSR_RI /* check for unrecoverable exception */
624 beq- unrecov_slb 623 beq- 2f
625 624
626.machine push 625.machine push
627.machine "power4" 626.machine "power4"
@@ -643,6 +642,22 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
643 rfid 642 rfid
644 b . /* prevent speculative execution */ 643 b . /* prevent speculative execution */
645 644
6452:
646#ifdef CONFIG_PPC_ISERIES
647BEGIN_FW_FTR_SECTION
648 b unrecov_slb
649END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
650#endif /* CONFIG_PPC_ISERIES */
651 mfspr r11,SPRN_SRR0
652 clrrdi r10,r13,32
653 LOAD_HANDLER(r10,unrecov_slb)
654 mtspr SPRN_SRR0,r10
655 mfmsr r10
656 ori r10,r10,MSR_IR|MSR_DR|MSR_RI
657 mtspr SPRN_SRR1,r10
658 rfid
659 b .
660
646unrecov_slb: 661unrecov_slb:
647 EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB) 662 EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
648 DISABLE_INTS 663 DISABLE_INTS
@@ -808,7 +823,7 @@ _STATIC(load_up_altivec)
808 * Hash table stuff 823 * Hash table stuff
809 */ 824 */
810 .align 7 825 .align 7
811_GLOBAL(do_hash_page) 826_STATIC(do_hash_page)
812 std r3,_DAR(r1) 827 std r3,_DAR(r1)
813 std r4,_DSISR(r1) 828 std r4,_DSISR(r1)
814 829
@@ -820,6 +835,27 @@ BEGIN_FTR_SECTION
820END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 835END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
821 836
822 /* 837 /*
838 * On iSeries, we soft-disable interrupts here, then
839 * hard-enable interrupts so that the hash_page code can spin on
840 * the hash_table_lock without problems on a shared processor.
841 */
842 DISABLE_INTS
843
844 /*
845 * Currently, trace_hardirqs_off() will be called by DISABLE_INTS
846 * and will clobber volatile registers when irq tracing is enabled
847 * so we need to reload them. It may be possible to be smarter here
848 * and move the irq tracing elsewhere but let's keep it simple for
849 * now
850 */
851#ifdef CONFIG_TRACE_IRQFLAGS
852 ld r3,_DAR(r1)
853 ld r4,_DSISR(r1)
854 ld r5,_TRAP(r1)
855 ld r12,_MSR(r1)
856 clrrdi r5,r5,4
857#endif /* CONFIG_TRACE_IRQFLAGS */
858 /*
823 * We need to set the _PAGE_USER bit if MSR_PR is set or if we are 859 * We need to set the _PAGE_USER bit if MSR_PR is set or if we are
824 * accessing a userspace segment (even from the kernel). We assume 860 * accessing a userspace segment (even from the kernel). We assume
825 * kernel addresses always have the high bit set. 861 * kernel addresses always have the high bit set.
@@ -832,13 +868,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
832 rlwimi r4,r5,22+2,31-2,31-2 /* Set _PAGE_EXEC if trap is 0x400 */ 868 rlwimi r4,r5,22+2,31-2,31-2 /* Set _PAGE_EXEC if trap is 0x400 */
833 869
834 /* 870 /*
835 * On iSeries, we soft-disable interrupts here, then
836 * hard-enable interrupts so that the hash_page code can spin on
837 * the hash_table_lock without problems on a shared processor.
838 */
839 DISABLE_INTS
840
841 /*
842 * r3 contains the faulting address 871 * r3 contains the faulting address
843 * r4 contains the required access permissions 872 * r4 contains the required access permissions
844 * r5 contains the trap number 873 * r5 contains the trap number
@@ -848,7 +877,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
848 bl .hash_page /* build HPTE if possible */ 877 bl .hash_page /* build HPTE if possible */
849 cmpdi r3,0 /* see if hash_page succeeded */ 878 cmpdi r3,0 /* see if hash_page succeeded */
850 879
851#ifdef DO_SOFT_DISABLE
852BEGIN_FW_FTR_SECTION 880BEGIN_FW_FTR_SECTION
853 /* 881 /*
854 * If we had interrupts soft-enabled at the point where the 882 * If we had interrupts soft-enabled at the point where the
@@ -860,7 +888,7 @@ BEGIN_FW_FTR_SECTION
860 */ 888 */
861 beq 13f 889 beq 13f
862END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 890END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
863#endif 891
864BEGIN_FW_FTR_SECTION 892BEGIN_FW_FTR_SECTION
865 /* 893 /*
866 * Here we have interrupts hard-disabled, so it is sufficient 894 * Here we have interrupts hard-disabled, so it is sufficient
@@ -874,11 +902,12 @@ END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES)
874 902
875 /* 903 /*
876 * hash_page couldn't handle it, set soft interrupt enable back 904 * hash_page couldn't handle it, set soft interrupt enable back
877 * to what it was before the trap. Note that .local_irq_restore 905 * to what it was before the trap. Note that .raw_local_irq_restore
878 * handles any interrupts pending at this point. 906 * handles any interrupts pending at this point.
879 */ 907 */
880 ld r3,SOFTE(r1) 908 ld r3,SOFTE(r1)
881 bl .local_irq_restore 909 TRACE_AND_RESTORE_IRQ_PARTIAL(r3, 11f)
910 bl .raw_local_irq_restore
882 b 11f 911 b 11f
883 912
884/* Here we have a page fault that hash_page can't handle. */ 913/* Here we have a page fault that hash_page can't handle. */
@@ -1477,6 +1506,10 @@ _INIT_STATIC(start_here_multiplatform)
1477 addi r2,r2,0x4000 1506 addi r2,r2,0x4000
1478 add r2,r2,r26 1507 add r2,r2,r26
1479 1508
1509 /* Set initial ptr to current */
1510 LOAD_REG_IMMEDIATE(r4, init_task)
1511 std r4,PACACURRENT(r13)
1512
1480 /* Do very early kernel initializations, including initial hash table, 1513 /* Do very early kernel initializations, including initial hash table,
1481 * stab and slb setup before we turn on relocation. */ 1514 * stab and slb setup before we turn on relocation. */
1482 1515
@@ -1505,10 +1538,6 @@ _INIT_GLOBAL(start_here_common)
1505 li r0,0 1538 li r0,0
1506 stdu r0,-STACK_FRAME_OVERHEAD(r1) 1539 stdu r0,-STACK_FRAME_OVERHEAD(r1)
1507 1540
1508 /* ptr to current */
1509 LOAD_REG_IMMEDIATE(r4, init_task)
1510 std r4,PACACURRENT(r13)
1511
1512 /* Load the TOC */ 1541 /* Load the TOC */
1513 ld r2,PACATOC(r13) 1542 ld r2,PACATOC(r13)
1514 std r1,PACAKSAVE(r13) 1543 std r1,PACAKSAVE(r13)
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index ba9393f8e77a..aefafc6330c9 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -56,8 +56,17 @@
56 * is necessary since the MMU is always on, for Book-E parts, and the stacks 56 * is necessary since the MMU is always on, for Book-E parts, and the stacks
57 * are offset from KERNELBASE. 57 * are offset from KERNELBASE.
58 * 58 *
59 * There is some space optimization to be had here if desired. However
60 * to allow for a common kernel with support for debug exceptions either
61 * going to critical or their own debug level we aren't currently
62 * providing configurations that micro-optimize space usage.
59 */ 63 */
60#define BOOKE_EXCEPTION_STACK_SIZE (8192) 64#ifdef CONFIG_44x
65#define NUM_EXCEPTION_LVLS 2
66#else
67#define NUM_EXCEPTION_LVLS 3
68#endif
69#define BOOKE_EXCEPTION_STACK_SIZE (4096 * NUM_EXCEPTION_LVLS)
61 70
62/* CRIT_SPRG only used in critical exception handling */ 71/* CRIT_SPRG only used in critical exception handling */
63#define CRIT_SPRG SPRN_SPRG2 72#define CRIT_SPRG SPRN_SPRG2
@@ -68,7 +77,7 @@
68#define CRIT_STACK_TOP (exception_stack_top) 77#define CRIT_STACK_TOP (exception_stack_top)
69 78
70/* only on e200 for now */ 79/* only on e200 for now */
71#define DEBUG_STACK_TOP (exception_stack_top - 4096) 80#define DEBUG_STACK_TOP (exception_stack_top - 8192)
72#define DEBUG_SPRG SPRN_SPRG6W 81#define DEBUG_SPRG SPRN_SPRG6W
73 82
74#ifdef CONFIG_SMP 83#ifdef CONFIG_SMP
@@ -212,9 +221,8 @@ label:
212 * save (and later restore) the MSR via SPRN_CSRR1, which will still have 221 * save (and later restore) the MSR via SPRN_CSRR1, which will still have
213 * the MSR_DE bit set. 222 * the MSR_DE bit set.
214 */ 223 */
215#ifdef CONFIG_E200 224#define DEBUG_DEBUG_EXCEPTION \
216#define DEBUG_EXCEPTION \ 225 START_EXCEPTION(DebugDebug); \
217 START_EXCEPTION(Debug); \
218 DEBUG_EXCEPTION_PROLOG; \ 226 DEBUG_EXCEPTION_PROLOG; \
219 \ 227 \
220 /* \ 228 /* \
@@ -234,8 +242,8 @@ label:
234 cmplw r12,r10; \ 242 cmplw r12,r10; \
235 blt+ 2f; /* addr below exception vectors */ \ 243 blt+ 2f; /* addr below exception vectors */ \
236 \ 244 \
237 lis r10,Debug@h; \ 245 lis r10,DebugDebug@h; \
238 ori r10,r10,Debug@l; \ 246 ori r10,r10,DebugDebug@l; \
239 cmplw r12,r10; \ 247 cmplw r12,r10; \
240 bgt+ 2f; /* addr above exception vectors */ \ 248 bgt+ 2f; /* addr above exception vectors */ \
241 \ 249 \
@@ -265,9 +273,9 @@ label:
2652: mfspr r4,SPRN_DBSR; \ 2732: mfspr r4,SPRN_DBSR; \
266 addi r3,r1,STACK_FRAME_OVERHEAD; \ 274 addi r3,r1,STACK_FRAME_OVERHEAD; \
267 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc) 275 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc)
268#else 276
269#define DEBUG_EXCEPTION \ 277#define DEBUG_CRIT_EXCEPTION \
270 START_EXCEPTION(Debug); \ 278 START_EXCEPTION(DebugCrit); \
271 CRITICAL_EXCEPTION_PROLOG; \ 279 CRITICAL_EXCEPTION_PROLOG; \
272 \ 280 \
273 /* \ 281 /* \
@@ -287,8 +295,8 @@ label:
287 cmplw r12,r10; \ 295 cmplw r12,r10; \
288 blt+ 2f; /* addr below exception vectors */ \ 296 blt+ 2f; /* addr below exception vectors */ \
289 \ 297 \
290 lis r10,Debug@h; \ 298 lis r10,DebugCrit@h; \
291 ori r10,r10,Debug@l; \ 299 ori r10,r10,DebugCrit@l; \
292 cmplw r12,r10; \ 300 cmplw r12,r10; \
293 bgt+ 2f; /* addr above exception vectors */ \ 301 bgt+ 2f; /* addr above exception vectors */ \
294 \ 302 \
@@ -318,7 +326,6 @@ label:
3182: mfspr r4,SPRN_DBSR; \ 3262: mfspr r4,SPRN_DBSR; \
319 addi r3,r1,STACK_FRAME_OVERHEAD; \ 327 addi r3,r1,STACK_FRAME_OVERHEAD; \
320 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc) 328 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc)
321#endif
322 329
323#define INSTRUCTION_STORAGE_EXCEPTION \ 330#define INSTRUCTION_STORAGE_EXCEPTION \
324 START_EXCEPTION(InstructionStorage) \ 331 START_EXCEPTION(InstructionStorage) \
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index d9cc2c288d9e..4ff744143566 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -68,7 +68,9 @@ _ENTRY(_start);
68 mr r29,r5 68 mr r29,r5
69 mr r28,r6 69 mr r28,r6
70 mr r27,r7 70 mr r27,r7
71 li r25,0 /* phys kernel start (low) */
71 li r24,0 /* CPU number */ 72 li r24,0 /* CPU number */
73 li r23,0 /* phys kernel start (high) */
72 74
73/* We try to not make any assumptions about how the boot loader 75/* We try to not make any assumptions about how the boot loader
74 * setup or used the TLBs. We invalidate all mappings from the 76 * setup or used the TLBs. We invalidate all mappings from the
@@ -167,7 +169,28 @@ skpinv: addi r6,r6,1 /* Increment */
167 mtspr SPRN_MAS0,r7 169 mtspr SPRN_MAS0,r7
168 tlbre 170 tlbre
169 171
170 /* Just modify the entry ID, EPN and RPN for the temp mapping */ 172 /* grab and fixup the RPN */
173 mfspr r6,SPRN_MAS1 /* extract MAS1[SIZE] */
174 rlwinm r6,r6,25,27,30
175 li r8,-1
176 addi r6,r6,10
177 slw r6,r8,r6 /* convert to mask */
178
179 bl 1f /* Find our address */
1801: mflr r7
181
182 mfspr r8,SPRN_MAS3
183#ifdef CONFIG_PHYS_64BIT
184 mfspr r23,SPRN_MAS7
185#endif
186 and r8,r6,r8
187 subfic r9,r6,-4096
188 and r9,r9,r7
189
190 or r25,r8,r9
191 ori r8,r25,(MAS3_SX|MAS3_SW|MAS3_SR)
192
193 /* Just modify the entry ID and EPN for the temp mapping */
171 lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ 194 lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */
172 rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ 195 rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */
173 mtspr SPRN_MAS0,r7 196 mtspr SPRN_MAS0,r7
@@ -177,12 +200,10 @@ skpinv: addi r6,r6,1 /* Increment */
177 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_4K))@l 200 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_4K))@l
178 mtspr SPRN_MAS1,r6 201 mtspr SPRN_MAS1,r6
179 mfspr r6,SPRN_MAS2 202 mfspr r6,SPRN_MAS2
180 lis r7,PHYSICAL_START@h 203 li r7,0 /* temp EPN = 0 */
181 rlwimi r7,r6,0,20,31 204 rlwimi r7,r6,0,20,31
182 mtspr SPRN_MAS2,r7 205 mtspr SPRN_MAS2,r7
183 mfspr r6,SPRN_MAS3 206 mtspr SPRN_MAS3,r8
184 rlwimi r7,r6,0,20,31
185 mtspr SPRN_MAS3,r7
186 tlbwe 207 tlbwe
187 208
188 xori r6,r4,1 209 xori r6,r4,1
@@ -232,8 +253,7 @@ skpinv: addi r6,r6,1 /* Increment */
232 ori r6,r6,PAGE_OFFSET@l 253 ori r6,r6,PAGE_OFFSET@l
233 rlwimi r6,r7,0,20,31 254 rlwimi r6,r7,0,20,31
234 mtspr SPRN_MAS2,r6 255 mtspr SPRN_MAS2,r6
235 li r7,(MAS3_SX|MAS3_SW|MAS3_SR) 256 mtspr SPRN_MAS3,r8
236 mtspr SPRN_MAS3,r7
237 tlbwe 257 tlbwe
238 258
239/* 7. Jump to KERNELBASE mapping */ 259/* 7. Jump to KERNELBASE mapping */
@@ -283,7 +303,10 @@ skpinv: addi r6,r6,1 /* Increment */
283 SET_IVOR(12, WatchdogTimer); 303 SET_IVOR(12, WatchdogTimer);
284 SET_IVOR(13, DataTLBError); 304 SET_IVOR(13, DataTLBError);
285 SET_IVOR(14, InstructionTLBError); 305 SET_IVOR(14, InstructionTLBError);
286 SET_IVOR(15, Debug); 306 SET_IVOR(15, DebugDebug);
307#if defined(CONFIG_E500)
308 SET_IVOR(15, DebugCrit);
309#endif
287 SET_IVOR(32, SPEUnavailable); 310 SET_IVOR(32, SPEUnavailable);
288 SET_IVOR(33, SPEFloatingPointData); 311 SET_IVOR(33, SPEFloatingPointData);
289 SET_IVOR(34, SPEFloatingPointRound); 312 SET_IVOR(34, SPEFloatingPointRound);
@@ -718,7 +741,10 @@ interrupt_base:
718 741
719 742
720 /* Debug Interrupt */ 743 /* Debug Interrupt */
721 DEBUG_EXCEPTION 744 DEBUG_DEBUG_EXCEPTION
745#if defined(CONFIG_E500)
746 DEBUG_CRIT_EXCEPTION
747#endif
722 748
723/* 749/*
724 * Local functions 750 * Local functions
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c
index 2f50bb5d00f9..9971159c8040 100644
--- a/arch/powerpc/kernel/ibmebus.c
+++ b/arch/powerpc/kernel/ibmebus.c
@@ -183,7 +183,7 @@ static int ibmebus_create_devices(const struct of_device_id *matches)
183 ret = ibmebus_create_device(child); 183 ret = ibmebus_create_device(child);
184 if (ret) { 184 if (ret) {
185 printk(KERN_ERR "%s: failed to create device (%i)", 185 printk(KERN_ERR "%s: failed to create device (%i)",
186 __FUNCTION__, ret); 186 __func__, ret);
187 of_node_put(child); 187 of_node_put(child);
188 break; 188 break;
189 } 189 }
@@ -269,7 +269,7 @@ static ssize_t ibmebus_store_probe(struct bus_type *bus,
269 if (bus_find_device(&ibmebus_bus_type, NULL, path, 269 if (bus_find_device(&ibmebus_bus_type, NULL, path,
270 ibmebus_match_path)) { 270 ibmebus_match_path)) {
271 printk(KERN_WARNING "%s: %s has already been probed\n", 271 printk(KERN_WARNING "%s: %s has already been probed\n",
272 __FUNCTION__, path); 272 __func__, path);
273 rc = -EEXIST; 273 rc = -EEXIST;
274 goto out; 274 goto out;
275 } 275 }
@@ -279,7 +279,7 @@ static ssize_t ibmebus_store_probe(struct bus_type *bus,
279 of_node_put(dn); 279 of_node_put(dn);
280 } else { 280 } else {
281 printk(KERN_WARNING "%s: no such device node: %s\n", 281 printk(KERN_WARNING "%s: no such device node: %s\n",
282 __FUNCTION__, path); 282 __func__, path);
283 rc = -ENODEV; 283 rc = -ENODEV;
284 } 284 }
285 285
@@ -308,7 +308,7 @@ static ssize_t ibmebus_store_remove(struct bus_type *bus,
308 return count; 308 return count;
309 } else { 309 } else {
310 printk(KERN_WARNING "%s: %s not on the bus\n", 310 printk(KERN_WARNING "%s: %s not on the bus\n",
311 __FUNCTION__, path); 311 __func__, path);
312 312
313 kfree(path); 313 kfree(path);
314 return -ENODEV; 314 return -ENODEV;
@@ -337,14 +337,14 @@ static int __init ibmebus_bus_init(void)
337 err = of_bus_type_init(&ibmebus_bus_type, "ibmebus"); 337 err = of_bus_type_init(&ibmebus_bus_type, "ibmebus");
338 if (err) { 338 if (err) {
339 printk(KERN_ERR "%s: failed to register IBM eBus.\n", 339 printk(KERN_ERR "%s: failed to register IBM eBus.\n",
340 __FUNCTION__); 340 __func__);
341 return err; 341 return err;
342 } 342 }
343 343
344 err = device_register(&ibmebus_bus_device); 344 err = device_register(&ibmebus_bus_device);
345 if (err) { 345 if (err) {
346 printk(KERN_WARNING "%s: device_register returned %i\n", 346 printk(KERN_WARNING "%s: device_register returned %i\n",
347 __FUNCTION__, err); 347 __func__, err);
348 bus_unregister(&ibmebus_bus_type); 348 bus_unregister(&ibmebus_bus_type);
349 349
350 return err; 350 return err;
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 8f1f4e539c4b..0c663669bc32 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -520,7 +520,7 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
520 unsigned int order; 520 unsigned int order;
521 521
522 if (!tbl || !tbl->it_map) { 522 if (!tbl || !tbl->it_map) {
523 printk(KERN_ERR "%s: expected TCE map for %s\n", __FUNCTION__, 523 printk(KERN_ERR "%s: expected TCE map for %s\n", __func__,
524 node_name); 524 node_name);
525 return; 525 return;
526 } 526 }
@@ -530,7 +530,7 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
530 for (i = 0; i < (tbl->it_size/64); i++) { 530 for (i = 0; i < (tbl->it_size/64); i++) {
531 if (tbl->it_map[i] != 0) { 531 if (tbl->it_map[i] != 0) {
532 printk(KERN_WARNING "%s: Unexpected TCEs for %s\n", 532 printk(KERN_WARNING "%s: Unexpected TCEs for %s\n",
533 __FUNCTION__, node_name); 533 __func__, node_name);
534 break; 534 break;
535 } 535 }
536 } 536 }
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 292163f5b39a..425616f92d18 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -114,7 +114,7 @@ static inline void set_soft_enabled(unsigned long enable)
114 : : "r" (enable), "i" (offsetof(struct paca_struct, soft_enabled))); 114 : : "r" (enable), "i" (offsetof(struct paca_struct, soft_enabled)));
115} 115}
116 116
117void local_irq_restore(unsigned long en) 117void raw_local_irq_restore(unsigned long en)
118{ 118{
119 /* 119 /*
120 * get_paca()->soft_enabled = en; 120 * get_paca()->soft_enabled = en;
@@ -174,6 +174,7 @@ void local_irq_restore(unsigned long en)
174 174
175 __hard_irq_enable(); 175 __hard_irq_enable();
176} 176}
177EXPORT_SYMBOL(raw_local_irq_restore);
177#endif /* CONFIG_PPC64 */ 178#endif /* CONFIG_PPC64 */
178 179
179int show_interrupts(struct seq_file *p, void *v) 180int show_interrupts(struct seq_file *p, void *v)
@@ -310,8 +311,21 @@ void do_IRQ(struct pt_regs *regs)
310 handler = &__do_IRQ; 311 handler = &__do_IRQ;
311 irqtp->task = curtp->task; 312 irqtp->task = curtp->task;
312 irqtp->flags = 0; 313 irqtp->flags = 0;
314
315 /* Copy the softirq bits in preempt_count so that the
316 * softirq checks work in the hardirq context.
317 */
318 irqtp->preempt_count =
319 (irqtp->preempt_count & ~SOFTIRQ_MASK) |
320 (curtp->preempt_count & SOFTIRQ_MASK);
321
313 call_handle_irq(irq, desc, irqtp, handler); 322 call_handle_irq(irq, desc, irqtp, handler);
314 irqtp->task = NULL; 323 irqtp->task = NULL;
324
325
326 /* Set any flag that may have been set on the
327 * alternate stack
328 */
315 if (irqtp->flags) 329 if (irqtp->flags)
316 set_bits(irqtp->flags, &curtp->flags); 330 set_bits(irqtp->flags, &curtp->flags);
317 } else 331 } else
@@ -357,7 +371,7 @@ void irq_ctx_init(void)
357 memset((void *)softirq_ctx[i], 0, THREAD_SIZE); 371 memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
358 tp = softirq_ctx[i]; 372 tp = softirq_ctx[i];
359 tp->cpu = i; 373 tp->cpu = i;
360 tp->preempt_count = SOFTIRQ_OFFSET; 374 tp->preempt_count = 0;
361 375
362 memset((void *)hardirq_ctx[i], 0, THREAD_SIZE); 376 memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
363 tp = hardirq_ctx[i]; 377 tp = hardirq_ctx[i];
diff --git a/arch/powerpc/kernel/isa-bridge.c b/arch/powerpc/kernel/isa-bridge.c
index ee172aa42aa7..289af348978d 100644
--- a/arch/powerpc/kernel/isa-bridge.c
+++ b/arch/powerpc/kernel/isa-bridge.c
@@ -80,13 +80,13 @@ static void __devinit pci_process_ISA_OF_ranges(struct device_node *isa_node,
80 * (size depending on dev->n_addr_cells) 80 * (size depending on dev->n_addr_cells)
81 * cell 5: the size of the range 81 * cell 5: the size of the range
82 */ 82 */
83 if ((range->isa_addr.a_hi && ISA_SPACE_MASK) != ISA_SPACE_IO) { 83 if ((range->isa_addr.a_hi & ISA_SPACE_MASK) != ISA_SPACE_IO) {
84 range++; 84 range++;
85 rlen -= sizeof(struct isa_range); 85 rlen -= sizeof(struct isa_range);
86 if (rlen < sizeof(struct isa_range)) 86 if (rlen < sizeof(struct isa_range))
87 goto inval_range; 87 goto inval_range;
88 } 88 }
89 if ((range->isa_addr.a_hi && ISA_SPACE_MASK) != ISA_SPACE_IO) 89 if ((range->isa_addr.a_hi & ISA_SPACE_MASK) != ISA_SPACE_IO)
90 goto inval_range; 90 goto inval_range;
91 91
92 isa_addr = range->isa_addr.a_lo; 92 isa_addr = range->isa_addr.a_lo;
@@ -99,7 +99,7 @@ static void __devinit pci_process_ISA_OF_ranges(struct device_node *isa_node,
99 */ 99 */
100 if ((pci_addr != 0) || (isa_addr != 0)) { 100 if ((pci_addr != 0) || (isa_addr != 0)) {
101 printk(KERN_ERR "unexpected isa to pci mapping: %s\n", 101 printk(KERN_ERR "unexpected isa to pci mapping: %s\n",
102 __FUNCTION__); 102 __func__);
103 return; 103 return;
104 } 104 }
105 105
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index dcb89a88df46..1ffacc698ffb 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -226,7 +226,7 @@ static void parse_system_parameter_string(struct seq_file *m)
226 unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL); 226 unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
227 if (!local_buffer) { 227 if (!local_buffer) {
228 printk(KERN_ERR "%s %s kmalloc failure at line %d \n", 228 printk(KERN_ERR "%s %s kmalloc failure at line %d \n",
229 __FILE__, __FUNCTION__, __LINE__); 229 __FILE__, __func__, __LINE__);
230 return; 230 return;
231 } 231 }
232 232
@@ -243,14 +243,14 @@ static void parse_system_parameter_string(struct seq_file *m)
243 if (call_status != 0) { 243 if (call_status != 0) {
244 printk(KERN_INFO 244 printk(KERN_INFO
245 "%s %s Error calling get-system-parameter (0x%x)\n", 245 "%s %s Error calling get-system-parameter (0x%x)\n",
246 __FILE__, __FUNCTION__, call_status); 246 __FILE__, __func__, call_status);
247 } else { 247 } else {
248 int splpar_strlen; 248 int splpar_strlen;
249 int idx, w_idx; 249 int idx, w_idx;
250 char *workbuffer = kzalloc(SPLPAR_MAXLENGTH, GFP_KERNEL); 250 char *workbuffer = kzalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
251 if (!workbuffer) { 251 if (!workbuffer) {
252 printk(KERN_ERR "%s %s kmalloc failure at line %d \n", 252 printk(KERN_ERR "%s %s kmalloc failure at line %d \n",
253 __FILE__, __FUNCTION__, __LINE__); 253 __FILE__, __func__, __LINE__);
254 kfree(local_buffer); 254 kfree(local_buffer);
255 return; 255 return;
256 } 256 }
@@ -484,10 +484,10 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf,
484 current_weight = (resource >> 5 * 8) & 0xFF; 484 current_weight = (resource >> 5 * 8) & 0xFF;
485 485
486 pr_debug("%s: current_entitled = %lu, current_weight = %u\n", 486 pr_debug("%s: current_entitled = %lu, current_weight = %u\n",
487 __FUNCTION__, current_entitled, current_weight); 487 __func__, current_entitled, current_weight);
488 488
489 pr_debug("%s: new_entitled = %lu, new_weight = %u\n", 489 pr_debug("%s: new_entitled = %lu, new_weight = %u\n",
490 __FUNCTION__, *new_entitled_ptr, *new_weight_ptr); 490 __func__, *new_entitled_ptr, *new_weight_ptr);
491 491
492 retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr, 492 retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr,
493 *new_weight_ptr); 493 *new_weight_ptr);
@@ -502,7 +502,7 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf,
502 retval = -EINVAL; 502 retval = -EINVAL;
503 } else { 503 } else {
504 printk(KERN_WARNING "%s: received unknown hv return code %ld", 504 printk(KERN_WARNING "%s: received unknown hv return code %ld",
505 __FUNCTION__, retval); 505 __func__, retval);
506 retval = -EIO; 506 retval = -EIO;
507 } 507 }
508 508
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
index c0c8e8c3ced9..2d202f274e73 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -12,8 +12,9 @@
12#include <linux/kexec.h> 12#include <linux/kexec.h>
13#include <linux/reboot.h> 13#include <linux/reboot.h>
14#include <linux/threads.h> 14#include <linux/threads.h>
15#include <linux/lmb.h>
15#include <asm/machdep.h> 16#include <asm/machdep.h>
16#include <asm/lmb.h> 17#include <asm/prom.h>
17 18
18void machine_crash_shutdown(struct pt_regs *regs) 19void machine_crash_shutdown(struct pt_regs *regs)
19{ 20{
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 55f1a25085cd..ac163bd46cfd 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -15,7 +15,6 @@
15#include <asm/ptrace.h> 15#include <asm/ptrace.h>
16#include <asm/page.h> 16#include <asm/page.h>
17#include <asm/lppaca.h> 17#include <asm/lppaca.h>
18#include <asm/iseries/it_lp_reg_save.h>
19#include <asm/paca.h> 18#include <asm/paca.h>
20#include <asm/mmu.h> 19#include <asm/mmu.h>
21 20
@@ -25,13 +24,13 @@
25extern unsigned long __toc_start; 24extern unsigned long __toc_start;
26 25
27/* 26/*
28 * iSeries structure which the hypervisor knows about - this structure 27 * The structure which the hypervisor knows about - this structure
29 * should not cross a page boundary. The vpa_init/register_vpa call 28 * should not cross a page boundary. The vpa_init/register_vpa call
30 * is now known to fail if the lppaca structure crosses a page 29 * is now known to fail if the lppaca structure crosses a page
31 * boundary. The lppaca is also used on POWER5 pSeries boxes. The 30 * boundary. The lppaca is also used on legacy iSeries and POWER5
32 * lppaca is 640 bytes long, and cannot readily change since the 31 * pSeries boxes. The lppaca is 640 bytes long, and cannot readily
33 * hypervisor knows its layout, so a 1kB alignment will suffice to 32 * change since the hypervisor knows its layout, so a 1kB alignment
34 * ensure that it doesn't cross a page boundary. 33 * will suffice to ensure that it doesn't cross a page boundary.
35 */ 34 */
36struct lppaca lppaca[] = { 35struct lppaca lppaca[] = {
37 [0 ... (NR_CPUS-1)] = { 36 [0 ... (NR_CPUS-1)] = {
@@ -66,32 +65,17 @@ struct slb_shadow slb_shadow[] __cacheline_aligned = {
66 * processors. The processor VPD array needs one entry per physical 65 * processors. The processor VPD array needs one entry per physical
67 * processor (not thread). 66 * processor (not thread).
68 */ 67 */
69#define PACA_INIT_COMMON(number) \ 68#define PACA_INIT(number) \
69{ \
70 .lppaca_ptr = &lppaca[number], \ 70 .lppaca_ptr = &lppaca[number], \
71 .lock_token = 0x8000, \ 71 .lock_token = 0x8000, \
72 .paca_index = (number), /* Paca Index */ \ 72 .paca_index = (number), /* Paca Index */ \
73 .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ 73 .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \
74 .hw_cpu_id = 0xffff, \ 74 .hw_cpu_id = 0xffff, \
75 .slb_shadow_ptr = &slb_shadow[number], 75 .slb_shadow_ptr = &slb_shadow[number], \
76 76 .__current = &init_task, \
77#ifdef CONFIG_PPC_ISERIES
78#define PACA_INIT_ISERIES(number) \
79 .reg_save_ptr = &iseries_reg_save[number],
80
81#define PACA_INIT(number) \
82{ \
83 PACA_INIT_COMMON(number) \
84 PACA_INIT_ISERIES(number) \
85} 77}
86 78
87#else
88#define PACA_INIT(number) \
89{ \
90 PACA_INIT_COMMON(number) \
91}
92
93#endif
94
95struct paca_struct paca[] = { 79struct paca_struct paca[] = {
96 PACA_INIT(0), 80 PACA_INIT(0),
97#if NR_CPUS > 1 81#if NR_CPUS > 1
diff --git a/arch/powerpc/kernel/ppc32.h b/arch/powerpc/kernel/ppc32.h
index 90e562771791..fda05e2211d6 100644
--- a/arch/powerpc/kernel/ppc32.h
+++ b/arch/powerpc/kernel/ppc32.h
@@ -135,4 +135,6 @@ struct ucontext32 {
135 struct mcontext32 uc_mcontext; 135 struct mcontext32 uc_mcontext;
136}; 136};
137 137
138extern int copy_siginfo_to_user32(struct compat_siginfo __user *d, siginfo_t *s);
139
138#endif /* _PPC64_PPC32_H */ 140#endif /* _PPC64_PPC32_H */
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index 65d14e6ddc3c..09fcb50c45ae 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -44,10 +44,6 @@
44#include <asm/signal.h> 44#include <asm/signal.h>
45#include <asm/dcr.h> 45#include <asm/dcr.h>
46 46
47#ifdef CONFIG_PPC64
48EXPORT_SYMBOL(local_irq_restore);
49#endif
50
51#ifdef CONFIG_PPC32 47#ifdef CONFIG_PPC32
52extern void transfer_to_handler(void); 48extern void transfer_to_handler(void);
53extern void do_IRQ(struct pt_regs *regs); 49extern void do_IRQ(struct pt_regs *regs);
@@ -57,7 +53,6 @@ extern void program_check_exception(struct pt_regs *regs);
57extern void single_step_exception(struct pt_regs *regs); 53extern void single_step_exception(struct pt_regs *regs);
58extern int sys_sigreturn(struct pt_regs *regs); 54extern int sys_sigreturn(struct pt_regs *regs);
59 55
60EXPORT_SYMBOL(empty_zero_page);
61EXPORT_SYMBOL(clear_pages); 56EXPORT_SYMBOL(clear_pages);
62EXPORT_SYMBOL(copy_page); 57EXPORT_SYMBOL(copy_page);
63EXPORT_SYMBOL(ISA_DMA_THRESHOLD); 58EXPORT_SYMBOL(ISA_DMA_THRESHOLD);
@@ -78,6 +73,7 @@ EXPORT_SYMBOL(strncpy);
78EXPORT_SYMBOL(strcat); 73EXPORT_SYMBOL(strcat);
79EXPORT_SYMBOL(strlen); 74EXPORT_SYMBOL(strlen);
80EXPORT_SYMBOL(strcmp); 75EXPORT_SYMBOL(strcmp);
76EXPORT_SYMBOL(strncmp);
81 77
82EXPORT_SYMBOL(csum_partial); 78EXPORT_SYMBOL(csum_partial);
83EXPORT_SYMBOL(csum_partial_copy_generic); 79EXPORT_SYMBOL(csum_partial_copy_generic);
@@ -191,3 +187,4 @@ EXPORT_SYMBOL(intercept_table);
191EXPORT_SYMBOL(__mtdcr); 187EXPORT_SYMBOL(__mtdcr);
192EXPORT_SYMBOL(__mfdcr); 188EXPORT_SYMBOL(__mfdcr);
193#endif 189#endif
190EXPORT_SYMBOL(empty_zero_page);
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 4ec605521504..703100d5e458 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -868,11 +868,6 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
868 flush_spe_to_thread(current); 868 flush_spe_to_thread(current);
869 error = do_execve(filename, (char __user * __user *) a1, 869 error = do_execve(filename, (char __user * __user *) a1,
870 (char __user * __user *) a2, regs); 870 (char __user * __user *) a2, regs);
871 if (error == 0) {
872 task_lock(current);
873 current->ptrace &= ~PT_DTRACE;
874 task_unlock(current);
875 }
876 putname(filename); 871 putname(filename);
877out: 872out:
878 return error; 873 return error;
@@ -919,20 +914,6 @@ int validate_sp(unsigned long sp, struct task_struct *p,
919 return valid_irq_stack(sp, p, nbytes); 914 return valid_irq_stack(sp, p, nbytes);
920} 915}
921 916
922#ifdef CONFIG_PPC64
923#define MIN_STACK_FRAME 112 /* same as STACK_FRAME_OVERHEAD, in fact */
924#define FRAME_LR_SAVE 2
925#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
926#define REGS_MARKER 0x7265677368657265ul
927#define FRAME_MARKER 12
928#else
929#define MIN_STACK_FRAME 16
930#define FRAME_LR_SAVE 1
931#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
932#define REGS_MARKER 0x72656773ul
933#define FRAME_MARKER 2
934#endif
935
936EXPORT_SYMBOL(validate_sp); 917EXPORT_SYMBOL(validate_sp);
937 918
938unsigned long get_wchan(struct task_struct *p) 919unsigned long get_wchan(struct task_struct *p)
@@ -944,15 +925,15 @@ unsigned long get_wchan(struct task_struct *p)
944 return 0; 925 return 0;
945 926
946 sp = p->thread.ksp; 927 sp = p->thread.ksp;
947 if (!validate_sp(sp, p, MIN_STACK_FRAME)) 928 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
948 return 0; 929 return 0;
949 930
950 do { 931 do {
951 sp = *(unsigned long *)sp; 932 sp = *(unsigned long *)sp;
952 if (!validate_sp(sp, p, MIN_STACK_FRAME)) 933 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
953 return 0; 934 return 0;
954 if (count > 0) { 935 if (count > 0) {
955 ip = ((unsigned long *)sp)[FRAME_LR_SAVE]; 936 ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE];
956 if (!in_sched_functions(ip)) 937 if (!in_sched_functions(ip))
957 return ip; 938 return ip;
958 } 939 }
@@ -981,12 +962,12 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
981 lr = 0; 962 lr = 0;
982 printk("Call Trace:\n"); 963 printk("Call Trace:\n");
983 do { 964 do {
984 if (!validate_sp(sp, tsk, MIN_STACK_FRAME)) 965 if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD))
985 return; 966 return;
986 967
987 stack = (unsigned long *) sp; 968 stack = (unsigned long *) sp;
988 newsp = stack[0]; 969 newsp = stack[0];
989 ip = stack[FRAME_LR_SAVE]; 970 ip = stack[STACK_FRAME_LR_SAVE];
990 if (!firstframe || ip != lr) { 971 if (!firstframe || ip != lr) {
991 printk("["REG"] ["REG"] ", sp, ip); 972 printk("["REG"] ["REG"] ", sp, ip);
992 print_symbol("%s", ip); 973 print_symbol("%s", ip);
@@ -1000,8 +981,8 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
1000 * See if this is an exception frame. 981 * See if this is an exception frame.
1001 * We look for the "regshere" marker in the current frame. 982 * We look for the "regshere" marker in the current frame.
1002 */ 983 */
1003 if (validate_sp(sp, tsk, INT_FRAME_SIZE) 984 if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE)
1004 && stack[FRAME_MARKER] == REGS_MARKER) { 985 && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
1005 struct pt_regs *regs = (struct pt_regs *) 986 struct pt_regs *regs = (struct pt_regs *)
1006 (sp + STACK_FRAME_OVERHEAD); 987 (sp + STACK_FRAME_OVERHEAD);
1007 printk("--- Exception: %lx", regs->trap); 988 printk("--- Exception: %lx", regs->trap);
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index eac97f48b9b8..3bfe7837e820 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -31,10 +31,10 @@
31#include <linux/kexec.h> 31#include <linux/kexec.h>
32#include <linux/debugfs.h> 32#include <linux/debugfs.h>
33#include <linux/irq.h> 33#include <linux/irq.h>
34#include <linux/lmb.h>
34 35
35#include <asm/prom.h> 36#include <asm/prom.h>
36#include <asm/rtas.h> 37#include <asm/rtas.h>
37#include <asm/lmb.h>
38#include <asm/page.h> 38#include <asm/page.h>
39#include <asm/processor.h> 39#include <asm/processor.h>
40#include <asm/irq.h> 40#include <asm/irq.h>
@@ -51,6 +51,7 @@
51#include <asm/machdep.h> 51#include <asm/machdep.h>
52#include <asm/pSeries_reconfig.h> 52#include <asm/pSeries_reconfig.h>
53#include <asm/pci-bridge.h> 53#include <asm/pci-bridge.h>
54#include <asm/phyp_dump.h>
54#include <asm/kexec.h> 55#include <asm/kexec.h>
55 56
56#ifdef DEBUG 57#ifdef DEBUG
@@ -436,7 +437,7 @@ early_param("mem", early_parse_mem);
436 * The device tree may be allocated beyond our memory limit, or inside the 437 * The device tree may be allocated beyond our memory limit, or inside the
437 * crash kernel region for kdump. If so, move it out of the way. 438 * crash kernel region for kdump. If so, move it out of the way.
438 */ 439 */
439static void move_device_tree(void) 440static void __init move_device_tree(void)
440{ 441{
441 unsigned long start, size; 442 unsigned long start, size;
442 void *p; 443 void *p;
@@ -1040,6 +1041,87 @@ static void __init early_reserve_mem(void)
1040#endif 1041#endif
1041} 1042}
1042 1043
1044#ifdef CONFIG_PHYP_DUMP
1045/**
1046 * phyp_dump_calculate_reserve_size() - reserve variable boot area 5% or arg
1047 *
1048 * Function to find the largest size we need to reserve
1049 * during early boot process.
1050 *
1051 * It either looks for boot param and returns that OR
1052 * returns larger of 256 or 5% rounded down to multiples of 256MB.
1053 *
1054 */
1055static inline unsigned long phyp_dump_calculate_reserve_size(void)
1056{
1057 unsigned long tmp;
1058
1059 if (phyp_dump_info->reserve_bootvar)
1060 return phyp_dump_info->reserve_bootvar;
1061
1062 /* divide by 20 to get 5% of value */
1063 tmp = lmb_end_of_DRAM();
1064 do_div(tmp, 20);
1065
1066 /* round it down in multiples of 256 */
1067 tmp = tmp & ~0x0FFFFFFFUL;
1068
1069 return (tmp > PHYP_DUMP_RMR_END ? tmp : PHYP_DUMP_RMR_END);
1070}
1071
1072/**
1073 * phyp_dump_reserve_mem() - reserve all not-yet-dumped mmemory
1074 *
1075 * This routine may reserve memory regions in the kernel only
1076 * if the system is supported and a dump was taken in last
1077 * boot instance or if the hardware is supported and the
1078 * scratch area needs to be setup. In other instances it returns
1079 * without reserving anything. The memory in case of dump being
1080 * active is freed when the dump is collected (by userland tools).
1081 */
1082static void __init phyp_dump_reserve_mem(void)
1083{
1084 unsigned long base, size;
1085 unsigned long variable_reserve_size;
1086
1087 if (!phyp_dump_info->phyp_dump_configured) {
1088 printk(KERN_ERR "Phyp-dump not supported on this hardware\n");
1089 return;
1090 }
1091
1092 if (!phyp_dump_info->phyp_dump_at_boot) {
1093 printk(KERN_INFO "Phyp-dump disabled at boot time\n");
1094 return;
1095 }
1096
1097 variable_reserve_size = phyp_dump_calculate_reserve_size();
1098
1099 if (phyp_dump_info->phyp_dump_is_active) {
1100 /* Reserve *everything* above RMR.Area freed by userland tools*/
1101 base = variable_reserve_size;
1102 size = lmb_end_of_DRAM() - base;
1103
1104 /* XXX crashed_ram_end is wrong, since it may be beyond
1105 * the memory_limit, it will need to be adjusted. */
1106 lmb_reserve(base, size);
1107
1108 phyp_dump_info->init_reserve_start = base;
1109 phyp_dump_info->init_reserve_size = size;
1110 } else {
1111 size = phyp_dump_info->cpu_state_size +
1112 phyp_dump_info->hpte_region_size +
1113 variable_reserve_size;
1114 base = lmb_end_of_DRAM() - size;
1115 lmb_reserve(base, size);
1116 phyp_dump_info->init_reserve_start = base;
1117 phyp_dump_info->init_reserve_size = size;
1118 }
1119}
1120#else
1121static inline void __init phyp_dump_reserve_mem(void) {}
1122#endif /* CONFIG_PHYP_DUMP && CONFIG_PPC_RTAS */
1123
1124
1043void __init early_init_devtree(void *params) 1125void __init early_init_devtree(void *params)
1044{ 1126{
1045 DBG(" -> early_init_devtree(%p)\n", params); 1127 DBG(" -> early_init_devtree(%p)\n", params);
@@ -1052,6 +1134,11 @@ void __init early_init_devtree(void *params)
1052 of_scan_flat_dt(early_init_dt_scan_rtas, NULL); 1134 of_scan_flat_dt(early_init_dt_scan_rtas, NULL);
1053#endif 1135#endif
1054 1136
1137#ifdef CONFIG_PHYP_DUMP
1138 /* scan tree to see if dump occured during last boot */
1139 of_scan_flat_dt(early_init_dt_scan_phyp_dump, NULL);
1140#endif
1141
1055 /* Retrieve various informations from the /chosen node of the 1142 /* Retrieve various informations from the /chosen node of the
1056 * device-tree, including the platform type, initrd location and 1143 * device-tree, including the platform type, initrd location and
1057 * size, TCE reserve, and more ... 1144 * size, TCE reserve, and more ...
@@ -1072,6 +1159,7 @@ void __init early_init_devtree(void *params)
1072 reserve_kdump_trampoline(); 1159 reserve_kdump_trampoline();
1073 reserve_crashkernel(); 1160 reserve_crashkernel();
1074 early_reserve_mem(); 1161 early_reserve_mem();
1162 phyp_dump_reserve_mem();
1075 1163
1076 lmb_enforce_memory_limit(memory_limit); 1164 lmb_enforce_memory_limit(memory_limit);
1077 lmb_analyze(); 1165 lmb_analyze();
@@ -1244,12 +1332,14 @@ EXPORT_SYMBOL(of_node_put);
1244 */ 1332 */
1245void of_attach_node(struct device_node *np) 1333void of_attach_node(struct device_node *np)
1246{ 1334{
1247 write_lock(&devtree_lock); 1335 unsigned long flags;
1336
1337 write_lock_irqsave(&devtree_lock, flags);
1248 np->sibling = np->parent->child; 1338 np->sibling = np->parent->child;
1249 np->allnext = allnodes; 1339 np->allnext = allnodes;
1250 np->parent->child = np; 1340 np->parent->child = np;
1251 allnodes = np; 1341 allnodes = np;
1252 write_unlock(&devtree_lock); 1342 write_unlock_irqrestore(&devtree_lock, flags);
1253} 1343}
1254 1344
1255/* 1345/*
@@ -1260,8 +1350,9 @@ void of_attach_node(struct device_node *np)
1260void of_detach_node(struct device_node *np) 1350void of_detach_node(struct device_node *np)
1261{ 1351{
1262 struct device_node *parent; 1352 struct device_node *parent;
1353 unsigned long flags;
1263 1354
1264 write_lock(&devtree_lock); 1355 write_lock_irqsave(&devtree_lock, flags);
1265 1356
1266 parent = np->parent; 1357 parent = np->parent;
1267 if (!parent) 1358 if (!parent)
@@ -1292,7 +1383,7 @@ void of_detach_node(struct device_node *np)
1292 of_node_set_flag(np, OF_DETACHED); 1383 of_node_set_flag(np, OF_DETACHED);
1293 1384
1294out_unlock: 1385out_unlock:
1295 write_unlock(&devtree_lock); 1386 write_unlock_irqrestore(&devtree_lock, flags);
1296} 1387}
1297 1388
1298#ifdef CONFIG_PPC_PSERIES 1389#ifdef CONFIG_PPC_PSERIES
@@ -1373,20 +1464,21 @@ __initcall(prom_reconfig_setup);
1373int prom_add_property(struct device_node* np, struct property* prop) 1464int prom_add_property(struct device_node* np, struct property* prop)
1374{ 1465{
1375 struct property **next; 1466 struct property **next;
1467 unsigned long flags;
1376 1468
1377 prop->next = NULL; 1469 prop->next = NULL;
1378 write_lock(&devtree_lock); 1470 write_lock_irqsave(&devtree_lock, flags);
1379 next = &np->properties; 1471 next = &np->properties;
1380 while (*next) { 1472 while (*next) {
1381 if (strcmp(prop->name, (*next)->name) == 0) { 1473 if (strcmp(prop->name, (*next)->name) == 0) {
1382 /* duplicate ! don't insert it */ 1474 /* duplicate ! don't insert it */
1383 write_unlock(&devtree_lock); 1475 write_unlock_irqrestore(&devtree_lock, flags);
1384 return -1; 1476 return -1;
1385 } 1477 }
1386 next = &(*next)->next; 1478 next = &(*next)->next;
1387 } 1479 }
1388 *next = prop; 1480 *next = prop;
1389 write_unlock(&devtree_lock); 1481 write_unlock_irqrestore(&devtree_lock, flags);
1390 1482
1391#ifdef CONFIG_PROC_DEVICETREE 1483#ifdef CONFIG_PROC_DEVICETREE
1392 /* try to add to proc as well if it was initialized */ 1484 /* try to add to proc as well if it was initialized */
@@ -1406,9 +1498,10 @@ int prom_add_property(struct device_node* np, struct property* prop)
1406int prom_remove_property(struct device_node *np, struct property *prop) 1498int prom_remove_property(struct device_node *np, struct property *prop)
1407{ 1499{
1408 struct property **next; 1500 struct property **next;
1501 unsigned long flags;
1409 int found = 0; 1502 int found = 0;
1410 1503
1411 write_lock(&devtree_lock); 1504 write_lock_irqsave(&devtree_lock, flags);
1412 next = &np->properties; 1505 next = &np->properties;
1413 while (*next) { 1506 while (*next) {
1414 if (*next == prop) { 1507 if (*next == prop) {
@@ -1421,7 +1514,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
1421 } 1514 }
1422 next = &(*next)->next; 1515 next = &(*next)->next;
1423 } 1516 }
1424 write_unlock(&devtree_lock); 1517 write_unlock_irqrestore(&devtree_lock, flags);
1425 1518
1426 if (!found) 1519 if (!found)
1427 return -ENODEV; 1520 return -ENODEV;
@@ -1447,9 +1540,10 @@ int prom_update_property(struct device_node *np,
1447 struct property *oldprop) 1540 struct property *oldprop)
1448{ 1541{
1449 struct property **next; 1542 struct property **next;
1543 unsigned long flags;
1450 int found = 0; 1544 int found = 0;
1451 1545
1452 write_lock(&devtree_lock); 1546 write_lock_irqsave(&devtree_lock, flags);
1453 next = &np->properties; 1547 next = &np->properties;
1454 while (*next) { 1548 while (*next) {
1455 if (*next == oldprop) { 1549 if (*next == oldprop) {
@@ -1463,7 +1557,7 @@ int prom_update_property(struct device_node *np,
1463 } 1557 }
1464 next = &(*next)->next; 1558 next = &(*next)->next;
1465 } 1559 }
1466 write_unlock(&devtree_lock); 1560 write_unlock_irqrestore(&devtree_lock, flags);
1467 1561
1468 if (!found) 1562 if (!found)
1469 return -ENODEV; 1563 return -ENODEV;
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 5ab4c8466cc9..6d6df1e60325 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -2240,6 +2240,14 @@ static void __init fixup_device_tree_efika(void)
2240 if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0)) 2240 if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0))
2241 prom_setprop(node, "/", "device_type", "efika", sizeof("efika")); 2241 prom_setprop(node, "/", "device_type", "efika", sizeof("efika"));
2242 2242
2243 /* CODEGEN,description is exposed in /proc/cpuinfo so
2244 fix that too */
2245 rv = prom_getprop(node, "CODEGEN,description", prop, sizeof(prop));
2246 if (rv != PROM_ERROR && (strstr(prop, "CHRP")))
2247 prom_setprop(node, "/", "CODEGEN,description",
2248 "Efika 5200B PowerPC System",
2249 sizeof("Efika 5200B PowerPC System"));
2250
2243 /* Fixup bestcomm interrupts property */ 2251 /* Fixup bestcomm interrupts property */
2244 node = call_prom("finddevice", 1, 1, ADDR("/builtin/bestcomm")); 2252 node = call_prom("finddevice", 1, 1, ADDR("/builtin/bestcomm"));
2245 if (PHANDLE_VALID(node)) { 2253 if (PHANDLE_VALID(node)) {
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c
index 4c1de6af4c09..9d30e10970ac 100644
--- a/arch/powerpc/kernel/ptrace32.c
+++ b/arch/powerpc/kernel/ptrace32.c
@@ -29,12 +29,15 @@
29#include <linux/security.h> 29#include <linux/security.h>
30#include <linux/signal.h> 30#include <linux/signal.h>
31#include <linux/compat.h> 31#include <linux/compat.h>
32#include <linux/elf.h>
32 33
33#include <asm/uaccess.h> 34#include <asm/uaccess.h>
34#include <asm/page.h> 35#include <asm/page.h>
35#include <asm/pgtable.h> 36#include <asm/pgtable.h>
36#include <asm/system.h> 37#include <asm/system.h>
37 38
39#include "ppc32.h"
40
38/* 41/*
39 * does not yet catch signals sent when the child dies. 42 * does not yet catch signals sent when the child dies.
40 * in exit.c or in signal.c. 43 * in exit.c or in signal.c.
@@ -64,6 +67,27 @@ static long compat_ptrace_old(struct task_struct *child, long request,
64 return -EPERM; 67 return -EPERM;
65} 68}
66 69
70static int compat_ptrace_getsiginfo(struct task_struct *child, compat_siginfo_t __user *data)
71{
72 siginfo_t lastinfo;
73 int error = -ESRCH;
74
75 read_lock(&tasklist_lock);
76 if (likely(child->sighand != NULL)) {
77 error = -EINVAL;
78 spin_lock_irq(&child->sighand->siglock);
79 if (likely(child->last_siginfo != NULL)) {
80 lastinfo = *child->last_siginfo;
81 error = 0;
82 }
83 spin_unlock_irq(&child->sighand->siglock);
84 }
85 read_unlock(&tasklist_lock);
86 if (!error)
87 return copy_siginfo_to_user32(data, &lastinfo);
88 return error;
89}
90
67long compat_arch_ptrace(struct task_struct *child, compat_long_t request, 91long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
68 compat_ulong_t caddr, compat_ulong_t cdata) 92 compat_ulong_t caddr, compat_ulong_t cdata)
69{ 93{
@@ -282,6 +306,9 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
282 0, PT_REGS_COUNT * sizeof(compat_long_t), 306 0, PT_REGS_COUNT * sizeof(compat_long_t),
283 compat_ptr(data)); 307 compat_ptr(data));
284 308
309 case PTRACE_GETSIGINFO:
310 return compat_ptrace_getsiginfo(child, compat_ptr(data));
311
285 case PTRACE_GETFPREGS: 312 case PTRACE_GETFPREGS:
286 case PTRACE_SETFPREGS: 313 case PTRACE_SETFPREGS:
287 case PTRACE_GETVRREGS: 314 case PTRACE_GETVRREGS:
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index fe8d95146893..34843c318419 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -22,6 +22,7 @@
22#include <linux/smp.h> 22#include <linux/smp.h>
23#include <linux/completion.h> 23#include <linux/completion.h>
24#include <linux/cpumask.h> 24#include <linux/cpumask.h>
25#include <linux/lmb.h>
25 26
26#include <asm/prom.h> 27#include <asm/prom.h>
27#include <asm/rtas.h> 28#include <asm/rtas.h>
@@ -33,7 +34,6 @@
33#include <asm/system.h> 34#include <asm/system.h>
34#include <asm/delay.h> 35#include <asm/delay.h>
35#include <asm/uaccess.h> 36#include <asm/uaccess.h>
36#include <asm/lmb.h>
37#include <asm/udbg.h> 37#include <asm/udbg.h>
38#include <asm/syscalls.h> 38#include <asm/syscalls.h>
39#include <asm/smp.h> 39#include <asm/smp.h>
@@ -506,7 +506,7 @@ int rtas_error_rc(int rtas_rc)
506 break; 506 break;
507 default: 507 default:
508 printk(KERN_ERR "%s: unexpected RTAS error %d\n", 508 printk(KERN_ERR "%s: unexpected RTAS error %d\n",
509 __FUNCTION__, rtas_rc); 509 __func__, rtas_rc);
510 rc = -ERANGE; 510 rc = -ERANGE;
511 break; 511 break;
512 } 512 }
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c
index 538baf46f15f..627f126d1848 100644
--- a/arch/powerpc/kernel/rtas_flash.c
+++ b/arch/powerpc/kernel/rtas_flash.c
@@ -807,7 +807,7 @@ int __init rtas_flash_init(void)
807 rtas_block_ctor); 807 rtas_block_ctor);
808 if (!flash_block_cache) { 808 if (!flash_block_cache) {
809 printk(KERN_ERR "%s: failed to create block cache\n", 809 printk(KERN_ERR "%s: failed to create block cache\n",
810 __FUNCTION__); 810 __func__);
811 rc = -ENOMEM; 811 rc = -ENOMEM;
812 goto cleanup; 812 goto cleanup;
813 } 813 }
diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c
index 433a0a0949fb..3ab88a9dc70d 100644
--- a/arch/powerpc/kernel/rtas_pci.c
+++ b/arch/powerpc/kernel/rtas_pci.c
@@ -56,21 +56,6 @@ static inline int config_access_valid(struct pci_dn *dn, int where)
56 return 0; 56 return 0;
57} 57}
58 58
59static int of_device_available(struct device_node * dn)
60{
61 const char *status;
62
63 status = of_get_property(dn, "status", NULL);
64
65 if (!status)
66 return 1;
67
68 if (!strcmp(status, "okay"))
69 return 1;
70
71 return 0;
72}
73
74int rtas_read_config(struct pci_dn *pdn, int where, int size, u32 *val) 59int rtas_read_config(struct pci_dn *pdn, int where, int size, u32 *val)
75{ 60{
76 int returnval = -1; 61 int returnval = -1;
@@ -117,7 +102,7 @@ static int rtas_pci_read_config(struct pci_bus *bus,
117 for (dn = busdn->child; dn; dn = dn->sibling) { 102 for (dn = busdn->child; dn; dn = dn->sibling) {
118 struct pci_dn *pdn = PCI_DN(dn); 103 struct pci_dn *pdn = PCI_DN(dn);
119 if (pdn && pdn->devfn == devfn 104 if (pdn && pdn->devfn == devfn
120 && of_device_available(dn)) 105 && of_device_is_available(dn))
121 return rtas_read_config(pdn, where, size, val); 106 return rtas_read_config(pdn, where, size, val);
122 } 107 }
123 108
@@ -164,7 +149,7 @@ static int rtas_pci_write_config(struct pci_bus *bus,
164 for (dn = busdn->child; dn; dn = dn->sibling) { 149 for (dn = busdn->child; dn; dn = dn->sibling) {
165 struct pci_dn *pdn = PCI_DN(dn); 150 struct pci_dn *pdn = PCI_DN(dn);
166 if (pdn && pdn->devfn == devfn 151 if (pdn && pdn->devfn == devfn
167 && of_device_available(dn)) 152 && of_device_is_available(dn))
168 return rtas_write_config(pdn, where, size, val); 153 return rtas_write_config(pdn, where, size, val);
169 } 154 }
170 return PCIBIOS_DEVICE_NOT_FOUND; 155 return PCIBIOS_DEVICE_NOT_FOUND;
@@ -326,7 +311,7 @@ int pcibios_remove_root_bus(struct pci_controller *phb)
326 311
327 res = b->resource[0]; 312 res = b->resource[0];
328 if (!res->flags) { 313 if (!res->flags) {
329 printk(KERN_ERR "%s: no IO resource for PHB %s\n", __FUNCTION__, 314 printk(KERN_ERR "%s: no IO resource for PHB %s\n", __func__,
330 b->name); 315 b->name);
331 return 1; 316 return 1;
332 } 317 }
@@ -334,13 +319,13 @@ int pcibios_remove_root_bus(struct pci_controller *phb)
334 rc = pcibios_unmap_io_space(b); 319 rc = pcibios_unmap_io_space(b);
335 if (rc) { 320 if (rc) {
336 printk(KERN_ERR "%s: failed to unmap IO on bus %s\n", 321 printk(KERN_ERR "%s: failed to unmap IO on bus %s\n",
337 __FUNCTION__, b->name); 322 __func__, b->name);
338 return 1; 323 return 1;
339 } 324 }
340 325
341 if (release_resource(res)) { 326 if (release_resource(res)) {
342 printk(KERN_ERR "%s: failed to release IO on bus %s\n", 327 printk(KERN_ERR "%s: failed to release IO on bus %s\n",
343 __FUNCTION__, b->name); 328 __func__, b->name);
344 return 1; 329 return 1;
345 } 330 }
346 331
@@ -348,13 +333,13 @@ int pcibios_remove_root_bus(struct pci_controller *phb)
348 res = b->resource[i]; 333 res = b->resource[i];
349 if (!res->flags && i == 0) { 334 if (!res->flags && i == 0) {
350 printk(KERN_ERR "%s: no MEM resource for PHB %s\n", 335 printk(KERN_ERR "%s: no MEM resource for PHB %s\n",
351 __FUNCTION__, b->name); 336 __func__, b->name);
352 return 1; 337 return 1;
353 } 338 }
354 if (res->flags && release_resource(res)) { 339 if (res->flags && release_resource(res)) {
355 printk(KERN_ERR 340 printk(KERN_ERR
356 "%s: failed to release IO %d on bus %s\n", 341 "%s: failed to release IO %d on bus %s\n",
357 __FUNCTION__, i, b->name); 342 __func__, i, b->name);
358 return 1; 343 return 1;
359 } 344 }
360 } 345 }
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 6adb5a1e98bb..db540eab09f4 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -34,6 +34,7 @@
34#include <linux/serial_8250.h> 34#include <linux/serial_8250.h>
35#include <linux/debugfs.h> 35#include <linux/debugfs.h>
36#include <linux/percpu.h> 36#include <linux/percpu.h>
37#include <linux/lmb.h>
37#include <asm/io.h> 38#include <asm/io.h>
38#include <asm/prom.h> 39#include <asm/prom.h>
39#include <asm/processor.h> 40#include <asm/processor.h>
@@ -56,7 +57,6 @@
56#include <asm/cache.h> 57#include <asm/cache.h>
57#include <asm/page.h> 58#include <asm/page.h>
58#include <asm/mmu.h> 59#include <asm/mmu.h>
59#include <asm/lmb.h>
60#include <asm/xmon.h> 60#include <asm/xmon.h>
61#include <asm/cputhreads.h> 61#include <asm/cputhreads.h>
62 62
@@ -167,6 +167,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
167 unsigned short min; 167 unsigned short min;
168 168
169 if (cpu_id == NR_CPUS) { 169 if (cpu_id == NR_CPUS) {
170 struct device_node *root;
171 const char *model = NULL;
170#if defined(CONFIG_SMP) && defined(CONFIG_PPC32) 172#if defined(CONFIG_SMP) && defined(CONFIG_PPC32)
171 unsigned long bogosum = 0; 173 unsigned long bogosum = 0;
172 int i; 174 int i;
@@ -178,6 +180,13 @@ static int show_cpuinfo(struct seq_file *m, void *v)
178 seq_printf(m, "timebase\t: %lu\n", ppc_tb_freq); 180 seq_printf(m, "timebase\t: %lu\n", ppc_tb_freq);
179 if (ppc_md.name) 181 if (ppc_md.name)
180 seq_printf(m, "platform\t: %s\n", ppc_md.name); 182 seq_printf(m, "platform\t: %s\n", ppc_md.name);
183 root = of_find_node_by_path("/");
184 if (root)
185 model = of_get_property(root, "model", NULL);
186 if (model)
187 seq_printf(m, "model\t\t: %s\n", model);
188 of_node_put(root);
189
181 if (ppc_md.show_cpuinfo != NULL) 190 if (ppc_md.show_cpuinfo != NULL)
182 ppc_md.show_cpuinfo(m); 191 ppc_md.show_cpuinfo(m);
183 192
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 06d918d94dd1..36f6779c88d4 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -164,6 +164,18 @@ int __init ppc_setup_l2cr(char *str)
164} 164}
165__setup("l2cr=", ppc_setup_l2cr); 165__setup("l2cr=", ppc_setup_l2cr);
166 166
167/* Checks "l3cr=xxxx" command-line option */
168int __init ppc_setup_l3cr(char *str)
169{
170 if (cpu_has_feature(CPU_FTR_L3CR)) {
171 unsigned long val = simple_strtoul(str, NULL, 0);
172 printk(KERN_INFO "l3cr set to %lx\n", val);
173 _set_L3CR(val); /* and enable it */
174 }
175 return 1;
176}
177__setup("l3cr=", ppc_setup_l3cr);
178
167#ifdef CONFIG_GENERIC_NVRAM 179#ifdef CONFIG_GENERIC_NVRAM
168 180
169/* Generic nvram hooks used by drivers/char/gen_nvram.c */ 181/* Generic nvram hooks used by drivers/char/gen_nvram.c */
@@ -269,7 +281,7 @@ void __init setup_arch(char **cmdline_p)
269 if (ppc_md.panic) 281 if (ppc_md.panic)
270 setup_panic(); 282 setup_panic();
271 283
272 init_mm.start_code = PAGE_OFFSET; 284 init_mm.start_code = (unsigned long)_stext;
273 init_mm.end_code = (unsigned long) _etext; 285 init_mm.end_code = (unsigned long) _etext;
274 init_mm.end_data = (unsigned long) _edata; 286 init_mm.end_data = (unsigned long) _edata;
275 init_mm.brk = klimit; 287 init_mm.brk = klimit;
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 3b1529c103ef..31ada9fdfc5c 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -33,6 +33,8 @@
33#include <linux/serial_8250.h> 33#include <linux/serial_8250.h>
34#include <linux/bootmem.h> 34#include <linux/bootmem.h>
35#include <linux/pci.h> 35#include <linux/pci.h>
36#include <linux/lockdep.h>
37#include <linux/lmb.h>
36#include <asm/io.h> 38#include <asm/io.h>
37#include <asm/kdump.h> 39#include <asm/kdump.h>
38#include <asm/prom.h> 40#include <asm/prom.h>
@@ -55,7 +57,6 @@
55#include <asm/cache.h> 57#include <asm/cache.h>
56#include <asm/page.h> 58#include <asm/page.h>
57#include <asm/mmu.h> 59#include <asm/mmu.h>
58#include <asm/lmb.h>
59#include <asm/firmware.h> 60#include <asm/firmware.h>
60#include <asm/xmon.h> 61#include <asm/xmon.h>
61#include <asm/udbg.h> 62#include <asm/udbg.h>
@@ -178,6 +179,9 @@ void __init early_setup(unsigned long dt_ptr)
178 /* Enable early debugging if any specified (see udbg.h) */ 179 /* Enable early debugging if any specified (see udbg.h) */
179 udbg_early_init(); 180 udbg_early_init();
180 181
182 /* Initialize lockdep early or else spinlocks will blow */
183 lockdep_init();
184
181 DBG(" -> early_setup(), dt_ptr: 0x%lx\n", dt_ptr); 185 DBG(" -> early_setup(), dt_ptr: 0x%lx\n", dt_ptr);
182 186
183 /* 187 /*
@@ -510,7 +514,7 @@ void __init setup_arch(char **cmdline_p)
510 if (ppc_md.panic) 514 if (ppc_md.panic)
511 setup_panic(); 515 setup_panic();
512 516
513 init_mm.start_code = PAGE_OFFSET; 517 init_mm.start_code = (unsigned long)_stext;
514 init_mm.end_code = (unsigned long) _etext; 518 init_mm.end_code = (unsigned long) _etext;
515 init_mm.end_data = (unsigned long) _edata; 519 init_mm.end_data = (unsigned long) _edata;
516 init_mm.brk = klimit; 520 init_mm.brk = klimit;
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index d840bc772fd3..ad6943468ee9 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -621,6 +621,18 @@ int copy_siginfo_to_user32(struct compat_siginfo __user *d, siginfo_t *s)
621 621
622#define copy_siginfo_to_user copy_siginfo_to_user32 622#define copy_siginfo_to_user copy_siginfo_to_user32
623 623
624int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from)
625{
626 memset(to, 0, sizeof *to);
627
628 if (copy_from_user(to, from, 3*sizeof(int)) ||
629 copy_from_user(to->_sifields._pad,
630 from->_sifields._pad, SI_PAD_SIZE32))
631 return -EFAULT;
632
633 return 0;
634}
635
624/* 636/*
625 * Note: it is necessary to treat pid and sig as unsigned ints, with the 637 * Note: it is necessary to treat pid and sig as unsigned ints, with the
626 * corresponding cast to a signed int to insure that the proper conversion 638 * corresponding cast to a signed int to insure that the proper conversion
@@ -634,9 +646,10 @@ long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo
634 int ret; 646 int ret;
635 mm_segment_t old_fs = get_fs(); 647 mm_segment_t old_fs = get_fs();
636 648
637 if (copy_from_user (&info, uinfo, 3*sizeof(int)) || 649 ret = copy_siginfo_from_user32(&info, uinfo);
638 copy_from_user (info._sifields._pad, uinfo->_sifields._pad, SI_PAD_SIZE32)) 650 if (unlikely(ret))
639 return -EFAULT; 651 return ret;
652
640 set_fs (KERNEL_DS); 653 set_fs (KERNEL_DS);
641 /* The __user pointer cast is valid becasuse of the set_fs() */ 654 /* The __user pointer cast is valid becasuse of the set_fs() */
642 ret = sys_rt_sigqueueinfo((int)pid, (int)sig, (siginfo_t __user *) &info); 655 ret = sys_rt_sigqueueinfo((int)pid, (int)sig, (siginfo_t __user *) &info);
diff --git a/arch/powerpc/kernel/stacktrace.c b/arch/powerpc/kernel/stacktrace.c
new file mode 100644
index 000000000000..e3638eeaaae7
--- /dev/null
+++ b/arch/powerpc/kernel/stacktrace.c
@@ -0,0 +1,47 @@
1/*
2 * Stack trace utility
3 *
4 * Copyright 2008 Christoph Hellwig, IBM Corp.
5 *
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/sched.h>
14#include <linux/stacktrace.h>
15#include <asm/ptrace.h>
16#include <asm/asm-offsets.h>
17
18/*
19 * Save stack-backtrace addresses into a stack_trace buffer.
20 */
21void save_stack_trace(struct stack_trace *trace)
22{
23 unsigned long sp;
24
25 asm("mr %0,1" : "=r" (sp));
26
27 for (;;) {
28 unsigned long *stack = (unsigned long *) sp;
29 unsigned long newsp, ip;
30
31 if (!validate_sp(sp, current, STACK_FRAME_OVERHEAD))
32 return;
33
34 newsp = stack[0];
35 ip = stack[STACK_FRAME_LR_SAVE];
36
37 if (!trace->skip)
38 trace->entries[trace->nr_entries++] = ip;
39 else
40 trace->skip--;
41
42 if (trace->nr_entries >= trace->max_entries)
43 return;
44
45 sp = newsp;
46 }
47}
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c
index fee9ee2260b1..709f8cb8bfca 100644
--- a/arch/powerpc/kernel/sys_ppc32.c
+++ b/arch/powerpc/kernel/sys_ppc32.c
@@ -367,11 +367,6 @@ long compat_sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
367 367
368 error = compat_do_execve(filename, compat_ptr(a1), compat_ptr(a2), regs); 368 error = compat_do_execve(filename, compat_ptr(a1), compat_ptr(a2), regs);
369 369
370 if (error == 0) {
371 task_lock(current);
372 current->ptrace &= ~PT_DTRACE;
373 task_unlock(current);
374 }
375 putname(filename); 370 putname(filename);
376 371
377out: 372out:
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index d3437c4c4a6f..c21a626af676 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -21,13 +21,14 @@
21#include <linux/elf.h> 21#include <linux/elf.h>
22#include <linux/security.h> 22#include <linux/security.h>
23#include <linux/bootmem.h> 23#include <linux/bootmem.h>
24#include <linux/lmb.h>
24 25
25#include <asm/pgtable.h> 26#include <asm/pgtable.h>
26#include <asm/system.h> 27#include <asm/system.h>
27#include <asm/processor.h> 28#include <asm/processor.h>
28#include <asm/mmu.h> 29#include <asm/mmu.h>
29#include <asm/mmu_context.h> 30#include <asm/mmu_context.h>
30#include <asm/lmb.h> 31#include <asm/prom.h>
31#include <asm/machdep.h> 32#include <asm/machdep.h>
32#include <asm/cputable.h> 33#include <asm/cputable.h>
33#include <asm/sections.h> 34#include <asm/sections.h>
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index f98867252ee2..b77f8af7ddde 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -139,7 +139,7 @@ static int vio_bus_remove(struct device *dev)
139 */ 139 */
140int vio_register_driver(struct vio_driver *viodrv) 140int vio_register_driver(struct vio_driver *viodrv)
141{ 141{
142 printk(KERN_DEBUG "%s: driver %s registering\n", __FUNCTION__, 142 printk(KERN_DEBUG "%s: driver %s registering\n", __func__,
143 viodrv->driver.name); 143 viodrv->driver.name);
144 144
145 /* fill in 'struct driver' fields */ 145 /* fill in 'struct driver' fields */
@@ -184,7 +184,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
184 /* we need the 'device_type' property, in order to match with drivers */ 184 /* we need the 'device_type' property, in order to match with drivers */
185 if (of_node->type == NULL) { 185 if (of_node->type == NULL) {
186 printk(KERN_WARNING "%s: node %s missing 'device_type'\n", 186 printk(KERN_WARNING "%s: node %s missing 'device_type'\n",
187 __FUNCTION__, 187 __func__,
188 of_node->name ? of_node->name : "<unknown>"); 188 of_node->name ? of_node->name : "<unknown>");
189 return NULL; 189 return NULL;
190 } 190 }
@@ -192,7 +192,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
192 unit_address = of_get_property(of_node, "reg", NULL); 192 unit_address = of_get_property(of_node, "reg", NULL);
193 if (unit_address == NULL) { 193 if (unit_address == NULL) {
194 printk(KERN_WARNING "%s: node %s missing 'reg'\n", 194 printk(KERN_WARNING "%s: node %s missing 'reg'\n",
195 __FUNCTION__, 195 __func__,
196 of_node->name ? of_node->name : "<unknown>"); 196 of_node->name ? of_node->name : "<unknown>");
197 return NULL; 197 return NULL;
198 } 198 }
@@ -227,7 +227,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
227 /* register with generic device framework */ 227 /* register with generic device framework */
228 if (device_register(&viodev->dev)) { 228 if (device_register(&viodev->dev)) {
229 printk(KERN_ERR "%s: failed to register device %s\n", 229 printk(KERN_ERR "%s: failed to register device %s\n",
230 __FUNCTION__, viodev->dev.bus_id); 230 __func__, viodev->dev.bus_id);
231 /* XXX free TCE table */ 231 /* XXX free TCE table */
232 kfree(viodev); 232 kfree(viodev);
233 return NULL; 233 return NULL;
@@ -258,7 +258,7 @@ static int __init vio_bus_init(void)
258 err = device_register(&vio_bus_device.dev); 258 err = device_register(&vio_bus_device.dev);
259 if (err) { 259 if (err) {
260 printk(KERN_WARNING "%s: device_register returned %i\n", 260 printk(KERN_WARNING "%s: device_register returned %i\n",
261 __FUNCTION__, err); 261 __func__, err);
262 return err; 262 return err;
263 } 263 }
264 264
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 0afb9e31d2a0..0c3000bf8d75 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -1,11 +1,9 @@
1#ifdef CONFIG_PPC64 1#ifdef CONFIG_PPC64
2#include <asm/page.h>
3#define PROVIDE32(x) PROVIDE(__unused__##x) 2#define PROVIDE32(x) PROVIDE(__unused__##x)
4#else 3#else
5#define PAGE_SIZE 4096
6#define KERNELBASE CONFIG_KERNEL_START
7#define PROVIDE32(x) PROVIDE(x) 4#define PROVIDE32(x) PROVIDE(x)
8#endif 5#endif
6#include <asm/page.h>
9#include <asm-generic/vmlinux.lds.h> 7#include <asm-generic/vmlinux.lds.h>
10#include <asm/cache.h> 8#include <asm/cache.h>
11 9
@@ -33,7 +31,7 @@ SECTIONS
33 */ 31 */
34 32
35 /* Text and gots */ 33 /* Text and gots */
36 .text : { 34 .text : AT(ADDR(.text) - LOAD_OFFSET) {
37 ALIGN_FUNCTION(); 35 ALIGN_FUNCTION();
38 *(.text.head) 36 *(.text.head)
39 _text = .; 37 _text = .;
@@ -58,7 +56,7 @@ SECTIONS
58 RODATA 56 RODATA
59 57
60 /* Exception & bug tables */ 58 /* Exception & bug tables */
61 __ex_table : { 59 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
62 __start___ex_table = .; 60 __start___ex_table = .;
63 *(__ex_table) 61 *(__ex_table)
64 __stop___ex_table = .; 62 __stop___ex_table = .;
@@ -74,7 +72,7 @@ SECTIONS
74 . = ALIGN(PAGE_SIZE); 72 . = ALIGN(PAGE_SIZE);
75 __init_begin = .; 73 __init_begin = .;
76 74
77 .init.text : { 75 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
78 _sinittext = .; 76 _sinittext = .;
79 INIT_TEXT 77 INIT_TEXT
80 _einittext = .; 78 _einittext = .;
@@ -83,11 +81,11 @@ SECTIONS
83 /* .exit.text is discarded at runtime, not link time, 81 /* .exit.text is discarded at runtime, not link time,
84 * to deal with references from __bug_table 82 * to deal with references from __bug_table
85 */ 83 */
86 .exit.text : { 84 .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
87 EXIT_TEXT 85 EXIT_TEXT
88 } 86 }
89 87
90 .init.data : { 88 .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
91 INIT_DATA 89 INIT_DATA
92 __vtop_table_begin = .; 90 __vtop_table_begin = .;
93 *(.vtop_fixup); 91 *(.vtop_fixup);
@@ -103,19 +101,19 @@ SECTIONS
103 } 101 }
104 102
105 . = ALIGN(16); 103 . = ALIGN(16);
106 .init.setup : { 104 .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
107 __setup_start = .; 105 __setup_start = .;
108 *(.init.setup) 106 *(.init.setup)
109 __setup_end = .; 107 __setup_end = .;
110 } 108 }
111 109
112 .initcall.init : { 110 .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
113 __initcall_start = .; 111 __initcall_start = .;
114 INITCALLS 112 INITCALLS
115 __initcall_end = .; 113 __initcall_end = .;
116 } 114 }
117 115
118 .con_initcall.init : { 116 .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
119 __con_initcall_start = .; 117 __con_initcall_start = .;
120 *(.con_initcall.init) 118 *(.con_initcall.init)
121 __con_initcall_end = .; 119 __con_initcall_end = .;
@@ -124,14 +122,14 @@ SECTIONS
124 SECURITY_INIT 122 SECURITY_INIT
125 123
126 . = ALIGN(8); 124 . = ALIGN(8);
127 __ftr_fixup : { 125 __ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
128 __start___ftr_fixup = .; 126 __start___ftr_fixup = .;
129 *(__ftr_fixup) 127 *(__ftr_fixup)
130 __stop___ftr_fixup = .; 128 __stop___ftr_fixup = .;
131 } 129 }
132#ifdef CONFIG_PPC64 130#ifdef CONFIG_PPC64
133 . = ALIGN(8); 131 . = ALIGN(8);
134 __fw_ftr_fixup : { 132 __fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
135 __start___fw_ftr_fixup = .; 133 __start___fw_ftr_fixup = .;
136 *(__fw_ftr_fixup) 134 *(__fw_ftr_fixup)
137 __stop___fw_ftr_fixup = .; 135 __stop___fw_ftr_fixup = .;
@@ -139,14 +137,14 @@ SECTIONS
139#endif 137#endif
140#ifdef CONFIG_BLK_DEV_INITRD 138#ifdef CONFIG_BLK_DEV_INITRD
141 . = ALIGN(PAGE_SIZE); 139 . = ALIGN(PAGE_SIZE);
142 .init.ramfs : { 140 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
143 __initramfs_start = .; 141 __initramfs_start = .;
144 *(.init.ramfs) 142 *(.init.ramfs)
145 __initramfs_end = .; 143 __initramfs_end = .;
146 } 144 }
147#endif 145#endif
148 . = ALIGN(PAGE_SIZE); 146 . = ALIGN(PAGE_SIZE);
149 .data.percpu : { 147 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
150 __per_cpu_start = .; 148 __per_cpu_start = .;
151 *(.data.percpu) 149 *(.data.percpu)
152 *(.data.percpu.shared_aligned) 150 *(.data.percpu.shared_aligned)
@@ -154,7 +152,7 @@ SECTIONS
154 } 152 }
155 153
156 . = ALIGN(8); 154 . = ALIGN(8);
157 .machine.desc : { 155 .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
158 __machine_desc_start = . ; 156 __machine_desc_start = . ;
159 *(.machine.desc) 157 *(.machine.desc)
160 __machine_desc_end = . ; 158 __machine_desc_end = . ;
@@ -172,25 +170,24 @@ SECTIONS
172 _sdata = .; 170 _sdata = .;
173 171
174#ifdef CONFIG_PPC32 172#ifdef CONFIG_PPC32
175 .data : 173 .data : AT(ADDR(.data) - LOAD_OFFSET) {
176 {
177 DATA_DATA 174 DATA_DATA
178 *(.sdata) 175 *(.sdata)
179 *(.got.plt) *(.got) 176 *(.got.plt) *(.got)
180 } 177 }
181#else 178#else
182 .data : { 179 .data : AT(ADDR(.data) - LOAD_OFFSET) {
183 DATA_DATA 180 DATA_DATA
184 *(.data.rel*) 181 *(.data.rel*)
185 *(.toc1) 182 *(.toc1)
186 *(.branch_lt) 183 *(.branch_lt)
187 } 184 }
188 185
189 .opd : { 186 .opd : AT(ADDR(.opd) - LOAD_OFFSET) {
190 *(.opd) 187 *(.opd)
191 } 188 }
192 189
193 .got : { 190 .got : AT(ADDR(.got) - LOAD_OFFSET) {
194 __toc_start = .; 191 __toc_start = .;
195 *(.got) 192 *(.got)
196 *(.toc) 193 *(.toc)
@@ -207,26 +204,26 @@ SECTIONS
207#else 204#else
208 . = ALIGN(16384); 205 . = ALIGN(16384);
209#endif 206#endif
210 .data.init_task : { 207 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
211 *(.data.init_task) 208 *(.data.init_task)
212 } 209 }
213 210
214 . = ALIGN(PAGE_SIZE); 211 . = ALIGN(PAGE_SIZE);
215 .data.page_aligned : { 212 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
216 *(.data.page_aligned) 213 *(.data.page_aligned)
217 } 214 }
218 215
219 .data.cacheline_aligned : { 216 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
220 *(.data.cacheline_aligned) 217 *(.data.cacheline_aligned)
221 } 218 }
222 219
223 . = ALIGN(L1_CACHE_BYTES); 220 . = ALIGN(L1_CACHE_BYTES);
224 .data.read_mostly : { 221 .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
225 *(.data.read_mostly) 222 *(.data.read_mostly)
226 } 223 }
227 224
228 . = ALIGN(PAGE_SIZE); 225 . = ALIGN(PAGE_SIZE);
229 __data_nosave : { 226 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
230 __nosave_begin = .; 227 __nosave_begin = .;
231 *(.data.nosave) 228 *(.data.nosave)
232 . = ALIGN(PAGE_SIZE); 229 . = ALIGN(PAGE_SIZE);
@@ -237,7 +234,7 @@ SECTIONS
237 * And finally the bss 234 * And finally the bss
238 */ 235 */
239 236
240 .bss : { 237 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
241 __bss_start = .; 238 __bss_start = .;
242 *(.sbss) *(.scommon) 239 *(.sbss) *(.scommon)
243 *(.dynbss) 240 *(.dynbss)
diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c
index 22c3b4f53de7..29b2941cada0 100644
--- a/arch/powerpc/lib/rheap.c
+++ b/arch/powerpc/lib/rheap.c
@@ -54,7 +54,7 @@ static int grow(rh_info_t * info, int max_blocks)
54 54
55 new_blocks = max_blocks - info->max_blocks; 55 new_blocks = max_blocks - info->max_blocks;
56 56
57 block = kmalloc(sizeof(rh_block_t) * max_blocks, GFP_KERNEL); 57 block = kmalloc(sizeof(rh_block_t) * max_blocks, GFP_ATOMIC);
58 if (block == NULL) 58 if (block == NULL)
59 return -ENOMEM; 59 return -ENOMEM;
60 60
@@ -258,7 +258,7 @@ rh_info_t *rh_create(unsigned int alignment)
258 if ((alignment & (alignment - 1)) != 0) 258 if ((alignment & (alignment - 1)) != 0)
259 return ERR_PTR(-EINVAL); 259 return ERR_PTR(-EINVAL);
260 260
261 info = kmalloc(sizeof(*info), GFP_KERNEL); 261 info = kmalloc(sizeof(*info), GFP_ATOMIC);
262 if (info == NULL) 262 if (info == NULL)
263 return ERR_PTR(-ENOMEM); 263 return ERR_PTR(-ENOMEM);
264 264
diff --git a/arch/powerpc/lib/string.S b/arch/powerpc/lib/string.S
index c4c622d8e6ac..49eb1f1a2bb4 100644
--- a/arch/powerpc/lib/string.S
+++ b/arch/powerpc/lib/string.S
@@ -75,6 +75,20 @@ _GLOBAL(strcmp)
75 beq 1b 75 beq 1b
76 blr 76 blr
77 77
78_GLOBAL(strncmp)
79 PPC_LCMPI r5,0
80 beqlr
81 mtctr r5
82 addi r5,r3,-1
83 addi r4,r4,-1
841: lbzu r3,1(r5)
85 cmpwi 1,r3,0
86 lbzu r0,1(r4)
87 subf. r3,r0,r3
88 beqlr 1
89 bdnzt eq,1b
90 blr
91
78_GLOBAL(strlen) 92_GLOBAL(strlen)
79 addi r4,r3,-1 93 addi r4,r3,-1
801: lbzu r0,1(r4) 941: lbzu r0,1(r4)
diff --git a/arch/powerpc/math-emu/fabs.c b/arch/powerpc/math-emu/fabs.c
index 41f0617f3d3a..549baba5948f 100644
--- a/arch/powerpc/math-emu/fabs.c
+++ b/arch/powerpc/math-emu/fabs.c
@@ -9,7 +9,7 @@ fabs(u32 *frD, u32 *frB)
9 frD[1] = frB[1]; 9 frD[1] = frB[1];
10 10
11#ifdef DEBUG 11#ifdef DEBUG
12 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 12 printk("%s: D %p, B %p: ", __func__, frD, frB);
13 dump_double(frD); 13 dump_double(frD);
14 printk("\n"); 14 printk("\n");
15#endif 15#endif
diff --git a/arch/powerpc/math-emu/fadd.c b/arch/powerpc/math-emu/fadd.c
index fc8836488b64..7befbbf2c332 100644
--- a/arch/powerpc/math-emu/fadd.c
+++ b/arch/powerpc/math-emu/fadd.c
@@ -14,7 +14,7 @@ fadd(void *frD, void *frA, void *frB)
14 int ret = 0; 14 int ret = 0;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 17 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(A, frA); 20 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fadds.c b/arch/powerpc/math-emu/fadds.c
index 93025b6c8f3c..2b346b38b480 100644
--- a/arch/powerpc/math-emu/fadds.c
+++ b/arch/powerpc/math-emu/fadds.c
@@ -15,7 +15,7 @@ fadds(void *frD, void *frA, void *frB)
15 int ret = 0; 15 int ret = 0;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 18 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frA); 21 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fcmpo.c b/arch/powerpc/math-emu/fcmpo.c
index 4efac394b4cb..36d689044c63 100644
--- a/arch/powerpc/math-emu/fcmpo.c
+++ b/arch/powerpc/math-emu/fcmpo.c
@@ -15,7 +15,7 @@ fcmpo(u32 *ccr, int crfD, void *frA, void *frB)
15 int ret = 0; 15 int ret = 0;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: %p (%08x) %d %p %p\n", __FUNCTION__, ccr, *ccr, crfD, frA, frB); 18 printk("%s: %p (%08x) %d %p %p\n", __func__, ccr, *ccr, crfD, frA, frB);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frA); 21 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fcmpu.c b/arch/powerpc/math-emu/fcmpu.c
index b7e33176e618..53d93894f2a6 100644
--- a/arch/powerpc/math-emu/fcmpu.c
+++ b/arch/powerpc/math-emu/fcmpu.c
@@ -14,7 +14,7 @@ fcmpu(u32 *ccr, int crfD, void *frA, void *frB)
14 long cmp; 14 long cmp;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p (%08x) %d %p %p\n", __FUNCTION__, ccr, *ccr, crfD, frA, frB); 17 printk("%s: %p (%08x) %d %p %p\n", __func__, ccr, *ccr, crfD, frA, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(A, frA); 20 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fctiw.c b/arch/powerpc/math-emu/fctiw.c
index 3b3c98b840cf..fcd7a95e021d 100644
--- a/arch/powerpc/math-emu/fctiw.c
+++ b/arch/powerpc/math-emu/fctiw.c
@@ -16,7 +16,7 @@ fctiw(u32 *frD, void *frB)
16 frD[1] = r; 16 frD[1] = r;
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 19 printk("%s: D %p, B %p: ", __func__, frD, frB);
20 dump_double(frD); 20 dump_double(frD);
21 printk("\n"); 21 printk("\n");
22#endif 22#endif
diff --git a/arch/powerpc/math-emu/fctiwz.c b/arch/powerpc/math-emu/fctiwz.c
index 7717eb6fcfb6..1514d59e146e 100644
--- a/arch/powerpc/math-emu/fctiwz.c
+++ b/arch/powerpc/math-emu/fctiwz.c
@@ -23,7 +23,7 @@ fctiwz(u32 *frD, void *frB)
23 __FPU_FPSCR = fpscr; 23 __FPU_FPSCR = fpscr;
24 24
25#ifdef DEBUG 25#ifdef DEBUG
26 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 26 printk("%s: D %p, B %p: ", __func__, frD, frB);
27 dump_double(frD); 27 dump_double(frD);
28 printk("\n"); 28 printk("\n");
29#endif 29#endif
diff --git a/arch/powerpc/math-emu/fdiv.c b/arch/powerpc/math-emu/fdiv.c
index f2fba825b2d0..18a20fe396b0 100644
--- a/arch/powerpc/math-emu/fdiv.c
+++ b/arch/powerpc/math-emu/fdiv.c
@@ -14,7 +14,7 @@ fdiv(void *frD, void *frA, void *frB)
14 int ret = 0; 14 int ret = 0;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 17 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(A, frA); 20 __FP_UNPACK_D(A, frA);
@@ -28,13 +28,13 @@ fdiv(void *frD, void *frA, void *frB)
28 if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) { 28 if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) {
29 ret |= EFLAG_VXZDZ; 29 ret |= EFLAG_VXZDZ;
30#ifdef DEBUG 30#ifdef DEBUG
31 printk("%s: FPSCR_VXZDZ raised\n", __FUNCTION__); 31 printk("%s: FPSCR_VXZDZ raised\n", __func__);
32#endif 32#endif
33 } 33 }
34 if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) { 34 if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) {
35 ret |= EFLAG_VXIDI; 35 ret |= EFLAG_VXIDI;
36#ifdef DEBUG 36#ifdef DEBUG
37 printk("%s: FPSCR_VXIDI raised\n", __FUNCTION__); 37 printk("%s: FPSCR_VXIDI raised\n", __func__);
38#endif 38#endif
39 } 39 }
40 40
diff --git a/arch/powerpc/math-emu/fdivs.c b/arch/powerpc/math-emu/fdivs.c
index b971196e3175..24feed689c35 100644
--- a/arch/powerpc/math-emu/fdivs.c
+++ b/arch/powerpc/math-emu/fdivs.c
@@ -15,7 +15,7 @@ fdivs(void *frD, void *frA, void *frB)
15 int ret = 0; 15 int ret = 0;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 18 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frA); 21 __FP_UNPACK_D(A, frA);
@@ -29,13 +29,13 @@ fdivs(void *frD, void *frA, void *frB)
29 if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) { 29 if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) {
30 ret |= EFLAG_VXZDZ; 30 ret |= EFLAG_VXZDZ;
31#ifdef DEBUG 31#ifdef DEBUG
32 printk("%s: FPSCR_VXZDZ raised\n", __FUNCTION__); 32 printk("%s: FPSCR_VXZDZ raised\n", __func__);
33#endif 33#endif
34 } 34 }
35 if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) { 35 if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) {
36 ret |= EFLAG_VXIDI; 36 ret |= EFLAG_VXIDI;
37#ifdef DEBUG 37#ifdef DEBUG
38 printk("%s: FPSCR_VXIDI raised\n", __FUNCTION__); 38 printk("%s: FPSCR_VXIDI raised\n", __func__);
39#endif 39#endif
40 } 40 }
41 41
diff --git a/arch/powerpc/math-emu/fmadd.c b/arch/powerpc/math-emu/fmadd.c
index 0a1dbce793e9..dedb465fdc68 100644
--- a/arch/powerpc/math-emu/fmadd.c
+++ b/arch/powerpc/math-emu/fmadd.c
@@ -16,7 +16,7 @@ fmadd(void *frD, void *frA, void *frB, void *frC)
16 int ret = 0; 16 int ret = 0;
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 19 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
20#endif 20#endif
21 21
22 __FP_UNPACK_D(A, frA); 22 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fmadds.c b/arch/powerpc/math-emu/fmadds.c
index 0f70bba9445e..6bbb56d5502c 100644
--- a/arch/powerpc/math-emu/fmadds.c
+++ b/arch/powerpc/math-emu/fmadds.c
@@ -17,7 +17,7 @@ fmadds(void *frD, void *frA, void *frB, void *frC)
17 int ret = 0; 17 int ret = 0;
18 18
19#ifdef DEBUG 19#ifdef DEBUG
20 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 20 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
21#endif 21#endif
22 22
23 __FP_UNPACK_D(A, frA); 23 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fmr.c b/arch/powerpc/math-emu/fmr.c
index 28df700c0c7e..bd55384b8196 100644
--- a/arch/powerpc/math-emu/fmr.c
+++ b/arch/powerpc/math-emu/fmr.c
@@ -9,7 +9,7 @@ fmr(u32 *frD, u32 *frB)
9 frD[1] = frB[1]; 9 frD[1] = frB[1];
10 10
11#ifdef DEBUG 11#ifdef DEBUG
12 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 12 printk("%s: D %p, B %p: ", __func__, frD, frB);
13 dump_double(frD); 13 dump_double(frD);
14 printk("\n"); 14 printk("\n");
15#endif 15#endif
diff --git a/arch/powerpc/math-emu/fmsub.c b/arch/powerpc/math-emu/fmsub.c
index 203fd48a6fec..f311e2c7e67e 100644
--- a/arch/powerpc/math-emu/fmsub.c
+++ b/arch/powerpc/math-emu/fmsub.c
@@ -16,7 +16,7 @@ fmsub(void *frD, void *frA, void *frB, void *frC)
16 int ret = 0; 16 int ret = 0;
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 19 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
20#endif 20#endif
21 21
22 __FP_UNPACK_D(A, frA); 22 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fmsubs.c b/arch/powerpc/math-emu/fmsubs.c
index 8ce68624c189..81a716d3ee2e 100644
--- a/arch/powerpc/math-emu/fmsubs.c
+++ b/arch/powerpc/math-emu/fmsubs.c
@@ -17,7 +17,7 @@ fmsubs(void *frD, void *frA, void *frB, void *frC)
17 int ret = 0; 17 int ret = 0;
18 18
19#ifdef DEBUG 19#ifdef DEBUG
20 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 20 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
21#endif 21#endif
22 22
23 __FP_UNPACK_D(A, frA); 23 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fmul.c b/arch/powerpc/math-emu/fmul.c
index 66c7e79aae2e..2f3d32784a04 100644
--- a/arch/powerpc/math-emu/fmul.c
+++ b/arch/powerpc/math-emu/fmul.c
@@ -14,7 +14,7 @@ fmul(void *frD, void *frA, void *frB)
14 int ret = 0; 14 int ret = 0;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 17 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(A, frA); 20 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fmuls.c b/arch/powerpc/math-emu/fmuls.c
index 26bc4278271c..962b5883f784 100644
--- a/arch/powerpc/math-emu/fmuls.c
+++ b/arch/powerpc/math-emu/fmuls.c
@@ -15,7 +15,7 @@ fmuls(void *frD, void *frA, void *frB)
15 int ret = 0; 15 int ret = 0;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 18 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frA); 21 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fnabs.c b/arch/powerpc/math-emu/fnabs.c
index c6b913d179e0..a7d34f3d9499 100644
--- a/arch/powerpc/math-emu/fnabs.c
+++ b/arch/powerpc/math-emu/fnabs.c
@@ -9,7 +9,7 @@ fnabs(u32 *frD, u32 *frB)
9 frD[1] = frB[1]; 9 frD[1] = frB[1];
10 10
11#ifdef DEBUG 11#ifdef DEBUG
12 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 12 printk("%s: D %p, B %p: ", __func__, frD, frB);
13 dump_double(frD); 13 dump_double(frD);
14 printk("\n"); 14 printk("\n");
15#endif 15#endif
diff --git a/arch/powerpc/math-emu/fneg.c b/arch/powerpc/math-emu/fneg.c
index fe9a98deff69..1e988cd9c6cc 100644
--- a/arch/powerpc/math-emu/fneg.c
+++ b/arch/powerpc/math-emu/fneg.c
@@ -9,7 +9,7 @@ fneg(u32 *frD, u32 *frB)
9 frD[1] = frB[1]; 9 frD[1] = frB[1];
10 10
11#ifdef DEBUG 11#ifdef DEBUG
12 printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB); 12 printk("%s: D %p, B %p: ", __func__, frD, frB);
13 dump_double(frD); 13 dump_double(frD);
14 printk("\n"); 14 printk("\n");
15#endif 15#endif
diff --git a/arch/powerpc/math-emu/fnmadd.c b/arch/powerpc/math-emu/fnmadd.c
index 7f312276d920..8cf7827c4fb5 100644
--- a/arch/powerpc/math-emu/fnmadd.c
+++ b/arch/powerpc/math-emu/fnmadd.c
@@ -16,7 +16,7 @@ fnmadd(void *frD, void *frA, void *frB, void *frC)
16 int ret = 0; 16 int ret = 0;
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 19 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
20#endif 20#endif
21 21
22 __FP_UNPACK_D(A, frA); 22 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fnmadds.c b/arch/powerpc/math-emu/fnmadds.c
index 65454c9c70bc..f1c4f0f0d807 100644
--- a/arch/powerpc/math-emu/fnmadds.c
+++ b/arch/powerpc/math-emu/fnmadds.c
@@ -17,7 +17,7 @@ fnmadds(void *frD, void *frA, void *frB, void *frC)
17 int ret = 0; 17 int ret = 0;
18 18
19#ifdef DEBUG 19#ifdef DEBUG
20 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 20 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
21#endif 21#endif
22 22
23 __FP_UNPACK_D(A, frA); 23 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fnmsub.c b/arch/powerpc/math-emu/fnmsub.c
index f1ca7482b5f0..98944e6e2601 100644
--- a/arch/powerpc/math-emu/fnmsub.c
+++ b/arch/powerpc/math-emu/fnmsub.c
@@ -16,7 +16,7 @@ fnmsub(void *frD, void *frA, void *frB, void *frC)
16 int ret = 0; 16 int ret = 0;
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 19 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
20#endif 20#endif
21 21
22 __FP_UNPACK_D(A, frA); 22 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fnmsubs.c b/arch/powerpc/math-emu/fnmsubs.c
index 5c9a09a87dc7..b20f4eb63fb9 100644
--- a/arch/powerpc/math-emu/fnmsubs.c
+++ b/arch/powerpc/math-emu/fnmsubs.c
@@ -17,7 +17,7 @@ fnmsubs(void *frD, void *frA, void *frB, void *frC)
17 int ret = 0; 17 int ret = 0;
18 18
19#ifdef DEBUG 19#ifdef DEBUG
20 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 20 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
21#endif 21#endif
22 22
23 __FP_UNPACK_D(A, frA); 23 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fres.c b/arch/powerpc/math-emu/fres.c
index ec11e46d20af..10ecbd08b79e 100644
--- a/arch/powerpc/math-emu/fres.c
+++ b/arch/powerpc/math-emu/fres.c
@@ -6,7 +6,7 @@ int
6fres(void *frD, void *frB) 6fres(void *frD, void *frB)
7{ 7{
8#ifdef DEBUG 8#ifdef DEBUG
9 printk("%s: %p %p\n", __FUNCTION__, frD, frB); 9 printk("%s: %p %p\n", __func__, frD, frB);
10#endif 10#endif
11 return -ENOSYS; 11 return -ENOSYS;
12} 12}
diff --git a/arch/powerpc/math-emu/frsp.c b/arch/powerpc/math-emu/frsp.c
index d879b2a3d0c9..724ccbc0468e 100644
--- a/arch/powerpc/math-emu/frsp.c
+++ b/arch/powerpc/math-emu/frsp.c
@@ -12,7 +12,7 @@ frsp(void *frD, void *frB)
12 FP_DECL_D(B); 12 FP_DECL_D(B);
13 13
14#ifdef DEBUG 14#ifdef DEBUG
15 printk("%s: D %p, B %p\n", __FUNCTION__, frD, frB); 15 printk("%s: D %p, B %p\n", __func__, frD, frB);
16#endif 16#endif
17 17
18 __FP_UNPACK_D(B, frB); 18 __FP_UNPACK_D(B, frB);
diff --git a/arch/powerpc/math-emu/frsqrte.c b/arch/powerpc/math-emu/frsqrte.c
index a11ae1829850..1d0a3a0fd0e6 100644
--- a/arch/powerpc/math-emu/frsqrte.c
+++ b/arch/powerpc/math-emu/frsqrte.c
@@ -6,7 +6,7 @@ int
6frsqrte(void *frD, void *frB) 6frsqrte(void *frD, void *frB)
7{ 7{
8#ifdef DEBUG 8#ifdef DEBUG
9 printk("%s: %p %p\n", __FUNCTION__, frD, frB); 9 printk("%s: %p %p\n", __func__, frD, frB);
10#endif 10#endif
11 return 0; 11 return 0;
12} 12}
diff --git a/arch/powerpc/math-emu/fsel.c b/arch/powerpc/math-emu/fsel.c
index e36e6e72819a..ecb5f28eb1f3 100644
--- a/arch/powerpc/math-emu/fsel.c
+++ b/arch/powerpc/math-emu/fsel.c
@@ -11,7 +11,7 @@ fsel(u32 *frD, void *frA, u32 *frB, u32 *frC)
11 FP_DECL_D(A); 11 FP_DECL_D(A);
12 12
13#ifdef DEBUG 13#ifdef DEBUG
14 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC); 14 printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
15#endif 15#endif
16 16
17 __FP_UNPACK_D(A, frA); 17 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fsqrt.c b/arch/powerpc/math-emu/fsqrt.c
index 6f8319f64a8a..38ec2b752e9d 100644
--- a/arch/powerpc/math-emu/fsqrt.c
+++ b/arch/powerpc/math-emu/fsqrt.c
@@ -13,7 +13,7 @@ fsqrt(void *frD, void *frB)
13 int ret = 0; 13 int ret = 0;
14 14
15#ifdef DEBUG 15#ifdef DEBUG
16 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frB); 16 printk("%s: %p %p %p %p\n", __func__, frD, frB);
17#endif 17#endif
18 18
19 __FP_UNPACK_D(B, frB); 19 __FP_UNPACK_D(B, frB);
diff --git a/arch/powerpc/math-emu/fsqrts.c b/arch/powerpc/math-emu/fsqrts.c
index 3b2b1cf55c12..335263e06ee5 100644
--- a/arch/powerpc/math-emu/fsqrts.c
+++ b/arch/powerpc/math-emu/fsqrts.c
@@ -14,7 +14,7 @@ fsqrts(void *frD, void *frB)
14 int ret = 0; 14 int ret = 0;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frB); 17 printk("%s: %p %p %p %p\n", __func__, frD, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(B, frB); 20 __FP_UNPACK_D(B, frB);
diff --git a/arch/powerpc/math-emu/fsub.c b/arch/powerpc/math-emu/fsub.c
index 956679042bb2..208d20fc52a5 100644
--- a/arch/powerpc/math-emu/fsub.c
+++ b/arch/powerpc/math-emu/fsub.c
@@ -14,7 +14,7 @@ fsub(void *frD, void *frA, void *frB)
14 int ret = 0; 14 int ret = 0;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 17 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
18#endif 18#endif
19 19
20 __FP_UNPACK_D(A, frA); 20 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/fsubs.c b/arch/powerpc/math-emu/fsubs.c
index 3428117dfe8c..0e61b808c44b 100644
--- a/arch/powerpc/math-emu/fsubs.c
+++ b/arch/powerpc/math-emu/fsubs.c
@@ -15,7 +15,7 @@ fsubs(void *frD, void *frA, void *frB)
15 int ret = 0; 15 int ret = 0;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB); 18 printk("%s: %p %p %p\n", __func__, frD, frA, frB);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frA); 21 __FP_UNPACK_D(A, frA);
diff --git a/arch/powerpc/math-emu/lfd.c b/arch/powerpc/math-emu/lfd.c
index 7d38101c329b..6ec90b57c61a 100644
--- a/arch/powerpc/math-emu/lfd.c
+++ b/arch/powerpc/math-emu/lfd.c
@@ -11,7 +11,7 @@ lfd(void *frD, void *ea)
11 if (copy_from_user(frD, ea, sizeof(double))) 11 if (copy_from_user(frD, ea, sizeof(double)))
12 return -EFAULT; 12 return -EFAULT;
13#ifdef DEBUG 13#ifdef DEBUG
14 printk("%s: D %p, ea %p: ", __FUNCTION__, frD, ea); 14 printk("%s: D %p, ea %p: ", __func__, frD, ea);
15 dump_double(frD); 15 dump_double(frD);
16 printk("\n"); 16 printk("\n");
17#endif 17#endif
diff --git a/arch/powerpc/math-emu/lfs.c b/arch/powerpc/math-emu/lfs.c
index c86dee3d7655..6f18ebe3a7ff 100644
--- a/arch/powerpc/math-emu/lfs.c
+++ b/arch/powerpc/math-emu/lfs.c
@@ -14,7 +14,7 @@ lfs(void *frD, void *ea)
14 float f; 14 float f;
15 15
16#ifdef DEBUG 16#ifdef DEBUG
17 printk("%s: D %p, ea %p\n", __FUNCTION__, frD, ea); 17 printk("%s: D %p, ea %p\n", __func__, frD, ea);
18#endif 18#endif
19 19
20 if (copy_from_user(&f, ea, sizeof(float))) 20 if (copy_from_user(&f, ea, sizeof(float)))
diff --git a/arch/powerpc/math-emu/mcrfs.c b/arch/powerpc/math-emu/mcrfs.c
index 106dd912914b..41ba247faf89 100644
--- a/arch/powerpc/math-emu/mcrfs.c
+++ b/arch/powerpc/math-emu/mcrfs.c
@@ -10,7 +10,7 @@ mcrfs(u32 *ccr, u32 crfD, u32 crfS)
10 u32 value, clear; 10 u32 value, clear;
11 11
12#ifdef DEBUG 12#ifdef DEBUG
13 printk("%s: %p (%08x) %d %d\n", __FUNCTION__, ccr, *ccr, crfD, crfS); 13 printk("%s: %p (%08x) %d %d\n", __func__, ccr, *ccr, crfD, crfS);
14#endif 14#endif
15 15
16 clear = 15 << ((7 - crfS) << 2); 16 clear = 15 << ((7 - crfS) << 2);
@@ -24,7 +24,7 @@ mcrfs(u32 *ccr, u32 crfD, u32 crfS)
24 *ccr |= (value << ((7 - crfD) << 2)); 24 *ccr |= (value << ((7 - crfD) << 2));
25 25
26#ifdef DEBUG 26#ifdef DEBUG
27 printk("CR: %08x\n", __FUNCTION__, *ccr); 27 printk("CR: %08x\n", __func__, *ccr);
28#endif 28#endif
29 29
30 return 0; 30 return 0;
diff --git a/arch/powerpc/math-emu/mffs.c b/arch/powerpc/math-emu/mffs.c
index f477c9170e75..b0e2106e6eb6 100644
--- a/arch/powerpc/math-emu/mffs.c
+++ b/arch/powerpc/math-emu/mffs.c
@@ -10,7 +10,7 @@ mffs(u32 *frD)
10 frD[1] = __FPU_FPSCR; 10 frD[1] = __FPU_FPSCR;
11 11
12#ifdef DEBUG 12#ifdef DEBUG
13 printk("%s: frD %p: %08x.%08x\n", __FUNCTION__, frD, frD[0], frD[1]); 13 printk("%s: frD %p: %08x.%08x\n", __func__, frD, frD[0], frD[1]);
14#endif 14#endif
15 15
16 return 0; 16 return 0;
diff --git a/arch/powerpc/math-emu/mtfsb0.c b/arch/powerpc/math-emu/mtfsb0.c
index 99bfd80f4af3..d3062350ea21 100644
--- a/arch/powerpc/math-emu/mtfsb0.c
+++ b/arch/powerpc/math-emu/mtfsb0.c
@@ -11,7 +11,7 @@ mtfsb0(int crbD)
11 __FPU_FPSCR &= ~(1 << (31 - crbD)); 11 __FPU_FPSCR &= ~(1 << (31 - crbD));
12 12
13#ifdef DEBUG 13#ifdef DEBUG
14 printk("%s: %d %08lx\n", __FUNCTION__, crbD, __FPU_FPSCR); 14 printk("%s: %d %08lx\n", __func__, crbD, __FPU_FPSCR);
15#endif 15#endif
16 16
17 return 0; 17 return 0;
diff --git a/arch/powerpc/math-emu/mtfsb1.c b/arch/powerpc/math-emu/mtfsb1.c
index 3d9e7ed92d2b..2e948704b56e 100644
--- a/arch/powerpc/math-emu/mtfsb1.c
+++ b/arch/powerpc/math-emu/mtfsb1.c
@@ -11,7 +11,7 @@ mtfsb1(int crbD)
11 __FPU_FPSCR |= (1 << (31 - crbD)); 11 __FPU_FPSCR |= (1 << (31 - crbD));
12 12
13#ifdef DEBUG 13#ifdef DEBUG
14 printk("%s: %d %08lx\n", __FUNCTION__, crbD, __FPU_FPSCR); 14 printk("%s: %d %08lx\n", __func__, crbD, __FPU_FPSCR);
15#endif 15#endif
16 16
17 return 0; 17 return 0;
diff --git a/arch/powerpc/math-emu/mtfsf.c b/arch/powerpc/math-emu/mtfsf.c
index d70cf714994c..48014d8e3af1 100644
--- a/arch/powerpc/math-emu/mtfsf.c
+++ b/arch/powerpc/math-emu/mtfsf.c
@@ -38,7 +38,7 @@ mtfsf(unsigned int FM, u32 *frB)
38 __FPU_FPSCR |= (frB[1] & mask); 38 __FPU_FPSCR |= (frB[1] & mask);
39 39
40#ifdef DEBUG 40#ifdef DEBUG
41 printk("%s: %02x %p: %08lx\n", __FUNCTION__, FM, frB, __FPU_FPSCR); 41 printk("%s: %02x %p: %08lx\n", __func__, FM, frB, __FPU_FPSCR);
42#endif 42#endif
43 43
44 return 0; 44 return 0;
diff --git a/arch/powerpc/math-emu/mtfsfi.c b/arch/powerpc/math-emu/mtfsfi.c
index 71df854baa7e..031e20093549 100644
--- a/arch/powerpc/math-emu/mtfsfi.c
+++ b/arch/powerpc/math-emu/mtfsfi.c
@@ -16,7 +16,7 @@ mtfsfi(unsigned int crfD, unsigned int IMM)
16 __FPU_FPSCR |= (IMM & 0xf) << ((7 - crfD) << 2); 16 __FPU_FPSCR |= (IMM & 0xf) << ((7 - crfD) << 2);
17 17
18#ifdef DEBUG 18#ifdef DEBUG
19 printk("%s: %d %x: %08lx\n", __FUNCTION__, crfD, IMM, __FPU_FPSCR); 19 printk("%s: %d %x: %08lx\n", __func__, crfD, IMM, __FPU_FPSCR);
20#endif 20#endif
21 21
22 return 0; 22 return 0;
diff --git a/arch/powerpc/math-emu/stfd.c b/arch/powerpc/math-emu/stfd.c
index 3f8c2558a9e8..33a165c8df0f 100644
--- a/arch/powerpc/math-emu/stfd.c
+++ b/arch/powerpc/math-emu/stfd.c
@@ -7,7 +7,7 @@ stfd(void *frS, void *ea)
7{ 7{
8#if 0 8#if 0
9#ifdef DEBUG 9#ifdef DEBUG
10 printk("%s: S %p, ea %p: ", __FUNCTION__, frS, ea); 10 printk("%s: S %p, ea %p: ", __func__, frS, ea);
11 dump_double(frS); 11 dump_double(frS);
12 printk("\n"); 12 printk("\n");
13#endif 13#endif
diff --git a/arch/powerpc/math-emu/stfiwx.c b/arch/powerpc/math-emu/stfiwx.c
index 95caaeec6a08..f15a35f67e2c 100644
--- a/arch/powerpc/math-emu/stfiwx.c
+++ b/arch/powerpc/math-emu/stfiwx.c
@@ -6,7 +6,7 @@ int
6stfiwx(u32 *frS, void *ea) 6stfiwx(u32 *frS, void *ea)
7{ 7{
8#ifdef DEBUG 8#ifdef DEBUG
9 printk("%s: %p %p\n", __FUNCTION__, frS, ea); 9 printk("%s: %p %p\n", __func__, frS, ea);
10#endif 10#endif
11 11
12 if (copy_to_user(ea, &frS[1], sizeof(frS[1]))) 12 if (copy_to_user(ea, &frS[1], sizeof(frS[1])))
diff --git a/arch/powerpc/math-emu/stfs.c b/arch/powerpc/math-emu/stfs.c
index e87ca23c6dc3..8689aa48ef69 100644
--- a/arch/powerpc/math-emu/stfs.c
+++ b/arch/powerpc/math-emu/stfs.c
@@ -15,7 +15,7 @@ stfs(void *frS, void *ea)
15 int err; 15 int err;
16 16
17#ifdef DEBUG 17#ifdef DEBUG
18 printk("%s: S %p, ea %p\n", __FUNCTION__, frS, ea); 18 printk("%s: S %p, ea %p\n", __func__, frS, ea);
19#endif 19#endif
20 20
21 __FP_UNPACK_D(A, frS); 21 __FP_UNPACK_D(A, frS);
diff --git a/arch/powerpc/mm/40x_mmu.c b/arch/powerpc/mm/40x_mmu.c
index 3899ea97fbdf..cecbbc76f624 100644
--- a/arch/powerpc/mm/40x_mmu.c
+++ b/arch/powerpc/mm/40x_mmu.c
@@ -97,7 +97,7 @@ unsigned long __init mmu_mapin_ram(void)
97 phys_addr_t p; 97 phys_addr_t p;
98 98
99 v = KERNELBASE; 99 v = KERNELBASE;
100 p = PPC_MEMSTART; 100 p = 0;
101 s = total_lowmem; 101 s = total_lowmem;
102 102
103 if (__map_without_ltlbs) 103 if (__map_without_ltlbs)
diff --git a/arch/powerpc/mm/44x_mmu.c b/arch/powerpc/mm/44x_mmu.c
index 04dc08798d3d..953fb919eb06 100644
--- a/arch/powerpc/mm/44x_mmu.c
+++ b/arch/powerpc/mm/44x_mmu.c
@@ -67,7 +67,7 @@ unsigned long __init mmu_mapin_ram(void)
67 67
68 /* Pin in enough TLBs to cover any lowmem not covered by the 68 /* Pin in enough TLBs to cover any lowmem not covered by the
69 * initial 256M mapping established in head_44x.S */ 69 * initial 256M mapping established in head_44x.S */
70 for (addr = PPC_PIN_SIZE; addr < total_lowmem; 70 for (addr = PPC_PIN_SIZE; addr < lowmem_end_addr;
71 addr += PPC_PIN_SIZE) 71 addr += PPC_PIN_SIZE)
72 ppc44x_pin_tlb(addr + PAGE_OFFSET, addr); 72 ppc44x_pin_tlb(addr + PAGE_OFFSET, addr);
73 73
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile
index 41649a5d3602..1c00e0196f6c 100644
--- a/arch/powerpc/mm/Makefile
+++ b/arch/powerpc/mm/Makefile
@@ -6,7 +6,7 @@ ifeq ($(CONFIG_PPC64),y)
6EXTRA_CFLAGS += -mno-minimal-toc 6EXTRA_CFLAGS += -mno-minimal-toc
7endif 7endif
8 8
9obj-y := fault.o mem.o lmb.o \ 9obj-y := fault.o mem.o \
10 init_$(CONFIG_WORD_SIZE).o \ 10 init_$(CONFIG_WORD_SIZE).o \
11 pgtable_$(CONFIG_WORD_SIZE).o \ 11 pgtable_$(CONFIG_WORD_SIZE).o \
12 mmu_context_$(CONFIG_WORD_SIZE).o 12 mmu_context_$(CONFIG_WORD_SIZE).o
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c
index c93a966b7e4b..ada249bf9779 100644
--- a/arch/powerpc/mm/fsl_booke_mmu.c
+++ b/arch/powerpc/mm/fsl_booke_mmu.c
@@ -49,18 +49,15 @@
49#include <asm/mmu.h> 49#include <asm/mmu.h>
50#include <asm/uaccess.h> 50#include <asm/uaccess.h>
51#include <asm/smp.h> 51#include <asm/smp.h>
52#include <asm/bootx.h>
53#include <asm/machdep.h> 52#include <asm/machdep.h>
54#include <asm/setup.h> 53#include <asm/setup.h>
55 54
55#include "mmu_decl.h"
56
56extern void loadcam_entry(unsigned int index); 57extern void loadcam_entry(unsigned int index);
57unsigned int tlbcam_index; 58unsigned int tlbcam_index;
58unsigned int num_tlbcam_entries; 59unsigned int num_tlbcam_entries;
59static unsigned long __cam0, __cam1, __cam2; 60static unsigned long __cam0, __cam1, __cam2;
60extern unsigned long total_lowmem;
61extern unsigned long __max_low_memory;
62extern unsigned long __initial_memory_limit;
63#define MAX_LOW_MEM CONFIG_LOWMEM_SIZE
64 61
65#define NUM_TLBCAMS (16) 62#define NUM_TLBCAMS (16)
66 63
@@ -165,15 +162,15 @@ void invalidate_tlbcam_entry(int index)
165void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1, 162void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
166 unsigned long cam2) 163 unsigned long cam2)
167{ 164{
168 settlbcam(0, PAGE_OFFSET, PPC_MEMSTART, cam0, _PAGE_KERNEL, 0); 165 settlbcam(0, PAGE_OFFSET, memstart_addr, cam0, _PAGE_KERNEL, 0);
169 tlbcam_index++; 166 tlbcam_index++;
170 if (cam1) { 167 if (cam1) {
171 tlbcam_index++; 168 tlbcam_index++;
172 settlbcam(1, PAGE_OFFSET+cam0, PPC_MEMSTART+cam0, cam1, _PAGE_KERNEL, 0); 169 settlbcam(1, PAGE_OFFSET+cam0, memstart_addr+cam0, cam1, _PAGE_KERNEL, 0);
173 } 170 }
174 if (cam2) { 171 if (cam2) {
175 tlbcam_index++; 172 tlbcam_index++;
176 settlbcam(2, PAGE_OFFSET+cam0+cam1, PPC_MEMSTART+cam0+cam1, cam2, _PAGE_KERNEL, 0); 173 settlbcam(2, PAGE_OFFSET+cam0+cam1, memstart_addr+cam0+cam1, cam2, _PAGE_KERNEL, 0);
177 } 174 }
178} 175}
179 176
@@ -196,35 +193,32 @@ unsigned long __init mmu_mapin_ram(void)
196void __init 193void __init
197adjust_total_lowmem(void) 194adjust_total_lowmem(void)
198{ 195{
199 unsigned long max_low_mem = MAX_LOW_MEM; 196 phys_addr_t max_lowmem_size = __max_low_memory;
200 unsigned long cam_max = 0x10000000; 197 phys_addr_t cam_max_size = 0x10000000;
201 unsigned long ram; 198 phys_addr_t ram;
202 199
203 /* adjust CAM size to max_low_mem */ 200 /* adjust CAM size to max_lowmem_size */
204 if (max_low_mem < cam_max) 201 if (max_lowmem_size < cam_max_size)
205 cam_max = max_low_mem; 202 cam_max_size = max_lowmem_size;
206 203
207 /* adjust lowmem size to max_low_mem */ 204 /* adjust lowmem size to max_lowmem_size */
208 if (max_low_mem < total_lowmem) 205 ram = min(max_lowmem_size, total_lowmem);
209 ram = max_low_mem;
210 else
211 ram = total_lowmem;
212 206
213 /* Calculate CAM values */ 207 /* Calculate CAM values */
214 __cam0 = 1UL << 2 * (__ilog2(ram) / 2); 208 __cam0 = 1UL << 2 * (__ilog2(ram) / 2);
215 if (__cam0 > cam_max) 209 if (__cam0 > cam_max_size)
216 __cam0 = cam_max; 210 __cam0 = cam_max_size;
217 ram -= __cam0; 211 ram -= __cam0;
218 if (ram) { 212 if (ram) {
219 __cam1 = 1UL << 2 * (__ilog2(ram) / 2); 213 __cam1 = 1UL << 2 * (__ilog2(ram) / 2);
220 if (__cam1 > cam_max) 214 if (__cam1 > cam_max_size)
221 __cam1 = cam_max; 215 __cam1 = cam_max_size;
222 ram -= __cam1; 216 ram -= __cam1;
223 } 217 }
224 if (ram) { 218 if (ram) {
225 __cam2 = 1UL << 2 * (__ilog2(ram) / 2); 219 __cam2 = 1UL << 2 * (__ilog2(ram) / 2);
226 if (__cam2 > cam_max) 220 if (__cam2 > cam_max_size)
227 __cam2 = cam_max; 221 __cam2 = cam_max_size;
228 ram -= __cam2; 222 ram -= __cam2;
229 } 223 }
230 224
@@ -232,6 +226,6 @@ adjust_total_lowmem(void)
232 " CAM2=%ldMb residual: %ldMb\n", 226 " CAM2=%ldMb residual: %ldMb\n",
233 __cam0 >> 20, __cam1 >> 20, __cam2 >> 20, 227 __cam0 >> 20, __cam1 >> 20, __cam2 >> 20,
234 (total_lowmem - __cam0 - __cam1 - __cam2) >> 20); 228 (total_lowmem - __cam0 - __cam1 - __cam2) >> 20);
235 __max_low_memory = max_low_mem = __cam0 + __cam1 + __cam2; 229 __max_low_memory = __cam0 + __cam1 + __cam2;
236 __initial_memory_limit = __max_low_memory; 230 __initial_memory_limit_addr = memstart_addr + __max_low_memory;
237} 231}
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index a83dfa3cf40c..2b5a399f6fa6 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -31,6 +31,7 @@
31#include <linux/cache.h> 31#include <linux/cache.h>
32#include <linux/init.h> 32#include <linux/init.h>
33#include <linux/signal.h> 33#include <linux/signal.h>
34#include <linux/lmb.h>
34 35
35#include <asm/processor.h> 36#include <asm/processor.h>
36#include <asm/pgtable.h> 37#include <asm/pgtable.h>
@@ -41,7 +42,7 @@
41#include <asm/system.h> 42#include <asm/system.h>
42#include <asm/uaccess.h> 43#include <asm/uaccess.h>
43#include <asm/machdep.h> 44#include <asm/machdep.h>
44#include <asm/lmb.h> 45#include <asm/prom.h>
45#include <asm/abs_addr.h> 46#include <asm/abs_addr.h>
46#include <asm/tlbflush.h> 47#include <asm/tlbflush.h>
47#include <asm/io.h> 48#include <asm/io.h>
@@ -191,6 +192,29 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
191 return ret < 0 ? ret : 0; 192 return ret < 0 ? ret : 0;
192} 193}
193 194
195#ifdef CONFIG_MEMORY_HOTPLUG
196static int htab_remove_mapping(unsigned long vstart, unsigned long vend,
197 int psize, int ssize)
198{
199 unsigned long vaddr;
200 unsigned int step, shift;
201
202 shift = mmu_psize_defs[psize].shift;
203 step = 1 << shift;
204
205 if (!ppc_md.hpte_removebolted) {
206 printk(KERN_WARNING "Platform doesn't implement "
207 "hpte_removebolted\n");
208 return -EINVAL;
209 }
210
211 for (vaddr = vstart; vaddr < vend; vaddr += step)
212 ppc_md.hpte_removebolted(vaddr, psize, ssize);
213
214 return 0;
215}
216#endif /* CONFIG_MEMORY_HOTPLUG */
217
194static int __init htab_dt_scan_seg_sizes(unsigned long node, 218static int __init htab_dt_scan_seg_sizes(unsigned long node,
195 const char *uname, int depth, 219 const char *uname, int depth,
196 void *data) 220 void *data)
@@ -434,6 +458,12 @@ void create_section_mapping(unsigned long start, unsigned long end)
434 _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_COHERENT | PP_RWXX, 458 _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_COHERENT | PP_RWXX,
435 mmu_linear_psize, mmu_kernel_ssize)); 459 mmu_linear_psize, mmu_kernel_ssize));
436} 460}
461
462int remove_section_mapping(unsigned long start, unsigned long end)
463{
464 return htab_remove_mapping(start, end, mmu_linear_psize,
465 mmu_kernel_ssize);
466}
437#endif /* CONFIG_MEMORY_HOTPLUG */ 467#endif /* CONFIG_MEMORY_HOTPLUG */
438 468
439static inline void make_bl(unsigned int *insn_addr, void *func) 469static inline void make_bl(unsigned int *insn_addr, void *func)
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 977cb1ee5e72..47325f23c51f 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -30,6 +30,7 @@
30#include <linux/highmem.h> 30#include <linux/highmem.h>
31#include <linux/initrd.h> 31#include <linux/initrd.h>
32#include <linux/pagemap.h> 32#include <linux/pagemap.h>
33#include <linux/lmb.h>
33 34
34#include <asm/pgalloc.h> 35#include <asm/pgalloc.h>
35#include <asm/prom.h> 36#include <asm/prom.h>
@@ -41,7 +42,6 @@
41#include <asm/machdep.h> 42#include <asm/machdep.h>
42#include <asm/btext.h> 43#include <asm/btext.h>
43#include <asm/tlb.h> 44#include <asm/tlb.h>
44#include <asm/lmb.h>
45#include <asm/sections.h> 45#include <asm/sections.h>
46 46
47#include "mmu_decl.h" 47#include "mmu_decl.h"
@@ -59,8 +59,8 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
59unsigned long total_memory; 59unsigned long total_memory;
60unsigned long total_lowmem; 60unsigned long total_lowmem;
61 61
62unsigned long ppc_memstart; 62phys_addr_t memstart_addr;
63unsigned long ppc_memoffset = PAGE_OFFSET; 63phys_addr_t lowmem_end_addr;
64 64
65int boot_mapsize; 65int boot_mapsize;
66#ifdef CONFIG_PPC_PMAC 66#ifdef CONFIG_PPC_PMAC
@@ -95,10 +95,10 @@ int __map_without_ltlbs;
95unsigned long __max_low_memory = MAX_LOW_MEM; 95unsigned long __max_low_memory = MAX_LOW_MEM;
96 96
97/* 97/*
98 * limit of what is accessible with initial MMU setup - 98 * address of the limit of what is accessible with initial MMU setup -
99 * 256MB usually, but only 16MB on 601. 99 * 256MB usually, but only 16MB on 601.
100 */ 100 */
101unsigned long __initial_memory_limit = 0x10000000; 101phys_addr_t __initial_memory_limit_addr = (phys_addr_t)0x10000000;
102 102
103/* 103/*
104 * Check for command-line options that affect what MMU_init will do. 104 * Check for command-line options that affect what MMU_init will do.
@@ -131,10 +131,10 @@ void __init MMU_init(void)
131 131
132 /* 601 can only access 16MB at the moment */ 132 /* 601 can only access 16MB at the moment */
133 if (PVR_VER(mfspr(SPRN_PVR)) == 1) 133 if (PVR_VER(mfspr(SPRN_PVR)) == 1)
134 __initial_memory_limit = 0x01000000; 134 __initial_memory_limit_addr = 0x01000000;
135 /* 8xx can only access 8MB at the moment */ 135 /* 8xx can only access 8MB at the moment */
136 if (PVR_VER(mfspr(SPRN_PVR)) == 0x50) 136 if (PVR_VER(mfspr(SPRN_PVR)) == 0x50)
137 __initial_memory_limit = 0x00800000; 137 __initial_memory_limit_addr = 0x00800000;
138 138
139 /* parse args from command line */ 139 /* parse args from command line */
140 MMU_setup(); 140 MMU_setup();
@@ -145,8 +145,8 @@ void __init MMU_init(void)
145 printk(KERN_WARNING "Only using first contiguous memory region"); 145 printk(KERN_WARNING "Only using first contiguous memory region");
146 } 146 }
147 147
148 total_memory = lmb_end_of_DRAM(); 148 total_lowmem = total_memory = lmb_end_of_DRAM() - memstart_addr;
149 total_lowmem = total_memory; 149 lowmem_end_addr = memstart_addr + total_lowmem;
150 150
151#ifdef CONFIG_FSL_BOOKE 151#ifdef CONFIG_FSL_BOOKE
152 /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB 152 /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
@@ -157,9 +157,10 @@ void __init MMU_init(void)
157 157
158 if (total_lowmem > __max_low_memory) { 158 if (total_lowmem > __max_low_memory) {
159 total_lowmem = __max_low_memory; 159 total_lowmem = __max_low_memory;
160 lowmem_end_addr = memstart_addr + total_lowmem;
160#ifndef CONFIG_HIGHMEM 161#ifndef CONFIG_HIGHMEM
161 total_memory = total_lowmem; 162 total_memory = total_lowmem;
162 lmb_enforce_memory_limit(total_lowmem); 163 lmb_enforce_memory_limit(lowmem_end_addr);
163 lmb_analyze(); 164 lmb_analyze();
164#endif /* CONFIG_HIGHMEM */ 165#endif /* CONFIG_HIGHMEM */
165 } 166 }
@@ -184,8 +185,6 @@ void __init MMU_init(void)
184 /* Map in I/O resources */ 185 /* Map in I/O resources */
185 if (ppc_md.progress) 186 if (ppc_md.progress)
186 ppc_md.progress("MMU:setio", 0x302); 187 ppc_md.progress("MMU:setio", 0x302);
187 if (ppc_md.setup_io_mappings)
188 ppc_md.setup_io_mappings();
189 188
190 /* Initialize the context management stuff */ 189 /* Initialize the context management stuff */
191 mmu_context_init(); 190 mmu_context_init();
@@ -208,7 +207,7 @@ void __init *early_get_page(void)
208 p = alloc_bootmem_pages(PAGE_SIZE); 207 p = alloc_bootmem_pages(PAGE_SIZE);
209 } else { 208 } else {
210 p = __va(lmb_alloc_base(PAGE_SIZE, PAGE_SIZE, 209 p = __va(lmb_alloc_base(PAGE_SIZE, PAGE_SIZE,
211 __initial_memory_limit)); 210 __initial_memory_limit_addr));
212 } 211 }
213 return p; 212 return p;
214} 213}
@@ -276,7 +275,7 @@ static int __init setup_kcore(void)
276 275
277 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC); 276 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
278 if (!kcore_mem) 277 if (!kcore_mem)
279 panic("%s: kmalloc failed\n", __FUNCTION__); 278 panic("%s: kmalloc failed\n", __func__);
280 279
281 /* must stay under 32 bits */ 280 /* must stay under 32 bits */
282 if ( 0xfffffffful - (unsigned long)__va(base) < size) { 281 if ( 0xfffffffful - (unsigned long)__va(base) < size) {
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index c0f5cff77035..698bd000f98b 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -38,11 +38,11 @@
38#include <linux/nodemask.h> 38#include <linux/nodemask.h>
39#include <linux/module.h> 39#include <linux/module.h>
40#include <linux/poison.h> 40#include <linux/poison.h>
41#include <linux/lmb.h>
41 42
42#include <asm/pgalloc.h> 43#include <asm/pgalloc.h>
43#include <asm/page.h> 44#include <asm/page.h>
44#include <asm/prom.h> 45#include <asm/prom.h>
45#include <asm/lmb.h>
46#include <asm/rtas.h> 46#include <asm/rtas.h>
47#include <asm/io.h> 47#include <asm/io.h>
48#include <asm/mmu_context.h> 48#include <asm/mmu_context.h>
@@ -72,8 +72,7 @@
72#warning TASK_SIZE is smaller than it needs to be. 72#warning TASK_SIZE is smaller than it needs to be.
73#endif 73#endif
74 74
75/* max amount of RAM to use */ 75phys_addr_t memstart_addr;
76unsigned long __max_memory;
77 76
78void free_initmem(void) 77void free_initmem(void)
79{ 78{
@@ -122,7 +121,7 @@ static int __init setup_kcore(void)
122 /* GFP_ATOMIC to avoid might_sleep warnings during boot */ 121 /* GFP_ATOMIC to avoid might_sleep warnings during boot */
123 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC); 122 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
124 if (!kcore_mem) 123 if (!kcore_mem)
125 panic("%s: kmalloc failed\n", __FUNCTION__); 124 panic("%s: kmalloc failed\n", __func__);
126 125
127 kclist_add(kcore_mem, __va(base), size); 126 kclist_add(kcore_mem, __va(base), size);
128 } 127 }
diff --git a/arch/powerpc/mm/lmb.c b/arch/powerpc/mm/lmb.c
deleted file mode 100644
index 4ce23bcf8a57..000000000000
--- a/arch/powerpc/mm/lmb.c
+++ /dev/null
@@ -1,357 +0,0 @@
1/*
2 * Procedures for maintaining information about logical memory blocks.
3 *
4 * Peter Bergner, IBM Corp. June 2001.
5 * Copyright (C) 2001 Peter Bergner.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/bitops.h>
16#include <asm/types.h>
17#include <asm/page.h>
18#include <asm/prom.h>
19#include <asm/lmb.h>
20#ifdef CONFIG_PPC32
21#include "mmu_decl.h" /* for __max_low_memory */
22#endif
23
24#undef DEBUG
25
26#ifdef DEBUG
27#include <asm/udbg.h>
28#define DBG(fmt...) udbg_printf(fmt)
29#else
30#define DBG(fmt...)
31#endif
32
33#define LMB_ALLOC_ANYWHERE 0
34
35struct lmb lmb;
36
37void lmb_dump_all(void)
38{
39#ifdef DEBUG
40 unsigned long i;
41
42 DBG("lmb_dump_all:\n");
43 DBG(" memory.cnt = 0x%lx\n", lmb.memory.cnt);
44 DBG(" memory.size = 0x%lx\n", lmb.memory.size);
45 for (i=0; i < lmb.memory.cnt ;i++) {
46 DBG(" memory.region[0x%x].base = 0x%lx\n",
47 i, lmb.memory.region[i].base);
48 DBG(" .size = 0x%lx\n",
49 lmb.memory.region[i].size);
50 }
51
52 DBG("\n reserved.cnt = 0x%lx\n", lmb.reserved.cnt);
53 DBG(" reserved.size = 0x%lx\n", lmb.reserved.size);
54 for (i=0; i < lmb.reserved.cnt ;i++) {
55 DBG(" reserved.region[0x%x].base = 0x%lx\n",
56 i, lmb.reserved.region[i].base);
57 DBG(" .size = 0x%lx\n",
58 lmb.reserved.region[i].size);
59 }
60#endif /* DEBUG */
61}
62
63static unsigned long __init lmb_addrs_overlap(unsigned long base1,
64 unsigned long size1, unsigned long base2, unsigned long size2)
65{
66 return ((base1 < (base2+size2)) && (base2 < (base1+size1)));
67}
68
69static long __init lmb_addrs_adjacent(unsigned long base1, unsigned long size1,
70 unsigned long base2, unsigned long size2)
71{
72 if (base2 == base1 + size1)
73 return 1;
74 else if (base1 == base2 + size2)
75 return -1;
76
77 return 0;
78}
79
80static long __init lmb_regions_adjacent(struct lmb_region *rgn,
81 unsigned long r1, unsigned long r2)
82{
83 unsigned long base1 = rgn->region[r1].base;
84 unsigned long size1 = rgn->region[r1].size;
85 unsigned long base2 = rgn->region[r2].base;
86 unsigned long size2 = rgn->region[r2].size;
87
88 return lmb_addrs_adjacent(base1, size1, base2, size2);
89}
90
91static void __init lmb_remove_region(struct lmb_region *rgn, unsigned long r)
92{
93 unsigned long i;
94
95 for (i = r; i < rgn->cnt - 1; i++) {
96 rgn->region[i].base = rgn->region[i + 1].base;
97 rgn->region[i].size = rgn->region[i + 1].size;
98 }
99 rgn->cnt--;
100}
101
102/* Assumption: base addr of region 1 < base addr of region 2 */
103static void __init lmb_coalesce_regions(struct lmb_region *rgn,
104 unsigned long r1, unsigned long r2)
105{
106 rgn->region[r1].size += rgn->region[r2].size;
107 lmb_remove_region(rgn, r2);
108}
109
110/* This routine called with relocation disabled. */
111void __init lmb_init(void)
112{
113 /* Create a dummy zero size LMB which will get coalesced away later.
114 * This simplifies the lmb_add() code below...
115 */
116 lmb.memory.region[0].base = 0;
117 lmb.memory.region[0].size = 0;
118 lmb.memory.cnt = 1;
119
120 /* Ditto. */
121 lmb.reserved.region[0].base = 0;
122 lmb.reserved.region[0].size = 0;
123 lmb.reserved.cnt = 1;
124}
125
126/* This routine may be called with relocation disabled. */
127void __init lmb_analyze(void)
128{
129 int i;
130
131 lmb.memory.size = 0;
132
133 for (i = 0; i < lmb.memory.cnt; i++)
134 lmb.memory.size += lmb.memory.region[i].size;
135}
136
137/* This routine called with relocation disabled. */
138static long __init lmb_add_region(struct lmb_region *rgn, unsigned long base,
139 unsigned long size)
140{
141 unsigned long coalesced = 0;
142 long adjacent, i;
143
144 /* First try and coalesce this LMB with another. */
145 for (i=0; i < rgn->cnt; i++) {
146 unsigned long rgnbase = rgn->region[i].base;
147 unsigned long rgnsize = rgn->region[i].size;
148
149 if ((rgnbase == base) && (rgnsize == size))
150 /* Already have this region, so we're done */
151 return 0;
152
153 adjacent = lmb_addrs_adjacent(base,size,rgnbase,rgnsize);
154 if ( adjacent > 0 ) {
155 rgn->region[i].base -= size;
156 rgn->region[i].size += size;
157 coalesced++;
158 break;
159 }
160 else if ( adjacent < 0 ) {
161 rgn->region[i].size += size;
162 coalesced++;
163 break;
164 }
165 }
166
167 if ((i < rgn->cnt-1) && lmb_regions_adjacent(rgn, i, i+1) ) {
168 lmb_coalesce_regions(rgn, i, i+1);
169 coalesced++;
170 }
171
172 if (coalesced)
173 return coalesced;
174 if (rgn->cnt >= MAX_LMB_REGIONS)
175 return -1;
176
177 /* Couldn't coalesce the LMB, so add it to the sorted table. */
178 for (i = rgn->cnt-1; i >= 0; i--) {
179 if (base < rgn->region[i].base) {
180 rgn->region[i+1].base = rgn->region[i].base;
181 rgn->region[i+1].size = rgn->region[i].size;
182 } else {
183 rgn->region[i+1].base = base;
184 rgn->region[i+1].size = size;
185 break;
186 }
187 }
188 rgn->cnt++;
189
190 return 0;
191}
192
193/* This routine may be called with relocation disabled. */
194long __init lmb_add(unsigned long base, unsigned long size)
195{
196 struct lmb_region *_rgn = &(lmb.memory);
197
198 /* On pSeries LPAR systems, the first LMB is our RMO region. */
199 if (base == 0)
200 lmb.rmo_size = size;
201
202 return lmb_add_region(_rgn, base, size);
203
204}
205
206long __init lmb_reserve(unsigned long base, unsigned long size)
207{
208 struct lmb_region *_rgn = &(lmb.reserved);
209
210 BUG_ON(0 == size);
211
212 return lmb_add_region(_rgn, base, size);
213}
214
215long __init lmb_overlaps_region(struct lmb_region *rgn, unsigned long base,
216 unsigned long size)
217{
218 unsigned long i;
219
220 for (i=0; i < rgn->cnt; i++) {
221 unsigned long rgnbase = rgn->region[i].base;
222 unsigned long rgnsize = rgn->region[i].size;
223 if ( lmb_addrs_overlap(base,size,rgnbase,rgnsize) ) {
224 break;
225 }
226 }
227
228 return (i < rgn->cnt) ? i : -1;
229}
230
231unsigned long __init lmb_alloc(unsigned long size, unsigned long align)
232{
233 return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
234}
235
236unsigned long __init lmb_alloc_base(unsigned long size, unsigned long align,
237 unsigned long max_addr)
238{
239 unsigned long alloc;
240
241 alloc = __lmb_alloc_base(size, align, max_addr);
242
243 if (alloc == 0)
244 panic("ERROR: Failed to allocate 0x%lx bytes below 0x%lx.\n",
245 size, max_addr);
246
247 return alloc;
248}
249
250unsigned long __init __lmb_alloc_base(unsigned long size, unsigned long align,
251 unsigned long max_addr)
252{
253 long i, j;
254 unsigned long base = 0;
255
256 BUG_ON(0 == size);
257
258#ifdef CONFIG_PPC32
259 /* On 32-bit, make sure we allocate lowmem */
260 if (max_addr == LMB_ALLOC_ANYWHERE)
261 max_addr = __max_low_memory;
262#endif
263 for (i = lmb.memory.cnt-1; i >= 0; i--) {
264 unsigned long lmbbase = lmb.memory.region[i].base;
265 unsigned long lmbsize = lmb.memory.region[i].size;
266
267 if (max_addr == LMB_ALLOC_ANYWHERE)
268 base = _ALIGN_DOWN(lmbbase + lmbsize - size, align);
269 else if (lmbbase < max_addr) {
270 base = min(lmbbase + lmbsize, max_addr);
271 base = _ALIGN_DOWN(base - size, align);
272 } else
273 continue;
274
275 while ((lmbbase <= base) &&
276 ((j = lmb_overlaps_region(&lmb.reserved, base, size)) >= 0) )
277 base = _ALIGN_DOWN(lmb.reserved.region[j].base - size,
278 align);
279
280 if ((base != 0) && (lmbbase <= base))
281 break;
282 }
283
284 if (i < 0)
285 return 0;
286
287 lmb_add_region(&lmb.reserved, base, size);
288
289 return base;
290}
291
292/* You must call lmb_analyze() before this. */
293unsigned long __init lmb_phys_mem_size(void)
294{
295 return lmb.memory.size;
296}
297
298unsigned long __init lmb_end_of_DRAM(void)
299{
300 int idx = lmb.memory.cnt - 1;
301
302 return (lmb.memory.region[idx].base + lmb.memory.region[idx].size);
303}
304
305/* You must call lmb_analyze() after this. */
306void __init lmb_enforce_memory_limit(unsigned long memory_limit)
307{
308 unsigned long i, limit;
309 struct lmb_property *p;
310
311 if (! memory_limit)
312 return;
313
314 /* Truncate the lmb regions to satisfy the memory limit. */
315 limit = memory_limit;
316 for (i = 0; i < lmb.memory.cnt; i++) {
317 if (limit > lmb.memory.region[i].size) {
318 limit -= lmb.memory.region[i].size;
319 continue;
320 }
321
322 lmb.memory.region[i].size = limit;
323 lmb.memory.cnt = i + 1;
324 break;
325 }
326
327 if (lmb.memory.region[0].size < lmb.rmo_size)
328 lmb.rmo_size = lmb.memory.region[0].size;
329
330 /* And truncate any reserves above the limit also. */
331 for (i = 0; i < lmb.reserved.cnt; i++) {
332 p = &lmb.reserved.region[i];
333
334 if (p->base > memory_limit)
335 p->size = 0;
336 else if ((p->base + p->size) > memory_limit)
337 p->size = memory_limit - p->base;
338
339 if (p->size == 0) {
340 lmb_remove_region(&lmb.reserved, i);
341 i--;
342 }
343 }
344}
345
346int __init lmb_is_reserved(unsigned long addr)
347{
348 int i;
349
350 for (i = 0; i < lmb.reserved.cnt; i++) {
351 unsigned long upper = lmb.reserved.region[i].base +
352 lmb.reserved.region[i].size - 1;
353 if ((addr >= lmb.reserved.region[i].base) && (addr <= upper))
354 return 1;
355 }
356 return 0;
357}
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index be5c506779a7..16def4dcff6d 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -31,6 +31,7 @@
31#include <linux/initrd.h> 31#include <linux/initrd.h>
32#include <linux/pagemap.h> 32#include <linux/pagemap.h>
33#include <linux/suspend.h> 33#include <linux/suspend.h>
34#include <linux/lmb.h>
34 35
35#include <asm/pgalloc.h> 36#include <asm/pgalloc.h>
36#include <asm/prom.h> 37#include <asm/prom.h>
@@ -42,7 +43,6 @@
42#include <asm/machdep.h> 43#include <asm/machdep.h>
43#include <asm/btext.h> 44#include <asm/btext.h>
44#include <asm/tlb.h> 45#include <asm/tlb.h>
45#include <asm/lmb.h>
46#include <asm/sections.h> 46#include <asm/sections.h>
47#include <asm/vdso.h> 47#include <asm/vdso.h>
48 48
@@ -111,7 +111,7 @@ int memory_add_physaddr_to_nid(u64 start)
111} 111}
112#endif 112#endif
113 113
114int __devinit arch_add_memory(int nid, u64 start, u64 size) 114int arch_add_memory(int nid, u64 start, u64 size)
115{ 115{
116 struct pglist_data *pgdata; 116 struct pglist_data *pgdata;
117 struct zone *zone; 117 struct zone *zone;
@@ -175,7 +175,6 @@ void show_mem(void)
175 175
176 printk("Mem-info:\n"); 176 printk("Mem-info:\n");
177 show_free_areas(); 177 show_free_areas();
178 printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
179 for_each_online_pgdat(pgdat) { 178 for_each_online_pgdat(pgdat) {
180 unsigned long flags; 179 unsigned long flags;
181 pgdat_resize_lock(pgdat, &flags); 180 pgdat_resize_lock(pgdat, &flags);
@@ -217,9 +216,11 @@ void __init do_init_bootmem(void)
217 unsigned long total_pages; 216 unsigned long total_pages;
218 int boot_mapsize; 217 int boot_mapsize;
219 218
220 max_pfn = total_pages = lmb_end_of_DRAM() >> PAGE_SHIFT; 219 max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT;
220 total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT;
221#ifdef CONFIG_HIGHMEM 221#ifdef CONFIG_HIGHMEM
222 total_pages = total_lowmem >> PAGE_SHIFT; 222 total_pages = total_lowmem >> PAGE_SHIFT;
223 max_low_pfn = lowmem_end_addr >> PAGE_SHIFT;
223#endif 224#endif
224 225
225 /* 226 /*
@@ -245,18 +246,18 @@ void __init do_init_bootmem(void)
245 * present. 246 * present.
246 */ 247 */
247#ifdef CONFIG_HIGHMEM 248#ifdef CONFIG_HIGHMEM
248 free_bootmem_with_active_regions(0, total_lowmem >> PAGE_SHIFT); 249 free_bootmem_with_active_regions(0, lowmem_end_addr >> PAGE_SHIFT);
249 250
250 /* reserve the sections we're already using */ 251 /* reserve the sections we're already using */
251 for (i = 0; i < lmb.reserved.cnt; i++) { 252 for (i = 0; i < lmb.reserved.cnt; i++) {
252 unsigned long addr = lmb.reserved.region[i].base + 253 unsigned long addr = lmb.reserved.region[i].base +
253 lmb_size_bytes(&lmb.reserved, i) - 1; 254 lmb_size_bytes(&lmb.reserved, i) - 1;
254 if (addr < total_lowmem) 255 if (addr < lowmem_end_addr)
255 reserve_bootmem(lmb.reserved.region[i].base, 256 reserve_bootmem(lmb.reserved.region[i].base,
256 lmb_size_bytes(&lmb.reserved, i), 257 lmb_size_bytes(&lmb.reserved, i),
257 BOOTMEM_DEFAULT); 258 BOOTMEM_DEFAULT);
258 else if (lmb.reserved.region[i].base < total_lowmem) { 259 else if (lmb.reserved.region[i].base < lowmem_end_addr) {
259 unsigned long adjusted_size = total_lowmem - 260 unsigned long adjusted_size = lowmem_end_addr -
260 lmb.reserved.region[i].base; 261 lmb.reserved.region[i].base;
261 reserve_bootmem(lmb.reserved.region[i].base, 262 reserve_bootmem(lmb.reserved.region[i].base,
262 adjusted_size, BOOTMEM_DEFAULT); 263 adjusted_size, BOOTMEM_DEFAULT);
@@ -326,7 +327,7 @@ void __init paging_init(void)
326 (top_of_ram - total_ram) >> 20); 327 (top_of_ram - total_ram) >> 20);
327 memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); 328 memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
328#ifdef CONFIG_HIGHMEM 329#ifdef CONFIG_HIGHMEM
329 max_zone_pfns[ZONE_DMA] = total_lowmem >> PAGE_SHIFT; 330 max_zone_pfns[ZONE_DMA] = lowmem_end_addr >> PAGE_SHIFT;
330 max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT; 331 max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT;
331#else 332#else
332 max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT; 333 max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT;
@@ -381,7 +382,7 @@ void __init mem_init(void)
381 { 382 {
382 unsigned long pfn, highmem_mapnr; 383 unsigned long pfn, highmem_mapnr;
383 384
384 highmem_mapnr = total_lowmem >> PAGE_SHIFT; 385 highmem_mapnr = lowmem_end_addr >> PAGE_SHIFT;
385 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) { 386 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) {
386 struct page *page = pfn_to_page(pfn); 387 struct page *page = pfn_to_page(pfn);
387 if (lmb_is_reserved(pfn << PAGE_SHIFT)) 388 if (lmb_is_reserved(pfn << PAGE_SHIFT))
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h
index ebfd13dc9d19..04802252a64f 100644
--- a/arch/powerpc/mm/mmu_decl.h
+++ b/arch/powerpc/mm/mmu_decl.h
@@ -48,9 +48,11 @@ extern unsigned int num_tlbcam_entries;
48 48
49extern unsigned long ioremap_bot; 49extern unsigned long ioremap_bot;
50extern unsigned long __max_low_memory; 50extern unsigned long __max_low_memory;
51extern unsigned long __initial_memory_limit; 51extern phys_addr_t __initial_memory_limit_addr;
52extern unsigned long total_memory; 52extern unsigned long total_memory;
53extern unsigned long total_lowmem; 53extern unsigned long total_lowmem;
54extern phys_addr_t memstart_addr;
55extern phys_addr_t lowmem_end_addr;
54 56
55/* ...and now those things that may be slightly different between processor 57/* ...and now those things that may be slightly different between processor
56 * architectures. -- Dan 58 * architectures. -- Dan
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
index a300d254aac6..1efd631211ef 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -17,8 +17,9 @@
17#include <linux/nodemask.h> 17#include <linux/nodemask.h>
18#include <linux/cpu.h> 18#include <linux/cpu.h>
19#include <linux/notifier.h> 19#include <linux/notifier.h>
20#include <linux/lmb.h>
20#include <asm/sparsemem.h> 21#include <asm/sparsemem.h>
21#include <asm/lmb.h> 22#include <asm/prom.h>
22#include <asm/system.h> 23#include <asm/system.h>
23#include <asm/smp.h> 24#include <asm/smp.h>
24 25
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index ac3390f81900..64c44bcc68de 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -281,12 +281,13 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
281 */ 281 */
282void __init mapin_ram(void) 282void __init mapin_ram(void)
283{ 283{
284 unsigned long v, p, s, f; 284 unsigned long v, s, f;
285 phys_addr_t p;
285 int ktext; 286 int ktext;
286 287
287 s = mmu_mapin_ram(); 288 s = mmu_mapin_ram();
288 v = KERNELBASE + s; 289 v = KERNELBASE + s;
289 p = PPC_MEMSTART + s; 290 p = memstart_addr + s;
290 for (; s < total_lowmem; s += PAGE_SIZE) { 291 for (; s < total_lowmem; s += PAGE_SIZE) {
291 ktext = ((char *) v >= _stext && (char *) v < etext); 292 ktext = ((char *) v >= _stext && (char *) v < etext);
292 f = ktext ?_PAGE_RAM_TEXT : _PAGE_RAM; 293 f = ktext ?_PAGE_RAM_TEXT : _PAGE_RAM;
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index 5c45d474cfcc..cef9f156874b 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -26,11 +26,11 @@
26#include <linux/mm.h> 26#include <linux/mm.h>
27#include <linux/init.h> 27#include <linux/init.h>
28#include <linux/highmem.h> 28#include <linux/highmem.h>
29#include <linux/lmb.h>
29 30
30#include <asm/prom.h> 31#include <asm/prom.h>
31#include <asm/mmu.h> 32#include <asm/mmu.h>
32#include <asm/machdep.h> 33#include <asm/machdep.h>
33#include <asm/lmb.h>
34 34
35#include "mmu_decl.h" 35#include "mmu_decl.h"
36 36
@@ -82,7 +82,6 @@ unsigned long __init mmu_mapin_ram(void)
82#else 82#else
83 unsigned long tot, bl, done; 83 unsigned long tot, bl, done;
84 unsigned long max_size = (256<<20); 84 unsigned long max_size = (256<<20);
85 unsigned long align;
86 85
87 if (__map_without_bats) { 86 if (__map_without_bats) {
88 printk(KERN_DEBUG "RAM mapped without BATs\n"); 87 printk(KERN_DEBUG "RAM mapped without BATs\n");
@@ -93,19 +92,13 @@ unsigned long __init mmu_mapin_ram(void)
93 92
94 /* Make sure we don't map a block larger than the 93 /* Make sure we don't map a block larger than the
95 smallest alignment of the physical address. */ 94 smallest alignment of the physical address. */
96 /* alignment of PPC_MEMSTART */
97 align = ~(PPC_MEMSTART-1) & PPC_MEMSTART;
98 /* set BAT block size to MIN(max_size, align) */
99 if (align && align < max_size)
100 max_size = align;
101
102 tot = total_lowmem; 95 tot = total_lowmem;
103 for (bl = 128<<10; bl < max_size; bl <<= 1) { 96 for (bl = 128<<10; bl < max_size; bl <<= 1) {
104 if (bl * 2 > tot) 97 if (bl * 2 > tot)
105 break; 98 break;
106 } 99 }
107 100
108 setbat(2, KERNELBASE, PPC_MEMSTART, bl, _PAGE_RAM); 101 setbat(2, KERNELBASE, 0, bl, _PAGE_RAM);
109 done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1; 102 done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1;
110 if ((done < tot) && !bat_addrs[3].limit) { 103 if ((done < tot) && !bat_addrs[3].limit) {
111 /* use BAT3 to cover a bit more */ 104 /* use BAT3 to cover a bit more */
@@ -113,7 +106,7 @@ unsigned long __init mmu_mapin_ram(void)
113 for (bl = 128<<10; bl < max_size; bl <<= 1) 106 for (bl = 128<<10; bl < max_size; bl <<= 1)
114 if (bl * 2 > tot) 107 if (bl * 2 > tot)
115 break; 108 break;
116 setbat(3, KERNELBASE+done, PPC_MEMSTART+done, bl, _PAGE_RAM); 109 setbat(3, KERNELBASE+done, done, bl, _PAGE_RAM);
117 done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1; 110 done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1;
118 } 111 }
119 112
@@ -240,7 +233,7 @@ void __init MMU_init_hw(void)
240 */ 233 */
241 if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322); 234 if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322);
242 Hash = __va(lmb_alloc_base(Hash_size, Hash_size, 235 Hash = __va(lmb_alloc_base(Hash_size, Hash_size,
243 __initial_memory_limit)); 236 __initial_memory_limit_addr));
244 cacheable_memzero(Hash, Hash_size); 237 cacheable_memzero(Hash, Hash_size);
245 _SDR1 = __pa(Hash) | SDR1_LOW_BITS; 238 _SDR1 = __pa(Hash) | SDR1_LOW_BITS;
246 239
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c
index 50448d5de9d2..efbbd13d93e5 100644
--- a/arch/powerpc/mm/stab.c
+++ b/arch/powerpc/mm/stab.c
@@ -12,12 +12,14 @@
12 * 2 of the License, or (at your option) any later version. 12 * 2 of the License, or (at your option) any later version.
13 */ 13 */
14 14
15#include <linux/lmb.h>
16
15#include <asm/pgtable.h> 17#include <asm/pgtable.h>
16#include <asm/mmu.h> 18#include <asm/mmu.h>
17#include <asm/mmu_context.h> 19#include <asm/mmu_context.h>
18#include <asm/paca.h> 20#include <asm/paca.h>
19#include <asm/cputable.h> 21#include <asm/cputable.h>
20#include <asm/lmb.h> 22#include <asm/prom.h>
21#include <asm/abs_addr.h> 23#include <asm/abs_addr.h>
22#include <asm/firmware.h> 24#include <asm/firmware.h>
23#include <asm/iseries/hv_call.h> 25#include <asm/iseries/hv_call.h>
diff --git a/arch/powerpc/oprofile/cell/spu_task_sync.c b/arch/powerpc/oprofile/cell/spu_task_sync.c
index 257b13cb18af..2a9b4a049329 100644
--- a/arch/powerpc/oprofile/cell/spu_task_sync.c
+++ b/arch/powerpc/oprofile/cell/spu_task_sync.c
@@ -68,7 +68,7 @@ static struct cached_info *get_cached_info(struct spu *the_spu, int spu_num)
68 if (spu_num >= num_spu_nodes) { 68 if (spu_num >= num_spu_nodes) {
69 printk(KERN_ERR "SPU_PROF: " 69 printk(KERN_ERR "SPU_PROF: "
70 "%s, line %d: Invalid index %d into spu info cache\n", 70 "%s, line %d: Invalid index %d into spu info cache\n",
71 __FUNCTION__, __LINE__, spu_num); 71 __func__, __LINE__, spu_num);
72 ret_info = NULL; 72 ret_info = NULL;
73 goto out; 73 goto out;
74 } 74 }
@@ -115,7 +115,7 @@ prepare_cached_spu_info(struct spu *spu, unsigned long objectId)
115 if (!info) { 115 if (!info) {
116 printk(KERN_ERR "SPU_PROF: " 116 printk(KERN_ERR "SPU_PROF: "
117 "%s, line %d: create vma_map failed\n", 117 "%s, line %d: create vma_map failed\n",
118 __FUNCTION__, __LINE__); 118 __func__, __LINE__);
119 retval = -ENOMEM; 119 retval = -ENOMEM;
120 goto err_alloc; 120 goto err_alloc;
121 } 121 }
@@ -123,7 +123,7 @@ prepare_cached_spu_info(struct spu *spu, unsigned long objectId)
123 if (!new_map) { 123 if (!new_map) {
124 printk(KERN_ERR "SPU_PROF: " 124 printk(KERN_ERR "SPU_PROF: "
125 "%s, line %d: create vma_map failed\n", 125 "%s, line %d: create vma_map failed\n",
126 __FUNCTION__, __LINE__); 126 __func__, __LINE__);
127 retval = -ENOMEM; 127 retval = -ENOMEM;
128 goto err_alloc; 128 goto err_alloc;
129 } 129 }
@@ -171,7 +171,7 @@ static int release_cached_info(int spu_index)
171 printk(KERN_ERR "SPU_PROF: " 171 printk(KERN_ERR "SPU_PROF: "
172 "%s, line %d: " 172 "%s, line %d: "
173 "Invalid index %d into spu info cache\n", 173 "Invalid index %d into spu info cache\n",
174 __FUNCTION__, __LINE__, spu_index); 174 __func__, __LINE__, spu_index);
175 goto out; 175 goto out;
176 } 176 }
177 end = spu_index + 1; 177 end = spu_index + 1;
@@ -273,7 +273,7 @@ fail_no_image_cookie:
273 273
274 printk(KERN_ERR "SPU_PROF: " 274 printk(KERN_ERR "SPU_PROF: "
275 "%s, line %d: Cannot find dcookie for SPU binary\n", 275 "%s, line %d: Cannot find dcookie for SPU binary\n",
276 __FUNCTION__, __LINE__); 276 __func__, __LINE__);
277 goto out; 277 goto out;
278} 278}
279 279
@@ -467,7 +467,7 @@ int spu_sync_stop(void)
467 if (ret) { 467 if (ret) {
468 printk(KERN_ERR "SPU_PROF: " 468 printk(KERN_ERR "SPU_PROF: "
469 "%s, line %d: spu_switch_event_unregister returned %d\n", 469 "%s, line %d: spu_switch_event_unregister returned %d\n",
470 __FUNCTION__, __LINE__, ret); 470 __func__, __LINE__, ret);
471 goto out; 471 goto out;
472 } 472 }
473 473
diff --git a/arch/powerpc/oprofile/cell/vma_map.c b/arch/powerpc/oprofile/cell/vma_map.c
index 9a932177e70e..fff66662d021 100644
--- a/arch/powerpc/oprofile/cell/vma_map.c
+++ b/arch/powerpc/oprofile/cell/vma_map.c
@@ -72,7 +72,7 @@ vma_map_add(struct vma_to_fileoffset_map *map, unsigned int vma,
72 kzalloc(sizeof(struct vma_to_fileoffset_map), GFP_KERNEL); 72 kzalloc(sizeof(struct vma_to_fileoffset_map), GFP_KERNEL);
73 if (!new) { 73 if (!new) {
74 printk(KERN_ERR "SPU_PROF: %s, line %d: malloc failed\n", 74 printk(KERN_ERR "SPU_PROF: %s, line %d: malloc failed\n",
75 __FUNCTION__, __LINE__); 75 __func__, __LINE__);
76 vma_map_free(map); 76 vma_map_free(map);
77 return NULL; 77 return NULL;
78 } 78 }
@@ -134,19 +134,19 @@ struct vma_to_fileoffset_map *create_vma_map(const struct spu *aSpu,
134 if (memcmp(ehdr.e_ident, expected, EI_PAD) != 0) { 134 if (memcmp(ehdr.e_ident, expected, EI_PAD) != 0) {
135 printk(KERN_ERR "SPU_PROF: " 135 printk(KERN_ERR "SPU_PROF: "
136 "%s, line %d: Unexpected e_ident parsing SPU ELF\n", 136 "%s, line %d: Unexpected e_ident parsing SPU ELF\n",
137 __FUNCTION__, __LINE__); 137 __func__, __LINE__);
138 goto fail; 138 goto fail;
139 } 139 }
140 if (ehdr.e_machine != EM_SPU) { 140 if (ehdr.e_machine != EM_SPU) {
141 printk(KERN_ERR "SPU_PROF: " 141 printk(KERN_ERR "SPU_PROF: "
142 "%s, line %d: Unexpected e_machine parsing SPU ELF\n", 142 "%s, line %d: Unexpected e_machine parsing SPU ELF\n",
143 __FUNCTION__, __LINE__); 143 __func__, __LINE__);
144 goto fail; 144 goto fail;
145 } 145 }
146 if (ehdr.e_type != ET_EXEC) { 146 if (ehdr.e_type != ET_EXEC) {
147 printk(KERN_ERR "SPU_PROF: " 147 printk(KERN_ERR "SPU_PROF: "
148 "%s, line %d: Unexpected e_type parsing SPU ELF\n", 148 "%s, line %d: Unexpected e_type parsing SPU ELF\n",
149 __FUNCTION__, __LINE__); 149 __func__, __LINE__);
150 goto fail; 150 goto fail;
151 } 151 }
152 phdr_start = spu_elf_start + ehdr.e_phoff; 152 phdr_start = spu_elf_start + ehdr.e_phoff;
@@ -232,7 +232,7 @@ struct vma_to_fileoffset_map *create_vma_map(const struct spu *aSpu,
232 if (overlay_tbl_offset < 0) { 232 if (overlay_tbl_offset < 0) {
233 printk(KERN_ERR "SPU_PROF: " 233 printk(KERN_ERR "SPU_PROF: "
234 "%s, line %d: Error finding SPU overlay table\n", 234 "%s, line %d: Error finding SPU overlay table\n",
235 __FUNCTION__, __LINE__); 235 __func__, __LINE__);
236 goto fail; 236 goto fail;
237 } 237 }
238 ovly_table = spu_elf_start + overlay_tbl_offset; 238 ovly_table = spu_elf_start + overlay_tbl_offset;
diff --git a/arch/powerpc/oprofile/op_model_cell.c b/arch/powerpc/oprofile/op_model_cell.c
index 9eed1f68fcab..5ff4de3eb3be 100644
--- a/arch/powerpc/oprofile/op_model_cell.c
+++ b/arch/powerpc/oprofile/op_model_cell.c
@@ -216,7 +216,7 @@ static void pm_rtas_reset_signals(u32 node)
216 * failure to stop OProfile. 216 * failure to stop OProfile.
217 */ 217 */
218 printk(KERN_WARNING "%s: rtas returned: %d\n", 218 printk(KERN_WARNING "%s: rtas returned: %d\n",
219 __FUNCTION__, ret); 219 __func__, ret);
220} 220}
221 221
222static int pm_rtas_activate_signals(u32 node, u32 count) 222static int pm_rtas_activate_signals(u32 node, u32 count)
@@ -255,7 +255,7 @@ static int pm_rtas_activate_signals(u32 node, u32 count)
255 255
256 if (unlikely(ret)) { 256 if (unlikely(ret)) {
257 printk(KERN_WARNING "%s: rtas returned: %d\n", 257 printk(KERN_WARNING "%s: rtas returned: %d\n",
258 __FUNCTION__, ret); 258 __func__, ret);
259 return -EIO; 259 return -EIO;
260 } 260 }
261 } 261 }
@@ -560,7 +560,7 @@ static int cell_reg_setup(struct op_counter_config *ctr,
560 if (unlikely(spu_rtas_token == RTAS_UNKNOWN_SERVICE)) { 560 if (unlikely(spu_rtas_token == RTAS_UNKNOWN_SERVICE)) {
561 printk(KERN_ERR 561 printk(KERN_ERR
562 "%s: rtas token ibm,cbe-spu-perftools unknown\n", 562 "%s: rtas token ibm,cbe-spu-perftools unknown\n",
563 __FUNCTION__); 563 __func__);
564 return -EIO; 564 return -EIO;
565 } 565 }
566 } 566 }
@@ -576,7 +576,7 @@ static int cell_reg_setup(struct op_counter_config *ctr,
576 if (unlikely(pm_rtas_token == RTAS_UNKNOWN_SERVICE)) { 576 if (unlikely(pm_rtas_token == RTAS_UNKNOWN_SERVICE)) {
577 printk(KERN_ERR 577 printk(KERN_ERR
578 "%s: rtas token ibm,cbe-perftools unknown\n", 578 "%s: rtas token ibm,cbe-perftools unknown\n",
579 __FUNCTION__); 579 __func__);
580 return -EIO; 580 return -EIO;
581 } 581 }
582 582
@@ -853,7 +853,7 @@ static int pm_rtas_activate_spu_profiling(u32 node)
853 853
854 if (unlikely(ret)) { 854 if (unlikely(ret)) {
855 printk(KERN_WARNING "%s: rtas returned: %d\n", 855 printk(KERN_WARNING "%s: rtas returned: %d\n",
856 __FUNCTION__, ret); 856 __func__, ret);
857 return -EIO; 857 return -EIO;
858 } 858 }
859 859
@@ -949,7 +949,7 @@ static int cell_global_start_spu(struct op_counter_config *ctr)
949 if (unlikely(ret != 0)) { 949 if (unlikely(ret != 0)) {
950 printk(KERN_ERR 950 printk(KERN_ERR
951 "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n", 951 "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n",
952 __FUNCTION__, ret); 952 __func__, ret);
953 rtas_error = -EIO; 953 rtas_error = -EIO;
954 goto out; 954 goto out;
955 } 955 }
@@ -1061,7 +1061,7 @@ static void cell_global_stop_spu(void)
1061 if (unlikely(rtn_value != 0)) { 1061 if (unlikely(rtn_value != 0)) {
1062 printk(KERN_ERR 1062 printk(KERN_ERR
1063 "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n", 1063 "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n",
1064 __FUNCTION__, rtn_value); 1064 __func__, rtn_value);
1065 } 1065 }
1066 1066
1067 /* Deactivate the signals */ 1067 /* Deactivate the signals */
diff --git a/arch/powerpc/platforms/40x/ep405.c b/arch/powerpc/platforms/40x/ep405.c
index 13d1345026da..ae2e7f67c18e 100644
--- a/arch/powerpc/platforms/40x/ep405.c
+++ b/arch/powerpc/platforms/40x/ep405.c
@@ -29,6 +29,7 @@
29#include <asm/time.h> 29#include <asm/time.h>
30#include <asm/uic.h> 30#include <asm/uic.h>
31#include <asm/pci-bridge.h> 31#include <asm/pci-bridge.h>
32#include <asm/ppc4xx.h>
32 33
33static struct device_node *bcsr_node; 34static struct device_node *bcsr_node;
34static void __iomem *bcsr_regs; 35static void __iomem *bcsr_regs;
@@ -119,5 +120,6 @@ define_machine(ep405) {
119 .progress = udbg_progress, 120 .progress = udbg_progress,
120 .init_IRQ = uic_init_tree, 121 .init_IRQ = uic_init_tree,
121 .get_irq = uic_get_irq, 122 .get_irq = uic_get_irq,
123 .restart = ppc4xx_reset_system,
122 .calibrate_decr = generic_calibrate_decr, 124 .calibrate_decr = generic_calibrate_decr,
123}; 125};
diff --git a/arch/powerpc/platforms/40x/kilauea.c b/arch/powerpc/platforms/40x/kilauea.c
index f9206a7fede0..1dd24ffc0dc1 100644
--- a/arch/powerpc/platforms/40x/kilauea.c
+++ b/arch/powerpc/platforms/40x/kilauea.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Kilauea board specific routines 2 * Kilauea board specific routines
3 * 3 *
4 * Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de> 4 * Copyright 2007-2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 * 5 *
6 * Based on the Walnut code by 6 * Based on the Walnut code by
7 * Josh Boyer <jwboyer@linux.vnet.ibm.com> 7 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
@@ -20,6 +20,7 @@
20#include <asm/time.h> 20#include <asm/time.h>
21#include <asm/uic.h> 21#include <asm/uic.h>
22#include <asm/pci-bridge.h> 22#include <asm/pci-bridge.h>
23#include <asm/ppc4xx.h>
23 24
24static __initdata struct of_device_id kilauea_of_bus[] = { 25static __initdata struct of_device_id kilauea_of_bus[] = {
25 { .compatible = "ibm,plb4", }, 26 { .compatible = "ibm,plb4", },
@@ -54,5 +55,6 @@ define_machine(kilauea) {
54 .progress = udbg_progress, 55 .progress = udbg_progress,
55 .init_IRQ = uic_init_tree, 56 .init_IRQ = uic_init_tree,
56 .get_irq = uic_get_irq, 57 .get_irq = uic_get_irq,
58 .restart = ppc4xx_reset_system,
57 .calibrate_decr = generic_calibrate_decr, 59 .calibrate_decr = generic_calibrate_decr,
58}; 60};
diff --git a/arch/powerpc/platforms/40x/makalu.c b/arch/powerpc/platforms/40x/makalu.c
index 4e4df72fc9cd..a6a1d6017b71 100644
--- a/arch/powerpc/platforms/40x/makalu.c
+++ b/arch/powerpc/platforms/40x/makalu.c
@@ -20,6 +20,7 @@
20#include <asm/time.h> 20#include <asm/time.h>
21#include <asm/uic.h> 21#include <asm/uic.h>
22#include <asm/pci-bridge.h> 22#include <asm/pci-bridge.h>
23#include <asm/ppc4xx.h>
23 24
24static __initdata struct of_device_id makalu_of_bus[] = { 25static __initdata struct of_device_id makalu_of_bus[] = {
25 { .compatible = "ibm,plb4", }, 26 { .compatible = "ibm,plb4", },
@@ -54,5 +55,6 @@ define_machine(makalu) {
54 .progress = udbg_progress, 55 .progress = udbg_progress,
55 .init_IRQ = uic_init_tree, 56 .init_IRQ = uic_init_tree,
56 .get_irq = uic_get_irq, 57 .get_irq = uic_get_irq,
58 .restart = ppc4xx_reset_system,
57 .calibrate_decr = generic_calibrate_decr, 59 .calibrate_decr = generic_calibrate_decr,
58}; 60};
diff --git a/arch/powerpc/platforms/40x/virtex.c b/arch/powerpc/platforms/40x/virtex.c
index 0422590040db..fc7fb001276c 100644
--- a/arch/powerpc/platforms/40x/virtex.c
+++ b/arch/powerpc/platforms/40x/virtex.c
@@ -14,6 +14,7 @@
14#include <asm/prom.h> 14#include <asm/prom.h>
15#include <asm/time.h> 15#include <asm/time.h>
16#include <asm/xilinx_intc.h> 16#include <asm/xilinx_intc.h>
17#include <asm/ppc4xx.h>
17 18
18static struct of_device_id xilinx_of_bus_ids[] __initdata = { 19static struct of_device_id xilinx_of_bus_ids[] __initdata = {
19 { .compatible = "xlnx,plb-v46-1.00.a", }, 20 { .compatible = "xlnx,plb-v46-1.00.a", },
@@ -48,5 +49,6 @@ define_machine(virtex) {
48 .probe = virtex_probe, 49 .probe = virtex_probe,
49 .init_IRQ = xilinx_intc_init_tree, 50 .init_IRQ = xilinx_intc_init_tree,
50 .get_irq = xilinx_intc_get_irq, 51 .get_irq = xilinx_intc_get_irq,
52 .restart = ppc4xx_reset_system,
51 .calibrate_decr = generic_calibrate_decr, 53 .calibrate_decr = generic_calibrate_decr,
52}; 54};
diff --git a/arch/powerpc/platforms/40x/walnut.c b/arch/powerpc/platforms/40x/walnut.c
index b8b257efeb77..335df91fbee5 100644
--- a/arch/powerpc/platforms/40x/walnut.c
+++ b/arch/powerpc/platforms/40x/walnut.c
@@ -26,6 +26,7 @@
26#include <asm/time.h> 26#include <asm/time.h>
27#include <asm/uic.h> 27#include <asm/uic.h>
28#include <asm/pci-bridge.h> 28#include <asm/pci-bridge.h>
29#include <asm/ppc4xx.h>
29 30
30static __initdata struct of_device_id walnut_of_bus[] = { 31static __initdata struct of_device_id walnut_of_bus[] = {
31 { .compatible = "ibm,plb3", }, 32 { .compatible = "ibm,plb3", },
@@ -61,5 +62,6 @@ define_machine(walnut) {
61 .progress = udbg_progress, 62 .progress = udbg_progress,
62 .init_IRQ = uic_init_tree, 63 .init_IRQ = uic_init_tree,
63 .get_irq = uic_get_irq, 64 .get_irq = uic_get_irq,
64 .calibrate_decr = generic_calibrate_decr, 65 .restart = ppc4xx_reset_system,
66 .calibrate_decr = generic_calibrate_decr,
65}; 67};
diff --git a/arch/powerpc/platforms/44x/44x.h b/arch/powerpc/platforms/44x/44x.h
index 42eabf87fea3..dbc4d2b4301a 100644
--- a/arch/powerpc/platforms/44x/44x.h
+++ b/arch/powerpc/platforms/44x/44x.h
@@ -3,6 +3,5 @@
3 3
4extern u8 as1_readb(volatile u8 __iomem *addr); 4extern u8 as1_readb(volatile u8 __iomem *addr);
5extern void as1_writeb(u8 data, volatile u8 __iomem *addr); 5extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
6extern void ppc44x_reset_system(char *cmd);
7 6
8#endif /* __POWERPC_PLATFORMS_44X_44X_H */ 7#endif /* __POWERPC_PLATFORMS_44X_44X_H */
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
index 1bfb2191010a..6abe91357eee 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -67,6 +67,25 @@ config WARP
67 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer 67 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer
68 Telephony Developers" link for more information. 68 Telephony Developers" link for more information.
69 69
70config CANYONLANDS
71 bool "Canyonlands"
72 depends on 44x
73 default n
74 select 460EX
75 select PCI
76 select PPC4xx_PCI_EXPRESS
77 help
78 This option enables support for the AMCC PPC460EX evaluation board.
79
80config YOSEMITE
81 bool "Yosemite"
82 depends on 44x
83 default n
84 select 440EP
85 select PCI
86 help
87 This option enables support for the AMCC PPC440EP evaluation board.
88
70#config LUAN 89#config LUAN
71# bool "Luan" 90# bool "Luan"
72# depends on 44x 91# depends on 44x
@@ -122,6 +141,14 @@ config 440SPe
122 bool 141 bool
123 select IBM_NEW_EMAC_EMAC4 142 select IBM_NEW_EMAC_EMAC4
124 143
144config 460EX
145 bool
146 select PPC_FPU
147 select IBM_NEW_EMAC_EMAC4
148 select IBM_NEW_EMAC_RGMII
149 select IBM_NEW_EMAC_ZMII
150 select IBM_NEW_EMAC_TAH
151
125# 44x errata/workaround config symbols, selected by the CPU models above 152# 44x errata/workaround config symbols, selected by the CPU models above
126config IBM440EP_ERR42 153config IBM440EP_ERR42
127 bool 154 bool
diff --git a/arch/powerpc/platforms/44x/Makefile b/arch/powerpc/platforms/44x/Makefile
index 0864d4f1cbc2..774165f9acdd 100644
--- a/arch/powerpc/platforms/44x/Makefile
+++ b/arch/powerpc/platforms/44x/Makefile
@@ -1,9 +1,11 @@
1obj-$(CONFIG_44x) := misc_44x.o 1obj-$(CONFIG_44x) := misc_44x.o idle.o
2obj-$(CONFIG_EBONY) += ebony.o 2obj-$(CONFIG_EBONY) += ebony.o
3obj-$(CONFIG_TAISHAN) += taishan.o 3obj-$(CONFIG_TAISHAN) += taishan.o
4obj-$(CONFIG_BAMBOO) += bamboo.o 4obj-$(CONFIG_BAMBOO) += bamboo.o
5obj-$(CONFIG_YOSEMITE) += bamboo.o
5obj-$(CONFIG_SEQUOIA) += sequoia.o 6obj-$(CONFIG_SEQUOIA) += sequoia.o
6obj-$(CONFIG_KATMAI) += katmai.o 7obj-$(CONFIG_KATMAI) += katmai.o
7obj-$(CONFIG_RAINIER) += rainier.o 8obj-$(CONFIG_RAINIER) += rainier.o
8obj-$(CONFIG_WARP) += warp.o 9obj-$(CONFIG_WARP) += warp.o
9obj-$(CONFIG_WARP) += warp-nand.o 10obj-$(CONFIG_WARP) += warp-nand.o
11obj-$(CONFIG_CANYONLANDS) += canyonlands.o
diff --git a/arch/powerpc/platforms/44x/bamboo.c b/arch/powerpc/platforms/44x/bamboo.c
index fb9a22a7e8d0..cef169e95156 100644
--- a/arch/powerpc/platforms/44x/bamboo.c
+++ b/arch/powerpc/platforms/44x/bamboo.c
@@ -22,8 +22,7 @@
22#include <asm/time.h> 22#include <asm/time.h>
23#include <asm/uic.h> 23#include <asm/uic.h>
24#include <asm/pci-bridge.h> 24#include <asm/pci-bridge.h>
25 25#include <asm/ppc4xx.h>
26#include "44x.h"
27 26
28static __initdata struct of_device_id bamboo_of_bus[] = { 27static __initdata struct of_device_id bamboo_of_bus[] = {
29 { .compatible = "ibm,plb4", }, 28 { .compatible = "ibm,plb4", },
@@ -53,11 +52,11 @@ static int __init bamboo_probe(void)
53} 52}
54 53
55define_machine(bamboo) { 54define_machine(bamboo) {
56 .name = "Bamboo", 55 .name = "Bamboo",
57 .probe = bamboo_probe, 56 .probe = bamboo_probe,
58 .progress = udbg_progress, 57 .progress = udbg_progress,
59 .init_IRQ = uic_init_tree, 58 .init_IRQ = uic_init_tree,
60 .get_irq = uic_get_irq, 59 .get_irq = uic_get_irq,
61 .restart = ppc44x_reset_system, 60 .restart = ppc4xx_reset_system,
62 .calibrate_decr = generic_calibrate_decr, 61 .calibrate_decr = generic_calibrate_decr,
63}; 62};
diff --git a/arch/powerpc/platforms/44x/canyonlands.c b/arch/powerpc/platforms/44x/canyonlands.c
new file mode 100644
index 000000000000..3949289f51df
--- /dev/null
+++ b/arch/powerpc/platforms/44x/canyonlands.c
@@ -0,0 +1,63 @@
1/*
2 * Canyonlands board specific routines
3 *
4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * Based on the Katmai code by
7 * Benjamin Herrenschmidt <benh@kernel.crashing.org>
8 * Copyright 2007 IBM Corp.
9 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
10 * Copyright 2007 IBM Corporation
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version.
16 */
17#include <linux/init.h>
18#include <linux/of_platform.h>
19
20#include <asm/machdep.h>
21#include <asm/prom.h>
22#include <asm/udbg.h>
23#include <asm/time.h>
24#include <asm/uic.h>
25#include <asm/pci-bridge.h>
26#include <asm/ppc4xx.h>
27
28static __initdata struct of_device_id canyonlands_of_bus[] = {
29 { .compatible = "ibm,plb4", },
30 { .compatible = "ibm,opb", },
31 { .compatible = "ibm,ebc", },
32 {},
33};
34
35static int __init canyonlands_device_probe(void)
36{
37 of_platform_bus_probe(NULL, canyonlands_of_bus, NULL);
38
39 return 0;
40}
41machine_device_initcall(canyonlands, canyonlands_device_probe);
42
43static int __init canyonlands_probe(void)
44{
45 unsigned long root = of_get_flat_dt_root();
46
47 if (!of_flat_dt_is_compatible(root, "amcc,canyonlands"))
48 return 0;
49
50 ppc_pci_flags = PPC_PCI_REASSIGN_ALL_RSRC;
51
52 return 1;
53}
54
55define_machine(canyonlands) {
56 .name = "Canyonlands",
57 .probe = canyonlands_probe,
58 .progress = udbg_progress,
59 .init_IRQ = uic_init_tree,
60 .get_irq = uic_get_irq,
61 .restart = ppc4xx_reset_system,
62 .calibrate_decr = generic_calibrate_decr,
63};
diff --git a/arch/powerpc/platforms/44x/ebony.c b/arch/powerpc/platforms/44x/ebony.c
index 1a8d467bff85..a0e8fe4662f6 100644
--- a/arch/powerpc/platforms/44x/ebony.c
+++ b/arch/powerpc/platforms/44x/ebony.c
@@ -26,8 +26,7 @@
26#include <asm/time.h> 26#include <asm/time.h>
27#include <asm/uic.h> 27#include <asm/uic.h>
28#include <asm/pci-bridge.h> 28#include <asm/pci-bridge.h>
29 29#include <asm/ppc4xx.h>
30#include "44x.h"
31 30
32static __initdata struct of_device_id ebony_of_bus[] = { 31static __initdata struct of_device_id ebony_of_bus[] = {
33 { .compatible = "ibm,plb4", }, 32 { .compatible = "ibm,plb4", },
@@ -66,6 +65,6 @@ define_machine(ebony) {
66 .progress = udbg_progress, 65 .progress = udbg_progress,
67 .init_IRQ = uic_init_tree, 66 .init_IRQ = uic_init_tree,
68 .get_irq = uic_get_irq, 67 .get_irq = uic_get_irq,
69 .restart = ppc44x_reset_system, 68 .restart = ppc4xx_reset_system,
70 .calibrate_decr = generic_calibrate_decr, 69 .calibrate_decr = generic_calibrate_decr,
71}; 70};
diff --git a/arch/powerpc/platforms/44x/idle.c b/arch/powerpc/platforms/44x/idle.c
new file mode 100644
index 000000000000..7a81f921fef9
--- /dev/null
+++ b/arch/powerpc/platforms/44x/idle.c
@@ -0,0 +1,67 @@
1/*
2 * Copyright 2008 IBM Corp.
3 *
4 * Based on arch/powerpc/platforms/pasemi/idle.c:
5 * Copyright (C) 2006-2007 PA Semi, Inc
6 *
7 * Added by: Jerone Young <jyoung5@us.ibm.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 */
23
24#include <linux/of.h>
25#include <linux/kernel.h>
26#include <asm/machdep.h>
27
28static int mode_spin;
29
30static void ppc44x_idle(void)
31{
32 unsigned long msr_save;
33
34 msr_save = mfmsr();
35 /* set wait state MSR */
36 mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
37 isync();
38 /* return to initial state */
39 mtmsr(msr_save);
40 isync();
41}
42
43int __init ppc44x_idle_init(void)
44{
45 if (!mode_spin) {
46 /* If we are not setting spin mode
47 then we set to wait mode */
48 ppc_md.power_save = &ppc44x_idle;
49 }
50
51 return 0;
52}
53
54arch_initcall(ppc44x_idle_init);
55
56static int __init idle_param(char *p)
57{
58
59 if (!strcmp("spin", p)) {
60 mode_spin = 1;
61 ppc_md.power_save = NULL;
62 }
63
64 return 0;
65}
66
67early_param("idle", idle_param);
diff --git a/arch/powerpc/platforms/44x/katmai.c b/arch/powerpc/platforms/44x/katmai.c
index 11134121f272..44f4b3a00ced 100644
--- a/arch/powerpc/platforms/44x/katmai.c
+++ b/arch/powerpc/platforms/44x/katmai.c
@@ -22,8 +22,7 @@
22#include <asm/time.h> 22#include <asm/time.h>
23#include <asm/uic.h> 23#include <asm/uic.h>
24#include <asm/pci-bridge.h> 24#include <asm/pci-bridge.h>
25 25#include <asm/ppc4xx.h>
26#include "44x.h"
27 26
28static __initdata struct of_device_id katmai_of_bus[] = { 27static __initdata struct of_device_id katmai_of_bus[] = {
29 { .compatible = "ibm,plb4", }, 28 { .compatible = "ibm,plb4", },
@@ -58,6 +57,6 @@ define_machine(katmai) {
58 .progress = udbg_progress, 57 .progress = udbg_progress,
59 .init_IRQ = uic_init_tree, 58 .init_IRQ = uic_init_tree,
60 .get_irq = uic_get_irq, 59 .get_irq = uic_get_irq,
61 .restart = ppc44x_reset_system, 60 .restart = ppc4xx_reset_system,
62 .calibrate_decr = generic_calibrate_decr, 61 .calibrate_decr = generic_calibrate_decr,
63}; 62};
diff --git a/arch/powerpc/platforms/44x/misc_44x.S b/arch/powerpc/platforms/44x/misc_44x.S
index 3bce71d5d756..dc12b8009e48 100644
--- a/arch/powerpc/platforms/44x/misc_44x.S
+++ b/arch/powerpc/platforms/44x/misc_44x.S
@@ -44,14 +44,3 @@ _GLOBAL(as1_writeb)
44 sync 44 sync
45 isync 45 isync
46 blr 46 blr
47
48/*
49 * void ppc44x_reset_system(char *cmd)
50 *
51 * At present, this routine just applies a system reset.
52 */
53_GLOBAL(ppc44x_reset_system)
54 mfspr r13,SPRN_DBCR0
55 oris r13,r13,DBCR0_RST_SYSTEM@h
56 mtspr SPRN_DBCR0,r13
57 b . /* Just in case the reset doesn't work */
diff --git a/arch/powerpc/platforms/44x/rainier.c b/arch/powerpc/platforms/44x/rainier.c
index a7fae1cf69c1..4f1ff84c4b63 100644
--- a/arch/powerpc/platforms/44x/rainier.c
+++ b/arch/powerpc/platforms/44x/rainier.c
@@ -22,7 +22,7 @@
22#include <asm/time.h> 22#include <asm/time.h>
23#include <asm/uic.h> 23#include <asm/uic.h>
24#include <asm/pci-bridge.h> 24#include <asm/pci-bridge.h>
25#include "44x.h" 25#include <asm/ppc4xx.h>
26 26
27static __initdata struct of_device_id rainier_of_bus[] = { 27static __initdata struct of_device_id rainier_of_bus[] = {
28 { .compatible = "ibm,plb4", }, 28 { .compatible = "ibm,plb4", },
@@ -57,6 +57,6 @@ define_machine(rainier) {
57 .progress = udbg_progress, 57 .progress = udbg_progress,
58 .init_IRQ = uic_init_tree, 58 .init_IRQ = uic_init_tree,
59 .get_irq = uic_get_irq, 59 .get_irq = uic_get_irq,
60 .restart = ppc44x_reset_system, 60 .restart = ppc4xx_reset_system,
61 .calibrate_decr = generic_calibrate_decr, 61 .calibrate_decr = generic_calibrate_decr,
62}; 62};
diff --git a/arch/powerpc/platforms/44x/sequoia.c b/arch/powerpc/platforms/44x/sequoia.c
index d279db42c896..49eb73daacdf 100644
--- a/arch/powerpc/platforms/44x/sequoia.c
+++ b/arch/powerpc/platforms/44x/sequoia.c
@@ -23,7 +23,7 @@
23#include <asm/uic.h> 23#include <asm/uic.h>
24#include <asm/pci-bridge.h> 24#include <asm/pci-bridge.h>
25 25
26#include "44x.h" 26#include <asm/ppc4xx.h>
27 27
28static __initdata struct of_device_id sequoia_of_bus[] = { 28static __initdata struct of_device_id sequoia_of_bus[] = {
29 { .compatible = "ibm,plb4", }, 29 { .compatible = "ibm,plb4", },
@@ -58,6 +58,6 @@ define_machine(sequoia) {
58 .progress = udbg_progress, 58 .progress = udbg_progress,
59 .init_IRQ = uic_init_tree, 59 .init_IRQ = uic_init_tree,
60 .get_irq = uic_get_irq, 60 .get_irq = uic_get_irq,
61 .restart = ppc44x_reset_system, 61 .restart = ppc4xx_reset_system,
62 .calibrate_decr = generic_calibrate_decr, 62 .calibrate_decr = generic_calibrate_decr,
63}; 63};
diff --git a/arch/powerpc/platforms/44x/taishan.c b/arch/powerpc/platforms/44x/taishan.c
index 28ab7e2e02c3..49c78b2098b4 100644
--- a/arch/powerpc/platforms/44x/taishan.c
+++ b/arch/powerpc/platforms/44x/taishan.c
@@ -29,8 +29,7 @@
29#include <asm/time.h> 29#include <asm/time.h>
30#include <asm/uic.h> 30#include <asm/uic.h>
31#include <asm/pci-bridge.h> 31#include <asm/pci-bridge.h>
32 32#include <asm/ppc4xx.h>
33#include "44x.h"
34 33
35static __initdata struct of_device_id taishan_of_bus[] = { 34static __initdata struct of_device_id taishan_of_bus[] = {
36 { .compatible = "ibm,plb4", }, 35 { .compatible = "ibm,plb4", },
@@ -68,6 +67,6 @@ define_machine(taishan) {
68 .progress = udbg_progress, 67 .progress = udbg_progress,
69 .init_IRQ = uic_init_tree, 68 .init_IRQ = uic_init_tree,
70 .get_irq = uic_get_irq, 69 .get_irq = uic_get_irq,
71 .restart = ppc44x_reset_system, 70 .restart = ppc4xx_reset_system,
72 .calibrate_decr = generic_calibrate_decr, 71 .calibrate_decr = generic_calibrate_decr,
73}; 72};
diff --git a/arch/powerpc/platforms/44x/warp-nand.c b/arch/powerpc/platforms/44x/warp-nand.c
index 84ab78ff8c03..9150318cfc56 100644
--- a/arch/powerpc/platforms/44x/warp-nand.c
+++ b/arch/powerpc/platforms/44x/warp-nand.c
@@ -11,6 +11,7 @@
11#include <linux/mtd/partitions.h> 11#include <linux/mtd/partitions.h>
12#include <linux/mtd/nand.h> 12#include <linux/mtd/nand.h>
13#include <linux/mtd/ndfc.h> 13#include <linux/mtd/ndfc.h>
14#include <asm/machdep.h>
14 15
15#ifdef CONFIG_MTD_NAND_NDFC 16#ifdef CONFIG_MTD_NAND_NDFC
16 17
@@ -100,6 +101,6 @@ static int warp_setup_nand_flash(void)
100 101
101 return 0; 102 return 0;
102} 103}
103device_initcall(warp_setup_nand_flash); 104machine_device_initcall(warp, warp_setup_nand_flash);
104 105
105#endif 106#endif
diff --git a/arch/powerpc/platforms/44x/warp.c b/arch/powerpc/platforms/44x/warp.c
index da5b7b7599db..39cf6150a72b 100644
--- a/arch/powerpc/platforms/44x/warp.c
+++ b/arch/powerpc/platforms/44x/warp.c
@@ -18,9 +18,7 @@
18#include <asm/udbg.h> 18#include <asm/udbg.h>
19#include <asm/time.h> 19#include <asm/time.h>
20#include <asm/uic.h> 20#include <asm/uic.h>
21 21#include <asm/ppc4xx.h>
22#include "44x.h"
23
24 22
25static __initdata struct of_device_id warp_of_bus[] = { 23static __initdata struct of_device_id warp_of_bus[] = {
26 { .compatible = "ibm,plb4", }, 24 { .compatible = "ibm,plb4", },
@@ -49,7 +47,7 @@ define_machine(warp) {
49 .progress = udbg_progress, 47 .progress = udbg_progress,
50 .init_IRQ = uic_init_tree, 48 .init_IRQ = uic_init_tree,
51 .get_irq = uic_get_irq, 49 .get_irq = uic_get_irq,
52 .restart = ppc44x_reset_system, 50 .restart = ppc4xx_reset_system,
53 .calibrate_decr = generic_calibrate_decr, 51 .calibrate_decr = generic_calibrate_decr,
54}; 52};
55 53
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c
index 956f459e175c..6d584f4e3c9a 100644
--- a/arch/powerpc/platforms/52xx/lite5200.c
+++ b/arch/powerpc/platforms/52xx/lite5200.c
@@ -63,7 +63,7 @@ lite5200_fix_clock_config(void)
63 of_node_put(np); 63 of_node_put(np);
64 if (!cdm) { 64 if (!cdm) {
65 printk(KERN_ERR "%s() failed; expect abnormal behaviour\n", 65 printk(KERN_ERR "%s() failed; expect abnormal behaviour\n",
66 __FUNCTION__); 66 __func__);
67 return; 67 return;
68 } 68 }
69 69
@@ -98,7 +98,7 @@ lite5200_fix_port_config(void)
98 of_node_put(np); 98 of_node_put(np);
99 if (!gpio) { 99 if (!gpio) {
100 printk(KERN_ERR "%s() failed. expect abnormal behavior\n", 100 printk(KERN_ERR "%s() failed. expect abnormal behavior\n",
101 __FUNCTION__); 101 __func__);
102 return; 102 return;
103 } 103 }
104 104
diff --git a/arch/powerpc/platforms/82xx/Kconfig b/arch/powerpc/platforms/82xx/Kconfig
index 4fad6c7bf9f1..917ac8891555 100644
--- a/arch/powerpc/platforms/82xx/Kconfig
+++ b/arch/powerpc/platforms/82xx/Kconfig
@@ -11,7 +11,6 @@ config MPC8272_ADS
11 select 8260 11 select 8260
12 select FSL_SOC 12 select FSL_SOC
13 select PQ2_ADS_PCI_PIC if PCI 13 select PQ2_ADS_PCI_PIC if PCI
14 select PPC_CPM_NEW_BINDING
15 help 14 help
16 This option enables support for the MPC8272 ADS board 15 This option enables support for the MPC8272 ADS board
17 16
@@ -22,7 +21,6 @@ config PQ2FADS
22 select 8260 21 select 8260
23 select FSL_SOC 22 select FSL_SOC
24 select PQ2_ADS_PCI_PIC if PCI 23 select PQ2_ADS_PCI_PIC if PCI
25 select PPC_CPM_NEW_BINDING
26 help 24 help
27 This option enables support for the PQ2FADS board 25 This option enables support for the PQ2FADS board
28 26
@@ -31,7 +29,6 @@ config EP8248E
31 select 8272 29 select 8272
32 select 8260 30 select 8260
33 select FSL_SOC 31 select FSL_SOC
34 select PPC_CPM_NEW_BINDING
35 select MDIO_BITBANG 32 select MDIO_BITBANG
36 help 33 help
37 This enables support for the Embedded Planet EP8248E board. 34 This enables support for the Embedded Planet EP8248E board.
diff --git a/arch/powerpc/platforms/83xx/mpc837x_rdb.c b/arch/powerpc/platforms/83xx/mpc837x_rdb.c
index 2293ae51383d..c00356bdb1dd 100644
--- a/arch/powerpc/platforms/83xx/mpc837x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc837x_rdb.c
@@ -46,6 +46,7 @@ static void __init mpc837x_rdb_setup_arch(void)
46static struct of_device_id mpc837x_ids[] = { 46static struct of_device_id mpc837x_ids[] = {
47 { .type = "soc", }, 47 { .type = "soc", },
48 { .compatible = "soc", }, 48 { .compatible = "soc", },
49 { .compatible = "simple-bus", },
49 {}, 50 {},
50}; 51};
51 52
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h
index 68065e62fc3d..88a3b5cabb18 100644
--- a/arch/powerpc/platforms/83xx/mpc83xx.h
+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
@@ -16,6 +16,7 @@
16#define MPC83XX_SCCR_USB_DRCM_10 0x00200000 16#define MPC83XX_SCCR_USB_DRCM_10 0x00200000
17#define MPC8315_SCCR_USB_MASK 0x00c00000 17#define MPC8315_SCCR_USB_MASK 0x00c00000
18#define MPC8315_SCCR_USB_DRCM_11 0x00c00000 18#define MPC8315_SCCR_USB_DRCM_11 0x00c00000
19#define MPC8315_SCCR_USB_DRCM_01 0x00400000
19#define MPC837X_SCCR_USB_DRCM_11 0x00c00000 20#define MPC837X_SCCR_USB_DRCM_11 0x00c00000
20 21
21/* system i/o configuration register low */ 22/* system i/o configuration register low */
@@ -37,6 +38,7 @@
37/* USB Control Register */ 38/* USB Control Register */
38#define FSL_USB2_CONTROL_OFFS 0x500 39#define FSL_USB2_CONTROL_OFFS 0x500
39#define CONTROL_UTMI_PHY_EN 0x00000200 40#define CONTROL_UTMI_PHY_EN 0x00000200
41#define CONTROL_REFSEL_24MHZ 0x00000040
40#define CONTROL_REFSEL_48MHZ 0x00000080 42#define CONTROL_REFSEL_48MHZ 0x00000080
41#define CONTROL_PHY_CLK_SEL_ULPI 0x00000400 43#define CONTROL_PHY_CLK_SEL_ULPI 0x00000400
42#define CONTROL_OTG_PORT 0x00000020 44#define CONTROL_OTG_PORT 0x00000020
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index 471fdd8f4108..64bcf0a33c71 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -129,7 +129,7 @@ int mpc831x_usb_cfg(void)
129 if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) 129 if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315-immr"))
130 clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, 130 clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
131 MPC8315_SCCR_USB_MASK, 131 MPC8315_SCCR_USB_MASK,
132 MPC8315_SCCR_USB_DRCM_11); 132 MPC8315_SCCR_USB_DRCM_01);
133 else 133 else
134 clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, 134 clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
135 MPC83XX_SCCR_USB_MASK, 135 MPC83XX_SCCR_USB_MASK,
@@ -164,9 +164,15 @@ int mpc831x_usb_cfg(void)
164 /* Using on-chip PHY */ 164 /* Using on-chip PHY */
165 if (prop && (!strcmp(prop, "utmi_wide") || 165 if (prop && (!strcmp(prop, "utmi_wide") ||
166 !strcmp(prop, "utmi"))) { 166 !strcmp(prop, "utmi"))) {
167 /* Set UTMI_PHY_EN, REFSEL to 48MHZ */ 167 u32 refsel;
168
169 if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr"))
170 refsel = CONTROL_REFSEL_24MHZ;
171 else
172 refsel = CONTROL_REFSEL_48MHZ;
173 /* Set UTMI_PHY_EN and REFSEL */
168 out_be32(usb_regs + FSL_USB2_CONTROL_OFFS, 174 out_be32(usb_regs + FSL_USB2_CONTROL_OFFS,
169 CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ); 175 CONTROL_UTMI_PHY_EN | refsel);
170 /* Using external UPLI PHY */ 176 /* Using external UPLI PHY */
171 } else if (prop && !strcmp(prop, "ulpi")) { 177 } else if (prop && !strcmp(prop, "ulpi")) {
172 /* Set PHY_CLK_SEL to ULPI */ 178 /* Set PHY_CLK_SEL to ULPI */
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig
index 7e76ddbd5821..7ff29d53dc2d 100644
--- a/arch/powerpc/platforms/85xx/Kconfig
+++ b/arch/powerpc/platforms/85xx/Kconfig
@@ -19,7 +19,6 @@ config MPC8540_ADS
19config MPC8560_ADS 19config MPC8560_ADS
20 bool "Freescale MPC8560 ADS" 20 bool "Freescale MPC8560 ADS"
21 select DEFAULT_UIMAGE 21 select DEFAULT_UIMAGE
22 select PPC_CPM_NEW_BINDING
23 select CPM2 22 select CPM2
24 help 23 help
25 This option enables support for the MPC 8560 ADS board 24 This option enables support for the MPC 8560 ADS board
@@ -46,6 +45,12 @@ config MPC85xx_DS
46 help 45 help
47 This option enables support for the MPC85xx DS (MPC8544 DS) board 46 This option enables support for the MPC85xx DS (MPC8544 DS) board
48 47
48config KSI8560
49 bool "Emerson KSI8560"
50 select DEFAULT_UIMAGE
51 help
52 This option enables support for the Emerson KSI8560 board
53
49config STX_GP3 54config STX_GP3
50 bool "Silicon Turnkey Express GP3" 55 bool "Silicon Turnkey Express GP3"
51 help 56 help
@@ -53,14 +58,12 @@ config STX_GP3
53 board. 58 board.
54 select CPM2 59 select CPM2
55 select DEFAULT_UIMAGE 60 select DEFAULT_UIMAGE
56 select PPC_CPM_NEW_BINDING
57 61
58config TQM8540 62config TQM8540
59 bool "TQ Components TQM8540" 63 bool "TQ Components TQM8540"
60 help 64 help
61 This option enables support for the TQ Components TQM8540 board. 65 This option enables support for the TQ Components TQM8540 board.
62 select DEFAULT_UIMAGE 66 select DEFAULT_UIMAGE
63 select PPC_CPM_NEW_BINDING
64 select TQM85xx 67 select TQM85xx
65 68
66config TQM8541 69config TQM8541
@@ -68,7 +71,6 @@ config TQM8541
68 help 71 help
69 This option enables support for the TQ Components TQM8541 board. 72 This option enables support for the TQ Components TQM8541 board.
70 select DEFAULT_UIMAGE 73 select DEFAULT_UIMAGE
71 select PPC_CPM_NEW_BINDING
72 select TQM85xx 74 select TQM85xx
73 select CPM2 75 select CPM2
74 76
@@ -77,7 +79,6 @@ config TQM8555
77 help 79 help
78 This option enables support for the TQ Components TQM8555 board. 80 This option enables support for the TQ Components TQM8555 board.
79 select DEFAULT_UIMAGE 81 select DEFAULT_UIMAGE
80 select PPC_CPM_NEW_BINDING
81 select TQM85xx 82 select TQM85xx
82 select CPM2 83 select CPM2
83 84
@@ -86,7 +87,6 @@ config TQM8560
86 help 87 help
87 This option enables support for the TQ Components TQM8560 board. 88 This option enables support for the TQ Components TQM8560 board.
88 select DEFAULT_UIMAGE 89 select DEFAULT_UIMAGE
89 select PPC_CPM_NEW_BINDING
90 select TQM85xx 90 select TQM85xx
91 select CPM2 91 select CPM2
92 92
@@ -99,7 +99,6 @@ config SBC8548
99config SBC8560 99config SBC8560
100 bool "Wind River SBC8560" 100 bool "Wind River SBC8560"
101 select DEFAULT_UIMAGE 101 select DEFAULT_UIMAGE
102 select PPC_CPM_NEW_BINDING if CPM2
103 help 102 help
104 This option enables support for the Wind River SBC8560 board 103 This option enables support for the Wind River SBC8560 board
105 104
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile
index cb7af4ebd75f..6cea185f62b2 100644
--- a/arch/powerpc/platforms/85xx/Makefile
+++ b/arch/powerpc/platforms/85xx/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_STX_GP3) += stx_gp3.o
10obj-$(CONFIG_TQM85xx) += tqm85xx.o 10obj-$(CONFIG_TQM85xx) += tqm85xx.o
11obj-$(CONFIG_SBC8560) += sbc8560.o 11obj-$(CONFIG_SBC8560) += sbc8560.o
12obj-$(CONFIG_SBC8548) += sbc8548.o 12obj-$(CONFIG_SBC8548) += sbc8548.o
13obj-$(CONFIG_KSI8560) += ksi8560.o
diff --git a/arch/powerpc/platforms/85xx/ksi8560.c b/arch/powerpc/platforms/85xx/ksi8560.c
new file mode 100644
index 000000000000..2145adeb220c
--- /dev/null
+++ b/arch/powerpc/platforms/85xx/ksi8560.c
@@ -0,0 +1,257 @@
1/*
2 * Board setup routines for the Emerson KSI8560
3 *
4 * Author: Alexandr Smirnov <asmirnov@ru.mvista.com>
5 *
6 * Based on mpc85xx_ads.c maintained by Kumar Gala
7 *
8 * 2008 (c) MontaVista, Software, Inc. This file is licensed under
9 * the terms of the GNU General Public License version 2. This program
10 * is licensed "as is" without any warranty of any kind, whether express
11 * or implied.
12 *
13 */
14
15#include <linux/stddef.h>
16#include <linux/kernel.h>
17#include <linux/pci.h>
18#include <linux/kdev_t.h>
19#include <linux/delay.h>
20#include <linux/seq_file.h>
21#include <linux/of_platform.h>
22
23#include <asm/system.h>
24#include <asm/time.h>
25#include <asm/machdep.h>
26#include <asm/pci-bridge.h>
27#include <asm/mpic.h>
28#include <mm/mmu_decl.h>
29#include <asm/udbg.h>
30#include <asm/prom.h>
31
32#include <sysdev/fsl_soc.h>
33#include <sysdev/fsl_pci.h>
34
35#include <asm/cpm2.h>
36#include <sysdev/cpm2_pic.h>
37
38
39#define KSI8560_CPLD_HVR 0x04 /* Hardware Version Register */
40#define KSI8560_CPLD_PVR 0x08 /* PLD Version Register */
41#define KSI8560_CPLD_RCR1 0x30 /* Reset Command Register 1 */
42
43#define KSI8560_CPLD_RCR1_CPUHR 0x80 /* CPU Hard Reset */
44
45static void __iomem *cpld_base = NULL;
46
47static void machine_restart(char *cmd)
48{
49 if (cpld_base)
50 out_8(cpld_base + KSI8560_CPLD_RCR1, KSI8560_CPLD_RCR1_CPUHR);
51 else
52 printk(KERN_ERR "Can't find CPLD base, hang forever\n");
53
54 for (;;);
55}
56
57static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
58{
59 int cascade_irq;
60
61 while ((cascade_irq = cpm2_get_irq()) >= 0)
62 generic_handle_irq(cascade_irq);
63
64 desc->chip->eoi(irq);
65}
66
67static void __init ksi8560_pic_init(void)
68{
69 struct mpic *mpic;
70 struct resource r;
71 struct device_node *np;
72#ifdef CONFIG_CPM2
73 int irq;
74#endif
75
76 np = of_find_node_by_type(NULL, "open-pic");
77
78 if (np == NULL) {
79 printk(KERN_ERR "Could not find open-pic node\n");
80 return;
81 }
82
83 if (of_address_to_resource(np, 0, &r)) {
84 printk(KERN_ERR "Could not map mpic register space\n");
85 of_node_put(np);
86 return;
87 }
88
89 mpic = mpic_alloc(np, r.start,
90 MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
91 0, 256, " OpenPIC ");
92 BUG_ON(mpic == NULL);
93 of_node_put(np);
94
95 mpic_init(mpic);
96
97#ifdef CONFIG_CPM2
98 /* Setup CPM2 PIC */
99 np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
100 if (np == NULL) {
101 printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
102 return;
103 }
104 irq = irq_of_parse_and_map(np, 0);
105
106 cpm2_pic_init(np);
107 of_node_put(np);
108 set_irq_chained_handler(irq, cpm2_cascade);
109
110 setup_irq(0, NULL);
111#endif
112}
113
114#ifdef CONFIG_CPM2
115/*
116 * Setup I/O ports
117 */
118struct cpm_pin {
119 int port, pin, flags;
120};
121
122static struct cpm_pin __initdata ksi8560_pins[] = {
123 /* SCC1 */
124 {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
125 {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
126 {3, 31, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
127
128 /* SCC2 */
129 {3, 26, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
130 {3, 27, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
131 {3, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
132
133 /* FCC1 */
134 {0, 14, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
135 {0, 15, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
136 {0, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
137 {0, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
138 {0, 18, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
139 {0, 19, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
140 {0, 20, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
141 {0, 21, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
142 {0, 26, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
143 {0, 27, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
144 {0, 28, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
145 {0, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
146 {0, 30, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
147 {0, 31, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
148 {2, 23, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK9 */
149 {2, 22, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK10 */
150
151};
152
153static void __init init_ioports(void)
154{
155 int i;
156
157 for (i = 0; i < ARRAY_SIZE(ksi8560_pins); i++) {
158 struct cpm_pin *pin = &ksi8560_pins[i];
159 cpm2_set_pin(pin->port, pin->pin, pin->flags);
160 }
161
162 cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_RX);
163 cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_TX);
164 cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_RX);
165 cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_TX);
166 cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK9, CPM_CLK_RX);
167 cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK10, CPM_CLK_TX);
168}
169#endif
170
171/*
172 * Setup the architecture
173 */
174static void __init ksi8560_setup_arch(void)
175{
176 struct device_node *cpld;
177
178 cpld = of_find_compatible_node(NULL, NULL, "emerson,KSI8560-cpld");
179 if (cpld)
180 cpld_base = of_iomap(cpld, 0);
181 else
182 printk(KERN_ERR "Can't find CPLD in device tree\n");
183
184 if (ppc_md.progress)
185 ppc_md.progress("ksi8560_setup_arch()", 0);
186
187#ifdef CONFIG_CPM2
188 cpm2_reset();
189 init_ioports();
190#endif
191}
192
193static void ksi8560_show_cpuinfo(struct seq_file *m)
194{
195 uint pvid, svid, phid1;
196 uint memsize = total_memory;
197
198 pvid = mfspr(SPRN_PVR);
199 svid = mfspr(SPRN_SVR);
200
201 seq_printf(m, "Vendor\t\t: Emerson Network Power\n");
202 seq_printf(m, "Board\t\t: KSI8560\n");
203
204 if (cpld_base) {
205 seq_printf(m, "Hardware rev\t: %d\n",
206 in_8(cpld_base + KSI8560_CPLD_HVR));
207 seq_printf(m, "CPLD rev\t: %d\n",
208 in_8(cpld_base + KSI8560_CPLD_PVR));
209 } else
210 seq_printf(m, "Unknown Hardware and CPLD revs\n");
211
212 seq_printf(m, "PVR\t\t: 0x%x\n", pvid);
213 seq_printf(m, "SVR\t\t: 0x%x\n", svid);
214
215 /* Display cpu Pll setting */
216 phid1 = mfspr(SPRN_HID1);
217 seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f));
218
219 /* Display the amount of memory */
220 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
221}
222
223static struct of_device_id __initdata of_bus_ids[] = {
224 { .type = "soc", },
225 { .name = "cpm", },
226 { .name = "localbus", },
227 {},
228};
229
230static int __init declare_of_platform_devices(void)
231{
232 of_platform_bus_probe(NULL, of_bus_ids, NULL);
233
234 return 0;
235}
236machine_device_initcall(ksi8560, declare_of_platform_devices);
237
238/*
239 * Called very early, device-tree isn't unflattened
240 */
241static int __init ksi8560_probe(void)
242{
243 unsigned long root = of_get_flat_dt_root();
244
245 return of_flat_dt_is_compatible(root, "emerson,KSI8560");
246}
247
248define_machine(ksi8560) {
249 .name = "KSI8560",
250 .probe = ksi8560_probe,
251 .setup_arch = ksi8560_setup_arch,
252 .init_IRQ = ksi8560_pic_init,
253 .show_cpuinfo = ksi8560_show_cpuinfo,
254 .get_irq = mpic_get_irq,
255 .restart = machine_restart,
256 .calibrate_decr = generic_calibrate_decr,
257};
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index 4e0305096114..3582c841844b 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -165,7 +165,7 @@ static void __init init_ioports(void)
165 int i; 165 int i;
166 166
167 for (i = 0; i < ARRAY_SIZE(mpc8560_ads_pins); i++) { 167 for (i = 0; i < ARRAY_SIZE(mpc8560_ads_pins); i++) {
168 struct cpm_pin *pin = &mpc8560_ads_pins[i]; 168 const struct cpm_pin *pin = &mpc8560_ads_pins[i];
169 cpm2_set_pin(pin->port, pin->pin, pin->flags); 169 cpm2_set_pin(pin->port, pin->pin, pin->flags);
170 } 170 }
171 171
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index bdb3d0b38cd2..dfd8b4ad9b28 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -19,6 +19,7 @@
19#include <linux/delay.h> 19#include <linux/delay.h>
20#include <linux/seq_file.h> 20#include <linux/seq_file.h>
21#include <linux/interrupt.h> 21#include <linux/interrupt.h>
22#include <linux/of_platform.h>
22 23
23#include <asm/system.h> 24#include <asm/system.h>
24#include <asm/time.h> 25#include <asm/time.h>
@@ -36,7 +37,7 @@
36#undef DEBUG 37#undef DEBUG
37 38
38#ifdef DEBUG 39#ifdef DEBUG
39#define DBG(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args) 40#define DBG(fmt, args...) printk(KERN_ERR "%s: " fmt, __func__, ## args)
40#else 41#else
41#define DBG(fmt, args...) 42#define DBG(fmt, args...)
42#endif 43#endif
@@ -183,6 +184,18 @@ static int __init mpc8544_ds_probe(void)
183 } 184 }
184} 185}
185 186
187static struct of_device_id mpc85xxds_ids[] = {
188 { .type = "soc", },
189 { .compatible = "soc", },
190 {},
191};
192
193static int __init mpc85xxds_publish_devices(void)
194{
195 return of_platform_bus_probe(NULL, mpc85xxds_ids, NULL);
196}
197machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices);
198
186/* 199/*
187 * Called very early, device-tree isn't unflattened 200 * Called very early, device-tree isn't unflattened
188 */ 201 */
diff --git a/arch/powerpc/platforms/86xx/Kconfig b/arch/powerpc/platforms/86xx/Kconfig
index 21d113536b86..7442c58d44f5 100644
--- a/arch/powerpc/platforms/86xx/Kconfig
+++ b/arch/powerpc/platforms/86xx/Kconfig
@@ -11,6 +11,12 @@ config MPC8641_HPCN
11 help 11 help
12 This option enables support for the MPC8641 HPCN board. 12 This option enables support for the MPC8641 HPCN board.
13 13
14config SBC8641D
15 bool "Wind River SBC8641D"
16 select DEFAULT_UIMAGE
17 help
18 This option enables support for the WRS SBC8641D board.
19
14config MPC8610_HPCD 20config MPC8610_HPCD
15 bool "Freescale MPC8610 HPCD" 21 bool "Freescale MPC8610 HPCD"
16 select DEFAULT_UIMAGE 22 select DEFAULT_UIMAGE
@@ -24,7 +30,7 @@ config MPC8641
24 select FSL_PCI if PCI 30 select FSL_PCI if PCI
25 select PPC_UDBG_16550 31 select PPC_UDBG_16550
26 select MPIC 32 select MPIC
27 default y if MPC8641_HPCN 33 default y if MPC8641_HPCN || SBC8641D
28 34
29config MPC8610 35config MPC8610
30 bool 36 bool
diff --git a/arch/powerpc/platforms/86xx/Makefile b/arch/powerpc/platforms/86xx/Makefile
index c96706327eaa..1b9b4a9b2525 100644
--- a/arch/powerpc/platforms/86xx/Makefile
+++ b/arch/powerpc/platforms/86xx/Makefile
@@ -4,4 +4,5 @@
4 4
5obj-$(CONFIG_SMP) += mpc86xx_smp.o 5obj-$(CONFIG_SMP) += mpc86xx_smp.o
6obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o 6obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o
7obj-$(CONFIG_SBC8641D) += sbc8641d.o
7obj-$(CONFIG_MPC8610_HPCD) += mpc8610_hpcd.o 8obj-$(CONFIG_MPC8610_HPCD) += mpc8610_hpcd.o
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 0b07485641fe..18b8ebe930d5 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -52,7 +52,7 @@ static int __init mpc8610_declare_of_platform_devices(void)
52} 52}
53machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices); 53machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices);
54 54
55void __init 55static void __init
56mpc86xx_hpcd_init_irq(void) 56mpc86xx_hpcd_init_irq(void)
57{ 57{
58 struct mpic *mpic1; 58 struct mpic *mpic1;
@@ -200,7 +200,7 @@ static int __init mpc86xx_hpcd_probe(void)
200 return 0; 200 return 0;
201} 201}
202 202
203long __init 203static long __init
204mpc86xx_time_init(void) 204mpc86xx_time_init(void)
205{ 205{
206 unsigned int temp; 206 unsigned int temp;
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index cfbe8c52e263..f947f555fd46 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -55,7 +55,7 @@ static void mpc86xx_8259_cascade(unsigned int irq, struct irq_desc *desc)
55} 55}
56#endif /* CONFIG_PCI */ 56#endif /* CONFIG_PCI */
57 57
58void __init 58static void __init
59mpc86xx_hpcn_init_irq(void) 59mpc86xx_hpcn_init_irq(void)
60{ 60{
61 struct mpic *mpic1; 61 struct mpic *mpic1;
@@ -162,7 +162,7 @@ mpc86xx_hpcn_setup_arch(void)
162} 162}
163 163
164 164
165void 165static void
166mpc86xx_hpcn_show_cpuinfo(struct seq_file *m) 166mpc86xx_hpcn_show_cpuinfo(struct seq_file *m)
167{ 167{
168 struct device_node *root; 168 struct device_node *root;
@@ -190,13 +190,19 @@ static int __init mpc86xx_hpcn_probe(void)
190{ 190{
191 unsigned long root = of_get_flat_dt_root(); 191 unsigned long root = of_get_flat_dt_root();
192 192
193 if (of_flat_dt_is_compatible(root, "mpc86xx")) 193 if (of_flat_dt_is_compatible(root, "fsl,mpc8641hpcn"))
194 return 1; /* Looks good */ 194 return 1; /* Looks good */
195 195
196 /* Be nice and don't give silent boot death. Delete this in 2.6.27 */
197 if (of_flat_dt_is_compatible(root, "mpc86xx")) {
198 pr_warning("WARNING: your dts/dtb is old. You must update before the next kernel release\n");
199 return 1;
200 }
201
196 return 0; 202 return 0;
197} 203}
198 204
199long __init 205static long __init
200mpc86xx_time_init(void) 206mpc86xx_time_init(void)
201{ 207{
202 unsigned int temp; 208 unsigned int temp;
diff --git a/arch/powerpc/platforms/86xx/sbc8641d.c b/arch/powerpc/platforms/86xx/sbc8641d.c
new file mode 100644
index 000000000000..510a06ef0b55
--- /dev/null
+++ b/arch/powerpc/platforms/86xx/sbc8641d.c
@@ -0,0 +1,164 @@
1/*
2 * SBC8641D board specific routines
3 *
4 * Copyright 2008 Wind River Systems Inc.
5 *
6 * By Paul Gortmaker (see MAINTAINERS for contact information)
7 *
8 * Based largely on the 8641 HPCN support by Freescale Semiconductor Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15
16#include <linux/stddef.h>
17#include <linux/kernel.h>
18#include <linux/pci.h>
19#include <linux/kdev_t.h>
20#include <linux/delay.h>
21#include <linux/seq_file.h>
22#include <linux/of_platform.h>
23
24#include <asm/system.h>
25#include <asm/time.h>
26#include <asm/machdep.h>
27#include <asm/pci-bridge.h>
28#include <asm/mpc86xx.h>
29#include <asm/prom.h>
30#include <mm/mmu_decl.h>
31#include <asm/udbg.h>
32
33#include <asm/mpic.h>
34
35#include <sysdev/fsl_pci.h>
36#include <sysdev/fsl_soc.h>
37
38#include "mpc86xx.h"
39
40static void __init
41sbc8641_init_irq(void)
42{
43 struct mpic *mpic1;
44 struct device_node *np;
45 struct resource res;
46
47 /* Determine PIC address. */
48 np = of_find_node_by_type(NULL, "open-pic");
49 if (np == NULL)
50 return;
51 of_address_to_resource(np, 0, &res);
52
53 /* Alloc mpic structure and per isu has 16 INT entries. */
54 mpic1 = mpic_alloc(np, res.start,
55 MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
56 0, 256, " MPIC ");
57 of_node_put(np);
58 BUG_ON(mpic1 == NULL);
59
60 mpic_init(mpic1);
61}
62
63static void __init
64sbc8641_setup_arch(void)
65{
66#ifdef CONFIG_PCI
67 struct device_node *np;
68#endif
69
70 if (ppc_md.progress)
71 ppc_md.progress("sbc8641_setup_arch()", 0);
72
73#ifdef CONFIG_PCI
74 for_each_compatible_node(np, "pci", "fsl,mpc8641-pcie")
75 fsl_add_bridge(np, 0);
76#endif
77
78 printk("SBC8641 board from Wind River\n");
79
80#ifdef CONFIG_SMP
81 mpc86xx_smp_init();
82#endif
83}
84
85
86static void
87sbc8641_show_cpuinfo(struct seq_file *m)
88{
89 struct device_node *root;
90 uint memsize = total_memory;
91 const char *model = "";
92 uint svid = mfspr(SPRN_SVR);
93
94 seq_printf(m, "Vendor\t\t: Wind River Systems\n");
95
96 root = of_find_node_by_path("/");
97 if (root)
98 model = of_get_property(root, "model", NULL);
99 seq_printf(m, "Machine\t\t: %s\n", model);
100 of_node_put(root);
101
102 seq_printf(m, "SVR\t\t: 0x%x\n", svid);
103 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
104}
105
106
107/*
108 * Called very early, device-tree isn't unflattened
109 */
110static int __init sbc8641_probe(void)
111{
112 unsigned long root = of_get_flat_dt_root();
113
114 if (of_flat_dt_is_compatible(root, "wind,sbc8641"))
115 return 1; /* Looks good */
116
117 return 0;
118}
119
120static long __init
121mpc86xx_time_init(void)
122{
123 unsigned int temp;
124
125 /* Set the time base to zero */
126 mtspr(SPRN_TBWL, 0);
127 mtspr(SPRN_TBWU, 0);
128
129 temp = mfspr(SPRN_HID0);
130 temp |= HID0_TBEN;
131 mtspr(SPRN_HID0, temp);
132 asm volatile("isync");
133
134 return 0;
135}
136
137static __initdata struct of_device_id of_bus_ids[] = {
138 { .compatible = "simple-bus", },
139 {},
140};
141
142static int __init declare_of_platform_devices(void)
143{
144 of_platform_bus_probe(NULL, of_bus_ids, NULL);
145
146 return 0;
147}
148machine_device_initcall(sbc8641, declare_of_platform_devices);
149
150define_machine(sbc8641) {
151 .name = "SBC8641D",
152 .probe = sbc8641_probe,
153 .setup_arch = sbc8641_setup_arch,
154 .init_IRQ = sbc8641_init_irq,
155 .show_cpuinfo = sbc8641_show_cpuinfo,
156 .get_irq = mpic_get_irq,
157 .restart = fsl_rstcr_restart,
158 .time_init = mpc86xx_time_init,
159 .calibrate_decr = generic_calibrate_decr,
160 .progress = udbg_progress,
161#ifdef CONFIG_PCI
162 .pcibios_fixup_bus = fsl_pcibios_fixup_bus,
163#endif
164};
diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8xx/Kconfig
index 7fd224ca233d..6fc849e51e48 100644
--- a/arch/powerpc/platforms/8xx/Kconfig
+++ b/arch/powerpc/platforms/8xx/Kconfig
@@ -18,7 +18,6 @@ config MPC8XXFADS
18config MPC86XADS 18config MPC86XADS
19 bool "MPC86XADS" 19 bool "MPC86XADS"
20 select CPM1 20 select CPM1
21 select PPC_CPM_NEW_BINDING
22 help 21 help
23 MPC86x Application Development System by Freescale Semiconductor. 22 MPC86x Application Development System by Freescale Semiconductor.
24 The MPC86xADS is meant to serve as a platform for s/w and h/w 23 The MPC86xADS is meant to serve as a platform for s/w and h/w
@@ -27,7 +26,6 @@ config MPC86XADS
27config MPC885ADS 26config MPC885ADS
28 bool "MPC885ADS" 27 bool "MPC885ADS"
29 select CPM1 28 select CPM1
30 select PPC_CPM_NEW_BINDING
31 help 29 help
32 Freescale Semiconductor MPC885 Application Development System (ADS). 30 Freescale Semiconductor MPC885 Application Development System (ADS).
33 Also known as DUET. 31 Also known as DUET.
@@ -37,7 +35,6 @@ config MPC885ADS
37config PPC_EP88XC 35config PPC_EP88XC
38 bool "Embedded Planet EP88xC (a.k.a. CWH-PPC-885XN-VE)" 36 bool "Embedded Planet EP88xC (a.k.a. CWH-PPC-885XN-VE)"
39 select CPM1 37 select CPM1
40 select PPC_CPM_NEW_BINDING
41 help 38 help
42 This enables support for the Embedded Planet EP88xC board. 39 This enables support for the Embedded Planet EP88xC board.
43 40
@@ -47,7 +44,6 @@ config PPC_EP88XC
47config PPC_ADDER875 44config PPC_ADDER875
48 bool "Analogue & Micro Adder 875" 45 bool "Analogue & Micro Adder 875"
49 select CPM1 46 select CPM1
50 select PPC_CPM_NEW_BINDING
51 select REDBOOT 47 select REDBOOT
52 help 48 help
53 This enables support for the Analogue & Micro Adder 875 49 This enables support for the Analogue & Micro Adder 875
diff --git a/arch/powerpc/platforms/8xx/m8xx_setup.c b/arch/powerpc/platforms/8xx/m8xx_setup.c
index 184f998d1be2..0d9f75c74f8c 100644
--- a/arch/powerpc/platforms/8xx/m8xx_setup.c
+++ b/arch/powerpc/platforms/8xx/m8xx_setup.c
@@ -111,17 +111,12 @@ void __init mpc8xx_calibrate_decr(void)
111 111
112 /* Processor frequency is MHz. 112 /* Processor frequency is MHz.
113 */ 113 */
114 ppc_tb_freq = 50000000;
115 if (!get_freq("bus-frequency", &ppc_tb_freq)) {
116 printk(KERN_ERR "WARNING: Estimating decrementer frequency "
117 "(not found)\n");
118 }
119 ppc_tb_freq /= 16;
120 ppc_proc_freq = 50000000; 114 ppc_proc_freq = 50000000;
121 if (!get_freq("clock-frequency", &ppc_proc_freq)) 115 if (!get_freq("clock-frequency", &ppc_proc_freq))
122 printk(KERN_ERR "WARNING: Estimating processor frequency " 116 printk(KERN_ERR "WARNING: Estimating processor frequency "
123 "(not found)\n"); 117 "(not found)\n");
124 118
119 ppc_tb_freq = ppc_proc_freq / 16;
125 printk("Decrementer Frequency = 0x%lx\n", ppc_tb_freq); 120 printk("Decrementer Frequency = 0x%lx\n", ppc_tb_freq);
126 121
127 /* Perform some more timer/timebase initialization. This used 122 /* Perform some more timer/timebase initialization. This used
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index a578b966ecbc..f38c50b4ce56 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -290,13 +290,7 @@ config CPM2
290config PPC_CPM_NEW_BINDING 290config PPC_CPM_NEW_BINDING
291 bool 291 bool
292 depends on CPM1 || CPM2 292 depends on CPM1 || CPM2
293 help 293 default y
294 Select this if your board has been converted to use the new
295 device tree bindings for CPM, and no longer needs the
296 ioport callbacks or the platform device glue code.
297
298 The fs_enet and cpm_uart drivers will be built as
299 of_platform devices.
300 294
301config AXON_RAM 295config AXON_RAM
302 tristate "Axon DDR2 memory device driver" 296 tristate "Axon DDR2 memory device driver"
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 0c3face0ddbb..5fc7fac10e93 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -41,11 +41,13 @@ config 40x
41 bool "AMCC 40x" 41 bool "AMCC 40x"
42 select PPC_DCR_NATIVE 42 select PPC_DCR_NATIVE
43 select PPC_UDBG_16550 43 select PPC_UDBG_16550
44 select 4xx_SOC
44 45
45config 44x 46config 44x
46 bool "AMCC 44x" 47 bool "AMCC 44x"
47 select PPC_DCR_NATIVE 48 select PPC_DCR_NATIVE
48 select PPC_UDBG_16550 49 select PPC_UDBG_16550
50 select 4xx_SOC
49 51
50config E200 52config E200
51 bool "Freescale e200" 53 bool "Freescale e200"
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index d75ccded7f10..45646b2b4af4 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -28,13 +28,13 @@
28#include <linux/notifier.h> 28#include <linux/notifier.h>
29#include <linux/of.h> 29#include <linux/of.h>
30#include <linux/of_platform.h> 30#include <linux/of_platform.h>
31#include <linux/lmb.h>
31 32
32#include <asm/prom.h> 33#include <asm/prom.h>
33#include <asm/iommu.h> 34#include <asm/iommu.h>
34#include <asm/machdep.h> 35#include <asm/machdep.h>
35#include <asm/pci-bridge.h> 36#include <asm/pci-bridge.h>
36#include <asm/udbg.h> 37#include <asm/udbg.h>
37#include <asm/lmb.h>
38#include <asm/firmware.h> 38#include <asm/firmware.h>
39#include <asm/cell-regs.h> 39#include <asm/cell-regs.h>
40 40
@@ -316,7 +316,7 @@ static void cell_iommu_setup_stab(struct cbe_iommu *iommu,
316 segments = max(dbase + dsize, fbase + fsize) >> IO_SEGMENT_SHIFT; 316 segments = max(dbase + dsize, fbase + fsize) >> IO_SEGMENT_SHIFT;
317 317
318 pr_debug("%s: iommu[%d]: segments: %lu\n", 318 pr_debug("%s: iommu[%d]: segments: %lu\n",
319 __FUNCTION__, iommu->nid, segments); 319 __func__, iommu->nid, segments);
320 320
321 /* set up the segment table */ 321 /* set up the segment table */
322 stab_size = segments * sizeof(unsigned long); 322 stab_size = segments * sizeof(unsigned long);
@@ -343,7 +343,7 @@ static unsigned long *cell_iommu_alloc_ptab(struct cbe_iommu *iommu,
343 (1 << 12) / sizeof(unsigned long)); 343 (1 << 12) / sizeof(unsigned long));
344 344
345 ptab_size = segments * pages_per_segment * sizeof(unsigned long); 345 ptab_size = segments * pages_per_segment * sizeof(unsigned long);
346 pr_debug("%s: iommu[%d]: ptab_size: %lu, order: %d\n", __FUNCTION__, 346 pr_debug("%s: iommu[%d]: ptab_size: %lu, order: %d\n", __func__,
347 iommu->nid, ptab_size, get_order(ptab_size)); 347 iommu->nid, ptab_size, get_order(ptab_size));
348 page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(ptab_size)); 348 page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(ptab_size));
349 BUG_ON(!page); 349 BUG_ON(!page);
@@ -355,7 +355,7 @@ static unsigned long *cell_iommu_alloc_ptab(struct cbe_iommu *iommu,
355 n_pte_pages = (pages_per_segment * sizeof(unsigned long)) >> 12; 355 n_pte_pages = (pages_per_segment * sizeof(unsigned long)) >> 12;
356 356
357 pr_debug("%s: iommu[%d]: stab at %p, ptab at %p, n_pte_pages: %lu\n", 357 pr_debug("%s: iommu[%d]: stab at %p, ptab at %p, n_pte_pages: %lu\n",
358 __FUNCTION__, iommu->nid, iommu->stab, ptab, 358 __func__, iommu->nid, iommu->stab, ptab,
359 n_pte_pages); 359 n_pte_pages);
360 360
361 /* initialise the STEs */ 361 /* initialise the STEs */
@@ -394,7 +394,7 @@ static void cell_iommu_enable_hardware(struct cbe_iommu *iommu)
394 394
395 if (cell_iommu_find_ioc(iommu->nid, &xlate_base)) 395 if (cell_iommu_find_ioc(iommu->nid, &xlate_base))
396 panic("%s: missing IOC register mappings for node %d\n", 396 panic("%s: missing IOC register mappings for node %d\n",
397 __FUNCTION__, iommu->nid); 397 __func__, iommu->nid);
398 398
399 iommu->xlate_regs = ioremap(xlate_base, IOC_Reg_Size); 399 iommu->xlate_regs = ioremap(xlate_base, IOC_Reg_Size);
400 iommu->cmd_regs = iommu->xlate_regs + IOC_IOCmd_Offset; 400 iommu->cmd_regs = iommu->xlate_regs + IOC_IOCmd_Offset;
diff --git a/arch/powerpc/platforms/cell/pervasive.c b/arch/powerpc/platforms/cell/pervasive.c
index 0304589c0a80..8a3631ce912b 100644
--- a/arch/powerpc/platforms/cell/pervasive.c
+++ b/arch/powerpc/platforms/cell/pervasive.c
@@ -65,7 +65,7 @@ static void cbe_power_save(void)
65 break; 65 break;
66 default: 66 default:
67 printk(KERN_WARNING "%s: unknown configuration\n", 67 printk(KERN_WARNING "%s: unknown configuration\n",
68 __FUNCTION__); 68 __func__);
69 break; 69 break;
70 } 70 }
71 mtspr(SPRN_TSC_CELL, thread_switch_control); 71 mtspr(SPRN_TSC_CELL, thread_switch_control);
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c
index e43024c0392e..655704ad03cf 100644
--- a/arch/powerpc/platforms/cell/ras.c
+++ b/arch/powerpc/platforms/cell/ras.c
@@ -132,7 +132,7 @@ static int __init cbe_ptcal_enable_on_node(int nid, int order)
132 (unsigned int)(addr >> 32), 132 (unsigned int)(addr >> 32),
133 (unsigned int)(addr & 0xffffffff))) { 133 (unsigned int)(addr & 0xffffffff))) {
134 printk(KERN_ERR "%s: error enabling PTCAL on node %d!\n", 134 printk(KERN_ERR "%s: error enabling PTCAL on node %d!\n",
135 __FUNCTION__, nid); 135 __func__, nid);
136 goto out_free_pages; 136 goto out_free_pages;
137 } 137 }
138 138
@@ -162,7 +162,7 @@ static int __init cbe_ptcal_enable(void)
162 if (!size) 162 if (!size)
163 return -ENODEV; 163 return -ENODEV;
164 164
165 pr_debug("%s: enabling PTCAL, size = 0x%x\n", __FUNCTION__, *size); 165 pr_debug("%s: enabling PTCAL, size = 0x%x\n", __func__, *size);
166 order = get_order(*size); 166 order = get_order(*size);
167 of_node_put(np); 167 of_node_put(np);
168 168
@@ -180,7 +180,7 @@ static int __init cbe_ptcal_enable(void)
180 const u32 *nid = of_get_property(np, "node-id", NULL); 180 const u32 *nid = of_get_property(np, "node-id", NULL);
181 if (!nid) { 181 if (!nid) {
182 printk(KERN_ERR "%s: node %s is missing node-id?\n", 182 printk(KERN_ERR "%s: node %s is missing node-id?\n",
183 __FUNCTION__, np->full_name); 183 __func__, np->full_name);
184 continue; 184 continue;
185 } 185 }
186 cbe_ptcal_enable_on_node(*nid, order); 186 cbe_ptcal_enable_on_node(*nid, order);
@@ -195,13 +195,13 @@ static int cbe_ptcal_disable(void)
195 struct ptcal_area *area, *tmp; 195 struct ptcal_area *area, *tmp;
196 int ret = 0; 196 int ret = 0;
197 197
198 pr_debug("%s: disabling PTCAL\n", __FUNCTION__); 198 pr_debug("%s: disabling PTCAL\n", __func__);
199 199
200 list_for_each_entry_safe(area, tmp, &ptcal_list, list) { 200 list_for_each_entry_safe(area, tmp, &ptcal_list, list) {
201 /* disable ptcal on this node */ 201 /* disable ptcal on this node */
202 if (rtas_call(ptcal_stop_tok, 1, 1, NULL, area->nid)) { 202 if (rtas_call(ptcal_stop_tok, 1, 1, NULL, area->nid)) {
203 printk(KERN_ERR "%s: error disabling PTCAL " 203 printk(KERN_ERR "%s: error disabling PTCAL "
204 "on node %d!\n", __FUNCTION__, 204 "on node %d!\n", __func__,
205 area->nid); 205 area->nid);
206 ret = -EIO; 206 ret = -EIO;
207 continue; 207 continue;
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index 712001f6b7da..6bab44b7716b 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -165,7 +165,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
165 struct spu_slb slb; 165 struct spu_slb slb;
166 int psize; 166 int psize;
167 167
168 pr_debug("%s\n", __FUNCTION__); 168 pr_debug("%s\n", __func__);
169 169
170 slb.esid = (ea & ESID_MASK) | SLB_ESID_V; 170 slb.esid = (ea & ESID_MASK) | SLB_ESID_V;
171 171
@@ -215,7 +215,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
215extern int hash_page(unsigned long ea, unsigned long access, unsigned long trap); //XXX 215extern int hash_page(unsigned long ea, unsigned long access, unsigned long trap); //XXX
216static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr) 216static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
217{ 217{
218 pr_debug("%s, %lx, %lx\n", __FUNCTION__, dsisr, ea); 218 pr_debug("%s, %lx, %lx\n", __func__, dsisr, ea);
219 219
220 /* Handle kernel space hash faults immediately. 220 /* Handle kernel space hash faults immediately.
221 User hash faults need to be deferred to process context. */ 221 User hash faults need to be deferred to process context. */
@@ -351,7 +351,7 @@ spu_irq_class_1(int irq, void *data)
351 __spu_trap_data_seg(spu, dar); 351 __spu_trap_data_seg(spu, dar);
352 352
353 spin_unlock(&spu->register_lock); 353 spin_unlock(&spu->register_lock);
354 pr_debug("%s: %lx %lx %lx %lx\n", __FUNCTION__, mask, stat, 354 pr_debug("%s: %lx %lx %lx %lx\n", __func__, mask, stat,
355 dar, dsisr); 355 dar, dsisr);
356 356
357 if (stat & CLASS1_STORAGE_FAULT_INTR) 357 if (stat & CLASS1_STORAGE_FAULT_INTR)
@@ -726,7 +726,7 @@ static int __init init_spu_base(void)
726 726
727 if (ret < 0) { 727 if (ret < 0) {
728 printk(KERN_WARNING "%s: Error initializing spus\n", 728 printk(KERN_WARNING "%s: Error initializing spus\n",
729 __FUNCTION__); 729 __func__);
730 goto out_unregister_sysdev_class; 730 goto out_unregister_sysdev_class;
731 } 731 }
732 732
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c
index dceb8b6a9382..19f6bfdbb933 100644
--- a/arch/powerpc/platforms/cell/spu_callbacks.c
+++ b/arch/powerpc/platforms/cell/spu_callbacks.c
@@ -54,7 +54,7 @@ long spu_sys_callback(struct spu_syscall_block *s)
54 long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); 54 long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);
55 55
56 if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) { 56 if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
57 pr_debug("%s: invalid syscall #%ld", __FUNCTION__, s->nr_ret); 57 pr_debug("%s: invalid syscall #%ld", __func__, s->nr_ret);
58 return -ENOSYS; 58 return -ENOSYS;
59 } 59 }
60 60
diff --git a/arch/powerpc/platforms/cell/spu_manage.c b/arch/powerpc/platforms/cell/spu_manage.c
index d351bdebf5f1..4c506c1463cd 100644
--- a/arch/powerpc/platforms/cell/spu_manage.c
+++ b/arch/powerpc/platforms/cell/spu_manage.c
@@ -92,7 +92,7 @@ static int __init spu_map_interrupts_old(struct spu *spu,
92 92
93 tmp = of_get_property(np->parent->parent, "node-id", NULL); 93 tmp = of_get_property(np->parent->parent, "node-id", NULL);
94 if (!tmp) { 94 if (!tmp) {
95 printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__); 95 printk(KERN_WARNING "%s: can't find node-id\n", __func__);
96 nid = spu->node; 96 nid = spu->node;
97 } else 97 } else
98 nid = tmp[0]; 98 nid = tmp[0];
@@ -296,7 +296,7 @@ static int __init of_enumerate_spus(int (*fn)(void *data))
296 ret = fn(node); 296 ret = fn(node);
297 if (ret) { 297 if (ret) {
298 printk(KERN_WARNING "%s: Error initializing %s\n", 298 printk(KERN_WARNING "%s: Error initializing %s\n",
299 __FUNCTION__, node->name); 299 __func__, node->name);
300 break; 300 break;
301 } 301 }
302 n++; 302 n++;
@@ -327,7 +327,7 @@ static int __init of_create_spu(struct spu *spu, void *data)
327 if (!legacy_map) { 327 if (!legacy_map) {
328 legacy_map = 1; 328 legacy_map = 1;
329 printk(KERN_WARNING "%s: Legacy device tree found, " 329 printk(KERN_WARNING "%s: Legacy device tree found, "
330 "trying to map old style\n", __FUNCTION__); 330 "trying to map old style\n", __func__);
331 } 331 }
332 ret = spu_map_device_old(spu); 332 ret = spu_map_device_old(spu);
333 if (ret) { 333 if (ret) {
@@ -342,7 +342,7 @@ static int __init of_create_spu(struct spu *spu, void *data)
342 if (!legacy_irq) { 342 if (!legacy_irq) {
343 legacy_irq = 1; 343 legacy_irq = 1;
344 printk(KERN_WARNING "%s: Legacy device tree found, " 344 printk(KERN_WARNING "%s: Legacy device tree found, "
345 "trying old style irq\n", __FUNCTION__); 345 "trying old style irq\n", __func__);
346 } 346 }
347 ret = spu_map_interrupts_old(spu, spe); 347 ret = spu_map_interrupts_old(spu, spe);
348 if (ret) { 348 if (ret) {
diff --git a/arch/powerpc/platforms/cell/spufs/coredump.c b/arch/powerpc/platforms/cell/spufs/coredump.c
index 0c6a96b82b2d..b962c3ab470c 100644
--- a/arch/powerpc/platforms/cell/spufs/coredump.c
+++ b/arch/powerpc/platforms/cell/spufs/coredump.c
@@ -133,8 +133,6 @@ static struct spu_context *coredump_next_context(int *fd)
133 if (ctx->flags & SPU_CREATE_NOSCHED) 133 if (ctx->flags & SPU_CREATE_NOSCHED)
134 continue; 134 continue;
135 135
136 /* start searching the next fd next time we're called */
137 (*fd)++;
138 break; 136 break;
139 } 137 }
140 138
@@ -157,6 +155,9 @@ int spufs_coredump_extra_notes_size(void)
157 break; 155 break;
158 156
159 size += rc; 157 size += rc;
158
159 /* start searching the next fd next time */
160 fd++;
160 } 161 }
161 162
162 return size; 163 return size;
@@ -239,6 +240,9 @@ int spufs_coredump_extra_notes_write(struct file *file, loff_t *foffset)
239 } 240 }
240 241
241 spu_release_saved(ctx); 242 spu_release_saved(ctx);
243
244 /* start searching the next fd next time */
245 fd++;
242 } 246 }
243 247
244 return 0; 248 return 0;
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
index c7df0a6cfa1b..08f44d1971ac 100644
--- a/arch/powerpc/platforms/cell/spufs/file.c
+++ b/arch/powerpc/platforms/cell/spufs/file.c
@@ -1336,7 +1336,7 @@ static u64 spufs_signal1_type_get(struct spu_context *ctx)
1336 return ctx->ops->signal1_type_get(ctx); 1336 return ctx->ops->signal1_type_get(ctx);
1337} 1337}
1338DEFINE_SPUFS_ATTRIBUTE(spufs_signal1_type, spufs_signal1_type_get, 1338DEFINE_SPUFS_ATTRIBUTE(spufs_signal1_type, spufs_signal1_type_get,
1339 spufs_signal1_type_set, "%llu", SPU_ATTR_ACQUIRE); 1339 spufs_signal1_type_set, "%llu\n", SPU_ATTR_ACQUIRE);
1340 1340
1341 1341
1342static int spufs_signal2_type_set(void *data, u64 val) 1342static int spufs_signal2_type_set(void *data, u64 val)
@@ -1358,7 +1358,7 @@ static u64 spufs_signal2_type_get(struct spu_context *ctx)
1358 return ctx->ops->signal2_type_get(ctx); 1358 return ctx->ops->signal2_type_get(ctx);
1359} 1359}
1360DEFINE_SPUFS_ATTRIBUTE(spufs_signal2_type, spufs_signal2_type_get, 1360DEFINE_SPUFS_ATTRIBUTE(spufs_signal2_type, spufs_signal2_type_get,
1361 spufs_signal2_type_set, "%llu", SPU_ATTR_ACQUIRE); 1361 spufs_signal2_type_set, "%llu\n", SPU_ATTR_ACQUIRE);
1362 1362
1363#if SPUFS_MMAP_4K 1363#if SPUFS_MMAP_4K
1364static unsigned long spufs_mss_mmap_nopfn(struct vm_area_struct *vma, 1364static unsigned long spufs_mss_mmap_nopfn(struct vm_area_struct *vma,
@@ -1555,7 +1555,7 @@ void spufs_mfc_callback(struct spu *spu)
1555 1555
1556 wake_up_all(&ctx->mfc_wq); 1556 wake_up_all(&ctx->mfc_wq);
1557 1557
1558 pr_debug("%s %s\n", __FUNCTION__, spu->name); 1558 pr_debug("%s %s\n", __func__, spu->name);
1559 if (ctx->mfc_fasync) { 1559 if (ctx->mfc_fasync) {
1560 u32 free_elements, tagstatus; 1560 u32 free_elements, tagstatus;
1561 unsigned int mask; 1561 unsigned int mask;
@@ -1789,7 +1789,7 @@ static unsigned int spufs_mfc_poll(struct file *file,poll_table *wait)
1789 if (tagstatus & ctx->tagwait) 1789 if (tagstatus & ctx->tagwait)
1790 mask |= POLLIN | POLLRDNORM; 1790 mask |= POLLIN | POLLRDNORM;
1791 1791
1792 pr_debug("%s: free %d tagstatus %d tagwait %d\n", __FUNCTION__, 1792 pr_debug("%s: free %d tagstatus %d tagwait %d\n", __func__,
1793 free_elements, tagstatus, ctx->tagwait); 1793 free_elements, tagstatus, ctx->tagwait);
1794 1794
1795 return mask; 1795 return mask;
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index cac69e116776..96bf7c2b86fc 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -98,7 +98,7 @@ static int spu_setup_isolated(struct spu_context *ctx)
98 != MFC_CNTL_PURGE_DMA_COMPLETE) { 98 != MFC_CNTL_PURGE_DMA_COMPLETE) {
99 if (time_after(jiffies, timeout)) { 99 if (time_after(jiffies, timeout)) {
100 printk(KERN_ERR "%s: timeout flushing MFC DMA queue\n", 100 printk(KERN_ERR "%s: timeout flushing MFC DMA queue\n",
101 __FUNCTION__); 101 __func__);
102 ret = -EIO; 102 ret = -EIO;
103 goto out; 103 goto out;
104 } 104 }
@@ -124,7 +124,7 @@ static int spu_setup_isolated(struct spu_context *ctx)
124 status_loading) { 124 status_loading) {
125 if (time_after(jiffies, timeout)) { 125 if (time_after(jiffies, timeout)) {
126 printk(KERN_ERR "%s: timeout waiting for loader\n", 126 printk(KERN_ERR "%s: timeout waiting for loader\n",
127 __FUNCTION__); 127 __func__);
128 ret = -EIO; 128 ret = -EIO;
129 goto out_drop_priv; 129 goto out_drop_priv;
130 } 130 }
@@ -134,7 +134,7 @@ static int spu_setup_isolated(struct spu_context *ctx)
134 if (!(status & SPU_STATUS_RUNNING)) { 134 if (!(status & SPU_STATUS_RUNNING)) {
135 /* If isolated LOAD has failed: run SPU, we will get a stop-and 135 /* If isolated LOAD has failed: run SPU, we will get a stop-and
136 * signal later. */ 136 * signal later. */
137 pr_debug("%s: isolated LOAD failed\n", __FUNCTION__); 137 pr_debug("%s: isolated LOAD failed\n", __func__);
138 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE); 138 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE);
139 ret = -EACCES; 139 ret = -EACCES;
140 goto out_drop_priv; 140 goto out_drop_priv;
@@ -142,7 +142,7 @@ static int spu_setup_isolated(struct spu_context *ctx)
142 142
143 if (!(status & SPU_STATUS_ISOLATED_STATE)) { 143 if (!(status & SPU_STATUS_ISOLATED_STATE)) {
144 /* This isn't allowed by the CBEA, but check anyway */ 144 /* This isn't allowed by the CBEA, but check anyway */
145 pr_debug("%s: SPU fell out of isolated mode?\n", __FUNCTION__); 145 pr_debug("%s: SPU fell out of isolated mode?\n", __func__);
146 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_STOP); 146 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_STOP);
147 ret = -EINVAL; 147 ret = -EINVAL;
148 goto out_drop_priv; 148 goto out_drop_priv;
@@ -282,7 +282,7 @@ static int spu_handle_restartsys(struct spu_context *ctx, long *spu_ret,
282 break; 282 break;
283 default: 283 default:
284 printk(KERN_WARNING "%s: unexpected return code %ld\n", 284 printk(KERN_WARNING "%s: unexpected return code %ld\n",
285 __FUNCTION__, *spu_ret); 285 __func__, *spu_ret);
286 ret = 0; 286 ret = 0;
287 } 287 }
288 return ret; 288 return ret;
@@ -323,6 +323,10 @@ static int spu_process_callback(struct spu_context *ctx)
323 return -EINTR; 323 return -EINTR;
324 } 324 }
325 325
326 /* need to re-get the ls, as it may have changed when we released the
327 * spu */
328 ls = (void __iomem *)ctx->ops->get_ls(ctx);
329
326 /* write result, jump over indirect pointer */ 330 /* write result, jump over indirect pointer */
327 memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret)); 331 memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret));
328 ctx->ops->npc_write(ctx, npc); 332 ctx->ops->npc_write(ctx, npc);
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c
index e9dc7a55d1b9..d2a1249d36dd 100644
--- a/arch/powerpc/platforms/cell/spufs/switch.c
+++ b/arch/powerpc/platforms/cell/spufs/switch.c
@@ -1815,6 +1815,7 @@ static void save_csa(struct spu_state *prev, struct spu *spu)
1815 save_mfc_csr_ato(prev, spu); /* Step 24. */ 1815 save_mfc_csr_ato(prev, spu); /* Step 24. */
1816 save_mfc_tclass_id(prev, spu); /* Step 25. */ 1816 save_mfc_tclass_id(prev, spu); /* Step 25. */
1817 set_mfc_tclass_id(prev, spu); /* Step 26. */ 1817 set_mfc_tclass_id(prev, spu); /* Step 26. */
1818 save_mfc_cmd(prev, spu); /* Step 26a - moved from 44. */
1818 purge_mfc_queue(prev, spu); /* Step 27. */ 1819 purge_mfc_queue(prev, spu); /* Step 27. */
1819 wait_purge_complete(prev, spu); /* Step 28. */ 1820 wait_purge_complete(prev, spu); /* Step 28. */
1820 setup_mfc_sr1(prev, spu); /* Step 30. */ 1821 setup_mfc_sr1(prev, spu); /* Step 30. */
@@ -1831,7 +1832,6 @@ static void save_csa(struct spu_state *prev, struct spu *spu)
1831 save_ppuint_mb(prev, spu); /* Step 41. */ 1832 save_ppuint_mb(prev, spu); /* Step 41. */
1832 save_ch_part1(prev, spu); /* Step 42. */ 1833 save_ch_part1(prev, spu); /* Step 42. */
1833 save_spu_mb(prev, spu); /* Step 43. */ 1834 save_spu_mb(prev, spu); /* Step 43. */
1834 save_mfc_cmd(prev, spu); /* Step 44. */
1835 reset_ch(prev, spu); /* Step 45. */ 1835 reset_ch(prev, spu); /* Step 45. */
1836} 1836}
1837 1837
diff --git a/arch/powerpc/platforms/celleb/beat.c b/arch/powerpc/platforms/celleb/beat.c
index 93ebb7d85120..b64b171f245b 100644
--- a/arch/powerpc/platforms/celleb/beat.c
+++ b/arch/powerpc/platforms/celleb/beat.c
@@ -48,6 +48,7 @@ void beat_power_off(void)
48} 48}
49 49
50u64 beat_halt_code = 0x1000000000000000UL; 50u64 beat_halt_code = 0x1000000000000000UL;
51EXPORT_SYMBOL(beat_halt_code);
51 52
52void beat_halt(void) 53void beat_halt(void)
53{ 54{
@@ -94,9 +95,8 @@ ssize_t beat_nvram_read(char *buf, size_t count, loff_t *index)
94 len = count; 95 len = count;
95 if (len > BEAT_NVRW_CNT) 96 if (len > BEAT_NVRW_CNT)
96 len = BEAT_NVRW_CNT; 97 len = BEAT_NVRW_CNT;
97 if (beat_eeprom_read(i, len, p)) { 98 if (beat_eeprom_read(i, len, p))
98 return -EIO; 99 return -EIO;
99 }
100 100
101 p += len; 101 p += len;
102 i += len; 102 i += len;
@@ -121,9 +121,8 @@ ssize_t beat_nvram_write(char *buf, size_t count, loff_t *index)
121 len = count; 121 len = count;
122 if (len > BEAT_NVRW_CNT) 122 if (len > BEAT_NVRW_CNT)
123 len = BEAT_NVRW_CNT; 123 len = BEAT_NVRW_CNT;
124 if (beat_eeprom_write(i, len, p)) { 124 if (beat_eeprom_write(i, len, p))
125 return -EIO; 125 return -EIO;
126 }
127 126
128 p += len; 127 p += len;
129 i += len; 128 i += len;
@@ -149,13 +148,14 @@ int64_t beat_get_term_char(u64 vterm, u64 *len, u64 *t1, u64 *t2)
149 u64 db[2]; 148 u64 db[2];
150 s64 ret; 149 s64 ret;
151 150
152 ret = beat_get_characters_from_console(vterm, len, (u8*)db); 151 ret = beat_get_characters_from_console(vterm, len, (u8 *)db);
153 if (ret == 0) { 152 if (ret == 0) {
154 *t1 = db[0]; 153 *t1 = db[0];
155 *t2 = db[1]; 154 *t2 = db[1];
156 } 155 }
157 return ret; 156 return ret;
158} 157}
158EXPORT_SYMBOL(beat_get_term_char);
159 159
160int64_t beat_put_term_char(u64 vterm, u64 len, u64 t1, u64 t2) 160int64_t beat_put_term_char(u64 vterm, u64 len, u64 t1, u64 t2)
161{ 161{
@@ -163,8 +163,9 @@ int64_t beat_put_term_char(u64 vterm, u64 len, u64 t1, u64 t2)
163 163
164 db[0] = t1; 164 db[0] = t1;
165 db[1] = t2; 165 db[1] = t2;
166 return beat_put_characters_to_console(vterm, len, (u8*)db); 166 return beat_put_characters_to_console(vterm, len, (u8 *)db);
167} 167}
168EXPORT_SYMBOL(beat_put_term_char);
168 169
169void beat_power_save(void) 170void beat_power_save(void)
170{ 171{
@@ -261,7 +262,3 @@ static int __init beat_event_init(void)
261} 262}
262 263
263device_initcall(beat_event_init); 264device_initcall(beat_event_init);
264
265EXPORT_SYMBOL(beat_get_term_char);
266EXPORT_SYMBOL(beat_put_term_char);
267EXPORT_SYMBOL(beat_halt_code);
diff --git a/arch/powerpc/platforms/celleb/beat.h b/arch/powerpc/platforms/celleb/beat.h
index ac82ac35b991..32c8efcedc80 100644
--- a/arch/powerpc/platforms/celleb/beat.h
+++ b/arch/powerpc/platforms/celleb/beat.h
@@ -21,8 +21,8 @@
21#ifndef _CELLEB_BEAT_H 21#ifndef _CELLEB_BEAT_H
22#define _CELLEB_BEAT_H 22#define _CELLEB_BEAT_H
23 23
24int64_t beat_get_term_char(uint64_t,uint64_t*,uint64_t*,uint64_t*); 24int64_t beat_get_term_char(uint64_t, uint64_t *, uint64_t *, uint64_t *);
25int64_t beat_put_term_char(uint64_t,uint64_t,uint64_t,uint64_t); 25int64_t beat_put_term_char(uint64_t, uint64_t, uint64_t, uint64_t);
26int64_t beat_repository_encode(int, const char *, uint64_t[4]); 26int64_t beat_repository_encode(int, const char *, uint64_t[4]);
27void beat_restart(char *); 27void beat_restart(char *);
28void beat_power_off(void); 28void beat_power_off(void);
diff --git a/arch/powerpc/platforms/celleb/beat_wrapper.h b/arch/powerpc/platforms/celleb/beat_wrapper.h
index cbc1487df7de..b47dfda48d06 100644
--- a/arch/powerpc/platforms/celleb/beat_wrapper.h
+++ b/arch/powerpc/platforms/celleb/beat_wrapper.h
@@ -197,7 +197,8 @@ static inline s64 beat_put_characters_to_console(u64 termno, u64 len,
197 u64 b[2]; 197 u64 b[2];
198 198
199 memcpy(b, buffer, len); 199 memcpy(b, buffer, len);
200 return beat_hcall_norets(HV_put_characters_to_console, termno, len, b[0], b[1]); 200 return beat_hcall_norets(HV_put_characters_to_console, termno, len,
201 b[0], b[1]);
201} 202}
202 203
203static inline s64 beat_get_spe_privileged_state_1_registers( 204static inline s64 beat_get_spe_privileged_state_1_registers(
diff --git a/arch/powerpc/platforms/celleb/htab.c b/arch/powerpc/platforms/celleb/htab.c
index fbf27c74ebda..81467ff055c8 100644
--- a/arch/powerpc/platforms/celleb/htab.c
+++ b/arch/powerpc/platforms/celleb/htab.c
@@ -35,9 +35,9 @@
35#include "beat_wrapper.h" 35#include "beat_wrapper.h"
36 36
37#ifdef DEBUG_LOW 37#ifdef DEBUG_LOW
38#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0) 38#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while (0)
39#else 39#else
40#define DBG_LOW(fmt...) do { } while(0) 40#define DBG_LOW(fmt...) do { } while (0)
41#endif 41#endif
42 42
43static DEFINE_SPINLOCK(beat_htab_lock); 43static DEFINE_SPINLOCK(beat_htab_lock);
@@ -116,7 +116,8 @@ static long beat_lpar_hpte_insert(unsigned long hpte_group,
116 hpte_r &= ~_PAGE_COHERENT; 116 hpte_r &= ~_PAGE_COHERENT;
117 117
118 spin_lock(&beat_htab_lock); 118 spin_lock(&beat_htab_lock);
119 if ((lpar_rc = beat_read_mask(hpte_group)) == 0) { 119 lpar_rc = beat_read_mask(hpte_group);
120 if (lpar_rc == 0) {
120 if (!(vflags & HPTE_V_BOLTED)) 121 if (!(vflags & HPTE_V_BOLTED))
121 DBG_LOW(" full\n"); 122 DBG_LOW(" full\n");
122 spin_unlock(&beat_htab_lock); 123 spin_unlock(&beat_htab_lock);
diff --git a/arch/powerpc/platforms/celleb/interrupt.c b/arch/powerpc/platforms/celleb/interrupt.c
index c7c68ca70c82..69562a867876 100644
--- a/arch/powerpc/platforms/celleb/interrupt.c
+++ b/arch/powerpc/platforms/celleb/interrupt.c
@@ -34,7 +34,7 @@ static DEFINE_SPINLOCK(beatic_irq_mask_lock);
34static uint64_t beatic_irq_mask_enable[(MAX_IRQS+255)/64]; 34static uint64_t beatic_irq_mask_enable[(MAX_IRQS+255)/64];
35static uint64_t beatic_irq_mask_ack[(MAX_IRQS+255)/64]; 35static uint64_t beatic_irq_mask_ack[(MAX_IRQS+255)/64];
36 36
37static struct irq_host *beatic_host = NULL; 37static struct irq_host *beatic_host;
38 38
39/* 39/*
40 * In this implementation, "virq" == "IRQ plug number", 40 * In this implementation, "virq" == "IRQ plug number",
@@ -49,13 +49,13 @@ static inline void beatic_update_irq_mask(unsigned int irq_plug)
49 49
50 off = (irq_plug / 256) * 4; 50 off = (irq_plug / 256) * 4;
51 masks[0] = beatic_irq_mask_enable[off + 0] 51 masks[0] = beatic_irq_mask_enable[off + 0]
52 & beatic_irq_mask_ack[off + 0]; 52 & beatic_irq_mask_ack[off + 0];
53 masks[1] = beatic_irq_mask_enable[off + 1] 53 masks[1] = beatic_irq_mask_enable[off + 1]
54 & beatic_irq_mask_ack[off + 1]; 54 & beatic_irq_mask_ack[off + 1];
55 masks[2] = beatic_irq_mask_enable[off + 2] 55 masks[2] = beatic_irq_mask_enable[off + 2]
56 & beatic_irq_mask_ack[off + 2]; 56 & beatic_irq_mask_ack[off + 2];
57 masks[3] = beatic_irq_mask_enable[off + 3] 57 masks[3] = beatic_irq_mask_enable[off + 3]
58 & beatic_irq_mask_ack[off + 3]; 58 & beatic_irq_mask_ack[off + 3];
59 if (beat_set_interrupt_mask(irq_plug&~255UL, 59 if (beat_set_interrupt_mask(irq_plug&~255UL,
60 masks[0], masks[1], masks[2], masks[3]) != 0) 60 masks[0], masks[1], masks[2], masks[3]) != 0)
61 panic("Failed to set mask IRQ!"); 61 panic("Failed to set mask IRQ!");
@@ -96,7 +96,8 @@ static void beatic_end_irq(unsigned int irq_plug)
96 s64 err; 96 s64 err;
97 unsigned long flags; 97 unsigned long flags;
98 98
99 if ((err = beat_downcount_of_interrupt(irq_plug)) != 0) { 99 err = beat_downcount_of_interrupt(irq_plug);
100 if (err != 0) {
100 if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */ 101 if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */
101 panic("Failed to downcount IRQ! Error = %16lx", err); 102 panic("Failed to downcount IRQ! Error = %16lx", err);
102 103
@@ -138,7 +139,8 @@ static int beatic_pic_host_map(struct irq_host *h, unsigned int virq,
138 struct irq_desc *desc = get_irq_desc(virq); 139 struct irq_desc *desc = get_irq_desc(virq);
139 int64_t err; 140 int64_t err;
140 141
141 if ((err = beat_construct_and_connect_irq_plug(virq, hw)) < 0) 142 err = beat_construct_and_connect_irq_plug(virq, hw);
143 if (err < 0)
142 return -EIO; 144 return -EIO;
143 145
144 desc->status |= IRQ_LEVEL; 146 desc->status |= IRQ_LEVEL;
@@ -202,22 +204,22 @@ static inline unsigned int beatic_get_irq_plug(void)
202 beat_detect_pending_interrupts(i, pending); 204 beat_detect_pending_interrupts(i, pending);
203 __asm__ ("cntlzd %0,%1":"=r"(ub): 205 __asm__ ("cntlzd %0,%1":"=r"(ub):
204 "r"(pending[0] & beatic_irq_mask_enable[i/64+0] 206 "r"(pending[0] & beatic_irq_mask_enable[i/64+0]
205 & beatic_irq_mask_ack[i/64+0])); 207 & beatic_irq_mask_ack[i/64+0]));
206 if (ub != 64) 208 if (ub != 64)
207 return i + ub + 0; 209 return i + ub + 0;
208 __asm__ ("cntlzd %0,%1":"=r"(ub): 210 __asm__ ("cntlzd %0,%1":"=r"(ub):
209 "r"(pending[1] & beatic_irq_mask_enable[i/64+1] 211 "r"(pending[1] & beatic_irq_mask_enable[i/64+1]
210 & beatic_irq_mask_ack[i/64+1])); 212 & beatic_irq_mask_ack[i/64+1]));
211 if (ub != 64) 213 if (ub != 64)
212 return i + ub + 64; 214 return i + ub + 64;
213 __asm__ ("cntlzd %0,%1":"=r"(ub): 215 __asm__ ("cntlzd %0,%1":"=r"(ub):
214 "r"(pending[2] & beatic_irq_mask_enable[i/64+2] 216 "r"(pending[2] & beatic_irq_mask_enable[i/64+2]
215 & beatic_irq_mask_ack[i/64+2])); 217 & beatic_irq_mask_ack[i/64+2]));
216 if (ub != 64) 218 if (ub != 64)
217 return i + ub + 128; 219 return i + ub + 128;
218 __asm__ ("cntlzd %0,%1":"=r"(ub): 220 __asm__ ("cntlzd %0,%1":"=r"(ub):
219 "r"(pending[3] & beatic_irq_mask_enable[i/64+3] 221 "r"(pending[3] & beatic_irq_mask_enable[i/64+3]
220 & beatic_irq_mask_ack[i/64+3])); 222 & beatic_irq_mask_ack[i/64+3]));
221 if (ub != 64) 223 if (ub != 64)
222 return i + ub + 192; 224 return i + ub + 192;
223 } 225 }
@@ -250,7 +252,7 @@ void __init beatic_init_IRQ(void)
250 252
251 /* Allocate an irq host */ 253 /* Allocate an irq host */
252 beatic_host = irq_alloc_host(NULL, IRQ_HOST_MAP_NOMAP, 0, 254 beatic_host = irq_alloc_host(NULL, IRQ_HOST_MAP_NOMAP, 0,
253 &beatic_pic_host_ops, 255 &beatic_pic_host_ops,
254 0); 256 0);
255 BUG_ON(beatic_host == NULL); 257 BUG_ON(beatic_host == NULL);
256 irq_set_default_host(beatic_host); 258 irq_set_default_host(beatic_host);
diff --git a/arch/powerpc/platforms/celleb/scc_epci.c b/arch/powerpc/platforms/celleb/scc_epci.c
index a3c7cfbcb323..a999b393f6f6 100644
--- a/arch/powerpc/platforms/celleb/scc_epci.c
+++ b/arch/powerpc/platforms/celleb/scc_epci.c
@@ -161,9 +161,9 @@ static PCI_IO_ADDR celleb_epci_make_config_addr(
161 if (bus != hose->bus) 161 if (bus != hose->bus)
162 addr = celleb_epci_get_epci_cfg(hose) + 162 addr = celleb_epci_get_epci_cfg(hose) +
163 (((bus->number & 0xff) << 16) 163 (((bus->number & 0xff) << 16)
164 | ((devfn & 0xff) << 8) 164 | ((devfn & 0xff) << 8)
165 | (where & 0xff) 165 | (where & 0xff)
166 | 0x01000000); 166 | 0x01000000);
167 else 167 else
168 addr = celleb_epci_get_epci_cfg(hose) + 168 addr = celleb_epci_get_epci_cfg(hose) +
169 (((devfn & 0xff) << 8) | (where & 0xff)); 169 (((devfn & 0xff) << 8) | (where & 0xff));
@@ -174,7 +174,7 @@ static PCI_IO_ADDR celleb_epci_make_config_addr(
174} 174}
175 175
176static int celleb_epci_read_config(struct pci_bus *bus, 176static int celleb_epci_read_config(struct pci_bus *bus,
177 unsigned int devfn, int where, int size, u32 * val) 177 unsigned int devfn, int where, int size, u32 *val)
178{ 178{
179 PCI_IO_ADDR epci_base; 179 PCI_IO_ADDR epci_base;
180 PCI_IO_ADDR addr; 180 PCI_IO_ADDR addr;
diff --git a/arch/powerpc/platforms/celleb/scc_sio.c b/arch/powerpc/platforms/celleb/scc_sio.c
index 610008211ca1..3a16c5b3c464 100644
--- a/arch/powerpc/platforms/celleb/scc_sio.c
+++ b/arch/powerpc/platforms/celleb/scc_sio.c
@@ -28,7 +28,7 @@
28 28
29/* sio irq0=0xb00010022 irq0=0xb00010023 irq2=0xb00010024 29/* sio irq0=0xb00010022 irq0=0xb00010023 irq2=0xb00010024
30 mmio=0xfff000-0x1000,0xff2000-0x1000 */ 30 mmio=0xfff000-0x1000,0xff2000-0x1000 */
31static int txx9_serial_bitmap __initdata = 0; 31static int txx9_serial_bitmap __initdata;
32 32
33static struct { 33static struct {
34 uint32_t offset; 34 uint32_t offset;
@@ -84,7 +84,7 @@ static int __init txx9_serial_config(char *ptr)
84 int i; 84 int i;
85 85
86 for (;;) { 86 for (;;) {
87 switch(get_option(&ptr, &i)) { 87 switch (get_option(&ptr, &i)) {
88 default: 88 default:
89 return 0; 89 return 0;
90 case 2: 90 case 2:
diff --git a/arch/powerpc/platforms/celleb/spu_priv1.c b/arch/powerpc/platforms/celleb/spu_priv1.c
index 2bf6700f747a..bcc17f7fe8ad 100644
--- a/arch/powerpc/platforms/celleb/spu_priv1.c
+++ b/arch/powerpc/platforms/celleb/spu_priv1.c
@@ -183,8 +183,7 @@ static u64 resource_allocation_enable_get(struct spu *spu)
183 return enable; 183 return enable;
184} 184}
185 185
186const struct spu_priv1_ops spu_priv1_beat_ops = 186const struct spu_priv1_ops spu_priv1_beat_ops = {
187{
188 .int_mask_and = int_mask_and, 187 .int_mask_and = int_mask_and,
189 .int_mask_or = int_mask_or, 188 .int_mask_or = int_mask_or,
190 .int_mask_set = int_mask_set, 189 .int_mask_set = int_mask_set,
diff --git a/arch/powerpc/platforms/celleb/udbg_beat.c b/arch/powerpc/platforms/celleb/udbg_beat.c
index d888c4674c62..6b418f6b6175 100644
--- a/arch/powerpc/platforms/celleb/udbg_beat.c
+++ b/arch/powerpc/platforms/celleb/udbg_beat.c
@@ -54,7 +54,8 @@ static int udbg_getc_poll_beat(void)
54 if (inbuflen == 0) { 54 if (inbuflen == 0) {
55 /* get some more chars. */ 55 /* get some more chars. */
56 inbuflen = 0; 56 inbuflen = 0;
57 rc = beat_get_term_char(celleb_vtermno, &inbuflen, inbuf+0, inbuf+1); 57 rc = beat_get_term_char(celleb_vtermno, &inbuflen,
58 inbuf+0, inbuf+1);
58 if (rc != 0) 59 if (rc != 0)
59 inbuflen = 0; /* otherwise inbuflen is garbage */ 60 inbuflen = 0; /* otherwise inbuflen is garbage */
60 } 61 }
@@ -78,7 +79,7 @@ static int udbg_getc_beat(void)
78 if (ch == -1) { 79 if (ch == -1) {
79 /* This shouldn't be needed...but... */ 80 /* This shouldn't be needed...but... */
80 volatile unsigned long delay; 81 volatile unsigned long delay;
81 for (delay=0; delay < 2000000; delay++) 82 for (delay = 0; delay < 2000000; delay++)
82 ; 83 ;
83 } else { 84 } else {
84 return ch; 85 return ch;
diff --git a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
index d4f8bf581e3a..84e2d78b9a62 100644
--- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
+++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
@@ -117,11 +117,11 @@ static void __init mpc7448_hpc2_init_IRQ(void)
117 } 117 }
118 118
119 if (mpic_paddr == 0) { 119 if (mpic_paddr == 0) {
120 printk("%s: No tsi108 PIC found !\n", __FUNCTION__); 120 printk("%s: No tsi108 PIC found !\n", __func__);
121 return; 121 return;
122 } 122 }
123 123
124 DBG("%s: tsi108 pic phys_addr = 0x%x\n", __FUNCTION__, 124 DBG("%s: tsi108 pic phys_addr = 0x%x\n", __func__,
125 (u32) mpic_paddr); 125 (u32) mpic_paddr);
126 126
127 mpic = mpic_alloc(tsi_pic, mpic_paddr, 127 mpic = mpic_alloc(tsi_pic, mpic_paddr,
@@ -140,17 +140,17 @@ static void __init mpc7448_hpc2_init_IRQ(void)
140#ifdef CONFIG_PCI 140#ifdef CONFIG_PCI
141 tsi_pci = of_find_node_by_type(NULL, "pci"); 141 tsi_pci = of_find_node_by_type(NULL, "pci");
142 if (tsi_pci == NULL) { 142 if (tsi_pci == NULL) {
143 printk("%s: No tsi108 pci node found !\n", __FUNCTION__); 143 printk("%s: No tsi108 pci node found !\n", __func__);
144 return; 144 return;
145 } 145 }
146 cascade_node = of_find_node_by_type(NULL, "pic-router"); 146 cascade_node = of_find_node_by_type(NULL, "pic-router");
147 if (cascade_node == NULL) { 147 if (cascade_node == NULL) {
148 printk("%s: No tsi108 pci cascade node found !\n", __FUNCTION__); 148 printk("%s: No tsi108 pci cascade node found !\n", __func__);
149 return; 149 return;
150 } 150 }
151 151
152 cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0); 152 cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
153 DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __FUNCTION__, 153 DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__,
154 (u32) cascade_pci_irq); 154 (u32) cascade_pci_irq);
155 tsi108_pci_int_init(cascade_node); 155 tsi108_pci_int_init(cascade_node);
156 set_irq_data(cascade_pci_irq, mpic); 156 set_irq_data(cascade_pci_irq, mpic);
diff --git a/arch/powerpc/platforms/embedded6xx/prpmc2800.c b/arch/powerpc/platforms/embedded6xx/prpmc2800.c
index 653a5eb91c90..5a19b9a1457c 100644
--- a/arch/powerpc/platforms/embedded6xx/prpmc2800.c
+++ b/arch/powerpc/platforms/embedded6xx/prpmc2800.c
@@ -49,13 +49,13 @@ static void __init prpmc2800_setup_arch(void)
49 * ioremap mpp and gpp registers in case they are later 49 * ioremap mpp and gpp registers in case they are later
50 * needed by prpmc2800_reset_board(). 50 * needed by prpmc2800_reset_board().
51 */ 51 */
52 np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-mpp"); 52 np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-mpp");
53 reg = of_get_property(np, "reg", NULL); 53 reg = of_get_property(np, "reg", NULL);
54 paddr = of_translate_address(np, reg); 54 paddr = of_translate_address(np, reg);
55 of_node_put(np); 55 of_node_put(np);
56 mv64x60_mpp_reg_base = ioremap(paddr, reg[1]); 56 mv64x60_mpp_reg_base = ioremap(paddr, reg[1]);
57 57
58 np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-gpp"); 58 np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-gpp");
59 reg = of_get_property(np, "reg", NULL); 59 reg = of_get_property(np, "reg", NULL);
60 paddr = of_translate_address(np, reg); 60 paddr = of_translate_address(np, reg);
61 of_node_put(np); 61 of_node_put(np);
diff --git a/arch/powerpc/platforms/iseries/exception.S b/arch/powerpc/platforms/iseries/exception.S
index 5381038f0881..c775cd4b3d6e 100644
--- a/arch/powerpc/platforms/iseries/exception.S
+++ b/arch/powerpc/platforms/iseries/exception.S
@@ -38,11 +38,19 @@
38 38
39 .globl system_reset_iSeries 39 .globl system_reset_iSeries
40system_reset_iSeries: 40system_reset_iSeries:
41 mfspr r13,SPRN_SPRG3 /* Get paca address */ 41 mfspr r13,SPRN_SPRG3 /* Get alpaca address */
42 LOAD_REG_IMMEDIATE(r23, alpaca)
43 li r0,ALPACA_SIZE
44 sub r23,r13,r23
45 divdu r23,r23,r0 /* r23 has cpu number */
46 LOAD_REG_IMMEDIATE(r13, paca)
47 mulli r0,r23,PACA_SIZE
48 add r13,r13,r0
49 mtspr SPRN_SPRG3,r13 /* Save it away for the future */
42 mfmsr r24 50 mfmsr r24
43 ori r24,r24,MSR_RI 51 ori r24,r24,MSR_RI
44 mtmsrd r24 /* RI on */ 52 mtmsrd r24 /* RI on */
45 lhz r24,PACAPACAINDEX(r13) /* Get processor # */ 53 mr r24,r23
46 cmpwi 0,r24,0 /* Are we processor 0? */ 54 cmpwi 0,r24,0 /* Are we processor 0? */
47 bne 1f 55 bne 1f
48 b .__start_initialization_iSeries /* Start up the first processor */ 56 b .__start_initialization_iSeries /* Start up the first processor */
diff --git a/arch/powerpc/platforms/iseries/ipl_parms.h b/arch/powerpc/platforms/iseries/ipl_parms.h
index 77c135ddbf1b..83e4ca42fc57 100644
--- a/arch/powerpc/platforms/iseries/ipl_parms.h
+++ b/arch/powerpc/platforms/iseries/ipl_parms.h
@@ -65,6 +65,4 @@ struct ItIplParmsReal {
65 u64 xRsvd13; // Reserved x38-x3F 65 u64 xRsvd13; // Reserved x38-x3F
66}; 66};
67 67
68extern struct ItIplParmsReal xItIplParmsReal;
69
70#endif /* _ISERIES_IPL_PARMS_H */ 68#endif /* _ISERIES_IPL_PARMS_H */
diff --git a/arch/powerpc/platforms/iseries/lpardata.c b/arch/powerpc/platforms/iseries/lpardata.c
index 8162049bb04d..98bd2d37038a 100644
--- a/arch/powerpc/platforms/iseries/lpardata.c
+++ b/arch/powerpc/platforms/iseries/lpardata.c
@@ -14,10 +14,10 @@
14#include <asm/ptrace.h> 14#include <asm/ptrace.h>
15#include <asm/abs_addr.h> 15#include <asm/abs_addr.h>
16#include <asm/lppaca.h> 16#include <asm/lppaca.h>
17#include <asm/iseries/it_lp_reg_save.h>
18#include <asm/paca.h> 17#include <asm/paca.h>
19#include <asm/iseries/lpar_map.h> 18#include <asm/iseries/lpar_map.h>
20#include <asm/iseries/it_lp_queue.h> 19#include <asm/iseries/it_lp_queue.h>
20#include <asm/iseries/alpaca.h>
21 21
22#include "naca.h" 22#include "naca.h"
23#include "vpd_areas.h" 23#include "vpd_areas.h"
@@ -31,7 +31,7 @@
31/* The HvReleaseData is the root of the information shared between 31/* The HvReleaseData is the root of the information shared between
32 * the hypervisor and Linux. 32 * the hypervisor and Linux.
33 */ 33 */
34struct HvReleaseData hvReleaseData = { 34const struct HvReleaseData hvReleaseData = {
35 .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */ 35 .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */
36 .xSize = sizeof(struct HvReleaseData), 36 .xSize = sizeof(struct HvReleaseData),
37 .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas), 37 .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas),
@@ -61,6 +61,63 @@ struct naca_struct naca = {
61 .xRamDiskSize = 0, 61 .xRamDiskSize = 0,
62}; 62};
63 63
64struct ItLpRegSave {
65 u32 xDesc; // Eye catcher "LpRS" ebcdic 000-003
66 u16 xSize; // Size of this class 004-005
67 u8 xInUse; // Area is live 006-007
68 u8 xRsvd1[9]; // Reserved 007-00F
69
70 u8 xFixedRegSave[352]; // Fixed Register Save Area 010-16F
71 u32 xCTRL; // Control Register 170-173
72 u32 xDEC; // Decrementer 174-177
73 u32 xFPSCR; // FP Status and Control Reg 178-17B
74 u32 xPVR; // Processor Version Number 17C-17F
75
76 u64 xMMCR0; // Monitor Mode Control Reg 0 180-187
77 u32 xPMC1; // Perf Monitor Counter 1 188-18B
78 u32 xPMC2; // Perf Monitor Counter 2 18C-18F
79 u32 xPMC3; // Perf Monitor Counter 3 190-193
80 u32 xPMC4; // Perf Monitor Counter 4 194-197
81 u32 xPIR; // Processor ID Reg 198-19B
82
83 u32 xMMCR1; // Monitor Mode Control Reg 1 19C-19F
84 u32 xMMCRA; // Monitor Mode Control Reg A 1A0-1A3
85 u32 xPMC5; // Perf Monitor Counter 5 1A4-1A7
86 u32 xPMC6; // Perf Monitor Counter 6 1A8-1AB
87 u32 xPMC7; // Perf Monitor Counter 7 1AC-1AF
88 u32 xPMC8; // Perf Monitor Counter 8 1B0-1B3
89 u32 xTSC; // Thread Switch Control 1B4-1B7
90 u32 xTST; // Thread Switch Timeout 1B8-1BB
91 u32 xRsvd; // Reserved 1BC-1BF
92
93 u64 xACCR; // Address Compare Control Reg 1C0-1C7
94 u64 xIMR; // Instruction Match Register 1C8-1CF
95 u64 xSDR1; // Storage Description Reg 1 1D0-1D7
96 u64 xSPRG0; // Special Purpose Reg General0 1D8-1DF
97 u64 xSPRG1; // Special Purpose Reg General1 1E0-1E7
98 u64 xSPRG2; // Special Purpose Reg General2 1E8-1EF
99 u64 xSPRG3; // Special Purpose Reg General3 1F0-1F7
100 u64 xTB; // Time Base Register 1F8-1FF
101
102 u64 xFPR[32]; // Floating Point Registers 200-2FF
103
104 u64 xMSR; // Machine State Register 300-307
105 u64 xNIA; // Next Instruction Address 308-30F
106
107 u64 xDABR; // Data Address Breakpoint Reg 310-317
108 u64 xIABR; // Inst Address Breakpoint Reg 318-31F
109
110 u64 xHID0; // HW Implementation Dependent0 320-327
111
112 u64 xHID4; // HW Implementation Dependent4 328-32F
113 u64 xSCOMd; // SCON Data Reg (SPRG4) 330-337
114 u64 xSCOMc; // SCON Command Reg (SPRG5) 338-33F
115 u64 xSDAR; // Sample Data Address Register 340-347
116 u64 xSIAR; // Sample Inst Address Register 348-34F
117
118 u8 xRsvd3[176]; // Reserved 350-3FF
119};
120
64extern void system_reset_iSeries(void); 121extern void system_reset_iSeries(void);
65extern void machine_check_iSeries(void); 122extern void machine_check_iSeries(void);
66extern void data_access_iSeries(void); 123extern void data_access_iSeries(void);
@@ -129,7 +186,7 @@ struct ItLpNaca itLpNaca = {
129}; 186};
130 187
131/* May be filled in by the hypervisor so cannot end up in the BSS */ 188/* May be filled in by the hypervisor so cannot end up in the BSS */
132struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data"))); 189static struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
133 190
134/* May be filled in by the hypervisor so cannot end up in the BSS */ 191/* May be filled in by the hypervisor so cannot end up in the BSS */
135struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data"))); 192struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data")));
@@ -152,13 +209,54 @@ u64 xMsVpd[3400] __attribute__((__section__(".data")));
152 209
153/* Space for Recovery Log Buffer */ 210/* Space for Recovery Log Buffer */
154/* May be filled in by the hypervisor so cannot end up in the BSS */ 211/* May be filled in by the hypervisor so cannot end up in the BSS */
155u64 xRecoveryLogBuffer[32] __attribute__((__section__(".data"))); 212static u64 xRecoveryLogBuffer[32] __attribute__((__section__(".data")));
156 213
157struct SpCommArea xSpCommArea = { 214static const struct SpCommArea xSpCommArea = {
158 .xDesc = 0xE2D7C3C2, 215 .xDesc = 0xE2D7C3C2,
159 .xFormat = 1, 216 .xFormat = 1,
160}; 217};
161 218
219static const struct ItLpRegSave iseries_reg_save[] = {
220 [0 ... (NR_CPUS-1)] = {
221 .xDesc = 0xd397d9e2, /* "LpRS" */
222 .xSize = sizeof(struct ItLpRegSave),
223 },
224};
225
226#define ALPACA_INIT(number) \
227{ \
228 .lppaca_ptr = &lppaca[number], \
229 .reg_save_ptr = &iseries_reg_save[number], \
230}
231
232const struct alpaca alpaca[] = {
233 ALPACA_INIT( 0),
234#if NR_CPUS > 1
235 ALPACA_INIT( 1), ALPACA_INIT( 2), ALPACA_INIT( 3),
236#if NR_CPUS > 4
237 ALPACA_INIT( 4), ALPACA_INIT( 5), ALPACA_INIT( 6), ALPACA_INIT( 7),
238#if NR_CPUS > 8
239 ALPACA_INIT( 8), ALPACA_INIT( 9), ALPACA_INIT(10), ALPACA_INIT(11),
240 ALPACA_INIT(12), ALPACA_INIT(13), ALPACA_INIT(14), ALPACA_INIT(15),
241 ALPACA_INIT(16), ALPACA_INIT(17), ALPACA_INIT(18), ALPACA_INIT(19),
242 ALPACA_INIT(20), ALPACA_INIT(21), ALPACA_INIT(22), ALPACA_INIT(23),
243 ALPACA_INIT(24), ALPACA_INIT(25), ALPACA_INIT(26), ALPACA_INIT(27),
244 ALPACA_INIT(28), ALPACA_INIT(29), ALPACA_INIT(30), ALPACA_INIT(31),
245#if NR_CPUS > 32
246 ALPACA_INIT(32), ALPACA_INIT(33), ALPACA_INIT(34), ALPACA_INIT(35),
247 ALPACA_INIT(36), ALPACA_INIT(37), ALPACA_INIT(38), ALPACA_INIT(39),
248 ALPACA_INIT(40), ALPACA_INIT(41), ALPACA_INIT(42), ALPACA_INIT(43),
249 ALPACA_INIT(44), ALPACA_INIT(45), ALPACA_INIT(46), ALPACA_INIT(47),
250 ALPACA_INIT(48), ALPACA_INIT(49), ALPACA_INIT(50), ALPACA_INIT(51),
251 ALPACA_INIT(52), ALPACA_INIT(53), ALPACA_INIT(54), ALPACA_INIT(55),
252 ALPACA_INIT(56), ALPACA_INIT(57), ALPACA_INIT(58), ALPACA_INIT(59),
253 ALPACA_INIT(60), ALPACA_INIT(61), ALPACA_INIT(62), ALPACA_INIT(63),
254#endif
255#endif
256#endif
257#endif
258};
259
162/* The LparMap data is now located at offset 0x6000 in head.S 260/* The LparMap data is now located at offset 0x6000 in head.S
163 * It was put there so that the HvReleaseData could address it 261 * It was put there so that the HvReleaseData could address it
164 * with a 32-bit offset as required by the iSeries hypervisor 262 * with a 32-bit offset as required by the iSeries hypervisor
@@ -167,7 +265,7 @@ struct SpCommArea xSpCommArea = {
167 * the Naca via the HvReleaseData area. The HvReleaseData has the 265 * the Naca via the HvReleaseData area. The HvReleaseData has the
168 * offset into the Naca of the pointer to the ItVpdAreas. 266 * offset into the Naca of the pointer to the ItVpdAreas.
169 */ 267 */
170struct ItVpdAreas itVpdAreas = { 268const struct ItVpdAreas itVpdAreas = {
171 .xSlicDesc = 0xc9a3e5c1, /* "ItVA" */ 269 .xSlicDesc = 0xc9a3e5c1, /* "ItVA" */
172 .xSlicSize = sizeof(struct ItVpdAreas), 270 .xSlicSize = sizeof(struct ItVpdAreas),
173 .xSlicVpdEntries = ItVpdMaxEntries, /* # VPD array entries */ 271 .xSlicVpdEntries = ItVpdMaxEntries, /* # VPD array entries */
@@ -185,7 +283,7 @@ struct ItVpdAreas itVpdAreas = {
185 .xSlicVpdLens = { /* VPD lengths */ 283 .xSlicVpdLens = { /* VPD lengths */
186 0,0,0, /* 0 - 2 */ 284 0,0,0, /* 0 - 2 */
187 sizeof(xItExtVpdPanel), /* 3 Extended VPD */ 285 sizeof(xItExtVpdPanel), /* 3 Extended VPD */
188 sizeof(struct paca_struct), /* 4 length of Paca */ 286 sizeof(struct alpaca), /* 4 length of (fake) Paca */
189 0, /* 5 */ 287 0, /* 5 */
190 sizeof(struct ItIplParmsReal),/* 6 length of IPL parms */ 288 sizeof(struct ItIplParmsReal),/* 6 length of IPL parms */
191 26992, /* 7 length of MS VPD */ 289 26992, /* 7 length of MS VPD */
@@ -203,7 +301,7 @@ struct ItVpdAreas itVpdAreas = {
203 .xSlicVpdAdrs = { /* VPD addresses */ 301 .xSlicVpdAdrs = { /* VPD addresses */
204 0,0,0, /* 0 - 2 */ 302 0,0,0, /* 0 - 2 */
205 &xItExtVpdPanel, /* 3 Extended VPD */ 303 &xItExtVpdPanel, /* 3 Extended VPD */
206 &paca[0], /* 4 first Paca */ 304 &alpaca[0], /* 4 first (fake) Paca */
207 0, /* 5 */ 305 0, /* 5 */
208 &xItIplParmsReal, /* 6 IPL parms */ 306 &xItIplParmsReal, /* 6 IPL parms */
209 &xMsVpd, /* 7 MS Vpd */ 307 &xMsVpd, /* 7 MS Vpd */
@@ -219,10 +317,3 @@ struct ItVpdAreas itVpdAreas = {
219 0,0 317 0,0
220 } 318 }
221}; 319};
222
223struct ItLpRegSave iseries_reg_save[] = {
224 [0 ... (NR_CPUS-1)] = {
225 .xDesc = 0xd397d9e2, /* "LpRS" */
226 .xSize = sizeof(struct ItLpRegSave),
227 },
228};
diff --git a/arch/powerpc/platforms/iseries/naca.h b/arch/powerpc/platforms/iseries/naca.h
index ab2372eb8d2e..f01708e12862 100644
--- a/arch/powerpc/platforms/iseries/naca.h
+++ b/arch/powerpc/platforms/iseries/naca.h
@@ -14,7 +14,7 @@
14 14
15struct naca_struct { 15struct naca_struct {
16 /* Kernel only data - undefined for user space */ 16 /* Kernel only data - undefined for user space */
17 void *xItVpdAreas; /* VPD Data 0x00 */ 17 const void *xItVpdAreas; /* VPD Data 0x00 */
18 void *xRamDisk; /* iSeries ramdisk 0x08 */ 18 void *xRamDisk; /* iSeries ramdisk 0x08 */
19 u64 xRamDiskSize; /* In pages 0x10 */ 19 u64 xRamDiskSize; /* In pages 0x10 */
20}; 20};
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c
index cc562e4c2f32..02a634faedbe 100644
--- a/arch/powerpc/platforms/iseries/pci.c
+++ b/arch/powerpc/platforms/iseries/pci.c
@@ -23,6 +23,7 @@
23 23
24#undef DEBUG 24#undef DEBUG
25 25
26#include <linux/jiffies.h>
26#include <linux/kernel.h> 27#include <linux/kernel.h>
27#include <linux/list.h> 28#include <linux/list.h>
28#include <linux/string.h> 29#include <linux/string.h>
@@ -586,7 +587,7 @@ static inline struct device_node *xlate_iomm_address(
586 static unsigned long last_jiffies; 587 static unsigned long last_jiffies;
587 static int num_printed; 588 static int num_printed;
588 589
589 if ((jiffies - last_jiffies) > 60 * HZ) { 590 if (time_after(jiffies, last_jiffies + 60 * HZ)) {
590 last_jiffies = jiffies; 591 last_jiffies = jiffies;
591 num_printed = 0; 592 num_printed = 0;
592 } 593 }
diff --git a/arch/powerpc/platforms/iseries/release_data.h b/arch/powerpc/platforms/iseries/release_data.h
index 66189fd2e32d..6ad7d843e8fc 100644
--- a/arch/powerpc/platforms/iseries/release_data.h
+++ b/arch/powerpc/platforms/iseries/release_data.h
@@ -58,6 +58,6 @@ struct HvReleaseData {
58 char xRsvd3[20]; /* Reserved x2C-x3F */ 58 char xRsvd3[20]; /* Reserved x2C-x3F */
59}; 59};
60 60
61extern struct HvReleaseData hvReleaseData; 61extern const struct HvReleaseData hvReleaseData;
62 62
63#endif /* _ISERIES_RELEASE_DATA_H */ 63#endif /* _ISERIES_RELEASE_DATA_H */
diff --git a/arch/powerpc/platforms/iseries/spcomm_area.h b/arch/powerpc/platforms/iseries/spcomm_area.h
index 6e3b685115c9..598b7c14573a 100644
--- a/arch/powerpc/platforms/iseries/spcomm_area.h
+++ b/arch/powerpc/platforms/iseries/spcomm_area.h
@@ -31,6 +31,4 @@ struct SpCommArea {
31 u8 xRsvd2[80]; // Reserved 030-07F 31 u8 xRsvd2[80]; // Reserved 030-07F
32}; 32};
33 33
34extern struct SpCommArea xSpCommArea;
35
36#endif /* _ISERIES_SPCOMM_AREA_H */ 34#endif /* _ISERIES_SPCOMM_AREA_H */
diff --git a/arch/powerpc/platforms/iseries/vpd_areas.h b/arch/powerpc/platforms/iseries/vpd_areas.h
index 601e6dd860ed..feb001f3a5fe 100644
--- a/arch/powerpc/platforms/iseries/vpd_areas.h
+++ b/arch/powerpc/platforms/iseries/vpd_areas.h
@@ -80,9 +80,9 @@ struct ItVpdAreas {
80 u32 xPlicDmaLens[ItDmaMaxEntries];// Array of DMA lengths 080-0A7 80 u32 xPlicDmaLens[ItDmaMaxEntries];// Array of DMA lengths 080-0A7
81 u32 xPlicDmaToks[ItDmaMaxEntries];// Array of DMA tokens 0A8-0CF 81 u32 xPlicDmaToks[ItDmaMaxEntries];// Array of DMA tokens 0A8-0CF
82 u32 xSlicVpdLens[ItVpdMaxEntries];// Array of VPD lengths 0D0-12F 82 u32 xSlicVpdLens[ItVpdMaxEntries];// Array of VPD lengths 0D0-12F
83 void *xSlicVpdAdrs[ItVpdMaxEntries];// Array of VPD buffers 130-1EF 83 const void *xSlicVpdAdrs[ItVpdMaxEntries];// Array of VPD buffers 130-1EF
84}; 84};
85 85
86extern struct ItVpdAreas itVpdAreas; 86extern const struct ItVpdAreas itVpdAreas;
87 87
88#endif /* _ISERIES_VPD_AREAS_H */ 88#endif /* _ISERIES_VPD_AREAS_H */
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c
index 3ffa0ac170ee..301855263b81 100644
--- a/arch/powerpc/platforms/maple/pci.c
+++ b/arch/powerpc/platforms/maple/pci.c
@@ -592,50 +592,3 @@ int maple_pci_get_legacy_ide_irq(struct pci_dev *pdev, int channel)
592 } 592 }
593 return irq; 593 return irq;
594} 594}
595
596/* XXX: To remove once all firmwares are ok */
597static void fixup_maple_ide(struct pci_dev* dev)
598{
599 if (!machine_is(maple))
600 return;
601
602#if 0 /* Enable this to enable IDE port 0 */
603 {
604 u8 v;
605
606 pci_read_config_byte(dev, 0x40, &v);
607 v |= 2;
608 pci_write_config_byte(dev, 0x40, v);
609 }
610#endif
611#if 0 /* fix bus master base */
612 pci_write_config_dword(dev, 0x20, 0xcc01);
613 printk("old ide resource: %lx -> %lx \n",
614 dev->resource[4].start, dev->resource[4].end);
615 dev->resource[4].start = 0xcc00;
616 dev->resource[4].end = 0xcc10;
617#endif
618#if 0 /* Enable this to fixup IDE sense/polarity of irqs in IO-APICs */
619 {
620 struct pci_dev *apicdev;
621 u32 v;
622
623 apicdev = pci_get_slot (dev->bus, PCI_DEVFN(5,0));
624 if (apicdev == NULL)
625 printk("IDE Fixup IRQ: Can't find IO-APIC !\n");
626 else {
627 pci_write_config_byte(apicdev, 0xf2, 0x10 + 2*14);
628 pci_read_config_dword(apicdev, 0xf4, &v);
629 v &= ~0x00000022;
630 pci_write_config_dword(apicdev, 0xf4, v);
631 pci_write_config_byte(apicdev, 0xf2, 0x10 + 2*15);
632 pci_read_config_dword(apicdev, 0xf4, &v);
633 v &= ~0x00000022;
634 pci_write_config_dword(apicdev, 0xf4, v);
635 pci_dev_put(apicdev);
636 }
637 }
638#endif
639}
640DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE,
641 fixup_maple_ide);
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c
index 3ce2d73b4177..364714757cf1 100644
--- a/arch/powerpc/platforms/maple/setup.c
+++ b/arch/powerpc/platforms/maple/setup.c
@@ -43,6 +43,7 @@
43#include <linux/smp.h> 43#include <linux/smp.h>
44#include <linux/bitops.h> 44#include <linux/bitops.h>
45#include <linux/of_device.h> 45#include <linux/of_device.h>
46#include <linux/lmb.h>
46 47
47#include <asm/processor.h> 48#include <asm/processor.h>
48#include <asm/sections.h> 49#include <asm/sections.h>
@@ -57,7 +58,6 @@
57#include <asm/dma.h> 58#include <asm/dma.h>
58#include <asm/cputable.h> 59#include <asm/cputable.h>
59#include <asm/time.h> 60#include <asm/time.h>
60#include <asm/lmb.h>
61#include <asm/mpic.h> 61#include <asm/mpic.h>
62#include <asm/rtas.h> 62#include <asm/rtas.h>
63#include <asm/udbg.h> 63#include <asm/udbg.h>
@@ -319,7 +319,7 @@ static int __init maple_probe(void)
319 return 1; 319 return 1;
320} 320}
321 321
322define_machine(maple_md) { 322define_machine(maple) {
323 .name = "Maple", 323 .name = "Maple",
324 .probe = maple_probe, 324 .probe = maple_probe,
325 .setup_arch = maple_setup_arch, 325 .setup_arch = maple_setup_arch,
diff --git a/arch/powerpc/platforms/pasemi/dma_lib.c b/arch/powerpc/platforms/pasemi/dma_lib.c
index c529d8dff395..217af321b0ca 100644
--- a/arch/powerpc/platforms/pasemi/dma_lib.c
+++ b/arch/powerpc/platforms/pasemi/dma_lib.c
@@ -17,6 +17,7 @@
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */ 18 */
19 19
20#include <linux/kernel.h>
20#include <linux/init.h> 21#include <linux/init.h>
21#include <linux/module.h> 22#include <linux/module.h>
22#include <linux/pci.h> 23#include <linux/pci.h>
@@ -26,6 +27,8 @@
26 27
27#define MAX_TXCH 64 28#define MAX_TXCH 64
28#define MAX_RXCH 64 29#define MAX_RXCH 64
30#define MAX_FLAGS 64
31#define MAX_FUN 8
29 32
30static struct pasdma_status *dma_status; 33static struct pasdma_status *dma_status;
31 34
@@ -43,6 +46,8 @@ static struct pci_dev *dma_pdev;
43 46
44static DECLARE_BITMAP(txch_free, MAX_TXCH); 47static DECLARE_BITMAP(txch_free, MAX_TXCH);
45static DECLARE_BITMAP(rxch_free, MAX_RXCH); 48static DECLARE_BITMAP(rxch_free, MAX_RXCH);
49static DECLARE_BITMAP(flags_free, MAX_FLAGS);
50static DECLARE_BITMAP(fun_free, MAX_FUN);
46 51
47/* pasemi_read_iob_reg - read IOB register 52/* pasemi_read_iob_reg - read IOB register
48 * @reg: Register to read (offset into PCI CFG space) 53 * @reg: Register to read (offset into PCI CFG space)
@@ -373,6 +378,106 @@ void pasemi_dma_free_buf(struct pasemi_dmachan *chan, int size,
373} 378}
374EXPORT_SYMBOL(pasemi_dma_free_buf); 379EXPORT_SYMBOL(pasemi_dma_free_buf);
375 380
381/* pasemi_dma_alloc_flag - Allocate a flag (event) for channel syncronization
382 *
383 * Allocates a flag for use with channel syncronization (event descriptors).
384 * Returns allocated flag (0-63), < 0 on error.
385 */
386int pasemi_dma_alloc_flag(void)
387{
388 int bit;
389
390retry:
391 bit = find_next_bit(flags_free, MAX_FLAGS, 0);
392 if (bit >= MAX_FLAGS)
393 return -ENOSPC;
394 if (!test_and_clear_bit(bit, flags_free))
395 goto retry;
396
397 return bit;
398}
399EXPORT_SYMBOL(pasemi_dma_alloc_flag);
400
401
402/* pasemi_dma_free_flag - Deallocates a flag (event)
403 * @flag: Flag number to deallocate
404 *
405 * Frees up a flag so it can be reused for other purposes.
406 */
407void pasemi_dma_free_flag(int flag)
408{
409 BUG_ON(test_bit(flag, flags_free));
410 BUG_ON(flag >= MAX_FLAGS);
411 set_bit(flag, flags_free);
412}
413EXPORT_SYMBOL(pasemi_dma_free_flag);
414
415
416/* pasemi_dma_set_flag - Sets a flag (event) to 1
417 * @flag: Flag number to set active
418 *
419 * Sets the flag provided to 1.
420 */
421void pasemi_dma_set_flag(int flag)
422{
423 BUG_ON(flag >= MAX_FLAGS);
424 if (flag < 32)
425 pasemi_write_dma_reg(PAS_DMA_TXF_SFLG0, 1 << flag);
426 else
427 pasemi_write_dma_reg(PAS_DMA_TXF_SFLG1, 1 << flag);
428}
429EXPORT_SYMBOL(pasemi_dma_set_flag);
430
431/* pasemi_dma_clear_flag - Sets a flag (event) to 0
432 * @flag: Flag number to set inactive
433 *
434 * Sets the flag provided to 0.
435 */
436void pasemi_dma_clear_flag(int flag)
437{
438 BUG_ON(flag >= MAX_FLAGS);
439 if (flag < 32)
440 pasemi_write_dma_reg(PAS_DMA_TXF_CFLG0, 1 << flag);
441 else
442 pasemi_write_dma_reg(PAS_DMA_TXF_CFLG1, 1 << flag);
443}
444EXPORT_SYMBOL(pasemi_dma_clear_flag);
445
446/* pasemi_dma_alloc_fun - Allocate a function engine
447 *
448 * Allocates a function engine to use for crypto/checksum offload
449 * Returns allocated engine (0-8), < 0 on error.
450 */
451int pasemi_dma_alloc_fun(void)
452{
453 int bit;
454
455retry:
456 bit = find_next_bit(fun_free, MAX_FLAGS, 0);
457 if (bit >= MAX_FLAGS)
458 return -ENOSPC;
459 if (!test_and_clear_bit(bit, fun_free))
460 goto retry;
461
462 return bit;
463}
464EXPORT_SYMBOL(pasemi_dma_alloc_fun);
465
466
467/* pasemi_dma_free_fun - Deallocates a function engine
468 * @flag: Engine number to deallocate
469 *
470 * Frees up a function engine so it can be used for other purposes.
471 */
472void pasemi_dma_free_fun(int fun)
473{
474 BUG_ON(test_bit(fun, fun_free));
475 BUG_ON(fun >= MAX_FLAGS);
476 set_bit(fun, fun_free);
477}
478EXPORT_SYMBOL(pasemi_dma_free_fun);
479
480
376static void *map_onedev(struct pci_dev *p, int index) 481static void *map_onedev(struct pci_dev *p, int index)
377{ 482{
378 struct device_node *dn; 483 struct device_node *dn;
@@ -410,6 +515,7 @@ int pasemi_dma_init(void)
410 struct resource res; 515 struct resource res;
411 struct device_node *dn; 516 struct device_node *dn;
412 int i, intf, err = 0; 517 int i, intf, err = 0;
518 unsigned long timeout;
413 u32 tmp; 519 u32 tmp;
414 520
415 if (!machine_is(pasemi)) 521 if (!machine_is(pasemi))
@@ -478,6 +584,44 @@ int pasemi_dma_init(void)
478 for (i = 0; i < MAX_RXCH; i++) 584 for (i = 0; i < MAX_RXCH; i++)
479 __set_bit(i, rxch_free); 585 __set_bit(i, rxch_free);
480 586
587 timeout = jiffies + HZ;
588 pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, 0);
589 while (pasemi_read_dma_reg(PAS_DMA_COM_RXSTA) & 1) {
590 if (time_after(jiffies, timeout)) {
591 pr_warning("Warning: Could not disable RX section\n");
592 break;
593 }
594 }
595
596 timeout = jiffies + HZ;
597 pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, 0);
598 while (pasemi_read_dma_reg(PAS_DMA_COM_TXSTA) & 1) {
599 if (time_after(jiffies, timeout)) {
600 pr_warning("Warning: Could not disable TX section\n");
601 break;
602 }
603 }
604
605 /* setup resource allocations for the different DMA sections */
606 tmp = pasemi_read_dma_reg(PAS_DMA_COM_CFG);
607 pasemi_write_dma_reg(PAS_DMA_COM_CFG, tmp | 0x18000000);
608
609 /* enable tx section */
610 pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN);
611
612 /* enable rx section */
613 pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN);
614
615 for (i = 0; i < MAX_FLAGS; i++)
616 __set_bit(i, flags_free);
617
618 for (i = 0; i < MAX_FUN; i++)
619 __set_bit(i, fun_free);
620
621 /* clear all status flags */
622 pasemi_write_dma_reg(PAS_DMA_TXF_CFLG0, 0xffffffff);
623 pasemi_write_dma_reg(PAS_DMA_TXF_CFLG1, 0xffffffff);
624
481 printk(KERN_INFO "PA Semi PWRficient DMA library initialized " 625 printk(KERN_INFO "PA Semi PWRficient DMA library initialized "
482 "(%d tx, %d rx channels)\n", num_txch, num_rxch); 626 "(%d tx, %d rx channels)\n", num_txch, num_rxch);
483 627
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index 5803f11c77fc..86967bdd8774 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2005-2007, PA Semi, Inc 2 * Copyright (C) 2005-2008, PA Semi, Inc
3 * 3 *
4 * Maintained by: Olof Johansson <olof@lixom.net> 4 * Maintained by: Olof Johansson <olof@lixom.net>
5 * 5 *
@@ -27,7 +27,6 @@
27#include <asm/abs_addr.h> 27#include <asm/abs_addr.h>
28#include <asm/firmware.h> 28#include <asm/firmware.h>
29 29
30
31#define IOBMAP_PAGE_SHIFT 12 30#define IOBMAP_PAGE_SHIFT 12
32#define IOBMAP_PAGE_SIZE (1 << IOBMAP_PAGE_SHIFT) 31#define IOBMAP_PAGE_SIZE (1 << IOBMAP_PAGE_SHIFT)
33#define IOBMAP_PAGE_MASK (IOBMAP_PAGE_SIZE - 1) 32#define IOBMAP_PAGE_MASK (IOBMAP_PAGE_SIZE - 1)
@@ -35,13 +34,13 @@
35#define IOB_BASE 0xe0000000 34#define IOB_BASE 0xe0000000
36#define IOB_SIZE 0x3000 35#define IOB_SIZE 0x3000
37/* Configuration registers */ 36/* Configuration registers */
38#define IOBCAP_REG 0x10 37#define IOBCAP_REG 0x40
39#define IOBCOM_REG 0x40 38#define IOBCOM_REG 0x100
40/* Enable IOB address translation */ 39/* Enable IOB address translation */
41#define IOBCOM_ATEN 0x00000100 40#define IOBCOM_ATEN 0x00000100
42 41
43/* Address decode configuration register */ 42/* Address decode configuration register */
44#define IOB_AD_REG 0x53 43#define IOB_AD_REG 0x14c
45/* IOBCOM_AD_REG fields */ 44/* IOBCOM_AD_REG fields */
46#define IOB_AD_VGPRT 0x00000e00 45#define IOB_AD_VGPRT 0x00000e00
47#define IOB_AD_VGAEN 0x00000100 46#define IOB_AD_VGAEN 0x00000100
@@ -56,13 +55,13 @@
56#define IOB_AD_TRNG_2G 0x00000001 55#define IOB_AD_TRNG_2G 0x00000001
57#define IOB_AD_TRNG_128G 0x00000003 56#define IOB_AD_TRNG_128G 0x00000003
58 57
59#define IOB_TABLEBASE_REG 0x55 58#define IOB_TABLEBASE_REG 0x154
60 59
61/* Base of the 64 4-byte L1 registers */ 60/* Base of the 64 4-byte L1 registers */
62#define IOB_XLT_L1_REGBASE 0xac0 61#define IOB_XLT_L1_REGBASE 0x2b00
63 62
64/* Register to invalidate TLB entries */ 63/* Register to invalidate TLB entries */
65#define IOB_AT_INVAL_TLB_REG 0xb40 64#define IOB_AT_INVAL_TLB_REG 0x2d00
66 65
67/* The top two bits of the level 1 entry contains valid and type flags */ 66/* The top two bits of the level 1 entry contains valid and type flags */
68#define IOBMAP_L1E_V 0x40000000 67#define IOBMAP_L1E_V 0x40000000
@@ -76,7 +75,7 @@
76#define IOBMAP_L2E_V 0x80000000 75#define IOBMAP_L2E_V 0x80000000
77#define IOBMAP_L2E_V_CACHED 0xc0000000 76#define IOBMAP_L2E_V_CACHED 0xc0000000
78 77
79static u32 __iomem *iob; 78static void __iomem *iob;
80static u32 iob_l1_emptyval; 79static u32 iob_l1_emptyval;
81static u32 iob_l2_emptyval; 80static u32 iob_l2_emptyval;
82static u32 *iob_l2_base; 81static u32 *iob_l2_base;
@@ -219,7 +218,7 @@ int __init iob_init(struct device_node *dn)
219 for (i = 0; i < 64; i++) { 218 for (i = 0; i < 64; i++) {
220 /* Each L1 covers 32MB, i.e. 8K entries = 32K of ram */ 219 /* Each L1 covers 32MB, i.e. 8K entries = 32K of ram */
221 regword = IOBMAP_L1E_V | (__pa(iob_l2_base + i*0x2000) >> 12); 220 regword = IOBMAP_L1E_V | (__pa(iob_l2_base + i*0x2000) >> 12);
222 out_le32(iob+IOB_XLT_L1_REGBASE+i, regword); 221 out_le32(iob+IOB_XLT_L1_REGBASE+i*4, regword);
223 } 222 }
224 223
225 /* set 2GB translation window, based at 0 */ 224 /* set 2GB translation window, based at 0 */
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index 2693fc371eab..bf44c5441a36 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -53,6 +53,7 @@
53#include <linux/suspend.h> 53#include <linux/suspend.h>
54#include <linux/of_device.h> 54#include <linux/of_device.h>
55#include <linux/of_platform.h> 55#include <linux/of_platform.h>
56#include <linux/lmb.h>
56 57
57#include <asm/reg.h> 58#include <asm/reg.h>
58#include <asm/sections.h> 59#include <asm/sections.h>
@@ -74,7 +75,6 @@
74#include <asm/iommu.h> 75#include <asm/iommu.h>
75#include <asm/smu.h> 76#include <asm/smu.h>
76#include <asm/pmc.h> 77#include <asm/pmc.h>
77#include <asm/lmb.h>
78#include <asm/udbg.h> 78#include <asm/udbg.h>
79 79
80#include "pmac.h" 80#include "pmac.h"
diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c
index 9d251d0ca8c6..3866debfa3c4 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -499,41 +499,14 @@ static int __init ps3_register_graphics_devices(void)
499} 499}
500 500
501/** 501/**
502 * ps3_register_repository_device - Register a device from the repositiory info. 502 * ps3_setup_dynamic_device - Setup a dynamic device from the repository
503 *
504 */ 503 */
505 504
506static int ps3_register_repository_device( 505static int ps3_setup_dynamic_device(const struct ps3_repository_device *repo)
507 const struct ps3_repository_device *repo)
508{ 506{
509 int result; 507 int result;
510 508
511 switch (repo->dev_type) { 509 switch (repo->dev_type) {
512 case PS3_DEV_TYPE_SB_GELIC:
513 result = ps3_setup_gelic_device(repo);
514 if (result) {
515 pr_debug("%s:%d ps3_setup_gelic_device failed\n",
516 __func__, __LINE__);
517 }
518 break;
519 case PS3_DEV_TYPE_SB_USB:
520
521 /* Each USB device has both an EHCI and an OHCI HC */
522
523 result = ps3_setup_ehci_device(repo);
524
525 if (result) {
526 pr_debug("%s:%d ps3_setup_ehci_device failed\n",
527 __func__, __LINE__);
528 }
529
530 result = ps3_setup_ohci_device(repo);
531
532 if (result) {
533 pr_debug("%s:%d ps3_setup_ohci_device failed\n",
534 __func__, __LINE__);
535 }
536 break;
537 case PS3_DEV_TYPE_STOR_DISK: 510 case PS3_DEV_TYPE_STOR_DISK:
538 result = ps3_setup_storage_dev(repo, PS3_MATCH_ID_STOR_DISK); 511 result = ps3_setup_storage_dev(repo, PS3_MATCH_ID_STOR_DISK);
539 512
@@ -572,6 +545,48 @@ static int ps3_register_repository_device(
572 return result; 545 return result;
573} 546}
574 547
548/**
549 * ps3_setup_static_device - Setup a static device from the repository
550 */
551
552static int __init ps3_setup_static_device(const struct ps3_repository_device *repo)
553{
554 int result;
555
556 switch (repo->dev_type) {
557 case PS3_DEV_TYPE_SB_GELIC:
558 result = ps3_setup_gelic_device(repo);
559 if (result) {
560 pr_debug("%s:%d ps3_setup_gelic_device failed\n",
561 __func__, __LINE__);
562 }
563 break;
564 case PS3_DEV_TYPE_SB_USB:
565
566 /* Each USB device has both an EHCI and an OHCI HC */
567
568 result = ps3_setup_ehci_device(repo);
569
570 if (result) {
571 pr_debug("%s:%d ps3_setup_ehci_device failed\n",
572 __func__, __LINE__);
573 }
574
575 result = ps3_setup_ohci_device(repo);
576
577 if (result) {
578 pr_debug("%s:%d ps3_setup_ohci_device failed\n",
579 __func__, __LINE__);
580 }
581 break;
582
583 default:
584 return ps3_setup_dynamic_device(repo);
585 }
586
587 return result;
588}
589
575static void ps3_find_and_add_device(u64 bus_id, u64 dev_id) 590static void ps3_find_and_add_device(u64 bus_id, u64 dev_id)
576{ 591{
577 struct ps3_repository_device repo; 592 struct ps3_repository_device repo;
@@ -601,7 +616,7 @@ found:
601 pr_debug("%s:%u: device %lu:%lu found after %u retries\n", 616 pr_debug("%s:%u: device %lu:%lu found after %u retries\n",
602 __func__, __LINE__, bus_id, dev_id, retries); 617 __func__, __LINE__, bus_id, dev_id, retries);
603 618
604 ps3_register_repository_device(&repo); 619 ps3_setup_dynamic_device(&repo);
605 return; 620 return;
606} 621}
607 622
@@ -905,8 +920,7 @@ static int __init ps3_register_devices(void)
905 920
906 ps3_register_graphics_devices(); 921 ps3_register_graphics_devices();
907 922
908 ps3_repository_find_devices(PS3_BUS_TYPE_SB, 923 ps3_repository_find_devices(PS3_BUS_TYPE_SB, ps3_setup_static_device);
909 ps3_register_repository_device);
910 924
911 ps3_register_sound_devices(); 925 ps3_register_sound_devices();
912 926
diff --git a/arch/powerpc/platforms/ps3/htab.c b/arch/powerpc/platforms/ps3/htab.c
index 7382f195c4f8..1cf901fa9031 100644
--- a/arch/powerpc/platforms/ps3/htab.c
+++ b/arch/powerpc/platforms/ps3/htab.c
@@ -19,9 +19,10 @@
19 */ 19 */
20 20
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/lmb.h>
22 23
23#include <asm/machdep.h> 24#include <asm/machdep.h>
24#include <asm/lmb.h> 25#include <asm/prom.h>
25#include <asm/udbg.h> 26#include <asm/udbg.h>
26#include <asm/lv1call.h> 27#include <asm/lv1call.h>
27#include <asm/ps3fb.h> 28#include <asm/ps3fb.h>
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
index 3a6db04aa940..a14e5cdc2fed 100644
--- a/arch/powerpc/platforms/ps3/interrupt.c
+++ b/arch/powerpc/platforms/ps3/interrupt.c
@@ -709,7 +709,7 @@ static unsigned int ps3_get_irq(void)
709 asm volatile("cntlzd %0,%1" : "=r" (plug) : "r" (x)); 709 asm volatile("cntlzd %0,%1" : "=r" (plug) : "r" (x));
710 plug &= 0x3f; 710 plug &= 0x3f;
711 711
712 if (unlikely(plug) == NO_IRQ) { 712 if (unlikely(plug == NO_IRQ)) {
713 pr_debug("%s:%d: no plug found: thread_id %lu\n", __func__, 713 pr_debug("%s:%d: no plug found: thread_id %lu\n", __func__,
714 __LINE__, pd->thread_id); 714 __LINE__, pd->thread_id);
715 dump_bmp(&per_cpu(ps3_private, 0)); 715 dump_bmp(&per_cpu(ps3_private, 0));
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
index 68900476c842..5b3fb2b321ab 100644
--- a/arch/powerpc/platforms/ps3/mm.c
+++ b/arch/powerpc/platforms/ps3/mm.c
@@ -21,9 +21,10 @@
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/module.h> 22#include <linux/module.h>
23#include <linux/memory_hotplug.h> 23#include <linux/memory_hotplug.h>
24#include <linux/lmb.h>
24 25
25#include <asm/firmware.h> 26#include <asm/firmware.h>
26#include <asm/lmb.h> 27#include <asm/prom.h>
27#include <asm/udbg.h> 28#include <asm/udbg.h>
28#include <asm/lv1call.h> 29#include <asm/lv1call.h>
29 30
diff --git a/arch/powerpc/platforms/ps3/os-area.c b/arch/powerpc/platforms/ps3/os-area.c
index b9ea09d9d2fb..c73379ec9141 100644
--- a/arch/powerpc/platforms/ps3/os-area.c
+++ b/arch/powerpc/platforms/ps3/os-area.c
@@ -24,8 +24,9 @@
24#include <linux/fs.h> 24#include <linux/fs.h>
25#include <linux/syscalls.h> 25#include <linux/syscalls.h>
26#include <linux/ctype.h> 26#include <linux/ctype.h>
27#include <linux/lmb.h>
27 28
28#include <asm/lmb.h> 29#include <asm/prom.h>
29 30
30#include "platform.h" 31#include "platform.h"
31 32
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c
index 5c2cbb08eb52..a413abbd4123 100644
--- a/arch/powerpc/platforms/ps3/setup.c
+++ b/arch/powerpc/platforms/ps3/setup.c
@@ -95,6 +95,14 @@ static void ps3_power_off(void)
95 ps3_sys_manager_power_off(); /* never returns */ 95 ps3_sys_manager_power_off(); /* never returns */
96} 96}
97 97
98static void ps3_halt(void)
99{
100 DBG("%s:%d\n", __func__, __LINE__);
101
102 smp_send_stop();
103 ps3_sys_manager_halt(); /* never returns */
104}
105
98static void ps3_panic(char *str) 106static void ps3_panic(char *str)
99{ 107{
100 DBG("%s:%d %s\n", __func__, __LINE__, str); 108 DBG("%s:%d %s\n", __func__, __LINE__, str);
@@ -105,7 +113,8 @@ static void ps3_panic(char *str)
105 printk(" Please press POWER button.\n"); 113 printk(" Please press POWER button.\n");
106 printk("\n"); 114 printk("\n");
107 115
108 while(1); 116 while(1)
117 lv1_pause(1);
109} 118}
110 119
111#if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE) || \ 120#if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE) || \
@@ -117,7 +126,7 @@ static void __init prealloc(struct ps3_prealloc *p)
117 126
118 p->address = __alloc_bootmem(p->size, p->align, __pa(MAX_DMA_ADDRESS)); 127 p->address = __alloc_bootmem(p->size, p->align, __pa(MAX_DMA_ADDRESS));
119 if (!p->address) { 128 if (!p->address) {
120 printk(KERN_ERR "%s: Cannot allocate %s\n", __FUNCTION__, 129 printk(KERN_ERR "%s: Cannot allocate %s\n", __func__,
121 p->name); 130 p->name);
122 return; 131 return;
123 } 132 }
@@ -266,6 +275,7 @@ define_machine(ps3) {
266 .progress = ps3_progress, 275 .progress = ps3_progress,
267 .restart = ps3_restart, 276 .restart = ps3_restart,
268 .power_off = ps3_power_off, 277 .power_off = ps3_power_off,
278 .halt = ps3_halt,
269#if defined(CONFIG_KEXEC) 279#if defined(CONFIG_KEXEC)
270 .kexec_cpu_down = ps3_kexec_cpu_down, 280 .kexec_cpu_down = ps3_kexec_cpu_down,
271 .machine_kexec = default_machine_kexec, 281 .machine_kexec = default_machine_kexec,
diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c
index 5ad41189b494..d135cef9ed6a 100644
--- a/arch/powerpc/platforms/ps3/spu.c
+++ b/arch/powerpc/platforms/ps3/spu.c
@@ -27,6 +27,7 @@
27#include <asm/spu.h> 27#include <asm/spu.h>
28#include <asm/spu_priv1.h> 28#include <asm/spu_priv1.h>
29#include <asm/lv1call.h> 29#include <asm/lv1call.h>
30#include <asm/ps3.h>
30 31
31#include "../cell/spufs/spufs.h" 32#include "../cell/spufs/spufs.h"
32#include "platform.h" 33#include "platform.h"
@@ -140,6 +141,12 @@ static void _dump_areas(unsigned int spe_id, unsigned long priv2,
140 pr_debug("%s:%d: shadow: %lxh\n", func, line, shadow); 141 pr_debug("%s:%d: shadow: %lxh\n", func, line, shadow);
141} 142}
142 143
144inline u64 ps3_get_spe_id(void *arg)
145{
146 return spu_pdata(arg)->spe_id;
147}
148EXPORT_SYMBOL_GPL(ps3_get_spe_id);
149
143static unsigned long get_vas_id(void) 150static unsigned long get_vas_id(void)
144{ 151{
145 unsigned long id; 152 unsigned long id;
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile
index 992ba6753cf2..bdae04bb7a01 100644
--- a/arch/powerpc/platforms/pseries/Makefile
+++ b/arch/powerpc/platforms/pseries/Makefile
@@ -18,3 +18,4 @@ obj-$(CONFIG_HOTPLUG_CPU) += hotplug-cpu.o
18obj-$(CONFIG_HVC_CONSOLE) += hvconsole.o 18obj-$(CONFIG_HVC_CONSOLE) += hvconsole.o
19obj-$(CONFIG_HVCS) += hvcserver.o 19obj-$(CONFIG_HVCS) += hvcserver.o
20obj-$(CONFIG_HCALL_STATS) += hvCall_inst.o 20obj-$(CONFIG_HCALL_STATS) += hvCall_inst.o
21obj-$(CONFIG_PHYP_DUMP) += phyp_dump.o
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 9eb539ee5f9a..550b2f7d2cc1 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -945,7 +945,6 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
945 unsigned int rets[3]; 945 unsigned int rets[3];
946 struct eeh_early_enable_info *info = data; 946 struct eeh_early_enable_info *info = data;
947 int ret; 947 int ret;
948 const char *status = of_get_property(dn, "status", NULL);
949 const u32 *class_code = of_get_property(dn, "class-code", NULL); 948 const u32 *class_code = of_get_property(dn, "class-code", NULL);
950 const u32 *vendor_id = of_get_property(dn, "vendor-id", NULL); 949 const u32 *vendor_id = of_get_property(dn, "vendor-id", NULL);
951 const u32 *device_id = of_get_property(dn, "device-id", NULL); 950 const u32 *device_id = of_get_property(dn, "device-id", NULL);
@@ -959,8 +958,8 @@ static void *early_enable_eeh(struct device_node *dn, void *data)
959 pdn->eeh_freeze_count = 0; 958 pdn->eeh_freeze_count = 0;
960 pdn->eeh_false_positives = 0; 959 pdn->eeh_false_positives = 0;
961 960
962 if (status && strncmp(status, "ok", 2) != 0) 961 if (!of_device_is_available(dn))
963 return NULL; /* ignore devices with bad status */ 962 return NULL;
964 963
965 /* Ignore bad nodes. */ 964 /* Ignore bad nodes. */
966 if (!class_code || !vendor_id || !device_id) 965 if (!class_code || !vendor_id || !device_id)
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 9a455d46379d..9235c469449e 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -40,6 +40,7 @@
40#include <asm/smp.h> 40#include <asm/smp.h>
41 41
42#include "plpar_wrappers.h" 42#include "plpar_wrappers.h"
43#include "pseries.h"
43 44
44#ifdef DEBUG_LOW 45#ifdef DEBUG_LOW
45#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0) 46#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0)
@@ -203,7 +204,6 @@ void __init find_udbg_vterm(void)
203 struct device_node *stdout_node; 204 struct device_node *stdout_node;
204 const u32 *termno; 205 const u32 *termno;
205 const char *name; 206 const char *name;
206 int add_console;
207 207
208 /* find the boot console from /chosen/stdout */ 208 /* find the boot console from /chosen/stdout */
209 if (!of_chosen) 209 if (!of_chosen)
@@ -219,8 +219,6 @@ void __init find_udbg_vterm(void)
219 printk(KERN_WARNING "stdout node missing 'name' property!\n"); 219 printk(KERN_WARNING "stdout node missing 'name' property!\n");
220 goto out; 220 goto out;
221 } 221 }
222 /* The user has requested a console so this is already set up. */
223 add_console = !strstr(cmd_line, "console=");
224 222
225 /* Check if it's a virtual terminal */ 223 /* Check if it's a virtual terminal */
226 if (strncmp(name, "vty", 3) != 0) 224 if (strncmp(name, "vty", 3) != 0)
@@ -234,15 +232,13 @@ void __init find_udbg_vterm(void)
234 udbg_putc = udbg_putcLP; 232 udbg_putc = udbg_putcLP;
235 udbg_getc = udbg_getcLP; 233 udbg_getc = udbg_getcLP;
236 udbg_getc_poll = udbg_getc_pollLP; 234 udbg_getc_poll = udbg_getc_pollLP;
237 if (add_console) 235 add_preferred_console("hvc", termno[0] & 0xff, NULL);
238 add_preferred_console("hvc", termno[0] & 0xff, NULL);
239 } else if (of_device_is_compatible(stdout_node, "hvterm-protocol")) { 236 } else if (of_device_is_compatible(stdout_node, "hvterm-protocol")) {
240 vtermno = termno[0]; 237 vtermno = termno[0];
241 udbg_putc = udbg_hvsi_putc; 238 udbg_putc = udbg_hvsi_putc;
242 udbg_getc = udbg_hvsi_getc; 239 udbg_getc = udbg_hvsi_getc;
243 udbg_getc_poll = udbg_hvsi_getc_poll; 240 udbg_getc_poll = udbg_hvsi_getc_poll;
244 if (add_console) 241 add_preferred_console("hvsi", termno[0] & 0xff, NULL);
245 add_preferred_console("hvsi", termno[0] & 0xff, NULL);
246 } 242 }
247out: 243out:
248 of_node_put(stdout_node); 244 of_node_put(stdout_node);
@@ -520,6 +516,20 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
520 BUG_ON(lpar_rc != H_SUCCESS); 516 BUG_ON(lpar_rc != H_SUCCESS);
521} 517}
522 518
519static void pSeries_lpar_hpte_removebolted(unsigned long ea,
520 int psize, int ssize)
521{
522 unsigned long slot, vsid, va;
523
524 vsid = get_kernel_vsid(ea, ssize);
525 va = hpt_va(ea, vsid, ssize);
526
527 slot = pSeries_lpar_hpte_find(va, psize, ssize);
528 BUG_ON(slot == -1);
529
530 pSeries_lpar_hpte_invalidate(slot, va, psize, ssize, 0);
531}
532
523/* Flag bits for H_BULK_REMOVE */ 533/* Flag bits for H_BULK_REMOVE */
524#define HBR_REQUEST 0x4000000000000000UL 534#define HBR_REQUEST 0x4000000000000000UL
525#define HBR_RESPONSE 0x8000000000000000UL 535#define HBR_RESPONSE 0x8000000000000000UL
@@ -597,6 +607,7 @@ void __init hpte_init_lpar(void)
597 ppc_md.hpte_updateboltedpp = pSeries_lpar_hpte_updateboltedpp; 607 ppc_md.hpte_updateboltedpp = pSeries_lpar_hpte_updateboltedpp;
598 ppc_md.hpte_insert = pSeries_lpar_hpte_insert; 608 ppc_md.hpte_insert = pSeries_lpar_hpte_insert;
599 ppc_md.hpte_remove = pSeries_lpar_hpte_remove; 609 ppc_md.hpte_remove = pSeries_lpar_hpte_remove;
610 ppc_md.hpte_removebolted = pSeries_lpar_hpte_removebolted;
600 ppc_md.flush_hash_range = pSeries_lpar_flush_hash_range; 611 ppc_md.flush_hash_range = pSeries_lpar_flush_hash_range;
601 ppc_md.hpte_clear_all = pSeries_lpar_hptab_clear; 612 ppc_md.hpte_clear_all = pSeries_lpar_hptab_clear;
602} 613}
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c
index 5a5a19e40bb4..0d7229cde0e9 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -123,7 +123,7 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
123 /* Add to children of PCI bridge dev->bus */ 123 /* Add to children of PCI bridge dev->bus */
124 child_bus = pci_add_new_bus(dev->bus, dev, sec_busno); 124 child_bus = pci_add_new_bus(dev->bus, dev, sec_busno);
125 if (!child_bus) { 125 if (!child_bus) {
126 printk (KERN_ERR "%s: could not add second bus\n", __FUNCTION__); 126 printk (KERN_ERR "%s: could not add second bus\n", __func__);
127 return -EIO; 127 return -EIO;
128 } 128 }
129 sprintf(child_bus->name, "PCI Bus #%02x", child_bus->number); 129 sprintf(child_bus->name, "PCI Bus #%02x", child_bus->number);
diff --git a/arch/powerpc/platforms/pseries/phyp_dump.c b/arch/powerpc/platforms/pseries/phyp_dump.c
new file mode 100644
index 000000000000..edbc012c2ebc
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/phyp_dump.c
@@ -0,0 +1,507 @@
1/*
2 * Hypervisor-assisted dump
3 *
4 * Linas Vepstas, Manish Ahuja 2008
5 * Copyright 2008 IBM Corp.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 *
12 */
13
14#include <linux/init.h>
15#include <linux/kobject.h>
16#include <linux/mm.h>
17#include <linux/of.h>
18#include <linux/pfn.h>
19#include <linux/swap.h>
20#include <linux/sysfs.h>
21
22#include <asm/page.h>
23#include <asm/phyp_dump.h>
24#include <asm/machdep.h>
25#include <asm/prom.h>
26#include <asm/rtas.h>
27
28/* Variables, used to communicate data between early boot and late boot */
29static struct phyp_dump phyp_dump_vars;
30struct phyp_dump *phyp_dump_info = &phyp_dump_vars;
31
32static int ibm_configure_kernel_dump;
33/* ------------------------------------------------- */
34/* RTAS interfaces to declare the dump regions */
35
36struct dump_section {
37 u32 dump_flags;
38 u16 source_type;
39 u16 error_flags;
40 u64 source_address;
41 u64 source_length;
42 u64 length_copied;
43 u64 destination_address;
44};
45
46struct phyp_dump_header {
47 u32 version;
48 u16 num_of_sections;
49 u16 status;
50
51 u32 first_offset_section;
52 u32 dump_disk_section;
53 u64 block_num_dd;
54 u64 num_of_blocks_dd;
55 u32 offset_dd;
56 u32 maxtime_to_auto;
57 /* No dump disk path string used */
58
59 struct dump_section cpu_data;
60 struct dump_section hpte_data;
61 struct dump_section kernel_data;
62};
63
64/* The dump header *must be* in low memory, so .bss it */
65static struct phyp_dump_header phdr;
66
67#define NUM_DUMP_SECTIONS 3
68#define DUMP_HEADER_VERSION 0x1
69#define DUMP_REQUEST_FLAG 0x1
70#define DUMP_SOURCE_CPU 0x0001
71#define DUMP_SOURCE_HPTE 0x0002
72#define DUMP_SOURCE_RMO 0x0011
73#define DUMP_ERROR_FLAG 0x2000
74#define DUMP_TRIGGERED 0x4000
75#define DUMP_PERFORMED 0x8000
76
77
78/**
79 * init_dump_header() - initialize the header declaring a dump
80 * Returns: length of dump save area.
81 *
82 * When the hypervisor saves crashed state, it needs to put
83 * it somewhere. The dump header tells the hypervisor where
84 * the data can be saved.
85 */
86static unsigned long init_dump_header(struct phyp_dump_header *ph)
87{
88 unsigned long addr_offset = 0;
89
90 /* Set up the dump header */
91 ph->version = DUMP_HEADER_VERSION;
92 ph->num_of_sections = NUM_DUMP_SECTIONS;
93 ph->status = 0;
94
95 ph->first_offset_section =
96 (u32)offsetof(struct phyp_dump_header, cpu_data);
97 ph->dump_disk_section = 0;
98 ph->block_num_dd = 0;
99 ph->num_of_blocks_dd = 0;
100 ph->offset_dd = 0;
101
102 ph->maxtime_to_auto = 0; /* disabled */
103
104 /* The first two sections are mandatory */
105 ph->cpu_data.dump_flags = DUMP_REQUEST_FLAG;
106 ph->cpu_data.source_type = DUMP_SOURCE_CPU;
107 ph->cpu_data.source_address = 0;
108 ph->cpu_data.source_length = phyp_dump_info->cpu_state_size;
109 ph->cpu_data.destination_address = addr_offset;
110 addr_offset += phyp_dump_info->cpu_state_size;
111
112 ph->hpte_data.dump_flags = DUMP_REQUEST_FLAG;
113 ph->hpte_data.source_type = DUMP_SOURCE_HPTE;
114 ph->hpte_data.source_address = 0;
115 ph->hpte_data.source_length = phyp_dump_info->hpte_region_size;
116 ph->hpte_data.destination_address = addr_offset;
117 addr_offset += phyp_dump_info->hpte_region_size;
118
119 /* This section describes the low kernel region */
120 ph->kernel_data.dump_flags = DUMP_REQUEST_FLAG;
121 ph->kernel_data.source_type = DUMP_SOURCE_RMO;
122 ph->kernel_data.source_address = PHYP_DUMP_RMR_START;
123 ph->kernel_data.source_length = PHYP_DUMP_RMR_END;
124 ph->kernel_data.destination_address = addr_offset;
125 addr_offset += ph->kernel_data.source_length;
126
127 return addr_offset;
128}
129
130static void print_dump_header(const struct phyp_dump_header *ph)
131{
132#ifdef DEBUG
133 printk(KERN_INFO "dump header:\n");
134 /* setup some ph->sections required */
135 printk(KERN_INFO "version = %d\n", ph->version);
136 printk(KERN_INFO "Sections = %d\n", ph->num_of_sections);
137 printk(KERN_INFO "Status = 0x%x\n", ph->status);
138
139 /* No ph->disk, so all should be set to 0 */
140 printk(KERN_INFO "Offset to first section 0x%x\n",
141 ph->first_offset_section);
142 printk(KERN_INFO "dump disk sections should be zero\n");
143 printk(KERN_INFO "dump disk section = %d\n", ph->dump_disk_section);
144 printk(KERN_INFO "block num = %ld\n", ph->block_num_dd);
145 printk(KERN_INFO "number of blocks = %ld\n", ph->num_of_blocks_dd);
146 printk(KERN_INFO "dump disk offset = %d\n", ph->offset_dd);
147 printk(KERN_INFO "Max auto time= %d\n", ph->maxtime_to_auto);
148
149 /*set cpu state and hpte states as well scratch pad area */
150 printk(KERN_INFO " CPU AREA \n");
151 printk(KERN_INFO "cpu dump_flags =%d\n", ph->cpu_data.dump_flags);
152 printk(KERN_INFO "cpu source_type =%d\n", ph->cpu_data.source_type);
153 printk(KERN_INFO "cpu error_flags =%d\n", ph->cpu_data.error_flags);
154 printk(KERN_INFO "cpu source_address =%lx\n",
155 ph->cpu_data.source_address);
156 printk(KERN_INFO "cpu source_length =%lx\n",
157 ph->cpu_data.source_length);
158 printk(KERN_INFO "cpu length_copied =%lx\n",
159 ph->cpu_data.length_copied);
160
161 printk(KERN_INFO " HPTE AREA \n");
162 printk(KERN_INFO "HPTE dump_flags =%d\n", ph->hpte_data.dump_flags);
163 printk(KERN_INFO "HPTE source_type =%d\n", ph->hpte_data.source_type);
164 printk(KERN_INFO "HPTE error_flags =%d\n", ph->hpte_data.error_flags);
165 printk(KERN_INFO "HPTE source_address =%lx\n",
166 ph->hpte_data.source_address);
167 printk(KERN_INFO "HPTE source_length =%lx\n",
168 ph->hpte_data.source_length);
169 printk(KERN_INFO "HPTE length_copied =%lx\n",
170 ph->hpte_data.length_copied);
171
172 printk(KERN_INFO " SRSD AREA \n");
173 printk(KERN_INFO "SRSD dump_flags =%d\n", ph->kernel_data.dump_flags);
174 printk(KERN_INFO "SRSD source_type =%d\n", ph->kernel_data.source_type);
175 printk(KERN_INFO "SRSD error_flags =%d\n", ph->kernel_data.error_flags);
176 printk(KERN_INFO "SRSD source_address =%lx\n",
177 ph->kernel_data.source_address);
178 printk(KERN_INFO "SRSD source_length =%lx\n",
179 ph->kernel_data.source_length);
180 printk(KERN_INFO "SRSD length_copied =%lx\n",
181 ph->kernel_data.length_copied);
182#endif
183}
184
185static ssize_t show_phyp_dump_active(struct kobject *kobj,
186 struct kobj_attribute *attr, char *buf)
187{
188
189 /* create filesystem entry so kdump is phyp-dump aware */
190 return sprintf(buf, "%lx\n", phyp_dump_info->phyp_dump_at_boot);
191}
192
193static struct kobj_attribute pdl = __ATTR(phyp_dump_active, 0600,
194 show_phyp_dump_active,
195 NULL);
196
197static void register_dump_area(struct phyp_dump_header *ph, unsigned long addr)
198{
199 int rc;
200
201 /* Add addr value if not initialized before */
202 if (ph->cpu_data.destination_address == 0) {
203 ph->cpu_data.destination_address += addr;
204 ph->hpte_data.destination_address += addr;
205 ph->kernel_data.destination_address += addr;
206 }
207
208 /* ToDo Invalidate kdump and free memory range. */
209
210 do {
211 rc = rtas_call(ibm_configure_kernel_dump, 3, 1, NULL,
212 1, ph, sizeof(struct phyp_dump_header));
213 } while (rtas_busy_delay(rc));
214
215 if (rc) {
216 printk(KERN_ERR "phyp-dump: unexpected error (%d) on "
217 "register\n", rc);
218 print_dump_header(ph);
219 return;
220 }
221
222 rc = sysfs_create_file(kernel_kobj, &pdl.attr);
223 if (rc)
224 printk(KERN_ERR "phyp-dump: unable to create sysfs"
225 " file (%d)\n", rc);
226}
227
228static
229void invalidate_last_dump(struct phyp_dump_header *ph, unsigned long addr)
230{
231 int rc;
232
233 /* Add addr value if not initialized before */
234 if (ph->cpu_data.destination_address == 0) {
235 ph->cpu_data.destination_address += addr;
236 ph->hpte_data.destination_address += addr;
237 ph->kernel_data.destination_address += addr;
238 }
239
240 do {
241 rc = rtas_call(ibm_configure_kernel_dump, 3, 1, NULL,
242 2, ph, sizeof(struct phyp_dump_header));
243 } while (rtas_busy_delay(rc));
244
245 if (rc) {
246 printk(KERN_ERR "phyp-dump: unexpected error (%d) "
247 "on invalidate\n", rc);
248 print_dump_header(ph);
249 }
250}
251
252/* ------------------------------------------------- */
253/**
254 * release_memory_range -- release memory previously lmb_reserved
255 * @start_pfn: starting physical frame number
256 * @nr_pages: number of pages to free.
257 *
258 * This routine will release memory that had been previously
259 * lmb_reserved in early boot. The released memory becomes
260 * available for genreal use.
261 */
262static void release_memory_range(unsigned long start_pfn,
263 unsigned long nr_pages)
264{
265 struct page *rpage;
266 unsigned long end_pfn;
267 long i;
268
269 end_pfn = start_pfn + nr_pages;
270
271 for (i = start_pfn; i <= end_pfn; i++) {
272 rpage = pfn_to_page(i);
273 if (PageReserved(rpage)) {
274 ClearPageReserved(rpage);
275 init_page_count(rpage);
276 __free_page(rpage);
277 totalram_pages++;
278 }
279 }
280}
281
282/**
283 * track_freed_range -- Counts the range being freed.
284 * Once the counter goes to zero, it re-registers dump for
285 * future use.
286 */
287static void
288track_freed_range(unsigned long addr, unsigned long length)
289{
290 static unsigned long scratch_area_size, reserved_area_size;
291
292 if (addr < phyp_dump_info->init_reserve_start)
293 return;
294
295 if ((addr >= phyp_dump_info->init_reserve_start) &&
296 (addr <= phyp_dump_info->init_reserve_start +
297 phyp_dump_info->init_reserve_size))
298 reserved_area_size += length;
299
300 if ((addr >= phyp_dump_info->reserved_scratch_addr) &&
301 (addr <= phyp_dump_info->reserved_scratch_addr +
302 phyp_dump_info->reserved_scratch_size))
303 scratch_area_size += length;
304
305 if ((reserved_area_size == phyp_dump_info->init_reserve_size) &&
306 (scratch_area_size == phyp_dump_info->reserved_scratch_size)) {
307
308 invalidate_last_dump(&phdr,
309 phyp_dump_info->reserved_scratch_addr);
310 register_dump_area(&phdr,
311 phyp_dump_info->reserved_scratch_addr);
312 }
313}
314
315/* ------------------------------------------------- */
316/**
317 * sysfs_release_region -- sysfs interface to release memory range.
318 *
319 * Usage:
320 * "echo <start addr> <length> > /sys/kernel/release_region"
321 *
322 * Example:
323 * "echo 0x40000000 0x10000000 > /sys/kernel/release_region"
324 *
325 * will release 256MB starting at 1GB.
326 */
327static ssize_t store_release_region(struct kobject *kobj,
328 struct kobj_attribute *attr,
329 const char *buf, size_t count)
330{
331 unsigned long start_addr, length, end_addr;
332 unsigned long start_pfn, nr_pages;
333 ssize_t ret;
334
335 ret = sscanf(buf, "%lx %lx", &start_addr, &length);
336 if (ret != 2)
337 return -EINVAL;
338
339 track_freed_range(start_addr, length);
340
341 /* Range-check - don't free any reserved memory that
342 * wasn't reserved for phyp-dump */
343 if (start_addr < phyp_dump_info->init_reserve_start)
344 start_addr = phyp_dump_info->init_reserve_start;
345
346 end_addr = phyp_dump_info->init_reserve_start +
347 phyp_dump_info->init_reserve_size;
348 if (start_addr+length > end_addr)
349 length = end_addr - start_addr;
350
351 /* Release the region of memory assed in by user */
352 start_pfn = PFN_DOWN(start_addr);
353 nr_pages = PFN_DOWN(length);
354 release_memory_range(start_pfn, nr_pages);
355
356 return count;
357}
358
359static ssize_t show_release_region(struct kobject *kobj,
360 struct kobj_attribute *attr, char *buf)
361{
362 u64 second_addr_range;
363
364 /* total reserved size - start of scratch area */
365 second_addr_range = phyp_dump_info->init_reserve_size -
366 phyp_dump_info->reserved_scratch_size;
367 return sprintf(buf, "CPU:0x%lx-0x%lx: HPTE:0x%lx-0x%lx:"
368 " DUMP:0x%lx-0x%lx, 0x%lx-0x%lx:\n",
369 phdr.cpu_data.destination_address,
370 phdr.cpu_data.length_copied,
371 phdr.hpte_data.destination_address,
372 phdr.hpte_data.length_copied,
373 phdr.kernel_data.destination_address,
374 phdr.kernel_data.length_copied,
375 phyp_dump_info->init_reserve_start,
376 second_addr_range);
377}
378
379static struct kobj_attribute rr = __ATTR(release_region, 0600,
380 show_release_region,
381 store_release_region);
382
383static int __init phyp_dump_setup(void)
384{
385 struct device_node *rtas;
386 const struct phyp_dump_header *dump_header = NULL;
387 unsigned long dump_area_start;
388 unsigned long dump_area_length;
389 int header_len = 0;
390 int rc;
391
392 /* If no memory was reserved in early boot, there is nothing to do */
393 if (phyp_dump_info->init_reserve_size == 0)
394 return 0;
395
396 /* Return if phyp dump not supported */
397 if (!phyp_dump_info->phyp_dump_configured)
398 return -ENOSYS;
399
400 /* Is there dump data waiting for us? If there isn't,
401 * then register a new dump area, and release all of
402 * the rest of the reserved ram.
403 *
404 * The /rtas/ibm,kernel-dump rtas node is present only
405 * if there is dump data waiting for us.
406 */
407 rtas = of_find_node_by_path("/rtas");
408 if (rtas) {
409 dump_header = of_get_property(rtas, "ibm,kernel-dump",
410 &header_len);
411 of_node_put(rtas);
412 }
413
414 print_dump_header(dump_header);
415 dump_area_length = init_dump_header(&phdr);
416 /* align down */
417 dump_area_start = phyp_dump_info->init_reserve_start & PAGE_MASK;
418
419 if (dump_header == NULL) {
420 register_dump_area(&phdr, dump_area_start);
421 return 0;
422 }
423
424 /* re-register the dump area, if old dump was invalid */
425 if ((dump_header) && (dump_header->status & DUMP_ERROR_FLAG)) {
426 invalidate_last_dump(&phdr, dump_area_start);
427 register_dump_area(&phdr, dump_area_start);
428 return 0;
429 }
430
431 if (dump_header) {
432 phyp_dump_info->reserved_scratch_addr =
433 dump_header->cpu_data.destination_address;
434 phyp_dump_info->reserved_scratch_size =
435 dump_header->cpu_data.source_length +
436 dump_header->hpte_data.source_length +
437 dump_header->kernel_data.source_length;
438 }
439
440 /* Should we create a dump_subsys, analogous to s390/ipl.c ? */
441 rc = sysfs_create_file(kernel_kobj, &rr.attr);
442 if (rc)
443 printk(KERN_ERR "phyp-dump: unable to create sysfs file (%d)\n",
444 rc);
445
446 /* ToDo: re-register the dump area, for next time. */
447 return 0;
448}
449machine_subsys_initcall(pseries, phyp_dump_setup);
450
451int __init early_init_dt_scan_phyp_dump(unsigned long node,
452 const char *uname, int depth, void *data)
453{
454 const unsigned int *sizes;
455
456 phyp_dump_info->phyp_dump_configured = 0;
457 phyp_dump_info->phyp_dump_is_active = 0;
458
459 if (depth != 1 || strcmp(uname, "rtas") != 0)
460 return 0;
461
462 if (of_get_flat_dt_prop(node, "ibm,configure-kernel-dump", NULL))
463 phyp_dump_info->phyp_dump_configured++;
464
465 if (of_get_flat_dt_prop(node, "ibm,dump-kernel", NULL))
466 phyp_dump_info->phyp_dump_is_active++;
467
468 sizes = of_get_flat_dt_prop(node, "ibm,configure-kernel-dump-sizes",
469 NULL);
470 if (!sizes)
471 return 0;
472
473 if (sizes[0] == 1)
474 phyp_dump_info->cpu_state_size = *((unsigned long *)&sizes[1]);
475
476 if (sizes[3] == 2)
477 phyp_dump_info->hpte_region_size =
478 *((unsigned long *)&sizes[4]);
479 return 1;
480}
481
482/* Look for phyp_dump= cmdline option */
483static int __init early_phyp_dump_enabled(char *p)
484{
485 phyp_dump_info->phyp_dump_at_boot = 1;
486
487 if (!p)
488 return 0;
489
490 if (strncmp(p, "1", 1) == 0)
491 phyp_dump_info->phyp_dump_at_boot = 1;
492 else if (strncmp(p, "0", 1) == 0)
493 phyp_dump_info->phyp_dump_at_boot = 0;
494
495 return 0;
496}
497early_param("phyp_dump", early_phyp_dump_enabled);
498
499/* Look for phyp_dump_reserve_size= cmdline option */
500static int __init early_phyp_dump_reserve_size(char *p)
501{
502 if (p)
503 phyp_dump_info->reserve_bootvar = memparse(p, &p);
504
505 return 0;
506}
507early_param("phyp_dump_reserve_size", early_phyp_dump_reserve_size);
diff --git a/arch/powerpc/platforms/pseries/pseries.h b/arch/powerpc/platforms/pseries/pseries.h
index 61136d019554..9e17c0d2a0c8 100644
--- a/arch/powerpc/platforms/pseries/pseries.h
+++ b/arch/powerpc/platforms/pseries/pseries.h
@@ -38,4 +38,6 @@ extern void pSeries_final_fixup(void);
38/* Poweron flag used for enabling auto ups restart */ 38/* Poweron flag used for enabling auto ups restart */
39extern unsigned long rtas_poweron_auto; 39extern unsigned long rtas_poweron_auto;
40 40
41extern void find_udbg_vterm(void);
42
41#endif /* _PSERIES_PSERIES_H */ 43#endif /* _PSERIES_PSERIES_H */
diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c
index 2800fced8c7c..ac75c10de278 100644
--- a/arch/powerpc/platforms/pseries/reconfig.c
+++ b/arch/powerpc/platforms/pseries/reconfig.c
@@ -222,14 +222,14 @@ static char * parse_next_property(char *buf, char *end, char **name, int *length
222 tmp = strchr(buf, ' '); 222 tmp = strchr(buf, ' ');
223 if (!tmp) { 223 if (!tmp) {
224 printk(KERN_ERR "property parse failed in %s at line %d\n", 224 printk(KERN_ERR "property parse failed in %s at line %d\n",
225 __FUNCTION__, __LINE__); 225 __func__, __LINE__);
226 return NULL; 226 return NULL;
227 } 227 }
228 *tmp = '\0'; 228 *tmp = '\0';
229 229
230 if (++tmp >= end) { 230 if (++tmp >= end) {
231 printk(KERN_ERR "property parse failed in %s at line %d\n", 231 printk(KERN_ERR "property parse failed in %s at line %d\n",
232 __FUNCTION__, __LINE__); 232 __func__, __LINE__);
233 return NULL; 233 return NULL;
234 } 234 }
235 235
@@ -238,12 +238,12 @@ static char * parse_next_property(char *buf, char *end, char **name, int *length
238 *length = simple_strtoul(tmp, &tmp, 10); 238 *length = simple_strtoul(tmp, &tmp, 10);
239 if (*length == -1) { 239 if (*length == -1) {
240 printk(KERN_ERR "property parse failed in %s at line %d\n", 240 printk(KERN_ERR "property parse failed in %s at line %d\n",
241 __FUNCTION__, __LINE__); 241 __func__, __LINE__);
242 return NULL; 242 return NULL;
243 } 243 }
244 if (*tmp != ' ' || ++tmp >= end) { 244 if (*tmp != ' ' || ++tmp >= end) {
245 printk(KERN_ERR "property parse failed in %s at line %d\n", 245 printk(KERN_ERR "property parse failed in %s at line %d\n",
246 __FUNCTION__, __LINE__); 246 __func__, __LINE__);
247 return NULL; 247 return NULL;
248 } 248 }
249 249
@@ -252,12 +252,12 @@ static char * parse_next_property(char *buf, char *end, char **name, int *length
252 tmp += *length; 252 tmp += *length;
253 if (tmp > end) { 253 if (tmp > end) {
254 printk(KERN_ERR "property parse failed in %s at line %d\n", 254 printk(KERN_ERR "property parse failed in %s at line %d\n",
255 __FUNCTION__, __LINE__); 255 __func__, __LINE__);
256 return NULL; 256 return NULL;
257 } 257 }
258 else if (tmp < end && *tmp != ' ' && *tmp != '\0') { 258 else if (tmp < end && *tmp != ' ' && *tmp != '\0') {
259 printk(KERN_ERR "property parse failed in %s at line %d\n", 259 printk(KERN_ERR "property parse failed in %s at line %d\n",
260 __FUNCTION__, __LINE__); 260 __func__, __LINE__);
261 return NULL; 261 return NULL;
262 } 262 }
263 tmp++; 263 tmp++;
diff --git a/arch/powerpc/platforms/pseries/scanlog.c b/arch/powerpc/platforms/pseries/scanlog.c
index 8e1ef168e2dd..e5b0ea870164 100644
--- a/arch/powerpc/platforms/pseries/scanlog.c
+++ b/arch/powerpc/platforms/pseries/scanlog.c
@@ -195,31 +195,30 @@ const struct file_operations scanlog_fops = {
195static int __init scanlog_init(void) 195static int __init scanlog_init(void)
196{ 196{
197 struct proc_dir_entry *ent; 197 struct proc_dir_entry *ent;
198 void *data;
199 int err = -ENOMEM;
198 200
199 ibm_scan_log_dump = rtas_token("ibm,scan-log-dump"); 201 ibm_scan_log_dump = rtas_token("ibm,scan-log-dump");
200 if (ibm_scan_log_dump == RTAS_UNKNOWN_SERVICE) { 202 if (ibm_scan_log_dump == RTAS_UNKNOWN_SERVICE)
201 printk(KERN_ERR "scan-log-dump not implemented on this system\n"); 203 return -ENODEV;
202 return -EIO;
203 }
204 204
205 ent = create_proc_entry("ppc64/rtas/scan-log-dump", S_IRUSR, NULL); 205 /* Ideally we could allocate a buffer < 4G */
206 if (ent) { 206 data = kzalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL);
207 ent->proc_fops = &scanlog_fops; 207 if (!data)
208 /* Ideally we could allocate a buffer < 4G */ 208 goto err;
209 ent->data = kmalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL); 209
210 if (!ent->data) { 210 ent = proc_create("ppc64/rtas/scan-log-dump", S_IRUSR, NULL,
211 printk(KERN_ERR "Failed to allocate a buffer\n"); 211 &scanlog_fops);
212 remove_proc_entry("scan-log-dump", ent->parent); 212 if (!ent)
213 return -ENOMEM; 213 goto err;
214 } 214
215 ((unsigned int *)ent->data)[0] = 0; 215 ent->data = data;
216 } else {
217 printk(KERN_ERR "Failed to create ppc64/scan-log-dump proc entry\n");
218 return -EIO;
219 }
220 proc_ppc64_scan_log_dump = ent; 216 proc_ppc64_scan_log_dump = ent;
221 217
222 return 0; 218 return 0;
219err:
220 kfree(data);
221 return err;
223} 222}
224 223
225static void __exit scanlog_cleanup(void) 224static void __exit scanlog_cleanup(void)
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index fdb9b1c8f977..f66aa9c3b135 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -76,9 +76,6 @@
76#define DBG(fmt...) 76#define DBG(fmt...)
77#endif 77#endif
78 78
79/* move those away to a .h */
80extern void find_udbg_vterm(void);
81
82int fwnmi_active; /* TRUE if an FWNMI handler is present */ 79int fwnmi_active; /* TRUE if an FWNMI handler is present */
83 80
84static void pseries_shared_idle_sleep(void); 81static void pseries_shared_idle_sleep(void);
@@ -127,14 +124,60 @@ void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc)
127 desc->chip->eoi(irq); 124 desc->chip->eoi(irq);
128} 125}
129 126
130static void __init pseries_mpic_init_IRQ(void) 127static void __init pseries_setup_i8259_cascade(void)
131{ 128{
132 struct device_node *np, *old, *cascade = NULL; 129 struct device_node *np, *old, *found = NULL;
133 const unsigned int *addrp; 130 unsigned int cascade;
131 const u32 *addrp;
134 unsigned long intack = 0; 132 unsigned long intack = 0;
133 int naddr;
134
135 for_each_node_by_type(np, "interrupt-controller") {
136 if (of_device_is_compatible(np, "chrp,iic")) {
137 found = np;
138 break;
139 }
140 }
141
142 if (found == NULL) {
143 printk(KERN_DEBUG "pic: no ISA interrupt controller\n");
144 return;
145 }
146
147 cascade = irq_of_parse_and_map(found, 0);
148 if (cascade == NO_IRQ) {
149 printk(KERN_ERR "pic: failed to map cascade interrupt");
150 return;
151 }
152 pr_debug("pic: cascade mapped to irq %d\n", cascade);
153
154 for (old = of_node_get(found); old != NULL ; old = np) {
155 np = of_get_parent(old);
156 of_node_put(old);
157 if (np == NULL)
158 break;
159 if (strcmp(np->name, "pci") != 0)
160 continue;
161 addrp = of_get_property(np, "8259-interrupt-acknowledge", NULL);
162 if (addrp == NULL)
163 continue;
164 naddr = of_n_addr_cells(np);
165 intack = addrp[naddr-1];
166 if (naddr > 1)
167 intack |= ((unsigned long)addrp[naddr-2]) << 32;
168 }
169 if (intack)
170 printk(KERN_DEBUG "pic: PCI 8259 intack at 0x%016lx\n", intack);
171 i8259_init(found, intack);
172 of_node_put(found);
173 set_irq_chained_handler(cascade, pseries_8259_cascade);
174}
175
176static void __init pseries_mpic_init_IRQ(void)
177{
178 struct device_node *np;
135 const unsigned int *opprop; 179 const unsigned int *opprop;
136 unsigned long openpic_addr = 0; 180 unsigned long openpic_addr = 0;
137 unsigned int cascade_irq;
138 int naddr, n, i, opplen; 181 int naddr, n, i, opplen;
139 struct mpic *mpic; 182 struct mpic *mpic;
140 183
@@ -167,43 +210,13 @@ static void __init pseries_mpic_init_IRQ(void)
167 mpic_init(mpic); 210 mpic_init(mpic);
168 211
169 /* Look for cascade */ 212 /* Look for cascade */
170 for_each_node_by_type(np, "interrupt-controller") 213 pseries_setup_i8259_cascade();
171 if (of_device_is_compatible(np, "chrp,iic")) { 214}
172 cascade = np;
173 break;
174 }
175 if (cascade == NULL)
176 return;
177
178 cascade_irq = irq_of_parse_and_map(cascade, 0);
179 if (cascade_irq == NO_IRQ) {
180 printk(KERN_ERR "mpic: failed to map cascade interrupt");
181 return;
182 }
183 215
184 /* Check ACK type */ 216static void __init pseries_xics_init_IRQ(void)
185 for (old = of_node_get(cascade); old != NULL ; old = np) { 217{
186 np = of_get_parent(old); 218 xics_init_IRQ();
187 of_node_put(old); 219 pseries_setup_i8259_cascade();
188 if (np == NULL)
189 break;
190 if (strcmp(np->name, "pci") != 0)
191 continue;
192 addrp = of_get_property(np, "8259-interrupt-acknowledge",
193 NULL);
194 if (addrp == NULL)
195 continue;
196 naddr = of_n_addr_cells(np);
197 intack = addrp[naddr-1];
198 if (naddr > 1)
199 intack |= ((unsigned long)addrp[naddr-2]) << 32;
200 }
201 if (intack)
202 printk(KERN_DEBUG "mpic: PCI 8259 intack at 0x%016lx\n",
203 intack);
204 i8259_init(cascade, intack);
205 of_node_put(cascade);
206 set_irq_chained_handler(cascade_irq, pseries_8259_cascade);
207} 220}
208 221
209static void pseries_lpar_enable_pmcs(void) 222static void pseries_lpar_enable_pmcs(void)
@@ -235,7 +248,7 @@ static void __init pseries_discover_pic(void)
235 smp_init_pseries_mpic(); 248 smp_init_pseries_mpic();
236 return; 249 return;
237 } else if (strstr(typep, "ppc-xicp")) { 250 } else if (strstr(typep, "ppc-xicp")) {
238 ppc_md.init_IRQ = xics_init_IRQ; 251 ppc_md.init_IRQ = pseries_xics_init_IRQ;
239 setup_kexec_cpu_down_xics(); 252 setup_kexec_cpu_down_xics();
240 smp_init_pseries_xics(); 253 smp_init_pseries_xics();
241 return; 254 return;
@@ -393,6 +406,7 @@ static void pseries_dedicated_idle_sleep(void)
393{ 406{
394 unsigned int cpu = smp_processor_id(); 407 unsigned int cpu = smp_processor_id();
395 unsigned long start_snooze; 408 unsigned long start_snooze;
409 unsigned long in_purr, out_purr;
396 410
397 /* 411 /*
398 * Indicate to the HV that we are idle. Now would be 412 * Indicate to the HV that we are idle. Now would be
@@ -400,6 +414,7 @@ static void pseries_dedicated_idle_sleep(void)
400 */ 414 */
401 get_lppaca()->idle = 1; 415 get_lppaca()->idle = 1;
402 get_lppaca()->donate_dedicated_cpu = 1; 416 get_lppaca()->donate_dedicated_cpu = 1;
417 in_purr = mfspr(SPRN_PURR);
403 418
404 /* 419 /*
405 * We come in with interrupts disabled, and need_resched() 420 * We come in with interrupts disabled, and need_resched()
@@ -432,6 +447,8 @@ static void pseries_dedicated_idle_sleep(void)
432 447
433out: 448out:
434 HMT_medium(); 449 HMT_medium();
450 out_purr = mfspr(SPRN_PURR);
451 get_lppaca()->wait_state_cycles += out_purr - in_purr;
435 get_lppaca()->donate_dedicated_cpu = 0; 452 get_lppaca()->donate_dedicated_cpu = 0;
436 get_lppaca()->idle = 0; 453 get_lppaca()->idle = 0;
437} 454}
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index a977f200db89..43df53c30aa0 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -516,6 +516,8 @@ static struct irq_chip xics_pic_lpar = {
516 .set_affinity = xics_set_affinity 516 .set_affinity = xics_set_affinity
517}; 517};
518 518
519/* Points to the irq_chip we're actually using */
520static struct irq_chip *xics_irq_chip;
519 521
520static int xics_host_match(struct irq_host *h, struct device_node *node) 522static int xics_host_match(struct irq_host *h, struct device_node *node)
521{ 523{
@@ -526,23 +528,13 @@ static int xics_host_match(struct irq_host *h, struct device_node *node)
526 return !of_device_is_compatible(node, "chrp,iic"); 528 return !of_device_is_compatible(node, "chrp,iic");
527} 529}
528 530
529static int xics_host_map_direct(struct irq_host *h, unsigned int virq, 531static int xics_host_map(struct irq_host *h, unsigned int virq,
530 irq_hw_number_t hw) 532 irq_hw_number_t hw)
531{ 533{
532 pr_debug("xics: map_direct virq %d, hwirq 0x%lx\n", virq, hw); 534 pr_debug("xics: map virq %d, hwirq 0x%lx\n", virq, hw);
533 535
534 get_irq_desc(virq)->status |= IRQ_LEVEL; 536 get_irq_desc(virq)->status |= IRQ_LEVEL;
535 set_irq_chip_and_handler(virq, &xics_pic_direct, handle_fasteoi_irq); 537 set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq);
536 return 0;
537}
538
539static int xics_host_map_lpar(struct irq_host *h, unsigned int virq,
540 irq_hw_number_t hw)
541{
542 pr_debug("xics: map_direct virq %d, hwirq 0x%lx\n", virq, hw);
543
544 get_irq_desc(virq)->status |= IRQ_LEVEL;
545 set_irq_chip_and_handler(virq, &xics_pic_lpar, handle_fasteoi_irq);
546 return 0; 538 return 0;
547} 539}
548 540
@@ -561,27 +553,20 @@ static int xics_host_xlate(struct irq_host *h, struct device_node *ct,
561 return 0; 553 return 0;
562} 554}
563 555
564static struct irq_host_ops xics_host_direct_ops = { 556static struct irq_host_ops xics_host_ops = {
565 .match = xics_host_match, 557 .match = xics_host_match,
566 .map = xics_host_map_direct, 558 .map = xics_host_map,
567 .xlate = xics_host_xlate,
568};
569
570static struct irq_host_ops xics_host_lpar_ops = {
571 .match = xics_host_match,
572 .map = xics_host_map_lpar,
573 .xlate = xics_host_xlate, 559 .xlate = xics_host_xlate,
574}; 560};
575 561
576static void __init xics_init_host(void) 562static void __init xics_init_host(void)
577{ 563{
578 struct irq_host_ops *ops;
579
580 if (firmware_has_feature(FW_FEATURE_LPAR)) 564 if (firmware_has_feature(FW_FEATURE_LPAR))
581 ops = &xics_host_lpar_ops; 565 xics_irq_chip = &xics_pic_lpar;
582 else 566 else
583 ops = &xics_host_direct_ops; 567 xics_irq_chip = &xics_pic_direct;
584 xics_host = irq_alloc_host(NULL, IRQ_HOST_MAP_TREE, 0, ops, 568
569 xics_host = irq_alloc_host(NULL, IRQ_HOST_MAP_TREE, 0, &xics_host_ops,
585 XICS_IRQ_SPURIOUS); 570 XICS_IRQ_SPURIOUS);
586 BUG_ON(xics_host == NULL); 571 BUG_ON(xics_host == NULL);
587 irq_set_default_host(xics_host); 572 irq_set_default_host(xics_host);
@@ -655,52 +640,6 @@ static void __init xics_init_one_node(struct device_node *np,
655 } 640 }
656} 641}
657 642
658
659static void __init xics_setup_8259_cascade(void)
660{
661 struct device_node *np, *old, *found = NULL;
662 int cascade, naddr;
663 const u32 *addrp;
664 unsigned long intack = 0;
665
666 for_each_node_by_type(np, "interrupt-controller")
667 if (of_device_is_compatible(np, "chrp,iic")) {
668 found = np;
669 break;
670 }
671 if (found == NULL) {
672 printk(KERN_DEBUG "xics: no ISA interrupt controller\n");
673 return;
674 }
675 cascade = irq_of_parse_and_map(found, 0);
676 if (cascade == NO_IRQ) {
677 printk(KERN_ERR "xics: failed to map cascade interrupt");
678 return;
679 }
680 pr_debug("xics: cascade mapped to irq %d\n", cascade);
681
682 for (old = of_node_get(found); old != NULL ; old = np) {
683 np = of_get_parent(old);
684 of_node_put(old);
685 if (np == NULL)
686 break;
687 if (strcmp(np->name, "pci") != 0)
688 continue;
689 addrp = of_get_property(np, "8259-interrupt-acknowledge", NULL);
690 if (addrp == NULL)
691 continue;
692 naddr = of_n_addr_cells(np);
693 intack = addrp[naddr-1];
694 if (naddr > 1)
695 intack |= ((unsigned long)addrp[naddr-2]) << 32;
696 }
697 if (intack)
698 printk(KERN_DEBUG "xics: PCI 8259 intack at 0x%016lx\n", intack);
699 i8259_init(found, intack);
700 of_node_put(found);
701 set_irq_chained_handler(cascade, pseries_8259_cascade);
702}
703
704void __init xics_init_IRQ(void) 643void __init xics_init_IRQ(void)
705{ 644{
706 struct device_node *np; 645 struct device_node *np;
@@ -733,8 +672,6 @@ void __init xics_init_IRQ(void)
733 672
734 xics_setup_cpu(); 673 xics_setup_cpu();
735 674
736 xics_setup_8259_cascade();
737
738 ppc64_boot_msg(0x21, "XICS Done"); 675 ppc64_boot_msg(0x21, "XICS Done");
739} 676}
740 677
diff --git a/arch/powerpc/platforms/pseries/xics.h b/arch/powerpc/platforms/pseries/xics.h
index c26bcff47b6d..1c5321ae8f2f 100644
--- a/arch/powerpc/platforms/pseries/xics.h
+++ b/arch/powerpc/platforms/pseries/xics.h
@@ -28,7 +28,4 @@ struct xics_ipi_struct {
28 28
29extern struct xics_ipi_struct xics_ipi_message[NR_CPUS] __cacheline_aligned; 29extern struct xics_ipi_struct xics_ipi_message[NR_CPUS] __cacheline_aligned;
30 30
31struct irq_desc;
32extern void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc);
33
34#endif /* _POWERPC_KERNEL_XICS_H */ 31#endif /* _POWERPC_KERNEL_XICS_H */
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 15f3e8527d77..6d386d0071a0 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_U3_DART) += dart_iommu.o
12obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o 12obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
13obj-$(CONFIG_FSL_SOC) += fsl_soc.o 13obj-$(CONFIG_FSL_SOC) += fsl_soc.o
14obj-$(CONFIG_FSL_PCI) += fsl_pci.o 14obj-$(CONFIG_FSL_PCI) += fsl_pci.o
15obj-$(CONFIG_FSL_LBC) += fsl_lbc.o
15obj-$(CONFIG_RAPIDIO) += fsl_rio.o 16obj-$(CONFIG_RAPIDIO) += fsl_rio.o
16obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o 17obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o
17obj-$(CONFIG_QUICC_ENGINE) += qe_lib/ 18obj-$(CONFIG_QUICC_ENGINE) += qe_lib/
@@ -27,6 +28,7 @@ obj-$(CONFIG_PPC_INDIRECT_PCI) += indirect_pci.o
27obj-$(CONFIG_PPC_I8259) += i8259.o 28obj-$(CONFIG_PPC_I8259) += i8259.o
28obj-$(CONFIG_IPIC) += ipic.o 29obj-$(CONFIG_IPIC) += ipic.o
29obj-$(CONFIG_4xx) += uic.o 30obj-$(CONFIG_4xx) += uic.o
31obj-$(CONFIG_4xx_SOC) += ppc4xx_soc.o
30obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o 32obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o
31obj-$(CONFIG_OF_RTC) += of_rtc.o 33obj-$(CONFIG_OF_RTC) += of_rtc.o
32ifeq ($(CONFIG_PCI),y) 34ifeq ($(CONFIG_PCI),y)
diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
index df8bd2b64796..58292a086c16 100644
--- a/arch/powerpc/sysdev/cpm1.c
+++ b/arch/powerpc/sysdev/cpm1.c
@@ -44,9 +44,6 @@
44 44
45#define CPM_MAP_SIZE (0x4000) 45#define CPM_MAP_SIZE (0x4000)
46 46
47#ifndef CONFIG_PPC_CPM_NEW_BINDING
48static void m8xx_cpm_dpinit(void);
49#endif
50cpm8xx_t __iomem *cpmp; /* Pointer to comm processor space */ 47cpm8xx_t __iomem *cpmp; /* Pointer to comm processor space */
51immap_t __iomem *mpc8xx_immr; 48immap_t __iomem *mpc8xx_immr;
52static cpic8xx_t __iomem *cpic_reg; 49static cpic8xx_t __iomem *cpic_reg;
@@ -229,12 +226,7 @@ void __init cpm_reset(void)
229 out_be32(&siu_conf->sc_sdcr, 1); 226 out_be32(&siu_conf->sc_sdcr, 1);
230 immr_unmap(siu_conf); 227 immr_unmap(siu_conf);
231 228
232#ifdef CONFIG_PPC_CPM_NEW_BINDING
233 cpm_muram_init(); 229 cpm_muram_init();
234#else
235 /* Reclaim the DP memory for our use. */
236 m8xx_cpm_dpinit();
237#endif
238} 230}
239 231
240static DEFINE_SPINLOCK(cmd_lock); 232static DEFINE_SPINLOCK(cmd_lock);
@@ -257,7 +249,7 @@ int cpm_command(u32 command, u8 opcode)
257 if ((in_be16(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0) 249 if ((in_be16(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0)
258 goto out; 250 goto out;
259 251
260 printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__); 252 printk(KERN_ERR "%s(): Not able to issue CPM command\n", __func__);
261 ret = -EIO; 253 ret = -EIO;
262out: 254out:
263 spin_unlock_irqrestore(&cmd_lock, flags); 255 spin_unlock_irqrestore(&cmd_lock, flags);
@@ -293,110 +285,6 @@ cpm_setbrg(uint brg, uint rate)
293 CPM_BRG_EN | CPM_BRG_DIV16); 285 CPM_BRG_EN | CPM_BRG_DIV16);
294} 286}
295 287
296#ifndef CONFIG_PPC_CPM_NEW_BINDING
297/*
298 * dpalloc / dpfree bits.
299 */
300static spinlock_t cpm_dpmem_lock;
301/*
302 * 16 blocks should be enough to satisfy all requests
303 * until the memory subsystem goes up...
304 */
305static rh_block_t cpm_boot_dpmem_rh_block[16];
306static rh_info_t cpm_dpmem_info;
307
308#define CPM_DPMEM_ALIGNMENT 8
309static u8 __iomem *dpram_vbase;
310static phys_addr_t dpram_pbase;
311
312static void m8xx_cpm_dpinit(void)
313{
314 spin_lock_init(&cpm_dpmem_lock);
315
316 dpram_vbase = cpmp->cp_dpmem;
317 dpram_pbase = get_immrbase() + offsetof(immap_t, im_cpm.cp_dpmem);
318
319 /* Initialize the info header */
320 rh_init(&cpm_dpmem_info, CPM_DPMEM_ALIGNMENT,
321 sizeof(cpm_boot_dpmem_rh_block) /
322 sizeof(cpm_boot_dpmem_rh_block[0]),
323 cpm_boot_dpmem_rh_block);
324
325 /*
326 * Attach the usable dpmem area.
327 * XXX: This is actually crap. CPM_DATAONLY_BASE and
328 * CPM_DATAONLY_SIZE are a subset of the available dparm. It varies
329 * with the processor and the microcode patches applied / activated.
330 * But the following should be at least safe.
331 */
332 rh_attach_region(&cpm_dpmem_info, CPM_DATAONLY_BASE, CPM_DATAONLY_SIZE);
333}
334
335/*
336 * Allocate the requested size worth of DP memory.
337 * This function returns an offset into the DPRAM area.
338 * Use cpm_dpram_addr() to get the virtual address of the area.
339 */
340unsigned long cpm_dpalloc(uint size, uint align)
341{
342 unsigned long start;
343 unsigned long flags;
344
345 spin_lock_irqsave(&cpm_dpmem_lock, flags);
346 cpm_dpmem_info.alignment = align;
347 start = rh_alloc(&cpm_dpmem_info, size, "commproc");
348 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
349
350 return (uint)start;
351}
352EXPORT_SYMBOL(cpm_dpalloc);
353
354int cpm_dpfree(unsigned long offset)
355{
356 int ret;
357 unsigned long flags;
358
359 spin_lock_irqsave(&cpm_dpmem_lock, flags);
360 ret = rh_free(&cpm_dpmem_info, offset);
361 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
362
363 return ret;
364}
365EXPORT_SYMBOL(cpm_dpfree);
366
367unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align)
368{
369 unsigned long start;
370 unsigned long flags;
371
372 spin_lock_irqsave(&cpm_dpmem_lock, flags);
373 cpm_dpmem_info.alignment = align;
374 start = rh_alloc_fixed(&cpm_dpmem_info, offset, size, "commproc");
375 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
376
377 return start;
378}
379EXPORT_SYMBOL(cpm_dpalloc_fixed);
380
381void cpm_dpdump(void)
382{
383 rh_dump(&cpm_dpmem_info);
384}
385EXPORT_SYMBOL(cpm_dpdump);
386
387void *cpm_dpram_addr(unsigned long offset)
388{
389 return (void *)(dpram_vbase + offset);
390}
391EXPORT_SYMBOL(cpm_dpram_addr);
392
393uint cpm_dpram_phys(u8 *addr)
394{
395 return (dpram_pbase + (uint)(addr - dpram_vbase));
396}
397EXPORT_SYMBOL(cpm_dpram_phys);
398#endif /* !CONFIG_PPC_CPM_NEW_BINDING */
399
400struct cpm_ioport16 { 288struct cpm_ioport16 {
401 __be16 dir, par, odr_sor, dat, intr; 289 __be16 dir, par, odr_sor, dat, intr;
402 __be16 res[3]; 290 __be16 res[3];
diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
index dd066bb1d562..5a6c5dfc53ef 100644
--- a/arch/powerpc/sysdev/cpm2.c
+++ b/arch/powerpc/sysdev/cpm2.c
@@ -46,10 +46,6 @@
46 46
47#include <sysdev/fsl_soc.h> 47#include <sysdev/fsl_soc.h>
48 48
49#ifndef CONFIG_PPC_CPM_NEW_BINDING
50static void cpm2_dpinit(void);
51#endif
52
53cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */ 49cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
54 50
55/* We allocate this here because it is used almost exclusively for 51/* We allocate this here because it is used almost exclusively for
@@ -71,15 +67,17 @@ void __init cpm2_reset(void)
71 67
72 /* Reclaim the DP memory for our use. 68 /* Reclaim the DP memory for our use.
73 */ 69 */
74#ifdef CONFIG_PPC_CPM_NEW_BINDING
75 cpm_muram_init(); 70 cpm_muram_init();
76#else
77 cpm2_dpinit();
78#endif
79 71
80 /* Tell everyone where the comm processor resides. 72 /* Tell everyone where the comm processor resides.
81 */ 73 */
82 cpmp = &cpm2_immr->im_cpm; 74 cpmp = &cpm2_immr->im_cpm;
75
76#ifndef CONFIG_PPC_EARLY_DEBUG_CPM
77 /* Reset the CPM.
78 */
79 cpm_command(CPM_CR_RST, 0);
80#endif
83} 81}
84 82
85static DEFINE_SPINLOCK(cmd_lock); 83static DEFINE_SPINLOCK(cmd_lock);
@@ -99,7 +97,7 @@ int cpm_command(u32 command, u8 opcode)
99 if ((in_be32(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0) 97 if ((in_be32(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0)
100 goto out; 98 goto out;
101 99
102 printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__); 100 printk(KERN_ERR "%s(): Not able to issue CPM command\n", __func__);
103 ret = -EIO; 101 ret = -EIO;
104out: 102out:
105 spin_unlock_irqrestore(&cmd_lock, flags); 103 spin_unlock_irqrestore(&cmd_lock, flags);
@@ -347,95 +345,6 @@ int cpm2_smc_clk_setup(enum cpm_clk_target target, int clock)
347 return ret; 345 return ret;
348} 346}
349 347
350#ifndef CONFIG_PPC_CPM_NEW_BINDING
351/*
352 * dpalloc / dpfree bits.
353 */
354static spinlock_t cpm_dpmem_lock;
355/* 16 blocks should be enough to satisfy all requests
356 * until the memory subsystem goes up... */
357static rh_block_t cpm_boot_dpmem_rh_block[16];
358static rh_info_t cpm_dpmem_info;
359static u8 __iomem *im_dprambase;
360
361static void cpm2_dpinit(void)
362{
363 spin_lock_init(&cpm_dpmem_lock);
364
365 /* initialize the info header */
366 rh_init(&cpm_dpmem_info, 1,
367 sizeof(cpm_boot_dpmem_rh_block) /
368 sizeof(cpm_boot_dpmem_rh_block[0]),
369 cpm_boot_dpmem_rh_block);
370
371 im_dprambase = cpm2_immr;
372
373 /* Attach the usable dpmem area */
374 /* XXX: This is actually crap. CPM_DATAONLY_BASE and
375 * CPM_DATAONLY_SIZE is only a subset of the available dpram. It
376 * varies with the processor and the microcode patches activated.
377 * But the following should be at least safe.
378 */
379 rh_attach_region(&cpm_dpmem_info, CPM_DATAONLY_BASE, CPM_DATAONLY_SIZE);
380}
381
382/* This function returns an index into the DPRAM area.
383 */
384unsigned long cpm_dpalloc(uint size, uint align)
385{
386 unsigned long start;
387 unsigned long flags;
388
389 spin_lock_irqsave(&cpm_dpmem_lock, flags);
390 cpm_dpmem_info.alignment = align;
391 start = rh_alloc(&cpm_dpmem_info, size, "commproc");
392 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
393
394 return (uint)start;
395}
396EXPORT_SYMBOL(cpm_dpalloc);
397
398int cpm_dpfree(unsigned long offset)
399{
400 int ret;
401 unsigned long flags;
402
403 spin_lock_irqsave(&cpm_dpmem_lock, flags);
404 ret = rh_free(&cpm_dpmem_info, offset);
405 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
406
407 return ret;
408}
409EXPORT_SYMBOL(cpm_dpfree);
410
411/* not sure if this is ever needed */
412unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align)
413{
414 unsigned long start;
415 unsigned long flags;
416
417 spin_lock_irqsave(&cpm_dpmem_lock, flags);
418 cpm_dpmem_info.alignment = align;
419 start = rh_alloc_fixed(&cpm_dpmem_info, offset, size, "commproc");
420 spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
421
422 return start;
423}
424EXPORT_SYMBOL(cpm_dpalloc_fixed);
425
426void cpm_dpdump(void)
427{
428 rh_dump(&cpm_dpmem_info);
429}
430EXPORT_SYMBOL(cpm_dpdump);
431
432void *cpm_dpram_addr(unsigned long offset)
433{
434 return (void *)(im_dprambase + offset);
435}
436EXPORT_SYMBOL(cpm_dpram_addr);
437#endif /* !CONFIG_PPC_CPM_NEW_BINDING */
438
439struct cpm2_ioports { 348struct cpm2_ioports {
440 u32 dir, par, sor, odr, dat; 349 u32 dir, par, sor, odr, dat;
441 u32 res[3]; 350 u32 res[3];
diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
index 165981c87786..cb7df2dce44f 100644
--- a/arch/powerpc/sysdev/cpm_common.c
+++ b/arch/powerpc/sysdev/cpm_common.c
@@ -58,7 +58,6 @@ void __init udbg_init_cpm(void)
58} 58}
59#endif 59#endif
60 60
61#ifdef CONFIG_PPC_CPM_NEW_BINDING
62static spinlock_t cpm_muram_lock; 61static spinlock_t cpm_muram_lock;
63static rh_block_t cpm_boot_muram_rh_block[16]; 62static rh_block_t cpm_boot_muram_rh_block[16];
64static rh_info_t cpm_muram_info; 63static rh_info_t cpm_muram_info;
@@ -199,5 +198,3 @@ dma_addr_t cpm_muram_dma(void __iomem *addr)
199 return muram_pbase + ((u8 __iomem *)addr - muram_vbase); 198 return muram_pbase + ((u8 __iomem *)addr - muram_vbase);
200} 199}
201EXPORT_SYMBOL(cpm_muram_dma); 200EXPORT_SYMBOL(cpm_muram_dma);
202
203#endif /* CONFIG_PPC_CPM_NEW_BINDING */
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index e0e24b01e3a6..005c2ecf976f 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -37,6 +37,7 @@
37#include <linux/dma-mapping.h> 37#include <linux/dma-mapping.h>
38#include <linux/vmalloc.h> 38#include <linux/vmalloc.h>
39#include <linux/suspend.h> 39#include <linux/suspend.h>
40#include <linux/lmb.h>
40#include <asm/io.h> 41#include <asm/io.h>
41#include <asm/prom.h> 42#include <asm/prom.h>
42#include <asm/iommu.h> 43#include <asm/iommu.h>
@@ -44,7 +45,6 @@
44#include <asm/machdep.h> 45#include <asm/machdep.h>
45#include <asm/abs_addr.h> 46#include <asm/abs_addr.h>
46#include <asm/cacheflush.h> 47#include <asm/cacheflush.h>
47#include <asm/lmb.h>
48#include <asm/ppc-pci.h> 48#include <asm/ppc-pci.h>
49 49
50#include "dart.h" 50#include "dart.h"
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c
new file mode 100644
index 000000000000..422c8faef593
--- /dev/null
+++ b/arch/powerpc/sysdev/fsl_lbc.c
@@ -0,0 +1,129 @@
1/*
2 * Freescale LBC and UPM routines.
3 *
4 * Copyright (c) 2007-2008 MontaVista Software, Inc.
5 *
6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#include <linux/kernel.h>
15#include <linux/of.h>
16#include <asm/fsl_lbc.h>
17
18spinlock_t fsl_lbc_lock = __SPIN_LOCK_UNLOCKED(fsl_lbc_lock);
19
20struct fsl_lbc_regs __iomem *fsl_lbc_regs;
21EXPORT_SYMBOL(fsl_lbc_regs);
22
23static char __initdata *compat_lbc[] = {
24 "fsl,pq2-localbus",
25 "fsl,pq2pro-localbus",
26 "fsl,pq3-localbus",
27 "fsl,elbc",
28};
29
30static int __init fsl_lbc_init(void)
31{
32 struct device_node *lbus;
33 int i;
34
35 for (i = 0; i < ARRAY_SIZE(compat_lbc); i++) {
36 lbus = of_find_compatible_node(NULL, NULL, compat_lbc[i]);
37 if (lbus)
38 goto found;
39 }
40 return -ENODEV;
41
42found:
43 fsl_lbc_regs = of_iomap(lbus, 0);
44 of_node_put(lbus);
45 if (!fsl_lbc_regs)
46 return -ENOMEM;
47 return 0;
48}
49arch_initcall(fsl_lbc_init);
50
51/**
52 * fsl_lbc_find - find Localbus bank
53 * @addr_base: base address of the memory bank
54 *
55 * This function walks LBC banks comparing "Base address" field of the BR
56 * registers with the supplied addr_base argument. When bases match this
57 * function returns bank number (starting with 0), otherwise it returns
58 * appropriate errno value.
59 */
60int fsl_lbc_find(phys_addr_t addr_base)
61{
62 int i;
63
64 if (!fsl_lbc_regs)
65 return -ENODEV;
66
67 for (i = 0; i < ARRAY_SIZE(fsl_lbc_regs->bank); i++) {
68 __be32 br = in_be32(&fsl_lbc_regs->bank[i].br);
69 __be32 or = in_be32(&fsl_lbc_regs->bank[i].or);
70
71 if (br & BR_V && (br & or & BR_BA) == addr_base)
72 return i;
73 }
74
75 return -ENOENT;
76}
77EXPORT_SYMBOL(fsl_lbc_find);
78
79/**
80 * fsl_upm_find - find pre-programmed UPM via base address
81 * @addr_base: base address of the memory bank controlled by the UPM
82 * @upm: pointer to the allocated fsl_upm structure
83 *
84 * This function fills fsl_upm structure so you can use it with the rest of
85 * UPM API. On success this function returns 0, otherwise it returns
86 * appropriate errno value.
87 */
88int fsl_upm_find(phys_addr_t addr_base, struct fsl_upm *upm)
89{
90 int bank;
91 __be32 br;
92
93 bank = fsl_lbc_find(addr_base);
94 if (bank < 0)
95 return bank;
96
97 br = in_be32(&fsl_lbc_regs->bank[bank].br);
98
99 switch (br & BR_MSEL) {
100 case BR_MS_UPMA:
101 upm->mxmr = &fsl_lbc_regs->mamr;
102 break;
103 case BR_MS_UPMB:
104 upm->mxmr = &fsl_lbc_regs->mbmr;
105 break;
106 case BR_MS_UPMC:
107 upm->mxmr = &fsl_lbc_regs->mcmr;
108 break;
109 default:
110 return -EINVAL;
111 }
112
113 switch (br & BR_PS) {
114 case BR_PS_8:
115 upm->width = 8;
116 break;
117 case BR_PS_16:
118 upm->width = 16;
119 break;
120 case BR_PS_32:
121 upm->width = 32;
122 break;
123 default:
124 return -EINVAL;
125 }
126
127 return 0;
128}
129EXPORT_SYMBOL(fsl_upm_find);
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 3581416905ea..5c1b246aaccc 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -75,6 +75,33 @@ phys_addr_t get_immrbase(void)
75 75
76EXPORT_SYMBOL(get_immrbase); 76EXPORT_SYMBOL(get_immrbase);
77 77
78static u32 sysfreq = -1;
79
80u32 fsl_get_sys_freq(void)
81{
82 struct device_node *soc;
83 const u32 *prop;
84 int size;
85
86 if (sysfreq != -1)
87 return sysfreq;
88
89 soc = of_find_node_by_type(NULL, "soc");
90 if (!soc)
91 return -1;
92
93 prop = of_get_property(soc, "clock-frequency", &size);
94 if (!prop || size != sizeof(*prop) || *prop == 0)
95 prop = of_get_property(soc, "bus-frequency", &size);
96
97 if (prop && size == sizeof(*prop))
98 sysfreq = *prop;
99
100 of_node_put(soc);
101 return sysfreq;
102}
103EXPORT_SYMBOL(fsl_get_sys_freq);
104
78#if defined(CONFIG_CPM2) || defined(CONFIG_QUICC_ENGINE) || defined(CONFIG_8xx) 105#if defined(CONFIG_CPM2) || defined(CONFIG_QUICC_ENGINE) || defined(CONFIG_8xx)
79 106
80static u32 brgfreq = -1; 107static u32 brgfreq = -1;
@@ -517,9 +544,9 @@ arch_initcall(fsl_i2c_of_init);
517static int __init mpc83xx_wdt_init(void) 544static int __init mpc83xx_wdt_init(void)
518{ 545{
519 struct resource r; 546 struct resource r;
520 struct device_node *soc, *np; 547 struct device_node *np;
521 struct platform_device *dev; 548 struct platform_device *dev;
522 const unsigned int *freq; 549 u32 freq = fsl_get_sys_freq();
523 int ret; 550 int ret;
524 551
525 np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt"); 552 np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt");
@@ -529,19 +556,6 @@ static int __init mpc83xx_wdt_init(void)
529 goto nodev; 556 goto nodev;
530 } 557 }
531 558
532 soc = of_find_node_by_type(NULL, "soc");
533
534 if (!soc) {
535 ret = -ENODEV;
536 goto nosoc;
537 }
538
539 freq = of_get_property(soc, "bus-frequency", NULL);
540 if (!freq) {
541 ret = -ENODEV;
542 goto err;
543 }
544
545 memset(&r, 0, sizeof(r)); 559 memset(&r, 0, sizeof(r));
546 560
547 ret = of_address_to_resource(np, 0, &r); 561 ret = of_address_to_resource(np, 0, &r);
@@ -554,20 +568,16 @@ static int __init mpc83xx_wdt_init(void)
554 goto err; 568 goto err;
555 } 569 }
556 570
557 ret = platform_device_add_data(dev, freq, sizeof(int)); 571 ret = platform_device_add_data(dev, &freq, sizeof(freq));
558 if (ret) 572 if (ret)
559 goto unreg; 573 goto unreg;
560 574
561 of_node_put(soc);
562 of_node_put(np); 575 of_node_put(np);
563
564 return 0; 576 return 0;
565 577
566unreg: 578unreg:
567 platform_device_unregister(dev); 579 platform_device_unregister(dev);
568err: 580err:
569 of_node_put(soc);
570nosoc:
571 of_node_put(np); 581 of_node_put(np);
572nodev: 582nodev:
573 return ret; 583 return ret;
@@ -736,547 +746,6 @@ err:
736 746
737arch_initcall(fsl_usb_of_init); 747arch_initcall(fsl_usb_of_init);
738 748
739#ifndef CONFIG_PPC_CPM_NEW_BINDING
740#ifdef CONFIG_CPM2
741
742extern void init_scc_ioports(struct fs_uart_platform_info*);
743
744static const char fcc_regs[] = "fcc_regs";
745static const char fcc_regs_c[] = "fcc_regs_c";
746static const char fcc_pram[] = "fcc_pram";
747static char bus_id[9][BUS_ID_SIZE];
748
749static int __init fs_enet_of_init(void)
750{
751 struct device_node *np;
752 unsigned int i;
753 struct platform_device *fs_enet_dev;
754 struct resource res;
755 int ret;
756
757 for (np = NULL, i = 0;
758 (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL;
759 i++) {
760 struct resource r[4];
761 struct device_node *phy, *mdio;
762 struct fs_platform_info fs_enet_data;
763 const unsigned int *id, *phy_addr, *phy_irq;
764 const void *mac_addr;
765 const phandle *ph;
766 const char *model;
767
768 memset(r, 0, sizeof(r));
769 memset(&fs_enet_data, 0, sizeof(fs_enet_data));
770
771 ret = of_address_to_resource(np, 0, &r[0]);
772 if (ret)
773 goto err;
774 r[0].name = fcc_regs;
775
776 ret = of_address_to_resource(np, 1, &r[1]);
777 if (ret)
778 goto err;
779 r[1].name = fcc_pram;
780
781 ret = of_address_to_resource(np, 2, &r[2]);
782 if (ret)
783 goto err;
784 r[2].name = fcc_regs_c;
785 fs_enet_data.fcc_regs_c = r[2].start;
786
787 of_irq_to_resource(np, 0, &r[3]);
788
789 fs_enet_dev =
790 platform_device_register_simple("fsl-cpm-fcc", i, &r[0], 4);
791
792 if (IS_ERR(fs_enet_dev)) {
793 ret = PTR_ERR(fs_enet_dev);
794 goto err;
795 }
796
797 model = of_get_property(np, "model", NULL);
798 if (model == NULL) {
799 ret = -ENODEV;
800 goto unreg;
801 }
802
803 mac_addr = of_get_mac_address(np);
804 if (mac_addr)
805 memcpy(fs_enet_data.macaddr, mac_addr, 6);
806
807 ph = of_get_property(np, "phy-handle", NULL);
808 phy = of_find_node_by_phandle(*ph);
809
810 if (phy == NULL) {
811 ret = -ENODEV;
812 goto unreg;
813 }
814
815 phy_addr = of_get_property(phy, "reg", NULL);
816 fs_enet_data.phy_addr = *phy_addr;
817
818 phy_irq = of_get_property(phy, "interrupts", NULL);
819
820 id = of_get_property(np, "device-id", NULL);
821 fs_enet_data.fs_no = *id;
822 strcpy(fs_enet_data.fs_type, model);
823
824 mdio = of_get_parent(phy);
825 ret = of_address_to_resource(mdio, 0, &res);
826 if (ret) {
827 of_node_put(phy);
828 of_node_put(mdio);
829 goto unreg;
830 }
831
832 fs_enet_data.clk_rx = *((u32 *)of_get_property(np,
833 "rx-clock", NULL));
834 fs_enet_data.clk_tx = *((u32 *)of_get_property(np,
835 "tx-clock", NULL));
836
837 if (strstr(model, "FCC")) {
838 int fcc_index = *id - 1;
839 const unsigned char *mdio_bb_prop;
840
841 fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0);
842 fs_enet_data.rx_ring = 32;
843 fs_enet_data.tx_ring = 32;
844 fs_enet_data.rx_copybreak = 240;
845 fs_enet_data.use_napi = 0;
846 fs_enet_data.napi_weight = 17;
847 fs_enet_data.mem_offset = FCC_MEM_OFFSET(fcc_index);
848 fs_enet_data.cp_page = CPM_CR_FCC_PAGE(fcc_index);
849 fs_enet_data.cp_block = CPM_CR_FCC_SBLOCK(fcc_index);
850
851 snprintf((char*)&bus_id[(*id)], BUS_ID_SIZE, "%x:%02x",
852 (u32)res.start, fs_enet_data.phy_addr);
853 fs_enet_data.bus_id = (char*)&bus_id[(*id)];
854 fs_enet_data.init_ioports = init_fcc_ioports;
855
856 mdio_bb_prop = of_get_property(phy, "bitbang", NULL);
857 if (mdio_bb_prop) {
858 struct platform_device *fs_enet_mdio_bb_dev;
859 struct fs_mii_bb_platform_info fs_enet_mdio_bb_data;
860
861 fs_enet_mdio_bb_dev =
862 platform_device_register_simple("fsl-bb-mdio",
863 i, NULL, 0);
864 memset(&fs_enet_mdio_bb_data, 0,
865 sizeof(struct fs_mii_bb_platform_info));
866 fs_enet_mdio_bb_data.mdio_dat.bit =
867 mdio_bb_prop[0];
868 fs_enet_mdio_bb_data.mdio_dir.bit =
869 mdio_bb_prop[1];
870 fs_enet_mdio_bb_data.mdc_dat.bit =
871 mdio_bb_prop[2];
872 fs_enet_mdio_bb_data.mdio_port =
873 mdio_bb_prop[3];
874 fs_enet_mdio_bb_data.mdc_port =
875 mdio_bb_prop[4];
876 fs_enet_mdio_bb_data.delay =
877 mdio_bb_prop[5];
878
879 fs_enet_mdio_bb_data.irq[0] = phy_irq[0];
880 fs_enet_mdio_bb_data.irq[1] = -1;
881 fs_enet_mdio_bb_data.irq[2] = -1;
882 fs_enet_mdio_bb_data.irq[3] = phy_irq[0];
883 fs_enet_mdio_bb_data.irq[31] = -1;
884
885 fs_enet_mdio_bb_data.mdio_dat.offset =
886 (u32)&cpm2_immr->im_ioport.iop_pdatc;
887 fs_enet_mdio_bb_data.mdio_dir.offset =
888 (u32)&cpm2_immr->im_ioport.iop_pdirc;
889 fs_enet_mdio_bb_data.mdc_dat.offset =
890 (u32)&cpm2_immr->im_ioport.iop_pdatc;
891
892 ret = platform_device_add_data(
893 fs_enet_mdio_bb_dev,
894 &fs_enet_mdio_bb_data,
895 sizeof(struct fs_mii_bb_platform_info));
896 if (ret)
897 goto unreg;
898 }
899
900 of_node_put(phy);
901 of_node_put(mdio);
902
903 ret = platform_device_add_data(fs_enet_dev, &fs_enet_data,
904 sizeof(struct
905 fs_platform_info));
906 if (ret)
907 goto unreg;
908 }
909 }
910 return 0;
911
912unreg:
913 platform_device_unregister(fs_enet_dev);
914err:
915 return ret;
916}
917
918arch_initcall(fs_enet_of_init);
919
920static const char scc_regs[] = "regs";
921static const char scc_pram[] = "pram";
922
923static int __init cpm_uart_of_init(void)
924{
925 struct device_node *np;
926 unsigned int i;
927 struct platform_device *cpm_uart_dev;
928 int ret;
929
930 for (np = NULL, i = 0;
931 (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL;
932 i++) {
933 struct resource r[3];
934 struct fs_uart_platform_info cpm_uart_data;
935 const int *id;
936 const char *model;
937
938 memset(r, 0, sizeof(r));
939 memset(&cpm_uart_data, 0, sizeof(cpm_uart_data));
940
941 ret = of_address_to_resource(np, 0, &r[0]);
942 if (ret)
943 goto err;
944
945 r[0].name = scc_regs;
946
947 ret = of_address_to_resource(np, 1, &r[1]);
948 if (ret)
949 goto err;
950 r[1].name = scc_pram;
951
952 of_irq_to_resource(np, 0, &r[2]);
953
954 cpm_uart_dev =
955 platform_device_register_simple("fsl-cpm-scc:uart", i, &r[0], 3);
956
957 if (IS_ERR(cpm_uart_dev)) {
958 ret = PTR_ERR(cpm_uart_dev);
959 goto err;
960 }
961
962 id = of_get_property(np, "device-id", NULL);
963 cpm_uart_data.fs_no = *id;
964
965 model = of_get_property(np, "model", NULL);
966 strcpy(cpm_uart_data.fs_type, model);
967
968 cpm_uart_data.uart_clk = ppc_proc_freq;
969
970 cpm_uart_data.tx_num_fifo = 4;
971 cpm_uart_data.tx_buf_size = 32;
972 cpm_uart_data.rx_num_fifo = 4;
973 cpm_uart_data.rx_buf_size = 32;
974 cpm_uart_data.clk_rx = *((u32 *)of_get_property(np,
975 "rx-clock", NULL));
976 cpm_uart_data.clk_tx = *((u32 *)of_get_property(np,
977 "tx-clock", NULL));
978
979 ret =
980 platform_device_add_data(cpm_uart_dev, &cpm_uart_data,
981 sizeof(struct
982 fs_uart_platform_info));
983 if (ret)
984 goto unreg;
985 }
986
987 return 0;
988
989unreg:
990 platform_device_unregister(cpm_uart_dev);
991err:
992 return ret;
993}
994
995arch_initcall(cpm_uart_of_init);
996#endif /* CONFIG_CPM2 */
997
998#ifdef CONFIG_8xx
999
1000extern void init_scc_ioports(struct fs_platform_info*);
1001extern int platform_device_skip(const char *model, int id);
1002
1003static int __init fs_enet_mdio_of_init(void)
1004{
1005 struct device_node *np;
1006 unsigned int i;
1007 struct platform_device *mdio_dev;
1008 struct resource res;
1009 int ret;
1010
1011 for (np = NULL, i = 0;
1012 (np = of_find_compatible_node(np, "mdio", "fs_enet")) != NULL;
1013 i++) {
1014 struct fs_mii_fec_platform_info mdio_data;
1015
1016 memset(&res, 0, sizeof(res));
1017 memset(&mdio_data, 0, sizeof(mdio_data));
1018
1019 ret = of_address_to_resource(np, 0, &res);
1020 if (ret)
1021 goto err;
1022
1023 mdio_dev =
1024 platform_device_register_simple("fsl-cpm-fec-mdio",
1025 res.start, &res, 1);
1026 if (IS_ERR(mdio_dev)) {
1027 ret = PTR_ERR(mdio_dev);
1028 goto err;
1029 }
1030
1031 mdio_data.mii_speed = ((((ppc_proc_freq + 4999999) / 2500000) / 2) & 0x3F) << 1;
1032
1033 ret =
1034 platform_device_add_data(mdio_dev, &mdio_data,
1035 sizeof(struct fs_mii_fec_platform_info));
1036 if (ret)
1037 goto unreg;
1038 }
1039 return 0;
1040
1041unreg:
1042 platform_device_unregister(mdio_dev);
1043err:
1044 return ret;
1045}
1046
1047arch_initcall(fs_enet_mdio_of_init);
1048
1049static const char *enet_regs = "regs";
1050static const char *enet_pram = "pram";
1051static const char *enet_irq = "interrupt";
1052static char bus_id[9][BUS_ID_SIZE];
1053
1054static int __init fs_enet_of_init(void)
1055{
1056 struct device_node *np;
1057 unsigned int i;
1058 struct platform_device *fs_enet_dev = NULL;
1059 struct resource res;
1060 int ret;
1061
1062 for (np = NULL, i = 0;
1063 (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL;
1064 i++) {
1065 struct resource r[4];
1066 struct device_node *phy = NULL, *mdio = NULL;
1067 struct fs_platform_info fs_enet_data;
1068 const unsigned int *id;
1069 const unsigned int *phy_addr;
1070 const void *mac_addr;
1071 const phandle *ph;
1072 const char *model;
1073
1074 memset(r, 0, sizeof(r));
1075 memset(&fs_enet_data, 0, sizeof(fs_enet_data));
1076
1077 model = of_get_property(np, "model", NULL);
1078 if (model == NULL) {
1079 ret = -ENODEV;
1080 goto unreg;
1081 }
1082
1083 id = of_get_property(np, "device-id", NULL);
1084 fs_enet_data.fs_no = *id;
1085
1086 if (platform_device_skip(model, *id))
1087 continue;
1088
1089 ret = of_address_to_resource(np, 0, &r[0]);
1090 if (ret)
1091 goto err;
1092 r[0].name = enet_regs;
1093
1094 mac_addr = of_get_mac_address(np);
1095 if (mac_addr)
1096 memcpy(fs_enet_data.macaddr, mac_addr, 6);
1097
1098 ph = of_get_property(np, "phy-handle", NULL);
1099 if (ph != NULL)
1100 phy = of_find_node_by_phandle(*ph);
1101
1102 if (phy != NULL) {
1103 phy_addr = of_get_property(phy, "reg", NULL);
1104 fs_enet_data.phy_addr = *phy_addr;
1105 fs_enet_data.has_phy = 1;
1106
1107 mdio = of_get_parent(phy);
1108 ret = of_address_to_resource(mdio, 0, &res);
1109 if (ret) {
1110 of_node_put(phy);
1111 of_node_put(mdio);
1112 goto unreg;
1113 }
1114 }
1115
1116 model = of_get_property(np, "model", NULL);
1117 strcpy(fs_enet_data.fs_type, model);
1118
1119 if (strstr(model, "FEC")) {
1120 r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
1121 r[1].flags = IORESOURCE_IRQ;
1122 r[1].name = enet_irq;
1123
1124 fs_enet_dev =
1125 platform_device_register_simple("fsl-cpm-fec", i, &r[0], 2);
1126
1127 if (IS_ERR(fs_enet_dev)) {
1128 ret = PTR_ERR(fs_enet_dev);
1129 goto err;
1130 }
1131
1132 fs_enet_data.rx_ring = 128;
1133 fs_enet_data.tx_ring = 16;
1134 fs_enet_data.rx_copybreak = 240;
1135 fs_enet_data.use_napi = 1;
1136 fs_enet_data.napi_weight = 17;
1137
1138 snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%x:%02x",
1139 (u32)res.start, fs_enet_data.phy_addr);
1140 fs_enet_data.bus_id = (char*)&bus_id[i];
1141 fs_enet_data.init_ioports = init_fec_ioports;
1142 }
1143 if (strstr(model, "SCC")) {
1144 ret = of_address_to_resource(np, 1, &r[1]);
1145 if (ret)
1146 goto err;
1147 r[1].name = enet_pram;
1148
1149 r[2].start = r[2].end = irq_of_parse_and_map(np, 0);
1150 r[2].flags = IORESOURCE_IRQ;
1151 r[2].name = enet_irq;
1152
1153 fs_enet_dev =
1154 platform_device_register_simple("fsl-cpm-scc", i, &r[0], 3);
1155
1156 if (IS_ERR(fs_enet_dev)) {
1157 ret = PTR_ERR(fs_enet_dev);
1158 goto err;
1159 }
1160
1161 fs_enet_data.rx_ring = 64;
1162 fs_enet_data.tx_ring = 8;
1163 fs_enet_data.rx_copybreak = 240;
1164 fs_enet_data.use_napi = 1;
1165 fs_enet_data.napi_weight = 17;
1166
1167 snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%s", "fixed@10:1");
1168 fs_enet_data.bus_id = (char*)&bus_id[i];
1169 fs_enet_data.init_ioports = init_scc_ioports;
1170 }
1171
1172 of_node_put(phy);
1173 of_node_put(mdio);
1174
1175 ret = platform_device_add_data(fs_enet_dev, &fs_enet_data,
1176 sizeof(struct
1177 fs_platform_info));
1178 if (ret)
1179 goto unreg;
1180 }
1181 return 0;
1182
1183unreg:
1184 platform_device_unregister(fs_enet_dev);
1185err:
1186 return ret;
1187}
1188
1189arch_initcall(fs_enet_of_init);
1190
1191static int __init fsl_pcmcia_of_init(void)
1192{
1193 struct device_node *np;
1194 /*
1195 * Register all the devices which type is "pcmcia"
1196 */
1197 for_each_compatible_node(np, "pcmcia", "fsl,pq-pcmcia")
1198 of_platform_device_create(np, "m8xx-pcmcia", NULL);
1199 return 0;
1200}
1201
1202arch_initcall(fsl_pcmcia_of_init);
1203
1204static const char *smc_regs = "regs";
1205static const char *smc_pram = "pram";
1206
1207static int __init cpm_smc_uart_of_init(void)
1208{
1209 struct device_node *np;
1210 unsigned int i;
1211 struct platform_device *cpm_uart_dev;
1212 int ret;
1213
1214 for (np = NULL, i = 0;
1215 (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL;
1216 i++) {
1217 struct resource r[3];
1218 struct fs_uart_platform_info cpm_uart_data;
1219 const int *id;
1220 const char *model;
1221
1222 memset(r, 0, sizeof(r));
1223 memset(&cpm_uart_data, 0, sizeof(cpm_uart_data));
1224
1225 ret = of_address_to_resource(np, 0, &r[0]);
1226 if (ret)
1227 goto err;
1228
1229 r[0].name = smc_regs;
1230
1231 ret = of_address_to_resource(np, 1, &r[1]);
1232 if (ret)
1233 goto err;
1234 r[1].name = smc_pram;
1235
1236 r[2].start = r[2].end = irq_of_parse_and_map(np, 0);
1237 r[2].flags = IORESOURCE_IRQ;
1238
1239 cpm_uart_dev =
1240 platform_device_register_simple("fsl-cpm-smc:uart", i, &r[0], 3);
1241
1242 if (IS_ERR(cpm_uart_dev)) {
1243 ret = PTR_ERR(cpm_uart_dev);
1244 goto err;
1245 }
1246
1247 model = of_get_property(np, "model", NULL);
1248 strcpy(cpm_uart_data.fs_type, model);
1249
1250 id = of_get_property(np, "device-id", NULL);
1251 cpm_uart_data.fs_no = *id;
1252 cpm_uart_data.uart_clk = ppc_proc_freq;
1253
1254 cpm_uart_data.tx_num_fifo = 4;
1255 cpm_uart_data.tx_buf_size = 32;
1256 cpm_uart_data.rx_num_fifo = 4;
1257 cpm_uart_data.rx_buf_size = 32;
1258
1259 ret =
1260 platform_device_add_data(cpm_uart_dev, &cpm_uart_data,
1261 sizeof(struct
1262 fs_uart_platform_info));
1263 if (ret)
1264 goto unreg;
1265 }
1266
1267 return 0;
1268
1269unreg:
1270 platform_device_unregister(cpm_uart_dev);
1271err:
1272 return ret;
1273}
1274
1275arch_initcall(cpm_smc_uart_of_init);
1276
1277#endif /* CONFIG_8xx */
1278#endif /* CONFIG_PPC_CPM_NEW_BINDING */
1279
1280static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk, 749static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk,
1281 struct spi_board_info *board_infos, 750 struct spi_board_info *board_infos,
1282 unsigned int num_board_infos, 751 unsigned int num_board_infos,
@@ -1372,25 +841,9 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
1372 sysclk = get_brgfreq(); 841 sysclk = get_brgfreq();
1373#endif 842#endif
1374 if (sysclk == -1) { 843 if (sysclk == -1) {
1375 struct device_node *np; 844 sysclk = fsl_get_sys_freq();
1376 const u32 *freq; 845 if (sysclk == -1)
1377 int size;
1378
1379 np = of_find_node_by_type(NULL, "soc");
1380 if (!np)
1381 return -ENODEV; 846 return -ENODEV;
1382
1383 freq = of_get_property(np, "clock-frequency", &size);
1384 if (!freq || size != sizeof(*freq) || *freq == 0) {
1385 freq = of_get_property(np, "bus-frequency", &size);
1386 if (!freq || size != sizeof(*freq) || *freq == 0) {
1387 of_node_put(np);
1388 return -ENODEV;
1389 }
1390 }
1391
1392 sysclk = *freq;
1393 of_node_put(np);
1394 } 847 }
1395 848
1396 ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos, 849 ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos,
diff --git a/arch/powerpc/sysdev/fsl_soc.h b/arch/powerpc/sysdev/fsl_soc.h
index 63e7db30a4cd..74c4a9657b33 100644
--- a/arch/powerpc/sysdev/fsl_soc.h
+++ b/arch/powerpc/sysdev/fsl_soc.h
@@ -7,6 +7,7 @@
7extern phys_addr_t get_immrbase(void); 7extern phys_addr_t get_immrbase(void);
8extern u32 get_brgfreq(void); 8extern u32 get_brgfreq(void);
9extern u32 get_baudrate(void); 9extern u32 get_baudrate(void);
10extern u32 fsl_get_sys_freq(void);
10 11
11struct spi_board_info; 12struct spi_board_info;
12 13
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 6ffdda244bb1..8619f2a3f1f6 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -175,13 +175,16 @@ static inline void _mpic_write(enum mpic_reg_type type,
175 switch(type) { 175 switch(type) {
176#ifdef CONFIG_PPC_DCR 176#ifdef CONFIG_PPC_DCR
177 case mpic_access_dcr: 177 case mpic_access_dcr:
178 return dcr_write(rb->dhost, reg, value); 178 dcr_write(rb->dhost, reg, value);
179 break;
179#endif 180#endif
180 case mpic_access_mmio_be: 181 case mpic_access_mmio_be:
181 return out_be32(rb->base + (reg >> 2), value); 182 out_be32(rb->base + (reg >> 2), value);
183 break;
182 case mpic_access_mmio_le: 184 case mpic_access_mmio_le:
183 default: 185 default:
184 return out_le32(rb->base + (reg >> 2), value); 186 out_le32(rb->base + (reg >> 2), value);
187 break;
185 } 188 }
186} 189}
187 190
@@ -1000,7 +1003,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1000 const char *name) 1003 const char *name)
1001{ 1004{
1002 struct mpic *mpic; 1005 struct mpic *mpic;
1003 u32 reg; 1006 u32 greg_feature;
1004 const char *vers; 1007 const char *vers;
1005 int i; 1008 int i;
1006 int intvec_top; 1009 int intvec_top;
@@ -1064,7 +1067,8 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1064 1067
1065 /* Look for protected sources */ 1068 /* Look for protected sources */
1066 if (node) { 1069 if (node) {
1067 unsigned int psize, bits, mapsize; 1070 int psize;
1071 unsigned int bits, mapsize;
1068 const u32 *psrc = 1072 const u32 *psrc =
1069 of_get_property(node, "protected-sources", &psize); 1073 of_get_property(node, "protected-sources", &psize);
1070 if (psrc) { 1074 if (psrc) {
@@ -1107,8 +1111,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1107 * in, try to obtain one 1111 * in, try to obtain one
1108 */ 1112 */
1109 if (paddr == 0 && !(mpic->flags & MPIC_USES_DCR)) { 1113 if (paddr == 0 && !(mpic->flags & MPIC_USES_DCR)) {
1110 const u32 *reg; 1114 const u32 *reg = of_get_property(node, "reg", NULL);
1111 reg = of_get_property(node, "reg", NULL);
1112 BUG_ON(reg == NULL); 1115 BUG_ON(reg == NULL);
1113 paddr = of_translate_address(node, reg); 1116 paddr = of_translate_address(node, reg);
1114 BUG_ON(paddr == OF_BAD_ADDR); 1117 BUG_ON(paddr == OF_BAD_ADDR);
@@ -1137,12 +1140,13 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1137 * MPICs, num sources as well. On ISU MPICs, sources are counted 1140 * MPICs, num sources as well. On ISU MPICs, sources are counted
1138 * as ISUs are added 1141 * as ISUs are added
1139 */ 1142 */
1140 reg = mpic_read(mpic->gregs, MPIC_INFO(GREG_FEATURE_0)); 1143 greg_feature = mpic_read(mpic->gregs, MPIC_INFO(GREG_FEATURE_0));
1141 mpic->num_cpus = ((reg & MPIC_GREG_FEATURE_LAST_CPU_MASK) 1144 mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK)
1142 >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1; 1145 >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1;
1143 if (isu_size == 0) 1146 if (isu_size == 0)
1144 mpic->num_sources = ((reg & MPIC_GREG_FEATURE_LAST_SRC_MASK) 1147 mpic->num_sources =
1145 >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1; 1148 ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK)
1149 >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1;
1146 1150
1147 /* Map the per-CPU registers */ 1151 /* Map the per-CPU registers */
1148 for (i = 0; i < mpic->num_cpus; i++) { 1152 for (i = 0; i < mpic->num_cpus; i++) {
@@ -1161,7 +1165,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1161 mpic->isu_mask = (1 << mpic->isu_shift) - 1; 1165 mpic->isu_mask = (1 << mpic->isu_shift) - 1;
1162 1166
1163 /* Display version */ 1167 /* Display version */
1164 switch (reg & MPIC_GREG_FEATURE_VERSION_MASK) { 1168 switch (greg_feature & MPIC_GREG_FEATURE_VERSION_MASK) {
1165 case 1: 1169 case 1:
1166 vers = "1.0"; 1170 vers = "1.0";
1167 break; 1171 break;
@@ -1321,7 +1325,7 @@ void __init mpic_set_serial_int(struct mpic *mpic, int enable)
1321 1325
1322void mpic_irq_set_priority(unsigned int irq, unsigned int pri) 1326void mpic_irq_set_priority(unsigned int irq, unsigned int pri)
1323{ 1327{
1324 int is_ipi; 1328 unsigned int is_ipi;
1325 struct mpic *mpic = mpic_find(irq, &is_ipi); 1329 struct mpic *mpic = mpic_find(irq, &is_ipi);
1326 unsigned int src = mpic_irq_to_hw(irq); 1330 unsigned int src = mpic_irq_to_hw(irq);
1327 unsigned long flags; 1331 unsigned long flags;
@@ -1344,7 +1348,7 @@ void mpic_irq_set_priority(unsigned int irq, unsigned int pri)
1344 1348
1345unsigned int mpic_irq_get_priority(unsigned int irq) 1349unsigned int mpic_irq_get_priority(unsigned int irq)
1346{ 1350{
1347 int is_ipi; 1351 unsigned int is_ipi;
1348 struct mpic *mpic = mpic_find(irq, &is_ipi); 1352 struct mpic *mpic = mpic_find(irq, &is_ipi);
1349 unsigned int src = mpic_irq_to_hw(irq); 1353 unsigned int src = mpic_irq_to_hw(irq);
1350 unsigned long flags; 1354 unsigned long flags;
@@ -1406,11 +1410,6 @@ void mpic_cpu_set_priority(int prio)
1406 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), prio); 1410 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), prio);
1407} 1411}
1408 1412
1409/*
1410 * XXX: someone who knows mpic should check this.
1411 * do we need to eoi the ipi including for kexec cpu here (see xics comments)?
1412 * or can we reset the mpic in the new kernel?
1413 */
1414void mpic_teardown_this_cpu(int secondary) 1413void mpic_teardown_this_cpu(int secondary)
1415{ 1414{
1416 struct mpic *mpic = mpic_primary; 1415 struct mpic *mpic = mpic_primary;
@@ -1430,6 +1429,10 @@ void mpic_teardown_this_cpu(int secondary)
1430 1429
1431 /* Set current processor priority to max */ 1430 /* Set current processor priority to max */
1432 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0xf); 1431 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0xf);
1432 /* We need to EOI the IPI since not all platforms reset the MPIC
1433 * on boot and new interrupts wouldn't get delivered otherwise.
1434 */
1435 mpic_eoi(mpic);
1433 1436
1434 spin_unlock_irqrestore(&mpic_lock, flags); 1437 spin_unlock_irqrestore(&mpic_lock, flags);
1435} 1438}
diff --git a/arch/powerpc/sysdev/mv64x60_dev.c b/arch/powerpc/sysdev/mv64x60_dev.c
index efda0028909d..047b31027fa6 100644
--- a/arch/powerpc/sysdev/mv64x60_dev.c
+++ b/arch/powerpc/sysdev/mv64x60_dev.c
@@ -127,7 +127,7 @@ static int __init mv64x60_mpsc_device_setup(struct device_node *np, int id)
127 if (err) 127 if (err)
128 return err; 128 return err;
129 129
130 prop = of_get_property(np, "block-index", NULL); 130 prop = of_get_property(np, "cell-index", NULL);
131 if (!prop) 131 if (!prop)
132 return -ENODEV; 132 return -ENODEV;
133 port_number = *(int *)prop; 133 port_number = *(int *)prop;
@@ -136,6 +136,7 @@ static int __init mv64x60_mpsc_device_setup(struct device_node *np, int id)
136 136
137 pdata.cache_mgmt = 1; /* All current revs need this set */ 137 pdata.cache_mgmt = 1; /* All current revs need this set */
138 138
139 pdata.max_idle = 40; /* default */
139 prop = of_get_property(np, "max_idle", NULL); 140 prop = of_get_property(np, "max_idle", NULL);
140 if (prop) 141 if (prop)
141 pdata.max_idle = *prop; 142 pdata.max_idle = *prop;
@@ -205,30 +206,24 @@ error:
205/* 206/*
206 * Create mv64x60_eth platform devices 207 * Create mv64x60_eth platform devices
207 */ 208 */
208static int __init eth_register_shared_pdev(struct device_node *np) 209static struct platform_device * __init mv64x60_eth_register_shared_pdev(
210 struct device_node *np, int id)
209{ 211{
210 struct platform_device *pdev; 212 struct platform_device *pdev;
211 struct resource r[1]; 213 struct resource r[1];
212 int err; 214 int err;
213 215
214 np = of_get_parent(np);
215 if (!np)
216 return -ENODEV;
217
218 err = of_address_to_resource(np, 0, &r[0]); 216 err = of_address_to_resource(np, 0, &r[0]);
219 of_node_put(np);
220 if (err) 217 if (err)
221 return err; 218 return ERR_PTR(err);
222 219
223 pdev = platform_device_register_simple(MV643XX_ETH_SHARED_NAME, 0, 220 pdev = platform_device_register_simple(MV643XX_ETH_SHARED_NAME, id,
224 r, 1); 221 r, 1);
225 if (IS_ERR(pdev)) 222 return pdev;
226 return PTR_ERR(pdev);
227
228 return 0;
229} 223}
230 224
231static int __init mv64x60_eth_device_setup(struct device_node *np, int id) 225static int __init mv64x60_eth_device_setup(struct device_node *np, int id,
226 struct platform_device *shared_pdev)
232{ 227{
233 struct resource r[1]; 228 struct resource r[1];
234 struct mv643xx_eth_platform_data pdata; 229 struct mv643xx_eth_platform_data pdata;
@@ -239,16 +234,12 @@ static int __init mv64x60_eth_device_setup(struct device_node *np, int id)
239 const phandle *ph; 234 const phandle *ph;
240 int err; 235 int err;
241 236
242 /* only register the shared platform device the first time through */
243 if (id == 0 && (err = eth_register_shared_pdev(np)))
244 return err;
245
246 memset(r, 0, sizeof(r)); 237 memset(r, 0, sizeof(r));
247 of_irq_to_resource(np, 0, &r[0]); 238 of_irq_to_resource(np, 0, &r[0]);
248 239
249 memset(&pdata, 0, sizeof(pdata)); 240 memset(&pdata, 0, sizeof(pdata));
250 241
251 prop = of_get_property(np, "block-index", NULL); 242 prop = of_get_property(np, "reg", NULL);
252 if (!prop) 243 if (!prop)
253 return -ENODEV; 244 return -ENODEV;
254 pdata.port_number = *prop; 245 pdata.port_number = *prop;
@@ -301,7 +292,7 @@ static int __init mv64x60_eth_device_setup(struct device_node *np, int id)
301 292
302 of_node_put(phy); 293 of_node_put(phy);
303 294
304 pdev = platform_device_alloc(MV643XX_ETH_NAME, pdata.port_number); 295 pdev = platform_device_alloc(MV643XX_ETH_NAME, id);
305 if (!pdev) 296 if (!pdev)
306 return -ENOMEM; 297 return -ENOMEM;
307 298
@@ -345,21 +336,19 @@ static int __init mv64x60_i2c_device_setup(struct device_node *np, int id)
345 336
346 memset(&pdata, 0, sizeof(pdata)); 337 memset(&pdata, 0, sizeof(pdata));
347 338
339 pdata.freq_m = 8; /* default */
348 prop = of_get_property(np, "freq_m", NULL); 340 prop = of_get_property(np, "freq_m", NULL);
349 if (!prop) 341 if (!prop)
350 return -ENODEV; 342 return -ENODEV;
351 pdata.freq_m = *prop; 343 pdata.freq_m = *prop;
352 344
345 pdata.freq_m = 3; /* default */
353 prop = of_get_property(np, "freq_n", NULL); 346 prop = of_get_property(np, "freq_n", NULL);
354 if (!prop) 347 if (!prop)
355 return -ENODEV; 348 return -ENODEV;
356 pdata.freq_n = *prop; 349 pdata.freq_n = *prop;
357 350
358 prop = of_get_property(np, "timeout", NULL); 351 pdata.timeout = 1000; /* default: 1 second */
359 if (prop)
360 pdata.timeout = *prop;
361 else
362 pdata.timeout = 1000; /* 1 second */
363 352
364 pdev = platform_device_alloc(MV64XXX_I2C_CTLR_NAME, id); 353 pdev = platform_device_alloc(MV64XXX_I2C_CTLR_NAME, id);
365 if (!pdev) 354 if (!pdev)
@@ -401,10 +390,7 @@ static int __init mv64x60_wdt_device_setup(struct device_node *np, int id)
401 390
402 memset(&pdata, 0, sizeof(pdata)); 391 memset(&pdata, 0, sizeof(pdata));
403 392
404 prop = of_get_property(np, "timeout", NULL); 393 pdata.timeout = 10; /* Default: 10 seconds */
405 if (!prop)
406 return -ENODEV;
407 pdata.timeout = *prop;
408 394
409 np = of_get_parent(np); 395 np = of_get_parent(np);
410 if (!np) 396 if (!np)
@@ -441,27 +427,43 @@ error:
441 427
442static int __init mv64x60_device_setup(void) 428static int __init mv64x60_device_setup(void)
443{ 429{
444 struct device_node *np = NULL; 430 struct device_node *np, *np2;
445 int id; 431 struct platform_device *pdev;
432 int id, id2;
446 int err; 433 int err;
447 434
448 id = 0; 435 id = 0;
449 for_each_compatible_node(np, "serial", "marvell,mpsc") 436 for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc")
450 if ((err = mv64x60_mpsc_device_setup(np, id++))) 437 if ((err = mv64x60_mpsc_device_setup(np, id++)))
451 goto error; 438 goto error;
452 439
453 id = 0; 440 id = 0;
454 for_each_compatible_node(np, "network", "marvell,mv64x60-eth") 441 id2 = 0;
455 if ((err = mv64x60_eth_device_setup(np, id++))) 442 for_each_compatible_node(np, NULL, "marvell,mv64360-eth-group") {
443 pdev = mv64x60_eth_register_shared_pdev(np, id++);
444 if (IS_ERR(pdev)) {
445 err = PTR_ERR(pdev);
456 goto error; 446 goto error;
447 }
448 for_each_child_of_node(np, np2) {
449 if (!of_device_is_compatible(np2,
450 "marvell,mv64360-eth"))
451 continue;
452 err = mv64x60_eth_device_setup(np2, id2++, pdev);
453 if (err) {
454 of_node_put(np2);
455 goto error;
456 }
457 }
458 }
457 459
458 id = 0; 460 id = 0;
459 for_each_compatible_node(np, "i2c", "marvell,mv64x60-i2c") 461 for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c")
460 if ((err = mv64x60_i2c_device_setup(np, id++))) 462 if ((err = mv64x60_i2c_device_setup(np, id++)))
461 goto error; 463 goto error;
462 464
463 /* support up to one watchdog timer */ 465 /* support up to one watchdog timer */
464 np = of_find_compatible_node(np, NULL, "marvell,mv64x60-wdt"); 466 np = of_find_compatible_node(np, NULL, "marvell,mv64360-wdt");
465 if (np) { 467 if (np) {
466 if ((err = mv64x60_wdt_device_setup(np, id))) 468 if ((err = mv64x60_wdt_device_setup(np, id)))
467 goto error; 469 goto error;
@@ -489,10 +491,10 @@ static int __init mv64x60_add_mpsc_console(void)
489 if (!np) 491 if (!np)
490 goto not_mpsc; 492 goto not_mpsc;
491 493
492 if (!of_device_is_compatible(np, "marvell,mpsc")) 494 if (!of_device_is_compatible(np, "marvell,mv64360-mpsc"))
493 goto not_mpsc; 495 goto not_mpsc;
494 496
495 prop = of_get_property(np, "block-index", NULL); 497 prop = of_get_property(np, "cell-index", NULL);
496 if (!prop) 498 if (!prop)
497 goto not_mpsc; 499 goto not_mpsc;
498 500
diff --git a/arch/powerpc/sysdev/mv64x60_pci.c b/arch/powerpc/sysdev/mv64x60_pci.c
index d21ab8fa4993..1456015a22d8 100644
--- a/arch/powerpc/sysdev/mv64x60_pci.c
+++ b/arch/powerpc/sysdev/mv64x60_pci.c
@@ -86,14 +86,14 @@ static int __init mv64x60_sysfs_init(void)
86 struct platform_device *pdev; 86 struct platform_device *pdev;
87 const unsigned int *prop; 87 const unsigned int *prop;
88 88
89 np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60"); 89 np = of_find_compatible_node(NULL, NULL, "marvell,mv64360");
90 if (!np) 90 if (!np)
91 return 0; 91 return 0;
92 92
93 prop = of_get_property(np, "hs_reg_valid", NULL); 93 prop = of_get_property(np, "hs_reg_valid", NULL);
94 of_node_put(np); 94 of_node_put(np);
95 95
96 pdev = platform_device_register_simple("marvell,mv64x60", 0, NULL, 0); 96 pdev = platform_device_register_simple("marvell,mv64360", 0, NULL, 0);
97 if (IS_ERR(pdev)) 97 if (IS_ERR(pdev))
98 return PTR_ERR(pdev); 98 return PTR_ERR(pdev);
99 99
@@ -166,6 +166,6 @@ void __init mv64x60_pci_init(void)
166{ 166{
167 struct device_node *np; 167 struct device_node *np;
168 168
169 for_each_compatible_node(np, "pci", "marvell,mv64x60-pci") 169 for_each_compatible_node(np, "pci", "marvell,mv64360-pci")
170 mv64x60_add_bridge(np); 170 mv64x60_add_bridge(np);
171} 171}
diff --git a/arch/powerpc/sysdev/mv64x60_pic.c b/arch/powerpc/sysdev/mv64x60_pic.c
index 19e6ef263797..2aa4ed066db1 100644
--- a/arch/powerpc/sysdev/mv64x60_pic.c
+++ b/arch/powerpc/sysdev/mv64x60_pic.c
@@ -238,13 +238,13 @@ void __init mv64x60_init_irq(void)
238 const unsigned int *reg; 238 const unsigned int *reg;
239 unsigned long flags; 239 unsigned long flags;
240 240
241 np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-gpp"); 241 np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-gpp");
242 reg = of_get_property(np, "reg", &size); 242 reg = of_get_property(np, "reg", &size);
243 paddr = of_translate_address(np, reg); 243 paddr = of_translate_address(np, reg);
244 mv64x60_gpp_reg_base = ioremap(paddr, reg[1]); 244 mv64x60_gpp_reg_base = ioremap(paddr, reg[1]);
245 of_node_put(np); 245 of_node_put(np);
246 246
247 np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-pic"); 247 np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-pic");
248 reg = of_get_property(np, "reg", &size); 248 reg = of_get_property(np, "reg", &size);
249 paddr = of_translate_address(np, reg); 249 paddr = of_translate_address(np, reg);
250 mv64x60_irq_reg_base = ioremap(paddr, reg[1]); 250 mv64x60_irq_reg_base = ioremap(paddr, reg[1]);
diff --git a/arch/powerpc/sysdev/mv64x60_udbg.c b/arch/powerpc/sysdev/mv64x60_udbg.c
index 35c77c7d0616..ccdb3b0418fc 100644
--- a/arch/powerpc/sysdev/mv64x60_udbg.c
+++ b/arch/powerpc/sysdev/mv64x60_udbg.c
@@ -85,7 +85,7 @@ static void mv64x60_udbg_init(void)
85 if (!stdout) 85 if (!stdout)
86 return; 86 return;
87 87
88 for_each_compatible_node(np, "serial", "marvell,mpsc") { 88 for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") {
89 if (np == stdout) 89 if (np == stdout)
90 break; 90 break;
91 } 91 }
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c
index 5abfcd157483..1814adbd2236 100644
--- a/arch/powerpc/sysdev/ppc4xx_pci.c
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
@@ -527,6 +527,7 @@ static void __init ppc4xx_probe_pcix_bridge(struct device_node *np)
527 * 527 *
528 * ibm,plb-pciex-440spe 528 * ibm,plb-pciex-440spe
529 * ibm,plb-pciex-405ex 529 * ibm,plb-pciex-405ex
530 * ibm,plb-pciex-460ex
530 * 531 *
531 * Anything else will be rejected for now as they are all subtly 532 * Anything else will be rejected for now as they are all subtly
532 * different unfortunately. 533 * different unfortunately.
@@ -645,7 +646,7 @@ static int __init ppc440spe_pciex_core_init(struct device_node *np)
645 int time_out = 20; 646 int time_out = 20;
646 647
647 /* Set PLL clock receiver to LVPECL */ 648 /* Set PLL clock receiver to LVPECL */
648 mtdcri(SDR0, PESDR0_PLLLCT1, mfdcri(SDR0, PESDR0_PLLLCT1) | 1 << 28); 649 dcri_clrset(SDR0, PESDR0_PLLLCT1, 0, 1 << 28);
649 650
650 /* Shouldn't we do all the calibration stuff etc... here ? */ 651 /* Shouldn't we do all the calibration stuff etc... here ? */
651 if (ppc440spe_pciex_check_reset(np)) 652 if (ppc440spe_pciex_check_reset(np))
@@ -659,8 +660,7 @@ static int __init ppc440spe_pciex_core_init(struct device_node *np)
659 } 660 }
660 661
661 /* De-assert reset of PCIe PLL, wait for lock */ 662 /* De-assert reset of PCIe PLL, wait for lock */
662 mtdcri(SDR0, PESDR0_PLLLCT1, 663 dcri_clrset(SDR0, PESDR0_PLLLCT1, 1 << 24, 0);
663 mfdcri(SDR0, PESDR0_PLLLCT1) & ~(1 << 24));
664 udelay(3); 664 udelay(3);
665 665
666 while (time_out) { 666 while (time_out) {
@@ -712,9 +712,8 @@ static int ppc440spe_pciex_init_port_hw(struct ppc4xx_pciex_port *port)
712 mtdcri(SDR0, port->sdr_base + PESDRn_440SPE_HSSL7SET1, 712 mtdcri(SDR0, port->sdr_base + PESDRn_440SPE_HSSL7SET1,
713 0x35000000); 713 0x35000000);
714 } 714 }
715 val = mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET); 715 dcri_clrset(SDR0, port->sdr_base + PESDRn_RCSSET,
716 mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET, 716 (1 << 24) | (1 << 16), 1 << 12);
717 (val & ~(1 << 24 | 1 << 16)) | 1 << 12);
718 717
719 return 0; 718 return 0;
720} 719}
@@ -775,6 +774,115 @@ static struct ppc4xx_pciex_hwops ppc440speB_pcie_hwops __initdata =
775 .setup_utl = ppc440speB_pciex_init_utl, 774 .setup_utl = ppc440speB_pciex_init_utl,
776}; 775};
777 776
777static int __init ppc460ex_pciex_core_init(struct device_node *np)
778{
779 /* Nothing to do, return 2 ports */
780 return 2;
781}
782
783static int ppc460ex_pciex_init_port_hw(struct ppc4xx_pciex_port *port)
784{
785 u32 val;
786 u32 utlset1;
787
788 if (port->endpoint)
789 val = PTYPE_LEGACY_ENDPOINT << 20;
790 else
791 val = PTYPE_ROOT_PORT << 20;
792
793 if (port->index == 0) {
794 val |= LNKW_X1 << 12;
795 utlset1 = 0x20000000;
796 } else {
797 val |= LNKW_X4 << 12;
798 utlset1 = 0x20101101;
799 }
800
801 mtdcri(SDR0, port->sdr_base + PESDRn_DLPSET, val);
802 mtdcri(SDR0, port->sdr_base + PESDRn_UTLSET1, utlset1);
803 mtdcri(SDR0, port->sdr_base + PESDRn_UTLSET2, 0x01210000);
804
805 switch (port->index) {
806 case 0:
807 mtdcri(SDR0, PESDR0_460EX_L0CDRCTL, 0x00003230);
808 mtdcri(SDR0, PESDR0_460EX_L0DRV, 0x00000136);
809 mtdcri(SDR0, PESDR0_460EX_L0CLK, 0x00000006);
810
811 mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST,0x10000000);
812 break;
813
814 case 1:
815 mtdcri(SDR0, PESDR1_460EX_L0CDRCTL, 0x00003230);
816 mtdcri(SDR0, PESDR1_460EX_L1CDRCTL, 0x00003230);
817 mtdcri(SDR0, PESDR1_460EX_L2CDRCTL, 0x00003230);
818 mtdcri(SDR0, PESDR1_460EX_L3CDRCTL, 0x00003230);
819 mtdcri(SDR0, PESDR1_460EX_L0DRV, 0x00000136);
820 mtdcri(SDR0, PESDR1_460EX_L1DRV, 0x00000136);
821 mtdcri(SDR0, PESDR1_460EX_L2DRV, 0x00000136);
822 mtdcri(SDR0, PESDR1_460EX_L3DRV, 0x00000136);
823 mtdcri(SDR0, PESDR1_460EX_L0CLK, 0x00000006);
824 mtdcri(SDR0, PESDR1_460EX_L1CLK, 0x00000006);
825 mtdcri(SDR0, PESDR1_460EX_L2CLK, 0x00000006);
826 mtdcri(SDR0, PESDR1_460EX_L3CLK, 0x00000006);
827
828 mtdcri(SDR0, PESDR1_460EX_PHY_CTL_RST,0x10000000);
829 break;
830 }
831
832 mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
833 mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) |
834 (PESDRx_RCSSET_RSTGU | PESDRx_RCSSET_RSTPYN));
835
836 /* Poll for PHY reset */
837 /* XXX FIXME add timeout */
838 switch (port->index) {
839 case 0:
840 while (!(mfdcri(SDR0, PESDR0_460EX_RSTSTA) & 0x1))
841 udelay(10);
842 break;
843 case 1:
844 while (!(mfdcri(SDR0, PESDR1_460EX_RSTSTA) & 0x1))
845 udelay(10);
846 break;
847 }
848
849 mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
850 (mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) &
851 ~(PESDRx_RCSSET_RSTGU | PESDRx_RCSSET_RSTDL)) |
852 PESDRx_RCSSET_RSTPYN);
853
854 port->has_ibpre = 1;
855
856 return 0;
857}
858
859static int ppc460ex_pciex_init_utl(struct ppc4xx_pciex_port *port)
860{
861 dcr_write(port->dcrs, DCRO_PEGPL_SPECIAL, 0x0);
862
863 /*
864 * Set buffer allocations and then assert VRB and TXE.
865 */
866 out_be32(port->utl_base + PEUTL_PBCTL, 0x0800000c);
867 out_be32(port->utl_base + PEUTL_OUTTR, 0x08000000);
868 out_be32(port->utl_base + PEUTL_INTR, 0x02000000);
869 out_be32(port->utl_base + PEUTL_OPDBSZ, 0x04000000);
870 out_be32(port->utl_base + PEUTL_PBBSZ, 0x00000000);
871 out_be32(port->utl_base + PEUTL_IPHBSZ, 0x02000000);
872 out_be32(port->utl_base + PEUTL_IPDBSZ, 0x04000000);
873 out_be32(port->utl_base + PEUTL_RCIRQEN,0x00f00000);
874 out_be32(port->utl_base + PEUTL_PCTL, 0x80800066);
875
876 return 0;
877}
878
879static struct ppc4xx_pciex_hwops ppc460ex_pcie_hwops __initdata =
880{
881 .core_init = ppc460ex_pciex_core_init,
882 .port_init_hw = ppc460ex_pciex_init_port_hw,
883 .setup_utl = ppc460ex_pciex_init_utl,
884};
885
778#endif /* CONFIG_44x */ 886#endif /* CONFIG_44x */
779 887
780#ifdef CONFIG_40x 888#ifdef CONFIG_40x
@@ -830,17 +938,9 @@ static int ppc405ex_pciex_init_port_hw(struct ppc4xx_pciex_port *port)
830 * PCIe boards don't show this problem. 938 * PCIe boards don't show this problem.
831 * This has to be re-tested and fixed in a later release! 939 * This has to be re-tested and fixed in a later release!
832 */ 940 */
833#if 0 /* XXX FIXME: Not resetting the PHY will leave all resources
834 * configured as done previously by U-Boot. Then Linux will currently
835 * not reassign them. So the PHY reset is now done always. This will
836 * lead to problems with the Atheros PCIe board again.
837 */
838 val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP); 941 val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
839 if (!(val & 0x00001000)) 942 if (!(val & 0x00001000))
840 ppc405ex_pcie_phy_reset(port); 943 ppc405ex_pcie_phy_reset(port);
841#else
842 ppc405ex_pcie_phy_reset(port);
843#endif
844 944
845 dcr_write(port->dcrs, DCRO_PEGPL_CFG, 0x10000000); /* guarded on */ 945 dcr_write(port->dcrs, DCRO_PEGPL_CFG, 0x10000000); /* guarded on */
846 946
@@ -896,6 +996,8 @@ static int __init ppc4xx_pciex_check_core_init(struct device_node *np)
896 else 996 else
897 ppc4xx_pciex_hwops = &ppc440speB_pcie_hwops; 997 ppc4xx_pciex_hwops = &ppc440speB_pcie_hwops;
898 } 998 }
999 if (of_device_is_compatible(np, "ibm,plb-pciex-460ex"))
1000 ppc4xx_pciex_hwops = &ppc460ex_pcie_hwops;
899#endif /* CONFIG_44x */ 1001#endif /* CONFIG_44x */
900#ifdef CONFIG_40x 1002#ifdef CONFIG_40x
901 if (of_device_is_compatible(np, "ibm,plb-pciex-405ex")) 1003 if (of_device_is_compatible(np, "ibm,plb-pciex-405ex"))
@@ -1042,8 +1144,7 @@ static int __init ppc4xx_pciex_port_init(struct ppc4xx_pciex_port *port)
1042 port->link = 0; 1144 port->link = 0;
1043 } 1145 }
1044 1146
1045 mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET, 1147 dcri_clrset(SDR0, port->sdr_base + PESDRn_RCSSET, 0, 1 << 20);
1046 mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) | 1 << 20);
1047 msleep(100); 1148 msleep(100);
1048 1149
1049 return 0; 1150 return 0;
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.h b/arch/powerpc/sysdev/ppc4xx_pci.h
index 1c07908dc6ef..d04e40b306fb 100644
--- a/arch/powerpc/sysdev/ppc4xx_pci.h
+++ b/arch/powerpc/sysdev/ppc4xx_pci.h
@@ -271,6 +271,59 @@
271#define PESDR1_405EX_PHYSTA 0x044C 271#define PESDR1_405EX_PHYSTA 0x044C
272 272
273/* 273/*
274 * 460EX additional DCRs
275 */
276#define PESDR0_460EX_L0BIST 0x0308
277#define PESDR0_460EX_L0BISTSTS 0x0309
278#define PESDR0_460EX_L0CDRCTL 0x030A
279#define PESDR0_460EX_L0DRV 0x030B
280#define PESDR0_460EX_L0REC 0x030C
281#define PESDR0_460EX_L0LPB 0x030D
282#define PESDR0_460EX_L0CLK 0x030E
283#define PESDR0_460EX_PHY_CTL_RST 0x030F
284#define PESDR0_460EX_RSTSTA 0x0310
285#define PESDR0_460EX_OBS 0x0311
286#define PESDR0_460EX_L0ERRC 0x0320
287
288#define PESDR1_460EX_L0BIST 0x0348
289#define PESDR1_460EX_L1BIST 0x0349
290#define PESDR1_460EX_L2BIST 0x034A
291#define PESDR1_460EX_L3BIST 0x034B
292#define PESDR1_460EX_L0BISTSTS 0x034C
293#define PESDR1_460EX_L1BISTSTS 0x034D
294#define PESDR1_460EX_L2BISTSTS 0x034E
295#define PESDR1_460EX_L3BISTSTS 0x034F
296#define PESDR1_460EX_L0CDRCTL 0x0350
297#define PESDR1_460EX_L1CDRCTL 0x0351
298#define PESDR1_460EX_L2CDRCTL 0x0352
299#define PESDR1_460EX_L3CDRCTL 0x0353
300#define PESDR1_460EX_L0DRV 0x0354
301#define PESDR1_460EX_L1DRV 0x0355
302#define PESDR1_460EX_L2DRV 0x0356
303#define PESDR1_460EX_L3DRV 0x0357
304#define PESDR1_460EX_L0REC 0x0358
305#define PESDR1_460EX_L1REC 0x0359
306#define PESDR1_460EX_L2REC 0x035A
307#define PESDR1_460EX_L3REC 0x035B
308#define PESDR1_460EX_L0LPB 0x035C
309#define PESDR1_460EX_L1LPB 0x035D
310#define PESDR1_460EX_L2LPB 0x035E
311#define PESDR1_460EX_L3LPB 0x035F
312#define PESDR1_460EX_L0CLK 0x0360
313#define PESDR1_460EX_L1CLK 0x0361
314#define PESDR1_460EX_L2CLK 0x0362
315#define PESDR1_460EX_L3CLK 0x0363
316#define PESDR1_460EX_PHY_CTL_RST 0x0364
317#define PESDR1_460EX_RSTSTA 0x0365
318#define PESDR1_460EX_OBS 0x0366
319#define PESDR1_460EX_L0ERRC 0x0368
320#define PESDR1_460EX_L1ERRC 0x0369
321#define PESDR1_460EX_L2ERRC 0x036A
322#define PESDR1_460EX_L3ERRC 0x036B
323#define PESDR0_460EX_IHS1 0x036C
324#define PESDR0_460EX_IHS2 0x036D
325
326/*
274 * Of the above, some are common offsets from the base 327 * Of the above, some are common offsets from the base
275 */ 328 */
276#define PESDRn_UTLSET1 0x00 329#define PESDRn_UTLSET1 0x00
@@ -353,6 +406,12 @@
353#define PECFG_POM2LAL 0x390 406#define PECFG_POM2LAL 0x390
354#define PECFG_POM2LAH 0x394 407#define PECFG_POM2LAH 0x394
355 408
409/* SDR Bit Mappings */
410#define PESDRx_RCSSET_HLDPLB 0x10000000
411#define PESDRx_RCSSET_RSTGU 0x01000000
412#define PESDRx_RCSSET_RDY 0x00100000
413#define PESDRx_RCSSET_RSTDL 0x00010000
414#define PESDRx_RCSSET_RSTPYN 0x00001000
356 415
357enum 416enum
358{ 417{
diff --git a/arch/powerpc/sysdev/ppc4xx_soc.c b/arch/powerpc/sysdev/ppc4xx_soc.c
new file mode 100644
index 000000000000..5b32adc9a9b2
--- /dev/null
+++ b/arch/powerpc/sysdev/ppc4xx_soc.c
@@ -0,0 +1,200 @@
1/*
2 * IBM/AMCC PPC4xx SoC setup code
3 *
4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * L2 cache routines cloned from arch/ppc/syslib/ibm440gx_common.c which is:
7 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
8 * Copyright (c) 2003 - 2006 Zultys Technologies
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15
16#include <linux/stddef.h>
17#include <linux/kernel.h>
18#include <linux/init.h>
19#include <linux/errno.h>
20#include <linux/interrupt.h>
21#include <linux/irq.h>
22#include <linux/of_platform.h>
23
24#include <asm/dcr.h>
25#include <asm/dcr-regs.h>
26#include <asm/reg.h>
27
28static u32 dcrbase_l2c;
29
30/*
31 * L2-cache
32 */
33
34/* Issue L2C diagnostic command */
35static inline u32 l2c_diag(u32 addr)
36{
37 mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, addr);
38 mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_DIAG);
39 while (!(mfdcr(dcrbase_l2c + DCRN_L2C0_SR) & L2C_SR_CC))
40 ;
41
42 return mfdcr(dcrbase_l2c + DCRN_L2C0_DATA);
43}
44
45static irqreturn_t l2c_error_handler(int irq, void *dev)
46{
47 u32 sr = mfdcr(dcrbase_l2c + DCRN_L2C0_SR);
48
49 if (sr & L2C_SR_CPE) {
50 /* Read cache trapped address */
51 u32 addr = l2c_diag(0x42000000);
52 printk(KERN_EMERG "L2C: Cache Parity Error, addr[16:26] = 0x%08x\n",
53 addr);
54 }
55 if (sr & L2C_SR_TPE) {
56 /* Read tag trapped address */
57 u32 addr = l2c_diag(0x82000000) >> 16;
58 printk(KERN_EMERG "L2C: Tag Parity Error, addr[16:26] = 0x%08x\n",
59 addr);
60 }
61
62 /* Clear parity errors */
63 if (sr & (L2C_SR_CPE | L2C_SR_TPE)){
64 mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, 0);
65 mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE);
66 } else {
67 printk(KERN_EMERG "L2C: LRU error\n");
68 }
69
70 return IRQ_HANDLED;
71}
72
73static int __init ppc4xx_l2c_probe(void)
74{
75 struct device_node *np;
76 u32 r;
77 unsigned long flags;
78 int irq;
79 const u32 *dcrreg;
80 u32 dcrbase_isram;
81 int len;
82 const u32 *prop;
83 u32 l2_size;
84
85 np = of_find_compatible_node(NULL, NULL, "ibm,l2-cache");
86 if (!np)
87 return 0;
88
89 /* Get l2 cache size */
90 prop = of_get_property(np, "cache-size", NULL);
91 if (prop == NULL) {
92 printk(KERN_ERR "%s: Can't get cache-size!\n", np->full_name);
93 of_node_put(np);
94 return -ENODEV;
95 }
96 l2_size = prop[0];
97
98 /* Map DCRs */
99 dcrreg = of_get_property(np, "dcr-reg", &len);
100 if (!dcrreg || (len != 4 * sizeof(u32))) {
101 printk(KERN_ERR "%s: Can't get DCR register base !",
102 np->full_name);
103 of_node_put(np);
104 return -ENODEV;
105 }
106 dcrbase_isram = dcrreg[0];
107 dcrbase_l2c = dcrreg[2];
108
109 /* Get and map irq number from device tree */
110 irq = irq_of_parse_and_map(np, 0);
111 if (irq == NO_IRQ) {
112 printk(KERN_ERR "irq_of_parse_and_map failed\n");
113 of_node_put(np);
114 return -ENODEV;
115 }
116
117 /* Install error handler */
118 if (request_irq(irq, l2c_error_handler, IRQF_DISABLED, "L2C", 0) < 0) {
119 printk(KERN_ERR "Cannot install L2C error handler"
120 ", cache is not enabled\n");
121 of_node_put(np);
122 return -ENODEV;
123 }
124
125 local_irq_save(flags);
126 asm volatile ("sync" ::: "memory");
127
128 /* Disable SRAM */
129 mtdcr(dcrbase_isram + DCRN_SRAM0_DPC,
130 mfdcr(dcrbase_isram + DCRN_SRAM0_DPC) & ~SRAM_DPC_ENABLE);
131 mtdcr(dcrbase_isram + DCRN_SRAM0_SB0CR,
132 mfdcr(dcrbase_isram + DCRN_SRAM0_SB0CR) & ~SRAM_SBCR_BU_MASK);
133 mtdcr(dcrbase_isram + DCRN_SRAM0_SB1CR,
134 mfdcr(dcrbase_isram + DCRN_SRAM0_SB1CR) & ~SRAM_SBCR_BU_MASK);
135 mtdcr(dcrbase_isram + DCRN_SRAM0_SB2CR,
136 mfdcr(dcrbase_isram + DCRN_SRAM0_SB2CR) & ~SRAM_SBCR_BU_MASK);
137 mtdcr(dcrbase_isram + DCRN_SRAM0_SB3CR,
138 mfdcr(dcrbase_isram + DCRN_SRAM0_SB3CR) & ~SRAM_SBCR_BU_MASK);
139
140 /* Enable L2_MODE without ICU/DCU */
141 r = mfdcr(dcrbase_l2c + DCRN_L2C0_CFG) &
142 ~(L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_SS_MASK);
143 r |= L2C_CFG_L2M | L2C_CFG_SS_256;
144 mtdcr(dcrbase_l2c + DCRN_L2C0_CFG, r);
145
146 mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, 0);
147
148 /* Hardware Clear Command */
149 mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_HCC);
150 while (!(mfdcr(dcrbase_l2c + DCRN_L2C0_SR) & L2C_SR_CC))
151 ;
152
153 /* Clear Cache Parity and Tag Errors */
154 mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE);
155
156 /* Enable 64G snoop region starting at 0 */
157 r = mfdcr(dcrbase_l2c + DCRN_L2C0_SNP0) &
158 ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
159 r |= L2C_SNP_SSR_32G | L2C_SNP_ESR;
160 mtdcr(dcrbase_l2c + DCRN_L2C0_SNP0, r);
161
162 r = mfdcr(dcrbase_l2c + DCRN_L2C0_SNP1) &
163 ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
164 r |= 0x80000000 | L2C_SNP_SSR_32G | L2C_SNP_ESR;
165 mtdcr(dcrbase_l2c + DCRN_L2C0_SNP1, r);
166
167 asm volatile ("sync" ::: "memory");
168
169 /* Enable ICU/DCU ports */
170 r = mfdcr(dcrbase_l2c + DCRN_L2C0_CFG);
171 r &= ~(L2C_CFG_DCW_MASK | L2C_CFG_PMUX_MASK | L2C_CFG_PMIM
172 | L2C_CFG_TPEI | L2C_CFG_CPEI | L2C_CFG_NAM | L2C_CFG_NBRM);
173 r |= L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_TPC | L2C_CFG_CPC | L2C_CFG_FRAN
174 | L2C_CFG_CPIM | L2C_CFG_TPIM | L2C_CFG_LIM | L2C_CFG_SMCM;
175
176 /* Check for 460EX/GT special handling */
177 if (of_device_is_compatible(np, "ibm,l2-cache-460ex"))
178 r |= L2C_CFG_RDBW;
179
180 mtdcr(dcrbase_l2c + DCRN_L2C0_CFG, r);
181
182 asm volatile ("sync; isync" ::: "memory");
183 local_irq_restore(flags);
184
185 printk(KERN_INFO "%dk L2-cache enabled\n", l2_size >> 10);
186
187 of_node_put(np);
188 return 0;
189}
190arch_initcall(ppc4xx_l2c_probe);
191
192/*
193 * At present, this routine just applies a system reset.
194 */
195void ppc4xx_reset_system(char *cmd)
196{
197 mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_RST_SYSTEM);
198 while (1)
199 ; /* Just in case the reset doesn't work */
200}
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c
index cc81fd1141b0..cff550eec7e8 100644
--- a/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/arch/powerpc/sysdev/qe_lib/qe.c
@@ -55,7 +55,7 @@ struct qe_snum {
55/* We allocate this here because it is used almost exclusively for 55/* We allocate this here because it is used almost exclusively for
56 * the communication processor devices. 56 * the communication processor devices.
57 */ 57 */
58struct qe_immap *qe_immr = NULL; 58struct qe_immap __iomem *qe_immr;
59EXPORT_SYMBOL(qe_immr); 59EXPORT_SYMBOL(qe_immr);
60 60
61static struct qe_snum snums[QE_NUM_OF_SNUM]; /* Dynamically allocated SNUMs */ 61static struct qe_snum snums[QE_NUM_OF_SNUM]; /* Dynamically allocated SNUMs */
@@ -156,7 +156,7 @@ EXPORT_SYMBOL(qe_issue_cmd);
156 */ 156 */
157static unsigned int brg_clk = 0; 157static unsigned int brg_clk = 0;
158 158
159unsigned int get_brg_clk(void) 159unsigned int qe_get_brg_clk(void)
160{ 160{
161 struct device_node *qe; 161 struct device_node *qe;
162 unsigned int size; 162 unsigned int size;
@@ -180,6 +180,7 @@ unsigned int get_brg_clk(void)
180 180
181 return brg_clk; 181 return brg_clk;
182} 182}
183EXPORT_SYMBOL(qe_get_brg_clk);
183 184
184/* Program the BRG to the given sampling rate and multiplier 185/* Program the BRG to the given sampling rate and multiplier
185 * 186 *
@@ -197,7 +198,7 @@ int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier)
197 if ((brg < QE_BRG1) || (brg > QE_BRG16)) 198 if ((brg < QE_BRG1) || (brg > QE_BRG16))
198 return -EINVAL; 199 return -EINVAL;
199 200
200 divisor = get_brg_clk() / (rate * multiplier); 201 divisor = qe_get_brg_clk() / (rate * multiplier);
201 202
202 if (divisor > QE_BRGC_DIVISOR_MAX + 1) { 203 if (divisor > QE_BRGC_DIVISOR_MAX + 1) {
203 div16 = QE_BRGC_DIV16; 204 div16 = QE_BRGC_DIV16;
@@ -415,12 +416,6 @@ void qe_muram_dump(void)
415} 416}
416EXPORT_SYMBOL(qe_muram_dump); 417EXPORT_SYMBOL(qe_muram_dump);
417 418
418void *qe_muram_addr(unsigned long offset)
419{
420 return (void *)&qe_immr->muram[offset];
421}
422EXPORT_SYMBOL(qe_muram_addr);
423
424/* The maximum number of RISCs we support */ 419/* The maximum number of RISCs we support */
425#define MAX_QE_RISC 2 420#define MAX_QE_RISC 2
426 421
diff --git a/arch/powerpc/sysdev/qe_lib/qe_io.c b/arch/powerpc/sysdev/qe_lib/qe_io.c
index e53ea4d374a0..93916a48afec 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_io.c
+++ b/arch/powerpc/sysdev/qe_lib/qe_io.c
@@ -22,6 +22,7 @@
22#include <linux/ioport.h> 22#include <linux/ioport.h>
23 23
24#include <asm/io.h> 24#include <asm/io.h>
25#include <asm/qe.h>
25#include <asm/prom.h> 26#include <asm/prom.h>
26#include <sysdev/fsl_soc.h> 27#include <sysdev/fsl_soc.h>
27 28
@@ -41,7 +42,7 @@ struct port_regs {
41#endif 42#endif
42}; 43};
43 44
44static struct port_regs *par_io = NULL; 45static struct port_regs __iomem *par_io;
45static int num_par_io_ports = 0; 46static int num_par_io_ports = 0;
46 47
47int par_io_init(struct device_node *np) 48int par_io_init(struct device_node *np)
@@ -165,7 +166,7 @@ int par_io_of_config(struct device_node *np)
165 } 166 }
166 167
167 ph = of_get_property(np, "pio-handle", NULL); 168 ph = of_get_property(np, "pio-handle", NULL);
168 if (ph == 0) { 169 if (ph == NULL) {
169 printk(KERN_ERR "pio-handle not available \n"); 170 printk(KERN_ERR "pio-handle not available \n");
170 return -1; 171 return -1;
171 } 172 }
@@ -200,7 +201,7 @@ static void dump_par_io(void)
200{ 201{
201 unsigned int i; 202 unsigned int i;
202 203
203 printk(KERN_INFO "%s: par_io=%p\n", __FUNCTION__, par_io); 204 printk(KERN_INFO "%s: par_io=%p\n", __func__, par_io);
204 for (i = 0; i < num_par_io_ports; i++) { 205 for (i = 0; i < num_par_io_ports; i++) {
205 printk(KERN_INFO " cpodr[%u]=%08x\n", i, 206 printk(KERN_INFO " cpodr[%u]=%08x\n", i,
206 in_be32(&par_io[i].cpodr)); 207 in_be32(&par_io[i].cpodr));
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_fast.c b/arch/powerpc/sysdev/qe_lib/ucc_fast.c
index 3223acbc39e5..bcf88e6ce962 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c
+++ b/arch/powerpc/sysdev/qe_lib/ucc_fast.c
@@ -148,57 +148,57 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
148 148
149 /* check if the UCC port number is in range. */ 149 /* check if the UCC port number is in range. */
150 if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) { 150 if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) {
151 printk(KERN_ERR "%s: illegal UCC number\n", __FUNCTION__); 151 printk(KERN_ERR "%s: illegal UCC number\n", __func__);
152 return -EINVAL; 152 return -EINVAL;
153 } 153 }
154 154
155 /* Check that 'max_rx_buf_length' is properly aligned (4). */ 155 /* Check that 'max_rx_buf_length' is properly aligned (4). */
156 if (uf_info->max_rx_buf_length & (UCC_FAST_MRBLR_ALIGNMENT - 1)) { 156 if (uf_info->max_rx_buf_length & (UCC_FAST_MRBLR_ALIGNMENT - 1)) {
157 printk(KERN_ERR "%s: max_rx_buf_length not aligned\n", 157 printk(KERN_ERR "%s: max_rx_buf_length not aligned\n",
158 __FUNCTION__); 158 __func__);
159 return -EINVAL; 159 return -EINVAL;
160 } 160 }
161 161
162 /* Validate Virtual Fifo register values */ 162 /* Validate Virtual Fifo register values */
163 if (uf_info->urfs < UCC_FAST_URFS_MIN_VAL) { 163 if (uf_info->urfs < UCC_FAST_URFS_MIN_VAL) {
164 printk(KERN_ERR "%s: urfs is too small\n", __FUNCTION__); 164 printk(KERN_ERR "%s: urfs is too small\n", __func__);
165 return -EINVAL; 165 return -EINVAL;
166 } 166 }
167 167
168 if (uf_info->urfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 168 if (uf_info->urfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
169 printk(KERN_ERR "%s: urfs is not aligned\n", __FUNCTION__); 169 printk(KERN_ERR "%s: urfs is not aligned\n", __func__);
170 return -EINVAL; 170 return -EINVAL;
171 } 171 }
172 172
173 if (uf_info->urfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 173 if (uf_info->urfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
174 printk(KERN_ERR "%s: urfet is not aligned.\n", __FUNCTION__); 174 printk(KERN_ERR "%s: urfet is not aligned.\n", __func__);
175 return -EINVAL; 175 return -EINVAL;
176 } 176 }
177 177
178 if (uf_info->urfset & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 178 if (uf_info->urfset & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
179 printk(KERN_ERR "%s: urfset is not aligned\n", __FUNCTION__); 179 printk(KERN_ERR "%s: urfset is not aligned\n", __func__);
180 return -EINVAL; 180 return -EINVAL;
181 } 181 }
182 182
183 if (uf_info->utfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 183 if (uf_info->utfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
184 printk(KERN_ERR "%s: utfs is not aligned\n", __FUNCTION__); 184 printk(KERN_ERR "%s: utfs is not aligned\n", __func__);
185 return -EINVAL; 185 return -EINVAL;
186 } 186 }
187 187
188 if (uf_info->utfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 188 if (uf_info->utfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
189 printk(KERN_ERR "%s: utfet is not aligned\n", __FUNCTION__); 189 printk(KERN_ERR "%s: utfet is not aligned\n", __func__);
190 return -EINVAL; 190 return -EINVAL;
191 } 191 }
192 192
193 if (uf_info->utftt & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) { 193 if (uf_info->utftt & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
194 printk(KERN_ERR "%s: utftt is not aligned\n", __FUNCTION__); 194 printk(KERN_ERR "%s: utftt is not aligned\n", __func__);
195 return -EINVAL; 195 return -EINVAL;
196 } 196 }
197 197
198 uccf = kzalloc(sizeof(struct ucc_fast_private), GFP_KERNEL); 198 uccf = kzalloc(sizeof(struct ucc_fast_private), GFP_KERNEL);
199 if (!uccf) { 199 if (!uccf) {
200 printk(KERN_ERR "%s: Cannot allocate private data\n", 200 printk(KERN_ERR "%s: Cannot allocate private data\n",
201 __FUNCTION__); 201 __func__);
202 return -ENOMEM; 202 return -ENOMEM;
203 } 203 }
204 204
@@ -207,7 +207,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
207 /* Set the PHY base address */ 207 /* Set the PHY base address */
208 uccf->uf_regs = ioremap(uf_info->regs, sizeof(struct ucc_fast)); 208 uccf->uf_regs = ioremap(uf_info->regs, sizeof(struct ucc_fast));
209 if (uccf->uf_regs == NULL) { 209 if (uccf->uf_regs == NULL) {
210 printk(KERN_ERR "%s: Cannot map UCC registers\n", __FUNCTION__); 210 printk(KERN_ERR "%s: Cannot map UCC registers\n", __func__);
211 return -ENOMEM; 211 return -ENOMEM;
212 } 212 }
213 213
@@ -230,7 +230,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
230 /* Set UCC to fast type */ 230 /* Set UCC to fast type */
231 ret = ucc_set_type(uf_info->ucc_num, UCC_SPEED_TYPE_FAST); 231 ret = ucc_set_type(uf_info->ucc_num, UCC_SPEED_TYPE_FAST);
232 if (ret) { 232 if (ret) {
233 printk(KERN_ERR "%s: cannot set UCC type\n", __FUNCTION__); 233 printk(KERN_ERR "%s: cannot set UCC type\n", __func__);
234 ucc_fast_free(uccf); 234 ucc_fast_free(uccf);
235 return ret; 235 return ret;
236 } 236 }
@@ -270,7 +270,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
270 qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT); 270 qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
271 if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) { 271 if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
272 printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n", 272 printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n",
273 __FUNCTION__); 273 __func__);
274 uccf->ucc_fast_tx_virtual_fifo_base_offset = 0; 274 uccf->ucc_fast_tx_virtual_fifo_base_offset = 0;
275 ucc_fast_free(uccf); 275 ucc_fast_free(uccf);
276 return -ENOMEM; 276 return -ENOMEM;
@@ -283,7 +283,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
283 UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT); 283 UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
284 if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) { 284 if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
285 printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n", 285 printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n",
286 __FUNCTION__); 286 __func__);
287 uccf->ucc_fast_rx_virtual_fifo_base_offset = 0; 287 uccf->ucc_fast_rx_virtual_fifo_base_offset = 0;
288 ucc_fast_free(uccf); 288 ucc_fast_free(uccf);
289 return -ENOMEM; 289 return -ENOMEM;
@@ -314,7 +314,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
314 ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->rx_clock, 314 ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->rx_clock,
315 COMM_DIR_RX)) { 315 COMM_DIR_RX)) {
316 printk(KERN_ERR "%s: illegal value for RX clock\n", 316 printk(KERN_ERR "%s: illegal value for RX clock\n",
317 __FUNCTION__); 317 __func__);
318 ucc_fast_free(uccf); 318 ucc_fast_free(uccf);
319 return -EINVAL; 319 return -EINVAL;
320 } 320 }
@@ -323,7 +323,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
323 ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->tx_clock, 323 ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->tx_clock,
324 COMM_DIR_TX)) { 324 COMM_DIR_TX)) {
325 printk(KERN_ERR "%s: illegal value for TX clock\n", 325 printk(KERN_ERR "%s: illegal value for TX clock\n",
326 __FUNCTION__); 326 __func__);
327 ucc_fast_free(uccf); 327 ucc_fast_free(uccf);
328 return -EINVAL; 328 return -EINVAL;
329 } 329 }
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_slow.c b/arch/powerpc/sysdev/qe_lib/ucc_slow.c
index b2870b208ddb..a578bc77b9d5 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c
+++ b/arch/powerpc/sysdev/qe_lib/ucc_slow.c
@@ -142,7 +142,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
142 142
143 /* check if the UCC port number is in range. */ 143 /* check if the UCC port number is in range. */
144 if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) { 144 if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) {
145 printk(KERN_ERR "%s: illegal UCC number\n", __FUNCTION__); 145 printk(KERN_ERR "%s: illegal UCC number\n", __func__);
146 return -EINVAL; 146 return -EINVAL;
147 } 147 }
148 148
@@ -161,7 +161,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
161 uccs = kzalloc(sizeof(struct ucc_slow_private), GFP_KERNEL); 161 uccs = kzalloc(sizeof(struct ucc_slow_private), GFP_KERNEL);
162 if (!uccs) { 162 if (!uccs) {
163 printk(KERN_ERR "%s: Cannot allocate private data\n", 163 printk(KERN_ERR "%s: Cannot allocate private data\n",
164 __FUNCTION__); 164 __func__);
165 return -ENOMEM; 165 return -ENOMEM;
166 } 166 }
167 167
@@ -170,7 +170,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
170 /* Set the PHY base address */ 170 /* Set the PHY base address */
171 uccs->us_regs = ioremap(us_info->regs, sizeof(struct ucc_slow)); 171 uccs->us_regs = ioremap(us_info->regs, sizeof(struct ucc_slow));
172 if (uccs->us_regs == NULL) { 172 if (uccs->us_regs == NULL) {
173 printk(KERN_ERR "%s: Cannot map UCC registers\n", __FUNCTION__); 173 printk(KERN_ERR "%s: Cannot map UCC registers\n", __func__);
174 return -ENOMEM; 174 return -ENOMEM;
175 } 175 }
176 176
@@ -189,7 +189,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
189 uccs->us_pram_offset = 189 uccs->us_pram_offset =
190 qe_muram_alloc(UCC_SLOW_PRAM_SIZE, ALIGNMENT_OF_UCC_SLOW_PRAM); 190 qe_muram_alloc(UCC_SLOW_PRAM_SIZE, ALIGNMENT_OF_UCC_SLOW_PRAM);
191 if (IS_ERR_VALUE(uccs->us_pram_offset)) { 191 if (IS_ERR_VALUE(uccs->us_pram_offset)) {
192 printk(KERN_ERR "%s: cannot allocate MURAM for PRAM", __FUNCTION__); 192 printk(KERN_ERR "%s: cannot allocate MURAM for PRAM", __func__);
193 ucc_slow_free(uccs); 193 ucc_slow_free(uccs);
194 return -ENOMEM; 194 return -ENOMEM;
195 } 195 }
@@ -202,7 +202,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
202 /* Set UCC to slow type */ 202 /* Set UCC to slow type */
203 ret = ucc_set_type(us_info->ucc_num, UCC_SPEED_TYPE_SLOW); 203 ret = ucc_set_type(us_info->ucc_num, UCC_SPEED_TYPE_SLOW);
204 if (ret) { 204 if (ret) {
205 printk(KERN_ERR "%s: cannot set UCC type", __FUNCTION__); 205 printk(KERN_ERR "%s: cannot set UCC type", __func__);
206 ucc_slow_free(uccs); 206 ucc_slow_free(uccs);
207 return ret; 207 return ret;
208 } 208 }
@@ -216,7 +216,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
216 qe_muram_alloc(us_info->rx_bd_ring_len * sizeof(struct qe_bd), 216 qe_muram_alloc(us_info->rx_bd_ring_len * sizeof(struct qe_bd),
217 QE_ALIGNMENT_OF_BD); 217 QE_ALIGNMENT_OF_BD);
218 if (IS_ERR_VALUE(uccs->rx_base_offset)) { 218 if (IS_ERR_VALUE(uccs->rx_base_offset)) {
219 printk(KERN_ERR "%s: cannot allocate %u RX BDs\n", __FUNCTION__, 219 printk(KERN_ERR "%s: cannot allocate %u RX BDs\n", __func__,
220 us_info->rx_bd_ring_len); 220 us_info->rx_bd_ring_len);
221 uccs->rx_base_offset = 0; 221 uccs->rx_base_offset = 0;
222 ucc_slow_free(uccs); 222 ucc_slow_free(uccs);
@@ -227,7 +227,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
227 qe_muram_alloc(us_info->tx_bd_ring_len * sizeof(struct qe_bd), 227 qe_muram_alloc(us_info->tx_bd_ring_len * sizeof(struct qe_bd),
228 QE_ALIGNMENT_OF_BD); 228 QE_ALIGNMENT_OF_BD);
229 if (IS_ERR_VALUE(uccs->tx_base_offset)) { 229 if (IS_ERR_VALUE(uccs->tx_base_offset)) {
230 printk(KERN_ERR "%s: cannot allocate TX BDs", __FUNCTION__); 230 printk(KERN_ERR "%s: cannot allocate TX BDs", __func__);
231 uccs->tx_base_offset = 0; 231 uccs->tx_base_offset = 0;
232 ucc_slow_free(uccs); 232 ucc_slow_free(uccs);
233 return -ENOMEM; 233 return -ENOMEM;
@@ -317,7 +317,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
317 if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->rx_clock, 317 if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->rx_clock,
318 COMM_DIR_RX)) { 318 COMM_DIR_RX)) {
319 printk(KERN_ERR "%s: illegal value for RX clock\n", 319 printk(KERN_ERR "%s: illegal value for RX clock\n",
320 __FUNCTION__); 320 __func__);
321 ucc_slow_free(uccs); 321 ucc_slow_free(uccs);
322 return -EINVAL; 322 return -EINVAL;
323 } 323 }
@@ -325,7 +325,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
325 if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->tx_clock, 325 if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->tx_clock,
326 COMM_DIR_TX)) { 326 COMM_DIR_TX)) {
327 printk(KERN_ERR "%s: illegal value for TX clock\n", 327 printk(KERN_ERR "%s: illegal value for TX clock\n",
328 __FUNCTION__); 328 __func__);
329 ucc_slow_free(uccs); 329 ucc_slow_free(uccs);
330 return -EINVAL; 330 return -EINVAL;
331 } 331 }
diff --git a/arch/powerpc/sysdev/rtc_cmos_setup.c b/arch/powerpc/sysdev/rtc_cmos_setup.c
index 0c9ac7ee08fb..c09ddc0dbeb3 100644
--- a/arch/powerpc/sysdev/rtc_cmos_setup.c
+++ b/arch/powerpc/sysdev/rtc_cmos_setup.c
@@ -56,3 +56,5 @@ static int __init add_rtc(void)
56 return 0; 56 return 0;
57} 57}
58fs_initcall(add_rtc); 58fs_initcall(add_rtc);
59
60MODULE_LICENSE("GPL");
diff --git a/arch/powerpc/sysdev/tsi108_dev.c b/arch/powerpc/sysdev/tsi108_dev.c
index be2808a292f7..d4d15aaf18fa 100644
--- a/arch/powerpc/sysdev/tsi108_dev.c
+++ b/arch/powerpc/sysdev/tsi108_dev.c
@@ -84,7 +84,7 @@ static int __init tsi108_eth_of_init(void)
84 84
85 ret = of_address_to_resource(np, 0, &r[0]); 85 ret = of_address_to_resource(np, 0, &r[0]);
86 DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n", 86 DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n",
87 __FUNCTION__,r[0].name, r[0].start, r[0].end); 87 __func__,r[0].name, r[0].start, r[0].end);
88 if (ret) 88 if (ret)
89 goto err; 89 goto err;
90 90
@@ -93,7 +93,7 @@ static int __init tsi108_eth_of_init(void)
93 r[1].end = irq_of_parse_and_map(np, 0); 93 r[1].end = irq_of_parse_and_map(np, 0);
94 r[1].flags = IORESOURCE_IRQ; 94 r[1].flags = IORESOURCE_IRQ;
95 DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n", 95 DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n",
96 __FUNCTION__,r[1].name, r[1].start, r[1].end); 96 __func__,r[1].name, r[1].start, r[1].end);
97 97
98 tsi_eth_dev = 98 tsi_eth_dev =
99 platform_device_register_simple("tsi-ethernet", i++, &r[0], 99 platform_device_register_simple("tsi-ethernet", i++, &r[0],
diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
index 31d3d33d91fc..ac1a72dc21e5 100644
--- a/arch/powerpc/sysdev/tsi108_pci.c
+++ b/arch/powerpc/sysdev/tsi108_pci.c
@@ -207,7 +207,7 @@ int __init tsi108_setup_pci(struct device_node *dev, u32 cfg_phys, int primary)
207 /* PCI Config mapping */ 207 /* PCI Config mapping */
208 tsi108_pci_cfg_base = (u32)ioremap(cfg_phys, TSI108_PCI_CFG_SIZE); 208 tsi108_pci_cfg_base = (u32)ioremap(cfg_phys, TSI108_PCI_CFG_SIZE);
209 tsi108_pci_cfg_phys = cfg_phys; 209 tsi108_pci_cfg_phys = cfg_phys;
210 DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __FUNCTION__, 210 DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __func__,
211 tsi108_pci_cfg_base); 211 tsi108_pci_cfg_base);
212 212
213 /* Fetch host bridge registers address */ 213 /* Fetch host bridge registers address */
@@ -395,7 +395,7 @@ static int pci_irq_host_xlate(struct irq_host *h, struct device_node *ct,
395static int pci_irq_host_map(struct irq_host *h, unsigned int virq, 395static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
396 irq_hw_number_t hw) 396 irq_hw_number_t hw)
397{ unsigned int irq; 397{ unsigned int irq;
398 DBG("%s(%d, 0x%lx)\n", __FUNCTION__, virq, hw); 398 DBG("%s(%d, 0x%lx)\n", __func__, virq, hw);
399 if ((virq >= 1) && (virq <= 4)){ 399 if ((virq >= 1) && (virq <= 4)){
400 irq = virq + IRQ_PCI_INTAD_BASE - 1; 400 irq = virq + IRQ_PCI_INTAD_BASE - 1;
401 get_irq_desc(irq)->status |= IRQ_LEVEL; 401 get_irq_desc(irq)->status |= IRQ_LEVEL;
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index a34172ddc468..52c74780f403 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -45,7 +45,6 @@
45#ifdef CONFIG_PPC64 45#ifdef CONFIG_PPC64
46#include <asm/hvcall.h> 46#include <asm/hvcall.h>
47#include <asm/paca.h> 47#include <asm/paca.h>
48#include <asm/iseries/it_lp_reg_save.h>
49#endif 48#endif
50 49
51#include "nonstdio.h" 50#include "nonstdio.h"
@@ -1244,15 +1243,12 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
1244 1243
1245static int xmon_depth_to_print = 64; 1244static int xmon_depth_to_print = 64;
1246 1245
1247#ifdef CONFIG_PPC64 1246#define LRSAVE_OFFSET (STACK_FRAME_LR_SAVE * sizeof(unsigned long))
1248#define LRSAVE_OFFSET 0x10 1247#define MARKER_OFFSET (STACK_FRAME_MARKER * sizeof(unsigned long))
1249#define REG_FRAME_MARKER 0x7265677368657265ul /* "regshere" */ 1248
1250#define MARKER_OFFSET 0x60 1249#ifdef __powerpc64__
1251#define REGS_OFFSET 0x70 1250#define REGS_OFFSET 0x70
1252#else 1251#else
1253#define LRSAVE_OFFSET 4
1254#define REG_FRAME_MARKER 0x72656773
1255#define MARKER_OFFSET 8
1256#define REGS_OFFSET 16 1252#define REGS_OFFSET 16
1257#endif 1253#endif
1258 1254
@@ -1318,7 +1314,7 @@ static void xmon_show_stack(unsigned long sp, unsigned long lr,
1318 /* Look for "regshere" marker to see if this is 1314 /* Look for "regshere" marker to see if this is
1319 an exception frame. */ 1315 an exception frame. */
1320 if (mread(sp + MARKER_OFFSET, &marker, sizeof(unsigned long)) 1316 if (mread(sp + MARKER_OFFSET, &marker, sizeof(unsigned long))
1321 && marker == REG_FRAME_MARKER) { 1317 && marker == STACK_FRAME_REGS_MARKER) {
1322 if (mread(sp + REGS_OFFSET, &regs, sizeof(regs)) 1318 if (mread(sp + REGS_OFFSET, &regs, sizeof(regs))
1323 != sizeof(regs)) { 1319 != sizeof(regs)) {
1324 printf("Couldn't read registers at %lx\n", 1320 printf("Couldn't read registers at %lx\n",
@@ -1598,7 +1594,6 @@ void super_regs(void)
1598 if (firmware_has_feature(FW_FEATURE_ISERIES)) { 1594 if (firmware_has_feature(FW_FEATURE_ISERIES)) {
1599 struct paca_struct *ptrPaca; 1595 struct paca_struct *ptrPaca;
1600 struct lppaca *ptrLpPaca; 1596 struct lppaca *ptrLpPaca;
1601 struct ItLpRegSave *ptrLpRegSave;
1602 1597
1603 /* Dump out relevant Paca data areas. */ 1598 /* Dump out relevant Paca data areas. */
1604 printf("Paca: \n"); 1599 printf("Paca: \n");
@@ -1611,15 +1606,6 @@ void super_regs(void)
1611 printf(" Saved Gpr3=%.16lx Saved Gpr4=%.16lx \n", 1606 printf(" Saved Gpr3=%.16lx Saved Gpr4=%.16lx \n",
1612 ptrLpPaca->saved_gpr3, ptrLpPaca->saved_gpr4); 1607 ptrLpPaca->saved_gpr3, ptrLpPaca->saved_gpr4);
1613 printf(" Saved Gpr5=%.16lx \n", ptrLpPaca->saved_gpr5); 1608 printf(" Saved Gpr5=%.16lx \n", ptrLpPaca->saved_gpr5);
1614
1615 printf(" Local Processor Register Save Area (LpRegSave): \n");
1616 ptrLpRegSave = ptrPaca->reg_save_ptr;
1617 printf(" Saved Sprg0=%.16lx Saved Sprg1=%.16lx \n",
1618 ptrLpRegSave->xSPRG0, ptrLpRegSave->xSPRG0);
1619 printf(" Saved Sprg2=%.16lx Saved Sprg3=%.16lx \n",
1620 ptrLpRegSave->xSPRG2, ptrLpRegSave->xSPRG3);
1621 printf(" Saved Msr =%.16lx Saved Nia =%.16lx \n",
1622 ptrLpRegSave->xMSR, ptrLpRegSave->xNIA);
1623 } 1609 }
1624#endif 1610#endif
1625 1611
diff --git a/arch/ppc/8xx_io/commproc.c b/arch/ppc/8xx_io/commproc.c
index 9d656de0f0f1..752443df5ecf 100644
--- a/arch/ppc/8xx_io/commproc.c
+++ b/arch/ppc/8xx_io/commproc.c
@@ -43,7 +43,7 @@
43({ \ 43({ \
44 u32 offset = offsetof(immap_t, member); \ 44 u32 offset = offsetof(immap_t, member); \
45 void *addr = ioremap (IMAP_ADDR + offset, \ 45 void *addr = ioremap (IMAP_ADDR + offset, \
46 sizeof( ((immap_t*)0)->member)); \ 46 FIELD_SIZEOF(immap_t, member)); \
47 addr; \ 47 addr; \
48}) 48})
49 49
diff --git a/arch/ppc/8xx_io/fec.c b/arch/ppc/8xx_io/fec.c
index 11b0aa6ca97e..1d4b49ad0d7f 100644
--- a/arch/ppc/8xx_io/fec.c
+++ b/arch/ppc/8xx_io/fec.c
@@ -520,7 +520,7 @@ fec_enet_interrupt(int irq, void * dev_id)
520#ifdef CONFIG_USE_MDIO 520#ifdef CONFIG_USE_MDIO
521 fec_enet_mii(dev); 521 fec_enet_mii(dev);
522#else 522#else
523printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__,__LINE__,__FUNCTION__); 523printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__, __LINE__, __func__);
524#endif /* CONFIG_USE_MDIO */ 524#endif /* CONFIG_USE_MDIO */
525 } 525 }
526 526
@@ -1441,7 +1441,7 @@ irqreturn_t mii_link_interrupt(int irq, void * dev_id)
1441 fecp->fec_ecntrl = ecntrl; /* restore old settings */ 1441 fecp->fec_ecntrl = ecntrl; /* restore old settings */
1442 } 1442 }
1443#else 1443#else
1444printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__); 1444printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__, __LINE__, __func__);
1445#endif /* CONFIG_USE_MDIO */ 1445#endif /* CONFIG_USE_MDIO */
1446 1446
1447#ifndef CONFIG_RPXCLASSIC 1447#ifndef CONFIG_RPXCLASSIC
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S
index 1b0ec7202dd5..e7e642b95138 100644
--- a/arch/ppc/kernel/head.S
+++ b/arch/ppc/kernel/head.S
@@ -701,23 +701,6 @@ load_up_altivec:
701 b fast_exception_return 701 b fast_exception_return
702 702
703/* 703/*
704 * AltiVec unavailable trap from kernel - print a message, but let
705 * the task use AltiVec in the kernel until it returns to user mode.
706 */
707KernelAltiVec:
708 lwz r3,_MSR(r1)
709 oris r3,r3,MSR_VEC@h
710 stw r3,_MSR(r1) /* enable use of AltiVec after return */
711 lis r3,87f@h
712 ori r3,r3,87f@l
713 mr r4,r2 /* current */
714 lwz r5,_NIP(r1)
715 bl printk
716 b ret_from_except
71787: .string "AltiVec used in kernel (task=%p, pc=%x) \n"
718 .align 4,0
719
720/*
721 * giveup_altivec(tsk) 704 * giveup_altivec(tsk)
722 * Disable AltiVec for the task given as the argument, 705 * Disable AltiVec for the task given as the argument,
723 * and save the AltiVec registers in its thread_struct. 706 * and save the AltiVec registers in its thread_struct.
diff --git a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c
index 7444df3889c5..1a63711081b5 100644
--- a/arch/ppc/mm/init.c
+++ b/arch/ppc/mm/init.c
@@ -109,7 +109,6 @@ void show_mem(void)
109 109
110 printk("Mem-info:\n"); 110 printk("Mem-info:\n");
111 show_free_areas(); 111 show_free_areas();
112 printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
113 i = max_mapnr; 112 i = max_mapnr;
114 while (i-- > 0) { 113 while (i-- > 0) {
115 total++; 114 total++;
diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c
index 179b4a99b5b5..f1dee1e87809 100644
--- a/arch/ppc/platforms/radstone_ppc7d.c
+++ b/arch/ppc/platforms/radstone_ppc7d.c
@@ -511,7 +511,7 @@ static void __init ppc7d_init_irq(void)
511{ 511{
512 int irq; 512 int irq;
513 513
514 pr_debug("%s\n", __FUNCTION__); 514 pr_debug("%s\n", __func__);
515 i8259_init(0, 0); 515 i8259_init(0, 0);
516 mv64360_init_irq(); 516 mv64360_init_irq();
517 517
@@ -568,7 +568,7 @@ static int __init ppc7d_map_irq(struct pci_dev *dev, unsigned char idsel,
568 }; 568 };
569 const long min_idsel = 10, max_idsel = 14, irqs_per_slot = 4; 569 const long min_idsel = 10, max_idsel = 14, irqs_per_slot = 4;
570 570
571 pr_debug("%s: %04x/%04x/%x: idsel=%hx pin=%hu\n", __FUNCTION__, 571 pr_debug("%s: %04x/%04x/%x: idsel=%hx pin=%hu\n", __func__,
572 dev->vendor, dev->device, PCI_FUNC(dev->devfn), idsel, pin); 572 dev->vendor, dev->device, PCI_FUNC(dev->devfn), idsel, pin);
573 573
574 return PCI_IRQ_TABLE_LOOKUP; 574 return PCI_IRQ_TABLE_LOOKUP;
@@ -1299,7 +1299,7 @@ static void ppc7d_init2(void)
1299 u32 data; 1299 u32 data;
1300 u8 data8; 1300 u8 data8;
1301 1301
1302 pr_debug("%s: enter\n", __FUNCTION__); 1302 pr_debug("%s: enter\n", __func__);
1303 1303
1304 /* Wait for debugger? */ 1304 /* Wait for debugger? */
1305 if (ppc7d_wait_debugger) { 1305 if (ppc7d_wait_debugger) {
@@ -1332,7 +1332,7 @@ static void ppc7d_init2(void)
1332 ppc_md.set_rtc_time = ppc7d_set_rtc_time; 1332 ppc_md.set_rtc_time = ppc7d_set_rtc_time;
1333 ppc_md.get_rtc_time = ppc7d_get_rtc_time; 1333 ppc_md.get_rtc_time = ppc7d_get_rtc_time;
1334 1334
1335 pr_debug("%s: exit\n", __FUNCTION__); 1335 pr_debug("%s: exit\n", __func__);
1336} 1336}
1337 1337
1338/* Called from machine_init(), early, before any of the __init functions 1338/* Called from machine_init(), early, before any of the __init functions
diff --git a/arch/ppc/syslib/mpc52xx_setup.c b/arch/ppc/syslib/mpc52xx_setup.c
index 9f504fc7693e..ab0cf4ced9e5 100644
--- a/arch/ppc/syslib/mpc52xx_setup.c
+++ b/arch/ppc/syslib/mpc52xx_setup.c
@@ -279,7 +279,7 @@ int mpc52xx_match_psc_function(int psc_idx, const char *func)
279 279
280int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv) 280int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv)
281{ 281{
282 static spinlock_t lock = SPIN_LOCK_UNLOCKED; 282 static DEFINE_SPINLOCK(lock);
283 struct mpc52xx_cdm __iomem *cdm; 283 struct mpc52xx_cdm __iomem *cdm;
284 unsigned long flags; 284 unsigned long flags;
285 u16 mclken_div; 285 u16 mclken_div;
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index 463d1be32c98..2667a9dee11d 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -16,6 +16,7 @@ config SPARC64
16 bool 16 bool
17 default y 17 default y
18 select HAVE_IDE 18 select HAVE_IDE
19 select HAVE_LMB
19 help 20 help
20 SPARC is a family of RISC microprocessors designed and marketed by 21 SPARC is a family of RISC microprocessors designed and marketed by
21 Sun Microsystems, incorporated. This port covers the newer 64-bit 22 Sun Microsystems, incorporated. This port covers the newer 64-bit
diff --git a/drivers/block/viodasd.c b/drivers/block/viodasd.c
index 41ca721d2523..ebfe038d859e 100644
--- a/drivers/block/viodasd.c
+++ b/drivers/block/viodasd.c
@@ -69,7 +69,7 @@ MODULE_LICENSE("GPL");
69enum { 69enum {
70 PARTITION_SHIFT = 3, 70 PARTITION_SHIFT = 3,
71 MAX_DISKNO = HVMAXARCHITECTEDVIRTUALDISKS, 71 MAX_DISKNO = HVMAXARCHITECTEDVIRTUALDISKS,
72 MAX_DISK_NAME = sizeof(((struct gendisk *)0)->disk_name) 72 MAX_DISK_NAME = FIELD_SIZEOF(struct gendisk, disk_name)
73}; 73};
74 74
75static DEFINE_SPINLOCK(viodasd_spinlock); 75static DEFINE_SPINLOCK(viodasd_spinlock);
diff --git a/drivers/char/hvc_beat.c b/drivers/char/hvc_beat.c
index e74bb949c289..91cdb35a9204 100644
--- a/drivers/char/hvc_beat.c
+++ b/drivers/char/hvc_beat.c
@@ -78,8 +78,8 @@ static int hvc_beat_put_chars(uint32_t vtermno, const char *buf, int cnt)
78 for (rest = cnt; rest > 0; rest -= nlen) { 78 for (rest = cnt; rest > 0; rest -= nlen) {
79 nlen = (rest > 16) ? 16 : rest; 79 nlen = (rest > 16) ? 16 : rest;
80 memcpy(kb, buf, nlen); 80 memcpy(kb, buf, nlen);
81 beat_put_term_char(vtermno, rest, kb[0], kb[1]); 81 beat_put_term_char(vtermno, nlen, kb[0], kb[1]);
82 rest -= nlen; 82 buf += nlen;
83 } 83 }
84 return cnt; 84 return cnt;
85} 85}
diff --git a/drivers/char/xilinx_hwicap/buffer_icap.c b/drivers/char/xilinx_hwicap/buffer_icap.c
index f577daedb630..aa7f7962a9a0 100644
--- a/drivers/char/xilinx_hwicap/buffer_icap.c
+++ b/drivers/char/xilinx_hwicap/buffer_icap.c
@@ -74,7 +74,7 @@
74 74
75/** 75/**
76 * buffer_icap_get_status - Get the contents of the status register. 76 * buffer_icap_get_status - Get the contents of the status register.
77 * @base_address: is the base address of the device 77 * @drvdata: a pointer to the drvdata.
78 * 78 *
79 * The status register contains the ICAP status and the done bit. 79 * The status register contains the ICAP status and the done bit.
80 * 80 *
@@ -88,9 +88,9 @@
88 * D1 - Always 1 88 * D1 - Always 1
89 * D0 - Done bit 89 * D0 - Done bit
90 **/ 90 **/
91static inline u32 buffer_icap_get_status(void __iomem *base_address) 91u32 buffer_icap_get_status(struct hwicap_drvdata *drvdata)
92{ 92{
93 return in_be32(base_address + XHI_STATUS_REG_OFFSET); 93 return in_be32(drvdata->base_address + XHI_STATUS_REG_OFFSET);
94} 94}
95 95
96/** 96/**
@@ -117,20 +117,8 @@ static inline u32 buffer_icap_get_bram(void __iomem *base_address,
117 **/ 117 **/
118static inline bool buffer_icap_busy(void __iomem *base_address) 118static inline bool buffer_icap_busy(void __iomem *base_address)
119{ 119{
120 return (buffer_icap_get_status(base_address) & 1) == XHI_NOT_FINISHED; 120 u32 status = in_be32(base_address + XHI_STATUS_REG_OFFSET);
121} 121 return (status & 1) == XHI_NOT_FINISHED;
122
123/**
124 * buffer_icap_busy - Return true if the icap device is not busy
125 * @base_address: is the base address of the device
126 *
127 * The queries the low order bit of the status register, which
128 * indicates whether the current configuration or readback operation
129 * has completed.
130 **/
131static inline bool buffer_icap_done(void __iomem *base_address)
132{
133 return (buffer_icap_get_status(base_address) & 1) == XHI_FINISHED;
134} 122}
135 123
136/** 124/**
diff --git a/drivers/char/xilinx_hwicap/buffer_icap.h b/drivers/char/xilinx_hwicap/buffer_icap.h
index 03184959fa00..c5b1840906b2 100644
--- a/drivers/char/xilinx_hwicap/buffer_icap.h
+++ b/drivers/char/xilinx_hwicap/buffer_icap.h
@@ -44,8 +44,6 @@
44#include <asm/io.h> 44#include <asm/io.h>
45#include "xilinx_hwicap.h" 45#include "xilinx_hwicap.h"
46 46
47void buffer_icap_reset(struct hwicap_drvdata *drvdata);
48
49/* Loads a partial bitstream from system memory. */ 47/* Loads a partial bitstream from system memory. */
50int buffer_icap_set_configuration(struct hwicap_drvdata *drvdata, u32 *data, 48int buffer_icap_set_configuration(struct hwicap_drvdata *drvdata, u32 *data,
51 u32 Size); 49 u32 Size);
@@ -54,4 +52,7 @@ int buffer_icap_set_configuration(struct hwicap_drvdata *drvdata, u32 *data,
54int buffer_icap_get_configuration(struct hwicap_drvdata *drvdata, u32 *data, 52int buffer_icap_get_configuration(struct hwicap_drvdata *drvdata, u32 *data,
55 u32 Size); 53 u32 Size);
56 54
55u32 buffer_icap_get_status(struct hwicap_drvdata *drvdata);
56void buffer_icap_reset(struct hwicap_drvdata *drvdata);
57
57#endif 58#endif
diff --git a/drivers/char/xilinx_hwicap/fifo_icap.c b/drivers/char/xilinx_hwicap/fifo_icap.c
index 6f45dbd47125..776b50528478 100644
--- a/drivers/char/xilinx_hwicap/fifo_icap.c
+++ b/drivers/char/xilinx_hwicap/fifo_icap.c
@@ -78,13 +78,6 @@
78#define XHI_CR_READ_MASK 0x00000002 /* Read from ICAP to FIFO */ 78#define XHI_CR_READ_MASK 0x00000002 /* Read from ICAP to FIFO */
79#define XHI_CR_WRITE_MASK 0x00000001 /* Write from FIFO to ICAP */ 79#define XHI_CR_WRITE_MASK 0x00000001 /* Write from FIFO to ICAP */
80 80
81/* Status Register (SR) */
82#define XHI_SR_CFGERR_N_MASK 0x00000100 /* Config Error Mask */
83#define XHI_SR_DALIGN_MASK 0x00000080 /* Data Alignment Mask */
84#define XHI_SR_RIP_MASK 0x00000040 /* Read back Mask */
85#define XHI_SR_IN_ABORT_N_MASK 0x00000020 /* Select Map Abort Mask */
86#define XHI_SR_DONE_MASK 0x00000001 /* Done bit Mask */
87
88 81
89#define XHI_WFO_MAX_VACANCY 1024 /* Max Write FIFO Vacancy, in words */ 82#define XHI_WFO_MAX_VACANCY 1024 /* Max Write FIFO Vacancy, in words */
90#define XHI_RFO_MAX_OCCUPANCY 256 /* Max Read FIFO Occupancy, in words */ 83#define XHI_RFO_MAX_OCCUPANCY 256 /* Max Read FIFO Occupancy, in words */
@@ -152,13 +145,35 @@ static inline void fifo_icap_start_readback(struct hwicap_drvdata *drvdata)
152} 145}
153 146
154/** 147/**
148 * fifo_icap_get_status - Get the contents of the status register.
149 * @drvdata: a pointer to the drvdata.
150 *
151 * The status register contains the ICAP status and the done bit.
152 *
153 * D8 - cfgerr
154 * D7 - dalign
155 * D6 - rip
156 * D5 - in_abort_l
157 * D4 - Always 1
158 * D3 - Always 1
159 * D2 - Always 1
160 * D1 - Always 1
161 * D0 - Done bit
162 **/
163u32 fifo_icap_get_status(struct hwicap_drvdata *drvdata)
164{
165 u32 status = in_be32(drvdata->base_address + XHI_SR_OFFSET);
166 dev_dbg(drvdata->dev, "Getting status = %x\n", status);
167 return status;
168}
169
170/**
155 * fifo_icap_busy - Return true if the ICAP is still processing a transaction. 171 * fifo_icap_busy - Return true if the ICAP is still processing a transaction.
156 * @drvdata: a pointer to the drvdata. 172 * @drvdata: a pointer to the drvdata.
157 **/ 173 **/
158static inline u32 fifo_icap_busy(struct hwicap_drvdata *drvdata) 174static inline u32 fifo_icap_busy(struct hwicap_drvdata *drvdata)
159{ 175{
160 u32 status = in_be32(drvdata->base_address + XHI_SR_OFFSET); 176 u32 status = in_be32(drvdata->base_address + XHI_SR_OFFSET);
161 dev_dbg(drvdata->dev, "Getting status = %x\n", status);
162 return (status & XHI_SR_DONE_MASK) ? 0 : 1; 177 return (status & XHI_SR_DONE_MASK) ? 0 : 1;
163} 178}
164 179
diff --git a/drivers/char/xilinx_hwicap/fifo_icap.h b/drivers/char/xilinx_hwicap/fifo_icap.h
index 4d3068dd0405..ffabd3ba2bd8 100644
--- a/drivers/char/xilinx_hwicap/fifo_icap.h
+++ b/drivers/char/xilinx_hwicap/fifo_icap.h
@@ -56,6 +56,7 @@ int fifo_icap_set_configuration(
56 u32 *FrameBuffer, 56 u32 *FrameBuffer,
57 u32 NumWords); 57 u32 NumWords);
58 58
59u32 fifo_icap_get_status(struct hwicap_drvdata *drvdata);
59void fifo_icap_reset(struct hwicap_drvdata *drvdata); 60void fifo_icap_reset(struct hwicap_drvdata *drvdata);
60void fifo_icap_flush_fifo(struct hwicap_drvdata *drvdata); 61void fifo_icap_flush_fifo(struct hwicap_drvdata *drvdata);
61 62
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
index 2284fa2a5a57..016f90567a52 100644
--- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
@@ -36,7 +36,7 @@
36 *****************************************************************************/ 36 *****************************************************************************/
37 37
38/* 38/*
39 * This is the code behind /dev/xilinx_icap -- it allows a user-space 39 * This is the code behind /dev/icap* -- it allows a user-space
40 * application to use the Xilinx ICAP subsystem. 40 * application to use the Xilinx ICAP subsystem.
41 * 41 *
42 * The following operations are possible: 42 * The following operations are possible:
@@ -67,7 +67,7 @@
67 * user-space application code that uses this device. The simplest 67 * user-space application code that uses this device. The simplest
68 * way to use this interface is simply: 68 * way to use this interface is simply:
69 * 69 *
70 * cp foo.bit /dev/xilinx_icap 70 * cp foo.bit /dev/icap0
71 * 71 *
72 * Note that unless foo.bit is an appropriately constructed partial 72 * Note that unless foo.bit is an appropriately constructed partial
73 * bitstream, this has a high likelyhood of overwriting the design 73 * bitstream, this has a high likelyhood of overwriting the design
@@ -105,18 +105,14 @@
105#include "buffer_icap.h" 105#include "buffer_icap.h"
106#include "fifo_icap.h" 106#include "fifo_icap.h"
107 107
108#define DRIVER_NAME "xilinx_icap" 108#define DRIVER_NAME "icap"
109 109
110#define HWICAP_REGS (0x10000) 110#define HWICAP_REGS (0x10000)
111 111
112/* dynamically allocate device number */ 112#define XHWICAP_MAJOR 259
113static int xhwicap_major; 113#define XHWICAP_MINOR 0
114static int xhwicap_minor;
115#define HWICAP_DEVICES 1 114#define HWICAP_DEVICES 1
116 115
117module_param(xhwicap_major, int, S_IRUGO);
118module_param(xhwicap_minor, int, S_IRUGO);
119
120/* An array, which is set to true when the device is registered. */ 116/* An array, which is set to true when the device is registered. */
121static bool probed_devices[HWICAP_DEVICES]; 117static bool probed_devices[HWICAP_DEVICES];
122static struct mutex icap_sem; 118static struct mutex icap_sem;
@@ -250,8 +246,26 @@ static int hwicap_get_configuration_register(struct hwicap_drvdata *drvdata,
250 * Create the data to be written to the ICAP. 246 * Create the data to be written to the ICAP.
251 */ 247 */
252 buffer[index++] = XHI_DUMMY_PACKET; 248 buffer[index++] = XHI_DUMMY_PACKET;
249 buffer[index++] = XHI_NOOP_PACKET;
253 buffer[index++] = XHI_SYNC_PACKET; 250 buffer[index++] = XHI_SYNC_PACKET;
254 buffer[index++] = XHI_NOOP_PACKET; 251 buffer[index++] = XHI_NOOP_PACKET;
252 buffer[index++] = XHI_NOOP_PACKET;
253
254 /*
255 * Write the data to the FIFO and initiate the transfer of data present
256 * in the FIFO to the ICAP device.
257 */
258 status = drvdata->config->set_configuration(drvdata,
259 &buffer[0], index);
260 if (status)
261 return status;
262
263 /* If the syncword was not found, then we need to start over. */
264 status = drvdata->config->get_status(drvdata);
265 if ((status & XHI_SR_DALIGN_MASK) != XHI_SR_DALIGN_MASK)
266 return -EIO;
267
268 index = 0;
255 buffer[index++] = hwicap_type_1_read(reg) | 1; 269 buffer[index++] = hwicap_type_1_read(reg) | 1;
256 buffer[index++] = XHI_NOOP_PACKET; 270 buffer[index++] = XHI_NOOP_PACKET;
257 buffer[index++] = XHI_NOOP_PACKET; 271 buffer[index++] = XHI_NOOP_PACKET;
@@ -587,7 +601,7 @@ static int __devinit hwicap_setup(struct device *dev, int id,
587 probed_devices[id] = 1; 601 probed_devices[id] = 1;
588 mutex_unlock(&icap_sem); 602 mutex_unlock(&icap_sem);
589 603
590 devt = MKDEV(xhwicap_major, xhwicap_minor + id); 604 devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR + id);
591 605
592 drvdata = kzalloc(sizeof(struct hwicap_drvdata), GFP_KERNEL); 606 drvdata = kzalloc(sizeof(struct hwicap_drvdata), GFP_KERNEL);
593 if (!drvdata) { 607 if (!drvdata) {
@@ -664,12 +678,14 @@ static int __devinit hwicap_setup(struct device *dev, int id,
664static struct hwicap_driver_config buffer_icap_config = { 678static struct hwicap_driver_config buffer_icap_config = {
665 .get_configuration = buffer_icap_get_configuration, 679 .get_configuration = buffer_icap_get_configuration,
666 .set_configuration = buffer_icap_set_configuration, 680 .set_configuration = buffer_icap_set_configuration,
681 .get_status = buffer_icap_get_status,
667 .reset = buffer_icap_reset, 682 .reset = buffer_icap_reset,
668}; 683};
669 684
670static struct hwicap_driver_config fifo_icap_config = { 685static struct hwicap_driver_config fifo_icap_config = {
671 .get_configuration = fifo_icap_get_configuration, 686 .get_configuration = fifo_icap_get_configuration,
672 .set_configuration = fifo_icap_set_configuration, 687 .set_configuration = fifo_icap_set_configuration,
688 .get_status = fifo_icap_get_status,
673 .reset = fifo_icap_reset, 689 .reset = fifo_icap_reset,
674}; 690};
675 691
@@ -690,7 +706,7 @@ static int __devexit hwicap_remove(struct device *dev)
690 dev_set_drvdata(dev, NULL); 706 dev_set_drvdata(dev, NULL);
691 707
692 mutex_lock(&icap_sem); 708 mutex_lock(&icap_sem);
693 probed_devices[MINOR(dev->devt)-xhwicap_minor] = 0; 709 probed_devices[MINOR(dev->devt)-XHWICAP_MINOR] = 0;
694 mutex_unlock(&icap_sem); 710 mutex_unlock(&icap_sem);
695 return 0; /* success */ 711 return 0; /* success */
696} 712}
@@ -830,23 +846,12 @@ static int __init hwicap_module_init(void)
830 icap_class = class_create(THIS_MODULE, "xilinx_config"); 846 icap_class = class_create(THIS_MODULE, "xilinx_config");
831 mutex_init(&icap_sem); 847 mutex_init(&icap_sem);
832 848
833 if (xhwicap_major) { 849 devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR);
834 devt = MKDEV(xhwicap_major, xhwicap_minor); 850 retval = register_chrdev_region(devt,
835 retval = register_chrdev_region( 851 HWICAP_DEVICES,
836 devt, 852 DRIVER_NAME);
837 HWICAP_DEVICES, 853 if (retval < 0)
838 DRIVER_NAME); 854 return retval;
839 if (retval < 0)
840 return retval;
841 } else {
842 retval = alloc_chrdev_region(&devt,
843 xhwicap_minor,
844 HWICAP_DEVICES,
845 DRIVER_NAME);
846 if (retval < 0)
847 return retval;
848 xhwicap_major = MAJOR(devt);
849 }
850 855
851 retval = platform_driver_register(&hwicap_platform_driver); 856 retval = platform_driver_register(&hwicap_platform_driver);
852 857
@@ -871,7 +876,7 @@ static int __init hwicap_module_init(void)
871 876
872static void __exit hwicap_module_cleanup(void) 877static void __exit hwicap_module_cleanup(void)
873{ 878{
874 dev_t devt = MKDEV(xhwicap_major, xhwicap_minor); 879 dev_t devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR);
875 880
876 class_destroy(icap_class); 881 class_destroy(icap_class);
877 882
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.h b/drivers/char/xilinx_hwicap/xilinx_hwicap.h
index 405fee7e189b..1f9c8b082dbe 100644
--- a/drivers/char/xilinx_hwicap/xilinx_hwicap.h
+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.h
@@ -65,10 +65,27 @@ struct hwicap_drvdata {
65}; 65};
66 66
67struct hwicap_driver_config { 67struct hwicap_driver_config {
68 /* Read configuration data given by size into the data buffer.
69 Return 0 if successful. */
68 int (*get_configuration)(struct hwicap_drvdata *drvdata, u32 *data, 70 int (*get_configuration)(struct hwicap_drvdata *drvdata, u32 *data,
69 u32 size); 71 u32 size);
72 /* Write configuration data given by size from the data buffer.
73 Return 0 if successful. */
70 int (*set_configuration)(struct hwicap_drvdata *drvdata, u32 *data, 74 int (*set_configuration)(struct hwicap_drvdata *drvdata, u32 *data,
71 u32 size); 75 u32 size);
76 /* Get the status register, bit pattern given by:
77 * D8 - 0 = configuration error
78 * D7 - 1 = alignment found
79 * D6 - 1 = readback in progress
80 * D5 - 0 = abort in progress
81 * D4 - Always 1
82 * D3 - Always 1
83 * D2 - Always 1
84 * D1 - Always 1
85 * D0 - 1 = operation completed
86 */
87 u32 (*get_status)(struct hwicap_drvdata *drvdata);
88 /* Reset the hw */
72 void (*reset)(struct hwicap_drvdata *drvdata); 89 void (*reset)(struct hwicap_drvdata *drvdata);
73}; 90};
74 91
@@ -163,6 +180,13 @@ struct config_registers {
163/* Constant to use for CRC check when CRC has been disabled */ 180/* Constant to use for CRC check when CRC has been disabled */
164#define XHI_DISABLED_AUTO_CRC 0x0000DEFCUL 181#define XHI_DISABLED_AUTO_CRC 0x0000DEFCUL
165 182
183/* Meanings of the bits returned by get_status */
184#define XHI_SR_CFGERR_N_MASK 0x00000100 /* Config Error Mask */
185#define XHI_SR_DALIGN_MASK 0x00000080 /* Data Alignment Mask */
186#define XHI_SR_RIP_MASK 0x00000040 /* Read back Mask */
187#define XHI_SR_IN_ABORT_N_MASK 0x00000020 /* Select Map Abort Mask */
188#define XHI_SR_DONE_MASK 0x00000001 /* Done bit Mask */
189
166/** 190/**
167 * hwicap_type_1_read - Generates a Type 1 read packet header. 191 * hwicap_type_1_read - Generates a Type 1 read packet header.
168 * @reg: is the address of the register to be read back. 192 * @reg: is the address of the register to be read back.
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c
index b025dfe0b274..378b7aa63812 100644
--- a/drivers/mtd/nand/fsl_elbc_nand.c
+++ b/drivers/mtd/nand/fsl_elbc_nand.c
@@ -36,207 +36,12 @@
36#include <linux/mtd/partitions.h> 36#include <linux/mtd/partitions.h>
37 37
38#include <asm/io.h> 38#include <asm/io.h>
39 39#include <asm/fsl_lbc.h>
40 40
41#define MAX_BANKS 8 41#define MAX_BANKS 8
42#define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */ 42#define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */
43#define FCM_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait for FCM */ 43#define FCM_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait for FCM */
44 44
45struct elbc_bank {
46 __be32 br; /**< Base Register */
47#define BR_BA 0xFFFF8000
48#define BR_BA_SHIFT 15
49#define BR_PS 0x00001800
50#define BR_PS_SHIFT 11
51#define BR_PS_8 0x00000800 /* Port Size 8 bit */
52#define BR_PS_16 0x00001000 /* Port Size 16 bit */
53#define BR_PS_32 0x00001800 /* Port Size 32 bit */
54#define BR_DECC 0x00000600
55#define BR_DECC_SHIFT 9
56#define BR_DECC_OFF 0x00000000 /* HW ECC checking and generation off */
57#define BR_DECC_CHK 0x00000200 /* HW ECC checking on, generation off */
58#define BR_DECC_CHK_GEN 0x00000400 /* HW ECC checking and generation on */
59#define BR_WP 0x00000100
60#define BR_WP_SHIFT 8
61#define BR_MSEL 0x000000E0
62#define BR_MSEL_SHIFT 5
63#define BR_MS_GPCM 0x00000000 /* GPCM */
64#define BR_MS_FCM 0x00000020 /* FCM */
65#define BR_MS_SDRAM 0x00000060 /* SDRAM */
66#define BR_MS_UPMA 0x00000080 /* UPMA */
67#define BR_MS_UPMB 0x000000A0 /* UPMB */
68#define BR_MS_UPMC 0x000000C0 /* UPMC */
69#define BR_V 0x00000001
70#define BR_V_SHIFT 0
71#define BR_RES ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
72
73 __be32 or; /**< Base Register */
74#define OR0 0x5004
75#define OR1 0x500C
76#define OR2 0x5014
77#define OR3 0x501C
78#define OR4 0x5024
79#define OR5 0x502C
80#define OR6 0x5034
81#define OR7 0x503C
82
83#define OR_FCM_AM 0xFFFF8000
84#define OR_FCM_AM_SHIFT 15
85#define OR_FCM_BCTLD 0x00001000
86#define OR_FCM_BCTLD_SHIFT 12
87#define OR_FCM_PGS 0x00000400
88#define OR_FCM_PGS_SHIFT 10
89#define OR_FCM_CSCT 0x00000200
90#define OR_FCM_CSCT_SHIFT 9
91#define OR_FCM_CST 0x00000100
92#define OR_FCM_CST_SHIFT 8
93#define OR_FCM_CHT 0x00000080
94#define OR_FCM_CHT_SHIFT 7
95#define OR_FCM_SCY 0x00000070
96#define OR_FCM_SCY_SHIFT 4
97#define OR_FCM_SCY_1 0x00000010
98#define OR_FCM_SCY_2 0x00000020
99#define OR_FCM_SCY_3 0x00000030
100#define OR_FCM_SCY_4 0x00000040
101#define OR_FCM_SCY_5 0x00000050
102#define OR_FCM_SCY_6 0x00000060
103#define OR_FCM_SCY_7 0x00000070
104#define OR_FCM_RST 0x00000008
105#define OR_FCM_RST_SHIFT 3
106#define OR_FCM_TRLX 0x00000004
107#define OR_FCM_TRLX_SHIFT 2
108#define OR_FCM_EHTR 0x00000002
109#define OR_FCM_EHTR_SHIFT 1
110};
111
112struct elbc_regs {
113 struct elbc_bank bank[8];
114 u8 res0[0x28];
115 __be32 mar; /**< UPM Address Register */
116 u8 res1[0x4];
117 __be32 mamr; /**< UPMA Mode Register */
118 __be32 mbmr; /**< UPMB Mode Register */
119 __be32 mcmr; /**< UPMC Mode Register */
120 u8 res2[0x8];
121 __be32 mrtpr; /**< Memory Refresh Timer Prescaler Register */
122 __be32 mdr; /**< UPM Data Register */
123 u8 res3[0x4];
124 __be32 lsor; /**< Special Operation Initiation Register */
125 __be32 lsdmr; /**< SDRAM Mode Register */
126 u8 res4[0x8];
127 __be32 lurt; /**< UPM Refresh Timer */
128 __be32 lsrt; /**< SDRAM Refresh Timer */
129 u8 res5[0x8];
130 __be32 ltesr; /**< Transfer Error Status Register */
131#define LTESR_BM 0x80000000
132#define LTESR_FCT 0x40000000
133#define LTESR_PAR 0x20000000
134#define LTESR_WP 0x04000000
135#define LTESR_ATMW 0x00800000
136#define LTESR_ATMR 0x00400000
137#define LTESR_CS 0x00080000
138#define LTESR_CC 0x00000001
139#define LTESR_NAND_MASK (LTESR_FCT | LTESR_PAR | LTESR_CC)
140 __be32 ltedr; /**< Transfer Error Disable Register */
141 __be32 lteir; /**< Transfer Error Interrupt Register */
142 __be32 lteatr; /**< Transfer Error Attributes Register */
143 __be32 ltear; /**< Transfer Error Address Register */
144 u8 res6[0xC];
145 __be32 lbcr; /**< Configuration Register */
146#define LBCR_LDIS 0x80000000
147#define LBCR_LDIS_SHIFT 31
148#define LBCR_BCTLC 0x00C00000
149#define LBCR_BCTLC_SHIFT 22
150#define LBCR_AHD 0x00200000
151#define LBCR_LPBSE 0x00020000
152#define LBCR_LPBSE_SHIFT 17
153#define LBCR_EPAR 0x00010000
154#define LBCR_EPAR_SHIFT 16
155#define LBCR_BMT 0x0000FF00
156#define LBCR_BMT_SHIFT 8
157#define LBCR_INIT 0x00040000
158 __be32 lcrr; /**< Clock Ratio Register */
159#define LCRR_DBYP 0x80000000
160#define LCRR_DBYP_SHIFT 31
161#define LCRR_BUFCMDC 0x30000000
162#define LCRR_BUFCMDC_SHIFT 28
163#define LCRR_ECL 0x03000000
164#define LCRR_ECL_SHIFT 24
165#define LCRR_EADC 0x00030000
166#define LCRR_EADC_SHIFT 16
167#define LCRR_CLKDIV 0x0000000F
168#define LCRR_CLKDIV_SHIFT 0
169 u8 res7[0x8];
170 __be32 fmr; /**< Flash Mode Register */
171#define FMR_CWTO 0x0000F000
172#define FMR_CWTO_SHIFT 12
173#define FMR_BOOT 0x00000800
174#define FMR_ECCM 0x00000100
175#define FMR_AL 0x00000030
176#define FMR_AL_SHIFT 4
177#define FMR_OP 0x00000003
178#define FMR_OP_SHIFT 0
179 __be32 fir; /**< Flash Instruction Register */
180#define FIR_OP0 0xF0000000
181#define FIR_OP0_SHIFT 28
182#define FIR_OP1 0x0F000000
183#define FIR_OP1_SHIFT 24
184#define FIR_OP2 0x00F00000
185#define FIR_OP2_SHIFT 20
186#define FIR_OP3 0x000F0000
187#define FIR_OP3_SHIFT 16
188#define FIR_OP4 0x0000F000
189#define FIR_OP4_SHIFT 12
190#define FIR_OP5 0x00000F00
191#define FIR_OP5_SHIFT 8
192#define FIR_OP6 0x000000F0
193#define FIR_OP6_SHIFT 4
194#define FIR_OP7 0x0000000F
195#define FIR_OP7_SHIFT 0
196#define FIR_OP_NOP 0x0 /* No operation and end of sequence */
197#define FIR_OP_CA 0x1 /* Issue current column address */
198#define FIR_OP_PA 0x2 /* Issue current block+page address */
199#define FIR_OP_UA 0x3 /* Issue user defined address */
200#define FIR_OP_CM0 0x4 /* Issue command from FCR[CMD0] */
201#define FIR_OP_CM1 0x5 /* Issue command from FCR[CMD1] */
202#define FIR_OP_CM2 0x6 /* Issue command from FCR[CMD2] */
203#define FIR_OP_CM3 0x7 /* Issue command from FCR[CMD3] */
204#define FIR_OP_WB 0x8 /* Write FBCR bytes from FCM buffer */
205#define FIR_OP_WS 0x9 /* Write 1 or 2 bytes from MDR[AS] */
206#define FIR_OP_RB 0xA /* Read FBCR bytes to FCM buffer */
207#define FIR_OP_RS 0xB /* Read 1 or 2 bytes to MDR[AS] */
208#define FIR_OP_CW0 0xC /* Wait then issue FCR[CMD0] */
209#define FIR_OP_CW1 0xD /* Wait then issue FCR[CMD1] */
210#define FIR_OP_RBW 0xE /* Wait then read FBCR bytes */
211#define FIR_OP_RSW 0xE /* Wait then read 1 or 2 bytes */
212 __be32 fcr; /**< Flash Command Register */
213#define FCR_CMD0 0xFF000000
214#define FCR_CMD0_SHIFT 24
215#define FCR_CMD1 0x00FF0000
216#define FCR_CMD1_SHIFT 16
217#define FCR_CMD2 0x0000FF00
218#define FCR_CMD2_SHIFT 8
219#define FCR_CMD3 0x000000FF
220#define FCR_CMD3_SHIFT 0
221 __be32 fbar; /**< Flash Block Address Register */
222#define FBAR_BLK 0x00FFFFFF
223 __be32 fpar; /**< Flash Page Address Register */
224#define FPAR_SP_PI 0x00007C00
225#define FPAR_SP_PI_SHIFT 10
226#define FPAR_SP_MS 0x00000200
227#define FPAR_SP_CI 0x000001FF
228#define FPAR_SP_CI_SHIFT 0
229#define FPAR_LP_PI 0x0003F000
230#define FPAR_LP_PI_SHIFT 12
231#define FPAR_LP_MS 0x00000800
232#define FPAR_LP_CI 0x000007FF
233#define FPAR_LP_CI_SHIFT 0
234 __be32 fbcr; /**< Flash Byte Count Register */
235#define FBCR_BC 0x00000FFF
236 u8 res11[0x8];
237 u8 res8[0xF00];
238};
239
240struct fsl_elbc_ctrl; 45struct fsl_elbc_ctrl;
241 46
242/* mtd information per set */ 47/* mtd information per set */
@@ -261,7 +66,7 @@ struct fsl_elbc_ctrl {
261 66
262 /* device info */ 67 /* device info */
263 struct device *dev; 68 struct device *dev;
264 struct elbc_regs __iomem *regs; 69 struct fsl_lbc_regs __iomem *regs;
265 int irq; 70 int irq;
266 wait_queue_head_t irq_wait; 71 wait_queue_head_t irq_wait;
267 unsigned int irq_status; /* status read from LTESR by irq handler */ 72 unsigned int irq_status; /* status read from LTESR by irq handler */
@@ -322,7 +127,7 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob)
322 struct nand_chip *chip = mtd->priv; 127 struct nand_chip *chip = mtd->priv;
323 struct fsl_elbc_mtd *priv = chip->priv; 128 struct fsl_elbc_mtd *priv = chip->priv;
324 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 129 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
325 struct elbc_regs __iomem *lbc = ctrl->regs; 130 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
326 int buf_num; 131 int buf_num;
327 132
328 ctrl->page = page_addr; 133 ctrl->page = page_addr;
@@ -363,7 +168,7 @@ static int fsl_elbc_run_command(struct mtd_info *mtd)
363 struct nand_chip *chip = mtd->priv; 168 struct nand_chip *chip = mtd->priv;
364 struct fsl_elbc_mtd *priv = chip->priv; 169 struct fsl_elbc_mtd *priv = chip->priv;
365 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 170 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
366 struct elbc_regs __iomem *lbc = ctrl->regs; 171 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
367 172
368 /* Setup the FMR[OP] to execute without write protection */ 173 /* Setup the FMR[OP] to execute without write protection */
369 out_be32(&lbc->fmr, priv->fmr | 3); 174 out_be32(&lbc->fmr, priv->fmr | 3);
@@ -406,7 +211,7 @@ static void fsl_elbc_do_read(struct nand_chip *chip, int oob)
406{ 211{
407 struct fsl_elbc_mtd *priv = chip->priv; 212 struct fsl_elbc_mtd *priv = chip->priv;
408 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 213 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
409 struct elbc_regs __iomem *lbc = ctrl->regs; 214 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
410 215
411 if (priv->page_size) { 216 if (priv->page_size) {
412 out_be32(&lbc->fir, 217 out_be32(&lbc->fir,
@@ -439,7 +244,7 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
439 struct nand_chip *chip = mtd->priv; 244 struct nand_chip *chip = mtd->priv;
440 struct fsl_elbc_mtd *priv = chip->priv; 245 struct fsl_elbc_mtd *priv = chip->priv;
441 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 246 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
442 struct elbc_regs __iomem *lbc = ctrl->regs; 247 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
443 248
444 ctrl->use_mdr = 0; 249 ctrl->use_mdr = 0;
445 250
@@ -775,7 +580,7 @@ static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *chip)
775{ 580{
776 struct fsl_elbc_mtd *priv = chip->priv; 581 struct fsl_elbc_mtd *priv = chip->priv;
777 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 582 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
778 struct elbc_regs __iomem *lbc = ctrl->regs; 583 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
779 584
780 if (ctrl->status != LTESR_CC) 585 if (ctrl->status != LTESR_CC)
781 return NAND_STATUS_FAIL; 586 return NAND_STATUS_FAIL;
@@ -807,7 +612,7 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd)
807 struct nand_chip *chip = mtd->priv; 612 struct nand_chip *chip = mtd->priv;
808 struct fsl_elbc_mtd *priv = chip->priv; 613 struct fsl_elbc_mtd *priv = chip->priv;
809 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 614 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
810 struct elbc_regs __iomem *lbc = ctrl->regs; 615 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
811 unsigned int al; 616 unsigned int al;
812 617
813 /* calculate FMR Address Length field */ 618 /* calculate FMR Address Length field */
@@ -922,7 +727,7 @@ static void fsl_elbc_write_page(struct mtd_info *mtd,
922static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv) 727static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
923{ 728{
924 struct fsl_elbc_ctrl *ctrl = priv->ctrl; 729 struct fsl_elbc_ctrl *ctrl = priv->ctrl;
925 struct elbc_regs __iomem *lbc = ctrl->regs; 730 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
926 struct nand_chip *chip = &priv->chip; 731 struct nand_chip *chip = &priv->chip;
927 732
928 dev_dbg(priv->dev, "eLBC Set Information for bank %d\n", priv->bank); 733 dev_dbg(priv->dev, "eLBC Set Information for bank %d\n", priv->bank);
@@ -986,7 +791,7 @@ static int fsl_elbc_chip_remove(struct fsl_elbc_mtd *priv)
986static int fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl, 791static int fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl,
987 struct device_node *node) 792 struct device_node *node)
988{ 793{
989 struct elbc_regs __iomem *lbc = ctrl->regs; 794 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
990 struct fsl_elbc_mtd *priv; 795 struct fsl_elbc_mtd *priv;
991 struct resource res; 796 struct resource res;
992#ifdef CONFIG_MTD_PARTITIONS 797#ifdef CONFIG_MTD_PARTITIONS
@@ -1083,7 +888,7 @@ err:
1083 888
1084static int __devinit fsl_elbc_ctrl_init(struct fsl_elbc_ctrl *ctrl) 889static int __devinit fsl_elbc_ctrl_init(struct fsl_elbc_ctrl *ctrl)
1085{ 890{
1086 struct elbc_regs __iomem *lbc = ctrl->regs; 891 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
1087 892
1088 /* clear event registers */ 893 /* clear event registers */
1089 setbits32(&lbc->ltesr, LTESR_NAND_MASK); 894 setbits32(&lbc->ltesr, LTESR_NAND_MASK);
@@ -1128,7 +933,7 @@ static int __devexit fsl_elbc_ctrl_remove(struct of_device *ofdev)
1128static irqreturn_t fsl_elbc_ctrl_irq(int irqno, void *data) 933static irqreturn_t fsl_elbc_ctrl_irq(int irqno, void *data)
1129{ 934{
1130 struct fsl_elbc_ctrl *ctrl = data; 935 struct fsl_elbc_ctrl *ctrl = data;
1131 struct elbc_regs __iomem *lbc = ctrl->regs; 936 struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
1132 __be32 status = in_be32(&lbc->ltesr) & LTESR_NAND_MASK; 937 __be32 status = in_be32(&lbc->ltesr) & LTESR_NAND_MASK;
1133 938
1134 if (status) { 939 if (status) {
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 4d71729e85e5..2f1f3f2739fd 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -218,7 +218,8 @@ obj-$(CONFIG_SMC911X) += smc911x.o
218obj-$(CONFIG_BFIN_MAC) += bfin_mac.o 218obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
219obj-$(CONFIG_DM9000) += dm9000.o 219obj-$(CONFIG_DM9000) += dm9000.o
220obj-$(CONFIG_FEC_8XX) += fec_8xx/ 220obj-$(CONFIG_FEC_8XX) += fec_8xx/
221obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o 221obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
222pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
222obj-$(CONFIG_MLX4_CORE) += mlx4/ 223obj-$(CONFIG_MLX4_CORE) += mlx4/
223obj-$(CONFIG_ENC28J60) += enc28j60.o 224obj-$(CONFIG_ENC28J60) += enc28j60.o
224 225
diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c
index 58d3bb622da6..b8d0639c1cdf 100644
--- a/drivers/net/iseries_veth.c
+++ b/drivers/net/iseries_veth.c
@@ -308,7 +308,8 @@ static void veth_complete_allocation(void *parm, int number)
308 308
309static int veth_allocate_events(HvLpIndex rlp, int number) 309static int veth_allocate_events(HvLpIndex rlp, int number)
310{ 310{
311 struct veth_allocation vc = { COMPLETION_INITIALIZER(vc.c), 0 }; 311 struct veth_allocation vc =
312 { COMPLETION_INITIALIZER_ONSTACK(vc.c), 0 };
312 313
313 mf_allocate_lp_events(rlp, HvLpEvent_Type_VirtualLan, 314 mf_allocate_lp_events(rlp, HvLpEvent_Type_VirtualLan,
314 sizeof(struct veth_lpevent), number, 315 sizeof(struct veth_lpevent), number,
diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c
index bcd7f9814ed8..3b2a6c598088 100644
--- a/drivers/net/pasemi_mac.c
+++ b/drivers/net/pasemi_mac.c
@@ -55,15 +55,10 @@
55 * - Multiqueue RX/TX 55 * - Multiqueue RX/TX
56 */ 56 */
57 57
58
59/* Must be a power of two */
60#define RX_RING_SIZE 2048
61#define TX_RING_SIZE 4096
62
63#define LRO_MAX_AGGR 64 58#define LRO_MAX_AGGR 64
64 59
65#define PE_MIN_MTU 64 60#define PE_MIN_MTU 64
66#define PE_MAX_MTU 1500 61#define PE_MAX_MTU 9000
67#define PE_DEF_MTU ETH_DATA_LEN 62#define PE_DEF_MTU ETH_DATA_LEN
68 63
69#define DEFAULT_MSG_ENABLE \ 64#define DEFAULT_MSG_ENABLE \
@@ -76,16 +71,6 @@
76 NETIF_MSG_RX_ERR | \ 71 NETIF_MSG_RX_ERR | \
77 NETIF_MSG_TX_ERR) 72 NETIF_MSG_TX_ERR)
78 73
79#define TX_DESC(tx, num) ((tx)->chan.ring_virt[(num) & (TX_RING_SIZE-1)])
80#define TX_DESC_INFO(tx, num) ((tx)->ring_info[(num) & (TX_RING_SIZE-1)])
81#define RX_DESC(rx, num) ((rx)->chan.ring_virt[(num) & (RX_RING_SIZE-1)])
82#define RX_DESC_INFO(rx, num) ((rx)->ring_info[(num) & (RX_RING_SIZE-1)])
83#define RX_BUFF(rx, num) ((rx)->buffers[(num) & (RX_RING_SIZE-1)])
84
85#define RING_USED(ring) (((ring)->next_to_fill - (ring)->next_to_clean) \
86 & ((ring)->size - 1))
87#define RING_AVAIL(ring) ((ring->size) - RING_USED(ring))
88
89MODULE_LICENSE("GPL"); 74MODULE_LICENSE("GPL");
90MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>"); 75MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>");
91MODULE_DESCRIPTION("PA Semi PWRficient Ethernet driver"); 76MODULE_DESCRIPTION("PA Semi PWRficient Ethernet driver");
@@ -94,6 +79,8 @@ static int debug = -1; /* -1 == use DEFAULT_MSG_ENABLE as value */
94module_param(debug, int, 0); 79module_param(debug, int, 0);
95MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value"); 80MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value");
96 81
82extern const struct ethtool_ops pasemi_mac_ethtool_ops;
83
97static int translation_enabled(void) 84static int translation_enabled(void)
98{ 85{
99#if defined(CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE) 86#if defined(CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE)
@@ -322,6 +309,104 @@ static int pasemi_mac_unmap_tx_skb(struct pasemi_mac *mac,
322 return (nfrags + 3) & ~1; 309 return (nfrags + 3) & ~1;
323} 310}
324 311
312static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac)
313{
314 struct pasemi_mac_csring *ring;
315 u32 val;
316 unsigned int cfg;
317 int chno;
318
319 ring = pasemi_dma_alloc_chan(TXCHAN, sizeof(struct pasemi_mac_csring),
320 offsetof(struct pasemi_mac_csring, chan));
321
322 if (!ring) {
323 dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n");
324 goto out_chan;
325 }
326
327 chno = ring->chan.chno;
328
329 ring->size = CS_RING_SIZE;
330 ring->next_to_fill = 0;
331
332 /* Allocate descriptors */
333 if (pasemi_dma_alloc_ring(&ring->chan, CS_RING_SIZE))
334 goto out_ring_desc;
335
336 write_dma_reg(PAS_DMA_TXCHAN_BASEL(chno),
337 PAS_DMA_TXCHAN_BASEL_BRBL(ring->chan.ring_dma));
338 val = PAS_DMA_TXCHAN_BASEU_BRBH(ring->chan.ring_dma >> 32);
339 val |= PAS_DMA_TXCHAN_BASEU_SIZ(CS_RING_SIZE >> 3);
340
341 write_dma_reg(PAS_DMA_TXCHAN_BASEU(chno), val);
342
343 ring->events[0] = pasemi_dma_alloc_flag();
344 ring->events[1] = pasemi_dma_alloc_flag();
345 if (ring->events[0] < 0 || ring->events[1] < 0)
346 goto out_flags;
347
348 pasemi_dma_clear_flag(ring->events[0]);
349 pasemi_dma_clear_flag(ring->events[1]);
350
351 ring->fun = pasemi_dma_alloc_fun();
352 if (ring->fun < 0)
353 goto out_fun;
354
355 cfg = PAS_DMA_TXCHAN_CFG_TY_FUNC | PAS_DMA_TXCHAN_CFG_UP |
356 PAS_DMA_TXCHAN_CFG_TATTR(ring->fun) |
357 PAS_DMA_TXCHAN_CFG_LPSQ | PAS_DMA_TXCHAN_CFG_LPDQ;
358
359 if (translation_enabled())
360 cfg |= PAS_DMA_TXCHAN_CFG_TRD | PAS_DMA_TXCHAN_CFG_TRR;
361
362 write_dma_reg(PAS_DMA_TXCHAN_CFG(chno), cfg);
363
364 /* enable channel */
365 pasemi_dma_start_chan(&ring->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ |
366 PAS_DMA_TXCHAN_TCMDSTA_DB |
367 PAS_DMA_TXCHAN_TCMDSTA_DE |
368 PAS_DMA_TXCHAN_TCMDSTA_DA);
369
370 return ring;
371
372out_fun:
373out_flags:
374 if (ring->events[0] >= 0)
375 pasemi_dma_free_flag(ring->events[0]);
376 if (ring->events[1] >= 0)
377 pasemi_dma_free_flag(ring->events[1]);
378 pasemi_dma_free_ring(&ring->chan);
379out_ring_desc:
380 pasemi_dma_free_chan(&ring->chan);
381out_chan:
382
383 return NULL;
384}
385
386static void pasemi_mac_setup_csrings(struct pasemi_mac *mac)
387{
388 int i;
389 mac->cs[0] = pasemi_mac_setup_csring(mac);
390 if (mac->type == MAC_TYPE_XAUI)
391 mac->cs[1] = pasemi_mac_setup_csring(mac);
392 else
393 mac->cs[1] = 0;
394
395 for (i = 0; i < MAX_CS; i++)
396 if (mac->cs[i])
397 mac->num_cs++;
398}
399
400static void pasemi_mac_free_csring(struct pasemi_mac_csring *csring)
401{
402 pasemi_dma_stop_chan(&csring->chan);
403 pasemi_dma_free_flag(csring->events[0]);
404 pasemi_dma_free_flag(csring->events[1]);
405 pasemi_dma_free_ring(&csring->chan);
406 pasemi_dma_free_chan(&csring->chan);
407 pasemi_dma_free_fun(csring->fun);
408}
409
325static int pasemi_mac_setup_rx_resources(const struct net_device *dev) 410static int pasemi_mac_setup_rx_resources(const struct net_device *dev)
326{ 411{
327 struct pasemi_mac_rxring *ring; 412 struct pasemi_mac_rxring *ring;
@@ -445,7 +530,7 @@ pasemi_mac_setup_tx_resources(const struct net_device *dev)
445 cfg = PAS_DMA_TXCHAN_CFG_TY_IFACE | 530 cfg = PAS_DMA_TXCHAN_CFG_TY_IFACE |
446 PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) | 531 PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) |
447 PAS_DMA_TXCHAN_CFG_UP | 532 PAS_DMA_TXCHAN_CFG_UP |
448 PAS_DMA_TXCHAN_CFG_WT(2); 533 PAS_DMA_TXCHAN_CFG_WT(4);
449 534
450 if (translation_enabled()) 535 if (translation_enabled())
451 cfg |= PAS_DMA_TXCHAN_CFG_TRD | PAS_DMA_TXCHAN_CFG_TRR; 536 cfg |= PAS_DMA_TXCHAN_CFG_TRD | PAS_DMA_TXCHAN_CFG_TRR;
@@ -810,13 +895,21 @@ restart:
810 u64 mactx = TX_DESC(txring, i); 895 u64 mactx = TX_DESC(txring, i);
811 struct sk_buff *skb; 896 struct sk_buff *skb;
812 897
813 skb = TX_DESC_INFO(txring, i+1).skb;
814 nr_frags = TX_DESC_INFO(txring, i).dma;
815
816 if ((mactx & XCT_MACTX_E) || 898 if ((mactx & XCT_MACTX_E) ||
817 (*chan->status & PAS_STATUS_ERROR)) 899 (*chan->status & PAS_STATUS_ERROR))
818 pasemi_mac_tx_error(mac, mactx); 900 pasemi_mac_tx_error(mac, mactx);
819 901
902 /* Skip over control descriptors */
903 if (!(mactx & XCT_MACTX_LLEN_M)) {
904 TX_DESC(txring, i) = 0;
905 TX_DESC(txring, i+1) = 0;
906 buf_count = 2;
907 continue;
908 }
909
910 skb = TX_DESC_INFO(txring, i+1).skb;
911 nr_frags = TX_DESC_INFO(txring, i).dma;
912
820 if (unlikely(mactx & XCT_MACTX_O)) 913 if (unlikely(mactx & XCT_MACTX_O))
821 /* Not yet transmitted */ 914 /* Not yet transmitted */
822 break; 915 break;
@@ -1041,13 +1134,7 @@ static int pasemi_mac_open(struct net_device *dev)
1041{ 1134{
1042 struct pasemi_mac *mac = netdev_priv(dev); 1135 struct pasemi_mac *mac = netdev_priv(dev);
1043 unsigned int flags; 1136 unsigned int flags;
1044 int ret; 1137 int i, ret;
1045
1046 /* enable rx section */
1047 write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN);
1048
1049 /* enable tx section */
1050 write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN);
1051 1138
1052 flags = PAS_MAC_CFG_TXP_FCE | PAS_MAC_CFG_TXP_FPC(3) | 1139 flags = PAS_MAC_CFG_TXP_FCE | PAS_MAC_CFG_TXP_FPC(3) |
1053 PAS_MAC_CFG_TXP_SL(3) | PAS_MAC_CFG_TXP_COB(0xf) | 1140 PAS_MAC_CFG_TXP_SL(3) | PAS_MAC_CFG_TXP_COB(0xf) |
@@ -1064,6 +1151,19 @@ static int pasemi_mac_open(struct net_device *dev)
1064 if (!mac->tx) 1151 if (!mac->tx)
1065 goto out_tx_ring; 1152 goto out_tx_ring;
1066 1153
1154 /* We might already have allocated rings in case mtu was changed
1155 * before interface was brought up.
1156 */
1157 if (dev->mtu > 1500 && !mac->num_cs) {
1158 pasemi_mac_setup_csrings(mac);
1159 if (!mac->num_cs)
1160 goto out_tx_ring;
1161 }
1162
1163 /* Zero out rmon counters */
1164 for (i = 0; i < 32; i++)
1165 write_mac_reg(mac, PAS_MAC_RMON(i), 0);
1166
1067 /* 0x3ff with 33MHz clock is about 31us */ 1167 /* 0x3ff with 33MHz clock is about 31us */
1068 write_iob_reg(PAS_IOB_DMA_COM_TIMEOUTCFG, 1168 write_iob_reg(PAS_IOB_DMA_COM_TIMEOUTCFG,
1069 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0x3ff)); 1169 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0x3ff));
@@ -1247,7 +1347,7 @@ static int pasemi_mac_close(struct net_device *dev)
1247{ 1347{
1248 struct pasemi_mac *mac = netdev_priv(dev); 1348 struct pasemi_mac *mac = netdev_priv(dev);
1249 unsigned int sta; 1349 unsigned int sta;
1250 int rxch, txch; 1350 int rxch, txch, i;
1251 1351
1252 rxch = rx_ring(mac)->chan.chno; 1352 rxch = rx_ring(mac)->chan.chno;
1253 txch = tx_ring(mac)->chan.chno; 1353 txch = tx_ring(mac)->chan.chno;
@@ -1292,6 +1392,13 @@ static int pasemi_mac_close(struct net_device *dev)
1292 free_irq(mac->tx->chan.irq, mac->tx); 1392 free_irq(mac->tx->chan.irq, mac->tx);
1293 free_irq(mac->rx->chan.irq, mac->rx); 1393 free_irq(mac->rx->chan.irq, mac->rx);
1294 1394
1395 for (i = 0; i < mac->num_cs; i++) {
1396 pasemi_mac_free_csring(mac->cs[i]);
1397 mac->cs[i] = NULL;
1398 }
1399
1400 mac->num_cs = 0;
1401
1295 /* Free resources */ 1402 /* Free resources */
1296 pasemi_mac_free_rx_resources(mac); 1403 pasemi_mac_free_rx_resources(mac);
1297 pasemi_mac_free_tx_resources(mac); 1404 pasemi_mac_free_tx_resources(mac);
@@ -1299,35 +1406,113 @@ static int pasemi_mac_close(struct net_device *dev)
1299 return 0; 1406 return 0;
1300} 1407}
1301 1408
1409static void pasemi_mac_queue_csdesc(const struct sk_buff *skb,
1410 const dma_addr_t *map,
1411 const unsigned int *map_size,
1412 struct pasemi_mac_txring *txring,
1413 struct pasemi_mac_csring *csring)
1414{
1415 u64 fund;
1416 dma_addr_t cs_dest;
1417 const int nh_off = skb_network_offset(skb);
1418 const int nh_len = skb_network_header_len(skb);
1419 const int nfrags = skb_shinfo(skb)->nr_frags;
1420 int cs_size, i, fill, hdr, cpyhdr, evt;
1421 dma_addr_t csdma;
1422
1423 fund = XCT_FUN_ST | XCT_FUN_RR_8BRES |
1424 XCT_FUN_O | XCT_FUN_FUN(csring->fun) |
1425 XCT_FUN_CRM_SIG | XCT_FUN_LLEN(skb->len - nh_off) |
1426 XCT_FUN_SHL(nh_len >> 2) | XCT_FUN_SE;
1427
1428 switch (ip_hdr(skb)->protocol) {
1429 case IPPROTO_TCP:
1430 fund |= XCT_FUN_SIG_TCP4;
1431 /* TCP checksum is 16 bytes into the header */
1432 cs_dest = map[0] + skb_transport_offset(skb) + 16;
1433 break;
1434 case IPPROTO_UDP:
1435 fund |= XCT_FUN_SIG_UDP4;
1436 /* UDP checksum is 6 bytes into the header */
1437 cs_dest = map[0] + skb_transport_offset(skb) + 6;
1438 break;
1439 default:
1440 BUG();
1441 }
1442
1443 /* Do the checksum offloaded */
1444 fill = csring->next_to_fill;
1445 hdr = fill;
1446
1447 CS_DESC(csring, fill++) = fund;
1448 /* Room for 8BRES. Checksum result is really 2 bytes into it */
1449 csdma = csring->chan.ring_dma + (fill & (CS_RING_SIZE-1)) * 8 + 2;
1450 CS_DESC(csring, fill++) = 0;
1451
1452 CS_DESC(csring, fill) = XCT_PTR_LEN(map_size[0]-nh_off) | XCT_PTR_ADDR(map[0]+nh_off);
1453 for (i = 1; i <= nfrags; i++)
1454 CS_DESC(csring, fill+i) = XCT_PTR_LEN(map_size[i]) | XCT_PTR_ADDR(map[i]);
1455
1456 fill += i;
1457 if (fill & 1)
1458 fill++;
1459
1460 /* Copy the result into the TCP packet */
1461 cpyhdr = fill;
1462 CS_DESC(csring, fill++) = XCT_FUN_O | XCT_FUN_FUN(csring->fun) |
1463 XCT_FUN_LLEN(2) | XCT_FUN_SE;
1464 CS_DESC(csring, fill++) = XCT_PTR_LEN(2) | XCT_PTR_ADDR(cs_dest) | XCT_PTR_T;
1465 CS_DESC(csring, fill++) = XCT_PTR_LEN(2) | XCT_PTR_ADDR(csdma);
1466 fill++;
1467
1468 evt = !csring->last_event;
1469 csring->last_event = evt;
1470
1471 /* Event handshaking with MAC TX */
1472 CS_DESC(csring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
1473 CTRL_CMD_ETYPE_SET | CTRL_CMD_REG(csring->events[evt]);
1474 CS_DESC(csring, fill++) = 0;
1475 CS_DESC(csring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
1476 CTRL_CMD_ETYPE_WCLR | CTRL_CMD_REG(csring->events[!evt]);
1477 CS_DESC(csring, fill++) = 0;
1478 csring->next_to_fill = fill & (CS_RING_SIZE-1);
1479
1480 cs_size = fill - hdr;
1481 write_dma_reg(PAS_DMA_TXCHAN_INCR(csring->chan.chno), (cs_size) >> 1);
1482
1483 /* TX-side event handshaking */
1484 fill = txring->next_to_fill;
1485 TX_DESC(txring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
1486 CTRL_CMD_ETYPE_WSET | CTRL_CMD_REG(csring->events[evt]);
1487 TX_DESC(txring, fill++) = 0;
1488 TX_DESC(txring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
1489 CTRL_CMD_ETYPE_CLR | CTRL_CMD_REG(csring->events[!evt]);
1490 TX_DESC(txring, fill++) = 0;
1491 txring->next_to_fill = fill;
1492
1493 write_dma_reg(PAS_DMA_TXCHAN_INCR(txring->chan.chno), 2);
1494
1495 return;
1496}
1497
1302static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) 1498static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
1303{ 1499{
1304 struct pasemi_mac *mac = netdev_priv(dev); 1500 struct pasemi_mac * const mac = netdev_priv(dev);
1305 struct pasemi_mac_txring *txring; 1501 struct pasemi_mac_txring * const txring = tx_ring(mac);
1306 u64 dflags, mactx; 1502 struct pasemi_mac_csring *csring;
1503 u64 dflags = 0;
1504 u64 mactx;
1307 dma_addr_t map[MAX_SKB_FRAGS+1]; 1505 dma_addr_t map[MAX_SKB_FRAGS+1];
1308 unsigned int map_size[MAX_SKB_FRAGS+1]; 1506 unsigned int map_size[MAX_SKB_FRAGS+1];
1309 unsigned long flags; 1507 unsigned long flags;
1310 int i, nfrags; 1508 int i, nfrags;
1311 int fill; 1509 int fill;
1510 const int nh_off = skb_network_offset(skb);
1511 const int nh_len = skb_network_header_len(skb);
1312 1512
1313 dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_CRC_PAD; 1513 prefetch(&txring->ring_info);
1314
1315 if (skb->ip_summed == CHECKSUM_PARTIAL) {
1316 const unsigned char *nh = skb_network_header(skb);
1317 1514
1318 switch (ip_hdr(skb)->protocol) { 1515 dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_CRC_PAD;
1319 case IPPROTO_TCP:
1320 dflags |= XCT_MACTX_CSUM_TCP;
1321 dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 2);
1322 dflags |= XCT_MACTX_IPO(nh - skb->data);
1323 break;
1324 case IPPROTO_UDP:
1325 dflags |= XCT_MACTX_CSUM_UDP;
1326 dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 2);
1327 dflags |= XCT_MACTX_IPO(nh - skb->data);
1328 break;
1329 }
1330 }
1331 1516
1332 nfrags = skb_shinfo(skb)->nr_frags; 1517 nfrags = skb_shinfo(skb)->nr_frags;
1333 1518
@@ -1350,24 +1535,46 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
1350 } 1535 }
1351 } 1536 }
1352 1537
1353 mactx = dflags | XCT_MACTX_LLEN(skb->len); 1538 if (skb->ip_summed == CHECKSUM_PARTIAL && skb->len <= 1540) {
1539 switch (ip_hdr(skb)->protocol) {
1540 case IPPROTO_TCP:
1541 dflags |= XCT_MACTX_CSUM_TCP;
1542 dflags |= XCT_MACTX_IPH(nh_len >> 2);
1543 dflags |= XCT_MACTX_IPO(nh_off);
1544 break;
1545 case IPPROTO_UDP:
1546 dflags |= XCT_MACTX_CSUM_UDP;
1547 dflags |= XCT_MACTX_IPH(nh_len >> 2);
1548 dflags |= XCT_MACTX_IPO(nh_off);
1549 break;
1550 default:
1551 WARN_ON(1);
1552 }
1553 }
1354 1554
1355 txring = tx_ring(mac); 1555 mactx = dflags | XCT_MACTX_LLEN(skb->len);
1356 1556
1357 spin_lock_irqsave(&txring->lock, flags); 1557 spin_lock_irqsave(&txring->lock, flags);
1358 1558
1359 fill = txring->next_to_fill;
1360
1361 /* Avoid stepping on the same cache line that the DMA controller 1559 /* Avoid stepping on the same cache line that the DMA controller
1362 * is currently about to send, so leave at least 8 words available. 1560 * is currently about to send, so leave at least 8 words available.
1363 * Total free space needed is mactx + fragments + 8 1561 * Total free space needed is mactx + fragments + 8
1364 */ 1562 */
1365 if (RING_AVAIL(txring) < nfrags + 10) { 1563 if (RING_AVAIL(txring) < nfrags + 14) {
1366 /* no room -- stop the queue and wait for tx intr */ 1564 /* no room -- stop the queue and wait for tx intr */
1367 netif_stop_queue(dev); 1565 netif_stop_queue(dev);
1368 goto out_err; 1566 goto out_err;
1369 } 1567 }
1370 1568
1569 /* Queue up checksum + event descriptors, if needed */
1570 if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) {
1571 csring = mac->cs[mac->last_cs];
1572 mac->last_cs = (mac->last_cs + 1) % mac->num_cs;
1573
1574 pasemi_mac_queue_csdesc(skb, map, map_size, txring, csring);
1575 }
1576
1577 fill = txring->next_to_fill;
1371 TX_DESC(txring, fill) = mactx; 1578 TX_DESC(txring, fill) = mactx;
1372 TX_DESC_INFO(txring, fill).dma = nfrags; 1579 TX_DESC_INFO(txring, fill).dma = nfrags;
1373 fill++; 1580 fill++;
@@ -1441,12 +1648,33 @@ static int pasemi_mac_poll(struct napi_struct *napi, int budget)
1441 return pkts; 1648 return pkts;
1442} 1649}
1443 1650
1651#ifdef CONFIG_NET_POLL_CONTROLLER
1652/*
1653 * Polling 'interrupt' - used by things like netconsole to send skbs
1654 * without having to re-enable interrupts. It's not called while
1655 * the interrupt routine is executing.
1656 */
1657static void pasemi_mac_netpoll(struct net_device *dev)
1658{
1659 const struct pasemi_mac *mac = netdev_priv(dev);
1660
1661 disable_irq(mac->tx->chan.irq);
1662 pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx);
1663 enable_irq(mac->tx->chan.irq);
1664
1665 disable_irq(mac->rx->chan.irq);
1666 pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx);
1667 enable_irq(mac->rx->chan.irq);
1668}
1669#endif
1670
1444static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu) 1671static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
1445{ 1672{
1446 struct pasemi_mac *mac = netdev_priv(dev); 1673 struct pasemi_mac *mac = netdev_priv(dev);
1447 unsigned int reg; 1674 unsigned int reg;
1448 unsigned int rcmdsta; 1675 unsigned int rcmdsta = 0;
1449 int running; 1676 int running;
1677 int ret = 0;
1450 1678
1451 if (new_mtu < PE_MIN_MTU || new_mtu > PE_MAX_MTU) 1679 if (new_mtu < PE_MIN_MTU || new_mtu > PE_MAX_MTU)
1452 return -EINVAL; 1680 return -EINVAL;
@@ -1468,6 +1696,16 @@ static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
1468 pasemi_mac_pause_rxint(mac); 1696 pasemi_mac_pause_rxint(mac);
1469 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); 1697 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE);
1470 pasemi_mac_free_rx_buffers(mac); 1698 pasemi_mac_free_rx_buffers(mac);
1699
1700 }
1701
1702 /* Setup checksum channels if large MTU and none already allocated */
1703 if (new_mtu > 1500 && !mac->num_cs) {
1704 pasemi_mac_setup_csrings(mac);
1705 if (!mac->num_cs) {
1706 ret = -ENOMEM;
1707 goto out;
1708 }
1471 } 1709 }
1472 1710
1473 /* Change maxf, i.e. what size frames are accepted. 1711 /* Change maxf, i.e. what size frames are accepted.
@@ -1482,6 +1720,7 @@ static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
1482 /* MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */ 1720 /* MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
1483 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; 1721 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128;
1484 1722
1723out:
1485 if (running) { 1724 if (running) {
1486 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 1725 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if),
1487 rcmdsta | PAS_DMA_RXINT_RCMDSTA_EN); 1726 rcmdsta | PAS_DMA_RXINT_RCMDSTA_EN);
@@ -1494,7 +1733,7 @@ static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
1494 pasemi_mac_intf_enable(mac); 1733 pasemi_mac_intf_enable(mac);
1495 } 1734 }
1496 1735
1497 return 0; 1736 return ret;
1498} 1737}
1499 1738
1500static int __devinit 1739static int __devinit
@@ -1528,7 +1767,7 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1528 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64); 1767 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64);
1529 1768
1530 dev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX | NETIF_F_SG | 1769 dev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX | NETIF_F_SG |
1531 NETIF_F_HIGHDMA; 1770 NETIF_F_HIGHDMA | NETIF_F_GSO;
1532 1771
1533 mac->lro_mgr.max_aggr = LRO_MAX_AGGR; 1772 mac->lro_mgr.max_aggr = LRO_MAX_AGGR;
1534 mac->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS; 1773 mac->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS;
@@ -1588,8 +1827,12 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1588 dev->mtu = PE_DEF_MTU; 1827 dev->mtu = PE_DEF_MTU;
1589 /* 1500 MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */ 1828 /* 1500 MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
1590 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; 1829 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128;
1830#ifdef CONFIG_NET_POLL_CONTROLLER
1831 dev->poll_controller = pasemi_mac_netpoll;
1832#endif
1591 1833
1592 dev->change_mtu = pasemi_mac_change_mtu; 1834 dev->change_mtu = pasemi_mac_change_mtu;
1835 dev->ethtool_ops = &pasemi_mac_ethtool_ops;
1593 1836
1594 if (err) 1837 if (err)
1595 goto out; 1838 goto out;
diff --git a/drivers/net/pasemi_mac.h b/drivers/net/pasemi_mac.h
index 99e7b9329a6f..1a115ec60b53 100644
--- a/drivers/net/pasemi_mac.h
+++ b/drivers/net/pasemi_mac.h
@@ -26,7 +26,14 @@
26#include <linux/spinlock.h> 26#include <linux/spinlock.h>
27#include <linux/phy.h> 27#include <linux/phy.h>
28 28
29/* Must be a power of two */
30#define RX_RING_SIZE 2048
31#define TX_RING_SIZE 4096
32#define CS_RING_SIZE (TX_RING_SIZE*2)
33
34
29#define MAX_LRO_DESCRIPTORS 8 35#define MAX_LRO_DESCRIPTORS 8
36#define MAX_CS 2
30 37
31struct pasemi_mac_txring { 38struct pasemi_mac_txring {
32 struct pasemi_dmachan chan; /* Must be first */ 39 struct pasemi_dmachan chan; /* Must be first */
@@ -51,6 +58,15 @@ struct pasemi_mac_rxring {
51 struct pasemi_mac *mac; /* Needed in intr handler */ 58 struct pasemi_mac *mac; /* Needed in intr handler */
52}; 59};
53 60
61struct pasemi_mac_csring {
62 struct pasemi_dmachan chan;
63 unsigned int size;
64 unsigned int next_to_fill;
65 int events[2];
66 int last_event;
67 int fun;
68};
69
54struct pasemi_mac { 70struct pasemi_mac {
55 struct net_device *netdev; 71 struct net_device *netdev;
56 struct pci_dev *pdev; 72 struct pci_dev *pdev;
@@ -60,10 +76,12 @@ struct pasemi_mac {
60 struct napi_struct napi; 76 struct napi_struct napi;
61 77
62 int bufsz; /* RX ring buffer size */ 78 int bufsz; /* RX ring buffer size */
79 int last_cs;
80 int num_cs;
81 u32 dma_if;
63 u8 type; 82 u8 type;
64#define MAC_TYPE_GMAC 1 83#define MAC_TYPE_GMAC 1
65#define MAC_TYPE_XAUI 2 84#define MAC_TYPE_XAUI 2
66 u32 dma_if;
67 85
68 u8 mac_addr[6]; 86 u8 mac_addr[6];
69 87
@@ -74,6 +92,7 @@ struct pasemi_mac {
74 92
75 struct pasemi_mac_txring *tx; 93 struct pasemi_mac_txring *tx;
76 struct pasemi_mac_rxring *rx; 94 struct pasemi_mac_rxring *rx;
95 struct pasemi_mac_csring *cs[MAX_CS];
77 char tx_irq_name[10]; /* "eth%d tx" */ 96 char tx_irq_name[10]; /* "eth%d tx" */
78 char rx_irq_name[10]; /* "eth%d rx" */ 97 char rx_irq_name[10]; /* "eth%d rx" */
79 int link; 98 int link;
@@ -90,6 +109,16 @@ struct pasemi_mac_buffer {
90 dma_addr_t dma; 109 dma_addr_t dma;
91}; 110};
92 111
112#define TX_DESC(tx, num) ((tx)->chan.ring_virt[(num) & (TX_RING_SIZE-1)])
113#define TX_DESC_INFO(tx, num) ((tx)->ring_info[(num) & (TX_RING_SIZE-1)])
114#define RX_DESC(rx, num) ((rx)->chan.ring_virt[(num) & (RX_RING_SIZE-1)])
115#define RX_DESC_INFO(rx, num) ((rx)->ring_info[(num) & (RX_RING_SIZE-1)])
116#define RX_BUFF(rx, num) ((rx)->buffers[(num) & (RX_RING_SIZE-1)])
117#define CS_DESC(cs, num) ((cs)->chan.ring_virt[(num) & (CS_RING_SIZE-1)])
118
119#define RING_USED(ring) (((ring)->next_to_fill - (ring)->next_to_clean) \
120 & ((ring)->size - 1))
121#define RING_AVAIL(ring) ((ring->size) - RING_USED(ring))
93 122
94/* PCI register offsets and formats */ 123/* PCI register offsets and formats */
95 124
@@ -101,6 +130,7 @@ enum {
101 PAS_MAC_CFG_ADR0 = 0x8c, 130 PAS_MAC_CFG_ADR0 = 0x8c,
102 PAS_MAC_CFG_ADR1 = 0x90, 131 PAS_MAC_CFG_ADR1 = 0x90,
103 PAS_MAC_CFG_TXP = 0x98, 132 PAS_MAC_CFG_TXP = 0x98,
133 PAS_MAC_CFG_RMON = 0x100,
104 PAS_MAC_IPC_CHNL = 0x208, 134 PAS_MAC_IPC_CHNL = 0x208,
105}; 135};
106 136
@@ -172,6 +202,8 @@ enum {
172#define PAS_MAC_CFG_TXP_TIFG(x) (((x) << PAS_MAC_CFG_TXP_TIFG_S) & \ 202#define PAS_MAC_CFG_TXP_TIFG(x) (((x) << PAS_MAC_CFG_TXP_TIFG_S) & \
173 PAS_MAC_CFG_TXP_TIFG_M) 203 PAS_MAC_CFG_TXP_TIFG_M)
174 204
205#define PAS_MAC_RMON(r) (0x100+(r)*4)
206
175#define PAS_MAC_IPC_CHNL_DCHNO_M 0x003f0000 207#define PAS_MAC_IPC_CHNL_DCHNO_M 0x003f0000
176#define PAS_MAC_IPC_CHNL_DCHNO_S 16 208#define PAS_MAC_IPC_CHNL_DCHNO_S 16
177#define PAS_MAC_IPC_CHNL_DCHNO(x) (((x) << PAS_MAC_IPC_CHNL_DCHNO_S) & \ 209#define PAS_MAC_IPC_CHNL_DCHNO(x) (((x) << PAS_MAC_IPC_CHNL_DCHNO_S) & \
@@ -181,4 +213,5 @@ enum {
181#define PAS_MAC_IPC_CHNL_BCH(x) (((x) << PAS_MAC_IPC_CHNL_BCH_S) & \ 213#define PAS_MAC_IPC_CHNL_BCH(x) (((x) << PAS_MAC_IPC_CHNL_BCH_S) & \
182 PAS_MAC_IPC_CHNL_BCH_M) 214 PAS_MAC_IPC_CHNL_BCH_M)
183 215
216
184#endif /* PASEMI_MAC_H */ 217#endif /* PASEMI_MAC_H */
diff --git a/drivers/net/pasemi_mac_ethtool.c b/drivers/net/pasemi_mac_ethtool.c
new file mode 100644
index 000000000000..5e8df3afea64
--- /dev/null
+++ b/drivers/net/pasemi_mac_ethtool.c
@@ -0,0 +1,159 @@
1/*
2 * Copyright (C) 2006-2008 PA Semi, Inc
3 *
4 * Ethtool hooks for the PA Semi PWRficient onchip 1G/10G Ethernet MACs
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20
21#include <linux/netdevice.h>
22#include <linux/ethtool.h>
23#include <linux/pci.h>
24#include <linux/inet_lro.h>
25
26#include <asm/pasemi_dma.h>
27#include "pasemi_mac.h"
28
29static struct {
30 const char str[ETH_GSTRING_LEN];
31} ethtool_stats_keys[] = {
32 { "rx-drops" },
33 { "rx-bytes" },
34 { "rx-packets" },
35 { "rx-broadcast-packets" },
36 { "rx-multicast-packets" },
37 { "rx-crc-errors" },
38 { "rx-undersize-errors" },
39 { "rx-oversize-errors" },
40 { "rx-short-fragment-errors" },
41 { "rx-jabber-errors" },
42 { "rx-64-byte-packets" },
43 { "rx-65-127-byte-packets" },
44 { "rx-128-255-byte-packets" },
45 { "rx-256-511-byte-packets" },
46 { "rx-512-1023-byte-packets" },
47 { "rx-1024-1518-byte-packets" },
48 { "rx-pause-frames" },
49 { "tx-bytes" },
50 { "tx-packets" },
51 { "tx-broadcast-packets" },
52 { "tx-multicast-packets" },
53 { "tx-collisions" },
54 { "tx-late-collisions" },
55 { "tx-excessive-collisions" },
56 { "tx-crc-errors" },
57 { "tx-undersize-errors" },
58 { "tx-oversize-errors" },
59 { "tx-64-byte-packets" },
60 { "tx-65-127-byte-packets" },
61 { "tx-128-255-byte-packets" },
62 { "tx-256-511-byte-packets" },
63 { "tx-512-1023-byte-packets" },
64 { "tx-1024-1518-byte-packets" },
65};
66
67static int
68pasemi_mac_ethtool_get_settings(struct net_device *netdev,
69 struct ethtool_cmd *cmd)
70{
71 struct pasemi_mac *mac = netdev_priv(netdev);
72 struct phy_device *phydev = mac->phydev;
73
74 return phy_ethtool_gset(phydev, cmd);
75}
76
77static void
78pasemi_mac_ethtool_get_drvinfo(struct net_device *netdev,
79 struct ethtool_drvinfo *drvinfo)
80{
81 struct pasemi_mac *mac;
82 mac = netdev_priv(netdev);
83
84 /* clear and fill out info */
85 memset(drvinfo, 0, sizeof(struct ethtool_drvinfo));
86 strncpy(drvinfo->driver, "pasemi_mac", 12);
87 strcpy(drvinfo->version, "N/A");
88 strcpy(drvinfo->fw_version, "N/A");
89 strncpy(drvinfo->bus_info, pci_name(mac->pdev), 32);
90}
91
92static u32
93pasemi_mac_ethtool_get_msglevel(struct net_device *netdev)
94{
95 struct pasemi_mac *mac = netdev_priv(netdev);
96 return mac->msg_enable;
97}
98
99static void
100pasemi_mac_ethtool_set_msglevel(struct net_device *netdev,
101 u32 level)
102{
103 struct pasemi_mac *mac = netdev_priv(netdev);
104 mac->msg_enable = level;
105}
106
107
108static void
109pasemi_mac_ethtool_get_ringparam(struct net_device *netdev,
110 struct ethtool_ringparam *ering)
111{
112 struct pasemi_mac *mac = netdev->priv;
113
114 ering->tx_max_pending = TX_RING_SIZE/2;
115 ering->tx_pending = RING_USED(mac->tx)/2;
116 ering->rx_max_pending = RX_RING_SIZE/4;
117 ering->rx_pending = RING_USED(mac->rx)/4;
118}
119
120static int pasemi_mac_get_sset_count(struct net_device *netdev, int sset)
121{
122 switch (sset) {
123 case ETH_SS_STATS:
124 return ARRAY_SIZE(ethtool_stats_keys);
125 default:
126 return -EOPNOTSUPP;
127 }
128}
129
130static void pasemi_mac_get_ethtool_stats(struct net_device *netdev,
131 struct ethtool_stats *stats, u64 *data)
132{
133 struct pasemi_mac *mac = netdev->priv;
134 int i;
135
136 data[0] = pasemi_read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if))
137 >> PAS_DMA_RXINT_RCMDSTA_DROPS_S;
138 for (i = 0; i < 32; i++)
139 data[1+i] = pasemi_read_mac_reg(mac->dma_if, PAS_MAC_RMON(i));
140}
141
142static void pasemi_mac_get_strings(struct net_device *netdev, u32 stringset,
143 u8 *data)
144{
145 memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
146}
147
148const struct ethtool_ops pasemi_mac_ethtool_ops = {
149 .get_settings = pasemi_mac_ethtool_get_settings,
150 .get_drvinfo = pasemi_mac_ethtool_get_drvinfo,
151 .get_msglevel = pasemi_mac_ethtool_get_msglevel,
152 .set_msglevel = pasemi_mac_ethtool_set_msglevel,
153 .get_link = ethtool_op_get_link,
154 .get_ringparam = pasemi_mac_ethtool_get_ringparam,
155 .get_strings = pasemi_mac_get_strings,
156 .get_sset_count = pasemi_mac_get_sset_count,
157 .get_ethtool_stats = pasemi_mac_get_ethtool_stats,
158};
159
diff --git a/drivers/net/ps3_gelic_net.c b/drivers/net/ps3_gelic_net.c
index 7eb6e7e848f4..e365efb3c627 100644
--- a/drivers/net/ps3_gelic_net.c
+++ b/drivers/net/ps3_gelic_net.c
@@ -1266,6 +1266,85 @@ int gelic_net_set_rx_csum(struct net_device *netdev, u32 data)
1266 return 0; 1266 return 0;
1267} 1267}
1268 1268
1269static void gelic_net_get_wol(struct net_device *netdev,
1270 struct ethtool_wolinfo *wol)
1271{
1272 if (0 <= ps3_compare_firmware_version(2, 2, 0))
1273 wol->supported = WAKE_MAGIC;
1274 else
1275 wol->supported = 0;
1276
1277 wol->wolopts = ps3_sys_manager_get_wol() ? wol->supported : 0;
1278 memset(&wol->sopass, 0, sizeof(wol->sopass));
1279}
1280static int gelic_net_set_wol(struct net_device *netdev,
1281 struct ethtool_wolinfo *wol)
1282{
1283 int status;
1284 struct gelic_card *card;
1285 u64 v1, v2;
1286
1287 if (ps3_compare_firmware_version(2, 2, 0) < 0 ||
1288 !capable(CAP_NET_ADMIN))
1289 return -EPERM;
1290
1291 if (wol->wolopts & ~WAKE_MAGIC)
1292 return -EINVAL;
1293
1294 card = netdev_card(netdev);
1295 if (wol->wolopts & WAKE_MAGIC) {
1296 status = lv1_net_control(bus_id(card), dev_id(card),
1297 GELIC_LV1_SET_WOL,
1298 GELIC_LV1_WOL_MAGIC_PACKET,
1299 0, GELIC_LV1_WOL_MP_ENABLE,
1300 &v1, &v2);
1301 if (status) {
1302 pr_info("%s: enabling WOL failed %d\n", __func__,
1303 status);
1304 status = -EIO;
1305 goto done;
1306 }
1307 status = lv1_net_control(bus_id(card), dev_id(card),
1308 GELIC_LV1_SET_WOL,
1309 GELIC_LV1_WOL_ADD_MATCH_ADDR,
1310 0, GELIC_LV1_WOL_MATCH_ALL,
1311 &v1, &v2);
1312 if (!status)
1313 ps3_sys_manager_set_wol(1);
1314 else {
1315 pr_info("%s: enabling WOL filter failed %d\n",
1316 __func__, status);
1317 status = -EIO;
1318 }
1319 } else {
1320 status = lv1_net_control(bus_id(card), dev_id(card),
1321 GELIC_LV1_SET_WOL,
1322 GELIC_LV1_WOL_MAGIC_PACKET,
1323 0, GELIC_LV1_WOL_MP_DISABLE,
1324 &v1, &v2);
1325 if (status) {
1326 pr_info("%s: disabling WOL failed %d\n", __func__,
1327 status);
1328 status = -EIO;
1329 goto done;
1330 }
1331 status = lv1_net_control(bus_id(card), dev_id(card),
1332 GELIC_LV1_SET_WOL,
1333 GELIC_LV1_WOL_DELETE_MATCH_ADDR,
1334 0, GELIC_LV1_WOL_MATCH_ALL,
1335 &v1, &v2);
1336 if (!status)
1337 ps3_sys_manager_set_wol(0);
1338 else {
1339 pr_info("%s: removing WOL filter failed %d\n",
1340 __func__, status);
1341 status = -EIO;
1342 }
1343 }
1344done:
1345 return status;
1346}
1347
1269static struct ethtool_ops gelic_ether_ethtool_ops = { 1348static struct ethtool_ops gelic_ether_ethtool_ops = {
1270 .get_drvinfo = gelic_net_get_drvinfo, 1349 .get_drvinfo = gelic_net_get_drvinfo,
1271 .get_settings = gelic_ether_get_settings, 1350 .get_settings = gelic_ether_get_settings,
@@ -1274,6 +1353,8 @@ static struct ethtool_ops gelic_ether_ethtool_ops = {
1274 .set_tx_csum = ethtool_op_set_tx_csum, 1353 .set_tx_csum = ethtool_op_set_tx_csum,
1275 .get_rx_csum = gelic_net_get_rx_csum, 1354 .get_rx_csum = gelic_net_get_rx_csum,
1276 .set_rx_csum = gelic_net_set_rx_csum, 1355 .set_rx_csum = gelic_net_set_rx_csum,
1356 .get_wol = gelic_net_get_wol,
1357 .set_wol = gelic_net_set_wol,
1277}; 1358};
1278 1359
1279/** 1360/**
diff --git a/drivers/net/ps3_gelic_net.h b/drivers/net/ps3_gelic_net.h
index 1d39d06797e4..520f143c2c09 100644
--- a/drivers/net/ps3_gelic_net.h
+++ b/drivers/net/ps3_gelic_net.h
@@ -182,12 +182,32 @@ enum gelic_lv1_net_control_code {
182 GELIC_LV1_GET_ETH_PORT_STATUS = 2, 182 GELIC_LV1_GET_ETH_PORT_STATUS = 2,
183 GELIC_LV1_SET_NEGOTIATION_MODE = 3, 183 GELIC_LV1_SET_NEGOTIATION_MODE = 3,
184 GELIC_LV1_GET_VLAN_ID = 4, 184 GELIC_LV1_GET_VLAN_ID = 4,
185 GELIC_LV1_SET_WOL = 5,
185 GELIC_LV1_GET_CHANNEL = 6, 186 GELIC_LV1_GET_CHANNEL = 6,
186 GELIC_LV1_POST_WLAN_CMD = 9, 187 GELIC_LV1_POST_WLAN_CMD = 9,
187 GELIC_LV1_GET_WLAN_CMD_RESULT = 10, 188 GELIC_LV1_GET_WLAN_CMD_RESULT = 10,
188 GELIC_LV1_GET_WLAN_EVENT = 11 189 GELIC_LV1_GET_WLAN_EVENT = 11
189}; 190};
190 191
192/* for GELIC_LV1_SET_WOL */
193enum gelic_lv1_wol_command {
194 GELIC_LV1_WOL_MAGIC_PACKET = 1,
195 GELIC_LV1_WOL_ADD_MATCH_ADDR = 6,
196 GELIC_LV1_WOL_DELETE_MATCH_ADDR = 7,
197};
198
199/* for GELIC_LV1_WOL_MAGIC_PACKET */
200enum gelic_lv1_wol_mp_arg {
201 GELIC_LV1_WOL_MP_DISABLE = 0,
202 GELIC_LV1_WOL_MP_ENABLE = 1,
203};
204
205/* for GELIC_LV1_WOL_{ADD,DELETE}_MATCH_ADDR */
206enum gelic_lv1_wol_match_arg {
207 GELIC_LV1_WOL_MATCH_INDIVIDUAL = 0,
208 GELIC_LV1_WOL_MATCH_ALL = 1,
209};
210
191/* status returened from GET_ETH_PORT_STATUS */ 211/* status returened from GET_ETH_PORT_STATUS */
192enum gelic_lv1_ether_port_status { 212enum gelic_lv1_ether_port_status {
193 GELIC_LV1_ETHER_LINK_UP = 0x0000000000000001L, 213 GELIC_LV1_ETHER_LINK_UP = 0x0000000000000001L,
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c
index 29a4d650e8a8..2f11254bcc07 100644
--- a/drivers/net/ucc_geth.c
+++ b/drivers/net/ucc_geth.c
@@ -3853,7 +3853,13 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma
3853 3853
3854 ugeth_vdbg("%s: IN", __FUNCTION__); 3854 ugeth_vdbg("%s: IN", __FUNCTION__);
3855 3855
3856 prop = of_get_property(np, "device-id", NULL); 3856 prop = of_get_property(np, "cell-index", NULL);
3857 if (!prop) {
3858 prop = of_get_property(np, "device-id", NULL);
3859 if (!prop)
3860 return -ENODEV;
3861 }
3862
3857 ucc_num = *prop - 1; 3863 ucc_num = *prop - 1;
3858 if ((ucc_num < 0) || (ucc_num > 7)) 3864 if ((ucc_num < 0) || (ucc_num > 7))
3859 return -ENODEV; 3865 return -ENODEV;
diff --git a/drivers/net/ucc_geth_mii.c b/drivers/net/ucc_geth_mii.c
index e4d3f330bac3..2af490781005 100644
--- a/drivers/net/ucc_geth_mii.c
+++ b/drivers/net/ucc_geth_mii.c
@@ -203,9 +203,14 @@ static int uec_mdio_probe(struct of_device *ofdev, const struct of_device_id *ma
203 if ((res.start >= tempres.start) && 203 if ((res.start >= tempres.start) &&
204 (res.end <= tempres.end)) { 204 (res.end <= tempres.end)) {
205 /* set this UCC to be the MII master */ 205 /* set this UCC to be the MII master */
206 const u32 *id = of_get_property(tempnp, "device-id", NULL); 206 const u32 *id;
207 if (id == NULL) 207
208 goto bus_register_fail; 208 id = of_get_property(tempnp, "cell-index", NULL);
209 if (!id) {
210 id = of_get_property(tempnp, "device-id", NULL);
211 if (!id)
212 goto bus_register_fail;
213 }
209 214
210 ucc_set_qe_mux_mii_mng(*id - 1); 215 ucc_set_qe_mux_mii_mng(*id - 1);
211 216
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index c03072b12f42..3a7a11a75fb4 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -1,3 +1,15 @@
1config OF_DEVICE 1config OF_DEVICE
2 def_bool y 2 def_bool y
3 depends on OF && (SPARC || PPC_OF) 3 depends on OF && (SPARC || PPC_OF)
4
5config OF_GPIO
6 def_bool y
7 depends on OF && PPC_OF && HAVE_GPIO_LIB
8 help
9 OpenFirmware GPIO accessors
10
11config OF_I2C
12 def_tristate I2C
13 depends on PPC_OF && I2C
14 help
15 OpenFirmware I2C accessors
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
index ab9be5d5255b..548772e871fd 100644
--- a/drivers/of/Makefile
+++ b/drivers/of/Makefile
@@ -1,2 +1,4 @@
1obj-y = base.o 1obj-y = base.o
2obj-$(CONFIG_OF_DEVICE) += device.o platform.o 2obj-$(CONFIG_OF_DEVICE) += device.o platform.o
3obj-$(CONFIG_OF_GPIO) += gpio.o
4obj-$(CONFIG_OF_I2C) += of_i2c.o
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 80c9deca5f35..9bd7c4a31253 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -117,6 +117,32 @@ int of_device_is_compatible(const struct device_node *device,
117EXPORT_SYMBOL(of_device_is_compatible); 117EXPORT_SYMBOL(of_device_is_compatible);
118 118
119/** 119/**
120 * of_device_is_available - check if a device is available for use
121 *
122 * @device: Node to check for availability
123 *
124 * Returns 1 if the status property is absent or set to "okay" or "ok",
125 * 0 otherwise
126 */
127int of_device_is_available(const struct device_node *device)
128{
129 const char *status;
130 int statlen;
131
132 status = of_get_property(device, "status", &statlen);
133 if (status == NULL)
134 return 1;
135
136 if (statlen > 0) {
137 if (!strcmp(status, "okay") || !strcmp(status, "ok"))
138 return 1;
139 }
140
141 return 0;
142}
143EXPORT_SYMBOL(of_device_is_available);
144
145/**
120 * of_get_parent - Get a node's parent if any 146 * of_get_parent - Get a node's parent if any
121 * @node: Node to get parent 147 * @node: Node to get parent
122 * 148 *
diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c
new file mode 100644
index 000000000000..000681e98f2c
--- /dev/null
+++ b/drivers/of/gpio.c
@@ -0,0 +1,242 @@
1/*
2 * OF helpers for the GPIO API
3 *
4 * Copyright (c) 2007-2008 MontaVista Software, Inc.
5 *
6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#include <linux/kernel.h>
15#include <linux/errno.h>
16#include <linux/io.h>
17#include <linux/of.h>
18#include <linux/of_gpio.h>
19#include <asm/prom.h>
20
21/**
22 * of_get_gpio - Get a GPIO number from the device tree to use with GPIO API
23 * @np: device node to get GPIO from
24 * @index: index of the GPIO
25 *
26 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
27 * value on the error condition.
28 */
29int of_get_gpio(struct device_node *np, int index)
30{
31 int ret = -EINVAL;
32 struct device_node *gc;
33 struct of_gpio_chip *of_gc = NULL;
34 int size;
35 const u32 *gpios;
36 u32 nr_cells;
37 int i;
38 const void *gpio_spec;
39 const u32 *gpio_cells;
40 int gpio_index = 0;
41
42 gpios = of_get_property(np, "gpios", &size);
43 if (!gpios) {
44 ret = -ENOENT;
45 goto err0;
46 }
47 nr_cells = size / sizeof(u32);
48
49 for (i = 0; i < nr_cells; gpio_index++) {
50 const phandle *gpio_phandle;
51
52 gpio_phandle = gpios + i;
53 gpio_spec = gpio_phandle + 1;
54
55 /* one cell hole in the gpios = <>; */
56 if (!*gpio_phandle) {
57 if (gpio_index == index)
58 return -ENOENT;
59 i++;
60 continue;
61 }
62
63 gc = of_find_node_by_phandle(*gpio_phandle);
64 if (!gc) {
65 pr_debug("%s: could not find phandle for gpios\n",
66 np->full_name);
67 goto err0;
68 }
69
70 of_gc = gc->data;
71 if (!of_gc) {
72 pr_debug("%s: gpio controller %s isn't registered\n",
73 np->full_name, gc->full_name);
74 goto err1;
75 }
76
77 gpio_cells = of_get_property(gc, "#gpio-cells", &size);
78 if (!gpio_cells || size != sizeof(*gpio_cells) ||
79 *gpio_cells != of_gc->gpio_cells) {
80 pr_debug("%s: wrong #gpio-cells for %s\n",
81 np->full_name, gc->full_name);
82 goto err1;
83 }
84
85 /* Next phandle is at phandle cells + #gpio-cells */
86 i += sizeof(*gpio_phandle) / sizeof(u32) + *gpio_cells;
87 if (i >= nr_cells + 1) {
88 pr_debug("%s: insufficient gpio-spec length\n",
89 np->full_name);
90 goto err1;
91 }
92
93 if (gpio_index == index)
94 break;
95
96 of_gc = NULL;
97 of_node_put(gc);
98 }
99
100 if (!of_gc) {
101 ret = -ENOENT;
102 goto err0;
103 }
104
105 ret = of_gc->xlate(of_gc, np, gpio_spec);
106 if (ret < 0)
107 goto err1;
108
109 ret += of_gc->gc.base;
110err1:
111 of_node_put(gc);
112err0:
113 pr_debug("%s exited with status %d\n", __func__, ret);
114 return ret;
115}
116EXPORT_SYMBOL(of_get_gpio);
117
118/**
119 * of_gpio_simple_xlate - translate gpio_spec to the GPIO number
120 * @of_gc: pointer to the of_gpio_chip structure
121 * @np: device node of the GPIO chip
122 * @gpio_spec: gpio specifier as found in the device tree
123 *
124 * This is simple translation function, suitable for the most 1:1 mapped
125 * gpio chips. This function performs only one sanity check: whether gpio
126 * is less than ngpios (that is specified in the gpio_chip).
127 */
128int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, struct device_node *np,
129 const void *gpio_spec)
130{
131 const u32 *gpio = gpio_spec;
132
133 if (*gpio > of_gc->gc.ngpio)
134 return -EINVAL;
135
136 return *gpio;
137}
138EXPORT_SYMBOL(of_gpio_simple_xlate);
139
140/* Should be sufficient for now, later we'll use dynamic bases. */
141#if defined(CONFIG_PPC32) || defined(CONFIG_SPARC32)
142#define GPIOS_PER_CHIP 32
143#else
144#define GPIOS_PER_CHIP 64
145#endif
146
147static int of_get_gpiochip_base(struct device_node *np)
148{
149 struct device_node *gc = NULL;
150 int gpiochip_base = 0;
151
152 while ((gc = of_find_all_nodes(gc))) {
153 if (!of_get_property(gc, "gpio-controller", NULL))
154 continue;
155
156 if (gc != np) {
157 gpiochip_base += GPIOS_PER_CHIP;
158 continue;
159 }
160
161 of_node_put(gc);
162
163 if (gpiochip_base >= ARCH_NR_GPIOS)
164 return -ENOSPC;
165
166 return gpiochip_base;
167 }
168
169 return -ENOENT;
170}
171
172/**
173 * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank)
174 * @np: device node of the GPIO chip
175 * @mm_gc: pointer to the of_mm_gpio_chip allocated structure
176 *
177 * To use this function you should allocate and fill mm_gc with:
178 *
179 * 1) In the gpio_chip structure:
180 * - all the callbacks
181 *
182 * 2) In the of_gpio_chip structure:
183 * - gpio_cells
184 * - xlate callback (optional)
185 *
186 * 3) In the of_mm_gpio_chip structure:
187 * - save_regs callback (optional)
188 *
189 * If succeeded, this function will map bank's memory and will
190 * do all necessary work for you. Then you'll able to use .regs
191 * to manage GPIOs from the callbacks.
192 */
193int of_mm_gpiochip_add(struct device_node *np,
194 struct of_mm_gpio_chip *mm_gc)
195{
196 int ret = -ENOMEM;
197 struct of_gpio_chip *of_gc = &mm_gc->of_gc;
198 struct gpio_chip *gc = &of_gc->gc;
199
200 gc->label = kstrdup(np->full_name, GFP_KERNEL);
201 if (!gc->label)
202 goto err0;
203
204 mm_gc->regs = of_iomap(np, 0);
205 if (!mm_gc->regs)
206 goto err1;
207
208 gc->base = of_get_gpiochip_base(np);
209 if (gc->base < 0) {
210 ret = gc->base;
211 goto err1;
212 }
213
214 if (!of_gc->xlate)
215 of_gc->xlate = of_gpio_simple_xlate;
216
217 if (mm_gc->save_regs)
218 mm_gc->save_regs(mm_gc);
219
220 np->data = of_gc;
221
222 ret = gpiochip_add(gc);
223 if (ret)
224 goto err2;
225
226 /* We don't want to lose the node and its ->data */
227 of_node_get(np);
228
229 pr_debug("%s: registered as generic GPIO chip, base is %d\n",
230 np->full_name, gc->base);
231 return 0;
232err2:
233 np->data = NULL;
234 iounmap(mm_gc->regs);
235err1:
236 kfree(gc->label);
237err0:
238 pr_err("%s: GPIO chip registration failed with status %d\n",
239 np->full_name, ret);
240 return ret;
241}
242EXPORT_SYMBOL(of_mm_gpiochip_add);
diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c
new file mode 100644
index 000000000000..631689171159
--- /dev/null
+++ b/drivers/of/of_i2c.c
@@ -0,0 +1,115 @@
1/*
2 * OF helpers for the I2C API
3 *
4 * Copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
5 *
6 * Based on a previous patch from Jon Smirl <jonsmirl@gmail.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#include <linux/i2c.h>
15#include <linux/of.h>
16
17struct i2c_driver_device {
18 char *of_device;
19 char *i2c_type;
20};
21
22static struct i2c_driver_device i2c_devices[] = {
23 { "dallas,ds1374", "rtc-ds1374" },
24};
25
26static int of_find_i2c_driver(struct device_node *node,
27 struct i2c_board_info *info)
28{
29 int i, cplen;
30 const char *compatible;
31 const char *p;
32
33 /* 1. search for exception list entry */
34 for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) {
35 if (!of_device_is_compatible(node, i2c_devices[i].of_device))
36 continue;
37 if (strlcpy(info->type, i2c_devices[i].i2c_type,
38 I2C_NAME_SIZE) >= I2C_NAME_SIZE)
39 return -ENOMEM;
40
41 return 0;
42 }
43
44 compatible = of_get_property(node, "compatible", &cplen);
45 if (!compatible)
46 return -ENODEV;
47
48 /* 2. search for linux,<i2c-type> entry */
49 p = compatible;
50 while (cplen > 0) {
51 if (!strncmp(p, "linux,", 6)) {
52 p += 6;
53 if (strlcpy(info->type, p,
54 I2C_NAME_SIZE) >= I2C_NAME_SIZE)
55 return -ENOMEM;
56 return 0;
57 }
58
59 i = strlen(p) + 1;
60 p += i;
61 cplen -= i;
62 }
63
64 /* 3. take fist compatible entry and strip manufacturer */
65 p = strchr(compatible, ',');
66 if (!p)
67 return -ENODEV;
68 p++;
69 if (strlcpy(info->type, p, I2C_NAME_SIZE) >= I2C_NAME_SIZE)
70 return -ENOMEM;
71 return 0;
72}
73
74void of_register_i2c_devices(struct i2c_adapter *adap,
75 struct device_node *adap_node)
76{
77 void *result;
78 struct device_node *node;
79
80 for_each_child_of_node(adap_node, node) {
81 struct i2c_board_info info = {};
82 const u32 *addr;
83 int len;
84
85 addr = of_get_property(node, "reg", &len);
86 if (!addr || len < sizeof(int) || *addr > (1 << 10) - 1) {
87 printk(KERN_ERR
88 "of-i2c: invalid i2c device entry\n");
89 continue;
90 }
91
92 info.irq = irq_of_parse_and_map(node, 0);
93 if (info.irq == NO_IRQ)
94 info.irq = -1;
95
96 if (of_find_i2c_driver(node, &info) < 0) {
97 irq_dispose_mapping(info.irq);
98 continue;
99 }
100
101 info.addr = *addr;
102
103 request_module(info.type);
104
105 result = i2c_new_device(adap, &info);
106 if (result == NULL) {
107 printk(KERN_ERR
108 "of-i2c: Failed to load driver for %s\n",
109 info.type);
110 irq_dispose_mapping(info.irq);
111 continue;
112 }
113 }
114}
115EXPORT_SYMBOL(of_register_i2c_devices);
diff --git a/drivers/ps3/ps3-sys-manager.c b/drivers/ps3/ps3-sys-manager.c
index d4f6f960dd18..7605453b74fd 100644
--- a/drivers/ps3/ps3-sys-manager.c
+++ b/drivers/ps3/ps3-sys-manager.c
@@ -24,6 +24,7 @@
24#include <linux/reboot.h> 24#include <linux/reboot.h>
25 25
26#include <asm/firmware.h> 26#include <asm/firmware.h>
27#include <asm/lv1call.h>
27#include <asm/ps3.h> 28#include <asm/ps3.h>
28 29
29#include "vuart.h" 30#include "vuart.h"
@@ -187,6 +188,7 @@ enum ps3_sys_manager_next_op {
187 * controller, and bluetooth controller. 188 * controller, and bluetooth controller.
188 * @PS3_SM_WAKE_RTC: 189 * @PS3_SM_WAKE_RTC:
189 * @PS3_SM_WAKE_RTC_ERROR: 190 * @PS3_SM_WAKE_RTC_ERROR:
191 * @PS3_SM_WAKE_W_O_L: Ether or wireless LAN.
190 * @PS3_SM_WAKE_P_O_R: Power on reset. 192 * @PS3_SM_WAKE_P_O_R: Power on reset.
191 * 193 *
192 * Additional wakeup sources when specifying PS3_SM_NEXT_OP_SYS_SHUTDOWN. 194 * Additional wakeup sources when specifying PS3_SM_NEXT_OP_SYS_SHUTDOWN.
@@ -200,10 +202,19 @@ enum ps3_sys_manager_wake_source {
200 PS3_SM_WAKE_DEFAULT = 0, 202 PS3_SM_WAKE_DEFAULT = 0,
201 PS3_SM_WAKE_RTC = 0x00000040, 203 PS3_SM_WAKE_RTC = 0x00000040,
202 PS3_SM_WAKE_RTC_ERROR = 0x00000080, 204 PS3_SM_WAKE_RTC_ERROR = 0x00000080,
205 PS3_SM_WAKE_W_O_L = 0x00000400,
203 PS3_SM_WAKE_P_O_R = 0x80000000, 206 PS3_SM_WAKE_P_O_R = 0x80000000,
204}; 207};
205 208
206/** 209/**
210 * user_wake_sources - User specified wakeup sources.
211 *
212 * Logical OR of enum ps3_sys_manager_wake_source types.
213 */
214
215static u32 user_wake_sources = PS3_SM_WAKE_DEFAULT;
216
217/**
207 * enum ps3_sys_manager_cmd - Command from system manager to guest. 218 * enum ps3_sys_manager_cmd - Command from system manager to guest.
208 * 219 *
209 * The guest completes the actions needed, then acks or naks the command via 220 * The guest completes the actions needed, then acks or naks the command via
@@ -581,6 +592,23 @@ fail_id:
581 return -EIO; 592 return -EIO;
582} 593}
583 594
595static void ps3_sys_manager_fin(struct ps3_system_bus_device *dev)
596{
597 ps3_sys_manager_send_request_shutdown(dev);
598
599 pr_emerg("System Halted, OK to turn off power\n");
600
601 while (ps3_sys_manager_handle_msg(dev)) {
602 /* pause until next DEC interrupt */
603 lv1_pause(0);
604 }
605
606 while (1) {
607 /* pause, ignoring DEC interrupt */
608 lv1_pause(1);
609 }
610}
611
584/** 612/**
585 * ps3_sys_manager_final_power_off - The final platform machine_power_off routine. 613 * ps3_sys_manager_final_power_off - The final platform machine_power_off routine.
586 * 614 *
@@ -601,13 +629,9 @@ static void ps3_sys_manager_final_power_off(struct ps3_system_bus_device *dev)
601 ps3_vuart_cancel_async(dev); 629 ps3_vuart_cancel_async(dev);
602 630
603 ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_SHUTDOWN, 631 ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_SHUTDOWN,
604 PS3_SM_WAKE_DEFAULT); 632 user_wake_sources);
605 ps3_sys_manager_send_request_shutdown(dev);
606
607 pr_emerg("System Halted, OK to turn off power\n");
608 633
609 while (1) 634 ps3_sys_manager_fin(dev);
610 ps3_sys_manager_handle_msg(dev);
611} 635}
612 636
613/** 637/**
@@ -638,14 +662,42 @@ static void ps3_sys_manager_final_restart(struct ps3_system_bus_device *dev)
638 662
639 ps3_sys_manager_send_attr(dev, 0); 663 ps3_sys_manager_send_attr(dev, 0);
640 ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_REBOOT, 664 ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_REBOOT,
641 PS3_SM_WAKE_DEFAULT); 665 user_wake_sources);
642 ps3_sys_manager_send_request_shutdown(dev);
643 666
644 pr_emerg("System Halted, OK to turn off power\n"); 667 ps3_sys_manager_fin(dev);
668}
669
670/**
671 * ps3_sys_manager_get_wol - Get wake-on-lan setting.
672 */
673
674int ps3_sys_manager_get_wol(void)
675{
676 pr_debug("%s:%d\n", __func__, __LINE__);
677
678 return (user_wake_sources & PS3_SM_WAKE_W_O_L) != 0;
679}
680EXPORT_SYMBOL_GPL(ps3_sys_manager_get_wol);
681
682/**
683 * ps3_sys_manager_set_wol - Set wake-on-lan setting.
684 */
685
686void ps3_sys_manager_set_wol(int state)
687{
688 static DEFINE_MUTEX(mutex);
689
690 mutex_lock(&mutex);
691
692 pr_debug("%s:%d: %d\n", __func__, __LINE__, state);
645 693
646 while (1) 694 if (state)
647 ps3_sys_manager_handle_msg(dev); 695 user_wake_sources |= PS3_SM_WAKE_W_O_L;
696 else
697 user_wake_sources &= ~PS3_SM_WAKE_W_O_L;
698 mutex_unlock(&mutex);
648} 699}
700EXPORT_SYMBOL_GPL(ps3_sys_manager_set_wol);
649 701
650/** 702/**
651 * ps3_sys_manager_work - Asynchronous read handler. 703 * ps3_sys_manager_work - Asynchronous read handler.
diff --git a/drivers/ps3/sys-manager-core.c b/drivers/ps3/sys-manager-core.c
index 31648f7d9ae1..474225852b63 100644
--- a/drivers/ps3/sys-manager-core.c
+++ b/drivers/ps3/sys-manager-core.c
@@ -19,6 +19,7 @@
19 */ 19 */
20 20
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <asm/lv1call.h>
22#include <asm/ps3.h> 23#include <asm/ps3.h>
23 24
24/** 25/**
@@ -50,10 +51,7 @@ void ps3_sys_manager_power_off(void)
50 if (ps3_sys_manager_ops.power_off) 51 if (ps3_sys_manager_ops.power_off)
51 ps3_sys_manager_ops.power_off(ps3_sys_manager_ops.dev); 52 ps3_sys_manager_ops.power_off(ps3_sys_manager_ops.dev);
52 53
53 printk(KERN_EMERG "System Halted, OK to turn off power\n"); 54 ps3_sys_manager_halt();
54 local_irq_disable();
55 while (1)
56 (void)0;
57} 55}
58 56
59void ps3_sys_manager_restart(void) 57void ps3_sys_manager_restart(void)
@@ -61,8 +59,14 @@ void ps3_sys_manager_restart(void)
61 if (ps3_sys_manager_ops.restart) 59 if (ps3_sys_manager_ops.restart)
62 ps3_sys_manager_ops.restart(ps3_sys_manager_ops.dev); 60 ps3_sys_manager_ops.restart(ps3_sys_manager_ops.dev);
63 61
64 printk(KERN_EMERG "System Halted, OK to turn off power\n"); 62 ps3_sys_manager_halt();
63}
64
65void ps3_sys_manager_halt(void)
66{
67 pr_emerg("System Halted, OK to turn off power\n");
65 local_irq_disable(); 68 local_irq_disable();
66 while (1) 69 while (1)
67 (void)0; 70 lv1_pause(1);
68} 71}
72
diff --git a/drivers/serial/cpm_uart/cpm_uart.h b/drivers/serial/cpm_uart/cpm_uart.h
index 32b9737759c4..0cc39f82d7c5 100644
--- a/drivers/serial/cpm_uart/cpm_uart.h
+++ b/drivers/serial/cpm_uart/cpm_uart.h
@@ -92,6 +92,9 @@ extern struct uart_cpm_port cpm_uart_ports[UART_NR];
92 92
93/* these are located in their respective files */ 93/* these are located in their respective files */
94void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd); 94void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd);
95void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
96 struct device_node *np);
97void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram);
95int cpm_uart_init_portdesc(void); 98int cpm_uart_init_portdesc(void);
96int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con); 99int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con);
97void cpm_uart_freebuf(struct uart_cpm_port *pinfo); 100void cpm_uart_freebuf(struct uart_cpm_port *pinfo);
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c
index 236af9d33851..a638ba0679ac 100644
--- a/drivers/serial/cpm_uart/cpm_uart_core.c
+++ b/drivers/serial/cpm_uart/cpm_uart_core.c
@@ -966,24 +966,23 @@ static int cpm_uart_init_port(struct device_node *np,
966 if (!mem) 966 if (!mem)
967 return -ENOMEM; 967 return -ENOMEM;
968 968
969 pram = of_iomap(np, 1);
970 if (!pram) {
971 ret = -ENOMEM;
972 goto out_mem;
973 }
974
975 if (of_device_is_compatible(np, "fsl,cpm1-scc-uart") || 969 if (of_device_is_compatible(np, "fsl,cpm1-scc-uart") ||
976 of_device_is_compatible(np, "fsl,cpm2-scc-uart")) { 970 of_device_is_compatible(np, "fsl,cpm2-scc-uart")) {
977 pinfo->sccp = mem; 971 pinfo->sccp = mem;
978 pinfo->sccup = pram; 972 pinfo->sccup = pram = cpm_uart_map_pram(pinfo, np);
979 } else if (of_device_is_compatible(np, "fsl,cpm1-smc-uart") || 973 } else if (of_device_is_compatible(np, "fsl,cpm1-smc-uart") ||
980 of_device_is_compatible(np, "fsl,cpm2-smc-uart")) { 974 of_device_is_compatible(np, "fsl,cpm2-smc-uart")) {
981 pinfo->flags |= FLAG_SMC; 975 pinfo->flags |= FLAG_SMC;
982 pinfo->smcp = mem; 976 pinfo->smcp = mem;
983 pinfo->smcup = pram; 977 pinfo->smcup = pram = cpm_uart_map_pram(pinfo, np);
984 } else { 978 } else {
985 ret = -ENODEV; 979 ret = -ENODEV;
986 goto out_pram; 980 goto out_mem;
981 }
982
983 if (!pram) {
984 ret = -ENOMEM;
985 goto out_mem;
987 } 986 }
988 987
989 pinfo->tx_nrfifos = TX_NUM_FIFO; 988 pinfo->tx_nrfifos = TX_NUM_FIFO;
@@ -1007,7 +1006,7 @@ static int cpm_uart_init_port(struct device_node *np,
1007 return cpm_uart_request_port(&pinfo->port); 1006 return cpm_uart_request_port(&pinfo->port);
1008 1007
1009out_pram: 1008out_pram:
1010 iounmap(pram); 1009 cpm_uart_unmap_pram(pinfo, pram);
1011out_mem: 1010out_mem:
1012 iounmap(mem); 1011 iounmap(mem);
1013 return ret; 1012 return ret;
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm1.c b/drivers/serial/cpm_uart/cpm_uart_cpm1.c
index 6ea0366e26ae..74f1432bb248 100644
--- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c
+++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c
@@ -45,6 +45,8 @@
45#include <linux/serial_core.h> 45#include <linux/serial_core.h>
46#include <linux/kernel.h> 46#include <linux/kernel.h>
47 47
48#include <linux/of.h>
49
48#include "cpm_uart.h" 50#include "cpm_uart.h"
49 51
50/**************************************************************/ 52/**************************************************************/
@@ -54,6 +56,18 @@ void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
54{ 56{
55 cpm_command(port->command, cmd); 57 cpm_command(port->command, cmd);
56} 58}
59
60void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
61 struct device_node *np)
62{
63 return of_iomap(np, 1);
64}
65
66void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram)
67{
68 iounmap(pram);
69}
70
57#else 71#else
58void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd) 72void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
59{ 73{
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm2.c b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
index d9af06a791ba..bb862e2f54cf 100644
--- a/drivers/serial/cpm_uart/cpm_uart_cpm2.c
+++ b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
@@ -41,6 +41,9 @@
41#include <asm/io.h> 41#include <asm/io.h>
42#include <asm/irq.h> 42#include <asm/irq.h>
43#include <asm/fs_pd.h> 43#include <asm/fs_pd.h>
44#ifdef CONFIG_PPC_CPM_NEW_BINDING
45#include <asm/prom.h>
46#endif
44 47
45#include <linux/serial_core.h> 48#include <linux/serial_core.h>
46#include <linux/kernel.h> 49#include <linux/kernel.h>
@@ -54,6 +57,55 @@ void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
54{ 57{
55 cpm_command(port->command, cmd); 58 cpm_command(port->command, cmd);
56} 59}
60
61void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
62 struct device_node *np)
63{
64 void __iomem *pram;
65 unsigned long offset;
66 struct resource res;
67 unsigned long len;
68
69 /* Don't remap parameter RAM if it has already been initialized
70 * during console setup.
71 */
72 if (IS_SMC(port) && port->smcup)
73 return port->smcup;
74 else if (!IS_SMC(port) && port->sccup)
75 return port->sccup;
76
77 if (of_address_to_resource(np, 1, &res))
78 return NULL;
79
80 len = 1 + res.end - res.start;
81 pram = ioremap(res.start, len);
82 if (!pram)
83 return NULL;
84
85 if (!IS_SMC(port))
86 return pram;
87
88 if (len != 2) {
89 printk(KERN_WARNING "cpm_uart[%d]: device tree references "
90 "SMC pram, using boot loader/wrapper pram mapping. "
91 "Please fix your device tree to reference the pram "
92 "base register instead.\n",
93 port->port.line);
94 return pram;
95 }
96
97 offset = cpm_dpalloc(PROFF_SMC_SIZE, 64);
98 out_be16(pram, offset);
99 iounmap(pram);
100 return cpm_muram_addr(offset);
101}
102
103void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram)
104{
105 if (!IS_SMC(port))
106 iounmap(pram);
107}
108
57#else 109#else
58void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd) 110void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
59{ 111{
diff --git a/drivers/serial/of_serial.c b/drivers/serial/of_serial.c
index c0e50a461055..8aacfb78deab 100644
--- a/drivers/serial/of_serial.c
+++ b/drivers/serial/of_serial.c
@@ -56,7 +56,9 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev,
56 port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP 56 port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
57 | UPF_FIXED_PORT; 57 | UPF_FIXED_PORT;
58 port->dev = &ofdev->dev; 58 port->dev = &ofdev->dev;
59 port->custom_divisor = *clk / (16 * (*spd)); 59 /* If current-speed was set, then try not to change it. */
60 if (spd)
61 port->custom_divisor = *clk / (16 * (*spd));
60 62
61 return 0; 63 return 0;
62} 64}
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c
index e0994f061001..5e4310ccd591 100644
--- a/drivers/serial/ucc_uart.c
+++ b/drivers/serial/ucc_uart.c
@@ -1270,10 +1270,18 @@ static int ucc_uart_probe(struct of_device *ofdev,
1270 1270
1271 /* Get the UCC number (device ID) */ 1271 /* Get the UCC number (device ID) */
1272 /* UCCs are numbered 1-7 */ 1272 /* UCCs are numbered 1-7 */
1273 iprop = of_get_property(np, "device-id", NULL); 1273 iprop = of_get_property(np, "cell-index", NULL);
1274 if (!iprop || (*iprop < 1) || (*iprop > UCC_MAX_NUM)) { 1274 if (!iprop) {
1275 dev_err(&ofdev->dev, 1275 iprop = of_get_property(np, "device-id", NULL);
1276 "missing or invalid UCC specified in device tree\n"); 1276 if (!iprop) {
1277 dev_err(&ofdev->dev, "UCC is unspecified in "
1278 "device tree\n");
1279 return -EINVAL;
1280 }
1281 }
1282
1283 if ((*iprop < 1) || (*iprop > UCC_MAX_NUM)) {
1284 dev_err(&ofdev->dev, "no support for UCC%u\n", *iprop);
1277 kfree(qe_port); 1285 kfree(qe_port);
1278 return -ENODEV; 1286 return -ENODEV;
1279 } 1287 }
diff --git a/include/asm-powerpc/Kbuild b/include/asm-powerpc/Kbuild
index 5f640e542475..7381916dfcbb 100644
--- a/include/asm-powerpc/Kbuild
+++ b/include/asm-powerpc/Kbuild
@@ -1,5 +1,6 @@
1include include/asm-generic/Kbuild.asm 1include include/asm-generic/Kbuild.asm
2 2
3header-y += a.out.h
3header-y += auxvec.h 4header-y += auxvec.h
4header-y += ioctls.h 5header-y += ioctls.h
5header-y += mman.h 6header-y += mman.h
@@ -23,7 +24,6 @@ header-y += sigcontext.h
23header-y += statfs.h 24header-y += statfs.h
24header-y += ps3fb.h 25header-y += ps3fb.h
25 26
26unifdef-y += a.out.h
27unifdef-y += asm-compat.h 27unifdef-y += asm-compat.h
28unifdef-y += bootx.h 28unifdef-y += bootx.h
29unifdef-y += byteorder.h 29unifdef-y += byteorder.h
diff --git a/include/asm-powerpc/abs_addr.h b/include/asm-powerpc/abs_addr.h
index 4aa220718b19..98324c5a8286 100644
--- a/include/asm-powerpc/abs_addr.h
+++ b/include/asm-powerpc/abs_addr.h
@@ -12,10 +12,11 @@
12 * 2 of the License, or (at your option) any later version. 12 * 2 of the License, or (at your option) any later version.
13 */ 13 */
14 14
15#include <linux/lmb.h>
16
15#include <asm/types.h> 17#include <asm/types.h>
16#include <asm/page.h> 18#include <asm/page.h>
17#include <asm/prom.h> 19#include <asm/prom.h>
18#include <asm/lmb.h>
19#include <asm/firmware.h> 20#include <asm/firmware.h>
20 21
21struct mschunks_map { 22struct mschunks_map {
diff --git a/include/asm-powerpc/bitops.h b/include/asm-powerpc/bitops.h
index 220d9a781ab9..a99a74929475 100644
--- a/include/asm-powerpc/bitops.h
+++ b/include/asm-powerpc/bitops.h
@@ -312,24 +312,26 @@ static __inline__ int fls(unsigned int x)
312 asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x)); 312 asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
313 return 32 - lz; 313 return 32 - lz;
314} 314}
315
316/*
317 * 64-bit can do this using one cntlzd (count leading zeroes doubleword)
318 * instruction; for 32-bit we use the generic version, which does two
319 * 32-bit fls calls.
320 */
321#ifdef __powerpc64__
322static __inline__ int fls64(__u64 x)
323{
324 int lz;
325
326 asm ("cntlzd %0,%1" : "=r" (lz) : "r" (x));
327 return 64 - lz;
328}
329#else
315#include <asm-generic/bitops/fls64.h> 330#include <asm-generic/bitops/fls64.h>
331#endif /* __powerpc64__ */
316 332
317#include <asm-generic/bitops/hweight.h> 333#include <asm-generic/bitops/hweight.h>
318 334#include <asm-generic/bitops/find.h>
319#define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0)
320unsigned long find_next_zero_bit(const unsigned long *addr,
321 unsigned long size, unsigned long offset);
322/**
323 * find_first_bit - find the first set bit in a memory region
324 * @addr: The address to start the search at
325 * @size: The maximum size to search
326 *
327 * Returns the bit-number of the first set bit, not the number of the byte
328 * containing a bit.
329 */
330#define find_first_bit(addr, size) find_next_bit((addr), (size), 0)
331unsigned long find_next_bit(const unsigned long *addr,
332 unsigned long size, unsigned long offset);
333 335
334/* Little-endian versions */ 336/* Little-endian versions */
335 337
diff --git a/include/asm-powerpc/cpm.h b/include/asm-powerpc/cpm.h
index 77e39dad9728..ede38ffe466a 100644
--- a/include/asm-powerpc/cpm.h
+++ b/include/asm-powerpc/cpm.h
@@ -4,6 +4,20 @@
4#include <linux/compiler.h> 4#include <linux/compiler.h>
5#include <linux/types.h> 5#include <linux/types.h>
6 6
7/* Opcodes common to CPM1 and CPM2
8*/
9#define CPM_CR_INIT_TRX ((ushort)0x0000)
10#define CPM_CR_INIT_RX ((ushort)0x0001)
11#define CPM_CR_INIT_TX ((ushort)0x0002)
12#define CPM_CR_HUNT_MODE ((ushort)0x0003)
13#define CPM_CR_STOP_TX ((ushort)0x0004)
14#define CPM_CR_GRA_STOP_TX ((ushort)0x0005)
15#define CPM_CR_RESTART_TX ((ushort)0x0006)
16#define CPM_CR_CLOSE_RX_BD ((ushort)0x0007)
17#define CPM_CR_SET_GADDR ((ushort)0x0008)
18#define CPM_CR_SET_TIMER ((ushort)0x0008)
19#define CPM_CR_STOP_IDMA ((ushort)0x000b)
20
7/* Buffer descriptors used by many of the CPM protocols. */ 21/* Buffer descriptors used by many of the CPM protocols. */
8typedef struct cpm_buf_desc { 22typedef struct cpm_buf_desc {
9 ushort cbd_sc; /* Status and Control */ 23 ushort cbd_sc; /* Status and Control */
diff --git a/include/asm-powerpc/cpm1.h b/include/asm-powerpc/cpm1.h
index b2ebd6ac6dae..3df439678006 100644
--- a/include/asm-powerpc/cpm1.h
+++ b/include/asm-powerpc/cpm1.h
@@ -28,19 +28,6 @@
28#define CPM_CR_CHAN ((ushort)0x00f0) 28#define CPM_CR_CHAN ((ushort)0x00f0)
29#define CPM_CR_FLG ((ushort)0x0001) 29#define CPM_CR_FLG ((ushort)0x0001)
30 30
31/* Some commands (there are more...later)
32*/
33#define CPM_CR_INIT_TRX ((ushort)0x0000)
34#define CPM_CR_INIT_RX ((ushort)0x0001)
35#define CPM_CR_INIT_TX ((ushort)0x0002)
36#define CPM_CR_HUNT_MODE ((ushort)0x0003)
37#define CPM_CR_STOP_TX ((ushort)0x0004)
38#define CPM_CR_GRA_STOP_TX ((ushort)0x0005)
39#define CPM_CR_RESTART_TX ((ushort)0x0006)
40#define CPM_CR_CLOSE_RX_BD ((ushort)0x0007)
41#define CPM_CR_SET_GADDR ((ushort)0x0008)
42#define CPM_CR_SET_TIMER CPM_CR_SET_GADDR
43
44/* Channel numbers. 31/* Channel numbers.
45*/ 32*/
46#define CPM_CR_CH_SCC1 ((ushort)0x0000) 33#define CPM_CR_CH_SCC1 ((ushort)0x0000)
diff --git a/include/asm-powerpc/cpm2.h b/include/asm-powerpc/cpm2.h
index b93a53eb55c1..4c85ed9cd43f 100644
--- a/include/asm-powerpc/cpm2.h
+++ b/include/asm-powerpc/cpm2.h
@@ -71,18 +71,9 @@
71 71
72#define CPM_CR_FCC_PAGE(x) (x + 0x04) 72#define CPM_CR_FCC_PAGE(x) (x + 0x04)
73 73
74/* Some opcodes (there are more...later) 74/* CPM2-specific opcodes (see cpm.h for common opcodes)
75*/ 75*/
76#define CPM_CR_INIT_TRX ((ushort)0x0000)
77#define CPM_CR_INIT_RX ((ushort)0x0001)
78#define CPM_CR_INIT_TX ((ushort)0x0002)
79#define CPM_CR_HUNT_MODE ((ushort)0x0003)
80#define CPM_CR_STOP_TX ((ushort)0x0004)
81#define CPM_CR_GRA_STOP_TX ((ushort)0x0005)
82#define CPM_CR_RESTART_TX ((ushort)0x0006)
83#define CPM_CR_SET_GADDR ((ushort)0x0008)
84#define CPM_CR_START_IDMA ((ushort)0x0009) 76#define CPM_CR_START_IDMA ((ushort)0x0009)
85#define CPM_CR_STOP_IDMA ((ushort)0x000b)
86 77
87#define mk_cr_cmd(PG, SBC, MCN, OP) \ 78#define mk_cr_cmd(PG, SBC, MCN, OP) \
88 ((PG << 26) | (SBC << 21) | (MCN << 6) | OP) 79 ((PG << 26) | (SBC << 21) | (MCN << 6) | OP)
diff --git a/include/asm-powerpc/cputhreads.h b/include/asm-powerpc/cputhreads.h
index 8485c28b5f47..fb11b0c459b8 100644
--- a/include/asm-powerpc/cputhreads.h
+++ b/include/asm-powerpc/cputhreads.h
@@ -35,7 +35,7 @@ static inline cpumask_t cpu_thread_mask_to_cores(cpumask_t threads)
35 35
36 res = CPU_MASK_NONE; 36 res = CPU_MASK_NONE;
37 for (i = 0; i < NR_CPUS; i += threads_per_core) { 37 for (i = 0; i < NR_CPUS; i += threads_per_core) {
38 cpus_shift_right(tmp, threads_core_mask, i); 38 cpus_shift_left(tmp, threads_core_mask, i);
39 if (cpus_intersects(threads, tmp)) 39 if (cpus_intersects(threads, tmp))
40 cpu_set(i, res); 40 cpu_set(i, res);
41 } 41 }
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h
index be6c879e8760..f8398ce80372 100644
--- a/include/asm-powerpc/dcr-native.h
+++ b/include/asm-powerpc/dcr-native.h
@@ -82,6 +82,19 @@ static inline void __mtdcri(int base_addr, int base_data, int reg,
82 spin_unlock_irqrestore(&dcr_ind_lock, flags); 82 spin_unlock_irqrestore(&dcr_ind_lock, flags);
83} 83}
84 84
85static inline void __dcri_clrset(int base_addr, int base_data, int reg,
86 unsigned clr, unsigned set)
87{
88 unsigned long flags;
89 unsigned int val;
90
91 spin_lock_irqsave(&dcr_ind_lock, flags);
92 __mtdcr(base_addr, reg);
93 val = (__mfdcr(base_data) & ~clr) | set;
94 __mtdcr(base_data, val);
95 spin_unlock_irqrestore(&dcr_ind_lock, flags);
96}
97
85#define mfdcri(base, reg) __mfdcri(DCRN_ ## base ## _CONFIG_ADDR, \ 98#define mfdcri(base, reg) __mfdcri(DCRN_ ## base ## _CONFIG_ADDR, \
86 DCRN_ ## base ## _CONFIG_DATA, \ 99 DCRN_ ## base ## _CONFIG_DATA, \
87 reg) 100 reg)
@@ -90,6 +103,10 @@ static inline void __mtdcri(int base_addr, int base_data, int reg,
90 DCRN_ ## base ## _CONFIG_DATA, \ 103 DCRN_ ## base ## _CONFIG_DATA, \
91 reg, data) 104 reg, data)
92 105
106#define dcri_clrset(base, reg, clr, set) __dcri_clrset(DCRN_ ## base ## _CONFIG_ADDR, \
107 DCRN_ ## base ## _CONFIG_DATA, \
108 reg, clr, set)
109
93#endif /* __ASSEMBLY__ */ 110#endif /* __ASSEMBLY__ */
94#endif /* __KERNEL__ */ 111#endif /* __KERNEL__ */
95#endif /* _ASM_POWERPC_DCR_NATIVE_H */ 112#endif /* _ASM_POWERPC_DCR_NATIVE_H */
diff --git a/include/asm-powerpc/dcr-regs.h b/include/asm-powerpc/dcr-regs.h
index 9f1fb98fcdc6..29b0ecef980a 100644
--- a/include/asm-powerpc/dcr-regs.h
+++ b/include/asm-powerpc/dcr-regs.h
@@ -68,4 +68,82 @@
68#define SDR0_UART3 0x0123 68#define SDR0_UART3 0x0123
69#define SDR0_CUST0 0x4000 69#define SDR0_CUST0 0x4000
70 70
71/*
72 * All those DCR register addresses are offsets from the base address
73 * for the SRAM0 controller (e.g. 0x20 on 440GX). The base address is
74 * excluded here and configured in the device tree.
75 */
76#define DCRN_SRAM0_SB0CR 0x00
77#define DCRN_SRAM0_SB1CR 0x01
78#define DCRN_SRAM0_SB2CR 0x02
79#define DCRN_SRAM0_SB3CR 0x03
80#define SRAM_SBCR_BU_MASK 0x00000180
81#define SRAM_SBCR_BS_64KB 0x00000800
82#define SRAM_SBCR_BU_RO 0x00000080
83#define SRAM_SBCR_BU_RW 0x00000180
84#define DCRN_SRAM0_BEAR 0x04
85#define DCRN_SRAM0_BESR0 0x05
86#define DCRN_SRAM0_BESR1 0x06
87#define DCRN_SRAM0_PMEG 0x07
88#define DCRN_SRAM0_CID 0x08
89#define DCRN_SRAM0_REVID 0x09
90#define DCRN_SRAM0_DPC 0x0a
91#define SRAM_DPC_ENABLE 0x80000000
92
93/*
94 * All those DCR register addresses are offsets from the base address
95 * for the SRAM0 controller (e.g. 0x30 on 440GX). The base address is
96 * excluded here and configured in the device tree.
97 */
98#define DCRN_L2C0_CFG 0x00
99#define L2C_CFG_L2M 0x80000000
100#define L2C_CFG_ICU 0x40000000
101#define L2C_CFG_DCU 0x20000000
102#define L2C_CFG_DCW_MASK 0x1e000000
103#define L2C_CFG_TPC 0x01000000
104#define L2C_CFG_CPC 0x00800000
105#define L2C_CFG_FRAN 0x00200000
106#define L2C_CFG_SS_MASK 0x00180000
107#define L2C_CFG_SS_256 0x00000000
108#define L2C_CFG_CPIM 0x00040000
109#define L2C_CFG_TPIM 0x00020000
110#define L2C_CFG_LIM 0x00010000
111#define L2C_CFG_PMUX_MASK 0x00007000
112#define L2C_CFG_PMUX_SNP 0x00000000
113#define L2C_CFG_PMUX_IF 0x00001000
114#define L2C_CFG_PMUX_DF 0x00002000
115#define L2C_CFG_PMUX_DS 0x00003000
116#define L2C_CFG_PMIM 0x00000800
117#define L2C_CFG_TPEI 0x00000400
118#define L2C_CFG_CPEI 0x00000200
119#define L2C_CFG_NAM 0x00000100
120#define L2C_CFG_SMCM 0x00000080
121#define L2C_CFG_NBRM 0x00000040
122#define L2C_CFG_RDBW 0x00000008 /* only 460EX/GT */
123#define DCRN_L2C0_CMD 0x01
124#define L2C_CMD_CLR 0x80000000
125#define L2C_CMD_DIAG 0x40000000
126#define L2C_CMD_INV 0x20000000
127#define L2C_CMD_CCP 0x10000000
128#define L2C_CMD_CTE 0x08000000
129#define L2C_CMD_STRC 0x04000000
130#define L2C_CMD_STPC 0x02000000
131#define L2C_CMD_RPMC 0x01000000
132#define L2C_CMD_HCC 0x00800000
133#define DCRN_L2C0_ADDR 0x02
134#define DCRN_L2C0_DATA 0x03
135#define DCRN_L2C0_SR 0x04
136#define L2C_SR_CC 0x80000000
137#define L2C_SR_CPE 0x40000000
138#define L2C_SR_TPE 0x20000000
139#define L2C_SR_LRU 0x10000000
140#define L2C_SR_PCS 0x08000000
141#define DCRN_L2C0_REVID 0x05
142#define DCRN_L2C0_SNP0 0x06
143#define DCRN_L2C0_SNP1 0x07
144#define L2C_SNP_BA_MASK 0xffff0000
145#define L2C_SNP_SSR_MASK 0x0000f000
146#define L2C_SNP_SSR_32G 0x0000f000
147#define L2C_SNP_ESR 0x00000800
148
71#endif /* __DCR_REGS_H__ */ 149#endif /* __DCR_REGS_H__ */
diff --git a/include/asm-powerpc/exception.h b/include/asm-powerpc/exception.h
index 39abdb02fdef..329148b5acc6 100644
--- a/include/asm-powerpc/exception.h
+++ b/include/asm-powerpc/exception.h
@@ -228,18 +228,18 @@ label##_pSeries: \
228BEGIN_FW_FTR_SECTION; \ 228BEGIN_FW_FTR_SECTION; \
229 stb r11,PACAHARDIRQEN(r13); \ 229 stb r11,PACAHARDIRQEN(r13); \
230END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES); \ 230END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES); \
231 TRACE_DISABLE_INTS; \
231BEGIN_FW_FTR_SECTION; \ 232BEGIN_FW_FTR_SECTION; \
232 mfmsr r10; \ 233 mfmsr r10; \
233 ori r10,r10,MSR_EE; \ 234 ori r10,r10,MSR_EE; \
234 mtmsrd r10,1; \ 235 mtmsrd r10,1; \
235END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 236END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
236
237#else 237#else
238#define DISABLE_INTS \ 238#define DISABLE_INTS \
239 li r11,0; \ 239 li r11,0; \
240 stb r11,PACASOFTIRQEN(r13); \ 240 stb r11,PACASOFTIRQEN(r13); \
241 stb r11,PACAHARDIRQEN(r13) 241 stb r11,PACAHARDIRQEN(r13); \
242 242 TRACE_DISABLE_INTS
243#endif /* CONFIG_PPC_ISERIES */ 243#endif /* CONFIG_PPC_ISERIES */
244 244
245#define ENABLE_INTS \ 245#define ENABLE_INTS \
diff --git a/include/asm-powerpc/fsl_lbc.h b/include/asm-powerpc/fsl_lbc.h
new file mode 100644
index 000000000000..303f5484c050
--- /dev/null
+++ b/include/asm-powerpc/fsl_lbc.h
@@ -0,0 +1,311 @@
1/* Freescale Local Bus Controller
2 *
3 * Copyright (c) 2006-2007 Freescale Semiconductor
4 *
5 * Authors: Nick Spence <nick.spence@freescale.com>,
6 * Scott Wood <scottwood@freescale.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#ifndef __ASM_FSL_LBC_H
24#define __ASM_FSL_LBC_H
25
26#include <linux/types.h>
27#include <linux/spinlock.h>
28#include <asm/io.h>
29
30struct fsl_lbc_bank {
31 __be32 br; /**< Base Register */
32#define BR_BA 0xFFFF8000
33#define BR_BA_SHIFT 15
34#define BR_PS 0x00001800
35#define BR_PS_SHIFT 11
36#define BR_PS_8 0x00000800 /* Port Size 8 bit */
37#define BR_PS_16 0x00001000 /* Port Size 16 bit */
38#define BR_PS_32 0x00001800 /* Port Size 32 bit */
39#define BR_DECC 0x00000600
40#define BR_DECC_SHIFT 9
41#define BR_DECC_OFF 0x00000000 /* HW ECC checking and generation off */
42#define BR_DECC_CHK 0x00000200 /* HW ECC checking on, generation off */
43#define BR_DECC_CHK_GEN 0x00000400 /* HW ECC checking and generation on */
44#define BR_WP 0x00000100
45#define BR_WP_SHIFT 8
46#define BR_MSEL 0x000000E0
47#define BR_MSEL_SHIFT 5
48#define BR_MS_GPCM 0x00000000 /* GPCM */
49#define BR_MS_FCM 0x00000020 /* FCM */
50#define BR_MS_SDRAM 0x00000060 /* SDRAM */
51#define BR_MS_UPMA 0x00000080 /* UPMA */
52#define BR_MS_UPMB 0x000000A0 /* UPMB */
53#define BR_MS_UPMC 0x000000C0 /* UPMC */
54#define BR_V 0x00000001
55#define BR_V_SHIFT 0
56#define BR_RES ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
57
58 __be32 or; /**< Base Register */
59#define OR0 0x5004
60#define OR1 0x500C
61#define OR2 0x5014
62#define OR3 0x501C
63#define OR4 0x5024
64#define OR5 0x502C
65#define OR6 0x5034
66#define OR7 0x503C
67
68#define OR_FCM_AM 0xFFFF8000
69#define OR_FCM_AM_SHIFT 15
70#define OR_FCM_BCTLD 0x00001000
71#define OR_FCM_BCTLD_SHIFT 12
72#define OR_FCM_PGS 0x00000400
73#define OR_FCM_PGS_SHIFT 10
74#define OR_FCM_CSCT 0x00000200
75#define OR_FCM_CSCT_SHIFT 9
76#define OR_FCM_CST 0x00000100
77#define OR_FCM_CST_SHIFT 8
78#define OR_FCM_CHT 0x00000080
79#define OR_FCM_CHT_SHIFT 7
80#define OR_FCM_SCY 0x00000070
81#define OR_FCM_SCY_SHIFT 4
82#define OR_FCM_SCY_1 0x00000010
83#define OR_FCM_SCY_2 0x00000020
84#define OR_FCM_SCY_3 0x00000030
85#define OR_FCM_SCY_4 0x00000040
86#define OR_FCM_SCY_5 0x00000050
87#define OR_FCM_SCY_6 0x00000060
88#define OR_FCM_SCY_7 0x00000070
89#define OR_FCM_RST 0x00000008
90#define OR_FCM_RST_SHIFT 3
91#define OR_FCM_TRLX 0x00000004
92#define OR_FCM_TRLX_SHIFT 2
93#define OR_FCM_EHTR 0x00000002
94#define OR_FCM_EHTR_SHIFT 1
95};
96
97struct fsl_lbc_regs {
98 struct fsl_lbc_bank bank[8];
99 u8 res0[0x28];
100 __be32 mar; /**< UPM Address Register */
101 u8 res1[0x4];
102 __be32 mamr; /**< UPMA Mode Register */
103#define MxMR_OP_NO (0 << 28) /**< normal operation */
104#define MxMR_OP_WA (1 << 28) /**< write array */
105#define MxMR_OP_RA (2 << 28) /**< read array */
106#define MxMR_OP_RP (3 << 28) /**< run pattern */
107#define MxMR_MAD 0x3f /**< machine address */
108 __be32 mbmr; /**< UPMB Mode Register */
109 __be32 mcmr; /**< UPMC Mode Register */
110 u8 res2[0x8];
111 __be32 mrtpr; /**< Memory Refresh Timer Prescaler Register */
112 __be32 mdr; /**< UPM Data Register */
113 u8 res3[0x4];
114 __be32 lsor; /**< Special Operation Initiation Register */
115 __be32 lsdmr; /**< SDRAM Mode Register */
116 u8 res4[0x8];
117 __be32 lurt; /**< UPM Refresh Timer */
118 __be32 lsrt; /**< SDRAM Refresh Timer */
119 u8 res5[0x8];
120 __be32 ltesr; /**< Transfer Error Status Register */
121#define LTESR_BM 0x80000000
122#define LTESR_FCT 0x40000000
123#define LTESR_PAR 0x20000000
124#define LTESR_WP 0x04000000
125#define LTESR_ATMW 0x00800000
126#define LTESR_ATMR 0x00400000
127#define LTESR_CS 0x00080000
128#define LTESR_CC 0x00000001
129#define LTESR_NAND_MASK (LTESR_FCT | LTESR_PAR | LTESR_CC)
130 __be32 ltedr; /**< Transfer Error Disable Register */
131 __be32 lteir; /**< Transfer Error Interrupt Register */
132 __be32 lteatr; /**< Transfer Error Attributes Register */
133 __be32 ltear; /**< Transfer Error Address Register */
134 u8 res6[0xC];
135 __be32 lbcr; /**< Configuration Register */
136#define LBCR_LDIS 0x80000000
137#define LBCR_LDIS_SHIFT 31
138#define LBCR_BCTLC 0x00C00000
139#define LBCR_BCTLC_SHIFT 22
140#define LBCR_AHD 0x00200000
141#define LBCR_LPBSE 0x00020000
142#define LBCR_LPBSE_SHIFT 17
143#define LBCR_EPAR 0x00010000
144#define LBCR_EPAR_SHIFT 16
145#define LBCR_BMT 0x0000FF00
146#define LBCR_BMT_SHIFT 8
147#define LBCR_INIT 0x00040000
148 __be32 lcrr; /**< Clock Ratio Register */
149#define LCRR_DBYP 0x80000000
150#define LCRR_DBYP_SHIFT 31
151#define LCRR_BUFCMDC 0x30000000
152#define LCRR_BUFCMDC_SHIFT 28
153#define LCRR_ECL 0x03000000
154#define LCRR_ECL_SHIFT 24
155#define LCRR_EADC 0x00030000
156#define LCRR_EADC_SHIFT 16
157#define LCRR_CLKDIV 0x0000000F
158#define LCRR_CLKDIV_SHIFT 0
159 u8 res7[0x8];
160 __be32 fmr; /**< Flash Mode Register */
161#define FMR_CWTO 0x0000F000
162#define FMR_CWTO_SHIFT 12
163#define FMR_BOOT 0x00000800
164#define FMR_ECCM 0x00000100
165#define FMR_AL 0x00000030
166#define FMR_AL_SHIFT 4
167#define FMR_OP 0x00000003
168#define FMR_OP_SHIFT 0
169 __be32 fir; /**< Flash Instruction Register */
170#define FIR_OP0 0xF0000000
171#define FIR_OP0_SHIFT 28
172#define FIR_OP1 0x0F000000
173#define FIR_OP1_SHIFT 24
174#define FIR_OP2 0x00F00000
175#define FIR_OP2_SHIFT 20
176#define FIR_OP3 0x000F0000
177#define FIR_OP3_SHIFT 16
178#define FIR_OP4 0x0000F000
179#define FIR_OP4_SHIFT 12
180#define FIR_OP5 0x00000F00
181#define FIR_OP5_SHIFT 8
182#define FIR_OP6 0x000000F0
183#define FIR_OP6_SHIFT 4
184#define FIR_OP7 0x0000000F
185#define FIR_OP7_SHIFT 0
186#define FIR_OP_NOP 0x0 /* No operation and end of sequence */
187#define FIR_OP_CA 0x1 /* Issue current column address */
188#define FIR_OP_PA 0x2 /* Issue current block+page address */
189#define FIR_OP_UA 0x3 /* Issue user defined address */
190#define FIR_OP_CM0 0x4 /* Issue command from FCR[CMD0] */
191#define FIR_OP_CM1 0x5 /* Issue command from FCR[CMD1] */
192#define FIR_OP_CM2 0x6 /* Issue command from FCR[CMD2] */
193#define FIR_OP_CM3 0x7 /* Issue command from FCR[CMD3] */
194#define FIR_OP_WB 0x8 /* Write FBCR bytes from FCM buffer */
195#define FIR_OP_WS 0x9 /* Write 1 or 2 bytes from MDR[AS] */
196#define FIR_OP_RB 0xA /* Read FBCR bytes to FCM buffer */
197#define FIR_OP_RS 0xB /* Read 1 or 2 bytes to MDR[AS] */
198#define FIR_OP_CW0 0xC /* Wait then issue FCR[CMD0] */
199#define FIR_OP_CW1 0xD /* Wait then issue FCR[CMD1] */
200#define FIR_OP_RBW 0xE /* Wait then read FBCR bytes */
201#define FIR_OP_RSW 0xE /* Wait then read 1 or 2 bytes */
202 __be32 fcr; /**< Flash Command Register */
203#define FCR_CMD0 0xFF000000
204#define FCR_CMD0_SHIFT 24
205#define FCR_CMD1 0x00FF0000
206#define FCR_CMD1_SHIFT 16
207#define FCR_CMD2 0x0000FF00
208#define FCR_CMD2_SHIFT 8
209#define FCR_CMD3 0x000000FF
210#define FCR_CMD3_SHIFT 0
211 __be32 fbar; /**< Flash Block Address Register */
212#define FBAR_BLK 0x00FFFFFF
213 __be32 fpar; /**< Flash Page Address Register */
214#define FPAR_SP_PI 0x00007C00
215#define FPAR_SP_PI_SHIFT 10
216#define FPAR_SP_MS 0x00000200
217#define FPAR_SP_CI 0x000001FF
218#define FPAR_SP_CI_SHIFT 0
219#define FPAR_LP_PI 0x0003F000
220#define FPAR_LP_PI_SHIFT 12
221#define FPAR_LP_MS 0x00000800
222#define FPAR_LP_CI 0x000007FF
223#define FPAR_LP_CI_SHIFT 0
224 __be32 fbcr; /**< Flash Byte Count Register */
225#define FBCR_BC 0x00000FFF
226 u8 res11[0x8];
227 u8 res8[0xF00];
228};
229
230extern struct fsl_lbc_regs __iomem *fsl_lbc_regs;
231extern spinlock_t fsl_lbc_lock;
232
233/*
234 * FSL UPM routines
235 */
236struct fsl_upm {
237 __be32 __iomem *mxmr;
238 int width;
239};
240
241extern int fsl_lbc_find(phys_addr_t addr_base);
242extern int fsl_upm_find(phys_addr_t addr_base, struct fsl_upm *upm);
243
244/**
245 * fsl_upm_start_pattern - start UPM patterns execution
246 * @upm: pointer to the fsl_upm structure obtained via fsl_upm_find
247 * @pat_offset: UPM pattern offset for the command to be executed
248 *
249 * This routine programmes UPM so the next memory access that hits an UPM
250 * will trigger pattern execution, starting at pat_offset.
251 */
252static inline void fsl_upm_start_pattern(struct fsl_upm *upm, u8 pat_offset)
253{
254 clrsetbits_be32(upm->mxmr, MxMR_MAD, MxMR_OP_RP | pat_offset);
255}
256
257/**
258 * fsl_upm_end_pattern - end UPM patterns execution
259 * @upm: pointer to the fsl_upm structure obtained via fsl_upm_find
260 *
261 * This routine reverts UPM to normal operation mode.
262 */
263static inline void fsl_upm_end_pattern(struct fsl_upm *upm)
264{
265 clrbits32(upm->mxmr, MxMR_OP_RP);
266
267 while (in_be32(upm->mxmr) & MxMR_OP_RP)
268 cpu_relax();
269}
270
271/**
272 * fsl_upm_run_pattern - actually run an UPM pattern
273 * @upm: pointer to the fsl_upm structure obtained via fsl_upm_find
274 * @io_base: remapped pointer to where memory access should happen
275 * @mar: MAR register content during pattern execution
276 *
277 * This function triggers dummy write to the memory specified by the io_base,
278 * thus UPM pattern actually executed. Note that mar usage depends on the
279 * pre-programmed AMX bits in the UPM RAM.
280 */
281static inline int fsl_upm_run_pattern(struct fsl_upm *upm,
282 void __iomem *io_base, u32 mar)
283{
284 int ret = 0;
285 unsigned long flags;
286
287 spin_lock_irqsave(&fsl_lbc_lock, flags);
288
289 out_be32(&fsl_lbc_regs->mar, mar << (32 - upm->width));
290
291 switch (upm->width) {
292 case 8:
293 out_8(io_base, 0x0);
294 break;
295 case 16:
296 out_be16(io_base, 0x0);
297 break;
298 case 32:
299 out_be32(io_base, 0x0);
300 break;
301 default:
302 ret = -EINVAL;
303 break;
304 }
305
306 spin_unlock_irqrestore(&fsl_lbc_lock, flags);
307
308 return ret;
309}
310
311#endif /* __ASM_FSL_LBC_H */
diff --git a/include/asm-powerpc/gpio.h b/include/asm-powerpc/gpio.h
new file mode 100644
index 000000000000..77ad3a890f30
--- /dev/null
+++ b/include/asm-powerpc/gpio.h
@@ -0,0 +1,56 @@
1/*
2 * Generic GPIO API implementation for PowerPC.
3 *
4 * Copyright (c) 2007-2008 MontaVista Software, Inc.
5 *
6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#ifndef __ASM_POWERPC_GPIO_H
15#define __ASM_POWERPC_GPIO_H
16
17#include <linux/errno.h>
18#include <asm-generic/gpio.h>
19
20#ifdef CONFIG_HAVE_GPIO_LIB
21
22/*
23 * We don't (yet) implement inlined/rapid versions for on-chip gpios.
24 * Just call gpiolib.
25 */
26static inline int gpio_get_value(unsigned int gpio)
27{
28 return __gpio_get_value(gpio);
29}
30
31static inline void gpio_set_value(unsigned int gpio, int value)
32{
33 __gpio_set_value(gpio, value);
34}
35
36static inline int gpio_cansleep(unsigned int gpio)
37{
38 return __gpio_cansleep(gpio);
39}
40
41/*
42 * Not implemented, yet.
43 */
44static inline int gpio_to_irq(unsigned int gpio)
45{
46 return -ENOSYS;
47}
48
49static inline int irq_to_gpio(unsigned int irq)
50{
51 return -EINVAL;
52}
53
54#endif /* CONFIG_HAVE_GPIO_LIB */
55
56#endif /* __ASM_POWERPC_GPIO_H */
diff --git a/include/asm-powerpc/hw_irq.h b/include/asm-powerpc/hw_irq.h
index a7b60bf639e0..ad8c9f7fd0e3 100644
--- a/include/asm-powerpc/hw_irq.h
+++ b/include/asm-powerpc/hw_irq.h
@@ -27,7 +27,7 @@ static inline unsigned long local_get_flags(void)
27 return flags; 27 return flags;
28} 28}
29 29
30static inline unsigned long local_irq_disable(void) 30static inline unsigned long raw_local_irq_disable(void)
31{ 31{
32 unsigned long flags, zero; 32 unsigned long flags, zero;
33 33
@@ -39,14 +39,15 @@ static inline unsigned long local_irq_disable(void)
39 return flags; 39 return flags;
40} 40}
41 41
42extern void local_irq_restore(unsigned long); 42extern void raw_local_irq_restore(unsigned long);
43extern void iseries_handle_interrupts(void); 43extern void iseries_handle_interrupts(void);
44 44
45#define local_irq_enable() local_irq_restore(1) 45#define raw_local_irq_enable() raw_local_irq_restore(1)
46#define local_save_flags(flags) ((flags) = local_get_flags()) 46#define raw_local_save_flags(flags) ((flags) = local_get_flags())
47#define local_irq_save(flags) ((flags) = local_irq_disable()) 47#define raw_local_irq_save(flags) ((flags) = raw_local_irq_disable())
48 48
49#define irqs_disabled() (local_get_flags() == 0) 49#define raw_irqs_disabled() (local_get_flags() == 0)
50#define raw_irqs_disabled_flags(flags) ((flags) == 0)
50 51
51#define __hard_irq_enable() __mtmsrd(mfmsr() | MSR_EE, 1) 52#define __hard_irq_enable() __mtmsrd(mfmsr() | MSR_EE, 1)
52#define __hard_irq_disable() __mtmsrd(mfmsr() & ~MSR_EE, 1) 53#define __hard_irq_disable() __mtmsrd(mfmsr() & ~MSR_EE, 1)
diff --git a/include/asm-powerpc/immap_qe.h b/include/asm-powerpc/immap_qe.h
index 82a452615097..7b6f411db3e6 100644
--- a/include/asm-powerpc/immap_qe.h
+++ b/include/asm-powerpc/immap_qe.h
@@ -20,6 +20,7 @@
20#ifdef __KERNEL__ 20#ifdef __KERNEL__
21 21
22#include <linux/kernel.h> 22#include <linux/kernel.h>
23#include <asm/io.h>
23 24
24#define QE_IMMAP_SIZE (1024 * 1024) /* 1MB from 1MB+IMMR */ 25#define QE_IMMAP_SIZE (1024 * 1024) /* 1MB from 1MB+IMMR */
25 26
@@ -468,7 +469,7 @@ struct qe_immap {
468 u8 res18[0xC0000]; /* 0x140000 - 0x200000 */ 469 u8 res18[0xC0000]; /* 0x140000 - 0x200000 */
469} __attribute__ ((packed)); 470} __attribute__ ((packed));
470 471
471extern struct qe_immap *qe_immr; 472extern struct qe_immap __iomem *qe_immr;
472extern phys_addr_t get_qe_base(void); 473extern phys_addr_t get_qe_base(void);
473 474
474static inline unsigned long immrbar_virt_to_phys(void *address) 475static inline unsigned long immrbar_virt_to_phys(void *address)
diff --git a/include/asm-powerpc/irqflags.h b/include/asm-powerpc/irqflags.h
index 7970cbaeaa54..cc6fdba33660 100644
--- a/include/asm-powerpc/irqflags.h
+++ b/include/asm-powerpc/irqflags.h
@@ -2,30 +2,43 @@
2 * include/asm-powerpc/irqflags.h 2 * include/asm-powerpc/irqflags.h
3 * 3 *
4 * IRQ flags handling 4 * IRQ flags handling
5 *
6 * This file gets included from lowlevel asm headers too, to provide
7 * wrapped versions of the local_irq_*() APIs, based on the
8 * raw_local_irq_*() macros from the lowlevel headers.
9 */ 5 */
10#ifndef _ASM_IRQFLAGS_H 6#ifndef _ASM_IRQFLAGS_H
11#define _ASM_IRQFLAGS_H 7#define _ASM_IRQFLAGS_H
12 8
9#ifndef __ASSEMBLY__
13/* 10/*
14 * Get definitions for raw_local_save_flags(x), etc. 11 * Get definitions for raw_local_save_flags(x), etc.
15 */ 12 */
16#include <asm-powerpc/hw_irq.h> 13#include <asm-powerpc/hw_irq.h>
17 14
15#else
16#ifdef CONFIG_TRACE_IRQFLAGS
18/* 17/*
19 * Do the CPU's IRQ-state tracing from assembly code. We call a 18 * Most of the CPU's IRQ-state tracing is done from assembly code; we
20 * C function, so save all the C-clobbered registers: 19 * have to call a C function so call a wrapper that saves all the
20 * C-clobbered registers.
21 */ 21 */
22#ifdef CONFIG_TRACE_IRQFLAGS 22#define TRACE_ENABLE_INTS bl .trace_hardirqs_on
23 23#define TRACE_DISABLE_INTS bl .trace_hardirqs_off
24#error No support on PowerPC yet for CONFIG_TRACE_IRQFLAGS 24#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) \
25 25 cmpdi en, 0; \
26 bne 95f; \
27 stb en,PACASOFTIRQEN(r13); \
28 bl .trace_hardirqs_off; \
29 b skip; \
3095: bl .trace_hardirqs_on; \
31 li en,1;
32#define TRACE_AND_RESTORE_IRQ(en) \
33 TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f); \
3496: stb en,PACASOFTIRQEN(r13)
26#else 35#else
27# define TRACE_IRQS_ON 36#define TRACE_ENABLE_INTS
28# define TRACE_IRQS_OFF 37#define TRACE_DISABLE_INTS
38#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip)
39#define TRACE_AND_RESTORE_IRQ(en) \
40 stb en,PACASOFTIRQEN(r13)
41#endif
29#endif 42#endif
30 43
31#endif 44#endif
diff --git a/include/asm-powerpc/iseries/alpaca.h b/include/asm-powerpc/iseries/alpaca.h
new file mode 100644
index 000000000000..c0cce6727a69
--- /dev/null
+++ b/include/asm-powerpc/iseries/alpaca.h
@@ -0,0 +1,31 @@
1/*
2 * Copyright © 2008 Stephen Rothwell IBM Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18#ifndef _ASM_POWERPC_ISERIES_ALPACA_H
19#define _ASM_POWERPC_ISERIES_ALPACA_H
20
21/*
22 * This is the part of the paca that the iSeries hypervisor
23 * needs to be statically initialised. Immediately after boot
24 * we switch to the normal Linux paca.
25 */
26struct alpaca {
27 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */
28 const void *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
29};
30
31#endif /* _ASM_POWERPC_ISERIES_ALPACA_H */
diff --git a/include/asm-powerpc/iseries/it_lp_reg_save.h b/include/asm-powerpc/iseries/it_lp_reg_save.h
deleted file mode 100644
index 5403b756f654..000000000000
--- a/include/asm-powerpc/iseries/it_lp_reg_save.h
+++ /dev/null
@@ -1,85 +0,0 @@
1/*
2 * Copyright (C) 2001 Mike Corrigan IBM Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18#ifndef _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H
19#define _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H
20
21/*
22 * This control block contains the data that is shared between PLIC
23 * and the OS
24 */
25
26struct ItLpRegSave {
27 u32 xDesc; // Eye catcher "LpRS" ebcdic 000-003
28 u16 xSize; // Size of this class 004-005
29 u8 xInUse; // Area is live 006-007
30 u8 xRsvd1[9]; // Reserved 007-00F
31
32 u8 xFixedRegSave[352]; // Fixed Register Save Area 010-16F
33 u32 xCTRL; // Control Register 170-173
34 u32 xDEC; // Decrementer 174-177
35 u32 xFPSCR; // FP Status and Control Reg 178-17B
36 u32 xPVR; // Processor Version Number 17C-17F
37
38 u64 xMMCR0; // Monitor Mode Control Reg 0 180-187
39 u32 xPMC1; // Perf Monitor Counter 1 188-18B
40 u32 xPMC2; // Perf Monitor Counter 2 18C-18F
41 u32 xPMC3; // Perf Monitor Counter 3 190-193
42 u32 xPMC4; // Perf Monitor Counter 4 194-197
43 u32 xPIR; // Processor ID Reg 198-19B
44
45 u32 xMMCR1; // Monitor Mode Control Reg 1 19C-19F
46 u32 xMMCRA; // Monitor Mode Control Reg A 1A0-1A3
47 u32 xPMC5; // Perf Monitor Counter 5 1A4-1A7
48 u32 xPMC6; // Perf Monitor Counter 6 1A8-1AB
49 u32 xPMC7; // Perf Monitor Counter 7 1AC-1AF
50 u32 xPMC8; // Perf Monitor Counter 8 1B0-1B3
51 u32 xTSC; // Thread Switch Control 1B4-1B7
52 u32 xTST; // Thread Switch Timeout 1B8-1BB
53 u32 xRsvd; // Reserved 1BC-1BF
54
55 u64 xACCR; // Address Compare Control Reg 1C0-1C7
56 u64 xIMR; // Instruction Match Register 1C8-1CF
57 u64 xSDR1; // Storage Description Reg 1 1D0-1D7
58 u64 xSPRG0; // Special Purpose Reg General0 1D8-1DF
59 u64 xSPRG1; // Special Purpose Reg General1 1E0-1E7
60 u64 xSPRG2; // Special Purpose Reg General2 1E8-1EF
61 u64 xSPRG3; // Special Purpose Reg General3 1F0-1F7
62 u64 xTB; // Time Base Register 1F8-1FF
63
64 u64 xFPR[32]; // Floating Point Registers 200-2FF
65
66 u64 xMSR; // Machine State Register 300-307
67 u64 xNIA; // Next Instruction Address 308-30F
68
69 u64 xDABR; // Data Address Breakpoint Reg 310-317
70 u64 xIABR; // Inst Address Breakpoint Reg 318-31F
71
72 u64 xHID0; // HW Implementation Dependent0 320-327
73
74 u64 xHID4; // HW Implementation Dependent4 328-32F
75 u64 xSCOMd; // SCON Data Reg (SPRG4) 330-337
76 u64 xSCOMc; // SCON Command Reg (SPRG5) 338-33F
77 u64 xSDAR; // Sample Data Address Register 340-347
78 u64 xSIAR; // Sample Inst Address Register 348-34F
79
80 u8 xRsvd3[176]; // Reserved 350-3FF
81};
82
83extern struct ItLpRegSave iseries_reg_save[];
84
85#endif /* _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H */
diff --git a/include/asm-powerpc/lmb.h b/include/asm-powerpc/lmb.h
index 5d1dc48a0bb8..6f5fdf0a19ae 100644
--- a/include/asm-powerpc/lmb.h
+++ b/include/asm-powerpc/lmb.h
@@ -1,81 +1,15 @@
1#ifndef _ASM_POWERPC_LMB_H 1#ifndef _ASM_POWERPC_LMB_H
2#define _ASM_POWERPC_LMB_H 2#define _ASM_POWERPC_LMB_H
3#ifdef __KERNEL__
4 3
5/* 4#include <asm/udbg.h>
6 * Definitions for talking to the Open Firmware PROM on
7 * Power Macintosh computers.
8 *
9 * Copyright (C) 2001 Peter Bergner, IBM Corp.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16 5
17#include <linux/init.h> 6#define LMB_DBG(fmt...) udbg_printf(fmt)
18#include <asm/prom.h>
19 7
20#define MAX_LMB_REGIONS 128 8#ifdef CONFIG_PPC32
9extern phys_addr_t lowmem_end_addr;
10#define LMB_REAL_LIMIT lowmem_end_addr
11#else
12#define LMB_REAL_LIMIT 0
13#endif
21 14
22struct lmb_property {
23 unsigned long base;
24 unsigned long size;
25};
26
27struct lmb_region {
28 unsigned long cnt;
29 unsigned long size;
30 struct lmb_property region[MAX_LMB_REGIONS+1];
31};
32
33struct lmb {
34 unsigned long debug;
35 unsigned long rmo_size;
36 struct lmb_region memory;
37 struct lmb_region reserved;
38};
39
40extern struct lmb lmb;
41
42extern void __init lmb_init(void);
43extern void __init lmb_analyze(void);
44extern long __init lmb_add(unsigned long base, unsigned long size);
45extern long __init lmb_reserve(unsigned long base, unsigned long size);
46extern unsigned long __init lmb_alloc(unsigned long size, unsigned long align);
47extern unsigned long __init lmb_alloc_base(unsigned long size,
48 unsigned long align, unsigned long max_addr);
49extern unsigned long __init __lmb_alloc_base(unsigned long size,
50 unsigned long align, unsigned long max_addr);
51extern unsigned long __init lmb_phys_mem_size(void);
52extern unsigned long __init lmb_end_of_DRAM(void);
53extern void __init lmb_enforce_memory_limit(unsigned long memory_limit);
54extern int __init lmb_is_reserved(unsigned long addr);
55
56extern void lmb_dump_all(void);
57
58static inline unsigned long
59lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
60{
61 return type->region[region_nr].size;
62}
63static inline unsigned long
64lmb_size_pages(struct lmb_region *type, unsigned long region_nr)
65{
66 return lmb_size_bytes(type, region_nr) >> PAGE_SHIFT;
67}
68static inline unsigned long
69lmb_start_pfn(struct lmb_region *type, unsigned long region_nr)
70{
71 return type->region[region_nr].base >> PAGE_SHIFT;
72}
73static inline unsigned long
74lmb_end_pfn(struct lmb_region *type, unsigned long region_nr)
75{
76 return lmb_start_pfn(type, region_nr) +
77 lmb_size_pages(type, region_nr);
78}
79
80#endif /* __KERNEL__ */
81#endif /* _ASM_POWERPC_LMB_H */ 15#endif /* _ASM_POWERPC_LMB_H */
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
index 0872ec228c1e..54ed64df95b8 100644
--- a/include/asm-powerpc/machdep.h
+++ b/include/asm-powerpc/machdep.h
@@ -68,6 +68,8 @@ struct machdep_calls {
68 unsigned long vflags, 68 unsigned long vflags,
69 int psize, int ssize); 69 int psize, int ssize);
70 long (*hpte_remove)(unsigned long hpte_group); 70 long (*hpte_remove)(unsigned long hpte_group);
71 void (*hpte_removebolted)(unsigned long ea,
72 int psize, int ssize);
71 void (*flush_hash_range)(unsigned long number, int local); 73 void (*flush_hash_range)(unsigned long number, int local);
72 74
73 /* special for kexec, to be called in real mode, linar mapping is 75 /* special for kexec, to be called in real mode, linar mapping is
@@ -196,9 +198,6 @@ struct machdep_calls {
196 May be NULL. */ 198 May be NULL. */
197 void (*init)(void); 199 void (*init)(void);
198 200
199 void (*setup_io_mappings)(void);
200
201 void (*early_serial_map)(void);
202 void (*kgdb_map_scc)(void); 201 void (*kgdb_map_scc)(void);
203 202
204 /* 203 /*
diff --git a/include/asm-powerpc/macio.h b/include/asm-powerpc/macio.h
index 3a6cb1a513b7..079c06eae446 100644
--- a/include/asm-powerpc/macio.h
+++ b/include/asm-powerpc/macio.h
@@ -2,7 +2,7 @@
2#define __MACIO_ASIC_H__ 2#define __MACIO_ASIC_H__
3#ifdef __KERNEL__ 3#ifdef __KERNEL__
4 4
5#include <asm/of_device.h> 5#include <linux/of_device.h>
6 6
7extern struct bus_type macio_bus_type; 7extern struct bus_type macio_bus_type;
8 8
diff --git a/include/asm-powerpc/mmu-40x.h b/include/asm-powerpc/mmu-40x.h
index 7d37f77043ac..3d108676584c 100644
--- a/include/asm-powerpc/mmu-40x.h
+++ b/include/asm-powerpc/mmu-40x.h
@@ -53,8 +53,6 @@
53 53
54#ifndef __ASSEMBLY__ 54#ifndef __ASSEMBLY__
55 55
56typedef unsigned long phys_addr_t;
57
58typedef struct { 56typedef struct {
59 unsigned long id; 57 unsigned long id;
60 unsigned long vdso_base; 58 unsigned long vdso_base;
diff --git a/include/asm-powerpc/mmu-44x.h b/include/asm-powerpc/mmu-44x.h
index 62772ae839ca..c8b02d97f753 100644
--- a/include/asm-powerpc/mmu-44x.h
+++ b/include/asm-powerpc/mmu-44x.h
@@ -53,8 +53,6 @@
53 53
54#ifndef __ASSEMBLY__ 54#ifndef __ASSEMBLY__
55 55
56typedef unsigned long long phys_addr_t;
57
58typedef struct { 56typedef struct {
59 unsigned long id; 57 unsigned long id;
60 unsigned long vdso_base; 58 unsigned long vdso_base;
diff --git a/include/asm-powerpc/mmu-8xx.h b/include/asm-powerpc/mmu-8xx.h
index 952bd8899f2f..9db877eb88db 100644
--- a/include/asm-powerpc/mmu-8xx.h
+++ b/include/asm-powerpc/mmu-8xx.h
@@ -136,8 +136,6 @@
136#define SPRN_M_TW 799 136#define SPRN_M_TW 799
137 137
138#ifndef __ASSEMBLY__ 138#ifndef __ASSEMBLY__
139typedef unsigned long phys_addr_t;
140
141typedef struct { 139typedef struct {
142 unsigned long id; 140 unsigned long id;
143 unsigned long vdso_base; 141 unsigned long vdso_base;
diff --git a/include/asm-powerpc/mmu-fsl-booke.h b/include/asm-powerpc/mmu-fsl-booke.h
index 37580004cd7a..925d93cf64d8 100644
--- a/include/asm-powerpc/mmu-fsl-booke.h
+++ b/include/asm-powerpc/mmu-fsl-booke.h
@@ -73,12 +73,6 @@
73 73
74#ifndef __ASSEMBLY__ 74#ifndef __ASSEMBLY__
75 75
76#ifndef CONFIG_PHYS_64BIT
77typedef unsigned long phys_addr_t;
78#else
79typedef unsigned long long phys_addr_t;
80#endif
81
82typedef struct { 76typedef struct {
83 unsigned long id; 77 unsigned long id;
84 unsigned long vdso_base; 78 unsigned long vdso_base;
diff --git a/include/asm-powerpc/mmu-hash32.h b/include/asm-powerpc/mmu-hash32.h
index 4bd735be3833..6e21ca618ec3 100644
--- a/include/asm-powerpc/mmu-hash32.h
+++ b/include/asm-powerpc/mmu-hash32.h
@@ -84,8 +84,6 @@ typedef struct {
84 unsigned long vdso_base; 84 unsigned long vdso_base;
85} mm_context_t; 85} mm_context_t;
86 86
87typedef unsigned long phys_addr_t;
88
89#endif /* !__ASSEMBLY__ */ 87#endif /* !__ASSEMBLY__ */
90 88
91#endif /* _ASM_POWERPC_MMU_HASH32_H_ */ 89#endif /* _ASM_POWERPC_MMU_HASH32_H_ */
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h
index 2864fa3989ea..0dff76776044 100644
--- a/include/asm-powerpc/mmu-hash64.h
+++ b/include/asm-powerpc/mmu-hash64.h
@@ -469,9 +469,6 @@ static inline unsigned long get_vsid(unsigned long context, unsigned long ea,
469 VSID_MODULUS_256M) 469 VSID_MODULUS_256M)
470#define KERNEL_VSID(ea) VSID_SCRAMBLE(GET_ESID(ea)) 470#define KERNEL_VSID(ea) VSID_SCRAMBLE(GET_ESID(ea))
471 471
472/* Physical address used by some IO functions */
473typedef unsigned long phys_addr_t;
474
475#endif /* __ASSEMBLY__ */ 472#endif /* __ASSEMBLY__ */
476 473
477#endif /* _ASM_POWERPC_MMU_HASH64_H_ */ 474#endif /* _ASM_POWERPC_MMU_HASH64_H_ */
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h
index 748b35ab37b5..eb61b9c1edfd 100644
--- a/include/asm-powerpc/paca.h
+++ b/include/asm-powerpc/paca.h
@@ -42,10 +42,7 @@ struct task_struct;
42 * Defines the layout of the paca. 42 * Defines the layout of the paca.
43 * 43 *
44 * This structure is not directly accessed by firmware or the service 44 * This structure is not directly accessed by firmware or the service
45 * processor except for the first two pointers that point to the 45 * processor.
46 * lppaca area and the ItLpRegSave area for this CPU. The lppaca
47 * object is currently contained within the PACA but it doesn't need
48 * to be.
49 */ 46 */
50struct paca_struct { 47struct paca_struct {
51 /* 48 /*
@@ -55,14 +52,7 @@ struct paca_struct {
55 * avoid cacheline bouncing. 52 * avoid cacheline bouncing.
56 */ 53 */
57 54
58 /*
59 * MAGIC: These first two pointers can't be moved - they're
60 * accessed by the firmware
61 */
62 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */ 55 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */
63#ifdef CONFIG_PPC_ISERIES
64 void *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
65#endif /* CONFIG_PPC_ISERIES */
66 56
67 /* 57 /*
68 * MAGIC: the spinlock functions in arch/powerpc/lib/locks.c 58 * MAGIC: the spinlock functions in arch/powerpc/lib/locks.c
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h
index df47bbb6ea13..6c850609b847 100644
--- a/include/asm-powerpc/page.h
+++ b/include/asm-powerpc/page.h
@@ -53,6 +53,7 @@
53 53
54#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) 54#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START)
55#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) 55#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START)
56#define LOAD_OFFSET PAGE_OFFSET
56 57
57#ifdef CONFIG_FLATMEM 58#ifdef CONFIG_FLATMEM
58#define pfn_valid(pfn) ((pfn) < max_mapnr) 59#define pfn_valid(pfn) ((pfn) < max_mapnr)
diff --git a/include/asm-powerpc/page_32.h b/include/asm-powerpc/page_32.h
index 65ea19eec956..51f8134b5939 100644
--- a/include/asm-powerpc/page_32.h
+++ b/include/asm-powerpc/page_32.h
@@ -3,8 +3,6 @@
3 3
4#define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 4#define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32
5 5
6#define PPC_MEMSTART 0
7
8#ifdef CONFIG_NOT_COHERENT_CACHE 6#ifdef CONFIG_NOT_COHERENT_CACHE
9#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES 7#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
10#endif 8#endif
diff --git a/include/asm-powerpc/pasemi_dma.h b/include/asm-powerpc/pasemi_dma.h
index b4526ff3a50d..19fd7933e2d9 100644
--- a/include/asm-powerpc/pasemi_dma.h
+++ b/include/asm-powerpc/pasemi_dma.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2006 PA Semi, Inc 2 * Copyright (C) 2006-2008 PA Semi, Inc
3 * 3 *
4 * Hardware register layout and descriptor formats for the on-board 4 * Hardware register layout and descriptor formats for the on-board
5 * DMA engine on PA Semi PWRficient. Used by ethernet, function and security 5 * DMA engine on PA Semi PWRficient. Used by ethernet, function and security
@@ -40,6 +40,11 @@ enum {
40 PAS_DMA_COM_TXSTA = 0x104, /* Transmit Status Register */ 40 PAS_DMA_COM_TXSTA = 0x104, /* Transmit Status Register */
41 PAS_DMA_COM_RXCMD = 0x108, /* Receive Command Register */ 41 PAS_DMA_COM_RXCMD = 0x108, /* Receive Command Register */
42 PAS_DMA_COM_RXSTA = 0x10c, /* Receive Status Register */ 42 PAS_DMA_COM_RXSTA = 0x10c, /* Receive Status Register */
43 PAS_DMA_COM_CFG = 0x114, /* Common config reg */
44 PAS_DMA_TXF_SFLG0 = 0x140, /* Set flags */
45 PAS_DMA_TXF_SFLG1 = 0x144, /* Set flags */
46 PAS_DMA_TXF_CFLG0 = 0x148, /* Set flags */
47 PAS_DMA_TXF_CFLG1 = 0x14c, /* Set flags */
43}; 48};
44 49
45 50
@@ -123,11 +128,16 @@ enum {
123#define PAS_DMA_TXCHAN_TCMDSTA_DA 0x00000100 128#define PAS_DMA_TXCHAN_TCMDSTA_DA 0x00000100
124#define PAS_DMA_TXCHAN_CFG(c) (0x304+(c)*_PAS_DMA_TXCHAN_STRIDE) 129#define PAS_DMA_TXCHAN_CFG(c) (0x304+(c)*_PAS_DMA_TXCHAN_STRIDE)
125#define PAS_DMA_TXCHAN_CFG_TY_IFACE 0x00000000 /* Type = interface */ 130#define PAS_DMA_TXCHAN_CFG_TY_IFACE 0x00000000 /* Type = interface */
131#define PAS_DMA_TXCHAN_CFG_TY_COPY 0x00000001 /* Type = copy only */
132#define PAS_DMA_TXCHAN_CFG_TY_FUNC 0x00000002 /* Type = function */
133#define PAS_DMA_TXCHAN_CFG_TY_XOR 0x00000003 /* Type = xor only */
126#define PAS_DMA_TXCHAN_CFG_TATTR_M 0x0000003c 134#define PAS_DMA_TXCHAN_CFG_TATTR_M 0x0000003c
127#define PAS_DMA_TXCHAN_CFG_TATTR_S 2 135#define PAS_DMA_TXCHAN_CFG_TATTR_S 2
128#define PAS_DMA_TXCHAN_CFG_TATTR(x) (((x) << PAS_DMA_TXCHAN_CFG_TATTR_S) & \ 136#define PAS_DMA_TXCHAN_CFG_TATTR(x) (((x) << PAS_DMA_TXCHAN_CFG_TATTR_S) & \
129 PAS_DMA_TXCHAN_CFG_TATTR_M) 137 PAS_DMA_TXCHAN_CFG_TATTR_M)
130#define PAS_DMA_TXCHAN_CFG_WT_M 0x000001c0 138#define PAS_DMA_TXCHAN_CFG_LPDQ 0x00000800
139#define PAS_DMA_TXCHAN_CFG_LPSQ 0x00000400
140#define PAS_DMA_TXCHAN_CFG_WT_M 0x000003c0
131#define PAS_DMA_TXCHAN_CFG_WT_S 6 141#define PAS_DMA_TXCHAN_CFG_WT_S 6
132#define PAS_DMA_TXCHAN_CFG_WT(x) (((x) << PAS_DMA_TXCHAN_CFG_WT_S) & \ 142#define PAS_DMA_TXCHAN_CFG_WT(x) (((x) << PAS_DMA_TXCHAN_CFG_WT_S) & \
133 PAS_DMA_TXCHAN_CFG_WT_M) 143 PAS_DMA_TXCHAN_CFG_WT_M)
@@ -394,11 +404,62 @@ enum {
394 XCT_COPY_LLEN_M) 404 XCT_COPY_LLEN_M)
395#define XCT_COPY_SE 0x0000000000000001ull 405#define XCT_COPY_SE 0x0000000000000001ull
396 406
407/* Function descriptor fields */
408#define XCT_FUN_T 0x8000000000000000ull
409#define XCT_FUN_ST 0x4000000000000000ull
410#define XCT_FUN_RR_M 0x3000000000000000ull
411#define XCT_FUN_RR_NORES 0x0000000000000000ull
412#define XCT_FUN_RR_8BRES 0x1000000000000000ull
413#define XCT_FUN_RR_24BRES 0x2000000000000000ull
414#define XCT_FUN_RR_40BRES 0x3000000000000000ull
415#define XCT_FUN_I 0x0800000000000000ull
416#define XCT_FUN_O 0x0400000000000000ull
417#define XCT_FUN_E 0x0200000000000000ull
418#define XCT_FUN_FUN_M 0x01c0000000000000ull
419#define XCT_FUN_FUN_S 54
420#define XCT_FUN_FUN(x) ((((long)(x)) << XCT_FUN_FUN_S) & XCT_FUN_FUN_M)
421#define XCT_FUN_CRM_M 0x0038000000000000ull
422#define XCT_FUN_CRM_NOP 0x0000000000000000ull
423#define XCT_FUN_CRM_SIG 0x0008000000000000ull
424#define XCT_FUN_LLEN_M 0x0007ffff00000000ull
425#define XCT_FUN_LLEN_S 32
426#define XCT_FUN_LLEN(x) ((((long)(x)) << XCT_FUN_LLEN_S) & XCT_FUN_LLEN_M)
427#define XCT_FUN_SHL_M 0x00000000f8000000ull
428#define XCT_FUN_SHL_S 27
429#define XCT_FUN_SHL(x) ((((long)(x)) << XCT_FUN_SHL_S) & XCT_FUN_SHL_M)
430#define XCT_FUN_CHL_M 0x0000000007c00000ull
431#define XCT_FUN_HSZ_M 0x00000000003c0000ull
432#define XCT_FUN_ALG_M 0x0000000000038000ull
433#define XCT_FUN_HP 0x0000000000004000ull
434#define XCT_FUN_BCM_M 0x0000000000003800ull
435#define XCT_FUN_BCP_M 0x0000000000000600ull
436#define XCT_FUN_SIG_M 0x00000000000001f0ull
437#define XCT_FUN_SIG_TCP4 0x0000000000000140ull
438#define XCT_FUN_SIG_TCP6 0x0000000000000150ull
439#define XCT_FUN_SIG_UDP4 0x0000000000000160ull
440#define XCT_FUN_SIG_UDP6 0x0000000000000170ull
441#define XCT_FUN_A 0x0000000000000008ull
442#define XCT_FUN_C 0x0000000000000004ull
443#define XCT_FUN_AL2 0x0000000000000002ull
444#define XCT_FUN_SE 0x0000000000000001ull
445
446/* Function descriptor 8byte result fields */
447#define XCT_FUNRES_8B_CS_M 0x0000ffff00000000ull
448#define XCT_FUNRES_8B_CS_S 32
449#define XCT_FUNRES_8B_CRC_M 0x00000000ffffffffull
450#define XCT_FUNRES_8B_CRC_S 0
451
397/* Control descriptor fields */ 452/* Control descriptor fields */
398#define CTRL_CMD_T 0x8000000000000000ull 453#define CTRL_CMD_T 0x8000000000000000ull
399#define CTRL_CMD_META_EVT 0x2000000000000000ull 454#define CTRL_CMD_META_EVT 0x2000000000000000ull
400#define CTRL_CMD_O 0x0400000000000000ull 455#define CTRL_CMD_O 0x0400000000000000ull
401#define CTRL_CMD_REG_M 0x000000000000000full 456#define CTRL_CMD_ETYPE_M 0x0038000000000000ull
457#define CTRL_CMD_ETYPE_EXT 0x0000000000000000ull
458#define CTRL_CMD_ETYPE_WSET 0x0020000000000000ull
459#define CTRL_CMD_ETYPE_WCLR 0x0028000000000000ull
460#define CTRL_CMD_ETYPE_SET 0x0030000000000000ull
461#define CTRL_CMD_ETYPE_CLR 0x0038000000000000ull
462#define CTRL_CMD_REG_M 0x000000000000007full
402#define CTRL_CMD_REG_S 0 463#define CTRL_CMD_REG_S 0
403#define CTRL_CMD_REG(x) ((((long)(x)) << CTRL_CMD_REG_S) & \ 464#define CTRL_CMD_REG(x) ((((long)(x)) << CTRL_CMD_REG_S) & \
404 CTRL_CMD_REG_M) 465 CTRL_CMD_REG_M)
@@ -461,6 +522,16 @@ extern void *pasemi_dma_alloc_buf(struct pasemi_dmachan *chan, int size,
461extern void pasemi_dma_free_buf(struct pasemi_dmachan *chan, int size, 522extern void pasemi_dma_free_buf(struct pasemi_dmachan *chan, int size,
462 dma_addr_t *handle); 523 dma_addr_t *handle);
463 524
525/* Routines to allocate flags (events) for channel syncronization */
526extern int pasemi_dma_alloc_flag(void);
527extern void pasemi_dma_free_flag(int flag);
528extern void pasemi_dma_set_flag(int flag);
529extern void pasemi_dma_clear_flag(int flag);
530
531/* Routines to allocate function engines */
532extern int pasemi_dma_alloc_fun(void);
533extern void pasemi_dma_free_fun(int fun);
534
464/* Initialize the library, must be called before any other functions */ 535/* Initialize the library, must be called before any other functions */
465extern int pasemi_dma_init(void); 536extern int pasemi_dma_init(void);
466 537
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h
index e5802c62f428..b95d033ae6e6 100644
--- a/include/asm-powerpc/pci-bridge.h
+++ b/include/asm-powerpc/pci-bridge.h
@@ -117,7 +117,7 @@ struct pci_controller {
117 117
118#ifndef CONFIG_PPC64 118#ifndef CONFIG_PPC64
119 119
120static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus) 120static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
121{ 121{
122 return bus->sysdata; 122 return bus->sysdata;
123} 123}
@@ -235,7 +235,7 @@ extern void pcibios_fixup_new_pci_devices(struct pci_bus *bus);
235 235
236extern int pcibios_remove_root_bus(struct pci_controller *phb); 236extern int pcibios_remove_root_bus(struct pci_controller *phb);
237 237
238static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus) 238static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
239{ 239{
240 struct device_node *busdn = bus->sysdata; 240 struct device_node *busdn = bus->sysdata;
241 241
diff --git a/include/asm-powerpc/pgtable-ppc32.h b/include/asm-powerpc/pgtable-ppc32.h
index 2c79f550272b..daea7692d070 100644
--- a/include/asm-powerpc/pgtable-ppc32.h
+++ b/include/asm-powerpc/pgtable-ppc32.h
@@ -98,9 +98,6 @@ extern int icache_44x_need_flush;
98#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) 98#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
99#define FIRST_USER_ADDRESS 0 99#define FIRST_USER_ADDRESS 0
100 100
101#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)
102#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
103
104#define pte_ERROR(e) \ 101#define pte_ERROR(e) \
105 printk("%s:%d: bad pte %llx.\n", __FILE__, __LINE__, \ 102 printk("%s:%d: bad pte %llx.\n", __FILE__, __LINE__, \
106 (unsigned long long)pte_val(e)) 103 (unsigned long long)pte_val(e))
@@ -420,7 +417,8 @@ extern int icache_44x_need_flush;
420#define _PAGE_IO (_PAGE_KERNEL | _PAGE_NO_CACHE | _PAGE_GUARDED) 417#define _PAGE_IO (_PAGE_KERNEL | _PAGE_NO_CACHE | _PAGE_GUARDED)
421#define _PAGE_RAM (_PAGE_KERNEL | _PAGE_HWEXEC) 418#define _PAGE_RAM (_PAGE_KERNEL | _PAGE_HWEXEC)
422 419
423#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH) 420#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH) ||\
421 defined(CONFIG_KPROBES)
424/* We want the debuggers to be able to set breakpoints anywhere, so 422/* We want the debuggers to be able to set breakpoints anywhere, so
425 * don't write protect the kernel text */ 423 * don't write protect the kernel text */
426#define _PAGE_RAM_TEXT _PAGE_RAM 424#define _PAGE_RAM_TEXT _PAGE_RAM
@@ -692,7 +690,7 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
692#define pmd_page_vaddr(pmd) \ 690#define pmd_page_vaddr(pmd) \
693 ((unsigned long) (pmd_val(pmd) & PAGE_MASK)) 691 ((unsigned long) (pmd_val(pmd) & PAGE_MASK))
694#define pmd_page(pmd) \ 692#define pmd_page(pmd) \
695 (mem_map + (__pa(pmd_val(pmd)) >> PAGE_SHIFT)) 693 pfn_to_page((__pa(pmd_val(pmd)) >> PAGE_SHIFT))
696#endif 694#endif
697 695
698/* to find an entry in a kernel page-table-directory */ 696/* to find an entry in a kernel page-table-directory */
diff --git a/include/asm-powerpc/phyp_dump.h b/include/asm-powerpc/phyp_dump.h
new file mode 100644
index 000000000000..fa74c6c3e106
--- /dev/null
+++ b/include/asm-powerpc/phyp_dump.h
@@ -0,0 +1,47 @@
1/*
2 * Hypervisor-assisted dump
3 *
4 * Linas Vepstas, Manish Ahuja 2008
5 * Copyright 2008 IBM Corp.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#ifndef _PPC64_PHYP_DUMP_H
14#define _PPC64_PHYP_DUMP_H
15
16#ifdef CONFIG_PHYP_DUMP
17
18/* The RMR region will be saved for later dumping
19 * whenever the kernel crashes. Set this to 256MB. */
20#define PHYP_DUMP_RMR_START 0x0
21#define PHYP_DUMP_RMR_END (1UL<<28)
22
23struct phyp_dump {
24 /* Memory that is reserved during very early boot. */
25 unsigned long init_reserve_start;
26 unsigned long init_reserve_size;
27 /* cmd line options during boot */
28 unsigned long reserve_bootvar;
29 unsigned long phyp_dump_at_boot;
30 /* Check status during boot if dump supported, active & present*/
31 unsigned long phyp_dump_configured;
32 unsigned long phyp_dump_is_active;
33 /* store cpu & hpte size */
34 unsigned long cpu_state_size;
35 unsigned long hpte_region_size;
36 /* previous scratch area values */
37 unsigned long reserved_scratch_addr;
38 unsigned long reserved_scratch_size;
39};
40
41extern struct phyp_dump *phyp_dump_info;
42
43int early_init_dt_scan_phyp_dump(unsigned long node,
44 const char *uname, int depth, void *data);
45
46#endif /* CONFIG_PHYP_DUMP */
47#endif /* _PPC64_PHYP_DUMP_H */
diff --git a/include/asm-powerpc/pmi.h b/include/asm-powerpc/pmi.h
index 2259d4ce3846..e1dc090748df 100644
--- a/include/asm-powerpc/pmi.h
+++ b/include/asm-powerpc/pmi.h
@@ -29,8 +29,6 @@
29 29
30#ifdef __KERNEL__ 30#ifdef __KERNEL__
31 31
32#include <asm/of_device.h>
33
34#define PMI_TYPE_FREQ_CHANGE 0x01 32#define PMI_TYPE_FREQ_CHANGE 0x01
35#define PMI_READ_TYPE 0 33#define PMI_READ_TYPE 0
36#define PMI_READ_DATA0 1 34#define PMI_READ_DATA0 1
diff --git a/include/asm-powerpc/ppc4xx.h b/include/asm-powerpc/ppc4xx.h
new file mode 100644
index 000000000000..033039a80c42
--- /dev/null
+++ b/include/asm-powerpc/ppc4xx.h
@@ -0,0 +1,18 @@
1/*
2 * PPC4xx Prototypes and definitions
3 *
4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * This is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 */
12
13#ifndef __ASM_POWERPC_PPC4xx_H__
14#define __ASM_POWERPC_PPC4xx_H__
15
16extern void ppc4xx_reset_system(char *cmd);
17
18#endif /* __ASM_POWERPC_PPC4xx_H__ */
diff --git a/include/asm-powerpc/ps3.h b/include/asm-powerpc/ps3.h
index 2b693673eff4..9e8ed6824e15 100644
--- a/include/asm-powerpc/ps3.h
+++ b/include/asm-powerpc/ps3.h
@@ -434,8 +434,11 @@ struct ps3_sys_manager_ops {
434}; 434};
435 435
436void ps3_sys_manager_register_ops(const struct ps3_sys_manager_ops *ops); 436void ps3_sys_manager_register_ops(const struct ps3_sys_manager_ops *ops);
437void ps3_sys_manager_power_off(void); 437void __noreturn ps3_sys_manager_power_off(void);
438void ps3_sys_manager_restart(void); 438void __noreturn ps3_sys_manager_restart(void);
439void __noreturn ps3_sys_manager_halt(void);
440int ps3_sys_manager_get_wol(void);
441void ps3_sys_manager_set_wol(int state);
439 442
440struct ps3_prealloc { 443struct ps3_prealloc {
441 const char *name; 444 const char *name;
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h
index 891d68932f39..39023dde1cc4 100644
--- a/include/asm-powerpc/ptrace.h
+++ b/include/asm-powerpc/ptrace.h
@@ -58,6 +58,11 @@ struct pt_regs {
58#define __ARCH_WANT_COMPAT_SYS_PTRACE 58#define __ARCH_WANT_COMPAT_SYS_PTRACE
59 59
60#define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */ 60#define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */
61#define STACK_FRAME_LR_SAVE 2 /* Location of LR in stack frame */
62#define STACK_FRAME_REGS_MARKER ASM_CONST(0x7265677368657265)
63#define STACK_INT_FRAME_SIZE (sizeof(struct pt_regs) + \
64 STACK_FRAME_OVERHEAD + 288)
65#define STACK_FRAME_MARKER 12
61 66
62/* Size of dummy stack frame allocated when calling signal handler. */ 67/* Size of dummy stack frame allocated when calling signal handler. */
63#define __SIGNAL_FRAMESIZE 128 68#define __SIGNAL_FRAMESIZE 128
@@ -66,6 +71,10 @@ struct pt_regs {
66#else /* __powerpc64__ */ 71#else /* __powerpc64__ */
67 72
68#define STACK_FRAME_OVERHEAD 16 /* size of minimum stack frame */ 73#define STACK_FRAME_OVERHEAD 16 /* size of minimum stack frame */
74#define STACK_FRAME_LR_SAVE 1 /* Location of LR in stack frame */
75#define STACK_FRAME_REGS_MARKER ASM_CONST(0x72656773)
76#define STACK_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
77#define STACK_FRAME_MARKER 2
69 78
70/* Size of stack frame allocated when calling signal handler. */ 79/* Size of stack frame allocated when calling signal handler. */
71#define __SIGNAL_FRAMESIZE 64 80#define __SIGNAL_FRAMESIZE 64
diff --git a/include/asm-powerpc/qe.h b/include/asm-powerpc/qe.h
index 430dc77b35fc..c3be6e2e1490 100644
--- a/include/asm-powerpc/qe.h
+++ b/include/asm-powerpc/qe.h
@@ -85,6 +85,7 @@ extern int par_io_data_set(u8 port, u8 pin, u8 val);
85/* QE internal API */ 85/* QE internal API */
86int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input); 86int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input);
87enum qe_clock qe_clock_source(const char *source); 87enum qe_clock qe_clock_source(const char *source);
88unsigned int qe_get_brg_clk(void);
88int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier); 89int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier);
89int qe_get_snum(void); 90int qe_get_snum(void);
90void qe_put_snum(u8 snum); 91void qe_put_snum(u8 snum);
@@ -92,7 +93,16 @@ unsigned long qe_muram_alloc(int size, int align);
92int qe_muram_free(unsigned long offset); 93int qe_muram_free(unsigned long offset);
93unsigned long qe_muram_alloc_fixed(unsigned long offset, int size); 94unsigned long qe_muram_alloc_fixed(unsigned long offset, int size);
94void qe_muram_dump(void); 95void qe_muram_dump(void);
95void *qe_muram_addr(unsigned long offset); 96
97static inline void __iomem *qe_muram_addr(unsigned long offset)
98{
99 return (void __iomem *)&qe_immr->muram[offset];
100}
101
102static inline unsigned long qe_muram_offset(void __iomem *addr)
103{
104 return addr - (void __iomem *)qe_immr->muram;
105}
96 106
97/* Structure that defines QE firmware binary files. 107/* Structure that defines QE firmware binary files.
98 * 108 *
diff --git a/include/asm-powerpc/rwsem.h b/include/asm-powerpc/rwsem.h
index cefc14728cc5..a6cc93b78b98 100644
--- a/include/asm-powerpc/rwsem.h
+++ b/include/asm-powerpc/rwsem.h
@@ -32,11 +32,20 @@ struct rw_semaphore {
32#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) 32#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
33 spinlock_t wait_lock; 33 spinlock_t wait_lock;
34 struct list_head wait_list; 34 struct list_head wait_list;
35#ifdef CONFIG_DEBUG_LOCK_ALLOC
36 struct lockdep_map dep_map;
37#endif
35}; 38};
36 39
40#ifdef CONFIG_DEBUG_LOCK_ALLOC
41# define __RWSEM_DEP_MAP_INIT(lockname) , .dep_map = { .name = #lockname }
42#else
43# define __RWSEM_DEP_MAP_INIT(lockname)
44#endif
45
37#define __RWSEM_INITIALIZER(name) \ 46#define __RWSEM_INITIALIZER(name) \
38 { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \ 47 { RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \
39 LIST_HEAD_INIT((name).wait_list) } 48 LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) }
40 49
41#define DECLARE_RWSEM(name) \ 50#define DECLARE_RWSEM(name) \
42 struct rw_semaphore name = __RWSEM_INITIALIZER(name) 51 struct rw_semaphore name = __RWSEM_INITIALIZER(name)
@@ -46,12 +55,15 @@ extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem);
46extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem); 55extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem);
47extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem); 56extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem);
48 57
49static inline void init_rwsem(struct rw_semaphore *sem) 58extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
50{ 59 struct lock_class_key *key);
51 sem->count = RWSEM_UNLOCKED_VALUE; 60
52 spin_lock_init(&sem->wait_lock); 61#define init_rwsem(sem) \
53 INIT_LIST_HEAD(&sem->wait_list); 62 do { \
54} 63 static struct lock_class_key __key; \
64 \
65 __init_rwsem((sem), #sem, &__key); \
66 } while (0)
55 67
56/* 68/*
57 * lock for reading 69 * lock for reading
@@ -78,7 +90,7 @@ static inline int __down_read_trylock(struct rw_semaphore *sem)
78/* 90/*
79 * lock for writing 91 * lock for writing
80 */ 92 */
81static inline void __down_write(struct rw_semaphore *sem) 93static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
82{ 94{
83 int tmp; 95 int tmp;
84 96
@@ -88,6 +100,11 @@ static inline void __down_write(struct rw_semaphore *sem)
88 rwsem_down_write_failed(sem); 100 rwsem_down_write_failed(sem);
89} 101}
90 102
103static inline void __down_write(struct rw_semaphore *sem)
104{
105 __down_write_nested(sem, 0);
106}
107
91static inline int __down_write_trylock(struct rw_semaphore *sem) 108static inline int __down_write_trylock(struct rw_semaphore *sem)
92{ 109{
93 int tmp; 110 int tmp;
diff --git a/include/asm-powerpc/sparsemem.h b/include/asm-powerpc/sparsemem.h
index e8b493d52b4f..9aea8e9f0bd1 100644
--- a/include/asm-powerpc/sparsemem.h
+++ b/include/asm-powerpc/sparsemem.h
@@ -15,6 +15,7 @@
15 15
16#ifdef CONFIG_MEMORY_HOTPLUG 16#ifdef CONFIG_MEMORY_HOTPLUG
17extern void create_section_mapping(unsigned long start, unsigned long end); 17extern void create_section_mapping(unsigned long start, unsigned long end);
18extern int remove_section_mapping(unsigned long start, unsigned long end);
18#ifdef CONFIG_NUMA 19#ifdef CONFIG_NUMA
19extern int hot_add_scn_to_nid(unsigned long scn_addr); 20extern int hot_add_scn_to_nid(unsigned long scn_addr);
20#else 21#else
diff --git a/include/asm-powerpc/spinlock.h b/include/asm-powerpc/spinlock.h
index cc4cfceac67c..258c93993190 100644
--- a/include/asm-powerpc/spinlock.h
+++ b/include/asm-powerpc/spinlock.h
@@ -19,6 +19,7 @@
19 * 19 *
20 * (the type definitions are in asm/spinlock_types.h) 20 * (the type definitions are in asm/spinlock_types.h)
21 */ 21 */
22#include <linux/irqflags.h>
22#ifdef CONFIG_PPC64 23#ifdef CONFIG_PPC64
23#include <asm/paca.h> 24#include <asm/paca.h>
24#include <asm/hvcall.h> 25#include <asm/hvcall.h>
diff --git a/include/asm-powerpc/string.h b/include/asm-powerpc/string.h
index aa40f92c298d..e40010abcaf1 100644
--- a/include/asm-powerpc/string.h
+++ b/include/asm-powerpc/string.h
@@ -7,6 +7,7 @@
7#define __HAVE_ARCH_STRNCPY 7#define __HAVE_ARCH_STRNCPY
8#define __HAVE_ARCH_STRLEN 8#define __HAVE_ARCH_STRLEN
9#define __HAVE_ARCH_STRCMP 9#define __HAVE_ARCH_STRCMP
10#define __HAVE_ARCH_STRNCMP
10#define __HAVE_ARCH_STRCAT 11#define __HAVE_ARCH_STRCAT
11#define __HAVE_ARCH_MEMSET 12#define __HAVE_ARCH_MEMSET
12#define __HAVE_ARCH_MEMCPY 13#define __HAVE_ARCH_MEMCPY
@@ -18,6 +19,7 @@ extern char * strcpy(char *,const char *);
18extern char * strncpy(char *,const char *, __kernel_size_t); 19extern char * strncpy(char *,const char *, __kernel_size_t);
19extern __kernel_size_t strlen(const char *); 20extern __kernel_size_t strlen(const char *);
20extern int strcmp(const char *,const char *); 21extern int strcmp(const char *,const char *);
22extern int strncmp(const char *, const char *, __kernel_size_t);
21extern char * strcat(char *, const char *); 23extern char * strcat(char *, const char *);
22extern void * memset(void *,int,__kernel_size_t); 24extern void * memset(void *,int,__kernel_size_t);
23extern void * memcpy(void *,const void *,__kernel_size_t); 25extern void * memcpy(void *,const void *,__kernel_size_t);
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h
index 29552ff182aa..fab1674b31b6 100644
--- a/include/asm-powerpc/system.h
+++ b/include/asm-powerpc/system.h
@@ -5,6 +5,7 @@
5#define _ASM_POWERPC_SYSTEM_H 5#define _ASM_POWERPC_SYSTEM_H
6 6
7#include <linux/kernel.h> 7#include <linux/kernel.h>
8#include <linux/irqflags.h>
8 9
9#include <asm/hw_irq.h> 10#include <asm/hw_irq.h>
10 11
diff --git a/include/asm-powerpc/types.h b/include/asm-powerpc/types.h
index 903fd1932436..c243a6ac60e5 100644
--- a/include/asm-powerpc/types.h
+++ b/include/asm-powerpc/types.h
@@ -84,6 +84,13 @@ typedef unsigned long long u64;
84 84
85typedef __vector128 vector128; 85typedef __vector128 vector128;
86 86
87/* Physical address used by some IO functions */
88#if defined(CONFIG_PPC64) || defined(CONFIG_PHYS_64BIT)
89typedef u64 phys_addr_t;
90#else
91typedef u32 phys_addr_t;
92#endif
93
87#ifdef __powerpc64__ 94#ifdef __powerpc64__
88typedef u64 dma_addr_t; 95typedef u64 dma_addr_t;
89#else 96#else
diff --git a/include/asm-sparc64/lmb.h b/include/asm-sparc64/lmb.h
new file mode 100644
index 000000000000..6a352cbcf520
--- /dev/null
+++ b/include/asm-sparc64/lmb.h
@@ -0,0 +1,10 @@
1#ifndef _SPARC64_LMB_H
2#define _SPARC64_LMB_H
3
4#include <asm/oplib.h>
5
6#define LMB_DBG(fmt...) prom_printf(fmt)
7
8#define LMB_REAL_LIMIT 0
9
10#endif /* !(_SPARC64_LMB_H) */
diff --git a/include/linux/lmb.h b/include/linux/lmb.h
new file mode 100644
index 000000000000..271153d27fba
--- /dev/null
+++ b/include/linux/lmb.h
@@ -0,0 +1,85 @@
1#ifndef _LINUX_LMB_H
2#define _LINUX_LMB_H
3#ifdef __KERNEL__
4
5/*
6 * Logical memory blocks.
7 *
8 * Copyright (C) 2001 Peter Bergner, IBM Corp.
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version
13 * 2 of the License, or (at your option) any later version.
14 */
15
16#include <linux/init.h>
17#include <linux/mm.h>
18
19#define MAX_LMB_REGIONS 128
20
21struct lmb_property {
22 u64 base;
23 u64 size;
24};
25
26struct lmb_region {
27 unsigned long cnt;
28 u64 size;
29 struct lmb_property region[MAX_LMB_REGIONS+1];
30};
31
32struct lmb {
33 unsigned long debug;
34 u64 rmo_size;
35 struct lmb_region memory;
36 struct lmb_region reserved;
37};
38
39extern struct lmb lmb;
40
41extern void __init lmb_init(void);
42extern void __init lmb_analyze(void);
43extern long __init lmb_add(u64 base, u64 size);
44extern long __init lmb_reserve(u64 base, u64 size);
45extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
46 u64 (*nid_range)(u64, u64, int *));
47extern u64 __init lmb_alloc(u64 size, u64 align);
48extern u64 __init lmb_alloc_base(u64 size,
49 u64, u64 max_addr);
50extern u64 __init __lmb_alloc_base(u64 size,
51 u64 align, u64 max_addr);
52extern u64 __init lmb_phys_mem_size(void);
53extern u64 __init lmb_end_of_DRAM(void);
54extern void __init lmb_enforce_memory_limit(u64 memory_limit);
55extern int __init lmb_is_reserved(u64 addr);
56
57extern void lmb_dump_all(void);
58
59static inline u64
60lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
61{
62 return type->region[region_nr].size;
63}
64static inline u64
65lmb_size_pages(struct lmb_region *type, unsigned long region_nr)
66{
67 return lmb_size_bytes(type, region_nr) >> PAGE_SHIFT;
68}
69static inline u64
70lmb_start_pfn(struct lmb_region *type, unsigned long region_nr)
71{
72 return type->region[region_nr].base >> PAGE_SHIFT;
73}
74static inline u64
75lmb_end_pfn(struct lmb_region *type, unsigned long region_nr)
76{
77 return lmb_start_pfn(type, region_nr) +
78 lmb_size_pages(type, region_nr);
79}
80
81#include <asm/lmb.h>
82
83#endif /* __KERNEL__ */
84
85#endif /* _LINUX_LMB_H */
diff --git a/include/linux/of.h b/include/linux/of.h
index 6981016dcc25..59a61bdc98b6 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -62,6 +62,7 @@ extern struct property *of_find_property(const struct device_node *np,
62 int *lenp); 62 int *lenp);
63extern int of_device_is_compatible(const struct device_node *device, 63extern int of_device_is_compatible(const struct device_node *device,
64 const char *); 64 const char *);
65extern int of_device_is_available(const struct device_node *device);
65extern const void *of_get_property(const struct device_node *node, 66extern const void *of_get_property(const struct device_node *node,
66 const char *name, 67 const char *name,
67 int *lenp); 68 int *lenp);
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h
new file mode 100644
index 000000000000..2ee97e9877a7
--- /dev/null
+++ b/include/linux/of_gpio.h
@@ -0,0 +1,69 @@
1/*
2 * OF helpers for the GPIO API
3 *
4 * Copyright (c) 2007-2008 MontaVista Software, Inc.
5 *
6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#ifndef __LINUX_OF_GPIO_H
15#define __LINUX_OF_GPIO_H
16
17#include <linux/errno.h>
18#include <asm/gpio.h>
19
20#ifdef CONFIG_OF_GPIO
21
22/*
23 * Generic OF GPIO chip
24 */
25struct of_gpio_chip {
26 struct gpio_chip gc;
27 int gpio_cells;
28 int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np,
29 const void *gpio_spec);
30};
31
32static inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc)
33{
34 return container_of(gc, struct of_gpio_chip, gc);
35}
36
37/*
38 * OF GPIO chip for memory mapped banks
39 */
40struct of_mm_gpio_chip {
41 struct of_gpio_chip of_gc;
42 void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
43 void __iomem *regs;
44};
45
46static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
47{
48 struct of_gpio_chip *of_gc = to_of_gpio_chip(gc);
49
50 return container_of(of_gc, struct of_mm_gpio_chip, of_gc);
51}
52
53extern int of_get_gpio(struct device_node *np, int index);
54extern int of_mm_gpiochip_add(struct device_node *np,
55 struct of_mm_gpio_chip *mm_gc);
56extern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc,
57 struct device_node *np,
58 const void *gpio_spec);
59#else
60
61/* Drivers may not strictly depend on the GPIO support, so let them link. */
62static inline int of_get_gpio(struct device_node *np, int index)
63{
64 return -ENOSYS;
65}
66
67#endif /* CONFIG_OF_GPIO */
68
69#endif /* __LINUX_OF_GPIO_H */
diff --git a/include/linux/of_i2c.h b/include/linux/of_i2c.h
new file mode 100644
index 000000000000..2e5a96732042
--- /dev/null
+++ b/include/linux/of_i2c.h
@@ -0,0 +1,24 @@
1/*
2 * Generic I2C API implementation for PowerPC.
3 *
4 * Copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 */
11
12#ifndef __LINUX_OF_I2C_H
13#define __LINUX_OF_I2C_H
14
15#include <linux/i2c.h>
16
17#ifdef CONFIG_OF_I2C
18
19void of_register_i2c_devices(struct i2c_adapter *adap,
20 struct device_node *adap_node);
21
22#endif /* CONFIG_OF_I2C */
23
24#endif /* __LINUX_OF_I2C_H */
diff --git a/lib/Kconfig b/lib/Kconfig
index ba3d104994d9..2d53dc092e8b 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -141,4 +141,7 @@ config HAS_DMA
141config CHECK_SIGNATURE 141config CHECK_SIGNATURE
142 bool 142 bool
143 143
144config HAVE_LMB
145 boolean
146
144endmenu 147endmenu
diff --git a/lib/Makefile b/lib/Makefile
index 4d7649c326f6..bf8000fc7d48 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -68,6 +68,8 @@ obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o
68 68
69lib-$(CONFIG_GENERIC_BUG) += bug.o 69lib-$(CONFIG_GENERIC_BUG) += bug.o
70 70
71obj-$(CONFIG_HAVE_LMB) += lmb.o
72
71hostprogs-y := gen_crc32table 73hostprogs-y := gen_crc32table
72clean-files := crc32table.h 74clean-files := crc32table.h
73 75
diff --git a/lib/lmb.c b/lib/lmb.c
new file mode 100644
index 000000000000..896e2832099e
--- /dev/null
+++ b/lib/lmb.c
@@ -0,0 +1,428 @@
1/*
2 * Procedures for maintaining information about logical memory blocks.
3 *
4 * Peter Bergner, IBM Corp. June 2001.
5 * Copyright (C) 2001 Peter Bergner.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/bitops.h>
16#include <linux/lmb.h>
17
18#define LMB_ALLOC_ANYWHERE 0
19
20struct lmb lmb;
21
22void lmb_dump_all(void)
23{
24#ifdef DEBUG
25 unsigned long i;
26
27 pr_debug("lmb_dump_all:\n");
28 pr_debug(" memory.cnt = 0x%lx\n", lmb.memory.cnt);
29 pr_debug(" memory.size = 0x%llx\n",
30 (unsigned long long)lmb.memory.size);
31 for (i=0; i < lmb.memory.cnt ;i++) {
32 pr_debug(" memory.region[0x%x].base = 0x%llx\n",
33 i, (unsigned long long)lmb.memory.region[i].base);
34 pr_debug(" .size = 0x%llx\n",
35 (unsigned long long)lmb.memory.region[i].size);
36 }
37
38 pr_debug(" reserved.cnt = 0x%lx\n", lmb.reserved.cnt);
39 pr_debug(" reserved.size = 0x%lx\n", lmb.reserved.size);
40 for (i=0; i < lmb.reserved.cnt ;i++) {
41 pr_debug(" reserved.region[0x%x].base = 0x%llx\n",
42 i, (unsigned long long)lmb.reserved.region[i].base);
43 pr_debug(" .size = 0x%llx\n",
44 (unsigned long long)lmb.reserved.region[i].size);
45 }
46#endif /* DEBUG */
47}
48
49static unsigned long __init lmb_addrs_overlap(u64 base1, u64 size1,
50 u64 base2, u64 size2)
51{
52 return ((base1 < (base2 + size2)) && (base2 < (base1 + size1)));
53}
54
55static long __init lmb_addrs_adjacent(u64 base1, u64 size1,
56 u64 base2, u64 size2)
57{
58 if (base2 == base1 + size1)
59 return 1;
60 else if (base1 == base2 + size2)
61 return -1;
62
63 return 0;
64}
65
66static long __init lmb_regions_adjacent(struct lmb_region *rgn,
67 unsigned long r1, unsigned long r2)
68{
69 u64 base1 = rgn->region[r1].base;
70 u64 size1 = rgn->region[r1].size;
71 u64 base2 = rgn->region[r2].base;
72 u64 size2 = rgn->region[r2].size;
73
74 return lmb_addrs_adjacent(base1, size1, base2, size2);
75}
76
77static void __init lmb_remove_region(struct lmb_region *rgn, unsigned long r)
78{
79 unsigned long i;
80
81 for (i = r; i < rgn->cnt - 1; i++) {
82 rgn->region[i].base = rgn->region[i + 1].base;
83 rgn->region[i].size = rgn->region[i + 1].size;
84 }
85 rgn->cnt--;
86}
87
88/* Assumption: base addr of region 1 < base addr of region 2 */
89static void __init lmb_coalesce_regions(struct lmb_region *rgn,
90 unsigned long r1, unsigned long r2)
91{
92 rgn->region[r1].size += rgn->region[r2].size;
93 lmb_remove_region(rgn, r2);
94}
95
96void __init lmb_init(void)
97{
98 /* Create a dummy zero size LMB which will get coalesced away later.
99 * This simplifies the lmb_add() code below...
100 */
101 lmb.memory.region[0].base = 0;
102 lmb.memory.region[0].size = 0;
103 lmb.memory.cnt = 1;
104
105 /* Ditto. */
106 lmb.reserved.region[0].base = 0;
107 lmb.reserved.region[0].size = 0;
108 lmb.reserved.cnt = 1;
109}
110
111void __init lmb_analyze(void)
112{
113 int i;
114
115 lmb.memory.size = 0;
116
117 for (i = 0; i < lmb.memory.cnt; i++)
118 lmb.memory.size += lmb.memory.region[i].size;
119}
120
121static long __init lmb_add_region(struct lmb_region *rgn, u64 base, u64 size)
122{
123 unsigned long coalesced = 0;
124 long adjacent, i;
125
126 if ((rgn->cnt == 1) && (rgn->region[0].size == 0)) {
127 rgn->region[0].base = base;
128 rgn->region[0].size = size;
129 return 0;
130 }
131
132 /* First try and coalesce this LMB with another. */
133 for (i = 0; i < rgn->cnt; i++) {
134 u64 rgnbase = rgn->region[i].base;
135 u64 rgnsize = rgn->region[i].size;
136
137 if ((rgnbase == base) && (rgnsize == size))
138 /* Already have this region, so we're done */
139 return 0;
140
141 adjacent = lmb_addrs_adjacent(base, size, rgnbase, rgnsize);
142 if (adjacent > 0) {
143 rgn->region[i].base -= size;
144 rgn->region[i].size += size;
145 coalesced++;
146 break;
147 } else if (adjacent < 0) {
148 rgn->region[i].size += size;
149 coalesced++;
150 break;
151 }
152 }
153
154 if ((i < rgn->cnt - 1) && lmb_regions_adjacent(rgn, i, i+1)) {
155 lmb_coalesce_regions(rgn, i, i+1);
156 coalesced++;
157 }
158
159 if (coalesced)
160 return coalesced;
161 if (rgn->cnt >= MAX_LMB_REGIONS)
162 return -1;
163
164 /* Couldn't coalesce the LMB, so add it to the sorted table. */
165 for (i = rgn->cnt - 1; i >= 0; i--) {
166 if (base < rgn->region[i].base) {
167 rgn->region[i+1].base = rgn->region[i].base;
168 rgn->region[i+1].size = rgn->region[i].size;
169 } else {
170 rgn->region[i+1].base = base;
171 rgn->region[i+1].size = size;
172 break;
173 }
174 }
175
176 if (base < rgn->region[0].base) {
177 rgn->region[0].base = base;
178 rgn->region[0].size = size;
179 }
180 rgn->cnt++;
181
182 return 0;
183}
184
185long __init lmb_add(u64 base, u64 size)
186{
187 struct lmb_region *_rgn = &lmb.memory;
188
189 /* On pSeries LPAR systems, the first LMB is our RMO region. */
190 if (base == 0)
191 lmb.rmo_size = size;
192
193 return lmb_add_region(_rgn, base, size);
194
195}
196
197long __init lmb_reserve(u64 base, u64 size)
198{
199 struct lmb_region *_rgn = &lmb.reserved;
200
201 BUG_ON(0 == size);
202
203 return lmb_add_region(_rgn, base, size);
204}
205
206long __init lmb_overlaps_region(struct lmb_region *rgn, u64 base, u64 size)
207{
208 unsigned long i;
209
210 for (i = 0; i < rgn->cnt; i++) {
211 u64 rgnbase = rgn->region[i].base;
212 u64 rgnsize = rgn->region[i].size;
213 if (lmb_addrs_overlap(base, size, rgnbase, rgnsize))
214 break;
215 }
216
217 return (i < rgn->cnt) ? i : -1;
218}
219
220static u64 lmb_align_down(u64 addr, u64 size)
221{
222 return addr & ~(size - 1);
223}
224
225static u64 lmb_align_up(u64 addr, u64 size)
226{
227 return (addr + (size - 1)) & ~(size - 1);
228}
229
230static u64 __init lmb_alloc_nid_unreserved(u64 start, u64 end,
231 u64 size, u64 align)
232{
233 u64 base, res_base;
234 long j;
235
236 base = lmb_align_down((end - size), align);
237 while (start <= base) {
238 j = lmb_overlaps_region(&lmb.reserved, base, size);
239 if (j < 0) {
240 /* this area isn't reserved, take it */
241 if (lmb_add_region(&lmb.reserved, base,
242 lmb_align_up(size, align)) < 0)
243 base = ~(u64)0;
244 return base;
245 }
246 res_base = lmb.reserved.region[j].base;
247 if (res_base < size)
248 break;
249 base = lmb_align_down(res_base - size, align);
250 }
251
252 return ~(u64)0;
253}
254
255static u64 __init lmb_alloc_nid_region(struct lmb_property *mp,
256 u64 (*nid_range)(u64, u64, int *),
257 u64 size, u64 align, int nid)
258{
259 u64 start, end;
260
261 start = mp->base;
262 end = start + mp->size;
263
264 start = lmb_align_up(start, align);
265 while (start < end) {
266 u64 this_end;
267 int this_nid;
268
269 this_end = nid_range(start, end, &this_nid);
270 if (this_nid == nid) {
271 u64 ret = lmb_alloc_nid_unreserved(start, this_end,
272 size, align);
273 if (ret != ~(u64)0)
274 return ret;
275 }
276 start = this_end;
277 }
278
279 return ~(u64)0;
280}
281
282u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
283 u64 (*nid_range)(u64 start, u64 end, int *nid))
284{
285 struct lmb_region *mem = &lmb.memory;
286 int i;
287
288 for (i = 0; i < mem->cnt; i++) {
289 u64 ret = lmb_alloc_nid_region(&mem->region[i],
290 nid_range,
291 size, align, nid);
292 if (ret != ~(u64)0)
293 return ret;
294 }
295
296 return lmb_alloc(size, align);
297}
298
299u64 __init lmb_alloc(u64 size, u64 align)
300{
301 return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
302}
303
304u64 __init lmb_alloc_base(u64 size, u64 align, u64 max_addr)
305{
306 u64 alloc;
307
308 alloc = __lmb_alloc_base(size, align, max_addr);
309
310 if (alloc == 0)
311 panic("ERROR: Failed to allocate 0x%llx bytes below 0x%llx.\n",
312 (unsigned long long) size, (unsigned long long) max_addr);
313
314 return alloc;
315}
316
317u64 __init __lmb_alloc_base(u64 size, u64 align, u64 max_addr)
318{
319 long i, j;
320 u64 base = 0;
321 u64 res_base;
322
323 BUG_ON(0 == size);
324
325 /* On some platforms, make sure we allocate lowmem */
326 /* Note that LMB_REAL_LIMIT may be LMB_ALLOC_ANYWHERE */
327 if (max_addr == LMB_ALLOC_ANYWHERE)
328 max_addr = LMB_REAL_LIMIT;
329
330 for (i = lmb.memory.cnt - 1; i >= 0; i--) {
331 u64 lmbbase = lmb.memory.region[i].base;
332 u64 lmbsize = lmb.memory.region[i].size;
333
334 if (lmbsize < size)
335 continue;
336 if (max_addr == LMB_ALLOC_ANYWHERE)
337 base = lmb_align_down(lmbbase + lmbsize - size, align);
338 else if (lmbbase < max_addr) {
339 base = min(lmbbase + lmbsize, max_addr);
340 base = lmb_align_down(base - size, align);
341 } else
342 continue;
343
344 while (base && lmbbase <= base) {
345 j = lmb_overlaps_region(&lmb.reserved, base, size);
346 if (j < 0) {
347 /* this area isn't reserved, take it */
348 if (lmb_add_region(&lmb.reserved, base,
349 size) < 0)
350 return 0;
351 return base;
352 }
353 res_base = lmb.reserved.region[j].base;
354 if (res_base < size)
355 break;
356 base = lmb_align_down(res_base - size, align);
357 }
358 }
359 return 0;
360}
361
362/* You must call lmb_analyze() before this. */
363u64 __init lmb_phys_mem_size(void)
364{
365 return lmb.memory.size;
366}
367
368u64 __init lmb_end_of_DRAM(void)
369{
370 int idx = lmb.memory.cnt - 1;
371
372 return (lmb.memory.region[idx].base + lmb.memory.region[idx].size);
373}
374
375/* You must call lmb_analyze() after this. */
376void __init lmb_enforce_memory_limit(u64 memory_limit)
377{
378 unsigned long i;
379 u64 limit;
380 struct lmb_property *p;
381
382 if (!memory_limit)
383 return;
384
385 /* Truncate the lmb regions to satisfy the memory limit. */
386 limit = memory_limit;
387 for (i = 0; i < lmb.memory.cnt; i++) {
388 if (limit > lmb.memory.region[i].size) {
389 limit -= lmb.memory.region[i].size;
390 continue;
391 }
392
393 lmb.memory.region[i].size = limit;
394 lmb.memory.cnt = i + 1;
395 break;
396 }
397
398 if (lmb.memory.region[0].size < lmb.rmo_size)
399 lmb.rmo_size = lmb.memory.region[0].size;
400
401 /* And truncate any reserves above the limit also. */
402 for (i = 0; i < lmb.reserved.cnt; i++) {
403 p = &lmb.reserved.region[i];
404
405 if (p->base > memory_limit)
406 p->size = 0;
407 else if ((p->base + p->size) > memory_limit)
408 p->size = memory_limit - p->base;
409
410 if (p->size == 0) {
411 lmb_remove_region(&lmb.reserved, i);
412 i--;
413 }
414 }
415}
416
417int __init lmb_is_reserved(u64 addr)
418{
419 int i;
420
421 for (i = 0; i < lmb.reserved.cnt; i++) {
422 u64 upper = lmb.reserved.region[i].base +
423 lmb.reserved.region[i].size - 1;
424 if ((addr >= lmb.reserved.region[i].base) && (addr <= upper))
425 return 1;
426 }
427 return 0;
428}