diff options
123 files changed, 1923 insertions, 4572 deletions
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 4cc780024e6c..cf89e8cfd5bf 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
| @@ -2601,6 +2601,17 @@ platforms are moved over to use the flattened-device-tree model. | |||
| 2601 | differ between different families. May be | 2601 | differ between different families. May be |
| 2602 | 'virtex2p', 'virtex4', or 'virtex5'. | 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 | p) Freescale Synchronous Serial Interface | 2615 | p) Freescale Synchronous Serial Interface |
| 2605 | 2616 | ||
| 2606 | The SSI is a serial device that communicates with audio codecs. It can | 2617 | The SSI is a serial device that communicates with audio codecs. It can |
diff --git a/MAINTAINERS b/MAINTAINERS index 2edec00c12c0..a942f3852499 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1106,6 +1106,12 @@ M: kernel@wantstofly.org | |||
| 1106 | L: linux-usb@vger.kernel.org | 1106 | L: linux-usb@vger.kernel.org |
| 1107 | S: Maintained | 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 | CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER | 1115 | CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER |
| 1110 | P: Cirrus Logic Corporation (kernel 2.2 driver) | 1116 | P: Cirrus Logic Corporation (kernel 2.2 driver) |
| 1111 | M: Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com> | 1117 | M: Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com> |
| @@ -1628,6 +1634,12 @@ L: linuxppc-dev@ozlabs.org | |||
| 1628 | L: netdev@vger.kernel.org | 1634 | L: netdev@vger.kernel.org |
| 1629 | S: Maintained | 1635 | S: Maintained |
| 1630 | 1636 | ||
| 1637 | FREESCALE QUICC ENGINE LIBRARY | ||
| 1638 | P: Timur Tabi | ||
| 1639 | M: timur@freescale.com | ||
| 1640 | L: linuxppc-dev@ozlabs.org | ||
| 1641 | S: Supported | ||
| 1642 | |||
| 1631 | FREESCALE HIGHSPEED USB DEVICE DRIVER | 1643 | FREESCALE HIGHSPEED USB DEVICE DRIVER |
| 1632 | P: Li Yang | 1644 | P: Li Yang |
| 1633 | M: leoli@freescale.com | 1645 | M: leoli@freescale.com |
| @@ -1642,6 +1654,19 @@ L: netdev@vger.kernel.org | |||
| 1642 | L: linuxppc-dev@ozlabs.org | 1654 | L: linuxppc-dev@ozlabs.org |
| 1643 | S: Maintained | 1655 | S: Maintained |
| 1644 | 1656 | ||
| 1657 | FREESCALE QUICC ENGINE UCC UART DRIVER | ||
| 1658 | P: Timur Tabi | ||
| 1659 | M: timur@freescale.com | ||
| 1660 | L: linuxppc-dev@ozlabs.org | ||
| 1661 | S: Supported | ||
| 1662 | |||
| 1663 | FREESCALE SOC SOUND DRIVERS | ||
| 1664 | P: Timur Tabi | ||
| 1665 | M: timur@freescale.com | ||
| 1666 | L: alsa-devel@alsa-project.org | ||
| 1667 | L: linuxppc-dev@ozlabs.org | ||
| 1668 | S: Supported | ||
| 1669 | |||
| 1645 | FILE LOCKING (flock() and fcntl()/lockf()) | 1670 | FILE LOCKING (flock() and fcntl()/lockf()) |
| 1646 | P: Matthew Wilcox | 1671 | P: Matthew Wilcox |
| 1647 | M: matthew@wil.cx | 1672 | M: matthew@wil.cx |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 4bb2e9310a56..20f45a8b87e3 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -626,20 +626,6 @@ config ADVANCED_OPTIONS | |||
| 626 | comment "Default settings for advanced configuration options are used" | 626 | comment "Default settings for advanced configuration options are used" |
| 627 | depends on !ADVANCED_OPTIONS | 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 | config LOWMEM_SIZE_BOOL | 629 | config LOWMEM_SIZE_BOOL |
| 644 | bool "Set maximum low memory" | 630 | bool "Set maximum low memory" |
| 645 | depends on ADVANCED_OPTIONS | 631 | depends on ADVANCED_OPTIONS |
| @@ -656,21 +642,76 @@ config LOWMEM_SIZE | |||
| 656 | hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL | 642 | hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL |
| 657 | default "0x30000000" | 643 | default "0x30000000" |
| 658 | 644 | ||
| 645 | config RELOCATABLE | ||
| 646 | bool "Build a relocatable kernel (EXPERIMENTAL)" | ||
| 647 | depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE | ||
| 648 | help | ||
| 649 | This builds a kernel image that is capable of running at the | ||
| 650 | location the kernel is loaded at (some alignment restrictions may | ||
| 651 | exist). | ||
| 652 | |||
| 653 | One use is for the kexec on panic case where the recovery kernel | ||
| 654 | must live at a different physical address than the primary | ||
| 655 | kernel. | ||
| 656 | |||
| 657 | Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address | ||
| 658 | it has been loaded at and the compile time physical addresses | ||
| 659 | CONFIG_PHYSICAL_START is ignored. However CONFIG_PHYSICAL_START | ||
| 660 | setting can still be useful to bootwrappers that need to know the | ||
| 661 | load location of the kernel (eg. u-boot/mkimage). | ||
| 662 | |||
| 663 | config PAGE_OFFSET_BOOL | ||
| 664 | bool "Set custom page offset address" | ||
| 665 | depends on ADVANCED_OPTIONS | ||
| 666 | help | ||
| 667 | This option allows you to set the kernel virtual address at which | ||
| 668 | the kernel will map low memory. This can be useful in optimizing | ||
| 669 | the virtual memory layout of the system. | ||
| 670 | |||
| 671 | Say N here unless you know what you are doing. | ||
| 672 | |||
| 673 | config PAGE_OFFSET | ||
| 674 | hex "Virtual address of memory base" if PAGE_OFFSET_BOOL | ||
| 675 | default "0xc0000000" | ||
| 676 | |||
| 659 | config KERNEL_START_BOOL | 677 | config KERNEL_START_BOOL |
| 660 | bool "Set custom kernel base address" | 678 | bool "Set custom kernel base address" |
| 661 | depends on ADVANCED_OPTIONS | 679 | depends on ADVANCED_OPTIONS |
| 662 | help | 680 | help |
| 663 | This option allows you to set the kernel virtual address at which | 681 | This option allows you to set the kernel virtual address at which |
| 664 | the kernel will map low memory (the kernel image will be linked at | 682 | the kernel will be loaded. Normally this should match PAGE_OFFSET |
| 665 | this address). This can be useful in optimizing the virtual memory | 683 | however there are times (like kdump) that one might not want them |
| 666 | layout of the system. | 684 | to be the same. |
| 667 | 685 | ||
| 668 | Say N here unless you know what you are doing. | 686 | Say N here unless you know what you are doing. |
| 669 | 687 | ||
| 670 | config KERNEL_START | 688 | config KERNEL_START |
| 671 | hex "Virtual address of kernel base" if KERNEL_START_BOOL | 689 | hex "Virtual address of kernel base" if KERNEL_START_BOOL |
| 690 | default PAGE_OFFSET if PAGE_OFFSET_BOOL | ||
| 691 | default "0xc2000000" if CRASH_DUMP | ||
| 672 | default "0xc0000000" | 692 | default "0xc0000000" |
| 673 | 693 | ||
| 694 | config PHYSICAL_START_BOOL | ||
| 695 | bool "Set physical address where the kernel is loaded" | ||
| 696 | depends on ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE | ||
| 697 | help | ||
| 698 | This gives the physical address where the kernel is loaded. | ||
| 699 | |||
| 700 | Say N here unless you know what you are doing. | ||
| 701 | |||
| 702 | config PHYSICAL_START | ||
| 703 | hex "Physical address where the kernel is loaded" if PHYSICAL_START_BOOL | ||
| 704 | default "0x02000000" if PPC_STD_MMU && CRASH_DUMP | ||
| 705 | default "0x00000000" | ||
| 706 | |||
| 707 | config PHYSICAL_ALIGN | ||
| 708 | hex | ||
| 709 | default "0x10000000" if FSL_BOOKE | ||
| 710 | help | ||
| 711 | This value puts the alignment restrictions on physical address | ||
| 712 | where kernel is loaded and run from. Kernel is compiled for an | ||
| 713 | address which meets above alignment restriction. | ||
| 714 | |||
| 674 | config TASK_SIZE_BOOL | 715 | config TASK_SIZE_BOOL |
| 675 | bool "Set custom user task size" | 716 | bool "Set custom user task size" |
| 676 | depends on ADVANCED_OPTIONS | 717 | depends on ADVANCED_OPTIONS |
| @@ -717,9 +758,17 @@ config PIN_TLB | |||
| 717 | endmenu | 758 | endmenu |
| 718 | 759 | ||
| 719 | if PPC64 | 760 | if PPC64 |
| 761 | config PAGE_OFFSET | ||
| 762 | hex | ||
| 763 | default "0xc000000000000000" | ||
| 720 | config KERNEL_START | 764 | config KERNEL_START |
| 721 | hex | 765 | hex |
| 766 | default "0xc000000002000000" if CRASH_DUMP | ||
| 722 | default "0xc000000000000000" | 767 | default "0xc000000000000000" |
| 768 | config PHYSICAL_START | ||
| 769 | hex | ||
| 770 | default "0x02000000" if CRASH_DUMP | ||
| 771 | default "0x00000000" | ||
| 723 | endif | 772 | endif |
| 724 | 773 | ||
| 725 | source "net/Kconfig" | 774 | source "net/Kconfig" |
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore index 5ef2bdf8d189..2347294ff35b 100644 --- a/arch/powerpc/boot/.gitignore +++ b/arch/powerpc/boot/.gitignore | |||
| @@ -27,6 +27,7 @@ zImage.chrp | |||
| 27 | zImage.coff | 27 | zImage.coff |
| 28 | zImage.coff.lds | 28 | zImage.coff.lds |
| 29 | zImage.ep* | 29 | zImage.ep* |
| 30 | zImage.iseries | ||
| 30 | zImage.*lds | 31 | zImage.*lds |
| 31 | zImage.miboot | 32 | zImage.miboot |
| 32 | zImage.pmac | 33 | zImage.pmac |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 5ba50c673390..7822d25c9d31 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
| @@ -40,7 +40,7 @@ $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405 | |||
| 40 | $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 | 40 | $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 |
| 41 | $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 | 41 | $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 |
| 42 | $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 | 42 | $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 |
| 43 | $(obj)/virtex405-head.o: BOOTCFLAGS += -mcpu=405 | 43 | $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405 |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | zlib := inffast.c inflate.c inftrees.c | 46 | zlib := inffast.c inflate.c inftrees.c |
diff --git a/arch/powerpc/boot/dts/canyonlands.dts b/arch/powerpc/boot/dts/canyonlands.dts index 6f3d38a1554f..39634124929b 100644 --- a/arch/powerpc/boot/dts/canyonlands.dts +++ b/arch/powerpc/boot/dts/canyonlands.dts | |||
| @@ -142,8 +142,45 @@ | |||
| 142 | #address-cells = <2>; | 142 | #address-cells = <2>; |
| 143 | #size-cells = <1>; | 143 | #size-cells = <1>; |
| 144 | clock-frequency = <0>; /* Filled in by U-Boot */ | 144 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 145 | /* ranges property is supplied by U-Boot */ | ||
| 145 | interrupts = <6 4>; | 146 | interrupts = <6 4>; |
| 146 | interrupt-parent = <&UIC1>; | 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 | UART0: serial@ef600300 { | 186 | UART0: serial@ef600300 { |
diff --git a/arch/powerpc/boot/dts/glacier.dts b/arch/powerpc/boot/dts/glacier.dts index 958a5ca53d35..0f2fc077d8db 100644 --- a/arch/powerpc/boot/dts/glacier.dts +++ b/arch/powerpc/boot/dts/glacier.dts | |||
| @@ -145,8 +145,45 @@ | |||
| 145 | #address-cells = <2>; | 145 | #address-cells = <2>; |
| 146 | #size-cells = <1>; | 146 | #size-cells = <1>; |
| 147 | clock-frequency = <0>; /* Filled in by U-Boot */ | 147 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 148 | /* ranges property is supplied by U-Boot */ | ||
| 148 | interrupts = <6 4>; | 149 | interrupts = <6 4>; |
| 149 | interrupt-parent = <&UIC1>; | 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 | UART0: serial@ef600300 { | 189 | UART0: serial@ef600300 { |
diff --git a/arch/powerpc/boot/ns16550.c b/arch/powerpc/boot/ns16550.c index aef3bdc89160..8c9ead94be06 100644 --- a/arch/powerpc/boot/ns16550.c +++ b/arch/powerpc/boot/ns16550.c | |||
| @@ -55,10 +55,15 @@ static u8 ns16550_tstc(void) | |||
| 55 | int ns16550_console_init(void *devp, struct serial_console_data *scdp) | 55 | int ns16550_console_init(void *devp, struct serial_console_data *scdp) |
| 56 | { | 56 | { |
| 57 | int n; | 57 | int n; |
| 58 | u32 reg_offset; | ||
| 58 | 59 | ||
| 59 | if (dt_get_virtual_reg(devp, (void **)®_base, 1) < 1) | 60 | if (dt_get_virtual_reg(devp, (void **)®_base, 1) < 1) |
| 60 | return -1; | 61 | return -1; |
| 61 | 62 | ||
| 63 | n = getprop(devp, "reg-offset", ®_offset, sizeof(reg_offset)); | ||
| 64 | if (n == sizeof(reg_offset)) | ||
| 65 | reg_base += reg_offset; | ||
| 66 | |||
| 62 | n = getprop(devp, "reg-shift", ®_shift, sizeof(reg_shift)); | 67 | n = getprop(devp, "reg-shift", ®_shift, sizeof(reg_shift)); |
| 63 | if (n != sizeof(reg_shift)) | 68 | if (n != sizeof(reg_shift)) |
| 64 | reg_shift = 0; | 69 | reg_shift = 0; |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index ce1e8d24e747..9177b21b1a95 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
| @@ -106,4 +106,13 @@ PHONY += systbl_chk | |||
| 106 | systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i | 106 | systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i |
| 107 | $(call cmd,systbl_chk) | 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 | clean-files := vmlinux.lds | 118 | clean-files := vmlinux.lds |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 292c6d8db0e1..adf1d09d726f 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
| @@ -93,10 +93,7 @@ int main(void) | |||
| 93 | DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags)); | 93 | DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags)); |
| 94 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | 94 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); |
| 95 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 95 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
| 96 | #ifdef CONFIG_PPC32 | ||
| 97 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); | ||
| 98 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 96 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
| 99 | #endif /* CONFIG_PPC32 */ | ||
| 100 | 97 | ||
| 101 | #ifdef CONFIG_PPC64 | 98 | #ifdef CONFIG_PPC64 |
| 102 | DEFINE(DCACHEL1LINESIZE, offsetof(struct ppc64_caches, dline_size)); | 99 | DEFINE(DCACHEL1LINESIZE, offsetof(struct ppc64_caches, dline_size)); |
| @@ -165,13 +162,9 @@ int main(void) | |||
| 165 | 162 | ||
| 166 | /* Interrupt register frame */ | 163 | /* Interrupt register frame */ |
| 167 | DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); | 164 | DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); |
| 168 | #ifndef CONFIG_PPC64 | 165 | DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE); |
| 169 | DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); | 166 | #ifdef CONFIG_PPC64 |
| 170 | #else /* CONFIG_PPC64 */ | ||
| 171 | DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); | 167 | DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); |
| 172 | /* 288 = # of volatile regs, int & fp, for leaf routines */ | ||
| 173 | /* which do not stack a frame. See the PPC64 ABI. */ | ||
| 174 | DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 288); | ||
| 175 | /* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */ | 168 | /* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */ |
| 176 | DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); | 169 | DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); |
| 177 | DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); | 170 | DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); |
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 5465e8de0e61..e3623e3e3451 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S | |||
| @@ -33,7 +33,6 @@ _GLOBAL(__setup_cpu_440grx) | |||
| 33 | mtlr r4 | 33 | mtlr r4 |
| 34 | blr | 34 | blr |
| 35 | _GLOBAL(__setup_cpu_460ex) | 35 | _GLOBAL(__setup_cpu_460ex) |
| 36 | _GLOBAL(__setup_cpu_460gt) | ||
| 37 | b __init_fpu_44x | 36 | b __init_fpu_44x |
| 38 | _GLOBAL(__setup_cpu_440gx) | 37 | _GLOBAL(__setup_cpu_440gx) |
| 39 | _GLOBAL(__setup_cpu_440spe) | 38 | _GLOBAL(__setup_cpu_440spe) |
diff --git a/arch/powerpc/kernel/cpu_setup_6xx.S b/arch/powerpc/kernel/cpu_setup_6xx.S index f1ee0b3f78f2..72d1d7395254 100644 --- a/arch/powerpc/kernel/cpu_setup_6xx.S +++ b/arch/powerpc/kernel/cpu_setup_6xx.S | |||
| @@ -17,7 +17,13 @@ | |||
| 17 | #include <asm/cache.h> | 17 | #include <asm/cache.h> |
| 18 | 18 | ||
| 19 | _GLOBAL(__setup_cpu_603) | 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 | _GLOBAL(__setup_cpu_604) | 27 | _GLOBAL(__setup_cpu_604) |
| 22 | mflr r4 | 28 | mflr r4 |
| 23 | bl setup_common_caches | 29 | bl setup_common_caches |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 26ffb44e2701..36080d4d1922 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
| @@ -37,7 +37,6 @@ extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); | |||
| 37 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); | 37 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); |
| 38 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); | 38 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); |
| 39 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); | 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 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); | 40 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); |
| 42 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); | 41 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); |
| 43 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); | 42 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); |
| @@ -1416,10 +1415,9 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
| 1416 | .pvr_value = 0x13020000, | 1415 | .pvr_value = 0x13020000, |
| 1417 | .cpu_name = "460GT", | 1416 | .cpu_name = "460GT", |
| 1418 | .cpu_features = CPU_FTRS_44X, | 1417 | .cpu_features = CPU_FTRS_44X, |
| 1419 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | 1418 | .cpu_user_features = COMMON_USER_BOOKE, |
| 1420 | .icache_bsize = 32, | 1419 | .icache_bsize = 32, |
| 1421 | .dcache_bsize = 32, | 1420 | .dcache_bsize = 32, |
| 1422 | .cpu_setup = __setup_cpu_460gt, | ||
| 1423 | .machine_check = machine_check_440A, | 1421 | .machine_check = machine_check_440A, |
| 1424 | .platform = "ppc440", | 1422 | .platform = "ppc440", |
| 1425 | }, | 1423 | }, |
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 4ff744143566..e581524d85bc 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
| @@ -371,6 +371,17 @@ skpinv: addi r6,r6,1 /* Increment */ | |||
| 371 | 371 | ||
| 372 | bl early_init | 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 | mfspr r3,SPRN_TLB1CFG | 385 | mfspr r3,SPRN_TLB1CFG |
| 375 | andi. r3,r3,0xfff | 386 | andi. r3,r3,0xfff |
| 376 | lis r4,num_tlbcam_entries@ha | 387 | lis r4,num_tlbcam_entries@ha |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 9d2c56621f1e..92ccc6fcc5b0 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -152,7 +152,7 @@ _GLOBAL(low_choose_750fx_pll) | |||
| 152 | mtspr SPRN_HID1,r4 | 152 | mtspr SPRN_HID1,r4 |
| 153 | 153 | ||
| 154 | /* Store new HID1 image */ | 154 | /* Store new HID1 image */ |
| 155 | rlwinm r6,r1,0,0,18 | 155 | rlwinm r6,r1,0,0,(31-THREAD_SHIFT) |
| 156 | lwz r6,TI_CPU(r6) | 156 | lwz r6,TI_CPU(r6) |
| 157 | slwi r6,r6,2 | 157 | slwi r6,r6,2 |
| 158 | addis r6,r6,nap_save_hid1@ha | 158 | addis r6,r6,nap_save_hid1@ha |
| @@ -281,7 +281,7 @@ _GLOBAL(_tlbia) | |||
| 281 | #endif /* CONFIG_SMP */ | 281 | #endif /* CONFIG_SMP */ |
| 282 | #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ | 282 | #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ |
| 283 | #if defined(CONFIG_SMP) | 283 | #if defined(CONFIG_SMP) |
| 284 | rlwinm r8,r1,0,0,18 | 284 | rlwinm r8,r1,0,0,(31-THREAD_SHIFT) |
| 285 | lwz r8,TI_CPU(r8) | 285 | lwz r8,TI_CPU(r8) |
| 286 | oris r8,r8,10 | 286 | oris r8,r8,10 |
| 287 | mfmsr r10 | 287 | mfmsr r10 |
| @@ -377,7 +377,7 @@ _GLOBAL(_tlbie) | |||
| 377 | #endif /* CONFIG_SMP */ | 377 | #endif /* CONFIG_SMP */ |
| 378 | #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ | 378 | #else /* !(CONFIG_40x || CONFIG_44x || CONFIG_FSL_BOOKE) */ |
| 379 | #if defined(CONFIG_SMP) | 379 | #if defined(CONFIG_SMP) |
| 380 | rlwinm r8,r1,0,0,18 | 380 | rlwinm r8,r1,0,0,(31-THREAD_SHIFT) |
| 381 | lwz r8,TI_CPU(r8) | 381 | lwz r8,TI_CPU(r8) |
| 382 | oris r8,r8,11 | 382 | oris r8,r8,11 |
| 383 | mfmsr r10 | 383 | mfmsr r10 |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index a3c491e88a72..942951e76586 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
| @@ -27,23 +27,11 @@ | |||
| 27 | 27 | ||
| 28 | .text | 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 | #ifdef CONFIG_IRQSTACKS | 30 | #ifdef CONFIG_IRQSTACKS |
| 43 | _GLOBAL(call_do_softirq) | 31 | _GLOBAL(call_do_softirq) |
| 44 | mflr r0 | 32 | mflr r0 |
| 45 | std r0,16(r1) | 33 | std r0,16(r1) |
| 46 | stdu r1,THREAD_SIZE-112(r3) | 34 | stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3) |
| 47 | mr r1,r3 | 35 | mr r1,r3 |
| 48 | bl .__do_softirq | 36 | bl .__do_softirq |
| 49 | ld r1,0(r1) | 37 | ld r1,0(r1) |
| @@ -56,7 +44,7 @@ _GLOBAL(call_handle_irq) | |||
| 56 | mflr r0 | 44 | mflr r0 |
| 57 | std r0,16(r1) | 45 | std r0,16(r1) |
| 58 | mtctr r8 | 46 | mtctr r8 |
| 59 | stdu r1,THREAD_SIZE-112(r5) | 47 | stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r5) |
| 60 | mr r1,r5 | 48 | mr r1,r5 |
| 61 | bctrl | 49 | bctrl |
| 62 | ld r1,0(r1) | 50 | ld r1,0(r1) |
| @@ -599,7 +587,7 @@ _GLOBAL(kexec_sequence) | |||
| 599 | std r0,16(r1) | 587 | std r0,16(r1) |
| 600 | 588 | ||
| 601 | /* switch stacks to newstack -- &kexec_stack.stack */ | 589 | /* switch stacks to newstack -- &kexec_stack.stack */ |
| 602 | stdu r1,THREAD_SIZE-112(r3) | 590 | stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3) |
| 603 | mr r1,r3 | 591 | mr r1,r3 |
| 604 | 592 | ||
| 605 | li r0,0 | 593 | li r0,0 |
| @@ -616,7 +604,7 @@ _GLOBAL(kexec_sequence) | |||
| 616 | std r26,-48(r1) | 604 | std r26,-48(r1) |
| 617 | std r25,-56(r1) | 605 | std r25,-56(r1) |
| 618 | 606 | ||
| 619 | stdu r1,-112-64(r1) | 607 | stdu r1,-STACK_FRAME_OVERHEAD-64(r1) |
| 620 | 608 | ||
| 621 | /* save args into preserved regs */ | 609 | /* save args into preserved regs */ |
| 622 | mr r31,r3 /* newstack (both) */ | 610 | mr r31,r3 /* newstack (both) */ |
diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c index fb698d47082d..e79ad8afda07 100644 --- a/arch/powerpc/kernel/of_platform.c +++ b/arch/powerpc/kernel/of_platform.c | |||
| @@ -275,6 +275,8 @@ static int __devinit of_pci_phb_probe(struct of_device *dev, | |||
| 275 | 275 | ||
| 276 | /* Scan the bus */ | 276 | /* Scan the bus */ |
| 277 | scan_phb(phb); | 277 | scan_phb(phb); |
| 278 | if (phb->bus == NULL) | ||
| 279 | return -ENXIO; | ||
| 278 | 280 | ||
| 279 | /* Claim resources. This might need some rework as well depending | 281 | /* Claim resources. This might need some rework as well depending |
| 280 | * wether we are doing probe-only or not, like assigning unassigned | 282 | * wether we are doing probe-only or not, like assigning unassigned |
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index ac163bd46cfd..c9bf17eec31b 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c | |||
| @@ -7,17 +7,11 @@ | |||
| 7 | * 2 of the License, or (at your option) any later version. | 7 | * 2 of the License, or (at your option) any later version. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/types.h> | ||
| 11 | #include <linux/threads.h> | 10 | #include <linux/threads.h> |
| 12 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 13 | 12 | ||
| 14 | #include <asm/processor.h> | ||
| 15 | #include <asm/ptrace.h> | ||
| 16 | #include <asm/page.h> | ||
| 17 | #include <asm/lppaca.h> | 13 | #include <asm/lppaca.h> |
| 18 | #include <asm/paca.h> | 14 | #include <asm/paca.h> |
| 19 | #include <asm/mmu.h> | ||
| 20 | |||
| 21 | 15 | ||
| 22 | /* This symbol is provided by the linker - let it fill in the paca | 16 | /* This symbol is provided by the linker - let it fill in the paca |
| 23 | * field correctly */ | 17 | * field correctly */ |
| @@ -65,60 +59,29 @@ struct slb_shadow slb_shadow[] __cacheline_aligned = { | |||
| 65 | * processors. The processor VPD array needs one entry per physical | 59 | * processors. The processor VPD array needs one entry per physical |
| 66 | * processor (not thread). | 60 | * processor (not thread). |
| 67 | */ | 61 | */ |
| 68 | #define PACA_INIT(number) \ | 62 | struct paca_struct paca[NR_CPUS]; |
| 69 | { \ | ||
| 70 | .lppaca_ptr = &lppaca[number], \ | ||
| 71 | .lock_token = 0x8000, \ | ||
| 72 | .paca_index = (number), /* Paca Index */ \ | ||
| 73 | .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ | ||
| 74 | .hw_cpu_id = 0xffff, \ | ||
| 75 | .slb_shadow_ptr = &slb_shadow[number], \ | ||
| 76 | .__current = &init_task, \ | ||
| 77 | } | ||
| 78 | |||
| 79 | struct paca_struct paca[] = { | ||
| 80 | PACA_INIT(0), | ||
| 81 | #if NR_CPUS > 1 | ||
| 82 | PACA_INIT( 1), PACA_INIT( 2), PACA_INIT( 3), | ||
| 83 | #if NR_CPUS > 4 | ||
| 84 | PACA_INIT( 4), PACA_INIT( 5), PACA_INIT( 6), PACA_INIT( 7), | ||
| 85 | #if NR_CPUS > 8 | ||
| 86 | PACA_INIT( 8), PACA_INIT( 9), PACA_INIT( 10), PACA_INIT( 11), | ||
| 87 | PACA_INIT( 12), PACA_INIT( 13), PACA_INIT( 14), PACA_INIT( 15), | ||
| 88 | PACA_INIT( 16), PACA_INIT( 17), PACA_INIT( 18), PACA_INIT( 19), | ||
| 89 | PACA_INIT( 20), PACA_INIT( 21), PACA_INIT( 22), PACA_INIT( 23), | ||
| 90 | PACA_INIT( 24), PACA_INIT( 25), PACA_INIT( 26), PACA_INIT( 27), | ||
| 91 | PACA_INIT( 28), PACA_INIT( 29), PACA_INIT( 30), PACA_INIT( 31), | ||
| 92 | #if NR_CPUS > 32 | ||
| 93 | PACA_INIT( 32), PACA_INIT( 33), PACA_INIT( 34), PACA_INIT( 35), | ||
| 94 | PACA_INIT( 36), PACA_INIT( 37), PACA_INIT( 38), PACA_INIT( 39), | ||
| 95 | PACA_INIT( 40), PACA_INIT( 41), PACA_INIT( 42), PACA_INIT( 43), | ||
| 96 | PACA_INIT( 44), PACA_INIT( 45), PACA_INIT( 46), PACA_INIT( 47), | ||
| 97 | PACA_INIT( 48), PACA_INIT( 49), PACA_INIT( 50), PACA_INIT( 51), | ||
| 98 | PACA_INIT( 52), PACA_INIT( 53), PACA_INIT( 54), PACA_INIT( 55), | ||
| 99 | PACA_INIT( 56), PACA_INIT( 57), PACA_INIT( 58), PACA_INIT( 59), | ||
| 100 | PACA_INIT( 60), PACA_INIT( 61), PACA_INIT( 62), PACA_INIT( 63), | ||
| 101 | #if NR_CPUS > 64 | ||
| 102 | PACA_INIT( 64), PACA_INIT( 65), PACA_INIT( 66), PACA_INIT( 67), | ||
| 103 | PACA_INIT( 68), PACA_INIT( 69), PACA_INIT( 70), PACA_INIT( 71), | ||
| 104 | PACA_INIT( 72), PACA_INIT( 73), PACA_INIT( 74), PACA_INIT( 75), | ||
| 105 | PACA_INIT( 76), PACA_INIT( 77), PACA_INIT( 78), PACA_INIT( 79), | ||
| 106 | PACA_INIT( 80), PACA_INIT( 81), PACA_INIT( 82), PACA_INIT( 83), | ||
| 107 | PACA_INIT( 84), PACA_INIT( 85), PACA_INIT( 86), PACA_INIT( 87), | ||
| 108 | PACA_INIT( 88), PACA_INIT( 89), PACA_INIT( 90), PACA_INIT( 91), | ||
| 109 | PACA_INIT( 92), PACA_INIT( 93), PACA_INIT( 94), PACA_INIT( 95), | ||
| 110 | PACA_INIT( 96), PACA_INIT( 97), PACA_INIT( 98), PACA_INIT( 99), | ||
| 111 | PACA_INIT(100), PACA_INIT(101), PACA_INIT(102), PACA_INIT(103), | ||
| 112 | PACA_INIT(104), PACA_INIT(105), PACA_INIT(106), PACA_INIT(107), | ||
| 113 | PACA_INIT(108), PACA_INIT(109), PACA_INIT(110), PACA_INIT(111), | ||
| 114 | PACA_INIT(112), PACA_INIT(113), PACA_INIT(114), PACA_INIT(115), | ||
| 115 | PACA_INIT(116), PACA_INIT(117), PACA_INIT(118), PACA_INIT(119), | ||
| 116 | PACA_INIT(120), PACA_INIT(121), PACA_INIT(122), PACA_INIT(123), | ||
| 117 | PACA_INIT(124), PACA_INIT(125), PACA_INIT(126), PACA_INIT(127), | ||
| 118 | #endif | ||
| 119 | #endif | ||
| 120 | #endif | ||
| 121 | #endif | ||
| 122 | #endif | ||
| 123 | }; | ||
| 124 | EXPORT_SYMBOL(paca); | 63 | EXPORT_SYMBOL(paca); |
| 64 | |||
| 65 | void __init initialise_pacas(void) | ||
| 66 | { | ||
| 67 | int cpu; | ||
| 68 | |||
| 69 | /* The TOC register (GPR2) points 32kB into the TOC, so that 64kB | ||
| 70 | * of the TOC can be addressed using a single machine instruction. | ||
| 71 | */ | ||
| 72 | unsigned long kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL; | ||
| 73 | |||
| 74 | /* Can't use for_each_*_cpu, as they aren't functional yet */ | ||
| 75 | for (cpu = 0; cpu < NR_CPUS; cpu++) { | ||
| 76 | struct paca_struct *new_paca = &paca[cpu]; | ||
| 77 | |||
| 78 | new_paca->lppaca_ptr = &lppaca[cpu]; | ||
| 79 | new_paca->lock_token = 0x8000; | ||
| 80 | new_paca->paca_index = cpu; | ||
| 81 | new_paca->kernel_toc = kernel_toc; | ||
| 82 | new_paca->hw_cpu_id = 0xffff; | ||
| 83 | new_paca->slb_shadow_ptr = &slb_shadow[cpu]; | ||
| 84 | new_paca->__current = &init_task; | ||
| 85 | |||
| 86 | } | ||
| 87 | } | ||
diff --git a/arch/powerpc/kernel/ppc32.h b/arch/powerpc/kernel/ppc32.h index fda05e2211d6..90e562771791 100644 --- a/arch/powerpc/kernel/ppc32.h +++ b/arch/powerpc/kernel/ppc32.h | |||
| @@ -135,6 +135,4 @@ struct ucontext32 { | |||
| 135 | struct mcontext32 uc_mcontext; | 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 | #endif /* _PPC64_PPC32_H */ | 138 | #endif /* _PPC64_PPC32_H */ |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 703100d5e458..6caad17ea72e 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -1033,3 +1033,34 @@ void ppc64_runlatch_off(void) | |||
| 1033 | } | 1033 | } |
| 1034 | } | 1034 | } |
| 1035 | #endif | 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 */ | ||
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 3bfe7837e820..2aefe2a4129a 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -53,6 +53,7 @@ | |||
| 53 | #include <asm/pci-bridge.h> | 53 | #include <asm/pci-bridge.h> |
| 54 | #include <asm/phyp_dump.h> | 54 | #include <asm/phyp_dump.h> |
| 55 | #include <asm/kexec.h> | 55 | #include <asm/kexec.h> |
| 56 | #include <mm/mmu_decl.h> | ||
| 56 | 57 | ||
| 57 | #ifdef DEBUG | 58 | #ifdef DEBUG |
| 58 | #define DBG(fmt...) printk(KERN_ERR fmt) | 59 | #define DBG(fmt...) printk(KERN_ERR fmt) |
| @@ -978,7 +979,10 @@ static int __init early_init_dt_scan_memory(unsigned long node, | |||
| 978 | } | 979 | } |
| 979 | #endif | 980 | #endif |
| 980 | lmb_add(base, size); | 981 | lmb_add(base, size); |
| 982 | |||
| 983 | memstart_addr = min((u64)memstart_addr, base); | ||
| 981 | } | 984 | } |
| 985 | |||
| 982 | return 0; | 986 | return 0; |
| 983 | } | 987 | } |
| 984 | 988 | ||
diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh new file mode 100644 index 000000000000..8e24fc1821e8 --- /dev/null +++ b/arch/powerpc/kernel/prom_init_check.sh | |||
| @@ -0,0 +1,58 @@ | |||
| 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 | ||
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c index 9d30e10970ac..4c1de6af4c09 100644 --- a/arch/powerpc/kernel/ptrace32.c +++ b/arch/powerpc/kernel/ptrace32.c | |||
| @@ -29,15 +29,12 @@ | |||
| 29 | #include <linux/security.h> | 29 | #include <linux/security.h> |
| 30 | #include <linux/signal.h> | 30 | #include <linux/signal.h> |
| 31 | #include <linux/compat.h> | 31 | #include <linux/compat.h> |
| 32 | #include <linux/elf.h> | ||
| 33 | 32 | ||
| 34 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
| 35 | #include <asm/page.h> | 34 | #include <asm/page.h> |
| 36 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
| 37 | #include <asm/system.h> | 36 | #include <asm/system.h> |
| 38 | 37 | ||
| 39 | #include "ppc32.h" | ||
| 40 | |||
| 41 | /* | 38 | /* |
| 42 | * does not yet catch signals sent when the child dies. | 39 | * does not yet catch signals sent when the child dies. |
| 43 | * in exit.c or in signal.c. | 40 | * in exit.c or in signal.c. |
| @@ -67,27 +64,6 @@ static long compat_ptrace_old(struct task_struct *child, long request, | |||
| 67 | return -EPERM; | 64 | return -EPERM; |
| 68 | } | 65 | } |
| 69 | 66 | ||
| 70 | static int compat_ptrace_getsiginfo(struct task_struct *child, compat_siginfo_t __user *data) | ||
| 71 | { | ||
| 72 | siginfo_t lastinfo; | ||
| 73 | int error = -ESRCH; | ||
| 74 | |||
| 75 | read_lock(&tasklist_lock); | ||
| 76 | if (likely(child->sighand != NULL)) { | ||
| 77 | error = -EINVAL; | ||
| 78 | spin_lock_irq(&child->sighand->siglock); | ||
| 79 | if (likely(child->last_siginfo != NULL)) { | ||
| 80 | lastinfo = *child->last_siginfo; | ||
| 81 | error = 0; | ||
| 82 | } | ||
| 83 | spin_unlock_irq(&child->sighand->siglock); | ||
| 84 | } | ||
| 85 | read_unlock(&tasklist_lock); | ||
| 86 | if (!error) | ||
| 87 | return copy_siginfo_to_user32(data, &lastinfo); | ||
| 88 | return error; | ||
| 89 | } | ||
| 90 | |||
| 91 | long compat_arch_ptrace(struct task_struct *child, compat_long_t request, | 67 | long compat_arch_ptrace(struct task_struct *child, compat_long_t request, |
| 92 | compat_ulong_t caddr, compat_ulong_t cdata) | 68 | compat_ulong_t caddr, compat_ulong_t cdata) |
| 93 | { | 69 | { |
| @@ -306,9 +282,6 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request, | |||
| 306 | 0, PT_REGS_COUNT * sizeof(compat_long_t), | 282 | 0, PT_REGS_COUNT * sizeof(compat_long_t), |
| 307 | compat_ptr(data)); | 283 | compat_ptr(data)); |
| 308 | 284 | ||
| 309 | case PTRACE_GETSIGINFO: | ||
| 310 | return compat_ptrace_getsiginfo(child, compat_ptr(data)); | ||
| 311 | |||
| 312 | case PTRACE_GETFPREGS: | 285 | case PTRACE_GETFPREGS: |
| 313 | case PTRACE_SETFPREGS: | 286 | case PTRACE_SETFPREGS: |
| 314 | case PTRACE_GETVRREGS: | 287 | case PTRACE_GETVRREGS: |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 31ada9fdfc5c..dff6308d1b5e 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -170,6 +170,9 @@ void __init setup_paca(int cpu) | |||
| 170 | 170 | ||
| 171 | void __init early_setup(unsigned long dt_ptr) | 171 | void __init early_setup(unsigned long dt_ptr) |
| 172 | { | 172 | { |
| 173 | /* Fill in any unititialised pacas */ | ||
| 174 | initialise_pacas(); | ||
| 175 | |||
| 173 | /* Identify CPU type */ | 176 | /* Identify CPU type */ |
| 174 | identify_cpu(0, mfspr(SPRN_PVR)); | 177 | identify_cpu(0, mfspr(SPRN_PVR)); |
| 175 | 178 | ||
| @@ -435,7 +438,7 @@ void __init setup_system(void) | |||
| 435 | printk("htab_address = 0x%p\n", htab_address); | 438 | printk("htab_address = 0x%p\n", htab_address); |
| 436 | printk("htab_hash_mask = 0x%lx\n", htab_hash_mask); | 439 | printk("htab_hash_mask = 0x%lx\n", htab_hash_mask); |
| 437 | #if PHYSICAL_START > 0 | 440 | #if PHYSICAL_START > 0 |
| 438 | printk("physical_start = 0x%x\n", PHYSICAL_START); | 441 | printk("physical_start = 0x%lx\n", PHYSICAL_START); |
| 439 | #endif | 442 | #endif |
| 440 | printk("-----------------------------------------------------\n"); | 443 | printk("-----------------------------------------------------\n"); |
| 441 | 444 | ||
diff --git a/arch/powerpc/kernel/stacktrace.c b/arch/powerpc/kernel/stacktrace.c index e3638eeaaae7..962944038430 100644 --- a/arch/powerpc/kernel/stacktrace.c +++ b/arch/powerpc/kernel/stacktrace.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
| 14 | #include <linux/stacktrace.h> | 14 | #include <linux/stacktrace.h> |
| 15 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
| 16 | #include <asm/asm-offsets.h> | ||
| 17 | 16 | ||
| 18 | /* | 17 | /* |
| 19 | * Save stack-backtrace addresses into a stack_trace buffer. | 18 | * Save stack-backtrace addresses into a stack_trace buffer. |
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c index 7aad6203e411..7d6c9bb8c77f 100644 --- a/arch/powerpc/kernel/udbg.c +++ b/arch/powerpc/kernel/udbg.c | |||
| @@ -154,8 +154,8 @@ static void udbg_console_write(struct console *con, const char *s, | |||
| 154 | static struct console udbg_console = { | 154 | static struct console udbg_console = { |
| 155 | .name = "udbg", | 155 | .name = "udbg", |
| 156 | .write = udbg_console_write, | 156 | .write = udbg_console_write, |
| 157 | .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT, | 157 | .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT | CON_ANYTIME, |
| 158 | .index = -1, | 158 | .index = 0, |
| 159 | }; | 159 | }; |
| 160 | 160 | ||
| 161 | static int early_console_initialized; | 161 | static int early_console_initialized; |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index ada249bf9779..ce10e2b1b902 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
| @@ -202,7 +202,7 @@ adjust_total_lowmem(void) | |||
| 202 | cam_max_size = max_lowmem_size; | 202 | cam_max_size = max_lowmem_size; |
| 203 | 203 | ||
| 204 | /* adjust lowmem size to max_lowmem_size */ | 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 | /* Calculate CAM values */ | 207 | /* Calculate CAM values */ |
| 208 | __cam0 = 1UL << 2 * (__ilog2(ram) / 2); | 208 | __cam0 = 1UL << 2 * (__ilog2(ram) / 2); |
diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S index e10d76a860d3..ddeaf9e38ad5 100644 --- a/arch/powerpc/mm/hash_low_32.S +++ b/arch/powerpc/mm/hash_low_32.S | |||
| @@ -191,7 +191,7 @@ _GLOBAL(add_hash_page) | |||
| 191 | add r3,r3,r0 /* note create_hpte trims to 24 bits */ | 191 | add r3,r3,r0 /* note create_hpte trims to 24 bits */ |
| 192 | 192 | ||
| 193 | #ifdef CONFIG_SMP | 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 | lwz r8,TI_CPU(r8) /* to go in mmu_hash_lock */ | 195 | lwz r8,TI_CPU(r8) /* to go in mmu_hash_lock */ |
| 196 | oris r8,r8,12 | 196 | oris r8,r8,12 |
| 197 | #endif /* CONFIG_SMP */ | 197 | #endif /* CONFIG_SMP */ |
| @@ -526,7 +526,7 @@ _GLOBAL(flush_hash_pages) | |||
| 526 | #ifdef CONFIG_SMP | 526 | #ifdef CONFIG_SMP |
| 527 | addis r9,r7,mmu_hash_lock@ha | 527 | addis r9,r7,mmu_hash_lock@ha |
| 528 | addi r9,r9,mmu_hash_lock@l | 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 | add r8,r8,r7 | 530 | add r8,r8,r7 |
| 531 | lwz r8,TI_CPU(r8) | 531 | lwz r8,TI_CPU(r8) |
| 532 | oris r8,r8,9 | 532 | oris r8,r8,9 |
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c index 47325f23c51f..1952b4d3fa7f 100644 --- a/arch/powerpc/mm/init_32.c +++ b/arch/powerpc/mm/init_32.c | |||
| @@ -59,7 +59,10 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | |||
| 59 | unsigned long total_memory; | 59 | unsigned long total_memory; |
| 60 | unsigned long total_lowmem; | 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 | phys_addr_t lowmem_end_addr; | 66 | phys_addr_t lowmem_end_addr; |
| 64 | 67 | ||
| 65 | int boot_mapsize; | 68 | int boot_mapsize; |
| @@ -68,14 +71,6 @@ unsigned long agp_special_page; | |||
| 68 | EXPORT_SYMBOL(agp_special_page); | 71 | EXPORT_SYMBOL(agp_special_page); |
| 69 | #endif | 72 | #endif |
| 70 | 73 | ||
| 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 | #endif | ||
| 78 | |||
| 79 | void MMU_init(void); | 74 | void MMU_init(void); |
| 80 | 75 | ||
| 81 | /* XXX should be in current.h -- paulus */ | 76 | /* XXX should be in current.h -- paulus */ |
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c index 698bd000f98b..c5ac532a0161 100644 --- a/arch/powerpc/mm/init_64.c +++ b/arch/powerpc/mm/init_64.c | |||
| @@ -72,7 +72,8 @@ | |||
| 72 | #warning TASK_SIZE is smaller than it needs to be. | 72 | #warning TASK_SIZE is smaller than it needs to be. |
| 73 | #endif | 73 | #endif |
| 74 | 74 | ||
| 75 | phys_addr_t memstart_addr; | 75 | phys_addr_t memstart_addr = ~0; |
| 76 | phys_addr_t kernstart_addr; | ||
| 76 | 77 | ||
| 77 | void free_initmem(void) | 78 | void free_initmem(void) |
| 78 | { | 79 | { |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 16def4dcff6d..5ccb579b81e4 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
| @@ -45,6 +45,7 @@ | |||
| 45 | #include <asm/tlb.h> | 45 | #include <asm/tlb.h> |
| 46 | #include <asm/sections.h> | 46 | #include <asm/sections.h> |
| 47 | #include <asm/vdso.h> | 47 | #include <asm/vdso.h> |
| 48 | #include <asm/fixmap.h> | ||
| 48 | 49 | ||
| 49 | #include "mmu_decl.h" | 50 | #include "mmu_decl.h" |
| 50 | 51 | ||
| @@ -57,6 +58,20 @@ int init_bootmem_done; | |||
| 57 | int mem_init_done; | 58 | int mem_init_done; |
| 58 | unsigned long memory_limit; | 59 | unsigned long memory_limit; |
| 59 | 60 | ||
| 61 | #ifdef CONFIG_HIGHMEM | ||
| 62 | pte_t *kmap_pte; | ||
| 63 | pgprot_t kmap_prot; | ||
| 64 | |||
| 65 | EXPORT_SYMBOL(kmap_prot); | ||
| 66 | EXPORT_SYMBOL(kmap_pte); | ||
| 67 | |||
| 68 | static inline pte_t *virt_to_kpte(unsigned long vaddr) | ||
| 69 | { | ||
| 70 | return pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), | ||
| 71 | vaddr), vaddr), vaddr); | ||
| 72 | } | ||
| 73 | #endif | ||
| 74 | |||
| 60 | int page_is_ram(unsigned long pfn) | 75 | int page_is_ram(unsigned long pfn) |
| 61 | { | 76 | { |
| 62 | unsigned long paddr = (pfn << PAGE_SHIFT); | 77 | unsigned long paddr = (pfn << PAGE_SHIFT); |
| @@ -216,7 +231,7 @@ void __init do_init_bootmem(void) | |||
| 216 | unsigned long total_pages; | 231 | unsigned long total_pages; |
| 217 | int boot_mapsize; | 232 | int boot_mapsize; |
| 218 | 233 | ||
| 219 | max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; | 234 | max_low_pfn = max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; |
| 220 | total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT; | 235 | total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT; |
| 221 | #ifdef CONFIG_HIGHMEM | 236 | #ifdef CONFIG_HIGHMEM |
| 222 | total_pages = total_lowmem >> PAGE_SHIFT; | 237 | total_pages = total_lowmem >> PAGE_SHIFT; |
| @@ -232,7 +247,8 @@ void __init do_init_bootmem(void) | |||
| 232 | 247 | ||
| 233 | start = lmb_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE); | 248 | start = lmb_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE); |
| 234 | 249 | ||
| 235 | boot_mapsize = init_bootmem(start >> PAGE_SHIFT, total_pages); | 250 | min_low_pfn = MEMORY_START >> PAGE_SHIFT; |
| 251 | boot_mapsize = init_bootmem_node(NODE_DATA(0), start >> PAGE_SHIFT, min_low_pfn, max_low_pfn); | ||
| 236 | 252 | ||
| 237 | /* Add active regions with valid PFNs */ | 253 | /* Add active regions with valid PFNs */ |
| 238 | for (i = 0; i < lmb.memory.cnt; i++) { | 254 | for (i = 0; i < lmb.memory.cnt; i++) { |
| @@ -310,14 +326,19 @@ void __init paging_init(void) | |||
| 310 | unsigned long top_of_ram = lmb_end_of_DRAM(); | 326 | unsigned long top_of_ram = lmb_end_of_DRAM(); |
| 311 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | 327 | unsigned long max_zone_pfns[MAX_NR_ZONES]; |
| 312 | 328 | ||
| 329 | #ifdef CONFIG_PPC32 | ||
| 330 | unsigned long v = __fix_to_virt(__end_of_fixed_addresses - 1); | ||
| 331 | unsigned long end = __fix_to_virt(FIX_HOLE); | ||
| 332 | |||
| 333 | for (; v < end; v += PAGE_SIZE) | ||
| 334 | map_page(v, 0, 0); /* XXX gross */ | ||
| 335 | #endif | ||
| 336 | |||
| 313 | #ifdef CONFIG_HIGHMEM | 337 | #ifdef CONFIG_HIGHMEM |
| 314 | map_page(PKMAP_BASE, 0, 0); /* XXX gross */ | 338 | map_page(PKMAP_BASE, 0, 0); /* XXX gross */ |
| 315 | pkmap_page_table = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k | 339 | pkmap_page_table = virt_to_kpte(PKMAP_BASE); |
| 316 | (PKMAP_BASE), PKMAP_BASE), PKMAP_BASE), PKMAP_BASE); | 340 | |
| 317 | map_page(KMAP_FIX_BEGIN, 0, 0); /* XXX gross */ | 341 | kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN)); |
| 318 | kmap_pte = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k | ||
| 319 | (KMAP_FIX_BEGIN), KMAP_FIX_BEGIN), KMAP_FIX_BEGIN), | ||
| 320 | KMAP_FIX_BEGIN); | ||
| 321 | kmap_prot = PAGE_KERNEL; | 342 | kmap_prot = PAGE_KERNEL; |
| 322 | #endif /* CONFIG_HIGHMEM */ | 343 | #endif /* CONFIG_HIGHMEM */ |
| 323 | 344 | ||
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 1efd631211ef..dc704da363eb 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/cpu.h> | 18 | #include <linux/cpu.h> |
| 19 | #include <linux/notifier.h> | 19 | #include <linux/notifier.h> |
| 20 | #include <linux/lmb.h> | 20 | #include <linux/lmb.h> |
| 21 | #include <linux/of.h> | ||
| 21 | #include <asm/sparsemem.h> | 22 | #include <asm/sparsemem.h> |
| 22 | #include <asm/prom.h> | 23 | #include <asm/prom.h> |
| 23 | #include <asm/system.h> | 24 | #include <asm/system.h> |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 64c44bcc68de..80d1babb230d 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> |
| 31 | #include <asm/pgalloc.h> | 31 | #include <asm/pgalloc.h> |
| 32 | #include <asm/fixmap.h> | ||
| 32 | #include <asm/io.h> | 33 | #include <asm/io.h> |
| 33 | 34 | ||
| 34 | #include "mmu_decl.h" | 35 | #include "mmu_decl.h" |
| @@ -387,3 +388,25 @@ void kernel_map_pages(struct page *page, int numpages, int enable) | |||
| 387 | change_page_attr(page, numpages, enable ? PAGE_KERNEL : __pgprot(0)); | 388 | change_page_attr(page, numpages, enable ? PAGE_KERNEL : __pgprot(0)); |
| 388 | } | 389 | } |
| 389 | #endif /* CONFIG_DEBUG_PAGEALLOC */ | 390 | #endif /* CONFIG_DEBUG_PAGEALLOC */ |
| 391 | |||
| 392 | static int fixmaps; | ||
| 393 | unsigned long FIXADDR_TOP = 0xfffff000; | ||
| 394 | EXPORT_SYMBOL(FIXADDR_TOP); | ||
| 395 | |||
| 396 | void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) | ||
| 397 | { | ||
| 398 | unsigned long address = __fix_to_virt(idx); | ||
| 399 | |||
| 400 | if (idx >= __end_of_fixed_addresses) { | ||
| 401 | BUG(); | ||
| 402 | return; | ||
| 403 | } | ||
| 404 | |||
| 405 | map_page(address, phys, flags); | ||
| 406 | fixmaps++; | ||
| 407 | } | ||
| 408 | |||
| 409 | void __this_fixmap_does_not_exist(void) | ||
| 410 | { | ||
| 411 | WARN_ON(1); | ||
| 412 | } | ||
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig index f38c50b4ce56..87454c526973 100644 --- a/arch/powerpc/platforms/Kconfig +++ b/arch/powerpc/platforms/Kconfig | |||
| @@ -45,7 +45,6 @@ source "arch/powerpc/platforms/powermac/Kconfig" | |||
| 45 | source "arch/powerpc/platforms/prep/Kconfig" | 45 | source "arch/powerpc/platforms/prep/Kconfig" |
| 46 | source "arch/powerpc/platforms/maple/Kconfig" | 46 | source "arch/powerpc/platforms/maple/Kconfig" |
| 47 | source "arch/powerpc/platforms/pasemi/Kconfig" | 47 | source "arch/powerpc/platforms/pasemi/Kconfig" |
| 48 | source "arch/powerpc/platforms/celleb/Kconfig" | ||
| 49 | source "arch/powerpc/platforms/ps3/Kconfig" | 48 | source "arch/powerpc/platforms/ps3/Kconfig" |
| 50 | source "arch/powerpc/platforms/cell/Kconfig" | 49 | source "arch/powerpc/platforms/cell/Kconfig" |
| 51 | source "arch/powerpc/platforms/8xx/Kconfig" | 50 | source "arch/powerpc/platforms/8xx/Kconfig" |
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index 5fc7fac10e93..f7efaa925a13 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype | |||
| @@ -220,8 +220,8 @@ config SMP | |||
| 220 | If you don't know what to do here, say N. | 220 | If you don't know what to do here, say N. |
| 221 | 221 | ||
| 222 | config NR_CPUS | 222 | config NR_CPUS |
| 223 | int "Maximum number of CPUs (2-128)" | 223 | int "Maximum number of CPUs (2-1024)" |
| 224 | range 2 128 | 224 | range 2 1024 |
| 225 | depends on SMP | 225 | depends on SMP |
| 226 | default "32" if PPC64 | 226 | default "32" if PPC64 |
| 227 | default "4" | 227 | default "4" |
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile index a984894466d9..423a0234dc31 100644 --- a/arch/powerpc/platforms/Makefile +++ b/arch/powerpc/platforms/Makefile | |||
| @@ -24,5 +24,4 @@ obj-$(CONFIG_PPC_MAPLE) += maple/ | |||
| 24 | obj-$(CONFIG_PPC_PASEMI) += pasemi/ | 24 | obj-$(CONFIG_PPC_PASEMI) += pasemi/ |
| 25 | obj-$(CONFIG_PPC_CELL) += cell/ | 25 | obj-$(CONFIG_PPC_CELL) += cell/ |
| 26 | obj-$(CONFIG_PPC_PS3) += ps3/ | 26 | obj-$(CONFIG_PPC_PS3) += ps3/ |
| 27 | obj-$(CONFIG_PPC_CELLEB) += celleb/ | ||
| 28 | obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/ | 27 | obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/ |
diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig index 2f169991896d..3959fcfe731c 100644 --- a/arch/powerpc/platforms/cell/Kconfig +++ b/arch/powerpc/platforms/cell/Kconfig | |||
| @@ -25,6 +25,19 @@ config PPC_IBM_CELL_BLADE | |||
| 25 | select PPC_UDBG_16550 | 25 | select PPC_UDBG_16550 |
| 26 | select UDBG_RTAS_CONSOLE | 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 | menu "Cell Broadband Engine options" | 41 | menu "Cell Broadband Engine options" |
| 29 | depends on PPC_CELL | 42 | depends on PPC_CELL |
| 30 | 43 | ||
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile index c89964c6fb1f..c2a7e4e5ddf9 100644 --- a/arch/powerpc/platforms/cell/Makefile +++ b/arch/powerpc/platforms/cell/Makefile | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | obj-$(CONFIG_PPC_CELL_NATIVE) += interrupt.o iommu.o setup.o \ | 1 | obj-$(CONFIG_PPC_CELL_NATIVE) += interrupt.o iommu.o setup.o \ |
| 2 | cbe_regs.o spider-pic.o \ | 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 | obj-$(CONFIG_CBE_RAS) += ras.o | 5 | obj-$(CONFIG_CBE_RAS) += ras.o |
| 5 | 6 | ||
| 6 | obj-$(CONFIG_CBE_THERM) += cbe_thermal.o | 7 | obj-$(CONFIG_CBE_THERM) += cbe_thermal.o |
| @@ -26,3 +27,20 @@ obj-$(CONFIG_SPU_BASE) += spu_callbacks.o spu_base.o \ | |||
| 26 | spufs/ | 27 | spufs/ |
| 27 | 28 | ||
| 28 | obj-$(CONFIG_PCI_MSI) += axon_msi.o | 29 | obj-$(CONFIG_PCI_MSI) += axon_msi.o |
| 30 | |||
| 31 | |||
| 32 | # celleb stuff | ||
| 33 | ifeq ($(CONFIG_PPC_CELLEB),y) | ||
| 34 | obj-y += celleb_setup.o \ | ||
| 35 | celleb_pci.o celleb_scc_epci.o \ | ||
| 36 | celleb_scc_pciex.o \ | ||
| 37 | celleb_scc_uhc.o \ | ||
| 38 | io-workarounds.o spider-pci.o \ | ||
| 39 | beat.o beat_htab.o beat_hvCall.o \ | ||
| 40 | beat_interrupt.o beat_iommu.o | ||
| 41 | |||
| 42 | obj-$(CONFIG_SMP) += beat_smp.o | ||
| 43 | obj-$(CONFIG_PPC_UDBG_BEAT) += beat_udbg.o | ||
| 44 | obj-$(CONFIG_SERIAL_TXX9) += celleb_scc_sio.o | ||
| 45 | obj-$(CONFIG_SPU_BASE) += beat_spu_priv1.o | ||
| 46 | endif | ||
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c index d95e71dee91f..c39f5c225f2e 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c | |||
| @@ -123,7 +123,7 @@ static struct axon_msic *find_msi_translator(struct pci_dev *dev) | |||
| 123 | return NULL; | 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 | ph = of_get_property(dn, "msi-translator", NULL); | 127 | ph = of_get_property(dn, "msi-translator", NULL); |
| 128 | if (ph) | 128 | if (ph) |
| 129 | break; | 129 | break; |
| @@ -169,7 +169,7 @@ static int axon_msi_check_device(struct pci_dev *dev, int nvec, int type) | |||
| 169 | 169 | ||
| 170 | static int setup_msi_msg_address(struct pci_dev *dev, struct msi_msg *msg) | 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 | struct msi_desc *entry; | 173 | struct msi_desc *entry; |
| 174 | int len; | 174 | int len; |
| 175 | const u32 *prop; | 175 | const u32 *prop; |
| @@ -182,7 +182,7 @@ static int setup_msi_msg_address(struct pci_dev *dev, struct msi_msg *msg) | |||
| 182 | 182 | ||
| 183 | entry = list_first_entry(&dev->msi_list, struct msi_desc, list); | 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 | if (entry->msi_attrib.is_64) { | 186 | if (entry->msi_attrib.is_64) { |
| 187 | prop = of_get_property(dn, "msi-address-64", &len); | 187 | prop = of_get_property(dn, "msi-address-64", &len); |
| 188 | if (prop) | 188 | if (prop) |
diff --git a/arch/powerpc/platforms/celleb/beat.c b/arch/powerpc/platforms/cell/beat.c index b64b171f245b..48c690ea65da 100644 --- a/arch/powerpc/platforms/celleb/beat.c +++ b/arch/powerpc/platforms/cell/beat.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | 33 | ||
| 34 | #include "beat_wrapper.h" | 34 | #include "beat_wrapper.h" |
| 35 | #include "beat.h" | 35 | #include "beat.h" |
| 36 | #include "interrupt.h" | 36 | #include "beat_interrupt.h" |
| 37 | 37 | ||
| 38 | static int beat_pm_poweroff_flag; | 38 | static int beat_pm_poweroff_flag; |
| 39 | 39 | ||
diff --git a/arch/powerpc/platforms/celleb/beat.h b/arch/powerpc/platforms/cell/beat.h index 32c8efcedc80..32c8efcedc80 100644 --- a/arch/powerpc/platforms/celleb/beat.h +++ b/arch/powerpc/platforms/cell/beat.h | |||
diff --git a/arch/powerpc/platforms/celleb/htab.c b/arch/powerpc/platforms/cell/beat_htab.c index 81467ff055c8..81467ff055c8 100644 --- a/arch/powerpc/platforms/celleb/htab.c +++ b/arch/powerpc/platforms/cell/beat_htab.c | |||
diff --git a/arch/powerpc/platforms/celleb/hvCall.S b/arch/powerpc/platforms/cell/beat_hvCall.S index 74c817448948..74c817448948 100644 --- a/arch/powerpc/platforms/celleb/hvCall.S +++ b/arch/powerpc/platforms/cell/beat_hvCall.S | |||
diff --git a/arch/powerpc/platforms/celleb/interrupt.c b/arch/powerpc/platforms/cell/beat_interrupt.c index 69562a867876..192a93509372 100644 --- a/arch/powerpc/platforms/celleb/interrupt.c +++ b/arch/powerpc/platforms/cell/beat_interrupt.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | #include <asm/machdep.h> | 27 | #include <asm/machdep.h> |
| 28 | 28 | ||
| 29 | #include "interrupt.h" | 29 | #include "beat_interrupt.h" |
| 30 | #include "beat_wrapper.h" | 30 | #include "beat_wrapper.h" |
| 31 | 31 | ||
| 32 | #define MAX_IRQS NR_IRQS | 32 | #define MAX_IRQS NR_IRQS |
diff --git a/arch/powerpc/platforms/celleb/interrupt.h b/arch/powerpc/platforms/cell/beat_interrupt.h index b470fd0051f1..b470fd0051f1 100644 --- a/arch/powerpc/platforms/celleb/interrupt.h +++ b/arch/powerpc/platforms/cell/beat_interrupt.h | |||
diff --git a/arch/powerpc/platforms/celleb/iommu.c b/arch/powerpc/platforms/cell/beat_iommu.c index 93b0efddd658..93b0efddd658 100644 --- a/arch/powerpc/platforms/celleb/iommu.c +++ b/arch/powerpc/platforms/cell/beat_iommu.c | |||
diff --git a/arch/powerpc/platforms/celleb/smp.c b/arch/powerpc/platforms/cell/beat_smp.c index a7631250aeb4..26efc204c47f 100644 --- a/arch/powerpc/platforms/celleb/smp.c +++ b/arch/powerpc/platforms/cell/beat_smp.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <asm/machdep.h> | 37 | #include <asm/machdep.h> |
| 38 | #include <asm/udbg.h> | 38 | #include <asm/udbg.h> |
| 39 | 39 | ||
| 40 | #include "interrupt.h" | 40 | #include "beat_interrupt.h" |
| 41 | 41 | ||
| 42 | #ifdef DEBUG | 42 | #ifdef DEBUG |
| 43 | #define DBG(fmt...) udbg_printf(fmt) | 43 | #define DBG(fmt...) udbg_printf(fmt) |
diff --git a/arch/powerpc/platforms/celleb/spu_priv1.c b/arch/powerpc/platforms/cell/beat_spu_priv1.c index bcc17f7fe8ad..bcc17f7fe8ad 100644 --- a/arch/powerpc/platforms/celleb/spu_priv1.c +++ b/arch/powerpc/platforms/cell/beat_spu_priv1.c | |||
diff --git a/arch/powerpc/platforms/celleb/beat_syscall.h b/arch/powerpc/platforms/cell/beat_syscall.h index 8580dc7e1798..8580dc7e1798 100644 --- a/arch/powerpc/platforms/celleb/beat_syscall.h +++ b/arch/powerpc/platforms/cell/beat_syscall.h | |||
diff --git a/arch/powerpc/platforms/celleb/udbg_beat.c b/arch/powerpc/platforms/cell/beat_udbg.c index 6b418f6b6175..6b418f6b6175 100644 --- a/arch/powerpc/platforms/celleb/udbg_beat.c +++ b/arch/powerpc/platforms/cell/beat_udbg.c | |||
diff --git a/arch/powerpc/platforms/celleb/beat_wrapper.h b/arch/powerpc/platforms/cell/beat_wrapper.h index b47dfda48d06..b47dfda48d06 100644 --- a/arch/powerpc/platforms/celleb/beat_wrapper.h +++ b/arch/powerpc/platforms/cell/beat_wrapper.h | |||
diff --git a/arch/powerpc/platforms/celleb/pci.c b/arch/powerpc/platforms/cell/celleb_pci.c index 51b390d34e4d..f39a3b2a1667 100644 --- a/arch/powerpc/platforms/celleb/pci.c +++ b/arch/powerpc/platforms/cell/celleb_pci.c | |||
| @@ -37,12 +37,11 @@ | |||
| 37 | #include <asm/io.h> | 37 | #include <asm/io.h> |
| 38 | #include <asm/irq.h> | 38 | #include <asm/irq.h> |
| 39 | #include <asm/prom.h> | 39 | #include <asm/prom.h> |
| 40 | #include <asm/machdep.h> | ||
| 41 | #include <asm/pci-bridge.h> | 40 | #include <asm/pci-bridge.h> |
| 42 | #include <asm/ppc-pci.h> | 41 | #include <asm/ppc-pci.h> |
| 43 | 42 | ||
| 44 | #include "pci.h" | 43 | #include "io-workarounds.h" |
| 45 | #include "interrupt.h" | 44 | #include "celleb_pci.h" |
| 46 | 45 | ||
| 47 | #define MAX_PCI_DEVICES 32 | 46 | #define MAX_PCI_DEVICES 32 |
| 48 | #define MAX_PCI_FUNCTIONS 8 | 47 | #define MAX_PCI_FUNCTIONS 8 |
| @@ -190,7 +189,7 @@ static int celleb_fake_pci_read_config(struct pci_bus *bus, | |||
| 190 | 189 | ||
| 191 | 190 | ||
| 192 | static int celleb_fake_pci_write_config(struct pci_bus *bus, | 191 | static int celleb_fake_pci_write_config(struct pci_bus *bus, |
| 193 | unsigned int devfn, int where, int size, u32 val) | 192 | unsigned int devfn, int where, int size, u32 val) |
| 194 | { | 193 | { |
| 195 | char *config; | 194 | char *config; |
| 196 | struct device_node *node; | 195 | struct device_node *node; |
| @@ -457,33 +456,42 @@ static int __init celleb_setup_fake_pci(struct device_node *dev, | |||
| 457 | return 0; | 456 | return 0; |
| 458 | } | 457 | } |
| 459 | 458 | ||
| 460 | void __init fake_pci_workaround_init(struct pci_controller *phb) | 459 | static struct celleb_phb_spec celleb_fake_pci_spec __initdata = { |
| 461 | { | 460 | .setup = celleb_setup_fake_pci, |
| 462 | /** | 461 | }; |
| 463 | * We will add fake pci bus to scc_pci_bus for the purpose to improve | ||
| 464 | * I/O Macro performance. But device-tree and device drivers | ||
| 465 | * are not ready to use address with a token. | ||
| 466 | */ | ||
| 467 | |||
| 468 | /* celleb_pci_add_one(phb, NULL); */ | ||
| 469 | } | ||
| 470 | 462 | ||
| 471 | static struct of_device_id celleb_phb_match[] __initdata = { | 463 | static struct of_device_id celleb_phb_match[] __initdata = { |
| 472 | { | 464 | { |
| 473 | .name = "pci-pseudo", | 465 | .name = "pci-pseudo", |
| 474 | .data = celleb_setup_fake_pci, | 466 | .data = &celleb_fake_pci_spec, |
| 475 | }, { | 467 | }, { |
| 476 | .name = "epci", | 468 | .name = "epci", |
| 477 | .data = celleb_setup_epci, | 469 | .data = &celleb_epci_spec, |
| 470 | }, { | ||
| 471 | .name = "pcie", | ||
| 472 | .data = &celleb_pciex_spec, | ||
| 478 | }, { | 473 | }, { |
| 479 | }, | 474 | }, |
| 480 | }; | 475 | }; |
| 481 | 476 | ||
| 477 | static int __init celleb_io_workaround_init(struct pci_controller *phb, | ||
| 478 | struct celleb_phb_spec *phb_spec) | ||
| 479 | { | ||
| 480 | if (phb_spec->ops) { | ||
| 481 | iowa_register_bus(phb, phb_spec->ops, phb_spec->iowa_init, | ||
| 482 | phb_spec->iowa_data); | ||
| 483 | io_workaround_init(); | ||
| 484 | } | ||
| 485 | |||
| 486 | return 0; | ||
| 487 | } | ||
| 488 | |||
| 482 | int __init celleb_setup_phb(struct pci_controller *phb) | 489 | int __init celleb_setup_phb(struct pci_controller *phb) |
| 483 | { | 490 | { |
| 484 | struct device_node *dev = phb->dn; | 491 | struct device_node *dev = phb->dn; |
| 485 | const struct of_device_id *match; | 492 | const struct of_device_id *match; |
| 486 | int (*setup_func)(struct device_node *, struct pci_controller *); | 493 | struct celleb_phb_spec *phb_spec; |
| 494 | int rc; | ||
| 487 | 495 | ||
| 488 | match = of_match_node(celleb_phb_match, dev); | 496 | match = of_match_node(celleb_phb_match, dev); |
| 489 | if (!match) | 497 | if (!match) |
| @@ -492,8 +500,12 @@ int __init celleb_setup_phb(struct pci_controller *phb) | |||
| 492 | phb_set_bus_ranges(dev, phb); | 500 | phb_set_bus_ranges(dev, phb); |
| 493 | phb->buid = 1; | 501 | phb->buid = 1; |
| 494 | 502 | ||
| 495 | setup_func = match->data; | 503 | phb_spec = match->data; |
| 496 | return (*setup_func)(dev, phb); | 504 | rc = (*phb_spec->setup)(dev, phb); |
| 505 | if (rc) | ||
| 506 | return 1; | ||
| 507 | |||
| 508 | return celleb_io_workaround_init(phb, phb_spec); | ||
| 497 | } | 509 | } |
| 498 | 510 | ||
| 499 | int celleb_pci_probe_mode(struct pci_bus *bus) | 511 | int celleb_pci_probe_mode(struct pci_bus *bus) |
diff --git a/arch/powerpc/platforms/celleb/pci.h b/arch/powerpc/platforms/cell/celleb_pci.h index 5d5544ffeddb..4cba1523ec50 100644 --- a/arch/powerpc/platforms/celleb/pci.h +++ b/arch/powerpc/platforms/cell/celleb_pci.h | |||
| @@ -27,16 +27,19 @@ | |||
| 27 | #include <asm/prom.h> | 27 | #include <asm/prom.h> |
| 28 | #include <asm/ppc-pci.h> | 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 | extern int celleb_setup_phb(struct pci_controller *); | 39 | extern int celleb_setup_phb(struct pci_controller *); |
| 31 | extern int celleb_pci_probe_mode(struct pci_bus *); | 40 | extern int celleb_pci_probe_mode(struct pci_bus *); |
| 32 | 41 | ||
| 33 | extern int celleb_setup_epci(struct device_node *, struct pci_controller *); | 42 | extern struct celleb_phb_spec celleb_epci_spec; |
| 34 | 43 | extern struct celleb_phb_spec celleb_pciex_spec; | |
| 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 *); | ||
| 41 | 44 | ||
| 42 | #endif /* _CELLEB_PCI_H */ | 45 | #endif /* _CELLEB_PCI_H */ |
diff --git a/arch/powerpc/platforms/celleb/scc.h b/arch/powerpc/platforms/cell/celleb_scc.h index 6be1542a6e66..b596a711c348 100644 --- a/arch/powerpc/platforms/celleb/scc.h +++ b/arch/powerpc/platforms/cell/celleb_scc.h | |||
| @@ -125,6 +125,93 @@ | |||
| 125 | /* bits for SCC_EPCI_CNTOPT */ | 125 | /* bits for SCC_EPCI_CNTOPT */ |
| 126 | #define SCC_EPCI_CNTOPT_O2PMB 0x00000002 | 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 | /* UHC registers */ | 215 | /* UHC registers */ |
| 129 | #define SCC_UHC_CKRCTRL 0xff0 | 216 | #define SCC_UHC_CKRCTRL 0xff0 |
| 130 | #define SCC_UHC_ECMODE 0xf00 | 217 | #define SCC_UHC_ECMODE 0xf00 |
diff --git a/arch/powerpc/platforms/celleb/scc_epci.c b/arch/powerpc/platforms/cell/celleb_scc_epci.c index a999b393f6f6..08c285b10e30 100644 --- a/arch/powerpc/platforms/celleb/scc_epci.c +++ b/arch/powerpc/platforms/cell/celleb_scc_epci.c | |||
| @@ -30,23 +30,17 @@ | |||
| 30 | #include <asm/io.h> | 30 | #include <asm/io.h> |
| 31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
| 32 | #include <asm/prom.h> | 32 | #include <asm/prom.h> |
| 33 | #include <asm/machdep.h> | ||
| 34 | #include <asm/pci-bridge.h> | 33 | #include <asm/pci-bridge.h> |
| 35 | #include <asm/ppc-pci.h> | 34 | #include <asm/ppc-pci.h> |
| 36 | 35 | ||
| 37 | #include "scc.h" | 36 | #include "celleb_scc.h" |
| 38 | #include "pci.h" | 37 | #include "celleb_pci.h" |
| 39 | #include "interrupt.h" | ||
| 40 | 38 | ||
| 41 | #define MAX_PCI_DEVICES 32 | 39 | #define MAX_PCI_DEVICES 32 |
| 42 | #define MAX_PCI_FUNCTIONS 8 | 40 | #define MAX_PCI_FUNCTIONS 8 |
| 43 | 41 | ||
| 44 | #define iob() __asm__ __volatile__("eieio; sync":::"memory") | 42 | #define iob() __asm__ __volatile__("eieio; sync":::"memory") |
| 45 | 43 | ||
| 46 | struct epci_private { | ||
| 47 | dma_addr_t dummy_page_da; | ||
| 48 | }; | ||
| 49 | |||
| 50 | static inline PCI_IO_ADDR celleb_epci_get_epci_base( | 44 | static inline PCI_IO_ADDR celleb_epci_get_epci_base( |
| 51 | struct pci_controller *hose) | 45 | struct pci_controller *hose) |
| 52 | { | 46 | { |
| @@ -71,42 +65,6 @@ static inline PCI_IO_ADDR celleb_epci_get_epci_cfg( | |||
| 71 | return hose->cfg_data; | 65 | return hose->cfg_data; |
| 72 | } | 66 | } |
| 73 | 67 | ||
| 74 | static void scc_epci_dummy_read(struct pci_controller *hose) | ||
| 75 | { | ||
| 76 | PCI_IO_ADDR epci_base; | ||
| 77 | u32 val; | ||
| 78 | |||
| 79 | epci_base = celleb_epci_get_epci_base(hose); | ||
| 80 | |||
| 81 | val = in_be32(epci_base + SCC_EPCI_WATRP); | ||
| 82 | iosync(); | ||
| 83 | |||
| 84 | return; | ||
| 85 | } | ||
| 86 | |||
| 87 | void __init epci_workaround_init(struct pci_controller *hose) | ||
| 88 | { | ||
| 89 | PCI_IO_ADDR epci_base; | ||
| 90 | PCI_IO_ADDR reg; | ||
| 91 | struct epci_private *private = hose->private_data; | ||
| 92 | |||
| 93 | BUG_ON(!private); | ||
| 94 | |||
| 95 | private->dummy_page_da = dma_map_single(hose->parent, | ||
| 96 | celleb_dummy_page_va, PAGE_SIZE, DMA_FROM_DEVICE); | ||
| 97 | if (private->dummy_page_da == DMA_ERROR_CODE) { | ||
| 98 | printk(KERN_ERR "EPCI: dummy read disabled. " | ||
| 99 | "Map dummy page failed.\n"); | ||
| 100 | return; | ||
| 101 | } | ||
| 102 | |||
| 103 | celleb_pci_add_one(hose, scc_epci_dummy_read); | ||
| 104 | epci_base = celleb_epci_get_epci_base(hose); | ||
| 105 | |||
| 106 | reg = epci_base + SCC_EPCI_DUMYRADR; | ||
| 107 | out_be32(reg, private->dummy_page_da); | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void clear_and_disable_master_abort_interrupt( | 68 | static inline void clear_and_disable_master_abort_interrupt( |
| 111 | struct pci_controller *hose) | 69 | struct pci_controller *hose) |
| 112 | { | 70 | { |
| @@ -151,10 +109,8 @@ static int celleb_epci_check_abort(struct pci_controller *hose, | |||
| 151 | return PCIBIOS_SUCCESSFUL; | 109 | return PCIBIOS_SUCCESSFUL; |
| 152 | } | 110 | } |
| 153 | 111 | ||
| 154 | static PCI_IO_ADDR celleb_epci_make_config_addr( | 112 | static PCI_IO_ADDR celleb_epci_make_config_addr(struct pci_bus *bus, |
| 155 | struct pci_bus *bus, | 113 | struct pci_controller *hose, unsigned int devfn, int where) |
| 156 | struct pci_controller *hose, | ||
| 157 | unsigned int devfn, int where) | ||
| 158 | { | 114 | { |
| 159 | PCI_IO_ADDR addr; | 115 | PCI_IO_ADDR addr; |
| 160 | 116 | ||
| @@ -425,8 +381,8 @@ static int __init celleb_epci_init(struct pci_controller *hose) | |||
| 425 | return 0; | 381 | return 0; |
| 426 | } | 382 | } |
| 427 | 383 | ||
| 428 | int __init celleb_setup_epci(struct device_node *node, | 384 | static int __init celleb_setup_epci(struct device_node *node, |
| 429 | struct pci_controller *hose) | 385 | struct pci_controller *hose) |
| 430 | { | 386 | { |
| 431 | struct resource r; | 387 | struct resource r; |
| 432 | 388 | ||
| @@ -450,8 +406,7 @@ int __init celleb_setup_epci(struct device_node *node, | |||
| 450 | if (!hose->cfg_addr) | 406 | if (!hose->cfg_addr) |
| 451 | goto error; | 407 | goto error; |
| 452 | pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n", | 408 | pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n", |
| 453 | r.start, (unsigned long)hose->cfg_addr, | 409 | r.start, (unsigned long)hose->cfg_addr, (r.end - r.start + 1)); |
| 454 | (r.end - r.start + 1)); | ||
| 455 | 410 | ||
| 456 | if (of_address_to_resource(node, 2, &r)) | 411 | if (of_address_to_resource(node, 2, &r)) |
| 457 | goto error; | 412 | goto error; |
| @@ -459,14 +414,7 @@ int __init celleb_setup_epci(struct device_node *node, | |||
| 459 | if (!hose->cfg_data) | 414 | if (!hose->cfg_data) |
| 460 | goto error; | 415 | goto error; |
| 461 | pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n", | 416 | pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n", |
| 462 | r.start, (unsigned long)hose->cfg_data, | 417 | r.start, (unsigned long)hose->cfg_data, (r.end - r.start + 1)); |
| 463 | (r.end - r.start + 1)); | ||
| 464 | |||
| 465 | hose->private_data = kzalloc(sizeof(struct epci_private), GFP_KERNEL); | ||
| 466 | if (hose->private_data == NULL) { | ||
| 467 | printk(KERN_ERR "EPCI: no memory for private data.\n"); | ||
| 468 | goto error; | ||
| 469 | } | ||
| 470 | 418 | ||
| 471 | hose->ops = &celleb_epci_ops; | 419 | hose->ops = &celleb_epci_ops; |
| 472 | celleb_epci_init(hose); | 420 | celleb_epci_init(hose); |
| @@ -474,8 +422,6 @@ int __init celleb_setup_epci(struct device_node *node, | |||
| 474 | return 0; | 422 | return 0; |
| 475 | 423 | ||
| 476 | error: | 424 | error: |
| 477 | kfree(hose->private_data); | ||
| 478 | |||
| 479 | if (hose->cfg_addr) | 425 | if (hose->cfg_addr) |
| 480 | iounmap(hose->cfg_addr); | 426 | iounmap(hose->cfg_addr); |
| 481 | 427 | ||
| @@ -483,3 +429,10 @@ error: | |||
| 483 | iounmap(hose->cfg_data); | 429 | iounmap(hose->cfg_data); |
| 484 | return 1; | 430 | return 1; |
| 485 | } | 431 | } |
| 432 | |||
| 433 | struct celleb_phb_spec celleb_epci_spec __initdata = { | ||
| 434 | .setup = celleb_setup_epci, | ||
| 435 | .ops = &spiderpci_ops, | ||
| 436 | .iowa_init = &spiderpci_iowa_init, | ||
| 437 | .iowa_data = (void *)0, | ||
| 438 | }; | ||
diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c new file mode 100644 index 000000000000..ab24d94baab6 --- /dev/null +++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c | |||
| @@ -0,0 +1,547 @@ | |||
| 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 | }; | ||
diff --git a/arch/powerpc/platforms/celleb/scc_sio.c b/arch/powerpc/platforms/cell/celleb_scc_sio.c index 3a16c5b3c464..3a16c5b3c464 100644 --- a/arch/powerpc/platforms/celleb/scc_sio.c +++ b/arch/powerpc/platforms/cell/celleb_scc_sio.c | |||
diff --git a/arch/powerpc/platforms/celleb/scc_uhc.c b/arch/powerpc/platforms/cell/celleb_scc_uhc.c index cb4307994087..d63b720bfe3a 100644 --- a/arch/powerpc/platforms/celleb/scc_uhc.c +++ b/arch/powerpc/platforms/cell/celleb_scc_uhc.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
| 26 | #include <asm/machdep.h> | 26 | #include <asm/machdep.h> |
| 27 | 27 | ||
| 28 | #include "scc.h" | 28 | #include "celleb_scc.h" |
| 29 | 29 | ||
| 30 | #define UHC_RESET_WAIT_MAX 10000 | 30 | #define UHC_RESET_WAIT_MAX 10000 |
| 31 | 31 | ||
diff --git a/arch/powerpc/platforms/celleb/setup.c b/arch/powerpc/platforms/cell/celleb_setup.c index f27ae1e3fb58..b11cb30decb2 100644 --- a/arch/powerpc/platforms/celleb/setup.c +++ b/arch/powerpc/platforms/cell/celleb_setup.c | |||
| @@ -56,13 +56,13 @@ | |||
| 56 | #include <asm/rtas.h> | 56 | #include <asm/rtas.h> |
| 57 | #include <asm/cell-regs.h> | 57 | #include <asm/cell-regs.h> |
| 58 | 58 | ||
| 59 | #include "interrupt.h" | 59 | #include "beat_interrupt.h" |
| 60 | #include "beat_wrapper.h" | 60 | #include "beat_wrapper.h" |
| 61 | #include "beat.h" | 61 | #include "beat.h" |
| 62 | #include "pci.h" | 62 | #include "celleb_pci.h" |
| 63 | #include "../cell/interrupt.h" | 63 | #include "interrupt.h" |
| 64 | #include "../cell/pervasive.h" | 64 | #include "pervasive.h" |
| 65 | #include "../cell/ras.h" | 65 | #include "ras.h" |
| 66 | 66 | ||
| 67 | static char celleb_machine_type[128] = "Celleb"; | 67 | static char celleb_machine_type[128] = "Celleb"; |
| 68 | 68 | ||
| @@ -114,8 +114,6 @@ static int __init celleb_publish_devices(void) | |||
| 114 | /* Publish OF platform devices for southbridge IOs */ | 114 | /* Publish OF platform devices for southbridge IOs */ |
| 115 | of_platform_bus_probe(NULL, celleb_bus_ids, NULL); | 115 | of_platform_bus_probe(NULL, celleb_bus_ids, NULL); |
| 116 | 116 | ||
| 117 | celleb_pci_workaround_init(); | ||
| 118 | |||
| 119 | return 0; | 117 | return 0; |
| 120 | } | 118 | } |
| 121 | machine_device_initcall(celleb_beat, celleb_publish_devices); | 119 | machine_device_initcall(celleb_beat, celleb_publish_devices); |
diff --git a/arch/powerpc/platforms/cell/io-workarounds.c b/arch/powerpc/platforms/cell/io-workarounds.c index 979d4b67efb4..3b84e8be314c 100644 --- a/arch/powerpc/platforms/cell/io-workarounds.c +++ b/arch/powerpc/platforms/cell/io-workarounds.c | |||
| @@ -1,6 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Support PCI IO workaround | ||
| 3 | * | ||
| 2 | * Copyright (C) 2006 Benjamin Herrenschmidt <benh@kernel.crashing.org> | 4 | * Copyright (C) 2006 Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| 3 | * IBM, Corp. | 5 | * IBM, Corp. |
| 6 | * (C) Copyright 2007-2008 TOSHIBA CORPORATION | ||
| 4 | * | 7 | * |
| 5 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 6 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
| @@ -9,335 +12,174 @@ | |||
| 9 | #undef DEBUG | 12 | #undef DEBUG |
| 10 | 13 | ||
| 11 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 12 | #include <linux/mm.h> | 15 | |
| 13 | #include <linux/pci.h> | ||
| 14 | #include <asm/io.h> | 16 | #include <asm/io.h> |
| 15 | #include <asm/machdep.h> | 17 | #include <asm/machdep.h> |
| 16 | #include <asm/pci-bridge.h> | 18 | #include <asm/pgtable.h> |
| 17 | #include <asm/ppc-pci.h> | 19 | #include <asm/ppc-pci.h> |
| 18 | 20 | ||
| 21 | #include "io-workarounds.h" | ||
| 19 | 22 | ||
| 20 | #define SPIDER_PCI_REG_BASE 0xd000 | 23 | #define IOWA_MAX_BUS 8 |
| 21 | #define SPIDER_PCI_VCI_CNTL_STAT 0x0110 | ||
| 22 | #define SPIDER_PCI_DUMMY_READ 0x0810 | ||
| 23 | #define SPIDER_PCI_DUMMY_READ_BASE 0x0814 | ||
| 24 | 24 | ||
| 25 | /* Undefine that to re-enable bogus prefetch | 25 | static struct iowa_bus iowa_busses[IOWA_MAX_BUS]; |
| 26 | * | 26 | static unsigned int iowa_bus_count; |
| 27 | * Without that workaround, the chip will do bogus prefetch past | ||
| 28 | * page boundary from system memory. This setting will disable that, | ||
| 29 | * though the documentation is unclear as to the consequences of doing | ||
| 30 | * so, either purely performances, or possible misbehaviour... It's not | ||
| 31 | * clear wether the chip can handle unaligned accesses at all without | ||
| 32 | * prefetching enabled. | ||
| 33 | * | ||
| 34 | * For now, things appear to be behaving properly with that prefetching | ||
| 35 | * disabled and IDE, possibly because IDE isn't doing any unaligned | ||
| 36 | * access. | ||
| 37 | */ | ||
| 38 | #define SPIDER_DISABLE_PREFETCH | ||
| 39 | 27 | ||
| 40 | #define MAX_SPIDERS 3 | 28 | static struct iowa_bus *iowa_pci_find(unsigned long vaddr, unsigned long paddr) |
| 29 | { | ||
| 30 | int i, j; | ||
| 31 | struct resource *res; | ||
| 32 | unsigned long vstart, vend; | ||
| 41 | 33 | ||
| 42 | static struct spider_pci_bus { | 34 | for (i = 0; i < iowa_bus_count; i++) { |
| 43 | void __iomem *regs; | 35 | struct iowa_bus *bus = &iowa_busses[i]; |
| 44 | unsigned long mmio_start; | 36 | struct pci_controller *phb = bus->phb; |
| 45 | unsigned long mmio_end; | ||
| 46 | unsigned long pio_vstart; | ||
| 47 | unsigned long pio_vend; | ||
| 48 | } spider_pci_busses[MAX_SPIDERS]; | ||
| 49 | static int spider_pci_count; | ||
| 50 | 37 | ||
| 51 | static struct spider_pci_bus *spider_pci_find(unsigned long vaddr, | 38 | if (vaddr) { |
| 52 | unsigned long paddr) | 39 | vstart = (unsigned long)phb->io_base_virt; |
| 53 | { | 40 | vend = vstart + phb->pci_io_size - 1; |
| 54 | int i; | 41 | if ((vaddr >= vstart) && (vaddr <= vend)) |
| 55 | 42 | return bus; | |
| 56 | for (i = 0; i < spider_pci_count; i++) { | 43 | } |
| 57 | struct spider_pci_bus *bus = &spider_pci_busses[i]; | 44 | |
| 58 | if (paddr && paddr >= bus->mmio_start && paddr < bus->mmio_end) | 45 | if (paddr) |
| 59 | return bus; | 46 | for (j = 0; j < 3; j++) { |
| 60 | if (vaddr && vaddr >= bus->pio_vstart && vaddr < bus->pio_vend) | 47 | res = &phb->mem_resources[j]; |
| 61 | return bus; | 48 | if (paddr >= res->start && paddr <= res->end) |
| 49 | return bus; | ||
| 50 | } | ||
| 62 | } | 51 | } |
| 52 | |||
| 63 | return NULL; | 53 | return NULL; |
| 64 | } | 54 | } |
| 65 | 55 | ||
| 66 | static void spider_io_flush(const volatile void __iomem *addr) | 56 | struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR addr) |
| 67 | { | 57 | { |
| 68 | struct spider_pci_bus *bus; | 58 | struct iowa_bus *bus; |
| 69 | int token; | 59 | int token; |
| 70 | 60 | ||
| 71 | /* Get platform token (set by ioremap) from address */ | ||
| 72 | token = PCI_GET_ADDR_TOKEN(addr); | 61 | token = PCI_GET_ADDR_TOKEN(addr); |
| 73 | 62 | ||
| 74 | /* Fast path if we have a non-0 token, it indicates which bus we | 63 | if (token && token <= iowa_bus_count) |
| 75 | * are on. | 64 | bus = &iowa_busses[token - 1]; |
| 76 | * | ||
| 77 | * If the token is 0, that means either that the ioremap was done | ||
| 78 | * before we initialized this layer, or it's a PIO operation. We | ||
| 79 | * fallback to a low path in this case. Hopefully, internal devices | ||
| 80 | * which are ioremap'ed early should use in_XX/out_XX functions | ||
| 81 | * instead of the PCI ones and thus not suffer from the slowdown. | ||
| 82 | * | ||
| 83 | * Also note that currently, the workaround will not work for areas | ||
| 84 | * that are not mapped with PTEs (bolted in the hash table). This | ||
| 85 | * is the case for ioremaps done very early at boot (before | ||
| 86 | * mem_init_done) and includes the mapping of the ISA IO space. | ||
| 87 | * | ||
| 88 | * Fortunately, none of the affected devices is expected to do DMA | ||
| 89 | * and thus there should be no problem in practice. | ||
| 90 | * | ||
| 91 | * In order to improve performances, we only do the PTE search for | ||
| 92 | * addresses falling in the PHB IO space area. That means it will | ||
| 93 | * not work for hotplug'ed PHBs but those don't exist with Spider. | ||
| 94 | */ | ||
| 95 | if (token && token <= spider_pci_count) | ||
| 96 | bus = &spider_pci_busses[token - 1]; | ||
| 97 | else { | 65 | else { |
| 98 | unsigned long vaddr, paddr; | 66 | unsigned long vaddr, paddr; |
| 99 | pte_t *ptep; | 67 | pte_t *ptep; |
| 100 | 68 | ||
| 101 | /* Fixup physical address */ | ||
| 102 | vaddr = (unsigned long)PCI_FIX_ADDR(addr); | 69 | vaddr = (unsigned long)PCI_FIX_ADDR(addr); |
| 70 | if (vaddr < PHB_IO_BASE || vaddr >= PHB_IO_END) | ||
| 71 | return NULL; | ||
| 103 | 72 | ||
| 104 | /* Check if it's in allowed range for PIO */ | ||
| 105 | if (vaddr < PHB_IO_BASE || vaddr > PHB_IO_END) | ||
| 106 | return; | ||
| 107 | |||
| 108 | /* Try to find a PTE. If not, clear the paddr, we'll do | ||
| 109 | * a vaddr only lookup (PIO only) | ||
| 110 | */ | ||
| 111 | ptep = find_linux_pte(init_mm.pgd, vaddr); | 73 | ptep = find_linux_pte(init_mm.pgd, vaddr); |
| 112 | if (ptep == NULL) | 74 | if (ptep == NULL) |
| 113 | paddr = 0; | 75 | paddr = 0; |
| 114 | else | 76 | else |
| 115 | paddr = pte_pfn(*ptep) << PAGE_SHIFT; | 77 | paddr = pte_pfn(*ptep) << PAGE_SHIFT; |
| 78 | bus = iowa_pci_find(vaddr, paddr); | ||
| 116 | 79 | ||
| 117 | bus = spider_pci_find(vaddr, paddr); | ||
| 118 | if (bus == NULL) | 80 | if (bus == NULL) |
| 119 | return; | 81 | return NULL; |
| 120 | } | 82 | } |
| 121 | 83 | ||
| 122 | /* Now do the workaround | 84 | return bus; |
| 123 | */ | ||
| 124 | (void)in_be32(bus->regs + SPIDER_PCI_DUMMY_READ); | ||
| 125 | } | 85 | } |
| 126 | 86 | ||
| 127 | static u8 spider_readb(const volatile void __iomem *addr) | 87 | struct iowa_bus *iowa_pio_find_bus(unsigned long port) |
| 128 | { | 88 | { |
| 129 | u8 val = __do_readb(addr); | 89 | unsigned long vaddr = (unsigned long)pci_io_base + port; |
| 130 | spider_io_flush(addr); | 90 | return iowa_pci_find(vaddr, 0); |
| 131 | return val; | ||
| 132 | } | 91 | } |
| 133 | 92 | ||
| 134 | static u16 spider_readw(const volatile void __iomem *addr) | ||
| 135 | { | ||
| 136 | u16 val = __do_readw(addr); | ||
| 137 | spider_io_flush(addr); | ||
| 138 | return val; | ||
| 139 | } | ||
| 140 | 93 | ||
| 141 | static u32 spider_readl(const volatile void __iomem *addr) | 94 | #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ |
| 142 | { | 95 | static ret iowa_##name at \ |
| 143 | u32 val = __do_readl(addr); | 96 | { \ |
| 144 | spider_io_flush(addr); | 97 | struct iowa_bus *bus; \ |
| 145 | return val; | 98 | bus = iowa_##space##_find_bus(aa); \ |
| 99 | if (bus && bus->ops && bus->ops->name) \ | ||
| 100 | return bus->ops->name al; \ | ||
| 101 | return __do_##name al; \ | ||
| 146 | } | 102 | } |
| 147 | 103 | ||
| 148 | static u64 spider_readq(const volatile void __iomem *addr) | 104 | #define DEF_PCI_AC_NORET(name, at, al, space, aa) \ |
| 149 | { | 105 | static void iowa_##name at \ |
| 150 | u64 val = __do_readq(addr); | 106 | { \ |
| 151 | spider_io_flush(addr); | 107 | struct iowa_bus *bus; \ |
| 152 | return val; | 108 | bus = iowa_##space##_find_bus(aa); \ |
| 109 | if (bus && bus->ops && bus->ops->name) { \ | ||
| 110 | bus->ops->name al; \ | ||
| 111 | return; \ | ||
| 112 | } \ | ||
| 113 | __do_##name al; \ | ||
| 153 | } | 114 | } |
| 154 | 115 | ||
| 155 | static u16 spider_readw_be(const volatile void __iomem *addr) | 116 | #include <asm/io-defs.h> |
| 156 | { | ||
| 157 | u16 val = __do_readw_be(addr); | ||
| 158 | spider_io_flush(addr); | ||
| 159 | return val; | ||
| 160 | } | ||
| 161 | 117 | ||
| 162 | static u32 spider_readl_be(const volatile void __iomem *addr) | 118 | #undef DEF_PCI_AC_RET |
| 163 | { | 119 | #undef DEF_PCI_AC_NORET |
| 164 | u32 val = __do_readl_be(addr); | ||
| 165 | spider_io_flush(addr); | ||
| 166 | return val; | ||
| 167 | } | ||
| 168 | 120 | ||
| 169 | static u64 spider_readq_be(const volatile void __iomem *addr) | 121 | static struct ppc_pci_io __initdata iowa_pci_io = { |
| 170 | { | ||
| 171 | u64 val = __do_readq_be(addr); | ||
| 172 | spider_io_flush(addr); | ||
| 173 | return val; | ||
| 174 | } | ||
| 175 | 122 | ||
| 176 | static void spider_readsb(const volatile void __iomem *addr, void *buf, | 123 | #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) .name = iowa_##name, |
| 177 | unsigned long count) | 124 | #define DEF_PCI_AC_NORET(name, at, al, space, aa) .name = iowa_##name, |
| 178 | { | ||
| 179 | __do_readsb(addr, buf, count); | ||
| 180 | spider_io_flush(addr); | ||
| 181 | } | ||
| 182 | 125 | ||
| 183 | static void spider_readsw(const volatile void __iomem *addr, void *buf, | 126 | #include <asm/io-defs.h> |
| 184 | unsigned long count) | ||
| 185 | { | ||
| 186 | __do_readsw(addr, buf, count); | ||
| 187 | spider_io_flush(addr); | ||
| 188 | } | ||
| 189 | 127 | ||
| 190 | static void spider_readsl(const volatile void __iomem *addr, void *buf, | 128 | #undef DEF_PCI_AC_RET |
| 191 | unsigned long count) | 129 | #undef DEF_PCI_AC_NORET |
| 192 | { | ||
| 193 | __do_readsl(addr, buf, count); | ||
| 194 | spider_io_flush(addr); | ||
| 195 | } | ||
| 196 | |||
| 197 | static void spider_memcpy_fromio(void *dest, const volatile void __iomem *src, | ||
| 198 | unsigned long n) | ||
| 199 | { | ||
| 200 | __do_memcpy_fromio(dest, src, n); | ||
| 201 | spider_io_flush(src); | ||
| 202 | } | ||
| 203 | 130 | ||
| 131 | }; | ||
| 204 | 132 | ||
| 205 | static void __iomem * spider_ioremap(unsigned long addr, unsigned long size, | 133 | static void __iomem *iowa_ioremap(unsigned long addr, unsigned long size, |
| 206 | unsigned long flags) | 134 | unsigned long flags) |
| 207 | { | 135 | { |
| 208 | struct spider_pci_bus *bus; | 136 | struct iowa_bus *bus; |
| 209 | void __iomem *res = __ioremap(addr, size, flags); | 137 | void __iomem *res = __ioremap(addr, size, flags); |
| 210 | int busno; | 138 | int busno; |
| 211 | 139 | ||
| 212 | pr_debug("spider_ioremap(0x%lx, 0x%lx, 0x%lx) -> 0x%p\n", | 140 | bus = iowa_pci_find(0, addr); |
| 213 | addr, size, flags, res); | ||
| 214 | |||
| 215 | bus = spider_pci_find(0, addr); | ||
| 216 | if (bus != NULL) { | 141 | if (bus != NULL) { |
| 217 | busno = bus - spider_pci_busses; | 142 | busno = bus - iowa_busses; |
| 218 | pr_debug(" found bus %d, setting token\n", busno); | ||
| 219 | PCI_SET_ADDR_TOKEN(res, busno + 1); | 143 | PCI_SET_ADDR_TOKEN(res, busno + 1); |
| 220 | } | 144 | } |
| 221 | pr_debug(" result=0x%p\n", res); | ||
| 222 | |||
| 223 | return res; | 145 | return res; |
| 224 | } | 146 | } |
| 225 | 147 | ||
| 226 | static void __init spider_pci_setup_chip(struct spider_pci_bus *bus) | 148 | /* Regist new bus to support workaround */ |
| 227 | { | 149 | void __init iowa_register_bus(struct pci_controller *phb, |
| 228 | #ifdef SPIDER_DISABLE_PREFETCH | 150 | struct ppc_pci_io *ops, |
| 229 | u32 val = in_be32(bus->regs + SPIDER_PCI_VCI_CNTL_STAT); | 151 | int (*initfunc)(struct iowa_bus *, void *), void *data) |
| 230 | pr_debug(" PVCI_Control_Status was 0x%08x\n", val); | ||
| 231 | out_be32(bus->regs + SPIDER_PCI_VCI_CNTL_STAT, val | 0x8); | ||
| 232 | #endif | ||
| 233 | |||
| 234 | /* Configure the dummy address for the workaround */ | ||
| 235 | out_be32(bus->regs + SPIDER_PCI_DUMMY_READ_BASE, 0x80000000); | ||
| 236 | } | ||
| 237 | |||
| 238 | static void __init spider_pci_add_one(struct pci_controller *phb) | ||
| 239 | { | 152 | { |
| 240 | struct spider_pci_bus *bus = &spider_pci_busses[spider_pci_count]; | 153 | struct iowa_bus *bus; |
| 241 | struct device_node *np = phb->dn; | 154 | struct device_node *np = phb->dn; |
| 242 | struct resource rsrc; | ||
| 243 | void __iomem *regs; | ||
| 244 | 155 | ||
| 245 | if (spider_pci_count >= MAX_SPIDERS) { | 156 | if (iowa_bus_count >= IOWA_MAX_BUS) { |
| 246 | printk(KERN_ERR "Too many spider bridges, workarounds" | 157 | pr_err("IOWA:Too many pci bridges, " |
| 247 | " disabled for %s\n", np->full_name); | 158 | "workarounds disabled for %s\n", np->full_name); |
| 248 | return; | 159 | return; |
| 249 | } | 160 | } |
| 250 | 161 | ||
| 251 | /* Get the registers for the beast */ | 162 | bus = &iowa_busses[iowa_bus_count]; |
| 252 | if (of_address_to_resource(np, 0, &rsrc)) { | 163 | bus->phb = phb; |
| 253 | printk(KERN_ERR "Failed to get registers for spider %s" | 164 | bus->ops = ops; |
| 254 | " workarounds disabled\n", np->full_name); | ||
| 255 | return; | ||
| 256 | } | ||
| 257 | 165 | ||
| 258 | /* Mask out some useless bits in there to get to the base of the | 166 | if (initfunc) |
| 259 | * spider chip | 167 | if ((*initfunc)(bus, data)) |
| 260 | */ | 168 | return; |
| 261 | rsrc.start &= ~0xfffffffful; | ||
| 262 | |||
| 263 | /* Map them */ | ||
| 264 | regs = ioremap(rsrc.start + SPIDER_PCI_REG_BASE, 0x1000); | ||
| 265 | if (regs == NULL) { | ||
| 266 | printk(KERN_ERR "Failed to map registers for spider %s" | ||
| 267 | " workarounds disabled\n", np->full_name); | ||
| 268 | return; | ||
| 269 | } | ||
| 270 | |||
| 271 | spider_pci_count++; | ||
| 272 | |||
| 273 | /* We assume spiders only have one MMIO resource */ | ||
| 274 | bus->mmio_start = phb->mem_resources[0].start; | ||
| 275 | bus->mmio_end = phb->mem_resources[0].end + 1; | ||
| 276 | |||
| 277 | bus->pio_vstart = (unsigned long)phb->io_base_virt; | ||
| 278 | bus->pio_vend = bus->pio_vstart + phb->pci_io_size; | ||
| 279 | |||
| 280 | bus->regs = regs; | ||
| 281 | |||
| 282 | printk(KERN_INFO "PCI: Spider MMIO workaround for %s\n",np->full_name); | ||
| 283 | 169 | ||
| 284 | pr_debug(" mmio (P) = 0x%016lx..0x%016lx\n", | 170 | iowa_bus_count++; |
| 285 | bus->mmio_start, bus->mmio_end); | ||
| 286 | pr_debug(" pio (V) = 0x%016lx..0x%016lx\n", | ||
| 287 | bus->pio_vstart, bus->pio_vend); | ||
| 288 | pr_debug(" regs (P) = 0x%016lx (V) = 0x%p\n", | ||
| 289 | rsrc.start + SPIDER_PCI_REG_BASE, bus->regs); | ||
| 290 | 171 | ||
| 291 | spider_pci_setup_chip(bus); | 172 | pr_debug("IOWA:[%d]Add bus, %s.\n", iowa_bus_count-1, np->full_name); |
| 292 | } | 173 | } |
| 293 | 174 | ||
| 294 | static struct ppc_pci_io __initdata spider_pci_io = { | 175 | /* enable IO workaround */ |
| 295 | .readb = spider_readb, | 176 | void __init io_workaround_init(void) |
| 296 | .readw = spider_readw, | ||
| 297 | .readl = spider_readl, | ||
| 298 | .readq = spider_readq, | ||
| 299 | .readw_be = spider_readw_be, | ||
| 300 | .readl_be = spider_readl_be, | ||
| 301 | .readq_be = spider_readq_be, | ||
| 302 | .readsb = spider_readsb, | ||
| 303 | .readsw = spider_readsw, | ||
| 304 | .readsl = spider_readsl, | ||
| 305 | .memcpy_fromio = spider_memcpy_fromio, | ||
| 306 | }; | ||
| 307 | |||
| 308 | static int __init spider_pci_workaround_init(void) | ||
| 309 | { | 177 | { |
| 310 | struct pci_controller *phb; | 178 | static int io_workaround_inited; |
| 311 | |||
| 312 | /* Find spider bridges. We assume they have been all probed | ||
| 313 | * in setup_arch(). If that was to change, we would need to | ||
| 314 | * update this code to cope with dynamically added busses | ||
| 315 | */ | ||
| 316 | list_for_each_entry(phb, &hose_list, list_node) { | ||
| 317 | struct device_node *np = phb->dn; | ||
| 318 | const char *model = of_get_property(np, "model", NULL); | ||
| 319 | |||
| 320 | /* If no model property or name isn't exactly "pci", skip */ | ||
| 321 | if (model == NULL || strcmp(np->name, "pci")) | ||
| 322 | continue; | ||
| 323 | /* If model is not "Spider", skip */ | ||
| 324 | if (strcmp(model, "Spider")) | ||
| 325 | continue; | ||
| 326 | spider_pci_add_one(phb); | ||
| 327 | } | ||
| 328 | |||
| 329 | /* No Spider PCI found, exit */ | ||
| 330 | if (spider_pci_count == 0) | ||
| 331 | return 0; | ||
| 332 | 179 | ||
| 333 | /* Setup IO callbacks. We only setup MMIO reads. PIO reads will | 180 | if (io_workaround_inited) |
| 334 | * fallback to MMIO reads (though without a token, thus slower) | 181 | return; |
| 335 | */ | 182 | ppc_pci_io = iowa_pci_io; |
| 336 | ppc_pci_io = spider_pci_io; | 183 | ppc_md.ioremap = iowa_ioremap; |
| 337 | 184 | io_workaround_inited = 1; | |
| 338 | /* Setup ioremap callback */ | ||
| 339 | ppc_md.ioremap = spider_ioremap; | ||
| 340 | |||
| 341 | return 0; | ||
| 342 | } | 185 | } |
| 343 | machine_arch_initcall(cell, spider_pci_workaround_init); | ||
diff --git a/arch/powerpc/platforms/cell/io-workarounds.h b/arch/powerpc/platforms/cell/io-workarounds.h new file mode 100644 index 000000000000..79d8ed3d510f --- /dev/null +++ b/arch/powerpc/platforms/cell/io-workarounds.h | |||
| @@ -0,0 +1,49 @@ | |||
| 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 */ | ||
diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c index 5c531e8f9f6f..ab721b50fbba 100644 --- a/arch/powerpc/platforms/cell/setup.c +++ b/arch/powerpc/platforms/cell/setup.c | |||
| @@ -57,6 +57,7 @@ | |||
| 57 | #include "interrupt.h" | 57 | #include "interrupt.h" |
| 58 | #include "pervasive.h" | 58 | #include "pervasive.h" |
| 59 | #include "ras.h" | 59 | #include "ras.h" |
| 60 | #include "io-workarounds.h" | ||
| 60 | 61 | ||
| 61 | #ifdef DEBUG | 62 | #ifdef DEBUG |
| 62 | #define DBG(fmt...) udbg_printf(fmt) | 63 | #define DBG(fmt...) udbg_printf(fmt) |
| @@ -117,13 +118,50 @@ static void cell_fixup_pcie_rootcomplex(struct pci_dev *dev) | |||
| 117 | } | 118 | } |
| 118 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, cell_fixup_pcie_rootcomplex); | 119 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, cell_fixup_pcie_rootcomplex); |
| 119 | 120 | ||
| 121 | static int __devinit cell_setup_phb(struct pci_controller *phb) | ||
| 122 | { | ||
| 123 | const char *model; | ||
| 124 | struct device_node *np; | ||
| 125 | |||
| 126 | int rc = rtas_setup_phb(phb); | ||
| 127 | if (rc) | ||
| 128 | return rc; | ||
| 129 | |||
| 130 | np = phb->dn; | ||
| 131 | model = of_get_property(np, "model", NULL); | ||
| 132 | if (model == NULL || strcmp(np->name, "pci")) | ||
| 133 | return 0; | ||
| 134 | |||
| 135 | /* Setup workarounds for spider */ | ||
| 136 | if (strcmp(model, "Spider")) | ||
| 137 | return 0; | ||
| 138 | |||
| 139 | iowa_register_bus(phb, &spiderpci_ops, &spiderpci_iowa_init, | ||
| 140 | (void *)SPIDER_PCI_REG_BASE); | ||
| 141 | io_workaround_init(); | ||
| 142 | |||
| 143 | return 0; | ||
| 144 | } | ||
| 145 | |||
| 120 | static int __init cell_publish_devices(void) | 146 | static int __init cell_publish_devices(void) |
| 121 | { | 147 | { |
| 148 | struct device_node *root = of_find_node_by_path("/"); | ||
| 149 | struct device_node *np; | ||
| 122 | int node; | 150 | int node; |
| 123 | 151 | ||
| 124 | /* Publish OF platform devices for southbridge IOs */ | 152 | /* Publish OF platform devices for southbridge IOs */ |
| 125 | of_platform_bus_probe(NULL, NULL, NULL); | 153 | of_platform_bus_probe(NULL, NULL, NULL); |
| 126 | 154 | ||
| 155 | /* On spider based blades, we need to manually create the OF | ||
| 156 | * platform devices for the PCI host bridges | ||
| 157 | */ | ||
| 158 | for_each_child_of_node(root, np) { | ||
| 159 | if (np->type == NULL || (strcmp(np->type, "pci") != 0 && | ||
| 160 | strcmp(np->type, "pciex") != 0)) | ||
| 161 | continue; | ||
| 162 | of_platform_device_create(np, NULL, NULL); | ||
| 163 | } | ||
| 164 | |||
| 127 | /* There is no device for the MIC memory controller, thus we create | 165 | /* There is no device for the MIC memory controller, thus we create |
| 128 | * a platform device for it to attach the EDAC driver to. | 166 | * a platform device for it to attach the EDAC driver to. |
| 129 | */ | 167 | */ |
| @@ -132,6 +170,7 @@ static int __init cell_publish_devices(void) | |||
| 132 | continue; | 170 | continue; |
| 133 | platform_device_register_simple("cbe-mic", node, NULL, 0); | 171 | platform_device_register_simple("cbe-mic", node, NULL, 0); |
| 134 | } | 172 | } |
| 173 | |||
| 135 | return 0; | 174 | return 0; |
| 136 | } | 175 | } |
| 137 | machine_subsys_initcall(cell, cell_publish_devices); | 176 | machine_subsys_initcall(cell, cell_publish_devices); |
| @@ -213,7 +252,7 @@ static void __init cell_setup_arch(void) | |||
| 213 | 252 | ||
| 214 | /* Find and initialize PCI host bridges */ | 253 | /* Find and initialize PCI host bridges */ |
| 215 | init_pci_config_tokens(); | 254 | init_pci_config_tokens(); |
| 216 | find_and_init_phbs(); | 255 | |
| 217 | cbe_pervasive_init(); | 256 | cbe_pervasive_init(); |
| 218 | #ifdef CONFIG_DUMMY_CONSOLE | 257 | #ifdef CONFIG_DUMMY_CONSOLE |
| 219 | conswitchp = &dummy_con; | 258 | conswitchp = &dummy_con; |
| @@ -249,7 +288,7 @@ define_machine(cell) { | |||
| 249 | .calibrate_decr = generic_calibrate_decr, | 288 | .calibrate_decr = generic_calibrate_decr, |
| 250 | .progress = cell_progress, | 289 | .progress = cell_progress, |
| 251 | .init_IRQ = cell_init_irq, | 290 | .init_IRQ = cell_init_irq, |
| 252 | .pci_setup_phb = rtas_setup_phb, | 291 | .pci_setup_phb = cell_setup_phb, |
| 253 | #ifdef CONFIG_KEXEC | 292 | #ifdef CONFIG_KEXEC |
| 254 | .machine_kexec = default_machine_kexec, | 293 | .machine_kexec = default_machine_kexec, |
| 255 | .machine_kexec_prepare = default_machine_kexec_prepare, | 294 | .machine_kexec_prepare = default_machine_kexec_prepare, |
diff --git a/arch/powerpc/platforms/cell/spider-pci.c b/arch/powerpc/platforms/cell/spider-pci.c new file mode 100644 index 000000000000..418b605ac35a --- /dev/null +++ b/arch/powerpc/platforms/cell/spider-pci.c | |||
| @@ -0,0 +1,184 @@ | |||
| 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 | |||
diff --git a/arch/powerpc/platforms/celleb/Kconfig b/arch/powerpc/platforms/celleb/Kconfig deleted file mode 100644 index 372891edcdd2..000000000000 --- a/arch/powerpc/platforms/celleb/Kconfig +++ /dev/null | |||
| @@ -1,12 +0,0 @@ | |||
| 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 | ||
diff --git a/arch/powerpc/platforms/celleb/Makefile b/arch/powerpc/platforms/celleb/Makefile deleted file mode 100644 index 889d43f715ea..000000000000 --- a/arch/powerpc/platforms/celleb/Makefile +++ /dev/null | |||
| @@ -1,9 +0,0 @@ | |||
| 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 | ||
diff --git a/arch/powerpc/platforms/celleb/io-workarounds.c b/arch/powerpc/platforms/celleb/io-workarounds.c deleted file mode 100644 index 423339be1bac..000000000000 --- a/arch/powerpc/platforms/celleb/io-workarounds.c +++ /dev/null | |||
| @@ -1,280 +0,0 @@ | |||
| 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 | } | ||
diff --git a/arch/powerpc/platforms/iseries/exception.S b/arch/powerpc/platforms/iseries/exception.S index c775cd4b3d6e..8ff330d026ca 100644 --- a/arch/powerpc/platforms/iseries/exception.S +++ b/arch/powerpc/platforms/iseries/exception.S | |||
| @@ -59,8 +59,33 @@ system_reset_iSeries: | |||
| 59 | andc r4,r4,r5 | 59 | andc r4,r4,r5 |
| 60 | mtspr SPRN_CTRLT,r4 | 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 | 1: | 65 | 1: |
| 63 | HMT_LOW | 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: | ||
| 88 | HMT_LOW | ||
| 64 | #ifdef CONFIG_SMP | 89 | #ifdef CONFIG_SMP |
| 65 | lbz r23,PACAPROCSTART(r13) /* Test if this processor | 90 | lbz r23,PACAPROCSTART(r13) /* Test if this processor |
| 66 | * should start */ | 91 | * should start */ |
| @@ -91,7 +116,7 @@ iSeries_secondary_smp_loop: | |||
| 91 | li r0,-1 /* r0=-1 indicates a Hypervisor call */ | 116 | li r0,-1 /* r0=-1 indicates a Hypervisor call */ |
| 92 | sc /* Invoke the hypervisor via a system call */ | 117 | sc /* Invoke the hypervisor via a system call */ |
| 93 | mfspr r13,SPRN_SPRG3 /* Put r13 back ???? */ | 118 | mfspr r13,SPRN_SPRG3 /* Put r13 back ???? */ |
| 94 | b 1b /* If SMP not configured, secondaries | 119 | b 2b /* If SMP not configured, secondaries |
| 95 | * loop forever */ | 120 | * loop forever */ |
| 96 | 121 | ||
| 97 | /*** ISeries-LPAR interrupt handlers ***/ | 122 | /*** ISeries-LPAR interrupt handlers ***/ |
diff --git a/arch/powerpc/platforms/ps3/os-area.c b/arch/powerpc/platforms/ps3/os-area.c index c73379ec9141..1d201782d4e5 100644 --- a/arch/powerpc/platforms/ps3/os-area.c +++ b/arch/powerpc/platforms/ps3/os-area.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/syscalls.h> | 25 | #include <linux/syscalls.h> |
| 26 | #include <linux/ctype.h> | 26 | #include <linux/ctype.h> |
| 27 | #include <linux/lmb.h> | 27 | #include <linux/lmb.h> |
| 28 | #include <linux/of.h> | ||
| 28 | 29 | ||
| 29 | #include <asm/prom.h> | 30 | #include <asm/prom.h> |
| 30 | 31 | ||
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index 306a9d07491d..07fe5b69b9e2 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
| @@ -34,3 +34,8 @@ config LPARCFG | |||
| 34 | help | 34 | help |
| 35 | Provide system capacity information via human readable | 35 | Provide system capacity information via human readable |
| 36 | <key word>=<value> pairs through a /proc/ppc64/lparcfg interface. | 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 | ||
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile index bdae04bb7a01..bd2593ed28dd 100644 --- a/arch/powerpc/platforms/pseries/Makefile +++ b/arch/powerpc/platforms/pseries/Makefile | |||
| @@ -2,6 +2,10 @@ ifeq ($(CONFIG_PPC64),y) | |||
| 2 | EXTRA_CFLAGS += -mno-minimal-toc | 2 | EXTRA_CFLAGS += -mno-minimal-toc |
| 3 | endif | 3 | endif |
| 4 | 4 | ||
| 5 | ifeq ($(CONFIG_PPC_PSERIES_DEBUG),y) | ||
| 6 | EXTRA_CFLAGS += -DDEBUG | ||
| 7 | endif | ||
| 8 | |||
| 5 | obj-y := lpar.o hvCall.o nvram.o reconfig.o \ | 9 | obj-y := lpar.o hvCall.o nvram.o reconfig.o \ |
| 6 | setup.o iommu.o ras.o rtasd.o \ | 10 | setup.o iommu.o ras.o rtasd.o \ |
| 7 | firmware.o power.o | 11 | firmware.o power.o |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 550b2f7d2cc1..a3fd56b186e6 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
| @@ -39,7 +39,6 @@ | |||
| 39 | #include <asm/ppc-pci.h> | 39 | #include <asm/ppc-pci.h> |
| 40 | #include <asm/rtas.h> | 40 | #include <asm/rtas.h> |
| 41 | 41 | ||
| 42 | #undef DEBUG | ||
| 43 | 42 | ||
| 44 | /** Overview: | 43 | /** Overview: |
| 45 | * EEH, or "Extended Error Handling" is a PCI bridge technology for | 44 | * EEH, or "Extended Error Handling" is a PCI bridge technology for |
diff --git a/arch/powerpc/platforms/pseries/eeh_cache.c b/arch/powerpc/platforms/pseries/eeh_cache.c index 1e83fcd0df31..ce37040af870 100644 --- a/arch/powerpc/platforms/pseries/eeh_cache.c +++ b/arch/powerpc/platforms/pseries/eeh_cache.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <asm/pci-bridge.h> | 28 | #include <asm/pci-bridge.h> |
| 29 | #include <asm/ppc-pci.h> | 29 | #include <asm/ppc-pci.h> |
| 30 | 30 | ||
| 31 | #undef DEBUG | ||
| 32 | 31 | ||
| 33 | /** | 32 | /** |
| 34 | * The pci address cache subsystem. This subsystem places | 33 | * The pci address cache subsystem. This subsystem places |
diff --git a/arch/powerpc/platforms/pseries/firmware.c b/arch/powerpc/platforms/pseries/firmware.c index b765b7c77b65..9d3a40f45974 100644 --- a/arch/powerpc/platforms/pseries/firmware.c +++ b/arch/powerpc/platforms/pseries/firmware.c | |||
| @@ -21,17 +21,11 @@ | |||
| 21 | * 2 of the License, or (at your option) any later version. | 21 | * 2 of the License, or (at your option) any later version. |
| 22 | */ | 22 | */ |
| 23 | 23 | ||
| 24 | #undef DEBUG | ||
| 25 | 24 | ||
| 26 | #include <asm/firmware.h> | 25 | #include <asm/firmware.h> |
| 27 | #include <asm/prom.h> | 26 | #include <asm/prom.h> |
| 28 | #include <asm/udbg.h> | 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 | typedef struct { | 30 | typedef struct { |
| 37 | unsigned long val; | 31 | unsigned long val; |
| @@ -72,7 +66,7 @@ void __init fw_feature_init(const char *hypertas, unsigned long len) | |||
| 72 | const char *s; | 66 | const char *s; |
| 73 | int i; | 67 | int i; |
| 74 | 68 | ||
| 75 | DBG(" -> fw_feature_init()\n"); | 69 | pr_debug(" -> fw_feature_init()\n"); |
| 76 | 70 | ||
| 77 | for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) { | 71 | for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) { |
| 78 | for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) { | 72 | for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) { |
| @@ -88,5 +82,5 @@ void __init fw_feature_init(const char *hypertas, unsigned long len) | |||
| 88 | } | 82 | } |
| 89 | } | 83 | } |
| 90 | 84 | ||
| 91 | DBG(" <- fw_feature_init()\n"); | 85 | pr_debug(" <- fw_feature_init()\n"); |
| 92 | } | 86 | } |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index a65c76308201..176f1f39d2d5 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
| @@ -47,7 +47,6 @@ | |||
| 47 | 47 | ||
| 48 | #include "plpar_wrappers.h" | 48 | #include "plpar_wrappers.h" |
| 49 | 49 | ||
| 50 | #define DBG(fmt...) | ||
| 51 | 50 | ||
| 52 | static void tce_build_pSeries(struct iommu_table *tbl, long index, | 51 | static void tce_build_pSeries(struct iommu_table *tbl, long index, |
| 53 | long npages, unsigned long uaddr, | 52 | long npages, unsigned long uaddr, |
| @@ -322,7 +321,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus) | |||
| 322 | 321 | ||
| 323 | dn = pci_bus_to_OF_node(bus); | 322 | dn = pci_bus_to_OF_node(bus); |
| 324 | 323 | ||
| 325 | DBG("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name); | 324 | pr_debug("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name); |
| 326 | 325 | ||
| 327 | if (bus->self) { | 326 | if (bus->self) { |
| 328 | /* This is not a root bus, any setup will be done for the | 327 | /* This is not a root bus, any setup will be done for the |
| @@ -347,7 +346,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus) | |||
| 347 | for (children = 0, tmp = dn->child; tmp; tmp = tmp->sibling) | 346 | for (children = 0, tmp = dn->child; tmp; tmp = tmp->sibling) |
| 348 | children++; | 347 | children++; |
| 349 | 348 | ||
| 350 | DBG("Children: %d\n", children); | 349 | pr_debug("Children: %d\n", children); |
| 351 | 350 | ||
| 352 | /* Calculate amount of DMA window per slot. Each window must be | 351 | /* Calculate amount of DMA window per slot. Each window must be |
| 353 | * a power of two (due to pci_alloc_consistent requirements). | 352 | * a power of two (due to pci_alloc_consistent requirements). |
| @@ -361,8 +360,8 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus) | |||
| 361 | 360 | ||
| 362 | while (pci->phb->dma_window_size * children > 0x80000000ul) | 361 | while (pci->phb->dma_window_size * children > 0x80000000ul) |
| 363 | pci->phb->dma_window_size >>= 1; | 362 | pci->phb->dma_window_size >>= 1; |
| 364 | DBG("No ISA/IDE, window size is 0x%lx\n", | 363 | pr_debug("No ISA/IDE, window size is 0x%lx\n", |
| 365 | pci->phb->dma_window_size); | 364 | pci->phb->dma_window_size); |
| 366 | pci->phb->dma_window_base_cur = 0; | 365 | pci->phb->dma_window_base_cur = 0; |
| 367 | 366 | ||
| 368 | return; | 367 | return; |
| @@ -387,8 +386,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus) | |||
| 387 | while (pci->phb->dma_window_size * children > 0x70000000ul) | 386 | while (pci->phb->dma_window_size * children > 0x70000000ul) |
| 388 | pci->phb->dma_window_size >>= 1; | 387 | pci->phb->dma_window_size >>= 1; |
| 389 | 388 | ||
| 390 | DBG("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size); | 389 | pr_debug("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size); |
| 391 | |||
| 392 | } | 390 | } |
| 393 | 391 | ||
| 394 | 392 | ||
| @@ -401,7 +399,8 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus) | |||
| 401 | 399 | ||
| 402 | dn = pci_bus_to_OF_node(bus); | 400 | dn = pci_bus_to_OF_node(bus); |
| 403 | 401 | ||
| 404 | DBG("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n", dn->full_name); | 402 | pr_debug("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n", |
| 403 | dn->full_name); | ||
| 405 | 404 | ||
| 406 | /* Find nearest ibm,dma-window, walking up the device tree */ | 405 | /* Find nearest ibm,dma-window, walking up the device tree */ |
| 407 | for (pdn = dn; pdn != NULL; pdn = pdn->parent) { | 406 | for (pdn = dn; pdn != NULL; pdn = pdn->parent) { |
| @@ -411,14 +410,14 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus) | |||
| 411 | } | 410 | } |
| 412 | 411 | ||
| 413 | if (dma_window == NULL) { | 412 | if (dma_window == NULL) { |
| 414 | DBG(" no ibm,dma-window property !\n"); | 413 | pr_debug(" no ibm,dma-window property !\n"); |
| 415 | return; | 414 | return; |
| 416 | } | 415 | } |
| 417 | 416 | ||
| 418 | ppci = PCI_DN(pdn); | 417 | ppci = PCI_DN(pdn); |
| 419 | 418 | ||
| 420 | DBG(" parent is %s, iommu_table: 0x%p\n", | 419 | pr_debug(" parent is %s, iommu_table: 0x%p\n", |
| 421 | pdn->full_name, ppci->iommu_table); | 420 | pdn->full_name, ppci->iommu_table); |
| 422 | 421 | ||
| 423 | if (!ppci->iommu_table) { | 422 | if (!ppci->iommu_table) { |
| 424 | tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, | 423 | tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, |
| @@ -426,7 +425,7 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus) | |||
| 426 | iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window, | 425 | iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window, |
| 427 | bus->number); | 426 | bus->number); |
| 428 | ppci->iommu_table = iommu_init_table(tbl, ppci->phb->node); | 427 | ppci->iommu_table = iommu_init_table(tbl, ppci->phb->node); |
| 429 | DBG(" created table: %p\n", ppci->iommu_table); | 428 | pr_debug(" created table: %p\n", ppci->iommu_table); |
| 430 | } | 429 | } |
| 431 | 430 | ||
| 432 | if (pdn != dn) | 431 | if (pdn != dn) |
| @@ -439,7 +438,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev) | |||
| 439 | struct device_node *dn; | 438 | struct device_node *dn; |
| 440 | struct iommu_table *tbl; | 439 | struct iommu_table *tbl; |
| 441 | 440 | ||
| 442 | DBG("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev)); | 441 | pr_debug("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev)); |
| 443 | 442 | ||
| 444 | dn = dev->dev.archdata.of_node; | 443 | dn = dev->dev.archdata.of_node; |
| 445 | 444 | ||
| @@ -450,7 +449,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev) | |||
| 450 | if (!dev->bus->self) { | 449 | if (!dev->bus->self) { |
| 451 | struct pci_controller *phb = PCI_DN(dn)->phb; | 450 | struct pci_controller *phb = PCI_DN(dn)->phb; |
| 452 | 451 | ||
| 453 | DBG(" --> first child, no bridge. Allocating iommu table.\n"); | 452 | pr_debug(" --> first child, no bridge. Allocating iommu table.\n"); |
| 454 | tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, | 453 | tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL, |
| 455 | phb->node); | 454 | phb->node); |
| 456 | iommu_table_setparms(phb, dn, tbl); | 455 | iommu_table_setparms(phb, dn, tbl); |
| @@ -480,7 +479,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 480 | const void *dma_window = NULL; | 479 | const void *dma_window = NULL; |
| 481 | struct pci_dn *pci; | 480 | struct pci_dn *pci; |
| 482 | 481 | ||
| 483 | DBG("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev)); | 482 | pr_debug("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev)); |
| 484 | 483 | ||
| 485 | /* dev setup for LPAR is a little tricky, since the device tree might | 484 | /* dev setup for LPAR is a little tricky, since the device tree might |
| 486 | * contain the dma-window properties per-device and not neccesarily | 485 | * contain the dma-window properties per-device and not neccesarily |
| @@ -489,7 +488,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 489 | * already allocated. | 488 | * already allocated. |
| 490 | */ | 489 | */ |
| 491 | dn = pci_device_to_OF_node(dev); | 490 | dn = pci_device_to_OF_node(dev); |
| 492 | DBG(" node is %s\n", dn->full_name); | 491 | pr_debug(" node is %s\n", dn->full_name); |
| 493 | 492 | ||
| 494 | for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table; | 493 | for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table; |
| 495 | pdn = pdn->parent) { | 494 | pdn = pdn->parent) { |
| @@ -504,13 +503,13 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 504 | pci_name(dev), dn? dn->full_name : "<null>"); | 503 | pci_name(dev), dn? dn->full_name : "<null>"); |
| 505 | return; | 504 | return; |
| 506 | } | 505 | } |
| 507 | DBG(" parent is %s\n", pdn->full_name); | 506 | pr_debug(" parent is %s\n", pdn->full_name); |
| 508 | 507 | ||
| 509 | /* Check for parent == NULL so we don't try to setup the empty EADS | 508 | /* Check for parent == NULL so we don't try to setup the empty EADS |
| 510 | * slots on POWER4 machines. | 509 | * slots on POWER4 machines. |
| 511 | */ | 510 | */ |
| 512 | if (dma_window == NULL || pdn->parent == NULL) { | 511 | if (dma_window == NULL || pdn->parent == NULL) { |
| 513 | DBG(" no dma window for device, linking to parent\n"); | 512 | pr_debug(" no dma window for device, linking to parent\n"); |
| 514 | dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table; | 513 | dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table; |
| 515 | return; | 514 | return; |
| 516 | } | 515 | } |
| @@ -522,9 +521,9 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 522 | iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window, | 521 | iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window, |
| 523 | pci->phb->bus->number); | 522 | pci->phb->bus->number); |
| 524 | pci->iommu_table = iommu_init_table(tbl, pci->phb->node); | 523 | pci->iommu_table = iommu_init_table(tbl, pci->phb->node); |
| 525 | DBG(" created table: %p\n", pci->iommu_table); | 524 | pr_debug(" created table: %p\n", pci->iommu_table); |
| 526 | } else { | 525 | } else { |
| 527 | DBG(" found DMA window, table: %p\n", pci->iommu_table); | 526 | pr_debug(" found DMA window, table: %p\n", pci->iommu_table); |
| 528 | } | 527 | } |
| 529 | 528 | ||
| 530 | dev->dev.archdata.dma_data = pci->iommu_table; | 529 | dev->dev.archdata.dma_data = pci->iommu_table; |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 9235c469449e..2cbaedb17f3e 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 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 | #include <linux/kernel.h> | 25 | #include <linux/kernel.h> |
| 25 | #include <linux/dma-mapping.h> | 26 | #include <linux/dma-mapping.h> |
| @@ -42,11 +43,6 @@ | |||
| 42 | #include "plpar_wrappers.h" | 43 | #include "plpar_wrappers.h" |
| 43 | #include "pseries.h" | 44 | #include "pseries.h" |
| 44 | 45 | ||
| 45 | #ifdef DEBUG_LOW | ||
| 46 | #define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0) | ||
| 47 | #else | ||
| 48 | #define DBG_LOW(fmt...) do { } while(0) | ||
| 49 | #endif | ||
| 50 | 46 | ||
| 51 | /* in hvCall.S */ | 47 | /* in hvCall.S */ |
| 52 | EXPORT_SYMBOL(plpar_hcall); | 48 | EXPORT_SYMBOL(plpar_hcall); |
| @@ -196,6 +192,8 @@ void __init udbg_init_debug_lpar(void) | |||
| 196 | udbg_putc = udbg_putcLP; | 192 | udbg_putc = udbg_putcLP; |
| 197 | udbg_getc = udbg_getcLP; | 193 | udbg_getc = udbg_getcLP; |
| 198 | udbg_getc_poll = udbg_getc_pollLP; | 194 | udbg_getc_poll = udbg_getc_pollLP; |
| 195 | |||
| 196 | register_early_udbg_console(); | ||
| 199 | } | 197 | } |
| 200 | 198 | ||
| 201 | /* returns 0 if couldn't find or use /chosen/stdout as console */ | 199 | /* returns 0 if couldn't find or use /chosen/stdout as console */ |
| @@ -288,15 +286,15 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
| 288 | unsigned long hpte_v, hpte_r; | 286 | unsigned long hpte_v, hpte_r; |
| 289 | 287 | ||
| 290 | if (!(vflags & HPTE_V_BOLTED)) | 288 | if (!(vflags & HPTE_V_BOLTED)) |
| 291 | DBG_LOW("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " | 289 | pr_debug("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " |
| 292 | "rflags=%lx, vflags=%lx, psize=%d)\n", | 290 | "rflags=%lx, vflags=%lx, psize=%d)\n", |
| 293 | hpte_group, va, pa, rflags, vflags, psize); | 291 | hpte_group, va, pa, rflags, vflags, psize); |
| 294 | 292 | ||
| 295 | hpte_v = hpte_encode_v(va, psize, ssize) | vflags | HPTE_V_VALID; | 293 | hpte_v = hpte_encode_v(va, psize, ssize) | vflags | HPTE_V_VALID; |
| 296 | hpte_r = hpte_encode_r(pa, psize) | rflags; | 294 | hpte_r = hpte_encode_r(pa, psize) | rflags; |
| 297 | 295 | ||
| 298 | if (!(vflags & HPTE_V_BOLTED)) | 296 | if (!(vflags & HPTE_V_BOLTED)) |
| 299 | DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); | 297 | pr_debug(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); |
| 300 | 298 | ||
| 301 | /* Now fill in the actual HPTE */ | 299 | /* Now fill in the actual HPTE */ |
| 302 | /* Set CEC cookie to 0 */ | 300 | /* Set CEC cookie to 0 */ |
| @@ -313,7 +311,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
| 313 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); | 311 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); |
| 314 | if (unlikely(lpar_rc == H_PTEG_FULL)) { | 312 | if (unlikely(lpar_rc == H_PTEG_FULL)) { |
| 315 | if (!(vflags & HPTE_V_BOLTED)) | 313 | if (!(vflags & HPTE_V_BOLTED)) |
| 316 | DBG_LOW(" full\n"); | 314 | pr_debug(" full\n"); |
| 317 | return -1; | 315 | return -1; |
| 318 | } | 316 | } |
| 319 | 317 | ||
| @@ -324,11 +322,11 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
| 324 | */ | 322 | */ |
| 325 | if (unlikely(lpar_rc != H_SUCCESS)) { | 323 | if (unlikely(lpar_rc != H_SUCCESS)) { |
| 326 | if (!(vflags & HPTE_V_BOLTED)) | 324 | if (!(vflags & HPTE_V_BOLTED)) |
| 327 | DBG_LOW(" lpar err %d\n", lpar_rc); | 325 | pr_debug(" lpar err %lu\n", lpar_rc); |
| 328 | return -2; | 326 | return -2; |
| 329 | } | 327 | } |
| 330 | if (!(vflags & HPTE_V_BOLTED)) | 328 | if (!(vflags & HPTE_V_BOLTED)) |
| 331 | DBG_LOW(" -> slot: %d\n", slot & 7); | 329 | pr_debug(" -> slot: %lu\n", slot & 7); |
| 332 | 330 | ||
| 333 | /* Because of iSeries, we have to pass down the secondary | 331 | /* Because of iSeries, we have to pass down the secondary |
| 334 | * bucket bit here as well | 332 | * bucket bit here as well |
| @@ -420,17 +418,17 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot, | |||
| 420 | 418 | ||
| 421 | want_v = hpte_encode_avpn(va, psize, ssize); | 419 | want_v = hpte_encode_avpn(va, psize, ssize); |
| 422 | 420 | ||
| 423 | DBG_LOW(" update: avpnv=%016lx, hash=%016lx, f=%x, psize: %d ... ", | 421 | pr_debug(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", |
| 424 | want_v, slot, flags, psize); | 422 | want_v, slot, flags, psize); |
| 425 | 423 | ||
| 426 | lpar_rc = plpar_pte_protect(flags, slot, want_v); | 424 | lpar_rc = plpar_pte_protect(flags, slot, want_v); |
| 427 | 425 | ||
| 428 | if (lpar_rc == H_NOT_FOUND) { | 426 | if (lpar_rc == H_NOT_FOUND) { |
| 429 | DBG_LOW("not found !\n"); | 427 | pr_debug("not found !\n"); |
| 430 | return -1; | 428 | return -1; |
| 431 | } | 429 | } |
| 432 | 430 | ||
| 433 | DBG_LOW("ok\n"); | 431 | pr_debug("ok\n"); |
| 434 | 432 | ||
| 435 | BUG_ON(lpar_rc != H_SUCCESS); | 433 | BUG_ON(lpar_rc != H_SUCCESS); |
| 436 | 434 | ||
| @@ -505,8 +503,8 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | |||
| 505 | unsigned long lpar_rc; | 503 | unsigned long lpar_rc; |
| 506 | unsigned long dummy1, dummy2; | 504 | unsigned long dummy1, dummy2; |
| 507 | 505 | ||
| 508 | DBG_LOW(" inval : slot=%lx, va=%016lx, psize: %d, local: %d", | 506 | pr_debug(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", |
| 509 | slot, va, psize, local); | 507 | slot, va, psize, local); |
| 510 | 508 | ||
| 511 | want_v = hpte_encode_avpn(va, psize, ssize); | 509 | want_v = hpte_encode_avpn(va, psize, ssize); |
| 512 | lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v, &dummy1, &dummy2); | 510 | lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v, &dummy1, &dummy2); |
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index a1ab25c7082f..2b548afd1003 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c | |||
| @@ -67,8 +67,6 @@ static int ras_check_exception_token; | |||
| 67 | static irqreturn_t ras_epow_interrupt(int irq, void *dev_id); | 67 | static irqreturn_t ras_epow_interrupt(int irq, void *dev_id); |
| 68 | static irqreturn_t ras_error_interrupt(int irq, void *dev_id); | 68 | static irqreturn_t ras_error_interrupt(int irq, void *dev_id); |
| 69 | 69 | ||
| 70 | /* #define DEBUG */ | ||
| 71 | |||
| 72 | 70 | ||
| 73 | static void request_ras_irqs(struct device_node *np, | 71 | static void request_ras_irqs(struct device_node *np, |
| 74 | irq_handler_t handler, | 72 | irq_handler_t handler, |
| @@ -237,7 +235,7 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id) | |||
| 237 | printk(KERN_EMERG "Error: Fatal hardware error <0x%lx 0x%x>\n", | 235 | printk(KERN_EMERG "Error: Fatal hardware error <0x%lx 0x%x>\n", |
| 238 | *((unsigned long *)&ras_log_buf), status); | 236 | *((unsigned long *)&ras_log_buf), status); |
| 239 | 237 | ||
| 240 | #ifndef DEBUG | 238 | #ifndef DEBUG_RTAS_POWER_OFF |
| 241 | /* Don't actually power off when debugging so we can test | 239 | /* Don't actually power off when debugging so we can test |
| 242 | * without actually failing while injecting errors. | 240 | * without actually failing while injecting errors. |
| 243 | * Error data will not be logged to syslog. | 241 | * Error data will not be logged to syslog. |
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c index e3078ce41518..befadd4f9524 100644 --- a/arch/powerpc/platforms/pseries/rtasd.c +++ b/arch/powerpc/platforms/pseries/rtasd.c | |||
| @@ -29,11 +29,6 @@ | |||
| 29 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
| 30 | #include <asm/machdep.h> | 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 | static DEFINE_SPINLOCK(rtasd_log_lock); | 33 | static DEFINE_SPINLOCK(rtasd_log_lock); |
| 39 | 34 | ||
| @@ -198,7 +193,7 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal) | |||
| 198 | unsigned long s; | 193 | unsigned long s; |
| 199 | int len = 0; | 194 | int len = 0; |
| 200 | 195 | ||
| 201 | DEBUG("logging event\n"); | 196 | pr_debug("rtasd: logging event\n"); |
| 202 | if (buf == NULL) | 197 | if (buf == NULL) |
| 203 | return; | 198 | return; |
| 204 | 199 | ||
| @@ -409,7 +404,8 @@ static int rtasd(void *unused) | |||
| 409 | daemonize("rtasd"); | 404 | daemonize("rtasd"); |
| 410 | 405 | ||
| 411 | printk(KERN_DEBUG "RTAS daemon started\n"); | 406 | printk(KERN_DEBUG "RTAS daemon started\n"); |
| 412 | DEBUG("will sleep for %d milliseconds\n", (30000/rtas_event_scan_rate)); | 407 | pr_debug("rtasd: will sleep for %d milliseconds\n", |
| 408 | (30000 / rtas_event_scan_rate)); | ||
| 413 | 409 | ||
| 414 | /* See if we have any error stored in NVRAM */ | 410 | /* See if we have any error stored in NVRAM */ |
| 415 | memset(logdata, 0, rtas_error_log_max); | 411 | memset(logdata, 0, rtas_error_log_max); |
| @@ -428,9 +424,9 @@ static int rtasd(void *unused) | |||
| 428 | do_event_scan_all_cpus(1000); | 424 | do_event_scan_all_cpus(1000); |
| 429 | 425 | ||
| 430 | if (surveillance_timeout != -1) { | 426 | if (surveillance_timeout != -1) { |
| 431 | DEBUG("enabling surveillance\n"); | 427 | pr_debug("rtasd: enabling surveillance\n"); |
| 432 | enable_surveillance(surveillance_timeout); | 428 | enable_surveillance(surveillance_timeout); |
| 433 | DEBUG("surveillance enabled\n"); | 429 | pr_debug("rtasd: surveillance enabled\n"); |
| 434 | } | 430 | } |
| 435 | 431 | ||
| 436 | /* Delay should be at least one second since some | 432 | /* Delay should be at least one second since some |
diff --git a/arch/powerpc/platforms/pseries/scanlog.c b/arch/powerpc/platforms/pseries/scanlog.c index e5b0ea870164..bec3803f0618 100644 --- a/arch/powerpc/platforms/pseries/scanlog.c +++ b/arch/powerpc/platforms/pseries/scanlog.c | |||
| @@ -38,9 +38,7 @@ | |||
| 38 | #define SCANLOG_HWERROR -1 | 38 | #define SCANLOG_HWERROR -1 |
| 39 | #define SCANLOG_CONTINUE 1 | 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 | static unsigned int ibm_scan_log_dump; /* RTAS token */ | 42 | static unsigned int ibm_scan_log_dump; /* RTAS token */ |
| 45 | static struct proc_dir_entry *proc_ppc64_scan_log_dump; /* The proc file */ | 43 | static struct proc_dir_entry *proc_ppc64_scan_log_dump; /* The proc file */ |
| 46 | 44 | ||
| @@ -86,14 +84,14 @@ static ssize_t scanlog_read(struct file *file, char __user *buf, | |||
| 86 | memcpy(data, rtas_data_buf, RTAS_DATA_BUF_SIZE); | 84 | memcpy(data, rtas_data_buf, RTAS_DATA_BUF_SIZE); |
| 87 | spin_unlock(&rtas_data_buf_lock); | 85 | spin_unlock(&rtas_data_buf_lock); |
| 88 | 86 | ||
| 89 | DEBUG("status=%d, data[0]=%x, data[1]=%x, data[2]=%x\n", | 87 | pr_debug("scanlog: status=%d, data[0]=%x, data[1]=%x, " \ |
| 90 | status, data[0], data[1], data[2]); | 88 | "data[2]=%x\n", status, data[0], data[1], data[2]); |
| 91 | switch (status) { | 89 | switch (status) { |
| 92 | case SCANLOG_COMPLETE: | 90 | case SCANLOG_COMPLETE: |
| 93 | DEBUG("hit eof\n"); | 91 | pr_debug("scanlog: hit eof\n"); |
| 94 | return 0; | 92 | return 0; |
| 95 | case SCANLOG_HWERROR: | 93 | case SCANLOG_HWERROR: |
| 96 | DEBUG("hardware error reading scan log data\n"); | 94 | pr_debug("scanlog: hardware error reading data\n"); |
| 97 | return -EIO; | 95 | return -EIO; |
| 98 | case SCANLOG_CONTINUE: | 96 | case SCANLOG_CONTINUE: |
| 99 | /* We may or may not have data yet */ | 97 | /* We may or may not have data yet */ |
| @@ -110,7 +108,8 @@ static ssize_t scanlog_read(struct file *file, char __user *buf, | |||
| 110 | /* Assume extended busy */ | 108 | /* Assume extended busy */ |
| 111 | wait_time = rtas_busy_delay_time(status); | 109 | wait_time = rtas_busy_delay_time(status); |
| 112 | if (!wait_time) { | 110 | if (!wait_time) { |
| 113 | printk(KERN_ERR "scanlog: unknown error from rtas: %d\n", status); | 111 | printk(KERN_ERR "scanlog: unknown error " \ |
| 112 | "from rtas: %d\n", status); | ||
| 114 | return -EIO; | 113 | return -EIO; |
| 115 | } | 114 | } |
| 116 | } | 115 | } |
| @@ -134,15 +133,9 @@ static ssize_t scanlog_write(struct file * file, const char __user * buf, | |||
| 134 | 133 | ||
| 135 | if (buf) { | 134 | if (buf) { |
| 136 | if (strncmp(stkbuf, "reset", 5) == 0) { | 135 | if (strncmp(stkbuf, "reset", 5) == 0) { |
| 137 | DEBUG("reset scanlog\n"); | 136 | pr_debug("scanlog: reset scanlog\n"); |
| 138 | status = rtas_call(ibm_scan_log_dump, 2, 1, NULL, 0, 0); | 137 | status = rtas_call(ibm_scan_log_dump, 2, 1, NULL, 0, 0); |
| 139 | DEBUG("rtas returns %d\n", status); | 138 | pr_debug("scanlog: rtas returns %d\n", status); |
| 140 | } else if (strncmp(stkbuf, "debugon", 7) == 0) { | ||
| 141 | printk(KERN_ERR "scanlog: debug on\n"); | ||
| 142 | scanlog_debug = 1; | ||
| 143 | } else if (strncmp(stkbuf, "debugoff", 8) == 0) { | ||
| 144 | printk(KERN_ERR "scanlog: debug off\n"); | ||
| 145 | scanlog_debug = 0; | ||
| 146 | } | 139 | } |
| 147 | } | 140 | } |
| 148 | return count; | 141 | return count; |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index f66aa9c3b135..f5d29f5b13c1 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
| @@ -16,8 +16,6 @@ | |||
| 16 | * bootup setup stuff.. | 16 | * bootup setup stuff.. |
| 17 | */ | 17 | */ |
| 18 | 18 | ||
| 19 | #undef DEBUG | ||
| 20 | |||
| 21 | #include <linux/cpu.h> | 19 | #include <linux/cpu.h> |
| 22 | #include <linux/errno.h> | 20 | #include <linux/errno.h> |
| 23 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
| @@ -70,11 +68,6 @@ | |||
| 70 | #include "plpar_wrappers.h" | 68 | #include "plpar_wrappers.h" |
| 71 | #include "pseries.h" | 69 | #include "pseries.h" |
| 72 | 70 | ||
| 73 | #ifdef DEBUG | ||
| 74 | #define DBG(fmt...) udbg_printf(fmt) | ||
| 75 | #else | ||
| 76 | #define DBG(fmt...) | ||
| 77 | #endif | ||
| 78 | 71 | ||
| 79 | int fwnmi_active; /* TRUE if an FWNMI handler is present */ | 72 | int fwnmi_active; /* TRUE if an FWNMI handler is present */ |
| 80 | 73 | ||
| @@ -326,7 +319,7 @@ static int pseries_set_xdabr(unsigned long dabr) | |||
| 326 | */ | 319 | */ |
| 327 | static void __init pSeries_init_early(void) | 320 | static void __init pSeries_init_early(void) |
| 328 | { | 321 | { |
| 329 | DBG(" -> pSeries_init_early()\n"); | 322 | pr_debug(" -> pSeries_init_early()\n"); |
| 330 | 323 | ||
| 331 | if (firmware_has_feature(FW_FEATURE_LPAR)) | 324 | if (firmware_has_feature(FW_FEATURE_LPAR)) |
| 332 | find_udbg_vterm(); | 325 | find_udbg_vterm(); |
| @@ -338,7 +331,7 @@ static void __init pSeries_init_early(void) | |||
| 338 | 331 | ||
| 339 | iommu_init_early_pSeries(); | 332 | iommu_init_early_pSeries(); |
| 340 | 333 | ||
| 341 | DBG(" <- pSeries_init_early()\n"); | 334 | pr_debug(" <- pSeries_init_early()\n"); |
| 342 | } | 335 | } |
| 343 | 336 | ||
| 344 | /* | 337 | /* |
| @@ -383,7 +376,7 @@ static int __init pSeries_probe(void) | |||
| 383 | of_flat_dt_is_compatible(root, "IBM,CBEA")) | 376 | of_flat_dt_is_compatible(root, "IBM,CBEA")) |
| 384 | return 0; | 377 | return 0; |
| 385 | 378 | ||
| 386 | DBG("pSeries detected, looking for LPAR capability...\n"); | 379 | pr_debug("pSeries detected, looking for LPAR capability...\n"); |
| 387 | 380 | ||
| 388 | /* Now try to figure out if we are running on LPAR */ | 381 | /* Now try to figure out if we are running on LPAR */ |
| 389 | of_scan_flat_dt(pSeries_probe_hypertas, NULL); | 382 | of_scan_flat_dt(pSeries_probe_hypertas, NULL); |
| @@ -393,8 +386,8 @@ static int __init pSeries_probe(void) | |||
| 393 | else | 386 | else |
| 394 | hpte_init_native(); | 387 | hpte_init_native(); |
| 395 | 388 | ||
| 396 | DBG("Machine is%s LPAR !\n", | 389 | pr_debug("Machine is%s LPAR !\n", |
| 397 | (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); | 390 | (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); |
| 398 | 391 | ||
| 399 | return 1; | 392 | return 1; |
| 400 | } | 393 | } |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index ea4c65917a64..9d8f8c84ab89 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #undef DEBUG | ||
| 16 | 15 | ||
| 17 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
| 18 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| @@ -51,12 +50,6 @@ | |||
| 51 | #include "plpar_wrappers.h" | 50 | #include "plpar_wrappers.h" |
| 52 | #include "pseries.h" | 51 | #include "pseries.h" |
| 53 | 52 | ||
| 54 | #ifdef DEBUG | ||
| 55 | #include <asm/udbg.h> | ||
| 56 | #define DBG(fmt...) udbg_printf(fmt) | ||
| 57 | #else | ||
| 58 | #define DBG(fmt...) | ||
| 59 | #endif | ||
| 60 | 53 | ||
| 61 | /* | 54 | /* |
| 62 | * The primary thread of each non-boot processor is recorded here before | 55 | * The primary thread of each non-boot processor is recorded here before |
| @@ -231,7 +224,7 @@ static void __init smp_init_pseries(void) | |||
| 231 | { | 224 | { |
| 232 | int i; | 225 | int i; |
| 233 | 226 | ||
| 234 | DBG(" -> smp_init_pSeries()\n"); | 227 | pr_debug(" -> smp_init_pSeries()\n"); |
| 235 | 228 | ||
| 236 | /* Mark threads which are still spinning in hold loops. */ | 229 | /* Mark threads which are still spinning in hold loops. */ |
| 237 | if (cpu_has_feature(CPU_FTR_SMT)) { | 230 | if (cpu_has_feature(CPU_FTR_SMT)) { |
| @@ -255,7 +248,7 @@ static void __init smp_init_pseries(void) | |||
| 255 | smp_ops->take_timebase = pSeries_take_timebase; | 248 | smp_ops->take_timebase = pSeries_take_timebase; |
| 256 | } | 249 | } |
| 257 | 250 | ||
| 258 | DBG(" <- smp_init_pSeries()\n"); | 251 | pr_debug(" <- smp_init_pSeries()\n"); |
| 259 | } | 252 | } |
| 260 | 253 | ||
| 261 | #ifdef CONFIG_MPIC | 254 | #ifdef CONFIG_MPIC |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 43df53c30aa0..ebebc28fe895 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #undef DEBUG | ||
| 13 | 12 | ||
| 14 | #include <linux/types.h> | 13 | #include <linux/types.h> |
| 15 | #include <linux/threads.h> | 14 | #include <linux/threads.h> |
diff --git a/arch/powerpc/sysdev/mv64x60_dev.c b/arch/powerpc/sysdev/mv64x60_dev.c index 047b31027fa6..41af1223e2a0 100644 --- a/arch/powerpc/sysdev/mv64x60_dev.c +++ b/arch/powerpc/sysdev/mv64x60_dev.c | |||
| @@ -338,15 +338,13 @@ static int __init mv64x60_i2c_device_setup(struct device_node *np, int id) | |||
| 338 | 338 | ||
| 339 | pdata.freq_m = 8; /* default */ | 339 | pdata.freq_m = 8; /* default */ |
| 340 | prop = of_get_property(np, "freq_m", NULL); | 340 | prop = of_get_property(np, "freq_m", NULL); |
| 341 | if (!prop) | 341 | if (prop) |
| 342 | return -ENODEV; | 342 | pdata.freq_m = *prop; |
| 343 | pdata.freq_m = *prop; | ||
| 344 | 343 | ||
| 345 | pdata.freq_m = 3; /* default */ | 344 | pdata.freq_m = 3; /* default */ |
| 346 | prop = of_get_property(np, "freq_n", NULL); | 345 | prop = of_get_property(np, "freq_n", NULL); |
| 347 | if (!prop) | 346 | if (prop) |
| 348 | return -ENODEV; | 347 | pdata.freq_n = *prop; |
| 349 | pdata.freq_n = *prop; | ||
| 350 | 348 | ||
| 351 | pdata.timeout = 1000; /* default: 1 second */ | 349 | pdata.timeout = 1000; /* default: 1 second */ |
| 352 | 350 | ||
| @@ -433,9 +431,13 @@ static int __init mv64x60_device_setup(void) | |||
| 433 | int err; | 431 | int err; |
| 434 | 432 | ||
| 435 | id = 0; | 433 | id = 0; |
| 436 | for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") | 434 | for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") { |
| 437 | if ((err = mv64x60_mpsc_device_setup(np, id++))) | 435 | err = mv64x60_mpsc_device_setup(np, id++); |
| 438 | goto error; | 436 | if (err) |
| 437 | printk(KERN_ERR "Failed to initialize MV64x60 " | ||
| 438 | "serial device %s: error %d.\n", | ||
| 439 | np->full_name, err); | ||
| 440 | } | ||
| 439 | 441 | ||
| 440 | id = 0; | 442 | id = 0; |
| 441 | id2 = 0; | 443 | id2 = 0; |
| @@ -443,38 +445,44 @@ static int __init mv64x60_device_setup(void) | |||
| 443 | pdev = mv64x60_eth_register_shared_pdev(np, id++); | 445 | pdev = mv64x60_eth_register_shared_pdev(np, id++); |
| 444 | if (IS_ERR(pdev)) { | 446 | if (IS_ERR(pdev)) { |
| 445 | err = PTR_ERR(pdev); | 447 | err = PTR_ERR(pdev); |
| 446 | goto error; | 448 | printk(KERN_ERR "Failed to initialize MV64x60 " |
| 449 | "network block %s: error %d.\n", | ||
| 450 | np->full_name, err); | ||
| 451 | continue; | ||
| 447 | } | 452 | } |
| 448 | for_each_child_of_node(np, np2) { | 453 | for_each_child_of_node(np, np2) { |
| 449 | if (!of_device_is_compatible(np2, | 454 | if (!of_device_is_compatible(np2, |
| 450 | "marvell,mv64360-eth")) | 455 | "marvell,mv64360-eth")) |
| 451 | continue; | 456 | continue; |
| 452 | err = mv64x60_eth_device_setup(np2, id2++, pdev); | 457 | err = mv64x60_eth_device_setup(np2, id2++, pdev); |
| 453 | if (err) { | 458 | if (err) |
| 454 | of_node_put(np2); | 459 | printk(KERN_ERR "Failed to initialize " |
| 455 | goto error; | 460 | "MV64x60 network device %s: " |
| 456 | } | 461 | "error %d.\n", |
| 462 | np2->full_name, err); | ||
| 457 | } | 463 | } |
| 458 | } | 464 | } |
| 459 | 465 | ||
| 460 | id = 0; | 466 | id = 0; |
| 461 | for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c") | 467 | for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c") { |
| 462 | if ((err = mv64x60_i2c_device_setup(np, id++))) | 468 | err = mv64x60_i2c_device_setup(np, id++); |
| 463 | goto error; | 469 | if (err) |
| 470 | printk(KERN_ERR "Failed to initialize MV64x60 I2C " | ||
| 471 | "bus %s: error %d.\n", | ||
| 472 | np->full_name, err); | ||
| 473 | } | ||
| 464 | 474 | ||
| 465 | /* support up to one watchdog timer */ | 475 | /* support up to one watchdog timer */ |
| 466 | np = of_find_compatible_node(np, NULL, "marvell,mv64360-wdt"); | 476 | np = of_find_compatible_node(np, NULL, "marvell,mv64360-wdt"); |
| 467 | if (np) { | 477 | if (np) { |
| 468 | if ((err = mv64x60_wdt_device_setup(np, id))) | 478 | if ((err = mv64x60_wdt_device_setup(np, id))) |
| 469 | goto error; | 479 | printk(KERN_ERR "Failed to initialize MV64x60 " |
| 480 | "Watchdog %s: error %d.\n", | ||
| 481 | np->full_name, err); | ||
| 470 | of_node_put(np); | 482 | of_node_put(np); |
| 471 | } | 483 | } |
| 472 | 484 | ||
| 473 | return 0; | 485 | return 0; |
| 474 | |||
| 475 | error: | ||
| 476 | of_node_put(np); | ||
| 477 | return err; | ||
| 478 | } | 486 | } |
| 479 | arch_initcall(mv64x60_device_setup); | 487 | arch_initcall(mv64x60_device_setup); |
| 480 | 488 | ||
diff --git a/arch/powerpc/sysdev/mv64x60_udbg.c b/arch/powerpc/sysdev/mv64x60_udbg.c index ccdb3b0418fc..2792dc8b038c 100644 --- a/arch/powerpc/sysdev/mv64x60_udbg.c +++ b/arch/powerpc/sysdev/mv64x60_udbg.c | |||
| @@ -94,7 +94,7 @@ static void mv64x60_udbg_init(void) | |||
| 94 | if (!np) | 94 | if (!np) |
| 95 | return; | 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 | if (!block_index) | 98 | if (!block_index) |
| 99 | goto error; | 99 | goto error; |
| 100 | 100 | ||
diff --git a/arch/ppc/8260_io/fcc_enet.c b/arch/ppc/8260_io/fcc_enet.c index bcc3aa9d04f3..d38b57e24cee 100644 --- a/arch/ppc/8260_io/fcc_enet.c +++ b/arch/ppc/8260_io/fcc_enet.c | |||
| @@ -165,9 +165,6 @@ static int fcc_enet_set_mac_address(struct net_device *dev, void *addr); | |||
| 165 | #ifdef CONFIG_SBC82xx | 165 | #ifdef CONFIG_SBC82xx |
| 166 | #define F1_RXCLK 9 | 166 | #define F1_RXCLK 9 |
| 167 | #define F1_TXCLK 10 | 167 | #define F1_TXCLK 10 |
| 168 | #elif defined(CONFIG_ADS8272) | ||
| 169 | #define F1_RXCLK 11 | ||
| 170 | #define F1_TXCLK 10 | ||
| 171 | #else | 168 | #else |
| 172 | #define F1_RXCLK 12 | 169 | #define F1_RXCLK 12 |
| 173 | #define F1_TXCLK 11 | 170 | #define F1_TXCLK 11 |
| @@ -175,13 +172,8 @@ static int fcc_enet_set_mac_address(struct net_device *dev, void *addr); | |||
| 175 | 172 | ||
| 176 | /* FCC2 Clock Source Configuration. There are board specific. | 173 | /* FCC2 Clock Source Configuration. There are board specific. |
| 177 | Can only choose from CLK13-16 */ | 174 | Can only choose from CLK13-16 */ |
| 178 | #ifdef CONFIG_ADS8272 | ||
| 179 | #define F2_RXCLK 15 | ||
| 180 | #define F2_TXCLK 16 | ||
| 181 | #else | ||
| 182 | #define F2_RXCLK 13 | 175 | #define F2_RXCLK 13 |
| 183 | #define F2_TXCLK 14 | 176 | #define F2_TXCLK 14 |
| 184 | #endif | ||
| 185 | 177 | ||
| 186 | /* FCC3 Clock Source Configuration. There are board specific. | 178 | /* FCC3 Clock Source Configuration. There are board specific. |
| 187 | Can only choose from CLK13-16 */ | 179 | Can only choose from CLK13-16 */ |
| @@ -289,10 +281,7 @@ static int fcc_enet_set_mac_address(struct net_device *dev, void *addr); | |||
| 289 | /* TQM8260 has MDIO and MDCK on PC30 and PC31 respectively */ | 281 | /* TQM8260 has MDIO and MDCK on PC30 and PC31 respectively */ |
| 290 | #define PC_MDIO ((uint)0x00000002) | 282 | #define PC_MDIO ((uint)0x00000002) |
| 291 | #define PC_MDCK ((uint)0x00000001) | 283 | #define PC_MDCK ((uint)0x00000001) |
| 292 | #elif defined(CONFIG_ADS8272) | 284 | #elif defined(CONFIG_EST8260) || defined(CONFIG_ADS8260) |
| 293 | #define PC_MDIO ((uint)0x00002000) | ||
| 294 | #define PC_MDCK ((uint)0x00001000) | ||
| 295 | #elif defined(CONFIG_EST8260) || defined(CONFIG_ADS8260) || defined(CONFIG_PQ2FADS) | ||
| 296 | #define PC_MDIO ((uint)0x00400000) | 285 | #define PC_MDIO ((uint)0x00400000) |
| 297 | #define PC_MDCK ((uint)0x00200000) | 286 | #define PC_MDCK ((uint)0x00200000) |
| 298 | #else | 287 | #else |
| @@ -2118,11 +2107,6 @@ init_fcc_startup(fcc_info_t *fip, struct net_device *dev) | |||
| 2118 | printk("Can't get FCC IRQ %d\n", fip->fc_interrupt); | 2107 | printk("Can't get FCC IRQ %d\n", fip->fc_interrupt); |
| 2119 | 2108 | ||
| 2120 | #ifdef PHY_INTERRUPT | 2109 | #ifdef PHY_INTERRUPT |
| 2121 | #ifdef CONFIG_ADS8272 | ||
| 2122 | if (request_irq(PHY_INTERRUPT, mii_link_interrupt, IRQF_SHARED, | ||
| 2123 | "mii", dev) < 0) | ||
| 2124 | printk(KERN_CRIT "Can't get MII IRQ %d\n", PHY_INTERRUPT); | ||
| 2125 | #else | ||
| 2126 | /* Make IRQn edge triggered. This does not work if PHY_INTERRUPT is | 2110 | /* Make IRQn edge triggered. This does not work if PHY_INTERRUPT is |
| 2127 | * on Port C. | 2111 | * on Port C. |
| 2128 | */ | 2112 | */ |
| @@ -2132,7 +2116,6 @@ init_fcc_startup(fcc_info_t *fip, struct net_device *dev) | |||
| 2132 | if (request_irq(PHY_INTERRUPT, mii_link_interrupt, 0, | 2116 | if (request_irq(PHY_INTERRUPT, mii_link_interrupt, 0, |
| 2133 | "mii", dev) < 0) | 2117 | "mii", dev) < 0) |
| 2134 | printk(KERN_CRIT "Can't get MII IRQ %d\n", PHY_INTERRUPT); | 2118 | printk(KERN_CRIT "Can't get MII IRQ %d\n", PHY_INTERRUPT); |
| 2135 | #endif | ||
| 2136 | #endif /* PHY_INTERRUPT */ | 2119 | #endif /* PHY_INTERRUPT */ |
| 2137 | 2120 | ||
| 2138 | /* Set GFMR to enable Ethernet operating mode. | 2121 | /* Set GFMR to enable Ethernet operating mode. |
diff --git a/arch/ppc/8xx_io/enet.c b/arch/ppc/8xx_io/enet.c index c6d047ae77ac..5899aea1644b 100644 --- a/arch/ppc/8xx_io/enet.c +++ b/arch/ppc/8xx_io/enet.c | |||
| @@ -946,29 +946,6 @@ static int __init scc_enet_init(void) | |||
| 946 | *((volatile uint *)BCSR1) &= ~BCSR1_ETHEN; | 946 | *((volatile uint *)BCSR1) &= ~BCSR1_ETHEN; |
| 947 | #endif | 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 | dev->base_addr = (unsigned long)ep; | 949 | dev->base_addr = (unsigned long)ep; |
| 973 | #if 0 | 950 | #if 0 |
| 974 | dev->name = "CPM_ENET"; | 951 | dev->name = "CPM_ENET"; |
diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index abc877faf123..0f1863ed9c1c 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig | |||
| @@ -372,22 +372,6 @@ config MPC8XXFADS | |||
| 372 | bool "FADS" | 372 | bool "FADS" |
| 373 | select FADS | 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 | config TQM823L | 375 | config TQM823L |
| 392 | bool "TQM823L" | 376 | bool "TQM823L" |
| 393 | help | 377 | help |
| @@ -479,53 +463,6 @@ config WINCEPT | |||
| 479 | 463 | ||
| 480 | endchoice | 464 | endchoice |
| 481 | 465 | ||
| 482 | menu "Freescale Ethernet driver platform-specific options" | ||
| 483 | depends on FS_ENET | ||
| 484 | |||
| 485 | config MPC8xx_SECOND_ETH | ||
| 486 | bool "Second Ethernet channel" | ||
| 487 | depends on (MPC885ADS || MPC86XADS) | ||
| 488 | default y | ||
| 489 | help | ||
| 490 | This enables support for second Ethernet on MPC885ADS and MPC86xADS boards. | ||
| 491 | The latter will use SCC1, for 885ADS you can select it below. | ||
| 492 | |||
| 493 | choice | ||
| 494 | prompt "Second Ethernet channel" | ||
| 495 | depends on MPC8xx_SECOND_ETH | ||
| 496 | default MPC8xx_SECOND_ETH_FEC2 | ||
| 497 | |||
| 498 | config MPC8xx_SECOND_ETH_FEC2 | ||
| 499 | bool "FEC2" | ||
| 500 | depends on MPC885ADS | ||
| 501 | help | ||
| 502 | Enable FEC2 to serve as 2-nd Ethernet channel. Note that SMC2 | ||
| 503 | (often 2-nd UART) will not work if this is enabled. | ||
| 504 | |||
| 505 | config MPC8xx_SECOND_ETH_SCC1 | ||
| 506 | bool "SCC1" | ||
| 507 | depends on MPC86XADS | ||
| 508 | select MPC8xx_SCC_ENET_FIXED | ||
| 509 | help | ||
| 510 | Enable SCC1 to serve as 2-nd Ethernet channel. Note that SMC1 | ||
| 511 | (often 1-nd UART) will not work if this is enabled. | ||
| 512 | |||
| 513 | config MPC8xx_SECOND_ETH_SCC3 | ||
| 514 | bool "SCC3" | ||
| 515 | depends on MPC885ADS | ||
| 516 | help | ||
| 517 | Enable SCC3 to serve as 2-nd Ethernet channel. Note that SMC1 | ||
| 518 | (often 1-nd UART) will not work if this is enabled. | ||
| 519 | |||
| 520 | endchoice | ||
| 521 | |||
| 522 | config MPC8xx_SCC_ENET_FIXED | ||
| 523 | depends on MPC8xx_SECOND_ETH_SCC | ||
| 524 | default n | ||
| 525 | bool "Use fixed MII-less mode for SCC Ethernet" | ||
| 526 | |||
| 527 | endmenu | ||
| 528 | |||
| 529 | choice | 466 | choice |
| 530 | prompt "Machine Type" | 467 | prompt "Machine Type" |
| 531 | depends on 6xx | 468 | depends on 6xx |
| @@ -666,9 +603,6 @@ config TQM8260 | |||
| 666 | End of Life: not yet :-) | 603 | End of Life: not yet :-) |
| 667 | URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev005.pdf> | 604 | URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev005.pdf> |
| 668 | 605 | ||
| 669 | config ADS8272 | ||
| 670 | bool "ADS8272" | ||
| 671 | |||
| 672 | config PQ2FADS | 606 | config PQ2FADS |
| 673 | bool "Freescale-PQ2FADS" | 607 | bool "Freescale-PQ2FADS" |
| 674 | help | 608 | help |
| @@ -698,11 +632,6 @@ config EV64360 | |||
| 698 | platform. | 632 | platform. |
| 699 | endchoice | 633 | endchoice |
| 700 | 634 | ||
| 701 | config PQ2ADS | ||
| 702 | bool | ||
| 703 | depends on ADS8272 | ||
| 704 | default y | ||
| 705 | |||
| 706 | config TQM8xxL | 635 | config TQM8xxL |
| 707 | bool | 636 | bool |
| 708 | depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L) | 637 | depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L) |
| @@ -725,15 +654,6 @@ config 8260 | |||
| 725 | this option means that you wish to build a kernel for a machine with | 654 | this option means that you wish to build a kernel for a machine with |
| 726 | an 8260 class CPU. | 655 | an 8260 class CPU. |
| 727 | 656 | ||
| 728 | config 8272 | ||
| 729 | bool | ||
| 730 | depends on 6xx | ||
| 731 | default y if ADS8272 | ||
| 732 | select 8260 | ||
| 733 | help | ||
| 734 | The MPC8272 CPM has a different internal dpram setup than other CPM2 | ||
| 735 | devices | ||
| 736 | |||
| 737 | config CPM1 | 657 | config CPM1 |
| 738 | bool | 658 | bool |
| 739 | depends on 8xx | 659 | depends on 8xx |
| @@ -1069,7 +989,7 @@ config PCI_8260 | |||
| 1069 | 989 | ||
| 1070 | config 8260_PCI9 | 990 | config 8260_PCI9 |
| 1071 | bool "Enable workaround for MPC826x erratum PCI 9" | 991 | bool "Enable workaround for MPC826x erratum PCI 9" |
| 1072 | depends on PCI_8260 && !ADS8272 | 992 | depends on PCI_8260 |
| 1073 | default y | 993 | default y |
| 1074 | 994 | ||
| 1075 | choice | 995 | choice |
diff --git a/arch/ppc/configs/ads8272_defconfig b/arch/ppc/configs/ads8272_defconfig deleted file mode 100644 index 6619f9118b00..000000000000 --- a/arch/ppc/configs/ads8272_defconfig +++ /dev/null | |||
| @@ -1,930 +0,0 @@ | |||
| 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 | # | ||
diff --git a/arch/ppc/configs/mpc86x_ads_defconfig b/arch/ppc/configs/mpc86x_ads_defconfig deleted file mode 100644 index f63c6f59d68a..000000000000 --- a/arch/ppc/configs/mpc86x_ads_defconfig +++ /dev/null | |||
| @@ -1,633 +0,0 @@ | |||
| 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 | # | ||
diff --git a/arch/ppc/configs/mpc885ads_defconfig b/arch/ppc/configs/mpc885ads_defconfig deleted file mode 100644 index 016f94d9325f..000000000000 --- a/arch/ppc/configs/mpc885ads_defconfig +++ /dev/null | |||
| @@ -1,622 +0,0 @@ | |||
| 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 | # | ||
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index 2ba659f401be..d9036ef0b658 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
| @@ -88,6 +88,7 @@ EXPORT_SYMBOL(strncpy); | |||
| 88 | EXPORT_SYMBOL(strcat); | 88 | EXPORT_SYMBOL(strcat); |
| 89 | EXPORT_SYMBOL(strlen); | 89 | EXPORT_SYMBOL(strlen); |
| 90 | EXPORT_SYMBOL(strcmp); | 90 | EXPORT_SYMBOL(strcmp); |
| 91 | EXPORT_SYMBOL(strncmp); | ||
| 91 | 92 | ||
| 92 | EXPORT_SYMBOL(csum_partial); | 93 | EXPORT_SYMBOL(csum_partial); |
| 93 | EXPORT_SYMBOL(csum_partial_copy_generic); | 94 | EXPORT_SYMBOL(csum_partial_copy_generic); |
diff --git a/arch/ppc/lib/string.S b/arch/ppc/lib/string.S index 84ed33ab4c2d..927253bfc826 100644 --- a/arch/ppc/lib/string.S +++ b/arch/ppc/lib/string.S | |||
| @@ -121,6 +121,20 @@ _GLOBAL(strcmp) | |||
| 121 | beq 1b | 121 | beq 1b |
| 122 | blr | 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 | _GLOBAL(strlen) | 138 | _GLOBAL(strlen) |
| 125 | addi r4,r3,-1 | 139 | addi r4,r3,-1 |
| 126 | 1: lbzu r0,1(r4) | 140 | 1: lbzu r0,1(r4) |
diff --git a/arch/ppc/platforms/Makefile b/arch/ppc/platforms/Makefile index 40f53fbe6d35..6260231987cb 100644 --- a/arch/ppc/platforms/Makefile +++ b/arch/ppc/platforms/Makefile | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | obj-$(CONFIG_PPC_PREP) += prep_pci.o prep_setup.o | 5 | obj-$(CONFIG_PPC_PREP) += prep_pci.o prep_setup.o |
| 6 | obj-$(CONFIG_PREP_RESIDUAL) += residual.o | 6 | obj-$(CONFIG_PREP_RESIDUAL) += residual.o |
| 7 | obj-$(CONFIG_PQ2ADS) += pq2ads.o | ||
| 8 | obj-$(CONFIG_TQM8260) += tqm8260_setup.o | 7 | obj-$(CONFIG_TQM8260) += tqm8260_setup.o |
| 9 | obj-$(CONFIG_CPCI690) += cpci690.o | 8 | obj-$(CONFIG_CPCI690) += cpci690.o |
| 10 | obj-$(CONFIG_EV64260) += ev64260.o | 9 | obj-$(CONFIG_EV64260) += ev64260.o |
| @@ -24,6 +23,3 @@ obj-$(CONFIG_SBC82xx) += sbc82xx.o | |||
| 24 | obj-$(CONFIG_SPRUCE) += spruce.o | 23 | obj-$(CONFIG_SPRUCE) += spruce.o |
| 25 | obj-$(CONFIG_LITE5200) += lite5200.o | 24 | obj-$(CONFIG_LITE5200) += lite5200.o |
| 26 | obj-$(CONFIG_EV64360) += ev64360.o | 25 | obj-$(CONFIG_EV64360) += ev64360.o |
| 27 | obj-$(CONFIG_MPC86XADS) += mpc866ads_setup.o | ||
| 28 | obj-$(CONFIG_MPC885ADS) += mpc885ads_setup.o | ||
| 29 | obj-$(CONFIG_ADS8272) += mpc8272ads_setup.o | ||
diff --git a/arch/ppc/platforms/fads.h b/arch/ppc/platforms/fads.h index 2f9f0f60e3f7..5219366667b3 100644 --- a/arch/ppc/platforms/fads.h +++ b/arch/ppc/platforms/fads.h | |||
| @@ -22,29 +22,6 @@ | |||
| 22 | 22 | ||
| 23 | #include <asm/ppcboot.h> | 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 | /* Memory map is configured by the PROM startup. | 25 | /* Memory map is configured by the PROM startup. |
| 49 | * I tried to follow the FADS manual, although the startup PROM | 26 | * I tried to follow the FADS manual, although the startup PROM |
| 50 | * dictates this and we simply have to move some of the physical | 27 | * dictates this and we simply have to move some of the physical |
| @@ -55,8 +32,6 @@ | |||
| 55 | /* PHY link change interrupt */ | 32 | /* PHY link change interrupt */ |
| 56 | #define PHY_INTERRUPT SIU_IRQ2 | 33 | #define PHY_INTERRUPT SIU_IRQ2 |
| 57 | 34 | ||
| 58 | #endif /* CONFIG_MPC86XADS */ | ||
| 59 | |||
| 60 | #define BCSR_SIZE ((uint)(64 * 1024)) | 35 | #define BCSR_SIZE ((uint)(64 * 1024)) |
| 61 | #define BCSR0 ((uint)(BCSR_ADDR + 0x00)) | 36 | #define BCSR0 ((uint)(BCSR_ADDR + 0x00)) |
| 62 | #define BCSR1 ((uint)(BCSR_ADDR + 0x04)) | 37 | #define BCSR1 ((uint)(BCSR_ADDR + 0x04)) |
diff --git a/arch/ppc/platforms/mpc8272ads_setup.c b/arch/ppc/platforms/mpc8272ads_setup.c deleted file mode 100644 index 47f4b38edb5f..000000000000 --- a/arch/ppc/platforms/mpc8272ads_setup.c +++ /dev/null | |||
| @@ -1,367 +0,0 @@ | |||
| 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); | ||
diff --git a/arch/ppc/platforms/mpc885ads.h b/arch/ppc/platforms/mpc885ads.h deleted file mode 100644 index d3bbbb3c9a1f..000000000000 --- a/arch/ppc/platforms/mpc885ads.h +++ /dev/null | |||
| @@ -1,93 +0,0 @@ | |||
| 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__ */ | ||
diff --git a/arch/ppc/platforms/mpc885ads_setup.c b/arch/ppc/platforms/mpc885ads_setup.c deleted file mode 100644 index ba06cc08cdab..000000000000 --- a/arch/ppc/platforms/mpc885ads_setup.c +++ /dev/null | |||
| @@ -1,476 +0,0 @@ | |||
| 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 | |||
diff --git a/arch/ppc/platforms/pq2ads.c b/arch/ppc/platforms/pq2ads.c deleted file mode 100644 index 7fc2e02f5246..000000000000 --- a/arch/ppc/platforms/pq2ads.c +++ /dev/null | |||
| @@ -1,53 +0,0 @@ | |||
| 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 | } | ||
diff --git a/arch/ppc/platforms/pq2ads.h b/arch/ppc/platforms/pq2ads.h deleted file mode 100644 index 2b287f4e0ca3..000000000000 --- a/arch/ppc/platforms/pq2ads.h +++ /dev/null | |||
| @@ -1,94 +0,0 @@ | |||
| 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__ */ | ||
diff --git a/arch/ppc/platforms/pq2ads_pd.h b/arch/ppc/platforms/pq2ads_pd.h deleted file mode 100644 index 672483df8079..000000000000 --- a/arch/ppc/platforms/pq2ads_pd.h +++ /dev/null | |||
| @@ -1,32 +0,0 @@ | |||
| 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 | ||
diff --git a/arch/ppc/syslib/m8260_setup.c b/arch/ppc/syslib/m8260_setup.c index 46588fa94381..b40583724de3 100644 --- a/arch/ppc/syslib/m8260_setup.c +++ b/arch/ppc/syslib/m8260_setup.c | |||
| @@ -175,12 +175,6 @@ m8260_init_IRQ(void) | |||
| 175 | * in case the boot rom changed something on us. | 175 | * in case the boot rom changed something on us. |
| 176 | */ | 176 | */ |
| 177 | cpm2_immr->im_intctl.ic_siprr = 0x05309770; | 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 | /* |
diff --git a/arch/ppc/syslib/m82xx_pci.c b/arch/ppc/syslib/m82xx_pci.c index fe860d52e2e4..657a1c25a2ab 100644 --- a/arch/ppc/syslib/m82xx_pci.c +++ b/arch/ppc/syslib/m82xx_pci.c | |||
| @@ -150,14 +150,6 @@ pq2pci_init_irq(void) | |||
| 150 | { | 150 | { |
| 151 | int irq; | 151 | int irq; |
| 152 | volatile cpm2_map_t *immap = cpm2_immr; | 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 | for (irq = NR_CPM_INTS; irq < NR_CPM_INTS + 4; irq++) | 153 | for (irq = NR_CPM_INTS; irq < NR_CPM_INTS + 4; irq++) |
| 162 | irq_desc[irq].chip = &pq2pci_ic; | 154 | irq_desc[irq].chip = &pq2pci_ic; |
| 163 | 155 | ||
| @@ -222,26 +214,6 @@ pq2ads_setup_pci(struct pci_controller *hose) | |||
| 222 | immap->im_memctl.memc_pcibr1 = M82xx_PCI_SEC_WND_BASE | PCIBR_ENABLE; | 214 | immap->im_memctl.memc_pcibr1 = M82xx_PCI_SEC_WND_BASE | PCIBR_ENABLE; |
| 223 | #endif | 215 | #endif |
| 224 | 216 | ||
| 225 | #if defined CONFIG_ADS8272 | ||
| 226 | immap->im_siu_conf.siu_82xx.sc_siumcr = | ||
| 227 | (immap->im_siu_conf.siu_82xx.sc_siumcr & | ||
| 228 | ~(SIUMCR_BBD | SIUMCR_ESE | SIUMCR_PBSE | | ||
| 229 | SIUMCR_CDIS | SIUMCR_DPPC11 | SIUMCR_L2CPC11 | | ||
| 230 | SIUMCR_LBPC11 | SIUMCR_APPC11 | | ||
| 231 | SIUMCR_CS10PC11 | SIUMCR_BCTLC11 | SIUMCR_MMR11)) | | ||
| 232 | SIUMCR_DPPC11 | SIUMCR_L2CPC01 | SIUMCR_LBPC00 | | ||
| 233 | SIUMCR_APPC10 | SIUMCR_CS10PC00 | | ||
| 234 | SIUMCR_BCTLC00 | SIUMCR_MMR11 ; | ||
| 235 | |||
| 236 | #elif defined CONFIG_PQ2FADS | ||
| 237 | /* | ||
| 238 | * Setting required to enable IRQ1-IRQ7 (SIUMCR [DPPC]), | ||
| 239 | * and local bus for PCI (SIUMCR [LBPC]). | ||
| 240 | */ | ||
| 241 | immap->im_siu_conf.siu_82xx.sc_siumcr = (immap->im_siu_conf.siu_82xx.sc_siumcr & | ||
| 242 | ~(SIUMCR_L2CPC11 | SIUMCR_LBPC11 | SIUMCR_CS10PC11 | SIUMCR_APPC11) | | ||
| 243 | SIUMCR_BBD | SIUMCR_LBPC01 | SIUMCR_DPPC11 | SIUMCR_APPC10); | ||
| 244 | #endif | ||
| 245 | /* Enable PCI */ | 217 | /* Enable PCI */ |
| 246 | immap->im_pci.pci_gcr = cpu_to_le32(PCIGCR_PCI_BUS_EN); | 218 | immap->im_pci.pci_gcr = cpu_to_le32(PCIGCR_PCI_BUS_EN); |
| 247 | 219 | ||
| @@ -284,12 +256,6 @@ pq2ads_setup_pci(struct pci_controller *hose) | |||
| 284 | immap->im_pci.pci_pibar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_BUS >> PITA_ADDR_SHIFT); | 256 | immap->im_pci.pci_pibar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_BUS >> PITA_ADDR_SHIFT); |
| 285 | immap->im_pci.pci_pitar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_LOCAL>> PITA_ADDR_SHIFT); | 257 | immap->im_pci.pci_pitar0 = cpu_to_le32(M82xx_PCI_SLAVE_MEM_LOCAL>> PITA_ADDR_SHIFT); |
| 286 | 258 | ||
| 287 | #if defined CONFIG_ADS8272 | ||
| 288 | /* PCI int highest prio */ | ||
| 289 | immap->im_siu_conf.siu_82xx.sc_ppc_alrh = 0x01236745; | ||
| 290 | #elif defined CONFIG_PQ2FADS | ||
| 291 | immap->im_siu_conf.siu_82xx.sc_ppc_alrh = 0x03124567; | ||
| 292 | #endif | ||
| 293 | /* park bus on PCI */ | 259 | /* park bus on PCI */ |
| 294 | immap->im_siu_conf.siu_82xx.sc_ppc_acr = PPC_ACR_BUS_PARK_PCI; | 260 | immap->im_siu_conf.siu_82xx.sc_ppc_acr = PPC_ACR_BUS_PARK_PCI; |
| 295 | 261 | ||
| @@ -320,10 +286,6 @@ void __init pq2_find_bridges(void) | |||
| 320 | hose->bus_offset = 0; | 286 | hose->bus_offset = 0; |
| 321 | hose->last_busno = 0xff; | 287 | hose->last_busno = 0xff; |
| 322 | 288 | ||
| 323 | #ifdef CONFIG_ADS8272 | ||
| 324 | hose->set_cfg_type = 1; | ||
| 325 | #endif | ||
| 326 | |||
| 327 | setup_m8260_indirect_pci(hose, | 289 | setup_m8260_indirect_pci(hose, |
| 328 | (unsigned long)&cpm2_immr->im_pci.pci_cfg_addr, | 290 | (unsigned long)&cpm2_immr->im_pci.pci_cfg_addr, |
| 329 | (unsigned long)&cpm2_immr->im_pci.pci_cfg_data); | 291 | (unsigned long)&cpm2_immr->im_pci.pci_cfg_data); |
diff --git a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c index 19749e9bcf91..18da720fc1b0 100644 --- a/arch/ppc/syslib/m8xx_setup.c +++ b/arch/ppc/syslib/m8xx_setup.c | |||
| @@ -141,16 +141,6 @@ m8xx_setup_arch(void) | |||
| 141 | #endif | 141 | #endif |
| 142 | #endif | 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 | board_init(); | 144 | board_init(); |
| 155 | } | 145 | } |
| 156 | 146 | ||
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c index 016f90567a52..dfe6907ae15b 100644 --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c | |||
| @@ -803,7 +803,7 @@ static int __devexit hwicap_of_remove(struct of_device *op) | |||
| 803 | } | 803 | } |
| 804 | 804 | ||
| 805 | /* Match table for of_platform binding */ | 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 | { .compatible = "xlnx,opb-hwicap-1.00.b", .data = &buffer_icap_config}, | 807 | { .compatible = "xlnx,opb-hwicap-1.00.b", .data = &buffer_icap_config}, |
| 808 | { .compatible = "xlnx,xps-hwicap-1.00.a", .data = &fifo_icap_config}, | 808 | { .compatible = "xlnx,xps-hwicap-1.00.a", .data = &fifo_icap_config}, |
| 809 | {}, | 809 | {}, |
diff --git a/drivers/macintosh/windfarm_pm112.c b/drivers/macintosh/windfarm_pm112.c index b3fbb45bc90a..73d695dc9e50 100644 --- a/drivers/macintosh/windfarm_pm112.c +++ b/drivers/macintosh/windfarm_pm112.c | |||
| @@ -668,7 +668,7 @@ static struct platform_driver wf_pm112_driver = { | |||
| 668 | .remove = __devexit_p(wf_pm112_remove), | 668 | .remove = __devexit_p(wf_pm112_remove), |
| 669 | .driver = { | 669 | .driver = { |
| 670 | .name = "windfarm", | 670 | .name = "windfarm", |
| 671 | .bus = &platform_bus_type, | 671 | .owner = THIS_MODULE, |
| 672 | }, | 672 | }, |
| 673 | }; | 673 | }; |
| 674 | 674 | ||
| @@ -711,3 +711,4 @@ module_exit(wf_pm112_exit); | |||
| 711 | MODULE_AUTHOR("Paul Mackerras <paulus@samba.org>"); | 711 | MODULE_AUTHOR("Paul Mackerras <paulus@samba.org>"); |
| 712 | MODULE_DESCRIPTION("Thermal control for PowerMac11,2"); | 712 | MODULE_DESCRIPTION("Thermal control for PowerMac11,2"); |
| 713 | MODULE_LICENSE("GPL"); | 713 | MODULE_LICENSE("GPL"); |
| 714 | MODULE_ALIAS("platform:windfarm"); | ||
diff --git a/drivers/macintosh/windfarm_pm81.c b/drivers/macintosh/windfarm_pm81.c index f24fa734046a..abbe206474f5 100644 --- a/drivers/macintosh/windfarm_pm81.c +++ b/drivers/macintosh/windfarm_pm81.c | |||
| @@ -770,7 +770,7 @@ static struct platform_driver wf_smu_driver = { | |||
| 770 | .remove = __devexit_p(wf_smu_remove), | 770 | .remove = __devexit_p(wf_smu_remove), |
| 771 | .driver = { | 771 | .driver = { |
| 772 | .name = "windfarm", | 772 | .name = "windfarm", |
| 773 | .bus = &platform_bus_type, | 773 | .owner = THIS_MODULE, |
| 774 | }, | 774 | }, |
| 775 | }; | 775 | }; |
| 776 | 776 | ||
| @@ -810,4 +810,4 @@ module_exit(wf_smu_exit); | |||
| 810 | MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>"); | 810 | MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>"); |
| 811 | MODULE_DESCRIPTION("Thermal control logic for iMac G5"); | 811 | MODULE_DESCRIPTION("Thermal control logic for iMac G5"); |
| 812 | MODULE_LICENSE("GPL"); | 812 | MODULE_LICENSE("GPL"); |
| 813 | 813 | MODULE_ALIAS("platform:windfarm"); | |
diff --git a/drivers/macintosh/windfarm_pm91.c b/drivers/macintosh/windfarm_pm91.c index 26eee69ebe6d..764c525b2117 100644 --- a/drivers/macintosh/windfarm_pm91.c +++ b/drivers/macintosh/windfarm_pm91.c | |||
| @@ -702,7 +702,7 @@ static struct platform_driver wf_smu_driver = { | |||
| 702 | .remove = __devexit_p(wf_smu_remove), | 702 | .remove = __devexit_p(wf_smu_remove), |
| 703 | .driver = { | 703 | .driver = { |
| 704 | .name = "windfarm", | 704 | .name = "windfarm", |
| 705 | .bus = &platform_bus_type, | 705 | .owner = THIS_MODULE, |
| 706 | }, | 706 | }, |
| 707 | }; | 707 | }; |
| 708 | 708 | ||
| @@ -742,3 +742,4 @@ MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>"); | |||
| 742 | MODULE_DESCRIPTION("Thermal control logic for PowerMac9,1"); | 742 | MODULE_DESCRIPTION("Thermal control logic for PowerMac9,1"); |
| 743 | MODULE_LICENSE("GPL"); | 743 | MODULE_LICENSE("GPL"); |
| 744 | 744 | ||
| 745 | MODULE_ALIAS("platform:windfarm"); | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 015e16325973..0697aa8ea774 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -2278,6 +2278,7 @@ config TSI108_ETH | |||
| 2278 | config GELIC_NET | 2278 | config GELIC_NET |
| 2279 | tristate "PS3 Gigabit Ethernet driver" | 2279 | tristate "PS3 Gigabit Ethernet driver" |
| 2280 | depends on PPC_PS3 | 2280 | depends on PPC_PS3 |
| 2281 | select PS3_SYS_MANAGER | ||
| 2281 | help | 2282 | help |
| 2282 | This driver supports the network device on the PS3 game | 2283 | This driver supports the network device on the PS3 game |
| 2283 | console. This driver has built-in support for Ethernet. | 2284 | console. This driver has built-in support for Ethernet. |
diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c index 631689171159..715a44471617 100644 --- a/drivers/of/of_i2c.c +++ b/drivers/of/of_i2c.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/i2c.h> | 14 | #include <linux/i2c.h> |
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/module.h> | ||
| 16 | 17 | ||
| 17 | struct i2c_driver_device { | 18 | struct i2c_driver_device { |
| 18 | char *of_device; | 19 | char *of_device; |
| @@ -113,3 +114,5 @@ void of_register_i2c_devices(struct i2c_adapter *adap, | |||
| 113 | } | 114 | } |
| 114 | } | 115 | } |
| 115 | EXPORT_SYMBOL(of_register_i2c_devices); | 116 | EXPORT_SYMBOL(of_register_i2c_devices); |
| 117 | |||
| 118 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/serial/of_serial.c b/drivers/serial/of_serial.c index 8aacfb78deab..25029c7570b6 100644 --- a/drivers/serial/of_serial.c +++ b/drivers/serial/of_serial.c | |||
| @@ -31,7 +31,8 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev, | |||
| 31 | struct resource resource; | 31 | struct resource resource; |
| 32 | struct device_node *np = ofdev->node; | 32 | struct device_node *np = ofdev->node; |
| 33 | const unsigned int *clk, *spd; | 33 | const unsigned int *clk, *spd; |
| 34 | int ret; | 34 | const u32 *prop; |
| 35 | int ret, prop_size; | ||
| 35 | 36 | ||
| 36 | memset(port, 0, sizeof *port); | 37 | memset(port, 0, sizeof *port); |
| 37 | spd = of_get_property(np, "current-speed", NULL); | 38 | spd = of_get_property(np, "current-speed", NULL); |
| @@ -49,6 +50,17 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev, | |||
| 49 | 50 | ||
| 50 | spin_lock_init(&port->lock); | 51 | spin_lock_init(&port->lock); |
| 51 | port->mapbase = resource.start; | 52 | port->mapbase = resource.start; |
| 53 | |||
| 54 | /* Check for shifted address mapping */ | ||
| 55 | prop = of_get_property(np, "reg-offset", &prop_size); | ||
| 56 | if (prop && (prop_size == sizeof(u32))) | ||
| 57 | port->mapbase += *prop; | ||
| 58 | |||
| 59 | /* Check for registers offset within the devices address range */ | ||
| 60 | prop = of_get_property(np, "reg-shift", &prop_size); | ||
| 61 | if (prop && (prop_size == sizeof(u32))) | ||
| 62 | port->regshift = *prop; | ||
| 63 | |||
| 52 | port->irq = irq_of_parse_and_map(np, 0); | 64 | port->irq = irq_of_parse_and_map(np, 0); |
| 53 | port->iotype = UPIO_MEM; | 65 | port->iotype = UPIO_MEM; |
| 54 | port->type = type; | 66 | port->type = type; |
diff --git a/include/asm-powerpc/fixmap.h b/include/asm-powerpc/fixmap.h new file mode 100644 index 000000000000..8428b38a3d30 --- /dev/null +++ b/include/asm-powerpc/fixmap.h | |||
| @@ -0,0 +1,106 @@ | |||
| 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 | ||
diff --git a/include/asm-powerpc/highmem.h b/include/asm-powerpc/highmem.h index f7b21ee302b4..5d99b6489d56 100644 --- a/include/asm-powerpc/highmem.h +++ b/include/asm-powerpc/highmem.h | |||
| @@ -27,9 +27,7 @@ | |||
| 27 | #include <asm/kmap_types.h> | 27 | #include <asm/kmap_types.h> |
| 28 | #include <asm/tlbflush.h> | 28 | #include <asm/tlbflush.h> |
| 29 | #include <asm/page.h> | 29 | #include <asm/page.h> |
| 30 | 30 | #include <asm/fixmap.h> | |
| 31 | /* undef for production */ | ||
| 32 | #define HIGHMEM_DEBUG 1 | ||
| 33 | 31 | ||
| 34 | extern pte_t *kmap_pte; | 32 | extern pte_t *kmap_pte; |
| 35 | extern pgprot_t kmap_prot; | 33 | extern pgprot_t kmap_prot; |
| @@ -40,14 +38,12 @@ extern pte_t *pkmap_page_table; | |||
| 40 | * easily, subsequent pte tables have to be allocated in one physical | 38 | * easily, subsequent pte tables have to be allocated in one physical |
| 41 | * chunk of RAM. | 39 | * chunk of RAM. |
| 42 | */ | 40 | */ |
| 43 | #define PKMAP_BASE CONFIG_HIGHMEM_START | ||
| 44 | #define LAST_PKMAP (1 << PTE_SHIFT) | 41 | #define LAST_PKMAP (1 << PTE_SHIFT) |
| 45 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) | 42 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) |
| 43 | #define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE*(LAST_PKMAP + 1)) & PMD_MASK) | ||
| 46 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) | 44 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) |
| 47 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) | 45 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) |
| 48 | 46 | ||
| 49 | #define KMAP_FIX_BEGIN (PKMAP_BASE + 0x00400000UL) | ||
| 50 | |||
| 51 | extern void *kmap_high(struct page *page); | 47 | extern void *kmap_high(struct page *page); |
| 52 | extern void kunmap_high(struct page *page); | 48 | extern void kunmap_high(struct page *page); |
| 53 | 49 | ||
| @@ -73,7 +69,7 @@ static inline void kunmap(struct page *page) | |||
| 73 | * be used in IRQ contexts, so in some (very limited) cases we need | 69 | * be used in IRQ contexts, so in some (very limited) cases we need |
| 74 | * it. | 70 | * it. |
| 75 | */ | 71 | */ |
| 76 | static inline void *kmap_atomic(struct page *page, enum km_type type) | 72 | static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) |
| 77 | { | 73 | { |
| 78 | unsigned int idx; | 74 | unsigned int idx; |
| 79 | unsigned long vaddr; | 75 | unsigned long vaddr; |
| @@ -84,34 +80,39 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
| 84 | return page_address(page); | 80 | return page_address(page); |
| 85 | 81 | ||
| 86 | idx = type + KM_TYPE_NR*smp_processor_id(); | 82 | idx = type + KM_TYPE_NR*smp_processor_id(); |
| 87 | vaddr = KMAP_FIX_BEGIN + idx * PAGE_SIZE; | 83 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); |
| 88 | #ifdef HIGHMEM_DEBUG | 84 | #ifdef CONFIG_DEBUG_HIGHMEM |
| 89 | BUG_ON(!pte_none(*(kmap_pte+idx))); | 85 | BUG_ON(!pte_none(*(kmap_pte-idx))); |
| 90 | #endif | 86 | #endif |
| 91 | set_pte_at(&init_mm, vaddr, kmap_pte+idx, mk_pte(page, kmap_prot)); | 87 | set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot)); |
| 92 | flush_tlb_page(NULL, vaddr); | 88 | flush_tlb_page(NULL, vaddr); |
| 93 | 89 | ||
| 94 | return (void*) vaddr; | 90 | return (void*) vaddr; |
| 95 | } | 91 | } |
| 96 | 92 | ||
| 93 | static inline void *kmap_atomic(struct page *page, enum km_type type) | ||
| 94 | { | ||
| 95 | return kmap_atomic_prot(page, type, kmap_prot); | ||
| 96 | } | ||
| 97 | |||
| 97 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | 98 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) |
| 98 | { | 99 | { |
| 99 | #ifdef HIGHMEM_DEBUG | 100 | #ifdef CONFIG_DEBUG_HIGHMEM |
| 100 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | 101 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; |
| 101 | unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); | 102 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); |
| 102 | 103 | ||
| 103 | if (vaddr < KMAP_FIX_BEGIN) { // FIXME | 104 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { |
| 104 | pagefault_enable(); | 105 | pagefault_enable(); |
| 105 | return; | 106 | return; |
| 106 | } | 107 | } |
| 107 | 108 | ||
| 108 | BUG_ON(vaddr != KMAP_FIX_BEGIN + idx * PAGE_SIZE); | 109 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); |
| 109 | 110 | ||
| 110 | /* | 111 | /* |
| 111 | * force other mappings to Oops if they'll try to access | 112 | * force other mappings to Oops if they'll try to access |
| 112 | * this pte without first remap it | 113 | * this pte without first remap it |
| 113 | */ | 114 | */ |
| 114 | pte_clear(&init_mm, vaddr, kmap_pte+idx); | 115 | pte_clear(&init_mm, vaddr, kmap_pte-idx); |
| 115 | flush_tlb_page(NULL, vaddr); | 116 | flush_tlb_page(NULL, vaddr); |
| 116 | #endif | 117 | #endif |
| 117 | pagefault_enable(); | 118 | pagefault_enable(); |
| @@ -120,12 +121,14 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
| 120 | static inline struct page *kmap_atomic_to_page(void *ptr) | 121 | static inline struct page *kmap_atomic_to_page(void *ptr) |
| 121 | { | 122 | { |
| 122 | unsigned long idx, vaddr = (unsigned long) ptr; | 123 | unsigned long idx, vaddr = (unsigned long) ptr; |
| 124 | pte_t *pte; | ||
| 123 | 125 | ||
| 124 | if (vaddr < KMAP_FIX_BEGIN) | 126 | if (vaddr < FIXADDR_START) |
| 125 | return virt_to_page(ptr); | 127 | return virt_to_page(ptr); |
| 126 | 128 | ||
| 127 | idx = (vaddr - KMAP_FIX_BEGIN) >> PAGE_SHIFT; | 129 | idx = virt_to_fix(vaddr); |
| 128 | return pte_page(kmap_pte[idx]); | 130 | pte = kmap_pte - (idx - FIX_KMAP_BEGIN); |
| 131 | return pte_page(*pte); | ||
| 129 | } | 132 | } |
| 130 | 133 | ||
| 131 | #define flush_cache_kmaps() flush_cache_all() | 134 | #define flush_cache_kmaps() flush_cache_all() |
diff --git a/include/asm-powerpc/io-defs.h b/include/asm-powerpc/io-defs.h index 03691ab69217..44d7927aec69 100644 --- a/include/asm-powerpc/io-defs.h +++ b/include/asm-powerpc/io-defs.h | |||
| @@ -1,59 +1,60 @@ | |||
| 1 | /* This file is meant to be include multiple times by other headers */ | 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(readb, u8, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 4 | DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr)) | 5 | DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 5 | DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr)) | 6 | DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 6 | DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr)) | 7 | DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 7 | DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr)) | 8 | DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 8 | DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr)) | 9 | DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 9 | DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr)) | 10 | DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 10 | DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr)) | 11 | DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 11 | DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr)) | 12 | DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 12 | DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr)) | 13 | DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 13 | 14 | ||
| 14 | #ifdef __powerpc64__ | 15 | #ifdef __powerpc64__ |
| 15 | DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr)) | 16 | DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 16 | DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr)) | 17 | DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) |
| 17 | DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr)) | 18 | DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 18 | DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr)) | 19 | DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
| 19 | #endif /* __powerpc64__ */ | 20 | #endif /* __powerpc64__ */ |
| 20 | 21 | ||
| 21 | DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port)) | 22 | DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port), pio, port) |
| 22 | DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port)) | 23 | DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port), pio, port) |
| 23 | DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port)) | 24 | DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port), pio, port) |
| 24 | DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port)) | 25 | DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port), pio, port) |
| 25 | DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port)) | 26 | DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port), pio, port) |
| 26 | DEF_PCI_AC_NORET(outl, (u32 val, unsigned long port), (val, 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 | DEF_PCI_AC_NORET(readsb, (const PCI_IO_ADDR a, void *b, unsigned long c), |
| 29 | (a, b, c)) | 30 | (a, b, c), mem, a) |
| 30 | DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), \ | 31 | DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), |
| 31 | (a, b, c)) | 32 | (a, b, c), mem, a) |
| 32 | DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), \ | 33 | DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), |
| 33 | (a, b, c)) | 34 | (a, b, c), mem, a) |
| 34 | DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 35 | DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), |
| 35 | (a, b, c)) | 36 | (a, b, c), mem, a) |
| 36 | DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 37 | DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), |
| 37 | (a, b, c)) | 38 | (a, b, c), mem, a) |
| 38 | DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 39 | DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), |
| 39 | (a, b, c)) | 40 | (a, b, c), mem, a) |
| 40 | 41 | ||
| 41 | DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), \ | 42 | DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), |
| 42 | (p, b, c)) | 43 | (p, b, c), pio, p) |
| 43 | DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), \ | 44 | DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), |
| 44 | (p, b, c)) | 45 | (p, b, c), pio, p) |
| 45 | DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), \ | 46 | DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), |
| 46 | (p, b, c)) | 47 | (p, b, c), pio, p) |
| 47 | DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), \ | 48 | DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), |
| 48 | (p, b, c)) | 49 | (p, b, c), pio, p) |
| 49 | DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), \ | 50 | DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), |
| 50 | (p, b, c)) | 51 | (p, b, c), pio, p) |
| 51 | DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), \ | 52 | DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), |
| 52 | (p, b, 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 | DEF_PCI_AC_NORET(memset_io, (PCI_IO_ADDR a, int c, unsigned long n), |
| 55 | (a, c, n)) | 56 | (a, c, n), mem, a) |
| 56 | DEF_PCI_AC_NORET(memcpy_fromio,(void *d,const PCI_IO_ADDR s,unsigned long n), \ | 57 | DEF_PCI_AC_NORET(memcpy_fromio, (void *d, const PCI_IO_ADDR s, unsigned long n), |
| 57 | (d, s, n)) | 58 | (d, s, n), mem, s) |
| 58 | DEF_PCI_AC_NORET(memcpy_toio,(PCI_IO_ADDR d,const void *s,unsigned long n), \ | 59 | DEF_PCI_AC_NORET(memcpy_toio, (PCI_IO_ADDR d, const void *s, unsigned long n), |
| 59 | (d, s, n)) | 60 | (d, s, n), mem, d) |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 7be26f615755..afae0697e8ce 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
| @@ -458,8 +458,8 @@ __do_out_asm(_rec_outl, "stwbrx") | |||
| 458 | /* Structure containing all the hooks */ | 458 | /* Structure containing all the hooks */ |
| 459 | extern struct ppc_pci_io { | 459 | extern struct ppc_pci_io { |
| 460 | 460 | ||
| 461 | #define DEF_PCI_AC_RET(name, ret, at, al) ret (*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) void (*name) at; | 462 | #define DEF_PCI_AC_NORET(name, at, al, space, aa) void (*name) at; |
| 463 | 463 | ||
| 464 | #include <asm/io-defs.h> | 464 | #include <asm/io-defs.h> |
| 465 | 465 | ||
| @@ -469,7 +469,7 @@ extern struct ppc_pci_io { | |||
| 469 | } ppc_pci_io; | 469 | } ppc_pci_io; |
| 470 | 470 | ||
| 471 | /* The inline wrappers */ | 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 | static inline ret name at \ | 473 | static inline ret name at \ |
| 474 | { \ | 474 | { \ |
| 475 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ | 475 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ |
| @@ -477,7 +477,7 @@ static inline ret name at \ | |||
| 477 | return __do_##name al; \ | 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 | static inline void name at \ | 481 | static inline void name at \ |
| 482 | { \ | 482 | { \ |
| 483 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ | 483 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ |
diff --git a/include/asm-powerpc/kdump.h b/include/asm-powerpc/kdump.h index 10e8eb1e6f4f..f6c93c716898 100644 --- a/include/asm-powerpc/kdump.h +++ b/include/asm-powerpc/kdump.h | |||
| @@ -11,16 +11,11 @@ | |||
| 11 | 11 | ||
| 12 | #ifdef CONFIG_CRASH_DUMP | 12 | #ifdef CONFIG_CRASH_DUMP |
| 13 | 13 | ||
| 14 | #define PHYSICAL_START KDUMP_KERNELBASE | ||
| 15 | #define KDUMP_TRAMPOLINE_START 0x0100 | 14 | #define KDUMP_TRAMPOLINE_START 0x0100 |
| 16 | #define KDUMP_TRAMPOLINE_END 0x3000 | 15 | #define KDUMP_TRAMPOLINE_END 0x3000 |
| 17 | 16 | ||
| 18 | #define KDUMP_MIN_TCE_ENTRIES 2048 | 17 | #define KDUMP_MIN_TCE_ENTRIES 2048 |
| 19 | 18 | ||
| 20 | #else /* !CONFIG_CRASH_DUMP */ | ||
| 21 | |||
| 22 | #define PHYSICAL_START 0x0 | ||
| 23 | |||
| 24 | #endif /* CONFIG_CRASH_DUMP */ | 19 | #endif /* CONFIG_CRASH_DUMP */ |
| 25 | 20 | ||
| 26 | #ifndef __ASSEMBLY__ | 21 | #ifndef __ASSEMBLY__ |
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index eb61b9c1edfd..7b564444ff61 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h | |||
| @@ -108,6 +108,7 @@ struct paca_struct { | |||
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | extern struct paca_struct paca[]; | 110 | extern struct paca_struct paca[]; |
| 111 | extern void initialise_pacas(void); | ||
| 111 | 112 | ||
| 112 | #endif /* __KERNEL__ */ | 113 | #endif /* __KERNEL__ */ |
| 113 | #endif /* _ASM_POWERPC_PACA_H */ | 114 | #endif /* _ASM_POWERPC_PACA_H */ |
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index 6c850609b847..cffdf0eb0df6 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <asm/asm-compat.h> | 13 | #include <asm/asm-compat.h> |
| 14 | #include <asm/kdump.h> | 14 | #include <asm/kdump.h> |
| 15 | #include <asm/types.h> | ||
| 15 | 16 | ||
| 16 | /* | 17 | /* |
| 17 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software | 18 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software |
| @@ -42,8 +43,23 @@ | |||
| 42 | * | 43 | * |
| 43 | * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. | 44 | * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. |
| 44 | * | 45 | * |
| 45 | * To get a physical address from a virtual one you subtract PAGE_OFFSET, | 46 | * PAGE_OFFSET is the virtual address of the start of lowmem. |
| 46 | * _not_ KERNELBASE. | 47 | * |
| 48 | * PHYSICAL_START is the physical address of the start of the kernel. | ||
| 49 | * | ||
| 50 | * MEMORY_START is the physical address of the start of lowmem. | ||
| 51 | * | ||
| 52 | * KERNELBASE, PAGE_OFFSET, and PHYSICAL_START are all configurable on | ||
| 53 | * ppc32 and based on how they are set we determine MEMORY_START. | ||
| 54 | * | ||
| 55 | * For the linear mapping the following equation should be true: | ||
| 56 | * KERNELBASE - PAGE_OFFSET = PHYSICAL_START - MEMORY_START | ||
| 57 | * | ||
| 58 | * Also, KERNELBASE >= PAGE_OFFSET and PHYSICAL_START >= MEMORY_START | ||
| 59 | * | ||
| 60 | * There are two was to determine a physical address from a virtual one: | ||
| 61 | * va = pa + PAGE_OFFSET - MEMORY_START | ||
| 62 | * va = pa + KERNELBASE - PHYSICAL_START | ||
| 47 | * | 63 | * |
| 48 | * If you want to know something's offset from the start of the kernel you | 64 | * If you want to know something's offset from the start of the kernel you |
| 49 | * should subtract KERNELBASE. | 65 | * should subtract KERNELBASE. |
| @@ -51,20 +67,33 @@ | |||
| 51 | * If you want to test if something's a kernel address, use is_kernel_addr(). | 67 | * If you want to test if something's a kernel address, use is_kernel_addr(). |
| 52 | */ | 68 | */ |
| 53 | 69 | ||
| 54 | #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) | 70 | #define KERNELBASE ASM_CONST(CONFIG_KERNEL_START) |
| 55 | #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) | 71 | #define PAGE_OFFSET ASM_CONST(CONFIG_PAGE_OFFSET) |
| 56 | #define LOAD_OFFSET PAGE_OFFSET | 72 | #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_PHYSICAL_START)) |
| 73 | |||
| 74 | #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_FLATMEM) | ||
| 75 | #ifndef __ASSEMBLY__ | ||
| 76 | extern phys_addr_t memstart_addr; | ||
| 77 | extern phys_addr_t kernstart_addr; | ||
| 78 | #endif | ||
| 79 | #define PHYSICAL_START kernstart_addr | ||
| 80 | #define MEMORY_START memstart_addr | ||
| 81 | #else | ||
| 82 | #define PHYSICAL_START ASM_CONST(CONFIG_PHYSICAL_START) | ||
| 83 | #define MEMORY_START (PHYSICAL_START + PAGE_OFFSET - KERNELBASE) | ||
| 84 | #endif | ||
| 57 | 85 | ||
| 58 | #ifdef CONFIG_FLATMEM | 86 | #ifdef CONFIG_FLATMEM |
| 59 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | 87 | #define ARCH_PFN_OFFSET (MEMORY_START >> PAGE_SHIFT) |
| 88 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (ARCH_PFN_OFFSET + max_mapnr)) | ||
| 60 | #endif | 89 | #endif |
| 61 | 90 | ||
| 62 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | 91 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
| 63 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) | 92 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) |
| 64 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | 93 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) |
| 65 | 94 | ||
| 66 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) | 95 | #define __va(x) ((void *)((unsigned long)(x) - PHYSICAL_START + KERNELBASE)) |
| 67 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET) | 96 | #define __pa(x) ((unsigned long)(x) + PHYSICAL_START - KERNELBASE) |
| 68 | 97 | ||
| 69 | /* | 98 | /* |
| 70 | * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, | 99 | * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, |
diff --git a/include/asm-powerpc/page_32.h b/include/asm-powerpc/page_32.h index 51f8134b5939..ebfae530a379 100644 --- a/include/asm-powerpc/page_32.h +++ b/include/asm-powerpc/page_32.h | |||
| @@ -1,6 +1,12 @@ | |||
| 1 | #ifndef _ASM_POWERPC_PAGE_32_H | 1 | #ifndef _ASM_POWERPC_PAGE_32_H |
| 2 | #define _ASM_POWERPC_PAGE_32_H | 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 | #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 | 10 | #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 |
| 5 | 11 | ||
| 6 | #ifdef CONFIG_NOT_COHERENT_CACHE | 12 | #ifdef CONFIG_NOT_COHERENT_CACHE |
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h index 40d5f98c44fc..d030f5ce39ad 100644 --- a/include/asm-powerpc/thread_info.h +++ b/include/asm-powerpc/thread_info.h | |||
| @@ -80,12 +80,8 @@ struct thread_info { | |||
| 80 | 80 | ||
| 81 | #else /* THREAD_SHIFT < PAGE_SHIFT */ | 81 | #else /* THREAD_SHIFT < PAGE_SHIFT */ |
| 82 | 82 | ||
| 83 | #ifdef CONFIG_DEBUG_STACK_USAGE | 83 | extern struct thread_info *alloc_thread_info(struct task_struct *tsk); |
| 84 | #define alloc_thread_info(tsk) kzalloc(THREAD_SIZE, GFP_KERNEL) | 84 | extern void free_thread_info(struct thread_info *ti); |
| 85 | #else | ||
| 86 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) | ||
| 87 | #endif | ||
| 88 | #define free_thread_info(ti) kfree(ti) | ||
| 89 | 85 | ||
| 90 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ | 86 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ |
| 91 | 87 | ||
diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h index d46b57b589ae..d76ef098ed37 100644 --- a/include/asm-ppc/mmu.h +++ b/include/asm-ppc/mmu.h | |||
| @@ -15,10 +15,8 @@ | |||
| 15 | * physical need a larger than native word size type. -Matt | 15 | * physical need a larger than native word size type. -Matt |
| 16 | */ | 16 | */ |
| 17 | #ifndef CONFIG_PHYS_64BIT | 17 | #ifndef CONFIG_PHYS_64BIT |
| 18 | typedef unsigned long phys_addr_t; | ||
| 19 | #define PHYS_FMT "%.8lx" | 18 | #define PHYS_FMT "%.8lx" |
| 20 | #else | 19 | #else |
| 21 | typedef unsigned long long phys_addr_t; | ||
| 22 | extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); | 20 | extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); |
| 23 | #define PHYS_FMT "%16Lx" | 21 | #define PHYS_FMT "%16Lx" |
| 24 | #endif | 22 | #endif |
diff --git a/include/asm-ppc/mpc8260.h b/include/asm-ppc/mpc8260.h index 23579d4afae7..402ba15c2e80 100644 --- a/include/asm-ppc/mpc8260.h +++ b/include/asm-ppc/mpc8260.h | |||
| @@ -35,10 +35,6 @@ | |||
| 35 | #include <platforms/tqm8260.h> | 35 | #include <platforms/tqm8260.h> |
| 36 | #endif | 36 | #endif |
| 37 | 37 | ||
| 38 | #if defined(CONFIG_PQ2ADS) || defined (CONFIG_PQ2FADS) | ||
| 39 | #include <platforms/pq2ads.h> | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifdef CONFIG_PCI_8260 | 38 | #ifdef CONFIG_PCI_8260 |
| 43 | #include <syslib/m82xx_pci.h> | 39 | #include <syslib/m82xx_pci.h> |
| 44 | #endif | 40 | #endif |
diff --git a/include/asm-ppc/mpc8xx.h b/include/asm-ppc/mpc8xx.h index d3a2f2fe230c..b9e3060b0278 100644 --- a/include/asm-ppc/mpc8xx.h +++ b/include/asm-ppc/mpc8xx.h | |||
| @@ -63,10 +63,6 @@ | |||
| 63 | #include <platforms/lantec.h> | 63 | #include <platforms/lantec.h> |
| 64 | #endif | 64 | #endif |
| 65 | 65 | ||
| 66 | #if defined(CONFIG_MPC885ADS) | ||
| 67 | #include <platforms/mpc885ads.h> | ||
| 68 | #endif | ||
| 69 | |||
| 70 | /* Currently, all 8xx boards that support a processor to PCI/ISA bridge | 66 | /* Currently, all 8xx boards that support a processor to PCI/ISA bridge |
| 71 | * use the same memory map. | 67 | * use the same memory map. |
| 72 | */ | 68 | */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 311380e5fe89..d0bd97044abd 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -1926,6 +1926,8 @@ static inline unsigned long *end_of_stack(struct task_struct *p) | |||
| 1926 | 1926 | ||
| 1927 | #endif | 1927 | #endif |
| 1928 | 1928 | ||
| 1929 | extern void thread_info_cache_init(void); | ||
| 1930 | |||
| 1929 | /* set thread flags in other task's structures | 1931 | /* set thread flags in other task's structures |
| 1930 | * - see asm/thread_info.h for TIF_xxxx flags available | 1932 | * - see asm/thread_info.h for TIF_xxxx flags available |
| 1931 | */ | 1933 | */ |
diff --git a/init/main.c b/init/main.c index 833a67df1f7e..1687b0167c4a 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -521,7 +521,11 @@ static void __init boot_cpu_init(void) | |||
| 521 | cpu_set(cpu, cpu_possible_map); | 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 | ||
| @@ -645,6 +649,7 @@ asmlinkage void __init start_kernel(void) | |||
| 645 | if (efi_enabled) | 649 | if (efi_enabled) |
| 646 | efi_enter_virtual_mode(); | 650 | efi_enter_virtual_mode(); |
| 647 | #endif | 651 | #endif |
| 652 | thread_info_cache_init(); | ||
| 648 | fork_init(num_physpages); | 653 | fork_init(num_physpages); |
| 649 | proc_caches_init(); | 654 | proc_caches_init(); |
| 650 | buffer_init(); | 655 | buffer_init(); |
