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(); |