Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc

* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (49 commits)
[POWERPC] Add zImage.iseries to arch/powerpc/boot/.gitignore
[POWERPC] bootwrapper: fix build error on virtex405-head.S
[POWERPC] 4xx: Fix 460GT support to not enable FPU
[POWERPC] 4xx: Add NOR FLASH entries to Canyonlands and Glacier dts
[POWERPC] Xilinx: of_serial support for Xilinx uart 16550.
[POWERPC] Xilinx: boot support for Xilinx uart 16550.
[POWERPC] celleb: Add support for PCI Express
[POWERPC] celleb: Move miscellaneous files for Beat
[POWERPC] celleb: Move a file for SPU on Beat
[POWERPC] celleb: Move files for Beat mmu and iommu
[POWERPC] celleb: Move files for Beat hvcall interfaces
[POWERPC] celleb: Move the SCC related code for celleb
[POWERPC] celleb: Move the files for celleb base support
[POWERPC] celleb: Consolidate io-workarounds code
[POWERPC] cell: Generalize io-workarounds code
[POWERPC] Add CONFIG_PPC_PSERIES_DEBUG to enable debugging for platforms/pseries
[POWERPC] Convert from DBG() to pr_debug() in platforms/pseries/
[POWERPC] Register udbg console early on pseries LPAR
[POWERPC] Mark udbg console as CON_ANYTIME, ie. callable early in boot
[POWERPC] Set udbg_console index to 0
...

+1935 -4584
+11
Documentation/powerpc/booting-without-of.txt
··· 2601 2601 differ between different families. May be 2602 2602 'virtex2p', 'virtex4', or 'virtex5'. 2603 2603 2604 + vi) Xilinx Uart 16550 2605 + 2606 + Xilinx UART 16550 devices are very similar to the NS16550 but with 2607 + different register spacing and an offset from the base address. 2608 + 2609 + Requred properties: 2610 + - clock-frequency : Frequency of the clock input 2611 + - reg-offset : A value of 3 is required 2612 + - reg-shift : A value of 2 is required 2613 + 2614 + 2604 2615 p) Freescale Synchronous Serial Interface 2605 2616 2606 2617 The SSI is a serial device that communicates with audio codecs. It can
+25
MAINTAINERS
··· 1106 1106 L: linux-usb@vger.kernel.org 1107 1107 S: Maintained 1108 1108 1109 + CIRRUS LOGIC CS4270 SOUND DRIVER 1110 + P: Timur Tabi 1111 + M: timur@freescale.com 1112 + L: alsa-devel@alsa-project.org 1113 + S: Supported 1114 + 1109 1115 CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER 1110 1116 P: Cirrus Logic Corporation (kernel 2.2 driver) 1111 1117 M: Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com> ··· 1634 1628 L: netdev@vger.kernel.org 1635 1629 S: Maintained 1636 1630 1631 + FREESCALE QUICC ENGINE LIBRARY 1632 + P: Timur Tabi 1633 + M: timur@freescale.com 1634 + L: linuxppc-dev@ozlabs.org 1635 + S: Supported 1636 + 1637 1637 FREESCALE HIGHSPEED USB DEVICE DRIVER 1638 1638 P: Li Yang 1639 1639 M: leoli@freescale.com ··· 1653 1641 L: netdev@vger.kernel.org 1654 1642 L: linuxppc-dev@ozlabs.org 1655 1643 S: Maintained 1644 + 1645 + FREESCALE QUICC ENGINE UCC UART DRIVER 1646 + P: Timur Tabi 1647 + M: timur@freescale.com 1648 + L: linuxppc-dev@ozlabs.org 1649 + S: Supported 1650 + 1651 + FREESCALE SOC SOUND DRIVERS 1652 + P: Timur Tabi 1653 + M: timur@freescale.com 1654 + L: alsa-devel@alsa-project.org 1655 + L: linuxppc-dev@ozlabs.org 1656 + S: Supported 1656 1657 1657 1658 FILE LOCKING (flock() and fcntl()/lockf()) 1658 1659 P: Matthew Wilcox
+67 -18
arch/powerpc/Kconfig
··· 626 626 comment "Default settings for advanced configuration options are used" 627 627 depends on !ADVANCED_OPTIONS 628 628 629 - config HIGHMEM_START_BOOL 630 - bool "Set high memory pool address" 631 - depends on ADVANCED_OPTIONS && HIGHMEM 632 - help 633 - This option allows you to set the base address of the kernel virtual 634 - area used to map high memory pages. This can be useful in 635 - optimizing the layout of kernel virtual memory. 636 - 637 - Say N here unless you know what you are doing. 638 - 639 - config HIGHMEM_START 640 - hex "Virtual start address of high memory pool" if HIGHMEM_START_BOOL 641 - default "0xfe000000" 642 - 643 629 config LOWMEM_SIZE_BOOL 644 630 bool "Set maximum low memory" 645 631 depends on ADVANCED_OPTIONS ··· 642 656 hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL 643 657 default "0x30000000" 644 658 659 + config RELOCATABLE 660 + bool "Build a relocatable kernel (EXPERIMENTAL)" 661 + depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE 662 + help 663 + This builds a kernel image that is capable of running at the 664 + location the kernel is loaded at (some alignment restrictions may 665 + exist). 666 + 667 + One use is for the kexec on panic case where the recovery kernel 668 + must live at a different physical address than the primary 669 + kernel. 670 + 671 + Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address 672 + it has been loaded at and the compile time physical addresses 673 + CONFIG_PHYSICAL_START is ignored. However CONFIG_PHYSICAL_START 674 + setting can still be useful to bootwrappers that need to know the 675 + load location of the kernel (eg. u-boot/mkimage). 676 + 677 + config PAGE_OFFSET_BOOL 678 + bool "Set custom page offset address" 679 + depends on ADVANCED_OPTIONS 680 + help 681 + This option allows you to set the kernel virtual address at which 682 + the kernel will map low memory. This can be useful in optimizing 683 + the virtual memory layout of the system. 684 + 685 + Say N here unless you know what you are doing. 686 + 687 + config PAGE_OFFSET 688 + hex "Virtual address of memory base" if PAGE_OFFSET_BOOL 689 + default "0xc0000000" 690 + 645 691 config KERNEL_START_BOOL 646 692 bool "Set custom kernel base address" 647 693 depends on ADVANCED_OPTIONS 648 694 help 649 695 This option allows you to set the kernel virtual address at which 650 - the kernel will map low memory (the kernel image will be linked at 651 - this address). This can be useful in optimizing the virtual memory 652 - layout of the system. 696 + the kernel will be loaded. Normally this should match PAGE_OFFSET 697 + however there are times (like kdump) that one might not want them 698 + to be the same. 653 699 654 700 Say N here unless you know what you are doing. 655 701 656 702 config KERNEL_START 657 703 hex "Virtual address of kernel base" if KERNEL_START_BOOL 704 + default PAGE_OFFSET if PAGE_OFFSET_BOOL 705 + default "0xc2000000" if CRASH_DUMP 658 706 default "0xc0000000" 707 + 708 + config PHYSICAL_START_BOOL 709 + bool "Set physical address where the kernel is loaded" 710 + depends on ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE 711 + help 712 + This gives the physical address where the kernel is loaded. 713 + 714 + Say N here unless you know what you are doing. 715 + 716 + config PHYSICAL_START 717 + hex "Physical address where the kernel is loaded" if PHYSICAL_START_BOOL 718 + default "0x02000000" if PPC_STD_MMU && CRASH_DUMP 719 + default "0x00000000" 720 + 721 + config PHYSICAL_ALIGN 722 + hex 723 + default "0x10000000" if FSL_BOOKE 724 + help 725 + This value puts the alignment restrictions on physical address 726 + where kernel is loaded and run from. Kernel is compiled for an 727 + address which meets above alignment restriction. 659 728 660 729 config TASK_SIZE_BOOL 661 730 bool "Set custom user task size" ··· 758 717 endmenu 759 718 760 719 if PPC64 761 - config KERNEL_START 720 + config PAGE_OFFSET 762 721 hex 763 722 default "0xc000000000000000" 723 + config KERNEL_START 724 + hex 725 + default "0xc000000002000000" if CRASH_DUMP 726 + default "0xc000000000000000" 727 + config PHYSICAL_START 728 + hex 729 + default "0x02000000" if CRASH_DUMP 730 + default "0x00000000" 764 731 endif 765 732 766 733 source "net/Kconfig"
+1
arch/powerpc/boot/.gitignore
··· 27 27 zImage.coff 28 28 zImage.coff.lds 29 29 zImage.ep* 30 + zImage.iseries 30 31 zImage.*lds 31 32 zImage.miboot 32 33 zImage.pmac
+1 -1
arch/powerpc/boot/Makefile
··· 40 40 $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 41 41 $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 42 42 $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 43 - $(obj)/virtex405-head.o: BOOTCFLAGS += -mcpu=405 43 + $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405 44 44 45 45 46 46 zlib := inffast.c inflate.c inftrees.c
+37
arch/powerpc/boot/dts/canyonlands.dts
··· 142 142 #address-cells = <2>; 143 143 #size-cells = <1>; 144 144 clock-frequency = <0>; /* Filled in by U-Boot */ 145 + /* ranges property is supplied by U-Boot */ 145 146 interrupts = <6 4>; 146 147 interrupt-parent = <&UIC1>; 148 + 149 + nor_flash@0,0 { 150 + compatible = "amd,s29gl512n", "cfi-flash"; 151 + bank-width = <2>; 152 + reg = <0 000000 4000000>; 153 + #address-cells = <1>; 154 + #size-cells = <1>; 155 + partition@0 { 156 + label = "kernel"; 157 + reg = <0 1e0000>; 158 + }; 159 + partition@1e0000 { 160 + label = "dtb"; 161 + reg = <1e0000 20000>; 162 + }; 163 + partition@200000 { 164 + label = "ramdisk"; 165 + reg = <200000 1400000>; 166 + }; 167 + partition@1600000 { 168 + label = "jffs2"; 169 + reg = <1600000 400000>; 170 + }; 171 + partition@1a00000 { 172 + label = "user"; 173 + reg = <1a00000 2560000>; 174 + }; 175 + partition@3f60000 { 176 + label = "env"; 177 + reg = <3f60000 40000>; 178 + }; 179 + partition@3fa0000 { 180 + label = "u-boot"; 181 + reg = <3fa0000 60000>; 182 + }; 183 + }; 147 184 }; 148 185 149 186 UART0: serial@ef600300 {
+37
arch/powerpc/boot/dts/glacier.dts
··· 145 145 #address-cells = <2>; 146 146 #size-cells = <1>; 147 147 clock-frequency = <0>; /* Filled in by U-Boot */ 148 + /* ranges property is supplied by U-Boot */ 148 149 interrupts = <6 4>; 149 150 interrupt-parent = <&UIC1>; 151 + 152 + nor_flash@0,0 { 153 + compatible = "amd,s29gl512n", "cfi-flash"; 154 + bank-width = <2>; 155 + reg = <0 000000 4000000>; 156 + #address-cells = <1>; 157 + #size-cells = <1>; 158 + partition@0 { 159 + label = "kernel"; 160 + reg = <0 1e0000>; 161 + }; 162 + partition@1e0000 { 163 + label = "dtb"; 164 + reg = <1e0000 20000>; 165 + }; 166 + partition@200000 { 167 + label = "ramdisk"; 168 + reg = <200000 1400000>; 169 + }; 170 + partition@1600000 { 171 + label = "jffs2"; 172 + reg = <1600000 400000>; 173 + }; 174 + partition@1a00000 { 175 + label = "user"; 176 + reg = <1a00000 2560000>; 177 + }; 178 + partition@3f60000 { 179 + label = "env"; 180 + reg = <3f60000 40000>; 181 + }; 182 + partition@3fa0000 { 183 + label = "u-boot"; 184 + reg = <3fa0000 60000>; 185 + }; 186 + }; 150 187 }; 151 188 152 189 UART0: serial@ef600300 {
+5
arch/powerpc/boot/ns16550.c
··· 55 55 int ns16550_console_init(void *devp, struct serial_console_data *scdp) 56 56 { 57 57 int n; 58 + u32 reg_offset; 58 59 59 60 if (dt_get_virtual_reg(devp, (void **)&reg_base, 1) < 1) 60 61 return -1; 62 + 63 + n = getprop(devp, "reg-offset", &reg_offset, sizeof(reg_offset)); 64 + if (n == sizeof(reg_offset)) 65 + reg_base += reg_offset; 61 66 62 67 n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift)); 63 68 if (n != sizeof(reg_shift))
+9
arch/powerpc/kernel/Makefile
··· 106 106 systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i 107 107 $(call cmd,systbl_chk) 108 108 109 + $(obj)/built-in.o: prom_init_check 110 + 111 + quiet_cmd_prom_init_check = CALL $< 112 + cmd_prom_init_check = $(CONFIG_SHELL) $< "$(NM)" "$(obj)/prom_init.o" 113 + 114 + PHONY += prom_init_check 115 + prom_init_check: $(src)/prom_init_check.sh $(obj)/prom_init.o 116 + $(call cmd,prom_init_check) 117 + 109 118 clean-files := vmlinux.lds
+2 -9
arch/powerpc/kernel/asm-offsets.c
··· 93 93 DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags)); 94 94 DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); 95 95 DEFINE(TI_TASK, offsetof(struct thread_info, task)); 96 - #ifdef CONFIG_PPC32 97 - DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); 98 96 DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); 99 - #endif /* CONFIG_PPC32 */ 100 97 101 98 #ifdef CONFIG_PPC64 102 99 DEFINE(DCACHEL1LINESIZE, offsetof(struct ppc64_caches, dline_size)); ··· 162 165 163 166 /* Interrupt register frame */ 164 167 DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); 165 - #ifndef CONFIG_PPC64 166 - DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); 167 - #else /* CONFIG_PPC64 */ 168 + DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE); 169 + #ifdef CONFIG_PPC64 168 170 DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); 169 - /* 288 = # of volatile regs, int & fp, for leaf routines */ 170 - /* which do not stack a frame. See the PPC64 ABI. */ 171 - DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 288); 172 171 /* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */ 173 172 DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); 174 173 DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16);
-1
arch/powerpc/kernel/cpu_setup_44x.S
··· 33 33 mtlr r4 34 34 blr 35 35 _GLOBAL(__setup_cpu_460ex) 36 - _GLOBAL(__setup_cpu_460gt) 37 36 b __init_fpu_44x 38 37 _GLOBAL(__setup_cpu_440gx) 39 38 _GLOBAL(__setup_cpu_440spe)
+7 -1
arch/powerpc/kernel/cpu_setup_6xx.S
··· 17 17 #include <asm/cache.h> 18 18 19 19 _GLOBAL(__setup_cpu_603) 20 - b setup_common_caches 20 + mflr r4 21 + BEGIN_FTR_SECTION 22 + bl __init_fpu_registers 23 + END_FTR_SECTION_IFCLR(CPU_FTR_FPU_UNAVAILABLE) 24 + bl setup_common_caches 25 + mtlr r4 26 + blr 21 27 _GLOBAL(__setup_cpu_604) 22 28 mflr r4 23 29 bl setup_common_caches
+1 -3
arch/powerpc/kernel/cputable.c
··· 37 37 extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); 38 38 extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); 39 39 extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); 40 - extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); 41 40 extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); 42 41 extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); 43 42 extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); ··· 1415 1416 .pvr_value = 0x13020000, 1416 1417 .cpu_name = "460GT", 1417 1418 .cpu_features = CPU_FTRS_44X, 1418 - .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 1419 + .cpu_user_features = COMMON_USER_BOOKE, 1419 1420 .icache_bsize = 32, 1420 1421 .dcache_bsize = 32, 1421 - .cpu_setup = __setup_cpu_460gt, 1422 1422 .machine_check = machine_check_440A, 1423 1423 .platform = "ppc440", 1424 1424 },
+11
arch/powerpc/kernel/head_fsl_booke.S
··· 371 371 372 372 bl early_init 373 373 374 + #ifdef CONFIG_RELOCATABLE 375 + lis r3,kernstart_addr@ha 376 + la r3,kernstart_addr@l(r3) 377 + #ifdef CONFIG_PHYS_64BIT 378 + stw r23,0(r3) 379 + stw r25,4(r3) 380 + #else 381 + stw r25,0(r3) 382 + #endif 383 + #endif 384 + 374 385 mfspr r3,SPRN_TLB1CFG 375 386 andi. r3,r3,0xfff 376 387 lis r4,num_tlbcam_entries@ha
+3 -3
arch/powerpc/kernel/misc_32.S
··· 152 152 mtspr SPRN_HID1,r4 153 153 154 154 /* Store new HID1 image */ 155 - rlwinm r6,r1,0,0,18 155 + rlwinm r6,r1,0,0,(31-THREAD_SHIFT) 156 156 lwz r6,TI_CPU(r6) 157 157 slwi r6,r6,2 158 158 addis r6,r6,nap_save_hid1@ha ··· 281 281 #endif /* CONFIG_SMP */ 282 282 #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ 283 283 #if defined(CONFIG_SMP) 284 - rlwinm r8,r1,0,0,18 284 + rlwinm r8,r1,0,0,(31-THREAD_SHIFT) 285 285 lwz r8,TI_CPU(r8) 286 286 oris r8,r8,10 287 287 mfmsr r10 ··· 377 377 #endif /* CONFIG_SMP */ 378 378 #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ 379 379 #if defined(CONFIG_SMP) 380 - rlwinm r8,r1,0,0,18 380 + rlwinm r8,r1,0,0,(31-THREAD_SHIFT) 381 381 lwz r8,TI_CPU(r8) 382 382 oris r8,r8,11 383 383 mfmsr r10
+4 -16
arch/powerpc/kernel/misc_64.S
··· 27 27 28 28 .text 29 29 30 - _GLOBAL(get_msr) 31 - mfmsr r3 32 - blr 33 - 34 - _GLOBAL(get_srr0) 35 - mfsrr0 r3 36 - blr 37 - 38 - _GLOBAL(get_srr1) 39 - mfsrr1 r3 40 - blr 41 - 42 30 #ifdef CONFIG_IRQSTACKS 43 31 _GLOBAL(call_do_softirq) 44 32 mflr r0 45 33 std r0,16(r1) 46 - stdu r1,THREAD_SIZE-112(r3) 34 + stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3) 47 35 mr r1,r3 48 36 bl .__do_softirq 49 37 ld r1,0(r1) ··· 44 56 mflr r0 45 57 std r0,16(r1) 46 58 mtctr r8 47 - stdu r1,THREAD_SIZE-112(r5) 59 + stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r5) 48 60 mr r1,r5 49 61 bctrl 50 62 ld r1,0(r1) ··· 587 599 std r0,16(r1) 588 600 589 601 /* switch stacks to newstack -- &kexec_stack.stack */ 590 - stdu r1,THREAD_SIZE-112(r3) 602 + stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3) 591 603 mr r1,r3 592 604 593 605 li r0,0 ··· 604 616 std r26,-48(r1) 605 617 std r25,-56(r1) 606 618 607 - stdu r1,-112-64(r1) 619 + stdu r1,-STACK_FRAME_OVERHEAD-64(r1) 608 620 609 621 /* save args into preserved regs */ 610 622 mr r31,r3 /* newstack (both) */
+2
arch/powerpc/kernel/of_platform.c
··· 275 275 276 276 /* Scan the bus */ 277 277 scan_phb(phb); 278 + if (phb->bus == NULL) 279 + return -ENXIO; 278 280 279 281 /* Claim resources. This might need some rework as well depending 280 282 * wether we are doing probe-only or not, like assigning unassigned
+25 -62
arch/powerpc/kernel/paca.c
··· 7 7 * 2 of the License, or (at your option) any later version. 8 8 */ 9 9 10 - #include <linux/types.h> 11 10 #include <linux/threads.h> 12 11 #include <linux/module.h> 13 12 14 - #include <asm/processor.h> 15 - #include <asm/ptrace.h> 16 - #include <asm/page.h> 17 13 #include <asm/lppaca.h> 18 14 #include <asm/paca.h> 19 - #include <asm/mmu.h> 20 - 21 15 22 16 /* This symbol is provided by the linker - let it fill in the paca 23 17 * field correctly */ ··· 59 65 * processors. The processor VPD array needs one entry per physical 60 66 * processor (not thread). 61 67 */ 62 - #define PACA_INIT(number) \ 63 - { \ 64 - .lppaca_ptr = &lppaca[number], \ 65 - .lock_token = 0x8000, \ 66 - .paca_index = (number), /* Paca Index */ \ 67 - .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ 68 - .hw_cpu_id = 0xffff, \ 69 - .slb_shadow_ptr = &slb_shadow[number], \ 70 - .__current = &init_task, \ 71 - } 72 - 73 - struct paca_struct paca[] = { 74 - PACA_INIT(0), 75 - #if NR_CPUS > 1 76 - PACA_INIT( 1), PACA_INIT( 2), PACA_INIT( 3), 77 - #if NR_CPUS > 4 78 - PACA_INIT( 4), PACA_INIT( 5), PACA_INIT( 6), PACA_INIT( 7), 79 - #if NR_CPUS > 8 80 - PACA_INIT( 8), PACA_INIT( 9), PACA_INIT( 10), PACA_INIT( 11), 81 - PACA_INIT( 12), PACA_INIT( 13), PACA_INIT( 14), PACA_INIT( 15), 82 - PACA_INIT( 16), PACA_INIT( 17), PACA_INIT( 18), PACA_INIT( 19), 83 - PACA_INIT( 20), PACA_INIT( 21), PACA_INIT( 22), PACA_INIT( 23), 84 - PACA_INIT( 24), PACA_INIT( 25), PACA_INIT( 26), PACA_INIT( 27), 85 - PACA_INIT( 28), PACA_INIT( 29), PACA_INIT( 30), PACA_INIT( 31), 86 - #if NR_CPUS > 32 87 - PACA_INIT( 32), PACA_INIT( 33), PACA_INIT( 34), PACA_INIT( 35), 88 - PACA_INIT( 36), PACA_INIT( 37), PACA_INIT( 38), PACA_INIT( 39), 89 - PACA_INIT( 40), PACA_INIT( 41), PACA_INIT( 42), PACA_INIT( 43), 90 - PACA_INIT( 44), PACA_INIT( 45), PACA_INIT( 46), PACA_INIT( 47), 91 - PACA_INIT( 48), PACA_INIT( 49), PACA_INIT( 50), PACA_INIT( 51), 92 - PACA_INIT( 52), PACA_INIT( 53), PACA_INIT( 54), PACA_INIT( 55), 93 - PACA_INIT( 56), PACA_INIT( 57), PACA_INIT( 58), PACA_INIT( 59), 94 - PACA_INIT( 60), PACA_INIT( 61), PACA_INIT( 62), PACA_INIT( 63), 95 - #if NR_CPUS > 64 96 - PACA_INIT( 64), PACA_INIT( 65), PACA_INIT( 66), PACA_INIT( 67), 97 - PACA_INIT( 68), PACA_INIT( 69), PACA_INIT( 70), PACA_INIT( 71), 98 - PACA_INIT( 72), PACA_INIT( 73), PACA_INIT( 74), PACA_INIT( 75), 99 - PACA_INIT( 76), PACA_INIT( 77), PACA_INIT( 78), PACA_INIT( 79), 100 - PACA_INIT( 80), PACA_INIT( 81), PACA_INIT( 82), PACA_INIT( 83), 101 - PACA_INIT( 84), PACA_INIT( 85), PACA_INIT( 86), PACA_INIT( 87), 102 - PACA_INIT( 88), PACA_INIT( 89), PACA_INIT( 90), PACA_INIT( 91), 103 - PACA_INIT( 92), PACA_INIT( 93), PACA_INIT( 94), PACA_INIT( 95), 104 - PACA_INIT( 96), PACA_INIT( 97), PACA_INIT( 98), PACA_INIT( 99), 105 - PACA_INIT(100), PACA_INIT(101), PACA_INIT(102), PACA_INIT(103), 106 - PACA_INIT(104), PACA_INIT(105), PACA_INIT(106), PACA_INIT(107), 107 - PACA_INIT(108), PACA_INIT(109), PACA_INIT(110), PACA_INIT(111), 108 - PACA_INIT(112), PACA_INIT(113), PACA_INIT(114), PACA_INIT(115), 109 - PACA_INIT(116), PACA_INIT(117), PACA_INIT(118), PACA_INIT(119), 110 - PACA_INIT(120), PACA_INIT(121), PACA_INIT(122), PACA_INIT(123), 111 - PACA_INIT(124), PACA_INIT(125), PACA_INIT(126), PACA_INIT(127), 112 - #endif 113 - #endif 114 - #endif 115 - #endif 116 - #endif 117 - }; 68 + struct paca_struct paca[NR_CPUS]; 118 69 EXPORT_SYMBOL(paca); 70 + 71 + void __init initialise_pacas(void) 72 + { 73 + int cpu; 74 + 75 + /* The TOC register (GPR2) points 32kB into the TOC, so that 64kB 76 + * of the TOC can be addressed using a single machine instruction. 77 + */ 78 + unsigned long kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL; 79 + 80 + /* Can't use for_each_*_cpu, as they aren't functional yet */ 81 + for (cpu = 0; cpu < NR_CPUS; cpu++) { 82 + struct paca_struct *new_paca = &paca[cpu]; 83 + 84 + new_paca->lppaca_ptr = &lppaca[cpu]; 85 + new_paca->lock_token = 0x8000; 86 + new_paca->paca_index = cpu; 87 + new_paca->kernel_toc = kernel_toc; 88 + new_paca->hw_cpu_id = 0xffff; 89 + new_paca->slb_shadow_ptr = &slb_shadow[cpu]; 90 + new_paca->__current = &init_task; 91 + 92 + } 93 + }
-2
arch/powerpc/kernel/ppc32.h
··· 135 135 struct mcontext32 uc_mcontext; 136 136 }; 137 137 138 - extern int copy_siginfo_to_user32(struct compat_siginfo __user *d, siginfo_t *s); 139 - 140 138 #endif /* _PPC64_PPC32_H */
+31
arch/powerpc/kernel/process.c
··· 1033 1033 } 1034 1034 } 1035 1035 #endif 1036 + 1037 + #if THREAD_SHIFT < PAGE_SHIFT 1038 + 1039 + static struct kmem_cache *thread_info_cache; 1040 + 1041 + struct thread_info *alloc_thread_info(struct task_struct *tsk) 1042 + { 1043 + struct thread_info *ti; 1044 + 1045 + ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); 1046 + if (unlikely(ti == NULL)) 1047 + return NULL; 1048 + #ifdef CONFIG_DEBUG_STACK_USAGE 1049 + memset(ti, 0, THREAD_SIZE); 1050 + #endif 1051 + return ti; 1052 + } 1053 + 1054 + void free_thread_info(struct thread_info *ti) 1055 + { 1056 + kmem_cache_free(thread_info_cache, ti); 1057 + } 1058 + 1059 + void thread_info_cache_init(void) 1060 + { 1061 + thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, 1062 + THREAD_SIZE, 0, NULL); 1063 + BUG_ON(thread_info_cache == NULL); 1064 + } 1065 + 1066 + #endif /* THREAD_SHIFT < PAGE_SHIFT */
+4
arch/powerpc/kernel/prom.c
··· 53 53 #include <asm/pci-bridge.h> 54 54 #include <asm/phyp_dump.h> 55 55 #include <asm/kexec.h> 56 + #include <mm/mmu_decl.h> 56 57 57 58 #ifdef DEBUG 58 59 #define DBG(fmt...) printk(KERN_ERR fmt) ··· 979 978 } 980 979 #endif 981 980 lmb_add(base, size); 981 + 982 + memstart_addr = min((u64)memstart_addr, base); 982 983 } 984 + 983 985 return 0; 984 986 } 985 987
+58
arch/powerpc/kernel/prom_init_check.sh
··· 1 + #!/bin/sh 2 + # 3 + # Copyright © 2008 IBM Corporation 4 + # 5 + # This program is free software; you can redistribute it and/or 6 + # modify it under the terms of the GNU General Public License 7 + # as published by the Free Software Foundation; either version 8 + # 2 of the License, or (at your option) any later version. 9 + 10 + # This script checks prom_init.o to see what external symbols it 11 + # is using, if it finds symbols not in the whitelist it returns 12 + # an error. The point of this is to discourage people from 13 + # intentionally or accidentally adding new code to prom_init.c 14 + # which has side effects on other parts of the kernel. 15 + 16 + # If you really need to reference something from prom_init.o add 17 + # it to the list below: 18 + 19 + WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush 20 + _end enter_prom memcpy memset reloc_offset __secondary_hold 21 + __secondary_hold_acknowledge __secondary_hold_spinloop __start 22 + strcmp strcpy strlcpy strlen strncmp strstr logo_linux_clut224 23 + reloc_got2" 24 + 25 + NM="$1" 26 + OBJ="$2" 27 + 28 + ERROR=0 29 + 30 + for UNDEF in $($NM -u $OBJ | awk '{print $2}') 31 + do 32 + # On 64-bit nm gives us the function descriptors, which have 33 + # a leading . on the name, so strip it off here. 34 + UNDEF="${UNDEF#.}" 35 + 36 + if [ $KBUILD_VERBOSE ]; then 37 + if [ $KBUILD_VERBOSE -ne 0 ]; then 38 + echo "Checking prom_init.o symbol '$UNDEF'" 39 + fi 40 + fi 41 + 42 + OK=0 43 + for WHITE in $WHITELIST 44 + do 45 + if [ "$UNDEF" = "$WHITE" ]; then 46 + OK=1 47 + break 48 + fi 49 + done 50 + 51 + if [ $OK -eq 0 ]; then 52 + ERROR=1 53 + echo "Error: External symbol '$UNDEF' referenced" \ 54 + "from prom_init.c" >&2 55 + fi 56 + done 57 + 58 + exit $ERROR
-27
arch/powerpc/kernel/ptrace32.c
··· 29 29 #include <linux/security.h> 30 30 #include <linux/signal.h> 31 31 #include <linux/compat.h> 32 - #include <linux/elf.h> 33 32 34 33 #include <asm/uaccess.h> 35 34 #include <asm/page.h> 36 35 #include <asm/pgtable.h> 37 36 #include <asm/system.h> 38 - 39 - #include "ppc32.h" 40 37 41 38 /* 42 39 * does not yet catch signals sent when the child dies. ··· 62 65 } 63 66 64 67 return -EPERM; 65 - } 66 - 67 - static int compat_ptrace_getsiginfo(struct task_struct *child, compat_siginfo_t __user *data) 68 - { 69 - siginfo_t lastinfo; 70 - int error = -ESRCH; 71 - 72 - read_lock(&tasklist_lock); 73 - if (likely(child->sighand != NULL)) { 74 - error = -EINVAL; 75 - spin_lock_irq(&child->sighand->siglock); 76 - if (likely(child->last_siginfo != NULL)) { 77 - lastinfo = *child->last_siginfo; 78 - error = 0; 79 - } 80 - spin_unlock_irq(&child->sighand->siglock); 81 - } 82 - read_unlock(&tasklist_lock); 83 - if (!error) 84 - return copy_siginfo_to_user32(data, &lastinfo); 85 - return error; 86 68 } 87 69 88 70 long compat_arch_ptrace(struct task_struct *child, compat_long_t request, ··· 281 305 child, task_user_regset_view(current), 0, 282 306 0, PT_REGS_COUNT * sizeof(compat_long_t), 283 307 compat_ptr(data)); 284 - 285 - case PTRACE_GETSIGINFO: 286 - return compat_ptrace_getsiginfo(child, compat_ptr(data)); 287 308 288 309 case PTRACE_GETFPREGS: 289 310 case PTRACE_SETFPREGS:
+4 -1
arch/powerpc/kernel/setup_64.c
··· 170 170 171 171 void __init early_setup(unsigned long dt_ptr) 172 172 { 173 + /* Fill in any unititialised pacas */ 174 + initialise_pacas(); 175 + 173 176 /* Identify CPU type */ 174 177 identify_cpu(0, mfspr(SPRN_PVR)); 175 178 ··· 438 435 printk("htab_address = 0x%p\n", htab_address); 439 436 printk("htab_hash_mask = 0x%lx\n", htab_hash_mask); 440 437 #if PHYSICAL_START > 0 441 - printk("physical_start = 0x%x\n", PHYSICAL_START); 438 + printk("physical_start = 0x%lx\n", PHYSICAL_START); 442 439 #endif 443 440 printk("-----------------------------------------------------\n"); 444 441
-1
arch/powerpc/kernel/stacktrace.c
··· 13 13 #include <linux/sched.h> 14 14 #include <linux/stacktrace.h> 15 15 #include <asm/ptrace.h> 16 - #include <asm/asm-offsets.h> 17 16 18 17 /* 19 18 * Save stack-backtrace addresses into a stack_trace buffer.
+2 -2
arch/powerpc/kernel/udbg.c
··· 154 154 static struct console udbg_console = { 155 155 .name = "udbg", 156 156 .write = udbg_console_write, 157 - .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT, 158 - .index = -1, 157 + .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT | CON_ANYTIME, 158 + .index = 0, 159 159 }; 160 160 161 161 static int early_console_initialized;
+1 -1
arch/powerpc/mm/fsl_booke_mmu.c
··· 202 202 cam_max_size = max_lowmem_size; 203 203 204 204 /* adjust lowmem size to max_lowmem_size */ 205 - ram = min(max_lowmem_size, total_lowmem); 205 + ram = min(max_lowmem_size, (phys_addr_t)total_lowmem); 206 206 207 207 /* Calculate CAM values */ 208 208 __cam0 = 1UL << 2 * (__ilog2(ram) / 2);
+2 -2
arch/powerpc/mm/hash_low_32.S
··· 191 191 add r3,r3,r0 /* note create_hpte trims to 24 bits */ 192 192 193 193 #ifdef CONFIG_SMP 194 - rlwinm r8,r1,0,0,18 /* use cpu number to make tag */ 194 + rlwinm r8,r1,0,0,(31-THREAD_SHIFT) /* use cpu number to make tag */ 195 195 lwz r8,TI_CPU(r8) /* to go in mmu_hash_lock */ 196 196 oris r8,r8,12 197 197 #endif /* CONFIG_SMP */ ··· 526 526 #ifdef CONFIG_SMP 527 527 addis r9,r7,mmu_hash_lock@ha 528 528 addi r9,r9,mmu_hash_lock@l 529 - rlwinm r8,r1,0,0,18 529 + rlwinm r8,r1,0,0,(31-THREAD_SHIFT) 530 530 add r8,r8,r7 531 531 lwz r8,TI_CPU(r8) 532 532 oris r8,r8,9
+4 -9
arch/powerpc/mm/init_32.c
··· 59 59 unsigned long total_memory; 60 60 unsigned long total_lowmem; 61 61 62 - phys_addr_t memstart_addr; 62 + phys_addr_t memstart_addr = (phys_addr_t)~0ull; 63 + EXPORT_SYMBOL(memstart_addr); 64 + phys_addr_t kernstart_addr; 65 + EXPORT_SYMBOL(kernstart_addr); 63 66 phys_addr_t lowmem_end_addr; 64 67 65 68 int boot_mapsize; 66 69 #ifdef CONFIG_PPC_PMAC 67 70 unsigned long agp_special_page; 68 71 EXPORT_SYMBOL(agp_special_page); 69 - #endif 70 - 71 - #ifdef CONFIG_HIGHMEM 72 - pte_t *kmap_pte; 73 - pgprot_t kmap_prot; 74 - 75 - EXPORT_SYMBOL(kmap_prot); 76 - EXPORT_SYMBOL(kmap_pte); 77 72 #endif 78 73 79 74 void MMU_init(void);
+2 -1
arch/powerpc/mm/init_64.c
··· 72 72 #warning TASK_SIZE is smaller than it needs to be. 73 73 #endif 74 74 75 - phys_addr_t memstart_addr; 75 + phys_addr_t memstart_addr = ~0; 76 + phys_addr_t kernstart_addr; 76 77 77 78 void free_initmem(void) 78 79 {
+29 -8
arch/powerpc/mm/mem.c
··· 45 45 #include <asm/tlb.h> 46 46 #include <asm/sections.h> 47 47 #include <asm/vdso.h> 48 + #include <asm/fixmap.h> 48 49 49 50 #include "mmu_decl.h" 50 51 ··· 57 56 int init_bootmem_done; 58 57 int mem_init_done; 59 58 unsigned long memory_limit; 59 + 60 + #ifdef CONFIG_HIGHMEM 61 + pte_t *kmap_pte; 62 + pgprot_t kmap_prot; 63 + 64 + EXPORT_SYMBOL(kmap_prot); 65 + EXPORT_SYMBOL(kmap_pte); 66 + 67 + static inline pte_t *virt_to_kpte(unsigned long vaddr) 68 + { 69 + return pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), 70 + vaddr), vaddr), vaddr); 71 + } 72 + #endif 60 73 61 74 int page_is_ram(unsigned long pfn) 62 75 { ··· 231 216 unsigned long total_pages; 232 217 int boot_mapsize; 233 218 234 - max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; 219 + max_low_pfn = max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; 235 220 total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT; 236 221 #ifdef CONFIG_HIGHMEM 237 222 total_pages = total_lowmem >> PAGE_SHIFT; ··· 247 232 248 233 start = lmb_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE); 249 234 250 - boot_mapsize = init_bootmem(start >> PAGE_SHIFT, total_pages); 235 + min_low_pfn = MEMORY_START >> PAGE_SHIFT; 236 + boot_mapsize = init_bootmem_node(NODE_DATA(0), start >> PAGE_SHIFT, min_low_pfn, max_low_pfn); 251 237 252 238 /* Add active regions with valid PFNs */ 253 239 for (i = 0; i < lmb.memory.cnt; i++) { ··· 326 310 unsigned long top_of_ram = lmb_end_of_DRAM(); 327 311 unsigned long max_zone_pfns[MAX_NR_ZONES]; 328 312 313 + #ifdef CONFIG_PPC32 314 + unsigned long v = __fix_to_virt(__end_of_fixed_addresses - 1); 315 + unsigned long end = __fix_to_virt(FIX_HOLE); 316 + 317 + for (; v < end; v += PAGE_SIZE) 318 + map_page(v, 0, 0); /* XXX gross */ 319 + #endif 320 + 329 321 #ifdef CONFIG_HIGHMEM 330 322 map_page(PKMAP_BASE, 0, 0); /* XXX gross */ 331 - pkmap_page_table = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k 332 - (PKMAP_BASE), PKMAP_BASE), PKMAP_BASE), PKMAP_BASE); 333 - map_page(KMAP_FIX_BEGIN, 0, 0); /* XXX gross */ 334 - kmap_pte = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k 335 - (KMAP_FIX_BEGIN), KMAP_FIX_BEGIN), KMAP_FIX_BEGIN), 336 - KMAP_FIX_BEGIN); 323 + pkmap_page_table = virt_to_kpte(PKMAP_BASE); 324 + 325 + kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN)); 337 326 kmap_prot = PAGE_KERNEL; 338 327 #endif /* CONFIG_HIGHMEM */ 339 328
+1
arch/powerpc/mm/numa.c
··· 18 18 #include <linux/cpu.h> 19 19 #include <linux/notifier.h> 20 20 #include <linux/lmb.h> 21 + #include <linux/of.h> 21 22 #include <asm/sparsemem.h> 22 23 #include <asm/prom.h> 23 24 #include <asm/system.h>
+23
arch/powerpc/mm/pgtable_32.c
··· 29 29 30 30 #include <asm/pgtable.h> 31 31 #include <asm/pgalloc.h> 32 + #include <asm/fixmap.h> 32 33 #include <asm/io.h> 33 34 34 35 #include "mmu_decl.h" ··· 388 387 change_page_attr(page, numpages, enable ? PAGE_KERNEL : __pgprot(0)); 389 388 } 390 389 #endif /* CONFIG_DEBUG_PAGEALLOC */ 390 + 391 + static int fixmaps; 392 + unsigned long FIXADDR_TOP = 0xfffff000; 393 + EXPORT_SYMBOL(FIXADDR_TOP); 394 + 395 + void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) 396 + { 397 + unsigned long address = __fix_to_virt(idx); 398 + 399 + if (idx >= __end_of_fixed_addresses) { 400 + BUG(); 401 + return; 402 + } 403 + 404 + map_page(address, phys, flags); 405 + fixmaps++; 406 + } 407 + 408 + void __this_fixmap_does_not_exist(void) 409 + { 410 + WARN_ON(1); 411 + }
-1
arch/powerpc/platforms/Kconfig
··· 45 45 source "arch/powerpc/platforms/prep/Kconfig" 46 46 source "arch/powerpc/platforms/maple/Kconfig" 47 47 source "arch/powerpc/platforms/pasemi/Kconfig" 48 - source "arch/powerpc/platforms/celleb/Kconfig" 49 48 source "arch/powerpc/platforms/ps3/Kconfig" 50 49 source "arch/powerpc/platforms/cell/Kconfig" 51 50 source "arch/powerpc/platforms/8xx/Kconfig"
+2 -2
arch/powerpc/platforms/Kconfig.cputype
··· 220 220 If you don't know what to do here, say N. 221 221 222 222 config NR_CPUS 223 - int "Maximum number of CPUs (2-128)" 224 - range 2 128 223 + int "Maximum number of CPUs (2-1024)" 224 + range 2 1024 225 225 depends on SMP 226 226 default "32" if PPC64 227 227 default "4"
-1
arch/powerpc/platforms/Makefile
··· 24 24 obj-$(CONFIG_PPC_PASEMI) += pasemi/ 25 25 obj-$(CONFIG_PPC_CELL) += cell/ 26 26 obj-$(CONFIG_PPC_PS3) += ps3/ 27 - obj-$(CONFIG_PPC_CELLEB) += celleb/ 28 27 obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/
+13
arch/powerpc/platforms/cell/Kconfig
··· 25 25 select PPC_UDBG_16550 26 26 select UDBG_RTAS_CONSOLE 27 27 28 + config PPC_CELLEB 29 + bool "Toshiba's Cell Reference Set 'Celleb' Architecture" 30 + depends on PPC_MULTIPLATFORM && PPC64 31 + select PPC_CELL 32 + select PPC_CELL_NATIVE 33 + select PPC_RTAS 34 + select PPC_INDIRECT_IO 35 + select PPC_OF_PLATFORM_PCI 36 + select HAS_TXX9_SERIAL 37 + select PPC_UDBG_BEAT 38 + select USB_OHCI_BIG_ENDIAN_MMIO 39 + select USB_EHCI_BIG_ENDIAN_MMIO 40 + 28 41 menu "Cell Broadband Engine options" 29 42 depends on PPC_CELL 30 43
+19 -1
arch/powerpc/platforms/cell/Makefile
··· 1 1 obj-$(CONFIG_PPC_CELL_NATIVE) += interrupt.o iommu.o setup.o \ 2 2 cbe_regs.o spider-pic.o \ 3 - pervasive.o pmu.o io-workarounds.o 3 + pervasive.o pmu.o io-workarounds.o \ 4 + spider-pci.o 4 5 obj-$(CONFIG_CBE_RAS) += ras.o 5 6 6 7 obj-$(CONFIG_CBE_THERM) += cbe_thermal.o ··· 27 26 spufs/ 28 27 29 28 obj-$(CONFIG_PCI_MSI) += axon_msi.o 29 + 30 + 31 + # celleb stuff 32 + ifeq ($(CONFIG_PPC_CELLEB),y) 33 + obj-y += celleb_setup.o \ 34 + celleb_pci.o celleb_scc_epci.o \ 35 + celleb_scc_pciex.o \ 36 + celleb_scc_uhc.o \ 37 + io-workarounds.o spider-pci.o \ 38 + beat.o beat_htab.o beat_hvCall.o \ 39 + beat_interrupt.o beat_iommu.o 40 + 41 + obj-$(CONFIG_SMP) += beat_smp.o 42 + obj-$(CONFIG_PPC_UDBG_BEAT) += beat_udbg.o 43 + obj-$(CONFIG_SERIAL_TXX9) += celleb_scc_sio.o 44 + obj-$(CONFIG_SPU_BASE) += beat_spu_priv1.o 45 + endif
+3 -3
arch/powerpc/platforms/cell/axon_msi.c
··· 123 123 return NULL; 124 124 } 125 125 126 - for (; dn; tmp = of_get_parent(dn), of_node_put(dn), dn = tmp) { 126 + for (; dn; dn = of_get_next_parent(dn)) { 127 127 ph = of_get_property(dn, "msi-translator", NULL); 128 128 if (ph) 129 129 break; ··· 169 169 170 170 static int setup_msi_msg_address(struct pci_dev *dev, struct msi_msg *msg) 171 171 { 172 - struct device_node *dn, *tmp; 172 + struct device_node *dn; 173 173 struct msi_desc *entry; 174 174 int len; 175 175 const u32 *prop; ··· 182 182 183 183 entry = list_first_entry(&dev->msi_list, struct msi_desc, list); 184 184 185 - for (; dn; tmp = of_get_parent(dn), of_node_put(dn), dn = tmp) { 185 + for (; dn; dn = of_get_next_parent(dn)) { 186 186 if (entry->msi_attrib.is_64) { 187 187 prop = of_get_property(dn, "msi-address-64", &len); 188 188 if (prop)
+547
arch/powerpc/platforms/cell/celleb_scc_pciex.c
··· 1 + /* 2 + * Support for Celleb PCI-Express. 3 + * 4 + * (C) Copyright 2007-2008 TOSHIBA CORPORATION 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 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + * 16 + * You should have received a copy of the GNU General Public License along 17 + * with this program; if not, write to the Free Software Foundation, Inc., 18 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 + */ 20 + 21 + #undef DEBUG 22 + 23 + #include <linux/kernel.h> 24 + #include <linux/pci.h> 25 + #include <linux/string.h> 26 + #include <linux/init.h> 27 + #include <linux/bootmem.h> 28 + #include <linux/delay.h> 29 + #include <linux/interrupt.h> 30 + 31 + #include <asm/io.h> 32 + #include <asm/irq.h> 33 + #include <asm/iommu.h> 34 + #include <asm/byteorder.h> 35 + 36 + #include "celleb_scc.h" 37 + #include "celleb_pci.h" 38 + 39 + #define PEX_IN(base, off) in_be32((void *)(base) + (off)) 40 + #define PEX_OUT(base, off, data) out_be32((void *)(base) + (off), (data)) 41 + 42 + static void scc_pciex_io_flush(struct iowa_bus *bus) 43 + { 44 + (void)PEX_IN(bus->phb->cfg_addr, PEXDMRDEN0); 45 + } 46 + 47 + /* 48 + * Memory space access to device on PCIEX 49 + */ 50 + #define PCIEX_MMIO_READ(name, ret) \ 51 + static ret scc_pciex_##name(const PCI_IO_ADDR addr) \ 52 + { \ 53 + ret val = __do_##name(addr); \ 54 + scc_pciex_io_flush(iowa_mem_find_bus(addr)); \ 55 + return val; \ 56 + } 57 + 58 + #define PCIEX_MMIO_READ_STR(name) \ 59 + static void scc_pciex_##name(const PCI_IO_ADDR addr, void *buf, \ 60 + unsigned long count) \ 61 + { \ 62 + __do_##name(addr, buf, count); \ 63 + scc_pciex_io_flush(iowa_mem_find_bus(addr)); \ 64 + } 65 + 66 + PCIEX_MMIO_READ(readb, u8) 67 + PCIEX_MMIO_READ(readw, u16) 68 + PCIEX_MMIO_READ(readl, u32) 69 + PCIEX_MMIO_READ(readq, u64) 70 + PCIEX_MMIO_READ(readw_be, u16) 71 + PCIEX_MMIO_READ(readl_be, u32) 72 + PCIEX_MMIO_READ(readq_be, u64) 73 + PCIEX_MMIO_READ_STR(readsb) 74 + PCIEX_MMIO_READ_STR(readsw) 75 + PCIEX_MMIO_READ_STR(readsl) 76 + 77 + static void scc_pciex_memcpy_fromio(void *dest, const PCI_IO_ADDR src, 78 + unsigned long n) 79 + { 80 + __do_memcpy_fromio(dest, src, n); 81 + scc_pciex_io_flush(iowa_mem_find_bus(src)); 82 + } 83 + 84 + /* 85 + * I/O port access to devices on PCIEX. 86 + */ 87 + 88 + static inline unsigned long get_bus_address(struct pci_controller *phb, 89 + unsigned long port) 90 + { 91 + return port - ((unsigned long)(phb->io_base_virt) - _IO_BASE); 92 + } 93 + 94 + static u32 scc_pciex_read_port(struct pci_controller *phb, 95 + unsigned long port, int size) 96 + { 97 + unsigned int byte_enable; 98 + unsigned int cmd, shift; 99 + unsigned long addr; 100 + u32 data, ret; 101 + 102 + BUG_ON(((port & 0x3ul) + size) > 4); 103 + 104 + addr = get_bus_address(phb, port); 105 + shift = addr & 0x3ul; 106 + byte_enable = ((1 << size) - 1) << shift; 107 + cmd = PEXDCMND_IO_READ | (byte_enable << PEXDCMND_BYTE_EN_SHIFT); 108 + PEX_OUT(phb->cfg_addr, PEXDADRS, (addr & ~0x3ul)); 109 + PEX_OUT(phb->cfg_addr, PEXDCMND, cmd); 110 + data = PEX_IN(phb->cfg_addr, PEXDRDATA); 111 + ret = (data >> (shift * 8)) & (0xFFFFFFFF >> ((4 - size) * 8)); 112 + 113 + pr_debug("PCIEX:PIO READ:port=0x%lx, addr=0x%lx, size=%d, be=%x," 114 + " cmd=%x, data=%x, ret=%x\n", port, addr, size, byte_enable, 115 + cmd, data, ret); 116 + 117 + return ret; 118 + } 119 + 120 + static void scc_pciex_write_port(struct pci_controller *phb, 121 + unsigned long port, int size, u32 val) 122 + { 123 + unsigned int byte_enable; 124 + unsigned int cmd, shift; 125 + unsigned long addr; 126 + u32 data; 127 + 128 + BUG_ON(((port & 0x3ul) + size) > 4); 129 + 130 + addr = get_bus_address(phb, port); 131 + shift = addr & 0x3ul; 132 + byte_enable = ((1 << size) - 1) << shift; 133 + cmd = PEXDCMND_IO_WRITE | (byte_enable << PEXDCMND_BYTE_EN_SHIFT); 134 + data = (val & (0xFFFFFFFF >> (4 - size) * 8)) << (shift * 8); 135 + PEX_OUT(phb->cfg_addr, PEXDADRS, (addr & ~0x3ul)); 136 + PEX_OUT(phb->cfg_addr, PEXDCMND, cmd); 137 + PEX_OUT(phb->cfg_addr, PEXDWDATA, data); 138 + 139 + pr_debug("PCIEX:PIO WRITE:port=0x%lx, addr=%lx, size=%d, val=%x," 140 + " be=%x, cmd=%x, data=%x\n", port, addr, size, val, 141 + byte_enable, cmd, data); 142 + } 143 + 144 + static u8 __scc_pciex_inb(struct pci_controller *phb, unsigned long port) 145 + { 146 + return (u8)scc_pciex_read_port(phb, port, 1); 147 + } 148 + 149 + static u16 __scc_pciex_inw(struct pci_controller *phb, unsigned long port) 150 + { 151 + u32 data; 152 + if ((port & 0x3ul) < 3) 153 + data = scc_pciex_read_port(phb, port, 2); 154 + else { 155 + u32 d1 = scc_pciex_read_port(phb, port, 1); 156 + u32 d2 = scc_pciex_read_port(phb, port + 1, 1); 157 + data = d1 | (d2 << 8); 158 + } 159 + return (u16)data; 160 + } 161 + 162 + static u32 __scc_pciex_inl(struct pci_controller *phb, unsigned long port) 163 + { 164 + unsigned int mod = port & 0x3ul; 165 + u32 data; 166 + if (mod == 0) 167 + data = scc_pciex_read_port(phb, port, 4); 168 + else { 169 + u32 d1 = scc_pciex_read_port(phb, port, 4 - mod); 170 + u32 d2 = scc_pciex_read_port(phb, port + 1, mod); 171 + data = d1 | (d2 << (mod * 8)); 172 + } 173 + return data; 174 + } 175 + 176 + static void __scc_pciex_outb(struct pci_controller *phb, 177 + u8 val, unsigned long port) 178 + { 179 + scc_pciex_write_port(phb, port, 1, (u32)val); 180 + } 181 + 182 + static void __scc_pciex_outw(struct pci_controller *phb, 183 + u16 val, unsigned long port) 184 + { 185 + if ((port & 0x3ul) < 3) 186 + scc_pciex_write_port(phb, port, 2, (u32)val); 187 + else { 188 + u32 d1 = val & 0x000000FF; 189 + u32 d2 = (val & 0x0000FF00) >> 8; 190 + scc_pciex_write_port(phb, port, 1, d1); 191 + scc_pciex_write_port(phb, port + 1, 1, d2); 192 + } 193 + } 194 + 195 + static void __scc_pciex_outl(struct pci_controller *phb, 196 + u32 val, unsigned long port) 197 + { 198 + unsigned int mod = port & 0x3ul; 199 + if (mod == 0) 200 + scc_pciex_write_port(phb, port, 4, val); 201 + else { 202 + u32 d1 = val & (0xFFFFFFFFul >> (mod * 8)); 203 + u32 d2 = val >> ((4 - mod) * 8); 204 + scc_pciex_write_port(phb, port, 4 - mod, d1); 205 + scc_pciex_write_port(phb, port + 1, mod, d2); 206 + } 207 + } 208 + 209 + #define PCIEX_PIO_FUNC(size, name) \ 210 + static u##size scc_pciex_in##name(unsigned long port) \ 211 + { \ 212 + struct iowa_bus *bus = iowa_pio_find_bus(port); \ 213 + u##size data = __scc_pciex_in##name(bus->phb, port); \ 214 + scc_pciex_io_flush(bus); \ 215 + return data; \ 216 + } \ 217 + static void scc_pciex_ins##name(unsigned long p, void *b, unsigned long c) \ 218 + { \ 219 + struct iowa_bus *bus = iowa_pio_find_bus(p); \ 220 + u##size *dst = b; \ 221 + for (; c != 0; c--, dst++) \ 222 + *dst = cpu_to_le##size(__scc_pciex_in##name(bus->phb, p)); \ 223 + scc_pciex_io_flush(bus); \ 224 + } \ 225 + static void scc_pciex_out##name(u##size val, unsigned long port) \ 226 + { \ 227 + struct iowa_bus *bus = iowa_pio_find_bus(port); \ 228 + __scc_pciex_out##name(bus->phb, val, port); \ 229 + } \ 230 + static void scc_pciex_outs##name(unsigned long p, const void *b, \ 231 + unsigned long c) \ 232 + { \ 233 + struct iowa_bus *bus = iowa_pio_find_bus(p); \ 234 + const u##size *src = b; \ 235 + for (; c != 0; c--, src++) \ 236 + __scc_pciex_out##name(bus->phb, le##size##_to_cpu(*src), p); \ 237 + } 238 + #define cpu_to_le8(x) (x) 239 + #define le8_to_cpu(x) (x) 240 + PCIEX_PIO_FUNC(8, b) 241 + PCIEX_PIO_FUNC(16, w) 242 + PCIEX_PIO_FUNC(32, l) 243 + 244 + static struct ppc_pci_io scc_pciex_ops = { 245 + .readb = scc_pciex_readb, 246 + .readw = scc_pciex_readw, 247 + .readl = scc_pciex_readl, 248 + .readq = scc_pciex_readq, 249 + .readw_be = scc_pciex_readw_be, 250 + .readl_be = scc_pciex_readl_be, 251 + .readq_be = scc_pciex_readq_be, 252 + .readsb = scc_pciex_readsb, 253 + .readsw = scc_pciex_readsw, 254 + .readsl = scc_pciex_readsl, 255 + .memcpy_fromio = scc_pciex_memcpy_fromio, 256 + .inb = scc_pciex_inb, 257 + .inw = scc_pciex_inw, 258 + .inl = scc_pciex_inl, 259 + .outb = scc_pciex_outb, 260 + .outw = scc_pciex_outw, 261 + .outl = scc_pciex_outl, 262 + .insb = scc_pciex_insb, 263 + .insw = scc_pciex_insw, 264 + .insl = scc_pciex_insl, 265 + .outsb = scc_pciex_outsb, 266 + .outsw = scc_pciex_outsw, 267 + .outsl = scc_pciex_outsl, 268 + }; 269 + 270 + static int __init scc_pciex_iowa_init(struct iowa_bus *bus, void *data) 271 + { 272 + dma_addr_t dummy_page_da; 273 + void *dummy_page_va; 274 + 275 + dummy_page_va = kmalloc(PAGE_SIZE, GFP_KERNEL); 276 + if (!dummy_page_va) { 277 + pr_err("PCIEX:Alloc dummy_page_va failed\n"); 278 + return -1; 279 + } 280 + 281 + dummy_page_da = dma_map_single(bus->phb->parent, dummy_page_va, 282 + PAGE_SIZE, DMA_FROM_DEVICE); 283 + if (dma_mapping_error(dummy_page_da)) { 284 + pr_err("PCIEX:Map dummy page failed.\n"); 285 + kfree(dummy_page_va); 286 + return -1; 287 + } 288 + 289 + PEX_OUT(bus->phb->cfg_addr, PEXDMRDADR0, dummy_page_da); 290 + 291 + return 0; 292 + } 293 + 294 + /* 295 + * config space access 296 + */ 297 + #define MK_PEXDADRS(bus_no, dev_no, func_no, addr) \ 298 + ((uint32_t)(((addr) & ~0x3UL) | \ 299 + ((bus_no) << PEXDADRS_BUSNO_SHIFT) | \ 300 + ((dev_no) << PEXDADRS_DEVNO_SHIFT) | \ 301 + ((func_no) << PEXDADRS_FUNCNO_SHIFT))) 302 + 303 + #define MK_PEXDCMND_BYTE_EN(addr, size) \ 304 + ((((0x1 << (size))-1) << ((addr) & 0x3)) << PEXDCMND_BYTE_EN_SHIFT) 305 + #define MK_PEXDCMND(cmd, addr, size) ((cmd) | MK_PEXDCMND_BYTE_EN(addr, size)) 306 + 307 + static uint32_t config_read_pciex_dev(unsigned int *base, 308 + uint64_t bus_no, uint64_t dev_no, uint64_t func_no, 309 + uint64_t off, uint64_t size) 310 + { 311 + uint32_t ret; 312 + uint32_t addr, cmd; 313 + 314 + addr = MK_PEXDADRS(bus_no, dev_no, func_no, off); 315 + cmd = MK_PEXDCMND(PEXDCMND_CONFIG_READ, off, size); 316 + PEX_OUT(base, PEXDADRS, addr); 317 + PEX_OUT(base, PEXDCMND, cmd); 318 + ret = (PEX_IN(base, PEXDRDATA) 319 + >> ((off & (4-size)) * 8)) & ((0x1 << (size * 8)) - 1); 320 + return ret; 321 + } 322 + 323 + static void config_write_pciex_dev(unsigned int *base, uint64_t bus_no, 324 + uint64_t dev_no, uint64_t func_no, uint64_t off, uint64_t size, 325 + uint32_t data) 326 + { 327 + uint32_t addr, cmd; 328 + 329 + addr = MK_PEXDADRS(bus_no, dev_no, func_no, off); 330 + cmd = MK_PEXDCMND(PEXDCMND_CONFIG_WRITE, off, size); 331 + PEX_OUT(base, PEXDADRS, addr); 332 + PEX_OUT(base, PEXDCMND, cmd); 333 + PEX_OUT(base, PEXDWDATA, 334 + (data & ((0x1 << (size * 8)) - 1)) << ((off & (4-size)) * 8)); 335 + } 336 + 337 + #define MK_PEXCADRS_BYTE_EN(off, len) \ 338 + ((((0x1 << (len)) - 1) << ((off) & 0x3)) << PEXCADRS_BYTE_EN_SHIFT) 339 + #define MK_PEXCADRS(cmd, addr, size) \ 340 + ((cmd) | MK_PEXCADRS_BYTE_EN(addr, size) | ((addr) & ~0x3)) 341 + static uint32_t config_read_pciex_rc(unsigned int *base, 342 + uint32_t where, uint32_t size) 343 + { 344 + PEX_OUT(base, PEXCADRS, MK_PEXCADRS(PEXCADRS_CMD_READ, where, size)); 345 + return (PEX_IN(base, PEXCRDATA) 346 + >> ((where & (4 - size)) * 8)) & ((0x1 << (size * 8)) - 1); 347 + } 348 + 349 + static void config_write_pciex_rc(unsigned int *base, uint32_t where, 350 + uint32_t size, uint32_t val) 351 + { 352 + uint32_t data; 353 + 354 + data = (val & ((0x1 << (size * 8)) - 1)) << ((where & (4 - size)) * 8); 355 + PEX_OUT(base, PEXCADRS, MK_PEXCADRS(PEXCADRS_CMD_WRITE, where, size)); 356 + PEX_OUT(base, PEXCWDATA, data); 357 + } 358 + 359 + /* Interfaces */ 360 + /* Note: Work-around 361 + * On SCC PCIEXC, one device is seen on all 32 dev_no. 362 + * As SCC PCIEXC can have only one device on the bus, we look only one dev_no. 363 + * (dev_no = 1) 364 + */ 365 + static int scc_pciex_read_config(struct pci_bus *bus, unsigned int devfn, 366 + int where, int size, unsigned int *val) 367 + { 368 + struct device_node *dn; 369 + struct pci_controller *phb; 370 + 371 + dn = bus->sysdata; 372 + phb = pci_find_hose_for_OF_device(dn); 373 + 374 + if (bus->number == phb->first_busno && PCI_SLOT(devfn) != 1) { 375 + *val = ~0; 376 + return PCIBIOS_DEVICE_NOT_FOUND; 377 + } 378 + 379 + if (bus->number == 0 && PCI_SLOT(devfn) == 0) 380 + *val = config_read_pciex_rc(phb->cfg_addr, where, size); 381 + else 382 + *val = config_read_pciex_dev(phb->cfg_addr, bus->number, 383 + PCI_SLOT(devfn), PCI_FUNC(devfn), where, size); 384 + 385 + return PCIBIOS_SUCCESSFUL; 386 + } 387 + 388 + static int scc_pciex_write_config(struct pci_bus *bus, unsigned int devfn, 389 + int where, int size, unsigned int val) 390 + { 391 + struct device_node *dn; 392 + struct pci_controller *phb; 393 + 394 + dn = bus->sysdata; 395 + phb = pci_find_hose_for_OF_device(dn); 396 + 397 + if (bus->number == phb->first_busno && PCI_SLOT(devfn) != 1) 398 + return PCIBIOS_DEVICE_NOT_FOUND; 399 + 400 + if (bus->number == 0 && PCI_SLOT(devfn) == 0) 401 + config_write_pciex_rc(phb->cfg_addr, where, size, val); 402 + else 403 + config_write_pciex_dev(phb->cfg_addr, bus->number, 404 + PCI_SLOT(devfn), PCI_FUNC(devfn), where, size, val); 405 + return PCIBIOS_SUCCESSFUL; 406 + } 407 + 408 + static struct pci_ops scc_pciex_pci_ops = { 409 + scc_pciex_read_config, 410 + scc_pciex_write_config, 411 + }; 412 + 413 + static void pciex_clear_intr_all(unsigned int *base) 414 + { 415 + PEX_OUT(base, PEXAERRSTS, 0xffffffff); 416 + PEX_OUT(base, PEXPRERRSTS, 0xffffffff); 417 + PEX_OUT(base, PEXINTSTS, 0xffffffff); 418 + } 419 + 420 + #if 0 421 + static void pciex_disable_intr_all(unsigned int *base) 422 + { 423 + PEX_OUT(base, PEXINTMASK, 0x0); 424 + PEX_OUT(base, PEXAERRMASK, 0x0); 425 + PEX_OUT(base, PEXPRERRMASK, 0x0); 426 + PEX_OUT(base, PEXVDMASK, 0x0); 427 + } 428 + #endif 429 + 430 + static void pciex_enable_intr_all(unsigned int *base) 431 + { 432 + PEX_OUT(base, PEXINTMASK, 0x0000e7f1); 433 + PEX_OUT(base, PEXAERRMASK, 0x03ff01ff); 434 + PEX_OUT(base, PEXPRERRMASK, 0x0001010f); 435 + PEX_OUT(base, PEXVDMASK, 0x00000001); 436 + } 437 + 438 + static void pciex_check_status(unsigned int *base) 439 + { 440 + uint32_t err = 0; 441 + uint32_t intsts, aerr, prerr, rcvcp, lenerr; 442 + uint32_t maea, maec; 443 + 444 + intsts = PEX_IN(base, PEXINTSTS); 445 + aerr = PEX_IN(base, PEXAERRSTS); 446 + prerr = PEX_IN(base, PEXPRERRSTS); 447 + rcvcp = PEX_IN(base, PEXRCVCPLIDA); 448 + lenerr = PEX_IN(base, PEXLENERRIDA); 449 + 450 + if (intsts || aerr || prerr || rcvcp || lenerr) 451 + err = 1; 452 + 453 + pr_info("PCEXC interrupt!!\n"); 454 + pr_info("PEXINTSTS :0x%08x\n", intsts); 455 + pr_info("PEXAERRSTS :0x%08x\n", aerr); 456 + pr_info("PEXPRERRSTS :0x%08x\n", prerr); 457 + pr_info("PEXRCVCPLIDA :0x%08x\n", rcvcp); 458 + pr_info("PEXLENERRIDA :0x%08x\n", lenerr); 459 + 460 + /* print detail of Protection Error */ 461 + if (intsts & 0x00004000) { 462 + uint32_t i, n; 463 + for (i = 0; i < 4; i++) { 464 + n = 1 << i; 465 + if (prerr & n) { 466 + maea = PEX_IN(base, PEXMAEA(i)); 467 + maec = PEX_IN(base, PEXMAEC(i)); 468 + pr_info("PEXMAEC%d :0x%08x\n", i, maec); 469 + pr_info("PEXMAEA%d :0x%08x\n", i, maea); 470 + } 471 + } 472 + } 473 + 474 + if (err) 475 + pciex_clear_intr_all(base); 476 + } 477 + 478 + static irqreturn_t pciex_handle_internal_irq(int irq, void *dev_id) 479 + { 480 + struct pci_controller *phb = dev_id; 481 + 482 + pr_debug("PCIEX:pciex_handle_internal_irq(irq=%d)\n", irq); 483 + 484 + BUG_ON(phb->cfg_addr == NULL); 485 + 486 + pciex_check_status(phb->cfg_addr); 487 + 488 + return IRQ_HANDLED; 489 + } 490 + 491 + static __init int celleb_setup_pciex(struct device_node *node, 492 + struct pci_controller *phb) 493 + { 494 + struct resource r; 495 + struct of_irq oirq; 496 + int virq; 497 + 498 + /* SMMIO registers; used inside this file */ 499 + if (of_address_to_resource(node, 0, &r)) { 500 + pr_err("PCIEXC:Failed to get config resource.\n"); 501 + return 1; 502 + } 503 + phb->cfg_addr = ioremap(r.start, r.end - r.start + 1); 504 + if (!phb->cfg_addr) { 505 + pr_err("PCIEXC:Failed to remap SMMIO region.\n"); 506 + return 1; 507 + } 508 + 509 + /* Not use cfg_data, cmd and data regs are near address reg */ 510 + phb->cfg_data = NULL; 511 + 512 + /* set pci_ops */ 513 + phb->ops = &scc_pciex_pci_ops; 514 + 515 + /* internal interrupt handler */ 516 + if (of_irq_map_one(node, 1, &oirq)) { 517 + pr_err("PCIEXC:Failed to map irq\n"); 518 + goto error; 519 + } 520 + virq = irq_create_of_mapping(oirq.controller, oirq.specifier, 521 + oirq.size); 522 + if (request_irq(virq, pciex_handle_internal_irq, 523 + IRQF_DISABLED, "pciex", (void *)phb)) { 524 + pr_err("PCIEXC:Failed to request irq\n"); 525 + goto error; 526 + } 527 + 528 + /* enable all interrupts */ 529 + pciex_clear_intr_all(phb->cfg_addr); 530 + pciex_enable_intr_all(phb->cfg_addr); 531 + /* MSI: TBD */ 532 + 533 + return 0; 534 + 535 + error: 536 + phb->cfg_data = NULL; 537 + if (phb->cfg_addr) 538 + iounmap(phb->cfg_addr); 539 + phb->cfg_addr = NULL; 540 + return 1; 541 + } 542 + 543 + struct celleb_phb_spec celleb_pciex_spec __initdata = { 544 + .setup = celleb_setup_pciex, 545 + .ops = &scc_pciex_ops, 546 + .iowa_init = &scc_pciex_iowa_init, 547 + };
+111 -269
arch/powerpc/platforms/cell/io-workarounds.c
··· 1 1 /* 2 + * Support PCI IO workaround 3 + * 2 4 * Copyright (C) 2006 Benjamin Herrenschmidt <benh@kernel.crashing.org> 3 5 * IBM, Corp. 6 + * (C) Copyright 2007-2008 TOSHIBA CORPORATION 4 7 * 5 8 * This program is free software; you can redistribute it and/or modify 6 9 * it under the terms of the GNU General Public License version 2 as ··· 12 9 #undef DEBUG 13 10 14 11 #include <linux/kernel.h> 15 - #include <linux/mm.h> 16 - #include <linux/pci.h> 12 + 17 13 #include <asm/io.h> 18 14 #include <asm/machdep.h> 19 - #include <asm/pci-bridge.h> 15 + #include <asm/pgtable.h> 20 16 #include <asm/ppc-pci.h> 21 17 18 + #include "io-workarounds.h" 22 19 23 - #define SPIDER_PCI_REG_BASE 0xd000 24 - #define SPIDER_PCI_VCI_CNTL_STAT 0x0110 25 - #define SPIDER_PCI_DUMMY_READ 0x0810 26 - #define SPIDER_PCI_DUMMY_READ_BASE 0x0814 20 + #define IOWA_MAX_BUS 8 27 21 28 - /* Undefine that to re-enable bogus prefetch 29 - * 30 - * Without that workaround, the chip will do bogus prefetch past 31 - * page boundary from system memory. This setting will disable that, 32 - * though the documentation is unclear as to the consequences of doing 33 - * so, either purely performances, or possible misbehaviour... It's not 34 - * clear wether the chip can handle unaligned accesses at all without 35 - * prefetching enabled. 36 - * 37 - * For now, things appear to be behaving properly with that prefetching 38 - * disabled and IDE, possibly because IDE isn't doing any unaligned 39 - * access. 40 - */ 41 - #define SPIDER_DISABLE_PREFETCH 22 + static struct iowa_bus iowa_busses[IOWA_MAX_BUS]; 23 + static unsigned int iowa_bus_count; 42 24 43 - #define MAX_SPIDERS 3 44 - 45 - static struct spider_pci_bus { 46 - void __iomem *regs; 47 - unsigned long mmio_start; 48 - unsigned long mmio_end; 49 - unsigned long pio_vstart; 50 - unsigned long pio_vend; 51 - } spider_pci_busses[MAX_SPIDERS]; 52 - static int spider_pci_count; 53 - 54 - static struct spider_pci_bus *spider_pci_find(unsigned long vaddr, 55 - unsigned long paddr) 25 + static struct iowa_bus *iowa_pci_find(unsigned long vaddr, unsigned long paddr) 56 26 { 57 - int i; 27 + int i, j; 28 + struct resource *res; 29 + unsigned long vstart, vend; 58 30 59 - for (i = 0; i < spider_pci_count; i++) { 60 - struct spider_pci_bus *bus = &spider_pci_busses[i]; 61 - if (paddr && paddr >= bus->mmio_start && paddr < bus->mmio_end) 62 - return bus; 63 - if (vaddr && vaddr >= bus->pio_vstart && vaddr < bus->pio_vend) 64 - return bus; 31 + for (i = 0; i < iowa_bus_count; i++) { 32 + struct iowa_bus *bus = &iowa_busses[i]; 33 + struct pci_controller *phb = bus->phb; 34 + 35 + if (vaddr) { 36 + vstart = (unsigned long)phb->io_base_virt; 37 + vend = vstart + phb->pci_io_size - 1; 38 + if ((vaddr >= vstart) && (vaddr <= vend)) 39 + return bus; 40 + } 41 + 42 + if (paddr) 43 + for (j = 0; j < 3; j++) { 44 + res = &phb->mem_resources[j]; 45 + if (paddr >= res->start && paddr <= res->end) 46 + return bus; 47 + } 65 48 } 49 + 66 50 return NULL; 67 51 } 68 52 69 - static void spider_io_flush(const volatile void __iomem *addr) 53 + struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR addr) 70 54 { 71 - struct spider_pci_bus *bus; 55 + struct iowa_bus *bus; 72 56 int token; 73 57 74 - /* Get platform token (set by ioremap) from address */ 75 58 token = PCI_GET_ADDR_TOKEN(addr); 76 59 77 - /* Fast path if we have a non-0 token, it indicates which bus we 78 - * are on. 79 - * 80 - * If the token is 0, that means either that the ioremap was done 81 - * before we initialized this layer, or it's a PIO operation. We 82 - * fallback to a low path in this case. Hopefully, internal devices 83 - * which are ioremap'ed early should use in_XX/out_XX functions 84 - * instead of the PCI ones and thus not suffer from the slowdown. 85 - * 86 - * Also note that currently, the workaround will not work for areas 87 - * that are not mapped with PTEs (bolted in the hash table). This 88 - * is the case for ioremaps done very early at boot (before 89 - * mem_init_done) and includes the mapping of the ISA IO space. 90 - * 91 - * Fortunately, none of the affected devices is expected to do DMA 92 - * and thus there should be no problem in practice. 93 - * 94 - * In order to improve performances, we only do the PTE search for 95 - * addresses falling in the PHB IO space area. That means it will 96 - * not work for hotplug'ed PHBs but those don't exist with Spider. 97 - */ 98 - if (token && token <= spider_pci_count) 99 - bus = &spider_pci_busses[token - 1]; 60 + if (token && token <= iowa_bus_count) 61 + bus = &iowa_busses[token - 1]; 100 62 else { 101 63 unsigned long vaddr, paddr; 102 64 pte_t *ptep; 103 65 104 - /* Fixup physical address */ 105 66 vaddr = (unsigned long)PCI_FIX_ADDR(addr); 67 + if (vaddr < PHB_IO_BASE || vaddr >= PHB_IO_END) 68 + return NULL; 106 69 107 - /* Check if it's in allowed range for PIO */ 108 - if (vaddr < PHB_IO_BASE || vaddr > PHB_IO_END) 109 - return; 110 - 111 - /* Try to find a PTE. If not, clear the paddr, we'll do 112 - * a vaddr only lookup (PIO only) 113 - */ 114 70 ptep = find_linux_pte(init_mm.pgd, vaddr); 115 71 if (ptep == NULL) 116 72 paddr = 0; 117 73 else 118 74 paddr = pte_pfn(*ptep) << PAGE_SHIFT; 75 + bus = iowa_pci_find(vaddr, paddr); 119 76 120 - bus = spider_pci_find(vaddr, paddr); 121 77 if (bus == NULL) 122 - return; 78 + return NULL; 123 79 } 124 80 125 - /* Now do the workaround 126 - */ 127 - (void)in_be32(bus->regs + SPIDER_PCI_DUMMY_READ); 81 + return bus; 128 82 } 129 83 130 - static u8 spider_readb(const volatile void __iomem *addr) 84 + struct iowa_bus *iowa_pio_find_bus(unsigned long port) 131 85 { 132 - u8 val = __do_readb(addr); 133 - spider_io_flush(addr); 134 - return val; 135 - } 136 - 137 - static u16 spider_readw(const volatile void __iomem *addr) 138 - { 139 - u16 val = __do_readw(addr); 140 - spider_io_flush(addr); 141 - return val; 142 - } 143 - 144 - static u32 spider_readl(const volatile void __iomem *addr) 145 - { 146 - u32 val = __do_readl(addr); 147 - spider_io_flush(addr); 148 - return val; 149 - } 150 - 151 - static u64 spider_readq(const volatile void __iomem *addr) 152 - { 153 - u64 val = __do_readq(addr); 154 - spider_io_flush(addr); 155 - return val; 156 - } 157 - 158 - static u16 spider_readw_be(const volatile void __iomem *addr) 159 - { 160 - u16 val = __do_readw_be(addr); 161 - spider_io_flush(addr); 162 - return val; 163 - } 164 - 165 - static u32 spider_readl_be(const volatile void __iomem *addr) 166 - { 167 - u32 val = __do_readl_be(addr); 168 - spider_io_flush(addr); 169 - return val; 170 - } 171 - 172 - static u64 spider_readq_be(const volatile void __iomem *addr) 173 - { 174 - u64 val = __do_readq_be(addr); 175 - spider_io_flush(addr); 176 - return val; 177 - } 178 - 179 - static void spider_readsb(const volatile void __iomem *addr, void *buf, 180 - unsigned long count) 181 - { 182 - __do_readsb(addr, buf, count); 183 - spider_io_flush(addr); 184 - } 185 - 186 - static void spider_readsw(const volatile void __iomem *addr, void *buf, 187 - unsigned long count) 188 - { 189 - __do_readsw(addr, buf, count); 190 - spider_io_flush(addr); 191 - } 192 - 193 - static void spider_readsl(const volatile void __iomem *addr, void *buf, 194 - unsigned long count) 195 - { 196 - __do_readsl(addr, buf, count); 197 - spider_io_flush(addr); 198 - } 199 - 200 - static void spider_memcpy_fromio(void *dest, const volatile void __iomem *src, 201 - unsigned long n) 202 - { 203 - __do_memcpy_fromio(dest, src, n); 204 - spider_io_flush(src); 86 + unsigned long vaddr = (unsigned long)pci_io_base + port; 87 + return iowa_pci_find(vaddr, 0); 205 88 } 206 89 207 90 208 - static void __iomem * spider_ioremap(unsigned long addr, unsigned long size, 209 - unsigned long flags) 91 + #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ 92 + static ret iowa_##name at \ 93 + { \ 94 + struct iowa_bus *bus; \ 95 + bus = iowa_##space##_find_bus(aa); \ 96 + if (bus && bus->ops && bus->ops->name) \ 97 + return bus->ops->name al; \ 98 + return __do_##name al; \ 99 + } 100 + 101 + #define DEF_PCI_AC_NORET(name, at, al, space, aa) \ 102 + static void iowa_##name at \ 103 + { \ 104 + struct iowa_bus *bus; \ 105 + bus = iowa_##space##_find_bus(aa); \ 106 + if (bus && bus->ops && bus->ops->name) { \ 107 + bus->ops->name al; \ 108 + return; \ 109 + } \ 110 + __do_##name al; \ 111 + } 112 + 113 + #include <asm/io-defs.h> 114 + 115 + #undef DEF_PCI_AC_RET 116 + #undef DEF_PCI_AC_NORET 117 + 118 + static struct ppc_pci_io __initdata iowa_pci_io = { 119 + 120 + #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) .name = iowa_##name, 121 + #define DEF_PCI_AC_NORET(name, at, al, space, aa) .name = iowa_##name, 122 + 123 + #include <asm/io-defs.h> 124 + 125 + #undef DEF_PCI_AC_RET 126 + #undef DEF_PCI_AC_NORET 127 + 128 + }; 129 + 130 + static void __iomem *iowa_ioremap(unsigned long addr, unsigned long size, 131 + unsigned long flags) 210 132 { 211 - struct spider_pci_bus *bus; 133 + struct iowa_bus *bus; 212 134 void __iomem *res = __ioremap(addr, size, flags); 213 135 int busno; 214 136 215 - pr_debug("spider_ioremap(0x%lx, 0x%lx, 0x%lx) -> 0x%p\n", 216 - addr, size, flags, res); 217 - 218 - bus = spider_pci_find(0, addr); 137 + bus = iowa_pci_find(0, addr); 219 138 if (bus != NULL) { 220 - busno = bus - spider_pci_busses; 221 - pr_debug(" found bus %d, setting token\n", busno); 139 + busno = bus - iowa_busses; 222 140 PCI_SET_ADDR_TOKEN(res, busno + 1); 223 141 } 224 - pr_debug(" result=0x%p\n", res); 225 - 226 142 return res; 227 143 } 228 144 229 - static void __init spider_pci_setup_chip(struct spider_pci_bus *bus) 145 + /* Regist new bus to support workaround */ 146 + void __init iowa_register_bus(struct pci_controller *phb, 147 + struct ppc_pci_io *ops, 148 + int (*initfunc)(struct iowa_bus *, void *), void *data) 230 149 { 231 - #ifdef SPIDER_DISABLE_PREFETCH 232 - u32 val = in_be32(bus->regs + SPIDER_PCI_VCI_CNTL_STAT); 233 - pr_debug(" PVCI_Control_Status was 0x%08x\n", val); 234 - out_be32(bus->regs + SPIDER_PCI_VCI_CNTL_STAT, val | 0x8); 235 - #endif 236 - 237 - /* Configure the dummy address for the workaround */ 238 - out_be32(bus->regs + SPIDER_PCI_DUMMY_READ_BASE, 0x80000000); 239 - } 240 - 241 - static void __init spider_pci_add_one(struct pci_controller *phb) 242 - { 243 - struct spider_pci_bus *bus = &spider_pci_busses[spider_pci_count]; 150 + struct iowa_bus *bus; 244 151 struct device_node *np = phb->dn; 245 - struct resource rsrc; 246 - void __iomem *regs; 247 152 248 - if (spider_pci_count >= MAX_SPIDERS) { 249 - printk(KERN_ERR "Too many spider bridges, workarounds" 250 - " disabled for %s\n", np->full_name); 153 + if (iowa_bus_count >= IOWA_MAX_BUS) { 154 + pr_err("IOWA:Too many pci bridges, " 155 + "workarounds disabled for %s\n", np->full_name); 251 156 return; 252 157 } 253 158 254 - /* Get the registers for the beast */ 255 - if (of_address_to_resource(np, 0, &rsrc)) { 256 - printk(KERN_ERR "Failed to get registers for spider %s" 257 - " workarounds disabled\n", np->full_name); 258 - return; 259 - } 159 + bus = &iowa_busses[iowa_bus_count]; 160 + bus->phb = phb; 161 + bus->ops = ops; 260 162 261 - /* Mask out some useless bits in there to get to the base of the 262 - * spider chip 263 - */ 264 - rsrc.start &= ~0xfffffffful; 163 + if (initfunc) 164 + if ((*initfunc)(bus, data)) 165 + return; 265 166 266 - /* Map them */ 267 - regs = ioremap(rsrc.start + SPIDER_PCI_REG_BASE, 0x1000); 268 - if (regs == NULL) { 269 - printk(KERN_ERR "Failed to map registers for spider %s" 270 - " workarounds disabled\n", np->full_name); 271 - return; 272 - } 167 + iowa_bus_count++; 273 168 274 - spider_pci_count++; 275 - 276 - /* We assume spiders only have one MMIO resource */ 277 - bus->mmio_start = phb->mem_resources[0].start; 278 - bus->mmio_end = phb->mem_resources[0].end + 1; 279 - 280 - bus->pio_vstart = (unsigned long)phb->io_base_virt; 281 - bus->pio_vend = bus->pio_vstart + phb->pci_io_size; 282 - 283 - bus->regs = regs; 284 - 285 - printk(KERN_INFO "PCI: Spider MMIO workaround for %s\n",np->full_name); 286 - 287 - pr_debug(" mmio (P) = 0x%016lx..0x%016lx\n", 288 - bus->mmio_start, bus->mmio_end); 289 - pr_debug(" pio (V) = 0x%016lx..0x%016lx\n", 290 - bus->pio_vstart, bus->pio_vend); 291 - pr_debug(" regs (P) = 0x%016lx (V) = 0x%p\n", 292 - rsrc.start + SPIDER_PCI_REG_BASE, bus->regs); 293 - 294 - spider_pci_setup_chip(bus); 169 + pr_debug("IOWA:[%d]Add bus, %s.\n", iowa_bus_count-1, np->full_name); 295 170 } 296 171 297 - static struct ppc_pci_io __initdata spider_pci_io = { 298 - .readb = spider_readb, 299 - .readw = spider_readw, 300 - .readl = spider_readl, 301 - .readq = spider_readq, 302 - .readw_be = spider_readw_be, 303 - .readl_be = spider_readl_be, 304 - .readq_be = spider_readq_be, 305 - .readsb = spider_readsb, 306 - .readsw = spider_readsw, 307 - .readsl = spider_readsl, 308 - .memcpy_fromio = spider_memcpy_fromio, 309 - }; 310 - 311 - static int __init spider_pci_workaround_init(void) 172 + /* enable IO workaround */ 173 + void __init io_workaround_init(void) 312 174 { 313 - struct pci_controller *phb; 175 + static int io_workaround_inited; 314 176 315 - /* Find spider bridges. We assume they have been all probed 316 - * in setup_arch(). If that was to change, we would need to 317 - * update this code to cope with dynamically added busses 318 - */ 319 - list_for_each_entry(phb, &hose_list, list_node) { 320 - struct device_node *np = phb->dn; 321 - const char *model = of_get_property(np, "model", NULL); 322 - 323 - /* If no model property or name isn't exactly "pci", skip */ 324 - if (model == NULL || strcmp(np->name, "pci")) 325 - continue; 326 - /* If model is not "Spider", skip */ 327 - if (strcmp(model, "Spider")) 328 - continue; 329 - spider_pci_add_one(phb); 330 - } 331 - 332 - /* No Spider PCI found, exit */ 333 - if (spider_pci_count == 0) 334 - return 0; 335 - 336 - /* Setup IO callbacks. We only setup MMIO reads. PIO reads will 337 - * fallback to MMIO reads (though without a token, thus slower) 338 - */ 339 - ppc_pci_io = spider_pci_io; 340 - 341 - /* Setup ioremap callback */ 342 - ppc_md.ioremap = spider_ioremap; 343 - 344 - return 0; 177 + if (io_workaround_inited) 178 + return; 179 + ppc_pci_io = iowa_pci_io; 180 + ppc_md.ioremap = iowa_ioremap; 181 + io_workaround_inited = 1; 345 182 } 346 - machine_arch_initcall(cell, spider_pci_workaround_init);
+49
arch/powerpc/platforms/cell/io-workarounds.h
··· 1 + /* 2 + * Support PCI IO workaround 3 + * 4 + * (C) Copyright 2007-2008 TOSHIBA CORPORATION 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 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + * 16 + * You should have received a copy of the GNU General Public License along 17 + * with this program; if not, write to the Free Software Foundation, Inc., 18 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 + */ 20 + 21 + #ifndef _IO_WORKAROUNDS_H 22 + #define _IO_WORKAROUNDS_H 23 + 24 + #include <linux/io.h> 25 + #include <asm/pci-bridge.h> 26 + 27 + /* Bus info */ 28 + struct iowa_bus { 29 + struct pci_controller *phb; 30 + struct ppc_pci_io *ops; 31 + void *private; 32 + }; 33 + 34 + void __init io_workaround_init(void); 35 + void __init iowa_register_bus(struct pci_controller *, struct ppc_pci_io *, 36 + int (*)(struct iowa_bus *, void *), void *); 37 + struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR); 38 + struct iowa_bus *iowa_pio_find_bus(unsigned long); 39 + 40 + extern struct ppc_pci_io spiderpci_ops; 41 + extern int spiderpci_iowa_init(struct iowa_bus *, void *); 42 + 43 + #define SPIDER_PCI_REG_BASE 0xd000 44 + #define SPIDER_PCI_REG_SIZE 0x1000 45 + #define SPIDER_PCI_VCI_CNTL_STAT 0x0110 46 + #define SPIDER_PCI_DUMMY_READ 0x0810 47 + #define SPIDER_PCI_DUMMY_READ_BASE 0x0814 48 + 49 + #endif /* _IO_WORKAROUNDS_H */
+41 -2
arch/powerpc/platforms/cell/setup.c
··· 57 57 #include "interrupt.h" 58 58 #include "pervasive.h" 59 59 #include "ras.h" 60 + #include "io-workarounds.h" 60 61 61 62 #ifdef DEBUG 62 63 #define DBG(fmt...) udbg_printf(fmt) ··· 118 117 } 119 118 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, cell_fixup_pcie_rootcomplex); 120 119 120 + static int __devinit cell_setup_phb(struct pci_controller *phb) 121 + { 122 + const char *model; 123 + struct device_node *np; 124 + 125 + int rc = rtas_setup_phb(phb); 126 + if (rc) 127 + return rc; 128 + 129 + np = phb->dn; 130 + model = of_get_property(np, "model", NULL); 131 + if (model == NULL || strcmp(np->name, "pci")) 132 + return 0; 133 + 134 + /* Setup workarounds for spider */ 135 + if (strcmp(model, "Spider")) 136 + return 0; 137 + 138 + iowa_register_bus(phb, &spiderpci_ops, &spiderpci_iowa_init, 139 + (void *)SPIDER_PCI_REG_BASE); 140 + io_workaround_init(); 141 + 142 + return 0; 143 + } 144 + 121 145 static int __init cell_publish_devices(void) 122 146 { 147 + struct device_node *root = of_find_node_by_path("/"); 148 + struct device_node *np; 123 149 int node; 124 150 125 151 /* Publish OF platform devices for southbridge IOs */ 126 152 of_platform_bus_probe(NULL, NULL, NULL); 153 + 154 + /* On spider based blades, we need to manually create the OF 155 + * platform devices for the PCI host bridges 156 + */ 157 + for_each_child_of_node(root, np) { 158 + if (np->type == NULL || (strcmp(np->type, "pci") != 0 && 159 + strcmp(np->type, "pciex") != 0)) 160 + continue; 161 + of_platform_device_create(np, NULL, NULL); 162 + } 127 163 128 164 /* There is no device for the MIC memory controller, thus we create 129 165 * a platform device for it to attach the EDAC driver to. ··· 170 132 continue; 171 133 platform_device_register_simple("cbe-mic", node, NULL, 0); 172 134 } 135 + 173 136 return 0; 174 137 } 175 138 machine_subsys_initcall(cell, cell_publish_devices); ··· 252 213 253 214 /* Find and initialize PCI host bridges */ 254 215 init_pci_config_tokens(); 255 - find_and_init_phbs(); 216 + 256 217 cbe_pervasive_init(); 257 218 #ifdef CONFIG_DUMMY_CONSOLE 258 219 conswitchp = &dummy_con; ··· 288 249 .calibrate_decr = generic_calibrate_decr, 289 250 .progress = cell_progress, 290 251 .init_IRQ = cell_init_irq, 291 - .pci_setup_phb = rtas_setup_phb, 252 + .pci_setup_phb = cell_setup_phb, 292 253 #ifdef CONFIG_KEXEC 293 254 .machine_kexec = default_machine_kexec, 294 255 .machine_kexec_prepare = default_machine_kexec_prepare,
+184
arch/powerpc/platforms/cell/spider-pci.c
··· 1 + /* 2 + * IO workarounds for PCI on Celleb/Cell platform 3 + * 4 + * (C) Copyright 2006-2007 TOSHIBA CORPORATION 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 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + * 16 + * You should have received a copy of the GNU General Public License along 17 + * with this program; if not, write to the Free Software Foundation, Inc., 18 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 + */ 20 + 21 + #undef DEBUG 22 + 23 + #include <linux/kernel.h> 24 + #include <linux/of_platform.h> 25 + #include <linux/io.h> 26 + 27 + #include <asm/ppc-pci.h> 28 + #include <asm/pci-bridge.h> 29 + 30 + #include "io-workarounds.h" 31 + 32 + #define SPIDER_PCI_DISABLE_PREFETCH 33 + 34 + struct spiderpci_iowa_private { 35 + void __iomem *regs; 36 + }; 37 + 38 + static void spiderpci_io_flush(struct iowa_bus *bus) 39 + { 40 + struct spiderpci_iowa_private *priv; 41 + u32 val; 42 + 43 + priv = bus->private; 44 + val = in_be32(priv->regs + SPIDER_PCI_DUMMY_READ); 45 + iosync(); 46 + } 47 + 48 + #define SPIDER_PCI_MMIO_READ(name, ret) \ 49 + static ret spiderpci_##name(const PCI_IO_ADDR addr) \ 50 + { \ 51 + ret val = __do_##name(addr); \ 52 + spiderpci_io_flush(iowa_mem_find_bus(addr)); \ 53 + return val; \ 54 + } 55 + 56 + #define SPIDER_PCI_MMIO_READ_STR(name) \ 57 + static void spiderpci_##name(const PCI_IO_ADDR addr, void *buf, \ 58 + unsigned long count) \ 59 + { \ 60 + __do_##name(addr, buf, count); \ 61 + spiderpci_io_flush(iowa_mem_find_bus(addr)); \ 62 + } 63 + 64 + SPIDER_PCI_MMIO_READ(readb, u8) 65 + SPIDER_PCI_MMIO_READ(readw, u16) 66 + SPIDER_PCI_MMIO_READ(readl, u32) 67 + SPIDER_PCI_MMIO_READ(readq, u64) 68 + SPIDER_PCI_MMIO_READ(readw_be, u16) 69 + SPIDER_PCI_MMIO_READ(readl_be, u32) 70 + SPIDER_PCI_MMIO_READ(readq_be, u64) 71 + SPIDER_PCI_MMIO_READ_STR(readsb) 72 + SPIDER_PCI_MMIO_READ_STR(readsw) 73 + SPIDER_PCI_MMIO_READ_STR(readsl) 74 + 75 + static void spiderpci_memcpy_fromio(void *dest, const PCI_IO_ADDR src, 76 + unsigned long n) 77 + { 78 + __do_memcpy_fromio(dest, src, n); 79 + spiderpci_io_flush(iowa_mem_find_bus(src)); 80 + } 81 + 82 + static int __init spiderpci_pci_setup_chip(struct pci_controller *phb, 83 + void __iomem *regs) 84 + { 85 + void *dummy_page_va; 86 + dma_addr_t dummy_page_da; 87 + 88 + #ifdef SPIDER_PCI_DISABLE_PREFETCH 89 + u32 val = in_be32(regs + SPIDER_PCI_VCI_CNTL_STAT); 90 + pr_debug("SPIDER_IOWA:PVCI_Control_Status was 0x%08x\n", val); 91 + out_be32(regs + SPIDER_PCI_VCI_CNTL_STAT, val | 0x8); 92 + #endif /* SPIDER_PCI_DISABLE_PREFETCH */ 93 + 94 + /* setup dummy read */ 95 + /* 96 + * On CellBlade, we can't know that which XDR memory is used by 97 + * kmalloc() to allocate dummy_page_va. 98 + * In order to imporve the performance, the XDR which is used to 99 + * allocate dummy_page_va is the nearest the spider-pci. 100 + * We have to select the CBE which is the nearest the spider-pci 101 + * to allocate memory from the best XDR, but I don't know that 102 + * how to do. 103 + * 104 + * Celleb does not have this problem, because it has only one XDR. 105 + */ 106 + dummy_page_va = kmalloc(PAGE_SIZE, GFP_KERNEL); 107 + if (!dummy_page_va) { 108 + pr_err("SPIDERPCI-IOWA:Alloc dummy_page_va failed.\n"); 109 + return -1; 110 + } 111 + 112 + dummy_page_da = dma_map_single(phb->parent, dummy_page_va, 113 + PAGE_SIZE, DMA_FROM_DEVICE); 114 + if (dma_mapping_error(dummy_page_da)) { 115 + pr_err("SPIDER-IOWA:Map dummy page filed.\n"); 116 + kfree(dummy_page_va); 117 + return -1; 118 + } 119 + 120 + out_be32(regs + SPIDER_PCI_DUMMY_READ_BASE, dummy_page_da); 121 + 122 + return 0; 123 + } 124 + 125 + int __init spiderpci_iowa_init(struct iowa_bus *bus, void *data) 126 + { 127 + void __iomem *regs = NULL; 128 + struct spiderpci_iowa_private *priv; 129 + struct device_node *np = bus->phb->dn; 130 + struct resource r; 131 + unsigned long offset = (unsigned long)data; 132 + 133 + pr_debug("SPIDERPCI-IOWA:Bus initialize for spider(%s)\n", 134 + np->full_name); 135 + 136 + priv = kzalloc(sizeof(struct spiderpci_iowa_private), GFP_KERNEL); 137 + if (!priv) { 138 + pr_err("SPIDERPCI-IOWA:" 139 + "Can't allocate struct spiderpci_iowa_private"); 140 + return -1; 141 + } 142 + 143 + if (of_address_to_resource(np, 0, &r)) { 144 + pr_err("SPIDERPCI-IOWA:Can't get resource.\n"); 145 + goto error; 146 + } 147 + 148 + regs = ioremap(r.start + offset, SPIDER_PCI_REG_SIZE); 149 + if (!regs) { 150 + pr_err("SPIDERPCI-IOWA:ioremap failed.\n"); 151 + goto error; 152 + } 153 + priv->regs = regs; 154 + bus->private = priv; 155 + 156 + if (spiderpci_pci_setup_chip(bus->phb, regs)) 157 + goto error; 158 + 159 + return 0; 160 + 161 + error: 162 + kfree(priv); 163 + bus->private = NULL; 164 + 165 + if (regs) 166 + iounmap(regs); 167 + 168 + return -1; 169 + } 170 + 171 + struct ppc_pci_io spiderpci_ops = { 172 + .readb = spiderpci_readb, 173 + .readw = spiderpci_readw, 174 + .readl = spiderpci_readl, 175 + .readq = spiderpci_readq, 176 + .readw_be = spiderpci_readw_be, 177 + .readl_be = spiderpci_readl_be, 178 + .readq_be = spiderpci_readq_be, 179 + .readsb = spiderpci_readsb, 180 + .readsw = spiderpci_readsw, 181 + .readsl = spiderpci_readsl, 182 + .memcpy_fromio = spiderpci_memcpy_fromio, 183 + }; 184 +
-12
arch/powerpc/platforms/celleb/Kconfig
··· 1 - config PPC_CELLEB 2 - bool "Toshiba's Cell Reference Set 'Celleb' Architecture" 3 - depends on PPC_MULTIPLATFORM && PPC64 4 - select PPC_CELL 5 - select PPC_CELL_NATIVE 6 - select PPC_RTAS 7 - select PPC_INDIRECT_IO 8 - select PPC_OF_PLATFORM_PCI 9 - select HAS_TXX9_SERIAL 10 - select PPC_UDBG_BEAT 11 - select USB_OHCI_BIG_ENDIAN_MMIO 12 - select USB_EHCI_BIG_ENDIAN_MMIO
-9
arch/powerpc/platforms/celleb/Makefile
··· 1 - obj-y += interrupt.o iommu.o setup.o \ 2 - htab.o beat.o hvCall.o pci.o \ 3 - scc_epci.o scc_uhc.o \ 4 - io-workarounds.o 5 - 6 - obj-$(CONFIG_SMP) += smp.o 7 - obj-$(CONFIG_PPC_UDBG_BEAT) += udbg_beat.o 8 - obj-$(CONFIG_SERIAL_TXX9) += scc_sio.o 9 - obj-$(CONFIG_SPU_BASE) += spu_priv1.o
+1 -1
arch/powerpc/platforms/celleb/beat.c arch/powerpc/platforms/cell/beat.c
··· 33 33 34 34 #include "beat_wrapper.h" 35 35 #include "beat.h" 36 - #include "interrupt.h" 36 + #include "beat_interrupt.h" 37 37 38 38 static int beat_pm_poweroff_flag; 39 39
arch/powerpc/platforms/celleb/beat.h arch/powerpc/platforms/cell/beat.h
arch/powerpc/platforms/celleb/beat_syscall.h arch/powerpc/platforms/cell/beat_syscall.h
arch/powerpc/platforms/celleb/beat_wrapper.h arch/powerpc/platforms/cell/beat_wrapper.h
arch/powerpc/platforms/celleb/htab.c arch/powerpc/platforms/cell/beat_htab.c
arch/powerpc/platforms/celleb/hvCall.S arch/powerpc/platforms/cell/beat_hvCall.S
+1 -1
arch/powerpc/platforms/celleb/interrupt.c arch/powerpc/platforms/cell/beat_interrupt.c
··· 26 26 27 27 #include <asm/machdep.h> 28 28 29 - #include "interrupt.h" 29 + #include "beat_interrupt.h" 30 30 #include "beat_wrapper.h" 31 31 32 32 #define MAX_IRQS NR_IRQS
arch/powerpc/platforms/celleb/interrupt.h arch/powerpc/platforms/cell/beat_interrupt.h
-280
arch/powerpc/platforms/celleb/io-workarounds.c
··· 1 - /* 2 - * Support for Celleb io workarounds 3 - * 4 - * (C) Copyright 2006-2007 TOSHIBA CORPORATION 5 - * 6 - * This file is based to arch/powerpc/platform/cell/io-workarounds.c 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 along 19 - * with this program; if not, write to the Free Software Foundation, Inc., 20 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 - */ 22 - 23 - #undef DEBUG 24 - 25 - #include <linux/of.h> 26 - #include <linux/of_device.h> 27 - #include <linux/irq.h> 28 - 29 - #include <asm/io.h> 30 - #include <asm/prom.h> 31 - #include <asm/machdep.h> 32 - #include <asm/pci-bridge.h> 33 - #include <asm/ppc-pci.h> 34 - 35 - #include "pci.h" 36 - 37 - #define MAX_CELLEB_PCI_BUS 4 38 - 39 - void *celleb_dummy_page_va; 40 - 41 - static struct celleb_pci_bus { 42 - struct pci_controller *phb; 43 - void (*dummy_read)(struct pci_controller *); 44 - } celleb_pci_busses[MAX_CELLEB_PCI_BUS]; 45 - 46 - static int celleb_pci_count = 0; 47 - 48 - static struct celleb_pci_bus *celleb_pci_find(unsigned long vaddr, 49 - unsigned long paddr) 50 - { 51 - int i, j; 52 - struct resource *res; 53 - 54 - for (i = 0; i < celleb_pci_count; i++) { 55 - struct celleb_pci_bus *bus = &celleb_pci_busses[i]; 56 - struct pci_controller *phb = bus->phb; 57 - if (paddr) 58 - for (j = 0; j < 3; j++) { 59 - res = &phb->mem_resources[j]; 60 - if (paddr >= res->start && paddr <= res->end) 61 - return bus; 62 - } 63 - res = &phb->io_resource; 64 - if (vaddr && vaddr >= res->start && vaddr <= res->end) 65 - return bus; 66 - } 67 - return NULL; 68 - } 69 - 70 - static void celleb_io_flush(const PCI_IO_ADDR addr) 71 - { 72 - struct celleb_pci_bus *bus; 73 - int token; 74 - 75 - token = PCI_GET_ADDR_TOKEN(addr); 76 - 77 - if (token && token <= celleb_pci_count) 78 - bus = &celleb_pci_busses[token - 1]; 79 - else { 80 - unsigned long vaddr, paddr; 81 - pte_t *ptep; 82 - 83 - vaddr = (unsigned long)PCI_FIX_ADDR(addr); 84 - if (vaddr < PHB_IO_BASE || vaddr >= PHB_IO_END) 85 - return; 86 - 87 - ptep = find_linux_pte(init_mm.pgd, vaddr); 88 - if (ptep == NULL) 89 - paddr = 0; 90 - else 91 - paddr = pte_pfn(*ptep) << PAGE_SHIFT; 92 - bus = celleb_pci_find(vaddr, paddr); 93 - 94 - if (bus == NULL) 95 - return; 96 - } 97 - 98 - if (bus->dummy_read) 99 - bus->dummy_read(bus->phb); 100 - } 101 - 102 - static u8 celleb_readb(const PCI_IO_ADDR addr) 103 - { 104 - u8 val; 105 - val = __do_readb(addr); 106 - celleb_io_flush(addr); 107 - return val; 108 - } 109 - 110 - static u16 celleb_readw(const PCI_IO_ADDR addr) 111 - { 112 - u16 val; 113 - val = __do_readw(addr); 114 - celleb_io_flush(addr); 115 - return val; 116 - } 117 - 118 - static u32 celleb_readl(const PCI_IO_ADDR addr) 119 - { 120 - u32 val; 121 - val = __do_readl(addr); 122 - celleb_io_flush(addr); 123 - return val; 124 - } 125 - 126 - static u64 celleb_readq(const PCI_IO_ADDR addr) 127 - { 128 - u64 val; 129 - val = __do_readq(addr); 130 - celleb_io_flush(addr); 131 - return val; 132 - } 133 - 134 - static u16 celleb_readw_be(const PCI_IO_ADDR addr) 135 - { 136 - u16 val; 137 - val = __do_readw_be(addr); 138 - celleb_io_flush(addr); 139 - return val; 140 - } 141 - 142 - static u32 celleb_readl_be(const PCI_IO_ADDR addr) 143 - { 144 - u32 val; 145 - val = __do_readl_be(addr); 146 - celleb_io_flush(addr); 147 - return val; 148 - } 149 - 150 - static u64 celleb_readq_be(const PCI_IO_ADDR addr) 151 - { 152 - u64 val; 153 - val = __do_readq_be(addr); 154 - celleb_io_flush(addr); 155 - return val; 156 - } 157 - 158 - static void celleb_readsb(const PCI_IO_ADDR addr, 159 - void *buf, unsigned long count) 160 - { 161 - __do_readsb(addr, buf, count); 162 - celleb_io_flush(addr); 163 - } 164 - 165 - static void celleb_readsw(const PCI_IO_ADDR addr, 166 - void *buf, unsigned long count) 167 - { 168 - __do_readsw(addr, buf, count); 169 - celleb_io_flush(addr); 170 - } 171 - 172 - static void celleb_readsl(const PCI_IO_ADDR addr, 173 - void *buf, unsigned long count) 174 - { 175 - __do_readsl(addr, buf, count); 176 - celleb_io_flush(addr); 177 - } 178 - 179 - static void celleb_memcpy_fromio(void *dest, 180 - const PCI_IO_ADDR src, 181 - unsigned long n) 182 - { 183 - __do_memcpy_fromio(dest, src, n); 184 - celleb_io_flush(src); 185 - } 186 - 187 - static void __iomem *celleb_ioremap(unsigned long addr, 188 - unsigned long size, 189 - unsigned long flags) 190 - { 191 - struct celleb_pci_bus *bus; 192 - void __iomem *res = __ioremap(addr, size, flags); 193 - int busno; 194 - 195 - bus = celleb_pci_find(0, addr); 196 - if (bus != NULL) { 197 - busno = bus - celleb_pci_busses; 198 - PCI_SET_ADDR_TOKEN(res, busno + 1); 199 - } 200 - return res; 201 - } 202 - 203 - static void celleb_iounmap(volatile void __iomem *addr) 204 - { 205 - return __iounmap(PCI_FIX_ADDR(addr)); 206 - } 207 - 208 - static struct ppc_pci_io celleb_pci_io __initdata = { 209 - .readb = celleb_readb, 210 - .readw = celleb_readw, 211 - .readl = celleb_readl, 212 - .readq = celleb_readq, 213 - .readw_be = celleb_readw_be, 214 - .readl_be = celleb_readl_be, 215 - .readq_be = celleb_readq_be, 216 - .readsb = celleb_readsb, 217 - .readsw = celleb_readsw, 218 - .readsl = celleb_readsl, 219 - .memcpy_fromio = celleb_memcpy_fromio, 220 - }; 221 - 222 - void __init celleb_pci_add_one(struct pci_controller *phb, 223 - void (*dummy_read)(struct pci_controller *)) 224 - { 225 - struct celleb_pci_bus *bus = &celleb_pci_busses[celleb_pci_count]; 226 - struct device_node *np = phb->dn; 227 - 228 - if (celleb_pci_count >= MAX_CELLEB_PCI_BUS) { 229 - printk(KERN_ERR "Too many pci bridges, workarounds" 230 - " disabled for %s\n", np->full_name); 231 - return; 232 - } 233 - 234 - celleb_pci_count++; 235 - 236 - bus->phb = phb; 237 - bus->dummy_read = dummy_read; 238 - } 239 - 240 - static struct of_device_id celleb_pci_workaround_match[] __initdata = { 241 - { 242 - .name = "pci-pseudo", 243 - .data = fake_pci_workaround_init, 244 - }, { 245 - .name = "epci", 246 - .data = epci_workaround_init, 247 - }, { 248 - }, 249 - }; 250 - 251 - int __init celleb_pci_workaround_init(void) 252 - { 253 - struct pci_controller *phb; 254 - struct device_node *node; 255 - const struct of_device_id *match; 256 - void (*init_func)(struct pci_controller *); 257 - 258 - celleb_dummy_page_va = kmalloc(PAGE_SIZE, GFP_KERNEL); 259 - if (!celleb_dummy_page_va) { 260 - printk(KERN_ERR "Celleb: dummy read disabled. " 261 - "Alloc celleb_dummy_page_va failed\n"); 262 - return 1; 263 - } 264 - 265 - list_for_each_entry(phb, &hose_list, list_node) { 266 - node = phb->dn; 267 - match = of_match_node(celleb_pci_workaround_match, node); 268 - 269 - if (match) { 270 - init_func = match->data; 271 - (*init_func)(phb); 272 - } 273 - } 274 - 275 - ppc_pci_io = celleb_pci_io; 276 - ppc_md.ioremap = celleb_ioremap; 277 - ppc_md.iounmap = celleb_iounmap; 278 - 279 - return 0; 280 - }
arch/powerpc/platforms/celleb/iommu.c arch/powerpc/platforms/cell/beat_iommu.c
+31 -19
arch/powerpc/platforms/celleb/pci.c arch/powerpc/platforms/cell/celleb_pci.c
··· 37 37 #include <asm/io.h> 38 38 #include <asm/irq.h> 39 39 #include <asm/prom.h> 40 - #include <asm/machdep.h> 41 40 #include <asm/pci-bridge.h> 42 41 #include <asm/ppc-pci.h> 43 42 44 - #include "pci.h" 45 - #include "interrupt.h" 43 + #include "io-workarounds.h" 44 + #include "celleb_pci.h" 46 45 47 46 #define MAX_PCI_DEVICES 32 48 47 #define MAX_PCI_FUNCTIONS 8 ··· 189 190 190 191 191 192 static int celleb_fake_pci_write_config(struct pci_bus *bus, 192 - unsigned int devfn, int where, int size, u32 val) 193 + unsigned int devfn, int where, int size, u32 val) 193 194 { 194 195 char *config; 195 196 struct device_node *node; ··· 456 457 return 0; 457 458 } 458 459 459 - void __init fake_pci_workaround_init(struct pci_controller *phb) 460 - { 461 - /** 462 - * We will add fake pci bus to scc_pci_bus for the purpose to improve 463 - * I/O Macro performance. But device-tree and device drivers 464 - * are not ready to use address with a token. 465 - */ 466 - 467 - /* celleb_pci_add_one(phb, NULL); */ 468 - } 460 + static struct celleb_phb_spec celleb_fake_pci_spec __initdata = { 461 + .setup = celleb_setup_fake_pci, 462 + }; 469 463 470 464 static struct of_device_id celleb_phb_match[] __initdata = { 471 465 { 472 466 .name = "pci-pseudo", 473 - .data = celleb_setup_fake_pci, 467 + .data = &celleb_fake_pci_spec, 474 468 }, { 475 469 .name = "epci", 476 - .data = celleb_setup_epci, 470 + .data = &celleb_epci_spec, 471 + }, { 472 + .name = "pcie", 473 + .data = &celleb_pciex_spec, 477 474 }, { 478 475 }, 479 476 }; 477 + 478 + static int __init celleb_io_workaround_init(struct pci_controller *phb, 479 + struct celleb_phb_spec *phb_spec) 480 + { 481 + if (phb_spec->ops) { 482 + iowa_register_bus(phb, phb_spec->ops, phb_spec->iowa_init, 483 + phb_spec->iowa_data); 484 + io_workaround_init(); 485 + } 486 + 487 + return 0; 488 + } 480 489 481 490 int __init celleb_setup_phb(struct pci_controller *phb) 482 491 { 483 492 struct device_node *dev = phb->dn; 484 493 const struct of_device_id *match; 485 - int (*setup_func)(struct device_node *, struct pci_controller *); 494 + struct celleb_phb_spec *phb_spec; 495 + int rc; 486 496 487 497 match = of_match_node(celleb_phb_match, dev); 488 498 if (!match) ··· 500 492 phb_set_bus_ranges(dev, phb); 501 493 phb->buid = 1; 502 494 503 - setup_func = match->data; 504 - return (*setup_func)(dev, phb); 495 + phb_spec = match->data; 496 + rc = (*phb_spec->setup)(dev, phb); 497 + if (rc) 498 + return 1; 499 + 500 + return celleb_io_workaround_init(phb, phb_spec); 505 501 } 506 502 507 503 int celleb_pci_probe_mode(struct pci_bus *bus)
+11 -8
arch/powerpc/platforms/celleb/pci.h arch/powerpc/platforms/cell/celleb_pci.h
··· 27 27 #include <asm/prom.h> 28 28 #include <asm/ppc-pci.h> 29 29 30 + #include "io-workarounds.h" 31 + 32 + struct celleb_phb_spec { 33 + int (*setup)(struct device_node *, struct pci_controller *); 34 + struct ppc_pci_io *ops; 35 + int (*iowa_init)(struct iowa_bus *, void *); 36 + void *iowa_data; 37 + }; 38 + 30 39 extern int celleb_setup_phb(struct pci_controller *); 31 40 extern int celleb_pci_probe_mode(struct pci_bus *); 32 41 33 - extern int celleb_setup_epci(struct device_node *, struct pci_controller *); 34 - 35 - extern void *celleb_dummy_page_va; 36 - extern int __init celleb_pci_workaround_init(void); 37 - extern void __init celleb_pci_add_one(struct pci_controller *, 38 - void (*)(struct pci_controller *)); 39 - extern void fake_pci_workaround_init(struct pci_controller *); 40 - extern void epci_workaround_init(struct pci_controller *); 42 + extern struct celleb_phb_spec celleb_epci_spec; 43 + extern struct celleb_phb_spec celleb_pciex_spec; 41 44 42 45 #endif /* _CELLEB_PCI_H */
+87
arch/powerpc/platforms/celleb/scc.h arch/powerpc/platforms/cell/celleb_scc.h
··· 125 125 /* bits for SCC_EPCI_CNTOPT */ 126 126 #define SCC_EPCI_CNTOPT_O2PMB 0x00000002 127 127 128 + /* SCC PCIEXC SMMIO registers */ 129 + #define PEXCADRS 0x000 130 + #define PEXCWDATA 0x004 131 + #define PEXCRDATA 0x008 132 + #define PEXDADRS 0x010 133 + #define PEXDCMND 0x014 134 + #define PEXDWDATA 0x018 135 + #define PEXDRDATA 0x01c 136 + #define PEXREQID 0x020 137 + #define PEXTIDMAP 0x024 138 + #define PEXINTMASK 0x028 139 + #define PEXINTSTS 0x02c 140 + #define PEXAERRMASK 0x030 141 + #define PEXAERRSTS 0x034 142 + #define PEXPRERRMASK 0x040 143 + #define PEXPRERRSTS 0x044 144 + #define PEXPRERRID01 0x048 145 + #define PEXPRERRID23 0x04c 146 + #define PEXVDMASK 0x050 147 + #define PEXVDSTS 0x054 148 + #define PEXRCVCPLIDA 0x060 149 + #define PEXLENERRIDA 0x068 150 + #define PEXPHYPLLST 0x070 151 + #define PEXDMRDEN0 0x100 152 + #define PEXDMRDADR0 0x104 153 + #define PEXDMRDENX 0x110 154 + #define PEXDMRDADRX 0x114 155 + #define PEXECMODE 0xf00 156 + #define PEXMAEA(n) (0xf50 + (8 * n)) 157 + #define PEXMAEC(n) (0xf54 + (8 * n)) 158 + #define PEXCCRCTRL 0xff0 159 + 160 + /* SCC PCIEXC bits and shifts for PEXCADRS */ 161 + #define PEXCADRS_BYTE_EN_SHIFT 20 162 + #define PEXCADRS_CMD_SHIFT 16 163 + #define PEXCADRS_CMD_READ (0xa << PEXCADRS_CMD_SHIFT) 164 + #define PEXCADRS_CMD_WRITE (0xb << PEXCADRS_CMD_SHIFT) 165 + 166 + /* SCC PCIEXC shifts for PEXDADRS */ 167 + #define PEXDADRS_BUSNO_SHIFT 20 168 + #define PEXDADRS_DEVNO_SHIFT 15 169 + #define PEXDADRS_FUNCNO_SHIFT 12 170 + 171 + /* SCC PCIEXC bits and shifts for PEXDCMND */ 172 + #define PEXDCMND_BYTE_EN_SHIFT 4 173 + #define PEXDCMND_IO_READ 0x2 174 + #define PEXDCMND_IO_WRITE 0x3 175 + #define PEXDCMND_CONFIG_READ 0xa 176 + #define PEXDCMND_CONFIG_WRITE 0xb 177 + 178 + /* SCC PCIEXC bits for PEXPHYPLLST */ 179 + #define PEXPHYPLLST_PEXPHYAPLLST 0x00000001 180 + 181 + /* SCC PCIEXC bits for PEXECMODE */ 182 + #define PEXECMODE_ALL_THROUGH 0x00000000 183 + #define PEXECMODE_ALL_8BIT 0x00550155 184 + #define PEXECMODE_ALL_16BIT 0x00aa02aa 185 + 186 + /* SCC PCIEXC bits for PEXCCRCTRL */ 187 + #define PEXCCRCTRL_PEXIPCOREEN 0x00040000 188 + #define PEXCCRCTRL_PEXIPCONTEN 0x00020000 189 + #define PEXCCRCTRL_PEXPHYPLLEN 0x00010000 190 + #define PEXCCRCTRL_PCIEXCAOCKEN 0x00000100 191 + 192 + /* SCC PCIEXC port configuration registers */ 193 + #define PEXTCERRCHK 0x21c 194 + #define PEXTAMAPB0 0x220 195 + #define PEXTAMAPL0 0x224 196 + #define PEXTAMAPB(n) (PEXTAMAPB0 + 8 * (n)) 197 + #define PEXTAMAPL(n) (PEXTAMAPL0 + 8 * (n)) 198 + #define PEXCHVC0P 0x500 199 + #define PEXCHVC0NP 0x504 200 + #define PEXCHVC0C 0x508 201 + #define PEXCDVC0P 0x50c 202 + #define PEXCDVC0NP 0x510 203 + #define PEXCDVC0C 0x514 204 + #define PEXCHVCXP 0x518 205 + #define PEXCHVCXNP 0x51c 206 + #define PEXCHVCXC 0x520 207 + #define PEXCDVCXP 0x524 208 + #define PEXCDVCXNP 0x528 209 + #define PEXCDVCXC 0x52c 210 + #define PEXCTTRG 0x530 211 + #define PEXTSCTRL 0x700 212 + #define PEXTSSTS 0x704 213 + #define PEXSKPCTRL 0x708 214 + 128 215 /* UHC registers */ 129 216 #define SCC_UHC_CKRCTRL 0xff0 130 217 #define SCC_UHC_ECMODE 0xf00
+15 -62
arch/powerpc/platforms/celleb/scc_epci.c arch/powerpc/platforms/cell/celleb_scc_epci.c
··· 30 30 #include <asm/io.h> 31 31 #include <asm/irq.h> 32 32 #include <asm/prom.h> 33 - #include <asm/machdep.h> 34 33 #include <asm/pci-bridge.h> 35 34 #include <asm/ppc-pci.h> 36 35 37 - #include "scc.h" 38 - #include "pci.h" 39 - #include "interrupt.h" 36 + #include "celleb_scc.h" 37 + #include "celleb_pci.h" 40 38 41 39 #define MAX_PCI_DEVICES 32 42 40 #define MAX_PCI_FUNCTIONS 8 43 41 44 42 #define iob() __asm__ __volatile__("eieio; sync":::"memory") 45 - 46 - struct epci_private { 47 - dma_addr_t dummy_page_da; 48 - }; 49 43 50 44 static inline PCI_IO_ADDR celleb_epci_get_epci_base( 51 45 struct pci_controller *hose) ··· 63 69 */ 64 70 65 71 return hose->cfg_data; 66 - } 67 - 68 - static void scc_epci_dummy_read(struct pci_controller *hose) 69 - { 70 - PCI_IO_ADDR epci_base; 71 - u32 val; 72 - 73 - epci_base = celleb_epci_get_epci_base(hose); 74 - 75 - val = in_be32(epci_base + SCC_EPCI_WATRP); 76 - iosync(); 77 - 78 - return; 79 - } 80 - 81 - void __init epci_workaround_init(struct pci_controller *hose) 82 - { 83 - PCI_IO_ADDR epci_base; 84 - PCI_IO_ADDR reg; 85 - struct epci_private *private = hose->private_data; 86 - 87 - BUG_ON(!private); 88 - 89 - private->dummy_page_da = dma_map_single(hose->parent, 90 - celleb_dummy_page_va, PAGE_SIZE, DMA_FROM_DEVICE); 91 - if (private->dummy_page_da == DMA_ERROR_CODE) { 92 - printk(KERN_ERR "EPCI: dummy read disabled. " 93 - "Map dummy page failed.\n"); 94 - return; 95 - } 96 - 97 - celleb_pci_add_one(hose, scc_epci_dummy_read); 98 - epci_base = celleb_epci_get_epci_base(hose); 99 - 100 - reg = epci_base + SCC_EPCI_DUMYRADR; 101 - out_be32(reg, private->dummy_page_da); 102 72 } 103 73 104 74 static inline void clear_and_disable_master_abort_interrupt( ··· 109 151 return PCIBIOS_SUCCESSFUL; 110 152 } 111 153 112 - static PCI_IO_ADDR celleb_epci_make_config_addr( 113 - struct pci_bus *bus, 114 - struct pci_controller *hose, 115 - unsigned int devfn, int where) 154 + static PCI_IO_ADDR celleb_epci_make_config_addr(struct pci_bus *bus, 155 + struct pci_controller *hose, unsigned int devfn, int where) 116 156 { 117 157 PCI_IO_ADDR addr; 118 158 ··· 381 425 return 0; 382 426 } 383 427 384 - int __init celleb_setup_epci(struct device_node *node, 385 - struct pci_controller *hose) 428 + static int __init celleb_setup_epci(struct device_node *node, 429 + struct pci_controller *hose) 386 430 { 387 431 struct resource r; 388 432 ··· 406 450 if (!hose->cfg_addr) 407 451 goto error; 408 452 pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n", 409 - r.start, (unsigned long)hose->cfg_addr, 410 - (r.end - r.start + 1)); 453 + r.start, (unsigned long)hose->cfg_addr, (r.end - r.start + 1)); 411 454 412 455 if (of_address_to_resource(node, 2, &r)) 413 456 goto error; ··· 414 459 if (!hose->cfg_data) 415 460 goto error; 416 461 pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n", 417 - r.start, (unsigned long)hose->cfg_data, 418 - (r.end - r.start + 1)); 419 - 420 - hose->private_data = kzalloc(sizeof(struct epci_private), GFP_KERNEL); 421 - if (hose->private_data == NULL) { 422 - printk(KERN_ERR "EPCI: no memory for private data.\n"); 423 - goto error; 424 - } 462 + r.start, (unsigned long)hose->cfg_data, (r.end - r.start + 1)); 425 463 426 464 hose->ops = &celleb_epci_ops; 427 465 celleb_epci_init(hose); ··· 422 474 return 0; 423 475 424 476 error: 425 - kfree(hose->private_data); 426 - 427 477 if (hose->cfg_addr) 428 478 iounmap(hose->cfg_addr); 429 479 ··· 429 483 iounmap(hose->cfg_data); 430 484 return 1; 431 485 } 486 + 487 + struct celleb_phb_spec celleb_epci_spec __initdata = { 488 + .setup = celleb_setup_epci, 489 + .ops = &spiderpci_ops, 490 + .iowa_init = &spiderpci_iowa_init, 491 + .iowa_data = (void *)0, 492 + };
arch/powerpc/platforms/celleb/scc_sio.c arch/powerpc/platforms/cell/celleb_scc_sio.c
+1 -1
arch/powerpc/platforms/celleb/scc_uhc.c arch/powerpc/platforms/cell/celleb_scc_uhc.c
··· 25 25 #include <asm/io.h> 26 26 #include <asm/machdep.h> 27 27 28 - #include "scc.h" 28 + #include "celleb_scc.h" 29 29 30 30 #define UHC_RESET_WAIT_MAX 10000 31 31
+5 -7
arch/powerpc/platforms/celleb/setup.c arch/powerpc/platforms/cell/celleb_setup.c
··· 56 56 #include <asm/rtas.h> 57 57 #include <asm/cell-regs.h> 58 58 59 - #include "interrupt.h" 59 + #include "beat_interrupt.h" 60 60 #include "beat_wrapper.h" 61 61 #include "beat.h" 62 - #include "pci.h" 63 - #include "../cell/interrupt.h" 64 - #include "../cell/pervasive.h" 65 - #include "../cell/ras.h" 62 + #include "celleb_pci.h" 63 + #include "interrupt.h" 64 + #include "pervasive.h" 65 + #include "ras.h" 66 66 67 67 static char celleb_machine_type[128] = "Celleb"; 68 68 ··· 113 113 { 114 114 /* Publish OF platform devices for southbridge IOs */ 115 115 of_platform_bus_probe(NULL, celleb_bus_ids, NULL); 116 - 117 - celleb_pci_workaround_init(); 118 116 119 117 return 0; 120 118 }
+1 -1
arch/powerpc/platforms/celleb/smp.c arch/powerpc/platforms/cell/beat_smp.c
··· 37 37 #include <asm/machdep.h> 38 38 #include <asm/udbg.h> 39 39 40 - #include "interrupt.h" 40 + #include "beat_interrupt.h" 41 41 42 42 #ifdef DEBUG 43 43 #define DBG(fmt...) udbg_printf(fmt)
arch/powerpc/platforms/celleb/spu_priv1.c arch/powerpc/platforms/cell/beat_spu_priv1.c
arch/powerpc/platforms/celleb/udbg_beat.c arch/powerpc/platforms/cell/beat_udbg.c
+26 -1
arch/powerpc/platforms/iseries/exception.S
··· 59 59 andc r4,r4,r5 60 60 mtspr SPRN_CTRLT,r4 61 61 62 + /* Spin on __secondary_hold_spinloop until it is updated by the boot cpu. */ 63 + /* In the UP case we'll yeild() later, and we will not access the paca anyway */ 64 + #ifdef CONFIG_SMP 62 65 1: 66 + HMT_LOW 67 + LOAD_REG_IMMEDIATE(r23, __secondary_hold_spinloop) 68 + ld r23,0(r23) 69 + sync 70 + LOAD_REG_IMMEDIATE(r3,current_set) 71 + sldi r28,r24,3 /* get current_set[cpu#] */ 72 + ldx r3,r3,r28 73 + addi r1,r3,THREAD_SIZE 74 + subi r1,r1,STACK_FRAME_OVERHEAD 75 + 76 + cmpwi 0,r23,0 /* Keep poking the Hypervisor until */ 77 + bne 2f /* we're released */ 78 + /* Let the Hypervisor know we are alive */ 79 + /* 8002 is a call to HvCallCfg::getLps, a harmless Hypervisor function */ 80 + lis r3,0x8002 81 + rldicr r3,r3,32,15 /* r0 = (r3 << 32) & 0xffff000000000000 */ 82 + li r0,-1 /* r0=-1 indicates a Hypervisor call */ 83 + sc /* Invoke the hypervisor via a system call */ 84 + b 1b 85 + #endif 86 + 87 + 2: 63 88 HMT_LOW 64 89 #ifdef CONFIG_SMP 65 90 lbz r23,PACAPROCSTART(r13) /* Test if this processor ··· 116 91 li r0,-1 /* r0=-1 indicates a Hypervisor call */ 117 92 sc /* Invoke the hypervisor via a system call */ 118 93 mfspr r13,SPRN_SPRG3 /* Put r13 back ???? */ 119 - b 1b /* If SMP not configured, secondaries 94 + b 2b /* If SMP not configured, secondaries 120 95 * loop forever */ 121 96 122 97 /*** ISeries-LPAR interrupt handlers ***/
+1
arch/powerpc/platforms/ps3/os-area.c
··· 25 25 #include <linux/syscalls.h> 26 26 #include <linux/ctype.h> 27 27 #include <linux/lmb.h> 28 + #include <linux/of.h> 28 29 29 30 #include <asm/prom.h> 30 31
+5
arch/powerpc/platforms/pseries/Kconfig
··· 34 34 help 35 35 Provide system capacity information via human readable 36 36 <key word>=<value> pairs through a /proc/ppc64/lparcfg interface. 37 + 38 + config PPC_PSERIES_DEBUG 39 + depends on PPC_PSERIES && PPC_EARLY_DEBUG 40 + bool "Enable extra debug logging in platforms/pseries" 41 + default y
+4
arch/powerpc/platforms/pseries/Makefile
··· 2 2 EXTRA_CFLAGS += -mno-minimal-toc 3 3 endif 4 4 5 + ifeq ($(CONFIG_PPC_PSERIES_DEBUG),y) 6 + EXTRA_CFLAGS += -DDEBUG 7 + endif 8 + 5 9 obj-y := lpar.o hvCall.o nvram.o reconfig.o \ 6 10 setup.o iommu.o ras.o rtasd.o \ 7 11 firmware.o power.o
-1
arch/powerpc/platforms/pseries/eeh.c
··· 39 39 #include <asm/ppc-pci.h> 40 40 #include <asm/rtas.h> 41 41 42 - #undef DEBUG 43 42 44 43 /** Overview: 45 44 * EEH, or "Extended Error Handling" is a PCI bridge technology for
-1
arch/powerpc/platforms/pseries/eeh_cache.c
··· 28 28 #include <asm/pci-bridge.h> 29 29 #include <asm/ppc-pci.h> 30 30 31 - #undef DEBUG 32 31 33 32 /** 34 33 * The pci address cache subsystem. This subsystem places
+2 -8
arch/powerpc/platforms/pseries/firmware.c
··· 21 21 * 2 of the License, or (at your option) any later version. 22 22 */ 23 23 24 - #undef DEBUG 25 24 26 25 #include <asm/firmware.h> 27 26 #include <asm/prom.h> 28 27 #include <asm/udbg.h> 29 28 30 - #ifdef DEBUG 31 - #define DBG(fmt...) udbg_printf(fmt) 32 - #else 33 - #define DBG(fmt...) 34 - #endif 35 29 36 30 typedef struct { 37 31 unsigned long val; ··· 66 72 const char *s; 67 73 int i; 68 74 69 - DBG(" -> fw_feature_init()\n"); 75 + pr_debug(" -> fw_feature_init()\n"); 70 76 71 77 for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) { 72 78 for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) { ··· 82 88 } 83 89 } 84 90 85 - DBG(" <- fw_feature_init()\n"); 91 + pr_debug(" <- fw_feature_init()\n"); 86 92 }
+19 -20
arch/powerpc/platforms/pseries/iommu.c
··· 47 47 48 48 #include "plpar_wrappers.h" 49 49 50 - #define DBG(fmt...) 51 50 52 51 static void tce_build_pSeries(struct iommu_table *tbl, long index, 53 52 long npages, unsigned long uaddr, ··· 321 322 322 323 dn = pci_bus_to_OF_node(bus); 323 324 324 - DBG("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name); 325 + pr_debug("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name); 325 326 326 327 if (bus->self) { 327 328 /* This is not a root bus, any setup will be done for the ··· 346 347 for (children = 0, tmp = dn->child; tmp; tmp = tmp->sibling) 347 348 children++; 348 349 349 - DBG("Children: %d\n", children); 350 + pr_debug("Children: %d\n", children); 350 351 351 352 /* Calculate amount of DMA window per slot. Each window must be 352 353 * a power of two (due to pci_alloc_consistent requirements). ··· 360 361 361 362 while (pci->phb->dma_window_size * children > 0x80000000ul) 362 363 pci->phb->dma_window_size >>= 1; 363 - DBG("No ISA/IDE, window size is 0x%lx\n", 364 - pci->phb->dma_window_size); 364 + pr_debug("No ISA/IDE, window size is 0x%lx\n", 365 + pci->phb->dma_window_size); 365 366 pci->phb->dma_window_base_cur = 0; 366 367 367 368 return; ··· 386 387 while (pci->phb->dma_window_size * children > 0x70000000ul) 387 388 pci->phb->dma_window_size >>= 1; 388 389 389 - DBG("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size); 390 - 390 + pr_debug("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size); 391 391 } 392 392 393 393 ··· 399 401 400 402 dn = pci_bus_to_OF_node(bus); 401 403 402 - DBG("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n", dn->full_name); 404 + pr_debug("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n", 405 + dn->full_name); 403 406 404 407 /* Find nearest ibm,dma-window, walking up the device tree */ 405 408 for (pdn = dn; pdn != NULL; pdn = pdn->parent) { ··· 410 411 } 411 412 412 413 if (dma_window == NULL) { 413 - DBG(" no ibm,dma-window property !\n"); 414 + pr_debug(" no ibm,dma-window property !\n"); 414 415 return; 415 416 } 416 417 417 418 ppci = PCI_DN(pdn); 418 419 419 - DBG(" parent is %s, iommu_table: 0x%p\n", 420 - pdn->full_name, ppci->iommu_table); 420 + pr_debug(" parent is %s, iommu_table: 0x%p\n", 421 + pdn->full_name, ppci->iommu_table); 421 422 422 423 if (!ppci->iommu_table) { 423 424 tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, ··· 425 426 iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window, 426 427 bus->number); 427 428 ppci->iommu_table = iommu_init_table(tbl, ppci->phb->node); 428 - DBG(" created table: %p\n", ppci->iommu_table); 429 + pr_debug(" created table: %p\n", ppci->iommu_table); 429 430 } 430 431 431 432 if (pdn != dn) ··· 438 439 struct device_node *dn; 439 440 struct iommu_table *tbl; 440 441 441 - DBG("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev)); 442 + pr_debug("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev)); 442 443 443 444 dn = dev->dev.archdata.of_node; 444 445 ··· 449 450 if (!dev->bus->self) { 450 451 struct pci_controller *phb = PCI_DN(dn)->phb; 451 452 452 - DBG(" --> first child, no bridge. Allocating iommu table.\n"); 453 + pr_debug(" --> first child, no bridge. Allocating iommu table.\n"); 453 454 tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, 454 455 phb->node); 455 456 iommu_table_setparms(phb, dn, tbl); ··· 479 480 const void *dma_window = NULL; 480 481 struct pci_dn *pci; 481 482 482 - DBG("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev)); 483 + pr_debug("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev)); 483 484 484 485 /* dev setup for LPAR is a little tricky, since the device tree might 485 486 * contain the dma-window properties per-device and not neccesarily ··· 488 489 * already allocated. 489 490 */ 490 491 dn = pci_device_to_OF_node(dev); 491 - DBG(" node is %s\n", dn->full_name); 492 + pr_debug(" node is %s\n", dn->full_name); 492 493 493 494 for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table; 494 495 pdn = pdn->parent) { ··· 503 504 pci_name(dev), dn? dn->full_name : "<null>"); 504 505 return; 505 506 } 506 - DBG(" parent is %s\n", pdn->full_name); 507 + pr_debug(" parent is %s\n", pdn->full_name); 507 508 508 509 /* Check for parent == NULL so we don't try to setup the empty EADS 509 510 * slots on POWER4 machines. 510 511 */ 511 512 if (dma_window == NULL || pdn->parent == NULL) { 512 - DBG(" no dma window for device, linking to parent\n"); 513 + pr_debug(" no dma window for device, linking to parent\n"); 513 514 dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table; 514 515 return; 515 516 } ··· 521 522 iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window, 522 523 pci->phb->bus->number); 523 524 pci->iommu_table = iommu_init_table(tbl, pci->phb->node); 524 - DBG(" created table: %p\n", pci->iommu_table); 525 + pr_debug(" created table: %p\n", pci->iommu_table); 525 526 } else { 526 - DBG(" found DMA window, table: %p\n", pci->iommu_table); 527 + pr_debug(" found DMA window, table: %p\n", pci->iommu_table); 527 528 } 528 529 529 530 dev->dev.archdata.dma_data = pci->iommu_table;
+17 -19
arch/powerpc/platforms/pseries/lpar.c
··· 19 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 20 */ 21 21 22 - #undef DEBUG_LOW 22 + /* Enables debugging of low-level hash table routines - careful! */ 23 + #undef DEBUG 23 24 24 25 #include <linux/kernel.h> 25 26 #include <linux/dma-mapping.h> ··· 43 42 #include "plpar_wrappers.h" 44 43 #include "pseries.h" 45 44 46 - #ifdef DEBUG_LOW 47 - #define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0) 48 - #else 49 - #define DBG_LOW(fmt...) do { } while(0) 50 - #endif 51 45 52 46 /* in hvCall.S */ 53 47 EXPORT_SYMBOL(plpar_hcall); ··· 192 196 udbg_putc = udbg_putcLP; 193 197 udbg_getc = udbg_getcLP; 194 198 udbg_getc_poll = udbg_getc_pollLP; 199 + 200 + register_early_udbg_console(); 195 201 } 196 202 197 203 /* returns 0 if couldn't find or use /chosen/stdout as console */ ··· 286 288 unsigned long hpte_v, hpte_r; 287 289 288 290 if (!(vflags & HPTE_V_BOLTED)) 289 - DBG_LOW("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " 290 - "rflags=%lx, vflags=%lx, psize=%d)\n", 291 - hpte_group, va, pa, rflags, vflags, psize); 291 + pr_debug("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " 292 + "rflags=%lx, vflags=%lx, psize=%d)\n", 293 + hpte_group, va, pa, rflags, vflags, psize); 292 294 293 295 hpte_v = hpte_encode_v(va, psize, ssize) | vflags | HPTE_V_VALID; 294 296 hpte_r = hpte_encode_r(pa, psize) | rflags; 295 297 296 298 if (!(vflags & HPTE_V_BOLTED)) 297 - DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); 299 + pr_debug(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); 298 300 299 301 /* Now fill in the actual HPTE */ 300 302 /* Set CEC cookie to 0 */ ··· 311 313 lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); 312 314 if (unlikely(lpar_rc == H_PTEG_FULL)) { 313 315 if (!(vflags & HPTE_V_BOLTED)) 314 - DBG_LOW(" full\n"); 316 + pr_debug(" full\n"); 315 317 return -1; 316 318 } 317 319 ··· 322 324 */ 323 325 if (unlikely(lpar_rc != H_SUCCESS)) { 324 326 if (!(vflags & HPTE_V_BOLTED)) 325 - DBG_LOW(" lpar err %d\n", lpar_rc); 327 + pr_debug(" lpar err %lu\n", lpar_rc); 326 328 return -2; 327 329 } 328 330 if (!(vflags & HPTE_V_BOLTED)) 329 - DBG_LOW(" -> slot: %d\n", slot & 7); 331 + pr_debug(" -> slot: %lu\n", slot & 7); 330 332 331 333 /* Because of iSeries, we have to pass down the secondary 332 334 * bucket bit here as well ··· 418 420 419 421 want_v = hpte_encode_avpn(va, psize, ssize); 420 422 421 - DBG_LOW(" update: avpnv=%016lx, hash=%016lx, f=%x, psize: %d ... ", 422 - want_v, slot, flags, psize); 423 + pr_debug(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", 424 + want_v, slot, flags, psize); 423 425 424 426 lpar_rc = plpar_pte_protect(flags, slot, want_v); 425 427 426 428 if (lpar_rc == H_NOT_FOUND) { 427 - DBG_LOW("not found !\n"); 429 + pr_debug("not found !\n"); 428 430 return -1; 429 431 } 430 432 431 - DBG_LOW("ok\n"); 433 + pr_debug("ok\n"); 432 434 433 435 BUG_ON(lpar_rc != H_SUCCESS); 434 436 ··· 503 505 unsigned long lpar_rc; 504 506 unsigned long dummy1, dummy2; 505 507 506 - DBG_LOW(" inval : slot=%lx, va=%016lx, psize: %d, local: %d", 507 - slot, va, psize, local); 508 + pr_debug(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", 509 + slot, va, psize, local); 508 510 509 511 want_v = hpte_encode_avpn(va, psize, ssize); 510 512 lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v, &dummy1, &dummy2);
+1 -3
arch/powerpc/platforms/pseries/ras.c
··· 67 67 static irqreturn_t ras_epow_interrupt(int irq, void *dev_id); 68 68 static irqreturn_t ras_error_interrupt(int irq, void *dev_id); 69 69 70 - /* #define DEBUG */ 71 - 72 70 73 71 static void request_ras_irqs(struct device_node *np, 74 72 irq_handler_t handler, ··· 235 237 printk(KERN_EMERG "Error: Fatal hardware error <0x%lx 0x%x>\n", 236 238 *((unsigned long *)&ras_log_buf), status); 237 239 238 - #ifndef DEBUG 240 + #ifndef DEBUG_RTAS_POWER_OFF 239 241 /* Don't actually power off when debugging so we can test 240 242 * without actually failing while injecting errors. 241 243 * Error data will not be logged to syslog.
+5 -9
arch/powerpc/platforms/pseries/rtasd.c
··· 29 29 #include <asm/atomic.h> 30 30 #include <asm/machdep.h> 31 31 32 - #if 0 33 - #define DEBUG(A...) printk(KERN_ERR A) 34 - #else 35 - #define DEBUG(A...) 36 - #endif 37 32 38 33 static DEFINE_SPINLOCK(rtasd_log_lock); 39 34 ··· 193 198 unsigned long s; 194 199 int len = 0; 195 200 196 - DEBUG("logging event\n"); 201 + pr_debug("rtasd: logging event\n"); 197 202 if (buf == NULL) 198 203 return; 199 204 ··· 404 409 daemonize("rtasd"); 405 410 406 411 printk(KERN_DEBUG "RTAS daemon started\n"); 407 - DEBUG("will sleep for %d milliseconds\n", (30000/rtas_event_scan_rate)); 412 + pr_debug("rtasd: will sleep for %d milliseconds\n", 413 + (30000 / rtas_event_scan_rate)); 408 414 409 415 /* See if we have any error stored in NVRAM */ 410 416 memset(logdata, 0, rtas_error_log_max); ··· 424 428 do_event_scan_all_cpus(1000); 425 429 426 430 if (surveillance_timeout != -1) { 427 - DEBUG("enabling surveillance\n"); 431 + pr_debug("rtasd: enabling surveillance\n"); 428 432 enable_surveillance(surveillance_timeout); 429 - DEBUG("surveillance enabled\n"); 433 + pr_debug("rtasd: surveillance enabled\n"); 430 434 } 431 435 432 436 /* Delay should be at least one second since some
+8 -15
arch/powerpc/platforms/pseries/scanlog.c
··· 38 38 #define SCANLOG_HWERROR -1 39 39 #define SCANLOG_CONTINUE 1 40 40 41 - #define DEBUG(A...) do { if (scanlog_debug) printk(KERN_ERR "scanlog: " A); } while (0) 42 41 43 - static int scanlog_debug; 44 42 static unsigned int ibm_scan_log_dump; /* RTAS token */ 45 43 static struct proc_dir_entry *proc_ppc64_scan_log_dump; /* The proc file */ 46 44 ··· 84 86 memcpy(data, rtas_data_buf, RTAS_DATA_BUF_SIZE); 85 87 spin_unlock(&rtas_data_buf_lock); 86 88 87 - DEBUG("status=%d, data[0]=%x, data[1]=%x, data[2]=%x\n", 88 - status, data[0], data[1], data[2]); 89 + pr_debug("scanlog: status=%d, data[0]=%x, data[1]=%x, " \ 90 + "data[2]=%x\n", status, data[0], data[1], data[2]); 89 91 switch (status) { 90 92 case SCANLOG_COMPLETE: 91 - DEBUG("hit eof\n"); 93 + pr_debug("scanlog: hit eof\n"); 92 94 return 0; 93 95 case SCANLOG_HWERROR: 94 - DEBUG("hardware error reading scan log data\n"); 96 + pr_debug("scanlog: hardware error reading data\n"); 95 97 return -EIO; 96 98 case SCANLOG_CONTINUE: 97 99 /* We may or may not have data yet */ ··· 108 110 /* Assume extended busy */ 109 111 wait_time = rtas_busy_delay_time(status); 110 112 if (!wait_time) { 111 - printk(KERN_ERR "scanlog: unknown error from rtas: %d\n", status); 113 + printk(KERN_ERR "scanlog: unknown error " \ 114 + "from rtas: %d\n", status); 112 115 return -EIO; 113 116 } 114 117 } ··· 133 134 134 135 if (buf) { 135 136 if (strncmp(stkbuf, "reset", 5) == 0) { 136 - DEBUG("reset scanlog\n"); 137 + pr_debug("scanlog: reset scanlog\n"); 137 138 status = rtas_call(ibm_scan_log_dump, 2, 1, NULL, 0, 0); 138 - DEBUG("rtas returns %d\n", status); 139 - } else if (strncmp(stkbuf, "debugon", 7) == 0) { 140 - printk(KERN_ERR "scanlog: debug on\n"); 141 - scanlog_debug = 1; 142 - } else if (strncmp(stkbuf, "debugoff", 8) == 0) { 143 - printk(KERN_ERR "scanlog: debug off\n"); 144 - scanlog_debug = 0; 139 + pr_debug("scanlog: rtas returns %d\n", status); 145 140 } 146 141 } 147 142 return count;
+5 -12
arch/powerpc/platforms/pseries/setup.c
··· 16 16 * bootup setup stuff.. 17 17 */ 18 18 19 - #undef DEBUG 20 - 21 19 #include <linux/cpu.h> 22 20 #include <linux/errno.h> 23 21 #include <linux/sched.h> ··· 68 70 #include "plpar_wrappers.h" 69 71 #include "pseries.h" 70 72 71 - #ifdef DEBUG 72 - #define DBG(fmt...) udbg_printf(fmt) 73 - #else 74 - #define DBG(fmt...) 75 - #endif 76 73 77 74 int fwnmi_active; /* TRUE if an FWNMI handler is present */ 78 75 ··· 319 326 */ 320 327 static void __init pSeries_init_early(void) 321 328 { 322 - DBG(" -> pSeries_init_early()\n"); 329 + pr_debug(" -> pSeries_init_early()\n"); 323 330 324 331 if (firmware_has_feature(FW_FEATURE_LPAR)) 325 332 find_udbg_vterm(); ··· 331 338 332 339 iommu_init_early_pSeries(); 333 340 334 - DBG(" <- pSeries_init_early()\n"); 341 + pr_debug(" <- pSeries_init_early()\n"); 335 342 } 336 343 337 344 /* ··· 376 383 of_flat_dt_is_compatible(root, "IBM,CBEA")) 377 384 return 0; 378 385 379 - DBG("pSeries detected, looking for LPAR capability...\n"); 386 + pr_debug("pSeries detected, looking for LPAR capability...\n"); 380 387 381 388 /* Now try to figure out if we are running on LPAR */ 382 389 of_scan_flat_dt(pSeries_probe_hypertas, NULL); ··· 386 393 else 387 394 hpte_init_native(); 388 395 389 - DBG("Machine is%s LPAR !\n", 390 - (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); 396 + pr_debug("Machine is%s LPAR !\n", 397 + (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); 391 398 392 399 return 1; 393 400 }
+2 -9
arch/powerpc/platforms/pseries/smp.c
··· 12 12 * 2 of the License, or (at your option) any later version. 13 13 */ 14 14 15 - #undef DEBUG 16 15 17 16 #include <linux/kernel.h> 18 17 #include <linux/module.h> ··· 50 51 #include "plpar_wrappers.h" 51 52 #include "pseries.h" 52 53 53 - #ifdef DEBUG 54 - #include <asm/udbg.h> 55 - #define DBG(fmt...) udbg_printf(fmt) 56 - #else 57 - #define DBG(fmt...) 58 - #endif 59 54 60 55 /* 61 56 * The primary thread of each non-boot processor is recorded here before ··· 224 231 { 225 232 int i; 226 233 227 - DBG(" -> smp_init_pSeries()\n"); 234 + pr_debug(" -> smp_init_pSeries()\n"); 228 235 229 236 /* Mark threads which are still spinning in hold loops. */ 230 237 if (cpu_has_feature(CPU_FTR_SMT)) { ··· 248 255 smp_ops->take_timebase = pSeries_take_timebase; 249 256 } 250 257 251 - DBG(" <- smp_init_pSeries()\n"); 258 + pr_debug(" <- smp_init_pSeries()\n"); 252 259 } 253 260 254 261 #ifdef CONFIG_MPIC
-1
arch/powerpc/platforms/pseries/xics.c
··· 9 9 * 2 of the License, or (at your option) any later version. 10 10 */ 11 11 12 - #undef DEBUG 13 12 14 13 #include <linux/types.h> 15 14 #include <linux/threads.h>
+30 -22
arch/powerpc/sysdev/mv64x60_dev.c
··· 338 338 339 339 pdata.freq_m = 8; /* default */ 340 340 prop = of_get_property(np, "freq_m", NULL); 341 - if (!prop) 342 - return -ENODEV; 343 - pdata.freq_m = *prop; 341 + if (prop) 342 + pdata.freq_m = *prop; 344 343 345 344 pdata.freq_m = 3; /* default */ 346 345 prop = of_get_property(np, "freq_n", NULL); 347 - if (!prop) 348 - return -ENODEV; 349 - pdata.freq_n = *prop; 346 + if (prop) 347 + pdata.freq_n = *prop; 350 348 351 349 pdata.timeout = 1000; /* default: 1 second */ 352 350 ··· 431 433 int err; 432 434 433 435 id = 0; 434 - for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") 435 - if ((err = mv64x60_mpsc_device_setup(np, id++))) 436 - goto error; 436 + for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") { 437 + err = mv64x60_mpsc_device_setup(np, id++); 438 + if (err) 439 + printk(KERN_ERR "Failed to initialize MV64x60 " 440 + "serial device %s: error %d.\n", 441 + np->full_name, err); 442 + } 437 443 438 444 id = 0; 439 445 id2 = 0; ··· 445 443 pdev = mv64x60_eth_register_shared_pdev(np, id++); 446 444 if (IS_ERR(pdev)) { 447 445 err = PTR_ERR(pdev); 448 - goto error; 446 + printk(KERN_ERR "Failed to initialize MV64x60 " 447 + "network block %s: error %d.\n", 448 + np->full_name, err); 449 + continue; 449 450 } 450 451 for_each_child_of_node(np, np2) { 451 452 if (!of_device_is_compatible(np2, 452 453 "marvell,mv64360-eth")) 453 454 continue; 454 455 err = mv64x60_eth_device_setup(np2, id2++, pdev); 455 - if (err) { 456 - of_node_put(np2); 457 - goto error; 458 - } 456 + if (err) 457 + printk(KERN_ERR "Failed to initialize " 458 + "MV64x60 network device %s: " 459 + "error %d.\n", 460 + np2->full_name, err); 459 461 } 460 462 } 461 463 462 464 id = 0; 463 - for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c") 464 - if ((err = mv64x60_i2c_device_setup(np, id++))) 465 - goto error; 465 + for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c") { 466 + err = mv64x60_i2c_device_setup(np, id++); 467 + if (err) 468 + printk(KERN_ERR "Failed to initialize MV64x60 I2C " 469 + "bus %s: error %d.\n", 470 + np->full_name, err); 471 + } 466 472 467 473 /* support up to one watchdog timer */ 468 474 np = of_find_compatible_node(np, NULL, "marvell,mv64360-wdt"); 469 475 if (np) { 470 476 if ((err = mv64x60_wdt_device_setup(np, id))) 471 - goto error; 477 + printk(KERN_ERR "Failed to initialize MV64x60 " 478 + "Watchdog %s: error %d.\n", 479 + np->full_name, err); 472 480 of_node_put(np); 473 481 } 474 482 475 483 return 0; 476 - 477 - error: 478 - of_node_put(np); 479 - return err; 480 484 } 481 485 arch_initcall(mv64x60_device_setup); 482 486
+1 -1
arch/powerpc/sysdev/mv64x60_udbg.c
··· 94 94 if (!np) 95 95 return; 96 96 97 - block_index = of_get_property(np, "block-index", NULL); 97 + block_index = of_get_property(np, "cell-index", NULL); 98 98 if (!block_index) 99 99 goto error; 100 100
+1 -18
arch/ppc/8260_io/fcc_enet.c
··· 165 165 #ifdef CONFIG_SBC82xx 166 166 #define F1_RXCLK 9 167 167 #define F1_TXCLK 10 168 - #elif defined(CONFIG_ADS8272) 169 - #define F1_RXCLK 11 170 - #define F1_TXCLK 10 171 168 #else 172 169 #define F1_RXCLK 12 173 170 #define F1_TXCLK 11 ··· 172 175 173 176 /* FCC2 Clock Source Configuration. There are board specific. 174 177 Can only choose from CLK13-16 */ 175 - #ifdef CONFIG_ADS8272 176 - #define F2_RXCLK 15 177 - #define F2_TXCLK 16 178 - #else 179 178 #define F2_RXCLK 13 180 179 #define F2_TXCLK 14 181 - #endif 182 180 183 181 /* FCC3 Clock Source Configuration. There are board specific. 184 182 Can only choose from CLK13-16 */ ··· 281 289 /* TQM8260 has MDIO and MDCK on PC30 and PC31 respectively */ 282 290 #define PC_MDIO ((uint)0x00000002) 283 291 #define PC_MDCK ((uint)0x00000001) 284 - #elif defined(CONFIG_ADS8272) 285 - #define PC_MDIO ((uint)0x00002000) 286 - #define PC_MDCK ((uint)0x00001000) 287 - #elif defined(CONFIG_EST8260) || defined(CONFIG_ADS8260) || defined(CONFIG_PQ2FADS) 292 + #elif defined(CONFIG_EST8260) || defined(CONFIG_ADS8260) 288 293 #define PC_MDIO ((uint)0x00400000) 289 294 #define PC_MDCK ((uint)0x00200000) 290 295 #else ··· 2107 2118 printk("Can't get FCC IRQ %d\n", fip->fc_interrupt); 2108 2119 2109 2120 #ifdef PHY_INTERRUPT 2110 - #ifdef CONFIG_ADS8272 2111 - if (request_irq(PHY_INTERRUPT, mii_link_interrupt, IRQF_SHARED, 2112 - "mii", dev) < 0) 2113 - printk(KERN_CRIT "Can't get MII IRQ %d\n", PHY_INTERRUPT); 2114 - #else 2115 2121 /* Make IRQn edge triggered. This does not work if PHY_INTERRUPT is 2116 2122 * on Port C. 2117 2123 */ ··· 2116 2132 if (request_irq(PHY_INTERRUPT, mii_link_interrupt, 0, 2117 2133 "mii", dev) < 0) 2118 2134 printk(KERN_CRIT "Can't get MII IRQ %d\n", PHY_INTERRUPT); 2119 - #endif 2120 2135 #endif /* PHY_INTERRUPT */ 2121 2136 2122 2137 /* Set GFMR to enable Ethernet operating mode.
-23
arch/ppc/8xx_io/enet.c
··· 946 946 *((volatile uint *)BCSR1) &= ~BCSR1_ETHEN; 947 947 #endif 948 948 949 - #ifdef CONFIG_MPC885ADS 950 - 951 - /* Deassert PHY reset and enable the PHY. 952 - */ 953 - { 954 - volatile uint __iomem *bcsr = ioremap(BCSR_ADDR, BCSR_SIZE); 955 - uint tmp; 956 - 957 - tmp = in_be32(bcsr + 1 /* BCSR1 */); 958 - tmp |= BCSR1_ETHEN; 959 - out_be32(bcsr + 1, tmp); 960 - tmp = in_be32(bcsr + 4 /* BCSR4 */); 961 - tmp |= BCSR4_ETH10_RST; 962 - out_be32(bcsr + 4, tmp); 963 - iounmap(bcsr); 964 - } 965 - 966 - /* On MPC885ADS SCC ethernet PHY defaults to the full duplex mode 967 - * upon reset. SCC is set to half duplex by default. So this 968 - * inconsistency should be better fixed by the software. 969 - */ 970 - #endif 971 - 972 949 dev->base_addr = (unsigned long)ep; 973 950 #if 0 974 951 dev->name = "CPM_ENET";
+1 -81
arch/ppc/Kconfig
··· 372 372 bool "FADS" 373 373 select FADS 374 374 375 - config MPC86XADS 376 - bool "MPC86XADS" 377 - help 378 - MPC86x Application Development System by Freescale Semiconductor. 379 - The MPC86xADS is meant to serve as a platform for s/w and h/w 380 - development around the MPC86X processor families. 381 - select FADS 382 - 383 - config MPC885ADS 384 - bool "MPC885ADS" 385 - help 386 - Freescale Semiconductor MPC885 Application Development System (ADS). 387 - Also known as DUET. 388 - The MPC885ADS is meant to serve as a platform for s/w and h/w 389 - development around the MPC885 processor family. 390 - 391 375 config TQM823L 392 376 bool "TQM823L" 393 377 help ··· 462 478 thin-client machines. Say Y to support it directly. 463 479 464 480 endchoice 465 - 466 - menu "Freescale Ethernet driver platform-specific options" 467 - depends on FS_ENET 468 - 469 - config MPC8xx_SECOND_ETH 470 - bool "Second Ethernet channel" 471 - depends on (MPC885ADS || MPC86XADS) 472 - default y 473 - help 474 - This enables support for second Ethernet on MPC885ADS and MPC86xADS boards. 475 - The latter will use SCC1, for 885ADS you can select it below. 476 - 477 - choice 478 - prompt "Second Ethernet channel" 479 - depends on MPC8xx_SECOND_ETH 480 - default MPC8xx_SECOND_ETH_FEC2 481 - 482 - config MPC8xx_SECOND_ETH_FEC2 483 - bool "FEC2" 484 - depends on MPC885ADS 485 - help 486 - Enable FEC2 to serve as 2-nd Ethernet channel. Note that SMC2 487 - (often 2-nd UART) will not work if this is enabled. 488 - 489 - config MPC8xx_SECOND_ETH_SCC1 490 - bool "SCC1" 491 - depends on MPC86XADS 492 - select MPC8xx_SCC_ENET_FIXED 493 - help 494 - Enable SCC1 to serve as 2-nd Ethernet channel. Note that SMC1 495 - (often 1-nd UART) will not work if this is enabled. 496 - 497 - config MPC8xx_SECOND_ETH_SCC3 498 - bool "SCC3" 499 - depends on MPC885ADS 500 - help 501 - Enable SCC3 to serve as 2-nd Ethernet channel. Note that SMC1 502 - (often 1-nd UART) will not work if this is enabled. 503 - 504 - endchoice 505 - 506 - config MPC8xx_SCC_ENET_FIXED 507 - depends on MPC8xx_SECOND_ETH_SCC 508 - default n 509 - bool "Use fixed MII-less mode for SCC Ethernet" 510 - 511 - endmenu 512 481 513 482 choice 514 483 prompt "Machine Type" ··· 603 666 End of Life: not yet :-) 604 667 URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev005.pdf> 605 668 606 - config ADS8272 607 - bool "ADS8272" 608 - 609 669 config PQ2FADS 610 670 bool "Freescale-PQ2FADS" 611 671 help ··· 632 698 platform. 633 699 endchoice 634 700 635 - config PQ2ADS 636 - bool 637 - depends on ADS8272 638 - default y 639 - 640 701 config TQM8xxL 641 702 bool 642 703 depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L) ··· 653 724 The MPC8260 is a typical embedded CPU made by Motorola. Selecting 654 725 this option means that you wish to build a kernel for a machine with 655 726 an 8260 class CPU. 656 - 657 - config 8272 658 - bool 659 - depends on 6xx 660 - default y if ADS8272 661 - select 8260 662 - help 663 - The MPC8272 CPM has a different internal dpram setup than other CPM2 664 - devices 665 727 666 728 config CPM1 667 729 bool ··· 989 1069 990 1070 config 8260_PCI9 991 1071 bool "Enable workaround for MPC826x erratum PCI 9" 992 - depends on PCI_8260 && !ADS8272 1072 + depends on PCI_8260 993 1073 default y 994 1074 995 1075 choice
-930
arch/ppc/configs/ads8272_defconfig
··· 1 - # 2 - # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.21-rc5 4 - # Wed Apr 4 20:55:16 2007 5 - # 6 - CONFIG_MMU=y 7 - CONFIG_GENERIC_HARDIRQS=y 8 - CONFIG_RWSEM_XCHGADD_ALGORITHM=y 9 - CONFIG_ARCH_HAS_ILOG2_U32=y 10 - # CONFIG_ARCH_HAS_ILOG2_U64 is not set 11 - CONFIG_GENERIC_HWEIGHT=y 12 - CONFIG_GENERIC_CALIBRATE_DELAY=y 13 - CONFIG_PPC=y 14 - CONFIG_PPC32=y 15 - CONFIG_GENERIC_NVRAM=y 16 - CONFIG_GENERIC_FIND_NEXT_BIT=y 17 - CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 18 - CONFIG_ARCH_MAY_HAVE_PC_FDC=y 19 - CONFIG_GENERIC_BUG=y 20 - CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 21 - 22 - # 23 - # Code maturity level options 24 - # 25 - CONFIG_EXPERIMENTAL=y 26 - CONFIG_BROKEN_ON_SMP=y 27 - CONFIG_INIT_ENV_ARG_LIMIT=32 28 - 29 - # 30 - # General setup 31 - # 32 - CONFIG_LOCALVERSION="" 33 - CONFIG_LOCALVERSION_AUTO=y 34 - CONFIG_SWAP=y 35 - CONFIG_SYSVIPC=y 36 - # CONFIG_IPC_NS is not set 37 - CONFIG_SYSVIPC_SYSCTL=y 38 - # CONFIG_POSIX_MQUEUE is not set 39 - # CONFIG_BSD_PROCESS_ACCT is not set 40 - # CONFIG_TASKSTATS is not set 41 - # CONFIG_UTS_NS is not set 42 - # CONFIG_AUDIT is not set 43 - # CONFIG_IKCONFIG is not set 44 - CONFIG_SYSFS_DEPRECATED=y 45 - # CONFIG_RELAY is not set 46 - CONFIG_BLK_DEV_INITRD=y 47 - CONFIG_INITRAMFS_SOURCE="" 48 - # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 49 - CONFIG_SYSCTL=y 50 - CONFIG_EMBEDDED=y 51 - CONFIG_SYSCTL_SYSCALL=y 52 - # CONFIG_KALLSYMS is not set 53 - # CONFIG_HOTPLUG is not set 54 - CONFIG_PRINTK=y 55 - CONFIG_BUG=y 56 - CONFIG_ELF_CORE=y 57 - CONFIG_BASE_FULL=y 58 - CONFIG_FUTEX=y 59 - # CONFIG_EPOLL is not set 60 - CONFIG_SHMEM=y 61 - CONFIG_SLAB=y 62 - CONFIG_VM_EVENT_COUNTERS=y 63 - CONFIG_RT_MUTEXES=y 64 - # CONFIG_TINY_SHMEM is not set 65 - CONFIG_BASE_SMALL=0 66 - # CONFIG_SLOB is not set 67 - 68 - # 69 - # Loadable module support 70 - # 71 - # CONFIG_MODULES is not set 72 - 73 - # 74 - # Block layer 75 - # 76 - CONFIG_BLOCK=y 77 - # CONFIG_LBD is not set 78 - # CONFIG_BLK_DEV_IO_TRACE is not set 79 - # CONFIG_LSF is not set 80 - 81 - # 82 - # IO Schedulers 83 - # 84 - CONFIG_IOSCHED_NOOP=y 85 - CONFIG_IOSCHED_AS=y 86 - CONFIG_IOSCHED_DEADLINE=y 87 - CONFIG_IOSCHED_CFQ=y 88 - # CONFIG_DEFAULT_AS is not set 89 - # CONFIG_DEFAULT_DEADLINE is not set 90 - CONFIG_DEFAULT_CFQ=y 91 - # CONFIG_DEFAULT_NOOP is not set 92 - CONFIG_DEFAULT_IOSCHED="cfq" 93 - 94 - # 95 - # Processor 96 - # 97 - CONFIG_6xx=y 98 - # CONFIG_40x is not set 99 - # CONFIG_44x is not set 100 - # CONFIG_8xx is not set 101 - # CONFIG_E200 is not set 102 - # CONFIG_E500 is not set 103 - CONFIG_PPC_FPU=y 104 - # CONFIG_PPC_DCR_NATIVE is not set 105 - # CONFIG_KEXEC is not set 106 - # CONFIG_CPU_FREQ is not set 107 - # CONFIG_WANT_EARLY_SERIAL is not set 108 - CONFIG_EMBEDDEDBOOT=y 109 - CONFIG_PPC_STD_MMU=y 110 - 111 - # 112 - # Platform options 113 - # 114 - 115 - # 116 - # Freescale Ethernet driver platform-specific options 117 - # 118 - # CONFIG_PPC_PREP is not set 119 - # CONFIG_APUS is not set 120 - # CONFIG_KATANA is not set 121 - # CONFIG_WILLOW is not set 122 - # CONFIG_CPCI690 is not set 123 - # CONFIG_POWERPMC250 is not set 124 - # CONFIG_CHESTNUT is not set 125 - # CONFIG_SPRUCE is not set 126 - # CONFIG_HDPU is not set 127 - # CONFIG_EV64260 is not set 128 - # CONFIG_LOPEC is not set 129 - # CONFIG_MVME5100 is not set 130 - # CONFIG_PPLUS is not set 131 - # CONFIG_PRPMC750 is not set 132 - # CONFIG_PRPMC800 is not set 133 - # CONFIG_SANDPOINT is not set 134 - # CONFIG_RADSTONE_PPC7D is not set 135 - # CONFIG_PAL4 is not set 136 - # CONFIG_EST8260 is not set 137 - # CONFIG_SBC82xx is not set 138 - # CONFIG_SBS8260 is not set 139 - # CONFIG_RPX8260 is not set 140 - # CONFIG_TQM8260 is not set 141 - CONFIG_ADS8272=y 142 - # CONFIG_PQ2FADS is not set 143 - # CONFIG_LITE5200 is not set 144 - # CONFIG_MPC834x_SYS is not set 145 - # CONFIG_EV64360 is not set 146 - CONFIG_PQ2ADS=y 147 - CONFIG_8260=y 148 - CONFIG_8272=y 149 - CONFIG_CPM2=y 150 - # CONFIG_PC_KEYBOARD is not set 151 - # CONFIG_SMP is not set 152 - # CONFIG_HIGHMEM is not set 153 - CONFIG_ARCH_POPULATES_NODE_MAP=y 154 - # CONFIG_HZ_100 is not set 155 - CONFIG_HZ_250=y 156 - # CONFIG_HZ_300 is not set 157 - # CONFIG_HZ_1000 is not set 158 - CONFIG_HZ=250 159 - CONFIG_PREEMPT_NONE=y 160 - # CONFIG_PREEMPT_VOLUNTARY is not set 161 - # CONFIG_PREEMPT is not set 162 - CONFIG_SELECT_MEMORY_MODEL=y 163 - CONFIG_FLATMEM_MANUAL=y 164 - # CONFIG_DISCONTIGMEM_MANUAL is not set 165 - # CONFIG_SPARSEMEM_MANUAL is not set 166 - CONFIG_FLATMEM=y 167 - CONFIG_FLAT_NODE_MEM_MAP=y 168 - # CONFIG_SPARSEMEM_STATIC is not set 169 - CONFIG_SPLIT_PTLOCK_CPUS=4 170 - # CONFIG_RESOURCES_64BIT is not set 171 - CONFIG_ZONE_DMA_FLAG=1 172 - CONFIG_BINFMT_ELF=y 173 - # CONFIG_BINFMT_MISC is not set 174 - # CONFIG_CMDLINE_BOOL is not set 175 - # CONFIG_PM is not set 176 - CONFIG_SECCOMP=y 177 - CONFIG_ISA_DMA_API=y 178 - 179 - # 180 - # Bus options 181 - # 182 - CONFIG_ZONE_DMA=y 183 - # CONFIG_PPC_I8259 is not set 184 - CONFIG_PPC_INDIRECT_PCI=y 185 - CONFIG_PCI=y 186 - CONFIG_PCI_DOMAINS=y 187 - CONFIG_PCI_8260=y 188 - 189 - # 190 - # PCCARD (PCMCIA/CardBus) support 191 - # 192 - 193 - # 194 - # Advanced setup 195 - # 196 - # CONFIG_ADVANCED_OPTIONS is not set 197 - 198 - # 199 - # Default settings for advanced configuration options are used 200 - # 201 - CONFIG_HIGHMEM_START=0xfe000000 202 - CONFIG_LOWMEM_SIZE=0x30000000 203 - CONFIG_KERNEL_START=0xc0000000 204 - CONFIG_TASK_SIZE=0x80000000 205 - CONFIG_BOOT_LOAD=0x00400000 206 - 207 - # 208 - # Networking 209 - # 210 - CONFIG_NET=y 211 - 212 - # 213 - # Networking options 214 - # 215 - # CONFIG_NETDEBUG is not set 216 - CONFIG_PACKET=y 217 - # CONFIG_PACKET_MMAP is not set 218 - CONFIG_UNIX=y 219 - CONFIG_XFRM=y 220 - # CONFIG_XFRM_USER is not set 221 - # CONFIG_XFRM_SUB_POLICY is not set 222 - # CONFIG_XFRM_MIGRATE is not set 223 - # CONFIG_NET_KEY is not set 224 - CONFIG_INET=y 225 - CONFIG_IP_MULTICAST=y 226 - # CONFIG_IP_ADVANCED_ROUTER is not set 227 - CONFIG_IP_FIB_HASH=y 228 - CONFIG_IP_PNP=y 229 - CONFIG_IP_PNP_DHCP=y 230 - CONFIG_IP_PNP_BOOTP=y 231 - # CONFIG_IP_PNP_RARP is not set 232 - # CONFIG_NET_IPIP is not set 233 - # CONFIG_NET_IPGRE is not set 234 - # CONFIG_IP_MROUTE is not set 235 - # CONFIG_ARPD is not set 236 - CONFIG_SYN_COOKIES=y 237 - # CONFIG_INET_AH is not set 238 - # CONFIG_INET_ESP is not set 239 - # CONFIG_INET_IPCOMP is not set 240 - # CONFIG_INET_XFRM_TUNNEL is not set 241 - # CONFIG_INET_TUNNEL is not set 242 - CONFIG_INET_XFRM_MODE_TRANSPORT=y 243 - CONFIG_INET_XFRM_MODE_TUNNEL=y 244 - CONFIG_INET_XFRM_MODE_BEET=y 245 - CONFIG_INET_DIAG=y 246 - CONFIG_INET_TCP_DIAG=y 247 - # CONFIG_TCP_CONG_ADVANCED is not set 248 - CONFIG_TCP_CONG_CUBIC=y 249 - CONFIG_DEFAULT_TCP_CONG="cubic" 250 - # CONFIG_TCP_MD5SIG is not set 251 - # CONFIG_IPV6 is not set 252 - # CONFIG_INET6_XFRM_TUNNEL is not set 253 - # CONFIG_INET6_TUNNEL is not set 254 - # CONFIG_NETWORK_SECMARK is not set 255 - # CONFIG_NETFILTER is not set 256 - 257 - # 258 - # DCCP Configuration (EXPERIMENTAL) 259 - # 260 - # CONFIG_IP_DCCP is not set 261 - 262 - # 263 - # SCTP Configuration (EXPERIMENTAL) 264 - # 265 - # CONFIG_IP_SCTP is not set 266 - 267 - # 268 - # TIPC Configuration (EXPERIMENTAL) 269 - # 270 - # CONFIG_TIPC is not set 271 - # CONFIG_ATM is not set 272 - # CONFIG_BRIDGE is not set 273 - # CONFIG_VLAN_8021Q is not set 274 - # CONFIG_DECNET is not set 275 - # CONFIG_LLC2 is not set 276 - # CONFIG_IPX is not set 277 - # CONFIG_ATALK is not set 278 - # CONFIG_X25 is not set 279 - # CONFIG_LAPB is not set 280 - # CONFIG_ECONET is not set 281 - # CONFIG_WAN_ROUTER is not set 282 - 283 - # 284 - # QoS and/or fair queueing 285 - # 286 - # CONFIG_NET_SCHED is not set 287 - 288 - # 289 - # Network testing 290 - # 291 - # CONFIG_NET_PKTGEN is not set 292 - # CONFIG_HAMRADIO is not set 293 - # CONFIG_IRDA is not set 294 - # CONFIG_BT is not set 295 - # CONFIG_IEEE80211 is not set 296 - 297 - # 298 - # Device Drivers 299 - # 300 - 301 - # 302 - # Generic Driver Options 303 - # 304 - CONFIG_STANDALONE=y 305 - CONFIG_PREVENT_FIRMWARE_BUILD=y 306 - # CONFIG_SYS_HYPERVISOR is not set 307 - 308 - # 309 - # Connector - unified userspace <-> kernelspace linker 310 - # 311 - # CONFIG_CONNECTOR is not set 312 - 313 - # 314 - # Memory Technology Devices (MTD) 315 - # 316 - # CONFIG_MTD is not set 317 - 318 - # 319 - # Parallel port support 320 - # 321 - # CONFIG_PARPORT is not set 322 - 323 - # 324 - # Plug and Play support 325 - # 326 - # CONFIG_PNPACPI is not set 327 - 328 - # 329 - # Block devices 330 - # 331 - # CONFIG_BLK_DEV_FD is not set 332 - # CONFIG_BLK_CPQ_DA is not set 333 - # CONFIG_BLK_CPQ_CISS_DA is not set 334 - # CONFIG_BLK_DEV_DAC960 is not set 335 - # CONFIG_BLK_DEV_UMEM is not set 336 - # CONFIG_BLK_DEV_COW_COMMON is not set 337 - CONFIG_BLK_DEV_LOOP=y 338 - # CONFIG_BLK_DEV_CRYPTOLOOP is not set 339 - # CONFIG_BLK_DEV_NBD is not set 340 - # CONFIG_BLK_DEV_SX8 is not set 341 - CONFIG_BLK_DEV_RAM=y 342 - CONFIG_BLK_DEV_RAM_COUNT=16 343 - CONFIG_BLK_DEV_RAM_SIZE=32768 344 - CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 345 - # CONFIG_CDROM_PKTCDVD is not set 346 - # CONFIG_ATA_OVER_ETH is not set 347 - 348 - # 349 - # Misc devices 350 - # 351 - # CONFIG_SGI_IOC4 is not set 352 - # CONFIG_TIFM_CORE is not set 353 - 354 - # 355 - # ATA/ATAPI/MFM/RLL support 356 - # 357 - # CONFIG_IDE is not set 358 - 359 - # 360 - # SCSI device support 361 - # 362 - # CONFIG_RAID_ATTRS is not set 363 - # CONFIG_SCSI is not set 364 - # CONFIG_SCSI_NETLINK is not set 365 - 366 - # 367 - # Serial ATA (prod) and Parallel ATA (experimental) drivers 368 - # 369 - # CONFIG_ATA is not set 370 - 371 - # 372 - # Multi-device support (RAID and LVM) 373 - # 374 - # CONFIG_MD is not set 375 - 376 - # 377 - # Fusion MPT device support 378 - # 379 - # CONFIG_FUSION is not set 380 - 381 - # 382 - # IEEE 1394 (FireWire) support 383 - # 384 - # CONFIG_IEEE1394 is not set 385 - 386 - # 387 - # I2O device support 388 - # 389 - # CONFIG_I2O is not set 390 - 391 - # 392 - # Macintosh device drivers 393 - # 394 - # CONFIG_MAC_EMUMOUSEBTN is not set 395 - # CONFIG_WINDFARM is not set 396 - 397 - # 398 - # Network device support 399 - # 400 - CONFIG_NETDEVICES=y 401 - # CONFIG_DUMMY is not set 402 - # CONFIG_BONDING is not set 403 - # CONFIG_EQUALIZER is not set 404 - # CONFIG_TUN is not set 405 - 406 - # 407 - # ARCnet devices 408 - # 409 - # CONFIG_ARCNET is not set 410 - 411 - # 412 - # PHY device support 413 - # 414 - CONFIG_PHYLIB=y 415 - 416 - # 417 - # MII PHY device drivers 418 - # 419 - # CONFIG_MARVELL_PHY is not set 420 - CONFIG_DAVICOM_PHY=y 421 - # CONFIG_QSEMI_PHY is not set 422 - # CONFIG_LXT_PHY is not set 423 - # CONFIG_CICADA_PHY is not set 424 - # CONFIG_VITESSE_PHY is not set 425 - # CONFIG_SMSC_PHY is not set 426 - # CONFIG_BROADCOM_PHY is not set 427 - # CONFIG_FIXED_PHY is not set 428 - 429 - # 430 - # Ethernet (10 or 100Mbit) 431 - # 432 - CONFIG_NET_ETHERNET=y 433 - CONFIG_MII=y 434 - # CONFIG_HAPPYMEAL is not set 435 - # CONFIG_SUNGEM is not set 436 - # CONFIG_CASSINI is not set 437 - # CONFIG_NET_VENDOR_3COM is not set 438 - 439 - # 440 - # Tulip family network device support 441 - # 442 - # CONFIG_NET_TULIP is not set 443 - # CONFIG_HP100 is not set 444 - # CONFIG_NET_PCI is not set 445 - CONFIG_FS_ENET=y 446 - # CONFIG_FS_ENET_HAS_SCC is not set 447 - CONFIG_FS_ENET_HAS_FCC=y 448 - 449 - # 450 - # Ethernet (1000 Mbit) 451 - # 452 - # CONFIG_ACENIC is not set 453 - # CONFIG_DL2K is not set 454 - # CONFIG_E1000 is not set 455 - # CONFIG_NS83820 is not set 456 - # CONFIG_HAMACHI is not set 457 - # CONFIG_YELLOWFIN is not set 458 - # CONFIG_R8169 is not set 459 - # CONFIG_SIS190 is not set 460 - # CONFIG_SKGE is not set 461 - # CONFIG_SKY2 is not set 462 - # CONFIG_SK98LIN is not set 463 - # CONFIG_TIGON3 is not set 464 - # CONFIG_BNX2 is not set 465 - # CONFIG_QLA3XXX is not set 466 - # CONFIG_ATL1 is not set 467 - 468 - # 469 - # Ethernet (10000 Mbit) 470 - # 471 - # CONFIG_CHELSIO_T1 is not set 472 - # CONFIG_CHELSIO_T3 is not set 473 - # CONFIG_IXGB is not set 474 - # CONFIG_S2IO is not set 475 - # CONFIG_MYRI10GE is not set 476 - # CONFIG_NETXEN_NIC is not set 477 - 478 - # 479 - # Token Ring devices 480 - # 481 - # CONFIG_TR is not set 482 - 483 - # 484 - # Wireless LAN (non-hamradio) 485 - # 486 - # CONFIG_NET_RADIO is not set 487 - 488 - # 489 - # Wan interfaces 490 - # 491 - # CONFIG_WAN is not set 492 - # CONFIG_FDDI is not set 493 - # CONFIG_HIPPI is not set 494 - # CONFIG_PPP is not set 495 - # CONFIG_SLIP is not set 496 - # CONFIG_SHAPER is not set 497 - # CONFIG_NETCONSOLE is not set 498 - # CONFIG_NETPOLL is not set 499 - # CONFIG_NET_POLL_CONTROLLER is not set 500 - 501 - # 502 - # ISDN subsystem 503 - # 504 - # CONFIG_ISDN is not set 505 - 506 - # 507 - # Telephony Support 508 - # 509 - # CONFIG_PHONE is not set 510 - 511 - # 512 - # Input device support 513 - # 514 - CONFIG_INPUT=y 515 - # CONFIG_INPUT_FF_MEMLESS is not set 516 - 517 - # 518 - # Userland interfaces 519 - # 520 - # CONFIG_INPUT_MOUSEDEV is not set 521 - # CONFIG_INPUT_JOYDEV is not set 522 - # CONFIG_INPUT_TSDEV is not set 523 - # CONFIG_INPUT_EVDEV is not set 524 - # CONFIG_INPUT_EVBUG is not set 525 - 526 - # 527 - # Input Device Drivers 528 - # 529 - # CONFIG_INPUT_KEYBOARD is not set 530 - # CONFIG_INPUT_MOUSE is not set 531 - # CONFIG_INPUT_JOYSTICK is not set 532 - # CONFIG_INPUT_TOUCHSCREEN is not set 533 - # CONFIG_INPUT_MISC is not set 534 - 535 - # 536 - # Hardware I/O ports 537 - # 538 - # CONFIG_SERIO is not set 539 - # CONFIG_GAMEPORT is not set 540 - 541 - # 542 - # Character devices 543 - # 544 - # CONFIG_VT is not set 545 - # CONFIG_SERIAL_NONSTANDARD is not set 546 - 547 - # 548 - # Serial drivers 549 - # 550 - # CONFIG_SERIAL_8250 is not set 551 - 552 - # 553 - # Non-8250 serial port support 554 - # 555 - # CONFIG_SERIAL_UARTLITE is not set 556 - CONFIG_SERIAL_CORE=y 557 - CONFIG_SERIAL_CORE_CONSOLE=y 558 - CONFIG_SERIAL_CPM=y 559 - CONFIG_SERIAL_CPM_CONSOLE=y 560 - CONFIG_SERIAL_CPM_SCC1=y 561 - # CONFIG_SERIAL_CPM_SCC2 is not set 562 - # CONFIG_SERIAL_CPM_SCC3 is not set 563 - CONFIG_SERIAL_CPM_SCC4=y 564 - # CONFIG_SERIAL_CPM_SMC1 is not set 565 - # CONFIG_SERIAL_CPM_SMC2 is not set 566 - # CONFIG_SERIAL_JSM is not set 567 - CONFIG_UNIX98_PTYS=y 568 - CONFIG_LEGACY_PTYS=y 569 - CONFIG_LEGACY_PTY_COUNT=256 570 - 571 - # 572 - # IPMI 573 - # 574 - # CONFIG_IPMI_HANDLER is not set 575 - 576 - # 577 - # Watchdog Cards 578 - # 579 - # CONFIG_WATCHDOG is not set 580 - CONFIG_HW_RANDOM=y 581 - # CONFIG_NVRAM is not set 582 - CONFIG_GEN_RTC=y 583 - # CONFIG_GEN_RTC_X is not set 584 - # CONFIG_DTLK is not set 585 - # CONFIG_R3964 is not set 586 - # CONFIG_APPLICOM is not set 587 - # CONFIG_AGP is not set 588 - # CONFIG_DRM is not set 589 - # CONFIG_RAW_DRIVER is not set 590 - 591 - # 592 - # TPM devices 593 - # 594 - # CONFIG_TCG_TPM is not set 595 - 596 - # 597 - # I2C support 598 - # 599 - # CONFIG_I2C is not set 600 - 601 - # 602 - # SPI support 603 - # 604 - # CONFIG_SPI is not set 605 - # CONFIG_SPI_MASTER is not set 606 - 607 - # 608 - # Dallas's 1-wire bus 609 - # 610 - # CONFIG_W1 is not set 611 - 612 - # 613 - # Hardware Monitoring support 614 - # 615 - CONFIG_HWMON=y 616 - # CONFIG_HWMON_VID is not set 617 - # CONFIG_SENSORS_ABITUGURU is not set 618 - # CONFIG_SENSORS_F71805F is not set 619 - # CONFIG_SENSORS_PC87427 is not set 620 - # CONFIG_SENSORS_VT1211 is not set 621 - # CONFIG_HWMON_DEBUG_CHIP is not set 622 - 623 - # 624 - # Multifunction device drivers 625 - # 626 - # CONFIG_MFD_SM501 is not set 627 - 628 - # 629 - # Multimedia devices 630 - # 631 - # CONFIG_VIDEO_DEV is not set 632 - 633 - # 634 - # Digital Video Broadcasting Devices 635 - # 636 - # CONFIG_DVB is not set 637 - 638 - # 639 - # Graphics support 640 - # 641 - # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 642 - # CONFIG_FB is not set 643 - # CONFIG_FB_IBM_GXT4500 is not set 644 - 645 - # 646 - # Sound 647 - # 648 - # CONFIG_SOUND is not set 649 - 650 - # 651 - # HID Devices 652 - # 653 - CONFIG_HID=y 654 - # CONFIG_HID_DEBUG is not set 655 - 656 - # 657 - # USB support 658 - # 659 - CONFIG_USB_ARCH_HAS_HCD=y 660 - CONFIG_USB_ARCH_HAS_OHCI=y 661 - CONFIG_USB_ARCH_HAS_EHCI=y 662 - # CONFIG_USB is not set 663 - 664 - # 665 - # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 666 - # 667 - 668 - # 669 - # USB Gadget Support 670 - # 671 - # CONFIG_USB_GADGET is not set 672 - 673 - # 674 - # MMC/SD Card support 675 - # 676 - # CONFIG_MMC is not set 677 - 678 - # 679 - # LED devices 680 - # 681 - # CONFIG_NEW_LEDS is not set 682 - 683 - # 684 - # LED drivers 685 - # 686 - 687 - # 688 - # LED Triggers 689 - # 690 - 691 - # 692 - # InfiniBand support 693 - # 694 - # CONFIG_INFINIBAND is not set 695 - 696 - # 697 - # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 698 - # 699 - 700 - # 701 - # Real Time Clock 702 - # 703 - # CONFIG_RTC_CLASS is not set 704 - 705 - # 706 - # DMA Engine support 707 - # 708 - # CONFIG_DMA_ENGINE is not set 709 - 710 - # 711 - # DMA Clients 712 - # 713 - 714 - # 715 - # DMA Devices 716 - # 717 - 718 - # 719 - # Auxiliary Display support 720 - # 721 - 722 - # 723 - # Virtualization 724 - # 725 - 726 - # 727 - # File systems 728 - # 729 - CONFIG_EXT2_FS=y 730 - # CONFIG_EXT2_FS_XATTR is not set 731 - # CONFIG_EXT2_FS_XIP is not set 732 - CONFIG_EXT3_FS=y 733 - CONFIG_EXT3_FS_XATTR=y 734 - # CONFIG_EXT3_FS_POSIX_ACL is not set 735 - # CONFIG_EXT3_FS_SECURITY is not set 736 - # CONFIG_EXT4DEV_FS is not set 737 - CONFIG_JBD=y 738 - # CONFIG_JBD_DEBUG is not set 739 - CONFIG_FS_MBCACHE=y 740 - # CONFIG_REISERFS_FS is not set 741 - # CONFIG_JFS_FS is not set 742 - CONFIG_FS_POSIX_ACL=y 743 - # CONFIG_XFS_FS is not set 744 - # CONFIG_GFS2_FS is not set 745 - # CONFIG_OCFS2_FS is not set 746 - # CONFIG_MINIX_FS is not set 747 - # CONFIG_ROMFS_FS is not set 748 - CONFIG_INOTIFY=y 749 - CONFIG_INOTIFY_USER=y 750 - # CONFIG_QUOTA is not set 751 - CONFIG_DNOTIFY=y 752 - # CONFIG_AUTOFS_FS is not set 753 - # CONFIG_AUTOFS4_FS is not set 754 - # CONFIG_FUSE_FS is not set 755 - 756 - # 757 - # CD-ROM/DVD Filesystems 758 - # 759 - # CONFIG_ISO9660_FS is not set 760 - # CONFIG_UDF_FS is not set 761 - 762 - # 763 - # DOS/FAT/NT Filesystems 764 - # 765 - # CONFIG_MSDOS_FS is not set 766 - # CONFIG_VFAT_FS is not set 767 - # CONFIG_NTFS_FS is not set 768 - 769 - # 770 - # Pseudo filesystems 771 - # 772 - CONFIG_PROC_FS=y 773 - CONFIG_PROC_KCORE=y 774 - CONFIG_PROC_SYSCTL=y 775 - CONFIG_SYSFS=y 776 - CONFIG_TMPFS=y 777 - # CONFIG_TMPFS_POSIX_ACL is not set 778 - # CONFIG_HUGETLB_PAGE is not set 779 - CONFIG_RAMFS=y 780 - # CONFIG_CONFIGFS_FS is not set 781 - 782 - # 783 - # Miscellaneous filesystems 784 - # 785 - # CONFIG_ADFS_FS is not set 786 - # CONFIG_AFFS_FS is not set 787 - # CONFIG_HFS_FS is not set 788 - # CONFIG_HFSPLUS_FS is not set 789 - # CONFIG_BEFS_FS is not set 790 - # CONFIG_BFS_FS is not set 791 - # CONFIG_EFS_FS is not set 792 - # CONFIG_CRAMFS is not set 793 - # CONFIG_VXFS_FS is not set 794 - # CONFIG_HPFS_FS is not set 795 - # CONFIG_QNX4FS_FS is not set 796 - # CONFIG_SYSV_FS is not set 797 - # CONFIG_UFS_FS is not set 798 - 799 - # 800 - # Network File Systems 801 - # 802 - CONFIG_NFS_FS=y 803 - CONFIG_NFS_V3=y 804 - CONFIG_NFS_V3_ACL=y 805 - CONFIG_NFS_V4=y 806 - # CONFIG_NFS_DIRECTIO is not set 807 - # CONFIG_NFSD is not set 808 - CONFIG_ROOT_NFS=y 809 - CONFIG_LOCKD=y 810 - CONFIG_LOCKD_V4=y 811 - CONFIG_NFS_ACL_SUPPORT=y 812 - CONFIG_NFS_COMMON=y 813 - CONFIG_SUNRPC=y 814 - CONFIG_SUNRPC_GSS=y 815 - CONFIG_RPCSEC_GSS_KRB5=y 816 - # CONFIG_RPCSEC_GSS_SPKM3 is not set 817 - # CONFIG_SMB_FS is not set 818 - # CONFIG_CIFS is not set 819 - # CONFIG_NCP_FS is not set 820 - # CONFIG_CODA_FS is not set 821 - # CONFIG_AFS_FS is not set 822 - # CONFIG_9P_FS is not set 823 - 824 - # 825 - # Partition Types 826 - # 827 - CONFIG_PARTITION_ADVANCED=y 828 - # CONFIG_ACORN_PARTITION is not set 829 - # CONFIG_OSF_PARTITION is not set 830 - # CONFIG_AMIGA_PARTITION is not set 831 - # CONFIG_ATARI_PARTITION is not set 832 - # CONFIG_MAC_PARTITION is not set 833 - # CONFIG_MSDOS_PARTITION is not set 834 - # CONFIG_LDM_PARTITION is not set 835 - # CONFIG_SGI_PARTITION is not set 836 - # CONFIG_ULTRIX_PARTITION is not set 837 - # CONFIG_SUN_PARTITION is not set 838 - # CONFIG_KARMA_PARTITION is not set 839 - # CONFIG_EFI_PARTITION is not set 840 - 841 - # 842 - # Native Language Support 843 - # 844 - # CONFIG_NLS is not set 845 - 846 - # 847 - # Distributed Lock Manager 848 - # 849 - # CONFIG_DLM is not set 850 - # CONFIG_SCC_ENET is not set 851 - # CONFIG_FEC_ENET is not set 852 - 853 - # 854 - # CPM2 Options 855 - # 856 - 857 - # 858 - # Library routines 859 - # 860 - # CONFIG_CRC_CCITT is not set 861 - # CONFIG_CRC16 is not set 862 - # CONFIG_CRC32 is not set 863 - # CONFIG_LIBCRC32C is not set 864 - CONFIG_PLIST=y 865 - CONFIG_HAS_IOMEM=y 866 - CONFIG_HAS_IOPORT=y 867 - # CONFIG_PROFILING is not set 868 - 869 - # 870 - # Kernel hacking 871 - # 872 - # CONFIG_PRINTK_TIME is not set 873 - CONFIG_ENABLE_MUST_CHECK=y 874 - # CONFIG_MAGIC_SYSRQ is not set 875 - # CONFIG_UNUSED_SYMBOLS is not set 876 - # CONFIG_DEBUG_FS is not set 877 - # CONFIG_HEADERS_CHECK is not set 878 - # CONFIG_DEBUG_KERNEL is not set 879 - CONFIG_LOG_BUF_SHIFT=14 880 - # CONFIG_DEBUG_BUGVERBOSE is not set 881 - # CONFIG_KGDB_CONSOLE is not set 882 - 883 - # 884 - # Security options 885 - # 886 - # CONFIG_KEYS is not set 887 - # CONFIG_SECURITY is not set 888 - 889 - # 890 - # Cryptographic options 891 - # 892 - CONFIG_CRYPTO=y 893 - CONFIG_CRYPTO_ALGAPI=y 894 - CONFIG_CRYPTO_BLKCIPHER=y 895 - CONFIG_CRYPTO_MANAGER=y 896 - # CONFIG_CRYPTO_HMAC is not set 897 - # CONFIG_CRYPTO_XCBC is not set 898 - # CONFIG_CRYPTO_NULL is not set 899 - # CONFIG_CRYPTO_MD4 is not set 900 - CONFIG_CRYPTO_MD5=y 901 - # CONFIG_CRYPTO_SHA1 is not set 902 - # CONFIG_CRYPTO_SHA256 is not set 903 - # CONFIG_CRYPTO_SHA512 is not set 904 - # CONFIG_CRYPTO_WP512 is not set 905 - # CONFIG_CRYPTO_TGR192 is not set 906 - # CONFIG_CRYPTO_GF128MUL is not set 907 - CONFIG_CRYPTO_ECB=y 908 - CONFIG_CRYPTO_CBC=y 909 - CONFIG_CRYPTO_PCBC=y 910 - # CONFIG_CRYPTO_LRW is not set 911 - CONFIG_CRYPTO_DES=y 912 - # CONFIG_CRYPTO_FCRYPT is not set 913 - # CONFIG_CRYPTO_BLOWFISH is not set 914 - # CONFIG_CRYPTO_TWOFISH is not set 915 - # CONFIG_CRYPTO_SERPENT is not set 916 - # CONFIG_CRYPTO_AES is not set 917 - # CONFIG_CRYPTO_CAST5 is not set 918 - # CONFIG_CRYPTO_CAST6 is not set 919 - # CONFIG_CRYPTO_TEA is not set 920 - # CONFIG_CRYPTO_ARC4 is not set 921 - # CONFIG_CRYPTO_KHAZAD is not set 922 - # CONFIG_CRYPTO_ANUBIS is not set 923 - # CONFIG_CRYPTO_DEFLATE is not set 924 - # CONFIG_CRYPTO_MICHAEL_MIC is not set 925 - # CONFIG_CRYPTO_CRC32C is not set 926 - # CONFIG_CRYPTO_CAMELLIA is not set 927 - 928 - # 929 - # Hardware crypto devices 930 - #
-633
arch/ppc/configs/mpc86x_ads_defconfig
··· 1 - # 2 - # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.12-rc4 4 - # Tue Jun 14 13:36:35 2005 5 - # 6 - CONFIG_MMU=y 7 - CONFIG_GENERIC_HARDIRQS=y 8 - CONFIG_RWSEM_XCHGADD_ALGORITHM=y 9 - CONFIG_GENERIC_CALIBRATE_DELAY=y 10 - CONFIG_HAVE_DEC_LOCK=y 11 - CONFIG_PPC=y 12 - CONFIG_PPC32=y 13 - CONFIG_GENERIC_NVRAM=y 14 - CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 15 - 16 - # 17 - # Code maturity level options 18 - # 19 - CONFIG_EXPERIMENTAL=y 20 - # CONFIG_CLEAN_COMPILE is not set 21 - CONFIG_BROKEN=y 22 - CONFIG_BROKEN_ON_SMP=y 23 - CONFIG_INIT_ENV_ARG_LIMIT=32 24 - 25 - # 26 - # General setup 27 - # 28 - CONFIG_LOCALVERSION="" 29 - # CONFIG_SWAP is not set 30 - CONFIG_SYSVIPC=y 31 - # CONFIG_POSIX_MQUEUE is not set 32 - # CONFIG_BSD_PROCESS_ACCT is not set 33 - CONFIG_SYSCTL=y 34 - # CONFIG_AUDIT is not set 35 - # CONFIG_HOTPLUG is not set 36 - CONFIG_KOBJECT_UEVENT=y 37 - # CONFIG_IKCONFIG is not set 38 - CONFIG_EMBEDDED=y 39 - # CONFIG_KALLSYMS is not set 40 - CONFIG_PRINTK=y 41 - CONFIG_BUG=y 42 - # CONFIG_BASE_FULL is not set 43 - CONFIG_FUTEX=y 44 - # CONFIG_EPOLL is not set 45 - # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 46 - # CONFIG_SHMEM is not set 47 - CONFIG_CC_ALIGN_FUNCTIONS=0 48 - CONFIG_CC_ALIGN_LABELS=0 49 - CONFIG_CC_ALIGN_LOOPS=0 50 - CONFIG_CC_ALIGN_JUMPS=0 51 - CONFIG_TINY_SHMEM=y 52 - CONFIG_BASE_SMALL=1 53 - 54 - # 55 - # Loadable module support 56 - # 57 - CONFIG_MODULES=y 58 - # CONFIG_MODULE_UNLOAD is not set 59 - CONFIG_OBSOLETE_MODPARM=y 60 - # CONFIG_MODVERSIONS is not set 61 - # CONFIG_MODULE_SRCVERSION_ALL is not set 62 - # CONFIG_KMOD is not set 63 - 64 - # 65 - # Processor 66 - # 67 - # CONFIG_6xx is not set 68 - # CONFIG_40x is not set 69 - # CONFIG_44x is not set 70 - # CONFIG_POWER3 is not set 71 - # CONFIG_POWER4 is not set 72 - CONFIG_8xx=y 73 - # CONFIG_E500 is not set 74 - # CONFIG_MATH_EMULATION is not set 75 - # CONFIG_CPU_FREQ is not set 76 - CONFIG_EMBEDDEDBOOT=y 77 - # CONFIG_PM is not set 78 - CONFIG_NOT_COHERENT_CACHE=y 79 - 80 - # 81 - # Platform options 82 - # 83 - CONFIG_FADS=y 84 - # CONFIG_RPXLITE is not set 85 - # CONFIG_RPXCLASSIC is not set 86 - # CONFIG_BSEIP is not set 87 - # CONFIG_MPC8XXFADS is not set 88 - CONFIG_MPC86XADS=y 89 - # CONFIG_TQM823L is not set 90 - # CONFIG_TQM850L is not set 91 - # CONFIG_TQM855L is not set 92 - # CONFIG_TQM860L is not set 93 - # CONFIG_FPS850L is not set 94 - # CONFIG_SPD823TS is not set 95 - # CONFIG_IVMS8 is not set 96 - # CONFIG_IVML24 is not set 97 - # CONFIG_SM850 is not set 98 - # CONFIG_HERMES_PRO is not set 99 - # CONFIG_IP860 is not set 100 - # CONFIG_LWMON is not set 101 - # CONFIG_PCU_E is not set 102 - # CONFIG_CCM is not set 103 - # CONFIG_LANTEC is not set 104 - # CONFIG_MBX is not set 105 - # CONFIG_WINCEPT is not set 106 - # CONFIG_SMP is not set 107 - # CONFIG_PREEMPT is not set 108 - # CONFIG_HIGHMEM is not set 109 - CONFIG_BINFMT_ELF=y 110 - # CONFIG_BINFMT_MISC is not set 111 - # CONFIG_CMDLINE_BOOL is not set 112 - CONFIG_ISA_DMA_API=y 113 - 114 - # 115 - # Bus options 116 - # 117 - # CONFIG_PCI is not set 118 - # CONFIG_PCI_DOMAINS is not set 119 - # CONFIG_PCI_QSPAN is not set 120 - 121 - # 122 - # PCCARD (PCMCIA/CardBus) support 123 - # 124 - # CONFIG_PCCARD is not set 125 - 126 - # 127 - # Advanced setup 128 - # 129 - # CONFIG_ADVANCED_OPTIONS is not set 130 - 131 - # 132 - # Default settings for advanced configuration options are used 133 - # 134 - CONFIG_HIGHMEM_START=0xfe000000 135 - CONFIG_LOWMEM_SIZE=0x30000000 136 - CONFIG_KERNEL_START=0xc0000000 137 - CONFIG_TASK_SIZE=0x80000000 138 - CONFIG_CONSISTENT_START=0xff100000 139 - CONFIG_CONSISTENT_SIZE=0x00200000 140 - CONFIG_BOOT_LOAD=0x00400000 141 - 142 - # 143 - # Device Drivers 144 - # 145 - 146 - # 147 - # Generic Driver Options 148 - # 149 - # CONFIG_STANDALONE is not set 150 - CONFIG_PREVENT_FIRMWARE_BUILD=y 151 - # CONFIG_FW_LOADER is not set 152 - 153 - # 154 - # Memory Technology Devices (MTD) 155 - # 156 - # CONFIG_MTD is not set 157 - 158 - # 159 - # Parallel port support 160 - # 161 - # CONFIG_PARPORT is not set 162 - 163 - # 164 - # Plug and Play support 165 - # 166 - 167 - # 168 - # Block devices 169 - # 170 - # CONFIG_BLK_DEV_FD is not set 171 - # CONFIG_BLK_DEV_COW_COMMON is not set 172 - CONFIG_BLK_DEV_LOOP=y 173 - # CONFIG_BLK_DEV_CRYPTOLOOP is not set 174 - # CONFIG_BLK_DEV_NBD is not set 175 - # CONFIG_BLK_DEV_RAM is not set 176 - CONFIG_BLK_DEV_RAM_COUNT=16 177 - CONFIG_INITRAMFS_SOURCE="" 178 - # CONFIG_LBD is not set 179 - # CONFIG_CDROM_PKTCDVD is not set 180 - 181 - # 182 - # IO Schedulers 183 - # 184 - CONFIG_IOSCHED_NOOP=y 185 - CONFIG_IOSCHED_AS=y 186 - CONFIG_IOSCHED_DEADLINE=y 187 - CONFIG_IOSCHED_CFQ=y 188 - # CONFIG_ATA_OVER_ETH is not set 189 - 190 - # 191 - # ATA/ATAPI/MFM/RLL support 192 - # 193 - # CONFIG_IDE is not set 194 - 195 - # 196 - # SCSI device support 197 - # 198 - # CONFIG_SCSI is not set 199 - 200 - # 201 - # Multi-device support (RAID and LVM) 202 - # 203 - # CONFIG_MD is not set 204 - 205 - # 206 - # Fusion MPT device support 207 - # 208 - 209 - # 210 - # IEEE 1394 (FireWire) support 211 - # 212 - # CONFIG_IEEE1394 is not set 213 - 214 - # 215 - # I2O device support 216 - # 217 - 218 - # 219 - # Macintosh device drivers 220 - # 221 - 222 - # 223 - # Networking support 224 - # 225 - CONFIG_NET=y 226 - 227 - # 228 - # Networking options 229 - # 230 - CONFIG_PACKET=y 231 - # CONFIG_PACKET_MMAP is not set 232 - CONFIG_UNIX=y 233 - # CONFIG_NET_KEY is not set 234 - CONFIG_INET=y 235 - # CONFIG_IP_MULTICAST is not set 236 - # CONFIG_IP_ADVANCED_ROUTER is not set 237 - CONFIG_IP_PNP=y 238 - CONFIG_IP_PNP_DHCP=y 239 - # CONFIG_IP_PNP_BOOTP is not set 240 - # CONFIG_IP_PNP_RARP is not set 241 - # CONFIG_NET_IPIP is not set 242 - # CONFIG_NET_IPGRE is not set 243 - # CONFIG_ARPD is not set 244 - # CONFIG_SYN_COOKIES is not set 245 - # CONFIG_INET_AH is not set 246 - # CONFIG_INET_ESP is not set 247 - # CONFIG_INET_IPCOMP is not set 248 - # CONFIG_INET_TUNNEL is not set 249 - CONFIG_IP_TCPDIAG=y 250 - # CONFIG_IP_TCPDIAG_IPV6 is not set 251 - CONFIG_IPV6=m 252 - # CONFIG_IPV6_PRIVACY is not set 253 - # CONFIG_INET6_AH is not set 254 - # CONFIG_INET6_ESP is not set 255 - # CONFIG_INET6_IPCOMP is not set 256 - # CONFIG_INET6_TUNNEL is not set 257 - # CONFIG_IPV6_TUNNEL is not set 258 - # CONFIG_NETFILTER is not set 259 - 260 - # 261 - # SCTP Configuration (EXPERIMENTAL) 262 - # 263 - # CONFIG_IP_SCTP is not set 264 - # CONFIG_ATM is not set 265 - # CONFIG_BRIDGE is not set 266 - # CONFIG_VLAN_8021Q is not set 267 - # CONFIG_DECNET is not set 268 - # CONFIG_LLC2 is not set 269 - # CONFIG_IPX is not set 270 - # CONFIG_ATALK is not set 271 - # CONFIG_X25 is not set 272 - # CONFIG_LAPB is not set 273 - # CONFIG_NET_DIVERT is not set 274 - # CONFIG_ECONET is not set 275 - # CONFIG_WAN_ROUTER is not set 276 - 277 - # 278 - # QoS and/or fair queueing 279 - # 280 - # CONFIG_NET_SCHED is not set 281 - # CONFIG_NET_CLS_ROUTE is not set 282 - 283 - # 284 - # Network testing 285 - # 286 - # CONFIG_NET_PKTGEN is not set 287 - # CONFIG_NETPOLL is not set 288 - # CONFIG_NET_POLL_CONTROLLER is not set 289 - # CONFIG_HAMRADIO is not set 290 - # CONFIG_IRDA is not set 291 - # CONFIG_BT is not set 292 - CONFIG_NETDEVICES=y 293 - # CONFIG_DUMMY is not set 294 - # CONFIG_BONDING is not set 295 - # CONFIG_EQUALIZER is not set 296 - # CONFIG_TUN is not set 297 - 298 - # 299 - # Ethernet (10 or 100Mbit) 300 - # 301 - CONFIG_NET_ETHERNET=y 302 - # CONFIG_MII is not set 303 - # CONFIG_OAKNET is not set 304 - 305 - # 306 - # Ethernet (1000 Mbit) 307 - # 308 - 309 - # 310 - # Ethernet (10000 Mbit) 311 - # 312 - 313 - # 314 - # Token Ring devices 315 - # 316 - 317 - # 318 - # Wireless LAN (non-hamradio) 319 - # 320 - # CONFIG_NET_RADIO is not set 321 - 322 - # 323 - # Wan interfaces 324 - # 325 - # CONFIG_WAN is not set 326 - # CONFIG_PPP is not set 327 - # CONFIG_SLIP is not set 328 - # CONFIG_SHAPER is not set 329 - # CONFIG_NETCONSOLE is not set 330 - 331 - # 332 - # ISDN subsystem 333 - # 334 - # CONFIG_ISDN is not set 335 - 336 - # 337 - # Telephony Support 338 - # 339 - # CONFIG_PHONE is not set 340 - 341 - # 342 - # Input device support 343 - # 344 - # CONFIG_INPUT is not set 345 - 346 - # 347 - # Hardware I/O ports 348 - # 349 - # CONFIG_SERIO is not set 350 - # CONFIG_GAMEPORT is not set 351 - CONFIG_SOUND_GAMEPORT=y 352 - 353 - # 354 - # Character devices 355 - # 356 - # CONFIG_VT is not set 357 - # CONFIG_SERIAL_NONSTANDARD is not set 358 - 359 - # 360 - # Serial drivers 361 - # 362 - # CONFIG_SERIAL_8250 is not set 363 - 364 - # 365 - # Non-8250 serial port support 366 - # 367 - CONFIG_SERIAL_CORE=y 368 - CONFIG_SERIAL_CORE_CONSOLE=y 369 - CONFIG_SERIAL_CPM=y 370 - CONFIG_SERIAL_CPM_CONSOLE=y 371 - # CONFIG_SERIAL_CPM_SCC1 is not set 372 - # CONFIG_SERIAL_CPM_SCC2 is not set 373 - # CONFIG_SERIAL_CPM_SCC3 is not set 374 - # CONFIG_SERIAL_CPM_SCC4 is not set 375 - CONFIG_SERIAL_CPM_SMC1=y 376 - # CONFIG_SERIAL_CPM_SMC2 is not set 377 - CONFIG_UNIX98_PTYS=y 378 - # CONFIG_LEGACY_PTYS is not set 379 - 380 - # 381 - # IPMI 382 - # 383 - # CONFIG_IPMI_HANDLER is not set 384 - 385 - # 386 - # Watchdog Cards 387 - # 388 - # CONFIG_WATCHDOG is not set 389 - # CONFIG_NVRAM is not set 390 - # CONFIG_GEN_RTC is not set 391 - # CONFIG_DTLK is not set 392 - # CONFIG_R3964 is not set 393 - 394 - # 395 - # Ftape, the floppy tape device driver 396 - # 397 - # CONFIG_AGP is not set 398 - # CONFIG_DRM is not set 399 - # CONFIG_RAW_DRIVER is not set 400 - 401 - # 402 - # TPM devices 403 - # 404 - 405 - # 406 - # I2C support 407 - # 408 - # CONFIG_I2C is not set 409 - 410 - # 411 - # Dallas's 1-wire bus 412 - # 413 - # CONFIG_W1 is not set 414 - 415 - # 416 - # Misc devices 417 - # 418 - 419 - # 420 - # Multimedia devices 421 - # 422 - # CONFIG_VIDEO_DEV is not set 423 - 424 - # 425 - # Digital Video Broadcasting Devices 426 - # 427 - # CONFIG_DVB is not set 428 - 429 - # 430 - # Graphics support 431 - # 432 - # CONFIG_FB is not set 433 - 434 - # 435 - # Sound 436 - # 437 - # CONFIG_SOUND is not set 438 - 439 - # 440 - # USB support 441 - # 442 - # CONFIG_USB_ARCH_HAS_HCD is not set 443 - # CONFIG_USB_ARCH_HAS_OHCI is not set 444 - 445 - # 446 - # USB Gadget Support 447 - # 448 - # CONFIG_USB_GADGET is not set 449 - 450 - # 451 - # MMC/SD Card support 452 - # 453 - # CONFIG_MMC is not set 454 - 455 - # 456 - # InfiniBand support 457 - # 458 - # CONFIG_INFINIBAND is not set 459 - 460 - # 461 - # File systems 462 - # 463 - # CONFIG_EXT2_FS is not set 464 - CONFIG_EXT3_FS=y 465 - # CONFIG_EXT3_FS_XATTR is not set 466 - CONFIG_JBD=y 467 - # CONFIG_JBD_DEBUG is not set 468 - # CONFIG_REISERFS_FS is not set 469 - # CONFIG_JFS_FS is not set 470 - 471 - # 472 - # XFS support 473 - # 474 - # CONFIG_XFS_FS is not set 475 - # CONFIG_MINIX_FS is not set 476 - # CONFIG_ROMFS_FS is not set 477 - # CONFIG_QUOTA is not set 478 - # CONFIG_DNOTIFY is not set 479 - # CONFIG_AUTOFS_FS is not set 480 - # CONFIG_AUTOFS4_FS is not set 481 - 482 - # 483 - # CD-ROM/DVD Filesystems 484 - # 485 - # CONFIG_ISO9660_FS is not set 486 - # CONFIG_UDF_FS is not set 487 - 488 - # 489 - # DOS/FAT/NT Filesystems 490 - # 491 - # CONFIG_MSDOS_FS is not set 492 - # CONFIG_VFAT_FS is not set 493 - # CONFIG_NTFS_FS is not set 494 - 495 - # 496 - # Pseudo filesystems 497 - # 498 - CONFIG_PROC_FS=y 499 - CONFIG_PROC_KCORE=y 500 - CONFIG_SYSFS=y 501 - # CONFIG_DEVFS_FS is not set 502 - # CONFIG_DEVPTS_FS_XATTR is not set 503 - # CONFIG_TMPFS is not set 504 - # CONFIG_HUGETLBFS is not set 505 - # CONFIG_HUGETLB_PAGE is not set 506 - CONFIG_RAMFS=y 507 - 508 - # 509 - # Miscellaneous filesystems 510 - # 511 - # CONFIG_ADFS_FS is not set 512 - # CONFIG_AFFS_FS is not set 513 - # CONFIG_HFS_FS is not set 514 - # CONFIG_HFSPLUS_FS is not set 515 - # CONFIG_BEFS_FS is not set 516 - # CONFIG_BFS_FS is not set 517 - # CONFIG_EFS_FS is not set 518 - # CONFIG_CRAMFS is not set 519 - # CONFIG_VXFS_FS is not set 520 - # CONFIG_HPFS_FS is not set 521 - # CONFIG_QNX4FS_FS is not set 522 - # CONFIG_SYSV_FS is not set 523 - # CONFIG_UFS_FS is not set 524 - 525 - # 526 - # Network File Systems 527 - # 528 - CONFIG_NFS_FS=y 529 - CONFIG_NFS_V3=y 530 - CONFIG_NFS_V4=y 531 - # CONFIG_NFS_DIRECTIO is not set 532 - # CONFIG_NFSD is not set 533 - CONFIG_ROOT_NFS=y 534 - CONFIG_LOCKD=y 535 - CONFIG_LOCKD_V4=y 536 - CONFIG_SUNRPC=y 537 - CONFIG_SUNRPC_GSS=y 538 - CONFIG_RPCSEC_GSS_KRB5=y 539 - # CONFIG_RPCSEC_GSS_SPKM3 is not set 540 - # CONFIG_SMB_FS is not set 541 - # CONFIG_CIFS is not set 542 - # CONFIG_NCP_FS is not set 543 - # CONFIG_CODA_FS is not set 544 - # CONFIG_AFS_FS is not set 545 - 546 - # 547 - # Partition Types 548 - # 549 - # CONFIG_PARTITION_ADVANCED is not set 550 - CONFIG_MSDOS_PARTITION=y 551 - 552 - # 553 - # Native Language Support 554 - # 555 - # CONFIG_NLS is not set 556 - 557 - # 558 - # MPC8xx CPM Options 559 - # 560 - CONFIG_SCC_ENET=y 561 - CONFIG_SCC1_ENET=y 562 - # CONFIG_SCC2_ENET is not set 563 - # CONFIG_SCC3_ENET is not set 564 - # CONFIG_FEC_ENET is not set 565 - # CONFIG_ENET_BIG_BUFFERS is not set 566 - 567 - # 568 - # Generic MPC8xx Options 569 - # 570 - # CONFIG_8xx_COPYBACK is not set 571 - # CONFIG_8xx_CPU6 is not set 572 - CONFIG_NO_UCODE_PATCH=y 573 - # CONFIG_USB_SOF_UCODE_PATCH is not set 574 - # CONFIG_I2C_SPI_UCODE_PATCH is not set 575 - # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set 576 - 577 - # 578 - # Library routines 579 - # 580 - # CONFIG_CRC_CCITT is not set 581 - # CONFIG_CRC32 is not set 582 - # CONFIG_LIBCRC32C is not set 583 - 584 - # 585 - # Profiling support 586 - # 587 - # CONFIG_PROFILING is not set 588 - 589 - # 590 - # Kernel hacking 591 - # 592 - # CONFIG_PRINTK_TIME is not set 593 - # CONFIG_DEBUG_KERNEL is not set 594 - CONFIG_LOG_BUF_SHIFT=14 595 - 596 - # 597 - # Security options 598 - # 599 - # CONFIG_KEYS is not set 600 - # CONFIG_SECURITY is not set 601 - 602 - # 603 - # Cryptographic options 604 - # 605 - CONFIG_CRYPTO=y 606 - # CONFIG_CRYPTO_HMAC is not set 607 - # CONFIG_CRYPTO_NULL is not set 608 - # CONFIG_CRYPTO_MD4 is not set 609 - CONFIG_CRYPTO_MD5=y 610 - # CONFIG_CRYPTO_SHA1 is not set 611 - # CONFIG_CRYPTO_SHA256 is not set 612 - # CONFIG_CRYPTO_SHA512 is not set 613 - # CONFIG_CRYPTO_WP512 is not set 614 - # CONFIG_CRYPTO_TGR192 is not set 615 - CONFIG_CRYPTO_DES=y 616 - # CONFIG_CRYPTO_BLOWFISH is not set 617 - # CONFIG_CRYPTO_TWOFISH is not set 618 - # CONFIG_CRYPTO_SERPENT is not set 619 - # CONFIG_CRYPTO_AES is not set 620 - # CONFIG_CRYPTO_CAST5 is not set 621 - # CONFIG_CRYPTO_CAST6 is not set 622 - # CONFIG_CRYPTO_TEA is not set 623 - # CONFIG_CRYPTO_ARC4 is not set 624 - # CONFIG_CRYPTO_KHAZAD is not set 625 - # CONFIG_CRYPTO_ANUBIS is not set 626 - # CONFIG_CRYPTO_DEFLATE is not set 627 - # CONFIG_CRYPTO_MICHAEL_MIC is not set 628 - # CONFIG_CRYPTO_CRC32C is not set 629 - # CONFIG_CRYPTO_TEST is not set 630 - 631 - # 632 - # Hardware crypto devices 633 - #
-622
arch/ppc/configs/mpc885ads_defconfig
··· 1 - # 2 - # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.12-rc6 4 - # Thu Jun 9 21:17:29 2005 5 - # 6 - CONFIG_MMU=y 7 - CONFIG_GENERIC_HARDIRQS=y 8 - CONFIG_RWSEM_XCHGADD_ALGORITHM=y 9 - CONFIG_GENERIC_CALIBRATE_DELAY=y 10 - CONFIG_HAVE_DEC_LOCK=y 11 - CONFIG_PPC=y 12 - CONFIG_PPC32=y 13 - CONFIG_GENERIC_NVRAM=y 14 - CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 15 - 16 - # 17 - # Code maturity level options 18 - # 19 - CONFIG_EXPERIMENTAL=y 20 - # CONFIG_CLEAN_COMPILE is not set 21 - CONFIG_BROKEN=y 22 - CONFIG_BROKEN_ON_SMP=y 23 - CONFIG_INIT_ENV_ARG_LIMIT=32 24 - 25 - # 26 - # General setup 27 - # 28 - CONFIG_LOCALVERSION="" 29 - # CONFIG_SWAP is not set 30 - CONFIG_SYSVIPC=y 31 - # CONFIG_POSIX_MQUEUE is not set 32 - # CONFIG_BSD_PROCESS_ACCT is not set 33 - CONFIG_SYSCTL=y 34 - # CONFIG_AUDIT is not set 35 - CONFIG_HOTPLUG=y 36 - CONFIG_KOBJECT_UEVENT=y 37 - # CONFIG_IKCONFIG is not set 38 - CONFIG_EMBEDDED=y 39 - # CONFIG_KALLSYMS is not set 40 - CONFIG_PRINTK=y 41 - CONFIG_BUG=y 42 - CONFIG_BASE_FULL=y 43 - CONFIG_FUTEX=y 44 - # CONFIG_EPOLL is not set 45 - # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 46 - CONFIG_SHMEM=y 47 - CONFIG_CC_ALIGN_FUNCTIONS=0 48 - CONFIG_CC_ALIGN_LABELS=0 49 - CONFIG_CC_ALIGN_LOOPS=0 50 - CONFIG_CC_ALIGN_JUMPS=0 51 - # CONFIG_TINY_SHMEM is not set 52 - CONFIG_BASE_SMALL=0 53 - 54 - # 55 - # Loadable module support 56 - # 57 - # CONFIG_MODULES is not set 58 - 59 - # 60 - # Processor 61 - # 62 - # CONFIG_6xx is not set 63 - # CONFIG_40x is not set 64 - # CONFIG_44x is not set 65 - # CONFIG_POWER3 is not set 66 - # CONFIG_POWER4 is not set 67 - CONFIG_8xx=y 68 - # CONFIG_E500 is not set 69 - # CONFIG_MATH_EMULATION is not set 70 - # CONFIG_CPU_FREQ is not set 71 - CONFIG_EMBEDDEDBOOT=y 72 - # CONFIG_PM is not set 73 - CONFIG_NOT_COHERENT_CACHE=y 74 - 75 - # 76 - # Platform options 77 - # 78 - # CONFIG_RPXLITE is not set 79 - # CONFIG_RPXCLASSIC is not set 80 - # CONFIG_BSEIP is not set 81 - # CONFIG_FADS is not set 82 - CONFIG_MPC885ADS=y 83 - # CONFIG_TQM823L is not set 84 - # CONFIG_TQM850L is not set 85 - # CONFIG_TQM855L is not set 86 - # CONFIG_TQM860L is not set 87 - # CONFIG_FPS850L is not set 88 - # CONFIG_SPD823TS is not set 89 - # CONFIG_IVMS8 is not set 90 - # CONFIG_IVML24 is not set 91 - # CONFIG_SM850 is not set 92 - # CONFIG_HERMES_PRO is not set 93 - # CONFIG_IP860 is not set 94 - # CONFIG_LWMON is not set 95 - # CONFIG_PCU_E is not set 96 - # CONFIG_CCM is not set 97 - # CONFIG_LANTEC is not set 98 - # CONFIG_MBX is not set 99 - # CONFIG_WINCEPT is not set 100 - # CONFIG_SMP is not set 101 - # CONFIG_PREEMPT is not set 102 - # CONFIG_HIGHMEM is not set 103 - CONFIG_BINFMT_ELF=y 104 - # CONFIG_BINFMT_MISC is not set 105 - # CONFIG_CMDLINE_BOOL is not set 106 - CONFIG_ISA_DMA_API=y 107 - 108 - # 109 - # Bus options 110 - # 111 - # CONFIG_PCI is not set 112 - # CONFIG_PCI_DOMAINS is not set 113 - # CONFIG_PCI_QSPAN is not set 114 - 115 - # 116 - # PCCARD (PCMCIA/CardBus) support 117 - # 118 - # CONFIG_PCCARD is not set 119 - 120 - # 121 - # Advanced setup 122 - # 123 - # CONFIG_ADVANCED_OPTIONS is not set 124 - 125 - # 126 - # Default settings for advanced configuration options are used 127 - # 128 - CONFIG_HIGHMEM_START=0xfe000000 129 - CONFIG_LOWMEM_SIZE=0x30000000 130 - CONFIG_KERNEL_START=0xc0000000 131 - CONFIG_TASK_SIZE=0x80000000 132 - CONFIG_CONSISTENT_START=0xff100000 133 - CONFIG_CONSISTENT_SIZE=0x00200000 134 - CONFIG_BOOT_LOAD=0x00400000 135 - 136 - # 137 - # Device Drivers 138 - # 139 - 140 - # 141 - # Generic Driver Options 142 - # 143 - CONFIG_STANDALONE=y 144 - CONFIG_PREVENT_FIRMWARE_BUILD=y 145 - # CONFIG_FW_LOADER is not set 146 - 147 - # 148 - # Memory Technology Devices (MTD) 149 - # 150 - # CONFIG_MTD is not set 151 - 152 - # 153 - # Parallel port support 154 - # 155 - # CONFIG_PARPORT is not set 156 - 157 - # 158 - # Plug and Play support 159 - # 160 - 161 - # 162 - # Block devices 163 - # 164 - # CONFIG_BLK_DEV_FD is not set 165 - # CONFIG_BLK_DEV_COW_COMMON is not set 166 - # CONFIG_BLK_DEV_LOOP is not set 167 - # CONFIG_BLK_DEV_NBD is not set 168 - # CONFIG_BLK_DEV_RAM is not set 169 - CONFIG_BLK_DEV_RAM_COUNT=16 170 - CONFIG_INITRAMFS_SOURCE="" 171 - # CONFIG_LBD is not set 172 - # CONFIG_CDROM_PKTCDVD is not set 173 - 174 - # 175 - # IO Schedulers 176 - # 177 - CONFIG_IOSCHED_NOOP=y 178 - # CONFIG_IOSCHED_AS is not set 179 - # CONFIG_IOSCHED_DEADLINE is not set 180 - # CONFIG_IOSCHED_CFQ is not set 181 - # CONFIG_ATA_OVER_ETH is not set 182 - 183 - # 184 - # ATA/ATAPI/MFM/RLL support 185 - # 186 - # CONFIG_IDE is not set 187 - 188 - # 189 - # SCSI device support 190 - # 191 - # CONFIG_SCSI is not set 192 - 193 - # 194 - # Multi-device support (RAID and LVM) 195 - # 196 - # CONFIG_MD is not set 197 - 198 - # 199 - # Fusion MPT device support 200 - # 201 - 202 - # 203 - # IEEE 1394 (FireWire) support 204 - # 205 - # CONFIG_IEEE1394 is not set 206 - 207 - # 208 - # I2O device support 209 - # 210 - 211 - # 212 - # Macintosh device drivers 213 - # 214 - 215 - # 216 - # Networking support 217 - # 218 - CONFIG_NET=y 219 - 220 - # 221 - # Networking options 222 - # 223 - CONFIG_PACKET=y 224 - # CONFIG_PACKET_MMAP is not set 225 - CONFIG_UNIX=y 226 - # CONFIG_NET_KEY is not set 227 - CONFIG_INET=y 228 - # CONFIG_IP_MULTICAST is not set 229 - # CONFIG_IP_ADVANCED_ROUTER is not set 230 - CONFIG_IP_PNP=y 231 - CONFIG_IP_PNP_DHCP=y 232 - CONFIG_IP_PNP_BOOTP=y 233 - # CONFIG_IP_PNP_RARP is not set 234 - # CONFIG_NET_IPIP is not set 235 - # CONFIG_NET_IPGRE is not set 236 - # CONFIG_ARPD is not set 237 - # CONFIG_SYN_COOKIES is not set 238 - # CONFIG_INET_AH is not set 239 - # CONFIG_INET_ESP is not set 240 - # CONFIG_INET_IPCOMP is not set 241 - # CONFIG_INET_TUNNEL is not set 242 - CONFIG_IP_TCPDIAG=y 243 - # CONFIG_IP_TCPDIAG_IPV6 is not set 244 - # CONFIG_IPV6 is not set 245 - # CONFIG_NETFILTER is not set 246 - 247 - # 248 - # SCTP Configuration (EXPERIMENTAL) 249 - # 250 - # CONFIG_IP_SCTP is not set 251 - # CONFIG_ATM is not set 252 - # CONFIG_BRIDGE is not set 253 - # CONFIG_VLAN_8021Q is not set 254 - # CONFIG_DECNET is not set 255 - # CONFIG_LLC2 is not set 256 - # CONFIG_IPX is not set 257 - # CONFIG_ATALK is not set 258 - # CONFIG_X25 is not set 259 - # CONFIG_LAPB is not set 260 - # CONFIG_NET_DIVERT is not set 261 - # CONFIG_ECONET is not set 262 - # CONFIG_WAN_ROUTER is not set 263 - 264 - # 265 - # QoS and/or fair queueing 266 - # 267 - # CONFIG_NET_SCHED is not set 268 - # CONFIG_NET_CLS_ROUTE is not set 269 - 270 - # 271 - # Network testing 272 - # 273 - # CONFIG_NET_PKTGEN is not set 274 - # CONFIG_NETPOLL is not set 275 - # CONFIG_NET_POLL_CONTROLLER is not set 276 - # CONFIG_HAMRADIO is not set 277 - # CONFIG_IRDA is not set 278 - # CONFIG_BT is not set 279 - CONFIG_NETDEVICES=y 280 - # CONFIG_DUMMY is not set 281 - # CONFIG_BONDING is not set 282 - # CONFIG_EQUALIZER is not set 283 - # CONFIG_TUN is not set 284 - 285 - # 286 - # Ethernet (10 or 100Mbit) 287 - # 288 - CONFIG_NET_ETHERNET=y 289 - CONFIG_MII=y 290 - # CONFIG_OAKNET is not set 291 - 292 - # 293 - # Ethernet (1000 Mbit) 294 - # 295 - 296 - # 297 - # Ethernet (10000 Mbit) 298 - # 299 - 300 - # 301 - # Token Ring devices 302 - # 303 - 304 - # 305 - # Wireless LAN (non-hamradio) 306 - # 307 - # CONFIG_NET_RADIO is not set 308 - 309 - # 310 - # Wan interfaces 311 - # 312 - # CONFIG_WAN is not set 313 - CONFIG_PPP=y 314 - # CONFIG_PPP_MULTILINK is not set 315 - # CONFIG_PPP_FILTER is not set 316 - CONFIG_PPP_ASYNC=y 317 - CONFIG_PPP_SYNC_TTY=y 318 - CONFIG_PPP_DEFLATE=y 319 - # CONFIG_PPP_BSDCOMP is not set 320 - # CONFIG_PPPOE is not set 321 - # CONFIG_SLIP is not set 322 - # CONFIG_SHAPER is not set 323 - # CONFIG_NETCONSOLE is not set 324 - 325 - # 326 - # ISDN subsystem 327 - # 328 - # CONFIG_ISDN is not set 329 - 330 - # 331 - # Telephony Support 332 - # 333 - # CONFIG_PHONE is not set 334 - 335 - # 336 - # Input device support 337 - # 338 - # CONFIG_INPUT is not set 339 - 340 - # 341 - # Hardware I/O ports 342 - # 343 - # CONFIG_SERIO is not set 344 - # CONFIG_GAMEPORT is not set 345 - 346 - # 347 - # Character devices 348 - # 349 - # CONFIG_VT is not set 350 - # CONFIG_SERIAL_NONSTANDARD is not set 351 - 352 - # 353 - # Serial drivers 354 - # 355 - # CONFIG_SERIAL_8250 is not set 356 - 357 - # 358 - # Non-8250 serial port support 359 - # 360 - CONFIG_SERIAL_CORE=y 361 - CONFIG_SERIAL_CORE_CONSOLE=y 362 - CONFIG_SERIAL_CPM=y 363 - CONFIG_SERIAL_CPM_CONSOLE=y 364 - # CONFIG_SERIAL_CPM_SCC1 is not set 365 - # CONFIG_SERIAL_CPM_SCC2 is not set 366 - # CONFIG_SERIAL_CPM_SCC3 is not set 367 - # CONFIG_SERIAL_CPM_SCC4 is not set 368 - CONFIG_SERIAL_CPM_SMC1=y 369 - CONFIG_SERIAL_CPM_SMC2=y 370 - CONFIG_UNIX98_PTYS=y 371 - # CONFIG_LEGACY_PTYS is not set 372 - 373 - # 374 - # IPMI 375 - # 376 - # CONFIG_IPMI_HANDLER is not set 377 - 378 - # 379 - # Watchdog Cards 380 - # 381 - # CONFIG_WATCHDOG is not set 382 - # CONFIG_NVRAM is not set 383 - # CONFIG_GEN_RTC is not set 384 - # CONFIG_DTLK is not set 385 - # CONFIG_R3964 is not set 386 - 387 - # 388 - # Ftape, the floppy tape device driver 389 - # 390 - # CONFIG_AGP is not set 391 - # CONFIG_DRM is not set 392 - # CONFIG_RAW_DRIVER is not set 393 - 394 - # 395 - # TPM devices 396 - # 397 - 398 - # 399 - # I2C support 400 - # 401 - # CONFIG_I2C is not set 402 - 403 - # 404 - # Dallas's 1-wire bus 405 - # 406 - # CONFIG_W1 is not set 407 - 408 - # 409 - # Misc devices 410 - # 411 - 412 - # 413 - # Multimedia devices 414 - # 415 - # CONFIG_VIDEO_DEV is not set 416 - 417 - # 418 - # Digital Video Broadcasting Devices 419 - # 420 - # CONFIG_DVB is not set 421 - 422 - # 423 - # Graphics support 424 - # 425 - # CONFIG_FB is not set 426 - 427 - # 428 - # Sound 429 - # 430 - # CONFIG_SOUND is not set 431 - 432 - # 433 - # USB support 434 - # 435 - # CONFIG_USB_ARCH_HAS_HCD is not set 436 - # CONFIG_USB_ARCH_HAS_OHCI is not set 437 - 438 - # 439 - # USB Gadget Support 440 - # 441 - # CONFIG_USB_GADGET is not set 442 - 443 - # 444 - # MMC/SD Card support 445 - # 446 - # CONFIG_MMC is not set 447 - 448 - # 449 - # InfiniBand support 450 - # 451 - # CONFIG_INFINIBAND is not set 452 - 453 - # 454 - # File systems 455 - # 456 - CONFIG_EXT2_FS=y 457 - CONFIG_EXT2_FS_XATTR=y 458 - # CONFIG_EXT2_FS_POSIX_ACL is not set 459 - # CONFIG_EXT2_FS_SECURITY is not set 460 - CONFIG_EXT3_FS=y 461 - CONFIG_EXT3_FS_XATTR=y 462 - # CONFIG_EXT3_FS_POSIX_ACL is not set 463 - # CONFIG_EXT3_FS_SECURITY is not set 464 - CONFIG_JBD=y 465 - # CONFIG_JBD_DEBUG is not set 466 - CONFIG_FS_MBCACHE=y 467 - # CONFIG_REISERFS_FS is not set 468 - # CONFIG_JFS_FS is not set 469 - 470 - # 471 - # XFS support 472 - # 473 - # CONFIG_XFS_FS is not set 474 - # CONFIG_MINIX_FS is not set 475 - # CONFIG_ROMFS_FS is not set 476 - # CONFIG_QUOTA is not set 477 - # CONFIG_DNOTIFY is not set 478 - # CONFIG_AUTOFS_FS is not set 479 - # CONFIG_AUTOFS4_FS is not set 480 - 481 - # 482 - # CD-ROM/DVD Filesystems 483 - # 484 - # CONFIG_ISO9660_FS is not set 485 - # CONFIG_UDF_FS is not set 486 - 487 - # 488 - # DOS/FAT/NT Filesystems 489 - # 490 - # CONFIG_MSDOS_FS is not set 491 - # CONFIG_VFAT_FS is not set 492 - # CONFIG_NTFS_FS is not set 493 - 494 - # 495 - # Pseudo filesystems 496 - # 497 - CONFIG_PROC_FS=y 498 - # CONFIG_PROC_KCORE is not set 499 - CONFIG_SYSFS=y 500 - # CONFIG_DEVFS_FS is not set 501 - # CONFIG_DEVPTS_FS_XATTR is not set 502 - # CONFIG_TMPFS is not set 503 - # CONFIG_HUGETLBFS is not set 504 - # CONFIG_HUGETLB_PAGE is not set 505 - CONFIG_RAMFS=y 506 - 507 - # 508 - # Miscellaneous filesystems 509 - # 510 - # CONFIG_ADFS_FS is not set 511 - # CONFIG_AFFS_FS is not set 512 - # CONFIG_HFS_FS is not set 513 - # CONFIG_HFSPLUS_FS is not set 514 - # CONFIG_BEFS_FS is not set 515 - # CONFIG_BFS_FS is not set 516 - # CONFIG_EFS_FS is not set 517 - # CONFIG_CRAMFS is not set 518 - # CONFIG_VXFS_FS is not set 519 - # CONFIG_HPFS_FS is not set 520 - # CONFIG_QNX4FS_FS is not set 521 - # CONFIG_SYSV_FS is not set 522 - # CONFIG_UFS_FS is not set 523 - 524 - # 525 - # Network File Systems 526 - # 527 - CONFIG_NFS_FS=y 528 - # CONFIG_NFS_V3 is not set 529 - # CONFIG_NFS_V4 is not set 530 - # CONFIG_NFS_DIRECTIO is not set 531 - # CONFIG_NFSD is not set 532 - CONFIG_ROOT_NFS=y 533 - CONFIG_LOCKD=y 534 - CONFIG_SUNRPC=y 535 - # CONFIG_RPCSEC_GSS_KRB5 is not set 536 - # CONFIG_RPCSEC_GSS_SPKM3 is not set 537 - # CONFIG_SMB_FS is not set 538 - # CONFIG_CIFS is not set 539 - # CONFIG_NCP_FS is not set 540 - # CONFIG_CODA_FS is not set 541 - # CONFIG_AFS_FS is not set 542 - 543 - # 544 - # Partition Types 545 - # 546 - CONFIG_PARTITION_ADVANCED=y 547 - # CONFIG_ACORN_PARTITION is not set 548 - # CONFIG_OSF_PARTITION is not set 549 - # CONFIG_AMIGA_PARTITION is not set 550 - # CONFIG_ATARI_PARTITION is not set 551 - # CONFIG_MAC_PARTITION is not set 552 - CONFIG_MSDOS_PARTITION=y 553 - # CONFIG_BSD_DISKLABEL is not set 554 - # CONFIG_MINIX_SUBPARTITION is not set 555 - # CONFIG_SOLARIS_X86_PARTITION is not set 556 - # CONFIG_UNIXWARE_DISKLABEL is not set 557 - # CONFIG_LDM_PARTITION is not set 558 - # CONFIG_SGI_PARTITION is not set 559 - # CONFIG_ULTRIX_PARTITION is not set 560 - # CONFIG_SUN_PARTITION is not set 561 - # CONFIG_EFI_PARTITION is not set 562 - 563 - # 564 - # Native Language Support 565 - # 566 - # CONFIG_NLS is not set 567 - 568 - # 569 - # MPC8xx CPM Options 570 - # 571 - CONFIG_SCC_ENET=y 572 - # CONFIG_SCC1_ENET is not set 573 - # CONFIG_SCC2_ENET is not set 574 - CONFIG_SCC3_ENET=y 575 - # CONFIG_FEC_ENET is not set 576 - # CONFIG_ENET_BIG_BUFFERS is not set 577 - 578 - # 579 - # Generic MPC8xx Options 580 - # 581 - CONFIG_8xx_COPYBACK=y 582 - CONFIG_8xx_CPU6=y 583 - CONFIG_NO_UCODE_PATCH=y 584 - # CONFIG_USB_SOF_UCODE_PATCH is not set 585 - # CONFIG_I2C_SPI_UCODE_PATCH is not set 586 - # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set 587 - 588 - # 589 - # Library routines 590 - # 591 - CONFIG_CRC_CCITT=y 592 - # CONFIG_CRC32 is not set 593 - # CONFIG_LIBCRC32C is not set 594 - CONFIG_ZLIB_INFLATE=y 595 - CONFIG_ZLIB_DEFLATE=y 596 - 597 - # 598 - # Profiling support 599 - # 600 - # CONFIG_PROFILING is not set 601 - 602 - # 603 - # Kernel hacking 604 - # 605 - # CONFIG_PRINTK_TIME is not set 606 - # CONFIG_DEBUG_KERNEL is not set 607 - CONFIG_LOG_BUF_SHIFT=14 608 - 609 - # 610 - # Security options 611 - # 612 - # CONFIG_KEYS is not set 613 - # CONFIG_SECURITY is not set 614 - 615 - # 616 - # Cryptographic options 617 - # 618 - # CONFIG_CRYPTO is not set 619 - 620 - # 621 - # Hardware crypto devices 622 - #
+1
arch/ppc/kernel/ppc_ksyms.c
··· 88 88 EXPORT_SYMBOL(strcat); 89 89 EXPORT_SYMBOL(strlen); 90 90 EXPORT_SYMBOL(strcmp); 91 + EXPORT_SYMBOL(strncmp); 91 92 92 93 EXPORT_SYMBOL(csum_partial); 93 94 EXPORT_SYMBOL(csum_partial_copy_generic);
+14
arch/ppc/lib/string.S
··· 121 121 beq 1b 122 122 blr 123 123 124 + _GLOBAL(strncmp) 125 + PPC_LCMPI r5,0 126 + beqlr 127 + mtctr r5 128 + addi r5,r3,-1 129 + addi r4,r4,-1 130 + 1: lbzu r3,1(r5) 131 + cmpwi 1,r3,0 132 + lbzu r0,1(r4) 133 + subf. r3,r0,r3 134 + beqlr 1 135 + bdnzt eq,1b 136 + blr 137 + 124 138 _GLOBAL(strlen) 125 139 addi r4,r3,-1 126 140 1: lbzu r0,1(r4)
-4
arch/ppc/platforms/Makefile
··· 4 4 5 5 obj-$(CONFIG_PPC_PREP) += prep_pci.o prep_setup.o 6 6 obj-$(CONFIG_PREP_RESIDUAL) += residual.o 7 - obj-$(CONFIG_PQ2ADS) += pq2ads.o 8 7 obj-$(CONFIG_TQM8260) += tqm8260_setup.o 9 8 obj-$(CONFIG_CPCI690) += cpci690.o 10 9 obj-$(CONFIG_EV64260) += ev64260.o ··· 23 24 obj-$(CONFIG_SPRUCE) += spruce.o 24 25 obj-$(CONFIG_LITE5200) += lite5200.o 25 26 obj-$(CONFIG_EV64360) += ev64360.o 26 - obj-$(CONFIG_MPC86XADS) += mpc866ads_setup.o 27 - obj-$(CONFIG_MPC885ADS) += mpc885ads_setup.o 28 - obj-$(CONFIG_ADS8272) += mpc8272ads_setup.o
-25
arch/ppc/platforms/fads.h
··· 22 22 23 23 #include <asm/ppcboot.h> 24 24 25 - #if defined(CONFIG_MPC86XADS) 26 - 27 - #define BOARD_CHIP_NAME "MPC86X" 28 - 29 - /* U-Boot maps BCSR to 0xff080000 */ 30 - #define BCSR_ADDR ((uint)0xff080000) 31 - 32 - /* MPC86XADS has one more CPLD and an additional BCSR. 33 - */ 34 - #define CFG_PHYDEV_ADDR ((uint)0xff0a0000) 35 - #define BCSR5 ((uint)(CFG_PHYDEV_ADDR + 0x300)) 36 - 37 - #define BCSR5_T1_RST 0x10 38 - #define BCSR5_ATM155_RST 0x08 39 - #define BCSR5_ATM25_RST 0x04 40 - #define BCSR5_MII1_EN 0x02 41 - #define BCSR5_MII1_RST 0x01 42 - 43 - /* There is no PHY link change interrupt */ 44 - #define PHY_INTERRUPT (-1) 45 - 46 - #else /* FADS */ 47 - 48 25 /* Memory map is configured by the PROM startup. 49 26 * I tried to follow the FADS manual, although the startup PROM 50 27 * dictates this and we simply have to move some of the physical ··· 31 54 32 55 /* PHY link change interrupt */ 33 56 #define PHY_INTERRUPT SIU_IRQ2 34 - 35 - #endif /* CONFIG_MPC86XADS */ 36 57 37 58 #define BCSR_SIZE ((uint)(64 * 1024)) 38 59 #define BCSR0 ((uint)(BCSR_ADDR + 0x00))
-367
arch/ppc/platforms/mpc8272ads_setup.c
··· 1 - /* 2 - * arch/ppc/platforms/mpc8272ads_setup.c 3 - * 4 - * MPC82xx Board-specific PlatformDevice descriptions 5 - * 6 - * 2005 (c) MontaVista Software, Inc. 7 - * Vitaly Bordug <vbordug@ru.mvista.com> 8 - * 9 - * This file is licensed under the terms of the GNU General Public License 10 - * version 2. This program is licensed "as is" without any warranty of any 11 - * kind, whether express or implied. 12 - */ 13 - 14 - 15 - #include <linux/init.h> 16 - #include <linux/module.h> 17 - #include <linux/device.h> 18 - #include <linux/ioport.h> 19 - #include <linux/fs_enet_pd.h> 20 - #include <linux/platform_device.h> 21 - #include <linux/phy.h> 22 - 23 - #include <asm/io.h> 24 - #include <asm/mpc8260.h> 25 - #include <asm/cpm2.h> 26 - #include <asm/immap_cpm2.h> 27 - #include <asm/irq.h> 28 - #include <asm/ppc_sys.h> 29 - #include <asm/ppcboot.h> 30 - #include <linux/fs_uart_pd.h> 31 - 32 - #include "pq2ads_pd.h" 33 - 34 - static void init_fcc1_ioports(struct fs_platform_info*); 35 - static void init_fcc2_ioports(struct fs_platform_info*); 36 - static void init_scc1_uart_ioports(struct fs_uart_platform_info*); 37 - static void init_scc4_uart_ioports(struct fs_uart_platform_info*); 38 - 39 - static struct fs_uart_platform_info mpc8272_uart_pdata[] = { 40 - [fsid_scc1_uart] = { 41 - .init_ioports = init_scc1_uart_ioports, 42 - .fs_no = fsid_scc1_uart, 43 - .brg = 1, 44 - .tx_num_fifo = 4, 45 - .tx_buf_size = 32, 46 - .rx_num_fifo = 4, 47 - .rx_buf_size = 32, 48 - }, 49 - [fsid_scc4_uart] = { 50 - .init_ioports = init_scc4_uart_ioports, 51 - .fs_no = fsid_scc4_uart, 52 - .brg = 4, 53 - .tx_num_fifo = 4, 54 - .tx_buf_size = 32, 55 - .rx_num_fifo = 4, 56 - .rx_buf_size = 32, 57 - }, 58 - }; 59 - 60 - static struct fs_mii_bb_platform_info m82xx_mii_bb_pdata = { 61 - .mdio_dat.bit = 18, 62 - .mdio_dir.bit = 18, 63 - .mdc_dat.bit = 19, 64 - .delay = 1, 65 - }; 66 - 67 - static struct fs_platform_info mpc82xx_enet_pdata[] = { 68 - [fsid_fcc1] = { 69 - .fs_no = fsid_fcc1, 70 - .cp_page = CPM_CR_FCC1_PAGE, 71 - .cp_block = CPM_CR_FCC1_SBLOCK, 72 - 73 - .clk_trx = (PC_F1RXCLK | PC_F1TXCLK), 74 - .clk_route = CMX1_CLK_ROUTE, 75 - .clk_mask = CMX1_CLK_MASK, 76 - .init_ioports = init_fcc1_ioports, 77 - 78 - .mem_offset = FCC1_MEM_OFFSET, 79 - 80 - .rx_ring = 32, 81 - .tx_ring = 32, 82 - .rx_copybreak = 240, 83 - .use_napi = 0, 84 - .napi_weight = 17, 85 - .bus_id = "0:00", 86 - }, 87 - [fsid_fcc2] = { 88 - .fs_no = fsid_fcc2, 89 - .cp_page = CPM_CR_FCC2_PAGE, 90 - .cp_block = CPM_CR_FCC2_SBLOCK, 91 - .clk_trx = (PC_F2RXCLK | PC_F2TXCLK), 92 - .clk_route = CMX2_CLK_ROUTE, 93 - .clk_mask = CMX2_CLK_MASK, 94 - .init_ioports = init_fcc2_ioports, 95 - 96 - .mem_offset = FCC2_MEM_OFFSET, 97 - 98 - .rx_ring = 32, 99 - .tx_ring = 32, 100 - .rx_copybreak = 240, 101 - .use_napi = 0, 102 - .napi_weight = 17, 103 - .bus_id = "0:03", 104 - }, 105 - }; 106 - 107 - static void init_fcc1_ioports(struct fs_platform_info* pdata) 108 - { 109 - struct io_port *io; 110 - u32 tempval; 111 - cpm2_map_t* immap = ioremap(CPM_MAP_ADDR, sizeof(cpm2_map_t)); 112 - u32 *bcsr = ioremap(BCSR_ADDR+4, sizeof(u32)); 113 - 114 - io = &immap->im_ioport; 115 - 116 - /* Enable the PHY */ 117 - clrbits32(bcsr, BCSR1_FETHIEN); 118 - setbits32(bcsr, BCSR1_FETH_RST); 119 - 120 - /* FCC1 pins are on port A/C. */ 121 - /* Configure port A and C pins for FCC1 Ethernet. */ 122 - 123 - tempval = in_be32(&io->iop_pdira); 124 - tempval &= ~PA1_DIRA0; 125 - tempval |= PA1_DIRA1; 126 - out_be32(&io->iop_pdira, tempval); 127 - 128 - tempval = in_be32(&io->iop_psora); 129 - tempval &= ~PA1_PSORA0; 130 - tempval |= PA1_PSORA1; 131 - out_be32(&io->iop_psora, tempval); 132 - 133 - setbits32(&io->iop_ppara,PA1_DIRA0 | PA1_DIRA1); 134 - 135 - /* Alter clocks */ 136 - tempval = PC_F1TXCLK|PC_F1RXCLK; 137 - 138 - clrbits32(&io->iop_psorc, tempval); 139 - clrbits32(&io->iop_pdirc, tempval); 140 - setbits32(&io->iop_pparc, tempval); 141 - 142 - clrbits32(&immap->im_cpmux.cmx_fcr, CMX1_CLK_MASK); 143 - setbits32(&immap->im_cpmux.cmx_fcr, CMX1_CLK_ROUTE); 144 - iounmap(bcsr); 145 - iounmap(immap); 146 - } 147 - 148 - static void init_fcc2_ioports(struct fs_platform_info* pdata) 149 - { 150 - cpm2_map_t* immap = ioremap(CPM_MAP_ADDR, sizeof(cpm2_map_t)); 151 - u32 *bcsr = ioremap(BCSR_ADDR+12, sizeof(u32)); 152 - 153 - struct io_port *io; 154 - u32 tempval; 155 - 156 - immap = cpm2_immr; 157 - 158 - io = &immap->im_ioport; 159 - 160 - /* Enable the PHY */ 161 - clrbits32(bcsr, BCSR3_FETHIEN2); 162 - setbits32(bcsr, BCSR3_FETH2_RST); 163 - 164 - /* FCC2 are port B/C. */ 165 - /* Configure port A and C pins for FCC2 Ethernet. */ 166 - 167 - tempval = in_be32(&io->iop_pdirb); 168 - tempval &= ~PB2_DIRB0; 169 - tempval |= PB2_DIRB1; 170 - out_be32(&io->iop_pdirb, tempval); 171 - 172 - tempval = in_be32(&io->iop_psorb); 173 - tempval &= ~PB2_PSORB0; 174 - tempval |= PB2_PSORB1; 175 - out_be32(&io->iop_psorb, tempval); 176 - 177 - setbits32(&io->iop_pparb,PB2_DIRB0 | PB2_DIRB1); 178 - 179 - tempval = PC_F2RXCLK|PC_F2TXCLK; 180 - 181 - /* Alter clocks */ 182 - clrbits32(&io->iop_psorc,tempval); 183 - clrbits32(&io->iop_pdirc,tempval); 184 - setbits32(&io->iop_pparc,tempval); 185 - 186 - clrbits32(&immap->im_cpmux.cmx_fcr, CMX2_CLK_MASK); 187 - setbits32(&immap->im_cpmux.cmx_fcr, CMX2_CLK_ROUTE); 188 - 189 - iounmap(bcsr); 190 - iounmap(immap); 191 - } 192 - 193 - 194 - static void __init mpc8272ads_fixup_enet_pdata(struct platform_device *pdev, 195 - int idx) 196 - { 197 - bd_t* bi = (void*)__res; 198 - int fs_no = fsid_fcc1+pdev->id-1; 199 - 200 - if(fs_no >= ARRAY_SIZE(mpc82xx_enet_pdata)) { 201 - return; 202 - } 203 - 204 - mpc82xx_enet_pdata[fs_no].dpram_offset= 205 - (u32)cpm2_immr->im_dprambase; 206 - mpc82xx_enet_pdata[fs_no].fcc_regs_c = 207 - (u32)cpm2_immr->im_fcc_c; 208 - memcpy(&mpc82xx_enet_pdata[fs_no].macaddr,bi->bi_enetaddr,6); 209 - 210 - /* prevent dup mac */ 211 - if(fs_no == fsid_fcc2) 212 - mpc82xx_enet_pdata[fs_no].macaddr[5] ^= 1; 213 - 214 - pdev->dev.platform_data = &mpc82xx_enet_pdata[fs_no]; 215 - } 216 - 217 - static void mpc8272ads_fixup_uart_pdata(struct platform_device *pdev, 218 - int idx) 219 - { 220 - bd_t *bd = (bd_t *) __res; 221 - struct fs_uart_platform_info *pinfo; 222 - int num = ARRAY_SIZE(mpc8272_uart_pdata); 223 - int id = fs_uart_id_scc2fsid(idx); 224 - 225 - /* no need to alter anything if console */ 226 - if ((id < num) && (!pdev->dev.platform_data)) { 227 - pinfo = &mpc8272_uart_pdata[id]; 228 - pinfo->uart_clk = bd->bi_intfreq; 229 - pdev->dev.platform_data = pinfo; 230 - } 231 - } 232 - 233 - static void init_scc1_uart_ioports(struct fs_uart_platform_info* pdata) 234 - { 235 - cpm2_map_t* immap = ioremap(CPM_MAP_ADDR, sizeof(cpm2_map_t)); 236 - 237 - /* SCC1 is only on port D */ 238 - setbits32(&immap->im_ioport.iop_ppard,0x00000003); 239 - clrbits32(&immap->im_ioport.iop_psord,0x00000001); 240 - setbits32(&immap->im_ioport.iop_psord,0x00000002); 241 - clrbits32(&immap->im_ioport.iop_pdird,0x00000001); 242 - setbits32(&immap->im_ioport.iop_pdird,0x00000002); 243 - 244 - /* Wire BRG1 to SCC1 */ 245 - clrbits32(&immap->im_cpmux.cmx_scr,0x00ffffff); 246 - 247 - iounmap(immap); 248 - } 249 - 250 - static void init_scc4_uart_ioports(struct fs_uart_platform_info* pdata) 251 - { 252 - cpm2_map_t* immap = ioremap(CPM_MAP_ADDR, sizeof(cpm2_map_t)); 253 - 254 - setbits32(&immap->im_ioport.iop_ppard,0x00000600); 255 - clrbits32(&immap->im_ioport.iop_psord,0x00000600); 256 - clrbits32(&immap->im_ioport.iop_pdird,0x00000200); 257 - setbits32(&immap->im_ioport.iop_pdird,0x00000400); 258 - 259 - /* Wire BRG4 to SCC4 */ 260 - clrbits32(&immap->im_cpmux.cmx_scr,0x000000ff); 261 - setbits32(&immap->im_cpmux.cmx_scr,0x0000001b); 262 - 263 - iounmap(immap); 264 - } 265 - 266 - static void __init mpc8272ads_fixup_mdio_pdata(struct platform_device *pdev, 267 - int idx) 268 - { 269 - m82xx_mii_bb_pdata.irq[0] = PHY_INTERRUPT; 270 - m82xx_mii_bb_pdata.irq[1] = PHY_POLL; 271 - m82xx_mii_bb_pdata.irq[2] = PHY_POLL; 272 - m82xx_mii_bb_pdata.irq[3] = PHY_INTERRUPT; 273 - m82xx_mii_bb_pdata.irq[31] = PHY_POLL; 274 - 275 - 276 - m82xx_mii_bb_pdata.mdio_dat.offset = 277 - (u32)&cpm2_immr->im_ioport.iop_pdatc; 278 - 279 - m82xx_mii_bb_pdata.mdio_dir.offset = 280 - (u32)&cpm2_immr->im_ioport.iop_pdirc; 281 - 282 - m82xx_mii_bb_pdata.mdc_dat.offset = 283 - (u32)&cpm2_immr->im_ioport.iop_pdatc; 284 - 285 - 286 - pdev->dev.platform_data = &m82xx_mii_bb_pdata; 287 - } 288 - 289 - static int mpc8272ads_platform_notify(struct device *dev) 290 - { 291 - static const struct platform_notify_dev_map dev_map[] = { 292 - { 293 - .bus_id = "fsl-cpm-fcc", 294 - .rtn = mpc8272ads_fixup_enet_pdata, 295 - }, 296 - { 297 - .bus_id = "fsl-cpm-scc:uart", 298 - .rtn = mpc8272ads_fixup_uart_pdata, 299 - }, 300 - { 301 - .bus_id = "fsl-bb-mdio", 302 - .rtn = mpc8272ads_fixup_mdio_pdata, 303 - }, 304 - { 305 - .bus_id = NULL 306 - } 307 - }; 308 - platform_notify_map(dev_map,dev); 309 - 310 - return 0; 311 - 312 - } 313 - 314 - int __init mpc8272ads_init(void) 315 - { 316 - printk(KERN_NOTICE "mpc8272ads: Init\n"); 317 - 318 - platform_notify = mpc8272ads_platform_notify; 319 - 320 - ppc_sys_device_initfunc(); 321 - 322 - ppc_sys_device_disable_all(); 323 - ppc_sys_device_enable(MPC82xx_CPM_FCC1); 324 - ppc_sys_device_enable(MPC82xx_CPM_FCC2); 325 - 326 - /* to be ready for console, let's attach pdata here */ 327 - #ifdef CONFIG_SERIAL_CPM_SCC1 328 - ppc_sys_device_setfunc(MPC82xx_CPM_SCC1, PPC_SYS_FUNC_UART); 329 - ppc_sys_device_enable(MPC82xx_CPM_SCC1); 330 - 331 - #endif 332 - 333 - #ifdef CONFIG_SERIAL_CPM_SCC4 334 - ppc_sys_device_setfunc(MPC82xx_CPM_SCC4, PPC_SYS_FUNC_UART); 335 - ppc_sys_device_enable(MPC82xx_CPM_SCC4); 336 - #endif 337 - 338 - ppc_sys_device_enable(MPC82xx_MDIO_BB); 339 - 340 - return 0; 341 - } 342 - 343 - /* 344 - To prevent confusion, console selection is gross: 345 - by 0 assumed SCC1 and by 1 assumed SCC4 346 - */ 347 - struct platform_device* early_uart_get_pdev(int index) 348 - { 349 - bd_t *bd = (bd_t *) __res; 350 - struct fs_uart_platform_info *pinfo; 351 - 352 - struct platform_device* pdev = NULL; 353 - if(index) { /*assume SCC4 here*/ 354 - pdev = &ppc_sys_platform_devices[MPC82xx_CPM_SCC4]; 355 - pinfo = &mpc8272_uart_pdata[fsid_scc4_uart]; 356 - } else { /*over SCC1*/ 357 - pdev = &ppc_sys_platform_devices[MPC82xx_CPM_SCC1]; 358 - pinfo = &mpc8272_uart_pdata[fsid_scc1_uart]; 359 - } 360 - 361 - pinfo->uart_clk = bd->bi_intfreq; 362 - pdev->dev.platform_data = pinfo; 363 - ppc_sys_fixup_mem_resource(pdev, CPM_MAP_ADDR); 364 - return NULL; 365 - } 366 - 367 - arch_initcall(mpc8272ads_init);
-93
arch/ppc/platforms/mpc885ads.h
··· 1 - /* 2 - * A collection of structures, addresses, and values associated with 3 - * the Freescale MPC885ADS board. 4 - * Copied from the FADS stuff. 5 - * 6 - * Author: MontaVista Software, Inc. 7 - * source@mvista.com 8 - * 9 - * 2005 (c) MontaVista Software, Inc. This file is licensed under the 10 - * terms of the GNU General Public License version 2. This program is licensed 11 - * "as is" without any warranty of any kind, whether express or implied. 12 - */ 13 - 14 - #ifdef __KERNEL__ 15 - #ifndef __ASM_MPC885ADS_H__ 16 - #define __ASM_MPC885ADS_H__ 17 - 18 - 19 - #include <asm/ppcboot.h> 20 - 21 - /* U-Boot maps BCSR to 0xff080000 */ 22 - #define BCSR_ADDR ((uint)0xff080000) 23 - #define BCSR_SIZE ((uint)32) 24 - #define BCSR0 ((uint)(BCSR_ADDR + 0x00)) 25 - #define BCSR1 ((uint)(BCSR_ADDR + 0x04)) 26 - #define BCSR2 ((uint)(BCSR_ADDR + 0x08)) 27 - #define BCSR3 ((uint)(BCSR_ADDR + 0x0c)) 28 - #define BCSR4 ((uint)(BCSR_ADDR + 0x10)) 29 - 30 - #define CFG_PHYDEV_ADDR ((uint)0xff0a0000) 31 - #define BCSR5 ((uint)(CFG_PHYDEV_ADDR + 0x300)) 32 - 33 - #define IMAP_ADDR ((uint)0xff000000) 34 - #define IMAP_SIZE ((uint)(64 * 1024)) 35 - 36 - #define PCMCIA_MEM_ADDR ((uint)0xff020000) 37 - #define PCMCIA_MEM_SIZE ((uint)(64 * 1024)) 38 - 39 - /* Bits of interest in the BCSRs. 40 - */ 41 - #define BCSR1_ETHEN ((uint)0x20000000) 42 - #define BCSR1_IRDAEN ((uint)0x10000000) 43 - #define BCSR1_RS232EN_1 ((uint)0x01000000) 44 - #define BCSR1_PCCEN ((uint)0x00800000) 45 - #define BCSR1_PCCVCC0 ((uint)0x00400000) 46 - #define BCSR1_PCCVPP0 ((uint)0x00200000) 47 - #define BCSR1_PCCVPP1 ((uint)0x00100000) 48 - #define BCSR1_PCCVPP_MASK (BCSR1_PCCVPP0 | BCSR1_PCCVPP1) 49 - #define BCSR1_RS232EN_2 ((uint)0x00040000) 50 - #define BCSR1_PCCVCC1 ((uint)0x00010000) 51 - #define BCSR1_PCCVCC_MASK (BCSR1_PCCVCC0 | BCSR1_PCCVCC1) 52 - 53 - #define BCSR4_ETH10_RST ((uint)0x80000000) /* 10Base-T PHY reset*/ 54 - #define BCSR4_USB_LO_SPD ((uint)0x04000000) 55 - #define BCSR4_USB_VCC ((uint)0x02000000) 56 - #define BCSR4_USB_FULL_SPD ((uint)0x00040000) 57 - #define BCSR4_USB_EN ((uint)0x00020000) 58 - 59 - #define BCSR5_MII2_EN 0x40 60 - #define BCSR5_MII2_RST 0x20 61 - #define BCSR5_T1_RST 0x10 62 - #define BCSR5_ATM155_RST 0x08 63 - #define BCSR5_ATM25_RST 0x04 64 - #define BCSR5_MII1_EN 0x02 65 - #define BCSR5_MII1_RST 0x01 66 - 67 - /* Interrupt level assignments */ 68 - #define PHY_INTERRUPT SIU_IRQ7 /* PHY link change interrupt */ 69 - #define SIU_INT_FEC1 SIU_LEVEL1 /* FEC1 interrupt */ 70 - #define SIU_INT_FEC2 SIU_LEVEL3 /* FEC2 interrupt */ 71 - #define FEC_INTERRUPT SIU_INT_FEC1 /* FEC interrupt */ 72 - 73 - /* We don't use the 8259 */ 74 - #define NR_8259_INTS 0 75 - 76 - /* CPM Ethernet through SCC3 */ 77 - #define PA_ENET_RXD ((ushort)0x0040) 78 - #define PA_ENET_TXD ((ushort)0x0080) 79 - #define PE_ENET_TCLK ((uint)0x00004000) 80 - #define PE_ENET_RCLK ((uint)0x00008000) 81 - #define PE_ENET_TENA ((uint)0x00000010) 82 - #define PC_ENET_CLSN ((ushort)0x0400) 83 - #define PC_ENET_RENA ((ushort)0x0800) 84 - 85 - /* Control bits in the SICR to route TCLK (CLK5) and RCLK (CLK6) to 86 - * SCC3. Also, make sure GR3 (bit 8) and SC3 (bit 9) are zero */ 87 - #define SICR_ENET_MASK ((uint)0x00ff0000) 88 - #define SICR_ENET_CLKRT ((uint)0x002c0000) 89 - 90 - #define BOARD_CHIP_NAME "MPC885" 91 - 92 - #endif /* __ASM_MPC885ADS_H__ */ 93 - #endif /* __KERNEL__ */
-476
arch/ppc/platforms/mpc885ads_setup.c
··· 1 - /*arch/ppc/platforms/mpc885ads_setup.c 2 - * 3 - * Platform setup for the Freescale mpc885ads board 4 - * 5 - * Vitaly Bordug <vbordug@ru.mvista.com> 6 - * 7 - * Copyright 2005 MontaVista Software Inc. 8 - * 9 - * This file is licensed under the terms of the GNU General Public License 10 - * version 2. This program is licensed "as is" without any warranty of any 11 - * kind, whether express or implied. 12 - */ 13 - 14 - #include <linux/init.h> 15 - #include <linux/module.h> 16 - #include <linux/param.h> 17 - #include <linux/string.h> 18 - #include <linux/ioport.h> 19 - #include <linux/device.h> 20 - 21 - #include <linux/fs_enet_pd.h> 22 - #include <linux/fs_uart_pd.h> 23 - #include <linux/mii.h> 24 - 25 - #include <asm/delay.h> 26 - #include <asm/io.h> 27 - #include <asm/machdep.h> 28 - #include <asm/page.h> 29 - #include <asm/processor.h> 30 - #include <asm/system.h> 31 - #include <asm/time.h> 32 - #include <asm/ppcboot.h> 33 - #include <asm/8xx_immap.h> 34 - #include <asm/cpm1.h> 35 - #include <asm/ppc_sys.h> 36 - 37 - extern unsigned char __res[]; 38 - static void setup_smc1_ioports(struct fs_uart_platform_info*); 39 - static void setup_smc2_ioports(struct fs_uart_platform_info*); 40 - 41 - static struct fs_mii_fec_platform_info mpc8xx_mdio_fec_pdata; 42 - static void setup_fec1_ioports(struct fs_platform_info*); 43 - static void setup_fec2_ioports(struct fs_platform_info*); 44 - static void setup_scc3_ioports(struct fs_platform_info*); 45 - 46 - static struct fs_uart_platform_info mpc885_uart_pdata[] = { 47 - [fsid_smc1_uart] = { 48 - .brg = 1, 49 - .fs_no = fsid_smc1_uart, 50 - .init_ioports = setup_smc1_ioports, 51 - .tx_num_fifo = 4, 52 - .tx_buf_size = 32, 53 - .rx_num_fifo = 4, 54 - .rx_buf_size = 32, 55 - }, 56 - [fsid_smc2_uart] = { 57 - .brg = 2, 58 - .fs_no = fsid_smc2_uart, 59 - .init_ioports = setup_smc2_ioports, 60 - .tx_num_fifo = 4, 61 - .tx_buf_size = 32, 62 - .rx_num_fifo = 4, 63 - .rx_buf_size = 32, 64 - }, 65 - }; 66 - 67 - static struct fs_platform_info mpc8xx_enet_pdata[] = { 68 - [fsid_fec1] = { 69 - .rx_ring = 128, 70 - .tx_ring = 16, 71 - .rx_copybreak = 240, 72 - 73 - .use_napi = 1, 74 - .napi_weight = 17, 75 - 76 - .init_ioports = setup_fec1_ioports, 77 - 78 - .bus_id = "0:00", 79 - .has_phy = 1, 80 - }, 81 - [fsid_fec2] = { 82 - .rx_ring = 128, 83 - .tx_ring = 16, 84 - .rx_copybreak = 240, 85 - 86 - .use_napi = 1, 87 - .napi_weight = 17, 88 - 89 - .init_ioports = setup_fec2_ioports, 90 - 91 - .bus_id = "0:01", 92 - .has_phy = 1, 93 - }, 94 - [fsid_scc3] = { 95 - .rx_ring = 64, 96 - .tx_ring = 8, 97 - .rx_copybreak = 240, 98 - 99 - .use_napi = 1, 100 - .napi_weight = 17, 101 - 102 - .init_ioports = setup_scc3_ioports, 103 - #ifdef CONFIG_FIXED_MII_10_FDX 104 - .bus_id = "fixed@100:1", 105 - #else 106 - .bus_id = "0:02", 107 - #endif 108 - }, 109 - }; 110 - 111 - void __init board_init(void) 112 - { 113 - cpm8xx_t *cp = cpmp; 114 - unsigned int *bcsr_io; 115 - 116 - #ifdef CONFIG_FS_ENET 117 - immap_t *immap = (immap_t *) IMAP_ADDR; 118 - #endif 119 - bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); 120 - 121 - if (bcsr_io == NULL) { 122 - printk(KERN_CRIT "Could not remap BCSR\n"); 123 - return; 124 - } 125 - #ifdef CONFIG_SERIAL_CPM_SMC1 126 - cp->cp_simode &= ~(0xe0000000 >> 17); /* brg1 */ 127 - clrbits32(bcsr_io, BCSR1_RS232EN_1); 128 - cp->cp_smc[0].smc_smcm |= (SMCM_RX | SMCM_TX); 129 - cp->cp_smc[0].smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); 130 - #else 131 - setbits32(bcsr_io,BCSR1_RS232EN_1); 132 - cp->cp_smc[0].smc_smcmr = 0; 133 - cp->cp_smc[0].smc_smce = 0; 134 - #endif 135 - 136 - #ifdef CONFIG_SERIAL_CPM_SMC2 137 - cp->cp_simode &= ~(0xe0000000 >> 1); 138 - cp->cp_simode |= (0x20000000 >> 1); /* brg2 */ 139 - clrbits32(bcsr_io,BCSR1_RS232EN_2); 140 - cp->cp_smc[1].smc_smcm |= (SMCM_RX | SMCM_TX); 141 - cp->cp_smc[1].smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); 142 - #else 143 - setbits32(bcsr_io,BCSR1_RS232EN_2); 144 - cp->cp_smc[1].smc_smcmr = 0; 145 - cp->cp_smc[1].smc_smce = 0; 146 - #endif 147 - iounmap(bcsr_io); 148 - 149 - #ifdef CONFIG_FS_ENET 150 - /* use MDC for MII (common) */ 151 - setbits16(&immap->im_ioport.iop_pdpar, 0x0080); 152 - clrbits16(&immap->im_ioport.iop_pddir, 0x0080); 153 - bcsr_io = ioremap(BCSR5, sizeof(unsigned long)); 154 - clrbits32(bcsr_io,BCSR5_MII1_EN); 155 - clrbits32(bcsr_io,BCSR5_MII1_RST); 156 - #ifdef CONFIG_MPC8xx_SECOND_ETH_FEC2 157 - clrbits32(bcsr_io,BCSR5_MII2_EN); 158 - clrbits32(bcsr_io,BCSR5_MII2_RST); 159 - #endif 160 - iounmap(bcsr_io); 161 - #endif 162 - } 163 - 164 - static void setup_fec1_ioports(struct fs_platform_info* pdata) 165 - { 166 - immap_t *immap = (immap_t *) IMAP_ADDR; 167 - 168 - /* configure FEC1 pins */ 169 - setbits16(&immap->im_ioport.iop_papar, 0xf830); 170 - setbits16(&immap->im_ioport.iop_padir, 0x0830); 171 - clrbits16(&immap->im_ioport.iop_padir, 0xf000); 172 - setbits32(&immap->im_cpm.cp_pbpar, 0x00001001); 173 - 174 - clrbits32(&immap->im_cpm.cp_pbdir, 0x00001001); 175 - setbits16(&immap->im_ioport.iop_pcpar, 0x000c); 176 - clrbits16(&immap->im_ioport.iop_pcdir, 0x000c); 177 - setbits32(&immap->im_cpm.cp_pepar, 0x00000003); 178 - 179 - setbits32(&immap->im_cpm.cp_pedir, 0x00000003); 180 - clrbits32(&immap->im_cpm.cp_peso, 0x00000003); 181 - clrbits32(&immap->im_cpm.cp_cptr, 0x00000100); 182 - } 183 - 184 - static void setup_fec2_ioports(struct fs_platform_info* pdata) 185 - { 186 - immap_t *immap = (immap_t *) IMAP_ADDR; 187 - 188 - /* configure FEC2 pins */ 189 - setbits32(&immap->im_cpm.cp_pepar, 0x0003fffc); 190 - setbits32(&immap->im_cpm.cp_pedir, 0x0003fffc); 191 - clrbits32(&immap->im_cpm.cp_peso, 0x000087fc); 192 - setbits32(&immap->im_cpm.cp_peso, 0x00037800); 193 - clrbits32(&immap->im_cpm.cp_cptr, 0x00000080); 194 - } 195 - 196 - static void setup_scc3_ioports(struct fs_platform_info* pdata) 197 - { 198 - immap_t *immap = (immap_t *) IMAP_ADDR; 199 - unsigned *bcsr_io; 200 - 201 - bcsr_io = ioremap(BCSR_ADDR, BCSR_SIZE); 202 - 203 - if (bcsr_io == NULL) { 204 - printk(KERN_CRIT "Could not remap BCSR\n"); 205 - return; 206 - } 207 - 208 - /* Enable the PHY. 209 - */ 210 - clrbits32(bcsr_io+4, BCSR4_ETH10_RST); 211 - udelay(1000); 212 - setbits32(bcsr_io+4, BCSR4_ETH10_RST); 213 - /* Configure port A pins for Txd and Rxd. 214 - */ 215 - setbits16(&immap->im_ioport.iop_papar, PA_ENET_RXD | PA_ENET_TXD); 216 - clrbits16(&immap->im_ioport.iop_padir, PA_ENET_RXD | PA_ENET_TXD); 217 - 218 - /* Configure port C pins to enable CLSN and RENA. 219 - */ 220 - clrbits16(&immap->im_ioport.iop_pcpar, PC_ENET_CLSN | PC_ENET_RENA); 221 - clrbits16(&immap->im_ioport.iop_pcdir, PC_ENET_CLSN | PC_ENET_RENA); 222 - setbits16(&immap->im_ioport.iop_pcso, PC_ENET_CLSN | PC_ENET_RENA); 223 - 224 - /* Configure port E for TCLK and RCLK. 225 - */ 226 - setbits32(&immap->im_cpm.cp_pepar, PE_ENET_TCLK | PE_ENET_RCLK); 227 - clrbits32(&immap->im_cpm.cp_pepar, PE_ENET_TENA); 228 - clrbits32(&immap->im_cpm.cp_pedir, 229 - PE_ENET_TCLK | PE_ENET_RCLK | PE_ENET_TENA); 230 - clrbits32(&immap->im_cpm.cp_peso, PE_ENET_TCLK | PE_ENET_RCLK); 231 - setbits32(&immap->im_cpm.cp_peso, PE_ENET_TENA); 232 - 233 - /* Configure Serial Interface clock routing. 234 - * First, clear all SCC bits to zero, then set the ones we want. 235 - */ 236 - clrbits32(&immap->im_cpm.cp_sicr, SICR_ENET_MASK); 237 - setbits32(&immap->im_cpm.cp_sicr, SICR_ENET_CLKRT); 238 - 239 - /* Disable Rx and Tx. SMC1 sshould be stopped if SCC3 eternet are used. 240 - */ 241 - immap->im_cpm.cp_smc[0].smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); 242 - /* On the MPC885ADS SCC ethernet PHY is initialized in the full duplex mode 243 - * by H/W setting after reset. SCC ethernet controller support only half duplex. 244 - * This discrepancy of modes causes a lot of carrier lost errors. 245 - */ 246 - 247 - /* In the original SCC enet driver the following code is placed at 248 - the end of the initialization */ 249 - setbits32(&immap->im_cpm.cp_pepar, PE_ENET_TENA); 250 - clrbits32(&immap->im_cpm.cp_pedir, PE_ENET_TENA); 251 - setbits32(&immap->im_cpm.cp_peso, PE_ENET_TENA); 252 - 253 - setbits32(bcsr_io+4, BCSR1_ETHEN); 254 - iounmap(bcsr_io); 255 - } 256 - 257 - static int mac_count = 0; 258 - 259 - static void mpc885ads_fixup_enet_pdata(struct platform_device *pdev, int fs_no) 260 - { 261 - struct fs_platform_info *fpi; 262 - bd_t *bd = (bd_t *) __res; 263 - char *e; 264 - int i; 265 - 266 - if(fs_no >= ARRAY_SIZE(mpc8xx_enet_pdata)) { 267 - printk(KERN_ERR"No network-suitable #%d device on bus", fs_no); 268 - return; 269 - } 270 - 271 - fpi = &mpc8xx_enet_pdata[fs_no]; 272 - 273 - switch (fs_no) { 274 - case fsid_fec1: 275 - fpi->init_ioports = &setup_fec1_ioports; 276 - break; 277 - case fsid_fec2: 278 - fpi->init_ioports = &setup_fec2_ioports; 279 - break; 280 - case fsid_scc3: 281 - fpi->init_ioports = &setup_scc3_ioports; 282 - break; 283 - default: 284 - printk(KERN_WARNING "Device %s is not supported!\n", pdev->name); 285 - return; 286 - } 287 - 288 - pdev->dev.platform_data = fpi; 289 - fpi->fs_no = fs_no; 290 - 291 - e = (unsigned char *)&bd->bi_enetaddr; 292 - for (i = 0; i < 6; i++) 293 - fpi->macaddr[i] = *e++; 294 - 295 - fpi->macaddr[5] += mac_count++; 296 - 297 - } 298 - 299 - static void mpc885ads_fixup_fec_enet_pdata(struct platform_device *pdev, 300 - int idx) 301 - { 302 - /* This is for FEC devices only */ 303 - if (!pdev || !pdev->name || (!strstr(pdev->name, "fsl-cpm-fec"))) 304 - return; 305 - mpc885ads_fixup_enet_pdata(pdev, fsid_fec1 + pdev->id - 1); 306 - } 307 - 308 - static void __init mpc885ads_fixup_scc_enet_pdata(struct platform_device *pdev, 309 - int idx) 310 - { 311 - /* This is for SCC devices only */ 312 - if (!pdev || !pdev->name || (!strstr(pdev->name, "fsl-cpm-scc"))) 313 - return; 314 - 315 - mpc885ads_fixup_enet_pdata(pdev, fsid_scc1 + pdev->id - 1); 316 - } 317 - 318 - static void setup_smc1_ioports(struct fs_uart_platform_info* pdata) 319 - { 320 - immap_t *immap = (immap_t *) IMAP_ADDR; 321 - unsigned *bcsr_io; 322 - unsigned int iobits = 0x000000c0; 323 - 324 - bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); 325 - 326 - if (bcsr_io == NULL) { 327 - printk(KERN_CRIT "Could not remap BCSR1\n"); 328 - return; 329 - } 330 - clrbits32(bcsr_io,BCSR1_RS232EN_1); 331 - iounmap(bcsr_io); 332 - 333 - setbits32(&immap->im_cpm.cp_pbpar, iobits); 334 - clrbits32(&immap->im_cpm.cp_pbdir, iobits); 335 - clrbits16(&immap->im_cpm.cp_pbodr, iobits); 336 - } 337 - 338 - static void setup_smc2_ioports(struct fs_uart_platform_info* pdata) 339 - { 340 - immap_t *immap = (immap_t *) IMAP_ADDR; 341 - unsigned *bcsr_io; 342 - unsigned int iobits = 0x00000c00; 343 - 344 - bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); 345 - 346 - if (bcsr_io == NULL) { 347 - printk(KERN_CRIT "Could not remap BCSR1\n"); 348 - return; 349 - } 350 - clrbits32(bcsr_io,BCSR1_RS232EN_2); 351 - iounmap(bcsr_io); 352 - 353 - #ifndef CONFIG_SERIAL_CPM_ALT_SMC2 354 - setbits32(&immap->im_cpm.cp_pbpar, iobits); 355 - clrbits32(&immap->im_cpm.cp_pbdir, iobits); 356 - clrbits16(&immap->im_cpm.cp_pbodr, iobits); 357 - #else 358 - setbits16(&immap->im_ioport.iop_papar, iobits); 359 - clrbits16(&immap->im_ioport.iop_padir, iobits); 360 - clrbits16(&immap->im_ioport.iop_paodr, iobits); 361 - #endif 362 - } 363 - 364 - static void __init mpc885ads_fixup_uart_pdata(struct platform_device *pdev, 365 - int idx) 366 - { 367 - bd_t *bd = (bd_t *) __res; 368 - struct fs_uart_platform_info *pinfo; 369 - int num = ARRAY_SIZE(mpc885_uart_pdata); 370 - 371 - int id = fs_uart_id_smc2fsid(idx); 372 - 373 - /* no need to alter anything if console */ 374 - if ((id < num) && (!pdev->dev.platform_data)) { 375 - pinfo = &mpc885_uart_pdata[id]; 376 - pinfo->uart_clk = bd->bi_intfreq; 377 - pdev->dev.platform_data = pinfo; 378 - } 379 - } 380 - 381 - 382 - static int mpc885ads_platform_notify(struct device *dev) 383 - { 384 - 385 - static const struct platform_notify_dev_map dev_map[] = { 386 - { 387 - .bus_id = "fsl-cpm-fec", 388 - .rtn = mpc885ads_fixup_fec_enet_pdata, 389 - }, 390 - { 391 - .bus_id = "fsl-cpm-scc", 392 - .rtn = mpc885ads_fixup_scc_enet_pdata, 393 - }, 394 - { 395 - .bus_id = "fsl-cpm-smc:uart", 396 - .rtn = mpc885ads_fixup_uart_pdata 397 - }, 398 - { 399 - .bus_id = NULL 400 - } 401 - }; 402 - 403 - platform_notify_map(dev_map,dev); 404 - 405 - return 0; 406 - } 407 - 408 - int __init mpc885ads_init(void) 409 - { 410 - struct fs_mii_fec_platform_info* fmpi; 411 - bd_t *bd = (bd_t *) __res; 412 - 413 - printk(KERN_NOTICE "mpc885ads: Init\n"); 414 - 415 - platform_notify = mpc885ads_platform_notify; 416 - 417 - ppc_sys_device_initfunc(); 418 - ppc_sys_device_disable_all(); 419 - 420 - ppc_sys_device_enable(MPC8xx_CPM_FEC1); 421 - 422 - ppc_sys_device_enable(MPC8xx_MDIO_FEC); 423 - fmpi = ppc_sys_platform_devices[MPC8xx_MDIO_FEC].dev.platform_data = 424 - &mpc8xx_mdio_fec_pdata; 425 - 426 - fmpi->mii_speed = ((((bd->bi_intfreq + 4999999) / 2500000) / 2) & 0x3F) << 1; 427 - 428 - /* No PHY interrupt line here */ 429 - fmpi->irq[0xf] = SIU_IRQ7; 430 - 431 - #ifdef CONFIG_MPC8xx_SECOND_ETH_SCC3 432 - ppc_sys_device_enable(MPC8xx_CPM_SCC3); 433 - 434 - #endif 435 - #ifdef CONFIG_MPC8xx_SECOND_ETH_FEC2 436 - ppc_sys_device_enable(MPC8xx_CPM_FEC2); 437 - #endif 438 - 439 - #ifdef CONFIG_SERIAL_CPM_SMC1 440 - ppc_sys_device_enable(MPC8xx_CPM_SMC1); 441 - ppc_sys_device_setfunc(MPC8xx_CPM_SMC1, PPC_SYS_FUNC_UART); 442 - #endif 443 - 444 - #ifdef CONFIG_SERIAL_CPM_SMC2 445 - ppc_sys_device_enable(MPC8xx_CPM_SMC2); 446 - ppc_sys_device_setfunc(MPC8xx_CPM_SMC2, PPC_SYS_FUNC_UART); 447 - #endif 448 - return 0; 449 - } 450 - 451 - arch_initcall(mpc885ads_init); 452 - 453 - /* 454 - To prevent confusion, console selection is gross: 455 - by 0 assumed SMC1 and by 1 assumed SMC2 456 - */ 457 - struct platform_device* early_uart_get_pdev(int index) 458 - { 459 - bd_t *bd = (bd_t *) __res; 460 - struct fs_uart_platform_info *pinfo; 461 - 462 - struct platform_device* pdev = NULL; 463 - if(index) { /*assume SMC2 here*/ 464 - pdev = &ppc_sys_platform_devices[MPC8xx_CPM_SMC2]; 465 - pinfo = &mpc885_uart_pdata[1]; 466 - } else { /*over SMC1*/ 467 - pdev = &ppc_sys_platform_devices[MPC8xx_CPM_SMC1]; 468 - pinfo = &mpc885_uart_pdata[0]; 469 - } 470 - 471 - pinfo->uart_clk = bd->bi_intfreq; 472 - pdev->dev.platform_data = pinfo; 473 - ppc_sys_fixup_mem_resource(pdev, IMAP_ADDR); 474 - return NULL; 475 - } 476 -
-53
arch/ppc/platforms/pq2ads.c
··· 1 - /* 2 - * PQ2ADS platform support 3 - * 4 - * Author: Kumar Gala <galak@kernel.crashing.org> 5 - * Derived from: est8260_setup.c by Allen Curtis 6 - * 7 - * Copyright 2004 Freescale Semiconductor, Inc. 8 - * 9 - * This program is free software; you can redistribute it and/or modify it 10 - * under the terms of the GNU General Public License as published by the 11 - * Free Software Foundation; either version 2 of the License, or (at your 12 - * option) any later version. 13 - */ 14 - 15 - #include <linux/init.h> 16 - 17 - #include <asm/io.h> 18 - #include <asm/mpc8260.h> 19 - #include <asm/cpm2.h> 20 - #include <asm/immap_cpm2.h> 21 - 22 - void __init 23 - m82xx_board_setup(void) 24 - { 25 - cpm2_map_t* immap = ioremap(CPM_MAP_ADDR, sizeof(cpm2_map_t)); 26 - u32 *bcsr = ioremap(BCSR_ADDR+4, sizeof(u32)); 27 - 28 - /* Enable the 2nd UART port */ 29 - clrbits32(bcsr, BCSR1_RS232_EN2); 30 - 31 - #ifdef CONFIG_SERIAL_CPM_SCC1 32 - clrbits32((u32*)&immap->im_scc[0].scc_sccm, UART_SCCM_TX | UART_SCCM_RX); 33 - clrbits32((u32*)&immap->im_scc[0].scc_gsmrl, SCC_GSMRL_ENR | SCC_GSMRL_ENT); 34 - #endif 35 - 36 - #ifdef CONFIG_SERIAL_CPM_SCC2 37 - clrbits32((u32*)&immap->im_scc[1].scc_sccm, UART_SCCM_TX | UART_SCCM_RX); 38 - clrbits32((u32*)&immap->im_scc[1].scc_gsmrl, SCC_GSMRL_ENR | SCC_GSMRL_ENT); 39 - #endif 40 - 41 - #ifdef CONFIG_SERIAL_CPM_SCC3 42 - clrbits32((u32*)&immap->im_scc[2].scc_sccm, UART_SCCM_TX | UART_SCCM_RX); 43 - clrbits32((u32*)&immap->im_scc[2].scc_gsmrl, SCC_GSMRL_ENR | SCC_GSMRL_ENT); 44 - #endif 45 - 46 - #ifdef CONFIG_SERIAL_CPM_SCC4 47 - clrbits32((u32*)&immap->im_scc[3].scc_sccm, UART_SCCM_TX | UART_SCCM_RX); 48 - clrbits32((u32*)&immap->im_scc[3].scc_gsmrl, SCC_GSMRL_ENR | SCC_GSMRL_ENT); 49 - #endif 50 - 51 - iounmap(bcsr); 52 - iounmap(immap); 53 - }
-94
arch/ppc/platforms/pq2ads.h
··· 1 - /* 2 - * A collection of structures, addresses, and values associated with 3 - * the Motorola MPC8260ADS/MPC8266ADS-PCI boards. 4 - * Copied from the RPX-Classic and SBS8260 stuff. 5 - * 6 - * Copyright (c) 2001 Dan Malek (dan@mvista.com) 7 - */ 8 - #ifdef __KERNEL__ 9 - #ifndef __MACH_ADS8260_DEFS 10 - #define __MACH_ADS8260_DEFS 11 - 12 - 13 - #include <asm/ppcboot.h> 14 - 15 - #if defined(CONFIG_ADS8272) 16 - #define BOARD_CHIP_NAME "8272" 17 - #endif 18 - 19 - /* Memory map is configured by the PROM startup. 20 - * We just map a few things we need. The CSR is actually 4 byte-wide 21 - * registers that can be accessed as 8-, 16-, or 32-bit values. 22 - */ 23 - #define CPM_MAP_ADDR ((uint)0xf0000000) 24 - #define BCSR_ADDR ((uint)0xf4500000) 25 - #define BCSR_SIZE ((uint)(32 * 1024)) 26 - 27 - #define BOOTROM_RESTART_ADDR ((uint)0xff000104) 28 - 29 - /* For our show_cpuinfo hooks. */ 30 - #define CPUINFO_VENDOR "Motorola" 31 - #define CPUINFO_MACHINE "PQ2 ADS PowerPC" 32 - 33 - /* The ADS8260 has 16, 32-bit wide control/status registers, accessed 34 - * only on word boundaries. 35 - * Not all are used (yet), or are interesting to us (yet). 36 - */ 37 - 38 - /* Things of interest in the CSR. 39 - */ 40 - #define BCSR0_LED0 ((uint)0x02000000) /* 0 == on */ 41 - #define BCSR0_LED1 ((uint)0x01000000) /* 0 == on */ 42 - #define BCSR1_FETHIEN ((uint)0x08000000) /* 0 == enable */ 43 - #define BCSR1_FETH_RST ((uint)0x04000000) /* 0 == reset */ 44 - #define BCSR1_RS232_EN1 ((uint)0x02000000) /* 0 == enable */ 45 - #define BCSR1_RS232_EN2 ((uint)0x01000000) /* 0 == enable */ 46 - #define BCSR3_FETHIEN2 ((uint)0x10000000) /* 0 == enable */ 47 - #define BCSR3_FETH2_RST ((uint)0x80000000) /* 0 == reset */ 48 - 49 - #define PHY_INTERRUPT SIU_INT_IRQ7 50 - 51 - #ifdef CONFIG_PCI 52 - /* PCI interrupt controller */ 53 - #define PCI_INT_STAT_REG 0xF8200000 54 - #define PCI_INT_MASK_REG 0xF8200004 55 - #define PIRQA (NR_CPM_INTS + 0) 56 - #define PIRQB (NR_CPM_INTS + 1) 57 - #define PIRQC (NR_CPM_INTS + 2) 58 - #define PIRQD (NR_CPM_INTS + 3) 59 - 60 - /* 61 - * PCI memory map definitions for MPC8266ADS-PCI. 62 - * 63 - * processor view 64 - * local address PCI address target 65 - * 0x80000000-0x9FFFFFFF 0x80000000-0x9FFFFFFF PCI mem with prefetch 66 - * 0xA0000000-0xBFFFFFFF 0xA0000000-0xBFFFFFFF PCI mem w/o prefetch 67 - * 0xF4000000-0xF7FFFFFF 0x00000000-0x03FFFFFF PCI IO 68 - * 69 - * PCI master view 70 - * local address PCI address target 71 - * 0x00000000-0x1FFFFFFF 0x00000000-0x1FFFFFFF MPC8266 local memory 72 - */ 73 - 74 - /* All the other PCI memory map definitions reside at syslib/m82xx_pci.h 75 - Here we should redefine what is unique for this board */ 76 - #define M82xx_PCI_SLAVE_MEM_LOCAL 0x00000000 /* Local base */ 77 - #define M82xx_PCI_SLAVE_MEM_BUS 0x00000000 /* PCI base */ 78 - #define M82xx_PCI_SLAVE_MEM_SIZE 0x10000000 /* 256 Mb */ 79 - 80 - #define M82xx_PCI_SLAVE_SEC_WND_SIZE ~(0x40000000 - 1U) /* 2 x 512Mb */ 81 - #define M82xx_PCI_SLAVE_SEC_WND_BASE 0x80000000 /* PCI Memory base */ 82 - 83 - #if defined(CONFIG_ADS8272) 84 - #define PCI_INT_TO_SIU SIU_INT_IRQ2 85 - #elif defined(CONFIG_PQ2FADS) 86 - #define PCI_INT_TO_SIU SIU_INT_IRQ6 87 - #else 88 - #warning PCI Bridge will be without interrupts support 89 - #endif 90 - 91 - #endif /* CONFIG_PCI */ 92 - 93 - #endif /* __MACH_ADS8260_DEFS */ 94 - #endif /* __KERNEL__ */
-32
arch/ppc/platforms/pq2ads_pd.h
··· 1 - #ifndef __PQ2ADS_PD_H 2 - #define __PQ2ADS_PD_H 3 - /* 4 - * arch/ppc/platforms/82xx/pq2ads_pd.h 5 - * 6 - * Some defines for MPC82xx board-specific PlatformDevice descriptions 7 - * 8 - * 2005 (c) MontaVista Software, Inc. 9 - * Vitaly Bordug <vbordug@ru.mvista.com> 10 - * 11 - * This file is licensed under the terms of the GNU General Public License 12 - * version 2. This program is licensed "as is" without any warranty of any 13 - * kind, whether express or implied. 14 - */ 15 - 16 - /* FCC1 Clock Source Configuration. These can be redefined in the board specific file. 17 - Can only choose from CLK9-12 */ 18 - 19 - #define F1_RXCLK 11 20 - #define F1_TXCLK 10 21 - 22 - /* FCC2 Clock Source Configuration. These can be redefined in the board specific file. 23 - Can only choose from CLK13-16 */ 24 - #define F2_RXCLK 15 25 - #define F2_TXCLK 16 26 - 27 - /* FCC3 Clock Source Configuration. These can be redefined in the board specific file. 28 - Can only choose from CLK13-16 */ 29 - #define F3_RXCLK 13 30 - #define F3_TXCLK 14 31 - 32 - #endif
-6
arch/ppc/syslib/m8260_setup.c
··· 175 175 * in case the boot rom changed something on us. 176 176 */ 177 177 cpm2_immr->im_intctl.ic_siprr = 0x05309770; 178 - 179 - #if defined(CONFIG_PCI) && (defined(CONFIG_ADS8272) || defined(CONFIG_PQ2FADS)) 180 - /* Initialize stuff for the 82xx CPLD IC and install demux */ 181 - pq2pci_init_irq(); 182 - #endif 183 - 184 178 } 185 179 186 180 /*
-38
arch/ppc/syslib/m82xx_pci.c
··· 150 150 { 151 151 int irq; 152 152 volatile cpm2_map_t *immap = cpm2_immr; 153 - #if defined CONFIG_ADS8272 154 - /* configure chip select for PCI interrupt controller */ 155 - immap->im_memctl.memc_br3 = PCI_INT_STAT_REG | 0x00001801; 156 - immap->im_memctl.memc_or3 = 0xffff8010; 157 - #elif defined CONFIG_PQ2FADS 158 - immap->im_memctl.memc_br8 = PCI_INT_STAT_REG | 0x00001801; 159 - immap->im_memctl.memc_or8 = 0xffff8010; 160 - #endif 161 153 for (irq = NR_CPM_INTS; irq < NR_CPM_INTS + 4; irq++) 162 154 irq_desc[irq].chip = &pq2pci_ic; 163 155 ··· 214 222 immap->im_memctl.memc_pcibr1 = M82xx_PCI_SEC_WND_BASE | PCIBR_ENABLE; 215 223 #endif 216 224 217 - #if defined CONFIG_ADS8272 218 - immap->im_siu_conf.siu_82xx.sc_siumcr = 219 - (immap->im_siu_conf.siu_82xx.sc_siumcr & 220 - ~(SIUMCR_BBD | SIUMCR_ESE | SIUMCR_PBSE | 221 - SIUMCR_CDIS | SIUMCR_DPPC11 | SIUMCR_L2CPC11 | 222 - SIUMCR_LBPC11 | SIUMCR_APPC11 | 223 - SIUMCR_CS10PC11 | SIUMCR_BCTLC11 | SIUMCR_MMR11)) | 224 - SIUMCR_DPPC11 | SIUMCR_L2CPC01 | SIUMCR_LBPC00 | 225 - SIUMCR_APPC10 | SIUMCR_CS10PC00 | 226 - SIUMCR_BCTLC00 | SIUMCR_MMR11 ; 227 - 228 - #elif defined CONFIG_PQ2FADS 229 - /* 230 - * Setting required to enable IRQ1-IRQ7 (SIUMCR [DPPC]), 231 - * and local bus for PCI (SIUMCR [LBPC]). 232 - */ 233 - immap->im_siu_conf.siu_82xx.sc_siumcr = (immap->im_siu_conf.siu_82xx.sc_siumcr & 234 - ~(SIUMCR_L2CPC11 | SIUMCR_LBPC11 | SIUMCR_CS10PC11 | SIUMCR_APPC11) | 235 - SIUMCR_BBD | SIUMCR_LBPC01 | SIUMCR_DPPC11 | SIUMCR_APPC10); 236 - #endif 237 225 /* Enable PCI */ 238 226 immap->im_pci.pci_gcr = cpu_to_le32(PCIGCR_PCI_BUS_EN); 239 227 ··· 256 284 immap->im_pci.pci_pibar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_BUS >> PITA_ADDR_SHIFT); 257 285 immap->im_pci.pci_pitar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_LOCAL>> PITA_ADDR_SHIFT); 258 286 259 - #if defined CONFIG_ADS8272 260 - /* PCI int highest prio */ 261 - immap->im_siu_conf.siu_82xx.sc_ppc_alrh = 0x01236745; 262 - #elif defined CONFIG_PQ2FADS 263 - immap->im_siu_conf.siu_82xx.sc_ppc_alrh = 0x03124567; 264 - #endif 265 287 /* park bus on PCI */ 266 288 immap->im_siu_conf.siu_82xx.sc_ppc_acr = PPC_ACR_BUS_PARK_PCI; 267 289 ··· 285 319 hose->first_busno = 0; 286 320 hose->bus_offset = 0; 287 321 hose->last_busno = 0xff; 288 - 289 - #ifdef CONFIG_ADS8272 290 - hose->set_cfg_type = 1; 291 - #endif 292 322 293 323 setup_m8260_indirect_pci(hose, 294 324 (unsigned long)&cpm2_immr->im_pci.pci_cfg_addr,
-10
arch/ppc/syslib/m8xx_setup.c
··· 141 141 #endif 142 142 #endif 143 143 144 - #if defined (CONFIG_MPC86XADS) || defined (CONFIG_MPC885ADS) 145 - #if defined(CONFIG_MTD_PHYSMAP) 146 - physmap_configure(binfo->bi_flashstart, binfo->bi_flashsize, 147 - MPC8xxADS_BANK_WIDTH, NULL); 148 - #ifdef CONFIG_MTD_PARTITIONS 149 - physmap_set_partitions(mpc8xxads_partitions, mpc8xxads_part_num); 150 - #endif /* CONFIG_MTD_PARTITIONS */ 151 - #endif /* CONFIG_MTD_PHYSMAP */ 152 - #endif 153 - 154 144 board_init(); 155 145 } 156 146
+1 -1
drivers/char/xilinx_hwicap/xilinx_hwicap.c
··· 803 803 } 804 804 805 805 /* Match table for of_platform binding */ 806 - static const struct of_device_id __devinit hwicap_of_match[] = { 806 + static const struct of_device_id __devinitconst hwicap_of_match[] = { 807 807 { .compatible = "xlnx,opb-hwicap-1.00.b", .data = &buffer_icap_config}, 808 808 { .compatible = "xlnx,xps-hwicap-1.00.a", .data = &fifo_icap_config}, 809 809 {},
+2 -1
drivers/macintosh/windfarm_pm112.c
··· 668 668 .remove = __devexit_p(wf_pm112_remove), 669 669 .driver = { 670 670 .name = "windfarm", 671 - .bus = &platform_bus_type, 671 + .owner = THIS_MODULE, 672 672 }, 673 673 }; 674 674 ··· 711 711 MODULE_AUTHOR("Paul Mackerras <paulus@samba.org>"); 712 712 MODULE_DESCRIPTION("Thermal control for PowerMac11,2"); 713 713 MODULE_LICENSE("GPL"); 714 + MODULE_ALIAS("platform:windfarm");
+2 -2
drivers/macintosh/windfarm_pm81.c
··· 770 770 .remove = __devexit_p(wf_smu_remove), 771 771 .driver = { 772 772 .name = "windfarm", 773 - .bus = &platform_bus_type, 773 + .owner = THIS_MODULE, 774 774 }, 775 775 }; 776 776 ··· 810 810 MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>"); 811 811 MODULE_DESCRIPTION("Thermal control logic for iMac G5"); 812 812 MODULE_LICENSE("GPL"); 813 - 813 + MODULE_ALIAS("platform:windfarm");
+2 -1
drivers/macintosh/windfarm_pm91.c
··· 702 702 .remove = __devexit_p(wf_smu_remove), 703 703 .driver = { 704 704 .name = "windfarm", 705 - .bus = &platform_bus_type, 705 + .owner = THIS_MODULE, 706 706 }, 707 707 }; 708 708 ··· 742 742 MODULE_DESCRIPTION("Thermal control logic for PowerMac9,1"); 743 743 MODULE_LICENSE("GPL"); 744 744 745 + MODULE_ALIAS("platform:windfarm");
+1
drivers/net/Kconfig
··· 2278 2278 config GELIC_NET 2279 2279 tristate "PS3 Gigabit Ethernet driver" 2280 2280 depends on PPC_PS3 2281 + select PS3_SYS_MANAGER 2281 2282 help 2282 2283 This driver supports the network device on the PS3 game 2283 2284 console. This driver has built-in support for Ethernet.
+3
drivers/of/of_i2c.c
··· 13 13 14 14 #include <linux/i2c.h> 15 15 #include <linux/of.h> 16 + #include <linux/module.h> 16 17 17 18 struct i2c_driver_device { 18 19 char *of_device; ··· 114 113 } 115 114 } 116 115 EXPORT_SYMBOL(of_register_i2c_devices); 116 + 117 + MODULE_LICENSE("GPL");
+13 -1
drivers/serial/of_serial.c
··· 31 31 struct resource resource; 32 32 struct device_node *np = ofdev->node; 33 33 const unsigned int *clk, *spd; 34 - int ret; 34 + const u32 *prop; 35 + int ret, prop_size; 35 36 36 37 memset(port, 0, sizeof *port); 37 38 spd = of_get_property(np, "current-speed", NULL); ··· 50 49 51 50 spin_lock_init(&port->lock); 52 51 port->mapbase = resource.start; 52 + 53 + /* Check for shifted address mapping */ 54 + prop = of_get_property(np, "reg-offset", &prop_size); 55 + if (prop && (prop_size == sizeof(u32))) 56 + port->mapbase += *prop; 57 + 58 + /* Check for registers offset within the devices address range */ 59 + prop = of_get_property(np, "reg-shift", &prop_size); 60 + if (prop && (prop_size == sizeof(u32))) 61 + port->regshift = *prop; 62 + 53 63 port->irq = irq_of_parse_and_map(np, 0); 54 64 port->iotype = UPIO_MEM; 55 65 port->type = type;
+106
include/asm-powerpc/fixmap.h
··· 1 + /* 2 + * fixmap.h: compile-time virtual memory allocation 3 + * 4 + * This file is subject to the terms and conditions of the GNU General Public 5 + * License. See the file "COPYING" in the main directory of this archive 6 + * for more details. 7 + * 8 + * Copyright (C) 1998 Ingo Molnar 9 + * 10 + * Copyright 2008 Freescale Semiconductor Inc. 11 + * Port to powerpc added by Kumar Gala 12 + */ 13 + 14 + #ifndef _ASM_FIXMAP_H 15 + #define _ASM_FIXMAP_H 16 + 17 + extern unsigned long FIXADDR_TOP; 18 + 19 + #ifndef __ASSEMBLY__ 20 + #include <linux/kernel.h> 21 + #include <asm/page.h> 22 + #ifdef CONFIG_HIGHMEM 23 + #include <linux/threads.h> 24 + #include <asm/kmap_types.h> 25 + #endif 26 + 27 + /* 28 + * Here we define all the compile-time 'special' virtual 29 + * addresses. The point is to have a constant address at 30 + * compile time, but to set the physical address only 31 + * in the boot process. We allocate these special addresses 32 + * from the end of virtual memory (0xfffff000) backwards. 33 + * Also this lets us do fail-safe vmalloc(), we 34 + * can guarantee that these special addresses and 35 + * vmalloc()-ed addresses never overlap. 36 + * 37 + * these 'compile-time allocated' memory buffers are 38 + * fixed-size 4k pages. (or larger if used with an increment 39 + * highger than 1) use fixmap_set(idx,phys) to associate 40 + * physical memory with fixmap indices. 41 + * 42 + * TLB entries of such buffers will not be flushed across 43 + * task switches. 44 + */ 45 + enum fixed_addresses { 46 + FIX_HOLE, 47 + #ifdef CONFIG_HIGHMEM 48 + FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ 49 + FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, 50 + #endif 51 + /* FIX_PCIE_MCFG, */ 52 + __end_of_fixed_addresses 53 + }; 54 + 55 + extern void __set_fixmap (enum fixed_addresses idx, 56 + phys_addr_t phys, pgprot_t flags); 57 + 58 + #define set_fixmap(idx, phys) \ 59 + __set_fixmap(idx, phys, PAGE_KERNEL) 60 + /* 61 + * Some hardware wants to get fixmapped without caching. 62 + */ 63 + #define set_fixmap_nocache(idx, phys) \ 64 + __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) 65 + 66 + #define clear_fixmap(idx) \ 67 + __set_fixmap(idx, 0, __pgprot(0)) 68 + 69 + #define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) 70 + #define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) 71 + 72 + #define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT)) 73 + #define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) 74 + 75 + extern void __this_fixmap_does_not_exist(void); 76 + 77 + /* 78 + * 'index to address' translation. If anyone tries to use the idx 79 + * directly without tranlation, we catch the bug with a NULL-deference 80 + * kernel oops. Illegal ranges of incoming indices are caught too. 81 + */ 82 + static __always_inline unsigned long fix_to_virt(const unsigned int idx) 83 + { 84 + /* 85 + * this branch gets completely eliminated after inlining, 86 + * except when someone tries to use fixaddr indices in an 87 + * illegal way. (such as mixing up address types or using 88 + * out-of-range indices). 89 + * 90 + * If it doesn't get removed, the linker will complain 91 + * loudly with a reasonably clear error message.. 92 + */ 93 + if (idx >= __end_of_fixed_addresses) 94 + __this_fixmap_does_not_exist(); 95 + 96 + return __fix_to_virt(idx); 97 + } 98 + 99 + static inline unsigned long virt_to_fix(const unsigned long vaddr) 100 + { 101 + BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); 102 + return __virt_to_fix(vaddr); 103 + } 104 + 105 + #endif /* !__ASSEMBLY__ */ 106 + #endif
+22 -19
include/asm-powerpc/highmem.h
··· 27 27 #include <asm/kmap_types.h> 28 28 #include <asm/tlbflush.h> 29 29 #include <asm/page.h> 30 - 31 - /* undef for production */ 32 - #define HIGHMEM_DEBUG 1 30 + #include <asm/fixmap.h> 33 31 34 32 extern pte_t *kmap_pte; 35 33 extern pgprot_t kmap_prot; ··· 38 40 * easily, subsequent pte tables have to be allocated in one physical 39 41 * chunk of RAM. 40 42 */ 41 - #define PKMAP_BASE CONFIG_HIGHMEM_START 42 43 #define LAST_PKMAP (1 << PTE_SHIFT) 43 44 #define LAST_PKMAP_MASK (LAST_PKMAP-1) 45 + #define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE*(LAST_PKMAP + 1)) & PMD_MASK) 44 46 #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) 45 47 #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) 46 - 47 - #define KMAP_FIX_BEGIN (PKMAP_BASE + 0x00400000UL) 48 48 49 49 extern void *kmap_high(struct page *page); 50 50 extern void kunmap_high(struct page *page); ··· 69 73 * be used in IRQ contexts, so in some (very limited) cases we need 70 74 * it. 71 75 */ 72 - static inline void *kmap_atomic(struct page *page, enum km_type type) 76 + static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) 73 77 { 74 78 unsigned int idx; 75 79 unsigned long vaddr; ··· 80 84 return page_address(page); 81 85 82 86 idx = type + KM_TYPE_NR*smp_processor_id(); 83 - vaddr = KMAP_FIX_BEGIN + idx * PAGE_SIZE; 84 - #ifdef HIGHMEM_DEBUG 85 - BUG_ON(!pte_none(*(kmap_pte+idx))); 87 + vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); 88 + #ifdef CONFIG_DEBUG_HIGHMEM 89 + BUG_ON(!pte_none(*(kmap_pte-idx))); 86 90 #endif 87 - set_pte_at(&init_mm, vaddr, kmap_pte+idx, mk_pte(page, kmap_prot)); 91 + set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot)); 88 92 flush_tlb_page(NULL, vaddr); 89 93 90 94 return (void*) vaddr; 91 95 } 92 96 97 + static inline void *kmap_atomic(struct page *page, enum km_type type) 98 + { 99 + return kmap_atomic_prot(page, type, kmap_prot); 100 + } 101 + 93 102 static inline void kunmap_atomic(void *kvaddr, enum km_type type) 94 103 { 95 - #ifdef HIGHMEM_DEBUG 104 + #ifdef CONFIG_DEBUG_HIGHMEM 96 105 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; 97 - unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); 106 + enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); 98 107 99 - if (vaddr < KMAP_FIX_BEGIN) { // FIXME 108 + if (vaddr < __fix_to_virt(FIX_KMAP_END)) { 100 109 pagefault_enable(); 101 110 return; 102 111 } 103 112 104 - BUG_ON(vaddr != KMAP_FIX_BEGIN + idx * PAGE_SIZE); 113 + BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); 105 114 106 115 /* 107 116 * force other mappings to Oops if they'll try to access 108 117 * this pte without first remap it 109 118 */ 110 - pte_clear(&init_mm, vaddr, kmap_pte+idx); 119 + pte_clear(&init_mm, vaddr, kmap_pte-idx); 111 120 flush_tlb_page(NULL, vaddr); 112 121 #endif 113 122 pagefault_enable(); ··· 121 120 static inline struct page *kmap_atomic_to_page(void *ptr) 122 121 { 123 122 unsigned long idx, vaddr = (unsigned long) ptr; 123 + pte_t *pte; 124 124 125 - if (vaddr < KMAP_FIX_BEGIN) 125 + if (vaddr < FIXADDR_START) 126 126 return virt_to_page(ptr); 127 127 128 - idx = (vaddr - KMAP_FIX_BEGIN) >> PAGE_SHIFT; 129 - return pte_page(kmap_pte[idx]); 128 + idx = virt_to_fix(vaddr); 129 + pte = kmap_pte - (idx - FIX_KMAP_BEGIN); 130 + return pte_page(*pte); 130 131 } 131 132 132 133 #define flush_cache_kmaps() flush_cache_all()
+51 -50
include/asm-powerpc/io-defs.h
··· 1 1 /* This file is meant to be include multiple times by other headers */ 2 + /* last 2 argments are used by platforms/cell/io-workarounds.[ch] */ 2 3 3 - DEF_PCI_AC_RET(readb, u8, (const PCI_IO_ADDR addr), (addr)) 4 - DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr)) 5 - DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr)) 6 - DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr)) 7 - DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr)) 8 - DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr)) 9 - DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr)) 10 - DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr)) 11 - DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr)) 12 - DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr)) 4 + DEF_PCI_AC_RET(readb, u8, (const PCI_IO_ADDR addr), (addr), mem, addr) 5 + DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) 6 + DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) 7 + DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) 8 + DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) 9 + DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 10 + DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 11 + DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 12 + DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 13 + DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 13 14 14 15 #ifdef __powerpc64__ 15 - DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr)) 16 - DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr)) 17 - DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr)) 18 - DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr)) 16 + DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) 17 + DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) 18 + DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 19 + DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) 19 20 #endif /* __powerpc64__ */ 20 21 21 - DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port)) 22 - DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port)) 23 - DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port)) 24 - DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port)) 25 - DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port)) 26 - DEF_PCI_AC_NORET(outl, (u32 val, unsigned long port), (val, port)) 22 + DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port), pio, port) 23 + DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port), pio, port) 24 + DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port), pio, port) 25 + DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port), pio, port) 26 + DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port), pio, port) 27 + DEF_PCI_AC_NORET(outl, (u32 val, unsigned long port), (val, port), pio, port) 27 28 28 - DEF_PCI_AC_NORET(readsb, (const PCI_IO_ADDR a, void *b, unsigned long c), \ 29 - (a, b, c)) 30 - DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), \ 31 - (a, b, c)) 32 - DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), \ 33 - (a, b, c)) 34 - DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), \ 35 - (a, b, c)) 36 - DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), \ 37 - (a, b, c)) 38 - DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), \ 39 - (a, b, c)) 29 + DEF_PCI_AC_NORET(readsb, (const PCI_IO_ADDR a, void *b, unsigned long c), 30 + (a, b, c), mem, a) 31 + DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), 32 + (a, b, c), mem, a) 33 + DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), 34 + (a, b, c), mem, a) 35 + DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), 36 + (a, b, c), mem, a) 37 + DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), 38 + (a, b, c), mem, a) 39 + DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), 40 + (a, b, c), mem, a) 40 41 41 - DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), \ 42 - (p, b, c)) 43 - DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), \ 44 - (p, b, c)) 45 - DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), \ 46 - (p, b, c)) 47 - DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), \ 48 - (p, b, c)) 49 - DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), \ 50 - (p, b, c)) 51 - DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), \ 52 - (p, b, c)) 42 + DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), 43 + (p, b, c), pio, p) 44 + DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), 45 + (p, b, c), pio, p) 46 + DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), 47 + (p, b, c), pio, p) 48 + DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), 49 + (p, b, c), pio, p) 50 + DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), 51 + (p, b, c), pio, p) 52 + DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), 53 + (p, b, c), pio, p) 53 54 54 - DEF_PCI_AC_NORET(memset_io, (PCI_IO_ADDR a, int c, unsigned long n), \ 55 - (a, c, n)) 56 - DEF_PCI_AC_NORET(memcpy_fromio,(void *d,const PCI_IO_ADDR s,unsigned long n), \ 57 - (d, s, n)) 58 - DEF_PCI_AC_NORET(memcpy_toio,(PCI_IO_ADDR d,const void *s,unsigned long n), \ 59 - (d, s, n)) 55 + DEF_PCI_AC_NORET(memset_io, (PCI_IO_ADDR a, int c, unsigned long n), 56 + (a, c, n), mem, a) 57 + DEF_PCI_AC_NORET(memcpy_fromio, (void *d, const PCI_IO_ADDR s, unsigned long n), 58 + (d, s, n), mem, s) 59 + DEF_PCI_AC_NORET(memcpy_toio, (PCI_IO_ADDR d, const void *s, unsigned long n), 60 + (d, s, n), mem, d)
+4 -4
include/asm-powerpc/io.h
··· 458 458 /* Structure containing all the hooks */ 459 459 extern struct ppc_pci_io { 460 460 461 - #define DEF_PCI_AC_RET(name, ret, at, al) ret (*name) at; 462 - #define DEF_PCI_AC_NORET(name, at, al) void (*name) at; 461 + #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) ret (*name) at; 462 + #define DEF_PCI_AC_NORET(name, at, al, space, aa) void (*name) at; 463 463 464 464 #include <asm/io-defs.h> 465 465 ··· 469 469 } ppc_pci_io; 470 470 471 471 /* The inline wrappers */ 472 - #define DEF_PCI_AC_RET(name, ret, at, al) \ 472 + #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ 473 473 static inline ret name at \ 474 474 { \ 475 475 if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ ··· 477 477 return __do_##name al; \ 478 478 } 479 479 480 - #define DEF_PCI_AC_NORET(name, at, al) \ 480 + #define DEF_PCI_AC_NORET(name, at, al, space, aa) \ 481 481 static inline void name at \ 482 482 { \ 483 483 if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \
-5
include/asm-powerpc/kdump.h
··· 11 11 12 12 #ifdef CONFIG_CRASH_DUMP 13 13 14 - #define PHYSICAL_START KDUMP_KERNELBASE 15 14 #define KDUMP_TRAMPOLINE_START 0x0100 16 15 #define KDUMP_TRAMPOLINE_END 0x3000 17 16 18 17 #define KDUMP_MIN_TCE_ENTRIES 2048 19 - 20 - #else /* !CONFIG_CRASH_DUMP */ 21 - 22 - #define PHYSICAL_START 0x0 23 18 24 19 #endif /* CONFIG_CRASH_DUMP */ 25 20
+1
include/asm-powerpc/paca.h
··· 108 108 }; 109 109 110 110 extern struct paca_struct paca[]; 111 + extern void initialise_pacas(void); 111 112 112 113 #endif /* __KERNEL__ */ 113 114 #endif /* _ASM_POWERPC_PACA_H */
+37 -8
include/asm-powerpc/page.h
··· 12 12 13 13 #include <asm/asm-compat.h> 14 14 #include <asm/kdump.h> 15 + #include <asm/types.h> 15 16 16 17 /* 17 18 * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software ··· 43 42 * 44 43 * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. 45 44 * 46 - * To get a physical address from a virtual one you subtract PAGE_OFFSET, 47 - * _not_ KERNELBASE. 45 + * PAGE_OFFSET is the virtual address of the start of lowmem. 46 + * 47 + * PHYSICAL_START is the physical address of the start of the kernel. 48 + * 49 + * MEMORY_START is the physical address of the start of lowmem. 50 + * 51 + * KERNELBASE, PAGE_OFFSET, and PHYSICAL_START are all configurable on 52 + * ppc32 and based on how they are set we determine MEMORY_START. 53 + * 54 + * For the linear mapping the following equation should be true: 55 + * KERNELBASE - PAGE_OFFSET = PHYSICAL_START - MEMORY_START 56 + * 57 + * Also, KERNELBASE >= PAGE_OFFSET and PHYSICAL_START >= MEMORY_START 58 + * 59 + * There are two was to determine a physical address from a virtual one: 60 + * va = pa + PAGE_OFFSET - MEMORY_START 61 + * va = pa + KERNELBASE - PHYSICAL_START 48 62 * 49 63 * If you want to know something's offset from the start of the kernel you 50 64 * should subtract KERNELBASE. ··· 67 51 * If you want to test if something's a kernel address, use is_kernel_addr(). 68 52 */ 69 53 70 - #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) 71 - #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) 72 - #define LOAD_OFFSET PAGE_OFFSET 54 + #define KERNELBASE ASM_CONST(CONFIG_KERNEL_START) 55 + #define PAGE_OFFSET ASM_CONST(CONFIG_PAGE_OFFSET) 56 + #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_PHYSICAL_START)) 57 + 58 + #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_FLATMEM) 59 + #ifndef __ASSEMBLY__ 60 + extern phys_addr_t memstart_addr; 61 + extern phys_addr_t kernstart_addr; 62 + #endif 63 + #define PHYSICAL_START kernstart_addr 64 + #define MEMORY_START memstart_addr 65 + #else 66 + #define PHYSICAL_START ASM_CONST(CONFIG_PHYSICAL_START) 67 + #define MEMORY_START (PHYSICAL_START + PAGE_OFFSET - KERNELBASE) 68 + #endif 73 69 74 70 #ifdef CONFIG_FLATMEM 75 - #define pfn_valid(pfn) ((pfn) < max_mapnr) 71 + #define ARCH_PFN_OFFSET (MEMORY_START >> PAGE_SHIFT) 72 + #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (ARCH_PFN_OFFSET + max_mapnr)) 76 73 #endif 77 74 78 75 #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 79 76 #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) 80 77 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) 81 78 82 - #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) 83 - #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET) 79 + #define __va(x) ((void *)((unsigned long)(x) - PHYSICAL_START + KERNELBASE)) 80 + #define __pa(x) ((unsigned long)(x) + PHYSICAL_START - KERNELBASE) 84 81 85 82 /* 86 83 * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI,
+6
include/asm-powerpc/page_32.h
··· 1 1 #ifndef _ASM_POWERPC_PAGE_32_H 2 2 #define _ASM_POWERPC_PAGE_32_H 3 3 4 + #if defined(CONFIG_PHYSICAL_ALIGN) && (CONFIG_PHYSICAL_START != 0) 5 + #if (CONFIG_PHYSICAL_START % CONFIG_PHYSICAL_ALIGN) != 0 6 + #error "CONFIG_PHYSICAL_START must be a multiple of CONFIG_PHYSICAL_ALIGN" 7 + #endif 8 + #endif 9 + 4 10 #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 5 11 6 12 #ifdef CONFIG_NOT_COHERENT_CACHE
+2 -6
include/asm-powerpc/thread_info.h
··· 80 80 81 81 #else /* THREAD_SHIFT < PAGE_SHIFT */ 82 82 83 - #ifdef CONFIG_DEBUG_STACK_USAGE 84 - #define alloc_thread_info(tsk) kzalloc(THREAD_SIZE, GFP_KERNEL) 85 - #else 86 - #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) 87 - #endif 88 - #define free_thread_info(ti) kfree(ti) 83 + extern struct thread_info *alloc_thread_info(struct task_struct *tsk); 84 + extern void free_thread_info(struct thread_info *ti); 89 85 90 86 #endif /* THREAD_SHIFT < PAGE_SHIFT */ 91 87
-2
include/asm-ppc/mmu.h
··· 15 15 * physical need a larger than native word size type. -Matt 16 16 */ 17 17 #ifndef CONFIG_PHYS_64BIT 18 - typedef unsigned long phys_addr_t; 19 18 #define PHYS_FMT "%.8lx" 20 19 #else 21 - typedef unsigned long long phys_addr_t; 22 20 extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); 23 21 #define PHYS_FMT "%16Lx" 24 22 #endif
-4
include/asm-ppc/mpc8260.h
··· 35 35 #include <platforms/tqm8260.h> 36 36 #endif 37 37 38 - #if defined(CONFIG_PQ2ADS) || defined (CONFIG_PQ2FADS) 39 - #include <platforms/pq2ads.h> 40 - #endif 41 - 42 38 #ifdef CONFIG_PCI_8260 43 39 #include <syslib/m82xx_pci.h> 44 40 #endif
-4
include/asm-ppc/mpc8xx.h
··· 63 63 #include <platforms/lantec.h> 64 64 #endif 65 65 66 - #if defined(CONFIG_MPC885ADS) 67 - #include <platforms/mpc885ads.h> 68 - #endif 69 - 70 66 /* Currently, all 8xx boards that support a processor to PCI/ISA bridge 71 67 * use the same memory map. 72 68 */
+2
include/linux/sched.h
··· 1926 1926 1927 1927 #endif 1928 1928 1929 + extern void thread_info_cache_init(void); 1930 + 1929 1931 /* set thread flags in other task's structures 1930 1932 * - see asm/thread_info.h for TIF_xxxx flags available 1931 1933 */
+6 -1
init/main.c
··· 521 521 cpu_set(cpu, cpu_possible_map); 522 522 } 523 523 524 - void __init __attribute__((weak)) smp_setup_processor_id(void) 524 + void __init __weak smp_setup_processor_id(void) 525 + { 526 + } 527 + 528 + void __init __weak thread_info_cache_init(void) 525 529 { 526 530 } 527 531 ··· 649 645 if (efi_enabled) 650 646 efi_enter_virtual_mode(); 651 647 #endif 648 + thread_info_cache_init(); 652 649 fork_init(num_physpages); 653 650 proc_caches_init(); 654 651 buffer_init();