diff options
545 files changed, 28875 insertions, 13779 deletions
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index 254c1d5d2e50..85b25275196f 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
| @@ -6,4 +6,5 @@ | |||
| 6 | <param name="callout.graphics">0</param> | 6 | <param name="callout.graphics">0</param> |
| 7 | <!-- <param name="paper.type">A4</param> --> | 7 | <!-- <param name="paper.type">A4</param> --> |
| 8 | <param name="generate.section.toc.level">2</param> | 8 | <param name="generate.section.toc.level">2</param> |
| 9 | <param name="use.id.as.filename">1</param> | ||
| 9 | </stylesheet> | 10 | </stylesheet> |
diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt index 508b5b2b0289..b9a83dd24732 100644 --- a/Documentation/block/biodoc.txt +++ b/Documentation/block/biodoc.txt | |||
| @@ -7,7 +7,7 @@ Notes Written on Jan 15, 2002: | |||
| 7 | 7 | ||
| 8 | Last Updated May 2, 2002 | 8 | Last Updated May 2, 2002 |
| 9 | September 2003: Updated I/O Scheduler portions | 9 | September 2003: Updated I/O Scheduler portions |
| 10 | Nick Piggin <piggin@cyberone.com.au> | 10 | Nick Piggin <npiggin@kernel.dk> |
| 11 | 11 | ||
| 12 | Introduction: | 12 | Introduction: |
| 13 | 13 | ||
diff --git a/Documentation/kbuild/kbuild.txt b/Documentation/kbuild/kbuild.txt index 634c625da8ce..0d8addbb0fae 100644 --- a/Documentation/kbuild/kbuild.txt +++ b/Documentation/kbuild/kbuild.txt | |||
| @@ -40,15 +40,15 @@ Set the directory to look for the kernel source when building external | |||
| 40 | modules. | 40 | modules. |
| 41 | The directory can be specified in several ways: | 41 | The directory can be specified in several ways: |
| 42 | 1) Use "M=..." on the command line | 42 | 1) Use "M=..." on the command line |
| 43 | 2) Environmnet variable KBUILD_EXTMOD | 43 | 2) Environment variable KBUILD_EXTMOD |
| 44 | 3) Environmnet variable SUBDIRS | 44 | 3) Environment variable SUBDIRS |
| 45 | The possibilities are listed in the order they take precedence. | 45 | The possibilities are listed in the order they take precedence. |
| 46 | Using "M=..." will always override the others. | 46 | Using "M=..." will always override the others. |
| 47 | 47 | ||
| 48 | KBUILD_OUTPUT | 48 | KBUILD_OUTPUT |
| 49 | -------------------------------------------------- | 49 | -------------------------------------------------- |
| 50 | Specify the output directory when building the kernel. | 50 | Specify the output directory when building the kernel. |
| 51 | The output directory can also be specificed using "O=...". | 51 | The output directory can also be specified using "O=...". |
| 52 | Setting "O=..." takes precedence over KBUILD_OUTPUT. | 52 | Setting "O=..." takes precedence over KBUILD_OUTPUT. |
| 53 | 53 | ||
| 54 | ARCH | 54 | ARCH |
| @@ -90,7 +90,7 @@ The script will be called with the following arguments: | |||
| 90 | $3 - kernel map file | 90 | $3 - kernel map file |
| 91 | $4 - default install path (use root directory if blank) | 91 | $4 - default install path (use root directory if blank) |
| 92 | 92 | ||
| 93 | The implmentation of "make install" is architecture specific | 93 | The implementation of "make install" is architecture specific |
| 94 | and it may differ from the above. | 94 | and it may differ from the above. |
| 95 | 95 | ||
| 96 | INSTALLKERNEL is provided to enable the possibility to | 96 | INSTALLKERNEL is provided to enable the possibility to |
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 71c602d61680..8abd041b605d 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt | |||
| @@ -168,7 +168,7 @@ more details, with real examples. | |||
| 168 | #drivers/isdn/i4l/Makefile | 168 | #drivers/isdn/i4l/Makefile |
| 169 | # Makefile for the kernel ISDN subsystem and device drivers. | 169 | # Makefile for the kernel ISDN subsystem and device drivers. |
| 170 | # Each configuration option enables a list of files. | 170 | # Each configuration option enables a list of files. |
| 171 | obj-$(CONFIG_ISDN) += isdn.o | 171 | obj-$(CONFIG_ISDN_I4L) += isdn.o |
| 172 | obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o | 172 | obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o |
| 173 | 173 | ||
| 174 | --- 3.3 Loadable module goals - obj-m | 174 | --- 3.3 Loadable module goals - obj-m |
| @@ -187,34 +187,35 @@ more details, with real examples. | |||
| 187 | Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm' | 187 | Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm' |
| 188 | 188 | ||
| 189 | If a kernel module is built from several source files, you specify | 189 | If a kernel module is built from several source files, you specify |
| 190 | that you want to build a module in the same way as above. | 190 | that you want to build a module in the same way as above; however, |
| 191 | 191 | kbuild needs to know which object files you want to build your | |
| 192 | Kbuild needs to know which the parts that you want to build your | 192 | module from, so you have to tell it by setting a $(<module_name>-y) |
| 193 | module from, so you have to tell it by setting an | 193 | variable. |
| 194 | $(<module_name>-objs) variable. | ||
| 195 | 194 | ||
| 196 | Example: | 195 | Example: |
| 197 | #drivers/isdn/i4l/Makefile | 196 | #drivers/isdn/i4l/Makefile |
| 198 | obj-$(CONFIG_ISDN) += isdn.o | 197 | obj-$(CONFIG_ISDN_I4L) += isdn.o |
| 199 | isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o | 198 | isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o |
| 200 | 199 | ||
| 201 | In this example, the module name will be isdn.o. Kbuild will | 200 | In this example, the module name will be isdn.o. Kbuild will |
| 202 | compile the objects listed in $(isdn-objs) and then run | 201 | compile the objects listed in $(isdn-y) and then run |
| 203 | "$(LD) -r" on the list of these files to generate isdn.o. | 202 | "$(LD) -r" on the list of these files to generate isdn.o. |
| 204 | 203 | ||
| 205 | Kbuild recognises objects used for composite objects by the suffix | 204 | Due to kbuild recognizing $(<module_name>-y) for composite objects, |
| 206 | -objs, and the suffix -y. This allows the Makefiles to use | 205 | you can use the value of a CONFIG_ symbol to optionally include an |
| 207 | the value of a CONFIG_ symbol to determine if an object is part | 206 | object file as part of a composite object. |
| 208 | of a composite object. | ||
| 209 | 207 | ||
| 210 | Example: | 208 | Example: |
| 211 | #fs/ext2/Makefile | 209 | #fs/ext2/Makefile |
| 212 | obj-$(CONFIG_EXT2_FS) += ext2.o | 210 | obj-$(CONFIG_EXT2_FS) += ext2.o |
| 213 | ext2-y := balloc.o bitmap.o | 211 | ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \ |
| 214 | ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o | 212 | namei.o super.o symlink.o |
| 213 | ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \ | ||
| 214 | xattr_trusted.o | ||
| 215 | 215 | ||
| 216 | In this example, xattr.o is only part of the composite object | 216 | In this example, xattr.o, xattr_user.o and xattr_trusted.o are only |
| 217 | ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'. | 217 | part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR) |
| 218 | evaluates to 'y'. | ||
| 218 | 219 | ||
| 219 | Note: Of course, when you are building objects into the kernel, | 220 | Note: Of course, when you are building objects into the kernel, |
| 220 | the syntax above will also work. So, if you have CONFIG_EXT2_FS=y, | 221 | the syntax above will also work. So, if you have CONFIG_EXT2_FS=y, |
| @@ -244,12 +245,12 @@ more details, with real examples. | |||
| 244 | may contain both a built-in.o and a lib.a file. | 245 | may contain both a built-in.o and a lib.a file. |
| 245 | 246 | ||
| 246 | Example: | 247 | Example: |
| 247 | #arch/i386/lib/Makefile | 248 | #arch/x86/lib/Makefile |
| 248 | lib-y := checksum.o delay.o | 249 | lib-y := delay.o |
| 249 | 250 | ||
| 250 | This will create a library lib.a based on checksum.o and delay.o. | 251 | This will create a library lib.a based on delay.o. For kbuild to |
| 251 | For kbuild to actually recognize that there is a lib.a being built, | 252 | actually recognize that there is a lib.a being built, the directory |
| 252 | the directory shall be listed in libs-y. | 253 | shall be listed in libs-y. |
| 253 | See also "6.3 List directories to visit when descending". | 254 | See also "6.3 List directories to visit when descending". |
| 254 | 255 | ||
| 255 | Use of lib-y is normally restricted to lib/ and arch/*/lib. | 256 | Use of lib-y is normally restricted to lib/ and arch/*/lib. |
| @@ -284,43 +285,40 @@ more details, with real examples. | |||
| 284 | --- 3.7 Compilation flags | 285 | --- 3.7 Compilation flags |
| 285 | 286 | ||
| 286 | ccflags-y, asflags-y and ldflags-y | 287 | ccflags-y, asflags-y and ldflags-y |
| 287 | The three flags listed above applies only to the kbuild makefile | 288 | These three flags apply only to the kbuild makefile in which they |
| 288 | where they are assigned. They are used for all the normal | 289 | are assigned. They are used for all the normal cc, as and ld |
| 289 | cc, as and ld invocation happenign during a recursive build. | 290 | invocations happening during a recursive build. |
| 290 | Note: Flags with the same behaviour were previously named: | 291 | Note: Flags with the same behaviour were previously named: |
| 291 | EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. | 292 | EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. |
| 292 | They are yet supported but their use are deprecated. | 293 | They are still supported but their usage is deprecated. |
| 293 | 294 | ||
| 294 | ccflags-y specifies options for compiling C files with $(CC). | 295 | ccflags-y specifies options for compiling with $(CC). |
| 295 | 296 | ||
| 296 | Example: | 297 | Example: |
| 297 | # drivers/sound/emu10k1/Makefile | 298 | # drivers/acpi/Makefile |
| 298 | ccflags-y += -I$(obj) | 299 | ccflags-y := -Os |
| 299 | ccflags-$(DEBUG) += -DEMU10K1_DEBUG | 300 | ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT |
| 300 | |||
| 301 | 301 | ||
| 302 | This variable is necessary because the top Makefile owns the | 302 | This variable is necessary because the top Makefile owns the |
| 303 | variable $(KBUILD_CFLAGS) and uses it for compilation flags for the | 303 | variable $(KBUILD_CFLAGS) and uses it for compilation flags for the |
| 304 | entire tree. | 304 | entire tree. |
| 305 | 305 | ||
| 306 | asflags-y is a similar string for per-directory options | 306 | asflags-y specifies options for assembling with $(AS). |
| 307 | when compiling assembly language source. | ||
| 308 | 307 | ||
| 309 | Example: | 308 | Example: |
| 310 | #arch/x86_64/kernel/Makefile | 309 | #arch/sparc/kernel/Makefile |
| 311 | asflags-y := -traditional | 310 | asflags-y := -ansi |
| 312 | 311 | ||
| 313 | 312 | ldflags-y specifies options for linking with $(LD). | |
| 314 | ldflags-y is a string for per-directory options to $(LD). | ||
| 315 | 313 | ||
| 316 | Example: | 314 | Example: |
| 317 | #arch/m68k/fpsp040/Makefile | 315 | #arch/cris/boot/compressed/Makefile |
| 318 | ldflags-y := -x | 316 | ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds |
| 319 | 317 | ||
| 320 | subdir-ccflags-y, subdir-asflags-y | 318 | subdir-ccflags-y, subdir-asflags-y |
| 321 | The two flags listed above are similar to ccflags-y and as-falgs-y. | 319 | The two flags listed above are similar to ccflags-y and asflags-y. |
| 322 | The difference is that the subdir- variants has effect for the kbuild | 320 | The difference is that the subdir- variants have effect for the kbuild |
| 323 | file where tey are present and all subdirectories. | 321 | file where they are present and all subdirectories. |
| 324 | Options specified using subdir-* are added to the commandline before | 322 | Options specified using subdir-* are added to the commandline before |
| 325 | the options specified using the non-subdir variants. | 323 | the options specified using the non-subdir variants. |
| 326 | 324 | ||
| @@ -340,18 +338,18 @@ more details, with real examples. | |||
| 340 | CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF | 338 | CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF |
| 341 | CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \ | 339 | CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \ |
| 342 | -DGDTH_STATISTICS | 340 | -DGDTH_STATISTICS |
| 343 | CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM | ||
| 344 | 341 | ||
| 345 | These three lines specify compilation flags for aha152x.o, | 342 | These two lines specify compilation flags for aha152x.o and gdth.o. |
| 346 | gdth.o, and seagate.o | ||
| 347 | 343 | ||
| 348 | $(AFLAGS_$@) is a similar feature for source files in assembly | 344 | $(AFLAGS_$@) is a similar feature for source files in assembly |
| 349 | languages. | 345 | languages. |
| 350 | 346 | ||
| 351 | Example: | 347 | Example: |
| 352 | # arch/arm/kernel/Makefile | 348 | # arch/arm/kernel/Makefile |
| 353 | AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional | 349 | AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) |
| 354 | AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional | 350 | AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 |
| 351 | AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt | ||
| 352 | |||
| 355 | 353 | ||
| 356 | --- 3.9 Dependency tracking | 354 | --- 3.9 Dependency tracking |
| 357 | 355 | ||
| @@ -1176,14 +1174,14 @@ When kbuild executes, the following steps are followed (roughly): | |||
| 1176 | === 7 Kbuild syntax for exported headers | 1174 | === 7 Kbuild syntax for exported headers |
| 1177 | 1175 | ||
| 1178 | The kernel include a set of headers that is exported to userspace. | 1176 | The kernel include a set of headers that is exported to userspace. |
| 1179 | Many headers can be exported as-is but other headers requires a | 1177 | Many headers can be exported as-is but other headers require a |
| 1180 | minimal pre-processing before they are ready for user-space. | 1178 | minimal pre-processing before they are ready for user-space. |
| 1181 | The pre-processing does: | 1179 | The pre-processing does: |
| 1182 | - drop kernel specific annotations | 1180 | - drop kernel specific annotations |
| 1183 | - drop include of compiler.h | 1181 | - drop include of compiler.h |
| 1184 | - drop all sections that is kernel internat (guarded by ifdef __KERNEL__) | 1182 | - drop all sections that are kernel internal (guarded by ifdef __KERNEL__) |
| 1185 | 1183 | ||
| 1186 | Each relevant directory contain a file name "Kbuild" which specify the | 1184 | Each relevant directory contains a file name "Kbuild" which specifies the |
| 1187 | headers to be exported. | 1185 | headers to be exported. |
| 1188 | See subsequent chapter for the syntax of the Kbuild file. | 1186 | See subsequent chapter for the syntax of the Kbuild file. |
| 1189 | 1187 | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index d9239d5f3ad3..ef8b11cec6e9 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -116,6 +116,7 @@ parameter is applicable: | |||
| 116 | More X86-64 boot options can be found in | 116 | More X86-64 boot options can be found in |
| 117 | Documentation/x86/x86_64/boot-options.txt . | 117 | Documentation/x86/x86_64/boot-options.txt . |
| 118 | X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) | 118 | X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) |
| 119 | XEN Xen support is enabled | ||
| 119 | 120 | ||
| 120 | In addition, the following text indicates that the option: | 121 | In addition, the following text indicates that the option: |
| 121 | 122 | ||
| @@ -2886,6 +2887,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 2886 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. | 2887 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. |
| 2887 | xd_geo= See header of drivers/block/xd.c. | 2888 | xd_geo= See header of drivers/block/xd.c. |
| 2888 | 2889 | ||
| 2890 | xen_emul_unplug= [HW,X86,XEN] | ||
| 2891 | Unplug Xen emulated devices | ||
| 2892 | Format: [unplug0,][unplug1] | ||
| 2893 | ide-disks -- unplug primary master IDE devices | ||
| 2894 | aux-ide-disks -- unplug non-primary-master IDE devices | ||
| 2895 | nics -- unplug network devices | ||
| 2896 | all -- unplug all emulated devices (NICs and IDE disks) | ||
| 2897 | ignore -- continue loading the Xen platform PCI driver even | ||
| 2898 | if the version check failed | ||
| 2899 | |||
| 2889 | xirc2ps_cs= [NET,PCMCIA] | 2900 | xirc2ps_cs= [NET,PCMCIA] |
| 2890 | Format: | 2901 | Format: |
| 2891 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 2902 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] |
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt index 6653017680dd..1762b81fcdf2 100644 --- a/Documentation/kprobes.txt +++ b/Documentation/kprobes.txt | |||
| @@ -285,6 +285,7 @@ architectures: | |||
| 285 | - sparc64 (Return probes not yet implemented.) | 285 | - sparc64 (Return probes not yet implemented.) |
| 286 | - arm | 286 | - arm |
| 287 | - ppc | 287 | - ppc |
| 288 | - mips | ||
| 288 | 289 | ||
| 289 | 3. Configuring Kprobes | 290 | 3. Configuring Kprobes |
| 290 | 291 | ||
diff --git a/Documentation/powerpc/dts-bindings/fsl/diu.txt b/Documentation/powerpc/dts-bindings/fsl/diu.txt index deb35de70988..b66cb6d31d69 100644 --- a/Documentation/powerpc/dts-bindings/fsl/diu.txt +++ b/Documentation/powerpc/dts-bindings/fsl/diu.txt | |||
| @@ -4,10 +4,17 @@ The Freescale DIU is a LCD controller, with proper hardware, it can also | |||
| 4 | drive DVI monitors. | 4 | drive DVI monitors. |
| 5 | 5 | ||
| 6 | Required properties: | 6 | Required properties: |
| 7 | - compatible : should be "fsl-diu". | 7 | - compatible : should be "fsl,diu" or "fsl,mpc5121-diu". |
| 8 | - reg : should contain at least address and length of the DIU register | 8 | - reg : should contain at least address and length of the DIU register |
| 9 | set. | 9 | set. |
| 10 | - Interrupts : one DIU interrupt should be describe here. | 10 | - interrupts : one DIU interrupt should be described here. |
| 11 | - interrupt-parent : the phandle for the interrupt controller that | ||
| 12 | services interrupts for this device. | ||
| 13 | |||
| 14 | Optional properties: | ||
| 15 | - edid : verbatim EDID data block describing attached display. | ||
| 16 | Data from the detailed timing descriptor will be used to | ||
| 17 | program the display controller. | ||
| 11 | 18 | ||
| 12 | Example (MPC8610HPCD): | 19 | Example (MPC8610HPCD): |
| 13 | display@2c000 { | 20 | display@2c000 { |
| @@ -16,3 +23,12 @@ Example (MPC8610HPCD): | |||
| 16 | interrupts = <72 2>; | 23 | interrupts = <72 2>; |
| 17 | interrupt-parent = <&mpic>; | 24 | interrupt-parent = <&mpic>; |
| 18 | }; | 25 | }; |
| 26 | |||
| 27 | Example for MPC5121: | ||
| 28 | display@2100 { | ||
| 29 | compatible = "fsl,mpc5121-diu"; | ||
| 30 | reg = <0x2100 0x100>; | ||
| 31 | interrupts = <64 0x8>; | ||
| 32 | interrupt-parent = <&ipic>; | ||
| 33 | edid = [edid-data]; | ||
| 34 | }; | ||
diff --git a/Documentation/powerpc/dts-bindings/fsl/i2c.txt b/Documentation/powerpc/dts-bindings/fsl/i2c.txt index 50da20310585..1eacd6b20ed5 100644 --- a/Documentation/powerpc/dts-bindings/fsl/i2c.txt +++ b/Documentation/powerpc/dts-bindings/fsl/i2c.txt | |||
| @@ -20,6 +20,7 @@ Recommended properties : | |||
| 20 | - fsl,preserve-clocking : boolean; if defined, the clock settings | 20 | - fsl,preserve-clocking : boolean; if defined, the clock settings |
| 21 | from the bootloader are preserved (not touched). | 21 | from the bootloader are preserved (not touched). |
| 22 | - clock-frequency : desired I2C bus clock frequency in Hz. | 22 | - clock-frequency : desired I2C bus clock frequency in Hz. |
| 23 | - fsl,timeout : I2C bus timeout in microseconds. | ||
| 23 | 24 | ||
| 24 | Examples : | 25 | Examples : |
| 25 | 26 | ||
| @@ -59,4 +60,5 @@ Examples : | |||
| 59 | interrupts = <43 2>; | 60 | interrupts = <43 2>; |
| 60 | interrupt-parent = <&mpic>; | 61 | interrupt-parent = <&mpic>; |
| 61 | clock-frequency = <400000>; | 62 | clock-frequency = <400000>; |
| 63 | fsl,timeout = <10000>; | ||
| 62 | }; | 64 | }; |
diff --git a/Documentation/vm/page-types.c b/Documentation/vm/page-types.c index 66e9358e2144..ccd951fa94ee 100644 --- a/Documentation/vm/page-types.c +++ b/Documentation/vm/page-types.c | |||
| @@ -694,7 +694,7 @@ static void usage(void) | |||
| 694 | #endif | 694 | #endif |
| 695 | " -l|--list Show page details in ranges\n" | 695 | " -l|--list Show page details in ranges\n" |
| 696 | " -L|--list-each Show page details one by one\n" | 696 | " -L|--list-each Show page details one by one\n" |
| 697 | " -N|--no-summary Don't show summay info\n" | 697 | " -N|--no-summary Don't show summary info\n" |
| 698 | " -X|--hwpoison hwpoison pages\n" | 698 | " -X|--hwpoison hwpoison pages\n" |
| 699 | " -x|--unpoison unpoison pages\n" | 699 | " -x|--unpoison unpoison pages\n" |
| 700 | " -h|--help Show this usage message\n" | 700 | " -h|--help Show this usage message\n" |
diff --git a/MAINTAINERS b/MAINTAINERS index 88ec0447a4f3..05741e0da46c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -4731,7 +4731,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git | |||
| 4731 | F: drivers/net/wireless/rt2x00/ | 4731 | F: drivers/net/wireless/rt2x00/ |
| 4732 | 4732 | ||
| 4733 | RAMDISK RAM BLOCK DEVICE DRIVER | 4733 | RAMDISK RAM BLOCK DEVICE DRIVER |
| 4734 | M: Nick Piggin <npiggin@suse.de> | 4734 | M: Nick Piggin <npiggin@kernel.dk> |
| 4735 | S: Maintained | 4735 | S: Maintained |
| 4736 | F: Documentation/blockdev/ramdisk.txt | 4736 | F: Documentation/blockdev/ramdisk.txt |
| 4737 | F: drivers/block/brd.c | 4737 | F: drivers/block/brd.c |
| @@ -5357,7 +5357,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git | |||
| 5357 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git | 5357 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git |
| 5358 | S: Maintained | 5358 | S: Maintained |
| 5359 | F: arch/sparc/ | 5359 | F: arch/sparc/ |
| 5360 | F: drivers/sbus | 5360 | F: drivers/sbus/ |
| 5361 | 5361 | ||
| 5362 | SPARC SERIAL DRIVERS | 5362 | SPARC SERIAL DRIVERS |
| 5363 | M: "David S. Miller" <davem@davemloft.net> | 5363 | M: "David S. Miller" <davem@davemloft.net> |
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig index 312b12094a1d..c5fe20553dad 100644 --- a/arch/ia64/configs/bigsur_defconfig +++ b/arch/ia64/configs/bigsur_defconfig | |||
| @@ -1,1358 +1,118 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.16-rc5 | ||
| 4 | # Mon Feb 27 16:10:42 2006 | ||
| 5 | # | ||
| 6 | |||
| 7 | # | ||
| 8 | # Code maturity level options | ||
| 9 | # | ||
| 10 | CONFIG_EXPERIMENTAL=y | ||
| 11 | CONFIG_LOCK_KERNEL=y | ||
| 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 13 | |||
| 14 | # | ||
| 15 | # General setup | ||
| 16 | # | ||
| 17 | CONFIG_LOCALVERSION="" | ||
| 18 | CONFIG_LOCALVERSION_AUTO=y | ||
| 19 | CONFIG_SWAP=y | ||
| 20 | CONFIG_SYSVIPC=y | ||
| 21 | CONFIG_POSIX_MQUEUE=y | ||
| 22 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 23 | CONFIG_SYSCTL=y | ||
| 24 | # CONFIG_AUDIT is not set | ||
| 25 | # CONFIG_IKCONFIG is not set | ||
| 26 | # CONFIG_CPUSETS is not set | ||
| 27 | CONFIG_INITRAMFS_SOURCE="" | ||
| 28 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 29 | # CONFIG_EMBEDDED is not set | ||
| 30 | CONFIG_KALLSYMS=y | ||
| 31 | # CONFIG_KALLSYMS_ALL is not set | ||
| 32 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 33 | CONFIG_HOTPLUG=y | ||
| 34 | CONFIG_PRINTK=y | ||
| 35 | CONFIG_BUG=y | ||
| 36 | CONFIG_ELF_CORE=y | ||
| 37 | CONFIG_BASE_FULL=y | ||
| 38 | CONFIG_FUTEX=y | ||
| 39 | CONFIG_EPOLL=y | ||
| 40 | CONFIG_SHMEM=y | ||
| 41 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
| 42 | CONFIG_CC_ALIGN_LABELS=0 | ||
| 43 | CONFIG_CC_ALIGN_LOOPS=0 | ||
| 44 | CONFIG_CC_ALIGN_JUMPS=0 | ||
| 45 | CONFIG_SLUB=y | ||
| 46 | # CONFIG_TINY_SHMEM is not set | ||
| 47 | CONFIG_BASE_SMALL=0 | ||
| 48 | # CONFIG_SLOB is not set | ||
| 49 | |||
| 50 | # | ||
| 51 | # Loadable module support | ||
| 52 | # | ||
| 53 | CONFIG_MODULES=y | ||
| 54 | CONFIG_MODULE_UNLOAD=y | ||
| 55 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 56 | CONFIG_OBSOLETE_MODPARM=y | ||
| 57 | # CONFIG_MODVERSIONS is not set | ||
| 58 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 59 | CONFIG_KMOD=y | ||
| 60 | CONFIG_STOP_MACHINE=y | ||
| 61 | |||
| 62 | # | ||
| 63 | # Block layer | ||
| 64 | # | ||
| 65 | |||
| 66 | # | ||
| 67 | # IO Schedulers | ||
| 68 | # | ||
| 69 | CONFIG_IOSCHED_NOOP=y | ||
| 70 | CONFIG_IOSCHED_AS=y | ||
| 71 | CONFIG_IOSCHED_DEADLINE=y | ||
| 72 | CONFIG_IOSCHED_CFQ=y | ||
| 73 | CONFIG_DEFAULT_AS=y | ||
| 74 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 75 | # CONFIG_DEFAULT_CFQ is not set | ||
| 76 | # CONFIG_DEFAULT_NOOP is not set | ||
| 77 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 78 | |||
| 79 | # | ||
| 80 | # Processor type and features | ||
| 81 | # | ||
| 82 | CONFIG_IA64=y | ||
| 83 | CONFIG_64BIT=y | ||
| 84 | CONFIG_MMU=y | ||
| 85 | CONFIG_SWIOTLB=y | ||
| 86 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 87 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 88 | CONFIG_GENERIC_TIME=y | ||
| 89 | CONFIG_EFI=y | ||
| 90 | CONFIG_GENERIC_IOMAP=y | ||
| 91 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 92 | CONFIG_DMA_IS_DMA32=y | ||
| 93 | # CONFIG_IA64_GENERIC is not set | ||
| 94 | CONFIG_IA64_DIG=y | ||
| 95 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 96 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 97 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 98 | # CONFIG_IA64_HP_SIM is not set | ||
| 99 | CONFIG_ITANIUM=y | ||
| 100 | # CONFIG_MCKINLEY is not set | ||
| 101 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 102 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 103 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
| 104 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
| 105 | CONFIG_PGTABLE_3=y | ||
| 106 | # CONFIG_PGTABLE_4 is not set | ||
| 107 | # CONFIG_HZ_100 is not set | ||
| 108 | CONFIG_HZ_250=y | ||
| 109 | # CONFIG_HZ_1000 is not set | ||
| 110 | CONFIG_HZ=250 | ||
| 111 | CONFIG_IA64_BRL_EMU=y | ||
| 112 | CONFIG_IA64_L1_CACHE_SHIFT=6 | ||
| 113 | # CONFIG_IA64_CYCLONE is not set | ||
| 114 | CONFIG_IOSAPIC=y | ||
| 115 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 116 | CONFIG_SMP=y | ||
| 117 | CONFIG_NR_CPUS=2 | ||
| 118 | # CONFIG_HOTPLUG_CPU is not set | ||
| 119 | # CONFIG_SCHED_SMT is not set | ||
| 120 | CONFIG_PREEMPT=y | ||
| 121 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 122 | CONFIG_FLATMEM_MANUAL=y | ||
| 123 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 124 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 125 | CONFIG_FLATMEM=y | ||
| 126 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 127 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 128 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 131 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 132 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 133 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
| 134 | # CONFIG_IA64_MCA_RECOVERY is not set | ||
| 135 | CONFIG_PERFMON=y | ||
| 136 | CONFIG_IA64_PALINFO=y | ||
| 137 | |||
| 138 | # | ||
| 139 | # Firmware Drivers | ||
| 140 | # | ||
| 141 | CONFIG_EFI_VARS=y | ||
| 142 | CONFIG_EFI_PCDP=y | ||
| 143 | CONFIG_BINFMT_ELF=y | ||
| 144 | CONFIG_BINFMT_MISC=m | ||
| 145 | |||
| 146 | # | ||
| 147 | # Power management and ACPI | ||
| 148 | # | ||
| 149 | CONFIG_PM=y | ||
| 150 | CONFIG_PM_LEGACY=y | ||
| 151 | # CONFIG_PM_DEBUG is not set | ||
| 152 | |||
| 153 | # | ||
| 154 | # ACPI (Advanced Configuration and Power Interface) Support | ||
| 155 | # | ||
| 156 | CONFIG_ACPI=y | ||
| 157 | CONFIG_ACPI_BUTTON=m | 1 | CONFIG_ACPI_BUTTON=m |
| 158 | CONFIG_ACPI_FAN=m | 2 | CONFIG_ACPI_FAN=m |
| 159 | CONFIG_ACPI_PROCESSOR=m | 3 | CONFIG_ACPI_PROCESSOR=m |
| 160 | CONFIG_ACPI_THERMAL=m | 4 | CONFIG_AGP_I460=m |
| 161 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 5 | CONFIG_AGP=m |
| 162 | # CONFIG_ACPI_DEBUG is not set | 6 | CONFIG_AUTOFS4_FS=m |
| 163 | CONFIG_ACPI_EC=y | 7 | CONFIG_AUTOFS_FS=m |
| 164 | CONFIG_ACPI_POWER=y | 8 | CONFIG_BINFMT_MISC=m |
| 165 | CONFIG_ACPI_SYSTEM=y | ||
| 166 | # CONFIG_ACPI_CONTAINER is not set | ||
| 167 | |||
| 168 | # | ||
| 169 | # CPU Frequency scaling | ||
| 170 | # | ||
| 171 | # CONFIG_CPU_FREQ is not set | ||
| 172 | |||
| 173 | # | ||
| 174 | # Bus options (PCI, PCMCIA) | ||
| 175 | # | ||
| 176 | CONFIG_PCI=y | ||
| 177 | CONFIG_PCI_DOMAINS=y | ||
| 178 | # CONFIG_PCI_MSI is not set | ||
| 179 | CONFIG_PCI_LEGACY_PROC=y | ||
| 180 | # CONFIG_PCI_DEBUG is not set | ||
| 181 | |||
| 182 | # | ||
| 183 | # PCI Hotplug Support | ||
| 184 | # | ||
| 185 | # CONFIG_HOTPLUG_PCI is not set | ||
| 186 | |||
| 187 | # | ||
| 188 | # PCCARD (PCMCIA/CardBus) support | ||
| 189 | # | ||
| 190 | # CONFIG_PCCARD is not set | ||
| 191 | |||
| 192 | # | ||
| 193 | # Networking | ||
| 194 | # | ||
| 195 | CONFIG_NET=y | ||
| 196 | |||
| 197 | # | ||
| 198 | # Networking options | ||
| 199 | # | ||
| 200 | # CONFIG_NETDEBUG is not set | ||
| 201 | CONFIG_PACKET=y | ||
| 202 | CONFIG_PACKET_MMAP=y | ||
| 203 | CONFIG_UNIX=y | ||
| 204 | # CONFIG_NET_KEY is not set | ||
| 205 | CONFIG_INET=y | ||
| 206 | # CONFIG_IP_MULTICAST is not set | ||
| 207 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 208 | CONFIG_IP_FIB_HASH=y | ||
| 209 | # CONFIG_IP_PNP is not set | ||
| 210 | # CONFIG_NET_IPIP is not set | ||
| 211 | # CONFIG_NET_IPGRE is not set | ||
| 212 | # CONFIG_ARPD is not set | ||
| 213 | # CONFIG_SYN_COOKIES is not set | ||
| 214 | # CONFIG_INET_AH is not set | ||
| 215 | # CONFIG_INET_ESP is not set | ||
| 216 | # CONFIG_INET_IPCOMP is not set | ||
| 217 | # CONFIG_INET_TUNNEL is not set | ||
| 218 | CONFIG_INET_DIAG=y | ||
| 219 | CONFIG_INET_TCP_DIAG=y | ||
| 220 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 221 | CONFIG_TCP_CONG_BIC=y | ||
| 222 | # CONFIG_IPV6 is not set | ||
| 223 | # CONFIG_NETFILTER is not set | ||
| 224 | |||
| 225 | # | ||
| 226 | # DCCP Configuration (EXPERIMENTAL) | ||
| 227 | # | ||
| 228 | # CONFIG_IP_DCCP is not set | ||
| 229 | |||
| 230 | # | ||
| 231 | # SCTP Configuration (EXPERIMENTAL) | ||
| 232 | # | ||
| 233 | # CONFIG_IP_SCTP is not set | ||
| 234 | |||
| 235 | # | ||
| 236 | # TIPC Configuration (EXPERIMENTAL) | ||
| 237 | # | ||
| 238 | # CONFIG_TIPC is not set | ||
| 239 | # CONFIG_ATM is not set | ||
| 240 | # CONFIG_BRIDGE is not set | ||
| 241 | # CONFIG_VLAN_8021Q is not set | ||
| 242 | # CONFIG_DECNET is not set | ||
| 243 | # CONFIG_LLC2 is not set | ||
| 244 | # CONFIG_IPX is not set | ||
| 245 | # CONFIG_ATALK is not set | ||
| 246 | # CONFIG_X25 is not set | ||
| 247 | # CONFIG_LAPB is not set | ||
| 248 | # CONFIG_NET_DIVERT is not set | ||
| 249 | # CONFIG_ECONET is not set | ||
| 250 | # CONFIG_WAN_ROUTER is not set | ||
| 251 | |||
| 252 | # | ||
| 253 | # QoS and/or fair queueing | ||
| 254 | # | ||
| 255 | # CONFIG_NET_SCHED is not set | ||
| 256 | |||
| 257 | # | ||
| 258 | # Network testing | ||
| 259 | # | ||
| 260 | # CONFIG_NET_PKTGEN is not set | ||
| 261 | # CONFIG_HAMRADIO is not set | ||
| 262 | # CONFIG_IRDA is not set | ||
| 263 | # CONFIG_BT is not set | ||
| 264 | # CONFIG_IEEE80211 is not set | ||
| 265 | |||
| 266 | # | ||
| 267 | # Device Drivers | ||
| 268 | # | ||
| 269 | |||
| 270 | # | ||
| 271 | # Generic Driver Options | ||
| 272 | # | ||
| 273 | CONFIG_STANDALONE=y | ||
| 274 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 275 | # CONFIG_FW_LOADER is not set | ||
| 276 | # CONFIG_DEBUG_DRIVER is not set | ||
| 277 | |||
| 278 | # | ||
| 279 | # Connector - unified userspace <-> kernelspace linker | ||
| 280 | # | ||
| 281 | # CONFIG_CONNECTOR is not set | ||
| 282 | |||
| 283 | # | ||
| 284 | # Memory Technology Devices (MTD) | ||
| 285 | # | ||
| 286 | # CONFIG_MTD is not set | ||
| 287 | |||
| 288 | # | ||
| 289 | # Parallel port support | ||
| 290 | # | ||
| 291 | # CONFIG_PARPORT is not set | ||
| 292 | |||
| 293 | # | ||
| 294 | # Plug and Play support | ||
| 295 | # | ||
| 296 | CONFIG_PNP=y | ||
| 297 | # CONFIG_PNP_DEBUG is not set | ||
| 298 | |||
| 299 | # | ||
| 300 | # Protocols | ||
| 301 | # | ||
| 302 | CONFIG_PNPACPI=y | ||
| 303 | |||
| 304 | # | ||
| 305 | # Block devices | ||
| 306 | # | ||
| 307 | # CONFIG_BLK_CPQ_DA is not set | ||
| 308 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 309 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 310 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 311 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 312 | CONFIG_BLK_DEV_LOOP=m | ||
| 313 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 9 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
| 314 | CONFIG_BLK_DEV_NBD=m | 10 | CONFIG_BLK_DEV_DM=m |
| 315 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 316 | # CONFIG_BLK_DEV_UB is not set | ||
| 317 | CONFIG_BLK_DEV_RAM=m | ||
| 318 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 319 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 320 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 321 | # CONFIG_ATA_OVER_ETH is not set | ||
| 322 | |||
| 323 | # | ||
| 324 | # ATA/ATAPI/MFM/RLL support | ||
| 325 | # | ||
| 326 | CONFIG_IDE=m | ||
| 327 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 328 | CONFIG_BLK_DEV_IDE=m | ||
| 329 | |||
| 330 | # | ||
| 331 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 332 | # | ||
| 333 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 334 | CONFIG_BLK_DEV_IDEDISK=m | ||
| 335 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 336 | CONFIG_BLK_DEV_IDECD=m | ||
| 337 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 338 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
| 339 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
| 340 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 341 | |||
| 342 | # | ||
| 343 | # IDE chipset support/bugfixes | ||
| 344 | # | ||
| 345 | # CONFIG_IDE_GENERIC is not set | ||
| 346 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 347 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 348 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
| 349 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 350 | CONFIG_BLK_DEV_GENERIC=m | 11 | CONFIG_BLK_DEV_GENERIC=m |
| 351 | # CONFIG_BLK_DEV_OPTI621 is not set | 12 | CONFIG_BLK_DEV_IDECD=m |
| 352 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 13 | CONFIG_BLK_DEV_LOOP=m |
| 353 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | 14 | CONFIG_BLK_DEV_MD=m |
| 354 | CONFIG_IDEDMA_PCI_AUTO=y | 15 | CONFIG_BLK_DEV_NBD=m |
| 355 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
| 356 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 357 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 358 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 359 | # CONFIG_BLK_DEV_CMD64X is not set | ||
| 360 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 361 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 362 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 363 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 364 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 365 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 366 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 367 | CONFIG_BLK_DEV_PIIX=m | 16 | CONFIG_BLK_DEV_PIIX=m |
| 368 | # CONFIG_BLK_DEV_IT821X is not set | 17 | CONFIG_BLK_DEV_RAM=m |
| 369 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 370 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 371 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 372 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 373 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 374 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 375 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 376 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 377 | # CONFIG_IDE_ARM is not set | ||
| 378 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 379 | # CONFIG_IDEDMA_IVB is not set | ||
| 380 | CONFIG_IDEDMA_AUTO=y | ||
| 381 | # CONFIG_BLK_DEV_HD is not set | ||
| 382 | |||
| 383 | # | ||
| 384 | # SCSI device support | ||
| 385 | # | ||
| 386 | # CONFIG_RAID_ATTRS is not set | ||
| 387 | CONFIG_SCSI=y | ||
| 388 | CONFIG_SCSI_PROC_FS=y | ||
| 389 | |||
| 390 | # | ||
| 391 | # SCSI support type (disk, tape, CD-ROM) | ||
| 392 | # | ||
| 393 | CONFIG_BLK_DEV_SD=y | 18 | CONFIG_BLK_DEV_SD=y |
| 394 | # CONFIG_CHR_DEV_ST is not set | 19 | CONFIG_CIFS=m |
| 395 | # CONFIG_CHR_DEV_OSST is not set | 20 | CONFIG_CIFS_POSIX=y |
| 396 | # CONFIG_BLK_DEV_SR is not set | 21 | CONFIG_CIFS_STATS=y |
| 397 | # CONFIG_CHR_DEV_SG is not set | 22 | CONFIG_CIFS_XATTR=y |
| 398 | # CONFIG_CHR_DEV_SCH is not set | 23 | CONFIG_CRYPTO_DES=y |
| 399 | 24 | CONFIG_CRYPTO_MD5=y | |
| 400 | # | 25 | CONFIG_DEBUG_KERNEL=y |
| 401 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 26 | CONFIG_DEBUG_MUTEXES=y |
| 402 | # | ||
| 403 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 404 | CONFIG_SCSI_CONSTANTS=y | ||
| 405 | CONFIG_SCSI_LOGGING=y | ||
| 406 | |||
| 407 | # | ||
| 408 | # SCSI Transport Attributes | ||
| 409 | # | ||
| 410 | CONFIG_SCSI_SPI_ATTRS=m | ||
| 411 | # CONFIG_SCSI_FC_ATTRS is not set | ||
| 412 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 413 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 414 | |||
| 415 | # | ||
| 416 | # SCSI low-level drivers | ||
| 417 | # | ||
| 418 | # CONFIG_ISCSI_TCP is not set | ||
| 419 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 420 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 421 | # CONFIG_SCSI_ACARD is not set | ||
| 422 | # CONFIG_SCSI_AACRAID is not set | ||
| 423 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 424 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 425 | # CONFIG_SCSI_AIC79XX is not set | ||
| 426 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 427 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 428 | # CONFIG_MEGARAID_SAS is not set | ||
| 429 | # CONFIG_SCSI_SATA is not set | ||
| 430 | # CONFIG_SCSI_DMX3191D is not set | ||
| 431 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 432 | # CONFIG_SCSI_IPS is not set | ||
| 433 | # CONFIG_SCSI_INITIO is not set | ||
| 434 | # CONFIG_SCSI_INIA100 is not set | ||
| 435 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
| 436 | # CONFIG_SCSI_IPR is not set | ||
| 437 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
| 438 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 439 | # CONFIG_SCSI_QLA_FC is not set | ||
| 440 | # CONFIG_SCSI_LPFC is not set | ||
| 441 | # CONFIG_SCSI_DC395x is not set | ||
| 442 | # CONFIG_SCSI_DC390T is not set | ||
| 443 | # CONFIG_SCSI_DEBUG is not set | ||
| 444 | |||
| 445 | # | ||
| 446 | # Multi-device support (RAID and LVM) | ||
| 447 | # | ||
| 448 | CONFIG_MD=y | ||
| 449 | CONFIG_BLK_DEV_MD=m | ||
| 450 | CONFIG_MD_LINEAR=m | ||
| 451 | CONFIG_MD_RAID0=m | ||
| 452 | CONFIG_MD_RAID1=m | ||
| 453 | CONFIG_MD_RAID10=m | ||
| 454 | CONFIG_MD_RAID5=m | ||
| 455 | CONFIG_MD_RAID6=m | ||
| 456 | CONFIG_MD_MULTIPATH=m | ||
| 457 | # CONFIG_MD_FAULTY is not set | ||
| 458 | CONFIG_BLK_DEV_DM=m | ||
| 459 | CONFIG_DM_CRYPT=m | 27 | CONFIG_DM_CRYPT=m |
| 460 | CONFIG_DM_SNAPSHOT=m | ||
| 461 | CONFIG_DM_MIRROR=m | 28 | CONFIG_DM_MIRROR=m |
| 29 | CONFIG_DM_SNAPSHOT=m | ||
| 462 | CONFIG_DM_ZERO=m | 30 | CONFIG_DM_ZERO=m |
| 463 | # CONFIG_DM_MULTIPATH is not set | ||
| 464 | |||
| 465 | # | ||
| 466 | # Fusion MPT device support | ||
| 467 | # | ||
| 468 | # CONFIG_FUSION is not set | ||
| 469 | # CONFIG_FUSION_SPI is not set | ||
| 470 | # CONFIG_FUSION_FC is not set | ||
| 471 | # CONFIG_FUSION_SAS is not set | ||
| 472 | |||
| 473 | # | ||
| 474 | # IEEE 1394 (FireWire) support | ||
| 475 | # | ||
| 476 | # CONFIG_IEEE1394 is not set | ||
| 477 | |||
| 478 | # | ||
| 479 | # I2O device support | ||
| 480 | # | ||
| 481 | # CONFIG_I2O is not set | ||
| 482 | |||
| 483 | # | ||
| 484 | # Network device support | ||
| 485 | # | ||
| 486 | CONFIG_NETDEVICES=y | ||
| 487 | CONFIG_DUMMY=y | ||
| 488 | # CONFIG_BONDING is not set | ||
| 489 | # CONFIG_EQUALIZER is not set | ||
| 490 | # CONFIG_TUN is not set | ||
| 491 | # CONFIG_NET_SB1000 is not set | ||
| 492 | |||
| 493 | # | ||
| 494 | # ARCnet devices | ||
| 495 | # | ||
| 496 | # CONFIG_ARCNET is not set | ||
| 497 | |||
| 498 | # | ||
| 499 | # PHY device support | ||
| 500 | # | ||
| 501 | # CONFIG_PHYLIB is not set | ||
| 502 | |||
| 503 | # | ||
| 504 | # Ethernet (10 or 100Mbit) | ||
| 505 | # | ||
| 506 | CONFIG_NET_ETHERNET=y | ||
| 507 | CONFIG_MII=y | ||
| 508 | # CONFIG_HAPPYMEAL is not set | ||
| 509 | # CONFIG_SUNGEM is not set | ||
| 510 | # CONFIG_CASSINI is not set | ||
| 511 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 512 | |||
| 513 | # | ||
| 514 | # Tulip family network device support | ||
| 515 | # | ||
| 516 | # CONFIG_NET_TULIP is not set | ||
| 517 | # CONFIG_HP100 is not set | ||
| 518 | CONFIG_NET_PCI=y | ||
| 519 | # CONFIG_PCNET32 is not set | ||
| 520 | # CONFIG_AMD8111_ETH is not set | ||
| 521 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 522 | # CONFIG_B44 is not set | ||
| 523 | # CONFIG_FORCEDETH is not set | ||
| 524 | # CONFIG_DGRS is not set | ||
| 525 | CONFIG_EEPRO100=y | ||
| 526 | # CONFIG_E100 is not set | ||
| 527 | # CONFIG_FEALNX is not set | ||
| 528 | # CONFIG_NATSEMI is not set | ||
| 529 | # CONFIG_NE2K_PCI is not set | ||
| 530 | # CONFIG_8139CP is not set | ||
| 531 | # CONFIG_8139TOO is not set | ||
| 532 | # CONFIG_SIS900 is not set | ||
| 533 | # CONFIG_EPIC100 is not set | ||
| 534 | # CONFIG_SUNDANCE is not set | ||
| 535 | # CONFIG_VIA_RHINE is not set | ||
| 536 | |||
| 537 | # | ||
| 538 | # Ethernet (1000 Mbit) | ||
| 539 | # | ||
| 540 | # CONFIG_ACENIC is not set | ||
| 541 | # CONFIG_DL2K is not set | ||
| 542 | # CONFIG_E1000 is not set | ||
| 543 | # CONFIG_NS83820 is not set | ||
| 544 | # CONFIG_HAMACHI is not set | ||
| 545 | # CONFIG_YELLOWFIN is not set | ||
| 546 | # CONFIG_R8169 is not set | ||
| 547 | # CONFIG_SIS190 is not set | ||
| 548 | # CONFIG_SKGE is not set | ||
| 549 | # CONFIG_SKY2 is not set | ||
| 550 | # CONFIG_SK98LIN is not set | ||
| 551 | # CONFIG_VIA_VELOCITY is not set | ||
| 552 | # CONFIG_TIGON3 is not set | ||
| 553 | # CONFIG_BNX2 is not set | ||
| 554 | |||
| 555 | # | ||
| 556 | # Ethernet (10000 Mbit) | ||
| 557 | # | ||
| 558 | # CONFIG_CHELSIO_T1 is not set | ||
| 559 | # CONFIG_IXGB is not set | ||
| 560 | # CONFIG_S2IO is not set | ||
| 561 | |||
| 562 | # | ||
| 563 | # Token Ring devices | ||
| 564 | # | ||
| 565 | # CONFIG_TR is not set | ||
| 566 | |||
| 567 | # | ||
| 568 | # Wireless LAN (non-hamradio) | ||
| 569 | # | ||
| 570 | # CONFIG_NET_RADIO is not set | ||
| 571 | |||
| 572 | # | ||
| 573 | # Wan interfaces | ||
| 574 | # | ||
| 575 | # CONFIG_WAN is not set | ||
| 576 | # CONFIG_FDDI is not set | ||
| 577 | # CONFIG_HIPPI is not set | ||
| 578 | # CONFIG_PPP is not set | ||
| 579 | # CONFIG_SLIP is not set | ||
| 580 | # CONFIG_NET_FC is not set | ||
| 581 | # CONFIG_SHAPER is not set | ||
| 582 | # CONFIG_NETCONSOLE is not set | ||
| 583 | # CONFIG_NETPOLL is not set | ||
| 584 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 585 | |||
| 586 | # | ||
| 587 | # ISDN subsystem | ||
| 588 | # | ||
| 589 | # CONFIG_ISDN is not set | ||
| 590 | |||
| 591 | # | ||
| 592 | # Telephony Support | ||
| 593 | # | ||
| 594 | # CONFIG_PHONE is not set | ||
| 595 | |||
| 596 | # | ||
| 597 | # Input device support | ||
| 598 | # | ||
| 599 | CONFIG_INPUT=y | ||
| 600 | |||
| 601 | # | ||
| 602 | # Userland interfaces | ||
| 603 | # | ||
| 604 | CONFIG_INPUT_MOUSEDEV=y | ||
| 605 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 606 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 607 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 608 | # CONFIG_INPUT_JOYDEV is not set | ||
| 609 | # CONFIG_INPUT_TSDEV is not set | ||
| 610 | CONFIG_INPUT_EVDEV=y | ||
| 611 | # CONFIG_INPUT_EVBUG is not set | ||
| 612 | |||
| 613 | # | ||
| 614 | # Input Device Drivers | ||
| 615 | # | ||
| 616 | CONFIG_INPUT_KEYBOARD=y | ||
| 617 | CONFIG_KEYBOARD_ATKBD=y | ||
| 618 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 619 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 620 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 621 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 622 | CONFIG_INPUT_MOUSE=y | ||
| 623 | CONFIG_MOUSE_PS2=y | ||
| 624 | # CONFIG_MOUSE_SERIAL is not set | ||
| 625 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 626 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 627 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 628 | # CONFIG_INPUT_MISC is not set | ||
| 629 | |||
| 630 | # | ||
| 631 | # Hardware I/O ports | ||
| 632 | # | ||
| 633 | CONFIG_SERIO=y | ||
| 634 | CONFIG_SERIO_I8042=y | ||
| 635 | CONFIG_SERIO_SERPORT=y | ||
| 636 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 637 | CONFIG_SERIO_LIBPS2=y | ||
| 638 | # CONFIG_SERIO_RAW is not set | ||
| 639 | # CONFIG_GAMEPORT is not set | ||
| 640 | |||
| 641 | # | ||
| 642 | # Character devices | ||
| 643 | # | ||
| 644 | CONFIG_VT=y | ||
| 645 | CONFIG_VT_CONSOLE=y | ||
| 646 | CONFIG_HW_CONSOLE=y | ||
| 647 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 648 | |||
| 649 | # | ||
| 650 | # Serial drivers | ||
| 651 | # | ||
| 652 | CONFIG_SERIAL_8250=y | ||
| 653 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 654 | CONFIG_SERIAL_8250_ACPI=y | ||
| 655 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
| 656 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 657 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 658 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 659 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 660 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 661 | |||
| 662 | # | ||
| 663 | # Non-8250 serial port support | ||
| 664 | # | ||
| 665 | CONFIG_SERIAL_CORE=y | ||
| 666 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 667 | # CONFIG_SERIAL_JSM is not set | ||
| 668 | CONFIG_UNIX98_PTYS=y | ||
| 669 | CONFIG_LEGACY_PTYS=y | ||
| 670 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 671 | |||
| 672 | # | ||
| 673 | # IPMI | ||
| 674 | # | ||
| 675 | # CONFIG_IPMI_HANDLER is not set | ||
| 676 | |||
| 677 | # | ||
| 678 | # Watchdog Cards | ||
| 679 | # | ||
| 680 | # CONFIG_WATCHDOG is not set | ||
| 681 | # CONFIG_HW_RANDOM is not set | ||
| 682 | CONFIG_EFI_RTC=y | ||
| 683 | # CONFIG_DTLK is not set | ||
| 684 | # CONFIG_R3964 is not set | ||
| 685 | # CONFIG_APPLICOM is not set | ||
| 686 | |||
| 687 | # | ||
| 688 | # Ftape, the floppy tape device driver | ||
| 689 | # | ||
| 690 | CONFIG_AGP=m | ||
| 691 | CONFIG_AGP_I460=m | ||
| 692 | CONFIG_DRM=m | 31 | CONFIG_DRM=m |
| 693 | # CONFIG_DRM_TDFX is not set | ||
| 694 | CONFIG_DRM_R128=m | 32 | CONFIG_DRM_R128=m |
| 695 | # CONFIG_DRM_RADEON is not set | 33 | CONFIG_DUMMY=y |
| 696 | # CONFIG_DRM_MGA is not set | 34 | CONFIG_EFI_PARTITION=y |
| 697 | # CONFIG_DRM_SIS is not set | 35 | CONFIG_EFI_RTC=y |
| 698 | # CONFIG_DRM_VIA is not set | 36 | CONFIG_EFI_VARS=y |
| 699 | # CONFIG_DRM_SAVAGE is not set | 37 | CONFIG_EXPERIMENTAL=y |
| 700 | # CONFIG_RAW_DRIVER is not set | ||
| 701 | # CONFIG_HPET is not set | ||
| 702 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 703 | |||
| 704 | # | ||
| 705 | # TPM devices | ||
| 706 | # | ||
| 707 | # CONFIG_TCG_TPM is not set | ||
| 708 | # CONFIG_TELCLOCK is not set | ||
| 709 | |||
| 710 | # | ||
| 711 | # I2C support | ||
| 712 | # | ||
| 713 | CONFIG_I2C=y | ||
| 714 | CONFIG_I2C_CHARDEV=y | ||
| 715 | |||
| 716 | # | ||
| 717 | # I2C Algorithms | ||
| 718 | # | ||
| 719 | CONFIG_I2C_ALGOBIT=y | ||
| 720 | # CONFIG_I2C_ALGOPCF is not set | ||
| 721 | # CONFIG_I2C_ALGOPCA is not set | ||
| 722 | |||
| 723 | # | ||
| 724 | # I2C Hardware Bus support | ||
| 725 | # | ||
| 726 | # CONFIG_I2C_ALI1535 is not set | ||
| 727 | # CONFIG_I2C_ALI1563 is not set | ||
| 728 | # CONFIG_I2C_ALI15X3 is not set | ||
| 729 | # CONFIG_I2C_AMD756 is not set | ||
| 730 | # CONFIG_I2C_AMD8111 is not set | ||
| 731 | # CONFIG_I2C_I801 is not set | ||
| 732 | # CONFIG_I2C_I810 is not set | ||
| 733 | # CONFIG_I2C_PIIX4 is not set | ||
| 734 | # CONFIG_I2C_NFORCE2 is not set | ||
| 735 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 736 | # CONFIG_I2C_PROSAVAGE is not set | ||
| 737 | # CONFIG_I2C_SAVAGE4 is not set | ||
| 738 | # CONFIG_SCx200_ACB is not set | ||
| 739 | # CONFIG_I2C_SIS5595 is not set | ||
| 740 | # CONFIG_I2C_SIS630 is not set | ||
| 741 | # CONFIG_I2C_SIS96X is not set | ||
| 742 | # CONFIG_I2C_STUB is not set | ||
| 743 | # CONFIG_I2C_VIA is not set | ||
| 744 | # CONFIG_I2C_VIAPRO is not set | ||
| 745 | # CONFIG_I2C_VOODOO3 is not set | ||
| 746 | # CONFIG_I2C_PCA_ISA is not set | ||
| 747 | |||
| 748 | # | ||
| 749 | # Miscellaneous I2C Chip support | ||
| 750 | # | ||
| 751 | # CONFIG_SENSORS_DS1337 is not set | ||
| 752 | # CONFIG_SENSORS_DS1374 is not set | ||
| 753 | # CONFIG_EEPROM_LEGACY is not set | ||
| 754 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 755 | # CONFIG_SENSORS_PCA9539 is not set | ||
| 756 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 757 | # CONFIG_SENSORS_RTC8564 is not set | ||
| 758 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 759 | # CONFIG_RTC_X1205_I2C is not set | ||
| 760 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 761 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 762 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 763 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 764 | |||
| 765 | # | ||
| 766 | # SPI support | ||
| 767 | # | ||
| 768 | # CONFIG_SPI is not set | ||
| 769 | # CONFIG_SPI_MASTER is not set | ||
| 770 | |||
| 771 | # | ||
| 772 | # Dallas's 1-wire bus | ||
| 773 | # | ||
| 774 | # CONFIG_W1 is not set | ||
| 775 | |||
| 776 | # | ||
| 777 | # Hardware Monitoring support | ||
| 778 | # | ||
| 779 | CONFIG_HWMON=y | ||
| 780 | # CONFIG_HWMON_VID is not set | ||
| 781 | # CONFIG_SENSORS_ADM1021 is not set | ||
| 782 | # CONFIG_SENSORS_ADM1025 is not set | ||
| 783 | # CONFIG_SENSORS_ADM1026 is not set | ||
| 784 | # CONFIG_SENSORS_ADM1031 is not set | ||
| 785 | # CONFIG_SENSORS_ADM9240 is not set | ||
| 786 | # CONFIG_SENSORS_ASB100 is not set | ||
| 787 | # CONFIG_SENSORS_ATXP1 is not set | ||
| 788 | # CONFIG_SENSORS_DS1621 is not set | ||
| 789 | # CONFIG_SENSORS_F71805F is not set | ||
| 790 | # CONFIG_SENSORS_FSCHER is not set | ||
| 791 | # CONFIG_SENSORS_FSCPOS is not set | ||
| 792 | # CONFIG_SENSORS_GL518SM is not set | ||
| 793 | # CONFIG_SENSORS_GL520SM is not set | ||
| 794 | # CONFIG_SENSORS_IT87 is not set | ||
| 795 | # CONFIG_SENSORS_LM63 is not set | ||
| 796 | # CONFIG_SENSORS_LM75 is not set | ||
| 797 | # CONFIG_SENSORS_LM77 is not set | ||
| 798 | # CONFIG_SENSORS_LM78 is not set | ||
| 799 | # CONFIG_SENSORS_LM80 is not set | ||
| 800 | # CONFIG_SENSORS_LM83 is not set | ||
| 801 | # CONFIG_SENSORS_LM85 is not set | ||
| 802 | # CONFIG_SENSORS_LM87 is not set | ||
| 803 | # CONFIG_SENSORS_LM90 is not set | ||
| 804 | # CONFIG_SENSORS_LM92 is not set | ||
| 805 | # CONFIG_SENSORS_MAX1619 is not set | ||
| 806 | # CONFIG_SENSORS_PC87360 is not set | ||
| 807 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 808 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 809 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 810 | # CONFIG_SENSORS_VIA686A is not set | ||
| 811 | # CONFIG_SENSORS_VT8231 is not set | ||
| 812 | # CONFIG_SENSORS_W83781D is not set | ||
| 813 | # CONFIG_SENSORS_W83792D is not set | ||
| 814 | # CONFIG_SENSORS_W83L785TS is not set | ||
| 815 | # CONFIG_SENSORS_W83627HF is not set | ||
| 816 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 817 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 818 | |||
| 819 | # | ||
| 820 | # Misc devices | ||
| 821 | # | ||
| 822 | |||
| 823 | # | ||
| 824 | # Multimedia Capabilities Port drivers | ||
| 825 | # | ||
| 826 | |||
| 827 | # | ||
| 828 | # Multimedia devices | ||
| 829 | # | ||
| 830 | # CONFIG_VIDEO_DEV is not set | ||
| 831 | |||
| 832 | # | ||
| 833 | # Digital Video Broadcasting Devices | ||
| 834 | # | ||
| 835 | # CONFIG_DVB is not set | ||
| 836 | |||
| 837 | # | ||
| 838 | # Graphics support | ||
| 839 | # | ||
| 840 | # CONFIG_FB is not set | ||
| 841 | |||
| 842 | # | ||
| 843 | # Console display driver support | ||
| 844 | # | ||
| 845 | CONFIG_VGA_CONSOLE=y | ||
| 846 | CONFIG_DUMMY_CONSOLE=y | ||
| 847 | |||
| 848 | # | ||
| 849 | # Sound | ||
| 850 | # | ||
| 851 | CONFIG_SOUND=m | ||
| 852 | |||
| 853 | # | ||
| 854 | # Advanced Linux Sound Architecture | ||
| 855 | # | ||
| 856 | CONFIG_SND=m | ||
| 857 | CONFIG_SND_TIMER=m | ||
| 858 | CONFIG_SND_PCM=m | ||
| 859 | CONFIG_SND_HWDEP=m | ||
| 860 | CONFIG_SND_RAWMIDI=m | ||
| 861 | CONFIG_SND_SEQUENCER=m | ||
| 862 | # CONFIG_SND_SEQ_DUMMY is not set | ||
| 863 | CONFIG_SND_OSSEMUL=y | ||
| 864 | CONFIG_SND_MIXER_OSS=m | ||
| 865 | CONFIG_SND_PCM_OSS=m | ||
| 866 | # CONFIG_SND_SEQUENCER_OSS is not set | ||
| 867 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 868 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 869 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
| 870 | # CONFIG_SND_DEBUG is not set | ||
| 871 | |||
| 872 | # | ||
| 873 | # Generic devices | ||
| 874 | # | ||
| 875 | CONFIG_SND_OPL3_LIB=m | ||
| 876 | CONFIG_SND_AC97_CODEC=m | ||
| 877 | CONFIG_SND_AC97_BUS=m | ||
| 878 | # CONFIG_SND_DUMMY is not set | ||
| 879 | # CONFIG_SND_VIRMIDI is not set | ||
| 880 | # CONFIG_SND_MTPAV is not set | ||
| 881 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 882 | # CONFIG_SND_MPU401 is not set | ||
| 883 | |||
| 884 | # | ||
| 885 | # PCI devices | ||
| 886 | # | ||
| 887 | # CONFIG_SND_AD1889 is not set | ||
| 888 | # CONFIG_SND_ALI5451 is not set | ||
| 889 | # CONFIG_SND_ATIIXP is not set | ||
| 890 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
| 891 | # CONFIG_SND_AU8810 is not set | ||
| 892 | # CONFIG_SND_AU8820 is not set | ||
| 893 | # CONFIG_SND_AU8830 is not set | ||
| 894 | # CONFIG_SND_AZT3328 is not set | ||
| 895 | # CONFIG_SND_BT87X is not set | ||
| 896 | # CONFIG_SND_CA0106 is not set | ||
| 897 | # CONFIG_SND_CMIPCI is not set | ||
| 898 | CONFIG_SND_CS4281=m | ||
| 899 | # CONFIG_SND_CS46XX is not set | ||
| 900 | # CONFIG_SND_EMU10K1 is not set | ||
| 901 | # CONFIG_SND_EMU10K1X is not set | ||
| 902 | # CONFIG_SND_ENS1370 is not set | ||
| 903 | # CONFIG_SND_ENS1371 is not set | ||
| 904 | # CONFIG_SND_ES1938 is not set | ||
| 905 | # CONFIG_SND_ES1968 is not set | ||
| 906 | # CONFIG_SND_FM801 is not set | ||
| 907 | # CONFIG_SND_HDA_INTEL is not set | ||
| 908 | # CONFIG_SND_HDSP is not set | ||
| 909 | # CONFIG_SND_HDSPM is not set | ||
| 910 | # CONFIG_SND_ICE1712 is not set | ||
| 911 | # CONFIG_SND_ICE1724 is not set | ||
| 912 | # CONFIG_SND_INTEL8X0 is not set | ||
| 913 | # CONFIG_SND_INTEL8X0M is not set | ||
| 914 | # CONFIG_SND_KORG1212 is not set | ||
| 915 | # CONFIG_SND_MAESTRO3 is not set | ||
| 916 | # CONFIG_SND_MIXART is not set | ||
| 917 | # CONFIG_SND_NM256 is not set | ||
| 918 | # CONFIG_SND_PCXHR is not set | ||
| 919 | # CONFIG_SND_RME32 is not set | ||
| 920 | # CONFIG_SND_RME96 is not set | ||
| 921 | # CONFIG_SND_RME9652 is not set | ||
| 922 | # CONFIG_SND_SONICVIBES is not set | ||
| 923 | # CONFIG_SND_TRIDENT is not set | ||
| 924 | # CONFIG_SND_VIA82XX is not set | ||
| 925 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
| 926 | # CONFIG_SND_VX222 is not set | ||
| 927 | # CONFIG_SND_YMFPCI is not set | ||
| 928 | |||
| 929 | # | ||
| 930 | # USB devices | ||
| 931 | # | ||
| 932 | # CONFIG_SND_USB_AUDIO is not set | ||
| 933 | |||
| 934 | # | ||
| 935 | # Open Sound System | ||
| 936 | # | ||
| 937 | # CONFIG_SOUND_PRIME is not set | ||
| 938 | |||
| 939 | # | ||
| 940 | # USB support | ||
| 941 | # | ||
| 942 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 943 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 944 | CONFIG_USB=m | ||
| 945 | # CONFIG_USB_DEBUG is not set | ||
| 946 | |||
| 947 | # | ||
| 948 | # Miscellaneous USB options | ||
| 949 | # | ||
| 950 | CONFIG_USB_DEVICEFS=y | ||
| 951 | # CONFIG_USB_BANDWIDTH is not set | ||
| 952 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 953 | # CONFIG_USB_SUSPEND is not set | ||
| 954 | # CONFIG_USB_OTG is not set | ||
| 955 | |||
| 956 | # | ||
| 957 | # USB Host Controller Drivers | ||
| 958 | # | ||
| 959 | # CONFIG_USB_EHCI_HCD is not set | ||
| 960 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 961 | # CONFIG_USB_OHCI_HCD is not set | ||
| 962 | CONFIG_USB_UHCI_HCD=m | ||
| 963 | # CONFIG_USB_SL811_HCD is not set | ||
| 964 | |||
| 965 | # | ||
| 966 | # USB Device Class drivers | ||
| 967 | # | ||
| 968 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | ||
| 969 | CONFIG_USB_ACM=m | ||
| 970 | CONFIG_USB_PRINTER=m | ||
| 971 | |||
| 972 | # | ||
| 973 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 974 | # | ||
| 975 | |||
| 976 | # | ||
| 977 | # may also be needed; see USB_STORAGE Help for more information | ||
| 978 | # | ||
| 979 | CONFIG_USB_STORAGE=m | ||
| 980 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 981 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 982 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 983 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 984 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 985 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 986 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 987 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 988 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 989 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 990 | # CONFIG_USB_LIBUSUAL is not set | ||
| 991 | |||
| 992 | # | ||
| 993 | # USB Input Devices | ||
| 994 | # | ||
| 995 | CONFIG_USB_HID=m | ||
| 996 | CONFIG_USB_HIDINPUT=y | ||
| 997 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 998 | # CONFIG_HID_FF is not set | ||
| 999 | CONFIG_USB_HIDDEV=y | ||
| 1000 | |||
| 1001 | # | ||
| 1002 | # USB HID Boot Protocol drivers | ||
| 1003 | # | ||
| 1004 | # CONFIG_USB_KBD is not set | ||
| 1005 | # CONFIG_USB_MOUSE is not set | ||
| 1006 | # CONFIG_USB_AIPTEK is not set | ||
| 1007 | # CONFIG_USB_WACOM is not set | ||
| 1008 | # CONFIG_USB_ACECAD is not set | ||
| 1009 | # CONFIG_USB_KBTAB is not set | ||
| 1010 | # CONFIG_USB_POWERMATE is not set | ||
| 1011 | # CONFIG_USB_MTOUCH is not set | ||
| 1012 | # CONFIG_USB_ITMTOUCH is not set | ||
| 1013 | # CONFIG_USB_EGALAX is not set | ||
| 1014 | # CONFIG_USB_YEALINK is not set | ||
| 1015 | # CONFIG_USB_XPAD is not set | ||
| 1016 | # CONFIG_USB_ATI_REMOTE is not set | ||
| 1017 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
| 1018 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
| 1019 | # CONFIG_USB_APPLETOUCH is not set | ||
| 1020 | |||
| 1021 | # | ||
| 1022 | # USB Imaging devices | ||
| 1023 | # | ||
| 1024 | # CONFIG_USB_MDC800 is not set | ||
| 1025 | # CONFIG_USB_MICROTEK is not set | ||
| 1026 | |||
| 1027 | # | ||
| 1028 | # USB Multimedia devices | ||
| 1029 | # | ||
| 1030 | # CONFIG_USB_DABUSB is not set | ||
| 1031 | |||
| 1032 | # | ||
| 1033 | # Video4Linux support is needed for USB Multimedia device support | ||
| 1034 | # | ||
| 1035 | |||
| 1036 | # | ||
| 1037 | # USB Network Adapters | ||
| 1038 | # | ||
| 1039 | # CONFIG_USB_CATC is not set | ||
| 1040 | # CONFIG_USB_KAWETH is not set | ||
| 1041 | # CONFIG_USB_PEGASUS is not set | ||
| 1042 | # CONFIG_USB_RTL8150 is not set | ||
| 1043 | # CONFIG_USB_USBNET is not set | ||
| 1044 | CONFIG_USB_MON=y | ||
| 1045 | |||
| 1046 | # | ||
| 1047 | # USB port drivers | ||
| 1048 | # | ||
| 1049 | |||
| 1050 | # | ||
| 1051 | # USB Serial Converter support | ||
| 1052 | # | ||
| 1053 | # CONFIG_USB_SERIAL is not set | ||
| 1054 | |||
| 1055 | # | ||
| 1056 | # USB Miscellaneous drivers | ||
| 1057 | # | ||
| 1058 | # CONFIG_USB_EMI62 is not set | ||
| 1059 | # CONFIG_USB_EMI26 is not set | ||
| 1060 | # CONFIG_USB_AUERSWALD is not set | ||
| 1061 | # CONFIG_USB_RIO500 is not set | ||
| 1062 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1063 | # CONFIG_USB_LCD is not set | ||
| 1064 | # CONFIG_USB_LED is not set | ||
| 1065 | # CONFIG_USB_CYTHERM is not set | ||
| 1066 | # CONFIG_USB_PHIDGETKIT is not set | ||
| 1067 | # CONFIG_USB_PHIDGETSERVO is not set | ||
| 1068 | # CONFIG_USB_IDMOUSE is not set | ||
| 1069 | # CONFIG_USB_LD is not set | ||
| 1070 | # CONFIG_USB_TEST is not set | ||
| 1071 | |||
| 1072 | # | ||
| 1073 | # USB DSL modem support | ||
| 1074 | # | ||
| 1075 | |||
| 1076 | # | ||
| 1077 | # USB Gadget Support | ||
| 1078 | # | ||
| 1079 | # CONFIG_USB_GADGET is not set | ||
| 1080 | |||
| 1081 | # | ||
| 1082 | # MMC/SD Card support | ||
| 1083 | # | ||
| 1084 | # CONFIG_MMC is not set | ||
| 1085 | |||
| 1086 | # | ||
| 1087 | # InfiniBand support | ||
| 1088 | # | ||
| 1089 | # CONFIG_INFINIBAND is not set | ||
| 1090 | |||
| 1091 | # | ||
| 1092 | # EDAC - error detection and reporting (RAS) | ||
| 1093 | # | ||
| 1094 | |||
| 1095 | # | ||
| 1096 | # File systems | ||
| 1097 | # | ||
| 1098 | CONFIG_EXT2_FS=y | 38 | CONFIG_EXT2_FS=y |
| 1099 | # CONFIG_EXT2_FS_XATTR is not set | ||
| 1100 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1101 | CONFIG_EXT3_FS=y | 39 | CONFIG_EXT3_FS=y |
| 1102 | CONFIG_EXT3_FS_XATTR=y | 40 | CONFIG_HUGETLBFS=y |
| 1103 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 41 | # CONFIG_HW_RANDOM is not set |
| 1104 | # CONFIG_EXT3_FS_SECURITY is not set | 42 | CONFIG_I2C_CHARDEV=y |
| 1105 | CONFIG_JBD=y | 43 | CONFIG_I2C=y |
| 1106 | # CONFIG_JBD_DEBUG is not set | 44 | CONFIG_IA64_DIG=y |
| 1107 | CONFIG_FS_MBCACHE=y | 45 | CONFIG_IA64_PALINFO=y |
| 1108 | # CONFIG_REISERFS_FS is not set | 46 | CONFIG_IDE=m |
| 1109 | # CONFIG_JFS_FS is not set | 47 | CONFIG_INET=y |
| 1110 | CONFIG_FS_POSIX_ACL=y | ||
| 1111 | CONFIG_XFS_FS=y | ||
| 1112 | CONFIG_XFS_EXPORT=y | ||
| 1113 | CONFIG_XFS_QUOTA=y | ||
| 1114 | CONFIG_XFS_SECURITY=y | ||
| 1115 | CONFIG_XFS_POSIX_ACL=y | ||
| 1116 | # CONFIG_XFS_RT is not set | ||
| 1117 | # CONFIG_OCFS2_FS is not set | ||
| 1118 | # CONFIG_MINIX_FS is not set | ||
| 1119 | # CONFIG_ROMFS_FS is not set | ||
| 1120 | CONFIG_INOTIFY=y | 48 | CONFIG_INOTIFY=y |
| 1121 | # CONFIG_QUOTA is not set | 49 | CONFIG_INPUT_EVDEV=y |
| 1122 | CONFIG_QUOTACTL=y | 50 | # CONFIG_IPV6 is not set |
| 1123 | CONFIG_DNOTIFY=y | ||
| 1124 | CONFIG_AUTOFS_FS=m | ||
| 1125 | CONFIG_AUTOFS4_FS=m | ||
| 1126 | # CONFIG_FUSE_FS is not set | ||
| 1127 | |||
| 1128 | # | ||
| 1129 | # CD-ROM/DVD Filesystems | ||
| 1130 | # | ||
| 1131 | CONFIG_ISO9660_FS=m | 51 | CONFIG_ISO9660_FS=m |
| 1132 | CONFIG_JOLIET=y | 52 | CONFIG_JOLIET=y |
| 1133 | # CONFIG_ZISOFS is not set | 53 | CONFIG_LOG_BUF_SHIFT=16 |
| 1134 | CONFIG_UDF_FS=m | 54 | CONFIG_MAGIC_SYSRQ=y |
| 1135 | CONFIG_UDF_NLS=y | 55 | CONFIG_MD_LINEAR=m |
| 1136 | 56 | CONFIG_MD_MULTIPATH=m | |
| 1137 | # | 57 | CONFIG_MD_RAID0=m |
| 1138 | # DOS/FAT/NT Filesystems | 58 | CONFIG_MD_RAID10=m |
| 1139 | # | 59 | CONFIG_MD_RAID1=m |
| 1140 | CONFIG_FAT_FS=y | 60 | CONFIG_MD=y |
| 1141 | # CONFIG_MSDOS_FS is not set | 61 | CONFIG_MII=y |
| 1142 | CONFIG_VFAT_FS=y | 62 | CONFIG_MODULES=y |
| 1143 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 63 | CONFIG_MODULE_UNLOAD=y |
| 1144 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 64 | CONFIG_NETDEVICES=y |
| 1145 | # CONFIG_NTFS_FS is not set | 65 | CONFIG_NET_ETHERNET=y |
| 1146 | 66 | CONFIG_NET_PCI=y | |
| 1147 | # | 67 | CONFIG_NET=y |
| 1148 | # Pseudo filesystems | 68 | CONFIG_NFSD=m |
| 1149 | # | 69 | CONFIG_NFSD_V4=y |
| 1150 | CONFIG_PROC_FS=y | ||
| 1151 | CONFIG_PROC_KCORE=y | ||
| 1152 | CONFIG_SYSFS=y | ||
| 1153 | CONFIG_TMPFS=y | ||
| 1154 | CONFIG_HUGETLBFS=y | ||
| 1155 | CONFIG_HUGETLB_PAGE=y | ||
| 1156 | CONFIG_RAMFS=y | ||
| 1157 | # CONFIG_RELAYFS_FS is not set | ||
| 1158 | # CONFIG_CONFIGFS_FS is not set | ||
| 1159 | |||
| 1160 | # | ||
| 1161 | # Miscellaneous filesystems | ||
| 1162 | # | ||
| 1163 | # CONFIG_ADFS_FS is not set | ||
| 1164 | # CONFIG_AFFS_FS is not set | ||
| 1165 | # CONFIG_HFS_FS is not set | ||
| 1166 | # CONFIG_HFSPLUS_FS is not set | ||
| 1167 | # CONFIG_BEFS_FS is not set | ||
| 1168 | # CONFIG_BFS_FS is not set | ||
| 1169 | # CONFIG_EFS_FS is not set | ||
| 1170 | # CONFIG_CRAMFS is not set | ||
| 1171 | # CONFIG_VXFS_FS is not set | ||
| 1172 | # CONFIG_HPFS_FS is not set | ||
| 1173 | # CONFIG_QNX4FS_FS is not set | ||
| 1174 | # CONFIG_SYSV_FS is not set | ||
| 1175 | # CONFIG_UFS_FS is not set | ||
| 1176 | |||
| 1177 | # | ||
| 1178 | # Network File Systems | ||
| 1179 | # | ||
| 1180 | CONFIG_NFS_FS=m | 70 | CONFIG_NFS_FS=m |
| 1181 | CONFIG_NFS_V3=y | 71 | CONFIG_NFS_V3=y |
| 1182 | # CONFIG_NFS_V3_ACL is not set | ||
| 1183 | CONFIG_NFS_V4=y | 72 | CONFIG_NFS_V4=y |
| 1184 | # CONFIG_NFS_DIRECTIO is not set | ||
| 1185 | CONFIG_NFSD=m | ||
| 1186 | CONFIG_NFSD_V3=y | ||
| 1187 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1188 | CONFIG_NFSD_V4=y | ||
| 1189 | CONFIG_NFSD_TCP=y | ||
| 1190 | CONFIG_LOCKD=m | ||
| 1191 | CONFIG_LOCKD_V4=y | ||
| 1192 | CONFIG_EXPORTFS=y | ||
| 1193 | CONFIG_NFS_COMMON=y | ||
| 1194 | CONFIG_SUNRPC=m | ||
| 1195 | CONFIG_SUNRPC_GSS=m | ||
| 1196 | CONFIG_RPCSEC_GSS_KRB5=m | ||
| 1197 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1198 | # CONFIG_SMB_FS is not set | ||
| 1199 | CONFIG_CIFS=m | ||
| 1200 | CONFIG_CIFS_STATS=y | ||
| 1201 | # CONFIG_CIFS_STATS2 is not set | ||
| 1202 | CONFIG_CIFS_XATTR=y | ||
| 1203 | CONFIG_CIFS_POSIX=y | ||
| 1204 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1205 | # CONFIG_NCP_FS is not set | ||
| 1206 | # CONFIG_CODA_FS is not set | ||
| 1207 | # CONFIG_AFS_FS is not set | ||
| 1208 | # CONFIG_9P_FS is not set | ||
| 1209 | |||
| 1210 | # | ||
| 1211 | # Partition Types | ||
| 1212 | # | ||
| 1213 | CONFIG_PARTITION_ADVANCED=y | ||
| 1214 | # CONFIG_ACORN_PARTITION is not set | ||
| 1215 | # CONFIG_OSF_PARTITION is not set | ||
| 1216 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1217 | # CONFIG_ATARI_PARTITION is not set | ||
| 1218 | # CONFIG_MAC_PARTITION is not set | ||
| 1219 | CONFIG_MSDOS_PARTITION=y | ||
| 1220 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1221 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1222 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1223 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1224 | # CONFIG_LDM_PARTITION is not set | ||
| 1225 | CONFIG_SGI_PARTITION=y | ||
| 1226 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1227 | # CONFIG_SUN_PARTITION is not set | ||
| 1228 | # CONFIG_KARMA_PARTITION is not set | ||
| 1229 | CONFIG_EFI_PARTITION=y | ||
| 1230 | |||
| 1231 | # | ||
| 1232 | # Native Language Support | ||
| 1233 | # | ||
| 1234 | CONFIG_NLS=y | ||
| 1235 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1236 | CONFIG_NLS_CODEPAGE_437=y | 73 | CONFIG_NLS_CODEPAGE_437=y |
| 1237 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
| 1238 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
| 1239 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
| 1240 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
| 1241 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
| 1242 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
| 1243 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
| 1244 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
| 1245 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
| 1246 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
| 1247 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
| 1248 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
| 1249 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
| 1250 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
| 1251 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
| 1252 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
| 1253 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
| 1254 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
| 1255 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
| 1256 | # CONFIG_NLS_ISO8859_8 is not set | ||
| 1257 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
| 1258 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
| 1259 | # CONFIG_NLS_ASCII is not set | ||
| 1260 | CONFIG_NLS_ISO8859_1=y | 74 | CONFIG_NLS_ISO8859_1=y |
| 1261 | # CONFIG_NLS_ISO8859_2 is not set | ||
| 1262 | # CONFIG_NLS_ISO8859_3 is not set | ||
| 1263 | # CONFIG_NLS_ISO8859_4 is not set | ||
| 1264 | # CONFIG_NLS_ISO8859_5 is not set | ||
| 1265 | # CONFIG_NLS_ISO8859_6 is not set | ||
| 1266 | # CONFIG_NLS_ISO8859_7 is not set | ||
| 1267 | # CONFIG_NLS_ISO8859_9 is not set | ||
| 1268 | # CONFIG_NLS_ISO8859_13 is not set | ||
| 1269 | # CONFIG_NLS_ISO8859_14 is not set | ||
| 1270 | # CONFIG_NLS_ISO8859_15 is not set | ||
| 1271 | # CONFIG_NLS_KOI8_R is not set | ||
| 1272 | # CONFIG_NLS_KOI8_U is not set | ||
| 1273 | CONFIG_NLS_UTF8=m | 75 | CONFIG_NLS_UTF8=m |
| 1274 | 76 | CONFIG_NR_CPUS=2 | |
| 1275 | # | ||
| 1276 | # Library routines | ||
| 1277 | # | ||
| 1278 | # CONFIG_CRC_CCITT is not set | ||
| 1279 | # CONFIG_CRC16 is not set | ||
| 1280 | CONFIG_CRC32=y | ||
| 1281 | # CONFIG_LIBCRC32C is not set | ||
| 1282 | CONFIG_GENERIC_HARDIRQS=y | ||
| 1283 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 1284 | CONFIG_GENERIC_PENDING_IRQ=y | ||
| 1285 | |||
| 1286 | # | ||
| 1287 | # Instrumentation Support | ||
| 1288 | # | ||
| 1289 | CONFIG_PROFILING=y | ||
| 1290 | CONFIG_OPROFILE=y | 77 | CONFIG_OPROFILE=y |
| 1291 | # CONFIG_KPROBES is not set | 78 | CONFIG_PACKET=y |
| 1292 | 79 | CONFIG_PARTITION_ADVANCED=y | |
| 1293 | # | 80 | CONFIG_PERFMON=y |
| 1294 | # Kernel hacking | 81 | CONFIG_POSIX_MQUEUE=y |
| 1295 | # | 82 | CONFIG_PREEMPT=y |
| 1296 | # CONFIG_PRINTK_TIME is not set | 83 | CONFIG_PROC_KCORE=y |
| 1297 | CONFIG_MAGIC_SYSRQ=y | 84 | CONFIG_PROFILING=y |
| 1298 | CONFIG_DEBUG_KERNEL=y | 85 | CONFIG_SCSI_CONSTANTS=y |
| 1299 | CONFIG_LOG_BUF_SHIFT=16 | 86 | CONFIG_SCSI_LOGGING=y |
| 1300 | CONFIG_DETECT_SOFTLOCKUP=y | 87 | CONFIG_SCSI_QLOGIC_1280=y |
| 1301 | # CONFIG_SCHEDSTATS is not set | 88 | CONFIG_SCSI_SPI_ATTRS=m |
| 1302 | # CONFIG_DEBUG_SLAB is not set | 89 | CONFIG_SCSI=y |
| 1303 | CONFIG_DEBUG_PREEMPT=y | 90 | CONFIG_SERIAL_8250_CONSOLE=y |
| 1304 | CONFIG_DEBUG_MUTEXES=y | 91 | CONFIG_SERIAL_8250_EXTENDED=y |
| 1305 | # CONFIG_DEBUG_SPINLOCK is not set | 92 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 1306 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 93 | CONFIG_SERIAL_8250=y |
| 1307 | # CONFIG_DEBUG_KOBJECT is not set | 94 | CONFIG_SGI_PARTITION=y |
| 1308 | # CONFIG_DEBUG_INFO is not set | 95 | CONFIG_SMP=y |
| 1309 | # CONFIG_DEBUG_FS is not set | 96 | CONFIG_SND_CS4281=m |
| 1310 | # CONFIG_DEBUG_VM is not set | 97 | CONFIG_SND=m |
| 1311 | CONFIG_FORCED_INLINING=y | 98 | CONFIG_SND_MIXER_OSS=m |
| 1312 | # CONFIG_RCU_TORTURE_TEST is not set | 99 | CONFIG_SND_PCM_OSS=m |
| 1313 | # CONFIG_IA64_GRANULE_16MB is not set | 100 | CONFIG_SND_SEQUENCER=m |
| 1314 | CONFIG_IA64_GRANULE_64MB=y | 101 | CONFIG_SOUND=m |
| 1315 | # CONFIG_IA64_PRINT_HAZARDS is not set | 102 | CONFIG_SYSVIPC=y |
| 1316 | # CONFIG_DISABLE_VHPT is not set | 103 | CONFIG_TMPFS=y |
| 1317 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | 104 | CONFIG_UDF_FS=m |
| 1318 | # CONFIG_IA64_DEBUG_IRQ is not set | 105 | CONFIG_UNIX=y |
| 1319 | CONFIG_SYSVIPC_COMPAT=y | 106 | CONFIG_USB_ACM=m |
| 1320 | 107 | CONFIG_USB_DEVICEFS=y | |
| 1321 | # | 108 | CONFIG_USB_HIDDEV=y |
| 1322 | # Security options | 109 | CONFIG_USB=m |
| 1323 | # | 110 | CONFIG_USB_MON=m |
| 1324 | # CONFIG_KEYS is not set | 111 | CONFIG_USB_PRINTER=m |
| 1325 | # CONFIG_SECURITY is not set | 112 | CONFIG_USB_STORAGE=m |
| 1326 | 113 | CONFIG_USB_UHCI_HCD=m | |
| 1327 | # | 114 | CONFIG_VFAT_FS=y |
| 1328 | # Cryptographic options | 115 | # CONFIG_VIRTUAL_MEM_MAP is not set |
| 1329 | # | 116 | CONFIG_XFS_FS=y |
| 1330 | CONFIG_CRYPTO=y | 117 | CONFIG_XFS_POSIX_ACL=y |
| 1331 | # CONFIG_CRYPTO_HMAC is not set | 118 | CONFIG_XFS_QUOTA=y |
| 1332 | # CONFIG_CRYPTO_NULL is not set | ||
| 1333 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1334 | CONFIG_CRYPTO_MD5=y | ||
| 1335 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1336 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1337 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1338 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1339 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1340 | CONFIG_CRYPTO_DES=y | ||
| 1341 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1342 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1343 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1344 | # CONFIG_CRYPTO_AES is not set | ||
| 1345 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1346 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1347 | # CONFIG_CRYPTO_TEA is not set | ||
| 1348 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1349 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1350 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1351 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1352 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1353 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1354 | # CONFIG_CRYPTO_TEST is not set | ||
| 1355 | |||
| 1356 | # | ||
| 1357 | # Hardware crypto devices | ||
| 1358 | # | ||
diff --git a/arch/ia64/configs/generic_defconfig b/arch/ia64/configs/generic_defconfig index 6a4cc506fb5f..01ba5305e98c 100644 --- a/arch/ia64/configs/generic_defconfig +++ b/arch/ia64/configs/generic_defconfig | |||
| @@ -1,1455 +1,133 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.28-rc7 | ||
| 4 | # Mon Dec 8 08:12:07 2008 | ||
| 5 | # | ||
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 7 | |||
| 8 | # | ||
| 9 | # General setup | ||
| 10 | # | ||
| 11 | CONFIG_EXPERIMENTAL=y | ||
| 12 | CONFIG_LOCK_KERNEL=y | ||
| 13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 14 | CONFIG_LOCALVERSION="" | ||
| 15 | CONFIG_LOCALVERSION_AUTO=y | ||
| 16 | CONFIG_SWAP=y | ||
| 17 | CONFIG_SYSVIPC=y | ||
| 18 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 19 | CONFIG_POSIX_MQUEUE=y | ||
| 20 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 21 | # CONFIG_TASKSTATS is not set | ||
| 22 | # CONFIG_AUDIT is not set | ||
| 23 | CONFIG_IKCONFIG=y | ||
| 24 | CONFIG_IKCONFIG_PROC=y | ||
| 25 | CONFIG_LOG_BUF_SHIFT=20 | ||
| 26 | CONFIG_CGROUPS=y | ||
| 27 | # CONFIG_CGROUP_DEBUG is not set | ||
| 28 | # CONFIG_CGROUP_NS is not set | ||
| 29 | # CONFIG_CGROUP_FREEZER is not set | ||
| 30 | # CONFIG_CGROUP_DEVICE is not set | ||
| 31 | CONFIG_CPUSETS=y | ||
| 32 | # CONFIG_GROUP_SCHED is not set | ||
| 33 | # CONFIG_CGROUP_CPUACCT is not set | ||
| 34 | # CONFIG_RESOURCE_COUNTERS is not set | ||
| 35 | CONFIG_SYSFS_DEPRECATED=y | ||
| 36 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 37 | CONFIG_PROC_PID_CPUSET=y | ||
| 38 | # CONFIG_RELAY is not set | ||
| 39 | CONFIG_NAMESPACES=y | ||
| 40 | # CONFIG_UTS_NS is not set | ||
| 41 | # CONFIG_IPC_NS is not set | ||
| 42 | # CONFIG_USER_NS is not set | ||
| 43 | # CONFIG_PID_NS is not set | ||
| 44 | CONFIG_BLK_DEV_INITRD=y | ||
| 45 | CONFIG_INITRAMFS_SOURCE="" | ||
| 46 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 47 | CONFIG_SYSCTL=y | ||
| 48 | # CONFIG_EMBEDDED is not set | ||
| 49 | CONFIG_SYSCTL_SYSCALL=y | ||
| 50 | CONFIG_KALLSYMS=y | ||
| 51 | CONFIG_KALLSYMS_ALL=y | ||
| 52 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 53 | CONFIG_HOTPLUG=y | ||
| 54 | CONFIG_PRINTK=y | ||
| 55 | CONFIG_BUG=y | ||
| 56 | CONFIG_ELF_CORE=y | ||
| 57 | CONFIG_COMPAT_BRK=y | ||
| 58 | CONFIG_BASE_FULL=y | ||
| 59 | CONFIG_FUTEX=y | ||
| 60 | CONFIG_ANON_INODES=y | ||
| 61 | CONFIG_EPOLL=y | ||
| 62 | CONFIG_SIGNALFD=y | ||
| 63 | CONFIG_TIMERFD=y | ||
| 64 | CONFIG_EVENTFD=y | ||
| 65 | CONFIG_SHMEM=y | ||
| 66 | CONFIG_AIO=y | ||
| 67 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 68 | CONFIG_PCI_QUIRKS=y | ||
| 69 | CONFIG_SLUB_DEBUG=y | ||
| 70 | # CONFIG_SLAB is not set | ||
| 71 | CONFIG_SLUB=y | ||
| 72 | # CONFIG_SLOB is not set | ||
| 73 | # CONFIG_PROFILING is not set | ||
| 74 | # CONFIG_MARKERS is not set | ||
| 75 | CONFIG_HAVE_OPROFILE=y | ||
| 76 | # CONFIG_KPROBES is not set | ||
| 77 | CONFIG_HAVE_KPROBES=y | ||
| 78 | CONFIG_HAVE_KRETPROBES=y | ||
| 79 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
| 80 | CONFIG_HAVE_DMA_ATTRS=y | ||
| 81 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
| 82 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
| 83 | CONFIG_SLABINFO=y | ||
| 84 | CONFIG_RT_MUTEXES=y | ||
| 85 | # CONFIG_TINY_SHMEM is not set | ||
| 86 | CONFIG_BASE_SMALL=0 | ||
| 87 | CONFIG_MODULES=y | ||
| 88 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 89 | CONFIG_MODULE_UNLOAD=y | ||
| 90 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 91 | CONFIG_MODVERSIONS=y | ||
| 92 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 93 | CONFIG_KMOD=y | ||
| 94 | CONFIG_STOP_MACHINE=y | ||
| 95 | CONFIG_BLOCK=y | ||
| 96 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 97 | # CONFIG_BLK_DEV_BSG is not set | ||
| 98 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 99 | CONFIG_BLOCK_COMPAT=y | ||
| 100 | |||
| 101 | # | ||
| 102 | # IO Schedulers | ||
| 103 | # | ||
| 104 | CONFIG_IOSCHED_NOOP=y | ||
| 105 | CONFIG_IOSCHED_AS=y | ||
| 106 | CONFIG_IOSCHED_DEADLINE=y | ||
| 107 | CONFIG_IOSCHED_CFQ=y | ||
| 108 | CONFIG_DEFAULT_AS=y | ||
| 109 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 110 | # CONFIG_DEFAULT_CFQ is not set | ||
| 111 | # CONFIG_DEFAULT_NOOP is not set | ||
| 112 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 113 | CONFIG_CLASSIC_RCU=y | ||
| 114 | # CONFIG_FREEZER is not set | ||
| 115 | |||
| 116 | # | ||
| 117 | # Processor type and features | ||
| 118 | # | ||
| 119 | CONFIG_IA64=y | ||
| 120 | CONFIG_64BIT=y | ||
| 121 | CONFIG_ZONE_DMA=y | ||
| 122 | CONFIG_QUICKLIST=y | ||
| 123 | CONFIG_MMU=y | ||
| 124 | CONFIG_SWIOTLB=y | ||
| 125 | CONFIG_IOMMU_HELPER=y | ||
| 126 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 127 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | ||
| 128 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 129 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 130 | CONFIG_GENERIC_TIME=y | ||
| 131 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
| 132 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
| 133 | CONFIG_DMI=y | ||
| 134 | CONFIG_EFI=y | ||
| 135 | CONFIG_GENERIC_IOMAP=y | ||
| 136 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 137 | CONFIG_IA64_UNCACHED_ALLOCATOR=y | ||
| 138 | CONFIG_AUDIT_ARCH=y | ||
| 139 | # CONFIG_PARAVIRT_GUEST is not set | ||
| 140 | CONFIG_IA64_GENERIC=y | ||
| 141 | # CONFIG_IA64_DIG is not set | ||
| 142 | # CONFIG_IA64_DIG_VTD is not set | ||
| 143 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 144 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 145 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 146 | # CONFIG_IA64_SGI_UV is not set | ||
| 147 | # CONFIG_IA64_HP_SIM is not set | ||
| 148 | # CONFIG_IA64_XEN_GUEST is not set | ||
| 149 | # CONFIG_ITANIUM is not set | ||
| 150 | CONFIG_MCKINLEY=y | ||
| 151 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 152 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 153 | # CONFIG_IA64_PAGE_SIZE_16KB is not set | ||
| 154 | CONFIG_IA64_PAGE_SIZE_64KB=y | ||
| 155 | CONFIG_PGTABLE_3=y | ||
| 156 | # CONFIG_PGTABLE_4 is not set | ||
| 157 | CONFIG_HZ=250 | ||
| 158 | # CONFIG_HZ_100 is not set | ||
| 159 | CONFIG_HZ_250=y | ||
| 160 | # CONFIG_HZ_300 is not set | ||
| 161 | # CONFIG_HZ_1000 is not set | ||
| 162 | # CONFIG_SCHED_HRTICK is not set | ||
| 163 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 164 | CONFIG_IA64_CYCLONE=y | ||
| 165 | CONFIG_IOSAPIC=y | ||
| 166 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 167 | # CONFIG_VIRT_CPU_ACCOUNTING is not set | ||
| 168 | CONFIG_SMP=y | ||
| 169 | CONFIG_NR_CPUS=4096 | ||
| 170 | CONFIG_HOTPLUG_CPU=y | ||
| 171 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 172 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
| 173 | # CONFIG_SCHED_SMT is not set | ||
| 174 | # CONFIG_PERMIT_BSP_REMOVE is not set | ||
| 175 | CONFIG_PREEMPT_NONE=y | ||
| 176 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 177 | # CONFIG_PREEMPT is not set | ||
| 178 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 179 | # CONFIG_FLATMEM_MANUAL is not set | ||
| 180 | CONFIG_DISCONTIGMEM_MANUAL=y | ||
| 181 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 182 | CONFIG_DISCONTIGMEM=y | ||
| 183 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 184 | CONFIG_NEED_MULTIPLE_NODES=y | ||
| 185 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | ||
| 186 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 187 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 188 | CONFIG_MIGRATION=y | ||
| 189 | CONFIG_RESOURCES_64BIT=y | ||
| 190 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
| 191 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 192 | CONFIG_BOUNCE=y | ||
| 193 | CONFIG_NR_QUICK=1 | ||
| 194 | CONFIG_VIRT_TO_BUS=y | ||
| 195 | CONFIG_UNEVICTABLE_LRU=y | ||
| 196 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 197 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 198 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 199 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 200 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
| 201 | CONFIG_NUMA=y | ||
| 202 | CONFIG_NODES_SHIFT=10 | ||
| 203 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 204 | CONFIG_VIRTUAL_MEM_MAP=y | ||
| 205 | CONFIG_HOLES_IN_ZONE=y | ||
| 206 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
| 207 | CONFIG_HAVE_ARCH_NODEDATA_EXTENSION=y | ||
| 208 | CONFIG_COMPAT_FOR_U64_ALIGNMENT=y | ||
| 209 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 210 | CONFIG_PERFMON=y | ||
| 211 | CONFIG_IA64_PALINFO=y | ||
| 212 | # CONFIG_IA64_MC_ERR_INJECT is not set | ||
| 213 | CONFIG_SGI_SN=y | ||
| 214 | # CONFIG_IA64_ESI is not set | ||
| 215 | # CONFIG_IA64_HP_AML_NFW is not set | ||
| 216 | |||
| 217 | # | ||
| 218 | # SN Devices | ||
| 219 | # | ||
| 220 | CONFIG_SGI_IOC3=m | ||
| 221 | CONFIG_KEXEC=y | ||
| 222 | CONFIG_CRASH_DUMP=y | ||
| 223 | |||
| 224 | # | ||
| 225 | # Firmware Drivers | ||
| 226 | # | ||
| 227 | # CONFIG_FIRMWARE_MEMMAP is not set | ||
| 228 | CONFIG_EFI_VARS=y | ||
| 229 | CONFIG_EFI_PCDP=y | ||
| 230 | CONFIG_DMIID=y | ||
| 231 | CONFIG_BINFMT_ELF=y | ||
| 232 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 233 | # CONFIG_HAVE_AOUT is not set | ||
| 234 | CONFIG_BINFMT_MISC=m | ||
| 235 | |||
| 236 | # | ||
| 237 | # Power management and ACPI options | ||
| 238 | # | ||
| 239 | CONFIG_PM=y | ||
| 240 | # CONFIG_PM_DEBUG is not set | ||
| 241 | CONFIG_ACPI=y | ||
| 242 | CONFIG_ACPI_PROCFS=y | ||
| 243 | CONFIG_ACPI_PROCFS_POWER=y | ||
| 244 | CONFIG_ACPI_SYSFS_POWER=y | ||
| 245 | CONFIG_ACPI_PROC_EVENT=y | ||
| 246 | CONFIG_ACPI_BUTTON=m | 1 | CONFIG_ACPI_BUTTON=m |
| 247 | CONFIG_ACPI_FAN=m | 2 | CONFIG_ACPI_CONTAINER=m |
| 248 | CONFIG_ACPI_DOCK=y | 3 | CONFIG_ACPI_DOCK=y |
| 4 | CONFIG_ACPI_FAN=m | ||
| 249 | CONFIG_ACPI_PROCESSOR=m | 5 | CONFIG_ACPI_PROCESSOR=m |
| 250 | CONFIG_ACPI_HOTPLUG_CPU=y | 6 | CONFIG_ACPI_PROCFS=y |
| 251 | CONFIG_ACPI_THERMAL=m | 7 | CONFIG_AGP_HP_ZX1=m |
| 252 | CONFIG_ACPI_NUMA=y | 8 | CONFIG_AGP_I460=m |
| 253 | # CONFIG_ACPI_CUSTOM_DSDT is not set | 9 | CONFIG_AGP=m |
| 254 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 10 | CONFIG_AGP_SGI_TIOCA=m |
| 255 | # CONFIG_ACPI_DEBUG is not set | ||
| 256 | # CONFIG_ACPI_PCI_SLOT is not set | ||
| 257 | CONFIG_ACPI_SYSTEM=y | ||
| 258 | CONFIG_ACPI_CONTAINER=m | ||
| 259 | |||
| 260 | # | ||
| 261 | # CPU Frequency scaling | ||
| 262 | # | ||
| 263 | # CONFIG_CPU_FREQ is not set | ||
| 264 | |||
| 265 | # | ||
| 266 | # Bus options (PCI, PCMCIA) | ||
| 267 | # | ||
| 268 | CONFIG_PCI=y | ||
| 269 | CONFIG_PCI_DOMAINS=y | ||
| 270 | CONFIG_PCI_SYSCALL=y | ||
| 271 | # CONFIG_PCIEPORTBUS is not set | ||
| 272 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
| 273 | CONFIG_PCI_MSI=y | ||
| 274 | CONFIG_PCI_LEGACY=y | ||
| 275 | # CONFIG_PCI_DEBUG is not set | ||
| 276 | CONFIG_HOTPLUG_PCI=m | ||
| 277 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 278 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
| 279 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 280 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 281 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 282 | # CONFIG_HOTPLUG_PCI_SGI is not set | ||
| 283 | # CONFIG_PCCARD is not set | ||
| 284 | CONFIG_DMAR=y | ||
| 285 | CONFIG_NET=y | ||
| 286 | |||
| 287 | # | ||
| 288 | # Networking options | ||
| 289 | # | ||
| 290 | CONFIG_PACKET=y | ||
| 291 | # CONFIG_PACKET_MMAP is not set | ||
| 292 | CONFIG_UNIX=y | ||
| 293 | CONFIG_XFRM=y | ||
| 294 | # CONFIG_XFRM_USER is not set | ||
| 295 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 296 | # CONFIG_XFRM_MIGRATE is not set | ||
| 297 | # CONFIG_XFRM_STATISTICS is not set | ||
| 298 | # CONFIG_NET_KEY is not set | ||
| 299 | CONFIG_INET=y | ||
| 300 | CONFIG_IP_MULTICAST=y | ||
| 301 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 302 | CONFIG_IP_FIB_HASH=y | ||
| 303 | # CONFIG_IP_PNP is not set | ||
| 304 | # CONFIG_NET_IPIP is not set | ||
| 305 | # CONFIG_NET_IPGRE is not set | ||
| 306 | # CONFIG_IP_MROUTE is not set | ||
| 307 | CONFIG_ARPD=y | 11 | CONFIG_ARPD=y |
| 308 | CONFIG_SYN_COOKIES=y | 12 | CONFIG_ATA_PIIX=y |
| 309 | # CONFIG_INET_AH is not set | 13 | CONFIG_ATA=y |
| 310 | # CONFIG_INET_ESP is not set | 14 | CONFIG_AUTOFS4_FS=m |
| 311 | # CONFIG_INET_IPCOMP is not set | 15 | CONFIG_AUTOFS_FS=m |
| 312 | # CONFIG_INET_XFRM_TUNNEL is not set | 16 | CONFIG_BINFMT_MISC=m |
| 313 | # CONFIG_INET_TUNNEL is not set | 17 | # CONFIG_BLK_DEV_BSG is not set |
| 314 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 18 | CONFIG_BLK_DEV_CMD64X=y |
| 315 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 316 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 317 | CONFIG_INET_LRO=m | ||
| 318 | CONFIG_INET_DIAG=y | ||
| 319 | CONFIG_INET_TCP_DIAG=y | ||
| 320 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 321 | CONFIG_TCP_CONG_CUBIC=y | ||
| 322 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 323 | # CONFIG_TCP_MD5SIG is not set | ||
| 324 | # CONFIG_IPV6 is not set | ||
| 325 | # CONFIG_NETWORK_SECMARK is not set | ||
| 326 | # CONFIG_NETFILTER is not set | ||
| 327 | # CONFIG_IP_DCCP is not set | ||
| 328 | # CONFIG_IP_SCTP is not set | ||
| 329 | # CONFIG_TIPC is not set | ||
| 330 | # CONFIG_ATM is not set | ||
| 331 | # CONFIG_BRIDGE is not set | ||
| 332 | # CONFIG_NET_DSA is not set | ||
| 333 | # CONFIG_VLAN_8021Q is not set | ||
| 334 | # CONFIG_DECNET is not set | ||
| 335 | # CONFIG_LLC2 is not set | ||
| 336 | # CONFIG_IPX is not set | ||
| 337 | # CONFIG_ATALK is not set | ||
| 338 | # CONFIG_X25 is not set | ||
| 339 | # CONFIG_LAPB is not set | ||
| 340 | # CONFIG_ECONET is not set | ||
| 341 | # CONFIG_WAN_ROUTER is not set | ||
| 342 | # CONFIG_NET_SCHED is not set | ||
| 343 | |||
| 344 | # | ||
| 345 | # Network testing | ||
| 346 | # | ||
| 347 | # CONFIG_NET_PKTGEN is not set | ||
| 348 | # CONFIG_HAMRADIO is not set | ||
| 349 | # CONFIG_CAN is not set | ||
| 350 | # CONFIG_IRDA is not set | ||
| 351 | # CONFIG_BT is not set | ||
| 352 | # CONFIG_AF_RXRPC is not set | ||
| 353 | # CONFIG_PHONET is not set | ||
| 354 | CONFIG_WIRELESS=y | ||
| 355 | # CONFIG_CFG80211 is not set | ||
| 356 | CONFIG_WIRELESS_OLD_REGULATORY=y | ||
| 357 | # CONFIG_WIRELESS_EXT is not set | ||
| 358 | # CONFIG_MAC80211 is not set | ||
| 359 | # CONFIG_IEEE80211 is not set | ||
| 360 | # CONFIG_RFKILL is not set | ||
| 361 | # CONFIG_NET_9P is not set | ||
| 362 | |||
| 363 | # | ||
| 364 | # Device Drivers | ||
| 365 | # | ||
| 366 | |||
| 367 | # | ||
| 368 | # Generic Driver Options | ||
| 369 | # | ||
| 370 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 371 | CONFIG_STANDALONE=y | ||
| 372 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 373 | CONFIG_FW_LOADER=y | ||
| 374 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 375 | CONFIG_EXTRA_FIRMWARE="" | ||
| 376 | # CONFIG_DEBUG_DRIVER is not set | ||
| 377 | # CONFIG_DEBUG_DEVRES is not set | ||
| 378 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 379 | CONFIG_CONNECTOR=y | ||
| 380 | CONFIG_PROC_EVENTS=y | ||
| 381 | # CONFIG_MTD is not set | ||
| 382 | # CONFIG_PARPORT is not set | ||
| 383 | CONFIG_PNP=y | ||
| 384 | # CONFIG_PNP_DEBUG_MESSAGES is not set | ||
| 385 | |||
| 386 | # | ||
| 387 | # Protocols | ||
| 388 | # | ||
| 389 | CONFIG_PNPACPI=y | ||
| 390 | CONFIG_BLK_DEV=y | ||
| 391 | # CONFIG_BLK_CPQ_DA is not set | ||
| 392 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 393 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 394 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 395 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 396 | CONFIG_BLK_DEV_LOOP=m | ||
| 397 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 19 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
| 398 | CONFIG_BLK_DEV_NBD=m | 20 | CONFIG_BLK_DEV_DM=m |
| 399 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 400 | # CONFIG_BLK_DEV_UB is not set | ||
| 401 | CONFIG_BLK_DEV_RAM=y | ||
| 402 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 403 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 404 | # CONFIG_BLK_DEV_XIP is not set | ||
| 405 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 406 | # CONFIG_ATA_OVER_ETH is not set | ||
| 407 | # CONFIG_BLK_DEV_HD is not set | ||
| 408 | CONFIG_MISC_DEVICES=y | ||
| 409 | # CONFIG_PHANTOM is not set | ||
| 410 | # CONFIG_EEPROM_93CX6 is not set | ||
| 411 | CONFIG_SGI_IOC4=y | ||
| 412 | # CONFIG_TIFM_CORE is not set | ||
| 413 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 414 | CONFIG_SGI_XP=m | ||
| 415 | # CONFIG_HP_ILO is not set | ||
| 416 | # CONFIG_C2PORT is not set | ||
| 417 | CONFIG_HAVE_IDE=y | ||
| 418 | CONFIG_IDE=y | ||
| 419 | |||
| 420 | # | ||
| 421 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | ||
| 422 | # | ||
| 423 | CONFIG_IDE_TIMINGS=y | ||
| 424 | CONFIG_IDE_ATAPI=y | ||
| 425 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 426 | CONFIG_IDE_GD=y | ||
| 427 | CONFIG_IDE_GD_ATA=y | ||
| 428 | # CONFIG_IDE_GD_ATAPI is not set | ||
| 429 | CONFIG_BLK_DEV_IDECD=y | ||
| 430 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||
| 431 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 432 | CONFIG_BLK_DEV_IDESCSI=m | ||
| 433 | # CONFIG_BLK_DEV_IDEACPI is not set | ||
| 434 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 435 | CONFIG_IDE_PROC_FS=y | ||
| 436 | |||
| 437 | # | ||
| 438 | # IDE chipset support/bugfixes | ||
| 439 | # | ||
| 440 | # CONFIG_IDE_GENERIC is not set | ||
| 441 | # CONFIG_BLK_DEV_PLATFORM is not set | ||
| 442 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 443 | CONFIG_BLK_DEV_IDEDMA_SFF=y | ||
| 444 | |||
| 445 | # | ||
| 446 | # PCI IDE chipsets support | ||
| 447 | # | ||
| 448 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 449 | CONFIG_IDEPCI_PCIBUS_ORDER=y | ||
| 450 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 451 | CONFIG_BLK_DEV_GENERIC=y | 21 | CONFIG_BLK_DEV_GENERIC=y |
| 452 | # CONFIG_BLK_DEV_OPTI621 is not set | 22 | CONFIG_BLK_DEV_IDECD=y |
| 453 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 23 | CONFIG_BLK_DEV_INITRD=y |
| 454 | # CONFIG_BLK_DEV_AEC62XX is not set | 24 | CONFIG_BLK_DEV_LOOP=m |
| 455 | # CONFIG_BLK_DEV_ALI15X3 is not set | 25 | CONFIG_BLK_DEV_MD=m |
| 456 | # CONFIG_BLK_DEV_AMD74XX is not set | 26 | CONFIG_BLK_DEV_NBD=m |
| 457 | CONFIG_BLK_DEV_CMD64X=y | ||
| 458 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 459 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 460 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 461 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 462 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 463 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 464 | CONFIG_BLK_DEV_PIIX=y | 27 | CONFIG_BLK_DEV_PIIX=y |
| 465 | # CONFIG_BLK_DEV_IT8213 is not set | 28 | CONFIG_BLK_DEV_RAM=y |
| 466 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 467 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 468 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 469 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 470 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 471 | CONFIG_BLK_DEV_SGIIOC4=y | ||
| 472 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 473 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 474 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 475 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 476 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 477 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 478 | |||
| 479 | # | ||
| 480 | # SCSI device support | ||
| 481 | # | ||
| 482 | # CONFIG_RAID_ATTRS is not set | ||
| 483 | CONFIG_SCSI=y | ||
| 484 | CONFIG_SCSI_DMA=y | ||
| 485 | # CONFIG_SCSI_TGT is not set | ||
| 486 | CONFIG_SCSI_NETLINK=y | ||
| 487 | CONFIG_SCSI_PROC_FS=y | ||
| 488 | |||
| 489 | # | ||
| 490 | # SCSI support type (disk, tape, CD-ROM) | ||
| 491 | # | ||
| 492 | CONFIG_BLK_DEV_SD=y | 29 | CONFIG_BLK_DEV_SD=y |
| 493 | CONFIG_CHR_DEV_ST=m | 30 | CONFIG_BLK_DEV_SGIIOC4=y |
| 494 | # CONFIG_CHR_DEV_OSST is not set | ||
| 495 | CONFIG_BLK_DEV_SR=m | 31 | CONFIG_BLK_DEV_SR=m |
| 496 | # CONFIG_BLK_DEV_SR_VENDOR is not set | 32 | CONFIG_CGROUPS=y |
| 497 | CONFIG_CHR_DEV_SG=m | 33 | CONFIG_CHR_DEV_SG=m |
| 498 | # CONFIG_CHR_DEV_SCH is not set | 34 | CONFIG_CHR_DEV_ST=m |
| 499 | 35 | CONFIG_CIFS=m | |
| 500 | # | 36 | CONFIG_CONNECTOR=y |
| 501 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 37 | CONFIG_CPUSETS=y |
| 502 | # | 38 | CONFIG_CRASH_DUMP=y |
| 503 | # CONFIG_SCSI_MULTI_LUN is not set | 39 | CONFIG_CRC_T10DIF=y |
| 504 | # CONFIG_SCSI_CONSTANTS is not set | 40 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
| 505 | # CONFIG_SCSI_LOGGING is not set | 41 | CONFIG_CRYPTO_ECB=m |
| 506 | # CONFIG_SCSI_SCAN_ASYNC is not set | 42 | CONFIG_CRYPTO_MD5=y |
| 507 | CONFIG_SCSI_WAIT_SCAN=m | 43 | CONFIG_CRYPTO_PCBC=m |
| 508 | 44 | CONFIG_DEBUG_KERNEL=y | |
| 509 | # | 45 | CONFIG_DEBUG_MUTEXES=y |
| 510 | # SCSI Transports | ||
| 511 | # | ||
| 512 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 513 | CONFIG_SCSI_FC_ATTRS=y | ||
| 514 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 515 | CONFIG_SCSI_SAS_ATTRS=y | ||
| 516 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 517 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 518 | CONFIG_SCSI_LOWLEVEL=y | ||
| 519 | # CONFIG_ISCSI_TCP is not set | ||
| 520 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 521 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 522 | # CONFIG_SCSI_ACARD is not set | ||
| 523 | # CONFIG_SCSI_AACRAID is not set | ||
| 524 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 525 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 526 | # CONFIG_SCSI_AIC79XX is not set | ||
| 527 | # CONFIG_SCSI_AIC94XX is not set | ||
| 528 | # CONFIG_SCSI_DPT_I2O is not set | ||
| 529 | # CONFIG_SCSI_ADVANSYS is not set | ||
| 530 | # CONFIG_SCSI_ARCMSR is not set | ||
| 531 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 532 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 533 | # CONFIG_MEGARAID_SAS is not set | ||
| 534 | # CONFIG_SCSI_HPTIOP is not set | ||
| 535 | # CONFIG_SCSI_DMX3191D is not set | ||
| 536 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 537 | # CONFIG_SCSI_IPS is not set | ||
| 538 | # CONFIG_SCSI_INITIO is not set | ||
| 539 | # CONFIG_SCSI_INIA100 is not set | ||
| 540 | # CONFIG_SCSI_MVSAS is not set | ||
| 541 | # CONFIG_SCSI_STEX is not set | ||
| 542 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 543 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 544 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 545 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 546 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
| 547 | # CONFIG_SCSI_IPR is not set | ||
| 548 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 549 | # CONFIG_SCSI_QLA_FC is not set | ||
| 550 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 551 | # CONFIG_SCSI_LPFC is not set | ||
| 552 | # CONFIG_SCSI_DC395x is not set | ||
| 553 | # CONFIG_SCSI_DC390T is not set | ||
| 554 | # CONFIG_SCSI_DEBUG is not set | ||
| 555 | # CONFIG_SCSI_SRP is not set | ||
| 556 | # CONFIG_SCSI_DH is not set | ||
| 557 | CONFIG_ATA=y | ||
| 558 | CONFIG_ATA_NONSTANDARD=y | ||
| 559 | CONFIG_ATA_ACPI=y | ||
| 560 | CONFIG_SATA_PMP=y | ||
| 561 | # CONFIG_SATA_AHCI is not set | ||
| 562 | # CONFIG_SATA_SIL24 is not set | ||
| 563 | CONFIG_ATA_SFF=y | ||
| 564 | # CONFIG_SATA_SVW is not set | ||
| 565 | CONFIG_ATA_PIIX=y | ||
| 566 | # CONFIG_SATA_MV is not set | ||
| 567 | # CONFIG_SATA_NV is not set | ||
| 568 | # CONFIG_PDC_ADMA is not set | ||
| 569 | # CONFIG_SATA_QSTOR is not set | ||
| 570 | # CONFIG_SATA_PROMISE is not set | ||
| 571 | # CONFIG_SATA_SX4 is not set | ||
| 572 | # CONFIG_SATA_SIL is not set | ||
| 573 | # CONFIG_SATA_SIS is not set | ||
| 574 | # CONFIG_SATA_ULI is not set | ||
| 575 | # CONFIG_SATA_VIA is not set | ||
| 576 | CONFIG_SATA_VITESSE=y | ||
| 577 | # CONFIG_SATA_INIC162X is not set | ||
| 578 | # CONFIG_PATA_ACPI is not set | ||
| 579 | # CONFIG_PATA_ALI is not set | ||
| 580 | # CONFIG_PATA_AMD is not set | ||
| 581 | # CONFIG_PATA_ARTOP is not set | ||
| 582 | # CONFIG_PATA_ATIIXP is not set | ||
| 583 | # CONFIG_PATA_CMD640_PCI is not set | ||
| 584 | # CONFIG_PATA_CMD64X is not set | ||
| 585 | # CONFIG_PATA_CS5520 is not set | ||
| 586 | # CONFIG_PATA_CS5530 is not set | ||
| 587 | # CONFIG_PATA_CYPRESS is not set | ||
| 588 | # CONFIG_PATA_EFAR is not set | ||
| 589 | # CONFIG_ATA_GENERIC is not set | ||
| 590 | # CONFIG_PATA_HPT366 is not set | ||
| 591 | # CONFIG_PATA_HPT37X is not set | ||
| 592 | # CONFIG_PATA_HPT3X2N is not set | ||
| 593 | # CONFIG_PATA_HPT3X3 is not set | ||
| 594 | # CONFIG_PATA_IT821X is not set | ||
| 595 | # CONFIG_PATA_IT8213 is not set | ||
| 596 | # CONFIG_PATA_JMICRON is not set | ||
| 597 | # CONFIG_PATA_TRIFLEX is not set | ||
| 598 | # CONFIG_PATA_MARVELL is not set | ||
| 599 | # CONFIG_PATA_MPIIX is not set | ||
| 600 | # CONFIG_PATA_OLDPIIX is not set | ||
| 601 | # CONFIG_PATA_NETCELL is not set | ||
| 602 | # CONFIG_PATA_NINJA32 is not set | ||
| 603 | # CONFIG_PATA_NS87410 is not set | ||
| 604 | # CONFIG_PATA_NS87415 is not set | ||
| 605 | # CONFIG_PATA_OPTI is not set | ||
| 606 | # CONFIG_PATA_OPTIDMA is not set | ||
| 607 | # CONFIG_PATA_PDC_OLD is not set | ||
| 608 | # CONFIG_PATA_RADISYS is not set | ||
| 609 | # CONFIG_PATA_RZ1000 is not set | ||
| 610 | # CONFIG_PATA_SC1200 is not set | ||
| 611 | # CONFIG_PATA_SERVERWORKS is not set | ||
| 612 | # CONFIG_PATA_PDC2027X is not set | ||
| 613 | # CONFIG_PATA_SIL680 is not set | ||
| 614 | # CONFIG_PATA_SIS is not set | ||
| 615 | # CONFIG_PATA_VIA is not set | ||
| 616 | # CONFIG_PATA_WINBOND is not set | ||
| 617 | # CONFIG_PATA_SCH is not set | ||
| 618 | CONFIG_MD=y | ||
| 619 | CONFIG_BLK_DEV_MD=m | ||
| 620 | CONFIG_MD_LINEAR=m | ||
| 621 | CONFIG_MD_RAID0=m | ||
| 622 | CONFIG_MD_RAID1=m | ||
| 623 | # CONFIG_MD_RAID10 is not set | ||
| 624 | # CONFIG_MD_RAID456 is not set | ||
| 625 | CONFIG_MD_MULTIPATH=m | ||
| 626 | # CONFIG_MD_FAULTY is not set | ||
| 627 | CONFIG_BLK_DEV_DM=m | ||
| 628 | # CONFIG_DM_DEBUG is not set | ||
| 629 | CONFIG_DM_CRYPT=m | 46 | CONFIG_DM_CRYPT=m |
| 630 | CONFIG_DM_SNAPSHOT=m | ||
| 631 | CONFIG_DM_MIRROR=m | 47 | CONFIG_DM_MIRROR=m |
| 632 | CONFIG_DM_ZERO=m | ||
| 633 | CONFIG_DM_MULTIPATH=m | 48 | CONFIG_DM_MULTIPATH=m |
| 634 | # CONFIG_DM_DELAY is not set | 49 | CONFIG_DM_SNAPSHOT=m |
| 635 | # CONFIG_DM_UEVENT is not set | 50 | CONFIG_DM_ZERO=m |
| 636 | CONFIG_FUSION=y | ||
| 637 | CONFIG_FUSION_SPI=y | ||
| 638 | CONFIG_FUSION_FC=m | ||
| 639 | CONFIG_FUSION_SAS=y | ||
| 640 | CONFIG_FUSION_MAX_SGE=128 | ||
| 641 | # CONFIG_FUSION_CTL is not set | ||
| 642 | # CONFIG_FUSION_LOGGING is not set | ||
| 643 | |||
| 644 | # | ||
| 645 | # IEEE 1394 (FireWire) support | ||
| 646 | # | ||
| 647 | |||
| 648 | # | ||
| 649 | # Enable only one of the two stacks, unless you know what you are doing | ||
| 650 | # | ||
| 651 | # CONFIG_FIREWIRE is not set | ||
| 652 | # CONFIG_IEEE1394 is not set | ||
| 653 | # CONFIG_I2O is not set | ||
| 654 | CONFIG_NETDEVICES=y | ||
| 655 | CONFIG_DUMMY=m | ||
| 656 | # CONFIG_BONDING is not set | ||
| 657 | # CONFIG_MACVLAN is not set | ||
| 658 | # CONFIG_EQUALIZER is not set | ||
| 659 | # CONFIG_TUN is not set | ||
| 660 | # CONFIG_VETH is not set | ||
| 661 | # CONFIG_NET_SB1000 is not set | ||
| 662 | # CONFIG_ARCNET is not set | ||
| 663 | CONFIG_PHYLIB=y | ||
| 664 | |||
| 665 | # | ||
| 666 | # MII PHY device drivers | ||
| 667 | # | ||
| 668 | # CONFIG_MARVELL_PHY is not set | ||
| 669 | # CONFIG_DAVICOM_PHY is not set | ||
| 670 | # CONFIG_QSEMI_PHY is not set | ||
| 671 | # CONFIG_LXT_PHY is not set | ||
| 672 | # CONFIG_CICADA_PHY is not set | ||
| 673 | # CONFIG_VITESSE_PHY is not set | ||
| 674 | # CONFIG_SMSC_PHY is not set | ||
| 675 | # CONFIG_BROADCOM_PHY is not set | ||
| 676 | # CONFIG_ICPLUS_PHY is not set | ||
| 677 | # CONFIG_REALTEK_PHY is not set | ||
| 678 | # CONFIG_FIXED_PHY is not set | ||
| 679 | # CONFIG_MDIO_BITBANG is not set | ||
| 680 | CONFIG_NET_ETHERNET=y | ||
| 681 | CONFIG_MII=m | ||
| 682 | # CONFIG_HAPPYMEAL is not set | ||
| 683 | # CONFIG_SUNGEM is not set | ||
| 684 | # CONFIG_CASSINI is not set | ||
| 685 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 686 | CONFIG_NET_TULIP=y | ||
| 687 | # CONFIG_DE2104X is not set | ||
| 688 | CONFIG_TULIP=m | ||
| 689 | # CONFIG_TULIP_MWI is not set | ||
| 690 | # CONFIG_TULIP_MMIO is not set | ||
| 691 | # CONFIG_TULIP_NAPI is not set | ||
| 692 | # CONFIG_DE4X5 is not set | ||
| 693 | # CONFIG_WINBOND_840 is not set | ||
| 694 | # CONFIG_DM9102 is not set | ||
| 695 | # CONFIG_ULI526X is not set | ||
| 696 | # CONFIG_HP100 is not set | ||
| 697 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 698 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 699 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 700 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 701 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 702 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 703 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 704 | CONFIG_NET_PCI=y | ||
| 705 | # CONFIG_PCNET32 is not set | ||
| 706 | # CONFIG_AMD8111_ETH is not set | ||
| 707 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 708 | # CONFIG_B44 is not set | ||
| 709 | # CONFIG_FORCEDETH is not set | ||
| 710 | CONFIG_EEPRO100=m | ||
| 711 | CONFIG_E100=m | ||
| 712 | # CONFIG_FEALNX is not set | ||
| 713 | # CONFIG_NATSEMI is not set | ||
| 714 | # CONFIG_NE2K_PCI is not set | ||
| 715 | # CONFIG_8139CP is not set | ||
| 716 | # CONFIG_8139TOO is not set | ||
| 717 | # CONFIG_R6040 is not set | ||
| 718 | # CONFIG_SIS900 is not set | ||
| 719 | # CONFIG_EPIC100 is not set | ||
| 720 | # CONFIG_SUNDANCE is not set | ||
| 721 | # CONFIG_TLAN is not set | ||
| 722 | # CONFIG_VIA_RHINE is not set | ||
| 723 | # CONFIG_SC92031 is not set | ||
| 724 | # CONFIG_ATL2 is not set | ||
| 725 | CONFIG_NETDEV_1000=y | ||
| 726 | # CONFIG_ACENIC is not set | ||
| 727 | # CONFIG_DL2K is not set | ||
| 728 | CONFIG_E1000=y | ||
| 729 | # CONFIG_E1000E is not set | ||
| 730 | # CONFIG_IP1000 is not set | ||
| 731 | CONFIG_IGB=y | ||
| 732 | # CONFIG_IGB_LRO is not set | ||
| 733 | # CONFIG_NS83820 is not set | ||
| 734 | # CONFIG_HAMACHI is not set | ||
| 735 | # CONFIG_YELLOWFIN is not set | ||
| 736 | # CONFIG_R8169 is not set | ||
| 737 | # CONFIG_SIS190 is not set | ||
| 738 | # CONFIG_SKGE is not set | ||
| 739 | # CONFIG_SKY2 is not set | ||
| 740 | # CONFIG_VIA_VELOCITY is not set | ||
| 741 | CONFIG_TIGON3=y | ||
| 742 | # CONFIG_BNX2 is not set | ||
| 743 | # CONFIG_QLA3XXX is not set | ||
| 744 | # CONFIG_ATL1 is not set | ||
| 745 | # CONFIG_ATL1E is not set | ||
| 746 | # CONFIG_JME is not set | ||
| 747 | CONFIG_NETDEV_10000=y | ||
| 748 | # CONFIG_CHELSIO_T1 is not set | ||
| 749 | # CONFIG_CHELSIO_T3 is not set | ||
| 750 | # CONFIG_ENIC is not set | ||
| 751 | # CONFIG_IXGBE is not set | ||
| 752 | # CONFIG_IXGB is not set | ||
| 753 | # CONFIG_S2IO is not set | ||
| 754 | # CONFIG_MYRI10GE is not set | ||
| 755 | # CONFIG_NETXEN_NIC is not set | ||
| 756 | # CONFIG_NIU is not set | ||
| 757 | # CONFIG_MLX4_EN is not set | ||
| 758 | # CONFIG_MLX4_CORE is not set | ||
| 759 | # CONFIG_TEHUTI is not set | ||
| 760 | # CONFIG_BNX2X is not set | ||
| 761 | # CONFIG_QLGE is not set | ||
| 762 | # CONFIG_SFC is not set | ||
| 763 | # CONFIG_TR is not set | ||
| 764 | |||
| 765 | # | ||
| 766 | # Wireless LAN | ||
| 767 | # | ||
| 768 | # CONFIG_WLAN_PRE80211 is not set | ||
| 769 | # CONFIG_WLAN_80211 is not set | ||
| 770 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 771 | |||
| 772 | # | ||
| 773 | # USB Network Adapters | ||
| 774 | # | ||
| 775 | # CONFIG_USB_CATC is not set | ||
| 776 | # CONFIG_USB_KAWETH is not set | ||
| 777 | # CONFIG_USB_PEGASUS is not set | ||
| 778 | # CONFIG_USB_RTL8150 is not set | ||
| 779 | # CONFIG_USB_USBNET is not set | ||
| 780 | # CONFIG_WAN is not set | ||
| 781 | # CONFIG_FDDI is not set | ||
| 782 | # CONFIG_HIPPI is not set | ||
| 783 | # CONFIG_PPP is not set | ||
| 784 | # CONFIG_SLIP is not set | ||
| 785 | # CONFIG_NET_FC is not set | ||
| 786 | CONFIG_NETCONSOLE=y | ||
| 787 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
| 788 | CONFIG_NETPOLL=y | ||
| 789 | # CONFIG_NETPOLL_TRAP is not set | ||
| 790 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 791 | # CONFIG_ISDN is not set | ||
| 792 | # CONFIG_PHONE is not set | ||
| 793 | |||
| 794 | # | ||
| 795 | # Input device support | ||
| 796 | # | ||
| 797 | CONFIG_INPUT=y | ||
| 798 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 799 | # CONFIG_INPUT_POLLDEV is not set | ||
| 800 | |||
| 801 | # | ||
| 802 | # Userland interfaces | ||
| 803 | # | ||
| 804 | CONFIG_INPUT_MOUSEDEV=y | ||
| 805 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 806 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 807 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 808 | # CONFIG_INPUT_JOYDEV is not set | ||
| 809 | # CONFIG_INPUT_EVDEV is not set | ||
| 810 | # CONFIG_INPUT_EVBUG is not set | ||
| 811 | |||
| 812 | # | ||
| 813 | # Input Device Drivers | ||
| 814 | # | ||
| 815 | CONFIG_INPUT_KEYBOARD=y | ||
| 816 | CONFIG_KEYBOARD_ATKBD=y | ||
| 817 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 818 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 819 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 820 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 821 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 822 | CONFIG_INPUT_MOUSE=y | ||
| 823 | CONFIG_MOUSE_PS2=y | ||
| 824 | CONFIG_MOUSE_PS2_ALPS=y | ||
| 825 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
| 826 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
| 827 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
| 828 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
| 829 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
| 830 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
| 831 | # CONFIG_MOUSE_SERIAL is not set | ||
| 832 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
| 833 | # CONFIG_MOUSE_BCM5974 is not set | ||
| 834 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 835 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 836 | # CONFIG_INPUT_TABLET is not set | ||
| 837 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 838 | # CONFIG_INPUT_MISC is not set | ||
| 839 | |||
| 840 | # | ||
| 841 | # Hardware I/O ports | ||
| 842 | # | ||
| 843 | CONFIG_SERIO=y | ||
| 844 | CONFIG_SERIO_I8042=y | ||
| 845 | # CONFIG_SERIO_SERPORT is not set | ||
| 846 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 847 | CONFIG_SERIO_LIBPS2=y | ||
| 848 | # CONFIG_SERIO_RAW is not set | ||
| 849 | CONFIG_GAMEPORT=m | ||
| 850 | # CONFIG_GAMEPORT_NS558 is not set | ||
| 851 | # CONFIG_GAMEPORT_L4 is not set | ||
| 852 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
| 853 | # CONFIG_GAMEPORT_FM801 is not set | ||
| 854 | |||
| 855 | # | ||
| 856 | # Character devices | ||
| 857 | # | ||
| 858 | CONFIG_VT=y | ||
| 859 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 860 | CONFIG_VT_CONSOLE=y | ||
| 861 | CONFIG_HW_CONSOLE=y | ||
| 862 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 863 | CONFIG_DEVKMEM=y | ||
| 864 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 865 | # CONFIG_COMPUTONE is not set | ||
| 866 | # CONFIG_ROCKETPORT is not set | ||
| 867 | # CONFIG_CYCLADES is not set | ||
| 868 | # CONFIG_DIGIEPCA is not set | ||
| 869 | # CONFIG_MOXA_INTELLIO is not set | ||
| 870 | # CONFIG_MOXA_SMARTIO is not set | ||
| 871 | # CONFIG_ISI is not set | ||
| 872 | # CONFIG_SYNCLINKMP is not set | ||
| 873 | # CONFIG_SYNCLINK_GT is not set | ||
| 874 | # CONFIG_N_HDLC is not set | ||
| 875 | # CONFIG_RISCOM8 is not set | ||
| 876 | # CONFIG_SPECIALIX is not set | ||
| 877 | # CONFIG_SX is not set | ||
| 878 | # CONFIG_RIO is not set | ||
| 879 | # CONFIG_STALDRV is not set | ||
| 880 | # CONFIG_NOZOMI is not set | ||
| 881 | CONFIG_SGI_SNSC=y | ||
| 882 | CONFIG_SGI_TIOCX=y | ||
| 883 | CONFIG_SGI_MBCS=m | ||
| 884 | |||
| 885 | # | ||
| 886 | # Serial drivers | ||
| 887 | # | ||
| 888 | CONFIG_SERIAL_8250=y | ||
| 889 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 890 | CONFIG_SERIAL_8250_PCI=y | ||
| 891 | CONFIG_SERIAL_8250_PNP=y | ||
| 892 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 893 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 894 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 895 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 896 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 897 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 898 | |||
| 899 | # | ||
| 900 | # Non-8250 serial port support | ||
| 901 | # | ||
| 902 | CONFIG_SERIAL_CORE=y | ||
| 903 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 904 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | ||
| 905 | # CONFIG_SERIAL_JSM is not set | ||
| 906 | CONFIG_SERIAL_SGI_IOC4=y | ||
| 907 | # CONFIG_SERIAL_SGI_IOC3 is not set | ||
| 908 | CONFIG_UNIX98_PTYS=y | ||
| 909 | CONFIG_LEGACY_PTYS=y | ||
| 910 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 911 | # CONFIG_IPMI_HANDLER is not set | ||
| 912 | # CONFIG_HW_RANDOM is not set | ||
| 913 | CONFIG_EFI_RTC=y | ||
| 914 | # CONFIG_R3964 is not set | ||
| 915 | # CONFIG_APPLICOM is not set | ||
| 916 | CONFIG_RAW_DRIVER=m | ||
| 917 | CONFIG_MAX_RAW_DEVS=256 | ||
| 918 | CONFIG_HPET=y | ||
| 919 | CONFIG_HPET_MMAP=y | ||
| 920 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 921 | CONFIG_MMTIMER=y | ||
| 922 | # CONFIG_TCG_TPM is not set | ||
| 923 | CONFIG_DEVPORT=y | ||
| 924 | # CONFIG_I2C is not set | ||
| 925 | # CONFIG_SPI is not set | ||
| 926 | # CONFIG_W1 is not set | ||
| 927 | CONFIG_POWER_SUPPLY=y | ||
| 928 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
| 929 | # CONFIG_PDA_POWER is not set | ||
| 930 | # CONFIG_BATTERY_DS2760 is not set | ||
| 931 | CONFIG_HWMON=y | ||
| 932 | # CONFIG_HWMON_VID is not set | ||
| 933 | # CONFIG_SENSORS_I5K_AMB is not set | ||
| 934 | # CONFIG_SENSORS_F71805F is not set | ||
| 935 | # CONFIG_SENSORS_F71882FG is not set | ||
| 936 | # CONFIG_SENSORS_IT87 is not set | ||
| 937 | # CONFIG_SENSORS_PC87360 is not set | ||
| 938 | # CONFIG_SENSORS_PC87427 is not set | ||
| 939 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 940 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 941 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 942 | # CONFIG_SENSORS_VIA686A is not set | ||
| 943 | # CONFIG_SENSORS_VT1211 is not set | ||
| 944 | # CONFIG_SENSORS_VT8231 is not set | ||
| 945 | # CONFIG_SENSORS_W83627HF is not set | ||
| 946 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 947 | # CONFIG_SENSORS_LIS3LV02D is not set | ||
| 948 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 949 | CONFIG_THERMAL=m | ||
| 950 | # CONFIG_THERMAL_HWMON is not set | ||
| 951 | # CONFIG_WATCHDOG is not set | ||
| 952 | CONFIG_SSB_POSSIBLE=y | ||
| 953 | |||
| 954 | # | ||
| 955 | # Sonics Silicon Backplane | ||
| 956 | # | ||
| 957 | # CONFIG_SSB is not set | ||
| 958 | |||
| 959 | # | ||
| 960 | # Multifunction device drivers | ||
| 961 | # | ||
| 962 | # CONFIG_MFD_CORE is not set | ||
| 963 | # CONFIG_MFD_SM501 is not set | ||
| 964 | # CONFIG_HTC_PASIC3 is not set | ||
| 965 | # CONFIG_MFD_TMIO is not set | ||
| 966 | # CONFIG_REGULATOR is not set | ||
| 967 | |||
| 968 | # | ||
| 969 | # Multimedia devices | ||
| 970 | # | ||
| 971 | |||
| 972 | # | ||
| 973 | # Multimedia core support | ||
| 974 | # | ||
| 975 | # CONFIG_VIDEO_DEV is not set | ||
| 976 | # CONFIG_DVB_CORE is not set | ||
| 977 | # CONFIG_VIDEO_MEDIA is not set | ||
| 978 | |||
| 979 | # | ||
| 980 | # Multimedia drivers | ||
| 981 | # | ||
| 982 | CONFIG_DAB=y | ||
| 983 | # CONFIG_USB_DABUSB is not set | ||
| 984 | |||
| 985 | # | ||
| 986 | # Graphics support | ||
| 987 | # | ||
| 988 | CONFIG_AGP=m | ||
| 989 | CONFIG_AGP_I460=m | ||
| 990 | CONFIG_AGP_HP_ZX1=m | ||
| 991 | CONFIG_AGP_SGI_TIOCA=m | ||
| 992 | CONFIG_DRM=m | 51 | CONFIG_DRM=m |
| 993 | CONFIG_DRM_TDFX=m | 52 | CONFIG_DRM_MGA=m |
| 994 | CONFIG_DRM_R128=m | 53 | CONFIG_DRM_R128=m |
| 995 | CONFIG_DRM_RADEON=m | 54 | CONFIG_DRM_RADEON=m |
| 996 | CONFIG_DRM_MGA=m | ||
| 997 | CONFIG_DRM_SIS=m | 55 | CONFIG_DRM_SIS=m |
| 998 | # CONFIG_DRM_VIA is not set | 56 | CONFIG_DRM_TDFX=m |
| 999 | # CONFIG_DRM_SAVAGE is not set | 57 | CONFIG_DUMMY=m |
| 1000 | # CONFIG_VGASTATE is not set | 58 | CONFIG_E1000=y |
| 1001 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 59 | CONFIG_E100=m |
| 1002 | # CONFIG_FB is not set | 60 | CONFIG_EFI_PARTITION=y |
| 1003 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 61 | CONFIG_EFI_RTC=y |
| 1004 | 62 | CONFIG_EFI_VARS=y | |
| 1005 | # | 63 | CONFIG_EXPERIMENTAL=y |
| 1006 | # Display device support | 64 | CONFIG_EXT2_FS_POSIX_ACL=y |
| 1007 | # | 65 | CONFIG_EXT2_FS_SECURITY=y |
| 1008 | # CONFIG_DISPLAY_SUPPORT is not set | 66 | CONFIG_EXT2_FS_XATTR=y |
| 1009 | 67 | CONFIG_EXT2_FS=y | |
| 1010 | # | 68 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1011 | # Console display driver support | 69 | CONFIG_EXT3_FS_SECURITY=y |
| 1012 | # | 70 | CONFIG_EXT3_FS=y |
| 1013 | CONFIG_VGA_CONSOLE=y | 71 | CONFIG_FUSION_FC=m |
| 1014 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | 72 | CONFIG_FUSION_SAS=y |
| 1015 | CONFIG_DUMMY_CONSOLE=y | 73 | CONFIG_FUSION_SPI=y |
| 1016 | CONFIG_SOUND=m | 74 | CONFIG_FUSION=y |
| 1017 | CONFIG_SOUND_OSS_CORE=y | 75 | CONFIG_GAMEPORT=m |
| 1018 | CONFIG_SND=m | ||
| 1019 | CONFIG_SND_TIMER=m | ||
| 1020 | CONFIG_SND_PCM=m | ||
| 1021 | CONFIG_SND_HWDEP=m | ||
| 1022 | CONFIG_SND_RAWMIDI=m | ||
| 1023 | CONFIG_SND_SEQUENCER=m | ||
| 1024 | CONFIG_SND_SEQ_DUMMY=m | ||
| 1025 | CONFIG_SND_OSSEMUL=y | ||
| 1026 | CONFIG_SND_MIXER_OSS=m | ||
| 1027 | CONFIG_SND_PCM_OSS=m | ||
| 1028 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 1029 | CONFIG_SND_SEQUENCER_OSS=y | ||
| 1030 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 1031 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 1032 | CONFIG_SND_VERBOSE_PROCFS=y | ||
| 1033 | CONFIG_SND_VERBOSE_PRINTK=y | ||
| 1034 | # CONFIG_SND_DEBUG is not set | ||
| 1035 | CONFIG_SND_VMASTER=y | ||
| 1036 | CONFIG_SND_MPU401_UART=m | ||
| 1037 | CONFIG_SND_OPL3_LIB=m | ||
| 1038 | CONFIG_SND_AC97_CODEC=m | ||
| 1039 | CONFIG_SND_DRIVERS=y | ||
| 1040 | CONFIG_SND_DUMMY=m | ||
| 1041 | CONFIG_SND_VIRMIDI=m | ||
| 1042 | CONFIG_SND_MTPAV=m | ||
| 1043 | CONFIG_SND_SERIAL_U16550=m | ||
| 1044 | CONFIG_SND_MPU401=m | ||
| 1045 | # CONFIG_SND_AC97_POWER_SAVE is not set | ||
| 1046 | CONFIG_SND_PCI=y | ||
| 1047 | # CONFIG_SND_AD1889 is not set | ||
| 1048 | # CONFIG_SND_ALS300 is not set | ||
| 1049 | # CONFIG_SND_ALI5451 is not set | ||
| 1050 | # CONFIG_SND_ATIIXP is not set | ||
| 1051 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
| 1052 | # CONFIG_SND_AU8810 is not set | ||
| 1053 | # CONFIG_SND_AU8820 is not set | ||
| 1054 | # CONFIG_SND_AU8830 is not set | ||
| 1055 | # CONFIG_SND_AW2 is not set | ||
| 1056 | # CONFIG_SND_AZT3328 is not set | ||
| 1057 | # CONFIG_SND_BT87X is not set | ||
| 1058 | # CONFIG_SND_CA0106 is not set | ||
| 1059 | # CONFIG_SND_CMIPCI is not set | ||
| 1060 | # CONFIG_SND_OXYGEN is not set | ||
| 1061 | CONFIG_SND_CS4281=m | ||
| 1062 | CONFIG_SND_CS46XX=m | ||
| 1063 | CONFIG_SND_CS46XX_NEW_DSP=y | ||
| 1064 | # CONFIG_SND_DARLA20 is not set | ||
| 1065 | # CONFIG_SND_GINA20 is not set | ||
| 1066 | # CONFIG_SND_LAYLA20 is not set | ||
| 1067 | # CONFIG_SND_DARLA24 is not set | ||
| 1068 | # CONFIG_SND_GINA24 is not set | ||
| 1069 | # CONFIG_SND_LAYLA24 is not set | ||
| 1070 | # CONFIG_SND_MONA is not set | ||
| 1071 | # CONFIG_SND_MIA is not set | ||
| 1072 | # CONFIG_SND_ECHO3G is not set | ||
| 1073 | # CONFIG_SND_INDIGO is not set | ||
| 1074 | # CONFIG_SND_INDIGOIO is not set | ||
| 1075 | # CONFIG_SND_INDIGODJ is not set | ||
| 1076 | CONFIG_SND_EMU10K1=m | ||
| 1077 | # CONFIG_SND_EMU10K1X is not set | ||
| 1078 | # CONFIG_SND_ENS1370 is not set | ||
| 1079 | # CONFIG_SND_ENS1371 is not set | ||
| 1080 | # CONFIG_SND_ES1938 is not set | ||
| 1081 | # CONFIG_SND_ES1968 is not set | ||
| 1082 | CONFIG_SND_FM801=m | ||
| 1083 | # CONFIG_SND_HDA_INTEL is not set | ||
| 1084 | # CONFIG_SND_HDSP is not set | ||
| 1085 | # CONFIG_SND_HDSPM is not set | ||
| 1086 | # CONFIG_SND_HIFIER is not set | ||
| 1087 | # CONFIG_SND_ICE1712 is not set | ||
| 1088 | # CONFIG_SND_ICE1724 is not set | ||
| 1089 | # CONFIG_SND_INTEL8X0 is not set | ||
| 1090 | # CONFIG_SND_INTEL8X0M is not set | ||
| 1091 | # CONFIG_SND_KORG1212 is not set | ||
| 1092 | # CONFIG_SND_MAESTRO3 is not set | ||
| 1093 | # CONFIG_SND_MIXART is not set | ||
| 1094 | # CONFIG_SND_NM256 is not set | ||
| 1095 | # CONFIG_SND_PCXHR is not set | ||
| 1096 | # CONFIG_SND_RIPTIDE is not set | ||
| 1097 | # CONFIG_SND_RME32 is not set | ||
| 1098 | # CONFIG_SND_RME96 is not set | ||
| 1099 | # CONFIG_SND_RME9652 is not set | ||
| 1100 | # CONFIG_SND_SONICVIBES is not set | ||
| 1101 | # CONFIG_SND_TRIDENT is not set | ||
| 1102 | # CONFIG_SND_VIA82XX is not set | ||
| 1103 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
| 1104 | # CONFIG_SND_VIRTUOSO is not set | ||
| 1105 | # CONFIG_SND_VX222 is not set | ||
| 1106 | # CONFIG_SND_YMFPCI is not set | ||
| 1107 | CONFIG_SND_USB=y | ||
| 1108 | # CONFIG_SND_USB_AUDIO is not set | ||
| 1109 | # CONFIG_SND_USB_CAIAQ is not set | ||
| 1110 | # CONFIG_SND_SOC is not set | ||
| 1111 | # CONFIG_SOUND_PRIME is not set | ||
| 1112 | CONFIG_AC97_BUS=m | ||
| 1113 | CONFIG_HID_SUPPORT=y | ||
| 1114 | CONFIG_HID=y | ||
| 1115 | # CONFIG_HID_DEBUG is not set | ||
| 1116 | # CONFIG_HIDRAW is not set | ||
| 1117 | |||
| 1118 | # | ||
| 1119 | # USB Input Devices | ||
| 1120 | # | ||
| 1121 | CONFIG_USB_HID=m | ||
| 1122 | # CONFIG_HID_PID is not set | ||
| 1123 | # CONFIG_USB_HIDDEV is not set | ||
| 1124 | |||
| 1125 | # | ||
| 1126 | # USB HID Boot Protocol drivers | ||
| 1127 | # | ||
| 1128 | # CONFIG_USB_KBD is not set | ||
| 1129 | # CONFIG_USB_MOUSE is not set | ||
| 1130 | |||
| 1131 | # | ||
| 1132 | # Special HID drivers | ||
| 1133 | # | ||
| 1134 | CONFIG_HID_COMPAT=y | ||
| 1135 | CONFIG_HID_A4TECH=m | ||
| 1136 | CONFIG_HID_APPLE=m | ||
| 1137 | CONFIG_HID_BELKIN=m | ||
| 1138 | CONFIG_HID_BRIGHT=m | ||
| 1139 | CONFIG_HID_CHERRY=m | ||
| 1140 | CONFIG_HID_CHICONY=m | ||
| 1141 | CONFIG_HID_CYPRESS=m | ||
| 1142 | CONFIG_HID_DELL=m | ||
| 1143 | CONFIG_HID_EZKEY=m | ||
| 1144 | CONFIG_HID_GYRATION=m | 76 | CONFIG_HID_GYRATION=m |
| 1145 | CONFIG_HID_LOGITECH=m | ||
| 1146 | # CONFIG_LOGITECH_FF is not set | ||
| 1147 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
| 1148 | CONFIG_HID_MICROSOFT=m | ||
| 1149 | CONFIG_HID_MONTEREY=m | ||
| 1150 | CONFIG_HID_PANTHERLORD=m | 77 | CONFIG_HID_PANTHERLORD=m |
| 1151 | # CONFIG_PANTHERLORD_FF is not set | ||
| 1152 | CONFIG_HID_PETALYNX=m | 78 | CONFIG_HID_PETALYNX=m |
| 1153 | CONFIG_HID_SAMSUNG=m | 79 | CONFIG_HID_SAMSUNG=m |
| 1154 | CONFIG_HID_SONY=m | 80 | CONFIG_HID_SONY=m |
| 1155 | CONFIG_HID_SUNPLUS=m | 81 | CONFIG_HID_SUNPLUS=m |
| 1156 | # CONFIG_THRUSTMASTER_FF is not set | 82 | CONFIG_HOTPLUG_CPU=y |
| 1157 | # CONFIG_ZEROPLUS_FF is not set | 83 | CONFIG_HOTPLUG_PCI_ACPI=m |
| 1158 | CONFIG_USB_SUPPORT=y | 84 | CONFIG_HOTPLUG_PCI=m |
| 1159 | CONFIG_USB_ARCH_HAS_HCD=y | 85 | CONFIG_HPET=y |
| 1160 | CONFIG_USB_ARCH_HAS_OHCI=y | 86 | CONFIG_HUGETLBFS=y |
| 1161 | CONFIG_USB_ARCH_HAS_EHCI=y | 87 | # CONFIG_HW_RANDOM is not set |
| 1162 | CONFIG_USB=m | 88 | CONFIG_IA64_CYCLONE=y |
| 1163 | # CONFIG_USB_DEBUG is not set | 89 | CONFIG_IA64_MCA_RECOVERY=y |
| 1164 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | 90 | CONFIG_IA64_PAGE_SIZE_64KB=y |
| 1165 | 91 | CONFIG_IA64_PALINFO=y | |
| 1166 | # | 92 | CONFIG_IDE=y |
| 1167 | # Miscellaneous USB options | 93 | CONFIG_IGB=y |
| 1168 | # | 94 | CONFIG_IKCONFIG_PROC=y |
| 1169 | CONFIG_USB_DEVICEFS=y | 95 | CONFIG_IKCONFIG=y |
| 1170 | CONFIG_USB_DEVICE_CLASS=y | 96 | CONFIG_INET=y |
| 1171 | # CONFIG_USB_DYNAMIC_MINORS is not set | 97 | CONFIG_INFINIBAND_IPOIB=m |
| 1172 | # CONFIG_USB_SUSPEND is not set | ||
| 1173 | # CONFIG_USB_OTG is not set | ||
| 1174 | CONFIG_USB_MON=y | ||
| 1175 | # CONFIG_USB_WUSB is not set | ||
| 1176 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 1177 | |||
| 1178 | # | ||
| 1179 | # USB Host Controller Drivers | ||
| 1180 | # | ||
| 1181 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1182 | CONFIG_USB_EHCI_HCD=m | ||
| 1183 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 1184 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1185 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1186 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1187 | CONFIG_USB_OHCI_HCD=m | ||
| 1188 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 1189 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 1190 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 1191 | CONFIG_USB_UHCI_HCD=m | ||
| 1192 | # CONFIG_USB_SL811_HCD is not set | ||
| 1193 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 1194 | # CONFIG_USB_WHCI_HCD is not set | ||
| 1195 | # CONFIG_USB_HWA_HCD is not set | ||
| 1196 | |||
| 1197 | # | ||
| 1198 | # Enable Host or Gadget support to see Inventra options | ||
| 1199 | # | ||
| 1200 | |||
| 1201 | # | ||
| 1202 | # USB Device Class drivers | ||
| 1203 | # | ||
| 1204 | # CONFIG_USB_ACM is not set | ||
| 1205 | # CONFIG_USB_PRINTER is not set | ||
| 1206 | # CONFIG_USB_WDM is not set | ||
| 1207 | # CONFIG_USB_TMC is not set | ||
| 1208 | |||
| 1209 | # | ||
| 1210 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; | ||
| 1211 | # | ||
| 1212 | |||
| 1213 | # | ||
| 1214 | # see USB_STORAGE Help for more information | ||
| 1215 | # | ||
| 1216 | CONFIG_USB_STORAGE=m | ||
| 1217 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1218 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1219 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1220 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1221 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 1222 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1223 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1224 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1225 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1226 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1227 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 1228 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1229 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1230 | # CONFIG_USB_LIBUSUAL is not set | ||
| 1231 | |||
| 1232 | # | ||
| 1233 | # USB Imaging devices | ||
| 1234 | # | ||
| 1235 | # CONFIG_USB_MDC800 is not set | ||
| 1236 | # CONFIG_USB_MICROTEK is not set | ||
| 1237 | |||
| 1238 | # | ||
| 1239 | # USB port drivers | ||
| 1240 | # | ||
| 1241 | # CONFIG_USB_SERIAL is not set | ||
| 1242 | |||
| 1243 | # | ||
| 1244 | # USB Miscellaneous drivers | ||
| 1245 | # | ||
| 1246 | # CONFIG_USB_EMI62 is not set | ||
| 1247 | # CONFIG_USB_EMI26 is not set | ||
| 1248 | # CONFIG_USB_ADUTUX is not set | ||
| 1249 | # CONFIG_USB_SEVSEG is not set | ||
| 1250 | # CONFIG_USB_RIO500 is not set | ||
| 1251 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1252 | # CONFIG_USB_LCD is not set | ||
| 1253 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1254 | # CONFIG_USB_LED is not set | ||
| 1255 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1256 | # CONFIG_USB_CYTHERM is not set | ||
| 1257 | # CONFIG_USB_PHIDGET is not set | ||
| 1258 | # CONFIG_USB_IDMOUSE is not set | ||
| 1259 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1260 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1261 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1262 | # CONFIG_USB_LD is not set | ||
| 1263 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1264 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1265 | # CONFIG_USB_TEST is not set | ||
| 1266 | # CONFIG_USB_ISIGHTFW is not set | ||
| 1267 | # CONFIG_USB_VST is not set | ||
| 1268 | # CONFIG_USB_GADGET is not set | ||
| 1269 | # CONFIG_UWB is not set | ||
| 1270 | # CONFIG_MMC is not set | ||
| 1271 | # CONFIG_MEMSTICK is not set | ||
| 1272 | # CONFIG_NEW_LEDS is not set | ||
| 1273 | # CONFIG_ACCESSIBILITY is not set | ||
| 1274 | CONFIG_INFINIBAND=m | 98 | CONFIG_INFINIBAND=m |
| 1275 | # CONFIG_INFINIBAND_USER_MAD is not set | ||
| 1276 | # CONFIG_INFINIBAND_USER_ACCESS is not set | ||
| 1277 | CONFIG_INFINIBAND_ADDR_TRANS=y | ||
| 1278 | CONFIG_INFINIBAND_MTHCA=m | 99 | CONFIG_INFINIBAND_MTHCA=m |
| 1279 | CONFIG_INFINIBAND_MTHCA_DEBUG=y | ||
| 1280 | # CONFIG_INFINIBAND_IPATH is not set | ||
| 1281 | # CONFIG_INFINIBAND_AMSO1100 is not set | ||
| 1282 | # CONFIG_MLX4_INFINIBAND is not set | ||
| 1283 | # CONFIG_INFINIBAND_NES is not set | ||
| 1284 | CONFIG_INFINIBAND_IPOIB=m | ||
| 1285 | # CONFIG_INFINIBAND_IPOIB_CM is not set | ||
| 1286 | CONFIG_INFINIBAND_IPOIB_DEBUG=y | ||
| 1287 | # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set | ||
| 1288 | # CONFIG_INFINIBAND_SRP is not set | ||
| 1289 | # CONFIG_INFINIBAND_ISER is not set | ||
| 1290 | # CONFIG_RTC_CLASS is not set | ||
| 1291 | # CONFIG_DMADEVICES is not set | ||
| 1292 | # CONFIG_UIO is not set | ||
| 1293 | # CONFIG_STAGING is not set | ||
| 1294 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
| 1295 | |||
| 1296 | # | ||
| 1297 | # HP Simulator drivers | ||
| 1298 | # | ||
| 1299 | # CONFIG_HP_SIMETH is not set | ||
| 1300 | # CONFIG_HP_SIMSERIAL is not set | ||
| 1301 | # CONFIG_HP_SIMSCSI is not set | ||
| 1302 | CONFIG_MSPEC=m | ||
| 1303 | |||
| 1304 | # | ||
| 1305 | # File systems | ||
| 1306 | # | ||
| 1307 | CONFIG_EXT2_FS=y | ||
| 1308 | CONFIG_EXT2_FS_XATTR=y | ||
| 1309 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
| 1310 | CONFIG_EXT2_FS_SECURITY=y | ||
| 1311 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1312 | CONFIG_EXT3_FS=y | ||
| 1313 | CONFIG_EXT3_FS_XATTR=y | ||
| 1314 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
| 1315 | CONFIG_EXT3_FS_SECURITY=y | ||
| 1316 | # CONFIG_EXT4_FS is not set | ||
| 1317 | CONFIG_JBD=y | ||
| 1318 | CONFIG_FS_MBCACHE=y | ||
| 1319 | CONFIG_REISERFS_FS=y | ||
| 1320 | # CONFIG_REISERFS_CHECK is not set | ||
| 1321 | # CONFIG_REISERFS_PROC_INFO is not set | ||
| 1322 | CONFIG_REISERFS_FS_XATTR=y | ||
| 1323 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
| 1324 | CONFIG_REISERFS_FS_SECURITY=y | ||
| 1325 | # CONFIG_JFS_FS is not set | ||
| 1326 | CONFIG_FS_POSIX_ACL=y | ||
| 1327 | CONFIG_FILE_LOCKING=y | ||
| 1328 | CONFIG_XFS_FS=y | ||
| 1329 | # CONFIG_XFS_QUOTA is not set | ||
| 1330 | # CONFIG_XFS_POSIX_ACL is not set | ||
| 1331 | # CONFIG_XFS_RT is not set | ||
| 1332 | # CONFIG_XFS_DEBUG is not set | ||
| 1333 | # CONFIG_GFS2_FS is not set | ||
| 1334 | # CONFIG_OCFS2_FS is not set | ||
| 1335 | CONFIG_DNOTIFY=y | ||
| 1336 | CONFIG_INOTIFY=y | 100 | CONFIG_INOTIFY=y |
| 1337 | CONFIG_INOTIFY_USER=y | 101 | CONFIG_IP_MULTICAST=y |
| 1338 | # CONFIG_QUOTA is not set | 102 | # CONFIG_IPV6 is not set |
| 1339 | CONFIG_AUTOFS_FS=m | ||
| 1340 | CONFIG_AUTOFS4_FS=m | ||
| 1341 | # CONFIG_FUSE_FS is not set | ||
| 1342 | |||
| 1343 | # | ||
| 1344 | # CD-ROM/DVD Filesystems | ||
| 1345 | # | ||
| 1346 | CONFIG_ISO9660_FS=m | 103 | CONFIG_ISO9660_FS=m |
| 1347 | CONFIG_JOLIET=y | 104 | CONFIG_JOLIET=y |
| 1348 | # CONFIG_ZISOFS is not set | 105 | CONFIG_KALLSYMS_ALL=y |
| 1349 | CONFIG_UDF_FS=m | 106 | CONFIG_KEXEC=y |
| 1350 | CONFIG_UDF_NLS=y | 107 | CONFIG_LOG_BUF_SHIFT=20 |
| 1351 | 108 | CONFIG_MAGIC_SYSRQ=y | |
| 1352 | # | 109 | CONFIG_MCKINLEY=y |
| 1353 | # DOS/FAT/NT Filesystems | 110 | CONFIG_MD_LINEAR=m |
| 1354 | # | 111 | CONFIG_MD_MULTIPATH=m |
| 1355 | CONFIG_FAT_FS=y | 112 | CONFIG_MD_RAID0=m |
| 1356 | # CONFIG_MSDOS_FS is not set | 113 | CONFIG_MD_RAID1=m |
| 1357 | CONFIG_VFAT_FS=y | 114 | CONFIG_MD=y |
| 1358 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 115 | CONFIG_MODULES=y |
| 1359 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 116 | CONFIG_MODULE_UNLOAD=y |
| 1360 | CONFIG_NTFS_FS=m | 117 | CONFIG_MODVERSIONS=y |
| 1361 | # CONFIG_NTFS_DEBUG is not set | 118 | CONFIG_MSPEC=m |
| 1362 | # CONFIG_NTFS_RW is not set | 119 | CONFIG_NETCONSOLE=y |
| 1363 | 120 | CONFIG_NETDEVICES=y | |
| 1364 | # | 121 | CONFIG_NET_ETHERNET=y |
| 1365 | # Pseudo filesystems | 122 | CONFIG_NET_PCI=y |
| 1366 | # | 123 | CONFIG_NET_TULIP=y |
| 1367 | CONFIG_PROC_FS=y | 124 | CONFIG_NFSD=m |
| 1368 | CONFIG_PROC_KCORE=y | 125 | CONFIG_NFSD_V4=y |
| 1369 | CONFIG_PROC_VMCORE=y | ||
| 1370 | CONFIG_PROC_SYSCTL=y | ||
| 1371 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 1372 | CONFIG_SYSFS=y | ||
| 1373 | CONFIG_TMPFS=y | ||
| 1374 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1375 | CONFIG_HUGETLBFS=y | ||
| 1376 | CONFIG_HUGETLB_PAGE=y | ||
| 1377 | # CONFIG_CONFIGFS_FS is not set | ||
| 1378 | |||
| 1379 | # | ||
| 1380 | # Miscellaneous filesystems | ||
| 1381 | # | ||
| 1382 | # CONFIG_ADFS_FS is not set | ||
| 1383 | # CONFIG_AFFS_FS is not set | ||
| 1384 | # CONFIG_HFS_FS is not set | ||
| 1385 | # CONFIG_HFSPLUS_FS is not set | ||
| 1386 | # CONFIG_BEFS_FS is not set | ||
| 1387 | # CONFIG_BFS_FS is not set | ||
| 1388 | # CONFIG_EFS_FS is not set | ||
| 1389 | # CONFIG_CRAMFS is not set | ||
| 1390 | # CONFIG_VXFS_FS is not set | ||
| 1391 | # CONFIG_MINIX_FS is not set | ||
| 1392 | # CONFIG_OMFS_FS is not set | ||
| 1393 | # CONFIG_HPFS_FS is not set | ||
| 1394 | # CONFIG_QNX4FS_FS is not set | ||
| 1395 | # CONFIG_ROMFS_FS is not set | ||
| 1396 | # CONFIG_SYSV_FS is not set | ||
| 1397 | # CONFIG_UFS_FS is not set | ||
| 1398 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 1399 | CONFIG_NFS_FS=m | 126 | CONFIG_NFS_FS=m |
| 1400 | CONFIG_NFS_V3=y | 127 | CONFIG_NFS_V3=y |
| 1401 | # CONFIG_NFS_V3_ACL is not set | ||
| 1402 | CONFIG_NFS_V4=y | 128 | CONFIG_NFS_V4=y |
| 1403 | CONFIG_NFSD=m | 129 | CONFIG_NLS_CODEPAGE_1250=m |
| 1404 | CONFIG_NFSD_V3=y | 130 | CONFIG_NLS_CODEPAGE_1251=m |
| 1405 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1406 | CONFIG_NFSD_V4=y | ||
| 1407 | CONFIG_LOCKD=m | ||
| 1408 | CONFIG_LOCKD_V4=y | ||
| 1409 | CONFIG_EXPORTFS=m | ||
| 1410 | CONFIG_NFS_COMMON=y | ||
| 1411 | CONFIG_SUNRPC=m | ||
| 1412 | CONFIG_SUNRPC_GSS=m | ||
| 1413 | CONFIG_SUNRPC_XPRT_RDMA=m | ||
| 1414 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
| 1415 | CONFIG_RPCSEC_GSS_KRB5=m | ||
| 1416 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1417 | CONFIG_SMB_FS=m | ||
| 1418 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 1419 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
| 1420 | CONFIG_CIFS=m | ||
| 1421 | # CONFIG_CIFS_STATS is not set | ||
| 1422 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1423 | # CONFIG_CIFS_XATTR is not set | ||
| 1424 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1425 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1426 | # CONFIG_NCP_FS is not set | ||
| 1427 | # CONFIG_CODA_FS is not set | ||
| 1428 | # CONFIG_AFS_FS is not set | ||
| 1429 | |||
| 1430 | # | ||
| 1431 | # Partition Types | ||
| 1432 | # | ||
| 1433 | CONFIG_PARTITION_ADVANCED=y | ||
| 1434 | # CONFIG_ACORN_PARTITION is not set | ||
| 1435 | # CONFIG_OSF_PARTITION is not set | ||
| 1436 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1437 | # CONFIG_ATARI_PARTITION is not set | ||
| 1438 | # CONFIG_MAC_PARTITION is not set | ||
| 1439 | CONFIG_MSDOS_PARTITION=y | ||
| 1440 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1441 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1442 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1443 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1444 | # CONFIG_LDM_PARTITION is not set | ||
| 1445 | CONFIG_SGI_PARTITION=y | ||
| 1446 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1447 | # CONFIG_SUN_PARTITION is not set | ||
| 1448 | # CONFIG_KARMA_PARTITION is not set | ||
| 1449 | CONFIG_EFI_PARTITION=y | ||
| 1450 | # CONFIG_SYSV68_PARTITION is not set | ||
| 1451 | CONFIG_NLS=y | ||
| 1452 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1453 | CONFIG_NLS_CODEPAGE_437=y | 131 | CONFIG_NLS_CODEPAGE_437=y |
| 1454 | CONFIG_NLS_CODEPAGE_737=m | 132 | CONFIG_NLS_CODEPAGE_737=m |
| 1455 | CONFIG_NLS_CODEPAGE_775=m | 133 | CONFIG_NLS_CODEPAGE_775=m |
| @@ -1465,15 +143,14 @@ CONFIG_NLS_CODEPAGE_864=m | |||
| 1465 | CONFIG_NLS_CODEPAGE_865=m | 143 | CONFIG_NLS_CODEPAGE_865=m |
| 1466 | CONFIG_NLS_CODEPAGE_866=m | 144 | CONFIG_NLS_CODEPAGE_866=m |
| 1467 | CONFIG_NLS_CODEPAGE_869=m | 145 | CONFIG_NLS_CODEPAGE_869=m |
| 1468 | CONFIG_NLS_CODEPAGE_936=m | 146 | CONFIG_NLS_CODEPAGE_874=m |
| 1469 | CONFIG_NLS_CODEPAGE_950=m | ||
| 1470 | CONFIG_NLS_CODEPAGE_932=m | 147 | CONFIG_NLS_CODEPAGE_932=m |
| 148 | CONFIG_NLS_CODEPAGE_936=m | ||
| 1471 | CONFIG_NLS_CODEPAGE_949=m | 149 | CONFIG_NLS_CODEPAGE_949=m |
| 1472 | CONFIG_NLS_CODEPAGE_874=m | 150 | CONFIG_NLS_CODEPAGE_950=m |
| 1473 | CONFIG_NLS_ISO8859_8=m | 151 | CONFIG_NLS_ISO8859_13=m |
| 1474 | CONFIG_NLS_CODEPAGE_1250=m | 152 | CONFIG_NLS_ISO8859_14=m |
| 1475 | CONFIG_NLS_CODEPAGE_1251=m | 153 | CONFIG_NLS_ISO8859_15=m |
| 1476 | # CONFIG_NLS_ASCII is not set | ||
| 1477 | CONFIG_NLS_ISO8859_1=y | 154 | CONFIG_NLS_ISO8859_1=y |
| 1478 | CONFIG_NLS_ISO8859_2=m | 155 | CONFIG_NLS_ISO8859_2=m |
| 1479 | CONFIG_NLS_ISO8859_3=m | 156 | CONFIG_NLS_ISO8859_3=m |
| @@ -1481,194 +158,79 @@ CONFIG_NLS_ISO8859_4=m | |||
| 1481 | CONFIG_NLS_ISO8859_5=m | 158 | CONFIG_NLS_ISO8859_5=m |
| 1482 | CONFIG_NLS_ISO8859_6=m | 159 | CONFIG_NLS_ISO8859_6=m |
| 1483 | CONFIG_NLS_ISO8859_7=m | 160 | CONFIG_NLS_ISO8859_7=m |
| 161 | CONFIG_NLS_ISO8859_8=m | ||
| 1484 | CONFIG_NLS_ISO8859_9=m | 162 | CONFIG_NLS_ISO8859_9=m |
| 1485 | CONFIG_NLS_ISO8859_13=m | ||
| 1486 | CONFIG_NLS_ISO8859_14=m | ||
| 1487 | CONFIG_NLS_ISO8859_15=m | ||
| 1488 | CONFIG_NLS_KOI8_R=m | 163 | CONFIG_NLS_KOI8_R=m |
| 1489 | CONFIG_NLS_KOI8_U=m | 164 | CONFIG_NLS_KOI8_U=m |
| 1490 | CONFIG_NLS_UTF8=m | 165 | CONFIG_NLS_UTF8=m |
| 1491 | # CONFIG_DLM is not set | 166 | CONFIG_NTFS_FS=m |
| 1492 | 167 | CONFIG_PACKET=y | |
| 1493 | # | 168 | CONFIG_PARTITION_ADVANCED=y |
| 1494 | # Kernel hacking | 169 | CONFIG_PERFMON=y |
| 1495 | # | 170 | # CONFIG_PNP_DEBUG_MESSAGES is not set |
| 1496 | # CONFIG_PRINTK_TIME is not set | 171 | CONFIG_POSIX_MQUEUE=y |
| 1497 | CONFIG_ENABLE_WARN_DEPRECATED=y | 172 | CONFIG_PROC_KCORE=y |
| 1498 | CONFIG_ENABLE_MUST_CHECK=y | 173 | CONFIG_RAW_DRIVER=m |
| 1499 | CONFIG_FRAME_WARN=2048 | ||
| 1500 | CONFIG_MAGIC_SYSRQ=y | ||
| 1501 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1502 | # CONFIG_DEBUG_FS is not set | ||
| 1503 | # CONFIG_HEADERS_CHECK is not set | ||
| 1504 | CONFIG_DEBUG_KERNEL=y | ||
| 1505 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1506 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 1507 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 1508 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 1509 | CONFIG_SCHED_DEBUG=y | ||
| 1510 | # CONFIG_SCHEDSTATS is not set | ||
| 1511 | # CONFIG_TIMER_STATS is not set | ||
| 1512 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1513 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 1514 | # CONFIG_SLUB_STATS is not set | ||
| 1515 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1516 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1517 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1518 | CONFIG_DEBUG_MUTEXES=y | ||
| 1519 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1520 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1521 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1522 | # CONFIG_DEBUG_INFO is not set | ||
| 1523 | # CONFIG_DEBUG_VM is not set | ||
| 1524 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1525 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 1526 | # CONFIG_DEBUG_LIST is not set | ||
| 1527 | # CONFIG_DEBUG_SG is not set | ||
| 1528 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
| 1529 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1530 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 174 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| 1531 | # CONFIG_BACKTRACE_SELF_TEST is not set | 175 | CONFIG_REISERFS_FS_POSIX_ACL=y |
| 1532 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 176 | CONFIG_REISERFS_FS_SECURITY=y |
| 1533 | # CONFIG_FAULT_INJECTION is not set | 177 | CONFIG_REISERFS_FS_XATTR=y |
| 178 | CONFIG_REISERFS_FS=y | ||
| 179 | CONFIG_SATA_VITESSE=y | ||
| 180 | CONFIG_SCSI_FC_ATTRS=y | ||
| 181 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 182 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 183 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 184 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 185 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 186 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 187 | CONFIG_SERIAL_8250=y | ||
| 188 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 189 | CONFIG_SERIAL_SGI_IOC4=y | ||
| 190 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | ||
| 191 | # CONFIG_SERIO_SERPORT is not set | ||
| 192 | CONFIG_SGI_IOC4=y | ||
| 193 | CONFIG_SGI_MBCS=m | ||
| 194 | CONFIG_SGI_PARTITION=y | ||
| 195 | CONFIG_SGI_SNSC=y | ||
| 196 | CONFIG_SGI_TIOCX=y | ||
| 197 | CONFIG_SGI_XP=m | ||
| 198 | CONFIG_SMB_FS=m | ||
| 199 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 200 | CONFIG_SMP=y | ||
| 201 | CONFIG_SND_CS4281=m | ||
| 202 | CONFIG_SND_CS46XX=m | ||
| 203 | CONFIG_SND_DUMMY=m | ||
| 204 | CONFIG_SND_EMU10K1=m | ||
| 205 | CONFIG_SND_FM801=m | ||
| 206 | CONFIG_SND=m | ||
| 207 | CONFIG_SND_MIXER_OSS=m | ||
| 208 | CONFIG_SND_MPU401=m | ||
| 209 | CONFIG_SND_MTPAV=m | ||
| 210 | CONFIG_SND_PCM_OSS=m | ||
| 211 | CONFIG_SND_SEQ_DUMMY=m | ||
| 212 | CONFIG_SND_SEQUENCER=m | ||
| 213 | CONFIG_SND_SEQUENCER_OSS=y | ||
| 214 | CONFIG_SND_SERIAL_U16550=m | ||
| 215 | CONFIG_SND_VERBOSE_PRINTK=y | ||
| 216 | CONFIG_SND_VIRMIDI=m | ||
| 217 | CONFIG_SOUND=m | ||
| 218 | CONFIG_SYN_COOKIES=y | ||
| 1534 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 219 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 1535 | 220 | CONFIG_SYSFS_DEPRECATED_V2=y | |
| 1536 | # | 221 | CONFIG_SYSVIPC=y |
| 1537 | # Tracers | 222 | CONFIG_TIGON3=y |
| 1538 | # | 223 | CONFIG_TMPFS=y |
| 1539 | # CONFIG_SCHED_TRACER is not set | 224 | CONFIG_TULIP=m |
| 1540 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 225 | CONFIG_UDF_FS=m |
| 1541 | # CONFIG_BOOT_TRACER is not set | 226 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 1542 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 227 | CONFIG_UNIX=y |
| 1543 | # CONFIG_SAMPLES is not set | 228 | CONFIG_USB_DEVICEFS=y |
| 1544 | CONFIG_IA64_GRANULE_16MB=y | 229 | CONFIG_USB_EHCI_HCD=m |
| 1545 | # CONFIG_IA64_GRANULE_64MB is not set | 230 | CONFIG_USB=m |
| 1546 | # CONFIG_IA64_PRINT_HAZARDS is not set | 231 | CONFIG_USB_MON=m |
| 1547 | # CONFIG_DISABLE_VHPT is not set | 232 | CONFIG_USB_OHCI_HCD=m |
| 1548 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | 233 | CONFIG_USB_STORAGE=m |
| 1549 | # CONFIG_IA64_DEBUG_IRQ is not set | 234 | CONFIG_USB_UHCI_HCD=m |
| 1550 | CONFIG_SYSVIPC_COMPAT=y | 235 | CONFIG_VFAT_FS=y |
| 1551 | 236 | CONFIG_XFS_FS=y | |
| 1552 | # | ||
| 1553 | # Security options | ||
| 1554 | # | ||
| 1555 | # CONFIG_KEYS is not set | ||
| 1556 | # CONFIG_SECURITY is not set | ||
| 1557 | # CONFIG_SECURITYFS is not set | ||
| 1558 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 1559 | CONFIG_CRYPTO=y | ||
| 1560 | |||
| 1561 | # | ||
| 1562 | # Crypto core or helper | ||
| 1563 | # | ||
| 1564 | # CONFIG_CRYPTO_FIPS is not set | ||
| 1565 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1566 | CONFIG_CRYPTO_AEAD=m | ||
| 1567 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1568 | CONFIG_CRYPTO_HASH=m | ||
| 1569 | CONFIG_CRYPTO_RNG=m | ||
| 1570 | CONFIG_CRYPTO_MANAGER=m | ||
| 1571 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1572 | # CONFIG_CRYPTO_NULL is not set | ||
| 1573 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1574 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1575 | # CONFIG_CRYPTO_TEST is not set | ||
| 1576 | |||
| 1577 | # | ||
| 1578 | # Authenticated Encryption with Associated Data | ||
| 1579 | # | ||
| 1580 | # CONFIG_CRYPTO_CCM is not set | ||
| 1581 | # CONFIG_CRYPTO_GCM is not set | ||
| 1582 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1583 | |||
| 1584 | # | ||
| 1585 | # Block modes | ||
| 1586 | # | ||
| 1587 | CONFIG_CRYPTO_CBC=m | ||
| 1588 | # CONFIG_CRYPTO_CTR is not set | ||
| 1589 | # CONFIG_CRYPTO_CTS is not set | ||
| 1590 | CONFIG_CRYPTO_ECB=m | ||
| 1591 | # CONFIG_CRYPTO_LRW is not set | ||
| 1592 | CONFIG_CRYPTO_PCBC=m | ||
| 1593 | # CONFIG_CRYPTO_XTS is not set | ||
| 1594 | |||
| 1595 | # | ||
| 1596 | # Hash modes | ||
| 1597 | # | ||
| 1598 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1599 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1600 | |||
| 1601 | # | ||
| 1602 | # Digest | ||
| 1603 | # | ||
| 1604 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1605 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1606 | CONFIG_CRYPTO_MD5=y | ||
| 1607 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1608 | # CONFIG_CRYPTO_RMD128 is not set | ||
| 1609 | # CONFIG_CRYPTO_RMD160 is not set | ||
| 1610 | # CONFIG_CRYPTO_RMD256 is not set | ||
| 1611 | # CONFIG_CRYPTO_RMD320 is not set | ||
| 1612 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1613 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1614 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1615 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1616 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1617 | |||
| 1618 | # | ||
| 1619 | # Ciphers | ||
| 1620 | # | ||
| 1621 | # CONFIG_CRYPTO_AES is not set | ||
| 1622 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1623 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1624 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1625 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1626 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1627 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1628 | CONFIG_CRYPTO_DES=m | ||
| 1629 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1630 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1631 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 1632 | # CONFIG_CRYPTO_SEED is not set | ||
| 1633 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1634 | # CONFIG_CRYPTO_TEA is not set | ||
| 1635 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1636 | |||
| 1637 | # | ||
| 1638 | # Compression | ||
| 1639 | # | ||
| 1640 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1641 | # CONFIG_CRYPTO_LZO is not set | ||
| 1642 | |||
| 1643 | # | ||
| 1644 | # Random Number Generation | ||
| 1645 | # | ||
| 1646 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
| 1647 | CONFIG_CRYPTO_HW=y | ||
| 1648 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
| 1649 | CONFIG_HAVE_KVM=y | ||
| 1650 | CONFIG_VIRTUALIZATION=y | ||
| 1651 | # CONFIG_KVM is not set | ||
| 1652 | # CONFIG_VIRTIO_PCI is not set | ||
| 1653 | # CONFIG_VIRTIO_BALLOON is not set | ||
| 1654 | |||
| 1655 | # | ||
| 1656 | # Library routines | ||
| 1657 | # | ||
| 1658 | CONFIG_BITREVERSE=y | ||
| 1659 | # CONFIG_CRC_CCITT is not set | ||
| 1660 | # CONFIG_CRC16 is not set | ||
| 1661 | CONFIG_CRC_T10DIF=y | ||
| 1662 | CONFIG_CRC_ITU_T=m | ||
| 1663 | CONFIG_CRC32=y | ||
| 1664 | # CONFIG_CRC7 is not set | ||
| 1665 | # CONFIG_LIBCRC32C is not set | ||
| 1666 | CONFIG_GENERIC_ALLOCATOR=y | ||
| 1667 | CONFIG_PLIST=y | ||
| 1668 | CONFIG_HAS_IOMEM=y | ||
| 1669 | CONFIG_HAS_IOPORT=y | ||
| 1670 | CONFIG_HAS_DMA=y | ||
| 1671 | CONFIG_GENERIC_HARDIRQS=y | ||
| 1672 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 1673 | CONFIG_GENERIC_PENDING_IRQ=y | ||
| 1674 | CONFIG_IRQ_PER_CPU=y | ||
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig index 2dc185b0f9a3..18989a084143 100644 --- a/arch/ia64/configs/gensparse_defconfig +++ b/arch/ia64/configs/gensparse_defconfig | |||
| @@ -1,1267 +1,110 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.16-rc5 | ||
| 4 | # Thu Mar 2 16:39:10 2006 | ||
| 5 | # | ||
| 6 | |||
| 7 | # | ||
| 8 | # Code maturity level options | ||
| 9 | # | ||
| 10 | CONFIG_EXPERIMENTAL=y | ||
| 11 | CONFIG_LOCK_KERNEL=y | ||
| 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 13 | |||
| 14 | # | ||
| 15 | # General setup | ||
| 16 | # | ||
| 17 | CONFIG_LOCALVERSION="" | ||
| 18 | CONFIG_LOCALVERSION_AUTO=y | ||
| 19 | CONFIG_SWAP=y | ||
| 20 | CONFIG_SYSVIPC=y | ||
| 21 | CONFIG_POSIX_MQUEUE=y | ||
| 22 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 23 | CONFIG_SYSCTL=y | ||
| 24 | # CONFIG_AUDIT is not set | ||
| 25 | CONFIG_IKCONFIG=y | ||
| 26 | CONFIG_IKCONFIG_PROC=y | ||
| 27 | # CONFIG_CPUSETS is not set | ||
| 28 | CONFIG_INITRAMFS_SOURCE="" | ||
| 29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 30 | # CONFIG_EMBEDDED is not set | ||
| 31 | CONFIG_KALLSYMS=y | ||
| 32 | CONFIG_KALLSYMS_ALL=y | ||
| 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 34 | CONFIG_HOTPLUG=y | ||
| 35 | CONFIG_PRINTK=y | ||
| 36 | CONFIG_BUG=y | ||
| 37 | CONFIG_ELF_CORE=y | ||
| 38 | CONFIG_BASE_FULL=y | ||
| 39 | CONFIG_FUTEX=y | ||
| 40 | CONFIG_EPOLL=y | ||
| 41 | CONFIG_SHMEM=y | ||
| 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
| 43 | CONFIG_CC_ALIGN_LABELS=0 | ||
| 44 | CONFIG_CC_ALIGN_LOOPS=0 | ||
| 45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
| 46 | CONFIG_SLUB=y | ||
| 47 | # CONFIG_TINY_SHMEM is not set | ||
| 48 | CONFIG_BASE_SMALL=0 | ||
| 49 | # CONFIG_SLOB is not set | ||
| 50 | |||
| 51 | # | ||
| 52 | # Loadable module support | ||
| 53 | # | ||
| 54 | CONFIG_MODULES=y | ||
| 55 | CONFIG_MODULE_UNLOAD=y | ||
| 56 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 57 | CONFIG_OBSOLETE_MODPARM=y | ||
| 58 | CONFIG_MODVERSIONS=y | ||
| 59 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 60 | CONFIG_KMOD=y | ||
| 61 | CONFIG_STOP_MACHINE=y | ||
| 62 | |||
| 63 | # | ||
| 64 | # Block layer | ||
| 65 | # | ||
| 66 | |||
| 67 | # | ||
| 68 | # IO Schedulers | ||
| 69 | # | ||
| 70 | CONFIG_IOSCHED_NOOP=y | ||
| 71 | CONFIG_IOSCHED_AS=y | ||
| 72 | CONFIG_IOSCHED_DEADLINE=y | ||
| 73 | CONFIG_IOSCHED_CFQ=y | ||
| 74 | CONFIG_DEFAULT_AS=y | ||
| 75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 76 | # CONFIG_DEFAULT_CFQ is not set | ||
| 77 | # CONFIG_DEFAULT_NOOP is not set | ||
| 78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 79 | |||
| 80 | # | ||
| 81 | # Processor type and features | ||
| 82 | # | ||
| 83 | CONFIG_IA64=y | ||
| 84 | CONFIG_64BIT=y | ||
| 85 | CONFIG_MMU=y | ||
| 86 | CONFIG_SWIOTLB=y | ||
| 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 89 | CONFIG_GENERIC_TIME=y | ||
| 90 | CONFIG_EFI=y | ||
| 91 | CONFIG_GENERIC_IOMAP=y | ||
| 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 93 | CONFIG_DMA_IS_DMA32=y | ||
| 94 | CONFIG_IA64_GENERIC=y | ||
| 95 | # CONFIG_IA64_DIG is not set | ||
| 96 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 97 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 98 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 99 | # CONFIG_IA64_HP_SIM is not set | ||
| 100 | # CONFIG_ITANIUM is not set | ||
| 101 | CONFIG_MCKINLEY=y | ||
| 102 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 103 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 104 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
| 105 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
| 106 | CONFIG_PGTABLE_3=y | ||
| 107 | # CONFIG_PGTABLE_4 is not set | ||
| 108 | # CONFIG_HZ_100 is not set | ||
| 109 | CONFIG_HZ_250=y | ||
| 110 | # CONFIG_HZ_1000 is not set | ||
| 111 | CONFIG_HZ=250 | ||
| 112 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 113 | CONFIG_IA64_CYCLONE=y | ||
| 114 | CONFIG_IOSAPIC=y | ||
| 115 | # CONFIG_IA64_SGI_SN_XP is not set | ||
| 116 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 117 | CONFIG_SMP=y | ||
| 118 | CONFIG_NR_CPUS=512 | ||
| 119 | CONFIG_IA64_NR_NODES=256 | ||
| 120 | CONFIG_HOTPLUG_CPU=y | ||
| 121 | # CONFIG_SCHED_SMT is not set | ||
| 122 | # CONFIG_PREEMPT is not set | ||
| 123 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 124 | # CONFIG_FLATMEM_MANUAL is not set | ||
| 125 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 126 | CONFIG_SPARSEMEM_MANUAL=y | ||
| 127 | CONFIG_SPARSEMEM=y | ||
| 128 | CONFIG_NEED_MULTIPLE_NODES=y | ||
| 129 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
| 130 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 131 | CONFIG_SPARSEMEM_EXTREME=y | ||
| 132 | # CONFIG_MEMORY_HOTPLUG is not set | ||
| 133 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 134 | CONFIG_MIGRATION=y | ||
| 135 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 136 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 137 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 138 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 139 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
| 140 | CONFIG_NUMA=y | ||
| 141 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
| 142 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 143 | CONFIG_PERFMON=y | ||
| 144 | CONFIG_IA64_PALINFO=y | ||
| 145 | CONFIG_SGI_SN=y | ||
| 146 | |||
| 147 | # | ||
| 148 | # Firmware Drivers | ||
| 149 | # | ||
| 150 | CONFIG_EFI_VARS=y | ||
| 151 | CONFIG_EFI_PCDP=y | ||
| 152 | CONFIG_BINFMT_ELF=y | ||
| 153 | CONFIG_BINFMT_MISC=m | ||
| 154 | |||
| 155 | # | ||
| 156 | # Power management and ACPI | ||
| 157 | # | ||
| 158 | CONFIG_PM=y | ||
| 159 | CONFIG_PM_LEGACY=y | ||
| 160 | # CONFIG_PM_DEBUG is not set | ||
| 161 | |||
| 162 | # | ||
| 163 | # ACPI (Advanced Configuration and Power Interface) Support | ||
| 164 | # | ||
| 165 | CONFIG_ACPI=y | ||
| 166 | CONFIG_ACPI_BUTTON=m | 1 | CONFIG_ACPI_BUTTON=m |
| 2 | CONFIG_ACPI_CONTAINER=m | ||
| 167 | CONFIG_ACPI_FAN=m | 3 | CONFIG_ACPI_FAN=m |
| 168 | CONFIG_ACPI_PROCESSOR=m | 4 | CONFIG_ACPI_PROCESSOR=m |
| 169 | CONFIG_ACPI_HOTPLUG_CPU=y | 5 | CONFIG_AGP_HP_ZX1=m |
| 170 | CONFIG_ACPI_THERMAL=m | 6 | CONFIG_AGP_I460=m |
| 171 | CONFIG_ACPI_NUMA=y | 7 | CONFIG_AGP=m |
| 172 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 8 | CONFIG_AGP_SGI_TIOCA=m |
| 173 | # CONFIG_ACPI_DEBUG is not set | ||
| 174 | CONFIG_ACPI_EC=y | ||
| 175 | CONFIG_ACPI_POWER=y | ||
| 176 | CONFIG_ACPI_SYSTEM=y | ||
| 177 | CONFIG_ACPI_CONTAINER=m | ||
| 178 | |||
| 179 | # | ||
| 180 | # CPU Frequency scaling | ||
| 181 | # | ||
| 182 | # CONFIG_CPU_FREQ is not set | ||
| 183 | |||
| 184 | # | ||
| 185 | # Bus options (PCI, PCMCIA) | ||
| 186 | # | ||
| 187 | CONFIG_PCI=y | ||
| 188 | CONFIG_PCI_DOMAINS=y | ||
| 189 | # CONFIG_PCI_MSI is not set | ||
| 190 | CONFIG_PCI_LEGACY_PROC=y | ||
| 191 | # CONFIG_PCI_DEBUG is not set | ||
| 192 | |||
| 193 | # | ||
| 194 | # PCI Hotplug Support | ||
| 195 | # | ||
| 196 | CONFIG_HOTPLUG_PCI=m | ||
| 197 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 198 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
| 199 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 200 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 201 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 202 | # CONFIG_HOTPLUG_PCI_SGI is not set | ||
| 203 | |||
| 204 | # | ||
| 205 | # PCCARD (PCMCIA/CardBus) support | ||
| 206 | # | ||
| 207 | # CONFIG_PCCARD is not set | ||
| 208 | |||
| 209 | # | ||
| 210 | # Networking | ||
| 211 | # | ||
| 212 | CONFIG_NET=y | ||
| 213 | |||
| 214 | # | ||
| 215 | # Networking options | ||
| 216 | # | ||
| 217 | # CONFIG_NETDEBUG is not set | ||
| 218 | CONFIG_PACKET=y | ||
| 219 | # CONFIG_PACKET_MMAP is not set | ||
| 220 | CONFIG_UNIX=y | ||
| 221 | # CONFIG_NET_KEY is not set | ||
| 222 | CONFIG_INET=y | ||
| 223 | CONFIG_IP_MULTICAST=y | ||
| 224 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 225 | CONFIG_IP_FIB_HASH=y | ||
| 226 | # CONFIG_IP_PNP is not set | ||
| 227 | # CONFIG_NET_IPIP is not set | ||
| 228 | # CONFIG_NET_IPGRE is not set | ||
| 229 | # CONFIG_IP_MROUTE is not set | ||
| 230 | CONFIG_ARPD=y | 9 | CONFIG_ARPD=y |
| 231 | CONFIG_SYN_COOKIES=y | 10 | CONFIG_AUTOFS4_FS=y |
| 232 | # CONFIG_INET_AH is not set | 11 | CONFIG_AUTOFS_FS=y |
| 233 | # CONFIG_INET_ESP is not set | 12 | CONFIG_BINFMT_MISC=m |
| 234 | # CONFIG_INET_IPCOMP is not set | 13 | CONFIG_BLK_DEV_CMD64X=y |
| 235 | # CONFIG_INET_TUNNEL is not set | ||
| 236 | CONFIG_INET_DIAG=y | ||
| 237 | CONFIG_INET_TCP_DIAG=y | ||
| 238 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 239 | CONFIG_TCP_CONG_BIC=y | ||
| 240 | # CONFIG_IPV6 is not set | ||
| 241 | # CONFIG_NETFILTER is not set | ||
| 242 | |||
| 243 | # | ||
| 244 | # DCCP Configuration (EXPERIMENTAL) | ||
| 245 | # | ||
| 246 | # CONFIG_IP_DCCP is not set | ||
| 247 | |||
| 248 | # | ||
| 249 | # SCTP Configuration (EXPERIMENTAL) | ||
| 250 | # | ||
| 251 | # CONFIG_IP_SCTP is not set | ||
| 252 | |||
| 253 | # | ||
| 254 | # TIPC Configuration (EXPERIMENTAL) | ||
| 255 | # | ||
| 256 | # CONFIG_TIPC is not set | ||
| 257 | # CONFIG_ATM is not set | ||
| 258 | # CONFIG_BRIDGE is not set | ||
| 259 | # CONFIG_VLAN_8021Q is not set | ||
| 260 | # CONFIG_DECNET is not set | ||
| 261 | # CONFIG_LLC2 is not set | ||
| 262 | # CONFIG_IPX is not set | ||
| 263 | # CONFIG_ATALK is not set | ||
| 264 | # CONFIG_X25 is not set | ||
| 265 | # CONFIG_LAPB is not set | ||
| 266 | # CONFIG_NET_DIVERT is not set | ||
| 267 | # CONFIG_ECONET is not set | ||
| 268 | # CONFIG_WAN_ROUTER is not set | ||
| 269 | |||
| 270 | # | ||
| 271 | # QoS and/or fair queueing | ||
| 272 | # | ||
| 273 | # CONFIG_NET_SCHED is not set | ||
| 274 | |||
| 275 | # | ||
| 276 | # Network testing | ||
| 277 | # | ||
| 278 | # CONFIG_NET_PKTGEN is not set | ||
| 279 | # CONFIG_HAMRADIO is not set | ||
| 280 | # CONFIG_IRDA is not set | ||
| 281 | # CONFIG_BT is not set | ||
| 282 | # CONFIG_IEEE80211 is not set | ||
| 283 | |||
| 284 | # | ||
| 285 | # Device Drivers | ||
| 286 | # | ||
| 287 | |||
| 288 | # | ||
| 289 | # Generic Driver Options | ||
| 290 | # | ||
| 291 | CONFIG_STANDALONE=y | ||
| 292 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 293 | CONFIG_FW_LOADER=m | ||
| 294 | # CONFIG_DEBUG_DRIVER is not set | ||
| 295 | |||
| 296 | # | ||
| 297 | # Connector - unified userspace <-> kernelspace linker | ||
| 298 | # | ||
| 299 | # CONFIG_CONNECTOR is not set | ||
| 300 | |||
| 301 | # | ||
| 302 | # Memory Technology Devices (MTD) | ||
| 303 | # | ||
| 304 | # CONFIG_MTD is not set | ||
| 305 | |||
| 306 | # | ||
| 307 | # Parallel port support | ||
| 308 | # | ||
| 309 | # CONFIG_PARPORT is not set | ||
| 310 | |||
| 311 | # | ||
| 312 | # Plug and Play support | ||
| 313 | # | ||
| 314 | CONFIG_PNP=y | ||
| 315 | # CONFIG_PNP_DEBUG is not set | ||
| 316 | |||
| 317 | # | ||
| 318 | # Protocols | ||
| 319 | # | ||
| 320 | CONFIG_PNPACPI=y | ||
| 321 | |||
| 322 | # | ||
| 323 | # Block devices | ||
| 324 | # | ||
| 325 | # CONFIG_BLK_CPQ_DA is not set | ||
| 326 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 327 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 328 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 329 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 330 | CONFIG_BLK_DEV_LOOP=m | ||
| 331 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 14 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
| 332 | CONFIG_BLK_DEV_NBD=m | 15 | CONFIG_BLK_DEV_DM=m |
| 333 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 334 | # CONFIG_BLK_DEV_UB is not set | ||
| 335 | CONFIG_BLK_DEV_RAM=y | ||
| 336 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 337 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 338 | CONFIG_BLK_DEV_INITRD=y | ||
| 339 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 340 | # CONFIG_ATA_OVER_ETH is not set | ||
| 341 | |||
| 342 | # | ||
| 343 | # ATA/ATAPI/MFM/RLL support | ||
| 344 | # | ||
| 345 | CONFIG_IDE=y | ||
| 346 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 347 | CONFIG_BLK_DEV_IDE=y | ||
| 348 | |||
| 349 | # | ||
| 350 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 351 | # | ||
| 352 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 353 | CONFIG_BLK_DEV_IDEDISK=y | ||
| 354 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 355 | CONFIG_BLK_DEV_IDECD=y | ||
| 356 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 357 | CONFIG_BLK_DEV_IDEFLOPPY=y | ||
| 358 | CONFIG_BLK_DEV_IDESCSI=m | ||
| 359 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 360 | |||
| 361 | # | ||
| 362 | # IDE chipset support/bugfixes | ||
| 363 | # | ||
| 364 | CONFIG_IDE_GENERIC=y | ||
| 365 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 366 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 367 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
| 368 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 369 | CONFIG_BLK_DEV_GENERIC=y | 16 | CONFIG_BLK_DEV_GENERIC=y |
| 370 | # CONFIG_BLK_DEV_OPTI621 is not set | 17 | CONFIG_BLK_DEV_IDECD=y |
| 371 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 18 | CONFIG_BLK_DEV_INITRD=y |
| 372 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | 19 | CONFIG_BLK_DEV_LOOP=m |
| 373 | CONFIG_IDEDMA_PCI_AUTO=y | 20 | CONFIG_BLK_DEV_MD=m |
| 374 | # CONFIG_IDEDMA_ONLYDISK is not set | 21 | CONFIG_BLK_DEV_NBD=m |
| 375 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 376 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 377 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 378 | CONFIG_BLK_DEV_CMD64X=y | ||
| 379 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 380 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 381 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 382 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 383 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 384 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 385 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 386 | CONFIG_BLK_DEV_PIIX=y | 22 | CONFIG_BLK_DEV_PIIX=y |
| 387 | # CONFIG_BLK_DEV_IT821X is not set | 23 | CONFIG_BLK_DEV_RAM=y |
| 388 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 389 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 390 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 391 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 392 | CONFIG_BLK_DEV_SGIIOC4=y | ||
| 393 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 394 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 395 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 396 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 397 | # CONFIG_IDE_ARM is not set | ||
| 398 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 399 | # CONFIG_IDEDMA_IVB is not set | ||
| 400 | CONFIG_IDEDMA_AUTO=y | ||
| 401 | # CONFIG_BLK_DEV_HD is not set | ||
| 402 | |||
| 403 | # | ||
| 404 | # SCSI device support | ||
| 405 | # | ||
| 406 | # CONFIG_RAID_ATTRS is not set | ||
| 407 | CONFIG_SCSI=y | ||
| 408 | CONFIG_SCSI_PROC_FS=y | ||
| 409 | |||
| 410 | # | ||
| 411 | # SCSI support type (disk, tape, CD-ROM) | ||
| 412 | # | ||
| 413 | CONFIG_BLK_DEV_SD=y | 24 | CONFIG_BLK_DEV_SD=y |
| 414 | CONFIG_CHR_DEV_ST=m | 25 | CONFIG_BLK_DEV_SGIIOC4=y |
| 415 | # CONFIG_CHR_DEV_OSST is not set | ||
| 416 | CONFIG_BLK_DEV_SR=m | 26 | CONFIG_BLK_DEV_SR=m |
| 417 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
| 418 | CONFIG_CHR_DEV_SG=m | 27 | CONFIG_CHR_DEV_SG=m |
| 419 | # CONFIG_CHR_DEV_SCH is not set | 28 | CONFIG_CHR_DEV_ST=m |
| 420 | 29 | CONFIG_CIFS=m | |
| 421 | # | 30 | CONFIG_CRYPTO_MD5=y |
| 422 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 31 | CONFIG_DEBUG_KERNEL=y |
| 423 | # | 32 | CONFIG_DEBUG_MUTEXES=y |
| 424 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 425 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 426 | # CONFIG_SCSI_LOGGING is not set | ||
| 427 | |||
| 428 | # | ||
| 429 | # SCSI Transport Attributes | ||
| 430 | # | ||
| 431 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 432 | CONFIG_SCSI_FC_ATTRS=y | ||
| 433 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 434 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 435 | |||
| 436 | # | ||
| 437 | # SCSI low-level drivers | ||
| 438 | # | ||
| 439 | # CONFIG_ISCSI_TCP is not set | ||
| 440 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 441 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 442 | # CONFIG_SCSI_ACARD is not set | ||
| 443 | # CONFIG_SCSI_AACRAID is not set | ||
| 444 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 445 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 446 | # CONFIG_SCSI_AIC79XX is not set | ||
| 447 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 448 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 449 | # CONFIG_MEGARAID_SAS is not set | ||
| 450 | CONFIG_SCSI_SATA=y | ||
| 451 | # CONFIG_SCSI_SATA_AHCI is not set | ||
| 452 | # CONFIG_SCSI_SATA_SVW is not set | ||
| 453 | # CONFIG_SCSI_ATA_PIIX is not set | ||
| 454 | # CONFIG_SCSI_SATA_MV is not set | ||
| 455 | # CONFIG_SCSI_SATA_NV is not set | ||
| 456 | # CONFIG_SCSI_PDC_ADMA is not set | ||
| 457 | # CONFIG_SCSI_SATA_QSTOR is not set | ||
| 458 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
| 459 | # CONFIG_SCSI_SATA_SX4 is not set | ||
| 460 | # CONFIG_SCSI_SATA_SIL is not set | ||
| 461 | # CONFIG_SCSI_SATA_SIL24 is not set | ||
| 462 | # CONFIG_SCSI_SATA_SIS is not set | ||
| 463 | # CONFIG_SCSI_SATA_ULI is not set | ||
| 464 | # CONFIG_SCSI_SATA_VIA is not set | ||
| 465 | CONFIG_SCSI_SATA_VITESSE=y | ||
| 466 | # CONFIG_SCSI_DMX3191D is not set | ||
| 467 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 468 | # CONFIG_SCSI_IPS is not set | ||
| 469 | # CONFIG_SCSI_INITIO is not set | ||
| 470 | # CONFIG_SCSI_INIA100 is not set | ||
| 471 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 472 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 473 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 474 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 475 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | ||
| 476 | # CONFIG_SCSI_IPR is not set | ||
| 477 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
| 478 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 479 | # CONFIG_SCSI_QLA_FC is not set | ||
| 480 | # CONFIG_SCSI_LPFC is not set | ||
| 481 | # CONFIG_SCSI_DC395x is not set | ||
| 482 | # CONFIG_SCSI_DC390T is not set | ||
| 483 | # CONFIG_SCSI_DEBUG is not set | ||
| 484 | |||
| 485 | # | ||
| 486 | # Multi-device support (RAID and LVM) | ||
| 487 | # | ||
| 488 | CONFIG_MD=y | ||
| 489 | CONFIG_BLK_DEV_MD=m | ||
| 490 | CONFIG_MD_LINEAR=m | ||
| 491 | CONFIG_MD_RAID0=m | ||
| 492 | CONFIG_MD_RAID1=m | ||
| 493 | # CONFIG_MD_RAID10 is not set | ||
| 494 | CONFIG_MD_RAID5=m | ||
| 495 | CONFIG_MD_RAID6=m | ||
| 496 | CONFIG_MD_MULTIPATH=m | ||
| 497 | # CONFIG_MD_FAULTY is not set | ||
| 498 | CONFIG_BLK_DEV_DM=m | ||
| 499 | CONFIG_DM_CRYPT=m | 33 | CONFIG_DM_CRYPT=m |
| 500 | CONFIG_DM_SNAPSHOT=m | ||
| 501 | CONFIG_DM_MIRROR=m | 34 | CONFIG_DM_MIRROR=m |
| 502 | CONFIG_DM_ZERO=m | ||
| 503 | CONFIG_DM_MULTIPATH=m | 35 | CONFIG_DM_MULTIPATH=m |
| 504 | # CONFIG_DM_MULTIPATH_EMC is not set | 36 | CONFIG_DM_SNAPSHOT=m |
| 505 | 37 | CONFIG_DM_ZERO=m | |
| 506 | # | ||
| 507 | # Fusion MPT device support | ||
| 508 | # | ||
| 509 | CONFIG_FUSION=y | ||
| 510 | CONFIG_FUSION_SPI=y | ||
| 511 | CONFIG_FUSION_FC=m | ||
| 512 | # CONFIG_FUSION_SAS is not set | ||
| 513 | CONFIG_FUSION_MAX_SGE=128 | ||
| 514 | # CONFIG_FUSION_CTL is not set | ||
| 515 | |||
| 516 | # | ||
| 517 | # IEEE 1394 (FireWire) support | ||
| 518 | # | ||
| 519 | # CONFIG_IEEE1394 is not set | ||
| 520 | |||
| 521 | # | ||
| 522 | # I2O device support | ||
| 523 | # | ||
| 524 | # CONFIG_I2O is not set | ||
| 525 | |||
| 526 | # | ||
| 527 | # Network device support | ||
| 528 | # | ||
| 529 | CONFIG_NETDEVICES=y | ||
| 530 | CONFIG_DUMMY=m | ||
| 531 | # CONFIG_BONDING is not set | ||
| 532 | # CONFIG_EQUALIZER is not set | ||
| 533 | # CONFIG_TUN is not set | ||
| 534 | # CONFIG_NET_SB1000 is not set | ||
| 535 | |||
| 536 | # | ||
| 537 | # ARCnet devices | ||
| 538 | # | ||
| 539 | # CONFIG_ARCNET is not set | ||
| 540 | |||
| 541 | # | ||
| 542 | # PHY device support | ||
| 543 | # | ||
| 544 | # CONFIG_PHYLIB is not set | ||
| 545 | |||
| 546 | # | ||
| 547 | # Ethernet (10 or 100Mbit) | ||
| 548 | # | ||
| 549 | CONFIG_NET_ETHERNET=y | ||
| 550 | CONFIG_MII=m | ||
| 551 | # CONFIG_HAPPYMEAL is not set | ||
| 552 | # CONFIG_SUNGEM is not set | ||
| 553 | # CONFIG_CASSINI is not set | ||
| 554 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 555 | |||
| 556 | # | ||
| 557 | # Tulip family network device support | ||
| 558 | # | ||
| 559 | CONFIG_NET_TULIP=y | ||
| 560 | # CONFIG_DE2104X is not set | ||
| 561 | CONFIG_TULIP=m | ||
| 562 | # CONFIG_TULIP_MWI is not set | ||
| 563 | # CONFIG_TULIP_MMIO is not set | ||
| 564 | # CONFIG_TULIP_NAPI is not set | ||
| 565 | # CONFIG_DE4X5 is not set | ||
| 566 | # CONFIG_WINBOND_840 is not set | ||
| 567 | # CONFIG_DM9102 is not set | ||
| 568 | # CONFIG_ULI526X is not set | ||
| 569 | # CONFIG_HP100 is not set | ||
| 570 | CONFIG_NET_PCI=y | ||
| 571 | # CONFIG_PCNET32 is not set | ||
| 572 | # CONFIG_AMD8111_ETH is not set | ||
| 573 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 574 | # CONFIG_B44 is not set | ||
| 575 | # CONFIG_FORCEDETH is not set | ||
| 576 | # CONFIG_DGRS is not set | ||
| 577 | CONFIG_EEPRO100=m | ||
| 578 | CONFIG_E100=m | ||
| 579 | # CONFIG_FEALNX is not set | ||
| 580 | # CONFIG_NATSEMI is not set | ||
| 581 | # CONFIG_NE2K_PCI is not set | ||
| 582 | # CONFIG_8139CP is not set | ||
| 583 | # CONFIG_8139TOO is not set | ||
| 584 | # CONFIG_SIS900 is not set | ||
| 585 | # CONFIG_EPIC100 is not set | ||
| 586 | # CONFIG_SUNDANCE is not set | ||
| 587 | # CONFIG_VIA_RHINE is not set | ||
| 588 | |||
| 589 | # | ||
| 590 | # Ethernet (1000 Mbit) | ||
| 591 | # | ||
| 592 | # CONFIG_ACENIC is not set | ||
| 593 | # CONFIG_DL2K is not set | ||
| 594 | CONFIG_E1000=y | ||
| 595 | # CONFIG_E1000_NAPI is not set | ||
| 596 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||
| 597 | # CONFIG_NS83820 is not set | ||
| 598 | # CONFIG_HAMACHI is not set | ||
| 599 | # CONFIG_YELLOWFIN is not set | ||
| 600 | # CONFIG_R8169 is not set | ||
| 601 | # CONFIG_SIS190 is not set | ||
| 602 | # CONFIG_SKGE is not set | ||
| 603 | # CONFIG_SKY2 is not set | ||
| 604 | # CONFIG_SK98LIN is not set | ||
| 605 | # CONFIG_VIA_VELOCITY is not set | ||
| 606 | CONFIG_TIGON3=y | ||
| 607 | # CONFIG_BNX2 is not set | ||
| 608 | |||
| 609 | # | ||
| 610 | # Ethernet (10000 Mbit) | ||
| 611 | # | ||
| 612 | # CONFIG_CHELSIO_T1 is not set | ||
| 613 | # CONFIG_IXGB is not set | ||
| 614 | # CONFIG_S2IO is not set | ||
| 615 | |||
| 616 | # | ||
| 617 | # Token Ring devices | ||
| 618 | # | ||
| 619 | # CONFIG_TR is not set | ||
| 620 | |||
| 621 | # | ||
| 622 | # Wireless LAN (non-hamradio) | ||
| 623 | # | ||
| 624 | # CONFIG_NET_RADIO is not set | ||
| 625 | |||
| 626 | # | ||
| 627 | # Wan interfaces | ||
| 628 | # | ||
| 629 | # CONFIG_WAN is not set | ||
| 630 | # CONFIG_FDDI is not set | ||
| 631 | # CONFIG_HIPPI is not set | ||
| 632 | # CONFIG_PPP is not set | ||
| 633 | # CONFIG_SLIP is not set | ||
| 634 | # CONFIG_NET_FC is not set | ||
| 635 | # CONFIG_SHAPER is not set | ||
| 636 | CONFIG_NETCONSOLE=y | ||
| 637 | CONFIG_NETPOLL=y | ||
| 638 | # CONFIG_NETPOLL_RX is not set | ||
| 639 | # CONFIG_NETPOLL_TRAP is not set | ||
| 640 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 641 | |||
| 642 | # | ||
| 643 | # ISDN subsystem | ||
| 644 | # | ||
| 645 | # CONFIG_ISDN is not set | ||
| 646 | |||
| 647 | # | ||
| 648 | # Telephony Support | ||
| 649 | # | ||
| 650 | # CONFIG_PHONE is not set | ||
| 651 | |||
| 652 | # | ||
| 653 | # Input device support | ||
| 654 | # | ||
| 655 | CONFIG_INPUT=y | ||
| 656 | |||
| 657 | # | ||
| 658 | # Userland interfaces | ||
| 659 | # | ||
| 660 | CONFIG_INPUT_MOUSEDEV=y | ||
| 661 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 662 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 663 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 664 | # CONFIG_INPUT_JOYDEV is not set | ||
| 665 | # CONFIG_INPUT_TSDEV is not set | ||
| 666 | # CONFIG_INPUT_EVDEV is not set | ||
| 667 | # CONFIG_INPUT_EVBUG is not set | ||
| 668 | |||
| 669 | # | ||
| 670 | # Input Device Drivers | ||
| 671 | # | ||
| 672 | CONFIG_INPUT_KEYBOARD=y | ||
| 673 | CONFIG_KEYBOARD_ATKBD=y | ||
| 674 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 675 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 676 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 677 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 678 | CONFIG_INPUT_MOUSE=y | ||
| 679 | CONFIG_MOUSE_PS2=y | ||
| 680 | # CONFIG_MOUSE_SERIAL is not set | ||
| 681 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 682 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 683 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 684 | # CONFIG_INPUT_MISC is not set | ||
| 685 | |||
| 686 | # | ||
| 687 | # Hardware I/O ports | ||
| 688 | # | ||
| 689 | CONFIG_SERIO=y | ||
| 690 | CONFIG_SERIO_I8042=y | ||
| 691 | # CONFIG_SERIO_SERPORT is not set | ||
| 692 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 693 | CONFIG_SERIO_LIBPS2=y | ||
| 694 | # CONFIG_SERIO_RAW is not set | ||
| 695 | CONFIG_GAMEPORT=m | ||
| 696 | # CONFIG_GAMEPORT_NS558 is not set | ||
| 697 | # CONFIG_GAMEPORT_L4 is not set | ||
| 698 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
| 699 | # CONFIG_GAMEPORT_FM801 is not set | ||
| 700 | |||
| 701 | # | ||
| 702 | # Character devices | ||
| 703 | # | ||
| 704 | CONFIG_VT=y | ||
| 705 | CONFIG_VT_CONSOLE=y | ||
| 706 | CONFIG_HW_CONSOLE=y | ||
| 707 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 708 | # CONFIG_COMPUTONE is not set | ||
| 709 | # CONFIG_ROCKETPORT is not set | ||
| 710 | # CONFIG_CYCLADES is not set | ||
| 711 | # CONFIG_DIGIEPCA is not set | ||
| 712 | # CONFIG_MOXA_INTELLIO is not set | ||
| 713 | # CONFIG_MOXA_SMARTIO is not set | ||
| 714 | # CONFIG_ISI is not set | ||
| 715 | # CONFIG_SYNCLINKMP is not set | ||
| 716 | # CONFIG_SYNCLINK_GT is not set | ||
| 717 | # CONFIG_N_HDLC is not set | ||
| 718 | # CONFIG_SPECIALIX is not set | ||
| 719 | # CONFIG_SX is not set | ||
| 720 | # CONFIG_STALDRV is not set | ||
| 721 | CONFIG_SGI_SNSC=y | ||
| 722 | CONFIG_SGI_TIOCX=y | ||
| 723 | CONFIG_SGI_MBCS=m | ||
| 724 | |||
| 725 | # | ||
| 726 | # Serial drivers | ||
| 727 | # | ||
| 728 | CONFIG_SERIAL_8250=y | ||
| 729 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 730 | CONFIG_SERIAL_8250_ACPI=y | ||
| 731 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 732 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 733 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 734 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 735 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 736 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 737 | |||
| 738 | # | ||
| 739 | # Non-8250 serial port support | ||
| 740 | # | ||
| 741 | CONFIG_SERIAL_CORE=y | ||
| 742 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 743 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | ||
| 744 | # CONFIG_SERIAL_JSM is not set | ||
| 745 | CONFIG_SERIAL_SGI_IOC4=y | ||
| 746 | CONFIG_SERIAL_SGI_IOC3=y | ||
| 747 | CONFIG_UNIX98_PTYS=y | ||
| 748 | CONFIG_LEGACY_PTYS=y | ||
| 749 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 750 | |||
| 751 | # | ||
| 752 | # IPMI | ||
| 753 | # | ||
| 754 | # CONFIG_IPMI_HANDLER is not set | ||
| 755 | |||
| 756 | # | ||
| 757 | # Watchdog Cards | ||
| 758 | # | ||
| 759 | # CONFIG_WATCHDOG is not set | ||
| 760 | # CONFIG_HW_RANDOM is not set | ||
| 761 | CONFIG_EFI_RTC=y | ||
| 762 | # CONFIG_DTLK is not set | ||
| 763 | # CONFIG_R3964 is not set | ||
| 764 | # CONFIG_APPLICOM is not set | ||
| 765 | |||
| 766 | # | ||
| 767 | # Ftape, the floppy tape device driver | ||
| 768 | # | ||
| 769 | CONFIG_AGP=m | ||
| 770 | CONFIG_AGP_I460=m | ||
| 771 | CONFIG_AGP_HP_ZX1=m | ||
| 772 | CONFIG_AGP_SGI_TIOCA=m | ||
| 773 | CONFIG_DRM=m | 38 | CONFIG_DRM=m |
| 774 | CONFIG_DRM_TDFX=m | 39 | CONFIG_DRM_MGA=m |
| 775 | CONFIG_DRM_R128=m | 40 | CONFIG_DRM_R128=m |
| 776 | CONFIG_DRM_RADEON=m | 41 | CONFIG_DRM_RADEON=m |
| 777 | CONFIG_DRM_MGA=m | ||
| 778 | CONFIG_DRM_SIS=m | 42 | CONFIG_DRM_SIS=m |
| 779 | # CONFIG_DRM_VIA is not set | 43 | CONFIG_DRM_TDFX=m |
| 780 | # CONFIG_DRM_SAVAGE is not set | 44 | CONFIG_DUMMY=m |
| 781 | CONFIG_RAW_DRIVER=m | 45 | CONFIG_E1000=y |
| 782 | CONFIG_MAX_RAW_DEVS=256 | 46 | CONFIG_E100=m |
| 783 | CONFIG_HPET=y | 47 | CONFIG_EFI_PARTITION=y |
| 784 | # CONFIG_HPET_RTC_IRQ is not set | 48 | CONFIG_EFI_RTC=y |
| 785 | CONFIG_HPET_MMAP=y | 49 | CONFIG_EFI_VARS=y |
| 786 | # CONFIG_HANGCHECK_TIMER is not set | 50 | CONFIG_EXPERIMENTAL=y |
| 787 | CONFIG_MMTIMER=y | ||
| 788 | |||
| 789 | # | ||
| 790 | # TPM devices | ||
| 791 | # | ||
| 792 | # CONFIG_TCG_TPM is not set | ||
| 793 | # CONFIG_TELCLOCK is not set | ||
| 794 | |||
| 795 | # | ||
| 796 | # I2C support | ||
| 797 | # | ||
| 798 | # CONFIG_I2C is not set | ||
| 799 | |||
| 800 | # | ||
| 801 | # SPI support | ||
| 802 | # | ||
| 803 | # CONFIG_SPI is not set | ||
| 804 | # CONFIG_SPI_MASTER is not set | ||
| 805 | |||
| 806 | # | ||
| 807 | # Dallas's 1-wire bus | ||
| 808 | # | ||
| 809 | # CONFIG_W1 is not set | ||
| 810 | |||
| 811 | # | ||
| 812 | # Hardware Monitoring support | ||
| 813 | # | ||
| 814 | CONFIG_HWMON=y | ||
| 815 | # CONFIG_HWMON_VID is not set | ||
| 816 | # CONFIG_SENSORS_F71805F is not set | ||
| 817 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 818 | |||
| 819 | # | ||
| 820 | # Misc devices | ||
| 821 | # | ||
| 822 | |||
| 823 | # | ||
| 824 | # Multimedia Capabilities Port drivers | ||
| 825 | # | ||
| 826 | |||
| 827 | # | ||
| 828 | # Multimedia devices | ||
| 829 | # | ||
| 830 | # CONFIG_VIDEO_DEV is not set | ||
| 831 | |||
| 832 | # | ||
| 833 | # Digital Video Broadcasting Devices | ||
| 834 | # | ||
| 835 | # CONFIG_DVB is not set | ||
| 836 | |||
| 837 | # | ||
| 838 | # Graphics support | ||
| 839 | # | ||
| 840 | # CONFIG_FB is not set | ||
| 841 | |||
| 842 | # | ||
| 843 | # Console display driver support | ||
| 844 | # | ||
| 845 | CONFIG_VGA_CONSOLE=y | ||
| 846 | CONFIG_DUMMY_CONSOLE=y | ||
| 847 | |||
| 848 | # | ||
| 849 | # Sound | ||
| 850 | # | ||
| 851 | CONFIG_SOUND=m | ||
| 852 | |||
| 853 | # | ||
| 854 | # Advanced Linux Sound Architecture | ||
| 855 | # | ||
| 856 | CONFIG_SND=m | ||
| 857 | CONFIG_SND_TIMER=m | ||
| 858 | CONFIG_SND_PCM=m | ||
| 859 | CONFIG_SND_HWDEP=m | ||
| 860 | CONFIG_SND_RAWMIDI=m | ||
| 861 | CONFIG_SND_SEQUENCER=m | ||
| 862 | CONFIG_SND_SEQ_DUMMY=m | ||
| 863 | CONFIG_SND_OSSEMUL=y | ||
| 864 | CONFIG_SND_MIXER_OSS=m | ||
| 865 | CONFIG_SND_PCM_OSS=m | ||
| 866 | CONFIG_SND_SEQUENCER_OSS=y | ||
| 867 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 868 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 869 | CONFIG_SND_VERBOSE_PRINTK=y | ||
| 870 | # CONFIG_SND_DEBUG is not set | ||
| 871 | |||
| 872 | # | ||
| 873 | # Generic devices | ||
| 874 | # | ||
| 875 | CONFIG_SND_MPU401_UART=m | ||
| 876 | CONFIG_SND_OPL3_LIB=m | ||
| 877 | CONFIG_SND_AC97_CODEC=m | ||
| 878 | CONFIG_SND_AC97_BUS=m | ||
| 879 | CONFIG_SND_DUMMY=m | ||
| 880 | CONFIG_SND_VIRMIDI=m | ||
| 881 | CONFIG_SND_MTPAV=m | ||
| 882 | CONFIG_SND_SERIAL_U16550=m | ||
| 883 | CONFIG_SND_MPU401=m | ||
| 884 | |||
| 885 | # | ||
| 886 | # PCI devices | ||
| 887 | # | ||
| 888 | # CONFIG_SND_AD1889 is not set | ||
| 889 | # CONFIG_SND_ALI5451 is not set | ||
| 890 | # CONFIG_SND_ATIIXP is not set | ||
| 891 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
| 892 | # CONFIG_SND_AU8810 is not set | ||
| 893 | # CONFIG_SND_AU8820 is not set | ||
| 894 | # CONFIG_SND_AU8830 is not set | ||
| 895 | # CONFIG_SND_AZT3328 is not set | ||
| 896 | # CONFIG_SND_BT87X is not set | ||
| 897 | # CONFIG_SND_CA0106 is not set | ||
| 898 | # CONFIG_SND_CMIPCI is not set | ||
| 899 | CONFIG_SND_CS4281=m | ||
| 900 | CONFIG_SND_CS46XX=m | ||
| 901 | CONFIG_SND_CS46XX_NEW_DSP=y | ||
| 902 | CONFIG_SND_EMU10K1=m | ||
| 903 | # CONFIG_SND_EMU10K1X is not set | ||
| 904 | # CONFIG_SND_ENS1370 is not set | ||
| 905 | # CONFIG_SND_ENS1371 is not set | ||
| 906 | # CONFIG_SND_ES1938 is not set | ||
| 907 | # CONFIG_SND_ES1968 is not set | ||
| 908 | CONFIG_SND_FM801=m | ||
| 909 | # CONFIG_SND_FM801_TEA575X is not set | ||
| 910 | # CONFIG_SND_HDA_INTEL is not set | ||
| 911 | # CONFIG_SND_HDSP is not set | ||
| 912 | # CONFIG_SND_HDSPM is not set | ||
| 913 | # CONFIG_SND_ICE1712 is not set | ||
| 914 | # CONFIG_SND_ICE1724 is not set | ||
| 915 | # CONFIG_SND_INTEL8X0 is not set | ||
| 916 | # CONFIG_SND_INTEL8X0M is not set | ||
| 917 | # CONFIG_SND_KORG1212 is not set | ||
| 918 | # CONFIG_SND_MAESTRO3 is not set | ||
| 919 | # CONFIG_SND_MIXART is not set | ||
| 920 | # CONFIG_SND_NM256 is not set | ||
| 921 | # CONFIG_SND_PCXHR is not set | ||
| 922 | # CONFIG_SND_RME32 is not set | ||
| 923 | # CONFIG_SND_RME96 is not set | ||
| 924 | # CONFIG_SND_RME9652 is not set | ||
| 925 | # CONFIG_SND_SONICVIBES is not set | ||
| 926 | # CONFIG_SND_TRIDENT is not set | ||
| 927 | # CONFIG_SND_VIA82XX is not set | ||
| 928 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
| 929 | # CONFIG_SND_VX222 is not set | ||
| 930 | # CONFIG_SND_YMFPCI is not set | ||
| 931 | |||
| 932 | # | ||
| 933 | # USB devices | ||
| 934 | # | ||
| 935 | # CONFIG_SND_USB_AUDIO is not set | ||
| 936 | |||
| 937 | # | ||
| 938 | # Open Sound System | ||
| 939 | # | ||
| 940 | # CONFIG_SOUND_PRIME is not set | ||
| 941 | |||
| 942 | # | ||
| 943 | # USB support | ||
| 944 | # | ||
| 945 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 946 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 947 | CONFIG_USB=m | ||
| 948 | # CONFIG_USB_DEBUG is not set | ||
| 949 | |||
| 950 | # | ||
| 951 | # Miscellaneous USB options | ||
| 952 | # | ||
| 953 | CONFIG_USB_DEVICEFS=y | ||
| 954 | # CONFIG_USB_BANDWIDTH is not set | ||
| 955 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 956 | # CONFIG_USB_SUSPEND is not set | ||
| 957 | # CONFIG_USB_OTG is not set | ||
| 958 | |||
| 959 | # | ||
| 960 | # USB Host Controller Drivers | ||
| 961 | # | ||
| 962 | CONFIG_USB_EHCI_HCD=m | ||
| 963 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
| 964 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 965 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 966 | CONFIG_USB_OHCI_HCD=m | ||
| 967 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | ||
| 968 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 969 | CONFIG_USB_UHCI_HCD=m | ||
| 970 | # CONFIG_USB_SL811_HCD is not set | ||
| 971 | |||
| 972 | # | ||
| 973 | # USB Device Class drivers | ||
| 974 | # | ||
| 975 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | ||
| 976 | # CONFIG_USB_ACM is not set | ||
| 977 | # CONFIG_USB_PRINTER is not set | ||
| 978 | |||
| 979 | # | ||
| 980 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 981 | # | ||
| 982 | |||
| 983 | # | ||
| 984 | # may also be needed; see USB_STORAGE Help for more information | ||
| 985 | # | ||
| 986 | CONFIG_USB_STORAGE=m | ||
| 987 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 988 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 989 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 990 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 991 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 992 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 993 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 994 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 995 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 996 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 997 | # CONFIG_USB_LIBUSUAL is not set | ||
| 998 | |||
| 999 | # | ||
| 1000 | # USB Input Devices | ||
| 1001 | # | ||
| 1002 | CONFIG_USB_HID=m | ||
| 1003 | CONFIG_USB_HIDINPUT=y | ||
| 1004 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 1005 | # CONFIG_HID_FF is not set | ||
| 1006 | # CONFIG_USB_HIDDEV is not set | ||
| 1007 | |||
| 1008 | # | ||
| 1009 | # USB HID Boot Protocol drivers | ||
| 1010 | # | ||
| 1011 | # CONFIG_USB_KBD is not set | ||
| 1012 | # CONFIG_USB_MOUSE is not set | ||
| 1013 | # CONFIG_USB_AIPTEK is not set | ||
| 1014 | # CONFIG_USB_WACOM is not set | ||
| 1015 | # CONFIG_USB_ACECAD is not set | ||
| 1016 | # CONFIG_USB_KBTAB is not set | ||
| 1017 | # CONFIG_USB_POWERMATE is not set | ||
| 1018 | # CONFIG_USB_MTOUCH is not set | ||
| 1019 | # CONFIG_USB_ITMTOUCH is not set | ||
| 1020 | # CONFIG_USB_EGALAX is not set | ||
| 1021 | # CONFIG_USB_YEALINK is not set | ||
| 1022 | # CONFIG_USB_XPAD is not set | ||
| 1023 | # CONFIG_USB_ATI_REMOTE is not set | ||
| 1024 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
| 1025 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
| 1026 | # CONFIG_USB_APPLETOUCH is not set | ||
| 1027 | |||
| 1028 | # | ||
| 1029 | # USB Imaging devices | ||
| 1030 | # | ||
| 1031 | # CONFIG_USB_MDC800 is not set | ||
| 1032 | # CONFIG_USB_MICROTEK is not set | ||
| 1033 | |||
| 1034 | # | ||
| 1035 | # USB Multimedia devices | ||
| 1036 | # | ||
| 1037 | # CONFIG_USB_DABUSB is not set | ||
| 1038 | |||
| 1039 | # | ||
| 1040 | # Video4Linux support is needed for USB Multimedia device support | ||
| 1041 | # | ||
| 1042 | |||
| 1043 | # | ||
| 1044 | # USB Network Adapters | ||
| 1045 | # | ||
| 1046 | # CONFIG_USB_CATC is not set | ||
| 1047 | # CONFIG_USB_KAWETH is not set | ||
| 1048 | # CONFIG_USB_PEGASUS is not set | ||
| 1049 | # CONFIG_USB_RTL8150 is not set | ||
| 1050 | # CONFIG_USB_USBNET is not set | ||
| 1051 | CONFIG_USB_MON=y | ||
| 1052 | |||
| 1053 | # | ||
| 1054 | # USB port drivers | ||
| 1055 | # | ||
| 1056 | |||
| 1057 | # | ||
| 1058 | # USB Serial Converter support | ||
| 1059 | # | ||
| 1060 | # CONFIG_USB_SERIAL is not set | ||
| 1061 | |||
| 1062 | # | ||
| 1063 | # USB Miscellaneous drivers | ||
| 1064 | # | ||
| 1065 | # CONFIG_USB_EMI62 is not set | ||
| 1066 | # CONFIG_USB_EMI26 is not set | ||
| 1067 | # CONFIG_USB_AUERSWALD is not set | ||
| 1068 | # CONFIG_USB_RIO500 is not set | ||
| 1069 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1070 | # CONFIG_USB_LCD is not set | ||
| 1071 | # CONFIG_USB_LED is not set | ||
| 1072 | # CONFIG_USB_CYTHERM is not set | ||
| 1073 | # CONFIG_USB_PHIDGETKIT is not set | ||
| 1074 | # CONFIG_USB_PHIDGETSERVO is not set | ||
| 1075 | # CONFIG_USB_IDMOUSE is not set | ||
| 1076 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1077 | # CONFIG_USB_LD is not set | ||
| 1078 | # CONFIG_USB_TEST is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # USB DSL modem support | ||
| 1082 | # | ||
| 1083 | |||
| 1084 | # | ||
| 1085 | # USB Gadget Support | ||
| 1086 | # | ||
| 1087 | # CONFIG_USB_GADGET is not set | ||
| 1088 | |||
| 1089 | # | ||
| 1090 | # MMC/SD Card support | ||
| 1091 | # | ||
| 1092 | # CONFIG_MMC is not set | ||
| 1093 | |||
| 1094 | # | ||
| 1095 | # InfiniBand support | ||
| 1096 | # | ||
| 1097 | CONFIG_INFINIBAND=m | ||
| 1098 | # CONFIG_INFINIBAND_USER_MAD is not set | ||
| 1099 | # CONFIG_INFINIBAND_USER_ACCESS is not set | ||
| 1100 | CONFIG_INFINIBAND_MTHCA=m | ||
| 1101 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | ||
| 1102 | CONFIG_INFINIBAND_IPOIB=m | ||
| 1103 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | ||
| 1104 | # CONFIG_INFINIBAND_SRP is not set | ||
| 1105 | |||
| 1106 | # | ||
| 1107 | # SN Devices | ||
| 1108 | # | ||
| 1109 | CONFIG_SGI_IOC4=y | ||
| 1110 | CONFIG_SGI_IOC3=y | ||
| 1111 | |||
| 1112 | # | ||
| 1113 | # EDAC - error detection and reporting (RAS) | ||
| 1114 | # | ||
| 1115 | |||
| 1116 | # | ||
| 1117 | # File systems | ||
| 1118 | # | ||
| 1119 | CONFIG_EXT2_FS=y | ||
| 1120 | CONFIG_EXT2_FS_XATTR=y | ||
| 1121 | CONFIG_EXT2_FS_POSIX_ACL=y | 51 | CONFIG_EXT2_FS_POSIX_ACL=y |
| 1122 | CONFIG_EXT2_FS_SECURITY=y | 52 | CONFIG_EXT2_FS_SECURITY=y |
| 1123 | # CONFIG_EXT2_FS_XIP is not set | 53 | CONFIG_EXT2_FS_XATTR=y |
| 1124 | CONFIG_EXT3_FS=y | 54 | CONFIG_EXT2_FS=y |
| 1125 | CONFIG_EXT3_FS_XATTR=y | ||
| 1126 | CONFIG_EXT3_FS_POSIX_ACL=y | 55 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1127 | CONFIG_EXT3_FS_SECURITY=y | 56 | CONFIG_EXT3_FS_SECURITY=y |
| 1128 | CONFIG_JBD=y | 57 | CONFIG_EXT3_FS=y |
| 1129 | # CONFIG_JBD_DEBUG is not set | 58 | CONFIG_FUSION_FC=m |
| 1130 | CONFIG_FS_MBCACHE=y | 59 | CONFIG_FUSION_SPI=y |
| 1131 | CONFIG_REISERFS_FS=y | 60 | CONFIG_FUSION=y |
| 1132 | # CONFIG_REISERFS_CHECK is not set | 61 | CONFIG_GAMEPORT=m |
| 1133 | # CONFIG_REISERFS_PROC_INFO is not set | 62 | CONFIG_HOTPLUG_CPU=y |
| 1134 | CONFIG_REISERFS_FS_XATTR=y | 63 | CONFIG_HOTPLUG_PCI_ACPI=m |
| 1135 | CONFIG_REISERFS_FS_POSIX_ACL=y | 64 | CONFIG_HOTPLUG_PCI=m |
| 1136 | CONFIG_REISERFS_FS_SECURITY=y | 65 | CONFIG_HPET=y |
| 1137 | # CONFIG_JFS_FS is not set | 66 | CONFIG_HUGETLBFS=y |
| 1138 | CONFIG_FS_POSIX_ACL=y | 67 | # CONFIG_HW_RANDOM is not set |
| 1139 | CONFIG_XFS_FS=y | 68 | CONFIG_IA64_CYCLONE=y |
| 1140 | CONFIG_XFS_EXPORT=y | 69 | CONFIG_IA64_MCA_RECOVERY=y |
| 1141 | # CONFIG_XFS_QUOTA is not set | 70 | CONFIG_IA64_PALINFO=y |
| 1142 | # CONFIG_XFS_SECURITY is not set | 71 | CONFIG_IDE_GENERIC=y |
| 1143 | # CONFIG_XFS_POSIX_ACL is not set | 72 | CONFIG_IDE=y |
| 1144 | # CONFIG_XFS_RT is not set | 73 | CONFIG_IKCONFIG_PROC=y |
| 1145 | # CONFIG_OCFS2_FS is not set | 74 | CONFIG_IKCONFIG=y |
| 1146 | # CONFIG_MINIX_FS is not set | 75 | CONFIG_INET=y |
| 1147 | # CONFIG_ROMFS_FS is not set | 76 | CONFIG_INFINIBAND_IPOIB=m |
| 77 | CONFIG_INFINIBAND=m | ||
| 78 | CONFIG_INFINIBAND_MTHCA=m | ||
| 1148 | CONFIG_INOTIFY=y | 79 | CONFIG_INOTIFY=y |
| 1149 | # CONFIG_QUOTA is not set | 80 | CONFIG_IP_MULTICAST=y |
| 1150 | CONFIG_DNOTIFY=y | 81 | # CONFIG_IPV6 is not set |
| 1151 | CONFIG_AUTOFS_FS=y | ||
| 1152 | CONFIG_AUTOFS4_FS=y | ||
| 1153 | # CONFIG_FUSE_FS is not set | ||
| 1154 | |||
| 1155 | # | ||
| 1156 | # CD-ROM/DVD Filesystems | ||
| 1157 | # | ||
| 1158 | CONFIG_ISO9660_FS=m | 82 | CONFIG_ISO9660_FS=m |
| 1159 | CONFIG_JOLIET=y | 83 | CONFIG_JOLIET=y |
| 1160 | # CONFIG_ZISOFS is not set | 84 | CONFIG_KALLSYMS_ALL=y |
| 1161 | CONFIG_UDF_FS=m | 85 | CONFIG_LOG_BUF_SHIFT=20 |
| 1162 | CONFIG_UDF_NLS=y | 86 | CONFIG_MAGIC_SYSRQ=y |
| 1163 | 87 | CONFIG_MCKINLEY=y | |
| 1164 | # | 88 | CONFIG_MD_LINEAR=m |
| 1165 | # DOS/FAT/NT Filesystems | 89 | CONFIG_MD_MULTIPATH=m |
| 1166 | # | 90 | CONFIG_MD_RAID0=m |
| 1167 | CONFIG_FAT_FS=y | 91 | CONFIG_MD_RAID1=m |
| 1168 | # CONFIG_MSDOS_FS is not set | 92 | CONFIG_MD=y |
| 1169 | CONFIG_VFAT_FS=y | 93 | CONFIG_MODULES=y |
| 1170 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 94 | CONFIG_MODULE_UNLOAD=y |
| 1171 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 95 | CONFIG_MODVERSIONS=y |
| 1172 | CONFIG_NTFS_FS=m | 96 | CONFIG_NETCONSOLE=y |
| 1173 | # CONFIG_NTFS_DEBUG is not set | 97 | CONFIG_NETDEVICES=y |
| 1174 | # CONFIG_NTFS_RW is not set | 98 | CONFIG_NET_ETHERNET=y |
| 1175 | 99 | CONFIG_NET_PCI=y | |
| 1176 | # | 100 | CONFIG_NET_TULIP=y |
| 1177 | # Pseudo filesystems | 101 | CONFIG_NFSD=m |
| 1178 | # | 102 | CONFIG_NFSD_V4=y |
| 1179 | CONFIG_PROC_FS=y | ||
| 1180 | CONFIG_PROC_KCORE=y | ||
| 1181 | CONFIG_SYSFS=y | ||
| 1182 | CONFIG_TMPFS=y | ||
| 1183 | CONFIG_HUGETLBFS=y | ||
| 1184 | CONFIG_HUGETLB_PAGE=y | ||
| 1185 | CONFIG_RAMFS=y | ||
| 1186 | # CONFIG_RELAYFS_FS is not set | ||
| 1187 | # CONFIG_CONFIGFS_FS is not set | ||
| 1188 | |||
| 1189 | # | ||
| 1190 | # Miscellaneous filesystems | ||
| 1191 | # | ||
| 1192 | # CONFIG_ADFS_FS is not set | ||
| 1193 | # CONFIG_AFFS_FS is not set | ||
| 1194 | # CONFIG_HFS_FS is not set | ||
| 1195 | # CONFIG_HFSPLUS_FS is not set | ||
| 1196 | # CONFIG_BEFS_FS is not set | ||
| 1197 | # CONFIG_BFS_FS is not set | ||
| 1198 | # CONFIG_EFS_FS is not set | ||
| 1199 | # CONFIG_CRAMFS is not set | ||
| 1200 | # CONFIG_VXFS_FS is not set | ||
| 1201 | # CONFIG_HPFS_FS is not set | ||
| 1202 | # CONFIG_QNX4FS_FS is not set | ||
| 1203 | # CONFIG_SYSV_FS is not set | ||
| 1204 | # CONFIG_UFS_FS is not set | ||
| 1205 | |||
| 1206 | # | ||
| 1207 | # Network File Systems | ||
| 1208 | # | ||
| 1209 | CONFIG_NFS_FS=m | 103 | CONFIG_NFS_FS=m |
| 1210 | CONFIG_NFS_V3=y | 104 | CONFIG_NFS_V3=y |
| 1211 | # CONFIG_NFS_V3_ACL is not set | ||
| 1212 | CONFIG_NFS_V4=y | 105 | CONFIG_NFS_V4=y |
| 1213 | CONFIG_NFS_DIRECTIO=y | 106 | CONFIG_NLS_CODEPAGE_1250=m |
| 1214 | CONFIG_NFSD=m | 107 | CONFIG_NLS_CODEPAGE_1251=m |
| 1215 | CONFIG_NFSD_V3=y | ||
| 1216 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1217 | CONFIG_NFSD_V4=y | ||
| 1218 | CONFIG_NFSD_TCP=y | ||
| 1219 | CONFIG_LOCKD=m | ||
| 1220 | CONFIG_LOCKD_V4=y | ||
| 1221 | CONFIG_EXPORTFS=y | ||
| 1222 | CONFIG_NFS_COMMON=y | ||
| 1223 | CONFIG_SUNRPC=m | ||
| 1224 | CONFIG_SUNRPC_GSS=m | ||
| 1225 | CONFIG_RPCSEC_GSS_KRB5=m | ||
| 1226 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1227 | CONFIG_SMB_FS=m | ||
| 1228 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 1229 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
| 1230 | CONFIG_CIFS=m | ||
| 1231 | # CONFIG_CIFS_STATS is not set | ||
| 1232 | # CONFIG_CIFS_XATTR is not set | ||
| 1233 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1234 | # CONFIG_NCP_FS is not set | ||
| 1235 | # CONFIG_CODA_FS is not set | ||
| 1236 | # CONFIG_AFS_FS is not set | ||
| 1237 | # CONFIG_9P_FS is not set | ||
| 1238 | |||
| 1239 | # | ||
| 1240 | # Partition Types | ||
| 1241 | # | ||
| 1242 | CONFIG_PARTITION_ADVANCED=y | ||
| 1243 | # CONFIG_ACORN_PARTITION is not set | ||
| 1244 | # CONFIG_OSF_PARTITION is not set | ||
| 1245 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1246 | # CONFIG_ATARI_PARTITION is not set | ||
| 1247 | # CONFIG_MAC_PARTITION is not set | ||
| 1248 | CONFIG_MSDOS_PARTITION=y | ||
| 1249 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1250 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1251 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1252 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1253 | # CONFIG_LDM_PARTITION is not set | ||
| 1254 | CONFIG_SGI_PARTITION=y | ||
| 1255 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1256 | # CONFIG_SUN_PARTITION is not set | ||
| 1257 | # CONFIG_KARMA_PARTITION is not set | ||
| 1258 | CONFIG_EFI_PARTITION=y | ||
| 1259 | |||
| 1260 | # | ||
| 1261 | # Native Language Support | ||
| 1262 | # | ||
| 1263 | CONFIG_NLS=y | ||
| 1264 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1265 | CONFIG_NLS_CODEPAGE_437=y | 108 | CONFIG_NLS_CODEPAGE_437=y |
| 1266 | CONFIG_NLS_CODEPAGE_737=m | 109 | CONFIG_NLS_CODEPAGE_737=m |
| 1267 | CONFIG_NLS_CODEPAGE_775=m | 110 | CONFIG_NLS_CODEPAGE_775=m |
| @@ -1277,15 +120,14 @@ CONFIG_NLS_CODEPAGE_864=m | |||
| 1277 | CONFIG_NLS_CODEPAGE_865=m | 120 | CONFIG_NLS_CODEPAGE_865=m |
| 1278 | CONFIG_NLS_CODEPAGE_866=m | 121 | CONFIG_NLS_CODEPAGE_866=m |
| 1279 | CONFIG_NLS_CODEPAGE_869=m | 122 | CONFIG_NLS_CODEPAGE_869=m |
| 1280 | CONFIG_NLS_CODEPAGE_936=m | 123 | CONFIG_NLS_CODEPAGE_874=m |
| 1281 | CONFIG_NLS_CODEPAGE_950=m | ||
| 1282 | CONFIG_NLS_CODEPAGE_932=m | 124 | CONFIG_NLS_CODEPAGE_932=m |
| 125 | CONFIG_NLS_CODEPAGE_936=m | ||
| 1283 | CONFIG_NLS_CODEPAGE_949=m | 126 | CONFIG_NLS_CODEPAGE_949=m |
| 1284 | CONFIG_NLS_CODEPAGE_874=m | 127 | CONFIG_NLS_CODEPAGE_950=m |
| 1285 | CONFIG_NLS_ISO8859_8=m | 128 | CONFIG_NLS_ISO8859_13=m |
| 1286 | CONFIG_NLS_CODEPAGE_1250=m | 129 | CONFIG_NLS_ISO8859_14=m |
| 1287 | CONFIG_NLS_CODEPAGE_1251=m | 130 | CONFIG_NLS_ISO8859_15=m |
| 1288 | # CONFIG_NLS_ASCII is not set | ||
| 1289 | CONFIG_NLS_ISO8859_1=y | 131 | CONFIG_NLS_ISO8859_1=y |
| 1290 | CONFIG_NLS_ISO8859_2=m | 132 | CONFIG_NLS_ISO8859_2=m |
| 1291 | CONFIG_NLS_ISO8859_3=m | 133 | CONFIG_NLS_ISO8859_3=m |
| @@ -1293,100 +135,77 @@ CONFIG_NLS_ISO8859_4=m | |||
| 1293 | CONFIG_NLS_ISO8859_5=m | 135 | CONFIG_NLS_ISO8859_5=m |
| 1294 | CONFIG_NLS_ISO8859_6=m | 136 | CONFIG_NLS_ISO8859_6=m |
| 1295 | CONFIG_NLS_ISO8859_7=m | 137 | CONFIG_NLS_ISO8859_7=m |
| 138 | CONFIG_NLS_ISO8859_8=m | ||
| 1296 | CONFIG_NLS_ISO8859_9=m | 139 | CONFIG_NLS_ISO8859_9=m |
| 1297 | CONFIG_NLS_ISO8859_13=m | ||
| 1298 | CONFIG_NLS_ISO8859_14=m | ||
| 1299 | CONFIG_NLS_ISO8859_15=m | ||
| 1300 | CONFIG_NLS_KOI8_R=m | 140 | CONFIG_NLS_KOI8_R=m |
| 1301 | CONFIG_NLS_KOI8_U=m | 141 | CONFIG_NLS_KOI8_U=m |
| 1302 | CONFIG_NLS_UTF8=m | 142 | CONFIG_NLS_UTF8=m |
| 1303 | 143 | CONFIG_NR_CPUS=512 | |
| 1304 | # | 144 | CONFIG_NTFS_FS=m |
| 1305 | # Library routines | 145 | CONFIG_PACKET=y |
| 1306 | # | 146 | CONFIG_PARTITION_ADVANCED=y |
| 1307 | # CONFIG_CRC_CCITT is not set | 147 | CONFIG_PERFMON=y |
| 1308 | # CONFIG_CRC16 is not set | 148 | CONFIG_POSIX_MQUEUE=y |
| 1309 | CONFIG_CRC32=y | 149 | CONFIG_PROC_KCORE=y |
| 1310 | # CONFIG_LIBCRC32C is not set | 150 | CONFIG_RAW_DRIVER=m |
| 1311 | CONFIG_GENERIC_HARDIRQS=y | 151 | CONFIG_REISERFS_FS_POSIX_ACL=y |
| 1312 | CONFIG_GENERIC_IRQ_PROBE=y | 152 | CONFIG_REISERFS_FS_SECURITY=y |
| 1313 | CONFIG_GENERIC_PENDING_IRQ=y | 153 | CONFIG_REISERFS_FS_XATTR=y |
| 1314 | 154 | CONFIG_REISERFS_FS=y | |
| 1315 | # | 155 | CONFIG_SCSI_FC_ATTRS=y |
| 1316 | # HP Simulator drivers | 156 | CONFIG_SCSI_QLOGIC_1280=y |
| 1317 | # | 157 | CONFIG_SCSI_SYM53C8XX_2=y |
| 1318 | # CONFIG_HP_SIMETH is not set | 158 | CONFIG_SCSI=y |
| 1319 | # CONFIG_HP_SIMSERIAL is not set | 159 | CONFIG_SERIAL_8250_CONSOLE=y |
| 1320 | # CONFIG_HP_SIMSCSI is not set | 160 | CONFIG_SERIAL_8250_EXTENDED=y |
| 1321 | 161 | CONFIG_SERIAL_8250_NR_UARTS=6 | |
| 1322 | # | 162 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 1323 | # Instrumentation Support | 163 | CONFIG_SERIAL_8250=y |
| 1324 | # | 164 | CONFIG_SERIAL_NONSTANDARD=y |
| 1325 | # CONFIG_PROFILING is not set | 165 | CONFIG_SERIAL_SGI_IOC3=y |
| 1326 | # CONFIG_KPROBES is not set | 166 | CONFIG_SERIAL_SGI_IOC4=y |
| 1327 | 167 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | |
| 1328 | # | 168 | # CONFIG_SERIO_SERPORT is not set |
| 1329 | # Kernel hacking | 169 | CONFIG_SGI_IOC3=y |
| 1330 | # | 170 | CONFIG_SGI_IOC4=y |
| 1331 | # CONFIG_PRINTK_TIME is not set | 171 | CONFIG_SGI_MBCS=m |
| 1332 | CONFIG_MAGIC_SYSRQ=y | 172 | CONFIG_SGI_PARTITION=y |
| 1333 | CONFIG_DEBUG_KERNEL=y | 173 | CONFIG_SGI_SNSC=y |
| 1334 | CONFIG_LOG_BUF_SHIFT=20 | 174 | CONFIG_SGI_TIOCX=y |
| 1335 | CONFIG_DETECT_SOFTLOCKUP=y | 175 | CONFIG_SMB_FS=m |
| 1336 | # CONFIG_SCHEDSTATS is not set | 176 | CONFIG_SMB_NLS_DEFAULT=y |
| 1337 | # CONFIG_DEBUG_SLAB is not set | 177 | CONFIG_SMP=y |
| 1338 | CONFIG_DEBUG_MUTEXES=y | 178 | CONFIG_SND_CS4281=m |
| 1339 | # CONFIG_DEBUG_SPINLOCK is not set | 179 | CONFIG_SND_CS46XX=m |
| 1340 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 180 | CONFIG_SND_DUMMY=m |
| 1341 | # CONFIG_DEBUG_KOBJECT is not set | 181 | CONFIG_SND_EMU10K1=m |
| 1342 | # CONFIG_DEBUG_INFO is not set | 182 | CONFIG_SND_FM801=m |
| 1343 | # CONFIG_DEBUG_FS is not set | 183 | CONFIG_SND=m |
| 1344 | # CONFIG_DEBUG_VM is not set | 184 | CONFIG_SND_MIXER_OSS=m |
| 1345 | CONFIG_FORCED_INLINING=y | 185 | CONFIG_SND_MPU401=m |
| 1346 | # CONFIG_RCU_TORTURE_TEST is not set | 186 | CONFIG_SND_MTPAV=m |
| 1347 | CONFIG_IA64_GRANULE_16MB=y | 187 | CONFIG_SND_PCM_OSS=m |
| 1348 | # CONFIG_IA64_GRANULE_64MB is not set | 188 | CONFIG_SND_SEQ_DUMMY=m |
| 1349 | # CONFIG_IA64_PRINT_HAZARDS is not set | 189 | CONFIG_SND_SEQUENCER=m |
| 1350 | # CONFIG_DISABLE_VHPT is not set | 190 | CONFIG_SND_SEQUENCER_OSS=y |
| 1351 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | 191 | CONFIG_SND_SERIAL_U16550=m |
| 1352 | # CONFIG_IA64_DEBUG_IRQ is not set | 192 | CONFIG_SND_VERBOSE_PRINTK=y |
| 1353 | CONFIG_SYSVIPC_COMPAT=y | 193 | CONFIG_SND_VIRMIDI=m |
| 1354 | 194 | CONFIG_SOUND=m | |
| 1355 | # | 195 | CONFIG_SPARSEMEM_MANUAL=y |
| 1356 | # Security options | 196 | CONFIG_SYN_COOKIES=y |
| 1357 | # | 197 | CONFIG_SYSVIPC=y |
| 1358 | # CONFIG_KEYS is not set | 198 | CONFIG_TIGON3=y |
| 1359 | # CONFIG_SECURITY is not set | 199 | CONFIG_TMPFS=y |
| 1360 | 200 | CONFIG_TULIP=m | |
| 1361 | # | 201 | CONFIG_UDF_FS=m |
| 1362 | # Cryptographic options | 202 | CONFIG_UNIX=y |
| 1363 | # | 203 | CONFIG_USB_DEVICEFS=y |
| 1364 | CONFIG_CRYPTO=y | 204 | CONFIG_USB_EHCI_HCD=m |
| 1365 | # CONFIG_CRYPTO_HMAC is not set | 205 | CONFIG_USB=m |
| 1366 | # CONFIG_CRYPTO_NULL is not set | 206 | CONFIG_USB_MON=m |
| 1367 | # CONFIG_CRYPTO_MD4 is not set | 207 | CONFIG_USB_OHCI_HCD=m |
| 1368 | CONFIG_CRYPTO_MD5=y | 208 | CONFIG_USB_STORAGE=m |
| 1369 | # CONFIG_CRYPTO_SHA1 is not set | 209 | CONFIG_USB_UHCI_HCD=m |
| 1370 | # CONFIG_CRYPTO_SHA256 is not set | 210 | CONFIG_VFAT_FS=y |
| 1371 | # CONFIG_CRYPTO_SHA512 is not set | 211 | CONFIG_XFS_FS=y |
| 1372 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1373 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1374 | CONFIG_CRYPTO_DES=m | ||
| 1375 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1376 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1377 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1378 | # CONFIG_CRYPTO_AES is not set | ||
| 1379 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1380 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1381 | # CONFIG_CRYPTO_TEA is not set | ||
| 1382 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1383 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1384 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1385 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1386 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1387 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1388 | # CONFIG_CRYPTO_TEST is not set | ||
| 1389 | |||
| 1390 | # | ||
| 1391 | # Hardware crypto devices | ||
| 1392 | # | ||
diff --git a/arch/ia64/configs/sim_defconfig b/arch/ia64/configs/sim_defconfig index 21a23cdfd41c..585222b368c3 100644 --- a/arch/ia64/configs/sim_defconfig +++ b/arch/ia64/configs/sim_defconfig | |||
| @@ -1,723 +1,57 @@ | |||
| 1 | # | 1 | CONFIG_BINFMT_MISC=y |
| 2 | # Automatically generated make config: don't edit | 2 | CONFIG_BLK_DEV_LOOP=y |
| 3 | # Linux kernel version: 2.6.16-rc5 | 3 | CONFIG_BLK_DEV_RAM=y |
| 4 | # Mon Feb 27 16:13:41 2006 | 4 | CONFIG_BLK_DEV_SD=y |
| 5 | # | ||
| 6 | |||
| 7 | # | ||
| 8 | # Code maturity level options | ||
| 9 | # | ||
| 10 | CONFIG_EXPERIMENTAL=y | ||
| 11 | CONFIG_LOCK_KERNEL=y | ||
| 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 13 | |||
| 14 | # | ||
| 15 | # General setup | ||
| 16 | # | ||
| 17 | CONFIG_LOCALVERSION="" | ||
| 18 | CONFIG_LOCALVERSION_AUTO=y | ||
| 19 | CONFIG_SWAP=y | ||
| 20 | CONFIG_SYSVIPC=y | ||
| 21 | # CONFIG_POSIX_MQUEUE is not set | ||
| 22 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 23 | CONFIG_SYSCTL=y | ||
| 24 | # CONFIG_AUDIT is not set | ||
| 25 | CONFIG_IKCONFIG=y | ||
| 26 | CONFIG_IKCONFIG_PROC=y | ||
| 27 | # CONFIG_CPUSETS is not set | ||
| 28 | CONFIG_INITRAMFS_SOURCE="" | ||
| 29 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 30 | # CONFIG_EMBEDDED is not set | 6 | CONFIG_DEBUG_INFO=y |
| 31 | CONFIG_KALLSYMS=y | 7 | CONFIG_DEBUG_KERNEL=y |
| 32 | # CONFIG_KALLSYMS_ALL is not set | 8 | CONFIG_DEBUG_MUTEXES=y |
| 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 9 | CONFIG_EFI_PARTITION=y |
| 34 | CONFIG_HOTPLUG=y | 10 | CONFIG_EFI_RTC=y |
| 35 | CONFIG_PRINTK=y | 11 | CONFIG_EFI_VARS=y |
| 36 | CONFIG_BUG=y | 12 | CONFIG_EXPERIMENTAL=y |
| 37 | CONFIG_ELF_CORE=y | 13 | CONFIG_EXT2_FS=y |
| 38 | CONFIG_BASE_FULL=y | 14 | # CONFIG_EXT3_FS_XATTR is not set |
| 39 | CONFIG_FUTEX=y | 15 | CONFIG_EXT3_FS=y |
| 40 | CONFIG_EPOLL=y | 16 | CONFIG_HP_SIMETH=y |
| 41 | CONFIG_SHMEM=y | 17 | CONFIG_HP_SIMSCSI=y |
| 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 18 | CONFIG_HP_SIMSERIAL_CONSOLE=y |
| 43 | CONFIG_CC_ALIGN_LABELS=0 | 19 | CONFIG_HP_SIMSERIAL=y |
| 44 | CONFIG_CC_ALIGN_LOOPS=0 | 20 | CONFIG_HUGETLBFS=y |
| 45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
| 46 | CONFIG_SLUB=y | ||
| 47 | # CONFIG_TINY_SHMEM is not set | ||
| 48 | CONFIG_BASE_SMALL=0 | ||
| 49 | # CONFIG_SLOB is not set | ||
| 50 | |||
| 51 | # | ||
| 52 | # Loadable module support | ||
| 53 | # | ||
| 54 | CONFIG_MODULES=y | ||
| 55 | CONFIG_MODULE_UNLOAD=y | ||
| 56 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
| 57 | CONFIG_OBSOLETE_MODPARM=y | ||
| 58 | CONFIG_MODVERSIONS=y | ||
| 59 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 60 | CONFIG_KMOD=y | ||
| 61 | CONFIG_STOP_MACHINE=y | ||
| 62 | |||
| 63 | # | ||
| 64 | # Block layer | ||
| 65 | # | ||
| 66 | |||
| 67 | # | ||
| 68 | # IO Schedulers | ||
| 69 | # | ||
| 70 | CONFIG_IOSCHED_NOOP=y | ||
| 71 | CONFIG_IOSCHED_AS=y | ||
| 72 | CONFIG_IOSCHED_DEADLINE=y | ||
| 73 | CONFIG_IOSCHED_CFQ=y | ||
| 74 | CONFIG_DEFAULT_AS=y | ||
| 75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 76 | # CONFIG_DEFAULT_CFQ is not set | ||
| 77 | # CONFIG_DEFAULT_NOOP is not set | ||
| 78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 79 | |||
| 80 | # | ||
| 81 | # Processor type and features | ||
| 82 | # | ||
| 83 | CONFIG_IA64=y | ||
| 84 | CONFIG_64BIT=y | ||
| 85 | CONFIG_MMU=y | ||
| 86 | CONFIG_SWIOTLB=y | ||
| 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 89 | CONFIG_GENERIC_TIME=y | ||
| 90 | CONFIG_EFI=y | ||
| 91 | CONFIG_GENERIC_IOMAP=y | ||
| 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 93 | CONFIG_DMA_IS_DMA32=y | ||
| 94 | # CONFIG_IA64_GENERIC is not set | ||
| 95 | # CONFIG_IA64_DIG is not set | ||
| 96 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 97 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 98 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 99 | CONFIG_IA64_HP_SIM=y | 21 | CONFIG_IA64_HP_SIM=y |
| 100 | # CONFIG_ITANIUM is not set | ||
| 101 | CONFIG_MCKINLEY=y | ||
| 102 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 103 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 104 | # CONFIG_IA64_PAGE_SIZE_16KB is not set | ||
| 105 | CONFIG_IA64_PAGE_SIZE_64KB=y | 22 | CONFIG_IA64_PAGE_SIZE_64KB=y |
| 106 | CONFIG_PGTABLE_3=y | ||
| 107 | # CONFIG_PGTABLE_4 is not set | ||
| 108 | # CONFIG_HZ_100 is not set | ||
| 109 | CONFIG_HZ_250=y | ||
| 110 | # CONFIG_HZ_1000 is not set | ||
| 111 | CONFIG_HZ=250 | ||
| 112 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 113 | # CONFIG_IA64_CYCLONE is not set | ||
| 114 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 115 | CONFIG_SMP=y | ||
| 116 | CONFIG_NR_CPUS=64 | ||
| 117 | # CONFIG_HOTPLUG_CPU is not set | ||
| 118 | # CONFIG_SCHED_SMT is not set | ||
| 119 | CONFIG_PREEMPT=y | ||
| 120 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 121 | CONFIG_FLATMEM_MANUAL=y | ||
| 122 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 123 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 124 | CONFIG_FLATMEM=y | ||
| 125 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 126 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 127 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 128 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 129 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 130 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 131 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 132 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
| 133 | # CONFIG_IA64_MCA_RECOVERY is not set | ||
| 134 | # CONFIG_PERFMON is not set | ||
| 135 | CONFIG_IA64_PALINFO=m | 23 | CONFIG_IA64_PALINFO=m |
| 136 | 24 | CONFIG_IKCONFIG_PROC=y | |
| 137 | # | 25 | CONFIG_IKCONFIG=y |
| 138 | # Firmware Drivers | ||
| 139 | # | ||
| 140 | CONFIG_EFI_VARS=y | ||
| 141 | CONFIG_BINFMT_ELF=y | ||
| 142 | CONFIG_BINFMT_MISC=y | ||
| 143 | |||
| 144 | # | ||
| 145 | # Power management and ACPI | ||
| 146 | # | ||
| 147 | |||
| 148 | # | ||
| 149 | # Networking | ||
| 150 | # | ||
| 151 | CONFIG_NET=y | ||
| 152 | |||
| 153 | # | ||
| 154 | # Networking options | ||
| 155 | # | ||
| 156 | # CONFIG_NETDEBUG is not set | ||
| 157 | CONFIG_PACKET=y | ||
| 158 | # CONFIG_PACKET_MMAP is not set | ||
| 159 | # CONFIG_UNIX is not set | ||
| 160 | # CONFIG_NET_KEY is not set | ||
| 161 | CONFIG_INET=y | 26 | CONFIG_INET=y |
| 27 | CONFIG_INOTIFY=y | ||
| 28 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 29 | # CONFIG_INPUT_MOUSE is not set | ||
| 162 | CONFIG_IP_MULTICAST=y | 30 | CONFIG_IP_MULTICAST=y |
| 163 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 164 | CONFIG_IP_FIB_HASH=y | ||
| 165 | # CONFIG_IP_PNP is not set | ||
| 166 | # CONFIG_NET_IPIP is not set | ||
| 167 | # CONFIG_NET_IPGRE is not set | ||
| 168 | # CONFIG_IP_MROUTE is not set | ||
| 169 | # CONFIG_ARPD is not set | ||
| 170 | # CONFIG_SYN_COOKIES is not set | ||
| 171 | # CONFIG_INET_AH is not set | ||
| 172 | # CONFIG_INET_ESP is not set | ||
| 173 | # CONFIG_INET_IPCOMP is not set | ||
| 174 | # CONFIG_INET_TUNNEL is not set | ||
| 175 | CONFIG_INET_DIAG=y | ||
| 176 | CONFIG_INET_TCP_DIAG=y | ||
| 177 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 178 | CONFIG_TCP_CONG_BIC=y | ||
| 179 | # CONFIG_IPV6 is not set | 31 | # CONFIG_IPV6 is not set |
| 180 | # CONFIG_NETFILTER is not set | 32 | # CONFIG_LEGACY_PTYS is not set |
| 181 | 33 | CONFIG_LOG_BUF_SHIFT=16 | |
| 182 | # | 34 | CONFIG_MCKINLEY=y |
| 183 | # DCCP Configuration (EXPERIMENTAL) | 35 | CONFIG_MODULE_FORCE_UNLOAD=y |
| 184 | # | 36 | CONFIG_MODULES=y |
| 185 | # CONFIG_IP_DCCP is not set | 37 | CONFIG_MODULE_UNLOAD=y |
| 186 | 38 | CONFIG_MODVERSIONS=y | |
| 187 | # | 39 | CONFIG_NET=y |
| 188 | # SCTP Configuration (EXPERIMENTAL) | 40 | CONFIG_NFSD_V3=y |
| 189 | # | 41 | CONFIG_NFSD=y |
| 190 | # CONFIG_IP_SCTP is not set | 42 | CONFIG_NFS_FS=y |
| 191 | 43 | CONFIG_NR_CPUS=64 | |
| 192 | # | 44 | CONFIG_PACKET=y |
| 193 | # TIPC Configuration (EXPERIMENTAL) | 45 | CONFIG_PARTITION_ADVANCED=y |
| 194 | # | 46 | CONFIG_PREEMPT=y |
| 195 | # CONFIG_TIPC is not set | 47 | CONFIG_PROC_KCORE=y |
| 196 | # CONFIG_ATM is not set | ||
| 197 | # CONFIG_BRIDGE is not set | ||
| 198 | # CONFIG_VLAN_8021Q is not set | ||
| 199 | # CONFIG_DECNET is not set | ||
| 200 | # CONFIG_LLC2 is not set | ||
| 201 | # CONFIG_IPX is not set | ||
| 202 | # CONFIG_ATALK is not set | ||
| 203 | # CONFIG_X25 is not set | ||
| 204 | # CONFIG_LAPB is not set | ||
| 205 | # CONFIG_NET_DIVERT is not set | ||
| 206 | # CONFIG_ECONET is not set | ||
| 207 | # CONFIG_WAN_ROUTER is not set | ||
| 208 | |||
| 209 | # | ||
| 210 | # QoS and/or fair queueing | ||
| 211 | # | ||
| 212 | # CONFIG_NET_SCHED is not set | ||
| 213 | |||
| 214 | # | ||
| 215 | # Network testing | ||
| 216 | # | ||
| 217 | # CONFIG_NET_PKTGEN is not set | ||
| 218 | # CONFIG_HAMRADIO is not set | ||
| 219 | # CONFIG_IRDA is not set | ||
| 220 | # CONFIG_BT is not set | ||
| 221 | # CONFIG_IEEE80211 is not set | ||
| 222 | |||
| 223 | # | ||
| 224 | # Device Drivers | ||
| 225 | # | ||
| 226 | |||
| 227 | # | ||
| 228 | # Generic Driver Options | ||
| 229 | # | ||
| 230 | # CONFIG_STANDALONE is not set | ||
| 231 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 232 | # CONFIG_FW_LOADER is not set | ||
| 233 | # CONFIG_DEBUG_DRIVER is not set | ||
| 234 | |||
| 235 | # | ||
| 236 | # Connector - unified userspace <-> kernelspace linker | ||
| 237 | # | ||
| 238 | # CONFIG_CONNECTOR is not set | ||
| 239 | |||
| 240 | # | ||
| 241 | # Memory Technology Devices (MTD) | ||
| 242 | # | ||
| 243 | # CONFIG_MTD is not set | ||
| 244 | |||
| 245 | # | ||
| 246 | # Parallel port support | ||
| 247 | # | ||
| 248 | # CONFIG_PARPORT is not set | ||
| 249 | |||
| 250 | # | ||
| 251 | # Plug and Play support | ||
| 252 | # | ||
| 253 | |||
| 254 | # | ||
| 255 | # Block devices | ||
| 256 | # | ||
| 257 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 258 | CONFIG_BLK_DEV_LOOP=y | ||
| 259 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
| 260 | # CONFIG_BLK_DEV_NBD is not set | ||
| 261 | CONFIG_BLK_DEV_RAM=y | ||
| 262 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 263 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 264 | # CONFIG_BLK_DEV_INITRD is not set | ||
| 265 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 266 | # CONFIG_ATA_OVER_ETH is not set | ||
| 267 | |||
| 268 | # | ||
| 269 | # ATA/ATAPI/MFM/RLL support | ||
| 270 | # | ||
| 271 | # CONFIG_IDE is not set | ||
| 272 | |||
| 273 | # | ||
| 274 | # SCSI device support | ||
| 275 | # | ||
| 276 | # CONFIG_RAID_ATTRS is not set | ||
| 277 | CONFIG_SCSI=y | ||
| 278 | CONFIG_SCSI_PROC_FS=y | ||
| 279 | |||
| 280 | # | ||
| 281 | # SCSI support type (disk, tape, CD-ROM) | ||
| 282 | # | ||
| 283 | CONFIG_BLK_DEV_SD=y | ||
| 284 | # CONFIG_CHR_DEV_ST is not set | ||
| 285 | # CONFIG_CHR_DEV_OSST is not set | ||
| 286 | # CONFIG_BLK_DEV_SR is not set | ||
| 287 | # CONFIG_CHR_DEV_SG is not set | ||
| 288 | # CONFIG_CHR_DEV_SCH is not set | ||
| 289 | |||
| 290 | # | ||
| 291 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
| 292 | # | ||
| 293 | CONFIG_SCSI_MULTI_LUN=y | ||
| 294 | CONFIG_SCSI_CONSTANTS=y | 48 | CONFIG_SCSI_CONSTANTS=y |
| 295 | CONFIG_SCSI_LOGGING=y | 49 | CONFIG_SCSI_LOGGING=y |
| 296 | 50 | CONFIG_SCSI_MULTI_LUN=y | |
| 297 | # | ||
| 298 | # SCSI Transport Attributes | ||
| 299 | # | ||
| 300 | CONFIG_SCSI_SPI_ATTRS=y | 51 | CONFIG_SCSI_SPI_ATTRS=y |
| 301 | # CONFIG_SCSI_FC_ATTRS is not set | 52 | CONFIG_SCSI=y |
| 302 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 303 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 304 | |||
| 305 | # | ||
| 306 | # SCSI low-level drivers | ||
| 307 | # | ||
| 308 | # CONFIG_ISCSI_TCP is not set | ||
| 309 | # CONFIG_SCSI_SATA is not set | ||
| 310 | # CONFIG_SCSI_DEBUG is not set | ||
| 311 | |||
| 312 | # | ||
| 313 | # Multi-device support (RAID and LVM) | ||
| 314 | # | ||
| 315 | # CONFIG_MD is not set | ||
| 316 | |||
| 317 | # | ||
| 318 | # Fusion MPT device support | ||
| 319 | # | ||
| 320 | # CONFIG_FUSION is not set | ||
| 321 | |||
| 322 | # | ||
| 323 | # IEEE 1394 (FireWire) support | ||
| 324 | # | ||
| 325 | |||
| 326 | # | ||
| 327 | # I2O device support | ||
| 328 | # | ||
| 329 | |||
| 330 | # | ||
| 331 | # Network device support | ||
| 332 | # | ||
| 333 | # CONFIG_NETDEVICES is not set | ||
| 334 | # CONFIG_DUMMY is not set | ||
| 335 | # CONFIG_BONDING is not set | ||
| 336 | # CONFIG_EQUALIZER is not set | ||
| 337 | # CONFIG_TUN is not set | ||
| 338 | |||
| 339 | # | ||
| 340 | # PHY device support | ||
| 341 | # | ||
| 342 | |||
| 343 | # | ||
| 344 | # Ethernet (10 or 100Mbit) | ||
| 345 | # | ||
| 346 | # CONFIG_NET_ETHERNET is not set | ||
| 347 | |||
| 348 | # | ||
| 349 | # Ethernet (1000 Mbit) | ||
| 350 | # | ||
| 351 | |||
| 352 | # | ||
| 353 | # Ethernet (10000 Mbit) | ||
| 354 | # | ||
| 355 | # CONFIG_PPP is not set | ||
| 356 | # CONFIG_SLIP is not set | ||
| 357 | # CONFIG_SHAPER is not set | ||
| 358 | # CONFIG_NETCONSOLE is not set | ||
| 359 | # CONFIG_NETPOLL is not set | ||
| 360 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 361 | |||
| 362 | # | ||
| 363 | # ISDN subsystem | ||
| 364 | # | ||
| 365 | # CONFIG_ISDN is not set | ||
| 366 | |||
| 367 | # | ||
| 368 | # Telephony Support | ||
| 369 | # | ||
| 370 | # CONFIG_PHONE is not set | ||
| 371 | |||
| 372 | # | ||
| 373 | # Input device support | ||
| 374 | # | ||
| 375 | CONFIG_INPUT=y | ||
| 376 | |||
| 377 | # | ||
| 378 | # Userland interfaces | ||
| 379 | # | ||
| 380 | CONFIG_INPUT_MOUSEDEV=y | ||
| 381 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 382 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 383 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 384 | # CONFIG_INPUT_JOYDEV is not set | ||
| 385 | # CONFIG_INPUT_TSDEV is not set | ||
| 386 | # CONFIG_INPUT_EVDEV is not set | ||
| 387 | # CONFIG_INPUT_EVBUG is not set | ||
| 388 | |||
| 389 | # | ||
| 390 | # Input Device Drivers | ||
| 391 | # | ||
| 392 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 393 | # CONFIG_INPUT_MOUSE is not set | ||
| 394 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 395 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 396 | # CONFIG_INPUT_MISC is not set | ||
| 397 | |||
| 398 | # | ||
| 399 | # Hardware I/O ports | ||
| 400 | # | ||
| 401 | CONFIG_SERIO=y | ||
| 402 | # CONFIG_SERIO_I8042 is not set | 53 | # CONFIG_SERIO_I8042 is not set |
| 403 | CONFIG_SERIO_SERPORT=y | 54 | CONFIG_SMP=y |
| 404 | # CONFIG_SERIO_RAW is not set | 55 | # CONFIG_STANDALONE is not set |
| 405 | # CONFIG_GAMEPORT is not set | 56 | CONFIG_SYSVIPC=y |
| 406 | |||
| 407 | # | ||
| 408 | # Character devices | ||
| 409 | # | ||
| 410 | CONFIG_VT=y | ||
| 411 | CONFIG_VT_CONSOLE=y | ||
| 412 | CONFIG_HW_CONSOLE=y | ||
| 413 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 414 | |||
| 415 | # | ||
| 416 | # Serial drivers | ||
| 417 | # | ||
| 418 | # CONFIG_SERIAL_8250 is not set | ||
| 419 | |||
| 420 | # | ||
| 421 | # Non-8250 serial port support | ||
| 422 | # | ||
| 423 | CONFIG_UNIX98_PTYS=y | ||
| 424 | # CONFIG_LEGACY_PTYS is not set | ||
| 425 | |||
| 426 | # | ||
| 427 | # IPMI | ||
| 428 | # | ||
| 429 | # CONFIG_IPMI_HANDLER is not set | ||
| 430 | |||
| 431 | # | ||
| 432 | # Watchdog Cards | ||
| 433 | # | ||
| 434 | # CONFIG_WATCHDOG is not set | ||
| 435 | CONFIG_EFI_RTC=y | ||
| 436 | # CONFIG_DTLK is not set | ||
| 437 | # CONFIG_R3964 is not set | ||
| 438 | |||
| 439 | # | ||
| 440 | # Ftape, the floppy tape device driver | ||
| 441 | # | ||
| 442 | # CONFIG_AGP is not set | ||
| 443 | # CONFIG_RAW_DRIVER is not set | ||
| 444 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 445 | |||
| 446 | # | ||
| 447 | # TPM devices | ||
| 448 | # | ||
| 449 | # CONFIG_TCG_TPM is not set | ||
| 450 | # CONFIG_TELCLOCK is not set | ||
| 451 | |||
| 452 | # | ||
| 453 | # I2C support | ||
| 454 | # | ||
| 455 | # CONFIG_I2C is not set | ||
| 456 | |||
| 457 | # | ||
| 458 | # SPI support | ||
| 459 | # | ||
| 460 | # CONFIG_SPI is not set | ||
| 461 | # CONFIG_SPI_MASTER is not set | ||
| 462 | |||
| 463 | # | ||
| 464 | # Dallas's 1-wire bus | ||
| 465 | # | ||
| 466 | # CONFIG_W1 is not set | ||
| 467 | |||
| 468 | # | ||
| 469 | # Hardware Monitoring support | ||
| 470 | # | ||
| 471 | CONFIG_HWMON=y | ||
| 472 | # CONFIG_HWMON_VID is not set | ||
| 473 | # CONFIG_SENSORS_F71805F is not set | ||
| 474 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 475 | |||
| 476 | # | ||
| 477 | # Misc devices | ||
| 478 | # | ||
| 479 | |||
| 480 | # | ||
| 481 | # Multimedia Capabilities Port drivers | ||
| 482 | # | ||
| 483 | |||
| 484 | # | ||
| 485 | # Multimedia devices | ||
| 486 | # | ||
| 487 | # CONFIG_VIDEO_DEV is not set | ||
| 488 | |||
| 489 | # | ||
| 490 | # Digital Video Broadcasting Devices | ||
| 491 | # | ||
| 492 | # CONFIG_DVB is not set | ||
| 493 | |||
| 494 | # | ||
| 495 | # Graphics support | ||
| 496 | # | ||
| 497 | # CONFIG_FB is not set | ||
| 498 | |||
| 499 | # | ||
| 500 | # Console display driver support | ||
| 501 | # | ||
| 502 | # CONFIG_VGA_CONSOLE is not set | 57 | # CONFIG_VGA_CONSOLE is not set |
| 503 | CONFIG_DUMMY_CONSOLE=y | ||
| 504 | |||
| 505 | # | ||
| 506 | # Sound | ||
| 507 | # | ||
| 508 | # CONFIG_SOUND is not set | ||
| 509 | |||
| 510 | # | ||
| 511 | # USB support | ||
| 512 | # | ||
| 513 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
| 514 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
| 515 | |||
| 516 | # | ||
| 517 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 518 | # | ||
| 519 | |||
| 520 | # | ||
| 521 | # USB Gadget Support | ||
| 522 | # | ||
| 523 | # CONFIG_USB_GADGET is not set | ||
| 524 | |||
| 525 | # | ||
| 526 | # MMC/SD Card support | ||
| 527 | # | ||
| 528 | # CONFIG_MMC is not set | ||
| 529 | |||
| 530 | # | ||
| 531 | # InfiniBand support | ||
| 532 | # | ||
| 533 | |||
| 534 | # | ||
| 535 | # EDAC - error detection and reporting (RAS) | ||
| 536 | # | ||
| 537 | |||
| 538 | # | ||
| 539 | # File systems | ||
| 540 | # | ||
| 541 | CONFIG_EXT2_FS=y | ||
| 542 | # CONFIG_EXT2_FS_XATTR is not set | ||
| 543 | # CONFIG_EXT2_FS_XIP is not set | ||
| 544 | CONFIG_EXT3_FS=y | ||
| 545 | # CONFIG_EXT3_FS_XATTR is not set | ||
| 546 | CONFIG_JBD=y | ||
| 547 | # CONFIG_JBD_DEBUG is not set | ||
| 548 | # CONFIG_REISERFS_FS is not set | ||
| 549 | # CONFIG_JFS_FS is not set | ||
| 550 | # CONFIG_FS_POSIX_ACL is not set | ||
| 551 | # CONFIG_XFS_FS is not set | ||
| 552 | # CONFIG_OCFS2_FS is not set | ||
| 553 | # CONFIG_MINIX_FS is not set | ||
| 554 | # CONFIG_ROMFS_FS is not set | ||
| 555 | CONFIG_INOTIFY=y | ||
| 556 | # CONFIG_QUOTA is not set | ||
| 557 | CONFIG_DNOTIFY=y | ||
| 558 | # CONFIG_AUTOFS_FS is not set | ||
| 559 | # CONFIG_AUTOFS4_FS is not set | ||
| 560 | # CONFIG_FUSE_FS is not set | ||
| 561 | |||
| 562 | # | ||
| 563 | # CD-ROM/DVD Filesystems | ||
| 564 | # | ||
| 565 | # CONFIG_ISO9660_FS is not set | ||
| 566 | # CONFIG_UDF_FS is not set | ||
| 567 | |||
| 568 | # | ||
| 569 | # DOS/FAT/NT Filesystems | ||
| 570 | # | ||
| 571 | # CONFIG_MSDOS_FS is not set | ||
| 572 | # CONFIG_VFAT_FS is not set | ||
| 573 | # CONFIG_NTFS_FS is not set | ||
| 574 | |||
| 575 | # | ||
| 576 | # Pseudo filesystems | ||
| 577 | # | ||
| 578 | CONFIG_PROC_FS=y | ||
| 579 | CONFIG_PROC_KCORE=y | ||
| 580 | CONFIG_SYSFS=y | ||
| 581 | # CONFIG_TMPFS is not set | ||
| 582 | CONFIG_HUGETLBFS=y | ||
| 583 | CONFIG_HUGETLB_PAGE=y | ||
| 584 | CONFIG_RAMFS=y | ||
| 585 | # CONFIG_RELAYFS_FS is not set | ||
| 586 | # CONFIG_CONFIGFS_FS is not set | ||
| 587 | |||
| 588 | # | ||
| 589 | # Miscellaneous filesystems | ||
| 590 | # | ||
| 591 | # CONFIG_ADFS_FS is not set | ||
| 592 | # CONFIG_AFFS_FS is not set | ||
| 593 | # CONFIG_HFS_FS is not set | ||
| 594 | # CONFIG_HFSPLUS_FS is not set | ||
| 595 | # CONFIG_BEFS_FS is not set | ||
| 596 | # CONFIG_BFS_FS is not set | ||
| 597 | # CONFIG_EFS_FS is not set | ||
| 598 | # CONFIG_CRAMFS is not set | ||
| 599 | # CONFIG_VXFS_FS is not set | ||
| 600 | # CONFIG_HPFS_FS is not set | ||
| 601 | # CONFIG_QNX4FS_FS is not set | ||
| 602 | # CONFIG_SYSV_FS is not set | ||
| 603 | # CONFIG_UFS_FS is not set | ||
| 604 | |||
| 605 | # | ||
| 606 | # Network File Systems | ||
| 607 | # | ||
| 608 | CONFIG_NFS_FS=y | ||
| 609 | # CONFIG_NFS_V3 is not set | ||
| 610 | # CONFIG_NFS_V4 is not set | ||
| 611 | CONFIG_NFS_DIRECTIO=y | ||
| 612 | CONFIG_NFSD=y | ||
| 613 | CONFIG_NFSD_V3=y | ||
| 614 | # CONFIG_NFSD_V3_ACL is not set | ||
| 615 | # CONFIG_NFSD_V4 is not set | ||
| 616 | # CONFIG_NFSD_TCP is not set | ||
| 617 | CONFIG_LOCKD=y | ||
| 618 | CONFIG_LOCKD_V4=y | ||
| 619 | CONFIG_EXPORTFS=y | ||
| 620 | CONFIG_NFS_COMMON=y | ||
| 621 | CONFIG_SUNRPC=y | ||
| 622 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 623 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 624 | # CONFIG_SMB_FS is not set | ||
| 625 | # CONFIG_CIFS is not set | ||
| 626 | # CONFIG_NCP_FS is not set | ||
| 627 | # CONFIG_CODA_FS is not set | ||
| 628 | # CONFIG_AFS_FS is not set | ||
| 629 | # CONFIG_9P_FS is not set | ||
| 630 | |||
| 631 | # | ||
| 632 | # Partition Types | ||
| 633 | # | ||
| 634 | CONFIG_PARTITION_ADVANCED=y | ||
| 635 | # CONFIG_ACORN_PARTITION is not set | ||
| 636 | # CONFIG_OSF_PARTITION is not set | ||
| 637 | # CONFIG_AMIGA_PARTITION is not set | ||
| 638 | # CONFIG_ATARI_PARTITION is not set | ||
| 639 | # CONFIG_MAC_PARTITION is not set | ||
| 640 | CONFIG_MSDOS_PARTITION=y | ||
| 641 | # CONFIG_BSD_DISKLABEL is not set | ||
| 642 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 643 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 644 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 645 | # CONFIG_LDM_PARTITION is not set | ||
| 646 | # CONFIG_SGI_PARTITION is not set | ||
| 647 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 648 | # CONFIG_SUN_PARTITION is not set | ||
| 649 | # CONFIG_KARMA_PARTITION is not set | ||
| 650 | CONFIG_EFI_PARTITION=y | ||
| 651 | |||
| 652 | # | ||
| 653 | # Native Language Support | ||
| 654 | # | ||
| 655 | # CONFIG_NLS is not set | ||
| 656 | |||
| 657 | # | ||
| 658 | # Library routines | ||
| 659 | # | ||
| 660 | # CONFIG_CRC_CCITT is not set | ||
| 661 | # CONFIG_CRC16 is not set | ||
| 662 | CONFIG_CRC32=y | ||
| 663 | # CONFIG_LIBCRC32C is not set | ||
| 664 | CONFIG_GENERIC_HARDIRQS=y | ||
| 665 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 666 | CONFIG_GENERIC_PENDING_IRQ=y | ||
| 667 | |||
| 668 | # | ||
| 669 | # HP Simulator drivers | ||
| 670 | # | ||
| 671 | CONFIG_HP_SIMETH=y | ||
| 672 | CONFIG_HP_SIMSERIAL=y | ||
| 673 | CONFIG_HP_SIMSERIAL_CONSOLE=y | ||
| 674 | CONFIG_HP_SIMSCSI=y | ||
| 675 | |||
| 676 | # | ||
| 677 | # Instrumentation Support | ||
| 678 | # | ||
| 679 | # CONFIG_PROFILING is not set | ||
| 680 | # CONFIG_KPROBES is not set | ||
| 681 | |||
| 682 | # | ||
| 683 | # Kernel hacking | ||
| 684 | # | ||
| 685 | # CONFIG_PRINTK_TIME is not set | ||
| 686 | # CONFIG_MAGIC_SYSRQ is not set | ||
| 687 | CONFIG_DEBUG_KERNEL=y | ||
| 688 | CONFIG_LOG_BUF_SHIFT=16 | ||
| 689 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 690 | # CONFIG_SCHEDSTATS is not set | ||
| 691 | # CONFIG_DEBUG_SLAB is not set | ||
| 692 | CONFIG_DEBUG_PREEMPT=y | ||
| 693 | CONFIG_DEBUG_MUTEXES=y | ||
| 694 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 695 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 696 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 697 | CONFIG_DEBUG_INFO=y | ||
| 698 | # CONFIG_DEBUG_FS is not set | ||
| 699 | # CONFIG_DEBUG_VM is not set | ||
| 700 | CONFIG_FORCED_INLINING=y | ||
| 701 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 702 | # CONFIG_IA64_GRANULE_16MB is not set | ||
| 703 | CONFIG_IA64_GRANULE_64MB=y | ||
| 704 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
| 705 | # CONFIG_DISABLE_VHPT is not set | ||
| 706 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||
| 707 | # CONFIG_IA64_DEBUG_IRQ is not set | ||
| 708 | CONFIG_SYSVIPC_COMPAT=y | ||
| 709 | |||
| 710 | # | ||
| 711 | # Security options | ||
| 712 | # | ||
| 713 | # CONFIG_KEYS is not set | ||
| 714 | # CONFIG_SECURITY is not set | ||
| 715 | |||
| 716 | # | ||
| 717 | # Cryptographic options | ||
| 718 | # | ||
| 719 | # CONFIG_CRYPTO is not set | ||
| 720 | |||
| 721 | # | ||
| 722 | # Hardware crypto devices | ||
| 723 | # | ||
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig index c5a5ea9d54ae..498618ea00ea 100644 --- a/arch/ia64/configs/tiger_defconfig +++ b/arch/ia64/configs/tiger_defconfig | |||
| @@ -1,1134 +1,113 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.22 | ||
| 4 | # Thu Jul 19 13:54:47 2007 | ||
| 5 | # | ||
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 7 | |||
| 8 | # | ||
| 9 | # Code maturity level options | ||
| 10 | # | ||
| 11 | CONFIG_EXPERIMENTAL=y | ||
| 12 | CONFIG_LOCK_KERNEL=y | ||
| 13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 14 | |||
| 15 | # | ||
| 16 | # General setup | ||
| 17 | # | ||
| 18 | CONFIG_LOCALVERSION="" | ||
| 19 | CONFIG_LOCALVERSION_AUTO=y | ||
| 20 | CONFIG_SWAP=y | ||
| 21 | CONFIG_SYSVIPC=y | ||
| 22 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 23 | CONFIG_POSIX_MQUEUE=y | ||
| 24 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 25 | # CONFIG_TASKSTATS is not set | ||
| 26 | # CONFIG_USER_NS is not set | ||
| 27 | # CONFIG_AUDIT is not set | ||
| 28 | CONFIG_IKCONFIG=y | ||
| 29 | CONFIG_IKCONFIG_PROC=y | ||
| 30 | CONFIG_LOG_BUF_SHIFT=20 | ||
| 31 | # CONFIG_CPUSETS is not set | ||
| 32 | CONFIG_SYSFS_DEPRECATED=y | ||
| 33 | # CONFIG_RELAY is not set | ||
| 34 | CONFIG_BLK_DEV_INITRD=y | ||
| 35 | CONFIG_INITRAMFS_SOURCE="" | ||
| 36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 37 | CONFIG_SYSCTL=y | ||
| 38 | # CONFIG_EMBEDDED is not set | ||
| 39 | CONFIG_SYSCTL_SYSCALL=y | ||
| 40 | CONFIG_KALLSYMS=y | ||
| 41 | CONFIG_KALLSYMS_ALL=y | ||
| 42 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 43 | CONFIG_HOTPLUG=y | ||
| 44 | CONFIG_PRINTK=y | ||
| 45 | CONFIG_BUG=y | ||
| 46 | CONFIG_ELF_CORE=y | ||
| 47 | CONFIG_BASE_FULL=y | ||
| 48 | CONFIG_FUTEX=y | ||
| 49 | CONFIG_ANON_INODES=y | ||
| 50 | CONFIG_EPOLL=y | ||
| 51 | CONFIG_SIGNALFD=y | ||
| 52 | CONFIG_TIMERFD=y | ||
| 53 | CONFIG_EVENTFD=y | ||
| 54 | CONFIG_SHMEM=y | ||
| 55 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 56 | CONFIG_SLUB=y | ||
| 57 | # CONFIG_SLUB is not set | ||
| 58 | # CONFIG_SLOB is not set | ||
| 59 | CONFIG_RT_MUTEXES=y | ||
| 60 | # CONFIG_TINY_SHMEM is not set | ||
| 61 | CONFIG_BASE_SMALL=0 | ||
| 62 | CONFIG_MODULES=y | ||
| 63 | CONFIG_MODULE_UNLOAD=y | ||
| 64 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 65 | CONFIG_MODVERSIONS=y | ||
| 66 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 67 | CONFIG_KMOD=y | ||
| 68 | CONFIG_STOP_MACHINE=y | ||
| 69 | CONFIG_BLOCK=y | ||
| 70 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 71 | # CONFIG_BLK_DEV_BSG is not set | ||
| 72 | |||
| 73 | # | ||
| 74 | # IO Schedulers | ||
| 75 | # | ||
| 76 | CONFIG_IOSCHED_NOOP=y | ||
| 77 | CONFIG_IOSCHED_AS=y | ||
| 78 | CONFIG_IOSCHED_DEADLINE=y | ||
| 79 | CONFIG_IOSCHED_CFQ=y | ||
| 80 | CONFIG_DEFAULT_AS=y | ||
| 81 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 82 | # CONFIG_DEFAULT_CFQ is not set | ||
| 83 | # CONFIG_DEFAULT_NOOP is not set | ||
| 84 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 85 | |||
| 86 | # | ||
| 87 | # Processor type and features | ||
| 88 | # | ||
| 89 | CONFIG_IA64=y | ||
| 90 | CONFIG_64BIT=y | ||
| 91 | CONFIG_ZONE_DMA=y | ||
| 92 | CONFIG_QUICKLIST=y | ||
| 93 | CONFIG_MMU=y | ||
| 94 | CONFIG_SWIOTLB=y | ||
| 95 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 96 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 97 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 98 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 99 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 100 | CONFIG_GENERIC_TIME=y | ||
| 101 | CONFIG_DMI=y | ||
| 102 | CONFIG_EFI=y | ||
| 103 | CONFIG_GENERIC_IOMAP=y | ||
| 104 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 105 | CONFIG_AUDIT_ARCH=y | ||
| 106 | # CONFIG_IA64_GENERIC is not set | ||
| 107 | CONFIG_IA64_DIG=y | ||
| 108 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 109 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 110 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 111 | # CONFIG_IA64_HP_SIM is not set | ||
| 112 | # CONFIG_ITANIUM is not set | ||
| 113 | CONFIG_MCKINLEY=y | ||
| 114 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 115 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 116 | # CONFIG_IA64_PAGE_SIZE_16KB is not set | ||
| 117 | CONFIG_IA64_PAGE_SIZE_64KB=y | ||
| 118 | CONFIG_PGTABLE_3=y | ||
| 119 | # CONFIG_PGTABLE_4 is not set | ||
| 120 | # CONFIG_HZ_100 is not set | ||
| 121 | CONFIG_HZ_250=y | ||
| 122 | # CONFIG_HZ_300 is not set | ||
| 123 | # CONFIG_HZ_1000 is not set | ||
| 124 | CONFIG_HZ=250 | ||
| 125 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 126 | CONFIG_IA64_CYCLONE=y | ||
| 127 | CONFIG_IOSAPIC=y | ||
| 128 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 129 | CONFIG_SMP=y | ||
| 130 | CONFIG_NR_CPUS=16 | ||
| 131 | CONFIG_HOTPLUG_CPU=y | ||
| 132 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 133 | # CONFIG_SCHED_SMT is not set | ||
| 134 | CONFIG_PERMIT_BSP_REMOVE=y | ||
| 135 | CONFIG_FORCE_CPEI_RETARGET=y | ||
| 136 | # CONFIG_PREEMPT is not set | ||
| 137 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 138 | CONFIG_FLATMEM_MANUAL=y | ||
| 139 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 140 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 141 | CONFIG_FLATMEM=y | ||
| 142 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 143 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 144 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 145 | CONFIG_RESOURCES_64BIT=y | ||
| 146 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 147 | CONFIG_BOUNCE=y | ||
| 148 | CONFIG_NR_QUICK=1 | ||
| 149 | CONFIG_VIRT_TO_BUS=y | ||
| 150 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 151 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 152 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 153 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 154 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 155 | CONFIG_VIRTUAL_MEM_MAP=y | ||
| 156 | CONFIG_HOLES_IN_ZONE=y | ||
| 157 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 158 | CONFIG_PERFMON=y | ||
| 159 | CONFIG_IA64_PALINFO=y | ||
| 160 | # CONFIG_IA64_MC_ERR_INJECT is not set | ||
| 161 | # CONFIG_IA64_ESI is not set | ||
| 162 | CONFIG_KEXEC=y | ||
| 163 | # CONFIG_CRASH_DUMP is not set | ||
| 164 | |||
| 165 | # | ||
| 166 | # Firmware Drivers | ||
| 167 | # | ||
| 168 | CONFIG_EFI_VARS=y | ||
| 169 | CONFIG_EFI_PCDP=y | ||
| 170 | CONFIG_DMIID=y | ||
| 171 | CONFIG_BINFMT_ELF=y | ||
| 172 | CONFIG_BINFMT_MISC=m | ||
| 173 | |||
| 174 | # CONFIG_DMAR is not set | ||
| 175 | |||
| 176 | # | ||
| 177 | # Power management and ACPI | ||
| 178 | # | ||
| 179 | CONFIG_PM=y | ||
| 180 | CONFIG_PM_LEGACY=y | ||
| 181 | # CONFIG_PM_DEBUG is not set | ||
| 182 | |||
| 183 | # | ||
| 184 | # ACPI (Advanced Configuration and Power Interface) Support | ||
| 185 | # | ||
| 186 | CONFIG_ACPI=y | ||
| 187 | CONFIG_ACPI_PROCFS=y | ||
| 188 | CONFIG_ACPI_BUTTON=m | 1 | CONFIG_ACPI_BUTTON=m |
| 2 | CONFIG_ACPI_CONTAINER=m | ||
| 189 | CONFIG_ACPI_FAN=m | 3 | CONFIG_ACPI_FAN=m |
| 190 | # CONFIG_ACPI_DOCK is not set | ||
| 191 | CONFIG_ACPI_PROCESSOR=m | 4 | CONFIG_ACPI_PROCESSOR=m |
| 192 | CONFIG_ACPI_HOTPLUG_CPU=y | 5 | CONFIG_ACPI_PROCFS=y |
| 193 | CONFIG_ACPI_THERMAL=m | 6 | CONFIG_AGP_I460=m |
| 194 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 7 | CONFIG_AGP=m |
| 195 | # CONFIG_ACPI_DEBUG is not set | ||
| 196 | CONFIG_ACPI_EC=y | ||
| 197 | CONFIG_ACPI_POWER=y | ||
| 198 | CONFIG_ACPI_SYSTEM=y | ||
| 199 | CONFIG_ACPI_CONTAINER=m | ||
| 200 | |||
| 201 | # | ||
| 202 | # CPU Frequency scaling | ||
| 203 | # | ||
| 204 | # CONFIG_CPU_FREQ is not set | ||
| 205 | |||
| 206 | # | ||
| 207 | # Bus options (PCI, PCMCIA) | ||
| 208 | # | ||
| 209 | CONFIG_PCI=y | ||
| 210 | CONFIG_PCI_DOMAINS=y | ||
| 211 | CONFIG_PCI_SYSCALL=y | ||
| 212 | # CONFIG_PCIEPORTBUS is not set | ||
| 213 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
| 214 | # CONFIG_PCI_MSI is not set | ||
| 215 | # CONFIG_PCI_DEBUG is not set | ||
| 216 | CONFIG_HOTPLUG_PCI=m | ||
| 217 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 218 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
| 219 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 220 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 221 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 222 | |||
| 223 | # | ||
| 224 | # PCCARD (PCMCIA/CardBus) support | ||
| 225 | # | ||
| 226 | # CONFIG_PCCARD is not set | ||
| 227 | |||
| 228 | # | ||
| 229 | # Networking | ||
| 230 | # | ||
| 231 | CONFIG_NET=y | ||
| 232 | |||
| 233 | # | ||
| 234 | # Networking options | ||
| 235 | # | ||
| 236 | CONFIG_PACKET=y | ||
| 237 | # CONFIG_PACKET_MMAP is not set | ||
| 238 | CONFIG_UNIX=y | ||
| 239 | CONFIG_XFRM=y | ||
| 240 | # CONFIG_XFRM_USER is not set | ||
| 241 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 242 | # CONFIG_XFRM_MIGRATE is not set | ||
| 243 | # CONFIG_NET_KEY is not set | ||
| 244 | CONFIG_INET=y | ||
| 245 | CONFIG_IP_MULTICAST=y | ||
| 246 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 247 | CONFIG_IP_FIB_HASH=y | ||
| 248 | # CONFIG_IP_PNP is not set | ||
| 249 | # CONFIG_NET_IPIP is not set | ||
| 250 | # CONFIG_NET_IPGRE is not set | ||
| 251 | # CONFIG_IP_MROUTE is not set | ||
| 252 | CONFIG_ARPD=y | 8 | CONFIG_ARPD=y |
| 253 | CONFIG_SYN_COOKIES=y | 9 | CONFIG_AUTOFS4_FS=y |
| 254 | # CONFIG_INET_AH is not set | 10 | CONFIG_AUTOFS_FS=y |
| 255 | # CONFIG_INET_ESP is not set | 11 | CONFIG_BINFMT_MISC=m |
| 256 | # CONFIG_INET_IPCOMP is not set | 12 | # CONFIG_BLK_DEV_BSG is not set |
| 257 | # CONFIG_INET_XFRM_TUNNEL is not set | 13 | CONFIG_BLK_DEV_CMD64X=y |
| 258 | # CONFIG_INET_TUNNEL is not set | ||
| 259 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 260 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 261 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 262 | CONFIG_INET_DIAG=y | ||
| 263 | CONFIG_INET_TCP_DIAG=y | ||
| 264 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 265 | CONFIG_TCP_CONG_CUBIC=y | ||
| 266 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 267 | # CONFIG_TCP_MD5SIG is not set | ||
| 268 | # CONFIG_IPV6 is not set | ||
| 269 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 270 | # CONFIG_INET6_TUNNEL is not set | ||
| 271 | # CONFIG_NETWORK_SECMARK is not set | ||
| 272 | # CONFIG_NETFILTER is not set | ||
| 273 | # CONFIG_IP_DCCP is not set | ||
| 274 | # CONFIG_IP_SCTP is not set | ||
| 275 | # CONFIG_TIPC is not set | ||
| 276 | # CONFIG_ATM is not set | ||
| 277 | # CONFIG_BRIDGE is not set | ||
| 278 | # CONFIG_VLAN_8021Q is not set | ||
| 279 | # CONFIG_DECNET is not set | ||
| 280 | # CONFIG_LLC2 is not set | ||
| 281 | # CONFIG_IPX is not set | ||
| 282 | # CONFIG_ATALK is not set | ||
| 283 | # CONFIG_X25 is not set | ||
| 284 | # CONFIG_LAPB is not set | ||
| 285 | # CONFIG_ECONET is not set | ||
| 286 | # CONFIG_WAN_ROUTER is not set | ||
| 287 | |||
| 288 | # | ||
| 289 | # QoS and/or fair queueing | ||
| 290 | # | ||
| 291 | # CONFIG_NET_SCHED is not set | ||
| 292 | |||
| 293 | # | ||
| 294 | # Network testing | ||
| 295 | # | ||
| 296 | # CONFIG_NET_PKTGEN is not set | ||
| 297 | # CONFIG_HAMRADIO is not set | ||
| 298 | # CONFIG_IRDA is not set | ||
| 299 | # CONFIG_BT is not set | ||
| 300 | # CONFIG_AF_RXRPC is not set | ||
| 301 | |||
| 302 | # | ||
| 303 | # Wireless | ||
| 304 | # | ||
| 305 | # CONFIG_CFG80211 is not set | ||
| 306 | # CONFIG_WIRELESS_EXT is not set | ||
| 307 | # CONFIG_MAC80211 is not set | ||
| 308 | # CONFIG_IEEE80211 is not set | ||
| 309 | # CONFIG_RFKILL is not set | ||
| 310 | # CONFIG_NET_9P is not set | ||
| 311 | |||
| 312 | # | ||
| 313 | # Device Drivers | ||
| 314 | # | ||
| 315 | |||
| 316 | # | ||
| 317 | # Generic Driver Options | ||
| 318 | # | ||
| 319 | CONFIG_STANDALONE=y | ||
| 320 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 321 | CONFIG_FW_LOADER=m | ||
| 322 | # CONFIG_DEBUG_DRIVER is not set | ||
| 323 | # CONFIG_DEBUG_DEVRES is not set | ||
| 324 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 325 | # CONFIG_CONNECTOR is not set | ||
| 326 | # CONFIG_MTD is not set | ||
| 327 | # CONFIG_PARPORT is not set | ||
| 328 | CONFIG_PNP=y | ||
| 329 | # CONFIG_PNP_DEBUG is not set | ||
| 330 | |||
| 331 | # | ||
| 332 | # Protocols | ||
| 333 | # | ||
| 334 | CONFIG_PNPACPI=y | ||
| 335 | CONFIG_BLK_DEV=y | ||
| 336 | # CONFIG_BLK_CPQ_DA is not set | ||
| 337 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 338 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 339 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 340 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 341 | CONFIG_BLK_DEV_LOOP=m | ||
| 342 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 14 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
| 343 | CONFIG_BLK_DEV_NBD=m | 15 | CONFIG_BLK_DEV_DM=m |
| 344 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 345 | # CONFIG_BLK_DEV_UB is not set | ||
| 346 | CONFIG_BLK_DEV_RAM=y | ||
| 347 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 348 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 349 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 350 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 351 | # CONFIG_ATA_OVER_ETH is not set | ||
| 352 | CONFIG_MISC_DEVICES=y | ||
| 353 | # CONFIG_PHANTOM is not set | ||
| 354 | # CONFIG_EEPROM_93CX6 is not set | ||
| 355 | # CONFIG_SGI_IOC4 is not set | ||
| 356 | # CONFIG_TIFM_CORE is not set | ||
| 357 | CONFIG_IDE=y | ||
| 358 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 359 | CONFIG_BLK_DEV_IDE=y | ||
| 360 | |||
| 361 | # | ||
| 362 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 363 | # | ||
| 364 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 365 | CONFIG_BLK_DEV_IDEDISK=y | ||
| 366 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 367 | CONFIG_BLK_DEV_IDECD=y | ||
| 368 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 369 | CONFIG_BLK_DEV_IDEFLOPPY=y | ||
| 370 | CONFIG_BLK_DEV_IDESCSI=m | ||
| 371 | # CONFIG_BLK_DEV_IDEACPI is not set | ||
| 372 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 373 | CONFIG_IDE_PROC_FS=y | ||
| 374 | |||
| 375 | # | ||
| 376 | # IDE chipset support/bugfixes | ||
| 377 | # | ||
| 378 | # CONFIG_IDE_GENERIC is not set | ||
| 379 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 380 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 381 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
| 382 | CONFIG_IDEPCI_PCIBUS_ORDER=y | ||
| 383 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 384 | CONFIG_BLK_DEV_GENERIC=y | 16 | CONFIG_BLK_DEV_GENERIC=y |
| 385 | # CONFIG_BLK_DEV_OPTI621 is not set | 17 | CONFIG_BLK_DEV_IDECD=y |
| 386 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 18 | CONFIG_BLK_DEV_INITRD=y |
| 387 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | 19 | CONFIG_BLK_DEV_LOOP=m |
| 388 | # CONFIG_IDEDMA_ONLYDISK is not set | 20 | CONFIG_BLK_DEV_MD=m |
| 389 | # CONFIG_BLK_DEV_AEC62XX is not set | 21 | CONFIG_BLK_DEV_NBD=m |
| 390 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 391 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 392 | CONFIG_BLK_DEV_CMD64X=y | ||
| 393 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 394 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 395 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 396 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 397 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 398 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 399 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 400 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 401 | CONFIG_BLK_DEV_PIIX=y | 22 | CONFIG_BLK_DEV_PIIX=y |
| 402 | # CONFIG_BLK_DEV_IT8213 is not set | 23 | CONFIG_BLK_DEV_RAM=y |
| 403 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 404 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 405 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 406 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 407 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 408 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 409 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 410 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 411 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 412 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 413 | # CONFIG_IDE_ARM is not set | ||
| 414 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 415 | # CONFIG_IDEDMA_IVB is not set | ||
| 416 | # CONFIG_BLK_DEV_HD is not set | ||
| 417 | |||
| 418 | # | ||
| 419 | # SCSI device support | ||
| 420 | # | ||
| 421 | # CONFIG_RAID_ATTRS is not set | ||
| 422 | CONFIG_SCSI=y | ||
| 423 | CONFIG_SCSI_DMA=y | ||
| 424 | # CONFIG_SCSI_TGT is not set | ||
| 425 | CONFIG_SCSI_NETLINK=y | ||
| 426 | CONFIG_SCSI_PROC_FS=y | ||
| 427 | |||
| 428 | # | ||
| 429 | # SCSI support type (disk, tape, CD-ROM) | ||
| 430 | # | ||
| 431 | CONFIG_BLK_DEV_SD=y | 24 | CONFIG_BLK_DEV_SD=y |
| 432 | CONFIG_CHR_DEV_ST=m | ||
| 433 | # CONFIG_CHR_DEV_OSST is not set | ||
| 434 | CONFIG_BLK_DEV_SR=m | 25 | CONFIG_BLK_DEV_SR=m |
| 435 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
| 436 | CONFIG_CHR_DEV_SG=m | 26 | CONFIG_CHR_DEV_SG=m |
| 437 | # CONFIG_CHR_DEV_SCH is not set | 27 | CONFIG_CHR_DEV_ST=m |
| 438 | 28 | CONFIG_CIFS=m | |
| 439 | # | 29 | CONFIG_CRYPTO_ECB=m |
| 440 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 30 | CONFIG_CRYPTO_MD5=y |
| 441 | # | 31 | CONFIG_CRYPTO_PCBC=m |
| 442 | # CONFIG_SCSI_MULTI_LUN is not set | 32 | CONFIG_DEBUG_KERNEL=y |
| 443 | # CONFIG_SCSI_CONSTANTS is not set | 33 | CONFIG_DEBUG_MUTEXES=y |
| 444 | # CONFIG_SCSI_LOGGING is not set | ||
| 445 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 446 | CONFIG_SCSI_WAIT_SCAN=m | ||
| 447 | |||
| 448 | # | ||
| 449 | # SCSI Transports | ||
| 450 | # | ||
| 451 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 452 | CONFIG_SCSI_FC_ATTRS=y | ||
| 453 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 454 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 455 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 456 | |||
| 457 | # | ||
| 458 | # SCSI low-level drivers | ||
| 459 | # | ||
| 460 | # CONFIG_ISCSI_TCP is not set | ||
| 461 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 462 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 463 | # CONFIG_SCSI_ACARD is not set | ||
| 464 | # CONFIG_SCSI_AACRAID is not set | ||
| 465 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 466 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 467 | # CONFIG_SCSI_AIC79XX is not set | ||
| 468 | # CONFIG_SCSI_AIC94XX is not set | ||
| 469 | # CONFIG_SCSI_ARCMSR is not set | ||
| 470 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 471 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 472 | # CONFIG_MEGARAID_SAS is not set | ||
| 473 | # CONFIG_SCSI_HPTIOP is not set | ||
| 474 | # CONFIG_SCSI_DMX3191D is not set | ||
| 475 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 476 | # CONFIG_SCSI_IPS is not set | ||
| 477 | # CONFIG_SCSI_INITIO is not set | ||
| 478 | # CONFIG_SCSI_INIA100 is not set | ||
| 479 | # CONFIG_SCSI_STEX is not set | ||
| 480 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 481 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 482 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 483 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 484 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
| 485 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 486 | # CONFIG_SCSI_QLA_FC is not set | ||
| 487 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 488 | # CONFIG_SCSI_LPFC is not set | ||
| 489 | # CONFIG_SCSI_DC395x is not set | ||
| 490 | # CONFIG_SCSI_DC390T is not set | ||
| 491 | # CONFIG_SCSI_DEBUG is not set | ||
| 492 | # CONFIG_SCSI_SRP is not set | ||
| 493 | # CONFIG_ATA is not set | ||
| 494 | CONFIG_MD=y | ||
| 495 | CONFIG_BLK_DEV_MD=m | ||
| 496 | CONFIG_MD_LINEAR=m | ||
| 497 | CONFIG_MD_RAID0=m | ||
| 498 | CONFIG_MD_RAID1=m | ||
| 499 | # CONFIG_MD_RAID10 is not set | ||
| 500 | # CONFIG_MD_RAID456 is not set | ||
| 501 | CONFIG_MD_MULTIPATH=m | ||
| 502 | # CONFIG_MD_FAULTY is not set | ||
| 503 | CONFIG_BLK_DEV_DM=m | ||
| 504 | # CONFIG_DM_DEBUG is not set | ||
| 505 | CONFIG_DM_CRYPT=m | 34 | CONFIG_DM_CRYPT=m |
| 506 | CONFIG_DM_SNAPSHOT=m | ||
| 507 | CONFIG_DM_MIRROR=m | 35 | CONFIG_DM_MIRROR=m |
| 36 | CONFIG_DM_SNAPSHOT=m | ||
| 508 | CONFIG_DM_ZERO=m | 37 | CONFIG_DM_ZERO=m |
| 509 | # CONFIG_DM_MULTIPATH is not set | ||
| 510 | # CONFIG_DM_DELAY is not set | ||
| 511 | |||
| 512 | # | ||
| 513 | # Fusion MPT device support | ||
| 514 | # | ||
| 515 | CONFIG_FUSION=y | ||
| 516 | CONFIG_FUSION_SPI=y | ||
| 517 | CONFIG_FUSION_FC=y | ||
| 518 | # CONFIG_FUSION_SAS is not set | ||
| 519 | CONFIG_FUSION_MAX_SGE=128 | ||
| 520 | CONFIG_FUSION_CTL=y | ||
| 521 | |||
| 522 | # | ||
| 523 | # IEEE 1394 (FireWire) support | ||
| 524 | # | ||
| 525 | # CONFIG_FIREWIRE is not set | ||
| 526 | # CONFIG_IEEE1394 is not set | ||
| 527 | # CONFIG_I2O is not set | ||
| 528 | CONFIG_NETDEVICES=y | ||
| 529 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
| 530 | CONFIG_DUMMY=m | ||
| 531 | # CONFIG_BONDING is not set | ||
| 532 | # CONFIG_MACVLAN is not set | ||
| 533 | # CONFIG_EQUALIZER is not set | ||
| 534 | # CONFIG_TUN is not set | ||
| 535 | # CONFIG_NET_SB1000 is not set | ||
| 536 | # CONFIG_ARCNET is not set | ||
| 537 | # CONFIG_PHYLIB is not set | ||
| 538 | CONFIG_NET_ETHERNET=y | ||
| 539 | CONFIG_MII=m | ||
| 540 | # CONFIG_HAPPYMEAL is not set | ||
| 541 | # CONFIG_SUNGEM is not set | ||
| 542 | # CONFIG_CASSINI is not set | ||
| 543 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 544 | CONFIG_NET_TULIP=y | ||
| 545 | # CONFIG_DE2104X is not set | ||
| 546 | CONFIG_TULIP=m | ||
| 547 | # CONFIG_TULIP_MWI is not set | ||
| 548 | # CONFIG_TULIP_MMIO is not set | ||
| 549 | # CONFIG_TULIP_NAPI is not set | ||
| 550 | # CONFIG_DE4X5 is not set | ||
| 551 | # CONFIG_WINBOND_840 is not set | ||
| 552 | # CONFIG_DM9102 is not set | ||
| 553 | # CONFIG_ULI526X is not set | ||
| 554 | # CONFIG_HP100 is not set | ||
| 555 | CONFIG_NET_PCI=y | ||
| 556 | # CONFIG_PCNET32 is not set | ||
| 557 | # CONFIG_AMD8111_ETH is not set | ||
| 558 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 559 | # CONFIG_B44 is not set | ||
| 560 | # CONFIG_FORCEDETH is not set | ||
| 561 | # CONFIG_DGRS is not set | ||
| 562 | CONFIG_EEPRO100=m | ||
| 563 | CONFIG_E100=m | ||
| 564 | # CONFIG_FEALNX is not set | ||
| 565 | # CONFIG_NATSEMI is not set | ||
| 566 | # CONFIG_NE2K_PCI is not set | ||
| 567 | # CONFIG_8139CP is not set | ||
| 568 | # CONFIG_8139TOO is not set | ||
| 569 | # CONFIG_SIS900 is not set | ||
| 570 | # CONFIG_EPIC100 is not set | ||
| 571 | # CONFIG_SUNDANCE is not set | ||
| 572 | # CONFIG_VIA_RHINE is not set | ||
| 573 | # CONFIG_SC92031 is not set | ||
| 574 | CONFIG_NETDEV_1000=y | ||
| 575 | # CONFIG_ACENIC is not set | ||
| 576 | # CONFIG_DL2K is not set | ||
| 577 | CONFIG_E1000=y | ||
| 578 | # CONFIG_E1000_NAPI is not set | ||
| 579 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||
| 580 | # CONFIG_NS83820 is not set | ||
| 581 | # CONFIG_HAMACHI is not set | ||
| 582 | # CONFIG_YELLOWFIN is not set | ||
| 583 | # CONFIG_R8169 is not set | ||
| 584 | # CONFIG_SIS190 is not set | ||
| 585 | # CONFIG_SKGE is not set | ||
| 586 | # CONFIG_SKY2 is not set | ||
| 587 | # CONFIG_VIA_VELOCITY is not set | ||
| 588 | CONFIG_TIGON3=y | ||
| 589 | # CONFIG_BNX2 is not set | ||
| 590 | # CONFIG_QLA3XXX is not set | ||
| 591 | # CONFIG_ATL1 is not set | ||
| 592 | CONFIG_NETDEV_10000=y | ||
| 593 | # CONFIG_CHELSIO_T1 is not set | ||
| 594 | # CONFIG_CHELSIO_T3 is not set | ||
| 595 | # CONFIG_IXGB is not set | ||
| 596 | # CONFIG_S2IO is not set | ||
| 597 | # CONFIG_MYRI10GE is not set | ||
| 598 | # CONFIG_NETXEN_NIC is not set | ||
| 599 | # CONFIG_MLX4_CORE is not set | ||
| 600 | # CONFIG_TR is not set | ||
| 601 | |||
| 602 | # | ||
| 603 | # Wireless LAN | ||
| 604 | # | ||
| 605 | # CONFIG_WLAN_PRE80211 is not set | ||
| 606 | # CONFIG_WLAN_80211 is not set | ||
| 607 | |||
| 608 | # | ||
| 609 | # USB Network Adapters | ||
| 610 | # | ||
| 611 | # CONFIG_USB_CATC is not set | ||
| 612 | # CONFIG_USB_KAWETH is not set | ||
| 613 | # CONFIG_USB_PEGASUS is not set | ||
| 614 | # CONFIG_USB_RTL8150 is not set | ||
| 615 | # CONFIG_USB_USBNET_MII is not set | ||
| 616 | # CONFIG_USB_USBNET is not set | ||
| 617 | # CONFIG_WAN is not set | ||
| 618 | # CONFIG_FDDI is not set | ||
| 619 | # CONFIG_HIPPI is not set | ||
| 620 | # CONFIG_PPP is not set | ||
| 621 | # CONFIG_SLIP is not set | ||
| 622 | # CONFIG_NET_FC is not set | ||
| 623 | # CONFIG_SHAPER is not set | ||
| 624 | CONFIG_NETCONSOLE=y | ||
| 625 | CONFIG_NETPOLL=y | ||
| 626 | # CONFIG_NETPOLL_TRAP is not set | ||
| 627 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 628 | # CONFIG_ISDN is not set | ||
| 629 | # CONFIG_PHONE is not set | ||
| 630 | |||
| 631 | # | ||
| 632 | # Input device support | ||
| 633 | # | ||
| 634 | CONFIG_INPUT=y | ||
| 635 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 636 | # CONFIG_INPUT_POLLDEV is not set | ||
| 637 | |||
| 638 | # | ||
| 639 | # Userland interfaces | ||
| 640 | # | ||
| 641 | CONFIG_INPUT_MOUSEDEV=y | ||
| 642 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 643 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 644 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 645 | # CONFIG_INPUT_JOYDEV is not set | ||
| 646 | # CONFIG_INPUT_TSDEV is not set | ||
| 647 | # CONFIG_INPUT_EVDEV is not set | ||
| 648 | # CONFIG_INPUT_EVBUG is not set | ||
| 649 | |||
| 650 | # | ||
| 651 | # Input Device Drivers | ||
| 652 | # | ||
| 653 | CONFIG_INPUT_KEYBOARD=y | ||
| 654 | CONFIG_KEYBOARD_ATKBD=y | ||
| 655 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 656 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 657 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 658 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 659 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 660 | CONFIG_INPUT_MOUSE=y | ||
| 661 | CONFIG_MOUSE_PS2=y | ||
| 662 | CONFIG_MOUSE_PS2_ALPS=y | ||
| 663 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
| 664 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
| 665 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
| 666 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
| 667 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
| 668 | # CONFIG_MOUSE_SERIAL is not set | ||
| 669 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
| 670 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 671 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 672 | # CONFIG_INPUT_TABLET is not set | ||
| 673 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 674 | # CONFIG_INPUT_MISC is not set | ||
| 675 | |||
| 676 | # | ||
| 677 | # Hardware I/O ports | ||
| 678 | # | ||
| 679 | CONFIG_SERIO=y | ||
| 680 | CONFIG_SERIO_I8042=y | ||
| 681 | # CONFIG_SERIO_SERPORT is not set | ||
| 682 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 683 | CONFIG_SERIO_LIBPS2=y | ||
| 684 | # CONFIG_SERIO_RAW is not set | ||
| 685 | CONFIG_GAMEPORT=m | ||
| 686 | # CONFIG_GAMEPORT_NS558 is not set | ||
| 687 | # CONFIG_GAMEPORT_L4 is not set | ||
| 688 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
| 689 | # CONFIG_GAMEPORT_FM801 is not set | ||
| 690 | |||
| 691 | # | ||
| 692 | # Character devices | ||
| 693 | # | ||
| 694 | CONFIG_VT=y | ||
| 695 | CONFIG_VT_CONSOLE=y | ||
| 696 | CONFIG_HW_CONSOLE=y | ||
| 697 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 698 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 699 | # CONFIG_COMPUTONE is not set | ||
| 700 | # CONFIG_ROCKETPORT is not set | ||
| 701 | # CONFIG_CYCLADES is not set | ||
| 702 | # CONFIG_DIGIEPCA is not set | ||
| 703 | # CONFIG_MOXA_INTELLIO is not set | ||
| 704 | # CONFIG_MOXA_SMARTIO is not set | ||
| 705 | # CONFIG_MOXA_SMARTIO_NEW is not set | ||
| 706 | # CONFIG_ISI is not set | ||
| 707 | # CONFIG_SYNCLINKMP is not set | ||
| 708 | # CONFIG_SYNCLINK_GT is not set | ||
| 709 | # CONFIG_N_HDLC is not set | ||
| 710 | # CONFIG_SPECIALIX is not set | ||
| 711 | # CONFIG_SX is not set | ||
| 712 | # CONFIG_RIO is not set | ||
| 713 | # CONFIG_STALDRV is not set | ||
| 714 | |||
| 715 | # | ||
| 716 | # Serial drivers | ||
| 717 | # | ||
| 718 | CONFIG_SERIAL_8250=y | ||
| 719 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 720 | CONFIG_SERIAL_8250_PCI=y | ||
| 721 | CONFIG_SERIAL_8250_PNP=y | ||
| 722 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 723 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 724 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 725 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 726 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 727 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 728 | |||
| 729 | # | ||
| 730 | # Non-8250 serial port support | ||
| 731 | # | ||
| 732 | CONFIG_SERIAL_CORE=y | ||
| 733 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 734 | # CONFIG_SERIAL_JSM is not set | ||
| 735 | CONFIG_UNIX98_PTYS=y | ||
| 736 | CONFIG_LEGACY_PTYS=y | ||
| 737 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 738 | # CONFIG_IPMI_HANDLER is not set | ||
| 739 | # CONFIG_WATCHDOG is not set | ||
| 740 | # CONFIG_HW_RANDOM is not set | ||
| 741 | CONFIG_EFI_RTC=y | ||
| 742 | # CONFIG_R3964 is not set | ||
| 743 | # CONFIG_APPLICOM is not set | ||
| 744 | CONFIG_AGP=m | ||
| 745 | CONFIG_AGP_I460=m | ||
| 746 | CONFIG_DRM=m | 38 | CONFIG_DRM=m |
| 747 | CONFIG_DRM_TDFX=m | 39 | CONFIG_DRM_MGA=m |
| 748 | CONFIG_DRM_R128=m | 40 | CONFIG_DRM_R128=m |
| 749 | CONFIG_DRM_RADEON=m | 41 | CONFIG_DRM_RADEON=m |
| 750 | CONFIG_DRM_MGA=m | ||
| 751 | CONFIG_DRM_SIS=m | 42 | CONFIG_DRM_SIS=m |
| 752 | # CONFIG_DRM_VIA is not set | 43 | CONFIG_DRM_TDFX=m |
| 753 | # CONFIG_DRM_SAVAGE is not set | 44 | CONFIG_DUMMY=m |
| 754 | CONFIG_RAW_DRIVER=m | 45 | CONFIG_E1000=y |
| 755 | CONFIG_MAX_RAW_DEVS=256 | 46 | CONFIG_E100=m |
| 756 | CONFIG_HPET=y | 47 | CONFIG_EFI_PARTITION=y |
| 757 | # CONFIG_HPET_RTC_IRQ is not set | 48 | CONFIG_EFI_RTC=y |
| 758 | CONFIG_HPET_MMAP=y | 49 | CONFIG_EFI_VARS=y |
| 759 | # CONFIG_HANGCHECK_TIMER is not set | 50 | CONFIG_EXPERIMENTAL=y |
| 760 | # CONFIG_TCG_TPM is not set | ||
| 761 | CONFIG_DEVPORT=y | ||
| 762 | # CONFIG_I2C is not set | ||
| 763 | |||
| 764 | # | ||
| 765 | # SPI support | ||
| 766 | # | ||
| 767 | # CONFIG_SPI is not set | ||
| 768 | # CONFIG_SPI_MASTER is not set | ||
| 769 | # CONFIG_W1 is not set | ||
| 770 | # CONFIG_POWER_SUPPLY is not set | ||
| 771 | CONFIG_HWMON=y | ||
| 772 | # CONFIG_HWMON_VID is not set | ||
| 773 | # CONFIG_SENSORS_ABITUGURU is not set | ||
| 774 | # CONFIG_SENSORS_F71805F is not set | ||
| 775 | # CONFIG_SENSORS_PC87427 is not set | ||
| 776 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 777 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 778 | # CONFIG_SENSORS_VT1211 is not set | ||
| 779 | # CONFIG_SENSORS_W83627HF is not set | ||
| 780 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 781 | |||
| 782 | # | ||
| 783 | # Multifunction device drivers | ||
| 784 | # | ||
| 785 | # CONFIG_MFD_SM501 is not set | ||
| 786 | |||
| 787 | # | ||
| 788 | # Multimedia devices | ||
| 789 | # | ||
| 790 | # CONFIG_VIDEO_DEV is not set | ||
| 791 | # CONFIG_DVB_CORE is not set | ||
| 792 | CONFIG_DAB=y | ||
| 793 | # CONFIG_USB_DABUSB is not set | ||
| 794 | |||
| 795 | # | ||
| 796 | # Graphics support | ||
| 797 | # | ||
| 798 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 799 | |||
| 800 | # | ||
| 801 | # Display device support | ||
| 802 | # | ||
| 803 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 804 | # CONFIG_VGASTATE is not set | ||
| 805 | # CONFIG_FB is not set | ||
| 806 | |||
| 807 | # | ||
| 808 | # Console display driver support | ||
| 809 | # | ||
| 810 | CONFIG_VGA_CONSOLE=y | ||
| 811 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | ||
| 812 | CONFIG_DUMMY_CONSOLE=y | ||
| 813 | |||
| 814 | # | ||
| 815 | # Sound | ||
| 816 | # | ||
| 817 | # CONFIG_SOUND is not set | ||
| 818 | CONFIG_HID_SUPPORT=y | ||
| 819 | CONFIG_HID=y | ||
| 820 | # CONFIG_HID_DEBUG is not set | ||
| 821 | |||
| 822 | # | ||
| 823 | # USB Input Devices | ||
| 824 | # | ||
| 825 | CONFIG_USB_HID=y | ||
| 826 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 827 | # CONFIG_HID_FF is not set | ||
| 828 | # CONFIG_USB_HIDDEV is not set | ||
| 829 | CONFIG_USB_SUPPORT=y | ||
| 830 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 831 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 832 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 833 | CONFIG_USB=y | ||
| 834 | # CONFIG_USB_DEBUG is not set | ||
| 835 | |||
| 836 | # | ||
| 837 | # Miscellaneous USB options | ||
| 838 | # | ||
| 839 | CONFIG_USB_DEVICEFS=y | ||
| 840 | CONFIG_USB_DEVICE_CLASS=y | ||
| 841 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 842 | # CONFIG_USB_SUSPEND is not set | ||
| 843 | # CONFIG_USB_PERSIST is not set | ||
| 844 | # CONFIG_USB_OTG is not set | ||
| 845 | |||
| 846 | # | ||
| 847 | # USB Host Controller Drivers | ||
| 848 | # | ||
| 849 | CONFIG_USB_EHCI_HCD=m | ||
| 850 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
| 851 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 852 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 853 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 854 | CONFIG_USB_OHCI_HCD=m | ||
| 855 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 856 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 857 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 858 | CONFIG_USB_UHCI_HCD=y | ||
| 859 | # CONFIG_USB_SL811_HCD is not set | ||
| 860 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 861 | |||
| 862 | # | ||
| 863 | # USB Device Class drivers | ||
| 864 | # | ||
| 865 | # CONFIG_USB_ACM is not set | ||
| 866 | # CONFIG_USB_PRINTER is not set | ||
| 867 | |||
| 868 | # | ||
| 869 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 870 | # | ||
| 871 | |||
| 872 | # | ||
| 873 | # may also be needed; see USB_STORAGE Help for more information | ||
| 874 | # | ||
| 875 | CONFIG_USB_STORAGE=m | ||
| 876 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 877 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 878 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 879 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 880 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 881 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 882 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 883 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 884 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 885 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 886 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 887 | # CONFIG_USB_LIBUSUAL is not set | ||
| 888 | |||
| 889 | # | ||
| 890 | # USB Imaging devices | ||
| 891 | # | ||
| 892 | # CONFIG_USB_MDC800 is not set | ||
| 893 | # CONFIG_USB_MICROTEK is not set | ||
| 894 | # CONFIG_USB_MON is not set | ||
| 895 | |||
| 896 | # | ||
| 897 | # USB port drivers | ||
| 898 | # | ||
| 899 | |||
| 900 | # | ||
| 901 | # USB Serial Converter support | ||
| 902 | # | ||
| 903 | # CONFIG_USB_SERIAL is not set | ||
| 904 | |||
| 905 | # | ||
| 906 | # USB Miscellaneous drivers | ||
| 907 | # | ||
| 908 | # CONFIG_USB_EMI62 is not set | ||
| 909 | # CONFIG_USB_EMI26 is not set | ||
| 910 | # CONFIG_USB_ADUTUX is not set | ||
| 911 | # CONFIG_USB_AUERSWALD is not set | ||
| 912 | # CONFIG_USB_RIO500 is not set | ||
| 913 | # CONFIG_USB_LEGOTOWER is not set | ||
| 914 | # CONFIG_USB_LCD is not set | ||
| 915 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 916 | # CONFIG_USB_LED is not set | ||
| 917 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 918 | # CONFIG_USB_CYTHERM is not set | ||
| 919 | # CONFIG_USB_PHIDGET is not set | ||
| 920 | # CONFIG_USB_IDMOUSE is not set | ||
| 921 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 922 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 923 | # CONFIG_USB_SISUSBVGA is not set | ||
| 924 | # CONFIG_USB_LD is not set | ||
| 925 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 926 | # CONFIG_USB_IOWARRIOR is not set | ||
| 927 | # CONFIG_USB_TEST is not set | ||
| 928 | |||
| 929 | # | ||
| 930 | # USB DSL modem support | ||
| 931 | # | ||
| 932 | |||
| 933 | # | ||
| 934 | # USB Gadget Support | ||
| 935 | # | ||
| 936 | # CONFIG_USB_GADGET is not set | ||
| 937 | # CONFIG_MMC is not set | ||
| 938 | |||
| 939 | # | ||
| 940 | # LED devices | ||
| 941 | # | ||
| 942 | # CONFIG_NEW_LEDS is not set | ||
| 943 | |||
| 944 | # | ||
| 945 | # LED drivers | ||
| 946 | # | ||
| 947 | |||
| 948 | # | ||
| 949 | # LED Triggers | ||
| 950 | # | ||
| 951 | # CONFIG_INFINIBAND is not set | ||
| 952 | |||
| 953 | # | ||
| 954 | # Real Time Clock | ||
| 955 | # | ||
| 956 | # CONFIG_RTC_CLASS is not set | ||
| 957 | |||
| 958 | # | ||
| 959 | # DMA Engine support | ||
| 960 | # | ||
| 961 | # CONFIG_DMA_ENGINE is not set | ||
| 962 | |||
| 963 | # | ||
| 964 | # DMA Clients | ||
| 965 | # | ||
| 966 | |||
| 967 | # | ||
| 968 | # DMA Devices | ||
| 969 | # | ||
| 970 | |||
| 971 | # | ||
| 972 | # Userspace I/O | ||
| 973 | # | ||
| 974 | # CONFIG_UIO is not set | ||
| 975 | # CONFIG_MSPEC is not set | ||
| 976 | |||
| 977 | # | ||
| 978 | # File systems | ||
| 979 | # | ||
| 980 | CONFIG_EXT2_FS=y | ||
| 981 | CONFIG_EXT2_FS_XATTR=y | ||
| 982 | CONFIG_EXT2_FS_POSIX_ACL=y | 51 | CONFIG_EXT2_FS_POSIX_ACL=y |
| 983 | CONFIG_EXT2_FS_SECURITY=y | 52 | CONFIG_EXT2_FS_SECURITY=y |
| 984 | # CONFIG_EXT2_FS_XIP is not set | 53 | CONFIG_EXT2_FS_XATTR=y |
| 985 | CONFIG_EXT3_FS=y | 54 | CONFIG_EXT2_FS=y |
| 986 | CONFIG_EXT3_FS_XATTR=y | ||
| 987 | CONFIG_EXT3_FS_POSIX_ACL=y | 55 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 988 | CONFIG_EXT3_FS_SECURITY=y | 56 | CONFIG_EXT3_FS_SECURITY=y |
| 989 | # CONFIG_EXT4DEV_FS is not set | 57 | CONFIG_EXT3_FS=y |
| 990 | CONFIG_JBD=y | 58 | CONFIG_FORCE_CPEI_RETARGET=y |
| 991 | # CONFIG_JBD_DEBUG is not set | 59 | CONFIG_FUSION_CTL=y |
| 992 | CONFIG_FS_MBCACHE=y | 60 | CONFIG_FUSION_FC=y |
| 993 | CONFIG_REISERFS_FS=y | 61 | CONFIG_FUSION_SPI=y |
| 994 | # CONFIG_REISERFS_CHECK is not set | 62 | CONFIG_FUSION=y |
| 995 | # CONFIG_REISERFS_PROC_INFO is not set | 63 | CONFIG_GAMEPORT=m |
| 996 | CONFIG_REISERFS_FS_XATTR=y | 64 | CONFIG_HOTPLUG_CPU=y |
| 997 | CONFIG_REISERFS_FS_POSIX_ACL=y | 65 | CONFIG_HOTPLUG_PCI_ACPI=m |
| 998 | CONFIG_REISERFS_FS_SECURITY=y | 66 | CONFIG_HOTPLUG_PCI=m |
| 999 | # CONFIG_JFS_FS is not set | 67 | CONFIG_HPET=y |
| 1000 | CONFIG_FS_POSIX_ACL=y | 68 | CONFIG_HUGETLBFS=y |
| 1001 | CONFIG_XFS_FS=y | 69 | # CONFIG_HW_RANDOM is not set |
| 1002 | # CONFIG_XFS_QUOTA is not set | 70 | CONFIG_IA64_CYCLONE=y |
| 1003 | # CONFIG_XFS_SECURITY is not set | 71 | CONFIG_IA64_DIG=y |
| 1004 | # CONFIG_XFS_POSIX_ACL is not set | 72 | CONFIG_IA64_GRANULE_16MB=y |
| 1005 | # CONFIG_XFS_RT is not set | 73 | CONFIG_IA64_MCA_RECOVERY=y |
| 1006 | # CONFIG_GFS2_FS is not set | 74 | CONFIG_IA64_PAGE_SIZE_64KB=y |
| 1007 | # CONFIG_OCFS2_FS is not set | 75 | CONFIG_IA64_PALINFO=y |
| 1008 | # CONFIG_MINIX_FS is not set | 76 | CONFIG_IDE=y |
| 1009 | # CONFIG_ROMFS_FS is not set | 77 | CONFIG_IKCONFIG_PROC=y |
| 78 | CONFIG_IKCONFIG=y | ||
| 79 | CONFIG_INET=y | ||
| 1010 | CONFIG_INOTIFY=y | 80 | CONFIG_INOTIFY=y |
| 1011 | CONFIG_INOTIFY_USER=y | 81 | CONFIG_IP_MULTICAST=y |
| 1012 | # CONFIG_QUOTA is not set | 82 | # CONFIG_IPV6 is not set |
| 1013 | CONFIG_DNOTIFY=y | ||
| 1014 | CONFIG_AUTOFS_FS=y | ||
| 1015 | CONFIG_AUTOFS4_FS=y | ||
| 1016 | # CONFIG_FUSE_FS is not set | ||
| 1017 | |||
| 1018 | # | ||
| 1019 | # CD-ROM/DVD Filesystems | ||
| 1020 | # | ||
| 1021 | CONFIG_ISO9660_FS=m | 83 | CONFIG_ISO9660_FS=m |
| 1022 | CONFIG_JOLIET=y | 84 | CONFIG_JOLIET=y |
| 1023 | # CONFIG_ZISOFS is not set | 85 | CONFIG_KALLSYMS_ALL=y |
| 1024 | CONFIG_UDF_FS=m | 86 | CONFIG_KEXEC=y |
| 1025 | CONFIG_UDF_NLS=y | 87 | CONFIG_LOG_BUF_SHIFT=20 |
| 1026 | 88 | CONFIG_MAGIC_SYSRQ=y | |
| 1027 | # | 89 | CONFIG_MCKINLEY=y |
| 1028 | # DOS/FAT/NT Filesystems | 90 | CONFIG_MD_LINEAR=m |
| 1029 | # | 91 | CONFIG_MD_MULTIPATH=m |
| 1030 | CONFIG_FAT_FS=y | 92 | CONFIG_MD_RAID0=m |
| 1031 | # CONFIG_MSDOS_FS is not set | 93 | CONFIG_MD_RAID1=m |
| 1032 | CONFIG_VFAT_FS=y | 94 | CONFIG_MD=y |
| 1033 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 95 | CONFIG_MODULE_SRCVERSION_ALL=y |
| 1034 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 96 | CONFIG_MODULES=y |
| 1035 | CONFIG_NTFS_FS=m | 97 | CONFIG_MODULE_UNLOAD=y |
| 1036 | # CONFIG_NTFS_DEBUG is not set | 98 | CONFIG_MODVERSIONS=y |
| 1037 | # CONFIG_NTFS_RW is not set | 99 | CONFIG_NETCONSOLE=y |
| 1038 | 100 | CONFIG_NETDEVICES=y | |
| 1039 | # | 101 | CONFIG_NET_ETHERNET=y |
| 1040 | # Pseudo filesystems | 102 | CONFIG_NET_PCI=y |
| 1041 | # | 103 | CONFIG_NET_TULIP=y |
| 1042 | CONFIG_PROC_FS=y | 104 | CONFIG_NFSD=m |
| 1043 | CONFIG_PROC_KCORE=y | 105 | CONFIG_NFSD_V4=y |
| 1044 | CONFIG_PROC_SYSCTL=y | ||
| 1045 | CONFIG_SYSFS=y | ||
| 1046 | CONFIG_TMPFS=y | ||
| 1047 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1048 | CONFIG_HUGETLBFS=y | ||
| 1049 | CONFIG_HUGETLB_PAGE=y | ||
| 1050 | CONFIG_RAMFS=y | ||
| 1051 | # CONFIG_CONFIGFS_FS is not set | ||
| 1052 | |||
| 1053 | # | ||
| 1054 | # Miscellaneous filesystems | ||
| 1055 | # | ||
| 1056 | # CONFIG_ADFS_FS is not set | ||
| 1057 | # CONFIG_AFFS_FS is not set | ||
| 1058 | # CONFIG_HFS_FS is not set | ||
| 1059 | # CONFIG_HFSPLUS_FS is not set | ||
| 1060 | # CONFIG_BEFS_FS is not set | ||
| 1061 | # CONFIG_BFS_FS is not set | ||
| 1062 | # CONFIG_EFS_FS is not set | ||
| 1063 | # CONFIG_CRAMFS is not set | ||
| 1064 | # CONFIG_VXFS_FS is not set | ||
| 1065 | # CONFIG_HPFS_FS is not set | ||
| 1066 | # CONFIG_QNX4FS_FS is not set | ||
| 1067 | # CONFIG_SYSV_FS is not set | ||
| 1068 | # CONFIG_UFS_FS is not set | ||
| 1069 | |||
| 1070 | # | ||
| 1071 | # Network File Systems | ||
| 1072 | # | ||
| 1073 | CONFIG_NFS_FS=m | 106 | CONFIG_NFS_FS=m |
| 1074 | CONFIG_NFS_V3=y | 107 | CONFIG_NFS_V3=y |
| 1075 | # CONFIG_NFS_V3_ACL is not set | ||
| 1076 | CONFIG_NFS_V4=y | 108 | CONFIG_NFS_V4=y |
| 1077 | CONFIG_NFS_DIRECTIO=y | 109 | CONFIG_NLS_CODEPAGE_1250=m |
| 1078 | CONFIG_NFSD=m | 110 | CONFIG_NLS_CODEPAGE_1251=m |
| 1079 | CONFIG_NFSD_V3=y | ||
| 1080 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1081 | CONFIG_NFSD_V4=y | ||
| 1082 | CONFIG_NFSD_TCP=y | ||
| 1083 | CONFIG_LOCKD=m | ||
| 1084 | CONFIG_LOCKD_V4=y | ||
| 1085 | CONFIG_EXPORTFS=m | ||
| 1086 | CONFIG_NFS_COMMON=y | ||
| 1087 | CONFIG_SUNRPC=m | ||
| 1088 | CONFIG_SUNRPC_GSS=m | ||
| 1089 | # CONFIG_SUNRPC_BIND34 is not set | ||
| 1090 | CONFIG_RPCSEC_GSS_KRB5=y | ||
| 1091 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1092 | CONFIG_SMB_FS=m | ||
| 1093 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 1094 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
| 1095 | CONFIG_CIFS=m | ||
| 1096 | # CONFIG_CIFS_STATS is not set | ||
| 1097 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1098 | # CONFIG_CIFS_XATTR is not set | ||
| 1099 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1100 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1101 | # CONFIG_NCP_FS is not set | ||
| 1102 | # CONFIG_CODA_FS is not set | ||
| 1103 | # CONFIG_AFS_FS is not set | ||
| 1104 | |||
| 1105 | # | ||
| 1106 | # Partition Types | ||
| 1107 | # | ||
| 1108 | CONFIG_PARTITION_ADVANCED=y | ||
| 1109 | # CONFIG_ACORN_PARTITION is not set | ||
| 1110 | # CONFIG_OSF_PARTITION is not set | ||
| 1111 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1112 | # CONFIG_ATARI_PARTITION is not set | ||
| 1113 | # CONFIG_MAC_PARTITION is not set | ||
| 1114 | CONFIG_MSDOS_PARTITION=y | ||
| 1115 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1116 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1117 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1118 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1119 | # CONFIG_LDM_PARTITION is not set | ||
| 1120 | CONFIG_SGI_PARTITION=y | ||
| 1121 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1122 | # CONFIG_SUN_PARTITION is not set | ||
| 1123 | # CONFIG_KARMA_PARTITION is not set | ||
| 1124 | CONFIG_EFI_PARTITION=y | ||
| 1125 | # CONFIG_SYSV68_PARTITION is not set | ||
| 1126 | |||
| 1127 | # | ||
| 1128 | # Native Language Support | ||
| 1129 | # | ||
| 1130 | CONFIG_NLS=y | ||
| 1131 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1132 | CONFIG_NLS_CODEPAGE_437=y | 111 | CONFIG_NLS_CODEPAGE_437=y |
| 1133 | CONFIG_NLS_CODEPAGE_737=m | 112 | CONFIG_NLS_CODEPAGE_737=m |
| 1134 | CONFIG_NLS_CODEPAGE_775=m | 113 | CONFIG_NLS_CODEPAGE_775=m |
| @@ -1144,15 +123,14 @@ CONFIG_NLS_CODEPAGE_864=m | |||
| 1144 | CONFIG_NLS_CODEPAGE_865=m | 123 | CONFIG_NLS_CODEPAGE_865=m |
| 1145 | CONFIG_NLS_CODEPAGE_866=m | 124 | CONFIG_NLS_CODEPAGE_866=m |
| 1146 | CONFIG_NLS_CODEPAGE_869=m | 125 | CONFIG_NLS_CODEPAGE_869=m |
| 1147 | CONFIG_NLS_CODEPAGE_936=m | 126 | CONFIG_NLS_CODEPAGE_874=m |
| 1148 | CONFIG_NLS_CODEPAGE_950=m | ||
| 1149 | CONFIG_NLS_CODEPAGE_932=m | 127 | CONFIG_NLS_CODEPAGE_932=m |
| 128 | CONFIG_NLS_CODEPAGE_936=m | ||
| 1150 | CONFIG_NLS_CODEPAGE_949=m | 129 | CONFIG_NLS_CODEPAGE_949=m |
| 1151 | CONFIG_NLS_CODEPAGE_874=m | 130 | CONFIG_NLS_CODEPAGE_950=m |
| 1152 | CONFIG_NLS_ISO8859_8=m | 131 | CONFIG_NLS_ISO8859_13=m |
| 1153 | CONFIG_NLS_CODEPAGE_1250=m | 132 | CONFIG_NLS_ISO8859_14=m |
| 1154 | CONFIG_NLS_CODEPAGE_1251=m | 133 | CONFIG_NLS_ISO8859_15=m |
| 1155 | # CONFIG_NLS_ASCII is not set | ||
| 1156 | CONFIG_NLS_ISO8859_1=y | 134 | CONFIG_NLS_ISO8859_1=y |
| 1157 | CONFIG_NLS_ISO8859_2=m | 135 | CONFIG_NLS_ISO8859_2=m |
| 1158 | CONFIG_NLS_ISO8859_3=m | 136 | CONFIG_NLS_ISO8859_3=m |
| @@ -1160,120 +138,50 @@ CONFIG_NLS_ISO8859_4=m | |||
| 1160 | CONFIG_NLS_ISO8859_5=m | 138 | CONFIG_NLS_ISO8859_5=m |
| 1161 | CONFIG_NLS_ISO8859_6=m | 139 | CONFIG_NLS_ISO8859_6=m |
| 1162 | CONFIG_NLS_ISO8859_7=m | 140 | CONFIG_NLS_ISO8859_7=m |
| 141 | CONFIG_NLS_ISO8859_8=m | ||
| 1163 | CONFIG_NLS_ISO8859_9=m | 142 | CONFIG_NLS_ISO8859_9=m |
| 1164 | CONFIG_NLS_ISO8859_13=m | ||
| 1165 | CONFIG_NLS_ISO8859_14=m | ||
| 1166 | CONFIG_NLS_ISO8859_15=m | ||
| 1167 | CONFIG_NLS_KOI8_R=m | 143 | CONFIG_NLS_KOI8_R=m |
| 1168 | CONFIG_NLS_KOI8_U=m | 144 | CONFIG_NLS_KOI8_U=m |
| 1169 | CONFIG_NLS_UTF8=m | 145 | CONFIG_NLS_UTF8=m |
| 1170 | 146 | CONFIG_NR_CPUS=16 | |
| 1171 | # | 147 | CONFIG_NTFS_FS=m |
| 1172 | # Distributed Lock Manager | 148 | CONFIG_PACKET=y |
| 1173 | # | 149 | CONFIG_PARTITION_ADVANCED=y |
| 1174 | # CONFIG_DLM is not set | 150 | CONFIG_PERFMON=y |
| 1175 | 151 | CONFIG_PERMIT_BSP_REMOVE=y | |
| 1176 | # | 152 | CONFIG_POSIX_MQUEUE=y |
| 1177 | # Library routines | 153 | CONFIG_PROC_KCORE=y |
| 1178 | # | 154 | CONFIG_RAW_DRIVER=m |
| 1179 | CONFIG_BITREVERSE=y | 155 | CONFIG_REISERFS_FS_POSIX_ACL=y |
| 1180 | # CONFIG_CRC_CCITT is not set | 156 | CONFIG_REISERFS_FS_SECURITY=y |
| 1181 | # CONFIG_CRC16 is not set | 157 | CONFIG_REISERFS_FS_XATTR=y |
| 1182 | # CONFIG_CRC_ITU_T is not set | 158 | CONFIG_REISERFS_FS=y |
| 1183 | CONFIG_CRC32=y | 159 | CONFIG_SCSI_QLOGIC_1280=y |
| 1184 | # CONFIG_CRC7 is not set | 160 | CONFIG_SCSI_SYM53C8XX_2=y |
| 1185 | # CONFIG_LIBCRC32C is not set | 161 | CONFIG_SCSI=y |
| 1186 | CONFIG_PLIST=y | 162 | CONFIG_SERIAL_8250_CONSOLE=y |
| 1187 | CONFIG_HAS_IOMEM=y | 163 | CONFIG_SERIAL_8250_EXTENDED=y |
| 1188 | CONFIG_HAS_IOPORT=y | 164 | CONFIG_SERIAL_8250_NR_UARTS=6 |
| 1189 | CONFIG_HAS_DMA=y | 165 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 1190 | CONFIG_GENERIC_HARDIRQS=y | 166 | CONFIG_SERIAL_8250=y |
| 1191 | CONFIG_GENERIC_IRQ_PROBE=y | 167 | CONFIG_SERIAL_NONSTANDARD=y |
| 1192 | CONFIG_GENERIC_PENDING_IRQ=y | 168 | # CONFIG_SERIO_SERPORT is not set |
| 1193 | CONFIG_IRQ_PER_CPU=y | 169 | CONFIG_SGI_PARTITION=y |
| 1194 | 170 | CONFIG_SMB_FS=m | |
| 1195 | # | 171 | CONFIG_SMB_NLS_DEFAULT=y |
| 1196 | # Instrumentation Support | 172 | CONFIG_SMP=y |
| 1197 | # | 173 | CONFIG_SYN_COOKIES=y |
| 1198 | # CONFIG_PROFILING is not set | 174 | CONFIG_SYSVIPC=y |
| 1199 | # CONFIG_KPROBES is not set | 175 | CONFIG_TIGON3=y |
| 1200 | 176 | CONFIG_TMPFS=y | |
| 1201 | # | 177 | CONFIG_TULIP=m |
| 1202 | # Kernel hacking | 178 | CONFIG_UDF_FS=m |
| 1203 | # | 179 | CONFIG_UNIX=y |
| 1204 | # CONFIG_PRINTK_TIME is not set | 180 | CONFIG_USB_DEVICEFS=y |
| 1205 | CONFIG_ENABLE_MUST_CHECK=y | 181 | CONFIG_USB_EHCI_HCD=m |
| 1206 | CONFIG_MAGIC_SYSRQ=y | 182 | CONFIG_USB_OHCI_HCD=m |
| 1207 | # CONFIG_UNUSED_SYMBOLS is not set | 183 | CONFIG_USB_STORAGE=m |
| 1208 | # CONFIG_DEBUG_FS is not set | 184 | CONFIG_USB_UHCI_HCD=y |
| 1209 | # CONFIG_HEADERS_CHECK is not set | 185 | CONFIG_USB=y |
| 1210 | CONFIG_DEBUG_KERNEL=y | 186 | CONFIG_VFAT_FS=y |
| 1211 | # CONFIG_DEBUG_SHIRQ is not set | 187 | CONFIG_XFS_FS=y |
| 1212 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 1213 | CONFIG_SCHED_DEBUG=y | ||
| 1214 | # CONFIG_SCHEDSTATS is not set | ||
| 1215 | # CONFIG_TIMER_STATS is not set | ||
| 1216 | # CONFIG_DEBUG_SLAB is not set | ||
| 1217 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1218 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1219 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1220 | CONFIG_DEBUG_MUTEXES=y | ||
| 1221 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1222 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1223 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1224 | # CONFIG_DEBUG_INFO is not set | ||
| 1225 | # CONFIG_DEBUG_VM is not set | ||
| 1226 | # CONFIG_DEBUG_LIST is not set | ||
| 1227 | CONFIG_FORCED_INLINING=y | ||
| 1228 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1229 | # CONFIG_FAULT_INJECTION is not set | ||
| 1230 | CONFIG_IA64_GRANULE_16MB=y | ||
| 1231 | # CONFIG_IA64_GRANULE_64MB is not set | ||
| 1232 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
| 1233 | # CONFIG_DISABLE_VHPT is not set | ||
| 1234 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||
| 1235 | # CONFIG_IA64_DEBUG_IRQ is not set | ||
| 1236 | |||
| 1237 | # | ||
| 1238 | # Security options | ||
| 1239 | # | ||
| 1240 | # CONFIG_KEYS is not set | ||
| 1241 | # CONFIG_SECURITY is not set | ||
| 1242 | CONFIG_CRYPTO=y | ||
| 1243 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1244 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1245 | CONFIG_CRYPTO_MANAGER=m | ||
| 1246 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1247 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1248 | # CONFIG_CRYPTO_NULL is not set | ||
| 1249 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1250 | CONFIG_CRYPTO_MD5=y | ||
| 1251 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1252 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1253 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1254 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1255 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1256 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1257 | CONFIG_CRYPTO_ECB=m | ||
| 1258 | CONFIG_CRYPTO_CBC=m | ||
| 1259 | CONFIG_CRYPTO_PCBC=m | ||
| 1260 | # CONFIG_CRYPTO_LRW is not set | ||
| 1261 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1262 | CONFIG_CRYPTO_DES=m | ||
| 1263 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1264 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1265 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1266 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1267 | # CONFIG_CRYPTO_AES is not set | ||
| 1268 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1269 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1270 | # CONFIG_CRYPTO_TEA is not set | ||
| 1271 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1272 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1273 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1274 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1275 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1276 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1277 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1278 | # CONFIG_CRYPTO_TEST is not set | ||
| 1279 | CONFIG_CRYPTO_HW=y | ||
diff --git a/arch/ia64/configs/xen_domu_defconfig b/arch/ia64/configs/xen_domu_defconfig index c67eafc4bb38..5f6d284723a4 100644 --- a/arch/ia64/configs/xen_domu_defconfig +++ b/arch/ia64/configs/xen_domu_defconfig | |||
| @@ -1,1374 +1,121 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.29-rc1 | ||
| 4 | # Fri Jan 16 11:49:59 2009 | ||
| 5 | # | ||
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 7 | |||
| 8 | # | ||
| 9 | # General setup | ||
| 10 | # | ||
| 11 | CONFIG_EXPERIMENTAL=y | ||
| 12 | CONFIG_LOCK_KERNEL=y | ||
| 13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 14 | CONFIG_LOCALVERSION="" | ||
| 15 | CONFIG_LOCALVERSION_AUTO=y | ||
| 16 | CONFIG_SWAP=y | ||
| 17 | CONFIG_SYSVIPC=y | ||
| 18 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 19 | CONFIG_POSIX_MQUEUE=y | ||
| 20 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 21 | # CONFIG_TASKSTATS is not set | ||
| 22 | # CONFIG_AUDIT is not set | ||
| 23 | CONFIG_IKCONFIG=y | ||
| 24 | CONFIG_IKCONFIG_PROC=y | ||
| 25 | CONFIG_LOG_BUF_SHIFT=20 | ||
| 26 | CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y | ||
| 27 | # CONFIG_GROUP_SCHED is not set | ||
| 28 | |||
| 29 | # | ||
| 30 | # Control Group support | ||
| 31 | # | ||
| 32 | # CONFIG_CGROUPS is not set | ||
| 33 | CONFIG_SYSFS_DEPRECATED=y | ||
| 34 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 35 | # CONFIG_RELAY is not set | ||
| 36 | CONFIG_NAMESPACES=y | ||
| 37 | # CONFIG_UTS_NS is not set | ||
| 38 | # CONFIG_IPC_NS is not set | ||
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | CONFIG_BLK_DEV_INITRD=y | ||
| 42 | CONFIG_INITRAMFS_SOURCE="" | ||
| 43 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 44 | CONFIG_SYSCTL=y | ||
| 45 | # CONFIG_EMBEDDED is not set | ||
| 46 | CONFIG_SYSCTL_SYSCALL=y | ||
| 47 | CONFIG_KALLSYMS=y | ||
| 48 | CONFIG_KALLSYMS_ALL=y | ||
| 49 | CONFIG_KALLSYMS_STRIP_GENERATED=y | ||
| 50 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 51 | CONFIG_HOTPLUG=y | ||
| 52 | CONFIG_PRINTK=y | ||
| 53 | CONFIG_BUG=y | ||
| 54 | CONFIG_ELF_CORE=y | ||
| 55 | CONFIG_COMPAT_BRK=y | ||
| 56 | CONFIG_BASE_FULL=y | ||
| 57 | CONFIG_FUTEX=y | ||
| 58 | CONFIG_ANON_INODES=y | ||
| 59 | CONFIG_EPOLL=y | ||
| 60 | CONFIG_SIGNALFD=y | ||
| 61 | CONFIG_TIMERFD=y | ||
| 62 | CONFIG_EVENTFD=y | ||
| 63 | CONFIG_SHMEM=y | ||
| 64 | CONFIG_AIO=y | ||
| 65 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 66 | CONFIG_PCI_QUIRKS=y | ||
| 67 | CONFIG_SLUB_DEBUG=y | ||
| 68 | # CONFIG_SLAB is not set | ||
| 69 | CONFIG_SLUB=y | ||
| 70 | # CONFIG_SLOB is not set | ||
| 71 | # CONFIG_PROFILING is not set | ||
| 72 | CONFIG_HAVE_OPROFILE=y | ||
| 73 | # CONFIG_KPROBES is not set | ||
| 74 | CONFIG_HAVE_KPROBES=y | ||
| 75 | CONFIG_HAVE_KRETPROBES=y | ||
| 76 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
| 77 | CONFIG_HAVE_DMA_ATTRS=y | ||
| 78 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
| 79 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
| 80 | CONFIG_SLABINFO=y | ||
| 81 | CONFIG_RT_MUTEXES=y | ||
| 82 | CONFIG_BASE_SMALL=0 | ||
| 83 | CONFIG_MODULES=y | ||
| 84 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 85 | CONFIG_MODULE_UNLOAD=y | ||
| 86 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 87 | CONFIG_MODVERSIONS=y | ||
| 88 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 89 | CONFIG_STOP_MACHINE=y | ||
| 90 | CONFIG_BLOCK=y | ||
| 91 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 92 | # CONFIG_BLK_DEV_BSG is not set | ||
| 93 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 94 | |||
| 95 | # | ||
| 96 | # IO Schedulers | ||
| 97 | # | ||
| 98 | CONFIG_IOSCHED_NOOP=y | ||
| 99 | CONFIG_IOSCHED_AS=y | ||
| 100 | CONFIG_IOSCHED_DEADLINE=y | ||
| 101 | CONFIG_IOSCHED_CFQ=y | ||
| 102 | CONFIG_DEFAULT_AS=y | ||
| 103 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 104 | # CONFIG_DEFAULT_CFQ is not set | ||
| 105 | # CONFIG_DEFAULT_NOOP is not set | ||
| 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 107 | CONFIG_CLASSIC_RCU=y | ||
| 108 | # CONFIG_TREE_RCU is not set | ||
| 109 | # CONFIG_PREEMPT_RCU is not set | ||
| 110 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 111 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
| 112 | CONFIG_FREEZER=y | ||
| 113 | |||
| 114 | # | ||
| 115 | # Processor type and features | ||
| 116 | # | ||
| 117 | CONFIG_IA64=y | ||
| 118 | CONFIG_64BIT=y | ||
| 119 | CONFIG_ZONE_DMA=y | ||
| 120 | CONFIG_QUICKLIST=y | ||
| 121 | CONFIG_MMU=y | ||
| 122 | CONFIG_SWIOTLB=y | ||
| 123 | CONFIG_IOMMU_HELPER=y | ||
| 124 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 125 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | ||
| 126 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 127 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 128 | CONFIG_GENERIC_TIME=y | ||
| 129 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
| 130 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
| 131 | CONFIG_DMI=y | ||
| 132 | CONFIG_EFI=y | ||
| 133 | CONFIG_GENERIC_IOMAP=y | ||
| 134 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
| 135 | CONFIG_AUDIT_ARCH=y | ||
| 136 | CONFIG_PARAVIRT_GUEST=y | ||
| 137 | CONFIG_PARAVIRT=y | ||
| 138 | CONFIG_XEN=y | ||
| 139 | CONFIG_XEN_XENCOMM=y | ||
| 140 | CONFIG_NO_IDLE_HZ=y | ||
| 141 | # CONFIG_IA64_GENERIC is not set | ||
| 142 | # CONFIG_IA64_DIG is not set | ||
| 143 | # CONFIG_IA64_DIG_VTD is not set | ||
| 144 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 145 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 146 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 147 | # CONFIG_IA64_SGI_UV is not set | ||
| 148 | # CONFIG_IA64_HP_SIM is not set | ||
| 149 | CONFIG_IA64_XEN_GUEST=y | ||
| 150 | # CONFIG_ITANIUM is not set | ||
| 151 | CONFIG_MCKINLEY=y | ||
| 152 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 153 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 154 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
| 155 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
| 156 | CONFIG_PGTABLE_3=y | ||
| 157 | # CONFIG_PGTABLE_4 is not set | ||
| 158 | CONFIG_HZ=250 | ||
| 159 | # CONFIG_HZ_100 is not set | ||
| 160 | CONFIG_HZ_250=y | ||
| 161 | # CONFIG_HZ_300 is not set | ||
| 162 | # CONFIG_HZ_1000 is not set | ||
| 163 | # CONFIG_SCHED_HRTICK is not set | ||
| 164 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 165 | CONFIG_IA64_CYCLONE=y | ||
| 166 | CONFIG_IOSAPIC=y | ||
| 167 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 168 | # CONFIG_VIRT_CPU_ACCOUNTING is not set | ||
| 169 | CONFIG_SMP=y | ||
| 170 | CONFIG_NR_CPUS=16 | ||
| 171 | CONFIG_HOTPLUG_CPU=y | ||
| 172 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 173 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
| 174 | # CONFIG_SCHED_SMT is not set | ||
| 175 | CONFIG_PERMIT_BSP_REMOVE=y | ||
| 176 | CONFIG_FORCE_CPEI_RETARGET=y | ||
| 177 | CONFIG_PREEMPT_NONE=y | ||
| 178 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 179 | # CONFIG_PREEMPT is not set | ||
| 180 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 181 | CONFIG_FLATMEM_MANUAL=y | ||
| 182 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 183 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 184 | CONFIG_FLATMEM=y | ||
| 185 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 186 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | ||
| 187 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 188 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 189 | CONFIG_MIGRATION=y | ||
| 190 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
| 191 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 192 | CONFIG_BOUNCE=y | ||
| 193 | CONFIG_NR_QUICK=1 | ||
| 194 | CONFIG_VIRT_TO_BUS=y | ||
| 195 | CONFIG_UNEVICTABLE_LRU=y | ||
| 196 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 197 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 198 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 199 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 200 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 201 | CONFIG_VIRTUAL_MEM_MAP=y | ||
| 202 | CONFIG_HOLES_IN_ZONE=y | ||
| 203 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 204 | CONFIG_PERFMON=y | ||
| 205 | CONFIG_IA64_PALINFO=y | ||
| 206 | # CONFIG_IA64_MC_ERR_INJECT is not set | ||
| 207 | # CONFIG_IA64_ESI is not set | ||
| 208 | # CONFIG_IA64_HP_AML_NFW is not set | ||
| 209 | CONFIG_KEXEC=y | ||
| 210 | # CONFIG_CRASH_DUMP is not set | ||
| 211 | |||
| 212 | # | ||
| 213 | # Firmware Drivers | ||
| 214 | # | ||
| 215 | # CONFIG_FIRMWARE_MEMMAP is not set | ||
| 216 | CONFIG_EFI_VARS=y | ||
| 217 | CONFIG_EFI_PCDP=y | ||
| 218 | CONFIG_DMIID=y | ||
| 219 | CONFIG_BINFMT_ELF=y | ||
| 220 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 221 | # CONFIG_HAVE_AOUT is not set | ||
| 222 | CONFIG_BINFMT_MISC=m | ||
| 223 | |||
| 224 | # | ||
| 225 | # Power management and ACPI options | ||
| 226 | # | ||
| 227 | CONFIG_PM=y | ||
| 228 | # CONFIG_PM_DEBUG is not set | ||
| 229 | CONFIG_PM_SLEEP=y | ||
| 230 | CONFIG_SUSPEND=y | ||
| 231 | CONFIG_SUSPEND_FREEZER=y | ||
| 232 | CONFIG_ACPI=y | ||
| 233 | CONFIG_ACPI_SLEEP=y | ||
| 234 | CONFIG_ACPI_PROCFS=y | ||
| 235 | CONFIG_ACPI_PROCFS_POWER=y | ||
| 236 | CONFIG_ACPI_SYSFS_POWER=y | ||
| 237 | CONFIG_ACPI_PROC_EVENT=y | ||
| 238 | CONFIG_ACPI_BUTTON=m | 1 | CONFIG_ACPI_BUTTON=m |
| 2 | CONFIG_ACPI_CONTAINER=m | ||
| 239 | CONFIG_ACPI_FAN=m | 3 | CONFIG_ACPI_FAN=m |
| 240 | # CONFIG_ACPI_DOCK is not set | ||
| 241 | CONFIG_ACPI_PROCESSOR=m | 4 | CONFIG_ACPI_PROCESSOR=m |
| 242 | CONFIG_ACPI_HOTPLUG_CPU=y | 5 | CONFIG_ACPI_PROCFS=y |
| 243 | CONFIG_ACPI_THERMAL=m | 6 | CONFIG_AGP=m |
| 244 | # CONFIG_ACPI_CUSTOM_DSDT is not set | ||
| 245 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
| 246 | # CONFIG_ACPI_DEBUG is not set | ||
| 247 | # CONFIG_ACPI_PCI_SLOT is not set | ||
| 248 | CONFIG_ACPI_SYSTEM=y | ||
| 249 | CONFIG_ACPI_CONTAINER=m | ||
| 250 | |||
| 251 | # | ||
| 252 | # CPU Frequency scaling | ||
| 253 | # | ||
| 254 | # CONFIG_CPU_FREQ is not set | ||
| 255 | |||
| 256 | # | ||
| 257 | # Bus options (PCI, PCMCIA) | ||
| 258 | # | ||
| 259 | CONFIG_PCI=y | ||
| 260 | CONFIG_PCI_DOMAINS=y | ||
| 261 | CONFIG_PCI_SYSCALL=y | ||
| 262 | # CONFIG_PCIEPORTBUS is not set | ||
| 263 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
| 264 | # CONFIG_PCI_MSI is not set | ||
| 265 | CONFIG_PCI_LEGACY=y | ||
| 266 | # CONFIG_PCI_DEBUG is not set | ||
| 267 | # CONFIG_PCI_STUB is not set | ||
| 268 | CONFIG_HOTPLUG_PCI=m | ||
| 269 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 270 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
| 271 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 272 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 273 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 274 | # CONFIG_PCCARD is not set | ||
| 275 | CONFIG_NET=y | ||
| 276 | |||
| 277 | # | ||
| 278 | # Networking options | ||
| 279 | # | ||
| 280 | # CONFIG_NET_NS is not set | ||
| 281 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
| 282 | CONFIG_PACKET=y | ||
| 283 | # CONFIG_PACKET_MMAP is not set | ||
| 284 | CONFIG_UNIX=y | ||
| 285 | CONFIG_XFRM=y | ||
| 286 | # CONFIG_XFRM_USER is not set | ||
| 287 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 288 | # CONFIG_XFRM_MIGRATE is not set | ||
| 289 | # CONFIG_XFRM_STATISTICS is not set | ||
| 290 | # CONFIG_NET_KEY is not set | ||
| 291 | CONFIG_INET=y | ||
| 292 | CONFIG_IP_MULTICAST=y | ||
| 293 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 294 | CONFIG_IP_FIB_HASH=y | ||
| 295 | # CONFIG_IP_PNP is not set | ||
| 296 | # CONFIG_NET_IPIP is not set | ||
| 297 | # CONFIG_NET_IPGRE is not set | ||
| 298 | # CONFIG_IP_MROUTE is not set | ||
| 299 | CONFIG_ARPD=y | 7 | CONFIG_ARPD=y |
| 300 | CONFIG_SYN_COOKIES=y | 8 | CONFIG_AUTOFS4_FS=y |
| 301 | # CONFIG_INET_AH is not set | 9 | CONFIG_AUTOFS_FS=y |
| 302 | # CONFIG_INET_ESP is not set | 10 | CONFIG_BINFMT_MISC=m |
| 303 | # CONFIG_INET_IPCOMP is not set | 11 | # CONFIG_BLK_DEV_BSG is not set |
| 304 | # CONFIG_INET_XFRM_TUNNEL is not set | 12 | CONFIG_BLK_DEV_CMD64X=y |
| 305 | # CONFIG_INET_TUNNEL is not set | ||
| 306 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 307 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 308 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 309 | # CONFIG_INET_LRO is not set | ||
| 310 | CONFIG_INET_DIAG=y | ||
| 311 | CONFIG_INET_TCP_DIAG=y | ||
| 312 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 313 | CONFIG_TCP_CONG_CUBIC=y | ||
| 314 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 315 | # CONFIG_TCP_MD5SIG is not set | ||
| 316 | # CONFIG_IPV6 is not set | ||
| 317 | # CONFIG_NETWORK_SECMARK is not set | ||
| 318 | # CONFIG_NETFILTER is not set | ||
| 319 | # CONFIG_IP_DCCP is not set | ||
| 320 | # CONFIG_IP_SCTP is not set | ||
| 321 | # CONFIG_TIPC is not set | ||
| 322 | # CONFIG_ATM is not set | ||
| 323 | # CONFIG_BRIDGE is not set | ||
| 324 | # CONFIG_NET_DSA is not set | ||
| 325 | # CONFIG_VLAN_8021Q is not set | ||
| 326 | # CONFIG_DECNET is not set | ||
| 327 | # CONFIG_LLC2 is not set | ||
| 328 | # CONFIG_IPX is not set | ||
| 329 | # CONFIG_ATALK is not set | ||
| 330 | # CONFIG_X25 is not set | ||
| 331 | # CONFIG_LAPB is not set | ||
| 332 | # CONFIG_ECONET is not set | ||
| 333 | # CONFIG_WAN_ROUTER is not set | ||
| 334 | # CONFIG_NET_SCHED is not set | ||
| 335 | # CONFIG_DCB is not set | ||
| 336 | |||
| 337 | # | ||
| 338 | # Network testing | ||
| 339 | # | ||
| 340 | # CONFIG_NET_PKTGEN is not set | ||
| 341 | # CONFIG_HAMRADIO is not set | ||
| 342 | # CONFIG_CAN is not set | ||
| 343 | # CONFIG_IRDA is not set | ||
| 344 | # CONFIG_BT is not set | ||
| 345 | # CONFIG_AF_RXRPC is not set | ||
| 346 | # CONFIG_PHONET is not set | ||
| 347 | # CONFIG_WIRELESS is not set | ||
| 348 | # CONFIG_WIMAX is not set | ||
| 349 | # CONFIG_RFKILL is not set | ||
| 350 | # CONFIG_NET_9P is not set | ||
| 351 | |||
| 352 | # | ||
| 353 | # Device Drivers | ||
| 354 | # | ||
| 355 | |||
| 356 | # | ||
| 357 | # Generic Driver Options | ||
| 358 | # | ||
| 359 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 360 | CONFIG_STANDALONE=y | ||
| 361 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 362 | CONFIG_FW_LOADER=y | ||
| 363 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 364 | CONFIG_EXTRA_FIRMWARE="" | ||
| 365 | # CONFIG_DEBUG_DRIVER is not set | ||
| 366 | # CONFIG_DEBUG_DEVRES is not set | ||
| 367 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 368 | # CONFIG_CONNECTOR is not set | ||
| 369 | # CONFIG_MTD is not set | ||
| 370 | # CONFIG_PARPORT is not set | ||
| 371 | CONFIG_PNP=y | ||
| 372 | CONFIG_PNP_DEBUG_MESSAGES=y | ||
| 373 | |||
| 374 | # | ||
| 375 | # Protocols | ||
| 376 | # | ||
| 377 | CONFIG_PNPACPI=y | ||
| 378 | CONFIG_BLK_DEV=y | ||
| 379 | # CONFIG_BLK_CPQ_DA is not set | ||
| 380 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 381 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 382 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 383 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 384 | CONFIG_BLK_DEV_LOOP=m | ||
| 385 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 13 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
| 386 | CONFIG_BLK_DEV_NBD=m | 14 | CONFIG_BLK_DEV_DM=m |
| 387 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 388 | # CONFIG_BLK_DEV_UB is not set | ||
| 389 | CONFIG_BLK_DEV_RAM=y | ||
| 390 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 391 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 392 | # CONFIG_BLK_DEV_XIP is not set | ||
| 393 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 394 | # CONFIG_ATA_OVER_ETH is not set | ||
| 395 | CONFIG_XEN_BLKDEV_FRONTEND=y | ||
| 396 | # CONFIG_BLK_DEV_HD is not set | ||
| 397 | CONFIG_MISC_DEVICES=y | ||
| 398 | # CONFIG_PHANTOM is not set | ||
| 399 | # CONFIG_EEPROM_93CX6 is not set | ||
| 400 | # CONFIG_SGI_IOC4 is not set | ||
| 401 | # CONFIG_TIFM_CORE is not set | ||
| 402 | # CONFIG_ICS932S401 is not set | ||
| 403 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 404 | # CONFIG_HP_ILO is not set | ||
| 405 | # CONFIG_C2PORT is not set | ||
| 406 | CONFIG_HAVE_IDE=y | ||
| 407 | CONFIG_IDE=y | ||
| 408 | |||
| 409 | # | ||
| 410 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | ||
| 411 | # | ||
| 412 | CONFIG_IDE_TIMINGS=y | ||
| 413 | CONFIG_IDE_ATAPI=y | ||
| 414 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 415 | CONFIG_IDE_GD=y | ||
| 416 | CONFIG_IDE_GD_ATA=y | ||
| 417 | # CONFIG_IDE_GD_ATAPI is not set | ||
| 418 | CONFIG_BLK_DEV_IDECD=y | ||
| 419 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||
| 420 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 421 | # CONFIG_BLK_DEV_IDEACPI is not set | ||
| 422 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 423 | CONFIG_IDE_PROC_FS=y | ||
| 424 | |||
| 425 | # | ||
| 426 | # IDE chipset support/bugfixes | ||
| 427 | # | ||
| 428 | # CONFIG_IDE_GENERIC is not set | ||
| 429 | # CONFIG_BLK_DEV_PLATFORM is not set | ||
| 430 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 431 | CONFIG_BLK_DEV_IDEDMA_SFF=y | ||
| 432 | |||
| 433 | # | ||
| 434 | # PCI IDE chipsets support | ||
| 435 | # | ||
| 436 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 437 | CONFIG_IDEPCI_PCIBUS_ORDER=y | ||
| 438 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 439 | CONFIG_BLK_DEV_GENERIC=y | 15 | CONFIG_BLK_DEV_GENERIC=y |
| 440 | # CONFIG_BLK_DEV_OPTI621 is not set | 16 | CONFIG_BLK_DEV_IDECD=y |
| 441 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 17 | CONFIG_BLK_DEV_INITRD=y |
| 442 | # CONFIG_BLK_DEV_AEC62XX is not set | 18 | CONFIG_BLK_DEV_LOOP=m |
| 443 | # CONFIG_BLK_DEV_ALI15X3 is not set | 19 | CONFIG_BLK_DEV_MD=m |
| 444 | # CONFIG_BLK_DEV_AMD74XX is not set | 20 | CONFIG_BLK_DEV_NBD=m |
| 445 | CONFIG_BLK_DEV_CMD64X=y | ||
| 446 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 447 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 448 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 449 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 450 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 451 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 452 | CONFIG_BLK_DEV_PIIX=y | 21 | CONFIG_BLK_DEV_PIIX=y |
| 453 | # CONFIG_BLK_DEV_IT8172 is not set | 22 | CONFIG_BLK_DEV_RAM=y |
| 454 | # CONFIG_BLK_DEV_IT8213 is not set | ||
| 455 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 456 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 457 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 458 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 459 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 460 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 461 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 462 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 463 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 464 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 465 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 466 | |||
| 467 | # | ||
| 468 | # SCSI device support | ||
| 469 | # | ||
| 470 | # CONFIG_RAID_ATTRS is not set | ||
| 471 | CONFIG_SCSI=y | ||
| 472 | CONFIG_SCSI_DMA=y | ||
| 473 | # CONFIG_SCSI_TGT is not set | ||
| 474 | CONFIG_SCSI_NETLINK=y | ||
| 475 | CONFIG_SCSI_PROC_FS=y | ||
| 476 | |||
| 477 | # | ||
| 478 | # SCSI support type (disk, tape, CD-ROM) | ||
| 479 | # | ||
| 480 | CONFIG_BLK_DEV_SD=y | 23 | CONFIG_BLK_DEV_SD=y |
| 481 | CONFIG_CHR_DEV_ST=m | ||
| 482 | # CONFIG_CHR_DEV_OSST is not set | ||
| 483 | CONFIG_BLK_DEV_SR=m | 24 | CONFIG_BLK_DEV_SR=m |
| 484 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
| 485 | CONFIG_CHR_DEV_SG=m | 25 | CONFIG_CHR_DEV_SG=m |
| 486 | # CONFIG_CHR_DEV_SCH is not set | 26 | CONFIG_CHR_DEV_ST=m |
| 487 | 27 | CONFIG_CIFS=m | |
| 488 | # | 28 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
| 489 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 29 | CONFIG_CRYPTO_ECB=m |
| 490 | # | 30 | CONFIG_CRYPTO_MD5=y |
| 491 | # CONFIG_SCSI_MULTI_LUN is not set | 31 | CONFIG_CRYPTO_PCBC=m |
| 492 | # CONFIG_SCSI_CONSTANTS is not set | 32 | CONFIG_DEBUG_KERNEL=y |
| 493 | # CONFIG_SCSI_LOGGING is not set | 33 | CONFIG_DEBUG_MUTEXES=y |
| 494 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 495 | CONFIG_SCSI_WAIT_SCAN=m | ||
| 496 | |||
| 497 | # | ||
| 498 | # SCSI Transports | ||
| 499 | # | ||
| 500 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 501 | CONFIG_SCSI_FC_ATTRS=y | ||
| 502 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 503 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 504 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 505 | CONFIG_SCSI_LOWLEVEL=y | ||
| 506 | # CONFIG_ISCSI_TCP is not set | ||
| 507 | # CONFIG_SCSI_CXGB3_ISCSI is not set | ||
| 508 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 509 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 510 | # CONFIG_SCSI_ACARD is not set | ||
| 511 | # CONFIG_SCSI_AACRAID is not set | ||
| 512 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 513 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 514 | # CONFIG_SCSI_AIC79XX is not set | ||
| 515 | # CONFIG_SCSI_AIC94XX is not set | ||
| 516 | # CONFIG_SCSI_DPT_I2O is not set | ||
| 517 | # CONFIG_SCSI_ADVANSYS is not set | ||
| 518 | # CONFIG_SCSI_ARCMSR is not set | ||
| 519 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 520 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 521 | # CONFIG_MEGARAID_SAS is not set | ||
| 522 | # CONFIG_SCSI_HPTIOP is not set | ||
| 523 | # CONFIG_LIBFC is not set | ||
| 524 | # CONFIG_FCOE is not set | ||
| 525 | # CONFIG_SCSI_DMX3191D is not set | ||
| 526 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 527 | # CONFIG_SCSI_IPS is not set | ||
| 528 | # CONFIG_SCSI_INITIO is not set | ||
| 529 | # CONFIG_SCSI_INIA100 is not set | ||
| 530 | # CONFIG_SCSI_MVSAS is not set | ||
| 531 | # CONFIG_SCSI_STEX is not set | ||
| 532 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 533 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 534 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 535 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 536 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
| 537 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 538 | # CONFIG_SCSI_QLA_FC is not set | ||
| 539 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 540 | # CONFIG_SCSI_LPFC is not set | ||
| 541 | # CONFIG_SCSI_DC395x is not set | ||
| 542 | # CONFIG_SCSI_DC390T is not set | ||
| 543 | # CONFIG_SCSI_DEBUG is not set | ||
| 544 | # CONFIG_SCSI_SRP is not set | ||
| 545 | # CONFIG_SCSI_DH is not set | ||
| 546 | # CONFIG_ATA is not set | ||
| 547 | CONFIG_MD=y | ||
| 548 | CONFIG_BLK_DEV_MD=m | ||
| 549 | CONFIG_MD_LINEAR=m | ||
| 550 | CONFIG_MD_RAID0=m | ||
| 551 | CONFIG_MD_RAID1=m | ||
| 552 | # CONFIG_MD_RAID10 is not set | ||
| 553 | # CONFIG_MD_RAID456 is not set | ||
| 554 | CONFIG_MD_MULTIPATH=m | ||
| 555 | # CONFIG_MD_FAULTY is not set | ||
| 556 | CONFIG_BLK_DEV_DM=m | ||
| 557 | # CONFIG_DM_DEBUG is not set | ||
| 558 | CONFIG_DM_CRYPT=m | 34 | CONFIG_DM_CRYPT=m |
| 559 | CONFIG_DM_SNAPSHOT=m | ||
| 560 | CONFIG_DM_MIRROR=m | 35 | CONFIG_DM_MIRROR=m |
| 36 | CONFIG_DM_SNAPSHOT=m | ||
| 561 | CONFIG_DM_ZERO=m | 37 | CONFIG_DM_ZERO=m |
| 562 | # CONFIG_DM_MULTIPATH is not set | ||
| 563 | # CONFIG_DM_DELAY is not set | ||
| 564 | # CONFIG_DM_UEVENT is not set | ||
| 565 | CONFIG_FUSION=y | ||
| 566 | CONFIG_FUSION_SPI=y | ||
| 567 | CONFIG_FUSION_FC=y | ||
| 568 | # CONFIG_FUSION_SAS is not set | ||
| 569 | CONFIG_FUSION_MAX_SGE=128 | ||
| 570 | CONFIG_FUSION_CTL=y | ||
| 571 | # CONFIG_FUSION_LOGGING is not set | ||
| 572 | |||
| 573 | # | ||
| 574 | # IEEE 1394 (FireWire) support | ||
| 575 | # | ||
| 576 | |||
| 577 | # | ||
| 578 | # Enable only one of the two stacks, unless you know what you are doing | ||
| 579 | # | ||
| 580 | # CONFIG_FIREWIRE is not set | ||
| 581 | # CONFIG_IEEE1394 is not set | ||
| 582 | # CONFIG_I2O is not set | ||
| 583 | CONFIG_NETDEVICES=y | ||
| 584 | CONFIG_DUMMY=m | ||
| 585 | # CONFIG_BONDING is not set | ||
| 586 | # CONFIG_MACVLAN is not set | ||
| 587 | # CONFIG_EQUALIZER is not set | ||
| 588 | # CONFIG_TUN is not set | ||
| 589 | # CONFIG_VETH is not set | ||
| 590 | # CONFIG_NET_SB1000 is not set | ||
| 591 | # CONFIG_ARCNET is not set | ||
| 592 | CONFIG_PHYLIB=y | ||
| 593 | |||
| 594 | # | ||
| 595 | # MII PHY device drivers | ||
| 596 | # | ||
| 597 | # CONFIG_MARVELL_PHY is not set | ||
| 598 | # CONFIG_DAVICOM_PHY is not set | ||
| 599 | # CONFIG_QSEMI_PHY is not set | ||
| 600 | # CONFIG_LXT_PHY is not set | ||
| 601 | # CONFIG_CICADA_PHY is not set | ||
| 602 | # CONFIG_VITESSE_PHY is not set | ||
| 603 | # CONFIG_SMSC_PHY is not set | ||
| 604 | # CONFIG_BROADCOM_PHY is not set | ||
| 605 | # CONFIG_ICPLUS_PHY is not set | ||
| 606 | # CONFIG_REALTEK_PHY is not set | ||
| 607 | # CONFIG_NATIONAL_PHY is not set | ||
| 608 | # CONFIG_STE10XP is not set | ||
| 609 | # CONFIG_LSI_ET1011C_PHY is not set | ||
| 610 | # CONFIG_FIXED_PHY is not set | ||
| 611 | # CONFIG_MDIO_BITBANG is not set | ||
| 612 | CONFIG_NET_ETHERNET=y | ||
| 613 | CONFIG_MII=m | ||
| 614 | # CONFIG_HAPPYMEAL is not set | ||
| 615 | # CONFIG_SUNGEM is not set | ||
| 616 | # CONFIG_CASSINI is not set | ||
| 617 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 618 | CONFIG_NET_TULIP=y | ||
| 619 | # CONFIG_DE2104X is not set | ||
| 620 | CONFIG_TULIP=m | ||
| 621 | # CONFIG_TULIP_MWI is not set | ||
| 622 | # CONFIG_TULIP_MMIO is not set | ||
| 623 | # CONFIG_TULIP_NAPI is not set | ||
| 624 | # CONFIG_DE4X5 is not set | ||
| 625 | # CONFIG_WINBOND_840 is not set | ||
| 626 | # CONFIG_DM9102 is not set | ||
| 627 | # CONFIG_ULI526X is not set | ||
| 628 | # CONFIG_HP100 is not set | ||
| 629 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 630 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 631 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 632 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 633 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 634 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 635 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 636 | CONFIG_NET_PCI=y | ||
| 637 | # CONFIG_PCNET32 is not set | ||
| 638 | # CONFIG_AMD8111_ETH is not set | ||
| 639 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 640 | # CONFIG_B44 is not set | ||
| 641 | # CONFIG_FORCEDETH is not set | ||
| 642 | CONFIG_E100=m | ||
| 643 | # CONFIG_FEALNX is not set | ||
| 644 | # CONFIG_NATSEMI is not set | ||
| 645 | # CONFIG_NE2K_PCI is not set | ||
| 646 | # CONFIG_8139CP is not set | ||
| 647 | # CONFIG_8139TOO is not set | ||
| 648 | # CONFIG_R6040 is not set | ||
| 649 | # CONFIG_SIS900 is not set | ||
| 650 | # CONFIG_EPIC100 is not set | ||
| 651 | # CONFIG_SMSC9420 is not set | ||
| 652 | # CONFIG_SUNDANCE is not set | ||
| 653 | # CONFIG_TLAN is not set | ||
| 654 | # CONFIG_VIA_RHINE is not set | ||
| 655 | # CONFIG_SC92031 is not set | ||
| 656 | # CONFIG_ATL2 is not set | ||
| 657 | CONFIG_NETDEV_1000=y | ||
| 658 | # CONFIG_ACENIC is not set | ||
| 659 | # CONFIG_DL2K is not set | ||
| 660 | CONFIG_E1000=y | ||
| 661 | # CONFIG_E1000E is not set | ||
| 662 | # CONFIG_IP1000 is not set | ||
| 663 | # CONFIG_IGB is not set | ||
| 664 | # CONFIG_NS83820 is not set | ||
| 665 | # CONFIG_HAMACHI is not set | ||
| 666 | # CONFIG_YELLOWFIN is not set | ||
| 667 | # CONFIG_R8169 is not set | ||
| 668 | # CONFIG_SIS190 is not set | ||
| 669 | # CONFIG_SKGE is not set | ||
| 670 | # CONFIG_SKY2 is not set | ||
| 671 | # CONFIG_VIA_VELOCITY is not set | ||
| 672 | CONFIG_TIGON3=y | ||
| 673 | # CONFIG_BNX2 is not set | ||
| 674 | # CONFIG_QLA3XXX is not set | ||
| 675 | # CONFIG_ATL1 is not set | ||
| 676 | # CONFIG_ATL1E is not set | ||
| 677 | # CONFIG_JME is not set | ||
| 678 | CONFIG_NETDEV_10000=y | ||
| 679 | # CONFIG_CHELSIO_T1 is not set | ||
| 680 | CONFIG_CHELSIO_T3_DEPENDS=y | ||
| 681 | # CONFIG_CHELSIO_T3 is not set | ||
| 682 | # CONFIG_ENIC is not set | ||
| 683 | # CONFIG_IXGBE is not set | ||
| 684 | # CONFIG_IXGB is not set | ||
| 685 | # CONFIG_S2IO is not set | ||
| 686 | # CONFIG_MYRI10GE is not set | ||
| 687 | # CONFIG_NETXEN_NIC is not set | ||
| 688 | # CONFIG_NIU is not set | ||
| 689 | # CONFIG_MLX4_EN is not set | ||
| 690 | # CONFIG_MLX4_CORE is not set | ||
| 691 | # CONFIG_TEHUTI is not set | ||
| 692 | # CONFIG_BNX2X is not set | ||
| 693 | # CONFIG_QLGE is not set | ||
| 694 | # CONFIG_SFC is not set | ||
| 695 | # CONFIG_TR is not set | ||
| 696 | |||
| 697 | # | ||
| 698 | # Wireless LAN | ||
| 699 | # | ||
| 700 | # CONFIG_WLAN_PRE80211 is not set | ||
| 701 | # CONFIG_WLAN_80211 is not set | ||
| 702 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 703 | |||
| 704 | # | ||
| 705 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
| 706 | # | ||
| 707 | |||
| 708 | # | ||
| 709 | # USB Network Adapters | ||
| 710 | # | ||
| 711 | # CONFIG_USB_CATC is not set | ||
| 712 | # CONFIG_USB_KAWETH is not set | ||
| 713 | # CONFIG_USB_PEGASUS is not set | ||
| 714 | # CONFIG_USB_RTL8150 is not set | ||
| 715 | # CONFIG_USB_USBNET is not set | ||
| 716 | # CONFIG_WAN is not set | ||
| 717 | CONFIG_XEN_NETDEV_FRONTEND=y | ||
| 718 | # CONFIG_FDDI is not set | ||
| 719 | # CONFIG_HIPPI is not set | ||
| 720 | # CONFIG_PPP is not set | ||
| 721 | # CONFIG_SLIP is not set | ||
| 722 | # CONFIG_NET_FC is not set | ||
| 723 | CONFIG_NETCONSOLE=y | ||
| 724 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
| 725 | CONFIG_NETPOLL=y | ||
| 726 | # CONFIG_NETPOLL_TRAP is not set | ||
| 727 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 728 | # CONFIG_ISDN is not set | ||
| 729 | # CONFIG_PHONE is not set | ||
| 730 | |||
| 731 | # | ||
| 732 | # Input device support | ||
| 733 | # | ||
| 734 | CONFIG_INPUT=y | ||
| 735 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 736 | # CONFIG_INPUT_POLLDEV is not set | ||
| 737 | |||
| 738 | # | ||
| 739 | # Userland interfaces | ||
| 740 | # | ||
| 741 | CONFIG_INPUT_MOUSEDEV=y | ||
| 742 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 743 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 744 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 745 | # CONFIG_INPUT_JOYDEV is not set | ||
| 746 | # CONFIG_INPUT_EVDEV is not set | ||
| 747 | # CONFIG_INPUT_EVBUG is not set | ||
| 748 | |||
| 749 | # | ||
| 750 | # Input Device Drivers | ||
| 751 | # | ||
| 752 | CONFIG_INPUT_KEYBOARD=y | ||
| 753 | CONFIG_KEYBOARD_ATKBD=y | ||
| 754 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 755 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 756 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 757 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 758 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 759 | CONFIG_INPUT_MOUSE=y | ||
| 760 | CONFIG_MOUSE_PS2=y | ||
| 761 | CONFIG_MOUSE_PS2_ALPS=y | ||
| 762 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
| 763 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
| 764 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
| 765 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
| 766 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
| 767 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
| 768 | # CONFIG_MOUSE_SERIAL is not set | ||
| 769 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
| 770 | # CONFIG_MOUSE_BCM5974 is not set | ||
| 771 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 772 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 773 | # CONFIG_INPUT_TABLET is not set | ||
| 774 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 775 | # CONFIG_INPUT_MISC is not set | ||
| 776 | |||
| 777 | # | ||
| 778 | # Hardware I/O ports | ||
| 779 | # | ||
| 780 | CONFIG_SERIO=y | ||
| 781 | CONFIG_SERIO_I8042=y | ||
| 782 | # CONFIG_SERIO_SERPORT is not set | ||
| 783 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 784 | CONFIG_SERIO_LIBPS2=y | ||
| 785 | # CONFIG_SERIO_RAW is not set | ||
| 786 | CONFIG_GAMEPORT=m | ||
| 787 | # CONFIG_GAMEPORT_NS558 is not set | ||
| 788 | # CONFIG_GAMEPORT_L4 is not set | ||
| 789 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
| 790 | # CONFIG_GAMEPORT_FM801 is not set | ||
| 791 | |||
| 792 | # | ||
| 793 | # Character devices | ||
| 794 | # | ||
| 795 | CONFIG_VT=y | ||
| 796 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 797 | CONFIG_VT_CONSOLE=y | ||
| 798 | CONFIG_HW_CONSOLE=y | ||
| 799 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 800 | CONFIG_DEVKMEM=y | ||
| 801 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 802 | # CONFIG_COMPUTONE is not set | ||
| 803 | # CONFIG_ROCKETPORT is not set | ||
| 804 | # CONFIG_CYCLADES is not set | ||
| 805 | # CONFIG_DIGIEPCA is not set | ||
| 806 | # CONFIG_MOXA_INTELLIO is not set | ||
| 807 | # CONFIG_MOXA_SMARTIO is not set | ||
| 808 | # CONFIG_ISI is not set | ||
| 809 | # CONFIG_SYNCLINKMP is not set | ||
| 810 | # CONFIG_SYNCLINK_GT is not set | ||
| 811 | # CONFIG_N_HDLC is not set | ||
| 812 | # CONFIG_RISCOM8 is not set | ||
| 813 | # CONFIG_SPECIALIX is not set | ||
| 814 | # CONFIG_SX is not set | ||
| 815 | # CONFIG_RIO is not set | ||
| 816 | # CONFIG_STALDRV is not set | ||
| 817 | # CONFIG_NOZOMI is not set | ||
| 818 | |||
| 819 | # | ||
| 820 | # Serial drivers | ||
| 821 | # | ||
| 822 | CONFIG_SERIAL_8250=y | ||
| 823 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 824 | CONFIG_SERIAL_8250_PCI=y | ||
| 825 | CONFIG_SERIAL_8250_PNP=y | ||
| 826 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 827 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 828 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 829 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 830 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 831 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 832 | |||
| 833 | # | ||
| 834 | # Non-8250 serial port support | ||
| 835 | # | ||
| 836 | CONFIG_SERIAL_CORE=y | ||
| 837 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 838 | # CONFIG_SERIAL_JSM is not set | ||
| 839 | CONFIG_UNIX98_PTYS=y | ||
| 840 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 841 | CONFIG_LEGACY_PTYS=y | ||
| 842 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 843 | CONFIG_HVC_DRIVER=y | ||
| 844 | CONFIG_HVC_IRQ=y | ||
| 845 | CONFIG_HVC_XEN=y | ||
| 846 | # CONFIG_IPMI_HANDLER is not set | ||
| 847 | # CONFIG_HW_RANDOM is not set | ||
| 848 | CONFIG_EFI_RTC=y | ||
| 849 | # CONFIG_R3964 is not set | ||
| 850 | # CONFIG_APPLICOM is not set | ||
| 851 | CONFIG_RAW_DRIVER=m | ||
| 852 | CONFIG_MAX_RAW_DEVS=256 | ||
| 853 | CONFIG_HPET=y | ||
| 854 | CONFIG_HPET_MMAP=y | ||
| 855 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 856 | # CONFIG_TCG_TPM is not set | ||
| 857 | CONFIG_DEVPORT=y | ||
| 858 | CONFIG_I2C=m | ||
| 859 | CONFIG_I2C_BOARDINFO=y | ||
| 860 | # CONFIG_I2C_CHARDEV is not set | ||
| 861 | CONFIG_I2C_HELPER_AUTO=y | ||
| 862 | CONFIG_I2C_ALGOBIT=m | ||
| 863 | |||
| 864 | # | ||
| 865 | # I2C Hardware Bus support | ||
| 866 | # | ||
| 867 | |||
| 868 | # | ||
| 869 | # PC SMBus host controller drivers | ||
| 870 | # | ||
| 871 | # CONFIG_I2C_ALI1535 is not set | ||
| 872 | # CONFIG_I2C_ALI1563 is not set | ||
| 873 | # CONFIG_I2C_ALI15X3 is not set | ||
| 874 | # CONFIG_I2C_AMD756 is not set | ||
| 875 | # CONFIG_I2C_AMD8111 is not set | ||
| 876 | # CONFIG_I2C_I801 is not set | ||
| 877 | # CONFIG_I2C_ISCH is not set | ||
| 878 | # CONFIG_I2C_PIIX4 is not set | ||
| 879 | # CONFIG_I2C_NFORCE2 is not set | ||
| 880 | # CONFIG_I2C_SIS5595 is not set | ||
| 881 | # CONFIG_I2C_SIS630 is not set | ||
| 882 | # CONFIG_I2C_SIS96X is not set | ||
| 883 | # CONFIG_I2C_VIA is not set | ||
| 884 | # CONFIG_I2C_VIAPRO is not set | ||
| 885 | |||
| 886 | # | ||
| 887 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
| 888 | # | ||
| 889 | # CONFIG_I2C_OCORES is not set | ||
| 890 | # CONFIG_I2C_SIMTEC is not set | ||
| 891 | |||
| 892 | # | ||
| 893 | # External I2C/SMBus adapter drivers | ||
| 894 | # | ||
| 895 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 896 | # CONFIG_I2C_TAOS_EVM is not set | ||
| 897 | # CONFIG_I2C_TINY_USB is not set | ||
| 898 | |||
| 899 | # | ||
| 900 | # Graphics adapter I2C/DDC channel drivers | ||
| 901 | # | ||
| 902 | # CONFIG_I2C_VOODOO3 is not set | ||
| 903 | |||
| 904 | # | ||
| 905 | # Other I2C/SMBus bus drivers | ||
| 906 | # | ||
| 907 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 908 | # CONFIG_I2C_STUB is not set | ||
| 909 | |||
| 910 | # | ||
| 911 | # Miscellaneous I2C Chip support | ||
| 912 | # | ||
| 913 | # CONFIG_DS1682 is not set | ||
| 914 | # CONFIG_AT24 is not set | ||
| 915 | # CONFIG_SENSORS_EEPROM is not set | ||
| 916 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 917 | # CONFIG_PCF8575 is not set | ||
| 918 | # CONFIG_SENSORS_PCA9539 is not set | ||
| 919 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 920 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 921 | # CONFIG_SENSORS_TSL2550 is not set | ||
| 922 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 923 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 924 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 925 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 926 | # CONFIG_SPI is not set | ||
| 927 | # CONFIG_W1 is not set | ||
| 928 | CONFIG_POWER_SUPPLY=y | ||
| 929 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
| 930 | # CONFIG_PDA_POWER is not set | ||
| 931 | # CONFIG_BATTERY_DS2760 is not set | ||
| 932 | # CONFIG_BATTERY_BQ27x00 is not set | ||
| 933 | CONFIG_HWMON=y | ||
| 934 | # CONFIG_HWMON_VID is not set | ||
| 935 | # CONFIG_SENSORS_AD7414 is not set | ||
| 936 | # CONFIG_SENSORS_AD7418 is not set | ||
| 937 | # CONFIG_SENSORS_ADM1021 is not set | ||
| 938 | # CONFIG_SENSORS_ADM1025 is not set | ||
| 939 | # CONFIG_SENSORS_ADM1026 is not set | ||
| 940 | # CONFIG_SENSORS_ADM1029 is not set | ||
| 941 | # CONFIG_SENSORS_ADM1031 is not set | ||
| 942 | # CONFIG_SENSORS_ADM9240 is not set | ||
| 943 | # CONFIG_SENSORS_ADT7462 is not set | ||
| 944 | # CONFIG_SENSORS_ADT7470 is not set | ||
| 945 | # CONFIG_SENSORS_ADT7473 is not set | ||
| 946 | # CONFIG_SENSORS_ATXP1 is not set | ||
| 947 | # CONFIG_SENSORS_DS1621 is not set | ||
| 948 | # CONFIG_SENSORS_I5K_AMB is not set | ||
| 949 | # CONFIG_SENSORS_F71805F is not set | ||
| 950 | # CONFIG_SENSORS_F71882FG is not set | ||
| 951 | # CONFIG_SENSORS_F75375S is not set | ||
| 952 | # CONFIG_SENSORS_GL518SM is not set | ||
| 953 | # CONFIG_SENSORS_GL520SM is not set | ||
| 954 | # CONFIG_SENSORS_IT87 is not set | ||
| 955 | # CONFIG_SENSORS_LM63 is not set | ||
| 956 | # CONFIG_SENSORS_LM75 is not set | ||
| 957 | # CONFIG_SENSORS_LM77 is not set | ||
| 958 | # CONFIG_SENSORS_LM78 is not set | ||
| 959 | # CONFIG_SENSORS_LM80 is not set | ||
| 960 | # CONFIG_SENSORS_LM83 is not set | ||
| 961 | # CONFIG_SENSORS_LM85 is not set | ||
| 962 | # CONFIG_SENSORS_LM87 is not set | ||
| 963 | # CONFIG_SENSORS_LM90 is not set | ||
| 964 | # CONFIG_SENSORS_LM92 is not set | ||
| 965 | # CONFIG_SENSORS_LM93 is not set | ||
| 966 | # CONFIG_SENSORS_LTC4245 is not set | ||
| 967 | # CONFIG_SENSORS_MAX1619 is not set | ||
| 968 | # CONFIG_SENSORS_MAX6650 is not set | ||
| 969 | # CONFIG_SENSORS_PC87360 is not set | ||
| 970 | # CONFIG_SENSORS_PC87427 is not set | ||
| 971 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 972 | # CONFIG_SENSORS_DME1737 is not set | ||
| 973 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 974 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
| 975 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 976 | # CONFIG_SENSORS_ADS7828 is not set | ||
| 977 | # CONFIG_SENSORS_THMC50 is not set | ||
| 978 | # CONFIG_SENSORS_VIA686A is not set | ||
| 979 | # CONFIG_SENSORS_VT1211 is not set | ||
| 980 | # CONFIG_SENSORS_VT8231 is not set | ||
| 981 | # CONFIG_SENSORS_W83781D is not set | ||
| 982 | # CONFIG_SENSORS_W83791D is not set | ||
| 983 | # CONFIG_SENSORS_W83792D is not set | ||
| 984 | # CONFIG_SENSORS_W83793 is not set | ||
| 985 | # CONFIG_SENSORS_W83L785TS is not set | ||
| 986 | # CONFIG_SENSORS_W83L786NG is not set | ||
| 987 | # CONFIG_SENSORS_W83627HF is not set | ||
| 988 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 989 | # CONFIG_SENSORS_LIS3LV02D is not set | ||
| 990 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 991 | CONFIG_THERMAL=m | ||
| 992 | # CONFIG_THERMAL_HWMON is not set | ||
| 993 | # CONFIG_WATCHDOG is not set | ||
| 994 | CONFIG_SSB_POSSIBLE=y | ||
| 995 | |||
| 996 | # | ||
| 997 | # Sonics Silicon Backplane | ||
| 998 | # | ||
| 999 | # CONFIG_SSB is not set | ||
| 1000 | |||
| 1001 | # | ||
| 1002 | # Multifunction device drivers | ||
| 1003 | # | ||
| 1004 | # CONFIG_MFD_CORE is not set | ||
| 1005 | # CONFIG_MFD_SM501 is not set | ||
| 1006 | # CONFIG_HTC_PASIC3 is not set | ||
| 1007 | # CONFIG_MFD_TMIO is not set | ||
| 1008 | # CONFIG_MFD_WM8400 is not set | ||
| 1009 | # CONFIG_MFD_WM8350_I2C is not set | ||
| 1010 | # CONFIG_MFD_PCF50633 is not set | ||
| 1011 | # CONFIG_REGULATOR is not set | ||
| 1012 | |||
| 1013 | # | ||
| 1014 | # Multimedia devices | ||
| 1015 | # | ||
| 1016 | |||
| 1017 | # | ||
| 1018 | # Multimedia core support | ||
| 1019 | # | ||
| 1020 | # CONFIG_VIDEO_DEV is not set | ||
| 1021 | # CONFIG_DVB_CORE is not set | ||
| 1022 | # CONFIG_VIDEO_MEDIA is not set | ||
| 1023 | |||
| 1024 | # | ||
| 1025 | # Multimedia drivers | ||
| 1026 | # | ||
| 1027 | CONFIG_DAB=y | ||
| 1028 | # CONFIG_USB_DABUSB is not set | ||
| 1029 | |||
| 1030 | # | ||
| 1031 | # Graphics support | ||
| 1032 | # | ||
| 1033 | CONFIG_AGP=m | ||
| 1034 | CONFIG_DRM=m | 38 | CONFIG_DRM=m |
| 1035 | CONFIG_DRM_TDFX=m | 39 | CONFIG_DRM_MGA=m |
| 1036 | CONFIG_DRM_R128=m | 40 | CONFIG_DRM_R128=m |
| 1037 | CONFIG_DRM_RADEON=m | 41 | CONFIG_DRM_RADEON=m |
| 1038 | CONFIG_DRM_MGA=m | ||
| 1039 | CONFIG_DRM_SIS=m | 42 | CONFIG_DRM_SIS=m |
| 1040 | # CONFIG_DRM_VIA is not set | 43 | CONFIG_DRM_TDFX=m |
| 1041 | # CONFIG_DRM_SAVAGE is not set | 44 | CONFIG_DUMMY=m |
| 1042 | # CONFIG_VGASTATE is not set | 45 | CONFIG_E1000=y |
| 1043 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 46 | CONFIG_E100=m |
| 1044 | # CONFIG_FB is not set | 47 | CONFIG_EFI_PARTITION=y |
| 1045 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 48 | CONFIG_EFI_RTC=y |
| 1046 | 49 | CONFIG_EFI_VARS=y | |
| 1047 | # | 50 | CONFIG_EXPERIMENTAL=y |
| 1048 | # Display device support | 51 | CONFIG_EXT2_FS_POSIX_ACL=y |
| 1049 | # | 52 | CONFIG_EXT2_FS_SECURITY=y |
| 1050 | # CONFIG_DISPLAY_SUPPORT is not set | 53 | CONFIG_EXT2_FS_XATTR=y |
| 1051 | 54 | CONFIG_EXT2_FS=y | |
| 1052 | # | 55 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1053 | # Console display driver support | 56 | CONFIG_EXT3_FS_SECURITY=y |
| 1054 | # | 57 | CONFIG_EXT3_FS=y |
| 1055 | CONFIG_VGA_CONSOLE=y | 58 | CONFIG_FORCE_CPEI_RETARGET=y |
| 1056 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | 59 | CONFIG_FUSION_CTL=y |
| 1057 | CONFIG_DUMMY_CONSOLE=y | 60 | CONFIG_FUSION_FC=y |
| 1058 | # CONFIG_SOUND is not set | 61 | CONFIG_FUSION_SPI=y |
| 1059 | CONFIG_HID_SUPPORT=y | 62 | CONFIG_FUSION=y |
| 1060 | CONFIG_HID=y | 63 | CONFIG_GAMEPORT=m |
| 1061 | # CONFIG_HID_DEBUG is not set | ||
| 1062 | # CONFIG_HIDRAW is not set | ||
| 1063 | |||
| 1064 | # | ||
| 1065 | # USB Input Devices | ||
| 1066 | # | ||
| 1067 | CONFIG_USB_HID=y | ||
| 1068 | # CONFIG_HID_PID is not set | ||
| 1069 | # CONFIG_USB_HIDDEV is not set | ||
| 1070 | |||
| 1071 | # | ||
| 1072 | # Special HID drivers | ||
| 1073 | # | ||
| 1074 | CONFIG_HID_COMPAT=y | ||
| 1075 | CONFIG_HID_A4TECH=y | ||
| 1076 | CONFIG_HID_APPLE=y | ||
| 1077 | CONFIG_HID_BELKIN=y | ||
| 1078 | CONFIG_HID_CHERRY=y | ||
| 1079 | CONFIG_HID_CHICONY=y | ||
| 1080 | CONFIG_HID_CYPRESS=y | ||
| 1081 | CONFIG_HID_EZKEY=y | ||
| 1082 | CONFIG_HID_GYRATION=y | 64 | CONFIG_HID_GYRATION=y |
| 1083 | CONFIG_HID_LOGITECH=y | ||
| 1084 | # CONFIG_LOGITECH_FF is not set | ||
| 1085 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
| 1086 | CONFIG_HID_MICROSOFT=y | ||
| 1087 | CONFIG_HID_MONTEREY=y | ||
| 1088 | CONFIG_HID_NTRIG=y | 65 | CONFIG_HID_NTRIG=y |
| 1089 | CONFIG_HID_PANTHERLORD=y | 66 | CONFIG_HID_PANTHERLORD=y |
| 1090 | # CONFIG_PANTHERLORD_FF is not set | ||
| 1091 | CONFIG_HID_PETALYNX=y | 67 | CONFIG_HID_PETALYNX=y |
| 1092 | CONFIG_HID_SAMSUNG=y | 68 | CONFIG_HID_SAMSUNG=y |
| 1093 | CONFIG_HID_SONY=y | 69 | CONFIG_HID_SONY=y |
| 1094 | CONFIG_HID_SUNPLUS=y | 70 | CONFIG_HID_SUNPLUS=y |
| 1095 | # CONFIG_GREENASIA_FF is not set | ||
| 1096 | CONFIG_HID_TOPSEED=y | 71 | CONFIG_HID_TOPSEED=y |
| 1097 | # CONFIG_THRUSTMASTER_FF is not set | 72 | CONFIG_HOTPLUG_CPU=y |
| 1098 | # CONFIG_ZEROPLUS_FF is not set | 73 | CONFIG_HOTPLUG_PCI_ACPI=m |
| 1099 | CONFIG_USB_SUPPORT=y | 74 | CONFIG_HOTPLUG_PCI=m |
| 1100 | CONFIG_USB_ARCH_HAS_HCD=y | 75 | CONFIG_HPET=y |
| 1101 | CONFIG_USB_ARCH_HAS_OHCI=y | 76 | CONFIG_HUGETLBFS=y |
| 1102 | CONFIG_USB_ARCH_HAS_EHCI=y | 77 | # CONFIG_HW_RANDOM is not set |
| 1103 | CONFIG_USB=y | 78 | CONFIG_IA64_CYCLONE=y |
| 1104 | # CONFIG_USB_DEBUG is not set | 79 | CONFIG_IA64_GRANULE_16MB=y |
| 1105 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | 80 | CONFIG_IA64_MCA_RECOVERY=y |
| 1106 | 81 | CONFIG_IA64_PALINFO=y | |
| 1107 | # | 82 | CONFIG_IA64_XEN_GUEST=y |
| 1108 | # Miscellaneous USB options | 83 | CONFIG_IDE=y |
| 1109 | # | 84 | CONFIG_IKCONFIG_PROC=y |
| 1110 | CONFIG_USB_DEVICEFS=y | 85 | CONFIG_IKCONFIG=y |
| 1111 | CONFIG_USB_DEVICE_CLASS=y | 86 | # CONFIG_INET_LRO is not set |
| 1112 | # CONFIG_USB_DYNAMIC_MINORS is not set | 87 | CONFIG_INET=y |
| 1113 | # CONFIG_USB_SUSPEND is not set | ||
| 1114 | # CONFIG_USB_OTG is not set | ||
| 1115 | # CONFIG_USB_MON is not set | ||
| 1116 | # CONFIG_USB_WUSB is not set | ||
| 1117 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 1118 | |||
| 1119 | # | ||
| 1120 | # USB Host Controller Drivers | ||
| 1121 | # | ||
| 1122 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1123 | CONFIG_USB_EHCI_HCD=m | ||
| 1124 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 1125 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1126 | # CONFIG_USB_OXU210HP_HCD is not set | ||
| 1127 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1128 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1129 | CONFIG_USB_OHCI_HCD=m | ||
| 1130 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 1131 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 1132 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 1133 | CONFIG_USB_UHCI_HCD=y | ||
| 1134 | # CONFIG_USB_SL811_HCD is not set | ||
| 1135 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 1136 | # CONFIG_USB_WHCI_HCD is not set | ||
| 1137 | # CONFIG_USB_HWA_HCD is not set | ||
| 1138 | |||
| 1139 | # | ||
| 1140 | # USB Device Class drivers | ||
| 1141 | # | ||
| 1142 | # CONFIG_USB_ACM is not set | ||
| 1143 | # CONFIG_USB_PRINTER is not set | ||
| 1144 | # CONFIG_USB_WDM is not set | ||
| 1145 | # CONFIG_USB_TMC is not set | ||
| 1146 | |||
| 1147 | # | ||
| 1148 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; | ||
| 1149 | # | ||
| 1150 | |||
| 1151 | # | ||
| 1152 | # see USB_STORAGE Help for more information | ||
| 1153 | # | ||
| 1154 | CONFIG_USB_STORAGE=m | ||
| 1155 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1156 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1157 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1158 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1159 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1160 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1161 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1162 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1163 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1164 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 1165 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1166 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1167 | # CONFIG_USB_LIBUSUAL is not set | ||
| 1168 | |||
| 1169 | # | ||
| 1170 | # USB Imaging devices | ||
| 1171 | # | ||
| 1172 | # CONFIG_USB_MDC800 is not set | ||
| 1173 | # CONFIG_USB_MICROTEK is not set | ||
| 1174 | |||
| 1175 | # | ||
| 1176 | # USB port drivers | ||
| 1177 | # | ||
| 1178 | # CONFIG_USB_SERIAL is not set | ||
| 1179 | |||
| 1180 | # | ||
| 1181 | # USB Miscellaneous drivers | ||
| 1182 | # | ||
| 1183 | # CONFIG_USB_EMI62 is not set | ||
| 1184 | # CONFIG_USB_EMI26 is not set | ||
| 1185 | # CONFIG_USB_ADUTUX is not set | ||
| 1186 | # CONFIG_USB_SEVSEG is not set | ||
| 1187 | # CONFIG_USB_RIO500 is not set | ||
| 1188 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1189 | # CONFIG_USB_LCD is not set | ||
| 1190 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1191 | # CONFIG_USB_LED is not set | ||
| 1192 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1193 | # CONFIG_USB_CYTHERM is not set | ||
| 1194 | # CONFIG_USB_PHIDGET is not set | ||
| 1195 | # CONFIG_USB_IDMOUSE is not set | ||
| 1196 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1197 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1198 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1199 | # CONFIG_USB_LD is not set | ||
| 1200 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1201 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1202 | # CONFIG_USB_TEST is not set | ||
| 1203 | # CONFIG_USB_ISIGHTFW is not set | ||
| 1204 | # CONFIG_USB_VST is not set | ||
| 1205 | # CONFIG_USB_GADGET is not set | ||
| 1206 | |||
| 1207 | # | ||
| 1208 | # OTG and related infrastructure | ||
| 1209 | # | ||
| 1210 | # CONFIG_UWB is not set | ||
| 1211 | # CONFIG_MMC is not set | ||
| 1212 | # CONFIG_MEMSTICK is not set | ||
| 1213 | # CONFIG_NEW_LEDS is not set | ||
| 1214 | # CONFIG_ACCESSIBILITY is not set | ||
| 1215 | # CONFIG_INFINIBAND is not set | ||
| 1216 | # CONFIG_RTC_CLASS is not set | ||
| 1217 | # CONFIG_DMADEVICES is not set | ||
| 1218 | # CONFIG_UIO is not set | ||
| 1219 | CONFIG_XEN_BALLOON=y | ||
| 1220 | CONFIG_XEN_SCRUB_PAGES=y | ||
| 1221 | CONFIG_XENFS=y | ||
| 1222 | CONFIG_XEN_COMPAT_XENFS=y | ||
| 1223 | # CONFIG_STAGING is not set | ||
| 1224 | # CONFIG_MSPEC is not set | ||
| 1225 | |||
| 1226 | # | ||
| 1227 | # File systems | ||
| 1228 | # | ||
| 1229 | CONFIG_EXT2_FS=y | ||
| 1230 | CONFIG_EXT2_FS_XATTR=y | ||
| 1231 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
| 1232 | CONFIG_EXT2_FS_SECURITY=y | ||
| 1233 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1234 | CONFIG_EXT3_FS=y | ||
| 1235 | CONFIG_EXT3_FS_XATTR=y | ||
| 1236 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
| 1237 | CONFIG_EXT3_FS_SECURITY=y | ||
| 1238 | # CONFIG_EXT4_FS is not set | ||
| 1239 | CONFIG_JBD=y | ||
| 1240 | CONFIG_FS_MBCACHE=y | ||
| 1241 | CONFIG_REISERFS_FS=y | ||
| 1242 | # CONFIG_REISERFS_CHECK is not set | ||
| 1243 | # CONFIG_REISERFS_PROC_INFO is not set | ||
| 1244 | CONFIG_REISERFS_FS_XATTR=y | ||
| 1245 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
| 1246 | CONFIG_REISERFS_FS_SECURITY=y | ||
| 1247 | # CONFIG_JFS_FS is not set | ||
| 1248 | CONFIG_FS_POSIX_ACL=y | ||
| 1249 | CONFIG_FILE_LOCKING=y | ||
| 1250 | CONFIG_XFS_FS=y | ||
| 1251 | # CONFIG_XFS_QUOTA is not set | ||
| 1252 | # CONFIG_XFS_POSIX_ACL is not set | ||
| 1253 | # CONFIG_XFS_RT is not set | ||
| 1254 | # CONFIG_XFS_DEBUG is not set | ||
| 1255 | # CONFIG_GFS2_FS is not set | ||
| 1256 | # CONFIG_OCFS2_FS is not set | ||
| 1257 | # CONFIG_BTRFS_FS is not set | ||
| 1258 | CONFIG_DNOTIFY=y | ||
| 1259 | CONFIG_INOTIFY=y | 88 | CONFIG_INOTIFY=y |
| 1260 | CONFIG_INOTIFY_USER=y | 89 | CONFIG_IP_MULTICAST=y |
| 1261 | # CONFIG_QUOTA is not set | 90 | # CONFIG_IPV6 is not set |
| 1262 | CONFIG_AUTOFS_FS=y | ||
| 1263 | CONFIG_AUTOFS4_FS=y | ||
| 1264 | # CONFIG_FUSE_FS is not set | ||
| 1265 | |||
| 1266 | # | ||
| 1267 | # CD-ROM/DVD Filesystems | ||
| 1268 | # | ||
| 1269 | CONFIG_ISO9660_FS=m | 91 | CONFIG_ISO9660_FS=m |
| 1270 | CONFIG_JOLIET=y | 92 | CONFIG_JOLIET=y |
| 1271 | # CONFIG_ZISOFS is not set | 93 | CONFIG_KALLSYMS_ALL=y |
| 1272 | CONFIG_UDF_FS=m | 94 | CONFIG_KEXEC=y |
| 1273 | CONFIG_UDF_NLS=y | 95 | CONFIG_LOG_BUF_SHIFT=20 |
| 1274 | 96 | CONFIG_MAGIC_SYSRQ=y | |
| 1275 | # | 97 | CONFIG_MCKINLEY=y |
| 1276 | # DOS/FAT/NT Filesystems | 98 | CONFIG_MD_LINEAR=m |
| 1277 | # | 99 | CONFIG_MD_MULTIPATH=m |
| 1278 | CONFIG_FAT_FS=y | 100 | CONFIG_MD_RAID0=m |
| 1279 | # CONFIG_MSDOS_FS is not set | 101 | CONFIG_MD_RAID1=m |
| 1280 | CONFIG_VFAT_FS=y | 102 | CONFIG_MD=y |
| 1281 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 103 | CONFIG_MODULE_SRCVERSION_ALL=y |
| 1282 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 104 | CONFIG_MODULES=y |
| 1283 | CONFIG_NTFS_FS=m | 105 | CONFIG_MODULE_UNLOAD=y |
| 1284 | # CONFIG_NTFS_DEBUG is not set | 106 | CONFIG_MODVERSIONS=y |
| 1285 | # CONFIG_NTFS_RW is not set | 107 | CONFIG_NETCONSOLE=y |
| 1286 | 108 | CONFIG_NETDEVICES=y | |
| 1287 | # | 109 | CONFIG_NET_ETHERNET=y |
| 1288 | # Pseudo filesystems | 110 | CONFIG_NET_PCI=y |
| 1289 | # | 111 | CONFIG_NET_TULIP=y |
| 1290 | CONFIG_PROC_FS=y | 112 | CONFIG_NFSD=m |
| 1291 | CONFIG_PROC_KCORE=y | 113 | CONFIG_NFSD_V4=y |
| 1292 | CONFIG_PROC_SYSCTL=y | ||
| 1293 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 1294 | CONFIG_SYSFS=y | ||
| 1295 | CONFIG_TMPFS=y | ||
| 1296 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1297 | CONFIG_HUGETLBFS=y | ||
| 1298 | CONFIG_HUGETLB_PAGE=y | ||
| 1299 | # CONFIG_CONFIGFS_FS is not set | ||
| 1300 | CONFIG_MISC_FILESYSTEMS=y | ||
| 1301 | # CONFIG_ADFS_FS is not set | ||
| 1302 | # CONFIG_AFFS_FS is not set | ||
| 1303 | # CONFIG_HFS_FS is not set | ||
| 1304 | # CONFIG_HFSPLUS_FS is not set | ||
| 1305 | # CONFIG_BEFS_FS is not set | ||
| 1306 | # CONFIG_BFS_FS is not set | ||
| 1307 | # CONFIG_EFS_FS is not set | ||
| 1308 | # CONFIG_CRAMFS is not set | ||
| 1309 | # CONFIG_SQUASHFS is not set | ||
| 1310 | # CONFIG_VXFS_FS is not set | ||
| 1311 | # CONFIG_MINIX_FS is not set | ||
| 1312 | # CONFIG_OMFS_FS is not set | ||
| 1313 | # CONFIG_HPFS_FS is not set | ||
| 1314 | # CONFIG_QNX4FS_FS is not set | ||
| 1315 | # CONFIG_ROMFS_FS is not set | ||
| 1316 | # CONFIG_SYSV_FS is not set | ||
| 1317 | # CONFIG_UFS_FS is not set | ||
| 1318 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 1319 | CONFIG_NFS_FS=m | 114 | CONFIG_NFS_FS=m |
| 1320 | CONFIG_NFS_V3=y | 115 | CONFIG_NFS_V3=y |
| 1321 | # CONFIG_NFS_V3_ACL is not set | ||
| 1322 | CONFIG_NFS_V4=y | 116 | CONFIG_NFS_V4=y |
| 1323 | CONFIG_NFSD=m | 117 | CONFIG_NLS_CODEPAGE_1250=m |
| 1324 | CONFIG_NFSD_V3=y | 118 | CONFIG_NLS_CODEPAGE_1251=m |
| 1325 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1326 | CONFIG_NFSD_V4=y | ||
| 1327 | CONFIG_LOCKD=m | ||
| 1328 | CONFIG_LOCKD_V4=y | ||
| 1329 | CONFIG_EXPORTFS=m | ||
| 1330 | CONFIG_NFS_COMMON=y | ||
| 1331 | CONFIG_SUNRPC=m | ||
| 1332 | CONFIG_SUNRPC_GSS=m | ||
| 1333 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
| 1334 | CONFIG_RPCSEC_GSS_KRB5=m | ||
| 1335 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1336 | CONFIG_SMB_FS=m | ||
| 1337 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 1338 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
| 1339 | CONFIG_CIFS=m | ||
| 1340 | # CONFIG_CIFS_STATS is not set | ||
| 1341 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1342 | # CONFIG_CIFS_XATTR is not set | ||
| 1343 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1344 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1345 | # CONFIG_NCP_FS is not set | ||
| 1346 | # CONFIG_CODA_FS is not set | ||
| 1347 | # CONFIG_AFS_FS is not set | ||
| 1348 | |||
| 1349 | # | ||
| 1350 | # Partition Types | ||
| 1351 | # | ||
| 1352 | CONFIG_PARTITION_ADVANCED=y | ||
| 1353 | # CONFIG_ACORN_PARTITION is not set | ||
| 1354 | # CONFIG_OSF_PARTITION is not set | ||
| 1355 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1356 | # CONFIG_ATARI_PARTITION is not set | ||
| 1357 | # CONFIG_MAC_PARTITION is not set | ||
| 1358 | CONFIG_MSDOS_PARTITION=y | ||
| 1359 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1360 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1361 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1362 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1363 | # CONFIG_LDM_PARTITION is not set | ||
| 1364 | CONFIG_SGI_PARTITION=y | ||
| 1365 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1366 | # CONFIG_SUN_PARTITION is not set | ||
| 1367 | # CONFIG_KARMA_PARTITION is not set | ||
| 1368 | CONFIG_EFI_PARTITION=y | ||
| 1369 | # CONFIG_SYSV68_PARTITION is not set | ||
| 1370 | CONFIG_NLS=y | ||
| 1371 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1372 | CONFIG_NLS_CODEPAGE_437=y | 119 | CONFIG_NLS_CODEPAGE_437=y |
| 1373 | CONFIG_NLS_CODEPAGE_737=m | 120 | CONFIG_NLS_CODEPAGE_737=m |
| 1374 | CONFIG_NLS_CODEPAGE_775=m | 121 | CONFIG_NLS_CODEPAGE_775=m |
| @@ -1384,15 +131,14 @@ CONFIG_NLS_CODEPAGE_864=m | |||
| 1384 | CONFIG_NLS_CODEPAGE_865=m | 131 | CONFIG_NLS_CODEPAGE_865=m |
| 1385 | CONFIG_NLS_CODEPAGE_866=m | 132 | CONFIG_NLS_CODEPAGE_866=m |
| 1386 | CONFIG_NLS_CODEPAGE_869=m | 133 | CONFIG_NLS_CODEPAGE_869=m |
| 1387 | CONFIG_NLS_CODEPAGE_936=m | 134 | CONFIG_NLS_CODEPAGE_874=m |
| 1388 | CONFIG_NLS_CODEPAGE_950=m | ||
| 1389 | CONFIG_NLS_CODEPAGE_932=m | 135 | CONFIG_NLS_CODEPAGE_932=m |
| 136 | CONFIG_NLS_CODEPAGE_936=m | ||
| 1390 | CONFIG_NLS_CODEPAGE_949=m | 137 | CONFIG_NLS_CODEPAGE_949=m |
| 1391 | CONFIG_NLS_CODEPAGE_874=m | 138 | CONFIG_NLS_CODEPAGE_950=m |
| 1392 | CONFIG_NLS_ISO8859_8=m | 139 | CONFIG_NLS_ISO8859_13=m |
| 1393 | CONFIG_NLS_CODEPAGE_1250=m | 140 | CONFIG_NLS_ISO8859_14=m |
| 1394 | CONFIG_NLS_CODEPAGE_1251=m | 141 | CONFIG_NLS_ISO8859_15=m |
| 1395 | # CONFIG_NLS_ASCII is not set | ||
| 1396 | CONFIG_NLS_ISO8859_1=y | 142 | CONFIG_NLS_ISO8859_1=y |
| 1397 | CONFIG_NLS_ISO8859_2=m | 143 | CONFIG_NLS_ISO8859_2=m |
| 1398 | CONFIG_NLS_ISO8859_3=m | 144 | CONFIG_NLS_ISO8859_3=m |
| @@ -1400,200 +146,54 @@ CONFIG_NLS_ISO8859_4=m | |||
| 1400 | CONFIG_NLS_ISO8859_5=m | 146 | CONFIG_NLS_ISO8859_5=m |
| 1401 | CONFIG_NLS_ISO8859_6=m | 147 | CONFIG_NLS_ISO8859_6=m |
| 1402 | CONFIG_NLS_ISO8859_7=m | 148 | CONFIG_NLS_ISO8859_7=m |
| 149 | CONFIG_NLS_ISO8859_8=m | ||
| 1403 | CONFIG_NLS_ISO8859_9=m | 150 | CONFIG_NLS_ISO8859_9=m |
| 1404 | CONFIG_NLS_ISO8859_13=m | ||
| 1405 | CONFIG_NLS_ISO8859_14=m | ||
| 1406 | CONFIG_NLS_ISO8859_15=m | ||
| 1407 | CONFIG_NLS_KOI8_R=m | 151 | CONFIG_NLS_KOI8_R=m |
| 1408 | CONFIG_NLS_KOI8_U=m | 152 | CONFIG_NLS_KOI8_U=m |
| 1409 | CONFIG_NLS_UTF8=m | 153 | CONFIG_NLS_UTF8=m |
| 1410 | # CONFIG_DLM is not set | 154 | CONFIG_NR_CPUS=16 |
| 1411 | 155 | CONFIG_NTFS_FS=m | |
| 1412 | # | 156 | CONFIG_PACKET=y |
| 1413 | # Kernel hacking | 157 | CONFIG_PARAVIRT_GUEST=y |
| 1414 | # | 158 | CONFIG_PARTITION_ADVANCED=y |
| 1415 | # CONFIG_PRINTK_TIME is not set | 159 | CONFIG_PERFMON=y |
| 1416 | CONFIG_ENABLE_WARN_DEPRECATED=y | 160 | CONFIG_PERMIT_BSP_REMOVE=y |
| 1417 | CONFIG_ENABLE_MUST_CHECK=y | 161 | CONFIG_POSIX_MQUEUE=y |
| 1418 | CONFIG_FRAME_WARN=2048 | 162 | CONFIG_PROC_KCORE=y |
| 1419 | CONFIG_MAGIC_SYSRQ=y | 163 | CONFIG_RAW_DRIVER=m |
| 1420 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1421 | # CONFIG_DEBUG_FS is not set | ||
| 1422 | # CONFIG_HEADERS_CHECK is not set | ||
| 1423 | CONFIG_DEBUG_KERNEL=y | ||
| 1424 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1425 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 1426 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 1427 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 1428 | CONFIG_SCHED_DEBUG=y | ||
| 1429 | # CONFIG_SCHEDSTATS is not set | ||
| 1430 | # CONFIG_TIMER_STATS is not set | ||
| 1431 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1432 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 1433 | # CONFIG_SLUB_STATS is not set | ||
| 1434 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1435 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1436 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1437 | CONFIG_DEBUG_MUTEXES=y | ||
| 1438 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1439 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1440 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1441 | # CONFIG_DEBUG_INFO is not set | ||
| 1442 | # CONFIG_DEBUG_VM is not set | ||
| 1443 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1444 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 1445 | # CONFIG_DEBUG_LIST is not set | ||
| 1446 | # CONFIG_DEBUG_SG is not set | ||
| 1447 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 1448 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
| 1449 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1450 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 164 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| 1451 | # CONFIG_BACKTRACE_SELF_TEST is not set | 165 | CONFIG_REISERFS_FS_POSIX_ACL=y |
| 1452 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 166 | CONFIG_REISERFS_FS_SECURITY=y |
| 1453 | # CONFIG_FAULT_INJECTION is not set | 167 | CONFIG_REISERFS_FS_XATTR=y |
| 1454 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | 168 | CONFIG_REISERFS_FS=y |
| 1455 | 169 | CONFIG_SCSI_QLOGIC_1280=y | |
| 1456 | # | 170 | CONFIG_SCSI_SYM53C8XX_2=y |
| 1457 | # Tracers | 171 | CONFIG_SCSI=y |
| 1458 | # | 172 | CONFIG_SERIAL_8250_CONSOLE=y |
| 1459 | # CONFIG_SCHED_TRACER is not set | 173 | CONFIG_SERIAL_8250_EXTENDED=y |
| 1460 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 174 | CONFIG_SERIAL_8250_NR_UARTS=6 |
| 1461 | # CONFIG_BOOT_TRACER is not set | 175 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 1462 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 176 | CONFIG_SERIAL_8250=y |
| 1463 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 177 | CONFIG_SERIAL_NONSTANDARD=y |
| 1464 | # CONFIG_SAMPLES is not set | 178 | # CONFIG_SERIO_SERPORT is not set |
| 1465 | CONFIG_IA64_GRANULE_16MB=y | 179 | CONFIG_SGI_PARTITION=y |
| 1466 | # CONFIG_IA64_GRANULE_64MB is not set | 180 | CONFIG_SMB_FS=m |
| 1467 | # CONFIG_IA64_PRINT_HAZARDS is not set | 181 | CONFIG_SMB_NLS_DEFAULT=y |
| 1468 | # CONFIG_DISABLE_VHPT is not set | 182 | CONFIG_SMP=y |
| 1469 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | 183 | CONFIG_SYN_COOKIES=y |
| 1470 | # CONFIG_IA64_DEBUG_IRQ is not set | 184 | CONFIG_SYSFS_DEPRECATED_V2=y |
| 1471 | 185 | CONFIG_SYSVIPC=y | |
| 1472 | # | 186 | CONFIG_TIGON3=y |
| 1473 | # Security options | 187 | CONFIG_TMPFS=y |
| 1474 | # | 188 | CONFIG_TULIP=m |
| 1475 | # CONFIG_KEYS is not set | 189 | CONFIG_UDF_FS=m |
| 1476 | # CONFIG_SECURITY is not set | 190 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 1477 | # CONFIG_SECURITYFS is not set | 191 | CONFIG_UNIX=y |
| 1478 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 192 | CONFIG_USB_DEVICEFS=y |
| 1479 | CONFIG_CRYPTO=y | 193 | CONFIG_USB_EHCI_HCD=m |
| 1480 | 194 | CONFIG_USB_OHCI_HCD=m | |
| 1481 | # | 195 | CONFIG_USB_STORAGE=m |
| 1482 | # Crypto core or helper | 196 | CONFIG_USB_UHCI_HCD=y |
| 1483 | # | 197 | CONFIG_USB=y |
| 1484 | # CONFIG_CRYPTO_FIPS is not set | 198 | CONFIG_VFAT_FS=y |
| 1485 | CONFIG_CRYPTO_ALGAPI=y | 199 | CONFIG_XFS_FS=y |
| 1486 | CONFIG_CRYPTO_ALGAPI2=y | ||
| 1487 | CONFIG_CRYPTO_AEAD2=y | ||
| 1488 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1489 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
| 1490 | CONFIG_CRYPTO_HASH=y | ||
| 1491 | CONFIG_CRYPTO_HASH2=y | ||
| 1492 | CONFIG_CRYPTO_RNG2=y | ||
| 1493 | CONFIG_CRYPTO_MANAGER=m | ||
| 1494 | CONFIG_CRYPTO_MANAGER2=y | ||
| 1495 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1496 | # CONFIG_CRYPTO_NULL is not set | ||
| 1497 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1498 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1499 | # CONFIG_CRYPTO_TEST is not set | ||
| 1500 | |||
| 1501 | # | ||
| 1502 | # Authenticated Encryption with Associated Data | ||
| 1503 | # | ||
| 1504 | # CONFIG_CRYPTO_CCM is not set | ||
| 1505 | # CONFIG_CRYPTO_GCM is not set | ||
| 1506 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1507 | |||
| 1508 | # | ||
| 1509 | # Block modes | ||
| 1510 | # | ||
| 1511 | CONFIG_CRYPTO_CBC=m | ||
| 1512 | # CONFIG_CRYPTO_CTR is not set | ||
| 1513 | # CONFIG_CRYPTO_CTS is not set | ||
| 1514 | CONFIG_CRYPTO_ECB=m | ||
| 1515 | # CONFIG_CRYPTO_LRW is not set | ||
| 1516 | CONFIG_CRYPTO_PCBC=m | ||
| 1517 | # CONFIG_CRYPTO_XTS is not set | ||
| 1518 | |||
| 1519 | # | ||
| 1520 | # Hash modes | ||
| 1521 | # | ||
| 1522 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1523 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1524 | |||
| 1525 | # | ||
| 1526 | # Digest | ||
| 1527 | # | ||
| 1528 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1529 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1530 | CONFIG_CRYPTO_MD5=y | ||
| 1531 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1532 | # CONFIG_CRYPTO_RMD128 is not set | ||
| 1533 | # CONFIG_CRYPTO_RMD160 is not set | ||
| 1534 | # CONFIG_CRYPTO_RMD256 is not set | ||
| 1535 | # CONFIG_CRYPTO_RMD320 is not set | ||
| 1536 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1537 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1538 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1539 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1540 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1541 | |||
| 1542 | # | ||
| 1543 | # Ciphers | ||
| 1544 | # | ||
| 1545 | # CONFIG_CRYPTO_AES is not set | ||
| 1546 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1547 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1548 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1549 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1550 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1551 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1552 | CONFIG_CRYPTO_DES=m | ||
| 1553 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1554 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1555 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 1556 | # CONFIG_CRYPTO_SEED is not set | ||
| 1557 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1558 | # CONFIG_CRYPTO_TEA is not set | ||
| 1559 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1560 | |||
| 1561 | # | ||
| 1562 | # Compression | ||
| 1563 | # | ||
| 1564 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1565 | # CONFIG_CRYPTO_LZO is not set | ||
| 1566 | |||
| 1567 | # | ||
| 1568 | # Random Number Generation | ||
| 1569 | # | ||
| 1570 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
| 1571 | CONFIG_CRYPTO_HW=y | ||
| 1572 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
| 1573 | CONFIG_HAVE_KVM=y | ||
| 1574 | CONFIG_VIRTUALIZATION=y | ||
| 1575 | # CONFIG_KVM is not set | ||
| 1576 | # CONFIG_VIRTIO_PCI is not set | ||
| 1577 | # CONFIG_VIRTIO_BALLOON is not set | ||
| 1578 | |||
| 1579 | # | ||
| 1580 | # Library routines | ||
| 1581 | # | ||
| 1582 | CONFIG_BITREVERSE=y | ||
| 1583 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 1584 | # CONFIG_CRC_CCITT is not set | ||
| 1585 | # CONFIG_CRC16 is not set | ||
| 1586 | # CONFIG_CRC_T10DIF is not set | ||
| 1587 | CONFIG_CRC_ITU_T=m | ||
| 1588 | CONFIG_CRC32=y | ||
| 1589 | # CONFIG_CRC7 is not set | ||
| 1590 | # CONFIG_LIBCRC32C is not set | ||
| 1591 | CONFIG_PLIST=y | ||
| 1592 | CONFIG_HAS_IOMEM=y | ||
| 1593 | CONFIG_HAS_IOPORT=y | ||
| 1594 | CONFIG_HAS_DMA=y | ||
| 1595 | CONFIG_GENERIC_HARDIRQS=y | ||
| 1596 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 1597 | CONFIG_GENERIC_PENDING_IRQ=y | ||
| 1598 | CONFIG_IRQ_PER_CPU=y | ||
| 1599 | # CONFIG_IOMMU_API is not set | ||
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig index 3cec65b534c2..de0b68e0d48e 100644 --- a/arch/ia64/configs/zx1_defconfig +++ b/arch/ia64/configs/zx1_defconfig | |||
| @@ -1,1460 +1,85 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.21-rc3 | ||
| 4 | # Thu Mar 8 11:04:20 2007 | ||
| 5 | # | ||
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 7 | |||
| 8 | # | ||
| 9 | # Code maturity level options | ||
| 10 | # | ||
| 11 | CONFIG_EXPERIMENTAL=y | ||
| 12 | CONFIG_LOCK_KERNEL=y | ||
| 13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 14 | |||
| 15 | # | ||
| 16 | # General setup | ||
| 17 | # | ||
| 18 | CONFIG_LOCALVERSION="" | ||
| 19 | CONFIG_LOCALVERSION_AUTO=y | ||
| 20 | CONFIG_SWAP=y | ||
| 21 | CONFIG_SYSVIPC=y | ||
| 22 | # CONFIG_IPC_NS is not set | ||
| 23 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 24 | # CONFIG_POSIX_MQUEUE is not set | ||
| 25 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 26 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
| 27 | # CONFIG_TASKSTATS is not set | ||
| 28 | # CONFIG_UTS_NS is not set | ||
| 29 | # CONFIG_AUDIT is not set | ||
| 30 | # CONFIG_IKCONFIG is not set | ||
| 31 | # CONFIG_CPUSETS is not set | ||
| 32 | CONFIG_SYSFS_DEPRECATED=y | ||
| 33 | # CONFIG_RELAY is not set | ||
| 34 | CONFIG_BLK_DEV_INITRD=y | ||
| 35 | CONFIG_INITRAMFS_SOURCE="" | ||
| 36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 37 | CONFIG_SYSCTL=y | ||
| 38 | # CONFIG_EMBEDDED is not set | ||
| 39 | CONFIG_SYSCTL_SYSCALL=y | ||
| 40 | CONFIG_KALLSYMS=y | ||
| 41 | # CONFIG_KALLSYMS_ALL is not set | ||
| 42 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 43 | CONFIG_HOTPLUG=y | ||
| 44 | CONFIG_PRINTK=y | ||
| 45 | CONFIG_BUG=y | ||
| 46 | CONFIG_ELF_CORE=y | ||
| 47 | CONFIG_BASE_FULL=y | ||
| 48 | CONFIG_FUTEX=y | ||
| 49 | CONFIG_EPOLL=y | ||
| 50 | CONFIG_SHMEM=y | ||
| 51 | CONFIG_SLUB=y | ||
| 52 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 53 | CONFIG_RT_MUTEXES=y | ||
| 54 | # CONFIG_TINY_SHMEM is not set | ||
| 55 | CONFIG_BASE_SMALL=0 | ||
| 56 | # CONFIG_SLOB is not set | ||
| 57 | |||
| 58 | # | ||
| 59 | # Loadable module support | ||
| 60 | # | ||
| 61 | CONFIG_MODULES=y | ||
| 62 | # CONFIG_MODULE_UNLOAD is not set | ||
| 63 | # CONFIG_MODVERSIONS is not set | ||
| 64 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 65 | # CONFIG_KMOD is not set | ||
| 66 | CONFIG_STOP_MACHINE=y | ||
| 67 | |||
| 68 | # | ||
| 69 | # Block layer | ||
| 70 | # | ||
| 71 | CONFIG_BLOCK=y | ||
| 72 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 73 | |||
| 74 | # | ||
| 75 | # IO Schedulers | ||
| 76 | # | ||
| 77 | CONFIG_IOSCHED_NOOP=y | ||
| 78 | CONFIG_IOSCHED_AS=y | ||
| 79 | CONFIG_IOSCHED_DEADLINE=y | ||
| 80 | CONFIG_IOSCHED_CFQ=y | ||
| 81 | CONFIG_DEFAULT_AS=y | ||
| 82 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 83 | # CONFIG_DEFAULT_CFQ is not set | ||
| 84 | # CONFIG_DEFAULT_NOOP is not set | ||
| 85 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 86 | |||
| 87 | # | ||
| 88 | # Processor type and features | ||
| 89 | # | ||
| 90 | CONFIG_IA64=y | ||
| 91 | CONFIG_64BIT=y | ||
| 92 | CONFIG_ZONE_DMA=y | ||
| 93 | CONFIG_MMU=y | ||
| 94 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 95 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 96 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 97 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 98 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 99 | CONFIG_GENERIC_TIME=y | ||
| 100 | CONFIG_DMI=y | ||
| 101 | CONFIG_EFI=y | ||
| 102 | CONFIG_GENERIC_IOMAP=y | ||
| 103 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
| 104 | CONFIG_AUDIT_ARCH=y | ||
| 105 | # CONFIG_IA64_GENERIC is not set | ||
| 106 | # CONFIG_IA64_DIG is not set | ||
| 107 | CONFIG_IA64_HP_ZX1=y | ||
| 108 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 109 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 110 | # CONFIG_IA64_HP_SIM is not set | ||
| 111 | # CONFIG_ITANIUM is not set | ||
| 112 | CONFIG_MCKINLEY=y | ||
| 113 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 114 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 115 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
| 116 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
| 117 | CONFIG_PGTABLE_3=y | ||
| 118 | # CONFIG_PGTABLE_4 is not set | ||
| 119 | # CONFIG_HZ_100 is not set | ||
| 120 | CONFIG_HZ_250=y | ||
| 121 | # CONFIG_HZ_300 is not set | ||
| 122 | # CONFIG_HZ_1000 is not set | ||
| 123 | CONFIG_HZ=250 | ||
| 124 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 125 | # CONFIG_IA64_CYCLONE is not set | ||
| 126 | CONFIG_IOSAPIC=y | ||
| 127 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 128 | CONFIG_SMP=y | ||
| 129 | CONFIG_NR_CPUS=16 | ||
| 130 | CONFIG_HOTPLUG_CPU=y | ||
| 131 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 132 | # CONFIG_SCHED_SMT is not set | ||
| 133 | # CONFIG_PERMIT_BSP_REMOVE is not set | ||
| 134 | # CONFIG_PREEMPT is not set | ||
| 135 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 136 | CONFIG_FLATMEM_MANUAL=y | ||
| 137 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 138 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 139 | CONFIG_FLATMEM=y | ||
| 140 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 141 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 143 | CONFIG_RESOURCES_64BIT=y | ||
| 144 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 145 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 146 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 147 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 148 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 149 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
| 150 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 151 | CONFIG_VIRTUAL_MEM_MAP=y | ||
| 152 | CONFIG_HOLES_IN_ZONE=y | ||
| 153 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 154 | CONFIG_PERFMON=y | ||
| 155 | CONFIG_IA64_PALINFO=y | ||
| 156 | # CONFIG_IA64_ESI is not set | ||
| 157 | # CONFIG_KEXEC is not set | ||
| 158 | CONFIG_CRASH_DUMP=y | ||
| 159 | |||
| 160 | # | ||
| 161 | # Firmware Drivers | ||
| 162 | # | ||
| 163 | CONFIG_EFI_VARS=y | ||
| 164 | CONFIG_EFI_PCDP=y | ||
| 165 | CONFIG_BINFMT_ELF=y | ||
| 166 | CONFIG_BINFMT_MISC=y | ||
| 167 | |||
| 168 | # | ||
| 169 | # Power management and ACPI | ||
| 170 | # | ||
| 171 | CONFIG_PM=y | ||
| 172 | CONFIG_PM_LEGACY=y | ||
| 173 | # CONFIG_PM_DEBUG is not set | ||
| 174 | # CONFIG_PM_SYSFS_DEPRECATED is not set | ||
| 175 | |||
| 176 | # | ||
| 177 | # ACPI (Advanced Configuration and Power Interface) Support | ||
| 178 | # | ||
| 179 | CONFIG_ACPI=y | ||
| 180 | CONFIG_ACPI_PROCFS=y | 1 | CONFIG_ACPI_PROCFS=y |
| 181 | CONFIG_ACPI_BUTTON=y | 2 | CONFIG_AGP_HP_ZX1=y |
| 182 | CONFIG_ACPI_FAN=y | 3 | CONFIG_AGP=y |
| 183 | # CONFIG_ACPI_DOCK is not set | 4 | CONFIG_AUTOFS_FS=y |
| 184 | CONFIG_ACPI_PROCESSOR=y | 5 | CONFIG_BINFMT_MISC=y |
| 185 | CONFIG_ACPI_HOTPLUG_CPU=y | 6 | CONFIG_BLK_DEV_CMD64X=y |
| 186 | CONFIG_ACPI_THERMAL=y | 7 | CONFIG_BLK_DEV_GENERIC=y |
| 187 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 8 | CONFIG_BLK_DEV_IDECD=y |
| 188 | # CONFIG_ACPI_DEBUG is not set | 9 | CONFIG_BLK_DEV_INITRD=y |
| 189 | CONFIG_ACPI_EC=y | ||
| 190 | CONFIG_ACPI_POWER=y | ||
| 191 | CONFIG_ACPI_SYSTEM=y | ||
| 192 | CONFIG_ACPI_CONTAINER=y | ||
| 193 | |||
| 194 | # | ||
| 195 | # CPU Frequency scaling | ||
| 196 | # | ||
| 197 | # CONFIG_CPU_FREQ is not set | ||
| 198 | |||
| 199 | # | ||
| 200 | # Bus options (PCI, PCMCIA) | ||
| 201 | # | ||
| 202 | CONFIG_PCI=y | ||
| 203 | CONFIG_PCI_DOMAINS=y | ||
| 204 | # CONFIG_PCIEPORTBUS is not set | ||
| 205 | # CONFIG_PCI_MSI is not set | ||
| 206 | # CONFIG_PCI_DEBUG is not set | ||
| 207 | |||
| 208 | # | ||
| 209 | # PCI Hotplug Support | ||
| 210 | # | ||
| 211 | CONFIG_HOTPLUG_PCI=y | ||
| 212 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 213 | CONFIG_HOTPLUG_PCI_ACPI=y | ||
| 214 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 215 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 216 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 217 | |||
| 218 | # | ||
| 219 | # PCCARD (PCMCIA/CardBus) support | ||
| 220 | # | ||
| 221 | # CONFIG_PCCARD is not set | ||
| 222 | |||
| 223 | # | ||
| 224 | # Networking | ||
| 225 | # | ||
| 226 | CONFIG_NET=y | ||
| 227 | |||
| 228 | # | ||
| 229 | # Networking options | ||
| 230 | # | ||
| 231 | # CONFIG_NETDEBUG is not set | ||
| 232 | CONFIG_PACKET=y | ||
| 233 | # CONFIG_PACKET_MMAP is not set | ||
| 234 | CONFIG_UNIX=y | ||
| 235 | CONFIG_XFRM=y | ||
| 236 | # CONFIG_XFRM_USER is not set | ||
| 237 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 238 | # CONFIG_XFRM_MIGRATE is not set | ||
| 239 | # CONFIG_NET_KEY is not set | ||
| 240 | CONFIG_INET=y | ||
| 241 | CONFIG_IP_MULTICAST=y | ||
| 242 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 243 | CONFIG_IP_FIB_HASH=y | ||
| 244 | # CONFIG_IP_PNP is not set | ||
| 245 | # CONFIG_NET_IPIP is not set | ||
| 246 | # CONFIG_NET_IPGRE is not set | ||
| 247 | # CONFIG_IP_MROUTE is not set | ||
| 248 | # CONFIG_ARPD is not set | ||
| 249 | # CONFIG_SYN_COOKIES is not set | ||
| 250 | # CONFIG_INET_AH is not set | ||
| 251 | # CONFIG_INET_ESP is not set | ||
| 252 | # CONFIG_INET_IPCOMP is not set | ||
| 253 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 254 | # CONFIG_INET_TUNNEL is not set | ||
| 255 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 256 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 257 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 258 | CONFIG_INET_DIAG=y | ||
| 259 | CONFIG_INET_TCP_DIAG=y | ||
| 260 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 261 | CONFIG_TCP_CONG_CUBIC=y | ||
| 262 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 263 | # CONFIG_TCP_MD5SIG is not set | ||
| 264 | |||
| 265 | # | ||
| 266 | # IP: Virtual Server Configuration | ||
| 267 | # | ||
| 268 | # CONFIG_IP_VS is not set | ||
| 269 | # CONFIG_IPV6 is not set | ||
| 270 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 271 | # CONFIG_INET6_TUNNEL is not set | ||
| 272 | # CONFIG_NETWORK_SECMARK is not set | ||
| 273 | CONFIG_NETFILTER=y | ||
| 274 | # CONFIG_NETFILTER_DEBUG is not set | ||
| 275 | |||
| 276 | # | ||
| 277 | # Core Netfilter Configuration | ||
| 278 | # | ||
| 279 | # CONFIG_NETFILTER_NETLINK is not set | ||
| 280 | # CONFIG_NF_CONNTRACK_ENABLED is not set | ||
| 281 | # CONFIG_NETFILTER_XTABLES is not set | ||
| 282 | |||
| 283 | # | ||
| 284 | # IP: Netfilter Configuration | ||
| 285 | # | ||
| 286 | # CONFIG_IP_NF_QUEUE is not set | ||
| 287 | # CONFIG_IP_NF_IPTABLES is not set | ||
| 288 | # CONFIG_IP_NF_ARPTABLES is not set | ||
| 289 | |||
| 290 | # | ||
| 291 | # DCCP Configuration (EXPERIMENTAL) | ||
| 292 | # | ||
| 293 | # CONFIG_IP_DCCP is not set | ||
| 294 | |||
| 295 | # | ||
| 296 | # SCTP Configuration (EXPERIMENTAL) | ||
| 297 | # | ||
| 298 | # CONFIG_IP_SCTP is not set | ||
| 299 | |||
| 300 | # | ||
| 301 | # TIPC Configuration (EXPERIMENTAL) | ||
| 302 | # | ||
| 303 | # CONFIG_TIPC is not set | ||
| 304 | # CONFIG_ATM is not set | ||
| 305 | # CONFIG_BRIDGE is not set | ||
| 306 | # CONFIG_VLAN_8021Q is not set | ||
| 307 | # CONFIG_DECNET is not set | ||
| 308 | # CONFIG_LLC2 is not set | ||
| 309 | # CONFIG_IPX is not set | ||
| 310 | # CONFIG_ATALK is not set | ||
| 311 | # CONFIG_X25 is not set | ||
| 312 | # CONFIG_LAPB is not set | ||
| 313 | # CONFIG_ECONET is not set | ||
| 314 | # CONFIG_WAN_ROUTER is not set | ||
| 315 | |||
| 316 | # | ||
| 317 | # QoS and/or fair queueing | ||
| 318 | # | ||
| 319 | # CONFIG_NET_SCHED is not set | ||
| 320 | |||
| 321 | # | ||
| 322 | # Network testing | ||
| 323 | # | ||
| 324 | # CONFIG_NET_PKTGEN is not set | ||
| 325 | # CONFIG_NET_TCPPROBE is not set | ||
| 326 | # CONFIG_HAMRADIO is not set | ||
| 327 | # CONFIG_IRDA is not set | ||
| 328 | # CONFIG_BT is not set | ||
| 329 | # CONFIG_IEEE80211 is not set | ||
| 330 | |||
| 331 | # | ||
| 332 | # Device Drivers | ||
| 333 | # | ||
| 334 | |||
| 335 | # | ||
| 336 | # Generic Driver Options | ||
| 337 | # | ||
| 338 | CONFIG_STANDALONE=y | ||
| 339 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 340 | # CONFIG_FW_LOADER is not set | ||
| 341 | # CONFIG_DEBUG_DRIVER is not set | ||
| 342 | # CONFIG_DEBUG_DEVRES is not set | ||
| 343 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 344 | |||
| 345 | # | ||
| 346 | # Connector - unified userspace <-> kernelspace linker | ||
| 347 | # | ||
| 348 | # CONFIG_CONNECTOR is not set | ||
| 349 | |||
| 350 | # | ||
| 351 | # Memory Technology Devices (MTD) | ||
| 352 | # | ||
| 353 | # CONFIG_MTD is not set | ||
| 354 | |||
| 355 | # | ||
| 356 | # Parallel port support | ||
| 357 | # | ||
| 358 | # CONFIG_PARPORT is not set | ||
| 359 | |||
| 360 | # | ||
| 361 | # Plug and Play support | ||
| 362 | # | ||
| 363 | CONFIG_PNP=y | ||
| 364 | # CONFIG_PNP_DEBUG is not set | ||
| 365 | |||
| 366 | # | ||
| 367 | # Protocols | ||
| 368 | # | ||
| 369 | CONFIG_PNPACPI=y | ||
| 370 | |||
| 371 | # | ||
| 372 | # Block devices | ||
| 373 | # | ||
| 374 | # CONFIG_BLK_CPQ_DA is not set | ||
| 375 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 376 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 377 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 378 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 379 | CONFIG_BLK_DEV_LOOP=y | 10 | CONFIG_BLK_DEV_LOOP=y |
| 380 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
| 381 | # CONFIG_BLK_DEV_NBD is not set | ||
| 382 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 383 | # CONFIG_BLK_DEV_UB is not set | ||
| 384 | CONFIG_BLK_DEV_RAM=y | 11 | CONFIG_BLK_DEV_RAM=y |
| 385 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 386 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 387 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 388 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 389 | # CONFIG_ATA_OVER_ETH is not set | ||
| 390 | |||
| 391 | # | ||
| 392 | # Misc devices | ||
| 393 | # | ||
| 394 | # CONFIG_SGI_IOC4 is not set | ||
| 395 | # CONFIG_TIFM_CORE is not set | ||
| 396 | |||
| 397 | # | ||
| 398 | # ATA/ATAPI/MFM/RLL support | ||
| 399 | # | ||
| 400 | CONFIG_IDE=y | ||
| 401 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 402 | CONFIG_BLK_DEV_IDE=y | ||
| 403 | |||
| 404 | # | ||
| 405 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 406 | # | ||
| 407 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 408 | CONFIG_BLK_DEV_IDEDISK=y | ||
| 409 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 410 | CONFIG_BLK_DEV_IDECD=y | ||
| 411 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 412 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
| 413 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
| 414 | # CONFIG_BLK_DEV_IDEACPI is not set | ||
| 415 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 416 | |||
| 417 | # | ||
| 418 | # IDE chipset support/bugfixes | ||
| 419 | # | ||
| 420 | # CONFIG_IDE_GENERIC is not set | ||
| 421 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 422 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 423 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
| 424 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 425 | CONFIG_BLK_DEV_GENERIC=y | ||
| 426 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 427 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 428 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 429 | # CONFIG_IDEDMA_PCI_AUTO is not set | ||
| 430 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 431 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 432 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 433 | CONFIG_BLK_DEV_CMD64X=y | ||
| 434 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 435 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 436 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 437 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 438 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 439 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 440 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 441 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 442 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 443 | # CONFIG_BLK_DEV_IT8213 is not set | ||
| 444 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 445 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 446 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 447 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 448 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 449 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 450 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 451 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 452 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 453 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 454 | # CONFIG_IDE_ARM is not set | ||
| 455 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 456 | # CONFIG_IDEDMA_IVB is not set | ||
| 457 | # CONFIG_IDEDMA_AUTO is not set | ||
| 458 | # CONFIG_BLK_DEV_HD is not set | ||
| 459 | |||
| 460 | # | ||
| 461 | # SCSI device support | ||
| 462 | # | ||
| 463 | # CONFIG_RAID_ATTRS is not set | ||
| 464 | CONFIG_SCSI=y | ||
| 465 | # CONFIG_SCSI_TGT is not set | ||
| 466 | CONFIG_SCSI_NETLINK=y | ||
| 467 | CONFIG_SCSI_PROC_FS=y | ||
| 468 | |||
| 469 | # | ||
| 470 | # SCSI support type (disk, tape, CD-ROM) | ||
| 471 | # | ||
| 472 | CONFIG_BLK_DEV_SD=y | 12 | CONFIG_BLK_DEV_SD=y |
| 473 | CONFIG_CHR_DEV_ST=y | ||
| 474 | CONFIG_CHR_DEV_OSST=y | ||
| 475 | CONFIG_BLK_DEV_SR=y | ||
| 476 | CONFIG_BLK_DEV_SR_VENDOR=y | 13 | CONFIG_BLK_DEV_SR_VENDOR=y |
| 14 | CONFIG_BLK_DEV_SR=y | ||
| 15 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 16 | CONFIG_CHR_DEV_OSST=y | ||
| 477 | CONFIG_CHR_DEV_SG=y | 17 | CONFIG_CHR_DEV_SG=y |
| 478 | # CONFIG_CHR_DEV_SCH is not set | 18 | CONFIG_CHR_DEV_ST=y |
| 479 | 19 | CONFIG_CRASH_DUMP=y | |
| 480 | # | 20 | CONFIG_CRYPTO_ECB=m |
| 481 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 21 | CONFIG_CRYPTO_PCBC=m |
| 482 | # | 22 | CONFIG_DEBUG_KERNEL=y |
| 483 | CONFIG_SCSI_MULTI_LUN=y | 23 | CONFIG_DEBUG_MUTEXES=y |
| 484 | CONFIG_SCSI_CONSTANTS=y | 24 | CONFIG_DRM_RADEON=y |
| 485 | CONFIG_SCSI_LOGGING=y | 25 | CONFIG_DRM=y |
| 486 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 487 | |||
| 488 | # | ||
| 489 | # SCSI Transports | ||
| 490 | # | ||
| 491 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 492 | CONFIG_SCSI_FC_ATTRS=y | ||
| 493 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 494 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 495 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 496 | |||
| 497 | # | ||
| 498 | # SCSI low-level drivers | ||
| 499 | # | ||
| 500 | # CONFIG_ISCSI_TCP is not set | ||
| 501 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 502 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 503 | # CONFIG_SCSI_ACARD is not set | ||
| 504 | # CONFIG_SCSI_AACRAID is not set | ||
| 505 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 506 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 507 | # CONFIG_SCSI_AIC79XX is not set | ||
| 508 | # CONFIG_SCSI_AIC94XX is not set | ||
| 509 | # CONFIG_SCSI_ARCMSR is not set | ||
| 510 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 511 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 512 | # CONFIG_MEGARAID_SAS is not set | ||
| 513 | # CONFIG_SCSI_HPTIOP is not set | ||
| 514 | # CONFIG_SCSI_DMX3191D is not set | ||
| 515 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 516 | # CONFIG_SCSI_IPS is not set | ||
| 517 | # CONFIG_SCSI_INITIO is not set | ||
| 518 | # CONFIG_SCSI_INIA100 is not set | ||
| 519 | # CONFIG_SCSI_STEX is not set | ||
| 520 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 521 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 522 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 523 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 524 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
| 525 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 526 | # CONFIG_SCSI_QLA_FC is not set | ||
| 527 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 528 | # CONFIG_SCSI_LPFC is not set | ||
| 529 | # CONFIG_SCSI_DC395x is not set | ||
| 530 | # CONFIG_SCSI_DC390T is not set | ||
| 531 | # CONFIG_SCSI_DEBUG is not set | ||
| 532 | # CONFIG_SCSI_SRP is not set | ||
| 533 | |||
| 534 | # | ||
| 535 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 536 | # | ||
| 537 | # CONFIG_ATA is not set | ||
| 538 | |||
| 539 | # | ||
| 540 | # Multi-device support (RAID and LVM) | ||
| 541 | # | ||
| 542 | # CONFIG_MD is not set | ||
| 543 | |||
| 544 | # | ||
| 545 | # Fusion MPT device support | ||
| 546 | # | ||
| 547 | CONFIG_FUSION=y | ||
| 548 | CONFIG_FUSION_SPI=y | ||
| 549 | CONFIG_FUSION_FC=y | ||
| 550 | # CONFIG_FUSION_SAS is not set | ||
| 551 | CONFIG_FUSION_MAX_SGE=128 | ||
| 552 | CONFIG_FUSION_CTL=m | ||
| 553 | |||
| 554 | # | ||
| 555 | # IEEE 1394 (FireWire) support | ||
| 556 | # | ||
| 557 | # CONFIG_IEEE1394 is not set | ||
| 558 | |||
| 559 | # | ||
| 560 | # I2O device support | ||
| 561 | # | ||
| 562 | # CONFIG_I2O is not set | ||
| 563 | |||
| 564 | # | ||
| 565 | # Network device support | ||
| 566 | # | ||
| 567 | CONFIG_NETDEVICES=y | ||
| 568 | CONFIG_DUMMY=y | 26 | CONFIG_DUMMY=y |
| 569 | # CONFIG_BONDING is not set | ||
| 570 | # CONFIG_EQUALIZER is not set | ||
| 571 | # CONFIG_TUN is not set | ||
| 572 | # CONFIG_NET_SB1000 is not set | ||
| 573 | |||
| 574 | # | ||
| 575 | # ARCnet devices | ||
| 576 | # | ||
| 577 | # CONFIG_ARCNET is not set | ||
| 578 | |||
| 579 | # | ||
| 580 | # PHY device support | ||
| 581 | # | ||
| 582 | # CONFIG_PHYLIB is not set | ||
| 583 | |||
| 584 | # | ||
| 585 | # Ethernet (10 or 100Mbit) | ||
| 586 | # | ||
| 587 | CONFIG_NET_ETHERNET=y | ||
| 588 | CONFIG_MII=y | ||
| 589 | # CONFIG_HAPPYMEAL is not set | ||
| 590 | # CONFIG_SUNGEM is not set | ||
| 591 | # CONFIG_CASSINI is not set | ||
| 592 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 593 | |||
| 594 | # | ||
| 595 | # Tulip family network device support | ||
| 596 | # | ||
| 597 | CONFIG_NET_TULIP=y | ||
| 598 | # CONFIG_DE2104X is not set | ||
| 599 | CONFIG_TULIP=y | ||
| 600 | CONFIG_TULIP_MWI=y | ||
| 601 | CONFIG_TULIP_MMIO=y | ||
| 602 | CONFIG_TULIP_NAPI=y | ||
| 603 | CONFIG_TULIP_NAPI_HW_MITIGATION=y | ||
| 604 | # CONFIG_DE4X5 is not set | ||
| 605 | # CONFIG_WINBOND_840 is not set | ||
| 606 | # CONFIG_DM9102 is not set | ||
| 607 | # CONFIG_ULI526X is not set | ||
| 608 | # CONFIG_HP100 is not set | ||
| 609 | CONFIG_NET_PCI=y | ||
| 610 | # CONFIG_PCNET32 is not set | ||
| 611 | # CONFIG_AMD8111_ETH is not set | ||
| 612 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 613 | # CONFIG_B44 is not set | ||
| 614 | # CONFIG_FORCEDETH is not set | ||
| 615 | # CONFIG_DGRS is not set | ||
| 616 | # CONFIG_EEPRO100 is not set | ||
| 617 | CONFIG_E100=y | ||
| 618 | # CONFIG_FEALNX is not set | ||
| 619 | # CONFIG_NATSEMI is not set | ||
| 620 | # CONFIG_NE2K_PCI is not set | ||
| 621 | # CONFIG_8139CP is not set | ||
| 622 | # CONFIG_8139TOO is not set | ||
| 623 | # CONFIG_SIS900 is not set | ||
| 624 | # CONFIG_EPIC100 is not set | ||
| 625 | # CONFIG_SUNDANCE is not set | ||
| 626 | # CONFIG_VIA_RHINE is not set | ||
| 627 | # CONFIG_SC92031 is not set | ||
| 628 | |||
| 629 | # | ||
| 630 | # Ethernet (1000 Mbit) | ||
| 631 | # | ||
| 632 | # CONFIG_ACENIC is not set | ||
| 633 | # CONFIG_DL2K is not set | ||
| 634 | CONFIG_E1000=y | 27 | CONFIG_E1000=y |
| 635 | # CONFIG_E1000_NAPI is not set | 28 | CONFIG_E100=y |
| 636 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | 29 | CONFIG_EFI_PARTITION=y |
| 637 | # CONFIG_NS83820 is not set | ||
| 638 | # CONFIG_HAMACHI is not set | ||
| 639 | # CONFIG_YELLOWFIN is not set | ||
| 640 | # CONFIG_R8169 is not set | ||
| 641 | # CONFIG_SIS190 is not set | ||
| 642 | # CONFIG_SKGE is not set | ||
| 643 | # CONFIG_SKY2 is not set | ||
| 644 | # CONFIG_SK98LIN is not set | ||
| 645 | # CONFIG_VIA_VELOCITY is not set | ||
| 646 | CONFIG_TIGON3=y | ||
| 647 | # CONFIG_BNX2 is not set | ||
| 648 | # CONFIG_QLA3XXX is not set | ||
| 649 | # CONFIG_ATL1 is not set | ||
| 650 | |||
| 651 | # | ||
| 652 | # Ethernet (10000 Mbit) | ||
| 653 | # | ||
| 654 | # CONFIG_CHELSIO_T1 is not set | ||
| 655 | # CONFIG_CHELSIO_T3 is not set | ||
| 656 | # CONFIG_IXGB is not set | ||
| 657 | # CONFIG_S2IO is not set | ||
| 658 | # CONFIG_MYRI10GE is not set | ||
| 659 | # CONFIG_NETXEN_NIC is not set | ||
| 660 | |||
| 661 | # | ||
| 662 | # Token Ring devices | ||
| 663 | # | ||
| 664 | # CONFIG_TR is not set | ||
| 665 | |||
| 666 | # | ||
| 667 | # Wireless LAN (non-hamradio) | ||
| 668 | # | ||
| 669 | # CONFIG_NET_RADIO is not set | ||
| 670 | |||
| 671 | # | ||
| 672 | # Wan interfaces | ||
| 673 | # | ||
| 674 | # CONFIG_WAN is not set | ||
| 675 | # CONFIG_FDDI is not set | ||
| 676 | # CONFIG_HIPPI is not set | ||
| 677 | # CONFIG_PPP is not set | ||
| 678 | # CONFIG_SLIP is not set | ||
| 679 | # CONFIG_NET_FC is not set | ||
| 680 | # CONFIG_SHAPER is not set | ||
| 681 | # CONFIG_NETCONSOLE is not set | ||
| 682 | # CONFIG_NETPOLL is not set | ||
| 683 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 684 | |||
| 685 | # | ||
| 686 | # ISDN subsystem | ||
| 687 | # | ||
| 688 | # CONFIG_ISDN is not set | ||
| 689 | |||
| 690 | # | ||
| 691 | # Telephony Support | ||
| 692 | # | ||
| 693 | # CONFIG_PHONE is not set | ||
| 694 | |||
| 695 | # | ||
| 696 | # Input device support | ||
| 697 | # | ||
| 698 | CONFIG_INPUT=y | ||
| 699 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 700 | |||
| 701 | # | ||
| 702 | # Userland interfaces | ||
| 703 | # | ||
| 704 | CONFIG_INPUT_MOUSEDEV=y | ||
| 705 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 706 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 707 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 708 | CONFIG_INPUT_JOYDEV=y | ||
| 709 | # CONFIG_INPUT_TSDEV is not set | ||
| 710 | CONFIG_INPUT_EVDEV=y | ||
| 711 | # CONFIG_INPUT_EVBUG is not set | ||
| 712 | |||
| 713 | # | ||
| 714 | # Input Device Drivers | ||
| 715 | # | ||
| 716 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 717 | # CONFIG_INPUT_MOUSE is not set | ||
| 718 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 719 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 720 | # CONFIG_INPUT_MISC is not set | ||
| 721 | |||
| 722 | # | ||
| 723 | # Hardware I/O ports | ||
| 724 | # | ||
| 725 | CONFIG_SERIO=y | ||
| 726 | # CONFIG_SERIO_I8042 is not set | ||
| 727 | # CONFIG_SERIO_SERPORT is not set | ||
| 728 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 729 | # CONFIG_SERIO_RAW is not set | ||
| 730 | # CONFIG_GAMEPORT is not set | ||
| 731 | |||
| 732 | # | ||
| 733 | # Character devices | ||
| 734 | # | ||
| 735 | CONFIG_VT=y | ||
| 736 | CONFIG_VT_CONSOLE=y | ||
| 737 | CONFIG_HW_CONSOLE=y | ||
| 738 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 739 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 740 | |||
| 741 | # | ||
| 742 | # Serial drivers | ||
| 743 | # | ||
| 744 | CONFIG_SERIAL_8250=y | ||
| 745 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 746 | CONFIG_SERIAL_8250_PCI=y | ||
| 747 | CONFIG_SERIAL_8250_PNP=y | ||
| 748 | CONFIG_SERIAL_8250_NR_UARTS=8 | ||
| 749 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 750 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 751 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 752 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 753 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 754 | |||
| 755 | # | ||
| 756 | # Non-8250 serial port support | ||
| 757 | # | ||
| 758 | CONFIG_SERIAL_CORE=y | ||
| 759 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 760 | # CONFIG_SERIAL_JSM is not set | ||
| 761 | CONFIG_UNIX98_PTYS=y | ||
| 762 | CONFIG_LEGACY_PTYS=y | ||
| 763 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 764 | |||
| 765 | # | ||
| 766 | # IPMI | ||
| 767 | # | ||
| 768 | # CONFIG_IPMI_HANDLER is not set | ||
| 769 | |||
| 770 | # | ||
| 771 | # Watchdog Cards | ||
| 772 | # | ||
| 773 | # CONFIG_WATCHDOG is not set | ||
| 774 | # CONFIG_HW_RANDOM is not set | ||
| 775 | CONFIG_EFI_RTC=y | 30 | CONFIG_EFI_RTC=y |
| 776 | # CONFIG_DTLK is not set | 31 | CONFIG_EFI_VARS=y |
| 777 | # CONFIG_R3964 is not set | 32 | CONFIG_EXPERIMENTAL=y |
| 778 | # CONFIG_APPLICOM is not set | ||
| 779 | CONFIG_AGP=y | ||
| 780 | CONFIG_AGP_HP_ZX1=y | ||
| 781 | CONFIG_DRM=y | ||
| 782 | # CONFIG_DRM_TDFX is not set | ||
| 783 | # CONFIG_DRM_R128 is not set | ||
| 784 | CONFIG_DRM_RADEON=y | ||
| 785 | # CONFIG_DRM_MGA is not set | ||
| 786 | # CONFIG_DRM_SIS is not set | ||
| 787 | # CONFIG_DRM_VIA is not set | ||
| 788 | # CONFIG_DRM_SAVAGE is not set | ||
| 789 | # CONFIG_RAW_DRIVER is not set | ||
| 790 | # CONFIG_HPET is not set | ||
| 791 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 792 | |||
| 793 | # | ||
| 794 | # TPM devices | ||
| 795 | # | ||
| 796 | # CONFIG_TCG_TPM is not set | ||
| 797 | |||
| 798 | # | ||
| 799 | # I2C support | ||
| 800 | # | ||
| 801 | CONFIG_I2C=y | ||
| 802 | CONFIG_I2C_CHARDEV=y | ||
| 803 | |||
| 804 | # | ||
| 805 | # I2C Algorithms | ||
| 806 | # | ||
| 807 | CONFIG_I2C_ALGOBIT=y | ||
| 808 | CONFIG_I2C_ALGOPCF=y | ||
| 809 | # CONFIG_I2C_ALGOPCA is not set | ||
| 810 | |||
| 811 | # | ||
| 812 | # I2C Hardware Bus support | ||
| 813 | # | ||
| 814 | # CONFIG_I2C_ALI1535 is not set | ||
| 815 | # CONFIG_I2C_ALI1563 is not set | ||
| 816 | # CONFIG_I2C_ALI15X3 is not set | ||
| 817 | # CONFIG_I2C_AMD756 is not set | ||
| 818 | # CONFIG_I2C_AMD8111 is not set | ||
| 819 | # CONFIG_I2C_I801 is not set | ||
| 820 | # CONFIG_I2C_I810 is not set | ||
| 821 | # CONFIG_I2C_PIIX4 is not set | ||
| 822 | # CONFIG_I2C_NFORCE2 is not set | ||
| 823 | # CONFIG_I2C_OCORES is not set | ||
| 824 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 825 | # CONFIG_I2C_PASEMI is not set | ||
| 826 | # CONFIG_I2C_PROSAVAGE is not set | ||
| 827 | # CONFIG_I2C_SAVAGE4 is not set | ||
| 828 | # CONFIG_I2C_SIS5595 is not set | ||
| 829 | # CONFIG_I2C_SIS630 is not set | ||
| 830 | # CONFIG_I2C_SIS96X is not set | ||
| 831 | # CONFIG_I2C_STUB is not set | ||
| 832 | # CONFIG_I2C_VIA is not set | ||
| 833 | # CONFIG_I2C_VIAPRO is not set | ||
| 834 | # CONFIG_I2C_VOODOO3 is not set | ||
| 835 | # CONFIG_I2C_PCA_ISA is not set | ||
| 836 | |||
| 837 | # | ||
| 838 | # Miscellaneous I2C Chip support | ||
| 839 | # | ||
| 840 | # CONFIG_SENSORS_DS1337 is not set | ||
| 841 | # CONFIG_SENSORS_DS1374 is not set | ||
| 842 | # CONFIG_EEPROM_LEGACY is not set | ||
| 843 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 844 | # CONFIG_SENSORS_PCA9539 is not set | ||
| 845 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 846 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 847 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 848 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 849 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 850 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 851 | |||
| 852 | # | ||
| 853 | # SPI support | ||
| 854 | # | ||
| 855 | # CONFIG_SPI is not set | ||
| 856 | # CONFIG_SPI_MASTER is not set | ||
| 857 | |||
| 858 | # | ||
| 859 | # Dallas's 1-wire bus | ||
| 860 | # | ||
| 861 | # CONFIG_W1 is not set | ||
| 862 | |||
| 863 | # | ||
| 864 | # Hardware Monitoring support | ||
| 865 | # | ||
| 866 | # CONFIG_HWMON is not set | ||
| 867 | # CONFIG_HWMON_VID is not set | ||
| 868 | |||
| 869 | # | ||
| 870 | # Multifunction device drivers | ||
| 871 | # | ||
| 872 | # CONFIG_MFD_SM501 is not set | ||
| 873 | |||
| 874 | # | ||
| 875 | # Multimedia devices | ||
| 876 | # | ||
| 877 | CONFIG_VIDEO_DEV=y | ||
| 878 | CONFIG_VIDEO_V4L1=y | ||
| 879 | CONFIG_VIDEO_V4L1_COMPAT=y | ||
| 880 | CONFIG_VIDEO_V4L2=y | ||
| 881 | |||
| 882 | # | ||
| 883 | # Video Capture Adapters | ||
| 884 | # | ||
| 885 | |||
| 886 | # | ||
| 887 | # Video Capture Adapters | ||
| 888 | # | ||
| 889 | # CONFIG_VIDEO_ADV_DEBUG is not set | ||
| 890 | CONFIG_VIDEO_HELPER_CHIPS_AUTO=y | ||
| 891 | # CONFIG_VIDEO_VIVI is not set | ||
| 892 | # CONFIG_VIDEO_BT848 is not set | ||
| 893 | # CONFIG_VIDEO_CPIA is not set | ||
| 894 | # CONFIG_VIDEO_CPIA2 is not set | ||
| 895 | # CONFIG_VIDEO_SAA5246A is not set | ||
| 896 | # CONFIG_VIDEO_SAA5249 is not set | ||
| 897 | # CONFIG_TUNER_3036 is not set | ||
| 898 | # CONFIG_VIDEO_STRADIS is not set | ||
| 899 | # CONFIG_VIDEO_ZORAN is not set | ||
| 900 | # CONFIG_VIDEO_SAA7134 is not set | ||
| 901 | # CONFIG_VIDEO_MXB is not set | ||
| 902 | # CONFIG_VIDEO_DPC is not set | ||
| 903 | # CONFIG_VIDEO_HEXIUM_ORION is not set | ||
| 904 | # CONFIG_VIDEO_HEXIUM_GEMINI is not set | ||
| 905 | # CONFIG_VIDEO_CX88 is not set | ||
| 906 | # CONFIG_VIDEO_CAFE_CCIC is not set | ||
| 907 | |||
| 908 | # | ||
| 909 | # V4L USB devices | ||
| 910 | # | ||
| 911 | # CONFIG_VIDEO_PVRUSB2 is not set | ||
| 912 | # CONFIG_VIDEO_EM28XX is not set | ||
| 913 | # CONFIG_VIDEO_USBVISION is not set | ||
| 914 | # CONFIG_USB_VICAM is not set | ||
| 915 | # CONFIG_USB_IBMCAM is not set | ||
| 916 | # CONFIG_USB_KONICAWC is not set | ||
| 917 | # CONFIG_USB_QUICKCAM_MESSENGER is not set | ||
| 918 | # CONFIG_USB_ET61X251 is not set | ||
| 919 | # CONFIG_VIDEO_OVCAMCHIP is not set | ||
| 920 | # CONFIG_USB_W9968CF is not set | ||
| 921 | # CONFIG_USB_OV511 is not set | ||
| 922 | # CONFIG_USB_SE401 is not set | ||
| 923 | # CONFIG_USB_SN9C102 is not set | ||
| 924 | # CONFIG_USB_STV680 is not set | ||
| 925 | # CONFIG_USB_ZC0301 is not set | ||
| 926 | # CONFIG_USB_PWC is not set | ||
| 927 | |||
| 928 | # | ||
| 929 | # Radio Adapters | ||
| 930 | # | ||
| 931 | # CONFIG_RADIO_GEMTEK_PCI is not set | ||
| 932 | # CONFIG_RADIO_MAXIRADIO is not set | ||
| 933 | # CONFIG_RADIO_MAESTRO is not set | ||
| 934 | # CONFIG_USB_DSBR is not set | ||
| 935 | |||
| 936 | # | ||
| 937 | # Digital Video Broadcasting Devices | ||
| 938 | # | ||
| 939 | # CONFIG_DVB is not set | ||
| 940 | # CONFIG_USB_DABUSB is not set | ||
| 941 | |||
| 942 | # | ||
| 943 | # Graphics support | ||
| 944 | # | ||
| 945 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 946 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 947 | CONFIG_LCD_CLASS_DEVICE=m | ||
| 948 | CONFIG_FB=y | ||
| 949 | # CONFIG_FIRMWARE_EDID is not set | ||
| 950 | CONFIG_FB_DDC=y | ||
| 951 | CONFIG_FB_CFB_FILLRECT=y | ||
| 952 | CONFIG_FB_CFB_COPYAREA=y | ||
| 953 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
| 954 | # CONFIG_FB_SVGALIB is not set | ||
| 955 | # CONFIG_FB_MACMODES is not set | ||
| 956 | CONFIG_FB_BACKLIGHT=y | ||
| 957 | CONFIG_FB_MODE_HELPERS=y | ||
| 958 | # CONFIG_FB_TILEBLITTING is not set | ||
| 959 | |||
| 960 | # | ||
| 961 | # Frambuffer hardware drivers | ||
| 962 | # | ||
| 963 | # CONFIG_FB_CIRRUS is not set | ||
| 964 | # CONFIG_FB_PM2 is not set | ||
| 965 | # CONFIG_FB_CYBER2000 is not set | ||
| 966 | # CONFIG_FB_ASILIANT is not set | ||
| 967 | # CONFIG_FB_IMSTT is not set | ||
| 968 | # CONFIG_FB_S1D13XXX is not set | ||
| 969 | # CONFIG_FB_NVIDIA is not set | ||
| 970 | # CONFIG_FB_RIVA is not set | ||
| 971 | # CONFIG_FB_MATROX is not set | ||
| 972 | CONFIG_FB_RADEON=y | ||
| 973 | CONFIG_FB_RADEON_I2C=y | ||
| 974 | CONFIG_FB_RADEON_BACKLIGHT=y | ||
| 975 | CONFIG_FB_RADEON_DEBUG=y | ||
| 976 | # CONFIG_FB_ATY128 is not set | ||
| 977 | # CONFIG_FB_ATY is not set | ||
| 978 | # CONFIG_FB_S3 is not set | ||
| 979 | # CONFIG_FB_SAVAGE is not set | ||
| 980 | # CONFIG_FB_SIS is not set | ||
| 981 | # CONFIG_FB_NEOMAGIC is not set | ||
| 982 | # CONFIG_FB_KYRO is not set | ||
| 983 | # CONFIG_FB_3DFX is not set | ||
| 984 | # CONFIG_FB_VOODOO1 is not set | ||
| 985 | # CONFIG_FB_TRIDENT is not set | ||
| 986 | # CONFIG_FB_VIRTUAL is not set | ||
| 987 | |||
| 988 | # | ||
| 989 | # Console display driver support | ||
| 990 | # | ||
| 991 | CONFIG_VGA_CONSOLE=y | ||
| 992 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | ||
| 993 | CONFIG_DUMMY_CONSOLE=y | ||
| 994 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 995 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
| 996 | # CONFIG_FONTS is not set | ||
| 997 | CONFIG_FONT_8x8=y | ||
| 998 | CONFIG_FONT_8x16=y | ||
| 999 | |||
| 1000 | # | ||
| 1001 | # Logo configuration | ||
| 1002 | # | ||
| 1003 | CONFIG_LOGO=y | ||
| 1004 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 1005 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
| 1006 | CONFIG_LOGO_LINUX_CLUT224=y | ||
| 1007 | |||
| 1008 | # | ||
| 1009 | # Sound | ||
| 1010 | # | ||
| 1011 | CONFIG_SOUND=y | ||
| 1012 | |||
| 1013 | # | ||
| 1014 | # Advanced Linux Sound Architecture | ||
| 1015 | # | ||
| 1016 | CONFIG_SND=y | ||
| 1017 | CONFIG_SND_TIMER=y | ||
| 1018 | CONFIG_SND_PCM=y | ||
| 1019 | CONFIG_SND_HWDEP=y | ||
| 1020 | CONFIG_SND_RAWMIDI=y | ||
| 1021 | CONFIG_SND_SEQUENCER=y | ||
| 1022 | # CONFIG_SND_SEQ_DUMMY is not set | ||
| 1023 | CONFIG_SND_OSSEMUL=y | ||
| 1024 | CONFIG_SND_MIXER_OSS=y | ||
| 1025 | CONFIG_SND_PCM_OSS=y | ||
| 1026 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 1027 | CONFIG_SND_SEQUENCER_OSS=y | ||
| 1028 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 1029 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 1030 | CONFIG_SND_VERBOSE_PROCFS=y | ||
| 1031 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
| 1032 | # CONFIG_SND_DEBUG is not set | ||
| 1033 | |||
| 1034 | # | ||
| 1035 | # Generic devices | ||
| 1036 | # | ||
| 1037 | CONFIG_SND_MPU401_UART=y | ||
| 1038 | CONFIG_SND_OPL3_LIB=y | ||
| 1039 | CONFIG_SND_AC97_CODEC=y | ||
| 1040 | # CONFIG_SND_DUMMY is not set | ||
| 1041 | # CONFIG_SND_VIRMIDI is not set | ||
| 1042 | # CONFIG_SND_MTPAV is not set | ||
| 1043 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 1044 | # CONFIG_SND_MPU401 is not set | ||
| 1045 | |||
| 1046 | # | ||
| 1047 | # PCI devices | ||
| 1048 | # | ||
| 1049 | # CONFIG_SND_AD1889 is not set | ||
| 1050 | # CONFIG_SND_ALS300 is not set | ||
| 1051 | # CONFIG_SND_ALI5451 is not set | ||
| 1052 | # CONFIG_SND_ATIIXP is not set | ||
| 1053 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
| 1054 | # CONFIG_SND_AU8810 is not set | ||
| 1055 | # CONFIG_SND_AU8820 is not set | ||
| 1056 | # CONFIG_SND_AU8830 is not set | ||
| 1057 | # CONFIG_SND_AZT3328 is not set | ||
| 1058 | # CONFIG_SND_BT87X is not set | ||
| 1059 | # CONFIG_SND_CA0106 is not set | ||
| 1060 | # CONFIG_SND_CMIPCI is not set | ||
| 1061 | # CONFIG_SND_CS4281 is not set | ||
| 1062 | # CONFIG_SND_CS46XX is not set | ||
| 1063 | # CONFIG_SND_DARLA20 is not set | ||
| 1064 | # CONFIG_SND_GINA20 is not set | ||
| 1065 | # CONFIG_SND_LAYLA20 is not set | ||
| 1066 | # CONFIG_SND_DARLA24 is not set | ||
| 1067 | # CONFIG_SND_GINA24 is not set | ||
| 1068 | # CONFIG_SND_LAYLA24 is not set | ||
| 1069 | # CONFIG_SND_MONA is not set | ||
| 1070 | # CONFIG_SND_MIA is not set | ||
| 1071 | # CONFIG_SND_ECHO3G is not set | ||
| 1072 | # CONFIG_SND_INDIGO is not set | ||
| 1073 | # CONFIG_SND_INDIGOIO is not set | ||
| 1074 | # CONFIG_SND_INDIGODJ is not set | ||
| 1075 | # CONFIG_SND_EMU10K1 is not set | ||
| 1076 | # CONFIG_SND_EMU10K1X is not set | ||
| 1077 | # CONFIG_SND_ENS1370 is not set | ||
| 1078 | # CONFIG_SND_ENS1371 is not set | ||
| 1079 | # CONFIG_SND_ES1938 is not set | ||
| 1080 | # CONFIG_SND_ES1968 is not set | ||
| 1081 | CONFIG_SND_FM801=y | ||
| 1082 | # CONFIG_SND_FM801_TEA575X_BOOL is not set | ||
| 1083 | # CONFIG_SND_HDA_INTEL is not set | ||
| 1084 | # CONFIG_SND_HDSP is not set | ||
| 1085 | # CONFIG_SND_HDSPM is not set | ||
| 1086 | # CONFIG_SND_ICE1712 is not set | ||
| 1087 | # CONFIG_SND_ICE1724 is not set | ||
| 1088 | # CONFIG_SND_INTEL8X0 is not set | ||
| 1089 | # CONFIG_SND_INTEL8X0M is not set | ||
| 1090 | # CONFIG_SND_KORG1212 is not set | ||
| 1091 | # CONFIG_SND_MAESTRO3 is not set | ||
| 1092 | # CONFIG_SND_MIXART is not set | ||
| 1093 | # CONFIG_SND_NM256 is not set | ||
| 1094 | # CONFIG_SND_PCXHR is not set | ||
| 1095 | # CONFIG_SND_RIPTIDE is not set | ||
| 1096 | # CONFIG_SND_RME32 is not set | ||
| 1097 | # CONFIG_SND_RME96 is not set | ||
| 1098 | # CONFIG_SND_RME9652 is not set | ||
| 1099 | # CONFIG_SND_SONICVIBES is not set | ||
| 1100 | # CONFIG_SND_TRIDENT is not set | ||
| 1101 | # CONFIG_SND_VIA82XX is not set | ||
| 1102 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
| 1103 | # CONFIG_SND_VX222 is not set | ||
| 1104 | # CONFIG_SND_YMFPCI is not set | ||
| 1105 | # CONFIG_SND_AC97_POWER_SAVE is not set | ||
| 1106 | |||
| 1107 | # | ||
| 1108 | # USB devices | ||
| 1109 | # | ||
| 1110 | # CONFIG_SND_USB_AUDIO is not set | ||
| 1111 | |||
| 1112 | # | ||
| 1113 | # SoC audio support | ||
| 1114 | # | ||
| 1115 | # CONFIG_SND_SOC is not set | ||
| 1116 | |||
| 1117 | # | ||
| 1118 | # Open Sound System | ||
| 1119 | # | ||
| 1120 | # CONFIG_SOUND_PRIME is not set | ||
| 1121 | CONFIG_AC97_BUS=y | ||
| 1122 | |||
| 1123 | # | ||
| 1124 | # HID Devices | ||
| 1125 | # | ||
| 1126 | CONFIG_HID=y | ||
| 1127 | # CONFIG_HID_DEBUG is not set | ||
| 1128 | |||
| 1129 | # | ||
| 1130 | # USB support | ||
| 1131 | # | ||
| 1132 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 1133 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 1134 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 1135 | CONFIG_USB=y | ||
| 1136 | # CONFIG_USB_DEBUG is not set | ||
| 1137 | |||
| 1138 | # | ||
| 1139 | # Miscellaneous USB options | ||
| 1140 | # | ||
| 1141 | # CONFIG_USB_DEVICEFS is not set | ||
| 1142 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 1143 | # CONFIG_USB_SUSPEND is not set | ||
| 1144 | # CONFIG_USB_OTG is not set | ||
| 1145 | |||
| 1146 | # | ||
| 1147 | # USB Host Controller Drivers | ||
| 1148 | # | ||
| 1149 | CONFIG_USB_EHCI_HCD=y | ||
| 1150 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
| 1151 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 1152 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1153 | # CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set | ||
| 1154 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1155 | CONFIG_USB_OHCI_HCD=y | ||
| 1156 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 1157 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 1158 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 1159 | CONFIG_USB_UHCI_HCD=y | ||
| 1160 | # CONFIG_USB_SL811_HCD is not set | ||
| 1161 | |||
| 1162 | # | ||
| 1163 | # USB Device Class drivers | ||
| 1164 | # | ||
| 1165 | # CONFIG_USB_ACM is not set | ||
| 1166 | # CONFIG_USB_PRINTER is not set | ||
| 1167 | |||
| 1168 | # | ||
| 1169 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 1170 | # | ||
| 1171 | |||
| 1172 | # | ||
| 1173 | # may also be needed; see USB_STORAGE Help for more information | ||
| 1174 | # | ||
| 1175 | CONFIG_USB_STORAGE=y | ||
| 1176 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1177 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1178 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1179 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1180 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 1181 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1182 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1183 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1184 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1185 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1186 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1187 | # CONFIG_USB_LIBUSUAL is not set | ||
| 1188 | |||
| 1189 | # | ||
| 1190 | # USB Input Devices | ||
| 1191 | # | ||
| 1192 | CONFIG_USB_HID=y | ||
| 1193 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 1194 | # CONFIG_HID_FF is not set | ||
| 1195 | CONFIG_USB_HIDDEV=y | ||
| 1196 | # CONFIG_USB_AIPTEK is not set | ||
| 1197 | # CONFIG_USB_WACOM is not set | ||
| 1198 | # CONFIG_USB_ACECAD is not set | ||
| 1199 | # CONFIG_USB_KBTAB is not set | ||
| 1200 | # CONFIG_USB_POWERMATE is not set | ||
| 1201 | # CONFIG_USB_TOUCHSCREEN is not set | ||
| 1202 | # CONFIG_USB_YEALINK is not set | ||
| 1203 | # CONFIG_USB_XPAD is not set | ||
| 1204 | # CONFIG_USB_ATI_REMOTE is not set | ||
| 1205 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
| 1206 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
| 1207 | # CONFIG_USB_APPLETOUCH is not set | ||
| 1208 | # CONFIG_USB_GTCO is not set | ||
| 1209 | |||
| 1210 | # | ||
| 1211 | # USB Imaging devices | ||
| 1212 | # | ||
| 1213 | # CONFIG_USB_MDC800 is not set | ||
| 1214 | # CONFIG_USB_MICROTEK is not set | ||
| 1215 | |||
| 1216 | # | ||
| 1217 | # USB Network Adapters | ||
| 1218 | # | ||
| 1219 | # CONFIG_USB_CATC is not set | ||
| 1220 | # CONFIG_USB_KAWETH is not set | ||
| 1221 | # CONFIG_USB_PEGASUS is not set | ||
| 1222 | # CONFIG_USB_RTL8150 is not set | ||
| 1223 | # CONFIG_USB_USBNET_MII is not set | ||
| 1224 | # CONFIG_USB_USBNET is not set | ||
| 1225 | CONFIG_USB_MON=y | ||
| 1226 | |||
| 1227 | # | ||
| 1228 | # USB port drivers | ||
| 1229 | # | ||
| 1230 | |||
| 1231 | # | ||
| 1232 | # USB Serial Converter support | ||
| 1233 | # | ||
| 1234 | # CONFIG_USB_SERIAL is not set | ||
| 1235 | |||
| 1236 | # | ||
| 1237 | # USB Miscellaneous drivers | ||
| 1238 | # | ||
| 1239 | # CONFIG_USB_EMI62 is not set | ||
| 1240 | # CONFIG_USB_EMI26 is not set | ||
| 1241 | # CONFIG_USB_ADUTUX is not set | ||
| 1242 | # CONFIG_USB_AUERSWALD is not set | ||
| 1243 | # CONFIG_USB_RIO500 is not set | ||
| 1244 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1245 | # CONFIG_USB_LCD is not set | ||
| 1246 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1247 | # CONFIG_USB_LED is not set | ||
| 1248 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1249 | # CONFIG_USB_CYTHERM is not set | ||
| 1250 | # CONFIG_USB_PHIDGET is not set | ||
| 1251 | # CONFIG_USB_IDMOUSE is not set | ||
| 1252 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1253 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1254 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1255 | # CONFIG_USB_LD is not set | ||
| 1256 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1257 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1258 | |||
| 1259 | # | ||
| 1260 | # USB DSL modem support | ||
| 1261 | # | ||
| 1262 | |||
| 1263 | # | ||
| 1264 | # USB Gadget Support | ||
| 1265 | # | ||
| 1266 | # CONFIG_USB_GADGET is not set | ||
| 1267 | |||
| 1268 | # | ||
| 1269 | # MMC/SD Card support | ||
| 1270 | # | ||
| 1271 | # CONFIG_MMC is not set | ||
| 1272 | |||
| 1273 | # | ||
| 1274 | # LED devices | ||
| 1275 | # | ||
| 1276 | # CONFIG_NEW_LEDS is not set | ||
| 1277 | |||
| 1278 | # | ||
| 1279 | # LED drivers | ||
| 1280 | # | ||
| 1281 | |||
| 1282 | # | ||
| 1283 | # LED Triggers | ||
| 1284 | # | ||
| 1285 | |||
| 1286 | # | ||
| 1287 | # InfiniBand support | ||
| 1288 | # | ||
| 1289 | # CONFIG_INFINIBAND is not set | ||
| 1290 | |||
| 1291 | # | ||
| 1292 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
| 1293 | # | ||
| 1294 | |||
| 1295 | # | ||
| 1296 | # Real Time Clock | ||
| 1297 | # | ||
| 1298 | # CONFIG_RTC_CLASS is not set | ||
| 1299 | |||
| 1300 | # | ||
| 1301 | # DMA Engine support | ||
| 1302 | # | ||
| 1303 | # CONFIG_DMA_ENGINE is not set | ||
| 1304 | |||
| 1305 | # | ||
| 1306 | # DMA Clients | ||
| 1307 | # | ||
| 1308 | |||
| 1309 | # | ||
| 1310 | # DMA Devices | ||
| 1311 | # | ||
| 1312 | |||
| 1313 | # | ||
| 1314 | # Auxiliary Display support | ||
| 1315 | # | ||
| 1316 | |||
| 1317 | # | ||
| 1318 | # Virtualization | ||
| 1319 | # | ||
| 1320 | # CONFIG_MSPEC is not set | ||
| 1321 | |||
| 1322 | # | ||
| 1323 | # File systems | ||
| 1324 | # | ||
| 1325 | CONFIG_EXT2_FS=y | ||
| 1326 | CONFIG_EXT2_FS_XATTR=y | 33 | CONFIG_EXT2_FS_XATTR=y |
| 1327 | # CONFIG_EXT2_FS_POSIX_ACL is not set | 34 | CONFIG_EXT2_FS=y |
| 1328 | # CONFIG_EXT2_FS_SECURITY is not set | ||
| 1329 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1330 | CONFIG_EXT3_FS=y | 35 | CONFIG_EXT3_FS=y |
| 1331 | CONFIG_EXT3_FS_XATTR=y | 36 | CONFIG_FB_RADEON_DEBUG=y |
| 1332 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 37 | CONFIG_FB_RADEON=y |
| 1333 | # CONFIG_EXT3_FS_SECURITY is not set | 38 | CONFIG_FLATMEM_MANUAL=y |
| 1334 | # CONFIG_EXT4DEV_FS is not set | 39 | CONFIG_FUSION_CTL=m |
| 1335 | CONFIG_JBD=y | 40 | CONFIG_FUSION_FC=y |
| 1336 | # CONFIG_JBD_DEBUG is not set | 41 | CONFIG_FUSION_SPI=y |
| 1337 | CONFIG_FS_MBCACHE=y | 42 | CONFIG_FUSION=y |
| 1338 | # CONFIG_REISERFS_FS is not set | 43 | CONFIG_HOTPLUG_CPU=y |
| 1339 | # CONFIG_JFS_FS is not set | 44 | CONFIG_HOTPLUG_PCI_ACPI=y |
| 1340 | # CONFIG_FS_POSIX_ACL is not set | 45 | CONFIG_HOTPLUG_PCI=y |
| 1341 | # CONFIG_XFS_FS is not set | 46 | CONFIG_HUGETLBFS=y |
| 1342 | # CONFIG_GFS2_FS is not set | 47 | # CONFIG_HWMON is not set |
| 1343 | # CONFIG_OCFS2_FS is not set | 48 | # CONFIG_HW_RANDOM is not set |
| 1344 | # CONFIG_MINIX_FS is not set | 49 | CONFIG_I2C_CHARDEV=y |
| 1345 | # CONFIG_ROMFS_FS is not set | 50 | CONFIG_IA64_HP_ZX1=y |
| 1346 | # CONFIG_INOTIFY is not set | 51 | CONFIG_IA64_MCA_RECOVERY=y |
| 1347 | # CONFIG_QUOTA is not set | 52 | CONFIG_IA64_PALINFO=y |
| 1348 | CONFIG_DNOTIFY=y | 53 | CONFIG_IA64_PRINT_HAZARDS=y |
| 1349 | CONFIG_AUTOFS_FS=y | 54 | CONFIG_IDE=y |
| 1350 | # CONFIG_AUTOFS4_FS is not set | 55 | CONFIG_INET=y |
| 1351 | # CONFIG_FUSE_FS is not set | 56 | CONFIG_INPUT_EVDEV=y |
| 1352 | 57 | CONFIG_INPUT_JOYDEV=y | |
| 1353 | # | 58 | # CONFIG_INPUT_KEYBOARD is not set |
| 1354 | # CD-ROM/DVD Filesystems | 59 | # CONFIG_INPUT_MOUSE is not set |
| 1355 | # | 60 | CONFIG_IP_MULTICAST=y |
| 61 | # CONFIG_IPV6 is not set | ||
| 1356 | CONFIG_ISO9660_FS=y | 62 | CONFIG_ISO9660_FS=y |
| 1357 | CONFIG_JOLIET=y | 63 | CONFIG_JOLIET=y |
| 1358 | # CONFIG_ZISOFS is not set | 64 | CONFIG_KPROBES=y |
| 1359 | CONFIG_UDF_FS=y | 65 | # CONFIG_LOGO_LINUX_MONO is not set |
| 1360 | CONFIG_UDF_NLS=y | 66 | # CONFIG_LOGO_LINUX_VGA16 is not set |
| 1361 | 67 | CONFIG_LOGO=y | |
| 1362 | # | 68 | CONFIG_MAGIC_SYSRQ=y |
| 1363 | # DOS/FAT/NT Filesystems | 69 | CONFIG_MCKINLEY=y |
| 1364 | # | 70 | CONFIG_MODULES=y |
| 1365 | CONFIG_FAT_FS=y | ||
| 1366 | CONFIG_MSDOS_FS=y | 71 | CONFIG_MSDOS_FS=y |
| 1367 | CONFIG_VFAT_FS=y | 72 | CONFIG_NETDEVICES=y |
| 1368 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 73 | CONFIG_NET_ETHERNET=y |
| 1369 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 74 | CONFIG_NETFILTER=y |
| 1370 | # CONFIG_NTFS_FS is not set | 75 | CONFIG_NET_PCI=y |
| 1371 | 76 | CONFIG_NET_TULIP=y | |
| 1372 | # | 77 | CONFIG_NFSD_V3=y |
| 1373 | # Pseudo filesystems | 78 | CONFIG_NFSD=y |
| 1374 | # | ||
| 1375 | CONFIG_PROC_FS=y | ||
| 1376 | CONFIG_PROC_KCORE=y | ||
| 1377 | CONFIG_PROC_VMCORE=y | ||
| 1378 | CONFIG_PROC_SYSCTL=y | ||
| 1379 | CONFIG_SYSFS=y | ||
| 1380 | CONFIG_TMPFS=y | ||
| 1381 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1382 | CONFIG_HUGETLBFS=y | ||
| 1383 | CONFIG_HUGETLB_PAGE=y | ||
| 1384 | CONFIG_RAMFS=y | ||
| 1385 | # CONFIG_CONFIGFS_FS is not set | ||
| 1386 | |||
| 1387 | # | ||
| 1388 | # Miscellaneous filesystems | ||
| 1389 | # | ||
| 1390 | # CONFIG_ADFS_FS is not set | ||
| 1391 | # CONFIG_AFFS_FS is not set | ||
| 1392 | # CONFIG_HFS_FS is not set | ||
| 1393 | # CONFIG_HFSPLUS_FS is not set | ||
| 1394 | # CONFIG_BEFS_FS is not set | ||
| 1395 | # CONFIG_BFS_FS is not set | ||
| 1396 | # CONFIG_EFS_FS is not set | ||
| 1397 | # CONFIG_CRAMFS is not set | ||
| 1398 | # CONFIG_VXFS_FS is not set | ||
| 1399 | # CONFIG_HPFS_FS is not set | ||
| 1400 | # CONFIG_QNX4FS_FS is not set | ||
| 1401 | # CONFIG_SYSV_FS is not set | ||
| 1402 | # CONFIG_UFS_FS is not set | ||
| 1403 | |||
| 1404 | # | ||
| 1405 | # Network File Systems | ||
| 1406 | # | ||
| 1407 | CONFIG_NFS_FS=y | 79 | CONFIG_NFS_FS=y |
| 1408 | CONFIG_NFS_V3=y | 80 | CONFIG_NFS_V3=y |
| 1409 | # CONFIG_NFS_V3_ACL is not set | ||
| 1410 | CONFIG_NFS_V4=y | 81 | CONFIG_NFS_V4=y |
| 1411 | # CONFIG_NFS_DIRECTIO is not set | 82 | CONFIG_NLS_CODEPAGE_1251=y |
| 1412 | CONFIG_NFSD=y | ||
| 1413 | CONFIG_NFSD_V3=y | ||
| 1414 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1415 | # CONFIG_NFSD_V4 is not set | ||
| 1416 | # CONFIG_NFSD_TCP is not set | ||
| 1417 | CONFIG_LOCKD=y | ||
| 1418 | CONFIG_LOCKD_V4=y | ||
| 1419 | CONFIG_EXPORTFS=y | ||
| 1420 | CONFIG_NFS_COMMON=y | ||
| 1421 | CONFIG_SUNRPC=y | ||
| 1422 | CONFIG_SUNRPC_GSS=y | ||
| 1423 | CONFIG_RPCSEC_GSS_KRB5=y | ||
| 1424 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1425 | # CONFIG_SMB_FS is not set | ||
| 1426 | # CONFIG_CIFS is not set | ||
| 1427 | # CONFIG_NCP_FS is not set | ||
| 1428 | # CONFIG_CODA_FS is not set | ||
| 1429 | # CONFIG_AFS_FS is not set | ||
| 1430 | # CONFIG_9P_FS is not set | ||
| 1431 | |||
| 1432 | # | ||
| 1433 | # Partition Types | ||
| 1434 | # | ||
| 1435 | CONFIG_PARTITION_ADVANCED=y | ||
| 1436 | # CONFIG_ACORN_PARTITION is not set | ||
| 1437 | # CONFIG_OSF_PARTITION is not set | ||
| 1438 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1439 | # CONFIG_ATARI_PARTITION is not set | ||
| 1440 | # CONFIG_MAC_PARTITION is not set | ||
| 1441 | CONFIG_MSDOS_PARTITION=y | ||
| 1442 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1443 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1444 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1445 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1446 | # CONFIG_LDM_PARTITION is not set | ||
| 1447 | # CONFIG_SGI_PARTITION is not set | ||
| 1448 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1449 | # CONFIG_SUN_PARTITION is not set | ||
| 1450 | # CONFIG_KARMA_PARTITION is not set | ||
| 1451 | CONFIG_EFI_PARTITION=y | ||
| 1452 | |||
| 1453 | # | ||
| 1454 | # Native Language Support | ||
| 1455 | # | ||
| 1456 | CONFIG_NLS=y | ||
| 1457 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1458 | CONFIG_NLS_CODEPAGE_437=y | 83 | CONFIG_NLS_CODEPAGE_437=y |
| 1459 | CONFIG_NLS_CODEPAGE_737=y | 84 | CONFIG_NLS_CODEPAGE_737=y |
| 1460 | CONFIG_NLS_CODEPAGE_775=y | 85 | CONFIG_NLS_CODEPAGE_775=y |
| @@ -1470,15 +95,14 @@ CONFIG_NLS_CODEPAGE_864=y | |||
| 1470 | CONFIG_NLS_CODEPAGE_865=y | 95 | CONFIG_NLS_CODEPAGE_865=y |
| 1471 | CONFIG_NLS_CODEPAGE_866=y | 96 | CONFIG_NLS_CODEPAGE_866=y |
| 1472 | CONFIG_NLS_CODEPAGE_869=y | 97 | CONFIG_NLS_CODEPAGE_869=y |
| 1473 | CONFIG_NLS_CODEPAGE_936=y | 98 | CONFIG_NLS_CODEPAGE_874=y |
| 1474 | CONFIG_NLS_CODEPAGE_950=y | ||
| 1475 | CONFIG_NLS_CODEPAGE_932=y | 99 | CONFIG_NLS_CODEPAGE_932=y |
| 100 | CONFIG_NLS_CODEPAGE_936=y | ||
| 1476 | CONFIG_NLS_CODEPAGE_949=y | 101 | CONFIG_NLS_CODEPAGE_949=y |
| 1477 | CONFIG_NLS_CODEPAGE_874=y | 102 | CONFIG_NLS_CODEPAGE_950=y |
| 1478 | CONFIG_NLS_ISO8859_8=y | 103 | CONFIG_NLS_ISO8859_13=y |
| 1479 | # CONFIG_NLS_CODEPAGE_1250 is not set | 104 | CONFIG_NLS_ISO8859_14=y |
| 1480 | CONFIG_NLS_CODEPAGE_1251=y | 105 | CONFIG_NLS_ISO8859_15=y |
| 1481 | # CONFIG_NLS_ASCII is not set | ||
| 1482 | CONFIG_NLS_ISO8859_1=y | 106 | CONFIG_NLS_ISO8859_1=y |
| 1483 | CONFIG_NLS_ISO8859_2=y | 107 | CONFIG_NLS_ISO8859_2=y |
| 1484 | CONFIG_NLS_ISO8859_3=y | 108 | CONFIG_NLS_ISO8859_3=y |
| @@ -1486,125 +110,52 @@ CONFIG_NLS_ISO8859_4=y | |||
| 1486 | CONFIG_NLS_ISO8859_5=y | 110 | CONFIG_NLS_ISO8859_5=y |
| 1487 | CONFIG_NLS_ISO8859_6=y | 111 | CONFIG_NLS_ISO8859_6=y |
| 1488 | CONFIG_NLS_ISO8859_7=y | 112 | CONFIG_NLS_ISO8859_7=y |
| 113 | CONFIG_NLS_ISO8859_8=y | ||
| 1489 | CONFIG_NLS_ISO8859_9=y | 114 | CONFIG_NLS_ISO8859_9=y |
| 1490 | CONFIG_NLS_ISO8859_13=y | ||
| 1491 | CONFIG_NLS_ISO8859_14=y | ||
| 1492 | CONFIG_NLS_ISO8859_15=y | ||
| 1493 | CONFIG_NLS_KOI8_R=y | 115 | CONFIG_NLS_KOI8_R=y |
| 1494 | CONFIG_NLS_KOI8_U=y | 116 | CONFIG_NLS_KOI8_U=y |
| 1495 | CONFIG_NLS_UTF8=y | 117 | CONFIG_NLS_UTF8=y |
| 1496 | 118 | CONFIG_NR_CPUS=16 | |
| 1497 | # | 119 | CONFIG_PACKET=y |
| 1498 | # Distributed Lock Manager | 120 | CONFIG_PARTITION_ADVANCED=y |
| 1499 | # | 121 | CONFIG_PERFMON=y |
| 1500 | # CONFIG_DLM is not set | 122 | CONFIG_PROC_KCORE=y |
| 1501 | 123 | CONFIG_SCSI_CONSTANTS=y | |
| 1502 | # | 124 | CONFIG_SCSI_LOGGING=y |
| 1503 | # Library routines | 125 | CONFIG_SCSI_MULTI_LUN=y |
| 1504 | # | 126 | CONFIG_SCSI_QLOGIC_1280=y |
| 1505 | CONFIG_BITREVERSE=y | 127 | CONFIG_SCSI_SYM53C8XX_2=y |
| 1506 | # CONFIG_CRC_CCITT is not set | 128 | CONFIG_SCSI=y |
| 1507 | # CONFIG_CRC16 is not set | 129 | CONFIG_SERIAL_8250_CONSOLE=y |
| 1508 | CONFIG_CRC32=y | 130 | CONFIG_SERIAL_8250_EXTENDED=y |
| 1509 | # CONFIG_LIBCRC32C is not set | 131 | CONFIG_SERIAL_8250_NR_UARTS=8 |
| 1510 | CONFIG_PLIST=y | 132 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 1511 | CONFIG_HAS_IOMEM=y | 133 | CONFIG_SERIAL_8250=y |
| 1512 | CONFIG_HAS_IOPORT=y | 134 | # CONFIG_SERIO_I8042 is not set |
| 1513 | CONFIG_GENERIC_HARDIRQS=y | 135 | # CONFIG_SERIO_SERPORT is not set |
| 1514 | CONFIG_GENERIC_IRQ_PROBE=y | 136 | CONFIG_SMP=y |
| 1515 | CONFIG_GENERIC_PENDING_IRQ=y | 137 | CONFIG_SND_FM801=y |
| 1516 | CONFIG_IRQ_PER_CPU=y | 138 | CONFIG_SND_MIXER_OSS=y |
| 1517 | 139 | CONFIG_SND_PCM_OSS=y | |
| 1518 | # | 140 | CONFIG_SND_SEQUENCER_OSS=y |
| 1519 | # Instrumentation Support | 141 | CONFIG_SND_SEQUENCER=y |
| 1520 | # | 142 | CONFIG_SND=y |
| 1521 | # CONFIG_PROFILING is not set | 143 | CONFIG_SOUND=y |
| 1522 | CONFIG_KPROBES=y | 144 | CONFIG_SYSVIPC=y |
| 1523 | 145 | CONFIG_TIGON3=y | |
| 1524 | # | 146 | CONFIG_TMPFS=y |
| 1525 | # Kernel hacking | 147 | CONFIG_TULIP_MMIO=y |
| 1526 | # | 148 | CONFIG_TULIP_MWI=y |
| 1527 | # CONFIG_PRINTK_TIME is not set | 149 | CONFIG_TULIP_NAPI_HW_MITIGATION=y |
| 1528 | CONFIG_ENABLE_MUST_CHECK=y | 150 | CONFIG_TULIP_NAPI=y |
| 1529 | CONFIG_MAGIC_SYSRQ=y | 151 | CONFIG_TULIP=y |
| 1530 | # CONFIG_UNUSED_SYMBOLS is not set | 152 | CONFIG_UDF_FS=y |
| 1531 | # CONFIG_DEBUG_FS is not set | 153 | CONFIG_UNIX=y |
| 1532 | # CONFIG_HEADERS_CHECK is not set | 154 | CONFIG_USB_EHCI_HCD=y |
| 1533 | CONFIG_DEBUG_KERNEL=y | 155 | CONFIG_USB_HIDDEV=y |
| 1534 | # CONFIG_DEBUG_SHIRQ is not set | 156 | CONFIG_USB_MON=y |
| 1535 | CONFIG_LOG_BUF_SHIFT=17 | 157 | CONFIG_USB_OHCI_HCD=y |
| 1536 | CONFIG_DETECT_SOFTLOCKUP=y | 158 | CONFIG_USB_STORAGE=y |
| 1537 | # CONFIG_SCHEDSTATS is not set | 159 | CONFIG_USB_UHCI_HCD=y |
| 1538 | # CONFIG_TIMER_STATS is not set | 160 | CONFIG_USB=y |
| 1539 | # CONFIG_DEBUG_SLAB is not set | 161 | CONFIG_VFAT_FS=y |
| 1540 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1541 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1542 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1543 | CONFIG_DEBUG_MUTEXES=y | ||
| 1544 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1545 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1546 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1547 | # CONFIG_DEBUG_INFO is not set | ||
| 1548 | # CONFIG_DEBUG_VM is not set | ||
| 1549 | # CONFIG_DEBUG_LIST is not set | ||
| 1550 | CONFIG_FORCED_INLINING=y | ||
| 1551 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1552 | # CONFIG_LKDTM is not set | ||
| 1553 | # CONFIG_FAULT_INJECTION is not set | ||
| 1554 | CONFIG_IA64_GRANULE_16MB=y | ||
| 1555 | # CONFIG_IA64_GRANULE_64MB is not set | ||
| 1556 | CONFIG_IA64_PRINT_HAZARDS=y | ||
| 1557 | # CONFIG_DISABLE_VHPT is not set | ||
| 1558 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||
| 1559 | # CONFIG_IA64_DEBUG_IRQ is not set | ||
| 1560 | CONFIG_SYSVIPC_COMPAT=y | ||
| 1561 | |||
| 1562 | # | ||
| 1563 | # Security options | ||
| 1564 | # | ||
| 1565 | # CONFIG_KEYS is not set | ||
| 1566 | # CONFIG_SECURITY is not set | ||
| 1567 | |||
| 1568 | # | ||
| 1569 | # Cryptographic options | ||
| 1570 | # | ||
| 1571 | CONFIG_CRYPTO=y | ||
| 1572 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1573 | CONFIG_CRYPTO_BLKCIPHER=y | ||
| 1574 | CONFIG_CRYPTO_MANAGER=y | ||
| 1575 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1576 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1577 | # CONFIG_CRYPTO_NULL is not set | ||
| 1578 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1579 | CONFIG_CRYPTO_MD5=y | ||
| 1580 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1581 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1582 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1583 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1584 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1585 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1586 | CONFIG_CRYPTO_ECB=m | ||
| 1587 | CONFIG_CRYPTO_CBC=y | ||
| 1588 | CONFIG_CRYPTO_PCBC=m | ||
| 1589 | # CONFIG_CRYPTO_LRW is not set | ||
| 1590 | CONFIG_CRYPTO_DES=y | ||
| 1591 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1592 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1593 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1594 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1595 | # CONFIG_CRYPTO_AES is not set | ||
| 1596 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1597 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1598 | # CONFIG_CRYPTO_TEA is not set | ||
| 1599 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1600 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1601 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1602 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1603 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1604 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1605 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1606 | # CONFIG_CRYPTO_TEST is not set | ||
| 1607 | |||
| 1608 | # | ||
| 1609 | # Hardware crypto devices | ||
| 1610 | # | ||
diff --git a/arch/ia64/include/asm/page.h b/arch/ia64/include/asm/page.h index 5f271bc712ee..41b6d31110fd 100644 --- a/arch/ia64/include/asm/page.h +++ b/arch/ia64/include/asm/page.h | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #define PAGE_SIZE (__IA64_UL_CONST(1) << PAGE_SHIFT) | 41 | #define PAGE_SIZE (__IA64_UL_CONST(1) << PAGE_SHIFT) |
| 42 | #define PAGE_MASK (~(PAGE_SIZE - 1)) | 42 | #define PAGE_MASK (~(PAGE_SIZE - 1)) |
| 43 | 43 | ||
| 44 | #define PERCPU_PAGE_SHIFT 16 /* log2() of max. size of per-CPU area */ | 44 | #define PERCPU_PAGE_SHIFT 18 /* log2() of max. size of per-CPU area */ |
| 45 | #define PERCPU_PAGE_SIZE (__IA64_UL_CONST(1) << PERCPU_PAGE_SHIFT) | 45 | #define PERCPU_PAGE_SIZE (__IA64_UL_CONST(1) << PERCPU_PAGE_SHIFT) |
| 46 | 46 | ||
| 47 | 47 | ||
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index ab985f785c14..744329072f33 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
| @@ -1696,8 +1696,8 @@ pfm_poll(struct file *filp, poll_table * wait) | |||
| 1696 | return mask; | 1696 | return mask; |
| 1697 | } | 1697 | } |
| 1698 | 1698 | ||
| 1699 | static int | 1699 | static long |
| 1700 | pfm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | 1700 | pfm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 1701 | { | 1701 | { |
| 1702 | DPRINT(("pfm_ioctl called\n")); | 1702 | DPRINT(("pfm_ioctl called\n")); |
| 1703 | return -EINVAL; | 1703 | return -EINVAL; |
| @@ -2174,15 +2174,15 @@ pfm_no_open(struct inode *irrelevant, struct file *dontcare) | |||
| 2174 | 2174 | ||
| 2175 | 2175 | ||
| 2176 | static const struct file_operations pfm_file_ops = { | 2176 | static const struct file_operations pfm_file_ops = { |
| 2177 | .llseek = no_llseek, | 2177 | .llseek = no_llseek, |
| 2178 | .read = pfm_read, | 2178 | .read = pfm_read, |
| 2179 | .write = pfm_write, | 2179 | .write = pfm_write, |
| 2180 | .poll = pfm_poll, | 2180 | .poll = pfm_poll, |
| 2181 | .ioctl = pfm_ioctl, | 2181 | .unlocked_ioctl = pfm_ioctl, |
| 2182 | .open = pfm_no_open, /* special open code to disallow open via /proc */ | 2182 | .open = pfm_no_open, /* special open code to disallow open via /proc */ |
| 2183 | .fasync = pfm_fasync, | 2183 | .fasync = pfm_fasync, |
| 2184 | .release = pfm_close, | 2184 | .release = pfm_close, |
| 2185 | .flush = pfm_flush | 2185 | .flush = pfm_flush |
| 2186 | }; | 2186 | }; |
| 2187 | 2187 | ||
| 2188 | static int | 2188 | static int |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index e07218a2577f..5a4d044dcb1c 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -6,204 +6,209 @@ | |||
| 6 | 6 | ||
| 7 | #include <asm-generic/vmlinux.lds.h> | 7 | #include <asm-generic/vmlinux.lds.h> |
| 8 | 8 | ||
| 9 | #define IVT_TEXT \ | ||
| 10 | VMLINUX_SYMBOL(__start_ivt_text) = .; \ | ||
| 11 | *(.text..ivt) \ | ||
| 12 | VMLINUX_SYMBOL(__end_ivt_text) = .; | ||
| 13 | |||
| 14 | OUTPUT_FORMAT("elf64-ia64-little") | 9 | OUTPUT_FORMAT("elf64-ia64-little") |
| 15 | OUTPUT_ARCH(ia64) | 10 | OUTPUT_ARCH(ia64) |
| 16 | ENTRY(phys_start) | 11 | ENTRY(phys_start) |
| 17 | jiffies = jiffies_64; | 12 | jiffies = jiffies_64; |
| 13 | |||
| 18 | PHDRS { | 14 | PHDRS { |
| 19 | code PT_LOAD; | 15 | code PT_LOAD; |
| 20 | percpu PT_LOAD; | 16 | percpu PT_LOAD; |
| 21 | data PT_LOAD; | 17 | data PT_LOAD; |
| 22 | note PT_NOTE; | 18 | note PT_NOTE; |
| 23 | unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ | 19 | unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ |
| 24 | } | 20 | } |
| 25 | SECTIONS | ||
| 26 | { | ||
| 27 | /* unwind exit sections must be discarded before the rest of the | ||
| 28 | sections get included. */ | ||
| 29 | /DISCARD/ : { | ||
| 30 | *(.IA_64.unwind.exit.text) | ||
| 31 | *(.IA_64.unwind_info.exit.text) | ||
| 32 | *(.comment) | ||
| 33 | *(.note) | ||
| 34 | } | ||
| 35 | |||
| 36 | v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ | ||
| 37 | phys_start = _start - LOAD_OFFSET; | ||
| 38 | |||
| 39 | code : { } :code | ||
| 40 | . = KERNEL_START; | ||
| 41 | |||
| 42 | _text = .; | ||
| 43 | _stext = .; | ||
| 44 | |||
| 45 | .text : AT(ADDR(.text) - LOAD_OFFSET) | ||
| 46 | { | ||
| 47 | IVT_TEXT | ||
| 48 | TEXT_TEXT | ||
| 49 | SCHED_TEXT | ||
| 50 | LOCK_TEXT | ||
| 51 | KPROBES_TEXT | ||
| 52 | *(.gnu.linkonce.t*) | ||
| 53 | } | ||
| 54 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) | ||
| 55 | { *(.text2) } | ||
| 56 | #ifdef CONFIG_SMP | ||
| 57 | .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) | ||
| 58 | { *(.text..lock) } | ||
| 59 | #endif | ||
| 60 | _etext = .; | ||
| 61 | 21 | ||
| 62 | /* Read-only data */ | 22 | SECTIONS { |
| 23 | /* | ||
| 24 | * unwind exit sections must be discarded before | ||
| 25 | * the rest of the sections get included. | ||
| 26 | */ | ||
| 27 | /DISCARD/ : { | ||
| 28 | *(.IA_64.unwind.exit.text) | ||
| 29 | *(.IA_64.unwind_info.exit.text) | ||
| 30 | *(.comment) | ||
| 31 | *(.note) | ||
| 32 | } | ||
| 63 | 33 | ||
| 64 | NOTES :code :note /* put .notes in text and mark in PT_NOTE */ | 34 | v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ |
| 65 | code_continues : {} :code /* switch back to regular program... */ | 35 | phys_start = _start - LOAD_OFFSET; |
| 36 | |||
| 37 | code : { | ||
| 38 | } :code | ||
| 39 | . = KERNEL_START; | ||
| 40 | |||
| 41 | _text = .; | ||
| 42 | _stext = .; | ||
| 43 | |||
| 44 | .text : AT(ADDR(.text) - LOAD_OFFSET) { | ||
| 45 | __start_ivt_text = .; | ||
| 46 | *(.text..ivt) | ||
| 47 | __end_ivt_text = .; | ||
| 48 | TEXT_TEXT | ||
| 49 | SCHED_TEXT | ||
| 50 | LOCK_TEXT | ||
| 51 | KPROBES_TEXT | ||
| 52 | *(.gnu.linkonce.t*) | ||
| 53 | } | ||
| 66 | 54 | ||
| 67 | EXCEPTION_TABLE(16) | 55 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) { |
| 56 | *(.text2) | ||
| 57 | } | ||
| 68 | 58 | ||
| 69 | /* MCA table */ | 59 | #ifdef CONFIG_SMP |
| 70 | . = ALIGN(16); | 60 | .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) { |
| 71 | __mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET) | 61 | *(.text..lock) |
| 72 | { | 62 | } |
| 73 | __start___mca_table = .; | 63 | #endif |
| 74 | *(__mca_table) | 64 | _etext = .; |
| 75 | __stop___mca_table = .; | 65 | |
| 66 | /* | ||
| 67 | * Read-only data | ||
| 68 | */ | ||
| 69 | NOTES :code :note /* put .notes in text and mark in PT_NOTE */ | ||
| 70 | code_continues : { | ||
| 71 | } : code /* switch back to regular program... */ | ||
| 72 | |||
| 73 | EXCEPTION_TABLE(16) | ||
| 74 | |||
| 75 | /* MCA table */ | ||
| 76 | . = ALIGN(16); | ||
| 77 | __mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET) { | ||
| 78 | __start___mca_table = .; | ||
| 79 | *(__mca_table) | ||
| 80 | __stop___mca_table = .; | ||
| 76 | } | 81 | } |
| 77 | 82 | ||
| 78 | .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) | 83 | .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) { |
| 79 | { | 84 | __start___phys_stack_reg_patchlist = .; |
| 80 | __start___phys_stack_reg_patchlist = .; | 85 | *(.data..patch.phys_stack_reg) |
| 81 | *(.data..patch.phys_stack_reg) | 86 | __end___phys_stack_reg_patchlist = .; |
| 82 | __end___phys_stack_reg_patchlist = .; | ||
| 83 | } | 87 | } |
| 84 | 88 | ||
| 85 | /* Global data */ | 89 | /* |
| 86 | _data = .; | 90 | * Global data |
| 91 | */ | ||
| 92 | _data = .; | ||
| 87 | 93 | ||
| 88 | /* Unwind info & table: */ | 94 | /* Unwind info & table: */ |
| 89 | . = ALIGN(8); | 95 | . = ALIGN(8); |
| 90 | .IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - LOAD_OFFSET) | 96 | .IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - LOAD_OFFSET) { |
| 91 | { *(.IA_64.unwind_info*) } | 97 | *(.IA_64.unwind_info*) |
| 92 | .IA_64.unwind : AT(ADDR(.IA_64.unwind) - LOAD_OFFSET) | 98 | } |
| 93 | { | 99 | .IA_64.unwind : AT(ADDR(.IA_64.unwind) - LOAD_OFFSET) { |
| 94 | __start_unwind = .; | 100 | __start_unwind = .; |
| 95 | *(.IA_64.unwind*) | 101 | *(.IA_64.unwind*) |
| 96 | __end_unwind = .; | 102 | __end_unwind = .; |
| 97 | } :code :unwind | 103 | } :code :unwind |
| 98 | code_continues2 : {} : code | 104 | code_continues2 : { |
| 105 | } : code | ||
| 99 | 106 | ||
| 100 | RODATA | 107 | RODATA |
| 101 | 108 | ||
| 102 | .opd : AT(ADDR(.opd) - LOAD_OFFSET) | 109 | .opd : AT(ADDR(.opd) - LOAD_OFFSET) { |
| 103 | { *(.opd) } | 110 | *(.opd) |
| 104 | 111 | } | |
| 105 | /* Initialization code and data: */ | ||
| 106 | 112 | ||
| 107 | . = ALIGN(PAGE_SIZE); | 113 | /* |
| 108 | __init_begin = .; | 114 | * Initialization code and data: |
| 115 | */ | ||
| 116 | . = ALIGN(PAGE_SIZE); | ||
| 117 | __init_begin = .; | ||
| 109 | 118 | ||
| 110 | INIT_TEXT_SECTION(PAGE_SIZE) | 119 | INIT_TEXT_SECTION(PAGE_SIZE) |
| 111 | INIT_DATA_SECTION(16) | 120 | INIT_DATA_SECTION(16) |
| 112 | 121 | ||
| 113 | .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) | 122 | .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) { |
| 114 | { | 123 | __start___vtop_patchlist = .; |
| 115 | __start___vtop_patchlist = .; | 124 | *(.data..patch.vtop) |
| 116 | *(.data..patch.vtop) | 125 | __end___vtop_patchlist = .; |
| 117 | __end___vtop_patchlist = .; | ||
| 118 | } | 126 | } |
| 119 | 127 | ||
| 120 | .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) | 128 | .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) { |
| 121 | { | 129 | __start___rse_patchlist = .; |
| 122 | __start___rse_patchlist = .; | 130 | *(.data..patch.rse) |
| 123 | *(.data..patch.rse) | 131 | __end___rse_patchlist = .; |
| 124 | __end___rse_patchlist = .; | ||
| 125 | } | 132 | } |
| 126 | 133 | ||
| 127 | .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) | 134 | .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) { |
| 128 | { | 135 | __start___mckinley_e9_bundles = .; |
| 129 | __start___mckinley_e9_bundles = .; | 136 | *(.data..patch.mckinley_e9) |
| 130 | *(.data..patch.mckinley_e9) | 137 | __end___mckinley_e9_bundles = .; |
| 131 | __end___mckinley_e9_bundles = .; | ||
| 132 | } | 138 | } |
| 133 | 139 | ||
| 134 | #if defined(CONFIG_PARAVIRT) | 140 | #if defined(CONFIG_PARAVIRT) |
| 135 | . = ALIGN(16); | 141 | . = ALIGN(16); |
| 136 | .paravirt_bundles : AT(ADDR(.paravirt_bundles) - LOAD_OFFSET) | 142 | .paravirt_bundles : AT(ADDR(.paravirt_bundles) - LOAD_OFFSET) { |
| 137 | { | 143 | __start_paravirt_bundles = .; |
| 138 | __start_paravirt_bundles = .; | 144 | *(.paravirt_bundles) |
| 139 | *(.paravirt_bundles) | 145 | __stop_paravirt_bundles = .; |
| 140 | __stop_paravirt_bundles = .; | 146 | } |
| 141 | } | 147 | . = ALIGN(16); |
| 142 | . = ALIGN(16); | 148 | .paravirt_insts : AT(ADDR(.paravirt_insts) - LOAD_OFFSET) { |
| 143 | .paravirt_insts : AT(ADDR(.paravirt_insts) - LOAD_OFFSET) | 149 | __start_paravirt_insts = .; |
| 144 | { | 150 | *(.paravirt_insts) |
| 145 | __start_paravirt_insts = .; | 151 | __stop_paravirt_insts = .; |
| 146 | *(.paravirt_insts) | 152 | } |
| 147 | __stop_paravirt_insts = .; | 153 | . = ALIGN(16); |
| 148 | } | 154 | .paravirt_branches : AT(ADDR(.paravirt_branches) - LOAD_OFFSET) { |
| 149 | . = ALIGN(16); | 155 | __start_paravirt_branches = .; |
| 150 | .paravirt_branches : AT(ADDR(.paravirt_branches) - LOAD_OFFSET) | 156 | *(.paravirt_branches) |
| 151 | { | 157 | __stop_paravirt_branches = .; |
| 152 | __start_paravirt_branches = .; | ||
| 153 | *(.paravirt_branches) | ||
| 154 | __stop_paravirt_branches = .; | ||
| 155 | } | 158 | } |
| 156 | #endif | 159 | #endif |
| 157 | 160 | ||
| 158 | #if defined(CONFIG_IA64_GENERIC) | 161 | #if defined(CONFIG_IA64_GENERIC) |
| 159 | /* Machine Vector */ | 162 | /* Machine Vector */ |
| 160 | . = ALIGN(16); | 163 | . = ALIGN(16); |
| 161 | .machvec : AT(ADDR(.machvec) - LOAD_OFFSET) | 164 | .machvec : AT(ADDR(.machvec) - LOAD_OFFSET) { |
| 162 | { | 165 | machvec_start = .; |
| 163 | machvec_start = .; | 166 | *(.machvec) |
| 164 | *(.machvec) | 167 | machvec_end = .; |
| 165 | machvec_end = .; | ||
| 166 | } | 168 | } |
| 167 | #endif | 169 | #endif |
| 168 | 170 | ||
| 169 | #ifdef CONFIG_SMP | 171 | #ifdef CONFIG_SMP |
| 170 | . = ALIGN(PERCPU_PAGE_SIZE); | 172 | . = ALIGN(PERCPU_PAGE_SIZE); |
| 171 | __cpu0_per_cpu = .; | 173 | __cpu0_per_cpu = .; |
| 172 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | 174 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ |
| 173 | #endif | 175 | #endif |
| 174 | 176 | ||
| 175 | . = ALIGN(PAGE_SIZE); | 177 | . = ALIGN(PAGE_SIZE); |
| 176 | __init_end = .; | 178 | __init_end = .; |
| 177 | 179 | ||
| 178 | .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) | 180 | .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) { |
| 179 | { | 181 | PAGE_ALIGNED_DATA(PAGE_SIZE) |
| 180 | PAGE_ALIGNED_DATA(PAGE_SIZE) | 182 | . = ALIGN(PAGE_SIZE); |
| 181 | . = ALIGN(PAGE_SIZE); | 183 | __start_gate_section = .; |
| 182 | __start_gate_section = .; | 184 | *(.data..gate) |
| 183 | *(.data..gate) | 185 | __stop_gate_section = .; |
| 184 | __stop_gate_section = .; | ||
| 185 | #ifdef CONFIG_XEN | 186 | #ifdef CONFIG_XEN |
| 186 | . = ALIGN(PAGE_SIZE); | 187 | . = ALIGN(PAGE_SIZE); |
| 187 | __xen_start_gate_section = .; | 188 | __xen_start_gate_section = .; |
| 188 | *(.data..gate.xen) | 189 | *(.data..gate.xen) |
| 189 | __xen_stop_gate_section = .; | 190 | __xen_stop_gate_section = .; |
| 190 | #endif | 191 | #endif |
| 191 | } | 192 | } |
| 192 | . = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose | 193 | /* |
| 193 | * kernel data | 194 | * make sure the gate page doesn't expose |
| 194 | */ | 195 | * kernel data |
| 195 | 196 | */ | |
| 196 | /* Per-cpu data: */ | 197 | . = ALIGN(PAGE_SIZE); |
| 197 | . = ALIGN(PERCPU_PAGE_SIZE); | 198 | |
| 198 | PERCPU_VADDR(PERCPU_ADDR, :percpu) | 199 | /* Per-cpu data: */ |
| 199 | __phys_per_cpu_start = __per_cpu_load; | 200 | . = ALIGN(PERCPU_PAGE_SIZE); |
| 200 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits | 201 | PERCPU_VADDR(PERCPU_ADDR, :percpu) |
| 201 | * into percpu page size | 202 | __phys_per_cpu_start = __per_cpu_load; |
| 202 | */ | 203 | /* |
| 203 | 204 | * ensure percpu data fits | |
| 204 | data : { } :data | 205 | * into percpu page size |
| 205 | .data : AT(ADDR(.data) - LOAD_OFFSET) | 206 | */ |
| 206 | { | 207 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; |
| 208 | |||
| 209 | data : { | ||
| 210 | } :data | ||
| 211 | .data : AT(ADDR(.data) - LOAD_OFFSET) { | ||
| 207 | INIT_TASK_DATA(PAGE_SIZE) | 212 | INIT_TASK_DATA(PAGE_SIZE) |
| 208 | CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES) | 213 | CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES) |
| 209 | READ_MOSTLY_DATA(SMP_CACHE_BYTES) | 214 | READ_MOSTLY_DATA(SMP_CACHE_BYTES) |
| @@ -213,26 +218,37 @@ SECTIONS | |||
| 213 | CONSTRUCTORS | 218 | CONSTRUCTORS |
| 214 | } | 219 | } |
| 215 | 220 | ||
| 216 | . = ALIGN(16); /* gp must be 16-byte aligned for exc. table */ | 221 | . = ALIGN(16); /* gp must be 16-byte aligned for exc. table */ |
| 217 | .got : AT(ADDR(.got) - LOAD_OFFSET) | 222 | .got : AT(ADDR(.got) - LOAD_OFFSET) { |
| 218 | { *(.got.plt) *(.got) } | 223 | *(.got.plt) |
| 219 | __gp = ADDR(.got) + 0x200000; | 224 | *(.got) |
| 220 | /* We want the small data sections together, so single-instruction offsets | 225 | } |
| 221 | can access them all, and initialized data all before uninitialized, so | 226 | __gp = ADDR(.got) + 0x200000; |
| 222 | we can shorten the on-disk segment size. */ | 227 | |
| 223 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) | 228 | /* |
| 224 | { *(.sdata) *(.sdata1) *(.srdata) } | 229 | * We want the small data sections together, |
| 225 | _edata = .; | 230 | * so single-instruction offsets can access |
| 231 | * them all, and initialized data all before | ||
| 232 | * uninitialized, so we can shorten the | ||
| 233 | * on-disk segment size. | ||
| 234 | */ | ||
| 235 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { | ||
| 236 | *(.sdata) | ||
| 237 | *(.sdata1) | ||
| 238 | *(.srdata) | ||
| 239 | } | ||
| 240 | _edata = .; | ||
| 226 | 241 | ||
| 227 | BSS_SECTION(0, 0, 0) | 242 | BSS_SECTION(0, 0, 0) |
| 228 | 243 | ||
| 229 | _end = .; | 244 | _end = .; |
| 230 | 245 | ||
| 231 | code : { } :code | 246 | code : { |
| 247 | } :code | ||
| 232 | 248 | ||
| 233 | STABS_DEBUG | 249 | STABS_DEBUG |
| 234 | DWARF_DEBUG | 250 | DWARF_DEBUG |
| 235 | 251 | ||
| 236 | /* Default discards */ | 252 | /* Default discards */ |
| 237 | DISCARDS | 253 | DISCARDS |
| 238 | } | 254 | } |
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 505a08592423..be3855250db6 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
| @@ -14,6 +14,7 @@ config MICROBLAZE | |||
| 14 | select USB_ARCH_HAS_EHCI | 14 | select USB_ARCH_HAS_EHCI |
| 15 | select ARCH_WANT_OPTIONAL_GPIOLIB | 15 | select ARCH_WANT_OPTIONAL_GPIOLIB |
| 16 | select HAVE_OPROFILE | 16 | select HAVE_OPROFILE |
| 17 | select HAVE_ARCH_KGDB | ||
| 17 | select HAVE_DMA_ATTRS | 18 | select HAVE_DMA_ATTRS |
| 18 | select HAVE_DMA_API_DEBUG | 19 | select HAVE_DMA_API_DEBUG |
| 19 | select TRACING_SUPPORT | 20 | select TRACING_SUPPORT |
| @@ -223,6 +224,36 @@ config TASK_SIZE | |||
| 223 | hex "Size of user task space" if TASK_SIZE_BOOL | 224 | hex "Size of user task space" if TASK_SIZE_BOOL |
| 224 | default "0x80000000" | 225 | default "0x80000000" |
| 225 | 226 | ||
| 227 | choice | ||
| 228 | prompt "Page size" | ||
| 229 | default MICROBLAZE_4K_PAGES | ||
| 230 | depends on ADVANCED_OPTIONS && !MMU | ||
| 231 | help | ||
| 232 | Select the kernel logical page size. Increasing the page size | ||
| 233 | will reduce software overhead at each page boundary, allow | ||
| 234 | hardware prefetch mechanisms to be more effective, and allow | ||
| 235 | larger dma transfers increasing IO efficiency and reducing | ||
| 236 | overhead. However the utilization of memory will increase. | ||
| 237 | For example, each cached file will using a multiple of the | ||
| 238 | page size to hold its contents and the difference between the | ||
| 239 | end of file and the end of page is wasted. | ||
| 240 | |||
| 241 | If unsure, choose 4K_PAGES. | ||
| 242 | |||
| 243 | config MICROBLAZE_4K_PAGES | ||
| 244 | bool "4k page size" | ||
| 245 | |||
| 246 | config MICROBLAZE_8K_PAGES | ||
| 247 | bool "8k page size" | ||
| 248 | |||
| 249 | config MICROBLAZE_16K_PAGES | ||
| 250 | bool "16k page size" | ||
| 251 | |||
| 252 | config MICROBLAZE_32K_PAGES | ||
| 253 | bool "32k page size" | ||
| 254 | |||
| 255 | endchoice | ||
| 256 | |||
| 226 | endmenu | 257 | endmenu |
| 227 | 258 | ||
| 228 | source "mm/Kconfig" | 259 | source "mm/Kconfig" |
diff --git a/arch/microblaze/Kconfig.debug b/arch/microblaze/Kconfig.debug index 9dc708a7f700..e6e5e0da28c3 100644 --- a/arch/microblaze/Kconfig.debug +++ b/arch/microblaze/Kconfig.debug | |||
| @@ -10,6 +10,7 @@ source "lib/Kconfig.debug" | |||
| 10 | 10 | ||
| 11 | config EARLY_PRINTK | 11 | config EARLY_PRINTK |
| 12 | bool "Early printk function for kernel" | 12 | bool "Early printk function for kernel" |
| 13 | depends on SERIAL_UARTLITE_CONSOLE | ||
| 13 | default n | 14 | default n |
| 14 | help | 15 | help |
| 15 | This option turns on/off early printk messages to console. | 16 | This option turns on/off early printk messages to console. |
diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile index 57f50c2371c6..be01d78750d9 100644 --- a/arch/microblaze/boot/Makefile +++ b/arch/microblaze/boot/Makefile | |||
| @@ -35,13 +35,14 @@ quiet_cmd_cp = CP $< $@$2 | |||
| 35 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) | 35 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) |
| 36 | 36 | ||
| 37 | quiet_cmd_strip = STRIP $@ | 37 | quiet_cmd_strip = STRIP $@ |
| 38 | cmd_strip = $(STRIP) -K _start -K _end -K __log_buf -K _fdt_start vmlinux -o $@ | 38 | cmd_strip = $(STRIP) -K microblaze_start -K _end -K __log_buf \ |
| 39 | -K _fdt_start vmlinux -o $@ | ||
| 39 | 40 | ||
| 40 | quiet_cmd_uimage = UIMAGE $@.ub | 41 | quiet_cmd_uimage = UIMAGE $@.ub |
| 41 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A microblaze -O linux -T kernel \ | 42 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A microblaze -O linux -T kernel \ |
| 42 | -C none -n 'Linux-$(KERNELRELEASE)' \ | 43 | -C none -n 'Linux-$(KERNELRELEASE)' \ |
| 43 | -a $(CONFIG_KERNEL_BASE_ADDR) -e $(CONFIG_KERNEL_BASE_ADDR) \ | 44 | -a $(CONFIG_KERNEL_BASE_ADDR) -e $(CONFIG_KERNEL_BASE_ADDR) \ |
| 44 | -d $@ $@.ub | 45 | -d $@ $@.ub |
| 45 | 46 | ||
| 46 | $(obj)/simpleImage.%: vmlinux FORCE | 47 | $(obj)/simpleImage.%: vmlinux FORCE |
| 47 | $(call if_changed,cp,.unstrip) | 48 | $(call if_changed,cp,.unstrip) |
diff --git a/arch/microblaze/include/asm/cacheflush.h b/arch/microblaze/include/asm/cacheflush.h index a6edd356cd08..7ebd955460d9 100644 --- a/arch/microblaze/include/asm/cacheflush.h +++ b/arch/microblaze/include/asm/cacheflush.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | /* Somebody depends on this; sigh... */ | 18 | /* Somebody depends on this; sigh... */ |
| 19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
| 20 | #include <linux/io.h> | ||
| 20 | 21 | ||
| 21 | /* Look at Documentation/cachetlb.txt */ | 22 | /* Look at Documentation/cachetlb.txt */ |
| 22 | 23 | ||
| @@ -60,7 +61,6 @@ void microblaze_cache_init(void); | |||
| 60 | #define invalidate_icache() mbc->iin(); | 61 | #define invalidate_icache() mbc->iin(); |
| 61 | #define invalidate_icache_range(start, end) mbc->iinr(start, end); | 62 | #define invalidate_icache_range(start, end) mbc->iinr(start, end); |
| 62 | 63 | ||
| 63 | |||
| 64 | #define flush_icache_user_range(vma, pg, adr, len) flush_icache(); | 64 | #define flush_icache_user_range(vma, pg, adr, len) flush_icache(); |
| 65 | #define flush_icache_page(vma, pg) do { } while (0) | 65 | #define flush_icache_page(vma, pg) do { } while (0) |
| 66 | 66 | ||
| @@ -72,9 +72,15 @@ void microblaze_cache_init(void); | |||
| 72 | #define flush_dcache() mbc->dfl(); | 72 | #define flush_dcache() mbc->dfl(); |
| 73 | #define flush_dcache_range(start, end) mbc->dflr(start, end); | 73 | #define flush_dcache_range(start, end) mbc->dflr(start, end); |
| 74 | 74 | ||
| 75 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | 75 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 |
| 76 | /* D-cache aliasing problem can't happen - cache is between MMU and ram */ | 76 | /* MS: We have to implement it because of rootfs-jffs2 issue on WB */ |
| 77 | #define flush_dcache_page(page) do { } while (0) | 77 | #define flush_dcache_page(page) \ |
| 78 | do { \ | ||
| 79 | unsigned long addr = (unsigned long) page_address(page); /* virtual */ \ | ||
| 80 | addr = (u32)virt_to_phys((void *)addr); \ | ||
| 81 | flush_dcache_range((unsigned) (addr), (unsigned) (addr) + PAGE_SIZE); \ | ||
| 82 | } while (0); | ||
| 83 | |||
| 78 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 84 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
| 79 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 85 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
| 80 | 86 | ||
| @@ -97,8 +103,10 @@ void microblaze_cache_init(void); | |||
| 97 | 103 | ||
| 98 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | 104 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ |
| 99 | do { \ | 105 | do { \ |
| 106 | u32 addr = virt_to_phys(dst); \ | ||
| 107 | invalidate_icache_range((unsigned) (addr), (unsigned) (addr) + (len));\ | ||
| 100 | memcpy((dst), (src), (len)); \ | 108 | memcpy((dst), (src), (len)); \ |
| 101 | flush_icache_range((unsigned) (dst), (unsigned) (dst) + (len)); \ | 109 | flush_dcache_range((unsigned) (addr), (unsigned) (addr) + (len));\ |
| 102 | } while (0) | 110 | } while (0) |
| 103 | 111 | ||
| 104 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 112 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index 18b3731c8509..507389580709 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h | |||
| @@ -79,12 +79,6 @@ static inline int dma_supported(struct device *dev, u64 mask) | |||
| 79 | return ops->dma_supported(dev, mask); | 79 | return ops->dma_supported(dev, mask); |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | #ifdef CONFIG_PCI | ||
| 83 | /* We have our own implementation of pci_set_dma_mask() */ | ||
| 84 | #define HAVE_ARCH_PCI_SET_DMA_MASK | ||
| 85 | |||
| 86 | #endif | ||
| 87 | |||
| 88 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) | 82 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) |
| 89 | { | 83 | { |
| 90 | struct dma_map_ops *ops = get_dma_ops(dev); | 84 | struct dma_map_ops *ops = get_dma_ops(dev); |
diff --git a/arch/microblaze/include/asm/elf.h b/arch/microblaze/include/asm/elf.h index 7d4acf2b278e..732caf1be741 100644 --- a/arch/microblaze/include/asm/elf.h +++ b/arch/microblaze/include/asm/elf.h | |||
| @@ -77,7 +77,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |||
| 77 | #define ELF_DATA ELFDATA2MSB | 77 | #define ELF_DATA ELFDATA2MSB |
| 78 | #endif | 78 | #endif |
| 79 | 79 | ||
| 80 | #define ELF_EXEC_PAGESIZE 4096 | 80 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
| 81 | 81 | ||
| 82 | 82 | ||
| 83 | #define ELF_CORE_COPY_REGS(_dest, _regs) \ | 83 | #define ELF_CORE_COPY_REGS(_dest, _regs) \ |
diff --git a/arch/microblaze/include/asm/exceptions.h b/arch/microblaze/include/asm/exceptions.h index 4c7b5d037c88..6479097b802b 100644 --- a/arch/microblaze/include/asm/exceptions.h +++ b/arch/microblaze/include/asm/exceptions.h | |||
| @@ -14,6 +14,11 @@ | |||
| 14 | #define _ASM_MICROBLAZE_EXCEPTIONS_H | 14 | #define _ASM_MICROBLAZE_EXCEPTIONS_H |
| 15 | 15 | ||
| 16 | #ifdef __KERNEL__ | 16 | #ifdef __KERNEL__ |
| 17 | |||
| 18 | #ifndef CONFIG_MMU | ||
| 19 | #define EX_HANDLER_STACK_SIZ (4*19) | ||
| 20 | #endif | ||
| 21 | |||
| 17 | #ifndef __ASSEMBLY__ | 22 | #ifndef __ASSEMBLY__ |
| 18 | 23 | ||
| 19 | /* Macros to enable and disable HW exceptions in the MSR */ | 24 | /* Macros to enable and disable HW exceptions in the MSR */ |
| @@ -64,22 +69,6 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, | |||
| 64 | void die(const char *str, struct pt_regs *fp, long err); | 69 | void die(const char *str, struct pt_regs *fp, long err); |
| 65 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr); | 70 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr); |
| 66 | 71 | ||
| 67 | #if defined(CONFIG_KGDB) | ||
| 68 | void (*debugger)(struct pt_regs *regs); | ||
| 69 | int (*debugger_bpt)(struct pt_regs *regs); | ||
| 70 | int (*debugger_sstep)(struct pt_regs *regs); | ||
| 71 | int (*debugger_iabr_match)(struct pt_regs *regs); | ||
| 72 | int (*debugger_dabr_match)(struct pt_regs *regs); | ||
| 73 | void (*debugger_fault_handler)(struct pt_regs *regs); | ||
| 74 | #else | ||
| 75 | #define debugger(regs) do { } while (0) | ||
| 76 | #define debugger_bpt(regs) 0 | ||
| 77 | #define debugger_sstep(regs) 0 | ||
| 78 | #define debugger_iabr_match(regs) 0 | ||
| 79 | #define debugger_dabr_match(regs) 0 | ||
| 80 | #define debugger_fault_handler ((void (*)(struct pt_regs *))0) | ||
| 81 | #endif | ||
| 82 | |||
| 83 | #endif /*__ASSEMBLY__ */ | 72 | #endif /*__ASSEMBLY__ */ |
| 84 | #endif /* __KERNEL__ */ | 73 | #endif /* __KERNEL__ */ |
| 85 | #endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */ | 74 | #endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */ |
diff --git a/arch/microblaze/include/asm/kgdb.h b/arch/microblaze/include/asm/kgdb.h new file mode 100644 index 000000000000..78b17d40b235 --- /dev/null +++ b/arch/microblaze/include/asm/kgdb.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | #ifdef __KERNEL__ | ||
| 2 | #ifndef __MICROBLAZE_KGDB_H__ | ||
| 3 | #define __MICROBLAZE_KGDB_H__ | ||
| 4 | |||
| 5 | #ifndef __ASSEMBLY__ | ||
| 6 | |||
| 7 | #define CACHE_FLUSH_IS_SAFE 1 | ||
| 8 | #define BUFMAX 2048 | ||
| 9 | |||
| 10 | /* | ||
| 11 | * 32 32-bit general purpose registers (r0-r31) | ||
| 12 | * 6 32-bit special registers (pc, msr, ear, esr, fsr, btr) | ||
| 13 | * 12 32-bit PVR | ||
| 14 | * 7 32-bit MMU Regs (redr, rpid, rzpr, rtlbx, rtlbsx, rtlblo, rtlbhi) | ||
| 15 | * ------ | ||
| 16 | * 57 registers | ||
| 17 | */ | ||
| 18 | #define NUMREGBYTES (57 * 4) | ||
| 19 | |||
| 20 | #define BREAK_INSTR_SIZE 4 | ||
| 21 | static inline void arch_kgdb_breakpoint(void) | ||
| 22 | { | ||
| 23 | __asm__ __volatile__("brki r16, 0x18;"); | ||
| 24 | } | ||
| 25 | |||
| 26 | #endif /* __ASSEMBLY__ */ | ||
| 27 | #endif /* __MICROBLAZE_KGDB_H__ */ | ||
| 28 | #endif /* __KERNEL__ */ | ||
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index 464ff32bee3d..c12c6dfafd9f 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h | |||
| @@ -23,8 +23,16 @@ | |||
| 23 | #ifdef __KERNEL__ | 23 | #ifdef __KERNEL__ |
| 24 | 24 | ||
| 25 | /* PAGE_SHIFT determines the page size */ | 25 | /* PAGE_SHIFT determines the page size */ |
| 26 | #define PAGE_SHIFT (12) | 26 | #if defined(CONFIG_MICROBLAZE_32K_PAGES) |
| 27 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) | 27 | #define PAGE_SHIFT 15 |
| 28 | #elif defined(CONFIG_MICROBLAZE_16K_PAGES) | ||
| 29 | #define PAGE_SHIFT 14 | ||
| 30 | #elif defined(CONFIG_MICROBLAZE_8K_PAGES) | ||
| 31 | #define PAGE_SHIFT 13 | ||
| 32 | #else | ||
| 33 | #define PAGE_SHIFT 12 | ||
| 34 | #endif | ||
| 35 | #define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) | ||
| 28 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 36 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
| 29 | 37 | ||
| 30 | #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR)) | 38 | #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR)) |
diff --git a/arch/microblaze/include/asm/pvr.h b/arch/microblaze/include/asm/pvr.h index e38abc7714b6..9578666e98ba 100644 --- a/arch/microblaze/include/asm/pvr.h +++ b/arch/microblaze/include/asm/pvr.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #define PVR_MSR_BIT 0x400 | 16 | #define PVR_MSR_BIT 0x400 |
| 17 | 17 | ||
| 18 | struct pvr_s { | 18 | struct pvr_s { |
| 19 | unsigned pvr[16]; | 19 | unsigned pvr[12]; |
| 20 | }; | 20 | }; |
| 21 | 21 | ||
| 22 | /* The following taken from Xilinx's standalone BSP pvr.h */ | 22 | /* The following taken from Xilinx's standalone BSP pvr.h */ |
diff --git a/arch/microblaze/include/asm/setup.h b/arch/microblaze/include/asm/setup.h index 7f31394985e0..782b5c89248e 100644 --- a/arch/microblaze/include/asm/setup.h +++ b/arch/microblaze/include/asm/setup.h | |||
| @@ -28,8 +28,6 @@ void disable_early_printk(void); | |||
| 28 | void heartbeat(void); | 28 | void heartbeat(void); |
| 29 | void setup_heartbeat(void); | 29 | void setup_heartbeat(void); |
| 30 | 30 | ||
| 31 | unsigned long long sched_clock(void); | ||
| 32 | |||
| 33 | # ifdef CONFIG_MMU | 31 | # ifdef CONFIG_MMU |
| 34 | extern void mmu_reset(void); | 32 | extern void mmu_reset(void); |
| 35 | extern void early_console_reg_tlb_alloc(unsigned int addr); | 33 | extern void early_console_reg_tlb_alloc(unsigned int addr); |
diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h index 81e1f7d5b4cb..e6a2284571dc 100644 --- a/arch/microblaze/include/asm/system.h +++ b/arch/microblaze/include/asm/system.h | |||
| @@ -45,7 +45,6 @@ extern struct task_struct *_switch_to(struct thread_info *prev, | |||
| 45 | #define smp_rmb() rmb() | 45 | #define smp_rmb() rmb() |
| 46 | #define smp_wmb() wmb() | 46 | #define smp_wmb() wmb() |
| 47 | 47 | ||
| 48 | void show_trace(struct task_struct *task, unsigned long *stack); | ||
| 49 | void __bad_xchg(volatile void *ptr, int size); | 48 | void __bad_xchg(volatile void *ptr, int size); |
| 50 | 49 | ||
| 51 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, | 50 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, |
diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index 26460d15b338..d840f4a2d3c9 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h | |||
| @@ -359,7 +359,7 @@ extern long __user_bad(void); | |||
| 359 | __copy_tofrom_user((__force void __user *)(to), \ | 359 | __copy_tofrom_user((__force void __user *)(to), \ |
| 360 | (void __user *)(from), (n)) | 360 | (void __user *)(from), (n)) |
| 361 | #define __copy_from_user_inatomic(to, from, n) \ | 361 | #define __copy_from_user_inatomic(to, from, n) \ |
| 362 | copy_from_user((to), (from), (n)) | 362 | __copy_from_user((to), (from), (n)) |
| 363 | 363 | ||
| 364 | static inline long copy_from_user(void *to, | 364 | static inline long copy_from_user(void *to, |
| 365 | const void __user *from, unsigned long n) | 365 | const void __user *from, unsigned long n) |
| @@ -373,7 +373,7 @@ static inline long copy_from_user(void *to, | |||
| 373 | #define __copy_to_user(to, from, n) \ | 373 | #define __copy_to_user(to, from, n) \ |
| 374 | __copy_tofrom_user((void __user *)(to), \ | 374 | __copy_tofrom_user((void __user *)(to), \ |
| 375 | (__force const void __user *)(from), (n)) | 375 | (__force const void __user *)(from), (n)) |
| 376 | #define __copy_to_user_inatomic(to, from, n) copy_to_user((to), (from), (n)) | 376 | #define __copy_to_user_inatomic(to, from, n) __copy_to_user((to), (from), (n)) |
| 377 | 377 | ||
| 378 | static inline long copy_to_user(void __user *to, | 378 | static inline long copy_to_user(void __user *to, |
| 379 | const void *from, unsigned long n) | 379 | const void *from, unsigned long n) |
diff --git a/arch/microblaze/include/asm/unwind.h b/arch/microblaze/include/asm/unwind.h new file mode 100644 index 000000000000..d248b7de4b13 --- /dev/null +++ b/arch/microblaze/include/asm/unwind.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | /* | ||
| 2 | * Backtrace support for Microblaze | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Digital Design Corporation | ||
| 5 | * | ||
| 6 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 7 | * License. See the file "COPYING" in the main directory of this archive | ||
| 8 | * for more details. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __MICROBLAZE_UNWIND_H | ||
| 12 | #define __MICROBLAZE_UNWIND_H | ||
| 13 | |||
| 14 | struct stack_trace; | ||
| 15 | |||
| 16 | struct trap_handler_info { | ||
| 17 | unsigned long start_addr; | ||
| 18 | unsigned long end_addr; | ||
| 19 | const char *trap_name; | ||
| 20 | }; | ||
| 21 | extern struct trap_handler_info microblaze_trap_handlers; | ||
| 22 | |||
| 23 | extern const char _hw_exception_handler; | ||
| 24 | extern const char ex_handler_unhandled; | ||
| 25 | |||
| 26 | void microblaze_unwind(struct task_struct *task, struct stack_trace *trace); | ||
| 27 | |||
| 28 | #endif /* __MICROBLAZE_UNWIND_H */ | ||
| 29 | |||
diff --git a/arch/microblaze/kernel/Makefile b/arch/microblaze/kernel/Makefile index e51bc1520825..5eecc9f1fbd9 100644 --- a/arch/microblaze/kernel/Makefile +++ b/arch/microblaze/kernel/Makefile | |||
| @@ -17,7 +17,7 @@ extra-y := head.o vmlinux.lds | |||
| 17 | obj-y += dma.o exceptions.o \ | 17 | obj-y += dma.o exceptions.o \ |
| 18 | hw_exception_handler.o init_task.o intc.o irq.o of_device.o \ | 18 | hw_exception_handler.o init_task.o intc.o irq.o of_device.o \ |
| 19 | of_platform.o process.o prom.o prom_parse.o ptrace.o \ | 19 | of_platform.o process.o prom.o prom_parse.o ptrace.o \ |
| 20 | setup.o signal.o sys_microblaze.o timer.o traps.o reset.o | 20 | reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o |
| 21 | 21 | ||
| 22 | obj-y += cpu/ | 22 | obj-y += cpu/ |
| 23 | 23 | ||
| @@ -28,5 +28,6 @@ obj-$(CONFIG_MODULES) += microblaze_ksyms.o module.o | |||
| 28 | obj-$(CONFIG_MMU) += misc.o | 28 | obj-$(CONFIG_MMU) += misc.o |
| 29 | obj-$(CONFIG_STACKTRACE) += stacktrace.o | 29 | obj-$(CONFIG_STACKTRACE) += stacktrace.o |
| 30 | obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o mcount.o | 30 | obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o mcount.o |
| 31 | obj-$(CONFIG_KGDB) += kgdb.o | ||
| 31 | 32 | ||
| 32 | obj-y += entry$(MMU).o | 33 | obj-y += entry$(MMU).o |
diff --git a/arch/microblaze/kernel/cpu/mb.c b/arch/microblaze/kernel/cpu/mb.c index 4216eb1eaa32..7086e3564281 100644 --- a/arch/microblaze/kernel/cpu/mb.c +++ b/arch/microblaze/kernel/cpu/mb.c | |||
| @@ -126,6 +126,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
| 126 | cpuinfo.pvr_user1, | 126 | cpuinfo.pvr_user1, |
| 127 | cpuinfo.pvr_user2); | 127 | cpuinfo.pvr_user2); |
| 128 | 128 | ||
| 129 | count += seq_printf(m, "Page size:\t%lu\n", PAGE_SIZE); | ||
| 129 | return 0; | 130 | return 0; |
| 130 | } | 131 | } |
| 131 | 132 | ||
diff --git a/arch/microblaze/kernel/entry-nommu.S b/arch/microblaze/kernel/entry-nommu.S index 8cc18cd2cce6..ca84368570b6 100644 --- a/arch/microblaze/kernel/entry-nommu.S +++ b/arch/microblaze/kernel/entry-nommu.S | |||
| @@ -588,3 +588,31 @@ sys_rt_sigsuspend_wrapper: | |||
| 588 | #include "syscall_table.S" | 588 | #include "syscall_table.S" |
| 589 | 589 | ||
| 590 | syscall_table_size=(.-sys_call_table) | 590 | syscall_table_size=(.-sys_call_table) |
| 591 | |||
| 592 | type_SYSCALL: | ||
| 593 | .ascii "SYSCALL\0" | ||
| 594 | type_IRQ: | ||
| 595 | .ascii "IRQ\0" | ||
| 596 | type_IRQ_PREEMPT: | ||
| 597 | .ascii "IRQ (PREEMPTED)\0" | ||
| 598 | type_SYSCALL_PREEMPT: | ||
| 599 | .ascii " SYSCALL (PREEMPTED)\0" | ||
| 600 | |||
| 601 | /* | ||
| 602 | * Trap decoding for stack unwinder | ||
| 603 | * Tuples are (start addr, end addr, string) | ||
| 604 | * If return address lies on [start addr, end addr], | ||
| 605 | * unwinder displays 'string' | ||
| 606 | */ | ||
| 607 | |||
| 608 | .align 4 | ||
| 609 | .global microblaze_trap_handlers | ||
| 610 | microblaze_trap_handlers: | ||
| 611 | /* Exact matches come first */ | ||
| 612 | .word ret_to_user ; .word ret_to_user ; .word type_SYSCALL | ||
| 613 | .word ret_from_intr; .word ret_from_intr ; .word type_IRQ | ||
| 614 | /* Fuzzy matches go here */ | ||
| 615 | .word ret_from_intr; .word no_intr_resched; .word type_IRQ_PREEMPT | ||
| 616 | .word work_pending ; .word no_work_pending; .word type_SYSCALL_PREEMPT | ||
| 617 | /* End of table */ | ||
| 618 | .word 0 ; .word 0 ; .word 0 | ||
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index c0ede25c5b99..304882e56459 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
| @@ -48,128 +48,107 @@ | |||
| 48 | */ | 48 | */ |
| 49 | #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR | 49 | #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR |
| 50 | .macro clear_bip | 50 | .macro clear_bip |
| 51 | msrclr r11, MSR_BIP | 51 | msrclr r0, MSR_BIP |
| 52 | nop | ||
| 53 | .endm | 52 | .endm |
| 54 | 53 | ||
| 55 | .macro set_bip | 54 | .macro set_bip |
| 56 | msrset r11, MSR_BIP | 55 | msrset r0, MSR_BIP |
| 57 | nop | ||
| 58 | .endm | 56 | .endm |
| 59 | 57 | ||
| 60 | .macro clear_eip | 58 | .macro clear_eip |
| 61 | msrclr r11, MSR_EIP | 59 | msrclr r0, MSR_EIP |
| 62 | nop | ||
| 63 | .endm | 60 | .endm |
| 64 | 61 | ||
| 65 | .macro set_ee | 62 | .macro set_ee |
| 66 | msrset r11, MSR_EE | 63 | msrset r0, MSR_EE |
| 67 | nop | ||
| 68 | .endm | 64 | .endm |
| 69 | 65 | ||
| 70 | .macro disable_irq | 66 | .macro disable_irq |
| 71 | msrclr r11, MSR_IE | 67 | msrclr r0, MSR_IE |
| 72 | nop | ||
| 73 | .endm | 68 | .endm |
| 74 | 69 | ||
| 75 | .macro enable_irq | 70 | .macro enable_irq |
| 76 | msrset r11, MSR_IE | 71 | msrset r0, MSR_IE |
| 77 | nop | ||
| 78 | .endm | 72 | .endm |
| 79 | 73 | ||
| 80 | .macro set_ums | 74 | .macro set_ums |
| 81 | msrset r11, MSR_UMS | 75 | msrset r0, MSR_UMS |
| 82 | nop | 76 | msrclr r0, MSR_VMS |
| 83 | msrclr r11, MSR_VMS | ||
| 84 | nop | ||
| 85 | .endm | 77 | .endm |
| 86 | 78 | ||
| 87 | .macro set_vms | 79 | .macro set_vms |
| 88 | msrclr r11, MSR_UMS | 80 | msrclr r0, MSR_UMS |
| 89 | nop | 81 | msrset r0, MSR_VMS |
| 90 | msrset r11, MSR_VMS | 82 | .endm |
| 91 | nop | 83 | |
| 84 | .macro clear_ums | ||
| 85 | msrclr r0, MSR_UMS | ||
| 92 | .endm | 86 | .endm |
| 93 | 87 | ||
| 94 | .macro clear_vms_ums | 88 | .macro clear_vms_ums |
| 95 | msrclr r11, MSR_VMS | 89 | msrclr r0, MSR_VMS | MSR_UMS |
| 96 | nop | ||
| 97 | msrclr r11, MSR_UMS | ||
| 98 | nop | ||
| 99 | .endm | 90 | .endm |
| 100 | #else | 91 | #else |
| 101 | .macro clear_bip | 92 | .macro clear_bip |
| 102 | mfs r11, rmsr | 93 | mfs r11, rmsr |
| 103 | nop | ||
| 104 | andi r11, r11, ~MSR_BIP | 94 | andi r11, r11, ~MSR_BIP |
| 105 | mts rmsr, r11 | 95 | mts rmsr, r11 |
| 106 | nop | ||
| 107 | .endm | 96 | .endm |
| 108 | 97 | ||
| 109 | .macro set_bip | 98 | .macro set_bip |
| 110 | mfs r11, rmsr | 99 | mfs r11, rmsr |
| 111 | nop | ||
| 112 | ori r11, r11, MSR_BIP | 100 | ori r11, r11, MSR_BIP |
| 113 | mts rmsr, r11 | 101 | mts rmsr, r11 |
| 114 | nop | ||
| 115 | .endm | 102 | .endm |
| 116 | 103 | ||
| 117 | .macro clear_eip | 104 | .macro clear_eip |
| 118 | mfs r11, rmsr | 105 | mfs r11, rmsr |
| 119 | nop | ||
| 120 | andi r11, r11, ~MSR_EIP | 106 | andi r11, r11, ~MSR_EIP |
| 121 | mts rmsr, r11 | 107 | mts rmsr, r11 |
| 122 | nop | ||
| 123 | .endm | 108 | .endm |
| 124 | 109 | ||
| 125 | .macro set_ee | 110 | .macro set_ee |
| 126 | mfs r11, rmsr | 111 | mfs r11, rmsr |
| 127 | nop | ||
| 128 | ori r11, r11, MSR_EE | 112 | ori r11, r11, MSR_EE |
| 129 | mts rmsr, r11 | 113 | mts rmsr, r11 |
| 130 | nop | ||
| 131 | .endm | 114 | .endm |
| 132 | 115 | ||
| 133 | .macro disable_irq | 116 | .macro disable_irq |
| 134 | mfs r11, rmsr | 117 | mfs r11, rmsr |
| 135 | nop | ||
| 136 | andi r11, r11, ~MSR_IE | 118 | andi r11, r11, ~MSR_IE |
| 137 | mts rmsr, r11 | 119 | mts rmsr, r11 |
| 138 | nop | ||
| 139 | .endm | 120 | .endm |
| 140 | 121 | ||
| 141 | .macro enable_irq | 122 | .macro enable_irq |
| 142 | mfs r11, rmsr | 123 | mfs r11, rmsr |
| 143 | nop | ||
| 144 | ori r11, r11, MSR_IE | 124 | ori r11, r11, MSR_IE |
| 145 | mts rmsr, r11 | 125 | mts rmsr, r11 |
| 146 | nop | ||
| 147 | .endm | 126 | .endm |
| 148 | 127 | ||
| 149 | .macro set_ums | 128 | .macro set_ums |
| 150 | mfs r11, rmsr | 129 | mfs r11, rmsr |
| 151 | nop | ||
| 152 | ori r11, r11, MSR_VMS | 130 | ori r11, r11, MSR_VMS |
| 153 | andni r11, r11, MSR_UMS | 131 | andni r11, r11, MSR_UMS |
| 154 | mts rmsr, r11 | 132 | mts rmsr, r11 |
| 155 | nop | ||
| 156 | .endm | 133 | .endm |
| 157 | 134 | ||
| 158 | .macro set_vms | 135 | .macro set_vms |
| 159 | mfs r11, rmsr | 136 | mfs r11, rmsr |
| 160 | nop | ||
| 161 | ori r11, r11, MSR_VMS | 137 | ori r11, r11, MSR_VMS |
| 162 | andni r11, r11, MSR_UMS | 138 | andni r11, r11, MSR_UMS |
| 163 | mts rmsr, r11 | 139 | mts rmsr, r11 |
| 164 | nop | 140 | .endm |
| 141 | |||
| 142 | .macro clear_ums | ||
| 143 | mfs r11, rmsr | ||
| 144 | andni r11, r11, MSR_UMS | ||
| 145 | mts rmsr,r11 | ||
| 165 | .endm | 146 | .endm |
| 166 | 147 | ||
| 167 | .macro clear_vms_ums | 148 | .macro clear_vms_ums |
| 168 | mfs r11, rmsr | 149 | mfs r11, rmsr |
| 169 | nop | ||
| 170 | andni r11, r11, (MSR_VMS|MSR_UMS) | 150 | andni r11, r11, (MSR_VMS|MSR_UMS) |
| 171 | mts rmsr,r11 | 151 | mts rmsr,r11 |
| 172 | nop | ||
| 173 | .endm | 152 | .endm |
| 174 | #endif | 153 | #endif |
| 175 | 154 | ||
| @@ -180,18 +159,22 @@ | |||
| 180 | 159 | ||
| 181 | /* turn on virtual protected mode save */ | 160 | /* turn on virtual protected mode save */ |
| 182 | #define VM_ON \ | 161 | #define VM_ON \ |
| 183 | set_ums; \ | 162 | set_ums; \ |
| 184 | rted r0, 2f; \ | 163 | rted r0, 2f; \ |
| 185 | 2: nop; | 164 | nop; \ |
| 165 | 2: | ||
| 186 | 166 | ||
| 187 | /* turn off virtual protected mode save and user mode save*/ | 167 | /* turn off virtual protected mode save and user mode save*/ |
| 188 | #define VM_OFF \ | 168 | #define VM_OFF \ |
| 189 | clear_vms_ums; \ | 169 | clear_vms_ums; \ |
| 190 | rted r0, TOPHYS(1f); \ | 170 | rted r0, TOPHYS(1f); \ |
| 191 | 1: nop; | 171 | nop; \ |
| 172 | 1: | ||
| 192 | 173 | ||
| 193 | #define SAVE_REGS \ | 174 | #define SAVE_REGS \ |
| 194 | swi r2, r1, PTO+PT_R2; /* Save SDA */ \ | 175 | swi r2, r1, PTO+PT_R2; /* Save SDA */ \ |
| 176 | swi r3, r1, PTO+PT_R3; \ | ||
| 177 | swi r4, r1, PTO+PT_R4; \ | ||
| 195 | swi r5, r1, PTO+PT_R5; \ | 178 | swi r5, r1, PTO+PT_R5; \ |
| 196 | swi r6, r1, PTO+PT_R6; \ | 179 | swi r6, r1, PTO+PT_R6; \ |
| 197 | swi r7, r1, PTO+PT_R7; \ | 180 | swi r7, r1, PTO+PT_R7; \ |
| @@ -218,14 +201,14 @@ | |||
| 218 | swi r30, r1, PTO+PT_R30; \ | 201 | swi r30, r1, PTO+PT_R30; \ |
| 219 | swi r31, r1, PTO+PT_R31; /* Save current task reg */ \ | 202 | swi r31, r1, PTO+PT_R31; /* Save current task reg */ \ |
| 220 | mfs r11, rmsr; /* save MSR */ \ | 203 | mfs r11, rmsr; /* save MSR */ \ |
| 221 | nop; \ | ||
| 222 | swi r11, r1, PTO+PT_MSR; | 204 | swi r11, r1, PTO+PT_MSR; |
| 223 | 205 | ||
| 224 | #define RESTORE_REGS \ | 206 | #define RESTORE_REGS \ |
| 225 | lwi r11, r1, PTO+PT_MSR; \ | 207 | lwi r11, r1, PTO+PT_MSR; \ |
| 226 | mts rmsr , r11; \ | 208 | mts rmsr , r11; \ |
| 227 | nop; \ | ||
| 228 | lwi r2, r1, PTO+PT_R2; /* restore SDA */ \ | 209 | lwi r2, r1, PTO+PT_R2; /* restore SDA */ \ |
| 210 | lwi r3, r1, PTO+PT_R3; \ | ||
| 211 | lwi r4, r1, PTO+PT_R4; \ | ||
| 229 | lwi r5, r1, PTO+PT_R5; \ | 212 | lwi r5, r1, PTO+PT_R5; \ |
| 230 | lwi r6, r1, PTO+PT_R6; \ | 213 | lwi r6, r1, PTO+PT_R6; \ |
| 231 | lwi r7, r1, PTO+PT_R7; \ | 214 | lwi r7, r1, PTO+PT_R7; \ |
| @@ -252,6 +235,39 @@ | |||
| 252 | lwi r30, r1, PTO+PT_R30; \ | 235 | lwi r30, r1, PTO+PT_R30; \ |
| 253 | lwi r31, r1, PTO+PT_R31; /* Restore cur task reg */ | 236 | lwi r31, r1, PTO+PT_R31; /* Restore cur task reg */ |
| 254 | 237 | ||
| 238 | #define SAVE_STATE \ | ||
| 239 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* save stack */ \ | ||
| 240 | /* See if already in kernel mode.*/ \ | ||
| 241 | mfs r1, rmsr; \ | ||
| 242 | andi r1, r1, MSR_UMS; \ | ||
| 243 | bnei r1, 1f; \ | ||
| 244 | /* Kernel-mode state save. */ \ | ||
| 245 | /* Reload kernel stack-ptr. */ \ | ||
| 246 | lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); \ | ||
| 247 | /* FIXME: I can add these two lines to one */ \ | ||
| 248 | /* tophys(r1,r1); */ \ | ||
| 249 | /* addik r1, r1, -STATE_SAVE_SIZE; */ \ | ||
| 250 | addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; \ | ||
| 251 | SAVE_REGS \ | ||
| 252 | brid 2f; \ | ||
| 253 | swi r1, r1, PTO+PT_MODE; \ | ||
| 254 | 1: /* User-mode state save. */ \ | ||
| 255 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */\ | ||
| 256 | tophys(r1,r1); \ | ||
| 257 | lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ \ | ||
| 258 | /* MS these three instructions can be added to one */ \ | ||
| 259 | /* addik r1, r1, THREAD_SIZE; */ \ | ||
| 260 | /* tophys(r1,r1); */ \ | ||
| 261 | /* addik r1, r1, -STATE_SAVE_SIZE; */ \ | ||
| 262 | addik r1, r1, THREAD_SIZE + CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; \ | ||
| 263 | SAVE_REGS \ | ||
| 264 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); \ | ||
| 265 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ \ | ||
| 266 | swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ \ | ||
| 267 | /* MS: I am clearing UMS even in case when I come from kernel space */ \ | ||
| 268 | clear_ums; \ | ||
| 269 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | ||
| 270 | |||
| 255 | .text | 271 | .text |
| 256 | 272 | ||
| 257 | /* | 273 | /* |
| @@ -267,45 +283,23 @@ | |||
| 267 | * are masked. This is nice, means we don't have to CLI before state save | 283 | * are masked. This is nice, means we don't have to CLI before state save |
| 268 | */ | 284 | */ |
| 269 | C_ENTRY(_user_exception): | 285 | C_ENTRY(_user_exception): |
| 270 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ | ||
| 271 | addi r14, r14, 4 /* return address is 4 byte after call */ | 286 | addi r14, r14, 4 /* return address is 4 byte after call */ |
| 272 | swi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* Save r11 */ | 287 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ |
| 273 | |||
| 274 | lwi r11, r0, TOPHYS(PER_CPU(KM));/* See if already in kernel mode.*/ | ||
| 275 | beqi r11, 1f; /* Jump ahead if coming from user */ | ||
| 276 | /* Kernel-mode state save. */ | ||
| 277 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/ | ||
| 278 | tophys(r1,r11); | ||
| 279 | swi r11, r1, (PT_R1-PT_SIZE); /* Save original SP. */ | ||
| 280 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */ | ||
| 281 | |||
| 282 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ | ||
| 283 | SAVE_REGS | ||
| 284 | |||
| 285 | addi r11, r0, 1; /* Was in kernel-mode. */ | ||
| 286 | swi r11, r1, PTO+PT_MODE; /* pt_regs -> kernel mode */ | ||
| 287 | brid 2f; | ||
| 288 | nop; /* Fill delay slot */ | ||
| 289 | 288 | ||
| 290 | /* User-mode state save. */ | ||
| 291 | 1: | ||
| 292 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */ | ||
| 293 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ | 289 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ |
| 294 | tophys(r1,r1); | 290 | tophys(r1,r1); |
| 295 | lwi r1, r1, TS_THREAD_INFO; /* get stack from task_struct */ | 291 | lwi r1, r1, TS_THREAD_INFO; /* get stack from task_struct */ |
| 296 | /* calculate kernel stack pointer from task struct 8k */ | 292 | /* MS these three instructions can be added to one */ |
| 297 | addik r1, r1, THREAD_SIZE; | 293 | /* addik r1, r1, THREAD_SIZE; */ |
| 298 | tophys(r1,r1); | 294 | /* tophys(r1,r1); */ |
| 299 | 295 | /* addik r1, r1, -STATE_SAVE_SIZE; */ | |
| 300 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ | 296 | addik r1, r1, THREAD_SIZE + CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; |
| 301 | SAVE_REGS | 297 | SAVE_REGS |
| 302 | 298 | ||
| 303 | swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */ | ||
| 304 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | 299 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); |
| 305 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ | 300 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ |
| 306 | addi r11, r0, 1; | 301 | clear_ums; |
| 307 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ | 302 | lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
| 308 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | ||
| 309 | /* Save away the syscall number. */ | 303 | /* Save away the syscall number. */ |
| 310 | swi r12, r1, PTO+PT_R0; | 304 | swi r12, r1, PTO+PT_R0; |
| 311 | tovirt(r1,r1) | 305 | tovirt(r1,r1) |
| @@ -316,10 +310,8 @@ C_ENTRY(_user_exception): | |||
| 316 | * register should point to the location where | 310 | * register should point to the location where |
| 317 | * the called function should return. [note that MAKE_SYS_CALL uses label 1] */ | 311 | * the called function should return. [note that MAKE_SYS_CALL uses label 1] */ |
| 318 | 312 | ||
| 319 | # Step into virtual mode. | 313 | /* Step into virtual mode */ |
| 320 | set_vms; | 314 | rtbd r0, 3f |
| 321 | addik r11, r0, 3f | ||
| 322 | rtid r11, 0 | ||
| 323 | nop | 315 | nop |
| 324 | 3: | 316 | 3: |
| 325 | lwi r11, CURRENT_TASK, TS_THREAD_INFO /* get thread info */ | 317 | lwi r11, CURRENT_TASK, TS_THREAD_INFO /* get thread info */ |
| @@ -363,24 +355,17 @@ C_ENTRY(_user_exception): | |||
| 363 | # Find and jump into the syscall handler. | 355 | # Find and jump into the syscall handler. |
| 364 | lwi r12, r12, sys_call_table | 356 | lwi r12, r12, sys_call_table |
| 365 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | 357 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ |
| 366 | la r15, r0, ret_from_trap-8 | 358 | addi r15, r0, ret_from_trap-8 |
| 367 | bra r12 | 359 | bra r12 |
| 368 | 360 | ||
| 369 | /* The syscall number is invalid, return an error. */ | 361 | /* The syscall number is invalid, return an error. */ |
| 370 | 5: | 362 | 5: |
| 363 | rtsd r15, 8; /* looks like a normal subroutine return */ | ||
| 371 | addi r3, r0, -ENOSYS; | 364 | addi r3, r0, -ENOSYS; |
| 372 | rtsd r15,8; /* looks like a normal subroutine return */ | ||
| 373 | or r0, r0, r0 | ||
| 374 | |||
| 375 | 365 | ||
| 376 | /* Entry point used to return from a syscall/trap */ | 366 | /* Entry point used to return from a syscall/trap */ |
| 377 | /* We re-enable BIP bit before state restore */ | 367 | /* We re-enable BIP bit before state restore */ |
| 378 | C_ENTRY(ret_from_trap): | 368 | C_ENTRY(ret_from_trap): |
| 379 | set_bip; /* Ints masked for state restore*/ | ||
| 380 | lwi r11, r1, PTO+PT_MODE; | ||
| 381 | /* See if returning to kernel mode, if so, skip resched &c. */ | ||
| 382 | bnei r11, 2f; | ||
| 383 | |||
| 384 | swi r3, r1, PTO + PT_R3 | 369 | swi r3, r1, PTO + PT_R3 |
| 385 | swi r4, r1, PTO + PT_R4 | 370 | swi r4, r1, PTO + PT_R4 |
| 386 | 371 | ||
| @@ -413,32 +398,19 @@ C_ENTRY(ret_from_trap): | |||
| 413 | andi r11, r11, _TIF_SIGPENDING; | 398 | andi r11, r11, _TIF_SIGPENDING; |
| 414 | beqi r11, 1f; /* Signals to handle, handle them */ | 399 | beqi r11, 1f; /* Signals to handle, handle them */ |
| 415 | 400 | ||
| 416 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | 401 | addik r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
| 417 | addi r7, r0, 1; /* Arg 3: int in_syscall */ | 402 | addi r7, r0, 1; /* Arg 3: int in_syscall */ |
| 418 | bralid r15, do_signal; /* Handle any signals */ | 403 | bralid r15, do_signal; /* Handle any signals */ |
| 419 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | 404 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
| 420 | 405 | ||
| 421 | /* Finally, return to user state. */ | 406 | /* Finally, return to user state. */ |
| 422 | 1: | 407 | 1: set_bip; /* Ints masked for state restore */ |
| 423 | lwi r3, r1, PTO + PT_R3; /* restore syscall result */ | ||
| 424 | lwi r4, r1, PTO + PT_R4; | ||
| 425 | |||
| 426 | swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | ||
| 427 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ | 408 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
| 428 | VM_OFF; | 409 | VM_OFF; |
| 429 | tophys(r1,r1); | 410 | tophys(r1,r1); |
| 430 | RESTORE_REGS; | 411 | RESTORE_REGS; |
| 431 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | 412 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ |
| 432 | lwi r1, r1, PT_R1 - PT_SIZE;/* Restore user stack pointer. */ | 413 | lwi r1, r1, PT_R1 - PT_SIZE;/* Restore user stack pointer. */ |
| 433 | bri 6f; | ||
| 434 | |||
| 435 | /* Return to kernel state. */ | ||
| 436 | 2: VM_OFF; | ||
| 437 | tophys(r1,r1); | ||
| 438 | RESTORE_REGS; | ||
| 439 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | ||
| 440 | tovirt(r1,r1); | ||
| 441 | 6: | ||
| 442 | TRAP_return: /* Make global symbol for debugging */ | 414 | TRAP_return: /* Make global symbol for debugging */ |
| 443 | rtbd r14, 0; /* Instructions to return from an IRQ */ | 415 | rtbd r14, 0; /* Instructions to return from an IRQ */ |
| 444 | nop; | 416 | nop; |
| @@ -450,12 +422,11 @@ TRAP_return: /* Make global symbol for debugging */ | |||
| 450 | C_ENTRY(sys_fork_wrapper): | 422 | C_ENTRY(sys_fork_wrapper): |
| 451 | addi r5, r0, SIGCHLD /* Arg 0: flags */ | 423 | addi r5, r0, SIGCHLD /* Arg 0: flags */ |
| 452 | lwi r6, r1, PTO+PT_R1 /* Arg 1: child SP (use parent's) */ | 424 | lwi r6, r1, PTO+PT_R1 /* Arg 1: child SP (use parent's) */ |
| 453 | la r7, r1, PTO /* Arg 2: parent context */ | 425 | addik r7, r1, PTO /* Arg 2: parent context */ |
| 454 | add r8. r0, r0 /* Arg 3: (unused) */ | 426 | add r8. r0, r0 /* Arg 3: (unused) */ |
| 455 | add r9, r0, r0; /* Arg 4: (unused) */ | 427 | add r9, r0, r0; /* Arg 4: (unused) */ |
| 456 | add r10, r0, r0; /* Arg 5: (unused) */ | ||
| 457 | brid do_fork /* Do real work (tail-call) */ | 428 | brid do_fork /* Do real work (tail-call) */ |
| 458 | nop; | 429 | add r10, r0, r0; /* Arg 5: (unused) */ |
| 459 | 430 | ||
| 460 | /* This the initial entry point for a new child thread, with an appropriate | 431 | /* This the initial entry point for a new child thread, with an appropriate |
| 461 | stack in place that makes it look the the child is in the middle of an | 432 | stack in place that makes it look the the child is in the middle of an |
| @@ -466,35 +437,31 @@ C_ENTRY(ret_from_fork): | |||
| 466 | bralid r15, schedule_tail; /* ...which is schedule_tail's arg */ | 437 | bralid r15, schedule_tail; /* ...which is schedule_tail's arg */ |
| 467 | add r3, r5, r0; /* switch_thread returns the prev task */ | 438 | add r3, r5, r0; /* switch_thread returns the prev task */ |
| 468 | /* ( in the delay slot ) */ | 439 | /* ( in the delay slot ) */ |
| 469 | add r3, r0, r0; /* Child's fork call should return 0. */ | ||
| 470 | brid ret_from_trap; /* Do normal trap return */ | 440 | brid ret_from_trap; /* Do normal trap return */ |
| 471 | nop; | 441 | add r3, r0, r0; /* Child's fork call should return 0. */ |
| 472 | 442 | ||
| 473 | C_ENTRY(sys_vfork): | 443 | C_ENTRY(sys_vfork): |
| 474 | brid microblaze_vfork /* Do real work (tail-call) */ | 444 | brid microblaze_vfork /* Do real work (tail-call) */ |
| 475 | la r5, r1, PTO | 445 | addik r5, r1, PTO |
| 476 | 446 | ||
| 477 | C_ENTRY(sys_clone): | 447 | C_ENTRY(sys_clone): |
| 478 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ | 448 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ |
| 479 | lwi r6, r1, PTO+PT_R1; /* If so, use paret's stack ptr */ | 449 | lwi r6, r1, PTO + PT_R1; /* If so, use paret's stack ptr */ |
| 480 | 1: la r7, r1, PTO; /* Arg 2: parent context */ | 450 | 1: addik r7, r1, PTO; /* Arg 2: parent context */ |
| 481 | add r8, r0, r0; /* Arg 3: (unused) */ | 451 | add r8, r0, r0; /* Arg 3: (unused) */ |
| 482 | add r9, r0, r0; /* Arg 4: (unused) */ | 452 | add r9, r0, r0; /* Arg 4: (unused) */ |
| 483 | add r10, r0, r0; /* Arg 5: (unused) */ | ||
| 484 | brid do_fork /* Do real work (tail-call) */ | 453 | brid do_fork /* Do real work (tail-call) */ |
| 485 | nop; | 454 | add r10, r0, r0; /* Arg 5: (unused) */ |
| 486 | 455 | ||
| 487 | C_ENTRY(sys_execve): | 456 | C_ENTRY(sys_execve): |
| 488 | la r8, r1, PTO; /* add user context as 4th arg */ | ||
| 489 | brid microblaze_execve; /* Do real work (tail-call).*/ | 457 | brid microblaze_execve; /* Do real work (tail-call).*/ |
| 490 | nop; | 458 | addik r8, r1, PTO; /* add user context as 4th arg */ |
| 491 | 459 | ||
| 492 | C_ENTRY(sys_rt_sigreturn_wrapper): | 460 | C_ENTRY(sys_rt_sigreturn_wrapper): |
| 493 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | 461 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ |
| 494 | swi r4, r1, PTO+PT_R4; | 462 | swi r4, r1, PTO+PT_R4; |
| 495 | la r5, r1, PTO; /* add user context as 1st arg */ | ||
| 496 | brlid r15, sys_rt_sigreturn /* Do real work */ | 463 | brlid r15, sys_rt_sigreturn /* Do real work */ |
| 497 | nop; | 464 | addik r5, r1, PTO; /* add user context as 1st arg */ |
| 498 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | 465 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ |
| 499 | lwi r4, r1, PTO+PT_R4; | 466 | lwi r4, r1, PTO+PT_R4; |
| 500 | bri ret_from_trap /* fall through will not work here due to align */ | 467 | bri ret_from_trap /* fall through will not work here due to align */ |
| @@ -503,83 +470,23 @@ C_ENTRY(sys_rt_sigreturn_wrapper): | |||
| 503 | /* | 470 | /* |
| 504 | * HW EXCEPTION rutine start | 471 | * HW EXCEPTION rutine start |
| 505 | */ | 472 | */ |
| 506 | |||
| 507 | #define SAVE_STATE \ | ||
| 508 | swi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* Save r11 */ \ | ||
| 509 | set_bip; /*equalize initial state for all possible entries*/\ | ||
| 510 | clear_eip; \ | ||
| 511 | enable_irq; \ | ||
| 512 | set_ee; \ | ||
| 513 | /* See if already in kernel mode.*/ \ | ||
| 514 | lwi r11, r0, TOPHYS(PER_CPU(KM)); \ | ||
| 515 | beqi r11, 1f; /* Jump ahead if coming from user */\ | ||
| 516 | /* Kernel-mode state save. */ \ | ||
| 517 | /* Reload kernel stack-ptr. */ \ | ||
| 518 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); \ | ||
| 519 | tophys(r1,r11); \ | ||
| 520 | swi r11, r1, (PT_R1-PT_SIZE); /* Save original SP. */ \ | ||
| 521 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */\ | ||
| 522 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */\ | ||
| 523 | /* store return registers separately because \ | ||
| 524 | * this macros is use for others exceptions */ \ | ||
| 525 | swi r3, r1, PTO + PT_R3; \ | ||
| 526 | swi r4, r1, PTO + PT_R4; \ | ||
| 527 | SAVE_REGS \ | ||
| 528 | /* PC, before IRQ/trap - this is one instruction above */ \ | ||
| 529 | swi r17, r1, PTO+PT_PC; \ | ||
| 530 | \ | ||
| 531 | addi r11, r0, 1; /* Was in kernel-mode. */ \ | ||
| 532 | swi r11, r1, PTO+PT_MODE; \ | ||
| 533 | brid 2f; \ | ||
| 534 | nop; /* Fill delay slot */ \ | ||
| 535 | 1: /* User-mode state save. */ \ | ||
| 536 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */\ | ||
| 537 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */\ | ||
| 538 | tophys(r1,r1); \ | ||
| 539 | lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ \ | ||
| 540 | addik r1, r1, THREAD_SIZE; /* calculate kernel stack pointer */\ | ||
| 541 | tophys(r1,r1); \ | ||
| 542 | \ | ||
| 543 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */\ | ||
| 544 | /* store return registers separately because this macros \ | ||
| 545 | * is use for others exceptions */ \ | ||
| 546 | swi r3, r1, PTO + PT_R3; \ | ||
| 547 | swi r4, r1, PTO + PT_R4; \ | ||
| 548 | SAVE_REGS \ | ||
| 549 | /* PC, before IRQ/trap - this is one instruction above FIXME*/ \ | ||
| 550 | swi r17, r1, PTO+PT_PC; \ | ||
| 551 | \ | ||
| 552 | swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */ \ | ||
| 553 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); \ | ||
| 554 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ \ | ||
| 555 | addi r11, r0, 1; \ | ||
| 556 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode.*/\ | ||
| 557 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); \ | ||
| 558 | /* Save away the syscall number. */ \ | ||
| 559 | swi r0, r1, PTO+PT_R0; \ | ||
| 560 | tovirt(r1,r1) | ||
| 561 | |||
| 562 | C_ENTRY(full_exception_trap): | 473 | C_ENTRY(full_exception_trap): |
| 563 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ | ||
| 564 | /* adjust exception address for privileged instruction | 474 | /* adjust exception address for privileged instruction |
| 565 | * for finding where is it */ | 475 | * for finding where is it */ |
| 566 | addik r17, r17, -4 | 476 | addik r17, r17, -4 |
| 567 | SAVE_STATE /* Save registers */ | 477 | SAVE_STATE /* Save registers */ |
| 478 | /* PC, before IRQ/trap - this is one instruction above */ | ||
| 479 | swi r17, r1, PTO+PT_PC; | ||
| 480 | tovirt(r1,r1) | ||
| 568 | /* FIXME this can be store directly in PT_ESR reg. | 481 | /* FIXME this can be store directly in PT_ESR reg. |
| 569 | * I tested it but there is a fault */ | 482 | * I tested it but there is a fault */ |
| 570 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | 483 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ |
| 571 | la r15, r0, ret_from_exc - 8 | 484 | addik r15, r0, ret_from_exc - 8 |
| 572 | la r5, r1, PTO /* parameter struct pt_regs * regs */ | ||
| 573 | mfs r6, resr | 485 | mfs r6, resr |
| 574 | nop | ||
| 575 | mfs r7, rfsr; /* save FSR */ | 486 | mfs r7, rfsr; /* save FSR */ |
| 576 | nop | ||
| 577 | mts rfsr, r0; /* Clear sticky fsr */ | 487 | mts rfsr, r0; /* Clear sticky fsr */ |
| 578 | nop | 488 | rted r0, full_exception |
| 579 | la r12, r0, full_exception | 489 | addik r5, r1, PTO /* parameter struct pt_regs * regs */ |
| 580 | set_vms; | ||
| 581 | rtbd r12, 0; | ||
| 582 | nop; | ||
| 583 | 490 | ||
| 584 | /* | 491 | /* |
| 585 | * Unaligned data trap. | 492 | * Unaligned data trap. |
| @@ -592,19 +499,27 @@ C_ENTRY(full_exception_trap): | |||
| 592 | * The assembler routine is in "arch/microblaze/kernel/hw_exception_handler.S" | 499 | * The assembler routine is in "arch/microblaze/kernel/hw_exception_handler.S" |
| 593 | */ | 500 | */ |
| 594 | C_ENTRY(unaligned_data_trap): | 501 | C_ENTRY(unaligned_data_trap): |
| 595 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ | 502 | /* MS: I have to save r11 value and then restore it because |
| 503 | * set_bit, clear_eip, set_ee use r11 as temp register if MSR | ||
| 504 | * instructions are not used. We don't need to do if MSR instructions | ||
| 505 | * are used and they use r0 instead of r11. | ||
| 506 | * I am using ENTRY_SP which should be primary used only for stack | ||
| 507 | * pointer saving. */ | ||
| 508 | swi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | ||
| 509 | set_bip; /* equalize initial state for all possible entries */ | ||
| 510 | clear_eip; | ||
| 511 | set_ee; | ||
| 512 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | ||
| 596 | SAVE_STATE /* Save registers.*/ | 513 | SAVE_STATE /* Save registers.*/ |
| 514 | /* PC, before IRQ/trap - this is one instruction above */ | ||
| 515 | swi r17, r1, PTO+PT_PC; | ||
| 516 | tovirt(r1,r1) | ||
| 597 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | 517 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ |
| 598 | la r15, r0, ret_from_exc-8 | 518 | addik r15, r0, ret_from_exc-8 |
| 599 | mfs r3, resr /* ESR */ | 519 | mfs r3, resr /* ESR */ |
| 600 | nop | ||
| 601 | mfs r4, rear /* EAR */ | 520 | mfs r4, rear /* EAR */ |
| 602 | nop | 521 | rtbd r0, _unaligned_data_exception |
| 603 | la r7, r1, PTO /* parameter struct pt_regs * regs */ | 522 | addik r7, r1, PTO /* parameter struct pt_regs * regs */ |
| 604 | la r12, r0, _unaligned_data_exception | ||
| 605 | set_vms; | ||
| 606 | rtbd r12, 0; /* interrupts enabled */ | ||
| 607 | nop; | ||
| 608 | 523 | ||
| 609 | /* | 524 | /* |
| 610 | * Page fault traps. | 525 | * Page fault traps. |
| @@ -625,38 +540,32 @@ C_ENTRY(unaligned_data_trap): | |||
| 625 | */ | 540 | */ |
| 626 | /* data and intruction trap - which is choose is resolved int fault.c */ | 541 | /* data and intruction trap - which is choose is resolved int fault.c */ |
| 627 | C_ENTRY(page_fault_data_trap): | 542 | C_ENTRY(page_fault_data_trap): |
| 628 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ | ||
| 629 | SAVE_STATE /* Save registers.*/ | 543 | SAVE_STATE /* Save registers.*/ |
| 544 | /* PC, before IRQ/trap - this is one instruction above */ | ||
| 545 | swi r17, r1, PTO+PT_PC; | ||
| 546 | tovirt(r1,r1) | ||
| 630 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | 547 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ |
| 631 | la r15, r0, ret_from_exc-8 | 548 | addik r15, r0, ret_from_exc-8 |
| 632 | la r5, r1, PTO /* parameter struct pt_regs * regs */ | ||
| 633 | mfs r6, rear /* parameter unsigned long address */ | 549 | mfs r6, rear /* parameter unsigned long address */ |
| 634 | nop | ||
| 635 | mfs r7, resr /* parameter unsigned long error_code */ | 550 | mfs r7, resr /* parameter unsigned long error_code */ |
| 636 | nop | 551 | rted r0, do_page_fault |
| 637 | la r12, r0, do_page_fault | 552 | addik r5, r1, PTO /* parameter struct pt_regs * regs */ |
| 638 | set_vms; | ||
| 639 | rtbd r12, 0; /* interrupts enabled */ | ||
| 640 | nop; | ||
| 641 | 553 | ||
| 642 | C_ENTRY(page_fault_instr_trap): | 554 | C_ENTRY(page_fault_instr_trap): |
| 643 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) /* save stack */ | ||
| 644 | SAVE_STATE /* Save registers.*/ | 555 | SAVE_STATE /* Save registers.*/ |
| 556 | /* PC, before IRQ/trap - this is one instruction above */ | ||
| 557 | swi r17, r1, PTO+PT_PC; | ||
| 558 | tovirt(r1,r1) | ||
| 645 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | 559 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ |
| 646 | la r15, r0, ret_from_exc-8 | 560 | addik r15, r0, ret_from_exc-8 |
| 647 | la r5, r1, PTO /* parameter struct pt_regs * regs */ | ||
| 648 | mfs r6, rear /* parameter unsigned long address */ | 561 | mfs r6, rear /* parameter unsigned long address */ |
| 649 | nop | ||
| 650 | ori r7, r0, 0 /* parameter unsigned long error_code */ | 562 | ori r7, r0, 0 /* parameter unsigned long error_code */ |
| 651 | la r12, r0, do_page_fault | 563 | rted r0, do_page_fault |
| 652 | set_vms; | 564 | addik r5, r1, PTO /* parameter struct pt_regs * regs */ |
| 653 | rtbd r12, 0; /* interrupts enabled */ | ||
| 654 | nop; | ||
| 655 | 565 | ||
| 656 | /* Entry point used to return from an exception. */ | 566 | /* Entry point used to return from an exception. */ |
| 657 | C_ENTRY(ret_from_exc): | 567 | C_ENTRY(ret_from_exc): |
| 658 | set_bip; /* Ints masked for state restore*/ | 568 | lwi r11, r1, PTO + PT_MODE; |
| 659 | lwi r11, r1, PTO+PT_MODE; | ||
| 660 | bnei r11, 2f; /* See if returning to kernel mode, */ | 569 | bnei r11, 2f; /* See if returning to kernel mode, */ |
| 661 | /* ... if so, skip resched &c. */ | 570 | /* ... if so, skip resched &c. */ |
| 662 | 571 | ||
| @@ -687,32 +596,27 @@ C_ENTRY(ret_from_exc): | |||
| 687 | * traps), but signal handlers may want to examine or change the | 596 | * traps), but signal handlers may want to examine or change the |
| 688 | * complete register state. Here we save anything not saved by | 597 | * complete register state. Here we save anything not saved by |
| 689 | * the normal entry sequence, so that it may be safely restored | 598 | * the normal entry sequence, so that it may be safely restored |
| 690 | * (in a possibly modified form) after do_signal returns. | 599 | * (in a possibly modified form) after do_signal returns. */ |
| 691 | * store return registers separately because this macros is use | 600 | addik r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
| 692 | * for others exceptions */ | ||
| 693 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | ||
| 694 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 601 | addi r7, r0, 0; /* Arg 3: int in_syscall */ |
| 695 | bralid r15, do_signal; /* Handle any signals */ | 602 | bralid r15, do_signal; /* Handle any signals */ |
| 696 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | 603 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
| 697 | 604 | ||
| 698 | /* Finally, return to user state. */ | 605 | /* Finally, return to user state. */ |
| 699 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | 606 | 1: set_bip; /* Ints masked for state restore */ |
| 700 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ | 607 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
| 701 | VM_OFF; | 608 | VM_OFF; |
| 702 | tophys(r1,r1); | 609 | tophys(r1,r1); |
| 703 | 610 | ||
| 704 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
| 705 | lwi r4, r1, PTO+PT_R4; | ||
| 706 | RESTORE_REGS; | 611 | RESTORE_REGS; |
| 707 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | 612 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ |
| 708 | 613 | ||
| 709 | lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer. */ | 614 | lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer. */ |
| 710 | bri 6f; | 615 | bri 6f; |
| 711 | /* Return to kernel state. */ | 616 | /* Return to kernel state. */ |
| 712 | 2: VM_OFF; | 617 | 2: set_bip; /* Ints masked for state restore */ |
| 618 | VM_OFF; | ||
| 713 | tophys(r1,r1); | 619 | tophys(r1,r1); |
| 714 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
| 715 | lwi r4, r1, PTO+PT_R4; | ||
| 716 | RESTORE_REGS; | 620 | RESTORE_REGS; |
| 717 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | 621 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ |
| 718 | 622 | ||
| @@ -736,36 +640,23 @@ C_ENTRY(_interrupt): | |||
| 736 | /* MS: we are in physical address */ | 640 | /* MS: we are in physical address */ |
| 737 | /* Save registers, switch to proper stack, convert SP to virtual.*/ | 641 | /* Save registers, switch to proper stack, convert SP to virtual.*/ |
| 738 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) | 642 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) |
| 739 | swi r11, r0, TOPHYS(PER_CPU(R11_SAVE)); | ||
| 740 | /* MS: See if already in kernel mode. */ | 643 | /* MS: See if already in kernel mode. */ |
| 741 | lwi r11, r0, TOPHYS(PER_CPU(KM)); | 644 | mfs r1, rmsr |
| 742 | beqi r11, 1f; /* MS: Jump ahead if coming from user */ | 645 | nop |
| 646 | andi r1, r1, MSR_UMS | ||
| 647 | bnei r1, 1f | ||
| 743 | 648 | ||
| 744 | /* Kernel-mode state save. */ | 649 | /* Kernel-mode state save. */ |
| 745 | or r11, r1, r0 | 650 | lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) |
| 746 | tophys(r1,r11); /* MS: I have in r1 physical address where stack is */ | 651 | tophys(r1,r1); /* MS: I have in r1 physical address where stack is */ |
| 747 | /* MS: Save original SP - position PT_R1 to next stack frame 4 *1 - 152*/ | ||
| 748 | swi r11, r1, (PT_R1 - PT_SIZE); | ||
| 749 | /* MS: restore r11 because of saving in SAVE_REGS */ | ||
| 750 | lwi r11, r0, TOPHYS(PER_CPU(R11_SAVE)); | ||
| 751 | /* save registers */ | 652 | /* save registers */ |
| 752 | /* MS: Make room on the stack -> activation record */ | 653 | /* MS: Make room on the stack -> activation record */ |
| 753 | addik r1, r1, -STATE_SAVE_SIZE; | 654 | addik r1, r1, -STATE_SAVE_SIZE; |
| 754 | /* MS: store return registers separately because | ||
| 755 | * this macros is use for others exceptions */ | ||
| 756 | swi r3, r1, PTO + PT_R3; | ||
| 757 | swi r4, r1, PTO + PT_R4; | ||
| 758 | SAVE_REGS | 655 | SAVE_REGS |
| 759 | /* MS: store mode */ | ||
| 760 | addi r11, r0, 1; /* MS: Was in kernel-mode. */ | ||
| 761 | swi r11, r1, PTO + PT_MODE; /* MS: and save it */ | ||
| 762 | brid 2f; | 656 | brid 2f; |
| 763 | nop; /* MS: Fill delay slot */ | 657 | swi r1, r1, PTO + PT_MODE; /* 0 - user mode, 1 - kernel mode */ |
| 764 | |||
| 765 | 1: | 658 | 1: |
| 766 | /* User-mode state save. */ | 659 | /* User-mode state save. */ |
| 767 | /* MS: restore r11 -> FIXME move before SAVE_REG */ | ||
| 768 | lwi r11, r0, TOPHYS(PER_CPU(R11_SAVE)); | ||
| 769 | /* MS: get the saved current */ | 660 | /* MS: get the saved current */ |
| 770 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | 661 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
| 771 | tophys(r1,r1); | 662 | tophys(r1,r1); |
| @@ -774,27 +665,18 @@ C_ENTRY(_interrupt): | |||
| 774 | tophys(r1,r1); | 665 | tophys(r1,r1); |
| 775 | /* save registers */ | 666 | /* save registers */ |
| 776 | addik r1, r1, -STATE_SAVE_SIZE; | 667 | addik r1, r1, -STATE_SAVE_SIZE; |
| 777 | swi r3, r1, PTO+PT_R3; | ||
| 778 | swi r4, r1, PTO+PT_R4; | ||
| 779 | SAVE_REGS | 668 | SAVE_REGS |
| 780 | /* calculate mode */ | 669 | /* calculate mode */ |
| 781 | swi r0, r1, PTO + PT_MODE; | 670 | swi r0, r1, PTO + PT_MODE; |
| 782 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | 671 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); |
| 783 | swi r11, r1, PTO+PT_R1; | 672 | swi r11, r1, PTO+PT_R1; |
| 784 | /* setup kernel mode to KM */ | 673 | clear_ums; |
| 785 | addi r11, r0, 1; | ||
| 786 | swi r11, r0, TOPHYS(PER_CPU(KM)); | ||
| 787 | |||
| 788 | 2: | 674 | 2: |
| 789 | lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | 675 | lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
| 790 | swi r0, r1, PTO + PT_R0; | ||
| 791 | tovirt(r1,r1) | 676 | tovirt(r1,r1) |
| 792 | la r5, r1, PTO; | 677 | addik r15, r0, irq_call; |
| 793 | set_vms; | 678 | irq_call:rtbd r0, do_IRQ; |
| 794 | la r11, r0, do_IRQ; | 679 | addik r5, r1, PTO; |
| 795 | la r15, r0, irq_call; | ||
| 796 | irq_call:rtbd r11, 0; | ||
| 797 | nop; | ||
| 798 | 680 | ||
| 799 | /* MS: we are in virtual mode */ | 681 | /* MS: we are in virtual mode */ |
| 800 | ret_from_irq: | 682 | ret_from_irq: |
| @@ -815,7 +697,7 @@ ret_from_irq: | |||
| 815 | beqid r11, no_intr_resched | 697 | beqid r11, no_intr_resched |
| 816 | /* Handle a signal return; Pending signals should be in r18. */ | 698 | /* Handle a signal return; Pending signals should be in r18. */ |
| 817 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 699 | addi r7, r0, 0; /* Arg 3: int in_syscall */ |
| 818 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | 700 | addik r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
| 819 | bralid r15, do_signal; /* Handle any signals */ | 701 | bralid r15, do_signal; /* Handle any signals */ |
| 820 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | 702 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
| 821 | 703 | ||
| @@ -823,12 +705,9 @@ ret_from_irq: | |||
| 823 | no_intr_resched: | 705 | no_intr_resched: |
| 824 | /* Disable interrupts, we are now committed to the state restore */ | 706 | /* Disable interrupts, we are now committed to the state restore */ |
| 825 | disable_irq | 707 | disable_irq |
| 826 | swi r0, r0, PER_CPU(KM); /* MS: Now officially in user state. */ | ||
| 827 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); | 708 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); |
| 828 | VM_OFF; | 709 | VM_OFF; |
| 829 | tophys(r1,r1); | 710 | tophys(r1,r1); |
| 830 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ | ||
| 831 | lwi r4, r1, PTO + PT_R4; | ||
| 832 | RESTORE_REGS | 711 | RESTORE_REGS |
| 833 | addik r1, r1, STATE_SAVE_SIZE /* MS: Clean up stack space. */ | 712 | addik r1, r1, STATE_SAVE_SIZE /* MS: Clean up stack space. */ |
| 834 | lwi r1, r1, PT_R1 - PT_SIZE; | 713 | lwi r1, r1, PT_R1 - PT_SIZE; |
| @@ -857,8 +736,6 @@ restore: | |||
| 857 | #endif | 736 | #endif |
| 858 | VM_OFF /* MS: turn off MMU */ | 737 | VM_OFF /* MS: turn off MMU */ |
| 859 | tophys(r1,r1) | 738 | tophys(r1,r1) |
| 860 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ | ||
| 861 | lwi r4, r1, PTO + PT_R4; | ||
| 862 | RESTORE_REGS | 739 | RESTORE_REGS |
| 863 | addik r1, r1, STATE_SAVE_SIZE /* MS: Clean up stack space. */ | 740 | addik r1, r1, STATE_SAVE_SIZE /* MS: Clean up stack space. */ |
| 864 | tovirt(r1,r1); | 741 | tovirt(r1,r1); |
| @@ -868,86 +745,91 @@ IRQ_return: /* MS: Make global symbol for debugging */ | |||
| 868 | nop | 745 | nop |
| 869 | 746 | ||
| 870 | /* | 747 | /* |
| 871 | * `Debug' trap | 748 | * Debug trap for KGDB. Enter to _debug_exception by brki r16, 0x18 |
| 872 | * We enter dbtrap in "BIP" (breakpoint) mode. | 749 | * and call handling function with saved pt_regs |
| 873 | * So we exit the breakpoint mode with an 'rtbd' and proceed with the | ||
| 874 | * original dbtrap. | ||
| 875 | * however, wait to save state first | ||
| 876 | */ | 750 | */ |
| 877 | C_ENTRY(_debug_exception): | 751 | C_ENTRY(_debug_exception): |
| 878 | /* BIP bit is set on entry, no interrupts can occur */ | 752 | /* BIP bit is set on entry, no interrupts can occur */ |
| 879 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) | 753 | swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)) |
| 880 | 754 | ||
| 881 | swi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* Save r11 */ | 755 | mfs r1, rmsr |
| 882 | set_bip; /*equalize initial state for all possible entries*/ | 756 | nop |
| 883 | clear_eip; | 757 | andi r1, r1, MSR_UMS |
| 884 | enable_irq; | 758 | bnei r1, 1f |
| 885 | lwi r11, r0, TOPHYS(PER_CPU(KM));/* See if already in kernel mode.*/ | 759 | /* MS: Kernel-mode state save - kgdb */ |
| 886 | beqi r11, 1f; /* Jump ahead if coming from user */ | 760 | lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/ |
| 887 | /* Kernel-mode state save. */ | ||
| 888 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/ | ||
| 889 | tophys(r1,r11); | ||
| 890 | swi r11, r1, (PT_R1-PT_SIZE); /* Save original SP. */ | ||
| 891 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */ | ||
| 892 | 761 | ||
| 893 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ | 762 | /* BIP bit is set on entry, no interrupts can occur */ |
| 894 | swi r3, r1, PTO + PT_R3; | 763 | addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; |
| 895 | swi r4, r1, PTO + PT_R4; | ||
| 896 | SAVE_REGS; | 764 | SAVE_REGS; |
| 765 | /* save all regs to pt_reg structure */ | ||
| 766 | swi r0, r1, PTO+PT_R0; /* R0 must be saved too */ | ||
| 767 | swi r14, r1, PTO+PT_R14 /* rewrite saved R14 value */ | ||
| 768 | swi r16, r1, PTO+PT_R16 | ||
| 769 | swi r16, r1, PTO+PT_PC; /* PC and r16 are the same */ | ||
| 770 | swi r17, r1, PTO+PT_R17 | ||
| 771 | /* save special purpose registers to pt_regs */ | ||
| 772 | mfs r11, rear; | ||
| 773 | swi r11, r1, PTO+PT_EAR; | ||
| 774 | mfs r11, resr; | ||
| 775 | swi r11, r1, PTO+PT_ESR; | ||
| 776 | mfs r11, rfsr; | ||
| 777 | swi r11, r1, PTO+PT_FSR; | ||
| 778 | |||
| 779 | /* stack pointer is in physical address at it is decrease | ||
| 780 | * by STATE_SAVE_SIZE but we need to get correct R1 value */ | ||
| 781 | addik r11, r1, CONFIG_KERNEL_START - CONFIG_KERNEL_BASE_ADDR + STATE_SAVE_SIZE; | ||
| 782 | swi r11, r1, PTO+PT_R1 | ||
| 783 | /* MS: r31 - current pointer isn't changed */ | ||
| 784 | tovirt(r1,r1) | ||
| 785 | #ifdef CONFIG_KGDB | ||
| 786 | addi r5, r1, PTO /* pass pt_reg address as the first arg */ | ||
| 787 | la r15, r0, dbtrap_call; /* return address */ | ||
| 788 | rtbd r0, microblaze_kgdb_break | ||
| 789 | nop; | ||
| 790 | #endif | ||
| 791 | /* MS: Place handler for brki from kernel space if KGDB is OFF. | ||
| 792 | * It is very unlikely that another brki instruction is called. */ | ||
| 793 | bri 0 | ||
| 897 | 794 | ||
| 898 | addi r11, r0, 1; /* Was in kernel-mode. */ | 795 | /* MS: User-mode state save - gdb */ |
| 899 | swi r11, r1, PTO + PT_MODE; | 796 | 1: lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ |
| 900 | brid 2f; | ||
| 901 | nop; /* Fill delay slot */ | ||
| 902 | 1: /* User-mode state save. */ | ||
| 903 | lwi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* restore r11 */ | ||
| 904 | lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ | ||
| 905 | tophys(r1,r1); | 797 | tophys(r1,r1); |
| 906 | lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ | 798 | lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ |
| 907 | addik r1, r1, THREAD_SIZE; /* calculate kernel stack pointer */ | 799 | addik r1, r1, THREAD_SIZE; /* calculate kernel stack pointer */ |
| 908 | tophys(r1,r1); | 800 | tophys(r1,r1); |
| 909 | 801 | ||
| 910 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ | 802 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ |
| 911 | swi r3, r1, PTO + PT_R3; | ||
| 912 | swi r4, r1, PTO + PT_R4; | ||
| 913 | SAVE_REGS; | 803 | SAVE_REGS; |
| 914 | 804 | swi r17, r1, PTO+PT_R17; | |
| 915 | swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */ | 805 | swi r16, r1, PTO+PT_R16; |
| 806 | swi r16, r1, PTO+PT_PC; /* Save LP */ | ||
| 807 | swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ | ||
| 916 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | 808 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); |
| 917 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ | 809 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ |
| 918 | addi r11, r0, 1; | 810 | lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
| 919 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ | ||
| 920 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | ||
| 921 | /* Save away the syscall number. */ | ||
| 922 | swi r0, r1, PTO+PT_R0; | ||
| 923 | tovirt(r1,r1) | 811 | tovirt(r1,r1) |
| 924 | |||
| 925 | addi r5, r0, SIGTRAP /* send the trap signal */ | ||
| 926 | add r6, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | ||
| 927 | addk r7, r0, r0 /* 3rd param zero */ | ||
| 928 | |||
| 929 | set_vms; | 812 | set_vms; |
| 930 | la r11, r0, send_sig; | 813 | addik r5, r1, PTO; |
| 931 | la r15, r0, dbtrap_call; | 814 | addik r15, r0, dbtrap_call; |
| 932 | dbtrap_call: rtbd r11, 0; | 815 | dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ |
| 933 | nop; | 816 | rtbd r0, sw_exception |
| 817 | nop | ||
| 934 | 818 | ||
| 935 | set_bip; /* Ints masked for state restore*/ | 819 | /* MS: The first instruction for the second part of the gdb/kgdb */ |
| 936 | lwi r11, r1, PTO+PT_MODE; | 820 | set_bip; /* Ints masked for state restore */ |
| 821 | lwi r11, r1, PTO + PT_MODE; | ||
| 937 | bnei r11, 2f; | 822 | bnei r11, 2f; |
| 938 | 823 | /* MS: Return to user space - gdb */ | |
| 939 | /* Get current task ptr into r11 */ | 824 | /* Get current task ptr into r11 */ |
| 940 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ | 825 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
| 941 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 826 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
| 942 | andi r11, r11, _TIF_NEED_RESCHED; | 827 | andi r11, r11, _TIF_NEED_RESCHED; |
| 943 | beqi r11, 5f; | 828 | beqi r11, 5f; |
| 944 | 829 | ||
| 945 | /* Call the scheduler before returning from a syscall/trap. */ | 830 | /* Call the scheduler before returning from a syscall/trap. */ |
| 946 | |||
| 947 | bralid r15, schedule; /* Call scheduler */ | 831 | bralid r15, schedule; /* Call scheduler */ |
| 948 | nop; /* delay slot */ | 832 | nop; /* delay slot */ |
| 949 | /* XXX Is PT_DTRACE handling needed here? */ | ||
| 950 | /* XXX m68knommu also checks TASK_STATE & TASK_COUNTER here. */ | ||
| 951 | 833 | ||
| 952 | /* Maybe handle a signal */ | 834 | /* Maybe handle a signal */ |
| 953 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ | 835 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
| @@ -955,54 +837,40 @@ dbtrap_call: rtbd r11, 0; | |||
| 955 | andi r11, r11, _TIF_SIGPENDING; | 837 | andi r11, r11, _TIF_SIGPENDING; |
| 956 | beqi r11, 1f; /* Signals to handle, handle them */ | 838 | beqi r11, 1f; /* Signals to handle, handle them */ |
| 957 | 839 | ||
| 958 | /* Handle a signal return; Pending signals should be in r18. */ | 840 | addik r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
| 959 | /* Not all registers are saved by the normal trap/interrupt entry | ||
| 960 | points (for instance, call-saved registers (because the normal | ||
| 961 | C-compiler calling sequence in the kernel makes sure they're | ||
| 962 | preserved), and call-clobbered registers in the case of | ||
| 963 | traps), but signal handlers may want to examine or change the | ||
| 964 | complete register state. Here we save anything not saved by | ||
| 965 | the normal entry sequence, so that it may be safely restored | ||
| 966 | (in a possibly modified form) after do_signal returns. */ | ||
| 967 | |||
| 968 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | ||
| 969 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 841 | addi r7, r0, 0; /* Arg 3: int in_syscall */ |
| 970 | bralid r15, do_signal; /* Handle any signals */ | 842 | bralid r15, do_signal; /* Handle any signals */ |
| 971 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | 843 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
| 972 | 844 | ||
| 973 | |||
| 974 | /* Finally, return to user state. */ | 845 | /* Finally, return to user state. */ |
| 975 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | 846 | 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
| 976 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ | ||
| 977 | VM_OFF; | 847 | VM_OFF; |
| 978 | tophys(r1,r1); | 848 | tophys(r1,r1); |
| 979 | 849 | /* MS: Restore all regs */ | |
| 980 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
| 981 | lwi r4, r1, PTO+PT_R4; | ||
| 982 | RESTORE_REGS | 850 | RESTORE_REGS |
| 983 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | 851 | lwi r17, r1, PTO+PT_R17; |
| 984 | 852 | lwi r16, r1, PTO+PT_R16; | |
| 985 | 853 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space */ | |
| 986 | lwi r1, r1, PT_R1 - PT_SIZE; | 854 | lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ |
| 987 | /* Restore user stack pointer. */ | 855 | DBTRAP_return_user: /* MS: Make global symbol for debugging */ |
| 988 | bri 6f; | 856 | rtbd r16, 0; /* MS: Instructions to return from a debug trap */ |
| 857 | nop; | ||
| 989 | 858 | ||
| 990 | /* Return to kernel state. */ | 859 | /* MS: Return to kernel state - kgdb */ |
| 991 | 2: VM_OFF; | 860 | 2: VM_OFF; |
| 992 | tophys(r1,r1); | 861 | tophys(r1,r1); |
| 993 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | 862 | /* MS: Restore all regs */ |
| 994 | lwi r4, r1, PTO+PT_R4; | ||
| 995 | RESTORE_REGS | 863 | RESTORE_REGS |
| 996 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space. */ | 864 | lwi r14, r1, PTO+PT_R14; |
| 997 | 865 | lwi r16, r1, PTO+PT_PC; | |
| 866 | lwi r17, r1, PTO+PT_R17; | ||
| 867 | addik r1, r1, STATE_SAVE_SIZE; /* MS: Clean up stack space */ | ||
| 998 | tovirt(r1,r1); | 868 | tovirt(r1,r1); |
| 999 | 6: | 869 | DBTRAP_return_kernel: /* MS: Make global symbol for debugging */ |
| 1000 | DBTRAP_return: /* Make global symbol for debugging */ | 870 | rtbd r16, 0; /* MS: Instructions to return from a debug trap */ |
| 1001 | rtbd r14, 0; /* Instructions to return from an IRQ */ | ||
| 1002 | nop; | 871 | nop; |
| 1003 | 872 | ||
| 1004 | 873 | ||
| 1005 | |||
| 1006 | ENTRY(_switch_to) | 874 | ENTRY(_switch_to) |
| 1007 | /* prepare return value */ | 875 | /* prepare return value */ |
| 1008 | addk r3, r0, CURRENT_TASK | 876 | addk r3, r0, CURRENT_TASK |
| @@ -1037,16 +905,12 @@ ENTRY(_switch_to) | |||
| 1037 | swi r30, r11, CC_R30 | 905 | swi r30, r11, CC_R30 |
| 1038 | /* special purpose registers */ | 906 | /* special purpose registers */ |
| 1039 | mfs r12, rmsr | 907 | mfs r12, rmsr |
| 1040 | nop | ||
| 1041 | swi r12, r11, CC_MSR | 908 | swi r12, r11, CC_MSR |
| 1042 | mfs r12, rear | 909 | mfs r12, rear |
| 1043 | nop | ||
| 1044 | swi r12, r11, CC_EAR | 910 | swi r12, r11, CC_EAR |
| 1045 | mfs r12, resr | 911 | mfs r12, resr |
| 1046 | nop | ||
| 1047 | swi r12, r11, CC_ESR | 912 | swi r12, r11, CC_ESR |
| 1048 | mfs r12, rfsr | 913 | mfs r12, rfsr |
| 1049 | nop | ||
| 1050 | swi r12, r11, CC_FSR | 914 | swi r12, r11, CC_FSR |
| 1051 | 915 | ||
| 1052 | /* update r31, the current-give me pointer to task which will be next */ | 916 | /* update r31, the current-give me pointer to task which will be next */ |
| @@ -1085,10 +949,8 @@ ENTRY(_switch_to) | |||
| 1085 | /* special purpose registers */ | 949 | /* special purpose registers */ |
| 1086 | lwi r12, r11, CC_FSR | 950 | lwi r12, r11, CC_FSR |
| 1087 | mts rfsr, r12 | 951 | mts rfsr, r12 |
| 1088 | nop | ||
| 1089 | lwi r12, r11, CC_MSR | 952 | lwi r12, r11, CC_MSR |
| 1090 | mts rmsr, r12 | 953 | mts rmsr, r12 |
| 1091 | nop | ||
| 1092 | 954 | ||
| 1093 | rtsd r15, 8 | 955 | rtsd r15, 8 |
| 1094 | nop | 956 | nop |
| @@ -1096,15 +958,6 @@ ENTRY(_switch_to) | |||
| 1096 | ENTRY(_reset) | 958 | ENTRY(_reset) |
| 1097 | brai 0x70; /* Jump back to FS-boot */ | 959 | brai 0x70; /* Jump back to FS-boot */ |
| 1098 | 960 | ||
| 1099 | ENTRY(_break) | ||
| 1100 | mfs r5, rmsr | ||
| 1101 | nop | ||
| 1102 | swi r5, r0, 0x250 + TOPHYS(r0_ram) | ||
| 1103 | mfs r5, resr | ||
| 1104 | nop | ||
| 1105 | swi r5, r0, 0x254 + TOPHYS(r0_ram) | ||
| 1106 | bri 0 | ||
| 1107 | |||
| 1108 | /* These are compiled and loaded into high memory, then | 961 | /* These are compiled and loaded into high memory, then |
| 1109 | * copied into place in mach_early_setup */ | 962 | * copied into place in mach_early_setup */ |
| 1110 | .section .init.ivt, "ax" | 963 | .section .init.ivt, "ax" |
| @@ -1116,14 +969,38 @@ ENTRY(_break) | |||
| 1116 | nop | 969 | nop |
| 1117 | brai TOPHYS(_user_exception); /* syscall handler */ | 970 | brai TOPHYS(_user_exception); /* syscall handler */ |
| 1118 | brai TOPHYS(_interrupt); /* Interrupt handler */ | 971 | brai TOPHYS(_interrupt); /* Interrupt handler */ |
| 1119 | brai TOPHYS(_break); /* nmi trap handler */ | 972 | brai TOPHYS(_debug_exception); /* debug trap handler */ |
| 1120 | brai TOPHYS(_hw_exception_handler); /* HW exception handler */ | 973 | brai TOPHYS(_hw_exception_handler); /* HW exception handler */ |
| 1121 | 974 | ||
| 1122 | .org 0x60 | ||
| 1123 | brai TOPHYS(_debug_exception); /* debug trap handler*/ | ||
| 1124 | |||
| 1125 | .section .rodata,"a" | 975 | .section .rodata,"a" |
| 1126 | #include "syscall_table.S" | 976 | #include "syscall_table.S" |
| 1127 | 977 | ||
| 1128 | syscall_table_size=(.-sys_call_table) | 978 | syscall_table_size=(.-sys_call_table) |
| 1129 | 979 | ||
| 980 | type_SYSCALL: | ||
| 981 | .ascii "SYSCALL\0" | ||
| 982 | type_IRQ: | ||
| 983 | .ascii "IRQ\0" | ||
| 984 | type_IRQ_PREEMPT: | ||
| 985 | .ascii "IRQ (PREEMPTED)\0" | ||
| 986 | type_SYSCALL_PREEMPT: | ||
| 987 | .ascii " SYSCALL (PREEMPTED)\0" | ||
| 988 | |||
| 989 | /* | ||
| 990 | * Trap decoding for stack unwinder | ||
| 991 | * Tuples are (start addr, end addr, string) | ||
| 992 | * If return address lies on [start addr, end addr], | ||
| 993 | * unwinder displays 'string' | ||
| 994 | */ | ||
| 995 | |||
| 996 | .align 4 | ||
| 997 | .global microblaze_trap_handlers | ||
| 998 | microblaze_trap_handlers: | ||
| 999 | /* Exact matches come first */ | ||
| 1000 | .word ret_from_trap; .word ret_from_trap ; .word type_SYSCALL | ||
| 1001 | .word ret_from_irq ; .word ret_from_irq ; .word type_IRQ | ||
| 1002 | /* Fuzzy matches go here */ | ||
| 1003 | .word ret_from_irq ; .word no_intr_resched ; .word type_IRQ_PREEMPT | ||
| 1004 | .word ret_from_trap; .word TRAP_return ; .word type_SYSCALL_PREEMPT | ||
| 1005 | /* End of table */ | ||
| 1006 | .word 0 ; .word 0 ; .word 0 | ||
diff --git a/arch/microblaze/kernel/exceptions.c b/arch/microblaze/kernel/exceptions.c index 02cbdfe5aa8d..b98ee8d0c1cd 100644 --- a/arch/microblaze/kernel/exceptions.c +++ b/arch/microblaze/kernel/exceptions.c | |||
| @@ -48,12 +48,17 @@ void die(const char *str, struct pt_regs *fp, long err) | |||
| 48 | do_exit(err); | 48 | do_exit(err); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | /* for user application debugging */ | ||
| 52 | void sw_exception(struct pt_regs *regs) | ||
| 53 | { | ||
| 54 | _exception(SIGTRAP, regs, TRAP_BRKPT, regs->r16); | ||
| 55 | } | ||
| 56 | |||
| 51 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | 57 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) |
| 52 | { | 58 | { |
| 53 | siginfo_t info; | 59 | siginfo_t info; |
| 54 | 60 | ||
| 55 | if (kernel_mode(regs)) { | 61 | if (kernel_mode(regs)) { |
| 56 | debugger(regs); | ||
| 57 | die("Exception in kernel mode", regs, signr); | 62 | die("Exception in kernel mode", regs, signr); |
| 58 | } | 63 | } |
| 59 | info.si_signo = signr; | 64 | info.si_signo = signr; |
| @@ -143,7 +148,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, | |||
| 143 | #ifdef CONFIG_MMU | 148 | #ifdef CONFIG_MMU |
| 144 | case MICROBLAZE_PRIVILEGED_EXCEPTION: | 149 | case MICROBLAZE_PRIVILEGED_EXCEPTION: |
| 145 | pr_debug(KERN_WARNING "Privileged exception\n"); | 150 | pr_debug(KERN_WARNING "Privileged exception\n"); |
| 146 | /* "brk r0,r0" - used as debug breakpoint */ | 151 | /* "brk r0,r0" - used as debug breakpoint - old toolchain */ |
| 147 | if (get_user(code, (unsigned long *)regs->pc) == 0 | 152 | if (get_user(code, (unsigned long *)regs->pc) == 0 |
| 148 | && code == 0x980c0000) { | 153 | && code == 0x980c0000) { |
| 149 | _exception(SIGTRAP, regs, TRAP_BRKPT, addr); | 154 | _exception(SIGTRAP, regs, TRAP_BRKPT, addr); |
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index 1bf739888260..42434008209e 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S | |||
| @@ -43,10 +43,10 @@ | |||
| 43 | .global empty_zero_page | 43 | .global empty_zero_page |
| 44 | .align 12 | 44 | .align 12 |
| 45 | empty_zero_page: | 45 | empty_zero_page: |
| 46 | .space 4096 | 46 | .space PAGE_SIZE |
| 47 | .global swapper_pg_dir | 47 | .global swapper_pg_dir |
| 48 | swapper_pg_dir: | 48 | swapper_pg_dir: |
| 49 | .space 4096 | 49 | .space PAGE_SIZE |
| 50 | 50 | ||
| 51 | #endif /* CONFIG_MMU */ | 51 | #endif /* CONFIG_MMU */ |
| 52 | 52 | ||
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S index 995a2123635b..781195438ee6 100644 --- a/arch/microblaze/kernel/hw_exception_handler.S +++ b/arch/microblaze/kernel/hw_exception_handler.S | |||
| @@ -78,9 +78,6 @@ | |||
| 78 | #include <asm/asm-offsets.h> | 78 | #include <asm/asm-offsets.h> |
| 79 | 79 | ||
| 80 | /* Helpful Macros */ | 80 | /* Helpful Macros */ |
| 81 | #ifndef CONFIG_MMU | ||
| 82 | #define EX_HANDLER_STACK_SIZ (4*19) | ||
| 83 | #endif | ||
| 84 | #define NUM_TO_REG(num) r ## num | 81 | #define NUM_TO_REG(num) r ## num |
| 85 | 82 | ||
| 86 | #ifdef CONFIG_MMU | 83 | #ifdef CONFIG_MMU |
| @@ -988,6 +985,7 @@ ex_unaligned_fixup: | |||
| 988 | .end _unaligned_data_exception | 985 | .end _unaligned_data_exception |
| 989 | #endif /* CONFIG_MMU */ | 986 | #endif /* CONFIG_MMU */ |
| 990 | 987 | ||
| 988 | .global ex_handler_unhandled | ||
| 991 | ex_handler_unhandled: | 989 | ex_handler_unhandled: |
| 992 | /* FIXME add handle function for unhandled exception - dump register */ | 990 | /* FIXME add handle function for unhandled exception - dump register */ |
| 993 | bri 0 | 991 | bri 0 |
diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c index 8f120aca123d..598f1fd61c89 100644 --- a/arch/microblaze/kernel/irq.c +++ b/arch/microblaze/kernel/irq.c | |||
| @@ -37,6 +37,7 @@ void __irq_entry do_IRQ(struct pt_regs *regs) | |||
| 37 | { | 37 | { |
| 38 | unsigned int irq; | 38 | unsigned int irq; |
| 39 | struct pt_regs *old_regs = set_irq_regs(regs); | 39 | struct pt_regs *old_regs = set_irq_regs(regs); |
| 40 | trace_hardirqs_off(); | ||
| 40 | 41 | ||
| 41 | irq_enter(); | 42 | irq_enter(); |
| 42 | irq = get_irq(regs); | 43 | irq = get_irq(regs); |
| @@ -53,6 +54,7 @@ next_irq: | |||
| 53 | 54 | ||
| 54 | irq_exit(); | 55 | irq_exit(); |
| 55 | set_irq_regs(old_regs); | 56 | set_irq_regs(old_regs); |
| 57 | trace_hardirqs_on(); | ||
| 56 | } | 58 | } |
| 57 | 59 | ||
| 58 | int show_interrupts(struct seq_file *p, void *v) | 60 | int show_interrupts(struct seq_file *p, void *v) |
diff --git a/arch/microblaze/kernel/kgdb.c b/arch/microblaze/kernel/kgdb.c new file mode 100644 index 000000000000..bfc006b7f2d8 --- /dev/null +++ b/arch/microblaze/kernel/kgdb.c | |||
| @@ -0,0 +1,147 @@ | |||
| 1 | /* | ||
| 2 | * Microblaze KGDB support | ||
| 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 | |||
| 9 | #include <linux/kgdb.h> | ||
| 10 | #include <linux/kdebug.h> | ||
| 11 | #include <linux/irq.h> | ||
| 12 | #include <linux/io.h> | ||
| 13 | #include <asm/cacheflush.h> | ||
| 14 | #include <asm/asm-offsets.h> | ||
| 15 | #include <asm/pvr.h> | ||
| 16 | |||
| 17 | #define GDB_REG 0 | ||
| 18 | #define GDB_PC 32 | ||
| 19 | #define GDB_MSR 33 | ||
| 20 | #define GDB_EAR 34 | ||
| 21 | #define GDB_ESR 35 | ||
| 22 | #define GDB_FSR 36 | ||
| 23 | #define GDB_BTR 37 | ||
| 24 | #define GDB_PVR 38 | ||
| 25 | #define GDB_REDR 50 | ||
| 26 | #define GDB_RPID 51 | ||
| 27 | #define GDB_RZPR 52 | ||
| 28 | #define GDB_RTLBX 53 | ||
| 29 | #define GDB_RTLBSX 54 /* mfs can't read it */ | ||
| 30 | #define GDB_RTLBLO 55 | ||
| 31 | #define GDB_RTLBHI 56 | ||
| 32 | |||
| 33 | /* keep pvr separately because it is unchangeble */ | ||
| 34 | struct pvr_s pvr; | ||
| 35 | |||
| 36 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | ||
| 37 | { | ||
| 38 | int i; | ||
| 39 | unsigned long *pt_regb = (unsigned long *)regs; | ||
| 40 | int temp; | ||
| 41 | /* registers r0 - r31, pc, msr, ear, esr, fsr + do not save pt_mode */ | ||
| 42 | for (i = 0; i < (sizeof(struct pt_regs) / 4) - 1; i++) | ||
| 43 | gdb_regs[i] = pt_regb[i]; | ||
| 44 | |||
| 45 | /* Branch target register can't be changed */ | ||
| 46 | __asm__ __volatile__ ("mfs %0, rbtr;" : "=r"(temp) : ); | ||
| 47 | gdb_regs[GDB_BTR] = temp; | ||
| 48 | |||
| 49 | /* pvr part - we have 11 pvr regs */ | ||
| 50 | for (i = 0; i < sizeof(struct pvr_s)/4; i++) | ||
| 51 | gdb_regs[GDB_PVR + i] = pvr.pvr[i]; | ||
| 52 | |||
| 53 | /* read special registers - can't be changed */ | ||
| 54 | __asm__ __volatile__ ("mfs %0, redr;" : "=r"(temp) : ); | ||
| 55 | gdb_regs[GDB_REDR] = temp; | ||
| 56 | __asm__ __volatile__ ("mfs %0, rpid;" : "=r"(temp) : ); | ||
| 57 | gdb_regs[GDB_RPID] = temp; | ||
| 58 | __asm__ __volatile__ ("mfs %0, rzpr;" : "=r"(temp) : ); | ||
| 59 | gdb_regs[GDB_RZPR] = temp; | ||
| 60 | __asm__ __volatile__ ("mfs %0, rtlbx;" : "=r"(temp) : ); | ||
| 61 | gdb_regs[GDB_RTLBX] = temp; | ||
| 62 | __asm__ __volatile__ ("mfs %0, rtlblo;" : "=r"(temp) : ); | ||
| 63 | gdb_regs[GDB_RTLBLO] = temp; | ||
| 64 | __asm__ __volatile__ ("mfs %0, rtlbhi;" : "=r"(temp) : ); | ||
| 65 | gdb_regs[GDB_RTLBHI] = temp; | ||
| 66 | } | ||
| 67 | |||
| 68 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | ||
| 69 | { | ||
| 70 | int i; | ||
| 71 | unsigned long *pt_regb = (unsigned long *)regs; | ||
| 72 | |||
| 73 | /* pt_regs and gdb_regs have the same 37 values. | ||
| 74 | * The rest of gdb_regs are unused and can't be changed. | ||
| 75 | * r0 register value can't be changed too. */ | ||
| 76 | for (i = 1; i < (sizeof(struct pt_regs) / 4) - 1; i++) | ||
| 77 | pt_regb[i] = gdb_regs[i]; | ||
| 78 | } | ||
| 79 | |||
| 80 | void microblaze_kgdb_break(struct pt_regs *regs) | ||
| 81 | { | ||
| 82 | if (kgdb_handle_exception(1, SIGTRAP, 0, regs) != 0) | ||
| 83 | return 0; | ||
| 84 | |||
| 85 | /* Jump over the first arch_kgdb_breakpoint which is barrier to | ||
| 86 | * get kgdb work. The same solution is used for powerpc */ | ||
| 87 | if (*(u32 *) (regs->pc) == *(u32 *) (&arch_kgdb_ops.gdb_bpt_instr)) | ||
| 88 | regs->pc += BREAK_INSTR_SIZE; | ||
| 89 | } | ||
| 90 | |||
| 91 | /* untested */ | ||
| 92 | void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | ||
| 93 | { | ||
| 94 | int i; | ||
| 95 | unsigned long *pt_regb = (unsigned long *)(p->thread.regs); | ||
| 96 | |||
| 97 | /* registers r0 - r31, pc, msr, ear, esr, fsr + do not save pt_mode */ | ||
| 98 | for (i = 0; i < (sizeof(struct pt_regs) / 4) - 1; i++) | ||
| 99 | gdb_regs[i] = pt_regb[i]; | ||
| 100 | |||
| 101 | /* pvr part - we have 11 pvr regs */ | ||
| 102 | for (i = 0; i < sizeof(struct pvr_s)/4; i++) | ||
| 103 | gdb_regs[GDB_PVR + i] = pvr.pvr[i]; | ||
| 104 | } | ||
| 105 | |||
| 106 | void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip) | ||
| 107 | { | ||
| 108 | regs->pc = ip; | ||
| 109 | } | ||
| 110 | |||
| 111 | int kgdb_arch_handle_exception(int vector, int signo, int err_code, | ||
| 112 | char *remcom_in_buffer, char *remcom_out_buffer, | ||
| 113 | struct pt_regs *regs) | ||
| 114 | { | ||
| 115 | char *ptr; | ||
| 116 | unsigned long address; | ||
| 117 | int cpu = smp_processor_id(); | ||
| 118 | |||
| 119 | switch (remcom_in_buffer[0]) { | ||
| 120 | case 'c': | ||
| 121 | /* handle the optional parameter */ | ||
| 122 | ptr = &remcom_in_buffer[1]; | ||
| 123 | if (kgdb_hex2long(&ptr, &address)) | ||
| 124 | regs->pc = address; | ||
| 125 | |||
| 126 | return 0; | ||
| 127 | } | ||
| 128 | return -1; /* this means that we do not want to exit from the handler */ | ||
| 129 | } | ||
| 130 | |||
| 131 | int kgdb_arch_init(void) | ||
| 132 | { | ||
| 133 | get_pvr(&pvr); /* Fill PVR structure */ | ||
| 134 | return 0; | ||
| 135 | } | ||
| 136 | |||
| 137 | void kgdb_arch_exit(void) | ||
| 138 | { | ||
| 139 | /* Nothing to do */ | ||
| 140 | } | ||
| 141 | |||
| 142 | /* | ||
| 143 | * Global data | ||
| 144 | */ | ||
| 145 | struct kgdb_arch arch_kgdb_ops = { | ||
| 146 | .gdb_bpt_instr = {0xba, 0x0c, 0x00, 0x18}, /* brki r16, 0x18 */ | ||
| 147 | }; | ||
diff --git a/arch/microblaze/kernel/misc.S b/arch/microblaze/kernel/misc.S index 0fb5fc6c1fc2..206da3da361f 100644 --- a/arch/microblaze/kernel/misc.S +++ b/arch/microblaze/kernel/misc.S | |||
| @@ -76,7 +76,7 @@ early_console_reg_tlb_alloc: | |||
| 76 | * the UARTs nice and early. We use a 4k real==virtual mapping. | 76 | * the UARTs nice and early. We use a 4k real==virtual mapping. |
| 77 | */ | 77 | */ |
| 78 | ori r4, r0, MICROBLAZE_TLB_SIZE - 1 | 78 | ori r4, r0, MICROBLAZE_TLB_SIZE - 1 |
| 79 | mts rtlbx, r4 /* TLB slot 2 */ | 79 | mts rtlbx, r4 /* TLB slot 63 */ |
| 80 | 80 | ||
| 81 | or r4,r5,r0 | 81 | or r4,r5,r0 |
| 82 | andi r4,r4,0xfffff000 | 82 | andi r4,r4,0xfffff000 |
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c index 09bed44dfcd3..ba7c4b16ed35 100644 --- a/arch/microblaze/kernel/process.c +++ b/arch/microblaze/kernel/process.c | |||
| @@ -76,8 +76,11 @@ __setup("hlt", hlt_setup); | |||
| 76 | void default_idle(void) | 76 | void default_idle(void) |
| 77 | { | 77 | { |
| 78 | if (likely(hlt_counter)) { | 78 | if (likely(hlt_counter)) { |
| 79 | while (!need_resched()) | 79 | local_irq_disable(); |
| 80 | cpu_relax(); | 80 | stop_critical_timings(); |
| 81 | cpu_relax(); | ||
| 82 | start_critical_timings(); | ||
| 83 | local_irq_enable(); | ||
| 81 | } else { | 84 | } else { |
| 82 | clear_thread_flag(TIF_POLLING_NRFLAG); | 85 | clear_thread_flag(TIF_POLLING_NRFLAG); |
| 83 | smp_mb__after_clear_bit(); | 86 | smp_mb__after_clear_bit(); |
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c index a4a7770c6140..dc03ffc8174a 100644 --- a/arch/microblaze/kernel/ptrace.c +++ b/arch/microblaze/kernel/ptrace.c | |||
| @@ -38,6 +38,8 @@ | |||
| 38 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
| 39 | #include <linux/uaccess.h> | 39 | #include <linux/uaccess.h> |
| 40 | #include <asm/asm-offsets.h> | 40 | #include <asm/asm-offsets.h> |
| 41 | #include <asm/cacheflush.h> | ||
| 42 | #include <asm/io.h> | ||
| 41 | 43 | ||
| 42 | /* Returns the address where the register at REG_OFFS in P is stashed away. */ | 44 | /* Returns the address where the register at REG_OFFS in P is stashed away. */ |
| 43 | static microblaze_reg_t *reg_save_addr(unsigned reg_offs, | 45 | static microblaze_reg_t *reg_save_addr(unsigned reg_offs, |
| @@ -101,8 +103,21 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
| 101 | microblaze_reg_t *reg_addr = reg_save_addr(addr, child); | 103 | microblaze_reg_t *reg_addr = reg_save_addr(addr, child); |
| 102 | if (request == PTRACE_PEEKUSR) | 104 | if (request == PTRACE_PEEKUSR) |
| 103 | val = *reg_addr; | 105 | val = *reg_addr; |
| 104 | else | 106 | else { |
| 107 | #if 1 | ||
| 105 | *reg_addr = data; | 108 | *reg_addr = data; |
| 109 | #else | ||
| 110 | /* MS potential problem on WB system | ||
| 111 | * Be aware that reg_addr is virtual address | ||
| 112 | * virt_to_phys conversion is necessary. | ||
| 113 | * This could be sensible solution. | ||
| 114 | */ | ||
| 115 | u32 paddr = virt_to_phys((u32)reg_addr); | ||
| 116 | invalidate_icache_range(paddr, paddr + 4); | ||
| 117 | *reg_addr = data; | ||
| 118 | flush_dcache_range(paddr, paddr + 4); | ||
| 119 | #endif | ||
| 120 | } | ||
| 106 | } else | 121 | } else |
| 107 | rval = -EIO; | 122 | rval = -EIO; |
| 108 | 123 | ||
diff --git a/arch/microblaze/kernel/stacktrace.c b/arch/microblaze/kernel/stacktrace.c index 123692f22647..84bc6686102c 100644 --- a/arch/microblaze/kernel/stacktrace.c +++ b/arch/microblaze/kernel/stacktrace.c | |||
| @@ -14,52 +14,18 @@ | |||
| 14 | #include <linux/thread_info.h> | 14 | #include <linux/thread_info.h> |
| 15 | #include <linux/ptrace.h> | 15 | #include <linux/ptrace.h> |
| 16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
| 17 | #include <asm/unwind.h> | ||
| 17 | 18 | ||
| 18 | /* FIXME initial support */ | ||
| 19 | void save_stack_trace(struct stack_trace *trace) | 19 | void save_stack_trace(struct stack_trace *trace) |
| 20 | { | 20 | { |
| 21 | unsigned long *sp; | 21 | /* Exclude our helper functions from the trace*/ |
| 22 | unsigned long addr; | 22 | trace->skip += 2; |
| 23 | asm("addik %0, r1, 0" : "=r" (sp)); | 23 | microblaze_unwind(NULL, trace); |
| 24 | |||
| 25 | while (!kstack_end(sp)) { | ||
| 26 | addr = *sp++; | ||
| 27 | if (__kernel_text_address(addr)) { | ||
| 28 | if (trace->skip > 0) | ||
| 29 | trace->skip--; | ||
| 30 | else | ||
| 31 | trace->entries[trace->nr_entries++] = addr; | ||
| 32 | |||
| 33 | if (trace->nr_entries >= trace->max_entries) | ||
| 34 | break; | ||
| 35 | } | ||
| 36 | } | ||
| 37 | } | 24 | } |
| 38 | EXPORT_SYMBOL_GPL(save_stack_trace); | 25 | EXPORT_SYMBOL_GPL(save_stack_trace); |
| 39 | 26 | ||
| 40 | void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) | 27 | void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) |
| 41 | { | 28 | { |
| 42 | unsigned int *sp; | 29 | microblaze_unwind(tsk, trace); |
| 43 | unsigned long addr; | ||
| 44 | |||
| 45 | struct thread_info *ti = task_thread_info(tsk); | ||
| 46 | |||
| 47 | if (tsk == current) | ||
| 48 | asm("addik %0, r1, 0" : "=r" (sp)); | ||
| 49 | else | ||
| 50 | sp = (unsigned int *)ti->cpu_context.r1; | ||
| 51 | |||
| 52 | while (!kstack_end(sp)) { | ||
| 53 | addr = *sp++; | ||
| 54 | if (__kernel_text_address(addr)) { | ||
| 55 | if (trace->skip > 0) | ||
| 56 | trace->skip--; | ||
| 57 | else | ||
| 58 | trace->entries[trace->nr_entries++] = addr; | ||
| 59 | |||
| 60 | if (trace->nr_entries >= trace->max_entries) | ||
| 61 | break; | ||
| 62 | } | ||
| 63 | } | ||
| 64 | } | 30 | } |
| 65 | EXPORT_SYMBOL_GPL(save_stack_trace_tsk); | 31 | EXPORT_SYMBOL_GPL(save_stack_trace_tsk); |
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c index ed61b2f17719..b1380ae93ae1 100644 --- a/arch/microblaze/kernel/timer.c +++ b/arch/microblaze/kernel/timer.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <asm/prom.h> | 28 | #include <asm/prom.h> |
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | #include <asm/system.h> | 30 | #include <asm/system.h> |
| 31 | #include <linux/cnt32_to_63.h> | ||
| 31 | 32 | ||
| 32 | #ifdef CONFIG_SELFMOD_TIMER | 33 | #ifdef CONFIG_SELFMOD_TIMER |
| 33 | #include <asm/selfmod.h> | 34 | #include <asm/selfmod.h> |
| @@ -135,7 +136,7 @@ static void microblaze_timer_set_mode(enum clock_event_mode mode, | |||
| 135 | static struct clock_event_device clockevent_microblaze_timer = { | 136 | static struct clock_event_device clockevent_microblaze_timer = { |
| 136 | .name = "microblaze_clockevent", | 137 | .name = "microblaze_clockevent", |
| 137 | .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, | 138 | .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, |
| 138 | .shift = 24, | 139 | .shift = 8, |
| 139 | .rating = 300, | 140 | .rating = 300, |
| 140 | .set_next_event = microblaze_timer_set_next_event, | 141 | .set_next_event = microblaze_timer_set_next_event, |
| 141 | .set_mode = microblaze_timer_set_mode, | 142 | .set_mode = microblaze_timer_set_mode, |
| @@ -195,7 +196,7 @@ static cycle_t microblaze_cc_read(const struct cyclecounter *cc) | |||
| 195 | static struct cyclecounter microblaze_cc = { | 196 | static struct cyclecounter microblaze_cc = { |
| 196 | .read = microblaze_cc_read, | 197 | .read = microblaze_cc_read, |
| 197 | .mask = CLOCKSOURCE_MASK(32), | 198 | .mask = CLOCKSOURCE_MASK(32), |
| 198 | .shift = 24, | 199 | .shift = 8, |
| 199 | }; | 200 | }; |
| 200 | 201 | ||
| 201 | int __init init_microblaze_timecounter(void) | 202 | int __init init_microblaze_timecounter(void) |
| @@ -213,7 +214,7 @@ static struct clocksource clocksource_microblaze = { | |||
| 213 | .rating = 300, | 214 | .rating = 300, |
| 214 | .read = microblaze_read, | 215 | .read = microblaze_read, |
| 215 | .mask = CLOCKSOURCE_MASK(32), | 216 | .mask = CLOCKSOURCE_MASK(32), |
| 216 | .shift = 24, /* I can shift it */ | 217 | .shift = 8, /* I can shift it */ |
| 217 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 218 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 218 | }; | 219 | }; |
| 219 | 220 | ||
| @@ -235,6 +236,12 @@ static int __init microblaze_clocksource_init(void) | |||
| 235 | return 0; | 236 | return 0; |
| 236 | } | 237 | } |
| 237 | 238 | ||
| 239 | /* | ||
| 240 | * We have to protect accesses before timer initialization | ||
| 241 | * and return 0 for sched_clock function below. | ||
| 242 | */ | ||
| 243 | static int timer_initialized; | ||
| 244 | |||
| 238 | void __init time_init(void) | 245 | void __init time_init(void) |
| 239 | { | 246 | { |
| 240 | u32 irq, i = 0; | 247 | u32 irq, i = 0; |
| @@ -289,4 +296,15 @@ void __init time_init(void) | |||
| 289 | #endif | 296 | #endif |
| 290 | microblaze_clocksource_init(); | 297 | microblaze_clocksource_init(); |
| 291 | microblaze_clockevent_init(); | 298 | microblaze_clockevent_init(); |
| 299 | timer_initialized = 1; | ||
| 300 | } | ||
| 301 | |||
| 302 | unsigned long long notrace sched_clock(void) | ||
| 303 | { | ||
| 304 | if (timer_initialized) { | ||
| 305 | struct clocksource *cs = &clocksource_microblaze; | ||
| 306 | cycle_t cyc = cnt32_to_63(cs->read(NULL)); | ||
| 307 | return clocksource_cyc2ns(cyc, cs->mult, cs->shift); | ||
| 308 | } | ||
| 309 | return 0; | ||
| 292 | } | 310 | } |
diff --git a/arch/microblaze/kernel/traps.c b/arch/microblaze/kernel/traps.c index 75e49202a5ed..ba034d421ec2 100644 --- a/arch/microblaze/kernel/traps.c +++ b/arch/microblaze/kernel/traps.c | |||
| @@ -16,13 +16,14 @@ | |||
| 16 | 16 | ||
| 17 | #include <asm/exceptions.h> | 17 | #include <asm/exceptions.h> |
| 18 | #include <asm/system.h> | 18 | #include <asm/system.h> |
| 19 | #include <asm/unwind.h> | ||
| 19 | 20 | ||
| 20 | void trap_init(void) | 21 | void trap_init(void) |
| 21 | { | 22 | { |
| 22 | __enable_hw_exceptions(); | 23 | __enable_hw_exceptions(); |
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | static unsigned long kstack_depth_to_print = 24; | 26 | static unsigned long kstack_depth_to_print; /* 0 == entire stack */ |
| 26 | 27 | ||
| 27 | static int __init kstack_setup(char *s) | 28 | static int __init kstack_setup(char *s) |
| 28 | { | 29 | { |
| @@ -30,31 +31,47 @@ static int __init kstack_setup(char *s) | |||
| 30 | } | 31 | } |
| 31 | __setup("kstack=", kstack_setup); | 32 | __setup("kstack=", kstack_setup); |
| 32 | 33 | ||
| 33 | void show_trace(struct task_struct *task, unsigned long *stack) | 34 | void show_stack(struct task_struct *task, unsigned long *sp) |
| 34 | { | 35 | { |
| 35 | unsigned long addr; | 36 | unsigned long words_to_show; |
| 36 | 37 | u32 fp = (u32) sp; | |
| 37 | if (!stack) | 38 | |
| 38 | stack = (unsigned long *)&stack; | 39 | if (fp == 0) { |
| 40 | if (task) { | ||
| 41 | fp = ((struct thread_info *) | ||
| 42 | (task->stack))->cpu_context.r1; | ||
| 43 | } else { | ||
| 44 | /* Pick up caller of dump_stack() */ | ||
| 45 | fp = (u32)&sp - 8; | ||
| 46 | } | ||
| 47 | } | ||
| 39 | 48 | ||
| 40 | printk(KERN_NOTICE "Call Trace: "); | 49 | words_to_show = (THREAD_SIZE - (fp & (THREAD_SIZE - 1))) >> 2; |
| 41 | #ifdef CONFIG_KALLSYMS | 50 | if (kstack_depth_to_print && (words_to_show > kstack_depth_to_print)) |
| 42 | printk(KERN_NOTICE "\n"); | 51 | words_to_show = kstack_depth_to_print; |
| 43 | #endif | 52 | |
| 44 | while (!kstack_end(stack)) { | 53 | pr_info("Kernel Stack:\n"); |
| 45 | addr = *stack++; | 54 | |
| 46 | /* | 55 | /* |
| 47 | * If the address is either in the text segment of the | 56 | * Make the first line an 'odd' size if necessary to get |
| 48 | * kernel, or in the region which contains vmalloc'ed | 57 | * remaining lines to start at an address multiple of 0x10 |
| 49 | * memory, it *may* be the address of a calling | 58 | */ |
| 50 | * routine; if so, print it so that someone tracing | 59 | if (fp & 0xF) { |
| 51 | * down the cause of the crash will be able to figure | 60 | unsigned long line1_words = (0x10 - (fp & 0xF)) >> 2; |
| 52 | * out the call path that was taken. | 61 | if (line1_words < words_to_show) { |
| 53 | */ | 62 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 32, |
| 54 | if (kernel_text_address(addr)) | 63 | 4, (void *)fp, line1_words << 2, 0); |
| 55 | print_ip_sym(addr); | 64 | fp += line1_words << 2; |
| 65 | words_to_show -= line1_words; | ||
| 66 | } | ||
| 56 | } | 67 | } |
| 57 | printk(KERN_NOTICE "\n"); | 68 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 32, 4, (void *)fp, |
| 69 | words_to_show << 2, 0); | ||
| 70 | printk(KERN_INFO "\n\n"); | ||
| 71 | |||
| 72 | pr_info("Call Trace:\n"); | ||
| 73 | microblaze_unwind(task, NULL); | ||
| 74 | pr_info("\n"); | ||
| 58 | 75 | ||
| 59 | if (!task) | 76 | if (!task) |
| 60 | task = current; | 77 | task = current; |
| @@ -62,34 +79,6 @@ void show_trace(struct task_struct *task, unsigned long *stack) | |||
| 62 | debug_show_held_locks(task); | 79 | debug_show_held_locks(task); |
| 63 | } | 80 | } |
| 64 | 81 | ||
| 65 | void show_stack(struct task_struct *task, unsigned long *sp) | ||
| 66 | { | ||
| 67 | unsigned long *stack; | ||
| 68 | int i; | ||
| 69 | |||
| 70 | if (sp == NULL) { | ||
| 71 | if (task) | ||
| 72 | sp = (unsigned long *) ((struct thread_info *) | ||
| 73 | (task->stack))->cpu_context.r1; | ||
| 74 | else | ||
| 75 | sp = (unsigned long *)&sp; | ||
| 76 | } | ||
| 77 | |||
| 78 | stack = sp; | ||
| 79 | |||
| 80 | printk(KERN_INFO "\nStack:\n "); | ||
| 81 | |||
| 82 | for (i = 0; i < kstack_depth_to_print; i++) { | ||
| 83 | if (kstack_end(sp)) | ||
| 84 | break; | ||
| 85 | if (i && ((i % 8) == 0)) | ||
| 86 | printk("\n "); | ||
| 87 | printk("%08lx ", *sp++); | ||
| 88 | } | ||
| 89 | printk("\n"); | ||
| 90 | show_trace(task, stack); | ||
| 91 | } | ||
| 92 | |||
| 93 | void dump_stack(void) | 82 | void dump_stack(void) |
| 94 | { | 83 | { |
| 95 | show_stack(NULL, NULL); | 84 | show_stack(NULL, NULL); |
diff --git a/arch/microblaze/kernel/unwind.c b/arch/microblaze/kernel/unwind.c new file mode 100644 index 000000000000..fefac5c33586 --- /dev/null +++ b/arch/microblaze/kernel/unwind.c | |||
| @@ -0,0 +1,318 @@ | |||
| 1 | /* | ||
| 2 | * Backtrace support for Microblaze | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Digital Design Corporation | ||
| 5 | * | ||
| 6 | * Based on arch/sh/kernel/cpu/sh5/unwind.c code which is: | ||
| 7 | * Copyright (C) 2004 Paul Mundt | ||
| 8 | * Copyright (C) 2004 Richard Curnow | ||
| 9 | * | ||
| 10 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 11 | * License. See the file "COPYING" in the main directory of this archive | ||
| 12 | * for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | /* #define DEBUG 1 */ | ||
| 16 | #include <linux/kallsyms.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/sched.h> | ||
| 19 | #include <linux/stacktrace.h> | ||
| 20 | #include <linux/types.h> | ||
| 21 | #include <linux/errno.h> | ||
| 22 | #include <linux/module.h> | ||
| 23 | #include <linux/io.h> | ||
| 24 | #include <asm/sections.h> | ||
| 25 | #include <asm/exceptions.h> | ||
| 26 | #include <asm/unwind.h> | ||
| 27 | |||
| 28 | struct stack_trace; | ||
| 29 | |||
| 30 | /* | ||
| 31 | * On Microblaze, finding the previous stack frame is a little tricky. | ||
| 32 | * At this writing (3/2010), Microblaze does not support CONFIG_FRAME_POINTERS, | ||
| 33 | * and even if it did, gcc (4.1.2) does not store the frame pointer at | ||
| 34 | * a consistent offset within each frame. To determine frame size, it is | ||
| 35 | * necessary to search for the assembly instruction that creates or reclaims | ||
| 36 | * the frame and extract the size from it. | ||
| 37 | * | ||
| 38 | * Microblaze stores the stack pointer in r1, and creates a frame via | ||
| 39 | * | ||
| 40 | * addik r1, r1, -FRAME_SIZE | ||
| 41 | * | ||
| 42 | * The frame is reclaimed via | ||
| 43 | * | ||
| 44 | * addik r1, r1, FRAME_SIZE | ||
| 45 | * | ||
| 46 | * Frame creation occurs at or near the top of a function. | ||
| 47 | * Depending on the compiler, reclaim may occur at the end, or before | ||
| 48 | * a mid-function return. | ||
| 49 | * | ||
| 50 | * A stack frame is usually not created in a leaf function. | ||
| 51 | * | ||
| 52 | */ | ||
| 53 | |||
| 54 | /** | ||
| 55 | * get_frame_size - Extract the stack adjustment from an | ||
| 56 | * "addik r1, r1, adjust" instruction | ||
| 57 | * @instr : Microblaze instruction | ||
| 58 | * | ||
| 59 | * Return - Number of stack bytes the instruction reserves or reclaims | ||
| 60 | */ | ||
| 61 | inline long get_frame_size(unsigned long instr) | ||
| 62 | { | ||
| 63 | return abs((s16)(instr & 0xFFFF)); | ||
| 64 | } | ||
| 65 | |||
| 66 | /** | ||
| 67 | * find_frame_creation - Search backward to find the instruction that creates | ||
| 68 | * the stack frame (hopefully, for the same function the | ||
| 69 | * initial PC is in). | ||
| 70 | * @pc : Program counter at which to begin the search | ||
| 71 | * | ||
| 72 | * Return - PC at which stack frame creation occurs | ||
| 73 | * NULL if this cannot be found, i.e. a leaf function | ||
| 74 | */ | ||
| 75 | static unsigned long *find_frame_creation(unsigned long *pc) | ||
| 76 | { | ||
| 77 | int i; | ||
| 78 | |||
| 79 | /* NOTE: Distance to search is arbitrary | ||
| 80 | * 250 works well for most things, | ||
| 81 | * 750 picks up things like tcp_recvmsg(), | ||
| 82 | * 1000 needed for fat_fill_super() | ||
| 83 | */ | ||
| 84 | for (i = 0; i < 1000; i++, pc--) { | ||
| 85 | unsigned long instr; | ||
| 86 | s16 frame_size; | ||
| 87 | |||
| 88 | if (!kernel_text_address((unsigned long) pc)) | ||
| 89 | return NULL; | ||
| 90 | |||
| 91 | instr = *pc; | ||
| 92 | |||
| 93 | /* addik r1, r1, foo ? */ | ||
| 94 | if ((instr & 0xFFFF0000) != 0x30210000) | ||
| 95 | continue; /* No */ | ||
| 96 | |||
| 97 | frame_size = get_frame_size(instr); | ||
| 98 | if ((frame_size < 8) || (frame_size & 3)) { | ||
| 99 | pr_debug(" Invalid frame size %d at 0x%p\n", | ||
| 100 | frame_size, pc); | ||
| 101 | return NULL; | ||
| 102 | } | ||
| 103 | |||
| 104 | pr_debug(" Found frame creation at 0x%p, size %d\n", pc, | ||
| 105 | frame_size); | ||
| 106 | return pc; | ||
| 107 | } | ||
| 108 | |||
| 109 | return NULL; | ||
| 110 | } | ||
| 111 | |||
| 112 | /** | ||
| 113 | * lookup_prev_stack_frame - Find the stack frame of the previous function. | ||
| 114 | * @fp : Frame (stack) pointer for current function | ||
| 115 | * @pc : Program counter within current function | ||
| 116 | * @leaf_return : r15 value within current function. If the current function | ||
| 117 | * is a leaf, this is the caller's return address. | ||
| 118 | * @pprev_fp : On exit, set to frame (stack) pointer for previous function | ||
| 119 | * @pprev_pc : On exit, set to current function caller's return address | ||
| 120 | * | ||
| 121 | * Return - 0 on success, -EINVAL if the previous frame cannot be found | ||
| 122 | */ | ||
| 123 | static int lookup_prev_stack_frame(unsigned long fp, unsigned long pc, | ||
| 124 | unsigned long leaf_return, | ||
| 125 | unsigned long *pprev_fp, | ||
| 126 | unsigned long *pprev_pc) | ||
| 127 | { | ||
| 128 | unsigned long *prologue = NULL; | ||
| 129 | |||
| 130 | /* _switch_to is a special leaf function */ | ||
| 131 | if (pc != (unsigned long) &_switch_to) | ||
| 132 | prologue = find_frame_creation((unsigned long *)pc); | ||
| 133 | |||
| 134 | if (prologue) { | ||
| 135 | long frame_size = get_frame_size(*prologue); | ||
| 136 | |||
| 137 | *pprev_fp = fp + frame_size; | ||
| 138 | *pprev_pc = *(unsigned long *)fp; | ||
| 139 | } else { | ||
| 140 | if (!leaf_return) | ||
| 141 | return -EINVAL; | ||
| 142 | *pprev_pc = leaf_return; | ||
| 143 | *pprev_fp = fp; | ||
| 144 | } | ||
| 145 | |||
| 146 | /* NOTE: don't check kernel_text_address here, to allow display | ||
| 147 | * of userland return address | ||
| 148 | */ | ||
| 149 | return (!*pprev_pc || (*pprev_pc & 3)) ? -EINVAL : 0; | ||
| 150 | } | ||
| 151 | |||
| 152 | static void microblaze_unwind_inner(struct task_struct *task, | ||
| 153 | unsigned long pc, unsigned long fp, | ||
| 154 | unsigned long leaf_return, | ||
| 155 | struct stack_trace *trace); | ||
| 156 | |||
| 157 | /** | ||
| 158 | * unwind_trap - Unwind through a system trap, that stored previous state | ||
| 159 | * on the stack. | ||
| 160 | */ | ||
| 161 | #ifdef CONFIG_MMU | ||
| 162 | static inline void unwind_trap(struct task_struct *task, unsigned long pc, | ||
| 163 | unsigned long fp, struct stack_trace *trace) | ||
| 164 | { | ||
| 165 | /* To be implemented */ | ||
| 166 | } | ||
| 167 | #else | ||
| 168 | static inline void unwind_trap(struct task_struct *task, unsigned long pc, | ||
| 169 | unsigned long fp, struct stack_trace *trace) | ||
| 170 | { | ||
| 171 | const struct pt_regs *regs = (const struct pt_regs *) fp; | ||
| 172 | microblaze_unwind_inner(task, regs->pc, regs->r1, regs->r15, trace); | ||
| 173 | } | ||
| 174 | #endif | ||
| 175 | |||
| 176 | /** | ||
| 177 | * microblaze_unwind_inner - Unwind the stack from the specified point | ||
| 178 | * @task : Task whose stack we are to unwind (may be NULL) | ||
| 179 | * @pc : Program counter from which we start unwinding | ||
| 180 | * @fp : Frame (stack) pointer from which we start unwinding | ||
| 181 | * @leaf_return : Value of r15 at pc. If the function is a leaf, this is | ||
| 182 | * the caller's return address. | ||
| 183 | * @trace : Where to store stack backtrace (PC values). | ||
| 184 | * NULL == print backtrace to kernel log | ||
| 185 | */ | ||
| 186 | void microblaze_unwind_inner(struct task_struct *task, | ||
| 187 | unsigned long pc, unsigned long fp, | ||
| 188 | unsigned long leaf_return, | ||
| 189 | struct stack_trace *trace) | ||
| 190 | { | ||
| 191 | int ofs = 0; | ||
| 192 | |||
| 193 | pr_debug(" Unwinding with PC=%p, FP=%p\n", (void *)pc, (void *)fp); | ||
| 194 | if (!pc || !fp || (pc & 3) || (fp & 3)) { | ||
| 195 | pr_debug(" Invalid state for unwind, aborting\n"); | ||
| 196 | return; | ||
| 197 | } | ||
| 198 | for (; pc != 0;) { | ||
| 199 | unsigned long next_fp, next_pc = 0; | ||
| 200 | unsigned long return_to = pc + 2 * sizeof(unsigned long); | ||
| 201 | const struct trap_handler_info *handler = | ||
| 202 | µblaze_trap_handlers; | ||
| 203 | |||
| 204 | /* Is previous function the HW exception handler? */ | ||
| 205 | if ((return_to >= (unsigned long)&_hw_exception_handler) | ||
| 206 | &&(return_to < (unsigned long)&ex_handler_unhandled)) { | ||
| 207 | /* | ||
| 208 | * HW exception handler doesn't save all registers, | ||
| 209 | * so we open-code a special case of unwind_trap() | ||
| 210 | */ | ||
| 211 | #ifndef CONFIG_MMU | ||
| 212 | const struct pt_regs *regs = | ||
| 213 | (const struct pt_regs *) fp; | ||
| 214 | #endif | ||
| 215 | pr_info("HW EXCEPTION\n"); | ||
| 216 | #ifndef CONFIG_MMU | ||
| 217 | microblaze_unwind_inner(task, regs->r17 - 4, | ||
| 218 | fp + EX_HANDLER_STACK_SIZ, | ||
| 219 | regs->r15, trace); | ||
| 220 | #endif | ||
| 221 | return; | ||
| 222 | } | ||
| 223 | |||
| 224 | /* Is previous function a trap handler? */ | ||
| 225 | for (; handler->start_addr; ++handler) { | ||
| 226 | if ((return_to >= handler->start_addr) | ||
| 227 | && (return_to <= handler->end_addr)) { | ||
| 228 | if (!trace) | ||
| 229 | pr_info("%s\n", handler->trap_name); | ||
| 230 | unwind_trap(task, pc, fp, trace); | ||
| 231 | return; | ||
| 232 | } | ||
| 233 | } | ||
| 234 | pc -= ofs; | ||
| 235 | |||
| 236 | if (trace) { | ||
| 237 | #ifdef CONFIG_STACKTRACE | ||
| 238 | if (trace->skip > 0) | ||
| 239 | trace->skip--; | ||
| 240 | else | ||
| 241 | trace->entries[trace->nr_entries++] = pc; | ||
| 242 | |||
| 243 | if (trace->nr_entries >= trace->max_entries) | ||
| 244 | break; | ||
| 245 | #endif | ||
| 246 | } else { | ||
| 247 | /* Have we reached userland? */ | ||
| 248 | if (unlikely(pc == task_pt_regs(task)->pc)) { | ||
| 249 | pr_info("[<%p>] PID %lu [%s]\n", | ||
| 250 | (void *) pc, | ||
| 251 | (unsigned long) task->pid, | ||
| 252 | task->comm); | ||
| 253 | break; | ||
| 254 | } else | ||
| 255 | print_ip_sym(pc); | ||
| 256 | } | ||
| 257 | |||
| 258 | /* Stop when we reach anything not part of the kernel */ | ||
| 259 | if (!kernel_text_address(pc)) | ||
| 260 | break; | ||
| 261 | |||
| 262 | if (lookup_prev_stack_frame(fp, pc, leaf_return, &next_fp, | ||
| 263 | &next_pc) == 0) { | ||
| 264 | ofs = sizeof(unsigned long); | ||
| 265 | pc = next_pc & ~3; | ||
| 266 | fp = next_fp; | ||
| 267 | leaf_return = 0; | ||
| 268 | } else { | ||
| 269 | pr_debug(" Failed to find previous stack frame\n"); | ||
| 270 | break; | ||
| 271 | } | ||
| 272 | |||
| 273 | pr_debug(" Next PC=%p, next FP=%p\n", | ||
| 274 | (void *)next_pc, (void *)next_fp); | ||
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | /** | ||
| 279 | * microblaze_unwind - Stack unwinder for Microblaze (external entry point) | ||
| 280 | * @task : Task whose stack we are to unwind (NULL == current) | ||
| 281 | * @trace : Where to store stack backtrace (PC values). | ||
| 282 | * NULL == print backtrace to kernel log | ||
| 283 | */ | ||
| 284 | void microblaze_unwind(struct task_struct *task, struct stack_trace *trace) | ||
| 285 | { | ||
| 286 | if (task) { | ||
| 287 | if (task == current) { | ||
| 288 | const struct pt_regs *regs = task_pt_regs(task); | ||
| 289 | microblaze_unwind_inner(task, regs->pc, regs->r1, | ||
| 290 | regs->r15, trace); | ||
| 291 | } else { | ||
| 292 | struct thread_info *thread_info = | ||
| 293 | (struct thread_info *)(task->stack); | ||
| 294 | const struct cpu_context *cpu_context = | ||
| 295 | &thread_info->cpu_context; | ||
| 296 | |||
| 297 | microblaze_unwind_inner(task, | ||
| 298 | (unsigned long) &_switch_to, | ||
| 299 | cpu_context->r1, | ||
| 300 | cpu_context->r15, trace); | ||
| 301 | } | ||
| 302 | } else { | ||
| 303 | unsigned long pc, fp; | ||
| 304 | |||
| 305 | __asm__ __volatile__ ("or %0, r1, r0" : "=r" (fp)); | ||
| 306 | |||
| 307 | __asm__ __volatile__ ( | ||
| 308 | "brlid %0, 0f;" | ||
| 309 | "nop;" | ||
| 310 | "0:" | ||
| 311 | : "=r" (pc) | ||
| 312 | ); | ||
| 313 | |||
| 314 | /* Since we are not a leaf function, use leaf_return = 0 */ | ||
| 315 | microblaze_unwind_inner(current, pc, fp, 0, trace); | ||
| 316 | } | ||
| 317 | } | ||
| 318 | |||
diff --git a/arch/microblaze/kernel/vmlinux.lds.S b/arch/microblaze/kernel/vmlinux.lds.S index db72d7124602..a09f2962fbec 100644 --- a/arch/microblaze/kernel/vmlinux.lds.S +++ b/arch/microblaze/kernel/vmlinux.lds.S | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") | 11 | OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") |
| 12 | OUTPUT_ARCH(microblaze) | 12 | OUTPUT_ARCH(microblaze) |
| 13 | ENTRY(_start) | 13 | ENTRY(microblaze_start) |
| 14 | 14 | ||
| 15 | #include <asm/page.h> | 15 | #include <asm/page.h> |
| 16 | #include <asm-generic/vmlinux.lds.h> | 16 | #include <asm-generic/vmlinux.lds.h> |
| @@ -20,7 +20,7 @@ jiffies = jiffies_64 + 4; | |||
| 20 | 20 | ||
| 21 | SECTIONS { | 21 | SECTIONS { |
| 22 | . = CONFIG_KERNEL_START; | 22 | . = CONFIG_KERNEL_START; |
| 23 | _start = CONFIG_KERNEL_BASE_ADDR; | 23 | microblaze_start = CONFIG_KERNEL_BASE_ADDR; |
| 24 | .text : AT(ADDR(.text) - LOAD_OFFSET) { | 24 | .text : AT(ADDR(.text) - LOAD_OFFSET) { |
| 25 | _text = . ; | 25 | _text = . ; |
| 26 | _stext = . ; | 26 | _stext = . ; |
| @@ -55,7 +55,7 @@ SECTIONS { | |||
| 55 | */ | 55 | */ |
| 56 | .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { | 56 | .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { |
| 57 | _ssrw = .; | 57 | _ssrw = .; |
| 58 | . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ | 58 | . = ALIGN(PAGE_SIZE); /* page aligned when MMU used */ |
| 59 | *(.sdata2) | 59 | *(.sdata2) |
| 60 | . = ALIGN(8); | 60 | . = ALIGN(8); |
| 61 | _essrw = .; | 61 | _essrw = .; |
| @@ -70,7 +70,7 @@ SECTIONS { | |||
| 70 | /* Reserve some low RAM for r0 based memory references */ | 70 | /* Reserve some low RAM for r0 based memory references */ |
| 71 | . = ALIGN(0x4) ; | 71 | . = ALIGN(0x4) ; |
| 72 | r0_ram = . ; | 72 | r0_ram = . ; |
| 73 | . = . + 4096; /* a page should be enough */ | 73 | . = . + PAGE_SIZE; /* a page should be enough */ |
| 74 | 74 | ||
| 75 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ | 75 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ |
| 76 | . = ALIGN(8); | 76 | . = ALIGN(8); |
| @@ -120,7 +120,7 @@ SECTIONS { | |||
| 120 | 120 | ||
| 121 | __init_end_before_initramfs = .; | 121 | __init_end_before_initramfs = .; |
| 122 | 122 | ||
| 123 | .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { | 123 | .init.ramfs ALIGN(PAGE_SIZE) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { |
| 124 | __initramfs_start = .; | 124 | __initramfs_start = .; |
| 125 | *(.init.ramfs) | 125 | *(.init.ramfs) |
| 126 | __initramfs_end = .; | 126 | __initramfs_end = .; |
| @@ -132,11 +132,11 @@ SECTIONS { | |||
| 132 | * so that __init_end == __bss_start. This will make image.elf | 132 | * so that __init_end == __bss_start. This will make image.elf |
| 133 | * consistent with the image.bin | 133 | * consistent with the image.bin |
| 134 | */ | 134 | */ |
| 135 | /* . = ALIGN(4096); */ | 135 | /* . = ALIGN(PAGE_SIZE); */ |
| 136 | } | 136 | } |
| 137 | __init_end = .; | 137 | __init_end = .; |
| 138 | 138 | ||
| 139 | .bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) { | 139 | .bss ALIGN (PAGE_SIZE) : AT(ADDR(.bss) - LOAD_OFFSET) { |
| 140 | /* page aligned when MMU used */ | 140 | /* page aligned when MMU used */ |
| 141 | __bss_start = . ; | 141 | __bss_start = . ; |
| 142 | *(.bss*) | 142 | *(.bss*) |
| @@ -145,7 +145,7 @@ SECTIONS { | |||
| 145 | __bss_stop = . ; | 145 | __bss_stop = . ; |
| 146 | _ebss = . ; | 146 | _ebss = . ; |
| 147 | } | 147 | } |
| 148 | . = ALIGN(4096); | 148 | . = ALIGN(PAGE_SIZE); |
| 149 | _end = .; | 149 | _end = .; |
| 150 | 150 | ||
| 151 | DISCARDS | 151 | DISCARDS |
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c index bab922993185..57bd2a09610c 100644 --- a/arch/microblaze/mm/fault.c +++ b/arch/microblaze/mm/fault.c | |||
| @@ -37,10 +37,6 @@ | |||
| 37 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
| 38 | #include <asm/exceptions.h> | 38 | #include <asm/exceptions.h> |
| 39 | 39 | ||
| 40 | #if defined(CONFIG_KGDB) | ||
| 41 | int debugger_kernel_faults = 1; | ||
| 42 | #endif | ||
| 43 | |||
| 44 | static unsigned long pte_misses; /* updated by do_page_fault() */ | 40 | static unsigned long pte_misses; /* updated by do_page_fault() */ |
| 45 | static unsigned long pte_errors; /* updated by do_page_fault() */ | 41 | static unsigned long pte_errors; /* updated by do_page_fault() */ |
| 46 | 42 | ||
| @@ -81,10 +77,6 @@ void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig) | |||
| 81 | } | 77 | } |
| 82 | 78 | ||
| 83 | /* kernel has accessed a bad area */ | 79 | /* kernel has accessed a bad area */ |
| 84 | #if defined(CONFIG_KGDB) | ||
| 85 | if (debugger_kernel_faults) | ||
| 86 | debugger(regs); | ||
| 87 | #endif | ||
| 88 | die("kernel access of bad area", regs, sig); | 80 | die("kernel access of bad area", regs, sig); |
| 89 | } | 81 | } |
| 90 | 82 | ||
| @@ -115,13 +107,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long address, | |||
| 115 | if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11) | 107 | if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11) |
| 116 | is_write = 0; | 108 | is_write = 0; |
| 117 | 109 | ||
| 118 | #if defined(CONFIG_KGDB) | ||
| 119 | if (debugger_fault_handler && regs->trap == 0x300) { | ||
| 120 | debugger_fault_handler(regs); | ||
| 121 | return; | ||
| 122 | } | ||
| 123 | #endif /* CONFIG_KGDB */ | ||
| 124 | |||
| 125 | if (unlikely(in_atomic() || !mm)) { | 110 | if (unlikely(in_atomic() || !mm)) { |
| 126 | if (kernel_mode(regs)) | 111 | if (kernel_mode(regs)) |
| 127 | goto bad_area_nosemaphore; | 112 | goto bad_area_nosemaphore; |
| @@ -226,7 +211,6 @@ good_area: | |||
| 226 | * make sure we exit gracefully rather than endlessly redo | 211 | * make sure we exit gracefully rather than endlessly redo |
| 227 | * the fault. | 212 | * the fault. |
| 228 | */ | 213 | */ |
| 229 | survive: | ||
| 230 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); | 214 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
| 231 | if (unlikely(fault & VM_FAULT_ERROR)) { | 215 | if (unlikely(fault & VM_FAULT_ERROR)) { |
| 232 | if (fault & VM_FAULT_OOM) | 216 | if (fault & VM_FAULT_OOM) |
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index db5934989926..65eb00419d19 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c | |||
| @@ -134,13 +134,8 @@ void __init setup_memory(void) | |||
| 134 | * for 4GB of memory, using 4kB pages), plus 1 page | 134 | * for 4GB of memory, using 4kB pages), plus 1 page |
| 135 | * (in case the address isn't page-aligned). | 135 | * (in case the address isn't page-aligned). |
| 136 | */ | 136 | */ |
| 137 | #ifndef CONFIG_MMU | 137 | map_size = init_bootmem_node(NODE_DATA(0), |
| 138 | map_size = init_bootmem_node(NODE_DATA(0), PFN_UP(TOPHYS((u32)klimit)), | ||
| 139 | min_low_pfn, max_low_pfn); | ||
| 140 | #else | ||
| 141 | map_size = init_bootmem_node(&contig_page_data, | ||
| 142 | PFN_UP(TOPHYS((u32)klimit)), min_low_pfn, max_low_pfn); | 138 | PFN_UP(TOPHYS((u32)klimit)), min_low_pfn, max_low_pfn); |
| 143 | #endif | ||
| 144 | memblock_reserve(PFN_UP(TOPHYS((u32)klimit)) << PAGE_SHIFT, map_size); | 139 | memblock_reserve(PFN_UP(TOPHYS((u32)klimit)) << PAGE_SHIFT, map_size); |
| 145 | 140 | ||
| 146 | /* free bootmem is whole main memory */ | 141 | /* free bootmem is whole main memory */ |
diff --git a/arch/mips/Kbuild b/arch/mips/Kbuild new file mode 100644 index 000000000000..e322d65f33a4 --- /dev/null +++ b/arch/mips/Kbuild | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | # Fail on warnings - also for files referenced in subdirs | ||
| 2 | # -Werror can be disabled for specific files using: | ||
| 3 | # CFLAGS_<file.o> := -Wno-error | ||
| 4 | subdir-ccflags-y := -Werror | ||
| 5 | |||
| 6 | # platform specific definitions | ||
| 7 | include arch/mips/Kbuild.platforms | ||
| 8 | obj-y := $(platform-y) | ||
| 9 | |||
| 10 | # mips object files | ||
| 11 | # The object files are linked as core-y files would be linked | ||
| 12 | |||
| 13 | obj-y += kernel/ | ||
| 14 | obj-y += mm/ | ||
| 15 | obj-y += math-emu/ | ||
diff --git a/arch/mips/Kbuild.platforms b/arch/mips/Kbuild.platforms new file mode 100644 index 000000000000..78439b8a83c4 --- /dev/null +++ b/arch/mips/Kbuild.platforms | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | # All platforms listed in alphabetic order | ||
| 2 | |||
| 3 | platforms += alchemy | ||
| 4 | platforms += ar7 | ||
| 5 | platforms += bcm47xx | ||
| 6 | platforms += bcm63xx | ||
| 7 | platforms += cavium-octeon | ||
| 8 | platforms += cobalt | ||
| 9 | platforms += dec | ||
| 10 | platforms += emma | ||
| 11 | platforms += jazz | ||
| 12 | platforms += jz4740 | ||
| 13 | platforms += lasat | ||
| 14 | platforms += loongson | ||
| 15 | platforms += mipssim | ||
| 16 | platforms += mti-malta | ||
| 17 | platforms += pmc-sierra | ||
| 18 | platforms += pnx833x | ||
| 19 | platforms += pnx8550 | ||
| 20 | platforms += powertv | ||
| 21 | platforms += rb532 | ||
| 22 | platforms += sgi-ip22 | ||
| 23 | platforms += sgi-ip27 | ||
| 24 | platforms += sgi-ip32 | ||
| 25 | platforms += sibyte | ||
| 26 | platforms += sni | ||
| 27 | platforms += txx9 | ||
| 28 | platforms += vr41xx | ||
| 29 | platforms += wrppmc | ||
| 30 | |||
| 31 | # include the platform specific files | ||
| 32 | include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) | ||
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index cdaae942623d..36642df7d5f6 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -10,6 +10,8 @@ config MIPS | |||
| 10 | select HAVE_DYNAMIC_FTRACE | 10 | select HAVE_DYNAMIC_FTRACE |
| 11 | select HAVE_FTRACE_MCOUNT_RECORD | 11 | select HAVE_FTRACE_MCOUNT_RECORD |
| 12 | select HAVE_FUNCTION_GRAPH_TRACER | 12 | select HAVE_FUNCTION_GRAPH_TRACER |
| 13 | select HAVE_KPROBES | ||
| 14 | select HAVE_KRETPROBES | ||
| 13 | select RTC_LIB if !MACH_LOONGSON | 15 | select RTC_LIB if !MACH_LOONGSON |
| 14 | 16 | ||
| 15 | mainmenu "Linux/MIPS Kernel Configuration" | 17 | mainmenu "Linux/MIPS Kernel Configuration" |
| @@ -23,8 +25,17 @@ choice | |||
| 23 | prompt "System type" | 25 | prompt "System type" |
| 24 | default SGI_IP22 | 26 | default SGI_IP22 |
| 25 | 27 | ||
| 26 | config MACH_ALCHEMY | 28 | config MIPS_ALCHEMY |
| 27 | bool "Alchemy processor based machines" | 29 | bool "Alchemy processor based machines" |
| 30 | select 64BIT_PHYS_ADDR | ||
| 31 | select CEVT_R4K_LIB | ||
| 32 | select CSRC_R4K_LIB | ||
| 33 | select IRQ_CPU | ||
| 34 | select SYS_HAS_CPU_MIPS32_R1 | ||
| 35 | select SYS_SUPPORTS_32BIT_KERNEL | ||
| 36 | select SYS_SUPPORTS_APM_EMULATION | ||
| 37 | select GENERIC_GPIO | ||
| 38 | select ARCH_WANT_OPTIONAL_GPIOLIB | ||
| 28 | select SYS_SUPPORTS_ZBOOT | 39 | select SYS_SUPPORTS_ZBOOT |
| 29 | 40 | ||
| 30 | config AR7 | 41 | config AR7 |
| @@ -62,6 +73,7 @@ config BCM47XX | |||
| 62 | select SSB_DRIVER_MIPS | 73 | select SSB_DRIVER_MIPS |
| 63 | select SSB_DRIVER_EXTIF | 74 | select SSB_DRIVER_EXTIF |
| 64 | select SSB_EMBEDDED | 75 | select SSB_EMBEDDED |
| 76 | select SSB_B43_PCI_BRIDGE if PCI | ||
| 65 | select SSB_PCICORE_HOSTMODE if PCI | 77 | select SSB_PCICORE_HOSTMODE if PCI |
| 66 | select GENERIC_GPIO | 78 | select GENERIC_GPIO |
| 67 | select SYS_HAS_EARLY_PRINTK | 79 | select SYS_HAS_EARLY_PRINTK |
| @@ -162,6 +174,18 @@ config MACH_JAZZ | |||
| 162 | Members include the Acer PICA, MIPS Magnum 4000, MIPS Millennium and | 174 | Members include the Acer PICA, MIPS Magnum 4000, MIPS Millennium and |
| 163 | Olivetti M700-10 workstations. | 175 | Olivetti M700-10 workstations. |
| 164 | 176 | ||
| 177 | config MACH_JZ4740 | ||
| 178 | bool "Ingenic JZ4740 based machines" | ||
| 179 | select SYS_HAS_CPU_MIPS32_R1 | ||
| 180 | select SYS_SUPPORTS_32BIT_KERNEL | ||
| 181 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
| 182 | select DMA_NONCOHERENT | ||
| 183 | select IRQ_CPU | ||
| 184 | select GENERIC_GPIO | ||
| 185 | select ARCH_REQUIRE_GPIOLIB | ||
| 186 | select SYS_HAS_EARLY_PRINTK | ||
| 187 | select HAVE_PWM | ||
| 188 | |||
| 165 | config LASAT | 189 | config LASAT |
| 166 | bool "LASAT Networks platforms" | 190 | bool "LASAT Networks platforms" |
| 167 | select CEVT_R4K | 191 | select CEVT_R4K |
| @@ -686,6 +710,7 @@ endchoice | |||
| 686 | source "arch/mips/alchemy/Kconfig" | 710 | source "arch/mips/alchemy/Kconfig" |
| 687 | source "arch/mips/bcm63xx/Kconfig" | 711 | source "arch/mips/bcm63xx/Kconfig" |
| 688 | source "arch/mips/jazz/Kconfig" | 712 | source "arch/mips/jazz/Kconfig" |
| 713 | source "arch/mips/jz4740/Kconfig" | ||
| 689 | source "arch/mips/lasat/Kconfig" | 714 | source "arch/mips/lasat/Kconfig" |
| 690 | source "arch/mips/pmc-sierra/Kconfig" | 715 | source "arch/mips/pmc-sierra/Kconfig" |
| 691 | source "arch/mips/powertv/Kconfig" | 716 | source "arch/mips/powertv/Kconfig" |
| @@ -892,6 +917,9 @@ config CPU_LITTLE_ENDIAN | |||
| 892 | 917 | ||
| 893 | endchoice | 918 | endchoice |
| 894 | 919 | ||
| 920 | config EXPORT_UASM | ||
| 921 | bool | ||
| 922 | |||
| 895 | config SYS_SUPPORTS_APM_EMULATION | 923 | config SYS_SUPPORTS_APM_EMULATION |
| 896 | bool | 924 | bool |
| 897 | 925 | ||
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 0b9c01add0a0..f0d196090e94 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
| @@ -130,26 +130,6 @@ cflags-$(CONFIG_CPU_R4300) += -march=r4300 -Wa,--trap | |||
| 130 | cflags-$(CONFIG_CPU_VR41XX) += -march=r4100 -Wa,--trap | 130 | cflags-$(CONFIG_CPU_VR41XX) += -march=r4100 -Wa,--trap |
| 131 | cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap | 131 | cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap |
| 132 | cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap | 132 | cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap |
| 133 | # only gcc >= 4.4 have the loongson-specific support | ||
| 134 | cflags-$(CONFIG_CPU_LOONGSON2) += -Wa,--trap | ||
| 135 | cflags-$(CONFIG_CPU_LOONGSON2E) += \ | ||
| 136 | $(call cc-option,-march=loongson2e,-march=r4600) | ||
| 137 | cflags-$(CONFIG_CPU_LOONGSON2F) += \ | ||
| 138 | $(call cc-option,-march=loongson2f,-march=r4600) | ||
| 139 | # enable the workarounds for loongson2f | ||
| 140 | ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS | ||
| 141 | ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) | ||
| 142 | $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) | ||
| 143 | else | ||
| 144 | cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-nop | ||
| 145 | endif | ||
| 146 | ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-jump,),) | ||
| 147 | $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-jump) | ||
| 148 | else | ||
| 149 | cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump | ||
| 150 | endif | ||
| 151 | endif | ||
| 152 | |||
| 153 | cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ | 133 | cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ |
| 154 | -Wa,-mips32 -Wa,--trap | 134 | -Wa,-mips32 -Wa,--trap |
| 155 | cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ | 135 | cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ |
| @@ -209,455 +189,7 @@ endif | |||
| 209 | # | 189 | # |
| 210 | # Board-dependent options and extra files | 190 | # Board-dependent options and extra files |
| 211 | # | 191 | # |
| 212 | 192 | include $(srctree)/arch/mips/Kbuild.platforms | |
| 213 | # | ||
| 214 | # Texas Instruments AR7 | ||
| 215 | # | ||
| 216 | core-$(CONFIG_AR7) += arch/mips/ar7/ | ||
| 217 | cflags-$(CONFIG_AR7) += -I$(srctree)/arch/mips/include/asm/mach-ar7 | ||
| 218 | load-$(CONFIG_AR7) += 0xffffffff94100000 | ||
| 219 | |||
| 220 | # | ||
| 221 | # Acer PICA 61, Mips Magnum 4000 and Olivetti M700. | ||
| 222 | # | ||
| 223 | core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/ | ||
| 224 | cflags-$(CONFIG_MACH_JAZZ) += -I$(srctree)/arch/mips/include/asm/mach-jazz | ||
| 225 | load-$(CONFIG_MACH_JAZZ) += 0xffffffff80080000 | ||
| 226 | |||
| 227 | # | ||
| 228 | # Common Alchemy Au1x00 stuff | ||
| 229 | # | ||
| 230 | core-$(CONFIG_SOC_AU1X00) += arch/mips/alchemy/common/ | ||
| 231 | |||
| 232 | # | ||
| 233 | # AMD Alchemy Pb1000 eval board | ||
| 234 | # | ||
| 235 | core-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/devboards/ | ||
| 236 | cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 237 | load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 | ||
| 238 | |||
| 239 | # | ||
| 240 | # AMD Alchemy Pb1100 eval board | ||
| 241 | # | ||
| 242 | core-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/devboards/ | ||
| 243 | cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 244 | load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 | ||
| 245 | |||
| 246 | # | ||
| 247 | # AMD Alchemy Pb1500 eval board | ||
| 248 | # | ||
| 249 | core-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/devboards/ | ||
| 250 | cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 251 | load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 | ||
| 252 | |||
| 253 | # | ||
| 254 | # AMD Alchemy Pb1550 eval board | ||
| 255 | # | ||
| 256 | core-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/devboards/ | ||
| 257 | cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 258 | load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 | ||
| 259 | |||
| 260 | # | ||
| 261 | # AMD Alchemy Pb1200 eval board | ||
| 262 | # | ||
| 263 | core-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/devboards/ | ||
| 264 | cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 265 | load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 | ||
| 266 | |||
| 267 | # | ||
| 268 | # AMD Alchemy Db1000 eval board | ||
| 269 | # | ||
| 270 | core-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/devboards/ | ||
| 271 | cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 272 | load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 | ||
| 273 | |||
| 274 | # | ||
| 275 | # AMD Alchemy Db1100 eval board | ||
| 276 | # | ||
| 277 | core-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/devboards/ | ||
| 278 | cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 279 | load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 | ||
| 280 | |||
| 281 | # | ||
| 282 | # AMD Alchemy Db1500 eval board | ||
| 283 | # | ||
| 284 | core-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/devboards/ | ||
| 285 | cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 286 | load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 | ||
| 287 | |||
| 288 | # | ||
| 289 | # AMD Alchemy Db1550 eval board | ||
| 290 | # | ||
| 291 | core-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/devboards/ | ||
| 292 | cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 293 | load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 | ||
| 294 | |||
| 295 | # | ||
| 296 | # AMD Alchemy Db1200 eval board | ||
| 297 | # | ||
| 298 | core-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/devboards/ | ||
| 299 | cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 300 | load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 | ||
| 301 | |||
| 302 | # | ||
| 303 | # AMD Alchemy Bosporus eval board | ||
| 304 | # | ||
| 305 | core-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/devboards/ | ||
| 306 | cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 307 | load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 | ||
| 308 | |||
| 309 | # | ||
| 310 | # AMD Alchemy Mirage eval board | ||
| 311 | # | ||
| 312 | core-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/devboards/ | ||
| 313 | cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 314 | load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 | ||
| 315 | |||
| 316 | # | ||
| 317 | # 4G-Systems eval board | ||
| 318 | # | ||
| 319 | libs-$(CONFIG_MIPS_MTX1) += arch/mips/alchemy/mtx-1/ | ||
| 320 | load-$(CONFIG_MIPS_MTX1) += 0xffffffff80100000 | ||
| 321 | |||
| 322 | # | ||
| 323 | # MyCable eval board | ||
| 324 | # | ||
| 325 | libs-$(CONFIG_MIPS_XXS1500) += arch/mips/alchemy/xxs1500/ | ||
| 326 | load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000 | ||
| 327 | |||
| 328 | # must be last for Alchemy systems for GPIO to work properly | ||
| 329 | cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 | ||
| 330 | |||
| 331 | |||
| 332 | # | ||
| 333 | # Cobalt Server | ||
| 334 | # | ||
| 335 | core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/ | ||
| 336 | cflags-$(CONFIG_MIPS_COBALT) += -I$(srctree)/arch/mips/include/asm/mach-cobalt | ||
| 337 | load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000 | ||
| 338 | |||
| 339 | # | ||
| 340 | # DECstation family | ||
| 341 | # | ||
| 342 | core-$(CONFIG_MACH_DECSTATION) += arch/mips/dec/ | ||
| 343 | cflags-$(CONFIG_MACH_DECSTATION)+= -I$(srctree)/arch/mips/include/asm/mach-dec | ||
| 344 | libs-$(CONFIG_MACH_DECSTATION) += arch/mips/dec/prom/ | ||
| 345 | load-$(CONFIG_MACH_DECSTATION) += 0xffffffff80040000 | ||
| 346 | |||
| 347 | # | ||
| 348 | # Wind River PPMC Board (4KC + GT64120) | ||
| 349 | # | ||
| 350 | core-$(CONFIG_WR_PPMC) += arch/mips/gt64120/wrppmc/ | ||
| 351 | cflags-$(CONFIG_WR_PPMC) += -I$(srctree)/arch/mips/include/asm/mach-wrppmc | ||
| 352 | load-$(CONFIG_WR_PPMC) += 0xffffffff80100000 | ||
| 353 | |||
| 354 | # | ||
| 355 | # Loongson family | ||
| 356 | # | ||
| 357 | core-$(CONFIG_MACH_LOONGSON) += arch/mips/loongson/ | ||
| 358 | cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson \ | ||
| 359 | -mno-branch-likely | ||
| 360 | load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 | ||
| 361 | load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 | ||
| 362 | |||
| 363 | # | ||
| 364 | # MIPS Malta board | ||
| 365 | # | ||
| 366 | core-$(CONFIG_MIPS_MALTA) += arch/mips/mti-malta/ | ||
| 367 | cflags-$(CONFIG_MIPS_MALTA) += -I$(srctree)/arch/mips/include/asm/mach-malta | ||
| 368 | load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000 | ||
| 369 | all-$(CONFIG_MIPS_MALTA) := $(COMPRESSION_FNAME).bin | ||
| 370 | |||
| 371 | # | ||
| 372 | # MIPS SIM | ||
| 373 | # | ||
| 374 | core-$(CONFIG_MIPS_SIM) += arch/mips/mipssim/ | ||
| 375 | cflags-$(CONFIG_MIPS_SIM) += -I$(srctree)/arch/mips/include/asm/mach-mipssim | ||
| 376 | load-$(CONFIG_MIPS_SIM) += 0x80100000 | ||
| 377 | |||
| 378 | # | ||
| 379 | # PMC-Sierra MSP SOCs | ||
| 380 | # | ||
| 381 | core-$(CONFIG_PMC_MSP) += arch/mips/pmc-sierra/msp71xx/ | ||
| 382 | cflags-$(CONFIG_PMC_MSP) += -I$(srctree)/arch/mips/include/asm/pmc-sierra/msp71xx \ | ||
| 383 | -mno-branch-likely | ||
| 384 | load-$(CONFIG_PMC_MSP) += 0xffffffff80100000 | ||
| 385 | |||
| 386 | # | ||
| 387 | # PMC-Sierra Yosemite | ||
| 388 | # | ||
| 389 | core-$(CONFIG_PMC_YOSEMITE) += arch/mips/pmc-sierra/yosemite/ | ||
| 390 | cflags-$(CONFIG_PMC_YOSEMITE) += -I$(srctree)/arch/mips/include/asm/mach-yosemite | ||
| 391 | load-$(CONFIG_PMC_YOSEMITE) += 0xffffffff80100000 | ||
| 392 | |||
| 393 | # | ||
| 394 | # LASAT platforms | ||
| 395 | # | ||
| 396 | core-$(CONFIG_LASAT) += arch/mips/lasat/ | ||
| 397 | cflags-$(CONFIG_LASAT) += -I$(srctree)/arch/mips/include/asm/mach-lasat | ||
| 398 | load-$(CONFIG_LASAT) += 0xffffffff80000000 | ||
| 399 | |||
| 400 | # | ||
| 401 | # Common VR41xx | ||
| 402 | # | ||
| 403 | core-$(CONFIG_MACH_VR41XX) += arch/mips/vr41xx/common/ | ||
| 404 | cflags-$(CONFIG_MACH_VR41XX) += -I$(srctree)/arch/mips/include/asm/mach-vr41xx | ||
| 405 | |||
| 406 | # | ||
| 407 | # ZAO Networks Capcella (VR4131) | ||
| 408 | # | ||
| 409 | load-$(CONFIG_ZAO_CAPCELLA) += 0xffffffff80000000 | ||
| 410 | |||
| 411 | # | ||
| 412 | # Victor MP-C303/304 (VR4122) | ||
| 413 | # | ||
| 414 | load-$(CONFIG_VICTOR_MPC30X) += 0xffffffff80001000 | ||
| 415 | |||
| 416 | # | ||
| 417 | # IBM WorkPad z50 (VR4121) | ||
| 418 | # | ||
| 419 | core-$(CONFIG_IBM_WORKPAD) += arch/mips/vr41xx/ibm-workpad/ | ||
| 420 | load-$(CONFIG_IBM_WORKPAD) += 0xffffffff80004000 | ||
| 421 | |||
| 422 | # | ||
| 423 | # CASIO CASSIPEIA E-55/65 (VR4111) | ||
| 424 | # | ||
| 425 | core-$(CONFIG_CASIO_E55) += arch/mips/vr41xx/casio-e55/ | ||
| 426 | load-$(CONFIG_CASIO_E55) += 0xffffffff80004000 | ||
| 427 | |||
| 428 | # | ||
| 429 | # TANBAC VR4131 multichip module(TB0225) and TANBAC VR4131DIMM(TB0229) (VR4131) | ||
| 430 | # | ||
| 431 | load-$(CONFIG_TANBAC_TB022X) += 0xffffffff80000000 | ||
| 432 | |||
| 433 | # NXP STB225 | ||
| 434 | core-$(CONFIG_SOC_PNX833X) += arch/mips/nxp/pnx833x/common/ | ||
| 435 | cflags-$(CONFIG_SOC_PNX833X) += -Iarch/mips/include/asm/mach-pnx833x | ||
| 436 | libs-$(CONFIG_NXP_STB220) += arch/mips/nxp/pnx833x/stb22x/ | ||
| 437 | load-$(CONFIG_NXP_STB220) += 0xffffffff80001000 | ||
| 438 | libs-$(CONFIG_NXP_STB225) += arch/mips/nxp/pnx833x/stb22x/ | ||
| 439 | load-$(CONFIG_NXP_STB225) += 0xffffffff80001000 | ||
| 440 | |||
| 441 | # | ||
| 442 | # Common NXP PNX8550 | ||
| 443 | # | ||
| 444 | core-$(CONFIG_SOC_PNX8550) += arch/mips/nxp/pnx8550/common/ | ||
| 445 | cflags-$(CONFIG_SOC_PNX8550) += -I$(srctree)/arch/mips/include/asm/mach-pnx8550 | ||
| 446 | |||
| 447 | # | ||
| 448 | # NXP PNX8550 JBS board | ||
| 449 | # | ||
| 450 | libs-$(CONFIG_PNX8550_JBS) += arch/mips/nxp/pnx8550/jbs/ | ||
| 451 | #cflags-$(CONFIG_PNX8550_JBS) += -I$(srctree)/arch/mips/include/asm/mach-pnx8550 | ||
| 452 | load-$(CONFIG_PNX8550_JBS) += 0xffffffff80060000 | ||
| 453 | |||
| 454 | # NXP PNX8550 STB810 board | ||
| 455 | # | ||
| 456 | libs-$(CONFIG_PNX8550_STB810) += arch/mips/nxp/pnx8550/stb810/ | ||
| 457 | load-$(CONFIG_PNX8550_STB810) += 0xffffffff80060000 | ||
| 458 | |||
| 459 | # | ||
| 460 | # Common NEC EMMAXXX | ||
| 461 | # | ||
| 462 | core-$(CONFIG_SOC_EMMA2RH) += arch/mips/emma/common/ | ||
| 463 | cflags-$(CONFIG_SOC_EMMA2RH) += -I$(srctree)/arch/mips/include/asm/mach-emma2rh | ||
| 464 | |||
| 465 | # | ||
| 466 | # NEC EMMA2RH Mark-eins | ||
| 467 | # | ||
| 468 | core-$(CONFIG_NEC_MARKEINS) += arch/mips/emma/markeins/ | ||
| 469 | load-$(CONFIG_NEC_MARKEINS) += 0xffffffff88100000 | ||
| 470 | |||
| 471 | # | ||
| 472 | # Cisco PowerTV Platform | ||
| 473 | # | ||
| 474 | core-$(CONFIG_POWERTV) += arch/mips/powertv/ | ||
| 475 | cflags-$(CONFIG_POWERTV) += -I$(srctree)/arch/mips/include/asm/mach-powertv | ||
| 476 | load-$(CONFIG_POWERTV) += 0xffffffff90800000 | ||
| 477 | |||
| 478 | # | ||
| 479 | # SGI IP22 (Indy/Indigo2) | ||
| 480 | # | ||
| 481 | # Set the load address to >= 0xffffffff88069000 if you want to leave space for | ||
| 482 | # symmon, 0xffffffff80002000 for production kernels. Note that the value must | ||
| 483 | # be aligned to a multiple of the kernel stack size or the handling of the | ||
| 484 | # current variable will break so for 64-bit kernels we have to raise the start | ||
| 485 | # address by 8kb. | ||
| 486 | # | ||
| 487 | core-$(CONFIG_SGI_IP22) += arch/mips/sgi-ip22/ | ||
| 488 | cflags-$(CONFIG_SGI_IP22) += -I$(srctree)/arch/mips/include/asm/mach-ip22 | ||
| 489 | ifdef CONFIG_32BIT | ||
| 490 | load-$(CONFIG_SGI_IP22) += 0xffffffff88002000 | ||
| 491 | endif | ||
| 492 | ifdef CONFIG_64BIT | ||
| 493 | load-$(CONFIG_SGI_IP22) += 0xffffffff88004000 | ||
| 494 | endif | ||
| 495 | |||
| 496 | # | ||
| 497 | # SGI-IP27 (Origin200/2000) | ||
| 498 | # | ||
| 499 | # Set the load address to >= 0xc000000000300000 if you want to leave space for | ||
| 500 | # symmon, 0xc00000000001c000 for production kernels. Note that the value must | ||
| 501 | # be 16kb aligned or the handling of the current variable will break. | ||
| 502 | # | ||
| 503 | ifdef CONFIG_SGI_IP27 | ||
| 504 | core-$(CONFIG_SGI_IP27) += arch/mips/sgi-ip27/ | ||
| 505 | cflags-$(CONFIG_SGI_IP27) += -I$(srctree)/arch/mips/include/asm/mach-ip27 | ||
| 506 | ifdef CONFIG_MAPPED_KERNEL | ||
| 507 | load-$(CONFIG_SGI_IP27) += 0xc00000004001c000 | ||
| 508 | OBJCOPYFLAGS := --change-addresses=0x3fffffff80000000 | ||
| 509 | dataoffset-$(CONFIG_SGI_IP27) += 0x01000000 | ||
| 510 | else | ||
| 511 | load-$(CONFIG_SGI_IP27) += 0xa80000000001c000 | ||
| 512 | OBJCOPYFLAGS := --change-addresses=0x57ffffff80000000 | ||
| 513 | endif | ||
| 514 | endif | ||
| 515 | |||
| 516 | # | ||
| 517 | # SGI IP28 (Indigo2 R10k) | ||
| 518 | # | ||
| 519 | # Set the load address to >= 0xa800000020080000 if you want to leave space for | ||
| 520 | # symmon, 0xa800000020004000 for production kernels ? Note that the value must | ||
| 521 | # be 16kb aligned or the handling of the current variable will break. | ||
| 522 | # Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys | ||
| 523 | # | ||
| 524 | ifdef CONFIG_SGI_IP28 | ||
| 525 | ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n) | ||
| 526 | $(error gcc doesn't support needed option -mr10k-cache-barrier=store) | ||
| 527 | endif | ||
| 528 | endif | ||
| 529 | core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/ | ||
| 530 | cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=store -I$(srctree)/arch/mips/include/asm/mach-ip28 | ||
| 531 | load-$(CONFIG_SGI_IP28) += 0xa800000020004000 | ||
| 532 | |||
| 533 | # | ||
| 534 | # SGI-IP32 (O2) | ||
| 535 | # | ||
| 536 | # Set the load address to >= 80069000 if you want to leave space for symmon, | ||
| 537 | # 0xffffffff80004000 for production kernels. Note that the value must be aligned to | ||
| 538 | # a multiple of the kernel stack size or the handling of the current variable | ||
| 539 | # will break. | ||
| 540 | # | ||
| 541 | core-$(CONFIG_SGI_IP32) += arch/mips/sgi-ip32/ | ||
| 542 | cflags-$(CONFIG_SGI_IP32) += -I$(srctree)/arch/mips/include/asm/mach-ip32 | ||
| 543 | load-$(CONFIG_SGI_IP32) += 0xffffffff80004000 | ||
| 544 | |||
| 545 | # | ||
| 546 | # Sibyte SB1250/BCM1480 SOC | ||
| 547 | # | ||
| 548 | # This is a LIB so that it links at the end, and initcalls are later | ||
| 549 | # the sequence; but it is built as an object so that modules don't get | ||
| 550 | # removed (as happens, even if they have __initcall/module_init) | ||
| 551 | # | ||
| 552 | core-$(CONFIG_SIBYTE_BCM112X) += arch/mips/sibyte/sb1250/ | ||
| 553 | core-$(CONFIG_SIBYTE_BCM112X) += arch/mips/sibyte/common/ | ||
| 554 | cflags-$(CONFIG_SIBYTE_BCM112X) += -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 555 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1250_112x_ALL | ||
| 556 | |||
| 557 | core-$(CONFIG_SIBYTE_SB1250) += arch/mips/sibyte/sb1250/ | ||
| 558 | core-$(CONFIG_SIBYTE_SB1250) += arch/mips/sibyte/common/ | ||
| 559 | cflags-$(CONFIG_SIBYTE_SB1250) += -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 560 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1250_112x_ALL | ||
| 561 | |||
| 562 | core-$(CONFIG_SIBYTE_BCM1x55) += arch/mips/sibyte/bcm1480/ | ||
| 563 | core-$(CONFIG_SIBYTE_BCM1x55) += arch/mips/sibyte/common/ | ||
| 564 | cflags-$(CONFIG_SIBYTE_BCM1x55) += -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 565 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1480_ALL | ||
| 566 | |||
| 567 | core-$(CONFIG_SIBYTE_BCM1x80) += arch/mips/sibyte/bcm1480/ | ||
| 568 | core-$(CONFIG_SIBYTE_BCM1x80) += arch/mips/sibyte/common/ | ||
| 569 | cflags-$(CONFIG_SIBYTE_BCM1x80) += -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 570 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1480_ALL | ||
| 571 | |||
| 572 | # | ||
| 573 | # Sibyte BCM91120x (Carmel) board | ||
| 574 | # Sibyte BCM91120C (CRhine) board | ||
| 575 | # Sibyte BCM91125C (CRhone) board | ||
| 576 | # Sibyte BCM91125E (Rhone) board | ||
| 577 | # Sibyte SWARM board | ||
| 578 | # Sibyte BCM91x80 (BigSur) board | ||
| 579 | # | ||
| 580 | core-$(CONFIG_SIBYTE_CARMEL) += arch/mips/sibyte/swarm/ | ||
| 581 | load-$(CONFIG_SIBYTE_CARMEL) := 0xffffffff80100000 | ||
| 582 | core-$(CONFIG_SIBYTE_CRHINE) += arch/mips/sibyte/swarm/ | ||
| 583 | load-$(CONFIG_SIBYTE_CRHINE) := 0xffffffff80100000 | ||
| 584 | core-$(CONFIG_SIBYTE_CRHONE) += arch/mips/sibyte/swarm/ | ||
| 585 | load-$(CONFIG_SIBYTE_CRHONE) := 0xffffffff80100000 | ||
| 586 | core-$(CONFIG_SIBYTE_RHONE) += arch/mips/sibyte/swarm/ | ||
| 587 | load-$(CONFIG_SIBYTE_RHONE) := 0xffffffff80100000 | ||
| 588 | core-$(CONFIG_SIBYTE_SENTOSA) += arch/mips/sibyte/swarm/ | ||
| 589 | load-$(CONFIG_SIBYTE_SENTOSA) := 0xffffffff80100000 | ||
| 590 | core-$(CONFIG_SIBYTE_SWARM) += arch/mips/sibyte/swarm/ | ||
| 591 | load-$(CONFIG_SIBYTE_SWARM) := 0xffffffff80100000 | ||
| 592 | core-$(CONFIG_SIBYTE_BIGSUR) += arch/mips/sibyte/swarm/ | ||
| 593 | load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000 | ||
| 594 | |||
| 595 | # | ||
| 596 | # Broadcom BCM47XX boards | ||
| 597 | # | ||
| 598 | core-$(CONFIG_BCM47XX) += arch/mips/bcm47xx/ | ||
| 599 | cflags-$(CONFIG_BCM47XX) += -I$(srctree)/arch/mips/include/asm/mach-bcm47xx | ||
| 600 | load-$(CONFIG_BCM47XX) := 0xffffffff80001000 | ||
| 601 | |||
| 602 | # | ||
| 603 | # Broadcom BCM63XX boards | ||
| 604 | # | ||
| 605 | core-$(CONFIG_BCM63XX) += arch/mips/bcm63xx/ | ||
| 606 | cflags-$(CONFIG_BCM63XX) += -I$(srctree)/arch/mips/include/asm/mach-bcm63xx/ | ||
| 607 | load-$(CONFIG_BCM63XX) := 0xffffffff80010000 | ||
| 608 | |||
| 609 | # | ||
| 610 | # SNI RM | ||
| 611 | # | ||
| 612 | core-$(CONFIG_SNI_RM) += arch/mips/sni/ | ||
| 613 | cflags-$(CONFIG_SNI_RM) += -I$(srctree)/arch/mips/include/asm/mach-rm | ||
| 614 | ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
| 615 | load-$(CONFIG_SNI_RM) += 0xffffffff80600000 | ||
| 616 | else | ||
| 617 | load-$(CONFIG_SNI_RM) += 0xffffffff80030000 | ||
| 618 | endif | ||
| 619 | all-$(CONFIG_SNI_RM) := $(COMPRESSION_FNAME).ecoff | ||
| 620 | |||
| 621 | # | ||
| 622 | # Common TXx9 | ||
| 623 | # | ||
| 624 | core-$(CONFIG_MACH_TX39XX) += arch/mips/txx9/generic/ | ||
| 625 | cflags-$(CONFIG_MACH_TX39XX) += -I$(srctree)/arch/mips/include/asm/mach-tx39xx | ||
| 626 | load-$(CONFIG_MACH_TX39XX) += 0xffffffff80050000 | ||
| 627 | core-$(CONFIG_MACH_TX49XX) += arch/mips/txx9/generic/ | ||
| 628 | cflags-$(CONFIG_MACH_TX49XX) += -I$(srctree)/arch/mips/include/asm/mach-tx49xx | ||
| 629 | load-$(CONFIG_MACH_TX49XX) += 0xffffffff80100000 | ||
| 630 | |||
| 631 | # | ||
| 632 | # Toshiba JMR-TX3927 board | ||
| 633 | # | ||
| 634 | core-$(CONFIG_TOSHIBA_JMR3927) += arch/mips/txx9/jmr3927/ | ||
| 635 | |||
| 636 | # | ||
| 637 | # Routerboard 532 board | ||
| 638 | # | ||
| 639 | core-$(CONFIG_MIKROTIK_RB532) += arch/mips/rb532/ | ||
| 640 | cflags-$(CONFIG_MIKROTIK_RB532) += -I$(srctree)/arch/mips/include/asm/mach-rc32434 | ||
| 641 | load-$(CONFIG_MIKROTIK_RB532) += 0xffffffff80101000 | ||
| 642 | |||
| 643 | # | ||
| 644 | # Toshiba RBTX49XX boards | ||
| 645 | # | ||
| 646 | core-$(CONFIG_TOSHIBA_RBTX4927) += arch/mips/txx9/rbtx4927/ | ||
| 647 | core-$(CONFIG_TOSHIBA_RBTX4938) += arch/mips/txx9/rbtx4938/ | ||
| 648 | core-$(CONFIG_TOSHIBA_RBTX4939) += arch/mips/txx9/rbtx4939/ | ||
| 649 | |||
| 650 | # | ||
| 651 | # Cavium Octeon | ||
| 652 | # | ||
| 653 | core-$(CONFIG_CPU_CAVIUM_OCTEON) += arch/mips/cavium-octeon/ | ||
| 654 | cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -I$(srctree)/arch/mips/include/asm/mach-cavium-octeon | ||
| 655 | core-$(CONFIG_CPU_CAVIUM_OCTEON) += arch/mips/cavium-octeon/executive/ | ||
| 656 | ifdef CONFIG_CAVIUM_OCTEON_2ND_KERNEL | ||
| 657 | load-$(CONFIG_CPU_CAVIUM_OCTEON) += 0xffffffff84100000 | ||
| 658 | else | ||
| 659 | load-$(CONFIG_CPU_CAVIUM_OCTEON) += 0xffffffff81100000 | ||
| 660 | endif | ||
| 661 | 193 | ||
| 662 | cflags-y += -I$(srctree)/arch/mips/include/asm/mach-generic | 194 | cflags-y += -I$(srctree)/arch/mips/include/asm/mach-generic |
| 663 | drivers-$(CONFIG_PCI) += arch/mips/pci/ | 195 | drivers-$(CONFIG_PCI) += arch/mips/pci/ |
| @@ -706,7 +238,8 @@ head-y := arch/mips/kernel/head.o arch/mips/kernel/init_task.o | |||
| 706 | 238 | ||
| 707 | libs-y += arch/mips/lib/ | 239 | libs-y += arch/mips/lib/ |
| 708 | 240 | ||
| 709 | core-y += arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/ | 241 | # See arch/mips/Kbuild for content of core part of the kernel |
| 242 | core-y += arch/mips/ | ||
| 710 | 243 | ||
| 711 | drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/ | 244 | drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/ |
| 712 | 245 | ||
| @@ -726,6 +259,9 @@ endif | |||
| 726 | vmlinux.32: vmlinux | 259 | vmlinux.32: vmlinux |
| 727 | $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ | 260 | $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ |
| 728 | 261 | ||
| 262 | |||
| 263 | #obj-$(CONFIG_KPROBES) += kprobes.o | ||
| 264 | |||
| 729 | # | 265 | # |
| 730 | # The 64-bit ELF tools are pretty broken so at this time we generate 64-bit | 266 | # The 64-bit ELF tools are pretty broken so at this time we generate 64-bit |
| 731 | # ELF files from 32-bit files by conversion. | 267 | # ELF files from 32-bit files by conversion. |
| @@ -733,35 +269,19 @@ vmlinux.32: vmlinux | |||
| 733 | vmlinux.64: vmlinux | 269 | vmlinux.64: vmlinux |
| 734 | $(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@ | 270 | $(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@ |
| 735 | 271 | ||
| 736 | makeboot =$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) $(1) | ||
| 737 | makezboot =$(Q)$(MAKE) $(build)=arch/mips/boot/compressed \ | ||
| 738 | VMLINUX_LOAD_ADDRESS=$(load-y) 32bit-bfd=$(32bit-bfd) $(1) | ||
| 739 | |||
| 740 | all: $(all-y) | 272 | all: $(all-y) |
| 741 | 273 | ||
| 742 | vmlinuz: vmlinux FORCE | 274 | # boot |
| 743 | +@$(call makezboot,$@) | 275 | vmlinux.bin vmlinux.ecoff vmlinux.srec: $(vmlinux-32) FORCE |
| 276 | $(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) arch/mips/boot/$@ | ||
| 744 | 277 | ||
| 745 | vmlinuz.bin: vmlinux | 278 | # boot/compressed |
| 746 | +@$(call makezboot,$@) | 279 | vmlinuz vmlinuz.bin vmlinuz.ecoff vmlinuz.srec: $(vmlinux-32) FORCE |
| 280 | $(Q)$(MAKE) $(build)=arch/mips/boot/compressed \ | ||
| 281 | VMLINUX_LOAD_ADDRESS=$(load-y) 32bit-bfd=$(32bit-bfd) $@ | ||
| 747 | 282 | ||
| 748 | vmlinuz.ecoff: vmlinux | ||
| 749 | +@$(call makezboot,$@) | ||
| 750 | 283 | ||
| 751 | vmlinuz.srec: vmlinux | 284 | CLEAN_FILES += vmlinux.32 vmlinux.64 |
| 752 | +@$(call makezboot,$@) | ||
| 753 | |||
| 754 | vmlinux.bin: $(vmlinux-32) | ||
| 755 | +@$(call makeboot,$@) | ||
| 756 | |||
| 757 | vmlinux.ecoff: $(vmlinux-32) | ||
| 758 | +@$(call makeboot,$@) | ||
| 759 | |||
| 760 | vmlinux.srec: $(vmlinux-32) | ||
| 761 | +@$(call makeboot,$@) | ||
| 762 | |||
| 763 | CLEAN_FILES += vmlinux.ecoff \ | ||
| 764 | vmlinux.srec | ||
| 765 | 285 | ||
| 766 | archprepare: | 286 | archprepare: |
| 767 | ifdef CONFIG_MIPS32_N32 | 287 | ifdef CONFIG_MIPS32_N32 |
| @@ -780,9 +300,9 @@ install: | |||
| 780 | $(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE) | 300 | $(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE) |
| 781 | 301 | ||
| 782 | archclean: | 302 | archclean: |
| 783 | @$(MAKE) $(clean)=arch/mips/boot | 303 | $(Q)$(MAKE) $(clean)=arch/mips/boot |
| 784 | @$(MAKE) $(clean)=arch/mips/boot/compressed | 304 | $(Q)$(MAKE) $(clean)=arch/mips/boot/compressed |
| 785 | @$(MAKE) $(clean)=arch/mips/lasat | 305 | $(Q)$(MAKE) $(clean)=arch/mips/lasat |
| 786 | 306 | ||
| 787 | define archhelp | 307 | define archhelp |
| 788 | echo ' install - install kernel into $(INSTALL_PATH)' | 308 | echo ' install - install kernel into $(INSTALL_PATH)' |
| @@ -796,11 +316,3 @@ define archhelp | |||
| 796 | echo | 316 | echo |
| 797 | echo ' These will be default as apropriate for a configured platform.' | 317 | echo ' These will be default as apropriate for a configured platform.' |
| 798 | endef | 318 | endef |
| 799 | |||
| 800 | CLEAN_FILES += vmlinux.32 \ | ||
| 801 | vmlinux.64 \ | ||
| 802 | vmlinux.ecoff \ | ||
| 803 | vmlinuz \ | ||
| 804 | vmlinuz.ecoff \ | ||
| 805 | vmlinuz.bin \ | ||
| 806 | vmlinuz.srec | ||
diff --git a/arch/mips/alchemy/Kconfig b/arch/mips/alchemy/Kconfig index df3b1a7eb15d..2ccfd4a135bc 100644 --- a/arch/mips/alchemy/Kconfig +++ b/arch/mips/alchemy/Kconfig | |||
| @@ -11,7 +11,7 @@ config ALCHEMY_GPIO_INDIRECT | |||
| 11 | 11 | ||
| 12 | choice | 12 | choice |
| 13 | prompt "Machine type" | 13 | prompt "Machine type" |
| 14 | depends on MACH_ALCHEMY | 14 | depends on MIPS_ALCHEMY |
| 15 | default MIPS_DB1000 | 15 | default MIPS_DB1000 |
| 16 | 16 | ||
| 17 | config MIPS_MTX1 | 17 | config MIPS_MTX1 |
| @@ -128,41 +128,33 @@ config MIPS_XXS1500 | |||
| 128 | select SYS_SUPPORTS_LITTLE_ENDIAN | 128 | select SYS_SUPPORTS_LITTLE_ENDIAN |
| 129 | select SYS_HAS_EARLY_PRINTK | 129 | select SYS_HAS_EARLY_PRINTK |
| 130 | 130 | ||
| 131 | config MIPS_GPR | ||
| 132 | bool "Trapeze ITS GPR board" | ||
| 133 | select SOC_AU1550 | ||
| 134 | select HW_HAS_PCI | ||
| 135 | select DMA_NONCOHERENT | ||
| 136 | select MIPS_DISABLE_OBSOLETE_IDE | ||
| 137 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
| 138 | select SYS_HAS_EARLY_PRINTK | ||
| 139 | |||
| 131 | endchoice | 140 | endchoice |
| 132 | 141 | ||
| 133 | config SOC_AU1000 | 142 | config SOC_AU1000 |
| 134 | bool | 143 | bool |
| 135 | select SOC_AU1X00 | ||
| 136 | select ALCHEMY_GPIOINT_AU1000 | 144 | select ALCHEMY_GPIOINT_AU1000 |
| 137 | 145 | ||
| 138 | config SOC_AU1100 | 146 | config SOC_AU1100 |
| 139 | bool | 147 | bool |
| 140 | select SOC_AU1X00 | ||
| 141 | select ALCHEMY_GPIOINT_AU1000 | 148 | select ALCHEMY_GPIOINT_AU1000 |
| 142 | 149 | ||
| 143 | config SOC_AU1500 | 150 | config SOC_AU1500 |
| 144 | bool | 151 | bool |
| 145 | select SOC_AU1X00 | ||
| 146 | select ALCHEMY_GPIOINT_AU1000 | 152 | select ALCHEMY_GPIOINT_AU1000 |
| 147 | 153 | ||
| 148 | config SOC_AU1550 | 154 | config SOC_AU1550 |
| 149 | bool | 155 | bool |
| 150 | select SOC_AU1X00 | ||
| 151 | select ALCHEMY_GPIOINT_AU1000 | 156 | select ALCHEMY_GPIOINT_AU1000 |
| 152 | 157 | ||
| 153 | config SOC_AU1200 | 158 | config SOC_AU1200 |
| 154 | bool | 159 | bool |
| 155 | select SOC_AU1X00 | ||
| 156 | select ALCHEMY_GPIOINT_AU1000 | 160 | select ALCHEMY_GPIOINT_AU1000 |
| 157 | |||
| 158 | config SOC_AU1X00 | ||
| 159 | bool | ||
| 160 | select 64BIT_PHYS_ADDR | ||
| 161 | select CEVT_R4K_LIB | ||
| 162 | select CSRC_R4K_LIB | ||
| 163 | select IRQ_CPU | ||
| 164 | select SYS_HAS_CPU_MIPS32_R1 | ||
| 165 | select SYS_SUPPORTS_32BIT_KERNEL | ||
| 166 | select SYS_SUPPORTS_APM_EMULATION | ||
| 167 | select GENERIC_GPIO | ||
| 168 | select ARCH_WANT_OPTIONAL_GPIOLIB | ||
diff --git a/arch/mips/alchemy/Platform b/arch/mips/alchemy/Platform new file mode 100644 index 000000000000..96e9e41f1b2a --- /dev/null +++ b/arch/mips/alchemy/Platform | |||
| @@ -0,0 +1,114 @@ | |||
| 1 | # | ||
| 2 | # Core Alchemy code | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MIPS_ALCHEMY) += alchemy/common/ | ||
| 5 | |||
| 6 | |||
| 7 | # | ||
| 8 | # AMD Alchemy Pb1000 eval board | ||
| 9 | # | ||
| 10 | platform-$(CONFIG_MIPS_PB1000) += alchemy/devboards/ | ||
| 11 | cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 12 | load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 | ||
| 13 | |||
| 14 | # | ||
| 15 | # AMD Alchemy Pb1100 eval board | ||
| 16 | # | ||
| 17 | platform-$(CONFIG_MIPS_PB1100) += alchemy/devboards/ | ||
| 18 | cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 19 | load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 | ||
| 20 | |||
| 21 | # | ||
| 22 | # AMD Alchemy Pb1500 eval board | ||
| 23 | # | ||
| 24 | platform-$(CONFIG_MIPS_PB1500) += alchemy/devboards/ | ||
| 25 | cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 26 | load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 | ||
| 27 | |||
| 28 | # | ||
| 29 | # AMD Alchemy Pb1550 eval board | ||
| 30 | # | ||
| 31 | platform-$(CONFIG_MIPS_PB1550) += alchemy/devboards/ | ||
| 32 | cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 33 | load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 | ||
| 34 | |||
| 35 | # | ||
| 36 | # AMD Alchemy Pb1200 eval board | ||
| 37 | # | ||
| 38 | platform-$(CONFIG_MIPS_PB1200) += alchemy/devboards/ | ||
| 39 | cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 | ||
| 40 | load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 | ||
| 41 | |||
| 42 | # | ||
| 43 | # AMD Alchemy Db1000 eval board | ||
| 44 | # | ||
| 45 | platform-$(CONFIG_MIPS_DB1000) += alchemy/devboards/ | ||
| 46 | cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 47 | load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 | ||
| 48 | |||
| 49 | # | ||
| 50 | # AMD Alchemy Db1100 eval board | ||
| 51 | # | ||
| 52 | platform-$(CONFIG_MIPS_DB1100) += alchemy/devboards/ | ||
| 53 | cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 54 | load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 | ||
| 55 | |||
| 56 | # | ||
| 57 | # AMD Alchemy Db1500 eval board | ||
| 58 | # | ||
| 59 | platform-$(CONFIG_MIPS_DB1500) += alchemy/devboards/ | ||
| 60 | cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 61 | load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 | ||
| 62 | |||
| 63 | # | ||
| 64 | # AMD Alchemy Db1550 eval board | ||
| 65 | # | ||
| 66 | platform-$(CONFIG_MIPS_DB1550) += alchemy/devboards/ | ||
| 67 | cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 68 | load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 | ||
| 69 | |||
| 70 | # | ||
| 71 | # AMD Alchemy Db1200 eval board | ||
| 72 | # | ||
| 73 | platform-$(CONFIG_MIPS_DB1200) += alchemy/devboards/ | ||
| 74 | cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 75 | load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 | ||
| 76 | |||
| 77 | # | ||
| 78 | # AMD Alchemy Bosporus eval board | ||
| 79 | # | ||
| 80 | platform-$(CONFIG_MIPS_BOSPORUS) += alchemy/devboards/ | ||
| 81 | cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 82 | load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 | ||
| 83 | |||
| 84 | # | ||
| 85 | # AMD Alchemy Mirage eval board | ||
| 86 | # | ||
| 87 | platform-$(CONFIG_MIPS_MIRAGE) += alchemy/devboards/ | ||
| 88 | cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 | ||
| 89 | load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 | ||
| 90 | |||
| 91 | # | ||
| 92 | # 4G-Systems eval board | ||
| 93 | # | ||
| 94 | platform-$(CONFIG_MIPS_MTX1) += alchemy/mtx-1/ | ||
| 95 | load-$(CONFIG_MIPS_MTX1) += 0xffffffff80100000 | ||
| 96 | |||
| 97 | # | ||
| 98 | # MyCable eval board | ||
| 99 | # | ||
| 100 | platform-$(CONFIG_MIPS_XXS1500) += alchemy/xxs1500/ | ||
| 101 | load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000 | ||
| 102 | |||
| 103 | # | ||
| 104 | # Trapeze ITS GRP board | ||
| 105 | # | ||
| 106 | platform-$(CONFIG_MIPS_GPR) += alchemy/gpr/ | ||
| 107 | load-$(CONFIG_MIPS_GPR) += 0xffffffff80100000 | ||
| 108 | |||
| 109 | # boards can specify their own <gpio.h> in one of their include dirs. | ||
| 110 | # If they do, placing this line here at the end will make sure the | ||
| 111 | # compiler picks the board one. If they don't, it will make sure | ||
| 112 | # the alchemy generic gpio header is picked up. | ||
| 113 | |||
| 114 | cflags-$(CONFIG_MIPS_ALCHEMY) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 | ||
diff --git a/arch/mips/alchemy/common/Makefile b/arch/mips/alchemy/common/Makefile index 06c0e65a54b5..27811fe341d6 100644 --- a/arch/mips/alchemy/common/Makefile +++ b/arch/mips/alchemy/common/Makefile | |||
| @@ -18,5 +18,3 @@ ifeq ($(CONFIG_ALCHEMY_GPIO_INDIRECT),) | |||
| 18 | endif | 18 | endif |
| 19 | 19 | ||
| 20 | obj-$(CONFIG_PCI) += pci.o | 20 | obj-$(CONFIG_PCI) += pci.o |
| 21 | |||
| 22 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/alchemy/common/clocks.c b/arch/mips/alchemy/common/clocks.c index 460c6285c1bb..af0fe41055af 100644 --- a/arch/mips/alchemy/common/clocks.c +++ b/arch/mips/alchemy/common/clocks.c | |||
| @@ -89,11 +89,7 @@ unsigned long au1xxx_calc_clock(void) | |||
| 89 | * over backwards trying to determine the frequency. | 89 | * over backwards trying to determine the frequency. |
| 90 | */ | 90 | */ |
| 91 | if (au1xxx_cpu_has_pll_wo()) | 91 | if (au1xxx_cpu_has_pll_wo()) |
| 92 | #ifdef CONFIG_SOC_AU1000_FREQUENCY | ||
| 93 | cpu_speed = CONFIG_SOC_AU1000_FREQUENCY; | ||
| 94 | #else | ||
| 95 | cpu_speed = 396000000; | 92 | cpu_speed = 396000000; |
| 96 | #endif | ||
| 97 | else | 93 | else |
| 98 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * AU1000_SRC_CLK; | 94 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * AU1000_SRC_CLK; |
| 99 | 95 | ||
diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c index f9e5622ebc95..1dc55ee2681b 100644 --- a/arch/mips/alchemy/common/platform.c +++ b/arch/mips/alchemy/common/platform.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <linux/dma-mapping.h> | 14 | #include <linux/dma-mapping.h> |
| 15 | #include <linux/etherdevice.h> | ||
| 15 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 16 | #include <linux/serial_8250.h> | 17 | #include <linux/serial_8250.h> |
| 17 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| @@ -21,6 +22,8 @@ | |||
| 21 | #include <asm/mach-au1x00/au1100_mmc.h> | 22 | #include <asm/mach-au1x00/au1100_mmc.h> |
| 22 | #include <asm/mach-au1x00/au1xxx_eth.h> | 23 | #include <asm/mach-au1x00/au1xxx_eth.h> |
| 23 | 24 | ||
| 25 | #include <prom.h> | ||
| 26 | |||
| 24 | #define PORT(_base, _irq) \ | 27 | #define PORT(_base, _irq) \ |
| 25 | { \ | 28 | { \ |
| 26 | .mapbase = _base, \ | 29 | .mapbase = _base, \ |
| @@ -33,7 +36,6 @@ | |||
| 33 | } | 36 | } |
| 34 | 37 | ||
| 35 | static struct plat_serial8250_port au1x00_uart_data[] = { | 38 | static struct plat_serial8250_port au1x00_uart_data[] = { |
| 36 | #if defined(CONFIG_SERIAL_8250_AU1X00) | ||
| 37 | #if defined(CONFIG_SOC_AU1000) | 39 | #if defined(CONFIG_SOC_AU1000) |
| 38 | PORT(UART0_PHYS_ADDR, AU1000_UART0_INT), | 40 | PORT(UART0_PHYS_ADDR, AU1000_UART0_INT), |
| 39 | PORT(UART1_PHYS_ADDR, AU1000_UART1_INT), | 41 | PORT(UART1_PHYS_ADDR, AU1000_UART1_INT), |
| @@ -54,7 +56,6 @@ static struct plat_serial8250_port au1x00_uart_data[] = { | |||
| 54 | PORT(UART0_PHYS_ADDR, AU1200_UART0_INT), | 56 | PORT(UART0_PHYS_ADDR, AU1200_UART0_INT), |
| 55 | PORT(UART1_PHYS_ADDR, AU1200_UART1_INT), | 57 | PORT(UART1_PHYS_ADDR, AU1200_UART1_INT), |
| 56 | #endif | 58 | #endif |
| 57 | #endif /* CONFIG_SERIAL_8250_AU1X00 */ | ||
| 58 | { }, | 59 | { }, |
| 59 | }; | 60 | }; |
| 60 | 61 | ||
| @@ -436,17 +437,27 @@ static int __init au1xxx_platform_init(void) | |||
| 436 | { | 437 | { |
| 437 | unsigned int uartclk = get_au1x00_uart_baud_base() * 16; | 438 | unsigned int uartclk = get_au1x00_uart_baud_base() * 16; |
| 438 | int err, i; | 439 | int err, i; |
| 440 | unsigned char ethaddr[6]; | ||
| 439 | 441 | ||
| 440 | /* Fill up uartclk. */ | 442 | /* Fill up uartclk. */ |
| 441 | for (i = 0; au1x00_uart_data[i].flags; i++) | 443 | for (i = 0; au1x00_uart_data[i].flags; i++) |
| 442 | au1x00_uart_data[i].uartclk = uartclk; | 444 | au1x00_uart_data[i].uartclk = uartclk; |
| 443 | 445 | ||
| 446 | /* use firmware-provided mac addr if available and necessary */ | ||
| 447 | i = prom_get_ethernet_addr(ethaddr); | ||
| 448 | if (!i && !is_valid_ether_addr(au1xxx_eth0_platform_data.mac)) | ||
| 449 | memcpy(au1xxx_eth0_platform_data.mac, ethaddr, 6); | ||
| 450 | |||
| 444 | err = platform_add_devices(au1xxx_platform_devices, | 451 | err = platform_add_devices(au1xxx_platform_devices, |
| 445 | ARRAY_SIZE(au1xxx_platform_devices)); | 452 | ARRAY_SIZE(au1xxx_platform_devices)); |
| 446 | #ifndef CONFIG_SOC_AU1100 | 453 | #ifndef CONFIG_SOC_AU1100 |
| 454 | ethaddr[5] += 1; /* next addr for 2nd MAC */ | ||
| 455 | if (!i && !is_valid_ether_addr(au1xxx_eth1_platform_data.mac)) | ||
| 456 | memcpy(au1xxx_eth1_platform_data.mac, ethaddr, 6); | ||
| 457 | |||
| 447 | /* Register second MAC if enabled in pinfunc */ | 458 | /* Register second MAC if enabled in pinfunc */ |
| 448 | if (!err && !(au_readl(SYS_PINFUNC) & (u32)SYS_PF_NI2)) | 459 | if (!err && !(au_readl(SYS_PINFUNC) & (u32)SYS_PF_NI2)) |
| 449 | platform_device_register(&au1xxx_eth1_device); | 460 | err = platform_device_register(&au1xxx_eth1_device); |
| 450 | #endif | 461 | #endif |
| 451 | 462 | ||
| 452 | return err; | 463 | return err; |
diff --git a/arch/mips/alchemy/devboards/Makefile b/arch/mips/alchemy/devboards/Makefile index ecbd37f9ee87..826449c817c3 100644 --- a/arch/mips/alchemy/devboards/Makefile +++ b/arch/mips/alchemy/devboards/Makefile | |||
| @@ -16,5 +16,3 @@ obj-$(CONFIG_MIPS_DB1500) += db1x00/ | |||
| 16 | obj-$(CONFIG_MIPS_DB1550) += db1x00/ | 16 | obj-$(CONFIG_MIPS_DB1550) += db1x00/ |
| 17 | obj-$(CONFIG_MIPS_BOSPORUS) += db1x00/ | 17 | obj-$(CONFIG_MIPS_BOSPORUS) += db1x00/ |
| 18 | obj-$(CONFIG_MIPS_MIRAGE) += db1x00/ | 18 | obj-$(CONFIG_MIPS_MIRAGE) += db1x00/ |
| 19 | |||
| 20 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/alchemy/devboards/db1200/platform.c b/arch/mips/alchemy/devboards/db1200/platform.c index 3cb95a98ab31..3fa34c3abc04 100644 --- a/arch/mips/alchemy/devboards/db1200/platform.c +++ b/arch/mips/alchemy/devboards/db1200/platform.c | |||
| @@ -216,14 +216,14 @@ static struct resource db1200_ide_res[] = { | |||
| 216 | } | 216 | } |
| 217 | }; | 217 | }; |
| 218 | 218 | ||
| 219 | static u64 ide_dmamask = DMA_32BIT_MASK; | 219 | static u64 ide_dmamask = DMA_BIT_MASK(32); |
| 220 | 220 | ||
| 221 | static struct platform_device db1200_ide_dev = { | 221 | static struct platform_device db1200_ide_dev = { |
| 222 | .name = "au1200-ide", | 222 | .name = "au1200-ide", |
| 223 | .id = 0, | 223 | .id = 0, |
| 224 | .dev = { | 224 | .dev = { |
| 225 | .dma_mask = &ide_dmamask, | 225 | .dma_mask = &ide_dmamask, |
| 226 | .coherent_dma_mask = DMA_32BIT_MASK, | 226 | .coherent_dma_mask = DMA_BIT_MASK(32), |
| 227 | }, | 227 | }, |
| 228 | .num_resources = ARRAY_SIZE(db1200_ide_res), | 228 | .num_resources = ARRAY_SIZE(db1200_ide_res), |
| 229 | .resource = db1200_ide_res, | 229 | .resource = db1200_ide_res, |
| @@ -385,12 +385,12 @@ static struct au1550_spi_info db1200_spi_platdata = { | |||
| 385 | .activate_cs = db1200_spi_cs_en, | 385 | .activate_cs = db1200_spi_cs_en, |
| 386 | }; | 386 | }; |
| 387 | 387 | ||
| 388 | static u64 spi_dmamask = DMA_32BIT_MASK; | 388 | static u64 spi_dmamask = DMA_BIT_MASK(32); |
| 389 | 389 | ||
| 390 | static struct platform_device db1200_spi_dev = { | 390 | static struct platform_device db1200_spi_dev = { |
| 391 | .dev = { | 391 | .dev = { |
| 392 | .dma_mask = &spi_dmamask, | 392 | .dma_mask = &spi_dmamask, |
| 393 | .coherent_dma_mask = DMA_32BIT_MASK, | 393 | .coherent_dma_mask = DMA_BIT_MASK(32), |
| 394 | .platform_data = &db1200_spi_platdata, | 394 | .platform_data = &db1200_spi_platdata, |
| 395 | }, | 395 | }, |
| 396 | .name = "au1550-spi", | 396 | .name = "au1550-spi", |
diff --git a/arch/mips/alchemy/devboards/db1x00/board_setup.c b/arch/mips/alchemy/devboards/db1x00/board_setup.c index 50c9bef99daa..9e45971343ed 100644 --- a/arch/mips/alchemy/devboards/db1x00/board_setup.c +++ b/arch/mips/alchemy/devboards/db1x00/board_setup.c | |||
| @@ -79,7 +79,6 @@ static struct au1000_eth_platform_data eth0_pdata = { | |||
| 79 | 79 | ||
| 80 | static void bosporus_power_off(void) | 80 | static void bosporus_power_off(void) |
| 81 | { | 81 | { |
| 82 | printk(KERN_INFO "It's now safe to turn off power\n"); | ||
| 83 | while (1) | 82 | while (1) |
| 84 | asm volatile (".set mips3 ; wait ; .set mips0"); | 83 | asm volatile (".set mips3 ; wait ; .set mips0"); |
| 85 | } | 84 | } |
diff --git a/arch/mips/alchemy/devboards/pb1000/board_setup.c b/arch/mips/alchemy/devboards/pb1000/board_setup.c index 4ef50d86b181..f6540ec47a64 100644 --- a/arch/mips/alchemy/devboards/pb1000/board_setup.c +++ b/arch/mips/alchemy/devboards/pb1000/board_setup.c | |||
| @@ -47,9 +47,11 @@ static void board_reset(char *c) | |||
| 47 | 47 | ||
| 48 | static void board_power_off(void) | 48 | static void board_power_off(void) |
| 49 | { | 49 | { |
| 50 | printk(KERN_ALERT "It's now safe to remove power\n"); | ||
| 51 | while (1) | 50 | while (1) |
| 52 | asm volatile (".set mips3 ; wait ; .set mips1"); | 51 | asm volatile ( |
| 52 | " .set mips32 \n" | ||
| 53 | " wait \n" | ||
| 54 | " .set mips0 \n"); | ||
| 53 | } | 55 | } |
| 54 | 56 | ||
| 55 | void __init board_setup(void) | 57 | void __init board_setup(void) |
diff --git a/arch/mips/alchemy/devboards/pb1200/Makefile b/arch/mips/alchemy/devboards/pb1200/Makefile index 2ea9b02ef09f..18c1bd53e4c0 100644 --- a/arch/mips/alchemy/devboards/pb1200/Makefile +++ b/arch/mips/alchemy/devboards/pb1200/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := board_setup.o platform.o | 5 | obj-y := board_setup.o platform.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/alchemy/gpr/Makefile b/arch/mips/alchemy/gpr/Makefile new file mode 100644 index 000000000000..cb73fe256dce --- /dev/null +++ b/arch/mips/alchemy/gpr/Makefile | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | # | ||
| 2 | # Copyright 2003 MontaVista Software Inc. | ||
| 3 | # Author: MontaVista Software, Inc. <source@mvista.com> | ||
| 4 | # | ||
| 5 | # Makefile for Trapeze ITS GPR board. | ||
| 6 | # | ||
| 7 | |||
| 8 | obj-y += board_setup.o init.o platform.o | ||
diff --git a/arch/mips/alchemy/gpr/board_setup.c b/arch/mips/alchemy/gpr/board_setup.c new file mode 100644 index 000000000000..ad2e3f137933 --- /dev/null +++ b/arch/mips/alchemy/gpr/board_setup.c | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2010 Wolfgang Grandegger <wg@denx.de> | ||
| 3 | * | ||
| 4 | * Copyright 2000-2003, 2008 MontaVista Software Inc. | ||
| 5 | * Author: MontaVista Software, Inc. <source@mvista.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | * | ||
| 12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License along | ||
| 24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | ||
| 27 | |||
| 28 | #include <linux/gpio.h> | ||
| 29 | #include <linux/init.h> | ||
| 30 | #include <linux/interrupt.h> | ||
| 31 | #include <linux/delay.h> | ||
| 32 | #include <linux/pm.h> | ||
| 33 | |||
| 34 | #include <asm/reboot.h> | ||
| 35 | #include <asm/mach-au1x00/au1000.h> | ||
| 36 | |||
| 37 | #include <prom.h> | ||
| 38 | |||
| 39 | #define UART1_ADDR KSEG1ADDR(UART1_PHYS_ADDR) | ||
| 40 | #define UART3_ADDR KSEG1ADDR(UART3_PHYS_ADDR) | ||
| 41 | |||
| 42 | char irq_tab_alchemy[][5] __initdata = { | ||
| 43 | [0] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, 0xff, 0xff }, | ||
| 44 | }; | ||
| 45 | |||
| 46 | static void gpr_reset(char *c) | ||
| 47 | { | ||
| 48 | /* switch System-LED to orange (red# and green# on) */ | ||
| 49 | alchemy_gpio_direction_output(4, 0); | ||
| 50 | alchemy_gpio_direction_output(5, 0); | ||
| 51 | |||
| 52 | /* trigger watchdog to reset board in 200ms */ | ||
| 53 | printk(KERN_EMERG "Triggering watchdog soft reset...\n"); | ||
| 54 | raw_local_irq_disable(); | ||
| 55 | alchemy_gpio_direction_output(1, 0); | ||
| 56 | udelay(1); | ||
| 57 | alchemy_gpio_set_value(1, 1); | ||
| 58 | while (1) | ||
| 59 | cpu_wait(); | ||
| 60 | } | ||
| 61 | |||
| 62 | static void gpr_power_off(void) | ||
| 63 | { | ||
| 64 | while (1) | ||
| 65 | cpu_wait(); | ||
| 66 | } | ||
| 67 | |||
| 68 | void __init board_setup(void) | ||
| 69 | { | ||
| 70 | printk(KERN_INFO "Tarpeze ITS GPR board\n"); | ||
| 71 | |||
| 72 | pm_power_off = gpr_power_off; | ||
| 73 | _machine_halt = gpr_power_off; | ||
| 74 | _machine_restart = gpr_reset; | ||
| 75 | |||
| 76 | /* Enable UART3 */ | ||
| 77 | au_writel(0x1, UART3_ADDR + UART_MOD_CNTRL);/* clock enable (CE) */ | ||
| 78 | au_writel(0x3, UART3_ADDR + UART_MOD_CNTRL); /* CE and "enable" */ | ||
| 79 | /* Enable UART1 */ | ||
| 80 | au_writel(0x1, UART1_ADDR + UART_MOD_CNTRL); /* clock enable (CE) */ | ||
| 81 | au_writel(0x3, UART1_ADDR + UART_MOD_CNTRL); /* CE and "enable" */ | ||
| 82 | |||
| 83 | /* Take away Reset of UMTS-card */ | ||
| 84 | alchemy_gpio_direction_output(215, 1); | ||
| 85 | |||
| 86 | #ifdef CONFIG_PCI | ||
| 87 | #if defined(__MIPSEB__) | ||
| 88 | au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); | ||
| 89 | #else | ||
| 90 | au_writel(0xf, Au1500_PCI_CFG); | ||
| 91 | #endif | ||
| 92 | #endif | ||
| 93 | } | ||
diff --git a/arch/mips/alchemy/gpr/init.c b/arch/mips/alchemy/gpr/init.c new file mode 100644 index 000000000000..f044f4c541d7 --- /dev/null +++ b/arch/mips/alchemy/gpr/init.c | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2010 Wolfgang Grandegger <wg@denx.de> | ||
| 3 | * | ||
| 4 | * Copyright 2003, 2008 MontaVista Software Inc. | ||
| 5 | * Author: MontaVista Software, Inc. <source@mvista.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | * | ||
| 12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License along | ||
| 24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | ||
| 27 | |||
| 28 | #include <linux/init.h> | ||
| 29 | #include <linux/kernel.h> | ||
| 30 | |||
| 31 | #include <asm/bootinfo.h> | ||
| 32 | #include <asm/mach-au1x00/au1000.h> | ||
| 33 | |||
| 34 | #include <prom.h> | ||
| 35 | |||
| 36 | const char *get_system_type(void) | ||
| 37 | { | ||
| 38 | return "GPR"; | ||
| 39 | } | ||
| 40 | |||
| 41 | void __init prom_init(void) | ||
| 42 | { | ||
| 43 | unsigned char *memsize_str; | ||
| 44 | unsigned long memsize; | ||
| 45 | |||
| 46 | prom_argc = fw_arg0; | ||
| 47 | prom_argv = (char **)fw_arg1; | ||
| 48 | prom_envp = (char **)fw_arg2; | ||
| 49 | |||
| 50 | prom_init_cmdline(); | ||
| 51 | |||
| 52 | memsize_str = prom_getenv("memsize"); | ||
| 53 | if (!memsize_str) | ||
| 54 | memsize = 0x04000000; | ||
| 55 | else | ||
| 56 | strict_strtoul(memsize_str, 0, &memsize); | ||
| 57 | add_memory_region(0, memsize, BOOT_MEM_RAM); | ||
| 58 | } | ||
| 59 | |||
| 60 | void prom_putchar(unsigned char c) | ||
| 61 | { | ||
| 62 | alchemy_uart_putchar(UART0_PHYS_ADDR, c); | ||
| 63 | } | ||
diff --git a/arch/mips/alchemy/gpr/platform.c b/arch/mips/alchemy/gpr/platform.c new file mode 100644 index 000000000000..14b46629cfc8 --- /dev/null +++ b/arch/mips/alchemy/gpr/platform.c | |||
| @@ -0,0 +1,183 @@ | |||
| 1 | /* | ||
| 2 | * GPR board platform device registration | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Wolfgang Grandegger <wg@denx.de> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * 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 | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/init.h> | ||
| 22 | #include <linux/platform_device.h> | ||
| 23 | #include <linux/mtd/partitions.h> | ||
| 24 | #include <linux/mtd/physmap.h> | ||
| 25 | #include <linux/leds.h> | ||
| 26 | #include <linux/gpio.h> | ||
| 27 | #include <linux/i2c.h> | ||
| 28 | #include <linux/i2c-gpio.h> | ||
| 29 | |||
| 30 | #include <asm/mach-au1x00/au1000.h> | ||
| 31 | |||
| 32 | /* | ||
| 33 | * Watchdog | ||
| 34 | */ | ||
| 35 | static struct resource gpr_wdt_resource[] = { | ||
| 36 | [0] = { | ||
| 37 | .start = 1, | ||
| 38 | .end = 1, | ||
| 39 | .name = "gpr-adm6320-wdt", | ||
| 40 | .flags = IORESOURCE_IRQ, | ||
| 41 | } | ||
| 42 | }; | ||
| 43 | |||
| 44 | static struct platform_device gpr_wdt_device = { | ||
| 45 | .name = "adm6320-wdt", | ||
| 46 | .id = 0, | ||
| 47 | .num_resources = ARRAY_SIZE(gpr_wdt_resource), | ||
| 48 | .resource = gpr_wdt_resource, | ||
| 49 | }; | ||
| 50 | |||
| 51 | /* | ||
| 52 | * FLASH | ||
| 53 | * | ||
| 54 | * 0x00000000-0x00200000 : "kernel" | ||
| 55 | * 0x00200000-0x00a00000 : "rootfs" | ||
| 56 | * 0x01d00000-0x01f00000 : "config" | ||
| 57 | * 0x01c00000-0x01d00000 : "yamon" | ||
| 58 | * 0x01d00000-0x01d40000 : "yamon env vars" | ||
| 59 | * 0x00000000-0x00a00000 : "kernel+rootfs" | ||
| 60 | */ | ||
| 61 | static struct mtd_partition gpr_mtd_partitions[] = { | ||
| 62 | { | ||
| 63 | .name = "kernel", | ||
| 64 | .size = 0x00200000, | ||
| 65 | .offset = 0, | ||
| 66 | }, | ||
| 67 | { | ||
| 68 | .name = "rootfs", | ||
| 69 | .size = 0x00800000, | ||
| 70 | .offset = MTDPART_OFS_APPEND, | ||
| 71 | .mask_flags = MTD_WRITEABLE, | ||
| 72 | }, | ||
| 73 | { | ||
| 74 | .name = "config", | ||
| 75 | .size = 0x00200000, | ||
| 76 | .offset = 0x01d00000, | ||
| 77 | }, | ||
| 78 | { | ||
| 79 | .name = "yamon", | ||
| 80 | .size = 0x00100000, | ||
| 81 | .offset = 0x01c00000, | ||
| 82 | }, | ||
| 83 | { | ||
| 84 | .name = "yamon env vars", | ||
| 85 | .size = 0x00040000, | ||
| 86 | .offset = MTDPART_OFS_APPEND, | ||
| 87 | }, | ||
| 88 | { | ||
| 89 | .name = "kernel+rootfs", | ||
| 90 | .size = 0x00a00000, | ||
| 91 | .offset = 0, | ||
| 92 | }, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct physmap_flash_data gpr_flash_data = { | ||
| 96 | .width = 4, | ||
| 97 | .nr_parts = ARRAY_SIZE(gpr_mtd_partitions), | ||
| 98 | .parts = gpr_mtd_partitions, | ||
| 99 | }; | ||
| 100 | |||
| 101 | static struct resource gpr_mtd_resource = { | ||
| 102 | .start = 0x1e000000, | ||
| 103 | .end = 0x1fffffff, | ||
| 104 | .flags = IORESOURCE_MEM, | ||
| 105 | }; | ||
| 106 | |||
| 107 | static struct platform_device gpr_mtd_device = { | ||
| 108 | .name = "physmap-flash", | ||
| 109 | .dev = { | ||
| 110 | .platform_data = &gpr_flash_data, | ||
| 111 | }, | ||
| 112 | .num_resources = 1, | ||
| 113 | .resource = &gpr_mtd_resource, | ||
| 114 | }; | ||
| 115 | |||
| 116 | /* | ||
| 117 | * LEDs | ||
| 118 | */ | ||
| 119 | static struct gpio_led gpr_gpio_leds[] = { | ||
| 120 | { /* green */ | ||
| 121 | .name = "gpr:green", | ||
| 122 | .gpio = 4, | ||
| 123 | .active_low = 1, | ||
| 124 | }, | ||
| 125 | { /* red */ | ||
| 126 | .name = "gpr:red", | ||
| 127 | .gpio = 5, | ||
| 128 | .active_low = 1, | ||
| 129 | } | ||
| 130 | }; | ||
| 131 | |||
| 132 | static struct gpio_led_platform_data gpr_led_data = { | ||
| 133 | .num_leds = ARRAY_SIZE(gpr_gpio_leds), | ||
| 134 | .leds = gpr_gpio_leds, | ||
| 135 | }; | ||
| 136 | |||
| 137 | static struct platform_device gpr_led_devices = { | ||
| 138 | .name = "leds-gpio", | ||
| 139 | .id = -1, | ||
| 140 | .dev = { | ||
| 141 | .platform_data = &gpr_led_data, | ||
| 142 | } | ||
| 143 | }; | ||
| 144 | |||
| 145 | /* | ||
| 146 | * I2C | ||
| 147 | */ | ||
| 148 | static struct i2c_gpio_platform_data gpr_i2c_data = { | ||
| 149 | .sda_pin = 209, | ||
| 150 | .sda_is_open_drain = 1, | ||
| 151 | .scl_pin = 210, | ||
| 152 | .scl_is_open_drain = 1, | ||
| 153 | .udelay = 2, /* ~100 kHz */ | ||
| 154 | .timeout = HZ, | ||
| 155 | }; | ||
| 156 | |||
| 157 | static struct platform_device gpr_i2c_device = { | ||
| 158 | .name = "i2c-gpio", | ||
| 159 | .id = -1, | ||
| 160 | .dev.platform_data = &gpr_i2c_data, | ||
| 161 | }; | ||
| 162 | |||
| 163 | static struct i2c_board_info gpr_i2c_info[] __initdata = { | ||
| 164 | { | ||
| 165 | I2C_BOARD_INFO("lm83", 0x18), | ||
| 166 | .type = "lm83" | ||
| 167 | } | ||
| 168 | }; | ||
| 169 | |||
| 170 | static struct platform_device *gpr_devices[] __initdata = { | ||
| 171 | &gpr_wdt_device, | ||
| 172 | &gpr_mtd_device, | ||
| 173 | &gpr_i2c_device, | ||
| 174 | &gpr_led_devices, | ||
| 175 | }; | ||
| 176 | |||
| 177 | static int __init gpr_dev_init(void) | ||
| 178 | { | ||
| 179 | i2c_register_board_info(0, gpr_i2c_info, ARRAY_SIZE(gpr_i2c_info)); | ||
| 180 | |||
| 181 | return platform_add_devices(gpr_devices, ARRAY_SIZE(gpr_devices)); | ||
| 182 | } | ||
| 183 | device_initcall(gpr_dev_init); | ||
diff --git a/arch/mips/alchemy/mtx-1/Makefile b/arch/mips/alchemy/mtx-1/Makefile index 4a53815b3c6c..81b540ceaf88 100644 --- a/arch/mips/alchemy/mtx-1/Makefile +++ b/arch/mips/alchemy/mtx-1/Makefile | |||
| @@ -6,7 +6,4 @@ | |||
| 6 | # Makefile for 4G Systems MTX-1 board. | 6 | # Makefile for 4G Systems MTX-1 board. |
| 7 | # | 7 | # |
| 8 | 8 | ||
| 9 | lib-y := init.o board_setup.o | 9 | obj-y += init.o board_setup.o platform.o |
| 10 | obj-y := platform.o | ||
| 11 | |||
| 12 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c index 52d883d37dd7..6398fa95905c 100644 --- a/arch/mips/alchemy/mtx-1/board_setup.c +++ b/arch/mips/alchemy/mtx-1/board_setup.c | |||
| @@ -60,9 +60,11 @@ static void mtx1_reset(char *c) | |||
| 60 | 60 | ||
| 61 | static void mtx1_power_off(void) | 61 | static void mtx1_power_off(void) |
| 62 | { | 62 | { |
| 63 | printk(KERN_ALERT "It's now safe to remove power\n"); | ||
| 64 | while (1) | 63 | while (1) |
| 65 | asm volatile (".set mips3 ; wait ; .set mips1"); | 64 | asm volatile ( |
| 65 | " .set mips32 \n" | ||
| 66 | " wait \n" | ||
| 67 | " .set mips0 \n"); | ||
| 66 | } | 68 | } |
| 67 | 69 | ||
| 68 | void __init board_setup(void) | 70 | void __init board_setup(void) |
| @@ -105,14 +107,10 @@ void __init board_setup(void) | |||
| 105 | int | 107 | int |
| 106 | mtx1_pci_idsel(unsigned int devsel, int assert) | 108 | mtx1_pci_idsel(unsigned int devsel, int assert) |
| 107 | { | 109 | { |
| 108 | #define MTX_IDSEL_ONLY_0_AND_3 0 | 110 | /* This function is only necessary to support a proprietary Cardbus |
| 109 | #if MTX_IDSEL_ONLY_0_AND_3 | 111 | * adapter on the mtx-1 "singleboard" variant. It triggers a custom |
| 110 | if (devsel != 0 && devsel != 3) { | 112 | * logic chip connected to EXT_IO3 (GPIO1) to suppress IDSEL signals. |
| 111 | printk(KERN_ERR "*** not 0 or 3\n"); | 113 | */ |
| 112 | return 0; | ||
| 113 | } | ||
| 114 | #endif | ||
| 115 | |||
| 116 | if (assert && devsel != 0) | 114 | if (assert && devsel != 0) |
| 117 | /* Suppress signal to Cardbus */ | 115 | /* Suppress signal to Cardbus */ |
| 118 | alchemy_gpio_set_value(1, 0); /* set EXT_IO3 OFF */ | 116 | alchemy_gpio_set_value(1, 0); /* set EXT_IO3 OFF */ |
diff --git a/arch/mips/alchemy/xxs1500/Makefile b/arch/mips/alchemy/xxs1500/Makefile index 4dc81d794cb8..91defcf4f335 100644 --- a/arch/mips/alchemy/xxs1500/Makefile +++ b/arch/mips/alchemy/xxs1500/Makefile | |||
| @@ -5,6 +5,4 @@ | |||
| 5 | # Makefile for MyCable XXS1500 board. | 5 | # Makefile for MyCable XXS1500 board. |
| 6 | # | 6 | # |
| 7 | 7 | ||
| 8 | lib-y := init.o board_setup.o platform.o | 8 | obj-y += init.o board_setup.o platform.o |
| 9 | |||
| 10 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c index 47b42927607b..b43c918925d3 100644 --- a/arch/mips/alchemy/xxs1500/board_setup.c +++ b/arch/mips/alchemy/xxs1500/board_setup.c | |||
| @@ -42,9 +42,11 @@ static void xxs1500_reset(char *c) | |||
| 42 | 42 | ||
| 43 | static void xxs1500_power_off(void) | 43 | static void xxs1500_power_off(void) |
| 44 | { | 44 | { |
| 45 | printk(KERN_ALERT "It's now safe to remove power\n"); | ||
| 46 | while (1) | 45 | while (1) |
| 47 | asm volatile (".set mips3 ; wait ; .set mips1"); | 46 | asm volatile ( |
| 47 | " .set mips32 \n" | ||
| 48 | " wait \n" | ||
| 49 | " .set mips0 \n"); | ||
| 48 | } | 50 | } |
| 49 | 51 | ||
| 50 | void __init board_setup(void) | 52 | void __init board_setup(void) |
diff --git a/arch/mips/ar7/Makefile b/arch/mips/ar7/Makefile index 26bc5da18997..7435e44b3964 100644 --- a/arch/mips/ar7/Makefile +++ b/arch/mips/ar7/Makefile | |||
| @@ -8,4 +8,3 @@ obj-y := \ | |||
| 8 | platform.o \ | 8 | platform.o \ |
| 9 | gpio.o \ | 9 | gpio.o \ |
| 10 | clock.o | 10 | clock.o |
| 11 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/ar7/Platform b/arch/mips/ar7/Platform new file mode 100644 index 000000000000..0bf85c416c6c --- /dev/null +++ b/arch/mips/ar7/Platform | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # Texas Instruments AR7 | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_AR7) += ar7/ | ||
| 5 | cflags-$(CONFIG_AR7) += -I$(srctree)/arch/mips/include/asm/mach-ar7 | ||
| 6 | load-$(CONFIG_AR7) += 0xffffffff94100000 | ||
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c index 8f31d1d59683..0da5b2b8dd88 100644 --- a/arch/mips/ar7/platform.c +++ b/arch/mips/ar7/platform.c | |||
| @@ -292,40 +292,28 @@ static struct platform_device cpmac_high = { | |||
| 292 | .num_resources = ARRAY_SIZE(cpmac_high_res), | 292 | .num_resources = ARRAY_SIZE(cpmac_high_res), |
| 293 | }; | 293 | }; |
| 294 | 294 | ||
| 295 | static inline unsigned char char2hex(char h) | 295 | static void __init cpmac_get_mac(int instance, unsigned char *dev_addr) |
| 296 | { | 296 | { |
| 297 | switch (h) { | 297 | char name[5], *mac; |
| 298 | case '0': case '1': case '2': case '3': case '4': | ||
| 299 | case '5': case '6': case '7': case '8': case '9': | ||
| 300 | return h - '0'; | ||
| 301 | case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': | ||
| 302 | return h - 'A' + 10; | ||
| 303 | case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': | ||
| 304 | return h - 'a' + 10; | ||
| 305 | default: | ||
| 306 | return 0; | ||
| 307 | } | ||
| 308 | } | ||
| 309 | |||
| 310 | static void cpmac_get_mac(int instance, unsigned char *dev_addr) | ||
| 311 | { | ||
| 312 | int i; | ||
| 313 | char name[5], default_mac[ETH_ALEN], *mac; | ||
| 314 | 298 | ||
| 315 | mac = NULL; | ||
| 316 | sprintf(name, "mac%c", 'a' + instance); | 299 | sprintf(name, "mac%c", 'a' + instance); |
| 317 | mac = prom_getenv(name); | 300 | mac = prom_getenv(name); |
| 318 | if (!mac) { | 301 | if (!mac && instance) { |
| 319 | sprintf(name, "mac%c", 'a'); | 302 | sprintf(name, "mac%c", 'a'); |
| 320 | mac = prom_getenv(name); | 303 | mac = prom_getenv(name); |
| 321 | } | 304 | } |
| 322 | if (!mac) { | 305 | |
| 323 | random_ether_addr(default_mac); | 306 | if (mac) { |
| 324 | mac = default_mac; | 307 | if (sscanf(mac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", |
| 325 | } | 308 | &dev_addr[0], &dev_addr[1], |
| 326 | for (i = 0; i < 6; i++) | 309 | &dev_addr[2], &dev_addr[3], |
| 327 | dev_addr[i] = (char2hex(mac[i * 3]) << 4) + | 310 | &dev_addr[4], &dev_addr[5]) != 6) { |
| 328 | char2hex(mac[i * 3 + 1]); | 311 | pr_warning("cannot parse mac address, " |
| 312 | "using random address\n"); | ||
| 313 | random_ether_addr(dev_addr); | ||
| 314 | } | ||
| 315 | } else | ||
| 316 | random_ether_addr(dev_addr); | ||
| 329 | } | 317 | } |
| 330 | 318 | ||
| 331 | /***************************************************************************** | 319 | /***************************************************************************** |
diff --git a/arch/mips/bcm47xx/Platform b/arch/mips/bcm47xx/Platform new file mode 100644 index 000000000000..874b7ca4cd11 --- /dev/null +++ b/arch/mips/bcm47xx/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Broadcom BCM47XX boards | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_BCM47XX) += bcm47xx/ | ||
| 5 | cflags-$(CONFIG_BCM47XX) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-bcm47xx | ||
| 7 | load-$(CONFIG_BCM47XX) := 0xffffffff80001000 | ||
diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c index 06e03b222f6d..e5b6615731e5 100644 --- a/arch/mips/bcm47xx/nvram.c +++ b/arch/mips/bcm47xx/nvram.c | |||
| @@ -69,7 +69,7 @@ int nvram_getenv(char *name, char *val, size_t val_len) | |||
| 69 | char *var, *value, *end, *eq; | 69 | char *var, *value, *end, *eq; |
| 70 | 70 | ||
| 71 | if (!name) | 71 | if (!name) |
| 72 | return 1; | 72 | return NVRAM_ERR_INV_PARAM; |
| 73 | 73 | ||
| 74 | if (!nvram_buf[0]) | 74 | if (!nvram_buf[0]) |
| 75 | early_nvram_init(); | 75 | early_nvram_init(); |
| @@ -89,6 +89,6 @@ int nvram_getenv(char *name, char *val, size_t val_len) | |||
| 89 | return 0; | 89 | return 0; |
| 90 | } | 90 | } |
| 91 | } | 91 | } |
| 92 | return 1; | 92 | return NVRAM_ERR_ENVNOTFOUND; |
| 93 | } | 93 | } |
| 94 | EXPORT_SYMBOL(nvram_getenv); | 94 | EXPORT_SYMBOL(nvram_getenv); |
diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c index 0fa646c5a844..f6e9063cc4c2 100644 --- a/arch/mips/bcm47xx/prom.c +++ b/arch/mips/bcm47xx/prom.c | |||
| @@ -126,6 +126,7 @@ static __init void prom_init_cmdline(void) | |||
| 126 | static __init void prom_init_mem(void) | 126 | static __init void prom_init_mem(void) |
| 127 | { | 127 | { |
| 128 | unsigned long mem; | 128 | unsigned long mem; |
| 129 | unsigned long max; | ||
| 129 | 130 | ||
| 130 | /* Figure out memory size by finding aliases. | 131 | /* Figure out memory size by finding aliases. |
| 131 | * | 132 | * |
| @@ -134,21 +135,26 @@ static __init void prom_init_mem(void) | |||
| 134 | * want to reuse the memory used by CFE (around 4MB). That means cfe_* | 135 | * want to reuse the memory used by CFE (around 4MB). That means cfe_* |
| 135 | * functions stop to work at some point during the boot, we should only | 136 | * functions stop to work at some point during the boot, we should only |
| 136 | * call them at the beginning of the boot. | 137 | * call them at the beginning of the boot. |
| 138 | * | ||
| 139 | * BCM47XX uses 128MB for addressing the ram, if the system contains | ||
| 140 | * less that that amount of ram it remaps the ram more often into the | ||
| 141 | * available space. | ||
| 142 | * Accessing memory after 128MB will cause an exception. | ||
| 143 | * max contains the biggest possible address supported by the platform. | ||
| 144 | * If the method wants to try something above we assume 128MB ram. | ||
| 137 | */ | 145 | */ |
| 146 | max = ((unsigned long)(prom_init) | ((128 << 20) - 1)); | ||
| 138 | for (mem = (1 << 20); mem < (128 << 20); mem += (1 << 20)) { | 147 | for (mem = (1 << 20); mem < (128 << 20); mem += (1 << 20)) { |
| 148 | if (((unsigned long)(prom_init) + mem) > max) { | ||
| 149 | mem = (128 << 20); | ||
| 150 | printk(KERN_DEBUG "assume 128MB RAM\n"); | ||
| 151 | break; | ||
| 152 | } | ||
| 139 | if (*(unsigned long *)((unsigned long)(prom_init) + mem) == | 153 | if (*(unsigned long *)((unsigned long)(prom_init) + mem) == |
| 140 | *(unsigned long *)(prom_init)) | 154 | *(unsigned long *)(prom_init)) |
| 141 | break; | 155 | break; |
| 142 | } | 156 | } |
| 143 | 157 | ||
| 144 | /* Ignoring the last page when ddr size is 128M. Cached | ||
| 145 | * accesses to last page is causing the processor to prefetch | ||
| 146 | * using address above 128M stepping out of the ddr address | ||
| 147 | * space. | ||
| 148 | */ | ||
| 149 | if (mem == 0x8000000) | ||
| 150 | mem -= 0x1000; | ||
| 151 | |||
| 152 | add_memory_region(0, mem, BOOT_MEM_RAM); | 158 | add_memory_region(0, mem, BOOT_MEM_RAM); |
| 153 | } | 159 | } |
| 154 | 160 | ||
diff --git a/arch/mips/bcm63xx/Makefile b/arch/mips/bcm63xx/Makefile index 00064b660809..6dfdc69928ac 100644 --- a/arch/mips/bcm63xx/Makefile +++ b/arch/mips/bcm63xx/Makefile | |||
| @@ -3,5 +3,3 @@ obj-y += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \ | |||
| 3 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 3 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
| 4 | 4 | ||
| 5 | obj-y += boards/ | 5 | obj-y += boards/ |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/bcm63xx/Platform b/arch/mips/bcm63xx/Platform new file mode 100644 index 000000000000..5f86b2fff6de --- /dev/null +++ b/arch/mips/bcm63xx/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Broadcom BCM63XX boards | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_BCM63XX) += bcm63xx/ | ||
| 5 | cflags-$(CONFIG_BCM63XX) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-bcm63xx/ | ||
| 7 | load-$(CONFIG_BCM63XX) := 0xffffffff80010000 | ||
diff --git a/arch/mips/boot/.gitignore b/arch/mips/boot/.gitignore index 4667a5f9280b..f210b09ececc 100644 --- a/arch/mips/boot/.gitignore +++ b/arch/mips/boot/.gitignore | |||
| @@ -3,3 +3,4 @@ elf2ecoff | |||
| 3 | vmlinux.* | 3 | vmlinux.* |
| 4 | zImage | 4 | zImage |
| 5 | zImage.tmp | 5 | zImage.tmp |
| 6 | calc_vmlinuz_load_addr | ||
diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile index e39a08edcaaa..85bcb5adc7cb 100644 --- a/arch/mips/boot/Makefile +++ b/arch/mips/boot/Makefile | |||
| @@ -11,35 +11,32 @@ | |||
| 11 | # Some DECstations need all possible sections of an ECOFF executable | 11 | # Some DECstations need all possible sections of an ECOFF executable |
| 12 | # | 12 | # |
| 13 | ifdef CONFIG_MACH_DECSTATION | 13 | ifdef CONFIG_MACH_DECSTATION |
| 14 | E2EFLAGS = -a | 14 | e2eflag := -a |
| 15 | else | ||
| 16 | E2EFLAGS = | ||
| 17 | endif | 15 | endif |
| 18 | 16 | ||
| 19 | # | 17 | # |
| 20 | # Drop some uninteresting sections in the kernel. | 18 | # Drop some uninteresting sections in the kernel. |
| 21 | # This is only relevant for ELF kernels but doesn't hurt a.out | 19 | # This is only relevant for ELF kernels but doesn't hurt a.out |
| 22 | # | 20 | # |
| 23 | drop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options | 21 | drop-sections := .reginfo .mdebug .comment .note .pdr .options .MIPS.options |
| 24 | strip-flags = $(addprefix --remove-section=,$(drop-sections)) | 22 | strip-flags := $(addprefix --remove-section=,$(drop-sections)) |
| 25 | 23 | ||
| 26 | VMLINUX = vmlinux | 24 | hostprogs-y := elf2ecoff |
| 27 | 25 | ||
| 28 | all: vmlinux.ecoff vmlinux.srec | 26 | targets := vmlinux.ecoff |
| 29 | 27 | quiet_cmd_ecoff = ECOFF $@ | |
| 30 | vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) | 28 | cmd_ecoff = $(obj)/elf2ecoff $(VMLINUX) $@ $(e2eflag) |
| 31 | $(obj)/elf2ecoff $(VMLINUX) $(obj)/vmlinux.ecoff $(E2EFLAGS) | 29 | $(obj)/vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) FORCE |
| 32 | 30 | $(call if_changed,ecoff) | |
| 33 | $(obj)/elf2ecoff: $(obj)/elf2ecoff.c | 31 | |
| 34 | $(HOSTCC) -o $@ $^ | 32 | targets += vmlinux.bin |
| 35 | 33 | quiet_cmd_bin = OBJCOPY $@ | |
| 36 | vmlinux.bin: $(VMLINUX) | 34 | cmd_bin = $(OBJCOPY) -O binary $(strip-flags) $(VMLINUX) $@ |
| 37 | $(OBJCOPY) -O binary $(strip-flags) $(VMLINUX) $(obj)/vmlinux.bin | 35 | $(obj)/vmlinux.bin: $(VMLINUX) FORCE |
| 38 | 36 | $(call if_changed,bin) | |
| 39 | vmlinux.srec: $(VMLINUX) | 37 | |
| 40 | $(OBJCOPY) -S -O srec $(strip-flags) $(VMLINUX) $(obj)/vmlinux.srec | 38 | targets += vmlinux.srec |
| 41 | 39 | quiet_cmd_srec = OBJCOPY $@ | |
| 42 | clean-files += elf2ecoff \ | 40 | cmd_srec = $(OBJCOPY) -S -O srec $(strip-flags) $(VMLINUX) $@ |
| 43 | vmlinux.bin \ | 41 | $(obj)/vmlinux.srec: $(VMLINUX) FORCE |
| 44 | vmlinux.ecoff \ | 42 | $(call if_changed,srec) |
| 45 | vmlinux.srec | ||
diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile index 790ddd397620..ed9bb709c9a3 100644 --- a/arch/mips/boot/compressed/Makefile +++ b/arch/mips/boot/compressed/Makefile | |||
| @@ -12,14 +12,6 @@ | |||
| 12 | # Author: Wu Zhangjin <wuzhangjin@gmail.com> | 12 | # Author: Wu Zhangjin <wuzhangjin@gmail.com> |
| 13 | # | 13 | # |
| 14 | 14 | ||
| 15 | # compressed kernel load addr: VMLINUZ_LOAD_ADDRESS > VMLINUX_LOAD_ADDRESS + VMLINUX_SIZE | ||
| 16 | VMLINUX_SIZE := $(shell wc -c $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | cut -d' ' -f1) | ||
| 17 | VMLINUX_SIZE := $(shell [ -n "$(VMLINUX_SIZE)" ] && echo -n $$(($(VMLINUX_SIZE) + (65536 - $(VMLINUX_SIZE) % 65536)))) | ||
| 18 | # VMLINUZ_LOAD_ADDRESS = concat "high32 of VMLINUX_LOAD_ADDRESS" and "(low32 of VMLINUX_LOAD_ADDRESS) + VMLINUX_SIZE" | ||
| 19 | HIGH32 := $(shell A=$(VMLINUX_LOAD_ADDRESS); [ $${\#A} -gt 10 ] && expr substr "$(VMLINUX_LOAD_ADDRESS)" 3 $$(($${\#A} - 10))) | ||
| 20 | LOW32 := $(shell [ -n "$(HIGH32)" ] && A=11 || A=3; expr substr "$(VMLINUX_LOAD_ADDRESS)" $${A} 8) | ||
| 21 | VMLINUZ_LOAD_ADDRESS := 0x$(shell [ -n "$(VMLINUX_SIZE)" -a -n "$(LOW32)" ] && printf "$(HIGH32)%08x" $$(($(VMLINUX_SIZE) + 0x$(LOW32)))) | ||
| 22 | |||
| 23 | # set the default size of the mallocing area for decompressing | 15 | # set the default size of the mallocing area for decompressing |
| 24 | BOOT_HEAP_SIZE := 0x400000 | 16 | BOOT_HEAP_SIZE := 0x400000 |
| 25 | 17 | ||
| @@ -33,49 +25,61 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ | |||
| 33 | -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ | 25 | -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ |
| 34 | -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) | 26 | -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) |
| 35 | 27 | ||
| 36 | obj-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o | 28 | targets := head.o decompress.o dbg.o uart-16550.o uart-alchemy.o |
| 29 | |||
| 30 | # decompressor objects (linked with vmlinuz) | ||
| 31 | vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o | ||
| 37 | 32 | ||
| 38 | ifdef CONFIG_DEBUG_ZBOOT | 33 | ifdef CONFIG_DEBUG_ZBOOT |
| 39 | obj-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o | 34 | vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o |
| 40 | obj-$(CONFIG_MACH_ALCHEMY) += $(obj)/uart-alchemy.o | 35 | vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o |
| 41 | endif | 36 | endif |
| 42 | 37 | ||
| 38 | targets += vmlinux.bin | ||
| 43 | OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S | 39 | OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S |
| 44 | $(obj)/vmlinux.bin: $(KBUILD_IMAGE) | 40 | $(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE |
| 45 | $(call if_changed,objcopy) | 41 | $(call if_changed,objcopy) |
| 46 | 42 | ||
| 47 | suffix_$(CONFIG_KERNEL_GZIP) = gz | ||
| 48 | suffix_$(CONFIG_KERNEL_BZIP2) = bz2 | ||
| 49 | suffix_$(CONFIG_KERNEL_LZMA) = lzma | ||
| 50 | suffix_$(CONFIG_KERNEL_LZO) = lzo | ||
| 51 | tool_$(CONFIG_KERNEL_GZIP) = gzip | 43 | tool_$(CONFIG_KERNEL_GZIP) = gzip |
| 52 | tool_$(CONFIG_KERNEL_BZIP2) = bzip2 | 44 | tool_$(CONFIG_KERNEL_BZIP2) = bzip2 |
| 53 | tool_$(CONFIG_KERNEL_LZMA) = lzma | 45 | tool_$(CONFIG_KERNEL_LZMA) = lzma |
| 54 | tool_$(CONFIG_KERNEL_LZO) = lzo | 46 | tool_$(CONFIG_KERNEL_LZO) = lzo |
| 55 | $(obj)/vmlinux.$(suffix_y): $(obj)/vmlinux.bin | 47 | |
| 48 | targets += vmlinux.bin.z | ||
| 49 | $(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE | ||
| 56 | $(call if_changed,$(tool_y)) | 50 | $(call if_changed,$(tool_y)) |
| 57 | 51 | ||
| 58 | $(obj)/piggy.o: $(obj)/vmlinux.$(suffix_y) $(obj)/dummy.o | 52 | targets += piggy.o |
| 59 | $(Q)$(OBJCOPY) $(OBJCOPYFLAGS) \ | 53 | OBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \ |
| 60 | --add-section=.image=$< \ | 54 | --set-section-flags=.image=contents,alloc,load,readonly,data |
| 61 | --set-section-flags=.image=contents,alloc,load,readonly,data \ | 55 | $(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE |
| 62 | $(obj)/dummy.o $@ | 56 | $(call if_changed,objcopy) |
| 57 | |||
| 58 | # Calculate the load address of the compressed kernel image | ||
| 59 | hostprogs-y := calc_vmlinuz_load_addr | ||
| 60 | |||
| 61 | VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ | ||
| 62 | $(objtree)/$(KBUILD_IMAGE) $(VMLINUX_LOAD_ADDRESS)) | ||
| 63 | 63 | ||
| 64 | LDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T | 64 | vmlinuzobjs-y += $(obj)/piggy.o |
| 65 | vmlinuz: $(src)/ld.script $(obj-y) $(obj)/piggy.o | 65 | |
| 66 | $(call if_changed,ld) | 66 | quiet_cmd_zld = LD $@ |
| 67 | $(Q)$(OBJCOPY) $(OBJCOPYFLAGS) $@ | 67 | cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ |
| 68 | quiet_cmd_strip = STRIP $@ | ||
| 69 | cmd_strip = $(STRIP) -s $@ | ||
| 70 | vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr | ||
| 71 | $(call cmd,zld) | ||
| 72 | $(call cmd,strip) | ||
| 68 | 73 | ||
| 69 | # | 74 | # |
| 70 | # Some DECstations need all possible sections of an ECOFF executable | 75 | # Some DECstations need all possible sections of an ECOFF executable |
| 71 | # | 76 | # |
| 72 | ifdef CONFIG_MACH_DECSTATION | 77 | ifdef CONFIG_MACH_DECSTATION |
| 73 | E2EFLAGS = -a | 78 | e2eflag := -a |
| 74 | else | ||
| 75 | E2EFLAGS = | ||
| 76 | endif | 79 | endif |
| 77 | 80 | ||
| 78 | # elf2ecoff can only handle 32bit image | 81 | # elf2ecoff can only handle 32bit image |
| 82 | hostprogs-y += ../elf2ecoff | ||
| 79 | 83 | ||
| 80 | ifdef CONFIG_32BIT | 84 | ifdef CONFIG_32BIT |
| 81 | VMLINUZ = vmlinuz | 85 | VMLINUZ = vmlinuz |
| @@ -83,23 +87,22 @@ else | |||
| 83 | VMLINUZ = vmlinuz.32 | 87 | VMLINUZ = vmlinuz.32 |
| 84 | endif | 88 | endif |
| 85 | 89 | ||
| 90 | quiet_cmd_32 = OBJCOPY $@ | ||
| 91 | cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ | ||
| 86 | vmlinuz.32: vmlinuz | 92 | vmlinuz.32: vmlinuz |
| 87 | $(Q)$(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ | 93 | $(call cmd,32) |
| 88 | 94 | ||
| 95 | quiet_cmd_ecoff = ECOFF $@ | ||
| 96 | cmd_ecoff = $< $(VMLINUZ) $@ $(e2eflag) | ||
| 89 | vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) | 97 | vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) |
| 90 | $(Q)$(obj)/../elf2ecoff $(VMLINUZ) vmlinuz.ecoff $(E2EFLAGS) | 98 | $(call cmd,ecoff) |
| 91 | |||
| 92 | $(obj)/../elf2ecoff: $(src)/../elf2ecoff.c | ||
| 93 | $(Q)$(HOSTCC) -o $@ $^ | ||
| 94 | 99 | ||
| 95 | OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary | 100 | OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary |
| 96 | vmlinuz.bin: vmlinuz | 101 | vmlinuz.bin: vmlinuz |
| 97 | $(call if_changed,objcopy) | 102 | $(call cmd,objcopy) |
| 98 | 103 | ||
| 99 | OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec | 104 | OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec |
| 100 | vmlinuz.srec: vmlinuz | 105 | vmlinuz.srec: vmlinuz |
| 101 | $(call if_changed,objcopy) | 106 | $(call cmd,objcopy) |
| 102 | 107 | ||
| 103 | clean: | 108 | clean-files := $(objtree)/vmlinuz.* |
| 104 | clean-files += *.o \ | ||
| 105 | vmlinu* | ||
diff --git a/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c new file mode 100644 index 000000000000..88c9d963be88 --- /dev/null +++ b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 "Wu Zhangjin" <wuzhangjin@gmail.com> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <sys/types.h> | ||
| 11 | #include <sys/stat.h> | ||
| 12 | #include <errno.h> | ||
| 13 | #include <stdint.h> | ||
| 14 | #include <stdio.h> | ||
| 15 | #include <stdlib.h> | ||
| 16 | |||
| 17 | int main(int argc, char *argv[]) | ||
| 18 | { | ||
| 19 | struct stat sb; | ||
| 20 | uint64_t vmlinux_size, vmlinux_load_addr, vmlinuz_load_addr; | ||
| 21 | |||
| 22 | if (argc != 3) { | ||
| 23 | fprintf(stderr, "Usage: %s <pathname> <vmlinux_load_addr>\n", | ||
| 24 | argv[0]); | ||
| 25 | return EXIT_FAILURE; | ||
| 26 | } | ||
| 27 | |||
| 28 | if (stat(argv[1], &sb) == -1) { | ||
| 29 | perror("stat"); | ||
| 30 | return EXIT_FAILURE; | ||
| 31 | } | ||
| 32 | |||
| 33 | /* Convert hex characters to dec number */ | ||
| 34 | errno = 0; | ||
| 35 | if (sscanf(argv[2], "%llx", &vmlinux_load_addr) != 1) { | ||
| 36 | if (errno != 0) | ||
| 37 | perror("sscanf"); | ||
| 38 | else | ||
| 39 | fprintf(stderr, "No matching characters\n"); | ||
| 40 | |||
| 41 | return EXIT_FAILURE; | ||
| 42 | } | ||
| 43 | |||
| 44 | vmlinux_size = (uint64_t)sb.st_size; | ||
| 45 | vmlinuz_load_addr = vmlinux_load_addr + vmlinux_size; | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Align with 16 bytes: "greater than that used for any standard data | ||
| 49 | * types by a MIPS compiler." -- See MIPS Run Linux (Second Edition). | ||
| 50 | */ | ||
| 51 | |||
| 52 | vmlinuz_load_addr += (16 - vmlinux_size % 16); | ||
| 53 | |||
| 54 | printf("0x%llx\n", vmlinuz_load_addr); | ||
| 55 | |||
| 56 | return EXIT_SUCCESS; | ||
| 57 | } | ||
diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c index 5db43c58b1bf..5cad0faefa17 100644 --- a/arch/mips/boot/compressed/decompress.c +++ b/arch/mips/boot/compressed/decompress.c | |||
| @@ -1,9 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Misc. bootloader code for many machines. | ||
| 3 | * | ||
| 4 | * Copyright 2001 MontaVista Software Inc. | 2 | * Copyright 2001 MontaVista Software Inc. |
| 5 | * Author: Matt Porter <mporter@mvista.com> Derived from | 3 | * Author: Matt Porter <mporter@mvista.com> |
| 6 | * arch/ppc/boot/prep/misc.c | ||
| 7 | * | 4 | * |
| 8 | * Copyright (C) 2009 Lemote, Inc. | 5 | * Copyright (C) 2009 Lemote, Inc. |
| 9 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> | 6 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> |
| @@ -19,12 +16,12 @@ | |||
| 19 | 16 | ||
| 20 | #include <asm/addrspace.h> | 17 | #include <asm/addrspace.h> |
| 21 | 18 | ||
| 22 | /* These two variables specify the free mem region | 19 | /* |
| 20 | * These two variables specify the free mem region | ||
| 23 | * that can be used for temporary malloc area | 21 | * that can be used for temporary malloc area |
| 24 | */ | 22 | */ |
| 25 | unsigned long free_mem_ptr; | 23 | unsigned long free_mem_ptr; |
| 26 | unsigned long free_mem_end_ptr; | 24 | unsigned long free_mem_end_ptr; |
| 27 | char *zimage_start; | ||
| 28 | 25 | ||
| 29 | /* The linker tells us where the image is. */ | 26 | /* The linker tells us where the image is. */ |
| 30 | extern unsigned char __image_begin, __image_end; | 27 | extern unsigned char __image_begin, __image_end; |
| @@ -83,38 +80,31 @@ void *memset(void *s, int c, size_t n) | |||
| 83 | 80 | ||
| 84 | void decompress_kernel(unsigned long boot_heap_start) | 81 | void decompress_kernel(unsigned long boot_heap_start) |
| 85 | { | 82 | { |
| 86 | int zimage_size; | 83 | unsigned long zimage_start, zimage_size; |
| 87 | 84 | ||
| 88 | /* | 85 | zimage_start = (unsigned long)(&__image_begin); |
| 89 | * We link ourself to an arbitrary low address. When we run, we | ||
| 90 | * relocate outself to that address. __image_beign points to | ||
| 91 | * the part of the image where the zImage is. -- Tom | ||
| 92 | */ | ||
| 93 | zimage_start = (char *)(unsigned long)(&__image_begin); | ||
| 94 | zimage_size = (unsigned long)(&__image_end) - | 86 | zimage_size = (unsigned long)(&__image_end) - |
| 95 | (unsigned long)(&__image_begin); | 87 | (unsigned long)(&__image_begin); |
| 96 | 88 | ||
| 97 | /* | ||
| 98 | * The zImage and initrd will be between start and _end, so they've | ||
| 99 | * already been moved once. We're good to go now. -- Tom | ||
| 100 | */ | ||
| 101 | puts("zimage at: "); | 89 | puts("zimage at: "); |
| 102 | puthex((unsigned long)zimage_start); | 90 | puthex(zimage_start); |
| 103 | puts(" "); | 91 | puts(" "); |
| 104 | puthex((unsigned long)(zimage_size + zimage_start)); | 92 | puthex(zimage_size + zimage_start); |
| 105 | puts("\n"); | 93 | puts("\n"); |
| 106 | 94 | ||
| 107 | /* this area are prepared for mallocing when decompressing */ | 95 | /* This area are prepared for mallocing when decompressing */ |
| 108 | free_mem_ptr = boot_heap_start; | 96 | free_mem_ptr = boot_heap_start; |
| 109 | free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE; | 97 | free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE; |
| 110 | 98 | ||
| 111 | /* Display standard Linux/MIPS boot prompt for kernel args */ | 99 | /* Display standard Linux/MIPS boot prompt */ |
| 112 | puts("Uncompressing Linux at load address "); | 100 | puts("Uncompressing Linux at load address "); |
| 113 | puthex(VMLINUX_LOAD_ADDRESS_ULL); | 101 | puthex(VMLINUX_LOAD_ADDRESS_ULL); |
| 114 | puts("\n"); | 102 | puts("\n"); |
| 103 | |||
| 115 | /* Decompress the kernel with according algorithm */ | 104 | /* Decompress the kernel with according algorithm */ |
| 116 | decompress(zimage_start, zimage_size, 0, 0, | 105 | decompress((char *)zimage_start, zimage_size, 0, 0, |
| 117 | (void *)VMLINUX_LOAD_ADDRESS_ULL, 0, error); | 106 | (void *)VMLINUX_LOAD_ADDRESS_ULL, 0, error); |
| 118 | /* FIXME: is there a need to flush cache here? */ | 107 | |
| 108 | /* FIXME: should we flush cache here? */ | ||
| 119 | puts("Now, booting the kernel...\n"); | 109 | puts("Now, booting the kernel...\n"); |
| 120 | } | 110 | } |
diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script index 613a35b02f50..8e6b07ca2f5e 100644 --- a/arch/mips/boot/compressed/ld.script +++ b/arch/mips/boot/compressed/ld.script | |||
| @@ -2,61 +2,44 @@ | |||
| 2 | * ld.script for compressed kernel support of MIPS | 2 | * ld.script for compressed kernel support of MIPS |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2009 Lemote Inc. | 4 | * Copyright (C) 2009 Lemote Inc. |
| 5 | * Author: Wu Zhangjin <wuzj@lemote.com> | 5 | * Author: Wu Zhangjin <wuzhanjing@gmail.com> |
| 6 | * Copyright (C) 2010 "Wu Zhangjin" <wuzhanjing@gmail.com> | ||
| 6 | */ | 7 | */ |
| 7 | 8 | ||
| 8 | OUTPUT_ARCH(mips) | 9 | OUTPUT_ARCH(mips) |
| 9 | ENTRY(start) | 10 | ENTRY(start) |
| 10 | SECTIONS | 11 | SECTIONS |
| 11 | { | 12 | { |
| 12 | /* . = VMLINUZ_LOAD_ADDRESS */ | 13 | /* Text and read-only data */ |
| 13 | /* read-only */ | 14 | /* . = VMLINUZ_LOAD_ADDRESS; */ |
| 14 | _text = .; /* Text and read-only data */ | 15 | .text : { |
| 15 | .text : { | ||
| 16 | _ftext = . ; | ||
| 17 | *(.text) | 16 | *(.text) |
| 18 | *(.rodata) | 17 | *(.rodata) |
| 19 | } = 0 | 18 | } |
| 20 | _etext = .; /* End of text section */ | 19 | /* End of text section */ |
| 21 | 20 | ||
| 22 | /* writable */ | 21 | /* Writable data */ |
| 23 | .data : { /* Data */ | 22 | .data : { |
| 24 | _fdata = . ; | ||
| 25 | *(.data) | 23 | *(.data) |
| 26 | /* Put the compressed image here, so bss is on the end. */ | 24 | /* Put the compressed image here */ |
| 27 | __image_begin = .; | 25 | __image_begin = .; |
| 28 | *(.image) | 26 | *(.image) |
| 29 | __image_end = .; | 27 | __image_end = .; |
| 30 | CONSTRUCTORS | 28 | CONSTRUCTORS |
| 31 | } | 29 | } |
| 32 | .sdata : { *(.sdata) } | 30 | . = ALIGN(16); |
| 33 | . = ALIGN(4); | 31 | _edata = .; |
| 34 | _edata = .; /* End of data section */ | 32 | /* End of data section */ |
| 35 | 33 | ||
| 36 | /* BSS */ | 34 | /* BSS */ |
| 37 | __bss_start = .; | 35 | .bss : { |
| 38 | _fbss = .; | ||
| 39 | .sbss : { *(.sbss) *(.scommon) } | ||
| 40 | .bss : { | ||
| 41 | *(.dynbss) | ||
| 42 | *(.bss) | 36 | *(.bss) |
| 43 | *(COMMON) | ||
| 44 | } | 37 | } |
| 45 | . = ALIGN(4); | 38 | . = ALIGN(16); |
| 46 | _end = . ; | 39 | _end = .; |
| 47 | |||
| 48 | /* These are needed for ELF backends which have not yet been converted | ||
| 49 | * to the new style linker. */ | ||
| 50 | |||
| 51 | .stab 0 : { *(.stab) } | ||
| 52 | .stabstr 0 : { *(.stabstr) } | ||
| 53 | |||
| 54 | /* These must appear regardless of . */ | ||
| 55 | .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } | ||
| 56 | .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } | ||
| 57 | 40 | ||
| 58 | /* Sections to be discarded */ | 41 | /* Sections to be discarded */ |
| 59 | /DISCARD/ : { | 42 | /DISCARD/ : { |
| 60 | *(.MIPS.options) | 43 | *(.MIPS.options) |
| 61 | *(.options) | 44 | *(.options) |
| 62 | *(.pdr) | 45 | *(.pdr) |
diff --git a/arch/mips/cavium-octeon/Makefile b/arch/mips/cavium-octeon/Makefile index 3e9876317e61..19eb0434269f 100644 --- a/arch/mips/cavium-octeon/Makefile +++ b/arch/mips/cavium-octeon/Makefile | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | obj-y := cpu.o setup.o serial.o octeon-platform.o octeon-irq.o csrc-octeon.o | 12 | obj-y := cpu.o setup.o serial.o octeon-platform.o octeon-irq.o csrc-octeon.o |
| 13 | obj-y += dma-octeon.o flash_setup.o | 13 | obj-y += dma-octeon.o flash_setup.o |
| 14 | obj-y += octeon-memcpy.o | 14 | obj-y += octeon-memcpy.o |
| 15 | obj-y += executive/ | ||
| 15 | 16 | ||
| 16 | obj-$(CONFIG_SMP) += smp.o | 17 | obj-$(CONFIG_SMP) += smp.o |
| 17 | |||
| 18 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/cavium-octeon/Platform b/arch/mips/cavium-octeon/Platform new file mode 100644 index 000000000000..1e43ccf1a792 --- /dev/null +++ b/arch/mips/cavium-octeon/Platform | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | # | ||
| 2 | # Cavium Octeon | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_CPU_CAVIUM_OCTEON) += cavium-octeon/ | ||
| 5 | cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-cavium-octeon | ||
| 7 | ifdef CONFIG_CAVIUM_OCTEON_2ND_KERNEL | ||
| 8 | load-$(CONFIG_CPU_CAVIUM_OCTEON) += 0xffffffff84100000 | ||
| 9 | else | ||
| 10 | load-$(CONFIG_CPU_CAVIUM_OCTEON) += 0xffffffff81100000 | ||
| 11 | endif | ||
diff --git a/arch/mips/cavium-octeon/cpu.c b/arch/mips/cavium-octeon/cpu.c index b6df5387e855..c664c8cc2b42 100644 --- a/arch/mips/cavium-octeon/cpu.c +++ b/arch/mips/cavium-octeon/cpu.c | |||
| @@ -41,12 +41,8 @@ static int cnmips_cu2_call(struct notifier_block *nfb, unsigned long action, | |||
| 41 | return NOTIFY_OK; /* Let default notifier send signals */ | 41 | return NOTIFY_OK; /* Let default notifier send signals */ |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | static struct notifier_block cnmips_cu2_notifier = { | ||
| 45 | .notifier_call = cnmips_cu2_call, | ||
| 46 | }; | ||
| 47 | |||
| 48 | static int cnmips_cu2_setup(void) | 44 | static int cnmips_cu2_setup(void) |
| 49 | { | 45 | { |
| 50 | return register_cu2_notifier(&cnmips_cu2_notifier); | 46 | return cu2_notifier(cnmips_cu2_call, 0); |
| 51 | } | 47 | } |
| 52 | early_initcall(cnmips_cu2_setup); | 48 | early_initcall(cnmips_cu2_setup); |
diff --git a/arch/mips/cavium-octeon/csrc-octeon.c b/arch/mips/cavium-octeon/csrc-octeon.c index 0bf4bbe04ae2..b6847c8e0ddd 100644 --- a/arch/mips/cavium-octeon/csrc-octeon.c +++ b/arch/mips/cavium-octeon/csrc-octeon.c | |||
| @@ -53,7 +53,6 @@ static struct clocksource clocksource_mips = { | |||
| 53 | unsigned long long notrace sched_clock(void) | 53 | unsigned long long notrace sched_clock(void) |
| 54 | { | 54 | { |
| 55 | /* 64-bit arithmatic can overflow, so use 128-bit. */ | 55 | /* 64-bit arithmatic can overflow, so use 128-bit. */ |
| 56 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 3)) | ||
| 57 | u64 t1, t2, t3; | 56 | u64 t1, t2, t3; |
| 58 | unsigned long long rv; | 57 | unsigned long long rv; |
| 59 | u64 mult = clocksource_mips.mult; | 58 | u64 mult = clocksource_mips.mult; |
| @@ -73,13 +72,6 @@ unsigned long long notrace sched_clock(void) | |||
| 73 | : [cnt] "r" (cnt), [mult] "r" (mult), [shift] "r" (shift) | 72 | : [cnt] "r" (cnt), [mult] "r" (mult), [shift] "r" (shift) |
| 74 | : "hi", "lo"); | 73 | : "hi", "lo"); |
| 75 | return rv; | 74 | return rv; |
| 76 | #else | ||
| 77 | /* GCC > 4.3 do it the easy way. */ | ||
| 78 | unsigned int __attribute__((mode(TI))) t; | ||
| 79 | t = read_c0_cvmcount(); | ||
| 80 | t = t * clocksource_mips.mult; | ||
| 81 | return (unsigned long long)(t >> clocksource_mips.shift); | ||
| 82 | #endif | ||
| 83 | } | 75 | } |
| 84 | 76 | ||
| 85 | void __init plat_time_init(void) | 77 | void __init plat_time_init(void) |
| @@ -88,3 +80,58 @@ void __init plat_time_init(void) | |||
| 88 | clocksource_set_clock(&clocksource_mips, mips_hpt_frequency); | 80 | clocksource_set_clock(&clocksource_mips, mips_hpt_frequency); |
| 89 | clocksource_register(&clocksource_mips); | 81 | clocksource_register(&clocksource_mips); |
| 90 | } | 82 | } |
| 83 | |||
| 84 | static u64 octeon_udelay_factor; | ||
| 85 | static u64 octeon_ndelay_factor; | ||
| 86 | |||
| 87 | void __init octeon_setup_delays(void) | ||
| 88 | { | ||
| 89 | octeon_udelay_factor = octeon_get_clock_rate() / 1000000; | ||
| 90 | /* | ||
| 91 | * For __ndelay we divide by 2^16, so the factor is multiplied | ||
| 92 | * by the same amount. | ||
| 93 | */ | ||
| 94 | octeon_ndelay_factor = (octeon_udelay_factor * 0x10000ull) / 1000ull; | ||
| 95 | |||
| 96 | preset_lpj = octeon_get_clock_rate() / HZ; | ||
| 97 | } | ||
| 98 | |||
| 99 | void __udelay(unsigned long us) | ||
| 100 | { | ||
| 101 | u64 cur, end, inc; | ||
| 102 | |||
| 103 | cur = read_c0_cvmcount(); | ||
| 104 | |||
| 105 | inc = us * octeon_udelay_factor; | ||
| 106 | end = cur + inc; | ||
| 107 | |||
| 108 | while (end > cur) | ||
| 109 | cur = read_c0_cvmcount(); | ||
| 110 | } | ||
| 111 | EXPORT_SYMBOL(__udelay); | ||
| 112 | |||
| 113 | void __ndelay(unsigned long ns) | ||
| 114 | { | ||
| 115 | u64 cur, end, inc; | ||
| 116 | |||
| 117 | cur = read_c0_cvmcount(); | ||
| 118 | |||
| 119 | inc = ((ns * octeon_ndelay_factor) >> 16); | ||
| 120 | end = cur + inc; | ||
| 121 | |||
| 122 | while (end > cur) | ||
| 123 | cur = read_c0_cvmcount(); | ||
| 124 | } | ||
| 125 | EXPORT_SYMBOL(__ndelay); | ||
| 126 | |||
| 127 | void __delay(unsigned long loops) | ||
| 128 | { | ||
| 129 | u64 cur, end; | ||
| 130 | |||
| 131 | cur = read_c0_cvmcount(); | ||
| 132 | end = cur + loops; | ||
| 133 | |||
| 134 | while (end > cur) | ||
| 135 | cur = read_c0_cvmcount(); | ||
| 136 | } | ||
| 137 | EXPORT_SYMBOL(__delay); | ||
diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c index be531ec1f206..d22b5a2d64f4 100644 --- a/arch/mips/cavium-octeon/dma-octeon.c +++ b/arch/mips/cavium-octeon/dma-octeon.c | |||
| @@ -99,13 +99,16 @@ dma_addr_t octeon_map_dma_mem(struct device *dev, void *ptr, size_t size) | |||
| 99 | panic("dma_map_single: " | 99 | panic("dma_map_single: " |
| 100 | "Attempt to map illegal memory address 0x%llx\n", | 100 | "Attempt to map illegal memory address 0x%llx\n", |
| 101 | physical); | 101 | physical); |
| 102 | else if ((physical + size >= | 102 | else if (physical >= CVMX_PCIE_BAR1_PHYS_BASE && |
| 103 | (4ull<<30) - (OCTEON_PCI_BAR1_HOLE_SIZE<<20)) | 103 | physical + size < (CVMX_PCIE_BAR1_PHYS_BASE + CVMX_PCIE_BAR1_PHYS_SIZE)) { |
| 104 | && physical < (4ull<<30)) | 104 | result = physical - CVMX_PCIE_BAR1_PHYS_BASE + CVMX_PCIE_BAR1_RC_BASE; |
| 105 | pr_warning("dma_map_single: Warning: " | 105 | |
| 106 | "Mapping memory address that might " | 106 | if (((result+size-1) & dma_mask) != result+size-1) |
| 107 | "conflict with devices 0x%llx-0x%llx\n", | 107 | panic("dma_map_single: Attempt to map address 0x%llx-0x%llx, which can't be accessed according to the dma mask 0x%llx\n", |
| 108 | physical, physical+size-1); | 108 | physical, physical+size-1, dma_mask); |
| 109 | goto done; | ||
| 110 | } | ||
| 111 | |||
| 109 | /* The 2nd 256MB is mapped at 256<<20 instead of 0x410000000 */ | 112 | /* The 2nd 256MB is mapped at 256<<20 instead of 0x410000000 */ |
| 110 | if ((physical >= 0x410000000ull) && physical < 0x420000000ull) | 113 | if ((physical >= 0x410000000ull) && physical < 0x420000000ull) |
| 111 | result = physical - 0x400000000ull; | 114 | result = physical - 0x400000000ull; |
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c index c424cd158dc6..ce7500cdf5b7 100644 --- a/arch/mips/cavium-octeon/octeon-irq.c +++ b/arch/mips/cavium-octeon/octeon-irq.c | |||
| @@ -3,15 +3,13 @@ | |||
| 3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. | 4 | * for more details. |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 2004-2008 Cavium Networks | 6 | * Copyright (C) 2004-2008, 2009, 2010 Cavium Networks |
| 7 | */ | 7 | */ |
| 8 | #include <linux/irq.h> | 8 | #include <linux/irq.h> |
| 9 | #include <linux/interrupt.h> | 9 | #include <linux/interrupt.h> |
| 10 | #include <linux/smp.h> | 10 | #include <linux/smp.h> |
| 11 | 11 | ||
| 12 | #include <asm/octeon/octeon.h> | 12 | #include <asm/octeon/octeon.h> |
| 13 | #include <asm/octeon/cvmx-pexp-defs.h> | ||
| 14 | #include <asm/octeon/cvmx-npi-defs.h> | ||
| 15 | 13 | ||
| 16 | static DEFINE_RAW_SPINLOCK(octeon_irq_ciu0_lock); | 14 | static DEFINE_RAW_SPINLOCK(octeon_irq_ciu0_lock); |
| 17 | static DEFINE_RAW_SPINLOCK(octeon_irq_ciu1_lock); | 15 | static DEFINE_RAW_SPINLOCK(octeon_irq_ciu1_lock); |
| @@ -41,14 +39,14 @@ static void octeon_irq_core_ack(unsigned int irq) | |||
| 41 | 39 | ||
| 42 | static void octeon_irq_core_eoi(unsigned int irq) | 40 | static void octeon_irq_core_eoi(unsigned int irq) |
| 43 | { | 41 | { |
| 44 | struct irq_desc *desc = irq_desc + irq; | 42 | struct irq_desc *desc = irq_to_desc(irq); |
| 45 | unsigned int bit = irq - OCTEON_IRQ_SW0; | 43 | unsigned int bit = irq - OCTEON_IRQ_SW0; |
| 46 | /* | 44 | /* |
| 47 | * If an IRQ is being processed while we are disabling it the | 45 | * If an IRQ is being processed while we are disabling it the |
| 48 | * handler will attempt to unmask the interrupt after it has | 46 | * handler will attempt to unmask the interrupt after it has |
| 49 | * been disabled. | 47 | * been disabled. |
| 50 | */ | 48 | */ |
| 51 | if (desc->status & IRQ_DISABLED) | 49 | if ((unlikely(desc->status & IRQ_DISABLED))) |
| 52 | return; | 50 | return; |
| 53 | /* | 51 | /* |
| 54 | * We don't need to disable IRQs to make these atomic since | 52 | * We don't need to disable IRQs to make these atomic since |
| @@ -106,6 +104,29 @@ static struct irq_chip octeon_irq_chip_core = { | |||
| 106 | 104 | ||
| 107 | static void octeon_irq_ciu0_ack(unsigned int irq) | 105 | static void octeon_irq_ciu0_ack(unsigned int irq) |
| 108 | { | 106 | { |
| 107 | switch (irq) { | ||
| 108 | case OCTEON_IRQ_GMX_DRP0: | ||
| 109 | case OCTEON_IRQ_GMX_DRP1: | ||
| 110 | case OCTEON_IRQ_IPD_DRP: | ||
| 111 | case OCTEON_IRQ_KEY_ZERO: | ||
| 112 | case OCTEON_IRQ_TIMER0: | ||
| 113 | case OCTEON_IRQ_TIMER1: | ||
| 114 | case OCTEON_IRQ_TIMER2: | ||
| 115 | case OCTEON_IRQ_TIMER3: | ||
| 116 | { | ||
| 117 | int index = cvmx_get_core_num() * 2; | ||
| 118 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | ||
| 119 | /* | ||
| 120 | * CIU timer type interrupts must be acknoleged by | ||
| 121 | * writing a '1' bit to their sum0 bit. | ||
| 122 | */ | ||
| 123 | cvmx_write_csr(CVMX_CIU_INTX_SUM0(index), mask); | ||
| 124 | break; | ||
| 125 | } | ||
| 126 | default: | ||
| 127 | break; | ||
| 128 | } | ||
| 129 | |||
| 109 | /* | 130 | /* |
| 110 | * In order to avoid any locking accessing the CIU, we | 131 | * In order to avoid any locking accessing the CIU, we |
| 111 | * acknowledge CIU interrupts by disabling all of them. This | 132 | * acknowledge CIU interrupts by disabling all of them. This |
| @@ -130,8 +151,54 @@ static void octeon_irq_ciu0_eoi(unsigned int irq) | |||
| 130 | set_c0_status(0x100 << 2); | 151 | set_c0_status(0x100 << 2); |
| 131 | } | 152 | } |
| 132 | 153 | ||
| 154 | static int next_coreid_for_irq(struct irq_desc *desc) | ||
| 155 | { | ||
| 156 | |||
| 157 | #ifdef CONFIG_SMP | ||
| 158 | int coreid; | ||
| 159 | int weight = cpumask_weight(desc->affinity); | ||
| 160 | |||
| 161 | if (weight > 1) { | ||
| 162 | int cpu = smp_processor_id(); | ||
| 163 | for (;;) { | ||
| 164 | cpu = cpumask_next(cpu, desc->affinity); | ||
| 165 | if (cpu >= nr_cpu_ids) { | ||
| 166 | cpu = -1; | ||
| 167 | continue; | ||
| 168 | } else if (cpumask_test_cpu(cpu, cpu_online_mask)) { | ||
| 169 | break; | ||
| 170 | } | ||
| 171 | } | ||
| 172 | coreid = octeon_coreid_for_cpu(cpu); | ||
| 173 | } else if (weight == 1) { | ||
| 174 | coreid = octeon_coreid_for_cpu(cpumask_first(desc->affinity)); | ||
| 175 | } else { | ||
| 176 | coreid = cvmx_get_core_num(); | ||
| 177 | } | ||
| 178 | return coreid; | ||
| 179 | #else | ||
| 180 | return cvmx_get_core_num(); | ||
| 181 | #endif | ||
| 182 | } | ||
| 183 | |||
| 133 | static void octeon_irq_ciu0_enable(unsigned int irq) | 184 | static void octeon_irq_ciu0_enable(unsigned int irq) |
| 134 | { | 185 | { |
| 186 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 187 | int coreid = next_coreid_for_irq(desc); | ||
| 188 | unsigned long flags; | ||
| 189 | uint64_t en0; | ||
| 190 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ | ||
| 191 | |||
| 192 | raw_spin_lock_irqsave(&octeon_irq_ciu0_lock, flags); | ||
| 193 | en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | ||
| 194 | en0 |= 1ull << bit; | ||
| 195 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); | ||
| 196 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | ||
| 197 | raw_spin_unlock_irqrestore(&octeon_irq_ciu0_lock, flags); | ||
| 198 | } | ||
| 199 | |||
| 200 | static void octeon_irq_ciu0_enable_mbox(unsigned int irq) | ||
| 201 | { | ||
| 135 | int coreid = cvmx_get_core_num(); | 202 | int coreid = cvmx_get_core_num(); |
| 136 | unsigned long flags; | 203 | unsigned long flags; |
| 137 | uint64_t en0; | 204 | uint64_t en0; |
| @@ -167,63 +234,76 @@ static void octeon_irq_ciu0_disable(unsigned int irq) | |||
| 167 | } | 234 | } |
| 168 | 235 | ||
| 169 | /* | 236 | /* |
| 170 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} | 237 | * Enable the irq on the next core in the affinity set for chips that |
| 171 | * registers. | 238 | * have the EN*_W1{S,C} registers. |
| 172 | */ | 239 | */ |
| 173 | static void octeon_irq_ciu0_enable_v2(unsigned int irq) | 240 | static void octeon_irq_ciu0_enable_v2(unsigned int irq) |
| 174 | { | 241 | { |
| 175 | int index = cvmx_get_core_num() * 2; | 242 | int index; |
| 176 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | 243 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); |
| 244 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 177 | 245 | ||
| 178 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | 246 | if ((desc->status & IRQ_DISABLED) == 0) { |
| 247 | index = next_coreid_for_irq(desc) * 2; | ||
| 248 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | ||
| 249 | } | ||
| 179 | } | 250 | } |
| 180 | 251 | ||
| 181 | /* | 252 | /* |
| 182 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} | 253 | * Enable the irq on the current CPU for chips that |
| 183 | * registers. | 254 | * have the EN*_W1{S,C} registers. |
| 184 | */ | 255 | */ |
| 185 | static void octeon_irq_ciu0_ack_v2(unsigned int irq) | 256 | static void octeon_irq_ciu0_enable_mbox_v2(unsigned int irq) |
| 186 | { | 257 | { |
| 187 | int index = cvmx_get_core_num() * 2; | 258 | int index; |
| 188 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | 259 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); |
| 189 | 260 | ||
| 190 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); | 261 | index = cvmx_get_core_num() * 2; |
| 262 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | ||
| 191 | } | 263 | } |
| 192 | 264 | ||
| 193 | /* | 265 | /* |
| 194 | * CIU timer type interrupts must be acknoleged by writing a '1' bit | 266 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} |
| 195 | * to their sum0 bit. | 267 | * registers. |
| 196 | */ | 268 | */ |
| 197 | static void octeon_irq_ciu0_timer_ack(unsigned int irq) | 269 | static void octeon_irq_ciu0_ack_v2(unsigned int irq) |
| 198 | { | 270 | { |
| 199 | int index = cvmx_get_core_num() * 2; | 271 | int index = cvmx_get_core_num() * 2; |
| 200 | uint64_t mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | 272 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); |
| 201 | cvmx_write_csr(CVMX_CIU_INTX_SUM0(index), mask); | ||
| 202 | } | ||
| 203 | 273 | ||
| 204 | static void octeon_irq_ciu0_timer_ack_v1(unsigned int irq) | 274 | switch (irq) { |
| 205 | { | 275 | case OCTEON_IRQ_GMX_DRP0: |
| 206 | octeon_irq_ciu0_timer_ack(irq); | 276 | case OCTEON_IRQ_GMX_DRP1: |
| 207 | octeon_irq_ciu0_ack(irq); | 277 | case OCTEON_IRQ_IPD_DRP: |
| 208 | } | 278 | case OCTEON_IRQ_KEY_ZERO: |
| 279 | case OCTEON_IRQ_TIMER0: | ||
| 280 | case OCTEON_IRQ_TIMER1: | ||
| 281 | case OCTEON_IRQ_TIMER2: | ||
| 282 | case OCTEON_IRQ_TIMER3: | ||
| 283 | /* | ||
| 284 | * CIU timer type interrupts must be acknoleged by | ||
| 285 | * writing a '1' bit to their sum0 bit. | ||
| 286 | */ | ||
| 287 | cvmx_write_csr(CVMX_CIU_INTX_SUM0(index), mask); | ||
| 288 | break; | ||
| 289 | default: | ||
| 290 | break; | ||
| 291 | } | ||
| 209 | 292 | ||
| 210 | static void octeon_irq_ciu0_timer_ack_v2(unsigned int irq) | 293 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); |
| 211 | { | ||
| 212 | octeon_irq_ciu0_timer_ack(irq); | ||
| 213 | octeon_irq_ciu0_ack_v2(irq); | ||
| 214 | } | 294 | } |
| 215 | 295 | ||
| 216 | /* | 296 | /* |
| 217 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} | 297 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} |
| 218 | * registers. | 298 | * registers. |
| 219 | */ | 299 | */ |
| 220 | static void octeon_irq_ciu0_eoi_v2(unsigned int irq) | 300 | static void octeon_irq_ciu0_eoi_mbox_v2(unsigned int irq) |
| 221 | { | 301 | { |
| 222 | struct irq_desc *desc = irq_desc + irq; | 302 | struct irq_desc *desc = irq_to_desc(irq); |
| 223 | int index = cvmx_get_core_num() * 2; | 303 | int index = cvmx_get_core_num() * 2; |
| 224 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | 304 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); |
| 225 | 305 | ||
| 226 | if ((desc->status & IRQ_DISABLED) == 0) | 306 | if (likely((desc->status & IRQ_DISABLED) == 0)) |
| 227 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | 307 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); |
| 228 | } | 308 | } |
| 229 | 309 | ||
| @@ -246,18 +326,30 @@ static void octeon_irq_ciu0_disable_all_v2(unsigned int irq) | |||
| 246 | static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest) | 326 | static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest) |
| 247 | { | 327 | { |
| 248 | int cpu; | 328 | int cpu; |
| 329 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 330 | int enable_one = (desc->status & IRQ_DISABLED) == 0; | ||
| 249 | unsigned long flags; | 331 | unsigned long flags; |
| 250 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ | 332 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ |
| 251 | 333 | ||
| 334 | /* | ||
| 335 | * For non-v2 CIU, we will allow only single CPU affinity. | ||
| 336 | * This removes the need to do locking in the .ack/.eoi | ||
| 337 | * functions. | ||
| 338 | */ | ||
| 339 | if (cpumask_weight(dest) != 1) | ||
| 340 | return -EINVAL; | ||
| 341 | |||
| 252 | raw_spin_lock_irqsave(&octeon_irq_ciu0_lock, flags); | 342 | raw_spin_lock_irqsave(&octeon_irq_ciu0_lock, flags); |
| 253 | for_each_online_cpu(cpu) { | 343 | for_each_online_cpu(cpu) { |
| 254 | int coreid = octeon_coreid_for_cpu(cpu); | 344 | int coreid = octeon_coreid_for_cpu(cpu); |
| 255 | uint64_t en0 = | 345 | uint64_t en0 = |
| 256 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | 346 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); |
| 257 | if (cpumask_test_cpu(cpu, dest)) | 347 | if (cpumask_test_cpu(cpu, dest) && enable_one) { |
| 348 | enable_one = 0; | ||
| 258 | en0 |= 1ull << bit; | 349 | en0 |= 1ull << bit; |
| 259 | else | 350 | } else { |
| 260 | en0 &= ~(1ull << bit); | 351 | en0 &= ~(1ull << bit); |
| 352 | } | ||
| 261 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); | 353 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); |
| 262 | } | 354 | } |
| 263 | /* | 355 | /* |
| @@ -279,13 +371,18 @@ static int octeon_irq_ciu0_set_affinity_v2(unsigned int irq, | |||
| 279 | { | 371 | { |
| 280 | int cpu; | 372 | int cpu; |
| 281 | int index; | 373 | int index; |
| 374 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 375 | int enable_one = (desc->status & IRQ_DISABLED) == 0; | ||
| 282 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | 376 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); |
| 377 | |||
| 283 | for_each_online_cpu(cpu) { | 378 | for_each_online_cpu(cpu) { |
| 284 | index = octeon_coreid_for_cpu(cpu) * 2; | 379 | index = octeon_coreid_for_cpu(cpu) * 2; |
| 285 | if (cpumask_test_cpu(cpu, dest)) | 380 | if (cpumask_test_cpu(cpu, dest) && enable_one) { |
| 381 | enable_one = 0; | ||
| 286 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | 382 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); |
| 287 | else | 383 | } else { |
| 288 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); | 384 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); |
| 385 | } | ||
| 289 | } | 386 | } |
| 290 | return 0; | 387 | return 0; |
| 291 | } | 388 | } |
| @@ -298,8 +395,7 @@ static struct irq_chip octeon_irq_chip_ciu0_v2 = { | |||
| 298 | .name = "CIU0", | 395 | .name = "CIU0", |
| 299 | .enable = octeon_irq_ciu0_enable_v2, | 396 | .enable = octeon_irq_ciu0_enable_v2, |
| 300 | .disable = octeon_irq_ciu0_disable_all_v2, | 397 | .disable = octeon_irq_ciu0_disable_all_v2, |
| 301 | .ack = octeon_irq_ciu0_ack_v2, | 398 | .eoi = octeon_irq_ciu0_enable_v2, |
| 302 | .eoi = octeon_irq_ciu0_eoi_v2, | ||
| 303 | #ifdef CONFIG_SMP | 399 | #ifdef CONFIG_SMP |
| 304 | .set_affinity = octeon_irq_ciu0_set_affinity_v2, | 400 | .set_affinity = octeon_irq_ciu0_set_affinity_v2, |
| 305 | #endif | 401 | #endif |
| @@ -309,36 +405,27 @@ static struct irq_chip octeon_irq_chip_ciu0 = { | |||
| 309 | .name = "CIU0", | 405 | .name = "CIU0", |
| 310 | .enable = octeon_irq_ciu0_enable, | 406 | .enable = octeon_irq_ciu0_enable, |
| 311 | .disable = octeon_irq_ciu0_disable, | 407 | .disable = octeon_irq_ciu0_disable, |
| 312 | .ack = octeon_irq_ciu0_ack, | ||
| 313 | .eoi = octeon_irq_ciu0_eoi, | 408 | .eoi = octeon_irq_ciu0_eoi, |
| 314 | #ifdef CONFIG_SMP | 409 | #ifdef CONFIG_SMP |
| 315 | .set_affinity = octeon_irq_ciu0_set_affinity, | 410 | .set_affinity = octeon_irq_ciu0_set_affinity, |
| 316 | #endif | 411 | #endif |
| 317 | }; | 412 | }; |
| 318 | 413 | ||
| 319 | static struct irq_chip octeon_irq_chip_ciu0_timer_v2 = { | 414 | /* The mbox versions don't do any affinity or round-robin. */ |
| 320 | .name = "CIU0-T", | 415 | static struct irq_chip octeon_irq_chip_ciu0_mbox_v2 = { |
| 321 | .enable = octeon_irq_ciu0_enable_v2, | 416 | .name = "CIU0-M", |
| 322 | .disable = octeon_irq_ciu0_disable_all_v2, | 417 | .enable = octeon_irq_ciu0_enable_mbox_v2, |
| 323 | .ack = octeon_irq_ciu0_timer_ack_v2, | 418 | .disable = octeon_irq_ciu0_disable, |
| 324 | .eoi = octeon_irq_ciu0_eoi_v2, | 419 | .eoi = octeon_irq_ciu0_eoi_mbox_v2, |
| 325 | #ifdef CONFIG_SMP | ||
| 326 | .set_affinity = octeon_irq_ciu0_set_affinity_v2, | ||
| 327 | #endif | ||
| 328 | }; | 420 | }; |
| 329 | 421 | ||
| 330 | static struct irq_chip octeon_irq_chip_ciu0_timer = { | 422 | static struct irq_chip octeon_irq_chip_ciu0_mbox = { |
| 331 | .name = "CIU0-T", | 423 | .name = "CIU0-M", |
| 332 | .enable = octeon_irq_ciu0_enable, | 424 | .enable = octeon_irq_ciu0_enable_mbox, |
| 333 | .disable = octeon_irq_ciu0_disable, | 425 | .disable = octeon_irq_ciu0_disable, |
| 334 | .ack = octeon_irq_ciu0_timer_ack_v1, | ||
| 335 | .eoi = octeon_irq_ciu0_eoi, | 426 | .eoi = octeon_irq_ciu0_eoi, |
| 336 | #ifdef CONFIG_SMP | ||
| 337 | .set_affinity = octeon_irq_ciu0_set_affinity, | ||
| 338 | #endif | ||
| 339 | }; | 427 | }; |
| 340 | 428 | ||
| 341 | |||
| 342 | static void octeon_irq_ciu1_ack(unsigned int irq) | 429 | static void octeon_irq_ciu1_ack(unsigned int irq) |
| 343 | { | 430 | { |
| 344 | /* | 431 | /* |
| @@ -365,10 +452,30 @@ static void octeon_irq_ciu1_eoi(unsigned int irq) | |||
| 365 | 452 | ||
| 366 | static void octeon_irq_ciu1_enable(unsigned int irq) | 453 | static void octeon_irq_ciu1_enable(unsigned int irq) |
| 367 | { | 454 | { |
| 368 | int coreid = cvmx_get_core_num(); | 455 | struct irq_desc *desc = irq_to_desc(irq); |
| 456 | int coreid = next_coreid_for_irq(desc); | ||
| 457 | unsigned long flags; | ||
| 458 | uint64_t en1; | ||
| 459 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ | ||
| 460 | |||
| 461 | raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags); | ||
| 462 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | ||
| 463 | en1 |= 1ull << bit; | ||
| 464 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); | ||
| 465 | cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | ||
| 466 | raw_spin_unlock_irqrestore(&octeon_irq_ciu1_lock, flags); | ||
| 467 | } | ||
| 468 | |||
| 469 | /* | ||
| 470 | * Watchdog interrupts are special. They are associated with a single | ||
| 471 | * core, so we hardwire the affinity to that core. | ||
| 472 | */ | ||
| 473 | static void octeon_irq_ciu1_wd_enable(unsigned int irq) | ||
| 474 | { | ||
| 369 | unsigned long flags; | 475 | unsigned long flags; |
| 370 | uint64_t en1; | 476 | uint64_t en1; |
| 371 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ | 477 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ |
| 478 | int coreid = bit; | ||
| 372 | 479 | ||
| 373 | raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags); | 480 | raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags); |
| 374 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | 481 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); |
| @@ -405,36 +512,43 @@ static void octeon_irq_ciu1_disable(unsigned int irq) | |||
| 405 | */ | 512 | */ |
| 406 | static void octeon_irq_ciu1_enable_v2(unsigned int irq) | 513 | static void octeon_irq_ciu1_enable_v2(unsigned int irq) |
| 407 | { | 514 | { |
| 408 | int index = cvmx_get_core_num() * 2 + 1; | 515 | int index; |
| 409 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | 516 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); |
| 517 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 410 | 518 | ||
| 411 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | 519 | if ((desc->status & IRQ_DISABLED) == 0) { |
| 520 | index = next_coreid_for_irq(desc) * 2 + 1; | ||
| 521 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | ||
| 522 | } | ||
| 412 | } | 523 | } |
| 413 | 524 | ||
| 414 | /* | 525 | /* |
| 415 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} | 526 | * Watchdog interrupts are special. They are associated with a single |
| 416 | * registers. | 527 | * core, so we hardwire the affinity to that core. |
| 417 | */ | 528 | */ |
| 418 | static void octeon_irq_ciu1_ack_v2(unsigned int irq) | 529 | static void octeon_irq_ciu1_wd_enable_v2(unsigned int irq) |
| 419 | { | 530 | { |
| 420 | int index = cvmx_get_core_num() * 2 + 1; | 531 | int index; |
| 532 | int coreid = irq - OCTEON_IRQ_WDOG0; | ||
| 421 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | 533 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); |
| 534 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 422 | 535 | ||
| 423 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); | 536 | if ((desc->status & IRQ_DISABLED) == 0) { |
| 537 | index = coreid * 2 + 1; | ||
| 538 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | ||
| 539 | } | ||
| 424 | } | 540 | } |
| 425 | 541 | ||
| 426 | /* | 542 | /* |
| 427 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} | 543 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} |
| 428 | * registers. | 544 | * registers. |
| 429 | */ | 545 | */ |
| 430 | static void octeon_irq_ciu1_eoi_v2(unsigned int irq) | 546 | static void octeon_irq_ciu1_ack_v2(unsigned int irq) |
| 431 | { | 547 | { |
| 432 | struct irq_desc *desc = irq_desc + irq; | ||
| 433 | int index = cvmx_get_core_num() * 2 + 1; | 548 | int index = cvmx_get_core_num() * 2 + 1; |
| 434 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | 549 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); |
| 435 | 550 | ||
| 436 | if ((desc->status & IRQ_DISABLED) == 0) | 551 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); |
| 437 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | ||
| 438 | } | 552 | } |
| 439 | 553 | ||
| 440 | /* | 554 | /* |
| @@ -457,19 +571,30 @@ static int octeon_irq_ciu1_set_affinity(unsigned int irq, | |||
| 457 | const struct cpumask *dest) | 571 | const struct cpumask *dest) |
| 458 | { | 572 | { |
| 459 | int cpu; | 573 | int cpu; |
| 574 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 575 | int enable_one = (desc->status & IRQ_DISABLED) == 0; | ||
| 460 | unsigned long flags; | 576 | unsigned long flags; |
| 461 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ | 577 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ |
| 462 | 578 | ||
| 579 | /* | ||
| 580 | * For non-v2 CIU, we will allow only single CPU affinity. | ||
| 581 | * This removes the need to do locking in the .ack/.eoi | ||
| 582 | * functions. | ||
| 583 | */ | ||
| 584 | if (cpumask_weight(dest) != 1) | ||
| 585 | return -EINVAL; | ||
| 586 | |||
| 463 | raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags); | 587 | raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags); |
| 464 | for_each_online_cpu(cpu) { | 588 | for_each_online_cpu(cpu) { |
| 465 | int coreid = octeon_coreid_for_cpu(cpu); | 589 | int coreid = octeon_coreid_for_cpu(cpu); |
| 466 | uint64_t en1 = | 590 | uint64_t en1 = |
| 467 | cvmx_read_csr(CVMX_CIU_INTX_EN1 | 591 | cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); |
| 468 | (coreid * 2 + 1)); | 592 | if (cpumask_test_cpu(cpu, dest) && enable_one) { |
| 469 | if (cpumask_test_cpu(cpu, dest)) | 593 | enable_one = 0; |
| 470 | en1 |= 1ull << bit; | 594 | en1 |= 1ull << bit; |
| 471 | else | 595 | } else { |
| 472 | en1 &= ~(1ull << bit); | 596 | en1 &= ~(1ull << bit); |
| 597 | } | ||
| 473 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); | 598 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); |
| 474 | } | 599 | } |
| 475 | /* | 600 | /* |
| @@ -491,13 +616,17 @@ static int octeon_irq_ciu1_set_affinity_v2(unsigned int irq, | |||
| 491 | { | 616 | { |
| 492 | int cpu; | 617 | int cpu; |
| 493 | int index; | 618 | int index; |
| 619 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 620 | int enable_one = (desc->status & IRQ_DISABLED) == 0; | ||
| 494 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | 621 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); |
| 495 | for_each_online_cpu(cpu) { | 622 | for_each_online_cpu(cpu) { |
| 496 | index = octeon_coreid_for_cpu(cpu) * 2 + 1; | 623 | index = octeon_coreid_for_cpu(cpu) * 2 + 1; |
| 497 | if (cpumask_test_cpu(cpu, dest)) | 624 | if (cpumask_test_cpu(cpu, dest) && enable_one) { |
| 625 | enable_one = 0; | ||
| 498 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | 626 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); |
| 499 | else | 627 | } else { |
| 500 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); | 628 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); |
| 629 | } | ||
| 501 | } | 630 | } |
| 502 | return 0; | 631 | return 0; |
| 503 | } | 632 | } |
| @@ -507,11 +636,10 @@ static int octeon_irq_ciu1_set_affinity_v2(unsigned int irq, | |||
| 507 | * Newer octeon chips have support for lockless CIU operation. | 636 | * Newer octeon chips have support for lockless CIU operation. |
| 508 | */ | 637 | */ |
| 509 | static struct irq_chip octeon_irq_chip_ciu1_v2 = { | 638 | static struct irq_chip octeon_irq_chip_ciu1_v2 = { |
| 510 | .name = "CIU0", | 639 | .name = "CIU1", |
| 511 | .enable = octeon_irq_ciu1_enable_v2, | 640 | .enable = octeon_irq_ciu1_enable_v2, |
| 512 | .disable = octeon_irq_ciu1_disable_all_v2, | 641 | .disable = octeon_irq_ciu1_disable_all_v2, |
| 513 | .ack = octeon_irq_ciu1_ack_v2, | 642 | .eoi = octeon_irq_ciu1_enable_v2, |
| 514 | .eoi = octeon_irq_ciu1_eoi_v2, | ||
| 515 | #ifdef CONFIG_SMP | 643 | #ifdef CONFIG_SMP |
| 516 | .set_affinity = octeon_irq_ciu1_set_affinity_v2, | 644 | .set_affinity = octeon_irq_ciu1_set_affinity_v2, |
| 517 | #endif | 645 | #endif |
| @@ -521,103 +649,36 @@ static struct irq_chip octeon_irq_chip_ciu1 = { | |||
| 521 | .name = "CIU1", | 649 | .name = "CIU1", |
| 522 | .enable = octeon_irq_ciu1_enable, | 650 | .enable = octeon_irq_ciu1_enable, |
| 523 | .disable = octeon_irq_ciu1_disable, | 651 | .disable = octeon_irq_ciu1_disable, |
| 524 | .ack = octeon_irq_ciu1_ack, | ||
| 525 | .eoi = octeon_irq_ciu1_eoi, | 652 | .eoi = octeon_irq_ciu1_eoi, |
| 526 | #ifdef CONFIG_SMP | 653 | #ifdef CONFIG_SMP |
| 527 | .set_affinity = octeon_irq_ciu1_set_affinity, | 654 | .set_affinity = octeon_irq_ciu1_set_affinity, |
| 528 | #endif | 655 | #endif |
| 529 | }; | 656 | }; |
| 530 | 657 | ||
| 531 | #ifdef CONFIG_PCI_MSI | 658 | static struct irq_chip octeon_irq_chip_ciu1_wd_v2 = { |
| 532 | 659 | .name = "CIU1-W", | |
| 533 | static DEFINE_RAW_SPINLOCK(octeon_irq_msi_lock); | 660 | .enable = octeon_irq_ciu1_wd_enable_v2, |
| 534 | 661 | .disable = octeon_irq_ciu1_disable_all_v2, | |
| 535 | static void octeon_irq_msi_ack(unsigned int irq) | 662 | .eoi = octeon_irq_ciu1_wd_enable_v2, |
| 536 | { | 663 | }; |
| 537 | if (!octeon_has_feature(OCTEON_FEATURE_PCIE)) { | ||
| 538 | /* These chips have PCI */ | ||
| 539 | cvmx_write_csr(CVMX_NPI_NPI_MSI_RCV, | ||
| 540 | 1ull << (irq - OCTEON_IRQ_MSI_BIT0)); | ||
| 541 | } else { | ||
| 542 | /* | ||
| 543 | * These chips have PCIe. Thankfully the ACK doesn't | ||
| 544 | * need any locking. | ||
| 545 | */ | ||
| 546 | cvmx_write_csr(CVMX_PEXP_NPEI_MSI_RCV0, | ||
| 547 | 1ull << (irq - OCTEON_IRQ_MSI_BIT0)); | ||
| 548 | } | ||
| 549 | } | ||
| 550 | |||
| 551 | static void octeon_irq_msi_eoi(unsigned int irq) | ||
| 552 | { | ||
| 553 | /* Nothing needed */ | ||
| 554 | } | ||
| 555 | |||
| 556 | static void octeon_irq_msi_enable(unsigned int irq) | ||
| 557 | { | ||
| 558 | if (!octeon_has_feature(OCTEON_FEATURE_PCIE)) { | ||
| 559 | /* | ||
| 560 | * Octeon PCI doesn't have the ability to mask/unmask | ||
| 561 | * MSI interrupts individually. Instead of | ||
| 562 | * masking/unmasking them in groups of 16, we simple | ||
| 563 | * assume MSI devices are well behaved. MSI | ||
| 564 | * interrupts are always enable and the ACK is assumed | ||
| 565 | * to be enough. | ||
| 566 | */ | ||
| 567 | } else { | ||
| 568 | /* These chips have PCIe. Note that we only support | ||
| 569 | * the first 64 MSI interrupts. Unfortunately all the | ||
| 570 | * MSI enables are in the same register. We use | ||
| 571 | * MSI0's lock to control access to them all. | ||
| 572 | */ | ||
| 573 | uint64_t en; | ||
| 574 | unsigned long flags; | ||
| 575 | raw_spin_lock_irqsave(&octeon_irq_msi_lock, flags); | ||
| 576 | en = cvmx_read_csr(CVMX_PEXP_NPEI_MSI_ENB0); | ||
| 577 | en |= 1ull << (irq - OCTEON_IRQ_MSI_BIT0); | ||
| 578 | cvmx_write_csr(CVMX_PEXP_NPEI_MSI_ENB0, en); | ||
| 579 | cvmx_read_csr(CVMX_PEXP_NPEI_MSI_ENB0); | ||
| 580 | raw_spin_unlock_irqrestore(&octeon_irq_msi_lock, flags); | ||
| 581 | } | ||
| 582 | } | ||
| 583 | |||
| 584 | static void octeon_irq_msi_disable(unsigned int irq) | ||
| 585 | { | ||
| 586 | if (!octeon_has_feature(OCTEON_FEATURE_PCIE)) { | ||
| 587 | /* See comment in enable */ | ||
| 588 | } else { | ||
| 589 | /* | ||
| 590 | * These chips have PCIe. Note that we only support | ||
| 591 | * the first 64 MSI interrupts. Unfortunately all the | ||
| 592 | * MSI enables are in the same register. We use | ||
| 593 | * MSI0's lock to control access to them all. | ||
| 594 | */ | ||
| 595 | uint64_t en; | ||
| 596 | unsigned long flags; | ||
| 597 | raw_spin_lock_irqsave(&octeon_irq_msi_lock, flags); | ||
| 598 | en = cvmx_read_csr(CVMX_PEXP_NPEI_MSI_ENB0); | ||
| 599 | en &= ~(1ull << (irq - OCTEON_IRQ_MSI_BIT0)); | ||
| 600 | cvmx_write_csr(CVMX_PEXP_NPEI_MSI_ENB0, en); | ||
| 601 | cvmx_read_csr(CVMX_PEXP_NPEI_MSI_ENB0); | ||
| 602 | raw_spin_unlock_irqrestore(&octeon_irq_msi_lock, flags); | ||
| 603 | } | ||
| 604 | } | ||
| 605 | 664 | ||
| 606 | static struct irq_chip octeon_irq_chip_msi = { | 665 | static struct irq_chip octeon_irq_chip_ciu1_wd = { |
| 607 | .name = "MSI", | 666 | .name = "CIU1-W", |
| 608 | .enable = octeon_irq_msi_enable, | 667 | .enable = octeon_irq_ciu1_wd_enable, |
| 609 | .disable = octeon_irq_msi_disable, | 668 | .disable = octeon_irq_ciu1_disable, |
| 610 | .ack = octeon_irq_msi_ack, | 669 | .eoi = octeon_irq_ciu1_eoi, |
| 611 | .eoi = octeon_irq_msi_eoi, | ||
| 612 | }; | 670 | }; |
| 613 | #endif | 671 | |
| 672 | static void (*octeon_ciu0_ack)(unsigned int); | ||
| 673 | static void (*octeon_ciu1_ack)(unsigned int); | ||
| 614 | 674 | ||
| 615 | void __init arch_init_irq(void) | 675 | void __init arch_init_irq(void) |
| 616 | { | 676 | { |
| 617 | int irq; | 677 | unsigned int irq; |
| 618 | struct irq_chip *chip0; | 678 | struct irq_chip *chip0; |
| 619 | struct irq_chip *chip0_timer; | 679 | struct irq_chip *chip0_mbox; |
| 620 | struct irq_chip *chip1; | 680 | struct irq_chip *chip1; |
| 681 | struct irq_chip *chip1_wd; | ||
| 621 | 682 | ||
| 622 | #ifdef CONFIG_SMP | 683 | #ifdef CONFIG_SMP |
| 623 | /* Set the default affinity to the boot cpu. */ | 684 | /* Set the default affinity to the boot cpu. */ |
| @@ -631,13 +692,19 @@ void __init arch_init_irq(void) | |||
| 631 | if (OCTEON_IS_MODEL(OCTEON_CN58XX_PASS2_X) || | 692 | if (OCTEON_IS_MODEL(OCTEON_CN58XX_PASS2_X) || |
| 632 | OCTEON_IS_MODEL(OCTEON_CN56XX_PASS2_X) || | 693 | OCTEON_IS_MODEL(OCTEON_CN56XX_PASS2_X) || |
| 633 | OCTEON_IS_MODEL(OCTEON_CN52XX_PASS2_X)) { | 694 | OCTEON_IS_MODEL(OCTEON_CN52XX_PASS2_X)) { |
| 695 | octeon_ciu0_ack = octeon_irq_ciu0_ack_v2; | ||
| 696 | octeon_ciu1_ack = octeon_irq_ciu1_ack_v2; | ||
| 634 | chip0 = &octeon_irq_chip_ciu0_v2; | 697 | chip0 = &octeon_irq_chip_ciu0_v2; |
| 635 | chip0_timer = &octeon_irq_chip_ciu0_timer_v2; | 698 | chip0_mbox = &octeon_irq_chip_ciu0_mbox_v2; |
| 636 | chip1 = &octeon_irq_chip_ciu1_v2; | 699 | chip1 = &octeon_irq_chip_ciu1_v2; |
| 700 | chip1_wd = &octeon_irq_chip_ciu1_wd_v2; | ||
| 637 | } else { | 701 | } else { |
| 702 | octeon_ciu0_ack = octeon_irq_ciu0_ack; | ||
| 703 | octeon_ciu1_ack = octeon_irq_ciu1_ack; | ||
| 638 | chip0 = &octeon_irq_chip_ciu0; | 704 | chip0 = &octeon_irq_chip_ciu0; |
| 639 | chip0_timer = &octeon_irq_chip_ciu0_timer; | 705 | chip0_mbox = &octeon_irq_chip_ciu0_mbox; |
| 640 | chip1 = &octeon_irq_chip_ciu1; | 706 | chip1 = &octeon_irq_chip_ciu1; |
| 707 | chip1_wd = &octeon_irq_chip_ciu1_wd; | ||
| 641 | } | 708 | } |
| 642 | 709 | ||
| 643 | /* 0 - 15 reserved for i8259 master and slave controller. */ | 710 | /* 0 - 15 reserved for i8259 master and slave controller. */ |
| @@ -651,34 +718,23 @@ void __init arch_init_irq(void) | |||
| 651 | /* 24 - 87 CIU_INT_SUM0 */ | 718 | /* 24 - 87 CIU_INT_SUM0 */ |
| 652 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { | 719 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { |
| 653 | switch (irq) { | 720 | switch (irq) { |
| 654 | case OCTEON_IRQ_GMX_DRP0: | 721 | case OCTEON_IRQ_MBOX0: |
| 655 | case OCTEON_IRQ_GMX_DRP1: | 722 | case OCTEON_IRQ_MBOX1: |
| 656 | case OCTEON_IRQ_IPD_DRP: | 723 | set_irq_chip_and_handler(irq, chip0_mbox, handle_percpu_irq); |
| 657 | case OCTEON_IRQ_KEY_ZERO: | ||
| 658 | case OCTEON_IRQ_TIMER0: | ||
| 659 | case OCTEON_IRQ_TIMER1: | ||
| 660 | case OCTEON_IRQ_TIMER2: | ||
| 661 | case OCTEON_IRQ_TIMER3: | ||
| 662 | set_irq_chip_and_handler(irq, chip0_timer, handle_percpu_irq); | ||
| 663 | break; | 724 | break; |
| 664 | default: | 725 | default: |
| 665 | set_irq_chip_and_handler(irq, chip0, handle_percpu_irq); | 726 | set_irq_chip_and_handler(irq, chip0, handle_fasteoi_irq); |
| 666 | break; | 727 | break; |
| 667 | } | 728 | } |
| 668 | } | 729 | } |
| 669 | 730 | ||
| 670 | /* 88 - 151 CIU_INT_SUM1 */ | 731 | /* 88 - 151 CIU_INT_SUM1 */ |
| 671 | for (irq = OCTEON_IRQ_WDOG0; irq <= OCTEON_IRQ_RESERVED151; irq++) { | 732 | for (irq = OCTEON_IRQ_WDOG0; irq <= OCTEON_IRQ_WDOG15; irq++) |
| 672 | set_irq_chip_and_handler(irq, chip1, handle_percpu_irq); | 733 | set_irq_chip_and_handler(irq, chip1_wd, handle_fasteoi_irq); |
| 673 | } | 734 | |
| 735 | for (irq = OCTEON_IRQ_UART2; irq <= OCTEON_IRQ_RESERVED151; irq++) | ||
| 736 | set_irq_chip_and_handler(irq, chip1, handle_fasteoi_irq); | ||
| 674 | 737 | ||
| 675 | #ifdef CONFIG_PCI_MSI | ||
| 676 | /* 152 - 215 PCI/PCIe MSI interrupts */ | ||
| 677 | for (irq = OCTEON_IRQ_MSI_BIT0; irq <= OCTEON_IRQ_MSI_BIT63; irq++) { | ||
| 678 | set_irq_chip_and_handler(irq, &octeon_irq_chip_msi, | ||
| 679 | handle_percpu_irq); | ||
| 680 | } | ||
| 681 | #endif | ||
| 682 | set_c0_status(0x300 << 2); | 738 | set_c0_status(0x300 << 2); |
| 683 | } | 739 | } |
| 684 | 740 | ||
| @@ -693,6 +749,7 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 693 | unsigned long cop0_status; | 749 | unsigned long cop0_status; |
| 694 | uint64_t ciu_en; | 750 | uint64_t ciu_en; |
| 695 | uint64_t ciu_sum; | 751 | uint64_t ciu_sum; |
| 752 | unsigned int irq; | ||
| 696 | 753 | ||
| 697 | while (1) { | 754 | while (1) { |
| 698 | cop0_cause = read_c0_cause(); | 755 | cop0_cause = read_c0_cause(); |
| @@ -704,18 +761,24 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 704 | ciu_sum = cvmx_read_csr(ciu_sum0_address); | 761 | ciu_sum = cvmx_read_csr(ciu_sum0_address); |
| 705 | ciu_en = cvmx_read_csr(ciu_en0_address); | 762 | ciu_en = cvmx_read_csr(ciu_en0_address); |
| 706 | ciu_sum &= ciu_en; | 763 | ciu_sum &= ciu_en; |
| 707 | if (likely(ciu_sum)) | 764 | if (likely(ciu_sum)) { |
| 708 | do_IRQ(fls64(ciu_sum) + OCTEON_IRQ_WORKQ0 - 1); | 765 | irq = fls64(ciu_sum) + OCTEON_IRQ_WORKQ0 - 1; |
| 709 | else | 766 | octeon_ciu0_ack(irq); |
| 767 | do_IRQ(irq); | ||
| 768 | } else { | ||
| 710 | spurious_interrupt(); | 769 | spurious_interrupt(); |
| 770 | } | ||
| 711 | } else if (unlikely(cop0_cause & STATUSF_IP3)) { | 771 | } else if (unlikely(cop0_cause & STATUSF_IP3)) { |
| 712 | ciu_sum = cvmx_read_csr(ciu_sum1_address); | 772 | ciu_sum = cvmx_read_csr(ciu_sum1_address); |
| 713 | ciu_en = cvmx_read_csr(ciu_en1_address); | 773 | ciu_en = cvmx_read_csr(ciu_en1_address); |
| 714 | ciu_sum &= ciu_en; | 774 | ciu_sum &= ciu_en; |
| 715 | if (likely(ciu_sum)) | 775 | if (likely(ciu_sum)) { |
| 716 | do_IRQ(fls64(ciu_sum) + OCTEON_IRQ_WDOG0 - 1); | 776 | irq = fls64(ciu_sum) + OCTEON_IRQ_WDOG0 - 1; |
| 717 | else | 777 | octeon_ciu1_ack(irq); |
| 778 | do_IRQ(irq); | ||
| 779 | } else { | ||
| 718 | spurious_interrupt(); | 780 | spurious_interrupt(); |
| 781 | } | ||
| 719 | } else if (likely(cop0_cause)) { | 782 | } else if (likely(cop0_cause)) { |
| 720 | do_IRQ(fls(cop0_cause) - 9 + MIPS_CPU_IRQ_BASE); | 783 | do_IRQ(fls(cop0_cause) - 9 + MIPS_CPU_IRQ_BASE); |
| 721 | } else { | 784 | } else { |
| @@ -725,54 +788,84 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 725 | } | 788 | } |
| 726 | 789 | ||
| 727 | #ifdef CONFIG_HOTPLUG_CPU | 790 | #ifdef CONFIG_HOTPLUG_CPU |
| 728 | static int is_irq_enabled_on_cpu(unsigned int irq, unsigned int cpu) | ||
| 729 | { | ||
| 730 | unsigned int isset; | ||
| 731 | int coreid = octeon_coreid_for_cpu(cpu); | ||
| 732 | int bit = (irq < OCTEON_IRQ_WDOG0) ? | ||
| 733 | irq - OCTEON_IRQ_WORKQ0 : irq - OCTEON_IRQ_WDOG0; | ||
| 734 | if (irq < 64) { | ||
| 735 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)) & | ||
| 736 | (1ull << bit)) >> bit; | ||
| 737 | } else { | ||
| 738 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)) & | ||
| 739 | (1ull << bit)) >> bit; | ||
| 740 | } | ||
| 741 | return isset; | ||
| 742 | } | ||
| 743 | 791 | ||
| 744 | void fixup_irqs(void) | 792 | void fixup_irqs(void) |
| 745 | { | 793 | { |
| 746 | int irq; | 794 | int irq; |
| 795 | struct irq_desc *desc; | ||
| 796 | cpumask_t new_affinity; | ||
| 797 | unsigned long flags; | ||
| 798 | int do_set_affinity; | ||
| 799 | int cpu; | ||
| 800 | |||
| 801 | cpu = smp_processor_id(); | ||
| 747 | 802 | ||
| 748 | for (irq = OCTEON_IRQ_SW0; irq <= OCTEON_IRQ_TIMER; irq++) | 803 | for (irq = OCTEON_IRQ_SW0; irq <= OCTEON_IRQ_TIMER; irq++) |
| 749 | octeon_irq_core_disable_local(irq); | 804 | octeon_irq_core_disable_local(irq); |
| 750 | 805 | ||
| 751 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_GPIO15; irq++) { | 806 | for (irq = OCTEON_IRQ_WORKQ0; irq < OCTEON_IRQ_LAST; irq++) { |
| 752 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | 807 | desc = irq_to_desc(irq); |
| 753 | /* ciu irq migrates to next cpu */ | 808 | switch (irq) { |
| 754 | octeon_irq_chip_ciu0.disable(irq); | 809 | case OCTEON_IRQ_MBOX0: |
| 755 | octeon_irq_ciu0_set_affinity(irq, &cpu_online_map); | 810 | case OCTEON_IRQ_MBOX1: |
| 756 | } | 811 | /* The eoi function will disable them on this CPU. */ |
| 757 | } | 812 | desc->chip->eoi(irq); |
| 758 | 813 | break; | |
| 759 | #if 0 | 814 | case OCTEON_IRQ_WDOG0: |
| 760 | for (irq = OCTEON_IRQ_MBOX0; irq <= OCTEON_IRQ_MBOX1; irq++) | 815 | case OCTEON_IRQ_WDOG1: |
| 761 | octeon_irq_mailbox_mask(irq); | 816 | case OCTEON_IRQ_WDOG2: |
| 762 | #endif | 817 | case OCTEON_IRQ_WDOG3: |
| 763 | for (irq = OCTEON_IRQ_UART0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { | 818 | case OCTEON_IRQ_WDOG4: |
| 764 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | 819 | case OCTEON_IRQ_WDOG5: |
| 765 | /* ciu irq migrates to next cpu */ | 820 | case OCTEON_IRQ_WDOG6: |
| 766 | octeon_irq_chip_ciu0.disable(irq); | 821 | case OCTEON_IRQ_WDOG7: |
| 767 | octeon_irq_ciu0_set_affinity(irq, &cpu_online_map); | 822 | case OCTEON_IRQ_WDOG8: |
| 768 | } | 823 | case OCTEON_IRQ_WDOG9: |
| 769 | } | 824 | case OCTEON_IRQ_WDOG10: |
| 825 | case OCTEON_IRQ_WDOG11: | ||
| 826 | case OCTEON_IRQ_WDOG12: | ||
| 827 | case OCTEON_IRQ_WDOG13: | ||
| 828 | case OCTEON_IRQ_WDOG14: | ||
| 829 | case OCTEON_IRQ_WDOG15: | ||
| 830 | /* | ||
| 831 | * These have special per CPU semantics and | ||
| 832 | * are handled in the watchdog driver. | ||
| 833 | */ | ||
| 834 | break; | ||
| 835 | default: | ||
| 836 | raw_spin_lock_irqsave(&desc->lock, flags); | ||
| 837 | /* | ||
| 838 | * If this irq has an action, it is in use and | ||
| 839 | * must be migrated if it has affinity to this | ||
| 840 | * cpu. | ||
| 841 | */ | ||
| 842 | if (desc->action && cpumask_test_cpu(cpu, desc->affinity)) { | ||
| 843 | if (cpumask_weight(desc->affinity) > 1) { | ||
| 844 | /* | ||
| 845 | * It has multi CPU affinity, | ||
| 846 | * just remove this CPU from | ||
| 847 | * the affinity set. | ||
| 848 | */ | ||
| 849 | cpumask_copy(&new_affinity, desc->affinity); | ||
| 850 | cpumask_clear_cpu(cpu, &new_affinity); | ||
| 851 | } else { | ||
| 852 | /* | ||
| 853 | * Otherwise, put it on lowest | ||
| 854 | * numbered online CPU. | ||
| 855 | */ | ||
| 856 | cpumask_clear(&new_affinity); | ||
| 857 | cpumask_set_cpu(cpumask_first(cpu_online_mask), &new_affinity); | ||
| 858 | } | ||
| 859 | do_set_affinity = 1; | ||
| 860 | } else { | ||
| 861 | do_set_affinity = 0; | ||
| 862 | } | ||
| 863 | raw_spin_unlock_irqrestore(&desc->lock, flags); | ||
| 864 | |||
| 865 | if (do_set_affinity) | ||
| 866 | irq_set_affinity(irq, &new_affinity); | ||
| 770 | 867 | ||
| 771 | for (irq = OCTEON_IRQ_UART2; irq <= OCTEON_IRQ_RESERVED135; irq++) { | 868 | break; |
| 772 | if (is_irq_enabled_on_cpu(irq, smp_processor_id())) { | ||
| 773 | /* ciu irq migrates to next cpu */ | ||
| 774 | octeon_irq_chip_ciu1.disable(irq); | ||
| 775 | octeon_irq_ciu1_set_affinity(irq, &cpu_online_map); | ||
| 776 | } | 869 | } |
| 777 | } | 870 | } |
| 778 | } | 871 | } |
diff --git a/arch/mips/cavium-octeon/octeon_boot.h b/arch/mips/cavium-octeon/octeon_boot.h index 0f7f84accf9a..428864b2ba41 100644 --- a/arch/mips/cavium-octeon/octeon_boot.h +++ b/arch/mips/cavium-octeon/octeon_boot.h | |||
| @@ -23,14 +23,16 @@ | |||
| 23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
| 24 | 24 | ||
| 25 | struct boot_init_vector { | 25 | struct boot_init_vector { |
| 26 | uint32_t stack_addr; | 26 | /* First stage address - in ram instead of flash */ |
| 27 | uint32_t code_addr; | 27 | uint64_t code_addr; |
| 28 | /* Setup code for application, NOT application entry point */ | ||
| 28 | uint32_t app_start_func_addr; | 29 | uint32_t app_start_func_addr; |
| 30 | /* k0 is used for global data - needs to be passed to other cores */ | ||
| 29 | uint32_t k0_val; | 31 | uint32_t k0_val; |
| 30 | uint32_t flags; | 32 | /* Address of boot info block structure */ |
| 31 | uint32_t boot_info_addr; | 33 | uint64_t boot_info_addr; |
| 34 | uint32_t flags; /* flags */ | ||
| 32 | uint32_t pad; | 35 | uint32_t pad; |
| 33 | uint32_t pad2; | ||
| 34 | }; | 36 | }; |
| 35 | 37 | ||
| 36 | /* similar to bootloader's linux_app_boot_info but without global data */ | 38 | /* similar to bootloader's linux_app_boot_info but without global data */ |
| @@ -40,7 +42,7 @@ struct linux_app_boot_info { | |||
| 40 | uint32_t avail_coremask; | 42 | uint32_t avail_coremask; |
| 41 | uint32_t pci_console_active; | 43 | uint32_t pci_console_active; |
| 42 | uint32_t icache_prefetch_disable; | 44 | uint32_t icache_prefetch_disable; |
| 43 | uint32_t InitTLBStart_addr; | 45 | uint64_t InitTLBStart_addr; |
| 44 | uint32_t start_app_addr; | 46 | uint32_t start_app_addr; |
| 45 | uint32_t cur_exception_base; | 47 | uint32_t cur_exception_base; |
| 46 | uint32_t no_mark_private_data; | 48 | uint32_t no_mark_private_data; |
| @@ -58,7 +60,7 @@ struct linux_app_boot_info { | |||
| 58 | 60 | ||
| 59 | #define LINUX_APP_BOOT_BLOCK_NAME "linux-app-boot" | 61 | #define LINUX_APP_BOOT_BLOCK_NAME "linux-app-boot" |
| 60 | 62 | ||
| 61 | #define LABI_SIGNATURE 0xAABBCCDD | 63 | #define LABI_SIGNATURE 0xAABBCC01 |
| 62 | 64 | ||
| 63 | /* from uboot-headers/octeon_mem_map.h */ | 65 | /* from uboot-headers/octeon_mem_map.h */ |
| 64 | #define EXCEPTION_BASE_INCR (4 * 1024) | 66 | #define EXCEPTION_BASE_INCR (4 * 1024) |
diff --git a/arch/mips/cavium-octeon/serial.c b/arch/mips/cavium-octeon/serial.c index 83eac37a1ff9..638adab02842 100644 --- a/arch/mips/cavium-octeon/serial.c +++ b/arch/mips/cavium-octeon/serial.c | |||
| @@ -18,11 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <asm/octeon/octeon.h> | 19 | #include <asm/octeon/octeon.h> |
| 20 | 20 | ||
| 21 | #ifdef CONFIG_GDB_CONSOLE | ||
| 22 | #define DEBUG_UART 0 | ||
| 23 | #else | ||
| 24 | #define DEBUG_UART 1 | 21 | #define DEBUG_UART 1 |
| 25 | #endif | ||
| 26 | 22 | ||
| 27 | unsigned int octeon_serial_in(struct uart_port *up, int offset) | 23 | unsigned int octeon_serial_in(struct uart_port *up, int offset) |
| 28 | { | 24 | { |
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c index d1b5ffaf0281..69197cb6c7ea 100644 --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <asm/time.h> | 32 | #include <asm/time.h> |
| 33 | 33 | ||
| 34 | #include <asm/octeon/octeon.h> | 34 | #include <asm/octeon/octeon.h> |
| 35 | #include <asm/octeon/pci-octeon.h> | ||
| 35 | 36 | ||
| 36 | #ifdef CONFIG_CAVIUM_DECODE_RSL | 37 | #ifdef CONFIG_CAVIUM_DECODE_RSL |
| 37 | extern void cvmx_interrupt_rsl_decode(void); | 38 | extern void cvmx_interrupt_rsl_decode(void); |
| @@ -578,9 +579,6 @@ void __init prom_init(void) | |||
| 578 | } | 579 | } |
| 579 | 580 | ||
| 580 | if (strstr(arcs_cmdline, "console=") == NULL) { | 581 | if (strstr(arcs_cmdline, "console=") == NULL) { |
| 581 | #ifdef CONFIG_GDB_CONSOLE | ||
| 582 | strcat(arcs_cmdline, " console=gdb"); | ||
| 583 | #else | ||
| 584 | #ifdef CONFIG_CAVIUM_OCTEON_2ND_KERNEL | 582 | #ifdef CONFIG_CAVIUM_OCTEON_2ND_KERNEL |
| 585 | strcat(arcs_cmdline, " console=ttyS0,115200"); | 583 | strcat(arcs_cmdline, " console=ttyS0,115200"); |
| 586 | #else | 584 | #else |
| @@ -589,7 +587,6 @@ void __init prom_init(void) | |||
| 589 | else | 587 | else |
| 590 | strcat(arcs_cmdline, " console=ttyS0,115200"); | 588 | strcat(arcs_cmdline, " console=ttyS0,115200"); |
| 591 | #endif | 589 | #endif |
| 592 | #endif | ||
| 593 | } | 590 | } |
| 594 | 591 | ||
| 595 | if (octeon_is_simulation()) { | 592 | if (octeon_is_simulation()) { |
| @@ -598,13 +595,13 @@ void __init prom_init(void) | |||
| 598 | * the filesystem. Also specify the calibration delay | 595 | * the filesystem. Also specify the calibration delay |
| 599 | * to avoid calculating it every time. | 596 | * to avoid calculating it every time. |
| 600 | */ | 597 | */ |
| 601 | strcat(arcs_cmdline, " rw root=1f00" | 598 | strcat(arcs_cmdline, " rw root=1f00 slram=root,0x40000000,+1073741824"); |
| 602 | " lpj=60176 slram=root,0x40000000,+1073741824"); | ||
| 603 | } | 599 | } |
| 604 | 600 | ||
| 605 | mips_hpt_frequency = octeon_get_clock_rate(); | 601 | mips_hpt_frequency = octeon_get_clock_rate(); |
| 606 | 602 | ||
| 607 | octeon_init_cvmcount(); | 603 | octeon_init_cvmcount(); |
| 604 | octeon_setup_delays(); | ||
| 608 | 605 | ||
| 609 | _machine_restart = octeon_restart; | 606 | _machine_restart = octeon_restart; |
| 610 | _machine_halt = octeon_halt; | 607 | _machine_halt = octeon_halt; |
| @@ -613,6 +610,22 @@ void __init prom_init(void) | |||
| 613 | register_smp_ops(&octeon_smp_ops); | 610 | register_smp_ops(&octeon_smp_ops); |
| 614 | } | 611 | } |
| 615 | 612 | ||
| 613 | /* Exclude a single page from the regions obtained in plat_mem_setup. */ | ||
| 614 | static __init void memory_exclude_page(u64 addr, u64 *mem, u64 *size) | ||
| 615 | { | ||
| 616 | if (addr > *mem && addr < *mem + *size) { | ||
| 617 | u64 inc = addr - *mem; | ||
| 618 | add_memory_region(*mem, inc, BOOT_MEM_RAM); | ||
| 619 | *mem += inc; | ||
| 620 | *size -= inc; | ||
| 621 | } | ||
| 622 | |||
| 623 | if (addr == *mem && *size > PAGE_SIZE) { | ||
| 624 | *mem += PAGE_SIZE; | ||
| 625 | *size -= PAGE_SIZE; | ||
| 626 | } | ||
| 627 | } | ||
| 628 | |||
| 616 | void __init plat_mem_setup(void) | 629 | void __init plat_mem_setup(void) |
| 617 | { | 630 | { |
| 618 | uint64_t mem_alloc_size; | 631 | uint64_t mem_alloc_size; |
| @@ -663,12 +676,27 @@ void __init plat_mem_setup(void) | |||
| 663 | CVMX_BOOTMEM_FLAG_NO_LOCKING); | 676 | CVMX_BOOTMEM_FLAG_NO_LOCKING); |
| 664 | #endif | 677 | #endif |
| 665 | if (memory >= 0) { | 678 | if (memory >= 0) { |
| 679 | u64 size = mem_alloc_size; | ||
| 680 | |||
| 681 | /* | ||
| 682 | * exclude a page at the beginning and end of | ||
| 683 | * the 256MB PCIe 'hole' so the kernel will not | ||
| 684 | * try to allocate multi-page buffers that | ||
| 685 | * span the discontinuity. | ||
| 686 | */ | ||
| 687 | memory_exclude_page(CVMX_PCIE_BAR1_PHYS_BASE, | ||
| 688 | &memory, &size); | ||
| 689 | memory_exclude_page(CVMX_PCIE_BAR1_PHYS_BASE + | ||
| 690 | CVMX_PCIE_BAR1_PHYS_SIZE, | ||
| 691 | &memory, &size); | ||
| 692 | |||
| 666 | /* | 693 | /* |
| 667 | * This function automatically merges address | 694 | * This function automatically merges address |
| 668 | * regions next to each other if they are | 695 | * regions next to each other if they are |
| 669 | * received in incrementing order. | 696 | * received in incrementing order. |
| 670 | */ | 697 | */ |
| 671 | add_memory_region(memory, mem_alloc_size, BOOT_MEM_RAM); | 698 | if (size) |
| 699 | add_memory_region(memory, size, BOOT_MEM_RAM); | ||
| 672 | total += mem_alloc_size; | 700 | total += mem_alloc_size; |
| 673 | } else { | 701 | } else { |
| 674 | break; | 702 | break; |
| @@ -691,7 +719,10 @@ void __init plat_mem_setup(void) | |||
| 691 | "cvmx_bootmem_phy_alloc\n"); | 719 | "cvmx_bootmem_phy_alloc\n"); |
| 692 | } | 720 | } |
| 693 | 721 | ||
| 694 | 722 | /* | |
| 723 | * Emit one character to the boot UART. Exported for use by the | ||
| 724 | * watchdog timer. | ||
| 725 | */ | ||
| 695 | int prom_putchar(char c) | 726 | int prom_putchar(char c) |
| 696 | { | 727 | { |
| 697 | uint64_t lsrval; | 728 | uint64_t lsrval; |
| @@ -705,6 +736,7 @@ int prom_putchar(char c) | |||
| 705 | cvmx_write_csr(CVMX_MIO_UARTX_THR(octeon_uart), c & 0xffull); | 736 | cvmx_write_csr(CVMX_MIO_UARTX_THR(octeon_uart), c & 0xffull); |
| 706 | return 1; | 737 | return 1; |
| 707 | } | 738 | } |
| 739 | EXPORT_SYMBOL(prom_putchar); | ||
| 708 | 740 | ||
| 709 | void prom_free_prom_memory(void) | 741 | void prom_free_prom_memory(void) |
| 710 | { | 742 | { |
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c index 6d99b9d8887d..391cefe556b3 100644 --- a/arch/mips/cavium-octeon/smp.c +++ b/arch/mips/cavium-octeon/smp.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. | 4 | * for more details. |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 2004-2008 Cavium Networks | 6 | * Copyright (C) 2004-2008, 2009, 2010 Cavium Networks |
| 7 | */ | 7 | */ |
| 8 | #include <linux/cpu.h> | 8 | #include <linux/cpu.h> |
| 9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
| @@ -27,7 +27,8 @@ volatile unsigned long octeon_processor_sp; | |||
| 27 | volatile unsigned long octeon_processor_gp; | 27 | volatile unsigned long octeon_processor_gp; |
| 28 | 28 | ||
| 29 | #ifdef CONFIG_HOTPLUG_CPU | 29 | #ifdef CONFIG_HOTPLUG_CPU |
| 30 | static unsigned int InitTLBStart_addr; | 30 | uint64_t octeon_bootloader_entry_addr; |
| 31 | EXPORT_SYMBOL(octeon_bootloader_entry_addr); | ||
| 31 | #endif | 32 | #endif |
| 32 | 33 | ||
| 33 | static irqreturn_t mailbox_interrupt(int irq, void *dev_id) | 34 | static irqreturn_t mailbox_interrupt(int irq, void *dev_id) |
| @@ -80,20 +81,13 @@ static inline void octeon_send_ipi_mask(const struct cpumask *mask, | |||
| 80 | static void octeon_smp_hotplug_setup(void) | 81 | static void octeon_smp_hotplug_setup(void) |
| 81 | { | 82 | { |
| 82 | #ifdef CONFIG_HOTPLUG_CPU | 83 | #ifdef CONFIG_HOTPLUG_CPU |
| 83 | uint32_t labi_signature; | 84 | struct linux_app_boot_info *labi; |
| 84 | 85 | ||
| 85 | labi_signature = | 86 | labi = (struct linux_app_boot_info *)PHYS_TO_XKSEG_CACHED(LABI_ADDR_IN_BOOTLOADER); |
| 86 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | 87 | if (labi->labi_signature != LABI_SIGNATURE) |
| 87 | LABI_ADDR_IN_BOOTLOADER + | 88 | panic("The bootloader version on this board is incorrect."); |
| 88 | offsetof(struct linux_app_boot_info, | 89 | |
| 89 | labi_signature))); | 90 | octeon_bootloader_entry_addr = labi->InitTLBStart_addr; |
| 90 | if (labi_signature != LABI_SIGNATURE) | ||
| 91 | pr_err("The bootloader version on this board is incorrect\n"); | ||
| 92 | InitTLBStart_addr = | ||
| 93 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
| 94 | LABI_ADDR_IN_BOOTLOADER + | ||
| 95 | offsetof(struct linux_app_boot_info, | ||
| 96 | InitTLBStart_addr))); | ||
| 97 | #endif | 91 | #endif |
| 98 | } | 92 | } |
| 99 | 93 | ||
| @@ -102,24 +96,47 @@ static void octeon_smp_setup(void) | |||
| 102 | const int coreid = cvmx_get_core_num(); | 96 | const int coreid = cvmx_get_core_num(); |
| 103 | int cpus; | 97 | int cpus; |
| 104 | int id; | 98 | int id; |
| 105 | |||
| 106 | int core_mask = octeon_get_boot_coremask(); | 99 | int core_mask = octeon_get_boot_coremask(); |
| 100 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 101 | unsigned int num_cores = cvmx_octeon_num_cores(); | ||
| 102 | #endif | ||
| 103 | |||
| 104 | /* The present CPUs are initially just the boot cpu (CPU 0). */ | ||
| 105 | for (id = 0; id < NR_CPUS; id++) { | ||
| 106 | set_cpu_possible(id, id == 0); | ||
| 107 | set_cpu_present(id, id == 0); | ||
| 108 | } | ||
| 107 | 109 | ||
| 108 | cpus_clear(cpu_possible_map); | ||
| 109 | __cpu_number_map[coreid] = 0; | 110 | __cpu_number_map[coreid] = 0; |
| 110 | __cpu_logical_map[0] = coreid; | 111 | __cpu_logical_map[0] = coreid; |
| 111 | cpu_set(0, cpu_possible_map); | ||
| 112 | 112 | ||
| 113 | /* The present CPUs get the lowest CPU numbers. */ | ||
| 113 | cpus = 1; | 114 | cpus = 1; |
| 114 | for (id = 0; id < 16; id++) { | 115 | for (id = 0; id < NR_CPUS; id++) { |
| 115 | if ((id != coreid) && (core_mask & (1 << id))) { | 116 | if ((id != coreid) && (core_mask & (1 << id))) { |
| 116 | cpu_set(cpus, cpu_possible_map); | 117 | set_cpu_possible(cpus, true); |
| 118 | set_cpu_present(cpus, true); | ||
| 117 | __cpu_number_map[id] = cpus; | 119 | __cpu_number_map[id] = cpus; |
| 118 | __cpu_logical_map[cpus] = id; | 120 | __cpu_logical_map[cpus] = id; |
| 119 | cpus++; | 121 | cpus++; |
| 120 | } | 122 | } |
| 121 | } | 123 | } |
| 122 | cpu_present_map = cpu_possible_map; | 124 | |
| 125 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 126 | /* | ||
| 127 | * The possible CPUs are all those present on the chip. We | ||
| 128 | * will assign CPU numbers for possible cores as well. Cores | ||
| 129 | * are always consecutively numberd from 0. | ||
| 130 | */ | ||
| 131 | for (id = 0; id < num_cores && id < NR_CPUS; id++) { | ||
| 132 | if (!(core_mask & (1 << id))) { | ||
| 133 | set_cpu_possible(cpus, true); | ||
| 134 | __cpu_number_map[id] = cpus; | ||
| 135 | __cpu_logical_map[cpus] = id; | ||
| 136 | cpus++; | ||
| 137 | } | ||
| 138 | } | ||
| 139 | #endif | ||
| 123 | 140 | ||
| 124 | octeon_smp_hotplug_setup(); | 141 | octeon_smp_hotplug_setup(); |
| 125 | } | 142 | } |
| @@ -158,18 +175,21 @@ static void octeon_init_secondary(void) | |||
| 158 | { | 175 | { |
| 159 | const int coreid = cvmx_get_core_num(); | 176 | const int coreid = cvmx_get_core_num(); |
| 160 | union cvmx_ciu_intx_sum0 interrupt_enable; | 177 | union cvmx_ciu_intx_sum0 interrupt_enable; |
| 178 | unsigned int sr; | ||
| 161 | 179 | ||
| 162 | #ifdef CONFIG_HOTPLUG_CPU | 180 | #ifdef CONFIG_HOTPLUG_CPU |
| 163 | unsigned int cur_exception_base; | 181 | struct linux_app_boot_info *labi; |
| 164 | 182 | ||
| 165 | cur_exception_base = cvmx_read64_uint32( | 183 | labi = (struct linux_app_boot_info *)PHYS_TO_XKSEG_CACHED(LABI_ADDR_IN_BOOTLOADER); |
| 166 | CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | 184 | |
| 167 | LABI_ADDR_IN_BOOTLOADER + | 185 | if (labi->labi_signature != LABI_SIGNATURE) |
| 168 | offsetof(struct linux_app_boot_info, | 186 | panic("The bootloader version on this board is incorrect."); |
| 169 | cur_exception_base))); | ||
| 170 | /* cur_exception_base is incremented in bootloader after setting */ | ||
| 171 | write_c0_ebase((unsigned int)(cur_exception_base - EXCEPTION_BASE_INCR)); | ||
| 172 | #endif | 187 | #endif |
| 188 | |||
| 189 | sr = set_c0_status(ST0_BEV); | ||
| 190 | write_c0_ebase((u32)ebase); | ||
| 191 | write_c0_status(sr); | ||
| 192 | |||
| 173 | octeon_check_cpu_bist(); | 193 | octeon_check_cpu_bist(); |
| 174 | octeon_init_cvmcount(); | 194 | octeon_init_cvmcount(); |
| 175 | /* | 195 | /* |
| @@ -276,8 +296,8 @@ static int octeon_cpu_disable(void) | |||
| 276 | static void octeon_cpu_die(unsigned int cpu) | 296 | static void octeon_cpu_die(unsigned int cpu) |
| 277 | { | 297 | { |
| 278 | int coreid = cpu_logical_map(cpu); | 298 | int coreid = cpu_logical_map(cpu); |
| 279 | uint32_t avail_coremask; | 299 | uint32_t mask, new_mask; |
| 280 | struct cvmx_bootmem_named_block_desc *block_desc; | 300 | const struct cvmx_bootmem_named_block_desc *block_desc; |
| 281 | 301 | ||
| 282 | while (per_cpu(cpu_state, cpu) != CPU_DEAD) | 302 | while (per_cpu(cpu_state, cpu) != CPU_DEAD) |
| 283 | cpu_relax(); | 303 | cpu_relax(); |
| @@ -286,52 +306,40 @@ static void octeon_cpu_die(unsigned int cpu) | |||
| 286 | * This is a bit complicated strategics of getting/settig available | 306 | * This is a bit complicated strategics of getting/settig available |
| 287 | * cores mask, copied from bootloader | 307 | * cores mask, copied from bootloader |
| 288 | */ | 308 | */ |
| 309 | |||
| 310 | mask = 1 << coreid; | ||
| 289 | /* LINUX_APP_BOOT_BLOCK is initialized in bootoct binary */ | 311 | /* LINUX_APP_BOOT_BLOCK is initialized in bootoct binary */ |
| 290 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); | 312 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); |
| 291 | 313 | ||
| 292 | if (!block_desc) { | 314 | if (!block_desc) { |
| 293 | avail_coremask = | 315 | struct linux_app_boot_info *labi; |
| 294 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
| 295 | LABI_ADDR_IN_BOOTLOADER + | ||
| 296 | offsetof | ||
| 297 | (struct linux_app_boot_info, | ||
| 298 | avail_coremask))); | ||
| 299 | } else { /* alternative, already initialized */ | ||
| 300 | avail_coremask = | ||
| 301 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
| 302 | block_desc->base_addr + | ||
| 303 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK)); | ||
| 304 | } | ||
| 305 | 316 | ||
| 306 | avail_coremask |= 1 << coreid; | 317 | labi = (struct linux_app_boot_info *)PHYS_TO_XKSEG_CACHED(LABI_ADDR_IN_BOOTLOADER); |
| 307 | 318 | ||
| 308 | /* Setting avail_coremask for bootoct binary */ | 319 | labi->avail_coremask |= mask; |
| 309 | if (!block_desc) { | 320 | new_mask = labi->avail_coremask; |
| 310 | cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | 321 | } else { /* alternative, already initialized */ |
| 311 | LABI_ADDR_IN_BOOTLOADER + | 322 | uint32_t *p = (uint32_t *)PHYS_TO_XKSEG_CACHED(block_desc->base_addr + |
| 312 | offsetof(struct linux_app_boot_info, | 323 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK); |
| 313 | avail_coremask)), | 324 | *p |= mask; |
| 314 | avail_coremask); | 325 | new_mask = *p; |
| 315 | } else { | ||
| 316 | cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | ||
| 317 | block_desc->base_addr + | ||
| 318 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK), | ||
| 319 | avail_coremask); | ||
| 320 | } | 326 | } |
| 321 | 327 | ||
| 322 | pr_info("Reset core %d. Available Coremask = %x\n", coreid, | 328 | pr_info("Reset core %d. Available Coremask = 0x%x \n", coreid, new_mask); |
| 323 | avail_coremask); | 329 | mb(); |
| 324 | cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid); | 330 | cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid); |
| 325 | cvmx_write_csr(CVMX_CIU_PP_RST, 0); | 331 | cvmx_write_csr(CVMX_CIU_PP_RST, 0); |
| 326 | } | 332 | } |
| 327 | 333 | ||
| 328 | void play_dead(void) | 334 | void play_dead(void) |
| 329 | { | 335 | { |
| 330 | int coreid = cvmx_get_core_num(); | 336 | int cpu = cpu_number_map(cvmx_get_core_num()); |
| 331 | 337 | ||
| 332 | idle_task_exit(); | 338 | idle_task_exit(); |
| 333 | octeon_processor_boot = 0xff; | 339 | octeon_processor_boot = 0xff; |
| 334 | per_cpu(cpu_state, coreid) = CPU_DEAD; | 340 | per_cpu(cpu_state, cpu) = CPU_DEAD; |
| 341 | |||
| 342 | mb(); | ||
| 335 | 343 | ||
| 336 | while (1) /* core will be reset here */ | 344 | while (1) /* core will be reset here */ |
| 337 | ; | 345 | ; |
| @@ -344,29 +352,27 @@ static void start_after_reset(void) | |||
| 344 | kernel_entry(0, 0, 0); /* set a2 = 0 for secondary core */ | 352 | kernel_entry(0, 0, 0); /* set a2 = 0 for secondary core */ |
| 345 | } | 353 | } |
| 346 | 354 | ||
| 347 | int octeon_update_boot_vector(unsigned int cpu) | 355 | static int octeon_update_boot_vector(unsigned int cpu) |
| 348 | { | 356 | { |
| 349 | 357 | ||
| 350 | int coreid = cpu_logical_map(cpu); | 358 | int coreid = cpu_logical_map(cpu); |
| 351 | unsigned int avail_coremask; | 359 | uint32_t avail_coremask; |
| 352 | struct cvmx_bootmem_named_block_desc *block_desc; | 360 | const struct cvmx_bootmem_named_block_desc *block_desc; |
| 353 | struct boot_init_vector *boot_vect = | 361 | struct boot_init_vector *boot_vect = |
| 354 | (struct boot_init_vector *) cvmx_phys_to_ptr(0x0 + | 362 | (struct boot_init_vector *)PHYS_TO_XKSEG_CACHED(BOOTLOADER_BOOT_VECTOR); |
| 355 | BOOTLOADER_BOOT_VECTOR); | ||
| 356 | 363 | ||
| 357 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); | 364 | block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME); |
| 358 | 365 | ||
| 359 | if (!block_desc) { | 366 | if (!block_desc) { |
| 360 | avail_coremask = | 367 | struct linux_app_boot_info *labi; |
| 361 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | 368 | |
| 362 | LABI_ADDR_IN_BOOTLOADER + | 369 | labi = (struct linux_app_boot_info *)PHYS_TO_XKSEG_CACHED(LABI_ADDR_IN_BOOTLOADER); |
| 363 | offsetof(struct linux_app_boot_info, | 370 | |
| 364 | avail_coremask))); | 371 | avail_coremask = labi->avail_coremask; |
| 372 | labi->avail_coremask &= ~(1 << coreid); | ||
| 365 | } else { /* alternative, already initialized */ | 373 | } else { /* alternative, already initialized */ |
| 366 | avail_coremask = | 374 | avail_coremask = *(uint32_t *)PHYS_TO_XKSEG_CACHED( |
| 367 | cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS, | 375 | block_desc->base_addr + AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK); |
| 368 | block_desc->base_addr + | ||
| 369 | AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK)); | ||
| 370 | } | 376 | } |
| 371 | 377 | ||
| 372 | if (!(avail_coremask & (1 << coreid))) { | 378 | if (!(avail_coremask & (1 << coreid))) { |
| @@ -377,9 +383,9 @@ int octeon_update_boot_vector(unsigned int cpu) | |||
| 377 | 383 | ||
| 378 | boot_vect[coreid].app_start_func_addr = | 384 | boot_vect[coreid].app_start_func_addr = |
| 379 | (uint32_t) (unsigned long) start_after_reset; | 385 | (uint32_t) (unsigned long) start_after_reset; |
| 380 | boot_vect[coreid].code_addr = InitTLBStart_addr; | 386 | boot_vect[coreid].code_addr = octeon_bootloader_entry_addr; |
| 381 | 387 | ||
| 382 | CVMX_SYNC; | 388 | mb(); |
| 383 | 389 | ||
| 384 | cvmx_write_csr(CVMX_CIU_NMI, (1 << coreid) & avail_coremask); | 390 | cvmx_write_csr(CVMX_CIU_NMI, (1 << coreid) & avail_coremask); |
| 385 | 391 | ||
| @@ -405,17 +411,11 @@ static int __cpuinit octeon_cpu_callback(struct notifier_block *nfb, | |||
| 405 | return NOTIFY_OK; | 411 | return NOTIFY_OK; |
| 406 | } | 412 | } |
| 407 | 413 | ||
| 408 | static struct notifier_block __cpuinitdata octeon_cpu_notifier = { | ||
| 409 | .notifier_call = octeon_cpu_callback, | ||
| 410 | }; | ||
| 411 | |||
| 412 | static int __cpuinit register_cavium_notifier(void) | 414 | static int __cpuinit register_cavium_notifier(void) |
| 413 | { | 415 | { |
| 414 | register_hotcpu_notifier(&octeon_cpu_notifier); | 416 | hotcpu_notifier(octeon_cpu_callback, 0); |
| 415 | |||
| 416 | return 0; | 417 | return 0; |
| 417 | } | 418 | } |
| 418 | |||
| 419 | late_initcall(register_cavium_notifier); | 419 | late_initcall(register_cavium_notifier); |
| 420 | 420 | ||
| 421 | #endif /* CONFIG_HOTPLUG_CPU */ | 421 | #endif /* CONFIG_HOTPLUG_CPU */ |
diff --git a/arch/mips/cobalt/Makefile b/arch/mips/cobalt/Makefile index 237926288d6d..61a334ac43ac 100644 --- a/arch/mips/cobalt/Makefile +++ b/arch/mips/cobalt/Makefile | |||
| @@ -7,5 +7,3 @@ obj-y := buttons.o irq.o lcd.o led.o reset.o rtc.o serial.o setup.o time.o | |||
| 7 | obj-$(CONFIG_PCI) += pci.o | 7 | obj-$(CONFIG_PCI) += pci.o |
| 8 | obj-$(CONFIG_EARLY_PRINTK) += console.o | 8 | obj-$(CONFIG_EARLY_PRINTK) += console.o |
| 9 | obj-$(CONFIG_MTD_PHYSMAP) += mtd.o | 9 | obj-$(CONFIG_MTD_PHYSMAP) += mtd.o |
| 10 | |||
| 11 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/cobalt/Platform b/arch/mips/cobalt/Platform new file mode 100644 index 000000000000..34123efd6dfe --- /dev/null +++ b/arch/mips/cobalt/Platform | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # Cobalt Server | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MIPS_COBALT) += cobalt/ | ||
| 5 | cflags-$(CONFIG_MIPS_COBALT) += -I$(srctree)/arch/mips/include/asm/mach-cobalt | ||
| 6 | load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000 | ||
diff --git a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig index f66d406aadce..3a9ec6ccd40d 100644 --- a/arch/mips/configs/db1000_defconfig +++ b/arch/mips/configs/db1000_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_DB1000=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1000=y | 66 | CONFIG_SOC_AU1000=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/db1100_defconfig b/arch/mips/configs/db1100_defconfig index abb9a5805adc..4589b84301f3 100644 --- a/arch/mips/configs/db1100_defconfig +++ b/arch/mips/configs/db1100_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_DB1100=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1100=y | 66 | CONFIG_SOC_AU1100=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig index 991c20adf471..9950f2aabd31 100644 --- a/arch/mips/configs/db1200_defconfig +++ b/arch/mips/configs/db1200_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_DB1200=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1200=y | 66 | CONFIG_SOC_AU1200=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/db1500_defconfig b/arch/mips/configs/db1500_defconfig index 5424c9167bf2..346ae631d1ef 100644 --- a/arch/mips/configs/db1500_defconfig +++ b/arch/mips/configs/db1500_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_DB1500=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1500=y | 66 | CONFIG_SOC_AU1500=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/db1550_defconfig b/arch/mips/configs/db1550_defconfig index 949b6dcf634b..10eafb942af3 100644 --- a/arch/mips/configs/db1550_defconfig +++ b/arch/mips/configs/db1550_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_DB1550=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1550=y | 66 | CONFIG_SOC_AU1550=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/gpr_defconfig b/arch/mips/configs/gpr_defconfig new file mode 100644 index 000000000000..17e2e624d03f --- /dev/null +++ b/arch/mips/configs/gpr_defconfig | |||
| @@ -0,0 +1,2060 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.35-rc6 | ||
| 4 | # Fri Jul 23 19:28:52 2010 | ||
| 5 | # | ||
| 6 | CONFIG_MIPS=y | ||
| 7 | |||
| 8 | # | ||
| 9 | # Machine selection | ||
| 10 | # | ||
| 11 | CONFIG_MIPS_ALCHEMY=y | ||
| 12 | # CONFIG_AR7 is not set | ||
| 13 | # CONFIG_BCM47XX is not set | ||
| 14 | # CONFIG_BCM63XX is not set | ||
| 15 | # CONFIG_MIPS_COBALT is not set | ||
| 16 | # CONFIG_MACH_DECSTATION is not set | ||
| 17 | # CONFIG_MACH_JAZZ is not set | ||
| 18 | # CONFIG_LASAT is not set | ||
| 19 | # CONFIG_MACH_LOONGSON is not set | ||
| 20 | # CONFIG_MIPS_MALTA is not set | ||
| 21 | # CONFIG_MIPS_SIM is not set | ||
| 22 | # CONFIG_NEC_MARKEINS is not set | ||
| 23 | # CONFIG_MACH_VR41XX is not set | ||
| 24 | # CONFIG_NXP_STB220 is not set | ||
| 25 | # CONFIG_NXP_STB225 is not set | ||
| 26 | # CONFIG_PNX8550_JBS is not set | ||
| 27 | # CONFIG_PNX8550_STB810 is not set | ||
| 28 | # CONFIG_PMC_MSP is not set | ||
| 29 | # CONFIG_PMC_YOSEMITE is not set | ||
| 30 | # CONFIG_POWERTV is not set | ||
| 31 | # CONFIG_SGI_IP22 is not set | ||
| 32 | # CONFIG_SGI_IP27 is not set | ||
| 33 | # CONFIG_SGI_IP28 is not set | ||
| 34 | # CONFIG_SGI_IP32 is not set | ||
| 35 | # CONFIG_SIBYTE_CRHINE is not set | ||
| 36 | # CONFIG_SIBYTE_CARMEL is not set | ||
| 37 | # CONFIG_SIBYTE_CRHONE is not set | ||
| 38 | # CONFIG_SIBYTE_RHONE is not set | ||
| 39 | # CONFIG_SIBYTE_SWARM is not set | ||
| 40 | # CONFIG_SIBYTE_LITTLESUR is not set | ||
| 41 | # CONFIG_SIBYTE_SENTOSA is not set | ||
| 42 | # CONFIG_SIBYTE_BIGSUR is not set | ||
| 43 | # CONFIG_SNI_RM is not set | ||
| 44 | # CONFIG_MACH_TX39XX is not set | ||
| 45 | # CONFIG_MACH_TX49XX is not set | ||
| 46 | # CONFIG_MIKROTIK_RB532 is not set | ||
| 47 | # CONFIG_WR_PPMC is not set | ||
| 48 | # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set | ||
| 49 | # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set | ||
| 50 | CONFIG_ALCHEMY_GPIOINT_AU1000=y | ||
| 51 | # CONFIG_ALCHEMY_GPIO_INDIRECT is not set | ||
| 52 | # CONFIG_MIPS_MTX1 is not set | ||
| 53 | # CONFIG_MIPS_BOSPORUS is not set | ||
| 54 | # CONFIG_MIPS_DB1000 is not set | ||
| 55 | # CONFIG_MIPS_DB1100 is not set | ||
| 56 | # CONFIG_MIPS_DB1200 is not set | ||
| 57 | # CONFIG_MIPS_DB1500 is not set | ||
| 58 | # CONFIG_MIPS_DB1550 is not set | ||
| 59 | # CONFIG_MIPS_MIRAGE is not set | ||
| 60 | # CONFIG_MIPS_PB1000 is not set | ||
| 61 | # CONFIG_MIPS_PB1100 is not set | ||
| 62 | # CONFIG_MIPS_PB1200 is not set | ||
| 63 | # CONFIG_MIPS_PB1500 is not set | ||
| 64 | # CONFIG_MIPS_PB1550 is not set | ||
| 65 | # CONFIG_MIPS_XXS1500 is not set | ||
| 66 | CONFIG_MIPS_GPR=y | ||
| 67 | CONFIG_SOC_AU1550=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | ||
| 69 | # CONFIG_LOONGSON_MC146818 is not set | ||
| 70 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 71 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 72 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 73 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 74 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 75 | CONFIG_GENERIC_HWEIGHT=y | ||
| 76 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 77 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 78 | CONFIG_GENERIC_TIME=y | ||
| 79 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
| 80 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
| 81 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
| 82 | CONFIG_CEVT_R4K_LIB=y | ||
| 83 | CONFIG_CSRC_R4K_LIB=y | ||
| 84 | CONFIG_DMA_NONCOHERENT=y | ||
| 85 | CONFIG_NEED_DMA_MAP_STATE=y | ||
| 86 | CONFIG_SYS_HAS_EARLY_PRINTK=y | ||
| 87 | CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y | ||
| 88 | # CONFIG_NO_IOPORT is not set | ||
| 89 | CONFIG_GENERIC_GPIO=y | ||
| 90 | # CONFIG_CPU_BIG_ENDIAN is not set | ||
| 91 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
| 92 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
| 93 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | ||
| 94 | CONFIG_IRQ_CPU=y | ||
| 95 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | ||
| 96 | |||
| 97 | # | ||
| 98 | # CPU selection | ||
| 99 | # | ||
| 100 | # CONFIG_CPU_LOONGSON2E is not set | ||
| 101 | # CONFIG_CPU_LOONGSON2F is not set | ||
| 102 | CONFIG_CPU_MIPS32_R1=y | ||
| 103 | # CONFIG_CPU_MIPS32_R2 is not set | ||
| 104 | # CONFIG_CPU_MIPS64_R1 is not set | ||
| 105 | # CONFIG_CPU_MIPS64_R2 is not set | ||
| 106 | # CONFIG_CPU_R3000 is not set | ||
| 107 | # CONFIG_CPU_TX39XX is not set | ||
| 108 | # CONFIG_CPU_VR41XX is not set | ||
| 109 | # CONFIG_CPU_R4300 is not set | ||
| 110 | # CONFIG_CPU_R4X00 is not set | ||
| 111 | # CONFIG_CPU_TX49XX is not set | ||
| 112 | # CONFIG_CPU_R5000 is not set | ||
| 113 | # CONFIG_CPU_R5432 is not set | ||
| 114 | # CONFIG_CPU_R5500 is not set | ||
| 115 | # CONFIG_CPU_R6000 is not set | ||
| 116 | # CONFIG_CPU_NEVADA is not set | ||
| 117 | # CONFIG_CPU_R8000 is not set | ||
| 118 | # CONFIG_CPU_R10000 is not set | ||
| 119 | # CONFIG_CPU_RM7000 is not set | ||
| 120 | # CONFIG_CPU_RM9000 is not set | ||
| 121 | # CONFIG_CPU_SB1 is not set | ||
| 122 | # CONFIG_CPU_CAVIUM_OCTEON is not set | ||
| 123 | CONFIG_SYS_SUPPORTS_ZBOOT=y | ||
| 124 | CONFIG_SYS_HAS_CPU_MIPS32_R1=y | ||
| 125 | CONFIG_CPU_MIPS32=y | ||
| 126 | CONFIG_CPU_MIPSR1=y | ||
| 127 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | ||
| 128 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | ||
| 129 | CONFIG_HARDWARE_WATCHPOINTS=y | ||
| 130 | |||
| 131 | # | ||
| 132 | # Kernel type | ||
| 133 | # | ||
| 134 | CONFIG_32BIT=y | ||
| 135 | # CONFIG_64BIT is not set | ||
| 136 | CONFIG_PAGE_SIZE_4KB=y | ||
| 137 | # CONFIG_PAGE_SIZE_8KB is not set | ||
| 138 | # CONFIG_PAGE_SIZE_16KB is not set | ||
| 139 | # CONFIG_PAGE_SIZE_32KB is not set | ||
| 140 | # CONFIG_PAGE_SIZE_64KB is not set | ||
| 141 | CONFIG_CPU_HAS_PREFETCH=y | ||
| 142 | CONFIG_MIPS_MT_DISABLED=y | ||
| 143 | # CONFIG_MIPS_MT_SMP is not set | ||
| 144 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 145 | CONFIG_64BIT_PHYS_ADDR=y | ||
| 146 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y | ||
| 147 | CONFIG_CPU_HAS_SYNC=y | ||
| 148 | CONFIG_GENERIC_HARDIRQS=y | ||
| 149 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 150 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | ||
| 151 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 152 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 153 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 154 | CONFIG_FLATMEM_MANUAL=y | ||
| 155 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 156 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 157 | CONFIG_FLATMEM=y | ||
| 158 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 159 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 160 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 161 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
| 162 | CONFIG_ZONE_DMA_FLAG=0 | ||
| 163 | CONFIG_VIRT_TO_BUS=y | ||
| 164 | # CONFIG_KSM is not set | ||
| 165 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 166 | CONFIG_TICK_ONESHOT=y | ||
| 167 | # CONFIG_NO_HZ is not set | ||
| 168 | CONFIG_HIGH_RES_TIMERS=y | ||
| 169 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 170 | # CONFIG_HZ_48 is not set | ||
| 171 | # CONFIG_HZ_100 is not set | ||
| 172 | # CONFIG_HZ_128 is not set | ||
| 173 | CONFIG_HZ_250=y | ||
| 174 | # CONFIG_HZ_256 is not set | ||
| 175 | # CONFIG_HZ_1000 is not set | ||
| 176 | # CONFIG_HZ_1024 is not set | ||
| 177 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y | ||
| 178 | CONFIG_HZ=250 | ||
| 179 | # CONFIG_PREEMPT_NONE is not set | ||
| 180 | CONFIG_PREEMPT_VOLUNTARY=y | ||
| 181 | # CONFIG_PREEMPT is not set | ||
| 182 | # CONFIG_KEXEC is not set | ||
| 183 | CONFIG_SECCOMP=y | ||
| 184 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 185 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 186 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 187 | CONFIG_CONSTRUCTORS=y | ||
| 188 | |||
| 189 | # | ||
| 190 | # General setup | ||
| 191 | # | ||
| 192 | CONFIG_EXPERIMENTAL=y | ||
| 193 | CONFIG_BROKEN_ON_SMP=y | ||
| 194 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 195 | CONFIG_CROSS_COMPILE="" | ||
| 196 | CONFIG_LOCALVERSION="" | ||
| 197 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 198 | CONFIG_HAVE_KERNEL_GZIP=y | ||
| 199 | CONFIG_HAVE_KERNEL_BZIP2=y | ||
| 200 | CONFIG_HAVE_KERNEL_LZMA=y | ||
| 201 | CONFIG_HAVE_KERNEL_LZO=y | ||
| 202 | CONFIG_KERNEL_GZIP=y | ||
| 203 | # CONFIG_KERNEL_BZIP2 is not set | ||
| 204 | # CONFIG_KERNEL_LZMA is not set | ||
| 205 | # CONFIG_KERNEL_LZO is not set | ||
| 206 | CONFIG_SWAP=y | ||
| 207 | CONFIG_SYSVIPC=y | ||
| 208 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 209 | CONFIG_POSIX_MQUEUE=y | ||
| 210 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
| 211 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 212 | CONFIG_BSD_PROCESS_ACCT_V3=y | ||
| 213 | # CONFIG_TASKSTATS is not set | ||
| 214 | # CONFIG_AUDIT is not set | ||
| 215 | |||
| 216 | # | ||
| 217 | # RCU Subsystem | ||
| 218 | # | ||
| 219 | CONFIG_TREE_RCU=y | ||
| 220 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 221 | # CONFIG_TINY_RCU is not set | ||
| 222 | # CONFIG_RCU_TRACE is not set | ||
| 223 | CONFIG_RCU_FANOUT=32 | ||
| 224 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 225 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 226 | # CONFIG_IKCONFIG is not set | ||
| 227 | CONFIG_LOG_BUF_SHIFT=17 | ||
| 228 | # CONFIG_CGROUPS is not set | ||
| 229 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
| 230 | CONFIG_RELAY=y | ||
| 231 | # CONFIG_NAMESPACES is not set | ||
| 232 | CONFIG_BLK_DEV_INITRD=y | ||
| 233 | CONFIG_INITRAMFS_SOURCE="" | ||
| 234 | CONFIG_RD_GZIP=y | ||
| 235 | # CONFIG_RD_BZIP2 is not set | ||
| 236 | # CONFIG_RD_LZMA is not set | ||
| 237 | # CONFIG_RD_LZO is not set | ||
| 238 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
| 239 | CONFIG_SYSCTL=y | ||
| 240 | CONFIG_ANON_INODES=y | ||
| 241 | CONFIG_EMBEDDED=y | ||
| 242 | CONFIG_SYSCTL_SYSCALL=y | ||
| 243 | CONFIG_KALLSYMS=y | ||
| 244 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 245 | CONFIG_HOTPLUG=y | ||
| 246 | CONFIG_PRINTK=y | ||
| 247 | CONFIG_BUG=y | ||
| 248 | CONFIG_ELF_CORE=y | ||
| 249 | CONFIG_PCSPKR_PLATFORM=y | ||
| 250 | CONFIG_BASE_FULL=y | ||
| 251 | CONFIG_FUTEX=y | ||
| 252 | CONFIG_EPOLL=y | ||
| 253 | CONFIG_SIGNALFD=y | ||
| 254 | CONFIG_TIMERFD=y | ||
| 255 | CONFIG_EVENTFD=y | ||
| 256 | CONFIG_SHMEM=y | ||
| 257 | CONFIG_AIO=y | ||
| 258 | |||
| 259 | # | ||
| 260 | # Kernel Performance Events And Counters | ||
| 261 | # | ||
| 262 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 263 | CONFIG_PCI_QUIRKS=y | ||
| 264 | CONFIG_COMPAT_BRK=y | ||
| 265 | CONFIG_SLAB=y | ||
| 266 | # CONFIG_SLUB is not set | ||
| 267 | # CONFIG_SLOB is not set | ||
| 268 | CONFIG_PROFILING=y | ||
| 269 | # CONFIG_OPROFILE is not set | ||
| 270 | CONFIG_HAVE_OPROFILE=y | ||
| 271 | |||
| 272 | # | ||
| 273 | # GCOV-based kernel profiling | ||
| 274 | # | ||
| 275 | # CONFIG_GCOV_KERNEL is not set | ||
| 276 | # CONFIG_SLOW_WORK is not set | ||
| 277 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
| 278 | CONFIG_SLABINFO=y | ||
| 279 | CONFIG_RT_MUTEXES=y | ||
| 280 | CONFIG_BASE_SMALL=0 | ||
| 281 | CONFIG_MODULES=y | ||
| 282 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 283 | CONFIG_MODULE_UNLOAD=y | ||
| 284 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 285 | # CONFIG_MODVERSIONS is not set | ||
| 286 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 287 | CONFIG_BLOCK=y | ||
| 288 | CONFIG_LBDAF=y | ||
| 289 | # CONFIG_BLK_DEV_BSG is not set | ||
| 290 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 291 | |||
| 292 | # | ||
| 293 | # IO Schedulers | ||
| 294 | # | ||
| 295 | CONFIG_IOSCHED_NOOP=y | ||
| 296 | CONFIG_IOSCHED_DEADLINE=y | ||
| 297 | CONFIG_IOSCHED_CFQ=y | ||
| 298 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 299 | CONFIG_DEFAULT_CFQ=y | ||
| 300 | # CONFIG_DEFAULT_NOOP is not set | ||
| 301 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
| 302 | # CONFIG_INLINE_SPIN_TRYLOCK is not set | ||
| 303 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set | ||
| 304 | # CONFIG_INLINE_SPIN_LOCK is not set | ||
| 305 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | ||
| 306 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | ||
| 307 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | ||
| 308 | CONFIG_INLINE_SPIN_UNLOCK=y | ||
| 309 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | ||
| 310 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y | ||
| 311 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | ||
| 312 | # CONFIG_INLINE_READ_TRYLOCK is not set | ||
| 313 | # CONFIG_INLINE_READ_LOCK is not set | ||
| 314 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
| 315 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
| 316 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
| 317 | CONFIG_INLINE_READ_UNLOCK=y | ||
| 318 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
| 319 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
| 320 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
| 321 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
| 322 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
| 323 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
| 324 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
| 325 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
| 326 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
| 327 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
| 328 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
| 329 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
| 330 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
| 331 | # CONFIG_FREEZER is not set | ||
| 332 | |||
| 333 | # | ||
| 334 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | ||
| 335 | # | ||
| 336 | CONFIG_HW_HAS_PCI=y | ||
| 337 | CONFIG_PCI=y | ||
| 338 | CONFIG_PCI_DOMAINS=y | ||
| 339 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 340 | # CONFIG_PCI_STUB is not set | ||
| 341 | # CONFIG_PCI_IOV is not set | ||
| 342 | CONFIG_MMU=y | ||
| 343 | # CONFIG_PCCARD is not set | ||
| 344 | # CONFIG_HOTPLUG_PCI is not set | ||
| 345 | |||
| 346 | # | ||
| 347 | # Executable file formats | ||
| 348 | # | ||
| 349 | CONFIG_BINFMT_ELF=y | ||
| 350 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 351 | # CONFIG_HAVE_AOUT is not set | ||
| 352 | CONFIG_BINFMT_MISC=m | ||
| 353 | CONFIG_TRAD_SIGNALS=y | ||
| 354 | |||
| 355 | # | ||
| 356 | # Power management options | ||
| 357 | # | ||
| 358 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
| 359 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
| 360 | # CONFIG_PM is not set | ||
| 361 | CONFIG_NET=y | ||
| 362 | |||
| 363 | # | ||
| 364 | # Networking options | ||
| 365 | # | ||
| 366 | CONFIG_PACKET=y | ||
| 367 | CONFIG_UNIX=y | ||
| 368 | # CONFIG_NET_KEY is not set | ||
| 369 | CONFIG_INET=y | ||
| 370 | CONFIG_IP_MULTICAST=y | ||
| 371 | CONFIG_IP_ADVANCED_ROUTER=y | ||
| 372 | CONFIG_ASK_IP_FIB_HASH=y | ||
| 373 | # CONFIG_IP_FIB_TRIE is not set | ||
| 374 | CONFIG_IP_FIB_HASH=y | ||
| 375 | CONFIG_IP_MULTIPLE_TABLES=y | ||
| 376 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
| 377 | CONFIG_IP_ROUTE_VERBOSE=y | ||
| 378 | CONFIG_IP_PNP=y | ||
| 379 | # CONFIG_IP_PNP_DHCP is not set | ||
| 380 | CONFIG_IP_PNP_BOOTP=y | ||
| 381 | # CONFIG_IP_PNP_RARP is not set | ||
| 382 | # CONFIG_NET_IPIP is not set | ||
| 383 | # CONFIG_NET_IPGRE is not set | ||
| 384 | # CONFIG_IP_MROUTE is not set | ||
| 385 | # CONFIG_ARPD is not set | ||
| 386 | CONFIG_SYN_COOKIES=y | ||
| 387 | # CONFIG_INET_AH is not set | ||
| 388 | # CONFIG_INET_ESP is not set | ||
| 389 | # CONFIG_INET_IPCOMP is not set | ||
| 390 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 391 | # CONFIG_INET_TUNNEL is not set | ||
| 392 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 393 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 394 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 395 | CONFIG_INET_LRO=y | ||
| 396 | CONFIG_INET_DIAG=y | ||
| 397 | CONFIG_INET_TCP_DIAG=y | ||
| 398 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 399 | CONFIG_TCP_CONG_CUBIC=y | ||
| 400 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 401 | # CONFIG_TCP_MD5SIG is not set | ||
| 402 | # CONFIG_IPV6 is not set | ||
| 403 | CONFIG_NETWORK_SECMARK=y | ||
| 404 | CONFIG_NETFILTER=y | ||
| 405 | # CONFIG_NETFILTER_DEBUG is not set | ||
| 406 | CONFIG_NETFILTER_ADVANCED=y | ||
| 407 | CONFIG_BRIDGE_NETFILTER=y | ||
| 408 | |||
| 409 | # | ||
| 410 | # Core Netfilter Configuration | ||
| 411 | # | ||
| 412 | CONFIG_NETFILTER_NETLINK=m | ||
| 413 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
| 414 | CONFIG_NETFILTER_NETLINK_LOG=m | ||
| 415 | # CONFIG_NF_CONNTRACK is not set | ||
| 416 | # CONFIG_NETFILTER_TPROXY is not set | ||
| 417 | CONFIG_NETFILTER_XTABLES=m | ||
| 418 | |||
| 419 | # | ||
| 420 | # Xtables combined modules | ||
| 421 | # | ||
| 422 | CONFIG_NETFILTER_XT_MARK=m | ||
| 423 | |||
| 424 | # | ||
| 425 | # Xtables targets | ||
| 426 | # | ||
| 427 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
| 428 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | ||
| 429 | CONFIG_NETFILTER_XT_TARGET_HL=m | ||
| 430 | # CONFIG_NETFILTER_XT_TARGET_LED is not set | ||
| 431 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
| 432 | # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set | ||
| 433 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
| 434 | # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set | ||
| 435 | # CONFIG_NETFILTER_XT_TARGET_TEE is not set | ||
| 436 | # CONFIG_NETFILTER_XT_TARGET_TRACE is not set | ||
| 437 | CONFIG_NETFILTER_XT_TARGET_SECMARK=m | ||
| 438 | # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set | ||
| 439 | # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set | ||
| 440 | |||
| 441 | # | ||
| 442 | # Xtables matches | ||
| 443 | # | ||
| 444 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
| 445 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | ||
| 446 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | ||
| 447 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
| 448 | # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set | ||
| 449 | CONFIG_NETFILTER_XT_MATCH_HL=m | ||
| 450 | # CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set | ||
| 451 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
| 452 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
| 453 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
| 454 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
| 455 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
| 456 | # CONFIG_NETFILTER_XT_MATCH_OSF is not set | ||
| 457 | # CONFIG_NETFILTER_XT_MATCH_OWNER is not set | ||
| 458 | CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m | ||
| 459 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
| 460 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
| 461 | # CONFIG_NETFILTER_XT_MATCH_RATEEST is not set | ||
| 462 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
| 463 | # CONFIG_NETFILTER_XT_MATCH_RECENT is not set | ||
| 464 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
| 465 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
| 466 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
| 467 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
| 468 | # CONFIG_NETFILTER_XT_MATCH_TIME is not set | ||
| 469 | # CONFIG_NETFILTER_XT_MATCH_U32 is not set | ||
| 470 | CONFIG_IP_VS=m | ||
| 471 | # CONFIG_IP_VS_DEBUG is not set | ||
| 472 | CONFIG_IP_VS_TAB_BITS=12 | ||
| 473 | |||
| 474 | # | ||
| 475 | # IPVS transport protocol load balancing support | ||
| 476 | # | ||
| 477 | CONFIG_IP_VS_PROTO_TCP=y | ||
| 478 | CONFIG_IP_VS_PROTO_UDP=y | ||
| 479 | CONFIG_IP_VS_PROTO_AH_ESP=y | ||
| 480 | CONFIG_IP_VS_PROTO_ESP=y | ||
| 481 | CONFIG_IP_VS_PROTO_AH=y | ||
| 482 | # CONFIG_IP_VS_PROTO_SCTP is not set | ||
| 483 | |||
| 484 | # | ||
| 485 | # IPVS scheduler | ||
| 486 | # | ||
| 487 | CONFIG_IP_VS_RR=m | ||
| 488 | CONFIG_IP_VS_WRR=m | ||
| 489 | CONFIG_IP_VS_LC=m | ||
| 490 | CONFIG_IP_VS_WLC=m | ||
| 491 | CONFIG_IP_VS_LBLC=m | ||
| 492 | CONFIG_IP_VS_LBLCR=m | ||
| 493 | CONFIG_IP_VS_DH=m | ||
| 494 | CONFIG_IP_VS_SH=m | ||
| 495 | CONFIG_IP_VS_SED=m | ||
| 496 | CONFIG_IP_VS_NQ=m | ||
| 497 | |||
| 498 | # | ||
| 499 | # IPVS application helper | ||
| 500 | # | ||
| 501 | CONFIG_IP_VS_FTP=m | ||
| 502 | |||
| 503 | # | ||
| 504 | # IP: Netfilter Configuration | ||
| 505 | # | ||
| 506 | # CONFIG_NF_DEFRAG_IPV4 is not set | ||
| 507 | CONFIG_IP_NF_QUEUE=m | ||
| 508 | CONFIG_IP_NF_IPTABLES=m | ||
| 509 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
| 510 | CONFIG_IP_NF_MATCH_AH=m | ||
| 511 | CONFIG_IP_NF_MATCH_ECN=m | ||
| 512 | CONFIG_IP_NF_MATCH_TTL=m | ||
| 513 | CONFIG_IP_NF_FILTER=m | ||
| 514 | CONFIG_IP_NF_TARGET_REJECT=m | ||
| 515 | CONFIG_IP_NF_TARGET_LOG=m | ||
| 516 | CONFIG_IP_NF_TARGET_ULOG=m | ||
| 517 | CONFIG_IP_NF_MANGLE=m | ||
| 518 | CONFIG_IP_NF_TARGET_ECN=m | ||
| 519 | CONFIG_IP_NF_TARGET_TTL=m | ||
| 520 | CONFIG_IP_NF_RAW=m | ||
| 521 | CONFIG_IP_NF_ARPTABLES=m | ||
| 522 | CONFIG_IP_NF_ARPFILTER=m | ||
| 523 | CONFIG_IP_NF_ARP_MANGLE=m | ||
| 524 | |||
| 525 | # | ||
| 526 | # DECnet: Netfilter Configuration | ||
| 527 | # | ||
| 528 | CONFIG_DECNET_NF_GRABULATOR=m | ||
| 529 | CONFIG_BRIDGE_NF_EBTABLES=m | ||
| 530 | CONFIG_BRIDGE_EBT_BROUTE=m | ||
| 531 | CONFIG_BRIDGE_EBT_T_FILTER=m | ||
| 532 | CONFIG_BRIDGE_EBT_T_NAT=m | ||
| 533 | CONFIG_BRIDGE_EBT_802_3=m | ||
| 534 | CONFIG_BRIDGE_EBT_AMONG=m | ||
| 535 | CONFIG_BRIDGE_EBT_ARP=m | ||
| 536 | CONFIG_BRIDGE_EBT_IP=m | ||
| 537 | CONFIG_BRIDGE_EBT_LIMIT=m | ||
| 538 | CONFIG_BRIDGE_EBT_MARK=m | ||
| 539 | CONFIG_BRIDGE_EBT_PKTTYPE=m | ||
| 540 | CONFIG_BRIDGE_EBT_STP=m | ||
| 541 | CONFIG_BRIDGE_EBT_VLAN=m | ||
| 542 | CONFIG_BRIDGE_EBT_ARPREPLY=m | ||
| 543 | CONFIG_BRIDGE_EBT_DNAT=m | ||
| 544 | CONFIG_BRIDGE_EBT_MARK_T=m | ||
| 545 | CONFIG_BRIDGE_EBT_REDIRECT=m | ||
| 546 | CONFIG_BRIDGE_EBT_SNAT=m | ||
| 547 | CONFIG_BRIDGE_EBT_LOG=m | ||
| 548 | CONFIG_BRIDGE_EBT_ULOG=m | ||
| 549 | # CONFIG_BRIDGE_EBT_NFLOG is not set | ||
| 550 | CONFIG_IP_DCCP=m | ||
| 551 | CONFIG_INET_DCCP_DIAG=m | ||
| 552 | |||
| 553 | # | ||
| 554 | # DCCP CCIDs Configuration (EXPERIMENTAL) | ||
| 555 | # | ||
| 556 | # CONFIG_IP_DCCP_CCID2_DEBUG is not set | ||
| 557 | CONFIG_IP_DCCP_CCID3=y | ||
| 558 | # CONFIG_IP_DCCP_CCID3_DEBUG is not set | ||
| 559 | CONFIG_IP_DCCP_CCID3_RTO=100 | ||
| 560 | CONFIG_IP_DCCP_TFRC_LIB=y | ||
| 561 | CONFIG_IP_SCTP=m | ||
| 562 | # CONFIG_SCTP_DBG_MSG is not set | ||
| 563 | # CONFIG_SCTP_DBG_OBJCNT is not set | ||
| 564 | # CONFIG_SCTP_HMAC_NONE is not set | ||
| 565 | # CONFIG_SCTP_HMAC_SHA1 is not set | ||
| 566 | CONFIG_SCTP_HMAC_MD5=y | ||
| 567 | # CONFIG_RDS is not set | ||
| 568 | CONFIG_TIPC=m | ||
| 569 | # CONFIG_TIPC_ADVANCED is not set | ||
| 570 | # CONFIG_TIPC_DEBUG is not set | ||
| 571 | CONFIG_ATM=y | ||
| 572 | CONFIG_ATM_CLIP=y | ||
| 573 | # CONFIG_ATM_CLIP_NO_ICMP is not set | ||
| 574 | CONFIG_ATM_LANE=m | ||
| 575 | CONFIG_ATM_MPOA=m | ||
| 576 | CONFIG_ATM_BR2684=m | ||
| 577 | # CONFIG_ATM_BR2684_IPFILTER is not set | ||
| 578 | # CONFIG_L2TP is not set | ||
| 579 | CONFIG_STP=m | ||
| 580 | CONFIG_BRIDGE=m | ||
| 581 | CONFIG_BRIDGE_IGMP_SNOOPING=y | ||
| 582 | # CONFIG_NET_DSA is not set | ||
| 583 | CONFIG_VLAN_8021Q=m | ||
| 584 | # CONFIG_VLAN_8021Q_GVRP is not set | ||
| 585 | CONFIG_DECNET=m | ||
| 586 | # CONFIG_DECNET_ROUTER is not set | ||
| 587 | CONFIG_LLC=m | ||
| 588 | CONFIG_LLC2=m | ||
| 589 | CONFIG_IPX=m | ||
| 590 | # CONFIG_IPX_INTERN is not set | ||
| 591 | CONFIG_ATALK=m | ||
| 592 | CONFIG_DEV_APPLETALK=m | ||
| 593 | CONFIG_IPDDP=m | ||
| 594 | CONFIG_IPDDP_ENCAP=y | ||
| 595 | CONFIG_IPDDP_DECAP=y | ||
| 596 | CONFIG_X25=m | ||
| 597 | CONFIG_LAPB=m | ||
| 598 | CONFIG_ECONET=m | ||
| 599 | CONFIG_ECONET_AUNUDP=y | ||
| 600 | CONFIG_ECONET_NATIVE=y | ||
| 601 | CONFIG_WAN_ROUTER=m | ||
| 602 | # CONFIG_PHONET is not set | ||
| 603 | # CONFIG_IEEE802154 is not set | ||
| 604 | CONFIG_NET_SCHED=y | ||
| 605 | |||
| 606 | # | ||
| 607 | # Queueing/Scheduling | ||
| 608 | # | ||
| 609 | CONFIG_NET_SCH_CBQ=m | ||
| 610 | CONFIG_NET_SCH_HTB=m | ||
| 611 | CONFIG_NET_SCH_HFSC=m | ||
| 612 | CONFIG_NET_SCH_ATM=m | ||
| 613 | CONFIG_NET_SCH_PRIO=m | ||
| 614 | # CONFIG_NET_SCH_MULTIQ is not set | ||
| 615 | CONFIG_NET_SCH_RED=m | ||
| 616 | CONFIG_NET_SCH_SFQ=m | ||
| 617 | CONFIG_NET_SCH_TEQL=m | ||
| 618 | CONFIG_NET_SCH_TBF=m | ||
| 619 | CONFIG_NET_SCH_GRED=m | ||
| 620 | CONFIG_NET_SCH_DSMARK=m | ||
| 621 | CONFIG_NET_SCH_NETEM=m | ||
| 622 | # CONFIG_NET_SCH_DRR is not set | ||
| 623 | CONFIG_NET_SCH_INGRESS=m | ||
| 624 | |||
| 625 | # | ||
| 626 | # Classification | ||
| 627 | # | ||
| 628 | CONFIG_NET_CLS=y | ||
| 629 | CONFIG_NET_CLS_BASIC=m | ||
| 630 | CONFIG_NET_CLS_TCINDEX=m | ||
| 631 | CONFIG_NET_CLS_ROUTE4=m | ||
| 632 | CONFIG_NET_CLS_ROUTE=y | ||
| 633 | CONFIG_NET_CLS_FW=m | ||
| 634 | CONFIG_NET_CLS_U32=m | ||
| 635 | # CONFIG_CLS_U32_PERF is not set | ||
| 636 | CONFIG_CLS_U32_MARK=y | ||
| 637 | CONFIG_NET_CLS_RSVP=m | ||
| 638 | CONFIG_NET_CLS_RSVP6=m | ||
| 639 | # CONFIG_NET_CLS_FLOW is not set | ||
| 640 | CONFIG_NET_EMATCH=y | ||
| 641 | CONFIG_NET_EMATCH_STACK=32 | ||
| 642 | CONFIG_NET_EMATCH_CMP=m | ||
| 643 | CONFIG_NET_EMATCH_NBYTE=m | ||
| 644 | CONFIG_NET_EMATCH_U32=m | ||
| 645 | CONFIG_NET_EMATCH_META=m | ||
| 646 | CONFIG_NET_EMATCH_TEXT=m | ||
| 647 | CONFIG_NET_CLS_ACT=y | ||
| 648 | CONFIG_NET_ACT_POLICE=y | ||
| 649 | # CONFIG_NET_ACT_GACT is not set | ||
| 650 | # CONFIG_NET_ACT_MIRRED is not set | ||
| 651 | # CONFIG_NET_ACT_IPT is not set | ||
| 652 | # CONFIG_NET_ACT_NAT is not set | ||
| 653 | # CONFIG_NET_ACT_PEDIT is not set | ||
| 654 | # CONFIG_NET_ACT_SIMP is not set | ||
| 655 | # CONFIG_NET_ACT_SKBEDIT is not set | ||
| 656 | # CONFIG_NET_CLS_IND is not set | ||
| 657 | CONFIG_NET_SCH_FIFO=y | ||
| 658 | # CONFIG_DCB is not set | ||
| 659 | |||
| 660 | # | ||
| 661 | # Network testing | ||
| 662 | # | ||
| 663 | CONFIG_NET_PKTGEN=m | ||
| 664 | CONFIG_HAMRADIO=y | ||
| 665 | |||
| 666 | # | ||
| 667 | # Packet Radio protocols | ||
| 668 | # | ||
| 669 | CONFIG_AX25=m | ||
| 670 | # CONFIG_AX25_DAMA_SLAVE is not set | ||
| 671 | CONFIG_NETROM=m | ||
| 672 | CONFIG_ROSE=m | ||
| 673 | |||
| 674 | # | ||
| 675 | # AX.25 network device drivers | ||
| 676 | # | ||
| 677 | CONFIG_MKISS=m | ||
| 678 | CONFIG_6PACK=m | ||
| 679 | CONFIG_BPQETHER=m | ||
| 680 | CONFIG_BAYCOM_SER_FDX=m | ||
| 681 | CONFIG_BAYCOM_SER_HDX=m | ||
| 682 | CONFIG_YAM=m | ||
| 683 | # CONFIG_CAN is not set | ||
| 684 | # CONFIG_IRDA is not set | ||
| 685 | # CONFIG_BT is not set | ||
| 686 | # CONFIG_AF_RXRPC is not set | ||
| 687 | CONFIG_FIB_RULES=y | ||
| 688 | CONFIG_WIRELESS=y | ||
| 689 | CONFIG_WEXT_CORE=y | ||
| 690 | CONFIG_WEXT_PROC=y | ||
| 691 | CONFIG_CFG80211=y | ||
| 692 | # CONFIG_NL80211_TESTMODE is not set | ||
| 693 | # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set | ||
| 694 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
| 695 | CONFIG_CFG80211_DEFAULT_PS=y | ||
| 696 | # CONFIG_CFG80211_DEBUGFS is not set | ||
| 697 | # CONFIG_CFG80211_INTERNAL_REGDB is not set | ||
| 698 | CONFIG_CFG80211_WEXT=y | ||
| 699 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
| 700 | # CONFIG_LIB80211 is not set | ||
| 701 | CONFIG_MAC80211=y | ||
| 702 | CONFIG_MAC80211_HAS_RC=y | ||
| 703 | # CONFIG_MAC80211_RC_PID is not set | ||
| 704 | CONFIG_MAC80211_RC_MINSTREL=y | ||
| 705 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||
| 706 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
| 707 | CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||
| 708 | # CONFIG_MAC80211_MESH is not set | ||
| 709 | CONFIG_MAC80211_LEDS=y | ||
| 710 | # CONFIG_MAC80211_DEBUGFS is not set | ||
| 711 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
| 712 | # CONFIG_WIMAX is not set | ||
| 713 | # CONFIG_RFKILL is not set | ||
| 714 | # CONFIG_NET_9P is not set | ||
| 715 | # CONFIG_CAIF is not set | ||
| 716 | |||
| 717 | # | ||
| 718 | # Device Drivers | ||
| 719 | # | ||
| 720 | |||
| 721 | # | ||
| 722 | # Generic Driver Options | ||
| 723 | # | ||
| 724 | CONFIG_UEVENT_HELPER_PATH="" | ||
| 725 | # CONFIG_DEVTMPFS is not set | ||
| 726 | CONFIG_STANDALONE=y | ||
| 727 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 728 | CONFIG_FW_LOADER=y | ||
| 729 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 730 | CONFIG_EXTRA_FIRMWARE="" | ||
| 731 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 732 | # CONFIG_CONNECTOR is not set | ||
| 733 | CONFIG_MTD=y | ||
| 734 | # CONFIG_MTD_DEBUG is not set | ||
| 735 | # CONFIG_MTD_TESTS is not set | ||
| 736 | # CONFIG_MTD_CONCAT is not set | ||
| 737 | CONFIG_MTD_PARTITIONS=y | ||
| 738 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 739 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
| 740 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 741 | |||
| 742 | # | ||
| 743 | # User Modules And Translation Layers | ||
| 744 | # | ||
| 745 | CONFIG_MTD_CHAR=y | ||
| 746 | CONFIG_MTD_BLKDEVS=y | ||
| 747 | CONFIG_MTD_BLOCK=y | ||
| 748 | # CONFIG_FTL is not set | ||
| 749 | # CONFIG_NFTL is not set | ||
| 750 | # CONFIG_INFTL is not set | ||
| 751 | # CONFIG_RFD_FTL is not set | ||
| 752 | # CONFIG_SSFDC is not set | ||
| 753 | # CONFIG_SM_FTL is not set | ||
| 754 | # CONFIG_MTD_OOPS is not set | ||
| 755 | |||
| 756 | # | ||
| 757 | # RAM/ROM/Flash chip drivers | ||
| 758 | # | ||
| 759 | CONFIG_MTD_CFI=y | ||
| 760 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 761 | CONFIG_MTD_GEN_PROBE=y | ||
| 762 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 763 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 764 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 765 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 766 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 767 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 768 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 769 | CONFIG_MTD_CFI_I1=y | ||
| 770 | CONFIG_MTD_CFI_I2=y | ||
| 771 | # CONFIG_MTD_CFI_I4 is not set | ||
| 772 | # CONFIG_MTD_CFI_I8 is not set | ||
| 773 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 774 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 775 | # CONFIG_MTD_CFI_STAA is not set | ||
| 776 | CONFIG_MTD_CFI_UTIL=y | ||
| 777 | CONFIG_MTD_RAM=m | ||
| 778 | # CONFIG_MTD_ROM is not set | ||
| 779 | # CONFIG_MTD_ABSENT is not set | ||
| 780 | |||
| 781 | # | ||
| 782 | # Mapping drivers for chip access | ||
| 783 | # | ||
| 784 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
| 785 | CONFIG_MTD_PHYSMAP=y | ||
| 786 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
| 787 | # CONFIG_MTD_PCI is not set | ||
| 788 | # CONFIG_MTD_GPIO_ADDR is not set | ||
| 789 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
| 790 | # CONFIG_MTD_PLATRAM is not set | ||
| 791 | |||
| 792 | # | ||
| 793 | # Self-contained MTD device drivers | ||
| 794 | # | ||
| 795 | # CONFIG_MTD_PMC551 is not set | ||
| 796 | # CONFIG_MTD_SLRAM is not set | ||
| 797 | # CONFIG_MTD_PHRAM is not set | ||
| 798 | # CONFIG_MTD_MTDRAM is not set | ||
| 799 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 800 | |||
| 801 | # | ||
| 802 | # Disk-On-Chip Device Drivers | ||
| 803 | # | ||
| 804 | # CONFIG_MTD_DOC2000 is not set | ||
| 805 | # CONFIG_MTD_DOC2001 is not set | ||
| 806 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 807 | # CONFIG_MTD_NAND is not set | ||
| 808 | # CONFIG_MTD_ONENAND is not set | ||
| 809 | |||
| 810 | # | ||
| 811 | # LPDDR flash memory drivers | ||
| 812 | # | ||
| 813 | # CONFIG_MTD_LPDDR is not set | ||
| 814 | |||
| 815 | # | ||
| 816 | # UBI - Unsorted block images | ||
| 817 | # | ||
| 818 | # CONFIG_MTD_UBI is not set | ||
| 819 | # CONFIG_PARPORT is not set | ||
| 820 | CONFIG_BLK_DEV=y | ||
| 821 | # CONFIG_BLK_CPQ_DA is not set | ||
| 822 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 823 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 824 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 825 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 826 | CONFIG_BLK_DEV_LOOP=y | ||
| 827 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
| 828 | |||
| 829 | # | ||
| 830 | # DRBD disabled because PROC_FS, INET or CONNECTOR not selected | ||
| 831 | # | ||
| 832 | # CONFIG_BLK_DEV_NBD is not set | ||
| 833 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 834 | # CONFIG_BLK_DEV_UB is not set | ||
| 835 | CONFIG_BLK_DEV_RAM=y | ||
| 836 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 837 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
| 838 | # CONFIG_BLK_DEV_XIP is not set | ||
| 839 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 840 | # CONFIG_ATA_OVER_ETH is not set | ||
| 841 | # CONFIG_BLK_DEV_HD is not set | ||
| 842 | CONFIG_MISC_DEVICES=y | ||
| 843 | # CONFIG_AD525X_DPOT is not set | ||
| 844 | # CONFIG_PHANTOM is not set | ||
| 845 | # CONFIG_SGI_IOC4 is not set | ||
| 846 | CONFIG_TIFM_CORE=m | ||
| 847 | CONFIG_TIFM_7XX1=m | ||
| 848 | # CONFIG_ICS932S401 is not set | ||
| 849 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 850 | # CONFIG_HP_ILO is not set | ||
| 851 | # CONFIG_ISL29003 is not set | ||
| 852 | # CONFIG_SENSORS_TSL2550 is not set | ||
| 853 | # CONFIG_DS1682 is not set | ||
| 854 | # CONFIG_C2PORT is not set | ||
| 855 | |||
| 856 | # | ||
| 857 | # EEPROM support | ||
| 858 | # | ||
| 859 | # CONFIG_EEPROM_AT24 is not set | ||
| 860 | # CONFIG_EEPROM_LEGACY is not set | ||
| 861 | # CONFIG_EEPROM_MAX6875 is not set | ||
| 862 | # CONFIG_EEPROM_93CX6 is not set | ||
| 863 | # CONFIG_CB710_CORE is not set | ||
| 864 | CONFIG_HAVE_IDE=y | ||
| 865 | # CONFIG_IDE is not set | ||
| 866 | |||
| 867 | # | ||
| 868 | # SCSI device support | ||
| 869 | # | ||
| 870 | CONFIG_SCSI_MOD=m | ||
| 871 | # CONFIG_RAID_ATTRS is not set | ||
| 872 | CONFIG_SCSI=m | ||
| 873 | CONFIG_SCSI_DMA=y | ||
| 874 | # CONFIG_SCSI_TGT is not set | ||
| 875 | CONFIG_SCSI_NETLINK=y | ||
| 876 | CONFIG_SCSI_PROC_FS=y | ||
| 877 | |||
| 878 | # | ||
| 879 | # SCSI support type (disk, tape, CD-ROM) | ||
| 880 | # | ||
| 881 | CONFIG_BLK_DEV_SD=m | ||
| 882 | # CONFIG_CHR_DEV_ST is not set | ||
| 883 | # CONFIG_CHR_DEV_OSST is not set | ||
| 884 | # CONFIG_BLK_DEV_SR is not set | ||
| 885 | CONFIG_CHR_DEV_SG=m | ||
| 886 | # CONFIG_CHR_DEV_SCH is not set | ||
| 887 | CONFIG_SCSI_MULTI_LUN=y | ||
| 888 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 889 | CONFIG_SCSI_LOGGING=y | ||
| 890 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 891 | CONFIG_SCSI_WAIT_SCAN=m | ||
| 892 | |||
| 893 | # | ||
| 894 | # SCSI Transports | ||
| 895 | # | ||
| 896 | CONFIG_SCSI_SPI_ATTRS=m | ||
| 897 | CONFIG_SCSI_FC_ATTRS=m | ||
| 898 | CONFIG_SCSI_ISCSI_ATTRS=m | ||
| 899 | CONFIG_SCSI_SAS_ATTRS=m | ||
| 900 | CONFIG_SCSI_SAS_LIBSAS=m | ||
| 901 | CONFIG_SCSI_SAS_HOST_SMP=y | ||
| 902 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
| 903 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 904 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 905 | # CONFIG_SCSI_DH is not set | ||
| 906 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
| 907 | # CONFIG_ATA is not set | ||
| 908 | # CONFIG_MD is not set | ||
| 909 | # CONFIG_FUSION is not set | ||
| 910 | |||
| 911 | # | ||
| 912 | # IEEE 1394 (FireWire) support | ||
| 913 | # | ||
| 914 | |||
| 915 | # | ||
| 916 | # You can enable one or both FireWire driver stacks. | ||
| 917 | # | ||
| 918 | |||
| 919 | # | ||
| 920 | # The newer stack is recommended. | ||
| 921 | # | ||
| 922 | # CONFIG_FIREWIRE is not set | ||
| 923 | # CONFIG_IEEE1394 is not set | ||
| 924 | # CONFIG_I2O is not set | ||
| 925 | CONFIG_NETDEVICES=y | ||
| 926 | # CONFIG_IFB is not set | ||
| 927 | # CONFIG_DUMMY is not set | ||
| 928 | # CONFIG_BONDING is not set | ||
| 929 | # CONFIG_MACVLAN is not set | ||
| 930 | # CONFIG_EQUALIZER is not set | ||
| 931 | # CONFIG_TUN is not set | ||
| 932 | # CONFIG_VETH is not set | ||
| 933 | # CONFIG_ARCNET is not set | ||
| 934 | CONFIG_PHYLIB=y | ||
| 935 | |||
| 936 | # | ||
| 937 | # MII PHY device drivers | ||
| 938 | # | ||
| 939 | CONFIG_MARVELL_PHY=m | ||
| 940 | CONFIG_DAVICOM_PHY=m | ||
| 941 | CONFIG_QSEMI_PHY=m | ||
| 942 | CONFIG_LXT_PHY=m | ||
| 943 | CONFIG_CICADA_PHY=m | ||
| 944 | CONFIG_VITESSE_PHY=m | ||
| 945 | CONFIG_SMSC_PHY=m | ||
| 946 | # CONFIG_BROADCOM_PHY is not set | ||
| 947 | # CONFIG_ICPLUS_PHY is not set | ||
| 948 | # CONFIG_REALTEK_PHY is not set | ||
| 949 | # CONFIG_NATIONAL_PHY is not set | ||
| 950 | # CONFIG_STE10XP is not set | ||
| 951 | # CONFIG_LSI_ET1011C_PHY is not set | ||
| 952 | # CONFIG_MICREL_PHY is not set | ||
| 953 | # CONFIG_FIXED_PHY is not set | ||
| 954 | # CONFIG_MDIO_BITBANG is not set | ||
| 955 | CONFIG_NET_ETHERNET=y | ||
| 956 | CONFIG_MII=y | ||
| 957 | # CONFIG_AX88796 is not set | ||
| 958 | CONFIG_MIPS_AU1X00_ENET=y | ||
| 959 | # CONFIG_HAPPYMEAL is not set | ||
| 960 | # CONFIG_SUNGEM is not set | ||
| 961 | # CONFIG_CASSINI is not set | ||
| 962 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 963 | # CONFIG_SMC91X is not set | ||
| 964 | # CONFIG_DM9000 is not set | ||
| 965 | # CONFIG_ETHOC is not set | ||
| 966 | # CONFIG_SMSC911X is not set | ||
| 967 | # CONFIG_DNET is not set | ||
| 968 | # CONFIG_NET_TULIP is not set | ||
| 969 | # CONFIG_HP100 is not set | ||
| 970 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 971 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 972 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 973 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 974 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 975 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 976 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 977 | # CONFIG_NET_PCI is not set | ||
| 978 | # CONFIG_B44 is not set | ||
| 979 | # CONFIG_KS8842 is not set | ||
| 980 | # CONFIG_KS8851_MLL is not set | ||
| 981 | # CONFIG_ATL2 is not set | ||
| 982 | # CONFIG_NETDEV_1000 is not set | ||
| 983 | # CONFIG_NETDEV_10000 is not set | ||
| 984 | # CONFIG_TR is not set | ||
| 985 | CONFIG_WLAN=y | ||
| 986 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
| 987 | # CONFIG_ATMEL is not set | ||
| 988 | # CONFIG_AT76C50X_USB is not set | ||
| 989 | # CONFIG_PRISM54 is not set | ||
| 990 | # CONFIG_USB_ZD1201 is not set | ||
| 991 | # CONFIG_USB_NET_RNDIS_WLAN is not set | ||
| 992 | # CONFIG_RTL8180 is not set | ||
| 993 | # CONFIG_RTL8187 is not set | ||
| 994 | # CONFIG_ADM8211 is not set | ||
| 995 | # CONFIG_MAC80211_HWSIM is not set | ||
| 996 | # CONFIG_MWL8K is not set | ||
| 997 | CONFIG_ATH_COMMON=y | ||
| 998 | CONFIG_ATH_DEBUG=y | ||
| 999 | CONFIG_ATH5K=y | ||
| 1000 | CONFIG_ATH5K_DEBUG=y | ||
| 1001 | # CONFIG_ATH9K is not set | ||
| 1002 | # CONFIG_ATH9K_HTC is not set | ||
| 1003 | # CONFIG_AR9170_USB is not set | ||
| 1004 | # CONFIG_B43 is not set | ||
| 1005 | # CONFIG_B43LEGACY is not set | ||
| 1006 | # CONFIG_HOSTAP is not set | ||
| 1007 | # CONFIG_IPW2100 is not set | ||
| 1008 | # CONFIG_IPW2200 is not set | ||
| 1009 | # CONFIG_IWLWIFI is not set | ||
| 1010 | # CONFIG_LIBERTAS is not set | ||
| 1011 | # CONFIG_HERMES is not set | ||
| 1012 | # CONFIG_P54_COMMON is not set | ||
| 1013 | # CONFIG_RT2X00 is not set | ||
| 1014 | # CONFIG_WL12XX is not set | ||
| 1015 | # CONFIG_ZD1211RW is not set | ||
| 1016 | |||
| 1017 | # | ||
| 1018 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
| 1019 | # | ||
| 1020 | |||
| 1021 | # | ||
| 1022 | # USB Network Adapters | ||
| 1023 | # | ||
| 1024 | # CONFIG_USB_CATC is not set | ||
| 1025 | # CONFIG_USB_KAWETH is not set | ||
| 1026 | # CONFIG_USB_PEGASUS is not set | ||
| 1027 | # CONFIG_USB_RTL8150 is not set | ||
| 1028 | # CONFIG_USB_USBNET is not set | ||
| 1029 | # CONFIG_USB_IPHETH is not set | ||
| 1030 | CONFIG_WAN=y | ||
| 1031 | CONFIG_LANMEDIA=m | ||
| 1032 | CONFIG_HDLC=m | ||
| 1033 | CONFIG_HDLC_RAW=m | ||
| 1034 | CONFIG_HDLC_RAW_ETH=m | ||
| 1035 | CONFIG_HDLC_CISCO=m | ||
| 1036 | CONFIG_HDLC_FR=m | ||
| 1037 | CONFIG_HDLC_PPP=m | ||
| 1038 | CONFIG_HDLC_X25=m | ||
| 1039 | CONFIG_PCI200SYN=m | ||
| 1040 | CONFIG_WANXL=m | ||
| 1041 | # CONFIG_PC300TOO is not set | ||
| 1042 | CONFIG_FARSYNC=m | ||
| 1043 | CONFIG_DSCC4=m | ||
| 1044 | CONFIG_DSCC4_PCISYNC=y | ||
| 1045 | CONFIG_DSCC4_PCI_RST=y | ||
| 1046 | CONFIG_DLCI=m | ||
| 1047 | CONFIG_DLCI_MAX=8 | ||
| 1048 | CONFIG_WAN_ROUTER_DRIVERS=m | ||
| 1049 | CONFIG_CYCLADES_SYNC=m | ||
| 1050 | CONFIG_CYCLOMX_X25=y | ||
| 1051 | CONFIG_LAPBETHER=m | ||
| 1052 | CONFIG_X25_ASY=m | ||
| 1053 | CONFIG_ATM_DRIVERS=y | ||
| 1054 | # CONFIG_ATM_DUMMY is not set | ||
| 1055 | CONFIG_ATM_TCP=m | ||
| 1056 | CONFIG_ATM_LANAI=m | ||
| 1057 | CONFIG_ATM_ENI=m | ||
| 1058 | # CONFIG_ATM_ENI_DEBUG is not set | ||
| 1059 | # CONFIG_ATM_ENI_TUNE_BURST is not set | ||
| 1060 | CONFIG_ATM_FIRESTREAM=m | ||
| 1061 | CONFIG_ATM_ZATM=m | ||
| 1062 | # CONFIG_ATM_ZATM_DEBUG is not set | ||
| 1063 | CONFIG_ATM_NICSTAR=m | ||
| 1064 | # CONFIG_ATM_NICSTAR_USE_SUNI is not set | ||
| 1065 | # CONFIG_ATM_NICSTAR_USE_IDT77105 is not set | ||
| 1066 | CONFIG_ATM_IDT77252=m | ||
| 1067 | # CONFIG_ATM_IDT77252_DEBUG is not set | ||
| 1068 | # CONFIG_ATM_IDT77252_RCV_ALL is not set | ||
| 1069 | CONFIG_ATM_IDT77252_USE_SUNI=y | ||
| 1070 | CONFIG_ATM_AMBASSADOR=m | ||
| 1071 | # CONFIG_ATM_AMBASSADOR_DEBUG is not set | ||
| 1072 | CONFIG_ATM_HORIZON=m | ||
| 1073 | # CONFIG_ATM_HORIZON_DEBUG is not set | ||
| 1074 | CONFIG_ATM_IA=m | ||
| 1075 | # CONFIG_ATM_IA_DEBUG is not set | ||
| 1076 | CONFIG_ATM_FORE200E=m | ||
| 1077 | # CONFIG_ATM_FORE200E_USE_TASKLET is not set | ||
| 1078 | CONFIG_ATM_FORE200E_TX_RETRY=16 | ||
| 1079 | CONFIG_ATM_FORE200E_DEBUG=0 | ||
| 1080 | CONFIG_ATM_HE=m | ||
| 1081 | CONFIG_ATM_HE_USE_SUNI=y | ||
| 1082 | # CONFIG_ATM_SOLOS is not set | ||
| 1083 | # CONFIG_FDDI is not set | ||
| 1084 | # CONFIG_HIPPI is not set | ||
| 1085 | CONFIG_PPP=m | ||
| 1086 | CONFIG_PPP_MULTILINK=y | ||
| 1087 | CONFIG_PPP_FILTER=y | ||
| 1088 | CONFIG_PPP_ASYNC=m | ||
| 1089 | CONFIG_PPP_SYNC_TTY=m | ||
| 1090 | CONFIG_PPP_DEFLATE=m | ||
| 1091 | CONFIG_PPP_BSDCOMP=m | ||
| 1092 | CONFIG_PPP_MPPE=m | ||
| 1093 | CONFIG_PPPOE=m | ||
| 1094 | CONFIG_PPPOATM=m | ||
| 1095 | CONFIG_SLIP=m | ||
| 1096 | CONFIG_SLIP_COMPRESSED=y | ||
| 1097 | CONFIG_SLHC=m | ||
| 1098 | CONFIG_SLIP_SMART=y | ||
| 1099 | CONFIG_SLIP_MODE_SLIP6=y | ||
| 1100 | CONFIG_NET_FC=y | ||
| 1101 | CONFIG_NETCONSOLE=m | ||
| 1102 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
| 1103 | CONFIG_NETPOLL=y | ||
| 1104 | # CONFIG_NETPOLL_TRAP is not set | ||
| 1105 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 1106 | # CONFIG_VMXNET3 is not set | ||
| 1107 | # CONFIG_ISDN is not set | ||
| 1108 | # CONFIG_PHONE is not set | ||
| 1109 | |||
| 1110 | # | ||
| 1111 | # Input device support | ||
| 1112 | # | ||
| 1113 | CONFIG_INPUT=y | ||
| 1114 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 1115 | # CONFIG_INPUT_POLLDEV is not set | ||
| 1116 | # CONFIG_INPUT_SPARSEKMAP is not set | ||
| 1117 | |||
| 1118 | # | ||
| 1119 | # Userland interfaces | ||
| 1120 | # | ||
| 1121 | # CONFIG_INPUT_MOUSEDEV is not set | ||
| 1122 | # CONFIG_INPUT_JOYDEV is not set | ||
| 1123 | # CONFIG_INPUT_EVDEV is not set | ||
| 1124 | # CONFIG_INPUT_EVBUG is not set | ||
| 1125 | |||
| 1126 | # | ||
| 1127 | # Input Device Drivers | ||
| 1128 | # | ||
| 1129 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 1130 | # CONFIG_INPUT_MOUSE is not set | ||
| 1131 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 1132 | # CONFIG_INPUT_TABLET is not set | ||
| 1133 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 1134 | # CONFIG_INPUT_MISC is not set | ||
| 1135 | |||
| 1136 | # | ||
| 1137 | # Hardware I/O ports | ||
| 1138 | # | ||
| 1139 | # CONFIG_SERIO is not set | ||
| 1140 | # CONFIG_GAMEPORT is not set | ||
| 1141 | |||
| 1142 | # | ||
| 1143 | # Character devices | ||
| 1144 | # | ||
| 1145 | CONFIG_VT=y | ||
| 1146 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 1147 | CONFIG_VT_CONSOLE=y | ||
| 1148 | CONFIG_HW_CONSOLE=y | ||
| 1149 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
| 1150 | CONFIG_DEVKMEM=y | ||
| 1151 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 1152 | # CONFIG_N_GSM is not set | ||
| 1153 | # CONFIG_NOZOMI is not set | ||
| 1154 | |||
| 1155 | # | ||
| 1156 | # Serial drivers | ||
| 1157 | # | ||
| 1158 | CONFIG_SERIAL_8250=y | ||
| 1159 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 1160 | # CONFIG_SERIAL_8250_PCI is not set | ||
| 1161 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
| 1162 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 1163 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
| 1164 | |||
| 1165 | # | ||
| 1166 | # Non-8250 serial port support | ||
| 1167 | # | ||
| 1168 | CONFIG_SERIAL_CORE=y | ||
| 1169 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 1170 | # CONFIG_SERIAL_JSM is not set | ||
| 1171 | # CONFIG_SERIAL_TIMBERDALE is not set | ||
| 1172 | # CONFIG_SERIAL_ALTERA_JTAGUART is not set | ||
| 1173 | # CONFIG_SERIAL_ALTERA_UART is not set | ||
| 1174 | CONFIG_UNIX98_PTYS=y | ||
| 1175 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 1176 | CONFIG_LEGACY_PTYS=y | ||
| 1177 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 1178 | # CONFIG_IPMI_HANDLER is not set | ||
| 1179 | CONFIG_HW_RANDOM=y | ||
| 1180 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
| 1181 | # CONFIG_R3964 is not set | ||
| 1182 | # CONFIG_APPLICOM is not set | ||
| 1183 | # CONFIG_RAW_DRIVER is not set | ||
| 1184 | # CONFIG_TCG_TPM is not set | ||
| 1185 | CONFIG_DEVPORT=y | ||
| 1186 | # CONFIG_RAMOOPS is not set | ||
| 1187 | CONFIG_I2C=y | ||
| 1188 | CONFIG_I2C_BOARDINFO=y | ||
| 1189 | CONFIG_I2C_COMPAT=y | ||
| 1190 | CONFIG_I2C_CHARDEV=y | ||
| 1191 | CONFIG_I2C_HELPER_AUTO=y | ||
| 1192 | CONFIG_I2C_ALGOBIT=y | ||
| 1193 | |||
| 1194 | # | ||
| 1195 | # I2C Hardware Bus support | ||
| 1196 | # | ||
| 1197 | |||
| 1198 | # | ||
| 1199 | # PC SMBus host controller drivers | ||
| 1200 | # | ||
| 1201 | # CONFIG_I2C_ALI1535 is not set | ||
| 1202 | # CONFIG_I2C_ALI1563 is not set | ||
| 1203 | # CONFIG_I2C_ALI15X3 is not set | ||
| 1204 | # CONFIG_I2C_AMD756 is not set | ||
| 1205 | # CONFIG_I2C_AMD8111 is not set | ||
| 1206 | # CONFIG_I2C_I801 is not set | ||
| 1207 | # CONFIG_I2C_ISCH is not set | ||
| 1208 | # CONFIG_I2C_PIIX4 is not set | ||
| 1209 | # CONFIG_I2C_NFORCE2 is not set | ||
| 1210 | # CONFIG_I2C_SIS5595 is not set | ||
| 1211 | # CONFIG_I2C_SIS630 is not set | ||
| 1212 | # CONFIG_I2C_SIS96X is not set | ||
| 1213 | # CONFIG_I2C_VIA is not set | ||
| 1214 | # CONFIG_I2C_VIAPRO is not set | ||
| 1215 | |||
| 1216 | # | ||
| 1217 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
| 1218 | # | ||
| 1219 | # CONFIG_I2C_AU1550 is not set | ||
| 1220 | CONFIG_I2C_GPIO=y | ||
| 1221 | # CONFIG_I2C_OCORES is not set | ||
| 1222 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 1223 | # CONFIG_I2C_SIMTEC is not set | ||
| 1224 | # CONFIG_I2C_XILINX is not set | ||
| 1225 | |||
| 1226 | # | ||
| 1227 | # External I2C/SMBus adapter drivers | ||
| 1228 | # | ||
| 1229 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 1230 | # CONFIG_I2C_TAOS_EVM is not set | ||
| 1231 | # CONFIG_I2C_TINY_USB is not set | ||
| 1232 | |||
| 1233 | # | ||
| 1234 | # Other I2C/SMBus bus drivers | ||
| 1235 | # | ||
| 1236 | # CONFIG_I2C_STUB is not set | ||
| 1237 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 1238 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 1239 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 1240 | # CONFIG_SPI is not set | ||
| 1241 | |||
| 1242 | # | ||
| 1243 | # PPS support | ||
| 1244 | # | ||
| 1245 | # CONFIG_PPS is not set | ||
| 1246 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
| 1247 | CONFIG_GPIOLIB=y | ||
| 1248 | CONFIG_GPIO_SYSFS=y | ||
| 1249 | |||
| 1250 | # | ||
| 1251 | # Memory mapped GPIO expanders: | ||
| 1252 | # | ||
| 1253 | # CONFIG_GPIO_IT8761E is not set | ||
| 1254 | # CONFIG_GPIO_SCH is not set | ||
| 1255 | |||
| 1256 | # | ||
| 1257 | # I2C GPIO expanders: | ||
| 1258 | # | ||
| 1259 | # CONFIG_GPIO_MAX7300 is not set | ||
| 1260 | # CONFIG_GPIO_MAX732X is not set | ||
| 1261 | # CONFIG_GPIO_PCA953X is not set | ||
| 1262 | # CONFIG_GPIO_PCF857X is not set | ||
| 1263 | # CONFIG_GPIO_ADP5588 is not set | ||
| 1264 | |||
| 1265 | # | ||
| 1266 | # PCI GPIO expanders: | ||
| 1267 | # | ||
| 1268 | # CONFIG_GPIO_CS5535 is not set | ||
| 1269 | # CONFIG_GPIO_BT8XX is not set | ||
| 1270 | # CONFIG_GPIO_LANGWELL is not set | ||
| 1271 | # CONFIG_GPIO_RDC321X is not set | ||
| 1272 | |||
| 1273 | # | ||
| 1274 | # SPI GPIO expanders: | ||
| 1275 | # | ||
| 1276 | |||
| 1277 | # | ||
| 1278 | # AC97 GPIO expanders: | ||
| 1279 | # | ||
| 1280 | |||
| 1281 | # | ||
| 1282 | # MODULbus GPIO expanders: | ||
| 1283 | # | ||
| 1284 | # CONFIG_W1 is not set | ||
| 1285 | # CONFIG_POWER_SUPPLY is not set | ||
| 1286 | CONFIG_HWMON=y | ||
| 1287 | # CONFIG_HWMON_VID is not set | ||
| 1288 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 1289 | |||
| 1290 | # | ||
| 1291 | # Native drivers | ||
| 1292 | # | ||
| 1293 | # CONFIG_SENSORS_AD7414 is not set | ||
| 1294 | # CONFIG_SENSORS_AD7418 is not set | ||
| 1295 | # CONFIG_SENSORS_ADM1021 is not set | ||
| 1296 | # CONFIG_SENSORS_ADM1025 is not set | ||
| 1297 | # CONFIG_SENSORS_ADM1026 is not set | ||
| 1298 | # CONFIG_SENSORS_ADM1029 is not set | ||
| 1299 | # CONFIG_SENSORS_ADM1031 is not set | ||
| 1300 | # CONFIG_SENSORS_ADM9240 is not set | ||
| 1301 | # CONFIG_SENSORS_ADT7411 is not set | ||
| 1302 | # CONFIG_SENSORS_ADT7462 is not set | ||
| 1303 | # CONFIG_SENSORS_ADT7470 is not set | ||
| 1304 | # CONFIG_SENSORS_ADT7475 is not set | ||
| 1305 | # CONFIG_SENSORS_ASC7621 is not set | ||
| 1306 | # CONFIG_SENSORS_ATXP1 is not set | ||
| 1307 | # CONFIG_SENSORS_DS1621 is not set | ||
| 1308 | # CONFIG_SENSORS_I5K_AMB is not set | ||
| 1309 | # CONFIG_SENSORS_F71805F is not set | ||
| 1310 | # CONFIG_SENSORS_F71882FG is not set | ||
| 1311 | # CONFIG_SENSORS_F75375S is not set | ||
| 1312 | # CONFIG_SENSORS_G760A is not set | ||
| 1313 | # CONFIG_SENSORS_GL518SM is not set | ||
| 1314 | # CONFIG_SENSORS_GL520SM is not set | ||
| 1315 | # CONFIG_SENSORS_IT87 is not set | ||
| 1316 | # CONFIG_SENSORS_LM63 is not set | ||
| 1317 | # CONFIG_SENSORS_LM73 is not set | ||
| 1318 | # CONFIG_SENSORS_LM75 is not set | ||
| 1319 | # CONFIG_SENSORS_LM77 is not set | ||
| 1320 | # CONFIG_SENSORS_LM78 is not set | ||
| 1321 | # CONFIG_SENSORS_LM80 is not set | ||
| 1322 | CONFIG_SENSORS_LM83=y | ||
| 1323 | # CONFIG_SENSORS_LM85 is not set | ||
| 1324 | # CONFIG_SENSORS_LM87 is not set | ||
| 1325 | # CONFIG_SENSORS_LM90 is not set | ||
| 1326 | # CONFIG_SENSORS_LM92 is not set | ||
| 1327 | # CONFIG_SENSORS_LM93 is not set | ||
| 1328 | # CONFIG_SENSORS_LTC4215 is not set | ||
| 1329 | # CONFIG_SENSORS_LTC4245 is not set | ||
| 1330 | # CONFIG_SENSORS_LM95241 is not set | ||
| 1331 | # CONFIG_SENSORS_MAX1619 is not set | ||
| 1332 | # CONFIG_SENSORS_MAX6650 is not set | ||
| 1333 | # CONFIG_SENSORS_PC87360 is not set | ||
| 1334 | # CONFIG_SENSORS_PC87427 is not set | ||
| 1335 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 1336 | # CONFIG_SENSORS_SHT15 is not set | ||
| 1337 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 1338 | # CONFIG_SENSORS_DME1737 is not set | ||
| 1339 | # CONFIG_SENSORS_EMC1403 is not set | ||
| 1340 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 1341 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
| 1342 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 1343 | # CONFIG_SENSORS_ADS7828 is not set | ||
| 1344 | # CONFIG_SENSORS_AMC6821 is not set | ||
| 1345 | # CONFIG_SENSORS_THMC50 is not set | ||
| 1346 | # CONFIG_SENSORS_TMP102 is not set | ||
| 1347 | # CONFIG_SENSORS_TMP401 is not set | ||
| 1348 | # CONFIG_SENSORS_TMP421 is not set | ||
| 1349 | # CONFIG_SENSORS_VIA686A is not set | ||
| 1350 | # CONFIG_SENSORS_VT1211 is not set | ||
| 1351 | # CONFIG_SENSORS_VT8231 is not set | ||
| 1352 | # CONFIG_SENSORS_W83781D is not set | ||
| 1353 | # CONFIG_SENSORS_W83791D is not set | ||
| 1354 | # CONFIG_SENSORS_W83792D is not set | ||
| 1355 | # CONFIG_SENSORS_W83793 is not set | ||
| 1356 | # CONFIG_SENSORS_W83L785TS is not set | ||
| 1357 | # CONFIG_SENSORS_W83L786NG is not set | ||
| 1358 | # CONFIG_SENSORS_W83627HF is not set | ||
| 1359 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 1360 | # CONFIG_SENSORS_LIS3_I2C is not set | ||
| 1361 | # CONFIG_THERMAL is not set | ||
| 1362 | CONFIG_WATCHDOG=y | ||
| 1363 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 1364 | |||
| 1365 | # | ||
| 1366 | # Watchdog Device Drivers | ||
| 1367 | # | ||
| 1368 | # CONFIG_SOFT_WATCHDOG is not set | ||
| 1369 | # CONFIG_ALIM7101_WDT is not set | ||
| 1370 | |||
| 1371 | # | ||
| 1372 | # PCI-based Watchdog Cards | ||
| 1373 | # | ||
| 1374 | # CONFIG_PCIPCWATCHDOG is not set | ||
| 1375 | # CONFIG_WDTPCI is not set | ||
| 1376 | |||
| 1377 | # | ||
| 1378 | # USB-based Watchdog Cards | ||
| 1379 | # | ||
| 1380 | # CONFIG_USBPCWATCHDOG is not set | ||
| 1381 | CONFIG_SSB_POSSIBLE=y | ||
| 1382 | |||
| 1383 | # | ||
| 1384 | # Sonics Silicon Backplane | ||
| 1385 | # | ||
| 1386 | CONFIG_SSB=m | ||
| 1387 | CONFIG_SSB_SPROM=y | ||
| 1388 | CONFIG_SSB_PCIHOST_POSSIBLE=y | ||
| 1389 | CONFIG_SSB_PCIHOST=y | ||
| 1390 | # CONFIG_SSB_B43_PCI_BRIDGE is not set | ||
| 1391 | # CONFIG_SSB_SILENT is not set | ||
| 1392 | # CONFIG_SSB_DEBUG is not set | ||
| 1393 | CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y | ||
| 1394 | CONFIG_SSB_DRIVER_PCICORE=y | ||
| 1395 | # CONFIG_SSB_DRIVER_MIPS is not set | ||
| 1396 | CONFIG_MFD_SUPPORT=y | ||
| 1397 | # CONFIG_MFD_CORE is not set | ||
| 1398 | # CONFIG_MFD_88PM860X is not set | ||
| 1399 | # CONFIG_MFD_SM501 is not set | ||
| 1400 | # CONFIG_HTC_PASIC3 is not set | ||
| 1401 | # CONFIG_HTC_I2CPLD is not set | ||
| 1402 | # CONFIG_TPS65010 is not set | ||
| 1403 | # CONFIG_TPS6507X is not set | ||
| 1404 | # CONFIG_TWL4030_CORE is not set | ||
| 1405 | # CONFIG_MFD_TC35892 is not set | ||
| 1406 | # CONFIG_MFD_TMIO is not set | ||
| 1407 | # CONFIG_PMIC_DA903X is not set | ||
| 1408 | # CONFIG_PMIC_ADP5520 is not set | ||
| 1409 | # CONFIG_MFD_MAX8925 is not set | ||
| 1410 | # CONFIG_MFD_WM8400 is not set | ||
| 1411 | # CONFIG_MFD_WM831X is not set | ||
| 1412 | # CONFIG_MFD_WM8350_I2C is not set | ||
| 1413 | # CONFIG_MFD_WM8994 is not set | ||
| 1414 | # CONFIG_MFD_PCF50633 is not set | ||
| 1415 | # CONFIG_ABX500_CORE is not set | ||
| 1416 | # CONFIG_MFD_TIMBERDALE is not set | ||
| 1417 | # CONFIG_LPC_SCH is not set | ||
| 1418 | # CONFIG_MFD_RDC321X is not set | ||
| 1419 | # CONFIG_MFD_JANZ_CMODIO is not set | ||
| 1420 | # CONFIG_REGULATOR is not set | ||
| 1421 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 1422 | |||
| 1423 | # | ||
| 1424 | # Graphics support | ||
| 1425 | # | ||
| 1426 | # CONFIG_VGA_ARB is not set | ||
| 1427 | # CONFIG_DRM is not set | ||
| 1428 | # CONFIG_VGASTATE is not set | ||
| 1429 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 1430 | # CONFIG_FB is not set | ||
| 1431 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 1432 | # CONFIG_LCD_CLASS_DEVICE is not set | ||
| 1433 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 1434 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
| 1435 | # CONFIG_BACKLIGHT_ADP8860 is not set | ||
| 1436 | |||
| 1437 | # | ||
| 1438 | # Display device support | ||
| 1439 | # | ||
| 1440 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 1441 | |||
| 1442 | # | ||
| 1443 | # Console display driver support | ||
| 1444 | # | ||
| 1445 | # CONFIG_VGA_CONSOLE is not set | ||
| 1446 | CONFIG_DUMMY_CONSOLE=y | ||
| 1447 | # CONFIG_SOUND is not set | ||
| 1448 | CONFIG_HID_SUPPORT=y | ||
| 1449 | CONFIG_HID=y | ||
| 1450 | # CONFIG_HIDRAW is not set | ||
| 1451 | |||
| 1452 | # | ||
| 1453 | # USB Input Devices | ||
| 1454 | # | ||
| 1455 | CONFIG_USB_HID=m | ||
| 1456 | # CONFIG_HID_PID is not set | ||
| 1457 | CONFIG_USB_HIDDEV=y | ||
| 1458 | |||
| 1459 | # | ||
| 1460 | # USB HID Boot Protocol drivers | ||
| 1461 | # | ||
| 1462 | CONFIG_USB_KBD=m | ||
| 1463 | CONFIG_USB_MOUSE=m | ||
| 1464 | |||
| 1465 | # | ||
| 1466 | # Special HID drivers | ||
| 1467 | # | ||
| 1468 | # CONFIG_HID_3M_PCT is not set | ||
| 1469 | # CONFIG_HID_A4TECH is not set | ||
| 1470 | # CONFIG_HID_APPLE is not set | ||
| 1471 | # CONFIG_HID_BELKIN is not set | ||
| 1472 | # CONFIG_HID_CANDO is not set | ||
| 1473 | # CONFIG_HID_CHERRY is not set | ||
| 1474 | # CONFIG_HID_CHICONY is not set | ||
| 1475 | # CONFIG_HID_CYPRESS is not set | ||
| 1476 | # CONFIG_HID_DRAGONRISE is not set | ||
| 1477 | # CONFIG_HID_EGALAX is not set | ||
| 1478 | # CONFIG_HID_EZKEY is not set | ||
| 1479 | # CONFIG_HID_KYE is not set | ||
| 1480 | # CONFIG_HID_GYRATION is not set | ||
| 1481 | # CONFIG_HID_TWINHAN is not set | ||
| 1482 | # CONFIG_HID_KENSINGTON is not set | ||
| 1483 | # CONFIG_HID_LOGITECH is not set | ||
| 1484 | # CONFIG_HID_MICROSOFT is not set | ||
| 1485 | # CONFIG_HID_MOSART is not set | ||
| 1486 | # CONFIG_HID_MONTEREY is not set | ||
| 1487 | # CONFIG_HID_NTRIG is not set | ||
| 1488 | # CONFIG_HID_ORTEK is not set | ||
| 1489 | # CONFIG_HID_PANTHERLORD is not set | ||
| 1490 | # CONFIG_HID_PETALYNX is not set | ||
| 1491 | # CONFIG_HID_PICOLCD is not set | ||
| 1492 | # CONFIG_HID_QUANTA is not set | ||
| 1493 | # CONFIG_HID_ROCCAT is not set | ||
| 1494 | # CONFIG_HID_ROCCAT_KONE is not set | ||
| 1495 | # CONFIG_HID_SAMSUNG is not set | ||
| 1496 | # CONFIG_HID_SONY is not set | ||
| 1497 | # CONFIG_HID_STANTUM is not set | ||
| 1498 | # CONFIG_HID_SUNPLUS is not set | ||
| 1499 | # CONFIG_HID_GREENASIA is not set | ||
| 1500 | # CONFIG_HID_SMARTJOYPLUS is not set | ||
| 1501 | # CONFIG_HID_TOPSEED is not set | ||
| 1502 | # CONFIG_HID_THRUSTMASTER is not set | ||
| 1503 | # CONFIG_HID_ZEROPLUS is not set | ||
| 1504 | # CONFIG_HID_ZYDACRON is not set | ||
| 1505 | CONFIG_USB_SUPPORT=y | ||
| 1506 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 1507 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 1508 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 1509 | CONFIG_USB=y | ||
| 1510 | # CONFIG_USB_DEBUG is not set | ||
| 1511 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
| 1512 | |||
| 1513 | # | ||
| 1514 | # Miscellaneous USB options | ||
| 1515 | # | ||
| 1516 | # CONFIG_USB_DEVICEFS is not set | ||
| 1517 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 1518 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 1519 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 1520 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 1521 | CONFIG_USB_MON=y | ||
| 1522 | # CONFIG_USB_WUSB is not set | ||
| 1523 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 1524 | |||
| 1525 | # | ||
| 1526 | # USB Host Controller Drivers | ||
| 1527 | # | ||
| 1528 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1529 | # CONFIG_USB_XHCI_HCD is not set | ||
| 1530 | CONFIG_USB_EHCI_HCD=y | ||
| 1531 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | ||
| 1532 | CONFIG_USB_EHCI_TT_NEWSCHED=y | ||
| 1533 | # CONFIG_USB_OXU210HP_HCD is not set | ||
| 1534 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1535 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1536 | # CONFIG_USB_ISP1362_HCD is not set | ||
| 1537 | CONFIG_USB_OHCI_HCD=y | ||
| 1538 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 1539 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 1540 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 1541 | # CONFIG_USB_UHCI_HCD is not set | ||
| 1542 | # CONFIG_USB_SL811_HCD is not set | ||
| 1543 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 1544 | # CONFIG_USB_WHCI_HCD is not set | ||
| 1545 | # CONFIG_USB_HWA_HCD is not set | ||
| 1546 | |||
| 1547 | # | ||
| 1548 | # USB Device Class drivers | ||
| 1549 | # | ||
| 1550 | # CONFIG_USB_ACM is not set | ||
| 1551 | # CONFIG_USB_PRINTER is not set | ||
| 1552 | # CONFIG_USB_WDM is not set | ||
| 1553 | # CONFIG_USB_TMC is not set | ||
| 1554 | |||
| 1555 | # | ||
| 1556 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
| 1557 | # | ||
| 1558 | |||
| 1559 | # | ||
| 1560 | # also be needed; see USB_STORAGE Help for more info | ||
| 1561 | # | ||
| 1562 | CONFIG_USB_STORAGE=m | ||
| 1563 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1564 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1565 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1566 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1567 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1568 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1569 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1570 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1571 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1572 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 1573 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1574 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1575 | CONFIG_USB_LIBUSUAL=y | ||
| 1576 | |||
| 1577 | # | ||
| 1578 | # USB Imaging devices | ||
| 1579 | # | ||
| 1580 | # CONFIG_USB_MDC800 is not set | ||
| 1581 | # CONFIG_USB_MICROTEK is not set | ||
| 1582 | |||
| 1583 | # | ||
| 1584 | # USB port drivers | ||
| 1585 | # | ||
| 1586 | CONFIG_USB_SERIAL=y | ||
| 1587 | # CONFIG_USB_SERIAL_CONSOLE is not set | ||
| 1588 | CONFIG_USB_EZUSB=y | ||
| 1589 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 1590 | # CONFIG_USB_SERIAL_AIRCABLE is not set | ||
| 1591 | # CONFIG_USB_SERIAL_ARK3116 is not set | ||
| 1592 | # CONFIG_USB_SERIAL_BELKIN is not set | ||
| 1593 | # CONFIG_USB_SERIAL_CH341 is not set | ||
| 1594 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||
| 1595 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | ||
| 1596 | # CONFIG_USB_SERIAL_CP210X is not set | ||
| 1597 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | ||
| 1598 | # CONFIG_USB_SERIAL_EMPEG is not set | ||
| 1599 | # CONFIG_USB_SERIAL_FTDI_SIO is not set | ||
| 1600 | # CONFIG_USB_SERIAL_FUNSOFT is not set | ||
| 1601 | # CONFIG_USB_SERIAL_VISOR is not set | ||
| 1602 | # CONFIG_USB_SERIAL_IPAQ is not set | ||
| 1603 | # CONFIG_USB_SERIAL_IR is not set | ||
| 1604 | # CONFIG_USB_SERIAL_EDGEPORT is not set | ||
| 1605 | # CONFIG_USB_SERIAL_EDGEPORT_TI is not set | ||
| 1606 | # CONFIG_USB_SERIAL_GARMIN is not set | ||
| 1607 | # CONFIG_USB_SERIAL_IPW is not set | ||
| 1608 | # CONFIG_USB_SERIAL_IUU is not set | ||
| 1609 | # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set | ||
| 1610 | # CONFIG_USB_SERIAL_KEYSPAN is not set | ||
| 1611 | # CONFIG_USB_SERIAL_KLSI is not set | ||
| 1612 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | ||
| 1613 | # CONFIG_USB_SERIAL_MCT_U232 is not set | ||
| 1614 | # CONFIG_USB_SERIAL_MOS7720 is not set | ||
| 1615 | # CONFIG_USB_SERIAL_MOS7840 is not set | ||
| 1616 | # CONFIG_USB_SERIAL_MOTOROLA is not set | ||
| 1617 | # CONFIG_USB_SERIAL_NAVMAN is not set | ||
| 1618 | # CONFIG_USB_SERIAL_PL2303 is not set | ||
| 1619 | # CONFIG_USB_SERIAL_OTI6858 is not set | ||
| 1620 | # CONFIG_USB_SERIAL_QCAUX is not set | ||
| 1621 | # CONFIG_USB_SERIAL_QUALCOMM is not set | ||
| 1622 | # CONFIG_USB_SERIAL_SPCP8X5 is not set | ||
| 1623 | # CONFIG_USB_SERIAL_HP4X is not set | ||
| 1624 | # CONFIG_USB_SERIAL_SAFE is not set | ||
| 1625 | # CONFIG_USB_SERIAL_SIEMENS_MPI is not set | ||
| 1626 | CONFIG_USB_SERIAL_SIERRAWIRELESS=y | ||
| 1627 | # CONFIG_USB_SERIAL_SYMBOL is not set | ||
| 1628 | # CONFIG_USB_SERIAL_TI is not set | ||
| 1629 | # CONFIG_USB_SERIAL_CYBERJACK is not set | ||
| 1630 | # CONFIG_USB_SERIAL_XIRCOM is not set | ||
| 1631 | # CONFIG_USB_SERIAL_OPTION is not set | ||
| 1632 | # CONFIG_USB_SERIAL_OMNINET is not set | ||
| 1633 | # CONFIG_USB_SERIAL_OPTICON is not set | ||
| 1634 | # CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set | ||
| 1635 | # CONFIG_USB_SERIAL_ZIO is not set | ||
| 1636 | # CONFIG_USB_SERIAL_DEBUG is not set | ||
| 1637 | |||
| 1638 | # | ||
| 1639 | # USB Miscellaneous drivers | ||
| 1640 | # | ||
| 1641 | # CONFIG_USB_EMI62 is not set | ||
| 1642 | # CONFIG_USB_EMI26 is not set | ||
| 1643 | # CONFIG_USB_ADUTUX is not set | ||
| 1644 | # CONFIG_USB_SEVSEG is not set | ||
| 1645 | # CONFIG_USB_RIO500 is not set | ||
| 1646 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1647 | # CONFIG_USB_LCD is not set | ||
| 1648 | # CONFIG_USB_LED is not set | ||
| 1649 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1650 | # CONFIG_USB_CYTHERM is not set | ||
| 1651 | # CONFIG_USB_IDMOUSE is not set | ||
| 1652 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1653 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1654 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1655 | # CONFIG_USB_LD is not set | ||
| 1656 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1657 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1658 | # CONFIG_USB_TEST is not set | ||
| 1659 | # CONFIG_USB_ISIGHTFW is not set | ||
| 1660 | # CONFIG_USB_ATM is not set | ||
| 1661 | # CONFIG_USB_GADGET is not set | ||
| 1662 | |||
| 1663 | # | ||
| 1664 | # OTG and related infrastructure | ||
| 1665 | # | ||
| 1666 | # CONFIG_USB_GPIO_VBUS is not set | ||
| 1667 | # CONFIG_NOP_USB_XCEIV is not set | ||
| 1668 | # CONFIG_UWB is not set | ||
| 1669 | # CONFIG_MMC is not set | ||
| 1670 | # CONFIG_MEMSTICK is not set | ||
| 1671 | CONFIG_NEW_LEDS=y | ||
| 1672 | CONFIG_LEDS_CLASS=y | ||
| 1673 | |||
| 1674 | # | ||
| 1675 | # LED drivers | ||
| 1676 | # | ||
| 1677 | # CONFIG_LEDS_PCA9532 is not set | ||
| 1678 | CONFIG_LEDS_GPIO=y | ||
| 1679 | CONFIG_LEDS_GPIO_PLATFORM=y | ||
| 1680 | # CONFIG_LEDS_LP3944 is not set | ||
| 1681 | # CONFIG_LEDS_PCA955X is not set | ||
| 1682 | # CONFIG_LEDS_BD2802 is not set | ||
| 1683 | # CONFIG_LEDS_LT3593 is not set | ||
| 1684 | CONFIG_LEDS_TRIGGERS=y | ||
| 1685 | |||
| 1686 | # | ||
| 1687 | # LED Triggers | ||
| 1688 | # | ||
| 1689 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
| 1690 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 1691 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
| 1692 | # CONFIG_LEDS_TRIGGER_GPIO is not set | ||
| 1693 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 1694 | |||
| 1695 | # | ||
| 1696 | # iptables trigger is under Netfilter config (LED target) | ||
| 1697 | # | ||
| 1698 | # CONFIG_ACCESSIBILITY is not set | ||
| 1699 | # CONFIG_INFINIBAND is not set | ||
| 1700 | CONFIG_RTC_LIB=y | ||
| 1701 | # CONFIG_RTC_CLASS is not set | ||
| 1702 | # CONFIG_DMADEVICES is not set | ||
| 1703 | # CONFIG_AUXDISPLAY is not set | ||
| 1704 | # CONFIG_UIO is not set | ||
| 1705 | # CONFIG_STAGING is not set | ||
| 1706 | |||
| 1707 | # | ||
| 1708 | # File systems | ||
| 1709 | # | ||
| 1710 | # CONFIG_EXT2_FS is not set | ||
| 1711 | # CONFIG_EXT3_FS is not set | ||
| 1712 | # CONFIG_EXT4_FS is not set | ||
| 1713 | # CONFIG_REISERFS_FS is not set | ||
| 1714 | # CONFIG_JFS_FS is not set | ||
| 1715 | # CONFIG_FS_POSIX_ACL is not set | ||
| 1716 | # CONFIG_XFS_FS is not set | ||
| 1717 | # CONFIG_GFS2_FS is not set | ||
| 1718 | # CONFIG_OCFS2_FS is not set | ||
| 1719 | # CONFIG_BTRFS_FS is not set | ||
| 1720 | # CONFIG_NILFS2_FS is not set | ||
| 1721 | CONFIG_FILE_LOCKING=y | ||
| 1722 | # CONFIG_FSNOTIFY is not set | ||
| 1723 | # CONFIG_DNOTIFY is not set | ||
| 1724 | # CONFIG_INOTIFY is not set | ||
| 1725 | # CONFIG_INOTIFY_USER is not set | ||
| 1726 | # CONFIG_QUOTA is not set | ||
| 1727 | # CONFIG_AUTOFS_FS is not set | ||
| 1728 | # CONFIG_AUTOFS4_FS is not set | ||
| 1729 | # CONFIG_FUSE_FS is not set | ||
| 1730 | |||
| 1731 | # | ||
| 1732 | # Caches | ||
| 1733 | # | ||
| 1734 | # CONFIG_FSCACHE is not set | ||
| 1735 | |||
| 1736 | # | ||
| 1737 | # CD-ROM/DVD Filesystems | ||
| 1738 | # | ||
| 1739 | CONFIG_ISO9660_FS=m | ||
| 1740 | CONFIG_JOLIET=y | ||
| 1741 | CONFIG_ZISOFS=y | ||
| 1742 | CONFIG_UDF_FS=m | ||
| 1743 | CONFIG_UDF_NLS=y | ||
| 1744 | |||
| 1745 | # | ||
| 1746 | # DOS/FAT/NT Filesystems | ||
| 1747 | # | ||
| 1748 | CONFIG_FAT_FS=m | ||
| 1749 | CONFIG_MSDOS_FS=m | ||
| 1750 | CONFIG_VFAT_FS=m | ||
| 1751 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
| 1752 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
| 1753 | # CONFIG_NTFS_FS is not set | ||
| 1754 | |||
| 1755 | # | ||
| 1756 | # Pseudo filesystems | ||
| 1757 | # | ||
| 1758 | CONFIG_PROC_FS=y | ||
| 1759 | CONFIG_PROC_KCORE=y | ||
| 1760 | CONFIG_PROC_SYSCTL=y | ||
| 1761 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 1762 | CONFIG_SYSFS=y | ||
| 1763 | CONFIG_TMPFS=y | ||
| 1764 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1765 | # CONFIG_HUGETLB_PAGE is not set | ||
| 1766 | # CONFIG_CONFIGFS_FS is not set | ||
| 1767 | CONFIG_MISC_FILESYSTEMS=y | ||
| 1768 | # CONFIG_ADFS_FS is not set | ||
| 1769 | # CONFIG_AFFS_FS is not set | ||
| 1770 | # CONFIG_ECRYPT_FS is not set | ||
| 1771 | # CONFIG_HFS_FS is not set | ||
| 1772 | # CONFIG_HFSPLUS_FS is not set | ||
| 1773 | # CONFIG_BEFS_FS is not set | ||
| 1774 | # CONFIG_BFS_FS is not set | ||
| 1775 | # CONFIG_EFS_FS is not set | ||
| 1776 | CONFIG_JFFS2_FS=y | ||
| 1777 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 1778 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
| 1779 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
| 1780 | # CONFIG_JFFS2_SUMMARY is not set | ||
| 1781 | # CONFIG_JFFS2_FS_XATTR is not set | ||
| 1782 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
| 1783 | CONFIG_JFFS2_ZLIB=y | ||
| 1784 | # CONFIG_JFFS2_LZO is not set | ||
| 1785 | CONFIG_JFFS2_RTIME=y | ||
| 1786 | CONFIG_JFFS2_RUBIN=y | ||
| 1787 | # CONFIG_JFFS2_CMODE_NONE is not set | ||
| 1788 | CONFIG_JFFS2_CMODE_PRIORITY=y | ||
| 1789 | # CONFIG_JFFS2_CMODE_SIZE is not set | ||
| 1790 | # CONFIG_JFFS2_CMODE_FAVOURLZO is not set | ||
| 1791 | # CONFIG_LOGFS is not set | ||
| 1792 | # CONFIG_CRAMFS is not set | ||
| 1793 | # CONFIG_SQUASHFS is not set | ||
| 1794 | # CONFIG_VXFS_FS is not set | ||
| 1795 | # CONFIG_MINIX_FS is not set | ||
| 1796 | # CONFIG_OMFS_FS is not set | ||
| 1797 | # CONFIG_HPFS_FS is not set | ||
| 1798 | # CONFIG_QNX4FS_FS is not set | ||
| 1799 | # CONFIG_ROMFS_FS is not set | ||
| 1800 | # CONFIG_SYSV_FS is not set | ||
| 1801 | # CONFIG_UFS_FS is not set | ||
| 1802 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 1803 | CONFIG_NFS_FS=y | ||
| 1804 | CONFIG_NFS_V3=y | ||
| 1805 | # CONFIG_NFS_V3_ACL is not set | ||
| 1806 | CONFIG_NFS_V4=y | ||
| 1807 | # CONFIG_NFS_V4_1 is not set | ||
| 1808 | CONFIG_ROOT_NFS=y | ||
| 1809 | # CONFIG_NFSD is not set | ||
| 1810 | CONFIG_LOCKD=y | ||
| 1811 | CONFIG_LOCKD_V4=y | ||
| 1812 | CONFIG_NFS_COMMON=y | ||
| 1813 | CONFIG_SUNRPC=y | ||
| 1814 | CONFIG_SUNRPC_GSS=y | ||
| 1815 | CONFIG_RPCSEC_GSS_KRB5=y | ||
| 1816 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1817 | # CONFIG_SMB_FS is not set | ||
| 1818 | # CONFIG_CEPH_FS is not set | ||
| 1819 | # CONFIG_CIFS is not set | ||
| 1820 | # CONFIG_NCP_FS is not set | ||
| 1821 | # CONFIG_CODA_FS is not set | ||
| 1822 | # CONFIG_AFS_FS is not set | ||
| 1823 | |||
| 1824 | # | ||
| 1825 | # Partition Types | ||
| 1826 | # | ||
| 1827 | CONFIG_PARTITION_ADVANCED=y | ||
| 1828 | # CONFIG_ACORN_PARTITION is not set | ||
| 1829 | # CONFIG_OSF_PARTITION is not set | ||
| 1830 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1831 | # CONFIG_ATARI_PARTITION is not set | ||
| 1832 | # CONFIG_MAC_PARTITION is not set | ||
| 1833 | CONFIG_MSDOS_PARTITION=y | ||
| 1834 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1835 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1836 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1837 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1838 | # CONFIG_LDM_PARTITION is not set | ||
| 1839 | # CONFIG_SGI_PARTITION is not set | ||
| 1840 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1841 | # CONFIG_SUN_PARTITION is not set | ||
| 1842 | # CONFIG_KARMA_PARTITION is not set | ||
| 1843 | # CONFIG_EFI_PARTITION is not set | ||
| 1844 | # CONFIG_SYSV68_PARTITION is not set | ||
| 1845 | CONFIG_NLS=y | ||
| 1846 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1847 | CONFIG_NLS_CODEPAGE_437=y | ||
| 1848 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
| 1849 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
| 1850 | CONFIG_NLS_CODEPAGE_850=y | ||
| 1851 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
| 1852 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
| 1853 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
| 1854 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
| 1855 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
| 1856 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
| 1857 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
| 1858 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
| 1859 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
| 1860 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
| 1861 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
| 1862 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
| 1863 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
| 1864 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
| 1865 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
| 1866 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
| 1867 | # CONFIG_NLS_ISO8859_8 is not set | ||
| 1868 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
| 1869 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
| 1870 | # CONFIG_NLS_ASCII is not set | ||
| 1871 | CONFIG_NLS_ISO8859_1=y | ||
| 1872 | # CONFIG_NLS_ISO8859_2 is not set | ||
| 1873 | # CONFIG_NLS_ISO8859_3 is not set | ||
| 1874 | # CONFIG_NLS_ISO8859_4 is not set | ||
| 1875 | # CONFIG_NLS_ISO8859_5 is not set | ||
| 1876 | # CONFIG_NLS_ISO8859_6 is not set | ||
| 1877 | # CONFIG_NLS_ISO8859_7 is not set | ||
| 1878 | # CONFIG_NLS_ISO8859_9 is not set | ||
| 1879 | # CONFIG_NLS_ISO8859_13 is not set | ||
| 1880 | # CONFIG_NLS_ISO8859_14 is not set | ||
| 1881 | # CONFIG_NLS_ISO8859_15 is not set | ||
| 1882 | # CONFIG_NLS_KOI8_R is not set | ||
| 1883 | # CONFIG_NLS_KOI8_U is not set | ||
| 1884 | # CONFIG_NLS_UTF8 is not set | ||
| 1885 | # CONFIG_DLM is not set | ||
| 1886 | |||
| 1887 | # | ||
| 1888 | # Kernel hacking | ||
| 1889 | # | ||
| 1890 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 1891 | # CONFIG_PRINTK_TIME is not set | ||
| 1892 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 1893 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 1894 | CONFIG_FRAME_WARN=1024 | ||
| 1895 | CONFIG_MAGIC_SYSRQ=y | ||
| 1896 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 1897 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1898 | CONFIG_DEBUG_FS=y | ||
| 1899 | # CONFIG_HEADERS_CHECK is not set | ||
| 1900 | # CONFIG_DEBUG_KERNEL is not set | ||
| 1901 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
| 1902 | CONFIG_RCU_CPU_STALL_DETECTOR=y | ||
| 1903 | # CONFIG_LKDTM is not set | ||
| 1904 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 1905 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 1906 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
| 1907 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
| 1908 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
| 1909 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
| 1910 | CONFIG_TRACING_SUPPORT=y | ||
| 1911 | # CONFIG_FTRACE is not set | ||
| 1912 | # CONFIG_DYNAMIC_DEBUG is not set | ||
| 1913 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
| 1914 | # CONFIG_SAMPLES is not set | ||
| 1915 | CONFIG_HAVE_ARCH_KGDB=y | ||
| 1916 | CONFIG_EARLY_PRINTK=y | ||
| 1917 | CONFIG_CMDLINE_BOOL=y | ||
| 1918 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs rw ip=auto" | ||
| 1919 | # CONFIG_CMDLINE_OVERRIDE is not set | ||
| 1920 | # CONFIG_SPINLOCK_TEST is not set | ||
| 1921 | |||
| 1922 | # | ||
| 1923 | # Security options | ||
| 1924 | # | ||
| 1925 | CONFIG_KEYS=y | ||
| 1926 | # CONFIG_KEYS_DEBUG_PROC_KEYS is not set | ||
| 1927 | # CONFIG_SECURITY is not set | ||
| 1928 | # CONFIG_SECURITYFS is not set | ||
| 1929 | # CONFIG_DEFAULT_SECURITY_SELINUX is not set | ||
| 1930 | # CONFIG_DEFAULT_SECURITY_SMACK is not set | ||
| 1931 | # CONFIG_DEFAULT_SECURITY_TOMOYO is not set | ||
| 1932 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
| 1933 | CONFIG_DEFAULT_SECURITY="" | ||
| 1934 | CONFIG_CRYPTO=y | ||
| 1935 | |||
| 1936 | # | ||
| 1937 | # Crypto core or helper | ||
| 1938 | # | ||
| 1939 | # CONFIG_CRYPTO_FIPS is not set | ||
| 1940 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1941 | CONFIG_CRYPTO_ALGAPI2=y | ||
| 1942 | CONFIG_CRYPTO_AEAD=m | ||
| 1943 | CONFIG_CRYPTO_AEAD2=y | ||
| 1944 | CONFIG_CRYPTO_BLKCIPHER=y | ||
| 1945 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
| 1946 | CONFIG_CRYPTO_HASH=y | ||
| 1947 | CONFIG_CRYPTO_HASH2=y | ||
| 1948 | CONFIG_CRYPTO_RNG=m | ||
| 1949 | CONFIG_CRYPTO_RNG2=y | ||
| 1950 | CONFIG_CRYPTO_PCOMP=y | ||
| 1951 | CONFIG_CRYPTO_MANAGER=y | ||
| 1952 | CONFIG_CRYPTO_MANAGER2=y | ||
| 1953 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1954 | CONFIG_CRYPTO_NULL=m | ||
| 1955 | CONFIG_CRYPTO_WORKQUEUE=y | ||
| 1956 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1957 | CONFIG_CRYPTO_AUTHENC=m | ||
| 1958 | CONFIG_CRYPTO_TEST=m | ||
| 1959 | |||
| 1960 | # | ||
| 1961 | # Authenticated Encryption with Associated Data | ||
| 1962 | # | ||
| 1963 | # CONFIG_CRYPTO_CCM is not set | ||
| 1964 | # CONFIG_CRYPTO_GCM is not set | ||
| 1965 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1966 | |||
| 1967 | # | ||
| 1968 | # Block modes | ||
| 1969 | # | ||
| 1970 | CONFIG_CRYPTO_CBC=y | ||
| 1971 | # CONFIG_CRYPTO_CTR is not set | ||
| 1972 | # CONFIG_CRYPTO_CTS is not set | ||
| 1973 | CONFIG_CRYPTO_ECB=y | ||
| 1974 | # CONFIG_CRYPTO_LRW is not set | ||
| 1975 | CONFIG_CRYPTO_PCBC=m | ||
| 1976 | # CONFIG_CRYPTO_XTS is not set | ||
| 1977 | |||
| 1978 | # | ||
| 1979 | # Hash modes | ||
| 1980 | # | ||
| 1981 | CONFIG_CRYPTO_HMAC=y | ||
| 1982 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1983 | # CONFIG_CRYPTO_VMAC is not set | ||
| 1984 | |||
| 1985 | # | ||
| 1986 | # Digest | ||
| 1987 | # | ||
| 1988 | CONFIG_CRYPTO_CRC32C=m | ||
| 1989 | # CONFIG_CRYPTO_GHASH is not set | ||
| 1990 | CONFIG_CRYPTO_MD4=m | ||
| 1991 | CONFIG_CRYPTO_MD5=y | ||
| 1992 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
| 1993 | # CONFIG_CRYPTO_RMD128 is not set | ||
| 1994 | # CONFIG_CRYPTO_RMD160 is not set | ||
| 1995 | # CONFIG_CRYPTO_RMD256 is not set | ||
| 1996 | # CONFIG_CRYPTO_RMD320 is not set | ||
| 1997 | CONFIG_CRYPTO_SHA1=m | ||
| 1998 | CONFIG_CRYPTO_SHA256=m | ||
| 1999 | CONFIG_CRYPTO_SHA512=m | ||
| 2000 | CONFIG_CRYPTO_TGR192=m | ||
| 2001 | CONFIG_CRYPTO_WP512=m | ||
| 2002 | |||
| 2003 | # | ||
| 2004 | # Ciphers | ||
| 2005 | # | ||
| 2006 | CONFIG_CRYPTO_AES=y | ||
| 2007 | CONFIG_CRYPTO_ANUBIS=m | ||
| 2008 | CONFIG_CRYPTO_ARC4=y | ||
| 2009 | CONFIG_CRYPTO_BLOWFISH=m | ||
| 2010 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 2011 | CONFIG_CRYPTO_CAST5=m | ||
| 2012 | CONFIG_CRYPTO_CAST6=m | ||
| 2013 | CONFIG_CRYPTO_DES=y | ||
| 2014 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 2015 | CONFIG_CRYPTO_KHAZAD=m | ||
| 2016 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 2017 | # CONFIG_CRYPTO_SEED is not set | ||
| 2018 | CONFIG_CRYPTO_SERPENT=m | ||
| 2019 | CONFIG_CRYPTO_TEA=m | ||
| 2020 | CONFIG_CRYPTO_TWOFISH=m | ||
| 2021 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
| 2022 | |||
| 2023 | # | ||
| 2024 | # Compression | ||
| 2025 | # | ||
| 2026 | CONFIG_CRYPTO_DEFLATE=m | ||
| 2027 | # CONFIG_CRYPTO_ZLIB is not set | ||
| 2028 | # CONFIG_CRYPTO_LZO is not set | ||
| 2029 | |||
| 2030 | # | ||
| 2031 | # Random Number Generation | ||
| 2032 | # | ||
| 2033 | CONFIG_CRYPTO_ANSI_CPRNG=m | ||
| 2034 | CONFIG_CRYPTO_HW=y | ||
| 2035 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
| 2036 | # CONFIG_BINARY_PRINTF is not set | ||
| 2037 | |||
| 2038 | # | ||
| 2039 | # Library routines | ||
| 2040 | # | ||
| 2041 | CONFIG_BITREVERSE=y | ||
| 2042 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 2043 | CONFIG_CRC_CCITT=m | ||
| 2044 | CONFIG_CRC16=m | ||
| 2045 | # CONFIG_CRC_T10DIF is not set | ||
| 2046 | CONFIG_CRC_ITU_T=m | ||
| 2047 | CONFIG_CRC32=y | ||
| 2048 | # CONFIG_CRC7 is not set | ||
| 2049 | CONFIG_LIBCRC32C=m | ||
| 2050 | CONFIG_ZLIB_INFLATE=y | ||
| 2051 | CONFIG_ZLIB_DEFLATE=y | ||
| 2052 | CONFIG_DECOMPRESS_GZIP=y | ||
| 2053 | CONFIG_TEXTSEARCH=y | ||
| 2054 | CONFIG_TEXTSEARCH_KMP=m | ||
| 2055 | CONFIG_TEXTSEARCH_BM=m | ||
| 2056 | CONFIG_TEXTSEARCH_FSM=m | ||
| 2057 | CONFIG_HAS_IOMEM=y | ||
| 2058 | CONFIG_HAS_IOPORT=y | ||
| 2059 | CONFIG_HAS_DMA=y | ||
| 2060 | CONFIG_NLATTR=y | ||
diff --git a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig index cff8f4c0e57c..10d20aa731d3 100644 --- a/arch/mips/configs/mtx1_defconfig +++ b/arch/mips/configs/mtx1_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_MTX1=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1500=y | 66 | CONFIG_SOC_AU1500=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig index 97382b698b9b..778f726af8e0 100644 --- a/arch/mips/configs/pb1100_defconfig +++ b/arch/mips/configs/pb1100_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_PB1100=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1100=y | 66 | CONFIG_SOC_AU1100=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/pb1200_defconfig b/arch/mips/configs/pb1200_defconfig index e9ad77320f16..0f908c692111 100644 --- a/arch/mips/configs/pb1200_defconfig +++ b/arch/mips/configs/pb1200_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_PB1200=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1200=y | 66 | CONFIG_SOC_AU1200=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig index 7497d3306b91..1c5fe6f06c0e 100644 --- a/arch/mips/configs/pb1500_defconfig +++ b/arch/mips/configs/pb1500_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_MIPS_PB1500=y | |||
| 64 | # CONFIG_MIPS_PB1550 is not set | 64 | # CONFIG_MIPS_PB1550 is not set |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1500=y | 66 | CONFIG_SOC_AU1500=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/pb1550_defconfig b/arch/mips/configs/pb1550_defconfig index aa526f53cb1b..49494b01138b 100644 --- a/arch/mips/configs/pb1550_defconfig +++ b/arch/mips/configs/pb1550_defconfig | |||
| @@ -8,7 +8,7 @@ CONFIG_MIPS=y | |||
| 8 | # | 8 | # |
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | CONFIG_MACH_ALCHEMY=y | 11 | CONFIG_MIPS_ALCHEMY=y |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | 14 | # CONFIG_BCM63XX is not set |
| @@ -64,7 +64,6 @@ CONFIG_ALCHEMY_GPIOINT_AU1000=y | |||
| 64 | CONFIG_MIPS_PB1550=y | 64 | CONFIG_MIPS_PB1550=y |
| 65 | # CONFIG_MIPS_XXS1500 is not set | 65 | # CONFIG_MIPS_XXS1500 is not set |
| 66 | CONFIG_SOC_AU1550=y | 66 | CONFIG_SOC_AU1550=y |
| 67 | CONFIG_SOC_AU1X00=y | ||
| 68 | CONFIG_LOONGSON_UART_BASE=y | 67 | CONFIG_LOONGSON_UART_BASE=y |
| 69 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 68 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 70 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 69 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
diff --git a/arch/mips/configs/powertv_defconfig b/arch/mips/configs/powertv_defconfig index 7291633d81cc..af0ab73bfce8 100644 --- a/arch/mips/configs/powertv_defconfig +++ b/arch/mips/configs/powertv_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.31-rc5 | 3 | # Linux kernel version: 2.6.35-rc3 |
| 4 | # Fri Aug 28 14:49:33 2009 | 4 | # Thu Jul 1 11:03:28 2010 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -11,11 +11,12 @@ CONFIG_MIPS=y | |||
| 11 | # CONFIG_MACH_ALCHEMY is not set | 11 | # CONFIG_MACH_ALCHEMY is not set |
| 12 | # CONFIG_AR7 is not set | 12 | # CONFIG_AR7 is not set |
| 13 | # CONFIG_BCM47XX is not set | 13 | # CONFIG_BCM47XX is not set |
| 14 | # CONFIG_BCM63XX is not set | ||
| 14 | # CONFIG_MIPS_COBALT is not set | 15 | # CONFIG_MIPS_COBALT is not set |
| 15 | # CONFIG_MACH_DECSTATION is not set | 16 | # CONFIG_MACH_DECSTATION is not set |
| 16 | # CONFIG_MACH_JAZZ is not set | 17 | # CONFIG_MACH_JAZZ is not set |
| 17 | # CONFIG_LASAT is not set | 18 | # CONFIG_LASAT is not set |
| 18 | # CONFIG_LEMOTE_FULONG is not set | 19 | # CONFIG_MACH_LOONGSON is not set |
| 19 | # CONFIG_MIPS_MALTA is not set | 20 | # CONFIG_MIPS_MALTA is not set |
| 20 | # CONFIG_MIPS_SIM is not set | 21 | # CONFIG_MIPS_SIM is not set |
| 21 | # CONFIG_NEC_MARKEINS is not set | 22 | # CONFIG_NEC_MARKEINS is not set |
| @@ -50,7 +51,6 @@ CONFIG_POWERTV=y | |||
| 50 | # CONFIG_MIN_RUNTIME_RESOURCES is not set | 51 | # CONFIG_MIN_RUNTIME_RESOURCES is not set |
| 51 | # CONFIG_BOOTLOADER_DRIVER is not set | 52 | # CONFIG_BOOTLOADER_DRIVER is not set |
| 52 | CONFIG_BOOTLOADER_FAMILY="R2" | 53 | CONFIG_BOOTLOADER_FAMILY="R2" |
| 53 | CONFIG_CSRC_POWERTV=y | ||
| 54 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 54 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 55 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 55 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 56 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 56 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| @@ -65,9 +65,9 @@ CONFIG_SCHED_OMIT_FRAME_POINTER=y | |||
| 65 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 65 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
| 66 | CONFIG_CEVT_R4K_LIB=y | 66 | CONFIG_CEVT_R4K_LIB=y |
| 67 | CONFIG_CEVT_R4K=y | 67 | CONFIG_CEVT_R4K=y |
| 68 | CONFIG_CSRC_POWERTV=y | ||
| 68 | CONFIG_DMA_NONCOHERENT=y | 69 | CONFIG_DMA_NONCOHERENT=y |
| 69 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 70 | CONFIG_NEED_DMA_MAP_STATE=y |
| 70 | # CONFIG_EARLY_PRINTK is not set | ||
| 71 | CONFIG_SYS_HAS_EARLY_PRINTK=y | 71 | CONFIG_SYS_HAS_EARLY_PRINTK=y |
| 72 | # CONFIG_NO_IOPORT is not set | 72 | # CONFIG_NO_IOPORT is not set |
| 73 | CONFIG_CPU_BIG_ENDIAN=y | 73 | CONFIG_CPU_BIG_ENDIAN=y |
| @@ -79,7 +79,8 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5 | |||
| 79 | # | 79 | # |
| 80 | # CPU selection | 80 | # CPU selection |
| 81 | # | 81 | # |
| 82 | # CONFIG_CPU_LOONGSON2 is not set | 82 | # CONFIG_CPU_LOONGSON2E is not set |
| 83 | # CONFIG_CPU_LOONGSON2F is not set | ||
| 83 | # CONFIG_CPU_MIPS32_R1 is not set | 84 | # CONFIG_CPU_MIPS32_R1 is not set |
| 84 | CONFIG_CPU_MIPS32_R2=y | 85 | CONFIG_CPU_MIPS32_R2=y |
| 85 | # CONFIG_CPU_MIPS64_R1 is not set | 86 | # CONFIG_CPU_MIPS64_R1 is not set |
| @@ -122,7 +123,7 @@ CONFIG_CPU_HAS_PREFETCH=y | |||
| 122 | CONFIG_MIPS_MT_DISABLED=y | 123 | CONFIG_MIPS_MT_DISABLED=y |
| 123 | # CONFIG_MIPS_MT_SMP is not set | 124 | # CONFIG_MIPS_MT_SMP is not set |
| 124 | # CONFIG_MIPS_MT_SMTC is not set | 125 | # CONFIG_MIPS_MT_SMTC is not set |
| 125 | CONFIG_CPU_HAS_LLSC=y | 126 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set |
| 126 | CONFIG_CPU_MIPSR2_IRQ_VI=y | 127 | CONFIG_CPU_MIPSR2_IRQ_VI=y |
| 127 | CONFIG_CPU_MIPSR2_IRQ_EI=y | 128 | CONFIG_CPU_MIPSR2_IRQ_EI=y |
| 128 | CONFIG_CPU_HAS_SYNC=y | 129 | CONFIG_CPU_HAS_SYNC=y |
| @@ -144,8 +145,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | |||
| 144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 145 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
| 145 | CONFIG_ZONE_DMA_FLAG=0 | 146 | CONFIG_ZONE_DMA_FLAG=0 |
| 146 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
| 147 | CONFIG_HAVE_MLOCK=y | 148 | # CONFIG_KSM is not set |
| 148 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
| 149 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | 149 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 |
| 150 | CONFIG_TICK_ONESHOT=y | 150 | CONFIG_TICK_ONESHOT=y |
| 151 | CONFIG_NO_HZ=y | 151 | CONFIG_NO_HZ=y |
| @@ -177,6 +177,7 @@ CONFIG_EXPERIMENTAL=y | |||
| 177 | CONFIG_BROKEN_ON_SMP=y | 177 | CONFIG_BROKEN_ON_SMP=y |
| 178 | CONFIG_LOCK_KERNEL=y | 178 | CONFIG_LOCK_KERNEL=y |
| 179 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 179 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
| 180 | CONFIG_CROSS_COMPILE="mips-linux-" | ||
| 180 | CONFIG_LOCALVERSION="" | 181 | CONFIG_LOCALVERSION="" |
| 181 | CONFIG_LOCALVERSION_AUTO=y | 182 | CONFIG_LOCALVERSION_AUTO=y |
| 182 | # CONFIG_SWAP is not set | 183 | # CONFIG_SWAP is not set |
| @@ -190,19 +191,15 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 190 | # | 191 | # |
| 191 | # RCU Subsystem | 192 | # RCU Subsystem |
| 192 | # | 193 | # |
| 193 | CONFIG_CLASSIC_RCU=y | 194 | CONFIG_TREE_RCU=y |
| 194 | # CONFIG_TREE_RCU is not set | 195 | # CONFIG_TREE_PREEMPT_RCU is not set |
| 195 | # CONFIG_PREEMPT_RCU is not set | 196 | # CONFIG_TINY_RCU is not set |
| 197 | # CONFIG_RCU_TRACE is not set | ||
| 198 | CONFIG_RCU_FANOUT=32 | ||
| 199 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 196 | # CONFIG_TREE_RCU_TRACE is not set | 200 | # CONFIG_TREE_RCU_TRACE is not set |
| 197 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
| 198 | # CONFIG_IKCONFIG is not set | 201 | # CONFIG_IKCONFIG is not set |
| 199 | CONFIG_LOG_BUF_SHIFT=16 | 202 | CONFIG_LOG_BUF_SHIFT=16 |
| 200 | CONFIG_GROUP_SCHED=y | ||
| 201 | CONFIG_FAIR_GROUP_SCHED=y | ||
| 202 | # CONFIG_RT_GROUP_SCHED is not set | ||
| 203 | CONFIG_USER_SCHED=y | ||
| 204 | # CONFIG_CGROUP_SCHED is not set | ||
| 205 | # CONFIG_CGROUPS is not set | ||
| 206 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | 203 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
| 207 | CONFIG_RELAY=y | 204 | CONFIG_RELAY=y |
| 208 | # CONFIG_NAMESPACES is not set | 205 | # CONFIG_NAMESPACES is not set |
| @@ -211,6 +208,7 @@ CONFIG_INITRAMFS_SOURCE="" | |||
| 211 | # CONFIG_RD_GZIP is not set | 208 | # CONFIG_RD_GZIP is not set |
| 212 | # CONFIG_RD_BZIP2 is not set | 209 | # CONFIG_RD_BZIP2 is not set |
| 213 | # CONFIG_RD_LZMA is not set | 210 | # CONFIG_RD_LZMA is not set |
| 211 | # CONFIG_RD_LZO is not set | ||
| 214 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 212 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 215 | CONFIG_SYSCTL=y | 213 | CONFIG_SYSCTL=y |
| 216 | CONFIG_ANON_INODES=y | 214 | CONFIG_ANON_INODES=y |
| @@ -234,18 +232,16 @@ CONFIG_SHMEM=y | |||
| 234 | CONFIG_AIO=y | 232 | CONFIG_AIO=y |
| 235 | 233 | ||
| 236 | # | 234 | # |
| 237 | # Performance Counters | 235 | # Kernel Performance Events And Counters |
| 238 | # | 236 | # |
| 239 | # CONFIG_VM_EVENT_COUNTERS is not set | 237 | # CONFIG_VM_EVENT_COUNTERS is not set |
| 240 | CONFIG_PCI_QUIRKS=y | 238 | CONFIG_PCI_QUIRKS=y |
| 241 | # CONFIG_SLUB_DEBUG is not set | 239 | # CONFIG_SLUB_DEBUG is not set |
| 242 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 243 | CONFIG_COMPAT_BRK=y | 240 | CONFIG_COMPAT_BRK=y |
| 244 | # CONFIG_SLAB is not set | 241 | # CONFIG_SLAB is not set |
| 245 | CONFIG_SLUB=y | 242 | CONFIG_SLUB=y |
| 246 | # CONFIG_SLOB is not set | 243 | # CONFIG_SLOB is not set |
| 247 | # CONFIG_PROFILING is not set | 244 | # CONFIG_PROFILING is not set |
| 248 | # CONFIG_MARKERS is not set | ||
| 249 | CONFIG_HAVE_OPROFILE=y | 245 | CONFIG_HAVE_OPROFILE=y |
| 250 | 246 | ||
| 251 | # | 247 | # |
| @@ -253,7 +249,7 @@ CONFIG_HAVE_OPROFILE=y | |||
| 253 | # | 249 | # |
| 254 | # CONFIG_GCOV_KERNEL is not set | 250 | # CONFIG_GCOV_KERNEL is not set |
| 255 | # CONFIG_SLOW_WORK is not set | 251 | # CONFIG_SLOW_WORK is not set |
| 256 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 252 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y |
| 257 | CONFIG_RT_MUTEXES=y | 253 | CONFIG_RT_MUTEXES=y |
| 258 | CONFIG_BASE_SMALL=0 | 254 | CONFIG_BASE_SMALL=0 |
| 259 | CONFIG_MODULES=y | 255 | CONFIG_MODULES=y |
| @@ -271,15 +267,41 @@ CONFIG_LBDAF=y | |||
| 271 | # IO Schedulers | 267 | # IO Schedulers |
| 272 | # | 268 | # |
| 273 | CONFIG_IOSCHED_NOOP=y | 269 | CONFIG_IOSCHED_NOOP=y |
| 274 | # CONFIG_IOSCHED_AS is not set | ||
| 275 | # CONFIG_IOSCHED_DEADLINE is not set | 270 | # CONFIG_IOSCHED_DEADLINE is not set |
| 276 | # CONFIG_IOSCHED_CFQ is not set | 271 | # CONFIG_IOSCHED_CFQ is not set |
| 277 | # CONFIG_DEFAULT_AS is not set | ||
| 278 | # CONFIG_DEFAULT_DEADLINE is not set | 272 | # CONFIG_DEFAULT_DEADLINE is not set |
| 279 | # CONFIG_DEFAULT_CFQ is not set | 273 | # CONFIG_DEFAULT_CFQ is not set |
| 280 | CONFIG_DEFAULT_NOOP=y | 274 | CONFIG_DEFAULT_NOOP=y |
| 281 | CONFIG_DEFAULT_IOSCHED="noop" | 275 | CONFIG_DEFAULT_IOSCHED="noop" |
| 282 | # CONFIG_PROBE_INITRD_HEADER is not set | 276 | # CONFIG_INLINE_SPIN_TRYLOCK is not set |
| 277 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set | ||
| 278 | # CONFIG_INLINE_SPIN_LOCK is not set | ||
| 279 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | ||
| 280 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | ||
| 281 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | ||
| 282 | # CONFIG_INLINE_SPIN_UNLOCK is not set | ||
| 283 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | ||
| 284 | # CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set | ||
| 285 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | ||
| 286 | # CONFIG_INLINE_READ_TRYLOCK is not set | ||
| 287 | # CONFIG_INLINE_READ_LOCK is not set | ||
| 288 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
| 289 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
| 290 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
| 291 | # CONFIG_INLINE_READ_UNLOCK is not set | ||
| 292 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
| 293 | # CONFIG_INLINE_READ_UNLOCK_IRQ is not set | ||
| 294 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
| 295 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
| 296 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
| 297 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
| 298 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
| 299 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
| 300 | # CONFIG_INLINE_WRITE_UNLOCK is not set | ||
| 301 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
| 302 | # CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set | ||
| 303 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
| 304 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
| 283 | # CONFIG_FREEZER is not set | 305 | # CONFIG_FREEZER is not set |
| 284 | 306 | ||
| 285 | # | 307 | # |
| @@ -289,7 +311,6 @@ CONFIG_HW_HAS_PCI=y | |||
| 289 | CONFIG_PCI=y | 311 | CONFIG_PCI=y |
| 290 | CONFIG_PCI_DOMAINS=y | 312 | CONFIG_PCI_DOMAINS=y |
| 291 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 313 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
| 292 | # CONFIG_PCI_LEGACY is not set | ||
| 293 | # CONFIG_PCI_DEBUG is not set | 314 | # CONFIG_PCI_DEBUG is not set |
| 294 | # CONFIG_PCI_STUB is not set | 315 | # CONFIG_PCI_STUB is not set |
| 295 | # CONFIG_PCI_IOV is not set | 316 | # CONFIG_PCI_IOV is not set |
| @@ -318,7 +339,6 @@ CONFIG_NET=y | |||
| 318 | # Networking options | 339 | # Networking options |
| 319 | # | 340 | # |
| 320 | CONFIG_PACKET=y | 341 | CONFIG_PACKET=y |
| 321 | CONFIG_PACKET_MMAP=y | ||
| 322 | CONFIG_UNIX=y | 342 | CONFIG_UNIX=y |
| 323 | CONFIG_XFRM=y | 343 | CONFIG_XFRM=y |
| 324 | # CONFIG_XFRM_USER is not set | 344 | # CONFIG_XFRM_USER is not set |
| @@ -390,12 +410,26 @@ CONFIG_NETFILTER_ADVANCED=y | |||
| 390 | # CONFIG_NETFILTER_NETLINK_LOG is not set | 410 | # CONFIG_NETFILTER_NETLINK_LOG is not set |
| 391 | # CONFIG_NF_CONNTRACK is not set | 411 | # CONFIG_NF_CONNTRACK is not set |
| 392 | CONFIG_NETFILTER_XTABLES=y | 412 | CONFIG_NETFILTER_XTABLES=y |
| 413 | |||
| 414 | # | ||
| 415 | # Xtables combined modules | ||
| 416 | # | ||
| 417 | # CONFIG_NETFILTER_XT_MARK is not set | ||
| 418 | |||
| 419 | # | ||
| 420 | # Xtables targets | ||
| 421 | # | ||
| 393 | # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set | 422 | # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set |
| 394 | # CONFIG_NETFILTER_XT_TARGET_MARK is not set | 423 | # CONFIG_NETFILTER_XT_TARGET_MARK is not set |
| 395 | # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set | 424 | # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set |
| 396 | # CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set | 425 | # CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set |
| 397 | # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set | 426 | # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set |
| 427 | # CONFIG_NETFILTER_XT_TARGET_TEE is not set | ||
| 398 | # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set | 428 | # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set |
| 429 | |||
| 430 | # | ||
| 431 | # Xtables matches | ||
| 432 | # | ||
| 399 | # CONFIG_NETFILTER_XT_MATCH_COMMENT is not set | 433 | # CONFIG_NETFILTER_XT_MATCH_COMMENT is not set |
| 400 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | 434 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set |
| 401 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | 435 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set |
| @@ -465,10 +499,13 @@ CONFIG_IP6_NF_FILTER=y | |||
| 465 | # CONFIG_IP6_NF_RAW is not set | 499 | # CONFIG_IP6_NF_RAW is not set |
| 466 | # CONFIG_IP_DCCP is not set | 500 | # CONFIG_IP_DCCP is not set |
| 467 | # CONFIG_IP_SCTP is not set | 501 | # CONFIG_IP_SCTP is not set |
| 502 | # CONFIG_RDS is not set | ||
| 468 | # CONFIG_TIPC is not set | 503 | # CONFIG_TIPC is not set |
| 469 | # CONFIG_ATM is not set | 504 | # CONFIG_ATM is not set |
| 505 | # CONFIG_L2TP is not set | ||
| 470 | CONFIG_STP=y | 506 | CONFIG_STP=y |
| 471 | CONFIG_BRIDGE=y | 507 | CONFIG_BRIDGE=y |
| 508 | CONFIG_BRIDGE_IGMP_SNOOPING=y | ||
| 472 | # CONFIG_NET_DSA is not set | 509 | # CONFIG_NET_DSA is not set |
| 473 | # CONFIG_VLAN_8021Q is not set | 510 | # CONFIG_VLAN_8021Q is not set |
| 474 | # CONFIG_DECNET is not set | 511 | # CONFIG_DECNET is not set |
| @@ -526,10 +563,21 @@ CONFIG_NET_SCH_FIFO=y | |||
| 526 | # CONFIG_IRDA is not set | 563 | # CONFIG_IRDA is not set |
| 527 | # CONFIG_BT is not set | 564 | # CONFIG_BT is not set |
| 528 | # CONFIG_AF_RXRPC is not set | 565 | # CONFIG_AF_RXRPC is not set |
| 529 | # CONFIG_WIRELESS is not set | 566 | CONFIG_WIRELESS=y |
| 567 | # CONFIG_CFG80211 is not set | ||
| 568 | # CONFIG_LIB80211 is not set | ||
| 569 | |||
| 570 | # | ||
| 571 | # CFG80211 needs to be enabled for MAC80211 | ||
| 572 | # | ||
| 573 | |||
| 574 | # | ||
| 575 | # Some wireless drivers require a rate control algorithm | ||
| 576 | # | ||
| 530 | # CONFIG_WIMAX is not set | 577 | # CONFIG_WIMAX is not set |
| 531 | # CONFIG_RFKILL is not set | 578 | # CONFIG_RFKILL is not set |
| 532 | # CONFIG_NET_9P is not set | 579 | # CONFIG_NET_9P is not set |
| 580 | # CONFIG_CAIF is not set | ||
| 533 | 581 | ||
| 534 | # | 582 | # |
| 535 | # Device Drivers | 583 | # Device Drivers |
| @@ -539,6 +587,7 @@ CONFIG_NET_SCH_FIFO=y | |||
| 539 | # Generic Driver Options | 587 | # Generic Driver Options |
| 540 | # | 588 | # |
| 541 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 589 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 590 | # CONFIG_DEVTMPFS is not set | ||
| 542 | CONFIG_STANDALONE=y | 591 | CONFIG_STANDALONE=y |
| 543 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 592 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 544 | CONFIG_FW_LOADER=y | 593 | CONFIG_FW_LOADER=y |
| @@ -550,9 +599,9 @@ CONFIG_EXTRA_FIRMWARE="" | |||
| 550 | # CONFIG_CONNECTOR is not set | 599 | # CONFIG_CONNECTOR is not set |
| 551 | CONFIG_MTD=y | 600 | CONFIG_MTD=y |
| 552 | # CONFIG_MTD_DEBUG is not set | 601 | # CONFIG_MTD_DEBUG is not set |
| 602 | # CONFIG_MTD_TESTS is not set | ||
| 553 | # CONFIG_MTD_CONCAT is not set | 603 | # CONFIG_MTD_CONCAT is not set |
| 554 | CONFIG_MTD_PARTITIONS=y | 604 | CONFIG_MTD_PARTITIONS=y |
| 555 | # CONFIG_MTD_TESTS is not set | ||
| 556 | # CONFIG_MTD_REDBOOT_PARTS is not set | 605 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 557 | CONFIG_MTD_CMDLINE_PARTS=y | 606 | CONFIG_MTD_CMDLINE_PARTS=y |
| 558 | # CONFIG_MTD_AR7_PARTS is not set | 607 | # CONFIG_MTD_AR7_PARTS is not set |
| @@ -568,6 +617,7 @@ CONFIG_MTD_BLOCK=y | |||
| 568 | # CONFIG_INFTL is not set | 617 | # CONFIG_INFTL is not set |
| 569 | # CONFIG_RFD_FTL is not set | 618 | # CONFIG_RFD_FTL is not set |
| 570 | # CONFIG_SSFDC is not set | 619 | # CONFIG_SSFDC is not set |
| 620 | # CONFIG_SM_FTL is not set | ||
| 571 | # CONFIG_MTD_OOPS is not set | 621 | # CONFIG_MTD_OOPS is not set |
| 572 | 622 | ||
| 573 | # | 623 | # |
| @@ -611,11 +661,16 @@ CONFIG_MTD_CFI_I2=y | |||
| 611 | # CONFIG_MTD_DOC2000 is not set | 661 | # CONFIG_MTD_DOC2000 is not set |
| 612 | # CONFIG_MTD_DOC2001 is not set | 662 | # CONFIG_MTD_DOC2001 is not set |
| 613 | # CONFIG_MTD_DOC2001PLUS is not set | 663 | # CONFIG_MTD_DOC2001PLUS is not set |
| 664 | CONFIG_MTD_NAND_ECC=y | ||
| 665 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 614 | CONFIG_MTD_NAND=y | 666 | CONFIG_MTD_NAND=y |
| 615 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | 667 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set |
| 616 | # CONFIG_MTD_NAND_ECC_SMC is not set | 668 | # CONFIG_MTD_SM_COMMON is not set |
| 617 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | 669 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set |
| 670 | # CONFIG_MTD_NAND_DENALI is not set | ||
| 671 | CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018 | ||
| 618 | CONFIG_MTD_NAND_IDS=y | 672 | CONFIG_MTD_NAND_IDS=y |
| 673 | # CONFIG_MTD_NAND_RICOH is not set | ||
| 619 | # CONFIG_MTD_NAND_DISKONCHIP is not set | 674 | # CONFIG_MTD_NAND_DISKONCHIP is not set |
| 620 | # CONFIG_MTD_NAND_CAFE is not set | 675 | # CONFIG_MTD_NAND_CAFE is not set |
| 621 | # CONFIG_MTD_NAND_NANDSIM is not set | 676 | # CONFIG_MTD_NAND_NANDSIM is not set |
| @@ -641,6 +696,10 @@ CONFIG_BLK_DEV=y | |||
| 641 | # CONFIG_BLK_DEV_COW_COMMON is not set | 696 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| 642 | CONFIG_BLK_DEV_LOOP=y | 697 | CONFIG_BLK_DEV_LOOP=y |
| 643 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 698 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
| 699 | |||
| 700 | # | ||
| 701 | # DRBD disabled because PROC_FS, INET or CONNECTOR not selected | ||
| 702 | # | ||
| 644 | # CONFIG_BLK_DEV_NBD is not set | 703 | # CONFIG_BLK_DEV_NBD is not set |
| 645 | # CONFIG_BLK_DEV_SX8 is not set | 704 | # CONFIG_BLK_DEV_SX8 is not set |
| 646 | # CONFIG_BLK_DEV_UB is not set | 705 | # CONFIG_BLK_DEV_UB is not set |
| @@ -658,6 +717,7 @@ CONFIG_HAVE_IDE=y | |||
| 658 | # | 717 | # |
| 659 | # SCSI device support | 718 | # SCSI device support |
| 660 | # | 719 | # |
| 720 | CONFIG_SCSI_MOD=y | ||
| 661 | # CONFIG_RAID_ATTRS is not set | 721 | # CONFIG_RAID_ATTRS is not set |
| 662 | CONFIG_SCSI=y | 722 | CONFIG_SCSI=y |
| 663 | CONFIG_SCSI_DMA=y | 723 | CONFIG_SCSI_DMA=y |
| @@ -693,64 +753,95 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
| 693 | # CONFIG_SCSI_OSD_INITIATOR is not set | 753 | # CONFIG_SCSI_OSD_INITIATOR is not set |
| 694 | CONFIG_ATA=y | 754 | CONFIG_ATA=y |
| 695 | # CONFIG_ATA_NONSTANDARD is not set | 755 | # CONFIG_ATA_NONSTANDARD is not set |
| 756 | CONFIG_ATA_VERBOSE_ERROR=y | ||
| 696 | CONFIG_SATA_PMP=y | 757 | CONFIG_SATA_PMP=y |
| 758 | |||
| 759 | # | ||
| 760 | # Controllers with non-SFF native interface | ||
| 761 | # | ||
| 697 | # CONFIG_SATA_AHCI is not set | 762 | # CONFIG_SATA_AHCI is not set |
| 763 | # CONFIG_SATA_AHCI_PLATFORM is not set | ||
| 764 | # CONFIG_SATA_INIC162X is not set | ||
| 698 | # CONFIG_SATA_SIL24 is not set | 765 | # CONFIG_SATA_SIL24 is not set |
| 699 | CONFIG_ATA_SFF=y | 766 | CONFIG_ATA_SFF=y |
| 700 | # CONFIG_SATA_SVW is not set | 767 | |
| 768 | # | ||
| 769 | # SFF controllers with custom DMA interface | ||
| 770 | # | ||
| 771 | # CONFIG_PDC_ADMA is not set | ||
| 772 | # CONFIG_SATA_QSTOR is not set | ||
| 773 | # CONFIG_SATA_SX4 is not set | ||
| 774 | CONFIG_ATA_BMDMA=y | ||
| 775 | |||
| 776 | # | ||
| 777 | # SATA SFF controllers with BMDMA | ||
| 778 | # | ||
| 701 | # CONFIG_ATA_PIIX is not set | 779 | # CONFIG_ATA_PIIX is not set |
| 702 | # CONFIG_SATA_MV is not set | 780 | # CONFIG_SATA_MV is not set |
| 703 | # CONFIG_SATA_NV is not set | 781 | # CONFIG_SATA_NV is not set |
| 704 | # CONFIG_PDC_ADMA is not set | ||
| 705 | # CONFIG_SATA_QSTOR is not set | ||
| 706 | # CONFIG_SATA_PROMISE is not set | 782 | # CONFIG_SATA_PROMISE is not set |
| 707 | # CONFIG_SATA_SX4 is not set | ||
| 708 | # CONFIG_SATA_SIL is not set | 783 | # CONFIG_SATA_SIL is not set |
| 709 | # CONFIG_SATA_SIS is not set | 784 | # CONFIG_SATA_SIS is not set |
| 785 | # CONFIG_SATA_SVW is not set | ||
| 710 | # CONFIG_SATA_ULI is not set | 786 | # CONFIG_SATA_ULI is not set |
| 711 | # CONFIG_SATA_VIA is not set | 787 | # CONFIG_SATA_VIA is not set |
| 712 | # CONFIG_SATA_VITESSE is not set | 788 | # CONFIG_SATA_VITESSE is not set |
| 713 | # CONFIG_SATA_INIC162X is not set | 789 | |
| 790 | # | ||
| 791 | # PATA SFF controllers with BMDMA | ||
| 792 | # | ||
| 714 | # CONFIG_PATA_ALI is not set | 793 | # CONFIG_PATA_ALI is not set |
| 715 | # CONFIG_PATA_AMD is not set | 794 | # CONFIG_PATA_AMD is not set |
| 716 | # CONFIG_PATA_ARTOP is not set | 795 | # CONFIG_PATA_ARTOP is not set |
| 717 | # CONFIG_PATA_ATIIXP is not set | 796 | # CONFIG_PATA_ATIIXP is not set |
| 718 | # CONFIG_PATA_CMD640_PCI is not set | 797 | # CONFIG_PATA_ATP867X is not set |
| 719 | # CONFIG_PATA_CMD64X is not set | 798 | # CONFIG_PATA_CMD64X is not set |
| 720 | # CONFIG_PATA_CS5520 is not set | 799 | # CONFIG_PATA_CS5520 is not set |
| 721 | # CONFIG_PATA_CS5530 is not set | 800 | # CONFIG_PATA_CS5530 is not set |
| 722 | # CONFIG_PATA_CYPRESS is not set | 801 | # CONFIG_PATA_CYPRESS is not set |
| 723 | # CONFIG_PATA_EFAR is not set | 802 | # CONFIG_PATA_EFAR is not set |
| 724 | # CONFIG_ATA_GENERIC is not set | ||
| 725 | # CONFIG_PATA_HPT366 is not set | 803 | # CONFIG_PATA_HPT366 is not set |
| 726 | # CONFIG_PATA_HPT37X is not set | 804 | # CONFIG_PATA_HPT37X is not set |
| 727 | # CONFIG_PATA_HPT3X2N is not set | 805 | # CONFIG_PATA_HPT3X2N is not set |
| 728 | # CONFIG_PATA_HPT3X3 is not set | 806 | # CONFIG_PATA_HPT3X3 is not set |
| 729 | # CONFIG_PATA_IT821X is not set | ||
| 730 | # CONFIG_PATA_IT8213 is not set | 807 | # CONFIG_PATA_IT8213 is not set |
| 808 | # CONFIG_PATA_IT821X is not set | ||
| 731 | # CONFIG_PATA_JMICRON is not set | 809 | # CONFIG_PATA_JMICRON is not set |
| 732 | # CONFIG_PATA_TRIFLEX is not set | ||
| 733 | # CONFIG_PATA_MARVELL is not set | 810 | # CONFIG_PATA_MARVELL is not set |
| 734 | # CONFIG_PATA_MPIIX is not set | ||
| 735 | # CONFIG_PATA_OLDPIIX is not set | ||
| 736 | # CONFIG_PATA_NETCELL is not set | 811 | # CONFIG_PATA_NETCELL is not set |
| 737 | # CONFIG_PATA_NINJA32 is not set | 812 | # CONFIG_PATA_NINJA32 is not set |
| 738 | # CONFIG_PATA_NS87410 is not set | ||
| 739 | # CONFIG_PATA_NS87415 is not set | 813 | # CONFIG_PATA_NS87415 is not set |
| 740 | # CONFIG_PATA_OPTI is not set | 814 | # CONFIG_PATA_OLDPIIX is not set |
| 741 | # CONFIG_PATA_OPTIDMA is not set | 815 | # CONFIG_PATA_OPTIDMA is not set |
| 816 | # CONFIG_PATA_PDC2027X is not set | ||
| 742 | # CONFIG_PATA_PDC_OLD is not set | 817 | # CONFIG_PATA_PDC_OLD is not set |
| 743 | # CONFIG_PATA_RADISYS is not set | 818 | # CONFIG_PATA_RADISYS is not set |
| 744 | # CONFIG_PATA_RZ1000 is not set | 819 | # CONFIG_PATA_RDC is not set |
| 745 | # CONFIG_PATA_SC1200 is not set | 820 | # CONFIG_PATA_SC1200 is not set |
| 821 | # CONFIG_PATA_SCH is not set | ||
| 746 | # CONFIG_PATA_SERVERWORKS is not set | 822 | # CONFIG_PATA_SERVERWORKS is not set |
| 747 | # CONFIG_PATA_PDC2027X is not set | ||
| 748 | # CONFIG_PATA_SIL680 is not set | 823 | # CONFIG_PATA_SIL680 is not set |
| 749 | # CONFIG_PATA_SIS is not set | 824 | # CONFIG_PATA_SIS is not set |
| 825 | # CONFIG_PATA_TOSHIBA is not set | ||
| 826 | # CONFIG_PATA_TRIFLEX is not set | ||
| 750 | # CONFIG_PATA_VIA is not set | 827 | # CONFIG_PATA_VIA is not set |
| 751 | # CONFIG_PATA_WINBOND is not set | 828 | # CONFIG_PATA_WINBOND is not set |
| 829 | |||
| 830 | # | ||
| 831 | # PIO-only SFF controllers | ||
| 832 | # | ||
| 833 | # CONFIG_PATA_CMD640_PCI is not set | ||
| 834 | # CONFIG_PATA_MPIIX is not set | ||
| 835 | # CONFIG_PATA_NS87410 is not set | ||
| 836 | # CONFIG_PATA_OPTI is not set | ||
| 752 | # CONFIG_PATA_PLATFORM is not set | 837 | # CONFIG_PATA_PLATFORM is not set |
| 753 | # CONFIG_PATA_SCH is not set | 838 | # CONFIG_PATA_RZ1000 is not set |
| 839 | |||
| 840 | # | ||
| 841 | # Generic fallback / legacy drivers | ||
| 842 | # | ||
| 843 | # CONFIG_ATA_GENERIC is not set | ||
| 844 | # CONFIG_PATA_LEGACY is not set | ||
| 754 | # CONFIG_MD is not set | 845 | # CONFIG_MD is not set |
| 755 | # CONFIG_FUSION is not set | 846 | # CONFIG_FUSION is not set |
| 756 | 847 | ||
| @@ -763,7 +854,7 @@ CONFIG_ATA_SFF=y | |||
| 763 | # | 854 | # |
| 764 | 855 | ||
| 765 | # | 856 | # |
| 766 | # See the help texts for more information. | 857 | # The newer stack is recommended. |
| 767 | # | 858 | # |
| 768 | # CONFIG_FIREWIRE is not set | 859 | # CONFIG_FIREWIRE is not set |
| 769 | # CONFIG_IEEE1394 is not set | 860 | # CONFIG_IEEE1394 is not set |
| @@ -787,6 +878,7 @@ CONFIG_MII=y | |||
| 787 | # CONFIG_SMC91X is not set | 878 | # CONFIG_SMC91X is not set |
| 788 | # CONFIG_DM9000 is not set | 879 | # CONFIG_DM9000 is not set |
| 789 | # CONFIG_ETHOC is not set | 880 | # CONFIG_ETHOC is not set |
| 881 | # CONFIG_SMSC911X is not set | ||
| 790 | # CONFIG_DNET is not set | 882 | # CONFIG_DNET is not set |
| 791 | # CONFIG_NET_TULIP is not set | 883 | # CONFIG_NET_TULIP is not set |
| 792 | # CONFIG_HP100 is not set | 884 | # CONFIG_HP100 is not set |
| @@ -800,6 +892,7 @@ CONFIG_MII=y | |||
| 800 | # CONFIG_NET_PCI is not set | 892 | # CONFIG_NET_PCI is not set |
| 801 | # CONFIG_B44 is not set | 893 | # CONFIG_B44 is not set |
| 802 | # CONFIG_KS8842 is not set | 894 | # CONFIG_KS8842 is not set |
| 895 | # CONFIG_KS8851_MLL is not set | ||
| 803 | # CONFIG_ATL2 is not set | 896 | # CONFIG_ATL2 is not set |
| 804 | CONFIG_NETDEV_1000=y | 897 | CONFIG_NETDEV_1000=y |
| 805 | # CONFIG_ACENIC is not set | 898 | # CONFIG_ACENIC is not set |
| @@ -829,6 +922,8 @@ CONFIG_NETDEV_10000=y | |||
| 829 | # CONFIG_CHELSIO_T1 is not set | 922 | # CONFIG_CHELSIO_T1 is not set |
| 830 | CONFIG_CHELSIO_T3_DEPENDS=y | 923 | CONFIG_CHELSIO_T3_DEPENDS=y |
| 831 | # CONFIG_CHELSIO_T3 is not set | 924 | # CONFIG_CHELSIO_T3 is not set |
| 925 | CONFIG_CHELSIO_T4_DEPENDS=y | ||
| 926 | # CONFIG_CHELSIO_T4 is not set | ||
| 832 | # CONFIG_ENIC is not set | 927 | # CONFIG_ENIC is not set |
| 833 | # CONFIG_IXGBE is not set | 928 | # CONFIG_IXGBE is not set |
| 834 | # CONFIG_IXGB is not set | 929 | # CONFIG_IXGB is not set |
| @@ -841,16 +936,12 @@ CONFIG_CHELSIO_T3_DEPENDS=y | |||
| 841 | # CONFIG_MLX4_CORE is not set | 936 | # CONFIG_MLX4_CORE is not set |
| 842 | # CONFIG_TEHUTI is not set | 937 | # CONFIG_TEHUTI is not set |
| 843 | # CONFIG_BNX2X is not set | 938 | # CONFIG_BNX2X is not set |
| 939 | # CONFIG_QLCNIC is not set | ||
| 844 | # CONFIG_QLGE is not set | 940 | # CONFIG_QLGE is not set |
| 845 | # CONFIG_SFC is not set | 941 | # CONFIG_SFC is not set |
| 846 | # CONFIG_BE2NET is not set | 942 | # CONFIG_BE2NET is not set |
| 847 | # CONFIG_TR is not set | 943 | # CONFIG_TR is not set |
| 848 | 944 | # CONFIG_WLAN is not set | |
| 849 | # | ||
| 850 | # Wireless LAN | ||
| 851 | # | ||
| 852 | # CONFIG_WLAN_PRE80211 is not set | ||
| 853 | # CONFIG_WLAN_80211 is not set | ||
| 854 | 945 | ||
| 855 | # | 946 | # |
| 856 | # Enable WiMAX (Networking options) to see the WiMAX drivers | 947 | # Enable WiMAX (Networking options) to see the WiMAX drivers |
| @@ -864,6 +955,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y | |||
| 864 | # CONFIG_USB_PEGASUS is not set | 955 | # CONFIG_USB_PEGASUS is not set |
| 865 | CONFIG_USB_RTL8150=y | 956 | CONFIG_USB_RTL8150=y |
| 866 | # CONFIG_USB_USBNET is not set | 957 | # CONFIG_USB_USBNET is not set |
| 958 | # CONFIG_USB_IPHETH is not set | ||
| 867 | # CONFIG_WAN is not set | 959 | # CONFIG_WAN is not set |
| 868 | # CONFIG_FDDI is not set | 960 | # CONFIG_FDDI is not set |
| 869 | # CONFIG_HIPPI is not set | 961 | # CONFIG_HIPPI is not set |
| @@ -873,6 +965,7 @@ CONFIG_USB_RTL8150=y | |||
| 873 | # CONFIG_NETCONSOLE is not set | 965 | # CONFIG_NETCONSOLE is not set |
| 874 | # CONFIG_NETPOLL is not set | 966 | # CONFIG_NETPOLL is not set |
| 875 | # CONFIG_NET_POLL_CONTROLLER is not set | 967 | # CONFIG_NET_POLL_CONTROLLER is not set |
| 968 | # CONFIG_VMXNET3 is not set | ||
| 876 | # CONFIG_ISDN is not set | 969 | # CONFIG_ISDN is not set |
| 877 | # CONFIG_PHONE is not set | 970 | # CONFIG_PHONE is not set |
| 878 | 971 | ||
| @@ -882,6 +975,7 @@ CONFIG_USB_RTL8150=y | |||
| 882 | CONFIG_INPUT=y | 975 | CONFIG_INPUT=y |
| 883 | # CONFIG_INPUT_FF_MEMLESS is not set | 976 | # CONFIG_INPUT_FF_MEMLESS is not set |
| 884 | # CONFIG_INPUT_POLLDEV is not set | 977 | # CONFIG_INPUT_POLLDEV is not set |
| 978 | # CONFIG_INPUT_SPARSEKMAP is not set | ||
| 885 | 979 | ||
| 886 | # | 980 | # |
| 887 | # Userland interfaces | 981 | # Userland interfaces |
| @@ -913,6 +1007,7 @@ CONFIG_INPUT_EVDEV=y | |||
| 913 | # CONFIG_VT is not set | 1007 | # CONFIG_VT is not set |
| 914 | # CONFIG_DEVKMEM is not set | 1008 | # CONFIG_DEVKMEM is not set |
| 915 | # CONFIG_SERIAL_NONSTANDARD is not set | 1009 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 1010 | # CONFIG_N_GSM is not set | ||
| 916 | # CONFIG_NOZOMI is not set | 1011 | # CONFIG_NOZOMI is not set |
| 917 | 1012 | ||
| 918 | # | 1013 | # |
| @@ -924,6 +1019,9 @@ CONFIG_INPUT_EVDEV=y | |||
| 924 | # Non-8250 serial port support | 1019 | # Non-8250 serial port support |
| 925 | # | 1020 | # |
| 926 | # CONFIG_SERIAL_JSM is not set | 1021 | # CONFIG_SERIAL_JSM is not set |
| 1022 | # CONFIG_SERIAL_TIMBERDALE is not set | ||
| 1023 | # CONFIG_SERIAL_ALTERA_JTAGUART is not set | ||
| 1024 | # CONFIG_SERIAL_ALTERA_UART is not set | ||
| 927 | CONFIG_UNIX98_PTYS=y | 1025 | CONFIG_UNIX98_PTYS=y |
| 928 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | 1026 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
| 929 | # CONFIG_LEGACY_PTYS is not set | 1027 | # CONFIG_LEGACY_PTYS is not set |
| @@ -934,6 +1032,7 @@ CONFIG_UNIX98_PTYS=y | |||
| 934 | # CONFIG_RAW_DRIVER is not set | 1032 | # CONFIG_RAW_DRIVER is not set |
| 935 | # CONFIG_TCG_TPM is not set | 1033 | # CONFIG_TCG_TPM is not set |
| 936 | CONFIG_DEVPORT=y | 1034 | CONFIG_DEVPORT=y |
| 1035 | # CONFIG_RAMOOPS is not set | ||
| 937 | # CONFIG_I2C is not set | 1036 | # CONFIG_I2C is not set |
| 938 | # CONFIG_SPI is not set | 1037 | # CONFIG_SPI is not set |
| 939 | 1038 | ||
| @@ -945,7 +1044,6 @@ CONFIG_DEVPORT=y | |||
| 945 | # CONFIG_POWER_SUPPLY is not set | 1044 | # CONFIG_POWER_SUPPLY is not set |
| 946 | # CONFIG_HWMON is not set | 1045 | # CONFIG_HWMON is not set |
| 947 | # CONFIG_THERMAL is not set | 1046 | # CONFIG_THERMAL is not set |
| 948 | # CONFIG_THERMAL_HWMON is not set | ||
| 949 | # CONFIG_WATCHDOG is not set | 1047 | # CONFIG_WATCHDOG is not set |
| 950 | CONFIG_SSB_POSSIBLE=y | 1048 | CONFIG_SSB_POSSIBLE=y |
| 951 | 1049 | ||
| @@ -953,20 +1051,14 @@ CONFIG_SSB_POSSIBLE=y | |||
| 953 | # Sonics Silicon Backplane | 1051 | # Sonics Silicon Backplane |
| 954 | # | 1052 | # |
| 955 | # CONFIG_SSB is not set | 1053 | # CONFIG_SSB is not set |
| 956 | 1054 | # CONFIG_MFD_SUPPORT is not set | |
| 957 | # | ||
| 958 | # Multifunction device drivers | ||
| 959 | # | ||
| 960 | # CONFIG_MFD_CORE is not set | ||
| 961 | # CONFIG_MFD_SM501 is not set | ||
| 962 | # CONFIG_HTC_PASIC3 is not set | ||
| 963 | # CONFIG_MFD_TMIO is not set | ||
| 964 | # CONFIG_REGULATOR is not set | 1055 | # CONFIG_REGULATOR is not set |
| 965 | # CONFIG_MEDIA_SUPPORT is not set | 1056 | # CONFIG_MEDIA_SUPPORT is not set |
| 966 | 1057 | ||
| 967 | # | 1058 | # |
| 968 | # Graphics support | 1059 | # Graphics support |
| 969 | # | 1060 | # |
| 1061 | # CONFIG_VGA_ARB is not set | ||
| 970 | # CONFIG_DRM is not set | 1062 | # CONFIG_DRM is not set |
| 971 | # CONFIG_VGASTATE is not set | 1063 | # CONFIG_VGASTATE is not set |
| 972 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 1064 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
| @@ -980,7 +1072,6 @@ CONFIG_SSB_POSSIBLE=y | |||
| 980 | # CONFIG_SOUND is not set | 1072 | # CONFIG_SOUND is not set |
| 981 | CONFIG_HID_SUPPORT=y | 1073 | CONFIG_HID_SUPPORT=y |
| 982 | CONFIG_HID=y | 1074 | CONFIG_HID=y |
| 983 | # CONFIG_HID_DEBUG is not set | ||
| 984 | # CONFIG_HIDRAW is not set | 1075 | # CONFIG_HIDRAW is not set |
| 985 | 1076 | ||
| 986 | # | 1077 | # |
| @@ -993,31 +1084,43 @@ CONFIG_USB_HIDDEV=y | |||
| 993 | # | 1084 | # |
| 994 | # Special HID drivers | 1085 | # Special HID drivers |
| 995 | # | 1086 | # |
| 1087 | # CONFIG_HID_3M_PCT is not set | ||
| 996 | # CONFIG_HID_A4TECH is not set | 1088 | # CONFIG_HID_A4TECH is not set |
| 997 | # CONFIG_HID_APPLE is not set | 1089 | # CONFIG_HID_APPLE is not set |
| 998 | # CONFIG_HID_BELKIN is not set | 1090 | # CONFIG_HID_BELKIN is not set |
| 1091 | # CONFIG_HID_CANDO is not set | ||
| 999 | # CONFIG_HID_CHERRY is not set | 1092 | # CONFIG_HID_CHERRY is not set |
| 1000 | # CONFIG_HID_CHICONY is not set | 1093 | # CONFIG_HID_CHICONY is not set |
| 1001 | # CONFIG_HID_CYPRESS is not set | 1094 | # CONFIG_HID_CYPRESS is not set |
| 1002 | # CONFIG_HID_DRAGONRISE is not set | 1095 | # CONFIG_HID_DRAGONRISE is not set |
| 1096 | # CONFIG_HID_EGALAX is not set | ||
| 1003 | # CONFIG_HID_EZKEY is not set | 1097 | # CONFIG_HID_EZKEY is not set |
| 1004 | # CONFIG_HID_KYE is not set | 1098 | # CONFIG_HID_KYE is not set |
| 1005 | # CONFIG_HID_GYRATION is not set | 1099 | # CONFIG_HID_GYRATION is not set |
| 1100 | # CONFIG_HID_TWINHAN is not set | ||
| 1006 | # CONFIG_HID_KENSINGTON is not set | 1101 | # CONFIG_HID_KENSINGTON is not set |
| 1007 | # CONFIG_HID_LOGITECH is not set | 1102 | # CONFIG_HID_LOGITECH is not set |
| 1008 | # CONFIG_HID_MICROSOFT is not set | 1103 | # CONFIG_HID_MICROSOFT is not set |
| 1104 | # CONFIG_HID_MOSART is not set | ||
| 1009 | # CONFIG_HID_MONTEREY is not set | 1105 | # CONFIG_HID_MONTEREY is not set |
| 1010 | # CONFIG_HID_NTRIG is not set | 1106 | # CONFIG_HID_NTRIG is not set |
| 1107 | # CONFIG_HID_ORTEK is not set | ||
| 1011 | # CONFIG_HID_PANTHERLORD is not set | 1108 | # CONFIG_HID_PANTHERLORD is not set |
| 1012 | # CONFIG_HID_PETALYNX is not set | 1109 | # CONFIG_HID_PETALYNX is not set |
| 1110 | # CONFIG_HID_PICOLCD is not set | ||
| 1111 | # CONFIG_HID_QUANTA is not set | ||
| 1112 | # CONFIG_HID_ROCCAT is not set | ||
| 1113 | # CONFIG_HID_ROCCAT_KONE is not set | ||
| 1013 | # CONFIG_HID_SAMSUNG is not set | 1114 | # CONFIG_HID_SAMSUNG is not set |
| 1014 | # CONFIG_HID_SONY is not set | 1115 | # CONFIG_HID_SONY is not set |
| 1116 | # CONFIG_HID_STANTUM is not set | ||
| 1015 | # CONFIG_HID_SUNPLUS is not set | 1117 | # CONFIG_HID_SUNPLUS is not set |
| 1016 | # CONFIG_HID_GREENASIA is not set | 1118 | # CONFIG_HID_GREENASIA is not set |
| 1017 | # CONFIG_HID_SMARTJOYPLUS is not set | 1119 | # CONFIG_HID_SMARTJOYPLUS is not set |
| 1018 | # CONFIG_HID_TOPSEED is not set | 1120 | # CONFIG_HID_TOPSEED is not set |
| 1019 | # CONFIG_HID_THRUSTMASTER is not set | 1121 | # CONFIG_HID_THRUSTMASTER is not set |
| 1020 | # CONFIG_HID_ZEROPLUS is not set | 1122 | # CONFIG_HID_ZEROPLUS is not set |
| 1123 | # CONFIG_HID_ZYDACRON is not set | ||
| 1021 | CONFIG_USB_SUPPORT=y | 1124 | CONFIG_USB_SUPPORT=y |
| 1022 | CONFIG_USB_ARCH_HAS_HCD=y | 1125 | CONFIG_USB_ARCH_HAS_HCD=y |
| 1023 | CONFIG_USB_ARCH_HAS_OHCI=y | 1126 | CONFIG_USB_ARCH_HAS_OHCI=y |
| @@ -1032,7 +1135,6 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | |||
| 1032 | CONFIG_USB_DEVICEFS=y | 1135 | CONFIG_USB_DEVICEFS=y |
| 1033 | # CONFIG_USB_DEVICE_CLASS is not set | 1136 | # CONFIG_USB_DEVICE_CLASS is not set |
| 1034 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1137 | # CONFIG_USB_DYNAMIC_MINORS is not set |
| 1035 | # CONFIG_USB_OTG is not set | ||
| 1036 | # CONFIG_USB_OTG_WHITELIST is not set | 1138 | # CONFIG_USB_OTG_WHITELIST is not set |
| 1037 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | 1139 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set |
| 1038 | # CONFIG_USB_MON is not set | 1140 | # CONFIG_USB_MON is not set |
| @@ -1050,6 +1152,7 @@ CONFIG_USB_EHCI_HCD=y | |||
| 1050 | # CONFIG_USB_OXU210HP_HCD is not set | 1152 | # CONFIG_USB_OXU210HP_HCD is not set |
| 1051 | # CONFIG_USB_ISP116X_HCD is not set | 1153 | # CONFIG_USB_ISP116X_HCD is not set |
| 1052 | # CONFIG_USB_ISP1760_HCD is not set | 1154 | # CONFIG_USB_ISP1760_HCD is not set |
| 1155 | # CONFIG_USB_ISP1362_HCD is not set | ||
| 1053 | CONFIG_USB_OHCI_HCD=y | 1156 | CONFIG_USB_OHCI_HCD=y |
| 1054 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | 1157 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
| 1055 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | 1158 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set |
| @@ -1133,6 +1236,7 @@ CONFIG_USB_SERIAL_CP210X=y | |||
| 1133 | # CONFIG_USB_SERIAL_NAVMAN is not set | 1236 | # CONFIG_USB_SERIAL_NAVMAN is not set |
| 1134 | # CONFIG_USB_SERIAL_PL2303 is not set | 1237 | # CONFIG_USB_SERIAL_PL2303 is not set |
| 1135 | # CONFIG_USB_SERIAL_OTI6858 is not set | 1238 | # CONFIG_USB_SERIAL_OTI6858 is not set |
| 1239 | # CONFIG_USB_SERIAL_QCAUX is not set | ||
| 1136 | # CONFIG_USB_SERIAL_QUALCOMM is not set | 1240 | # CONFIG_USB_SERIAL_QUALCOMM is not set |
| 1137 | # CONFIG_USB_SERIAL_SPCP8X5 is not set | 1241 | # CONFIG_USB_SERIAL_SPCP8X5 is not set |
| 1138 | # CONFIG_USB_SERIAL_HP4X is not set | 1242 | # CONFIG_USB_SERIAL_HP4X is not set |
| @@ -1146,6 +1250,8 @@ CONFIG_USB_SERIAL_CP210X=y | |||
| 1146 | # CONFIG_USB_SERIAL_OPTION is not set | 1250 | # CONFIG_USB_SERIAL_OPTION is not set |
| 1147 | # CONFIG_USB_SERIAL_OMNINET is not set | 1251 | # CONFIG_USB_SERIAL_OMNINET is not set |
| 1148 | # CONFIG_USB_SERIAL_OPTICON is not set | 1252 | # CONFIG_USB_SERIAL_OPTICON is not set |
| 1253 | # CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set | ||
| 1254 | # CONFIG_USB_SERIAL_ZIO is not set | ||
| 1149 | # CONFIG_USB_SERIAL_DEBUG is not set | 1255 | # CONFIG_USB_SERIAL_DEBUG is not set |
| 1150 | 1256 | ||
| 1151 | # | 1257 | # |
| @@ -1158,7 +1264,6 @@ CONFIG_USB_SERIAL_CP210X=y | |||
| 1158 | # CONFIG_USB_RIO500 is not set | 1264 | # CONFIG_USB_RIO500 is not set |
| 1159 | # CONFIG_USB_LEGOTOWER is not set | 1265 | # CONFIG_USB_LEGOTOWER is not set |
| 1160 | # CONFIG_USB_LCD is not set | 1266 | # CONFIG_USB_LCD is not set |
| 1161 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1162 | # CONFIG_USB_LED is not set | 1267 | # CONFIG_USB_LED is not set |
| 1163 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1268 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
| 1164 | # CONFIG_USB_CYTHERM is not set | 1269 | # CONFIG_USB_CYTHERM is not set |
| @@ -1171,7 +1276,6 @@ CONFIG_USB_SERIAL_CP210X=y | |||
| 1171 | # CONFIG_USB_IOWARRIOR is not set | 1276 | # CONFIG_USB_IOWARRIOR is not set |
| 1172 | # CONFIG_USB_TEST is not set | 1277 | # CONFIG_USB_TEST is not set |
| 1173 | # CONFIG_USB_ISIGHTFW is not set | 1278 | # CONFIG_USB_ISIGHTFW is not set |
| 1174 | # CONFIG_USB_VST is not set | ||
| 1175 | # CONFIG_USB_GADGET is not set | 1279 | # CONFIG_USB_GADGET is not set |
| 1176 | 1280 | ||
| 1177 | # | 1281 | # |
| @@ -1189,10 +1293,6 @@ CONFIG_RTC_LIB=y | |||
| 1189 | # CONFIG_DMADEVICES is not set | 1293 | # CONFIG_DMADEVICES is not set |
| 1190 | # CONFIG_AUXDISPLAY is not set | 1294 | # CONFIG_AUXDISPLAY is not set |
| 1191 | # CONFIG_UIO is not set | 1295 | # CONFIG_UIO is not set |
| 1192 | |||
| 1193 | # | ||
| 1194 | # TI VLYNQ | ||
| 1195 | # | ||
| 1196 | # CONFIG_STAGING is not set | 1296 | # CONFIG_STAGING is not set |
| 1197 | 1297 | ||
| 1198 | # | 1298 | # |
| @@ -1214,6 +1314,7 @@ CONFIG_JBD=y | |||
| 1214 | # CONFIG_GFS2_FS is not set | 1314 | # CONFIG_GFS2_FS is not set |
| 1215 | # CONFIG_OCFS2_FS is not set | 1315 | # CONFIG_OCFS2_FS is not set |
| 1216 | # CONFIG_BTRFS_FS is not set | 1316 | # CONFIG_BTRFS_FS is not set |
| 1317 | # CONFIG_NILFS2_FS is not set | ||
| 1217 | CONFIG_FILE_LOCKING=y | 1318 | CONFIG_FILE_LOCKING=y |
| 1218 | CONFIG_FSNOTIFY=y | 1319 | CONFIG_FSNOTIFY=y |
| 1219 | # CONFIG_DNOTIFY is not set | 1320 | # CONFIG_DNOTIFY is not set |
| @@ -1274,6 +1375,7 @@ CONFIG_JFFS2_ZLIB=y | |||
| 1274 | # CONFIG_JFFS2_LZO is not set | 1375 | # CONFIG_JFFS2_LZO is not set |
| 1275 | CONFIG_JFFS2_RTIME=y | 1376 | CONFIG_JFFS2_RTIME=y |
| 1276 | # CONFIG_JFFS2_RUBIN is not set | 1377 | # CONFIG_JFFS2_RUBIN is not set |
| 1378 | # CONFIG_LOGFS is not set | ||
| 1277 | CONFIG_CRAMFS=y | 1379 | CONFIG_CRAMFS=y |
| 1278 | # CONFIG_SQUASHFS is not set | 1380 | # CONFIG_SQUASHFS is not set |
| 1279 | # CONFIG_VXFS_FS is not set | 1381 | # CONFIG_VXFS_FS is not set |
| @@ -1284,7 +1386,6 @@ CONFIG_CRAMFS=y | |||
| 1284 | # CONFIG_ROMFS_FS is not set | 1386 | # CONFIG_ROMFS_FS is not set |
| 1285 | # CONFIG_SYSV_FS is not set | 1387 | # CONFIG_SYSV_FS is not set |
| 1286 | # CONFIG_UFS_FS is not set | 1388 | # CONFIG_UFS_FS is not set |
| 1287 | # CONFIG_NILFS2_FS is not set | ||
| 1288 | CONFIG_NETWORK_FILESYSTEMS=y | 1389 | CONFIG_NETWORK_FILESYSTEMS=y |
| 1289 | CONFIG_NFS_FS=y | 1390 | CONFIG_NFS_FS=y |
| 1290 | CONFIG_NFS_V3=y | 1391 | CONFIG_NFS_V3=y |
| @@ -1299,6 +1400,7 @@ CONFIG_SUNRPC=y | |||
| 1299 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 1400 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
| 1300 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1401 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 1301 | # CONFIG_SMB_FS is not set | 1402 | # CONFIG_SMB_FS is not set |
| 1403 | # CONFIG_CEPH_FS is not set | ||
| 1302 | # CONFIG_CIFS is not set | 1404 | # CONFIG_CIFS is not set |
| 1303 | # CONFIG_NCP_FS is not set | 1405 | # CONFIG_NCP_FS is not set |
| 1304 | # CONFIG_CODA_FS is not set | 1406 | # CONFIG_CODA_FS is not set |
| @@ -1360,6 +1462,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y | |||
| 1360 | CONFIG_ENABLE_MUST_CHECK=y | 1462 | CONFIG_ENABLE_MUST_CHECK=y |
| 1361 | CONFIG_FRAME_WARN=1024 | 1463 | CONFIG_FRAME_WARN=1024 |
| 1362 | # CONFIG_MAGIC_SYSRQ is not set | 1464 | # CONFIG_MAGIC_SYSRQ is not set |
| 1465 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 1363 | # CONFIG_UNUSED_SYMBOLS is not set | 1466 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1364 | CONFIG_DEBUG_FS=y | 1467 | CONFIG_DEBUG_FS=y |
| 1365 | # CONFIG_HEADERS_CHECK is not set | 1468 | # CONFIG_HEADERS_CHECK is not set |
| @@ -1393,15 +1496,25 @@ CONFIG_DEBUG_INFO=y | |||
| 1393 | # CONFIG_DEBUG_LIST is not set | 1496 | # CONFIG_DEBUG_LIST is not set |
| 1394 | # CONFIG_DEBUG_SG is not set | 1497 | # CONFIG_DEBUG_SG is not set |
| 1395 | # CONFIG_DEBUG_NOTIFIERS is not set | 1498 | # CONFIG_DEBUG_NOTIFIERS is not set |
| 1499 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
| 1396 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1500 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 1397 | # CONFIG_RCU_TORTURE_TEST is not set | 1501 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1398 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 1502 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| 1399 | # CONFIG_BACKTRACE_SELF_TEST is not set | 1503 | # CONFIG_BACKTRACE_SELF_TEST is not set |
| 1400 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 1504 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
| 1505 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
| 1506 | # CONFIG_LKDTM is not set | ||
| 1401 | # CONFIG_FAULT_INJECTION is not set | 1507 | # CONFIG_FAULT_INJECTION is not set |
| 1508 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 1402 | # CONFIG_PAGE_POISONING is not set | 1509 | # CONFIG_PAGE_POISONING is not set |
| 1510 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 1511 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
| 1512 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
| 1513 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
| 1514 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
| 1403 | CONFIG_TRACING_SUPPORT=y | 1515 | CONFIG_TRACING_SUPPORT=y |
| 1404 | CONFIG_FTRACE=y | 1516 | CONFIG_FTRACE=y |
| 1517 | # CONFIG_FUNCTION_TRACER is not set | ||
| 1405 | # CONFIG_IRQSOFF_TRACER is not set | 1518 | # CONFIG_IRQSOFF_TRACER is not set |
| 1406 | # CONFIG_PREEMPT_TRACER is not set | 1519 | # CONFIG_PREEMPT_TRACER is not set |
| 1407 | # CONFIG_SCHED_TRACER is not set | 1520 | # CONFIG_SCHED_TRACER is not set |
| @@ -1410,19 +1523,22 @@ CONFIG_FTRACE=y | |||
| 1410 | CONFIG_BRANCH_PROFILE_NONE=y | 1523 | CONFIG_BRANCH_PROFILE_NONE=y |
| 1411 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | 1524 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set |
| 1412 | # CONFIG_PROFILE_ALL_BRANCHES is not set | 1525 | # CONFIG_PROFILE_ALL_BRANCHES is not set |
| 1526 | # CONFIG_STACK_TRACER is not set | ||
| 1413 | # CONFIG_KMEMTRACE is not set | 1527 | # CONFIG_KMEMTRACE is not set |
| 1414 | # CONFIG_WORKQUEUE_TRACER is not set | 1528 | # CONFIG_WORKQUEUE_TRACER is not set |
| 1415 | # CONFIG_BLK_DEV_IO_TRACE is not set | 1529 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 1416 | # CONFIG_DYNAMIC_DEBUG is not set | 1530 | # CONFIG_DYNAMIC_DEBUG is not set |
| 1531 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
| 1417 | # CONFIG_SAMPLES is not set | 1532 | # CONFIG_SAMPLES is not set |
| 1418 | CONFIG_HAVE_ARCH_KGDB=y | 1533 | CONFIG_HAVE_ARCH_KGDB=y |
| 1419 | # CONFIG_KGDB is not set | 1534 | # CONFIG_KGDB is not set |
| 1420 | # CONFIG_KMEMCHECK is not set | 1535 | # CONFIG_EARLY_PRINTK is not set |
| 1421 | CONFIG_CMDLINE_BOOL=y | 1536 | CONFIG_CMDLINE_BOOL=y |
| 1422 | CONFIG_CMDLINE="rw dhash_entries=1024 ihash_entries=1024 ip=10.0.1.3:10.0.1.1:10.0.1.1:255.255.255.0:zeus:eth0: root=/dev/nfs nfsroot=/nfsroot/cramfs,wsize=512,rsize=512,tcp nokgdb console=ttyUSB0,115200 memsize=252M" | 1537 | CONFIG_CMDLINE="" |
| 1423 | # CONFIG_CMDLINE_OVERRIDE is not set | 1538 | # CONFIG_CMDLINE_OVERRIDE is not set |
| 1424 | # CONFIG_DEBUG_STACK_USAGE is not set | 1539 | # CONFIG_DEBUG_STACK_USAGE is not set |
| 1425 | # CONFIG_RUNTIME_DEBUG is not set | 1540 | # CONFIG_RUNTIME_DEBUG is not set |
| 1541 | # CONFIG_SPINLOCK_TEST is not set | ||
| 1426 | 1542 | ||
| 1427 | # | 1543 | # |
| 1428 | # Security options | 1544 | # Security options |
| @@ -1430,13 +1546,16 @@ CONFIG_CMDLINE="rw dhash_entries=1024 ihash_entries=1024 ip=10.0.1.3:10.0.1.1:10 | |||
| 1430 | # CONFIG_KEYS is not set | 1546 | # CONFIG_KEYS is not set |
| 1431 | # CONFIG_SECURITY is not set | 1547 | # CONFIG_SECURITY is not set |
| 1432 | # CONFIG_SECURITYFS is not set | 1548 | # CONFIG_SECURITYFS is not set |
| 1433 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1549 | # CONFIG_DEFAULT_SECURITY_SELINUX is not set |
| 1550 | # CONFIG_DEFAULT_SECURITY_SMACK is not set | ||
| 1551 | # CONFIG_DEFAULT_SECURITY_TOMOYO is not set | ||
| 1552 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
| 1553 | CONFIG_DEFAULT_SECURITY="" | ||
| 1434 | CONFIG_CRYPTO=y | 1554 | CONFIG_CRYPTO=y |
| 1435 | 1555 | ||
| 1436 | # | 1556 | # |
| 1437 | # Crypto core or helper | 1557 | # Crypto core or helper |
| 1438 | # | 1558 | # |
| 1439 | # CONFIG_CRYPTO_FIPS is not set | ||
| 1440 | CONFIG_CRYPTO_ALGAPI=y | 1559 | CONFIG_CRYPTO_ALGAPI=y |
| 1441 | CONFIG_CRYPTO_ALGAPI2=y | 1560 | CONFIG_CRYPTO_ALGAPI2=y |
| 1442 | CONFIG_CRYPTO_AEAD=y | 1561 | CONFIG_CRYPTO_AEAD=y |
| @@ -1479,11 +1598,13 @@ CONFIG_CRYPTO_CBC=y | |||
| 1479 | # | 1598 | # |
| 1480 | CONFIG_CRYPTO_HMAC=y | 1599 | CONFIG_CRYPTO_HMAC=y |
| 1481 | # CONFIG_CRYPTO_XCBC is not set | 1600 | # CONFIG_CRYPTO_XCBC is not set |
| 1601 | # CONFIG_CRYPTO_VMAC is not set | ||
| 1482 | 1602 | ||
| 1483 | # | 1603 | # |
| 1484 | # Digest | 1604 | # Digest |
| 1485 | # | 1605 | # |
| 1486 | # CONFIG_CRYPTO_CRC32C is not set | 1606 | # CONFIG_CRYPTO_CRC32C is not set |
| 1607 | # CONFIG_CRYPTO_GHASH is not set | ||
| 1487 | # CONFIG_CRYPTO_MD4 is not set | 1608 | # CONFIG_CRYPTO_MD4 is not set |
| 1488 | CONFIG_CRYPTO_MD5=y | 1609 | CONFIG_CRYPTO_MD5=y |
| 1489 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1610 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
diff --git a/arch/mips/dec/Makefile b/arch/mips/dec/Makefile index c530208ee154..9eb2f9c036aa 100644 --- a/arch/mips/dec/Makefile +++ b/arch/mips/dec/Makefile | |||
| @@ -8,5 +8,3 @@ obj-y := ecc-berr.o int-handler.o ioasic-irq.o kn01-berr.o \ | |||
| 8 | obj-$(CONFIG_PROM_CONSOLE) += promcon.o | 8 | obj-$(CONFIG_PROM_CONSOLE) += promcon.o |
| 9 | obj-$(CONFIG_TC) += tc.o | 9 | obj-$(CONFIG_TC) += tc.o |
| 10 | obj-$(CONFIG_CPU_HAS_WB) += wbflush.o | 10 | obj-$(CONFIG_CPU_HAS_WB) += wbflush.o |
| 11 | |||
| 12 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/dec/Platform b/arch/mips/dec/Platform new file mode 100644 index 000000000000..3adbcbd95db1 --- /dev/null +++ b/arch/mips/dec/Platform | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | # | ||
| 2 | # DECstation family | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MACH_DECSTATION) = dec/ | ||
| 5 | cflags-$(CONFIG_MACH_DECSTATION) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-dec | ||
| 7 | libs-$(CONFIG_MACH_DECSTATION) += arch/mips/dec/prom/ | ||
| 8 | load-$(CONFIG_MACH_DECSTATION) += 0xffffffff80040000 | ||
diff --git a/arch/mips/dec/promcon.c b/arch/mips/dec/promcon.c index 9f0972f5a702..c239c25b79ff 100644 --- a/arch/mips/dec/promcon.c +++ b/arch/mips/dec/promcon.c | |||
| @@ -33,8 +33,7 @@ static int __init prom_console_setup(struct console *co, char *options) | |||
| 33 | return 0; | 33 | return 0; |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | static struct console sercons = | 36 | static struct console sercons = { |
| 37 | { | ||
| 38 | .name = "ttyS", | 37 | .name = "ttyS", |
| 39 | .write = prom_console_write, | 38 | .write = prom_console_write, |
| 40 | .setup = prom_console_setup, | 39 | .setup = prom_console_setup, |
diff --git a/arch/mips/emma/Makefile b/arch/mips/emma/Makefile new file mode 100644 index 000000000000..4254a31edb09 --- /dev/null +++ b/arch/mips/emma/Makefile | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | obj-$(CONFIG_SOC_EMMA2RH) += common/ | ||
| 2 | |||
| 3 | # | ||
| 4 | # NEC EMMA2RH Mark-eins | ||
| 5 | # | ||
| 6 | obj-$(CONFIG_NEC_MARKEINS) += markeins/ | ||
diff --git a/arch/mips/emma/Platform b/arch/mips/emma/Platform new file mode 100644 index 000000000000..0282f7f99b88 --- /dev/null +++ b/arch/mips/emma/Platform | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | platform-$(CONFIG_SOC_EMMA2RH) += emma/ | ||
| 2 | cflags-$(CONFIG_SOC_EMMA2RH) += \ | ||
| 3 | -I$(srctree)/arch/mips/include/asm/mach-emma2rh | ||
| 4 | load-$(CONFIG_NEC_MARKEINS) += 0xffffffff88100000 | ||
diff --git a/arch/mips/emma/markeins/irq.c b/arch/mips/emma/markeins/irq.c index 9504b7ee0b7c..3a96799eb65f 100644 --- a/arch/mips/emma/markeins/irq.c +++ b/arch/mips/emma/markeins/irq.c | |||
| @@ -301,7 +301,7 @@ void __init arch_init_irq(void) | |||
| 301 | /* setup cascade interrupts */ | 301 | /* setup cascade interrupts */ |
| 302 | setup_irq(EMMA2RH_IRQ_BASE + EMMA2RH_SW_CASCADE, &irq_cascade); | 302 | setup_irq(EMMA2RH_IRQ_BASE + EMMA2RH_SW_CASCADE, &irq_cascade); |
| 303 | setup_irq(EMMA2RH_IRQ_BASE + EMMA2RH_GPIO_CASCADE, &irq_cascade); | 303 | setup_irq(EMMA2RH_IRQ_BASE + EMMA2RH_GPIO_CASCADE, &irq_cascade); |
| 304 | setup_irq(CPU_IRQ_BASE + CPU_EMMA2RH_CASCADE, &irq_cascade); | 304 | setup_irq(MIPS_CPU_IRQ_BASE + 2, &irq_cascade); |
| 305 | } | 305 | } |
| 306 | 306 | ||
| 307 | asmlinkage void plat_irq_dispatch(void) | 307 | asmlinkage void plat_irq_dispatch(void) |
| @@ -309,13 +309,13 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 309 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; | 309 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
| 310 | 310 | ||
| 311 | if (pending & STATUSF_IP7) | 311 | if (pending & STATUSF_IP7) |
| 312 | do_IRQ(CPU_IRQ_BASE + 7); | 312 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); |
| 313 | else if (pending & STATUSF_IP2) | 313 | else if (pending & STATUSF_IP2) |
| 314 | emma2rh_irq_dispatch(); | 314 | emma2rh_irq_dispatch(); |
| 315 | else if (pending & STATUSF_IP1) | 315 | else if (pending & STATUSF_IP1) |
| 316 | do_IRQ(CPU_IRQ_BASE + 1); | 316 | do_IRQ(MIPS_CPU_IRQ_BASE + 1); |
| 317 | else if (pending & STATUSF_IP0) | 317 | else if (pending & STATUSF_IP0) |
| 318 | do_IRQ(CPU_IRQ_BASE + 0); | 318 | do_IRQ(MIPS_CPU_IRQ_BASE + 0); |
| 319 | else | 319 | else |
| 320 | spurious_interrupt(); | 320 | spurious_interrupt(); |
| 321 | } | 321 | } |
diff --git a/arch/mips/emma/markeins/setup.c b/arch/mips/emma/markeins/setup.c index 9b3f51e5f140..feceebcfff42 100644 --- a/arch/mips/emma/markeins/setup.c +++ b/arch/mips/emma/markeins/setup.c | |||
| @@ -52,7 +52,6 @@ static void markeins_machine_halt(void) | |||
| 52 | 52 | ||
| 53 | static void markeins_machine_power_off(void) | 53 | static void markeins_machine_power_off(void) |
| 54 | { | 54 | { |
| 55 | printk("EMMA2RH Mark-eins halted. Please turn off the power.\n"); | ||
| 56 | markeins_led("poweroff."); | 55 | markeins_led("poweroff."); |
| 57 | while (1) ; | 56 | while (1) ; |
| 58 | } | 57 | } |
diff --git a/arch/mips/include/asm/arch_hweight.h b/arch/mips/include/asm/arch_hweight.h new file mode 100644 index 000000000000..712a7445ee93 --- /dev/null +++ b/arch/mips/include/asm/arch_hweight.h | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | */ | ||
| 7 | #ifndef _ASM_ARCH_HWEIGHT_H | ||
| 8 | #define _ASM_ARCH_HWEIGHT_H | ||
| 9 | |||
| 10 | #ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT | ||
| 11 | |||
| 12 | #include <asm/types.h> | ||
| 13 | |||
| 14 | static inline unsigned int __arch_hweight32(unsigned int w) | ||
| 15 | { | ||
| 16 | return __builtin_popcount(w); | ||
| 17 | } | ||
| 18 | |||
| 19 | static inline unsigned int __arch_hweight16(unsigned int w) | ||
| 20 | { | ||
| 21 | return __builtin_popcount(w & 0xffff); | ||
| 22 | } | ||
| 23 | |||
| 24 | static inline unsigned int __arch_hweight8(unsigned int w) | ||
| 25 | { | ||
| 26 | return __builtin_popcount(w & 0xff); | ||
| 27 | } | ||
| 28 | |||
| 29 | static inline unsigned long __arch_hweight64(__u64 w) | ||
| 30 | { | ||
| 31 | return __builtin_popcountll(w); | ||
| 32 | } | ||
| 33 | |||
| 34 | #else | ||
| 35 | #include <asm-generic/bitops/arch_hweight.h> | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #endif /* _ASM_ARCH_HWEIGHT_H */ | ||
diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h index 9255cfbee459..b0ce7ca2851f 100644 --- a/arch/mips/include/asm/bitops.h +++ b/arch/mips/include/asm/bitops.h | |||
| @@ -700,7 +700,10 @@ static inline int ffs(int word) | |||
| 700 | #ifdef __KERNEL__ | 700 | #ifdef __KERNEL__ |
| 701 | 701 | ||
| 702 | #include <asm-generic/bitops/sched.h> | 702 | #include <asm-generic/bitops/sched.h> |
| 703 | #include <asm-generic/bitops/hweight.h> | 703 | |
| 704 | #include <asm/arch_hweight.h> | ||
| 705 | #include <asm-generic/bitops/const_hweight.h> | ||
| 706 | |||
| 704 | #include <asm-generic/bitops/ext2-non-atomic.h> | 707 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 705 | #include <asm-generic/bitops/ext2-atomic.h> | 708 | #include <asm-generic/bitops/ext2-atomic.h> |
| 706 | #include <asm-generic/bitops/minix.h> | 709 | #include <asm-generic/bitops/minix.h> |
diff --git a/arch/mips/include/asm/bootinfo.h b/arch/mips/include/asm/bootinfo.h index 09eee09780f2..15a8ef0707c6 100644 --- a/arch/mips/include/asm/bootinfo.h +++ b/arch/mips/include/asm/bootinfo.h | |||
| @@ -71,6 +71,12 @@ | |||
| 71 | #define MACH_LEMOTE_LL2F 7 | 71 | #define MACH_LEMOTE_LL2F 7 |
| 72 | #define MACH_LOONGSON_END 8 | 72 | #define MACH_LOONGSON_END 8 |
| 73 | 73 | ||
| 74 | /* | ||
| 75 | * Valid machtype for group INGENIC | ||
| 76 | */ | ||
| 77 | #define MACH_INGENIC_JZ4730 0 /* JZ4730 SOC */ | ||
| 78 | #define MACH_INGENIC_JZ4740 1 /* JZ4740 SOC */ | ||
| 79 | |||
| 74 | extern char *system_type; | 80 | extern char *system_type; |
| 75 | const char *get_system_type(void); | 81 | const char *get_system_type(void); |
| 76 | 82 | ||
diff --git a/arch/mips/include/asm/break.h b/arch/mips/include/asm/break.h index 44437ed765e8..9161e684cb4c 100644 --- a/arch/mips/include/asm/break.h +++ b/arch/mips/include/asm/break.h | |||
| @@ -30,6 +30,8 @@ | |||
| 30 | #define BRK_BUG 512 /* Used by BUG() */ | 30 | #define BRK_BUG 512 /* Used by BUG() */ |
| 31 | #define BRK_KDB 513 /* Used in KDB_ENTER() */ | 31 | #define BRK_KDB 513 /* Used in KDB_ENTER() */ |
| 32 | #define BRK_MEMU 514 /* Used by FPU emulator */ | 32 | #define BRK_MEMU 514 /* Used by FPU emulator */ |
| 33 | #define BRK_KPROBE_BP 515 /* Kprobe break */ | ||
| 34 | #define BRK_KPROBE_SSTEPBP 516 /* Kprobe single step software implementation */ | ||
| 33 | #define BRK_MULOVF 1023 /* Multiply overflow */ | 35 | #define BRK_MULOVF 1023 /* Multiply overflow */ |
| 34 | 36 | ||
| 35 | #endif /* __ASM_BREAK_H */ | 37 | #endif /* __ASM_BREAK_H */ |
diff --git a/arch/mips/include/asm/cacheops.h b/arch/mips/include/asm/cacheops.h index 256ad2cc6eb8..8f99c11ab665 100644 --- a/arch/mips/include/asm/cacheops.h +++ b/arch/mips/include/asm/cacheops.h | |||
| @@ -62,6 +62,8 @@ | |||
| 62 | * RM7000-specific cacheops | 62 | * RM7000-specific cacheops |
| 63 | */ | 63 | */ |
| 64 | #define Page_Invalidate_T 0x16 | 64 | #define Page_Invalidate_T 0x16 |
| 65 | #define Index_Store_Tag_T 0x0a | ||
| 66 | #define Index_Load_Tag_T 0x06 | ||
| 65 | 67 | ||
| 66 | /* | 68 | /* |
| 67 | * R10000-specific cacheops | 69 | * R10000-specific cacheops |
diff --git a/arch/mips/include/asm/cop2.h b/arch/mips/include/asm/cop2.h index 6b04c98b7fad..2cb2f0c2c4f8 100644 --- a/arch/mips/include/asm/cop2.h +++ b/arch/mips/include/asm/cop2.h | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #ifndef __ASM_COP2_H | 9 | #ifndef __ASM_COP2_H |
| 10 | #define __ASM_COP2_H | 10 | #define __ASM_COP2_H |
| 11 | 11 | ||
| 12 | #include <linux/notifier.h> | ||
| 13 | |||
| 12 | enum cu2_ops { | 14 | enum cu2_ops { |
| 13 | CU2_EXCEPTION, | 15 | CU2_EXCEPTION, |
| 14 | CU2_LWC2_OP, | 16 | CU2_LWC2_OP, |
| @@ -20,4 +22,14 @@ enum cu2_ops { | |||
| 20 | extern int register_cu2_notifier(struct notifier_block *nb); | 22 | extern int register_cu2_notifier(struct notifier_block *nb); |
| 21 | extern int cu2_notifier_call_chain(unsigned long val, void *v); | 23 | extern int cu2_notifier_call_chain(unsigned long val, void *v); |
| 22 | 24 | ||
| 25 | #define cu2_notifier(fn, pri) \ | ||
| 26 | ({ \ | ||
| 27 | static struct notifier_block fn##_nb __cpuinitdata = { \ | ||
| 28 | .notifier_call = fn, \ | ||
| 29 | .priority = pri \ | ||
| 30 | }; \ | ||
| 31 | \ | ||
| 32 | register_cu2_notifier(&fn##_nb); \ | ||
| 33 | }) | ||
| 34 | |||
| 23 | #endif /* __ASM_COP2_H */ | 35 | #endif /* __ASM_COP2_H */ |
diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h index ac73cede3a0a..ca400f7c3f59 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h | |||
| @@ -159,7 +159,8 @@ | |||
| 159 | 159 | ||
| 160 | /* | 160 | /* |
| 161 | * MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other | 161 | * MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other |
| 162 | * pre-MIPS32/MIPS53 processors have CLO, CLZ. For 64-bit kernels | 162 | * pre-MIPS32/MIPS53 processors have CLO, CLZ. The IDT RC64574 is 64-bit and |
| 163 | * has CLO and CLZ but not DCLO nor DCLZ. For 64-bit kernels | ||
| 163 | * cpu_has_clo_clz also indicates the availability of DCLO and DCLZ. | 164 | * cpu_has_clo_clz also indicates the availability of DCLO and DCLZ. |
| 164 | */ | 165 | */ |
| 165 | # ifndef cpu_has_clo_clz | 166 | # ifndef cpu_has_clo_clz |
diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h index a5acda416946..b201a8f5b127 100644 --- a/arch/mips/include/asm/cpu.h +++ b/arch/mips/include/asm/cpu.h | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | #define PRID_COMP_LSI 0x080000 | 34 | #define PRID_COMP_LSI 0x080000 |
| 35 | #define PRID_COMP_LEXRA 0x0b0000 | 35 | #define PRID_COMP_LEXRA 0x0b0000 |
| 36 | #define PRID_COMP_CAVIUM 0x0d0000 | 36 | #define PRID_COMP_CAVIUM 0x0d0000 |
| 37 | 37 | #define PRID_COMP_INGENIC 0xd00000 | |
| 38 | 38 | ||
| 39 | /* | 39 | /* |
| 40 | * Assigned values for the product ID register. In order to detect a | 40 | * Assigned values for the product ID register. In order to detect a |
| @@ -133,6 +133,12 @@ | |||
| 133 | #define PRID_IMP_CAVIUM_CN52XX 0x0700 | 133 | #define PRID_IMP_CAVIUM_CN52XX 0x0700 |
| 134 | 134 | ||
| 135 | /* | 135 | /* |
| 136 | * These are the PRID's for when 23:16 == PRID_COMP_INGENIC | ||
| 137 | */ | ||
| 138 | |||
| 139 | #define PRID_IMP_JZRISC 0x0200 | ||
| 140 | |||
| 141 | /* | ||
| 136 | * Definitions for 7:0 on legacy processors | 142 | * Definitions for 7:0 on legacy processors |
| 137 | */ | 143 | */ |
| 138 | 144 | ||
| @@ -219,6 +225,7 @@ enum cpu_type_enum { | |||
| 219 | CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K, | 225 | CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K, |
| 220 | CPU_ALCHEMY, CPU_PR4450, CPU_BCM3302, CPU_BCM4710, | 226 | CPU_ALCHEMY, CPU_PR4450, CPU_BCM3302, CPU_BCM4710, |
| 221 | CPU_BCM6338, CPU_BCM6345, CPU_BCM6348, CPU_BCM6358, | 227 | CPU_BCM6338, CPU_BCM6345, CPU_BCM6348, CPU_BCM6358, |
| 228 | CPU_JZRISC, | ||
| 222 | 229 | ||
| 223 | /* | 230 | /* |
| 224 | * MIPS64 class processors | 231 | * MIPS64 class processors |
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h index ea77a42c5f8c..fd1d39eb7431 100644 --- a/arch/mips/include/asm/elf.h +++ b/arch/mips/include/asm/elf.h | |||
| @@ -372,4 +372,9 @@ extern const char *__elf_platform; | |||
| 372 | struct linux_binprm; | 372 | struct linux_binprm; |
| 373 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, | 373 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, |
| 374 | int uses_interp); | 374 | int uses_interp); |
| 375 | |||
| 376 | struct mm_struct; | ||
| 377 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | ||
| 378 | #define arch_randomize_brk arch_randomize_brk | ||
| 379 | |||
| 375 | #endif /* _ASM_ELF_H */ | 380 | #endif /* _ASM_ELF_H */ |
diff --git a/arch/mips/include/asm/emma/emma2rh.h b/arch/mips/include/asm/emma/emma2rh.h index 2afb2fe11b30..c1449d20ef0e 100644 --- a/arch/mips/include/asm/emma/emma2rh.h +++ b/arch/mips/include/asm/emma/emma2rh.h | |||
| @@ -99,88 +99,22 @@ | |||
| 99 | #define EMMA2RH_PCI_CONFIG_BASE EMMA2RH_PCI_IO_BASE | 99 | #define EMMA2RH_PCI_CONFIG_BASE EMMA2RH_PCI_IO_BASE |
| 100 | #define EMMA2RH_PCI_CONFIG_SIZE EMMA2RH_PCI_IO_SIZE | 100 | #define EMMA2RH_PCI_CONFIG_SIZE EMMA2RH_PCI_IO_SIZE |
| 101 | 101 | ||
| 102 | #define NUM_CPU_IRQ 8 | ||
| 103 | #define NUM_EMMA2RH_IRQ 96 | 102 | #define NUM_EMMA2RH_IRQ 96 |
| 104 | 103 | ||
| 105 | #define CPU_EMMA2RH_CASCADE 2 | 104 | #define EMMA2RH_IRQ_BASE (MIPS_CPU_IRQ_BASE + 8) |
| 106 | #define CPU_IRQ_BASE MIPS_CPU_IRQ_BASE | ||
| 107 | #define EMMA2RH_IRQ_BASE (CPU_IRQ_BASE + NUM_CPU_IRQ) | ||
| 108 | 105 | ||
| 109 | /* | 106 | /* |
| 110 | * emma2rh irq defs | 107 | * emma2rh irq defs |
| 111 | */ | 108 | */ |
| 112 | 109 | ||
| 113 | #define EMMA2RH_IRQ_INT0 (0 + EMMA2RH_IRQ_BASE) | 110 | #define EMMA2RH_IRQ_INT(n) (EMMA2RH_IRQ_BASE + (n)) |
| 114 | #define EMMA2RH_IRQ_INT1 (1 + EMMA2RH_IRQ_BASE) | 111 | |
| 115 | #define EMMA2RH_IRQ_INT2 (2 + EMMA2RH_IRQ_BASE) | 112 | #define EMMA2RH_IRQ_PFUR0 EMMA2RH_IRQ_INT(49) |
| 116 | #define EMMA2RH_IRQ_INT3 (3 + EMMA2RH_IRQ_BASE) | 113 | #define EMMA2RH_IRQ_PFUR1 EMMA2RH_IRQ_INT(50) |
| 117 | #define EMMA2RH_IRQ_INT4 (4 + EMMA2RH_IRQ_BASE) | 114 | #define EMMA2RH_IRQ_PFUR2 EMMA2RH_IRQ_INT(51) |
| 118 | #define EMMA2RH_IRQ_INT5 (5 + EMMA2RH_IRQ_BASE) | 115 | #define EMMA2RH_IRQ_PIIC0 EMMA2RH_IRQ_INT(56) |
| 119 | #define EMMA2RH_IRQ_INT6 (6 + EMMA2RH_IRQ_BASE) | 116 | #define EMMA2RH_IRQ_PIIC1 EMMA2RH_IRQ_INT(57) |
| 120 | #define EMMA2RH_IRQ_INT7 (7 + EMMA2RH_IRQ_BASE) | 117 | #define EMMA2RH_IRQ_PIIC2 EMMA2RH_IRQ_INT(58) |
| 121 | #define EMMA2RH_IRQ_INT8 (8 + EMMA2RH_IRQ_BASE) | ||
| 122 | #define EMMA2RH_IRQ_INT9 (9 + EMMA2RH_IRQ_BASE) | ||
| 123 | #define EMMA2RH_IRQ_INT10 (10 + EMMA2RH_IRQ_BASE) | ||
| 124 | #define EMMA2RH_IRQ_INT11 (11 + EMMA2RH_IRQ_BASE) | ||
| 125 | #define EMMA2RH_IRQ_INT12 (12 + EMMA2RH_IRQ_BASE) | ||
| 126 | #define EMMA2RH_IRQ_INT13 (13 + EMMA2RH_IRQ_BASE) | ||
| 127 | #define EMMA2RH_IRQ_INT14 (14 + EMMA2RH_IRQ_BASE) | ||
| 128 | #define EMMA2RH_IRQ_INT15 (15 + EMMA2RH_IRQ_BASE) | ||
| 129 | #define EMMA2RH_IRQ_INT16 (16 + EMMA2RH_IRQ_BASE) | ||
| 130 | #define EMMA2RH_IRQ_INT17 (17 + EMMA2RH_IRQ_BASE) | ||
| 131 | #define EMMA2RH_IRQ_INT18 (18 + EMMA2RH_IRQ_BASE) | ||
| 132 | #define EMMA2RH_IRQ_INT19 (19 + EMMA2RH_IRQ_BASE) | ||
| 133 | #define EMMA2RH_IRQ_INT20 (20 + EMMA2RH_IRQ_BASE) | ||
| 134 | #define EMMA2RH_IRQ_INT21 (21 + EMMA2RH_IRQ_BASE) | ||
| 135 | #define EMMA2RH_IRQ_INT22 (22 + EMMA2RH_IRQ_BASE) | ||
| 136 | #define EMMA2RH_IRQ_INT23 (23 + EMMA2RH_IRQ_BASE) | ||
| 137 | #define EMMA2RH_IRQ_INT24 (24 + EMMA2RH_IRQ_BASE) | ||
| 138 | #define EMMA2RH_IRQ_INT25 (25 + EMMA2RH_IRQ_BASE) | ||
| 139 | #define EMMA2RH_IRQ_INT26 (26 + EMMA2RH_IRQ_BASE) | ||
| 140 | #define EMMA2RH_IRQ_INT27 (27 + EMMA2RH_IRQ_BASE) | ||
| 141 | #define EMMA2RH_IRQ_INT28 (28 + EMMA2RH_IRQ_BASE) | ||
| 142 | #define EMMA2RH_IRQ_INT29 (29 + EMMA2RH_IRQ_BASE) | ||
| 143 | #define EMMA2RH_IRQ_INT30 (30 + EMMA2RH_IRQ_BASE) | ||
| 144 | #define EMMA2RH_IRQ_INT31 (31 + EMMA2RH_IRQ_BASE) | ||
| 145 | #define EMMA2RH_IRQ_INT32 (32 + EMMA2RH_IRQ_BASE) | ||
| 146 | #define EMMA2RH_IRQ_INT33 (33 + EMMA2RH_IRQ_BASE) | ||
| 147 | #define EMMA2RH_IRQ_INT34 (34 + EMMA2RH_IRQ_BASE) | ||
| 148 | #define EMMA2RH_IRQ_INT35 (35 + EMMA2RH_IRQ_BASE) | ||
| 149 | #define EMMA2RH_IRQ_INT36 (36 + EMMA2RH_IRQ_BASE) | ||
| 150 | #define EMMA2RH_IRQ_INT37 (37 + EMMA2RH_IRQ_BASE) | ||
| 151 | #define EMMA2RH_IRQ_INT38 (38 + EMMA2RH_IRQ_BASE) | ||
| 152 | #define EMMA2RH_IRQ_INT39 (39 + EMMA2RH_IRQ_BASE) | ||
| 153 | #define EMMA2RH_IRQ_INT40 (40 + EMMA2RH_IRQ_BASE) | ||
| 154 | #define EMMA2RH_IRQ_INT41 (41 + EMMA2RH_IRQ_BASE) | ||
| 155 | #define EMMA2RH_IRQ_INT42 (42 + EMMA2RH_IRQ_BASE) | ||
| 156 | #define EMMA2RH_IRQ_INT43 (43 + EMMA2RH_IRQ_BASE) | ||
| 157 | #define EMMA2RH_IRQ_INT44 (44 + EMMA2RH_IRQ_BASE) | ||
| 158 | #define EMMA2RH_IRQ_INT45 (45 + EMMA2RH_IRQ_BASE) | ||
| 159 | #define EMMA2RH_IRQ_INT46 (46 + EMMA2RH_IRQ_BASE) | ||
| 160 | #define EMMA2RH_IRQ_INT47 (47 + EMMA2RH_IRQ_BASE) | ||
| 161 | #define EMMA2RH_IRQ_INT48 (48 + EMMA2RH_IRQ_BASE) | ||
| 162 | #define EMMA2RH_IRQ_INT49 (49 + EMMA2RH_IRQ_BASE) | ||
| 163 | #define EMMA2RH_IRQ_INT50 (50 + EMMA2RH_IRQ_BASE) | ||
| 164 | #define EMMA2RH_IRQ_INT51 (51 + EMMA2RH_IRQ_BASE) | ||
| 165 | #define EMMA2RH_IRQ_INT52 (52 + EMMA2RH_IRQ_BASE) | ||
| 166 | #define EMMA2RH_IRQ_INT53 (53 + EMMA2RH_IRQ_BASE) | ||
| 167 | #define EMMA2RH_IRQ_INT54 (54 + EMMA2RH_IRQ_BASE) | ||
| 168 | #define EMMA2RH_IRQ_INT55 (55 + EMMA2RH_IRQ_BASE) | ||
| 169 | #define EMMA2RH_IRQ_INT56 (56 + EMMA2RH_IRQ_BASE) | ||
| 170 | #define EMMA2RH_IRQ_INT57 (57 + EMMA2RH_IRQ_BASE) | ||
| 171 | #define EMMA2RH_IRQ_INT58 (58 + EMMA2RH_IRQ_BASE) | ||
| 172 | #define EMMA2RH_IRQ_INT59 (59 + EMMA2RH_IRQ_BASE) | ||
| 173 | #define EMMA2RH_IRQ_INT60 (60 + EMMA2RH_IRQ_BASE) | ||
| 174 | #define EMMA2RH_IRQ_INT61 (61 + EMMA2RH_IRQ_BASE) | ||
| 175 | #define EMMA2RH_IRQ_INT62 (62 + EMMA2RH_IRQ_BASE) | ||
| 176 | #define EMMA2RH_IRQ_INT63 (63 + EMMA2RH_IRQ_BASE) | ||
| 177 | |||
| 178 | #define EMMA2RH_IRQ_PFUR0 EMMA2RH_IRQ_INT49 | ||
| 179 | #define EMMA2RH_IRQ_PFUR1 EMMA2RH_IRQ_INT50 | ||
| 180 | #define EMMA2RH_IRQ_PFUR2 EMMA2RH_IRQ_INT51 | ||
| 181 | #define EMMA2RH_IRQ_PIIC0 EMMA2RH_IRQ_INT56 | ||
| 182 | #define EMMA2RH_IRQ_PIIC1 EMMA2RH_IRQ_INT57 | ||
| 183 | #define EMMA2RH_IRQ_PIIC2 EMMA2RH_IRQ_INT58 | ||
| 184 | 118 | ||
| 185 | /* | 119 | /* |
| 186 | * EMMA2RH Register Access | 120 | * EMMA2RH Register Access |
diff --git a/arch/mips/include/asm/emma/markeins.h b/arch/mips/include/asm/emma/markeins.h index 2618bf230248..bf2d229c2dae 100644 --- a/arch/mips/include/asm/emma/markeins.h +++ b/arch/mips/include/asm/emma/markeins.h | |||
| @@ -25,44 +25,13 @@ | |||
| 25 | #define NUM_EMMA2RH_IRQ_SW 32 | 25 | #define NUM_EMMA2RH_IRQ_SW 32 |
| 26 | #define NUM_EMMA2RH_IRQ_GPIO 32 | 26 | #define NUM_EMMA2RH_IRQ_GPIO 32 |
| 27 | 27 | ||
| 28 | #define EMMA2RH_SW_CASCADE (EMMA2RH_IRQ_INT7 - EMMA2RH_IRQ_INT0) | 28 | #define EMMA2RH_SW_CASCADE (EMMA2RH_IRQ_INT(7) - EMMA2RH_IRQ_INT(0)) |
| 29 | #define EMMA2RH_GPIO_CASCADE (EMMA2RH_IRQ_INT46 - EMMA2RH_IRQ_INT0) | 29 | #define EMMA2RH_GPIO_CASCADE (EMMA2RH_IRQ_INT(46) - EMMA2RH_IRQ_INT(0)) |
| 30 | 30 | ||
| 31 | #define EMMA2RH_SW_IRQ_BASE (EMMA2RH_IRQ_BASE + NUM_EMMA2RH_IRQ) | 31 | #define EMMA2RH_SW_IRQ_BASE (EMMA2RH_IRQ_BASE + NUM_EMMA2RH_IRQ) |
| 32 | #define EMMA2RH_GPIO_IRQ_BASE (EMMA2RH_SW_IRQ_BASE + NUM_EMMA2RH_IRQ_SW) | 32 | #define EMMA2RH_GPIO_IRQ_BASE (EMMA2RH_SW_IRQ_BASE + NUM_EMMA2RH_IRQ_SW) |
| 33 | 33 | ||
| 34 | #define EMMA2RH_SW_IRQ_INT0 (0+EMMA2RH_SW_IRQ_BASE) | 34 | #define EMMA2RH_SW_IRQ_INT(n) (EMMA2RH_SW_IRQ_BASE + (n)) |
| 35 | #define EMMA2RH_SW_IRQ_INT1 (1+EMMA2RH_SW_IRQ_BASE) | ||
| 36 | #define EMMA2RH_SW_IRQ_INT2 (2+EMMA2RH_SW_IRQ_BASE) | ||
| 37 | #define EMMA2RH_SW_IRQ_INT3 (3+EMMA2RH_SW_IRQ_BASE) | ||
| 38 | #define EMMA2RH_SW_IRQ_INT4 (4+EMMA2RH_SW_IRQ_BASE) | ||
| 39 | #define EMMA2RH_SW_IRQ_INT5 (5+EMMA2RH_SW_IRQ_BASE) | ||
| 40 | #define EMMA2RH_SW_IRQ_INT6 (6+EMMA2RH_SW_IRQ_BASE) | ||
| 41 | #define EMMA2RH_SW_IRQ_INT7 (7+EMMA2RH_SW_IRQ_BASE) | ||
| 42 | #define EMMA2RH_SW_IRQ_INT8 (8+EMMA2RH_SW_IRQ_BASE) | ||
| 43 | #define EMMA2RH_SW_IRQ_INT9 (9+EMMA2RH_SW_IRQ_BASE) | ||
| 44 | #define EMMA2RH_SW_IRQ_INT10 (10+EMMA2RH_SW_IRQ_BASE) | ||
| 45 | #define EMMA2RH_SW_IRQ_INT11 (11+EMMA2RH_SW_IRQ_BASE) | ||
| 46 | #define EMMA2RH_SW_IRQ_INT12 (12+EMMA2RH_SW_IRQ_BASE) | ||
| 47 | #define EMMA2RH_SW_IRQ_INT13 (13+EMMA2RH_SW_IRQ_BASE) | ||
| 48 | #define EMMA2RH_SW_IRQ_INT14 (14+EMMA2RH_SW_IRQ_BASE) | ||
| 49 | #define EMMA2RH_SW_IRQ_INT15 (15+EMMA2RH_SW_IRQ_BASE) | ||
| 50 | #define EMMA2RH_SW_IRQ_INT16 (16+EMMA2RH_SW_IRQ_BASE) | ||
| 51 | #define EMMA2RH_SW_IRQ_INT17 (17+EMMA2RH_SW_IRQ_BASE) | ||
| 52 | #define EMMA2RH_SW_IRQ_INT18 (18+EMMA2RH_SW_IRQ_BASE) | ||
| 53 | #define EMMA2RH_SW_IRQ_INT19 (19+EMMA2RH_SW_IRQ_BASE) | ||
| 54 | #define EMMA2RH_SW_IRQ_INT20 (20+EMMA2RH_SW_IRQ_BASE) | ||
| 55 | #define EMMA2RH_SW_IRQ_INT21 (21+EMMA2RH_SW_IRQ_BASE) | ||
| 56 | #define EMMA2RH_SW_IRQ_INT22 (22+EMMA2RH_SW_IRQ_BASE) | ||
| 57 | #define EMMA2RH_SW_IRQ_INT23 (23+EMMA2RH_SW_IRQ_BASE) | ||
| 58 | #define EMMA2RH_SW_IRQ_INT24 (24+EMMA2RH_SW_IRQ_BASE) | ||
| 59 | #define EMMA2RH_SW_IRQ_INT25 (25+EMMA2RH_SW_IRQ_BASE) | ||
| 60 | #define EMMA2RH_SW_IRQ_INT26 (26+EMMA2RH_SW_IRQ_BASE) | ||
| 61 | #define EMMA2RH_SW_IRQ_INT27 (27+EMMA2RH_SW_IRQ_BASE) | ||
| 62 | #define EMMA2RH_SW_IRQ_INT28 (28+EMMA2RH_SW_IRQ_BASE) | ||
| 63 | #define EMMA2RH_SW_IRQ_INT29 (29+EMMA2RH_SW_IRQ_BASE) | ||
| 64 | #define EMMA2RH_SW_IRQ_INT30 (30+EMMA2RH_SW_IRQ_BASE) | ||
| 65 | #define EMMA2RH_SW_IRQ_INT31 (31+EMMA2RH_SW_IRQ_BASE) | ||
| 66 | 35 | ||
| 67 | #define MARKEINS_PCI_IRQ_INTA EMMA2RH_GPIO_IRQ_BASE+15 | 36 | #define MARKEINS_PCI_IRQ_INTA EMMA2RH_GPIO_IRQ_BASE+15 |
| 68 | #define MARKEINS_PCI_IRQ_INTB EMMA2RH_GPIO_IRQ_BASE+16 | 37 | #define MARKEINS_PCI_IRQ_INTB EMMA2RH_GPIO_IRQ_BASE+16 |
diff --git a/arch/mips/include/asm/hazards.h b/arch/mips/include/asm/hazards.h index 0eaf77ffbc4f..4e332165d7b7 100644 --- a/arch/mips/include/asm/hazards.h +++ b/arch/mips/include/asm/hazards.h | |||
| @@ -87,7 +87,7 @@ do { \ | |||
| 87 | : "=r" (tmp)); \ | 87 | : "=r" (tmp)); \ |
| 88 | } while (0) | 88 | } while (0) |
| 89 | 89 | ||
| 90 | #elif defined(CONFIG_CPU_MIPSR1) && !defined(CONFIG_MACH_ALCHEMY) | 90 | #elif defined(CONFIG_CPU_MIPSR1) && !defined(CONFIG_MIPS_ALCHEMY) |
| 91 | 91 | ||
| 92 | /* | 92 | /* |
| 93 | * These are slightly complicated by the fact that we guarantee R1 kernels to | 93 | * These are slightly complicated by the fact that we guarantee R1 kernels to |
| @@ -138,7 +138,7 @@ do { \ | |||
| 138 | __instruction_hazard(); \ | 138 | __instruction_hazard(); \ |
| 139 | } while (0) | 139 | } while (0) |
| 140 | 140 | ||
| 141 | #elif defined(CONFIG_MACH_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \ | 141 | #elif defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \ |
| 142 | defined(CONFIG_CPU_LOONGSON2) || defined(CONFIG_CPU_R10000) || \ | 142 | defined(CONFIG_CPU_LOONGSON2) || defined(CONFIG_CPU_R10000) || \ |
| 143 | defined(CONFIG_CPU_R5500) | 143 | defined(CONFIG_CPU_R5500) |
| 144 | 144 | ||
diff --git a/arch/mips/include/asm/inst.h b/arch/mips/include/asm/inst.h index 6489f00731ca..444ff71aa0e8 100644 --- a/arch/mips/include/asm/inst.h +++ b/arch/mips/include/asm/inst.h | |||
| @@ -247,6 +247,12 @@ struct ma_format { /* FPU multipy and add format (MIPS IV) */ | |||
| 247 | unsigned int fmt : 2; | 247 | unsigned int fmt : 2; |
| 248 | }; | 248 | }; |
| 249 | 249 | ||
| 250 | struct b_format { /* BREAK and SYSCALL */ | ||
| 251 | unsigned int opcode:6; | ||
| 252 | unsigned int code:20; | ||
| 253 | unsigned int func:6; | ||
| 254 | }; | ||
| 255 | |||
| 250 | #elif defined(__MIPSEL__) | 256 | #elif defined(__MIPSEL__) |
| 251 | 257 | ||
| 252 | struct j_format { /* Jump format */ | 258 | struct j_format { /* Jump format */ |
| @@ -314,6 +320,12 @@ struct ma_format { /* FPU multipy and add format (MIPS IV) */ | |||
| 314 | unsigned int opcode : 6; | 320 | unsigned int opcode : 6; |
| 315 | }; | 321 | }; |
| 316 | 322 | ||
| 323 | struct b_format { /* BREAK and SYSCALL */ | ||
| 324 | unsigned int func:6; | ||
| 325 | unsigned int code:20; | ||
| 326 | unsigned int opcode:6; | ||
| 327 | }; | ||
| 328 | |||
| 317 | #else /* !defined (__MIPSEB__) && !defined (__MIPSEL__) */ | 329 | #else /* !defined (__MIPSEB__) && !defined (__MIPSEL__) */ |
| 318 | #error "MIPS but neither __MIPSEL__ nor __MIPSEB__?" | 330 | #error "MIPS but neither __MIPSEL__ nor __MIPSEB__?" |
| 319 | #endif | 331 | #endif |
| @@ -328,7 +340,8 @@ union mips_instruction { | |||
| 328 | struct c_format c_format; | 340 | struct c_format c_format; |
| 329 | struct r_format r_format; | 341 | struct r_format r_format; |
| 330 | struct f_format f_format; | 342 | struct f_format f_format; |
| 331 | struct ma_format ma_format; | 343 | struct ma_format ma_format; |
| 344 | struct b_format b_format; | ||
| 332 | }; | 345 | }; |
| 333 | 346 | ||
| 334 | /* HACHACHAHCAHC ... */ | 347 | /* HACHACHAHCAHC ... */ |
diff --git a/arch/mips/include/asm/kdebug.h b/arch/mips/include/asm/kdebug.h index 5bf62aafc890..6a9af5fcb5d7 100644 --- a/arch/mips/include/asm/kdebug.h +++ b/arch/mips/include/asm/kdebug.h | |||
| @@ -8,6 +8,9 @@ enum die_val { | |||
| 8 | DIE_FP, | 8 | DIE_FP, |
| 9 | DIE_TRAP, | 9 | DIE_TRAP, |
| 10 | DIE_RI, | 10 | DIE_RI, |
| 11 | DIE_PAGE_FAULT, | ||
| 12 | DIE_BREAK, | ||
| 13 | DIE_SSTEPBP | ||
| 11 | }; | 14 | }; |
| 12 | 15 | ||
| 13 | #endif /* _ASM_MIPS_KDEBUG_H */ | 16 | #endif /* _ASM_MIPS_KDEBUG_H */ |
diff --git a/arch/mips/include/asm/kprobes.h b/arch/mips/include/asm/kprobes.h new file mode 100644 index 000000000000..e6ea4d4d7205 --- /dev/null +++ b/arch/mips/include/asm/kprobes.h | |||
| @@ -0,0 +1,92 @@ | |||
| 1 | /* | ||
| 2 | * Kernel Probes (KProbes) | ||
| 3 | * include/asm-mips/kprobes.h | ||
| 4 | * | ||
| 5 | * Copyright 2006 Sony Corp. | ||
| 6 | * Copyright 2010 Cavium Networks | ||
| 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; version 2 of the License. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef _ASM_KPROBES_H | ||
| 23 | #define _ASM_KPROBES_H | ||
| 24 | |||
| 25 | #include <linux/ptrace.h> | ||
| 26 | #include <linux/types.h> | ||
| 27 | |||
| 28 | #include <asm/cacheflush.h> | ||
| 29 | #include <asm/kdebug.h> | ||
| 30 | #include <asm/inst.h> | ||
| 31 | |||
| 32 | #define __ARCH_WANT_KPROBES_INSN_SLOT | ||
| 33 | |||
| 34 | struct kprobe; | ||
| 35 | struct pt_regs; | ||
| 36 | |||
| 37 | typedef union mips_instruction kprobe_opcode_t; | ||
| 38 | |||
| 39 | #define MAX_INSN_SIZE 2 | ||
| 40 | |||
| 41 | #define flush_insn_slot(p) \ | ||
| 42 | do { \ | ||
| 43 | flush_icache_range((unsigned long)p->addr, \ | ||
| 44 | (unsigned long)p->addr + \ | ||
| 45 | (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \ | ||
| 46 | } while (0) | ||
| 47 | |||
| 48 | |||
| 49 | #define kretprobe_blacklist_size 0 | ||
| 50 | |||
| 51 | void arch_remove_kprobe(struct kprobe *p); | ||
| 52 | |||
| 53 | /* Architecture specific copy of original instruction*/ | ||
| 54 | struct arch_specific_insn { | ||
| 55 | /* copy of the original instruction */ | ||
| 56 | kprobe_opcode_t *insn; | ||
| 57 | }; | ||
| 58 | |||
| 59 | struct prev_kprobe { | ||
| 60 | struct kprobe *kp; | ||
| 61 | unsigned long status; | ||
| 62 | unsigned long old_SR; | ||
| 63 | unsigned long saved_SR; | ||
| 64 | unsigned long saved_epc; | ||
| 65 | }; | ||
| 66 | |||
| 67 | #define MAX_JPROBES_STACK_SIZE 128 | ||
| 68 | #define MAX_JPROBES_STACK_ADDR \ | ||
| 69 | (((unsigned long)current_thread_info()) + THREAD_SIZE - 32 - sizeof(struct pt_regs)) | ||
| 70 | |||
| 71 | #define MIN_JPROBES_STACK_SIZE(ADDR) \ | ||
| 72 | ((((ADDR) + MAX_JPROBES_STACK_SIZE) > MAX_JPROBES_STACK_ADDR) \ | ||
| 73 | ? MAX_JPROBES_STACK_ADDR - (ADDR) \ | ||
| 74 | : MAX_JPROBES_STACK_SIZE) | ||
| 75 | |||
| 76 | |||
| 77 | /* per-cpu kprobe control block */ | ||
| 78 | struct kprobe_ctlblk { | ||
| 79 | unsigned long kprobe_status; | ||
| 80 | unsigned long kprobe_old_SR; | ||
| 81 | unsigned long kprobe_saved_SR; | ||
| 82 | unsigned long kprobe_saved_epc; | ||
| 83 | unsigned long jprobe_saved_sp; | ||
| 84 | struct pt_regs jprobe_saved_regs; | ||
| 85 | u8 jprobes_stack[MAX_JPROBES_STACK_SIZE]; | ||
| 86 | struct prev_kprobe prev_kprobe; | ||
| 87 | }; | ||
| 88 | |||
| 89 | extern int kprobe_exceptions_notify(struct notifier_block *self, | ||
| 90 | unsigned long val, void *data); | ||
| 91 | |||
| 92 | #endif /* _ASM_KPROBES_H */ | ||
diff --git a/arch/mips/include/asm/mach-au1x00/au1xxx_eth.h b/arch/mips/include/asm/mach-au1x00/au1xxx_eth.h index bae9b758fcde..49dc8d9db186 100644 --- a/arch/mips/include/asm/mach-au1x00/au1xxx_eth.h +++ b/arch/mips/include/asm/mach-au1x00/au1xxx_eth.h | |||
| @@ -9,6 +9,7 @@ struct au1000_eth_platform_data { | |||
| 9 | int phy_addr; | 9 | int phy_addr; |
| 10 | int phy_busid; | 10 | int phy_busid; |
| 11 | int phy_irq; | 11 | int phy_irq; |
| 12 | char mac[6]; | ||
| 12 | }; | 13 | }; |
| 13 | 14 | ||
| 14 | void __init au1xxx_override_eth_cfg(unsigned port, | 15 | void __init au1xxx_override_eth_cfg(unsigned port, |
diff --git a/arch/mips/include/asm/mach-bcm47xx/nvram.h b/arch/mips/include/asm/mach-bcm47xx/nvram.h index 0d8cc146f7a4..c58ebd8bc155 100644 --- a/arch/mips/include/asm/mach-bcm47xx/nvram.h +++ b/arch/mips/include/asm/mach-bcm47xx/nvram.h | |||
| @@ -31,6 +31,9 @@ struct nvram_header { | |||
| 31 | #define NVRAM_MAX_VALUE_LEN 255 | 31 | #define NVRAM_MAX_VALUE_LEN 255 |
| 32 | #define NVRAM_MAX_PARAM_LEN 64 | 32 | #define NVRAM_MAX_PARAM_LEN 64 |
| 33 | 33 | ||
| 34 | #define NVRAM_ERR_INV_PARAM -8 | ||
| 35 | #define NVRAM_ERR_ENVNOTFOUND -9 | ||
| 36 | |||
| 34 | extern int nvram_getenv(char *name, char *val, size_t val_len); | 37 | extern int nvram_getenv(char *name, char *val, size_t val_len); |
| 35 | 38 | ||
| 36 | #endif | 39 | #endif |
diff --git a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h index bbf054042395..b952fc7215e2 100644 --- a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h +++ b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h | |||
| @@ -61,21 +61,18 @@ | |||
| 61 | 61 | ||
| 62 | #define kernel_uses_smartmips_rixi (cpu_data[0].cputype == CPU_CAVIUM_OCTEON_PLUS) | 62 | #define kernel_uses_smartmips_rixi (cpu_data[0].cputype == CPU_CAVIUM_OCTEON_PLUS) |
| 63 | 63 | ||
| 64 | #define ARCH_HAS_READ_CURRENT_TIMER 1 | ||
| 65 | #define ARCH_HAS_IRQ_PER_CPU 1 | 64 | #define ARCH_HAS_IRQ_PER_CPU 1 |
| 66 | #define ARCH_HAS_SPINLOCK_PREFETCH 1 | 65 | #define ARCH_HAS_SPINLOCK_PREFETCH 1 |
| 67 | #define spin_lock_prefetch(x) prefetch(x) | 66 | #define spin_lock_prefetch(x) prefetch(x) |
| 68 | #define PREFETCH_STRIDE 128 | 67 | #define PREFETCH_STRIDE 128 |
| 69 | 68 | ||
| 70 | static inline int read_current_timer(unsigned long *result) | 69 | #ifdef __OCTEON__ |
| 71 | { | 70 | /* |
| 72 | asm volatile ("rdhwr %0,$31\n" | 71 | * All gcc versions that have OCTEON support define __OCTEON__ and have the |
| 73 | #ifndef CONFIG_64BIT | 72 | * __builtin_popcount support. |
| 74 | "\tsll %0, 0" | 73 | */ |
| 74 | #define ARCH_HAS_USABLE_BUILTIN_POPCOUNT 1 | ||
| 75 | #endif | 75 | #endif |
| 76 | : "=r" (*result)); | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | 76 | ||
| 80 | static inline int octeon_has_saa(void) | 77 | static inline int octeon_has_saa(void) |
| 81 | { | 78 | { |
diff --git a/arch/mips/include/asm/mach-cavium-octeon/irq.h b/arch/mips/include/asm/mach-cavium-octeon/irq.h index d32220fbf4f1..6ddab8aef644 100644 --- a/arch/mips/include/asm/mach-cavium-octeon/irq.h +++ b/arch/mips/include/asm/mach-cavium-octeon/irq.h | |||
| @@ -172,71 +172,9 @@ | |||
| 172 | #ifdef CONFIG_PCI_MSI | 172 | #ifdef CONFIG_PCI_MSI |
| 173 | /* 152 - 215 represent the MSI interrupts 0-63 */ | 173 | /* 152 - 215 represent the MSI interrupts 0-63 */ |
| 174 | #define OCTEON_IRQ_MSI_BIT0 152 | 174 | #define OCTEON_IRQ_MSI_BIT0 152 |
| 175 | #define OCTEON_IRQ_MSI_BIT1 153 | 175 | #define OCTEON_IRQ_MSI_LAST (OCTEON_IRQ_MSI_BIT0 + 255) |
| 176 | #define OCTEON_IRQ_MSI_BIT2 154 | ||
| 177 | #define OCTEON_IRQ_MSI_BIT3 155 | ||
| 178 | #define OCTEON_IRQ_MSI_BIT4 156 | ||
| 179 | #define OCTEON_IRQ_MSI_BIT5 157 | ||
| 180 | #define OCTEON_IRQ_MSI_BIT6 158 | ||
| 181 | #define OCTEON_IRQ_MSI_BIT7 159 | ||
| 182 | #define OCTEON_IRQ_MSI_BIT8 160 | ||
| 183 | #define OCTEON_IRQ_MSI_BIT9 161 | ||
| 184 | #define OCTEON_IRQ_MSI_BIT10 162 | ||
| 185 | #define OCTEON_IRQ_MSI_BIT11 163 | ||
| 186 | #define OCTEON_IRQ_MSI_BIT12 164 | ||
| 187 | #define OCTEON_IRQ_MSI_BIT13 165 | ||
| 188 | #define OCTEON_IRQ_MSI_BIT14 166 | ||
| 189 | #define OCTEON_IRQ_MSI_BIT15 167 | ||
| 190 | #define OCTEON_IRQ_MSI_BIT16 168 | ||
| 191 | #define OCTEON_IRQ_MSI_BIT17 169 | ||
| 192 | #define OCTEON_IRQ_MSI_BIT18 170 | ||
| 193 | #define OCTEON_IRQ_MSI_BIT19 171 | ||
| 194 | #define OCTEON_IRQ_MSI_BIT20 172 | ||
| 195 | #define OCTEON_IRQ_MSI_BIT21 173 | ||
| 196 | #define OCTEON_IRQ_MSI_BIT22 174 | ||
| 197 | #define OCTEON_IRQ_MSI_BIT23 175 | ||
| 198 | #define OCTEON_IRQ_MSI_BIT24 176 | ||
| 199 | #define OCTEON_IRQ_MSI_BIT25 177 | ||
| 200 | #define OCTEON_IRQ_MSI_BIT26 178 | ||
| 201 | #define OCTEON_IRQ_MSI_BIT27 179 | ||
| 202 | #define OCTEON_IRQ_MSI_BIT28 180 | ||
| 203 | #define OCTEON_IRQ_MSI_BIT29 181 | ||
| 204 | #define OCTEON_IRQ_MSI_BIT30 182 | ||
| 205 | #define OCTEON_IRQ_MSI_BIT31 183 | ||
| 206 | #define OCTEON_IRQ_MSI_BIT32 184 | ||
| 207 | #define OCTEON_IRQ_MSI_BIT33 185 | ||
| 208 | #define OCTEON_IRQ_MSI_BIT34 186 | ||
| 209 | #define OCTEON_IRQ_MSI_BIT35 187 | ||
| 210 | #define OCTEON_IRQ_MSI_BIT36 188 | ||
| 211 | #define OCTEON_IRQ_MSI_BIT37 189 | ||
| 212 | #define OCTEON_IRQ_MSI_BIT38 190 | ||
| 213 | #define OCTEON_IRQ_MSI_BIT39 191 | ||
| 214 | #define OCTEON_IRQ_MSI_BIT40 192 | ||
| 215 | #define OCTEON_IRQ_MSI_BIT41 193 | ||
| 216 | #define OCTEON_IRQ_MSI_BIT42 194 | ||
| 217 | #define OCTEON_IRQ_MSI_BIT43 195 | ||
| 218 | #define OCTEON_IRQ_MSI_BIT44 196 | ||
| 219 | #define OCTEON_IRQ_MSI_BIT45 197 | ||
| 220 | #define OCTEON_IRQ_MSI_BIT46 198 | ||
| 221 | #define OCTEON_IRQ_MSI_BIT47 199 | ||
| 222 | #define OCTEON_IRQ_MSI_BIT48 200 | ||
| 223 | #define OCTEON_IRQ_MSI_BIT49 201 | ||
| 224 | #define OCTEON_IRQ_MSI_BIT50 202 | ||
| 225 | #define OCTEON_IRQ_MSI_BIT51 203 | ||
| 226 | #define OCTEON_IRQ_MSI_BIT52 204 | ||
| 227 | #define OCTEON_IRQ_MSI_BIT53 205 | ||
| 228 | #define OCTEON_IRQ_MSI_BIT54 206 | ||
| 229 | #define OCTEON_IRQ_MSI_BIT55 207 | ||
| 230 | #define OCTEON_IRQ_MSI_BIT56 208 | ||
| 231 | #define OCTEON_IRQ_MSI_BIT57 209 | ||
| 232 | #define OCTEON_IRQ_MSI_BIT58 210 | ||
| 233 | #define OCTEON_IRQ_MSI_BIT59 211 | ||
| 234 | #define OCTEON_IRQ_MSI_BIT60 212 | ||
| 235 | #define OCTEON_IRQ_MSI_BIT61 213 | ||
| 236 | #define OCTEON_IRQ_MSI_BIT62 214 | ||
| 237 | #define OCTEON_IRQ_MSI_BIT63 215 | ||
| 238 | 176 | ||
| 239 | #define OCTEON_IRQ_LAST 216 | 177 | #define OCTEON_IRQ_LAST (OCTEON_IRQ_MSI_LAST + 1) |
| 240 | #else | 178 | #else |
| 241 | #define OCTEON_IRQ_LAST 152 | 179 | #define OCTEON_IRQ_LAST 152 |
| 242 | #endif | 180 | #endif |
diff --git a/arch/mips/include/asm/mach-jz4740/base.h b/arch/mips/include/asm/mach-jz4740/base.h new file mode 100644 index 000000000000..f37318605452 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/base.h | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #ifndef __ASM_MACH_JZ4740_BASE_H__ | ||
| 2 | #define __ASM_MACH_JZ4740_BASE_H__ | ||
| 3 | |||
| 4 | #define JZ4740_CPM_BASE_ADDR 0x10000000 | ||
| 5 | #define JZ4740_INTC_BASE_ADDR 0x10001000 | ||
| 6 | #define JZ4740_WDT_BASE_ADDR 0x10002000 | ||
| 7 | #define JZ4740_TCU_BASE_ADDR 0x10002010 | ||
| 8 | #define JZ4740_RTC_BASE_ADDR 0x10003000 | ||
| 9 | #define JZ4740_GPIO_BASE_ADDR 0x10010000 | ||
| 10 | #define JZ4740_AIC_BASE_ADDR 0x10020000 | ||
| 11 | #define JZ4740_MSC_BASE_ADDR 0x10021000 | ||
| 12 | #define JZ4740_UART0_BASE_ADDR 0x10030000 | ||
| 13 | #define JZ4740_UART1_BASE_ADDR 0x10031000 | ||
| 14 | #define JZ4740_I2C_BASE_ADDR 0x10042000 | ||
| 15 | #define JZ4740_SSI_BASE_ADDR 0x10043000 | ||
| 16 | #define JZ4740_SADC_BASE_ADDR 0x10070000 | ||
| 17 | #define JZ4740_EMC_BASE_ADDR 0x13010000 | ||
| 18 | #define JZ4740_DMAC_BASE_ADDR 0x13020000 | ||
| 19 | #define JZ4740_UHC_BASE_ADDR 0x13030000 | ||
| 20 | #define JZ4740_UDC_BASE_ADDR 0x13040000 | ||
| 21 | #define JZ4740_LCD_BASE_ADDR 0x13050000 | ||
| 22 | #define JZ4740_SLCD_BASE_ADDR 0x13050000 | ||
| 23 | #define JZ4740_CIM_BASE_ADDR 0x13060000 | ||
| 24 | #define JZ4740_IPU_BASE_ADDR 0x13080000 | ||
| 25 | |||
| 26 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/clock.h b/arch/mips/include/asm/mach-jz4740/clock.h new file mode 100644 index 000000000000..1b7408dd0e23 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/clock.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_JZ4740_CLOCK_H__ | ||
| 16 | #define __ASM_JZ4740_CLOCK_H__ | ||
| 17 | |||
| 18 | enum jz4740_wait_mode { | ||
| 19 | JZ4740_WAIT_MODE_IDLE, | ||
| 20 | JZ4740_WAIT_MODE_SLEEP, | ||
| 21 | }; | ||
| 22 | |||
| 23 | void jz4740_clock_set_wait_mode(enum jz4740_wait_mode mode); | ||
| 24 | |||
| 25 | void jz4740_clock_udc_enable_auto_suspend(void); | ||
| 26 | void jz4740_clock_udc_disable_auto_suspend(void); | ||
| 27 | |||
| 28 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/cpu-feature-overrides.h b/arch/mips/include/asm/mach-jz4740/cpu-feature-overrides.h new file mode 100644 index 000000000000..d12e5c6477b9 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/cpu-feature-overrides.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | */ | ||
| 7 | #ifndef __ASM_MACH_JZ4740_CPU_FEATURE_OVERRIDES_H | ||
| 8 | #define __ASM_MACH_JZ4740_CPU_FEATURE_OVERRIDES_H | ||
| 9 | |||
| 10 | #define cpu_has_tlb 1 | ||
| 11 | #define cpu_has_4kex 1 | ||
| 12 | #define cpu_has_3k_cache 0 | ||
| 13 | #define cpu_has_4k_cache 1 | ||
| 14 | #define cpu_has_tx39_cache 0 | ||
| 15 | #define cpu_has_fpu 0 | ||
| 16 | #define cpu_has_32fpr 0 | ||
| 17 | #define cpu_has_counter 0 | ||
| 18 | #define cpu_has_watch 1 | ||
| 19 | #define cpu_has_divec 1 | ||
| 20 | #define cpu_has_vce 0 | ||
| 21 | #define cpu_has_cache_cdex_p 0 | ||
| 22 | #define cpu_has_cache_cdex_s 0 | ||
| 23 | #define cpu_has_prefetch 1 | ||
| 24 | #define cpu_has_mcheck 1 | ||
| 25 | #define cpu_has_ejtag 1 | ||
| 26 | #define cpu_has_llsc 1 | ||
| 27 | #define cpu_has_mips16 0 | ||
| 28 | #define cpu_has_mdmx 0 | ||
| 29 | #define cpu_has_mips3d 0 | ||
| 30 | #define cpu_has_smartmips 0 | ||
| 31 | #define kernel_uses_llsc 1 | ||
| 32 | #define cpu_has_vtag_icache 1 | ||
| 33 | #define cpu_has_dc_aliases 0 | ||
| 34 | #define cpu_has_ic_fills_f_dc 0 | ||
| 35 | #define cpu_has_pindexed_dcache 0 | ||
| 36 | #define cpu_has_mips32r1 1 | ||
| 37 | #define cpu_has_mips32r2 0 | ||
| 38 | #define cpu_has_mips64r1 0 | ||
| 39 | #define cpu_has_mips64r2 0 | ||
| 40 | #define cpu_has_dsp 0 | ||
| 41 | #define cpu_has_mipsmt 0 | ||
| 42 | #define cpu_has_userlocal 0 | ||
| 43 | #define cpu_has_nofpuex 0 | ||
| 44 | #define cpu_has_64bits 0 | ||
| 45 | #define cpu_has_64bit_zero_reg 0 | ||
| 46 | #define cpu_has_inclusive_pcaches 0 | ||
| 47 | |||
| 48 | #define cpu_dcache_line_size() 32 | ||
| 49 | #define cpu_icache_line_size() 32 | ||
| 50 | |||
| 51 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/dma.h b/arch/mips/include/asm/mach-jz4740/dma.h new file mode 100644 index 000000000000..a3be12183599 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/dma.h | |||
| @@ -0,0 +1,90 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ7420/JZ4740 DMA definitions | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_MACH_JZ4740_DMA_H__ | ||
| 17 | #define __ASM_MACH_JZ4740_DMA_H__ | ||
| 18 | |||
| 19 | struct jz4740_dma_chan; | ||
| 20 | |||
| 21 | enum jz4740_dma_request_type { | ||
| 22 | JZ4740_DMA_TYPE_AUTO_REQUEST = 8, | ||
| 23 | JZ4740_DMA_TYPE_UART_TRANSMIT = 20, | ||
| 24 | JZ4740_DMA_TYPE_UART_RECEIVE = 21, | ||
| 25 | JZ4740_DMA_TYPE_SPI_TRANSMIT = 22, | ||
| 26 | JZ4740_DMA_TYPE_SPI_RECEIVE = 23, | ||
| 27 | JZ4740_DMA_TYPE_AIC_TRANSMIT = 24, | ||
| 28 | JZ4740_DMA_TYPE_AIC_RECEIVE = 25, | ||
| 29 | JZ4740_DMA_TYPE_MMC_TRANSMIT = 26, | ||
| 30 | JZ4740_DMA_TYPE_MMC_RECEIVE = 27, | ||
| 31 | JZ4740_DMA_TYPE_TCU = 28, | ||
| 32 | JZ4740_DMA_TYPE_SADC = 29, | ||
| 33 | JZ4740_DMA_TYPE_SLCD = 30, | ||
| 34 | }; | ||
| 35 | |||
| 36 | enum jz4740_dma_width { | ||
| 37 | JZ4740_DMA_WIDTH_32BIT = 0, | ||
| 38 | JZ4740_DMA_WIDTH_8BIT = 1, | ||
| 39 | JZ4740_DMA_WIDTH_16BIT = 2, | ||
| 40 | }; | ||
| 41 | |||
| 42 | enum jz4740_dma_transfer_size { | ||
| 43 | JZ4740_DMA_TRANSFER_SIZE_4BYTE = 0, | ||
| 44 | JZ4740_DMA_TRANSFER_SIZE_1BYTE = 1, | ||
| 45 | JZ4740_DMA_TRANSFER_SIZE_2BYTE = 2, | ||
| 46 | JZ4740_DMA_TRANSFER_SIZE_16BYTE = 3, | ||
| 47 | JZ4740_DMA_TRANSFER_SIZE_32BYTE = 4, | ||
| 48 | }; | ||
| 49 | |||
| 50 | enum jz4740_dma_flags { | ||
| 51 | JZ4740_DMA_SRC_AUTOINC = 0x2, | ||
| 52 | JZ4740_DMA_DST_AUTOINC = 0x1, | ||
| 53 | }; | ||
| 54 | |||
| 55 | enum jz4740_dma_mode { | ||
| 56 | JZ4740_DMA_MODE_SINGLE = 0, | ||
| 57 | JZ4740_DMA_MODE_BLOCK = 1, | ||
| 58 | }; | ||
| 59 | |||
| 60 | struct jz4740_dma_config { | ||
| 61 | enum jz4740_dma_width src_width; | ||
| 62 | enum jz4740_dma_width dst_width; | ||
| 63 | enum jz4740_dma_transfer_size transfer_size; | ||
| 64 | enum jz4740_dma_request_type request_type; | ||
| 65 | enum jz4740_dma_flags flags; | ||
| 66 | enum jz4740_dma_mode mode; | ||
| 67 | }; | ||
| 68 | |||
| 69 | typedef void (*jz4740_dma_complete_callback_t)(struct jz4740_dma_chan *, int, void *); | ||
| 70 | |||
| 71 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name); | ||
| 72 | void jz4740_dma_free(struct jz4740_dma_chan *dma); | ||
| 73 | |||
| 74 | void jz4740_dma_configure(struct jz4740_dma_chan *dma, | ||
| 75 | const struct jz4740_dma_config *config); | ||
| 76 | |||
| 77 | |||
| 78 | void jz4740_dma_enable(struct jz4740_dma_chan *dma); | ||
| 79 | void jz4740_dma_disable(struct jz4740_dma_chan *dma); | ||
| 80 | |||
| 81 | void jz4740_dma_set_src_addr(struct jz4740_dma_chan *dma, dma_addr_t src); | ||
| 82 | void jz4740_dma_set_dst_addr(struct jz4740_dma_chan *dma, dma_addr_t dst); | ||
| 83 | void jz4740_dma_set_transfer_count(struct jz4740_dma_chan *dma, uint32_t count); | ||
| 84 | |||
| 85 | uint32_t jz4740_dma_get_residue(const struct jz4740_dma_chan *dma); | ||
| 86 | |||
| 87 | void jz4740_dma_set_complete_cb(struct jz4740_dma_chan *dma, | ||
| 88 | jz4740_dma_complete_callback_t cb); | ||
| 89 | |||
| 90 | #endif /* __ASM_JZ4740_DMA_H__ */ | ||
diff --git a/arch/mips/include/asm/mach-jz4740/gpio.h b/arch/mips/include/asm/mach-jz4740/gpio.h new file mode 100644 index 000000000000..7b74703745bb --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/gpio.h | |||
| @@ -0,0 +1,398 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 GPIO pin definitions | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _JZ_GPIO_H | ||
| 17 | #define _JZ_GPIO_H | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | |||
| 21 | enum jz_gpio_function { | ||
| 22 | JZ_GPIO_FUNC_NONE, | ||
| 23 | JZ_GPIO_FUNC1, | ||
| 24 | JZ_GPIO_FUNC2, | ||
| 25 | JZ_GPIO_FUNC3, | ||
| 26 | }; | ||
| 27 | |||
| 28 | |||
| 29 | /* | ||
| 30 | Usually a driver for a SoC component has to request several gpio pins and | ||
| 31 | configure them as funcion pins. | ||
| 32 | jz_gpio_bulk_request can be used to ease this process. | ||
| 33 | Usually one would do something like: | ||
| 34 | |||
| 35 | const static struct jz_gpio_bulk_request i2c_pins[] = { | ||
| 36 | JZ_GPIO_BULK_PIN(I2C_SDA), | ||
| 37 | JZ_GPIO_BULK_PIN(I2C_SCK), | ||
| 38 | }; | ||
| 39 | |||
| 40 | inside the probe function: | ||
| 41 | |||
| 42 | ret = jz_gpio_bulk_request(i2c_pins, ARRAY_SIZE(i2c_pins)); | ||
| 43 | if (ret) { | ||
| 44 | ... | ||
| 45 | |||
| 46 | inside the remove function: | ||
| 47 | |||
| 48 | jz_gpio_bulk_free(i2c_pins, ARRAY_SIZE(i2c_pins)); | ||
| 49 | |||
| 50 | |||
| 51 | */ | ||
| 52 | struct jz_gpio_bulk_request { | ||
| 53 | int gpio; | ||
| 54 | const char *name; | ||
| 55 | enum jz_gpio_function function; | ||
| 56 | }; | ||
| 57 | |||
| 58 | #define JZ_GPIO_BULK_PIN(pin) { \ | ||
| 59 | .gpio = JZ_GPIO_ ## pin, \ | ||
| 60 | .name = #pin, \ | ||
| 61 | .function = JZ_GPIO_FUNC_ ## pin \ | ||
| 62 | } | ||
| 63 | |||
| 64 | int jz_gpio_bulk_request(const struct jz_gpio_bulk_request *request, size_t num); | ||
| 65 | void jz_gpio_bulk_free(const struct jz_gpio_bulk_request *request, size_t num); | ||
| 66 | void jz_gpio_bulk_suspend(const struct jz_gpio_bulk_request *request, size_t num); | ||
| 67 | void jz_gpio_bulk_resume(const struct jz_gpio_bulk_request *request, size_t num); | ||
| 68 | void jz_gpio_enable_pullup(unsigned gpio); | ||
| 69 | void jz_gpio_disable_pullup(unsigned gpio); | ||
| 70 | int jz_gpio_set_function(int gpio, enum jz_gpio_function function); | ||
| 71 | |||
| 72 | int jz_gpio_port_direction_input(int port, uint32_t mask); | ||
| 73 | int jz_gpio_port_direction_output(int port, uint32_t mask); | ||
| 74 | void jz_gpio_port_set_value(int port, uint32_t value, uint32_t mask); | ||
| 75 | uint32_t jz_gpio_port_get_value(int port, uint32_t mask); | ||
| 76 | |||
| 77 | #include <asm/mach-generic/gpio.h> | ||
| 78 | |||
| 79 | #define JZ_GPIO_PORTA(x) ((x) + 32 * 0) | ||
| 80 | #define JZ_GPIO_PORTB(x) ((x) + 32 * 1) | ||
| 81 | #define JZ_GPIO_PORTC(x) ((x) + 32 * 2) | ||
| 82 | #define JZ_GPIO_PORTD(x) ((x) + 32 * 3) | ||
| 83 | |||
| 84 | /* Port A function pins */ | ||
| 85 | #define JZ_GPIO_MEM_DATA0 JZ_GPIO_PORTA(0) | ||
| 86 | #define JZ_GPIO_MEM_DATA1 JZ_GPIO_PORTA(1) | ||
| 87 | #define JZ_GPIO_MEM_DATA2 JZ_GPIO_PORTA(2) | ||
| 88 | #define JZ_GPIO_MEM_DATA3 JZ_GPIO_PORTA(3) | ||
| 89 | #define JZ_GPIO_MEM_DATA4 JZ_GPIO_PORTA(4) | ||
| 90 | #define JZ_GPIO_MEM_DATA5 JZ_GPIO_PORTA(5) | ||
| 91 | #define JZ_GPIO_MEM_DATA6 JZ_GPIO_PORTA(6) | ||
| 92 | #define JZ_GPIO_MEM_DATA7 JZ_GPIO_PORTA(7) | ||
| 93 | #define JZ_GPIO_MEM_DATA8 JZ_GPIO_PORTA(8) | ||
| 94 | #define JZ_GPIO_MEM_DATA9 JZ_GPIO_PORTA(9) | ||
| 95 | #define JZ_GPIO_MEM_DATA10 JZ_GPIO_PORTA(10) | ||
| 96 | #define JZ_GPIO_MEM_DATA11 JZ_GPIO_PORTA(11) | ||
| 97 | #define JZ_GPIO_MEM_DATA12 JZ_GPIO_PORTA(12) | ||
| 98 | #define JZ_GPIO_MEM_DATA13 JZ_GPIO_PORTA(13) | ||
| 99 | #define JZ_GPIO_MEM_DATA14 JZ_GPIO_PORTA(14) | ||
| 100 | #define JZ_GPIO_MEM_DATA15 JZ_GPIO_PORTA(15) | ||
| 101 | #define JZ_GPIO_MEM_DATA16 JZ_GPIO_PORTA(16) | ||
| 102 | #define JZ_GPIO_MEM_DATA17 JZ_GPIO_PORTA(17) | ||
| 103 | #define JZ_GPIO_MEM_DATA18 JZ_GPIO_PORTA(18) | ||
| 104 | #define JZ_GPIO_MEM_DATA19 JZ_GPIO_PORTA(19) | ||
| 105 | #define JZ_GPIO_MEM_DATA20 JZ_GPIO_PORTA(20) | ||
| 106 | #define JZ_GPIO_MEM_DATA21 JZ_GPIO_PORTA(21) | ||
| 107 | #define JZ_GPIO_MEM_DATA22 JZ_GPIO_PORTA(22) | ||
| 108 | #define JZ_GPIO_MEM_DATA23 JZ_GPIO_PORTA(23) | ||
| 109 | #define JZ_GPIO_MEM_DATA24 JZ_GPIO_PORTA(24) | ||
| 110 | #define JZ_GPIO_MEM_DATA25 JZ_GPIO_PORTA(25) | ||
| 111 | #define JZ_GPIO_MEM_DATA26 JZ_GPIO_PORTA(26) | ||
| 112 | #define JZ_GPIO_MEM_DATA27 JZ_GPIO_PORTA(27) | ||
| 113 | #define JZ_GPIO_MEM_DATA28 JZ_GPIO_PORTA(28) | ||
| 114 | #define JZ_GPIO_MEM_DATA29 JZ_GPIO_PORTA(29) | ||
| 115 | #define JZ_GPIO_MEM_DATA30 JZ_GPIO_PORTA(30) | ||
| 116 | #define JZ_GPIO_MEM_DATA31 JZ_GPIO_PORTA(31) | ||
| 117 | |||
| 118 | #define JZ_GPIO_FUNC_MEM_DATA0 JZ_GPIO_FUNC1 | ||
| 119 | #define JZ_GPIO_FUNC_MEM_DATA1 JZ_GPIO_FUNC1 | ||
| 120 | #define JZ_GPIO_FUNC_MEM_DATA2 JZ_GPIO_FUNC1 | ||
| 121 | #define JZ_GPIO_FUNC_MEM_DATA3 JZ_GPIO_FUNC1 | ||
| 122 | #define JZ_GPIO_FUNC_MEM_DATA4 JZ_GPIO_FUNC1 | ||
| 123 | #define JZ_GPIO_FUNC_MEM_DATA5 JZ_GPIO_FUNC1 | ||
| 124 | #define JZ_GPIO_FUNC_MEM_DATA6 JZ_GPIO_FUNC1 | ||
| 125 | #define JZ_GPIO_FUNC_MEM_DATA7 JZ_GPIO_FUNC1 | ||
| 126 | #define JZ_GPIO_FUNC_MEM_DATA8 JZ_GPIO_FUNC1 | ||
| 127 | #define JZ_GPIO_FUNC_MEM_DATA9 JZ_GPIO_FUNC1 | ||
| 128 | #define JZ_GPIO_FUNC_MEM_DATA10 JZ_GPIO_FUNC1 | ||
| 129 | #define JZ_GPIO_FUNC_MEM_DATA11 JZ_GPIO_FUNC1 | ||
| 130 | #define JZ_GPIO_FUNC_MEM_DATA12 JZ_GPIO_FUNC1 | ||
| 131 | #define JZ_GPIO_FUNC_MEM_DATA13 JZ_GPIO_FUNC1 | ||
| 132 | #define JZ_GPIO_FUNC_MEM_DATA14 JZ_GPIO_FUNC1 | ||
| 133 | #define JZ_GPIO_FUNC_MEM_DATA15 JZ_GPIO_FUNC1 | ||
| 134 | #define JZ_GPIO_FUNC_MEM_DATA16 JZ_GPIO_FUNC1 | ||
| 135 | #define JZ_GPIO_FUNC_MEM_DATA17 JZ_GPIO_FUNC1 | ||
| 136 | #define JZ_GPIO_FUNC_MEM_DATA18 JZ_GPIO_FUNC1 | ||
| 137 | #define JZ_GPIO_FUNC_MEM_DATA19 JZ_GPIO_FUNC1 | ||
| 138 | #define JZ_GPIO_FUNC_MEM_DATA20 JZ_GPIO_FUNC1 | ||
| 139 | #define JZ_GPIO_FUNC_MEM_DATA21 JZ_GPIO_FUNC1 | ||
| 140 | #define JZ_GPIO_FUNC_MEM_DATA22 JZ_GPIO_FUNC1 | ||
| 141 | #define JZ_GPIO_FUNC_MEM_DATA23 JZ_GPIO_FUNC1 | ||
| 142 | #define JZ_GPIO_FUNC_MEM_DATA24 JZ_GPIO_FUNC1 | ||
| 143 | #define JZ_GPIO_FUNC_MEM_DATA25 JZ_GPIO_FUNC1 | ||
| 144 | #define JZ_GPIO_FUNC_MEM_DATA26 JZ_GPIO_FUNC1 | ||
| 145 | #define JZ_GPIO_FUNC_MEM_DATA27 JZ_GPIO_FUNC1 | ||
| 146 | #define JZ_GPIO_FUNC_MEM_DATA28 JZ_GPIO_FUNC1 | ||
| 147 | #define JZ_GPIO_FUNC_MEM_DATA29 JZ_GPIO_FUNC1 | ||
| 148 | #define JZ_GPIO_FUNC_MEM_DATA30 JZ_GPIO_FUNC1 | ||
| 149 | #define JZ_GPIO_FUNC_MEM_DATA31 JZ_GPIO_FUNC1 | ||
| 150 | |||
| 151 | /* Port B function pins */ | ||
| 152 | #define JZ_GPIO_MEM_ADDR0 JZ_GPIO_PORTB(0) | ||
| 153 | #define JZ_GPIO_MEM_ADDR1 JZ_GPIO_PORTB(1) | ||
| 154 | #define JZ_GPIO_MEM_ADDR2 JZ_GPIO_PORTB(2) | ||
| 155 | #define JZ_GPIO_MEM_ADDR3 JZ_GPIO_PORTB(3) | ||
| 156 | #define JZ_GPIO_MEM_ADDR4 JZ_GPIO_PORTB(4) | ||
| 157 | #define JZ_GPIO_MEM_ADDR5 JZ_GPIO_PORTB(5) | ||
| 158 | #define JZ_GPIO_MEM_ADDR6 JZ_GPIO_PORTB(6) | ||
| 159 | #define JZ_GPIO_MEM_ADDR7 JZ_GPIO_PORTB(7) | ||
| 160 | #define JZ_GPIO_MEM_ADDR8 JZ_GPIO_PORTB(8) | ||
| 161 | #define JZ_GPIO_MEM_ADDR9 JZ_GPIO_PORTB(9) | ||
| 162 | #define JZ_GPIO_MEM_ADDR10 JZ_GPIO_PORTB(10) | ||
| 163 | #define JZ_GPIO_MEM_ADDR11 JZ_GPIO_PORTB(11) | ||
| 164 | #define JZ_GPIO_MEM_ADDR12 JZ_GPIO_PORTB(12) | ||
| 165 | #define JZ_GPIO_MEM_ADDR13 JZ_GPIO_PORTB(13) | ||
| 166 | #define JZ_GPIO_MEM_ADDR14 JZ_GPIO_PORTB(14) | ||
| 167 | #define JZ_GPIO_MEM_ADDR15 JZ_GPIO_PORTB(15) | ||
| 168 | #define JZ_GPIO_MEM_ADDR16 JZ_GPIO_PORTB(16) | ||
| 169 | #define JZ_GPIO_LCD_CLS JZ_GPIO_PORTB(17) | ||
| 170 | #define JZ_GPIO_LCD_SPL JZ_GPIO_PORTB(18) | ||
| 171 | #define JZ_GPIO_MEM_DCS JZ_GPIO_PORTB(19) | ||
| 172 | #define JZ_GPIO_MEM_RAS JZ_GPIO_PORTB(20) | ||
| 173 | #define JZ_GPIO_MEM_CAS JZ_GPIO_PORTB(21) | ||
| 174 | #define JZ_GPIO_MEM_SDWE JZ_GPIO_PORTB(22) | ||
| 175 | #define JZ_GPIO_MEM_CKE JZ_GPIO_PORTB(23) | ||
| 176 | #define JZ_GPIO_MEM_CKO JZ_GPIO_PORTB(24) | ||
| 177 | #define JZ_GPIO_MEM_CS0 JZ_GPIO_PORTB(25) | ||
| 178 | #define JZ_GPIO_MEM_CS1 JZ_GPIO_PORTB(26) | ||
| 179 | #define JZ_GPIO_MEM_CS2 JZ_GPIO_PORTB(27) | ||
| 180 | #define JZ_GPIO_MEM_CS3 JZ_GPIO_PORTB(28) | ||
| 181 | #define JZ_GPIO_MEM_RD JZ_GPIO_PORTB(29) | ||
| 182 | #define JZ_GPIO_MEM_WR JZ_GPIO_PORTB(30) | ||
| 183 | #define JZ_GPIO_MEM_WE0 JZ_GPIO_PORTB(31) | ||
| 184 | |||
| 185 | #define JZ_GPIO_FUNC_MEM_ADDR0 JZ_GPIO_FUNC1 | ||
| 186 | #define JZ_GPIO_FUNC_MEM_ADDR1 JZ_GPIO_FUNC1 | ||
| 187 | #define JZ_GPIO_FUNC_MEM_ADDR2 JZ_GPIO_FUNC1 | ||
| 188 | #define JZ_GPIO_FUNC_MEM_ADDR3 JZ_GPIO_FUNC1 | ||
| 189 | #define JZ_GPIO_FUNC_MEM_ADDR4 JZ_GPIO_FUNC1 | ||
| 190 | #define JZ_GPIO_FUNC_MEM_ADDR5 JZ_GPIO_FUNC1 | ||
| 191 | #define JZ_GPIO_FUNC_MEM_ADDR6 JZ_GPIO_FUNC1 | ||
| 192 | #define JZ_GPIO_FUNC_MEM_ADDR7 JZ_GPIO_FUNC1 | ||
| 193 | #define JZ_GPIO_FUNC_MEM_ADDR8 JZ_GPIO_FUNC1 | ||
| 194 | #define JZ_GPIO_FUNC_MEM_ADDR9 JZ_GPIO_FUNC1 | ||
| 195 | #define JZ_GPIO_FUNC_MEM_ADDR10 JZ_GPIO_FUNC1 | ||
| 196 | #define JZ_GPIO_FUNC_MEM_ADDR11 JZ_GPIO_FUNC1 | ||
| 197 | #define JZ_GPIO_FUNC_MEM_ADDR12 JZ_GPIO_FUNC1 | ||
| 198 | #define JZ_GPIO_FUNC_MEM_ADDR13 JZ_GPIO_FUNC1 | ||
| 199 | #define JZ_GPIO_FUNC_MEM_ADDR14 JZ_GPIO_FUNC1 | ||
| 200 | #define JZ_GPIO_FUNC_MEM_ADDR15 JZ_GPIO_FUNC1 | ||
| 201 | #define JZ_GPIO_FUNC_MEM_ADDR16 JZ_GPIO_FUNC1 | ||
| 202 | #define JZ_GPIO_FUNC_LCD_CLS JZ_GPIO_FUNC1 | ||
| 203 | #define JZ_GPIO_FUNC_LCD_SPL JZ_GPIO_FUNC1 | ||
| 204 | #define JZ_GPIO_FUNC_MEM_DCS JZ_GPIO_FUNC1 | ||
| 205 | #define JZ_GPIO_FUNC_MEM_RAS JZ_GPIO_FUNC1 | ||
| 206 | #define JZ_GPIO_FUNC_MEM_CAS JZ_GPIO_FUNC1 | ||
| 207 | #define JZ_GPIO_FUNC_MEM_SDWE JZ_GPIO_FUNC1 | ||
| 208 | #define JZ_GPIO_FUNC_MEM_CKE JZ_GPIO_FUNC1 | ||
| 209 | #define JZ_GPIO_FUNC_MEM_CKO JZ_GPIO_FUNC1 | ||
| 210 | #define JZ_GPIO_FUNC_MEM_CS0 JZ_GPIO_FUNC1 | ||
| 211 | #define JZ_GPIO_FUNC_MEM_CS1 JZ_GPIO_FUNC1 | ||
| 212 | #define JZ_GPIO_FUNC_MEM_CS2 JZ_GPIO_FUNC1 | ||
| 213 | #define JZ_GPIO_FUNC_MEM_CS3 JZ_GPIO_FUNC1 | ||
| 214 | #define JZ_GPIO_FUNC_MEM_RD JZ_GPIO_FUNC1 | ||
| 215 | #define JZ_GPIO_FUNC_MEM_WR JZ_GPIO_FUNC1 | ||
| 216 | #define JZ_GPIO_FUNC_MEM_WE0 JZ_GPIO_FUNC1 | ||
| 217 | |||
| 218 | |||
| 219 | #define JZ_GPIO_MEM_ADDR21 JZ_GPIO_PORTB(17) | ||
| 220 | #define JZ_GPIO_MEM_ADDR22 JZ_GPIO_PORTB(18) | ||
| 221 | |||
| 222 | #define JZ_GPIO_FUNC_MEM_ADDR21 JZ_GPIO_FUNC2 | ||
| 223 | #define JZ_GPIO_FUNC_MEM_ADDR22 JZ_GPIO_FUNC2 | ||
| 224 | |||
| 225 | /* Port C function pins */ | ||
| 226 | #define JZ_GPIO_LCD_DATA0 JZ_GPIO_PORTC(0) | ||
| 227 | #define JZ_GPIO_LCD_DATA1 JZ_GPIO_PORTC(1) | ||
| 228 | #define JZ_GPIO_LCD_DATA2 JZ_GPIO_PORTC(2) | ||
| 229 | #define JZ_GPIO_LCD_DATA3 JZ_GPIO_PORTC(3) | ||
| 230 | #define JZ_GPIO_LCD_DATA4 JZ_GPIO_PORTC(4) | ||
| 231 | #define JZ_GPIO_LCD_DATA5 JZ_GPIO_PORTC(5) | ||
| 232 | #define JZ_GPIO_LCD_DATA6 JZ_GPIO_PORTC(6) | ||
| 233 | #define JZ_GPIO_LCD_DATA7 JZ_GPIO_PORTC(7) | ||
| 234 | #define JZ_GPIO_LCD_DATA8 JZ_GPIO_PORTC(8) | ||
| 235 | #define JZ_GPIO_LCD_DATA9 JZ_GPIO_PORTC(9) | ||
| 236 | #define JZ_GPIO_LCD_DATA10 JZ_GPIO_PORTC(10) | ||
| 237 | #define JZ_GPIO_LCD_DATA11 JZ_GPIO_PORTC(11) | ||
| 238 | #define JZ_GPIO_LCD_DATA12 JZ_GPIO_PORTC(12) | ||
| 239 | #define JZ_GPIO_LCD_DATA13 JZ_GPIO_PORTC(13) | ||
| 240 | #define JZ_GPIO_LCD_DATA14 JZ_GPIO_PORTC(14) | ||
| 241 | #define JZ_GPIO_LCD_DATA15 JZ_GPIO_PORTC(15) | ||
| 242 | #define JZ_GPIO_LCD_DATA16 JZ_GPIO_PORTC(16) | ||
| 243 | #define JZ_GPIO_LCD_DATA17 JZ_GPIO_PORTC(17) | ||
| 244 | #define JZ_GPIO_LCD_PCLK JZ_GPIO_PORTC(18) | ||
| 245 | #define JZ_GPIO_LCD_HSYNC JZ_GPIO_PORTC(19) | ||
| 246 | #define JZ_GPIO_LCD_VSYNC JZ_GPIO_PORTC(20) | ||
| 247 | #define JZ_GPIO_LCD_DE JZ_GPIO_PORTC(21) | ||
| 248 | #define JZ_GPIO_LCD_PS JZ_GPIO_PORTC(22) | ||
| 249 | #define JZ_GPIO_LCD_REV JZ_GPIO_PORTC(23) | ||
| 250 | #define JZ_GPIO_MEM_WE1 JZ_GPIO_PORTC(24) | ||
| 251 | #define JZ_GPIO_MEM_WE2 JZ_GPIO_PORTC(25) | ||
| 252 | #define JZ_GPIO_MEM_WE3 JZ_GPIO_PORTC(26) | ||
| 253 | #define JZ_GPIO_MEM_WAIT JZ_GPIO_PORTC(27) | ||
| 254 | #define JZ_GPIO_MEM_FRE JZ_GPIO_PORTC(28) | ||
| 255 | #define JZ_GPIO_MEM_FWE JZ_GPIO_PORTC(29) | ||
| 256 | |||
| 257 | #define JZ_GPIO_FUNC_LCD_DATA0 JZ_GPIO_FUNC1 | ||
| 258 | #define JZ_GPIO_FUNC_LCD_DATA1 JZ_GPIO_FUNC1 | ||
| 259 | #define JZ_GPIO_FUNC_LCD_DATA2 JZ_GPIO_FUNC1 | ||
| 260 | #define JZ_GPIO_FUNC_LCD_DATA3 JZ_GPIO_FUNC1 | ||
| 261 | #define JZ_GPIO_FUNC_LCD_DATA4 JZ_GPIO_FUNC1 | ||
| 262 | #define JZ_GPIO_FUNC_LCD_DATA5 JZ_GPIO_FUNC1 | ||
| 263 | #define JZ_GPIO_FUNC_LCD_DATA6 JZ_GPIO_FUNC1 | ||
| 264 | #define JZ_GPIO_FUNC_LCD_DATA7 JZ_GPIO_FUNC1 | ||
| 265 | #define JZ_GPIO_FUNC_LCD_DATA8 JZ_GPIO_FUNC1 | ||
| 266 | #define JZ_GPIO_FUNC_LCD_DATA9 JZ_GPIO_FUNC1 | ||
| 267 | #define JZ_GPIO_FUNC_LCD_DATA10 JZ_GPIO_FUNC1 | ||
| 268 | #define JZ_GPIO_FUNC_LCD_DATA11 JZ_GPIO_FUNC1 | ||
| 269 | #define JZ_GPIO_FUNC_LCD_DATA12 JZ_GPIO_FUNC1 | ||
| 270 | #define JZ_GPIO_FUNC_LCD_DATA13 JZ_GPIO_FUNC1 | ||
| 271 | #define JZ_GPIO_FUNC_LCD_DATA14 JZ_GPIO_FUNC1 | ||
| 272 | #define JZ_GPIO_FUNC_LCD_DATA15 JZ_GPIO_FUNC1 | ||
| 273 | #define JZ_GPIO_FUNC_LCD_DATA16 JZ_GPIO_FUNC1 | ||
| 274 | #define JZ_GPIO_FUNC_LCD_DATA17 JZ_GPIO_FUNC1 | ||
| 275 | #define JZ_GPIO_FUNC_LCD_PCLK JZ_GPIO_FUNC1 | ||
| 276 | #define JZ_GPIO_FUNC_LCD_VSYNC JZ_GPIO_FUNC1 | ||
| 277 | #define JZ_GPIO_FUNC_LCD_HSYNC JZ_GPIO_FUNC1 | ||
| 278 | #define JZ_GPIO_FUNC_LCD_DE JZ_GPIO_FUNC1 | ||
| 279 | #define JZ_GPIO_FUNC_LCD_PS JZ_GPIO_FUNC1 | ||
| 280 | #define JZ_GPIO_FUNC_LCD_REV JZ_GPIO_FUNC1 | ||
| 281 | #define JZ_GPIO_FUNC_MEM_WE1 JZ_GPIO_FUNC1 | ||
| 282 | #define JZ_GPIO_FUNC_MEM_WE2 JZ_GPIO_FUNC1 | ||
| 283 | #define JZ_GPIO_FUNC_MEM_WE3 JZ_GPIO_FUNC1 | ||
| 284 | #define JZ_GPIO_FUNC_MEM_WAIT JZ_GPIO_FUNC1 | ||
| 285 | #define JZ_GPIO_FUNC_MEM_FRE JZ_GPIO_FUNC1 | ||
| 286 | #define JZ_GPIO_FUNC_MEM_FWE JZ_GPIO_FUNC1 | ||
| 287 | |||
| 288 | |||
| 289 | #define JZ_GPIO_MEM_ADDR19 JZ_GPIO_PORTB(22) | ||
| 290 | #define JZ_GPIO_MEM_ADDR20 JZ_GPIO_PORTB(23) | ||
| 291 | |||
| 292 | #define JZ_GPIO_FUNC_MEM_ADDR19 JZ_GPIO_FUNC2 | ||
| 293 | #define JZ_GPIO_FUNC_MEM_ADDR20 JZ_GPIO_FUNC2 | ||
| 294 | |||
| 295 | /* Port D function pins */ | ||
| 296 | #define JZ_GPIO_CIM_DATA0 JZ_GPIO_PORTD(0) | ||
| 297 | #define JZ_GPIO_CIM_DATA1 JZ_GPIO_PORTD(1) | ||
| 298 | #define JZ_GPIO_CIM_DATA2 JZ_GPIO_PORTD(2) | ||
| 299 | #define JZ_GPIO_CIM_DATA3 JZ_GPIO_PORTD(3) | ||
| 300 | #define JZ_GPIO_CIM_DATA4 JZ_GPIO_PORTD(4) | ||
| 301 | #define JZ_GPIO_CIM_DATA5 JZ_GPIO_PORTD(5) | ||
| 302 | #define JZ_GPIO_CIM_DATA6 JZ_GPIO_PORTD(6) | ||
| 303 | #define JZ_GPIO_CIM_DATA7 JZ_GPIO_PORTD(7) | ||
| 304 | #define JZ_GPIO_MSC_CMD JZ_GPIO_PORTD(8) | ||
| 305 | #define JZ_GPIO_MSC_CLK JZ_GPIO_PORTD(9) | ||
| 306 | #define JZ_GPIO_MSC_DATA0 JZ_GPIO_PORTD(10) | ||
| 307 | #define JZ_GPIO_MSC_DATA1 JZ_GPIO_PORTD(11) | ||
| 308 | #define JZ_GPIO_MSC_DATA2 JZ_GPIO_PORTD(12) | ||
| 309 | #define JZ_GPIO_MSC_DATA3 JZ_GPIO_PORTD(13) | ||
| 310 | #define JZ_GPIO_CIM_MCLK JZ_GPIO_PORTD(14) | ||
| 311 | #define JZ_GPIO_CIM_PCLK JZ_GPIO_PORTD(15) | ||
| 312 | #define JZ_GPIO_CIM_VSYNC JZ_GPIO_PORTD(16) | ||
| 313 | #define JZ_GPIO_CIM_HSYNC JZ_GPIO_PORTD(17) | ||
| 314 | #define JZ_GPIO_SPI_CLK JZ_GPIO_PORTD(18) | ||
| 315 | #define JZ_GPIO_SPI_CE0 JZ_GPIO_PORTD(19) | ||
| 316 | #define JZ_GPIO_SPI_DT JZ_GPIO_PORTD(20) | ||
| 317 | #define JZ_GPIO_SPI_DR JZ_GPIO_PORTD(21) | ||
| 318 | #define JZ_GPIO_SPI_CE1 JZ_GPIO_PORTD(22) | ||
| 319 | #define JZ_GPIO_PWM0 JZ_GPIO_PORTD(23) | ||
| 320 | #define JZ_GPIO_PWM1 JZ_GPIO_PORTD(24) | ||
| 321 | #define JZ_GPIO_PWM2 JZ_GPIO_PORTD(25) | ||
| 322 | #define JZ_GPIO_PWM3 JZ_GPIO_PORTD(26) | ||
| 323 | #define JZ_GPIO_PWM4 JZ_GPIO_PORTD(27) | ||
| 324 | #define JZ_GPIO_PWM5 JZ_GPIO_PORTD(28) | ||
| 325 | #define JZ_GPIO_PWM6 JZ_GPIO_PORTD(30) | ||
| 326 | #define JZ_GPIO_PWM7 JZ_GPIO_PORTD(31) | ||
| 327 | |||
| 328 | #define JZ_GPIO_FUNC_CIM_DATA JZ_GPIO_FUNC1 | ||
| 329 | #define JZ_GPIO_FUNC_CIM_DATA0 JZ_GPIO_FUNC_CIM_DATA | ||
| 330 | #define JZ_GPIO_FUNC_CIM_DATA1 JZ_GPIO_FUNC_CIM_DATA | ||
| 331 | #define JZ_GPIO_FUNC_CIM_DATA2 JZ_GPIO_FUNC_CIM_DATA | ||
| 332 | #define JZ_GPIO_FUNC_CIM_DATA3 JZ_GPIO_FUNC_CIM_DATA | ||
| 333 | #define JZ_GPIO_FUNC_CIM_DATA4 JZ_GPIO_FUNC_CIM_DATA | ||
| 334 | #define JZ_GPIO_FUNC_CIM_DATA5 JZ_GPIO_FUNC_CIM_DATA | ||
| 335 | #define JZ_GPIO_FUNC_CIM_DATA6 JZ_GPIO_FUNC_CIM_DATA | ||
| 336 | #define JZ_GPIO_FUNC_CIM_DATA7 JZ_GPIO_FUNC_CIM_DATA | ||
| 337 | #define JZ_GPIO_FUNC_MSC_CMD JZ_GPIO_FUNC1 | ||
| 338 | #define JZ_GPIO_FUNC_MSC_CLK JZ_GPIO_FUNC1 | ||
| 339 | #define JZ_GPIO_FUNC_MSC_DATA JZ_GPIO_FUNC1 | ||
| 340 | #define JZ_GPIO_FUNC_MSC_DATA0 JZ_GPIO_FUNC_MSC_DATA | ||
| 341 | #define JZ_GPIO_FUNC_MSC_DATA1 JZ_GPIO_FUNC_MSC_DATA | ||
| 342 | #define JZ_GPIO_FUNC_MSC_DATA2 JZ_GPIO_FUNC_MSC_DATA | ||
| 343 | #define JZ_GPIO_FUNC_MSC_DATA3 JZ_GPIO_FUNC_MSC_DATA | ||
| 344 | #define JZ_GPIO_FUNC_CIM_MCLK JZ_GPIO_FUNC1 | ||
| 345 | #define JZ_GPIO_FUNC_CIM_PCLK JZ_GPIO_FUNC1 | ||
| 346 | #define JZ_GPIO_FUNC_CIM_VSYNC JZ_GPIO_FUNC1 | ||
| 347 | #define JZ_GPIO_FUNC_CIM_HSYNC JZ_GPIO_FUNC1 | ||
| 348 | #define JZ_GPIO_FUNC_SPI_CLK JZ_GPIO_FUNC1 | ||
| 349 | #define JZ_GPIO_FUNC_SPI_CE0 JZ_GPIO_FUNC1 | ||
| 350 | #define JZ_GPIO_FUNC_SPI_DT JZ_GPIO_FUNC1 | ||
| 351 | #define JZ_GPIO_FUNC_SPI_DR JZ_GPIO_FUNC1 | ||
| 352 | #define JZ_GPIO_FUNC_SPI_CE1 JZ_GPIO_FUNC1 | ||
| 353 | |||
| 354 | #define JZ_GPIO_FUNC_PWM JZ_GPIO_FUNC1 | ||
| 355 | #define JZ_GPIO_FUNC_PWM0 JZ_GPIO_FUNC_PWM | ||
| 356 | #define JZ_GPIO_FUNC_PWM1 JZ_GPIO_FUNC_PWM | ||
| 357 | #define JZ_GPIO_FUNC_PWM2 JZ_GPIO_FUNC_PWM | ||
| 358 | #define JZ_GPIO_FUNC_PWM3 JZ_GPIO_FUNC_PWM | ||
| 359 | #define JZ_GPIO_FUNC_PWM4 JZ_GPIO_FUNC_PWM | ||
| 360 | #define JZ_GPIO_FUNC_PWM5 JZ_GPIO_FUNC_PWM | ||
| 361 | #define JZ_GPIO_FUNC_PWM6 JZ_GPIO_FUNC_PWM | ||
| 362 | #define JZ_GPIO_FUNC_PWM7 JZ_GPIO_FUNC_PWM | ||
| 363 | |||
| 364 | #define JZ_GPIO_MEM_SCLK_RSTN JZ_GPIO_PORTD(18) | ||
| 365 | #define JZ_GPIO_MEM_BCLK JZ_GPIO_PORTD(19) | ||
| 366 | #define JZ_GPIO_MEM_SDATO JZ_GPIO_PORTD(20) | ||
| 367 | #define JZ_GPIO_MEM_SDATI JZ_GPIO_PORTD(21) | ||
| 368 | #define JZ_GPIO_MEM_SYNC JZ_GPIO_PORTD(22) | ||
| 369 | #define JZ_GPIO_I2C_SDA JZ_GPIO_PORTD(23) | ||
| 370 | #define JZ_GPIO_I2C_SCK JZ_GPIO_PORTD(24) | ||
| 371 | #define JZ_GPIO_UART0_TXD JZ_GPIO_PORTD(25) | ||
| 372 | #define JZ_GPIO_UART0_RXD JZ_GPIO_PORTD(26) | ||
| 373 | #define JZ_GPIO_MEM_ADDR17 JZ_GPIO_PORTD(27) | ||
| 374 | #define JZ_GPIO_MEM_ADDR18 JZ_GPIO_PORTD(28) | ||
| 375 | #define JZ_GPIO_UART0_CTS JZ_GPIO_PORTD(30) | ||
| 376 | #define JZ_GPIO_UART0_RTS JZ_GPIO_PORTD(31) | ||
| 377 | |||
| 378 | #define JZ_GPIO_FUNC_MEM_SCLK_RSTN JZ_GPIO_FUNC2 | ||
| 379 | #define JZ_GPIO_FUNC_MEM_BCLK JZ_GPIO_FUNC2 | ||
| 380 | #define JZ_GPIO_FUNC_MEM_SDATO JZ_GPIO_FUNC2 | ||
| 381 | #define JZ_GPIO_FUNC_MEM_SDATI JZ_GPIO_FUNC2 | ||
| 382 | #define JZ_GPIO_FUNC_MEM_SYNC JZ_GPIO_FUNC2 | ||
| 383 | #define JZ_GPIO_FUNC_I2C_SDA JZ_GPIO_FUNC2 | ||
| 384 | #define JZ_GPIO_FUNC_I2C_SCK JZ_GPIO_FUNC2 | ||
| 385 | #define JZ_GPIO_FUNC_UART0_TXD JZ_GPIO_FUNC2 | ||
| 386 | #define JZ_GPIO_FUNC_UART0_RXD JZ_GPIO_FUNC2 | ||
| 387 | #define JZ_GPIO_FUNC_MEM_ADDR17 JZ_GPIO_FUNC2 | ||
| 388 | #define JZ_GPIO_FUNC_MEM_ADDR18 JZ_GPIO_FUNC2 | ||
| 389 | #define JZ_GPIO_FUNC_UART0_CTS JZ_GPIO_FUNC2 | ||
| 390 | #define JZ_GPIO_FUNC_UART0_RTS JZ_GPIO_FUNC2 | ||
| 391 | |||
| 392 | #define JZ_GPIO_UART1_RXD JZ_GPIO_PORTD(30) | ||
| 393 | #define JZ_GPIO_UART1_TXD JZ_GPIO_PORTD(31) | ||
| 394 | |||
| 395 | #define JZ_GPIO_FUNC_UART1_RXD JZ_GPIO_FUNC3 | ||
| 396 | #define JZ_GPIO_FUNC_UART1_TXD JZ_GPIO_FUNC3 | ||
| 397 | |||
| 398 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/irq.h b/arch/mips/include/asm/mach-jz4740/irq.h new file mode 100644 index 000000000000..a865c983c70a --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/irq.h | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 IRQ definitions | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_MACH_JZ4740_IRQ_H__ | ||
| 17 | #define __ASM_MACH_JZ4740_IRQ_H__ | ||
| 18 | |||
| 19 | #define MIPS_CPU_IRQ_BASE 0 | ||
| 20 | #define JZ4740_IRQ_BASE 8 | ||
| 21 | |||
| 22 | /* 1st-level interrupts */ | ||
| 23 | #define JZ4740_IRQ(x) (JZ4740_IRQ_BASE + (x)) | ||
| 24 | #define JZ4740_IRQ_I2C JZ4740_IRQ(1) | ||
| 25 | #define JZ4740_IRQ_UHC JZ4740_IRQ(3) | ||
| 26 | #define JZ4740_IRQ_UART1 JZ4740_IRQ(8) | ||
| 27 | #define JZ4740_IRQ_UART0 JZ4740_IRQ(9) | ||
| 28 | #define JZ4740_IRQ_SADC JZ4740_IRQ(12) | ||
| 29 | #define JZ4740_IRQ_MSC JZ4740_IRQ(14) | ||
| 30 | #define JZ4740_IRQ_RTC JZ4740_IRQ(15) | ||
| 31 | #define JZ4740_IRQ_SSI JZ4740_IRQ(16) | ||
| 32 | #define JZ4740_IRQ_CIM JZ4740_IRQ(17) | ||
| 33 | #define JZ4740_IRQ_AIC JZ4740_IRQ(18) | ||
| 34 | #define JZ4740_IRQ_ETH JZ4740_IRQ(19) | ||
| 35 | #define JZ4740_IRQ_DMAC JZ4740_IRQ(20) | ||
| 36 | #define JZ4740_IRQ_TCU2 JZ4740_IRQ(21) | ||
| 37 | #define JZ4740_IRQ_TCU1 JZ4740_IRQ(22) | ||
| 38 | #define JZ4740_IRQ_TCU0 JZ4740_IRQ(23) | ||
| 39 | #define JZ4740_IRQ_UDC JZ4740_IRQ(24) | ||
| 40 | #define JZ4740_IRQ_GPIO3 JZ4740_IRQ(25) | ||
| 41 | #define JZ4740_IRQ_GPIO2 JZ4740_IRQ(26) | ||
| 42 | #define JZ4740_IRQ_GPIO1 JZ4740_IRQ(27) | ||
| 43 | #define JZ4740_IRQ_GPIO0 JZ4740_IRQ(28) | ||
| 44 | #define JZ4740_IRQ_IPU JZ4740_IRQ(29) | ||
| 45 | #define JZ4740_IRQ_LCD JZ4740_IRQ(30) | ||
| 46 | |||
| 47 | /* 2nd-level interrupts */ | ||
| 48 | #define JZ4740_IRQ_DMA(x) (JZ4740_IRQ(32) + (X)) | ||
| 49 | |||
| 50 | #define JZ4740_IRQ_INTC_GPIO(x) (JZ4740_IRQ_GPIO0 - (x)) | ||
| 51 | #define JZ4740_IRQ_GPIO(x) (JZ4740_IRQ(48) + (x)) | ||
| 52 | |||
| 53 | #define JZ4740_IRQ_ADC_BASE JZ4740_IRQ(176) | ||
| 54 | |||
| 55 | #define NR_IRQS (JZ4740_IRQ_ADC_BASE + 6) | ||
| 56 | |||
| 57 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_fb.h b/arch/mips/include/asm/mach-jz4740/jz4740_fb.h new file mode 100644 index 000000000000..6a50e6f7a21a --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_fb.h | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_MACH_JZ4740_JZ4740_FB_H__ | ||
| 16 | #define __ASM_MACH_JZ4740_JZ4740_FB_H__ | ||
| 17 | |||
| 18 | #include <linux/fb.h> | ||
| 19 | |||
| 20 | enum jz4740_fb_lcd_type { | ||
| 21 | JZ_LCD_TYPE_GENERIC_16_BIT = 0, | ||
| 22 | JZ_LCD_TYPE_GENERIC_18_BIT = 0 | (1 << 4), | ||
| 23 | JZ_LCD_TYPE_SPECIAL_TFT_1 = 1, | ||
| 24 | JZ_LCD_TYPE_SPECIAL_TFT_2 = 2, | ||
| 25 | JZ_LCD_TYPE_SPECIAL_TFT_3 = 3, | ||
| 26 | JZ_LCD_TYPE_NON_INTERLACED_CCIR656 = 5, | ||
| 27 | JZ_LCD_TYPE_INTERLACED_CCIR656 = 7, | ||
| 28 | JZ_LCD_TYPE_SINGLE_COLOR_STN = 8, | ||
| 29 | JZ_LCD_TYPE_SINGLE_MONOCHROME_STN = 9, | ||
| 30 | JZ_LCD_TYPE_DUAL_COLOR_STN = 10, | ||
| 31 | JZ_LCD_TYPE_DUAL_MONOCHROME_STN = 11, | ||
| 32 | JZ_LCD_TYPE_8BIT_SERIAL = 12, | ||
| 33 | }; | ||
| 34 | |||
| 35 | #define JZ4740_FB_SPECIAL_TFT_CONFIG(start, stop) (((start) << 16) | (stop)) | ||
| 36 | |||
| 37 | /* | ||
| 38 | * width: width of the lcd display in mm | ||
| 39 | * height: height of the lcd display in mm | ||
| 40 | * num_modes: size of modes | ||
| 41 | * modes: list of valid video modes | ||
| 42 | * bpp: bits per pixel for the lcd | ||
| 43 | * lcd_type: lcd type | ||
| 44 | */ | ||
| 45 | |||
| 46 | struct jz4740_fb_platform_data { | ||
| 47 | unsigned int width; | ||
| 48 | unsigned int height; | ||
| 49 | |||
| 50 | size_t num_modes; | ||
| 51 | struct fb_videomode *modes; | ||
| 52 | |||
| 53 | unsigned int bpp; | ||
| 54 | enum jz4740_fb_lcd_type lcd_type; | ||
| 55 | |||
| 56 | struct { | ||
| 57 | uint32_t spl; | ||
| 58 | uint32_t cls; | ||
| 59 | uint32_t ps; | ||
| 60 | uint32_t rev; | ||
| 61 | } special_tft_config; | ||
| 62 | |||
| 63 | unsigned pixclk_falling_edge:1; | ||
| 64 | unsigned date_enable_active_low:1; | ||
| 65 | }; | ||
| 66 | |||
| 67 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h new file mode 100644 index 000000000000..8543f432b4b3 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __LINUX_MMC_JZ4740_MMC | ||
| 2 | #define __LINUX_MMC_JZ4740_MMC | ||
| 3 | |||
| 4 | struct jz4740_mmc_platform_data { | ||
| 5 | int gpio_power; | ||
| 6 | int gpio_card_detect; | ||
| 7 | int gpio_read_only; | ||
| 8 | unsigned card_detect_active_low:1; | ||
| 9 | unsigned read_only_active_low:1; | ||
| 10 | unsigned power_active_low:1; | ||
| 11 | |||
| 12 | unsigned data_1bit:1; | ||
| 13 | }; | ||
| 14 | |||
| 15 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_nand.h b/arch/mips/include/asm/mach-jz4740/jz4740_nand.h new file mode 100644 index 000000000000..bb5b9a4e29c8 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_nand.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC NAND controller driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_MACH_JZ4740_JZ4740_NAND_H__ | ||
| 17 | #define __ASM_MACH_JZ4740_JZ4740_NAND_H__ | ||
| 18 | |||
| 19 | #include <linux/mtd/nand.h> | ||
| 20 | #include <linux/mtd/partitions.h> | ||
| 21 | |||
| 22 | struct jz_nand_platform_data { | ||
| 23 | int num_partitions; | ||
| 24 | struct mtd_partition *partitions; | ||
| 25 | |||
| 26 | struct nand_ecclayout *ecc_layout; | ||
| 27 | |||
| 28 | unsigned int busy_gpio; | ||
| 29 | |||
| 30 | void (*ident_callback)(struct platform_device *, struct nand_chip *, | ||
| 31 | struct mtd_partition **, int *num_partitions); | ||
| 32 | }; | ||
| 33 | |||
| 34 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/platform.h b/arch/mips/include/asm/mach-jz4740/platform.h new file mode 100644 index 000000000000..8987a76e9676 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/platform.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform device definitions | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | |||
| 17 | #ifndef __JZ4740_PLATFORM_H | ||
| 18 | #define __JZ4740_PLATFORM_H | ||
| 19 | |||
| 20 | #include <linux/platform_device.h> | ||
| 21 | |||
| 22 | extern struct platform_device jz4740_usb_ohci_device; | ||
| 23 | extern struct platform_device jz4740_udc_device; | ||
| 24 | extern struct platform_device jz4740_mmc_device; | ||
| 25 | extern struct platform_device jz4740_rtc_device; | ||
| 26 | extern struct platform_device jz4740_i2c_device; | ||
| 27 | extern struct platform_device jz4740_nand_device; | ||
| 28 | extern struct platform_device jz4740_framebuffer_device; | ||
| 29 | extern struct platform_device jz4740_i2s_device; | ||
| 30 | extern struct platform_device jz4740_pcm_device; | ||
| 31 | extern struct platform_device jz4740_codec_device; | ||
| 32 | extern struct platform_device jz4740_adc_device; | ||
| 33 | |||
| 34 | void jz4740_serial_device_register(void); | ||
| 35 | |||
| 36 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/timer.h b/arch/mips/include/asm/mach-jz4740/timer.h new file mode 100644 index 000000000000..9baa03ce748c --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/timer.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform timer support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_MACH_JZ4740_TIMER | ||
| 17 | #define __ASM_MACH_JZ4740_TIMER | ||
| 18 | |||
| 19 | void jz4740_timer_enable_watchdog(void); | ||
| 20 | void jz4740_timer_disable_watchdog(void); | ||
| 21 | |||
| 22 | #endif | ||
diff --git a/arch/mips/include/asm/mach-jz4740/war.h b/arch/mips/include/asm/mach-jz4740/war.h new file mode 100644 index 000000000000..3a5bc17e28fe --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/war.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org> | ||
| 7 | */ | ||
| 8 | #ifndef __ASM_MIPS_MACH_JZ4740_WAR_H | ||
| 9 | #define __ASM_MIPS_MACH_JZ4740_WAR_H | ||
| 10 | |||
| 11 | #define R4600_V1_INDEX_ICACHEOP_WAR 0 | ||
| 12 | #define R4600_V1_HIT_CACHEOP_WAR 0 | ||
| 13 | #define R4600_V2_HIT_CACHEOP_WAR 0 | ||
| 14 | #define R5432_CP0_INTERRUPT_WAR 0 | ||
| 15 | #define BCM1250_M3_WAR 0 | ||
| 16 | #define SIBYTE_1956_WAR 0 | ||
| 17 | #define MIPS4K_ICACHE_REFILL_WAR 0 | ||
| 18 | #define MIPS_CACHE_SYNC_WAR 0 | ||
| 19 | #define TX49XX_ICACHE_INDEX_INV_WAR 0 | ||
| 20 | #define RM9000_CDEX_SMP_WAR 0 | ||
| 21 | #define ICACHE_REFILLS_WORKAROUND_WAR 0 | ||
| 22 | #define R10000_LLSC_WAR 0 | ||
| 23 | #define MIPS34K_MISSED_ITLB_WAR 0 | ||
| 24 | |||
| 25 | #endif /* __ASM_MIPS_MACH_JZ4740_WAR_H */ | ||
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h index fcdbe3a4ce1f..cb6985f24303 100644 --- a/arch/mips/include/asm/mach-loongson/loongson.h +++ b/arch/mips/include/asm/mach-loongson/loongson.h | |||
| @@ -45,7 +45,6 @@ static inline void prom_init_uart_base(void) | |||
| 45 | /* irq operation functions */ | 45 | /* irq operation functions */ |
| 46 | extern void bonito_irqdispatch(void); | 46 | extern void bonito_irqdispatch(void); |
| 47 | extern void __init bonito_irq_init(void); | 47 | extern void __init bonito_irq_init(void); |
| 48 | extern void __init set_irq_trigger_mode(void); | ||
| 49 | extern void __init mach_init_irq(void); | 48 | extern void __init mach_init_irq(void); |
| 50 | extern void mach_irq_dispatch(unsigned int pending); | 49 | extern void mach_irq_dispatch(unsigned int pending); |
| 51 | extern int mach_i8259_irq(void); | 50 | extern int mach_i8259_irq(void); |
| @@ -63,6 +62,14 @@ extern int mach_i8259_irq(void); | |||
| 63 | #define LOONGSON_IRQ_BASE 32 | 62 | #define LOONGSON_IRQ_BASE 32 |
| 64 | #define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ | 63 | #define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ |
| 65 | 64 | ||
| 65 | #include <linux/interrupt.h> | ||
| 66 | static inline void do_perfcnt_IRQ(void) | ||
| 67 | { | ||
| 68 | #if defined(CONFIG_OPROFILE) || defined(CONFIG_OPROFILE_MODULE) | ||
| 69 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | ||
| 70 | #endif | ||
| 71 | } | ||
| 72 | |||
| 66 | #define LOONGSON_FLASH_BASE 0x1c000000 | 73 | #define LOONGSON_FLASH_BASE 0x1c000000 |
| 67 | #define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */ | 74 | #define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */ |
| 68 | #define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1) | 75 | #define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1) |
diff --git a/arch/mips/include/asm/mach-pb1x00/pb1550.h b/arch/mips/include/asm/mach-pb1x00/pb1550.h index 58796410bd6e..fc4d766641ce 100644 --- a/arch/mips/include/asm/mach-pb1x00/pb1550.h +++ b/arch/mips/include/asm/mach-pb1x00/pb1550.h | |||
| @@ -40,14 +40,6 @@ | |||
| 40 | #define SMBUS_PSC_BASE PSC2_BASE_ADDR | 40 | #define SMBUS_PSC_BASE PSC2_BASE_ADDR |
| 41 | #define I2S_PSC_BASE PSC3_BASE_ADDR | 41 | #define I2S_PSC_BASE PSC3_BASE_ADDR |
| 42 | 42 | ||
| 43 | #if defined(CONFIG_MTD_PB1550_BOOT) && defined(CONFIG_MTD_PB1550_USER) | ||
| 44 | #define PB1550_BOTH_BANKS | ||
| 45 | #elif defined(CONFIG_MTD_PB1550_BOOT) && !defined(CONFIG_MTD_PB1550_USER) | ||
| 46 | #define PB1550_BOOT_ONLY | ||
| 47 | #elif !defined(CONFIG_MTD_PB1550_BOOT) && defined(CONFIG_MTD_PB1550_USER) | ||
| 48 | #define PB1550_USER_ONLY | ||
| 49 | #endif | ||
| 50 | |||
| 51 | /* | 43 | /* |
| 52 | * Timing values as described in databook, * ns value stripped of | 44 | * Timing values as described in databook, * ns value stripped of |
| 53 | * lower 2 bits. | 45 | * lower 2 bits. |
diff --git a/arch/mips/include/asm/mach-powertv/asic.h b/arch/mips/include/asm/mach-powertv/asic.h index bcad43a93ebf..c7077a64b9a7 100644 --- a/arch/mips/include/asm/mach-powertv/asic.h +++ b/arch/mips/include/asm/mach-powertv/asic.h | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #define _ASM_MACH_POWERTV_ASIC_H | 20 | #define _ASM_MACH_POWERTV_ASIC_H |
| 21 | 21 | ||
| 22 | #include <linux/ioport.h> | 22 | #include <linux/ioport.h> |
| 23 | #include <linux/platform_device.h> | ||
| 23 | #include <asm/mach-powertv/asic_regs.h> | 24 | #include <asm/mach-powertv/asic_regs.h> |
| 24 | 25 | ||
| 25 | #define DVR_CAPABLE (1<<0) | 26 | #define DVR_CAPABLE (1<<0) |
| @@ -40,19 +41,23 @@ enum family_type { | |||
| 40 | FAMILY_8600VZB, | 41 | FAMILY_8600VZB, |
| 41 | FAMILY_1500VZE, | 42 | FAMILY_1500VZE, |
| 42 | FAMILY_1500VZF, | 43 | FAMILY_1500VZF, |
| 44 | FAMILY_8700, | ||
| 43 | FAMILIES | 45 | FAMILIES |
| 44 | }; | 46 | }; |
| 45 | 47 | ||
| 46 | /* Register maps for each ASIC */ | 48 | /* Register maps for each ASIC */ |
| 47 | extern const struct register_map calliope_register_map; | 49 | extern const struct register_map calliope_register_map; |
| 48 | extern const struct register_map cronus_register_map; | 50 | extern const struct register_map cronus_register_map; |
| 51 | extern const struct register_map gaia_register_map; | ||
| 49 | extern const struct register_map zeus_register_map; | 52 | extern const struct register_map zeus_register_map; |
| 50 | 53 | ||
| 51 | extern struct resource dvr_cronus_resources[]; | 54 | extern struct resource dvr_cronus_resources[]; |
| 55 | extern struct resource dvr_gaia_resources[]; | ||
| 52 | extern struct resource dvr_zeus_resources[]; | 56 | extern struct resource dvr_zeus_resources[]; |
| 53 | extern struct resource non_dvr_calliope_resources[]; | 57 | extern struct resource non_dvr_calliope_resources[]; |
| 54 | extern struct resource non_dvr_cronus_resources[]; | 58 | extern struct resource non_dvr_cronus_resources[]; |
| 55 | extern struct resource non_dvr_cronuslite_resources[]; | 59 | extern struct resource non_dvr_cronuslite_resources[]; |
| 60 | extern struct resource non_dvr_gaia_resources[]; | ||
| 56 | extern struct resource non_dvr_vz_calliope_resources[]; | 61 | extern struct resource non_dvr_vz_calliope_resources[]; |
| 57 | extern struct resource non_dvr_vze_calliope_resources[]; | 62 | extern struct resource non_dvr_vze_calliope_resources[]; |
| 58 | extern struct resource non_dvr_vzf_calliope_resources[]; | 63 | extern struct resource non_dvr_vzf_calliope_resources[]; |
| @@ -67,16 +72,24 @@ extern int platform_supports_ffs(void); | |||
| 67 | extern int platform_supports_pcie(void); | 72 | extern int platform_supports_pcie(void); |
| 68 | extern int platform_supports_display(void); | 73 | extern int platform_supports_display(void); |
| 69 | extern void configure_platform(void); | 74 | extern void configure_platform(void); |
| 70 | extern void platform_configure_usb_ehci(void); | ||
| 71 | extern void platform_unconfigure_usb_ehci(void); | ||
| 72 | extern void platform_configure_usb_ohci(void); | ||
| 73 | extern void platform_unconfigure_usb_ohci(void); | ||
| 74 | 75 | ||
| 75 | /* Platform Resources */ | 76 | /* Platform Resources */ |
| 76 | #define ASIC_RESOURCE_GET_EXISTS 1 | 77 | #define ASIC_RESOURCE_GET_EXISTS 1 |
| 77 | extern struct resource *asic_resource_get(const char *name); | 78 | extern struct resource *asic_resource_get(const char *name); |
| 78 | extern void platform_release_memory(void *baddr, int size); | 79 | extern void platform_release_memory(void *baddr, int size); |
| 79 | 80 | ||
| 81 | /* USB configuration */ | ||
| 82 | struct usb_hcd; /* Forward reference */ | ||
| 83 | extern void platform_configure_usb_ehci(void); | ||
| 84 | extern void platform_unconfigure_usb_ehci(void); | ||
| 85 | extern void platform_configure_usb_ohci(void); | ||
| 86 | extern void platform_unconfigure_usb_ohci(void); | ||
| 87 | |||
| 88 | /* Resource for ASIC registers */ | ||
| 89 | extern struct resource asic_resource; | ||
| 90 | extern int platform_usb_devices_init(struct platform_device **echi_dev, | ||
| 91 | struct platform_device **ohci_dev); | ||
| 92 | |||
| 80 | /* Reboot Cause */ | 93 | /* Reboot Cause */ |
| 81 | extern void set_reboot_cause(char code, unsigned int data, unsigned int data2); | 94 | extern void set_reboot_cause(char code, unsigned int data, unsigned int data2); |
| 82 | extern void set_locked_reboot_cause(char code, unsigned int data, | 95 | extern void set_locked_reboot_cause(char code, unsigned int data, |
diff --git a/arch/mips/include/asm/mach-powertv/asic_reg_map.h b/arch/mips/include/asm/mach-powertv/asic_reg_map.h index 6f26cb09828e..20348e817b09 100644 --- a/arch/mips/include/asm/mach-powertv/asic_reg_map.h +++ b/arch/mips/include/asm/mach-powertv/asic_reg_map.h | |||
| @@ -64,7 +64,7 @@ REGISTER_MAP_ELEMENT(int_level_0_1) | |||
| 64 | REGISTER_MAP_ELEMENT(int_level_0_0) | 64 | REGISTER_MAP_ELEMENT(int_level_0_0) |
| 65 | REGISTER_MAP_ELEMENT(int_docsis_en) | 65 | REGISTER_MAP_ELEMENT(int_docsis_en) |
| 66 | REGISTER_MAP_ELEMENT(mips_pll_setup) | 66 | REGISTER_MAP_ELEMENT(mips_pll_setup) |
| 67 | REGISTER_MAP_ELEMENT(usb_fs) | 67 | REGISTER_MAP_ELEMENT(fs432x4b4_usb_ctl) |
| 68 | REGISTER_MAP_ELEMENT(test_bus) | 68 | REGISTER_MAP_ELEMENT(test_bus) |
| 69 | REGISTER_MAP_ELEMENT(crt_spare) | 69 | REGISTER_MAP_ELEMENT(crt_spare) |
| 70 | REGISTER_MAP_ELEMENT(usb2_ohci_int_mask) | 70 | REGISTER_MAP_ELEMENT(usb2_ohci_int_mask) |
diff --git a/arch/mips/include/asm/mach-powertv/asic_regs.h b/arch/mips/include/asm/mach-powertv/asic_regs.h index 1e11236c6dbc..deecb26a077e 100644 --- a/arch/mips/include/asm/mach-powertv/asic_regs.h +++ b/arch/mips/include/asm/mach-powertv/asic_regs.h | |||
| @@ -27,7 +27,8 @@ enum asic_type { | |||
| 27 | ASIC_CALLIOPE, | 27 | ASIC_CALLIOPE, |
| 28 | ASIC_CRONUS, | 28 | ASIC_CRONUS, |
| 29 | ASIC_CRONUSLITE, | 29 | ASIC_CRONUSLITE, |
| 30 | ASICS | 30 | ASIC_GAIA, |
| 31 | ASICS /* Number of supported ASICs */ | ||
| 31 | }; | 32 | }; |
| 32 | 33 | ||
| 33 | /* hardcoded values read from Chip Version registers */ | 34 | /* hardcoded values read from Chip Version registers */ |
| @@ -37,6 +38,7 @@ enum asic_type { | |||
| 37 | 38 | ||
| 38 | #define NAND_FLASH_BASE 0x03000000 | 39 | #define NAND_FLASH_BASE 0x03000000 |
| 39 | #define CALLIOPE_IO_BASE 0x08000000 | 40 | #define CALLIOPE_IO_BASE 0x08000000 |
| 41 | #define GAIA_IO_BASE 0x09000000 | ||
| 40 | #define CRONUS_IO_BASE 0x09000000 | 42 | #define CRONUS_IO_BASE 0x09000000 |
| 41 | #define ZEUS_IO_BASE 0x09000000 | 43 | #define ZEUS_IO_BASE 0x09000000 |
| 42 | 44 | ||
| @@ -99,6 +101,7 @@ static inline void register_map_virtualize(struct register_map *map) | |||
| 99 | } | 101 | } |
| 100 | 102 | ||
| 101 | extern struct register_map _asic_register_map; | 103 | extern struct register_map _asic_register_map; |
| 104 | extern unsigned long asic_phy_base; | ||
| 102 | 105 | ||
| 103 | /* | 106 | /* |
| 104 | * Macros to interface to registers through their ioremapped address | 107 | * Macros to interface to registers through their ioremapped address |
diff --git a/arch/mips/include/asm/mach-powertv/dma-coherence.h b/arch/mips/include/asm/mach-powertv/dma-coherence.h index 5b8d5ebeb838..f76029c2406e 100644 --- a/arch/mips/include/asm/mach-powertv/dma-coherence.h +++ b/arch/mips/include/asm/mach-powertv/dma-coherence.h | |||
| @@ -65,21 +65,21 @@ static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr, | |||
| 65 | size_t size) | 65 | size_t size) |
| 66 | { | 66 | { |
| 67 | if (is_kseg2(addr)) | 67 | if (is_kseg2(addr)) |
| 68 | return phys_to_bus(virt_to_phys_from_pte(addr)); | 68 | return phys_to_dma(virt_to_phys_from_pte(addr)); |
| 69 | else | 69 | else |
| 70 | return phys_to_bus(virt_to_phys(addr)); | 70 | return phys_to_dma(virt_to_phys(addr)); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | static inline dma_addr_t plat_map_dma_mem_page(struct device *dev, | 73 | static inline dma_addr_t plat_map_dma_mem_page(struct device *dev, |
| 74 | struct page *page) | 74 | struct page *page) |
| 75 | { | 75 | { |
| 76 | return phys_to_bus(page_to_phys(page)); | 76 | return phys_to_dma(page_to_phys(page)); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | static inline unsigned long plat_dma_addr_to_phys(struct device *dev, | 79 | static inline unsigned long plat_dma_addr_to_phys(struct device *dev, |
| 80 | dma_addr_t dma_addr) | 80 | dma_addr_t dma_addr) |
| 81 | { | 81 | { |
| 82 | return bus_to_phys(dma_addr); | 82 | return dma_to_phys(dma_addr); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr, | 85 | static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr, |
diff --git a/arch/mips/include/asm/mach-powertv/ioremap.h b/arch/mips/include/asm/mach-powertv/ioremap.h index e6276d5146e8..076f2eeaa575 100644 --- a/arch/mips/include/asm/mach-powertv/ioremap.h +++ b/arch/mips/include/asm/mach-powertv/ioremap.h | |||
| @@ -10,64 +10,101 @@ | |||
| 10 | #define __ASM_MACH_POWERTV_IOREMAP_H | 10 | #define __ASM_MACH_POWERTV_IOREMAP_H |
| 11 | 11 | ||
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/log2.h> | ||
| 14 | #include <linux/compiler.h> | ||
| 13 | 15 | ||
| 14 | #define LOW_MEM_BOUNDARY_PHYS 0x20000000 | 16 | #include <asm/pgtable-bits.h> |
| 15 | #define LOW_MEM_BOUNDARY_MASK (~(LOW_MEM_BOUNDARY_PHYS - 1)) | 17 | #include <asm/addrspace.h> |
| 18 | |||
| 19 | /* We're going to mess with bits, so get sizes */ | ||
| 20 | #define IOR_BPC 8 /* Bits per char */ | ||
| 21 | #define IOR_PHYS_BITS (IOR_BPC * sizeof(phys_addr_t)) | ||
| 22 | #define IOR_DMA_BITS (IOR_BPC * sizeof(dma_addr_t)) | ||
| 16 | 23 | ||
| 17 | /* | 24 | /* |
| 18 | * The bus addresses are different than the physical addresses that | 25 | * Define the granularity of physical/DMA mapping in terms of the number |
| 19 | * the processor sees by an offset. This offset varies by ASIC | 26 | * of bits that defines the offset within a grain. These will be the |
| 20 | * version. Define a variable to hold the offset and some macros to | 27 | * least significant bits of the address. The rest of a physical or DMA |
| 21 | * make the conversion simpler. */ | 28 | * address will be used to index into an appropriate table to find the |
| 22 | extern unsigned long phys_to_bus_offset; | 29 | * offset to add to the address to yield the corresponding DMA or physical |
| 23 | 30 | * address, respectively. | |
| 24 | #ifdef CONFIG_HIGHMEM | 31 | */ |
| 25 | #define MEM_GAP_PHYS 0x60000000 | 32 | #define IOR_LSBITS 22 /* Bits in a grain */ |
| 33 | |||
| 26 | /* | 34 | /* |
| 27 | * TODO: We will use the hard code for conversion between physical and | 35 | * Compute the number of most significant address bits after removing those |
| 28 | * bus until the bootloader releases their device tree to us. | 36 | * used for the offset within a grain and then compute the number of table |
| 37 | * entries for the conversion. | ||
| 29 | */ | 38 | */ |
| 30 | #define phys_to_bus(x) (((x) < LOW_MEM_BOUNDARY_PHYS) ? \ | 39 | #define IOR_PHYS_MSBITS (IOR_PHYS_BITS - IOR_LSBITS) |
| 31 | ((x) + phys_to_bus_offset) : (x)) | 40 | #define IOR_NUM_PHYS_TO_DMA ((phys_addr_t) 1 << IOR_PHYS_MSBITS) |
| 32 | #define bus_to_phys(x) (((x) < MEM_GAP_PHYS_ADDR) ? \ | 41 | |
| 33 | ((x) - phys_to_bus_offset) : (x)) | 42 | #define IOR_DMA_MSBITS (IOR_DMA_BITS - IOR_LSBITS) |
| 34 | #else | 43 | #define IOR_NUM_DMA_TO_PHYS ((dma_addr_t) 1 << IOR_DMA_MSBITS) |
| 35 | #define phys_to_bus(x) ((x) + phys_to_bus_offset) | ||
| 36 | #define bus_to_phys(x) ((x) - phys_to_bus_offset) | ||
| 37 | #endif | ||
| 38 | 44 | ||
| 39 | /* | 45 | /* |
| 40 | * Determine whether the address we are given is for an ASIC device | 46 | * Define data structures used as elements in the arrays for the conversion |
| 41 | * Params: addr Address to check | 47 | * between physical and DMA addresses. We do some slightly fancy math to |
| 42 | * Returns: Zero if the address is not for ASIC devices, non-zero | 48 | * compute the width of the offset element of the conversion tables so |
| 43 | * if it is. | 49 | * that we can have the smallest conversion tables. Next, round up the |
| 50 | * sizes to the next higher power of two, i.e. the offset element will have | ||
| 51 | * 8, 16, 32, 64, etc. bits. This eliminates the need to mask off any | ||
| 52 | * bits. Finally, we compute a shift value that puts the most significant | ||
| 53 | * bits of the offset into the most significant bits of the offset element. | ||
| 54 | * This makes it more efficient on processors without barrel shifters and | ||
| 55 | * easier to see the values if the conversion table is dumped in binary. | ||
| 44 | */ | 56 | */ |
| 45 | static inline int asic_is_device_addr(phys_t addr) | 57 | #define _IOR_OFFSET_WIDTH(n) (1 << order_base_2(n)) |
| 58 | #define IOR_OFFSET_WIDTH(n) \ | ||
| 59 | (_IOR_OFFSET_WIDTH(n) < 8 ? 8 : _IOR_OFFSET_WIDTH(n)) | ||
| 60 | |||
| 61 | #define IOR_PHYS_OFFSET_BITS IOR_OFFSET_WIDTH(IOR_PHYS_MSBITS) | ||
| 62 | #define IOR_PHYS_SHIFT (IOR_PHYS_BITS - IOR_PHYS_OFFSET_BITS) | ||
| 63 | |||
| 64 | #define IOR_DMA_OFFSET_BITS IOR_OFFSET_WIDTH(IOR_DMA_MSBITS) | ||
| 65 | #define IOR_DMA_SHIFT (IOR_DMA_BITS - IOR_DMA_OFFSET_BITS) | ||
| 66 | |||
| 67 | struct ior_phys_to_dma { | ||
| 68 | dma_addr_t offset:IOR_DMA_OFFSET_BITS __packed | ||
| 69 | __aligned((IOR_DMA_OFFSET_BITS / IOR_BPC)); | ||
| 70 | }; | ||
| 71 | |||
| 72 | struct ior_dma_to_phys { | ||
| 73 | dma_addr_t offset:IOR_PHYS_OFFSET_BITS __packed | ||
| 74 | __aligned((IOR_PHYS_OFFSET_BITS / IOR_BPC)); | ||
| 75 | }; | ||
| 76 | |||
| 77 | extern struct ior_phys_to_dma _ior_phys_to_dma[IOR_NUM_PHYS_TO_DMA]; | ||
| 78 | extern struct ior_dma_to_phys _ior_dma_to_phys[IOR_NUM_DMA_TO_PHYS]; | ||
| 79 | |||
| 80 | static inline dma_addr_t _phys_to_dma_offset_raw(phys_addr_t phys) | ||
| 46 | { | 81 | { |
| 47 | return !((phys_t)addr & (phys_t) LOW_MEM_BOUNDARY_MASK); | 82 | return (dma_addr_t)_ior_phys_to_dma[phys >> IOR_LSBITS].offset; |
| 48 | } | 83 | } |
| 49 | 84 | ||
| 50 | /* | 85 | static inline dma_addr_t _dma_to_phys_offset_raw(dma_addr_t dma) |
| 51 | * Determine whether the address we are given is external RAM mappable | ||
| 52 | * into KSEG1. | ||
| 53 | * Params: addr Address to check | ||
| 54 | * Returns: Zero if the address is not for external RAM and | ||
| 55 | */ | ||
| 56 | static inline int asic_is_lowmem_ram_addr(phys_t addr) | ||
| 57 | { | 86 | { |
| 58 | /* | 87 | return (dma_addr_t)_ior_dma_to_phys[dma >> IOR_LSBITS].offset; |
| 59 | * The RAM always starts at the following address in the processor's | 88 | } |
| 60 | * physical address space | ||
| 61 | */ | ||
| 62 | static const phys_t phys_ram_base = 0x10000000; | ||
| 63 | phys_t bus_ram_base; | ||
| 64 | 89 | ||
| 65 | bus_ram_base = phys_to_bus_offset + phys_ram_base; | 90 | /* These are not portable and should not be used in drivers. Drivers should |
| 91 | * be using ioremap() and friends to map physical addreses to virtual | ||
| 92 | * addresses and dma_map*() and friends to map virtual addresses into DMA | ||
| 93 | * addresses and back. | ||
| 94 | */ | ||
| 95 | static inline dma_addr_t phys_to_dma(phys_addr_t phys) | ||
| 96 | { | ||
| 97 | return phys + (_phys_to_dma_offset_raw(phys) << IOR_PHYS_SHIFT); | ||
| 98 | } | ||
| 66 | 99 | ||
| 67 | return addr >= bus_ram_base && | 100 | static inline phys_addr_t dma_to_phys(dma_addr_t dma) |
| 68 | addr < (bus_ram_base + (LOW_MEM_BOUNDARY_PHYS - phys_ram_base)); | 101 | { |
| 102 | return dma + (_dma_to_phys_offset_raw(dma) << IOR_DMA_SHIFT); | ||
| 69 | } | 103 | } |
| 70 | 104 | ||
| 105 | extern void ioremap_add_map(dma_addr_t phys, phys_addr_t alias, | ||
| 106 | dma_addr_t size); | ||
| 107 | |||
| 71 | /* | 108 | /* |
| 72 | * Allow physical addresses to be fixed up to help peripherals located | 109 | * Allow physical addresses to be fixed up to help peripherals located |
| 73 | * outside the low 32-bit range -- generic pass-through version. | 110 | * outside the low 32-bit range -- generic pass-through version. |
| @@ -77,10 +114,50 @@ static inline phys_t fixup_bigphys_addr(phys_t phys_addr, phys_t size) | |||
| 77 | return phys_addr; | 114 | return phys_addr; |
| 78 | } | 115 | } |
| 79 | 116 | ||
| 80 | static inline void __iomem *plat_ioremap(phys_t offset, unsigned long size, | 117 | /* |
| 118 | * Handle the special case of addresses the area aliased into the first | ||
| 119 | * 512 MiB of the processor's physical address space. These turn into either | ||
| 120 | * kseg0 or kseg1 addresses, depending on flags. | ||
| 121 | */ | ||
| 122 | static inline void __iomem *plat_ioremap(phys_t start, unsigned long size, | ||
| 81 | unsigned long flags) | 123 | unsigned long flags) |
| 82 | { | 124 | { |
| 83 | return NULL; | 125 | phys_addr_t start_offset; |
| 126 | void __iomem *result = NULL; | ||
| 127 | |||
| 128 | /* Start by checking to see whether this is an aliased address */ | ||
| 129 | start_offset = _dma_to_phys_offset_raw(start); | ||
| 130 | |||
| 131 | /* | ||
| 132 | * If: | ||
| 133 | * o the memory is aliased into the first 512 MiB, and | ||
| 134 | * o the start and end are in the same RAM bank, and | ||
| 135 | * o we don't have a zero size or wrap around, and | ||
| 136 | * o we are supposed to create an uncached mapping, | ||
| 137 | * handle this is a kseg0 or kseg1 address | ||
| 138 | */ | ||
| 139 | if (start_offset != 0) { | ||
| 140 | phys_addr_t last; | ||
| 141 | dma_addr_t dma_to_phys_offset; | ||
| 142 | |||
| 143 | last = start + size - 1; | ||
| 144 | dma_to_phys_offset = | ||
| 145 | _dma_to_phys_offset_raw(last) << IOR_DMA_SHIFT; | ||
| 146 | |||
| 147 | if (dma_to_phys_offset == start_offset && | ||
| 148 | size != 0 && start <= last) { | ||
| 149 | phys_t adjusted_start; | ||
| 150 | adjusted_start = start + start_offset; | ||
| 151 | if (flags == _CACHE_UNCACHED) | ||
| 152 | result = (void __iomem *) (unsigned long) | ||
| 153 | CKSEG1ADDR(adjusted_start); | ||
| 154 | else | ||
| 155 | result = (void __iomem *) (unsigned long) | ||
| 156 | CKSEG0ADDR(adjusted_start); | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | return result; | ||
| 84 | } | 161 | } |
| 85 | 162 | ||
| 86 | static inline int plat_iounmap(const volatile void __iomem *addr) | 163 | static inline int plat_iounmap(const volatile void __iomem *addr) |
diff --git a/arch/mips/include/asm/mach-tx49xx/kmalloc.h b/arch/mips/include/asm/mach-tx49xx/kmalloc.h index 913ff196259d..b74caf65482b 100644 --- a/arch/mips/include/asm/mach-tx49xx/kmalloc.h +++ b/arch/mips/include/asm/mach-tx49xx/kmalloc.h | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | #ifndef __ASM_MACH_TX49XX_KMALLOC_H | 1 | #ifndef __ASM_MACH_TX49XX_KMALLOC_H |
| 2 | #define __ASM_MACH_TX49XX_KMALLOC_H | 2 | #define __ASM_MACH_TX49XX_KMALLOC_H |
| 3 | 3 | ||
| 4 | /* | 4 | #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES |
| 5 | * All happy, no need to define ARCH_KMALLOC_MINALIGN | ||
| 6 | */ | ||
| 7 | 5 | ||
| 8 | #endif /* __ASM_MACH_TX49XX_KMALLOC_H */ | 6 | #endif /* __ASM_MACH_TX49XX_KMALLOC_H */ |
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index c6e3c93ce7c7..335474c155f6 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
| @@ -408,6 +408,7 @@ | |||
| 408 | #define STATUSB_IP15 7 | 408 | #define STATUSB_IP15 7 |
| 409 | #define STATUSF_IP15 (_ULCAST_(1) << 7) | 409 | #define STATUSF_IP15 (_ULCAST_(1) << 7) |
| 410 | #define ST0_CH 0x00040000 | 410 | #define ST0_CH 0x00040000 |
| 411 | #define ST0_NMI 0x00080000 | ||
| 411 | #define ST0_SR 0x00100000 | 412 | #define ST0_SR 0x00100000 |
| 412 | #define ST0_TS 0x00200000 | 413 | #define ST0_TS 0x00200000 |
| 413 | #define ST0_BEV 0x00400000 | 414 | #define ST0_BEV 0x00400000 |
diff --git a/arch/mips/include/asm/octeon/octeon.h b/arch/mips/include/asm/octeon/octeon.h index ca6214b5ccb9..917a6c413b1a 100644 --- a/arch/mips/include/asm/octeon/octeon.h +++ b/arch/mips/include/asm/octeon/octeon.h | |||
| @@ -50,6 +50,7 @@ extern void octeon_crypto_disable(struct octeon_cop2_state *state, | |||
| 50 | extern asmlinkage void octeon_cop2_restore(struct octeon_cop2_state *task); | 50 | extern asmlinkage void octeon_cop2_restore(struct octeon_cop2_state *task); |
| 51 | 51 | ||
| 52 | extern void octeon_init_cvmcount(void); | 52 | extern void octeon_init_cvmcount(void); |
| 53 | extern void octeon_setup_delays(void); | ||
| 53 | 54 | ||
| 54 | #define OCTEON_ARGV_MAX_ARGS 64 | 55 | #define OCTEON_ARGV_MAX_ARGS 64 |
| 55 | #define OCTOEN_SERIAL_LEN 20 | 56 | #define OCTOEN_SERIAL_LEN 20 |
| @@ -253,4 +254,6 @@ static inline uint32_t octeon_npi_read32(uint64_t address) | |||
| 253 | 254 | ||
| 254 | extern struct cvmx_bootinfo *octeon_bootinfo; | 255 | extern struct cvmx_bootinfo *octeon_bootinfo; |
| 255 | 256 | ||
| 257 | extern uint64_t octeon_bootloader_entry_addr; | ||
| 258 | |||
| 256 | #endif /* __ASM_OCTEON_OCTEON_H */ | 259 | #endif /* __ASM_OCTEON_OCTEON_H */ |
diff --git a/arch/mips/include/asm/octeon/pci-octeon.h b/arch/mips/include/asm/octeon/pci-octeon.h index 6ac5d3e3398e..ece78043acf6 100644 --- a/arch/mips/include/asm/octeon/pci-octeon.h +++ b/arch/mips/include/asm/octeon/pci-octeon.h | |||
| @@ -15,6 +15,19 @@ | |||
| 15 | #define PCI_CONFIG_SPACE_DELAY 10000 | 15 | #define PCI_CONFIG_SPACE_DELAY 10000 |
| 16 | 16 | ||
| 17 | /* | 17 | /* |
| 18 | * The physical memory base mapped by BAR1. 256MB at the end of the | ||
| 19 | * first 4GB. | ||
| 20 | */ | ||
| 21 | #define CVMX_PCIE_BAR1_PHYS_BASE ((1ull << 32) - (1ull << 28)) | ||
| 22 | #define CVMX_PCIE_BAR1_PHYS_SIZE (1ull << 28) | ||
| 23 | |||
| 24 | /* | ||
| 25 | * The RC base of BAR1. gen1 has a 39-bit BAR2, gen2 has 41-bit BAR2, | ||
| 26 | * place BAR1 so it is the same for both. | ||
| 27 | */ | ||
| 28 | #define CVMX_PCIE_BAR1_RC_BASE (1ull << 41) | ||
| 29 | |||
| 30 | /* | ||
| 18 | * pcibios_map_irq() is defined inside pci-octeon.c. All it does is | 31 | * pcibios_map_irq() is defined inside pci-octeon.c. All it does is |
| 19 | * call the Octeon specific version pointed to by this variable. This | 32 | * call the Octeon specific version pointed to by this variable. This |
| 20 | * function needs to change for PCI or PCIe based hosts. | 33 | * function needs to change for PCI or PCIe based hosts. |
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h index 3beea1479b43..576397c69920 100644 --- a/arch/mips/include/asm/pci.h +++ b/arch/mips/include/asm/pci.h | |||
| @@ -140,6 +140,11 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
| 140 | return channel ? 15 : 14; | 140 | return channel ? 15 : 14; |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | ||
| 144 | /* MSI arch hook for OCTEON */ | ||
| 145 | #define arch_setup_msi_irqs arch_setup_msi_irqs | ||
| 146 | #endif | ||
| 147 | |||
| 143 | extern int pci_probe_only; | 148 | extern int pci_probe_only; |
| 144 | 149 | ||
| 145 | extern char * (*pcibios_plat_setup)(char *str); | 150 | extern char * (*pcibios_plat_setup)(char *str); |
diff --git a/arch/mips/include/asm/pmc-sierra/msp71xx/msp_prom.h b/arch/mips/include/asm/pmc-sierra/msp71xx/msp_prom.h index 54ef1a96d7ce..786d82daf8d6 100644 --- a/arch/mips/include/asm/pmc-sierra/msp71xx/msp_prom.h +++ b/arch/mips/include/asm/pmc-sierra/msp71xx/msp_prom.h | |||
| @@ -124,10 +124,6 @@ extern void prom_meminit(void); | |||
| 124 | extern void prom_fixup_mem_map(unsigned long start_mem, | 124 | extern void prom_fixup_mem_map(unsigned long start_mem, |
| 125 | unsigned long end_mem); | 125 | unsigned long end_mem); |
| 126 | 126 | ||
| 127 | #ifdef CONFIG_MTD_PMC_MSP_RAMROOT | ||
| 128 | extern bool get_ramroot(void **start, unsigned long *size); | ||
| 129 | #endif | ||
| 130 | |||
| 131 | extern int get_ethernet_addr(char *ethaddr_name, char *ethernet_addr); | 127 | extern int get_ethernet_addr(char *ethaddr_name, char *ethernet_addr); |
| 132 | extern unsigned long get_deviceid(void); | 128 | extern unsigned long get_deviceid(void); |
| 133 | extern char identify_enet(unsigned long interface_num); | 129 | extern char identify_enet(unsigned long interface_num); |
diff --git a/arch/mips/include/asm/processor.h b/arch/mips/include/asm/processor.h index 5d33b727acf5..0d629bb93cbe 100644 --- a/arch/mips/include/asm/processor.h +++ b/arch/mips/include/asm/processor.h | |||
| @@ -34,6 +34,11 @@ extern void (*cpu_wait)(void); | |||
| 34 | extern unsigned int vced_count, vcei_count; | 34 | extern unsigned int vced_count, vcei_count; |
| 35 | 35 | ||
| 36 | /* | 36 | /* |
| 37 | * MIPS does have an arch_pick_mmap_layout() | ||
| 38 | */ | ||
| 39 | #define HAVE_ARCH_PICK_MMAP_LAYOUT 1 | ||
| 40 | |||
| 41 | /* | ||
| 37 | * A special page (the vdso) is mapped into all processes at the very | 42 | * A special page (the vdso) is mapped into all processes at the very |
| 38 | * top of the virtual memory space. | 43 | * top of the virtual memory space. |
| 39 | */ | 44 | */ |
| @@ -52,6 +57,9 @@ extern unsigned int vced_count, vcei_count; | |||
| 52 | * space during mmap's. | 57 | * space during mmap's. |
| 53 | */ | 58 | */ |
| 54 | #define TASK_UNMAPPED_BASE ((TASK_SIZE / 3) & ~(PAGE_SIZE)) | 59 | #define TASK_UNMAPPED_BASE ((TASK_SIZE / 3) & ~(PAGE_SIZE)) |
| 60 | |||
| 61 | #define TASK_IS_32BIT_ADDR 1 | ||
| 62 | |||
| 55 | #endif | 63 | #endif |
| 56 | 64 | ||
| 57 | #ifdef CONFIG_64BIT | 65 | #ifdef CONFIG_64BIT |
| @@ -77,6 +85,9 @@ extern unsigned int vced_count, vcei_count; | |||
| 77 | PAGE_ALIGN(TASK_SIZE32 / 3) : PAGE_ALIGN(TASK_SIZE / 3)) | 85 | PAGE_ALIGN(TASK_SIZE32 / 3) : PAGE_ALIGN(TASK_SIZE / 3)) |
| 78 | #define TASK_SIZE_OF(tsk) \ | 86 | #define TASK_SIZE_OF(tsk) \ |
| 79 | (test_tsk_thread_flag(tsk, TIF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE) | 87 | (test_tsk_thread_flag(tsk, TIF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE) |
| 88 | |||
| 89 | #define TASK_IS_32BIT_ADDR test_thread_flag(TIF_32BIT_ADDR) | ||
| 90 | |||
| 80 | #endif | 91 | #endif |
| 81 | 92 | ||
| 82 | #ifdef __KERNEL__ | 93 | #ifdef __KERNEL__ |
| @@ -218,7 +229,6 @@ struct thread_struct { | |||
| 218 | unsigned long cp0_badvaddr; /* Last user fault */ | 229 | unsigned long cp0_badvaddr; /* Last user fault */ |
| 219 | unsigned long cp0_baduaddr; /* Last kernel fault accessing USEG */ | 230 | unsigned long cp0_baduaddr; /* Last kernel fault accessing USEG */ |
| 220 | unsigned long error_code; | 231 | unsigned long error_code; |
| 221 | unsigned long trap_no; | ||
| 222 | unsigned long irix_trampoline; /* Wheee... */ | 232 | unsigned long irix_trampoline; /* Wheee... */ |
| 223 | unsigned long irix_oldctx; | 233 | unsigned long irix_oldctx; |
| 224 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | 234 | #ifdef CONFIG_CPU_CAVIUM_OCTEON |
| @@ -290,7 +300,6 @@ struct thread_struct { | |||
| 290 | .cp0_badvaddr = 0, \ | 300 | .cp0_badvaddr = 0, \ |
| 291 | .cp0_baduaddr = 0, \ | 301 | .cp0_baduaddr = 0, \ |
| 292 | .error_code = 0, \ | 302 | .error_code = 0, \ |
| 293 | .trap_no = 0, \ | ||
| 294 | .irix_trampoline = 0, \ | 303 | .irix_trampoline = 0, \ |
| 295 | .irix_oldctx = 0, \ | 304 | .irix_oldctx = 0, \ |
| 296 | /* \ | 305 | /* \ |
diff --git a/arch/mips/include/asm/ptrace.h b/arch/mips/include/asm/ptrace.h index cdc6a46efd98..9f1b8dba2c81 100644 --- a/arch/mips/include/asm/ptrace.h +++ b/arch/mips/include/asm/ptrace.h | |||
| @@ -137,6 +137,7 @@ extern int ptrace_set_watch_regs(struct task_struct *child, | |||
| 137 | */ | 137 | */ |
| 138 | #define user_mode(regs) (((regs)->cp0_status & KU_MASK) == KU_USER) | 138 | #define user_mode(regs) (((regs)->cp0_status & KU_MASK) == KU_USER) |
| 139 | 139 | ||
| 140 | #define regs_return_value(_regs) ((_regs)->regs[2]) | ||
| 140 | #define instruction_pointer(regs) ((regs)->cp0_epc) | 141 | #define instruction_pointer(regs) ((regs)->cp0_epc) |
| 141 | #define profile_pc(regs) instruction_pointer(regs) | 142 | #define profile_pc(regs) instruction_pointer(regs) |
| 142 | 143 | ||
diff --git a/arch/mips/include/asm/sn/agent.h b/arch/mips/include/asm/sn/agent.h index ac4ea85c3a5c..dc81114d4742 100644 --- a/arch/mips/include/asm/sn/agent.h +++ b/arch/mips/include/asm/sn/agent.h | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #ifndef _ASM_SGI_SN_AGENT_H | 11 | #ifndef _ASM_SGI_SN_AGENT_H |
| 12 | #define _ASM_SGI_SN_AGENT_H | 12 | #define _ASM_SGI_SN_AGENT_H |
| 13 | 13 | ||
| 14 | #include <linux/topology.h> | ||
| 15 | #include <asm/sn/addrs.h> | 14 | #include <asm/sn/addrs.h> |
| 16 | #include <asm/sn/arch.h> | 15 | #include <asm/sn/arch.h> |
| 17 | 16 | ||
diff --git a/arch/mips/include/asm/uasm.h b/arch/mips/include/asm/uasm.h index 697e40c06497..892062d6d748 100644 --- a/arch/mips/include/asm/uasm.h +++ b/arch/mips/include/asm/uasm.h | |||
| @@ -10,44 +10,55 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 12 | 12 | ||
| 13 | #ifdef CONFIG_EXPORT_UASM | ||
| 14 | #include <linux/module.h> | ||
| 15 | #define __uasminit | ||
| 16 | #define __uasminitdata | ||
| 17 | #define UASM_EXPORT_SYMBOL(sym) EXPORT_SYMBOL(sym) | ||
| 18 | #else | ||
| 19 | #define __uasminit __cpuinit | ||
| 20 | #define __uasminitdata __cpuinitdata | ||
| 21 | #define UASM_EXPORT_SYMBOL(sym) | ||
| 22 | #endif | ||
| 23 | |||
| 13 | #define Ip_u1u2u3(op) \ | 24 | #define Ip_u1u2u3(op) \ |
| 14 | void __cpuinit \ | 25 | void __uasminit \ |
| 15 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) | 26 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) |
| 16 | 27 | ||
| 17 | #define Ip_u2u1u3(op) \ | 28 | #define Ip_u2u1u3(op) \ |
| 18 | void __cpuinit \ | 29 | void __uasminit \ |
| 19 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) | 30 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) |
| 20 | 31 | ||
| 21 | #define Ip_u3u1u2(op) \ | 32 | #define Ip_u3u1u2(op) \ |
| 22 | void __cpuinit \ | 33 | void __uasminit \ |
| 23 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) | 34 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c) |
| 24 | 35 | ||
| 25 | #define Ip_u1u2s3(op) \ | 36 | #define Ip_u1u2s3(op) \ |
| 26 | void __cpuinit \ | 37 | void __uasminit \ |
| 27 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, signed int c) | 38 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, signed int c) |
| 28 | 39 | ||
| 29 | #define Ip_u2s3u1(op) \ | 40 | #define Ip_u2s3u1(op) \ |
| 30 | void __cpuinit \ | 41 | void __uasminit \ |
| 31 | uasm_i##op(u32 **buf, unsigned int a, signed int b, unsigned int c) | 42 | uasm_i##op(u32 **buf, unsigned int a, signed int b, unsigned int c) |
| 32 | 43 | ||
| 33 | #define Ip_u2u1s3(op) \ | 44 | #define Ip_u2u1s3(op) \ |
| 34 | void __cpuinit \ | 45 | void __uasminit \ |
| 35 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, signed int c) | 46 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, signed int c) |
| 36 | 47 | ||
| 37 | #define Ip_u2u1msbu3(op) \ | 48 | #define Ip_u2u1msbu3(op) \ |
| 38 | void __cpuinit \ | 49 | void __uasminit \ |
| 39 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c, \ | 50 | uasm_i##op(u32 **buf, unsigned int a, unsigned int b, unsigned int c, \ |
| 40 | unsigned int d) | 51 | unsigned int d) |
| 41 | 52 | ||
| 42 | #define Ip_u1u2(op) \ | 53 | #define Ip_u1u2(op) \ |
| 43 | void __cpuinit uasm_i##op(u32 **buf, unsigned int a, unsigned int b) | 54 | void __uasminit uasm_i##op(u32 **buf, unsigned int a, unsigned int b) |
| 44 | 55 | ||
| 45 | #define Ip_u1s2(op) \ | 56 | #define Ip_u1s2(op) \ |
| 46 | void __cpuinit uasm_i##op(u32 **buf, unsigned int a, signed int b) | 57 | void __uasminit uasm_i##op(u32 **buf, unsigned int a, signed int b) |
| 47 | 58 | ||
| 48 | #define Ip_u1(op) void __cpuinit uasm_i##op(u32 **buf, unsigned int a) | 59 | #define Ip_u1(op) void __uasminit uasm_i##op(u32 **buf, unsigned int a) |
| 49 | 60 | ||
| 50 | #define Ip_0(op) void __cpuinit uasm_i##op(u32 **buf) | 61 | #define Ip_0(op) void __uasminit uasm_i##op(u32 **buf) |
| 51 | 62 | ||
| 52 | Ip_u2u1s3(_addiu); | 63 | Ip_u2u1s3(_addiu); |
| 53 | Ip_u3u1u2(_addu); | 64 | Ip_u3u1u2(_addu); |
| @@ -71,6 +82,7 @@ Ip_u2u1u3(_dsra); | |||
| 71 | Ip_u2u1u3(_dsrl); | 82 | Ip_u2u1u3(_dsrl); |
| 72 | Ip_u2u1u3(_dsrl32); | 83 | Ip_u2u1u3(_dsrl32); |
| 73 | Ip_u2u1u3(_drotr); | 84 | Ip_u2u1u3(_drotr); |
| 85 | Ip_u2u1u3(_drotr32); | ||
| 74 | Ip_u3u1u2(_dsubu); | 86 | Ip_u3u1u2(_dsubu); |
| 75 | Ip_0(_eret); | 87 | Ip_0(_eret); |
| 76 | Ip_u1(_j); | 88 | Ip_u1(_j); |
| @@ -111,7 +123,7 @@ struct uasm_label { | |||
| 111 | int lab; | 123 | int lab; |
| 112 | }; | 124 | }; |
| 113 | 125 | ||
| 114 | void __cpuinit uasm_build_label(struct uasm_label **lab, u32 *addr, int lid); | 126 | void __uasminit uasm_build_label(struct uasm_label **lab, u32 *addr, int lid); |
| 115 | #ifdef CONFIG_64BIT | 127 | #ifdef CONFIG_64BIT |
| 116 | int uasm_in_compat_space_p(long addr); | 128 | int uasm_in_compat_space_p(long addr); |
| 117 | #endif | 129 | #endif |
| @@ -121,7 +133,7 @@ void UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr); | |||
| 121 | void UASM_i_LA(u32 **buf, unsigned int rs, long addr); | 133 | void UASM_i_LA(u32 **buf, unsigned int rs, long addr); |
| 122 | 134 | ||
| 123 | #define UASM_L_LA(lb) \ | 135 | #define UASM_L_LA(lb) \ |
| 124 | static inline void __cpuinit uasm_l##lb(struct uasm_label **lab, u32 *addr) \ | 136 | static inline void __uasminit uasm_l##lb(struct uasm_label **lab, u32 *addr) \ |
| 125 | { \ | 137 | { \ |
| 126 | uasm_build_label(lab, addr, label##lb); \ | 138 | uasm_build_label(lab, addr, label##lb); \ |
| 127 | } | 139 | } |
| @@ -176,6 +188,15 @@ static inline void uasm_i_dsrl_safe(u32 **p, unsigned int a1, | |||
| 176 | uasm_i_dsrl32(p, a1, a2, a3 - 32); | 188 | uasm_i_dsrl32(p, a1, a2, a3 - 32); |
| 177 | } | 189 | } |
| 178 | 190 | ||
| 191 | static inline void uasm_i_drotr_safe(u32 **p, unsigned int a1, | ||
| 192 | unsigned int a2, unsigned int a3) | ||
| 193 | { | ||
| 194 | if (a3 < 32) | ||
| 195 | uasm_i_drotr(p, a1, a2, a3); | ||
| 196 | else | ||
| 197 | uasm_i_drotr32(p, a1, a2, a3 - 32); | ||
| 198 | } | ||
| 199 | |||
| 179 | static inline void uasm_i_dsll_safe(u32 **p, unsigned int a1, | 200 | static inline void uasm_i_dsll_safe(u32 **p, unsigned int a1, |
| 180 | unsigned int a2, unsigned int a3) | 201 | unsigned int a2, unsigned int a3) |
| 181 | { | 202 | { |
| @@ -213,3 +234,7 @@ void uasm_il_bne(u32 **p, struct uasm_reloc **r, unsigned int reg1, | |||
| 213 | void uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 234 | void uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
| 214 | void uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 235 | void uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
| 215 | void uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 236 | void uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
| 237 | void uasm_il_bbit0(u32 **p, struct uasm_reloc **r, unsigned int reg, | ||
| 238 | unsigned int bit, int lid); | ||
| 239 | void uasm_il_bbit1(u32 **p, struct uasm_reloc **r, unsigned int reg, | ||
| 240 | unsigned int bit, int lid); | ||
diff --git a/arch/mips/jazz/Makefile b/arch/mips/jazz/Makefile index 5aee0c266d18..dd9d99bfcf7a 100644 --- a/arch/mips/jazz/Makefile +++ b/arch/mips/jazz/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := irq.o jazzdma.o reset.o setup.o | 5 | obj-y := irq.o jazzdma.o reset.o setup.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/jazz/Platform b/arch/mips/jazz/Platform new file mode 100644 index 000000000000..3373788acca1 --- /dev/null +++ b/arch/mips/jazz/Platform | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # Acer PICA 61, Mips Magnum 4000 and Olivetti M700. | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MACH_JAZZ) += jazz/ | ||
| 5 | cflags-$(CONFIG_MACH_JAZZ) += -I$(srctree)/arch/mips/include/asm/mach-jazz | ||
| 6 | load-$(CONFIG_MACH_JAZZ) += 0xffffffff80080000 | ||
diff --git a/arch/mips/jz4740/Kconfig b/arch/mips/jz4740/Kconfig new file mode 100644 index 000000000000..3e7141f0746c --- /dev/null +++ b/arch/mips/jz4740/Kconfig | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | choice | ||
| 2 | prompt "Machine type" | ||
| 3 | depends on MACH_JZ4740 | ||
| 4 | default JZ4740_QI_LB60 | ||
| 5 | |||
| 6 | config JZ4740_QI_LB60 | ||
| 7 | bool "Qi Hardware Ben NanoNote" | ||
| 8 | |||
| 9 | endchoice | ||
| 10 | |||
| 11 | config HAVE_PWM | ||
| 12 | bool | ||
diff --git a/arch/mips/jz4740/Makefile b/arch/mips/jz4740/Makefile new file mode 100644 index 000000000000..a604eaeb6c08 --- /dev/null +++ b/arch/mips/jz4740/Makefile | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the Ingenic JZ4740. | ||
| 3 | # | ||
| 4 | |||
| 5 | # Object file lists. | ||
| 6 | |||
| 7 | obj-y += prom.o irq.o time.o reset.o setup.o dma.o \ | ||
| 8 | gpio.o clock.o platform.o timer.o pwm.o serial.o | ||
| 9 | |||
| 10 | obj-$(CONFIG_DEBUG_FS) += clock-debugfs.o | ||
| 11 | |||
| 12 | # board specific support | ||
| 13 | |||
| 14 | obj-$(CONFIG_JZ4740_QI_LB60) += board-qi_lb60.o | ||
| 15 | |||
| 16 | # PM support | ||
| 17 | |||
| 18 | obj-$(CONFIG_PM) += pm.o | ||
| 19 | |||
| 20 | EXTRA_CFLAGS += -Werror -Wall | ||
diff --git a/arch/mips/jz4740/Platform b/arch/mips/jz4740/Platform new file mode 100644 index 000000000000..6a97230e3d05 --- /dev/null +++ b/arch/mips/jz4740/Platform | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | core-$(CONFIG_MACH_JZ4740) += arch/mips/jz4740/ | ||
| 2 | cflags-$(CONFIG_MACH_JZ4740) += -I$(srctree)/arch/mips/include/asm/mach-jz4740 | ||
| 3 | load-$(CONFIG_MACH_JZ4740) += 0xffffffff80010000 | ||
diff --git a/arch/mips/jz4740/board-qi_lb60.c b/arch/mips/jz4740/board-qi_lb60.c new file mode 100644 index 000000000000..5742bb4d78f4 --- /dev/null +++ b/arch/mips/jz4740/board-qi_lb60.c | |||
| @@ -0,0 +1,471 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/mips/jz4740/board-qi_lb60.c | ||
| 3 | * | ||
| 4 | * QI_LB60 board support | ||
| 5 | * | ||
| 6 | * Copyright (c) 2009 Qi Hardware inc., | ||
| 7 | * Author: Xiangfu Liu <xiangfu@qi-hardware.com> | ||
| 8 | * Copyright 2010, Lars-Petrer Clausen <lars@metafoo.de> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 or later | ||
| 12 | * as published by the Free Software Foundation. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/init.h> | ||
| 17 | #include <linux/gpio.h> | ||
| 18 | |||
| 19 | #include <linux/input.h> | ||
| 20 | #include <linux/gpio_keys.h> | ||
| 21 | #include <linux/input/matrix_keypad.h> | ||
| 22 | #include <linux/spi/spi.h> | ||
| 23 | #include <linux/spi/spi_gpio.h> | ||
| 24 | #include <linux/power_supply.h> | ||
| 25 | #include <linux/power/jz4740-battery.h> | ||
| 26 | |||
| 27 | #include <asm/mach-jz4740/jz4740_fb.h> | ||
| 28 | #include <asm/mach-jz4740/jz4740_mmc.h> | ||
| 29 | #include <asm/mach-jz4740/jz4740_nand.h> | ||
| 30 | |||
| 31 | #include <linux/regulator/fixed.h> | ||
| 32 | #include <linux/regulator/machine.h> | ||
| 33 | |||
| 34 | #include <linux/leds_pwm.h> | ||
| 35 | |||
| 36 | #include <asm/mach-jz4740/platform.h> | ||
| 37 | |||
| 38 | #include "clock.h" | ||
| 39 | |||
| 40 | static bool is_avt2; | ||
| 41 | |||
| 42 | /* GPIOs */ | ||
| 43 | #define QI_LB60_GPIO_SD_CD JZ_GPIO_PORTD(0) | ||
| 44 | #define QI_LB60_GPIO_SD_VCC_EN_N JZ_GPIO_PORTD(2) | ||
| 45 | |||
| 46 | #define QI_LB60_GPIO_KEYOUT(x) (JZ_GPIO_PORTC(10) + (x)) | ||
| 47 | #define QI_LB60_GPIO_KEYIN(x) (JZ_GPIO_PORTD(18) + (x)) | ||
| 48 | #define QI_LB60_GPIO_KEYIN8 JZ_GPIO_PORTD(26) | ||
| 49 | |||
| 50 | /* NAND */ | ||
| 51 | static struct nand_ecclayout qi_lb60_ecclayout_1gb = { | ||
| 52 | /* .eccbytes = 36, | ||
| 53 | .eccpos = { | ||
| 54 | 6, 7, 8, 9, 10, 11, 12, 13, | ||
| 55 | 14, 15, 16, 17, 18, 19, 20, 21, | ||
| 56 | 22, 23, 24, 25, 26, 27, 28, 29, | ||
| 57 | 30, 31, 32, 33, 34, 35, 36, 37, | ||
| 58 | 38, 39, 40, 41 | ||
| 59 | },*/ | ||
| 60 | .oobfree = { | ||
| 61 | { .offset = 2, .length = 4 }, | ||
| 62 | { .offset = 42, .length = 22 } | ||
| 63 | }, | ||
| 64 | }; | ||
| 65 | |||
| 66 | /* Early prototypes of the QI LB60 had only 1GB of NAND. | ||
| 67 | * In order to support these devices aswell the partition and ecc layout is | ||
| 68 | * initalized depending on the NAND size */ | ||
| 69 | static struct mtd_partition qi_lb60_partitions_1gb[] = { | ||
| 70 | { | ||
| 71 | .name = "NAND BOOT partition", | ||
| 72 | .offset = 0 * 0x100000, | ||
| 73 | .size = 4 * 0x100000, | ||
| 74 | }, | ||
| 75 | { | ||
| 76 | .name = "NAND KERNEL partition", | ||
| 77 | .offset = 4 * 0x100000, | ||
| 78 | .size = 4 * 0x100000, | ||
| 79 | }, | ||
| 80 | { | ||
| 81 | .name = "NAND ROOTFS partition", | ||
| 82 | .offset = 8 * 0x100000, | ||
| 83 | .size = (504 + 512) * 0x100000, | ||
| 84 | }, | ||
| 85 | }; | ||
| 86 | |||
| 87 | static struct nand_ecclayout qi_lb60_ecclayout_2gb = { | ||
| 88 | /* .eccbytes = 72, | ||
| 89 | .eccpos = { | ||
| 90 | 12, 13, 14, 15, 16, 17, 18, 19, | ||
| 91 | 20, 21, 22, 23, 24, 25, 26, 27, | ||
| 92 | 28, 29, 30, 31, 32, 33, 34, 35, | ||
| 93 | 36, 37, 38, 39, 40, 41, 42, 43, | ||
| 94 | 44, 45, 46, 47, 48, 49, 50, 51, | ||
| 95 | 52, 53, 54, 55, 56, 57, 58, 59, | ||
| 96 | 60, 61, 62, 63, 64, 65, 66, 67, | ||
| 97 | 68, 69, 70, 71, 72, 73, 74, 75, | ||
| 98 | 76, 77, 78, 79, 80, 81, 82, 83 | ||
| 99 | },*/ | ||
| 100 | .oobfree = { | ||
| 101 | { .offset = 2, .length = 10 }, | ||
| 102 | { .offset = 84, .length = 44 }, | ||
| 103 | }, | ||
| 104 | }; | ||
| 105 | |||
| 106 | static struct mtd_partition qi_lb60_partitions_2gb[] = { | ||
| 107 | { | ||
| 108 | .name = "NAND BOOT partition", | ||
| 109 | .offset = 0 * 0x100000, | ||
| 110 | .size = 4 * 0x100000, | ||
| 111 | }, | ||
| 112 | { | ||
| 113 | .name = "NAND KERNEL partition", | ||
| 114 | .offset = 4 * 0x100000, | ||
| 115 | .size = 4 * 0x100000, | ||
| 116 | }, | ||
| 117 | { | ||
| 118 | .name = "NAND ROOTFS partition", | ||
| 119 | .offset = 8 * 0x100000, | ||
| 120 | .size = (504 + 512 + 1024) * 0x100000, | ||
| 121 | }, | ||
| 122 | }; | ||
| 123 | |||
| 124 | static void qi_lb60_nand_ident(struct platform_device *pdev, | ||
| 125 | struct nand_chip *chip, struct mtd_partition **partitions, | ||
| 126 | int *num_partitions) | ||
| 127 | { | ||
| 128 | if (chip->page_shift == 12) { | ||
| 129 | chip->ecc.layout = &qi_lb60_ecclayout_2gb; | ||
| 130 | *partitions = qi_lb60_partitions_2gb; | ||
| 131 | *num_partitions = ARRAY_SIZE(qi_lb60_partitions_2gb); | ||
| 132 | } else { | ||
| 133 | chip->ecc.layout = &qi_lb60_ecclayout_1gb; | ||
| 134 | *partitions = qi_lb60_partitions_1gb; | ||
| 135 | *num_partitions = ARRAY_SIZE(qi_lb60_partitions_1gb); | ||
| 136 | } | ||
| 137 | } | ||
| 138 | |||
| 139 | static struct jz_nand_platform_data qi_lb60_nand_pdata = { | ||
| 140 | .ident_callback = qi_lb60_nand_ident, | ||
| 141 | .busy_gpio = 94, | ||
| 142 | }; | ||
| 143 | |||
| 144 | /* Keyboard*/ | ||
| 145 | |||
| 146 | #define KEY_QI_QI KEY_F13 | ||
| 147 | #define KEY_QI_UPRED KEY_RIGHTALT | ||
| 148 | #define KEY_QI_VOLUP KEY_VOLUMEUP | ||
| 149 | #define KEY_QI_VOLDOWN KEY_VOLUMEDOWN | ||
| 150 | #define KEY_QI_FN KEY_LEFTCTRL | ||
| 151 | |||
| 152 | static const uint32_t qi_lb60_keymap[] = { | ||
| 153 | KEY(0, 0, KEY_F1), /* S2 */ | ||
| 154 | KEY(0, 1, KEY_F2), /* S3 */ | ||
| 155 | KEY(0, 2, KEY_F3), /* S4 */ | ||
| 156 | KEY(0, 3, KEY_F4), /* S5 */ | ||
| 157 | KEY(0, 4, KEY_F5), /* S6 */ | ||
| 158 | KEY(0, 5, KEY_F6), /* S7 */ | ||
| 159 | KEY(0, 6, KEY_F7), /* S8 */ | ||
| 160 | |||
| 161 | KEY(1, 0, KEY_Q), /* S10 */ | ||
| 162 | KEY(1, 1, KEY_W), /* S11 */ | ||
| 163 | KEY(1, 2, KEY_E), /* S12 */ | ||
| 164 | KEY(1, 3, KEY_R), /* S13 */ | ||
| 165 | KEY(1, 4, KEY_T), /* S14 */ | ||
| 166 | KEY(1, 5, KEY_Y), /* S15 */ | ||
| 167 | KEY(1, 6, KEY_U), /* S16 */ | ||
| 168 | KEY(1, 7, KEY_I), /* S17 */ | ||
| 169 | KEY(2, 0, KEY_A), /* S18 */ | ||
| 170 | KEY(2, 1, KEY_S), /* S19 */ | ||
| 171 | KEY(2, 2, KEY_D), /* S20 */ | ||
| 172 | KEY(2, 3, KEY_F), /* S21 */ | ||
| 173 | KEY(2, 4, KEY_G), /* S22 */ | ||
| 174 | KEY(2, 5, KEY_H), /* S23 */ | ||
| 175 | KEY(2, 6, KEY_J), /* S24 */ | ||
| 176 | KEY(2, 7, KEY_K), /* S25 */ | ||
| 177 | KEY(3, 0, KEY_ESC), /* S26 */ | ||
| 178 | KEY(3, 1, KEY_Z), /* S27 */ | ||
| 179 | KEY(3, 2, KEY_X), /* S28 */ | ||
| 180 | KEY(3, 3, KEY_C), /* S29 */ | ||
| 181 | KEY(3, 4, KEY_V), /* S30 */ | ||
| 182 | KEY(3, 5, KEY_B), /* S31 */ | ||
| 183 | KEY(3, 6, KEY_N), /* S32 */ | ||
| 184 | KEY(3, 7, KEY_M), /* S33 */ | ||
| 185 | KEY(4, 0, KEY_TAB), /* S34 */ | ||
| 186 | KEY(4, 1, KEY_CAPSLOCK), /* S35 */ | ||
| 187 | KEY(4, 2, KEY_BACKSLASH), /* S36 */ | ||
| 188 | KEY(4, 3, KEY_APOSTROPHE), /* S37 */ | ||
| 189 | KEY(4, 4, KEY_COMMA), /* S38 */ | ||
| 190 | KEY(4, 5, KEY_DOT), /* S39 */ | ||
| 191 | KEY(4, 6, KEY_SLASH), /* S40 */ | ||
| 192 | KEY(4, 7, KEY_UP), /* S41 */ | ||
| 193 | KEY(5, 0, KEY_O), /* S42 */ | ||
| 194 | KEY(5, 1, KEY_L), /* S43 */ | ||
| 195 | KEY(5, 2, KEY_EQUAL), /* S44 */ | ||
| 196 | KEY(5, 3, KEY_QI_UPRED), /* S45 */ | ||
| 197 | KEY(5, 4, KEY_SPACE), /* S46 */ | ||
| 198 | KEY(5, 5, KEY_QI_QI), /* S47 */ | ||
| 199 | KEY(5, 6, KEY_RIGHTCTRL), /* S48 */ | ||
| 200 | KEY(5, 7, KEY_LEFT), /* S49 */ | ||
| 201 | KEY(6, 0, KEY_F8), /* S50 */ | ||
| 202 | KEY(6, 1, KEY_P), /* S51 */ | ||
| 203 | KEY(6, 2, KEY_BACKSPACE),/* S52 */ | ||
| 204 | KEY(6, 3, KEY_ENTER), /* S53 */ | ||
| 205 | KEY(6, 4, KEY_QI_VOLUP), /* S54 */ | ||
| 206 | KEY(6, 5, KEY_QI_VOLDOWN), /* S55 */ | ||
| 207 | KEY(6, 6, KEY_DOWN), /* S56 */ | ||
| 208 | KEY(6, 7, KEY_RIGHT), /* S57 */ | ||
| 209 | |||
| 210 | KEY(7, 0, KEY_LEFTSHIFT), /* S58 */ | ||
| 211 | KEY(7, 1, KEY_LEFTALT), /* S59 */ | ||
| 212 | KEY(7, 2, KEY_QI_FN), /* S60 */ | ||
| 213 | }; | ||
| 214 | |||
| 215 | static const struct matrix_keymap_data qi_lb60_keymap_data = { | ||
| 216 | .keymap = qi_lb60_keymap, | ||
| 217 | .keymap_size = ARRAY_SIZE(qi_lb60_keymap), | ||
| 218 | }; | ||
| 219 | |||
| 220 | static const unsigned int qi_lb60_keypad_cols[] = { | ||
| 221 | QI_LB60_GPIO_KEYOUT(0), | ||
| 222 | QI_LB60_GPIO_KEYOUT(1), | ||
| 223 | QI_LB60_GPIO_KEYOUT(2), | ||
| 224 | QI_LB60_GPIO_KEYOUT(3), | ||
| 225 | QI_LB60_GPIO_KEYOUT(4), | ||
| 226 | QI_LB60_GPIO_KEYOUT(5), | ||
| 227 | QI_LB60_GPIO_KEYOUT(6), | ||
| 228 | QI_LB60_GPIO_KEYOUT(7), | ||
| 229 | }; | ||
| 230 | |||
| 231 | static const unsigned int qi_lb60_keypad_rows[] = { | ||
| 232 | QI_LB60_GPIO_KEYIN(0), | ||
| 233 | QI_LB60_GPIO_KEYIN(1), | ||
| 234 | QI_LB60_GPIO_KEYIN(2), | ||
| 235 | QI_LB60_GPIO_KEYIN(3), | ||
| 236 | QI_LB60_GPIO_KEYIN(4), | ||
| 237 | QI_LB60_GPIO_KEYIN(5), | ||
| 238 | QI_LB60_GPIO_KEYIN(7), | ||
| 239 | QI_LB60_GPIO_KEYIN8, | ||
| 240 | }; | ||
| 241 | |||
| 242 | static struct matrix_keypad_platform_data qi_lb60_pdata = { | ||
| 243 | .keymap_data = &qi_lb60_keymap_data, | ||
| 244 | .col_gpios = qi_lb60_keypad_cols, | ||
| 245 | .row_gpios = qi_lb60_keypad_rows, | ||
| 246 | .num_col_gpios = ARRAY_SIZE(qi_lb60_keypad_cols), | ||
| 247 | .num_row_gpios = ARRAY_SIZE(qi_lb60_keypad_rows), | ||
| 248 | .col_scan_delay_us = 10, | ||
| 249 | .debounce_ms = 10, | ||
| 250 | .wakeup = 1, | ||
| 251 | .active_low = 1, | ||
| 252 | }; | ||
| 253 | |||
| 254 | static struct platform_device qi_lb60_keypad = { | ||
| 255 | .name = "matrix-keypad", | ||
| 256 | .id = -1, | ||
| 257 | .dev = { | ||
| 258 | .platform_data = &qi_lb60_pdata, | ||
| 259 | }, | ||
| 260 | }; | ||
| 261 | |||
| 262 | /* Display */ | ||
| 263 | static struct fb_videomode qi_lb60_video_modes[] = { | ||
| 264 | { | ||
| 265 | .name = "320x240", | ||
| 266 | .xres = 320, | ||
| 267 | .yres = 240, | ||
| 268 | .refresh = 30, | ||
| 269 | .left_margin = 140, | ||
| 270 | .right_margin = 273, | ||
| 271 | .upper_margin = 20, | ||
| 272 | .lower_margin = 2, | ||
| 273 | .hsync_len = 1, | ||
| 274 | .vsync_len = 1, | ||
| 275 | .sync = 0, | ||
| 276 | .vmode = FB_VMODE_NONINTERLACED, | ||
| 277 | }, | ||
| 278 | }; | ||
| 279 | |||
| 280 | static struct jz4740_fb_platform_data qi_lb60_fb_pdata = { | ||
| 281 | .width = 60, | ||
| 282 | .height = 45, | ||
| 283 | .num_modes = ARRAY_SIZE(qi_lb60_video_modes), | ||
| 284 | .modes = qi_lb60_video_modes, | ||
| 285 | .bpp = 24, | ||
| 286 | .lcd_type = JZ_LCD_TYPE_8BIT_SERIAL, | ||
| 287 | .pixclk_falling_edge = 1, | ||
| 288 | }; | ||
| 289 | |||
| 290 | struct spi_gpio_platform_data spigpio_platform_data = { | ||
| 291 | .sck = JZ_GPIO_PORTC(23), | ||
| 292 | .mosi = JZ_GPIO_PORTC(22), | ||
| 293 | .miso = -1, | ||
| 294 | .num_chipselect = 1, | ||
| 295 | }; | ||
| 296 | |||
| 297 | static struct platform_device spigpio_device = { | ||
| 298 | .name = "spi_gpio", | ||
| 299 | .id = 1, | ||
| 300 | .dev = { | ||
| 301 | .platform_data = &spigpio_platform_data, | ||
| 302 | }, | ||
| 303 | }; | ||
| 304 | |||
| 305 | static struct spi_board_info qi_lb60_spi_board_info[] = { | ||
| 306 | { | ||
| 307 | .modalias = "ili8960", | ||
| 308 | .controller_data = (void *)JZ_GPIO_PORTC(21), | ||
| 309 | .chip_select = 0, | ||
| 310 | .bus_num = 1, | ||
| 311 | .max_speed_hz = 30 * 1000, | ||
| 312 | .mode = SPI_3WIRE, | ||
| 313 | }, | ||
| 314 | }; | ||
| 315 | |||
| 316 | /* Battery */ | ||
| 317 | static struct jz_battery_platform_data qi_lb60_battery_pdata = { | ||
| 318 | .gpio_charge = JZ_GPIO_PORTC(27), | ||
| 319 | .gpio_charge_active_low = 1, | ||
| 320 | .info = { | ||
| 321 | .name = "battery", | ||
| 322 | .technology = POWER_SUPPLY_TECHNOLOGY_LIPO, | ||
| 323 | .voltage_max_design = 4200000, | ||
| 324 | .voltage_min_design = 3600000, | ||
| 325 | }, | ||
| 326 | }; | ||
| 327 | |||
| 328 | /* GPIO Key: power */ | ||
| 329 | static struct gpio_keys_button qi_lb60_gpio_keys_buttons[] = { | ||
| 330 | [0] = { | ||
| 331 | .code = KEY_POWER, | ||
| 332 | .gpio = JZ_GPIO_PORTD(29), | ||
| 333 | .active_low = 1, | ||
| 334 | .desc = "Power", | ||
| 335 | .wakeup = 1, | ||
| 336 | }, | ||
| 337 | }; | ||
| 338 | |||
| 339 | static struct gpio_keys_platform_data qi_lb60_gpio_keys_data = { | ||
| 340 | .nbuttons = ARRAY_SIZE(qi_lb60_gpio_keys_buttons), | ||
| 341 | .buttons = qi_lb60_gpio_keys_buttons, | ||
| 342 | }; | ||
| 343 | |||
| 344 | static struct platform_device qi_lb60_gpio_keys = { | ||
| 345 | .name = "gpio-keys", | ||
| 346 | .id = -1, | ||
| 347 | .dev = { | ||
| 348 | .platform_data = &qi_lb60_gpio_keys_data, | ||
| 349 | } | ||
| 350 | }; | ||
| 351 | |||
| 352 | static struct jz4740_mmc_platform_data qi_lb60_mmc_pdata = { | ||
| 353 | .gpio_card_detect = QI_LB60_GPIO_SD_CD, | ||
| 354 | .gpio_read_only = -1, | ||
| 355 | .gpio_power = QI_LB60_GPIO_SD_VCC_EN_N, | ||
| 356 | .power_active_low = 1, | ||
| 357 | }; | ||
| 358 | |||
| 359 | /* OHCI */ | ||
| 360 | static struct regulator_consumer_supply avt2_usb_regulator_consumer = | ||
| 361 | REGULATOR_SUPPLY("vbus", "jz4740-ohci"); | ||
| 362 | |||
| 363 | static struct regulator_init_data avt2_usb_regulator_init_data = { | ||
| 364 | .num_consumer_supplies = 1, | ||
| 365 | .consumer_supplies = &avt2_usb_regulator_consumer, | ||
| 366 | .constraints = { | ||
| 367 | .name = "USB power", | ||
| 368 | .min_uV = 5000000, | ||
| 369 | .max_uV = 5000000, | ||
| 370 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 371 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
| 372 | }, | ||
| 373 | }; | ||
| 374 | |||
| 375 | static struct fixed_voltage_config avt2_usb_regulator_data = { | ||
| 376 | .supply_name = "USB power", | ||
| 377 | .microvolts = 5000000, | ||
| 378 | .gpio = JZ_GPIO_PORTB(17), | ||
| 379 | .init_data = &avt2_usb_regulator_init_data, | ||
| 380 | }; | ||
| 381 | |||
| 382 | static struct platform_device avt2_usb_regulator_device = { | ||
| 383 | .name = "reg-fixed-voltage", | ||
| 384 | .id = -1, | ||
| 385 | .dev = { | ||
| 386 | .platform_data = &avt2_usb_regulator_data, | ||
| 387 | } | ||
| 388 | }; | ||
| 389 | |||
| 390 | /* beeper */ | ||
| 391 | static struct platform_device qi_lb60_pwm_beeper = { | ||
| 392 | .name = "pwm-beeper", | ||
| 393 | .id = -1, | ||
| 394 | .dev = { | ||
| 395 | .platform_data = (void *)4, | ||
| 396 | }, | ||
| 397 | }; | ||
| 398 | |||
| 399 | static struct platform_device *jz_platform_devices[] __initdata = { | ||
| 400 | &jz4740_udc_device, | ||
| 401 | &jz4740_mmc_device, | ||
| 402 | &jz4740_nand_device, | ||
| 403 | &qi_lb60_keypad, | ||
| 404 | &spigpio_device, | ||
| 405 | &jz4740_framebuffer_device, | ||
| 406 | &jz4740_pcm_device, | ||
| 407 | &jz4740_i2s_device, | ||
| 408 | &jz4740_codec_device, | ||
| 409 | &jz4740_rtc_device, | ||
| 410 | &jz4740_adc_device, | ||
| 411 | &qi_lb60_gpio_keys, | ||
| 412 | &qi_lb60_pwm_beeper, | ||
| 413 | }; | ||
| 414 | |||
| 415 | static void __init board_gpio_setup(void) | ||
| 416 | { | ||
| 417 | /* We only need to enable/disable pullup here for pins used in generic | ||
| 418 | * drivers. Everything else is done by the drivers themselfs. */ | ||
| 419 | jz_gpio_disable_pullup(QI_LB60_GPIO_SD_VCC_EN_N); | ||
| 420 | jz_gpio_disable_pullup(QI_LB60_GPIO_SD_CD); | ||
| 421 | } | ||
| 422 | |||
| 423 | static int __init qi_lb60_init_platform_devices(void) | ||
| 424 | { | ||
| 425 | jz4740_framebuffer_device.dev.platform_data = &qi_lb60_fb_pdata; | ||
| 426 | jz4740_nand_device.dev.platform_data = &qi_lb60_nand_pdata; | ||
| 427 | jz4740_adc_device.dev.platform_data = &qi_lb60_battery_pdata; | ||
| 428 | jz4740_mmc_device.dev.platform_data = &qi_lb60_mmc_pdata; | ||
| 429 | |||
| 430 | jz4740_serial_device_register(); | ||
| 431 | |||
| 432 | spi_register_board_info(qi_lb60_spi_board_info, | ||
| 433 | ARRAY_SIZE(qi_lb60_spi_board_info)); | ||
| 434 | |||
| 435 | if (is_avt2) { | ||
| 436 | platform_device_register(&avt2_usb_regulator_device); | ||
| 437 | platform_device_register(&jz4740_usb_ohci_device); | ||
| 438 | } | ||
| 439 | |||
| 440 | return platform_add_devices(jz_platform_devices, | ||
| 441 | ARRAY_SIZE(jz_platform_devices)); | ||
| 442 | |||
| 443 | } | ||
| 444 | |||
| 445 | struct jz4740_clock_board_data jz4740_clock_bdata = { | ||
| 446 | .ext_rate = 12000000, | ||
| 447 | .rtc_rate = 32768, | ||
| 448 | }; | ||
| 449 | |||
| 450 | static __init int board_avt2(char *str) | ||
| 451 | { | ||
| 452 | qi_lb60_mmc_pdata.card_detect_active_low = 1; | ||
| 453 | is_avt2 = true; | ||
| 454 | |||
| 455 | return 1; | ||
| 456 | } | ||
| 457 | __setup("avt2", board_avt2); | ||
| 458 | |||
| 459 | static int __init qi_lb60_board_setup(void) | ||
| 460 | { | ||
| 461 | printk(KERN_INFO "Qi Hardware JZ4740 QI %s setup\n", | ||
| 462 | is_avt2 ? "AVT2" : "LB60"); | ||
| 463 | |||
| 464 | board_gpio_setup(); | ||
| 465 | |||
| 466 | if (qi_lb60_init_platform_devices()) | ||
| 467 | panic("Failed to initalize platform devices\n"); | ||
| 468 | |||
| 469 | return 0; | ||
| 470 | } | ||
| 471 | arch_initcall(qi_lb60_board_setup); | ||
diff --git a/arch/mips/jz4740/clock-debugfs.c b/arch/mips/jz4740/clock-debugfs.c new file mode 100644 index 000000000000..330a0f2bf17b --- /dev/null +++ b/arch/mips/jz4740/clock-debugfs.c | |||
| @@ -0,0 +1,109 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC clock support debugfs entries | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/clk.h> | ||
| 19 | #include <linux/err.h> | ||
| 20 | |||
| 21 | #include <linux/debugfs.h> | ||
| 22 | #include <linux/uaccess.h> | ||
| 23 | |||
| 24 | #include <asm/mach-jz4740/clock.h> | ||
| 25 | #include "clock.h" | ||
| 26 | |||
| 27 | static struct dentry *jz4740_clock_debugfs; | ||
| 28 | |||
| 29 | static int jz4740_clock_debugfs_show_enabled(void *data, uint64_t *value) | ||
| 30 | { | ||
| 31 | struct clk *clk = data; | ||
| 32 | *value = clk_is_enabled(clk); | ||
| 33 | |||
| 34 | return 0; | ||
| 35 | } | ||
| 36 | |||
| 37 | static int jz4740_clock_debugfs_set_enabled(void *data, uint64_t value) | ||
| 38 | { | ||
| 39 | struct clk *clk = data; | ||
| 40 | |||
| 41 | if (value) | ||
| 42 | return clk_enable(clk); | ||
| 43 | else | ||
| 44 | clk_disable(clk); | ||
| 45 | |||
| 46 | return 0; | ||
| 47 | } | ||
| 48 | |||
| 49 | DEFINE_SIMPLE_ATTRIBUTE(jz4740_clock_debugfs_ops_enabled, | ||
| 50 | jz4740_clock_debugfs_show_enabled, | ||
| 51 | jz4740_clock_debugfs_set_enabled, | ||
| 52 | "%llu\n"); | ||
| 53 | |||
| 54 | static int jz4740_clock_debugfs_show_rate(void *data, uint64_t *value) | ||
| 55 | { | ||
| 56 | struct clk *clk = data; | ||
| 57 | *value = clk_get_rate(clk); | ||
| 58 | |||
| 59 | return 0; | ||
| 60 | } | ||
| 61 | |||
| 62 | DEFINE_SIMPLE_ATTRIBUTE(jz4740_clock_debugfs_ops_rate, | ||
| 63 | jz4740_clock_debugfs_show_rate, | ||
| 64 | NULL, | ||
| 65 | "%llu\n"); | ||
| 66 | |||
| 67 | void jz4740_clock_debugfs_add_clk(struct clk *clk) | ||
| 68 | { | ||
| 69 | if (!jz4740_clock_debugfs) | ||
| 70 | return; | ||
| 71 | |||
| 72 | clk->debugfs_entry = debugfs_create_dir(clk->name, jz4740_clock_debugfs); | ||
| 73 | debugfs_create_file("rate", S_IWUGO | S_IRUGO, clk->debugfs_entry, clk, | ||
| 74 | &jz4740_clock_debugfs_ops_rate); | ||
| 75 | debugfs_create_file("enabled", S_IRUGO, clk->debugfs_entry, clk, | ||
| 76 | &jz4740_clock_debugfs_ops_enabled); | ||
| 77 | |||
| 78 | if (clk->parent) { | ||
| 79 | char parent_path[100]; | ||
| 80 | snprintf(parent_path, 100, "../%s", clk->parent->name); | ||
| 81 | clk->debugfs_parent_entry = debugfs_create_symlink("parent", | ||
| 82 | clk->debugfs_entry, | ||
| 83 | parent_path); | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | /* TODO: Locking */ | ||
| 88 | void jz4740_clock_debugfs_update_parent(struct clk *clk) | ||
| 89 | { | ||
| 90 | if (clk->debugfs_parent_entry) | ||
| 91 | debugfs_remove(clk->debugfs_parent_entry); | ||
| 92 | |||
| 93 | if (clk->parent) { | ||
| 94 | char parent_path[100]; | ||
| 95 | snprintf(parent_path, 100, "../%s", clk->parent->name); | ||
| 96 | clk->debugfs_parent_entry = debugfs_create_symlink("parent", | ||
| 97 | clk->debugfs_entry, | ||
| 98 | parent_path); | ||
| 99 | } else { | ||
| 100 | clk->debugfs_parent_entry = NULL; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | |||
| 104 | void jz4740_clock_debugfs_init(void) | ||
| 105 | { | ||
| 106 | jz4740_clock_debugfs = debugfs_create_dir("jz4740-clock", NULL); | ||
| 107 | if (IS_ERR(jz4740_clock_debugfs)) | ||
| 108 | jz4740_clock_debugfs = NULL; | ||
| 109 | } | ||
diff --git a/arch/mips/jz4740/clock.c b/arch/mips/jz4740/clock.c new file mode 100644 index 000000000000..118a8a5562dd --- /dev/null +++ b/arch/mips/jz4740/clock.c | |||
| @@ -0,0 +1,924 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC clock support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/errno.h> | ||
| 18 | #include <linux/clk.h> | ||
| 19 | #include <linux/spinlock.h> | ||
| 20 | #include <linux/io.h> | ||
| 21 | #include <linux/module.h> | ||
| 22 | #include <linux/list.h> | ||
| 23 | #include <linux/err.h> | ||
| 24 | |||
| 25 | #include <asm/mach-jz4740/clock.h> | ||
| 26 | #include <asm/mach-jz4740/base.h> | ||
| 27 | |||
| 28 | #include "clock.h" | ||
| 29 | |||
| 30 | #define JZ_REG_CLOCK_CTRL 0x00 | ||
| 31 | #define JZ_REG_CLOCK_LOW_POWER 0x04 | ||
| 32 | #define JZ_REG_CLOCK_PLL 0x10 | ||
| 33 | #define JZ_REG_CLOCK_GATE 0x20 | ||
| 34 | #define JZ_REG_CLOCK_SLEEP_CTRL 0x24 | ||
| 35 | #define JZ_REG_CLOCK_I2S 0x60 | ||
| 36 | #define JZ_REG_CLOCK_LCD 0x64 | ||
| 37 | #define JZ_REG_CLOCK_MMC 0x68 | ||
| 38 | #define JZ_REG_CLOCK_UHC 0x6C | ||
| 39 | #define JZ_REG_CLOCK_SPI 0x74 | ||
| 40 | |||
| 41 | #define JZ_CLOCK_CTRL_I2S_SRC_PLL BIT(31) | ||
| 42 | #define JZ_CLOCK_CTRL_KO_ENABLE BIT(30) | ||
| 43 | #define JZ_CLOCK_CTRL_UDC_SRC_PLL BIT(29) | ||
| 44 | #define JZ_CLOCK_CTRL_UDIV_MASK 0x1f800000 | ||
| 45 | #define JZ_CLOCK_CTRL_CHANGE_ENABLE BIT(22) | ||
| 46 | #define JZ_CLOCK_CTRL_PLL_HALF BIT(21) | ||
| 47 | #define JZ_CLOCK_CTRL_LDIV_MASK 0x001f0000 | ||
| 48 | #define JZ_CLOCK_CTRL_UDIV_OFFSET 23 | ||
| 49 | #define JZ_CLOCK_CTRL_LDIV_OFFSET 16 | ||
| 50 | #define JZ_CLOCK_CTRL_MDIV_OFFSET 12 | ||
| 51 | #define JZ_CLOCK_CTRL_PDIV_OFFSET 8 | ||
| 52 | #define JZ_CLOCK_CTRL_HDIV_OFFSET 4 | ||
| 53 | #define JZ_CLOCK_CTRL_CDIV_OFFSET 0 | ||
| 54 | |||
| 55 | #define JZ_CLOCK_GATE_UART0 BIT(0) | ||
| 56 | #define JZ_CLOCK_GATE_TCU BIT(1) | ||
| 57 | #define JZ_CLOCK_GATE_RTC BIT(2) | ||
| 58 | #define JZ_CLOCK_GATE_I2C BIT(3) | ||
| 59 | #define JZ_CLOCK_GATE_SPI BIT(4) | ||
| 60 | #define JZ_CLOCK_GATE_AIC BIT(5) | ||
| 61 | #define JZ_CLOCK_GATE_I2S BIT(6) | ||
| 62 | #define JZ_CLOCK_GATE_MMC BIT(7) | ||
| 63 | #define JZ_CLOCK_GATE_ADC BIT(8) | ||
| 64 | #define JZ_CLOCK_GATE_CIM BIT(9) | ||
| 65 | #define JZ_CLOCK_GATE_LCD BIT(10) | ||
| 66 | #define JZ_CLOCK_GATE_UDC BIT(11) | ||
| 67 | #define JZ_CLOCK_GATE_DMAC BIT(12) | ||
| 68 | #define JZ_CLOCK_GATE_IPU BIT(13) | ||
| 69 | #define JZ_CLOCK_GATE_UHC BIT(14) | ||
| 70 | #define JZ_CLOCK_GATE_UART1 BIT(15) | ||
| 71 | |||
| 72 | #define JZ_CLOCK_I2S_DIV_MASK 0x01ff | ||
| 73 | |||
| 74 | #define JZ_CLOCK_LCD_DIV_MASK 0x01ff | ||
| 75 | |||
| 76 | #define JZ_CLOCK_MMC_DIV_MASK 0x001f | ||
| 77 | |||
| 78 | #define JZ_CLOCK_UHC_DIV_MASK 0x000f | ||
| 79 | |||
| 80 | #define JZ_CLOCK_SPI_SRC_PLL BIT(31) | ||
| 81 | #define JZ_CLOCK_SPI_DIV_MASK 0x000f | ||
| 82 | |||
| 83 | #define JZ_CLOCK_PLL_M_MASK 0x01ff | ||
| 84 | #define JZ_CLOCK_PLL_N_MASK 0x001f | ||
| 85 | #define JZ_CLOCK_PLL_OD_MASK 0x0003 | ||
| 86 | #define JZ_CLOCK_PLL_STABLE BIT(10) | ||
| 87 | #define JZ_CLOCK_PLL_BYPASS BIT(9) | ||
| 88 | #define JZ_CLOCK_PLL_ENABLED BIT(8) | ||
| 89 | #define JZ_CLOCK_PLL_STABLIZE_MASK 0x000f | ||
| 90 | #define JZ_CLOCK_PLL_M_OFFSET 23 | ||
| 91 | #define JZ_CLOCK_PLL_N_OFFSET 18 | ||
| 92 | #define JZ_CLOCK_PLL_OD_OFFSET 16 | ||
| 93 | |||
| 94 | #define JZ_CLOCK_LOW_POWER_MODE_DOZE BIT(2) | ||
| 95 | #define JZ_CLOCK_LOW_POWER_MODE_SLEEP BIT(0) | ||
| 96 | |||
| 97 | #define JZ_CLOCK_SLEEP_CTRL_SUSPEND_UHC BIT(7) | ||
| 98 | #define JZ_CLOCK_SLEEP_CTRL_ENABLE_UDC BIT(6) | ||
| 99 | |||
| 100 | static void __iomem *jz_clock_base; | ||
| 101 | static spinlock_t jz_clock_lock; | ||
| 102 | static LIST_HEAD(jz_clocks); | ||
| 103 | |||
| 104 | struct main_clk { | ||
| 105 | struct clk clk; | ||
| 106 | uint32_t div_offset; | ||
| 107 | }; | ||
| 108 | |||
| 109 | struct divided_clk { | ||
| 110 | struct clk clk; | ||
| 111 | uint32_t reg; | ||
| 112 | uint32_t mask; | ||
| 113 | }; | ||
| 114 | |||
| 115 | struct static_clk { | ||
| 116 | struct clk clk; | ||
| 117 | unsigned long rate; | ||
| 118 | }; | ||
| 119 | |||
| 120 | static uint32_t jz_clk_reg_read(int reg) | ||
| 121 | { | ||
| 122 | return readl(jz_clock_base + reg); | ||
| 123 | } | ||
| 124 | |||
| 125 | static void jz_clk_reg_write_mask(int reg, uint32_t val, uint32_t mask) | ||
| 126 | { | ||
| 127 | uint32_t val2; | ||
| 128 | |||
| 129 | spin_lock(&jz_clock_lock); | ||
| 130 | val2 = readl(jz_clock_base + reg); | ||
| 131 | val2 &= ~mask; | ||
| 132 | val2 |= val; | ||
| 133 | writel(val2, jz_clock_base + reg); | ||
| 134 | spin_unlock(&jz_clock_lock); | ||
| 135 | } | ||
| 136 | |||
| 137 | static void jz_clk_reg_set_bits(int reg, uint32_t mask) | ||
| 138 | { | ||
| 139 | uint32_t val; | ||
| 140 | |||
| 141 | spin_lock(&jz_clock_lock); | ||
| 142 | val = readl(jz_clock_base + reg); | ||
| 143 | val |= mask; | ||
| 144 | writel(val, jz_clock_base + reg); | ||
| 145 | spin_unlock(&jz_clock_lock); | ||
| 146 | } | ||
| 147 | |||
| 148 | static void jz_clk_reg_clear_bits(int reg, uint32_t mask) | ||
| 149 | { | ||
| 150 | uint32_t val; | ||
| 151 | |||
| 152 | spin_lock(&jz_clock_lock); | ||
| 153 | val = readl(jz_clock_base + reg); | ||
| 154 | val &= ~mask; | ||
| 155 | writel(val, jz_clock_base + reg); | ||
| 156 | spin_unlock(&jz_clock_lock); | ||
| 157 | } | ||
| 158 | |||
| 159 | static int jz_clk_enable_gating(struct clk *clk) | ||
| 160 | { | ||
| 161 | if (clk->gate_bit == JZ4740_CLK_NOT_GATED) | ||
| 162 | return -EINVAL; | ||
| 163 | |||
| 164 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_GATE, clk->gate_bit); | ||
| 165 | return 0; | ||
| 166 | } | ||
| 167 | |||
| 168 | static int jz_clk_disable_gating(struct clk *clk) | ||
| 169 | { | ||
| 170 | if (clk->gate_bit == JZ4740_CLK_NOT_GATED) | ||
| 171 | return -EINVAL; | ||
| 172 | |||
| 173 | jz_clk_reg_set_bits(JZ_REG_CLOCK_GATE, clk->gate_bit); | ||
| 174 | return 0; | ||
| 175 | } | ||
| 176 | |||
| 177 | static int jz_clk_is_enabled_gating(struct clk *clk) | ||
| 178 | { | ||
| 179 | if (clk->gate_bit == JZ4740_CLK_NOT_GATED) | ||
| 180 | return 1; | ||
| 181 | |||
| 182 | return !(jz_clk_reg_read(JZ_REG_CLOCK_GATE) & clk->gate_bit); | ||
| 183 | } | ||
| 184 | |||
| 185 | static unsigned long jz_clk_static_get_rate(struct clk *clk) | ||
| 186 | { | ||
| 187 | return ((struct static_clk *)clk)->rate; | ||
| 188 | } | ||
| 189 | |||
| 190 | static int jz_clk_ko_enable(struct clk *clk) | ||
| 191 | { | ||
| 192 | jz_clk_reg_set_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_KO_ENABLE); | ||
| 193 | return 0; | ||
| 194 | } | ||
| 195 | |||
| 196 | static int jz_clk_ko_disable(struct clk *clk) | ||
| 197 | { | ||
| 198 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_KO_ENABLE); | ||
| 199 | return 0; | ||
| 200 | } | ||
| 201 | |||
| 202 | static int jz_clk_ko_is_enabled(struct clk *clk) | ||
| 203 | { | ||
| 204 | return !!(jz_clk_reg_read(JZ_REG_CLOCK_CTRL) & JZ_CLOCK_CTRL_KO_ENABLE); | ||
| 205 | } | ||
| 206 | |||
| 207 | static const int pllno[] = {1, 2, 2, 4}; | ||
| 208 | |||
| 209 | static unsigned long jz_clk_pll_get_rate(struct clk *clk) | ||
| 210 | { | ||
| 211 | uint32_t val; | ||
| 212 | int m; | ||
| 213 | int n; | ||
| 214 | int od; | ||
| 215 | |||
| 216 | val = jz_clk_reg_read(JZ_REG_CLOCK_PLL); | ||
| 217 | |||
| 218 | if (val & JZ_CLOCK_PLL_BYPASS) | ||
| 219 | return clk_get_rate(clk->parent); | ||
| 220 | |||
| 221 | m = ((val >> 23) & 0x1ff) + 2; | ||
| 222 | n = ((val >> 18) & 0x1f) + 2; | ||
| 223 | od = (val >> 16) & 0x3; | ||
| 224 | |||
| 225 | return ((clk_get_rate(clk->parent) / n) * m) / pllno[od]; | ||
| 226 | } | ||
| 227 | |||
| 228 | static unsigned long jz_clk_pll_half_get_rate(struct clk *clk) | ||
| 229 | { | ||
| 230 | uint32_t reg; | ||
| 231 | |||
| 232 | reg = jz_clk_reg_read(JZ_REG_CLOCK_CTRL); | ||
| 233 | if (reg & JZ_CLOCK_CTRL_PLL_HALF) | ||
| 234 | return jz_clk_pll_get_rate(clk->parent); | ||
| 235 | return jz_clk_pll_get_rate(clk->parent) >> 1; | ||
| 236 | } | ||
| 237 | |||
| 238 | static const int jz_clk_main_divs[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32}; | ||
| 239 | |||
| 240 | static unsigned long jz_clk_main_round_rate(struct clk *clk, unsigned long rate) | ||
| 241 | { | ||
| 242 | unsigned long parent_rate = jz_clk_pll_get_rate(clk->parent); | ||
| 243 | int div; | ||
| 244 | |||
| 245 | div = parent_rate / rate; | ||
| 246 | if (div > 32) | ||
| 247 | return parent_rate / 32; | ||
| 248 | else if (div < 1) | ||
| 249 | return parent_rate; | ||
| 250 | |||
| 251 | div &= (0x3 << (ffs(div) - 1)); | ||
| 252 | |||
| 253 | return parent_rate / div; | ||
| 254 | } | ||
| 255 | |||
| 256 | static unsigned long jz_clk_main_get_rate(struct clk *clk) | ||
| 257 | { | ||
| 258 | struct main_clk *mclk = (struct main_clk *)clk; | ||
| 259 | uint32_t div; | ||
| 260 | |||
| 261 | div = jz_clk_reg_read(JZ_REG_CLOCK_CTRL); | ||
| 262 | |||
| 263 | div >>= mclk->div_offset; | ||
| 264 | div &= 0xf; | ||
| 265 | |||
| 266 | if (div >= ARRAY_SIZE(jz_clk_main_divs)) | ||
| 267 | div = ARRAY_SIZE(jz_clk_main_divs) - 1; | ||
| 268 | |||
| 269 | return jz_clk_pll_get_rate(clk->parent) / jz_clk_main_divs[div]; | ||
| 270 | } | ||
| 271 | |||
| 272 | static int jz_clk_main_set_rate(struct clk *clk, unsigned long rate) | ||
| 273 | { | ||
| 274 | struct main_clk *mclk = (struct main_clk *)clk; | ||
| 275 | int i; | ||
| 276 | int div; | ||
| 277 | unsigned long parent_rate = jz_clk_pll_get_rate(clk->parent); | ||
| 278 | |||
| 279 | rate = jz_clk_main_round_rate(clk, rate); | ||
| 280 | |||
| 281 | div = parent_rate / rate; | ||
| 282 | |||
| 283 | i = (ffs(div) - 1) << 1; | ||
| 284 | if (i > 0 && !(div & BIT(i-1))) | ||
| 285 | i -= 1; | ||
| 286 | |||
| 287 | jz_clk_reg_write_mask(JZ_REG_CLOCK_CTRL, i << mclk->div_offset, | ||
| 288 | 0xf << mclk->div_offset); | ||
| 289 | |||
| 290 | return 0; | ||
| 291 | } | ||
| 292 | |||
| 293 | static struct clk_ops jz_clk_static_ops = { | ||
| 294 | .get_rate = jz_clk_static_get_rate, | ||
| 295 | .enable = jz_clk_enable_gating, | ||
| 296 | .disable = jz_clk_disable_gating, | ||
| 297 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 298 | }; | ||
| 299 | |||
| 300 | static struct static_clk jz_clk_ext = { | ||
| 301 | .clk = { | ||
| 302 | .name = "ext", | ||
| 303 | .gate_bit = JZ4740_CLK_NOT_GATED, | ||
| 304 | .ops = &jz_clk_static_ops, | ||
| 305 | }, | ||
| 306 | }; | ||
| 307 | |||
| 308 | static struct clk_ops jz_clk_pll_ops = { | ||
| 309 | .get_rate = jz_clk_pll_get_rate, | ||
| 310 | }; | ||
| 311 | |||
| 312 | static struct clk jz_clk_pll = { | ||
| 313 | .name = "pll", | ||
| 314 | .parent = &jz_clk_ext.clk, | ||
| 315 | .ops = &jz_clk_pll_ops, | ||
| 316 | }; | ||
| 317 | |||
| 318 | static struct clk_ops jz_clk_pll_half_ops = { | ||
| 319 | .get_rate = jz_clk_pll_half_get_rate, | ||
| 320 | }; | ||
| 321 | |||
| 322 | static struct clk jz_clk_pll_half = { | ||
| 323 | .name = "pll half", | ||
| 324 | .parent = &jz_clk_pll, | ||
| 325 | .ops = &jz_clk_pll_half_ops, | ||
| 326 | }; | ||
| 327 | |||
| 328 | static const struct clk_ops jz_clk_main_ops = { | ||
| 329 | .get_rate = jz_clk_main_get_rate, | ||
| 330 | .set_rate = jz_clk_main_set_rate, | ||
| 331 | .round_rate = jz_clk_main_round_rate, | ||
| 332 | }; | ||
| 333 | |||
| 334 | static struct main_clk jz_clk_cpu = { | ||
| 335 | .clk = { | ||
| 336 | .name = "cclk", | ||
| 337 | .parent = &jz_clk_pll, | ||
| 338 | .ops = &jz_clk_main_ops, | ||
| 339 | }, | ||
| 340 | .div_offset = JZ_CLOCK_CTRL_CDIV_OFFSET, | ||
| 341 | }; | ||
| 342 | |||
| 343 | static struct main_clk jz_clk_memory = { | ||
| 344 | .clk = { | ||
| 345 | .name = "mclk", | ||
| 346 | .parent = &jz_clk_pll, | ||
| 347 | .ops = &jz_clk_main_ops, | ||
| 348 | }, | ||
| 349 | .div_offset = JZ_CLOCK_CTRL_MDIV_OFFSET, | ||
| 350 | }; | ||
| 351 | |||
| 352 | static struct main_clk jz_clk_high_speed_peripheral = { | ||
| 353 | .clk = { | ||
| 354 | .name = "hclk", | ||
| 355 | .parent = &jz_clk_pll, | ||
| 356 | .ops = &jz_clk_main_ops, | ||
| 357 | }, | ||
| 358 | .div_offset = JZ_CLOCK_CTRL_HDIV_OFFSET, | ||
| 359 | }; | ||
| 360 | |||
| 361 | |||
| 362 | static struct main_clk jz_clk_low_speed_peripheral = { | ||
| 363 | .clk = { | ||
| 364 | .name = "pclk", | ||
| 365 | .parent = &jz_clk_pll, | ||
| 366 | .ops = &jz_clk_main_ops, | ||
| 367 | }, | ||
| 368 | .div_offset = JZ_CLOCK_CTRL_PDIV_OFFSET, | ||
| 369 | }; | ||
| 370 | |||
| 371 | static const struct clk_ops jz_clk_ko_ops = { | ||
| 372 | .enable = jz_clk_ko_enable, | ||
| 373 | .disable = jz_clk_ko_disable, | ||
| 374 | .is_enabled = jz_clk_ko_is_enabled, | ||
| 375 | }; | ||
| 376 | |||
| 377 | static struct clk jz_clk_ko = { | ||
| 378 | .name = "cko", | ||
| 379 | .parent = &jz_clk_memory.clk, | ||
| 380 | .ops = &jz_clk_ko_ops, | ||
| 381 | }; | ||
| 382 | |||
| 383 | static int jz_clk_spi_set_parent(struct clk *clk, struct clk *parent) | ||
| 384 | { | ||
| 385 | if (parent == &jz_clk_pll) | ||
| 386 | jz_clk_reg_set_bits(JZ_CLOCK_SPI_SRC_PLL, JZ_REG_CLOCK_SPI); | ||
| 387 | else if (parent == &jz_clk_ext.clk) | ||
| 388 | jz_clk_reg_clear_bits(JZ_CLOCK_SPI_SRC_PLL, JZ_REG_CLOCK_SPI); | ||
| 389 | else | ||
| 390 | return -EINVAL; | ||
| 391 | |||
| 392 | clk->parent = parent; | ||
| 393 | |||
| 394 | return 0; | ||
| 395 | } | ||
| 396 | |||
| 397 | static int jz_clk_i2s_set_parent(struct clk *clk, struct clk *parent) | ||
| 398 | { | ||
| 399 | if (parent == &jz_clk_pll_half) | ||
| 400 | jz_clk_reg_set_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_I2S_SRC_PLL); | ||
| 401 | else if (parent == &jz_clk_ext.clk) | ||
| 402 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_I2S_SRC_PLL); | ||
| 403 | else | ||
| 404 | return -EINVAL; | ||
| 405 | |||
| 406 | clk->parent = parent; | ||
| 407 | |||
| 408 | return 0; | ||
| 409 | } | ||
| 410 | |||
| 411 | static int jz_clk_udc_enable(struct clk *clk) | ||
| 412 | { | ||
| 413 | jz_clk_reg_set_bits(JZ_REG_CLOCK_SLEEP_CTRL, | ||
| 414 | JZ_CLOCK_SLEEP_CTRL_ENABLE_UDC); | ||
| 415 | |||
| 416 | return 0; | ||
| 417 | } | ||
| 418 | |||
| 419 | static int jz_clk_udc_disable(struct clk *clk) | ||
| 420 | { | ||
| 421 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_SLEEP_CTRL, | ||
| 422 | JZ_CLOCK_SLEEP_CTRL_ENABLE_UDC); | ||
| 423 | |||
| 424 | return 0; | ||
| 425 | } | ||
| 426 | |||
| 427 | static int jz_clk_udc_is_enabled(struct clk *clk) | ||
| 428 | { | ||
| 429 | return !!(jz_clk_reg_read(JZ_REG_CLOCK_SLEEP_CTRL) & | ||
| 430 | JZ_CLOCK_SLEEP_CTRL_ENABLE_UDC); | ||
| 431 | } | ||
| 432 | |||
| 433 | static int jz_clk_udc_set_parent(struct clk *clk, struct clk *parent) | ||
| 434 | { | ||
| 435 | if (parent == &jz_clk_pll_half) | ||
| 436 | jz_clk_reg_set_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_UDC_SRC_PLL); | ||
| 437 | else if (parent == &jz_clk_ext.clk) | ||
| 438 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_CTRL, JZ_CLOCK_CTRL_UDC_SRC_PLL); | ||
| 439 | else | ||
| 440 | return -EINVAL; | ||
| 441 | |||
| 442 | clk->parent = parent; | ||
| 443 | |||
| 444 | return 0; | ||
| 445 | } | ||
| 446 | |||
| 447 | static int jz_clk_udc_set_rate(struct clk *clk, unsigned long rate) | ||
| 448 | { | ||
| 449 | int div; | ||
| 450 | |||
| 451 | if (clk->parent == &jz_clk_ext.clk) | ||
| 452 | return -EINVAL; | ||
| 453 | |||
| 454 | div = clk_get_rate(clk->parent) / rate - 1; | ||
| 455 | |||
| 456 | if (div < 0) | ||
| 457 | div = 0; | ||
| 458 | else if (div > 63) | ||
| 459 | div = 63; | ||
| 460 | |||
| 461 | jz_clk_reg_write_mask(JZ_REG_CLOCK_CTRL, div << JZ_CLOCK_CTRL_UDIV_OFFSET, | ||
| 462 | JZ_CLOCK_CTRL_UDIV_MASK); | ||
| 463 | return 0; | ||
| 464 | } | ||
| 465 | |||
| 466 | static unsigned long jz_clk_udc_get_rate(struct clk *clk) | ||
| 467 | { | ||
| 468 | int div; | ||
| 469 | |||
| 470 | if (clk->parent == &jz_clk_ext.clk) | ||
| 471 | return clk_get_rate(clk->parent); | ||
| 472 | |||
| 473 | div = (jz_clk_reg_read(JZ_REG_CLOCK_CTRL) & JZ_CLOCK_CTRL_UDIV_MASK); | ||
| 474 | div >>= JZ_CLOCK_CTRL_UDIV_OFFSET; | ||
| 475 | div += 1; | ||
| 476 | |||
| 477 | return clk_get_rate(clk->parent) / div; | ||
| 478 | } | ||
| 479 | |||
| 480 | static unsigned long jz_clk_divided_get_rate(struct clk *clk) | ||
| 481 | { | ||
| 482 | struct divided_clk *dclk = (struct divided_clk *)clk; | ||
| 483 | int div; | ||
| 484 | |||
| 485 | if (clk->parent == &jz_clk_ext.clk) | ||
| 486 | return clk_get_rate(clk->parent); | ||
| 487 | |||
| 488 | div = (jz_clk_reg_read(dclk->reg) & dclk->mask) + 1; | ||
| 489 | |||
| 490 | return clk_get_rate(clk->parent) / div; | ||
| 491 | } | ||
| 492 | |||
| 493 | static int jz_clk_divided_set_rate(struct clk *clk, unsigned long rate) | ||
| 494 | { | ||
| 495 | struct divided_clk *dclk = (struct divided_clk *)clk; | ||
| 496 | int div; | ||
| 497 | |||
| 498 | if (clk->parent == &jz_clk_ext.clk) | ||
| 499 | return -EINVAL; | ||
| 500 | |||
| 501 | div = clk_get_rate(clk->parent) / rate - 1; | ||
| 502 | |||
| 503 | if (div < 0) | ||
| 504 | div = 0; | ||
| 505 | else if (div > dclk->mask) | ||
| 506 | div = dclk->mask; | ||
| 507 | |||
| 508 | jz_clk_reg_write_mask(dclk->reg, div, dclk->mask); | ||
| 509 | |||
| 510 | return 0; | ||
| 511 | } | ||
| 512 | |||
| 513 | static unsigned long jz_clk_ldclk_round_rate(struct clk *clk, unsigned long rate) | ||
| 514 | { | ||
| 515 | int div; | ||
| 516 | unsigned long parent_rate = jz_clk_pll_half_get_rate(clk->parent); | ||
| 517 | |||
| 518 | if (rate > 150000000) | ||
| 519 | return 150000000; | ||
| 520 | |||
| 521 | div = parent_rate / rate; | ||
| 522 | if (div < 1) | ||
| 523 | div = 1; | ||
| 524 | else if (div > 32) | ||
| 525 | div = 32; | ||
| 526 | |||
| 527 | return parent_rate / div; | ||
| 528 | } | ||
| 529 | |||
| 530 | static int jz_clk_ldclk_set_rate(struct clk *clk, unsigned long rate) | ||
| 531 | { | ||
| 532 | int div; | ||
| 533 | |||
| 534 | if (rate > 150000000) | ||
| 535 | return -EINVAL; | ||
| 536 | |||
| 537 | div = jz_clk_pll_half_get_rate(clk->parent) / rate - 1; | ||
| 538 | if (div < 0) | ||
| 539 | div = 0; | ||
| 540 | else if (div > 31) | ||
| 541 | div = 31; | ||
| 542 | |||
| 543 | jz_clk_reg_write_mask(JZ_REG_CLOCK_CTRL, div << JZ_CLOCK_CTRL_LDIV_OFFSET, | ||
| 544 | JZ_CLOCK_CTRL_LDIV_MASK); | ||
| 545 | |||
| 546 | return 0; | ||
| 547 | } | ||
| 548 | |||
| 549 | static unsigned long jz_clk_ldclk_get_rate(struct clk *clk) | ||
| 550 | { | ||
| 551 | int div; | ||
| 552 | |||
| 553 | div = jz_clk_reg_read(JZ_REG_CLOCK_CTRL) & JZ_CLOCK_CTRL_LDIV_MASK; | ||
| 554 | div >>= JZ_CLOCK_CTRL_LDIV_OFFSET; | ||
| 555 | |||
| 556 | return jz_clk_pll_half_get_rate(clk->parent) / (div + 1); | ||
| 557 | } | ||
| 558 | |||
| 559 | static const struct clk_ops jz_clk_ops_ld = { | ||
| 560 | .set_rate = jz_clk_ldclk_set_rate, | ||
| 561 | .get_rate = jz_clk_ldclk_get_rate, | ||
| 562 | .round_rate = jz_clk_ldclk_round_rate, | ||
| 563 | .enable = jz_clk_enable_gating, | ||
| 564 | .disable = jz_clk_disable_gating, | ||
| 565 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 566 | }; | ||
| 567 | |||
| 568 | static struct clk jz_clk_ld = { | ||
| 569 | .name = "lcd", | ||
| 570 | .gate_bit = JZ_CLOCK_GATE_LCD, | ||
| 571 | .parent = &jz_clk_pll_half, | ||
| 572 | .ops = &jz_clk_ops_ld, | ||
| 573 | }; | ||
| 574 | |||
| 575 | static const struct clk_ops jz_clk_i2s_ops = { | ||
| 576 | .set_rate = jz_clk_divided_set_rate, | ||
| 577 | .get_rate = jz_clk_divided_get_rate, | ||
| 578 | .enable = jz_clk_enable_gating, | ||
| 579 | .disable = jz_clk_disable_gating, | ||
| 580 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 581 | .set_parent = jz_clk_i2s_set_parent, | ||
| 582 | }; | ||
| 583 | |||
| 584 | static const struct clk_ops jz_clk_spi_ops = { | ||
| 585 | .set_rate = jz_clk_divided_set_rate, | ||
| 586 | .get_rate = jz_clk_divided_get_rate, | ||
| 587 | .enable = jz_clk_enable_gating, | ||
| 588 | .disable = jz_clk_disable_gating, | ||
| 589 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 590 | .set_parent = jz_clk_spi_set_parent, | ||
| 591 | }; | ||
| 592 | |||
| 593 | static const struct clk_ops jz_clk_divided_ops = { | ||
| 594 | .set_rate = jz_clk_divided_set_rate, | ||
| 595 | .get_rate = jz_clk_divided_get_rate, | ||
| 596 | .enable = jz_clk_enable_gating, | ||
| 597 | .disable = jz_clk_disable_gating, | ||
| 598 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 599 | }; | ||
| 600 | |||
| 601 | static struct divided_clk jz4740_clock_divided_clks[] = { | ||
| 602 | [0] = { | ||
| 603 | .clk = { | ||
| 604 | .name = "i2s", | ||
| 605 | .parent = &jz_clk_ext.clk, | ||
| 606 | .gate_bit = JZ_CLOCK_GATE_I2S, | ||
| 607 | .ops = &jz_clk_i2s_ops, | ||
| 608 | }, | ||
| 609 | .reg = JZ_REG_CLOCK_I2S, | ||
| 610 | .mask = JZ_CLOCK_I2S_DIV_MASK, | ||
| 611 | }, | ||
| 612 | [1] = { | ||
| 613 | .clk = { | ||
| 614 | .name = "spi", | ||
| 615 | .parent = &jz_clk_ext.clk, | ||
| 616 | .gate_bit = JZ_CLOCK_GATE_SPI, | ||
| 617 | .ops = &jz_clk_spi_ops, | ||
| 618 | }, | ||
| 619 | .reg = JZ_REG_CLOCK_SPI, | ||
| 620 | .mask = JZ_CLOCK_SPI_DIV_MASK, | ||
| 621 | }, | ||
| 622 | [2] = { | ||
| 623 | .clk = { | ||
| 624 | .name = "lcd_pclk", | ||
| 625 | .parent = &jz_clk_pll_half, | ||
| 626 | .gate_bit = JZ4740_CLK_NOT_GATED, | ||
| 627 | .ops = &jz_clk_divided_ops, | ||
| 628 | }, | ||
| 629 | .reg = JZ_REG_CLOCK_LCD, | ||
| 630 | .mask = JZ_CLOCK_LCD_DIV_MASK, | ||
| 631 | }, | ||
| 632 | [3] = { | ||
| 633 | .clk = { | ||
| 634 | .name = "mmc", | ||
| 635 | .parent = &jz_clk_pll_half, | ||
| 636 | .gate_bit = JZ_CLOCK_GATE_MMC, | ||
| 637 | .ops = &jz_clk_divided_ops, | ||
| 638 | }, | ||
| 639 | .reg = JZ_REG_CLOCK_MMC, | ||
| 640 | .mask = JZ_CLOCK_MMC_DIV_MASK, | ||
| 641 | }, | ||
| 642 | [4] = { | ||
| 643 | .clk = { | ||
| 644 | .name = "uhc", | ||
| 645 | .parent = &jz_clk_pll_half, | ||
| 646 | .gate_bit = JZ_CLOCK_GATE_UHC, | ||
| 647 | .ops = &jz_clk_divided_ops, | ||
| 648 | }, | ||
| 649 | .reg = JZ_REG_CLOCK_UHC, | ||
| 650 | .mask = JZ_CLOCK_UHC_DIV_MASK, | ||
| 651 | }, | ||
| 652 | }; | ||
| 653 | |||
| 654 | static const struct clk_ops jz_clk_udc_ops = { | ||
| 655 | .set_parent = jz_clk_udc_set_parent, | ||
| 656 | .set_rate = jz_clk_udc_set_rate, | ||
| 657 | .get_rate = jz_clk_udc_get_rate, | ||
| 658 | .enable = jz_clk_udc_enable, | ||
| 659 | .disable = jz_clk_udc_disable, | ||
| 660 | .is_enabled = jz_clk_udc_is_enabled, | ||
| 661 | }; | ||
| 662 | |||
| 663 | static const struct clk_ops jz_clk_simple_ops = { | ||
| 664 | .enable = jz_clk_enable_gating, | ||
| 665 | .disable = jz_clk_disable_gating, | ||
| 666 | .is_enabled = jz_clk_is_enabled_gating, | ||
| 667 | }; | ||
| 668 | |||
| 669 | static struct clk jz4740_clock_simple_clks[] = { | ||
| 670 | [0] = { | ||
| 671 | .name = "udc", | ||
| 672 | .parent = &jz_clk_ext.clk, | ||
| 673 | .ops = &jz_clk_udc_ops, | ||
| 674 | }, | ||
| 675 | [1] = { | ||
| 676 | .name = "uart0", | ||
| 677 | .parent = &jz_clk_ext.clk, | ||
| 678 | .gate_bit = JZ_CLOCK_GATE_UART0, | ||
| 679 | .ops = &jz_clk_simple_ops, | ||
| 680 | }, | ||
| 681 | [2] = { | ||
| 682 | .name = "uart1", | ||
| 683 | .parent = &jz_clk_ext.clk, | ||
| 684 | .gate_bit = JZ_CLOCK_GATE_UART1, | ||
| 685 | .ops = &jz_clk_simple_ops, | ||
| 686 | }, | ||
| 687 | [3] = { | ||
| 688 | .name = "dma", | ||
| 689 | .parent = &jz_clk_high_speed_peripheral.clk, | ||
| 690 | .gate_bit = JZ_CLOCK_GATE_UART0, | ||
| 691 | .ops = &jz_clk_simple_ops, | ||
| 692 | }, | ||
| 693 | [4] = { | ||
| 694 | .name = "ipu", | ||
| 695 | .parent = &jz_clk_high_speed_peripheral.clk, | ||
| 696 | .gate_bit = JZ_CLOCK_GATE_IPU, | ||
| 697 | .ops = &jz_clk_simple_ops, | ||
| 698 | }, | ||
| 699 | [5] = { | ||
| 700 | .name = "adc", | ||
| 701 | .parent = &jz_clk_ext.clk, | ||
| 702 | .gate_bit = JZ_CLOCK_GATE_ADC, | ||
| 703 | .ops = &jz_clk_simple_ops, | ||
| 704 | }, | ||
| 705 | [6] = { | ||
| 706 | .name = "i2c", | ||
| 707 | .parent = &jz_clk_ext.clk, | ||
| 708 | .gate_bit = JZ_CLOCK_GATE_I2C, | ||
| 709 | .ops = &jz_clk_simple_ops, | ||
| 710 | }, | ||
| 711 | [7] = { | ||
| 712 | .name = "aic", | ||
| 713 | .parent = &jz_clk_ext.clk, | ||
| 714 | .gate_bit = JZ_CLOCK_GATE_AIC, | ||
| 715 | .ops = &jz_clk_simple_ops, | ||
| 716 | }, | ||
| 717 | }; | ||
| 718 | |||
| 719 | static struct static_clk jz_clk_rtc = { | ||
| 720 | .clk = { | ||
| 721 | .name = "rtc", | ||
| 722 | .gate_bit = JZ_CLOCK_GATE_RTC, | ||
| 723 | .ops = &jz_clk_static_ops, | ||
| 724 | }, | ||
| 725 | .rate = 32768, | ||
| 726 | }; | ||
| 727 | |||
| 728 | int clk_enable(struct clk *clk) | ||
| 729 | { | ||
| 730 | if (!clk->ops->enable) | ||
| 731 | return -EINVAL; | ||
| 732 | |||
| 733 | return clk->ops->enable(clk); | ||
| 734 | } | ||
| 735 | EXPORT_SYMBOL_GPL(clk_enable); | ||
| 736 | |||
| 737 | void clk_disable(struct clk *clk) | ||
| 738 | { | ||
| 739 | if (clk->ops->disable) | ||
| 740 | clk->ops->disable(clk); | ||
| 741 | } | ||
| 742 | EXPORT_SYMBOL_GPL(clk_disable); | ||
| 743 | |||
| 744 | int clk_is_enabled(struct clk *clk) | ||
| 745 | { | ||
| 746 | if (clk->ops->is_enabled) | ||
| 747 | return clk->ops->is_enabled(clk); | ||
| 748 | |||
| 749 | return 1; | ||
| 750 | } | ||
| 751 | |||
| 752 | unsigned long clk_get_rate(struct clk *clk) | ||
| 753 | { | ||
| 754 | if (clk->ops->get_rate) | ||
| 755 | return clk->ops->get_rate(clk); | ||
| 756 | if (clk->parent) | ||
| 757 | return clk_get_rate(clk->parent); | ||
| 758 | |||
| 759 | return -EINVAL; | ||
| 760 | } | ||
| 761 | EXPORT_SYMBOL_GPL(clk_get_rate); | ||
| 762 | |||
| 763 | int clk_set_rate(struct clk *clk, unsigned long rate) | ||
| 764 | { | ||
| 765 | if (!clk->ops->set_rate) | ||
| 766 | return -EINVAL; | ||
| 767 | return clk->ops->set_rate(clk, rate); | ||
| 768 | } | ||
| 769 | EXPORT_SYMBOL_GPL(clk_set_rate); | ||
| 770 | |||
| 771 | long clk_round_rate(struct clk *clk, unsigned long rate) | ||
| 772 | { | ||
| 773 | if (clk->ops->round_rate) | ||
| 774 | return clk->ops->round_rate(clk, rate); | ||
| 775 | |||
| 776 | return -EINVAL; | ||
| 777 | } | ||
| 778 | EXPORT_SYMBOL_GPL(clk_round_rate); | ||
| 779 | |||
| 780 | int clk_set_parent(struct clk *clk, struct clk *parent) | ||
| 781 | { | ||
| 782 | int ret; | ||
| 783 | int enabled; | ||
| 784 | |||
| 785 | if (!clk->ops->set_parent) | ||
| 786 | return -EINVAL; | ||
| 787 | |||
| 788 | enabled = clk_is_enabled(clk); | ||
| 789 | if (enabled) | ||
| 790 | clk_disable(clk); | ||
| 791 | ret = clk->ops->set_parent(clk, parent); | ||
| 792 | if (enabled) | ||
| 793 | clk_enable(clk); | ||
| 794 | |||
| 795 | jz4740_clock_debugfs_update_parent(clk); | ||
| 796 | |||
| 797 | return ret; | ||
| 798 | } | ||
| 799 | EXPORT_SYMBOL_GPL(clk_set_parent); | ||
| 800 | |||
| 801 | struct clk *clk_get(struct device *dev, const char *name) | ||
| 802 | { | ||
| 803 | struct clk *clk; | ||
| 804 | |||
| 805 | list_for_each_entry(clk, &jz_clocks, list) { | ||
| 806 | if (strcmp(clk->name, name) == 0) | ||
| 807 | return clk; | ||
| 808 | } | ||
| 809 | return ERR_PTR(-ENXIO); | ||
| 810 | } | ||
| 811 | EXPORT_SYMBOL_GPL(clk_get); | ||
| 812 | |||
| 813 | void clk_put(struct clk *clk) | ||
| 814 | { | ||
| 815 | } | ||
| 816 | EXPORT_SYMBOL_GPL(clk_put); | ||
| 817 | |||
| 818 | static inline void clk_add(struct clk *clk) | ||
| 819 | { | ||
| 820 | list_add_tail(&clk->list, &jz_clocks); | ||
| 821 | |||
| 822 | jz4740_clock_debugfs_add_clk(clk); | ||
| 823 | } | ||
| 824 | |||
| 825 | static void clk_register_clks(void) | ||
| 826 | { | ||
| 827 | size_t i; | ||
| 828 | |||
| 829 | clk_add(&jz_clk_ext.clk); | ||
| 830 | clk_add(&jz_clk_pll); | ||
| 831 | clk_add(&jz_clk_pll_half); | ||
| 832 | clk_add(&jz_clk_cpu.clk); | ||
| 833 | clk_add(&jz_clk_high_speed_peripheral.clk); | ||
| 834 | clk_add(&jz_clk_low_speed_peripheral.clk); | ||
| 835 | clk_add(&jz_clk_ko); | ||
| 836 | clk_add(&jz_clk_ld); | ||
| 837 | clk_add(&jz_clk_rtc.clk); | ||
| 838 | |||
| 839 | for (i = 0; i < ARRAY_SIZE(jz4740_clock_divided_clks); ++i) | ||
| 840 | clk_add(&jz4740_clock_divided_clks[i].clk); | ||
| 841 | |||
| 842 | for (i = 0; i < ARRAY_SIZE(jz4740_clock_simple_clks); ++i) | ||
| 843 | clk_add(&jz4740_clock_simple_clks[i]); | ||
| 844 | } | ||
| 845 | |||
| 846 | void jz4740_clock_set_wait_mode(enum jz4740_wait_mode mode) | ||
| 847 | { | ||
| 848 | switch (mode) { | ||
| 849 | case JZ4740_WAIT_MODE_IDLE: | ||
| 850 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_LOW_POWER, JZ_CLOCK_LOW_POWER_MODE_SLEEP); | ||
| 851 | break; | ||
| 852 | case JZ4740_WAIT_MODE_SLEEP: | ||
| 853 | jz_clk_reg_set_bits(JZ_REG_CLOCK_LOW_POWER, JZ_CLOCK_LOW_POWER_MODE_SLEEP); | ||
| 854 | break; | ||
| 855 | } | ||
| 856 | } | ||
| 857 | |||
| 858 | void jz4740_clock_udc_disable_auto_suspend(void) | ||
| 859 | { | ||
| 860 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_GATE, JZ_CLOCK_GATE_UDC); | ||
| 861 | } | ||
| 862 | EXPORT_SYMBOL_GPL(jz4740_clock_udc_disable_auto_suspend); | ||
| 863 | |||
| 864 | void jz4740_clock_udc_enable_auto_suspend(void) | ||
| 865 | { | ||
| 866 | jz_clk_reg_set_bits(JZ_REG_CLOCK_GATE, JZ_CLOCK_GATE_UDC); | ||
| 867 | } | ||
| 868 | EXPORT_SYMBOL_GPL(jz4740_clock_udc_enable_auto_suspend); | ||
| 869 | |||
| 870 | void jz4740_clock_suspend(void) | ||
| 871 | { | ||
| 872 | jz_clk_reg_set_bits(JZ_REG_CLOCK_GATE, | ||
| 873 | JZ_CLOCK_GATE_TCU | JZ_CLOCK_GATE_DMAC | JZ_CLOCK_GATE_UART0); | ||
| 874 | |||
| 875 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_PLL, JZ_CLOCK_PLL_ENABLED); | ||
| 876 | } | ||
| 877 | |||
| 878 | void jz4740_clock_resume(void) | ||
| 879 | { | ||
| 880 | uint32_t pll; | ||
| 881 | |||
| 882 | jz_clk_reg_set_bits(JZ_REG_CLOCK_PLL, JZ_CLOCK_PLL_ENABLED); | ||
| 883 | |||
| 884 | do { | ||
| 885 | pll = jz_clk_reg_read(JZ_REG_CLOCK_PLL); | ||
| 886 | } while (!(pll & JZ_CLOCK_PLL_STABLE)); | ||
| 887 | |||
| 888 | jz_clk_reg_clear_bits(JZ_REG_CLOCK_GATE, | ||
| 889 | JZ_CLOCK_GATE_TCU | JZ_CLOCK_GATE_DMAC | JZ_CLOCK_GATE_UART0); | ||
| 890 | } | ||
| 891 | |||
| 892 | static int jz4740_clock_init(void) | ||
| 893 | { | ||
| 894 | uint32_t val; | ||
| 895 | |||
| 896 | jz_clock_base = ioremap(JZ4740_CPM_BASE_ADDR, 0x100); | ||
| 897 | if (!jz_clock_base) | ||
| 898 | return -EBUSY; | ||
| 899 | |||
| 900 | spin_lock_init(&jz_clock_lock); | ||
| 901 | |||
| 902 | jz_clk_ext.rate = jz4740_clock_bdata.ext_rate; | ||
| 903 | jz_clk_rtc.rate = jz4740_clock_bdata.rtc_rate; | ||
| 904 | |||
| 905 | val = jz_clk_reg_read(JZ_REG_CLOCK_SPI); | ||
| 906 | |||
| 907 | if (val & JZ_CLOCK_SPI_SRC_PLL) | ||
| 908 | jz4740_clock_divided_clks[1].clk.parent = &jz_clk_pll_half; | ||
| 909 | |||
| 910 | val = jz_clk_reg_read(JZ_REG_CLOCK_CTRL); | ||
| 911 | |||
| 912 | if (val & JZ_CLOCK_CTRL_I2S_SRC_PLL) | ||
| 913 | jz4740_clock_divided_clks[0].clk.parent = &jz_clk_pll_half; | ||
| 914 | |||
| 915 | if (val & JZ_CLOCK_CTRL_UDC_SRC_PLL) | ||
| 916 | jz4740_clock_simple_clks[0].parent = &jz_clk_pll_half; | ||
| 917 | |||
| 918 | jz4740_clock_debugfs_init(); | ||
| 919 | |||
| 920 | clk_register_clks(); | ||
| 921 | |||
| 922 | return 0; | ||
| 923 | } | ||
| 924 | arch_initcall(jz4740_clock_init); | ||
diff --git a/arch/mips/jz4740/clock.h b/arch/mips/jz4740/clock.h new file mode 100644 index 000000000000..5d07499d7461 --- /dev/null +++ b/arch/mips/jz4740/clock.h | |||
| @@ -0,0 +1,76 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC clock support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __MIPS_JZ4740_CLOCK_H__ | ||
| 17 | #define __MIPS_JZ4740_CLOCK_H__ | ||
| 18 | |||
| 19 | #include <linux/list.h> | ||
| 20 | |||
| 21 | struct jz4740_clock_board_data { | ||
| 22 | unsigned long ext_rate; | ||
| 23 | unsigned long rtc_rate; | ||
| 24 | }; | ||
| 25 | |||
| 26 | extern struct jz4740_clock_board_data jz4740_clock_bdata; | ||
| 27 | |||
| 28 | void jz4740_clock_suspend(void); | ||
| 29 | void jz4740_clock_resume(void); | ||
| 30 | |||
| 31 | struct clk; | ||
| 32 | |||
| 33 | struct clk_ops { | ||
| 34 | unsigned long (*get_rate)(struct clk *clk); | ||
| 35 | unsigned long (*round_rate)(struct clk *clk, unsigned long rate); | ||
| 36 | int (*set_rate)(struct clk *clk, unsigned long rate); | ||
| 37 | int (*enable)(struct clk *clk); | ||
| 38 | int (*disable)(struct clk *clk); | ||
| 39 | int (*is_enabled)(struct clk *clk); | ||
| 40 | |||
| 41 | int (*set_parent)(struct clk *clk, struct clk *parent); | ||
| 42 | |||
| 43 | }; | ||
| 44 | |||
| 45 | struct clk { | ||
| 46 | const char *name; | ||
| 47 | struct clk *parent; | ||
| 48 | |||
| 49 | uint32_t gate_bit; | ||
| 50 | |||
| 51 | const struct clk_ops *ops; | ||
| 52 | |||
| 53 | struct list_head list; | ||
| 54 | |||
| 55 | #ifdef CONFIG_DEBUG_FS | ||
| 56 | struct dentry *debugfs_entry; | ||
| 57 | struct dentry *debugfs_parent_entry; | ||
| 58 | #endif | ||
| 59 | |||
| 60 | }; | ||
| 61 | |||
| 62 | #define JZ4740_CLK_NOT_GATED ((uint32_t)-1) | ||
| 63 | |||
| 64 | int clk_is_enabled(struct clk *clk); | ||
| 65 | |||
| 66 | #ifdef CONFIG_DEBUG_FS | ||
| 67 | void jz4740_clock_debugfs_init(void); | ||
| 68 | void jz4740_clock_debugfs_add_clk(struct clk *clk); | ||
| 69 | void jz4740_clock_debugfs_update_parent(struct clk *clk); | ||
| 70 | #else | ||
| 71 | static inline void jz4740_clock_debugfs_init(void) {}; | ||
| 72 | static inline void jz4740_clock_debugfs_add_clk(struct clk *clk) {}; | ||
| 73 | static inline void jz4740_clock_debugfs_update_parent(struct clk *clk) {}; | ||
| 74 | #endif | ||
| 75 | |||
| 76 | #endif | ||
diff --git a/arch/mips/jz4740/dma.c b/arch/mips/jz4740/dma.c new file mode 100644 index 000000000000..5ebe75a68350 --- /dev/null +++ b/arch/mips/jz4740/dma.c | |||
| @@ -0,0 +1,289 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC DMA support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/spinlock.h> | ||
| 19 | #include <linux/interrupt.h> | ||
| 20 | |||
| 21 | #include <linux/dma-mapping.h> | ||
| 22 | #include <asm/mach-jz4740/dma.h> | ||
| 23 | #include <asm/mach-jz4740/base.h> | ||
| 24 | |||
| 25 | #define JZ_REG_DMA_SRC_ADDR(x) (0x00 + (x) * 0x20) | ||
| 26 | #define JZ_REG_DMA_DST_ADDR(x) (0x04 + (x) * 0x20) | ||
| 27 | #define JZ_REG_DMA_TRANSFER_COUNT(x) (0x08 + (x) * 0x20) | ||
| 28 | #define JZ_REG_DMA_REQ_TYPE(x) (0x0C + (x) * 0x20) | ||
| 29 | #define JZ_REG_DMA_STATUS_CTRL(x) (0x10 + (x) * 0x20) | ||
| 30 | #define JZ_REG_DMA_CMD(x) (0x14 + (x) * 0x20) | ||
| 31 | #define JZ_REG_DMA_DESC_ADDR(x) (0x18 + (x) * 0x20) | ||
| 32 | |||
| 33 | #define JZ_REG_DMA_CTRL 0x300 | ||
| 34 | #define JZ_REG_DMA_IRQ 0x304 | ||
| 35 | #define JZ_REG_DMA_DOORBELL 0x308 | ||
| 36 | #define JZ_REG_DMA_DOORBELL_SET 0x30C | ||
| 37 | |||
| 38 | #define JZ_DMA_STATUS_CTRL_NO_DESC BIT(31) | ||
| 39 | #define JZ_DMA_STATUS_CTRL_DESC_INV BIT(6) | ||
| 40 | #define JZ_DMA_STATUS_CTRL_ADDR_ERR BIT(4) | ||
| 41 | #define JZ_DMA_STATUS_CTRL_TRANSFER_DONE BIT(3) | ||
| 42 | #define JZ_DMA_STATUS_CTRL_HALT BIT(2) | ||
| 43 | #define JZ_DMA_STATUS_CTRL_COUNT_TERMINATE BIT(1) | ||
| 44 | #define JZ_DMA_STATUS_CTRL_ENABLE BIT(0) | ||
| 45 | |||
| 46 | #define JZ_DMA_CMD_SRC_INC BIT(23) | ||
| 47 | #define JZ_DMA_CMD_DST_INC BIT(22) | ||
| 48 | #define JZ_DMA_CMD_RDIL_MASK (0xf << 16) | ||
| 49 | #define JZ_DMA_CMD_SRC_WIDTH_MASK (0x3 << 14) | ||
| 50 | #define JZ_DMA_CMD_DST_WIDTH_MASK (0x3 << 12) | ||
| 51 | #define JZ_DMA_CMD_INTERVAL_LENGTH_MASK (0x7 << 8) | ||
| 52 | #define JZ_DMA_CMD_BLOCK_MODE BIT(7) | ||
| 53 | #define JZ_DMA_CMD_DESC_VALID BIT(4) | ||
| 54 | #define JZ_DMA_CMD_DESC_VALID_MODE BIT(3) | ||
| 55 | #define JZ_DMA_CMD_VALID_IRQ_ENABLE BIT(2) | ||
| 56 | #define JZ_DMA_CMD_TRANSFER_IRQ_ENABLE BIT(1) | ||
| 57 | #define JZ_DMA_CMD_LINK_ENABLE BIT(0) | ||
| 58 | |||
| 59 | #define JZ_DMA_CMD_FLAGS_OFFSET 22 | ||
| 60 | #define JZ_DMA_CMD_RDIL_OFFSET 16 | ||
| 61 | #define JZ_DMA_CMD_SRC_WIDTH_OFFSET 14 | ||
| 62 | #define JZ_DMA_CMD_DST_WIDTH_OFFSET 12 | ||
| 63 | #define JZ_DMA_CMD_TRANSFER_SIZE_OFFSET 8 | ||
| 64 | #define JZ_DMA_CMD_MODE_OFFSET 7 | ||
| 65 | |||
| 66 | #define JZ_DMA_CTRL_PRIORITY_MASK (0x3 << 8) | ||
| 67 | #define JZ_DMA_CTRL_HALT BIT(3) | ||
| 68 | #define JZ_DMA_CTRL_ADDRESS_ERROR BIT(2) | ||
| 69 | #define JZ_DMA_CTRL_ENABLE BIT(0) | ||
| 70 | |||
| 71 | |||
| 72 | static void __iomem *jz4740_dma_base; | ||
| 73 | static spinlock_t jz4740_dma_lock; | ||
| 74 | |||
| 75 | static inline uint32_t jz4740_dma_read(size_t reg) | ||
| 76 | { | ||
| 77 | return readl(jz4740_dma_base + reg); | ||
| 78 | } | ||
| 79 | |||
| 80 | static inline void jz4740_dma_write(size_t reg, uint32_t val) | ||
| 81 | { | ||
| 82 | writel(val, jz4740_dma_base + reg); | ||
| 83 | } | ||
| 84 | |||
| 85 | static inline void jz4740_dma_write_mask(size_t reg, uint32_t val, uint32_t mask) | ||
| 86 | { | ||
| 87 | uint32_t val2; | ||
| 88 | val2 = jz4740_dma_read(reg); | ||
| 89 | val2 &= ~mask; | ||
| 90 | val2 |= val; | ||
| 91 | jz4740_dma_write(reg, val2); | ||
| 92 | } | ||
| 93 | |||
| 94 | struct jz4740_dma_chan { | ||
| 95 | unsigned int id; | ||
| 96 | void *dev; | ||
| 97 | const char *name; | ||
| 98 | |||
| 99 | enum jz4740_dma_flags flags; | ||
| 100 | uint32_t transfer_shift; | ||
| 101 | |||
| 102 | jz4740_dma_complete_callback_t complete_cb; | ||
| 103 | |||
| 104 | unsigned used:1; | ||
| 105 | }; | ||
| 106 | |||
| 107 | #define JZ4740_DMA_CHANNEL(_id) { .id = _id } | ||
| 108 | |||
| 109 | struct jz4740_dma_chan jz4740_dma_channels[] = { | ||
| 110 | JZ4740_DMA_CHANNEL(0), | ||
| 111 | JZ4740_DMA_CHANNEL(1), | ||
| 112 | JZ4740_DMA_CHANNEL(2), | ||
| 113 | JZ4740_DMA_CHANNEL(3), | ||
| 114 | JZ4740_DMA_CHANNEL(4), | ||
| 115 | JZ4740_DMA_CHANNEL(5), | ||
| 116 | }; | ||
| 117 | |||
| 118 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name) | ||
| 119 | { | ||
| 120 | unsigned int i; | ||
| 121 | struct jz4740_dma_chan *dma = NULL; | ||
| 122 | |||
| 123 | spin_lock(&jz4740_dma_lock); | ||
| 124 | |||
| 125 | for (i = 0; i < ARRAY_SIZE(jz4740_dma_channels); ++i) { | ||
| 126 | if (!jz4740_dma_channels[i].used) { | ||
| 127 | dma = &jz4740_dma_channels[i]; | ||
| 128 | dma->used = 1; | ||
| 129 | break; | ||
| 130 | } | ||
| 131 | } | ||
| 132 | |||
| 133 | spin_unlock(&jz4740_dma_lock); | ||
| 134 | |||
| 135 | if (!dma) | ||
| 136 | return NULL; | ||
| 137 | |||
| 138 | dma->dev = dev; | ||
| 139 | dma->name = name; | ||
| 140 | |||
| 141 | return dma; | ||
| 142 | } | ||
| 143 | EXPORT_SYMBOL_GPL(jz4740_dma_request); | ||
| 144 | |||
| 145 | void jz4740_dma_configure(struct jz4740_dma_chan *dma, | ||
| 146 | const struct jz4740_dma_config *config) | ||
| 147 | { | ||
| 148 | uint32_t cmd; | ||
| 149 | |||
| 150 | switch (config->transfer_size) { | ||
| 151 | case JZ4740_DMA_TRANSFER_SIZE_2BYTE: | ||
| 152 | dma->transfer_shift = 1; | ||
| 153 | break; | ||
| 154 | case JZ4740_DMA_TRANSFER_SIZE_4BYTE: | ||
| 155 | dma->transfer_shift = 2; | ||
| 156 | break; | ||
| 157 | case JZ4740_DMA_TRANSFER_SIZE_16BYTE: | ||
| 158 | dma->transfer_shift = 4; | ||
| 159 | break; | ||
| 160 | case JZ4740_DMA_TRANSFER_SIZE_32BYTE: | ||
| 161 | dma->transfer_shift = 5; | ||
| 162 | break; | ||
| 163 | default: | ||
| 164 | dma->transfer_shift = 0; | ||
| 165 | break; | ||
| 166 | } | ||
| 167 | |||
| 168 | cmd = config->flags << JZ_DMA_CMD_FLAGS_OFFSET; | ||
| 169 | cmd |= config->src_width << JZ_DMA_CMD_SRC_WIDTH_OFFSET; | ||
| 170 | cmd |= config->dst_width << JZ_DMA_CMD_DST_WIDTH_OFFSET; | ||
| 171 | cmd |= config->transfer_size << JZ_DMA_CMD_TRANSFER_SIZE_OFFSET; | ||
| 172 | cmd |= config->mode << JZ_DMA_CMD_MODE_OFFSET; | ||
| 173 | cmd |= JZ_DMA_CMD_TRANSFER_IRQ_ENABLE; | ||
| 174 | |||
| 175 | jz4740_dma_write(JZ_REG_DMA_CMD(dma->id), cmd); | ||
| 176 | jz4740_dma_write(JZ_REG_DMA_STATUS_CTRL(dma->id), 0); | ||
| 177 | jz4740_dma_write(JZ_REG_DMA_REQ_TYPE(dma->id), config->request_type); | ||
| 178 | } | ||
| 179 | EXPORT_SYMBOL_GPL(jz4740_dma_configure); | ||
| 180 | |||
| 181 | void jz4740_dma_set_src_addr(struct jz4740_dma_chan *dma, dma_addr_t src) | ||
| 182 | { | ||
| 183 | jz4740_dma_write(JZ_REG_DMA_SRC_ADDR(dma->id), src); | ||
| 184 | } | ||
| 185 | EXPORT_SYMBOL_GPL(jz4740_dma_set_src_addr); | ||
| 186 | |||
| 187 | void jz4740_dma_set_dst_addr(struct jz4740_dma_chan *dma, dma_addr_t dst) | ||
| 188 | { | ||
| 189 | jz4740_dma_write(JZ_REG_DMA_DST_ADDR(dma->id), dst); | ||
| 190 | } | ||
| 191 | EXPORT_SYMBOL_GPL(jz4740_dma_set_dst_addr); | ||
| 192 | |||
| 193 | void jz4740_dma_set_transfer_count(struct jz4740_dma_chan *dma, uint32_t count) | ||
| 194 | { | ||
| 195 | count >>= dma->transfer_shift; | ||
| 196 | jz4740_dma_write(JZ_REG_DMA_TRANSFER_COUNT(dma->id), count); | ||
| 197 | } | ||
| 198 | EXPORT_SYMBOL_GPL(jz4740_dma_set_transfer_count); | ||
| 199 | |||
| 200 | void jz4740_dma_set_complete_cb(struct jz4740_dma_chan *dma, | ||
| 201 | jz4740_dma_complete_callback_t cb) | ||
| 202 | { | ||
| 203 | dma->complete_cb = cb; | ||
| 204 | } | ||
| 205 | EXPORT_SYMBOL_GPL(jz4740_dma_set_complete_cb); | ||
| 206 | |||
| 207 | void jz4740_dma_free(struct jz4740_dma_chan *dma) | ||
| 208 | { | ||
| 209 | dma->dev = NULL; | ||
| 210 | dma->complete_cb = NULL; | ||
| 211 | dma->used = 0; | ||
| 212 | } | ||
| 213 | EXPORT_SYMBOL_GPL(jz4740_dma_free); | ||
| 214 | |||
| 215 | void jz4740_dma_enable(struct jz4740_dma_chan *dma) | ||
| 216 | { | ||
| 217 | jz4740_dma_write_mask(JZ_REG_DMA_STATUS_CTRL(dma->id), | ||
| 218 | JZ_DMA_STATUS_CTRL_NO_DESC | JZ_DMA_STATUS_CTRL_ENABLE, | ||
| 219 | JZ_DMA_STATUS_CTRL_HALT | JZ_DMA_STATUS_CTRL_NO_DESC | | ||
| 220 | JZ_DMA_STATUS_CTRL_ENABLE); | ||
| 221 | |||
| 222 | jz4740_dma_write_mask(JZ_REG_DMA_CTRL, | ||
| 223 | JZ_DMA_CTRL_ENABLE, | ||
| 224 | JZ_DMA_CTRL_HALT | JZ_DMA_CTRL_ENABLE); | ||
| 225 | } | ||
| 226 | EXPORT_SYMBOL_GPL(jz4740_dma_enable); | ||
| 227 | |||
| 228 | void jz4740_dma_disable(struct jz4740_dma_chan *dma) | ||
| 229 | { | ||
| 230 | jz4740_dma_write_mask(JZ_REG_DMA_STATUS_CTRL(dma->id), 0, | ||
| 231 | JZ_DMA_STATUS_CTRL_ENABLE); | ||
| 232 | } | ||
| 233 | EXPORT_SYMBOL_GPL(jz4740_dma_disable); | ||
| 234 | |||
| 235 | uint32_t jz4740_dma_get_residue(const struct jz4740_dma_chan *dma) | ||
| 236 | { | ||
| 237 | uint32_t residue; | ||
| 238 | residue = jz4740_dma_read(JZ_REG_DMA_TRANSFER_COUNT(dma->id)); | ||
| 239 | return residue << dma->transfer_shift; | ||
| 240 | } | ||
| 241 | EXPORT_SYMBOL_GPL(jz4740_dma_get_residue); | ||
| 242 | |||
| 243 | static void jz4740_dma_chan_irq(struct jz4740_dma_chan *dma) | ||
| 244 | { | ||
| 245 | uint32_t status; | ||
| 246 | |||
| 247 | status = jz4740_dma_read(JZ_REG_DMA_STATUS_CTRL(dma->id)); | ||
| 248 | |||
| 249 | jz4740_dma_write_mask(JZ_REG_DMA_STATUS_CTRL(dma->id), 0, | ||
| 250 | JZ_DMA_STATUS_CTRL_ENABLE | JZ_DMA_STATUS_CTRL_TRANSFER_DONE); | ||
| 251 | |||
| 252 | if (dma->complete_cb) | ||
| 253 | dma->complete_cb(dma, 0, dma->dev); | ||
| 254 | } | ||
| 255 | |||
| 256 | static irqreturn_t jz4740_dma_irq(int irq, void *dev_id) | ||
| 257 | { | ||
| 258 | uint32_t irq_status; | ||
| 259 | unsigned int i; | ||
| 260 | |||
| 261 | irq_status = readl(jz4740_dma_base + JZ_REG_DMA_IRQ); | ||
| 262 | |||
| 263 | for (i = 0; i < 6; ++i) { | ||
| 264 | if (irq_status & (1 << i)) | ||
| 265 | jz4740_dma_chan_irq(&jz4740_dma_channels[i]); | ||
| 266 | } | ||
| 267 | |||
| 268 | return IRQ_HANDLED; | ||
| 269 | } | ||
| 270 | |||
| 271 | static int jz4740_dma_init(void) | ||
| 272 | { | ||
| 273 | unsigned int ret; | ||
| 274 | |||
| 275 | jz4740_dma_base = ioremap(JZ4740_DMAC_BASE_ADDR, 0x400); | ||
| 276 | |||
| 277 | if (!jz4740_dma_base) | ||
| 278 | return -EBUSY; | ||
| 279 | |||
| 280 | spin_lock_init(&jz4740_dma_lock); | ||
| 281 | |||
| 282 | ret = request_irq(JZ4740_IRQ_DMAC, jz4740_dma_irq, 0, "DMA", NULL); | ||
| 283 | |||
| 284 | if (ret) | ||
| 285 | printk(KERN_ERR "JZ4740 DMA: Failed to request irq: %d\n", ret); | ||
| 286 | |||
| 287 | return ret; | ||
| 288 | } | ||
| 289 | arch_initcall(jz4740_dma_init); | ||
diff --git a/arch/mips/jz4740/gpio.c b/arch/mips/jz4740/gpio.c new file mode 100644 index 000000000000..38f60f35156c --- /dev/null +++ b/arch/mips/jz4740/gpio.c | |||
| @@ -0,0 +1,604 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform GPIO support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/init.h> | ||
| 19 | |||
| 20 | #include <linux/spinlock.h> | ||
| 21 | #include <linux/sysdev.h> | ||
| 22 | #include <linux/io.h> | ||
| 23 | #include <linux/gpio.h> | ||
| 24 | #include <linux/delay.h> | ||
| 25 | #include <linux/interrupt.h> | ||
| 26 | #include <linux/bitops.h> | ||
| 27 | |||
| 28 | #include <linux/debugfs.h> | ||
| 29 | #include <linux/seq_file.h> | ||
| 30 | |||
| 31 | #include <asm/mach-jz4740/base.h> | ||
| 32 | |||
| 33 | #define JZ4740_GPIO_BASE_A (32*0) | ||
| 34 | #define JZ4740_GPIO_BASE_B (32*1) | ||
| 35 | #define JZ4740_GPIO_BASE_C (32*2) | ||
| 36 | #define JZ4740_GPIO_BASE_D (32*3) | ||
| 37 | |||
| 38 | #define JZ4740_GPIO_NUM_A 32 | ||
| 39 | #define JZ4740_GPIO_NUM_B 32 | ||
| 40 | #define JZ4740_GPIO_NUM_C 31 | ||
| 41 | #define JZ4740_GPIO_NUM_D 32 | ||
| 42 | |||
| 43 | #define JZ4740_IRQ_GPIO_BASE_A (JZ4740_IRQ_GPIO(0) + JZ4740_GPIO_BASE_A) | ||
| 44 | #define JZ4740_IRQ_GPIO_BASE_B (JZ4740_IRQ_GPIO(0) + JZ4740_GPIO_BASE_B) | ||
| 45 | #define JZ4740_IRQ_GPIO_BASE_C (JZ4740_IRQ_GPIO(0) + JZ4740_GPIO_BASE_C) | ||
| 46 | #define JZ4740_IRQ_GPIO_BASE_D (JZ4740_IRQ_GPIO(0) + JZ4740_GPIO_BASE_D) | ||
| 47 | |||
| 48 | #define JZ_REG_GPIO_PIN 0x00 | ||
| 49 | #define JZ_REG_GPIO_DATA 0x10 | ||
| 50 | #define JZ_REG_GPIO_DATA_SET 0x14 | ||
| 51 | #define JZ_REG_GPIO_DATA_CLEAR 0x18 | ||
| 52 | #define JZ_REG_GPIO_MASK 0x20 | ||
| 53 | #define JZ_REG_GPIO_MASK_SET 0x24 | ||
| 54 | #define JZ_REG_GPIO_MASK_CLEAR 0x28 | ||
| 55 | #define JZ_REG_GPIO_PULL 0x30 | ||
| 56 | #define JZ_REG_GPIO_PULL_SET 0x34 | ||
| 57 | #define JZ_REG_GPIO_PULL_CLEAR 0x38 | ||
| 58 | #define JZ_REG_GPIO_FUNC 0x40 | ||
| 59 | #define JZ_REG_GPIO_FUNC_SET 0x44 | ||
| 60 | #define JZ_REG_GPIO_FUNC_CLEAR 0x48 | ||
| 61 | #define JZ_REG_GPIO_SELECT 0x50 | ||
| 62 | #define JZ_REG_GPIO_SELECT_SET 0x54 | ||
| 63 | #define JZ_REG_GPIO_SELECT_CLEAR 0x58 | ||
| 64 | #define JZ_REG_GPIO_DIRECTION 0x60 | ||
| 65 | #define JZ_REG_GPIO_DIRECTION_SET 0x64 | ||
| 66 | #define JZ_REG_GPIO_DIRECTION_CLEAR 0x68 | ||
| 67 | #define JZ_REG_GPIO_TRIGGER 0x70 | ||
| 68 | #define JZ_REG_GPIO_TRIGGER_SET 0x74 | ||
| 69 | #define JZ_REG_GPIO_TRIGGER_CLEAR 0x78 | ||
| 70 | #define JZ_REG_GPIO_FLAG 0x80 | ||
| 71 | #define JZ_REG_GPIO_FLAG_CLEAR 0x14 | ||
| 72 | |||
| 73 | #define GPIO_TO_BIT(gpio) BIT(gpio & 0x1f) | ||
| 74 | #define GPIO_TO_REG(gpio, reg) (gpio_to_jz_gpio_chip(gpio)->base + (reg)) | ||
| 75 | #define CHIP_TO_REG(chip, reg) (gpio_chip_to_jz_gpio_chip(chip)->base + (reg)) | ||
| 76 | |||
| 77 | struct jz_gpio_chip { | ||
| 78 | unsigned int irq; | ||
| 79 | unsigned int irq_base; | ||
| 80 | uint32_t wakeup; | ||
| 81 | uint32_t suspend_mask; | ||
| 82 | uint32_t edge_trigger_both; | ||
| 83 | |||
| 84 | void __iomem *base; | ||
| 85 | |||
| 86 | spinlock_t lock; | ||
| 87 | |||
| 88 | struct gpio_chip gpio_chip; | ||
| 89 | struct irq_chip irq_chip; | ||
| 90 | struct sys_device sysdev; | ||
| 91 | }; | ||
| 92 | |||
| 93 | static struct jz_gpio_chip jz4740_gpio_chips[]; | ||
| 94 | |||
| 95 | static inline struct jz_gpio_chip *gpio_to_jz_gpio_chip(unsigned int gpio) | ||
| 96 | { | ||
| 97 | return &jz4740_gpio_chips[gpio >> 5]; | ||
| 98 | } | ||
| 99 | |||
| 100 | static inline struct jz_gpio_chip *gpio_chip_to_jz_gpio_chip(struct gpio_chip *gpio_chip) | ||
| 101 | { | ||
| 102 | return container_of(gpio_chip, struct jz_gpio_chip, gpio_chip); | ||
| 103 | } | ||
| 104 | |||
| 105 | static inline struct jz_gpio_chip *irq_to_jz_gpio_chip(unsigned int irq) | ||
| 106 | { | ||
| 107 | return get_irq_chip_data(irq); | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void jz_gpio_write_bit(unsigned int gpio, unsigned int reg) | ||
| 111 | { | ||
| 112 | writel(GPIO_TO_BIT(gpio), GPIO_TO_REG(gpio, reg)); | ||
| 113 | } | ||
| 114 | |||
| 115 | int jz_gpio_set_function(int gpio, enum jz_gpio_function function) | ||
| 116 | { | ||
| 117 | if (function == JZ_GPIO_FUNC_NONE) { | ||
| 118 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_FUNC_CLEAR); | ||
| 119 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_SELECT_CLEAR); | ||
| 120 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_TRIGGER_CLEAR); | ||
| 121 | } else { | ||
| 122 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_FUNC_SET); | ||
| 123 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_TRIGGER_CLEAR); | ||
| 124 | switch (function) { | ||
| 125 | case JZ_GPIO_FUNC1: | ||
| 126 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_SELECT_CLEAR); | ||
| 127 | break; | ||
| 128 | case JZ_GPIO_FUNC3: | ||
| 129 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_TRIGGER_SET); | ||
| 130 | case JZ_GPIO_FUNC2: /* Falltrough */ | ||
| 131 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_SELECT_SET); | ||
| 132 | break; | ||
| 133 | default: | ||
| 134 | BUG(); | ||
| 135 | break; | ||
| 136 | } | ||
| 137 | } | ||
| 138 | |||
| 139 | return 0; | ||
| 140 | } | ||
| 141 | EXPORT_SYMBOL_GPL(jz_gpio_set_function); | ||
| 142 | |||
| 143 | int jz_gpio_bulk_request(const struct jz_gpio_bulk_request *request, size_t num) | ||
| 144 | { | ||
| 145 | size_t i; | ||
| 146 | int ret; | ||
| 147 | |||
| 148 | for (i = 0; i < num; ++i, ++request) { | ||
| 149 | ret = gpio_request(request->gpio, request->name); | ||
| 150 | if (ret) | ||
| 151 | goto err; | ||
| 152 | jz_gpio_set_function(request->gpio, request->function); | ||
| 153 | } | ||
| 154 | |||
| 155 | return 0; | ||
| 156 | |||
| 157 | err: | ||
| 158 | for (--request; i > 0; --i, --request) { | ||
| 159 | gpio_free(request->gpio); | ||
| 160 | jz_gpio_set_function(request->gpio, JZ_GPIO_FUNC_NONE); | ||
| 161 | } | ||
| 162 | |||
| 163 | return ret; | ||
| 164 | } | ||
| 165 | EXPORT_SYMBOL_GPL(jz_gpio_bulk_request); | ||
| 166 | |||
| 167 | void jz_gpio_bulk_free(const struct jz_gpio_bulk_request *request, size_t num) | ||
| 168 | { | ||
| 169 | size_t i; | ||
| 170 | |||
| 171 | for (i = 0; i < num; ++i, ++request) { | ||
| 172 | gpio_free(request->gpio); | ||
| 173 | jz_gpio_set_function(request->gpio, JZ_GPIO_FUNC_NONE); | ||
| 174 | } | ||
| 175 | |||
| 176 | } | ||
| 177 | EXPORT_SYMBOL_GPL(jz_gpio_bulk_free); | ||
| 178 | |||
| 179 | void jz_gpio_bulk_suspend(const struct jz_gpio_bulk_request *request, size_t num) | ||
| 180 | { | ||
| 181 | size_t i; | ||
| 182 | |||
| 183 | for (i = 0; i < num; ++i, ++request) { | ||
| 184 | jz_gpio_set_function(request->gpio, JZ_GPIO_FUNC_NONE); | ||
| 185 | jz_gpio_write_bit(request->gpio, JZ_REG_GPIO_DIRECTION_CLEAR); | ||
| 186 | jz_gpio_write_bit(request->gpio, JZ_REG_GPIO_PULL_SET); | ||
| 187 | } | ||
| 188 | } | ||
| 189 | EXPORT_SYMBOL_GPL(jz_gpio_bulk_suspend); | ||
| 190 | |||
| 191 | void jz_gpio_bulk_resume(const struct jz_gpio_bulk_request *request, size_t num) | ||
| 192 | { | ||
| 193 | size_t i; | ||
| 194 | |||
| 195 | for (i = 0; i < num; ++i, ++request) | ||
| 196 | jz_gpio_set_function(request->gpio, request->function); | ||
| 197 | } | ||
| 198 | EXPORT_SYMBOL_GPL(jz_gpio_bulk_resume); | ||
| 199 | |||
| 200 | void jz_gpio_enable_pullup(unsigned gpio) | ||
| 201 | { | ||
| 202 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_PULL_CLEAR); | ||
| 203 | } | ||
| 204 | EXPORT_SYMBOL_GPL(jz_gpio_enable_pullup); | ||
| 205 | |||
| 206 | void jz_gpio_disable_pullup(unsigned gpio) | ||
| 207 | { | ||
| 208 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_PULL_SET); | ||
| 209 | } | ||
| 210 | EXPORT_SYMBOL_GPL(jz_gpio_disable_pullup); | ||
| 211 | |||
| 212 | static int jz_gpio_get_value(struct gpio_chip *chip, unsigned gpio) | ||
| 213 | { | ||
| 214 | return !!(readl(CHIP_TO_REG(chip, JZ_REG_GPIO_PIN)) & BIT(gpio)); | ||
| 215 | } | ||
| 216 | |||
| 217 | static void jz_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) | ||
| 218 | { | ||
| 219 | uint32_t __iomem *reg = CHIP_TO_REG(chip, JZ_REG_GPIO_DATA_SET); | ||
| 220 | reg += !value; | ||
| 221 | writel(BIT(gpio), reg); | ||
| 222 | } | ||
| 223 | |||
| 224 | static int jz_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, | ||
| 225 | int value) | ||
| 226 | { | ||
| 227 | writel(BIT(gpio), CHIP_TO_REG(chip, JZ_REG_GPIO_DIRECTION_SET)); | ||
| 228 | jz_gpio_set_value(chip, gpio, value); | ||
| 229 | |||
| 230 | return 0; | ||
| 231 | } | ||
| 232 | |||
| 233 | static int jz_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) | ||
| 234 | { | ||
| 235 | writel(BIT(gpio), CHIP_TO_REG(chip, JZ_REG_GPIO_DIRECTION_CLEAR)); | ||
| 236 | |||
| 237 | return 0; | ||
| 238 | } | ||
| 239 | |||
| 240 | int jz_gpio_port_direction_input(int port, uint32_t mask) | ||
| 241 | { | ||
| 242 | writel(mask, GPIO_TO_REG(port, JZ_REG_GPIO_DIRECTION_CLEAR)); | ||
| 243 | |||
| 244 | return 0; | ||
| 245 | } | ||
| 246 | EXPORT_SYMBOL(jz_gpio_port_direction_input); | ||
| 247 | |||
| 248 | int jz_gpio_port_direction_output(int port, uint32_t mask) | ||
| 249 | { | ||
| 250 | writel(mask, GPIO_TO_REG(port, JZ_REG_GPIO_DIRECTION_SET)); | ||
| 251 | |||
| 252 | return 0; | ||
| 253 | } | ||
| 254 | EXPORT_SYMBOL(jz_gpio_port_direction_output); | ||
| 255 | |||
| 256 | void jz_gpio_port_set_value(int port, uint32_t value, uint32_t mask) | ||
| 257 | { | ||
| 258 | writel(~value & mask, GPIO_TO_REG(port, JZ_REG_GPIO_DATA_CLEAR)); | ||
| 259 | writel(value & mask, GPIO_TO_REG(port, JZ_REG_GPIO_DATA_SET)); | ||
| 260 | } | ||
| 261 | EXPORT_SYMBOL(jz_gpio_port_set_value); | ||
| 262 | |||
| 263 | uint32_t jz_gpio_port_get_value(int port, uint32_t mask) | ||
| 264 | { | ||
| 265 | uint32_t value = readl(GPIO_TO_REG(port, JZ_REG_GPIO_PIN)); | ||
| 266 | |||
| 267 | return value & mask; | ||
| 268 | } | ||
| 269 | EXPORT_SYMBOL(jz_gpio_port_get_value); | ||
| 270 | |||
| 271 | int gpio_to_irq(unsigned gpio) | ||
| 272 | { | ||
| 273 | return JZ4740_IRQ_GPIO(0) + gpio; | ||
| 274 | } | ||
| 275 | EXPORT_SYMBOL_GPL(gpio_to_irq); | ||
| 276 | |||
| 277 | int irq_to_gpio(unsigned irq) | ||
| 278 | { | ||
| 279 | return irq - JZ4740_IRQ_GPIO(0); | ||
| 280 | } | ||
| 281 | EXPORT_SYMBOL_GPL(irq_to_gpio); | ||
| 282 | |||
| 283 | #define IRQ_TO_BIT(irq) BIT(irq_to_gpio(irq) & 0x1f) | ||
| 284 | |||
| 285 | static void jz_gpio_check_trigger_both(struct jz_gpio_chip *chip, unsigned int irq) | ||
| 286 | { | ||
| 287 | uint32_t value; | ||
| 288 | void __iomem *reg; | ||
| 289 | uint32_t mask = IRQ_TO_BIT(irq); | ||
| 290 | |||
| 291 | if (!(chip->edge_trigger_both & mask)) | ||
| 292 | return; | ||
| 293 | |||
| 294 | reg = chip->base; | ||
| 295 | |||
| 296 | value = readl(chip->base + JZ_REG_GPIO_PIN); | ||
| 297 | if (value & mask) | ||
| 298 | reg += JZ_REG_GPIO_DIRECTION_CLEAR; | ||
| 299 | else | ||
| 300 | reg += JZ_REG_GPIO_DIRECTION_SET; | ||
| 301 | |||
| 302 | writel(mask, reg); | ||
| 303 | } | ||
| 304 | |||
| 305 | static void jz_gpio_irq_demux_handler(unsigned int irq, struct irq_desc *desc) | ||
| 306 | { | ||
| 307 | uint32_t flag; | ||
| 308 | unsigned int gpio_irq; | ||
| 309 | unsigned int gpio_bank; | ||
| 310 | struct jz_gpio_chip *chip = get_irq_desc_data(desc); | ||
| 311 | |||
| 312 | gpio_bank = JZ4740_IRQ_GPIO0 - irq; | ||
| 313 | |||
| 314 | flag = readl(chip->base + JZ_REG_GPIO_FLAG); | ||
| 315 | |||
| 316 | if (!flag) | ||
| 317 | return; | ||
| 318 | |||
| 319 | gpio_irq = __fls(flag); | ||
| 320 | |||
| 321 | jz_gpio_check_trigger_both(chip, irq); | ||
| 322 | |||
| 323 | gpio_irq += (gpio_bank << 5) + JZ4740_IRQ_GPIO(0); | ||
| 324 | |||
| 325 | generic_handle_irq(gpio_irq); | ||
| 326 | }; | ||
| 327 | |||
| 328 | static inline void jz_gpio_set_irq_bit(unsigned int irq, unsigned int reg) | ||
| 329 | { | ||
| 330 | struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq); | ||
| 331 | writel(IRQ_TO_BIT(irq), chip->base + reg); | ||
| 332 | } | ||
| 333 | |||
| 334 | static void jz_gpio_irq_mask(unsigned int irq) | ||
| 335 | { | ||
| 336 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_MASK_SET); | ||
| 337 | }; | ||
| 338 | |||
| 339 | static void jz_gpio_irq_unmask(unsigned int irq) | ||
| 340 | { | ||
| 341 | struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq); | ||
| 342 | |||
| 343 | jz_gpio_check_trigger_both(chip, irq); | ||
| 344 | |||
| 345 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_MASK_CLEAR); | ||
| 346 | }; | ||
| 347 | |||
| 348 | /* TODO: Check if function is gpio */ | ||
| 349 | static unsigned int jz_gpio_irq_startup(unsigned int irq) | ||
| 350 | { | ||
| 351 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 352 | |||
| 353 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_SELECT_SET); | ||
| 354 | |||
| 355 | desc->status &= ~IRQ_MASKED; | ||
| 356 | jz_gpio_irq_unmask(irq); | ||
| 357 | |||
| 358 | return 0; | ||
| 359 | } | ||
| 360 | |||
| 361 | static void jz_gpio_irq_shutdown(unsigned int irq) | ||
| 362 | { | ||
| 363 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 364 | |||
| 365 | jz_gpio_irq_mask(irq); | ||
| 366 | desc->status |= IRQ_MASKED; | ||
| 367 | |||
| 368 | /* Set direction to input */ | ||
| 369 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR); | ||
| 370 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_SELECT_CLEAR); | ||
| 371 | } | ||
| 372 | |||
| 373 | static void jz_gpio_irq_ack(unsigned int irq) | ||
| 374 | { | ||
| 375 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_FLAG_CLEAR); | ||
| 376 | }; | ||
| 377 | |||
| 378 | static int jz_gpio_irq_set_type(unsigned int irq, unsigned int flow_type) | ||
| 379 | { | ||
| 380 | struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq); | ||
| 381 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 382 | |||
| 383 | jz_gpio_irq_mask(irq); | ||
| 384 | |||
| 385 | if (flow_type == IRQ_TYPE_EDGE_BOTH) { | ||
| 386 | uint32_t value = readl(chip->base + JZ_REG_GPIO_PIN); | ||
| 387 | if (value & IRQ_TO_BIT(irq)) | ||
| 388 | flow_type = IRQ_TYPE_EDGE_FALLING; | ||
| 389 | else | ||
| 390 | flow_type = IRQ_TYPE_EDGE_RISING; | ||
| 391 | chip->edge_trigger_both |= IRQ_TO_BIT(irq); | ||
| 392 | } else { | ||
| 393 | chip->edge_trigger_both &= ~IRQ_TO_BIT(irq); | ||
| 394 | } | ||
| 395 | |||
| 396 | switch (flow_type) { | ||
| 397 | case IRQ_TYPE_EDGE_RISING: | ||
| 398 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_SET); | ||
| 399 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_SET); | ||
| 400 | break; | ||
| 401 | case IRQ_TYPE_EDGE_FALLING: | ||
| 402 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR); | ||
| 403 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_SET); | ||
| 404 | break; | ||
| 405 | case IRQ_TYPE_LEVEL_HIGH: | ||
| 406 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_SET); | ||
| 407 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_CLEAR); | ||
| 408 | break; | ||
| 409 | case IRQ_TYPE_LEVEL_LOW: | ||
| 410 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR); | ||
| 411 | jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_CLEAR); | ||
| 412 | break; | ||
| 413 | default: | ||
| 414 | return -EINVAL; | ||
| 415 | } | ||
| 416 | |||
| 417 | if (!(desc->status & IRQ_MASKED)) | ||
| 418 | jz_gpio_irq_unmask(irq); | ||
| 419 | |||
| 420 | return 0; | ||
| 421 | } | ||
| 422 | |||
| 423 | static int jz_gpio_irq_set_wake(unsigned int irq, unsigned int on) | ||
| 424 | { | ||
| 425 | struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq); | ||
| 426 | spin_lock(&chip->lock); | ||
| 427 | if (on) | ||
| 428 | chip->wakeup |= IRQ_TO_BIT(irq); | ||
| 429 | else | ||
| 430 | chip->wakeup &= ~IRQ_TO_BIT(irq); | ||
| 431 | spin_unlock(&chip->lock); | ||
| 432 | |||
| 433 | set_irq_wake(chip->irq, on); | ||
| 434 | return 0; | ||
| 435 | } | ||
| 436 | |||
| 437 | /* | ||
| 438 | * This lock class tells lockdep that GPIO irqs are in a different | ||
| 439 | * category than their parents, so it won't report false recursion. | ||
| 440 | */ | ||
| 441 | static struct lock_class_key gpio_lock_class; | ||
| 442 | |||
| 443 | #define JZ4740_GPIO_CHIP(_bank) { \ | ||
| 444 | .irq_base = JZ4740_IRQ_GPIO_BASE_ ## _bank, \ | ||
| 445 | .gpio_chip = { \ | ||
| 446 | .label = "Bank " # _bank, \ | ||
| 447 | .owner = THIS_MODULE, \ | ||
| 448 | .set = jz_gpio_set_value, \ | ||
| 449 | .get = jz_gpio_get_value, \ | ||
| 450 | .direction_output = jz_gpio_direction_output, \ | ||
| 451 | .direction_input = jz_gpio_direction_input, \ | ||
| 452 | .base = JZ4740_GPIO_BASE_ ## _bank, \ | ||
| 453 | .ngpio = JZ4740_GPIO_NUM_ ## _bank, \ | ||
| 454 | }, \ | ||
| 455 | .irq_chip = { \ | ||
| 456 | .name = "GPIO Bank " # _bank, \ | ||
| 457 | .mask = jz_gpio_irq_mask, \ | ||
| 458 | .unmask = jz_gpio_irq_unmask, \ | ||
| 459 | .ack = jz_gpio_irq_ack, \ | ||
| 460 | .startup = jz_gpio_irq_startup, \ | ||
| 461 | .shutdown = jz_gpio_irq_shutdown, \ | ||
| 462 | .set_type = jz_gpio_irq_set_type, \ | ||
| 463 | .set_wake = jz_gpio_irq_set_wake, \ | ||
| 464 | }, \ | ||
| 465 | } | ||
| 466 | |||
| 467 | static struct jz_gpio_chip jz4740_gpio_chips[] = { | ||
| 468 | JZ4740_GPIO_CHIP(A), | ||
| 469 | JZ4740_GPIO_CHIP(B), | ||
| 470 | JZ4740_GPIO_CHIP(C), | ||
| 471 | JZ4740_GPIO_CHIP(D), | ||
| 472 | }; | ||
| 473 | |||
| 474 | static inline struct jz_gpio_chip *sysdev_to_chip(struct sys_device *dev) | ||
| 475 | { | ||
| 476 | return container_of(dev, struct jz_gpio_chip, sysdev); | ||
| 477 | } | ||
| 478 | |||
| 479 | static int jz4740_gpio_suspend(struct sys_device *dev, pm_message_t state) | ||
| 480 | { | ||
| 481 | struct jz_gpio_chip *chip = sysdev_to_chip(dev); | ||
| 482 | |||
| 483 | chip->suspend_mask = readl(chip->base + JZ_REG_GPIO_MASK); | ||
| 484 | writel(~(chip->wakeup), chip->base + JZ_REG_GPIO_MASK_SET); | ||
| 485 | writel(chip->wakeup, chip->base + JZ_REG_GPIO_MASK_CLEAR); | ||
| 486 | |||
| 487 | return 0; | ||
| 488 | } | ||
| 489 | |||
| 490 | static int jz4740_gpio_resume(struct sys_device *dev) | ||
| 491 | { | ||
| 492 | struct jz_gpio_chip *chip = sysdev_to_chip(dev); | ||
| 493 | uint32_t mask = chip->suspend_mask; | ||
| 494 | |||
| 495 | writel(~mask, chip->base + JZ_REG_GPIO_MASK_CLEAR); | ||
| 496 | writel(mask, chip->base + JZ_REG_GPIO_MASK_SET); | ||
| 497 | |||
| 498 | return 0; | ||
| 499 | } | ||
| 500 | |||
| 501 | static struct sysdev_class jz4740_gpio_sysdev_class = { | ||
| 502 | .name = "gpio", | ||
| 503 | .suspend = jz4740_gpio_suspend, | ||
| 504 | .resume = jz4740_gpio_resume, | ||
| 505 | }; | ||
| 506 | |||
| 507 | static int jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id) | ||
| 508 | { | ||
| 509 | int ret, irq; | ||
| 510 | |||
| 511 | chip->sysdev.id = id; | ||
| 512 | chip->sysdev.cls = &jz4740_gpio_sysdev_class; | ||
| 513 | ret = sysdev_register(&chip->sysdev); | ||
| 514 | |||
| 515 | if (ret) | ||
| 516 | return ret; | ||
| 517 | |||
| 518 | spin_lock_init(&chip->lock); | ||
| 519 | |||
| 520 | chip->base = ioremap(JZ4740_GPIO_BASE_ADDR + (id * 0x100), 0x100); | ||
| 521 | |||
| 522 | gpiochip_add(&chip->gpio_chip); | ||
| 523 | |||
| 524 | chip->irq = JZ4740_IRQ_INTC_GPIO(id); | ||
| 525 | set_irq_data(chip->irq, chip); | ||
| 526 | set_irq_chained_handler(chip->irq, jz_gpio_irq_demux_handler); | ||
| 527 | |||
| 528 | for (irq = chip->irq_base; irq < chip->irq_base + chip->gpio_chip.ngpio; ++irq) { | ||
| 529 | lockdep_set_class(&irq_desc[irq].lock, &gpio_lock_class); | ||
| 530 | set_irq_chip_data(irq, chip); | ||
| 531 | set_irq_chip_and_handler(irq, &chip->irq_chip, handle_level_irq); | ||
| 532 | } | ||
| 533 | |||
| 534 | return 0; | ||
| 535 | } | ||
| 536 | |||
| 537 | static int __init jz4740_gpio_init(void) | ||
| 538 | { | ||
| 539 | unsigned int i; | ||
| 540 | int ret; | ||
| 541 | |||
| 542 | ret = sysdev_class_register(&jz4740_gpio_sysdev_class); | ||
| 543 | if (ret) | ||
| 544 | return ret; | ||
| 545 | |||
| 546 | for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); ++i) | ||
| 547 | jz4740_gpio_chip_init(&jz4740_gpio_chips[i], i); | ||
| 548 | |||
| 549 | printk(KERN_INFO "JZ4740 GPIO initalized\n"); | ||
| 550 | |||
| 551 | return 0; | ||
| 552 | } | ||
| 553 | arch_initcall(jz4740_gpio_init); | ||
| 554 | |||
| 555 | #ifdef CONFIG_DEBUG_FS | ||
| 556 | |||
| 557 | static inline void gpio_seq_reg(struct seq_file *s, struct jz_gpio_chip *chip, | ||
| 558 | const char *name, unsigned int reg) | ||
| 559 | { | ||
| 560 | seq_printf(s, "\t%s: %08x\n", name, readl(chip->base + reg)); | ||
| 561 | } | ||
| 562 | |||
| 563 | static int gpio_regs_show(struct seq_file *s, void *unused) | ||
| 564 | { | ||
| 565 | struct jz_gpio_chip *chip = jz4740_gpio_chips; | ||
| 566 | int i; | ||
| 567 | |||
| 568 | for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); ++i, ++chip) { | ||
| 569 | seq_printf(s, "==GPIO %d==\n", i); | ||
| 570 | gpio_seq_reg(s, chip, "Pin", JZ_REG_GPIO_PIN); | ||
| 571 | gpio_seq_reg(s, chip, "Data", JZ_REG_GPIO_DATA); | ||
| 572 | gpio_seq_reg(s, chip, "Mask", JZ_REG_GPIO_MASK); | ||
| 573 | gpio_seq_reg(s, chip, "Pull", JZ_REG_GPIO_PULL); | ||
| 574 | gpio_seq_reg(s, chip, "Func", JZ_REG_GPIO_FUNC); | ||
| 575 | gpio_seq_reg(s, chip, "Select", JZ_REG_GPIO_SELECT); | ||
| 576 | gpio_seq_reg(s, chip, "Direction", JZ_REG_GPIO_DIRECTION); | ||
| 577 | gpio_seq_reg(s, chip, "Trigger", JZ_REG_GPIO_TRIGGER); | ||
| 578 | gpio_seq_reg(s, chip, "Flag", JZ_REG_GPIO_FLAG); | ||
| 579 | } | ||
| 580 | |||
| 581 | return 0; | ||
| 582 | } | ||
| 583 | |||
| 584 | static int gpio_regs_open(struct inode *inode, struct file *file) | ||
| 585 | { | ||
| 586 | return single_open(file, gpio_regs_show, NULL); | ||
| 587 | } | ||
| 588 | |||
| 589 | static const struct file_operations gpio_regs_operations = { | ||
| 590 | .open = gpio_regs_open, | ||
| 591 | .read = seq_read, | ||
| 592 | .llseek = seq_lseek, | ||
| 593 | .release = single_release, | ||
| 594 | }; | ||
| 595 | |||
| 596 | static int __init gpio_debugfs_init(void) | ||
| 597 | { | ||
| 598 | (void) debugfs_create_file("jz_regs_gpio", S_IFREG | S_IRUGO, | ||
| 599 | NULL, NULL, &gpio_regs_operations); | ||
| 600 | return 0; | ||
| 601 | } | ||
| 602 | subsys_initcall(gpio_debugfs_init); | ||
| 603 | |||
| 604 | #endif | ||
diff --git a/arch/mips/jz4740/irq.c b/arch/mips/jz4740/irq.c new file mode 100644 index 000000000000..7d33ff83580f --- /dev/null +++ b/arch/mips/jz4740/irq.c | |||
| @@ -0,0 +1,167 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform IRQ support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/errno.h> | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/types.h> | ||
| 19 | #include <linux/interrupt.h> | ||
| 20 | #include <linux/ioport.h> | ||
| 21 | #include <linux/timex.h> | ||
| 22 | #include <linux/slab.h> | ||
| 23 | #include <linux/delay.h> | ||
| 24 | |||
| 25 | #include <linux/debugfs.h> | ||
| 26 | #include <linux/seq_file.h> | ||
| 27 | |||
| 28 | #include <asm/io.h> | ||
| 29 | #include <asm/mipsregs.h> | ||
| 30 | #include <asm/irq_cpu.h> | ||
| 31 | |||
| 32 | #include <asm/mach-jz4740/base.h> | ||
| 33 | |||
| 34 | static void __iomem *jz_intc_base; | ||
| 35 | static uint32_t jz_intc_wakeup; | ||
| 36 | static uint32_t jz_intc_saved; | ||
| 37 | |||
| 38 | #define JZ_REG_INTC_STATUS 0x00 | ||
| 39 | #define JZ_REG_INTC_MASK 0x04 | ||
| 40 | #define JZ_REG_INTC_SET_MASK 0x08 | ||
| 41 | #define JZ_REG_INTC_CLEAR_MASK 0x0c | ||
| 42 | #define JZ_REG_INTC_PENDING 0x10 | ||
| 43 | |||
| 44 | #define IRQ_BIT(x) BIT((x) - JZ4740_IRQ_BASE) | ||
| 45 | |||
| 46 | static void intc_irq_unmask(unsigned int irq) | ||
| 47 | { | ||
| 48 | writel(IRQ_BIT(irq), jz_intc_base + JZ_REG_INTC_CLEAR_MASK); | ||
| 49 | } | ||
| 50 | |||
| 51 | static void intc_irq_mask(unsigned int irq) | ||
| 52 | { | ||
| 53 | writel(IRQ_BIT(irq), jz_intc_base + JZ_REG_INTC_SET_MASK); | ||
| 54 | } | ||
| 55 | |||
| 56 | static int intc_irq_set_wake(unsigned int irq, unsigned int on) | ||
| 57 | { | ||
| 58 | if (on) | ||
| 59 | jz_intc_wakeup |= IRQ_BIT(irq); | ||
| 60 | else | ||
| 61 | jz_intc_wakeup &= ~IRQ_BIT(irq); | ||
| 62 | |||
| 63 | return 0; | ||
| 64 | } | ||
| 65 | |||
| 66 | static struct irq_chip intc_irq_type = { | ||
| 67 | .name = "INTC", | ||
| 68 | .mask = intc_irq_mask, | ||
| 69 | .mask_ack = intc_irq_mask, | ||
| 70 | .unmask = intc_irq_unmask, | ||
| 71 | .set_wake = intc_irq_set_wake, | ||
| 72 | }; | ||
| 73 | |||
| 74 | static irqreturn_t jz4740_cascade(int irq, void *data) | ||
| 75 | { | ||
| 76 | uint32_t irq_reg; | ||
| 77 | |||
| 78 | irq_reg = readl(jz_intc_base + JZ_REG_INTC_PENDING); | ||
| 79 | |||
| 80 | if (irq_reg) | ||
| 81 | generic_handle_irq(__fls(irq_reg) + JZ4740_IRQ_BASE); | ||
| 82 | |||
| 83 | return IRQ_HANDLED; | ||
| 84 | } | ||
| 85 | |||
| 86 | static struct irqaction jz4740_cascade_action = { | ||
| 87 | .handler = jz4740_cascade, | ||
| 88 | .name = "JZ4740 cascade interrupt", | ||
| 89 | }; | ||
| 90 | |||
| 91 | void __init arch_init_irq(void) | ||
| 92 | { | ||
| 93 | int i; | ||
| 94 | mips_cpu_irq_init(); | ||
| 95 | |||
| 96 | jz_intc_base = ioremap(JZ4740_INTC_BASE_ADDR, 0x14); | ||
| 97 | |||
| 98 | for (i = JZ4740_IRQ_BASE; i < JZ4740_IRQ_BASE + 32; i++) { | ||
| 99 | intc_irq_mask(i); | ||
| 100 | set_irq_chip_and_handler(i, &intc_irq_type, handle_level_irq); | ||
| 101 | } | ||
| 102 | |||
| 103 | setup_irq(2, &jz4740_cascade_action); | ||
| 104 | } | ||
| 105 | |||
| 106 | asmlinkage void plat_irq_dispatch(void) | ||
| 107 | { | ||
| 108 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; | ||
| 109 | if (pending & STATUSF_IP2) | ||
| 110 | do_IRQ(2); | ||
| 111 | else if (pending & STATUSF_IP3) | ||
| 112 | do_IRQ(3); | ||
| 113 | else | ||
| 114 | spurious_interrupt(); | ||
| 115 | } | ||
| 116 | |||
| 117 | void jz4740_intc_suspend(void) | ||
| 118 | { | ||
| 119 | jz_intc_saved = readl(jz_intc_base + JZ_REG_INTC_MASK); | ||
| 120 | writel(~jz_intc_wakeup, jz_intc_base + JZ_REG_INTC_SET_MASK); | ||
| 121 | writel(jz_intc_wakeup, jz_intc_base + JZ_REG_INTC_CLEAR_MASK); | ||
| 122 | } | ||
| 123 | |||
| 124 | void jz4740_intc_resume(void) | ||
| 125 | { | ||
| 126 | writel(~jz_intc_saved, jz_intc_base + JZ_REG_INTC_CLEAR_MASK); | ||
| 127 | writel(jz_intc_saved, jz_intc_base + JZ_REG_INTC_SET_MASK); | ||
| 128 | } | ||
| 129 | |||
| 130 | #ifdef CONFIG_DEBUG_FS | ||
| 131 | |||
| 132 | static inline void intc_seq_reg(struct seq_file *s, const char *name, | ||
| 133 | unsigned int reg) | ||
| 134 | { | ||
| 135 | seq_printf(s, "%s:\t\t%08x\n", name, readl(jz_intc_base + reg)); | ||
| 136 | } | ||
| 137 | |||
| 138 | static int intc_regs_show(struct seq_file *s, void *unused) | ||
| 139 | { | ||
| 140 | intc_seq_reg(s, "Status", JZ_REG_INTC_STATUS); | ||
| 141 | intc_seq_reg(s, "Mask", JZ_REG_INTC_MASK); | ||
| 142 | intc_seq_reg(s, "Pending", JZ_REG_INTC_PENDING); | ||
| 143 | |||
| 144 | return 0; | ||
| 145 | } | ||
| 146 | |||
| 147 | static int intc_regs_open(struct inode *inode, struct file *file) | ||
| 148 | { | ||
| 149 | return single_open(file, intc_regs_show, NULL); | ||
| 150 | } | ||
| 151 | |||
| 152 | static const struct file_operations intc_regs_operations = { | ||
| 153 | .open = intc_regs_open, | ||
| 154 | .read = seq_read, | ||
| 155 | .llseek = seq_lseek, | ||
| 156 | .release = single_release, | ||
| 157 | }; | ||
| 158 | |||
| 159 | static int __init intc_debugfs_init(void) | ||
| 160 | { | ||
| 161 | (void) debugfs_create_file("jz_regs_intc", S_IFREG | S_IRUGO, | ||
| 162 | NULL, NULL, &intc_regs_operations); | ||
| 163 | return 0; | ||
| 164 | } | ||
| 165 | subsys_initcall(intc_debugfs_init); | ||
| 166 | |||
| 167 | #endif | ||
diff --git a/arch/mips/jz4740/irq.h b/arch/mips/jz4740/irq.h new file mode 100644 index 000000000000..56b5eadd1fa2 --- /dev/null +++ b/arch/mips/jz4740/irq.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MIPS_JZ4740_IRQ_H__ | ||
| 16 | #define __MIPS_JZ4740_IRQ_H__ | ||
| 17 | |||
| 18 | extern void jz4740_intc_suspend(void); | ||
| 19 | extern void jz4740_intc_resume(void); | ||
| 20 | |||
| 21 | #endif | ||
diff --git a/arch/mips/jz4740/platform.c b/arch/mips/jz4740/platform.c new file mode 100644 index 000000000000..95bc2b5b14f1 --- /dev/null +++ b/arch/mips/jz4740/platform.c | |||
| @@ -0,0 +1,291 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform devices | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/device.h> | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/kernel.h> | ||
| 19 | #include <linux/platform_device.h> | ||
| 20 | #include <linux/resource.h> | ||
| 21 | |||
| 22 | #include <linux/dma-mapping.h> | ||
| 23 | |||
| 24 | #include <asm/mach-jz4740/platform.h> | ||
| 25 | #include <asm/mach-jz4740/base.h> | ||
| 26 | #include <asm/mach-jz4740/irq.h> | ||
| 27 | |||
| 28 | #include <linux/serial_core.h> | ||
| 29 | #include <linux/serial_8250.h> | ||
| 30 | |||
| 31 | #include "serial.h" | ||
| 32 | #include "clock.h" | ||
| 33 | |||
| 34 | /* OHCI controller */ | ||
| 35 | static struct resource jz4740_usb_ohci_resources[] = { | ||
| 36 | { | ||
| 37 | .start = JZ4740_UHC_BASE_ADDR, | ||
| 38 | .end = JZ4740_UHC_BASE_ADDR + 0x1000 - 1, | ||
| 39 | .flags = IORESOURCE_MEM, | ||
| 40 | }, | ||
| 41 | { | ||
| 42 | .start = JZ4740_IRQ_UHC, | ||
| 43 | .end = JZ4740_IRQ_UHC, | ||
| 44 | .flags = IORESOURCE_IRQ, | ||
| 45 | }, | ||
| 46 | }; | ||
| 47 | |||
| 48 | struct platform_device jz4740_usb_ohci_device = { | ||
| 49 | .name = "jz4740-ohci", | ||
| 50 | .id = -1, | ||
| 51 | .dev = { | ||
| 52 | .dma_mask = &jz4740_usb_ohci_device.dev.coherent_dma_mask, | ||
| 53 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 54 | }, | ||
| 55 | .num_resources = ARRAY_SIZE(jz4740_usb_ohci_resources), | ||
| 56 | .resource = jz4740_usb_ohci_resources, | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* UDC (USB gadget controller) */ | ||
| 60 | static struct resource jz4740_usb_gdt_resources[] = { | ||
| 61 | { | ||
| 62 | .start = JZ4740_UDC_BASE_ADDR, | ||
| 63 | .end = JZ4740_UDC_BASE_ADDR + 0x1000 - 1, | ||
| 64 | .flags = IORESOURCE_MEM, | ||
| 65 | }, | ||
| 66 | { | ||
| 67 | .start = JZ4740_IRQ_UDC, | ||
| 68 | .end = JZ4740_IRQ_UDC, | ||
| 69 | .flags = IORESOURCE_IRQ, | ||
| 70 | }, | ||
| 71 | }; | ||
| 72 | |||
| 73 | struct platform_device jz4740_udc_device = { | ||
| 74 | .name = "jz-udc", | ||
| 75 | .id = -1, | ||
| 76 | .dev = { | ||
| 77 | .dma_mask = &jz4740_udc_device.dev.coherent_dma_mask, | ||
| 78 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 79 | }, | ||
| 80 | .num_resources = ARRAY_SIZE(jz4740_usb_gdt_resources), | ||
| 81 | .resource = jz4740_usb_gdt_resources, | ||
| 82 | }; | ||
| 83 | |||
| 84 | /* MMC/SD controller */ | ||
| 85 | static struct resource jz4740_mmc_resources[] = { | ||
| 86 | { | ||
| 87 | .start = JZ4740_MSC_BASE_ADDR, | ||
| 88 | .end = JZ4740_MSC_BASE_ADDR + 0x1000 - 1, | ||
| 89 | .flags = IORESOURCE_MEM, | ||
| 90 | }, | ||
| 91 | { | ||
| 92 | .start = JZ4740_IRQ_MSC, | ||
| 93 | .end = JZ4740_IRQ_MSC, | ||
| 94 | .flags = IORESOURCE_IRQ, | ||
| 95 | } | ||
| 96 | }; | ||
| 97 | |||
| 98 | struct platform_device jz4740_mmc_device = { | ||
| 99 | .name = "jz4740-mmc", | ||
| 100 | .id = 0, | ||
| 101 | .dev = { | ||
| 102 | .dma_mask = &jz4740_mmc_device.dev.coherent_dma_mask, | ||
| 103 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 104 | }, | ||
| 105 | .num_resources = ARRAY_SIZE(jz4740_mmc_resources), | ||
| 106 | .resource = jz4740_mmc_resources, | ||
| 107 | }; | ||
| 108 | |||
| 109 | /* RTC controller */ | ||
| 110 | static struct resource jz4740_rtc_resources[] = { | ||
| 111 | { | ||
| 112 | .start = JZ4740_RTC_BASE_ADDR, | ||
| 113 | .end = JZ4740_RTC_BASE_ADDR + 0x38 - 1, | ||
| 114 | .flags = IORESOURCE_MEM, | ||
| 115 | }, | ||
| 116 | { | ||
| 117 | .start = JZ4740_IRQ_RTC, | ||
| 118 | .end = JZ4740_IRQ_RTC, | ||
| 119 | .flags = IORESOURCE_IRQ, | ||
| 120 | }, | ||
| 121 | }; | ||
| 122 | |||
| 123 | struct platform_device jz4740_rtc_device = { | ||
| 124 | .name = "jz4740-rtc", | ||
| 125 | .id = -1, | ||
| 126 | .num_resources = ARRAY_SIZE(jz4740_rtc_resources), | ||
| 127 | .resource = jz4740_rtc_resources, | ||
| 128 | }; | ||
| 129 | |||
| 130 | /* I2C controller */ | ||
| 131 | static struct resource jz4740_i2c_resources[] = { | ||
| 132 | { | ||
| 133 | .start = JZ4740_I2C_BASE_ADDR, | ||
| 134 | .end = JZ4740_I2C_BASE_ADDR + 0x1000 - 1, | ||
| 135 | .flags = IORESOURCE_MEM, | ||
| 136 | }, | ||
| 137 | { | ||
| 138 | .start = JZ4740_IRQ_I2C, | ||
| 139 | .end = JZ4740_IRQ_I2C, | ||
| 140 | .flags = IORESOURCE_IRQ, | ||
| 141 | } | ||
| 142 | }; | ||
| 143 | |||
| 144 | struct platform_device jz4740_i2c_device = { | ||
| 145 | .name = "jz4740-i2c", | ||
| 146 | .id = 0, | ||
| 147 | .num_resources = ARRAY_SIZE(jz4740_i2c_resources), | ||
| 148 | .resource = jz4740_i2c_resources, | ||
| 149 | }; | ||
| 150 | |||
| 151 | /* NAND controller */ | ||
| 152 | static struct resource jz4740_nand_resources[] = { | ||
| 153 | { | ||
| 154 | .name = "mmio", | ||
| 155 | .start = JZ4740_EMC_BASE_ADDR, | ||
| 156 | .end = JZ4740_EMC_BASE_ADDR + 0x1000 - 1, | ||
| 157 | .flags = IORESOURCE_MEM, | ||
| 158 | }, | ||
| 159 | { | ||
| 160 | .name = "bank", | ||
| 161 | .start = 0x18000000, | ||
| 162 | .end = 0x180C0000 - 1, | ||
| 163 | .flags = IORESOURCE_MEM, | ||
| 164 | }, | ||
| 165 | }; | ||
| 166 | |||
| 167 | struct platform_device jz4740_nand_device = { | ||
| 168 | .name = "jz4740-nand", | ||
| 169 | .num_resources = ARRAY_SIZE(jz4740_nand_resources), | ||
| 170 | .resource = jz4740_nand_resources, | ||
| 171 | }; | ||
| 172 | |||
| 173 | /* LCD controller */ | ||
| 174 | static struct resource jz4740_framebuffer_resources[] = { | ||
| 175 | { | ||
| 176 | .start = JZ4740_LCD_BASE_ADDR, | ||
| 177 | .end = JZ4740_LCD_BASE_ADDR + 0x1000 - 1, | ||
| 178 | .flags = IORESOURCE_MEM, | ||
| 179 | }, | ||
| 180 | }; | ||
| 181 | |||
| 182 | struct platform_device jz4740_framebuffer_device = { | ||
| 183 | .name = "jz4740-fb", | ||
| 184 | .id = -1, | ||
| 185 | .num_resources = ARRAY_SIZE(jz4740_framebuffer_resources), | ||
| 186 | .resource = jz4740_framebuffer_resources, | ||
| 187 | .dev = { | ||
| 188 | .dma_mask = &jz4740_framebuffer_device.dev.coherent_dma_mask, | ||
| 189 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 190 | }, | ||
| 191 | }; | ||
| 192 | |||
| 193 | /* I2S controller */ | ||
| 194 | static struct resource jz4740_i2s_resources[] = { | ||
| 195 | { | ||
| 196 | .start = JZ4740_AIC_BASE_ADDR, | ||
| 197 | .end = JZ4740_AIC_BASE_ADDR + 0x38 - 1, | ||
| 198 | .flags = IORESOURCE_MEM, | ||
| 199 | }, | ||
| 200 | }; | ||
| 201 | |||
| 202 | struct platform_device jz4740_i2s_device = { | ||
| 203 | .name = "jz4740-i2s", | ||
| 204 | .id = -1, | ||
| 205 | .num_resources = ARRAY_SIZE(jz4740_i2s_resources), | ||
| 206 | .resource = jz4740_i2s_resources, | ||
| 207 | }; | ||
| 208 | |||
| 209 | /* PCM */ | ||
| 210 | struct platform_device jz4740_pcm_device = { | ||
| 211 | .name = "jz4740-pcm", | ||
| 212 | .id = -1, | ||
| 213 | }; | ||
| 214 | |||
| 215 | /* Codec */ | ||
| 216 | static struct resource jz4740_codec_resources[] = { | ||
| 217 | { | ||
| 218 | .start = JZ4740_AIC_BASE_ADDR + 0x80, | ||
| 219 | .end = JZ4740_AIC_BASE_ADDR + 0x88 - 1, | ||
| 220 | .flags = IORESOURCE_MEM, | ||
| 221 | }, | ||
| 222 | }; | ||
| 223 | |||
| 224 | struct platform_device jz4740_codec_device = { | ||
| 225 | .name = "jz4740-codec", | ||
| 226 | .id = -1, | ||
| 227 | .num_resources = ARRAY_SIZE(jz4740_codec_resources), | ||
| 228 | .resource = jz4740_codec_resources, | ||
| 229 | }; | ||
| 230 | |||
| 231 | /* ADC controller */ | ||
| 232 | static struct resource jz4740_adc_resources[] = { | ||
| 233 | { | ||
| 234 | .start = JZ4740_SADC_BASE_ADDR, | ||
| 235 | .end = JZ4740_SADC_BASE_ADDR + 0x30, | ||
| 236 | .flags = IORESOURCE_MEM, | ||
| 237 | }, | ||
| 238 | { | ||
| 239 | .start = JZ4740_IRQ_SADC, | ||
| 240 | .end = JZ4740_IRQ_SADC, | ||
| 241 | .flags = IORESOURCE_IRQ, | ||
| 242 | }, | ||
| 243 | { | ||
| 244 | .start = JZ4740_IRQ_ADC_BASE, | ||
| 245 | .end = JZ4740_IRQ_ADC_BASE, | ||
| 246 | .flags = IORESOURCE_IRQ, | ||
| 247 | }, | ||
| 248 | }; | ||
| 249 | |||
| 250 | struct platform_device jz4740_adc_device = { | ||
| 251 | .name = "jz4740-adc", | ||
| 252 | .id = -1, | ||
| 253 | .num_resources = ARRAY_SIZE(jz4740_adc_resources), | ||
| 254 | .resource = jz4740_adc_resources, | ||
| 255 | }; | ||
| 256 | |||
| 257 | /* Serial */ | ||
| 258 | #define JZ4740_UART_DATA(_id) \ | ||
| 259 | { \ | ||
| 260 | .flags = UPF_SKIP_TEST | UPF_IOREMAP | UPF_FIXED_TYPE, \ | ||
| 261 | .iotype = UPIO_MEM, \ | ||
| 262 | .regshift = 2, \ | ||
| 263 | .serial_out = jz4740_serial_out, \ | ||
| 264 | .type = PORT_16550, \ | ||
| 265 | .mapbase = JZ4740_UART ## _id ## _BASE_ADDR, \ | ||
| 266 | .irq = JZ4740_IRQ_UART ## _id, \ | ||
| 267 | } | ||
| 268 | |||
| 269 | static struct plat_serial8250_port jz4740_uart_data[] = { | ||
| 270 | JZ4740_UART_DATA(0), | ||
| 271 | JZ4740_UART_DATA(1), | ||
| 272 | {}, | ||
| 273 | }; | ||
| 274 | |||
| 275 | static struct platform_device jz4740_uart_device = { | ||
| 276 | .name = "serial8250", | ||
| 277 | .id = 0, | ||
| 278 | .dev = { | ||
| 279 | .platform_data = jz4740_uart_data, | ||
| 280 | }, | ||
| 281 | }; | ||
| 282 | |||
| 283 | void jz4740_serial_device_register(void) | ||
| 284 | { | ||
| 285 | struct plat_serial8250_port *p; | ||
| 286 | |||
| 287 | for (p = jz4740_uart_data; p->flags != 0; ++p) | ||
| 288 | p->uartclk = jz4740_clock_bdata.ext_rate; | ||
| 289 | |||
| 290 | platform_device_register(&jz4740_uart_device); | ||
| 291 | } | ||
diff --git a/arch/mips/jz4740/pm.c b/arch/mips/jz4740/pm.c new file mode 100644 index 000000000000..a9994585424d --- /dev/null +++ b/arch/mips/jz4740/pm.c | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC power management support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/init.h> | ||
| 17 | #include <linux/pm.h> | ||
| 18 | #include <linux/delay.h> | ||
| 19 | #include <linux/suspend.h> | ||
| 20 | |||
| 21 | #include <asm/mach-jz4740/clock.h> | ||
| 22 | |||
| 23 | #include "clock.h" | ||
| 24 | #include "irq.h" | ||
| 25 | |||
| 26 | static int jz4740_pm_enter(suspend_state_t state) | ||
| 27 | { | ||
| 28 | jz4740_intc_suspend(); | ||
| 29 | jz4740_clock_suspend(); | ||
| 30 | |||
| 31 | jz4740_clock_set_wait_mode(JZ4740_WAIT_MODE_SLEEP); | ||
| 32 | |||
| 33 | __asm__(".set\tmips3\n\t" | ||
| 34 | "wait\n\t" | ||
| 35 | ".set\tmips0"); | ||
| 36 | |||
| 37 | jz4740_clock_set_wait_mode(JZ4740_WAIT_MODE_IDLE); | ||
| 38 | |||
| 39 | jz4740_clock_resume(); | ||
| 40 | jz4740_intc_resume(); | ||
| 41 | |||
| 42 | return 0; | ||
| 43 | } | ||
| 44 | |||
| 45 | static struct platform_suspend_ops jz4740_pm_ops = { | ||
| 46 | .valid = suspend_valid_only_mem, | ||
| 47 | .enter = jz4740_pm_enter, | ||
| 48 | }; | ||
| 49 | |||
| 50 | static int __init jz4740_pm_init(void) | ||
| 51 | { | ||
| 52 | suspend_set_ops(&jz4740_pm_ops); | ||
| 53 | return 0; | ||
| 54 | |||
| 55 | } | ||
| 56 | late_initcall(jz4740_pm_init); | ||
diff --git a/arch/mips/jz4740/prom.c b/arch/mips/jz4740/prom.c new file mode 100644 index 000000000000..cfeac15eb2e4 --- /dev/null +++ b/arch/mips/jz4740/prom.c | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC prom code | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/module.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/init.h> | ||
| 19 | #include <linux/string.h> | ||
| 20 | |||
| 21 | #include <linux/serial_reg.h> | ||
| 22 | |||
| 23 | #include <asm/bootinfo.h> | ||
| 24 | #include <asm/mach-jz4740/base.h> | ||
| 25 | |||
| 26 | void jz4740_init_cmdline(int argc, char *argv[]) | ||
| 27 | { | ||
| 28 | unsigned int count = COMMAND_LINE_SIZE - 1; | ||
| 29 | int i; | ||
| 30 | char *dst = &(arcs_cmdline[0]); | ||
| 31 | char *src; | ||
| 32 | |||
| 33 | for (i = 1; i < argc && count; ++i) { | ||
| 34 | src = argv[i]; | ||
| 35 | while (*src && count) { | ||
| 36 | *dst++ = *src++; | ||
| 37 | --count; | ||
| 38 | } | ||
| 39 | *dst++ = ' '; | ||
| 40 | } | ||
| 41 | if (i > 1) | ||
| 42 | --dst; | ||
| 43 | |||
| 44 | *dst = 0; | ||
| 45 | } | ||
| 46 | |||
| 47 | void __init prom_init(void) | ||
| 48 | { | ||
| 49 | jz4740_init_cmdline((int)fw_arg0, (char **)fw_arg1); | ||
| 50 | mips_machtype = MACH_INGENIC_JZ4740; | ||
| 51 | } | ||
| 52 | |||
| 53 | void __init prom_free_prom_memory(void) | ||
| 54 | { | ||
| 55 | } | ||
| 56 | |||
| 57 | #define UART_REG(_reg) ((void __iomem *)CKSEG1ADDR(JZ4740_UART0_BASE_ADDR + (_reg << 2))) | ||
| 58 | |||
| 59 | void prom_putchar(char c) | ||
| 60 | { | ||
| 61 | uint8_t lsr; | ||
| 62 | |||
| 63 | do { | ||
| 64 | lsr = readb(UART_REG(UART_LSR)); | ||
| 65 | } while ((lsr & UART_LSR_TEMT) == 0); | ||
| 66 | |||
| 67 | writeb(c, UART_REG(UART_TX)); | ||
| 68 | } | ||
diff --git a/arch/mips/jz4740/pwm.c b/arch/mips/jz4740/pwm.c new file mode 100644 index 000000000000..a26a6faec9a6 --- /dev/null +++ b/arch/mips/jz4740/pwm.c | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform PWM support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | |||
| 18 | #include <linux/clk.h> | ||
| 19 | #include <linux/err.h> | ||
| 20 | #include <linux/pwm.h> | ||
| 21 | #include <linux/gpio.h> | ||
| 22 | |||
| 23 | #include <asm/mach-jz4740/gpio.h> | ||
| 24 | #include "timer.h" | ||
| 25 | |||
| 26 | static struct clk *jz4740_pwm_clk; | ||
| 27 | |||
| 28 | DEFINE_MUTEX(jz4740_pwm_mutex); | ||
| 29 | |||
| 30 | struct pwm_device { | ||
| 31 | unsigned int id; | ||
| 32 | unsigned int gpio; | ||
| 33 | bool used; | ||
| 34 | }; | ||
| 35 | |||
| 36 | static struct pwm_device jz4740_pwm_list[] = { | ||
| 37 | { 2, JZ_GPIO_PWM2, false }, | ||
| 38 | { 3, JZ_GPIO_PWM3, false }, | ||
| 39 | { 4, JZ_GPIO_PWM4, false }, | ||
| 40 | { 5, JZ_GPIO_PWM5, false }, | ||
| 41 | { 6, JZ_GPIO_PWM6, false }, | ||
| 42 | { 7, JZ_GPIO_PWM7, false }, | ||
| 43 | }; | ||
| 44 | |||
| 45 | struct pwm_device *pwm_request(int id, const char *label) | ||
| 46 | { | ||
| 47 | int ret = 0; | ||
| 48 | struct pwm_device *pwm; | ||
| 49 | |||
| 50 | if (id < 2 || id > 7 || !jz4740_pwm_clk) | ||
| 51 | return ERR_PTR(-ENODEV); | ||
| 52 | |||
| 53 | mutex_lock(&jz4740_pwm_mutex); | ||
| 54 | |||
| 55 | pwm = &jz4740_pwm_list[id - 2]; | ||
| 56 | if (pwm->used) | ||
| 57 | ret = -EBUSY; | ||
| 58 | else | ||
| 59 | pwm->used = true; | ||
| 60 | |||
| 61 | mutex_unlock(&jz4740_pwm_mutex); | ||
| 62 | |||
| 63 | if (ret) | ||
| 64 | return ERR_PTR(ret); | ||
| 65 | |||
| 66 | ret = gpio_request(pwm->gpio, label); | ||
| 67 | |||
| 68 | if (ret) { | ||
| 69 | printk(KERN_ERR "Failed to request pwm gpio: %d\n", ret); | ||
| 70 | pwm->used = false; | ||
| 71 | return ERR_PTR(ret); | ||
| 72 | } | ||
| 73 | |||
| 74 | jz_gpio_set_function(pwm->gpio, JZ_GPIO_FUNC_PWM); | ||
| 75 | |||
| 76 | jz4740_timer_start(id); | ||
| 77 | |||
| 78 | return pwm; | ||
| 79 | } | ||
| 80 | |||
| 81 | void pwm_free(struct pwm_device *pwm) | ||
| 82 | { | ||
| 83 | pwm_disable(pwm); | ||
| 84 | jz4740_timer_set_ctrl(pwm->id, 0); | ||
| 85 | |||
| 86 | jz_gpio_set_function(pwm->gpio, JZ_GPIO_FUNC_NONE); | ||
| 87 | gpio_free(pwm->gpio); | ||
| 88 | |||
| 89 | jz4740_timer_stop(pwm->id); | ||
| 90 | |||
| 91 | pwm->used = false; | ||
| 92 | } | ||
| 93 | |||
| 94 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | ||
| 95 | { | ||
| 96 | unsigned long long tmp; | ||
| 97 | unsigned long period, duty; | ||
| 98 | unsigned int prescaler = 0; | ||
| 99 | unsigned int id = pwm->id; | ||
| 100 | uint16_t ctrl; | ||
| 101 | bool is_enabled; | ||
| 102 | |||
| 103 | if (duty_ns < 0 || duty_ns > period_ns) | ||
| 104 | return -EINVAL; | ||
| 105 | |||
| 106 | tmp = (unsigned long long)clk_get_rate(jz4740_pwm_clk) * period_ns; | ||
| 107 | do_div(tmp, 1000000000); | ||
| 108 | period = tmp; | ||
| 109 | |||
| 110 | while (period > 0xffff && prescaler < 6) { | ||
| 111 | period >>= 2; | ||
| 112 | ++prescaler; | ||
| 113 | } | ||
| 114 | |||
| 115 | if (prescaler == 6) | ||
| 116 | return -EINVAL; | ||
| 117 | |||
| 118 | tmp = (unsigned long long)period * duty_ns; | ||
| 119 | do_div(tmp, period_ns); | ||
| 120 | duty = period - tmp; | ||
| 121 | |||
| 122 | if (duty >= period) | ||
| 123 | duty = period - 1; | ||
| 124 | |||
| 125 | is_enabled = jz4740_timer_is_enabled(id); | ||
| 126 | if (is_enabled) | ||
| 127 | pwm_disable(pwm); | ||
| 128 | |||
| 129 | jz4740_timer_set_count(id, 0); | ||
| 130 | jz4740_timer_set_duty(id, duty); | ||
| 131 | jz4740_timer_set_period(id, period); | ||
| 132 | |||
| 133 | ctrl = JZ_TIMER_CTRL_PRESCALER(prescaler) | JZ_TIMER_CTRL_SRC_EXT | | ||
| 134 | JZ_TIMER_CTRL_PWM_ABBRUPT_SHUTDOWN; | ||
| 135 | |||
| 136 | jz4740_timer_set_ctrl(id, ctrl); | ||
| 137 | |||
| 138 | if (is_enabled) | ||
| 139 | pwm_enable(pwm); | ||
| 140 | |||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | |||
| 144 | int pwm_enable(struct pwm_device *pwm) | ||
| 145 | { | ||
| 146 | uint32_t ctrl = jz4740_timer_get_ctrl(pwm->id); | ||
| 147 | |||
| 148 | ctrl |= JZ_TIMER_CTRL_PWM_ENABLE; | ||
| 149 | jz4740_timer_set_ctrl(pwm->id, ctrl); | ||
| 150 | jz4740_timer_enable(pwm->id); | ||
| 151 | |||
| 152 | return 0; | ||
| 153 | } | ||
| 154 | |||
| 155 | void pwm_disable(struct pwm_device *pwm) | ||
| 156 | { | ||
| 157 | uint32_t ctrl = jz4740_timer_get_ctrl(pwm->id); | ||
| 158 | |||
| 159 | ctrl &= ~JZ_TIMER_CTRL_PWM_ENABLE; | ||
| 160 | jz4740_timer_disable(pwm->id); | ||
| 161 | jz4740_timer_set_ctrl(pwm->id, ctrl); | ||
| 162 | } | ||
| 163 | |||
| 164 | static int __init jz4740_pwm_init(void) | ||
| 165 | { | ||
| 166 | int ret = 0; | ||
| 167 | |||
| 168 | jz4740_pwm_clk = clk_get(NULL, "ext"); | ||
| 169 | |||
| 170 | if (IS_ERR(jz4740_pwm_clk)) { | ||
| 171 | ret = PTR_ERR(jz4740_pwm_clk); | ||
| 172 | jz4740_pwm_clk = NULL; | ||
| 173 | } | ||
| 174 | |||
| 175 | return ret; | ||
| 176 | } | ||
| 177 | subsys_initcall(jz4740_pwm_init); | ||
diff --git a/arch/mips/jz4740/reset.c b/arch/mips/jz4740/reset.c new file mode 100644 index 000000000000..5f1fb95c0d0d --- /dev/null +++ b/arch/mips/jz4740/reset.c | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/pm.h> | ||
| 18 | |||
| 19 | #include <asm/reboot.h> | ||
| 20 | |||
| 21 | #include <asm/mach-jz4740/base.h> | ||
| 22 | #include <asm/mach-jz4740/timer.h> | ||
| 23 | |||
| 24 | static void jz4740_halt(void) | ||
| 25 | { | ||
| 26 | while (1) { | ||
| 27 | __asm__(".set push;\n" | ||
| 28 | ".set mips3;\n" | ||
| 29 | "wait;\n" | ||
| 30 | ".set pop;\n" | ||
| 31 | ); | ||
| 32 | } | ||
| 33 | } | ||
| 34 | |||
| 35 | #define JZ_REG_WDT_DATA 0x00 | ||
| 36 | #define JZ_REG_WDT_COUNTER_ENABLE 0x04 | ||
| 37 | #define JZ_REG_WDT_COUNTER 0x08 | ||
| 38 | #define JZ_REG_WDT_CTRL 0x0c | ||
| 39 | |||
| 40 | static void jz4740_restart(char *command) | ||
| 41 | { | ||
| 42 | void __iomem *wdt_base = ioremap(JZ4740_WDT_BASE_ADDR, 0x0f); | ||
| 43 | |||
| 44 | jz4740_timer_enable_watchdog(); | ||
| 45 | |||
| 46 | writeb(0, wdt_base + JZ_REG_WDT_COUNTER_ENABLE); | ||
| 47 | |||
| 48 | writew(0, wdt_base + JZ_REG_WDT_COUNTER); | ||
| 49 | writew(0, wdt_base + JZ_REG_WDT_DATA); | ||
| 50 | writew(BIT(2), wdt_base + JZ_REG_WDT_CTRL); | ||
| 51 | |||
| 52 | writeb(1, wdt_base + JZ_REG_WDT_COUNTER_ENABLE); | ||
| 53 | jz4740_halt(); | ||
| 54 | } | ||
| 55 | |||
| 56 | #define JZ_REG_RTC_CTRL 0x00 | ||
| 57 | #define JZ_REG_RTC_HIBERNATE 0x20 | ||
| 58 | |||
| 59 | #define JZ_RTC_CTRL_WRDY BIT(7) | ||
| 60 | |||
| 61 | static void jz4740_power_off(void) | ||
| 62 | { | ||
| 63 | void __iomem *rtc_base = ioremap(JZ4740_RTC_BASE_ADDR, 0x24); | ||
| 64 | uint32_t ctrl; | ||
| 65 | |||
| 66 | do { | ||
| 67 | ctrl = readl(rtc_base + JZ_REG_RTC_CTRL); | ||
| 68 | } while (!(ctrl & JZ_RTC_CTRL_WRDY)); | ||
| 69 | |||
| 70 | writel(1, rtc_base + JZ_REG_RTC_HIBERNATE); | ||
| 71 | jz4740_halt(); | ||
| 72 | } | ||
| 73 | |||
| 74 | void jz4740_reset_init(void) | ||
| 75 | { | ||
| 76 | _machine_restart = jz4740_restart; | ||
| 77 | _machine_halt = jz4740_halt; | ||
| 78 | pm_power_off = jz4740_power_off; | ||
| 79 | } | ||
diff --git a/arch/mips/jz4740/reset.h b/arch/mips/jz4740/reset.h new file mode 100644 index 000000000000..5202ab4ad9db --- /dev/null +++ b/arch/mips/jz4740/reset.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __MIPS_JZ4740_RESET_H__ | ||
| 2 | #define __MIPS_JZ4740_RESET_H__ | ||
| 3 | |||
| 4 | extern void jz4740_reset_init(void); | ||
| 5 | |||
| 6 | #endif | ||
diff --git a/arch/mips/jz4740/serial.c b/arch/mips/jz4740/serial.c new file mode 100644 index 000000000000..d23de45826d1 --- /dev/null +++ b/arch/mips/jz4740/serial.c | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 serial support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/io.h> | ||
| 17 | #include <linux/serial_core.h> | ||
| 18 | #include <linux/serial_reg.h> | ||
| 19 | |||
| 20 | void jz4740_serial_out(struct uart_port *p, int offset, int value) | ||
| 21 | { | ||
| 22 | switch (offset) { | ||
| 23 | case UART_FCR: | ||
| 24 | value |= 0x10; /* Enable uart module */ | ||
| 25 | break; | ||
| 26 | case UART_IER: | ||
| 27 | value |= (value & 0x4) << 2; | ||
| 28 | break; | ||
| 29 | default: | ||
| 30 | break; | ||
| 31 | } | ||
| 32 | writeb(value, p->membase + (offset << p->regshift)); | ||
| 33 | } | ||
diff --git a/arch/mips/jz4740/serial.h b/arch/mips/jz4740/serial.h new file mode 100644 index 000000000000..b9fe3ade0289 --- /dev/null +++ b/arch/mips/jz4740/serial.h | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 serial support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __MIPS_JZ4740_SERIAL_H__ | ||
| 17 | |||
| 18 | void jz4740_serial_out(struct uart_port *p, int offset, int value); | ||
| 19 | |||
| 20 | #endif | ||
diff --git a/arch/mips/jz4740/setup.c b/arch/mips/jz4740/setup.c new file mode 100644 index 000000000000..6a9e14dab91e --- /dev/null +++ b/arch/mips/jz4740/setup.c | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 setup code | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/init.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | |||
| 19 | #include "reset.h" | ||
| 20 | |||
| 21 | void __init plat_mem_setup(void) | ||
| 22 | { | ||
| 23 | jz4740_reset_init(); | ||
| 24 | } | ||
| 25 | |||
| 26 | const char *get_system_type(void) | ||
| 27 | { | ||
| 28 | return "JZ4740"; | ||
| 29 | } | ||
diff --git a/arch/mips/jz4740/time.c b/arch/mips/jz4740/time.c new file mode 100644 index 000000000000..fe01678d94fd --- /dev/null +++ b/arch/mips/jz4740/time.c | |||
| @@ -0,0 +1,144 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform time support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/interrupt.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/time.h> | ||
| 19 | |||
| 20 | #include <linux/clockchips.h> | ||
| 21 | |||
| 22 | #include <asm/mach-jz4740/irq.h> | ||
| 23 | #include <asm/time.h> | ||
| 24 | |||
| 25 | #include "clock.h" | ||
| 26 | #include "timer.h" | ||
| 27 | |||
| 28 | #define TIMER_CLOCKEVENT 0 | ||
| 29 | #define TIMER_CLOCKSOURCE 1 | ||
| 30 | |||
| 31 | static uint16_t jz4740_jiffies_per_tick; | ||
| 32 | |||
| 33 | static cycle_t jz4740_clocksource_read(struct clocksource *cs) | ||
| 34 | { | ||
| 35 | return jz4740_timer_get_count(TIMER_CLOCKSOURCE); | ||
| 36 | } | ||
| 37 | |||
| 38 | static struct clocksource jz4740_clocksource = { | ||
| 39 | .name = "jz4740-timer", | ||
| 40 | .rating = 200, | ||
| 41 | .read = jz4740_clocksource_read, | ||
| 42 | .mask = CLOCKSOURCE_MASK(16), | ||
| 43 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | ||
| 44 | }; | ||
| 45 | |||
| 46 | static irqreturn_t jz4740_clockevent_irq(int irq, void *devid) | ||
| 47 | { | ||
| 48 | struct clock_event_device *cd = devid; | ||
| 49 | |||
| 50 | jz4740_timer_ack_full(TIMER_CLOCKEVENT); | ||
| 51 | |||
| 52 | if (cd->mode != CLOCK_EVT_MODE_PERIODIC) | ||
| 53 | jz4740_timer_disable(TIMER_CLOCKEVENT); | ||
| 54 | |||
| 55 | cd->event_handler(cd); | ||
| 56 | |||
| 57 | return IRQ_HANDLED; | ||
| 58 | } | ||
| 59 | |||
| 60 | static void jz4740_clockevent_set_mode(enum clock_event_mode mode, | ||
| 61 | struct clock_event_device *cd) | ||
| 62 | { | ||
| 63 | switch (mode) { | ||
| 64 | case CLOCK_EVT_MODE_PERIODIC: | ||
| 65 | jz4740_timer_set_count(TIMER_CLOCKEVENT, 0); | ||
| 66 | jz4740_timer_set_period(TIMER_CLOCKEVENT, jz4740_jiffies_per_tick); | ||
| 67 | case CLOCK_EVT_MODE_RESUME: | ||
| 68 | jz4740_timer_irq_full_enable(TIMER_CLOCKEVENT); | ||
| 69 | jz4740_timer_enable(TIMER_CLOCKEVENT); | ||
| 70 | break; | ||
| 71 | case CLOCK_EVT_MODE_ONESHOT: | ||
| 72 | case CLOCK_EVT_MODE_SHUTDOWN: | ||
| 73 | jz4740_timer_disable(TIMER_CLOCKEVENT); | ||
| 74 | break; | ||
| 75 | default: | ||
| 76 | break; | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 80 | static int jz4740_clockevent_set_next(unsigned long evt, | ||
| 81 | struct clock_event_device *cd) | ||
| 82 | { | ||
| 83 | jz4740_timer_set_count(TIMER_CLOCKEVENT, 0); | ||
| 84 | jz4740_timer_set_period(TIMER_CLOCKEVENT, evt); | ||
| 85 | jz4740_timer_enable(TIMER_CLOCKEVENT); | ||
| 86 | |||
| 87 | return 0; | ||
| 88 | } | ||
| 89 | |||
| 90 | static struct clock_event_device jz4740_clockevent = { | ||
| 91 | .name = "jz4740-timer", | ||
| 92 | .features = CLOCK_EVT_FEAT_PERIODIC, | ||
| 93 | .set_next_event = jz4740_clockevent_set_next, | ||
| 94 | .set_mode = jz4740_clockevent_set_mode, | ||
| 95 | .rating = 200, | ||
| 96 | .irq = JZ4740_IRQ_TCU0, | ||
| 97 | }; | ||
| 98 | |||
| 99 | static struct irqaction timer_irqaction = { | ||
| 100 | .handler = jz4740_clockevent_irq, | ||
| 101 | .flags = IRQF_PERCPU | IRQF_TIMER, | ||
| 102 | .name = "jz4740-timerirq", | ||
| 103 | .dev_id = &jz4740_clockevent, | ||
| 104 | }; | ||
| 105 | |||
| 106 | void __init plat_time_init(void) | ||
| 107 | { | ||
| 108 | int ret; | ||
| 109 | uint32_t clk_rate; | ||
| 110 | uint16_t ctrl; | ||
| 111 | |||
| 112 | jz4740_timer_init(); | ||
| 113 | |||
| 114 | clk_rate = jz4740_clock_bdata.ext_rate >> 4; | ||
| 115 | jz4740_jiffies_per_tick = DIV_ROUND_CLOSEST(clk_rate, HZ); | ||
| 116 | |||
| 117 | clockevent_set_clock(&jz4740_clockevent, clk_rate); | ||
| 118 | jz4740_clockevent.min_delta_ns = clockevent_delta2ns(100, &jz4740_clockevent); | ||
| 119 | jz4740_clockevent.max_delta_ns = clockevent_delta2ns(0xffff, &jz4740_clockevent); | ||
| 120 | jz4740_clockevent.cpumask = cpumask_of(0); | ||
| 121 | |||
| 122 | clockevents_register_device(&jz4740_clockevent); | ||
| 123 | |||
| 124 | clocksource_set_clock(&jz4740_clocksource, clk_rate); | ||
| 125 | ret = clocksource_register(&jz4740_clocksource); | ||
| 126 | |||
| 127 | if (ret) | ||
| 128 | printk(KERN_ERR "Failed to register clocksource: %d\n", ret); | ||
| 129 | |||
| 130 | setup_irq(JZ4740_IRQ_TCU0, &timer_irqaction); | ||
| 131 | |||
| 132 | ctrl = JZ_TIMER_CTRL_PRESCALE_16 | JZ_TIMER_CTRL_SRC_EXT; | ||
| 133 | |||
| 134 | jz4740_timer_set_ctrl(TIMER_CLOCKEVENT, ctrl); | ||
| 135 | jz4740_timer_set_ctrl(TIMER_CLOCKSOURCE, ctrl); | ||
| 136 | |||
| 137 | jz4740_timer_set_period(TIMER_CLOCKEVENT, jz4740_jiffies_per_tick); | ||
| 138 | jz4740_timer_irq_full_enable(TIMER_CLOCKEVENT); | ||
| 139 | |||
| 140 | jz4740_timer_set_period(TIMER_CLOCKSOURCE, 0xffff); | ||
| 141 | |||
| 142 | jz4740_timer_enable(TIMER_CLOCKEVENT); | ||
| 143 | jz4740_timer_enable(TIMER_CLOCKSOURCE); | ||
| 144 | } | ||
diff --git a/arch/mips/jz4740/timer.c b/arch/mips/jz4740/timer.c new file mode 100644 index 000000000000..b2c015129055 --- /dev/null +++ b/arch/mips/jz4740/timer.c | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform timer support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/io.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | |||
| 20 | #include "timer.h" | ||
| 21 | |||
| 22 | #include <asm/mach-jz4740/base.h> | ||
| 23 | |||
| 24 | void __iomem *jz4740_timer_base; | ||
| 25 | |||
| 26 | void jz4740_timer_enable_watchdog(void) | ||
| 27 | { | ||
| 28 | writel(BIT(16), jz4740_timer_base + JZ_REG_TIMER_STOP_CLEAR); | ||
| 29 | } | ||
| 30 | |||
| 31 | void jz4740_timer_disable_watchdog(void) | ||
| 32 | { | ||
| 33 | writel(BIT(16), jz4740_timer_base + JZ_REG_TIMER_STOP_SET); | ||
| 34 | } | ||
| 35 | |||
| 36 | void __init jz4740_timer_init(void) | ||
| 37 | { | ||
| 38 | jz4740_timer_base = ioremap(JZ4740_TCU_BASE_ADDR, 0x100); | ||
| 39 | |||
| 40 | if (!jz4740_timer_base) | ||
| 41 | panic("Failed to ioremap timer registers"); | ||
| 42 | |||
| 43 | /* Disable all timer clocks except for those used as system timers */ | ||
| 44 | writel(0x000100fc, jz4740_timer_base + JZ_REG_TIMER_STOP_SET); | ||
| 45 | |||
| 46 | /* Timer irqs are unmasked by default, mask them */ | ||
| 47 | writel(0x00ff00ff, jz4740_timer_base + JZ_REG_TIMER_MASK_SET); | ||
| 48 | } | ||
diff --git a/arch/mips/jz4740/timer.h b/arch/mips/jz4740/timer.h new file mode 100644 index 000000000000..fca3994f2e6d --- /dev/null +++ b/arch/mips/jz4740/timer.h | |||
| @@ -0,0 +1,136 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 platform timer support | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __MIPS_JZ4740_TIMER_H__ | ||
| 17 | #define __MIPS_JZ4740_TIMER_H__ | ||
| 18 | |||
| 19 | #include <linux/module.h> | ||
| 20 | #include <linux/io.h> | ||
| 21 | |||
| 22 | #define JZ_REG_TIMER_STOP 0x0C | ||
| 23 | #define JZ_REG_TIMER_STOP_SET 0x1C | ||
| 24 | #define JZ_REG_TIMER_STOP_CLEAR 0x2C | ||
| 25 | #define JZ_REG_TIMER_ENABLE 0x00 | ||
| 26 | #define JZ_REG_TIMER_ENABLE_SET 0x04 | ||
| 27 | #define JZ_REG_TIMER_ENABLE_CLEAR 0x08 | ||
| 28 | #define JZ_REG_TIMER_FLAG 0x10 | ||
| 29 | #define JZ_REG_TIMER_FLAG_SET 0x14 | ||
| 30 | #define JZ_REG_TIMER_FLAG_CLEAR 0x18 | ||
| 31 | #define JZ_REG_TIMER_MASK 0x20 | ||
| 32 | #define JZ_REG_TIMER_MASK_SET 0x24 | ||
| 33 | #define JZ_REG_TIMER_MASK_CLEAR 0x28 | ||
| 34 | |||
| 35 | #define JZ_REG_TIMER_DFR(x) (((x) * 0x10) + 0x30) | ||
| 36 | #define JZ_REG_TIMER_DHR(x) (((x) * 0x10) + 0x34) | ||
| 37 | #define JZ_REG_TIMER_CNT(x) (((x) * 0x10) + 0x38) | ||
| 38 | #define JZ_REG_TIMER_CTRL(x) (((x) * 0x10) + 0x3C) | ||
| 39 | |||
| 40 | #define JZ_TIMER_IRQ_HALF(x) BIT((x) + 0x10) | ||
| 41 | #define JZ_TIMER_IRQ_FULL(x) BIT(x) | ||
| 42 | |||
| 43 | #define JZ_TIMER_CTRL_PWM_ABBRUPT_SHUTDOWN BIT(9) | ||
| 44 | #define JZ_TIMER_CTRL_PWM_ACTIVE_LOW BIT(8) | ||
| 45 | #define JZ_TIMER_CTRL_PWM_ENABLE BIT(7) | ||
| 46 | #define JZ_TIMER_CTRL_PRESCALE_MASK 0x1c | ||
| 47 | #define JZ_TIMER_CTRL_PRESCALE_OFFSET 0x3 | ||
| 48 | #define JZ_TIMER_CTRL_PRESCALE_1 (0 << 3) | ||
| 49 | #define JZ_TIMER_CTRL_PRESCALE_4 (1 << 3) | ||
| 50 | #define JZ_TIMER_CTRL_PRESCALE_16 (2 << 3) | ||
| 51 | #define JZ_TIMER_CTRL_PRESCALE_64 (3 << 3) | ||
| 52 | #define JZ_TIMER_CTRL_PRESCALE_256 (4 << 3) | ||
| 53 | #define JZ_TIMER_CTRL_PRESCALE_1024 (5 << 3) | ||
| 54 | |||
| 55 | #define JZ_TIMER_CTRL_PRESCALER(x) ((x) << JZ_TIMER_CTRL_PRESCALE_OFFSET) | ||
| 56 | |||
| 57 | #define JZ_TIMER_CTRL_SRC_EXT BIT(2) | ||
| 58 | #define JZ_TIMER_CTRL_SRC_RTC BIT(1) | ||
| 59 | #define JZ_TIMER_CTRL_SRC_PCLK BIT(0) | ||
| 60 | |||
| 61 | extern void __iomem *jz4740_timer_base; | ||
| 62 | void __init jz4740_timer_init(void); | ||
| 63 | |||
| 64 | static inline void jz4740_timer_stop(unsigned int timer) | ||
| 65 | { | ||
| 66 | writel(BIT(timer), jz4740_timer_base + JZ_REG_TIMER_STOP_SET); | ||
| 67 | } | ||
| 68 | |||
| 69 | static inline void jz4740_timer_start(unsigned int timer) | ||
| 70 | { | ||
| 71 | writel(BIT(timer), jz4740_timer_base + JZ_REG_TIMER_STOP_CLEAR); | ||
| 72 | } | ||
| 73 | |||
| 74 | static inline bool jz4740_timer_is_enabled(unsigned int timer) | ||
| 75 | { | ||
| 76 | return readb(jz4740_timer_base + JZ_REG_TIMER_ENABLE) & BIT(timer); | ||
| 77 | } | ||
| 78 | |||
| 79 | static inline void jz4740_timer_enable(unsigned int timer) | ||
| 80 | { | ||
| 81 | writeb(BIT(timer), jz4740_timer_base + JZ_REG_TIMER_ENABLE_SET); | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void jz4740_timer_disable(unsigned int timer) | ||
| 85 | { | ||
| 86 | writeb(BIT(timer), jz4740_timer_base + JZ_REG_TIMER_ENABLE_CLEAR); | ||
| 87 | } | ||
| 88 | |||
| 89 | |||
| 90 | static inline void jz4740_timer_set_period(unsigned int timer, uint16_t period) | ||
| 91 | { | ||
| 92 | writew(period, jz4740_timer_base + JZ_REG_TIMER_DFR(timer)); | ||
| 93 | } | ||
| 94 | |||
| 95 | static inline void jz4740_timer_set_duty(unsigned int timer, uint16_t duty) | ||
| 96 | { | ||
| 97 | writew(duty, jz4740_timer_base + JZ_REG_TIMER_DHR(timer)); | ||
| 98 | } | ||
| 99 | |||
| 100 | static inline void jz4740_timer_set_count(unsigned int timer, uint16_t count) | ||
| 101 | { | ||
| 102 | writew(count, jz4740_timer_base + JZ_REG_TIMER_CNT(timer)); | ||
| 103 | } | ||
| 104 | |||
| 105 | static inline uint16_t jz4740_timer_get_count(unsigned int timer) | ||
| 106 | { | ||
| 107 | return readw(jz4740_timer_base + JZ_REG_TIMER_CNT(timer)); | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void jz4740_timer_ack_full(unsigned int timer) | ||
| 111 | { | ||
| 112 | writel(JZ_TIMER_IRQ_FULL(timer), jz4740_timer_base + JZ_REG_TIMER_FLAG_CLEAR); | ||
| 113 | } | ||
| 114 | |||
| 115 | static inline void jz4740_timer_irq_full_enable(unsigned int timer) | ||
| 116 | { | ||
| 117 | writel(JZ_TIMER_IRQ_FULL(timer), jz4740_timer_base + JZ_REG_TIMER_FLAG_CLEAR); | ||
| 118 | writel(JZ_TIMER_IRQ_FULL(timer), jz4740_timer_base + JZ_REG_TIMER_MASK_CLEAR); | ||
| 119 | } | ||
| 120 | |||
| 121 | static inline void jz4740_timer_irq_full_disable(unsigned int timer) | ||
| 122 | { | ||
| 123 | writel(JZ_TIMER_IRQ_FULL(timer), jz4740_timer_base + JZ_REG_TIMER_MASK_SET); | ||
| 124 | } | ||
| 125 | |||
| 126 | static inline void jz4740_timer_set_ctrl(unsigned int timer, uint16_t ctrl) | ||
| 127 | { | ||
| 128 | writew(ctrl, jz4740_timer_base + JZ_REG_TIMER_CTRL(timer)); | ||
| 129 | } | ||
| 130 | |||
| 131 | static inline uint16_t jz4740_timer_get_ctrl(unsigned int timer) | ||
| 132 | { | ||
| 133 | return readw(jz4740_timer_base + JZ_REG_TIMER_CTRL(timer)); | ||
| 134 | } | ||
| 135 | |||
| 136 | #endif | ||
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile index 7a6ac501cbb5..06f848299785 100644 --- a/arch/mips/kernel/Makefile +++ b/arch/mips/kernel/Makefile | |||
| @@ -76,6 +76,7 @@ obj-$(CONFIG_IRQ_TXX9) += irq_txx9.o | |||
| 76 | obj-$(CONFIG_IRQ_GT641XX) += irq-gt641xx.o | 76 | obj-$(CONFIG_IRQ_GT641XX) += irq-gt641xx.o |
| 77 | obj-$(CONFIG_IRQ_GIC) += irq-gic.o | 77 | obj-$(CONFIG_IRQ_GIC) += irq-gic.o |
| 78 | 78 | ||
| 79 | obj-$(CONFIG_KPROBES) += kprobes.o | ||
| 79 | obj-$(CONFIG_32BIT) += scall32-o32.o | 80 | obj-$(CONFIG_32BIT) += scall32-o32.o |
| 80 | obj-$(CONFIG_64BIT) += scall64-64.o | 81 | obj-$(CONFIG_64BIT) += scall64-64.o |
| 81 | obj-$(CONFIG_MIPS32_COMPAT) += linux32.o ptrace32.o signal32.o | 82 | obj-$(CONFIG_MIPS32_COMPAT) += linux32.o ptrace32.o signal32.o |
| @@ -101,6 +102,4 @@ obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT) += 8250-platform.o | |||
| 101 | 102 | ||
| 102 | obj-$(CONFIG_MIPS_CPUFREQ) += cpufreq/ | 103 | obj-$(CONFIG_MIPS_CPUFREQ) += cpufreq/ |
| 103 | 104 | ||
| 104 | EXTRA_CFLAGS += -Werror | ||
| 105 | |||
| 106 | CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS) | 105 | CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS) |
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index ca6c83218caa..6b30fb2caa67 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
| @@ -126,7 +126,6 @@ void output_thread_defines(void) | |||
| 126 | thread.cp0_baduaddr); | 126 | thread.cp0_baduaddr); |
| 127 | OFFSET(THREAD_ECODE, task_struct, \ | 127 | OFFSET(THREAD_ECODE, task_struct, \ |
| 128 | thread.error_code); | 128 | thread.error_code); |
| 129 | OFFSET(THREAD_TRAPNO, task_struct, thread.trap_no); | ||
| 130 | OFFSET(THREAD_TRAMP, task_struct, \ | 129 | OFFSET(THREAD_TRAMP, task_struct, \ |
| 131 | thread.irix_trampoline); | 130 | thread.irix_trampoline); |
| 132 | OFFSET(THREAD_OLDCTX, task_struct, \ | 131 | OFFSET(THREAD_OLDCTX, task_struct, \ |
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 0b2450ceb13f..2a4d50ff5e2c 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c | |||
| @@ -163,7 +163,6 @@ int c0_compare_int_usable(void) | |||
| 163 | 163 | ||
| 164 | int __cpuinit r4k_clockevent_init(void) | 164 | int __cpuinit r4k_clockevent_init(void) |
| 165 | { | 165 | { |
| 166 | uint64_t mips_freq = mips_hpt_frequency; | ||
| 167 | unsigned int cpu = smp_processor_id(); | 166 | unsigned int cpu = smp_processor_id(); |
| 168 | struct clock_event_device *cd; | 167 | struct clock_event_device *cd; |
| 169 | unsigned int irq; | 168 | unsigned int irq; |
| @@ -188,9 +187,9 @@ int __cpuinit r4k_clockevent_init(void) | |||
| 188 | cd->name = "MIPS"; | 187 | cd->name = "MIPS"; |
| 189 | cd->features = CLOCK_EVT_FEAT_ONESHOT; | 188 | cd->features = CLOCK_EVT_FEAT_ONESHOT; |
| 190 | 189 | ||
| 190 | clockevent_set_clock(cd, mips_hpt_frequency); | ||
| 191 | |||
| 191 | /* Calculate the min / max delta */ | 192 | /* Calculate the min / max delta */ |
| 192 | cd->mult = div_sc((unsigned long) mips_freq, NSEC_PER_SEC, 32); | ||
| 193 | cd->shift = 32; | ||
| 194 | cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd); | 193 | cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd); |
| 195 | cd->min_delta_ns = clockevent_delta2ns(0x300, cd); | 194 | cd->min_delta_ns = clockevent_delta2ns(0x300, cd); |
| 196 | 195 | ||
diff --git a/arch/mips/kernel/cpu-bugs64.c b/arch/mips/kernel/cpu-bugs64.c index 408d0a07b3a3..b8bb8ba60869 100644 --- a/arch/mips/kernel/cpu-bugs64.c +++ b/arch/mips/kernel/cpu-bugs64.c | |||
| @@ -239,7 +239,7 @@ static inline void check_daddi(void) | |||
| 239 | panic(bug64hit, !DADDI_WAR ? daddiwar : nowar); | 239 | panic(bug64hit, !DADDI_WAR ? daddiwar : nowar); |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | int daddiu_bug __cpuinitdata = -1; | 242 | int daddiu_bug = -1; |
| 243 | 243 | ||
| 244 | static inline void check_daddiu(void) | 244 | static inline void check_daddiu(void) |
| 245 | { | 245 | { |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 3562b854f2cd..b1b304ea2128 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
| @@ -187,6 +187,7 @@ void __init check_wait(void) | |||
| 187 | case CPU_BCM6358: | 187 | case CPU_BCM6358: |
| 188 | case CPU_CAVIUM_OCTEON: | 188 | case CPU_CAVIUM_OCTEON: |
| 189 | case CPU_CAVIUM_OCTEON_PLUS: | 189 | case CPU_CAVIUM_OCTEON_PLUS: |
| 190 | case CPU_JZRISC: | ||
| 190 | cpu_wait = r4k_wait; | 191 | cpu_wait = r4k_wait; |
| 191 | break; | 192 | break; |
| 192 | 193 | ||
| @@ -760,6 +761,9 @@ static void __cpuinit decode_configs(struct cpuinfo_mips *c) | |||
| 760 | ok = decode_config4(c); | 761 | ok = decode_config4(c); |
| 761 | 762 | ||
| 762 | mips_probe_watch_registers(c); | 763 | mips_probe_watch_registers(c); |
| 764 | |||
| 765 | if (cpu_has_mips_r2) | ||
| 766 | c->core = read_c0_ebase() & 0x3ff; | ||
| 763 | } | 767 | } |
| 764 | 768 | ||
| 765 | static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) | 769 | static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) |
| @@ -956,6 +960,22 @@ platform: | |||
| 956 | } | 960 | } |
| 957 | } | 961 | } |
| 958 | 962 | ||
| 963 | static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu) | ||
| 964 | { | ||
| 965 | decode_configs(c); | ||
| 966 | /* JZRISC does not implement the CP0 counter. */ | ||
| 967 | c->options &= ~MIPS_CPU_COUNTER; | ||
| 968 | switch (c->processor_id & 0xff00) { | ||
| 969 | case PRID_IMP_JZRISC: | ||
| 970 | c->cputype = CPU_JZRISC; | ||
| 971 | __cpu_name[cpu] = "Ingenic JZRISC"; | ||
| 972 | break; | ||
| 973 | default: | ||
| 974 | panic("Unknown Ingenic Processor ID!"); | ||
| 975 | break; | ||
| 976 | } | ||
| 977 | } | ||
| 978 | |||
| 959 | const char *__cpu_name[NR_CPUS]; | 979 | const char *__cpu_name[NR_CPUS]; |
| 960 | const char *__elf_platform; | 980 | const char *__elf_platform; |
| 961 | 981 | ||
| @@ -994,6 +1014,9 @@ __cpuinit void cpu_probe(void) | |||
| 994 | case PRID_COMP_CAVIUM: | 1014 | case PRID_COMP_CAVIUM: |
| 995 | cpu_probe_cavium(c, cpu); | 1015 | cpu_probe_cavium(c, cpu); |
| 996 | break; | 1016 | break; |
| 1017 | case PRID_COMP_INGENIC: | ||
| 1018 | cpu_probe_ingenic(c, cpu); | ||
| 1019 | break; | ||
| 997 | } | 1020 | } |
| 998 | 1021 | ||
| 999 | BUG_ON(!__cpu_name[cpu]); | 1022 | BUG_ON(!__cpu_name[cpu]); |
diff --git a/arch/mips/kernel/kprobes.c b/arch/mips/kernel/kprobes.c new file mode 100644 index 000000000000..ee28683fc2ac --- /dev/null +++ b/arch/mips/kernel/kprobes.c | |||
| @@ -0,0 +1,557 @@ | |||
| 1 | /* | ||
| 2 | * Kernel Probes (KProbes) | ||
| 3 | * arch/mips/kernel/kprobes.c | ||
| 4 | * | ||
| 5 | * Copyright 2006 Sony Corp. | ||
| 6 | * Copyright 2010 Cavium Networks | ||
| 7 | * | ||
| 8 | * Some portions copied from the powerpc version. | ||
| 9 | * | ||
| 10 | * Copyright (C) IBM Corporation, 2002, 2004 | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License as published by | ||
| 14 | * the Free Software Foundation; version 2 of the License. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 24 | */ | ||
| 25 | |||
| 26 | #include <linux/kprobes.h> | ||
| 27 | #include <linux/preempt.h> | ||
| 28 | #include <linux/kdebug.h> | ||
| 29 | #include <linux/slab.h> | ||
| 30 | |||
| 31 | #include <asm/ptrace.h> | ||
| 32 | #include <asm/break.h> | ||
| 33 | #include <asm/inst.h> | ||
| 34 | |||
| 35 | static const union mips_instruction breakpoint_insn = { | ||
| 36 | .b_format = { | ||
| 37 | .opcode = spec_op, | ||
| 38 | .code = BRK_KPROBE_BP, | ||
| 39 | .func = break_op | ||
| 40 | } | ||
| 41 | }; | ||
| 42 | |||
| 43 | static const union mips_instruction breakpoint2_insn = { | ||
| 44 | .b_format = { | ||
| 45 | .opcode = spec_op, | ||
| 46 | .code = BRK_KPROBE_SSTEPBP, | ||
| 47 | .func = break_op | ||
| 48 | } | ||
| 49 | }; | ||
| 50 | |||
| 51 | DEFINE_PER_CPU(struct kprobe *, current_kprobe); | ||
| 52 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); | ||
| 53 | |||
| 54 | static int __kprobes insn_has_delayslot(union mips_instruction insn) | ||
| 55 | { | ||
| 56 | switch (insn.i_format.opcode) { | ||
| 57 | |||
| 58 | /* | ||
| 59 | * This group contains: | ||
| 60 | * jr and jalr are in r_format format. | ||
| 61 | */ | ||
| 62 | case spec_op: | ||
| 63 | switch (insn.r_format.func) { | ||
| 64 | case jr_op: | ||
| 65 | case jalr_op: | ||
| 66 | break; | ||
| 67 | default: | ||
| 68 | goto insn_ok; | ||
| 69 | } | ||
| 70 | |||
| 71 | /* | ||
| 72 | * This group contains: | ||
| 73 | * bltz_op, bgez_op, bltzl_op, bgezl_op, | ||
| 74 | * bltzal_op, bgezal_op, bltzall_op, bgezall_op. | ||
| 75 | */ | ||
| 76 | case bcond_op: | ||
| 77 | |||
| 78 | /* | ||
| 79 | * These are unconditional and in j_format. | ||
| 80 | */ | ||
| 81 | case jal_op: | ||
| 82 | case j_op: | ||
| 83 | |||
| 84 | /* | ||
| 85 | * These are conditional and in i_format. | ||
| 86 | */ | ||
| 87 | case beq_op: | ||
| 88 | case beql_op: | ||
| 89 | case bne_op: | ||
| 90 | case bnel_op: | ||
| 91 | case blez_op: | ||
| 92 | case blezl_op: | ||
| 93 | case bgtz_op: | ||
| 94 | case bgtzl_op: | ||
| 95 | |||
| 96 | /* | ||
| 97 | * These are the FPA/cp1 branch instructions. | ||
| 98 | */ | ||
| 99 | case cop1_op: | ||
| 100 | |||
| 101 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | ||
| 102 | case lwc2_op: /* This is bbit0 on Octeon */ | ||
| 103 | case ldc2_op: /* This is bbit032 on Octeon */ | ||
| 104 | case swc2_op: /* This is bbit1 on Octeon */ | ||
| 105 | case sdc2_op: /* This is bbit132 on Octeon */ | ||
| 106 | #endif | ||
| 107 | return 1; | ||
| 108 | default: | ||
| 109 | break; | ||
| 110 | } | ||
| 111 | insn_ok: | ||
| 112 | return 0; | ||
| 113 | } | ||
| 114 | |||
| 115 | int __kprobes arch_prepare_kprobe(struct kprobe *p) | ||
| 116 | { | ||
| 117 | union mips_instruction insn; | ||
| 118 | union mips_instruction prev_insn; | ||
| 119 | int ret = 0; | ||
| 120 | |||
| 121 | prev_insn = p->addr[-1]; | ||
| 122 | insn = p->addr[0]; | ||
| 123 | |||
| 124 | if (insn_has_delayslot(insn) || insn_has_delayslot(prev_insn)) { | ||
| 125 | pr_notice("Kprobes for branch and jump instructions are not supported\n"); | ||
| 126 | ret = -EINVAL; | ||
| 127 | goto out; | ||
| 128 | } | ||
| 129 | |||
| 130 | /* insn: must be on special executable page on mips. */ | ||
| 131 | p->ainsn.insn = get_insn_slot(); | ||
| 132 | if (!p->ainsn.insn) { | ||
| 133 | ret = -ENOMEM; | ||
| 134 | goto out; | ||
| 135 | } | ||
| 136 | |||
| 137 | /* | ||
| 138 | * In the kprobe->ainsn.insn[] array we store the original | ||
| 139 | * instruction at index zero and a break trap instruction at | ||
| 140 | * index one. | ||
| 141 | */ | ||
| 142 | |||
| 143 | memcpy(&p->ainsn.insn[0], p->addr, sizeof(kprobe_opcode_t)); | ||
| 144 | p->ainsn.insn[1] = breakpoint2_insn; | ||
| 145 | p->opcode = *p->addr; | ||
| 146 | |||
| 147 | out: | ||
| 148 | return ret; | ||
| 149 | } | ||
| 150 | |||
| 151 | void __kprobes arch_arm_kprobe(struct kprobe *p) | ||
| 152 | { | ||
| 153 | *p->addr = breakpoint_insn; | ||
| 154 | flush_insn_slot(p); | ||
| 155 | } | ||
| 156 | |||
| 157 | void __kprobes arch_disarm_kprobe(struct kprobe *p) | ||
| 158 | { | ||
| 159 | *p->addr = p->opcode; | ||
| 160 | flush_insn_slot(p); | ||
| 161 | } | ||
| 162 | |||
| 163 | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||
| 164 | { | ||
| 165 | free_insn_slot(p->ainsn.insn, 0); | ||
| 166 | } | ||
| 167 | |||
| 168 | static void save_previous_kprobe(struct kprobe_ctlblk *kcb) | ||
| 169 | { | ||
| 170 | kcb->prev_kprobe.kp = kprobe_running(); | ||
| 171 | kcb->prev_kprobe.status = kcb->kprobe_status; | ||
| 172 | kcb->prev_kprobe.old_SR = kcb->kprobe_old_SR; | ||
| 173 | kcb->prev_kprobe.saved_SR = kcb->kprobe_saved_SR; | ||
| 174 | kcb->prev_kprobe.saved_epc = kcb->kprobe_saved_epc; | ||
| 175 | } | ||
| 176 | |||
| 177 | static void restore_previous_kprobe(struct kprobe_ctlblk *kcb) | ||
| 178 | { | ||
| 179 | __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; | ||
| 180 | kcb->kprobe_status = kcb->prev_kprobe.status; | ||
| 181 | kcb->kprobe_old_SR = kcb->prev_kprobe.old_SR; | ||
| 182 | kcb->kprobe_saved_SR = kcb->prev_kprobe.saved_SR; | ||
| 183 | kcb->kprobe_saved_epc = kcb->prev_kprobe.saved_epc; | ||
| 184 | } | ||
| 185 | |||
| 186 | static void set_current_kprobe(struct kprobe *p, struct pt_regs *regs, | ||
| 187 | struct kprobe_ctlblk *kcb) | ||
| 188 | { | ||
| 189 | __get_cpu_var(current_kprobe) = p; | ||
| 190 | kcb->kprobe_saved_SR = kcb->kprobe_old_SR = (regs->cp0_status & ST0_IE); | ||
| 191 | kcb->kprobe_saved_epc = regs->cp0_epc; | ||
| 192 | } | ||
| 193 | |||
| 194 | static void prepare_singlestep(struct kprobe *p, struct pt_regs *regs) | ||
| 195 | { | ||
| 196 | regs->cp0_status &= ~ST0_IE; | ||
| 197 | |||
| 198 | /* single step inline if the instruction is a break */ | ||
| 199 | if (p->opcode.word == breakpoint_insn.word || | ||
| 200 | p->opcode.word == breakpoint2_insn.word) | ||
| 201 | regs->cp0_epc = (unsigned long)p->addr; | ||
| 202 | else | ||
| 203 | regs->cp0_epc = (unsigned long)&p->ainsn.insn[0]; | ||
| 204 | } | ||
| 205 | |||
| 206 | static int __kprobes kprobe_handler(struct pt_regs *regs) | ||
| 207 | { | ||
| 208 | struct kprobe *p; | ||
| 209 | int ret = 0; | ||
| 210 | kprobe_opcode_t *addr; | ||
| 211 | struct kprobe_ctlblk *kcb; | ||
| 212 | |||
| 213 | addr = (kprobe_opcode_t *) regs->cp0_epc; | ||
| 214 | |||
| 215 | /* | ||
| 216 | * We don't want to be preempted for the entire | ||
| 217 | * duration of kprobe processing | ||
| 218 | */ | ||
| 219 | preempt_disable(); | ||
| 220 | kcb = get_kprobe_ctlblk(); | ||
| 221 | |||
| 222 | /* Check we're not actually recursing */ | ||
| 223 | if (kprobe_running()) { | ||
| 224 | p = get_kprobe(addr); | ||
| 225 | if (p) { | ||
| 226 | if (kcb->kprobe_status == KPROBE_HIT_SS && | ||
| 227 | p->ainsn.insn->word == breakpoint_insn.word) { | ||
| 228 | regs->cp0_status &= ~ST0_IE; | ||
| 229 | regs->cp0_status |= kcb->kprobe_saved_SR; | ||
| 230 | goto no_kprobe; | ||
| 231 | } | ||
| 232 | /* | ||
| 233 | * We have reentered the kprobe_handler(), since | ||
| 234 | * another probe was hit while within the handler. | ||
| 235 | * We here save the original kprobes variables and | ||
| 236 | * just single step on the instruction of the new probe | ||
| 237 | * without calling any user handlers. | ||
| 238 | */ | ||
| 239 | save_previous_kprobe(kcb); | ||
| 240 | set_current_kprobe(p, regs, kcb); | ||
| 241 | kprobes_inc_nmissed_count(p); | ||
| 242 | prepare_singlestep(p, regs); | ||
| 243 | kcb->kprobe_status = KPROBE_REENTER; | ||
| 244 | return 1; | ||
| 245 | } else { | ||
| 246 | if (addr->word != breakpoint_insn.word) { | ||
| 247 | /* | ||
| 248 | * The breakpoint instruction was removed by | ||
| 249 | * another cpu right after we hit, no further | ||
| 250 | * handling of this interrupt is appropriate | ||
| 251 | */ | ||
| 252 | ret = 1; | ||
| 253 | goto no_kprobe; | ||
| 254 | } | ||
| 255 | p = __get_cpu_var(current_kprobe); | ||
| 256 | if (p->break_handler && p->break_handler(p, regs)) | ||
| 257 | goto ss_probe; | ||
| 258 | } | ||
| 259 | goto no_kprobe; | ||
| 260 | } | ||
| 261 | |||
| 262 | p = get_kprobe(addr); | ||
| 263 | if (!p) { | ||
| 264 | if (addr->word != breakpoint_insn.word) { | ||
| 265 | /* | ||
| 266 | * The breakpoint instruction was removed right | ||
| 267 | * after we hit it. Another cpu has removed | ||
| 268 | * either a probepoint or a debugger breakpoint | ||
| 269 | * at this address. In either case, no further | ||
| 270 | * handling of this interrupt is appropriate. | ||
| 271 | */ | ||
| 272 | ret = 1; | ||
| 273 | } | ||
| 274 | /* Not one of ours: let kernel handle it */ | ||
| 275 | goto no_kprobe; | ||
| 276 | } | ||
| 277 | |||
| 278 | set_current_kprobe(p, regs, kcb); | ||
| 279 | kcb->kprobe_status = KPROBE_HIT_ACTIVE; | ||
| 280 | |||
| 281 | if (p->pre_handler && p->pre_handler(p, regs)) { | ||
| 282 | /* handler has already set things up, so skip ss setup */ | ||
| 283 | return 1; | ||
| 284 | } | ||
| 285 | |||
| 286 | ss_probe: | ||
| 287 | prepare_singlestep(p, regs); | ||
| 288 | kcb->kprobe_status = KPROBE_HIT_SS; | ||
| 289 | return 1; | ||
| 290 | |||
| 291 | no_kprobe: | ||
| 292 | preempt_enable_no_resched(); | ||
| 293 | return ret; | ||
| 294 | |||
| 295 | } | ||
| 296 | |||
| 297 | /* | ||
| 298 | * Called after single-stepping. p->addr is the address of the | ||
| 299 | * instruction whose first byte has been replaced by the "break 0" | ||
| 300 | * instruction. To avoid the SMP problems that can occur when we | ||
| 301 | * temporarily put back the original opcode to single-step, we | ||
| 302 | * single-stepped a copy of the instruction. The address of this | ||
| 303 | * copy is p->ainsn.insn. | ||
| 304 | * | ||
| 305 | * This function prepares to return from the post-single-step | ||
| 306 | * breakpoint trap. | ||
| 307 | */ | ||
| 308 | static void __kprobes resume_execution(struct kprobe *p, | ||
| 309 | struct pt_regs *regs, | ||
| 310 | struct kprobe_ctlblk *kcb) | ||
| 311 | { | ||
| 312 | unsigned long orig_epc = kcb->kprobe_saved_epc; | ||
| 313 | regs->cp0_epc = orig_epc + 4; | ||
| 314 | } | ||
| 315 | |||
| 316 | static inline int post_kprobe_handler(struct pt_regs *regs) | ||
| 317 | { | ||
| 318 | struct kprobe *cur = kprobe_running(); | ||
| 319 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
| 320 | |||
| 321 | if (!cur) | ||
| 322 | return 0; | ||
| 323 | |||
| 324 | if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) { | ||
| 325 | kcb->kprobe_status = KPROBE_HIT_SSDONE; | ||
| 326 | cur->post_handler(cur, regs, 0); | ||
| 327 | } | ||
| 328 | |||
| 329 | resume_execution(cur, regs, kcb); | ||
| 330 | |||
| 331 | regs->cp0_status |= kcb->kprobe_saved_SR; | ||
| 332 | |||
| 333 | /* Restore back the original saved kprobes variables and continue. */ | ||
| 334 | if (kcb->kprobe_status == KPROBE_REENTER) { | ||
| 335 | restore_previous_kprobe(kcb); | ||
| 336 | goto out; | ||
| 337 | } | ||
| 338 | reset_current_kprobe(); | ||
| 339 | out: | ||
| 340 | preempt_enable_no_resched(); | ||
| 341 | |||
| 342 | return 1; | ||
| 343 | } | ||
| 344 | |||
| 345 | static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr) | ||
| 346 | { | ||
| 347 | struct kprobe *cur = kprobe_running(); | ||
| 348 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
| 349 | |||
| 350 | if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) | ||
| 351 | return 1; | ||
| 352 | |||
| 353 | if (kcb->kprobe_status & KPROBE_HIT_SS) { | ||
| 354 | resume_execution(cur, regs, kcb); | ||
| 355 | regs->cp0_status |= kcb->kprobe_old_SR; | ||
| 356 | |||
| 357 | reset_current_kprobe(); | ||
| 358 | preempt_enable_no_resched(); | ||
| 359 | } | ||
| 360 | return 0; | ||
| 361 | } | ||
| 362 | |||
| 363 | /* | ||
| 364 | * Wrapper routine for handling exceptions. | ||
| 365 | */ | ||
| 366 | int __kprobes kprobe_exceptions_notify(struct notifier_block *self, | ||
| 367 | unsigned long val, void *data) | ||
| 368 | { | ||
| 369 | |||
| 370 | struct die_args *args = (struct die_args *)data; | ||
| 371 | int ret = NOTIFY_DONE; | ||
| 372 | |||
| 373 | switch (val) { | ||
| 374 | case DIE_BREAK: | ||
| 375 | if (kprobe_handler(args->regs)) | ||
| 376 | ret = NOTIFY_STOP; | ||
| 377 | break; | ||
| 378 | case DIE_SSTEPBP: | ||
| 379 | if (post_kprobe_handler(args->regs)) | ||
| 380 | ret = NOTIFY_STOP; | ||
| 381 | break; | ||
| 382 | |||
| 383 | case DIE_PAGE_FAULT: | ||
| 384 | /* kprobe_running() needs smp_processor_id() */ | ||
| 385 | preempt_disable(); | ||
| 386 | |||
| 387 | if (kprobe_running() | ||
| 388 | && kprobe_fault_handler(args->regs, args->trapnr)) | ||
| 389 | ret = NOTIFY_STOP; | ||
| 390 | preempt_enable(); | ||
| 391 | break; | ||
| 392 | default: | ||
| 393 | break; | ||
| 394 | } | ||
| 395 | return ret; | ||
| 396 | } | ||
| 397 | |||
| 398 | int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) | ||
| 399 | { | ||
| 400 | struct jprobe *jp = container_of(p, struct jprobe, kp); | ||
| 401 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
| 402 | |||
| 403 | kcb->jprobe_saved_regs = *regs; | ||
| 404 | kcb->jprobe_saved_sp = regs->regs[29]; | ||
| 405 | |||
| 406 | memcpy(kcb->jprobes_stack, (void *)kcb->jprobe_saved_sp, | ||
| 407 | MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); | ||
| 408 | |||
| 409 | regs->cp0_epc = (unsigned long)(jp->entry); | ||
| 410 | |||
| 411 | return 1; | ||
| 412 | } | ||
| 413 | |||
| 414 | /* Defined in the inline asm below. */ | ||
| 415 | void jprobe_return_end(void); | ||
| 416 | |||
| 417 | void __kprobes jprobe_return(void) | ||
| 418 | { | ||
| 419 | /* Assembler quirk necessitates this '0,code' business. */ | ||
| 420 | asm volatile( | ||
| 421 | "break 0,%0\n\t" | ||
| 422 | ".globl jprobe_return_end\n" | ||
| 423 | "jprobe_return_end:\n" | ||
| 424 | : : "n" (BRK_KPROBE_BP) : "memory"); | ||
| 425 | } | ||
| 426 | |||
| 427 | int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) | ||
| 428 | { | ||
| 429 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
| 430 | |||
| 431 | if (regs->cp0_epc >= (unsigned long)jprobe_return && | ||
| 432 | regs->cp0_epc <= (unsigned long)jprobe_return_end) { | ||
| 433 | *regs = kcb->jprobe_saved_regs; | ||
| 434 | memcpy((void *)kcb->jprobe_saved_sp, kcb->jprobes_stack, | ||
| 435 | MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); | ||
| 436 | preempt_enable_no_resched(); | ||
| 437 | |||
| 438 | return 1; | ||
| 439 | } | ||
| 440 | return 0; | ||
| 441 | } | ||
| 442 | |||
| 443 | /* | ||
| 444 | * Function return probe trampoline: | ||
| 445 | * - init_kprobes() establishes a probepoint here | ||
| 446 | * - When the probed function returns, this probe causes the | ||
| 447 | * handlers to fire | ||
| 448 | */ | ||
| 449 | static void __used kretprobe_trampoline_holder(void) | ||
| 450 | { | ||
| 451 | asm volatile( | ||
| 452 | ".set push\n\t" | ||
| 453 | /* Keep the assembler from reordering and placing JR here. */ | ||
| 454 | ".set noreorder\n\t" | ||
| 455 | "nop\n\t" | ||
| 456 | ".global kretprobe_trampoline\n" | ||
| 457 | "kretprobe_trampoline:\n\t" | ||
| 458 | "nop\n\t" | ||
| 459 | ".set pop" | ||
| 460 | : : : "memory"); | ||
| 461 | } | ||
| 462 | |||
| 463 | void kretprobe_trampoline(void); | ||
| 464 | |||
| 465 | void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri, | ||
| 466 | struct pt_regs *regs) | ||
| 467 | { | ||
| 468 | ri->ret_addr = (kprobe_opcode_t *) regs->regs[31]; | ||
| 469 | |||
| 470 | /* Replace the return addr with trampoline addr */ | ||
| 471 | regs->regs[31] = (unsigned long)kretprobe_trampoline; | ||
| 472 | } | ||
| 473 | |||
| 474 | /* | ||
| 475 | * Called when the probe at kretprobe trampoline is hit | ||
| 476 | */ | ||
| 477 | static int __kprobes trampoline_probe_handler(struct kprobe *p, | ||
| 478 | struct pt_regs *regs) | ||
| 479 | { | ||
| 480 | struct kretprobe_instance *ri = NULL; | ||
| 481 | struct hlist_head *head, empty_rp; | ||
| 482 | struct hlist_node *node, *tmp; | ||
| 483 | unsigned long flags, orig_ret_address = 0; | ||
| 484 | unsigned long trampoline_address = (unsigned long)kretprobe_trampoline; | ||
| 485 | |||
| 486 | INIT_HLIST_HEAD(&empty_rp); | ||
| 487 | kretprobe_hash_lock(current, &head, &flags); | ||
| 488 | |||
| 489 | /* | ||
| 490 | * It is possible to have multiple instances associated with a given | ||
| 491 | * task either because an multiple functions in the call path | ||
| 492 | * have a return probe installed on them, and/or more than one return | ||
| 493 | * return probe was registered for a target function. | ||
| 494 | * | ||
| 495 | * We can handle this because: | ||
| 496 | * - instances are always inserted at the head of the list | ||
| 497 | * - when multiple return probes are registered for the same | ||
| 498 | * function, the first instance's ret_addr will point to the | ||
| 499 | * real return address, and all the rest will point to | ||
| 500 | * kretprobe_trampoline | ||
| 501 | */ | ||
| 502 | hlist_for_each_entry_safe(ri, node, tmp, head, hlist) { | ||
| 503 | if (ri->task != current) | ||
| 504 | /* another task is sharing our hash bucket */ | ||
| 505 | continue; | ||
| 506 | |||
| 507 | if (ri->rp && ri->rp->handler) | ||
| 508 | ri->rp->handler(ri, regs); | ||
| 509 | |||
| 510 | orig_ret_address = (unsigned long)ri->ret_addr; | ||
| 511 | recycle_rp_inst(ri, &empty_rp); | ||
| 512 | |||
| 513 | if (orig_ret_address != trampoline_address) | ||
| 514 | /* | ||
| 515 | * This is the real return address. Any other | ||
| 516 | * instances associated with this task are for | ||
| 517 | * other calls deeper on the call stack | ||
| 518 | */ | ||
| 519 | break; | ||
| 520 | } | ||
| 521 | |||
| 522 | kretprobe_assert(ri, orig_ret_address, trampoline_address); | ||
| 523 | instruction_pointer(regs) = orig_ret_address; | ||
| 524 | |||
| 525 | reset_current_kprobe(); | ||
| 526 | kretprobe_hash_unlock(current, &flags); | ||
| 527 | preempt_enable_no_resched(); | ||
| 528 | |||
| 529 | hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { | ||
| 530 | hlist_del(&ri->hlist); | ||
| 531 | kfree(ri); | ||
| 532 | } | ||
| 533 | /* | ||
| 534 | * By returning a non-zero value, we are telling | ||
| 535 | * kprobe_handler() that we don't want the post_handler | ||
| 536 | * to run (and have re-enabled preemption) | ||
| 537 | */ | ||
| 538 | return 1; | ||
| 539 | } | ||
| 540 | |||
| 541 | int __kprobes arch_trampoline_kprobe(struct kprobe *p) | ||
| 542 | { | ||
| 543 | if (p->addr == (kprobe_opcode_t *)kretprobe_trampoline) | ||
| 544 | return 1; | ||
| 545 | |||
| 546 | return 0; | ||
| 547 | } | ||
| 548 | |||
| 549 | static struct kprobe trampoline_p = { | ||
| 550 | .addr = (kprobe_opcode_t *)kretprobe_trampoline, | ||
| 551 | .pre_handler = trampoline_probe_handler | ||
| 552 | }; | ||
| 553 | |||
| 554 | int __init arch_init_kprobes(void) | ||
| 555 | { | ||
| 556 | return register_kprobe(&trampoline_p); | ||
| 557 | } | ||
diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S index 6bfcb7a00ec6..4c968e7efb74 100644 --- a/arch/mips/kernel/mcount.S +++ b/arch/mips/kernel/mcount.S | |||
| @@ -165,12 +165,12 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra) | |||
| 165 | 165 | ||
| 166 | /* arg3: Get frame pointer of current stack */ | 166 | /* arg3: Get frame pointer of current stack */ |
| 167 | #ifdef CONFIG_FRAME_POINTER | 167 | #ifdef CONFIG_FRAME_POINTER |
| 168 | move a2, fp | 168 | move a2, fp |
| 169 | #else /* ! CONFIG_FRAME_POINTER */ | 169 | #else /* ! CONFIG_FRAME_POINTER */ |
| 170 | #ifdef CONFIG_64BIT | 170 | #ifdef CONFIG_64BIT |
| 171 | PTR_LA a2, PT_SIZE(sp) | 171 | PTR_LA a2, PT_SIZE(sp) |
| 172 | #else | 172 | #else |
| 173 | PTR_LA a2, (PT_SIZE+8)(sp) | 173 | PTR_LA a2, (PT_SIZE+8)(sp) |
| 174 | #endif | 174 | #endif |
| 175 | #endif | 175 | #endif |
| 176 | 176 | ||
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index a4faceea9d88..a3d66137731a 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
| @@ -400,22 +400,22 @@ EXPORT(sysn32_call_table) | |||
| 400 | PTR sys_ioprio_set | 400 | PTR sys_ioprio_set |
| 401 | PTR sys_ioprio_get | 401 | PTR sys_ioprio_get |
| 402 | PTR compat_sys_utimensat | 402 | PTR compat_sys_utimensat |
| 403 | PTR compat_sys_signalfd /* 5280 */ | 403 | PTR compat_sys_signalfd /* 6280 */ |
| 404 | PTR sys_ni_syscall | 404 | PTR sys_ni_syscall |
| 405 | PTR sys_eventfd | 405 | PTR sys_eventfd |
| 406 | PTR sys_fallocate | 406 | PTR sys_fallocate |
| 407 | PTR sys_timerfd_create | 407 | PTR sys_timerfd_create |
| 408 | PTR compat_sys_timerfd_gettime /* 5285 */ | 408 | PTR compat_sys_timerfd_gettime /* 6285 */ |
| 409 | PTR compat_sys_timerfd_settime | 409 | PTR compat_sys_timerfd_settime |
| 410 | PTR sys_signalfd4 | 410 | PTR sys_signalfd4 |
| 411 | PTR sys_eventfd2 | 411 | PTR sys_eventfd2 |
| 412 | PTR sys_epoll_create1 | 412 | PTR sys_epoll_create1 |
| 413 | PTR sys_dup3 /* 5290 */ | 413 | PTR sys_dup3 /* 6290 */ |
| 414 | PTR sys_pipe2 | 414 | PTR sys_pipe2 |
| 415 | PTR sys_inotify_init1 | 415 | PTR sys_inotify_init1 |
| 416 | PTR sys_preadv | 416 | PTR sys_preadv |
| 417 | PTR sys_pwritev | 417 | PTR sys_pwritev |
| 418 | PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ | 418 | PTR compat_sys_rt_tgsigqueueinfo /* 6295 */ |
| 419 | PTR sys_perf_event_open | 419 | PTR sys_perf_event_open |
| 420 | PTR sys_accept4 | 420 | PTR sys_accept4 |
| 421 | PTR compat_sys_recvmmsg | 421 | PTR compat_sys_recvmmsg |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 6cdca1956b77..383aeb95cb49 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
| @@ -47,8 +47,12 @@ | |||
| 47 | #endif /* CONFIG_MIPS_MT_SMTC */ | 47 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 48 | 48 | ||
| 49 | volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ | 49 | volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ |
| 50 | |||
| 50 | int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ | 51 | int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ |
| 52 | EXPORT_SYMBOL(__cpu_number_map); | ||
| 53 | |||
| 51 | int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ | 54 | int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ |
| 55 | EXPORT_SYMBOL(__cpu_logical_map); | ||
| 52 | 56 | ||
| 53 | /* Number of TCs (or siblings in Intel speak) per CPU core */ | 57 | /* Number of TCs (or siblings in Intel speak) per CPU core */ |
| 54 | int smp_num_siblings = 1; | 58 | int smp_num_siblings = 1; |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index a95dea5459c4..cfeb2c155896 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
| @@ -975,8 +975,7 @@ void ipi_decode(struct smtc_ipi *pipi) | |||
| 975 | ipi_call_interrupt(); | 975 | ipi_call_interrupt(); |
| 976 | break; | 976 | break; |
| 977 | default: | 977 | default: |
| 978 | printk("Impossible SMTC IPI Argument 0x%x\n", | 978 | printk("Impossible SMTC IPI Argument %p\n", arg_copy); |
| 979 | (int)arg_copy); | ||
| 980 | break; | 979 | break; |
| 981 | } | 980 | } |
| 982 | break; | 981 | break; |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index dd81b0f87518..58bab2ef257f 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
| @@ -29,6 +29,8 @@ | |||
| 29 | #include <linux/ipc.h> | 29 | #include <linux/ipc.h> |
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
| 32 | #include <linux/random.h> | ||
| 33 | #include <linux/elf.h> | ||
| 32 | 34 | ||
| 33 | #include <asm/asm.h> | 35 | #include <asm/asm.h> |
| 34 | #include <asm/branch.h> | 36 | #include <asm/branch.h> |
| @@ -116,7 +118,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 116 | (!vmm || addr + len <= vmm->vm_start)) | 118 | (!vmm || addr + len <= vmm->vm_start)) |
| 117 | return addr; | 119 | return addr; |
| 118 | } | 120 | } |
| 119 | addr = TASK_UNMAPPED_BASE; | 121 | addr = current->mm->mmap_base; |
| 120 | if (do_color_align) | 122 | if (do_color_align) |
| 121 | addr = COLOUR_ALIGN(addr, pgoff); | 123 | addr = COLOUR_ALIGN(addr, pgoff); |
| 122 | else | 124 | else |
| @@ -134,6 +136,51 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 134 | } | 136 | } |
| 135 | } | 137 | } |
| 136 | 138 | ||
| 139 | void arch_pick_mmap_layout(struct mm_struct *mm) | ||
| 140 | { | ||
| 141 | unsigned long random_factor = 0UL; | ||
| 142 | |||
| 143 | if (current->flags & PF_RANDOMIZE) { | ||
| 144 | random_factor = get_random_int(); | ||
| 145 | random_factor = random_factor << PAGE_SHIFT; | ||
| 146 | if (TASK_IS_32BIT_ADDR) | ||
| 147 | random_factor &= 0xfffffful; | ||
| 148 | else | ||
| 149 | random_factor &= 0xffffffful; | ||
| 150 | } | ||
| 151 | |||
| 152 | mm->mmap_base = TASK_UNMAPPED_BASE + random_factor; | ||
| 153 | mm->get_unmapped_area = arch_get_unmapped_area; | ||
| 154 | mm->unmap_area = arch_unmap_area; | ||
| 155 | } | ||
| 156 | |||
| 157 | static inline unsigned long brk_rnd(void) | ||
| 158 | { | ||
| 159 | unsigned long rnd = get_random_int(); | ||
| 160 | |||
| 161 | rnd = rnd << PAGE_SHIFT; | ||
| 162 | /* 8MB for 32bit, 256MB for 64bit */ | ||
| 163 | if (TASK_IS_32BIT_ADDR) | ||
| 164 | rnd = rnd & 0x7ffffful; | ||
| 165 | else | ||
| 166 | rnd = rnd & 0xffffffful; | ||
| 167 | |||
| 168 | return rnd; | ||
| 169 | } | ||
| 170 | |||
| 171 | unsigned long arch_randomize_brk(struct mm_struct *mm) | ||
| 172 | { | ||
| 173 | unsigned long base = mm->brk; | ||
| 174 | unsigned long ret; | ||
| 175 | |||
| 176 | ret = PAGE_ALIGN(base + brk_rnd()); | ||
| 177 | |||
| 178 | if (ret < mm->brk) | ||
| 179 | return mm->brk; | ||
| 180 | |||
| 181 | return ret; | ||
| 182 | } | ||
| 183 | |||
| 137 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, | 184 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, |
| 138 | unsigned long, prot, unsigned long, flags, unsigned long, | 185 | unsigned long, prot, unsigned long, flags, unsigned long, |
| 139 | fd, off_t, offset) | 186 | fd, off_t, offset) |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 852780868fb4..03ec0019032b 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/ptrace.h> | 25 | #include <linux/ptrace.h> |
| 26 | #include <linux/kgdb.h> | 26 | #include <linux/kgdb.h> |
| 27 | #include <linux/kdebug.h> | 27 | #include <linux/kdebug.h> |
| 28 | #include <linux/kprobes.h> | ||
| 28 | #include <linux/notifier.h> | 29 | #include <linux/notifier.h> |
| 29 | #include <linux/kdb.h> | 30 | #include <linux/kdb.h> |
| 30 | 31 | ||
| @@ -334,7 +335,7 @@ void show_regs(struct pt_regs *regs) | |||
| 334 | __show_regs((struct pt_regs *)regs); | 335 | __show_regs((struct pt_regs *)regs); |
| 335 | } | 336 | } |
| 336 | 337 | ||
| 337 | void show_registers(const struct pt_regs *regs) | 338 | void show_registers(struct pt_regs *regs) |
| 338 | { | 339 | { |
| 339 | const int field = 2 * sizeof(unsigned long); | 340 | const int field = 2 * sizeof(unsigned long); |
| 340 | 341 | ||
| @@ -356,9 +357,14 @@ void show_registers(const struct pt_regs *regs) | |||
| 356 | printk("\n"); | 357 | printk("\n"); |
| 357 | } | 358 | } |
| 358 | 359 | ||
| 360 | static int regs_to_trapnr(struct pt_regs *regs) | ||
| 361 | { | ||
| 362 | return (regs->cp0_cause >> 2) & 0x1f; | ||
| 363 | } | ||
| 364 | |||
| 359 | static DEFINE_SPINLOCK(die_lock); | 365 | static DEFINE_SPINLOCK(die_lock); |
| 360 | 366 | ||
| 361 | void __noreturn die(const char * str, struct pt_regs * regs) | 367 | void __noreturn die(const char *str, struct pt_regs *regs) |
| 362 | { | 368 | { |
| 363 | static int die_counter; | 369 | static int die_counter; |
| 364 | int sig = SIGSEGV; | 370 | int sig = SIGSEGV; |
| @@ -366,7 +372,7 @@ void __noreturn die(const char * str, struct pt_regs * regs) | |||
| 366 | unsigned long dvpret = dvpe(); | 372 | unsigned long dvpret = dvpe(); |
| 367 | #endif /* CONFIG_MIPS_MT_SMTC */ | 373 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 368 | 374 | ||
| 369 | notify_die(DIE_OOPS, str, (struct pt_regs *)regs, SIGSEGV, 0, 0); | 375 | notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV); |
| 370 | 376 | ||
| 371 | console_verbose(); | 377 | console_verbose(); |
| 372 | spin_lock_irq(&die_lock); | 378 | spin_lock_irq(&die_lock); |
| @@ -375,7 +381,7 @@ void __noreturn die(const char * str, struct pt_regs * regs) | |||
| 375 | mips_mt_regdump(dvpret); | 381 | mips_mt_regdump(dvpret); |
| 376 | #endif /* CONFIG_MIPS_MT_SMTC */ | 382 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 377 | 383 | ||
| 378 | if (notify_die(DIE_OOPS, str, regs, 0, current->thread.trap_no, SIGSEGV) == NOTIFY_STOP) | 384 | if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV) == NOTIFY_STOP) |
| 379 | sig = 0; | 385 | sig = 0; |
| 380 | 386 | ||
| 381 | printk("%s[#%d]:\n", str, ++die_counter); | 387 | printk("%s[#%d]:\n", str, ++die_counter); |
| @@ -449,7 +455,7 @@ asmlinkage void do_be(struct pt_regs *regs) | |||
| 449 | printk(KERN_ALERT "%s bus error, epc == %0*lx, ra == %0*lx\n", | 455 | printk(KERN_ALERT "%s bus error, epc == %0*lx, ra == %0*lx\n", |
| 450 | data ? "Data" : "Instruction", | 456 | data ? "Data" : "Instruction", |
| 451 | field, regs->cp0_epc, field, regs->regs[31]); | 457 | field, regs->cp0_epc, field, regs->regs[31]); |
| 452 | if (notify_die(DIE_OOPS, "bus error", regs, SIGBUS, 0, 0) | 458 | if (notify_die(DIE_OOPS, "bus error", regs, 0, regs_to_trapnr(regs), SIGBUS) |
| 453 | == NOTIFY_STOP) | 459 | == NOTIFY_STOP) |
| 454 | return; | 460 | return; |
| 455 | 461 | ||
| @@ -650,7 +656,7 @@ asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) | |||
| 650 | { | 656 | { |
| 651 | siginfo_t info; | 657 | siginfo_t info; |
| 652 | 658 | ||
| 653 | if (notify_die(DIE_FP, "FP exception", regs, SIGFPE, 0, 0) | 659 | if (notify_die(DIE_FP, "FP exception", regs, 0, regs_to_trapnr(regs), SIGFPE) |
| 654 | == NOTIFY_STOP) | 660 | == NOTIFY_STOP) |
| 655 | return; | 661 | return; |
| 656 | die_if_kernel("FP exception in kernel code", regs); | 662 | die_if_kernel("FP exception in kernel code", regs); |
| @@ -713,11 +719,11 @@ static void do_trap_or_bp(struct pt_regs *regs, unsigned int code, | |||
| 713 | char b[40]; | 719 | char b[40]; |
| 714 | 720 | ||
| 715 | #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP | 721 | #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP |
| 716 | if (kgdb_ll_trap(DIE_TRAP, str, regs, code, 0, 0) == NOTIFY_STOP) | 722 | if (kgdb_ll_trap(DIE_TRAP, str, regs, code, regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) |
| 717 | return; | 723 | return; |
| 718 | #endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */ | 724 | #endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */ |
| 719 | 725 | ||
| 720 | if (notify_die(DIE_TRAP, str, regs, code, 0, 0) == NOTIFY_STOP) | 726 | if (notify_die(DIE_TRAP, str, regs, code, regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) |
| 721 | return; | 727 | return; |
| 722 | 728 | ||
| 723 | /* | 729 | /* |
| @@ -783,6 +789,25 @@ asmlinkage void do_bp(struct pt_regs *regs) | |||
| 783 | if (bcode >= (1 << 10)) | 789 | if (bcode >= (1 << 10)) |
| 784 | bcode >>= 10; | 790 | bcode >>= 10; |
| 785 | 791 | ||
| 792 | /* | ||
| 793 | * notify the kprobe handlers, if instruction is likely to | ||
| 794 | * pertain to them. | ||
| 795 | */ | ||
| 796 | switch (bcode) { | ||
| 797 | case BRK_KPROBE_BP: | ||
| 798 | if (notify_die(DIE_BREAK, "debug", regs, bcode, regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) | ||
| 799 | return; | ||
| 800 | else | ||
| 801 | break; | ||
| 802 | case BRK_KPROBE_SSTEPBP: | ||
| 803 | if (notify_die(DIE_SSTEPBP, "single_step", regs, bcode, regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) | ||
| 804 | return; | ||
| 805 | else | ||
| 806 | break; | ||
| 807 | default: | ||
| 808 | break; | ||
| 809 | } | ||
| 810 | |||
| 786 | do_trap_or_bp(regs, bcode, "Break"); | 811 | do_trap_or_bp(regs, bcode, "Break"); |
| 787 | return; | 812 | return; |
| 788 | 813 | ||
| @@ -815,7 +840,7 @@ asmlinkage void do_ri(struct pt_regs *regs) | |||
| 815 | unsigned int opcode = 0; | 840 | unsigned int opcode = 0; |
| 816 | int status = -1; | 841 | int status = -1; |
| 817 | 842 | ||
| 818 | if (notify_die(DIE_RI, "RI Fault", regs, SIGSEGV, 0, 0) | 843 | if (notify_die(DIE_RI, "RI Fault", regs, 0, regs_to_trapnr(regs), SIGILL) |
| 819 | == NOTIFY_STOP) | 844 | == NOTIFY_STOP) |
| 820 | return; | 845 | return; |
| 821 | 846 | ||
| @@ -907,11 +932,6 @@ static int default_cu2_call(struct notifier_block *nfb, unsigned long action, | |||
| 907 | return NOTIFY_OK; | 932 | return NOTIFY_OK; |
| 908 | } | 933 | } |
| 909 | 934 | ||
| 910 | static struct notifier_block default_cu2_notifier = { | ||
| 911 | .notifier_call = default_cu2_call, | ||
| 912 | .priority = 0x80000000, /* Run last */ | ||
| 913 | }; | ||
| 914 | |||
| 915 | asmlinkage void do_cpu(struct pt_regs *regs) | 935 | asmlinkage void do_cpu(struct pt_regs *regs) |
| 916 | { | 936 | { |
| 917 | unsigned int __user *epc; | 937 | unsigned int __user *epc; |
| @@ -1734,5 +1754,5 @@ void __init trap_init(void) | |||
| 1734 | 1754 | ||
| 1735 | sort_extable(__start___dbe_table, __stop___dbe_table); | 1755 | sort_extable(__start___dbe_table, __stop___dbe_table); |
| 1736 | 1756 | ||
| 1737 | register_cu2_notifier(&default_cu2_notifier); | 1757 | cu2_notifier(default_cu2_call, 0x80000000); /* Run last */ |
| 1738 | } | 1758 | } |
diff --git a/arch/mips/lasat/Makefile b/arch/mips/lasat/Makefile index 33791609fe99..9cc4e4db8b99 100644 --- a/arch/mips/lasat/Makefile +++ b/arch/mips/lasat/Makefile | |||
| @@ -12,5 +12,3 @@ obj-$(CONFIG_PICVUE_PROC) += picvue_proc.o | |||
| 12 | 12 | ||
| 13 | clean: | 13 | clean: |
| 14 | make -C image clean | 14 | make -C image clean |
| 15 | |||
| 16 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/lasat/Platform b/arch/mips/lasat/Platform new file mode 100644 index 000000000000..760252828bf1 --- /dev/null +++ b/arch/mips/lasat/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # LASAT platforms | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_LASAT) += lasat/ | ||
| 5 | cflags-$(CONFIG_LASAT) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-lasat | ||
| 7 | load-$(CONFIG_LASAT) += 0xffffffff80000000 | ||
diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform new file mode 100644 index 000000000000..29692e5433b1 --- /dev/null +++ b/arch/mips/loongson/Platform | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | # | ||
| 2 | # Loongson Processors' Support | ||
| 3 | # | ||
| 4 | |||
| 5 | # Only gcc >= 4.4 have Loongson specific support | ||
| 6 | cflags-$(CONFIG_CPU_LOONGSON2) += -Wa,--trap | ||
| 7 | cflags-$(CONFIG_CPU_LOONGSON2E) += \ | ||
| 8 | $(call cc-option,-march=loongson2e,-march=r4600) | ||
| 9 | cflags-$(CONFIG_CPU_LOONGSON2F) += \ | ||
| 10 | $(call cc-option,-march=loongson2f,-march=r4600) | ||
| 11 | # Enable the workarounds for Loongson2f | ||
| 12 | ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS | ||
| 13 | ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) | ||
| 14 | $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) | ||
| 15 | else | ||
| 16 | cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-nop | ||
| 17 | endif | ||
| 18 | ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-jump,),) | ||
| 19 | $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-jump) | ||
| 20 | else | ||
| 21 | cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump | ||
| 22 | endif | ||
| 23 | endif | ||
| 24 | |||
| 25 | # | ||
| 26 | # Loongson Machines' Support | ||
| 27 | # | ||
| 28 | |||
| 29 | platform-$(CONFIG_MACH_LOONGSON) += loongson/ | ||
| 30 | cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely | ||
| 31 | load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 | ||
| 32 | load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 | ||
diff --git a/arch/mips/loongson/common/cs5536/Makefile b/arch/mips/loongson/common/cs5536/Makefile index 510d4cdc2378..f12e64007347 100644 --- a/arch/mips/loongson/common/cs5536/Makefile +++ b/arch/mips/loongson/common/cs5536/Makefile | |||
| @@ -9,5 +9,3 @@ obj-$(CONFIG_CS5536) += cs5536_pci.o cs5536_ide.o cs5536_acc.o cs5536_ohci.o \ | |||
| 9 | # Enable cs5536 mfgpt Timer | 9 | # Enable cs5536 mfgpt Timer |
| 10 | # | 10 | # |
| 11 | obj-$(CONFIG_CS5536_MFGPT) += cs5536_mfgpt.o | 11 | obj-$(CONFIG_CS5536_MFGPT) += cs5536_mfgpt.o |
| 12 | |||
| 13 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/loongson/common/irq.c b/arch/mips/loongson/common/irq.c index 20e732831978..5897471dedca 100644 --- a/arch/mips/loongson/common/irq.c +++ b/arch/mips/loongson/common/irq.c | |||
| @@ -21,19 +21,16 @@ void bonito_irqdispatch(void) | |||
| 21 | 21 | ||
| 22 | /* workaround the IO dma problem: let cpu looping to allow DMA finish */ | 22 | /* workaround the IO dma problem: let cpu looping to allow DMA finish */ |
| 23 | int_status = LOONGSON_INTISR; | 23 | int_status = LOONGSON_INTISR; |
| 24 | if (int_status & (1 << 10)) { | 24 | while (int_status & (1 << 10)) { |
| 25 | while (int_status & (1 << 10)) { | 25 | udelay(1); |
| 26 | udelay(1); | 26 | int_status = LOONGSON_INTISR; |
| 27 | int_status = LOONGSON_INTISR; | ||
| 28 | } | ||
| 29 | } | 27 | } |
| 30 | 28 | ||
| 31 | /* Get pending sources, masked by current enables */ | 29 | /* Get pending sources, masked by current enables */ |
| 32 | int_status = LOONGSON_INTISR & LOONGSON_INTEN; | 30 | int_status = LOONGSON_INTISR & LOONGSON_INTEN; |
| 33 | 31 | ||
| 34 | if (int_status != 0) { | 32 | if (int_status) { |
| 35 | i = __ffs(int_status); | 33 | i = __ffs(int_status); |
| 36 | int_status &= ~(1 << i); | ||
| 37 | do_IRQ(LOONGSON_IRQ_BASE + i); | 34 | do_IRQ(LOONGSON_IRQ_BASE + i); |
| 38 | } | 35 | } |
| 39 | } | 36 | } |
| @@ -56,9 +53,6 @@ void __init arch_init_irq(void) | |||
| 56 | */ | 53 | */ |
| 57 | clear_c0_status(ST0_IM | ST0_BEV); | 54 | clear_c0_status(ST0_IM | ST0_BEV); |
| 58 | 55 | ||
| 59 | /* setting irq trigger mode */ | ||
| 60 | set_irq_trigger_mode(); | ||
| 61 | |||
| 62 | /* no steer */ | 56 | /* no steer */ |
| 63 | LOONGSON_INTSTEER = 0; | 57 | LOONGSON_INTSTEER = 0; |
| 64 | 58 | ||
diff --git a/arch/mips/loongson/fuloong-2e/Makefile b/arch/mips/loongson/fuloong-2e/Makefile index 3aba5fcc09dc..b7622720c1ad 100644 --- a/arch/mips/loongson/fuloong-2e/Makefile +++ b/arch/mips/loongson/fuloong-2e/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += irq.o reset.o | 5 | obj-y += irq.o reset.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/loongson/fuloong-2e/irq.c b/arch/mips/loongson/fuloong-2e/irq.c index 320e9379bdd7..d61a04222b87 100644 --- a/arch/mips/loongson/fuloong-2e/irq.c +++ b/arch/mips/loongson/fuloong-2e/irq.c | |||
| @@ -30,7 +30,7 @@ asmlinkage void mach_irq_dispatch(unsigned int pending) | |||
| 30 | if (pending & CAUSEF_IP7) | 30 | if (pending & CAUSEF_IP7) |
| 31 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); | 31 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); |
| 32 | else if (pending & CAUSEF_IP6) /* perf counter loverflow */ | 32 | else if (pending & CAUSEF_IP6) /* perf counter loverflow */ |
| 33 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | 33 | do_perfcnt_IRQ(); |
| 34 | else if (pending & CAUSEF_IP5) | 34 | else if (pending & CAUSEF_IP5) |
| 35 | i8259_irqdispatch(); | 35 | i8259_irqdispatch(); |
| 36 | else if (pending & CAUSEF_IP2) | 36 | else if (pending & CAUSEF_IP2) |
| @@ -44,13 +44,6 @@ static struct irqaction cascade_irqaction = { | |||
| 44 | .name = "cascade", | 44 | .name = "cascade", |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | void __init set_irq_trigger_mode(void) | ||
| 48 | { | ||
| 49 | /* most bonito irq should be level triggered */ | ||
| 50 | LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR | | ||
| 51 | LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES; | ||
| 52 | } | ||
| 53 | |||
| 54 | void __init mach_init_irq(void) | 47 | void __init mach_init_irq(void) |
| 55 | { | 48 | { |
| 56 | /* init all controller | 49 | /* init all controller |
| @@ -59,6 +52,10 @@ void __init mach_init_irq(void) | |||
| 59 | * 32-63 ------> bonito irq | 52 | * 32-63 ------> bonito irq |
| 60 | */ | 53 | */ |
| 61 | 54 | ||
| 55 | /* most bonito irq should be level triggered */ | ||
| 56 | LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR | | ||
| 57 | LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES; | ||
| 58 | |||
| 62 | /* Sets the first-level interrupt dispatcher. */ | 59 | /* Sets the first-level interrupt dispatcher. */ |
| 63 | mips_cpu_irq_init(); | 60 | mips_cpu_irq_init(); |
| 64 | init_i8259_irqs(); | 61 | init_i8259_irqs(); |
diff --git a/arch/mips/loongson/lemote-2f/irq.c b/arch/mips/loongson/lemote-2f/irq.c index 1d8b4d28a058..081db102bb98 100644 --- a/arch/mips/loongson/lemote-2f/irq.c +++ b/arch/mips/loongson/lemote-2f/irq.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <machine.h> | 19 | #include <machine.h> |
| 20 | 20 | ||
| 21 | #define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ | 21 | #define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ |
| 22 | #define LOONGSON_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ | ||
| 23 | #define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ | 22 | #define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ |
| 24 | #define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ | 23 | #define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ |
| 25 | #define LOONGSON_SOUTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 2) /* i8259 */ | 24 | #define LOONGSON_SOUTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 2) /* i8259 */ |
| @@ -79,9 +78,7 @@ void mach_irq_dispatch(unsigned int pending) | |||
| 79 | if (pending & CAUSEF_IP7) | 78 | if (pending & CAUSEF_IP7) |
| 80 | do_IRQ(LOONGSON_TIMER_IRQ); | 79 | do_IRQ(LOONGSON_TIMER_IRQ); |
| 81 | else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ | 80 | else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ |
| 82 | #if defined(CONFIG_OPROFILE) || defined(CONFIG_OPROFILE_MODULE) | 81 | do_perfcnt_IRQ(); |
| 83 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | ||
| 84 | #endif | ||
| 85 | bonito_irqdispatch(); | 82 | bonito_irqdispatch(); |
| 86 | } else if (pending & CAUSEF_IP3) /* CPU UART */ | 83 | } else if (pending & CAUSEF_IP3) /* CPU UART */ |
| 87 | do_IRQ(LOONGSON_UART_IRQ); | 84 | do_IRQ(LOONGSON_UART_IRQ); |
| @@ -91,13 +88,6 @@ void mach_irq_dispatch(unsigned int pending) | |||
| 91 | spurious_interrupt(); | 88 | spurious_interrupt(); |
| 92 | } | 89 | } |
| 93 | 90 | ||
| 94 | void __init set_irq_trigger_mode(void) | ||
| 95 | { | ||
| 96 | /* setup cs5536 as high level trigger */ | ||
| 97 | LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1; | ||
| 98 | LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1); | ||
| 99 | } | ||
| 100 | |||
| 101 | static irqreturn_t ip6_action(int cpl, void *dev_id) | 91 | static irqreturn_t ip6_action(int cpl, void *dev_id) |
| 102 | { | 92 | { |
| 103 | return IRQ_HANDLED; | 93 | return IRQ_HANDLED; |
| @@ -122,6 +112,10 @@ void __init mach_init_irq(void) | |||
| 122 | * 32-63 ------> bonito irq | 112 | * 32-63 ------> bonito irq |
| 123 | */ | 113 | */ |
| 124 | 114 | ||
| 115 | /* setup cs5536 as high level trigger */ | ||
| 116 | LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1; | ||
| 117 | LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1); | ||
| 118 | |||
| 125 | /* Sets the first-level interrupt dispatcher. */ | 119 | /* Sets the first-level interrupt dispatcher. */ |
| 126 | mips_cpu_irq_init(); | 120 | mips_cpu_irq_init(); |
| 127 | init_i8259_irqs(); | 121 | init_i8259_irqs(); |
diff --git a/arch/mips/math-emu/Makefile b/arch/mips/math-emu/Makefile index d547efdeedc2..96607230d9ea 100644 --- a/arch/mips/math-emu/Makefile +++ b/arch/mips/math-emu/Makefile | |||
| @@ -10,4 +10,3 @@ obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \ | |||
| 10 | sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \ | 10 | sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \ |
| 11 | dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o | 11 | dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o |
| 12 | 12 | ||
| 13 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/math-emu/dp_modf.c b/arch/mips/math-emu/dp_modf.c index 25861a42c36f..a8570e5c3efc 100644 --- a/arch/mips/math-emu/dp_modf.c +++ b/arch/mips/math-emu/dp_modf.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | /* modf function is always exact for a finite number | 30 | /* modf function is always exact for a finite number |
| 31 | */ | 31 | */ |
| 32 | ieee754dp ieee754dp_modf(ieee754dp x, ieee754dp * ip) | 32 | ieee754dp ieee754dp_modf(ieee754dp x, ieee754dp *ip) |
| 33 | { | 33 | { |
| 34 | COMPXDP; | 34 | COMPXDP; |
| 35 | 35 | ||
diff --git a/arch/mips/math-emu/dp_tint.c b/arch/mips/math-emu/dp_tint.c index 77b2b7ccf28a..24478623c117 100644 --- a/arch/mips/math-emu/dp_tint.c +++ b/arch/mips/math-emu/dp_tint.c | |||
| @@ -69,8 +69,7 @@ int ieee754dp_tint(ieee754dp x) | |||
| 69 | round = 0; | 69 | round = 0; |
| 70 | sticky = residue != 0; | 70 | sticky = residue != 0; |
| 71 | xm = 0; | 71 | xm = 0; |
| 72 | } | 72 | } else { |
| 73 | else { | ||
| 74 | residue = xm << (64 - DP_MBITS + xe); | 73 | residue = xm << (64 - DP_MBITS + xe); |
| 75 | round = (residue >> 63) != 0; | 74 | round = (residue >> 63) != 0; |
| 76 | sticky = (residue << 1) != 0; | 75 | sticky = (residue << 1) != 0; |
diff --git a/arch/mips/math-emu/dp_tlong.c b/arch/mips/math-emu/dp_tlong.c index d71113e07164..0f07ec2be3f9 100644 --- a/arch/mips/math-emu/dp_tlong.c +++ b/arch/mips/math-emu/dp_tlong.c | |||
| @@ -71,8 +71,7 @@ s64 ieee754dp_tlong(ieee754dp x) | |||
| 71 | round = 0; | 71 | round = 0; |
| 72 | sticky = residue != 0; | 72 | sticky = residue != 0; |
| 73 | xm = 0; | 73 | xm = 0; |
| 74 | } | 74 | } else { |
| 75 | else { | ||
| 76 | /* Shifting a u64 64 times does not work, | 75 | /* Shifting a u64 64 times does not work, |
| 77 | * so we do it in two steps. Be aware that xe | 76 | * so we do it in two steps. Be aware that xe |
| 78 | * may be -1 */ | 77 | * may be -1 */ |
diff --git a/arch/mips/math-emu/sp_modf.c b/arch/mips/math-emu/sp_modf.c index 4b1dbac796f8..76568946b4c0 100644 --- a/arch/mips/math-emu/sp_modf.c +++ b/arch/mips/math-emu/sp_modf.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | /* modf function is always exact for a finite number | 30 | /* modf function is always exact for a finite number |
| 31 | */ | 31 | */ |
| 32 | ieee754sp ieee754sp_modf(ieee754sp x, ieee754sp * ip) | 32 | ieee754sp ieee754sp_modf(ieee754sp x, ieee754sp *ip) |
| 33 | { | 33 | { |
| 34 | COMPXSP; | 34 | COMPXSP; |
| 35 | 35 | ||
diff --git a/arch/mips/math-emu/sp_tint.c b/arch/mips/math-emu/sp_tint.c index 1d73d2abe0b5..352dc3a5f1af 100644 --- a/arch/mips/math-emu/sp_tint.c +++ b/arch/mips/math-emu/sp_tint.c | |||
| @@ -72,8 +72,7 @@ int ieee754sp_tint(ieee754sp x) | |||
| 72 | round = 0; | 72 | round = 0; |
| 73 | sticky = residue != 0; | 73 | sticky = residue != 0; |
| 74 | xm = 0; | 74 | xm = 0; |
| 75 | } | 75 | } else { |
| 76 | else { | ||
| 77 | /* Shifting a u32 32 times does not work, | 76 | /* Shifting a u32 32 times does not work, |
| 78 | * so we do it in two steps. Be aware that xe | 77 | * so we do it in two steps. Be aware that xe |
| 79 | * may be -1 */ | 78 | * may be -1 */ |
diff --git a/arch/mips/math-emu/sp_tlong.c b/arch/mips/math-emu/sp_tlong.c index 4be21aa81fbf..92cd9c511a10 100644 --- a/arch/mips/math-emu/sp_tlong.c +++ b/arch/mips/math-emu/sp_tlong.c | |||
| @@ -71,8 +71,7 @@ s64 ieee754sp_tlong(ieee754sp x) | |||
| 71 | round = 0; | 71 | round = 0; |
| 72 | sticky = residue != 0; | 72 | sticky = residue != 0; |
| 73 | xm = 0; | 73 | xm = 0; |
| 74 | } | 74 | } else { |
| 75 | else { | ||
| 76 | residue = xm << (32 - SP_MBITS + xe); | 75 | residue = xm << (32 - SP_MBITS + xe); |
| 77 | round = (residue >> 31) != 0; | 76 | round = (residue >> 31) != 0; |
| 78 | sticky = (residue << 1) != 0; | 77 | sticky = (residue << 1) != 0; |
diff --git a/arch/mips/mipssim/Makefile b/arch/mips/mipssim/Makefile index 41b96571315e..01410a3f1729 100644 --- a/arch/mips/mipssim/Makefile +++ b/arch/mips/mipssim/Makefile | |||
| @@ -21,5 +21,3 @@ obj-y := sim_platform.o sim_setup.o sim_mem.o sim_time.o sim_int.o | |||
| 21 | 21 | ||
| 22 | obj-$(CONFIG_EARLY_PRINTK) += sim_console.o | 22 | obj-$(CONFIG_EARLY_PRINTK) += sim_console.o |
| 23 | obj-$(CONFIG_MIPS_MT_SMTC) += sim_smtc.o | 23 | obj-$(CONFIG_MIPS_MT_SMTC) += sim_smtc.o |
| 24 | |||
| 25 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/mipssim/Platform b/arch/mips/mipssim/Platform new file mode 100644 index 000000000000..3df60b8a12ef --- /dev/null +++ b/arch/mips/mipssim/Platform | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # MIPS SIM | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MIPS_SIM) += mipssim/ | ||
| 5 | cflags-$(CONFIG_MIPS_SIM) += -I$(srctree)/arch/mips/include/asm/mach-mipssim | ||
| 6 | load-$(CONFIG_MIPS_SIM) += 0x80100000 | ||
diff --git a/arch/mips/mm/Makefile b/arch/mips/mm/Makefile index f0e435599707..d679c772d082 100644 --- a/arch/mips/mm/Makefile +++ b/arch/mips/mm/Makefile | |||
| @@ -34,5 +34,3 @@ obj-$(CONFIG_IP22_CPU_SCACHE) += sc-ip22.o | |||
| 34 | obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o | 34 | obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o |
| 35 | obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o | 35 | obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o |
| 36 | obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o | 36 | obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o |
| 37 | |||
| 38 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index b78f7d913ca4..783ad0065fdf 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c | |||
| @@ -16,8 +16,8 @@ | |||
| 16 | #include <linux/mman.h> | 16 | #include <linux/mman.h> |
| 17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/vt_kern.h> /* For unblank_screen() */ | ||
| 20 | #include <linux/module.h> | 19 | #include <linux/module.h> |
| 20 | #include <linux/kprobes.h> | ||
| 21 | 21 | ||
| 22 | #include <asm/branch.h> | 22 | #include <asm/branch.h> |
| 23 | #include <asm/mmu_context.h> | 23 | #include <asm/mmu_context.h> |
| @@ -25,13 +25,14 @@ | |||
| 25 | #include <asm/uaccess.h> | 25 | #include <asm/uaccess.h> |
| 26 | #include <asm/ptrace.h> | 26 | #include <asm/ptrace.h> |
| 27 | #include <asm/highmem.h> /* For VMALLOC_END */ | 27 | #include <asm/highmem.h> /* For VMALLOC_END */ |
| 28 | #include <linux/kdebug.h> | ||
| 28 | 29 | ||
| 29 | /* | 30 | /* |
| 30 | * This routine handles page faults. It determines the address, | 31 | * This routine handles page faults. It determines the address, |
| 31 | * and the problem, and then passes it off to one of the appropriate | 32 | * and the problem, and then passes it off to one of the appropriate |
| 32 | * routines. | 33 | * routines. |
| 33 | */ | 34 | */ |
| 34 | asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, | 35 | asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long write, |
| 35 | unsigned long address) | 36 | unsigned long address) |
| 36 | { | 37 | { |
| 37 | struct vm_area_struct * vma = NULL; | 38 | struct vm_area_struct * vma = NULL; |
| @@ -47,6 +48,17 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, | |||
| 47 | field, regs->cp0_epc); | 48 | field, regs->cp0_epc); |
| 48 | #endif | 49 | #endif |
| 49 | 50 | ||
| 51 | #ifdef CONFIG_KPROBES | ||
| 52 | /* | ||
| 53 | * This is to notify the fault handler of the kprobes. The | ||
| 54 | * exception code is redundant as it is also carried in REGS, | ||
| 55 | * but we pass it anyhow. | ||
| 56 | */ | ||
| 57 | if (notify_die(DIE_PAGE_FAULT, "page fault", regs, -1, | ||
| 58 | (regs->cp0_cause >> 2) & 0x1f, SIGSEGV) == NOTIFY_STOP) | ||
| 59 | return; | ||
| 60 | #endif | ||
| 61 | |||
| 50 | info.si_code = SEGV_MAPERR; | 62 | info.si_code = SEGV_MAPERR; |
| 51 | 63 | ||
| 52 | /* | 64 | /* |
diff --git a/arch/mips/mm/sc-rm7k.c b/arch/mips/mm/sc-rm7k.c index de69bfbf506e..1ef75cd80a0d 100644 --- a/arch/mips/mm/sc-rm7k.c +++ b/arch/mips/mm/sc-rm7k.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <asm/cacheops.h> | 16 | #include <asm/cacheops.h> |
| 17 | #include <asm/mipsregs.h> | 17 | #include <asm/mipsregs.h> |
| 18 | #include <asm/processor.h> | 18 | #include <asm/processor.h> |
| 19 | #include <asm/sections.h> | ||
| 19 | #include <asm/cacheflush.h> /* for run_uncached() */ | 20 | #include <asm/cacheflush.h> /* for run_uncached() */ |
| 20 | 21 | ||
| 21 | /* Primary cache parameters. */ | 22 | /* Primary cache parameters. */ |
| @@ -25,11 +26,15 @@ | |||
| 25 | /* Secondary cache parameters. */ | 26 | /* Secondary cache parameters. */ |
| 26 | #define scache_size (256*1024) /* Fixed to 256KiB on RM7000 */ | 27 | #define scache_size (256*1024) /* Fixed to 256KiB on RM7000 */ |
| 27 | 28 | ||
| 29 | /* Tertiary cache parameters */ | ||
| 30 | #define tc_lsize 32 | ||
| 31 | |||
| 28 | extern unsigned long icache_way_size, dcache_way_size; | 32 | extern unsigned long icache_way_size, dcache_way_size; |
| 33 | unsigned long tcache_size; | ||
| 29 | 34 | ||
| 30 | #include <asm/r4kcache.h> | 35 | #include <asm/r4kcache.h> |
| 31 | 36 | ||
| 32 | static int rm7k_tcache_enabled; | 37 | static int rm7k_tcache_init; |
| 33 | 38 | ||
| 34 | /* | 39 | /* |
| 35 | * Writeback and invalidate the primary cache dcache before DMA. | 40 | * Writeback and invalidate the primary cache dcache before DMA. |
| @@ -46,7 +51,7 @@ static void rm7k_sc_wback_inv(unsigned long addr, unsigned long size) | |||
| 46 | 51 | ||
| 47 | blast_scache_range(addr, addr + size); | 52 | blast_scache_range(addr, addr + size); |
| 48 | 53 | ||
| 49 | if (!rm7k_tcache_enabled) | 54 | if (!rm7k_tcache_init) |
| 50 | return; | 55 | return; |
| 51 | 56 | ||
| 52 | a = addr & ~(tc_pagesize - 1); | 57 | a = addr & ~(tc_pagesize - 1); |
| @@ -70,7 +75,7 @@ static void rm7k_sc_inv(unsigned long addr, unsigned long size) | |||
| 70 | 75 | ||
| 71 | blast_inv_scache_range(addr, addr + size); | 76 | blast_inv_scache_range(addr, addr + size); |
| 72 | 77 | ||
| 73 | if (!rm7k_tcache_enabled) | 78 | if (!rm7k_tcache_init) |
| 74 | return; | 79 | return; |
| 75 | 80 | ||
| 76 | a = addr & ~(tc_pagesize - 1); | 81 | a = addr & ~(tc_pagesize - 1); |
| @@ -83,6 +88,45 @@ static void rm7k_sc_inv(unsigned long addr, unsigned long size) | |||
| 83 | } | 88 | } |
| 84 | } | 89 | } |
| 85 | 90 | ||
| 91 | static void blast_rm7k_tcache(void) | ||
| 92 | { | ||
| 93 | unsigned long start = CKSEG0ADDR(0); | ||
| 94 | unsigned long end = start + tcache_size; | ||
| 95 | |||
| 96 | write_c0_taglo(0); | ||
| 97 | |||
| 98 | while (start < end) { | ||
| 99 | cache_op(Page_Invalidate_T, start); | ||
| 100 | start += tc_pagesize; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | |||
| 104 | /* | ||
| 105 | * This function is executed in uncached address space. | ||
| 106 | */ | ||
| 107 | static __cpuinit void __rm7k_tc_enable(void) | ||
| 108 | { | ||
| 109 | int i; | ||
| 110 | |||
| 111 | set_c0_config(RM7K_CONF_TE); | ||
| 112 | |||
| 113 | write_c0_taglo(0); | ||
| 114 | write_c0_taghi(0); | ||
| 115 | |||
| 116 | for (i = 0; i < tcache_size; i += tc_lsize) | ||
| 117 | cache_op(Index_Store_Tag_T, CKSEG0ADDR(i)); | ||
| 118 | } | ||
| 119 | |||
| 120 | static __cpuinit void rm7k_tc_enable(void) | ||
| 121 | { | ||
| 122 | if (read_c0_config() & RM7K_CONF_TE) | ||
| 123 | return; | ||
| 124 | |||
| 125 | BUG_ON(tcache_size == 0); | ||
| 126 | |||
| 127 | run_uncached(__rm7k_tc_enable); | ||
| 128 | } | ||
| 129 | |||
| 86 | /* | 130 | /* |
| 87 | * This function is executed in uncached address space. | 131 | * This function is executed in uncached address space. |
| 88 | */ | 132 | */ |
| @@ -95,16 +139,8 @@ static __cpuinit void __rm7k_sc_enable(void) | |||
| 95 | write_c0_taglo(0); | 139 | write_c0_taglo(0); |
| 96 | write_c0_taghi(0); | 140 | write_c0_taghi(0); |
| 97 | 141 | ||
| 98 | for (i = 0; i < scache_size; i += sc_lsize) { | 142 | for (i = 0; i < scache_size; i += sc_lsize) |
| 99 | __asm__ __volatile__ ( | 143 | cache_op(Index_Store_Tag_SD, CKSEG0ADDR(i)); |
| 100 | ".set noreorder\n\t" | ||
| 101 | ".set mips3\n\t" | ||
| 102 | "cache %1, (%0)\n\t" | ||
| 103 | ".set mips0\n\t" | ||
| 104 | ".set reorder" | ||
| 105 | : | ||
| 106 | : "r" (CKSEG0ADDR(i)), "i" (Index_Store_Tag_SD)); | ||
| 107 | } | ||
| 108 | } | 144 | } |
| 109 | 145 | ||
| 110 | static __cpuinit void rm7k_sc_enable(void) | 146 | static __cpuinit void rm7k_sc_enable(void) |
| @@ -112,13 +148,29 @@ static __cpuinit void rm7k_sc_enable(void) | |||
| 112 | if (read_c0_config() & RM7K_CONF_SE) | 148 | if (read_c0_config() & RM7K_CONF_SE) |
| 113 | return; | 149 | return; |
| 114 | 150 | ||
| 115 | printk(KERN_INFO "Enabling secondary cache...\n"); | 151 | pr_info("Enabling secondary cache...\n"); |
| 116 | run_uncached(__rm7k_sc_enable); | 152 | run_uncached(__rm7k_sc_enable); |
| 153 | |||
| 154 | if (rm7k_tcache_init) | ||
| 155 | rm7k_tc_enable(); | ||
| 156 | } | ||
| 157 | |||
| 158 | static void rm7k_tc_disable(void) | ||
| 159 | { | ||
| 160 | unsigned long flags; | ||
| 161 | |||
| 162 | local_irq_save(flags); | ||
| 163 | blast_rm7k_tcache(); | ||
| 164 | clear_c0_config(RM7K_CONF_TE); | ||
| 165 | local_irq_save(flags); | ||
| 117 | } | 166 | } |
| 118 | 167 | ||
| 119 | static void rm7k_sc_disable(void) | 168 | static void rm7k_sc_disable(void) |
| 120 | { | 169 | { |
| 121 | clear_c0_config(RM7K_CONF_SE); | 170 | clear_c0_config(RM7K_CONF_SE); |
| 171 | |||
| 172 | if (rm7k_tcache_init) | ||
| 173 | rm7k_tc_disable(); | ||
| 122 | } | 174 | } |
| 123 | 175 | ||
| 124 | static struct bcache_ops rm7k_sc_ops = { | 176 | static struct bcache_ops rm7k_sc_ops = { |
| @@ -128,6 +180,52 @@ static struct bcache_ops rm7k_sc_ops = { | |||
| 128 | .bc_inv = rm7k_sc_inv | 180 | .bc_inv = rm7k_sc_inv |
| 129 | }; | 181 | }; |
| 130 | 182 | ||
| 183 | /* | ||
| 184 | * This is a probing function like the one found in c-r4k.c, we look for the | ||
| 185 | * wrap around point with different addresses. | ||
| 186 | */ | ||
| 187 | static __cpuinit void __probe_tcache(void) | ||
| 188 | { | ||
| 189 | unsigned long flags, addr, begin, end, pow2; | ||
| 190 | |||
| 191 | begin = (unsigned long) &_stext; | ||
| 192 | begin &= ~((8 * 1024 * 1024) - 1); | ||
| 193 | end = begin + (8 * 1024 * 1024); | ||
| 194 | |||
| 195 | local_irq_save(flags); | ||
| 196 | |||
| 197 | set_c0_config(RM7K_CONF_TE); | ||
| 198 | |||
| 199 | /* Fill size-multiple lines with a valid tag */ | ||
| 200 | pow2 = (256 * 1024); | ||
| 201 | for (addr = begin; addr <= end; addr = (begin + pow2)) { | ||
| 202 | unsigned long *p = (unsigned long *) addr; | ||
| 203 | __asm__ __volatile__("nop" : : "r" (*p)); | ||
| 204 | pow2 <<= 1; | ||
| 205 | } | ||
| 206 | |||
| 207 | /* Load first line with a 0 tag, to check after */ | ||
| 208 | write_c0_taglo(0); | ||
| 209 | write_c0_taghi(0); | ||
| 210 | cache_op(Index_Store_Tag_T, begin); | ||
| 211 | |||
| 212 | /* Look for the wrap-around */ | ||
| 213 | pow2 = (512 * 1024); | ||
| 214 | for (addr = begin + (512 * 1024); addr <= end; addr = begin + pow2) { | ||
| 215 | cache_op(Index_Load_Tag_T, addr); | ||
| 216 | if (!read_c0_taglo()) | ||
| 217 | break; | ||
| 218 | pow2 <<= 1; | ||
| 219 | } | ||
| 220 | |||
| 221 | addr -= begin; | ||
| 222 | tcache_size = addr; | ||
| 223 | |||
| 224 | clear_c0_config(RM7K_CONF_TE); | ||
| 225 | |||
| 226 | local_irq_restore(flags); | ||
| 227 | } | ||
| 228 | |||
| 131 | void __cpuinit rm7k_sc_init(void) | 229 | void __cpuinit rm7k_sc_init(void) |
| 132 | { | 230 | { |
| 133 | struct cpuinfo_mips *c = ¤t_cpu_data; | 231 | struct cpuinfo_mips *c = ¤t_cpu_data; |
| @@ -147,27 +245,26 @@ void __cpuinit rm7k_sc_init(void) | |||
| 147 | if (!(config & RM7K_CONF_SE)) | 245 | if (!(config & RM7K_CONF_SE)) |
| 148 | rm7k_sc_enable(); | 246 | rm7k_sc_enable(); |
| 149 | 247 | ||
| 248 | bcops = &rm7k_sc_ops; | ||
| 249 | |||
| 150 | /* | 250 | /* |
| 151 | * While we're at it let's deal with the tertiary cache. | 251 | * While we're at it let's deal with the tertiary cache. |
| 152 | */ | 252 | */ |
| 153 | if (!(config & RM7K_CONF_TC)) { | ||
| 154 | |||
| 155 | /* | ||
| 156 | * We can't enable the L3 cache yet. There may be board-specific | ||
| 157 | * magic necessary to turn it on, and blindly asking the CPU to | ||
| 158 | * start using it would may give cache errors. | ||
| 159 | * | ||
| 160 | * Also, board-specific knowledge may allow us to use the | ||
| 161 | * CACHE Flash_Invalidate_T instruction if the tag RAM supports | ||
| 162 | * it, and may specify the size of the L3 cache so we don't have | ||
| 163 | * to probe it. | ||
| 164 | */ | ||
| 165 | printk(KERN_INFO "Tertiary cache present, %s enabled\n", | ||
| 166 | (config & RM7K_CONF_TE) ? "already" : "not (yet)"); | ||
| 167 | |||
| 168 | if ((config & RM7K_CONF_TE)) | ||
| 169 | rm7k_tcache_enabled = 1; | ||
| 170 | } | ||
| 171 | 253 | ||
| 172 | bcops = &rm7k_sc_ops; | 254 | rm7k_tcache_init = 0; |
| 255 | tcache_size = 0; | ||
| 256 | |||
| 257 | if (config & RM7K_CONF_TC) | ||
| 258 | return; | ||
| 259 | |||
| 260 | /* | ||
| 261 | * No efficient way to ask the hardware for the size of the tcache, | ||
| 262 | * so must probe for it. | ||
| 263 | */ | ||
| 264 | run_uncached(__probe_tcache); | ||
| 265 | rm7k_tc_enable(); | ||
| 266 | rm7k_tcache_init = 1; | ||
| 267 | c->tcache.linesz = tc_lsize; | ||
| 268 | c->tcache.ways = 1; | ||
| 269 | pr_info("Tertiary cache size %ldK.\n", (tcache_size >> 10)); | ||
| 173 | } | 270 | } |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 86f004dc8355..4510e61883eb 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
| @@ -409,6 +409,11 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l, | |||
| 409 | tlbw(p); | 409 | tlbw(p); |
| 410 | break; | 410 | break; |
| 411 | 411 | ||
| 412 | case CPU_JZRISC: | ||
| 413 | tlbw(p); | ||
| 414 | uasm_i_nop(p); | ||
| 415 | break; | ||
| 416 | |||
| 412 | default: | 417 | default: |
| 413 | panic("No TLB refill handler yet (CPU type: %d)", | 418 | panic("No TLB refill handler yet (CPU type: %d)", |
| 414 | current_cpu_data.cputype); | 419 | current_cpu_data.cputype); |
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index 611d564fdcf1..d2647a4e012b 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c | |||
| @@ -62,12 +62,13 @@ enum opcode { | |||
| 62 | insn_beql, insn_bgez, insn_bgezl, insn_bltz, insn_bltzl, | 62 | insn_beql, insn_bgez, insn_bgezl, insn_bltz, insn_bltzl, |
| 63 | insn_bne, insn_cache, insn_daddu, insn_daddiu, insn_dmfc0, | 63 | insn_bne, insn_cache, insn_daddu, insn_daddiu, insn_dmfc0, |
| 64 | insn_dmtc0, insn_dsll, insn_dsll32, insn_dsra, insn_dsrl, | 64 | insn_dmtc0, insn_dsll, insn_dsll32, insn_dsra, insn_dsrl, |
| 65 | insn_dsrl32, insn_drotr, insn_dsubu, insn_eret, insn_j, insn_jal, | 65 | insn_dsrl32, insn_drotr, insn_drotr32, insn_dsubu, insn_eret, |
| 66 | insn_jr, insn_ld, insn_ll, insn_lld, insn_lui, insn_lw, insn_mfc0, | 66 | insn_j, insn_jal, insn_jr, insn_ld, insn_ll, insn_lld, |
| 67 | insn_mtc0, insn_or, insn_ori, insn_pref, insn_rfe, insn_sc, insn_scd, | 67 | insn_lui, insn_lw, insn_mfc0, insn_mtc0, insn_or, insn_ori, |
| 68 | insn_sd, insn_sll, insn_sra, insn_srl, insn_rotr, insn_subu, insn_sw, | 68 | insn_pref, insn_rfe, insn_sc, insn_scd, insn_sd, insn_sll, |
| 69 | insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, insn_xori, | 69 | insn_sra, insn_srl, insn_rotr, insn_subu, insn_sw, insn_tlbp, |
| 70 | insn_dins, insn_syscall | 70 | insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, insn_xori, |
| 71 | insn_dins, insn_syscall, insn_bbit0, insn_bbit1 | ||
| 71 | }; | 72 | }; |
| 72 | 73 | ||
| 73 | struct insn { | 74 | struct insn { |
| @@ -85,7 +86,7 @@ struct insn { | |||
| 85 | | (e) << RE_SH \ | 86 | | (e) << RE_SH \ |
| 86 | | (f) << FUNC_SH) | 87 | | (f) << FUNC_SH) |
| 87 | 88 | ||
| 88 | static struct insn insn_table[] __cpuinitdata = { | 89 | static struct insn insn_table[] __uasminitdata = { |
| 89 | { insn_addiu, M(addiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, | 90 | { insn_addiu, M(addiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, |
| 90 | { insn_addu, M(spec_op, 0, 0, 0, 0, addu_op), RS | RT | RD }, | 91 | { insn_addu, M(spec_op, 0, 0, 0, 0, addu_op), RS | RT | RD }, |
| 91 | { insn_and, M(spec_op, 0, 0, 0, 0, and_op), RS | RT | RD }, | 92 | { insn_and, M(spec_op, 0, 0, 0, 0, and_op), RS | RT | RD }, |
| @@ -108,6 +109,7 @@ static struct insn insn_table[] __cpuinitdata = { | |||
| 108 | { insn_dsrl, M(spec_op, 0, 0, 0, 0, dsrl_op), RT | RD | RE }, | 109 | { insn_dsrl, M(spec_op, 0, 0, 0, 0, dsrl_op), RT | RD | RE }, |
| 109 | { insn_dsrl32, M(spec_op, 0, 0, 0, 0, dsrl32_op), RT | RD | RE }, | 110 | { insn_dsrl32, M(spec_op, 0, 0, 0, 0, dsrl32_op), RT | RD | RE }, |
| 110 | { insn_drotr, M(spec_op, 1, 0, 0, 0, dsrl_op), RT | RD | RE }, | 111 | { insn_drotr, M(spec_op, 1, 0, 0, 0, dsrl_op), RT | RD | RE }, |
| 112 | { insn_drotr32, M(spec_op, 1, 0, 0, 0, dsrl32_op), RT | RD | RE }, | ||
| 111 | { insn_dsubu, M(spec_op, 0, 0, 0, 0, dsubu_op), RS | RT | RD }, | 113 | { insn_dsubu, M(spec_op, 0, 0, 0, 0, dsubu_op), RS | RT | RD }, |
| 112 | { insn_eret, M(cop0_op, cop_op, 0, 0, 0, eret_op), 0 }, | 114 | { insn_eret, M(cop0_op, cop_op, 0, 0, 0, eret_op), 0 }, |
| 113 | { insn_j, M(j_op, 0, 0, 0, 0, 0), JIMM }, | 115 | { insn_j, M(j_op, 0, 0, 0, 0, 0), JIMM }, |
| @@ -141,12 +143,14 @@ static struct insn insn_table[] __cpuinitdata = { | |||
| 141 | { insn_xori, M(xori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, | 143 | { insn_xori, M(xori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, |
| 142 | { insn_dins, M(spec3_op, 0, 0, 0, 0, dins_op), RS | RT | RD | RE }, | 144 | { insn_dins, M(spec3_op, 0, 0, 0, 0, dins_op), RS | RT | RD | RE }, |
| 143 | { insn_syscall, M(spec_op, 0, 0, 0, 0, syscall_op), SCIMM}, | 145 | { insn_syscall, M(spec_op, 0, 0, 0, 0, syscall_op), SCIMM}, |
| 146 | { insn_bbit0, M(lwc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, | ||
| 147 | { insn_bbit1, M(swc2_op, 0, 0, 0, 0, 0), RS | RT | BIMM }, | ||
| 144 | { insn_invalid, 0, 0 } | 148 | { insn_invalid, 0, 0 } |
| 145 | }; | 149 | }; |
| 146 | 150 | ||
| 147 | #undef M | 151 | #undef M |
| 148 | 152 | ||
| 149 | static inline __cpuinit u32 build_rs(u32 arg) | 153 | static inline __uasminit u32 build_rs(u32 arg) |
| 150 | { | 154 | { |
| 151 | if (arg & ~RS_MASK) | 155 | if (arg & ~RS_MASK) |
| 152 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 156 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -154,7 +158,7 @@ static inline __cpuinit u32 build_rs(u32 arg) | |||
| 154 | return (arg & RS_MASK) << RS_SH; | 158 | return (arg & RS_MASK) << RS_SH; |
| 155 | } | 159 | } |
| 156 | 160 | ||
| 157 | static inline __cpuinit u32 build_rt(u32 arg) | 161 | static inline __uasminit u32 build_rt(u32 arg) |
| 158 | { | 162 | { |
| 159 | if (arg & ~RT_MASK) | 163 | if (arg & ~RT_MASK) |
| 160 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 164 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -162,7 +166,7 @@ static inline __cpuinit u32 build_rt(u32 arg) | |||
| 162 | return (arg & RT_MASK) << RT_SH; | 166 | return (arg & RT_MASK) << RT_SH; |
| 163 | } | 167 | } |
| 164 | 168 | ||
| 165 | static inline __cpuinit u32 build_rd(u32 arg) | 169 | static inline __uasminit u32 build_rd(u32 arg) |
| 166 | { | 170 | { |
| 167 | if (arg & ~RD_MASK) | 171 | if (arg & ~RD_MASK) |
| 168 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 172 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -170,7 +174,7 @@ static inline __cpuinit u32 build_rd(u32 arg) | |||
| 170 | return (arg & RD_MASK) << RD_SH; | 174 | return (arg & RD_MASK) << RD_SH; |
| 171 | } | 175 | } |
| 172 | 176 | ||
| 173 | static inline __cpuinit u32 build_re(u32 arg) | 177 | static inline __uasminit u32 build_re(u32 arg) |
| 174 | { | 178 | { |
| 175 | if (arg & ~RE_MASK) | 179 | if (arg & ~RE_MASK) |
| 176 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 180 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -178,7 +182,7 @@ static inline __cpuinit u32 build_re(u32 arg) | |||
| 178 | return (arg & RE_MASK) << RE_SH; | 182 | return (arg & RE_MASK) << RE_SH; |
| 179 | } | 183 | } |
| 180 | 184 | ||
| 181 | static inline __cpuinit u32 build_simm(s32 arg) | 185 | static inline __uasminit u32 build_simm(s32 arg) |
| 182 | { | 186 | { |
| 183 | if (arg > 0x7fff || arg < -0x8000) | 187 | if (arg > 0x7fff || arg < -0x8000) |
| 184 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 188 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -186,7 +190,7 @@ static inline __cpuinit u32 build_simm(s32 arg) | |||
| 186 | return arg & 0xffff; | 190 | return arg & 0xffff; |
| 187 | } | 191 | } |
| 188 | 192 | ||
| 189 | static inline __cpuinit u32 build_uimm(u32 arg) | 193 | static inline __uasminit u32 build_uimm(u32 arg) |
| 190 | { | 194 | { |
| 191 | if (arg & ~IMM_MASK) | 195 | if (arg & ~IMM_MASK) |
| 192 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 196 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -194,7 +198,7 @@ static inline __cpuinit u32 build_uimm(u32 arg) | |||
| 194 | return arg & IMM_MASK; | 198 | return arg & IMM_MASK; |
| 195 | } | 199 | } |
| 196 | 200 | ||
| 197 | static inline __cpuinit u32 build_bimm(s32 arg) | 201 | static inline __uasminit u32 build_bimm(s32 arg) |
| 198 | { | 202 | { |
| 199 | if (arg > 0x1ffff || arg < -0x20000) | 203 | if (arg > 0x1ffff || arg < -0x20000) |
| 200 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 204 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -205,7 +209,7 @@ static inline __cpuinit u32 build_bimm(s32 arg) | |||
| 205 | return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); | 209 | return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); |
| 206 | } | 210 | } |
| 207 | 211 | ||
| 208 | static inline __cpuinit u32 build_jimm(u32 arg) | 212 | static inline __uasminit u32 build_jimm(u32 arg) |
| 209 | { | 213 | { |
| 210 | if (arg & ~((JIMM_MASK) << 2)) | 214 | if (arg & ~((JIMM_MASK) << 2)) |
| 211 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 215 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -213,7 +217,7 @@ static inline __cpuinit u32 build_jimm(u32 arg) | |||
| 213 | return (arg >> 2) & JIMM_MASK; | 217 | return (arg >> 2) & JIMM_MASK; |
| 214 | } | 218 | } |
| 215 | 219 | ||
| 216 | static inline __cpuinit u32 build_scimm(u32 arg) | 220 | static inline __uasminit u32 build_scimm(u32 arg) |
| 217 | { | 221 | { |
| 218 | if (arg & ~SCIMM_MASK) | 222 | if (arg & ~SCIMM_MASK) |
| 219 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 223 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -221,7 +225,7 @@ static inline __cpuinit u32 build_scimm(u32 arg) | |||
| 221 | return (arg & SCIMM_MASK) << SCIMM_SH; | 225 | return (arg & SCIMM_MASK) << SCIMM_SH; |
| 222 | } | 226 | } |
| 223 | 227 | ||
| 224 | static inline __cpuinit u32 build_func(u32 arg) | 228 | static inline __uasminit u32 build_func(u32 arg) |
| 225 | { | 229 | { |
| 226 | if (arg & ~FUNC_MASK) | 230 | if (arg & ~FUNC_MASK) |
| 227 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 231 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -229,7 +233,7 @@ static inline __cpuinit u32 build_func(u32 arg) | |||
| 229 | return arg & FUNC_MASK; | 233 | return arg & FUNC_MASK; |
| 230 | } | 234 | } |
| 231 | 235 | ||
| 232 | static inline __cpuinit u32 build_set(u32 arg) | 236 | static inline __uasminit u32 build_set(u32 arg) |
| 233 | { | 237 | { |
| 234 | if (arg & ~SET_MASK) | 238 | if (arg & ~SET_MASK) |
| 235 | printk(KERN_WARNING "Micro-assembler field overflow\n"); | 239 | printk(KERN_WARNING "Micro-assembler field overflow\n"); |
| @@ -241,7 +245,7 @@ static inline __cpuinit u32 build_set(u32 arg) | |||
| 241 | * The order of opcode arguments is implicitly left to right, | 245 | * The order of opcode arguments is implicitly left to right, |
| 242 | * starting with RS and ending with FUNC or IMM. | 246 | * starting with RS and ending with FUNC or IMM. |
| 243 | */ | 247 | */ |
| 244 | static void __cpuinit build_insn(u32 **buf, enum opcode opc, ...) | 248 | static void __uasminit build_insn(u32 **buf, enum opcode opc, ...) |
| 245 | { | 249 | { |
| 246 | struct insn *ip = NULL; | 250 | struct insn *ip = NULL; |
| 247 | unsigned int i; | 251 | unsigned int i; |
| @@ -291,67 +295,78 @@ static void __cpuinit build_insn(u32 **buf, enum opcode opc, ...) | |||
| 291 | Ip_u1u2u3(op) \ | 295 | Ip_u1u2u3(op) \ |
| 292 | { \ | 296 | { \ |
| 293 | build_insn(buf, insn##op, a, b, c); \ | 297 | build_insn(buf, insn##op, a, b, c); \ |
| 294 | } | 298 | } \ |
| 299 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 295 | 300 | ||
| 296 | #define I_u2u1u3(op) \ | 301 | #define I_u2u1u3(op) \ |
| 297 | Ip_u2u1u3(op) \ | 302 | Ip_u2u1u3(op) \ |
| 298 | { \ | 303 | { \ |
| 299 | build_insn(buf, insn##op, b, a, c); \ | 304 | build_insn(buf, insn##op, b, a, c); \ |
| 300 | } | 305 | } \ |
| 306 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 301 | 307 | ||
| 302 | #define I_u3u1u2(op) \ | 308 | #define I_u3u1u2(op) \ |
| 303 | Ip_u3u1u2(op) \ | 309 | Ip_u3u1u2(op) \ |
| 304 | { \ | 310 | { \ |
| 305 | build_insn(buf, insn##op, b, c, a); \ | 311 | build_insn(buf, insn##op, b, c, a); \ |
| 306 | } | 312 | } \ |
| 313 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 307 | 314 | ||
| 308 | #define I_u1u2s3(op) \ | 315 | #define I_u1u2s3(op) \ |
| 309 | Ip_u1u2s3(op) \ | 316 | Ip_u1u2s3(op) \ |
| 310 | { \ | 317 | { \ |
| 311 | build_insn(buf, insn##op, a, b, c); \ | 318 | build_insn(buf, insn##op, a, b, c); \ |
| 312 | } | 319 | } \ |
| 320 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 313 | 321 | ||
| 314 | #define I_u2s3u1(op) \ | 322 | #define I_u2s3u1(op) \ |
| 315 | Ip_u2s3u1(op) \ | 323 | Ip_u2s3u1(op) \ |
| 316 | { \ | 324 | { \ |
| 317 | build_insn(buf, insn##op, c, a, b); \ | 325 | build_insn(buf, insn##op, c, a, b); \ |
| 318 | } | 326 | } \ |
| 327 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 319 | 328 | ||
| 320 | #define I_u2u1s3(op) \ | 329 | #define I_u2u1s3(op) \ |
| 321 | Ip_u2u1s3(op) \ | 330 | Ip_u2u1s3(op) \ |
| 322 | { \ | 331 | { \ |
| 323 | build_insn(buf, insn##op, b, a, c); \ | 332 | build_insn(buf, insn##op, b, a, c); \ |
| 324 | } | 333 | } \ |
| 334 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 325 | 335 | ||
| 326 | #define I_u2u1msbu3(op) \ | 336 | #define I_u2u1msbu3(op) \ |
| 327 | Ip_u2u1msbu3(op) \ | 337 | Ip_u2u1msbu3(op) \ |
| 328 | { \ | 338 | { \ |
| 329 | build_insn(buf, insn##op, b, a, c+d-1, c); \ | 339 | build_insn(buf, insn##op, b, a, c+d-1, c); \ |
| 330 | } | 340 | } \ |
| 341 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 331 | 342 | ||
| 332 | #define I_u1u2(op) \ | 343 | #define I_u1u2(op) \ |
| 333 | Ip_u1u2(op) \ | 344 | Ip_u1u2(op) \ |
| 334 | { \ | 345 | { \ |
| 335 | build_insn(buf, insn##op, a, b); \ | 346 | build_insn(buf, insn##op, a, b); \ |
| 336 | } | 347 | } \ |
| 348 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 337 | 349 | ||
| 338 | #define I_u1s2(op) \ | 350 | #define I_u1s2(op) \ |
| 339 | Ip_u1s2(op) \ | 351 | Ip_u1s2(op) \ |
| 340 | { \ | 352 | { \ |
| 341 | build_insn(buf, insn##op, a, b); \ | 353 | build_insn(buf, insn##op, a, b); \ |
| 342 | } | 354 | } \ |
| 355 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 343 | 356 | ||
| 344 | #define I_u1(op) \ | 357 | #define I_u1(op) \ |
| 345 | Ip_u1(op) \ | 358 | Ip_u1(op) \ |
| 346 | { \ | 359 | { \ |
| 347 | build_insn(buf, insn##op, a); \ | 360 | build_insn(buf, insn##op, a); \ |
| 348 | } | 361 | } \ |
| 362 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 349 | 363 | ||
| 350 | #define I_0(op) \ | 364 | #define I_0(op) \ |
| 351 | Ip_0(op) \ | 365 | Ip_0(op) \ |
| 352 | { \ | 366 | { \ |
| 353 | build_insn(buf, insn##op); \ | 367 | build_insn(buf, insn##op); \ |
| 354 | } | 368 | } \ |
| 369 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
| 355 | 370 | ||
| 356 | I_u2u1s3(_addiu) | 371 | I_u2u1s3(_addiu) |
| 357 | I_u3u1u2(_addu) | 372 | I_u3u1u2(_addu) |
| @@ -375,6 +390,7 @@ I_u2u1u3(_dsra) | |||
| 375 | I_u2u1u3(_dsrl) | 390 | I_u2u1u3(_dsrl) |
| 376 | I_u2u1u3(_dsrl32) | 391 | I_u2u1u3(_dsrl32) |
| 377 | I_u2u1u3(_drotr) | 392 | I_u2u1u3(_drotr) |
| 393 | I_u2u1u3(_drotr32) | ||
| 378 | I_u3u1u2(_dsubu) | 394 | I_u3u1u2(_dsubu) |
| 379 | I_0(_eret) | 395 | I_0(_eret) |
| 380 | I_u1(_j) | 396 | I_u1(_j) |
| @@ -408,16 +424,19 @@ I_u3u1u2(_xor) | |||
| 408 | I_u2u1u3(_xori) | 424 | I_u2u1u3(_xori) |
| 409 | I_u2u1msbu3(_dins); | 425 | I_u2u1msbu3(_dins); |
| 410 | I_u1(_syscall); | 426 | I_u1(_syscall); |
| 427 | I_u1u2s3(_bbit0); | ||
| 428 | I_u1u2s3(_bbit1); | ||
| 411 | 429 | ||
| 412 | /* Handle labels. */ | 430 | /* Handle labels. */ |
| 413 | void __cpuinit uasm_build_label(struct uasm_label **lab, u32 *addr, int lid) | 431 | void __uasminit uasm_build_label(struct uasm_label **lab, u32 *addr, int lid) |
| 414 | { | 432 | { |
| 415 | (*lab)->addr = addr; | 433 | (*lab)->addr = addr; |
| 416 | (*lab)->lab = lid; | 434 | (*lab)->lab = lid; |
| 417 | (*lab)++; | 435 | (*lab)++; |
| 418 | } | 436 | } |
| 437 | UASM_EXPORT_SYMBOL(uasm_build_label); | ||
| 419 | 438 | ||
| 420 | int __cpuinit uasm_in_compat_space_p(long addr) | 439 | int __uasminit uasm_in_compat_space_p(long addr) |
| 421 | { | 440 | { |
| 422 | /* Is this address in 32bit compat space? */ | 441 | /* Is this address in 32bit compat space? */ |
| 423 | #ifdef CONFIG_64BIT | 442 | #ifdef CONFIG_64BIT |
| @@ -426,8 +445,9 @@ int __cpuinit uasm_in_compat_space_p(long addr) | |||
| 426 | return 1; | 445 | return 1; |
| 427 | #endif | 446 | #endif |
| 428 | } | 447 | } |
| 448 | UASM_EXPORT_SYMBOL(uasm_in_compat_space_p); | ||
| 429 | 449 | ||
| 430 | static int __cpuinit uasm_rel_highest(long val) | 450 | static int __uasminit uasm_rel_highest(long val) |
| 431 | { | 451 | { |
| 432 | #ifdef CONFIG_64BIT | 452 | #ifdef CONFIG_64BIT |
| 433 | return ((((val + 0x800080008000L) >> 48) & 0xffff) ^ 0x8000) - 0x8000; | 453 | return ((((val + 0x800080008000L) >> 48) & 0xffff) ^ 0x8000) - 0x8000; |
| @@ -436,7 +456,7 @@ static int __cpuinit uasm_rel_highest(long val) | |||
| 436 | #endif | 456 | #endif |
| 437 | } | 457 | } |
| 438 | 458 | ||
| 439 | static int __cpuinit uasm_rel_higher(long val) | 459 | static int __uasminit uasm_rel_higher(long val) |
| 440 | { | 460 | { |
| 441 | #ifdef CONFIG_64BIT | 461 | #ifdef CONFIG_64BIT |
| 442 | return ((((val + 0x80008000L) >> 32) & 0xffff) ^ 0x8000) - 0x8000; | 462 | return ((((val + 0x80008000L) >> 32) & 0xffff) ^ 0x8000) - 0x8000; |
| @@ -445,17 +465,19 @@ static int __cpuinit uasm_rel_higher(long val) | |||
| 445 | #endif | 465 | #endif |
| 446 | } | 466 | } |
| 447 | 467 | ||
| 448 | int __cpuinit uasm_rel_hi(long val) | 468 | int __uasminit uasm_rel_hi(long val) |
| 449 | { | 469 | { |
| 450 | return ((((val + 0x8000L) >> 16) & 0xffff) ^ 0x8000) - 0x8000; | 470 | return ((((val + 0x8000L) >> 16) & 0xffff) ^ 0x8000) - 0x8000; |
| 451 | } | 471 | } |
| 472 | UASM_EXPORT_SYMBOL(uasm_rel_hi); | ||
| 452 | 473 | ||
| 453 | int __cpuinit uasm_rel_lo(long val) | 474 | int __uasminit uasm_rel_lo(long val) |
| 454 | { | 475 | { |
| 455 | return ((val & 0xffff) ^ 0x8000) - 0x8000; | 476 | return ((val & 0xffff) ^ 0x8000) - 0x8000; |
| 456 | } | 477 | } |
| 478 | UASM_EXPORT_SYMBOL(uasm_rel_lo); | ||
| 457 | 479 | ||
| 458 | void __cpuinit UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr) | 480 | void __uasminit UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr) |
| 459 | { | 481 | { |
| 460 | if (!uasm_in_compat_space_p(addr)) { | 482 | if (!uasm_in_compat_space_p(addr)) { |
| 461 | uasm_i_lui(buf, rs, uasm_rel_highest(addr)); | 483 | uasm_i_lui(buf, rs, uasm_rel_highest(addr)); |
| @@ -470,8 +492,9 @@ void __cpuinit UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr) | |||
| 470 | } else | 492 | } else |
| 471 | uasm_i_lui(buf, rs, uasm_rel_hi(addr)); | 493 | uasm_i_lui(buf, rs, uasm_rel_hi(addr)); |
| 472 | } | 494 | } |
| 495 | UASM_EXPORT_SYMBOL(UASM_i_LA_mostly); | ||
| 473 | 496 | ||
| 474 | void __cpuinit UASM_i_LA(u32 **buf, unsigned int rs, long addr) | 497 | void __uasminit UASM_i_LA(u32 **buf, unsigned int rs, long addr) |
| 475 | { | 498 | { |
| 476 | UASM_i_LA_mostly(buf, rs, addr); | 499 | UASM_i_LA_mostly(buf, rs, addr); |
| 477 | if (uasm_rel_lo(addr)) { | 500 | if (uasm_rel_lo(addr)) { |
| @@ -481,9 +504,10 @@ void __cpuinit UASM_i_LA(u32 **buf, unsigned int rs, long addr) | |||
| 481 | uasm_i_addiu(buf, rs, rs, uasm_rel_lo(addr)); | 504 | uasm_i_addiu(buf, rs, rs, uasm_rel_lo(addr)); |
| 482 | } | 505 | } |
| 483 | } | 506 | } |
| 507 | UASM_EXPORT_SYMBOL(UASM_i_LA); | ||
| 484 | 508 | ||
| 485 | /* Handle relocations. */ | 509 | /* Handle relocations. */ |
| 486 | void __cpuinit | 510 | void __uasminit |
| 487 | uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid) | 511 | uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid) |
| 488 | { | 512 | { |
| 489 | (*rel)->addr = addr; | 513 | (*rel)->addr = addr; |
| @@ -491,8 +515,9 @@ uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid) | |||
| 491 | (*rel)->lab = lid; | 515 | (*rel)->lab = lid; |
| 492 | (*rel)++; | 516 | (*rel)++; |
| 493 | } | 517 | } |
| 518 | UASM_EXPORT_SYMBOL(uasm_r_mips_pc16); | ||
| 494 | 519 | ||
| 495 | static inline void __cpuinit | 520 | static inline void __uasminit |
| 496 | __resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) | 521 | __resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) |
| 497 | { | 522 | { |
| 498 | long laddr = (long)lab->addr; | 523 | long laddr = (long)lab->addr; |
| @@ -509,7 +534,7 @@ __resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) | |||
| 509 | } | 534 | } |
| 510 | } | 535 | } |
| 511 | 536 | ||
| 512 | void __cpuinit | 537 | void __uasminit |
| 513 | uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) | 538 | uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) |
| 514 | { | 539 | { |
| 515 | struct uasm_label *l; | 540 | struct uasm_label *l; |
| @@ -519,24 +544,27 @@ uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) | |||
| 519 | if (rel->lab == l->lab) | 544 | if (rel->lab == l->lab) |
| 520 | __resolve_relocs(rel, l); | 545 | __resolve_relocs(rel, l); |
| 521 | } | 546 | } |
| 547 | UASM_EXPORT_SYMBOL(uasm_resolve_relocs); | ||
| 522 | 548 | ||
| 523 | void __cpuinit | 549 | void __uasminit |
| 524 | uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off) | 550 | uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off) |
| 525 | { | 551 | { |
| 526 | for (; rel->lab != UASM_LABEL_INVALID; rel++) | 552 | for (; rel->lab != UASM_LABEL_INVALID; rel++) |
| 527 | if (rel->addr >= first && rel->addr < end) | 553 | if (rel->addr >= first && rel->addr < end) |
| 528 | rel->addr += off; | 554 | rel->addr += off; |
| 529 | } | 555 | } |
| 556 | UASM_EXPORT_SYMBOL(uasm_move_relocs); | ||
| 530 | 557 | ||
| 531 | void __cpuinit | 558 | void __uasminit |
| 532 | uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off) | 559 | uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off) |
| 533 | { | 560 | { |
| 534 | for (; lab->lab != UASM_LABEL_INVALID; lab++) | 561 | for (; lab->lab != UASM_LABEL_INVALID; lab++) |
| 535 | if (lab->addr >= first && lab->addr < end) | 562 | if (lab->addr >= first && lab->addr < end) |
| 536 | lab->addr += off; | 563 | lab->addr += off; |
| 537 | } | 564 | } |
| 565 | UASM_EXPORT_SYMBOL(uasm_move_labels); | ||
| 538 | 566 | ||
| 539 | void __cpuinit | 567 | void __uasminit |
| 540 | uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first, | 568 | uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first, |
| 541 | u32 *end, u32 *target) | 569 | u32 *end, u32 *target) |
| 542 | { | 570 | { |
| @@ -547,8 +575,9 @@ uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first, | |||
| 547 | uasm_move_relocs(rel, first, end, off); | 575 | uasm_move_relocs(rel, first, end, off); |
| 548 | uasm_move_labels(lab, first, end, off); | 576 | uasm_move_labels(lab, first, end, off); |
| 549 | } | 577 | } |
| 578 | UASM_EXPORT_SYMBOL(uasm_copy_handler); | ||
| 550 | 579 | ||
| 551 | int __cpuinit uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr) | 580 | int __uasminit uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr) |
| 552 | { | 581 | { |
| 553 | for (; rel->lab != UASM_LABEL_INVALID; rel++) { | 582 | for (; rel->lab != UASM_LABEL_INVALID; rel++) { |
| 554 | if (rel->addr == addr | 583 | if (rel->addr == addr |
| @@ -559,61 +588,88 @@ int __cpuinit uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr) | |||
| 559 | 588 | ||
| 560 | return 0; | 589 | return 0; |
| 561 | } | 590 | } |
| 591 | UASM_EXPORT_SYMBOL(uasm_insn_has_bdelay); | ||
| 562 | 592 | ||
| 563 | /* Convenience functions for labeled branches. */ | 593 | /* Convenience functions for labeled branches. */ |
| 564 | void __cpuinit | 594 | void __uasminit |
| 565 | uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 595 | uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 566 | { | 596 | { |
| 567 | uasm_r_mips_pc16(r, *p, lid); | 597 | uasm_r_mips_pc16(r, *p, lid); |
| 568 | uasm_i_bltz(p, reg, 0); | 598 | uasm_i_bltz(p, reg, 0); |
| 569 | } | 599 | } |
| 600 | UASM_EXPORT_SYMBOL(uasm_il_bltz); | ||
| 570 | 601 | ||
| 571 | void __cpuinit | 602 | void __uasminit |
| 572 | uasm_il_b(u32 **p, struct uasm_reloc **r, int lid) | 603 | uasm_il_b(u32 **p, struct uasm_reloc **r, int lid) |
| 573 | { | 604 | { |
| 574 | uasm_r_mips_pc16(r, *p, lid); | 605 | uasm_r_mips_pc16(r, *p, lid); |
| 575 | uasm_i_b(p, 0); | 606 | uasm_i_b(p, 0); |
| 576 | } | 607 | } |
| 608 | UASM_EXPORT_SYMBOL(uasm_il_b); | ||
| 577 | 609 | ||
| 578 | void __cpuinit | 610 | void __uasminit |
| 579 | uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 611 | uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 580 | { | 612 | { |
| 581 | uasm_r_mips_pc16(r, *p, lid); | 613 | uasm_r_mips_pc16(r, *p, lid); |
| 582 | uasm_i_beqz(p, reg, 0); | 614 | uasm_i_beqz(p, reg, 0); |
| 583 | } | 615 | } |
| 616 | UASM_EXPORT_SYMBOL(uasm_il_beqz); | ||
| 584 | 617 | ||
| 585 | void __cpuinit | 618 | void __uasminit |
| 586 | uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 619 | uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 587 | { | 620 | { |
| 588 | uasm_r_mips_pc16(r, *p, lid); | 621 | uasm_r_mips_pc16(r, *p, lid); |
| 589 | uasm_i_beqzl(p, reg, 0); | 622 | uasm_i_beqzl(p, reg, 0); |
| 590 | } | 623 | } |
| 624 | UASM_EXPORT_SYMBOL(uasm_il_beqzl); | ||
| 591 | 625 | ||
| 592 | void __cpuinit | 626 | void __uasminit |
| 593 | uasm_il_bne(u32 **p, struct uasm_reloc **r, unsigned int reg1, | 627 | uasm_il_bne(u32 **p, struct uasm_reloc **r, unsigned int reg1, |
| 594 | unsigned int reg2, int lid) | 628 | unsigned int reg2, int lid) |
| 595 | { | 629 | { |
| 596 | uasm_r_mips_pc16(r, *p, lid); | 630 | uasm_r_mips_pc16(r, *p, lid); |
| 597 | uasm_i_bne(p, reg1, reg2, 0); | 631 | uasm_i_bne(p, reg1, reg2, 0); |
| 598 | } | 632 | } |
| 633 | UASM_EXPORT_SYMBOL(uasm_il_bne); | ||
| 599 | 634 | ||
| 600 | void __cpuinit | 635 | void __uasminit |
| 601 | uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 636 | uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 602 | { | 637 | { |
| 603 | uasm_r_mips_pc16(r, *p, lid); | 638 | uasm_r_mips_pc16(r, *p, lid); |
| 604 | uasm_i_bnez(p, reg, 0); | 639 | uasm_i_bnez(p, reg, 0); |
| 605 | } | 640 | } |
| 641 | UASM_EXPORT_SYMBOL(uasm_il_bnez); | ||
| 606 | 642 | ||
| 607 | void __cpuinit | 643 | void __uasminit |
| 608 | uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 644 | uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 609 | { | 645 | { |
| 610 | uasm_r_mips_pc16(r, *p, lid); | 646 | uasm_r_mips_pc16(r, *p, lid); |
| 611 | uasm_i_bgezl(p, reg, 0); | 647 | uasm_i_bgezl(p, reg, 0); |
| 612 | } | 648 | } |
| 649 | UASM_EXPORT_SYMBOL(uasm_il_bgezl); | ||
| 613 | 650 | ||
| 614 | void __cpuinit | 651 | void __uasminit |
| 615 | uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 652 | uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) |
| 616 | { | 653 | { |
| 617 | uasm_r_mips_pc16(r, *p, lid); | 654 | uasm_r_mips_pc16(r, *p, lid); |
| 618 | uasm_i_bgez(p, reg, 0); | 655 | uasm_i_bgez(p, reg, 0); |
| 619 | } | 656 | } |
| 657 | UASM_EXPORT_SYMBOL(uasm_il_bgez); | ||
| 658 | |||
| 659 | void __uasminit | ||
| 660 | uasm_il_bbit0(u32 **p, struct uasm_reloc **r, unsigned int reg, | ||
| 661 | unsigned int bit, int lid) | ||
| 662 | { | ||
| 663 | uasm_r_mips_pc16(r, *p, lid); | ||
| 664 | uasm_i_bbit0(p, reg, bit, 0); | ||
| 665 | } | ||
| 666 | UASM_EXPORT_SYMBOL(uasm_il_bbit0); | ||
| 667 | |||
| 668 | void __uasminit | ||
| 669 | uasm_il_bbit1(u32 **p, struct uasm_reloc **r, unsigned int reg, | ||
| 670 | unsigned int bit, int lid) | ||
| 671 | { | ||
| 672 | uasm_r_mips_pc16(r, *p, lid); | ||
| 673 | uasm_i_bbit1(p, reg, bit, 0); | ||
| 674 | } | ||
| 675 | UASM_EXPORT_SYMBOL(uasm_il_bbit1); | ||
diff --git a/arch/mips/mti-malta/Makefile b/arch/mips/mti-malta/Makefile index 32e847808df1..6079ef33b5f0 100644 --- a/arch/mips/mti-malta/Makefile +++ b/arch/mips/mti-malta/Makefile | |||
| @@ -15,5 +15,3 @@ obj-$(CONFIG_PCI) += malta-pci.o | |||
| 15 | 15 | ||
| 16 | # FIXME FIXME FIXME | 16 | # FIXME FIXME FIXME |
| 17 | obj-$(CONFIG_MIPS_MT_SMTC) += malta-smtc.o | 17 | obj-$(CONFIG_MIPS_MT_SMTC) += malta-smtc.o |
| 18 | |||
| 19 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/mti-malta/Platform b/arch/mips/mti-malta/Platform new file mode 100644 index 000000000000..5b548b5a4fcf --- /dev/null +++ b/arch/mips/mti-malta/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # MIPS Malta board | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MIPS_MALTA) += mti-malta/ | ||
| 5 | cflags-$(CONFIG_MIPS_MALTA) += -I$(srctree)/arch/mips/include/asm/mach-malta | ||
| 6 | load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000 | ||
| 7 | all-$(CONFIG_MIPS_MALTA) := $(COMPRESSION_FNAME).bin | ||
diff --git a/arch/mips/nxp/pnx833x/stb22x/Makefile b/arch/mips/nxp/pnx833x/stb22x/Makefile deleted file mode 100644 index f81c5801f455..000000000000 --- a/arch/mips/nxp/pnx833x/stb22x/Makefile +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | lib-y := board.o | ||
| 2 | |||
| 3 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/nxp/pnx8550/jbs/Makefile b/arch/mips/nxp/pnx8550/jbs/Makefile deleted file mode 100644 index ad6a8ca7d8ce..000000000000 --- a/arch/mips/nxp/pnx8550/jbs/Makefile +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | |||
| 2 | # Makefile for the NXP JBS Board. | ||
| 3 | |||
| 4 | lib-y := init.o board_setup.o irqmap.o | ||
diff --git a/arch/mips/nxp/pnx8550/stb810/Makefile b/arch/mips/nxp/pnx8550/stb810/Makefile deleted file mode 100644 index ab91d72c5664..000000000000 --- a/arch/mips/nxp/pnx8550/stb810/Makefile +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | |||
| 2 | # Makefile for the NXP STB810 Board. | ||
| 3 | |||
| 4 | lib-y := prom_init.o board_setup.o irqmap.o | ||
diff --git a/arch/mips/pci/msi-octeon.c b/arch/mips/pci/msi-octeon.c index 03742e647657..d8080499872a 100644 --- a/arch/mips/pci/msi-octeon.c +++ b/arch/mips/pci/msi-octeon.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. | 4 | * for more details. |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 2005-2009 Cavium Networks | 6 | * Copyright (C) 2005-2009, 2010 Cavium Networks |
| 7 | */ | 7 | */ |
| 8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
| 9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
| @@ -22,7 +22,7 @@ | |||
| 22 | * Each bit in msi_free_irq_bitmask represents a MSI interrupt that is | 22 | * Each bit in msi_free_irq_bitmask represents a MSI interrupt that is |
| 23 | * in use. | 23 | * in use. |
| 24 | */ | 24 | */ |
| 25 | static uint64_t msi_free_irq_bitmask; | 25 | static u64 msi_free_irq_bitmask[4]; |
| 26 | 26 | ||
| 27 | /* | 27 | /* |
| 28 | * Each bit in msi_multiple_irq_bitmask tells that the device using | 28 | * Each bit in msi_multiple_irq_bitmask tells that the device using |
| @@ -30,7 +30,7 @@ static uint64_t msi_free_irq_bitmask; | |||
| 30 | * is used so we can disable all of the MSI interrupts when a device | 30 | * is used so we can disable all of the MSI interrupts when a device |
| 31 | * uses multiple. | 31 | * uses multiple. |
| 32 | */ | 32 | */ |
| 33 | static uint64_t msi_multiple_irq_bitmask; | 33 | static u64 msi_multiple_irq_bitmask[4]; |
| 34 | 34 | ||
| 35 | /* | 35 | /* |
| 36 | * This lock controls updates to msi_free_irq_bitmask and | 36 | * This lock controls updates to msi_free_irq_bitmask and |
| @@ -38,6 +38,11 @@ static uint64_t msi_multiple_irq_bitmask; | |||
| 38 | */ | 38 | */ |
| 39 | static DEFINE_SPINLOCK(msi_free_irq_bitmask_lock); | 39 | static DEFINE_SPINLOCK(msi_free_irq_bitmask_lock); |
| 40 | 40 | ||
| 41 | /* | ||
| 42 | * Number of MSI IRQs used. This variable is set up in | ||
| 43 | * the module init time. | ||
| 44 | */ | ||
| 45 | static int msi_irq_size; | ||
| 41 | 46 | ||
| 42 | /** | 47 | /** |
| 43 | * Called when a driver request MSI interrupts instead of the | 48 | * Called when a driver request MSI interrupts instead of the |
| @@ -54,12 +59,13 @@ static DEFINE_SPINLOCK(msi_free_irq_bitmask_lock); | |||
| 54 | int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc) | 59 | int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc) |
| 55 | { | 60 | { |
| 56 | struct msi_msg msg; | 61 | struct msi_msg msg; |
| 57 | uint16_t control; | 62 | u16 control; |
| 58 | int configured_private_bits; | 63 | int configured_private_bits; |
| 59 | int request_private_bits; | 64 | int request_private_bits; |
| 60 | int irq; | 65 | int irq = 0; |
| 61 | int irq_step; | 66 | int irq_step; |
| 62 | uint64_t search_mask; | 67 | u64 search_mask; |
| 68 | int index; | ||
| 63 | 69 | ||
| 64 | /* | 70 | /* |
| 65 | * Read the MSI config to figure out how many IRQs this device | 71 | * Read the MSI config to figure out how many IRQs this device |
| @@ -111,29 +117,31 @@ try_only_one: | |||
| 111 | * use. | 117 | * use. |
| 112 | */ | 118 | */ |
| 113 | spin_lock(&msi_free_irq_bitmask_lock); | 119 | spin_lock(&msi_free_irq_bitmask_lock); |
| 114 | for (irq = 0; irq < 64; irq += irq_step) { | 120 | for (index = 0; index < msi_irq_size/64; index++) { |
| 115 | if ((msi_free_irq_bitmask & (search_mask << irq)) == 0) { | 121 | for (irq = 0; irq < 64; irq += irq_step) { |
| 116 | msi_free_irq_bitmask |= search_mask << irq; | 122 | if ((msi_free_irq_bitmask[index] & (search_mask << irq)) == 0) { |
| 117 | msi_multiple_irq_bitmask |= (search_mask >> 1) << irq; | 123 | msi_free_irq_bitmask[index] |= search_mask << irq; |
| 118 | break; | 124 | msi_multiple_irq_bitmask[index] |= (search_mask >> 1) << irq; |
| 125 | goto msi_irq_allocated; | ||
| 126 | } | ||
| 119 | } | 127 | } |
| 120 | } | 128 | } |
| 129 | msi_irq_allocated: | ||
| 121 | spin_unlock(&msi_free_irq_bitmask_lock); | 130 | spin_unlock(&msi_free_irq_bitmask_lock); |
| 122 | 131 | ||
| 123 | /* Make sure the search for available interrupts didn't fail */ | 132 | /* Make sure the search for available interrupts didn't fail */ |
| 124 | if (irq >= 64) { | 133 | if (irq >= 64) { |
| 125 | if (request_private_bits) { | 134 | if (request_private_bits) { |
| 126 | pr_err("arch_setup_msi_irq: Unable to find %d free " | 135 | pr_err("arch_setup_msi_irq: Unable to find %d free interrupts, trying just one", |
| 127 | "interrupts, trying just one", | ||
| 128 | 1 << request_private_bits); | 136 | 1 << request_private_bits); |
| 129 | request_private_bits = 0; | 137 | request_private_bits = 0; |
| 130 | goto try_only_one; | 138 | goto try_only_one; |
| 131 | } else | 139 | } else |
| 132 | panic("arch_setup_msi_irq: Unable to find a free MSI " | 140 | panic("arch_setup_msi_irq: Unable to find a free MSI interrupt"); |
| 133 | "interrupt"); | ||
| 134 | } | 141 | } |
| 135 | 142 | ||
| 136 | /* MSI interrupts start at logical IRQ OCTEON_IRQ_MSI_BIT0 */ | 143 | /* MSI interrupts start at logical IRQ OCTEON_IRQ_MSI_BIT0 */ |
| 144 | irq += index*64; | ||
| 137 | irq += OCTEON_IRQ_MSI_BIT0; | 145 | irq += OCTEON_IRQ_MSI_BIT0; |
| 138 | 146 | ||
| 139 | switch (octeon_dma_bar_type) { | 147 | switch (octeon_dma_bar_type) { |
| @@ -169,6 +177,34 @@ try_only_one: | |||
| 169 | return 0; | 177 | return 0; |
| 170 | } | 178 | } |
| 171 | 179 | ||
| 180 | int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | ||
| 181 | { | ||
| 182 | struct msi_desc *entry; | ||
| 183 | int ret; | ||
| 184 | |||
| 185 | /* | ||
| 186 | * MSI-X is not supported. | ||
| 187 | */ | ||
| 188 | if (type == PCI_CAP_ID_MSIX) | ||
| 189 | return -EINVAL; | ||
| 190 | |||
| 191 | /* | ||
| 192 | * If an architecture wants to support multiple MSI, it needs to | ||
| 193 | * override arch_setup_msi_irqs() | ||
| 194 | */ | ||
| 195 | if (type == PCI_CAP_ID_MSI && nvec > 1) | ||
| 196 | return 1; | ||
| 197 | |||
| 198 | list_for_each_entry(entry, &dev->msi_list, list) { | ||
| 199 | ret = arch_setup_msi_irq(dev, entry); | ||
| 200 | if (ret < 0) | ||
| 201 | return ret; | ||
| 202 | if (ret > 0) | ||
| 203 | return -ENOSPC; | ||
| 204 | } | ||
| 205 | |||
| 206 | return 0; | ||
| 207 | } | ||
| 172 | 208 | ||
| 173 | /** | 209 | /** |
| 174 | * Called when a device no longer needs its MSI interrupts. All | 210 | * Called when a device no longer needs its MSI interrupts. All |
| @@ -179,12 +215,18 @@ try_only_one: | |||
| 179 | void arch_teardown_msi_irq(unsigned int irq) | 215 | void arch_teardown_msi_irq(unsigned int irq) |
| 180 | { | 216 | { |
| 181 | int number_irqs; | 217 | int number_irqs; |
| 182 | uint64_t bitmask; | 218 | u64 bitmask; |
| 219 | int index = 0; | ||
| 220 | int irq0; | ||
| 183 | 221 | ||
| 184 | if ((irq < OCTEON_IRQ_MSI_BIT0) || (irq > OCTEON_IRQ_MSI_BIT63)) | 222 | if ((irq < OCTEON_IRQ_MSI_BIT0) |
| 223 | || (irq > msi_irq_size + OCTEON_IRQ_MSI_BIT0)) | ||
| 185 | panic("arch_teardown_msi_irq: Attempted to teardown illegal " | 224 | panic("arch_teardown_msi_irq: Attempted to teardown illegal " |
| 186 | "MSI interrupt (%d)", irq); | 225 | "MSI interrupt (%d)", irq); |
| 226 | |||
| 187 | irq -= OCTEON_IRQ_MSI_BIT0; | 227 | irq -= OCTEON_IRQ_MSI_BIT0; |
| 228 | index = irq / 64; | ||
| 229 | irq0 = irq % 64; | ||
| 188 | 230 | ||
| 189 | /* | 231 | /* |
| 190 | * Count the number of IRQs we need to free by looking at the | 232 | * Count the number of IRQs we need to free by looking at the |
| @@ -192,97 +234,198 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
| 192 | * IRQ is also owned by this device. | 234 | * IRQ is also owned by this device. |
| 193 | */ | 235 | */ |
| 194 | number_irqs = 0; | 236 | number_irqs = 0; |
| 195 | while ((irq+number_irqs < 64) && | 237 | while ((irq0 + number_irqs < 64) && |
| 196 | (msi_multiple_irq_bitmask & (1ull << (irq + number_irqs)))) | 238 | (msi_multiple_irq_bitmask[index] |
| 239 | & (1ull << (irq0 + number_irqs)))) | ||
| 197 | number_irqs++; | 240 | number_irqs++; |
| 198 | number_irqs++; | 241 | number_irqs++; |
| 199 | /* Mask with one bit for each IRQ */ | 242 | /* Mask with one bit for each IRQ */ |
| 200 | bitmask = (1 << number_irqs) - 1; | 243 | bitmask = (1 << number_irqs) - 1; |
| 201 | /* Shift the mask to the correct bit location */ | 244 | /* Shift the mask to the correct bit location */ |
| 202 | bitmask <<= irq; | 245 | bitmask <<= irq0; |
| 203 | if ((msi_free_irq_bitmask & bitmask) != bitmask) | 246 | if ((msi_free_irq_bitmask[index] & bitmask) != bitmask) |
| 204 | panic("arch_teardown_msi_irq: Attempted to teardown MSI " | 247 | panic("arch_teardown_msi_irq: Attempted to teardown MSI " |
| 205 | "interrupt (%d) not in use", irq); | 248 | "interrupt (%d) not in use", irq); |
| 206 | 249 | ||
| 207 | /* Checks are done, update the in use bitmask */ | 250 | /* Checks are done, update the in use bitmask */ |
| 208 | spin_lock(&msi_free_irq_bitmask_lock); | 251 | spin_lock(&msi_free_irq_bitmask_lock); |
| 209 | msi_free_irq_bitmask &= ~bitmask; | 252 | msi_free_irq_bitmask[index] &= ~bitmask; |
| 210 | msi_multiple_irq_bitmask &= ~bitmask; | 253 | msi_multiple_irq_bitmask[index] &= ~bitmask; |
| 211 | spin_unlock(&msi_free_irq_bitmask_lock); | 254 | spin_unlock(&msi_free_irq_bitmask_lock); |
| 212 | } | 255 | } |
| 213 | 256 | ||
| 257 | static DEFINE_RAW_SPINLOCK(octeon_irq_msi_lock); | ||
| 258 | |||
| 259 | static u64 msi_rcv_reg[4]; | ||
| 260 | static u64 mis_ena_reg[4]; | ||
| 261 | |||
| 262 | static void octeon_irq_msi_enable_pcie(unsigned int irq) | ||
| 263 | { | ||
| 264 | u64 en; | ||
| 265 | unsigned long flags; | ||
| 266 | int msi_number = irq - OCTEON_IRQ_MSI_BIT0; | ||
| 267 | int irq_index = msi_number >> 6; | ||
| 268 | int irq_bit = msi_number & 0x3f; | ||
| 269 | |||
| 270 | raw_spin_lock_irqsave(&octeon_irq_msi_lock, flags); | ||
| 271 | en = cvmx_read_csr(mis_ena_reg[irq_index]); | ||
| 272 | en |= 1ull << irq_bit; | ||
| 273 | cvmx_write_csr(mis_ena_reg[irq_index], en); | ||
| 274 | cvmx_read_csr(mis_ena_reg[irq_index]); | ||
| 275 | raw_spin_unlock_irqrestore(&octeon_irq_msi_lock, flags); | ||
| 276 | } | ||
| 277 | |||
| 278 | static void octeon_irq_msi_disable_pcie(unsigned int irq) | ||
| 279 | { | ||
| 280 | u64 en; | ||
| 281 | unsigned long flags; | ||
| 282 | int msi_number = irq - OCTEON_IRQ_MSI_BIT0; | ||
| 283 | int irq_index = msi_number >> 6; | ||
| 284 | int irq_bit = msi_number & 0x3f; | ||
| 285 | |||
| 286 | raw_spin_lock_irqsave(&octeon_irq_msi_lock, flags); | ||
| 287 | en = cvmx_read_csr(mis_ena_reg[irq_index]); | ||
| 288 | en &= ~(1ull << irq_bit); | ||
| 289 | cvmx_write_csr(mis_ena_reg[irq_index], en); | ||
| 290 | cvmx_read_csr(mis_ena_reg[irq_index]); | ||
| 291 | raw_spin_unlock_irqrestore(&octeon_irq_msi_lock, flags); | ||
| 292 | } | ||
| 293 | |||
| 294 | static struct irq_chip octeon_irq_chip_msi_pcie = { | ||
| 295 | .name = "MSI", | ||
| 296 | .enable = octeon_irq_msi_enable_pcie, | ||
| 297 | .disable = octeon_irq_msi_disable_pcie, | ||
| 298 | }; | ||
| 299 | |||
| 300 | static void octeon_irq_msi_enable_pci(unsigned int irq) | ||
| 301 | { | ||
| 302 | /* | ||
| 303 | * Octeon PCI doesn't have the ability to mask/unmask MSI | ||
| 304 | * interrupts individually. Instead of masking/unmasking them | ||
| 305 | * in groups of 16, we simple assume MSI devices are well | ||
| 306 | * behaved. MSI interrupts are always enable and the ACK is | ||
| 307 | * assumed to be enough | ||
| 308 | */ | ||
| 309 | } | ||
| 310 | |||
| 311 | static void octeon_irq_msi_disable_pci(unsigned int irq) | ||
| 312 | { | ||
| 313 | /* See comment in enable */ | ||
| 314 | } | ||
| 315 | |||
| 316 | static struct irq_chip octeon_irq_chip_msi_pci = { | ||
| 317 | .name = "MSI", | ||
| 318 | .enable = octeon_irq_msi_enable_pci, | ||
| 319 | .disable = octeon_irq_msi_disable_pci, | ||
| 320 | }; | ||
| 214 | 321 | ||
| 215 | /* | 322 | /* |
| 216 | * Called by the interrupt handling code when an MSI interrupt | 323 | * Called by the interrupt handling code when an MSI interrupt |
| 217 | * occurs. | 324 | * occurs. |
| 218 | */ | 325 | */ |
| 219 | static irqreturn_t octeon_msi_interrupt(int cpl, void *dev_id) | 326 | static irqreturn_t __octeon_msi_do_interrupt(int index, u64 msi_bits) |
| 220 | { | 327 | { |
| 221 | uint64_t msi_bits; | ||
| 222 | int irq; | 328 | int irq; |
| 329 | int bit; | ||
| 223 | 330 | ||
| 224 | if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_PCIE) | 331 | bit = fls64(msi_bits); |
| 225 | msi_bits = cvmx_read_csr(CVMX_PEXP_NPEI_MSI_RCV0); | 332 | if (bit) { |
| 226 | else | 333 | bit--; |
| 227 | msi_bits = cvmx_read_csr(CVMX_NPI_NPI_MSI_RCV); | 334 | /* Acknowledge it first. */ |
| 228 | irq = fls64(msi_bits); | 335 | cvmx_write_csr(msi_rcv_reg[index], 1ull << bit); |
| 229 | if (irq) { | 336 | |
| 230 | irq += OCTEON_IRQ_MSI_BIT0 - 1; | 337 | irq = bit + OCTEON_IRQ_MSI_BIT0 + 64 * index; |
| 231 | if (irq_desc[irq].action) { | 338 | do_IRQ(irq); |
| 232 | do_IRQ(irq); | 339 | return IRQ_HANDLED; |
| 233 | return IRQ_HANDLED; | ||
| 234 | } else { | ||
| 235 | pr_err("Spurious MSI interrupt %d\n", irq); | ||
| 236 | if (octeon_has_feature(OCTEON_FEATURE_PCIE)) { | ||
| 237 | /* These chips have PCIe */ | ||
| 238 | cvmx_write_csr(CVMX_PEXP_NPEI_MSI_RCV0, | ||
| 239 | 1ull << (irq - | ||
| 240 | OCTEON_IRQ_MSI_BIT0)); | ||
| 241 | } else { | ||
| 242 | /* These chips have PCI */ | ||
| 243 | cvmx_write_csr(CVMX_NPI_NPI_MSI_RCV, | ||
| 244 | 1ull << (irq - | ||
| 245 | OCTEON_IRQ_MSI_BIT0)); | ||
| 246 | } | ||
| 247 | } | ||
| 248 | } | 340 | } |
| 249 | return IRQ_NONE; | 341 | return IRQ_NONE; |
| 250 | } | 342 | } |
| 251 | 343 | ||
| 344 | #define OCTEON_MSI_INT_HANDLER_X(x) \ | ||
| 345 | static irqreturn_t octeon_msi_interrupt##x(int cpl, void *dev_id) \ | ||
| 346 | { \ | ||
| 347 | u64 msi_bits = cvmx_read_csr(msi_rcv_reg[(x)]); \ | ||
| 348 | return __octeon_msi_do_interrupt((x), msi_bits); \ | ||
| 349 | } | ||
| 350 | |||
| 351 | /* | ||
| 352 | * Create octeon_msi_interrupt{0-3} function body | ||
| 353 | */ | ||
| 354 | OCTEON_MSI_INT_HANDLER_X(0); | ||
| 355 | OCTEON_MSI_INT_HANDLER_X(1); | ||
| 356 | OCTEON_MSI_INT_HANDLER_X(2); | ||
| 357 | OCTEON_MSI_INT_HANDLER_X(3); | ||
| 252 | 358 | ||
| 253 | /* | 359 | /* |
| 254 | * Initializes the MSI interrupt handling code | 360 | * Initializes the MSI interrupt handling code |
| 255 | */ | 361 | */ |
| 256 | int octeon_msi_initialize(void) | 362 | int __init octeon_msi_initialize(void) |
| 257 | { | 363 | { |
| 364 | int irq; | ||
| 365 | struct irq_chip *msi; | ||
| 366 | |||
| 367 | if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_PCIE) { | ||
| 368 | msi_rcv_reg[0] = CVMX_PEXP_NPEI_MSI_RCV0; | ||
| 369 | msi_rcv_reg[1] = CVMX_PEXP_NPEI_MSI_RCV1; | ||
| 370 | msi_rcv_reg[2] = CVMX_PEXP_NPEI_MSI_RCV2; | ||
| 371 | msi_rcv_reg[3] = CVMX_PEXP_NPEI_MSI_RCV3; | ||
| 372 | mis_ena_reg[0] = CVMX_PEXP_NPEI_MSI_ENB0; | ||
| 373 | mis_ena_reg[1] = CVMX_PEXP_NPEI_MSI_ENB1; | ||
| 374 | mis_ena_reg[2] = CVMX_PEXP_NPEI_MSI_ENB2; | ||
| 375 | mis_ena_reg[3] = CVMX_PEXP_NPEI_MSI_ENB3; | ||
| 376 | msi = &octeon_irq_chip_msi_pcie; | ||
| 377 | } else { | ||
| 378 | msi_rcv_reg[0] = CVMX_NPI_NPI_MSI_RCV; | ||
| 379 | #define INVALID_GENERATE_ADE 0x8700000000000000ULL; | ||
| 380 | msi_rcv_reg[1] = INVALID_GENERATE_ADE; | ||
| 381 | msi_rcv_reg[2] = INVALID_GENERATE_ADE; | ||
| 382 | msi_rcv_reg[3] = INVALID_GENERATE_ADE; | ||
| 383 | mis_ena_reg[0] = INVALID_GENERATE_ADE; | ||
| 384 | mis_ena_reg[1] = INVALID_GENERATE_ADE; | ||
| 385 | mis_ena_reg[2] = INVALID_GENERATE_ADE; | ||
| 386 | mis_ena_reg[3] = INVALID_GENERATE_ADE; | ||
| 387 | msi = &octeon_irq_chip_msi_pci; | ||
| 388 | } | ||
| 389 | |||
| 390 | for (irq = OCTEON_IRQ_MSI_BIT0; irq <= OCTEON_IRQ_MSI_LAST; irq++) | ||
| 391 | set_irq_chip_and_handler(irq, msi, handle_simple_irq); | ||
| 392 | |||
| 258 | if (octeon_has_feature(OCTEON_FEATURE_PCIE)) { | 393 | if (octeon_has_feature(OCTEON_FEATURE_PCIE)) { |
| 259 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, | 394 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt0, |
| 260 | IRQF_SHARED, | 395 | 0, "MSI[0:63]", octeon_msi_interrupt0)) |
| 261 | "MSI[0:63]", octeon_msi_interrupt)) | ||
| 262 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); | 396 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); |
| 397 | |||
| 398 | if (request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt1, | ||
| 399 | 0, "MSI[64:127]", octeon_msi_interrupt1)) | ||
| 400 | panic("request_irq(OCTEON_IRQ_PCI_MSI1) failed"); | ||
| 401 | |||
| 402 | if (request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt2, | ||
| 403 | 0, "MSI[127:191]", octeon_msi_interrupt2)) | ||
| 404 | panic("request_irq(OCTEON_IRQ_PCI_MSI2) failed"); | ||
| 405 | |||
| 406 | if (request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt3, | ||
| 407 | 0, "MSI[192:255]", octeon_msi_interrupt3)) | ||
| 408 | panic("request_irq(OCTEON_IRQ_PCI_MSI3) failed"); | ||
| 409 | |||
| 410 | msi_irq_size = 256; | ||
| 263 | } else if (octeon_is_pci_host()) { | 411 | } else if (octeon_is_pci_host()) { |
| 264 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt, | 412 | if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt0, |
| 265 | IRQF_SHARED, | 413 | 0, "MSI[0:15]", octeon_msi_interrupt0)) |
| 266 | "MSI[0:15]", octeon_msi_interrupt)) | ||
| 267 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); | 414 | panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed"); |
| 268 | 415 | ||
| 269 | if (request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt, | 416 | if (request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt0, |
| 270 | IRQF_SHARED, | 417 | 0, "MSI[16:31]", octeon_msi_interrupt0)) |
| 271 | "MSI[16:31]", octeon_msi_interrupt)) | ||
| 272 | panic("request_irq(OCTEON_IRQ_PCI_MSI1) failed"); | 418 | panic("request_irq(OCTEON_IRQ_PCI_MSI1) failed"); |
| 273 | 419 | ||
| 274 | if (request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt, | 420 | if (request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt0, |
| 275 | IRQF_SHARED, | 421 | 0, "MSI[32:47]", octeon_msi_interrupt0)) |
| 276 | "MSI[32:47]", octeon_msi_interrupt)) | ||
| 277 | panic("request_irq(OCTEON_IRQ_PCI_MSI2) failed"); | 422 | panic("request_irq(OCTEON_IRQ_PCI_MSI2) failed"); |
| 278 | 423 | ||
| 279 | if (request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt, | 424 | if (request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt0, |
| 280 | IRQF_SHARED, | 425 | 0, "MSI[48:63]", octeon_msi_interrupt0)) |
| 281 | "MSI[48:63]", octeon_msi_interrupt)) | ||
| 282 | panic("request_irq(OCTEON_IRQ_PCI_MSI3) failed"); | 426 | panic("request_irq(OCTEON_IRQ_PCI_MSI3) failed"); |
| 283 | 427 | msi_irq_size = 64; | |
| 284 | } | 428 | } |
| 285 | return 0; | 429 | return 0; |
| 286 | } | 430 | } |
| 287 | |||
| 288 | subsys_initcall(octeon_msi_initialize); | 431 | subsys_initcall(octeon_msi_initialize); |
diff --git a/arch/mips/pci/ops-titan-ht.c b/arch/mips/pci/ops-titan-ht.c index 749c1922d420..57d54adc9e20 100644 --- a/arch/mips/pci/ops-titan-ht.c +++ b/arch/mips/pci/ops-titan-ht.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <asm/titan_dep.h> | 32 | #include <asm/titan_dep.h> |
| 33 | 33 | ||
| 34 | static int titan_ht_config_read_dword(struct pci_bus *bus, unsigned int devfn, | 34 | static int titan_ht_config_read_dword(struct pci_bus *bus, unsigned int devfn, |
| 35 | int offset, u32 * val) | 35 | int offset, u32 *val) |
| 36 | { | 36 | { |
| 37 | volatile uint32_t address; | 37 | volatile uint32_t address; |
| 38 | int busno; | 38 | int busno; |
| @@ -64,7 +64,7 @@ static int titan_ht_config_read_dword(struct pci_bus *bus, unsigned int devfn, | |||
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | static int titan_ht_config_read(struct pci_bus *bus, unsigned int devfn, | 66 | static int titan_ht_config_read(struct pci_bus *bus, unsigned int devfn, |
| 67 | int offset, int size, u32 * val) | 67 | int offset, int size, u32 *val) |
| 68 | { | 68 | { |
| 69 | uint32_t dword; | 69 | uint32_t dword; |
| 70 | 70 | ||
diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c index 6aa5c542d52d..861361e0c9af 100644 --- a/arch/mips/pci/pcie-octeon.c +++ b/arch/mips/pci/pcie-octeon.c | |||
| @@ -402,6 +402,10 @@ static void __cvmx_pcie_rc_initialize_config_space(int pcie_port) | |||
| 402 | npei_ctl_status2.s.mps = 0; | 402 | npei_ctl_status2.s.mps = 0; |
| 403 | /* Max read request size = 128 bytes for best Octeon DMA performance */ | 403 | /* Max read request size = 128 bytes for best Octeon DMA performance */ |
| 404 | npei_ctl_status2.s.mrrs = 0; | 404 | npei_ctl_status2.s.mrrs = 0; |
| 405 | if (pcie_port) | ||
| 406 | npei_ctl_status2.s.c1_b1_s = 3; /* Port1 BAR1 Size 256MB */ | ||
| 407 | else | ||
| 408 | npei_ctl_status2.s.c0_b1_s = 3; /* Port0 BAR1 Size 256MB */ | ||
| 405 | cvmx_write_csr(CVMX_PEXP_NPEI_CTL_STATUS2, npei_ctl_status2.u64); | 409 | cvmx_write_csr(CVMX_PEXP_NPEI_CTL_STATUS2, npei_ctl_status2.u64); |
| 406 | 410 | ||
| 407 | /* ECRC Generation (PCIE*_CFG070[GE,CE]) */ | 411 | /* ECRC Generation (PCIE*_CFG070[GE,CE]) */ |
| @@ -666,6 +670,8 @@ static int __cvmx_pcie_rc_initialize_link(int pcie_port) | |||
| 666 | static int cvmx_pcie_rc_initialize(int pcie_port) | 670 | static int cvmx_pcie_rc_initialize(int pcie_port) |
| 667 | { | 671 | { |
| 668 | int i; | 672 | int i; |
| 673 | int base; | ||
| 674 | u64 addr_swizzle; | ||
| 669 | union cvmx_ciu_soft_prst ciu_soft_prst; | 675 | union cvmx_ciu_soft_prst ciu_soft_prst; |
| 670 | union cvmx_pescx_bist_status pescx_bist_status; | 676 | union cvmx_pescx_bist_status pescx_bist_status; |
| 671 | union cvmx_pescx_bist_status2 pescx_bist_status2; | 677 | union cvmx_pescx_bist_status2 pescx_bist_status2; |
| @@ -674,6 +680,7 @@ static int cvmx_pcie_rc_initialize(int pcie_port) | |||
| 674 | union cvmx_npei_mem_access_subidx mem_access_subid; | 680 | union cvmx_npei_mem_access_subidx mem_access_subid; |
| 675 | union cvmx_npei_dbg_data npei_dbg_data; | 681 | union cvmx_npei_dbg_data npei_dbg_data; |
| 676 | union cvmx_pescx_ctl_status2 pescx_ctl_status2; | 682 | union cvmx_pescx_ctl_status2 pescx_ctl_status2; |
| 683 | union cvmx_npei_bar1_indexx bar1_index; | ||
| 677 | 684 | ||
| 678 | /* | 685 | /* |
| 679 | * Make sure we aren't trying to setup a target mode interface | 686 | * Make sure we aren't trying to setup a target mode interface |
| @@ -918,12 +925,30 @@ static int cvmx_pcie_rc_initialize(int pcie_port) | |||
| 918 | /* Set Octeon's BAR0 to decode 0-16KB. It overlaps with Bar2 */ | 925 | /* Set Octeon's BAR0 to decode 0-16KB. It overlaps with Bar2 */ |
| 919 | cvmx_write_csr(CVMX_PESCX_P2N_BAR0_START(pcie_port), 0); | 926 | cvmx_write_csr(CVMX_PESCX_P2N_BAR0_START(pcie_port), 0); |
| 920 | 927 | ||
| 921 | /* | 928 | /* BAR1 follows BAR2 with a gap. */ |
| 922 | * Disable Octeon's BAR1. It isn't needed in RC mode since | 929 | cvmx_write_csr(CVMX_PESCX_P2N_BAR1_START(pcie_port), CVMX_PCIE_BAR1_RC_BASE); |
| 923 | * BAR2 maps all of memory. BAR2 also maps 256MB-512MB into | 930 | |
| 924 | * the 2nd 256MB of memory. | 931 | bar1_index.u32 = 0; |
| 925 | */ | 932 | bar1_index.s.addr_idx = (CVMX_PCIE_BAR1_PHYS_BASE >> 22); |
| 926 | cvmx_write_csr(CVMX_PESCX_P2N_BAR1_START(pcie_port), -1); | 933 | bar1_index.s.ca = 1; /* Not Cached */ |
| 934 | bar1_index.s.end_swp = 1; /* Endian Swap mode */ | ||
| 935 | bar1_index.s.addr_v = 1; /* Valid entry */ | ||
| 936 | |||
| 937 | base = pcie_port ? 16 : 0; | ||
| 938 | |||
| 939 | /* Big endian swizzle for 32-bit PEXP_NCB register. */ | ||
| 940 | #ifdef __MIPSEB__ | ||
| 941 | addr_swizzle = 4; | ||
| 942 | #else | ||
| 943 | addr_swizzle = 0; | ||
| 944 | #endif | ||
| 945 | for (i = 0; i < 16; i++) { | ||
| 946 | cvmx_write64_uint32((CVMX_PEXP_NPEI_BAR1_INDEXX(base) ^ addr_swizzle), | ||
| 947 | bar1_index.u32); | ||
| 948 | base++; | ||
| 949 | /* 256MB / 16 >> 22 == 4 */ | ||
| 950 | bar1_index.s.addr_idx += (((1ull << 28) / 16ull) >> 22); | ||
| 951 | } | ||
| 927 | 952 | ||
| 928 | /* | 953 | /* |
| 929 | * Set Octeon's BAR2 to decode 0-2^39. Bar0 and Bar1 take | 954 | * Set Octeon's BAR2 to decode 0-2^39. Bar0 and Bar1 take |
diff --git a/arch/mips/pmc-sierra/Platform b/arch/mips/pmc-sierra/Platform new file mode 100644 index 000000000000..f092f2524c5f --- /dev/null +++ b/arch/mips/pmc-sierra/Platform | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | # | ||
| 2 | # PMC-Sierra MSP SOCs | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_PMC_MSP) += pmc-sierra/msp71xx/ | ||
| 5 | cflags-$(CONFIG_PMC_MSP) += -I$(srctree)/arch/mips/include/asm/pmc-sierra/msp71xx \ | ||
| 6 | -mno-branch-likely | ||
| 7 | load-$(CONFIG_PMC_MSP) += 0xffffffff80100000 | ||
| 8 | |||
| 9 | # | ||
| 10 | # PMC-Sierra Yosemite | ||
| 11 | # | ||
| 12 | platform-$(CONFIG_PMC_YOSEMITE) += pmc-sierra/yosemite/ | ||
| 13 | cflags-$(CONFIG_PMC_YOSEMITE) += -I$(srctree)/arch/mips/include/asm/mach-yosemite | ||
| 14 | load-$(CONFIG_PMC_YOSEMITE) += 0xffffffff80100000 | ||
diff --git a/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c b/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c index 11769b55438c..c841f083a7f5 100644 --- a/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c +++ b/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c | |||
| @@ -32,9 +32,6 @@ | |||
| 32 | #include <msp_int.h> | 32 | #include <msp_int.h> |
| 33 | #include <msp_regs.h> | 33 | #include <msp_regs.h> |
| 34 | #include <msp_regops.h> | 34 | #include <msp_regops.h> |
| 35 | #ifdef CONFIG_PMCTWILED | ||
| 36 | #include <msp_led_macros.h> | ||
| 37 | #endif | ||
| 38 | 35 | ||
| 39 | /* For hwbutton_interrupt->initial_state */ | 36 | /* For hwbutton_interrupt->initial_state */ |
| 40 | #define HWBUTTON_HI 0x1 | 37 | #define HWBUTTON_HI 0x1 |
| @@ -82,10 +79,6 @@ static void standby_on(void *data) | |||
| 82 | printk(KERN_WARNING "STANDBY switch was set to ON (not implemented)\n"); | 79 | printk(KERN_WARNING "STANDBY switch was set to ON (not implemented)\n"); |
| 83 | 80 | ||
| 84 | /* TODO: Put board in standby mode */ | 81 | /* TODO: Put board in standby mode */ |
| 85 | #ifdef CONFIG_PMCTWILED | ||
| 86 | msp_led_turn_off(MSP_LED_PWRSTANDBY_GREEN); | ||
| 87 | msp_led_turn_on(MSP_LED_PWRSTANDBY_RED); | ||
| 88 | #endif | ||
| 89 | } | 82 | } |
| 90 | 83 | ||
| 91 | static void standby_off(void *data) | 84 | static void standby_off(void *data) |
| @@ -94,10 +87,6 @@ static void standby_off(void *data) | |||
| 94 | "STANDBY switch was set to OFF (not implemented)\n"); | 87 | "STANDBY switch was set to OFF (not implemented)\n"); |
| 95 | 88 | ||
| 96 | /* TODO: Take out of standby mode */ | 89 | /* TODO: Take out of standby mode */ |
| 97 | #ifdef CONFIG_PMCTWILED | ||
| 98 | msp_led_turn_on(MSP_LED_PWRSTANDBY_GREEN); | ||
| 99 | msp_led_turn_off(MSP_LED_PWRSTANDBY_RED); | ||
| 100 | #endif | ||
| 101 | } | 90 | } |
| 102 | 91 | ||
| 103 | static struct hwbutton_interrupt softreset_sw = { | 92 | static struct hwbutton_interrupt softreset_sw = { |
diff --git a/arch/mips/pmc-sierra/yosemite/ht-irq.c b/arch/mips/pmc-sierra/yosemite/ht-irq.c index 5aec4057314e..86b98e98fb4f 100644 --- a/arch/mips/pmc-sierra/yosemite/ht-irq.c +++ b/arch/mips/pmc-sierra/yosemite/ht-irq.c | |||
| @@ -35,18 +35,17 @@ | |||
| 35 | */ | 35 | */ |
| 36 | void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus) | 36 | void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus) |
| 37 | { | 37 | { |
| 38 | struct pci_bus *current_bus = bus; | 38 | struct pci_bus *current_bus = bus; |
| 39 | struct pci_dev *devices; | 39 | struct pci_dev *devices; |
| 40 | struct list_head *devices_link; | 40 | struct list_head *devices_link; |
| 41 | 41 | ||
| 42 | list_for_each(devices_link, &(current_bus->devices)) { | 42 | list_for_each(devices_link, &(current_bus->devices)) { |
| 43 | devices = pci_dev_b(devices_link); | 43 | devices = pci_dev_b(devices_link); |
| 44 | if (devices == NULL) | 44 | if (devices == NULL) |
| 45 | continue; | 45 | continue; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | /* | 48 | /* |
| 49 | * PLX and SPKT related changes go here | 49 | * PLX and SPKT related changes go here |
| 50 | */ | 50 | */ |
| 51 | |||
| 52 | } | 51 | } |
diff --git a/arch/mips/pmc-sierra/yosemite/irq.c b/arch/mips/pmc-sierra/yosemite/irq.c index 51021cfd04bc..25bbbf428be9 100644 --- a/arch/mips/pmc-sierra/yosemite/irq.c +++ b/arch/mips/pmc-sierra/yosemite/irq.c | |||
| @@ -150,8 +150,4 @@ void __init arch_init_irq(void) | |||
| 150 | mips_cpu_irq_init(); | 150 | mips_cpu_irq_init(); |
| 151 | rm7k_cpu_irq_init(); | 151 | rm7k_cpu_irq_init(); |
| 152 | rm9k_cpu_irq_init(); | 152 | rm9k_cpu_irq_init(); |
| 153 | |||
| 154 | #ifdef CONFIG_GDB_CONSOLE | ||
| 155 | register_gdb_console(); | ||
| 156 | #endif | ||
| 157 | } | 153 | } |
diff --git a/arch/mips/pnx833x/Makefile b/arch/mips/pnx833x/Makefile new file mode 100644 index 000000000000..02c4698cab05 --- /dev/null +++ b/arch/mips/pnx833x/Makefile | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | obj-$(CONFIG_SOC_PNX833X) += common/ | ||
| 2 | obj-$(CONFIG_NXP_STB220) += stb22x/ | ||
| 3 | obj-$(CONFIG_NXP_STB225) += stb22x/ | ||
diff --git a/arch/mips/pnx833x/Platform b/arch/mips/pnx833x/Platform new file mode 100644 index 000000000000..7e6ec4dbc8dd --- /dev/null +++ b/arch/mips/pnx833x/Platform | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # NXP STB225 | ||
| 2 | platform-$(CONFIG_SOC_PNX833X) += pnx833x/ | ||
| 3 | cflags-$(CONFIG_SOC_PNX833X) += -Iarch/mips/include/asm/mach-pnx833x | ||
| 4 | load-$(CONFIG_NXP_STB220) += 0xffffffff80001000 | ||
| 5 | load-$(CONFIG_NXP_STB225) += 0xffffffff80001000 | ||
diff --git a/arch/mips/nxp/pnx833x/common/Makefile b/arch/mips/pnx833x/common/Makefile index 4a16f3b503b5..1a46dd291b16 100644 --- a/arch/mips/nxp/pnx833x/common/Makefile +++ b/arch/mips/pnx833x/common/Makefile | |||
| @@ -1,3 +1 @@ | |||
| 1 | obj-y := interrupts.o platform.o prom.o setup.o reset.o | obj-y := interrupts.o platform.o prom.o setup.o reset.o | |
| 2 | |||
| 3 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/nxp/pnx833x/common/interrupts.c b/arch/mips/pnx833x/common/interrupts.c index 941916f8aaff..941916f8aaff 100644 --- a/arch/mips/nxp/pnx833x/common/interrupts.c +++ b/arch/mips/pnx833x/common/interrupts.c | |||
diff --git a/arch/mips/nxp/pnx833x/common/platform.c b/arch/mips/pnx833x/common/platform.c index 01f8345a2069..01f8345a2069 100644 --- a/arch/mips/nxp/pnx833x/common/platform.c +++ b/arch/mips/pnx833x/common/platform.c | |||
diff --git a/arch/mips/nxp/pnx833x/common/prom.c b/arch/mips/pnx833x/common/prom.c index 29969f90a6b0..29969f90a6b0 100644 --- a/arch/mips/nxp/pnx833x/common/prom.c +++ b/arch/mips/pnx833x/common/prom.c | |||
diff --git a/arch/mips/nxp/pnx833x/common/reset.c b/arch/mips/pnx833x/common/reset.c index e0ea96d29fde..e0ea96d29fde 100644 --- a/arch/mips/nxp/pnx833x/common/reset.c +++ b/arch/mips/pnx833x/common/reset.c | |||
diff --git a/arch/mips/nxp/pnx833x/common/setup.c b/arch/mips/pnx833x/common/setup.c index e51fbc4b644d..e51fbc4b644d 100644 --- a/arch/mips/nxp/pnx833x/common/setup.c +++ b/arch/mips/pnx833x/common/setup.c | |||
diff --git a/arch/mips/pnx833x/stb22x/Makefile b/arch/mips/pnx833x/stb22x/Makefile new file mode 100644 index 000000000000..7b580060de50 --- /dev/null +++ b/arch/mips/pnx833x/stb22x/Makefile | |||
| @@ -0,0 +1 @@ | |||
| obj-y := board.o | |||
diff --git a/arch/mips/nxp/pnx833x/stb22x/board.c b/arch/mips/pnx833x/stb22x/board.c index 644eb7c3210f..644eb7c3210f 100644 --- a/arch/mips/nxp/pnx833x/stb22x/board.c +++ b/arch/mips/pnx833x/stb22x/board.c | |||
diff --git a/arch/mips/pnx8550/Makefile b/arch/mips/pnx8550/Makefile new file mode 100644 index 000000000000..3f7e8561437b --- /dev/null +++ b/arch/mips/pnx8550/Makefile | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | obj-$(CONFIG_SOC_PNX8550) += common/ | ||
| 2 | obj-$(CONFIG_PNX8550_JBS) += jbs/ | ||
| 3 | obj-$(CONFIG_PNX8550_STB810) += stb810/ | ||
diff --git a/arch/mips/pnx8550/Platform b/arch/mips/pnx8550/Platform new file mode 100644 index 000000000000..0e7fbde768d5 --- /dev/null +++ b/arch/mips/pnx8550/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | platform-$(CONFIG_SOC_PNX8550) += pnx8550/ | ||
| 2 | |||
| 3 | cflags-$(CONFIG_SOC_PNX8550) += \ | ||
| 4 | -I$(srctree)/arch/mips/include/asm/mach-pnx8550 | ||
| 5 | |||
| 6 | load-$(CONFIG_PNX8550_JBS) += 0xffffffff80060000 | ||
| 7 | load-$(CONFIG_PNX8550_STB810) += 0xffffffff80060000 | ||
diff --git a/arch/mips/nxp/pnx8550/common/Makefile b/arch/mips/pnx8550/common/Makefile index dd9e7b1f7fd3..f8ce695dc54f 100644 --- a/arch/mips/nxp/pnx8550/common/Makefile +++ b/arch/mips/pnx8550/common/Makefile | |||
| @@ -24,5 +24,3 @@ | |||
| 24 | 24 | ||
| 25 | obj-y := setup.o prom.o int.o reset.o time.o proc.o platform.o | 25 | obj-y := setup.o prom.o int.o reset.o time.o proc.o platform.o |
| 26 | obj-$(CONFIG_PCI) += pci.o | 26 | obj-$(CONFIG_PCI) += pci.o |
| 27 | |||
| 28 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/nxp/pnx8550/common/int.c b/arch/mips/pnx8550/common/int.c index cfed5051dc6d..cfed5051dc6d 100644 --- a/arch/mips/nxp/pnx8550/common/int.c +++ b/arch/mips/pnx8550/common/int.c | |||
diff --git a/arch/mips/pnx8550/common/pci.c b/arch/mips/pnx8550/common/pci.c new file mode 100644 index 000000000000..98e86ddb86cc --- /dev/null +++ b/arch/mips/pnx8550/common/pci.c | |||
| @@ -0,0 +1,134 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * BRIEF MODULE DESCRIPTION | ||
| 4 | * | ||
| 5 | * Author: source@mvista.com | ||
| 6 | * | ||
| 7 | * This program is free software; you can distribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License (Version 2) as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * 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 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
| 19 | */ | ||
| 20 | #include <linux/types.h> | ||
| 21 | #include <linux/pci.h> | ||
| 22 | #include <linux/kernel.h> | ||
| 23 | #include <linux/init.h> | ||
| 24 | |||
| 25 | #include <pci.h> | ||
| 26 | #include <glb.h> | ||
| 27 | #include <nand.h> | ||
| 28 | |||
| 29 | static struct resource pci_io_resource = { | ||
| 30 | .start = PNX8550_PCIIO + 0x1000, /* reserve regacy I/O space */ | ||
| 31 | .end = PNX8550_PCIIO + PNX8550_PCIIO_SIZE, | ||
| 32 | .name = "pci IO space", | ||
| 33 | .flags = IORESOURCE_IO | ||
| 34 | }; | ||
| 35 | |||
| 36 | static struct resource pci_mem_resource = { | ||
| 37 | .start = PNX8550_PCIMEM, | ||
| 38 | .end = PNX8550_PCIMEM + PNX8550_PCIMEM_SIZE - 1, | ||
| 39 | .name = "pci memory space", | ||
| 40 | .flags = IORESOURCE_MEM | ||
| 41 | }; | ||
| 42 | |||
| 43 | extern struct pci_ops pnx8550_pci_ops; | ||
| 44 | |||
| 45 | static struct pci_controller pnx8550_controller = { | ||
| 46 | .pci_ops = &pnx8550_pci_ops, | ||
| 47 | .io_map_base = PNX8550_PORT_BASE, | ||
| 48 | .io_resource = &pci_io_resource, | ||
| 49 | .mem_resource = &pci_mem_resource, | ||
| 50 | }; | ||
| 51 | |||
| 52 | /* Return the total size of DRAM-memory, (RANK0 + RANK1) */ | ||
| 53 | static inline unsigned long get_system_mem_size(void) | ||
| 54 | { | ||
| 55 | /* Read IP2031_RANK0_ADDR_LO */ | ||
| 56 | unsigned long dram_r0_lo = inl(PCI_BASE | 0x65010); | ||
| 57 | /* Read IP2031_RANK1_ADDR_HI */ | ||
| 58 | unsigned long dram_r1_hi = inl(PCI_BASE | 0x65018); | ||
| 59 | |||
| 60 | return dram_r1_hi - dram_r0_lo + 1; | ||
| 61 | } | ||
| 62 | |||
| 63 | static int __init pnx8550_pci_setup(void) | ||
| 64 | { | ||
| 65 | int pci_mem_code; | ||
| 66 | int mem_size = get_system_mem_size() >> 20; | ||
| 67 | |||
| 68 | /* Clear the Global 2 Register, PCI Inta Output Enable Registers | ||
| 69 | Bit 1:Enable DAC Powerdown | ||
| 70 | -> 0:DACs are enabled and are working normally | ||
| 71 | 1:DACs are powerdown | ||
| 72 | Bit 0:Enable of PCI inta output | ||
| 73 | -> 0 = Disable PCI inta output | ||
| 74 | 1 = Enable PCI inta output | ||
| 75 | */ | ||
| 76 | PNX8550_GLB2_ENAB_INTA_O = 0; | ||
| 77 | |||
| 78 | /* Calc the PCI mem size code */ | ||
| 79 | if (mem_size >= 128) | ||
| 80 | pci_mem_code = SIZE_128M; | ||
| 81 | else if (mem_size >= 64) | ||
| 82 | pci_mem_code = SIZE_64M; | ||
| 83 | else if (mem_size >= 32) | ||
| 84 | pci_mem_code = SIZE_32M; | ||
| 85 | else | ||
| 86 | pci_mem_code = SIZE_16M; | ||
| 87 | |||
| 88 | /* Set PCI_XIO registers */ | ||
| 89 | outl(pci_mem_resource.start, PCI_BASE | PCI_BASE1_LO); | ||
| 90 | outl(pci_mem_resource.end + 1, PCI_BASE | PCI_BASE1_HI); | ||
| 91 | outl(pci_io_resource.start, PCI_BASE | PCI_BASE2_LO); | ||
| 92 | outl(pci_io_resource.end, PCI_BASE | PCI_BASE2_HI); | ||
| 93 | |||
| 94 | /* Send memory transaction via PCI_BASE2 */ | ||
| 95 | outl(0x00000001, PCI_BASE | PCI_IO); | ||
| 96 | |||
| 97 | /* Unlock the setup register */ | ||
| 98 | outl(0xca, PCI_BASE | PCI_UNLOCKREG); | ||
| 99 | |||
| 100 | /* | ||
| 101 | * BAR0 of PNX8550 (pci base 10) must be zero in order for ide | ||
| 102 | * to work, and in order for bus_to_baddr to work without any | ||
| 103 | * hacks. | ||
| 104 | */ | ||
| 105 | outl(0x00000000, PCI_BASE | PCI_BASE10); | ||
| 106 | |||
| 107 | /* | ||
| 108 | *These two bars are set by default or the boot code. | ||
| 109 | * However, it's safer to set them here so we're not boot | ||
| 110 | * code dependent. | ||
| 111 | */ | ||
| 112 | outl(0x1be00000, PCI_BASE | PCI_BASE14); /* PNX MMIO */ | ||
| 113 | outl(PNX8550_NAND_BASE_ADDR, PCI_BASE | PCI_BASE18); /* XIO */ | ||
| 114 | |||
| 115 | outl(PCI_EN_TA | | ||
| 116 | PCI_EN_PCI2MMI | | ||
| 117 | PCI_EN_XIO | | ||
| 118 | PCI_SETUP_BASE18_SIZE(SIZE_32M) | | ||
| 119 | PCI_SETUP_BASE18_EN | | ||
| 120 | PCI_SETUP_BASE14_EN | | ||
| 121 | PCI_SETUP_BASE10_PREF | | ||
| 122 | PCI_SETUP_BASE10_SIZE(pci_mem_code) | | ||
| 123 | PCI_SETUP_CFGMANAGE_EN | | ||
| 124 | PCI_SETUP_PCIARB_EN, | ||
| 125 | PCI_BASE | | ||
| 126 | PCI_SETUP); /* PCI_SETUP */ | ||
| 127 | outl(0x00000000, PCI_BASE | PCI_CTRL); /* PCI_CONTROL */ | ||
| 128 | |||
| 129 | register_pci_controller(&pnx8550_controller); | ||
| 130 | |||
| 131 | return 0; | ||
| 132 | } | ||
| 133 | |||
| 134 | arch_initcall(pnx8550_pci_setup); | ||
diff --git a/arch/mips/nxp/pnx8550/common/platform.c b/arch/mips/pnx8550/common/platform.c index 5264cc09a27b..5264cc09a27b 100644 --- a/arch/mips/nxp/pnx8550/common/platform.c +++ b/arch/mips/pnx8550/common/platform.c | |||
diff --git a/arch/mips/nxp/pnx8550/common/proc.c b/arch/mips/pnx8550/common/proc.c index 3bba5ec828e8..3bba5ec828e8 100644 --- a/arch/mips/nxp/pnx8550/common/proc.c +++ b/arch/mips/pnx8550/common/proc.c | |||
diff --git a/arch/mips/nxp/pnx8550/common/prom.c b/arch/mips/pnx8550/common/prom.c index 32f70097c3c7..32f70097c3c7 100644 --- a/arch/mips/nxp/pnx8550/common/prom.c +++ b/arch/mips/pnx8550/common/prom.c | |||
diff --git a/arch/mips/nxp/pnx8550/common/reset.c b/arch/mips/pnx8550/common/reset.c index fadd8744a6bc..fadd8744a6bc 100644 --- a/arch/mips/nxp/pnx8550/common/reset.c +++ b/arch/mips/pnx8550/common/reset.c | |||
diff --git a/arch/mips/pnx8550/common/setup.c b/arch/mips/pnx8550/common/setup.c new file mode 100644 index 000000000000..64246c9c875c --- /dev/null +++ b/arch/mips/pnx8550/common/setup.c | |||
| @@ -0,0 +1,145 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * 2.6 port, Embedded Alley Solutions, Inc | ||
| 4 | * | ||
| 5 | * Based on Per Hallsmark, per.hallsmark@mvista.com | ||
| 6 | * | ||
| 7 | * This program is free software; you can distribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License (Version 2) as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * 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 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
| 19 | */ | ||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/sched.h> | ||
| 22 | #include <linux/ioport.h> | ||
| 23 | #include <linux/irq.h> | ||
| 24 | #include <linux/mm.h> | ||
| 25 | #include <linux/delay.h> | ||
| 26 | #include <linux/interrupt.h> | ||
| 27 | #include <linux/serial_pnx8xxx.h> | ||
| 28 | #include <linux/pm.h> | ||
| 29 | |||
| 30 | #include <asm/cpu.h> | ||
| 31 | #include <asm/bootinfo.h> | ||
| 32 | #include <asm/irq.h> | ||
| 33 | #include <asm/mipsregs.h> | ||
| 34 | #include <asm/reboot.h> | ||
| 35 | #include <asm/pgtable.h> | ||
| 36 | #include <asm/time.h> | ||
| 37 | |||
| 38 | #include <glb.h> | ||
| 39 | #include <int.h> | ||
| 40 | #include <pci.h> | ||
| 41 | #include <uart.h> | ||
| 42 | #include <nand.h> | ||
| 43 | |||
| 44 | extern void __init board_setup(void); | ||
| 45 | extern void pnx8550_machine_restart(char *); | ||
| 46 | extern void pnx8550_machine_halt(void); | ||
| 47 | extern void pnx8550_machine_power_off(void); | ||
| 48 | extern struct resource ioport_resource; | ||
| 49 | extern struct resource iomem_resource; | ||
| 50 | extern char *prom_getcmdline(void); | ||
| 51 | |||
| 52 | struct resource standard_io_resources[] = { | ||
| 53 | { | ||
| 54 | .start = 0x00, | ||
| 55 | .end = 0x1f, | ||
| 56 | .name = "dma1", | ||
| 57 | .flags = IORESOURCE_BUSY | ||
| 58 | }, { | ||
| 59 | .start = 0x40, | ||
| 60 | .end = 0x5f, | ||
| 61 | .name = "timer", | ||
| 62 | .flags = IORESOURCE_BUSY | ||
| 63 | }, { | ||
| 64 | .start = 0x80, | ||
| 65 | .end = 0x8f, | ||
| 66 | .name = "dma page reg", | ||
| 67 | .flags = IORESOURCE_BUSY | ||
| 68 | }, { | ||
| 69 | .start = 0xc0, | ||
| 70 | .end = 0xdf, | ||
| 71 | .name = "dma2", | ||
| 72 | .flags = IORESOURCE_BUSY | ||
| 73 | }, | ||
| 74 | }; | ||
| 75 | |||
| 76 | #define STANDARD_IO_RESOURCES ARRAY_SIZE(standard_io_resources) | ||
| 77 | |||
| 78 | extern struct resource pci_io_resource; | ||
| 79 | extern struct resource pci_mem_resource; | ||
| 80 | |||
| 81 | /* Return the total size of DRAM-memory, (RANK0 + RANK1) */ | ||
| 82 | unsigned long get_system_mem_size(void) | ||
| 83 | { | ||
| 84 | /* Read IP2031_RANK0_ADDR_LO */ | ||
| 85 | unsigned long dram_r0_lo = inl(PCI_BASE | 0x65010); | ||
| 86 | /* Read IP2031_RANK1_ADDR_HI */ | ||
| 87 | unsigned long dram_r1_hi = inl(PCI_BASE | 0x65018); | ||
| 88 | |||
| 89 | return dram_r1_hi - dram_r0_lo + 1; | ||
| 90 | } | ||
| 91 | |||
| 92 | int pnx8550_console_port = -1; | ||
| 93 | |||
| 94 | void __init plat_mem_setup(void) | ||
| 95 | { | ||
| 96 | int i; | ||
| 97 | char* argptr; | ||
| 98 | |||
| 99 | board_setup(); /* board specific setup */ | ||
| 100 | |||
| 101 | _machine_restart = pnx8550_machine_restart; | ||
| 102 | _machine_halt = pnx8550_machine_halt; | ||
| 103 | pm_power_off = pnx8550_machine_power_off; | ||
| 104 | |||
| 105 | /* Clear the Global 2 Register, PCI Inta Output Enable Registers | ||
| 106 | Bit 1:Enable DAC Powerdown | ||
| 107 | -> 0:DACs are enabled and are working normally | ||
| 108 | 1:DACs are powerdown | ||
| 109 | Bit 0:Enable of PCI inta output | ||
| 110 | -> 0 = Disable PCI inta output | ||
| 111 | 1 = Enable PCI inta output | ||
| 112 | */ | ||
| 113 | PNX8550_GLB2_ENAB_INTA_O = 0; | ||
| 114 | |||
| 115 | /* IO/MEM resources. */ | ||
| 116 | set_io_port_base(PNX8550_PORT_BASE); | ||
| 117 | ioport_resource.start = 0; | ||
| 118 | ioport_resource.end = ~0; | ||
| 119 | iomem_resource.start = 0; | ||
| 120 | iomem_resource.end = ~0; | ||
| 121 | |||
| 122 | /* Request I/O space for devices on this board */ | ||
| 123 | for (i = 0; i < STANDARD_IO_RESOURCES; i++) | ||
| 124 | request_resource(&ioport_resource, standard_io_resources + i); | ||
| 125 | |||
| 126 | /* Place the Mode Control bit for GPIO pin 16 in primary function */ | ||
| 127 | /* Pin 16 is used by UART1, UA1_TX */ | ||
| 128 | outl((PNX8550_GPIO_MODE_PRIMOP << PNX8550_GPIO_MC_16_BIT) | | ||
| 129 | (PNX8550_GPIO_MODE_PRIMOP << PNX8550_GPIO_MC_17_BIT), | ||
| 130 | PNX8550_GPIO_MC1); | ||
| 131 | |||
| 132 | argptr = prom_getcmdline(); | ||
| 133 | if ((argptr = strstr(argptr, "console=ttyS")) != NULL) { | ||
| 134 | argptr += strlen("console=ttyS"); | ||
| 135 | pnx8550_console_port = *argptr == '0' ? 0 : 1; | ||
| 136 | |||
| 137 | /* We must initialize the UART (console) before early printk */ | ||
| 138 | /* Set LCR to 8-bit and BAUD to 38400 (no 5) */ | ||
| 139 | ip3106_lcr(UART_BASE, pnx8550_console_port) = | ||
| 140 | PNX8XXX_UART_LCR_8BIT; | ||
| 141 | ip3106_baud(UART_BASE, pnx8550_console_port) = 5; | ||
| 142 | } | ||
| 143 | |||
| 144 | return; | ||
| 145 | } | ||
diff --git a/arch/mips/nxp/pnx8550/common/time.c b/arch/mips/pnx8550/common/time.c index 8836c6203df0..8836c6203df0 100644 --- a/arch/mips/nxp/pnx8550/common/time.c +++ b/arch/mips/pnx8550/common/time.c | |||
diff --git a/arch/mips/pnx8550/jbs/Makefile b/arch/mips/pnx8550/jbs/Makefile new file mode 100644 index 000000000000..c4dc3d53eb5c --- /dev/null +++ b/arch/mips/pnx8550/jbs/Makefile | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | |||
| 2 | # Makefile for the NXP JBS Board. | ||
| 3 | |||
| 4 | obj-y := init.o board_setup.o irqmap.o | ||
diff --git a/arch/mips/nxp/pnx8550/jbs/board_setup.c b/arch/mips/pnx8550/jbs/board_setup.c index 57dd903ca408..57dd903ca408 100644 --- a/arch/mips/nxp/pnx8550/jbs/board_setup.c +++ b/arch/mips/pnx8550/jbs/board_setup.c | |||
diff --git a/arch/mips/nxp/pnx8550/jbs/init.c b/arch/mips/pnx8550/jbs/init.c index d59b4a4e5e8b..d59b4a4e5e8b 100644 --- a/arch/mips/nxp/pnx8550/jbs/init.c +++ b/arch/mips/pnx8550/jbs/init.c | |||
diff --git a/arch/mips/nxp/pnx8550/jbs/irqmap.c b/arch/mips/pnx8550/jbs/irqmap.c index 7fc89842002c..7fc89842002c 100644 --- a/arch/mips/nxp/pnx8550/jbs/irqmap.c +++ b/arch/mips/pnx8550/jbs/irqmap.c | |||
diff --git a/arch/mips/pnx8550/stb810/Makefile b/arch/mips/pnx8550/stb810/Makefile new file mode 100644 index 000000000000..cb4ff022f1fb --- /dev/null +++ b/arch/mips/pnx8550/stb810/Makefile | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | |||
| 2 | # Makefile for the NXP STB810 Board. | ||
| 3 | |||
| 4 | obj-y := prom_init.o board_setup.o irqmap.o | ||
diff --git a/arch/mips/nxp/pnx8550/stb810/board_setup.c b/arch/mips/pnx8550/stb810/board_setup.c index af2a55e0b4e9..af2a55e0b4e9 100644 --- a/arch/mips/nxp/pnx8550/stb810/board_setup.c +++ b/arch/mips/pnx8550/stb810/board_setup.c | |||
diff --git a/arch/mips/nxp/pnx8550/stb810/irqmap.c b/arch/mips/pnx8550/stb810/irqmap.c index 8c034963ddcd..8c034963ddcd 100644 --- a/arch/mips/nxp/pnx8550/stb810/irqmap.c +++ b/arch/mips/pnx8550/stb810/irqmap.c | |||
diff --git a/arch/mips/nxp/pnx8550/stb810/prom_init.c b/arch/mips/pnx8550/stb810/prom_init.c index ca7f4ada0640..ca7f4ada0640 100644 --- a/arch/mips/nxp/pnx8550/stb810/prom_init.c +++ b/arch/mips/pnx8550/stb810/prom_init.c | |||
diff --git a/arch/mips/powertv/Makefile b/arch/mips/powertv/Makefile index 0a0d73c0564f..baf6e9092a9f 100644 --- a/arch/mips/powertv/Makefile +++ b/arch/mips/powertv/Makefile | |||
| @@ -23,6 +23,9 @@ | |||
| 23 | # under Linux. | 23 | # under Linux. |
| 24 | # | 24 | # |
| 25 | 25 | ||
| 26 | obj-y += init.o memory.o reset.o time.o powertv_setup.o asic/ pci/ | 26 | obj-y += init.o ioremap.o memory.o powertv_setup.o reset.o time.o \ |
| 27 | asic/ pci/ | ||
| 27 | 28 | ||
| 28 | EXTRA_CFLAGS += -Wall -Werror | 29 | obj-$(CONFIG_USB) += powertv-usb.o |
| 30 | |||
| 31 | EXTRA_CFLAGS += -Wall | ||
diff --git a/arch/mips/powertv/Platform b/arch/mips/powertv/Platform new file mode 100644 index 000000000000..4eb5af1d8eea --- /dev/null +++ b/arch/mips/powertv/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Cisco PowerTV Platform | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_POWERTV) += powertv/ | ||
| 5 | cflags-$(CONFIG_POWERTV) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-powertv | ||
| 7 | load-$(CONFIG_POWERTV) += 0xffffffff90800000 | ||
diff --git a/arch/mips/powertv/asic/Makefile b/arch/mips/powertv/asic/Makefile index bebfdcff0443..f0e95dc0ac97 100644 --- a/arch/mips/powertv/asic/Makefile +++ b/arch/mips/powertv/asic/Makefile | |||
| @@ -16,8 +16,8 @@ | |||
| 16 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 16 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 17 | # | 17 | # |
| 18 | 18 | ||
| 19 | obj-y += asic-calliope.o asic-cronus.o asic-zeus.o asic_devices.o asic_int.o \ | 19 | obj-y += asic-calliope.o asic-cronus.o asic-gaia.o asic-zeus.o \ |
| 20 | irq_asic.o prealloc-calliope.o prealloc-cronus.o \ | 20 | asic_devices.o asic_int.o irq_asic.o prealloc-calliope.o \ |
| 21 | prealloc-cronuslite.o prealloc-zeus.o | 21 | prealloc-cronus.o prealloc-cronuslite.o prealloc-gaia.o prealloc-zeus.o |
| 22 | 22 | ||
| 23 | EXTRA_CFLAGS += -Wall -Werror | 23 | EXTRA_CFLAGS += -Wall -Werror |
diff --git a/arch/mips/powertv/asic/asic-calliope.c b/arch/mips/powertv/asic/asic-calliope.c index 1ae6623444b2..0a170e0ffeaa 100644 --- a/arch/mips/powertv/asic/asic-calliope.c +++ b/arch/mips/powertv/asic/asic-calliope.c | |||
| @@ -77,7 +77,7 @@ const struct register_map calliope_register_map __initdata = { | |||
| 77 | .int_docsis_en = {.phys = CALLIOPE_ADDR(0xA028F4)}, | 77 | .int_docsis_en = {.phys = CALLIOPE_ADDR(0xA028F4)}, |
| 78 | 78 | ||
| 79 | .mips_pll_setup = {.phys = CALLIOPE_ADDR(0x980000)}, | 79 | .mips_pll_setup = {.phys = CALLIOPE_ADDR(0x980000)}, |
| 80 | .usb_fs = {.phys = CALLIOPE_ADDR(0x980030)}, | 80 | .fs432x4b4_usb_ctl = {.phys = CALLIOPE_ADDR(0x980030)}, |
| 81 | .test_bus = {.phys = CALLIOPE_ADDR(0x9800CC)}, | 81 | .test_bus = {.phys = CALLIOPE_ADDR(0x9800CC)}, |
| 82 | .crt_spare = {.phys = CALLIOPE_ADDR(0x9800d4)}, | 82 | .crt_spare = {.phys = CALLIOPE_ADDR(0x9800d4)}, |
| 83 | .usb2_ohci_int_mask = {.phys = CALLIOPE_ADDR(0x9A000c)}, | 83 | .usb2_ohci_int_mask = {.phys = CALLIOPE_ADDR(0x9A000c)}, |
diff --git a/arch/mips/powertv/asic/asic-cronus.c b/arch/mips/powertv/asic/asic-cronus.c index 5bb64bfb508b..bbc0c122be5e 100644 --- a/arch/mips/powertv/asic/asic-cronus.c +++ b/arch/mips/powertv/asic/asic-cronus.c | |||
| @@ -77,13 +77,13 @@ const struct register_map cronus_register_map __initdata = { | |||
| 77 | .int_docsis_en = {.phys = CRONUS_ADDR(0x2A28F4)}, | 77 | .int_docsis_en = {.phys = CRONUS_ADDR(0x2A28F4)}, |
| 78 | 78 | ||
| 79 | .mips_pll_setup = {.phys = CRONUS_ADDR(0x1C0000)}, | 79 | .mips_pll_setup = {.phys = CRONUS_ADDR(0x1C0000)}, |
| 80 | .usb_fs = {.phys = CRONUS_ADDR(0x1C0018)}, | 80 | .fs432x4b4_usb_ctl = {.phys = CRONUS_ADDR(0x1C0028)}, |
| 81 | .test_bus = {.phys = CRONUS_ADDR(0x1C00CC)}, | 81 | .test_bus = {.phys = CRONUS_ADDR(0x1C00CC)}, |
| 82 | .crt_spare = {.phys = CRONUS_ADDR(0x1c00d4)}, | 82 | .crt_spare = {.phys = CRONUS_ADDR(0x1c00d4)}, |
| 83 | .usb2_ohci_int_mask = {.phys = CRONUS_ADDR(0x20000C)}, | 83 | .usb2_ohci_int_mask = {.phys = CRONUS_ADDR(0x20000C)}, |
| 84 | .usb2_strap = {.phys = CRONUS_ADDR(0x200014)}, | 84 | .usb2_strap = {.phys = CRONUS_ADDR(0x200014)}, |
| 85 | .ehci_hcapbase = {.phys = CRONUS_ADDR(0x21FE00)}, | 85 | .ehci_hcapbase = {.phys = CRONUS_ADDR(0x21FE00)}, |
| 86 | .ohci_hc_revision = {.phys = CRONUS_ADDR(0x1E0000)}, | 86 | .ohci_hc_revision = {.phys = CRONUS_ADDR(0x21fc00)}, |
| 87 | .bcm1_bs_lmi_steer = {.phys = CRONUS_ADDR(0x2E0008)}, | 87 | .bcm1_bs_lmi_steer = {.phys = CRONUS_ADDR(0x2E0008)}, |
| 88 | .usb2_control = {.phys = CRONUS_ADDR(0x2E004C)}, | 88 | .usb2_control = {.phys = CRONUS_ADDR(0x2E004C)}, |
| 89 | .usb2_stbus_obc = {.phys = CRONUS_ADDR(0x21FF00)}, | 89 | .usb2_stbus_obc = {.phys = CRONUS_ADDR(0x21FF00)}, |
diff --git a/arch/mips/powertv/asic/asic-gaia.c b/arch/mips/powertv/asic/asic-gaia.c new file mode 100644 index 000000000000..91dda682752c --- /dev/null +++ b/arch/mips/powertv/asic/asic-gaia.c | |||
| @@ -0,0 +1,96 @@ | |||
| 1 | /* | ||
| 2 | * Locations of devices in the Gaia ASIC | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. | ||
| 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 | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | * | ||
| 20 | * Author: David VomLehn | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/init.h> | ||
| 24 | #include <asm/mach-powertv/asic.h> | ||
| 25 | |||
| 26 | const struct register_map gaia_register_map __initdata = { | ||
| 27 | .eic_slow0_strt_add = {.phys = GAIA_IO_BASE + 0x000000}, | ||
| 28 | .eic_cfg_bits = {.phys = GAIA_IO_BASE + 0x000038}, | ||
| 29 | .eic_ready_status = {.phys = GAIA_IO_BASE + 0x00004C}, | ||
| 30 | |||
| 31 | .chipver3 = {.phys = GAIA_IO_BASE + 0x2A0800}, | ||
| 32 | .chipver2 = {.phys = GAIA_IO_BASE + 0x2A0804}, | ||
| 33 | .chipver1 = {.phys = GAIA_IO_BASE + 0x2A0808}, | ||
| 34 | .chipver0 = {.phys = GAIA_IO_BASE + 0x2A080C}, | ||
| 35 | |||
| 36 | /* The registers of IRBlaster */ | ||
| 37 | .uart1_intstat = {.phys = GAIA_IO_BASE + 0x2A1800}, | ||
| 38 | .uart1_inten = {.phys = GAIA_IO_BASE + 0x2A1804}, | ||
| 39 | .uart1_config1 = {.phys = GAIA_IO_BASE + 0x2A1808}, | ||
| 40 | .uart1_config2 = {.phys = GAIA_IO_BASE + 0x2A180C}, | ||
| 41 | .uart1_divisorhi = {.phys = GAIA_IO_BASE + 0x2A1810}, | ||
| 42 | .uart1_divisorlo = {.phys = GAIA_IO_BASE + 0x2A1814}, | ||
| 43 | .uart1_data = {.phys = GAIA_IO_BASE + 0x2A1818}, | ||
| 44 | .uart1_status = {.phys = GAIA_IO_BASE + 0x2A181C}, | ||
| 45 | |||
| 46 | .int_stat_3 = {.phys = GAIA_IO_BASE + 0x2A2800}, | ||
| 47 | .int_stat_2 = {.phys = GAIA_IO_BASE + 0x2A2804}, | ||
| 48 | .int_stat_1 = {.phys = GAIA_IO_BASE + 0x2A2808}, | ||
| 49 | .int_stat_0 = {.phys = GAIA_IO_BASE + 0x2A280C}, | ||
| 50 | .int_config = {.phys = GAIA_IO_BASE + 0x2A2810}, | ||
| 51 | .int_int_scan = {.phys = GAIA_IO_BASE + 0x2A2818}, | ||
| 52 | .ien_int_3 = {.phys = GAIA_IO_BASE + 0x2A2830}, | ||
| 53 | .ien_int_2 = {.phys = GAIA_IO_BASE + 0x2A2834}, | ||
| 54 | .ien_int_1 = {.phys = GAIA_IO_BASE + 0x2A2838}, | ||
| 55 | .ien_int_0 = {.phys = GAIA_IO_BASE + 0x2A283C}, | ||
| 56 | .int_level_3_3 = {.phys = GAIA_IO_BASE + 0x2A2880}, | ||
| 57 | .int_level_3_2 = {.phys = GAIA_IO_BASE + 0x2A2884}, | ||
| 58 | .int_level_3_1 = {.phys = GAIA_IO_BASE + 0x2A2888}, | ||
| 59 | .int_level_3_0 = {.phys = GAIA_IO_BASE + 0x2A288C}, | ||
| 60 | .int_level_2_3 = {.phys = GAIA_IO_BASE + 0x2A2890}, | ||
| 61 | .int_level_2_2 = {.phys = GAIA_IO_BASE + 0x2A2894}, | ||
| 62 | .int_level_2_1 = {.phys = GAIA_IO_BASE + 0x2A2898}, | ||
| 63 | .int_level_2_0 = {.phys = GAIA_IO_BASE + 0x2A289C}, | ||
| 64 | .int_level_1_3 = {.phys = GAIA_IO_BASE + 0x2A28A0}, | ||
| 65 | .int_level_1_2 = {.phys = GAIA_IO_BASE + 0x2A28A4}, | ||
| 66 | .int_level_1_1 = {.phys = GAIA_IO_BASE + 0x2A28A8}, | ||
| 67 | .int_level_1_0 = {.phys = GAIA_IO_BASE + 0x2A28AC}, | ||
| 68 | .int_level_0_3 = {.phys = GAIA_IO_BASE + 0x2A28B0}, | ||
| 69 | .int_level_0_2 = {.phys = GAIA_IO_BASE + 0x2A28B4}, | ||
| 70 | .int_level_0_1 = {.phys = GAIA_IO_BASE + 0x2A28B8}, | ||
| 71 | .int_level_0_0 = {.phys = GAIA_IO_BASE + 0x2A28BC}, | ||
| 72 | .int_docsis_en = {.phys = GAIA_IO_BASE + 0x2A28F4}, | ||
| 73 | |||
| 74 | .mips_pll_setup = {.phys = GAIA_IO_BASE + 0x1C0000}, | ||
| 75 | .fs432x4b4_usb_ctl = {.phys = GAIA_IO_BASE + 0x1C0024}, | ||
| 76 | .test_bus = {.phys = GAIA_IO_BASE + 0x1C00CC}, | ||
| 77 | .crt_spare = {.phys = GAIA_IO_BASE + 0x1c0108}, | ||
| 78 | .usb2_ohci_int_mask = {.phys = GAIA_IO_BASE + 0x20000C}, | ||
| 79 | .usb2_strap = {.phys = GAIA_IO_BASE + 0x200014}, | ||
| 80 | .ehci_hcapbase = {.phys = GAIA_IO_BASE + 0x21FE00}, | ||
| 81 | .ohci_hc_revision = {.phys = GAIA_IO_BASE + 0x21fc00}, | ||
| 82 | .bcm1_bs_lmi_steer = {.phys = GAIA_IO_BASE + 0x2E0004}, | ||
| 83 | .usb2_control = {.phys = GAIA_IO_BASE + 0x2E004C}, | ||
| 84 | .usb2_stbus_obc = {.phys = GAIA_IO_BASE + 0x21FF00}, | ||
| 85 | .usb2_stbus_mess_size = {.phys = GAIA_IO_BASE + 0x21FF04}, | ||
| 86 | .usb2_stbus_chunk_size = {.phys = GAIA_IO_BASE + 0x21FF08}, | ||
| 87 | |||
| 88 | .pcie_regs = {.phys = GAIA_IO_BASE + 0x220000}, | ||
| 89 | .tim_ch = {.phys = GAIA_IO_BASE + 0x2A2C10}, | ||
| 90 | .tim_cl = {.phys = GAIA_IO_BASE + 0x2A2C14}, | ||
| 91 | .gpio_dout = {.phys = GAIA_IO_BASE + 0x2A2C20}, | ||
| 92 | .gpio_din = {.phys = GAIA_IO_BASE + 0x2A2C24}, | ||
| 93 | .gpio_dir = {.phys = GAIA_IO_BASE + 0x2A2C2C}, | ||
| 94 | .watchdog = {.phys = GAIA_IO_BASE + 0x2A2C30}, | ||
| 95 | .front_panel = {.phys = GAIA_IO_BASE + 0x2A3800}, | ||
| 96 | }; | ||
diff --git a/arch/mips/powertv/asic/asic-zeus.c b/arch/mips/powertv/asic/asic-zeus.c index 095cbe10ebb9..4a05bb096476 100644 --- a/arch/mips/powertv/asic/asic-zeus.c +++ b/arch/mips/powertv/asic/asic-zeus.c | |||
| @@ -77,7 +77,7 @@ const struct register_map zeus_register_map __initdata = { | |||
| 77 | .int_docsis_en = {.phys = ZEUS_ADDR(0x2828F4)}, | 77 | .int_docsis_en = {.phys = ZEUS_ADDR(0x2828F4)}, |
| 78 | 78 | ||
| 79 | .mips_pll_setup = {.phys = ZEUS_ADDR(0x1a0000)}, | 79 | .mips_pll_setup = {.phys = ZEUS_ADDR(0x1a0000)}, |
| 80 | .usb_fs = {.phys = ZEUS_ADDR(0x1a0018)}, | 80 | .fs432x4b4_usb_ctl = {.phys = ZEUS_ADDR(0x1a0018)}, |
| 81 | .test_bus = {.phys = ZEUS_ADDR(0x1a0238)}, | 81 | .test_bus = {.phys = ZEUS_ADDR(0x1a0238)}, |
| 82 | .crt_spare = {.phys = ZEUS_ADDR(0x1a0090)}, | 82 | .crt_spare = {.phys = ZEUS_ADDR(0x1a0090)}, |
| 83 | .usb2_ohci_int_mask = {.phys = ZEUS_ADDR(0x1e000c)}, | 83 | .usb2_ohci_int_mask = {.phys = ZEUS_ADDR(0x1e000c)}, |
diff --git a/arch/mips/powertv/asic/asic_devices.c b/arch/mips/powertv/asic/asic_devices.c index 9ec523e4dd06..e56fa61b3991 100644 --- a/arch/mips/powertv/asic/asic_devices.c +++ b/arch/mips/powertv/asic/asic_devices.c | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * ASIC Device List Intialization | ||
| 3 | * | 2 | * |
| 4 | * Description: Defines the platform resources for the SA settop. | 3 | * Description: Defines the platform resources for Gaia-based settops. |
| 5 | * | 4 | * |
| 6 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. | 5 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. |
| 7 | * | 6 | * |
| @@ -19,11 +18,6 @@ | |||
| 19 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
| 20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 21 | * | 20 | * |
| 22 | * Author: Ken Eppinett | ||
| 23 | * David Schleef <ds@schleef.org> | ||
| 24 | * | ||
| 25 | * Description: Defines the platform resources for the SA settop. | ||
| 26 | * | ||
| 27 | * NOTE: The bootloader allocates persistent memory at an address which is | 21 | * NOTE: The bootloader allocates persistent memory at an address which is |
| 28 | * 16 MiB below the end of the highest address in KSEG0. All fixed | 22 | * 16 MiB below the end of the highest address in KSEG0. All fixed |
| 29 | * address memory reservations must avoid this region. | 23 | * address memory reservations must avoid this region. |
| @@ -39,7 +33,6 @@ | |||
| 39 | #include <linux/mm.h> | 33 | #include <linux/mm.h> |
| 40 | #include <linux/platform_device.h> | 34 | #include <linux/platform_device.h> |
| 41 | #include <linux/module.h> | 35 | #include <linux/module.h> |
| 42 | #include <linux/gfp.h> | ||
| 43 | #include <asm/page.h> | 36 | #include <asm/page.h> |
| 44 | #include <linux/swap.h> | 37 | #include <linux/swap.h> |
| 45 | #include <linux/highmem.h> | 38 | #include <linux/highmem.h> |
| @@ -74,14 +67,13 @@ unsigned long asic_phy_base; | |||
| 74 | unsigned long asic_base; | 67 | unsigned long asic_base; |
| 75 | EXPORT_SYMBOL(asic_base); /* Exported for testing */ | 68 | EXPORT_SYMBOL(asic_base); /* Exported for testing */ |
| 76 | struct resource *gp_resources; | 69 | struct resource *gp_resources; |
| 77 | static bool usb_configured; | ||
| 78 | 70 | ||
| 79 | /* | 71 | /* |
| 80 | * Don't recommend to use it directly, it is usually used by kernel internally. | 72 | * Don't recommend to use it directly, it is usually used by kernel internally. |
| 81 | * Portable code should be using interfaces such as ioremp, dma_map_single, etc. | 73 | * Portable code should be using interfaces such as ioremp, dma_map_single, etc. |
| 82 | */ | 74 | */ |
| 83 | unsigned long phys_to_bus_offset; | 75 | unsigned long phys_to_dma_offset; |
| 84 | EXPORT_SYMBOL(phys_to_bus_offset); | 76 | EXPORT_SYMBOL(phys_to_dma_offset); |
| 85 | 77 | ||
| 86 | /* | 78 | /* |
| 87 | * | 79 | * |
| @@ -97,101 +89,19 @@ struct resource asic_resource = { | |||
| 97 | }; | 89 | }; |
| 98 | 90 | ||
| 99 | /* | 91 | /* |
| 100 | * | ||
| 101 | * USB Host Resource Definition | ||
| 102 | * | ||
| 103 | */ | ||
| 104 | |||
| 105 | static struct resource ehci_resources[] = { | ||
| 106 | { | ||
| 107 | .parent = &asic_resource, | ||
| 108 | .start = 0, | ||
| 109 | .end = 0xff, | ||
| 110 | .flags = IORESOURCE_MEM, | ||
| 111 | }, | ||
| 112 | { | ||
| 113 | .start = irq_usbehci, | ||
| 114 | .end = irq_usbehci, | ||
| 115 | .flags = IORESOURCE_IRQ, | ||
| 116 | }, | ||
| 117 | }; | ||
| 118 | |||
| 119 | static u64 ehci_dmamask = DMA_BIT_MASK(32); | ||
| 120 | |||
| 121 | static struct platform_device ehci_device = { | ||
| 122 | .name = "powertv-ehci", | ||
| 123 | .id = 0, | ||
| 124 | .num_resources = 2, | ||
| 125 | .resource = ehci_resources, | ||
| 126 | .dev = { | ||
| 127 | .dma_mask = &ehci_dmamask, | ||
| 128 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 129 | }, | ||
| 130 | }; | ||
| 131 | |||
| 132 | static struct resource ohci_resources[] = { | ||
| 133 | { | ||
| 134 | .parent = &asic_resource, | ||
| 135 | .start = 0, | ||
| 136 | .end = 0xff, | ||
| 137 | .flags = IORESOURCE_MEM, | ||
| 138 | }, | ||
| 139 | { | ||
| 140 | .start = irq_usbohci, | ||
| 141 | .end = irq_usbohci, | ||
| 142 | .flags = IORESOURCE_IRQ, | ||
| 143 | }, | ||
| 144 | }; | ||
| 145 | |||
| 146 | static u64 ohci_dmamask = DMA_BIT_MASK(32); | ||
| 147 | |||
| 148 | static struct platform_device ohci_device = { | ||
| 149 | .name = "powertv-ohci", | ||
| 150 | .id = 0, | ||
| 151 | .num_resources = 2, | ||
| 152 | .resource = ohci_resources, | ||
| 153 | .dev = { | ||
| 154 | .dma_mask = &ohci_dmamask, | ||
| 155 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 156 | }, | ||
| 157 | }; | ||
| 158 | |||
| 159 | static struct platform_device *platform_devices[] = { | ||
| 160 | &ehci_device, | ||
| 161 | &ohci_device, | ||
| 162 | }; | ||
| 163 | |||
| 164 | /* | ||
| 165 | * | ||
| 166 | * Platform Configuration and Device Initialization | ||
| 167 | * | ||
| 168 | */ | ||
| 169 | static void __init fs_update(int pe, int md, int sdiv, int disable_div_by_3) | ||
| 170 | { | ||
| 171 | int en_prg, byp, pwr, nsb, val; | ||
| 172 | int sout; | ||
| 173 | |||
| 174 | sout = 1; | ||
| 175 | en_prg = 1; | ||
| 176 | byp = 0; | ||
| 177 | nsb = 1; | ||
| 178 | pwr = 1; | ||
| 179 | |||
| 180 | val = ((sdiv << 29) | (md << 24) | (pe<<8) | (sout<<3) | (byp<<2) | | ||
| 181 | (nsb<<1) | (disable_div_by_3<<5)); | ||
| 182 | |||
| 183 | asic_write(val, usb_fs); | ||
| 184 | asic_write(val | (en_prg<<4), usb_fs); | ||
| 185 | asic_write(val | (en_prg<<4) | pwr, usb_fs); | ||
| 186 | } | ||
| 187 | |||
| 188 | /* | ||
| 189 | * Allow override of bootloader-specified model | 92 | * Allow override of bootloader-specified model |
| 93 | * Returns zero on success, a negative errno value on failure. This parameter | ||
| 94 | * allows overriding of the bootloader-specified model. | ||
| 190 | */ | 95 | */ |
| 191 | static char __initdata cmdline[COMMAND_LINE_SIZE]; | 96 | static char __initdata cmdline[COMMAND_LINE_SIZE]; |
| 192 | 97 | ||
| 193 | #define FORCEFAMILY_PARAM "forcefamily" | 98 | #define FORCEFAMILY_PARAM "forcefamily" |
| 194 | 99 | ||
| 100 | /* | ||
| 101 | * check_forcefamily - check for, and parse, forcefamily command line parameter | ||
| 102 | * @forced_family: Pointer to two-character array in which to store the | ||
| 103 | * value of the forcedfamily parameter, if any. | ||
| 104 | */ | ||
| 195 | static __init int check_forcefamily(unsigned char forced_family[2]) | 105 | static __init int check_forcefamily(unsigned char forced_family[2]) |
| 196 | { | 106 | { |
| 197 | const char *p; | 107 | const char *p; |
| @@ -231,14 +141,10 @@ static __init int check_forcefamily(unsigned char forced_family[2]) | |||
| 231 | */ | 141 | */ |
| 232 | static __init noinline void platform_set_family(void) | 142 | static __init noinline void platform_set_family(void) |
| 233 | { | 143 | { |
| 234 | #define BOOTLDRFAMILY(byte1, byte0) (((byte1) << 8) | (byte0)) | ||
| 235 | |||
| 236 | unsigned char forced_family[2]; | 144 | unsigned char forced_family[2]; |
| 237 | unsigned short bootldr_family; | 145 | unsigned short bootldr_family; |
| 238 | 146 | ||
| 239 | check_forcefamily(forced_family); | 147 | if (check_forcefamily(forced_family) == 0) |
| 240 | |||
| 241 | if (forced_family[0] != '\0' && forced_family[1] != '\0') | ||
| 242 | bootldr_family = BOOTLDRFAMILY(forced_family[0], | 148 | bootldr_family = BOOTLDRFAMILY(forced_family[0], |
| 243 | forced_family[1]); | 149 | forced_family[1]); |
| 244 | else { | 150 | else { |
| @@ -289,6 +195,9 @@ static __init noinline void platform_set_family(void) | |||
| 289 | case BOOTLDRFAMILY('F', '1'): | 195 | case BOOTLDRFAMILY('F', '1'): |
| 290 | platform_family = FAMILY_1500VZF; | 196 | platform_family = FAMILY_1500VZF; |
| 291 | break; | 197 | break; |
| 198 | case BOOTLDRFAMILY('8', '7'): | ||
| 199 | platform_family = FAMILY_8700; | ||
| 200 | break; | ||
| 292 | default: | 201 | default: |
| 293 | platform_family = -1; | 202 | platform_family = -1; |
| 294 | } | 203 | } |
| @@ -301,24 +210,9 @@ unsigned int platform_get_family(void) | |||
| 301 | EXPORT_SYMBOL(platform_get_family); | 210 | EXPORT_SYMBOL(platform_get_family); |
| 302 | 211 | ||
| 303 | /* | 212 | /* |
| 304 | * \brief usb_eye_configure() for optimizing the USB eye on Calliope. | ||
| 305 | * | ||
| 306 | * \param unsigned int value saved to the register. | ||
| 307 | * | ||
| 308 | * \return none | ||
| 309 | * | ||
| 310 | */ | ||
| 311 | static void __init usb_eye_configure(unsigned int value) | ||
| 312 | { | ||
| 313 | asic_write(asic_read(crt_spare) | value, crt_spare); | ||
| 314 | } | ||
| 315 | |||
| 316 | /* | ||
| 317 | * platform_get_asic - determine the ASIC type. | 213 | * platform_get_asic - determine the ASIC type. |
| 318 | * | 214 | * |
| 319 | * \param none | 215 | * Returns the ASIC type, or ASIC_UNKNOWN if unknown |
| 320 | * | ||
| 321 | * \return ASIC type; ASIC_UNKNOWN if none | ||
| 322 | * | 216 | * |
| 323 | */ | 217 | */ |
| 324 | enum asic_type platform_get_asic(void) | 218 | enum asic_type platform_get_asic(void) |
| @@ -328,93 +222,10 @@ enum asic_type platform_get_asic(void) | |||
| 328 | EXPORT_SYMBOL(platform_get_asic); | 222 | EXPORT_SYMBOL(platform_get_asic); |
| 329 | 223 | ||
| 330 | /* | 224 | /* |
| 331 | * platform_configure_usb - usb configuration based on platform type. | 225 | * set_register_map - set ASIC register configuration |
| 332 | * @bcm1_usb2_ctl: value for the BCM1_USB2_CTL register, which is | 226 | * @phys_base: Physical address of the base of the ASIC registers |
| 333 | * quirky | 227 | * @map: Description of key ASIC registers |
| 334 | */ | ||
| 335 | static void __init platform_configure_usb(void) | ||
| 336 | { | ||
| 337 | u32 bcm1_usb2_ctl; | ||
| 338 | |||
| 339 | if (usb_configured) | ||
| 340 | return; | ||
| 341 | |||
| 342 | switch (asic) { | ||
| 343 | case ASIC_ZEUS: | ||
| 344 | case ASIC_CRONUS: | ||
| 345 | case ASIC_CRONUSLITE: | ||
| 346 | fs_update(0x0000, 0x11, 0x02, 0); | ||
| 347 | bcm1_usb2_ctl = 0x803; | ||
| 348 | break; | ||
| 349 | |||
| 350 | case ASIC_CALLIOPE: | ||
| 351 | fs_update(0x0000, 0x11, 0x02, 1); | ||
| 352 | |||
| 353 | switch (platform_family) { | ||
| 354 | case FAMILY_1500VZE: | ||
| 355 | break; | ||
| 356 | |||
| 357 | case FAMILY_1500VZF: | ||
| 358 | usb_eye_configure(0x003c0000); | ||
| 359 | break; | ||
| 360 | |||
| 361 | default: | ||
| 362 | usb_eye_configure(0x00300000); | ||
| 363 | break; | ||
| 364 | } | ||
| 365 | |||
| 366 | bcm1_usb2_ctl = 0x803; | ||
| 367 | break; | ||
| 368 | |||
| 369 | default: | ||
| 370 | pr_err("Unknown ASIC type: %d\n", asic); | ||
| 371 | break; | ||
| 372 | } | ||
| 373 | |||
| 374 | /* turn on USB power */ | ||
| 375 | asic_write(0, usb2_strap); | ||
| 376 | /* Enable all OHCI interrupts */ | ||
| 377 | asic_write(bcm1_usb2_ctl, usb2_control); | ||
| 378 | /* USB2_STBUS_OBC store32/load32 */ | ||
| 379 | asic_write(3, usb2_stbus_obc); | ||
| 380 | /* USB2_STBUS_MESS_SIZE 2 packets */ | ||
| 381 | asic_write(1, usb2_stbus_mess_size); | ||
| 382 | /* USB2_STBUS_CHUNK_SIZE 2 packets */ | ||
| 383 | asic_write(1, usb2_stbus_chunk_size); | ||
| 384 | |||
| 385 | usb_configured = true; | ||
| 386 | } | ||
| 387 | |||
| 388 | /* | ||
| 389 | * Set up the USB EHCI interface | ||
| 390 | */ | 228 | */ |
| 391 | void platform_configure_usb_ehci() | ||
| 392 | { | ||
| 393 | platform_configure_usb(); | ||
| 394 | } | ||
| 395 | |||
| 396 | /* | ||
| 397 | * Set up the USB OHCI interface | ||
| 398 | */ | ||
| 399 | void platform_configure_usb_ohci() | ||
| 400 | { | ||
| 401 | platform_configure_usb(); | ||
| 402 | } | ||
| 403 | |||
| 404 | /* | ||
| 405 | * Shut the USB EHCI interface down--currently a NOP | ||
| 406 | */ | ||
| 407 | void platform_unconfigure_usb_ehci() | ||
| 408 | { | ||
| 409 | } | ||
| 410 | |||
| 411 | /* | ||
| 412 | * Shut the USB OHCI interface down--currently a NOP | ||
| 413 | */ | ||
| 414 | void platform_unconfigure_usb_ohci() | ||
| 415 | { | ||
| 416 | } | ||
| 417 | |||
| 418 | static void __init set_register_map(unsigned long phys_base, | 229 | static void __init set_register_map(unsigned long phys_base, |
| 419 | const struct register_map *map) | 230 | const struct register_map *map) |
| 420 | { | 231 | { |
| @@ -526,6 +337,15 @@ void __init configure_platform(void) | |||
| 526 | "DVR_CAPABLE\n"); | 337 | "DVR_CAPABLE\n"); |
| 527 | break; | 338 | break; |
| 528 | 339 | ||
| 340 | case FAMILY_8700: | ||
| 341 | platform_features = FFS_CAPABLE | PCIE_CAPABLE; | ||
| 342 | asic = ASIC_GAIA; | ||
| 343 | set_register_map(GAIA_IO_BASE, &gaia_register_map); | ||
| 344 | gp_resources = dvr_gaia_resources; | ||
| 345 | |||
| 346 | pr_info("Platform: 8700 - GAIA, DVR_CAPABLE\n"); | ||
| 347 | break; | ||
| 348 | |||
| 529 | default: | 349 | default: |
| 530 | pr_crit("Platform: UNKNOWN PLATFORM\n"); | 350 | pr_crit("Platform: UNKNOWN PLATFORM\n"); |
| 531 | break; | 351 | break; |
| @@ -533,10 +353,10 @@ void __init configure_platform(void) | |||
| 533 | 353 | ||
| 534 | switch (asic) { | 354 | switch (asic) { |
| 535 | case ASIC_ZEUS: | 355 | case ASIC_ZEUS: |
| 536 | phys_to_bus_offset = 0x30000000; | 356 | phys_to_dma_offset = 0x30000000; |
| 537 | break; | 357 | break; |
| 538 | case ASIC_CALLIOPE: | 358 | case ASIC_CALLIOPE: |
| 539 | phys_to_bus_offset = 0x10000000; | 359 | phys_to_dma_offset = 0x10000000; |
| 540 | break; | 360 | break; |
| 541 | case ASIC_CRONUSLITE: | 361 | case ASIC_CRONUSLITE: |
| 542 | /* Fall through */ | 362 | /* Fall through */ |
| @@ -546,42 +366,16 @@ void __init configure_platform(void) | |||
| 546 | * 0x2XXXXXXX. If 0x10000000 aliases into 0x60000000- | 366 | * 0x2XXXXXXX. If 0x10000000 aliases into 0x60000000- |
| 547 | * 0x6XXXXXXX, the offset should be 0x50000000, not 0x10000000. | 367 | * 0x6XXXXXXX, the offset should be 0x50000000, not 0x10000000. |
| 548 | */ | 368 | */ |
| 549 | phys_to_bus_offset = 0x10000000; | 369 | phys_to_dma_offset = 0x10000000; |
| 550 | break; | 370 | break; |
| 551 | default: | 371 | default: |
| 552 | phys_to_bus_offset = 0x00000000; | 372 | phys_to_dma_offset = 0x00000000; |
| 553 | break; | 373 | break; |
| 554 | } | 374 | } |
| 555 | } | 375 | } |
| 556 | 376 | ||
| 557 | /** | ||
| 558 | * platform_devices_init - sets up USB device resourse. | ||
| 559 | */ | ||
| 560 | static int __init platform_devices_init(void) | ||
| 561 | { | ||
| 562 | pr_notice("%s: ----- Initializing USB resources -----\n", __func__); | ||
| 563 | |||
| 564 | asic_resource.start = asic_phy_base; | ||
| 565 | asic_resource.end += asic_resource.start; | ||
| 566 | |||
| 567 | ehci_resources[0].start = asic_reg_phys_addr(ehci_hcapbase); | ||
| 568 | ehci_resources[0].end += ehci_resources[0].start; | ||
| 569 | |||
| 570 | ohci_resources[0].start = asic_reg_phys_addr(ohci_hc_revision); | ||
| 571 | ohci_resources[0].end += ohci_resources[0].start; | ||
| 572 | |||
| 573 | set_io_port_base(0); | ||
| 574 | |||
| 575 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | ||
| 576 | |||
| 577 | return 0; | ||
| 578 | } | ||
| 579 | |||
| 580 | arch_initcall(platform_devices_init); | ||
| 581 | |||
| 582 | /* | 377 | /* |
| 583 | * | 378 | * RESOURCE ALLOCATION |
| 584 | * BOOTMEM ALLOCATION | ||
| 585 | * | 379 | * |
| 586 | */ | 380 | */ |
| 587 | /* | 381 | /* |
| @@ -603,7 +397,7 @@ void __init platform_alloc_bootmem(void) | |||
| 603 | int size = gp_resources[i].end - gp_resources[i].start + 1; | 397 | int size = gp_resources[i].end - gp_resources[i].start + 1; |
| 604 | if ((gp_resources[i].start != 0) && | 398 | if ((gp_resources[i].start != 0) && |
| 605 | ((gp_resources[i].flags & IORESOURCE_MEM) != 0)) { | 399 | ((gp_resources[i].flags & IORESOURCE_MEM) != 0)) { |
| 606 | reserve_bootmem(bus_to_phys(gp_resources[i].start), | 400 | reserve_bootmem(dma_to_phys(gp_resources[i].start), |
| 607 | size, 0); | 401 | size, 0); |
| 608 | total += gp_resources[i].end - | 402 | total += gp_resources[i].end - |
| 609 | gp_resources[i].start + 1; | 403 | gp_resources[i].start + 1; |
| @@ -627,7 +421,7 @@ void __init platform_alloc_bootmem(void) | |||
| 627 | 421 | ||
| 628 | else { | 422 | else { |
| 629 | gp_resources[i].start = | 423 | gp_resources[i].start = |
| 630 | phys_to_bus(virt_to_phys(mem)); | 424 | phys_to_dma(virt_to_phys(mem)); |
| 631 | gp_resources[i].end = | 425 | gp_resources[i].end = |
| 632 | gp_resources[i].start + size - 1; | 426 | gp_resources[i].start + size - 1; |
| 633 | total += size; | 427 | total += size; |
| @@ -691,7 +485,7 @@ static void __init pmem_setup_resource(void) | |||
| 691 | if (resource && pmemaddr && pmemlen) { | 485 | if (resource && pmemaddr && pmemlen) { |
| 692 | /* The address provided by bootloader is in kseg0. Convert to | 486 | /* The address provided by bootloader is in kseg0. Convert to |
| 693 | * a bus address. */ | 487 | * a bus address. */ |
| 694 | resource->start = phys_to_bus(pmemaddr - 0x80000000); | 488 | resource->start = phys_to_dma(pmemaddr - 0x80000000); |
| 695 | resource->end = resource->start + pmemlen - 1; | 489 | resource->end = resource->start + pmemlen - 1; |
| 696 | 490 | ||
| 697 | pr_info("persistent memory: start=0x%x end=0x%x\n", | 491 | pr_info("persistent memory: start=0x%x end=0x%x\n", |
diff --git a/arch/mips/powertv/asic/prealloc-gaia.c b/arch/mips/powertv/asic/prealloc-gaia.c new file mode 100644 index 000000000000..8ac8c7aeb986 --- /dev/null +++ b/arch/mips/powertv/asic/prealloc-gaia.c | |||
| @@ -0,0 +1,589 @@ | |||
| 1 | /* | ||
| 2 | * Memory pre-allocations for Gaia boxes. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. | ||
| 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 | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | * | ||
| 20 | * Author: David VomLehn | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/init.h> | ||
| 24 | #include <asm/mach-powertv/asic.h> | ||
| 25 | |||
| 26 | /* | ||
| 27 | * DVR_CAPABLE GAIA RESOURCES | ||
| 28 | */ | ||
| 29 | struct resource dvr_gaia_resources[] __initdata = { | ||
| 30 | /* | ||
| 31 | * | ||
| 32 | * VIDEO1 / LX1 | ||
| 33 | * | ||
| 34 | */ | ||
| 35 | { | ||
| 36 | .name = "ST231aImage", /* Delta-Mu 1 image and ram */ | ||
| 37 | .start = 0x24000000, | ||
| 38 | .end = 0x241FFFFF, /* 2MiB */ | ||
| 39 | .flags = IORESOURCE_MEM, | ||
| 40 | }, | ||
| 41 | { | ||
| 42 | .name = "ST231aMonitor", /* 8KiB block ST231a monitor */ | ||
| 43 | .start = 0x24200000, | ||
| 44 | .end = 0x24201FFF, | ||
| 45 | .flags = IORESOURCE_MEM, | ||
| 46 | }, | ||
| 47 | { | ||
| 48 | .name = "MediaMemory1", | ||
| 49 | .start = 0x24202000, | ||
| 50 | .end = 0x25FFFFFF, /*~29.9MiB (32MiB - (2MiB + 8KiB)) */ | ||
| 51 | .flags = IORESOURCE_MEM, | ||
| 52 | }, | ||
| 53 | /* | ||
| 54 | * | ||
| 55 | * VIDEO2 / LX2 | ||
| 56 | * | ||
| 57 | */ | ||
| 58 | { | ||
| 59 | .name = "ST231bImage", /* Delta-Mu 2 image and ram */ | ||
| 60 | .start = 0x60000000, | ||
| 61 | .end = 0x601FFFFF, /* 2MiB */ | ||
| 62 | .flags = IORESOURCE_IO, | ||
| 63 | }, | ||
| 64 | { | ||
| 65 | .name = "ST231bMonitor", /* 8KiB block ST231b monitor */ | ||
| 66 | .start = 0x60200000, | ||
| 67 | .end = 0x60201FFF, | ||
| 68 | .flags = IORESOURCE_IO, | ||
| 69 | }, | ||
| 70 | { | ||
| 71 | .name = "MediaMemory2", | ||
| 72 | .start = 0x60202000, | ||
| 73 | .end = 0x61FFFFFF, /*~29.9MiB (32MiB - (2MiB + 8KiB)) */ | ||
| 74 | .flags = IORESOURCE_IO, | ||
| 75 | }, | ||
| 76 | /* | ||
| 77 | * | ||
| 78 | * Sysaudio Driver | ||
| 79 | * | ||
| 80 | * This driver requires: | ||
| 81 | * | ||
| 82 | * Arbitrary Based Buffers: | ||
| 83 | * DSP_Image_Buff - DSP code and data images (1MB) | ||
| 84 | * ADSC_CPU_PCM_Buff - ADSC CPU PCM buffer (40KB) | ||
| 85 | * ADSC_AUX_Buff - ADSC AUX buffer (16KB) | ||
| 86 | * ADSC_Main_Buff - ADSC Main buffer (16KB) | ||
| 87 | * | ||
| 88 | */ | ||
| 89 | { | ||
| 90 | .name = "DSP_Image_Buff", | ||
| 91 | .start = 0x00000000, | ||
| 92 | .end = 0x000FFFFF, | ||
| 93 | .flags = IORESOURCE_MEM, | ||
| 94 | }, | ||
| 95 | { | ||
| 96 | .name = "ADSC_CPU_PCM_Buff", | ||
| 97 | .start = 0x00000000, | ||
| 98 | .end = 0x00009FFF, | ||
| 99 | .flags = IORESOURCE_MEM, | ||
| 100 | }, | ||
| 101 | { | ||
| 102 | .name = "ADSC_AUX_Buff", | ||
| 103 | .start = 0x00000000, | ||
| 104 | .end = 0x00003FFF, | ||
| 105 | .flags = IORESOURCE_MEM, | ||
| 106 | }, | ||
| 107 | { | ||
| 108 | .name = "ADSC_Main_Buff", | ||
| 109 | .start = 0x00000000, | ||
| 110 | .end = 0x00003FFF, | ||
| 111 | .flags = IORESOURCE_MEM, | ||
| 112 | }, | ||
| 113 | /* | ||
| 114 | * | ||
| 115 | * STAVEM driver/STAPI | ||
| 116 | * | ||
| 117 | * This driver requires: | ||
| 118 | * | ||
| 119 | * Arbitrary Based Buffers: | ||
| 120 | * This memory area is used for allocating buffers for Video decoding | ||
| 121 | * purposes. Allocation/De-allocation within this buffer is managed | ||
| 122 | * by the STAVMEM driver of the STAPI. They could be Decimated | ||
| 123 | * Picture Buffers, Intermediate Buffers, as deemed necessary for | ||
| 124 | * video decoding purposes, for any video decoders on Zeus. | ||
| 125 | * | ||
| 126 | */ | ||
| 127 | { | ||
| 128 | .name = "AVMEMPartition0", | ||
| 129 | .start = 0x63580000, | ||
| 130 | .end = 0x64180000 - 1, /* 12 MB total */ | ||
| 131 | .flags = IORESOURCE_IO, | ||
| 132 | }, | ||
| 133 | /* | ||
| 134 | * | ||
| 135 | * DOCSIS Subsystem | ||
| 136 | * | ||
| 137 | * This driver requires: | ||
| 138 | * | ||
| 139 | * Arbitrary Based Buffers: | ||
| 140 | * Docsis - | ||
| 141 | * | ||
| 142 | */ | ||
| 143 | { | ||
| 144 | .name = "Docsis", | ||
| 145 | .start = 0x62000000, | ||
| 146 | .end = 0x62700000 - 1, /* 7 MB total */ | ||
| 147 | .flags = IORESOURCE_IO, | ||
| 148 | }, | ||
| 149 | /* | ||
| 150 | * | ||
| 151 | * GHW HAL Driver | ||
| 152 | * | ||
| 153 | * This driver requires: | ||
| 154 | * | ||
| 155 | * Arbitrary Based Buffers: | ||
| 156 | * GraphicsHeap - PowerTV Graphics Heap | ||
| 157 | * | ||
| 158 | */ | ||
| 159 | { | ||
| 160 | .name = "GraphicsHeap", | ||
| 161 | .start = 0x62700000, | ||
| 162 | .end = 0x63500000 - 1, /* 14 MB total */ | ||
| 163 | .flags = IORESOURCE_IO, | ||
| 164 | }, | ||
| 165 | /* | ||
| 166 | * | ||
| 167 | * multi com buffer area | ||
| 168 | * | ||
| 169 | * This driver requires: | ||
| 170 | * | ||
| 171 | * Arbitrary Based Buffers: | ||
| 172 | * Docsis - | ||
| 173 | * | ||
| 174 | */ | ||
| 175 | { | ||
| 176 | .name = "MulticomSHM", | ||
| 177 | .start = 0x26000000, | ||
| 178 | .end = 0x26020000 - 1, | ||
| 179 | .flags = IORESOURCE_MEM, | ||
| 180 | }, | ||
| 181 | /* | ||
| 182 | * | ||
| 183 | * DMA Ring buffer | ||
| 184 | * | ||
| 185 | * This driver requires: | ||
| 186 | * | ||
| 187 | * Arbitrary Based Buffers: | ||
| 188 | * Docsis - | ||
| 189 | * | ||
| 190 | */ | ||
| 191 | { | ||
| 192 | .name = "BMM_Buffer", | ||
| 193 | .start = 0x00000000, | ||
| 194 | .end = 0x00280000 - 1, | ||
| 195 | .flags = IORESOURCE_MEM, | ||
| 196 | }, | ||
| 197 | /* | ||
| 198 | * | ||
| 199 | * Display bins buffer for unit0 | ||
| 200 | * | ||
| 201 | * This driver requires: | ||
| 202 | * | ||
| 203 | * Arbitrary Based Buffers: | ||
| 204 | * Display Bins for unit0 | ||
| 205 | * | ||
| 206 | */ | ||
| 207 | { | ||
| 208 | .name = "DisplayBins0", | ||
| 209 | .start = 0x00000000, | ||
| 210 | .end = 0x00000FFF, /* 4 KB total */ | ||
| 211 | .flags = IORESOURCE_MEM, | ||
| 212 | }, | ||
| 213 | /* | ||
| 214 | * | ||
| 215 | * Display bins buffer | ||
| 216 | * | ||
| 217 | * This driver requires: | ||
| 218 | * | ||
| 219 | * Arbitrary Based Buffers: | ||
| 220 | * Display Bins for unit1 | ||
| 221 | * | ||
| 222 | */ | ||
| 223 | { | ||
| 224 | .name = "DisplayBins1", | ||
| 225 | .start = 0x64AD4000, | ||
| 226 | .end = 0x64AD5000 - 1, /* 4 KB total */ | ||
| 227 | .flags = IORESOURCE_IO, | ||
| 228 | }, | ||
| 229 | /* | ||
| 230 | * | ||
| 231 | * ITFS | ||
| 232 | * | ||
| 233 | * This driver requires: | ||
| 234 | * | ||
| 235 | * Arbitrary Based Buffers: | ||
| 236 | * Docsis - | ||
| 237 | * | ||
| 238 | */ | ||
| 239 | { | ||
| 240 | .name = "ITFS", | ||
| 241 | .start = 0x64180000, | ||
| 242 | /* 815,104 bytes each for 2 ITFS partitions. */ | ||
| 243 | .end = 0x6430DFFF, | ||
| 244 | .flags = IORESOURCE_IO, | ||
| 245 | }, | ||
| 246 | /* | ||
| 247 | * | ||
| 248 | * AVFS | ||
| 249 | * | ||
| 250 | * This driver requires: | ||
| 251 | * | ||
| 252 | * Arbitrary Based Buffers: | ||
| 253 | * Docsis - | ||
| 254 | * | ||
| 255 | */ | ||
| 256 | { | ||
| 257 | .name = "AvfsDmaMem", | ||
| 258 | .start = 0x6430E000, | ||
| 259 | /* (945K * 8) = (128K *3) 5 playbacks / 3 server */ | ||
| 260 | .end = 0x64AD0000 - 1, | ||
| 261 | .flags = IORESOURCE_IO, | ||
| 262 | }, | ||
| 263 | { | ||
| 264 | .name = "AvfsFileSys", | ||
| 265 | .start = 0x64AD0000, | ||
| 266 | .end = 0x64AD1000 - 1, /* 4K */ | ||
| 267 | .flags = IORESOURCE_IO, | ||
| 268 | }, | ||
| 269 | /* | ||
| 270 | * | ||
| 271 | * Smartcard | ||
| 272 | * | ||
| 273 | * This driver requires: | ||
| 274 | * | ||
| 275 | * Arbitrary Based Buffers: | ||
| 276 | * Read and write buffers for Internal/External cards | ||
| 277 | * | ||
| 278 | */ | ||
| 279 | { | ||
| 280 | .name = "SmartCardInfo", | ||
| 281 | .start = 0x64AD1000, | ||
| 282 | .end = 0x64AD3800 - 1, | ||
| 283 | .flags = IORESOURCE_IO, | ||
| 284 | }, | ||
| 285 | /* | ||
| 286 | * | ||
| 287 | * KAVNET | ||
| 288 | * NP Reset Vector - must be of the form xxCxxxxx | ||
| 289 | * NP Image - must be video bank 1 | ||
| 290 | * NP IPC - must be video bank 2 | ||
| 291 | */ | ||
| 292 | { | ||
| 293 | .name = "NP_Reset_Vector", | ||
| 294 | .start = 0x27c00000, | ||
| 295 | .end = 0x27c01000 - 1, | ||
| 296 | .flags = IORESOURCE_MEM, | ||
| 297 | }, | ||
| 298 | { | ||
| 299 | .name = "NP_Image", | ||
| 300 | .start = 0x27020000, | ||
| 301 | .end = 0x27060000 - 1, | ||
| 302 | .flags = IORESOURCE_MEM, | ||
| 303 | }, | ||
| 304 | { | ||
| 305 | .name = "NP_IPC", | ||
| 306 | .start = 0x63500000, | ||
| 307 | .end = 0x63580000 - 1, | ||
| 308 | .flags = IORESOURCE_IO, | ||
| 309 | }, | ||
| 310 | /* | ||
| 311 | * Add other resources here | ||
| 312 | */ | ||
| 313 | { }, | ||
| 314 | }; | ||
| 315 | |||
| 316 | /* | ||
| 317 | * NON_DVR_CAPABLE GAIA RESOURCES | ||
| 318 | */ | ||
| 319 | struct resource non_dvr_gaia_resources[] __initdata = { | ||
| 320 | /* | ||
| 321 | * | ||
| 322 | * VIDEO1 / LX1 | ||
| 323 | * | ||
| 324 | */ | ||
| 325 | { | ||
| 326 | .name = "ST231aImage", /* Delta-Mu 1 image and ram */ | ||
| 327 | .start = 0x24000000, | ||
| 328 | .end = 0x241FFFFF, /* 2MiB */ | ||
| 329 | .flags = IORESOURCE_MEM, | ||
| 330 | }, | ||
| 331 | { | ||
| 332 | .name = "ST231aMonitor", /* 8KiB block ST231a monitor */ | ||
| 333 | .start = 0x24200000, | ||
| 334 | .end = 0x24201FFF, | ||
| 335 | .flags = IORESOURCE_MEM, | ||
| 336 | }, | ||
| 337 | { | ||
| 338 | .name = "MediaMemory1", | ||
| 339 | .start = 0x24202000, | ||
| 340 | .end = 0x25FFFFFF, /*~29.9MiB (32MiB - (2MiB + 8KiB)) */ | ||
| 341 | .flags = IORESOURCE_MEM, | ||
| 342 | }, | ||
| 343 | /* | ||
| 344 | * | ||
| 345 | * VIDEO2 / LX2 | ||
| 346 | * | ||
| 347 | */ | ||
| 348 | { | ||
| 349 | .name = "ST231bImage", /* Delta-Mu 2 image and ram */ | ||
| 350 | .start = 0x60000000, | ||
| 351 | .end = 0x601FFFFF, /* 2MiB */ | ||
| 352 | .flags = IORESOURCE_IO, | ||
| 353 | }, | ||
| 354 | { | ||
| 355 | .name = "ST231bMonitor", /* 8KiB block ST231b monitor */ | ||
| 356 | .start = 0x60200000, | ||
| 357 | .end = 0x60201FFF, | ||
| 358 | .flags = IORESOURCE_IO, | ||
| 359 | }, | ||
| 360 | { | ||
| 361 | .name = "MediaMemory2", | ||
| 362 | .start = 0x60202000, | ||
| 363 | .end = 0x61FFFFFF, /*~29.9MiB (32MiB - (2MiB + 8KiB)) */ | ||
| 364 | .flags = IORESOURCE_IO, | ||
| 365 | }, | ||
| 366 | /* | ||
| 367 | * | ||
| 368 | * Sysaudio Driver | ||
| 369 | * | ||
| 370 | * This driver requires: | ||
| 371 | * | ||
| 372 | * Arbitrary Based Buffers: | ||
| 373 | * DSP_Image_Buff - DSP code and data images (1MB) | ||
| 374 | * ADSC_CPU_PCM_Buff - ADSC CPU PCM buffer (40KB) | ||
| 375 | * ADSC_AUX_Buff - ADSC AUX buffer (16KB) | ||
| 376 | * ADSC_Main_Buff - ADSC Main buffer (16KB) | ||
| 377 | * | ||
| 378 | */ | ||
| 379 | { | ||
| 380 | .name = "DSP_Image_Buff", | ||
| 381 | .start = 0x00000000, | ||
| 382 | .end = 0x000FFFFF, | ||
| 383 | .flags = IORESOURCE_MEM, | ||
| 384 | }, | ||
| 385 | { | ||
| 386 | .name = "ADSC_CPU_PCM_Buff", | ||
| 387 | .start = 0x00000000, | ||
| 388 | .end = 0x00009FFF, | ||
| 389 | .flags = IORESOURCE_MEM, | ||
| 390 | }, | ||
| 391 | { | ||
| 392 | .name = "ADSC_AUX_Buff", | ||
| 393 | .start = 0x00000000, | ||
| 394 | .end = 0x00003FFF, | ||
| 395 | .flags = IORESOURCE_MEM, | ||
| 396 | }, | ||
| 397 | { | ||
| 398 | .name = "ADSC_Main_Buff", | ||
| 399 | .start = 0x00000000, | ||
| 400 | .end = 0x00003FFF, | ||
| 401 | .flags = IORESOURCE_MEM, | ||
| 402 | }, | ||
| 403 | /* | ||
| 404 | * | ||
| 405 | * STAVEM driver/STAPI | ||
| 406 | * | ||
| 407 | * This driver requires: | ||
| 408 | * | ||
| 409 | * Arbitrary Based Buffers: | ||
| 410 | * This memory area is used for allocating buffers for Video decoding | ||
| 411 | * purposes. Allocation/De-allocation within this buffer is managed | ||
| 412 | * by the STAVMEM driver of the STAPI. They could be Decimated | ||
| 413 | * Picture Buffers, Intermediate Buffers, as deemed necessary for | ||
| 414 | * video decoding purposes, for any video decoders on Zeus. | ||
| 415 | * | ||
| 416 | */ | ||
| 417 | { | ||
| 418 | .name = "AVMEMPartition0", | ||
| 419 | .start = 0x63580000, | ||
| 420 | .end = 0x64180000 - 1, /* 12 MB total */ | ||
| 421 | .flags = IORESOURCE_IO, | ||
| 422 | }, | ||
| 423 | /* | ||
| 424 | * | ||
| 425 | * DOCSIS Subsystem | ||
| 426 | * | ||
| 427 | * This driver requires: | ||
| 428 | * | ||
| 429 | * Arbitrary Based Buffers: | ||
| 430 | * Docsis - | ||
| 431 | * | ||
| 432 | */ | ||
| 433 | { | ||
| 434 | .name = "Docsis", | ||
| 435 | .start = 0x62000000, | ||
| 436 | .end = 0x62700000 - 1, /* 7 MB total */ | ||
| 437 | .flags = IORESOURCE_IO, | ||
| 438 | }, | ||
| 439 | /* | ||
| 440 | * | ||
| 441 | * GHW HAL Driver | ||
| 442 | * | ||
| 443 | * This driver requires: | ||
| 444 | * | ||
| 445 | * Arbitrary Based Buffers: | ||
| 446 | * GraphicsHeap - PowerTV Graphics Heap | ||
| 447 | * | ||
| 448 | */ | ||
| 449 | { | ||
| 450 | .name = "GraphicsHeap", | ||
| 451 | .start = 0x62700000, | ||
| 452 | .end = 0x63500000 - 1, /* 14 MB total */ | ||
| 453 | .flags = IORESOURCE_IO, | ||
| 454 | }, | ||
| 455 | /* | ||
| 456 | * | ||
| 457 | * multi com buffer area | ||
| 458 | * | ||
| 459 | * This driver requires: | ||
| 460 | * | ||
| 461 | * Arbitrary Based Buffers: | ||
| 462 | * Docsis - | ||
| 463 | * | ||
| 464 | */ | ||
| 465 | { | ||
| 466 | .name = "MulticomSHM", | ||
| 467 | .start = 0x26000000, | ||
| 468 | .end = 0x26020000 - 1, | ||
| 469 | .flags = IORESOURCE_MEM, | ||
| 470 | }, | ||
| 471 | /* | ||
| 472 | * | ||
| 473 | * DMA Ring buffer | ||
| 474 | * | ||
| 475 | * This driver requires: | ||
| 476 | * | ||
| 477 | * Arbitrary Based Buffers: | ||
| 478 | * Docsis - | ||
| 479 | * | ||
| 480 | */ | ||
| 481 | { | ||
| 482 | .name = "BMM_Buffer", | ||
| 483 | .start = 0x00000000, | ||
| 484 | .end = 0x000AA000 - 1, | ||
| 485 | .flags = IORESOURCE_MEM, | ||
| 486 | }, | ||
| 487 | /* | ||
| 488 | * | ||
| 489 | * Display bins buffer for unit0 | ||
| 490 | * | ||
| 491 | * This driver requires: | ||
| 492 | * | ||
| 493 | * Arbitrary Based Buffers: | ||
| 494 | * Display Bins for unit0 | ||
| 495 | * | ||
| 496 | */ | ||
| 497 | { | ||
| 498 | .name = "DisplayBins0", | ||
| 499 | .start = 0x00000000, | ||
| 500 | .end = 0x00000FFF, /* 4 KB total */ | ||
| 501 | .flags = IORESOURCE_MEM, | ||
| 502 | }, | ||
| 503 | /* | ||
| 504 | * | ||
| 505 | * Display bins buffer | ||
| 506 | * | ||
| 507 | * This driver requires: | ||
| 508 | * | ||
| 509 | * Arbitrary Based Buffers: | ||
| 510 | * Display Bins for unit1 | ||
| 511 | * | ||
| 512 | */ | ||
| 513 | { | ||
| 514 | .name = "DisplayBins1", | ||
| 515 | .start = 0x64AD4000, | ||
| 516 | .end = 0x64AD5000 - 1, /* 4 KB total */ | ||
| 517 | .flags = IORESOURCE_IO, | ||
| 518 | }, | ||
| 519 | /* | ||
| 520 | * | ||
| 521 | * AVFS: player HAL memory | ||
| 522 | * | ||
| 523 | * | ||
| 524 | */ | ||
| 525 | { | ||
| 526 | .name = "AvfsDmaMem", | ||
| 527 | .start = 0x6430E000, | ||
| 528 | .end = 0x645D2C00 - 1, /* 945K * 3 for playback */ | ||
| 529 | .flags = IORESOURCE_IO, | ||
| 530 | }, | ||
| 531 | /* | ||
| 532 | * | ||
| 533 | * PMEM | ||
| 534 | * | ||
| 535 | * This driver requires: | ||
| 536 | * | ||
| 537 | * Arbitrary Based Buffers: | ||
| 538 | * Persistent memory for diagnostics. | ||
| 539 | * | ||
| 540 | */ | ||
| 541 | { | ||
| 542 | .name = "DiagPersistentMemory", | ||
| 543 | .start = 0x00000000, | ||
| 544 | .end = 0x10000 - 1, | ||
| 545 | .flags = IORESOURCE_MEM, | ||
| 546 | }, | ||
| 547 | /* | ||
| 548 | * | ||
| 549 | * Smartcard | ||
| 550 | * | ||
| 551 | * This driver requires: | ||
| 552 | * | ||
| 553 | * Arbitrary Based Buffers: | ||
| 554 | * Read and write buffers for Internal/External cards | ||
| 555 | * | ||
| 556 | */ | ||
| 557 | { | ||
| 558 | .name = "SmartCardInfo", | ||
| 559 | .start = 0x64AD1000, | ||
| 560 | .end = 0x64AD3800 - 1, | ||
| 561 | .flags = IORESOURCE_IO, | ||
| 562 | }, | ||
| 563 | /* | ||
| 564 | * | ||
| 565 | * KAVNET | ||
| 566 | * NP Reset Vector - must be of the form xxCxxxxx | ||
| 567 | * NP Image - must be video bank 1 | ||
| 568 | * NP IPC - must be video bank 2 | ||
| 569 | */ | ||
| 570 | { | ||
| 571 | .name = "NP_Reset_Vector", | ||
| 572 | .start = 0x27c00000, | ||
| 573 | .end = 0x27c01000 - 1, | ||
| 574 | .flags = IORESOURCE_MEM, | ||
| 575 | }, | ||
| 576 | { | ||
| 577 | .name = "NP_Image", | ||
| 578 | .start = 0x27020000, | ||
| 579 | .end = 0x27060000 - 1, | ||
| 580 | .flags = IORESOURCE_MEM, | ||
| 581 | }, | ||
| 582 | { | ||
| 583 | .name = "NP_IPC", | ||
| 584 | .start = 0x63500000, | ||
| 585 | .end = 0x63580000 - 1, | ||
| 586 | .flags = IORESOURCE_IO, | ||
| 587 | }, | ||
| 588 | { }, | ||
| 589 | }; | ||
diff --git a/arch/mips/powertv/init.c b/arch/mips/powertv/init.c index 0afe227f1d0a..83552288e802 100644 --- a/arch/mips/powertv/init.c +++ b/arch/mips/powertv/init.c | |||
| @@ -117,8 +117,10 @@ void __init prom_init(void) | |||
| 117 | board_nmi_handler_setup = mips_nmi_setup; | 117 | board_nmi_handler_setup = mips_nmi_setup; |
| 118 | board_ejtag_handler_setup = mips_ejtag_setup; | 118 | board_ejtag_handler_setup = mips_ejtag_setup; |
| 119 | 119 | ||
| 120 | if (prom_argc == 1) | 120 | if (prom_argc == 1) { |
| 121 | strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE); | ||
| 121 | strlcat(arcs_cmdline, prom_argv, COMMAND_LINE_SIZE); | 122 | strlcat(arcs_cmdline, prom_argv, COMMAND_LINE_SIZE); |
| 123 | } | ||
| 122 | 124 | ||
| 123 | configure_platform(); | 125 | configure_platform(); |
| 124 | prom_meminit(); | 126 | prom_meminit(); |
diff --git a/arch/mips/powertv/ioremap.c b/arch/mips/powertv/ioremap.c new file mode 100644 index 000000000000..a77c6f62fe23 --- /dev/null +++ b/arch/mips/powertv/ioremap.c | |||
| @@ -0,0 +1,136 @@ | |||
| 1 | /* | ||
| 2 | * ioremap.c | ||
| 3 | * | ||
| 4 | * Support for mapping between dma_addr_t values a phys_addr_t values. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 21 | * | ||
| 22 | * Author: David VomLehn <dvomlehn@cisco.com> | ||
| 23 | * | ||
| 24 | * Description: Defines the platform resources for the SA settop. | ||
| 25 | * | ||
| 26 | * NOTE: The bootloader allocates persistent memory at an address which is | ||
| 27 | * 16 MiB below the end of the highest address in KSEG0. All fixed | ||
| 28 | * address memory reservations must avoid this region. | ||
| 29 | */ | ||
| 30 | |||
| 31 | #include <linux/kernel.h> | ||
| 32 | #include <linux/module.h> | ||
| 33 | |||
| 34 | #include <asm/mach-powertv/ioremap.h> | ||
| 35 | |||
| 36 | /* | ||
| 37 | * Define the sizes of and masks for grains in physical and DMA space. The | ||
| 38 | * values are the same but the types are not. | ||
| 39 | */ | ||
| 40 | #define IOR_PHYS_GRAIN ((phys_addr_t) 1 << IOR_LSBITS) | ||
| 41 | #define IOR_PHYS_GRAIN_MASK (IOR_PHYS_GRAIN - 1) | ||
| 42 | |||
| 43 | #define IOR_DMA_GRAIN ((dma_addr_t) 1 << IOR_LSBITS) | ||
| 44 | #define IOR_DMA_GRAIN_MASK (IOR_DMA_GRAIN - 1) | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Values that, when accessed by an index derived from a phys_addr_t and | ||
| 48 | * added to phys_addr_t value, yield a DMA address | ||
| 49 | */ | ||
| 50 | struct ior_phys_to_dma _ior_phys_to_dma[IOR_NUM_PHYS_TO_DMA]; | ||
| 51 | EXPORT_SYMBOL(_ior_phys_to_dma); | ||
| 52 | |||
| 53 | /* | ||
| 54 | * Values that, when accessed by an index derived from a dma_addr_t and | ||
| 55 | * added to that dma_addr_t value, yield a physical address | ||
| 56 | */ | ||
| 57 | struct ior_dma_to_phys _ior_dma_to_phys[IOR_NUM_DMA_TO_PHYS]; | ||
| 58 | EXPORT_SYMBOL(_ior_dma_to_phys); | ||
| 59 | |||
| 60 | /** | ||
| 61 | * setup_dma_to_phys - set up conversion from DMA to physical addresses | ||
| 62 | * @dma_idx: Top IOR_LSBITS bits of the DMA address, i.e. an index | ||
| 63 | * into the array _dma_to_phys. | ||
| 64 | * @delta: Value that, when added to the DMA address, will yield the | ||
| 65 | * physical address | ||
| 66 | * @s: Number of bytes in the section of memory with the given delta | ||
| 67 | * between DMA and physical addresses. | ||
| 68 | */ | ||
| 69 | static void setup_dma_to_phys(dma_addr_t dma, phys_addr_t delta, dma_addr_t s) | ||
| 70 | { | ||
| 71 | int dma_idx, first_idx, last_idx; | ||
| 72 | phys_addr_t first, last; | ||
| 73 | |||
| 74 | /* | ||
| 75 | * Calculate the first and last indices, rounding the first up and | ||
| 76 | * the second down. | ||
| 77 | */ | ||
| 78 | first = dma & ~IOR_DMA_GRAIN_MASK; | ||
| 79 | last = (dma + s - 1) & ~IOR_DMA_GRAIN_MASK; | ||
| 80 | first_idx = first >> IOR_LSBITS; /* Convert to indices */ | ||
| 81 | last_idx = last >> IOR_LSBITS; | ||
| 82 | |||
| 83 | for (dma_idx = first_idx; dma_idx <= last_idx; dma_idx++) | ||
| 84 | _ior_dma_to_phys[dma_idx].offset = delta >> IOR_DMA_SHIFT; | ||
| 85 | } | ||
| 86 | |||
| 87 | /** | ||
| 88 | * setup_phys_to_dma - set up conversion from DMA to physical addresses | ||
| 89 | * @phys_idx: Top IOR_LSBITS bits of the DMA address, i.e. an index | ||
| 90 | * into the array _phys_to_dma. | ||
| 91 | * @delta: Value that, when added to the DMA address, will yield the | ||
| 92 | * physical address | ||
| 93 | * @s: Number of bytes in the section of memory with the given delta | ||
| 94 | * between DMA and physical addresses. | ||
| 95 | */ | ||
| 96 | static void setup_phys_to_dma(phys_addr_t phys, dma_addr_t delta, phys_addr_t s) | ||
| 97 | { | ||
| 98 | int phys_idx, first_idx, last_idx; | ||
| 99 | phys_addr_t first, last; | ||
| 100 | |||
| 101 | /* | ||
| 102 | * Calculate the first and last indices, rounding the first up and | ||
| 103 | * the second down. | ||
| 104 | */ | ||
| 105 | first = phys & ~IOR_PHYS_GRAIN_MASK; | ||
| 106 | last = (phys + s - 1) & ~IOR_PHYS_GRAIN_MASK; | ||
| 107 | first_idx = first >> IOR_LSBITS; /* Convert to indices */ | ||
| 108 | last_idx = last >> IOR_LSBITS; | ||
| 109 | |||
| 110 | for (phys_idx = first_idx; phys_idx <= last_idx; phys_idx++) | ||
| 111 | _ior_phys_to_dma[phys_idx].offset = delta >> IOR_PHYS_SHIFT; | ||
| 112 | } | ||
| 113 | |||
| 114 | /** | ||
| 115 | * ioremap_add_map - add to the physical and DMA address conversion arrays | ||
| 116 | * @phys: Process's view of the address of the start of the memory chunk | ||
| 117 | * @dma: DMA address of the start of the memory chunk | ||
| 118 | * @size: Size, in bytes, of the chunk of memory | ||
| 119 | * | ||
| 120 | * NOTE: It might be obvious, but the assumption is that all @size bytes have | ||
| 121 | * the same offset between the physical address and the DMA address. | ||
| 122 | */ | ||
| 123 | void ioremap_add_map(phys_addr_t phys, phys_addr_t dma, phys_addr_t size) | ||
| 124 | { | ||
| 125 | if (size == 0) | ||
| 126 | return; | ||
| 127 | |||
| 128 | if ((dma & IOR_DMA_GRAIN_MASK) != 0 || | ||
| 129 | (phys & IOR_PHYS_GRAIN_MASK) != 0 || | ||
| 130 | (size & IOR_PHYS_GRAIN_MASK) != 0) | ||
| 131 | pr_crit("Memory allocation must be in chunks of 0x%x bytes\n", | ||
| 132 | IOR_PHYS_GRAIN); | ||
| 133 | |||
| 134 | setup_dma_to_phys(dma, phys - dma, size); | ||
| 135 | setup_phys_to_dma(phys, dma - phys, size); | ||
| 136 | } | ||
diff --git a/arch/mips/powertv/memory.c b/arch/mips/powertv/memory.c index f49eb3d0358b..73880ad29bc2 100644 --- a/arch/mips/powertv/memory.c +++ b/arch/mips/powertv/memory.c | |||
| @@ -30,28 +30,141 @@ | |||
| 30 | #include <asm/sections.h> | 30 | #include <asm/sections.h> |
| 31 | 31 | ||
| 32 | #include <asm/mips-boards/prom.h> | 32 | #include <asm/mips-boards/prom.h> |
| 33 | #include <asm/mach-powertv/asic.h> | ||
| 34 | #include <asm/mach-powertv/ioremap.h> | ||
| 33 | 35 | ||
| 34 | #include "init.h" | 36 | #include "init.h" |
| 35 | 37 | ||
| 36 | /* Memory constants */ | 38 | /* Memory constants */ |
| 37 | #define KIBIBYTE(n) ((n) * 1024) /* Number of kibibytes */ | 39 | #define KIBIBYTE(n) ((n) * 1024) /* Number of kibibytes */ |
| 38 | #define MEBIBYTE(n) ((n) * KIBIBYTE(1024)) /* Number of mebibytes */ | 40 | #define MEBIBYTE(n) ((n) * KIBIBYTE(1024)) /* Number of mebibytes */ |
| 39 | #define DEFAULT_MEMSIZE MEBIBYTE(256) /* If no memsize provided */ | 41 | #define DEFAULT_MEMSIZE MEBIBYTE(128) /* If no memsize provided */ |
| 40 | #define LOW_MEM_MAX MEBIBYTE(252) /* Max usable low mem */ | ||
| 41 | #define RES_BOOTLDR_MEMSIZE MEBIBYTE(1) /* Memory reserved for bldr */ | ||
| 42 | #define BOOT_MEM_SIZE KIBIBYTE(256) /* Memory reserved for bldr */ | ||
| 43 | #define PHYS_MEM_START 0x10000000 /* Start of physical memory */ | ||
| 44 | 42 | ||
| 45 | char __initdata cmdline[COMMAND_LINE_SIZE]; | 43 | #define BLDR_SIZE KIBIBYTE(256) /* Memory reserved for bldr */ |
| 44 | #define RV_SIZE MEBIBYTE(4) /* Size of reset vector */ | ||
| 46 | 45 | ||
| 47 | void __init prom_meminit(void) | 46 | #define LOW_MEM_END 0x20000000 /* Highest low memory address */ |
| 47 | #define BLDR_ALIAS 0x10000000 /* Bootloader address */ | ||
| 48 | #define RV_PHYS 0x1fc00000 /* Reset vector address */ | ||
| 49 | #define LOW_RAM_END RV_PHYS /* End of real RAM in low mem */ | ||
| 50 | |||
| 51 | /* | ||
| 52 | * Very low-level conversion from processor physical address to device | ||
| 53 | * DMA address for the first bank of memory. | ||
| 54 | */ | ||
| 55 | #define PHYS_TO_DMA(paddr) ((paddr) + (CONFIG_LOW_RAM_DMA - LOW_RAM_ALIAS)) | ||
| 56 | |||
| 57 | unsigned long ptv_memsize; | ||
| 58 | |||
| 59 | /* | ||
| 60 | * struct low_mem_reserved - Items in low memmory that are reserved | ||
| 61 | * @start: Physical address of item | ||
| 62 | * @size: Size, in bytes, of this item | ||
| 63 | * @is_aliased: True if this is RAM aliased from another location. If false, | ||
| 64 | * it is something other than aliased RAM and the RAM in the | ||
| 65 | * unaliased address is still visible outside of low memory. | ||
| 66 | */ | ||
| 67 | struct low_mem_reserved { | ||
| 68 | phys_addr_t start; | ||
| 69 | phys_addr_t size; | ||
| 70 | bool is_aliased; | ||
| 71 | }; | ||
| 72 | |||
| 73 | /* | ||
| 74 | * Must be in ascending address order | ||
| 75 | */ | ||
| 76 | struct low_mem_reserved low_mem_reserved[] = { | ||
| 77 | {BLDR_ALIAS, BLDR_SIZE, true}, /* Bootloader RAM */ | ||
| 78 | {RV_PHYS, RV_SIZE, false}, /* Reset vector */ | ||
| 79 | }; | ||
| 80 | |||
| 81 | /* | ||
| 82 | * struct mem_layout - layout of a piece of the system RAM | ||
| 83 | * @phys: Physical address of the start of this piece of RAM. This is the | ||
| 84 | * address at which both the processor and I/O devices see the | ||
| 85 | * RAM. | ||
| 86 | * @alias: Alias of this piece of memory in order to make it appear in | ||
| 87 | * the low memory part of the processor's address space. I/O | ||
| 88 | * devices don't see anything here. | ||
| 89 | * @size: Size, in bytes, of this piece of RAM | ||
| 90 | */ | ||
| 91 | struct mem_layout { | ||
| 92 | phys_addr_t phys; | ||
| 93 | phys_addr_t alias; | ||
| 94 | phys_addr_t size; | ||
| 95 | }; | ||
| 96 | |||
| 97 | /* | ||
| 98 | * struct mem_layout_list - list descriptor for layouts of system RAM pieces | ||
| 99 | * @family: Specifies the family being described | ||
| 100 | * @n: Number of &struct mem_layout elements | ||
| 101 | * @layout: Pointer to the list of &mem_layout structures | ||
| 102 | */ | ||
| 103 | struct mem_layout_list { | ||
| 104 | enum family_type family; | ||
| 105 | size_t n; | ||
| 106 | struct mem_layout *layout; | ||
| 107 | }; | ||
| 108 | |||
| 109 | static struct mem_layout f1500_layout[] = { | ||
| 110 | {0x20000000, 0x10000000, MEBIBYTE(256)}, | ||
| 111 | }; | ||
| 112 | |||
| 113 | static struct mem_layout f4500_layout[] = { | ||
| 114 | {0x40000000, 0x10000000, MEBIBYTE(256)}, | ||
| 115 | {0x20000000, 0x20000000, MEBIBYTE(32)}, | ||
| 116 | }; | ||
| 117 | |||
| 118 | static struct mem_layout f8500_layout[] = { | ||
| 119 | {0x40000000, 0x10000000, MEBIBYTE(256)}, | ||
| 120 | {0x20000000, 0x20000000, MEBIBYTE(32)}, | ||
| 121 | {0x30000000, 0x30000000, MEBIBYTE(32)}, | ||
| 122 | }; | ||
| 123 | |||
| 124 | static struct mem_layout fx600_layout[] = { | ||
| 125 | {0x20000000, 0x10000000, MEBIBYTE(256)}, | ||
| 126 | {0x60000000, 0x60000000, MEBIBYTE(128)}, | ||
| 127 | }; | ||
| 128 | |||
| 129 | static struct mem_layout_list layout_list[] = { | ||
| 130 | {FAMILY_1500, ARRAY_SIZE(f1500_layout), f1500_layout}, | ||
| 131 | {FAMILY_1500VZE, ARRAY_SIZE(f1500_layout), f1500_layout}, | ||
| 132 | {FAMILY_1500VZF, ARRAY_SIZE(f1500_layout), f1500_layout}, | ||
| 133 | {FAMILY_4500, ARRAY_SIZE(f4500_layout), f4500_layout}, | ||
| 134 | {FAMILY_8500, ARRAY_SIZE(f8500_layout), f8500_layout}, | ||
| 135 | {FAMILY_8500RNG, ARRAY_SIZE(f8500_layout), f8500_layout}, | ||
| 136 | {FAMILY_4600, ARRAY_SIZE(fx600_layout), fx600_layout}, | ||
| 137 | {FAMILY_4600VZA, ARRAY_SIZE(fx600_layout), fx600_layout}, | ||
| 138 | {FAMILY_8600, ARRAY_SIZE(fx600_layout), fx600_layout}, | ||
| 139 | {FAMILY_8600VZB, ARRAY_SIZE(fx600_layout), fx600_layout}, | ||
| 140 | }; | ||
| 141 | |||
| 142 | /* If we can't determine the layout, use this */ | ||
| 143 | static struct mem_layout default_layout[] = { | ||
| 144 | {0x20000000, 0x10000000, MEBIBYTE(128)}, | ||
| 145 | }; | ||
| 146 | |||
| 147 | /** | ||
| 148 | * register_non_ram - register low memory not available for RAM usage | ||
| 149 | */ | ||
| 150 | static __init void register_non_ram(void) | ||
| 151 | { | ||
| 152 | int i; | ||
| 153 | |||
| 154 | for (i = 0; i < ARRAY_SIZE(low_mem_reserved); i++) | ||
| 155 | add_memory_region(low_mem_reserved[i].start, | ||
| 156 | low_mem_reserved[i].size, BOOT_MEM_RESERVED); | ||
| 157 | } | ||
| 158 | |||
| 159 | /** | ||
| 160 | * get_memsize - get the size of memory as a single bank | ||
| 161 | */ | ||
| 162 | static phys_addr_t get_memsize(void) | ||
| 48 | { | 163 | { |
| 164 | static char cmdline[COMMAND_LINE_SIZE] __initdata; | ||
| 165 | phys_addr_t memsize = 0; | ||
| 49 | char *memsize_str; | 166 | char *memsize_str; |
| 50 | unsigned long memsize = 0; | ||
| 51 | unsigned int physend; | ||
| 52 | char *ptr; | 167 | char *ptr; |
| 53 | int low_mem; | ||
| 54 | int high_mem; | ||
| 55 | 168 | ||
| 56 | /* Check the command line first for a memsize directive */ | 169 | /* Check the command line first for a memsize directive */ |
| 57 | strcpy(cmdline, arcs_cmdline); | 170 | strcpy(cmdline, arcs_cmdline); |
| @@ -73,96 +186,156 @@ void __init prom_meminit(void) | |||
| 73 | if (memsize == 0) { | 186 | if (memsize == 0) { |
| 74 | if (_prom_memsize != 0) { | 187 | if (_prom_memsize != 0) { |
| 75 | memsize = _prom_memsize; | 188 | memsize = _prom_memsize; |
| 76 | pr_info("_prom_memsize = 0x%lx\n", memsize); | 189 | pr_info("_prom_memsize = 0x%x\n", memsize); |
| 77 | /* add in memory that the bootloader doesn't | 190 | /* add in memory that the bootloader doesn't |
| 78 | * report */ | 191 | * report */ |
| 79 | memsize += BOOT_MEM_SIZE; | 192 | memsize += BLDR_SIZE; |
| 80 | } else { | 193 | } else { |
| 81 | memsize = DEFAULT_MEMSIZE; | 194 | memsize = DEFAULT_MEMSIZE; |
| 82 | pr_info("Memsize not passed by bootloader, " | 195 | pr_info("Memsize not passed by bootloader, " |
| 83 | "defaulting to 0x%lx\n", memsize); | 196 | "defaulting to 0x%x\n", memsize); |
| 84 | } | 197 | } |
| 85 | } | 198 | } |
| 86 | } | 199 | } |
| 87 | 200 | ||
| 88 | physend = PFN_ALIGN(&_end) - 0x80000000; | 201 | return memsize; |
| 89 | if (memsize > LOW_MEM_MAX) { | 202 | } |
| 90 | low_mem = LOW_MEM_MAX; | 203 | |
| 91 | high_mem = memsize - low_mem; | 204 | /** |
| 92 | } else { | 205 | * register_low_ram - register an aliased section of RAM |
| 93 | low_mem = memsize; | 206 | * @p: Alias address of memory |
| 94 | high_mem = 0; | 207 | * @n: Number of bytes in this section of memory |
| 208 | * | ||
| 209 | * Returns the number of bytes registered | ||
| 210 | * | ||
| 211 | */ | ||
| 212 | static __init phys_addr_t register_low_ram(phys_addr_t p, phys_addr_t n) | ||
| 213 | { | ||
| 214 | phys_addr_t s; | ||
| 215 | int i; | ||
| 216 | phys_addr_t orig_n; | ||
| 217 | |||
| 218 | orig_n = n; | ||
| 219 | |||
| 220 | BUG_ON(p + n > RV_PHYS); | ||
| 221 | |||
| 222 | for (i = 0; n != 0 && i < ARRAY_SIZE(low_mem_reserved); i++) { | ||
| 223 | phys_addr_t start; | ||
| 224 | phys_addr_t size; | ||
| 225 | |||
| 226 | start = low_mem_reserved[i].start; | ||
| 227 | size = low_mem_reserved[i].size; | ||
| 228 | |||
| 229 | /* Handle memory before this low memory section */ | ||
| 230 | if (p < start) { | ||
| 231 | phys_addr_t s; | ||
| 232 | s = min(n, start - p); | ||
| 233 | add_memory_region(p, s, BOOT_MEM_RAM); | ||
| 234 | p += s; | ||
| 235 | n -= s; | ||
| 236 | } | ||
| 237 | |||
| 238 | /* Handle the low memory section itself. If it's aliased, | ||
| 239 | * we reduce the number of byes left, but if not, the RAM | ||
| 240 | * is available elsewhere and we don't reduce the number of | ||
| 241 | * bytes remaining. */ | ||
| 242 | if (p == start) { | ||
| 243 | if (low_mem_reserved[i].is_aliased) { | ||
| 244 | s = min(n, size); | ||
| 245 | n -= s; | ||
| 246 | p += s; | ||
| 247 | } else | ||
| 248 | p += n; | ||
| 249 | } | ||
| 95 | } | 250 | } |
| 96 | 251 | ||
| 252 | return orig_n - n; | ||
| 253 | } | ||
| 254 | |||
| 97 | /* | 255 | /* |
| 98 | * TODO: We will use the hard code for memory configuration until | 256 | * register_ram - register real RAM |
| 99 | * the bootloader releases their device tree to us. | 257 | * @p: Address of memory as seen by devices |
| 258 | * @alias: If the memory is seen at an additional address by the processor, | ||
| 259 | * this will be the address, otherwise it is the same as @p. | ||
| 260 | * @n: Number of bytes in this section of memory | ||
| 100 | */ | 261 | */ |
| 262 | static __init void register_ram(phys_addr_t p, phys_addr_t alias, | ||
| 263 | phys_addr_t n) | ||
| 264 | { | ||
| 101 | /* | 265 | /* |
| 102 | * Add the memory reserved for use by the bootloader to the | 266 | * If some or all of this memory has an alias, break it into the |
| 103 | * memory map. | 267 | * aliased and non-aliased portion. |
| 104 | */ | ||
| 105 | add_memory_region(PHYS_MEM_START, RES_BOOTLDR_MEMSIZE, | ||
| 106 | BOOT_MEM_RESERVED); | ||
| 107 | #ifdef CONFIG_HIGHMEM_256_128 | ||
| 108 | /* | ||
| 109 | * Add memory in low for general use by the kernel and its friends | ||
| 110 | * (like drivers, applications, etc). | ||
| 111 | */ | ||
| 112 | add_memory_region(PHYS_MEM_START + RES_BOOTLDR_MEMSIZE, | ||
| 113 | LOW_MEM_MAX - RES_BOOTLDR_MEMSIZE, BOOT_MEM_RAM); | ||
| 114 | /* | ||
| 115 | * Add the memory reserved for reset vector. | ||
| 116 | */ | ||
| 117 | add_memory_region(0x1fc00000, MEBIBYTE(4), BOOT_MEM_RESERVED); | ||
| 118 | /* | ||
| 119 | * Add the memory reserved. | ||
| 120 | */ | ||
| 121 | add_memory_region(0x20000000, MEBIBYTE(1024 + 75), BOOT_MEM_RESERVED); | ||
| 122 | /* | ||
| 123 | * Add memory in high for general use by the kernel and its friends | ||
| 124 | * (like drivers, applications, etc). | ||
| 125 | * | ||
| 126 | * 75MB is reserved for devices which are using the memory in high. | ||
| 127 | */ | ||
| 128 | add_memory_region(0x60000000 + MEBIBYTE(75), MEBIBYTE(128 - 75), | ||
| 129 | BOOT_MEM_RAM); | ||
| 130 | #elif defined CONFIG_HIGHMEM_128_128 | ||
| 131 | /* | ||
| 132 | * Add memory in low for general use by the kernel and its friends | ||
| 133 | * (like drivers, applications, etc). | ||
| 134 | */ | ||
| 135 | add_memory_region(PHYS_MEM_START + RES_BOOTLDR_MEMSIZE, | ||
| 136 | MEBIBYTE(128) - RES_BOOTLDR_MEMSIZE, BOOT_MEM_RAM); | ||
| 137 | /* | ||
| 138 | * Add the memory reserved. | ||
| 139 | */ | ||
| 140 | add_memory_region(PHYS_MEM_START + MEBIBYTE(128), | ||
| 141 | MEBIBYTE(128 + 1024 + 75), BOOT_MEM_RESERVED); | ||
| 142 | /* | ||
| 143 | * Add memory in high for general use by the kernel and its friends | ||
| 144 | * (like drivers, applications, etc). | ||
| 145 | * | ||
| 146 | * 75MB is reserved for devices which are using the memory in high. | ||
| 147 | */ | ||
| 148 | add_memory_region(0x60000000 + MEBIBYTE(75), MEBIBYTE(128 - 75), | ||
| 149 | BOOT_MEM_RAM); | ||
| 150 | #else | ||
| 151 | /* Add low memory regions for either: | ||
| 152 | * - no-highmemory configuration case -OR- | ||
| 153 | * - highmemory "HIGHMEM_LOWBANK_ONLY" case | ||
| 154 | */ | ||
| 155 | /* | ||
| 156 | * Add memory for general use by the kernel and its friends | ||
| 157 | * (like drivers, applications, etc). | ||
| 158 | */ | 268 | */ |
| 159 | add_memory_region(PHYS_MEM_START + RES_BOOTLDR_MEMSIZE, | 269 | if (p != alias) { |
| 160 | low_mem - RES_BOOTLDR_MEMSIZE, BOOT_MEM_RAM); | 270 | phys_addr_t alias_size; |
| 271 | phys_addr_t registered; | ||
| 272 | |||
| 273 | alias_size = min(n, LOW_RAM_END - alias); | ||
| 274 | registered = register_low_ram(alias, alias_size); | ||
| 275 | ioremap_add_map(alias, p, n); | ||
| 276 | n -= registered; | ||
| 277 | p += registered; | ||
| 278 | } | ||
| 279 | |||
| 280 | #ifdef CONFIG_HIGHMEM | ||
| 281 | if (n != 0) { | ||
| 282 | add_memory_region(p, n, BOOT_MEM_RAM); | ||
| 283 | ioremap_add_map(p, p, n); | ||
| 284 | } | ||
| 285 | #endif | ||
| 286 | } | ||
| 287 | |||
| 288 | /** | ||
| 289 | * register_address_space - register things in the address space | ||
| 290 | * @memsize: Number of bytes of RAM installed | ||
| 291 | * | ||
| 292 | * Takes the given number of bytes of RAM and registers as many of the regions, | ||
| 293 | * or partial regions, as it can. So, the default configuration might have | ||
| 294 | * two regions with 256 MiB each. If the memsize passed in on the command line | ||
| 295 | * is 384 MiB, it will register the first region with 256 MiB and the second | ||
| 296 | * with 128 MiB. | ||
| 297 | */ | ||
| 298 | static __init void register_address_space(phys_addr_t memsize) | ||
| 299 | { | ||
| 300 | int i; | ||
| 301 | phys_addr_t size; | ||
| 302 | size_t n; | ||
| 303 | struct mem_layout *layout; | ||
| 304 | enum family_type family; | ||
| 305 | |||
| 161 | /* | 306 | /* |
| 162 | * Add the memory reserved for reset vector. | 307 | * Register all of the things that aren't available to the kernel as |
| 308 | * memory. | ||
| 163 | */ | 309 | */ |
| 164 | add_memory_region(0x1fc00000, MEBIBYTE(4), BOOT_MEM_RESERVED); | 310 | register_non_ram(); |
| 165 | #endif | 311 | |
| 312 | /* Find the appropriate memory description */ | ||
| 313 | family = platform_get_family(); | ||
| 314 | |||
| 315 | for (i = 0; i < ARRAY_SIZE(layout_list); i++) { | ||
| 316 | if (layout_list[i].family == family) | ||
| 317 | break; | ||
| 318 | } | ||
| 319 | |||
| 320 | if (i == ARRAY_SIZE(layout_list)) { | ||
| 321 | n = ARRAY_SIZE(default_layout); | ||
| 322 | layout = default_layout; | ||
| 323 | } else { | ||
| 324 | n = layout_list[i].n; | ||
| 325 | layout = layout_list[i].layout; | ||
| 326 | } | ||
| 327 | |||
| 328 | for (i = 0; memsize != 0 && i < n; i++) { | ||
| 329 | size = min(memsize, layout[i].size); | ||
| 330 | register_ram(layout[i].phys, layout[i].alias, size); | ||
| 331 | memsize -= size; | ||
| 332 | } | ||
| 333 | } | ||
| 334 | |||
| 335 | void __init prom_meminit(void) | ||
| 336 | { | ||
| 337 | ptv_memsize = get_memsize(); | ||
| 338 | register_address_space(ptv_memsize); | ||
| 166 | } | 339 | } |
| 167 | 340 | ||
| 168 | void __init prom_free_prom_memory(void) | 341 | void __init prom_free_prom_memory(void) |
diff --git a/arch/mips/powertv/powertv-usb.c b/arch/mips/powertv/powertv-usb.c new file mode 100644 index 000000000000..6ac85cf7aa20 --- /dev/null +++ b/arch/mips/powertv/powertv-usb.c | |||
| @@ -0,0 +1,403 @@ | |||
| 1 | /* | ||
| 2 | * powertv-usb.c | ||
| 3 | * | ||
| 4 | * Description: ASIC-specific USB device setup and shutdown | ||
| 5 | * | ||
| 6 | * Copyright (C) 2005-2009 Scientific-Atlanta, Inc. | ||
| 7 | * Copyright (C) 2009 Cisco Systems, Inc. | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 22 | * | ||
| 23 | * Author: Ken Eppinett | ||
| 24 | * David Schleef <ds@schleef.org> | ||
| 25 | * | ||
| 26 | * NOTE: The bootloader allocates persistent memory at an address which is | ||
| 27 | * 16 MiB below the end of the highest address in KSEG0. All fixed | ||
| 28 | * address memory reservations must avoid this region. | ||
| 29 | */ | ||
| 30 | |||
| 31 | #include <linux/kernel.h> | ||
| 32 | #include <linux/ioport.h> | ||
| 33 | #include <linux/platform_device.h> | ||
| 34 | #include <asm/mach-powertv/asic.h> | ||
| 35 | #include <asm/mach-powertv/interrupts.h> | ||
| 36 | |||
| 37 | /* misc_clk_ctl1 values */ | ||
| 38 | #define MCC1_30MHZ_POWERUP_SELECT (1 << 14) | ||
| 39 | #define MCC1_DIV9 (1 << 13) | ||
| 40 | #define MCC1_ETHMIPS_POWERUP_SELECT (1 << 11) | ||
| 41 | #define MCC1_USB_POWERUP_SELECT (1 << 1) | ||
| 42 | #define MCC1_CLOCK108_POWERUP_SELECT (1 << 0) | ||
| 43 | |||
| 44 | /* Possible values for clock select */ | ||
| 45 | #define MCC1_USB_CLOCK_HIGH_Z (0 << 4) | ||
| 46 | #define MCC1_USB_CLOCK_48MHZ (1 << 4) | ||
| 47 | #define MCC1_USB_CLOCK_24MHZ (2 << 4) | ||
| 48 | #define MCC1_USB_CLOCK_6MHZ (3 << 4) | ||
| 49 | |||
| 50 | #define MCC1_CONFIG (MCC1_30MHZ_POWERUP_SELECT | \ | ||
| 51 | MCC1_DIV9 | \ | ||
| 52 | MCC1_ETHMIPS_POWERUP_SELECT | \ | ||
| 53 | MCC1_USB_POWERUP_SELECT | \ | ||
| 54 | MCC1_CLOCK108_POWERUP_SELECT) | ||
| 55 | |||
| 56 | /* misc_clk_ctl2 values */ | ||
| 57 | #define MCC2_GMII_GCLK_TO_PAD (1 << 31) | ||
| 58 | #define MCC2_ETHER125_0_CLOCK_SELECT (1 << 29) | ||
| 59 | #define MCC2_RMII_0_CLOCK_SELECT (1 << 28) | ||
| 60 | #define MCC2_GMII_TX0_CLOCK_SELECT (1 << 27) | ||
| 61 | #define MCC2_GMII_RX0_CLOCK_SELECT (1 << 26) | ||
| 62 | #define MCC2_ETHER125_1_CLOCK_SELECT (1 << 24) | ||
| 63 | #define MCC2_RMII_1_CLOCK_SELECT (1 << 23) | ||
| 64 | #define MCC2_GMII_TX1_CLOCK_SELECT (1 << 22) | ||
| 65 | #define MCC2_GMII_RX1_CLOCK_SELECT (1 << 21) | ||
| 66 | #define MCC2_ETHER125_2_CLOCK_SELECT (1 << 19) | ||
| 67 | #define MCC2_RMII_2_CLOCK_SELECT (1 << 18) | ||
| 68 | #define MCC2_GMII_TX2_CLOCK_SELECT (1 << 17) | ||
| 69 | #define MCC2_GMII_RX2_CLOCK_SELECT (1 << 16) | ||
| 70 | |||
| 71 | #define ETHER_CLK_CONFIG (MCC2_GMII_GCLK_TO_PAD | \ | ||
| 72 | MCC2_ETHER125_0_CLOCK_SELECT | \ | ||
| 73 | MCC2_RMII_0_CLOCK_SELECT | \ | ||
| 74 | MCC2_GMII_TX0_CLOCK_SELECT | \ | ||
| 75 | MCC2_GMII_RX0_CLOCK_SELECT | \ | ||
| 76 | MCC2_ETHER125_1_CLOCK_SELECT | \ | ||
| 77 | MCC2_RMII_1_CLOCK_SELECT | \ | ||
| 78 | MCC2_GMII_TX1_CLOCK_SELECT | \ | ||
| 79 | MCC2_GMII_RX1_CLOCK_SELECT | \ | ||
| 80 | MCC2_ETHER125_2_CLOCK_SELECT | \ | ||
| 81 | MCC2_RMII_2_CLOCK_SELECT | \ | ||
| 82 | MCC2_GMII_TX2_CLOCK_SELECT | \ | ||
| 83 | MCC2_GMII_RX2_CLOCK_SELECT) | ||
| 84 | |||
| 85 | /* misc_clk_ctl2 definitions for Gaia */ | ||
| 86 | #define FSX4A_REF_SELECT (1 << 16) | ||
| 87 | #define FSX4B_REF_SELECT (1 << 17) | ||
| 88 | #define FSX4C_REF_SELECT (1 << 18) | ||
| 89 | #define DDR_PLL_REF_SELECT (1 << 19) | ||
| 90 | #define MIPS_PLL_REF_SELECT (1 << 20) | ||
| 91 | |||
| 92 | /* Definitions for the QAM frequency select register FS432X4A4_QAM_CTL */ | ||
| 93 | #define QAM_FS_SDIV_SHIFT 29 | ||
| 94 | #define QAM_FS_MD_SHIFT 24 | ||
| 95 | #define QAM_FS_MD_MASK 0x1f /* Cut down to 5 bits */ | ||
| 96 | #define QAM_FS_PE_SHIFT 8 | ||
| 97 | |||
| 98 | #define QAM_FS_DISABLE_DIVIDE_BY_3 (1 << 5) | ||
| 99 | #define QAM_FS_ENABLE_PROGRAM (1 << 4) | ||
| 100 | #define QAM_FS_ENABLE_OUTPUT (1 << 3) | ||
| 101 | #define QAM_FS_SELECT_TEST_BYPASS (1 << 2) | ||
| 102 | #define QAM_FS_DISABLE_DIGITAL_STANDBY (1 << 1) | ||
| 103 | #define QAM_FS_CHOOSE_FS (1 << 0) | ||
| 104 | |||
| 105 | /* Definitions for fs432x4a_ctl register */ | ||
| 106 | #define QAM_FS_NSDIV_54MHZ (1 << 2) | ||
| 107 | |||
| 108 | /* Definitions for bcm1_usb2_ctl register */ | ||
| 109 | #define BCM1_USB2_CTL_BISTOK (1 << 11) | ||
| 110 | #define BCM1_USB2_CTL_PORT2_SHIFT_JK (1 << 7) | ||
| 111 | #define BCM1_USB2_CTL_PORT1_SHIFT_JK (1 << 6) | ||
| 112 | #define BCM1_USB2_CTL_PORT2_FAST_EDGE (1 << 5) | ||
| 113 | #define BCM1_USB2_CTL_PORT1_FAST_EDGE (1 << 4) | ||
| 114 | #define BCM1_USB2_CTL_EHCI_PRT_PWR_ACTIVE_HIGH (1 << 1) | ||
| 115 | #define BCM1_USB2_CTL_APP_PRT_OVRCUR_IN_ACTIVE_HIGH (1 << 0) | ||
| 116 | |||
| 117 | /* Definitions for crt_spare register */ | ||
| 118 | #define CRT_SPARE_PORT2_SHIFT_JK (1 << 21) | ||
| 119 | #define CRT_SPARE_PORT1_SHIFT_JK (1 << 20) | ||
| 120 | #define CRT_SPARE_PORT2_FAST_EDGE (1 << 19) | ||
| 121 | #define CRT_SPARE_PORT1_FAST_EDGE (1 << 18) | ||
| 122 | #define CRT_SPARE_DIVIDE_BY_9_FROM_432 (1 << 17) | ||
| 123 | #define CRT_SPARE_USB_DIVIDE_BY_9 (1 << 16) | ||
| 124 | |||
| 125 | /* Definitions for usb2_stbus_obc register */ | ||
| 126 | #define USB_STBUS_OBC_STORE32_LOAD32 0x3 | ||
| 127 | |||
| 128 | /* Definitions for usb2_stbus_mess_size register */ | ||
| 129 | #define USB2_STBUS_MESS_SIZE_2 0x1 /* 2 packets */ | ||
| 130 | |||
| 131 | /* Definitions for usb2_stbus_chunk_size register */ | ||
| 132 | #define USB2_STBUS_CHUNK_SIZE_2 0x1 /* 2 packets */ | ||
| 133 | |||
| 134 | /* Definitions for usb2_strap register */ | ||
| 135 | #define USB2_STRAP_HFREQ_SELECT 0x1 | ||
| 136 | |||
| 137 | /* | ||
| 138 | * USB Host Resource Definition | ||
| 139 | */ | ||
| 140 | |||
| 141 | static struct resource ehci_resources[] = { | ||
| 142 | { | ||
| 143 | .parent = &asic_resource, | ||
| 144 | .start = 0, | ||
| 145 | .end = 0xff, | ||
| 146 | .flags = IORESOURCE_MEM, | ||
| 147 | }, | ||
| 148 | { | ||
| 149 | .start = irq_usbehci, | ||
| 150 | .end = irq_usbehci, | ||
| 151 | .flags = IORESOURCE_IRQ, | ||
| 152 | }, | ||
| 153 | }; | ||
| 154 | |||
| 155 | static u64 ehci_dmamask = 0xffffffffULL; | ||
| 156 | |||
| 157 | static struct platform_device ehci_device = { | ||
| 158 | .name = "powertv-ehci", | ||
| 159 | .id = 0, | ||
| 160 | .num_resources = 2, | ||
| 161 | .resource = ehci_resources, | ||
| 162 | .dev = { | ||
| 163 | .dma_mask = &ehci_dmamask, | ||
| 164 | .coherent_dma_mask = 0xffffffff, | ||
| 165 | }, | ||
| 166 | }; | ||
| 167 | |||
| 168 | static struct resource ohci_resources[] = { | ||
| 169 | { | ||
| 170 | .parent = &asic_resource, | ||
| 171 | .start = 0, | ||
| 172 | .end = 0xff, | ||
| 173 | .flags = IORESOURCE_MEM, | ||
| 174 | }, | ||
| 175 | { | ||
| 176 | .start = irq_usbohci, | ||
| 177 | .end = irq_usbohci, | ||
| 178 | .flags = IORESOURCE_IRQ, | ||
| 179 | }, | ||
| 180 | }; | ||
| 181 | |||
| 182 | static u64 ohci_dmamask = 0xffffffffULL; | ||
| 183 | |||
| 184 | static struct platform_device ohci_device = { | ||
| 185 | .name = "powertv-ohci", | ||
| 186 | .id = 0, | ||
| 187 | .num_resources = 2, | ||
| 188 | .resource = ohci_resources, | ||
| 189 | .dev = { | ||
| 190 | .dma_mask = &ohci_dmamask, | ||
| 191 | .coherent_dma_mask = 0xffffffff, | ||
| 192 | }, | ||
| 193 | }; | ||
| 194 | |||
| 195 | static unsigned usb_users; | ||
| 196 | static DEFINE_SPINLOCK(usb_regs_lock); | ||
| 197 | |||
| 198 | /* | ||
| 199 | * | ||
| 200 | * fs_update - set frequency synthesizer for USB | ||
| 201 | * @pe_bits Phase tap setting | ||
| 202 | * @md_bits Coarse selector bus for algorithm of phase tap | ||
| 203 | * @sdiv_bits Output divider setting | ||
| 204 | * @disable_div_by_3 Either QAM_FS_DISABLE_DIVIDE_BY_3 or zero | ||
| 205 | * @standby Either QAM_FS_DISABLE_DIGITAL_STANDBY or zero | ||
| 206 | * | ||
| 207 | * QAM frequency selection code, which affects the frequency at which USB | ||
| 208 | * runs. The frequency is calculated as: | ||
| 209 | * 2^15 * ndiv * Fin | ||
| 210 | * Fout = ------------------------------------------------------------ | ||
| 211 | * (sdiv * (ipe * (1 + md/32) - (ipe - 2^15)*(1 + (md + 1)/32))) | ||
| 212 | * where: | ||
| 213 | * Fin 54 MHz | ||
| 214 | * ndiv QAM_FS_NSDIV_54MHZ ? 8 : 16 | ||
| 215 | * sdiv 1 << (sdiv_bits + 1) | ||
| 216 | * ipe Same as pe_bits | ||
| 217 | * md A five-bit, two's-complement integer (range [-16, 15]), which | ||
| 218 | * is the lower 5 bits of md_bits. | ||
| 219 | */ | ||
| 220 | static void fs_update(u32 pe_bits, int md_bits, u32 sdiv_bits, | ||
| 221 | u32 disable_div_by_3, u32 standby) | ||
| 222 | { | ||
| 223 | u32 val; | ||
| 224 | |||
| 225 | val = ((sdiv_bits << QAM_FS_SDIV_SHIFT) | | ||
| 226 | ((md_bits & QAM_FS_MD_MASK) << QAM_FS_MD_SHIFT) | | ||
| 227 | (pe_bits << QAM_FS_PE_SHIFT) | | ||
| 228 | QAM_FS_ENABLE_OUTPUT | | ||
| 229 | standby | | ||
| 230 | disable_div_by_3); | ||
| 231 | asic_write(val, fs432x4b4_usb_ctl); | ||
| 232 | asic_write(val | QAM_FS_ENABLE_PROGRAM, fs432x4b4_usb_ctl); | ||
| 233 | asic_write(val | QAM_FS_ENABLE_PROGRAM | QAM_FS_CHOOSE_FS, | ||
| 234 | fs432x4b4_usb_ctl); | ||
| 235 | } | ||
| 236 | |||
| 237 | /* | ||
| 238 | * usb_eye_configure - for optimizing the shape USB eye waveform | ||
| 239 | * @set: Bits to set in the register | ||
| 240 | * @clear: Bits to clear in the register; each bit with a one will | ||
| 241 | * be set in the register, zero bits will not be modified | ||
| 242 | */ | ||
| 243 | static void usb_eye_configure(u32 set, u32 clear) | ||
| 244 | { | ||
| 245 | u32 old; | ||
| 246 | |||
| 247 | old = asic_read(crt_spare); | ||
| 248 | old |= set; | ||
| 249 | old &= ~clear; | ||
| 250 | asic_write(old, crt_spare); | ||
| 251 | } | ||
| 252 | |||
| 253 | /* | ||
| 254 | * platform_configure_usb - usb configuration based on platform type. | ||
| 255 | */ | ||
| 256 | static void platform_configure_usb(void) | ||
| 257 | { | ||
| 258 | u32 bcm1_usb2_ctl_value; | ||
| 259 | enum asic_type asic_type; | ||
| 260 | unsigned long flags; | ||
| 261 | |||
| 262 | spin_lock_irqsave(&usb_regs_lock, flags); | ||
| 263 | usb_users++; | ||
| 264 | |||
| 265 | if (usb_users != 1) { | ||
| 266 | spin_unlock_irqrestore(&usb_regs_lock, flags); | ||
| 267 | return; | ||
| 268 | } | ||
| 269 | |||
| 270 | asic_type = platform_get_asic(); | ||
| 271 | |||
| 272 | switch (asic_type) { | ||
| 273 | case ASIC_ZEUS: | ||
| 274 | fs_update(0x0000, -15, 0x02, 0, 0); | ||
| 275 | bcm1_usb2_ctl_value = BCM1_USB2_CTL_EHCI_PRT_PWR_ACTIVE_HIGH | | ||
| 276 | BCM1_USB2_CTL_APP_PRT_OVRCUR_IN_ACTIVE_HIGH; | ||
| 277 | break; | ||
| 278 | |||
| 279 | case ASIC_CRONUS: | ||
| 280 | case ASIC_CRONUSLITE: | ||
| 281 | usb_eye_configure(0, CRT_SPARE_USB_DIVIDE_BY_9); | ||
| 282 | fs_update(0x8000, -14, 0x03, QAM_FS_DISABLE_DIVIDE_BY_3, | ||
| 283 | QAM_FS_DISABLE_DIGITAL_STANDBY); | ||
| 284 | bcm1_usb2_ctl_value = BCM1_USB2_CTL_EHCI_PRT_PWR_ACTIVE_HIGH | | ||
| 285 | BCM1_USB2_CTL_APP_PRT_OVRCUR_IN_ACTIVE_HIGH; | ||
| 286 | break; | ||
| 287 | |||
| 288 | case ASIC_CALLIOPE: | ||
| 289 | fs_update(0x0000, -15, 0x02, QAM_FS_DISABLE_DIVIDE_BY_3, | ||
| 290 | QAM_FS_DISABLE_DIGITAL_STANDBY); | ||
| 291 | |||
| 292 | switch (platform_get_family()) { | ||
| 293 | case FAMILY_1500VZE: | ||
| 294 | break; | ||
| 295 | |||
| 296 | case FAMILY_1500VZF: | ||
| 297 | usb_eye_configure(CRT_SPARE_PORT2_SHIFT_JK | | ||
| 298 | CRT_SPARE_PORT1_SHIFT_JK | | ||
| 299 | CRT_SPARE_PORT2_FAST_EDGE | | ||
| 300 | CRT_SPARE_PORT1_FAST_EDGE, 0); | ||
| 301 | break; | ||
| 302 | |||
| 303 | default: | ||
| 304 | usb_eye_configure(CRT_SPARE_PORT2_SHIFT_JK | | ||
| 305 | CRT_SPARE_PORT1_SHIFT_JK, 0); | ||
| 306 | break; | ||
| 307 | } | ||
| 308 | |||
| 309 | bcm1_usb2_ctl_value = BCM1_USB2_CTL_BISTOK | | ||
| 310 | BCM1_USB2_CTL_EHCI_PRT_PWR_ACTIVE_HIGH | | ||
| 311 | BCM1_USB2_CTL_APP_PRT_OVRCUR_IN_ACTIVE_HIGH; | ||
| 312 | break; | ||
| 313 | |||
| 314 | case ASIC_GAIA: | ||
| 315 | fs_update(0x8000, -14, 0x03, QAM_FS_DISABLE_DIVIDE_BY_3, | ||
| 316 | QAM_FS_DISABLE_DIGITAL_STANDBY); | ||
| 317 | bcm1_usb2_ctl_value = BCM1_USB2_CTL_BISTOK | | ||
| 318 | BCM1_USB2_CTL_EHCI_PRT_PWR_ACTIVE_HIGH | | ||
| 319 | BCM1_USB2_CTL_APP_PRT_OVRCUR_IN_ACTIVE_HIGH; | ||
| 320 | break; | ||
| 321 | |||
| 322 | default: | ||
| 323 | pr_err("Unknown ASIC type: %d\n", asic_type); | ||
| 324 | bcm1_usb2_ctl_value = 0; | ||
| 325 | break; | ||
| 326 | } | ||
| 327 | |||
| 328 | /* turn on USB power */ | ||
| 329 | asic_write(0, usb2_strap); | ||
| 330 | /* Enable all OHCI interrupts */ | ||
| 331 | asic_write(bcm1_usb2_ctl_value, usb2_control); | ||
| 332 | /* usb2_stbus_obc store32/load32 */ | ||
| 333 | asic_write(USB_STBUS_OBC_STORE32_LOAD32, usb2_stbus_obc); | ||
| 334 | /* usb2_stbus_mess_size 2 packets */ | ||
| 335 | asic_write(USB2_STBUS_MESS_SIZE_2, usb2_stbus_mess_size); | ||
| 336 | /* usb2_stbus_chunk_size 2 packets */ | ||
| 337 | asic_write(USB2_STBUS_CHUNK_SIZE_2, usb2_stbus_chunk_size); | ||
| 338 | spin_unlock_irqrestore(&usb_regs_lock, flags); | ||
| 339 | } | ||
| 340 | |||
| 341 | static void platform_unconfigure_usb(void) | ||
| 342 | { | ||
| 343 | unsigned long flags; | ||
| 344 | |||
| 345 | spin_lock_irqsave(&usb_regs_lock, flags); | ||
| 346 | usb_users--; | ||
| 347 | if (usb_users == 0) | ||
| 348 | asic_write(USB2_STRAP_HFREQ_SELECT, usb2_strap); | ||
| 349 | spin_unlock_irqrestore(&usb_regs_lock, flags); | ||
| 350 | } | ||
| 351 | |||
| 352 | /* | ||
| 353 | * Set up the USB EHCI interface | ||
| 354 | */ | ||
| 355 | void platform_configure_usb_ehci() | ||
| 356 | { | ||
| 357 | platform_configure_usb(); | ||
| 358 | } | ||
| 359 | EXPORT_SYMBOL(platform_configure_usb_ehci); | ||
| 360 | |||
| 361 | /* | ||
| 362 | * Set up the USB OHCI interface | ||
| 363 | */ | ||
| 364 | void platform_configure_usb_ohci() | ||
| 365 | { | ||
| 366 | platform_configure_usb(); | ||
| 367 | } | ||
| 368 | EXPORT_SYMBOL(platform_configure_usb_ohci); | ||
| 369 | |||
| 370 | /* | ||
| 371 | * Shut the USB EHCI interface down | ||
| 372 | */ | ||
| 373 | void platform_unconfigure_usb_ehci() | ||
| 374 | { | ||
| 375 | platform_unconfigure_usb(); | ||
| 376 | } | ||
| 377 | EXPORT_SYMBOL(platform_unconfigure_usb_ehci); | ||
| 378 | |||
| 379 | /* | ||
| 380 | * Shut the USB OHCI interface down | ||
| 381 | */ | ||
| 382 | void platform_unconfigure_usb_ohci() | ||
| 383 | { | ||
| 384 | platform_unconfigure_usb(); | ||
| 385 | } | ||
| 386 | EXPORT_SYMBOL(platform_unconfigure_usb_ohci); | ||
| 387 | |||
| 388 | /** | ||
| 389 | * platform_devices_init - sets up USB device resourse. | ||
| 390 | */ | ||
| 391 | int __init platform_usb_devices_init(struct platform_device **ehci_dev, | ||
| 392 | struct platform_device **ohci_dev) | ||
| 393 | { | ||
| 394 | *ehci_dev = &ehci_device; | ||
| 395 | ehci_resources[0].start = asic_reg_phys_addr(ehci_hcapbase); | ||
| 396 | ehci_resources[0].end += ehci_resources[0].start; | ||
| 397 | |||
| 398 | *ohci_dev = &ohci_device; | ||
| 399 | ohci_resources[0].start = asic_reg_phys_addr(ohci_hc_revision); | ||
| 400 | ohci_resources[0].end += ohci_resources[0].start; | ||
| 401 | |||
| 402 | return 0; | ||
| 403 | } | ||
diff --git a/arch/mips/powertv/powertv_setup.c b/arch/mips/powertv/powertv_setup.c index af2cae0a5ab3..3933c373a438 100644 --- a/arch/mips/powertv/powertv_setup.c +++ b/arch/mips/powertv/powertv_setup.c | |||
| @@ -199,14 +199,8 @@ static int panic_handler(struct notifier_block *notifier_block, | |||
| 199 | my_regs.cp0_status = read_c0_status(); | 199 | my_regs.cp0_status = read_c0_status(); |
| 200 | } | 200 | } |
| 201 | 201 | ||
| 202 | #ifdef CONFIG_DIAGNOSTICS | ||
| 203 | failure_report((char *) cause_string, | ||
| 204 | have_die_regs ? &die_regs : &my_regs); | ||
| 205 | have_die_regs = false; | ||
| 206 | #else | ||
| 207 | pr_crit("I'm feeling a bit sleepy. hmmmmm... perhaps a nap would... " | 202 | pr_crit("I'm feeling a bit sleepy. hmmmmm... perhaps a nap would... " |
| 208 | "zzzz... \n"); | 203 | "zzzz... \n"); |
| 209 | #endif | ||
| 210 | 204 | ||
| 211 | return NOTIFY_DONE; | 205 | return NOTIFY_DONE; |
| 212 | } | 206 | } |
diff --git a/arch/mips/rb532/Makefile b/arch/mips/rb532/Makefile index 8f0b6b6a1625..efdecdb6e3ea 100644 --- a/arch/mips/rb532/Makefile +++ b/arch/mips/rb532/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += irq.o time.o setup.o serial.o prom.o gpio.o devices.o | 5 | obj-y += irq.o time.o setup.o serial.o prom.o gpio.o devices.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/rb532/Platform b/arch/mips/rb532/Platform new file mode 100644 index 000000000000..aeec45a7cbb3 --- /dev/null +++ b/arch/mips/rb532/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Routerboard 532 | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MIKROTIK_RB532) += rb532/ | ||
| 5 | cflags-$(CONFIG_MIKROTIK_RB532) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-rc32434 | ||
| 7 | load-$(CONFIG_MIKROTIK_RB532) += 0xffffffff80101000 | ||
diff --git a/arch/mips/sgi-ip22/Makefile b/arch/mips/sgi-ip22/Makefile index 416b18f9fa72..cc538493cae1 100644 --- a/arch/mips/sgi-ip22/Makefile +++ b/arch/mips/sgi-ip22/Makefile | |||
| @@ -9,5 +9,3 @@ obj-y += ip22-mc.o ip22-hpc.o ip22-int.o ip22-time.o ip22-nvram.o \ | |||
| 9 | obj-$(CONFIG_SGI_IP22) += ip22-berr.o | 9 | obj-$(CONFIG_SGI_IP22) += ip22-berr.o |
| 10 | obj-$(CONFIG_SGI_IP28) += ip28-berr.o | 10 | obj-$(CONFIG_SGI_IP28) += ip28-berr.o |
| 11 | obj-$(CONFIG_EISA) += ip22-eisa.o | 11 | obj-$(CONFIG_EISA) += ip22-eisa.o |
| 12 | |||
| 13 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sgi-ip22/Platform b/arch/mips/sgi-ip22/Platform new file mode 100644 index 000000000000..b7a4b7e04c38 --- /dev/null +++ b/arch/mips/sgi-ip22/Platform | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | # | ||
| 2 | # SGI IP22 (Indy/Indigo2) | ||
| 3 | # | ||
| 4 | # Set the load address to >= 0xffffffff88069000 if you want to leave space for | ||
| 5 | # symmon, 0xffffffff80002000 for production kernels. Note that the value must | ||
| 6 | # be aligned to a multiple of the kernel stack size or the handling of the | ||
| 7 | # current variable will break so for 64-bit kernels we have to raise the start | ||
| 8 | # address by 8kb. | ||
| 9 | # | ||
| 10 | platform-$(CONFIG_SGI_IP22) += sgi-ip22/ | ||
| 11 | cflags-$(CONFIG_SGI_IP22) += -I$(srctree)/arch/mips/include/asm/mach-ip22 | ||
| 12 | ifdef CONFIG_32BIT | ||
| 13 | load-$(CONFIG_SGI_IP22) += 0xffffffff88002000 | ||
| 14 | endif | ||
| 15 | ifdef CONFIG_64BIT | ||
| 16 | load-$(CONFIG_SGI_IP22) += 0xffffffff88004000 | ||
| 17 | endif | ||
| 18 | |||
| 19 | # | ||
| 20 | # SGI IP28 (Indigo2 R10k) | ||
| 21 | # | ||
| 22 | # Set the load address to >= 0xa800000020080000 if you want to leave space for | ||
| 23 | # symmon, 0xa800000020004000 for production kernels ? Note that the value must | ||
| 24 | # be 16kb aligned or the handling of the current variable will break. | ||
| 25 | # Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys | ||
| 26 | # | ||
| 27 | ifdef CONFIG_SGI_IP28 | ||
| 28 | ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n) | ||
| 29 | $(error gcc doesn't support needed option -mr10k-cache-barrier=store) | ||
| 30 | endif | ||
| 31 | endif | ||
| 32 | platform-$(CONFIG_SGI_IP28) += sgi-ip22/ | ||
| 33 | cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=store -I$(srctree)/arch/mips/include/asm/mach-ip28 | ||
| 34 | load-$(CONFIG_SGI_IP28) += 0xa800000020004000 | ||
diff --git a/arch/mips/sgi-ip27/Makefile b/arch/mips/sgi-ip27/Makefile index 31f4931b8484..1f29e761d691 100644 --- a/arch/mips/sgi-ip27/Makefile +++ b/arch/mips/sgi-ip27/Makefile | |||
| @@ -8,5 +8,3 @@ obj-y := ip27-berr.o ip27-irq.o ip27-init.o ip27-klconfig.o ip27-klnuma.o \ | |||
| 8 | 8 | ||
| 9 | obj-$(CONFIG_EARLY_PRINTK) += ip27-console.o | 9 | obj-$(CONFIG_EARLY_PRINTK) += ip27-console.o |
| 10 | obj-$(CONFIG_SMP) += ip27-smp.o | 10 | obj-$(CONFIG_SMP) += ip27-smp.o |
| 11 | |||
| 12 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sgi-ip27/Platform b/arch/mips/sgi-ip27/Platform new file mode 100644 index 000000000000..1fb9c2ea7c8f --- /dev/null +++ b/arch/mips/sgi-ip27/Platform | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | # | ||
| 2 | # SGI-IP27 (Origin200/2000) | ||
| 3 | # | ||
| 4 | # Set the load address to >= 0xc000000000300000 if you want to leave space for | ||
| 5 | # symmon, 0xc00000000001c000 for production kernels. Note that the value must | ||
| 6 | # be 16kb aligned or the handling of the current variable will break. | ||
| 7 | # | ||
| 8 | ifdef CONFIG_SGI_IP27 | ||
| 9 | platform-$(CONFIG_SGI_IP27) += sgi-ip27/ | ||
| 10 | cflags-$(CONFIG_SGI_IP27) += -I$(srctree)/arch/mips/include/asm/mach-ip27 | ||
| 11 | ifdef CONFIG_MAPPED_KERNEL | ||
| 12 | load-$(CONFIG_SGI_IP27) += 0xc00000004001c000 | ||
| 13 | OBJCOPYFLAGS := --change-addresses=0x3fffffff80000000 | ||
| 14 | dataoffset-$(CONFIG_SGI_IP27) += 0x01000000 | ||
| 15 | else | ||
| 16 | load-$(CONFIG_SGI_IP27) += 0xa80000000001c000 | ||
| 17 | OBJCOPYFLAGS := --change-addresses=0x57ffffff80000000 | ||
| 18 | endif | ||
| 19 | endif | ||
diff --git a/arch/mips/sgi-ip27/ip27-klconfig.c b/arch/mips/sgi-ip27/ip27-klconfig.c index dd830b3670d1..7afe14688003 100644 --- a/arch/mips/sgi-ip27/ip27-klconfig.c +++ b/arch/mips/sgi-ip27/ip27-klconfig.c | |||
| @@ -48,7 +48,7 @@ klinfo_t *find_first_component(lboard_t *brd, unsigned char struct_type) | |||
| 48 | return find_component(brd, (klinfo_t *)NULL, struct_type); | 48 | return find_component(brd, (klinfo_t *)NULL, struct_type); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | lboard_t * find_lboard(lboard_t *start, unsigned char brd_type) | 51 | lboard_t *find_lboard(lboard_t *start, unsigned char brd_type) |
| 52 | { | 52 | { |
| 53 | /* Search all boards stored on this node. */ | 53 | /* Search all boards stored on this node. */ |
| 54 | while (start) { | 54 | while (start) { |
| @@ -60,7 +60,7 @@ lboard_t * find_lboard(lboard_t *start, unsigned char brd_type) | |||
| 60 | return (lboard_t *)NULL; | 60 | return (lboard_t *)NULL; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | lboard_t * find_lboard_class(lboard_t *start, unsigned char brd_type) | 63 | lboard_t *find_lboard_class(lboard_t *start, unsigned char brd_type) |
| 64 | { | 64 | { |
| 65 | /* Search all boards stored on this node. */ | 65 | /* Search all boards stored on this node. */ |
| 66 | while (start) { | 66 | while (start) { |
| @@ -78,7 +78,7 @@ cnodeid_t get_cpu_cnode(cpuid_t cpu) | |||
| 78 | return CPUID_TO_COMPACT_NODEID(cpu); | 78 | return CPUID_TO_COMPACT_NODEID(cpu); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | klcpu_t * nasid_slice_to_cpuinfo(nasid_t nasid, int slice) | 81 | klcpu_t *nasid_slice_to_cpuinfo(nasid_t nasid, int slice) |
| 82 | { | 82 | { |
| 83 | lboard_t *brd; | 83 | lboard_t *brd; |
| 84 | klcpu_t *acpu; | 84 | klcpu_t *acpu; |
| @@ -97,7 +97,7 @@ klcpu_t * nasid_slice_to_cpuinfo(nasid_t nasid, int slice) | |||
| 97 | return (klcpu_t *)NULL; | 97 | return (klcpu_t *)NULL; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | klcpu_t * sn_get_cpuinfo(cpuid_t cpu) | 100 | klcpu_t *sn_get_cpuinfo(cpuid_t cpu) |
| 101 | { | 101 | { |
| 102 | nasid_t nasid; | 102 | nasid_t nasid; |
| 103 | int slice; | 103 | int slice; |
diff --git a/arch/mips/sgi-ip32/Makefile b/arch/mips/sgi-ip32/Makefile index 31c9aa1bcb40..60f0227425e7 100644 --- a/arch/mips/sgi-ip32/Makefile +++ b/arch/mips/sgi-ip32/Makefile | |||
| @@ -5,5 +5,3 @@ | |||
| 5 | 5 | ||
| 6 | obj-y += ip32-berr.o ip32-irq.o ip32-platform.o ip32-setup.o ip32-reset.o \ | 6 | obj-y += ip32-berr.o ip32-irq.o ip32-platform.o ip32-setup.o ip32-reset.o \ |
| 7 | crime.o ip32-memory.o | 7 | crime.o ip32-memory.o |
| 8 | |||
| 9 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sgi-ip32/Platform b/arch/mips/sgi-ip32/Platform new file mode 100644 index 000000000000..0fea556f3641 --- /dev/null +++ b/arch/mips/sgi-ip32/Platform | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | # | ||
| 2 | # SGI-IP32 (O2) | ||
| 3 | # | ||
| 4 | # Set the load address to >= 80069000 if you want to leave space for symmon, | ||
| 5 | # 0xffffffff80004000 for production kernels. Note that the value must be aligned to | ||
| 6 | # a multiple of the kernel stack size or the handling of the current variable | ||
| 7 | # will break. | ||
| 8 | # | ||
| 9 | platform-$(CONFIG_SGI_IP32) += sgi-ip32/ | ||
| 10 | cflags-$(CONFIG_SGI_IP32) += -I$(srctree)/arch/mips/include/asm/mach-ip32 | ||
| 11 | load-$(CONFIG_SGI_IP32) += 0xffffffff80004000 | ||
diff --git a/arch/mips/sibyte/Makefile b/arch/mips/sibyte/Makefile new file mode 100644 index 000000000000..c8ed2c807e69 --- /dev/null +++ b/arch/mips/sibyte/Makefile | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | # | ||
| 2 | # Sibyte SB1250 / BCM1480 family of SOCs | ||
| 3 | # | ||
| 4 | obj-$(CONFIG_SIBYTE_BCM112X) += sb1250/ | ||
| 5 | obj-$(CONFIG_SIBYTE_BCM112X) += common/ | ||
| 6 | obj-$(CONFIG_SIBYTE_SB1250) += sb1250/ | ||
| 7 | obj-$(CONFIG_SIBYTE_SB1250) += common/ | ||
| 8 | obj-$(CONFIG_SIBYTE_BCM1x55) += bcm1480/ | ||
| 9 | obj-$(CONFIG_SIBYTE_BCM1x55) += common/ | ||
| 10 | obj-$(CONFIG_SIBYTE_BCM1x80) += bcm1480/ | ||
| 11 | obj-$(CONFIG_SIBYTE_BCM1x80) += common/ | ||
| 12 | |||
| 13 | # | ||
| 14 | # Sibyte BCM91120x (Carmel) board | ||
| 15 | # Sibyte BCM91120C (CRhine) board | ||
| 16 | # Sibyte BCM91125C (CRhone) board | ||
| 17 | # Sibyte BCM91125E (Rhone) board | ||
| 18 | # Sibyte SWARM board | ||
| 19 | # Sibyte BCM91x80 (BigSur) board | ||
| 20 | # | ||
| 21 | obj-$(CONFIG_SIBYTE_CARMEL) += swarm/ | ||
| 22 | obj-$(CONFIG_SIBYTE_CRHINE) += swarm/ | ||
| 23 | obj-$(CONFIG_SIBYTE_CRHONE) += swarm/ | ||
| 24 | obj-$(CONFIG_SIBYTE_RHONE) += swarm/ | ||
| 25 | obj-$(CONFIG_SIBYTE_SENTOSA) += swarm/ | ||
| 26 | obj-$(CONFIG_SIBYTE_SWARM) += swarm/ | ||
| 27 | obj-$(CONFIG_SIBYTE_BIGSUR) += swarm/ | ||
diff --git a/arch/mips/sibyte/Platform b/arch/mips/sibyte/Platform new file mode 100644 index 000000000000..911dfe39c631 --- /dev/null +++ b/arch/mips/sibyte/Platform | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | # | ||
| 2 | # These are all rather similar so we consider them a single platform | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_SIBYTE_BCM112X) += sibyte/ | ||
| 5 | platform-$(CONFIG_SIBYTE_SB1250) += sibyte/ | ||
| 6 | platform-$(CONFIG_SIBYTE_BCM1x55) += sibyte/ | ||
| 7 | platform-$(CONFIG_SIBYTE_BCM1x80) += sibyte/ | ||
| 8 | |||
| 9 | # | ||
| 10 | # Sibyte SB1250 / BCM1480 family of SOCs | ||
| 11 | # | ||
| 12 | cflags-$(CONFIG_SIBYTE_BCM112X) += \ | ||
| 13 | -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 14 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1250_112x_ALL | ||
| 15 | |||
| 16 | platform-$(CONFIG_SIBYTE_SB1250) += sibyte/ | ||
| 17 | cflags-$(CONFIG_SIBYTE_SB1250) += \ | ||
| 18 | -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 19 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1250_112x_ALL | ||
| 20 | |||
| 21 | cflags-$(CONFIG_SIBYTE_BCM1x55) += \ | ||
| 22 | -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 23 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1480_ALL | ||
| 24 | |||
| 25 | cflags-$(CONFIG_SIBYTE_BCM1x80) += \ | ||
| 26 | -I$(srctree)/arch/mips/include/asm/mach-sibyte \ | ||
| 27 | -DSIBYTE_HDR_FEATURES=SIBYTE_HDR_FMASK_1480_ALL | ||
| 28 | |||
| 29 | # | ||
| 30 | # Sibyte BCM91120x (Carmel) board | ||
| 31 | # Sibyte BCM91120C (CRhine) board | ||
| 32 | # Sibyte BCM91125C (CRhone) board | ||
| 33 | # Sibyte BCM91125E (Rhone) board | ||
| 34 | # Sibyte SWARM board | ||
| 35 | # Sibyte BCM91x80 (BigSur) board | ||
| 36 | # | ||
| 37 | load-$(CONFIG_SIBYTE_CARMEL) := 0xffffffff80100000 | ||
| 38 | load-$(CONFIG_SIBYTE_CRHINE) := 0xffffffff80100000 | ||
| 39 | load-$(CONFIG_SIBYTE_CRHONE) := 0xffffffff80100000 | ||
| 40 | load-$(CONFIG_SIBYTE_RHONE) := 0xffffffff80100000 | ||
| 41 | load-$(CONFIG_SIBYTE_SENTOSA) := 0xffffffff80100000 | ||
| 42 | load-$(CONFIG_SIBYTE_SWARM) := 0xffffffff80100000 | ||
| 43 | load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000 | ||
diff --git a/arch/mips/sibyte/bcm1480/Makefile b/arch/mips/sibyte/bcm1480/Makefile index f292f7df0cfb..cdc4c56c3e29 100644 --- a/arch/mips/sibyte/bcm1480/Makefile +++ b/arch/mips/sibyte/bcm1480/Makefile | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | obj-y := setup.o irq.o time.o | 1 | obj-y := setup.o irq.o time.o |
| 2 | 2 | ||
| 3 | obj-$(CONFIG_SMP) += smp.o | 3 | obj-$(CONFIG_SMP) += smp.o |
| 4 | |||
| 5 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sibyte/common/Makefile b/arch/mips/sibyte/common/Makefile index 4f659837c7c6..36aa700cc40c 100644 --- a/arch/mips/sibyte/common/Makefile +++ b/arch/mips/sibyte/common/Makefile | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | obj-y := cfe.o | 1 | obj-y := cfe.o |
| 2 | obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o | 2 | obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o |
| 3 | obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o | 3 | obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o |
| 4 | |||
| 5 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sibyte/sb1250/Makefile b/arch/mips/sibyte/sb1250/Makefile index 1896f4e77a30..d3d969de407b 100644 --- a/arch/mips/sibyte/sb1250/Makefile +++ b/arch/mips/sibyte/sb1250/Makefile | |||
| @@ -2,5 +2,3 @@ obj-y := setup.o irq.o time.o | |||
| 2 | 2 | ||
| 3 | obj-$(CONFIG_SMP) += smp.o | 3 | obj-$(CONFIG_SMP) += smp.o |
| 4 | obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o | 4 | obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o |
| 5 | |||
| 6 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sni/Makefile b/arch/mips/sni/Makefile index a7dbeebe7fe6..9d3bad3200ce 100644 --- a/arch/mips/sni/Makefile +++ b/arch/mips/sni/Makefile | |||
| @@ -4,5 +4,3 @@ | |||
| 4 | 4 | ||
| 5 | obj-y += irq.o reset.o setup.o a20r.o rm200.o pcimt.o pcit.o time.o | 5 | obj-y += irq.o reset.o setup.o a20r.o rm200.o pcimt.o pcit.o time.o |
| 6 | obj-$(CONFIG_EISA) += eisa.o | 6 | obj-$(CONFIG_EISA) += eisa.o |
| 7 | |||
| 8 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/sni/Platform b/arch/mips/sni/Platform new file mode 100644 index 000000000000..2644a9d63c0f --- /dev/null +++ b/arch/mips/sni/Platform | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | # | ||
| 2 | # SNI RM | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_SNI_RM) += sni/ | ||
| 5 | cflags-$(CONFIG_SNI_RM) += -I$(srctree)/arch/mips/include/asm/mach-rm | ||
| 6 | ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
| 7 | load-$(CONFIG_SNI_RM) += 0xffffffff80600000 | ||
| 8 | else | ||
| 9 | load-$(CONFIG_SNI_RM) += 0xffffffff80030000 | ||
| 10 | endif | ||
| 11 | all-$(CONFIG_SNI_RM) := $(COMPRESSION_FNAME).ecoff | ||
diff --git a/arch/mips/txx9/Makefile b/arch/mips/txx9/Makefile new file mode 100644 index 000000000000..34787dabff06 --- /dev/null +++ b/arch/mips/txx9/Makefile | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | # | ||
| 2 | # Common TXx9 | ||
| 3 | # | ||
| 4 | obj-$(CONFIG_MACH_TX39XX) += generic/ | ||
| 5 | obj-$(CONFIG_MACH_TX49XX) += generic/ | ||
| 6 | |||
| 7 | # | ||
| 8 | # Toshiba JMR-TX3927 board | ||
| 9 | # | ||
| 10 | obj-$(CONFIG_TOSHIBA_JMR3927) += jmr3927/ | ||
| 11 | |||
| 12 | # | ||
| 13 | # Toshiba RBTX49XX boards | ||
| 14 | # | ||
| 15 | obj-$(CONFIG_TOSHIBA_RBTX4927) += rbtx4927/ | ||
| 16 | obj-$(CONFIG_TOSHIBA_RBTX4938) += rbtx4938/ | ||
| 17 | obj-$(CONFIG_TOSHIBA_RBTX4939) += rbtx4939/ | ||
diff --git a/arch/mips/txx9/Platform b/arch/mips/txx9/Platform new file mode 100644 index 000000000000..a801abbe138b --- /dev/null +++ b/arch/mips/txx9/Platform | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | platform-$(CONFIG_MACH_TX39XX) += txx9/ | ||
| 2 | platform-$(CONFIG_MACH_TX49XX) += txx9/ | ||
| 3 | |||
| 4 | cflags-$(CONFIG_MACH_TX39XX) += \ | ||
| 5 | -I$(srctree)/arch/mips/include/asm/mach-tx39xx | ||
| 6 | cflags-$(CONFIG_MACH_TX49XX) += \ | ||
| 7 | -I$(srctree)/arch/mips/include/asm/mach-tx49xx | ||
| 8 | |||
| 9 | load-$(CONFIG_MACH_TX39XX) += 0xffffffff80050000 | ||
| 10 | load-$(CONFIG_MACH_TX49XX) += 0xffffffff80100000 | ||
diff --git a/arch/mips/txx9/generic/Makefile b/arch/mips/txx9/generic/Makefile index f2579ce054a1..1863c167e66e 100644 --- a/arch/mips/txx9/generic/Makefile +++ b/arch/mips/txx9/generic/Makefile | |||
| @@ -11,5 +11,3 @@ obj-$(CONFIG_SOC_TX4939) += setup_tx4939.o irq_tx4939.o | |||
| 11 | obj-$(CONFIG_TOSHIBA_FPCIB0) += smsc_fdc37m81x.o | 11 | obj-$(CONFIG_TOSHIBA_FPCIB0) += smsc_fdc37m81x.o |
| 12 | obj-$(CONFIG_SPI) += spi_eeprom.o | 12 | obj-$(CONFIG_SPI) += spi_eeprom.o |
| 13 | obj-$(CONFIG_TXX9_7SEGLED) += 7segled.o | 13 | obj-$(CONFIG_TXX9_7SEGLED) += 7segled.o |
| 14 | |||
| 15 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/txx9/jmr3927/Makefile b/arch/mips/txx9/jmr3927/Makefile index 20d61ac543e5..9f5d5b623839 100644 --- a/arch/mips/txx9/jmr3927/Makefile +++ b/arch/mips/txx9/jmr3927/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += prom.o irq.o setup.o | 5 | obj-y += prom.o irq.o setup.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/txx9/rbtx4927/Makefile b/arch/mips/txx9/rbtx4927/Makefile index f3e1f597b4f1..60b24c8f7e63 100644 --- a/arch/mips/txx9/rbtx4927/Makefile +++ b/arch/mips/txx9/rbtx4927/Makefile | |||
| @@ -1,3 +1 @@ | |||
| 1 | obj-y += prom.o setup.o irq.o | obj-y += prom.o setup.o irq.o | |
| 2 | |||
| 3 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/txx9/rbtx4938/Makefile b/arch/mips/txx9/rbtx4938/Makefile index f3e1f597b4f1..60b24c8f7e63 100644 --- a/arch/mips/txx9/rbtx4938/Makefile +++ b/arch/mips/txx9/rbtx4938/Makefile | |||
| @@ -1,3 +1 @@ | |||
| 1 | obj-y += prom.o setup.o irq.o | obj-y += prom.o setup.o irq.o | |
| 2 | |||
| 3 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/txx9/rbtx4939/Makefile b/arch/mips/txx9/rbtx4939/Makefile index 3232cd03a7d6..5c84625a3f1c 100644 --- a/arch/mips/txx9/rbtx4939/Makefile +++ b/arch/mips/txx9/rbtx4939/Makefile | |||
| @@ -1,3 +1 @@ | |||
| 1 | obj-y += irq.o setup.o prom.o | obj-y += irq.o setup.o prom.o | |
| 2 | |||
| 3 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/vr41xx/Platform b/arch/mips/vr41xx/Platform new file mode 100644 index 000000000000..b6c8d5c08ddb --- /dev/null +++ b/arch/mips/vr41xx/Platform | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | # | ||
| 2 | # NEC VR4100 series based machines | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_MACH_VR41XX) += vr41xx/common/ | ||
| 5 | cflags-$(CONFIG_MACH_VR41XX) += -I$(srctree)/arch/mips/include/asm/mach-vr41xx | ||
| 6 | |||
| 7 | # | ||
| 8 | # CASIO CASSIPEIA E-55/65 (VR4111) | ||
| 9 | # | ||
| 10 | platform-$(CONFIG_CASIO_E55) += vr41xx/casio-e55/ | ||
| 11 | load-$(CONFIG_CASIO_E55) += 0xffffffff80004000 | ||
| 12 | |||
| 13 | # | ||
| 14 | # IBM WorkPad z50 (VR4121) | ||
| 15 | # | ||
| 16 | platform-$(CONFIG_IBM_WORKPAD) += vr41xx/ibm-workpad/ | ||
| 17 | load-$(CONFIG_IBM_WORKPAD) += 0xffffffff80004000 | ||
| 18 | |||
| 19 | # | ||
| 20 | # TANBAC VR4131 multichip module(TB0225) and TANBAC VR4131DIMM(TB0229) (VR4131) | ||
| 21 | # | ||
| 22 | load-$(CONFIG_TANBAC_TB022X) += 0xffffffff80000000 | ||
| 23 | |||
| 24 | # | ||
| 25 | # Victor MP-C303/304 (VR4122) | ||
| 26 | # | ||
| 27 | load-$(CONFIG_VICTOR_MPC30X) += 0xffffffff80001000 | ||
| 28 | |||
| 29 | # | ||
| 30 | # ZAO Networks Capcella (VR4131) | ||
| 31 | # | ||
| 32 | load-$(CONFIG_ZAO_CAPCELLA) += 0xffffffff80000000 | ||
diff --git a/arch/mips/vr41xx/common/Makefile b/arch/mips/vr41xx/common/Makefile index 7d5d83b8c582..d0d84ec8d63d 100644 --- a/arch/mips/vr41xx/common/Makefile +++ b/arch/mips/vr41xx/common/Makefile | |||
| @@ -3,5 +3,3 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += bcu.o cmu.o giu.o icu.o init.o irq.o pmu.o rtc.o siu.o type.o | 5 | obj-y += bcu.o cmu.o giu.o icu.o init.o irq.o pmu.o rtc.o siu.o type.o |
| 6 | |||
| 7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/gt64120/wrppmc/Makefile b/arch/mips/wrppmc/Makefile index b49d282bee8a..307cc6920ce6 100644 --- a/arch/mips/gt64120/wrppmc/Makefile +++ b/arch/mips/wrppmc/Makefile | |||
| @@ -6,9 +6,7 @@ | |||
| 6 | # Copyright 2006 Wind River System, Inc. | 6 | # Copyright 2006 Wind River System, Inc. |
| 7 | # Author: Rongkai.Zhan <rongkai.zhan@windriver.com> | 7 | # Author: Rongkai.Zhan <rongkai.zhan@windriver.com> |
| 8 | # | 8 | # |
| 9 | # Makefile for the Wind River MIPS 4KC PPMC Eval Board | 9 | # Makefile for the Wind River MIPS 4Kc PPMC Eval Board |
| 10 | # | 10 | # |
| 11 | 11 | ||
| 12 | obj-y += irq.o pci.o reset.o serial.o setup.o time.o | 12 | obj-y += irq.o pci.o reset.o serial.o setup.o time.o |
| 13 | |||
| 14 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/wrppmc/Platform b/arch/mips/wrppmc/Platform new file mode 100644 index 000000000000..e758645e9681 --- /dev/null +++ b/arch/mips/wrppmc/Platform | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Wind River PPMC Board (4KC + GT64120) | ||
| 3 | # | ||
| 4 | platform-$(CONFIG_WR_PPMC) += wrppmc/ | ||
| 5 | cflags-$(CONFIG_WR_PPMC) += \ | ||
| 6 | -I$(srctree)/arch/mips/include/asm/mach-wrppmc | ||
| 7 | load-$(CONFIG_WR_PPMC) += 0xffffffff80100000 | ||
diff --git a/arch/mips/gt64120/wrppmc/irq.c b/arch/mips/wrppmc/irq.c index c6e706274db4..c6e706274db4 100644 --- a/arch/mips/gt64120/wrppmc/irq.c +++ b/arch/mips/wrppmc/irq.c | |||
diff --git a/arch/mips/gt64120/wrppmc/pci.c b/arch/mips/wrppmc/pci.c index d06192faeb7c..d06192faeb7c 100644 --- a/arch/mips/gt64120/wrppmc/pci.c +++ b/arch/mips/wrppmc/pci.c | |||
diff --git a/arch/mips/gt64120/wrppmc/reset.c b/arch/mips/wrppmc/reset.c index cc5474b24f06..cc5474b24f06 100644 --- a/arch/mips/gt64120/wrppmc/reset.c +++ b/arch/mips/wrppmc/reset.c | |||
diff --git a/arch/mips/gt64120/wrppmc/serial.c b/arch/mips/wrppmc/serial.c index 6f9d0858f596..6f9d0858f596 100644 --- a/arch/mips/gt64120/wrppmc/serial.c +++ b/arch/mips/wrppmc/serial.c | |||
diff --git a/arch/mips/gt64120/wrppmc/setup.c b/arch/mips/wrppmc/setup.c index ca65c84031a7..ca65c84031a7 100644 --- a/arch/mips/gt64120/wrppmc/setup.c +++ b/arch/mips/wrppmc/setup.c | |||
diff --git a/arch/mips/gt64120/wrppmc/time.c b/arch/mips/wrppmc/time.c index 668dbd5f12c5..668dbd5f12c5 100644 --- a/arch/mips/gt64120/wrppmc/time.c +++ b/arch/mips/wrppmc/time.c | |||
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2031a2846865..e4545f85ee9f 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -141,6 +141,7 @@ config PPC | |||
| 141 | select GENERIC_ATOMIC64 if PPC32 | 141 | select GENERIC_ATOMIC64 if PPC32 |
| 142 | select HAVE_PERF_EVENTS | 142 | select HAVE_PERF_EVENTS |
| 143 | select HAVE_REGS_AND_STACK_ACCESS_API | 143 | select HAVE_REGS_AND_STACK_ACCESS_API |
| 144 | select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 | ||
| 144 | 145 | ||
| 145 | config EARLY_PRINTK | 146 | config EARLY_PRINTK |
| 146 | bool | 147 | bool |
| @@ -218,7 +219,7 @@ config ARCH_HIBERNATION_POSSIBLE | |||
| 218 | config ARCH_SUSPEND_POSSIBLE | 219 | config ARCH_SUSPEND_POSSIBLE |
| 219 | def_bool y | 220 | def_bool y |
| 220 | depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_83xx || \ | 221 | depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_83xx || \ |
| 221 | PPC_85xx || PPC_86xx | 222 | PPC_85xx || PPC_86xx || PPC_PSERIES |
| 222 | 223 | ||
| 223 | config PPC_DCR_NATIVE | 224 | config PPC_DCR_NATIVE |
| 224 | bool | 225 | bool |
| @@ -351,7 +352,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE | |||
| 351 | 352 | ||
| 352 | config KEXEC | 353 | config KEXEC |
| 353 | bool "kexec system call (EXPERIMENTAL)" | 354 | bool "kexec system call (EXPERIMENTAL)" |
| 354 | depends on (PPC_BOOK3S || (FSL_BOOKE && !SMP)) && EXPERIMENTAL | 355 | depends on (PPC_BOOK3S || FSL_BOOKE) && EXPERIMENTAL |
| 355 | help | 356 | help |
| 356 | kexec is a system call that implements the ability to shutdown your | 357 | kexec is a system call that implements the ability to shutdown your |
| 357 | current kernel, and to start another kernel. It is like a reboot | 358 | current kernel, and to start another kernel. It is like a reboot |
| @@ -368,8 +369,8 @@ config KEXEC | |||
| 368 | 369 | ||
| 369 | config CRASH_DUMP | 370 | config CRASH_DUMP |
| 370 | bool "Build a kdump crash kernel" | 371 | bool "Build a kdump crash kernel" |
| 371 | depends on PPC64 || 6xx | 372 | depends on PPC64 || 6xx || FSL_BOOKE |
| 372 | select RELOCATABLE if PPC64 | 373 | select RELOCATABLE if PPC64 || FSL_BOOKE |
| 373 | help | 374 | help |
| 374 | Build a kernel suitable for use as a kdump capture kernel. | 375 | Build a kernel suitable for use as a kdump capture kernel. |
| 375 | The same kernel binary can be used as production kernel and dump | 376 | The same kernel binary can be used as production kernel and dump |
| @@ -668,7 +669,7 @@ config NEED_SG_DMA_LENGTH | |||
| 668 | 669 | ||
| 669 | config GENERIC_ISA_DMA | 670 | config GENERIC_ISA_DMA |
| 670 | bool | 671 | bool |
| 671 | depends on PPC64 || POWER4 || 6xx && !CPM2 | 672 | depends on ISA_DMA_API |
| 672 | default y | 673 | default y |
| 673 | 674 | ||
| 674 | config PPC_INDIRECT_PCI | 675 | config PPC_INDIRECT_PCI |
| @@ -897,7 +898,7 @@ config KERNEL_START_BOOL | |||
| 897 | config KERNEL_START | 898 | config KERNEL_START |
| 898 | hex "Virtual address of kernel base" if KERNEL_START_BOOL | 899 | hex "Virtual address of kernel base" if KERNEL_START_BOOL |
| 899 | default PAGE_OFFSET if PAGE_OFFSET_BOOL | 900 | default PAGE_OFFSET if PAGE_OFFSET_BOOL |
| 900 | default "0xc2000000" if CRASH_DUMP | 901 | default "0xc2000000" if CRASH_DUMP && !RELOCATABLE |
| 901 | default "0xc0000000" | 902 | default "0xc0000000" |
| 902 | 903 | ||
| 903 | config PHYSICAL_START_BOOL | 904 | config PHYSICAL_START_BOOL |
| @@ -910,7 +911,7 @@ config PHYSICAL_START_BOOL | |||
| 910 | 911 | ||
| 911 | config PHYSICAL_START | 912 | config PHYSICAL_START |
| 912 | hex "Physical address where the kernel is loaded" if PHYSICAL_START_BOOL | 913 | hex "Physical address where the kernel is loaded" if PHYSICAL_START_BOOL |
| 913 | default "0x02000000" if PPC_STD_MMU && CRASH_DUMP | 914 | default "0x02000000" if PPC_STD_MMU && CRASH_DUMP && !RELOCATABLE |
| 914 | default "0x00000000" | 915 | default "0x00000000" |
| 915 | 916 | ||
| 916 | config PHYSICAL_ALIGN | 917 | config PHYSICAL_ALIGN |
diff --git a/arch/powerpc/boot/dts/canyonlands.dts b/arch/powerpc/boot/dts/canyonlands.dts index cd56bb5b347b..5806ef0b860b 100644 --- a/arch/powerpc/boot/dts/canyonlands.dts +++ b/arch/powerpc/boot/dts/canyonlands.dts | |||
| @@ -270,7 +270,7 @@ | |||
| 270 | clock-frequency = <0>; /* Filled in by U-Boot */ | 270 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 271 | current-speed = <0>; /* Filled in by U-Boot */ | 271 | current-speed = <0>; /* Filled in by U-Boot */ |
| 272 | interrupt-parent = <&UIC1>; | 272 | interrupt-parent = <&UIC1>; |
| 273 | interrupts = <0x1d 0x4>; | 273 | interrupts = <28 0x4>; |
| 274 | }; | 274 | }; |
| 275 | 275 | ||
| 276 | UART3: serial@ef600600 { | 276 | UART3: serial@ef600600 { |
| @@ -281,7 +281,7 @@ | |||
| 281 | clock-frequency = <0>; /* Filled in by U-Boot */ | 281 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 282 | current-speed = <0>; /* Filled in by U-Boot */ | 282 | current-speed = <0>; /* Filled in by U-Boot */ |
| 283 | interrupt-parent = <&UIC1>; | 283 | interrupt-parent = <&UIC1>; |
| 284 | interrupts = <0x1e 0x4>; | 284 | interrupts = <29 0x4>; |
| 285 | }; | 285 | }; |
| 286 | 286 | ||
| 287 | IIC0: i2c@ef600700 { | 287 | IIC0: i2c@ef600700 { |
diff --git a/arch/powerpc/boot/dts/glacier.dts b/arch/powerpc/boot/dts/glacier.dts index d62a4fb6f93c..e618fc4cbc9e 100644 --- a/arch/powerpc/boot/dts/glacier.dts +++ b/arch/powerpc/boot/dts/glacier.dts | |||
| @@ -259,7 +259,7 @@ | |||
| 259 | clock-frequency = <0>; /* Filled in by U-Boot */ | 259 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 260 | current-speed = <0>; /* Filled in by U-Boot */ | 260 | current-speed = <0>; /* Filled in by U-Boot */ |
| 261 | interrupt-parent = <&UIC1>; | 261 | interrupt-parent = <&UIC1>; |
| 262 | interrupts = <0x1d 0x4>; | 262 | interrupts = <28 0x4>; |
| 263 | }; | 263 | }; |
| 264 | 264 | ||
| 265 | UART3: serial@ef600600 { | 265 | UART3: serial@ef600600 { |
| @@ -270,7 +270,7 @@ | |||
| 270 | clock-frequency = <0>; /* Filled in by U-Boot */ | 270 | clock-frequency = <0>; /* Filled in by U-Boot */ |
| 271 | current-speed = <0>; /* Filled in by U-Boot */ | 271 | current-speed = <0>; /* Filled in by U-Boot */ |
| 272 | interrupt-parent = <&UIC1>; | 272 | interrupt-parent = <&UIC1>; |
| 273 | interrupts = <0x1e 0x4>; | 273 | interrupts = <29 0x4>; |
| 274 | }; | 274 | }; |
| 275 | 275 | ||
| 276 | IIC0: i2c@ef600700 { | 276 | IIC0: i2c@ef600700 { |
diff --git a/arch/powerpc/boot/dts/mpc8308rdb.dts b/arch/powerpc/boot/dts/mpc8308rdb.dts new file mode 100644 index 000000000000..a97eb2db5a18 --- /dev/null +++ b/arch/powerpc/boot/dts/mpc8308rdb.dts | |||
| @@ -0,0 +1,303 @@ | |||
| 1 | /* | ||
| 2 | * MPC8308RDB Device Tree Source | ||
| 3 | * | ||
| 4 | * Copyright 2009 Freescale Semiconductor Inc. | ||
| 5 | * Copyright 2010 Ilya Yanok, Emcraft Systems, yanok@emcraft.com | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | /dts-v1/; | ||
| 14 | |||
| 15 | / { | ||
| 16 | compatible = "fsl,mpc8308rdb"; | ||
| 17 | #address-cells = <1>; | ||
| 18 | #size-cells = <1>; | ||
| 19 | |||
| 20 | aliases { | ||
| 21 | ethernet0 = &enet0; | ||
| 22 | ethernet1 = &enet1; | ||
| 23 | serial0 = &serial0; | ||
| 24 | serial1 = &serial1; | ||
| 25 | pci0 = &pci0; | ||
| 26 | }; | ||
| 27 | |||
| 28 | cpus { | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <0>; | ||
| 31 | |||
| 32 | PowerPC,8308@0 { | ||
| 33 | device_type = "cpu"; | ||
| 34 | reg = <0x0>; | ||
| 35 | d-cache-line-size = <32>; | ||
| 36 | i-cache-line-size = <32>; | ||
| 37 | d-cache-size = <16384>; | ||
| 38 | i-cache-size = <16384>; | ||
| 39 | timebase-frequency = <0>; // from bootloader | ||
| 40 | bus-frequency = <0>; // from bootloader | ||
| 41 | clock-frequency = <0>; // from bootloader | ||
| 42 | }; | ||
| 43 | }; | ||
| 44 | |||
| 45 | memory { | ||
| 46 | device_type = "memory"; | ||
| 47 | reg = <0x00000000 0x08000000>; // 128MB at 0 | ||
| 48 | }; | ||
| 49 | |||
| 50 | localbus@e0005000 { | ||
| 51 | #address-cells = <2>; | ||
| 52 | #size-cells = <1>; | ||
| 53 | compatible = "fsl,mpc8315-elbc", "fsl,elbc", "simple-bus"; | ||
| 54 | reg = <0xe0005000 0x1000>; | ||
| 55 | interrupts = <77 0x8>; | ||
| 56 | interrupt-parent = <&ipic>; | ||
| 57 | |||
| 58 | // CS0 and CS1 are swapped when | ||
| 59 | // booting from nand, but the | ||
| 60 | // addresses are the same. | ||
| 61 | ranges = <0x0 0x0 0xfe000000 0x00800000 | ||
| 62 | 0x1 0x0 0xe0600000 0x00002000 | ||
| 63 | 0x2 0x0 0xf0000000 0x00020000 | ||
| 64 | 0x3 0x0 0xfa000000 0x00008000>; | ||
| 65 | |||
| 66 | flash@0,0 { | ||
| 67 | #address-cells = <1>; | ||
| 68 | #size-cells = <1>; | ||
| 69 | compatible = "cfi-flash"; | ||
| 70 | reg = <0x0 0x0 0x800000>; | ||
| 71 | bank-width = <2>; | ||
| 72 | device-width = <1>; | ||
| 73 | |||
| 74 | u-boot@0 { | ||
| 75 | reg = <0x0 0x60000>; | ||
| 76 | read-only; | ||
| 77 | }; | ||
| 78 | env@60000 { | ||
| 79 | reg = <0x60000 0x10000>; | ||
| 80 | }; | ||
| 81 | env1@70000 { | ||
| 82 | reg = <0x70000 0x10000>; | ||
| 83 | }; | ||
| 84 | kernel@80000 { | ||
| 85 | reg = <0x80000 0x200000>; | ||
| 86 | }; | ||
| 87 | dtb@280000 { | ||
| 88 | reg = <0x280000 0x10000>; | ||
| 89 | }; | ||
| 90 | ramdisk@290000 { | ||
| 91 | reg = <0x290000 0x570000>; | ||
| 92 | }; | ||
| 93 | }; | ||
| 94 | |||
| 95 | nand@1,0 { | ||
| 96 | #address-cells = <1>; | ||
| 97 | #size-cells = <1>; | ||
| 98 | compatible = "fsl,mpc8315-fcm-nand", | ||
| 99 | "fsl,elbc-fcm-nand"; | ||
| 100 | reg = <0x1 0x0 0x2000>; | ||
| 101 | |||
| 102 | jffs2@0 { | ||
| 103 | reg = <0x0 0x2000000>; | ||
| 104 | }; | ||
| 105 | }; | ||
| 106 | }; | ||
| 107 | |||
| 108 | immr@e0000000 { | ||
| 109 | #address-cells = <1>; | ||
| 110 | #size-cells = <1>; | ||
| 111 | device_type = "soc"; | ||
| 112 | compatible = "fsl,mpc8315-immr", "simple-bus"; | ||
| 113 | ranges = <0 0xe0000000 0x00100000>; | ||
| 114 | reg = <0xe0000000 0x00000200>; | ||
| 115 | bus-frequency = <0>; | ||
| 116 | |||
| 117 | i2c@3000 { | ||
| 118 | #address-cells = <1>; | ||
| 119 | #size-cells = <0>; | ||
| 120 | cell-index = <0>; | ||
| 121 | compatible = "fsl-i2c"; | ||
| 122 | reg = <0x3000 0x100>; | ||
| 123 | interrupts = <14 0x8>; | ||
| 124 | interrupt-parent = <&ipic>; | ||
| 125 | dfsrr; | ||
| 126 | rtc@68 { | ||
| 127 | compatible = "dallas,ds1339"; | ||
| 128 | reg = <0x68>; | ||
| 129 | }; | ||
| 130 | }; | ||
| 131 | |||
| 132 | usb@23000 { | ||
| 133 | compatible = "fsl-usb2-dr"; | ||
| 134 | reg = <0x23000 0x1000>; | ||
| 135 | #address-cells = <1>; | ||
| 136 | #size-cells = <0>; | ||
| 137 | interrupt-parent = <&ipic>; | ||
| 138 | interrupts = <38 0x8>; | ||
| 139 | dr_mode = "peripheral"; | ||
| 140 | phy_type = "ulpi"; | ||
| 141 | }; | ||
| 142 | |||
| 143 | enet0: ethernet@24000 { | ||
| 144 | #address-cells = <1>; | ||
| 145 | #size-cells = <1>; | ||
| 146 | ranges = <0x0 0x24000 0x1000>; | ||
| 147 | |||
| 148 | cell-index = <0>; | ||
| 149 | device_type = "network"; | ||
| 150 | model = "eTSEC"; | ||
| 151 | compatible = "gianfar"; | ||
| 152 | reg = <0x24000 0x1000>; | ||
| 153 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 154 | interrupts = <32 0x8 33 0x8 34 0x8>; | ||
| 155 | interrupt-parent = <&ipic>; | ||
| 156 | tbi-handle = < &tbi0 >; | ||
| 157 | phy-handle = < &phy2 >; | ||
| 158 | fsl,magic-packet; | ||
| 159 | |||
| 160 | mdio@520 { | ||
| 161 | #address-cells = <1>; | ||
| 162 | #size-cells = <0>; | ||
| 163 | compatible = "fsl,gianfar-mdio"; | ||
| 164 | reg = <0x520 0x20>; | ||
| 165 | phy2: ethernet-phy@2 { | ||
| 166 | interrupt-parent = <&ipic>; | ||
| 167 | interrupts = <17 0x8>; | ||
| 168 | reg = <0x2>; | ||
| 169 | device_type = "ethernet-phy"; | ||
| 170 | }; | ||
| 171 | tbi0: tbi-phy@11 { | ||
| 172 | reg = <0x11>; | ||
| 173 | device_type = "tbi-phy"; | ||
| 174 | }; | ||
| 175 | }; | ||
| 176 | }; | ||
| 177 | |||
| 178 | enet1: ethernet@25000 { | ||
| 179 | #address-cells = <1>; | ||
| 180 | #size-cells = <1>; | ||
| 181 | cell-index = <1>; | ||
| 182 | device_type = "network"; | ||
| 183 | model = "eTSEC"; | ||
| 184 | compatible = "gianfar"; | ||
| 185 | reg = <0x25000 0x1000>; | ||
| 186 | ranges = <0x0 0x25000 0x1000>; | ||
| 187 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 188 | interrupts = <35 0x8 36 0x8 37 0x8>; | ||
| 189 | interrupt-parent = <&ipic>; | ||
| 190 | tbi-handle = < &tbi1 >; | ||
| 191 | /* Vitesse 7385 isn't on the MDIO bus */ | ||
| 192 | fixed-link = <1 1 1000 0 0>; | ||
| 193 | fsl,magic-packet; | ||
| 194 | |||
| 195 | mdio@520 { | ||
| 196 | #address-cells = <1>; | ||
| 197 | #size-cells = <0>; | ||
| 198 | compatible = "fsl,gianfar-tbi"; | ||
| 199 | reg = <0x520 0x20>; | ||
| 200 | |||
| 201 | tbi1: tbi-phy@11 { | ||
| 202 | reg = <0x11>; | ||
| 203 | device_type = "tbi-phy"; | ||
| 204 | }; | ||
| 205 | }; | ||
| 206 | }; | ||
| 207 | |||
| 208 | serial0: serial@4500 { | ||
| 209 | cell-index = <0>; | ||
| 210 | device_type = "serial"; | ||
| 211 | compatible = "ns16550"; | ||
| 212 | reg = <0x4500 0x100>; | ||
| 213 | clock-frequency = <133333333>; | ||
| 214 | interrupts = <9 0x8>; | ||
| 215 | interrupt-parent = <&ipic>; | ||
| 216 | }; | ||
| 217 | |||
| 218 | serial1: serial@4600 { | ||
| 219 | cell-index = <1>; | ||
| 220 | device_type = "serial"; | ||
| 221 | compatible = "ns16550"; | ||
| 222 | reg = <0x4600 0x100>; | ||
| 223 | clock-frequency = <133333333>; | ||
| 224 | interrupts = <10 0x8>; | ||
| 225 | interrupt-parent = <&ipic>; | ||
| 226 | }; | ||
| 227 | |||
| 228 | gpio@c00 { | ||
| 229 | #gpio-cells = <2>; | ||
| 230 | device_type = "gpio"; | ||
| 231 | compatible = "fsl,mpc8308-gpio", "fsl,mpc8349-gpio"; | ||
| 232 | reg = <0xc00 0x18>; | ||
| 233 | interrupts = <74 0x8>; | ||
| 234 | interrupt-parent = <&ipic>; | ||
| 235 | gpio-controller; | ||
| 236 | }; | ||
| 237 | |||
| 238 | /* IPIC | ||
| 239 | * interrupts cell = <intr #, sense> | ||
| 240 | * sense values match linux IORESOURCE_IRQ_* defines: | ||
| 241 | * sense == 8: Level, low assertion | ||
| 242 | * sense == 2: Edge, high-to-low change | ||
| 243 | */ | ||
| 244 | ipic: interrupt-controller@700 { | ||
| 245 | compatible = "fsl,ipic"; | ||
| 246 | interrupt-controller; | ||
| 247 | #address-cells = <0>; | ||
| 248 | #interrupt-cells = <2>; | ||
| 249 | reg = <0x700 0x100>; | ||
| 250 | device_type = "ipic"; | ||
| 251 | }; | ||
| 252 | |||
| 253 | ipic-msi@7c0 { | ||
| 254 | compatible = "fsl,ipic-msi"; | ||
| 255 | reg = <0x7c0 0x40>; | ||
| 256 | msi-available-ranges = <0x0 0x100>; | ||
| 257 | interrupts = < 0x43 0x8 | ||
| 258 | 0x4 0x8 | ||
| 259 | 0x51 0x8 | ||
| 260 | 0x52 0x8 | ||
| 261 | 0x56 0x8 | ||
| 262 | 0x57 0x8 | ||
| 263 | 0x58 0x8 | ||
| 264 | 0x59 0x8 >; | ||
| 265 | interrupt-parent = < &ipic >; | ||
| 266 | }; | ||
| 267 | |||
| 268 | }; | ||
| 269 | |||
| 270 | pci0: pcie@e0009000 { | ||
| 271 | #address-cells = <3>; | ||
| 272 | #size-cells = <2>; | ||
| 273 | #interrupt-cells = <1>; | ||
| 274 | device_type = "pci"; | ||
| 275 | compatible = "fsl,mpc8308-pcie", "fsl,mpc8314-pcie"; | ||
| 276 | reg = <0xe0009000 0x00001000 | ||
| 277 | 0xb0000000 0x01000000>; | ||
| 278 | ranges = <0x02000000 0 0xa0000000 0xa0000000 0 0x10000000 | ||
| 279 | 0x01000000 0 0x00000000 0xb1000000 0 0x00800000>; | ||
| 280 | bus-range = <0 0>; | ||
| 281 | interrupt-map-mask = <0xf800 0 0 7>; | ||
| 282 | interrupt-map = <0 0 0 1 &ipic 1 8 | ||
| 283 | 0 0 0 2 &ipic 1 8 | ||
| 284 | 0 0 0 3 &ipic 1 8 | ||
| 285 | 0 0 0 4 &ipic 1 8>; | ||
| 286 | interrupts = <0x1 0x8>; | ||
| 287 | interrupt-parent = <&ipic>; | ||
| 288 | clock-frequency = <0>; | ||
| 289 | |||
| 290 | pcie@0 { | ||
| 291 | #address-cells = <3>; | ||
| 292 | #size-cells = <2>; | ||
| 293 | device_type = "pci"; | ||
| 294 | reg = <0 0 0 0 0>; | ||
| 295 | ranges = <0x02000000 0 0xa0000000 | ||
| 296 | 0x02000000 0 0xa0000000 | ||
| 297 | 0 0x10000000 | ||
| 298 | 0x01000000 0 0x00000000 | ||
| 299 | 0x01000000 0 0x00000000 | ||
| 300 | 0 0x00800000>; | ||
| 301 | }; | ||
| 302 | }; | ||
| 303 | }; | ||
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts index 9dc292962a9a..8d1bf0fd9268 100644 --- a/arch/powerpc/boot/dts/mpc8540ads.dts +++ b/arch/powerpc/boot/dts/mpc8540ads.dts | |||
| @@ -71,14 +71,14 @@ | |||
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | memory-controller@2000 { | 73 | memory-controller@2000 { |
| 74 | compatible = "fsl,8540-memory-controller"; | 74 | compatible = "fsl,mpc8540-memory-controller"; |
| 75 | reg = <0x2000 0x1000>; | 75 | reg = <0x2000 0x1000>; |
| 76 | interrupt-parent = <&mpic>; | 76 | interrupt-parent = <&mpic>; |
| 77 | interrupts = <18 2>; | 77 | interrupts = <18 2>; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | L2: l2-cache-controller@20000 { | 80 | L2: l2-cache-controller@20000 { |
| 81 | compatible = "fsl,8540-l2-cache-controller"; | 81 | compatible = "fsl,mpc8540-l2-cache-controller"; |
| 82 | reg = <0x20000 0x1000>; | 82 | reg = <0x20000 0x1000>; |
| 83 | cache-line-size = <32>; // 32 bytes | 83 | cache-line-size = <32>; // 32 bytes |
| 84 | cache-size = <0x40000>; // L2, 256K | 84 | cache-size = <0x40000>; // L2, 256K |
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts index 9a3ad311aedf..87ff96549fac 100644 --- a/arch/powerpc/boot/dts/mpc8541cds.dts +++ b/arch/powerpc/boot/dts/mpc8541cds.dts | |||
| @@ -71,14 +71,14 @@ | |||
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | memory-controller@2000 { | 73 | memory-controller@2000 { |
| 74 | compatible = "fsl,8541-memory-controller"; | 74 | compatible = "fsl,mpc8541-memory-controller"; |
| 75 | reg = <0x2000 0x1000>; | 75 | reg = <0x2000 0x1000>; |
| 76 | interrupt-parent = <&mpic>; | 76 | interrupt-parent = <&mpic>; |
| 77 | interrupts = <18 2>; | 77 | interrupts = <18 2>; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | L2: l2-cache-controller@20000 { | 80 | L2: l2-cache-controller@20000 { |
| 81 | compatible = "fsl,8541-l2-cache-controller"; | 81 | compatible = "fsl,mpc8541-l2-cache-controller"; |
| 82 | reg = <0x20000 0x1000>; | 82 | reg = <0x20000 0x1000>; |
| 83 | cache-line-size = <32>; // 32 bytes | 83 | cache-line-size = <32>; // 32 bytes |
| 84 | cache-size = <0x40000>; // L2, 256K | 84 | cache-size = <0x40000>; // L2, 256K |
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts index 98e94b465662..d793968743c9 100644 --- a/arch/powerpc/boot/dts/mpc8544ds.dts +++ b/arch/powerpc/boot/dts/mpc8544ds.dts | |||
| @@ -73,14 +73,14 @@ | |||
| 73 | }; | 73 | }; |
| 74 | 74 | ||
| 75 | memory-controller@2000 { | 75 | memory-controller@2000 { |
| 76 | compatible = "fsl,8544-memory-controller"; | 76 | compatible = "fsl,mpc8544-memory-controller"; |
| 77 | reg = <0x2000 0x1000>; | 77 | reg = <0x2000 0x1000>; |
| 78 | interrupt-parent = <&mpic>; | 78 | interrupt-parent = <&mpic>; |
| 79 | interrupts = <18 2>; | 79 | interrupts = <18 2>; |
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | L2: l2-cache-controller@20000 { | 82 | L2: l2-cache-controller@20000 { |
| 83 | compatible = "fsl,8544-l2-cache-controller"; | 83 | compatible = "fsl,mpc8544-l2-cache-controller"; |
| 84 | reg = <0x20000 0x1000>; | 84 | reg = <0x20000 0x1000>; |
| 85 | cache-line-size = <32>; // 32 bytes | 85 | cache-line-size = <32>; // 32 bytes |
| 86 | cache-size = <0x40000>; // L2, 256K | 86 | cache-size = <0x40000>; // L2, 256K |
diff --git a/arch/powerpc/boot/dts/mpc8548cds.dts b/arch/powerpc/boot/dts/mpc8548cds.dts index 0f5262452682..a17a5572fb73 100644 --- a/arch/powerpc/boot/dts/mpc8548cds.dts +++ b/arch/powerpc/boot/dts/mpc8548cds.dts | |||
| @@ -74,14 +74,14 @@ | |||
| 74 | }; | 74 | }; |
| 75 | 75 | ||
| 76 | memory-controller@2000 { | 76 | memory-controller@2000 { |
| 77 | compatible = "fsl,8548-memory-controller"; | 77 | compatible = "fsl,mpc8548-memory-controller"; |
| 78 | reg = <0x2000 0x1000>; | 78 | reg = <0x2000 0x1000>; |
| 79 | interrupt-parent = <&mpic>; | 79 | interrupt-parent = <&mpic>; |
| 80 | interrupts = <18 2>; | 80 | interrupts = <18 2>; |
| 81 | }; | 81 | }; |
| 82 | 82 | ||
| 83 | L2: l2-cache-controller@20000 { | 83 | L2: l2-cache-controller@20000 { |
| 84 | compatible = "fsl,8548-l2-cache-controller"; | 84 | compatible = "fsl,mpc8548-l2-cache-controller"; |
| 85 | reg = <0x20000 0x1000>; | 85 | reg = <0x20000 0x1000>; |
| 86 | cache-line-size = <32>; // 32 bytes | 86 | cache-line-size = <32>; // 32 bytes |
| 87 | cache-size = <0x80000>; // L2, 512K | 87 | cache-size = <0x80000>; // L2, 512K |
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts index 065b2f093de2..5c5614f9eb17 100644 --- a/arch/powerpc/boot/dts/mpc8555cds.dts +++ b/arch/powerpc/boot/dts/mpc8555cds.dts | |||
| @@ -71,14 +71,14 @@ | |||
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | memory-controller@2000 { | 73 | memory-controller@2000 { |
| 74 | compatible = "fsl,8555-memory-controller"; | 74 | compatible = "fsl,mpc8555-memory-controller"; |
| 75 | reg = <0x2000 0x1000>; | 75 | reg = <0x2000 0x1000>; |
| 76 | interrupt-parent = <&mpic>; | 76 | interrupt-parent = <&mpic>; |
| 77 | interrupts = <18 2>; | 77 | interrupts = <18 2>; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | L2: l2-cache-controller@20000 { | 80 | L2: l2-cache-controller@20000 { |
| 81 | compatible = "fsl,8555-l2-cache-controller"; | 81 | compatible = "fsl,mpc8555-l2-cache-controller"; |
| 82 | reg = <0x20000 0x1000>; | 82 | reg = <0x20000 0x1000>; |
| 83 | cache-line-size = <32>; // 32 bytes | 83 | cache-line-size = <32>; // 32 bytes |
| 84 | cache-size = <0x40000>; // L2, 256K | 84 | cache-size = <0x40000>; // L2, 256K |
diff --git a/arch/powerpc/boot/dts/mpc8560ads.dts b/arch/powerpc/boot/dts/mpc8560ads.dts index a5bb1ec70a5a..6e85e1ba0851 100644 --- a/arch/powerpc/boot/dts/mpc8560ads.dts +++ b/arch/powerpc/boot/dts/mpc8560ads.dts | |||
| @@ -71,14 +71,14 @@ | |||
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | memory-controller@2000 { | 73 | memory-controller@2000 { |
| 74 | compatible = "fsl,8540-memory-controller"; | 74 | compatible = "fsl,mpc8540-memory-controller"; |
| 75 | reg = <0x2000 0x1000>; | 75 | reg = <0x2000 0x1000>; |
| 76 | interrupt-parent = <&mpic>; | 76 | interrupt-parent = <&mpic>; |
| 77 | interrupts = <18 2>; | 77 | interrupts = <18 2>; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | L2: l2-cache-controller@20000 { | 80 | L2: l2-cache-controller@20000 { |
| 81 | compatible = "fsl,8540-l2-cache-controller"; | 81 | compatible = "fsl,mpc8540-l2-cache-controller"; |
| 82 | reg = <0x20000 0x1000>; | 82 | reg = <0x20000 0x1000>; |
| 83 | cache-line-size = <32>; // 32 bytes | 83 | cache-line-size = <32>; // 32 bytes |
| 84 | cache-size = <0x40000>; // L2, 256K | 84 | cache-size = <0x40000>; // L2, 256K |
diff --git a/arch/powerpc/boot/dts/mpc8568mds.dts b/arch/powerpc/boot/dts/mpc8568mds.dts index 92fb17876e7d..30cf0e098bb9 100644 --- a/arch/powerpc/boot/dts/mpc8568mds.dts +++ b/arch/powerpc/boot/dts/mpc8568mds.dts | |||
| @@ -124,14 +124,14 @@ | |||
| 124 | }; | 124 | }; |
| 125 | 125 | ||
| 126 | memory-controller@2000 { | 126 | memory-controller@2000 { |
| 127 | compatible = "fsl,8568-memory-controller"; | 127 | compatible = "fsl,mpc8568-memory-controller"; |
| 128 | reg = <0x2000 0x1000>; | 128 | reg = <0x2000 0x1000>; |
| 129 | interrupt-parent = <&mpic>; | 129 | interrupt-parent = <&mpic>; |
| 130 | interrupts = <18 2>; | 130 | interrupts = <18 2>; |
| 131 | }; | 131 | }; |
| 132 | 132 | ||
| 133 | L2: l2-cache-controller@20000 { | 133 | L2: l2-cache-controller@20000 { |
| 134 | compatible = "fsl,8568-l2-cache-controller"; | 134 | compatible = "fsl,mpc8568-l2-cache-controller"; |
| 135 | reg = <0x20000 0x1000>; | 135 | reg = <0x20000 0x1000>; |
| 136 | cache-line-size = <32>; // 32 bytes | 136 | cache-line-size = <32>; // 32 bytes |
| 137 | cache-size = <0x80000>; // L2, 512K | 137 | cache-size = <0x80000>; // L2, 512K |
diff --git a/arch/powerpc/boot/dts/p1021mds.dts b/arch/powerpc/boot/dts/p1021mds.dts index 7fad2df25981..ad5b85269004 100644 --- a/arch/powerpc/boot/dts/p1021mds.dts +++ b/arch/powerpc/boot/dts/p1021mds.dts | |||
| @@ -617,6 +617,7 @@ | |||
| 617 | bus-frequency = <0>; | 617 | bus-frequency = <0>; |
| 618 | fsl,qe-num-riscs = <1>; | 618 | fsl,qe-num-riscs = <1>; |
| 619 | fsl,qe-num-snums = <28>; | 619 | fsl,qe-num-snums = <28>; |
| 620 | status = "disabled"; /* no firmware loaded */ | ||
| 620 | 621 | ||
| 621 | qeic: interrupt-controller@80 { | 622 | qeic: interrupt-controller@80 { |
| 622 | interrupt-controller; | 623 | interrupt-controller; |
diff --git a/arch/powerpc/boot/dts/p1022ds.dts b/arch/powerpc/boot/dts/p1022ds.dts new file mode 100644 index 000000000000..8bcb10b92677 --- /dev/null +++ b/arch/powerpc/boot/dts/p1022ds.dts | |||
| @@ -0,0 +1,633 @@ | |||
| 1 | /* | ||
| 2 | * P1022 DS 36Bit Physical Address Map Device Tree Source | ||
| 3 | * | ||
| 4 | * Copyright 2010 Freescale Semiconductor, Inc. | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public License | ||
| 7 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 8 | * kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | /dts-v1/; | ||
| 12 | / { | ||
| 13 | model = "fsl,P1022"; | ||
| 14 | compatible = "fsl,P1022DS"; | ||
| 15 | #address-cells = <2>; | ||
| 16 | #size-cells = <2>; | ||
| 17 | interrupt-parent = <&mpic>; | ||
| 18 | |||
| 19 | aliases { | ||
| 20 | ethernet0 = &enet0; | ||
| 21 | ethernet1 = &enet1; | ||
| 22 | serial0 = &serial0; | ||
| 23 | serial1 = &serial1; | ||
| 24 | pci0 = &pci0; | ||
| 25 | pci1 = &pci1; | ||
| 26 | pci2 = &pci2; | ||
| 27 | }; | ||
| 28 | |||
| 29 | cpus { | ||
| 30 | #address-cells = <1>; | ||
| 31 | #size-cells = <0>; | ||
| 32 | |||
| 33 | PowerPC,P1022@0 { | ||
| 34 | device_type = "cpu"; | ||
| 35 | reg = <0x0>; | ||
| 36 | next-level-cache = <&L2>; | ||
| 37 | }; | ||
| 38 | |||
| 39 | PowerPC,P1022@1 { | ||
| 40 | device_type = "cpu"; | ||
| 41 | reg = <0x1>; | ||
| 42 | next-level-cache = <&L2>; | ||
| 43 | }; | ||
| 44 | }; | ||
| 45 | |||
| 46 | memory { | ||
| 47 | device_type = "memory"; | ||
| 48 | }; | ||
| 49 | |||
| 50 | localbus@fffe05000 { | ||
| 51 | #address-cells = <2>; | ||
| 52 | #size-cells = <1>; | ||
| 53 | compatible = "fsl,p1022-elbc", "fsl,elbc", "simple-bus"; | ||
| 54 | reg = <0 0xffe05000 0 0x1000>; | ||
| 55 | interrupts = <19 2>; | ||
| 56 | |||
| 57 | ranges = <0x0 0x0 0xf 0xe8000000 0x08000000 | ||
| 58 | 0x1 0x0 0xf 0xe0000000 0x08000000 | ||
| 59 | 0x2 0x0 0x0 0xffa00000 0x00040000 | ||
| 60 | 0x3 0x0 0xf 0xffdf0000 0x00008000>; | ||
| 61 | |||
| 62 | nor@0,0 { | ||
| 63 | #address-cells = <1>; | ||
| 64 | #size-cells = <1>; | ||
| 65 | compatible = "cfi-flash"; | ||
| 66 | reg = <0x0 0x0 0x8000000>; | ||
| 67 | bank-width = <2>; | ||
| 68 | device-width = <1>; | ||
| 69 | |||
| 70 | partition@0 { | ||
| 71 | reg = <0x0 0x03000000>; | ||
| 72 | label = "ramdisk-nor"; | ||
| 73 | read-only; | ||
| 74 | }; | ||
| 75 | |||
| 76 | partition@3000000 { | ||
| 77 | reg = <0x03000000 0x00e00000>; | ||
| 78 | label = "diagnostic-nor"; | ||
| 79 | read-only; | ||
| 80 | }; | ||
| 81 | |||
| 82 | partition@3e00000 { | ||
| 83 | reg = <0x03e00000 0x00200000>; | ||
| 84 | label = "dink-nor"; | ||
| 85 | read-only; | ||
| 86 | }; | ||
| 87 | |||
| 88 | partition@4000000 { | ||
| 89 | reg = <0x04000000 0x00400000>; | ||
| 90 | label = "kernel-nor"; | ||
| 91 | read-only; | ||
| 92 | }; | ||
| 93 | |||
| 94 | partition@4400000 { | ||
| 95 | reg = <0x04400000 0x03b00000>; | ||
| 96 | label = "jffs2-nor"; | ||
| 97 | }; | ||
| 98 | |||
| 99 | partition@7f00000 { | ||
| 100 | reg = <0x07f00000 0x00080000>; | ||
| 101 | label = "dtb-nor"; | ||
| 102 | read-only; | ||
| 103 | }; | ||
| 104 | |||
| 105 | partition@7f80000 { | ||
| 106 | reg = <0x07f80000 0x00080000>; | ||
| 107 | label = "u-boot-nor"; | ||
| 108 | read-only; | ||
| 109 | }; | ||
| 110 | }; | ||
| 111 | |||
| 112 | nand@2,0 { | ||
| 113 | #address-cells = <1>; | ||
| 114 | #size-cells = <1>; | ||
| 115 | compatible = "fsl,elbc-fcm-nand"; | ||
| 116 | reg = <0x2 0x0 0x40000>; | ||
| 117 | |||
| 118 | partition@0 { | ||
| 119 | reg = <0x0 0x02000000>; | ||
| 120 | label = "u-boot-nand"; | ||
| 121 | read-only; | ||
| 122 | }; | ||
| 123 | |||
| 124 | partition@2000000 { | ||
| 125 | reg = <0x02000000 0x10000000>; | ||
| 126 | label = "jffs2-nand"; | ||
| 127 | }; | ||
| 128 | |||
| 129 | partition@12000000 { | ||
| 130 | reg = <0x12000000 0x10000000>; | ||
| 131 | label = "ramdisk-nand"; | ||
| 132 | read-only; | ||
| 133 | }; | ||
| 134 | |||
| 135 | partition@22000000 { | ||
| 136 | reg = <0x22000000 0x04000000>; | ||
| 137 | label = "kernel-nand"; | ||
| 138 | }; | ||
| 139 | |||
| 140 | partition@26000000 { | ||
| 141 | reg = <0x26000000 0x01000000>; | ||
| 142 | label = "dtb-nand"; | ||
| 143 | read-only; | ||
| 144 | }; | ||
| 145 | |||
| 146 | partition@27000000 { | ||
| 147 | reg = <0x27000000 0x19000000>; | ||
| 148 | label = "reserved-nand"; | ||
| 149 | }; | ||
| 150 | }; | ||
| 151 | }; | ||
| 152 | |||
| 153 | soc@fffe00000 { | ||
| 154 | #address-cells = <1>; | ||
| 155 | #size-cells = <1>; | ||
| 156 | device_type = "soc"; | ||
| 157 | compatible = "fsl,p1022-immr", "simple-bus"; | ||
| 158 | ranges = <0x0 0xf 0xffe00000 0x100000>; | ||
| 159 | bus-frequency = <0>; // Filled out by uboot. | ||
| 160 | |||
| 161 | ecm-law@0 { | ||
| 162 | compatible = "fsl,ecm-law"; | ||
| 163 | reg = <0x0 0x1000>; | ||
| 164 | fsl,num-laws = <12>; | ||
| 165 | }; | ||
| 166 | |||
| 167 | ecm@1000 { | ||
| 168 | compatible = "fsl,p1022-ecm", "fsl,ecm"; | ||
| 169 | reg = <0x1000 0x1000>; | ||
| 170 | interrupts = <16 2>; | ||
| 171 | }; | ||
| 172 | |||
| 173 | memory-controller@2000 { | ||
| 174 | compatible = "fsl,p1022-memory-controller"; | ||
| 175 | reg = <0x2000 0x1000>; | ||
| 176 | interrupts = <16 2>; | ||
| 177 | }; | ||
| 178 | |||
| 179 | i2c@3000 { | ||
| 180 | #address-cells = <1>; | ||
| 181 | #size-cells = <0>; | ||
| 182 | cell-index = <0>; | ||
| 183 | compatible = "fsl-i2c"; | ||
| 184 | reg = <0x3000 0x100>; | ||
| 185 | interrupts = <43 2>; | ||
| 186 | dfsrr; | ||
| 187 | }; | ||
| 188 | |||
| 189 | i2c@3100 { | ||
| 190 | #address-cells = <1>; | ||
| 191 | #size-cells = <0>; | ||
| 192 | cell-index = <1>; | ||
| 193 | compatible = "fsl-i2c"; | ||
| 194 | reg = <0x3100 0x100>; | ||
| 195 | interrupts = <43 2>; | ||
| 196 | dfsrr; | ||
| 197 | |||
| 198 | wm8776:codec@1a { | ||
| 199 | compatible = "wlf,wm8776"; | ||
| 200 | reg = <0x1a>; | ||
| 201 | /* MCLK source is a stand-alone oscillator */ | ||
| 202 | clock-frequency = <12288000>; | ||
| 203 | }; | ||
| 204 | }; | ||
| 205 | |||
| 206 | serial0: serial@4500 { | ||
| 207 | cell-index = <0>; | ||
| 208 | device_type = "serial"; | ||
| 209 | compatible = "ns16550"; | ||
| 210 | reg = <0x4500 0x100>; | ||
| 211 | clock-frequency = <0>; | ||
| 212 | interrupts = <42 2>; | ||
| 213 | }; | ||
| 214 | |||
| 215 | serial1: serial@4600 { | ||
| 216 | cell-index = <1>; | ||
| 217 | device_type = "serial"; | ||
| 218 | compatible = "ns16550"; | ||
| 219 | reg = <0x4600 0x100>; | ||
| 220 | clock-frequency = <0>; | ||
| 221 | interrupts = <42 2>; | ||
| 222 | }; | ||
| 223 | |||
| 224 | spi@7000 { | ||
| 225 | cell-index = <0>; | ||
| 226 | #address-cells = <1>; | ||
| 227 | #size-cells = <0>; | ||
| 228 | compatible = "fsl,espi"; | ||
| 229 | reg = <0x7000 0x1000>; | ||
| 230 | interrupts = <59 0x2>; | ||
| 231 | espi,num-ss-bits = <4>; | ||
| 232 | mode = "cpu"; | ||
| 233 | |||
| 234 | fsl_m25p80@0 { | ||
| 235 | #address-cells = <1>; | ||
| 236 | #size-cells = <1>; | ||
| 237 | compatible = "fsl,espi-flash"; | ||
| 238 | reg = <0>; | ||
| 239 | linux,modalias = "fsl_m25p80"; | ||
| 240 | spi-max-frequency = <40000000>; /* input clock */ | ||
| 241 | partition@0 { | ||
| 242 | label = "u-boot-spi"; | ||
| 243 | reg = <0x00000000 0x00100000>; | ||
| 244 | read-only; | ||
| 245 | }; | ||
| 246 | partition@100000 { | ||
| 247 | label = "kernel-spi"; | ||
| 248 | reg = <0x00100000 0x00500000>; | ||
| 249 | read-only; | ||
| 250 | }; | ||
| 251 | partition@600000 { | ||
| 252 | label = "dtb-spi"; | ||
| 253 | reg = <0x00600000 0x00100000>; | ||
| 254 | read-only; | ||
| 255 | }; | ||
| 256 | partition@700000 { | ||
| 257 | label = "file system-spi"; | ||
| 258 | reg = <0x00700000 0x00900000>; | ||
| 259 | }; | ||
| 260 | }; | ||
| 261 | }; | ||
| 262 | |||
| 263 | ssi@15000 { | ||
| 264 | compatible = "fsl,mpc8610-ssi"; | ||
| 265 | cell-index = <0>; | ||
| 266 | reg = <0x15000 0x100>; | ||
| 267 | interrupts = <75 2>; | ||
| 268 | fsl,mode = "i2s-slave"; | ||
| 269 | codec-handle = <&wm8776>; | ||
| 270 | fsl,playback-dma = <&dma00>; | ||
| 271 | fsl,capture-dma = <&dma01>; | ||
| 272 | fsl,fifo-depth = <16>; | ||
| 273 | }; | ||
| 274 | |||
| 275 | dma@c300 { | ||
| 276 | #address-cells = <1>; | ||
| 277 | #size-cells = <1>; | ||
| 278 | compatible = "fsl,eloplus-dma"; | ||
| 279 | reg = <0xc300 0x4>; | ||
| 280 | ranges = <0x0 0xc100 0x200>; | ||
| 281 | cell-index = <1>; | ||
| 282 | dma00: dma-channel@0 { | ||
| 283 | compatible = "fsl,eloplus-dma-channel"; | ||
| 284 | reg = <0x0 0x80>; | ||
| 285 | cell-index = <0>; | ||
| 286 | interrupts = <76 2>; | ||
| 287 | }; | ||
| 288 | dma01: dma-channel@80 { | ||
| 289 | compatible = "fsl,eloplus-dma-channel"; | ||
| 290 | reg = <0x80 0x80>; | ||
| 291 | cell-index = <1>; | ||
| 292 | interrupts = <77 2>; | ||
| 293 | }; | ||
| 294 | dma-channel@100 { | ||
| 295 | compatible = "fsl,eloplus-dma-channel"; | ||
| 296 | reg = <0x100 0x80>; | ||
| 297 | cell-index = <2>; | ||
| 298 | interrupts = <78 2>; | ||
| 299 | }; | ||
| 300 | dma-channel@180 { | ||
| 301 | compatible = "fsl,eloplus-dma-channel"; | ||
| 302 | reg = <0x180 0x80>; | ||
| 303 | cell-index = <3>; | ||
| 304 | interrupts = <79 2>; | ||
| 305 | }; | ||
| 306 | }; | ||
| 307 | |||
| 308 | gpio: gpio-controller@f000 { | ||
| 309 | #gpio-cells = <2>; | ||
| 310 | compatible = "fsl,mpc8572-gpio"; | ||
| 311 | reg = <0xf000 0x100>; | ||
| 312 | interrupts = <47 0x2>; | ||
| 313 | gpio-controller; | ||
| 314 | }; | ||
| 315 | |||
| 316 | L2: l2-cache-controller@20000 { | ||
| 317 | compatible = "fsl,p1022-l2-cache-controller"; | ||
| 318 | reg = <0x20000 0x1000>; | ||
| 319 | cache-line-size = <32>; // 32 bytes | ||
| 320 | cache-size = <0x40000>; // L2, 256K | ||
| 321 | interrupts = <16 2>; | ||
| 322 | }; | ||
| 323 | |||
| 324 | dma@21300 { | ||
| 325 | #address-cells = <1>; | ||
| 326 | #size-cells = <1>; | ||
| 327 | compatible = "fsl,eloplus-dma"; | ||
| 328 | reg = <0x21300 0x4>; | ||
| 329 | ranges = <0x0 0x21100 0x200>; | ||
| 330 | cell-index = <0>; | ||
| 331 | dma-channel@0 { | ||
| 332 | compatible = "fsl,eloplus-dma-channel"; | ||
| 333 | reg = <0x0 0x80>; | ||
| 334 | cell-index = <0>; | ||
| 335 | interrupts = <20 2>; | ||
| 336 | }; | ||
| 337 | dma-channel@80 { | ||
| 338 | compatible = "fsl,eloplus-dma-channel"; | ||
| 339 | reg = <0x80 0x80>; | ||
| 340 | cell-index = <1>; | ||
| 341 | interrupts = <21 2>; | ||
| 342 | }; | ||
| 343 | dma-channel@100 { | ||
| 344 | compatible = "fsl,eloplus-dma-channel"; | ||
| 345 | reg = <0x100 0x80>; | ||
| 346 | cell-index = <2>; | ||
| 347 | interrupts = <22 2>; | ||
| 348 | }; | ||
| 349 | dma-channel@180 { | ||
| 350 | compatible = "fsl,eloplus-dma-channel"; | ||
| 351 | reg = <0x180 0x80>; | ||
| 352 | cell-index = <3>; | ||
| 353 | interrupts = <23 2>; | ||
| 354 | }; | ||
| 355 | }; | ||
| 356 | |||
| 357 | usb@22000 { | ||
| 358 | #address-cells = <1>; | ||
| 359 | #size-cells = <0>; | ||
| 360 | compatible = "fsl-usb2-dr"; | ||
| 361 | reg = <0x22000 0x1000>; | ||
| 362 | interrupts = <28 0x2>; | ||
| 363 | phy_type = "ulpi"; | ||
| 364 | }; | ||
| 365 | |||
| 366 | mdio@24000 { | ||
| 367 | #address-cells = <1>; | ||
| 368 | #size-cells = <0>; | ||
| 369 | compatible = "fsl,etsec2-mdio"; | ||
| 370 | reg = <0x24000 0x1000 0xb0030 0x4>; | ||
| 371 | |||
| 372 | phy0: ethernet-phy@0 { | ||
| 373 | interrupts = <3 1>; | ||
| 374 | reg = <0x1>; | ||
| 375 | }; | ||
| 376 | phy1: ethernet-phy@1 { | ||
| 377 | interrupts = <9 1>; | ||
| 378 | reg = <0x2>; | ||
| 379 | }; | ||
| 380 | }; | ||
| 381 | |||
| 382 | mdio@25000 { | ||
| 383 | #address-cells = <1>; | ||
| 384 | #size-cells = <0>; | ||
| 385 | compatible = "fsl,etsec2-mdio"; | ||
| 386 | reg = <0x25000 0x1000 0xb1030 0x4>; | ||
| 387 | }; | ||
| 388 | |||
| 389 | enet0: ethernet@B0000 { | ||
| 390 | #address-cells = <1>; | ||
| 391 | #size-cells = <1>; | ||
| 392 | cell-index = <0>; | ||
| 393 | device_type = "network"; | ||
| 394 | model = "eTSEC"; | ||
| 395 | compatible = "fsl,etsec2"; | ||
| 396 | fsl,num_rx_queues = <0x8>; | ||
| 397 | fsl,num_tx_queues = <0x8>; | ||
| 398 | fsl,magic-packet; | ||
| 399 | fsl,wake-on-filer; | ||
| 400 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 401 | fixed-link = <1 1 1000 0 0>; | ||
| 402 | phy-handle = <&phy0>; | ||
| 403 | phy-connection-type = "rgmii-id"; | ||
| 404 | queue-group@0{ | ||
| 405 | #address-cells = <1>; | ||
| 406 | #size-cells = <1>; | ||
| 407 | reg = <0xB0000 0x1000>; | ||
| 408 | interrupts = <29 2 30 2 34 2>; | ||
| 409 | }; | ||
| 410 | queue-group@1{ | ||
| 411 | #address-cells = <1>; | ||
| 412 | #size-cells = <1>; | ||
| 413 | reg = <0xB4000 0x1000>; | ||
| 414 | interrupts = <17 2 18 2 24 2>; | ||
| 415 | }; | ||
| 416 | }; | ||
| 417 | |||
| 418 | enet1: ethernet@B1000 { | ||
| 419 | #address-cells = <1>; | ||
| 420 | #size-cells = <1>; | ||
| 421 | cell-index = <0>; | ||
| 422 | device_type = "network"; | ||
| 423 | model = "eTSEC"; | ||
| 424 | compatible = "fsl,etsec2"; | ||
| 425 | fsl,num_rx_queues = <0x8>; | ||
| 426 | fsl,num_tx_queues = <0x8>; | ||
| 427 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 428 | fixed-link = <1 1 1000 0 0>; | ||
| 429 | phy-handle = <&phy1>; | ||
| 430 | phy-connection-type = "rgmii-id"; | ||
| 431 | queue-group@0{ | ||
| 432 | #address-cells = <1>; | ||
| 433 | #size-cells = <1>; | ||
| 434 | reg = <0xB1000 0x1000>; | ||
| 435 | interrupts = <35 2 36 2 40 2>; | ||
| 436 | }; | ||
| 437 | queue-group@1{ | ||
| 438 | #address-cells = <1>; | ||
| 439 | #size-cells = <1>; | ||
| 440 | reg = <0xB5000 0x1000>; | ||
| 441 | interrupts = <51 2 52 2 67 2>; | ||
| 442 | }; | ||
| 443 | }; | ||
| 444 | |||
| 445 | sdhci@2e000 { | ||
| 446 | compatible = "fsl,p1022-esdhc", "fsl,esdhc"; | ||
| 447 | reg = <0x2e000 0x1000>; | ||
| 448 | interrupts = <72 0x2>; | ||
| 449 | fsl,sdhci-auto-cmd12; | ||
| 450 | /* Filled in by U-Boot */ | ||
| 451 | clock-frequency = <0>; | ||
| 452 | }; | ||
| 453 | |||
| 454 | crypto@30000 { | ||
| 455 | compatible = "fsl,sec3.3", "fsl,sec3.1", "fsl,sec3.0", | ||
| 456 | "fsl,sec2.4", "fsl,sec2.2", "fsl,sec2.1", | ||
| 457 | "fsl,sec2.0"; | ||
| 458 | reg = <0x30000 0x10000>; | ||
| 459 | interrupts = <45 2 58 2>; | ||
| 460 | fsl,num-channels = <4>; | ||
| 461 | fsl,channel-fifo-len = <24>; | ||
| 462 | fsl,exec-units-mask = <0x97c>; | ||
| 463 | fsl,descriptor-types-mask = <0x3a30abf>; | ||
| 464 | }; | ||
| 465 | |||
| 466 | sata@18000 { | ||
| 467 | compatible = "fsl,mpc8536-sata", "fsl,pq-sata"; | ||
| 468 | reg = <0x18000 0x1000>; | ||
| 469 | cell-index = <1>; | ||
| 470 | interrupts = <74 0x2>; | ||
| 471 | }; | ||
| 472 | |||
| 473 | sata@19000 { | ||
| 474 | compatible = "fsl,mpc8536-sata", "fsl,pq-sata"; | ||
| 475 | reg = <0x19000 0x1000>; | ||
| 476 | cell-index = <2>; | ||
| 477 | interrupts = <41 0x2>; | ||
| 478 | }; | ||
| 479 | |||
| 480 | power@e0070{ | ||
| 481 | compatible = "fsl,mpc8536-pmc", "fsl,mpc8548-pmc"; | ||
| 482 | reg = <0xe0070 0x20>; | ||
| 483 | }; | ||
| 484 | |||
| 485 | display@10000 { | ||
| 486 | compatible = "fsl,diu", "fsl,p1022-diu"; | ||
| 487 | reg = <0x10000 1000>; | ||
| 488 | interrupts = <64 2>; | ||
| 489 | }; | ||
| 490 | |||
| 491 | timer@41100 { | ||
| 492 | compatible = "fsl,mpic-global-timer"; | ||
| 493 | reg = <0x41100 0x204>; | ||
| 494 | interrupts = <0xf7 0x2>; | ||
| 495 | }; | ||
| 496 | |||
| 497 | mpic: pic@40000 { | ||
| 498 | interrupt-controller; | ||
| 499 | #address-cells = <0>; | ||
| 500 | #interrupt-cells = <2>; | ||
| 501 | reg = <0x40000 0x40000>; | ||
| 502 | compatible = "chrp,open-pic"; | ||
| 503 | device_type = "open-pic"; | ||
| 504 | }; | ||
| 505 | |||
| 506 | msi@41600 { | ||
| 507 | compatible = "fsl,p1022-msi", "fsl,mpic-msi"; | ||
| 508 | reg = <0x41600 0x80>; | ||
| 509 | msi-available-ranges = <0 0x100>; | ||
| 510 | interrupts = < | ||
| 511 | 0xe0 0 | ||
| 512 | 0xe1 0 | ||
| 513 | 0xe2 0 | ||
| 514 | 0xe3 0 | ||
| 515 | 0xe4 0 | ||
| 516 | 0xe5 0 | ||
| 517 | 0xe6 0 | ||
| 518 | 0xe7 0>; | ||
| 519 | }; | ||
| 520 | |||
| 521 | global-utilities@e0000 { //global utilities block | ||
| 522 | compatible = "fsl,p1022-guts"; | ||
| 523 | reg = <0xe0000 0x1000>; | ||
| 524 | fsl,has-rstcr; | ||
| 525 | }; | ||
| 526 | }; | ||
| 527 | |||
| 528 | pci0: pcie@fffe09000 { | ||
| 529 | compatible = "fsl,p1022-pcie"; | ||
| 530 | device_type = "pci"; | ||
| 531 | #interrupt-cells = <1>; | ||
| 532 | #size-cells = <2>; | ||
| 533 | #address-cells = <3>; | ||
| 534 | reg = <0xf 0xffe09000 0 0x1000>; | ||
| 535 | bus-range = <0 255>; | ||
| 536 | ranges = <0x2000000 0x0 0xa0000000 0xc 0x20000000 0x0 0x20000000 | ||
| 537 | 0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>; | ||
| 538 | clock-frequency = <33333333>; | ||
| 539 | interrupts = <16 2>; | ||
| 540 | interrupt-map-mask = <0xf800 0 0 7>; | ||
| 541 | interrupt-map = < | ||
| 542 | /* IDSEL 0x0 */ | ||
| 543 | 0000 0 0 1 &mpic 4 1 | ||
| 544 | 0000 0 0 2 &mpic 5 1 | ||
| 545 | 0000 0 0 3 &mpic 6 1 | ||
| 546 | 0000 0 0 4 &mpic 7 1 | ||
| 547 | >; | ||
| 548 | pcie@0 { | ||
| 549 | reg = <0x0 0x0 0x0 0x0 0x0>; | ||
| 550 | #size-cells = <2>; | ||
| 551 | #address-cells = <3>; | ||
| 552 | device_type = "pci"; | ||
| 553 | ranges = <0x2000000 0x0 0xe0000000 | ||
| 554 | 0x2000000 0x0 0xe0000000 | ||
| 555 | 0x0 0x20000000 | ||
| 556 | |||
| 557 | 0x1000000 0x0 0x0 | ||
| 558 | 0x1000000 0x0 0x0 | ||
| 559 | 0x0 0x100000>; | ||
| 560 | }; | ||
| 561 | }; | ||
| 562 | |||
| 563 | pci1: pcie@fffe0a000 { | ||
| 564 | compatible = "fsl,p1022-pcie"; | ||
| 565 | device_type = "pci"; | ||
| 566 | #interrupt-cells = <1>; | ||
| 567 | #size-cells = <2>; | ||
| 568 | #address-cells = <3>; | ||
| 569 | reg = <0xf 0xffe0a000 0 0x1000>; | ||
| 570 | bus-range = <0 255>; | ||
| 571 | ranges = <0x2000000 0x0 0xc0000000 0xc 0x40000000 0x0 0x20000000 | ||
| 572 | 0x1000000 0x0 0x00000000 0xf 0xffc20000 0x0 0x10000>; | ||
| 573 | clock-frequency = <33333333>; | ||
| 574 | interrupts = <16 2>; | ||
| 575 | interrupt-map-mask = <0xf800 0 0 7>; | ||
| 576 | interrupt-map = < | ||
| 577 | /* IDSEL 0x0 */ | ||
| 578 | 0000 0 0 1 &mpic 0 1 | ||
| 579 | 0000 0 0 2 &mpic 1 1 | ||
| 580 | 0000 0 0 3 &mpic 2 1 | ||
| 581 | 0000 0 0 4 &mpic 3 1 | ||
| 582 | >; | ||
| 583 | pcie@0 { | ||
| 584 | reg = <0x0 0x0 0x0 0x0 0x0>; | ||
| 585 | #size-cells = <2>; | ||
| 586 | #address-cells = <3>; | ||
| 587 | device_type = "pci"; | ||
| 588 | ranges = <0x2000000 0x0 0xe0000000 | ||
| 589 | 0x2000000 0x0 0xe0000000 | ||
| 590 | 0x0 0x20000000 | ||
| 591 | |||
| 592 | 0x1000000 0x0 0x0 | ||
| 593 | 0x1000000 0x0 0x0 | ||
| 594 | 0x0 0x100000>; | ||
| 595 | }; | ||
| 596 | }; | ||
| 597 | |||
| 598 | |||
| 599 | pci2: pcie@fffe0b000 { | ||
| 600 | compatible = "fsl,p1022-pcie"; | ||
| 601 | device_type = "pci"; | ||
| 602 | #interrupt-cells = <1>; | ||
| 603 | #size-cells = <2>; | ||
| 604 | #address-cells = <3>; | ||
| 605 | reg = <0xf 0xffe0b000 0 0x1000>; | ||
| 606 | bus-range = <0 255>; | ||
| 607 | ranges = <0x2000000 0x0 0x80000000 0xc 0x00000000 0x0 0x20000000 | ||
| 608 | 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>; | ||
| 609 | clock-frequency = <33333333>; | ||
| 610 | interrupts = <16 2>; | ||
| 611 | interrupt-map-mask = <0xf800 0 0 7>; | ||
| 612 | interrupt-map = < | ||
| 613 | /* IDSEL 0x0 */ | ||
| 614 | 0000 0 0 1 &mpic 8 1 | ||
| 615 | 0000 0 0 2 &mpic 9 1 | ||
| 616 | 0000 0 0 3 &mpic 10 1 | ||
| 617 | 0000 0 0 4 &mpic 11 1 | ||
| 618 | >; | ||
| 619 | pcie@0 { | ||
| 620 | reg = <0x0 0x0 0x0 0x0 0x0>; | ||
| 621 | #size-cells = <2>; | ||
| 622 | #address-cells = <3>; | ||
| 623 | device_type = "pci"; | ||
| 624 | ranges = <0x2000000 0x0 0xe0000000 | ||
| 625 | 0x2000000 0x0 0xe0000000 | ||
| 626 | 0x0 0x20000000 | ||
| 627 | |||
| 628 | 0x1000000 0x0 0x0 | ||
| 629 | 0x1000000 0x0 0x0 | ||
| 630 | 0x0 0x100000>; | ||
| 631 | }; | ||
| 632 | }; | ||
| 633 | }; | ||
diff --git a/arch/powerpc/boot/dts/pdm360ng.dts b/arch/powerpc/boot/dts/pdm360ng.dts new file mode 100644 index 000000000000..94dfa5c9a7f9 --- /dev/null +++ b/arch/powerpc/boot/dts/pdm360ng.dts | |||
| @@ -0,0 +1,410 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for IFM PDM360NG. | ||
| 3 | * | ||
| 4 | * Copyright 2009 - 2010 DENX Software Engineering. | ||
| 5 | * Anatolij Gustschin <agust@denx.de> | ||
| 6 | * | ||
| 7 | * Based on MPC5121E ADS dts. | ||
| 8 | * Copyright 2008 Freescale Semiconductor Inc. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify it | ||
| 11 | * under the terms of the GNU General Public License as published by the | ||
| 12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 13 | * option) any later version. | ||
| 14 | */ | ||
| 15 | |||
| 16 | /dts-v1/; | ||
| 17 | |||
| 18 | / { | ||
| 19 | model = "pdm360ng"; | ||
| 20 | compatible = "ifm,pdm360ng"; | ||
| 21 | #address-cells = <1>; | ||
| 22 | #size-cells = <1>; | ||
| 23 | interrupt-parent = <&ipic>; | ||
| 24 | |||
| 25 | aliases { | ||
| 26 | ethernet0 = ð0; | ||
| 27 | }; | ||
| 28 | |||
| 29 | cpus { | ||
| 30 | #address-cells = <1>; | ||
| 31 | #size-cells = <0>; | ||
| 32 | |||
| 33 | PowerPC,5121@0 { | ||
| 34 | device_type = "cpu"; | ||
| 35 | reg = <0>; | ||
| 36 | d-cache-line-size = <0x20>; // 32 bytes | ||
| 37 | i-cache-line-size = <0x20>; // 32 bytes | ||
| 38 | d-cache-size = <0x8000>; // L1, 32K | ||
| 39 | i-cache-size = <0x8000>; // L1, 32K | ||
| 40 | timebase-frequency = <49500000>;// 49.5 MHz (csb/4) | ||
| 41 | bus-frequency = <198000000>; // 198 MHz csb bus | ||
| 42 | clock-frequency = <396000000>; // 396 MHz ppc core | ||
| 43 | }; | ||
| 44 | }; | ||
| 45 | |||
| 46 | memory { | ||
| 47 | device_type = "memory"; | ||
| 48 | reg = <0x00000000 0x20000000>; // 512MB at 0 | ||
| 49 | }; | ||
| 50 | |||
| 51 | nfc@40000000 { | ||
| 52 | compatible = "fsl,mpc5121-nfc"; | ||
| 53 | reg = <0x40000000 0x100000>; | ||
| 54 | interrupts = <0x6 0x8>; | ||
| 55 | #address-cells = <0x1>; | ||
| 56 | #size-cells = <0x1>; | ||
| 57 | bank-width = <0x1>; | ||
| 58 | chips = <0x1>; | ||
| 59 | |||
| 60 | partition@0 { | ||
| 61 | label = "nand0"; | ||
| 62 | reg = <0x0 0x40000000>; | ||
| 63 | }; | ||
| 64 | }; | ||
| 65 | |||
| 66 | sram@50000000 { | ||
| 67 | compatible = "fsl,mpc5121-sram"; | ||
| 68 | reg = <0x50000000 0x20000>; // 128K at 0x50000000 | ||
| 69 | }; | ||
| 70 | |||
| 71 | localbus@80000020 { | ||
| 72 | compatible = "fsl,mpc5121-localbus"; | ||
| 73 | #address-cells = <2>; | ||
| 74 | #size-cells = <1>; | ||
| 75 | reg = <0x80000020 0x40>; | ||
| 76 | |||
| 77 | ranges = <0x0 0x0 0xf0000000 0x10000000 /* Flash */ | ||
| 78 | 0x2 0x0 0x50040000 0x00020000>; /* CS2: MRAM */ | ||
| 79 | |||
| 80 | flash@0,0 { | ||
| 81 | compatible = "amd,s29gl01gp", "cfi-flash"; | ||
| 82 | reg = <0 0x00000000 0x08000000 | ||
| 83 | 0 0x08000000 0x08000000>; | ||
| 84 | #address-cells = <1>; | ||
| 85 | #size-cells = <1>; | ||
| 86 | bank-width = <4>; | ||
| 87 | device-width = <2>; | ||
| 88 | |||
| 89 | partition@0 { | ||
| 90 | label = "u-boot"; | ||
| 91 | reg = <0x00000000 0x00080000>; | ||
| 92 | read-only; | ||
| 93 | }; | ||
| 94 | partition@80000 { | ||
| 95 | label = "environment"; | ||
| 96 | reg = <0x00080000 0x00080000>; | ||
| 97 | read-only; | ||
| 98 | }; | ||
| 99 | partition@100000 { | ||
| 100 | label = "splash-image"; | ||
| 101 | reg = <0x00100000 0x00080000>; | ||
| 102 | read-only; | ||
| 103 | }; | ||
| 104 | partition@180000 { | ||
| 105 | label = "device-tree"; | ||
| 106 | reg = <0x00180000 0x00040000>; | ||
| 107 | }; | ||
| 108 | partition@1c0000 { | ||
| 109 | label = "kernel"; | ||
| 110 | reg = <0x001c0000 0x00500000>; | ||
| 111 | }; | ||
| 112 | partition@6c0000 { | ||
| 113 | label = "filesystem"; | ||
| 114 | reg = <0x006c0000 0x07940000>; | ||
| 115 | }; | ||
| 116 | }; | ||
| 117 | |||
| 118 | mram0@2,0 { | ||
| 119 | compatible = "mtd-ram"; | ||
| 120 | reg = <2 0x00000 0x10000>; | ||
| 121 | bank-width = <2>; | ||
| 122 | }; | ||
| 123 | |||
| 124 | mram1@2,10000 { | ||
| 125 | compatible = "mtd-ram"; | ||
| 126 | reg = <2 0x010000 0x10000>; | ||
| 127 | bank-width = <2>; | ||
| 128 | }; | ||
| 129 | }; | ||
| 130 | |||
| 131 | soc@80000000 { | ||
| 132 | compatible = "fsl,mpc5121-immr"; | ||
| 133 | #address-cells = <1>; | ||
| 134 | #size-cells = <1>; | ||
| 135 | #interrupt-cells = <2>; | ||
| 136 | ranges = <0x0 0x80000000 0x400000>; | ||
| 137 | reg = <0x80000000 0x400000>; | ||
| 138 | bus-frequency = <66000000>; // 66 MHz ips bus | ||
| 139 | |||
| 140 | // IPIC | ||
| 141 | // interrupts cell = <intr #, sense> | ||
| 142 | // sense values match linux IORESOURCE_IRQ_* defines: | ||
| 143 | // sense == 8: Level, low assertion | ||
| 144 | // sense == 2: Edge, high-to-low change | ||
| 145 | // | ||
| 146 | ipic: interrupt-controller@c00 { | ||
| 147 | compatible = "fsl,mpc5121-ipic", "fsl,ipic"; | ||
| 148 | interrupt-controller; | ||
| 149 | #address-cells = <0>; | ||
| 150 | #interrupt-cells = <2>; | ||
| 151 | reg = <0xc00 0x100>; | ||
| 152 | }; | ||
| 153 | |||
| 154 | rtc@a00 { // Real time clock | ||
| 155 | compatible = "fsl,mpc5121-rtc"; | ||
| 156 | reg = <0xa00 0x100>; | ||
| 157 | interrupts = <79 0x8 80 0x8>; | ||
| 158 | }; | ||
| 159 | |||
| 160 | reset@e00 { // Reset module | ||
| 161 | compatible = "fsl,mpc5121-reset"; | ||
| 162 | reg = <0xe00 0x100>; | ||
| 163 | }; | ||
| 164 | |||
| 165 | clock@f00 { // Clock control | ||
| 166 | compatible = "fsl,mpc5121-clock"; | ||
| 167 | reg = <0xf00 0x100>; | ||
| 168 | }; | ||
| 169 | |||
| 170 | pmc@1000{ //Power Management Controller | ||
| 171 | compatible = "fsl,mpc5121-pmc"; | ||
| 172 | reg = <0x1000 0x100>; | ||
| 173 | interrupts = <83 0x2>; | ||
| 174 | }; | ||
| 175 | |||
| 176 | gpio@1100 { | ||
| 177 | compatible = "fsl,mpc5121-gpio"; | ||
| 178 | reg = <0x1100 0x100>; | ||
| 179 | interrupts = <78 0x8>; | ||
| 180 | }; | ||
| 181 | |||
| 182 | can@1300 { | ||
| 183 | compatible = "fsl,mpc5121-mscan"; | ||
| 184 | interrupts = <12 0x8>; | ||
| 185 | reg = <0x1300 0x80>; | ||
| 186 | }; | ||
| 187 | |||
| 188 | can@1380 { | ||
| 189 | compatible = "fsl,mpc5121-mscan"; | ||
| 190 | interrupts = <13 0x8>; | ||
| 191 | reg = <0x1380 0x80>; | ||
| 192 | }; | ||
| 193 | |||
| 194 | i2c@1700 { | ||
| 195 | #address-cells = <1>; | ||
| 196 | #size-cells = <0>; | ||
| 197 | compatible = "fsl,mpc5121-i2c"; | ||
| 198 | reg = <0x1700 0x20>; | ||
| 199 | interrupts = <0x9 0x8>; | ||
| 200 | fsl,preserve-clocking; | ||
| 201 | |||
| 202 | eeprom@50 { | ||
| 203 | compatible = "at,24c01"; | ||
| 204 | reg = <0x50>; | ||
| 205 | }; | ||
| 206 | |||
| 207 | rtc@68 { | ||
| 208 | compatible = "stm,m41t00"; | ||
| 209 | reg = <0x68>; | ||
| 210 | }; | ||
| 211 | }; | ||
| 212 | |||
| 213 | i2c@1740 { | ||
| 214 | #address-cells = <1>; | ||
| 215 | #size-cells = <0>; | ||
| 216 | compatible = "fsl,mpc5121-i2c"; | ||
| 217 | reg = <0x1740 0x20>; | ||
| 218 | interrupts = <0xb 0x8>; | ||
| 219 | fsl,preserve-clocking; | ||
| 220 | }; | ||
| 221 | |||
| 222 | i2ccontrol@1760 { | ||
| 223 | compatible = "fsl,mpc5121-i2c-ctrl"; | ||
| 224 | reg = <0x1760 0x8>; | ||
| 225 | }; | ||
| 226 | |||
| 227 | axe@2000 { | ||
| 228 | compatible = "fsl,mpc5121-axe"; | ||
| 229 | reg = <0x2000 0x100>; | ||
| 230 | interrupts = <42 0x8>; | ||
| 231 | }; | ||
| 232 | |||
| 233 | display@2100 { | ||
| 234 | compatible = "fsl,mpc5121-diu"; | ||
| 235 | reg = <0x2100 0x100>; | ||
| 236 | interrupts = <64 0x8>; | ||
| 237 | }; | ||
| 238 | |||
| 239 | can@2300 { | ||
| 240 | compatible = "fsl,mpc5121-mscan"; | ||
| 241 | interrupts = <90 0x8>; | ||
| 242 | reg = <0x2300 0x80>; | ||
| 243 | }; | ||
| 244 | |||
| 245 | can@2380 { | ||
| 246 | compatible = "fsl,mpc5121-mscan"; | ||
| 247 | interrupts = <91 0x8>; | ||
| 248 | reg = <0x2380 0x80>; | ||
| 249 | }; | ||
| 250 | |||
| 251 | viu@2400 { | ||
| 252 | compatible = "fsl,mpc5121-viu"; | ||
| 253 | reg = <0x2400 0x400>; | ||
| 254 | interrupts = <67 0x8>; | ||
| 255 | }; | ||
| 256 | |||
| 257 | mdio@2800 { | ||
| 258 | compatible = "fsl,mpc5121-fec-mdio"; | ||
| 259 | reg = <0x2800 0x200>; | ||
| 260 | #address-cells = <1>; | ||
| 261 | #size-cells = <0>; | ||
| 262 | phy: ethernet-phy@0 { | ||
| 263 | compatible = "smsc,lan8700"; | ||
| 264 | reg = <0x1f>; | ||
| 265 | }; | ||
| 266 | }; | ||
| 267 | |||
| 268 | eth0: ethernet@2800 { | ||
| 269 | compatible = "fsl,mpc5121-fec"; | ||
| 270 | reg = <0x2800 0x200>; | ||
| 271 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 272 | interrupts = <4 0x8>; | ||
| 273 | phy-handle = < &phy >; | ||
| 274 | }; | ||
| 275 | |||
| 276 | // USB1 using external ULPI PHY | ||
| 277 | usb@3000 { | ||
| 278 | compatible = "fsl,mpc5121-usb2-dr"; | ||
| 279 | reg = <0x3000 0x600>; | ||
| 280 | #address-cells = <1>; | ||
| 281 | #size-cells = <0>; | ||
| 282 | interrupts = <43 0x8>; | ||
| 283 | dr_mode = "host"; | ||
| 284 | phy_type = "ulpi"; | ||
| 285 | }; | ||
| 286 | |||
| 287 | // USB0 using internal UTMI PHY | ||
| 288 | usb@4000 { | ||
| 289 | compatible = "fsl,mpc5121-usb2-dr"; | ||
| 290 | reg = <0x4000 0x600>; | ||
| 291 | #address-cells = <1>; | ||
| 292 | #size-cells = <0>; | ||
| 293 | interrupts = <44 0x8>; | ||
| 294 | dr_mode = "otg"; | ||
| 295 | phy_type = "utmi_wide"; | ||
| 296 | fsl,invert-pwr-fault; | ||
| 297 | }; | ||
| 298 | |||
| 299 | // IO control | ||
| 300 | ioctl@a000 { | ||
| 301 | compatible = "fsl,mpc5121-ioctl"; | ||
| 302 | reg = <0xA000 0x1000>; | ||
| 303 | }; | ||
| 304 | |||
| 305 | // 512x PSCs are not 52xx PSCs compatible | ||
| 306 | serial@11000 { | ||
| 307 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 308 | cell-index = <0>; | ||
| 309 | reg = <0x11000 0x100>; | ||
| 310 | interrupts = <40 0x8>; | ||
| 311 | fsl,rx-fifo-size = <16>; | ||
| 312 | fsl,tx-fifo-size = <16>; | ||
| 313 | }; | ||
| 314 | |||
| 315 | serial@11100 { | ||
| 316 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 317 | cell-index = <1>; | ||
| 318 | reg = <0x11100 0x100>; | ||
| 319 | interrupts = <40 0x8>; | ||
| 320 | fsl,rx-fifo-size = <16>; | ||
| 321 | fsl,tx-fifo-size = <16>; | ||
| 322 | }; | ||
| 323 | |||
| 324 | serial@11200 { | ||
| 325 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 326 | cell-index = <2>; | ||
| 327 | reg = <0x11200 0x100>; | ||
| 328 | interrupts = <40 0x8>; | ||
| 329 | fsl,rx-fifo-size = <16>; | ||
| 330 | fsl,tx-fifo-size = <16>; | ||
| 331 | }; | ||
| 332 | |||
| 333 | serial@11300 { | ||
| 334 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 335 | cell-index = <3>; | ||
| 336 | reg = <0x11300 0x100>; | ||
| 337 | interrupts = <40 0x8>; | ||
| 338 | fsl,rx-fifo-size = <16>; | ||
| 339 | fsl,tx-fifo-size = <16>; | ||
| 340 | }; | ||
| 341 | |||
| 342 | serial@11400 { | ||
| 343 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 344 | cell-index = <4>; | ||
| 345 | reg = <0x11400 0x100>; | ||
| 346 | interrupts = <40 0x8>; | ||
| 347 | fsl,rx-fifo-size = <16>; | ||
| 348 | fsl,tx-fifo-size = <16>; | ||
| 349 | }; | ||
| 350 | |||
| 351 | serial@11600 { | ||
| 352 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 353 | cell-index = <6>; | ||
| 354 | reg = <0x11600 0x100>; | ||
| 355 | interrupts = <40 0x8>; | ||
| 356 | fsl,rx-fifo-size = <16>; | ||
| 357 | fsl,tx-fifo-size = <16>; | ||
| 358 | }; | ||
| 359 | |||
| 360 | serial@11800 { | ||
| 361 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 362 | cell-index = <8>; | ||
| 363 | reg = <0x11800 0x100>; | ||
| 364 | interrupts = <40 0x8>; | ||
| 365 | fsl,rx-fifo-size = <16>; | ||
| 366 | fsl,tx-fifo-size = <16>; | ||
| 367 | }; | ||
| 368 | |||
| 369 | serial@11B00 { | ||
| 370 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
| 371 | cell-index = <11>; | ||
| 372 | reg = <0x11B00 0x100>; | ||
| 373 | interrupts = <40 0x8>; | ||
| 374 | fsl,rx-fifo-size = <16>; | ||
| 375 | fsl,tx-fifo-size = <16>; | ||
| 376 | }; | ||
| 377 | |||
| 378 | pscfifo@11f00 { | ||
| 379 | compatible = "fsl,mpc5121-psc-fifo"; | ||
| 380 | reg = <0x11f00 0x100>; | ||
| 381 | interrupts = <40 0x8>; | ||
| 382 | }; | ||
| 383 | |||
| 384 | spi@11900 { | ||
| 385 | compatible = "fsl,mpc5121-psc-spi", "fsl,mpc5121-psc"; | ||
| 386 | cell-index = <9>; | ||
| 387 | #address-cells = <1>; | ||
| 388 | #size-cells = <0>; | ||
| 389 | reg = <0x11900 0x100>; | ||
| 390 | interrupts = <40 0x8>; | ||
| 391 | fsl,rx-fifo-size = <16>; | ||
| 392 | fsl,tx-fifo-size = <16>; | ||
| 393 | |||
| 394 | // 7845 touch screen controller | ||
| 395 | ts@0 { | ||
| 396 | compatible = "ti,ads7846"; | ||
| 397 | reg = <0x0>; | ||
| 398 | spi-max-frequency = <3000000>; | ||
| 399 | // pen irq is GPIO25 | ||
| 400 | interrupts = <78 0x8>; | ||
| 401 | }; | ||
| 402 | }; | ||
| 403 | |||
| 404 | dma@14000 { | ||
| 405 | compatible = "fsl,mpc5121-dma"; | ||
| 406 | reg = <0x14000 0x1800>; | ||
| 407 | interrupts = <65 0x8>; | ||
| 408 | }; | ||
| 409 | }; | ||
| 410 | }; | ||
diff --git a/arch/powerpc/boot/dts/stxssa8555.dts b/arch/powerpc/boot/dts/stxssa8555.dts new file mode 100644 index 000000000000..49efd44057d7 --- /dev/null +++ b/arch/powerpc/boot/dts/stxssa8555.dts | |||
| @@ -0,0 +1,380 @@ | |||
| 1 | /* | ||
| 2 | * MPC8555-based STx GP3 Device Tree Source | ||
| 3 | * | ||
| 4 | * Copyright 2006, 2008 Freescale Semiconductor Inc. | ||
| 5 | * | ||
| 6 | * Copyright 2010 Silicon Turnkey Express LLC. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | /dts-v1/; | ||
| 15 | |||
| 16 | / { | ||
| 17 | model = "stx,gp3"; | ||
| 18 | compatible = "stx,gp3-8560", "stx,gp3"; | ||
| 19 | #address-cells = <1>; | ||
| 20 | #size-cells = <1>; | ||
| 21 | |||
| 22 | aliases { | ||
| 23 | ethernet0 = &enet0; | ||
| 24 | ethernet1 = &enet1; | ||
| 25 | serial0 = &serial0; | ||
| 26 | serial1 = &serial1; | ||
| 27 | pci0 = &pci0; | ||
| 28 | }; | ||
| 29 | |||
| 30 | cpus { | ||
| 31 | #address-cells = <1>; | ||
| 32 | #size-cells = <0>; | ||
| 33 | |||
| 34 | PowerPC,8555@0 { | ||
| 35 | device_type = "cpu"; | ||
| 36 | reg = <0x0>; | ||
| 37 | d-cache-line-size = <32>; // 32 bytes | ||
| 38 | i-cache-line-size = <32>; // 32 bytes | ||
| 39 | d-cache-size = <0x8000>; // L1, 32K | ||
| 40 | i-cache-size = <0x8000>; // L1, 32K | ||
| 41 | timebase-frequency = <0>; // 33 MHz, from uboot | ||
| 42 | bus-frequency = <0>; // 166 MHz | ||
| 43 | clock-frequency = <0>; // 825 MHz, from uboot | ||
| 44 | next-level-cache = <&L2>; | ||
| 45 | }; | ||
| 46 | }; | ||
| 47 | |||
| 48 | memory { | ||
| 49 | device_type = "memory"; | ||
| 50 | reg = <0x00000000 0x10000000>; | ||
| 51 | }; | ||
| 52 | |||
| 53 | soc8555@e0000000 { | ||
| 54 | #address-cells = <1>; | ||
| 55 | #size-cells = <1>; | ||
| 56 | device_type = "soc"; | ||
| 57 | compatible = "simple-bus"; | ||
| 58 | ranges = <0x0 0xe0000000 0x100000>; | ||
| 59 | bus-frequency = <0>; | ||
| 60 | |||
| 61 | ecm-law@0 { | ||
| 62 | compatible = "fsl,ecm-law"; | ||
| 63 | reg = <0x0 0x1000>; | ||
| 64 | fsl,num-laws = <8>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | ecm@1000 { | ||
| 68 | compatible = "fsl,mpc8555-ecm", "fsl,ecm"; | ||
| 69 | reg = <0x1000 0x1000>; | ||
| 70 | interrupts = <17 2>; | ||
| 71 | interrupt-parent = <&mpic>; | ||
| 72 | }; | ||
| 73 | |||
| 74 | memory-controller@2000 { | ||
| 75 | compatible = "fsl,mpc8555-memory-controller"; | ||
| 76 | reg = <0x2000 0x1000>; | ||
| 77 | interrupt-parent = <&mpic>; | ||
| 78 | interrupts = <18 2>; | ||
| 79 | }; | ||
| 80 | |||
| 81 | L2: l2-cache-controller@20000 { | ||
| 82 | compatible = "fsl,mpc8555-l2-cache-controller"; | ||
| 83 | reg = <0x20000 0x1000>; | ||
| 84 | cache-line-size = <32>; // 32 bytes | ||
| 85 | cache-size = <0x40000>; // L2, 256K | ||
| 86 | interrupt-parent = <&mpic>; | ||
| 87 | interrupts = <16 2>; | ||
| 88 | }; | ||
| 89 | |||
| 90 | i2c@3000 { | ||
| 91 | #address-cells = <1>; | ||
| 92 | #size-cells = <0>; | ||
| 93 | cell-index = <0>; | ||
| 94 | compatible = "fsl-i2c"; | ||
| 95 | reg = <0x3000 0x100>; | ||
| 96 | interrupts = <43 2>; | ||
| 97 | interrupt-parent = <&mpic>; | ||
| 98 | dfsrr; | ||
| 99 | }; | ||
| 100 | |||
| 101 | dma@21300 { | ||
| 102 | #address-cells = <1>; | ||
| 103 | #size-cells = <1>; | ||
| 104 | compatible = "fsl,mpc8555-dma", "fsl,eloplus-dma"; | ||
| 105 | reg = <0x21300 0x4>; | ||
| 106 | ranges = <0x0 0x21100 0x200>; | ||
| 107 | cell-index = <0>; | ||
| 108 | dma-channel@0 { | ||
| 109 | compatible = "fsl,mpc8555-dma-channel", | ||
| 110 | "fsl,eloplus-dma-channel"; | ||
| 111 | reg = <0x0 0x80>; | ||
| 112 | cell-index = <0>; | ||
| 113 | interrupt-parent = <&mpic>; | ||
| 114 | interrupts = <20 2>; | ||
| 115 | }; | ||
| 116 | dma-channel@80 { | ||
| 117 | compatible = "fsl,mpc8555-dma-channel", | ||
| 118 | "fsl,eloplus-dma-channel"; | ||
| 119 | reg = <0x80 0x80>; | ||
| 120 | cell-index = <1>; | ||
| 121 | interrupt-parent = <&mpic>; | ||
| 122 | interrupts = <21 2>; | ||
| 123 | }; | ||
| 124 | dma-channel@100 { | ||
| 125 | compatible = "fsl,mpc8555-dma-channel", | ||
| 126 | "fsl,eloplus-dma-channel"; | ||
| 127 | reg = <0x100 0x80>; | ||
| 128 | cell-index = <2>; | ||
| 129 | interrupt-parent = <&mpic>; | ||
| 130 | interrupts = <22 2>; | ||
| 131 | }; | ||
| 132 | dma-channel@180 { | ||
| 133 | compatible = "fsl,mpc8555-dma-channel", | ||
| 134 | "fsl,eloplus-dma-channel"; | ||
| 135 | reg = <0x180 0x80>; | ||
| 136 | cell-index = <3>; | ||
| 137 | interrupt-parent = <&mpic>; | ||
| 138 | interrupts = <23 2>; | ||
| 139 | }; | ||
| 140 | }; | ||
| 141 | |||
| 142 | enet0: ethernet@24000 { | ||
| 143 | #address-cells = <1>; | ||
| 144 | #size-cells = <1>; | ||
| 145 | cell-index = <0>; | ||
| 146 | device_type = "network"; | ||
| 147 | model = "TSEC"; | ||
| 148 | compatible = "gianfar"; | ||
| 149 | reg = <0x24000 0x1000>; | ||
| 150 | ranges = <0x0 0x24000 0x1000>; | ||
| 151 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 152 | interrupts = <29 2 30 2 34 2>; | ||
| 153 | interrupt-parent = <&mpic>; | ||
| 154 | tbi-handle = <&tbi0>; | ||
| 155 | phy-handle = <&phy0>; | ||
| 156 | |||
| 157 | mdio@520 { | ||
| 158 | #address-cells = <1>; | ||
| 159 | #size-cells = <0>; | ||
| 160 | compatible = "fsl,gianfar-mdio"; | ||
| 161 | reg = <0x520 0x20>; | ||
| 162 | |||
| 163 | phy0: ethernet-phy@2 { | ||
| 164 | interrupt-parent = <&mpic>; | ||
| 165 | interrupts = <5 1>; | ||
| 166 | reg = <0x2>; | ||
| 167 | device_type = "ethernet-phy"; | ||
| 168 | }; | ||
| 169 | phy1: ethernet-phy@4 { | ||
| 170 | interrupt-parent = <&mpic>; | ||
| 171 | interrupts = <5 1>; | ||
| 172 | reg = <0x4>; | ||
| 173 | device_type = "ethernet-phy"; | ||
| 174 | }; | ||
| 175 | tbi0: tbi-phy@11 { | ||
| 176 | reg = <0x11>; | ||
| 177 | device_type = "tbi-phy"; | ||
| 178 | }; | ||
| 179 | }; | ||
| 180 | }; | ||
| 181 | |||
| 182 | enet1: ethernet@25000 { | ||
| 183 | #address-cells = <1>; | ||
| 184 | #size-cells = <1>; | ||
| 185 | cell-index = <1>; | ||
| 186 | device_type = "network"; | ||
| 187 | model = "TSEC"; | ||
| 188 | compatible = "gianfar"; | ||
| 189 | reg = <0x25000 0x1000>; | ||
| 190 | ranges = <0x0 0x25000 0x1000>; | ||
| 191 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
| 192 | interrupts = <35 2 36 2 40 2>; | ||
| 193 | interrupt-parent = <&mpic>; | ||
| 194 | tbi-handle = <&tbi1>; | ||
| 195 | phy-handle = <&phy1>; | ||
| 196 | |||
| 197 | mdio@520 { | ||
| 198 | #address-cells = <1>; | ||
| 199 | #size-cells = <0>; | ||
| 200 | compatible = "fsl,gianfar-tbi"; | ||
| 201 | reg = <0x520 0x20>; | ||
| 202 | |||
| 203 | tbi1: tbi-phy@11 { | ||
| 204 | reg = <0x11>; | ||
| 205 | device_type = "tbi-phy"; | ||
| 206 | }; | ||
| 207 | }; | ||
| 208 | }; | ||
| 209 | |||
| 210 | serial0: serial@4500 { | ||
| 211 | cell-index = <0>; | ||
| 212 | device_type = "serial"; | ||
| 213 | compatible = "ns16550"; | ||
| 214 | reg = <0x4500 0x100>; // reg base, size | ||
| 215 | clock-frequency = <0>; // should we fill in in uboot? | ||
| 216 | interrupts = <42 2>; | ||
| 217 | interrupt-parent = <&mpic>; | ||
| 218 | }; | ||
| 219 | |||
| 220 | serial1: serial@4600 { | ||
| 221 | cell-index = <1>; | ||
| 222 | device_type = "serial"; | ||
| 223 | compatible = "ns16550"; | ||
| 224 | reg = <0x4600 0x100>; // reg base, size | ||
| 225 | clock-frequency = <0>; // should we fill in in uboot? | ||
| 226 | interrupts = <42 2>; | ||
| 227 | interrupt-parent = <&mpic>; | ||
| 228 | }; | ||
| 229 | |||
| 230 | crypto@30000 { | ||
| 231 | compatible = "fsl,sec2.0"; | ||
| 232 | reg = <0x30000 0x10000>; | ||
| 233 | interrupts = <45 2>; | ||
| 234 | interrupt-parent = <&mpic>; | ||
| 235 | fsl,num-channels = <4>; | ||
| 236 | fsl,channel-fifo-len = <24>; | ||
| 237 | fsl,exec-units-mask = <0x7e>; | ||
| 238 | fsl,descriptor-types-mask = <0x01010ebf>; | ||
| 239 | }; | ||
| 240 | |||
| 241 | mpic: pic@40000 { | ||
| 242 | interrupt-controller; | ||
| 243 | #address-cells = <0>; | ||
| 244 | #interrupt-cells = <2>; | ||
| 245 | reg = <0x40000 0x40000>; | ||
| 246 | compatible = "chrp,open-pic"; | ||
| 247 | device_type = "open-pic"; | ||
| 248 | }; | ||
| 249 | |||
| 250 | cpm@919c0 { | ||
| 251 | #address-cells = <1>; | ||
| 252 | #size-cells = <1>; | ||
| 253 | compatible = "fsl,mpc8555-cpm", "fsl,cpm2"; | ||
| 254 | reg = <0x919c0 0x30>; | ||
| 255 | ranges; | ||
| 256 | |||
| 257 | muram@80000 { | ||
| 258 | #address-cells = <1>; | ||
| 259 | #size-cells = <1>; | ||
| 260 | ranges = <0x0 0x80000 0x10000>; | ||
| 261 | |||
| 262 | data@0 { | ||
| 263 | compatible = "fsl,cpm-muram-data"; | ||
| 264 | reg = <0x0 0x2000 0x9000 0x1000>; | ||
| 265 | }; | ||
| 266 | }; | ||
| 267 | |||
| 268 | brg@919f0 { | ||
| 269 | compatible = "fsl,mpc8555-brg", | ||
| 270 | "fsl,cpm2-brg", | ||
| 271 | "fsl,cpm-brg"; | ||
| 272 | reg = <0x919f0 0x10 0x915f0 0x10>; | ||
| 273 | }; | ||
| 274 | |||
| 275 | cpmpic: pic@90c00 { | ||
| 276 | interrupt-controller; | ||
| 277 | #address-cells = <0>; | ||
| 278 | #interrupt-cells = <2>; | ||
| 279 | interrupts = <46 2>; | ||
| 280 | interrupt-parent = <&mpic>; | ||
| 281 | reg = <0x90c00 0x80>; | ||
| 282 | compatible = "fsl,mpc8555-cpm-pic", "fsl,cpm2-pic"; | ||
| 283 | }; | ||
| 284 | }; | ||
| 285 | }; | ||
| 286 | |||
| 287 | pci0: pci@e0008000 { | ||
| 288 | interrupt-map-mask = <0x1f800 0x0 0x0 0x7>; | ||
| 289 | interrupt-map = < | ||
| 290 | |||
| 291 | /* IDSEL 0x10 */ | ||
| 292 | 0x8000 0x0 0x0 0x1 &mpic 0x0 0x1 | ||
| 293 | 0x8000 0x0 0x0 0x2 &mpic 0x1 0x1 | ||
| 294 | 0x8000 0x0 0x0 0x3 &mpic 0x2 0x1 | ||
| 295 | 0x8000 0x0 0x0 0x4 &mpic 0x3 0x1 | ||
| 296 | |||
| 297 | /* IDSEL 0x11 */ | ||
| 298 | 0x8800 0x0 0x0 0x1 &mpic 0x0 0x1 | ||
| 299 | 0x8800 0x0 0x0 0x2 &mpic 0x1 0x1 | ||
| 300 | 0x8800 0x0 0x0 0x3 &mpic 0x2 0x1 | ||
| 301 | 0x8800 0x0 0x0 0x4 &mpic 0x3 0x1 | ||
| 302 | |||
| 303 | /* IDSEL 0x12 (Slot 1) */ | ||
| 304 | 0x9000 0x0 0x0 0x1 &mpic 0x0 0x1 | ||
| 305 | 0x9000 0x0 0x0 0x2 &mpic 0x1 0x1 | ||
| 306 | 0x9000 0x0 0x0 0x3 &mpic 0x2 0x1 | ||
| 307 | 0x9000 0x0 0x0 0x4 &mpic 0x3 0x1 | ||
| 308 | |||
| 309 | /* IDSEL 0x13 (Slot 2) */ | ||
| 310 | 0x9800 0x0 0x0 0x1 &mpic 0x1 0x1 | ||
| 311 | 0x9800 0x0 0x0 0x2 &mpic 0x2 0x1 | ||
| 312 | 0x9800 0x0 0x0 0x3 &mpic 0x3 0x1 | ||
| 313 | 0x9800 0x0 0x0 0x4 &mpic 0x0 0x1 | ||
| 314 | |||
| 315 | /* IDSEL 0x14 (Slot 3) */ | ||
| 316 | 0xa000 0x0 0x0 0x1 &mpic 0x2 0x1 | ||
| 317 | 0xa000 0x0 0x0 0x2 &mpic 0x3 0x1 | ||
| 318 | 0xa000 0x0 0x0 0x3 &mpic 0x0 0x1 | ||
| 319 | 0xa000 0x0 0x0 0x4 &mpic 0x1 0x1 | ||
| 320 | |||
| 321 | /* IDSEL 0x15 (Slot 4) */ | ||
| 322 | 0xa800 0x0 0x0 0x1 &mpic 0x3 0x1 | ||
| 323 | 0xa800 0x0 0x0 0x2 &mpic 0x0 0x1 | ||
| 324 | 0xa800 0x0 0x0 0x3 &mpic 0x1 0x1 | ||
| 325 | 0xa800 0x0 0x0 0x4 &mpic 0x2 0x1 | ||
| 326 | |||
| 327 | /* Bus 1 (Tundra Bridge) */ | ||
| 328 | /* IDSEL 0x12 (ISA bridge) */ | ||
| 329 | 0x19000 0x0 0x0 0x1 &mpic 0x0 0x1 | ||
| 330 | 0x19000 0x0 0x0 0x2 &mpic 0x1 0x1 | ||
| 331 | 0x19000 0x0 0x0 0x3 &mpic 0x2 0x1 | ||
| 332 | 0x19000 0x0 0x0 0x4 &mpic 0x3 0x1>; | ||
| 333 | interrupt-parent = <&mpic>; | ||
| 334 | interrupts = <24 2>; | ||
| 335 | bus-range = <0 0>; | ||
| 336 | ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000 | ||
| 337 | 0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>; | ||
| 338 | clock-frequency = <66666666>; | ||
| 339 | #interrupt-cells = <1>; | ||
| 340 | #size-cells = <2>; | ||
| 341 | #address-cells = <3>; | ||
| 342 | reg = <0xe0008000 0x1000>; | ||
| 343 | compatible = "fsl,mpc8540-pci"; | ||
| 344 | device_type = "pci"; | ||
| 345 | |||
| 346 | i8259@19000 { | ||
| 347 | interrupt-controller; | ||
| 348 | device_type = "interrupt-controller"; | ||
| 349 | reg = <0x19000 0x0 0x0 0x0 0x1>; | ||
| 350 | #address-cells = <0>; | ||
| 351 | #interrupt-cells = <2>; | ||
| 352 | compatible = "chrp,iic"; | ||
| 353 | interrupts = <1>; | ||
| 354 | interrupt-parent = <&pci0>; | ||
| 355 | }; | ||
| 356 | }; | ||
| 357 | |||
| 358 | pci1: pci@e0009000 { | ||
| 359 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | ||
| 360 | interrupt-map = < | ||
| 361 | |||
| 362 | /* IDSEL 0x15 */ | ||
| 363 | 0xa800 0x0 0x0 0x1 &mpic 0xb 0x1 | ||
| 364 | 0xa800 0x0 0x0 0x2 &mpic 0xb 0x1 | ||
| 365 | 0xa800 0x0 0x0 0x3 &mpic 0xb 0x1 | ||
| 366 | 0xa800 0x0 0x0 0x4 &mpic 0xb 0x1>; | ||
| 367 | interrupt-parent = <&mpic>; | ||
| 368 | interrupts = <25 2>; | ||
| 369 | bus-range = <0 0>; | ||
| 370 | ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000 | ||
| 371 | 0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>; | ||
| 372 | clock-frequency = <66666666>; | ||
| 373 | #interrupt-cells = <1>; | ||
| 374 | #size-cells = <2>; | ||
| 375 | #address-cells = <3>; | ||
| 376 | reg = <0xe0009000 0x1000>; | ||
| 377 | compatible = "fsl,mpc8540-pci"; | ||
| 378 | device_type = "pci"; | ||
| 379 | }; | ||
| 380 | }; | ||
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts index 71347537b83e..15ca731bc24e 100644 --- a/arch/powerpc/boot/dts/tqm8540.dts +++ b/arch/powerpc/boot/dts/tqm8540.dts | |||
| @@ -289,7 +289,14 @@ | |||
| 289 | interrupt-map = < | 289 | interrupt-map = < |
| 290 | /* IDSEL 28 */ | 290 | /* IDSEL 28 */ |
| 291 | 0xe000 0 0 1 &mpic 2 1 | 291 | 0xe000 0 0 1 &mpic 2 1 |
| 292 | 0xe000 0 0 2 &mpic 3 1>; | 292 | 0xe000 0 0 2 &mpic 3 1 |
| 293 | 0xe000 0 0 3 &mpic 6 1 | ||
| 294 | 0xe000 0 0 4 &mpic 5 1 | ||
| 295 | |||
| 296 | /* IDSEL 11 */ | ||
| 297 | 0x5800 0 0 1 &mpic 6 1 | ||
| 298 | 0x5800 0 0 2 &mpic 5 1 | ||
| 299 | >; | ||
| 293 | 300 | ||
| 294 | interrupt-parent = <&mpic>; | 301 | interrupt-parent = <&mpic>; |
| 295 | interrupts = <24 2>; | 302 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts index b30f63753d41..f49d09181312 100644 --- a/arch/powerpc/boot/dts/tqm8541.dts +++ b/arch/powerpc/boot/dts/tqm8541.dts | |||
| @@ -311,7 +311,14 @@ | |||
| 311 | interrupt-map = < | 311 | interrupt-map = < |
| 312 | /* IDSEL 28 */ | 312 | /* IDSEL 28 */ |
| 313 | 0xe000 0 0 1 &mpic 2 1 | 313 | 0xe000 0 0 1 &mpic 2 1 |
| 314 | 0xe000 0 0 2 &mpic 3 1>; | 314 | 0xe000 0 0 2 &mpic 3 1 |
| 315 | 0xe000 0 0 3 &mpic 6 1 | ||
| 316 | 0xe000 0 0 4 &mpic 5 1 | ||
| 317 | |||
| 318 | /* IDSEL 11 */ | ||
| 319 | 0x5800 0 0 1 &mpic 6 1 | ||
| 320 | 0x5800 0 0 2 &mpic 5 1 | ||
| 321 | >; | ||
| 315 | 322 | ||
| 316 | interrupt-parent = <&mpic>; | 323 | interrupt-parent = <&mpic>; |
| 317 | interrupts = <24 2>; | 324 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts index 61f25e15fd66..5dbb36edb038 100644 --- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts +++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts | |||
| @@ -442,7 +442,14 @@ | |||
| 442 | interrupt-map = < | 442 | interrupt-map = < |
| 443 | /* IDSEL 28 */ | 443 | /* IDSEL 28 */ |
| 444 | 0xe000 0 0 1 &mpic 2 1 | 444 | 0xe000 0 0 1 &mpic 2 1 |
| 445 | 0xe000 0 0 2 &mpic 3 1>; | 445 | 0xe000 0 0 2 &mpic 3 1 |
| 446 | 0xe000 0 0 3 &mpic 6 1 | ||
| 447 | 0xe000 0 0 4 &mpic 5 1 | ||
| 448 | |||
| 449 | /* IDSEL 11 */ | ||
| 450 | 0x5800 0 0 1 &mpic 6 1 | ||
| 451 | 0x5800 0 0 2 &mpic 5 1 | ||
| 452 | >; | ||
| 446 | 453 | ||
| 447 | interrupt-parent = <&mpic>; | 454 | interrupt-parent = <&mpic>; |
| 448 | interrupts = <24 2>; | 455 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts index 025759c7c955..a050ae427108 100644 --- a/arch/powerpc/boot/dts/tqm8548.dts +++ b/arch/powerpc/boot/dts/tqm8548.dts | |||
| @@ -442,7 +442,14 @@ | |||
| 442 | interrupt-map = < | 442 | interrupt-map = < |
| 443 | /* IDSEL 28 */ | 443 | /* IDSEL 28 */ |
| 444 | 0xe000 0 0 1 &mpic 2 1 | 444 | 0xe000 0 0 1 &mpic 2 1 |
| 445 | 0xe000 0 0 2 &mpic 3 1>; | 445 | 0xe000 0 0 2 &mpic 3 1 |
| 446 | 0xe000 0 0 3 &mpic 6 1 | ||
| 447 | 0xe000 0 0 4 &mpic 5 1 | ||
| 448 | |||
| 449 | /* IDSEL 11 */ | ||
| 450 | 0x5800 0 0 1 &mpic 6 1 | ||
| 451 | 0x5800 0 0 2 &mpic 5 1 | ||
| 452 | >; | ||
| 446 | 453 | ||
| 447 | interrupt-parent = <&mpic>; | 454 | interrupt-parent = <&mpic>; |
| 448 | interrupts = <24 2>; | 455 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts index 95e287381836..81bad8cd3756 100644 --- a/arch/powerpc/boot/dts/tqm8555.dts +++ b/arch/powerpc/boot/dts/tqm8555.dts | |||
| @@ -311,7 +311,14 @@ | |||
| 311 | interrupt-map = < | 311 | interrupt-map = < |
| 312 | /* IDSEL 28 */ | 312 | /* IDSEL 28 */ |
| 313 | 0xe000 0 0 1 &mpic 2 1 | 313 | 0xe000 0 0 1 &mpic 2 1 |
| 314 | 0xe000 0 0 2 &mpic 3 1>; | 314 | 0xe000 0 0 2 &mpic 3 1 |
| 315 | 0xe000 0 0 3 &mpic 6 1 | ||
| 316 | 0xe000 0 0 4 &mpic 5 1 | ||
| 317 | |||
| 318 | /* IDSEL 11 */ | ||
| 319 | 0x5800 0 0 1 &mpic 6 1 | ||
| 320 | 0x5800 0 0 2 &mpic 5 1 | ||
| 321 | >; | ||
| 315 | 322 | ||
| 316 | interrupt-parent = <&mpic>; | 323 | interrupt-parent = <&mpic>; |
| 317 | interrupts = <24 2>; | 324 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8560.dts b/arch/powerpc/boot/dts/tqm8560.dts index ff70580a8f4c..22ec39b5beeb 100644 --- a/arch/powerpc/boot/dts/tqm8560.dts +++ b/arch/powerpc/boot/dts/tqm8560.dts | |||
| @@ -382,7 +382,14 @@ | |||
| 382 | interrupt-map = < | 382 | interrupt-map = < |
| 383 | /* IDSEL 28 */ | 383 | /* IDSEL 28 */ |
| 384 | 0xe000 0 0 1 &mpic 2 1 | 384 | 0xe000 0 0 1 &mpic 2 1 |
| 385 | 0xe000 0 0 2 &mpic 3 1>; | 385 | 0xe000 0 0 2 &mpic 3 1 |
| 386 | 0xe000 0 0 3 &mpic 6 1 | ||
| 387 | 0xe000 0 0 4 &mpic 5 1 | ||
| 388 | |||
| 389 | /* IDSEL 11 */ | ||
| 390 | 0x5800 0 0 1 &mpic 6 1 | ||
| 391 | 0x5800 0 0 2 &mpic 5 1 | ||
| 392 | >; | ||
| 386 | 393 | ||
| 387 | interrupt-parent = <&mpic>; | 394 | interrupt-parent = <&mpic>; |
| 388 | interrupts = <24 2>; | 395 | interrupts = <24 2>; |
diff --git a/arch/powerpc/boot/dts/tqm8xx.dts b/arch/powerpc/boot/dts/tqm8xx.dts new file mode 100644 index 000000000000..f6da7ec49a8e --- /dev/null +++ b/arch/powerpc/boot/dts/tqm8xx.dts | |||
| @@ -0,0 +1,172 @@ | |||
| 1 | /* | ||
| 2 | * TQM8XX Device Tree Source | ||
| 3 | * | ||
| 4 | * Heiko Schocher <hs@denx.de> | ||
| 5 | * 2010 DENX Software Engineering GmbH | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | /dts-v1/; | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "TQM8xx"; | ||
| 17 | compatible = "tqc,tqm8xx"; | ||
| 18 | #address-cells = <1>; | ||
| 19 | #size-cells = <1>; | ||
| 20 | |||
| 21 | aliases { | ||
| 22 | ethernet0 = ð0; | ||
| 23 | ethernet1 = ð1; | ||
| 24 | mdio1 = &phy1; | ||
| 25 | serial0 = &smc1; | ||
| 26 | }; | ||
| 27 | |||
| 28 | cpus { | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <0>; | ||
| 31 | |||
| 32 | PowerPC,860@0 { | ||
| 33 | device_type = "cpu"; | ||
| 34 | reg = <0x0>; | ||
| 35 | d-cache-line-size = <16>; // 16 bytes | ||
| 36 | i-cache-line-size = <16>; // 16 bytes | ||
| 37 | d-cache-size = <0x1000>; // L1, 4K | ||
| 38 | i-cache-size = <0x1000>; // L1, 4K | ||
| 39 | timebase-frequency = <0>; | ||
| 40 | bus-frequency = <0>; | ||
| 41 | clock-frequency = <0>; | ||
| 42 | interrupts = <15 2>; // decrementer interrupt | ||
| 43 | interrupt-parent = <&PIC>; | ||
| 44 | }; | ||
| 45 | }; | ||
| 46 | |||
| 47 | memory { | ||
| 48 | device_type = "memory"; | ||
| 49 | reg = <0x0 0x2000000>; | ||
| 50 | }; | ||
| 51 | |||
| 52 | localbus@fff00100 { | ||
| 53 | compatible = "fsl,mpc860-localbus", "fsl,pq1-localbus"; | ||
| 54 | #address-cells = <2>; | ||
| 55 | #size-cells = <1>; | ||
| 56 | reg = <0xfff00100 0x40>; | ||
| 57 | |||
| 58 | ranges = < | ||
| 59 | 0x0 0x0 0x40000000 0x800000 | ||
| 60 | >; | ||
| 61 | |||
| 62 | flash@0,0 { | ||
| 63 | compatible = "cfi-flash"; | ||
| 64 | reg = <0 0 0x800000>; | ||
| 65 | #address-cells = <1>; | ||
| 66 | #size-cells = <1>; | ||
| 67 | bank-width = <4>; | ||
| 68 | device-width = <2>; | ||
| 69 | }; | ||
| 70 | }; | ||
| 71 | |||
| 72 | soc@fff00000 { | ||
| 73 | #address-cells = <1>; | ||
| 74 | #size-cells = <1>; | ||
| 75 | device_type = "soc"; | ||
| 76 | ranges = <0x0 0xfff00000 0x00004000>; | ||
| 77 | |||
| 78 | phy1: mdio@e00 { | ||
| 79 | compatible = "fsl,mpc866-fec-mdio", "fsl,pq1-fec-mdio"; | ||
| 80 | reg = <0xe00 0x188>; | ||
| 81 | #address-cells = <1>; | ||
| 82 | #size-cells = <0>; | ||
| 83 | PHY: ethernet-phy@f { | ||
| 84 | reg = <0xf>; | ||
| 85 | device_type = "ethernet-phy"; | ||
| 86 | }; | ||
| 87 | }; | ||
| 88 | |||
| 89 | eth1: ethernet@e00 { | ||
| 90 | device_type = "network"; | ||
| 91 | compatible = "fsl,mpc866-fec-enet", | ||
| 92 | "fsl,pq1-fec-enet"; | ||
| 93 | reg = <0xe00 0x188>; | ||
| 94 | interrupts = <3 1>; | ||
| 95 | interrupt-parent = <&PIC>; | ||
| 96 | phy-handle = <&PHY>; | ||
| 97 | linux,network-index = <1>; | ||
| 98 | }; | ||
| 99 | |||
| 100 | PIC: pic@0 { | ||
| 101 | interrupt-controller; | ||
| 102 | #interrupt-cells = <2>; | ||
| 103 | reg = <0x0 0x24>; | ||
| 104 | compatible = "fsl,mpc860-pic", "fsl,pq1-pic"; | ||
| 105 | }; | ||
| 106 | |||
| 107 | cpm@9c0 { | ||
| 108 | #address-cells = <1>; | ||
| 109 | #size-cells = <1>; | ||
| 110 | compatible = "fsl,mpc860-cpm", "fsl,cpm1"; | ||
| 111 | ranges; | ||
| 112 | reg = <0x9c0 0x40>; | ||
| 113 | brg-frequency = <0>; | ||
| 114 | interrupts = <0 2>; // cpm error interrupt | ||
| 115 | interrupt-parent = <&CPM_PIC>; | ||
| 116 | |||
| 117 | muram@2000 { | ||
| 118 | #address-cells = <1>; | ||
| 119 | #size-cells = <1>; | ||
| 120 | ranges = <0x0 0x2000 0x2000>; | ||
| 121 | |||
| 122 | data@0 { | ||
| 123 | compatible = "fsl,cpm-muram-data"; | ||
| 124 | reg = <0x0 0x2000>; | ||
| 125 | }; | ||
| 126 | }; | ||
| 127 | |||
| 128 | brg@9f0 { | ||
| 129 | compatible = "fsl,mpc860-brg", | ||
| 130 | "fsl,cpm1-brg", | ||
| 131 | "fsl,cpm-brg"; | ||
| 132 | reg = <0x9f0 0x10>; | ||
| 133 | clock-frequency = <0>; | ||
| 134 | }; | ||
| 135 | |||
| 136 | CPM_PIC: pic@930 { | ||
| 137 | interrupt-controller; | ||
| 138 | #address-cells = <0>; | ||
| 139 | #interrupt-cells = <1>; | ||
| 140 | interrupts = <5 2 0 2>; | ||
| 141 | interrupt-parent = <&PIC>; | ||
| 142 | reg = <0x930 0x20>; | ||
| 143 | compatible = "fsl,mpc860-cpm-pic", | ||
| 144 | "fsl,cpm1-pic"; | ||
| 145 | }; | ||
| 146 | |||
| 147 | |||
| 148 | smc1: serial@a80 { | ||
| 149 | device_type = "serial"; | ||
| 150 | compatible = "fsl,mpc860-smc-uart", | ||
| 151 | "fsl,cpm1-smc-uart"; | ||
| 152 | reg = <0xa80 0x10 0x3e80 0x40>; | ||
| 153 | interrupts = <4>; | ||
| 154 | interrupt-parent = <&CPM_PIC>; | ||
| 155 | fsl,cpm-brg = <1>; | ||
| 156 | fsl,cpm-command = <0x90>; | ||
| 157 | }; | ||
| 158 | |||
| 159 | eth0: ethernet@a00 { | ||
| 160 | device_type = "network"; | ||
| 161 | compatible = "fsl,mpc860-scc-enet", | ||
| 162 | "fsl,cpm1-scc-enet"; | ||
| 163 | reg = <0xa00 0x18 0x3c00 0x100>; | ||
| 164 | interrupts = <30>; | ||
| 165 | interrupt-parent = <&CPM_PIC>; | ||
| 166 | fsl,cpm-command = <0000>; | ||
| 167 | linux,network-index = <0>; | ||
| 168 | fixed-link = <0 0 10 0 0>; | ||
| 169 | }; | ||
| 170 | }; | ||
| 171 | }; | ||
| 172 | }; | ||
diff --git a/arch/powerpc/configs/mpc85xx_defconfig b/arch/powerpc/configs/mpc85xx_defconfig index cfebef9f9123..d32f31a03f58 100644 --- a/arch/powerpc/configs/mpc85xx_defconfig +++ b/arch/powerpc/configs/mpc85xx_defconfig | |||
| @@ -19,7 +19,8 @@ CONFIG_E500=y | |||
| 19 | CONFIG_FSL_EMB_PERFMON=y | 19 | CONFIG_FSL_EMB_PERFMON=y |
| 20 | CONFIG_BOOKE=y | 20 | CONFIG_BOOKE=y |
| 21 | CONFIG_FSL_BOOKE=y | 21 | CONFIG_FSL_BOOKE=y |
| 22 | # CONFIG_PHYS_64BIT is not set | 22 | CONFIG_PTE_64BIT=y |
| 23 | CONFIG_PHYS_64BIT=y | ||
| 23 | CONFIG_SPE=y | 24 | CONFIG_SPE=y |
| 24 | CONFIG_PPC_MMU_NOHASH=y | 25 | CONFIG_PPC_MMU_NOHASH=y |
| 25 | CONFIG_PPC_MMU_NOHASH_32=y | 26 | CONFIG_PPC_MMU_NOHASH_32=y |
| @@ -28,7 +29,7 @@ CONFIG_PPC_BOOK3E_MMU=y | |||
| 28 | # CONFIG_SMP is not set | 29 | # CONFIG_SMP is not set |
| 29 | CONFIG_PPC32=y | 30 | CONFIG_PPC32=y |
| 30 | CONFIG_WORD_SIZE=32 | 31 | CONFIG_WORD_SIZE=32 |
| 31 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | 32 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y |
| 32 | CONFIG_MMU=y | 33 | CONFIG_MMU=y |
| 33 | CONFIG_GENERIC_CMOS_UPDATE=y | 34 | CONFIG_GENERIC_CMOS_UPDATE=y |
| 34 | CONFIG_GENERIC_TIME=y | 35 | CONFIG_GENERIC_TIME=y |
| @@ -239,6 +240,7 @@ CONFIG_MPC85xx_MDS=y | |||
| 239 | CONFIG_MPC8536_DS=y | 240 | CONFIG_MPC8536_DS=y |
| 240 | CONFIG_MPC85xx_DS=y | 241 | CONFIG_MPC85xx_DS=y |
| 241 | CONFIG_MPC85xx_RDB=y | 242 | CONFIG_MPC85xx_RDB=y |
| 243 | CONFIG_P1022_DS=y | ||
| 242 | CONFIG_SOCRATES=y | 244 | CONFIG_SOCRATES=y |
| 243 | CONFIG_KSI8560=y | 245 | CONFIG_KSI8560=y |
| 244 | CONFIG_XES_MPC85xx=y | 246 | CONFIG_XES_MPC85xx=y |
| @@ -311,7 +313,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
| 311 | CONFIG_PAGEFLAGS_EXTENDED=y | 313 | CONFIG_PAGEFLAGS_EXTENDED=y |
| 312 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 314 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 313 | CONFIG_MIGRATION=y | 315 | CONFIG_MIGRATION=y |
| 314 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 316 | CONFIG_PHYS_ADDR_T_64BIT=y |
| 315 | CONFIG_ZONE_DMA_FLAG=1 | 317 | CONFIG_ZONE_DMA_FLAG=1 |
| 316 | CONFIG_BOUNCE=y | 318 | CONFIG_BOUNCE=y |
| 317 | CONFIG_VIRT_TO_BUS=y | 319 | CONFIG_VIRT_TO_BUS=y |
| @@ -321,7 +323,7 @@ CONFIG_PPC_4K_PAGES=y | |||
| 321 | # CONFIG_PPC_16K_PAGES is not set | 323 | # CONFIG_PPC_16K_PAGES is not set |
| 322 | # CONFIG_PPC_64K_PAGES is not set | 324 | # CONFIG_PPC_64K_PAGES is not set |
| 323 | # CONFIG_PPC_256K_PAGES is not set | 325 | # CONFIG_PPC_256K_PAGES is not set |
| 324 | CONFIG_FORCE_MAX_ZONEORDER=11 | 326 | CONFIG_FORCE_MAX_ZONEORDER=12 |
| 325 | CONFIG_PROC_DEVICETREE=y | 327 | CONFIG_PROC_DEVICETREE=y |
| 326 | # CONFIG_CMDLINE_BOOL is not set | 328 | # CONFIG_CMDLINE_BOOL is not set |
| 327 | CONFIG_EXTRA_TARGETS="" | 329 | CONFIG_EXTRA_TARGETS="" |
| @@ -1122,16 +1124,13 @@ CONFIG_VGA_CONSOLE=y | |||
| 1122 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | 1124 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set |
| 1123 | CONFIG_DUMMY_CONSOLE=y | 1125 | CONFIG_DUMMY_CONSOLE=y |
| 1124 | CONFIG_SOUND=y | 1126 | CONFIG_SOUND=y |
| 1125 | CONFIG_SOUND_OSS_CORE=y | 1127 | # CONFIG_SOUND_OSS_CORE is not set |
| 1126 | CONFIG_SOUND_OSS_CORE_PRECLAIM=y | ||
| 1127 | CONFIG_SND=y | 1128 | CONFIG_SND=y |
| 1128 | CONFIG_SND_TIMER=y | 1129 | CONFIG_SND_TIMER=y |
| 1129 | CONFIG_SND_PCM=y | 1130 | CONFIG_SND_PCM=y |
| 1130 | # CONFIG_SND_SEQUENCER is not set | 1131 | # CONFIG_SND_SEQUENCER is not set |
| 1131 | CONFIG_SND_OSSEMUL=y | 1132 | # CONFIG_SND_MIXER_OSS is not set |
| 1132 | CONFIG_SND_MIXER_OSS=y | 1133 | # CONFIG_SND_PCM_OSS is not set |
| 1133 | CONFIG_SND_PCM_OSS=y | ||
| 1134 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 1135 | # CONFIG_SND_HRTIMER is not set | 1134 | # CONFIG_SND_HRTIMER is not set |
| 1136 | # CONFIG_SND_DYNAMIC_MINORS is not set | 1135 | # CONFIG_SND_DYNAMIC_MINORS is not set |
| 1137 | # CONFIG_SND_SUPPORT_OLD_API is not set | 1136 | # CONFIG_SND_SUPPORT_OLD_API is not set |
| @@ -1145,12 +1144,7 @@ CONFIG_SND_VMASTER=y | |||
| 1145 | # CONFIG_SND_SBAWE_SEQ is not set | 1144 | # CONFIG_SND_SBAWE_SEQ is not set |
| 1146 | # CONFIG_SND_EMU10K1_SEQ is not set | 1145 | # CONFIG_SND_EMU10K1_SEQ is not set |
| 1147 | CONFIG_SND_AC97_CODEC=y | 1146 | CONFIG_SND_AC97_CODEC=y |
| 1148 | CONFIG_SND_DRIVERS=y | 1147 | # CONFIG_SND_DRIVERS is not set |
| 1149 | # CONFIG_SND_DUMMY is not set | ||
| 1150 | # CONFIG_SND_MTPAV is not set | ||
| 1151 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 1152 | # CONFIG_SND_MPU401 is not set | ||
| 1153 | # CONFIG_SND_AC97_POWER_SAVE is not set | ||
| 1154 | CONFIG_SND_PCI=y | 1148 | CONFIG_SND_PCI=y |
| 1155 | # CONFIG_SND_AD1889 is not set | 1149 | # CONFIG_SND_AD1889 is not set |
| 1156 | # CONFIG_SND_ALS300 is not set | 1150 | # CONFIG_SND_ALS300 is not set |
| @@ -1218,12 +1212,8 @@ CONFIG_SND_INTEL8X0=y | |||
| 1218 | # CONFIG_SND_VIRTUOSO is not set | 1212 | # CONFIG_SND_VIRTUOSO is not set |
| 1219 | # CONFIG_SND_VX222 is not set | 1213 | # CONFIG_SND_VX222 is not set |
| 1220 | # CONFIG_SND_YMFPCI is not set | 1214 | # CONFIG_SND_YMFPCI is not set |
| 1221 | CONFIG_SND_PPC=y | 1215 | # CONFIG_SND_PPC is not set |
| 1222 | CONFIG_SND_USB=y | 1216 | # CONFIG_SND_USB is not set |
| 1223 | # CONFIG_SND_USB_AUDIO is not set | ||
| 1224 | # CONFIG_SND_USB_UA101 is not set | ||
| 1225 | # CONFIG_SND_USB_USX2Y is not set | ||
| 1226 | # CONFIG_SND_USB_CAIAQ is not set | ||
| 1227 | # CONFIG_SND_SOC is not set | 1217 | # CONFIG_SND_SOC is not set |
| 1228 | # CONFIG_SOUND_PRIME is not set | 1218 | # CONFIG_SOUND_PRIME is not set |
| 1229 | CONFIG_AC97_BUS=y | 1219 | CONFIG_AC97_BUS=y |
diff --git a/arch/powerpc/configs/mpc85xx_smp_defconfig b/arch/powerpc/configs/mpc85xx_smp_defconfig index f5451d80f19b..f93de10adcda 100644 --- a/arch/powerpc/configs/mpc85xx_smp_defconfig +++ b/arch/powerpc/configs/mpc85xx_smp_defconfig | |||
| @@ -19,7 +19,8 @@ CONFIG_E500=y | |||
| 19 | CONFIG_FSL_EMB_PERFMON=y | 19 | CONFIG_FSL_EMB_PERFMON=y |
| 20 | CONFIG_BOOKE=y | 20 | CONFIG_BOOKE=y |
| 21 | CONFIG_FSL_BOOKE=y | 21 | CONFIG_FSL_BOOKE=y |
| 22 | # CONFIG_PHYS_64BIT is not set | 22 | CONFIG_PTE_64BIT=y |
| 23 | CONFIG_PHYS_64BIT=y | ||
| 23 | CONFIG_SPE=y | 24 | CONFIG_SPE=y |
| 24 | CONFIG_PPC_MMU_NOHASH=y | 25 | CONFIG_PPC_MMU_NOHASH=y |
| 25 | CONFIG_PPC_MMU_NOHASH_32=y | 26 | CONFIG_PPC_MMU_NOHASH_32=y |
| @@ -29,7 +30,7 @@ CONFIG_SMP=y | |||
| 29 | CONFIG_NR_CPUS=8 | 30 | CONFIG_NR_CPUS=8 |
| 30 | CONFIG_PPC32=y | 31 | CONFIG_PPC32=y |
| 31 | CONFIG_WORD_SIZE=32 | 32 | CONFIG_WORD_SIZE=32 |
| 32 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | 33 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y |
| 33 | CONFIG_MMU=y | 34 | CONFIG_MMU=y |
| 34 | CONFIG_GENERIC_CMOS_UPDATE=y | 35 | CONFIG_GENERIC_CMOS_UPDATE=y |
| 35 | CONFIG_GENERIC_TIME=y | 36 | CONFIG_GENERIC_TIME=y |
| @@ -243,6 +244,7 @@ CONFIG_MPC85xx_MDS=y | |||
| 243 | CONFIG_MPC8536_DS=y | 244 | CONFIG_MPC8536_DS=y |
| 244 | CONFIG_MPC85xx_DS=y | 245 | CONFIG_MPC85xx_DS=y |
| 245 | CONFIG_MPC85xx_RDB=y | 246 | CONFIG_MPC85xx_RDB=y |
| 247 | CONFIG_P1022_DS=y | ||
| 246 | CONFIG_SOCRATES=y | 248 | CONFIG_SOCRATES=y |
| 247 | CONFIG_KSI8560=y | 249 | CONFIG_KSI8560=y |
| 248 | CONFIG_XES_MPC85xx=y | 250 | CONFIG_XES_MPC85xx=y |
| @@ -316,7 +318,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
| 316 | CONFIG_PAGEFLAGS_EXTENDED=y | 318 | CONFIG_PAGEFLAGS_EXTENDED=y |
| 317 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 319 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 318 | CONFIG_MIGRATION=y | 320 | CONFIG_MIGRATION=y |
| 319 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 321 | CONFIG_PHYS_ADDR_T_64BIT=y |
| 320 | CONFIG_ZONE_DMA_FLAG=1 | 322 | CONFIG_ZONE_DMA_FLAG=1 |
| 321 | CONFIG_BOUNCE=y | 323 | CONFIG_BOUNCE=y |
| 322 | CONFIG_VIRT_TO_BUS=y | 324 | CONFIG_VIRT_TO_BUS=y |
| @@ -326,7 +328,7 @@ CONFIG_PPC_4K_PAGES=y | |||
| 326 | # CONFIG_PPC_16K_PAGES is not set | 328 | # CONFIG_PPC_16K_PAGES is not set |
| 327 | # CONFIG_PPC_64K_PAGES is not set | 329 | # CONFIG_PPC_64K_PAGES is not set |
| 328 | # CONFIG_PPC_256K_PAGES is not set | 330 | # CONFIG_PPC_256K_PAGES is not set |
| 329 | CONFIG_FORCE_MAX_ZONEORDER=11 | 331 | CONFIG_FORCE_MAX_ZONEORDER=12 |
| 330 | CONFIG_PROC_DEVICETREE=y | 332 | CONFIG_PROC_DEVICETREE=y |
| 331 | # CONFIG_CMDLINE_BOOL is not set | 333 | # CONFIG_CMDLINE_BOOL is not set |
| 332 | CONFIG_EXTRA_TARGETS="" | 334 | CONFIG_EXTRA_TARGETS="" |
| @@ -1127,16 +1129,13 @@ CONFIG_VGA_CONSOLE=y | |||
| 1127 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | 1129 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set |
| 1128 | CONFIG_DUMMY_CONSOLE=y | 1130 | CONFIG_DUMMY_CONSOLE=y |
| 1129 | CONFIG_SOUND=y | 1131 | CONFIG_SOUND=y |
| 1130 | CONFIG_SOUND_OSS_CORE=y | 1132 | # CONFIG_SOUND_OSS_CORE is not set |
| 1131 | CONFIG_SOUND_OSS_CORE_PRECLAIM=y | ||
| 1132 | CONFIG_SND=y | 1133 | CONFIG_SND=y |
| 1133 | CONFIG_SND_TIMER=y | 1134 | CONFIG_SND_TIMER=y |
| 1134 | CONFIG_SND_PCM=y | 1135 | CONFIG_SND_PCM=y |
| 1135 | # CONFIG_SND_SEQUENCER is not set | 1136 | # CONFIG_SND_SEQUENCER is not set |
| 1136 | CONFIG_SND_OSSEMUL=y | 1137 | # CONFIG_SND_MIXER_OSS is not set |
| 1137 | CONFIG_SND_MIXER_OSS=y | 1138 | # CONFIG_SND_PCM_OSS is not set |
| 1138 | CONFIG_SND_PCM_OSS=y | ||
| 1139 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 1140 | # CONFIG_SND_HRTIMER is not set | 1139 | # CONFIG_SND_HRTIMER is not set |
| 1141 | # CONFIG_SND_DYNAMIC_MINORS is not set | 1140 | # CONFIG_SND_DYNAMIC_MINORS is not set |
| 1142 | # CONFIG_SND_SUPPORT_OLD_API is not set | 1141 | # CONFIG_SND_SUPPORT_OLD_API is not set |
| @@ -1150,12 +1149,7 @@ CONFIG_SND_VMASTER=y | |||
| 1150 | # CONFIG_SND_SBAWE_SEQ is not set | 1149 | # CONFIG_SND_SBAWE_SEQ is not set |
| 1151 | # CONFIG_SND_EMU10K1_SEQ is not set | 1150 | # CONFIG_SND_EMU10K1_SEQ is not set |
| 1152 | CONFIG_SND_AC97_CODEC=y | 1151 | CONFIG_SND_AC97_CODEC=y |
| 1153 | CONFIG_SND_DRIVERS=y | 1152 | # CONFIG_SND_DRIVERS is not set |
| 1154 | # CONFIG_SND_DUMMY is not set | ||
| 1155 | # CONFIG_SND_MTPAV is not set | ||
| 1156 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 1157 | # CONFIG_SND_MPU401 is not set | ||
| 1158 | # CONFIG_SND_AC97_POWER_SAVE is not set | ||
| 1159 | CONFIG_SND_PCI=y | 1153 | CONFIG_SND_PCI=y |
| 1160 | # CONFIG_SND_AD1889 is not set | 1154 | # CONFIG_SND_AD1889 is not set |
| 1161 | # CONFIG_SND_ALS300 is not set | 1155 | # CONFIG_SND_ALS300 is not set |
| @@ -1223,12 +1217,8 @@ CONFIG_SND_INTEL8X0=y | |||
| 1223 | # CONFIG_SND_VIRTUOSO is not set | 1217 | # CONFIG_SND_VIRTUOSO is not set |
| 1224 | # CONFIG_SND_VX222 is not set | 1218 | # CONFIG_SND_VX222 is not set |
| 1225 | # CONFIG_SND_YMFPCI is not set | 1219 | # CONFIG_SND_YMFPCI is not set |
| 1226 | CONFIG_SND_PPC=y | 1220 | # CONFIG_SND_PPC is not set |
| 1227 | CONFIG_SND_USB=y | 1221 | # CONFIG_SND_USB is not set |
| 1228 | # CONFIG_SND_USB_AUDIO is not set | ||
| 1229 | # CONFIG_SND_USB_UA101 is not set | ||
| 1230 | # CONFIG_SND_USB_USX2Y is not set | ||
| 1231 | # CONFIG_SND_USB_CAIAQ is not set | ||
| 1232 | # CONFIG_SND_SOC is not set | 1222 | # CONFIG_SND_SOC is not set |
| 1233 | # CONFIG_SOUND_PRIME is not set | 1223 | # CONFIG_SOUND_PRIME is not set |
| 1234 | CONFIG_AC97_BUS=y | 1224 | CONFIG_AC97_BUS=y |
diff --git a/arch/powerpc/configs/tqm8xx_defconfig b/arch/powerpc/configs/tqm8xx_defconfig new file mode 100644 index 000000000000..85e654b64874 --- /dev/null +++ b/arch/powerpc/configs/tqm8xx_defconfig | |||
| @@ -0,0 +1,934 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.34-rc1 | ||
| 4 | # Tue Mar 23 08:22:15 2010 | ||
| 5 | # | ||
| 6 | # CONFIG_PPC64 is not set | ||
| 7 | |||
| 8 | # | ||
| 9 | # Processor support | ||
| 10 | # | ||
| 11 | # CONFIG_PPC_BOOK3S_32 is not set | ||
| 12 | # CONFIG_PPC_85xx is not set | ||
| 13 | CONFIG_PPC_8xx=y | ||
| 14 | # CONFIG_40x is not set | ||
| 15 | # CONFIG_44x is not set | ||
| 16 | # CONFIG_E200 is not set | ||
| 17 | CONFIG_8xx=y | ||
| 18 | CONFIG_PPC_MMU_NOHASH=y | ||
| 19 | CONFIG_PPC_MMU_NOHASH_32=y | ||
| 20 | # CONFIG_PPC_MM_SLICES is not set | ||
| 21 | CONFIG_NOT_COHERENT_CACHE=y | ||
| 22 | CONFIG_PPC32=y | ||
| 23 | CONFIG_WORD_SIZE=32 | ||
| 24 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | ||
| 25 | CONFIG_MMU=y | ||
| 26 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
| 27 | CONFIG_GENERIC_TIME=y | ||
| 28 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
| 29 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 30 | CONFIG_GENERIC_HARDIRQS=y | ||
| 31 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
| 32 | # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set | ||
| 33 | # CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set | ||
| 34 | CONFIG_IRQ_PER_CPU=y | ||
| 35 | CONFIG_NR_IRQS=512 | ||
| 36 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 37 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
| 38 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 39 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 40 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 41 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
| 42 | CONFIG_GENERIC_HWEIGHT=y | ||
| 43 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 44 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | ||
| 45 | CONFIG_PPC=y | ||
| 46 | CONFIG_EARLY_PRINTK=y | ||
| 47 | CONFIG_GENERIC_NVRAM=y | ||
| 48 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
| 49 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
| 50 | CONFIG_PPC_OF=y | ||
| 51 | CONFIG_OF=y | ||
| 52 | # CONFIG_PPC_UDBG_16550 is not set | ||
| 53 | # CONFIG_GENERIC_TBSYNC is not set | ||
| 54 | CONFIG_AUDIT_ARCH=y | ||
| 55 | CONFIG_GENERIC_BUG=y | ||
| 56 | CONFIG_DTC=y | ||
| 57 | # CONFIG_DEFAULT_UIMAGE is not set | ||
| 58 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
| 59 | # CONFIG_PPC_DCR_NATIVE is not set | ||
| 60 | # CONFIG_PPC_DCR_MMIO is not set | ||
| 61 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
| 62 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 63 | CONFIG_CONSTRUCTORS=y | ||
| 64 | |||
| 65 | # | ||
| 66 | # General setup | ||
| 67 | # | ||
| 68 | CONFIG_EXPERIMENTAL=y | ||
| 69 | CONFIG_BROKEN_ON_SMP=y | ||
| 70 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 71 | CONFIG_LOCALVERSION="" | ||
| 72 | CONFIG_LOCALVERSION_AUTO=y | ||
| 73 | # CONFIG_SWAP is not set | ||
| 74 | CONFIG_SYSVIPC=y | ||
| 75 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 76 | # CONFIG_POSIX_MQUEUE is not set | ||
| 77 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 78 | # CONFIG_TASKSTATS is not set | ||
| 79 | # CONFIG_AUDIT is not set | ||
| 80 | |||
| 81 | # | ||
| 82 | # RCU Subsystem | ||
| 83 | # | ||
| 84 | CONFIG_TREE_RCU=y | ||
| 85 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 86 | # CONFIG_TINY_RCU is not set | ||
| 87 | # CONFIG_RCU_TRACE is not set | ||
| 88 | CONFIG_RCU_FANOUT=32 | ||
| 89 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 90 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 91 | # CONFIG_IKCONFIG is not set | ||
| 92 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 93 | # CONFIG_CGROUPS is not set | ||
| 94 | CONFIG_SYSFS_DEPRECATED=y | ||
| 95 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 96 | # CONFIG_RELAY is not set | ||
| 97 | # CONFIG_NAMESPACES is not set | ||
| 98 | # CONFIG_BLK_DEV_INITRD is not set | ||
| 99 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
| 100 | CONFIG_SYSCTL=y | ||
| 101 | CONFIG_ANON_INODES=y | ||
| 102 | CONFIG_EMBEDDED=y | ||
| 103 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 104 | CONFIG_KALLSYMS=y | ||
| 105 | # CONFIG_KALLSYMS_ALL is not set | ||
| 106 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 107 | CONFIG_HOTPLUG=y | ||
| 108 | CONFIG_PRINTK=y | ||
| 109 | CONFIG_BUG=y | ||
| 110 | # CONFIG_ELF_CORE is not set | ||
| 111 | # CONFIG_BASE_FULL is not set | ||
| 112 | # CONFIG_FUTEX is not set | ||
| 113 | CONFIG_EPOLL=y | ||
| 114 | CONFIG_SIGNALFD=y | ||
| 115 | CONFIG_TIMERFD=y | ||
| 116 | CONFIG_EVENTFD=y | ||
| 117 | CONFIG_SHMEM=y | ||
| 118 | CONFIG_AIO=y | ||
| 119 | CONFIG_HAVE_PERF_EVENTS=y | ||
| 120 | |||
| 121 | # | ||
| 122 | # Kernel Performance Events And Counters | ||
| 123 | # | ||
| 124 | # CONFIG_PERF_EVENTS is not set | ||
| 125 | # CONFIG_PERF_COUNTERS is not set | ||
| 126 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
| 127 | CONFIG_SLUB_DEBUG=y | ||
| 128 | CONFIG_COMPAT_BRK=y | ||
| 129 | # CONFIG_SLAB is not set | ||
| 130 | CONFIG_SLUB=y | ||
| 131 | # CONFIG_SLOB is not set | ||
| 132 | # CONFIG_PROFILING is not set | ||
| 133 | CONFIG_HAVE_OPROFILE=y | ||
| 134 | # CONFIG_KPROBES is not set | ||
| 135 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
| 136 | CONFIG_HAVE_IOREMAP_PROT=y | ||
| 137 | CONFIG_HAVE_KPROBES=y | ||
| 138 | CONFIG_HAVE_KRETPROBES=y | ||
| 139 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
| 140 | CONFIG_HAVE_DMA_ATTRS=y | ||
| 141 | CONFIG_HAVE_CLK=y | ||
| 142 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
| 143 | |||
| 144 | # | ||
| 145 | # GCOV-based kernel profiling | ||
| 146 | # | ||
| 147 | # CONFIG_SLOW_WORK is not set | ||
| 148 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
| 149 | CONFIG_SLABINFO=y | ||
| 150 | CONFIG_BASE_SMALL=1 | ||
| 151 | CONFIG_MODULES=y | ||
| 152 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 153 | CONFIG_MODULE_UNLOAD=y | ||
| 154 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 155 | # CONFIG_MODVERSIONS is not set | ||
| 156 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 157 | CONFIG_BLOCK=y | ||
| 158 | CONFIG_LBDAF=y | ||
| 159 | # CONFIG_BLK_DEV_BSG is not set | ||
| 160 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 161 | |||
| 162 | # | ||
| 163 | # IO Schedulers | ||
| 164 | # | ||
| 165 | CONFIG_IOSCHED_NOOP=y | ||
| 166 | CONFIG_IOSCHED_DEADLINE=y | ||
| 167 | # CONFIG_IOSCHED_CFQ is not set | ||
| 168 | CONFIG_DEFAULT_DEADLINE=y | ||
| 169 | # CONFIG_DEFAULT_CFQ is not set | ||
| 170 | # CONFIG_DEFAULT_NOOP is not set | ||
| 171 | CONFIG_DEFAULT_IOSCHED="deadline" | ||
| 172 | # CONFIG_INLINE_SPIN_TRYLOCK is not set | ||
| 173 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set | ||
| 174 | # CONFIG_INLINE_SPIN_LOCK is not set | ||
| 175 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | ||
| 176 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | ||
| 177 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | ||
| 178 | CONFIG_INLINE_SPIN_UNLOCK=y | ||
| 179 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | ||
| 180 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y | ||
| 181 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | ||
| 182 | # CONFIG_INLINE_READ_TRYLOCK is not set | ||
| 183 | # CONFIG_INLINE_READ_LOCK is not set | ||
| 184 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
| 185 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
| 186 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
| 187 | CONFIG_INLINE_READ_UNLOCK=y | ||
| 188 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
| 189 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
| 190 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
| 191 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
| 192 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
| 193 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
| 194 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
| 195 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
| 196 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
| 197 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
| 198 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
| 199 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
| 200 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
| 201 | # CONFIG_FREEZER is not set | ||
| 202 | |||
| 203 | # | ||
| 204 | # Platform support | ||
| 205 | # | ||
| 206 | # CONFIG_PPC_CELL is not set | ||
| 207 | # CONFIG_PPC_CELL_NATIVE is not set | ||
| 208 | CONFIG_CPM1=y | ||
| 209 | # CONFIG_MPC8XXFADS is not set | ||
| 210 | # CONFIG_MPC86XADS is not set | ||
| 211 | # CONFIG_MPC885ADS is not set | ||
| 212 | # CONFIG_PPC_EP88XC is not set | ||
| 213 | # CONFIG_PPC_ADDER875 is not set | ||
| 214 | # CONFIG_PPC_MGSUVD is not set | ||
| 215 | CONFIG_TQM8XX=y | ||
| 216 | |||
| 217 | # | ||
| 218 | # MPC8xx CPM Options | ||
| 219 | # | ||
| 220 | |||
| 221 | # | ||
| 222 | # Generic MPC8xx Options | ||
| 223 | # | ||
| 224 | CONFIG_8xx_COPYBACK=y | ||
| 225 | # CONFIG_8xx_GPIO is not set | ||
| 226 | # CONFIG_8xx_CPU6 is not set | ||
| 227 | # CONFIG_8xx_CPU15 is not set | ||
| 228 | CONFIG_NO_UCODE_PATCH=y | ||
| 229 | # CONFIG_USB_SOF_UCODE_PATCH is not set | ||
| 230 | # CONFIG_I2C_SPI_UCODE_PATCH is not set | ||
| 231 | # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set | ||
| 232 | # CONFIG_PQ2ADS is not set | ||
| 233 | # CONFIG_IPIC is not set | ||
| 234 | # CONFIG_MPIC is not set | ||
| 235 | # CONFIG_MPIC_WEIRD is not set | ||
| 236 | # CONFIG_PPC_I8259 is not set | ||
| 237 | # CONFIG_PPC_RTAS is not set | ||
| 238 | # CONFIG_MMIO_NVRAM is not set | ||
| 239 | # CONFIG_PPC_MPC106 is not set | ||
| 240 | # CONFIG_PPC_970_NAP is not set | ||
| 241 | # CONFIG_PPC_INDIRECT_IO is not set | ||
| 242 | # CONFIG_GENERIC_IOMAP is not set | ||
| 243 | # CONFIG_CPU_FREQ is not set | ||
| 244 | # CONFIG_QUICC_ENGINE is not set | ||
| 245 | # CONFIG_FSL_ULI1575 is not set | ||
| 246 | CONFIG_CPM=y | ||
| 247 | # CONFIG_SIMPLE_GPIO is not set | ||
| 248 | |||
| 249 | # | ||
| 250 | # Kernel options | ||
| 251 | # | ||
| 252 | # CONFIG_HIGHMEM is not set | ||
| 253 | CONFIG_TICK_ONESHOT=y | ||
| 254 | CONFIG_NO_HZ=y | ||
| 255 | CONFIG_HIGH_RES_TIMERS=y | ||
| 256 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 257 | CONFIG_HZ_100=y | ||
| 258 | # CONFIG_HZ_250 is not set | ||
| 259 | # CONFIG_HZ_300 is not set | ||
| 260 | # CONFIG_HZ_1000 is not set | ||
| 261 | CONFIG_HZ=100 | ||
| 262 | CONFIG_SCHED_HRTICK=y | ||
| 263 | CONFIG_PREEMPT_NONE=y | ||
| 264 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 265 | # CONFIG_PREEMPT is not set | ||
| 266 | CONFIG_BINFMT_ELF=y | ||
| 267 | # CONFIG_HAVE_AOUT is not set | ||
| 268 | # CONFIG_BINFMT_MISC is not set | ||
| 269 | # CONFIG_MATH_EMULATION is not set | ||
| 270 | CONFIG_8XX_MINIMAL_FPEMU=y | ||
| 271 | # CONFIG_IOMMU_HELPER is not set | ||
| 272 | # CONFIG_SWIOTLB is not set | ||
| 273 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 274 | CONFIG_ARCH_HAS_WALK_MEMORY=y | ||
| 275 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
| 276 | CONFIG_SPARSE_IRQ=y | ||
| 277 | CONFIG_MAX_ACTIVE_REGIONS=32 | ||
| 278 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 279 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 280 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 281 | CONFIG_FLATMEM_MANUAL=y | ||
| 282 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 283 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 284 | CONFIG_FLATMEM=y | ||
| 285 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 286 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 287 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 288 | CONFIG_MIGRATION=y | ||
| 289 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
| 290 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 291 | CONFIG_BOUNCE=y | ||
| 292 | CONFIG_VIRT_TO_BUS=y | ||
| 293 | # CONFIG_KSM is not set | ||
| 294 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 295 | CONFIG_PPC_4K_PAGES=y | ||
| 296 | # CONFIG_PPC_16K_PAGES is not set | ||
| 297 | # CONFIG_PPC_64K_PAGES is not set | ||
| 298 | # CONFIG_PPC_256K_PAGES is not set | ||
| 299 | CONFIG_FORCE_MAX_ZONEORDER=11 | ||
| 300 | CONFIG_PROC_DEVICETREE=y | ||
| 301 | # CONFIG_CMDLINE_BOOL is not set | ||
| 302 | CONFIG_EXTRA_TARGETS="" | ||
| 303 | # CONFIG_PM is not set | ||
| 304 | # CONFIG_SECCOMP is not set | ||
| 305 | CONFIG_ISA_DMA_API=y | ||
| 306 | |||
| 307 | # | ||
| 308 | # Bus options | ||
| 309 | # | ||
| 310 | CONFIG_ZONE_DMA=y | ||
| 311 | CONFIG_NEED_DMA_MAP_STATE=y | ||
| 312 | CONFIG_FSL_SOC=y | ||
| 313 | # CONFIG_PCI is not set | ||
| 314 | # CONFIG_PCI_DOMAINS is not set | ||
| 315 | # CONFIG_PCI_SYSCALL is not set | ||
| 316 | # CONFIG_PCI_QSPAN is not set | ||
| 317 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 318 | # CONFIG_PCCARD is not set | ||
| 319 | # CONFIG_HAS_RAPIDIO is not set | ||
| 320 | |||
| 321 | # | ||
| 322 | # Advanced setup | ||
| 323 | # | ||
| 324 | # CONFIG_ADVANCED_OPTIONS is not set | ||
| 325 | |||
| 326 | # | ||
| 327 | # Default settings for advanced configuration options are used | ||
| 328 | # | ||
| 329 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
| 330 | CONFIG_PAGE_OFFSET=0xc0000000 | ||
| 331 | CONFIG_KERNEL_START=0xc0000000 | ||
| 332 | CONFIG_PHYSICAL_START=0x00000000 | ||
| 333 | CONFIG_TASK_SIZE=0x80000000 | ||
| 334 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
| 335 | CONFIG_NET=y | ||
| 336 | |||
| 337 | # | ||
| 338 | # Networking options | ||
| 339 | # | ||
| 340 | CONFIG_PACKET=y | ||
| 341 | CONFIG_UNIX=y | ||
| 342 | # CONFIG_NET_KEY is not set | ||
| 343 | CONFIG_INET=y | ||
| 344 | # CONFIG_IP_MULTICAST is not set | ||
| 345 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 346 | CONFIG_IP_FIB_HASH=y | ||
| 347 | CONFIG_IP_PNP=y | ||
| 348 | # CONFIG_IP_PNP_DHCP is not set | ||
| 349 | # CONFIG_IP_PNP_BOOTP is not set | ||
| 350 | # CONFIG_IP_PNP_RARP is not set | ||
| 351 | # CONFIG_NET_IPIP is not set | ||
| 352 | # CONFIG_NET_IPGRE is not set | ||
| 353 | # CONFIG_ARPD is not set | ||
| 354 | CONFIG_SYN_COOKIES=y | ||
| 355 | # CONFIG_INET_AH is not set | ||
| 356 | # CONFIG_INET_ESP is not set | ||
| 357 | # CONFIG_INET_IPCOMP is not set | ||
| 358 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 359 | # CONFIG_INET_TUNNEL is not set | ||
| 360 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 361 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 362 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 363 | # CONFIG_INET_LRO is not set | ||
| 364 | CONFIG_INET_DIAG=y | ||
| 365 | CONFIG_INET_TCP_DIAG=y | ||
| 366 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 367 | CONFIG_TCP_CONG_CUBIC=y | ||
| 368 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 369 | # CONFIG_TCP_MD5SIG is not set | ||
| 370 | # CONFIG_IPV6 is not set | ||
| 371 | # CONFIG_NETWORK_SECMARK is not set | ||
| 372 | # CONFIG_NETFILTER is not set | ||
| 373 | # CONFIG_IP_DCCP is not set | ||
| 374 | # CONFIG_IP_SCTP is not set | ||
| 375 | # CONFIG_RDS is not set | ||
| 376 | # CONFIG_TIPC is not set | ||
| 377 | # CONFIG_ATM is not set | ||
| 378 | # CONFIG_BRIDGE is not set | ||
| 379 | # CONFIG_NET_DSA is not set | ||
| 380 | # CONFIG_VLAN_8021Q is not set | ||
| 381 | # CONFIG_DECNET is not set | ||
| 382 | # CONFIG_LLC2 is not set | ||
| 383 | # CONFIG_IPX is not set | ||
| 384 | # CONFIG_ATALK is not set | ||
| 385 | # CONFIG_X25 is not set | ||
| 386 | # CONFIG_LAPB is not set | ||
| 387 | # CONFIG_ECONET is not set | ||
| 388 | # CONFIG_WAN_ROUTER is not set | ||
| 389 | # CONFIG_PHONET is not set | ||
| 390 | # CONFIG_IEEE802154 is not set | ||
| 391 | # CONFIG_NET_SCHED is not set | ||
| 392 | # CONFIG_DCB is not set | ||
| 393 | |||
| 394 | # | ||
| 395 | # Network testing | ||
| 396 | # | ||
| 397 | # CONFIG_NET_PKTGEN is not set | ||
| 398 | # CONFIG_HAMRADIO is not set | ||
| 399 | # CONFIG_CAN is not set | ||
| 400 | # CONFIG_IRDA is not set | ||
| 401 | # CONFIG_BT is not set | ||
| 402 | # CONFIG_AF_RXRPC is not set | ||
| 403 | # CONFIG_WIRELESS is not set | ||
| 404 | # CONFIG_WIMAX is not set | ||
| 405 | # CONFIG_RFKILL is not set | ||
| 406 | # CONFIG_NET_9P is not set | ||
| 407 | |||
| 408 | # | ||
| 409 | # Device Drivers | ||
| 410 | # | ||
| 411 | |||
| 412 | # | ||
| 413 | # Generic Driver Options | ||
| 414 | # | ||
| 415 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 416 | # CONFIG_DEVTMPFS is not set | ||
| 417 | CONFIG_STANDALONE=y | ||
| 418 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 419 | # CONFIG_FW_LOADER is not set | ||
| 420 | # CONFIG_DEBUG_DRIVER is not set | ||
| 421 | # CONFIG_DEBUG_DEVRES is not set | ||
| 422 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 423 | # CONFIG_CONNECTOR is not set | ||
| 424 | CONFIG_MTD=y | ||
| 425 | # CONFIG_MTD_DEBUG is not set | ||
| 426 | # CONFIG_MTD_TESTS is not set | ||
| 427 | CONFIG_MTD_CONCAT=y | ||
| 428 | CONFIG_MTD_PARTITIONS=y | ||
| 429 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 430 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 431 | CONFIG_MTD_OF_PARTS=y | ||
| 432 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 433 | |||
| 434 | # | ||
| 435 | # User Modules And Translation Layers | ||
| 436 | # | ||
| 437 | CONFIG_MTD_CHAR=y | ||
| 438 | CONFIG_MTD_BLKDEVS=y | ||
| 439 | CONFIG_MTD_BLOCK=y | ||
| 440 | # CONFIG_FTL is not set | ||
| 441 | # CONFIG_NFTL is not set | ||
| 442 | # CONFIG_INFTL is not set | ||
| 443 | # CONFIG_RFD_FTL is not set | ||
| 444 | # CONFIG_SSFDC is not set | ||
| 445 | # CONFIG_MTD_OOPS is not set | ||
| 446 | |||
| 447 | # | ||
| 448 | # RAM/ROM/Flash chip drivers | ||
| 449 | # | ||
| 450 | CONFIG_MTD_CFI=y | ||
| 451 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 452 | CONFIG_MTD_GEN_PROBE=y | ||
| 453 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 454 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 455 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 456 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 457 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 458 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 459 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 460 | CONFIG_MTD_CFI_I1=y | ||
| 461 | CONFIG_MTD_CFI_I2=y | ||
| 462 | # CONFIG_MTD_CFI_I4 is not set | ||
| 463 | # CONFIG_MTD_CFI_I8 is not set | ||
| 464 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 465 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 466 | # CONFIG_MTD_CFI_STAA is not set | ||
| 467 | CONFIG_MTD_CFI_UTIL=y | ||
| 468 | # CONFIG_MTD_RAM is not set | ||
| 469 | # CONFIG_MTD_ROM is not set | ||
| 470 | # CONFIG_MTD_ABSENT is not set | ||
| 471 | |||
| 472 | # | ||
| 473 | # Mapping drivers for chip access | ||
| 474 | # | ||
| 475 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 476 | # CONFIG_MTD_PHYSMAP is not set | ||
| 477 | CONFIG_MTD_PHYSMAP_OF=y | ||
| 478 | # CONFIG_MTD_CFI_FLAGADM is not set | ||
| 479 | # CONFIG_MTD_PLATRAM is not set | ||
| 480 | |||
| 481 | # | ||
| 482 | # Self-contained MTD device drivers | ||
| 483 | # | ||
| 484 | # CONFIG_MTD_SLRAM is not set | ||
| 485 | # CONFIG_MTD_PHRAM is not set | ||
| 486 | # CONFIG_MTD_MTDRAM is not set | ||
| 487 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 488 | |||
| 489 | # | ||
| 490 | # Disk-On-Chip Device Drivers | ||
| 491 | # | ||
| 492 | # CONFIG_MTD_DOC2000 is not set | ||
| 493 | # CONFIG_MTD_DOC2001 is not set | ||
| 494 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 495 | # CONFIG_MTD_NAND is not set | ||
| 496 | # CONFIG_MTD_ONENAND is not set | ||
| 497 | |||
| 498 | # | ||
| 499 | # LPDDR flash memory drivers | ||
| 500 | # | ||
| 501 | # CONFIG_MTD_LPDDR is not set | ||
| 502 | |||
| 503 | # | ||
| 504 | # UBI - Unsorted block images | ||
| 505 | # | ||
| 506 | # CONFIG_MTD_UBI is not set | ||
| 507 | CONFIG_OF_FLATTREE=y | ||
| 508 | CONFIG_OF_DYNAMIC=y | ||
| 509 | CONFIG_OF_DEVICE=y | ||
| 510 | CONFIG_OF_MDIO=y | ||
| 511 | # CONFIG_PARPORT is not set | ||
| 512 | # CONFIG_BLK_DEV is not set | ||
| 513 | # CONFIG_MISC_DEVICES is not set | ||
| 514 | CONFIG_HAVE_IDE=y | ||
| 515 | # CONFIG_IDE is not set | ||
| 516 | |||
| 517 | # | ||
| 518 | # SCSI device support | ||
| 519 | # | ||
| 520 | # CONFIG_RAID_ATTRS is not set | ||
| 521 | # CONFIG_SCSI is not set | ||
| 522 | # CONFIG_SCSI_DMA is not set | ||
| 523 | # CONFIG_SCSI_NETLINK is not set | ||
| 524 | # CONFIG_ATA is not set | ||
| 525 | # CONFIG_MD is not set | ||
| 526 | # CONFIG_MACINTOSH_DRIVERS is not set | ||
| 527 | CONFIG_NETDEVICES=y | ||
| 528 | # CONFIG_DUMMY is not set | ||
| 529 | # CONFIG_BONDING is not set | ||
| 530 | # CONFIG_MACVLAN is not set | ||
| 531 | # CONFIG_EQUALIZER is not set | ||
| 532 | # CONFIG_TUN is not set | ||
| 533 | # CONFIG_VETH is not set | ||
| 534 | CONFIG_PHYLIB=y | ||
| 535 | |||
| 536 | # | ||
| 537 | # MII PHY device drivers | ||
| 538 | # | ||
| 539 | # CONFIG_MARVELL_PHY is not set | ||
| 540 | CONFIG_DAVICOM_PHY=y | ||
| 541 | # CONFIG_QSEMI_PHY is not set | ||
| 542 | # CONFIG_LXT_PHY is not set | ||
| 543 | # CONFIG_CICADA_PHY is not set | ||
| 544 | # CONFIG_VITESSE_PHY is not set | ||
| 545 | # CONFIG_SMSC_PHY is not set | ||
| 546 | # CONFIG_BROADCOM_PHY is not set | ||
| 547 | # CONFIG_ICPLUS_PHY is not set | ||
| 548 | # CONFIG_REALTEK_PHY is not set | ||
| 549 | # CONFIG_NATIONAL_PHY is not set | ||
| 550 | # CONFIG_STE10XP is not set | ||
| 551 | # CONFIG_LSI_ET1011C_PHY is not set | ||
| 552 | CONFIG_FIXED_PHY=y | ||
| 553 | # CONFIG_MDIO_BITBANG is not set | ||
| 554 | CONFIG_NET_ETHERNET=y | ||
| 555 | CONFIG_MII=y | ||
| 556 | # CONFIG_ETHOC is not set | ||
| 557 | # CONFIG_DNET is not set | ||
| 558 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 559 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 560 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 561 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 562 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 563 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 564 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 565 | # CONFIG_B44 is not set | ||
| 566 | # CONFIG_KS8842 is not set | ||
| 567 | # CONFIG_KS8851_MLL is not set | ||
| 568 | # CONFIG_XILINX_EMACLITE is not set | ||
| 569 | CONFIG_FS_ENET=y | ||
| 570 | CONFIG_FS_ENET_HAS_SCC=y | ||
| 571 | CONFIG_FS_ENET_HAS_FEC=y | ||
| 572 | CONFIG_FS_ENET_MDIO_FEC=y | ||
| 573 | # CONFIG_NETDEV_1000 is not set | ||
| 574 | # CONFIG_NETDEV_10000 is not set | ||
| 575 | # CONFIG_WLAN is not set | ||
| 576 | |||
| 577 | # | ||
| 578 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
| 579 | # | ||
| 580 | # CONFIG_WAN is not set | ||
| 581 | # CONFIG_PPP is not set | ||
| 582 | # CONFIG_SLIP is not set | ||
| 583 | # CONFIG_NETCONSOLE is not set | ||
| 584 | # CONFIG_NETPOLL is not set | ||
| 585 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 586 | # CONFIG_ISDN is not set | ||
| 587 | # CONFIG_PHONE is not set | ||
| 588 | |||
| 589 | # | ||
| 590 | # Input device support | ||
| 591 | # | ||
| 592 | # CONFIG_INPUT is not set | ||
| 593 | |||
| 594 | # | ||
| 595 | # Hardware I/O ports | ||
| 596 | # | ||
| 597 | # CONFIG_SERIO is not set | ||
| 598 | # CONFIG_GAMEPORT is not set | ||
| 599 | |||
| 600 | # | ||
| 601 | # Character devices | ||
| 602 | # | ||
| 603 | # CONFIG_VT is not set | ||
| 604 | CONFIG_DEVKMEM=y | ||
| 605 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 606 | |||
| 607 | # | ||
| 608 | # Serial drivers | ||
| 609 | # | ||
| 610 | # CONFIG_SERIAL_8250 is not set | ||
| 611 | |||
| 612 | # | ||
| 613 | # Non-8250 serial port support | ||
| 614 | # | ||
| 615 | # CONFIG_SERIAL_UARTLITE is not set | ||
| 616 | CONFIG_SERIAL_CORE=y | ||
| 617 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 618 | CONFIG_SERIAL_CPM=y | ||
| 619 | CONFIG_SERIAL_CPM_CONSOLE=y | ||
| 620 | # CONFIG_SERIAL_TIMBERDALE is not set | ||
| 621 | # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set | ||
| 622 | CONFIG_UNIX98_PTYS=y | ||
| 623 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 624 | # CONFIG_LEGACY_PTYS is not set | ||
| 625 | # CONFIG_HVC_UDBG is not set | ||
| 626 | # CONFIG_IPMI_HANDLER is not set | ||
| 627 | CONFIG_HW_RANDOM=y | ||
| 628 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
| 629 | # CONFIG_NVRAM is not set | ||
| 630 | CONFIG_GEN_RTC=y | ||
| 631 | # CONFIG_GEN_RTC_X is not set | ||
| 632 | # CONFIG_R3964 is not set | ||
| 633 | # CONFIG_RAW_DRIVER is not set | ||
| 634 | # CONFIG_TCG_TPM is not set | ||
| 635 | # CONFIG_I2C is not set | ||
| 636 | # CONFIG_SPI is not set | ||
| 637 | |||
| 638 | # | ||
| 639 | # PPS support | ||
| 640 | # | ||
| 641 | # CONFIG_PPS is not set | ||
| 642 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
| 643 | # CONFIG_GPIOLIB is not set | ||
| 644 | # CONFIG_W1 is not set | ||
| 645 | # CONFIG_POWER_SUPPLY is not set | ||
| 646 | # CONFIG_HWMON is not set | ||
| 647 | # CONFIG_THERMAL is not set | ||
| 648 | # CONFIG_WATCHDOG is not set | ||
| 649 | CONFIG_SSB_POSSIBLE=y | ||
| 650 | |||
| 651 | # | ||
| 652 | # Sonics Silicon Backplane | ||
| 653 | # | ||
| 654 | # CONFIG_SSB is not set | ||
| 655 | |||
| 656 | # | ||
| 657 | # Multifunction device drivers | ||
| 658 | # | ||
| 659 | # CONFIG_MFD_CORE is not set | ||
| 660 | # CONFIG_MFD_SM501 is not set | ||
| 661 | # CONFIG_HTC_PASIC3 is not set | ||
| 662 | # CONFIG_MFD_TMIO is not set | ||
| 663 | # CONFIG_REGULATOR is not set | ||
| 664 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 665 | |||
| 666 | # | ||
| 667 | # Graphics support | ||
| 668 | # | ||
| 669 | # CONFIG_VGASTATE is not set | ||
| 670 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 671 | # CONFIG_FB is not set | ||
| 672 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 673 | |||
| 674 | # | ||
| 675 | # Display device support | ||
| 676 | # | ||
| 677 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 678 | # CONFIG_SOUND is not set | ||
| 679 | # CONFIG_USB_SUPPORT is not set | ||
| 680 | # CONFIG_MMC is not set | ||
| 681 | # CONFIG_MEMSTICK is not set | ||
| 682 | # CONFIG_NEW_LEDS is not set | ||
| 683 | # CONFIG_ACCESSIBILITY is not set | ||
| 684 | # CONFIG_EDAC is not set | ||
| 685 | # CONFIG_RTC_CLASS is not set | ||
| 686 | # CONFIG_DMADEVICES is not set | ||
| 687 | # CONFIG_AUXDISPLAY is not set | ||
| 688 | # CONFIG_UIO is not set | ||
| 689 | |||
| 690 | # | ||
| 691 | # TI VLYNQ | ||
| 692 | # | ||
| 693 | # CONFIG_STAGING is not set | ||
| 694 | |||
| 695 | # | ||
| 696 | # File systems | ||
| 697 | # | ||
| 698 | # CONFIG_EXT2_FS is not set | ||
| 699 | # CONFIG_EXT3_FS is not set | ||
| 700 | # CONFIG_EXT4_FS is not set | ||
| 701 | # CONFIG_REISERFS_FS is not set | ||
| 702 | # CONFIG_JFS_FS is not set | ||
| 703 | # CONFIG_FS_POSIX_ACL is not set | ||
| 704 | # CONFIG_XFS_FS is not set | ||
| 705 | # CONFIG_GFS2_FS is not set | ||
| 706 | # CONFIG_OCFS2_FS is not set | ||
| 707 | # CONFIG_BTRFS_FS is not set | ||
| 708 | # CONFIG_NILFS2_FS is not set | ||
| 709 | CONFIG_FILE_LOCKING=y | ||
| 710 | CONFIG_FSNOTIFY=y | ||
| 711 | # CONFIG_DNOTIFY is not set | ||
| 712 | # CONFIG_INOTIFY is not set | ||
| 713 | CONFIG_INOTIFY_USER=y | ||
| 714 | # CONFIG_QUOTA is not set | ||
| 715 | # CONFIG_AUTOFS_FS is not set | ||
| 716 | # CONFIG_AUTOFS4_FS is not set | ||
| 717 | # CONFIG_FUSE_FS is not set | ||
| 718 | |||
| 719 | # | ||
| 720 | # Caches | ||
| 721 | # | ||
| 722 | # CONFIG_FSCACHE is not set | ||
| 723 | |||
| 724 | # | ||
| 725 | # CD-ROM/DVD Filesystems | ||
| 726 | # | ||
| 727 | # CONFIG_ISO9660_FS is not set | ||
| 728 | # CONFIG_UDF_FS is not set | ||
| 729 | |||
| 730 | # | ||
| 731 | # DOS/FAT/NT Filesystems | ||
| 732 | # | ||
| 733 | # CONFIG_MSDOS_FS is not set | ||
| 734 | # CONFIG_VFAT_FS is not set | ||
| 735 | # CONFIG_NTFS_FS is not set | ||
| 736 | |||
| 737 | # | ||
| 738 | # Pseudo filesystems | ||
| 739 | # | ||
| 740 | CONFIG_PROC_FS=y | ||
| 741 | # CONFIG_PROC_KCORE is not set | ||
| 742 | CONFIG_PROC_SYSCTL=y | ||
| 743 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 744 | CONFIG_SYSFS=y | ||
| 745 | CONFIG_TMPFS=y | ||
| 746 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 747 | # CONFIG_HUGETLB_PAGE is not set | ||
| 748 | # CONFIG_CONFIGFS_FS is not set | ||
| 749 | CONFIG_MISC_FILESYSTEMS=y | ||
| 750 | # CONFIG_ADFS_FS is not set | ||
| 751 | # CONFIG_AFFS_FS is not set | ||
| 752 | # CONFIG_HFS_FS is not set | ||
| 753 | # CONFIG_HFSPLUS_FS is not set | ||
| 754 | # CONFIG_BEFS_FS is not set | ||
| 755 | # CONFIG_BFS_FS is not set | ||
| 756 | # CONFIG_EFS_FS is not set | ||
| 757 | # CONFIG_JFFS2_FS is not set | ||
| 758 | # CONFIG_LOGFS is not set | ||
| 759 | CONFIG_CRAMFS=y | ||
| 760 | # CONFIG_SQUASHFS is not set | ||
| 761 | # CONFIG_VXFS_FS is not set | ||
| 762 | # CONFIG_MINIX_FS is not set | ||
| 763 | # CONFIG_OMFS_FS is not set | ||
| 764 | # CONFIG_HPFS_FS is not set | ||
| 765 | # CONFIG_QNX4FS_FS is not set | ||
| 766 | # CONFIG_ROMFS_FS is not set | ||
| 767 | # CONFIG_SYSV_FS is not set | ||
| 768 | # CONFIG_UFS_FS is not set | ||
| 769 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 770 | CONFIG_NFS_FS=y | ||
| 771 | CONFIG_NFS_V3=y | ||
| 772 | # CONFIG_NFS_V3_ACL is not set | ||
| 773 | # CONFIG_NFS_V4 is not set | ||
| 774 | CONFIG_ROOT_NFS=y | ||
| 775 | # CONFIG_NFSD is not set | ||
| 776 | CONFIG_LOCKD=y | ||
| 777 | CONFIG_LOCKD_V4=y | ||
| 778 | CONFIG_NFS_COMMON=y | ||
| 779 | CONFIG_SUNRPC=y | ||
| 780 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 781 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 782 | # CONFIG_SMB_FS is not set | ||
| 783 | # CONFIG_CIFS is not set | ||
| 784 | # CONFIG_NCP_FS is not set | ||
| 785 | # CONFIG_CODA_FS is not set | ||
| 786 | # CONFIG_AFS_FS is not set | ||
| 787 | |||
| 788 | # | ||
| 789 | # Partition Types | ||
| 790 | # | ||
| 791 | CONFIG_PARTITION_ADVANCED=y | ||
| 792 | # CONFIG_ACORN_PARTITION is not set | ||
| 793 | # CONFIG_OSF_PARTITION is not set | ||
| 794 | # CONFIG_AMIGA_PARTITION is not set | ||
| 795 | # CONFIG_ATARI_PARTITION is not set | ||
| 796 | # CONFIG_MAC_PARTITION is not set | ||
| 797 | CONFIG_MSDOS_PARTITION=y | ||
| 798 | # CONFIG_BSD_DISKLABEL is not set | ||
| 799 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 800 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 801 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 802 | # CONFIG_LDM_PARTITION is not set | ||
| 803 | # CONFIG_SGI_PARTITION is not set | ||
| 804 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 805 | # CONFIG_SUN_PARTITION is not set | ||
| 806 | # CONFIG_KARMA_PARTITION is not set | ||
| 807 | # CONFIG_EFI_PARTITION is not set | ||
| 808 | # CONFIG_SYSV68_PARTITION is not set | ||
| 809 | # CONFIG_NLS is not set | ||
| 810 | # CONFIG_DLM is not set | ||
| 811 | # CONFIG_BINARY_PRINTF is not set | ||
| 812 | |||
| 813 | # | ||
| 814 | # Library routines | ||
| 815 | # | ||
| 816 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 817 | # CONFIG_CRC_CCITT is not set | ||
| 818 | # CONFIG_CRC16 is not set | ||
| 819 | # CONFIG_CRC_T10DIF is not set | ||
| 820 | # CONFIG_CRC_ITU_T is not set | ||
| 821 | # CONFIG_CRC32 is not set | ||
| 822 | # CONFIG_CRC7 is not set | ||
| 823 | # CONFIG_LIBCRC32C is not set | ||
| 824 | CONFIG_ZLIB_INFLATE=y | ||
| 825 | CONFIG_HAS_IOMEM=y | ||
| 826 | CONFIG_HAS_IOPORT=y | ||
| 827 | CONFIG_HAS_DMA=y | ||
| 828 | CONFIG_HAVE_LMB=y | ||
| 829 | CONFIG_NLATTR=y | ||
| 830 | CONFIG_GENERIC_ATOMIC64=y | ||
| 831 | |||
| 832 | # | ||
| 833 | # Kernel hacking | ||
| 834 | # | ||
| 835 | # CONFIG_PRINTK_TIME is not set | ||
| 836 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 837 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 838 | CONFIG_FRAME_WARN=1024 | ||
| 839 | CONFIG_MAGIC_SYSRQ=y | ||
| 840 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 841 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 842 | # CONFIG_DEBUG_FS is not set | ||
| 843 | # CONFIG_HEADERS_CHECK is not set | ||
| 844 | CONFIG_DEBUG_KERNEL=y | ||
| 845 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 846 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 847 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 848 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 849 | CONFIG_DETECT_HUNG_TASK=y | ||
| 850 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
| 851 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
| 852 | CONFIG_SCHED_DEBUG=y | ||
| 853 | # CONFIG_SCHEDSTATS is not set | ||
| 854 | # CONFIG_TIMER_STATS is not set | ||
| 855 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 856 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 857 | # CONFIG_SLUB_STATS is not set | ||
| 858 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
| 859 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 860 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 861 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 862 | # CONFIG_PROVE_LOCKING is not set | ||
| 863 | # CONFIG_LOCK_STAT is not set | ||
| 864 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 865 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 866 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 867 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 868 | CONFIG_DEBUG_INFO=y | ||
| 869 | # CONFIG_DEBUG_VM is not set | ||
| 870 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 871 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
| 872 | # CONFIG_DEBUG_LIST is not set | ||
| 873 | # CONFIG_DEBUG_SG is not set | ||
| 874 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 875 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
| 876 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 877 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 878 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 879 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
| 880 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
| 881 | # CONFIG_FAULT_INJECTION is not set | ||
| 882 | # CONFIG_LATENCYTOP is not set | ||
| 883 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 884 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
| 885 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 886 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
| 887 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
| 888 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
| 889 | CONFIG_TRACING_SUPPORT=y | ||
| 890 | CONFIG_FTRACE=y | ||
| 891 | # CONFIG_FUNCTION_TRACER is not set | ||
| 892 | # CONFIG_IRQSOFF_TRACER is not set | ||
| 893 | # CONFIG_SCHED_TRACER is not set | ||
| 894 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set | ||
| 895 | # CONFIG_BOOT_TRACER is not set | ||
| 896 | CONFIG_BRANCH_PROFILE_NONE=y | ||
| 897 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
| 898 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
| 899 | # CONFIG_STACK_TRACER is not set | ||
| 900 | # CONFIG_KMEMTRACE is not set | ||
| 901 | # CONFIG_WORKQUEUE_TRACER is not set | ||
| 902 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 903 | # CONFIG_DMA_API_DEBUG is not set | ||
| 904 | # CONFIG_SAMPLES is not set | ||
| 905 | CONFIG_HAVE_ARCH_KGDB=y | ||
| 906 | # CONFIG_KGDB is not set | ||
| 907 | # CONFIG_PPC_DISABLE_WERROR is not set | ||
| 908 | CONFIG_PPC_WERROR=y | ||
| 909 | CONFIG_PRINT_STACK_DEPTH=64 | ||
| 910 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
| 911 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
| 912 | # CONFIG_CODE_PATCHING_SELFTEST is not set | ||
| 913 | # CONFIG_FTR_FIXUP_SELFTEST is not set | ||
| 914 | # CONFIG_MSI_BITMAP_SELFTEST is not set | ||
| 915 | # CONFIG_XMON is not set | ||
| 916 | # CONFIG_IRQSTACKS is not set | ||
| 917 | # CONFIG_BDI_SWITCH is not set | ||
| 918 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
| 919 | |||
| 920 | # | ||
| 921 | # Security options | ||
| 922 | # | ||
| 923 | # CONFIG_KEYS is not set | ||
| 924 | # CONFIG_SECURITY is not set | ||
| 925 | # CONFIG_SECURITYFS is not set | ||
| 926 | # CONFIG_DEFAULT_SECURITY_SELINUX is not set | ||
| 927 | # CONFIG_DEFAULT_SECURITY_SMACK is not set | ||
| 928 | # CONFIG_DEFAULT_SECURITY_TOMOYO is not set | ||
| 929 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
| 930 | CONFIG_DEFAULT_SECURITY="" | ||
| 931 | # CONFIG_CRYPTO is not set | ||
| 932 | CONFIG_PPC_CLOCK=y | ||
| 933 | CONFIG_PPC_LIB_RHEAP=y | ||
| 934 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/powerpc/include/asm/abs_addr.h b/arch/powerpc/include/asm/abs_addr.h index 9a846efe6382..5ab0b71531be 100644 --- a/arch/powerpc/include/asm/abs_addr.h +++ b/arch/powerpc/include/asm/abs_addr.h | |||
| @@ -69,7 +69,7 @@ static inline unsigned long phys_to_abs(unsigned long pa) | |||
| 69 | * Legacy iSeries Hypervisor calls | 69 | * Legacy iSeries Hypervisor calls |
| 70 | */ | 70 | */ |
| 71 | #define iseries_hv_addr(virtaddr) \ | 71 | #define iseries_hv_addr(virtaddr) \ |
| 72 | (0x8000000000000000 | virt_to_abs(virtaddr)) | 72 | (0x8000000000000000UL | virt_to_abs(virtaddr)) |
| 73 | 73 | ||
| 74 | #endif /* __KERNEL__ */ | 74 | #endif /* __KERNEL__ */ |
| 75 | #endif /* _ASM_POWERPC_ABS_ADDR_H */ | 75 | #endif /* _ASM_POWERPC_ABS_ADDR_H */ |
diff --git a/arch/powerpc/include/asm/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h index 2048a6aeea91..decad950f11a 100644 --- a/arch/powerpc/include/asm/asm-compat.h +++ b/arch/powerpc/include/asm/asm-compat.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #define PPC_STLCX stringify_in_c(stdcx.) | 30 | #define PPC_STLCX stringify_in_c(stdcx.) |
| 31 | #define PPC_CNTLZL stringify_in_c(cntlzd) | 31 | #define PPC_CNTLZL stringify_in_c(cntlzd) |
| 32 | #define PPC_LR_STKOFF 16 | 32 | #define PPC_LR_STKOFF 16 |
| 33 | #define PPC_MIN_STKFRM 112 | ||
| 33 | 34 | ||
| 34 | /* Move to CR, single-entry optimized version. Only available | 35 | /* Move to CR, single-entry optimized version. Only available |
| 35 | * on POWER4 and later. | 36 | * on POWER4 and later. |
| @@ -55,6 +56,7 @@ | |||
| 55 | #define PPC_CNTLZL stringify_in_c(cntlzw) | 56 | #define PPC_CNTLZL stringify_in_c(cntlzw) |
| 56 | #define PPC_MTOCRF stringify_in_c(mtcrf) | 57 | #define PPC_MTOCRF stringify_in_c(mtcrf) |
| 57 | #define PPC_LR_STKOFF 4 | 58 | #define PPC_LR_STKOFF 4 |
| 59 | #define PPC_MIN_STKFRM 16 | ||
| 58 | 60 | ||
| 59 | #endif | 61 | #endif |
| 60 | 62 | ||
diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h index b0b21134f61a..5e2e2cfcc81b 100644 --- a/arch/powerpc/include/asm/cputable.h +++ b/arch/powerpc/include/asm/cputable.h | |||
| @@ -517,6 +517,10 @@ static inline int cpu_has_feature(unsigned long feature) | |||
| 517 | & feature); | 517 | & feature); |
| 518 | } | 518 | } |
| 519 | 519 | ||
| 520 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 521 | #define HBP_NUM 1 | ||
| 522 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 523 | |||
| 520 | #endif /* !__ASSEMBLY__ */ | 524 | #endif /* !__ASSEMBLY__ */ |
| 521 | 525 | ||
| 522 | #endif /* __KERNEL__ */ | 526 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/dbell.h b/arch/powerpc/include/asm/dbell.h index 501189a543d1..0893ab9343a6 100644 --- a/arch/powerpc/include/asm/dbell.h +++ b/arch/powerpc/include/asm/dbell.h | |||
| @@ -27,10 +27,10 @@ enum ppc_dbell { | |||
| 27 | PPC_G_DBELL_MC = 4, /* guest mcheck doorbell */ | 27 | PPC_G_DBELL_MC = 4, /* guest mcheck doorbell */ |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | #ifdef CONFIG_SMP | 30 | extern void doorbell_message_pass(int target, int msg); |
| 31 | extern unsigned long dbell_smp_message[NR_CPUS]; | 31 | extern void doorbell_exception(struct pt_regs *regs); |
| 32 | extern void smp_dbell_message_pass(int target, int msg); | 32 | extern void doorbell_check_self(void); |
| 33 | #endif | 33 | extern void doorbell_setup_this_cpu(void); |
| 34 | 34 | ||
| 35 | static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag) | 35 | static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag) |
| 36 | { | 36 | { |
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index 5119b7db3142..de03ca58db5d 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h | |||
| @@ -74,6 +74,7 @@ | |||
| 74 | #define H_NOT_ENOUGH_RESOURCES -44 | 74 | #define H_NOT_ENOUGH_RESOURCES -44 |
| 75 | #define H_R_STATE -45 | 75 | #define H_R_STATE -45 |
| 76 | #define H_RESCINDEND -46 | 76 | #define H_RESCINDEND -46 |
| 77 | #define H_MULTI_THREADS_ACTIVE -9005 | ||
| 77 | 78 | ||
| 78 | 79 | ||
| 79 | /* Long Busy is a condition that can be returned by the firmware | 80 | /* Long Busy is a condition that can be returned by the firmware |
diff --git a/arch/powerpc/include/asm/hw_breakpoint.h b/arch/powerpc/include/asm/hw_breakpoint.h new file mode 100644 index 000000000000..1c33ec17ca36 --- /dev/null +++ b/arch/powerpc/include/asm/hw_breakpoint.h | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | /* | ||
| 2 | * PowerPC BookIII S hardware breakpoint definitions | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright 2010, IBM Corporation. | ||
| 19 | * Author: K.Prasad <prasad@linux.vnet.ibm.com> | ||
| 20 | * | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _PPC_BOOK3S_64_HW_BREAKPOINT_H | ||
| 24 | #define _PPC_BOOK3S_64_HW_BREAKPOINT_H | ||
| 25 | |||
| 26 | #ifdef __KERNEL__ | ||
| 27 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 28 | |||
| 29 | struct arch_hw_breakpoint { | ||
| 30 | bool extraneous_interrupt; | ||
| 31 | u8 len; /* length of the target data symbol */ | ||
| 32 | int type; | ||
| 33 | unsigned long address; | ||
| 34 | }; | ||
| 35 | |||
| 36 | #include <linux/kdebug.h> | ||
| 37 | #include <asm/reg.h> | ||
| 38 | #include <asm/system.h> | ||
| 39 | |||
| 40 | struct perf_event; | ||
| 41 | struct pmu; | ||
| 42 | struct perf_sample_data; | ||
| 43 | |||
| 44 | #define HW_BREAKPOINT_ALIGN 0x7 | ||
| 45 | /* Maximum permissible length of any HW Breakpoint */ | ||
| 46 | #define HW_BREAKPOINT_LEN 0x8 | ||
| 47 | |||
| 48 | extern int hw_breakpoint_slots(int type); | ||
| 49 | extern int arch_bp_generic_fields(int type, int *gen_bp_type); | ||
| 50 | extern int arch_check_bp_in_kernelspace(struct perf_event *bp); | ||
| 51 | extern int arch_validate_hwbkpt_settings(struct perf_event *bp); | ||
| 52 | extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused, | ||
| 53 | unsigned long val, void *data); | ||
| 54 | int arch_install_hw_breakpoint(struct perf_event *bp); | ||
| 55 | void arch_uninstall_hw_breakpoint(struct perf_event *bp); | ||
| 56 | void hw_breakpoint_pmu_read(struct perf_event *bp); | ||
| 57 | extern void flush_ptrace_hw_breakpoint(struct task_struct *tsk); | ||
| 58 | |||
| 59 | extern struct pmu perf_ops_bp; | ||
| 60 | extern void ptrace_triggered(struct perf_event *bp, int nmi, | ||
| 61 | struct perf_sample_data *data, struct pt_regs *regs); | ||
| 62 | static inline void hw_breakpoint_disable(void) | ||
| 63 | { | ||
| 64 | set_dabr(0); | ||
| 65 | } | ||
| 66 | extern void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs); | ||
| 67 | |||
| 68 | #else /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 69 | static inline void hw_breakpoint_disable(void) { } | ||
| 70 | static inline void thread_change_pc(struct task_struct *tsk, | ||
| 71 | struct pt_regs *regs) { } | ||
| 72 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 73 | #endif /* __KERNEL__ */ | ||
| 74 | #endif /* _PPC_BOOK3S_64_HW_BREAKPOINT_H */ | ||
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index 9f0fc9e6ce0d..adc8e6cdf339 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h | |||
| @@ -266,6 +266,7 @@ struct machdep_calls { | |||
| 266 | void (*suspend_disable_irqs)(void); | 266 | void (*suspend_disable_irqs)(void); |
| 267 | void (*suspend_enable_irqs)(void); | 267 | void (*suspend_enable_irqs)(void); |
| 268 | #endif | 268 | #endif |
| 269 | int (*suspend_disable_cpu)(void); | ||
| 269 | 270 | ||
| 270 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE | 271 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE |
| 271 | ssize_t (*cpu_probe)(const char *, size_t); | 272 | ssize_t (*cpu_probe)(const char *, size_t); |
| @@ -277,6 +278,7 @@ extern void e500_idle(void); | |||
| 277 | extern void power4_idle(void); | 278 | extern void power4_idle(void); |
| 278 | extern void power4_cpu_offline_powersave(void); | 279 | extern void power4_cpu_offline_powersave(void); |
| 279 | extern void ppc6xx_idle(void); | 280 | extern void ppc6xx_idle(void); |
| 281 | extern void book3e_idle(void); | ||
| 280 | 282 | ||
| 281 | /* | 283 | /* |
| 282 | * ppc_md contains a copy of the machine description structure for the | 284 | * ppc_md contains a copy of the machine description structure for the |
| @@ -366,8 +368,5 @@ static inline void log_error(char *buf, unsigned int err_type, int fatal) | |||
| 366 | #define machine_late_initcall(mach,fn) __define_machine_initcall(mach,"7",fn,7) | 368 | #define machine_late_initcall(mach,fn) __define_machine_initcall(mach,"7",fn,7) |
| 367 | #define machine_late_initcall_sync(mach,fn) __define_machine_initcall(mach,"7s",fn,7s) | 369 | #define machine_late_initcall_sync(mach,fn) __define_machine_initcall(mach,"7s",fn,7s) |
| 368 | 370 | ||
| 369 | void generic_suspend_disable_irqs(void); | ||
| 370 | void generic_suspend_enable_irqs(void); | ||
| 371 | |||
| 372 | #endif /* __KERNEL__ */ | 371 | #endif /* __KERNEL__ */ |
| 373 | #endif /* _ASM_POWERPC_MACHDEP_H */ | 372 | #endif /* _ASM_POWERPC_MACHDEP_H */ |
diff --git a/arch/powerpc/include/asm/mmu-book3e.h b/arch/powerpc/include/asm/mmu-book3e.h index 74695816205c..87a1d787c5b6 100644 --- a/arch/powerpc/include/asm/mmu-book3e.h +++ b/arch/powerpc/include/asm/mmu-book3e.h | |||
| @@ -193,6 +193,10 @@ struct mmu_psize_def | |||
| 193 | { | 193 | { |
| 194 | unsigned int shift; /* number of bits */ | 194 | unsigned int shift; /* number of bits */ |
| 195 | unsigned int enc; /* PTE encoding */ | 195 | unsigned int enc; /* PTE encoding */ |
| 196 | unsigned int ind; /* Corresponding indirect page size shift */ | ||
| 197 | unsigned int flags; | ||
| 198 | #define MMU_PAGE_SIZE_DIRECT 0x1 /* Supported as a direct size */ | ||
| 199 | #define MMU_PAGE_SIZE_INDIRECT 0x2 /* Supported as an indirect size */ | ||
| 196 | }; | 200 | }; |
| 197 | extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; | 201 | extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; |
| 198 | 202 | ||
diff --git a/arch/powerpc/include/asm/mpc5121.h b/arch/powerpc/include/asm/mpc5121.h index e6a30bb1d16a..8c0ab2ca689c 100644 --- a/arch/powerpc/include/asm/mpc5121.h +++ b/arch/powerpc/include/asm/mpc5121.h | |||
| @@ -21,4 +21,36 @@ struct mpc512x_reset_module { | |||
| 21 | u32 rcer; /* Reset Control Enable Register */ | 21 | u32 rcer; /* Reset Control Enable Register */ |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | /* | ||
| 25 | * Clock Control Module | ||
| 26 | */ | ||
| 27 | struct mpc512x_ccm { | ||
| 28 | u32 spmr; /* System PLL Mode Register */ | ||
| 29 | u32 sccr1; /* System Clock Control Register 1 */ | ||
| 30 | u32 sccr2; /* System Clock Control Register 2 */ | ||
| 31 | u32 scfr1; /* System Clock Frequency Register 1 */ | ||
| 32 | u32 scfr2; /* System Clock Frequency Register 2 */ | ||
| 33 | u32 scfr2s; /* System Clock Frequency Shadow Register 2 */ | ||
| 34 | u32 bcr; /* Bread Crumb Register */ | ||
| 35 | u32 p0ccr; /* PSC0 Clock Control Register */ | ||
| 36 | u32 p1ccr; /* PSC1 CCR */ | ||
| 37 | u32 p2ccr; /* PSC2 CCR */ | ||
| 38 | u32 p3ccr; /* PSC3 CCR */ | ||
| 39 | u32 p4ccr; /* PSC4 CCR */ | ||
| 40 | u32 p5ccr; /* PSC5 CCR */ | ||
| 41 | u32 p6ccr; /* PSC6 CCR */ | ||
| 42 | u32 p7ccr; /* PSC7 CCR */ | ||
| 43 | u32 p8ccr; /* PSC8 CCR */ | ||
| 44 | u32 p9ccr; /* PSC9 CCR */ | ||
| 45 | u32 p10ccr; /* PSC10 CCR */ | ||
| 46 | u32 p11ccr; /* PSC11 CCR */ | ||
| 47 | u32 spccr; /* SPDIF Clock Control Register */ | ||
| 48 | u32 cccr; /* CFM Clock Control Register */ | ||
| 49 | u32 dccr; /* DIU Clock Control Register */ | ||
| 50 | u32 m1ccr; /* MSCAN1 CCR */ | ||
| 51 | u32 m2ccr; /* MSCAN2 CCR */ | ||
| 52 | u32 m3ccr; /* MSCAN3 CCR */ | ||
| 53 | u32 m4ccr; /* MSCAN4 CCR */ | ||
| 54 | u8 res[0x98]; /* Reserved */ | ||
| 55 | }; | ||
| 24 | #endif /* __ASM_POWERPC_MPC5121_H__ */ | 56 | #endif /* __ASM_POWERPC_MPC5121_H__ */ |
diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h index 8ce7963ad41d..1ff6662f7faf 100644 --- a/arch/powerpc/include/asm/paca.h +++ b/arch/powerpc/include/asm/paca.h | |||
| @@ -146,7 +146,7 @@ struct paca_struct { | |||
| 146 | extern struct paca_struct *paca; | 146 | extern struct paca_struct *paca; |
| 147 | extern __initdata struct paca_struct boot_paca; | 147 | extern __initdata struct paca_struct boot_paca; |
| 148 | extern void initialise_paca(struct paca_struct *new_paca, int cpu); | 148 | extern void initialise_paca(struct paca_struct *new_paca, int cpu); |
| 149 | 149 | extern void setup_paca(struct paca_struct *new_paca); | |
| 150 | extern void allocate_pacas(void); | 150 | extern void allocate_pacas(void); |
| 151 | extern void free_unused_pacas(void); | 151 | extern void free_unused_pacas(void); |
| 152 | 152 | ||
diff --git a/arch/powerpc/include/asm/percpu.h b/arch/powerpc/include/asm/percpu.h index f879252b7ea6..2cedefddba37 100644 --- a/arch/powerpc/include/asm/percpu.h +++ b/arch/powerpc/include/asm/percpu.h | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | #ifndef _ASM_POWERPC_PERCPU_H_ | 1 | #ifndef _ASM_POWERPC_PERCPU_H_ |
| 2 | #define _ASM_POWERPC_PERCPU_H_ | 2 | #define _ASM_POWERPC_PERCPU_H_ |
| 3 | #ifdef __powerpc64__ | 3 | #ifdef __powerpc64__ |
| 4 | #include <linux/compiler.h> | ||
| 5 | 4 | ||
| 6 | /* | 5 | /* |
| 7 | * Same as asm-generic/percpu.h, except that we store the per cpu offset | 6 | * Same as asm-generic/percpu.h, except that we store the per cpu offset |
| @@ -12,9 +11,7 @@ | |||
| 12 | 11 | ||
| 13 | #include <asm/paca.h> | 12 | #include <asm/paca.h> |
| 14 | 13 | ||
| 15 | #define __per_cpu_offset(cpu) (paca[cpu].data_offset) | ||
| 16 | #define __my_cpu_offset local_paca->data_offset | 14 | #define __my_cpu_offset local_paca->data_offset |
| 17 | #define per_cpu_offset(x) (__per_cpu_offset(x)) | ||
| 18 | 15 | ||
| 19 | #endif /* CONFIG_SMP */ | 16 | #endif /* CONFIG_SMP */ |
| 20 | #endif /* __powerpc64__ */ | 17 | #endif /* __powerpc64__ */ |
diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index d553bbeb726c..43adc8b819ed 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h | |||
| @@ -52,13 +52,17 @@ | |||
| 52 | #define PPC_INST_WAIT 0x7c00007c | 52 | #define PPC_INST_WAIT 0x7c00007c |
| 53 | #define PPC_INST_TLBIVAX 0x7c000624 | 53 | #define PPC_INST_TLBIVAX 0x7c000624 |
| 54 | #define PPC_INST_TLBSRX_DOT 0x7c0006a5 | 54 | #define PPC_INST_TLBSRX_DOT 0x7c0006a5 |
| 55 | #define PPC_INST_XXLOR 0xf0000510 | ||
| 55 | 56 | ||
| 56 | /* macros to insert fields into opcodes */ | 57 | /* macros to insert fields into opcodes */ |
| 57 | #define __PPC_RA(a) (((a) & 0x1f) << 16) | 58 | #define __PPC_RA(a) (((a) & 0x1f) << 16) |
| 58 | #define __PPC_RB(b) (((b) & 0x1f) << 11) | 59 | #define __PPC_RB(b) (((b) & 0x1f) << 11) |
| 59 | #define __PPC_RS(s) (((s) & 0x1f) << 21) | 60 | #define __PPC_RS(s) (((s) & 0x1f) << 21) |
| 60 | #define __PPC_RT(s) __PPC_RS(s) | 61 | #define __PPC_RT(s) __PPC_RS(s) |
| 62 | #define __PPC_XA(a) ((((a) & 0x1f) << 16) | (((a) & 0x20) >> 3)) | ||
| 63 | #define __PPC_XB(b) ((((b) & 0x1f) << 11) | (((b) & 0x20) >> 4)) | ||
| 61 | #define __PPC_XS(s) ((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5)) | 64 | #define __PPC_XS(s) ((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5)) |
| 65 | #define __PPC_XT(s) __PPC_XS(s) | ||
| 62 | #define __PPC_T_TLB(t) (((t) & 0x3) << 21) | 66 | #define __PPC_T_TLB(t) (((t) & 0x3) << 21) |
| 63 | #define __PPC_WC(w) (((w) & 0x3) << 21) | 67 | #define __PPC_WC(w) (((w) & 0x3) << 21) |
| 64 | /* | 68 | /* |
| @@ -106,9 +110,12 @@ | |||
| 106 | * the 128 bit load store instructions based on that. | 110 | * the 128 bit load store instructions based on that. |
| 107 | */ | 111 | */ |
| 108 | #define VSX_XX1(s, a, b) (__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b)) | 112 | #define VSX_XX1(s, a, b) (__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b)) |
| 113 | #define VSX_XX3(t, a, b) (__PPC_XT(t) | __PPC_XA(a) | __PPC_XB(b)) | ||
| 109 | #define STXVD2X(s, a, b) stringify_in_c(.long PPC_INST_STXVD2X | \ | 114 | #define STXVD2X(s, a, b) stringify_in_c(.long PPC_INST_STXVD2X | \ |
| 110 | VSX_XX1((s), (a), (b))) | 115 | VSX_XX1((s), (a), (b))) |
| 111 | #define LXVD2X(s, a, b) stringify_in_c(.long PPC_INST_LXVD2X | \ | 116 | #define LXVD2X(s, a, b) stringify_in_c(.long PPC_INST_LXVD2X | \ |
| 112 | VSX_XX1((s), (a), (b))) | 117 | VSX_XX1((s), (a), (b))) |
| 118 | #define XXLOR(t, a, b) stringify_in_c(.long PPC_INST_XXLOR | \ | ||
| 119 | VSX_XX3((t), (a), (b))) | ||
| 113 | 120 | ||
| 114 | #endif /* _ASM_POWERPC_PPC_OPCODE_H */ | 121 | #endif /* _ASM_POWERPC_PPC_OPCODE_H */ |
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index 7492fe8ad6e4..19c05b0f74be 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h | |||
| @@ -209,6 +209,14 @@ struct thread_struct { | |||
| 209 | #ifdef CONFIG_PPC64 | 209 | #ifdef CONFIG_PPC64 |
| 210 | unsigned long start_tb; /* Start purr when proc switched in */ | 210 | unsigned long start_tb; /* Start purr when proc switched in */ |
| 211 | unsigned long accum_tb; /* Total accumilated purr for process */ | 211 | unsigned long accum_tb; /* Total accumilated purr for process */ |
| 212 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 213 | struct perf_event *ptrace_bps[HBP_NUM]; | ||
| 214 | /* | ||
| 215 | * Helps identify source of single-step exception and subsequent | ||
| 216 | * hw-breakpoint enablement | ||
| 217 | */ | ||
| 218 | struct perf_event *last_hit_ubp; | ||
| 219 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 212 | #endif | 220 | #endif |
| 213 | unsigned long dabr; /* Data address breakpoint register */ | 221 | unsigned long dabr; /* Data address breakpoint register */ |
| 214 | #ifdef CONFIG_ALTIVEC | 222 | #ifdef CONFIG_ALTIVEC |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index d62fdf4e504b..d8be016d2ede 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
| @@ -890,7 +890,7 @@ | |||
| 890 | #ifndef __ASSEMBLY__ | 890 | #ifndef __ASSEMBLY__ |
| 891 | #define mfmsr() ({unsigned long rval; \ | 891 | #define mfmsr() ({unsigned long rval; \ |
| 892 | asm volatile("mfmsr %0" : "=r" (rval)); rval;}) | 892 | asm volatile("mfmsr %0" : "=r" (rval)); rval;}) |
| 893 | #ifdef CONFIG_PPC64 | 893 | #ifdef CONFIG_PPC_BOOK3S_64 |
| 894 | #define __mtmsrd(v, l) asm volatile("mtmsrd %0," __stringify(l) \ | 894 | #define __mtmsrd(v, l) asm volatile("mtmsrd %0," __stringify(l) \ |
| 895 | : : "r" (v) : "memory") | 895 | : : "r" (v) : "memory") |
| 896 | #define mtmsrd(v) __mtmsrd((v), 0) | 896 | #define mtmsrd(v) __mtmsrd((v), 0) |
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h index 2360317179a9..667a498eaee1 100644 --- a/arch/powerpc/include/asm/reg_booke.h +++ b/arch/powerpc/include/asm/reg_booke.h | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | #if defined(CONFIG_PPC_BOOK3E_64) | 29 | #if defined(CONFIG_PPC_BOOK3E_64) |
| 30 | #define MSR_ MSR_ME | MSR_CE | 30 | #define MSR_ MSR_ME | MSR_CE |
| 31 | #define MSR_KERNEL MSR_ | MSR_CM | 31 | #define MSR_KERNEL MSR_ | MSR_CM |
| 32 | #define MSR_USER32 MSR_ | MSR_PR | MSR_EE | 32 | #define MSR_USER32 MSR_ | MSR_PR | MSR_EE | MSR_DE |
| 33 | #define MSR_USER64 MSR_USER32 | MSR_CM | 33 | #define MSR_USER64 MSR_USER32 | MSR_CM | MSR_DE |
| 34 | #elif defined (CONFIG_40x) | 34 | #elif defined (CONFIG_40x) |
| 35 | #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE) | 35 | #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE) |
| 36 | #define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE) | 36 | #define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE) |
| @@ -62,6 +62,7 @@ | |||
| 62 | #define SPRN_TLB0PS 0x158 /* TLB 0 Page Size Register */ | 62 | #define SPRN_TLB0PS 0x158 /* TLB 0 Page Size Register */ |
| 63 | #define SPRN_MAS5_MAS6 0x15c /* MMU Assist Register 5 || 6 */ | 63 | #define SPRN_MAS5_MAS6 0x15c /* MMU Assist Register 5 || 6 */ |
| 64 | #define SPRN_MAS8_MAS1 0x15d /* MMU Assist Register 8 || 1 */ | 64 | #define SPRN_MAS8_MAS1 0x15d /* MMU Assist Register 8 || 1 */ |
| 65 | #define SPRN_EPTCFG 0x15e /* Embedded Page Table Config */ | ||
| 65 | #define SPRN_MAS7_MAS3 0x174 /* MMU Assist Register 7 || 3 */ | 66 | #define SPRN_MAS7_MAS3 0x174 /* MMU Assist Register 7 || 3 */ |
| 66 | #define SPRN_MAS0_MAS1 0x175 /* MMU Assist Register 0 || 1 */ | 67 | #define SPRN_MAS0_MAS1 0x175 /* MMU Assist Register 0 || 1 */ |
| 67 | #define SPRN_IVOR0 0x190 /* Interrupt Vector Offset Register 0 */ | 68 | #define SPRN_IVOR0 0x190 /* Interrupt Vector Offset Register 0 */ |
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 20de73c36682..3d35f8ae377e 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h | |||
| @@ -63,6 +63,14 @@ struct rtas_t { | |||
| 63 | struct device_node *dev; /* virtual address pointer */ | 63 | struct device_node *dev; /* virtual address pointer */ |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | struct rtas_suspend_me_data { | ||
| 67 | atomic_t working; /* number of cpus accessing this struct */ | ||
| 68 | atomic_t done; | ||
| 69 | int token; /* ibm,suspend-me */ | ||
| 70 | atomic_t error; | ||
| 71 | struct completion *complete; /* wait on this until working == 0 */ | ||
| 72 | }; | ||
| 73 | |||
| 66 | /* RTAS event classes */ | 74 | /* RTAS event classes */ |
| 67 | #define RTAS_INTERNAL_ERROR 0x80000000 /* set bit 0 */ | 75 | #define RTAS_INTERNAL_ERROR 0x80000000 /* set bit 0 */ |
| 68 | #define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */ | 76 | #define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */ |
| @@ -137,6 +145,9 @@ struct rtas_t { | |||
| 137 | #define RTAS_TYPE_PMGM_CONFIG_CHANGE 0x70 | 145 | #define RTAS_TYPE_PMGM_CONFIG_CHANGE 0x70 |
| 138 | #define RTAS_TYPE_PMGM_SERVICE_PROC 0x71 | 146 | #define RTAS_TYPE_PMGM_SERVICE_PROC 0x71 |
| 139 | 147 | ||
| 148 | /* RTAS check-exception vector offset */ | ||
| 149 | #define RTAS_VECTOR_EXTERNAL_INTERRUPT 0x500 | ||
| 150 | |||
| 140 | struct rtas_error_log { | 151 | struct rtas_error_log { |
| 141 | unsigned long version:8; /* Architectural version */ | 152 | unsigned long version:8; /* Architectural version */ |
| 142 | unsigned long severity:3; /* Severity level of error */ | 153 | unsigned long severity:3; /* Severity level of error */ |
| @@ -174,6 +185,8 @@ extern int rtas_set_indicator(int indicator, int index, int new_value); | |||
| 174 | extern int rtas_set_indicator_fast(int indicator, int index, int new_value); | 185 | extern int rtas_set_indicator_fast(int indicator, int index, int new_value); |
| 175 | extern void rtas_progress(char *s, unsigned short hex); | 186 | extern void rtas_progress(char *s, unsigned short hex); |
| 176 | extern void rtas_initialize(void); | 187 | extern void rtas_initialize(void); |
| 188 | extern int rtas_suspend_cpu(struct rtas_suspend_me_data *data); | ||
| 189 | extern int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data); | ||
| 177 | 190 | ||
| 178 | struct rtc_time; | 191 | struct rtc_time; |
| 179 | extern unsigned long rtas_get_boot_time(void); | 192 | extern unsigned long rtas_get_boot_time(void); |
diff --git a/arch/powerpc/include/asm/time.h b/arch/powerpc/include/asm/time.h index 27ccb764fdab..dc779dfcf258 100644 --- a/arch/powerpc/include/asm/time.h +++ b/arch/powerpc/include/asm/time.h | |||
| @@ -28,16 +28,12 @@ | |||
| 28 | extern unsigned long tb_ticks_per_jiffy; | 28 | extern unsigned long tb_ticks_per_jiffy; |
| 29 | extern unsigned long tb_ticks_per_usec; | 29 | extern unsigned long tb_ticks_per_usec; |
| 30 | extern unsigned long tb_ticks_per_sec; | 30 | extern unsigned long tb_ticks_per_sec; |
| 31 | extern u64 tb_to_xs; | ||
| 32 | extern unsigned tb_to_us; | ||
| 33 | 31 | ||
| 34 | struct rtc_time; | 32 | struct rtc_time; |
| 35 | extern void to_tm(int tim, struct rtc_time * tm); | 33 | extern void to_tm(int tim, struct rtc_time * tm); |
| 36 | extern void GregorianDay(struct rtc_time *tm); | 34 | extern void GregorianDay(struct rtc_time *tm); |
| 37 | extern time_t last_rtc_update; | ||
| 38 | 35 | ||
| 39 | extern void generic_calibrate_decr(void); | 36 | extern void generic_calibrate_decr(void); |
| 40 | extern void wakeup_decrementer(void); | ||
| 41 | extern void snapshot_timebase(void); | 37 | extern void snapshot_timebase(void); |
| 42 | 38 | ||
| 43 | extern void set_dec_cpu6(unsigned int val); | 39 | extern void set_dec_cpu6(unsigned int val); |
| @@ -204,9 +200,6 @@ static inline unsigned long tb_ticks_since(unsigned long tstamp) | |||
| 204 | extern u64 mulhdu(u64, u64); | 200 | extern u64 mulhdu(u64, u64); |
| 205 | #endif | 201 | #endif |
| 206 | 202 | ||
| 207 | extern void smp_space_timers(unsigned int); | ||
| 208 | |||
| 209 | extern unsigned mulhwu_scale_factor(unsigned, unsigned); | ||
| 210 | extern void div128_by_32(u64 dividend_high, u64 dividend_low, | 203 | extern void div128_by_32(u64 dividend_high, u64 dividend_low, |
| 211 | unsigned divisor, struct div_result *dr); | 204 | unsigned divisor, struct div_result *dr); |
| 212 | 205 | ||
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h index 32adf7280720..3033c1b30745 100644 --- a/arch/powerpc/include/asm/topology.h +++ b/arch/powerpc/include/asm/topology.h | |||
| @@ -87,6 +87,9 @@ static inline int pcibus_to_node(struct pci_bus *bus) | |||
| 87 | .balance_interval = 1, \ | 87 | .balance_interval = 1, \ |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | extern int __node_distance(int, int); | ||
| 91 | #define node_distance(a, b) __node_distance(a, b) | ||
| 92 | |||
| 90 | extern void __init dump_numa_cpu_topology(void); | 93 | extern void __init dump_numa_cpu_topology(void); |
| 91 | 94 | ||
| 92 | extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); | 95 | extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); |
diff --git a/arch/powerpc/include/asm/vdso_datapage.h b/arch/powerpc/include/asm/vdso_datapage.h index 13c2c283e178..08679c5319b8 100644 --- a/arch/powerpc/include/asm/vdso_datapage.h +++ b/arch/powerpc/include/asm/vdso_datapage.h | |||
| @@ -85,6 +85,7 @@ struct vdso_data { | |||
| 85 | __s32 wtom_clock_sec; /* Wall to monotonic clock */ | 85 | __s32 wtom_clock_sec; /* Wall to monotonic clock */ |
| 86 | __s32 wtom_clock_nsec; | 86 | __s32 wtom_clock_nsec; |
| 87 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ | 87 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ |
| 88 | __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */ | ||
| 88 | __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls */ | 89 | __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls */ |
| 89 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ | 90 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ |
| 90 | }; | 91 | }; |
| @@ -105,6 +106,7 @@ struct vdso_data { | |||
| 105 | __s32 wtom_clock_sec; /* Wall to monotonic clock */ | 106 | __s32 wtom_clock_sec; /* Wall to monotonic clock */ |
| 106 | __s32 wtom_clock_nsec; | 107 | __s32 wtom_clock_nsec; |
| 107 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ | 108 | struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */ |
| 109 | __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */ | ||
| 108 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ | 110 | __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */ |
| 109 | __u32 dcache_block_size; /* L1 d-cache block size */ | 111 | __u32 dcache_block_size; /* L1 d-cache block size */ |
| 110 | __u32 icache_block_size; /* L1 i-cache block size */ | 112 | __u32 icache_block_size; /* L1 i-cache block size */ |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 58d0572de6f9..77d831a1cc32 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
| @@ -34,9 +34,10 @@ obj-y += vdso32/ | |||
| 34 | obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \ | 34 | obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \ |
| 35 | signal_64.o ptrace32.o \ | 35 | signal_64.o ptrace32.o \ |
| 36 | paca.o nvram_64.o firmware.o | 36 | paca.o nvram_64.o firmware.o |
| 37 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o | ||
| 37 | obj-$(CONFIG_PPC_BOOK3S_64) += cpu_setup_ppc970.o cpu_setup_pa6t.o | 38 | obj-$(CONFIG_PPC_BOOK3S_64) += cpu_setup_ppc970.o cpu_setup_pa6t.o |
| 38 | obj64-$(CONFIG_RELOCATABLE) += reloc_64.o | 39 | obj64-$(CONFIG_RELOCATABLE) += reloc_64.o |
| 39 | obj-$(CONFIG_PPC_BOOK3E_64) += exceptions-64e.o | 40 | obj-$(CONFIG_PPC_BOOK3E_64) += exceptions-64e.o idle_book3e.o |
| 40 | obj-$(CONFIG_PPC64) += vdso64/ | 41 | obj-$(CONFIG_PPC64) += vdso64/ |
| 41 | obj-$(CONFIG_ALTIVEC) += vecemu.o | 42 | obj-$(CONFIG_ALTIVEC) += vecemu.o |
| 42 | obj-$(CONFIG_PPC_970_NAP) += idle_power4.o | 43 | obj-$(CONFIG_PPC_970_NAP) += idle_power4.o |
| @@ -67,6 +68,7 @@ obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o | |||
| 67 | obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o | 68 | obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o |
| 68 | obj-$(CONFIG_44x) += cpu_setup_44x.o | 69 | obj-$(CONFIG_44x) += cpu_setup_44x.o |
| 69 | obj-$(CONFIG_FSL_BOOKE) += cpu_setup_fsl_booke.o dbell.o | 70 | obj-$(CONFIG_FSL_BOOKE) += cpu_setup_fsl_booke.o dbell.o |
| 71 | obj-$(CONFIG_PPC_BOOK3E_64) += dbell.o | ||
| 70 | 72 | ||
| 71 | extra-y := head_$(CONFIG_WORD_SIZE).o | 73 | extra-y := head_$(CONFIG_WORD_SIZE).o |
| 72 | extra-$(CONFIG_PPC_BOOK3E_32) := head_new_booke.o | 74 | extra-$(CONFIG_PPC_BOOK3E_32) := head_new_booke.o |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 496cc5b3984f..1c0607ddccc0 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
| @@ -194,7 +194,6 @@ int main(void) | |||
| 194 | DEFINE(PACA_STARTSPURR, offsetof(struct paca_struct, startspurr)); | 194 | DEFINE(PACA_STARTSPURR, offsetof(struct paca_struct, startspurr)); |
| 195 | DEFINE(PACA_USER_TIME, offsetof(struct paca_struct, user_time)); | 195 | DEFINE(PACA_USER_TIME, offsetof(struct paca_struct, user_time)); |
| 196 | DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time)); | 196 | DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time)); |
| 197 | DEFINE(PACA_DATA_OFFSET, offsetof(struct paca_struct, data_offset)); | ||
| 198 | DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save)); | 197 | DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save)); |
| 199 | #ifdef CONFIG_KVM_BOOK3S_64_HANDLER | 198 | #ifdef CONFIG_KVM_BOOK3S_64_HANDLER |
| 200 | DEFINE(PACA_KVM_SVCPU, offsetof(struct paca_struct, shadow_vcpu)); | 199 | DEFINE(PACA_KVM_SVCPU, offsetof(struct paca_struct, shadow_vcpu)); |
| @@ -342,6 +341,7 @@ int main(void) | |||
| 342 | DEFINE(WTOM_CLOCK_SEC, offsetof(struct vdso_data, wtom_clock_sec)); | 341 | DEFINE(WTOM_CLOCK_SEC, offsetof(struct vdso_data, wtom_clock_sec)); |
| 343 | DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec)); | 342 | DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec)); |
| 344 | DEFINE(STAMP_XTIME, offsetof(struct vdso_data, stamp_xtime)); | 343 | DEFINE(STAMP_XTIME, offsetof(struct vdso_data, stamp_xtime)); |
| 344 | DEFINE(STAMP_SEC_FRAC, offsetof(struct vdso_data, stamp_sec_fraction)); | ||
| 345 | DEFINE(CFG_ICACHE_BLOCKSZ, offsetof(struct vdso_data, icache_block_size)); | 345 | DEFINE(CFG_ICACHE_BLOCKSZ, offsetof(struct vdso_data, icache_block_size)); |
| 346 | DEFINE(CFG_DCACHE_BLOCKSZ, offsetof(struct vdso_data, dcache_block_size)); | 346 | DEFINE(CFG_DCACHE_BLOCKSZ, offsetof(struct vdso_data, dcache_block_size)); |
| 347 | DEFINE(CFG_ICACHE_LOGBLOCKSZ, offsetof(struct vdso_data, icache_log_block_size)); | 347 | DEFINE(CFG_ICACHE_LOGBLOCKSZ, offsetof(struct vdso_data, icache_log_block_size)); |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 87aa0f3c6047..65e2b4e10f97 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
| @@ -1364,10 +1364,10 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
| 1364 | .machine_check = machine_check_4xx, | 1364 | .machine_check = machine_check_4xx, |
| 1365 | .platform = "ppc405", | 1365 | .platform = "ppc405", |
| 1366 | }, | 1366 | }, |
| 1367 | { /* 405EX */ | 1367 | { /* 405EX Rev. A/B with Security */ |
| 1368 | .pvr_mask = 0xffff0004, | 1368 | .pvr_mask = 0xffff000f, |
| 1369 | .pvr_value = 0x12910004, | 1369 | .pvr_value = 0x12910007, |
| 1370 | .cpu_name = "405EX", | 1370 | .cpu_name = "405EX Rev. A/B", |
| 1371 | .cpu_features = CPU_FTRS_40X, | 1371 | .cpu_features = CPU_FTRS_40X, |
| 1372 | .cpu_user_features = PPC_FEATURE_32 | | 1372 | .cpu_user_features = PPC_FEATURE_32 | |
| 1373 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 1373 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
| @@ -1377,10 +1377,114 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
| 1377 | .machine_check = machine_check_4xx, | 1377 | .machine_check = machine_check_4xx, |
| 1378 | .platform = "ppc405", | 1378 | .platform = "ppc405", |
| 1379 | }, | 1379 | }, |
| 1380 | { /* 405EXr */ | 1380 | { /* 405EX Rev. C without Security */ |
| 1381 | .pvr_mask = 0xffff0004, | 1381 | .pvr_mask = 0xffff000f, |
| 1382 | .pvr_value = 0x1291000d, | ||
| 1383 | .cpu_name = "405EX Rev. C", | ||
| 1384 | .cpu_features = CPU_FTRS_40X, | ||
| 1385 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1386 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1387 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1388 | .icache_bsize = 32, | ||
| 1389 | .dcache_bsize = 32, | ||
| 1390 | .machine_check = machine_check_4xx, | ||
| 1391 | .platform = "ppc405", | ||
| 1392 | }, | ||
| 1393 | { /* 405EX Rev. C with Security */ | ||
| 1394 | .pvr_mask = 0xffff000f, | ||
| 1395 | .pvr_value = 0x1291000f, | ||
| 1396 | .cpu_name = "405EX Rev. C", | ||
| 1397 | .cpu_features = CPU_FTRS_40X, | ||
| 1398 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1399 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1400 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1401 | .icache_bsize = 32, | ||
| 1402 | .dcache_bsize = 32, | ||
| 1403 | .machine_check = machine_check_4xx, | ||
| 1404 | .platform = "ppc405", | ||
| 1405 | }, | ||
| 1406 | { /* 405EX Rev. D without Security */ | ||
| 1407 | .pvr_mask = 0xffff000f, | ||
| 1408 | .pvr_value = 0x12910003, | ||
| 1409 | .cpu_name = "405EX Rev. D", | ||
| 1410 | .cpu_features = CPU_FTRS_40X, | ||
| 1411 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1412 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1413 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1414 | .icache_bsize = 32, | ||
| 1415 | .dcache_bsize = 32, | ||
| 1416 | .machine_check = machine_check_4xx, | ||
| 1417 | .platform = "ppc405", | ||
| 1418 | }, | ||
| 1419 | { /* 405EX Rev. D with Security */ | ||
| 1420 | .pvr_mask = 0xffff000f, | ||
| 1421 | .pvr_value = 0x12910005, | ||
| 1422 | .cpu_name = "405EX Rev. D", | ||
| 1423 | .cpu_features = CPU_FTRS_40X, | ||
| 1424 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1425 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1426 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1427 | .icache_bsize = 32, | ||
| 1428 | .dcache_bsize = 32, | ||
| 1429 | .machine_check = machine_check_4xx, | ||
| 1430 | .platform = "ppc405", | ||
| 1431 | }, | ||
| 1432 | { /* 405EXr Rev. A/B without Security */ | ||
| 1433 | .pvr_mask = 0xffff000f, | ||
| 1434 | .pvr_value = 0x12910001, | ||
| 1435 | .cpu_name = "405EXr Rev. A/B", | ||
| 1436 | .cpu_features = CPU_FTRS_40X, | ||
| 1437 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1438 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1439 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1440 | .icache_bsize = 32, | ||
| 1441 | .dcache_bsize = 32, | ||
| 1442 | .machine_check = machine_check_4xx, | ||
| 1443 | .platform = "ppc405", | ||
| 1444 | }, | ||
| 1445 | { /* 405EXr Rev. C without Security */ | ||
| 1446 | .pvr_mask = 0xffff000f, | ||
| 1447 | .pvr_value = 0x12910009, | ||
| 1448 | .cpu_name = "405EXr Rev. C", | ||
| 1449 | .cpu_features = CPU_FTRS_40X, | ||
| 1450 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1451 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1452 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1453 | .icache_bsize = 32, | ||
| 1454 | .dcache_bsize = 32, | ||
| 1455 | .machine_check = machine_check_4xx, | ||
| 1456 | .platform = "ppc405", | ||
| 1457 | }, | ||
| 1458 | { /* 405EXr Rev. C with Security */ | ||
| 1459 | .pvr_mask = 0xffff000f, | ||
| 1460 | .pvr_value = 0x1291000b, | ||
| 1461 | .cpu_name = "405EXr Rev. C", | ||
| 1462 | .cpu_features = CPU_FTRS_40X, | ||
| 1463 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1464 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1465 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1466 | .icache_bsize = 32, | ||
| 1467 | .dcache_bsize = 32, | ||
| 1468 | .machine_check = machine_check_4xx, | ||
| 1469 | .platform = "ppc405", | ||
| 1470 | }, | ||
| 1471 | { /* 405EXr Rev. D without Security */ | ||
| 1472 | .pvr_mask = 0xffff000f, | ||
| 1382 | .pvr_value = 0x12910000, | 1473 | .pvr_value = 0x12910000, |
| 1383 | .cpu_name = "405EXr", | 1474 | .cpu_name = "405EXr Rev. D", |
| 1475 | .cpu_features = CPU_FTRS_40X, | ||
| 1476 | .cpu_user_features = PPC_FEATURE_32 | | ||
| 1477 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | ||
| 1478 | .mmu_features = MMU_FTR_TYPE_40x, | ||
| 1479 | .icache_bsize = 32, | ||
| 1480 | .dcache_bsize = 32, | ||
| 1481 | .machine_check = machine_check_4xx, | ||
| 1482 | .platform = "ppc405", | ||
| 1483 | }, | ||
| 1484 | { /* 405EXr Rev. D with Security */ | ||
| 1485 | .pvr_mask = 0xffff000f, | ||
| 1486 | .pvr_value = 0x12910002, | ||
| 1487 | .cpu_name = "405EXr Rev. D", | ||
| 1384 | .cpu_features = CPU_FTRS_40X, | 1488 | .cpu_features = CPU_FTRS_40X, |
| 1385 | .cpu_user_features = PPC_FEATURE_32 | | 1489 | .cpu_user_features = PPC_FEATURE_32 | |
| 1386 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 1490 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c index 40f524643ba6..8e05c16344e4 100644 --- a/arch/powerpc/kernel/crash_dump.c +++ b/arch/powerpc/kernel/crash_dump.c | |||
| @@ -128,9 +128,9 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, | |||
| 128 | if (!csize) | 128 | if (!csize) |
| 129 | return 0; | 129 | return 0; |
| 130 | 130 | ||
| 131 | csize = min(csize, PAGE_SIZE); | 131 | csize = min_t(size_t, csize, PAGE_SIZE); |
| 132 | 132 | ||
| 133 | if (pfn < max_pfn) { | 133 | if ((min_low_pfn < pfn) && (pfn < max_pfn)) { |
| 134 | vaddr = __va(pfn << PAGE_SHIFT); | 134 | vaddr = __va(pfn << PAGE_SHIFT); |
| 135 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); | 135 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); |
| 136 | } else { | 136 | } else { |
diff --git a/arch/powerpc/kernel/dbell.c b/arch/powerpc/kernel/dbell.c index 1493734cd871..3307a52d797f 100644 --- a/arch/powerpc/kernel/dbell.c +++ b/arch/powerpc/kernel/dbell.c | |||
| @@ -13,32 +13,88 @@ | |||
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 15 | #include <linux/threads.h> | 15 | #include <linux/threads.h> |
| 16 | #include <linux/percpu.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/dbell.h> | 18 | #include <asm/dbell.h> |
| 19 | #include <asm/irq_regs.h> | ||
| 18 | 20 | ||
| 19 | #ifdef CONFIG_SMP | 21 | #ifdef CONFIG_SMP |
| 20 | unsigned long dbell_smp_message[NR_CPUS]; | 22 | struct doorbell_cpu_info { |
| 23 | unsigned long messages; /* current messages bits */ | ||
| 24 | unsigned int tag; /* tag value */ | ||
| 25 | }; | ||
| 21 | 26 | ||
| 22 | void smp_dbell_message_pass(int target, int msg) | 27 | static DEFINE_PER_CPU(struct doorbell_cpu_info, doorbell_cpu_info); |
| 28 | |||
| 29 | void doorbell_setup_this_cpu(void) | ||
| 30 | { | ||
| 31 | struct doorbell_cpu_info *info = &__get_cpu_var(doorbell_cpu_info); | ||
| 32 | |||
| 33 | info->messages = 0; | ||
| 34 | info->tag = mfspr(SPRN_PIR) & 0x3fff; | ||
| 35 | } | ||
| 36 | |||
| 37 | void doorbell_message_pass(int target, int msg) | ||
| 23 | { | 38 | { |
| 39 | struct doorbell_cpu_info *info; | ||
| 24 | int i; | 40 | int i; |
| 25 | 41 | ||
| 26 | if(target < NR_CPUS) { | 42 | if (target < NR_CPUS) { |
| 27 | set_bit(msg, &dbell_smp_message[target]); | 43 | info = &per_cpu(doorbell_cpu_info, target); |
| 28 | ppc_msgsnd(PPC_DBELL, 0, target); | 44 | set_bit(msg, &info->messages); |
| 45 | ppc_msgsnd(PPC_DBELL, 0, info->tag); | ||
| 29 | } | 46 | } |
| 30 | else if(target == MSG_ALL_BUT_SELF) { | 47 | else if (target == MSG_ALL_BUT_SELF) { |
| 31 | for_each_online_cpu(i) { | 48 | for_each_online_cpu(i) { |
| 32 | if (i == smp_processor_id()) | 49 | if (i == smp_processor_id()) |
| 33 | continue; | 50 | continue; |
| 34 | set_bit(msg, &dbell_smp_message[i]); | 51 | info = &per_cpu(doorbell_cpu_info, i); |
| 35 | ppc_msgsnd(PPC_DBELL, 0, i); | 52 | set_bit(msg, &info->messages); |
| 53 | ppc_msgsnd(PPC_DBELL, 0, info->tag); | ||
| 36 | } | 54 | } |
| 37 | } | 55 | } |
| 38 | else { /* target == MSG_ALL */ | 56 | else { /* target == MSG_ALL */ |
| 39 | for_each_online_cpu(i) | 57 | for_each_online_cpu(i) { |
| 40 | set_bit(msg, &dbell_smp_message[i]); | 58 | info = &per_cpu(doorbell_cpu_info, i); |
| 59 | set_bit(msg, &info->messages); | ||
| 60 | } | ||
| 41 | ppc_msgsnd(PPC_DBELL, PPC_DBELL_MSG_BRDCAST, 0); | 61 | ppc_msgsnd(PPC_DBELL, PPC_DBELL_MSG_BRDCAST, 0); |
| 42 | } | 62 | } |
| 43 | } | 63 | } |
| 44 | #endif | 64 | |
| 65 | void doorbell_exception(struct pt_regs *regs) | ||
| 66 | { | ||
| 67 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 68 | struct doorbell_cpu_info *info = &__get_cpu_var(doorbell_cpu_info); | ||
| 69 | int msg; | ||
| 70 | |||
| 71 | /* Warning: regs can be NULL when called from irq enable */ | ||
| 72 | |||
| 73 | if (!info->messages || (num_online_cpus() < 2)) | ||
| 74 | goto out; | ||
| 75 | |||
| 76 | for (msg = 0; msg < 4; msg++) | ||
| 77 | if (test_and_clear_bit(msg, &info->messages)) | ||
| 78 | smp_message_recv(msg); | ||
| 79 | |||
| 80 | out: | ||
| 81 | set_irq_regs(old_regs); | ||
| 82 | } | ||
| 83 | |||
| 84 | void doorbell_check_self(void) | ||
| 85 | { | ||
| 86 | struct doorbell_cpu_info *info = &__get_cpu_var(doorbell_cpu_info); | ||
| 87 | |||
| 88 | if (!info->messages) | ||
| 89 | return; | ||
| 90 | |||
| 91 | ppc_msgsnd(PPC_DBELL, 0, info->tag); | ||
| 92 | } | ||
| 93 | |||
| 94 | #else /* CONFIG_SMP */ | ||
| 95 | void doorbell_exception(struct pt_regs *regs) | ||
| 96 | { | ||
| 97 | printk(KERN_WARNING "Received doorbell on non-smp system\n"); | ||
| 98 | } | ||
| 99 | #endif /* CONFIG_SMP */ | ||
| 100 | |||
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S index 24dcc0ecf246..5c43063d2506 100644 --- a/arch/powerpc/kernel/exceptions-64e.S +++ b/arch/powerpc/kernel/exceptions-64e.S | |||
| @@ -191,6 +191,12 @@ exc_##n##_bad_stack: \ | |||
| 191 | sth r1,PACA_TRAP_SAVE(r13); /* store trap */ \ | 191 | sth r1,PACA_TRAP_SAVE(r13); /* store trap */ \ |
| 192 | b bad_stack_book3e; /* bad stack error */ | 192 | b bad_stack_book3e; /* bad stack error */ |
| 193 | 193 | ||
| 194 | /* WARNING: If you change the layout of this stub, make sure you chcek | ||
| 195 | * the debug exception handler which handles single stepping | ||
| 196 | * into exceptions from userspace, and the MM code in | ||
| 197 | * arch/powerpc/mm/tlb_nohash.c which patches the branch here | ||
| 198 | * and would need to be updated if that branch is moved | ||
| 199 | */ | ||
| 194 | #define EXCEPTION_STUB(loc, label) \ | 200 | #define EXCEPTION_STUB(loc, label) \ |
| 195 | . = interrupt_base_book3e + loc; \ | 201 | . = interrupt_base_book3e + loc; \ |
| 196 | nop; /* To make debug interrupts happy */ \ | 202 | nop; /* To make debug interrupts happy */ \ |
| @@ -204,11 +210,30 @@ exc_##n##_bad_stack: \ | |||
| 204 | lis r,TSR_FIS@h; \ | 210 | lis r,TSR_FIS@h; \ |
| 205 | mtspr SPRN_TSR,r | 211 | mtspr SPRN_TSR,r |
| 206 | 212 | ||
| 213 | /* Used by asynchronous interrupt that may happen in the idle loop. | ||
| 214 | * | ||
| 215 | * This check if the thread was in the idle loop, and if yes, returns | ||
| 216 | * to the caller rather than the PC. This is to avoid a race if | ||
| 217 | * interrupts happen before the wait instruction. | ||
| 218 | */ | ||
| 219 | #define CHECK_NAPPING() \ | ||
| 220 | clrrdi r11,r1,THREAD_SHIFT; \ | ||
| 221 | ld r10,TI_LOCAL_FLAGS(r11); \ | ||
| 222 | andi. r9,r10,_TLF_NAPPING; \ | ||
| 223 | beq+ 1f; \ | ||
| 224 | ld r8,_LINK(r1); \ | ||
| 225 | rlwinm r7,r10,0,~_TLF_NAPPING; \ | ||
| 226 | std r8,_NIP(r1); \ | ||
| 227 | std r7,TI_LOCAL_FLAGS(r11); \ | ||
| 228 | 1: | ||
| 229 | |||
| 230 | |||
| 207 | #define MASKABLE_EXCEPTION(trapnum, label, hdlr, ack) \ | 231 | #define MASKABLE_EXCEPTION(trapnum, label, hdlr, ack) \ |
| 208 | START_EXCEPTION(label); \ | 232 | START_EXCEPTION(label); \ |
| 209 | NORMAL_EXCEPTION_PROLOG(trapnum, PROLOG_ADDITION_MASKABLE) \ | 233 | NORMAL_EXCEPTION_PROLOG(trapnum, PROLOG_ADDITION_MASKABLE) \ |
| 210 | EXCEPTION_COMMON(trapnum, PACA_EXGEN, INTS_DISABLE_ALL) \ | 234 | EXCEPTION_COMMON(trapnum, PACA_EXGEN, INTS_DISABLE_ALL) \ |
| 211 | ack(r8); \ | 235 | ack(r8); \ |
| 236 | CHECK_NAPPING(); \ | ||
| 212 | addi r3,r1,STACK_FRAME_OVERHEAD; \ | 237 | addi r3,r1,STACK_FRAME_OVERHEAD; \ |
| 213 | bl hdlr; \ | 238 | bl hdlr; \ |
| 214 | b .ret_from_except_lite; | 239 | b .ret_from_except_lite; |
| @@ -246,11 +271,9 @@ interrupt_base_book3e: /* fake trap */ | |||
| 246 | EXCEPTION_STUB(0x1a0, watchdog) /* 0x09f0 */ | 271 | EXCEPTION_STUB(0x1a0, watchdog) /* 0x09f0 */ |
| 247 | EXCEPTION_STUB(0x1c0, data_tlb_miss) | 272 | EXCEPTION_STUB(0x1c0, data_tlb_miss) |
| 248 | EXCEPTION_STUB(0x1e0, instruction_tlb_miss) | 273 | EXCEPTION_STUB(0x1e0, instruction_tlb_miss) |
| 274 | EXCEPTION_STUB(0x280, doorbell) | ||
| 275 | EXCEPTION_STUB(0x2a0, doorbell_crit) | ||
| 249 | 276 | ||
| 250 | #if 0 | ||
| 251 | EXCEPTION_STUB(0x280, processor_doorbell) | ||
| 252 | EXCEPTION_STUB(0x220, processor_doorbell_crit) | ||
| 253 | #endif | ||
| 254 | .globl interrupt_end_book3e | 277 | .globl interrupt_end_book3e |
| 255 | interrupt_end_book3e: | 278 | interrupt_end_book3e: |
| 256 | 279 | ||
| @@ -259,6 +282,7 @@ interrupt_end_book3e: | |||
| 259 | CRIT_EXCEPTION_PROLOG(0x100, PROLOG_ADDITION_NONE) | 282 | CRIT_EXCEPTION_PROLOG(0x100, PROLOG_ADDITION_NONE) |
| 260 | // EXCEPTION_COMMON(0x100, PACA_EXCRIT, INTS_DISABLE_ALL) | 283 | // EXCEPTION_COMMON(0x100, PACA_EXCRIT, INTS_DISABLE_ALL) |
| 261 | // bl special_reg_save_crit | 284 | // bl special_reg_save_crit |
| 285 | // CHECK_NAPPING(); | ||
| 262 | // addi r3,r1,STACK_FRAME_OVERHEAD | 286 | // addi r3,r1,STACK_FRAME_OVERHEAD |
| 263 | // bl .critical_exception | 287 | // bl .critical_exception |
| 264 | // b ret_from_crit_except | 288 | // b ret_from_crit_except |
| @@ -270,6 +294,7 @@ interrupt_end_book3e: | |||
| 270 | // EXCEPTION_COMMON(0x200, PACA_EXMC, INTS_DISABLE_ALL) | 294 | // EXCEPTION_COMMON(0x200, PACA_EXMC, INTS_DISABLE_ALL) |
| 271 | // bl special_reg_save_mc | 295 | // bl special_reg_save_mc |
| 272 | // addi r3,r1,STACK_FRAME_OVERHEAD | 296 | // addi r3,r1,STACK_FRAME_OVERHEAD |
| 297 | // CHECK_NAPPING(); | ||
| 273 | // bl .machine_check_exception | 298 | // bl .machine_check_exception |
| 274 | // b ret_from_mc_except | 299 | // b ret_from_mc_except |
| 275 | b . | 300 | b . |
| @@ -340,6 +365,7 @@ interrupt_end_book3e: | |||
| 340 | CRIT_EXCEPTION_PROLOG(0x9f0, PROLOG_ADDITION_NONE) | 365 | CRIT_EXCEPTION_PROLOG(0x9f0, PROLOG_ADDITION_NONE) |
| 341 | // EXCEPTION_COMMON(0x9f0, PACA_EXCRIT, INTS_DISABLE_ALL) | 366 | // EXCEPTION_COMMON(0x9f0, PACA_EXCRIT, INTS_DISABLE_ALL) |
| 342 | // bl special_reg_save_crit | 367 | // bl special_reg_save_crit |
| 368 | // CHECK_NAPPING(); | ||
| 343 | // addi r3,r1,STACK_FRAME_OVERHEAD | 369 | // addi r3,r1,STACK_FRAME_OVERHEAD |
| 344 | // bl .unknown_exception | 370 | // bl .unknown_exception |
| 345 | // b ret_from_crit_except | 371 | // b ret_from_crit_except |
| @@ -428,6 +454,20 @@ interrupt_end_book3e: | |||
| 428 | kernel_dbg_exc: | 454 | kernel_dbg_exc: |
| 429 | b . /* NYI */ | 455 | b . /* NYI */ |
| 430 | 456 | ||
| 457 | /* Doorbell interrupt */ | ||
| 458 | MASKABLE_EXCEPTION(0x2070, doorbell, .doorbell_exception, ACK_NONE) | ||
| 459 | |||
| 460 | /* Doorbell critical Interrupt */ | ||
| 461 | START_EXCEPTION(doorbell_crit); | ||
| 462 | CRIT_EXCEPTION_PROLOG(0x2080, PROLOG_ADDITION_NONE) | ||
| 463 | // EXCEPTION_COMMON(0x2080, PACA_EXCRIT, INTS_DISABLE_ALL) | ||
| 464 | // bl special_reg_save_crit | ||
| 465 | // CHECK_NAPPING(); | ||
| 466 | // addi r3,r1,STACK_FRAME_OVERHEAD | ||
| 467 | // bl .doorbell_critical_exception | ||
| 468 | // b ret_from_crit_except | ||
| 469 | b . | ||
| 470 | |||
| 431 | 471 | ||
| 432 | /* | 472 | /* |
| 433 | * An interrupt came in while soft-disabled; clear EE in SRR1, | 473 | * An interrupt came in while soft-disabled; clear EE in SRR1, |
| @@ -563,6 +603,8 @@ BAD_STACK_TRAMPOLINE(0xd00) | |||
| 563 | BAD_STACK_TRAMPOLINE(0xe00) | 603 | BAD_STACK_TRAMPOLINE(0xe00) |
| 564 | BAD_STACK_TRAMPOLINE(0xf00) | 604 | BAD_STACK_TRAMPOLINE(0xf00) |
| 565 | BAD_STACK_TRAMPOLINE(0xf20) | 605 | BAD_STACK_TRAMPOLINE(0xf20) |
| 606 | BAD_STACK_TRAMPOLINE(0x2070) | ||
| 607 | BAD_STACK_TRAMPOLINE(0x2080) | ||
| 566 | 608 | ||
| 567 | .globl bad_stack_book3e | 609 | .globl bad_stack_book3e |
| 568 | bad_stack_book3e: | 610 | bad_stack_book3e: |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 3e423fbad6bc..f53029a01554 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
| @@ -828,6 +828,7 @@ END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) | |||
| 828 | 828 | ||
| 829 | /* We have a data breakpoint exception - handle it */ | 829 | /* We have a data breakpoint exception - handle it */ |
| 830 | handle_dabr_fault: | 830 | handle_dabr_fault: |
| 831 | bl .save_nvgprs | ||
| 831 | ld r4,_DAR(r1) | 832 | ld r4,_DAR(r1) |
| 832 | ld r5,_DSISR(r1) | 833 | ld r5,_DSISR(r1) |
| 833 | addi r3,r1,STACK_FRAME_OVERHEAD | 834 | addi r3,r1,STACK_FRAME_OVERHEAD |
diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c new file mode 100644 index 000000000000..5ecd0401cdb1 --- /dev/null +++ b/arch/powerpc/kernel/hw_breakpoint.c | |||
| @@ -0,0 +1,364 @@ | |||
| 1 | /* | ||
| 2 | * HW_breakpoint: a unified kernel/user-space hardware breakpoint facility, | ||
| 3 | * using the CPU's debug registers. Derived from | ||
| 4 | * "arch/x86/kernel/hw_breakpoint.c" | ||
| 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 | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 19 | * | ||
| 20 | * Copyright 2010 IBM Corporation | ||
| 21 | * Author: K.Prasad <prasad@linux.vnet.ibm.com> | ||
| 22 | * | ||
| 23 | */ | ||
| 24 | |||
| 25 | #include <linux/hw_breakpoint.h> | ||
| 26 | #include <linux/notifier.h> | ||
| 27 | #include <linux/kprobes.h> | ||
| 28 | #include <linux/percpu.h> | ||
| 29 | #include <linux/kernel.h> | ||
| 30 | #include <linux/module.h> | ||
| 31 | #include <linux/sched.h> | ||
| 32 | #include <linux/init.h> | ||
| 33 | #include <linux/smp.h> | ||
| 34 | |||
| 35 | #include <asm/hw_breakpoint.h> | ||
| 36 | #include <asm/processor.h> | ||
| 37 | #include <asm/sstep.h> | ||
| 38 | #include <asm/uaccess.h> | ||
| 39 | |||
| 40 | /* | ||
| 41 | * Stores the breakpoints currently in use on each breakpoint address | ||
| 42 | * register for every cpu | ||
| 43 | */ | ||
| 44 | static DEFINE_PER_CPU(struct perf_event *, bp_per_reg); | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Returns total number of data or instruction breakpoints available. | ||
| 48 | */ | ||
| 49 | int hw_breakpoint_slots(int type) | ||
| 50 | { | ||
| 51 | if (type == TYPE_DATA) | ||
| 52 | return HBP_NUM; | ||
| 53 | return 0; /* no instruction breakpoints available */ | ||
| 54 | } | ||
| 55 | |||
| 56 | /* | ||
| 57 | * Install a perf counter breakpoint. | ||
| 58 | * | ||
| 59 | * We seek a free debug address register and use it for this | ||
| 60 | * breakpoint. | ||
| 61 | * | ||
| 62 | * Atomic: we hold the counter->ctx->lock and we only handle variables | ||
| 63 | * and registers local to this cpu. | ||
| 64 | */ | ||
| 65 | int arch_install_hw_breakpoint(struct perf_event *bp) | ||
| 66 | { | ||
| 67 | struct arch_hw_breakpoint *info = counter_arch_bp(bp); | ||
| 68 | struct perf_event **slot = &__get_cpu_var(bp_per_reg); | ||
| 69 | |||
| 70 | *slot = bp; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * Do not install DABR values if the instruction must be single-stepped. | ||
| 74 | * If so, DABR will be populated in single_step_dabr_instruction(). | ||
| 75 | */ | ||
| 76 | if (current->thread.last_hit_ubp != bp) | ||
| 77 | set_dabr(info->address | info->type | DABR_TRANSLATION); | ||
| 78 | |||
| 79 | return 0; | ||
| 80 | } | ||
| 81 | |||
| 82 | /* | ||
| 83 | * Uninstall the breakpoint contained in the given counter. | ||
| 84 | * | ||
| 85 | * First we search the debug address register it uses and then we disable | ||
| 86 | * it. | ||
| 87 | * | ||
| 88 | * Atomic: we hold the counter->ctx->lock and we only handle variables | ||
| 89 | * and registers local to this cpu. | ||
| 90 | */ | ||
| 91 | void arch_uninstall_hw_breakpoint(struct perf_event *bp) | ||
| 92 | { | ||
| 93 | struct perf_event **slot = &__get_cpu_var(bp_per_reg); | ||
| 94 | |||
| 95 | if (*slot != bp) { | ||
| 96 | WARN_ONCE(1, "Can't find the breakpoint"); | ||
| 97 | return; | ||
| 98 | } | ||
| 99 | |||
| 100 | *slot = NULL; | ||
| 101 | set_dabr(0); | ||
| 102 | } | ||
| 103 | |||
| 104 | /* | ||
| 105 | * Perform cleanup of arch-specific counters during unregistration | ||
| 106 | * of the perf-event | ||
| 107 | */ | ||
| 108 | void arch_unregister_hw_breakpoint(struct perf_event *bp) | ||
| 109 | { | ||
| 110 | /* | ||
| 111 | * If the breakpoint is unregistered between a hw_breakpoint_handler() | ||
| 112 | * and the single_step_dabr_instruction(), then cleanup the breakpoint | ||
| 113 | * restoration variables to prevent dangling pointers. | ||
| 114 | */ | ||
| 115 | if (bp->ctx->task) | ||
| 116 | bp->ctx->task->thread.last_hit_ubp = NULL; | ||
| 117 | } | ||
| 118 | |||
| 119 | /* | ||
| 120 | * Check for virtual address in kernel space. | ||
| 121 | */ | ||
| 122 | int arch_check_bp_in_kernelspace(struct perf_event *bp) | ||
| 123 | { | ||
| 124 | struct arch_hw_breakpoint *info = counter_arch_bp(bp); | ||
| 125 | |||
| 126 | return is_kernel_addr(info->address); | ||
| 127 | } | ||
| 128 | |||
| 129 | int arch_bp_generic_fields(int type, int *gen_bp_type) | ||
| 130 | { | ||
| 131 | switch (type) { | ||
| 132 | case DABR_DATA_READ: | ||
| 133 | *gen_bp_type = HW_BREAKPOINT_R; | ||
| 134 | break; | ||
| 135 | case DABR_DATA_WRITE: | ||
| 136 | *gen_bp_type = HW_BREAKPOINT_W; | ||
| 137 | break; | ||
| 138 | case (DABR_DATA_WRITE | DABR_DATA_READ): | ||
| 139 | *gen_bp_type = (HW_BREAKPOINT_W | HW_BREAKPOINT_R); | ||
| 140 | break; | ||
| 141 | default: | ||
| 142 | return -EINVAL; | ||
| 143 | } | ||
| 144 | return 0; | ||
| 145 | } | ||
| 146 | |||
| 147 | /* | ||
| 148 | * Validate the arch-specific HW Breakpoint register settings | ||
| 149 | */ | ||
| 150 | int arch_validate_hwbkpt_settings(struct perf_event *bp) | ||
| 151 | { | ||
| 152 | int ret = -EINVAL; | ||
| 153 | struct arch_hw_breakpoint *info = counter_arch_bp(bp); | ||
| 154 | |||
| 155 | if (!bp) | ||
| 156 | return ret; | ||
| 157 | |||
| 158 | switch (bp->attr.bp_type) { | ||
| 159 | case HW_BREAKPOINT_R: | ||
| 160 | info->type = DABR_DATA_READ; | ||
| 161 | break; | ||
| 162 | case HW_BREAKPOINT_W: | ||
| 163 | info->type = DABR_DATA_WRITE; | ||
| 164 | break; | ||
| 165 | case HW_BREAKPOINT_R | HW_BREAKPOINT_W: | ||
| 166 | info->type = (DABR_DATA_READ | DABR_DATA_WRITE); | ||
| 167 | break; | ||
| 168 | default: | ||
| 169 | return ret; | ||
| 170 | } | ||
| 171 | |||
| 172 | info->address = bp->attr.bp_addr; | ||
| 173 | info->len = bp->attr.bp_len; | ||
| 174 | |||
| 175 | /* | ||
| 176 | * Since breakpoint length can be a maximum of HW_BREAKPOINT_LEN(8) | ||
| 177 | * and breakpoint addresses are aligned to nearest double-word | ||
| 178 | * HW_BREAKPOINT_ALIGN by rounding off to the lower address, the | ||
| 179 | * 'symbolsize' should satisfy the check below. | ||
| 180 | */ | ||
| 181 | if (info->len > | ||
| 182 | (HW_BREAKPOINT_LEN - (info->address & HW_BREAKPOINT_ALIGN))) | ||
| 183 | return -EINVAL; | ||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | |||
| 187 | /* | ||
| 188 | * Restores the breakpoint on the debug registers. | ||
| 189 | * Invoke this function if it is known that the execution context is | ||
| 190 | * about to change to cause loss of MSR_SE settings. | ||
| 191 | */ | ||
| 192 | void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) | ||
| 193 | { | ||
| 194 | struct arch_hw_breakpoint *info; | ||
| 195 | |||
| 196 | if (likely(!tsk->thread.last_hit_ubp)) | ||
| 197 | return; | ||
| 198 | |||
| 199 | info = counter_arch_bp(tsk->thread.last_hit_ubp); | ||
| 200 | regs->msr &= ~MSR_SE; | ||
| 201 | set_dabr(info->address | info->type | DABR_TRANSLATION); | ||
| 202 | tsk->thread.last_hit_ubp = NULL; | ||
| 203 | } | ||
| 204 | |||
| 205 | /* | ||
| 206 | * Handle debug exception notifications. | ||
| 207 | */ | ||
| 208 | int __kprobes hw_breakpoint_handler(struct die_args *args) | ||
| 209 | { | ||
| 210 | int rc = NOTIFY_STOP; | ||
| 211 | struct perf_event *bp; | ||
| 212 | struct pt_regs *regs = args->regs; | ||
| 213 | int stepped = 1; | ||
| 214 | struct arch_hw_breakpoint *info; | ||
| 215 | unsigned int instr; | ||
| 216 | unsigned long dar = regs->dar; | ||
| 217 | |||
| 218 | /* Disable breakpoints during exception handling */ | ||
| 219 | set_dabr(0); | ||
| 220 | |||
| 221 | /* | ||
| 222 | * The counter may be concurrently released but that can only | ||
| 223 | * occur from a call_rcu() path. We can then safely fetch | ||
| 224 | * the breakpoint, use its callback, touch its counter | ||
| 225 | * while we are in an rcu_read_lock() path. | ||
| 226 | */ | ||
| 227 | rcu_read_lock(); | ||
| 228 | |||
| 229 | bp = __get_cpu_var(bp_per_reg); | ||
| 230 | if (!bp) | ||
| 231 | goto out; | ||
| 232 | info = counter_arch_bp(bp); | ||
| 233 | |||
| 234 | /* | ||
| 235 | * Return early after invoking user-callback function without restoring | ||
| 236 | * DABR if the breakpoint is from ptrace which always operates in | ||
| 237 | * one-shot mode. The ptrace-ed process will receive the SIGTRAP signal | ||
| 238 | * generated in do_dabr(). | ||
| 239 | */ | ||
| 240 | if (bp->overflow_handler == ptrace_triggered) { | ||
| 241 | perf_bp_event(bp, regs); | ||
| 242 | rc = NOTIFY_DONE; | ||
| 243 | goto out; | ||
| 244 | } | ||
| 245 | |||
| 246 | /* | ||
| 247 | * Verify if dar lies within the address range occupied by the symbol | ||
| 248 | * being watched to filter extraneous exceptions. If it doesn't, | ||
| 249 | * we still need to single-step the instruction, but we don't | ||
| 250 | * generate an event. | ||
| 251 | */ | ||
| 252 | info->extraneous_interrupt = !((bp->attr.bp_addr <= dar) && | ||
| 253 | (dar - bp->attr.bp_addr < bp->attr.bp_len)); | ||
| 254 | |||
| 255 | /* Do not emulate user-space instructions, instead single-step them */ | ||
| 256 | if (user_mode(regs)) { | ||
| 257 | bp->ctx->task->thread.last_hit_ubp = bp; | ||
| 258 | regs->msr |= MSR_SE; | ||
| 259 | goto out; | ||
| 260 | } | ||
| 261 | |||
| 262 | stepped = 0; | ||
| 263 | instr = 0; | ||
| 264 | if (!__get_user_inatomic(instr, (unsigned int *) regs->nip)) | ||
| 265 | stepped = emulate_step(regs, instr); | ||
| 266 | |||
| 267 | /* | ||
| 268 | * emulate_step() could not execute it. We've failed in reliably | ||
| 269 | * handling the hw-breakpoint. Unregister it and throw a warning | ||
| 270 | * message to let the user know about it. | ||
| 271 | */ | ||
| 272 | if (!stepped) { | ||
| 273 | WARN(1, "Unable to handle hardware breakpoint. Breakpoint at " | ||
| 274 | "0x%lx will be disabled.", info->address); | ||
| 275 | perf_event_disable(bp); | ||
| 276 | goto out; | ||
| 277 | } | ||
| 278 | /* | ||
| 279 | * As a policy, the callback is invoked in a 'trigger-after-execute' | ||
| 280 | * fashion | ||
| 281 | */ | ||
| 282 | if (!info->extraneous_interrupt) | ||
| 283 | perf_bp_event(bp, regs); | ||
| 284 | |||
| 285 | set_dabr(info->address | info->type | DABR_TRANSLATION); | ||
| 286 | out: | ||
| 287 | rcu_read_unlock(); | ||
| 288 | return rc; | ||
| 289 | } | ||
| 290 | |||
| 291 | /* | ||
| 292 | * Handle single-step exceptions following a DABR hit. | ||
| 293 | */ | ||
| 294 | int __kprobes single_step_dabr_instruction(struct die_args *args) | ||
| 295 | { | ||
| 296 | struct pt_regs *regs = args->regs; | ||
| 297 | struct perf_event *bp = NULL; | ||
| 298 | struct arch_hw_breakpoint *bp_info; | ||
| 299 | |||
| 300 | bp = current->thread.last_hit_ubp; | ||
| 301 | /* | ||
| 302 | * Check if we are single-stepping as a result of a | ||
| 303 | * previous HW Breakpoint exception | ||
| 304 | */ | ||
| 305 | if (!bp) | ||
| 306 | return NOTIFY_DONE; | ||
| 307 | |||
| 308 | bp_info = counter_arch_bp(bp); | ||
| 309 | |||
| 310 | /* | ||
| 311 | * We shall invoke the user-defined callback function in the single | ||
| 312 | * stepping handler to confirm to 'trigger-after-execute' semantics | ||
| 313 | */ | ||
| 314 | if (!bp_info->extraneous_interrupt) | ||
| 315 | perf_bp_event(bp, regs); | ||
| 316 | |||
| 317 | set_dabr(bp_info->address | bp_info->type | DABR_TRANSLATION); | ||
| 318 | current->thread.last_hit_ubp = NULL; | ||
| 319 | |||
| 320 | /* | ||
| 321 | * If the process was being single-stepped by ptrace, let the | ||
| 322 | * other single-step actions occur (e.g. generate SIGTRAP). | ||
| 323 | */ | ||
| 324 | if (test_thread_flag(TIF_SINGLESTEP)) | ||
| 325 | return NOTIFY_DONE; | ||
| 326 | |||
| 327 | return NOTIFY_STOP; | ||
| 328 | } | ||
| 329 | |||
| 330 | /* | ||
| 331 | * Handle debug exception notifications. | ||
| 332 | */ | ||
| 333 | int __kprobes hw_breakpoint_exceptions_notify( | ||
| 334 | struct notifier_block *unused, unsigned long val, void *data) | ||
| 335 | { | ||
| 336 | int ret = NOTIFY_DONE; | ||
| 337 | |||
| 338 | switch (val) { | ||
| 339 | case DIE_DABR_MATCH: | ||
| 340 | ret = hw_breakpoint_handler(data); | ||
| 341 | break; | ||
| 342 | case DIE_SSTEP: | ||
| 343 | ret = single_step_dabr_instruction(data); | ||
| 344 | break; | ||
| 345 | } | ||
| 346 | |||
| 347 | return ret; | ||
| 348 | } | ||
| 349 | |||
| 350 | /* | ||
| 351 | * Release the user breakpoints used by ptrace | ||
| 352 | */ | ||
| 353 | void flush_ptrace_hw_breakpoint(struct task_struct *tsk) | ||
| 354 | { | ||
| 355 | struct thread_struct *t = &tsk->thread; | ||
| 356 | |||
| 357 | unregister_hw_breakpoint(t->ptrace_bps[0]); | ||
| 358 | t->ptrace_bps[0] = NULL; | ||
| 359 | } | ||
| 360 | |||
| 361 | void hw_breakpoint_pmu_read(struct perf_event *bp) | ||
| 362 | { | ||
| 363 | /* TODO */ | ||
| 364 | } | ||
diff --git a/arch/powerpc/kernel/idle_book3e.S b/arch/powerpc/kernel/idle_book3e.S new file mode 100644 index 000000000000..16c002d6bdf1 --- /dev/null +++ b/arch/powerpc/kernel/idle_book3e.S | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2010 IBM Corp, Benjamin Herrenschmidt <benh@kernel.crashing.org> | ||
| 3 | * | ||
| 4 | * Generic idle routine for Book3E processors | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/threads.h> | ||
| 13 | #include <asm/reg.h> | ||
| 14 | #include <asm/ppc_asm.h> | ||
| 15 | #include <asm/asm-offsets.h> | ||
| 16 | #include <asm/ppc-opcode.h> | ||
| 17 | #include <asm/processor.h> | ||
| 18 | #include <asm/thread_info.h> | ||
| 19 | |||
| 20 | /* 64-bit version only for now */ | ||
| 21 | #ifdef CONFIG_PPC64 | ||
| 22 | |||
| 23 | _GLOBAL(book3e_idle) | ||
| 24 | /* Save LR for later */ | ||
| 25 | mflr r0 | ||
| 26 | std r0,16(r1) | ||
| 27 | |||
| 28 | /* Hard disable interrupts */ | ||
| 29 | wrteei 0 | ||
| 30 | |||
| 31 | /* Now check if an interrupt came in while we were soft disabled | ||
| 32 | * since we may otherwise lose it (doorbells etc...). We know | ||
| 33 | * that since PACAHARDIRQEN will have been cleared in that case. | ||
| 34 | */ | ||
| 35 | lbz r3,PACAHARDIRQEN(r13) | ||
| 36 | cmpwi cr0,r3,0 | ||
| 37 | beqlr | ||
| 38 | |||
| 39 | /* Now we are going to mark ourselves as soft and hard enables in | ||
| 40 | * order to be able to take interrupts while asleep. We inform lockdep | ||
| 41 | * of that. We don't actually turn interrupts on just yet tho. | ||
| 42 | */ | ||
| 43 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
| 44 | stdu r1,-128(r1) | ||
| 45 | bl .trace_hardirqs_on | ||
| 46 | #endif | ||
| 47 | li r0,1 | ||
| 48 | stb r0,PACASOFTIRQEN(r13) | ||
| 49 | stb r0,PACAHARDIRQEN(r13) | ||
| 50 | |||
| 51 | /* Interrupts will make use return to LR, so get something we want | ||
| 52 | * in there | ||
| 53 | */ | ||
| 54 | bl 1f | ||
| 55 | |||
| 56 | /* Hard disable interrupts again */ | ||
| 57 | wrteei 0 | ||
| 58 | |||
| 59 | /* Mark them off again in the PACA as well */ | ||
| 60 | li r0,0 | ||
| 61 | stb r0,PACASOFTIRQEN(r13) | ||
| 62 | stb r0,PACAHARDIRQEN(r13) | ||
| 63 | |||
| 64 | /* Tell lockdep about it */ | ||
| 65 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
| 66 | bl .trace_hardirqs_off | ||
| 67 | addi r1,r1,128 | ||
| 68 | #endif | ||
| 69 | ld r0,16(r1) | ||
| 70 | mtlr r0 | ||
| 71 | blr | ||
| 72 | |||
| 73 | 1: /* Let's set the _TLF_NAPPING flag so interrupts make us return | ||
| 74 | * to the right spot | ||
| 75 | */ | ||
| 76 | clrrdi r11,r1,THREAD_SHIFT | ||
| 77 | ld r10,TI_LOCAL_FLAGS(r11) | ||
| 78 | ori r10,r10,_TLF_NAPPING | ||
| 79 | std r10,TI_LOCAL_FLAGS(r11) | ||
| 80 | |||
| 81 | /* We can now re-enable hard interrupts and go to sleep */ | ||
| 82 | wrteei 1 | ||
| 83 | 1: PPC_WAIT(0) | ||
| 84 | b 1b | ||
| 85 | |||
| 86 | #endif /* CONFIG_PPC64 */ | ||
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 77be3d058a65..8f96d3198905 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
| @@ -64,6 +64,8 @@ | |||
| 64 | #include <asm/ptrace.h> | 64 | #include <asm/ptrace.h> |
| 65 | #include <asm/machdep.h> | 65 | #include <asm/machdep.h> |
| 66 | #include <asm/udbg.h> | 66 | #include <asm/udbg.h> |
| 67 | #include <asm/dbell.h> | ||
| 68 | |||
| 67 | #ifdef CONFIG_PPC64 | 69 | #ifdef CONFIG_PPC64 |
| 68 | #include <asm/paca.h> | 70 | #include <asm/paca.h> |
| 69 | #include <asm/firmware.h> | 71 | #include <asm/firmware.h> |
| @@ -153,14 +155,28 @@ notrace void raw_local_irq_restore(unsigned long en) | |||
| 153 | if (get_hard_enabled()) | 155 | if (get_hard_enabled()) |
| 154 | return; | 156 | return; |
| 155 | 157 | ||
| 158 | #if defined(CONFIG_BOOKE) && defined(CONFIG_SMP) | ||
| 159 | /* Check for pending doorbell interrupts and resend to ourself */ | ||
| 160 | doorbell_check_self(); | ||
| 161 | #endif | ||
| 162 | |||
| 156 | /* | 163 | /* |
| 157 | * Need to hard-enable interrupts here. Since currently disabled, | 164 | * Need to hard-enable interrupts here. Since currently disabled, |
| 158 | * no need to take further asm precautions against preemption; but | 165 | * no need to take further asm precautions against preemption; but |
| 159 | * use local_paca instead of get_paca() to avoid preemption checking. | 166 | * use local_paca instead of get_paca() to avoid preemption checking. |
| 160 | */ | 167 | */ |
| 161 | local_paca->hard_enabled = en; | 168 | local_paca->hard_enabled = en; |
| 169 | |||
| 170 | #ifndef CONFIG_BOOKE | ||
| 171 | /* On server, re-trigger the decrementer if it went negative since | ||
| 172 | * some processors only trigger on edge transitions of the sign bit. | ||
| 173 | * | ||
| 174 | * BookE has a level sensitive decrementer (latches in TSR) so we | ||
| 175 | * don't need that | ||
| 176 | */ | ||
| 162 | if ((int)mfspr(SPRN_DEC) < 0) | 177 | if ((int)mfspr(SPRN_DEC) < 0) |
| 163 | mtspr(SPRN_DEC, 1); | 178 | mtspr(SPRN_DEC, 1); |
| 179 | #endif /* CONFIG_BOOKE */ | ||
| 164 | 180 | ||
| 165 | /* | 181 | /* |
| 166 | * Force the delivery of pending soft-disabled interrupts on PS3. | 182 | * Force the delivery of pending soft-disabled interrupts on PS3. |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index 89f005116aac..dd6c141f1662 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
| @@ -45,6 +45,18 @@ void machine_kexec_cleanup(struct kimage *image) | |||
| 45 | ppc_md.machine_kexec_cleanup(image); | 45 | ppc_md.machine_kexec_cleanup(image); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | void arch_crash_save_vmcoreinfo(void) | ||
| 49 | { | ||
| 50 | |||
| 51 | #ifdef CONFIG_NEED_MULTIPLE_NODES | ||
| 52 | VMCOREINFO_SYMBOL(node_data); | ||
| 53 | VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); | ||
| 54 | #endif | ||
| 55 | #ifndef CONFIG_NEED_MULTIPLE_NODES | ||
| 56 | VMCOREINFO_SYMBOL(contig_page_data); | ||
| 57 | #endif | ||
| 58 | } | ||
| 59 | |||
| 48 | /* | 60 | /* |
| 49 | * Do not allocate memory (or fail in any way) in machine_kexec(). | 61 | * Do not allocate memory (or fail in any way) in machine_kexec(). |
| 50 | * We are past the point of no return, committed to rebooting now. | 62 | * We are past the point of no return, committed to rebooting now. |
| @@ -144,24 +156,24 @@ int overlaps_crashkernel(unsigned long start, unsigned long size) | |||
| 144 | } | 156 | } |
| 145 | 157 | ||
| 146 | /* Values we need to export to the second kernel via the device tree. */ | 158 | /* Values we need to export to the second kernel via the device tree. */ |
| 147 | static unsigned long kernel_end; | 159 | static phys_addr_t kernel_end; |
| 148 | static unsigned long crashk_size; | 160 | static phys_addr_t crashk_size; |
| 149 | 161 | ||
| 150 | static struct property kernel_end_prop = { | 162 | static struct property kernel_end_prop = { |
| 151 | .name = "linux,kernel-end", | 163 | .name = "linux,kernel-end", |
| 152 | .length = sizeof(unsigned long), | 164 | .length = sizeof(phys_addr_t), |
| 153 | .value = &kernel_end, | 165 | .value = &kernel_end, |
| 154 | }; | 166 | }; |
| 155 | 167 | ||
| 156 | static struct property crashk_base_prop = { | 168 | static struct property crashk_base_prop = { |
| 157 | .name = "linux,crashkernel-base", | 169 | .name = "linux,crashkernel-base", |
| 158 | .length = sizeof(unsigned long), | 170 | .length = sizeof(phys_addr_t), |
| 159 | .value = &crashk_res.start, | 171 | .value = &crashk_res.start, |
| 160 | }; | 172 | }; |
| 161 | 173 | ||
| 162 | static struct property crashk_size_prop = { | 174 | static struct property crashk_size_prop = { |
| 163 | .name = "linux,crashkernel-size", | 175 | .name = "linux,crashkernel-size", |
| 164 | .length = sizeof(unsigned long), | 176 | .length = sizeof(phys_addr_t), |
| 165 | .value = &crashk_size, | 177 | .value = &crashk_size, |
| 166 | }; | 178 | }; |
| 167 | 179 | ||
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index ed31a29c4ff7..583af70c4b14 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #include <linux/thread_info.h> | 15 | #include <linux/thread_info.h> |
| 16 | #include <linux/init_task.h> | 16 | #include <linux/init_task.h> |
| 17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
| 18 | #include <linux/kernel.h> | ||
| 19 | #include <linux/cpu.h> | ||
| 18 | 20 | ||
| 19 | #include <asm/page.h> | 21 | #include <asm/page.h> |
| 20 | #include <asm/current.h> | 22 | #include <asm/current.h> |
| @@ -25,6 +27,7 @@ | |||
| 25 | #include <asm/sections.h> /* _end */ | 27 | #include <asm/sections.h> /* _end */ |
| 26 | #include <asm/prom.h> | 28 | #include <asm/prom.h> |
| 27 | #include <asm/smp.h> | 29 | #include <asm/smp.h> |
| 30 | #include <asm/hw_breakpoint.h> | ||
| 28 | 31 | ||
| 29 | int default_machine_kexec_prepare(struct kimage *image) | 32 | int default_machine_kexec_prepare(struct kimage *image) |
| 30 | { | 33 | { |
| @@ -165,6 +168,7 @@ static void kexec_smp_down(void *arg) | |||
| 165 | while(kexec_all_irq_disabled == 0) | 168 | while(kexec_all_irq_disabled == 0) |
| 166 | cpu_relax(); | 169 | cpu_relax(); |
| 167 | mb(); /* make sure all irqs are disabled before this */ | 170 | mb(); /* make sure all irqs are disabled before this */ |
| 171 | hw_breakpoint_disable(); | ||
| 168 | /* | 172 | /* |
| 169 | * Now every CPU has IRQs off, we can clear out any pending | 173 | * Now every CPU has IRQs off, we can clear out any pending |
| 170 | * IPIs and be sure that no more will come in after this. | 174 | * IPIs and be sure that no more will come in after this. |
| @@ -180,8 +184,22 @@ static void kexec_prepare_cpus_wait(int wait_state) | |||
| 180 | { | 184 | { |
| 181 | int my_cpu, i, notified=-1; | 185 | int my_cpu, i, notified=-1; |
| 182 | 186 | ||
| 187 | hw_breakpoint_disable(); | ||
| 183 | my_cpu = get_cpu(); | 188 | my_cpu = get_cpu(); |
| 184 | /* Make sure each CPU has atleast made it to the state we need */ | 189 | /* Make sure each CPU has at least made it to the state we need. |
| 190 | * | ||
| 191 | * FIXME: There is a (slim) chance of a problem if not all of the CPUs | ||
| 192 | * are correctly onlined. If somehow we start a CPU on boot with RTAS | ||
| 193 | * start-cpu, but somehow that CPU doesn't write callin_cpu_map[] in | ||
| 194 | * time, the boot CPU will timeout. If it does eventually execute | ||
| 195 | * stuff, the secondary will start up (paca[].cpu_start was written) and | ||
| 196 | * get into a peculiar state. If the platform supports | ||
| 197 | * smp_ops->take_timebase(), the secondary CPU will probably be spinning | ||
| 198 | * in there. If not (i.e. pseries), the secondary will continue on and | ||
| 199 | * try to online itself/idle/etc. If it survives that, we need to find | ||
| 200 | * these possible-but-not-online-but-should-be CPUs and chaperone them | ||
| 201 | * into kexec_smp_wait(). | ||
| 202 | */ | ||
| 185 | for_each_online_cpu(i) { | 203 | for_each_online_cpu(i) { |
| 186 | if (i == my_cpu) | 204 | if (i == my_cpu) |
| 187 | continue; | 205 | continue; |
| @@ -189,9 +207,9 @@ static void kexec_prepare_cpus_wait(int wait_state) | |||
| 189 | while (paca[i].kexec_state < wait_state) { | 207 | while (paca[i].kexec_state < wait_state) { |
| 190 | barrier(); | 208 | barrier(); |
| 191 | if (i != notified) { | 209 | if (i != notified) { |
| 192 | printk( "kexec: waiting for cpu %d (physical" | 210 | printk(KERN_INFO "kexec: waiting for cpu %d " |
| 193 | " %d) to enter %i state\n", | 211 | "(physical %d) to enter %i state\n", |
| 194 | i, paca[i].hw_cpu_id, wait_state); | 212 | i, paca[i].hw_cpu_id, wait_state); |
| 195 | notified = i; | 213 | notified = i; |
| 196 | } | 214 | } |
| 197 | } | 215 | } |
| @@ -199,9 +217,32 @@ static void kexec_prepare_cpus_wait(int wait_state) | |||
| 199 | mb(); | 217 | mb(); |
| 200 | } | 218 | } |
| 201 | 219 | ||
| 202 | static void kexec_prepare_cpus(void) | 220 | /* |
| 221 | * We need to make sure each present CPU is online. The next kernel will scan | ||
| 222 | * the device tree and assume primary threads are online and query secondary | ||
| 223 | * threads via RTAS to online them if required. If we don't online primary | ||
| 224 | * threads, they will be stuck. However, we also online secondary threads as we | ||
| 225 | * may be using 'cede offline'. In this case RTAS doesn't see the secondary | ||
| 226 | * threads as offline -- and again, these CPUs will be stuck. | ||
| 227 | * | ||
| 228 | * So, we online all CPUs that should be running, including secondary threads. | ||
| 229 | */ | ||
| 230 | static void wake_offline_cpus(void) | ||
| 203 | { | 231 | { |
| 232 | int cpu = 0; | ||
| 204 | 233 | ||
| 234 | for_each_present_cpu(cpu) { | ||
| 235 | if (!cpu_online(cpu)) { | ||
| 236 | printk(KERN_INFO "kexec: Waking offline cpu %d.\n", | ||
| 237 | cpu); | ||
| 238 | cpu_up(cpu); | ||
| 239 | } | ||
| 240 | } | ||
| 241 | } | ||
| 242 | |||
| 243 | static void kexec_prepare_cpus(void) | ||
| 244 | { | ||
| 245 | wake_offline_cpus(); | ||
| 205 | smp_call_function(kexec_smp_down, NULL, /* wait */0); | 246 | smp_call_function(kexec_smp_down, NULL, /* wait */0); |
| 206 | local_irq_disable(); | 247 | local_irq_disable(); |
| 207 | mb(); /* make sure IRQs are disabled before we say they are */ | 248 | mb(); /* make sure IRQs are disabled before we say they are */ |
| @@ -215,7 +256,10 @@ static void kexec_prepare_cpus(void) | |||
| 215 | if (ppc_md.kexec_cpu_down) | 256 | if (ppc_md.kexec_cpu_down) |
| 216 | ppc_md.kexec_cpu_down(0, 0); | 257 | ppc_md.kexec_cpu_down(0, 0); |
| 217 | 258 | ||
| 218 | /* Before removing MMU mapings make sure all CPUs have entered real mode */ | 259 | /* |
| 260 | * Before removing MMU mappings make sure all CPUs have entered real | ||
| 261 | * mode: | ||
| 262 | */ | ||
| 219 | kexec_prepare_cpus_wait(KEXEC_STATE_REAL_MODE); | 263 | kexec_prepare_cpus_wait(KEXEC_STATE_REAL_MODE); |
| 220 | 264 | ||
| 221 | put_cpu(); | 265 | put_cpu(); |
| @@ -257,6 +301,12 @@ static void kexec_prepare_cpus(void) | |||
| 257 | static union thread_union kexec_stack __init_task_data = | 301 | static union thread_union kexec_stack __init_task_data = |
| 258 | { }; | 302 | { }; |
| 259 | 303 | ||
| 304 | /* | ||
| 305 | * For similar reasons to the stack above, the kexecing CPU needs to be on a | ||
| 306 | * static PACA; we switch to kexec_paca. | ||
| 307 | */ | ||
| 308 | struct paca_struct kexec_paca; | ||
| 309 | |||
| 260 | /* Our assembly helper, in kexec_stub.S */ | 310 | /* Our assembly helper, in kexec_stub.S */ |
| 261 | extern NORET_TYPE void kexec_sequence(void *newstack, unsigned long start, | 311 | extern NORET_TYPE void kexec_sequence(void *newstack, unsigned long start, |
| 262 | void *image, void *control, | 312 | void *image, void *control, |
| @@ -278,12 +328,28 @@ void default_machine_kexec(struct kimage *image) | |||
| 278 | if (crashing_cpu == -1) | 328 | if (crashing_cpu == -1) |
| 279 | kexec_prepare_cpus(); | 329 | kexec_prepare_cpus(); |
| 280 | 330 | ||
| 331 | pr_debug("kexec: Starting switchover sequence.\n"); | ||
| 332 | |||
| 281 | /* switch to a staticly allocated stack. Based on irq stack code. | 333 | /* switch to a staticly allocated stack. Based on irq stack code. |
| 282 | * XXX: the task struct will likely be invalid once we do the copy! | 334 | * XXX: the task struct will likely be invalid once we do the copy! |
| 283 | */ | 335 | */ |
| 284 | kexec_stack.thread_info.task = current_thread_info()->task; | 336 | kexec_stack.thread_info.task = current_thread_info()->task; |
| 285 | kexec_stack.thread_info.flags = 0; | 337 | kexec_stack.thread_info.flags = 0; |
| 286 | 338 | ||
| 339 | /* We need a static PACA, too; copy this CPU's PACA over and switch to | ||
| 340 | * it. Also poison per_cpu_offset to catch anyone using non-static | ||
| 341 | * data. | ||
| 342 | */ | ||
| 343 | memcpy(&kexec_paca, get_paca(), sizeof(struct paca_struct)); | ||
| 344 | kexec_paca.data_offset = 0xedeaddeadeeeeeeeUL; | ||
| 345 | paca = (struct paca_struct *)RELOC_HIDE(&kexec_paca, 0) - | ||
| 346 | kexec_paca.paca_index; | ||
| 347 | setup_paca(&kexec_paca); | ||
| 348 | |||
| 349 | /* XXX: If anyone does 'dynamic lppacas' this will also need to be | ||
| 350 | * switched to a static version! | ||
| 351 | */ | ||
| 352 | |||
| 287 | /* Some things are best done in assembly. Finding globals with | 353 | /* Some things are best done in assembly. Finding globals with |
| 288 | * a toc is easier in C, so pass in what we can. | 354 | * a toc is easier in C, so pass in what we can. |
| 289 | */ | 355 | */ |
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index 139a773853f4..d0a26f1770fe 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c | |||
| @@ -105,6 +105,16 @@ void __init initialise_paca(struct paca_struct *new_paca, int cpu) | |||
| 105 | #endif /* CONFIG_PPC_STD_MMU_64 */ | 105 | #endif /* CONFIG_PPC_STD_MMU_64 */ |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | /* Put the paca pointer into r13 and SPRG_PACA */ | ||
| 109 | void setup_paca(struct paca_struct *new_paca) | ||
| 110 | { | ||
| 111 | local_paca = new_paca; | ||
| 112 | mtspr(SPRN_SPRG_PACA, local_paca); | ||
| 113 | #ifdef CONFIG_PPC_BOOK3E | ||
| 114 | mtspr(SPRN_SPRG_TLB_EXFRAME, local_paca->extlb); | ||
| 115 | #endif | ||
| 116 | } | ||
| 117 | |||
| 108 | static int __initdata paca_size; | 118 | static int __initdata paca_size; |
| 109 | 119 | ||
| 110 | void __init allocate_pacas(void) | 120 | void __init allocate_pacas(void) |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 773424df828a..551f6713ff42 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/kernel_stat.h> | 37 | #include <linux/kernel_stat.h> |
| 38 | #include <linux/personality.h> | 38 | #include <linux/personality.h> |
| 39 | #include <linux/random.h> | 39 | #include <linux/random.h> |
| 40 | #include <linux/hw_breakpoint.h> | ||
| 40 | 41 | ||
| 41 | #include <asm/pgtable.h> | 42 | #include <asm/pgtable.h> |
| 42 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
| @@ -462,14 +463,42 @@ struct task_struct *__switch_to(struct task_struct *prev, | |||
| 462 | #ifdef CONFIG_PPC_ADV_DEBUG_REGS | 463 | #ifdef CONFIG_PPC_ADV_DEBUG_REGS |
| 463 | switch_booke_debug_regs(&new->thread); | 464 | switch_booke_debug_regs(&new->thread); |
| 464 | #else | 465 | #else |
| 466 | /* | ||
| 467 | * For PPC_BOOK3S_64, we use the hw-breakpoint interfaces that would | ||
| 468 | * schedule DABR | ||
| 469 | */ | ||
| 470 | #ifndef CONFIG_HAVE_HW_BREAKPOINT | ||
| 465 | if (unlikely(__get_cpu_var(current_dabr) != new->thread.dabr)) | 471 | if (unlikely(__get_cpu_var(current_dabr) != new->thread.dabr)) |
| 466 | set_dabr(new->thread.dabr); | 472 | set_dabr(new->thread.dabr); |
| 473 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 467 | #endif | 474 | #endif |
| 468 | 475 | ||
| 469 | 476 | ||
| 470 | new_thread = &new->thread; | 477 | new_thread = &new->thread; |
| 471 | old_thread = ¤t->thread; | 478 | old_thread = ¤t->thread; |
| 472 | 479 | ||
| 480 | #if defined(CONFIG_PPC_BOOK3E_64) | ||
| 481 | /* XXX Current Book3E code doesn't deal with kernel side DBCR0, | ||
| 482 | * we always hold the user values, so we set it now. | ||
| 483 | * | ||
| 484 | * However, we ensure the kernel MSR:DE is appropriately cleared too | ||
| 485 | * to avoid spurrious single step exceptions in the kernel. | ||
| 486 | * | ||
| 487 | * This will have to change to merge with the ppc32 code at some point, | ||
| 488 | * but I don't like much what ppc32 is doing today so there's some | ||
| 489 | * thinking needed there | ||
| 490 | */ | ||
| 491 | if ((new_thread->dbcr0 | old_thread->dbcr0) & DBCR0_IDM) { | ||
| 492 | u32 dbcr0; | ||
| 493 | |||
| 494 | mtmsr(mfmsr() & ~MSR_DE); | ||
| 495 | isync(); | ||
| 496 | dbcr0 = mfspr(SPRN_DBCR0); | ||
| 497 | dbcr0 = (dbcr0 & DBCR0_EDM) | new_thread->dbcr0; | ||
| 498 | mtspr(SPRN_DBCR0, dbcr0); | ||
| 499 | } | ||
| 500 | #endif /* CONFIG_PPC64_BOOK3E */ | ||
| 501 | |||
| 473 | #ifdef CONFIG_PPC64 | 502 | #ifdef CONFIG_PPC64 |
| 474 | /* | 503 | /* |
| 475 | * Collect processor utilization data per process | 504 | * Collect processor utilization data per process |
| @@ -642,7 +671,11 @@ void flush_thread(void) | |||
| 642 | { | 671 | { |
| 643 | discard_lazy_cpu_state(); | 672 | discard_lazy_cpu_state(); |
| 644 | 673 | ||
| 674 | #ifdef CONFIG_HAVE_HW_BREAKPOINTS | ||
| 675 | flush_ptrace_hw_breakpoint(current); | ||
| 676 | #else /* CONFIG_HAVE_HW_BREAKPOINTS */ | ||
| 645 | set_debug_reg_defaults(¤t->thread); | 677 | set_debug_reg_defaults(¤t->thread); |
| 678 | #endif /* CONFIG_HAVE_HW_BREAKPOINTS */ | ||
| 646 | } | 679 | } |
| 647 | 680 | ||
| 648 | void | 681 | void |
| @@ -660,6 +693,9 @@ void prepare_to_copy(struct task_struct *tsk) | |||
| 660 | flush_altivec_to_thread(current); | 693 | flush_altivec_to_thread(current); |
| 661 | flush_vsx_to_thread(current); | 694 | flush_vsx_to_thread(current); |
| 662 | flush_spe_to_thread(current); | 695 | flush_spe_to_thread(current); |
| 696 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 697 | flush_ptrace_hw_breakpoint(tsk); | ||
| 698 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 663 | } | 699 | } |
| 664 | 700 | ||
| 665 | /* | 701 | /* |
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 3b6f8ae9b8cc..941ff4dbc567 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
| @@ -311,6 +311,24 @@ static void __init prom_print_hex(unsigned long val) | |||
| 311 | call_prom("write", 3, 1, _prom->stdout, buf, nibbles); | 311 | call_prom("write", 3, 1, _prom->stdout, buf, nibbles); |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | /* max number of decimal digits in an unsigned long */ | ||
| 315 | #define UL_DIGITS 21 | ||
| 316 | static void __init prom_print_dec(unsigned long val) | ||
| 317 | { | ||
| 318 | int i, size; | ||
| 319 | char buf[UL_DIGITS+1]; | ||
| 320 | struct prom_t *_prom = &RELOC(prom); | ||
| 321 | |||
| 322 | for (i = UL_DIGITS-1; i >= 0; i--) { | ||
| 323 | buf[i] = (val % 10) + '0'; | ||
| 324 | val = val/10; | ||
| 325 | if (val == 0) | ||
| 326 | break; | ||
| 327 | } | ||
| 328 | /* shift stuff down */ | ||
| 329 | size = UL_DIGITS - i; | ||
| 330 | call_prom("write", 3, 1, _prom->stdout, buf+i, size); | ||
| 331 | } | ||
| 314 | 332 | ||
| 315 | static void __init prom_printf(const char *format, ...) | 333 | static void __init prom_printf(const char *format, ...) |
| 316 | { | 334 | { |
| @@ -350,6 +368,14 @@ static void __init prom_printf(const char *format, ...) | |||
| 350 | v = va_arg(args, unsigned long); | 368 | v = va_arg(args, unsigned long); |
| 351 | prom_print_hex(v); | 369 | prom_print_hex(v); |
| 352 | break; | 370 | break; |
| 371 | case 'l': | ||
| 372 | ++q; | ||
| 373 | if (*q == 'u') { /* '%lu' */ | ||
| 374 | ++q; | ||
| 375 | v = va_arg(args, unsigned long); | ||
| 376 | prom_print_dec(v); | ||
| 377 | } | ||
| 378 | break; | ||
| 353 | } | 379 | } |
| 354 | } | 380 | } |
| 355 | } | 381 | } |
| @@ -835,11 +861,11 @@ static int __init prom_count_smt_threads(void) | |||
| 835 | if (plen == PROM_ERROR) | 861 | if (plen == PROM_ERROR) |
| 836 | break; | 862 | break; |
| 837 | plen >>= 2; | 863 | plen >>= 2; |
| 838 | prom_debug("Found 0x%x smt threads per core\n", (unsigned long)plen); | 864 | prom_debug("Found %lu smt threads per core\n", (unsigned long)plen); |
| 839 | 865 | ||
| 840 | /* Sanity check */ | 866 | /* Sanity check */ |
| 841 | if (plen < 1 || plen > 64) { | 867 | if (plen < 1 || plen > 64) { |
| 842 | prom_printf("Threads per core 0x%x out of bounds, assuming 1\n", | 868 | prom_printf("Threads per core %lu out of bounds, assuming 1\n", |
| 843 | (unsigned long)plen); | 869 | (unsigned long)plen); |
| 844 | return 1; | 870 | return 1; |
| 845 | } | 871 | } |
| @@ -869,12 +895,12 @@ static void __init prom_send_capabilities(void) | |||
| 869 | cores = (u32 *)PTRRELOC(&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET]); | 895 | cores = (u32 *)PTRRELOC(&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET]); |
| 870 | if (*cores != NR_CPUS) { | 896 | if (*cores != NR_CPUS) { |
| 871 | prom_printf("WARNING ! " | 897 | prom_printf("WARNING ! " |
| 872 | "ibm_architecture_vec structure inconsistent: 0x%x !\n", | 898 | "ibm_architecture_vec structure inconsistent: %lu!\n", |
| 873 | *cores); | 899 | *cores); |
| 874 | } else { | 900 | } else { |
| 875 | *cores = DIV_ROUND_UP(NR_CPUS, prom_count_smt_threads()); | 901 | *cores = DIV_ROUND_UP(NR_CPUS, prom_count_smt_threads()); |
| 876 | prom_printf("Max number of cores passed to firmware: 0x%x\n", | 902 | prom_printf("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n", |
| 877 | (unsigned long)*cores); | 903 | *cores, NR_CPUS); |
| 878 | } | 904 | } |
| 879 | 905 | ||
| 880 | /* try calling the ibm,client-architecture-support method */ | 906 | /* try calling the ibm,client-architecture-support method */ |
| @@ -1482,7 +1508,7 @@ static void __init prom_hold_cpus(void) | |||
| 1482 | reg = -1; | 1508 | reg = -1; |
| 1483 | prom_getprop(node, "reg", ®, sizeof(reg)); | 1509 | prom_getprop(node, "reg", ®, sizeof(reg)); |
| 1484 | 1510 | ||
| 1485 | prom_debug("cpu hw idx = 0x%x\n", reg); | 1511 | prom_debug("cpu hw idx = %lu\n", reg); |
| 1486 | 1512 | ||
| 1487 | /* Init the acknowledge var which will be reset by | 1513 | /* Init the acknowledge var which will be reset by |
| 1488 | * the secondary cpu when it awakens from its OF | 1514 | * the secondary cpu when it awakens from its OF |
| @@ -1492,7 +1518,7 @@ static void __init prom_hold_cpus(void) | |||
| 1492 | 1518 | ||
| 1493 | if (reg != _prom->cpu) { | 1519 | if (reg != _prom->cpu) { |
| 1494 | /* Primary Thread of non-boot cpu */ | 1520 | /* Primary Thread of non-boot cpu */ |
| 1495 | prom_printf("starting cpu hw idx %x... ", reg); | 1521 | prom_printf("starting cpu hw idx %lu... ", reg); |
| 1496 | call_prom("start-cpu", 3, 0, node, | 1522 | call_prom("start-cpu", 3, 0, node, |
| 1497 | secondary_hold, reg); | 1523 | secondary_hold, reg); |
| 1498 | 1524 | ||
| @@ -1507,7 +1533,7 @@ static void __init prom_hold_cpus(void) | |||
| 1507 | } | 1533 | } |
| 1508 | #ifdef CONFIG_SMP | 1534 | #ifdef CONFIG_SMP |
| 1509 | else | 1535 | else |
| 1510 | prom_printf("boot cpu hw idx %x\n", reg); | 1536 | prom_printf("boot cpu hw idx %lu\n", reg); |
| 1511 | #endif /* CONFIG_SMP */ | 1537 | #endif /* CONFIG_SMP */ |
| 1512 | } | 1538 | } |
| 1513 | 1539 | ||
| @@ -2420,7 +2446,7 @@ static void __init prom_find_boot_cpu(void) | |||
| 2420 | prom_getprop(cpu_pkg, "reg", &getprop_rval, sizeof(getprop_rval)); | 2446 | prom_getprop(cpu_pkg, "reg", &getprop_rval, sizeof(getprop_rval)); |
| 2421 | _prom->cpu = getprop_rval; | 2447 | _prom->cpu = getprop_rval; |
| 2422 | 2448 | ||
| 2423 | prom_debug("Booting CPU hw index = 0x%x\n", _prom->cpu); | 2449 | prom_debug("Booting CPU hw index = %lu\n", _prom->cpu); |
| 2424 | } | 2450 | } |
| 2425 | 2451 | ||
| 2426 | static void __init prom_check_initrd(unsigned long r3, unsigned long r4) | 2452 | static void __init prom_check_initrd(unsigned long r3, unsigned long r4) |
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 7a0c0199ea28..11f3cd9c832f 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
| @@ -32,6 +32,8 @@ | |||
| 32 | #ifdef CONFIG_PPC32 | 32 | #ifdef CONFIG_PPC32 |
| 33 | #include <linux/module.h> | 33 | #include <linux/module.h> |
| 34 | #endif | 34 | #endif |
| 35 | #include <linux/hw_breakpoint.h> | ||
| 36 | #include <linux/perf_event.h> | ||
| 35 | 37 | ||
| 36 | #include <asm/uaccess.h> | 38 | #include <asm/uaccess.h> |
| 37 | #include <asm/page.h> | 39 | #include <asm/page.h> |
| @@ -866,9 +868,34 @@ void user_disable_single_step(struct task_struct *task) | |||
| 866 | clear_tsk_thread_flag(task, TIF_SINGLESTEP); | 868 | clear_tsk_thread_flag(task, TIF_SINGLESTEP); |
| 867 | } | 869 | } |
| 868 | 870 | ||
| 871 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 872 | void ptrace_triggered(struct perf_event *bp, int nmi, | ||
| 873 | struct perf_sample_data *data, struct pt_regs *regs) | ||
| 874 | { | ||
| 875 | struct perf_event_attr attr; | ||
| 876 | |||
| 877 | /* | ||
| 878 | * Disable the breakpoint request here since ptrace has defined a | ||
| 879 | * one-shot behaviour for breakpoint exceptions in PPC64. | ||
| 880 | * The SIGTRAP signal is generated automatically for us in do_dabr(). | ||
| 881 | * We don't have to do anything about that here | ||
| 882 | */ | ||
| 883 | attr = bp->attr; | ||
| 884 | attr.disabled = true; | ||
| 885 | modify_user_hw_breakpoint(bp, &attr); | ||
| 886 | } | ||
| 887 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 888 | |||
| 869 | int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, | 889 | int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, |
| 870 | unsigned long data) | 890 | unsigned long data) |
| 871 | { | 891 | { |
| 892 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 893 | int ret; | ||
| 894 | struct thread_struct *thread = &(task->thread); | ||
| 895 | struct perf_event *bp; | ||
| 896 | struct perf_event_attr attr; | ||
| 897 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 898 | |||
| 872 | /* For ppc64 we support one DABR and no IABR's at the moment (ppc64). | 899 | /* For ppc64 we support one DABR and no IABR's at the moment (ppc64). |
| 873 | * For embedded processors we support one DAC and no IAC's at the | 900 | * For embedded processors we support one DAC and no IAC's at the |
| 874 | * moment. | 901 | * moment. |
| @@ -896,6 +923,43 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, | |||
| 896 | /* Ensure breakpoint translation bit is set */ | 923 | /* Ensure breakpoint translation bit is set */ |
| 897 | if (data && !(data & DABR_TRANSLATION)) | 924 | if (data && !(data & DABR_TRANSLATION)) |
| 898 | return -EIO; | 925 | return -EIO; |
| 926 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 927 | bp = thread->ptrace_bps[0]; | ||
| 928 | if ((!data) || !(data & (DABR_DATA_WRITE | DABR_DATA_READ))) { | ||
| 929 | if (bp) { | ||
| 930 | unregister_hw_breakpoint(bp); | ||
| 931 | thread->ptrace_bps[0] = NULL; | ||
| 932 | } | ||
| 933 | return 0; | ||
| 934 | } | ||
| 935 | if (bp) { | ||
| 936 | attr = bp->attr; | ||
| 937 | attr.bp_addr = data & ~HW_BREAKPOINT_ALIGN; | ||
| 938 | arch_bp_generic_fields(data & | ||
| 939 | (DABR_DATA_WRITE | DABR_DATA_READ), | ||
| 940 | &attr.bp_type); | ||
| 941 | ret = modify_user_hw_breakpoint(bp, &attr); | ||
| 942 | if (ret) | ||
| 943 | return ret; | ||
| 944 | thread->ptrace_bps[0] = bp; | ||
| 945 | thread->dabr = data; | ||
| 946 | return 0; | ||
| 947 | } | ||
| 948 | |||
| 949 | /* Create a new breakpoint request if one doesn't exist already */ | ||
| 950 | hw_breakpoint_init(&attr); | ||
| 951 | attr.bp_addr = data & ~HW_BREAKPOINT_ALIGN; | ||
| 952 | arch_bp_generic_fields(data & (DABR_DATA_WRITE | DABR_DATA_READ), | ||
| 953 | &attr.bp_type); | ||
| 954 | |||
| 955 | thread->ptrace_bps[0] = bp = register_user_hw_breakpoint(&attr, | ||
| 956 | ptrace_triggered, task); | ||
| 957 | if (IS_ERR(bp)) { | ||
| 958 | thread->ptrace_bps[0] = NULL; | ||
| 959 | return PTR_ERR(bp); | ||
| 960 | } | ||
| 961 | |||
| 962 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 899 | 963 | ||
| 900 | /* Move contents to the DABR register */ | 964 | /* Move contents to the DABR register */ |
| 901 | task->thread.dabr = data; | 965 | task->thread.dabr = data; |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index d0516dbee762..41048de3c6c3 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
| @@ -47,14 +47,6 @@ struct rtas_t rtas = { | |||
| 47 | }; | 47 | }; |
| 48 | EXPORT_SYMBOL(rtas); | 48 | EXPORT_SYMBOL(rtas); |
| 49 | 49 | ||
| 50 | struct rtas_suspend_me_data { | ||
| 51 | atomic_t working; /* number of cpus accessing this struct */ | ||
| 52 | atomic_t done; | ||
| 53 | int token; /* ibm,suspend-me */ | ||
| 54 | int error; | ||
| 55 | struct completion *complete; /* wait on this until working == 0 */ | ||
| 56 | }; | ||
| 57 | |||
| 58 | DEFINE_SPINLOCK(rtas_data_buf_lock); | 50 | DEFINE_SPINLOCK(rtas_data_buf_lock); |
| 59 | EXPORT_SYMBOL(rtas_data_buf_lock); | 51 | EXPORT_SYMBOL(rtas_data_buf_lock); |
| 60 | 52 | ||
| @@ -714,14 +706,53 @@ void rtas_os_term(char *str) | |||
| 714 | 706 | ||
| 715 | static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE; | 707 | static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE; |
| 716 | #ifdef CONFIG_PPC_PSERIES | 708 | #ifdef CONFIG_PPC_PSERIES |
| 717 | static void rtas_percpu_suspend_me(void *info) | 709 | static int __rtas_suspend_last_cpu(struct rtas_suspend_me_data *data, int wake_when_done) |
| 710 | { | ||
| 711 | u16 slb_size = mmu_slb_size; | ||
| 712 | int rc = H_MULTI_THREADS_ACTIVE; | ||
| 713 | int cpu; | ||
| 714 | |||
| 715 | slb_set_size(SLB_MIN_SIZE); | ||
| 716 | printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n", smp_processor_id()); | ||
| 717 | |||
| 718 | while (rc == H_MULTI_THREADS_ACTIVE && !atomic_read(&data->done) && | ||
| 719 | !atomic_read(&data->error)) | ||
| 720 | rc = rtas_call(data->token, 0, 1, NULL); | ||
| 721 | |||
| 722 | if (rc || atomic_read(&data->error)) { | ||
| 723 | printk(KERN_DEBUG "ibm,suspend-me returned %d\n", rc); | ||
| 724 | slb_set_size(slb_size); | ||
| 725 | } | ||
| 726 | |||
| 727 | if (atomic_read(&data->error)) | ||
| 728 | rc = atomic_read(&data->error); | ||
| 729 | |||
| 730 | atomic_set(&data->error, rc); | ||
| 731 | |||
| 732 | if (wake_when_done) { | ||
| 733 | atomic_set(&data->done, 1); | ||
| 734 | |||
| 735 | for_each_online_cpu(cpu) | ||
| 736 | plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu)); | ||
| 737 | } | ||
| 738 | |||
| 739 | if (atomic_dec_return(&data->working) == 0) | ||
| 740 | complete(data->complete); | ||
| 741 | |||
| 742 | return rc; | ||
| 743 | } | ||
| 744 | |||
| 745 | int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data) | ||
| 746 | { | ||
| 747 | atomic_inc(&data->working); | ||
| 748 | return __rtas_suspend_last_cpu(data, 0); | ||
| 749 | } | ||
| 750 | |||
| 751 | static int __rtas_suspend_cpu(struct rtas_suspend_me_data *data, int wake_when_done) | ||
| 718 | { | 752 | { |
| 719 | long rc = H_SUCCESS; | 753 | long rc = H_SUCCESS; |
| 720 | unsigned long msr_save; | 754 | unsigned long msr_save; |
| 721 | u16 slb_size = mmu_slb_size; | ||
| 722 | int cpu; | 755 | int cpu; |
| 723 | struct rtas_suspend_me_data *data = | ||
| 724 | (struct rtas_suspend_me_data *)info; | ||
| 725 | 756 | ||
| 726 | atomic_inc(&data->working); | 757 | atomic_inc(&data->working); |
| 727 | 758 | ||
| @@ -729,7 +760,7 @@ static void rtas_percpu_suspend_me(void *info) | |||
| 729 | msr_save = mfmsr(); | 760 | msr_save = mfmsr(); |
| 730 | mtmsr(msr_save & ~(MSR_EE)); | 761 | mtmsr(msr_save & ~(MSR_EE)); |
| 731 | 762 | ||
| 732 | while (rc == H_SUCCESS && !atomic_read(&data->done)) | 763 | while (rc == H_SUCCESS && !atomic_read(&data->done) && !atomic_read(&data->error)) |
| 733 | rc = plpar_hcall_norets(H_JOIN); | 764 | rc = plpar_hcall_norets(H_JOIN); |
| 734 | 765 | ||
| 735 | mtmsr(msr_save); | 766 | mtmsr(msr_save); |
| @@ -741,33 +772,37 @@ static void rtas_percpu_suspend_me(void *info) | |||
| 741 | /* All other cpus are in H_JOIN, this cpu does | 772 | /* All other cpus are in H_JOIN, this cpu does |
| 742 | * the suspend. | 773 | * the suspend. |
| 743 | */ | 774 | */ |
| 744 | slb_set_size(SLB_MIN_SIZE); | 775 | return __rtas_suspend_last_cpu(data, wake_when_done); |
| 745 | printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n", | ||
| 746 | smp_processor_id()); | ||
| 747 | data->error = rtas_call(data->token, 0, 1, NULL); | ||
| 748 | |||
| 749 | if (data->error) { | ||
| 750 | printk(KERN_DEBUG "ibm,suspend-me returned %d\n", | ||
| 751 | data->error); | ||
| 752 | slb_set_size(slb_size); | ||
| 753 | } | ||
| 754 | } else { | 776 | } else { |
| 755 | printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n", | 777 | printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n", |
| 756 | smp_processor_id(), rc); | 778 | smp_processor_id(), rc); |
| 757 | data->error = rc; | 779 | atomic_set(&data->error, rc); |
| 758 | } | 780 | } |
| 759 | 781 | ||
| 760 | atomic_set(&data->done, 1); | 782 | if (wake_when_done) { |
| 783 | atomic_set(&data->done, 1); | ||
| 761 | 784 | ||
| 762 | /* This cpu did the suspend or got an error; in either case, | 785 | /* This cpu did the suspend or got an error; in either case, |
| 763 | * we need to prod all other other cpus out of join state. | 786 | * we need to prod all other other cpus out of join state. |
| 764 | * Extra prods are harmless. | 787 | * Extra prods are harmless. |
| 765 | */ | 788 | */ |
| 766 | for_each_online_cpu(cpu) | 789 | for_each_online_cpu(cpu) |
| 767 | plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu)); | 790 | plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu)); |
| 791 | } | ||
| 768 | out: | 792 | out: |
| 769 | if (atomic_dec_return(&data->working) == 0) | 793 | if (atomic_dec_return(&data->working) == 0) |
| 770 | complete(data->complete); | 794 | complete(data->complete); |
| 795 | return rc; | ||
| 796 | } | ||
| 797 | |||
| 798 | int rtas_suspend_cpu(struct rtas_suspend_me_data *data) | ||
| 799 | { | ||
| 800 | return __rtas_suspend_cpu(data, 0); | ||
| 801 | } | ||
| 802 | |||
| 803 | static void rtas_percpu_suspend_me(void *info) | ||
| 804 | { | ||
| 805 | __rtas_suspend_cpu((struct rtas_suspend_me_data *)info, 1); | ||
| 771 | } | 806 | } |
| 772 | 807 | ||
| 773 | static int rtas_ibm_suspend_me(struct rtas_args *args) | 808 | static int rtas_ibm_suspend_me(struct rtas_args *args) |
| @@ -802,22 +837,22 @@ static int rtas_ibm_suspend_me(struct rtas_args *args) | |||
| 802 | 837 | ||
| 803 | atomic_set(&data.working, 0); | 838 | atomic_set(&data.working, 0); |
| 804 | atomic_set(&data.done, 0); | 839 | atomic_set(&data.done, 0); |
| 840 | atomic_set(&data.error, 0); | ||
| 805 | data.token = rtas_token("ibm,suspend-me"); | 841 | data.token = rtas_token("ibm,suspend-me"); |
| 806 | data.error = 0; | ||
| 807 | data.complete = &done; | 842 | data.complete = &done; |
| 808 | 843 | ||
| 809 | /* Call function on all CPUs. One of us will make the | 844 | /* Call function on all CPUs. One of us will make the |
| 810 | * rtas call | 845 | * rtas call |
| 811 | */ | 846 | */ |
| 812 | if (on_each_cpu(rtas_percpu_suspend_me, &data, 0)) | 847 | if (on_each_cpu(rtas_percpu_suspend_me, &data, 0)) |
| 813 | data.error = -EINVAL; | 848 | atomic_set(&data.error, -EINVAL); |
| 814 | 849 | ||
| 815 | wait_for_completion(&done); | 850 | wait_for_completion(&done); |
| 816 | 851 | ||
| 817 | if (data.error != 0) | 852 | if (atomic_read(&data.error) != 0) |
| 818 | printk(KERN_ERR "Error doing global join\n"); | 853 | printk(KERN_ERR "Error doing global join\n"); |
| 819 | 854 | ||
| 820 | return data.error; | 855 | return atomic_read(&data.error); |
| 821 | } | 856 | } |
| 822 | #else /* CONFIG_PPC_PSERIES */ | 857 | #else /* CONFIG_PPC_PSERIES */ |
| 823 | static int rtas_ibm_suspend_me(struct rtas_args *args) | 858 | static int rtas_ibm_suspend_me(struct rtas_args *args) |
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index b7e6c7e193ae..70decd8068ca 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
| @@ -94,6 +94,10 @@ struct screen_info screen_info = { | |||
| 94 | .orig_video_points = 16 | 94 | .orig_video_points = 16 |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
| 97 | /* Variables required to store legacy IO irq routing */ | ||
| 98 | int of_i8042_kbd_irq; | ||
| 99 | int of_i8042_aux_irq; | ||
| 100 | |||
| 97 | #ifdef __DO_IRQ_CANON | 101 | #ifdef __DO_IRQ_CANON |
| 98 | /* XXX should go elsewhere eventually */ | 102 | /* XXX should go elsewhere eventually */ |
| 99 | int ppc_do_canonicalize_irqs; | 103 | int ppc_do_canonicalize_irqs; |
| @@ -575,6 +579,15 @@ int check_legacy_ioport(unsigned long base_port) | |||
| 575 | np = of_find_compatible_node(NULL, NULL, "pnpPNP,f03"); | 579 | np = of_find_compatible_node(NULL, NULL, "pnpPNP,f03"); |
| 576 | if (np) { | 580 | if (np) { |
| 577 | parent = of_get_parent(np); | 581 | parent = of_get_parent(np); |
| 582 | |||
| 583 | of_i8042_kbd_irq = irq_of_parse_and_map(parent, 0); | ||
| 584 | if (!of_i8042_kbd_irq) | ||
| 585 | of_i8042_kbd_irq = 1; | ||
| 586 | |||
| 587 | of_i8042_aux_irq = irq_of_parse_and_map(parent, 1); | ||
| 588 | if (!of_i8042_aux_irq) | ||
| 589 | of_i8042_aux_irq = 12; | ||
| 590 | |||
| 578 | of_node_put(np); | 591 | of_node_put(np); |
| 579 | np = parent; | 592 | np = parent; |
| 580 | break; | 593 | break; |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index d135f93cb0f6..1bee4b68fa45 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -142,16 +142,6 @@ early_param("smt-enabled", early_smt_enabled); | |||
| 142 | #define check_smt_enabled() | 142 | #define check_smt_enabled() |
| 143 | #endif /* CONFIG_SMP */ | 143 | #endif /* CONFIG_SMP */ |
| 144 | 144 | ||
| 145 | /* Put the paca pointer into r13 and SPRG_PACA */ | ||
| 146 | static void __init setup_paca(struct paca_struct *new_paca) | ||
| 147 | { | ||
| 148 | local_paca = new_paca; | ||
| 149 | mtspr(SPRN_SPRG_PACA, local_paca); | ||
| 150 | #ifdef CONFIG_PPC_BOOK3E | ||
| 151 | mtspr(SPRN_SPRG_TLB_EXFRAME, local_paca->extlb); | ||
| 152 | #endif | ||
| 153 | } | ||
| 154 | |||
| 155 | /* | 145 | /* |
| 156 | * Early initialization entry point. This is called by head.S | 146 | * Early initialization entry point. This is called by head.S |
| 157 | * with MMU translation disabled. We rely on the "feature" of | 147 | * with MMU translation disabled. We rely on the "feature" of |
| @@ -600,6 +590,9 @@ static int pcpu_cpu_distance(unsigned int from, unsigned int to) | |||
| 600 | return REMOTE_DISTANCE; | 590 | return REMOTE_DISTANCE; |
| 601 | } | 591 | } |
| 602 | 592 | ||
| 593 | unsigned long __per_cpu_offset[NR_CPUS] __read_mostly; | ||
| 594 | EXPORT_SYMBOL(__per_cpu_offset); | ||
| 595 | |||
| 603 | void __init setup_per_cpu_areas(void) | 596 | void __init setup_per_cpu_areas(void) |
| 604 | { | 597 | { |
| 605 | const size_t dyn_size = PERCPU_MODULE_RESERVE + PERCPU_DYNAMIC_RESERVE; | 598 | const size_t dyn_size = PERCPU_MODULE_RESERVE + PERCPU_DYNAMIC_RESERVE; |
| @@ -624,8 +617,10 @@ void __init setup_per_cpu_areas(void) | |||
| 624 | panic("cannot initialize percpu area (err=%d)", rc); | 617 | panic("cannot initialize percpu area (err=%d)", rc); |
| 625 | 618 | ||
| 626 | delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start; | 619 | delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start; |
| 627 | for_each_possible_cpu(cpu) | 620 | for_each_possible_cpu(cpu) { |
| 628 | paca[cpu].data_offset = delta + pcpu_unit_offsets[cpu]; | 621 | __per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu]; |
| 622 | paca[cpu].data_offset = __per_cpu_offset[cpu]; | ||
| 623 | } | ||
| 629 | } | 624 | } |
| 630 | #endif | 625 | #endif |
| 631 | 626 | ||
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index a0afb555a7c9..7109f5b1baa8 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/tracehook.h> | 12 | #include <linux/tracehook.h> |
| 13 | #include <linux/signal.h> | 13 | #include <linux/signal.h> |
| 14 | #include <asm/hw_breakpoint.h> | ||
| 14 | #include <asm/uaccess.h> | 15 | #include <asm/uaccess.h> |
| 15 | #include <asm/unistd.h> | 16 | #include <asm/unistd.h> |
| 16 | 17 | ||
| @@ -149,6 +150,8 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs) | |||
| 149 | if (current->thread.dabr) | 150 | if (current->thread.dabr) |
| 150 | set_dabr(current->thread.dabr); | 151 | set_dabr(current->thread.dabr); |
| 151 | #endif | 152 | #endif |
| 153 | /* Re-enable the breakpoints for the signal stack */ | ||
| 154 | thread_change_pc(current, regs); | ||
| 152 | 155 | ||
| 153 | if (is32) { | 156 | if (is32) { |
| 154 | if (ka.sa.sa_flags & SA_SIGINFO) | 157 | if (ka.sa.sa_flags & SA_SIGINFO) |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 5c196d1086d9..a61b3ddd7bb3 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -288,8 +288,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 288 | max_cpus = NR_CPUS; | 288 | max_cpus = NR_CPUS; |
| 289 | else | 289 | else |
| 290 | max_cpus = 1; | 290 | max_cpus = 1; |
| 291 | |||
| 292 | smp_space_timers(max_cpus); | ||
| 293 | 291 | ||
| 294 | for_each_possible_cpu(cpu) | 292 | for_each_possible_cpu(cpu) |
| 295 | if (cpu != boot_cpuid) | 293 | if (cpu != boot_cpuid) |
| @@ -501,14 +499,6 @@ int __devinit start_secondary(void *unused) | |||
| 501 | current->active_mm = &init_mm; | 499 | current->active_mm = &init_mm; |
| 502 | 500 | ||
| 503 | smp_store_cpu_info(cpu); | 501 | smp_store_cpu_info(cpu); |
| 504 | |||
| 505 | #if defined(CONFIG_BOOKE) || defined(CONFIG_40x) | ||
| 506 | /* Clear any pending timer interrupts */ | ||
| 507 | mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS); | ||
| 508 | |||
| 509 | /* Enable decrementer interrupt */ | ||
| 510 | mtspr(SPRN_TCR, TCR_DIE); | ||
| 511 | #endif | ||
| 512 | set_dec(tb_ticks_per_jiffy); | 502 | set_dec(tb_ticks_per_jiffy); |
| 513 | preempt_disable(); | 503 | preempt_disable(); |
| 514 | cpu_callin_map[cpu] = 1; | 504 | cpu_callin_map[cpu] = 1; |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 0441bbdadbd1..ccb8759c8532 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -149,16 +149,6 @@ unsigned long tb_ticks_per_usec = 100; /* sane default */ | |||
| 149 | EXPORT_SYMBOL(tb_ticks_per_usec); | 149 | EXPORT_SYMBOL(tb_ticks_per_usec); |
| 150 | unsigned long tb_ticks_per_sec; | 150 | unsigned long tb_ticks_per_sec; |
| 151 | EXPORT_SYMBOL(tb_ticks_per_sec); /* for cputime_t conversions */ | 151 | EXPORT_SYMBOL(tb_ticks_per_sec); /* for cputime_t conversions */ |
| 152 | u64 tb_to_xs; | ||
| 153 | unsigned tb_to_us; | ||
| 154 | |||
| 155 | #define TICKLEN_SCALE NTP_SCALE_SHIFT | ||
| 156 | static u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */ | ||
| 157 | static u64 ticklen_to_xs; /* 0.64 fraction */ | ||
| 158 | |||
| 159 | /* If last_tick_len corresponds to about 1/HZ seconds, then | ||
| 160 | last_tick_len << TICKLEN_SHIFT will be about 2^63. */ | ||
| 161 | #define TICKLEN_SHIFT (63 - 30 - TICKLEN_SCALE + SHIFT_HZ) | ||
| 162 | 152 | ||
| 163 | DEFINE_SPINLOCK(rtc_lock); | 153 | DEFINE_SPINLOCK(rtc_lock); |
| 164 | EXPORT_SYMBOL_GPL(rtc_lock); | 154 | EXPORT_SYMBOL_GPL(rtc_lock); |
| @@ -174,7 +164,6 @@ unsigned long ppc_proc_freq; | |||
| 174 | EXPORT_SYMBOL(ppc_proc_freq); | 164 | EXPORT_SYMBOL(ppc_proc_freq); |
| 175 | unsigned long ppc_tb_freq; | 165 | unsigned long ppc_tb_freq; |
| 176 | 166 | ||
| 177 | static u64 tb_last_jiffy __cacheline_aligned_in_smp; | ||
| 178 | static DEFINE_PER_CPU(u64, last_jiffy); | 167 | static DEFINE_PER_CPU(u64, last_jiffy); |
| 179 | 168 | ||
| 180 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 169 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
| @@ -423,30 +412,6 @@ void udelay(unsigned long usecs) | |||
| 423 | } | 412 | } |
| 424 | EXPORT_SYMBOL(udelay); | 413 | EXPORT_SYMBOL(udelay); |
| 425 | 414 | ||
| 426 | static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec, | ||
| 427 | u64 new_tb_to_xs) | ||
| 428 | { | ||
| 429 | /* | ||
| 430 | * tb_update_count is used to allow the userspace gettimeofday code | ||
| 431 | * to assure itself that it sees a consistent view of the tb_to_xs and | ||
| 432 | * stamp_xsec variables. It reads the tb_update_count, then reads | ||
| 433 | * tb_to_xs and stamp_xsec and then reads tb_update_count again. If | ||
| 434 | * the two values of tb_update_count match and are even then the | ||
| 435 | * tb_to_xs and stamp_xsec values are consistent. If not, then it | ||
| 436 | * loops back and reads them again until this criteria is met. | ||
| 437 | * We expect the caller to have done the first increment of | ||
| 438 | * vdso_data->tb_update_count already. | ||
| 439 | */ | ||
| 440 | vdso_data->tb_orig_stamp = new_tb_stamp; | ||
| 441 | vdso_data->stamp_xsec = new_stamp_xsec; | ||
| 442 | vdso_data->tb_to_xs = new_tb_to_xs; | ||
| 443 | vdso_data->wtom_clock_sec = wall_to_monotonic.tv_sec; | ||
| 444 | vdso_data->wtom_clock_nsec = wall_to_monotonic.tv_nsec; | ||
| 445 | vdso_data->stamp_xtime = xtime; | ||
| 446 | smp_wmb(); | ||
| 447 | ++(vdso_data->tb_update_count); | ||
| 448 | } | ||
| 449 | |||
| 450 | #ifdef CONFIG_SMP | 415 | #ifdef CONFIG_SMP |
| 451 | unsigned long profile_pc(struct pt_regs *regs) | 416 | unsigned long profile_pc(struct pt_regs *regs) |
| 452 | { | 417 | { |
| @@ -470,7 +435,6 @@ EXPORT_SYMBOL(profile_pc); | |||
| 470 | 435 | ||
| 471 | static int __init iSeries_tb_recal(void) | 436 | static int __init iSeries_tb_recal(void) |
| 472 | { | 437 | { |
| 473 | struct div_result divres; | ||
| 474 | unsigned long titan, tb; | 438 | unsigned long titan, tb; |
| 475 | 439 | ||
| 476 | /* Make sure we only run on iSeries */ | 440 | /* Make sure we only run on iSeries */ |
| @@ -501,10 +465,7 @@ static int __init iSeries_tb_recal(void) | |||
| 501 | tb_ticks_per_jiffy = new_tb_ticks_per_jiffy; | 465 | tb_ticks_per_jiffy = new_tb_ticks_per_jiffy; |
| 502 | tb_ticks_per_sec = new_tb_ticks_per_sec; | 466 | tb_ticks_per_sec = new_tb_ticks_per_sec; |
| 503 | calc_cputime_factors(); | 467 | calc_cputime_factors(); |
| 504 | div128_by_32( XSEC_PER_SEC, 0, tb_ticks_per_sec, &divres ); | ||
| 505 | tb_to_xs = divres.result_low; | ||
| 506 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; | 468 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; |
| 507 | vdso_data->tb_to_xs = tb_to_xs; | ||
| 508 | setup_cputime_one_jiffy(); | 469 | setup_cputime_one_jiffy(); |
| 509 | } | 470 | } |
| 510 | else { | 471 | else { |
| @@ -667,27 +628,9 @@ void timer_interrupt(struct pt_regs * regs) | |||
| 667 | trace_timer_interrupt_exit(regs); | 628 | trace_timer_interrupt_exit(regs); |
| 668 | } | 629 | } |
| 669 | 630 | ||
| 670 | void wakeup_decrementer(void) | ||
| 671 | { | ||
| 672 | unsigned long ticks; | ||
| 673 | |||
| 674 | /* | ||
| 675 | * The timebase gets saved on sleep and restored on wakeup, | ||
| 676 | * so all we need to do is to reset the decrementer. | ||
| 677 | */ | ||
| 678 | ticks = tb_ticks_since(__get_cpu_var(last_jiffy)); | ||
| 679 | if (ticks < tb_ticks_per_jiffy) | ||
| 680 | ticks = tb_ticks_per_jiffy - ticks; | ||
| 681 | else | ||
| 682 | ticks = 1; | ||
| 683 | set_dec(ticks); | ||
| 684 | } | ||
| 685 | |||
| 686 | #ifdef CONFIG_SUSPEND | 631 | #ifdef CONFIG_SUSPEND |
| 687 | void generic_suspend_disable_irqs(void) | 632 | static void generic_suspend_disable_irqs(void) |
| 688 | { | 633 | { |
| 689 | preempt_disable(); | ||
| 690 | |||
| 691 | /* Disable the decrementer, so that it doesn't interfere | 634 | /* Disable the decrementer, so that it doesn't interfere |
| 692 | * with suspending. | 635 | * with suspending. |
| 693 | */ | 636 | */ |
| @@ -697,12 +640,9 @@ void generic_suspend_disable_irqs(void) | |||
| 697 | set_dec(0x7fffffff); | 640 | set_dec(0x7fffffff); |
| 698 | } | 641 | } |
| 699 | 642 | ||
| 700 | void generic_suspend_enable_irqs(void) | 643 | static void generic_suspend_enable_irqs(void) |
| 701 | { | 644 | { |
| 702 | wakeup_decrementer(); | ||
| 703 | |||
| 704 | local_irq_enable(); | 645 | local_irq_enable(); |
| 705 | preempt_enable(); | ||
| 706 | } | 646 | } |
| 707 | 647 | ||
| 708 | /* Overrides the weak version in kernel/power/main.c */ | 648 | /* Overrides the weak version in kernel/power/main.c */ |
| @@ -722,23 +662,6 @@ void arch_suspend_enable_irqs(void) | |||
| 722 | } | 662 | } |
| 723 | #endif | 663 | #endif |
| 724 | 664 | ||
| 725 | #ifdef CONFIG_SMP | ||
| 726 | void __init smp_space_timers(unsigned int max_cpus) | ||
| 727 | { | ||
| 728 | int i; | ||
| 729 | u64 previous_tb = per_cpu(last_jiffy, boot_cpuid); | ||
| 730 | |||
| 731 | /* make sure tb > per_cpu(last_jiffy, cpu) for all cpus always */ | ||
| 732 | previous_tb -= tb_ticks_per_jiffy; | ||
| 733 | |||
| 734 | for_each_possible_cpu(i) { | ||
| 735 | if (i == boot_cpuid) | ||
| 736 | continue; | ||
| 737 | per_cpu(last_jiffy, i) = previous_tb; | ||
| 738 | } | ||
| 739 | } | ||
| 740 | #endif | ||
| 741 | |||
| 742 | /* | 665 | /* |
| 743 | * Scheduler clock - returns current time in nanosec units. | 666 | * Scheduler clock - returns current time in nanosec units. |
| 744 | * | 667 | * |
| @@ -873,10 +796,37 @@ static cycle_t timebase_read(struct clocksource *cs) | |||
| 873 | return (cycle_t)get_tb(); | 796 | return (cycle_t)get_tb(); |
| 874 | } | 797 | } |
| 875 | 798 | ||
| 799 | static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec, | ||
| 800 | u64 new_tb_to_xs, struct timespec *now, | ||
| 801 | u32 frac_sec) | ||
| 802 | { | ||
| 803 | /* | ||
| 804 | * tb_update_count is used to allow the userspace gettimeofday code | ||
| 805 | * to assure itself that it sees a consistent view of the tb_to_xs and | ||
| 806 | * stamp_xsec variables. It reads the tb_update_count, then reads | ||
| 807 | * tb_to_xs and stamp_xsec and then reads tb_update_count again. If | ||
| 808 | * the two values of tb_update_count match and are even then the | ||
| 809 | * tb_to_xs and stamp_xsec values are consistent. If not, then it | ||
| 810 | * loops back and reads them again until this criteria is met. | ||
| 811 | * We expect the caller to have done the first increment of | ||
| 812 | * vdso_data->tb_update_count already. | ||
| 813 | */ | ||
| 814 | vdso_data->tb_orig_stamp = new_tb_stamp; | ||
| 815 | vdso_data->stamp_xsec = new_stamp_xsec; | ||
| 816 | vdso_data->tb_to_xs = new_tb_to_xs; | ||
| 817 | vdso_data->wtom_clock_sec = wall_to_monotonic.tv_sec; | ||
| 818 | vdso_data->wtom_clock_nsec = wall_to_monotonic.tv_nsec; | ||
| 819 | vdso_data->stamp_xtime = *now; | ||
| 820 | vdso_data->stamp_sec_fraction = frac_sec; | ||
| 821 | smp_wmb(); | ||
| 822 | ++(vdso_data->tb_update_count); | ||
| 823 | } | ||
| 824 | |||
| 876 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, | 825 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, |
| 877 | u32 mult) | 826 | u32 mult) |
| 878 | { | 827 | { |
| 879 | u64 t2x, stamp_xsec; | 828 | u64 t2x, stamp_xsec; |
| 829 | u32 frac_sec; | ||
| 880 | 830 | ||
| 881 | if (clock != &clocksource_timebase) | 831 | if (clock != &clocksource_timebase) |
| 882 | return; | 832 | return; |
| @@ -888,10 +838,14 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, | |||
| 888 | /* XXX this assumes clock->shift == 22 */ | 838 | /* XXX this assumes clock->shift == 22 */ |
| 889 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ | 839 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ |
| 890 | t2x = (u64) mult * 4611686018ULL; | 840 | t2x = (u64) mult * 4611686018ULL; |
| 891 | stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; | 841 | stamp_xsec = (u64) wall_time->tv_nsec * XSEC_PER_SEC; |
| 892 | do_div(stamp_xsec, 1000000000); | 842 | do_div(stamp_xsec, 1000000000); |
| 893 | stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; | 843 | stamp_xsec += (u64) wall_time->tv_sec * XSEC_PER_SEC; |
| 894 | update_gtod(clock->cycle_last, stamp_xsec, t2x); | 844 | |
| 845 | BUG_ON(wall_time->tv_nsec >= NSEC_PER_SEC); | ||
| 846 | /* this is tv_nsec / 1e9 as a 0.32 fraction */ | ||
| 847 | frac_sec = ((u64) wall_time->tv_nsec * 18446744073ULL) >> 32; | ||
| 848 | update_gtod(clock->cycle_last, stamp_xsec, t2x, wall_time, frac_sec); | ||
| 895 | } | 849 | } |
| 896 | 850 | ||
| 897 | void update_vsyscall_tz(void) | 851 | void update_vsyscall_tz(void) |
| @@ -1007,15 +961,13 @@ void secondary_cpu_time_init(void) | |||
| 1007 | /* This function is only called on the boot processor */ | 961 | /* This function is only called on the boot processor */ |
| 1008 | void __init time_init(void) | 962 | void __init time_init(void) |
| 1009 | { | 963 | { |
| 1010 | unsigned long flags; | ||
| 1011 | struct div_result res; | 964 | struct div_result res; |
| 1012 | u64 scale, x; | 965 | u64 scale; |
| 1013 | unsigned shift; | 966 | unsigned shift; |
| 1014 | 967 | ||
| 1015 | if (__USE_RTC()) { | 968 | if (__USE_RTC()) { |
| 1016 | /* 601 processor: dec counts down by 128 every 128ns */ | 969 | /* 601 processor: dec counts down by 128 every 128ns */ |
| 1017 | ppc_tb_freq = 1000000000; | 970 | ppc_tb_freq = 1000000000; |
| 1018 | tb_last_jiffy = get_rtcl(); | ||
| 1019 | } else { | 971 | } else { |
| 1020 | /* Normal PowerPC with timebase register */ | 972 | /* Normal PowerPC with timebase register */ |
| 1021 | ppc_md.calibrate_decr(); | 973 | ppc_md.calibrate_decr(); |
| @@ -1023,50 +975,15 @@ void __init time_init(void) | |||
| 1023 | ppc_tb_freq / 1000000, ppc_tb_freq % 1000000); | 975 | ppc_tb_freq / 1000000, ppc_tb_freq % 1000000); |
| 1024 | printk(KERN_DEBUG "time_init: processor frequency = %lu.%.6lu MHz\n", | 976 | printk(KERN_DEBUG "time_init: processor frequency = %lu.%.6lu MHz\n", |
| 1025 | ppc_proc_freq / 1000000, ppc_proc_freq % 1000000); | 977 | ppc_proc_freq / 1000000, ppc_proc_freq % 1000000); |
| 1026 | tb_last_jiffy = get_tb(); | ||
| 1027 | } | 978 | } |
| 1028 | 979 | ||
| 1029 | tb_ticks_per_jiffy = ppc_tb_freq / HZ; | 980 | tb_ticks_per_jiffy = ppc_tb_freq / HZ; |
| 1030 | tb_ticks_per_sec = ppc_tb_freq; | 981 | tb_ticks_per_sec = ppc_tb_freq; |
| 1031 | tb_ticks_per_usec = ppc_tb_freq / 1000000; | 982 | tb_ticks_per_usec = ppc_tb_freq / 1000000; |
| 1032 | tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000); | ||
| 1033 | calc_cputime_factors(); | 983 | calc_cputime_factors(); |
| 1034 | setup_cputime_one_jiffy(); | 984 | setup_cputime_one_jiffy(); |
| 1035 | 985 | ||
| 1036 | /* | 986 | /* |
| 1037 | * Calculate the length of each tick in ns. It will not be | ||
| 1038 | * exactly 1e9/HZ unless ppc_tb_freq is divisible by HZ. | ||
| 1039 | * We compute 1e9 * tb_ticks_per_jiffy / ppc_tb_freq, | ||
| 1040 | * rounded up. | ||
| 1041 | */ | ||
| 1042 | x = (u64) NSEC_PER_SEC * tb_ticks_per_jiffy + ppc_tb_freq - 1; | ||
| 1043 | do_div(x, ppc_tb_freq); | ||
| 1044 | tick_nsec = x; | ||
| 1045 | last_tick_len = x << TICKLEN_SCALE; | ||
| 1046 | |||
| 1047 | /* | ||
| 1048 | * Compute ticklen_to_xs, which is a factor which gets multiplied | ||
| 1049 | * by (last_tick_len << TICKLEN_SHIFT) to get a tb_to_xs value. | ||
| 1050 | * It is computed as: | ||
| 1051 | * ticklen_to_xs = 2^N / (tb_ticks_per_jiffy * 1e9) | ||
| 1052 | * where N = 64 + 20 - TICKLEN_SCALE - TICKLEN_SHIFT | ||
| 1053 | * which turns out to be N = 51 - SHIFT_HZ. | ||
| 1054 | * This gives the result as a 0.64 fixed-point fraction. | ||
| 1055 | * That value is reduced by an offset amounting to 1 xsec per | ||
| 1056 | * 2^31 timebase ticks to avoid problems with time going backwards | ||
| 1057 | * by 1 xsec when we do timer_recalc_offset due to losing the | ||
| 1058 | * fractional xsec. That offset is equal to ppc_tb_freq/2^51 | ||
| 1059 | * since there are 2^20 xsec in a second. | ||
| 1060 | */ | ||
| 1061 | div128_by_32((1ULL << 51) - ppc_tb_freq, 0, | ||
| 1062 | tb_ticks_per_jiffy << SHIFT_HZ, &res); | ||
| 1063 | div128_by_32(res.result_high, res.result_low, NSEC_PER_SEC, &res); | ||
| 1064 | ticklen_to_xs = res.result_low; | ||
| 1065 | |||
| 1066 | /* Compute tb_to_xs from tick_nsec */ | ||
| 1067 | tb_to_xs = mulhdu(last_tick_len << TICKLEN_SHIFT, ticklen_to_xs); | ||
| 1068 | |||
| 1069 | /* | ||
| 1070 | * Compute scale factor for sched_clock. | 987 | * Compute scale factor for sched_clock. |
| 1071 | * The calibrate_decr() function has set tb_ticks_per_sec, | 988 | * The calibrate_decr() function has set tb_ticks_per_sec, |
| 1072 | * which is the timebase frequency. | 989 | * which is the timebase frequency. |
| @@ -1087,21 +1004,14 @@ void __init time_init(void) | |||
| 1087 | /* Save the current timebase to pretty up CONFIG_PRINTK_TIME */ | 1004 | /* Save the current timebase to pretty up CONFIG_PRINTK_TIME */ |
| 1088 | boot_tb = get_tb_or_rtc(); | 1005 | boot_tb = get_tb_or_rtc(); |
| 1089 | 1006 | ||
| 1090 | write_seqlock_irqsave(&xtime_lock, flags); | ||
| 1091 | |||
| 1092 | /* If platform provided a timezone (pmac), we correct the time */ | 1007 | /* If platform provided a timezone (pmac), we correct the time */ |
| 1093 | if (timezone_offset) { | 1008 | if (timezone_offset) { |
| 1094 | sys_tz.tz_minuteswest = -timezone_offset / 60; | 1009 | sys_tz.tz_minuteswest = -timezone_offset / 60; |
| 1095 | sys_tz.tz_dsttime = 0; | 1010 | sys_tz.tz_dsttime = 0; |
| 1096 | } | 1011 | } |
| 1097 | 1012 | ||
| 1098 | vdso_data->tb_orig_stamp = tb_last_jiffy; | ||
| 1099 | vdso_data->tb_update_count = 0; | 1013 | vdso_data->tb_update_count = 0; |
| 1100 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; | 1014 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; |
| 1101 | vdso_data->stamp_xsec = (u64) xtime.tv_sec * XSEC_PER_SEC; | ||
| 1102 | vdso_data->tb_to_xs = tb_to_xs; | ||
| 1103 | |||
| 1104 | write_sequnlock_irqrestore(&xtime_lock, flags); | ||
| 1105 | 1015 | ||
| 1106 | /* Start the decrementer on CPUs that have manual control | 1016 | /* Start the decrementer on CPUs that have manual control |
| 1107 | * such as BookE | 1017 | * such as BookE |
| @@ -1195,39 +1105,6 @@ void to_tm(int tim, struct rtc_time * tm) | |||
| 1195 | GregorianDay(tm); | 1105 | GregorianDay(tm); |
| 1196 | } | 1106 | } |
| 1197 | 1107 | ||
| 1198 | /* Auxiliary function to compute scaling factors */ | ||
| 1199 | /* Actually the choice of a timebase running at 1/4 the of the bus | ||
| 1200 | * frequency giving resolution of a few tens of nanoseconds is quite nice. | ||
| 1201 | * It makes this computation very precise (27-28 bits typically) which | ||
| 1202 | * is optimistic considering the stability of most processor clock | ||
| 1203 | * oscillators and the precision with which the timebase frequency | ||
| 1204 | * is measured but does not harm. | ||
| 1205 | */ | ||
| 1206 | unsigned mulhwu_scale_factor(unsigned inscale, unsigned outscale) | ||
| 1207 | { | ||
| 1208 | unsigned mlt=0, tmp, err; | ||
| 1209 | /* No concern for performance, it's done once: use a stupid | ||
| 1210 | * but safe and compact method to find the multiplier. | ||
| 1211 | */ | ||
| 1212 | |||
| 1213 | for (tmp = 1U<<31; tmp != 0; tmp >>= 1) { | ||
| 1214 | if (mulhwu(inscale, mlt|tmp) < outscale) | ||
| 1215 | mlt |= tmp; | ||
| 1216 | } | ||
| 1217 | |||
| 1218 | /* We might still be off by 1 for the best approximation. | ||
| 1219 | * A side effect of this is that if outscale is too large | ||
| 1220 | * the returned value will be zero. | ||
| 1221 | * Many corner cases have been checked and seem to work, | ||
| 1222 | * some might have been forgotten in the test however. | ||
| 1223 | */ | ||
| 1224 | |||
| 1225 | err = inscale * (mlt+1); | ||
| 1226 | if (err <= inscale/2) | ||
| 1227 | mlt++; | ||
| 1228 | return mlt; | ||
| 1229 | } | ||
| 1230 | |||
| 1231 | /* | 1108 | /* |
| 1232 | * Divide a 128-bit dividend by a 32-bit divisor, leaving a 128 bit | 1109 | * Divide a 128-bit dividend by a 32-bit divisor, leaving a 128 bit |
| 1233 | * result. | 1110 | * result. |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 25fc33984c2b..a45a63c3a0c7 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
| @@ -55,9 +55,6 @@ | |||
| 55 | #endif | 55 | #endif |
| 56 | #include <asm/kexec.h> | 56 | #include <asm/kexec.h> |
| 57 | #include <asm/ppc-opcode.h> | 57 | #include <asm/ppc-opcode.h> |
| 58 | #ifdef CONFIG_FSL_BOOKE | ||
| 59 | #include <asm/dbell.h> | ||
| 60 | #endif | ||
| 61 | 58 | ||
| 62 | #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC) | 59 | #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC) |
| 63 | int (*__debugger)(struct pt_regs *regs) __read_mostly; | 60 | int (*__debugger)(struct pt_regs *regs) __read_mostly; |
| @@ -688,7 +685,7 @@ void RunModeException(struct pt_regs *regs) | |||
| 688 | 685 | ||
| 689 | void __kprobes single_step_exception(struct pt_regs *regs) | 686 | void __kprobes single_step_exception(struct pt_regs *regs) |
| 690 | { | 687 | { |
| 691 | regs->msr &= ~(MSR_SE | MSR_BE); /* Turn off 'trace' bits */ | 688 | clear_single_step(regs); |
| 692 | 689 | ||
| 693 | if (notify_die(DIE_SSTEP, "single_step", regs, 5, | 690 | if (notify_die(DIE_SSTEP, "single_step", regs, 5, |
| 694 | 5, SIGTRAP) == NOTIFY_STOP) | 691 | 5, SIGTRAP) == NOTIFY_STOP) |
| @@ -707,10 +704,8 @@ void __kprobes single_step_exception(struct pt_regs *regs) | |||
| 707 | */ | 704 | */ |
| 708 | static void emulate_single_step(struct pt_regs *regs) | 705 | static void emulate_single_step(struct pt_regs *regs) |
| 709 | { | 706 | { |
| 710 | if (single_stepping(regs)) { | 707 | if (single_stepping(regs)) |
| 711 | clear_single_step(regs); | 708 | single_step_exception(regs); |
| 712 | _exception(SIGTRAP, regs, TRAP_TRACE, 0); | ||
| 713 | } | ||
| 714 | } | 709 | } |
| 715 | 710 | ||
| 716 | static inline int __parse_fpscr(unsigned long fpscr) | 711 | static inline int __parse_fpscr(unsigned long fpscr) |
| @@ -1344,24 +1339,6 @@ void vsx_assist_exception(struct pt_regs *regs) | |||
| 1344 | #endif /* CONFIG_VSX */ | 1339 | #endif /* CONFIG_VSX */ |
| 1345 | 1340 | ||
| 1346 | #ifdef CONFIG_FSL_BOOKE | 1341 | #ifdef CONFIG_FSL_BOOKE |
| 1347 | |||
| 1348 | void doorbell_exception(struct pt_regs *regs) | ||
| 1349 | { | ||
| 1350 | #ifdef CONFIG_SMP | ||
| 1351 | int cpu = smp_processor_id(); | ||
| 1352 | int msg; | ||
| 1353 | |||
| 1354 | if (num_online_cpus() < 2) | ||
| 1355 | return; | ||
| 1356 | |||
| 1357 | for (msg = 0; msg < 4; msg++) | ||
| 1358 | if (test_and_clear_bit(msg, &dbell_smp_message[cpu])) | ||
| 1359 | smp_message_recv(msg); | ||
| 1360 | #else | ||
| 1361 | printk(KERN_WARNING "Received doorbell on non-smp system\n"); | ||
| 1362 | #endif | ||
| 1363 | } | ||
| 1364 | |||
| 1365 | void CacheLockingException(struct pt_regs *regs, unsigned long address, | 1342 | void CacheLockingException(struct pt_regs *regs, unsigned long address, |
| 1366 | unsigned long error_code) | 1343 | unsigned long error_code) |
| 1367 | { | 1344 | { |
diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S index ee038d4bf252..4ee09ee2e836 100644 --- a/arch/powerpc/kernel/vdso32/gettimeofday.S +++ b/arch/powerpc/kernel/vdso32/gettimeofday.S | |||
| @@ -19,8 +19,10 @@ | |||
| 19 | /* Offset for the low 32-bit part of a field of long type */ | 19 | /* Offset for the low 32-bit part of a field of long type */ |
| 20 | #ifdef CONFIG_PPC64 | 20 | #ifdef CONFIG_PPC64 |
| 21 | #define LOPART 4 | 21 | #define LOPART 4 |
| 22 | #define TSPEC_TV_SEC TSPC64_TV_SEC+LOPART | ||
| 22 | #else | 23 | #else |
| 23 | #define LOPART 0 | 24 | #define LOPART 0 |
| 25 | #define TSPEC_TV_SEC TSPC32_TV_SEC | ||
| 24 | #endif | 26 | #endif |
| 25 | 27 | ||
| 26 | .text | 28 | .text |
| @@ -41,23 +43,11 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday) | |||
| 41 | mr r9, r3 /* datapage ptr in r9 */ | 43 | mr r9, r3 /* datapage ptr in r9 */ |
| 42 | cmplwi r10,0 /* check if tv is NULL */ | 44 | cmplwi r10,0 /* check if tv is NULL */ |
| 43 | beq 3f | 45 | beq 3f |
| 44 | bl __do_get_xsec@local /* get xsec from tb & kernel */ | 46 | lis r7,1000000@ha /* load up USEC_PER_SEC */ |
| 45 | bne- 2f /* out of line -> do syscall */ | 47 | addi r7,r7,1000000@l /* so we get microseconds in r4 */ |
| 46 | 48 | bl __do_get_tspec@local /* get sec/usec from tb & kernel */ | |
| 47 | /* seconds are xsec >> 20 */ | 49 | stw r3,TVAL32_TV_SEC(r10) |
| 48 | rlwinm r5,r4,12,20,31 | 50 | stw r4,TVAL32_TV_USEC(r10) |
| 49 | rlwimi r5,r3,12,0,19 | ||
| 50 | stw r5,TVAL32_TV_SEC(r10) | ||
| 51 | |||
| 52 | /* get remaining xsec and convert to usec. we scale | ||
| 53 | * up remaining xsec by 12 bits and get the top 32 bits | ||
| 54 | * of the multiplication | ||
| 55 | */ | ||
| 56 | rlwinm r5,r4,12,0,19 | ||
| 57 | lis r6,1000000@h | ||
| 58 | ori r6,r6,1000000@l | ||
| 59 | mulhwu r5,r5,r6 | ||
| 60 | stw r5,TVAL32_TV_USEC(r10) | ||
| 61 | 51 | ||
| 62 | 3: cmplwi r11,0 /* check if tz is NULL */ | 52 | 3: cmplwi r11,0 /* check if tz is NULL */ |
| 63 | beq 1f | 53 | beq 1f |
| @@ -70,14 +60,6 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday) | |||
| 70 | crclr cr0*4+so | 60 | crclr cr0*4+so |
| 71 | li r3,0 | 61 | li r3,0 |
| 72 | blr | 62 | blr |
| 73 | |||
| 74 | 2: | ||
| 75 | mtlr r12 | ||
| 76 | mr r3,r10 | ||
| 77 | mr r4,r11 | ||
| 78 | li r0,__NR_gettimeofday | ||
| 79 | sc | ||
| 80 | blr | ||
| 81 | .cfi_endproc | 63 | .cfi_endproc |
| 82 | V_FUNCTION_END(__kernel_gettimeofday) | 64 | V_FUNCTION_END(__kernel_gettimeofday) |
| 83 | 65 | ||
| @@ -100,7 +82,8 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | |||
| 100 | mr r11,r4 /* r11 saves tp */ | 82 | mr r11,r4 /* r11 saves tp */ |
| 101 | bl __get_datapage@local /* get data page */ | 83 | bl __get_datapage@local /* get data page */ |
| 102 | mr r9,r3 /* datapage ptr in r9 */ | 84 | mr r9,r3 /* datapage ptr in r9 */ |
| 103 | 85 | lis r7,NSEC_PER_SEC@h /* want nanoseconds */ | |
| 86 | ori r7,r7,NSEC_PER_SEC@l | ||
| 104 | 50: bl __do_get_tspec@local /* get sec/nsec from tb & kernel */ | 87 | 50: bl __do_get_tspec@local /* get sec/nsec from tb & kernel */ |
| 105 | bne cr1,80f /* not monotonic -> all done */ | 88 | bne cr1,80f /* not monotonic -> all done */ |
| 106 | 89 | ||
| @@ -198,83 +181,12 @@ V_FUNCTION_END(__kernel_clock_getres) | |||
| 198 | 181 | ||
| 199 | 182 | ||
| 200 | /* | 183 | /* |
| 201 | * This is the core of gettimeofday() & friends, it returns the xsec | 184 | * This is the core of clock_gettime() and gettimeofday(), |
| 202 | * value in r3 & r4 and expects the datapage ptr (non clobbered) | 185 | * it returns the current time in r3 (seconds) and r4. |
| 203 | * in r9. clobbers r0,r4,r5,r6,r7,r8. | 186 | * On entry, r7 gives the resolution of r4, either USEC_PER_SEC |
| 204 | * When returning, r8 contains the counter value that can be reused | 187 | * or NSEC_PER_SEC, giving r4 in microseconds or nanoseconds. |
| 205 | * by the monotonic clock implementation | ||
| 206 | */ | ||
| 207 | __do_get_xsec: | ||
| 208 | .cfi_startproc | ||
| 209 | /* Check for update count & load values. We use the low | ||
| 210 | * order 32 bits of the update count | ||
| 211 | */ | ||
| 212 | 1: lwz r8,(CFG_TB_UPDATE_COUNT+LOPART)(r9) | ||
| 213 | andi. r0,r8,1 /* pending update ? loop */ | ||
| 214 | bne- 1b | ||
| 215 | xor r0,r8,r8 /* create dependency */ | ||
| 216 | add r9,r9,r0 | ||
| 217 | |||
| 218 | /* Load orig stamp (offset to TB) */ | ||
| 219 | lwz r5,CFG_TB_ORIG_STAMP(r9) | ||
| 220 | lwz r6,(CFG_TB_ORIG_STAMP+4)(r9) | ||
| 221 | |||
| 222 | /* Get a stable TB value */ | ||
| 223 | 2: mftbu r3 | ||
| 224 | mftbl r4 | ||
| 225 | mftbu r0 | ||
| 226 | cmpl cr0,r3,r0 | ||
| 227 | bne- 2b | ||
| 228 | |||
| 229 | /* Substract tb orig stamp. If the high part is non-zero, we jump to | ||
| 230 | * the slow path which call the syscall. | ||
| 231 | * If it's ok, then we have our 32 bits tb_ticks value in r7 | ||
| 232 | */ | ||
| 233 | subfc r7,r6,r4 | ||
| 234 | subfe. r0,r5,r3 | ||
| 235 | bne- 3f | ||
| 236 | |||
| 237 | /* Load scale factor & do multiplication */ | ||
| 238 | lwz r5,CFG_TB_TO_XS(r9) /* load values */ | ||
| 239 | lwz r6,(CFG_TB_TO_XS+4)(r9) | ||
| 240 | mulhwu r4,r7,r5 | ||
| 241 | mulhwu r6,r7,r6 | ||
| 242 | mullw r0,r7,r5 | ||
| 243 | addc r6,r6,r0 | ||
| 244 | |||
| 245 | /* At this point, we have the scaled xsec value in r4 + XER:CA | ||
| 246 | * we load & add the stamp since epoch | ||
| 247 | */ | ||
| 248 | lwz r5,CFG_STAMP_XSEC(r9) | ||
| 249 | lwz r6,(CFG_STAMP_XSEC+4)(r9) | ||
| 250 | adde r4,r4,r6 | ||
| 251 | addze r3,r5 | ||
| 252 | |||
| 253 | /* We now have our result in r3,r4. We create a fake dependency | ||
| 254 | * on that result and re-check the counter | ||
| 255 | */ | ||
| 256 | or r6,r4,r3 | ||
| 257 | xor r0,r6,r6 | ||
| 258 | add r9,r9,r0 | ||
| 259 | lwz r0,(CFG_TB_UPDATE_COUNT+LOPART)(r9) | ||
| 260 | cmpl cr0,r8,r0 /* check if updated */ | ||
| 261 | bne- 1b | ||
| 262 | |||
| 263 | /* Warning ! The caller expects CR:EQ to be set to indicate a | ||
| 264 | * successful calculation (so it won't fallback to the syscall | ||
| 265 | * method). We have overriden that CR bit in the counter check, | ||
| 266 | * but fortunately, the loop exit condition _is_ CR:EQ set, so | ||
| 267 | * we can exit safely here. If you change this code, be careful | ||
| 268 | * of that side effect. | ||
| 269 | */ | ||
| 270 | 3: blr | ||
| 271 | .cfi_endproc | ||
| 272 | |||
| 273 | /* | ||
| 274 | * This is the core of clock_gettime(), it returns the current | ||
| 275 | * time in seconds and nanoseconds in r3 and r4. | ||
| 276 | * It expects the datapage ptr in r9 and doesn't clobber it. | 188 | * It expects the datapage ptr in r9 and doesn't clobber it. |
| 277 | * It clobbers r0, r5, r6, r10 and returns NSEC_PER_SEC in r7. | 189 | * It clobbers r0, r5 and r6. |
| 278 | * On return, r8 contains the counter value that can be reused. | 190 | * On return, r8 contains the counter value that can be reused. |
| 279 | * This clobbers cr0 but not any other cr field. | 191 | * This clobbers cr0 but not any other cr field. |
| 280 | */ | 192 | */ |
| @@ -297,70 +209,58 @@ __do_get_tspec: | |||
| 297 | 2: mftbu r3 | 209 | 2: mftbu r3 |
| 298 | mftbl r4 | 210 | mftbl r4 |
| 299 | mftbu r0 | 211 | mftbu r0 |
| 300 | cmpl cr0,r3,r0 | 212 | cmplw cr0,r3,r0 |
| 301 | bne- 2b | 213 | bne- 2b |
| 302 | 214 | ||
| 303 | /* Subtract tb orig stamp and shift left 12 bits. | 215 | /* Subtract tb orig stamp and shift left 12 bits. |
| 304 | */ | 216 | */ |
| 305 | subfc r7,r6,r4 | 217 | subfc r4,r6,r4 |
| 306 | subfe r0,r5,r3 | 218 | subfe r0,r5,r3 |
| 307 | slwi r0,r0,12 | 219 | slwi r0,r0,12 |
| 308 | rlwimi. r0,r7,12,20,31 | 220 | rlwimi. r0,r4,12,20,31 |
| 309 | slwi r7,r7,12 | 221 | slwi r4,r4,12 |
| 310 | 222 | ||
| 311 | /* Load scale factor & do multiplication */ | 223 | /* |
| 224 | * Load scale factor & do multiplication. | ||
| 225 | * We only use the high 32 bits of the tb_to_xs value. | ||
| 226 | * Even with a 1GHz timebase clock, the high 32 bits of | ||
| 227 | * tb_to_xs will be at least 4 million, so the error from | ||
| 228 | * ignoring the low 32 bits will be no more than 0.25ppm. | ||
| 229 | * The error will just make the clock run very very slightly | ||
| 230 | * slow until the next time the kernel updates the VDSO data, | ||
| 231 | * at which point the clock will catch up to the kernel's value, | ||
| 232 | * so there is no long-term error accumulation. | ||
| 233 | */ | ||
| 312 | lwz r5,CFG_TB_TO_XS(r9) /* load values */ | 234 | lwz r5,CFG_TB_TO_XS(r9) /* load values */ |
| 313 | lwz r6,(CFG_TB_TO_XS+4)(r9) | 235 | mulhwu r4,r4,r5 |
| 314 | mulhwu r3,r7,r6 | ||
| 315 | mullw r10,r7,r5 | ||
| 316 | mulhwu r4,r7,r5 | ||
| 317 | addc r10,r3,r10 | ||
| 318 | li r3,0 | 236 | li r3,0 |
| 319 | 237 | ||
| 320 | beq+ 4f /* skip high part computation if 0 */ | 238 | beq+ 4f /* skip high part computation if 0 */ |
| 321 | mulhwu r3,r0,r5 | 239 | mulhwu r3,r0,r5 |
| 322 | mullw r7,r0,r5 | 240 | mullw r5,r0,r5 |
| 323 | mulhwu r5,r0,r6 | ||
| 324 | mullw r6,r0,r6 | ||
| 325 | adde r4,r4,r7 | ||
| 326 | addze r3,r3 | ||
| 327 | addc r4,r4,r5 | 241 | addc r4,r4,r5 |
| 328 | addze r3,r3 | 242 | addze r3,r3 |
| 329 | addc r10,r10,r6 | 243 | 4: |
| 330 | 244 | /* At this point, we have seconds since the xtime stamp | |
| 331 | 4: addze r4,r4 /* add in carry */ | 245 | * as a 32.32 fixed-point number in r3 and r4. |
| 332 | lis r7,NSEC_PER_SEC@h | 246 | * Load & add the xtime stamp. |
| 333 | ori r7,r7,NSEC_PER_SEC@l | ||
| 334 | mulhwu r4,r4,r7 /* convert to nanoseconds */ | ||
| 335 | |||
| 336 | /* At this point, we have seconds & nanoseconds since the xtime | ||
| 337 | * stamp in r3+CA and r4. Load & add the xtime stamp. | ||
| 338 | */ | 247 | */ |
| 339 | #ifdef CONFIG_PPC64 | 248 | lwz r5,STAMP_XTIME+TSPEC_TV_SEC(r9) |
| 340 | lwz r5,STAMP_XTIME+TSPC64_TV_SEC+LOPART(r9) | 249 | lwz r6,STAMP_SEC_FRAC(r9) |
| 341 | lwz r6,STAMP_XTIME+TSPC64_TV_NSEC+LOPART(r9) | 250 | addc r4,r4,r6 |
| 342 | #else | ||
| 343 | lwz r5,STAMP_XTIME+TSPC32_TV_SEC(r9) | ||
| 344 | lwz r6,STAMP_XTIME+TSPC32_TV_NSEC(r9) | ||
| 345 | #endif | ||
| 346 | add r4,r4,r6 | ||
| 347 | adde r3,r3,r5 | 251 | adde r3,r3,r5 |
| 348 | 252 | ||
| 349 | /* We now have our result in r3,r4. We create a fake dependency | 253 | /* We create a fake dependency on the result in r3/r4 |
| 350 | * on that result and re-check the counter | 254 | * and re-check the counter |
| 351 | */ | 255 | */ |
| 352 | or r6,r4,r3 | 256 | or r6,r4,r3 |
| 353 | xor r0,r6,r6 | 257 | xor r0,r6,r6 |
| 354 | add r9,r9,r0 | 258 | add r9,r9,r0 |
| 355 | lwz r0,(CFG_TB_UPDATE_COUNT+LOPART)(r9) | 259 | lwz r0,(CFG_TB_UPDATE_COUNT+LOPART)(r9) |
| 356 | cmpl cr0,r8,r0 /* check if updated */ | 260 | cmplw cr0,r8,r0 /* check if updated */ |
| 357 | bne- 1b | 261 | bne- 1b |
| 358 | 262 | ||
| 359 | /* check for nanosecond overflow and adjust if necessary */ | 263 | mulhwu r4,r4,r7 /* convert to micro or nanoseconds */ |
| 360 | cmpw r4,r7 | ||
| 361 | bltlr /* all done if no overflow */ | ||
| 362 | subf r4,r7,r4 /* adjust if overflow */ | ||
| 363 | addi r3,r3,1 | ||
| 364 | 264 | ||
| 365 | blr | 265 | blr |
| 366 | .cfi_endproc | 266 | .cfi_endproc |
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S index 262cd5857a56..e97a9a0dc4ac 100644 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | |||
| @@ -33,18 +33,11 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday) | |||
| 33 | bl V_LOCAL_FUNC(__get_datapage) /* get data page */ | 33 | bl V_LOCAL_FUNC(__get_datapage) /* get data page */ |
| 34 | cmpldi r11,0 /* check if tv is NULL */ | 34 | cmpldi r11,0 /* check if tv is NULL */ |
| 35 | beq 2f | 35 | beq 2f |
| 36 | bl V_LOCAL_FUNC(__do_get_xsec) /* get xsec from tb & kernel */ | 36 | lis r7,1000000@ha /* load up USEC_PER_SEC */ |
| 37 | lis r7,15 /* r7 = 1000000 = USEC_PER_SEC */ | 37 | addi r7,r7,1000000@l |
| 38 | ori r7,r7,16960 | 38 | bl V_LOCAL_FUNC(__do_get_tspec) /* get sec/us from tb & kernel */ |
| 39 | rldicl r5,r4,44,20 /* r5 = sec = xsec / XSEC_PER_SEC */ | 39 | std r4,TVAL64_TV_SEC(r11) /* store sec in tv */ |
| 40 | rldicr r6,r5,20,43 /* r6 = sec * XSEC_PER_SEC */ | 40 | std r5,TVAL64_TV_USEC(r11) /* store usec in tv */ |
| 41 | std r5,TVAL64_TV_SEC(r11) /* store sec in tv */ | ||
| 42 | subf r0,r6,r4 /* r0 = xsec = (xsec - r6) */ | ||
| 43 | mulld r0,r0,r7 /* usec = (xsec * USEC_PER_SEC) / | ||
| 44 | * XSEC_PER_SEC | ||
| 45 | */ | ||
| 46 | rldicl r0,r0,44,20 | ||
| 47 | std r0,TVAL64_TV_USEC(r11) /* store usec in tv */ | ||
| 48 | 2: cmpldi r10,0 /* check if tz is NULL */ | 41 | 2: cmpldi r10,0 /* check if tz is NULL */ |
| 49 | beq 1f | 42 | beq 1f |
| 50 | lwz r4,CFG_TZ_MINUTEWEST(r3)/* fill tz */ | 43 | lwz r4,CFG_TZ_MINUTEWEST(r3)/* fill tz */ |
| @@ -77,6 +70,8 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | |||
| 77 | .cfi_register lr,r12 | 70 | .cfi_register lr,r12 |
| 78 | mr r11,r4 /* r11 saves tp */ | 71 | mr r11,r4 /* r11 saves tp */ |
| 79 | bl V_LOCAL_FUNC(__get_datapage) /* get data page */ | 72 | bl V_LOCAL_FUNC(__get_datapage) /* get data page */ |
| 73 | lis r7,NSEC_PER_SEC@h /* want nanoseconds */ | ||
| 74 | ori r7,r7,NSEC_PER_SEC@l | ||
| 80 | 50: bl V_LOCAL_FUNC(__do_get_tspec) /* get time from tb & kernel */ | 75 | 50: bl V_LOCAL_FUNC(__do_get_tspec) /* get time from tb & kernel */ |
| 81 | bne cr1,80f /* if not monotonic, all done */ | 76 | bne cr1,80f /* if not monotonic, all done */ |
| 82 | 77 | ||
| @@ -171,49 +166,12 @@ V_FUNCTION_END(__kernel_clock_getres) | |||
| 171 | 166 | ||
| 172 | 167 | ||
| 173 | /* | 168 | /* |
| 174 | * This is the core of gettimeofday(), it returns the xsec | 169 | * This is the core of clock_gettime() and gettimeofday(), |
| 175 | * value in r4 and expects the datapage ptr (non clobbered) | 170 | * it returns the current time in r4 (seconds) and r5. |
| 176 | * in r3. clobbers r0,r4,r5,r6,r7,r8 | 171 | * On entry, r7 gives the resolution of r5, either USEC_PER_SEC |
| 177 | * When returning, r8 contains the counter value that can be reused | 172 | * or NSEC_PER_SEC, giving r5 in microseconds or nanoseconds. |
| 178 | */ | ||
| 179 | V_FUNCTION_BEGIN(__do_get_xsec) | ||
| 180 | .cfi_startproc | ||
| 181 | /* check for update count & load values */ | ||
| 182 | 1: ld r8,CFG_TB_UPDATE_COUNT(r3) | ||
| 183 | andi. r0,r8,1 /* pending update ? loop */ | ||
| 184 | bne- 1b | ||
| 185 | xor r0,r8,r8 /* create dependency */ | ||
| 186 | add r3,r3,r0 | ||
| 187 | |||
| 188 | /* Get TB & offset it. We use the MFTB macro which will generate | ||
| 189 | * workaround code for Cell. | ||
| 190 | */ | ||
| 191 | MFTB(r7) | ||
| 192 | ld r9,CFG_TB_ORIG_STAMP(r3) | ||
| 193 | subf r7,r9,r7 | ||
| 194 | |||
| 195 | /* Scale result */ | ||
| 196 | ld r5,CFG_TB_TO_XS(r3) | ||
| 197 | mulhdu r7,r7,r5 | ||
| 198 | |||
| 199 | /* Add stamp since epoch */ | ||
| 200 | ld r6,CFG_STAMP_XSEC(r3) | ||
| 201 | add r4,r6,r7 | ||
| 202 | |||
| 203 | xor r0,r4,r4 | ||
| 204 | add r3,r3,r0 | ||
| 205 | ld r0,CFG_TB_UPDATE_COUNT(r3) | ||
| 206 | cmpld cr0,r0,r8 /* check if updated */ | ||
| 207 | bne- 1b | ||
| 208 | blr | ||
| 209 | .cfi_endproc | ||
| 210 | V_FUNCTION_END(__do_get_xsec) | ||
| 211 | |||
| 212 | /* | ||
| 213 | * This is the core of clock_gettime(), it returns the current | ||
| 214 | * time in seconds and nanoseconds in r4 and r5. | ||
| 215 | * It expects the datapage ptr in r3 and doesn't clobber it. | 173 | * It expects the datapage ptr in r3 and doesn't clobber it. |
| 216 | * It clobbers r0 and r6 and returns NSEC_PER_SEC in r7. | 174 | * It clobbers r0, r6 and r9. |
| 217 | * On return, r8 contains the counter value that can be reused. | 175 | * On return, r8 contains the counter value that can be reused. |
| 218 | * This clobbers cr0 but not any other cr field. | 176 | * This clobbers cr0 but not any other cr field. |
| 219 | */ | 177 | */ |
| @@ -229,18 +187,18 @@ V_FUNCTION_BEGIN(__do_get_tspec) | |||
| 229 | /* Get TB & offset it. We use the MFTB macro which will generate | 187 | /* Get TB & offset it. We use the MFTB macro which will generate |
| 230 | * workaround code for Cell. | 188 | * workaround code for Cell. |
| 231 | */ | 189 | */ |
| 232 | MFTB(r7) | 190 | MFTB(r6) |
| 233 | ld r9,CFG_TB_ORIG_STAMP(r3) | 191 | ld r9,CFG_TB_ORIG_STAMP(r3) |
| 234 | subf r7,r9,r7 | 192 | subf r6,r9,r6 |
| 235 | 193 | ||
| 236 | /* Scale result */ | 194 | /* Scale result */ |
| 237 | ld r5,CFG_TB_TO_XS(r3) | 195 | ld r5,CFG_TB_TO_XS(r3) |
| 238 | sldi r7,r7,12 /* compute time since stamp_xtime */ | 196 | sldi r6,r6,12 /* compute time since stamp_xtime */ |
| 239 | mulhdu r6,r7,r5 /* in units of 2^-32 seconds */ | 197 | mulhdu r6,r6,r5 /* in units of 2^-32 seconds */ |
| 240 | 198 | ||
| 241 | /* Add stamp since epoch */ | 199 | /* Add stamp since epoch */ |
| 242 | ld r4,STAMP_XTIME+TSPC64_TV_SEC(r3) | 200 | ld r4,STAMP_XTIME+TSPC64_TV_SEC(r3) |
| 243 | ld r5,STAMP_XTIME+TSPC64_TV_NSEC(r3) | 201 | lwz r5,STAMP_SEC_FRAC(r3) |
| 244 | or r0,r4,r5 | 202 | or r0,r4,r5 |
| 245 | or r0,r0,r6 | 203 | or r0,r0,r6 |
| 246 | xor r0,r0,r0 | 204 | xor r0,r0,r0 |
| @@ -250,17 +208,11 @@ V_FUNCTION_BEGIN(__do_get_tspec) | |||
| 250 | bne- 1b /* reload if so */ | 208 | bne- 1b /* reload if so */ |
| 251 | 209 | ||
| 252 | /* convert to seconds & nanoseconds and add to stamp */ | 210 | /* convert to seconds & nanoseconds and add to stamp */ |
| 253 | lis r7,NSEC_PER_SEC@h | 211 | add r6,r6,r5 /* add on fractional seconds of xtime */ |
| 254 | ori r7,r7,NSEC_PER_SEC@l | 212 | mulhwu r5,r6,r7 /* compute micro or nanoseconds and */ |
| 255 | mulhwu r0,r6,r7 /* compute nanoseconds and */ | ||
| 256 | srdi r6,r6,32 /* seconds since stamp_xtime */ | 213 | srdi r6,r6,32 /* seconds since stamp_xtime */ |
| 257 | clrldi r0,r0,32 | 214 | clrldi r5,r5,32 |
| 258 | add r5,r5,r0 /* add nanoseconds together */ | ||
| 259 | cmpd r5,r7 /* overflow? */ | ||
| 260 | add r4,r4,r6 | 215 | add r4,r4,r6 |
| 261 | bltlr /* all done if no overflow */ | ||
| 262 | subf r5,r7,r5 /* if overflow, adjust */ | ||
| 263 | addi r4,r4,1 | ||
| 264 | blr | 216 | blr |
| 265 | .cfi_endproc | 217 | .cfi_endproc |
| 266 | V_FUNCTION_END(__do_get_tspec) | 218 | V_FUNCTION_END(__do_get_tspec) |
diff --git a/arch/powerpc/kvm/timing.c b/arch/powerpc/kvm/timing.c index 70378551c0cc..46fa04f12a9b 100644 --- a/arch/powerpc/kvm/timing.c +++ b/arch/powerpc/kvm/timing.c | |||
| @@ -182,7 +182,7 @@ static ssize_t kvmppc_exit_timing_write(struct file *file, | |||
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | if (c == 'c') { | 184 | if (c == 'c') { |
| 185 | struct seq_file *seqf = (struct seq_file *)file->private_data; | 185 | struct seq_file *seqf = file->private_data; |
| 186 | struct kvm_vcpu *vcpu = seqf->private; | 186 | struct kvm_vcpu *vcpu = seqf->private; |
| 187 | /* Write does not affect our buffers previously generated with | 187 | /* Write does not affect our buffers previously generated with |
| 188 | * show. seq_file is locked here to prevent races of init with | 188 | * show. seq_file is locked here to prevent races of init with |
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 111da1c03a11..5bb89c828070 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
| @@ -18,8 +18,9 @@ obj-$(CONFIG_HAS_IOMEM) += devres.o | |||
| 18 | 18 | ||
| 19 | obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ | 19 | obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ |
| 20 | memcpy_64.o usercopy_64.o mem_64.o string.o | 20 | memcpy_64.o usercopy_64.o mem_64.o string.o |
| 21 | obj-$(CONFIG_XMON) += sstep.o | 21 | obj-$(CONFIG_XMON) += sstep.o ldstfp.o |
| 22 | obj-$(CONFIG_KPROBES) += sstep.o | 22 | obj-$(CONFIG_KPROBES) += sstep.o ldstfp.o |
| 23 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += sstep.o ldstfp.o | ||
| 23 | 24 | ||
| 24 | ifeq ($(CONFIG_PPC64),y) | 25 | ifeq ($(CONFIG_PPC64),y) |
| 25 | obj-$(CONFIG_SMP) += locks.o | 26 | obj-$(CONFIG_SMP) += locks.o |
diff --git a/arch/powerpc/lib/ldstfp.S b/arch/powerpc/lib/ldstfp.S new file mode 100644 index 000000000000..f6448636baf5 --- /dev/null +++ b/arch/powerpc/lib/ldstfp.S | |||
| @@ -0,0 +1,375 @@ | |||
| 1 | /* | ||
| 2 | * Floating-point, VMX/Altivec and VSX loads and stores | ||
| 3 | * for use in instruction emulation. | ||
| 4 | * | ||
| 5 | * Copyright 2010 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * as published by the Free Software Foundation; either version | ||
| 10 | * 2 of the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <asm/processor.h> | ||
| 14 | #include <asm/ppc_asm.h> | ||
| 15 | #include <asm/ppc-opcode.h> | ||
| 16 | #include <asm/reg.h> | ||
| 17 | #include <asm/asm-offsets.h> | ||
| 18 | #include <linux/errno.h> | ||
| 19 | |||
| 20 | #define STKFRM (PPC_MIN_STKFRM + 16) | ||
| 21 | |||
| 22 | .macro extab instr,handler | ||
| 23 | .section __ex_table,"a" | ||
| 24 | PPC_LONG \instr,\handler | ||
| 25 | .previous | ||
| 26 | .endm | ||
| 27 | |||
| 28 | .macro inst32 op | ||
| 29 | reg = 0 | ||
| 30 | .rept 32 | ||
| 31 | 20: \op reg,0,r4 | ||
| 32 | b 3f | ||
| 33 | extab 20b,99f | ||
| 34 | reg = reg + 1 | ||
| 35 | .endr | ||
| 36 | .endm | ||
| 37 | |||
| 38 | /* Get the contents of frN into fr0; N is in r3. */ | ||
| 39 | _GLOBAL(get_fpr) | ||
| 40 | mflr r0 | ||
| 41 | rlwinm r3,r3,3,0xf8 | ||
| 42 | bcl 20,31,1f | ||
| 43 | blr /* fr0 is already in fr0 */ | ||
| 44 | nop | ||
| 45 | reg = 1 | ||
| 46 | .rept 31 | ||
| 47 | fmr fr0,reg | ||
| 48 | blr | ||
| 49 | reg = reg + 1 | ||
| 50 | .endr | ||
| 51 | 1: mflr r5 | ||
| 52 | add r5,r3,r5 | ||
| 53 | mtctr r5 | ||
| 54 | mtlr r0 | ||
| 55 | bctr | ||
| 56 | |||
| 57 | /* Put the contents of fr0 into frN; N is in r3. */ | ||
| 58 | _GLOBAL(put_fpr) | ||
| 59 | mflr r0 | ||
| 60 | rlwinm r3,r3,3,0xf8 | ||
| 61 | bcl 20,31,1f | ||
| 62 | blr /* fr0 is already in fr0 */ | ||
| 63 | nop | ||
| 64 | reg = 1 | ||
| 65 | .rept 31 | ||
| 66 | fmr reg,fr0 | ||
| 67 | blr | ||
| 68 | reg = reg + 1 | ||
| 69 | .endr | ||
| 70 | 1: mflr r5 | ||
| 71 | add r5,r3,r5 | ||
| 72 | mtctr r5 | ||
| 73 | mtlr r0 | ||
| 74 | bctr | ||
| 75 | |||
| 76 | /* Load FP reg N from float at *p. N is in r3, p in r4. */ | ||
| 77 | _GLOBAL(do_lfs) | ||
| 78 | PPC_STLU r1,-STKFRM(r1) | ||
| 79 | mflr r0 | ||
| 80 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 81 | mfmsr r6 | ||
| 82 | ori r7,r6,MSR_FP | ||
| 83 | cmpwi cr7,r3,0 | ||
| 84 | mtmsrd r7 | ||
| 85 | isync | ||
| 86 | beq cr7,1f | ||
| 87 | stfd fr0,STKFRM-16(r1) | ||
| 88 | 1: li r9,-EFAULT | ||
| 89 | 2: lfs fr0,0(r4) | ||
| 90 | li r9,0 | ||
| 91 | 3: bl put_fpr | ||
| 92 | beq cr7,4f | ||
| 93 | lfd fr0,STKFRM-16(r1) | ||
| 94 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 95 | mtlr r0 | ||
| 96 | mtmsrd r6 | ||
| 97 | isync | ||
| 98 | mr r3,r9 | ||
| 99 | addi r1,r1,STKFRM | ||
| 100 | blr | ||
| 101 | extab 2b,3b | ||
| 102 | |||
| 103 | /* Load FP reg N from double at *p. N is in r3, p in r4. */ | ||
| 104 | _GLOBAL(do_lfd) | ||
| 105 | PPC_STLU r1,-STKFRM(r1) | ||
| 106 | mflr r0 | ||
| 107 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 108 | mfmsr r6 | ||
| 109 | ori r7,r6,MSR_FP | ||
| 110 | cmpwi cr7,r3,0 | ||
| 111 | mtmsrd r7 | ||
| 112 | isync | ||
| 113 | beq cr7,1f | ||
| 114 | stfd fr0,STKFRM-16(r1) | ||
| 115 | 1: li r9,-EFAULT | ||
| 116 | 2: lfd fr0,0(r4) | ||
| 117 | li r9,0 | ||
| 118 | 3: beq cr7,4f | ||
| 119 | bl put_fpr | ||
| 120 | lfd fr0,STKFRM-16(r1) | ||
| 121 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 122 | mtlr r0 | ||
| 123 | mtmsrd r6 | ||
| 124 | isync | ||
| 125 | mr r3,r9 | ||
| 126 | addi r1,r1,STKFRM | ||
| 127 | blr | ||
| 128 | extab 2b,3b | ||
| 129 | |||
| 130 | /* Store FP reg N to float at *p. N is in r3, p in r4. */ | ||
| 131 | _GLOBAL(do_stfs) | ||
| 132 | PPC_STLU r1,-STKFRM(r1) | ||
| 133 | mflr r0 | ||
| 134 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 135 | mfmsr r6 | ||
| 136 | ori r7,r6,MSR_FP | ||
| 137 | cmpwi cr7,r3,0 | ||
| 138 | mtmsrd r7 | ||
| 139 | isync | ||
| 140 | beq cr7,1f | ||
| 141 | stfd fr0,STKFRM-16(r1) | ||
| 142 | bl get_fpr | ||
| 143 | 1: li r9,-EFAULT | ||
| 144 | 2: stfs fr0,0(r4) | ||
| 145 | li r9,0 | ||
| 146 | 3: beq cr7,4f | ||
| 147 | lfd fr0,STKFRM-16(r1) | ||
| 148 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 149 | mtlr r0 | ||
| 150 | mtmsrd r6 | ||
| 151 | isync | ||
| 152 | mr r3,r9 | ||
| 153 | addi r1,r1,STKFRM | ||
| 154 | blr | ||
| 155 | extab 2b,3b | ||
| 156 | |||
| 157 | /* Store FP reg N to double at *p. N is in r3, p in r4. */ | ||
| 158 | _GLOBAL(do_stfd) | ||
| 159 | PPC_STLU r1,-STKFRM(r1) | ||
| 160 | mflr r0 | ||
| 161 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 162 | mfmsr r6 | ||
| 163 | ori r7,r6,MSR_FP | ||
| 164 | cmpwi cr7,r3,0 | ||
| 165 | mtmsrd r7 | ||
| 166 | isync | ||
| 167 | beq cr7,1f | ||
| 168 | stfd fr0,STKFRM-16(r1) | ||
| 169 | bl get_fpr | ||
| 170 | 1: li r9,-EFAULT | ||
| 171 | 2: stfd fr0,0(r4) | ||
| 172 | li r9,0 | ||
| 173 | 3: beq cr7,4f | ||
| 174 | lfd fr0,STKFRM-16(r1) | ||
| 175 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 176 | mtlr r0 | ||
| 177 | mtmsrd r6 | ||
| 178 | isync | ||
| 179 | mr r3,r9 | ||
| 180 | addi r1,r1,STKFRM | ||
| 181 | blr | ||
| 182 | extab 2b,3b | ||
| 183 | |||
| 184 | #ifdef CONFIG_ALTIVEC | ||
| 185 | /* Get the contents of vrN into vr0; N is in r3. */ | ||
| 186 | _GLOBAL(get_vr) | ||
| 187 | mflr r0 | ||
| 188 | rlwinm r3,r3,3,0xf8 | ||
| 189 | bcl 20,31,1f | ||
| 190 | blr /* vr0 is already in vr0 */ | ||
| 191 | nop | ||
| 192 | reg = 1 | ||
| 193 | .rept 31 | ||
| 194 | vor vr0,reg,reg /* assembler doesn't know vmr? */ | ||
| 195 | blr | ||
| 196 | reg = reg + 1 | ||
| 197 | .endr | ||
| 198 | 1: mflr r5 | ||
| 199 | add r5,r3,r5 | ||
| 200 | mtctr r5 | ||
| 201 | mtlr r0 | ||
| 202 | bctr | ||
| 203 | |||
| 204 | /* Put the contents of vr0 into vrN; N is in r3. */ | ||
| 205 | _GLOBAL(put_vr) | ||
| 206 | mflr r0 | ||
| 207 | rlwinm r3,r3,3,0xf8 | ||
| 208 | bcl 20,31,1f | ||
| 209 | blr /* vr0 is already in vr0 */ | ||
| 210 | nop | ||
| 211 | reg = 1 | ||
| 212 | .rept 31 | ||
| 213 | vor reg,vr0,vr0 | ||
| 214 | blr | ||
| 215 | reg = reg + 1 | ||
| 216 | .endr | ||
| 217 | 1: mflr r5 | ||
| 218 | add r5,r3,r5 | ||
| 219 | mtctr r5 | ||
| 220 | mtlr r0 | ||
| 221 | bctr | ||
| 222 | |||
| 223 | /* Load vector reg N from *p. N is in r3, p in r4. */ | ||
| 224 | _GLOBAL(do_lvx) | ||
| 225 | PPC_STLU r1,-STKFRM(r1) | ||
| 226 | mflr r0 | ||
| 227 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 228 | mfmsr r6 | ||
| 229 | oris r7,r6,MSR_VEC@h | ||
| 230 | cmpwi cr7,r3,0 | ||
| 231 | li r8,STKFRM-16 | ||
| 232 | mtmsrd r7 | ||
| 233 | isync | ||
| 234 | beq cr7,1f | ||
| 235 | stvx vr0,r1,r8 | ||
| 236 | 1: li r9,-EFAULT | ||
| 237 | 2: lvx vr0,0,r4 | ||
| 238 | li r9,0 | ||
| 239 | 3: beq cr7,4f | ||
| 240 | bl put_vr | ||
| 241 | lvx vr0,r1,r8 | ||
| 242 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 243 | mtlr r0 | ||
| 244 | mtmsrd r6 | ||
| 245 | isync | ||
| 246 | mr r3,r9 | ||
| 247 | addi r1,r1,STKFRM | ||
| 248 | blr | ||
| 249 | extab 2b,3b | ||
| 250 | |||
| 251 | /* Store vector reg N to *p. N is in r3, p in r4. */ | ||
| 252 | _GLOBAL(do_stvx) | ||
| 253 | PPC_STLU r1,-STKFRM(r1) | ||
| 254 | mflr r0 | ||
| 255 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 256 | mfmsr r6 | ||
| 257 | oris r7,r6,MSR_VEC@h | ||
| 258 | cmpwi cr7,r3,0 | ||
| 259 | li r8,STKFRM-16 | ||
| 260 | mtmsrd r7 | ||
| 261 | isync | ||
| 262 | beq cr7,1f | ||
| 263 | stvx vr0,r1,r8 | ||
| 264 | bl get_vr | ||
| 265 | 1: li r9,-EFAULT | ||
| 266 | 2: stvx vr0,0,r4 | ||
| 267 | li r9,0 | ||
| 268 | 3: beq cr7,4f | ||
| 269 | lvx vr0,r1,r8 | ||
| 270 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 271 | mtlr r0 | ||
| 272 | mtmsrd r6 | ||
| 273 | isync | ||
| 274 | mr r3,r9 | ||
| 275 | addi r1,r1,STKFRM | ||
| 276 | blr | ||
| 277 | extab 2b,3b | ||
| 278 | #endif /* CONFIG_ALTIVEC */ | ||
| 279 | |||
| 280 | #ifdef CONFIG_VSX | ||
| 281 | /* Get the contents of vsrN into vsr0; N is in r3. */ | ||
| 282 | _GLOBAL(get_vsr) | ||
| 283 | mflr r0 | ||
| 284 | rlwinm r3,r3,3,0x1f8 | ||
| 285 | bcl 20,31,1f | ||
| 286 | blr /* vsr0 is already in vsr0 */ | ||
| 287 | nop | ||
| 288 | reg = 1 | ||
| 289 | .rept 63 | ||
| 290 | XXLOR(0,reg,reg) | ||
| 291 | blr | ||
| 292 | reg = reg + 1 | ||
| 293 | .endr | ||
| 294 | 1: mflr r5 | ||
| 295 | add r5,r3,r5 | ||
| 296 | mtctr r5 | ||
| 297 | mtlr r0 | ||
| 298 | bctr | ||
| 299 | |||
| 300 | /* Put the contents of vsr0 into vsrN; N is in r3. */ | ||
| 301 | _GLOBAL(put_vsr) | ||
| 302 | mflr r0 | ||
| 303 | rlwinm r3,r3,3,0x1f8 | ||
| 304 | bcl 20,31,1f | ||
| 305 | blr /* vr0 is already in vr0 */ | ||
| 306 | nop | ||
| 307 | reg = 1 | ||
| 308 | .rept 63 | ||
| 309 | XXLOR(reg,0,0) | ||
| 310 | blr | ||
| 311 | reg = reg + 1 | ||
| 312 | .endr | ||
| 313 | 1: mflr r5 | ||
| 314 | add r5,r3,r5 | ||
| 315 | mtctr r5 | ||
| 316 | mtlr r0 | ||
| 317 | bctr | ||
| 318 | |||
| 319 | /* Load VSX reg N from vector doubleword *p. N is in r3, p in r4. */ | ||
| 320 | _GLOBAL(do_lxvd2x) | ||
| 321 | PPC_STLU r1,-STKFRM(r1) | ||
| 322 | mflr r0 | ||
| 323 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 324 | mfmsr r6 | ||
| 325 | oris r7,r6,MSR_VSX@h | ||
| 326 | cmpwi cr7,r3,0 | ||
| 327 | li r8,STKFRM-16 | ||
| 328 | mtmsrd r7 | ||
| 329 | isync | ||
| 330 | beq cr7,1f | ||
| 331 | STXVD2X(0,r1,r8) | ||
| 332 | 1: li r9,-EFAULT | ||
| 333 | 2: LXVD2X(0,0,r4) | ||
| 334 | li r9,0 | ||
| 335 | 3: beq cr7,4f | ||
| 336 | bl put_vsr | ||
| 337 | LXVD2X(0,r1,r8) | ||
| 338 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 339 | mtlr r0 | ||
| 340 | mtmsrd r6 | ||
| 341 | isync | ||
| 342 | mr r3,r9 | ||
| 343 | addi r1,r1,STKFRM | ||
| 344 | blr | ||
| 345 | extab 2b,3b | ||
| 346 | |||
| 347 | /* Store VSX reg N to vector doubleword *p. N is in r3, p in r4. */ | ||
| 348 | _GLOBAL(do_stxvd2x) | ||
| 349 | PPC_STLU r1,-STKFRM(r1) | ||
| 350 | mflr r0 | ||
| 351 | PPC_STL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 352 | mfmsr r6 | ||
| 353 | oris r7,r6,MSR_VSX@h | ||
| 354 | cmpwi cr7,r3,0 | ||
| 355 | li r8,STKFRM-16 | ||
| 356 | mtmsrd r7 | ||
| 357 | isync | ||
| 358 | beq cr7,1f | ||
| 359 | STXVD2X(0,r1,r8) | ||
| 360 | bl get_vsr | ||
| 361 | 1: li r9,-EFAULT | ||
| 362 | 2: STXVD2X(0,0,r4) | ||
| 363 | li r9,0 | ||
| 364 | 3: beq cr7,4f | ||
| 365 | LXVD2X(0,r1,r8) | ||
| 366 | 4: PPC_LL r0,STKFRM+PPC_LR_STKOFF(r1) | ||
| 367 | mtlr r0 | ||
| 368 | mtmsrd r6 | ||
| 369 | isync | ||
| 370 | mr r3,r9 | ||
| 371 | addi r1,r1,STKFRM | ||
| 372 | blr | ||
| 373 | extab 2b,3b | ||
| 374 | |||
| 375 | #endif /* CONFIG_VSX */ | ||
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index 13b7d54f185b..e0a9858d537e 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #include <linux/ptrace.h> | 13 | #include <linux/ptrace.h> |
| 14 | #include <asm/sstep.h> | 14 | #include <asm/sstep.h> |
| 15 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
| 16 | #include <asm/uaccess.h> | ||
| 17 | #include <asm/cputable.h> | ||
| 16 | 18 | ||
| 17 | extern char system_call_common[]; | 19 | extern char system_call_common[]; |
| 18 | 20 | ||
| @@ -23,6 +25,23 @@ extern char system_call_common[]; | |||
| 23 | #define MSR_MASK 0x87c0ffff | 25 | #define MSR_MASK 0x87c0ffff |
| 24 | #endif | 26 | #endif |
| 25 | 27 | ||
| 28 | /* Bits in XER */ | ||
| 29 | #define XER_SO 0x80000000U | ||
| 30 | #define XER_OV 0x40000000U | ||
| 31 | #define XER_CA 0x20000000U | ||
| 32 | |||
| 33 | /* | ||
| 34 | * Functions in ldstfp.S | ||
| 35 | */ | ||
| 36 | extern int do_lfs(int rn, unsigned long ea); | ||
| 37 | extern int do_lfd(int rn, unsigned long ea); | ||
| 38 | extern int do_stfs(int rn, unsigned long ea); | ||
| 39 | extern int do_stfd(int rn, unsigned long ea); | ||
| 40 | extern int do_lvx(int rn, unsigned long ea); | ||
| 41 | extern int do_stvx(int rn, unsigned long ea); | ||
| 42 | extern int do_lxvd2x(int rn, unsigned long ea); | ||
| 43 | extern int do_stxvd2x(int rn, unsigned long ea); | ||
| 44 | |||
| 26 | /* | 45 | /* |
| 27 | * Determine whether a conditional branch instruction would branch. | 46 | * Determine whether a conditional branch instruction would branch. |
| 28 | */ | 47 | */ |
| @@ -46,16 +65,499 @@ static int __kprobes branch_taken(unsigned int instr, struct pt_regs *regs) | |||
| 46 | return 1; | 65 | return 1; |
| 47 | } | 66 | } |
| 48 | 67 | ||
| 68 | |||
| 69 | static long __kprobes address_ok(struct pt_regs *regs, unsigned long ea, int nb) | ||
| 70 | { | ||
| 71 | if (!user_mode(regs)) | ||
| 72 | return 1; | ||
| 73 | return __access_ok(ea, nb, USER_DS); | ||
| 74 | } | ||
| 75 | |||
| 76 | /* | ||
| 77 | * Calculate effective address for a D-form instruction | ||
| 78 | */ | ||
| 79 | static unsigned long __kprobes dform_ea(unsigned int instr, struct pt_regs *regs) | ||
| 80 | { | ||
| 81 | int ra; | ||
| 82 | unsigned long ea; | ||
| 83 | |||
| 84 | ra = (instr >> 16) & 0x1f; | ||
| 85 | ea = (signed short) instr; /* sign-extend */ | ||
| 86 | if (ra) { | ||
| 87 | ea += regs->gpr[ra]; | ||
| 88 | if (instr & 0x04000000) /* update forms */ | ||
| 89 | regs->gpr[ra] = ea; | ||
| 90 | } | ||
| 91 | #ifdef __powerpc64__ | ||
| 92 | if (!(regs->msr & MSR_SF)) | ||
| 93 | ea &= 0xffffffffUL; | ||
| 94 | #endif | ||
| 95 | return ea; | ||
| 96 | } | ||
| 97 | |||
| 98 | #ifdef __powerpc64__ | ||
| 99 | /* | ||
| 100 | * Calculate effective address for a DS-form instruction | ||
| 101 | */ | ||
| 102 | static unsigned long __kprobes dsform_ea(unsigned int instr, struct pt_regs *regs) | ||
| 103 | { | ||
| 104 | int ra; | ||
| 105 | unsigned long ea; | ||
| 106 | |||
| 107 | ra = (instr >> 16) & 0x1f; | ||
| 108 | ea = (signed short) (instr & ~3); /* sign-extend */ | ||
| 109 | if (ra) { | ||
| 110 | ea += regs->gpr[ra]; | ||
| 111 | if ((instr & 3) == 1) /* update forms */ | ||
| 112 | regs->gpr[ra] = ea; | ||
| 113 | } | ||
| 114 | if (!(regs->msr & MSR_SF)) | ||
| 115 | ea &= 0xffffffffUL; | ||
| 116 | return ea; | ||
| 117 | } | ||
| 118 | #endif /* __powerpc64 */ | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Calculate effective address for an X-form instruction | ||
| 122 | */ | ||
| 123 | static unsigned long __kprobes xform_ea(unsigned int instr, struct pt_regs *regs, | ||
| 124 | int do_update) | ||
| 125 | { | ||
| 126 | int ra, rb; | ||
| 127 | unsigned long ea; | ||
| 128 | |||
| 129 | ra = (instr >> 16) & 0x1f; | ||
| 130 | rb = (instr >> 11) & 0x1f; | ||
| 131 | ea = regs->gpr[rb]; | ||
| 132 | if (ra) { | ||
| 133 | ea += regs->gpr[ra]; | ||
| 134 | if (do_update) /* update forms */ | ||
| 135 | regs->gpr[ra] = ea; | ||
| 136 | } | ||
| 137 | #ifdef __powerpc64__ | ||
| 138 | if (!(regs->msr & MSR_SF)) | ||
| 139 | ea &= 0xffffffffUL; | ||
| 140 | #endif | ||
| 141 | return ea; | ||
| 142 | } | ||
| 143 | |||
| 144 | /* | ||
| 145 | * Return the largest power of 2, not greater than sizeof(unsigned long), | ||
| 146 | * such that x is a multiple of it. | ||
| 147 | */ | ||
| 148 | static inline unsigned long max_align(unsigned long x) | ||
| 149 | { | ||
| 150 | x |= sizeof(unsigned long); | ||
| 151 | return x & -x; /* isolates rightmost bit */ | ||
| 152 | } | ||
| 153 | |||
| 154 | |||
| 155 | static inline unsigned long byterev_2(unsigned long x) | ||
| 156 | { | ||
| 157 | return ((x >> 8) & 0xff) | ((x & 0xff) << 8); | ||
| 158 | } | ||
| 159 | |||
| 160 | static inline unsigned long byterev_4(unsigned long x) | ||
| 161 | { | ||
| 162 | return ((x >> 24) & 0xff) | ((x >> 8) & 0xff00) | | ||
| 163 | ((x & 0xff00) << 8) | ((x & 0xff) << 24); | ||
| 164 | } | ||
| 165 | |||
| 166 | #ifdef __powerpc64__ | ||
| 167 | static inline unsigned long byterev_8(unsigned long x) | ||
| 168 | { | ||
| 169 | return (byterev_4(x) << 32) | byterev_4(x >> 32); | ||
| 170 | } | ||
| 171 | #endif | ||
| 172 | |||
| 173 | static int __kprobes read_mem_aligned(unsigned long *dest, unsigned long ea, | ||
| 174 | int nb) | ||
| 175 | { | ||
| 176 | int err = 0; | ||
| 177 | unsigned long x = 0; | ||
| 178 | |||
| 179 | switch (nb) { | ||
| 180 | case 1: | ||
| 181 | err = __get_user(x, (unsigned char __user *) ea); | ||
| 182 | break; | ||
| 183 | case 2: | ||
| 184 | err = __get_user(x, (unsigned short __user *) ea); | ||
| 185 | break; | ||
| 186 | case 4: | ||
| 187 | err = __get_user(x, (unsigned int __user *) ea); | ||
| 188 | break; | ||
| 189 | #ifdef __powerpc64__ | ||
| 190 | case 8: | ||
| 191 | err = __get_user(x, (unsigned long __user *) ea); | ||
| 192 | break; | ||
| 193 | #endif | ||
| 194 | } | ||
| 195 | if (!err) | ||
| 196 | *dest = x; | ||
| 197 | return err; | ||
| 198 | } | ||
| 199 | |||
| 200 | static int __kprobes read_mem_unaligned(unsigned long *dest, unsigned long ea, | ||
| 201 | int nb, struct pt_regs *regs) | ||
| 202 | { | ||
| 203 | int err; | ||
| 204 | unsigned long x, b, c; | ||
| 205 | |||
| 206 | /* unaligned, do this in pieces */ | ||
| 207 | x = 0; | ||
| 208 | for (; nb > 0; nb -= c) { | ||
| 209 | c = max_align(ea); | ||
| 210 | if (c > nb) | ||
| 211 | c = max_align(nb); | ||
| 212 | err = read_mem_aligned(&b, ea, c); | ||
| 213 | if (err) | ||
| 214 | return err; | ||
| 215 | x = (x << (8 * c)) + b; | ||
| 216 | ea += c; | ||
| 217 | } | ||
| 218 | *dest = x; | ||
| 219 | return 0; | ||
| 220 | } | ||
| 221 | |||
| 222 | /* | ||
| 223 | * Read memory at address ea for nb bytes, return 0 for success | ||
| 224 | * or -EFAULT if an error occurred. | ||
| 225 | */ | ||
| 226 | static int __kprobes read_mem(unsigned long *dest, unsigned long ea, int nb, | ||
| 227 | struct pt_regs *regs) | ||
| 228 | { | ||
| 229 | if (!address_ok(regs, ea, nb)) | ||
| 230 | return -EFAULT; | ||
| 231 | if ((ea & (nb - 1)) == 0) | ||
| 232 | return read_mem_aligned(dest, ea, nb); | ||
| 233 | return read_mem_unaligned(dest, ea, nb, regs); | ||
| 234 | } | ||
| 235 | |||
| 236 | static int __kprobes write_mem_aligned(unsigned long val, unsigned long ea, | ||
| 237 | int nb) | ||
| 238 | { | ||
| 239 | int err = 0; | ||
| 240 | |||
| 241 | switch (nb) { | ||
| 242 | case 1: | ||
| 243 | err = __put_user(val, (unsigned char __user *) ea); | ||
| 244 | break; | ||
| 245 | case 2: | ||
| 246 | err = __put_user(val, (unsigned short __user *) ea); | ||
| 247 | break; | ||
| 248 | case 4: | ||
| 249 | err = __put_user(val, (unsigned int __user *) ea); | ||
| 250 | break; | ||
| 251 | #ifdef __powerpc64__ | ||
| 252 | case 8: | ||
| 253 | err = __put_user(val, (unsigned long __user *) ea); | ||
| 254 | break; | ||
| 255 | #endif | ||
| 256 | } | ||
| 257 | return err; | ||
| 258 | } | ||
| 259 | |||
| 260 | static int __kprobes write_mem_unaligned(unsigned long val, unsigned long ea, | ||
| 261 | int nb, struct pt_regs *regs) | ||
| 262 | { | ||
| 263 | int err; | ||
| 264 | unsigned long c; | ||
| 265 | |||
| 266 | /* unaligned or little-endian, do this in pieces */ | ||
| 267 | for (; nb > 0; nb -= c) { | ||
| 268 | c = max_align(ea); | ||
| 269 | if (c > nb) | ||
| 270 | c = max_align(nb); | ||
| 271 | err = write_mem_aligned(val >> (nb - c) * 8, ea, c); | ||
| 272 | if (err) | ||
| 273 | return err; | ||
| 274 | ++ea; | ||
| 275 | } | ||
| 276 | return 0; | ||
| 277 | } | ||
| 278 | |||
| 279 | /* | ||
| 280 | * Write memory at address ea for nb bytes, return 0 for success | ||
| 281 | * or -EFAULT if an error occurred. | ||
| 282 | */ | ||
| 283 | static int __kprobes write_mem(unsigned long val, unsigned long ea, int nb, | ||
| 284 | struct pt_regs *regs) | ||
| 285 | { | ||
| 286 | if (!address_ok(regs, ea, nb)) | ||
| 287 | return -EFAULT; | ||
| 288 | if ((ea & (nb - 1)) == 0) | ||
| 289 | return write_mem_aligned(val, ea, nb); | ||
| 290 | return write_mem_unaligned(val, ea, nb, regs); | ||
| 291 | } | ||
| 292 | |||
| 49 | /* | 293 | /* |
| 50 | * Emulate instructions that cause a transfer of control. | 294 | * Check the address and alignment, and call func to do the actual |
| 295 | * load or store. | ||
| 296 | */ | ||
| 297 | static int __kprobes do_fp_load(int rn, int (*func)(int, unsigned long), | ||
| 298 | unsigned long ea, int nb, | ||
| 299 | struct pt_regs *regs) | ||
| 300 | { | ||
| 301 | int err; | ||
| 302 | unsigned long val[sizeof(double) / sizeof(long)]; | ||
| 303 | unsigned long ptr; | ||
| 304 | |||
| 305 | if (!address_ok(regs, ea, nb)) | ||
| 306 | return -EFAULT; | ||
| 307 | if ((ea & 3) == 0) | ||
| 308 | return (*func)(rn, ea); | ||
| 309 | ptr = (unsigned long) &val[0]; | ||
| 310 | if (sizeof(unsigned long) == 8 || nb == 4) { | ||
| 311 | err = read_mem_unaligned(&val[0], ea, nb, regs); | ||
| 312 | ptr += sizeof(unsigned long) - nb; | ||
| 313 | } else { | ||
| 314 | /* reading a double on 32-bit */ | ||
| 315 | err = read_mem_unaligned(&val[0], ea, 4, regs); | ||
| 316 | if (!err) | ||
| 317 | err = read_mem_unaligned(&val[1], ea + 4, 4, regs); | ||
| 318 | } | ||
| 319 | if (err) | ||
| 320 | return err; | ||
| 321 | return (*func)(rn, ptr); | ||
| 322 | } | ||
| 323 | |||
| 324 | static int __kprobes do_fp_store(int rn, int (*func)(int, unsigned long), | ||
| 325 | unsigned long ea, int nb, | ||
| 326 | struct pt_regs *regs) | ||
| 327 | { | ||
| 328 | int err; | ||
| 329 | unsigned long val[sizeof(double) / sizeof(long)]; | ||
| 330 | unsigned long ptr; | ||
| 331 | |||
| 332 | if (!address_ok(regs, ea, nb)) | ||
| 333 | return -EFAULT; | ||
| 334 | if ((ea & 3) == 0) | ||
| 335 | return (*func)(rn, ea); | ||
| 336 | ptr = (unsigned long) &val[0]; | ||
| 337 | if (sizeof(unsigned long) == 8 || nb == 4) { | ||
| 338 | ptr += sizeof(unsigned long) - nb; | ||
| 339 | err = (*func)(rn, ptr); | ||
| 340 | if (err) | ||
| 341 | return err; | ||
| 342 | err = write_mem_unaligned(val[0], ea, nb, regs); | ||
| 343 | } else { | ||
| 344 | /* writing a double on 32-bit */ | ||
| 345 | err = (*func)(rn, ptr); | ||
| 346 | if (err) | ||
| 347 | return err; | ||
| 348 | err = write_mem_unaligned(val[0], ea, 4, regs); | ||
| 349 | if (!err) | ||
| 350 | err = write_mem_unaligned(val[1], ea + 4, 4, regs); | ||
| 351 | } | ||
| 352 | return err; | ||
| 353 | } | ||
| 354 | |||
| 355 | #ifdef CONFIG_ALTIVEC | ||
| 356 | /* For Altivec/VMX, no need to worry about alignment */ | ||
| 357 | static int __kprobes do_vec_load(int rn, int (*func)(int, unsigned long), | ||
| 358 | unsigned long ea, struct pt_regs *regs) | ||
| 359 | { | ||
| 360 | if (!address_ok(regs, ea & ~0xfUL, 16)) | ||
| 361 | return -EFAULT; | ||
| 362 | return (*func)(rn, ea); | ||
| 363 | } | ||
| 364 | |||
| 365 | static int __kprobes do_vec_store(int rn, int (*func)(int, unsigned long), | ||
| 366 | unsigned long ea, struct pt_regs *regs) | ||
| 367 | { | ||
| 368 | if (!address_ok(regs, ea & ~0xfUL, 16)) | ||
| 369 | return -EFAULT; | ||
| 370 | return (*func)(rn, ea); | ||
| 371 | } | ||
| 372 | #endif /* CONFIG_ALTIVEC */ | ||
| 373 | |||
| 374 | #ifdef CONFIG_VSX | ||
| 375 | static int __kprobes do_vsx_load(int rn, int (*func)(int, unsigned long), | ||
| 376 | unsigned long ea, struct pt_regs *regs) | ||
| 377 | { | ||
| 378 | int err; | ||
| 379 | unsigned long val[2]; | ||
| 380 | |||
| 381 | if (!address_ok(regs, ea, 16)) | ||
| 382 | return -EFAULT; | ||
| 383 | if ((ea & 3) == 0) | ||
| 384 | return (*func)(rn, ea); | ||
| 385 | err = read_mem_unaligned(&val[0], ea, 8, regs); | ||
| 386 | if (!err) | ||
| 387 | err = read_mem_unaligned(&val[1], ea + 8, 8, regs); | ||
| 388 | if (!err) | ||
| 389 | err = (*func)(rn, (unsigned long) &val[0]); | ||
| 390 | return err; | ||
| 391 | } | ||
| 392 | |||
| 393 | static int __kprobes do_vsx_store(int rn, int (*func)(int, unsigned long), | ||
| 394 | unsigned long ea, struct pt_regs *regs) | ||
| 395 | { | ||
| 396 | int err; | ||
| 397 | unsigned long val[2]; | ||
| 398 | |||
| 399 | if (!address_ok(regs, ea, 16)) | ||
| 400 | return -EFAULT; | ||
| 401 | if ((ea & 3) == 0) | ||
| 402 | return (*func)(rn, ea); | ||
| 403 | err = (*func)(rn, (unsigned long) &val[0]); | ||
| 404 | if (err) | ||
| 405 | return err; | ||
| 406 | err = write_mem_unaligned(val[0], ea, 8, regs); | ||
| 407 | if (!err) | ||
| 408 | err = write_mem_unaligned(val[1], ea + 8, 8, regs); | ||
| 409 | return err; | ||
| 410 | } | ||
| 411 | #endif /* CONFIG_VSX */ | ||
| 412 | |||
| 413 | #define __put_user_asmx(x, addr, err, op, cr) \ | ||
| 414 | __asm__ __volatile__( \ | ||
| 415 | "1: " op " %2,0,%3\n" \ | ||
| 416 | " mfcr %1\n" \ | ||
| 417 | "2:\n" \ | ||
| 418 | ".section .fixup,\"ax\"\n" \ | ||
| 419 | "3: li %0,%4\n" \ | ||
| 420 | " b 2b\n" \ | ||
| 421 | ".previous\n" \ | ||
| 422 | ".section __ex_table,\"a\"\n" \ | ||
| 423 | PPC_LONG_ALIGN "\n" \ | ||
| 424 | PPC_LONG "1b,3b\n" \ | ||
| 425 | ".previous" \ | ||
| 426 | : "=r" (err), "=r" (cr) \ | ||
| 427 | : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err)) | ||
| 428 | |||
| 429 | #define __get_user_asmx(x, addr, err, op) \ | ||
| 430 | __asm__ __volatile__( \ | ||
| 431 | "1: "op" %1,0,%2\n" \ | ||
| 432 | "2:\n" \ | ||
| 433 | ".section .fixup,\"ax\"\n" \ | ||
| 434 | "3: li %0,%3\n" \ | ||
| 435 | " b 2b\n" \ | ||
| 436 | ".previous\n" \ | ||
| 437 | ".section __ex_table,\"a\"\n" \ | ||
| 438 | PPC_LONG_ALIGN "\n" \ | ||
| 439 | PPC_LONG "1b,3b\n" \ | ||
| 440 | ".previous" \ | ||
| 441 | : "=r" (err), "=r" (x) \ | ||
| 442 | : "r" (addr), "i" (-EFAULT), "0" (err)) | ||
| 443 | |||
| 444 | #define __cacheop_user_asmx(addr, err, op) \ | ||
| 445 | __asm__ __volatile__( \ | ||
| 446 | "1: "op" 0,%1\n" \ | ||
| 447 | "2:\n" \ | ||
| 448 | ".section .fixup,\"ax\"\n" \ | ||
| 449 | "3: li %0,%3\n" \ | ||
| 450 | " b 2b\n" \ | ||
| 451 | ".previous\n" \ | ||
| 452 | ".section __ex_table,\"a\"\n" \ | ||
| 453 | PPC_LONG_ALIGN "\n" \ | ||
| 454 | PPC_LONG "1b,3b\n" \ | ||
| 455 | ".previous" \ | ||
| 456 | : "=r" (err) \ | ||
| 457 | : "r" (addr), "i" (-EFAULT), "0" (err)) | ||
| 458 | |||
| 459 | static void __kprobes set_cr0(struct pt_regs *regs, int rd) | ||
| 460 | { | ||
| 461 | long val = regs->gpr[rd]; | ||
| 462 | |||
| 463 | regs->ccr = (regs->ccr & 0x0fffffff) | ((regs->xer >> 3) & 0x10000000); | ||
| 464 | #ifdef __powerpc64__ | ||
| 465 | if (!(regs->msr & MSR_SF)) | ||
| 466 | val = (int) val; | ||
| 467 | #endif | ||
| 468 | if (val < 0) | ||
| 469 | regs->ccr |= 0x80000000; | ||
| 470 | else if (val > 0) | ||
| 471 | regs->ccr |= 0x40000000; | ||
| 472 | else | ||
| 473 | regs->ccr |= 0x20000000; | ||
| 474 | } | ||
| 475 | |||
| 476 | static void __kprobes add_with_carry(struct pt_regs *regs, int rd, | ||
| 477 | unsigned long val1, unsigned long val2, | ||
| 478 | unsigned long carry_in) | ||
| 479 | { | ||
| 480 | unsigned long val = val1 + val2; | ||
| 481 | |||
| 482 | if (carry_in) | ||
| 483 | ++val; | ||
| 484 | regs->gpr[rd] = val; | ||
| 485 | #ifdef __powerpc64__ | ||
| 486 | if (!(regs->msr & MSR_SF)) { | ||
| 487 | val = (unsigned int) val; | ||
| 488 | val1 = (unsigned int) val1; | ||
| 489 | } | ||
| 490 | #endif | ||
| 491 | if (val < val1 || (carry_in && val == val1)) | ||
| 492 | regs->xer |= XER_CA; | ||
| 493 | else | ||
| 494 | regs->xer &= ~XER_CA; | ||
| 495 | } | ||
| 496 | |||
| 497 | static void __kprobes do_cmp_signed(struct pt_regs *regs, long v1, long v2, | ||
| 498 | int crfld) | ||
| 499 | { | ||
| 500 | unsigned int crval, shift; | ||
| 501 | |||
| 502 | crval = (regs->xer >> 31) & 1; /* get SO bit */ | ||
| 503 | if (v1 < v2) | ||
| 504 | crval |= 8; | ||
| 505 | else if (v1 > v2) | ||
| 506 | crval |= 4; | ||
| 507 | else | ||
| 508 | crval |= 2; | ||
| 509 | shift = (7 - crfld) * 4; | ||
| 510 | regs->ccr = (regs->ccr & ~(0xf << shift)) | (crval << shift); | ||
| 511 | } | ||
| 512 | |||
| 513 | static void __kprobes do_cmp_unsigned(struct pt_regs *regs, unsigned long v1, | ||
| 514 | unsigned long v2, int crfld) | ||
| 515 | { | ||
| 516 | unsigned int crval, shift; | ||
| 517 | |||
| 518 | crval = (regs->xer >> 31) & 1; /* get SO bit */ | ||
| 519 | if (v1 < v2) | ||
| 520 | crval |= 8; | ||
| 521 | else if (v1 > v2) | ||
| 522 | crval |= 4; | ||
| 523 | else | ||
| 524 | crval |= 2; | ||
| 525 | shift = (7 - crfld) * 4; | ||
| 526 | regs->ccr = (regs->ccr & ~(0xf << shift)) | (crval << shift); | ||
| 527 | } | ||
| 528 | |||
| 529 | /* | ||
| 530 | * Elements of 32-bit rotate and mask instructions. | ||
| 531 | */ | ||
| 532 | #define MASK32(mb, me) ((0xffffffffUL >> (mb)) + \ | ||
| 533 | ((signed long)-0x80000000L >> (me)) + ((me) >= (mb))) | ||
| 534 | #ifdef __powerpc64__ | ||
| 535 | #define MASK64_L(mb) (~0UL >> (mb)) | ||
| 536 | #define MASK64_R(me) ((signed long)-0x8000000000000000L >> (me)) | ||
| 537 | #define MASK64(mb, me) (MASK64_L(mb) + MASK64_R(me) + ((me) >= (mb))) | ||
| 538 | #define DATA32(x) (((x) & 0xffffffffUL) | (((x) & 0xffffffffUL) << 32)) | ||
| 539 | #else | ||
| 540 | #define DATA32(x) (x) | ||
| 541 | #endif | ||
| 542 | #define ROTATE(x, n) ((n) ? (((x) << (n)) | ((x) >> (8 * sizeof(long) - (n)))) : (x)) | ||
| 543 | |||
| 544 | /* | ||
| 545 | * Emulate instructions that cause a transfer of control, | ||
| 546 | * loads and stores, and a few other instructions. | ||
| 51 | * Returns 1 if the step was emulated, 0 if not, | 547 | * Returns 1 if the step was emulated, 0 if not, |
| 52 | * or -1 if the instruction is one that should not be stepped, | 548 | * or -1 if the instruction is one that should not be stepped, |
| 53 | * such as an rfid, or a mtmsrd that would clear MSR_RI. | 549 | * such as an rfid, or a mtmsrd that would clear MSR_RI. |
| 54 | */ | 550 | */ |
| 55 | int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | 551 | int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
| 56 | { | 552 | { |
| 57 | unsigned int opcode, rs, rb, rd, spr; | 553 | unsigned int opcode, ra, rb, rd, spr, u; |
| 58 | unsigned long int imm; | 554 | unsigned long int imm; |
| 555 | unsigned long int val, val2; | ||
| 556 | unsigned long int ea; | ||
| 557 | unsigned int cr, mb, me, sh; | ||
| 558 | int err; | ||
| 559 | unsigned long old_ra; | ||
| 560 | long ival; | ||
| 59 | 561 | ||
| 60 | opcode = instr >> 26; | 562 | opcode = instr >> 26; |
| 61 | switch (opcode) { | 563 | switch (opcode) { |
| @@ -78,7 +580,13 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
| 78 | * entry code works. If that is changed, this will | 580 | * entry code works. If that is changed, this will |
| 79 | * need to be changed also. | 581 | * need to be changed also. |
| 80 | */ | 582 | */ |
| 583 | if (regs->gpr[0] == 0x1ebe && | ||
| 584 | cpu_has_feature(CPU_FTR_REAL_LE)) { | ||
| 585 | regs->msr ^= MSR_LE; | ||
| 586 | goto instr_done; | ||
| 587 | } | ||
| 81 | regs->gpr[9] = regs->gpr[13]; | 588 | regs->gpr[9] = regs->gpr[13]; |
| 589 | regs->gpr[10] = MSR_KERNEL; | ||
| 82 | regs->gpr[11] = regs->nip + 4; | 590 | regs->gpr[11] = regs->nip + 4; |
| 83 | regs->gpr[12] = regs->msr & MSR_MASK; | 591 | regs->gpr[12] = regs->msr & MSR_MASK; |
| 84 | regs->gpr[13] = (unsigned long) get_paca(); | 592 | regs->gpr[13] = (unsigned long) get_paca(); |
| @@ -102,9 +610,9 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
| 102 | regs->nip = imm; | 610 | regs->nip = imm; |
| 103 | return 1; | 611 | return 1; |
| 104 | case 19: | 612 | case 19: |
| 105 | switch (instr & 0x7fe) { | 613 | switch ((instr >> 1) & 0x3ff) { |
| 106 | case 0x20: /* bclr */ | 614 | case 16: /* bclr */ |
| 107 | case 0x420: /* bcctr */ | 615 | case 528: /* bcctr */ |
| 108 | imm = (instr & 0x400)? regs->ctr: regs->link; | 616 | imm = (instr & 0x400)? regs->ctr: regs->link; |
| 109 | regs->nip += 4; | 617 | regs->nip += 4; |
| 110 | if ((regs->msr & MSR_SF) == 0) { | 618 | if ((regs->msr & MSR_SF) == 0) { |
| @@ -116,30 +624,233 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
| 116 | if (branch_taken(instr, regs)) | 624 | if (branch_taken(instr, regs)) |
| 117 | regs->nip = imm; | 625 | regs->nip = imm; |
| 118 | return 1; | 626 | return 1; |
| 119 | case 0x24: /* rfid, scary */ | 627 | |
| 628 | case 18: /* rfid, scary */ | ||
| 120 | return -1; | 629 | return -1; |
| 630 | |||
| 631 | case 150: /* isync */ | ||
| 632 | isync(); | ||
| 633 | goto instr_done; | ||
| 634 | |||
| 635 | case 33: /* crnor */ | ||
| 636 | case 129: /* crandc */ | ||
| 637 | case 193: /* crxor */ | ||
| 638 | case 225: /* crnand */ | ||
| 639 | case 257: /* crand */ | ||
| 640 | case 289: /* creqv */ | ||
| 641 | case 417: /* crorc */ | ||
| 642 | case 449: /* cror */ | ||
| 643 | ra = (instr >> 16) & 0x1f; | ||
| 644 | rb = (instr >> 11) & 0x1f; | ||
| 645 | rd = (instr >> 21) & 0x1f; | ||
| 646 | ra = (regs->ccr >> (31 - ra)) & 1; | ||
| 647 | rb = (regs->ccr >> (31 - rb)) & 1; | ||
| 648 | val = (instr >> (6 + ra * 2 + rb)) & 1; | ||
| 649 | regs->ccr = (regs->ccr & ~(1UL << (31 - rd))) | | ||
| 650 | (val << (31 - rd)); | ||
| 651 | goto instr_done; | ||
| 652 | } | ||
| 653 | break; | ||
| 654 | case 31: | ||
| 655 | switch ((instr >> 1) & 0x3ff) { | ||
| 656 | case 598: /* sync */ | ||
| 657 | #ifdef __powerpc64__ | ||
| 658 | switch ((instr >> 21) & 3) { | ||
| 659 | case 1: /* lwsync */ | ||
| 660 | asm volatile("lwsync" : : : "memory"); | ||
| 661 | goto instr_done; | ||
| 662 | case 2: /* ptesync */ | ||
| 663 | asm volatile("ptesync" : : : "memory"); | ||
| 664 | goto instr_done; | ||
| 665 | } | ||
| 666 | #endif | ||
| 667 | mb(); | ||
| 668 | goto instr_done; | ||
| 669 | |||
| 670 | case 854: /* eieio */ | ||
| 671 | eieio(); | ||
| 672 | goto instr_done; | ||
| 673 | } | ||
| 674 | break; | ||
| 675 | } | ||
| 676 | |||
| 677 | /* Following cases refer to regs->gpr[], so we need all regs */ | ||
| 678 | if (!FULL_REGS(regs)) | ||
| 679 | return 0; | ||
| 680 | |||
| 681 | rd = (instr >> 21) & 0x1f; | ||
| 682 | ra = (instr >> 16) & 0x1f; | ||
| 683 | rb = (instr >> 11) & 0x1f; | ||
| 684 | |||
| 685 | switch (opcode) { | ||
| 686 | case 7: /* mulli */ | ||
| 687 | regs->gpr[rd] = regs->gpr[ra] * (short) instr; | ||
| 688 | goto instr_done; | ||
| 689 | |||
| 690 | case 8: /* subfic */ | ||
| 691 | imm = (short) instr; | ||
| 692 | add_with_carry(regs, rd, ~regs->gpr[ra], imm, 1); | ||
| 693 | goto instr_done; | ||
| 694 | |||
| 695 | case 10: /* cmpli */ | ||
| 696 | imm = (unsigned short) instr; | ||
| 697 | val = regs->gpr[ra]; | ||
| 698 | #ifdef __powerpc64__ | ||
| 699 | if ((rd & 1) == 0) | ||
| 700 | val = (unsigned int) val; | ||
| 701 | #endif | ||
| 702 | do_cmp_unsigned(regs, val, imm, rd >> 2); | ||
| 703 | goto instr_done; | ||
| 704 | |||
| 705 | case 11: /* cmpi */ | ||
| 706 | imm = (short) instr; | ||
| 707 | val = regs->gpr[ra]; | ||
| 708 | #ifdef __powerpc64__ | ||
| 709 | if ((rd & 1) == 0) | ||
| 710 | val = (int) val; | ||
| 711 | #endif | ||
| 712 | do_cmp_signed(regs, val, imm, rd >> 2); | ||
| 713 | goto instr_done; | ||
| 714 | |||
| 715 | case 12: /* addic */ | ||
| 716 | imm = (short) instr; | ||
| 717 | add_with_carry(regs, rd, regs->gpr[ra], imm, 0); | ||
| 718 | goto instr_done; | ||
| 719 | |||
| 720 | case 13: /* addic. */ | ||
| 721 | imm = (short) instr; | ||
| 722 | add_with_carry(regs, rd, regs->gpr[ra], imm, 0); | ||
| 723 | set_cr0(regs, rd); | ||
| 724 | goto instr_done; | ||
| 725 | |||
| 726 | case 14: /* addi */ | ||
| 727 | imm = (short) instr; | ||
| 728 | if (ra) | ||
| 729 | imm += regs->gpr[ra]; | ||
| 730 | regs->gpr[rd] = imm; | ||
| 731 | goto instr_done; | ||
| 732 | |||
| 733 | case 15: /* addis */ | ||
| 734 | imm = ((short) instr) << 16; | ||
| 735 | if (ra) | ||
| 736 | imm += regs->gpr[ra]; | ||
| 737 | regs->gpr[rd] = imm; | ||
| 738 | goto instr_done; | ||
| 739 | |||
| 740 | case 20: /* rlwimi */ | ||
| 741 | mb = (instr >> 6) & 0x1f; | ||
| 742 | me = (instr >> 1) & 0x1f; | ||
| 743 | val = DATA32(regs->gpr[rd]); | ||
| 744 | imm = MASK32(mb, me); | ||
| 745 | regs->gpr[ra] = (regs->gpr[ra] & ~imm) | (ROTATE(val, rb) & imm); | ||
| 746 | goto logical_done; | ||
| 747 | |||
| 748 | case 21: /* rlwinm */ | ||
| 749 | mb = (instr >> 6) & 0x1f; | ||
| 750 | me = (instr >> 1) & 0x1f; | ||
| 751 | val = DATA32(regs->gpr[rd]); | ||
| 752 | regs->gpr[ra] = ROTATE(val, rb) & MASK32(mb, me); | ||
| 753 | goto logical_done; | ||
| 754 | |||
| 755 | case 23: /* rlwnm */ | ||
| 756 | mb = (instr >> 6) & 0x1f; | ||
| 757 | me = (instr >> 1) & 0x1f; | ||
| 758 | rb = regs->gpr[rb] & 0x1f; | ||
| 759 | val = DATA32(regs->gpr[rd]); | ||
| 760 | regs->gpr[ra] = ROTATE(val, rb) & MASK32(mb, me); | ||
| 761 | goto logical_done; | ||
| 762 | |||
| 763 | case 24: /* ori */ | ||
| 764 | imm = (unsigned short) instr; | ||
| 765 | regs->gpr[ra] = regs->gpr[rd] | imm; | ||
| 766 | goto instr_done; | ||
| 767 | |||
| 768 | case 25: /* oris */ | ||
| 769 | imm = (unsigned short) instr; | ||
| 770 | regs->gpr[ra] = regs->gpr[rd] | (imm << 16); | ||
| 771 | goto instr_done; | ||
| 772 | |||
| 773 | case 26: /* xori */ | ||
| 774 | imm = (unsigned short) instr; | ||
| 775 | regs->gpr[ra] = regs->gpr[rd] ^ imm; | ||
| 776 | goto instr_done; | ||
| 777 | |||
| 778 | case 27: /* xoris */ | ||
| 779 | imm = (unsigned short) instr; | ||
| 780 | regs->gpr[ra] = regs->gpr[rd] ^ (imm << 16); | ||
| 781 | goto instr_done; | ||
| 782 | |||
| 783 | case 28: /* andi. */ | ||
| 784 | imm = (unsigned short) instr; | ||
| 785 | regs->gpr[ra] = regs->gpr[rd] & imm; | ||
| 786 | set_cr0(regs, ra); | ||
| 787 | goto instr_done; | ||
| 788 | |||
| 789 | case 29: /* andis. */ | ||
| 790 | imm = (unsigned short) instr; | ||
| 791 | regs->gpr[ra] = regs->gpr[rd] & (imm << 16); | ||
| 792 | set_cr0(regs, ra); | ||
| 793 | goto instr_done; | ||
| 794 | |||
| 795 | #ifdef __powerpc64__ | ||
| 796 | case 30: /* rld* */ | ||
| 797 | mb = ((instr >> 6) & 0x1f) | (instr & 0x20); | ||
| 798 | val = regs->gpr[rd]; | ||
| 799 | if ((instr & 0x10) == 0) { | ||
| 800 | sh = rb | ((instr & 2) << 4); | ||
| 801 | val = ROTATE(val, sh); | ||
| 802 | switch ((instr >> 2) & 3) { | ||
| 803 | case 0: /* rldicl */ | ||
| 804 | regs->gpr[ra] = val & MASK64_L(mb); | ||
| 805 | goto logical_done; | ||
| 806 | case 1: /* rldicr */ | ||
| 807 | regs->gpr[ra] = val & MASK64_R(mb); | ||
| 808 | goto logical_done; | ||
| 809 | case 2: /* rldic */ | ||
| 810 | regs->gpr[ra] = val & MASK64(mb, 63 - sh); | ||
| 811 | goto logical_done; | ||
| 812 | case 3: /* rldimi */ | ||
| 813 | imm = MASK64(mb, 63 - sh); | ||
| 814 | regs->gpr[ra] = (regs->gpr[ra] & ~imm) | | ||
| 815 | (val & imm); | ||
| 816 | goto logical_done; | ||
| 817 | } | ||
| 818 | } else { | ||
| 819 | sh = regs->gpr[rb] & 0x3f; | ||
| 820 | val = ROTATE(val, sh); | ||
| 821 | switch ((instr >> 1) & 7) { | ||
| 822 | case 0: /* rldcl */ | ||
| 823 | regs->gpr[ra] = val & MASK64_L(mb); | ||
| 824 | goto logical_done; | ||
| 825 | case 1: /* rldcr */ | ||
| 826 | regs->gpr[ra] = val & MASK64_R(mb); | ||
| 827 | goto logical_done; | ||
| 828 | } | ||
| 121 | } | 829 | } |
| 830 | #endif | ||
| 831 | |||
| 122 | case 31: | 832 | case 31: |
| 123 | rd = (instr >> 21) & 0x1f; | 833 | switch ((instr >> 1) & 0x3ff) { |
| 124 | switch (instr & 0x7fe) { | 834 | case 83: /* mfmsr */ |
| 125 | case 0xa6: /* mfmsr */ | 835 | if (regs->msr & MSR_PR) |
| 836 | break; | ||
| 126 | regs->gpr[rd] = regs->msr & MSR_MASK; | 837 | regs->gpr[rd] = regs->msr & MSR_MASK; |
| 127 | regs->nip += 4; | 838 | goto instr_done; |
| 128 | if ((regs->msr & MSR_SF) == 0) | 839 | case 146: /* mtmsr */ |
| 129 | regs->nip &= 0xffffffffUL; | 840 | if (regs->msr & MSR_PR) |
| 130 | return 1; | 841 | break; |
| 131 | case 0x124: /* mtmsr */ | ||
| 132 | imm = regs->gpr[rd]; | 842 | imm = regs->gpr[rd]; |
| 133 | if ((imm & MSR_RI) == 0) | 843 | if ((imm & MSR_RI) == 0) |
| 134 | /* can't step mtmsr that would clear MSR_RI */ | 844 | /* can't step mtmsr that would clear MSR_RI */ |
| 135 | return -1; | 845 | return -1; |
| 136 | regs->msr = imm; | 846 | regs->msr = imm; |
| 137 | regs->nip += 4; | 847 | goto instr_done; |
| 138 | return 1; | ||
| 139 | #ifdef CONFIG_PPC64 | 848 | #ifdef CONFIG_PPC64 |
| 140 | case 0x164: /* mtmsrd */ | 849 | case 178: /* mtmsrd */ |
| 141 | /* only MSR_EE and MSR_RI get changed if bit 15 set */ | 850 | /* only MSR_EE and MSR_RI get changed if bit 15 set */ |
| 142 | /* mtmsrd doesn't change MSR_HV and MSR_ME */ | 851 | /* mtmsrd doesn't change MSR_HV and MSR_ME */ |
| 852 | if (regs->msr & MSR_PR) | ||
| 853 | break; | ||
| 143 | imm = (instr & 0x10000)? 0x8002: 0xefffffffffffefffUL; | 854 | imm = (instr & 0x10000)? 0x8002: 0xefffffffffffefffUL; |
| 144 | imm = (regs->msr & MSR_MASK & ~imm) | 855 | imm = (regs->msr & MSR_MASK & ~imm) |
| 145 | | (regs->gpr[rd] & imm); | 856 | | (regs->gpr[rd] & imm); |
| @@ -147,57 +858,770 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
| 147 | /* can't step mtmsrd that would clear MSR_RI */ | 858 | /* can't step mtmsrd that would clear MSR_RI */ |
| 148 | return -1; | 859 | return -1; |
| 149 | regs->msr = imm; | 860 | regs->msr = imm; |
| 150 | regs->nip += 4; | 861 | goto instr_done; |
| 151 | if ((imm & MSR_SF) == 0) | ||
| 152 | regs->nip &= 0xffffffffUL; | ||
| 153 | return 1; | ||
| 154 | #endif | 862 | #endif |
| 155 | case 0x26: /* mfcr */ | 863 | case 19: /* mfcr */ |
| 156 | regs->gpr[rd] = regs->ccr; | 864 | regs->gpr[rd] = regs->ccr; |
| 157 | regs->gpr[rd] &= 0xffffffffUL; | 865 | regs->gpr[rd] &= 0xffffffffUL; |
| 158 | goto mtspr_out; | 866 | goto instr_done; |
| 159 | case 0x2a6: /* mfspr */ | 867 | |
| 868 | case 144: /* mtcrf */ | ||
| 869 | imm = 0xf0000000UL; | ||
| 870 | val = regs->gpr[rd]; | ||
| 871 | for (sh = 0; sh < 8; ++sh) { | ||
| 872 | if (instr & (0x80000 >> sh)) | ||
| 873 | regs->ccr = (regs->ccr & ~imm) | | ||
| 874 | (val & imm); | ||
| 875 | imm >>= 4; | ||
| 876 | } | ||
| 877 | goto instr_done; | ||
| 878 | |||
| 879 | case 339: /* mfspr */ | ||
| 160 | spr = (instr >> 11) & 0x3ff; | 880 | spr = (instr >> 11) & 0x3ff; |
| 161 | switch (spr) { | 881 | switch (spr) { |
| 162 | case 0x20: /* mfxer */ | 882 | case 0x20: /* mfxer */ |
| 163 | regs->gpr[rd] = regs->xer; | 883 | regs->gpr[rd] = regs->xer; |
| 164 | regs->gpr[rd] &= 0xffffffffUL; | 884 | regs->gpr[rd] &= 0xffffffffUL; |
| 165 | goto mtspr_out; | 885 | goto instr_done; |
| 166 | case 0x100: /* mflr */ | 886 | case 0x100: /* mflr */ |
| 167 | regs->gpr[rd] = regs->link; | 887 | regs->gpr[rd] = regs->link; |
| 168 | goto mtspr_out; | 888 | goto instr_done; |
| 169 | case 0x120: /* mfctr */ | 889 | case 0x120: /* mfctr */ |
| 170 | regs->gpr[rd] = regs->ctr; | 890 | regs->gpr[rd] = regs->ctr; |
| 171 | goto mtspr_out; | 891 | goto instr_done; |
| 172 | } | ||
| 173 | break; | ||
| 174 | case 0x378: /* orx */ | ||
| 175 | if (instr & 1) | ||
| 176 | break; | ||
| 177 | rs = (instr >> 21) & 0x1f; | ||
| 178 | rb = (instr >> 11) & 0x1f; | ||
| 179 | if (rs == rb) { /* mr */ | ||
| 180 | rd = (instr >> 16) & 0x1f; | ||
| 181 | regs->gpr[rd] = regs->gpr[rs]; | ||
| 182 | goto mtspr_out; | ||
| 183 | } | 892 | } |
| 184 | break; | 893 | break; |
| 185 | case 0x3a6: /* mtspr */ | 894 | |
| 895 | case 467: /* mtspr */ | ||
| 186 | spr = (instr >> 11) & 0x3ff; | 896 | spr = (instr >> 11) & 0x3ff; |
| 187 | switch (spr) { | 897 | switch (spr) { |
| 188 | case 0x20: /* mtxer */ | 898 | case 0x20: /* mtxer */ |
| 189 | regs->xer = (regs->gpr[rd] & 0xffffffffUL); | 899 | regs->xer = (regs->gpr[rd] & 0xffffffffUL); |
| 190 | goto mtspr_out; | 900 | goto instr_done; |
| 191 | case 0x100: /* mtlr */ | 901 | case 0x100: /* mtlr */ |
| 192 | regs->link = regs->gpr[rd]; | 902 | regs->link = regs->gpr[rd]; |
| 193 | goto mtspr_out; | 903 | goto instr_done; |
| 194 | case 0x120: /* mtctr */ | 904 | case 0x120: /* mtctr */ |
| 195 | regs->ctr = regs->gpr[rd]; | 905 | regs->ctr = regs->gpr[rd]; |
| 196 | mtspr_out: | 906 | goto instr_done; |
| 197 | regs->nip += 4; | ||
| 198 | return 1; | ||
| 199 | } | 907 | } |
| 908 | break; | ||
| 909 | |||
| 910 | /* | ||
| 911 | * Compare instructions | ||
| 912 | */ | ||
| 913 | case 0: /* cmp */ | ||
| 914 | val = regs->gpr[ra]; | ||
| 915 | val2 = regs->gpr[rb]; | ||
| 916 | #ifdef __powerpc64__ | ||
| 917 | if ((rd & 1) == 0) { | ||
| 918 | /* word (32-bit) compare */ | ||
| 919 | val = (int) val; | ||
| 920 | val2 = (int) val2; | ||
| 921 | } | ||
| 922 | #endif | ||
| 923 | do_cmp_signed(regs, val, val2, rd >> 2); | ||
| 924 | goto instr_done; | ||
| 925 | |||
| 926 | case 32: /* cmpl */ | ||
| 927 | val = regs->gpr[ra]; | ||
| 928 | val2 = regs->gpr[rb]; | ||
| 929 | #ifdef __powerpc64__ | ||
| 930 | if ((rd & 1) == 0) { | ||
| 931 | /* word (32-bit) compare */ | ||
| 932 | val = (unsigned int) val; | ||
| 933 | val2 = (unsigned int) val2; | ||
| 934 | } | ||
| 935 | #endif | ||
| 936 | do_cmp_unsigned(regs, val, val2, rd >> 2); | ||
| 937 | goto instr_done; | ||
| 938 | |||
| 939 | /* | ||
| 940 | * Arithmetic instructions | ||
| 941 | */ | ||
| 942 | case 8: /* subfc */ | ||
| 943 | add_with_carry(regs, rd, ~regs->gpr[ra], | ||
| 944 | regs->gpr[rb], 1); | ||
| 945 | goto arith_done; | ||
| 946 | #ifdef __powerpc64__ | ||
| 947 | case 9: /* mulhdu */ | ||
| 948 | asm("mulhdu %0,%1,%2" : "=r" (regs->gpr[rd]) : | ||
| 949 | "r" (regs->gpr[ra]), "r" (regs->gpr[rb])); | ||
| 950 | goto arith_done; | ||
| 951 | #endif | ||
| 952 | case 10: /* addc */ | ||
| 953 | add_with_carry(regs, rd, regs->gpr[ra], | ||
| 954 | regs->gpr[rb], 0); | ||
| 955 | goto arith_done; | ||
| 956 | |||
| 957 | case 11: /* mulhwu */ | ||
| 958 | asm("mulhwu %0,%1,%2" : "=r" (regs->gpr[rd]) : | ||
| 959 | "r" (regs->gpr[ra]), "r" (regs->gpr[rb])); | ||
| 960 | goto arith_done; | ||
| 961 | |||
| 962 | case 40: /* subf */ | ||
| 963 | regs->gpr[rd] = regs->gpr[rb] - regs->gpr[ra]; | ||
| 964 | goto arith_done; | ||
| 965 | #ifdef __powerpc64__ | ||
| 966 | case 73: /* mulhd */ | ||
| 967 | asm("mulhd %0,%1,%2" : "=r" (regs->gpr[rd]) : | ||
| 968 | "r" (regs->gpr[ra]), "r" (regs->gpr[rb])); | ||
| 969 | goto arith_done; | ||
| 970 | #endif | ||
| 971 | case 75: /* mulhw */ | ||
| 972 | asm("mulhw %0,%1,%2" : "=r" (regs->gpr[rd]) : | ||
| 973 | "r" (regs->gpr[ra]), "r" (regs->gpr[rb])); | ||
| 974 | goto arith_done; | ||
| 975 | |||
| 976 | case 104: /* neg */ | ||
| 977 | regs->gpr[rd] = -regs->gpr[ra]; | ||
| 978 | goto arith_done; | ||
| 979 | |||
| 980 | case 136: /* subfe */ | ||
| 981 | add_with_carry(regs, rd, ~regs->gpr[ra], regs->gpr[rb], | ||
| 982 | regs->xer & XER_CA); | ||
| 983 | goto arith_done; | ||
| 984 | |||
| 985 | case 138: /* adde */ | ||
| 986 | add_with_carry(regs, rd, regs->gpr[ra], regs->gpr[rb], | ||
| 987 | regs->xer & XER_CA); | ||
| 988 | goto arith_done; | ||
| 989 | |||
| 990 | case 200: /* subfze */ | ||
| 991 | add_with_carry(regs, rd, ~regs->gpr[ra], 0L, | ||
| 992 | regs->xer & XER_CA); | ||
| 993 | goto arith_done; | ||
| 994 | |||
| 995 | case 202: /* addze */ | ||
| 996 | add_with_carry(regs, rd, regs->gpr[ra], 0L, | ||
| 997 | regs->xer & XER_CA); | ||
| 998 | goto arith_done; | ||
| 999 | |||
| 1000 | case 232: /* subfme */ | ||
| 1001 | add_with_carry(regs, rd, ~regs->gpr[ra], -1L, | ||
| 1002 | regs->xer & XER_CA); | ||
| 1003 | goto arith_done; | ||
| 1004 | #ifdef __powerpc64__ | ||
| 1005 | case 233: /* mulld */ | ||
| 1006 | regs->gpr[rd] = regs->gpr[ra] * regs->gpr[rb]; | ||
| 1007 | goto arith_done; | ||
| 1008 | #endif | ||
| 1009 | case 234: /* addme */ | ||
| 1010 | add_with_carry(regs, rd, regs->gpr[ra], -1L, | ||
| 1011 | regs->xer & XER_CA); | ||
| 1012 | goto arith_done; | ||
| 1013 | |||
| 1014 | case 235: /* mullw */ | ||
| 1015 | regs->gpr[rd] = (unsigned int) regs->gpr[ra] * | ||
| 1016 | (unsigned int) regs->gpr[rb]; | ||
| 1017 | goto arith_done; | ||
| 1018 | |||
| 1019 | case 266: /* add */ | ||
| 1020 | regs->gpr[rd] = regs->gpr[ra] + regs->gpr[rb]; | ||
| 1021 | goto arith_done; | ||
| 1022 | #ifdef __powerpc64__ | ||
| 1023 | case 457: /* divdu */ | ||
| 1024 | regs->gpr[rd] = regs->gpr[ra] / regs->gpr[rb]; | ||
| 1025 | goto arith_done; | ||
| 1026 | #endif | ||
| 1027 | case 459: /* divwu */ | ||
| 1028 | regs->gpr[rd] = (unsigned int) regs->gpr[ra] / | ||
| 1029 | (unsigned int) regs->gpr[rb]; | ||
| 1030 | goto arith_done; | ||
| 1031 | #ifdef __powerpc64__ | ||
| 1032 | case 489: /* divd */ | ||
| 1033 | regs->gpr[rd] = (long int) regs->gpr[ra] / | ||
| 1034 | (long int) regs->gpr[rb]; | ||
| 1035 | goto arith_done; | ||
| 1036 | #endif | ||
| 1037 | case 491: /* divw */ | ||
| 1038 | regs->gpr[rd] = (int) regs->gpr[ra] / | ||
| 1039 | (int) regs->gpr[rb]; | ||
| 1040 | goto arith_done; | ||
| 1041 | |||
| 1042 | |||
| 1043 | /* | ||
| 1044 | * Logical instructions | ||
| 1045 | */ | ||
| 1046 | case 26: /* cntlzw */ | ||
| 1047 | asm("cntlzw %0,%1" : "=r" (regs->gpr[ra]) : | ||
| 1048 | "r" (regs->gpr[rd])); | ||
| 1049 | goto logical_done; | ||
| 1050 | #ifdef __powerpc64__ | ||
| 1051 | case 58: /* cntlzd */ | ||
| 1052 | asm("cntlzd %0,%1" : "=r" (regs->gpr[ra]) : | ||
| 1053 | "r" (regs->gpr[rd])); | ||
| 1054 | goto logical_done; | ||
| 1055 | #endif | ||
| 1056 | case 28: /* and */ | ||
| 1057 | regs->gpr[ra] = regs->gpr[rd] & regs->gpr[rb]; | ||
| 1058 | goto logical_done; | ||
| 1059 | |||
| 1060 | case 60: /* andc */ | ||
| 1061 | regs->gpr[ra] = regs->gpr[rd] & ~regs->gpr[rb]; | ||
| 1062 | goto logical_done; | ||
| 1063 | |||
| 1064 | case 124: /* nor */ | ||
| 1065 | regs->gpr[ra] = ~(regs->gpr[rd] | regs->gpr[rb]); | ||
| 1066 | goto logical_done; | ||
| 1067 | |||
| 1068 | case 284: /* xor */ | ||
| 1069 | regs->gpr[ra] = ~(regs->gpr[rd] ^ regs->gpr[rb]); | ||
| 1070 | goto logical_done; | ||
| 1071 | |||
| 1072 | case 316: /* xor */ | ||
| 1073 | regs->gpr[ra] = regs->gpr[rd] ^ regs->gpr[rb]; | ||
| 1074 | goto logical_done; | ||
| 1075 | |||
| 1076 | case 412: /* orc */ | ||
| 1077 | regs->gpr[ra] = regs->gpr[rd] | ~regs->gpr[rb]; | ||
| 1078 | goto logical_done; | ||
| 1079 | |||
| 1080 | case 444: /* or */ | ||
| 1081 | regs->gpr[ra] = regs->gpr[rd] | regs->gpr[rb]; | ||
| 1082 | goto logical_done; | ||
| 1083 | |||
| 1084 | case 476: /* nand */ | ||
| 1085 | regs->gpr[ra] = ~(regs->gpr[rd] & regs->gpr[rb]); | ||
| 1086 | goto logical_done; | ||
| 1087 | |||
| 1088 | case 922: /* extsh */ | ||
| 1089 | regs->gpr[ra] = (signed short) regs->gpr[rd]; | ||
| 1090 | goto logical_done; | ||
| 1091 | |||
| 1092 | case 954: /* extsb */ | ||
| 1093 | regs->gpr[ra] = (signed char) regs->gpr[rd]; | ||
| 1094 | goto logical_done; | ||
| 1095 | #ifdef __powerpc64__ | ||
| 1096 | case 986: /* extsw */ | ||
| 1097 | regs->gpr[ra] = (signed int) regs->gpr[rd]; | ||
| 1098 | goto logical_done; | ||
| 1099 | #endif | ||
| 1100 | |||
| 1101 | /* | ||
| 1102 | * Shift instructions | ||
| 1103 | */ | ||
| 1104 | case 24: /* slw */ | ||
| 1105 | sh = regs->gpr[rb] & 0x3f; | ||
| 1106 | if (sh < 32) | ||
| 1107 | regs->gpr[ra] = (regs->gpr[rd] << sh) & 0xffffffffUL; | ||
| 1108 | else | ||
| 1109 | regs->gpr[ra] = 0; | ||
| 1110 | goto logical_done; | ||
| 1111 | |||
| 1112 | case 536: /* srw */ | ||
| 1113 | sh = regs->gpr[rb] & 0x3f; | ||
| 1114 | if (sh < 32) | ||
| 1115 | regs->gpr[ra] = (regs->gpr[rd] & 0xffffffffUL) >> sh; | ||
| 1116 | else | ||
| 1117 | regs->gpr[ra] = 0; | ||
| 1118 | goto logical_done; | ||
| 1119 | |||
| 1120 | case 792: /* sraw */ | ||
| 1121 | sh = regs->gpr[rb] & 0x3f; | ||
| 1122 | ival = (signed int) regs->gpr[rd]; | ||
| 1123 | regs->gpr[ra] = ival >> (sh < 32 ? sh : 31); | ||
| 1124 | if (ival < 0 && (sh >= 32 || (ival & ((1 << sh) - 1)) != 0)) | ||
| 1125 | regs->xer |= XER_CA; | ||
| 1126 | else | ||
| 1127 | regs->xer &= ~XER_CA; | ||
| 1128 | goto logical_done; | ||
| 1129 | |||
| 1130 | case 824: /* srawi */ | ||
| 1131 | sh = rb; | ||
| 1132 | ival = (signed int) regs->gpr[rd]; | ||
| 1133 | regs->gpr[ra] = ival >> sh; | ||
| 1134 | if (ival < 0 && (ival & ((1 << sh) - 1)) != 0) | ||
| 1135 | regs->xer |= XER_CA; | ||
| 1136 | else | ||
| 1137 | regs->xer &= ~XER_CA; | ||
| 1138 | goto logical_done; | ||
| 1139 | |||
| 1140 | #ifdef __powerpc64__ | ||
| 1141 | case 27: /* sld */ | ||
| 1142 | sh = regs->gpr[rd] & 0x7f; | ||
| 1143 | if (sh < 64) | ||
| 1144 | regs->gpr[ra] = regs->gpr[rd] << sh; | ||
| 1145 | else | ||
| 1146 | regs->gpr[ra] = 0; | ||
| 1147 | goto logical_done; | ||
| 1148 | |||
| 1149 | case 539: /* srd */ | ||
| 1150 | sh = regs->gpr[rb] & 0x7f; | ||
| 1151 | if (sh < 64) | ||
| 1152 | regs->gpr[ra] = regs->gpr[rd] >> sh; | ||
| 1153 | else | ||
| 1154 | regs->gpr[ra] = 0; | ||
| 1155 | goto logical_done; | ||
| 1156 | |||
| 1157 | case 794: /* srad */ | ||
| 1158 | sh = regs->gpr[rb] & 0x7f; | ||
| 1159 | ival = (signed long int) regs->gpr[rd]; | ||
| 1160 | regs->gpr[ra] = ival >> (sh < 64 ? sh : 63); | ||
| 1161 | if (ival < 0 && (sh >= 64 || (ival & ((1 << sh) - 1)) != 0)) | ||
| 1162 | regs->xer |= XER_CA; | ||
| 1163 | else | ||
| 1164 | regs->xer &= ~XER_CA; | ||
| 1165 | goto logical_done; | ||
| 1166 | |||
| 1167 | case 826: /* sradi with sh_5 = 0 */ | ||
| 1168 | case 827: /* sradi with sh_5 = 1 */ | ||
| 1169 | sh = rb | ((instr & 2) << 4); | ||
| 1170 | ival = (signed long int) regs->gpr[rd]; | ||
| 1171 | regs->gpr[ra] = ival >> sh; | ||
| 1172 | if (ival < 0 && (ival & ((1 << sh) - 1)) != 0) | ||
| 1173 | regs->xer |= XER_CA; | ||
| 1174 | else | ||
| 1175 | regs->xer &= ~XER_CA; | ||
| 1176 | goto logical_done; | ||
| 1177 | #endif /* __powerpc64__ */ | ||
| 1178 | |||
| 1179 | /* | ||
| 1180 | * Cache instructions | ||
| 1181 | */ | ||
| 1182 | case 54: /* dcbst */ | ||
| 1183 | ea = xform_ea(instr, regs, 0); | ||
| 1184 | if (!address_ok(regs, ea, 8)) | ||
| 1185 | return 0; | ||
| 1186 | err = 0; | ||
| 1187 | __cacheop_user_asmx(ea, err, "dcbst"); | ||
| 1188 | if (err) | ||
| 1189 | return 0; | ||
| 1190 | goto instr_done; | ||
| 1191 | |||
| 1192 | case 86: /* dcbf */ | ||
| 1193 | ea = xform_ea(instr, regs, 0); | ||
| 1194 | if (!address_ok(regs, ea, 8)) | ||
| 1195 | return 0; | ||
| 1196 | err = 0; | ||
| 1197 | __cacheop_user_asmx(ea, err, "dcbf"); | ||
| 1198 | if (err) | ||
| 1199 | return 0; | ||
| 1200 | goto instr_done; | ||
| 1201 | |||
| 1202 | case 246: /* dcbtst */ | ||
| 1203 | if (rd == 0) { | ||
| 1204 | ea = xform_ea(instr, regs, 0); | ||
| 1205 | prefetchw((void *) ea); | ||
| 1206 | } | ||
| 1207 | goto instr_done; | ||
| 1208 | |||
| 1209 | case 278: /* dcbt */ | ||
| 1210 | if (rd == 0) { | ||
| 1211 | ea = xform_ea(instr, regs, 0); | ||
| 1212 | prefetch((void *) ea); | ||
| 1213 | } | ||
| 1214 | goto instr_done; | ||
| 1215 | |||
| 200 | } | 1216 | } |
| 1217 | break; | ||
| 201 | } | 1218 | } |
| 202 | return 0; | 1219 | |
| 1220 | /* | ||
| 1221 | * Following cases are for loads and stores, so bail out | ||
| 1222 | * if we're in little-endian mode. | ||
| 1223 | */ | ||
| 1224 | if (regs->msr & MSR_LE) | ||
| 1225 | return 0; | ||
| 1226 | |||
| 1227 | /* | ||
| 1228 | * Save register RA in case it's an update form load or store | ||
| 1229 | * and the access faults. | ||
| 1230 | */ | ||
| 1231 | old_ra = regs->gpr[ra]; | ||
| 1232 | |||
| 1233 | switch (opcode) { | ||
| 1234 | case 31: | ||
| 1235 | u = instr & 0x40; | ||
| 1236 | switch ((instr >> 1) & 0x3ff) { | ||
| 1237 | case 20: /* lwarx */ | ||
| 1238 | ea = xform_ea(instr, regs, 0); | ||
| 1239 | if (ea & 3) | ||
| 1240 | break; /* can't handle misaligned */ | ||
| 1241 | err = -EFAULT; | ||
| 1242 | if (!address_ok(regs, ea, 4)) | ||
| 1243 | goto ldst_done; | ||
| 1244 | err = 0; | ||
| 1245 | __get_user_asmx(val, ea, err, "lwarx"); | ||
| 1246 | if (!err) | ||
| 1247 | regs->gpr[rd] = val; | ||
| 1248 | goto ldst_done; | ||
| 1249 | |||
| 1250 | case 150: /* stwcx. */ | ||
| 1251 | ea = xform_ea(instr, regs, 0); | ||
| 1252 | if (ea & 3) | ||
| 1253 | break; /* can't handle misaligned */ | ||
| 1254 | err = -EFAULT; | ||
| 1255 | if (!address_ok(regs, ea, 4)) | ||
| 1256 | goto ldst_done; | ||
| 1257 | err = 0; | ||
| 1258 | __put_user_asmx(regs->gpr[rd], ea, err, "stwcx.", cr); | ||
| 1259 | if (!err) | ||
| 1260 | regs->ccr = (regs->ccr & 0x0fffffff) | | ||
| 1261 | (cr & 0xe0000000) | | ||
| 1262 | ((regs->xer >> 3) & 0x10000000); | ||
| 1263 | goto ldst_done; | ||
| 1264 | |||
| 1265 | #ifdef __powerpc64__ | ||
| 1266 | case 84: /* ldarx */ | ||
| 1267 | ea = xform_ea(instr, regs, 0); | ||
| 1268 | if (ea & 7) | ||
| 1269 | break; /* can't handle misaligned */ | ||
| 1270 | err = -EFAULT; | ||
| 1271 | if (!address_ok(regs, ea, 8)) | ||
| 1272 | goto ldst_done; | ||
| 1273 | err = 0; | ||
| 1274 | __get_user_asmx(val, ea, err, "ldarx"); | ||
| 1275 | if (!err) | ||
| 1276 | regs->gpr[rd] = val; | ||
| 1277 | goto ldst_done; | ||
| 1278 | |||
| 1279 | case 214: /* stdcx. */ | ||
| 1280 | ea = xform_ea(instr, regs, 0); | ||
| 1281 | if (ea & 7) | ||
| 1282 | break; /* can't handle misaligned */ | ||
| 1283 | err = -EFAULT; | ||
| 1284 | if (!address_ok(regs, ea, 8)) | ||
| 1285 | goto ldst_done; | ||
| 1286 | err = 0; | ||
| 1287 | __put_user_asmx(regs->gpr[rd], ea, err, "stdcx.", cr); | ||
| 1288 | if (!err) | ||
| 1289 | regs->ccr = (regs->ccr & 0x0fffffff) | | ||
| 1290 | (cr & 0xe0000000) | | ||
| 1291 | ((regs->xer >> 3) & 0x10000000); | ||
| 1292 | goto ldst_done; | ||
| 1293 | |||
| 1294 | case 21: /* ldx */ | ||
| 1295 | case 53: /* ldux */ | ||
| 1296 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1297 | 8, regs); | ||
| 1298 | goto ldst_done; | ||
| 1299 | #endif | ||
| 1300 | |||
| 1301 | case 23: /* lwzx */ | ||
| 1302 | case 55: /* lwzux */ | ||
| 1303 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1304 | 4, regs); | ||
| 1305 | goto ldst_done; | ||
| 1306 | |||
| 1307 | case 87: /* lbzx */ | ||
| 1308 | case 119: /* lbzux */ | ||
| 1309 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1310 | 1, regs); | ||
| 1311 | goto ldst_done; | ||
| 1312 | |||
| 1313 | #ifdef CONFIG_ALTIVEC | ||
| 1314 | case 103: /* lvx */ | ||
| 1315 | case 359: /* lvxl */ | ||
| 1316 | if (!(regs->msr & MSR_VEC)) | ||
| 1317 | break; | ||
| 1318 | ea = xform_ea(instr, regs, 0); | ||
| 1319 | err = do_vec_load(rd, do_lvx, ea, regs); | ||
| 1320 | goto ldst_done; | ||
| 1321 | |||
| 1322 | case 231: /* stvx */ | ||
| 1323 | case 487: /* stvxl */ | ||
| 1324 | if (!(regs->msr & MSR_VEC)) | ||
| 1325 | break; | ||
| 1326 | ea = xform_ea(instr, regs, 0); | ||
| 1327 | err = do_vec_store(rd, do_stvx, ea, regs); | ||
| 1328 | goto ldst_done; | ||
| 1329 | #endif /* CONFIG_ALTIVEC */ | ||
| 1330 | |||
| 1331 | #ifdef __powerpc64__ | ||
| 1332 | case 149: /* stdx */ | ||
| 1333 | case 181: /* stdux */ | ||
| 1334 | val = regs->gpr[rd]; | ||
| 1335 | err = write_mem(val, xform_ea(instr, regs, u), 8, regs); | ||
| 1336 | goto ldst_done; | ||
| 1337 | #endif | ||
| 1338 | |||
| 1339 | case 151: /* stwx */ | ||
| 1340 | case 183: /* stwux */ | ||
| 1341 | val = regs->gpr[rd]; | ||
| 1342 | err = write_mem(val, xform_ea(instr, regs, u), 4, regs); | ||
| 1343 | goto ldst_done; | ||
| 1344 | |||
| 1345 | case 215: /* stbx */ | ||
| 1346 | case 247: /* stbux */ | ||
| 1347 | val = regs->gpr[rd]; | ||
| 1348 | err = write_mem(val, xform_ea(instr, regs, u), 1, regs); | ||
| 1349 | goto ldst_done; | ||
| 1350 | |||
| 1351 | case 279: /* lhzx */ | ||
| 1352 | case 311: /* lhzux */ | ||
| 1353 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1354 | 2, regs); | ||
| 1355 | goto ldst_done; | ||
| 1356 | |||
| 1357 | #ifdef __powerpc64__ | ||
| 1358 | case 341: /* lwax */ | ||
| 1359 | case 373: /* lwaux */ | ||
| 1360 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1361 | 4, regs); | ||
| 1362 | if (!err) | ||
| 1363 | regs->gpr[rd] = (signed int) regs->gpr[rd]; | ||
| 1364 | goto ldst_done; | ||
| 1365 | #endif | ||
| 1366 | |||
| 1367 | case 343: /* lhax */ | ||
| 1368 | case 375: /* lhaux */ | ||
| 1369 | err = read_mem(®s->gpr[rd], xform_ea(instr, regs, u), | ||
| 1370 | 2, regs); | ||
| 1371 | if (!err) | ||
| 1372 | regs->gpr[rd] = (signed short) regs->gpr[rd]; | ||
| 1373 | goto ldst_done; | ||
| 1374 | |||
| 1375 | case 407: /* sthx */ | ||
| 1376 | case 439: /* sthux */ | ||
| 1377 | val = regs->gpr[rd]; | ||
| 1378 | err = write_mem(val, xform_ea(instr, regs, u), 2, regs); | ||
| 1379 | goto ldst_done; | ||
| 1380 | |||
| 1381 | #ifdef __powerpc64__ | ||
| 1382 | case 532: /* ldbrx */ | ||
| 1383 | err = read_mem(&val, xform_ea(instr, regs, 0), 8, regs); | ||
| 1384 | if (!err) | ||
| 1385 | regs->gpr[rd] = byterev_8(val); | ||
| 1386 | goto ldst_done; | ||
| 1387 | |||
| 1388 | #endif | ||
| 1389 | |||
| 1390 | case 534: /* lwbrx */ | ||
| 1391 | err = read_mem(&val, xform_ea(instr, regs, 0), 4, regs); | ||
| 1392 | if (!err) | ||
| 1393 | regs->gpr[rd] = byterev_4(val); | ||
| 1394 | goto ldst_done; | ||
| 1395 | |||
| 1396 | case 535: /* lfsx */ | ||
| 1397 | case 567: /* lfsux */ | ||
| 1398 | if (!(regs->msr & MSR_FP)) | ||
| 1399 | break; | ||
| 1400 | ea = xform_ea(instr, regs, u); | ||
| 1401 | err = do_fp_load(rd, do_lfs, ea, 4, regs); | ||
| 1402 | goto ldst_done; | ||
| 1403 | |||
| 1404 | case 599: /* lfdx */ | ||
| 1405 | case 631: /* lfdux */ | ||
| 1406 | if (!(regs->msr & MSR_FP)) | ||
| 1407 | break; | ||
| 1408 | ea = xform_ea(instr, regs, u); | ||
| 1409 | err = do_fp_load(rd, do_lfd, ea, 8, regs); | ||
| 1410 | goto ldst_done; | ||
| 1411 | |||
| 1412 | case 663: /* stfsx */ | ||
| 1413 | case 695: /* stfsux */ | ||
| 1414 | if (!(regs->msr & MSR_FP)) | ||
| 1415 | break; | ||
| 1416 | ea = xform_ea(instr, regs, u); | ||
| 1417 | err = do_fp_store(rd, do_stfs, ea, 4, regs); | ||
| 1418 | goto ldst_done; | ||
| 1419 | |||
| 1420 | case 727: /* stfdx */ | ||
| 1421 | case 759: /* stfdux */ | ||
| 1422 | if (!(regs->msr & MSR_FP)) | ||
| 1423 | break; | ||
| 1424 | ea = xform_ea(instr, regs, u); | ||
| 1425 | err = do_fp_store(rd, do_stfd, ea, 8, regs); | ||
| 1426 | goto ldst_done; | ||
| 1427 | |||
| 1428 | #ifdef __powerpc64__ | ||
| 1429 | case 660: /* stdbrx */ | ||
| 1430 | val = byterev_8(regs->gpr[rd]); | ||
| 1431 | err = write_mem(val, xform_ea(instr, regs, 0), 8, regs); | ||
| 1432 | goto ldst_done; | ||
| 1433 | |||
| 1434 | #endif | ||
| 1435 | case 662: /* stwbrx */ | ||
| 1436 | val = byterev_4(regs->gpr[rd]); | ||
| 1437 | err = write_mem(val, xform_ea(instr, regs, 0), 4, regs); | ||
| 1438 | goto ldst_done; | ||
| 1439 | |||
| 1440 | case 790: /* lhbrx */ | ||
| 1441 | err = read_mem(&val, xform_ea(instr, regs, 0), 2, regs); | ||
| 1442 | if (!err) | ||
| 1443 | regs->gpr[rd] = byterev_2(val); | ||
| 1444 | goto ldst_done; | ||
| 1445 | |||
| 1446 | case 918: /* sthbrx */ | ||
| 1447 | val = byterev_2(regs->gpr[rd]); | ||
| 1448 | err = write_mem(val, xform_ea(instr, regs, 0), 2, regs); | ||
| 1449 | goto ldst_done; | ||
| 1450 | |||
| 1451 | #ifdef CONFIG_VSX | ||
| 1452 | case 844: /* lxvd2x */ | ||
| 1453 | case 876: /* lxvd2ux */ | ||
| 1454 | if (!(regs->msr & MSR_VSX)) | ||
| 1455 | break; | ||
| 1456 | rd |= (instr & 1) << 5; | ||
| 1457 | ea = xform_ea(instr, regs, u); | ||
| 1458 | err = do_vsx_load(rd, do_lxvd2x, ea, regs); | ||
| 1459 | goto ldst_done; | ||
| 1460 | |||
| 1461 | case 972: /* stxvd2x */ | ||
| 1462 | case 1004: /* stxvd2ux */ | ||
| 1463 | if (!(regs->msr & MSR_VSX)) | ||
| 1464 | break; | ||
| 1465 | rd |= (instr & 1) << 5; | ||
| 1466 | ea = xform_ea(instr, regs, u); | ||
| 1467 | err = do_vsx_store(rd, do_stxvd2x, ea, regs); | ||
| 1468 | goto ldst_done; | ||
| 1469 | |||
| 1470 | #endif /* CONFIG_VSX */ | ||
| 1471 | } | ||
| 1472 | break; | ||
| 1473 | |||
| 1474 | case 32: /* lwz */ | ||
| 1475 | case 33: /* lwzu */ | ||
| 1476 | err = read_mem(®s->gpr[rd], dform_ea(instr, regs), 4, regs); | ||
| 1477 | goto ldst_done; | ||
| 1478 | |||
| 1479 | case 34: /* lbz */ | ||
| 1480 | case 35: /* lbzu */ | ||
| 1481 | err = read_mem(®s->gpr[rd], dform_ea(instr, regs), 1, regs); | ||
| 1482 | goto ldst_done; | ||
| 1483 | |||
| 1484 | case 36: /* stw */ | ||
| 1485 | case 37: /* stwu */ | ||
| 1486 | val = regs->gpr[rd]; | ||
| 1487 | err = write_mem(val, dform_ea(instr, regs), 4, regs); | ||
| 1488 | goto ldst_done; | ||
| 1489 | |||
| 1490 | case 38: /* stb */ | ||
| 1491 | case 39: /* stbu */ | ||
| 1492 | val = regs->gpr[rd]; | ||
| 1493 | err = write_mem(val, dform_ea(instr, regs), 1, regs); | ||
| 1494 | goto ldst_done; | ||
| 1495 | |||
| 1496 | case 40: /* lhz */ | ||
| 1497 | case 41: /* lhzu */ | ||
| 1498 | err = read_mem(®s->gpr[rd], dform_ea(instr, regs), 2, regs); | ||
| 1499 | goto ldst_done; | ||
| 1500 | |||
| 1501 | case 42: /* lha */ | ||
| 1502 | case 43: /* lhau */ | ||
| 1503 | err = read_mem(®s->gpr[rd], dform_ea(instr, regs), 2, regs); | ||
| 1504 | if (!err) | ||
| 1505 | regs->gpr[rd] = (signed short) regs->gpr[rd]; | ||
| 1506 | goto ldst_done; | ||
| 1507 | |||
| 1508 | case 44: /* sth */ | ||
| 1509 | case 45: /* sthu */ | ||
| 1510 | val = regs->gpr[rd]; | ||
| 1511 | err = write_mem(val, dform_ea(instr, regs), 2, regs); | ||
| 1512 | goto ldst_done; | ||
| 1513 | |||
| 1514 | case 46: /* lmw */ | ||
| 1515 | ra = (instr >> 16) & 0x1f; | ||
| 1516 | if (ra >= rd) | ||
| 1517 | break; /* invalid form, ra in range to load */ | ||
| 1518 | ea = dform_ea(instr, regs); | ||
| 1519 | do { | ||
| 1520 | err = read_mem(®s->gpr[rd], ea, 4, regs); | ||
| 1521 | if (err) | ||
| 1522 | return 0; | ||
| 1523 | ea += 4; | ||
| 1524 | } while (++rd < 32); | ||
| 1525 | goto instr_done; | ||
| 1526 | |||
| 1527 | case 47: /* stmw */ | ||
| 1528 | ea = dform_ea(instr, regs); | ||
| 1529 | do { | ||
| 1530 | err = write_mem(regs->gpr[rd], ea, 4, regs); | ||
| 1531 | if (err) | ||
| 1532 | return 0; | ||
| 1533 | ea += 4; | ||
| 1534 | } while (++rd < 32); | ||
| 1535 | goto instr_done; | ||
| 1536 | |||
| 1537 | case 48: /* lfs */ | ||
| 1538 | case 49: /* lfsu */ | ||
| 1539 | if (!(regs->msr & MSR_FP)) | ||
| 1540 | break; | ||
| 1541 | ea = dform_ea(instr, regs); | ||
| 1542 | err = do_fp_load(rd, do_lfs, ea, 4, regs); | ||
| 1543 | goto ldst_done; | ||
| 1544 | |||
| 1545 | case 50: /* lfd */ | ||
| 1546 | case 51: /* lfdu */ | ||
| 1547 | if (!(regs->msr & MSR_FP)) | ||
| 1548 | break; | ||
| 1549 | ea = dform_ea(instr, regs); | ||
| 1550 | err = do_fp_load(rd, do_lfd, ea, 8, regs); | ||
| 1551 | goto ldst_done; | ||
| 1552 | |||
| 1553 | case 52: /* stfs */ | ||
| 1554 | case 53: /* stfsu */ | ||
| 1555 | if (!(regs->msr & MSR_FP)) | ||
| 1556 | break; | ||
| 1557 | ea = dform_ea(instr, regs); | ||
| 1558 | err = do_fp_store(rd, do_stfs, ea, 4, regs); | ||
| 1559 | goto ldst_done; | ||
| 1560 | |||
| 1561 | case 54: /* stfd */ | ||
| 1562 | case 55: /* stfdu */ | ||
| 1563 | if (!(regs->msr & MSR_FP)) | ||
| 1564 | break; | ||
| 1565 | ea = dform_ea(instr, regs); | ||
| 1566 | err = do_fp_store(rd, do_stfd, ea, 8, regs); | ||
| 1567 | goto ldst_done; | ||
| 1568 | |||
| 1569 | #ifdef __powerpc64__ | ||
| 1570 | case 58: /* ld[u], lwa */ | ||
| 1571 | switch (instr & 3) { | ||
| 1572 | case 0: /* ld */ | ||
| 1573 | err = read_mem(®s->gpr[rd], dsform_ea(instr, regs), | ||
| 1574 | 8, regs); | ||
| 1575 | goto ldst_done; | ||
| 1576 | case 1: /* ldu */ | ||
| 1577 | err = read_mem(®s->gpr[rd], dsform_ea(instr, regs), | ||
| 1578 | 8, regs); | ||
| 1579 | goto ldst_done; | ||
| 1580 | case 2: /* lwa */ | ||
| 1581 | err = read_mem(®s->gpr[rd], dsform_ea(instr, regs), | ||
| 1582 | 4, regs); | ||
| 1583 | if (!err) | ||
| 1584 | regs->gpr[rd] = (signed int) regs->gpr[rd]; | ||
| 1585 | goto ldst_done; | ||
| 1586 | } | ||
| 1587 | break; | ||
| 1588 | |||
| 1589 | case 62: /* std[u] */ | ||
| 1590 | val = regs->gpr[rd]; | ||
| 1591 | switch (instr & 3) { | ||
| 1592 | case 0: /* std */ | ||
| 1593 | err = write_mem(val, dsform_ea(instr, regs), 8, regs); | ||
| 1594 | goto ldst_done; | ||
| 1595 | case 1: /* stdu */ | ||
| 1596 | err = write_mem(val, dsform_ea(instr, regs), 8, regs); | ||
| 1597 | goto ldst_done; | ||
| 1598 | } | ||
| 1599 | break; | ||
| 1600 | #endif /* __powerpc64__ */ | ||
| 1601 | |||
| 1602 | } | ||
| 1603 | err = -EINVAL; | ||
| 1604 | |||
| 1605 | ldst_done: | ||
| 1606 | if (err) { | ||
| 1607 | regs->gpr[ra] = old_ra; | ||
| 1608 | return 0; /* invoke DSI if -EFAULT? */ | ||
| 1609 | } | ||
| 1610 | instr_done: | ||
| 1611 | regs->nip += 4; | ||
| 1612 | #ifdef __powerpc64__ | ||
| 1613 | if ((regs->msr & MSR_SF) == 0) | ||
| 1614 | regs->nip &= 0xffffffffUL; | ||
| 1615 | #endif | ||
| 1616 | return 1; | ||
| 1617 | |||
| 1618 | logical_done: | ||
| 1619 | if (instr & 1) | ||
| 1620 | set_cr0(regs, ra); | ||
| 1621 | goto instr_done; | ||
| 1622 | |||
| 1623 | arith_done: | ||
| 1624 | if (instr & 1) | ||
| 1625 | set_cr0(regs, rd); | ||
| 1626 | goto instr_done; | ||
| 203 | } | 1627 | } |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index cdc7526e9c93..4b66a1ece6d8 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
| @@ -104,9 +104,10 @@ unsigned long p_mapped_by_tlbcam(phys_addr_t pa) | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | /* | 106 | /* |
| 107 | * Set up one of the I/D BAT (block address translation) register pairs. | 107 | * Set up a variable-size TLB entry (tlbcam). The parameters are not checked; |
| 108 | * The parameters are not checked; in particular size must be a power | 108 | * in particular size must be a power of 4 between 4k and 256M (or 1G, for cpus |
| 109 | * of 4 between 4k and 256M. | 109 | * that support extended page sizes). Note that while some cpus support a |
| 110 | * page size of 4G, we don't allow its use here. | ||
| 110 | */ | 111 | */ |
| 111 | static void settlbcam(int index, unsigned long virt, phys_addr_t phys, | 112 | static void settlbcam(int index, unsigned long virt, phys_addr_t phys, |
| 112 | unsigned long size, unsigned long flags, unsigned int pid) | 113 | unsigned long size, unsigned long flags, unsigned int pid) |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index aa731af720c0..002878ccf90b 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -42,6 +42,12 @@ EXPORT_SYMBOL(node_data); | |||
| 42 | 42 | ||
| 43 | static int min_common_depth; | 43 | static int min_common_depth; |
| 44 | static int n_mem_addr_cells, n_mem_size_cells; | 44 | static int n_mem_addr_cells, n_mem_size_cells; |
| 45 | static int form1_affinity; | ||
| 46 | |||
| 47 | #define MAX_DISTANCE_REF_POINTS 4 | ||
| 48 | static int distance_ref_points_depth; | ||
| 49 | static const unsigned int *distance_ref_points; | ||
| 50 | static int distance_lookup_table[MAX_NUMNODES][MAX_DISTANCE_REF_POINTS]; | ||
| 45 | 51 | ||
| 46 | /* | 52 | /* |
| 47 | * Allocate node_to_cpumask_map based on number of available nodes | 53 | * Allocate node_to_cpumask_map based on number of available nodes |
| @@ -204,6 +210,39 @@ static const u32 *of_get_usable_memory(struct device_node *memory) | |||
| 204 | return prop; | 210 | return prop; |
| 205 | } | 211 | } |
| 206 | 212 | ||
| 213 | int __node_distance(int a, int b) | ||
| 214 | { | ||
| 215 | int i; | ||
| 216 | int distance = LOCAL_DISTANCE; | ||
| 217 | |||
| 218 | if (!form1_affinity) | ||
| 219 | return distance; | ||
| 220 | |||
| 221 | for (i = 0; i < distance_ref_points_depth; i++) { | ||
| 222 | if (distance_lookup_table[a][i] == distance_lookup_table[b][i]) | ||
| 223 | break; | ||
| 224 | |||
| 225 | /* Double the distance for each NUMA level */ | ||
| 226 | distance *= 2; | ||
| 227 | } | ||
| 228 | |||
| 229 | return distance; | ||
| 230 | } | ||
| 231 | |||
| 232 | static void initialize_distance_lookup_table(int nid, | ||
| 233 | const unsigned int *associativity) | ||
| 234 | { | ||
| 235 | int i; | ||
| 236 | |||
| 237 | if (!form1_affinity) | ||
| 238 | return; | ||
| 239 | |||
| 240 | for (i = 0; i < distance_ref_points_depth; i++) { | ||
| 241 | distance_lookup_table[nid][i] = | ||
| 242 | associativity[distance_ref_points[i]]; | ||
| 243 | } | ||
| 244 | } | ||
| 245 | |||
| 207 | /* Returns nid in the range [0..MAX_NUMNODES-1], or -1 if no useful numa | 246 | /* Returns nid in the range [0..MAX_NUMNODES-1], or -1 if no useful numa |
| 208 | * info is found. | 247 | * info is found. |
| 209 | */ | 248 | */ |
| @@ -225,6 +264,10 @@ static int of_node_to_nid_single(struct device_node *device) | |||
| 225 | /* POWER4 LPAR uses 0xffff as invalid node */ | 264 | /* POWER4 LPAR uses 0xffff as invalid node */ |
| 226 | if (nid == 0xffff || nid >= MAX_NUMNODES) | 265 | if (nid == 0xffff || nid >= MAX_NUMNODES) |
| 227 | nid = -1; | 266 | nid = -1; |
| 267 | |||
| 268 | if (nid > 0 && tmp[0] >= distance_ref_points_depth) | ||
| 269 | initialize_distance_lookup_table(nid, tmp); | ||
| 270 | |||
| 228 | out: | 271 | out: |
| 229 | return nid; | 272 | return nid; |
| 230 | } | 273 | } |
| @@ -251,26 +294,10 @@ int of_node_to_nid(struct device_node *device) | |||
| 251 | } | 294 | } |
| 252 | EXPORT_SYMBOL_GPL(of_node_to_nid); | 295 | EXPORT_SYMBOL_GPL(of_node_to_nid); |
| 253 | 296 | ||
| 254 | /* | ||
| 255 | * In theory, the "ibm,associativity" property may contain multiple | ||
| 256 | * associativity lists because a resource may be multiply connected | ||
| 257 | * into the machine. This resource then has different associativity | ||
| 258 | * characteristics relative to its multiple connections. We ignore | ||
| 259 | * this for now. We also assume that all cpu and memory sets have | ||
| 260 | * their distances represented at a common level. This won't be | ||
| 261 | * true for hierarchical NUMA. | ||
| 262 | * | ||
| 263 | * In any case the ibm,associativity-reference-points should give | ||
| 264 | * the correct depth for a normal NUMA system. | ||
| 265 | * | ||
| 266 | * - Dave Hansen <haveblue@us.ibm.com> | ||
| 267 | */ | ||
| 268 | static int __init find_min_common_depth(void) | 297 | static int __init find_min_common_depth(void) |
| 269 | { | 298 | { |
| 270 | int depth, index; | 299 | int depth; |
| 271 | const unsigned int *ref_points; | ||
| 272 | struct device_node *rtas_root; | 300 | struct device_node *rtas_root; |
| 273 | unsigned int len; | ||
| 274 | struct device_node *chosen; | 301 | struct device_node *chosen; |
| 275 | const char *vec5; | 302 | const char *vec5; |
| 276 | 303 | ||
| @@ -280,18 +307,28 @@ static int __init find_min_common_depth(void) | |||
| 280 | return -1; | 307 | return -1; |
| 281 | 308 | ||
| 282 | /* | 309 | /* |
| 283 | * this property is 2 32-bit integers, each representing a level of | 310 | * This property is a set of 32-bit integers, each representing |
| 284 | * depth in the associativity nodes. The first is for an SMP | 311 | * an index into the ibm,associativity nodes. |
| 285 | * configuration (should be all 0's) and the second is for a normal | 312 | * |
| 286 | * NUMA configuration. | 313 | * With form 0 affinity the first integer is for an SMP configuration |
| 314 | * (should be all 0's) and the second is for a normal NUMA | ||
| 315 | * configuration. We have only one level of NUMA. | ||
| 316 | * | ||
| 317 | * With form 1 affinity the first integer is the most significant | ||
| 318 | * NUMA boundary and the following are progressively less significant | ||
| 319 | * boundaries. There can be more than one level of NUMA. | ||
| 287 | */ | 320 | */ |
| 288 | index = 1; | 321 | distance_ref_points = of_get_property(rtas_root, |
| 289 | ref_points = of_get_property(rtas_root, | 322 | "ibm,associativity-reference-points", |
| 290 | "ibm,associativity-reference-points", &len); | 323 | &distance_ref_points_depth); |
| 324 | |||
| 325 | if (!distance_ref_points) { | ||
| 326 | dbg("NUMA: ibm,associativity-reference-points not found.\n"); | ||
| 327 | goto err; | ||
| 328 | } | ||
| 329 | |||
| 330 | distance_ref_points_depth /= sizeof(int); | ||
| 291 | 331 | ||
| 292 | /* | ||
| 293 | * For form 1 affinity information we want the first field | ||
| 294 | */ | ||
| 295 | #define VEC5_AFFINITY_BYTE 5 | 332 | #define VEC5_AFFINITY_BYTE 5 |
| 296 | #define VEC5_AFFINITY 0x80 | 333 | #define VEC5_AFFINITY 0x80 |
| 297 | chosen = of_find_node_by_path("/chosen"); | 334 | chosen = of_find_node_by_path("/chosen"); |
| @@ -299,19 +336,38 @@ static int __init find_min_common_depth(void) | |||
| 299 | vec5 = of_get_property(chosen, "ibm,architecture-vec-5", NULL); | 336 | vec5 = of_get_property(chosen, "ibm,architecture-vec-5", NULL); |
| 300 | if (vec5 && (vec5[VEC5_AFFINITY_BYTE] & VEC5_AFFINITY)) { | 337 | if (vec5 && (vec5[VEC5_AFFINITY_BYTE] & VEC5_AFFINITY)) { |
| 301 | dbg("Using form 1 affinity\n"); | 338 | dbg("Using form 1 affinity\n"); |
| 302 | index = 0; | 339 | form1_affinity = 1; |
| 303 | } | 340 | } |
| 304 | } | 341 | } |
| 305 | 342 | ||
| 306 | if ((len >= 2 * sizeof(unsigned int)) && ref_points) { | 343 | if (form1_affinity) { |
| 307 | depth = ref_points[index]; | 344 | depth = distance_ref_points[0]; |
| 308 | } else { | 345 | } else { |
| 309 | dbg("NUMA: ibm,associativity-reference-points not found.\n"); | 346 | if (distance_ref_points_depth < 2) { |
| 310 | depth = -1; | 347 | printk(KERN_WARNING "NUMA: " |
| 348 | "short ibm,associativity-reference-points\n"); | ||
| 349 | goto err; | ||
| 350 | } | ||
| 351 | |||
| 352 | depth = distance_ref_points[1]; | ||
| 311 | } | 353 | } |
| 312 | of_node_put(rtas_root); | ||
| 313 | 354 | ||
| 355 | /* | ||
| 356 | * Warn and cap if the hardware supports more than | ||
| 357 | * MAX_DISTANCE_REF_POINTS domains. | ||
| 358 | */ | ||
| 359 | if (distance_ref_points_depth > MAX_DISTANCE_REF_POINTS) { | ||
| 360 | printk(KERN_WARNING "NUMA: distance array capped at " | ||
| 361 | "%d entries\n", MAX_DISTANCE_REF_POINTS); | ||
| 362 | distance_ref_points_depth = MAX_DISTANCE_REF_POINTS; | ||
| 363 | } | ||
| 364 | |||
| 365 | of_node_put(rtas_root); | ||
| 314 | return depth; | 366 | return depth; |
| 367 | |||
| 368 | err: | ||
| 369 | of_node_put(rtas_root); | ||
| 370 | return -1; | ||
| 315 | } | 371 | } |
| 316 | 372 | ||
| 317 | static void __init get_n_mem_cells(int *n_addr_cells, int *n_size_cells) | 373 | static void __init get_n_mem_cells(int *n_addr_cells, int *n_size_cells) |
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c index ebc2f38eb381..2c7e801ab20b 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c | |||
| @@ -92,7 +92,6 @@ static void pte_free_rcu_callback(struct rcu_head *head) | |||
| 92 | 92 | ||
| 93 | static void pte_free_submit(struct pte_freelist_batch *batch) | 93 | static void pte_free_submit(struct pte_freelist_batch *batch) |
| 94 | { | 94 | { |
| 95 | INIT_RCU_HEAD(&batch->rcu); | ||
| 96 | call_rcu(&batch->rcu, pte_free_rcu_callback); | 95 | call_rcu(&batch->rcu, pte_free_rcu_callback); |
| 97 | } | 96 | } |
| 98 | 97 | ||
diff --git a/arch/powerpc/mm/tlb_hash32.c b/arch/powerpc/mm/tlb_hash32.c index 8aaa8b7eb324..690566b66e8e 100644 --- a/arch/powerpc/mm/tlb_hash32.c +++ b/arch/powerpc/mm/tlb_hash32.c | |||
| @@ -89,17 +89,6 @@ void tlb_flush(struct mmu_gather *tlb) | |||
| 89 | * -- Cort | 89 | * -- Cort |
| 90 | */ | 90 | */ |
| 91 | 91 | ||
| 92 | /* | ||
| 93 | * 750 SMP is a Bad Idea because the 750 doesn't broadcast all | ||
| 94 | * the cache operations on the bus. Hence we need to use an IPI | ||
| 95 | * to get the other CPU(s) to invalidate their TLBs. | ||
| 96 | */ | ||
| 97 | #ifdef CONFIG_SMP_750 | ||
| 98 | #define FINISH_FLUSH smp_send_tlb_invalidate(0) | ||
| 99 | #else | ||
| 100 | #define FINISH_FLUSH do { } while (0) | ||
| 101 | #endif | ||
| 102 | |||
| 103 | static void flush_range(struct mm_struct *mm, unsigned long start, | 92 | static void flush_range(struct mm_struct *mm, unsigned long start, |
| 104 | unsigned long end) | 93 | unsigned long end) |
| 105 | { | 94 | { |
| @@ -138,7 +127,6 @@ static void flush_range(struct mm_struct *mm, unsigned long start, | |||
| 138 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) | 127 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) |
| 139 | { | 128 | { |
| 140 | flush_range(&init_mm, start, end); | 129 | flush_range(&init_mm, start, end); |
| 141 | FINISH_FLUSH; | ||
| 142 | } | 130 | } |
| 143 | EXPORT_SYMBOL(flush_tlb_kernel_range); | 131 | EXPORT_SYMBOL(flush_tlb_kernel_range); |
| 144 | 132 | ||
| @@ -162,7 +150,6 @@ void flush_tlb_mm(struct mm_struct *mm) | |||
| 162 | */ | 150 | */ |
| 163 | for (mp = mm->mmap; mp != NULL; mp = mp->vm_next) | 151 | for (mp = mm->mmap; mp != NULL; mp = mp->vm_next) |
| 164 | flush_range(mp->vm_mm, mp->vm_start, mp->vm_end); | 152 | flush_range(mp->vm_mm, mp->vm_start, mp->vm_end); |
| 165 | FINISH_FLUSH; | ||
| 166 | } | 153 | } |
| 167 | EXPORT_SYMBOL(flush_tlb_mm); | 154 | EXPORT_SYMBOL(flush_tlb_mm); |
| 168 | 155 | ||
| @@ -179,7 +166,6 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr) | |||
| 179 | pmd = pmd_offset(pud_offset(pgd_offset(mm, vmaddr), vmaddr), vmaddr); | 166 | pmd = pmd_offset(pud_offset(pgd_offset(mm, vmaddr), vmaddr), vmaddr); |
| 180 | if (!pmd_none(*pmd)) | 167 | if (!pmd_none(*pmd)) |
| 181 | flush_hash_pages(mm->context.id, vmaddr, pmd_val(*pmd), 1); | 168 | flush_hash_pages(mm->context.id, vmaddr, pmd_val(*pmd), 1); |
| 182 | FINISH_FLUSH; | ||
| 183 | } | 169 | } |
| 184 | EXPORT_SYMBOL(flush_tlb_page); | 170 | EXPORT_SYMBOL(flush_tlb_page); |
| 185 | 171 | ||
| @@ -192,6 +178,5 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, | |||
| 192 | unsigned long end) | 178 | unsigned long end) |
| 193 | { | 179 | { |
| 194 | flush_range(vma->vm_mm, start, end); | 180 | flush_range(vma->vm_mm, start, end); |
| 195 | FINISH_FLUSH; | ||
| 196 | } | 181 | } |
| 197 | EXPORT_SYMBOL(flush_tlb_range); | 182 | EXPORT_SYMBOL(flush_tlb_range); |
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c index d8695b02a968..fe391e942521 100644 --- a/arch/powerpc/mm/tlb_nohash.c +++ b/arch/powerpc/mm/tlb_nohash.c | |||
| @@ -46,6 +46,7 @@ | |||
| 46 | struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT] = { | 46 | struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT] = { |
| 47 | [MMU_PAGE_4K] = { | 47 | [MMU_PAGE_4K] = { |
| 48 | .shift = 12, | 48 | .shift = 12, |
| 49 | .ind = 20, | ||
| 49 | .enc = BOOK3E_PAGESZ_4K, | 50 | .enc = BOOK3E_PAGESZ_4K, |
| 50 | }, | 51 | }, |
| 51 | [MMU_PAGE_16K] = { | 52 | [MMU_PAGE_16K] = { |
| @@ -54,6 +55,7 @@ struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT] = { | |||
| 54 | }, | 55 | }, |
| 55 | [MMU_PAGE_64K] = { | 56 | [MMU_PAGE_64K] = { |
| 56 | .shift = 16, | 57 | .shift = 16, |
| 58 | .ind = 28, | ||
| 57 | .enc = BOOK3E_PAGESZ_64K, | 59 | .enc = BOOK3E_PAGESZ_64K, |
| 58 | }, | 60 | }, |
| 59 | [MMU_PAGE_1M] = { | 61 | [MMU_PAGE_1M] = { |
| @@ -62,6 +64,7 @@ struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT] = { | |||
| 62 | }, | 64 | }, |
| 63 | [MMU_PAGE_16M] = { | 65 | [MMU_PAGE_16M] = { |
| 64 | .shift = 24, | 66 | .shift = 24, |
| 67 | .ind = 36, | ||
| 65 | .enc = BOOK3E_PAGESZ_16M, | 68 | .enc = BOOK3E_PAGESZ_16M, |
| 66 | }, | 69 | }, |
| 67 | [MMU_PAGE_256M] = { | 70 | [MMU_PAGE_256M] = { |
| @@ -344,16 +347,108 @@ void tlb_flush_pgtable(struct mmu_gather *tlb, unsigned long address) | |||
| 344 | } | 347 | } |
| 345 | } | 348 | } |
| 346 | 349 | ||
| 347 | /* | 350 | static void setup_page_sizes(void) |
| 348 | * Early initialization of the MMU TLB code | 351 | { |
| 349 | */ | 352 | unsigned int tlb0cfg = mfspr(SPRN_TLB0CFG); |
| 350 | static void __early_init_mmu(int boot_cpu) | 353 | unsigned int tlb0ps = mfspr(SPRN_TLB0PS); |
| 354 | unsigned int eptcfg = mfspr(SPRN_EPTCFG); | ||
| 355 | int i, psize; | ||
| 356 | |||
| 357 | /* Look for supported direct sizes */ | ||
| 358 | for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { | ||
| 359 | struct mmu_psize_def *def = &mmu_psize_defs[psize]; | ||
| 360 | |||
| 361 | if (tlb0ps & (1U << (def->shift - 10))) | ||
| 362 | def->flags |= MMU_PAGE_SIZE_DIRECT; | ||
| 363 | } | ||
| 364 | |||
| 365 | /* Indirect page sizes supported ? */ | ||
| 366 | if ((tlb0cfg & TLBnCFG_IND) == 0) | ||
| 367 | goto no_indirect; | ||
| 368 | |||
| 369 | /* Now, we only deal with one IND page size for each | ||
| 370 | * direct size. Hopefully all implementations today are | ||
| 371 | * unambiguous, but we might want to be careful in the | ||
| 372 | * future. | ||
| 373 | */ | ||
| 374 | for (i = 0; i < 3; i++) { | ||
| 375 | unsigned int ps, sps; | ||
| 376 | |||
| 377 | sps = eptcfg & 0x1f; | ||
| 378 | eptcfg >>= 5; | ||
| 379 | ps = eptcfg & 0x1f; | ||
| 380 | eptcfg >>= 5; | ||
| 381 | if (!ps || !sps) | ||
| 382 | continue; | ||
| 383 | for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { | ||
| 384 | struct mmu_psize_def *def = &mmu_psize_defs[psize]; | ||
| 385 | |||
| 386 | if (ps == (def->shift - 10)) | ||
| 387 | def->flags |= MMU_PAGE_SIZE_INDIRECT; | ||
| 388 | if (sps == (def->shift - 10)) | ||
| 389 | def->ind = ps + 10; | ||
| 390 | } | ||
| 391 | } | ||
| 392 | no_indirect: | ||
| 393 | |||
| 394 | /* Cleanup array and print summary */ | ||
| 395 | pr_info("MMU: Supported page sizes\n"); | ||
| 396 | for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { | ||
| 397 | struct mmu_psize_def *def = &mmu_psize_defs[psize]; | ||
| 398 | const char *__page_type_names[] = { | ||
| 399 | "unsupported", | ||
| 400 | "direct", | ||
| 401 | "indirect", | ||
| 402 | "direct & indirect" | ||
| 403 | }; | ||
| 404 | if (def->flags == 0) { | ||
| 405 | def->shift = 0; | ||
| 406 | continue; | ||
| 407 | } | ||
| 408 | pr_info(" %8ld KB as %s\n", 1ul << (def->shift - 10), | ||
| 409 | __page_type_names[def->flags & 0x3]); | ||
| 410 | } | ||
| 411 | } | ||
| 412 | |||
| 413 | static void setup_mmu_htw(void) | ||
| 351 | { | 414 | { |
| 352 | extern unsigned int interrupt_base_book3e; | 415 | extern unsigned int interrupt_base_book3e; |
| 353 | extern unsigned int exc_data_tlb_miss_htw_book3e; | 416 | extern unsigned int exc_data_tlb_miss_htw_book3e; |
| 354 | extern unsigned int exc_instruction_tlb_miss_htw_book3e; | 417 | extern unsigned int exc_instruction_tlb_miss_htw_book3e; |
| 355 | 418 | ||
| 356 | unsigned int *ibase = &interrupt_base_book3e; | 419 | unsigned int *ibase = &interrupt_base_book3e; |
| 420 | |||
| 421 | /* Check if HW tablewalk is present, and if yes, enable it by: | ||
| 422 | * | ||
| 423 | * - patching the TLB miss handlers to branch to the | ||
| 424 | * one dedicates to it | ||
| 425 | * | ||
| 426 | * - setting the global book3e_htw_enabled | ||
| 427 | */ | ||
| 428 | unsigned int tlb0cfg = mfspr(SPRN_TLB0CFG); | ||
| 429 | |||
| 430 | if ((tlb0cfg & TLBnCFG_IND) && | ||
| 431 | (tlb0cfg & TLBnCFG_PT)) { | ||
| 432 | /* Our exceptions vectors start with a NOP and -then- a branch | ||
| 433 | * to deal with single stepping from userspace which stops on | ||
| 434 | * the second instruction. Thus we need to patch the second | ||
| 435 | * instruction of the exception, not the first one | ||
| 436 | */ | ||
| 437 | patch_branch(ibase + (0x1c0 / 4) + 1, | ||
| 438 | (unsigned long)&exc_data_tlb_miss_htw_book3e, 0); | ||
| 439 | patch_branch(ibase + (0x1e0 / 4) + 1, | ||
| 440 | (unsigned long)&exc_instruction_tlb_miss_htw_book3e, 0); | ||
| 441 | book3e_htw_enabled = 1; | ||
| 442 | } | ||
| 443 | pr_info("MMU: Book3E Page Tables %s\n", | ||
| 444 | book3e_htw_enabled ? "Enabled" : "Disabled"); | ||
| 445 | } | ||
| 446 | |||
| 447 | /* | ||
| 448 | * Early initialization of the MMU TLB code | ||
| 449 | */ | ||
| 450 | static void __early_init_mmu(int boot_cpu) | ||
| 451 | { | ||
| 357 | unsigned int mas4; | 452 | unsigned int mas4; |
| 358 | 453 | ||
| 359 | /* XXX This will have to be decided at runtime, but right | 454 | /* XXX This will have to be decided at runtime, but right |
| @@ -370,35 +465,17 @@ static void __early_init_mmu(int boot_cpu) | |||
| 370 | */ | 465 | */ |
| 371 | mmu_vmemmap_psize = MMU_PAGE_16M; | 466 | mmu_vmemmap_psize = MMU_PAGE_16M; |
| 372 | 467 | ||
| 373 | /* Check if HW tablewalk is present, and if yes, enable it by: | ||
| 374 | * | ||
| 375 | * - patching the TLB miss handlers to branch to the | ||
| 376 | * one dedicates to it | ||
| 377 | * | ||
| 378 | * - setting the global book3e_htw_enabled | ||
| 379 | * | ||
| 380 | * - Set MAS4:INDD and default page size | ||
| 381 | */ | ||
| 382 | |||
| 383 | /* XXX This code only checks for TLB 0 capabilities and doesn't | 468 | /* XXX This code only checks for TLB 0 capabilities and doesn't |
| 384 | * check what page size combos are supported by the HW. It | 469 | * check what page size combos are supported by the HW. It |
| 385 | * also doesn't handle the case where a separate array holds | 470 | * also doesn't handle the case where a separate array holds |
| 386 | * the IND entries from the array loaded by the PT. | 471 | * the IND entries from the array loaded by the PT. |
| 387 | */ | 472 | */ |
| 388 | if (boot_cpu) { | 473 | if (boot_cpu) { |
| 389 | unsigned int tlb0cfg = mfspr(SPRN_TLB0CFG); | 474 | /* Look for supported page sizes */ |
| 475 | setup_page_sizes(); | ||
| 390 | 476 | ||
| 391 | /* Check if HW loader is supported */ | 477 | /* Look for HW tablewalk support */ |
| 392 | if ((tlb0cfg & TLBnCFG_IND) && | 478 | setup_mmu_htw(); |
| 393 | (tlb0cfg & TLBnCFG_PT)) { | ||
| 394 | patch_branch(ibase + (0x1c0 / 4), | ||
| 395 | (unsigned long)&exc_data_tlb_miss_htw_book3e, 0); | ||
| 396 | patch_branch(ibase + (0x1e0 / 4), | ||
| 397 | (unsigned long)&exc_instruction_tlb_miss_htw_book3e, 0); | ||
| 398 | book3e_htw_enabled = 1; | ||
| 399 | } | ||
| 400 | pr_info("MMU: Book3E Page Tables %s\n", | ||
| 401 | book3e_htw_enabled ? "Enabled" : "Disabled"); | ||
| 402 | } | 479 | } |
| 403 | 480 | ||
| 404 | /* Set MAS4 based on page table setting */ | 481 | /* Set MAS4 based on page table setting */ |
diff --git a/arch/powerpc/oprofile/Makefile b/arch/powerpc/oprofile/Makefile index 73e1c2ca0552..e219ca43962d 100644 --- a/arch/powerpc/oprofile/Makefile +++ b/arch/powerpc/oprofile/Makefile | |||
| @@ -16,6 +16,6 @@ oprofile-y := $(DRIVER_OBJS) common.o backtrace.o | |||
| 16 | oprofile-$(CONFIG_OPROFILE_CELL) += op_model_cell.o \ | 16 | oprofile-$(CONFIG_OPROFILE_CELL) += op_model_cell.o \ |
| 17 | cell/spu_profiler.o cell/vma_map.o \ | 17 | cell/spu_profiler.o cell/vma_map.o \ |
| 18 | cell/spu_task_sync.o | 18 | cell/spu_task_sync.o |
| 19 | oprofile-$(CONFIG_PPC64) += op_model_rs64.o op_model_power4.o op_model_pa6t.o | 19 | oprofile-$(CONFIG_PPC_BOOK3S_64) += op_model_rs64.o op_model_power4.o op_model_pa6t.o |
| 20 | oprofile-$(CONFIG_FSL_EMB_PERFMON) += op_model_fsl_emb.o | 20 | oprofile-$(CONFIG_FSL_EMB_PERFMON) += op_model_fsl_emb.o |
| 21 | oprofile-$(CONFIG_6xx) += op_model_7450.o | 21 | oprofile-$(CONFIG_6xx) += op_model_7450.o |
diff --git a/arch/powerpc/oprofile/common.c b/arch/powerpc/oprofile/common.c index 21f16edf6c8d..d65e68f3cb25 100644 --- a/arch/powerpc/oprofile/common.c +++ b/arch/powerpc/oprofile/common.c | |||
| @@ -199,7 +199,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) | |||
| 199 | return -ENODEV; | 199 | return -ENODEV; |
| 200 | 200 | ||
| 201 | switch (cur_cpu_spec->oprofile_type) { | 201 | switch (cur_cpu_spec->oprofile_type) { |
| 202 | #ifdef CONFIG_PPC64 | 202 | #ifdef CONFIG_PPC_BOOK3S_64 |
| 203 | #ifdef CONFIG_OPROFILE_CELL | 203 | #ifdef CONFIG_OPROFILE_CELL |
| 204 | case PPC_OPROFILE_CELL: | 204 | case PPC_OPROFILE_CELL: |
| 205 | if (firmware_has_feature(FW_FEATURE_LPAR)) | 205 | if (firmware_has_feature(FW_FEATURE_LPAR)) |
diff --git a/arch/powerpc/platforms/40x/Kconfig b/arch/powerpc/platforms/40x/Kconfig index ec64264f7a50..b72176434ebe 100644 --- a/arch/powerpc/platforms/40x/Kconfig +++ b/arch/powerpc/platforms/40x/Kconfig | |||
| @@ -71,22 +71,6 @@ config MAKALU | |||
| 71 | help | 71 | help |
| 72 | This option enables support for the AMCC PPC405EX board. | 72 | This option enables support for the AMCC PPC405EX board. |
| 73 | 73 | ||
| 74 | #config REDWOOD_5 | ||
| 75 | # bool "Redwood-5" | ||
| 76 | # depends on 40x | ||
| 77 | # default n | ||
| 78 | # select STB03xxx | ||
| 79 | # help | ||
| 80 | # This option enables support for the IBM STB04 evaluation board. | ||
| 81 | |||
| 82 | #config REDWOOD_6 | ||
| 83 | # bool "Redwood-6" | ||
| 84 | # depends on 40x | ||
| 85 | # default n | ||
| 86 | # select STB03xxx | ||
| 87 | # help | ||
| 88 | # This option enables support for the IBM STBx25xx evaluation board. | ||
| 89 | |||
| 90 | #config SYCAMORE | 74 | #config SYCAMORE |
| 91 | # bool "Sycamore" | 75 | # bool "Sycamore" |
| 92 | # depends on 40x | 76 | # depends on 40x |
diff --git a/arch/powerpc/platforms/512x/Kconfig b/arch/powerpc/platforms/512x/Kconfig index 4dac9b0525a4..27b0651221d1 100644 --- a/arch/powerpc/platforms/512x/Kconfig +++ b/arch/powerpc/platforms/512x/Kconfig | |||
| @@ -1,32 +1,34 @@ | |||
| 1 | config PPC_MPC512x | 1 | config PPC_MPC512x |
| 2 | bool | 2 | bool "512x-based boards" |
| 3 | depends on 6xx | ||
| 3 | select FSL_SOC | 4 | select FSL_SOC |
| 4 | select IPIC | 5 | select IPIC |
| 5 | select PPC_CLOCK | 6 | select PPC_CLOCK |
| 6 | select PPC_PCI_CHOICE | 7 | select PPC_PCI_CHOICE |
| 7 | select FSL_PCI if PCI | 8 | select FSL_PCI if PCI |
| 8 | 9 | ||
| 9 | config PPC_MPC5121 | ||
| 10 | bool | ||
| 11 | select PPC_MPC512x | ||
| 12 | |||
| 13 | config MPC5121_ADS | 10 | config MPC5121_ADS |
| 14 | bool "Freescale MPC5121E ADS" | 11 | bool "Freescale MPC5121E ADS" |
| 15 | depends on 6xx | 12 | depends on PPC_MPC512x |
| 16 | select DEFAULT_UIMAGE | 13 | select DEFAULT_UIMAGE |
| 17 | select PPC_MPC5121 | ||
| 18 | select MPC5121_ADS_CPLD | 14 | select MPC5121_ADS_CPLD |
| 19 | help | 15 | help |
| 20 | This option enables support for the MPC5121E ADS board. | 16 | This option enables support for the MPC5121E ADS board. |
| 21 | 17 | ||
| 22 | config MPC5121_GENERIC | 18 | config MPC5121_GENERIC |
| 23 | bool "Generic support for simple MPC5121 based boards" | 19 | bool "Generic support for simple MPC5121 based boards" |
| 24 | depends on 6xx | 20 | depends on PPC_MPC512x |
| 25 | select DEFAULT_UIMAGE | 21 | select DEFAULT_UIMAGE |
| 26 | select PPC_MPC5121 | ||
| 27 | help | 22 | help |
| 28 | This option enables support for simple MPC5121 based boards | 23 | This option enables support for simple MPC5121 based boards |
| 29 | which do not need custom platform specific setup. | 24 | which do not need custom platform specific setup. |
| 30 | 25 | ||
| 31 | Compatible boards include: Protonic LVT base boards (ZANMCU | 26 | Compatible boards include: Protonic LVT base boards (ZANMCU |
| 32 | and VICVT2). | 27 | and VICVT2). |
| 28 | |||
| 29 | config PDM360NG | ||
| 30 | bool "ifm PDM360NG board" | ||
| 31 | depends on PPC_MPC512x | ||
| 32 | select DEFAULT_UIMAGE | ||
| 33 | help | ||
| 34 | This option enables support for the PDM360NG board. | ||
diff --git a/arch/powerpc/platforms/512x/Makefile b/arch/powerpc/platforms/512x/Makefile index 90be2f5717e6..4efc1c4b6fb5 100644 --- a/arch/powerpc/platforms/512x/Makefile +++ b/arch/powerpc/platforms/512x/Makefile | |||
| @@ -4,3 +4,4 @@ | |||
| 4 | obj-y += clock.o mpc512x_shared.o | 4 | obj-y += clock.o mpc512x_shared.o |
| 5 | obj-$(CONFIG_MPC5121_ADS) += mpc5121_ads.o mpc5121_ads_cpld.o | 5 | obj-$(CONFIG_MPC5121_ADS) += mpc5121_ads.o mpc5121_ads_cpld.o |
| 6 | obj-$(CONFIG_MPC5121_GENERIC) += mpc5121_generic.o | 6 | obj-$(CONFIG_MPC5121_GENERIC) += mpc5121_generic.o |
| 7 | obj-$(CONFIG_PDM360NG) += pdm360ng.o | ||
diff --git a/arch/powerpc/platforms/512x/clock.c b/arch/powerpc/platforms/512x/clock.c index 4c42246b86a7..e1c5cd6650b1 100644 --- a/arch/powerpc/platforms/512x/clock.c +++ b/arch/powerpc/platforms/512x/clock.c | |||
| @@ -292,6 +292,15 @@ static void diu_clk_calc(struct clk *clk) | |||
| 292 | clk->rate = rate; | 292 | clk->rate = rate; |
| 293 | } | 293 | } |
| 294 | 294 | ||
| 295 | static void viu_clk_calc(struct clk *clk) | ||
| 296 | { | ||
| 297 | unsigned long rate; | ||
| 298 | |||
| 299 | rate = sys_clk.rate; | ||
| 300 | rate /= 2; | ||
| 301 | clk->rate = rate; | ||
| 302 | } | ||
| 303 | |||
| 295 | static void half_clk_calc(struct clk *clk) | 304 | static void half_clk_calc(struct clk *clk) |
| 296 | { | 305 | { |
| 297 | clk->rate = clk->parent->rate / 2; | 306 | clk->rate = clk->parent->rate / 2; |
| @@ -412,6 +421,14 @@ static struct clk diu_clk = { | |||
| 412 | .calc = diu_clk_calc, | 421 | .calc = diu_clk_calc, |
| 413 | }; | 422 | }; |
| 414 | 423 | ||
| 424 | static struct clk viu_clk = { | ||
| 425 | .name = "viu_clk", | ||
| 426 | .flags = CLK_HAS_CTRL, | ||
| 427 | .reg = 1, | ||
| 428 | .bit = 18, | ||
| 429 | .calc = viu_clk_calc, | ||
| 430 | }; | ||
| 431 | |||
| 415 | static struct clk axe_clk = { | 432 | static struct clk axe_clk = { |
| 416 | .name = "axe_clk", | 433 | .name = "axe_clk", |
| 417 | .flags = CLK_HAS_CTRL, | 434 | .flags = CLK_HAS_CTRL, |
| @@ -535,6 +552,7 @@ struct clk *rate_clks[] = { | |||
| 535 | &ref_clk, | 552 | &ref_clk, |
| 536 | &sys_clk, | 553 | &sys_clk, |
| 537 | &diu_clk, | 554 | &diu_clk, |
| 555 | &viu_clk, | ||
| 538 | &csb_clk, | 556 | &csb_clk, |
| 539 | &e300_clk, | 557 | &e300_clk, |
| 540 | &ips_clk, | 558 | &ips_clk, |
diff --git a/arch/powerpc/platforms/512x/mpc5121_ads.c b/arch/powerpc/platforms/512x/mpc5121_ads.c index ee6ae129c25c..dcef6ade48e1 100644 --- a/arch/powerpc/platforms/512x/mpc5121_ads.c +++ b/arch/powerpc/platforms/512x/mpc5121_ads.c | |||
| @@ -42,6 +42,7 @@ static void __init mpc5121_ads_setup_arch(void) | |||
| 42 | for_each_compatible_node(np, "pci", "fsl,mpc5121-pci") | 42 | for_each_compatible_node(np, "pci", "fsl,mpc5121-pci") |
| 43 | mpc83xx_add_bridge(np); | 43 | mpc83xx_add_bridge(np); |
| 44 | #endif | 44 | #endif |
| 45 | mpc512x_setup_diu(); | ||
| 45 | } | 46 | } |
| 46 | 47 | ||
| 47 | static void __init mpc5121_ads_init_IRQ(void) | 48 | static void __init mpc5121_ads_init_IRQ(void) |
| @@ -65,6 +66,7 @@ define_machine(mpc5121_ads) { | |||
| 65 | .probe = mpc5121_ads_probe, | 66 | .probe = mpc5121_ads_probe, |
| 66 | .setup_arch = mpc5121_ads_setup_arch, | 67 | .setup_arch = mpc5121_ads_setup_arch, |
| 67 | .init = mpc512x_init, | 68 | .init = mpc512x_init, |
| 69 | .init_early = mpc512x_init_diu, | ||
| 68 | .init_IRQ = mpc5121_ads_init_IRQ, | 70 | .init_IRQ = mpc5121_ads_init_IRQ, |
| 69 | .get_irq = ipic_get_irq, | 71 | .get_irq = ipic_get_irq, |
| 70 | .calibrate_decr = generic_calibrate_decr, | 72 | .calibrate_decr = generic_calibrate_decr, |
diff --git a/arch/powerpc/platforms/512x/mpc5121_generic.c b/arch/powerpc/platforms/512x/mpc5121_generic.c index a6c0e3a2615d..e487eb06ec6b 100644 --- a/arch/powerpc/platforms/512x/mpc5121_generic.c +++ b/arch/powerpc/platforms/512x/mpc5121_generic.c | |||
| @@ -52,6 +52,8 @@ define_machine(mpc5121_generic) { | |||
| 52 | .name = "MPC5121 generic", | 52 | .name = "MPC5121 generic", |
| 53 | .probe = mpc5121_generic_probe, | 53 | .probe = mpc5121_generic_probe, |
| 54 | .init = mpc512x_init, | 54 | .init = mpc512x_init, |
| 55 | .init_early = mpc512x_init_diu, | ||
| 56 | .setup_arch = mpc512x_setup_diu, | ||
| 55 | .init_IRQ = mpc512x_init_IRQ, | 57 | .init_IRQ = mpc512x_init_IRQ, |
| 56 | .get_irq = ipic_get_irq, | 58 | .get_irq = ipic_get_irq, |
| 57 | .calibrate_decr = generic_calibrate_decr, | 59 | .calibrate_decr = generic_calibrate_decr, |
diff --git a/arch/powerpc/platforms/512x/mpc512x.h b/arch/powerpc/platforms/512x/mpc512x.h index b2daca0d1488..1ab6d11d0b19 100644 --- a/arch/powerpc/platforms/512x/mpc512x.h +++ b/arch/powerpc/platforms/512x/mpc512x.h | |||
| @@ -16,4 +16,6 @@ extern void __init mpc512x_init(void); | |||
| 16 | extern int __init mpc5121_clk_init(void); | 16 | extern int __init mpc5121_clk_init(void); |
| 17 | void __init mpc512x_declare_of_platform_devices(void); | 17 | void __init mpc512x_declare_of_platform_devices(void); |
| 18 | extern void mpc512x_restart(char *cmd); | 18 | extern void mpc512x_restart(char *cmd); |
| 19 | extern void mpc512x_init_diu(void); | ||
| 20 | extern void mpc512x_setup_diu(void); | ||
| 19 | #endif /* __MPC512X_H__ */ | 21 | #endif /* __MPC512X_H__ */ |
diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c index 707e572b7c40..e41ebbdb3e12 100644 --- a/arch/powerpc/platforms/512x/mpc512x_shared.c +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c | |||
| @@ -16,7 +16,11 @@ | |||
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
| 18 | #include <linux/of_platform.h> | 18 | #include <linux/of_platform.h> |
| 19 | #include <linux/fsl-diu-fb.h> | ||
| 20 | #include <linux/bootmem.h> | ||
| 21 | #include <sysdev/fsl_soc.h> | ||
| 19 | 22 | ||
| 23 | #include <asm/cacheflush.h> | ||
| 20 | #include <asm/machdep.h> | 24 | #include <asm/machdep.h> |
| 21 | #include <asm/ipic.h> | 25 | #include <asm/ipic.h> |
| 22 | #include <asm/prom.h> | 26 | #include <asm/prom.h> |
| @@ -54,6 +58,286 @@ void mpc512x_restart(char *cmd) | |||
| 54 | ; | 58 | ; |
| 55 | } | 59 | } |
| 56 | 60 | ||
| 61 | struct fsl_diu_shared_fb { | ||
| 62 | u8 gamma[0x300]; /* 32-bit aligned! */ | ||
| 63 | struct diu_ad ad0; /* 32-bit aligned! */ | ||
| 64 | phys_addr_t fb_phys; | ||
| 65 | size_t fb_len; | ||
| 66 | bool in_use; | ||
| 67 | }; | ||
| 68 | |||
| 69 | unsigned int mpc512x_get_pixel_format(unsigned int bits_per_pixel, | ||
| 70 | int monitor_port) | ||
| 71 | { | ||
| 72 | switch (bits_per_pixel) { | ||
| 73 | case 32: | ||
| 74 | return 0x88883316; | ||
| 75 | case 24: | ||
| 76 | return 0x88082219; | ||
| 77 | case 16: | ||
| 78 | return 0x65053118; | ||
| 79 | } | ||
| 80 | return 0x00000400; | ||
| 81 | } | ||
| 82 | |||
| 83 | void mpc512x_set_gamma_table(int monitor_port, char *gamma_table_base) | ||
| 84 | { | ||
| 85 | } | ||
| 86 | |||
| 87 | void mpc512x_set_monitor_port(int monitor_port) | ||
| 88 | { | ||
| 89 | } | ||
| 90 | |||
| 91 | #define DIU_DIV_MASK 0x000000ff | ||
| 92 | void mpc512x_set_pixel_clock(unsigned int pixclock) | ||
| 93 | { | ||
| 94 | unsigned long bestval, bestfreq, speed, busfreq; | ||
| 95 | unsigned long minpixclock, maxpixclock, pixval; | ||
| 96 | struct mpc512x_ccm __iomem *ccm; | ||
| 97 | struct device_node *np; | ||
| 98 | u32 temp; | ||
| 99 | long err; | ||
| 100 | int i; | ||
| 101 | |||
| 102 | np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-clock"); | ||
| 103 | if (!np) { | ||
| 104 | pr_err("Can't find clock control module.\n"); | ||
| 105 | return; | ||
| 106 | } | ||
| 107 | |||
| 108 | ccm = of_iomap(np, 0); | ||
| 109 | of_node_put(np); | ||
| 110 | if (!ccm) { | ||
| 111 | pr_err("Can't map clock control module reg.\n"); | ||
| 112 | return; | ||
| 113 | } | ||
| 114 | |||
| 115 | np = of_find_node_by_type(NULL, "cpu"); | ||
| 116 | if (np) { | ||
| 117 | const unsigned int *prop = | ||
| 118 | of_get_property(np, "bus-frequency", NULL); | ||
| 119 | |||
| 120 | of_node_put(np); | ||
| 121 | if (prop) { | ||
| 122 | busfreq = *prop; | ||
| 123 | } else { | ||
| 124 | pr_err("Can't get bus-frequency property\n"); | ||
| 125 | return; | ||
| 126 | } | ||
| 127 | } else { | ||
| 128 | pr_err("Can't find 'cpu' node.\n"); | ||
| 129 | return; | ||
| 130 | } | ||
| 131 | |||
| 132 | /* Pixel Clock configuration */ | ||
| 133 | pr_debug("DIU: Bus Frequency = %lu\n", busfreq); | ||
| 134 | speed = busfreq * 4; /* DIU_DIV ratio is 4 * CSB_CLK / DIU_CLK */ | ||
| 135 | |||
| 136 | /* Calculate the pixel clock with the smallest error */ | ||
| 137 | /* calculate the following in steps to avoid overflow */ | ||
| 138 | pr_debug("DIU pixclock in ps - %d\n", pixclock); | ||
| 139 | temp = (1000000000 / pixclock) * 1000; | ||
| 140 | pixclock = temp; | ||
| 141 | pr_debug("DIU pixclock freq - %u\n", pixclock); | ||
| 142 | |||
| 143 | temp = temp / 20; /* pixclock * 0.05 */ | ||
| 144 | pr_debug("deviation = %d\n", temp); | ||
| 145 | minpixclock = pixclock - temp; | ||
| 146 | maxpixclock = pixclock + temp; | ||
| 147 | pr_debug("DIU minpixclock - %lu\n", minpixclock); | ||
| 148 | pr_debug("DIU maxpixclock - %lu\n", maxpixclock); | ||
| 149 | pixval = speed/pixclock; | ||
| 150 | pr_debug("DIU pixval = %lu\n", pixval); | ||
| 151 | |||
| 152 | err = LONG_MAX; | ||
| 153 | bestval = pixval; | ||
| 154 | pr_debug("DIU bestval = %lu\n", bestval); | ||
| 155 | |||
| 156 | bestfreq = 0; | ||
| 157 | for (i = -1; i <= 1; i++) { | ||
| 158 | temp = speed / (pixval+i); | ||
| 159 | pr_debug("DIU test pixval i=%d, pixval=%lu, temp freq. = %u\n", | ||
| 160 | i, pixval, temp); | ||
| 161 | if ((temp < minpixclock) || (temp > maxpixclock)) | ||
| 162 | pr_debug("DIU exceeds monitor range (%lu to %lu)\n", | ||
| 163 | minpixclock, maxpixclock); | ||
| 164 | else if (abs(temp - pixclock) < err) { | ||
| 165 | pr_debug("Entered the else if block %d\n", i); | ||
| 166 | err = abs(temp - pixclock); | ||
| 167 | bestval = pixval + i; | ||
| 168 | bestfreq = temp; | ||
| 169 | } | ||
| 170 | } | ||
| 171 | |||
| 172 | pr_debug("DIU chose = %lx\n", bestval); | ||
| 173 | pr_debug("DIU error = %ld\n NomPixClk ", err); | ||
| 174 | pr_debug("DIU: Best Freq = %lx\n", bestfreq); | ||
| 175 | /* Modify DIU_DIV in CCM SCFR1 */ | ||
| 176 | temp = in_be32(&ccm->scfr1); | ||
| 177 | pr_debug("DIU: Current value of SCFR1: 0x%08x\n", temp); | ||
| 178 | temp &= ~DIU_DIV_MASK; | ||
| 179 | temp |= (bestval & DIU_DIV_MASK); | ||
| 180 | out_be32(&ccm->scfr1, temp); | ||
| 181 | pr_debug("DIU: Modified value of SCFR1: 0x%08x\n", temp); | ||
| 182 | iounmap(ccm); | ||
| 183 | } | ||
| 184 | |||
| 185 | ssize_t mpc512x_show_monitor_port(int monitor_port, char *buf) | ||
| 186 | { | ||
| 187 | return sprintf(buf, "0 - 5121 LCD\n"); | ||
| 188 | } | ||
| 189 | |||
| 190 | int mpc512x_set_sysfs_monitor_port(int val) | ||
| 191 | { | ||
| 192 | return 0; | ||
| 193 | } | ||
| 194 | |||
| 195 | static struct fsl_diu_shared_fb __attribute__ ((__aligned__(8))) diu_shared_fb; | ||
| 196 | |||
| 197 | #if defined(CONFIG_FB_FSL_DIU) || \ | ||
| 198 | defined(CONFIG_FB_FSL_DIU_MODULE) | ||
| 199 | static inline void mpc512x_free_bootmem(struct page *page) | ||
| 200 | { | ||
| 201 | __ClearPageReserved(page); | ||
| 202 | BUG_ON(PageTail(page)); | ||
| 203 | BUG_ON(atomic_read(&page->_count) > 1); | ||
| 204 | atomic_set(&page->_count, 1); | ||
| 205 | __free_page(page); | ||
| 206 | totalram_pages++; | ||
| 207 | } | ||
| 208 | |||
| 209 | void mpc512x_release_bootmem(void) | ||
| 210 | { | ||
| 211 | unsigned long addr = diu_shared_fb.fb_phys & PAGE_MASK; | ||
| 212 | unsigned long size = diu_shared_fb.fb_len; | ||
| 213 | unsigned long start, end; | ||
| 214 | |||
| 215 | if (diu_shared_fb.in_use) { | ||
| 216 | start = PFN_UP(addr); | ||
| 217 | end = PFN_DOWN(addr + size); | ||
| 218 | |||
| 219 | for (; start < end; start++) | ||
| 220 | mpc512x_free_bootmem(pfn_to_page(start)); | ||
| 221 | |||
| 222 | diu_shared_fb.in_use = false; | ||
| 223 | } | ||
| 224 | diu_ops.release_bootmem = NULL; | ||
| 225 | } | ||
| 226 | #endif | ||
| 227 | |||
| 228 | /* | ||
| 229 | * Check if DIU was pre-initialized. If so, perform steps | ||
| 230 | * needed to continue displaying through the whole boot process. | ||
| 231 | * Move area descriptor and gamma table elsewhere, they are | ||
| 232 | * destroyed by bootmem allocator otherwise. The frame buffer | ||
| 233 | * address range will be reserved in setup_arch() after bootmem | ||
| 234 | * allocator is up. | ||
| 235 | */ | ||
| 236 | void __init mpc512x_init_diu(void) | ||
| 237 | { | ||
| 238 | struct device_node *np; | ||
| 239 | struct diu __iomem *diu_reg; | ||
| 240 | phys_addr_t desc; | ||
| 241 | void __iomem *vaddr; | ||
| 242 | unsigned long mode, pix_fmt, res, bpp; | ||
| 243 | unsigned long dst; | ||
| 244 | |||
| 245 | np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-diu"); | ||
| 246 | if (!np) { | ||
| 247 | pr_err("No DIU node\n"); | ||
| 248 | return; | ||
| 249 | } | ||
| 250 | |||
| 251 | diu_reg = of_iomap(np, 0); | ||
| 252 | of_node_put(np); | ||
| 253 | if (!diu_reg) { | ||
| 254 | pr_err("Can't map DIU\n"); | ||
| 255 | return; | ||
| 256 | } | ||
| 257 | |||
| 258 | mode = in_be32(&diu_reg->diu_mode); | ||
| 259 | if (mode != MFB_MODE1) { | ||
| 260 | pr_info("%s: DIU OFF\n", __func__); | ||
| 261 | goto out; | ||
| 262 | } | ||
| 263 | |||
| 264 | desc = in_be32(&diu_reg->desc[0]); | ||
| 265 | vaddr = ioremap(desc, sizeof(struct diu_ad)); | ||
| 266 | if (!vaddr) { | ||
| 267 | pr_err("Can't map DIU area desc.\n"); | ||
| 268 | goto out; | ||
| 269 | } | ||
| 270 | memcpy(&diu_shared_fb.ad0, vaddr, sizeof(struct diu_ad)); | ||
| 271 | /* flush fb area descriptor */ | ||
| 272 | dst = (unsigned long)&diu_shared_fb.ad0; | ||
| 273 | flush_dcache_range(dst, dst + sizeof(struct diu_ad) - 1); | ||
| 274 | |||
| 275 | res = in_be32(&diu_reg->disp_size); | ||
| 276 | pix_fmt = in_le32(vaddr); | ||
| 277 | bpp = ((pix_fmt >> 16) & 0x3) + 1; | ||
| 278 | diu_shared_fb.fb_phys = in_le32(vaddr + 4); | ||
| 279 | diu_shared_fb.fb_len = ((res & 0xfff0000) >> 16) * (res & 0xfff) * bpp; | ||
| 280 | diu_shared_fb.in_use = true; | ||
| 281 | iounmap(vaddr); | ||
| 282 | |||
| 283 | desc = in_be32(&diu_reg->gamma); | ||
| 284 | vaddr = ioremap(desc, sizeof(diu_shared_fb.gamma)); | ||
| 285 | if (!vaddr) { | ||
| 286 | pr_err("Can't map DIU area desc.\n"); | ||
| 287 | diu_shared_fb.in_use = false; | ||
| 288 | goto out; | ||
| 289 | } | ||
| 290 | memcpy(&diu_shared_fb.gamma, vaddr, sizeof(diu_shared_fb.gamma)); | ||
| 291 | /* flush gamma table */ | ||
| 292 | dst = (unsigned long)&diu_shared_fb.gamma; | ||
| 293 | flush_dcache_range(dst, dst + sizeof(diu_shared_fb.gamma) - 1); | ||
| 294 | |||
| 295 | iounmap(vaddr); | ||
| 296 | out_be32(&diu_reg->gamma, virt_to_phys(&diu_shared_fb.gamma)); | ||
| 297 | out_be32(&diu_reg->desc[1], 0); | ||
| 298 | out_be32(&diu_reg->desc[2], 0); | ||
| 299 | out_be32(&diu_reg->desc[0], virt_to_phys(&diu_shared_fb.ad0)); | ||
| 300 | |||
| 301 | out: | ||
| 302 | iounmap(diu_reg); | ||
| 303 | } | ||
| 304 | |||
| 305 | void __init mpc512x_setup_diu(void) | ||
| 306 | { | ||
| 307 | int ret; | ||
| 308 | |||
| 309 | /* | ||
| 310 | * We do not allocate and configure new area for bitmap buffer | ||
| 311 | * because it would requere copying bitmap data (splash image) | ||
| 312 | * and so negatively affect boot time. Instead we reserve the | ||
| 313 | * already configured frame buffer area so that it won't be | ||
| 314 | * destroyed. The starting address of the area to reserve and | ||
| 315 | * also it's length is passed to reserve_bootmem(). It will be | ||
| 316 | * freed later on first open of fbdev, when splash image is not | ||
| 317 | * needed any more. | ||
| 318 | */ | ||
| 319 | if (diu_shared_fb.in_use) { | ||
| 320 | ret = reserve_bootmem(diu_shared_fb.fb_phys, | ||
| 321 | diu_shared_fb.fb_len, | ||
| 322 | BOOTMEM_EXCLUSIVE); | ||
| 323 | if (ret) { | ||
| 324 | pr_err("%s: reserve bootmem failed\n", __func__); | ||
| 325 | diu_shared_fb.in_use = false; | ||
| 326 | } | ||
| 327 | } | ||
| 328 | |||
| 329 | #if defined(CONFIG_FB_FSL_DIU) || \ | ||
| 330 | defined(CONFIG_FB_FSL_DIU_MODULE) | ||
| 331 | diu_ops.get_pixel_format = mpc512x_get_pixel_format; | ||
| 332 | diu_ops.set_gamma_table = mpc512x_set_gamma_table; | ||
| 333 | diu_ops.set_monitor_port = mpc512x_set_monitor_port; | ||
| 334 | diu_ops.set_pixel_clock = mpc512x_set_pixel_clock; | ||
| 335 | diu_ops.show_monitor_port = mpc512x_show_monitor_port; | ||
| 336 | diu_ops.set_sysfs_monitor_port = mpc512x_set_sysfs_monitor_port; | ||
| 337 | diu_ops.release_bootmem = mpc512x_release_bootmem; | ||
| 338 | #endif | ||
| 339 | } | ||
| 340 | |||
| 57 | void __init mpc512x_init_IRQ(void) | 341 | void __init mpc512x_init_IRQ(void) |
| 58 | { | 342 | { |
| 59 | struct device_node *np; | 343 | struct device_node *np; |
diff --git a/arch/powerpc/platforms/512x/pdm360ng.c b/arch/powerpc/platforms/512x/pdm360ng.c new file mode 100644 index 000000000000..0575e858291c --- /dev/null +++ b/arch/powerpc/platforms/512x/pdm360ng.c | |||
| @@ -0,0 +1,129 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 DENX Software Engineering | ||
| 3 | * | ||
| 4 | * Anatolij Gustschin, <agust@denx.de> | ||
| 5 | * | ||
| 6 | * PDM360NG board setup | ||
| 7 | * | ||
| 8 | * This is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/io.h> | ||
| 17 | #include <linux/of_platform.h> | ||
| 18 | |||
| 19 | #include <asm/machdep.h> | ||
| 20 | #include <asm/ipic.h> | ||
| 21 | |||
| 22 | #include "mpc512x.h" | ||
| 23 | |||
| 24 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ | ||
| 25 | defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
| 26 | #include <linux/interrupt.h> | ||
| 27 | #include <linux/spi/ads7846.h> | ||
| 28 | #include <linux/spi/spi.h> | ||
| 29 | #include <linux/notifier.h> | ||
| 30 | |||
| 31 | static void *pdm360ng_gpio_base; | ||
| 32 | |||
| 33 | static int pdm360ng_get_pendown_state(void) | ||
| 34 | { | ||
| 35 | u32 reg; | ||
| 36 | |||
| 37 | reg = in_be32(pdm360ng_gpio_base + 0xc); | ||
| 38 | if (reg & 0x40) | ||
| 39 | setbits32(pdm360ng_gpio_base + 0xc, 0x40); | ||
| 40 | |||
| 41 | reg = in_be32(pdm360ng_gpio_base + 0x8); | ||
| 42 | |||
| 43 | /* return 1 if pen is down */ | ||
| 44 | return (reg & 0x40) == 0; | ||
| 45 | } | ||
| 46 | |||
| 47 | static struct ads7846_platform_data pdm360ng_ads7846_pdata = { | ||
| 48 | .model = 7845, | ||
| 49 | .get_pendown_state = pdm360ng_get_pendown_state, | ||
| 50 | .irq_flags = IRQF_TRIGGER_LOW, | ||
| 51 | }; | ||
| 52 | |||
| 53 | static int __init pdm360ng_penirq_init(void) | ||
| 54 | { | ||
| 55 | struct device_node *np; | ||
| 56 | |||
| 57 | np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-gpio"); | ||
| 58 | if (!np) { | ||
| 59 | pr_err("%s: Can't find 'mpc5121-gpio' node\n", __func__); | ||
| 60 | return -ENODEV; | ||
| 61 | } | ||
| 62 | |||
| 63 | pdm360ng_gpio_base = of_iomap(np, 0); | ||
| 64 | of_node_put(np); | ||
| 65 | if (!pdm360ng_gpio_base) { | ||
| 66 | pr_err("%s: Can't map gpio regs.\n", __func__); | ||
| 67 | return -ENODEV; | ||
| 68 | } | ||
| 69 | out_be32(pdm360ng_gpio_base + 0xc, 0xffffffff); | ||
| 70 | setbits32(pdm360ng_gpio_base + 0x18, 0x2000); | ||
| 71 | setbits32(pdm360ng_gpio_base + 0x10, 0x40); | ||
| 72 | |||
| 73 | return 0; | ||
| 74 | } | ||
| 75 | |||
| 76 | static int pdm360ng_touchscreen_notifier_call(struct notifier_block *nb, | ||
| 77 | unsigned long event, void *__dev) | ||
| 78 | { | ||
| 79 | struct device *dev = __dev; | ||
| 80 | |||
| 81 | if ((event == BUS_NOTIFY_ADD_DEVICE) && | ||
| 82 | of_device_is_compatible(dev->of_node, "ti,ads7846")) { | ||
| 83 | dev->platform_data = &pdm360ng_ads7846_pdata; | ||
| 84 | return NOTIFY_OK; | ||
| 85 | } | ||
| 86 | return NOTIFY_DONE; | ||
| 87 | } | ||
| 88 | |||
| 89 | static struct notifier_block pdm360ng_touchscreen_nb = { | ||
| 90 | .notifier_call = pdm360ng_touchscreen_notifier_call, | ||
| 91 | }; | ||
| 92 | |||
| 93 | static void __init pdm360ng_touchscreen_init(void) | ||
| 94 | { | ||
| 95 | if (pdm360ng_penirq_init()) | ||
| 96 | return; | ||
| 97 | |||
| 98 | bus_register_notifier(&spi_bus_type, &pdm360ng_touchscreen_nb); | ||
| 99 | } | ||
| 100 | #else | ||
| 101 | static inline void __init pdm360ng_touchscreen_init(void) | ||
| 102 | { | ||
| 103 | } | ||
| 104 | #endif /* CONFIG_TOUCHSCREEN_ADS7846 */ | ||
| 105 | |||
| 106 | void __init pdm360ng_init(void) | ||
| 107 | { | ||
| 108 | mpc512x_init(); | ||
| 109 | pdm360ng_touchscreen_init(); | ||
| 110 | } | ||
| 111 | |||
| 112 | static int __init pdm360ng_probe(void) | ||
| 113 | { | ||
| 114 | unsigned long root = of_get_flat_dt_root(); | ||
| 115 | |||
| 116 | return of_flat_dt_is_compatible(root, "ifm,pdm360ng"); | ||
| 117 | } | ||
| 118 | |||
| 119 | define_machine(pdm360ng) { | ||
| 120 | .name = "PDM360NG", | ||
| 121 | .probe = pdm360ng_probe, | ||
| 122 | .setup_arch = mpc512x_setup_diu, | ||
| 123 | .init = pdm360ng_init, | ||
| 124 | .init_early = mpc512x_init_diu, | ||
| 125 | .init_IRQ = mpc512x_init_IRQ, | ||
| 126 | .get_irq = ipic_get_irq, | ||
| 127 | .calibrate_decr = generic_calibrate_decr, | ||
| 128 | .restart = mpc512x_restart, | ||
| 129 | }; | ||
diff --git a/arch/powerpc/platforms/52xx/lite5200_pm.c b/arch/powerpc/platforms/52xx/lite5200_pm.c index b5c753db125e..80234e5921f5 100644 --- a/arch/powerpc/platforms/52xx/lite5200_pm.c +++ b/arch/powerpc/platforms/52xx/lite5200_pm.c | |||
| @@ -216,9 +216,6 @@ static int lite5200_pm_enter(suspend_state_t state) | |||
| 216 | 216 | ||
| 217 | lite5200_restore_regs(); | 217 | lite5200_restore_regs(); |
| 218 | 218 | ||
| 219 | /* restart jiffies */ | ||
| 220 | wakeup_decrementer(); | ||
| 221 | |||
| 222 | iounmap(mbar); | 219 | iounmap(mbar); |
| 223 | return 0; | 220 | return 0; |
| 224 | } | 221 | } |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pm.c b/arch/powerpc/platforms/52xx/mpc52xx_pm.c index 76722532bd95..568cef636275 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pm.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pm.c | |||
| @@ -171,9 +171,6 @@ int mpc52xx_pm_enter(suspend_state_t state) | |||
| 171 | /* restore SRAM */ | 171 | /* restore SRAM */ |
| 172 | memcpy(sram, saved_sram, sram_size); | 172 | memcpy(sram, saved_sram, sram_size); |
| 173 | 173 | ||
| 174 | /* restart jiffies */ | ||
| 175 | wakeup_decrementer(); | ||
| 176 | |||
| 177 | /* reenable interrupts in PIC */ | 174 | /* reenable interrupts in PIC */ |
| 178 | out_be32(&intr->main_mask, intr_main_mask); | 175 | out_be32(&intr->main_mask, intr_main_mask); |
| 179 | 176 | ||
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig index f49a2548c5ff..021763a32c2f 100644 --- a/arch/powerpc/platforms/83xx/Kconfig +++ b/arch/powerpc/platforms/83xx/Kconfig | |||
| @@ -9,6 +9,14 @@ menuconfig PPC_83xx | |||
| 9 | 9 | ||
| 10 | if PPC_83xx | 10 | if PPC_83xx |
| 11 | 11 | ||
| 12 | config MPC830x_RDB | ||
| 13 | bool "Freescale MPC830x RDB" | ||
| 14 | select DEFAULT_UIMAGE | ||
| 15 | select PPC_MPC831x | ||
| 16 | select FSL_GTM | ||
| 17 | help | ||
| 18 | This option enables support for the MPC8308 RDB board. | ||
| 19 | |||
| 12 | config MPC831x_RDB | 20 | config MPC831x_RDB |
| 13 | bool "Freescale MPC831x RDB" | 21 | bool "Freescale MPC831x RDB" |
| 14 | select DEFAULT_UIMAGE | 22 | select DEFAULT_UIMAGE |
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile index e139c36572ec..6e8bbbbcfdf8 100644 --- a/arch/powerpc/platforms/83xx/Makefile +++ b/arch/powerpc/platforms/83xx/Makefile | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | obj-y := misc.o usb.o | 4 | obj-y := misc.o usb.o |
| 5 | obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o | 5 | obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o |
| 6 | obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o | 6 | obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o |
| 7 | obj-$(CONFIG_MPC830x_RDB) += mpc830x_rdb.o | ||
| 7 | obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o | 8 | obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o |
| 8 | obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o | 9 | obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o |
| 9 | obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o | 10 | obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o |
diff --git a/arch/powerpc/platforms/83xx/mpc830x_rdb.c b/arch/powerpc/platforms/83xx/mpc830x_rdb.c new file mode 100644 index 000000000000..ac102ee9abe8 --- /dev/null +++ b/arch/powerpc/platforms/83xx/mpc830x_rdb.c | |||
| @@ -0,0 +1,94 @@ | |||
| 1 | /* | ||
| 2 | * arch/powerpc/platforms/83xx/mpc830x_rdb.c | ||
| 3 | * | ||
| 4 | * Description: MPC830x RDB board specific routines. | ||
| 5 | * This file is based on mpc831x_rdb.c | ||
| 6 | * | ||
| 7 | * Copyright (C) Freescale Semiconductor, Inc. 2009. All rights reserved. | ||
| 8 | * Copyright (C) 2010. Ilya Yanok, Emcraft Systems, yanok@emcraft.com | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify it | ||
| 11 | * under the terms of the GNU General Public License as published by the | ||
| 12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 13 | * option) any later version. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/pci.h> | ||
| 17 | #include <linux/of_platform.h> | ||
| 18 | #include <asm/time.h> | ||
| 19 | #include <asm/ipic.h> | ||
| 20 | #include <asm/udbg.h> | ||
| 21 | #include <sysdev/fsl_pci.h> | ||
| 22 | #include <sysdev/fsl_soc.h> | ||
| 23 | #include "mpc83xx.h" | ||
| 24 | |||
| 25 | /* | ||
| 26 | * Setup the architecture | ||
| 27 | */ | ||
| 28 | static void __init mpc830x_rdb_setup_arch(void) | ||
| 29 | { | ||
| 30 | #ifdef CONFIG_PCI | ||
| 31 | struct device_node *np; | ||
| 32 | #endif | ||
| 33 | |||
| 34 | if (ppc_md.progress) | ||
| 35 | ppc_md.progress("mpc830x_rdb_setup_arch()", 0); | ||
| 36 | |||
| 37 | #ifdef CONFIG_PCI | ||
| 38 | for_each_compatible_node(np, "pci", "fsl,mpc8308-pcie") | ||
| 39 | mpc83xx_add_bridge(np); | ||
| 40 | #endif | ||
| 41 | mpc831x_usb_cfg(); | ||
| 42 | } | ||
| 43 | |||
| 44 | static void __init mpc830x_rdb_init_IRQ(void) | ||
| 45 | { | ||
| 46 | struct device_node *np; | ||
| 47 | |||
| 48 | np = of_find_node_by_type(NULL, "ipic"); | ||
| 49 | if (!np) | ||
| 50 | return; | ||
| 51 | |||
| 52 | ipic_init(np, 0); | ||
| 53 | |||
| 54 | /* Initialize the default interrupt mapping priorities, | ||
| 55 | * in case the boot rom changed something on us. | ||
| 56 | */ | ||
| 57 | ipic_set_default_priority(); | ||
| 58 | } | ||
| 59 | |||
| 60 | /* | ||
| 61 | * Called very early, MMU is off, device-tree isn't unflattened | ||
| 62 | */ | ||
| 63 | static int __init mpc830x_rdb_probe(void) | ||
| 64 | { | ||
| 65 | unsigned long root = of_get_flat_dt_root(); | ||
| 66 | |||
| 67 | return of_flat_dt_is_compatible(root, "MPC8308RDB") || | ||
| 68 | of_flat_dt_is_compatible(root, "fsl,mpc8308rdb"); | ||
| 69 | } | ||
| 70 | |||
| 71 | static struct of_device_id __initdata of_bus_ids[] = { | ||
| 72 | { .compatible = "simple-bus" }, | ||
| 73 | { .compatible = "gianfar" }, | ||
| 74 | {}, | ||
| 75 | }; | ||
| 76 | |||
| 77 | static int __init declare_of_platform_devices(void) | ||
| 78 | { | ||
| 79 | of_platform_bus_probe(NULL, of_bus_ids, NULL); | ||
| 80 | return 0; | ||
| 81 | } | ||
| 82 | machine_device_initcall(mpc830x_rdb, declare_of_platform_devices); | ||
| 83 | |||
| 84 | define_machine(mpc830x_rdb) { | ||
| 85 | .name = "MPC830x RDB", | ||
| 86 | .probe = mpc830x_rdb_probe, | ||
| 87 | .setup_arch = mpc830x_rdb_setup_arch, | ||
| 88 | .init_IRQ = mpc830x_rdb_init_IRQ, | ||
| 89 | .get_irq = ipic_get_irq, | ||
| 90 | .restart = mpc83xx_restart, | ||
| 91 | .time_init = mpc83xx_time_init, | ||
| 92 | .calibrate_decr = generic_calibrate_decr, | ||
| 93 | .progress = udbg_progress, | ||
| 94 | }; | ||
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index 3a2ade2e443f..bea1f5905ad4 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig | |||
| @@ -65,6 +65,14 @@ config MPC85xx_RDB | |||
| 65 | help | 65 | help |
| 66 | This option enables support for the MPC85xx RDB (P2020 RDB) board | 66 | This option enables support for the MPC85xx RDB (P2020 RDB) board |
| 67 | 67 | ||
| 68 | config P1022_DS | ||
| 69 | bool "Freescale P1022 DS" | ||
| 70 | select DEFAULT_UIMAGE | ||
| 71 | select CONFIG_PHYS_64BIT # The DTS has 36-bit addresses | ||
| 72 | select SWIOTLB | ||
| 73 | help | ||
| 74 | This option enables support for the Freescale P1022DS reference board. | ||
| 75 | |||
| 68 | config SOCRATES | 76 | config SOCRATES |
| 69 | bool "Socrates" | 77 | bool "Socrates" |
| 70 | select DEFAULT_UIMAGE | 78 | select DEFAULT_UIMAGE |
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index 387c128f2c8c..a2ec3f8f4d06 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile | |||
| @@ -10,6 +10,7 @@ obj-$(CONFIG_MPC8536_DS) += mpc8536_ds.o | |||
| 10 | obj-$(CONFIG_MPC85xx_DS) += mpc85xx_ds.o | 10 | obj-$(CONFIG_MPC85xx_DS) += mpc85xx_ds.o |
| 11 | obj-$(CONFIG_MPC85xx_MDS) += mpc85xx_mds.o | 11 | obj-$(CONFIG_MPC85xx_MDS) += mpc85xx_mds.o |
| 12 | obj-$(CONFIG_MPC85xx_RDB) += mpc85xx_rdb.o | 12 | obj-$(CONFIG_MPC85xx_RDB) += mpc85xx_rdb.o |
| 13 | obj-$(CONFIG_P1022_DS) += p1022_ds.o | ||
| 13 | obj-$(CONFIG_P4080_DS) += p4080_ds.o corenet_ds.o | 14 | obj-$(CONFIG_P4080_DS) += p4080_ds.o corenet_ds.o |
| 14 | obj-$(CONFIG_STX_GP3) += stx_gp3.o | 15 | obj-$(CONFIG_STX_GP3) += stx_gp3.o |
| 15 | obj-$(CONFIG_TQM85xx) += tqm85xx.o | 16 | obj-$(CONFIG_TQM85xx) += tqm85xx.o |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index 494513682d70..da64be19d099 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c | |||
| @@ -158,51 +158,108 @@ static int mpc8568_mds_phy_fixups(struct phy_device *phydev) | |||
| 158 | extern void __init mpc85xx_smp_init(void); | 158 | extern void __init mpc85xx_smp_init(void); |
| 159 | #endif | 159 | #endif |
| 160 | 160 | ||
| 161 | static void __init mpc85xx_mds_setup_arch(void) | 161 | #ifdef CONFIG_QUICC_ENGINE |
| 162 | static struct of_device_id mpc85xx_qe_ids[] __initdata = { | ||
| 163 | { .type = "qe", }, | ||
| 164 | { .compatible = "fsl,qe", }, | ||
| 165 | { }, | ||
| 166 | }; | ||
| 167 | |||
| 168 | static void __init mpc85xx_publish_qe_devices(void) | ||
| 162 | { | 169 | { |
| 163 | struct device_node *np; | 170 | struct device_node *np; |
| 164 | static u8 __iomem *bcsr_regs = NULL; | ||
| 165 | #ifdef CONFIG_PCI | ||
| 166 | struct pci_controller *hose; | ||
| 167 | #endif | ||
| 168 | dma_addr_t max = 0xffffffff; | ||
| 169 | 171 | ||
| 170 | if (ppc_md.progress) | 172 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); |
| 171 | ppc_md.progress("mpc85xx_mds_setup_arch()", 0); | 173 | if (!of_device_is_available(np)) { |
| 174 | of_node_put(np); | ||
| 175 | return; | ||
| 176 | } | ||
| 177 | |||
| 178 | of_platform_bus_probe(NULL, mpc85xx_qe_ids, NULL); | ||
| 179 | } | ||
| 180 | |||
| 181 | static void __init mpc85xx_mds_reset_ucc_phys(void) | ||
| 182 | { | ||
| 183 | struct device_node *np; | ||
| 184 | static u8 __iomem *bcsr_regs; | ||
| 172 | 185 | ||
| 173 | /* Map BCSR area */ | 186 | /* Map BCSR area */ |
| 174 | np = of_find_node_by_name(NULL, "bcsr"); | 187 | np = of_find_node_by_name(NULL, "bcsr"); |
| 175 | if (np != NULL) { | 188 | if (!np) |
| 176 | struct resource res; | 189 | return; |
| 177 | 190 | ||
| 178 | of_address_to_resource(np, 0, &res); | 191 | bcsr_regs = of_iomap(np, 0); |
| 179 | bcsr_regs = ioremap(res.start, res.end - res.start +1); | 192 | of_node_put(np); |
| 180 | of_node_put(np); | 193 | if (!bcsr_regs) |
| 181 | } | 194 | return; |
| 182 | 195 | ||
| 183 | #ifdef CONFIG_PCI | 196 | if (machine_is(mpc8568_mds)) { |
| 184 | for_each_node_by_type(np, "pci") { | 197 | #define BCSR_UCC1_GETH_EN (0x1 << 7) |
| 185 | if (of_device_is_compatible(np, "fsl,mpc8540-pci") || | 198 | #define BCSR_UCC2_GETH_EN (0x1 << 7) |
| 186 | of_device_is_compatible(np, "fsl,mpc8548-pcie")) { | 199 | #define BCSR_UCC1_MODE_MSK (0x3 << 4) |
| 187 | struct resource rsrc; | 200 | #define BCSR_UCC2_MODE_MSK (0x3 << 0) |
| 188 | of_address_to_resource(np, 0, &rsrc); | ||
| 189 | if ((rsrc.start & 0xfffff) == 0x8000) | ||
| 190 | fsl_add_bridge(np, 1); | ||
| 191 | else | ||
| 192 | fsl_add_bridge(np, 0); | ||
| 193 | 201 | ||
| 194 | hose = pci_find_hose_for_OF_device(np); | 202 | /* Turn off UCC1 & UCC2 */ |
| 195 | max = min(max, hose->dma_window_base_cur + | 203 | clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); |
| 196 | hose->dma_window_size); | 204 | clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); |
| 205 | |||
| 206 | /* Mode is RGMII, all bits clear */ | ||
| 207 | clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK | | ||
| 208 | BCSR_UCC2_MODE_MSK); | ||
| 209 | |||
| 210 | /* Turn UCC1 & UCC2 on */ | ||
| 211 | setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); | ||
| 212 | setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); | ||
| 213 | } else if (machine_is(mpc8569_mds)) { | ||
| 214 | #define BCSR7_UCC12_GETHnRST (0x1 << 2) | ||
| 215 | #define BCSR8_UEM_MARVELL_RST (0x1 << 1) | ||
| 216 | #define BCSR_UCC_RGMII (0x1 << 6) | ||
| 217 | #define BCSR_UCC_RTBI (0x1 << 5) | ||
| 218 | /* | ||
| 219 | * U-Boot mangles interrupt polarity for Marvell PHYs, | ||
| 220 | * so reset built-in and UEM Marvell PHYs, this puts | ||
| 221 | * the PHYs into their normal state. | ||
| 222 | */ | ||
| 223 | clrbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); | ||
| 224 | setbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); | ||
| 225 | |||
| 226 | setbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); | ||
| 227 | clrbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); | ||
| 228 | |||
| 229 | for (np = NULL; (np = of_find_compatible_node(np, | ||
| 230 | "network", | ||
| 231 | "ucc_geth")) != NULL;) { | ||
| 232 | const unsigned int *prop; | ||
| 233 | int ucc_num; | ||
| 234 | |||
| 235 | prop = of_get_property(np, "cell-index", NULL); | ||
| 236 | if (prop == NULL) | ||
| 237 | continue; | ||
| 238 | |||
| 239 | ucc_num = *prop - 1; | ||
| 240 | |||
| 241 | prop = of_get_property(np, "phy-connection-type", NULL); | ||
| 242 | if (prop == NULL) | ||
| 243 | continue; | ||
| 244 | |||
| 245 | if (strcmp("rtbi", (const char *)prop) == 0) | ||
| 246 | clrsetbits_8(&bcsr_regs[7 + ucc_num], | ||
| 247 | BCSR_UCC_RGMII, BCSR_UCC_RTBI); | ||
| 197 | } | 248 | } |
| 249 | } else if (machine_is(p1021_mds)) { | ||
| 250 | #define BCSR11_ENET_MICRST (0x1 << 5) | ||
| 251 | /* Reset Micrel PHY */ | ||
| 252 | clrbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
| 253 | setbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
| 198 | } | 254 | } |
| 199 | #endif | ||
| 200 | 255 | ||
| 201 | #ifdef CONFIG_SMP | 256 | iounmap(bcsr_regs); |
| 202 | mpc85xx_smp_init(); | 257 | } |
| 203 | #endif | 258 | |
| 259 | static void __init mpc85xx_mds_qe_init(void) | ||
| 260 | { | ||
| 261 | struct device_node *np; | ||
| 204 | 262 | ||
| 205 | #ifdef CONFIG_QUICC_ENGINE | ||
| 206 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); | 263 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); |
| 207 | if (!np) { | 264 | if (!np) { |
| 208 | np = of_find_node_by_name(NULL, "qe"); | 265 | np = of_find_node_by_name(NULL, "qe"); |
| @@ -210,6 +267,11 @@ static void __init mpc85xx_mds_setup_arch(void) | |||
| 210 | return; | 267 | return; |
| 211 | } | 268 | } |
| 212 | 269 | ||
| 270 | if (!of_device_is_available(np)) { | ||
| 271 | of_node_put(np); | ||
| 272 | return; | ||
| 273 | } | ||
| 274 | |||
| 213 | qe_reset(); | 275 | qe_reset(); |
| 214 | of_node_put(np); | 276 | of_node_put(np); |
| 215 | 277 | ||
| @@ -224,70 +286,7 @@ static void __init mpc85xx_mds_setup_arch(void) | |||
| 224 | par_io_of_config(ucc); | 286 | par_io_of_config(ucc); |
| 225 | } | 287 | } |
| 226 | 288 | ||
| 227 | if (bcsr_regs) { | 289 | mpc85xx_mds_reset_ucc_phys(); |
| 228 | if (machine_is(mpc8568_mds)) { | ||
| 229 | #define BCSR_UCC1_GETH_EN (0x1 << 7) | ||
| 230 | #define BCSR_UCC2_GETH_EN (0x1 << 7) | ||
| 231 | #define BCSR_UCC1_MODE_MSK (0x3 << 4) | ||
| 232 | #define BCSR_UCC2_MODE_MSK (0x3 << 0) | ||
| 233 | |||
| 234 | /* Turn off UCC1 & UCC2 */ | ||
| 235 | clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); | ||
| 236 | clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); | ||
| 237 | |||
| 238 | /* Mode is RGMII, all bits clear */ | ||
| 239 | clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK | | ||
| 240 | BCSR_UCC2_MODE_MSK); | ||
| 241 | |||
| 242 | /* Turn UCC1 & UCC2 on */ | ||
| 243 | setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); | ||
| 244 | setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); | ||
| 245 | } else if (machine_is(mpc8569_mds)) { | ||
| 246 | #define BCSR7_UCC12_GETHnRST (0x1 << 2) | ||
| 247 | #define BCSR8_UEM_MARVELL_RST (0x1 << 1) | ||
| 248 | #define BCSR_UCC_RGMII (0x1 << 6) | ||
| 249 | #define BCSR_UCC_RTBI (0x1 << 5) | ||
| 250 | /* | ||
| 251 | * U-Boot mangles interrupt polarity for Marvell PHYs, | ||
| 252 | * so reset built-in and UEM Marvell PHYs, this puts | ||
| 253 | * the PHYs into their normal state. | ||
| 254 | */ | ||
| 255 | clrbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); | ||
| 256 | setbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); | ||
| 257 | |||
| 258 | setbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); | ||
| 259 | clrbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); | ||
| 260 | |||
| 261 | for (np = NULL; (np = of_find_compatible_node(np, | ||
| 262 | "network", | ||
| 263 | "ucc_geth")) != NULL;) { | ||
| 264 | const unsigned int *prop; | ||
| 265 | int ucc_num; | ||
| 266 | |||
| 267 | prop = of_get_property(np, "cell-index", NULL); | ||
| 268 | if (prop == NULL) | ||
| 269 | continue; | ||
| 270 | |||
| 271 | ucc_num = *prop - 1; | ||
| 272 | |||
| 273 | prop = of_get_property(np, "phy-connection-type", NULL); | ||
| 274 | if (prop == NULL) | ||
| 275 | continue; | ||
| 276 | |||
| 277 | if (strcmp("rtbi", (const char *)prop) == 0) | ||
| 278 | clrsetbits_8(&bcsr_regs[7 + ucc_num], | ||
| 279 | BCSR_UCC_RGMII, BCSR_UCC_RTBI); | ||
| 280 | } | ||
| 281 | |||
| 282 | } else if (machine_is(p1021_mds)) { | ||
| 283 | #define BCSR11_ENET_MICRST (0x1 << 5) | ||
| 284 | /* Reset Micrel PHY */ | ||
| 285 | clrbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
| 286 | setbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
| 287 | } | ||
| 288 | |||
| 289 | iounmap(bcsr_regs); | ||
| 290 | } | ||
| 291 | 290 | ||
| 292 | if (machine_is(p1021_mds)) { | 291 | if (machine_is(p1021_mds)) { |
| 293 | #define MPC85xx_PMUXCR_OFFSET 0x60 | 292 | #define MPC85xx_PMUXCR_OFFSET 0x60 |
| @@ -322,8 +321,72 @@ static void __init mpc85xx_mds_setup_arch(void) | |||
| 322 | } | 321 | } |
| 323 | 322 | ||
| 324 | } | 323 | } |
| 324 | } | ||
| 325 | |||
| 326 | static void __init mpc85xx_mds_qeic_init(void) | ||
| 327 | { | ||
| 328 | struct device_node *np; | ||
| 329 | |||
| 330 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); | ||
| 331 | if (!of_device_is_available(np)) { | ||
| 332 | of_node_put(np); | ||
| 333 | return; | ||
| 334 | } | ||
| 335 | |||
| 336 | np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic"); | ||
| 337 | if (!np) { | ||
| 338 | np = of_find_node_by_type(NULL, "qeic"); | ||
| 339 | if (!np) | ||
| 340 | return; | ||
| 341 | } | ||
| 342 | |||
| 343 | if (machine_is(p1021_mds)) | ||
| 344 | qe_ic_init(np, 0, qe_ic_cascade_low_mpic, | ||
| 345 | qe_ic_cascade_high_mpic); | ||
| 346 | else | ||
| 347 | qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL); | ||
| 348 | of_node_put(np); | ||
| 349 | } | ||
| 350 | #else | ||
| 351 | static void __init mpc85xx_publish_qe_devices(void) { } | ||
| 352 | static void __init mpc85xx_mds_qe_init(void) { } | ||
| 353 | static void __init mpc85xx_mds_qeic_init(void) { } | ||
| 325 | #endif /* CONFIG_QUICC_ENGINE */ | 354 | #endif /* CONFIG_QUICC_ENGINE */ |
| 326 | 355 | ||
| 356 | static void __init mpc85xx_mds_setup_arch(void) | ||
| 357 | { | ||
| 358 | #ifdef CONFIG_PCI | ||
| 359 | struct pci_controller *hose; | ||
| 360 | #endif | ||
| 361 | dma_addr_t max = 0xffffffff; | ||
| 362 | |||
| 363 | if (ppc_md.progress) | ||
| 364 | ppc_md.progress("mpc85xx_mds_setup_arch()", 0); | ||
| 365 | |||
| 366 | #ifdef CONFIG_PCI | ||
| 367 | for_each_node_by_type(np, "pci") { | ||
| 368 | if (of_device_is_compatible(np, "fsl,mpc8540-pci") || | ||
| 369 | of_device_is_compatible(np, "fsl,mpc8548-pcie")) { | ||
| 370 | struct resource rsrc; | ||
| 371 | of_address_to_resource(np, 0, &rsrc); | ||
| 372 | if ((rsrc.start & 0xfffff) == 0x8000) | ||
| 373 | fsl_add_bridge(np, 1); | ||
| 374 | else | ||
| 375 | fsl_add_bridge(np, 0); | ||
| 376 | |||
| 377 | hose = pci_find_hose_for_OF_device(np); | ||
| 378 | max = min(max, hose->dma_window_base_cur + | ||
| 379 | hose->dma_window_size); | ||
| 380 | } | ||
| 381 | } | ||
| 382 | #endif | ||
| 383 | |||
| 384 | #ifdef CONFIG_SMP | ||
| 385 | mpc85xx_smp_init(); | ||
| 386 | #endif | ||
| 387 | |||
| 388 | mpc85xx_mds_qe_init(); | ||
| 389 | |||
| 327 | #ifdef CONFIG_SWIOTLB | 390 | #ifdef CONFIG_SWIOTLB |
| 328 | if (memblock_end_of_DRAM() > max) { | 391 | if (memblock_end_of_DRAM() > max) { |
| 329 | ppc_swiotlb_enable = 1; | 392 | ppc_swiotlb_enable = 1; |
| @@ -369,8 +432,6 @@ static struct of_device_id mpc85xx_ids[] = { | |||
| 369 | { .type = "soc", }, | 432 | { .type = "soc", }, |
| 370 | { .compatible = "soc", }, | 433 | { .compatible = "soc", }, |
| 371 | { .compatible = "simple-bus", }, | 434 | { .compatible = "simple-bus", }, |
| 372 | { .type = "qe", }, | ||
| 373 | { .compatible = "fsl,qe", }, | ||
| 374 | { .compatible = "gianfar", }, | 435 | { .compatible = "gianfar", }, |
| 375 | { .compatible = "fsl,rapidio-delta", }, | 436 | { .compatible = "fsl,rapidio-delta", }, |
| 376 | { .compatible = "fsl,mpc8548-guts", }, | 437 | { .compatible = "fsl,mpc8548-guts", }, |
| @@ -382,8 +443,6 @@ static struct of_device_id p1021_ids[] = { | |||
| 382 | { .type = "soc", }, | 443 | { .type = "soc", }, |
| 383 | { .compatible = "soc", }, | 444 | { .compatible = "soc", }, |
| 384 | { .compatible = "simple-bus", }, | 445 | { .compatible = "simple-bus", }, |
| 385 | { .type = "qe", }, | ||
| 386 | { .compatible = "fsl,qe", }, | ||
| 387 | { .compatible = "gianfar", }, | 446 | { .compatible = "gianfar", }, |
| 388 | {}, | 447 | {}, |
| 389 | }; | 448 | }; |
| @@ -395,16 +454,16 @@ static int __init mpc85xx_publish_devices(void) | |||
| 395 | if (machine_is(mpc8569_mds)) | 454 | if (machine_is(mpc8569_mds)) |
| 396 | simple_gpiochip_init("fsl,mpc8569mds-bcsr-gpio"); | 455 | simple_gpiochip_init("fsl,mpc8569mds-bcsr-gpio"); |
| 397 | 456 | ||
| 398 | /* Publish the QE devices */ | ||
| 399 | of_platform_bus_probe(NULL, mpc85xx_ids, NULL); | 457 | of_platform_bus_probe(NULL, mpc85xx_ids, NULL); |
| 458 | mpc85xx_publish_qe_devices(); | ||
| 400 | 459 | ||
| 401 | return 0; | 460 | return 0; |
| 402 | } | 461 | } |
| 403 | 462 | ||
| 404 | static int __init p1021_publish_devices(void) | 463 | static int __init p1021_publish_devices(void) |
| 405 | { | 464 | { |
| 406 | /* Publish the QE devices */ | ||
| 407 | of_platform_bus_probe(NULL, p1021_ids, NULL); | 465 | of_platform_bus_probe(NULL, p1021_ids, NULL); |
| 466 | mpc85xx_publish_qe_devices(); | ||
| 408 | 467 | ||
| 409 | return 0; | 468 | return 0; |
| 410 | } | 469 | } |
| @@ -441,21 +500,7 @@ static void __init mpc85xx_mds_pic_init(void) | |||
| 441 | of_node_put(np); | 500 | of_node_put(np); |
| 442 | 501 | ||
| 443 | mpic_init(mpic); | 502 | mpic_init(mpic); |
| 444 | 503 | mpc85xx_mds_qeic_init(); | |
| 445 | #ifdef CONFIG_QUICC_ENGINE | ||
| 446 | np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic"); | ||
| 447 | if (!np) { | ||
| 448 | np = of_find_node_by_type(NULL, "qeic"); | ||
| 449 | if (!np) | ||
| 450 | return; | ||
| 451 | } | ||
| 452 | if (machine_is(p1021_mds)) | ||
| 453 | qe_ic_init(np, 0, qe_ic_cascade_low_mpic, | ||
| 454 | qe_ic_cascade_high_mpic); | ||
| 455 | else | ||
| 456 | qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL); | ||
| 457 | of_node_put(np); | ||
| 458 | #endif /* CONFIG_QUICC_ENGINE */ | ||
| 459 | } | 504 | } |
| 460 | 505 | ||
| 461 | static int __init mpc85xx_mds_probe(void) | 506 | static int __init mpc85xx_mds_probe(void) |
diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c b/arch/powerpc/platforms/85xx/p1022_ds.c new file mode 100644 index 000000000000..e1467c937450 --- /dev/null +++ b/arch/powerpc/platforms/85xx/p1022_ds.c | |||
| @@ -0,0 +1,148 @@ | |||
| 1 | /* | ||
| 2 | * P1022DS board specific routines | ||
| 3 | * | ||
| 4 | * Authors: Travis Wheatley <travis.wheatley@freescale.com> | ||
| 5 | * Dave Liu <daveliu@freescale.com> | ||
| 6 | * Timur Tabi <timur@freescale.com> | ||
| 7 | * | ||
| 8 | * Copyright 2010 Freescale Semiconductor, Inc. | ||
| 9 | * | ||
| 10 | * This file is taken from the Freescale P1022DS BSP, with modifications: | ||
| 11 | * 1) No DIU support (pending rewrite of DIU code) | ||
| 12 | * 2) No AMP support | ||
| 13 | * 3) No PCI endpoint support | ||
| 14 | * | ||
| 15 | * This file is licensed under the terms of the GNU General Public License | ||
| 16 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 17 | * kind, whether express or implied. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #include <linux/pci.h> | ||
| 21 | #include <linux/of_platform.h> | ||
| 22 | #include <linux/lmb.h> | ||
| 23 | |||
| 24 | #include <asm/mpic.h> | ||
| 25 | #include <asm/swiotlb.h> | ||
| 26 | |||
| 27 | #include <sysdev/fsl_soc.h> | ||
| 28 | #include <sysdev/fsl_pci.h> | ||
| 29 | |||
| 30 | void __init p1022_ds_pic_init(void) | ||
| 31 | { | ||
| 32 | struct mpic *mpic; | ||
| 33 | struct resource r; | ||
| 34 | struct device_node *np; | ||
| 35 | |||
| 36 | np = of_find_node_by_type(NULL, "open-pic"); | ||
| 37 | if (!np) { | ||
| 38 | pr_err("Could not find open-pic node\n"); | ||
| 39 | return; | ||
| 40 | } | ||
| 41 | |||
| 42 | if (of_address_to_resource(np, 0, &r)) { | ||
| 43 | pr_err("Failed to map mpic register space\n"); | ||
| 44 | of_node_put(np); | ||
| 45 | return; | ||
| 46 | } | ||
| 47 | |||
| 48 | mpic = mpic_alloc(np, r.start, | ||
| 49 | MPIC_PRIMARY | MPIC_WANTS_RESET | | ||
| 50 | MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS | | ||
| 51 | MPIC_SINGLE_DEST_CPU, | ||
| 52 | 0, 256, " OpenPIC "); | ||
| 53 | |||
| 54 | BUG_ON(mpic == NULL); | ||
| 55 | of_node_put(np); | ||
| 56 | |||
| 57 | mpic_init(mpic); | ||
| 58 | } | ||
| 59 | |||
| 60 | #ifdef CONFIG_SMP | ||
| 61 | void __init mpc85xx_smp_init(void); | ||
| 62 | #endif | ||
| 63 | |||
| 64 | /* | ||
| 65 | * Setup the architecture | ||
| 66 | */ | ||
| 67 | static void __init p1022_ds_setup_arch(void) | ||
| 68 | { | ||
| 69 | #ifdef CONFIG_PCI | ||
| 70 | struct device_node *np; | ||
| 71 | #endif | ||
| 72 | dma_addr_t max = 0xffffffff; | ||
| 73 | |||
| 74 | if (ppc_md.progress) | ||
| 75 | ppc_md.progress("p1022_ds_setup_arch()", 0); | ||
| 76 | |||
| 77 | #ifdef CONFIG_PCI | ||
| 78 | for_each_compatible_node(np, "pci", "fsl,p1022-pcie") { | ||
| 79 | struct resource rsrc; | ||
| 80 | struct pci_controller *hose; | ||
| 81 | |||
| 82 | of_address_to_resource(np, 0, &rsrc); | ||
| 83 | |||
| 84 | if ((rsrc.start & 0xfffff) == 0x8000) | ||
| 85 | fsl_add_bridge(np, 1); | ||
| 86 | else | ||
| 87 | fsl_add_bridge(np, 0); | ||
| 88 | |||
| 89 | hose = pci_find_hose_for_OF_device(np); | ||
| 90 | max = min(max, hose->dma_window_base_cur + | ||
| 91 | hose->dma_window_size); | ||
| 92 | } | ||
| 93 | #endif | ||
| 94 | |||
| 95 | #ifdef CONFIG_SMP | ||
| 96 | mpc85xx_smp_init(); | ||
| 97 | #endif | ||
| 98 | |||
| 99 | #ifdef CONFIG_SWIOTLB | ||
| 100 | if (lmb_end_of_DRAM() > max) { | ||
| 101 | ppc_swiotlb_enable = 1; | ||
| 102 | set_pci_dma_ops(&swiotlb_dma_ops); | ||
| 103 | ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; | ||
| 104 | } | ||
| 105 | #endif | ||
| 106 | |||
| 107 | pr_info("Freescale P1022 DS reference board\n"); | ||
| 108 | } | ||
| 109 | |||
| 110 | static struct of_device_id __initdata p1022_ds_ids[] = { | ||
| 111 | { .type = "soc", }, | ||
| 112 | { .compatible = "soc", }, | ||
| 113 | { .compatible = "simple-bus", }, | ||
| 114 | { .compatible = "gianfar", }, | ||
| 115 | {}, | ||
| 116 | }; | ||
| 117 | |||
| 118 | static int __init p1022_ds_publish_devices(void) | ||
| 119 | { | ||
| 120 | return of_platform_bus_probe(NULL, p1022_ds_ids, NULL); | ||
| 121 | } | ||
| 122 | machine_device_initcall(p1022_ds, p1022_ds_publish_devices); | ||
| 123 | |||
| 124 | machine_arch_initcall(p1022_ds, swiotlb_setup_bus_notifier); | ||
| 125 | |||
| 126 | /* | ||
| 127 | * Called very early, device-tree isn't unflattened | ||
| 128 | */ | ||
| 129 | static int __init p1022_ds_probe(void) | ||
| 130 | { | ||
| 131 | unsigned long root = of_get_flat_dt_root(); | ||
| 132 | |||
| 133 | return of_flat_dt_is_compatible(root, "fsl,p1022ds"); | ||
| 134 | } | ||
| 135 | |||
| 136 | define_machine(p1022_ds) { | ||
| 137 | .name = "P1022 DS", | ||
| 138 | .probe = p1022_ds_probe, | ||
| 139 | .setup_arch = p1022_ds_setup_arch, | ||
| 140 | .init_IRQ = p1022_ds_pic_init, | ||
| 141 | #ifdef CONFIG_PCI | ||
| 142 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, | ||
| 143 | #endif | ||
| 144 | .get_irq = mpic_get_irq, | ||
| 145 | .restart = fsl_rstcr_restart, | ||
| 146 | .calibrate_decr = generic_calibrate_decr, | ||
| 147 | .progress = udbg_progress, | ||
| 148 | }; | ||
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c index a15f582300d8..a6b106557be4 100644 --- a/arch/powerpc/platforms/85xx/smp.c +++ b/arch/powerpc/platforms/85xx/smp.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
| 17 | #include <linux/of.h> | 17 | #include <linux/of.h> |
| 18 | #include <linux/kexec.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
| 20 | #include <asm/pgtable.h> | 21 | #include <asm/pgtable.h> |
| @@ -24,6 +25,7 @@ | |||
| 24 | #include <asm/dbell.h> | 25 | #include <asm/dbell.h> |
| 25 | 26 | ||
| 26 | #include <sysdev/fsl_soc.h> | 27 | #include <sysdev/fsl_soc.h> |
| 28 | #include <sysdev/mpic.h> | ||
| 27 | 29 | ||
| 28 | extern void __early_start(void); | 30 | extern void __early_start(void); |
| 29 | 31 | ||
| @@ -99,12 +101,70 @@ static void __init | |||
| 99 | smp_85xx_setup_cpu(int cpu_nr) | 101 | smp_85xx_setup_cpu(int cpu_nr) |
| 100 | { | 102 | { |
| 101 | mpic_setup_this_cpu(); | 103 | mpic_setup_this_cpu(); |
| 104 | if (cpu_has_feature(CPU_FTR_DBELL)) | ||
| 105 | doorbell_setup_this_cpu(); | ||
| 102 | } | 106 | } |
| 103 | 107 | ||
| 104 | struct smp_ops_t smp_85xx_ops = { | 108 | struct smp_ops_t smp_85xx_ops = { |
| 105 | .kick_cpu = smp_85xx_kick_cpu, | 109 | .kick_cpu = smp_85xx_kick_cpu, |
| 110 | #ifdef CONFIG_KEXEC | ||
| 111 | .give_timebase = smp_generic_give_timebase, | ||
| 112 | .take_timebase = smp_generic_take_timebase, | ||
| 113 | #endif | ||
| 106 | }; | 114 | }; |
| 107 | 115 | ||
| 116 | #ifdef CONFIG_KEXEC | ||
| 117 | static int kexec_down_cpus = 0; | ||
| 118 | |||
| 119 | void mpc85xx_smp_kexec_cpu_down(int crash_shutdown, int secondary) | ||
| 120 | { | ||
| 121 | mpic_teardown_this_cpu(1); | ||
| 122 | |||
| 123 | /* When crashing, this gets called on all CPU's we only | ||
| 124 | * take down the non-boot cpus */ | ||
| 125 | if (smp_processor_id() != boot_cpuid) | ||
| 126 | { | ||
| 127 | local_irq_disable(); | ||
| 128 | kexec_down_cpus++; | ||
| 129 | |||
| 130 | while (1); | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | static void mpc85xx_smp_kexec_down(void *arg) | ||
| 135 | { | ||
| 136 | if (ppc_md.kexec_cpu_down) | ||
| 137 | ppc_md.kexec_cpu_down(0,1); | ||
| 138 | } | ||
| 139 | |||
| 140 | static void mpc85xx_smp_machine_kexec(struct kimage *image) | ||
| 141 | { | ||
| 142 | int timeout = 2000; | ||
| 143 | int i; | ||
| 144 | |||
| 145 | set_cpus_allowed(current, cpumask_of_cpu(boot_cpuid)); | ||
| 146 | |||
| 147 | smp_call_function(mpc85xx_smp_kexec_down, NULL, 0); | ||
| 148 | |||
| 149 | while ( (kexec_down_cpus != (num_online_cpus() - 1)) && | ||
| 150 | ( timeout > 0 ) ) | ||
| 151 | { | ||
| 152 | timeout--; | ||
| 153 | } | ||
| 154 | |||
| 155 | if ( !timeout ) | ||
| 156 | printk(KERN_ERR "Unable to bring down secondary cpu(s)"); | ||
| 157 | |||
| 158 | for (i = 0; i < num_present_cpus(); i++) | ||
| 159 | { | ||
| 160 | if ( i == smp_processor_id() ) continue; | ||
| 161 | mpic_reset_core(i); | ||
| 162 | } | ||
| 163 | |||
| 164 | default_machine_kexec(image); | ||
| 165 | } | ||
| 166 | #endif /* CONFIG_KEXEC */ | ||
| 167 | |||
| 108 | void __init mpc85xx_smp_init(void) | 168 | void __init mpc85xx_smp_init(void) |
| 109 | { | 169 | { |
| 110 | struct device_node *np; | 170 | struct device_node *np; |
| @@ -117,9 +177,14 @@ void __init mpc85xx_smp_init(void) | |||
| 117 | } | 177 | } |
| 118 | 178 | ||
| 119 | if (cpu_has_feature(CPU_FTR_DBELL)) | 179 | if (cpu_has_feature(CPU_FTR_DBELL)) |
| 120 | smp_85xx_ops.message_pass = smp_dbell_message_pass; | 180 | smp_85xx_ops.message_pass = doorbell_message_pass; |
| 121 | 181 | ||
| 122 | BUG_ON(!smp_85xx_ops.message_pass); | 182 | BUG_ON(!smp_85xx_ops.message_pass); |
| 123 | 183 | ||
| 124 | smp_ops = &smp_85xx_ops; | 184 | smp_ops = &smp_85xx_ops; |
| 185 | |||
| 186 | #ifdef CONFIG_KEXEC | ||
| 187 | ppc_md.kexec_cpu_down = mpc85xx_smp_kexec_cpu_down; | ||
| 188 | ppc_md.machine_kexec = mpc85xx_smp_machine_kexec; | ||
| 189 | #endif | ||
| 125 | } | 190 | } |
diff --git a/arch/powerpc/platforms/85xx/tqm85xx.c b/arch/powerpc/platforms/85xx/tqm85xx.c index 5b0ab9966e90..8f29bbce5360 100644 --- a/arch/powerpc/platforms/85xx/tqm85xx.c +++ b/arch/powerpc/platforms/85xx/tqm85xx.c | |||
| @@ -151,6 +151,27 @@ static void tqm85xx_show_cpuinfo(struct seq_file *m) | |||
| 151 | seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f)); | 151 | seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f)); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | static void __init tqm85xx_ti1520_fixup(struct pci_dev *pdev) | ||
| 155 | { | ||
| 156 | unsigned int val; | ||
| 157 | |||
| 158 | /* Do not do the fixup on other platforms! */ | ||
| 159 | if (!machine_is(tqm85xx)) | ||
| 160 | return; | ||
| 161 | |||
| 162 | dev_info(&pdev->dev, "Using TI 1520 fixup on TQM85xx\n"); | ||
| 163 | |||
| 164 | /* | ||
| 165 | * Enable P2CCLK bit in system control register | ||
| 166 | * to enable CLOCK output to power chip | ||
| 167 | */ | ||
| 168 | pci_read_config_dword(pdev, 0x80, &val); | ||
| 169 | pci_write_config_dword(pdev, 0x80, val | (1 << 27)); | ||
| 170 | |||
| 171 | } | ||
| 172 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, | ||
| 173 | tqm85xx_ti1520_fixup); | ||
| 174 | |||
| 154 | static struct of_device_id __initdata of_bus_ids[] = { | 175 | static struct of_device_id __initdata of_bus_ids[] = { |
| 155 | { .compatible = "simple-bus", }, | 176 | { .compatible = "simple-bus", }, |
| 156 | { .compatible = "gianfar", }, | 177 | { .compatible = "gianfar", }, |
diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8xx/Kconfig index 48a920a98e7b..dd35ce081cff 100644 --- a/arch/powerpc/platforms/8xx/Kconfig +++ b/arch/powerpc/platforms/8xx/Kconfig | |||
| @@ -55,6 +55,12 @@ config PPC_MGSUVD | |||
| 55 | help | 55 | help |
| 56 | This enables support for the Keymile MGSUVD board. | 56 | This enables support for the Keymile MGSUVD board. |
| 57 | 57 | ||
| 58 | config TQM8XX | ||
| 59 | bool "TQM8XX" | ||
| 60 | select CPM1 | ||
| 61 | help | ||
| 62 | support for the mpc8xx based boards from TQM. | ||
| 63 | |||
| 58 | endchoice | 64 | endchoice |
| 59 | 65 | ||
| 60 | menu "Freescale Ethernet driver platform-specific options" | 66 | menu "Freescale Ethernet driver platform-specific options" |
diff --git a/arch/powerpc/platforms/8xx/Makefile b/arch/powerpc/platforms/8xx/Makefile index bdbfd7496018..a491fe6b94fc 100644 --- a/arch/powerpc/platforms/8xx/Makefile +++ b/arch/powerpc/platforms/8xx/Makefile | |||
| @@ -7,3 +7,4 @@ obj-$(CONFIG_MPC86XADS) += mpc86xads_setup.o | |||
| 7 | obj-$(CONFIG_PPC_EP88XC) += ep88xc.o | 7 | obj-$(CONFIG_PPC_EP88XC) += ep88xc.o |
| 8 | obj-$(CONFIG_PPC_ADDER875) += adder875.o | 8 | obj-$(CONFIG_PPC_ADDER875) += adder875.o |
| 9 | obj-$(CONFIG_PPC_MGSUVD) += mgsuvd.o | 9 | obj-$(CONFIG_PPC_MGSUVD) += mgsuvd.o |
| 10 | obj-$(CONFIG_TQM8XX) += tqm8xx_setup.o | ||
diff --git a/arch/powerpc/platforms/8xx/tqm8xx_setup.c b/arch/powerpc/platforms/8xx/tqm8xx_setup.c new file mode 100644 index 000000000000..b71c650fbb11 --- /dev/null +++ b/arch/powerpc/platforms/8xx/tqm8xx_setup.c | |||
| @@ -0,0 +1,156 @@ | |||
| 1 | /* | ||
| 2 | * Platform setup for the MPC8xx based boards from TQM. | ||
| 3 | * | ||
| 4 | * Heiko Schocher <hs@denx.de> | ||
| 5 | * Copyright 2010 DENX Software Engineering GmbH | ||
| 6 | * | ||
| 7 | * based on: | ||
| 8 | * Vitaly Bordug <vbordug@ru.mvista.com> | ||
| 9 | * | ||
| 10 | * Copyright 2005 MontaVista Software Inc. | ||
| 11 | * | ||
| 12 | * Heavily modified by Scott Wood <scottwood@freescale.com> | ||
| 13 | * Copyright 2007 Freescale Semiconductor, Inc. | ||
| 14 | * | ||
| 15 | * This file is licensed under the terms of the GNU General Public License | ||
| 16 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 17 | * kind, whether express or implied. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/module.h> | ||
| 22 | #include <linux/param.h> | ||
| 23 | #include <linux/string.h> | ||
| 24 | #include <linux/ioport.h> | ||
| 25 | #include <linux/device.h> | ||
| 26 | #include <linux/delay.h> | ||
| 27 | |||
| 28 | #include <linux/fs_enet_pd.h> | ||
| 29 | #include <linux/fs_uart_pd.h> | ||
| 30 | #include <linux/fsl_devices.h> | ||
| 31 | #include <linux/mii.h> | ||
| 32 | #include <linux/of_platform.h> | ||
| 33 | |||
| 34 | #include <asm/delay.h> | ||
| 35 | #include <asm/io.h> | ||
| 36 | #include <asm/machdep.h> | ||
| 37 | #include <asm/page.h> | ||
| 38 | #include <asm/processor.h> | ||
| 39 | #include <asm/system.h> | ||
| 40 | #include <asm/time.h> | ||
| 41 | #include <asm/mpc8xx.h> | ||
| 42 | #include <asm/8xx_immap.h> | ||
| 43 | #include <asm/cpm1.h> | ||
| 44 | #include <asm/fs_pd.h> | ||
| 45 | #include <asm/udbg.h> | ||
| 46 | |||
| 47 | #include "mpc8xx.h" | ||
| 48 | |||
| 49 | struct cpm_pin { | ||
| 50 | int port, pin, flags; | ||
| 51 | }; | ||
| 52 | |||
| 53 | static struct __initdata cpm_pin tqm8xx_pins[] = { | ||
| 54 | /* SMC1 */ | ||
| 55 | {CPM_PORTB, 24, CPM_PIN_INPUT}, /* RX */ | ||
| 56 | {CPM_PORTB, 25, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* TX */ | ||
| 57 | |||
| 58 | /* SCC1 */ | ||
| 59 | {CPM_PORTA, 5, CPM_PIN_INPUT}, /* CLK1 */ | ||
| 60 | {CPM_PORTA, 7, CPM_PIN_INPUT}, /* CLK2 */ | ||
| 61 | {CPM_PORTA, 14, CPM_PIN_INPUT}, /* TX */ | ||
| 62 | {CPM_PORTA, 15, CPM_PIN_INPUT}, /* RX */ | ||
| 63 | {CPM_PORTC, 15, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* TENA */ | ||
| 64 | {CPM_PORTC, 10, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_GPIO}, | ||
| 65 | {CPM_PORTC, 11, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_GPIO}, | ||
| 66 | }; | ||
| 67 | |||
| 68 | static struct __initdata cpm_pin tqm8xx_fec_pins[] = { | ||
| 69 | /* MII */ | ||
| 70 | {CPM_PORTD, 3, CPM_PIN_OUTPUT}, | ||
| 71 | {CPM_PORTD, 4, CPM_PIN_OUTPUT}, | ||
| 72 | {CPM_PORTD, 5, CPM_PIN_OUTPUT}, | ||
| 73 | {CPM_PORTD, 6, CPM_PIN_OUTPUT}, | ||
| 74 | {CPM_PORTD, 7, CPM_PIN_OUTPUT}, | ||
| 75 | {CPM_PORTD, 8, CPM_PIN_OUTPUT}, | ||
| 76 | {CPM_PORTD, 9, CPM_PIN_OUTPUT}, | ||
| 77 | {CPM_PORTD, 10, CPM_PIN_OUTPUT}, | ||
| 78 | {CPM_PORTD, 11, CPM_PIN_OUTPUT}, | ||
| 79 | {CPM_PORTD, 12, CPM_PIN_OUTPUT}, | ||
| 80 | {CPM_PORTD, 13, CPM_PIN_OUTPUT}, | ||
| 81 | {CPM_PORTD, 14, CPM_PIN_OUTPUT}, | ||
| 82 | {CPM_PORTD, 15, CPM_PIN_OUTPUT}, | ||
| 83 | }; | ||
| 84 | |||
| 85 | static void __init init_pins(int n, struct cpm_pin *pin) | ||
| 86 | { | ||
| 87 | int i; | ||
| 88 | |||
| 89 | for (i = 0; i < n; i++) { | ||
| 90 | cpm1_set_pin(pin->port, pin->pin, pin->flags); | ||
| 91 | pin++; | ||
| 92 | } | ||
| 93 | } | ||
| 94 | |||
| 95 | static void __init init_ioports(void) | ||
| 96 | { | ||
| 97 | struct device_node *dnode; | ||
| 98 | struct property *prop; | ||
| 99 | int len; | ||
| 100 | |||
| 101 | init_pins(ARRAY_SIZE(tqm8xx_pins), &tqm8xx_pins[0]); | ||
| 102 | |||
| 103 | cpm1_clk_setup(CPM_CLK_SMC1, CPM_BRG1, CPM_CLK_RTX); | ||
| 104 | |||
| 105 | dnode = of_find_node_by_name(NULL, "aliases"); | ||
| 106 | if (dnode == NULL) | ||
| 107 | return; | ||
| 108 | prop = of_find_property(dnode, "ethernet1", &len); | ||
| 109 | if (prop == NULL) | ||
| 110 | return; | ||
| 111 | |||
| 112 | /* init FEC pins */ | ||
| 113 | init_pins(ARRAY_SIZE(tqm8xx_fec_pins), &tqm8xx_fec_pins[0]); | ||
| 114 | } | ||
| 115 | |||
| 116 | static void __init tqm8xx_setup_arch(void) | ||
| 117 | { | ||
| 118 | cpm_reset(); | ||
| 119 | init_ioports(); | ||
| 120 | } | ||
| 121 | |||
| 122 | static int __init tqm8xx_probe(void) | ||
| 123 | { | ||
| 124 | unsigned long node = of_get_flat_dt_root(); | ||
| 125 | |||
| 126 | return of_flat_dt_is_compatible(node, "tqc,tqm8xx"); | ||
| 127 | } | ||
| 128 | |||
| 129 | static struct of_device_id __initdata of_bus_ids[] = { | ||
| 130 | { .name = "soc", }, | ||
| 131 | { .name = "cpm", }, | ||
| 132 | { .name = "localbus", }, | ||
| 133 | { .compatible = "simple-bus" }, | ||
| 134 | {}, | ||
| 135 | }; | ||
| 136 | |||
| 137 | static int __init declare_of_platform_devices(void) | ||
| 138 | { | ||
| 139 | of_platform_bus_probe(NULL, of_bus_ids, NULL); | ||
| 140 | |||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | machine_device_initcall(tqm8xx, declare_of_platform_devices); | ||
| 144 | |||
| 145 | define_machine(tqm8xx) { | ||
| 146 | .name = "TQM8xx", | ||
| 147 | .probe = tqm8xx_probe, | ||
| 148 | .setup_arch = tqm8xx_setup_arch, | ||
| 149 | .init_IRQ = mpc8xx_pics_init, | ||
| 150 | .get_irq = mpc8xx_get_irq, | ||
| 151 | .restart = mpc8xx_restart, | ||
| 152 | .calibrate_decr = mpc8xx_calibrate_decr, | ||
| 153 | .set_rtc_time = mpc8xx_set_rtc_time, | ||
| 154 | .get_rtc_time = mpc8xx_get_rtc_time, | ||
| 155 | .progress = udbg_progress, | ||
| 156 | }; | ||
diff --git a/arch/powerpc/platforms/iseries/vio.c b/arch/powerpc/platforms/iseries/vio.c index 00b6730bc48f..b6db7cef83b4 100644 --- a/arch/powerpc/platforms/iseries/vio.c +++ b/arch/powerpc/platforms/iseries/vio.c | |||
| @@ -87,12 +87,11 @@ static struct device_node *new_node(const char *path, | |||
| 87 | 87 | ||
| 88 | if (!np) | 88 | if (!np) |
| 89 | return NULL; | 89 | return NULL; |
| 90 | np->full_name = kmalloc(strlen(path) + 1, GFP_KERNEL); | 90 | np->full_name = kstrdup(path, GFP_KERNEL); |
| 91 | if (!np->full_name) { | 91 | if (!np->full_name) { |
| 92 | kfree(np); | 92 | kfree(np); |
| 93 | return NULL; | 93 | return NULL; |
| 94 | } | 94 | } |
| 95 | strcpy(np->full_name, path); | ||
| 96 | of_node_set_flag(np, OF_DYNAMIC); | 95 | of_node_set_flag(np, OF_DYNAMIC); |
| 97 | kref_init(&np->kref); | 96 | kref_init(&np->kref); |
| 98 | np->parent = of_node_get(parent); | 97 | np->parent = of_node_get(parent); |
diff --git a/arch/powerpc/platforms/powermac/cpufreq_32.c b/arch/powerpc/platforms/powermac/cpufreq_32.c index 1e9eba175ff0..415ca6d6b273 100644 --- a/arch/powerpc/platforms/powermac/cpufreq_32.c +++ b/arch/powerpc/platforms/powermac/cpufreq_32.c | |||
| @@ -310,8 +310,12 @@ static int pmu_set_cpu_speed(int low_speed) | |||
| 310 | /* Restore low level PMU operations */ | 310 | /* Restore low level PMU operations */ |
| 311 | pmu_unlock(); | 311 | pmu_unlock(); |
| 312 | 312 | ||
| 313 | /* Restore decrementer */ | 313 | /* |
| 314 | wakeup_decrementer(); | 314 | * Restore decrementer; we'll take a decrementer interrupt |
| 315 | * as soon as interrupts are re-enabled and the generic | ||
| 316 | * clockevents code will reprogram it with the right value. | ||
| 317 | */ | ||
| 318 | set_dec(1); | ||
| 315 | 319 | ||
| 316 | /* Restore interrupts */ | 320 | /* Restore interrupts */ |
| 317 | mpic_cpu_set_priority(pic_prio); | 321 | mpic_cpu_set_priority(pic_prio); |
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c index 9e1b9fd75206..79bd3e89dbaf 100644 --- a/arch/powerpc/platforms/powermac/feature.c +++ b/arch/powerpc/platforms/powermac/feature.c | |||
| @@ -2191,7 +2191,11 @@ static struct pmac_mb_def pmac_mb_defs[] = { | |||
| 2191 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2191 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
| 2192 | PMAC_MB_MAY_SLEEP, | 2192 | PMAC_MB_MAY_SLEEP, |
| 2193 | }, | 2193 | }, |
| 2194 | { "iMac,1", "iMac (first generation)", | 2194 | { "PowerMac10,2", "Mac mini (Late 2005)", |
| 2195 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | ||
| 2196 | PMAC_MB_MAY_SLEEP, | ||
| 2197 | }, | ||
| 2198 | { "iMac,1", "iMac (first generation)", | ||
| 2195 | PMAC_TYPE_ORIG_IMAC, paddington_features, | 2199 | PMAC_TYPE_ORIG_IMAC, paddington_features, |
| 2196 | 0 | 2200 | 0 |
| 2197 | }, | 2201 | }, |
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile index 3dbef309bc8d..046ace9c4381 100644 --- a/arch/powerpc/platforms/pseries/Makefile +++ b/arch/powerpc/platforms/pseries/Makefile | |||
| @@ -26,3 +26,7 @@ obj-$(CONFIG_HCALL_STATS) += hvCall_inst.o | |||
| 26 | obj-$(CONFIG_PHYP_DUMP) += phyp_dump.o | 26 | obj-$(CONFIG_PHYP_DUMP) += phyp_dump.o |
| 27 | obj-$(CONFIG_CMM) += cmm.o | 27 | obj-$(CONFIG_CMM) += cmm.o |
| 28 | obj-$(CONFIG_DTL) += dtl.o | 28 | obj-$(CONFIG_DTL) += dtl.o |
| 29 | |||
| 30 | ifeq ($(CONFIG_PPC_PSERIES),y) | ||
| 31 | obj-$(CONFIG_SUSPEND) += suspend.o | ||
| 32 | endif | ||
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c index d71e58584086..227c1c3d585e 100644 --- a/arch/powerpc/platforms/pseries/dlpar.c +++ b/arch/powerpc/platforms/pseries/dlpar.c | |||
| @@ -463,6 +463,7 @@ static int dlpar_offline_cpu(struct device_node *dn) | |||
| 463 | break; | 463 | break; |
| 464 | 464 | ||
| 465 | if (get_cpu_current_state(cpu) == CPU_STATE_ONLINE) { | 465 | if (get_cpu_current_state(cpu) == CPU_STATE_ONLINE) { |
| 466 | set_preferred_offline_state(cpu, CPU_STATE_OFFLINE); | ||
| 466 | cpu_maps_update_done(); | 467 | cpu_maps_update_done(); |
| 467 | rc = cpu_down(cpu); | 468 | rc = cpu_down(cpu); |
| 468 | if (rc) | 469 | if (rc) |
diff --git a/arch/powerpc/platforms/pseries/eeh_cache.c b/arch/powerpc/platforms/pseries/eeh_cache.c index 30b987b73c20..8ed0d2d0e1b5 100644 --- a/arch/powerpc/platforms/pseries/eeh_cache.c +++ b/arch/powerpc/platforms/pseries/eeh_cache.c | |||
| @@ -288,8 +288,7 @@ void __init pci_addr_cache_build(void) | |||
| 288 | 288 | ||
| 289 | spin_lock_init(&pci_io_addr_cache_root.piar_lock); | 289 | spin_lock_init(&pci_io_addr_cache_root.piar_lock); |
| 290 | 290 | ||
| 291 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 291 | for_each_pci_dev(dev) { |
| 292 | |||
| 293 | pci_addr_cache_insert_device(dev); | 292 | pci_addr_cache_insert_device(dev); |
| 294 | 293 | ||
| 295 | dn = pci_device_to_OF_node(dev); | 294 | dn = pci_device_to_OF_node(dev); |
diff --git a/arch/powerpc/platforms/pseries/event_sources.c b/arch/powerpc/platforms/pseries/event_sources.c index e889c9d9586a..2605c310166a 100644 --- a/arch/powerpc/platforms/pseries/event_sources.c +++ b/arch/powerpc/platforms/pseries/event_sources.c | |||
| @@ -41,9 +41,12 @@ void request_event_sources_irqs(struct device_node *np, | |||
| 41 | if (count > 15) | 41 | if (count > 15) |
| 42 | break; | 42 | break; |
| 43 | virqs[count] = irq_create_mapping(NULL, *(opicprop++)); | 43 | virqs[count] = irq_create_mapping(NULL, *(opicprop++)); |
| 44 | if (virqs[count] == NO_IRQ) | 44 | if (virqs[count] == NO_IRQ) { |
| 45 | printk(KERN_ERR "Unable to allocate interrupt " | 45 | pr_err("event-sources: Unable to allocate " |
| 46 | "number for %s\n", np->full_name); | 46 | "interrupt number for %s\n", |
| 47 | np->full_name); | ||
| 48 | WARN_ON(1); | ||
| 49 | } | ||
| 47 | else | 50 | else |
| 48 | count++; | 51 | count++; |
| 49 | 52 | ||
| @@ -59,9 +62,12 @@ void request_event_sources_irqs(struct device_node *np, | |||
| 59 | virqs[count] = irq_create_of_mapping(oirq.controller, | 62 | virqs[count] = irq_create_of_mapping(oirq.controller, |
| 60 | oirq.specifier, | 63 | oirq.specifier, |
| 61 | oirq.size); | 64 | oirq.size); |
| 62 | if (virqs[count] == NO_IRQ) | 65 | if (virqs[count] == NO_IRQ) { |
| 63 | printk(KERN_ERR "Unable to allocate interrupt " | 66 | pr_err("event-sources: Unable to allocate " |
| 64 | "number for %s\n", np->full_name); | 67 | "interrupt number for %s\n", |
| 68 | np->full_name); | ||
| 69 | WARN_ON(1); | ||
| 70 | } | ||
| 65 | else | 71 | else |
| 66 | count++; | 72 | count++; |
| 67 | } | 73 | } |
| @@ -70,8 +76,9 @@ void request_event_sources_irqs(struct device_node *np, | |||
| 70 | /* Now request them */ | 76 | /* Now request them */ |
| 71 | for (i = 0; i < count; i++) { | 77 | for (i = 0; i < count; i++) { |
| 72 | if (request_irq(virqs[i], handler, 0, name, NULL)) { | 78 | if (request_irq(virqs[i], handler, 0, name, NULL)) { |
| 73 | printk(KERN_ERR "Unable to request interrupt %d for " | 79 | pr_err("event-sources: Unable to request interrupt " |
| 74 | "%s\n", virqs[i], np->full_name); | 80 | "%d for %s\n", virqs[i], np->full_name); |
| 81 | WARN_ON(1); | ||
| 75 | return; | 82 | return; |
| 76 | } | 83 | } |
| 77 | } | 84 | } |
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index 8f85f399ab9f..fd50ccd4bac1 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | |||
| @@ -116,6 +116,9 @@ static void pseries_mach_cpu_die(void) | |||
| 116 | 116 | ||
| 117 | if (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { | 117 | if (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { |
| 118 | set_cpu_current_state(cpu, CPU_STATE_INACTIVE); | 118 | set_cpu_current_state(cpu, CPU_STATE_INACTIVE); |
| 119 | if (ppc_md.suspend_disable_cpu) | ||
| 120 | ppc_md.suspend_disable_cpu(); | ||
| 121 | |||
| 119 | cede_latency_hint = 2; | 122 | cede_latency_hint = 2; |
| 120 | 123 | ||
| 121 | get_lppaca()->idle = 1; | 124 | get_lppaca()->idle = 1; |
| @@ -190,12 +193,12 @@ static void pseries_cpu_die(unsigned int cpu) | |||
| 190 | 193 | ||
| 191 | if (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { | 194 | if (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { |
| 192 | cpu_status = 1; | 195 | cpu_status = 1; |
| 193 | for (tries = 0; tries < 1000; tries++) { | 196 | for (tries = 0; tries < 5000; tries++) { |
| 194 | if (get_cpu_current_state(cpu) == CPU_STATE_INACTIVE) { | 197 | if (get_cpu_current_state(cpu) == CPU_STATE_INACTIVE) { |
| 195 | cpu_status = 0; | 198 | cpu_status = 0; |
| 196 | break; | 199 | break; |
| 197 | } | 200 | } |
| 198 | cpu_relax(); | 201 | msleep(1); |
| 199 | } | 202 | } |
| 200 | } else if (get_preferred_offline_state(cpu) == CPU_STATE_OFFLINE) { | 203 | } else if (get_preferred_offline_state(cpu) == CPU_STATE_OFFLINE) { |
| 201 | 204 | ||
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index 41a3e9a039ed..a4fc6da87c2e 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c | |||
| @@ -61,7 +61,6 @@ static int ras_check_exception_token; | |||
| 61 | 61 | ||
| 62 | #define EPOW_SENSOR_TOKEN 9 | 62 | #define EPOW_SENSOR_TOKEN 9 |
| 63 | #define EPOW_SENSOR_INDEX 0 | 63 | #define EPOW_SENSOR_INDEX 0 |
| 64 | #define RAS_VECTOR_OFFSET 0x500 | ||
| 65 | 64 | ||
| 66 | static irqreturn_t ras_epow_interrupt(int irq, void *dev_id); | 65 | static irqreturn_t ras_epow_interrupt(int irq, void *dev_id); |
| 67 | static irqreturn_t ras_error_interrupt(int irq, void *dev_id); | 66 | static irqreturn_t ras_error_interrupt(int irq, void *dev_id); |
| @@ -121,7 +120,7 @@ static irqreturn_t ras_epow_interrupt(int irq, void *dev_id) | |||
| 121 | spin_lock(&ras_log_buf_lock); | 120 | spin_lock(&ras_log_buf_lock); |
| 122 | 121 | ||
| 123 | status = rtas_call(ras_check_exception_token, 6, 1, NULL, | 122 | status = rtas_call(ras_check_exception_token, 6, 1, NULL, |
| 124 | RAS_VECTOR_OFFSET, | 123 | RTAS_VECTOR_EXTERNAL_INTERRUPT, |
| 125 | irq_map[irq].hwirq, | 124 | irq_map[irq].hwirq, |
| 126 | RTAS_EPOW_WARNING | RTAS_POWERMGM_EVENTS, | 125 | RTAS_EPOW_WARNING | RTAS_POWERMGM_EVENTS, |
| 127 | critical, __pa(&ras_log_buf), | 126 | critical, __pa(&ras_log_buf), |
| @@ -156,7 +155,7 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id) | |||
| 156 | spin_lock(&ras_log_buf_lock); | 155 | spin_lock(&ras_log_buf_lock); |
| 157 | 156 | ||
| 158 | status = rtas_call(ras_check_exception_token, 6, 1, NULL, | 157 | status = rtas_call(ras_check_exception_token, 6, 1, NULL, |
| 159 | RAS_VECTOR_OFFSET, | 158 | RTAS_VECTOR_EXTERNAL_INTERRUPT, |
| 160 | irq_map[irq].hwirq, | 159 | irq_map[irq].hwirq, |
| 161 | RTAS_INTERNAL_ERROR, 1 /*Time Critical */, | 160 | RTAS_INTERNAL_ERROR, 1 /*Time Critical */, |
| 162 | __pa(&ras_log_buf), | 161 | __pa(&ras_log_buf), |
diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c index 1a58637bcea5..57ddbb43b33a 100644 --- a/arch/powerpc/platforms/pseries/reconfig.c +++ b/arch/powerpc/platforms/pseries/reconfig.c | |||
| @@ -118,12 +118,10 @@ static int pSeries_reconfig_add_node(const char *path, struct property *proplist | |||
| 118 | if (!np) | 118 | if (!np) |
| 119 | goto out_err; | 119 | goto out_err; |
| 120 | 120 | ||
| 121 | np->full_name = kmalloc(strlen(path) + 1, GFP_KERNEL); | 121 | np->full_name = kstrdup(path, GFP_KERNEL); |
| 122 | if (!np->full_name) | 122 | if (!np->full_name) |
| 123 | goto out_err; | 123 | goto out_err; |
| 124 | 124 | ||
| 125 | strcpy(np->full_name, path); | ||
| 126 | |||
| 127 | np->properties = proplist; | 125 | np->properties = proplist; |
| 128 | of_node_set_flag(np, OF_DYNAMIC); | 126 | of_node_set_flag(np, OF_DYNAMIC); |
| 129 | kref_init(&np->kref); | 127 | kref_init(&np->kref); |
diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c new file mode 100644 index 000000000000..ed72098bb4e3 --- /dev/null +++ b/arch/powerpc/platforms/pseries/suspend.c | |||
| @@ -0,0 +1,214 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 Brian King IBM Corporation | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/delay.h> | ||
| 20 | #include <linux/suspend.h> | ||
| 21 | #include <asm/firmware.h> | ||
| 22 | #include <asm/hvcall.h> | ||
| 23 | #include <asm/machdep.h> | ||
| 24 | #include <asm/mmu.h> | ||
| 25 | #include <asm/rtas.h> | ||
| 26 | |||
| 27 | static u64 stream_id; | ||
| 28 | static struct sys_device suspend_sysdev; | ||
| 29 | static DECLARE_COMPLETION(suspend_work); | ||
| 30 | static struct rtas_suspend_me_data suspend_data; | ||
| 31 | static atomic_t suspending; | ||
| 32 | |||
| 33 | /** | ||
| 34 | * pseries_suspend_begin - First phase of hibernation | ||
| 35 | * | ||
| 36 | * Check to ensure we are in a valid state to hibernate | ||
| 37 | * | ||
| 38 | * Return value: | ||
| 39 | * 0 on success / other on failure | ||
| 40 | **/ | ||
| 41 | static int pseries_suspend_begin(suspend_state_t state) | ||
| 42 | { | ||
| 43 | long vasi_state, rc; | ||
| 44 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; | ||
| 45 | |||
| 46 | /* Make sure the state is valid */ | ||
| 47 | rc = plpar_hcall(H_VASI_STATE, retbuf, stream_id); | ||
| 48 | |||
| 49 | vasi_state = retbuf[0]; | ||
| 50 | |||
| 51 | if (rc) { | ||
| 52 | pr_err("pseries_suspend_begin: vasi_state returned %ld\n",rc); | ||
| 53 | return rc; | ||
| 54 | } else if (vasi_state == H_VASI_ENABLED) { | ||
| 55 | return -EAGAIN; | ||
| 56 | } else if (vasi_state != H_VASI_SUSPENDING) { | ||
| 57 | pr_err("pseries_suspend_begin: vasi_state returned state %ld\n", | ||
| 58 | vasi_state); | ||
| 59 | return -EIO; | ||
| 60 | } | ||
| 61 | |||
| 62 | return 0; | ||
| 63 | } | ||
| 64 | |||
| 65 | /** | ||
| 66 | * pseries_suspend_cpu - Suspend a single CPU | ||
| 67 | * | ||
| 68 | * Makes the H_JOIN call to suspend the CPU | ||
| 69 | * | ||
| 70 | **/ | ||
| 71 | static int pseries_suspend_cpu(void) | ||
| 72 | { | ||
| 73 | if (atomic_read(&suspending)) | ||
| 74 | return rtas_suspend_cpu(&suspend_data); | ||
| 75 | return 0; | ||
| 76 | } | ||
| 77 | |||
| 78 | /** | ||
| 79 | * pseries_suspend_enter - Final phase of hibernation | ||
| 80 | * | ||
| 81 | * Return value: | ||
| 82 | * 0 on success / other on failure | ||
| 83 | **/ | ||
| 84 | static int pseries_suspend_enter(suspend_state_t state) | ||
| 85 | { | ||
| 86 | int rc = rtas_suspend_last_cpu(&suspend_data); | ||
| 87 | |||
| 88 | atomic_set(&suspending, 0); | ||
| 89 | atomic_set(&suspend_data.done, 1); | ||
| 90 | return rc; | ||
| 91 | } | ||
| 92 | |||
| 93 | /** | ||
| 94 | * pseries_prepare_late - Prepare to suspend all other CPUs | ||
| 95 | * | ||
| 96 | * Return value: | ||
| 97 | * 0 on success / other on failure | ||
| 98 | **/ | ||
| 99 | static int pseries_prepare_late(void) | ||
| 100 | { | ||
| 101 | atomic_set(&suspending, 1); | ||
| 102 | atomic_set(&suspend_data.working, 0); | ||
| 103 | atomic_set(&suspend_data.done, 0); | ||
| 104 | atomic_set(&suspend_data.error, 0); | ||
| 105 | suspend_data.complete = &suspend_work; | ||
| 106 | INIT_COMPLETION(suspend_work); | ||
| 107 | return 0; | ||
| 108 | } | ||
| 109 | |||
| 110 | /** | ||
| 111 | * store_hibernate - Initiate partition hibernation | ||
| 112 | * @classdev: sysdev class struct | ||
| 113 | * @attr: class device attribute struct | ||
| 114 | * @buf: buffer | ||
| 115 | * @count: buffer size | ||
| 116 | * | ||
| 117 | * Write the stream ID received from the HMC to this file | ||
| 118 | * to trigger hibernating the partition | ||
| 119 | * | ||
| 120 | * Return value: | ||
| 121 | * number of bytes printed to buffer / other on failure | ||
| 122 | **/ | ||
| 123 | static ssize_t store_hibernate(struct sysdev_class *classdev, | ||
| 124 | struct sysdev_class_attribute *attr, | ||
| 125 | const char *buf, size_t count) | ||
| 126 | { | ||
| 127 | int rc; | ||
| 128 | |||
| 129 | if (!capable(CAP_SYS_ADMIN)) | ||
| 130 | return -EPERM; | ||
| 131 | |||
| 132 | stream_id = simple_strtoul(buf, NULL, 16); | ||
| 133 | |||
| 134 | do { | ||
| 135 | rc = pseries_suspend_begin(PM_SUSPEND_MEM); | ||
| 136 | if (rc == -EAGAIN) | ||
| 137 | ssleep(1); | ||
| 138 | } while (rc == -EAGAIN); | ||
| 139 | |||
| 140 | if (!rc) | ||
| 141 | rc = pm_suspend(PM_SUSPEND_MEM); | ||
| 142 | |||
| 143 | stream_id = 0; | ||
| 144 | |||
| 145 | if (!rc) | ||
| 146 | rc = count; | ||
| 147 | return rc; | ||
| 148 | } | ||
| 149 | |||
| 150 | static SYSDEV_CLASS_ATTR(hibernate, S_IWUSR, NULL, store_hibernate); | ||
| 151 | |||
| 152 | static struct sysdev_class suspend_sysdev_class = { | ||
| 153 | .name = "power", | ||
| 154 | }; | ||
| 155 | |||
| 156 | static struct platform_suspend_ops pseries_suspend_ops = { | ||
| 157 | .valid = suspend_valid_only_mem, | ||
| 158 | .begin = pseries_suspend_begin, | ||
| 159 | .prepare_late = pseries_prepare_late, | ||
| 160 | .enter = pseries_suspend_enter, | ||
| 161 | }; | ||
| 162 | |||
| 163 | /** | ||
| 164 | * pseries_suspend_sysfs_register - Register with sysfs | ||
| 165 | * | ||
| 166 | * Return value: | ||
| 167 | * 0 on success / other on failure | ||
| 168 | **/ | ||
| 169 | static int pseries_suspend_sysfs_register(struct sys_device *sysdev) | ||
| 170 | { | ||
| 171 | int rc; | ||
| 172 | |||
| 173 | if ((rc = sysdev_class_register(&suspend_sysdev_class))) | ||
| 174 | return rc; | ||
| 175 | |||
| 176 | sysdev->id = 0; | ||
| 177 | sysdev->cls = &suspend_sysdev_class; | ||
| 178 | |||
| 179 | if ((rc = sysdev_class_create_file(&suspend_sysdev_class, &attr_hibernate))) | ||
| 180 | goto class_unregister; | ||
| 181 | |||
| 182 | return 0; | ||
| 183 | |||
| 184 | class_unregister: | ||
| 185 | sysdev_class_unregister(&suspend_sysdev_class); | ||
| 186 | return rc; | ||
| 187 | } | ||
| 188 | |||
| 189 | /** | ||
| 190 | * pseries_suspend_init - initcall for pSeries suspend | ||
| 191 | * | ||
| 192 | * Return value: | ||
| 193 | * 0 on success / other on failure | ||
| 194 | **/ | ||
| 195 | static int __init pseries_suspend_init(void) | ||
| 196 | { | ||
| 197 | int rc; | ||
| 198 | |||
| 199 | if (!machine_is(pseries) || !firmware_has_feature(FW_FEATURE_LPAR)) | ||
| 200 | return 0; | ||
| 201 | |||
| 202 | suspend_data.token = rtas_token("ibm,suspend-me"); | ||
| 203 | if (suspend_data.token == RTAS_UNKNOWN_SERVICE) | ||
| 204 | return 0; | ||
| 205 | |||
| 206 | if ((rc = pseries_suspend_sysfs_register(&suspend_sysdev))) | ||
| 207 | return rc; | ||
| 208 | |||
| 209 | ppc_md.suspend_disable_cpu = pseries_suspend_cpu; | ||
| 210 | suspend_set_ops(&pseries_suspend_ops); | ||
| 211 | return 0; | ||
| 212 | } | ||
| 213 | |||
| 214 | __initcall(pseries_suspend_init); | ||
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index f19d19468393..5b22b07c8f67 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
| @@ -549,8 +549,6 @@ static irqreturn_t xics_ipi_dispatch(int cpu) | |||
| 549 | { | 549 | { |
| 550 | unsigned long *tgt = &per_cpu(xics_ipi_message, cpu); | 550 | unsigned long *tgt = &per_cpu(xics_ipi_message, cpu); |
| 551 | 551 | ||
| 552 | WARN_ON(cpu_is_offline(cpu)); | ||
| 553 | |||
| 554 | mb(); /* order mmio clearing qirr */ | 552 | mb(); /* order mmio clearing qirr */ |
| 555 | while (*tgt) { | 553 | while (*tgt) { |
| 556 | if (test_and_clear_bit(PPC_MSG_CALL_FUNCTION, tgt)) { | 554 | if (test_and_clear_bit(PPC_MSG_CALL_FUNCTION, tgt)) { |
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index 356c6a0e1b23..209384b6e039 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
| @@ -412,6 +412,7 @@ DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4080, quirk_fsl_pcie_header); | |||
| 412 | #endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */ | 412 | #endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */ |
| 413 | 413 | ||
| 414 | #if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x) | 414 | #if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x) |
| 415 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8308, quirk_fsl_pcie_header); | ||
| 415 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314E, quirk_fsl_pcie_header); | 416 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314E, quirk_fsl_pcie_header); |
| 416 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314, quirk_fsl_pcie_header); | 417 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314, quirk_fsl_pcie_header); |
| 417 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315E, quirk_fsl_pcie_header); | 418 | DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315E, quirk_fsl_pcie_header); |
diff --git a/arch/powerpc/sysdev/fsl_soc.h b/arch/powerpc/sysdev/fsl_soc.h index 42381bb6cd51..53609489a62b 100644 --- a/arch/powerpc/sysdev/fsl_soc.h +++ b/arch/powerpc/sysdev/fsl_soc.h | |||
| @@ -30,6 +30,7 @@ struct platform_diu_data_ops { | |||
| 30 | void (*set_pixel_clock) (unsigned int pixclock); | 30 | void (*set_pixel_clock) (unsigned int pixclock); |
| 31 | ssize_t (*show_monitor_port) (int monitor_port, char *buf); | 31 | ssize_t (*show_monitor_port) (int monitor_port, char *buf); |
| 32 | int (*set_sysfs_monitor_port) (int val); | 32 | int (*set_sysfs_monitor_port) (int val); |
| 33 | void (*release_bootmem) (void); | ||
| 33 | }; | 34 | }; |
| 34 | 35 | ||
| 35 | extern struct platform_diu_data_ops diu_ops; | 36 | extern struct platform_diu_data_ops diu_ops; |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 20b73c025a45..7c1342618a30 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
| @@ -1636,6 +1636,24 @@ void __devinit smp_mpic_setup_cpu(int cpu) | |||
| 1636 | { | 1636 | { |
| 1637 | mpic_setup_this_cpu(); | 1637 | mpic_setup_this_cpu(); |
| 1638 | } | 1638 | } |
| 1639 | |||
| 1640 | void mpic_reset_core(int cpu) | ||
| 1641 | { | ||
| 1642 | struct mpic *mpic = mpic_primary; | ||
| 1643 | u32 pir; | ||
| 1644 | int cpuid = get_hard_smp_processor_id(cpu); | ||
| 1645 | |||
| 1646 | /* Set target bit for core reset */ | ||
| 1647 | pir = mpic_read(mpic->gregs, MPIC_INFO(GREG_PROCESSOR_INIT)); | ||
| 1648 | pir |= (1 << cpuid); | ||
| 1649 | mpic_write(mpic->gregs, MPIC_INFO(GREG_PROCESSOR_INIT), pir); | ||
| 1650 | mpic_read(mpic->gregs, MPIC_INFO(GREG_PROCESSOR_INIT)); | ||
| 1651 | |||
| 1652 | /* Restore target bit after reset complete */ | ||
| 1653 | pir &= ~(1 << cpuid); | ||
| 1654 | mpic_write(mpic->gregs, MPIC_INFO(GREG_PROCESSOR_INIT), pir); | ||
| 1655 | mpic_read(mpic->gregs, MPIC_INFO(GREG_PROCESSOR_INIT)); | ||
| 1656 | } | ||
| 1639 | #endif /* CONFIG_SMP */ | 1657 | #endif /* CONFIG_SMP */ |
| 1640 | 1658 | ||
| 1641 | #ifdef CONFIG_PM | 1659 | #ifdef CONFIG_PM |
diff --git a/arch/powerpc/sysdev/mpic.h b/arch/powerpc/sysdev/mpic.h index eff433c322a0..e4a6df77b8d7 100644 --- a/arch/powerpc/sysdev/mpic.h +++ b/arch/powerpc/sysdev/mpic.h | |||
| @@ -37,5 +37,6 @@ static inline int mpic_pasemi_msi_init(struct mpic *mpic) | |||
| 37 | extern int mpic_set_irq_type(unsigned int virq, unsigned int flow_type); | 37 | extern int mpic_set_irq_type(unsigned int virq, unsigned int flow_type); |
| 38 | extern void mpic_set_vector(unsigned int virq, unsigned int vector); | 38 | extern void mpic_set_vector(unsigned int virq, unsigned int vector); |
| 39 | extern int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask); | 39 | extern int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask); |
| 40 | extern void mpic_reset_core(int cpu); | ||
| 40 | 41 | ||
| 41 | #endif /* _POWERPC_SYSDEV_MPIC_H */ | 42 | #endif /* _POWERPC_SYSDEV_MPIC_H */ |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index 8bad7d5f32af..0554445200bf 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
| @@ -155,6 +155,9 @@ static int do_spu_cmd(void); | |||
| 155 | #ifdef CONFIG_44x | 155 | #ifdef CONFIG_44x |
| 156 | static void dump_tlb_44x(void); | 156 | static void dump_tlb_44x(void); |
| 157 | #endif | 157 | #endif |
| 158 | #ifdef CONFIG_PPC_BOOK3E | ||
| 159 | static void dump_tlb_book3e(void); | ||
| 160 | #endif | ||
| 158 | 161 | ||
| 159 | static int xmon_no_auto_backtrace; | 162 | static int xmon_no_auto_backtrace; |
| 160 | 163 | ||
| @@ -888,6 +891,11 @@ cmds(struct pt_regs *excp) | |||
| 888 | dump_tlb_44x(); | 891 | dump_tlb_44x(); |
| 889 | break; | 892 | break; |
| 890 | #endif | 893 | #endif |
| 894 | #ifdef CONFIG_PPC_BOOK3E | ||
| 895 | case 'u': | ||
| 896 | dump_tlb_book3e(); | ||
| 897 | break; | ||
| 898 | #endif | ||
| 891 | default: | 899 | default: |
| 892 | printf("Unrecognized command: "); | 900 | printf("Unrecognized command: "); |
| 893 | do { | 901 | do { |
| @@ -2701,6 +2709,150 @@ static void dump_tlb_44x(void) | |||
| 2701 | } | 2709 | } |
| 2702 | #endif /* CONFIG_44x */ | 2710 | #endif /* CONFIG_44x */ |
| 2703 | 2711 | ||
| 2712 | #ifdef CONFIG_PPC_BOOK3E | ||
| 2713 | static void dump_tlb_book3e(void) | ||
| 2714 | { | ||
| 2715 | u32 mmucfg, pidmask, lpidmask; | ||
| 2716 | u64 ramask; | ||
| 2717 | int i, tlb, ntlbs, pidsz, lpidsz, rasz, lrat = 0; | ||
| 2718 | int mmu_version; | ||
| 2719 | static const char *pgsz_names[] = { | ||
| 2720 | " 1K", | ||
| 2721 | " 2K", | ||
| 2722 | " 4K", | ||
| 2723 | " 8K", | ||
| 2724 | " 16K", | ||
| 2725 | " 32K", | ||
| 2726 | " 64K", | ||
| 2727 | "128K", | ||
| 2728 | "256K", | ||
| 2729 | "512K", | ||
| 2730 | " 1M", | ||
| 2731 | " 2M", | ||
| 2732 | " 4M", | ||
| 2733 | " 8M", | ||
| 2734 | " 16M", | ||
| 2735 | " 32M", | ||
| 2736 | " 64M", | ||
| 2737 | "128M", | ||
| 2738 | "256M", | ||
| 2739 | "512M", | ||
| 2740 | " 1G", | ||
| 2741 | " 2G", | ||
| 2742 | " 4G", | ||
| 2743 | " 8G", | ||
| 2744 | " 16G", | ||
| 2745 | " 32G", | ||
| 2746 | " 64G", | ||
| 2747 | "128G", | ||
| 2748 | "256G", | ||
| 2749 | "512G", | ||
| 2750 | " 1T", | ||
| 2751 | " 2T", | ||
| 2752 | }; | ||
| 2753 | |||
| 2754 | /* Gather some infos about the MMU */ | ||
| 2755 | mmucfg = mfspr(SPRN_MMUCFG); | ||
| 2756 | mmu_version = (mmucfg & 3) + 1; | ||
| 2757 | ntlbs = ((mmucfg >> 2) & 3) + 1; | ||
| 2758 | pidsz = ((mmucfg >> 6) & 0x1f) + 1; | ||
| 2759 | lpidsz = (mmucfg >> 24) & 0xf; | ||
| 2760 | rasz = (mmucfg >> 16) & 0x7f; | ||
| 2761 | if ((mmu_version > 1) && (mmucfg & 0x10000)) | ||
| 2762 | lrat = 1; | ||
| 2763 | printf("Book3E MMU MAV=%d.0,%d TLBs,%d-bit PID,%d-bit LPID,%d-bit RA\n", | ||
| 2764 | mmu_version, ntlbs, pidsz, lpidsz, rasz); | ||
| 2765 | pidmask = (1ul << pidsz) - 1; | ||
| 2766 | lpidmask = (1ul << lpidsz) - 1; | ||
| 2767 | ramask = (1ull << rasz) - 1; | ||
| 2768 | |||
| 2769 | for (tlb = 0; tlb < ntlbs; tlb++) { | ||
| 2770 | u32 tlbcfg; | ||
| 2771 | int nent, assoc, new_cc = 1; | ||
| 2772 | printf("TLB %d:\n------\n", tlb); | ||
| 2773 | switch(tlb) { | ||
| 2774 | case 0: | ||
| 2775 | tlbcfg = mfspr(SPRN_TLB0CFG); | ||
| 2776 | break; | ||
| 2777 | case 1: | ||
| 2778 | tlbcfg = mfspr(SPRN_TLB1CFG); | ||
| 2779 | break; | ||
| 2780 | case 2: | ||
| 2781 | tlbcfg = mfspr(SPRN_TLB2CFG); | ||
| 2782 | break; | ||
| 2783 | case 3: | ||
| 2784 | tlbcfg = mfspr(SPRN_TLB3CFG); | ||
| 2785 | break; | ||
| 2786 | default: | ||
| 2787 | printf("Unsupported TLB number !\n"); | ||
| 2788 | continue; | ||
| 2789 | } | ||
| 2790 | nent = tlbcfg & 0xfff; | ||
| 2791 | assoc = (tlbcfg >> 24) & 0xff; | ||
| 2792 | for (i = 0; i < nent; i++) { | ||
| 2793 | u32 mas0 = MAS0_TLBSEL(tlb); | ||
| 2794 | u32 mas1 = MAS1_TSIZE(BOOK3E_PAGESZ_4K); | ||
| 2795 | u64 mas2 = 0; | ||
| 2796 | u64 mas7_mas3; | ||
| 2797 | int esel = i, cc = i; | ||
| 2798 | |||
| 2799 | if (assoc != 0) { | ||
| 2800 | cc = i / assoc; | ||
| 2801 | esel = i % assoc; | ||
| 2802 | mas2 = cc * 0x1000; | ||
| 2803 | } | ||
| 2804 | |||
| 2805 | mas0 |= MAS0_ESEL(esel); | ||
| 2806 | mtspr(SPRN_MAS0, mas0); | ||
| 2807 | mtspr(SPRN_MAS1, mas1); | ||
| 2808 | mtspr(SPRN_MAS2, mas2); | ||
| 2809 | asm volatile("tlbre 0,0,0" : : : "memory"); | ||
| 2810 | mas1 = mfspr(SPRN_MAS1); | ||
| 2811 | mas2 = mfspr(SPRN_MAS2); | ||
| 2812 | mas7_mas3 = mfspr(SPRN_MAS7_MAS3); | ||
| 2813 | if (assoc && (i % assoc) == 0) | ||
| 2814 | new_cc = 1; | ||
| 2815 | if (!(mas1 & MAS1_VALID)) | ||
| 2816 | continue; | ||
| 2817 | if (assoc == 0) | ||
| 2818 | printf("%04x- ", i); | ||
| 2819 | else if (new_cc) | ||
| 2820 | printf("%04x-%c", cc, 'A' + esel); | ||
| 2821 | else | ||
| 2822 | printf(" |%c", 'A' + esel); | ||
| 2823 | new_cc = 0; | ||
| 2824 | printf(" %016llx %04x %s %c%c AS%c", | ||
| 2825 | mas2 & ~0x3ffull, | ||
| 2826 | (mas1 >> 16) & 0x3fff, | ||
| 2827 | pgsz_names[(mas1 >> 7) & 0x1f], | ||
| 2828 | mas1 & MAS1_IND ? 'I' : ' ', | ||
| 2829 | mas1 & MAS1_IPROT ? 'P' : ' ', | ||
| 2830 | mas1 & MAS1_TS ? '1' : '0'); | ||
| 2831 | printf(" %c%c%c%c%c%c%c", | ||
| 2832 | mas2 & MAS2_X0 ? 'a' : ' ', | ||
| 2833 | mas2 & MAS2_X1 ? 'v' : ' ', | ||
| 2834 | mas2 & MAS2_W ? 'w' : ' ', | ||
| 2835 | mas2 & MAS2_I ? 'i' : ' ', | ||
| 2836 | mas2 & MAS2_M ? 'm' : ' ', | ||
| 2837 | mas2 & MAS2_G ? 'g' : ' ', | ||
| 2838 | mas2 & MAS2_E ? 'e' : ' '); | ||
| 2839 | printf(" %016llx", mas7_mas3 & ramask & ~0x7ffull); | ||
| 2840 | if (mas1 & MAS1_IND) | ||
| 2841 | printf(" %s\n", | ||
| 2842 | pgsz_names[(mas7_mas3 >> 1) & 0x1f]); | ||
| 2843 | else | ||
| 2844 | printf(" U%c%c%c S%c%c%c\n", | ||
| 2845 | mas7_mas3 & MAS3_UX ? 'x' : ' ', | ||
| 2846 | mas7_mas3 & MAS3_UW ? 'w' : ' ', | ||
| 2847 | mas7_mas3 & MAS3_UR ? 'r' : ' ', | ||
| 2848 | mas7_mas3 & MAS3_SX ? 'x' : ' ', | ||
| 2849 | mas7_mas3 & MAS3_SW ? 'w' : ' ', | ||
| 2850 | mas7_mas3 & MAS3_SR ? 'r' : ' '); | ||
| 2851 | } | ||
| 2852 | } | ||
| 2853 | } | ||
| 2854 | #endif /* CONFIG_PPC_BOOK3E */ | ||
| 2855 | |||
| 2704 | static void xmon_init(int enable) | 2856 | static void xmon_init(int enable) |
| 2705 | { | 2857 | { |
| 2706 | #ifdef CONFIG_PPC_ISERIES | 2858 | #ifdef CONFIG_PPC_ISERIES |
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c index b2e6e73888b5..0e8ae298b3c3 100644 --- a/arch/sparc/mm/iommu.c +++ b/arch/sparc/mm/iommu.c | |||
| @@ -63,7 +63,7 @@ static void __init sbus_iommu_init(struct of_device *op) | |||
| 63 | unsigned long *bitmap; | 63 | unsigned long *bitmap; |
| 64 | unsigned long tmp; | 64 | unsigned long tmp; |
| 65 | 65 | ||
| 66 | iommu = kmalloc(sizeof(struct iommu_struct), GFP_ATOMIC); | 66 | iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL); |
| 67 | if (!iommu) { | 67 | if (!iommu) { |
| 68 | prom_printf("Unable to allocate iommu structure\n"); | 68 | prom_printf("Unable to allocate iommu structure\n"); |
| 69 | prom_halt(); | 69 | prom_halt(); |
diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index 70abda7058c8..ff2546ce7178 100644 --- a/arch/x86/include/asm/hypervisor.h +++ b/arch/x86/include/asm/hypervisor.h | |||
| @@ -45,5 +45,6 @@ extern const struct hypervisor_x86 *x86_hyper; | |||
| 45 | /* Recognized hypervisors */ | 45 | /* Recognized hypervisors */ |
| 46 | extern const struct hypervisor_x86 x86_hyper_vmware; | 46 | extern const struct hypervisor_x86 x86_hyper_vmware; |
| 47 | extern const struct hypervisor_x86 x86_hyper_ms_hyperv; | 47 | extern const struct hypervisor_x86 x86_hyper_ms_hyperv; |
| 48 | extern const struct hypervisor_x86 x86_hyper_xen_hvm; | ||
| 48 | 49 | ||
| 49 | #endif | 50 | #endif |
diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index 8767d99c4f64..e2ca30092557 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h | |||
| @@ -125,6 +125,9 @@ | |||
| 125 | */ | 125 | */ |
| 126 | #define MCE_SELF_VECTOR 0xeb | 126 | #define MCE_SELF_VECTOR 0xeb |
| 127 | 127 | ||
| 128 | /* Xen vector callback to receive events in a HVM domain */ | ||
| 129 | #define XEN_HVM_EVTCHN_CALLBACK 0xe9 | ||
| 130 | |||
| 128 | #define NR_VECTORS 256 | 131 | #define NR_VECTORS 256 |
| 129 | 132 | ||
| 130 | #define FPU_IRQ 13 | 133 | #define FPU_IRQ 13 |
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 86b1506f4179..ef292c792d74 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h | |||
| @@ -82,7 +82,7 @@ void *extend_brk(size_t size, size_t align); | |||
| 82 | * executable.) | 82 | * executable.) |
| 83 | */ | 83 | */ |
| 84 | #define RESERVE_BRK(name,sz) \ | 84 | #define RESERVE_BRK(name,sz) \ |
| 85 | static void __section(.discard) __used \ | 85 | static void __section(.discard.text) __used \ |
| 86 | __brk_reservation_fn_##name##__(void) { \ | 86 | __brk_reservation_fn_##name##__(void) { \ |
| 87 | asm volatile ( \ | 87 | asm volatile ( \ |
| 88 | ".pushsection .brk_reservation,\"aw\",@nobits;" \ | 88 | ".pushsection .brk_reservation,\"aw\",@nobits;" \ |
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 9c371e4a9fa6..7fda040a76cd 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h | |||
| @@ -417,6 +417,12 @@ HYPERVISOR_nmi_op(unsigned long op, unsigned long arg) | |||
| 417 | return _hypercall2(int, nmi_op, op, arg); | 417 | return _hypercall2(int, nmi_op, op, arg); |
| 418 | } | 418 | } |
| 419 | 419 | ||
| 420 | static inline unsigned long __must_check | ||
| 421 | HYPERVISOR_hvm_op(int op, void *arg) | ||
| 422 | { | ||
| 423 | return _hypercall2(unsigned long, hvm_op, op, arg); | ||
| 424 | } | ||
| 425 | |||
| 420 | static inline void | 426 | static inline void |
| 421 | MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set) | 427 | MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set) |
| 422 | { | 428 | { |
diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index dd531cc56a8f..8095f8611f8a 100644 --- a/arch/x86/kernel/cpu/hypervisor.c +++ b/arch/x86/kernel/cpu/hypervisor.c | |||
| @@ -34,6 +34,9 @@ static const __initconst struct hypervisor_x86 * const hypervisors[] = | |||
| 34 | { | 34 | { |
| 35 | &x86_hyper_vmware, | 35 | &x86_hyper_vmware, |
| 36 | &x86_hyper_ms_hyperv, | 36 | &x86_hyper_ms_hyperv, |
| 37 | #ifdef CONFIG_XEN_PVHVM | ||
| 38 | &x86_hyper_xen_hvm, | ||
| 39 | #endif | ||
| 37 | }; | 40 | }; |
| 38 | 41 | ||
| 39 | const struct hypervisor_x86 *x86_hyper; | 42 | const struct hypervisor_x86 *x86_hyper; |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index cd49141cf153..6b196834a0dd 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -1166,6 +1166,9 @@ ENTRY(xen_failsafe_callback) | |||
| 1166 | .previous | 1166 | .previous |
| 1167 | ENDPROC(xen_failsafe_callback) | 1167 | ENDPROC(xen_failsafe_callback) |
| 1168 | 1168 | ||
| 1169 | BUILD_INTERRUPT3(xen_hvm_callback_vector, XEN_HVM_EVTCHN_CALLBACK, | ||
| 1170 | xen_evtchn_do_upcall) | ||
| 1171 | |||
| 1169 | #endif /* CONFIG_XEN */ | 1172 | #endif /* CONFIG_XEN */ |
| 1170 | 1173 | ||
| 1171 | #ifdef CONFIG_FUNCTION_TRACER | 1174 | #ifdef CONFIG_FUNCTION_TRACER |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 4db7c4d12ffa..649ed17f7009 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
| @@ -1329,6 +1329,9 @@ ENTRY(xen_failsafe_callback) | |||
| 1329 | CFI_ENDPROC | 1329 | CFI_ENDPROC |
| 1330 | END(xen_failsafe_callback) | 1330 | END(xen_failsafe_callback) |
| 1331 | 1331 | ||
| 1332 | apicinterrupt XEN_HVM_EVTCHN_CALLBACK \ | ||
| 1333 | xen_hvm_callback_vector xen_evtchn_do_upcall | ||
| 1334 | |||
| 1332 | #endif /* CONFIG_XEN */ | 1335 | #endif /* CONFIG_XEN */ |
| 1333 | 1336 | ||
| 1334 | /* | 1337 | /* |
diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig index b83e119fbeb0..68128a1b401a 100644 --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig | |||
| @@ -13,6 +13,11 @@ config XEN | |||
| 13 | kernel to boot in a paravirtualized environment under the | 13 | kernel to boot in a paravirtualized environment under the |
| 14 | Xen hypervisor. | 14 | Xen hypervisor. |
| 15 | 15 | ||
| 16 | config XEN_PVHVM | ||
| 17 | def_bool y | ||
| 18 | depends on XEN | ||
| 19 | depends on X86_LOCAL_APIC | ||
| 20 | |||
| 16 | config XEN_MAX_DOMAIN_MEMORY | 21 | config XEN_MAX_DOMAIN_MEMORY |
| 17 | int "Maximum allowed size of a domain in gigabytes" | 22 | int "Maximum allowed size of a domain in gigabytes" |
| 18 | default 8 if X86_32 | 23 | default 8 if X86_32 |
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index 3bb4fc21f4f2..930954685980 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile | |||
| @@ -12,7 +12,7 @@ CFLAGS_mmu.o := $(nostackp) | |||
| 12 | 12 | ||
| 13 | obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ | 13 | obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ |
| 14 | time.o xen-asm.o xen-asm_$(BITS).o \ | 14 | time.o xen-asm.o xen-asm_$(BITS).o \ |
| 15 | grant-table.o suspend.o | 15 | grant-table.o suspend.o platform-pci-unplug.o |
| 16 | 16 | ||
| 17 | obj-$(CONFIG_SMP) += smp.o | 17 | obj-$(CONFIG_SMP) += smp.o |
| 18 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o | 18 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 65d8d79b46a8..d4ff5e83621d 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007 | 11 | * Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007 |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <linux/cpu.h> | ||
| 14 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
| 15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 16 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
| @@ -35,8 +36,10 @@ | |||
| 35 | #include <xen/interface/version.h> | 36 | #include <xen/interface/version.h> |
| 36 | #include <xen/interface/physdev.h> | 37 | #include <xen/interface/physdev.h> |
| 37 | #include <xen/interface/vcpu.h> | 38 | #include <xen/interface/vcpu.h> |
| 39 | #include <xen/interface/memory.h> | ||
| 38 | #include <xen/features.h> | 40 | #include <xen/features.h> |
| 39 | #include <xen/page.h> | 41 | #include <xen/page.h> |
| 42 | #include <xen/hvm.h> | ||
| 40 | #include <xen/hvc-console.h> | 43 | #include <xen/hvc-console.h> |
| 41 | 44 | ||
| 42 | #include <asm/paravirt.h> | 45 | #include <asm/paravirt.h> |
| @@ -55,7 +58,9 @@ | |||
| 55 | #include <asm/pgtable.h> | 58 | #include <asm/pgtable.h> |
| 56 | #include <asm/tlbflush.h> | 59 | #include <asm/tlbflush.h> |
| 57 | #include <asm/reboot.h> | 60 | #include <asm/reboot.h> |
| 61 | #include <asm/setup.h> | ||
| 58 | #include <asm/stackprotector.h> | 62 | #include <asm/stackprotector.h> |
| 63 | #include <asm/hypervisor.h> | ||
| 59 | 64 | ||
| 60 | #include "xen-ops.h" | 65 | #include "xen-ops.h" |
| 61 | #include "mmu.h" | 66 | #include "mmu.h" |
| @@ -76,6 +81,10 @@ struct shared_info xen_dummy_shared_info; | |||
| 76 | 81 | ||
| 77 | void *xen_initial_gdt; | 82 | void *xen_initial_gdt; |
| 78 | 83 | ||
| 84 | RESERVE_BRK(shared_info_page_brk, PAGE_SIZE); | ||
| 85 | __read_mostly int xen_have_vector_callback; | ||
| 86 | EXPORT_SYMBOL_GPL(xen_have_vector_callback); | ||
| 87 | |||
| 79 | /* | 88 | /* |
| 80 | * Point at some empty memory to start with. We map the real shared_info | 89 | * Point at some empty memory to start with. We map the real shared_info |
| 81 | * page as soon as fixmap is up and running. | 90 | * page as soon as fixmap is up and running. |
| @@ -97,6 +106,14 @@ struct shared_info *HYPERVISOR_shared_info = (void *)&xen_dummy_shared_info; | |||
| 97 | */ | 106 | */ |
| 98 | static int have_vcpu_info_placement = 1; | 107 | static int have_vcpu_info_placement = 1; |
| 99 | 108 | ||
| 109 | static void clamp_max_cpus(void) | ||
| 110 | { | ||
| 111 | #ifdef CONFIG_SMP | ||
| 112 | if (setup_max_cpus > MAX_VIRT_CPUS) | ||
| 113 | setup_max_cpus = MAX_VIRT_CPUS; | ||
| 114 | #endif | ||
| 115 | } | ||
| 116 | |||
| 100 | static void xen_vcpu_setup(int cpu) | 117 | static void xen_vcpu_setup(int cpu) |
| 101 | { | 118 | { |
| 102 | struct vcpu_register_vcpu_info info; | 119 | struct vcpu_register_vcpu_info info; |
| @@ -104,13 +121,17 @@ static void xen_vcpu_setup(int cpu) | |||
| 104 | struct vcpu_info *vcpup; | 121 | struct vcpu_info *vcpup; |
| 105 | 122 | ||
| 106 | BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); | 123 | BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); |
| 107 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
| 108 | 124 | ||
| 109 | if (!have_vcpu_info_placement) | 125 | if (cpu < MAX_VIRT_CPUS) |
| 110 | return; /* already tested, not available */ | 126 | per_cpu(xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; |
| 111 | 127 | ||
| 112 | vcpup = &per_cpu(xen_vcpu_info, cpu); | 128 | if (!have_vcpu_info_placement) { |
| 129 | if (cpu >= MAX_VIRT_CPUS) | ||
| 130 | clamp_max_cpus(); | ||
| 131 | return; | ||
| 132 | } | ||
| 113 | 133 | ||
| 134 | vcpup = &per_cpu(xen_vcpu_info, cpu); | ||
| 114 | info.mfn = arbitrary_virt_to_mfn(vcpup); | 135 | info.mfn = arbitrary_virt_to_mfn(vcpup); |
| 115 | info.offset = offset_in_page(vcpup); | 136 | info.offset = offset_in_page(vcpup); |
| 116 | 137 | ||
| @@ -125,6 +146,7 @@ static void xen_vcpu_setup(int cpu) | |||
| 125 | if (err) { | 146 | if (err) { |
| 126 | printk(KERN_DEBUG "register_vcpu_info failed: err=%d\n", err); | 147 | printk(KERN_DEBUG "register_vcpu_info failed: err=%d\n", err); |
| 127 | have_vcpu_info_placement = 0; | 148 | have_vcpu_info_placement = 0; |
| 149 | clamp_max_cpus(); | ||
| 128 | } else { | 150 | } else { |
| 129 | /* This cpu is using the registered vcpu info, even if | 151 | /* This cpu is using the registered vcpu info, even if |
| 130 | later ones fail to. */ | 152 | later ones fail to. */ |
| @@ -731,7 +753,6 @@ static void set_xen_basic_apic_ops(void) | |||
| 731 | 753 | ||
| 732 | #endif | 754 | #endif |
| 733 | 755 | ||
| 734 | |||
| 735 | static void xen_clts(void) | 756 | static void xen_clts(void) |
| 736 | { | 757 | { |
| 737 | struct multicall_space mcs; | 758 | struct multicall_space mcs; |
| @@ -926,10 +947,6 @@ static const struct pv_init_ops xen_init_ops __initdata = { | |||
| 926 | .patch = xen_patch, | 947 | .patch = xen_patch, |
| 927 | }; | 948 | }; |
| 928 | 949 | ||
| 929 | static const struct pv_time_ops xen_time_ops __initdata = { | ||
| 930 | .sched_clock = xen_sched_clock, | ||
| 931 | }; | ||
| 932 | |||
| 933 | static const struct pv_cpu_ops xen_cpu_ops __initdata = { | 950 | static const struct pv_cpu_ops xen_cpu_ops __initdata = { |
| 934 | .cpuid = xen_cpuid, | 951 | .cpuid = xen_cpuid, |
| 935 | 952 | ||
| @@ -1028,6 +1045,23 @@ static void xen_crash_shutdown(struct pt_regs *regs) | |||
| 1028 | xen_reboot(SHUTDOWN_crash); | 1045 | xen_reboot(SHUTDOWN_crash); |
| 1029 | } | 1046 | } |
| 1030 | 1047 | ||
| 1048 | static int | ||
| 1049 | xen_panic_event(struct notifier_block *this, unsigned long event, void *ptr) | ||
| 1050 | { | ||
| 1051 | xen_reboot(SHUTDOWN_crash); | ||
| 1052 | return NOTIFY_DONE; | ||
| 1053 | } | ||
| 1054 | |||
| 1055 | static struct notifier_block xen_panic_block = { | ||
| 1056 | .notifier_call= xen_panic_event, | ||
| 1057 | }; | ||
| 1058 | |||
| 1059 | int xen_panic_handler_init(void) | ||
| 1060 | { | ||
| 1061 | atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block); | ||
| 1062 | return 0; | ||
| 1063 | } | ||
| 1064 | |||
| 1031 | static const struct machine_ops __initdata xen_machine_ops = { | 1065 | static const struct machine_ops __initdata xen_machine_ops = { |
| 1032 | .restart = xen_restart, | 1066 | .restart = xen_restart, |
| 1033 | .halt = xen_machine_halt, | 1067 | .halt = xen_machine_halt, |
| @@ -1067,7 +1101,6 @@ asmlinkage void __init xen_start_kernel(void) | |||
| 1067 | /* Install Xen paravirt ops */ | 1101 | /* Install Xen paravirt ops */ |
| 1068 | pv_info = xen_info; | 1102 | pv_info = xen_info; |
| 1069 | pv_init_ops = xen_init_ops; | 1103 | pv_init_ops = xen_init_ops; |
| 1070 | pv_time_ops = xen_time_ops; | ||
| 1071 | pv_cpu_ops = xen_cpu_ops; | 1104 | pv_cpu_ops = xen_cpu_ops; |
| 1072 | pv_apic_ops = xen_apic_ops; | 1105 | pv_apic_ops = xen_apic_ops; |
| 1073 | 1106 | ||
| @@ -1075,13 +1108,7 @@ asmlinkage void __init xen_start_kernel(void) | |||
| 1075 | x86_init.oem.arch_setup = xen_arch_setup; | 1108 | x86_init.oem.arch_setup = xen_arch_setup; |
| 1076 | x86_init.oem.banner = xen_banner; | 1109 | x86_init.oem.banner = xen_banner; |
| 1077 | 1110 | ||
| 1078 | x86_init.timers.timer_init = xen_time_init; | 1111 | xen_init_time_ops(); |
| 1079 | x86_init.timers.setup_percpu_clockev = x86_init_noop; | ||
| 1080 | x86_cpuinit.setup_percpu_clockev = x86_init_noop; | ||
| 1081 | |||
| 1082 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
| 1083 | x86_platform.get_wallclock = xen_get_wallclock; | ||
| 1084 | x86_platform.set_wallclock = xen_set_wallclock; | ||
| 1085 | 1112 | ||
| 1086 | /* | 1113 | /* |
| 1087 | * Set up some pagetable state before starting to set any ptes. | 1114 | * Set up some pagetable state before starting to set any ptes. |
| @@ -1206,3 +1233,139 @@ asmlinkage void __init xen_start_kernel(void) | |||
| 1206 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); | 1233 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); |
| 1207 | #endif | 1234 | #endif |
| 1208 | } | 1235 | } |
| 1236 | |||
| 1237 | static uint32_t xen_cpuid_base(void) | ||
| 1238 | { | ||
| 1239 | uint32_t base, eax, ebx, ecx, edx; | ||
| 1240 | char signature[13]; | ||
| 1241 | |||
| 1242 | for (base = 0x40000000; base < 0x40010000; base += 0x100) { | ||
| 1243 | cpuid(base, &eax, &ebx, &ecx, &edx); | ||
| 1244 | *(uint32_t *)(signature + 0) = ebx; | ||
| 1245 | *(uint32_t *)(signature + 4) = ecx; | ||
| 1246 | *(uint32_t *)(signature + 8) = edx; | ||
| 1247 | signature[12] = 0; | ||
| 1248 | |||
| 1249 | if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2)) | ||
| 1250 | return base; | ||
| 1251 | } | ||
| 1252 | |||
| 1253 | return 0; | ||
| 1254 | } | ||
| 1255 | |||
| 1256 | static int init_hvm_pv_info(int *major, int *minor) | ||
| 1257 | { | ||
| 1258 | uint32_t eax, ebx, ecx, edx, pages, msr, base; | ||
| 1259 | u64 pfn; | ||
| 1260 | |||
| 1261 | base = xen_cpuid_base(); | ||
| 1262 | cpuid(base + 1, &eax, &ebx, &ecx, &edx); | ||
| 1263 | |||
| 1264 | *major = eax >> 16; | ||
| 1265 | *minor = eax & 0xffff; | ||
| 1266 | printk(KERN_INFO "Xen version %d.%d.\n", *major, *minor); | ||
| 1267 | |||
| 1268 | cpuid(base + 2, &pages, &msr, &ecx, &edx); | ||
| 1269 | |||
| 1270 | pfn = __pa(hypercall_page); | ||
| 1271 | wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32)); | ||
| 1272 | |||
| 1273 | xen_setup_features(); | ||
| 1274 | |||
| 1275 | pv_info = xen_info; | ||
| 1276 | pv_info.kernel_rpl = 0; | ||
| 1277 | |||
| 1278 | xen_domain_type = XEN_HVM_DOMAIN; | ||
| 1279 | |||
| 1280 | return 0; | ||
| 1281 | } | ||
| 1282 | |||
| 1283 | void xen_hvm_init_shared_info(void) | ||
| 1284 | { | ||
| 1285 | int cpu; | ||
| 1286 | struct xen_add_to_physmap xatp; | ||
| 1287 | static struct shared_info *shared_info_page = 0; | ||
| 1288 | |||
| 1289 | if (!shared_info_page) | ||
| 1290 | shared_info_page = (struct shared_info *) | ||
| 1291 | extend_brk(PAGE_SIZE, PAGE_SIZE); | ||
| 1292 | xatp.domid = DOMID_SELF; | ||
| 1293 | xatp.idx = 0; | ||
| 1294 | xatp.space = XENMAPSPACE_shared_info; | ||
| 1295 | xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT; | ||
| 1296 | if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp)) | ||
| 1297 | BUG(); | ||
| 1298 | |||
| 1299 | HYPERVISOR_shared_info = (struct shared_info *)shared_info_page; | ||
| 1300 | |||
| 1301 | /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info | ||
| 1302 | * page, we use it in the event channel upcall and in some pvclock | ||
| 1303 | * related functions. We don't need the vcpu_info placement | ||
| 1304 | * optimizations because we don't use any pv_mmu or pv_irq op on | ||
| 1305 | * HVM. | ||
| 1306 | * When xen_hvm_init_shared_info is run at boot time only vcpu 0 is | ||
| 1307 | * online but xen_hvm_init_shared_info is run at resume time too and | ||
| 1308 | * in that case multiple vcpus might be online. */ | ||
| 1309 | for_each_online_cpu(cpu) { | ||
| 1310 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
| 1311 | } | ||
| 1312 | } | ||
| 1313 | |||
| 1314 | #ifdef CONFIG_XEN_PVHVM | ||
| 1315 | static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self, | ||
| 1316 | unsigned long action, void *hcpu) | ||
| 1317 | { | ||
| 1318 | int cpu = (long)hcpu; | ||
| 1319 | switch (action) { | ||
| 1320 | case CPU_UP_PREPARE: | ||
| 1321 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
| 1322 | break; | ||
| 1323 | default: | ||
| 1324 | break; | ||
| 1325 | } | ||
| 1326 | return NOTIFY_OK; | ||
| 1327 | } | ||
| 1328 | |||
| 1329 | static struct notifier_block __cpuinitdata xen_hvm_cpu_notifier = { | ||
| 1330 | .notifier_call = xen_hvm_cpu_notify, | ||
| 1331 | }; | ||
| 1332 | |||
| 1333 | static void __init xen_hvm_guest_init(void) | ||
| 1334 | { | ||
| 1335 | int r; | ||
| 1336 | int major, minor; | ||
| 1337 | |||
| 1338 | r = init_hvm_pv_info(&major, &minor); | ||
| 1339 | if (r < 0) | ||
| 1340 | return; | ||
| 1341 | |||
| 1342 | xen_hvm_init_shared_info(); | ||
| 1343 | |||
| 1344 | if (xen_feature(XENFEAT_hvm_callback_vector)) | ||
| 1345 | xen_have_vector_callback = 1; | ||
| 1346 | register_cpu_notifier(&xen_hvm_cpu_notifier); | ||
| 1347 | xen_unplug_emulated_devices(); | ||
| 1348 | have_vcpu_info_placement = 0; | ||
| 1349 | x86_init.irqs.intr_init = xen_init_IRQ; | ||
| 1350 | xen_hvm_init_time_ops(); | ||
| 1351 | xen_hvm_init_mmu_ops(); | ||
| 1352 | } | ||
| 1353 | |||
| 1354 | static bool __init xen_hvm_platform(void) | ||
| 1355 | { | ||
| 1356 | if (xen_pv_domain()) | ||
| 1357 | return false; | ||
| 1358 | |||
| 1359 | if (!xen_cpuid_base()) | ||
| 1360 | return false; | ||
| 1361 | |||
| 1362 | return true; | ||
| 1363 | } | ||
| 1364 | |||
| 1365 | const __refconst struct hypervisor_x86 x86_hyper_xen_hvm = { | ||
| 1366 | .name = "Xen HVM", | ||
| 1367 | .detect = xen_hvm_platform, | ||
| 1368 | .init_platform = xen_hvm_guest_init, | ||
| 1369 | }; | ||
| 1370 | EXPORT_SYMBOL(x86_hyper_xen_hvm); | ||
| 1371 | #endif | ||
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 914f04695ce5..413b19b3d0fe 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
| @@ -58,6 +58,7 @@ | |||
| 58 | 58 | ||
| 59 | #include <xen/page.h> | 59 | #include <xen/page.h> |
| 60 | #include <xen/interface/xen.h> | 60 | #include <xen/interface/xen.h> |
| 61 | #include <xen/interface/hvm/hvm_op.h> | ||
| 61 | #include <xen/interface/version.h> | 62 | #include <xen/interface/version.h> |
| 62 | #include <xen/hvc-console.h> | 63 | #include <xen/hvc-console.h> |
| 63 | 64 | ||
| @@ -1941,6 +1942,40 @@ void __init xen_init_mmu_ops(void) | |||
| 1941 | pv_mmu_ops = xen_mmu_ops; | 1942 | pv_mmu_ops = xen_mmu_ops; |
| 1942 | } | 1943 | } |
| 1943 | 1944 | ||
| 1945 | #ifdef CONFIG_XEN_PVHVM | ||
| 1946 | static void xen_hvm_exit_mmap(struct mm_struct *mm) | ||
| 1947 | { | ||
| 1948 | struct xen_hvm_pagetable_dying a; | ||
| 1949 | int rc; | ||
| 1950 | |||
| 1951 | a.domid = DOMID_SELF; | ||
| 1952 | a.gpa = __pa(mm->pgd); | ||
| 1953 | rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); | ||
| 1954 | WARN_ON_ONCE(rc < 0); | ||
| 1955 | } | ||
| 1956 | |||
| 1957 | static int is_pagetable_dying_supported(void) | ||
| 1958 | { | ||
| 1959 | struct xen_hvm_pagetable_dying a; | ||
| 1960 | int rc = 0; | ||
| 1961 | |||
| 1962 | a.domid = DOMID_SELF; | ||
| 1963 | a.gpa = 0x00; | ||
| 1964 | rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); | ||
| 1965 | if (rc < 0) { | ||
| 1966 | printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); | ||
| 1967 | return 0; | ||
| 1968 | } | ||
| 1969 | return 1; | ||
| 1970 | } | ||
| 1971 | |||
| 1972 | void __init xen_hvm_init_mmu_ops(void) | ||
| 1973 | { | ||
| 1974 | if (is_pagetable_dying_supported()) | ||
| 1975 | pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; | ||
| 1976 | } | ||
| 1977 | #endif | ||
| 1978 | |||
| 1944 | #ifdef CONFIG_XEN_DEBUG_FS | 1979 | #ifdef CONFIG_XEN_DEBUG_FS |
| 1945 | 1980 | ||
| 1946 | static struct dentry *d_mmu_debug; | 1981 | static struct dentry *d_mmu_debug; |
diff --git a/arch/x86/xen/mmu.h b/arch/x86/xen/mmu.h index 5fe6bc7f5ecf..fa938c4aa2f7 100644 --- a/arch/x86/xen/mmu.h +++ b/arch/x86/xen/mmu.h | |||
| @@ -60,4 +60,5 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr, | |||
| 60 | unsigned long xen_read_cr2_direct(void); | 60 | unsigned long xen_read_cr2_direct(void); |
| 61 | 61 | ||
| 62 | extern void xen_init_mmu_ops(void); | 62 | extern void xen_init_mmu_ops(void); |
| 63 | extern void xen_hvm_init_mmu_ops(void); | ||
| 63 | #endif /* _XEN_MMU_H */ | 64 | #endif /* _XEN_MMU_H */ |
diff --git a/arch/x86/xen/platform-pci-unplug.c b/arch/x86/xen/platform-pci-unplug.c new file mode 100644 index 000000000000..554c002a1e1a --- /dev/null +++ b/arch/x86/xen/platform-pci-unplug.c | |||
| @@ -0,0 +1,137 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | * platform-pci-unplug.c | ||
| 3 | * | ||
| 4 | * Xen platform PCI device driver | ||
| 5 | * Copyright (c) 2010, Citrix | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms and conditions of the GNU General Public License, | ||
| 9 | * version 2, as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 14 | * more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License along with | ||
| 17 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
| 18 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
| 19 | * | ||
| 20 | */ | ||
| 21 | |||
| 22 | #include <linux/init.h> | ||
| 23 | #include <linux/io.h> | ||
| 24 | #include <linux/module.h> | ||
| 25 | |||
| 26 | #include <xen/platform_pci.h> | ||
| 27 | |||
| 28 | #define XEN_PLATFORM_ERR_MAGIC -1 | ||
| 29 | #define XEN_PLATFORM_ERR_PROTOCOL -2 | ||
| 30 | #define XEN_PLATFORM_ERR_BLACKLIST -3 | ||
| 31 | |||
| 32 | /* store the value of xen_emul_unplug after the unplug is done */ | ||
| 33 | int xen_platform_pci_unplug; | ||
| 34 | EXPORT_SYMBOL_GPL(xen_platform_pci_unplug); | ||
| 35 | #ifdef CONFIG_XEN_PVHVM | ||
| 36 | static int xen_emul_unplug; | ||
| 37 | |||
| 38 | static int __init check_platform_magic(void) | ||
| 39 | { | ||
| 40 | short magic; | ||
| 41 | char protocol; | ||
| 42 | |||
| 43 | magic = inw(XEN_IOPORT_MAGIC); | ||
| 44 | if (magic != XEN_IOPORT_MAGIC_VAL) { | ||
| 45 | printk(KERN_ERR "Xen Platform PCI: unrecognised magic value\n"); | ||
| 46 | return XEN_PLATFORM_ERR_MAGIC; | ||
| 47 | } | ||
| 48 | |||
| 49 | protocol = inb(XEN_IOPORT_PROTOVER); | ||
| 50 | |||
| 51 | printk(KERN_DEBUG "Xen Platform PCI: I/O protocol version %d\n", | ||
| 52 | protocol); | ||
| 53 | |||
| 54 | switch (protocol) { | ||
| 55 | case 1: | ||
| 56 | outw(XEN_IOPORT_LINUX_PRODNUM, XEN_IOPORT_PRODNUM); | ||
| 57 | outl(XEN_IOPORT_LINUX_DRVVER, XEN_IOPORT_DRVVER); | ||
| 58 | if (inw(XEN_IOPORT_MAGIC) != XEN_IOPORT_MAGIC_VAL) { | ||
| 59 | printk(KERN_ERR "Xen Platform: blacklisted by host\n"); | ||
| 60 | return XEN_PLATFORM_ERR_BLACKLIST; | ||
| 61 | } | ||
| 62 | break; | ||
| 63 | default: | ||
| 64 | printk(KERN_WARNING "Xen Platform PCI: unknown I/O protocol version"); | ||
| 65 | return XEN_PLATFORM_ERR_PROTOCOL; | ||
| 66 | } | ||
| 67 | |||
| 68 | return 0; | ||
| 69 | } | ||
| 70 | |||
| 71 | void __init xen_unplug_emulated_devices(void) | ||
| 72 | { | ||
| 73 | int r; | ||
| 74 | |||
| 75 | /* check the version of the xen platform PCI device */ | ||
| 76 | r = check_platform_magic(); | ||
| 77 | /* If the version matches enable the Xen platform PCI driver. | ||
| 78 | * Also enable the Xen platform PCI driver if the version is really old | ||
| 79 | * and the user told us to ignore it. */ | ||
| 80 | if (r && !(r == XEN_PLATFORM_ERR_MAGIC && | ||
| 81 | (xen_emul_unplug & XEN_UNPLUG_IGNORE))) | ||
| 82 | return; | ||
| 83 | /* Set the default value of xen_emul_unplug depending on whether or | ||
| 84 | * not the Xen PV frontends and the Xen platform PCI driver have | ||
| 85 | * been compiled for this kernel (modules or built-in are both OK). */ | ||
| 86 | if (!xen_emul_unplug) { | ||
| 87 | if (xen_must_unplug_nics()) { | ||
| 88 | printk(KERN_INFO "Netfront and the Xen platform PCI driver have " | ||
| 89 | "been compiled for this kernel: unplug emulated NICs.\n"); | ||
| 90 | xen_emul_unplug |= XEN_UNPLUG_ALL_NICS; | ||
| 91 | } | ||
| 92 | if (xen_must_unplug_disks()) { | ||
| 93 | printk(KERN_INFO "Blkfront and the Xen platform PCI driver have " | ||
| 94 | "been compiled for this kernel: unplug emulated disks.\n" | ||
| 95 | "You might have to change the root device\n" | ||
| 96 | "from /dev/hd[a-d] to /dev/xvd[a-d]\n" | ||
| 97 | "in your root= kernel command line option\n"); | ||
| 98 | xen_emul_unplug |= XEN_UNPLUG_ALL_IDE_DISKS; | ||
| 99 | } | ||
| 100 | } | ||
| 101 | /* Now unplug the emulated devices */ | ||
| 102 | if (!(xen_emul_unplug & XEN_UNPLUG_IGNORE)) | ||
| 103 | outw(xen_emul_unplug, XEN_IOPORT_UNPLUG); | ||
| 104 | xen_platform_pci_unplug = xen_emul_unplug; | ||
| 105 | } | ||
| 106 | |||
| 107 | static int __init parse_xen_emul_unplug(char *arg) | ||
| 108 | { | ||
| 109 | char *p, *q; | ||
| 110 | int l; | ||
| 111 | |||
| 112 | for (p = arg; p; p = q) { | ||
| 113 | q = strchr(p, ','); | ||
| 114 | if (q) { | ||
| 115 | l = q - p; | ||
| 116 | q++; | ||
| 117 | } else { | ||
| 118 | l = strlen(p); | ||
| 119 | } | ||
| 120 | if (!strncmp(p, "all", l)) | ||
| 121 | xen_emul_unplug |= XEN_UNPLUG_ALL; | ||
| 122 | else if (!strncmp(p, "ide-disks", l)) | ||
| 123 | xen_emul_unplug |= XEN_UNPLUG_ALL_IDE_DISKS; | ||
| 124 | else if (!strncmp(p, "aux-ide-disks", l)) | ||
| 125 | xen_emul_unplug |= XEN_UNPLUG_AUX_IDE_DISKS; | ||
| 126 | else if (!strncmp(p, "nics", l)) | ||
| 127 | xen_emul_unplug |= XEN_UNPLUG_ALL_NICS; | ||
| 128 | else if (!strncmp(p, "ignore", l)) | ||
| 129 | xen_emul_unplug |= XEN_UNPLUG_IGNORE; | ||
| 130 | else | ||
| 131 | printk(KERN_WARNING "unrecognised option '%s' " | ||
| 132 | "in parameter 'xen_emul_unplug'\n", p); | ||
| 133 | } | ||
| 134 | return 0; | ||
| 135 | } | ||
| 136 | early_param("xen_emul_unplug", parse_xen_emul_unplug); | ||
| 137 | #endif | ||
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index ad0047f47cd4..328b00305426 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <xen/page.h> | 20 | #include <xen/page.h> |
| 21 | #include <xen/interface/callback.h> | 21 | #include <xen/interface/callback.h> |
| 22 | #include <xen/interface/physdev.h> | 22 | #include <xen/interface/physdev.h> |
| 23 | #include <xen/interface/memory.h> | ||
| 23 | #include <xen/features.h> | 24 | #include <xen/features.h> |
| 24 | 25 | ||
| 25 | #include "xen-ops.h" | 26 | #include "xen-ops.h" |
| @@ -32,6 +33,73 @@ extern void xen_sysenter_target(void); | |||
| 32 | extern void xen_syscall_target(void); | 33 | extern void xen_syscall_target(void); |
| 33 | extern void xen_syscall32_target(void); | 34 | extern void xen_syscall32_target(void); |
| 34 | 35 | ||
| 36 | static unsigned long __init xen_release_chunk(phys_addr_t start_addr, | ||
| 37 | phys_addr_t end_addr) | ||
| 38 | { | ||
| 39 | struct xen_memory_reservation reservation = { | ||
| 40 | .address_bits = 0, | ||
| 41 | .extent_order = 0, | ||
| 42 | .domid = DOMID_SELF | ||
| 43 | }; | ||
| 44 | unsigned long start, end; | ||
| 45 | unsigned long len = 0; | ||
| 46 | unsigned long pfn; | ||
| 47 | int ret; | ||
| 48 | |||
| 49 | start = PFN_UP(start_addr); | ||
| 50 | end = PFN_DOWN(end_addr); | ||
| 51 | |||
| 52 | if (end <= start) | ||
| 53 | return 0; | ||
| 54 | |||
| 55 | printk(KERN_INFO "xen_release_chunk: looking at area pfn %lx-%lx: ", | ||
| 56 | start, end); | ||
| 57 | for(pfn = start; pfn < end; pfn++) { | ||
| 58 | unsigned long mfn = pfn_to_mfn(pfn); | ||
| 59 | |||
| 60 | /* Make sure pfn exists to start with */ | ||
| 61 | if (mfn == INVALID_P2M_ENTRY || mfn_to_pfn(mfn) != pfn) | ||
| 62 | continue; | ||
| 63 | |||
| 64 | set_xen_guest_handle(reservation.extent_start, &mfn); | ||
| 65 | reservation.nr_extents = 1; | ||
| 66 | |||
| 67 | ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, | ||
| 68 | &reservation); | ||
| 69 | WARN(ret != 1, "Failed to release memory %lx-%lx err=%d\n", | ||
| 70 | start, end, ret); | ||
| 71 | if (ret == 1) { | ||
| 72 | set_phys_to_machine(pfn, INVALID_P2M_ENTRY); | ||
| 73 | len++; | ||
| 74 | } | ||
| 75 | } | ||
| 76 | printk(KERN_CONT "%ld pages freed\n", len); | ||
| 77 | |||
| 78 | return len; | ||
| 79 | } | ||
| 80 | |||
| 81 | static unsigned long __init xen_return_unused_memory(unsigned long max_pfn, | ||
| 82 | const struct e820map *e820) | ||
| 83 | { | ||
| 84 | phys_addr_t max_addr = PFN_PHYS(max_pfn); | ||
| 85 | phys_addr_t last_end = 0; | ||
| 86 | unsigned long released = 0; | ||
| 87 | int i; | ||
| 88 | |||
| 89 | for (i = 0; i < e820->nr_map && last_end < max_addr; i++) { | ||
| 90 | phys_addr_t end = e820->map[i].addr; | ||
| 91 | end = min(max_addr, end); | ||
| 92 | |||
| 93 | released += xen_release_chunk(last_end, end); | ||
| 94 | last_end = e820->map[i].addr + e820->map[i].size; | ||
| 95 | } | ||
| 96 | |||
| 97 | if (last_end < max_addr) | ||
| 98 | released += xen_release_chunk(last_end, max_addr); | ||
| 99 | |||
| 100 | printk(KERN_INFO "released %ld pages of unused memory\n", released); | ||
| 101 | return released; | ||
| 102 | } | ||
| 35 | 103 | ||
| 36 | /** | 104 | /** |
| 37 | * machine_specific_memory_setup - Hook for machine specific memory setup. | 105 | * machine_specific_memory_setup - Hook for machine specific memory setup. |
| @@ -67,6 +135,8 @@ char * __init xen_memory_setup(void) | |||
| 67 | 135 | ||
| 68 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); | 136 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); |
| 69 | 137 | ||
| 138 | xen_return_unused_memory(xen_start_info->nr_pages, &e820); | ||
| 139 | |||
| 70 | return "Xen"; | 140 | return "Xen"; |
| 71 | } | 141 | } |
| 72 | 142 | ||
| @@ -156,6 +226,8 @@ void __init xen_arch_setup(void) | |||
| 156 | struct physdev_set_iopl set_iopl; | 226 | struct physdev_set_iopl set_iopl; |
| 157 | int rc; | 227 | int rc; |
| 158 | 228 | ||
| 229 | xen_panic_handler_init(); | ||
| 230 | |||
| 159 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments); | 231 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments); |
| 160 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); | 232 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); |
| 161 | 233 | ||
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index a29693fd3138..25f232b18a82 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
| @@ -394,6 +394,8 @@ static void stop_self(void *v) | |||
| 394 | load_cr3(swapper_pg_dir); | 394 | load_cr3(swapper_pg_dir); |
| 395 | /* should set up a minimal gdt */ | 395 | /* should set up a minimal gdt */ |
| 396 | 396 | ||
| 397 | set_cpu_online(cpu, false); | ||
| 398 | |||
| 397 | HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL); | 399 | HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL); |
| 398 | BUG(); | 400 | BUG(); |
| 399 | } | 401 | } |
diff --git a/arch/x86/xen/suspend.c b/arch/x86/xen/suspend.c index a9c661108034..1d789d56877c 100644 --- a/arch/x86/xen/suspend.c +++ b/arch/x86/xen/suspend.c | |||
| @@ -26,6 +26,18 @@ void xen_pre_suspend(void) | |||
| 26 | BUG(); | 26 | BUG(); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | void xen_hvm_post_suspend(int suspend_cancelled) | ||
| 30 | { | ||
| 31 | int cpu; | ||
| 32 | xen_hvm_init_shared_info(); | ||
| 33 | xen_callback_vector(); | ||
| 34 | if (xen_feature(XENFEAT_hvm_safe_pvclock)) { | ||
| 35 | for_each_online_cpu(cpu) { | ||
| 36 | xen_setup_runstate_info(cpu); | ||
| 37 | } | ||
| 38 | } | ||
| 39 | } | ||
| 40 | |||
| 29 | void xen_post_suspend(int suspend_cancelled) | 41 | void xen_post_suspend(int suspend_cancelled) |
| 30 | { | 42 | { |
| 31 | xen_build_mfn_list_list(); | 43 | xen_build_mfn_list_list(); |
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b3c6c59ed302..1a5353a753fc 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <asm/xen/hypercall.h> | 20 | #include <asm/xen/hypercall.h> |
| 21 | 21 | ||
| 22 | #include <xen/events.h> | 22 | #include <xen/events.h> |
| 23 | #include <xen/features.h> | ||
| 23 | #include <xen/interface/xen.h> | 24 | #include <xen/interface/xen.h> |
| 24 | #include <xen/interface/vcpu.h> | 25 | #include <xen/interface/vcpu.h> |
| 25 | 26 | ||
| @@ -155,47 +156,8 @@ static void do_stolen_accounting(void) | |||
| 155 | account_idle_ticks(ticks); | 156 | account_idle_ticks(ticks); |
| 156 | } | 157 | } |
| 157 | 158 | ||
| 158 | /* | ||
| 159 | * Xen sched_clock implementation. Returns the number of unstolen | ||
| 160 | * nanoseconds, which is nanoseconds the VCPU spent in RUNNING+BLOCKED | ||
| 161 | * states. | ||
| 162 | */ | ||
| 163 | unsigned long long xen_sched_clock(void) | ||
| 164 | { | ||
| 165 | struct vcpu_runstate_info state; | ||
| 166 | cycle_t now; | ||
| 167 | u64 ret; | ||
| 168 | s64 offset; | ||
| 169 | |||
| 170 | /* | ||
| 171 | * Ideally sched_clock should be called on a per-cpu basis | ||
| 172 | * anyway, so preempt should already be disabled, but that's | ||
| 173 | * not current practice at the moment. | ||
| 174 | */ | ||
| 175 | preempt_disable(); | ||
| 176 | |||
| 177 | now = xen_clocksource_read(); | ||
| 178 | |||
| 179 | get_runstate_snapshot(&state); | ||
| 180 | |||
| 181 | WARN_ON(state.state != RUNSTATE_running); | ||
| 182 | |||
| 183 | offset = now - state.state_entry_time; | ||
| 184 | if (offset < 0) | ||
| 185 | offset = 0; | ||
| 186 | |||
| 187 | ret = state.time[RUNSTATE_blocked] + | ||
| 188 | state.time[RUNSTATE_running] + | ||
| 189 | offset; | ||
| 190 | |||
| 191 | preempt_enable(); | ||
| 192 | |||
| 193 | return ret; | ||
| 194 | } | ||
| 195 | |||
| 196 | |||
| 197 | /* Get the TSC speed from Xen */ | 159 | /* Get the TSC speed from Xen */ |
| 198 | unsigned long xen_tsc_khz(void) | 160 | static unsigned long xen_tsc_khz(void) |
| 199 | { | 161 | { |
| 200 | struct pvclock_vcpu_time_info *info = | 162 | struct pvclock_vcpu_time_info *info = |
| 201 | &HYPERVISOR_shared_info->vcpu_info[0].time; | 163 | &HYPERVISOR_shared_info->vcpu_info[0].time; |
| @@ -230,7 +192,7 @@ static void xen_read_wallclock(struct timespec *ts) | |||
| 230 | put_cpu_var(xen_vcpu); | 192 | put_cpu_var(xen_vcpu); |
| 231 | } | 193 | } |
| 232 | 194 | ||
| 233 | unsigned long xen_get_wallclock(void) | 195 | static unsigned long xen_get_wallclock(void) |
| 234 | { | 196 | { |
| 235 | struct timespec ts; | 197 | struct timespec ts; |
| 236 | 198 | ||
| @@ -238,7 +200,7 @@ unsigned long xen_get_wallclock(void) | |||
| 238 | return ts.tv_sec; | 200 | return ts.tv_sec; |
| 239 | } | 201 | } |
| 240 | 202 | ||
| 241 | int xen_set_wallclock(unsigned long now) | 203 | static int xen_set_wallclock(unsigned long now) |
| 242 | { | 204 | { |
| 243 | /* do nothing for domU */ | 205 | /* do nothing for domU */ |
| 244 | return -1; | 206 | return -1; |
| @@ -473,7 +435,11 @@ void xen_timer_resume(void) | |||
| 473 | } | 435 | } |
| 474 | } | 436 | } |
| 475 | 437 | ||
| 476 | __init void xen_time_init(void) | 438 | static const struct pv_time_ops xen_time_ops __initdata = { |
| 439 | .sched_clock = xen_clocksource_read, | ||
| 440 | }; | ||
| 441 | |||
| 442 | static __init void xen_time_init(void) | ||
| 477 | { | 443 | { |
| 478 | int cpu = smp_processor_id(); | 444 | int cpu = smp_processor_id(); |
| 479 | struct timespec tp; | 445 | struct timespec tp; |
| @@ -497,3 +463,47 @@ __init void xen_time_init(void) | |||
| 497 | xen_setup_timer(cpu); | 463 | xen_setup_timer(cpu); |
| 498 | xen_setup_cpu_clockevents(); | 464 | xen_setup_cpu_clockevents(); |
| 499 | } | 465 | } |
| 466 | |||
| 467 | __init void xen_init_time_ops(void) | ||
| 468 | { | ||
| 469 | pv_time_ops = xen_time_ops; | ||
| 470 | |||
| 471 | x86_init.timers.timer_init = xen_time_init; | ||
| 472 | x86_init.timers.setup_percpu_clockev = x86_init_noop; | ||
| 473 | x86_cpuinit.setup_percpu_clockev = x86_init_noop; | ||
| 474 | |||
| 475 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
| 476 | x86_platform.get_wallclock = xen_get_wallclock; | ||
| 477 | x86_platform.set_wallclock = xen_set_wallclock; | ||
| 478 | } | ||
| 479 | |||
| 480 | #ifdef CONFIG_XEN_PVHVM | ||
| 481 | static void xen_hvm_setup_cpu_clockevents(void) | ||
| 482 | { | ||
| 483 | int cpu = smp_processor_id(); | ||
| 484 | xen_setup_runstate_info(cpu); | ||
| 485 | xen_setup_timer(cpu); | ||
| 486 | xen_setup_cpu_clockevents(); | ||
| 487 | } | ||
| 488 | |||
| 489 | __init void xen_hvm_init_time_ops(void) | ||
| 490 | { | ||
| 491 | /* vector callback is needed otherwise we cannot receive interrupts | ||
| 492 | * on cpu > 0 */ | ||
| 493 | if (!xen_have_vector_callback && num_present_cpus() > 1) | ||
| 494 | return; | ||
| 495 | if (!xen_feature(XENFEAT_hvm_safe_pvclock)) { | ||
| 496 | printk(KERN_INFO "Xen doesn't support pvclock on HVM," | ||
| 497 | "disable pv timer\n"); | ||
| 498 | return; | ||
| 499 | } | ||
| 500 | |||
| 501 | pv_time_ops = xen_time_ops; | ||
| 502 | x86_init.timers.setup_percpu_clockev = xen_time_init; | ||
| 503 | x86_cpuinit.setup_percpu_clockev = xen_hvm_setup_cpu_clockevents; | ||
| 504 | |||
| 505 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
| 506 | x86_platform.get_wallclock = xen_get_wallclock; | ||
| 507 | x86_platform.set_wallclock = xen_set_wallclock; | ||
| 508 | } | ||
| 509 | #endif | ||
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index f9153a300bce..7c8ab86163e9 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h | |||
| @@ -38,6 +38,10 @@ void xen_enable_sysenter(void); | |||
| 38 | void xen_enable_syscall(void); | 38 | void xen_enable_syscall(void); |
| 39 | void xen_vcpu_restore(void); | 39 | void xen_vcpu_restore(void); |
| 40 | 40 | ||
| 41 | void xen_callback_vector(void); | ||
| 42 | void xen_hvm_init_shared_info(void); | ||
| 43 | void __init xen_unplug_emulated_devices(void); | ||
| 44 | |||
| 41 | void __init xen_build_dynamic_phys_to_machine(void); | 45 | void __init xen_build_dynamic_phys_to_machine(void); |
| 42 | 46 | ||
| 43 | void xen_init_irq_ops(void); | 47 | void xen_init_irq_ops(void); |
| @@ -46,11 +50,8 @@ void xen_setup_runstate_info(int cpu); | |||
| 46 | void xen_teardown_timer(int cpu); | 50 | void xen_teardown_timer(int cpu); |
| 47 | cycle_t xen_clocksource_read(void); | 51 | cycle_t xen_clocksource_read(void); |
| 48 | void xen_setup_cpu_clockevents(void); | 52 | void xen_setup_cpu_clockevents(void); |
| 49 | unsigned long xen_tsc_khz(void); | 53 | void __init xen_init_time_ops(void); |
| 50 | void __init xen_time_init(void); | 54 | void __init xen_hvm_init_time_ops(void); |
| 51 | unsigned long xen_get_wallclock(void); | ||
| 52 | int xen_set_wallclock(unsigned long time); | ||
| 53 | unsigned long long xen_sched_clock(void); | ||
| 54 | 55 | ||
| 55 | irqreturn_t xen_debug_interrupt(int irq, void *dev_id); | 56 | irqreturn_t xen_debug_interrupt(int irq, void *dev_id); |
| 56 | 57 | ||
| @@ -101,4 +102,6 @@ void xen_sysret32(void); | |||
| 101 | void xen_sysret64(void); | 102 | void xen_sysret64(void); |
| 102 | void xen_adjust_exception_frame(void); | 103 | void xen_adjust_exception_frame(void); |
| 103 | 104 | ||
| 105 | extern int xen_panic_handler_init(void); | ||
| 106 | |||
| 104 | #endif /* XEN_OPS_H */ | 107 | #endif /* XEN_OPS_H */ |
diff --git a/arch/xtensa/Makefile b/arch/xtensa/Makefile index 4caffac3ca2e..7608559de93a 100644 --- a/arch/xtensa/Makefile +++ b/arch/xtensa/Makefile | |||
| @@ -35,6 +35,8 @@ KBUILD_CFLAGS += -ffreestanding | |||
| 35 | 35 | ||
| 36 | KBUILD_CFLAGS += -pipe -mlongcalls | 36 | KBUILD_CFLAGS += -pipe -mlongcalls |
| 37 | 37 | ||
| 38 | KBUILD_CFLAGS += $(call cc-option,-mforce-no-pic,) | ||
| 39 | |||
| 38 | vardirs := $(patsubst %,arch/xtensa/variants/%/,$(variant-y)) | 40 | vardirs := $(patsubst %,arch/xtensa/variants/%/,$(variant-y)) |
| 39 | plfdirs := $(patsubst %,arch/xtensa/platforms/%/,$(platform-y)) | 41 | plfdirs := $(patsubst %,arch/xtensa/platforms/%/,$(platform-y)) |
| 40 | 42 | ||
diff --git a/arch/xtensa/configs/iss_defconfig b/arch/xtensa/configs/iss_defconfig index f19854035e61..7368164843b9 100644 --- a/arch/xtensa/configs/iss_defconfig +++ b/arch/xtensa/configs/iss_defconfig | |||
| @@ -1,193 +1,214 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.11-rc2 | 3 | # Linux kernel version: 2.6.34-rc6 |
| 4 | # Fri Feb 25 19:21:24 2005 | 4 | # Tue Aug 3 00:10:54 2010 |
| 5 | # | 5 | # |
| 6 | CONFIG_FRAME_POINTER=y | 6 | # CONFIG_FRAME_POINTER is not set |
| 7 | CONFIG_ZONE_DMA=y | ||
| 7 | CONFIG_XTENSA=y | 8 | CONFIG_XTENSA=y |
| 8 | # CONFIG_UID16 is not set | ||
| 9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 10 | CONFIG_HAVE_DEC_LOCK=y | 10 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| 11 | CONFIG_GENERIC_HWEIGHT=y | ||
| 11 | CONFIG_GENERIC_HARDIRQS=y | 12 | CONFIG_GENERIC_HARDIRQS=y |
| 13 | CONFIG_GENERIC_GPIO=y | ||
| 14 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 15 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 16 | CONFIG_NO_IOPORT=y | ||
| 17 | CONFIG_HZ=100 | ||
| 18 | CONFIG_GENERIC_TIME=y | ||
| 19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 20 | CONFIG_CONSTRUCTORS=y | ||
| 12 | 21 | ||
| 13 | # | 22 | # |
| 14 | # Code maturity level options | 23 | # General setup |
| 15 | # | 24 | # |
| 16 | CONFIG_EXPERIMENTAL=y | 25 | CONFIG_EXPERIMENTAL=y |
| 17 | CONFIG_CLEAN_COMPILE=y | ||
| 18 | CONFIG_BROKEN_ON_SMP=y | 26 | CONFIG_BROKEN_ON_SMP=y |
| 19 | 27 | CONFIG_INIT_ENV_ARG_LIMIT=32 | |
| 20 | # | ||
| 21 | # General setup | ||
| 22 | # | ||
| 23 | CONFIG_LOCALVERSION="" | 28 | CONFIG_LOCALVERSION="" |
| 29 | CONFIG_LOCALVERSION_AUTO=y | ||
| 24 | CONFIG_SWAP=y | 30 | CONFIG_SWAP=y |
| 25 | CONFIG_SYSVIPC=y | 31 | CONFIG_SYSVIPC=y |
| 32 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 26 | # CONFIG_POSIX_MQUEUE is not set | 33 | # CONFIG_POSIX_MQUEUE is not set |
| 27 | # CONFIG_BSD_PROCESS_ACCT is not set | 34 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 28 | CONFIG_SYSCTL=y | 35 | # CONFIG_TASKSTATS is not set |
| 29 | # CONFIG_AUDIT is not set | 36 | # CONFIG_AUDIT is not set |
| 30 | CONFIG_LOG_BUF_SHIFT=14 | 37 | |
| 31 | # CONFIG_HOTPLUG is not set | 38 | # |
| 32 | # CONFIG_KOBJECT_UEVENT is not set | 39 | # RCU Subsystem |
| 40 | # | ||
| 41 | CONFIG_TREE_RCU=y | ||
| 42 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 43 | # CONFIG_TINY_RCU is not set | ||
| 44 | # CONFIG_RCU_TRACE is not set | ||
| 45 | CONFIG_RCU_FANOUT=32 | ||
| 46 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 47 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 33 | # CONFIG_IKCONFIG is not set | 48 | # CONFIG_IKCONFIG is not set |
| 49 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 50 | # CONFIG_CGROUPS is not set | ||
| 51 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
| 52 | # CONFIG_RELAY is not set | ||
| 53 | # CONFIG_NAMESPACES is not set | ||
| 54 | # CONFIG_BLK_DEV_INITRD is not set | ||
| 55 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
| 56 | CONFIG_SYSCTL=y | ||
| 57 | CONFIG_ANON_INODES=y | ||
| 34 | CONFIG_EMBEDDED=y | 58 | CONFIG_EMBEDDED=y |
| 59 | CONFIG_SYSCTL_SYSCALL=y | ||
| 35 | CONFIG_KALLSYMS=y | 60 | CONFIG_KALLSYMS=y |
| 36 | # CONFIG_KALLSYMS_ALL is not set | 61 | # CONFIG_KALLSYMS_ALL is not set |
| 37 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| 63 | # CONFIG_HOTPLUG is not set | ||
| 64 | CONFIG_PRINTK=y | ||
| 65 | CONFIG_BUG=y | ||
| 66 | CONFIG_ELF_CORE=y | ||
| 67 | CONFIG_BASE_FULL=y | ||
| 38 | CONFIG_FUTEX=y | 68 | CONFIG_FUTEX=y |
| 39 | CONFIG_EPOLL=y | 69 | CONFIG_EPOLL=y |
| 40 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 70 | CONFIG_SIGNALFD=y |
| 71 | CONFIG_TIMERFD=y | ||
| 72 | CONFIG_EVENTFD=y | ||
| 41 | CONFIG_SHMEM=y | 73 | CONFIG_SHMEM=y |
| 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 74 | CONFIG_AIO=y |
| 43 | CONFIG_CC_ALIGN_LABELS=0 | 75 | |
| 44 | CONFIG_CC_ALIGN_LOOPS=0 | 76 | # |
| 45 | CONFIG_CC_ALIGN_JUMPS=0 | 77 | # Kernel Performance Events And Counters |
| 46 | # CONFIG_TINY_SHMEM is not set | 78 | # |
| 79 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 80 | CONFIG_SLUB_DEBUG=y | ||
| 81 | CONFIG_COMPAT_BRK=y | ||
| 82 | # CONFIG_SLAB is not set | ||
| 83 | CONFIG_SLUB=y | ||
| 84 | # CONFIG_SLOB is not set | ||
| 85 | # CONFIG_PROFILING is not set | ||
| 47 | 86 | ||
| 48 | # | 87 | # |
| 49 | # Loadable module support | 88 | # GCOV-based kernel profiling |
| 50 | # | 89 | # |
| 90 | # CONFIG_SLOW_WORK is not set | ||
| 91 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
| 92 | CONFIG_SLABINFO=y | ||
| 93 | CONFIG_RT_MUTEXES=y | ||
| 94 | CONFIG_BASE_SMALL=0 | ||
| 51 | # CONFIG_MODULES is not set | 95 | # CONFIG_MODULES is not set |
| 96 | CONFIG_BLOCK=y | ||
| 97 | CONFIG_LBDAF=y | ||
| 98 | CONFIG_BLK_DEV_BSG=y | ||
| 99 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 100 | |||
| 101 | # | ||
| 102 | # IO Schedulers | ||
| 103 | # | ||
| 104 | CONFIG_IOSCHED_NOOP=y | ||
| 105 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 106 | # CONFIG_IOSCHED_CFQ is not set | ||
| 107 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 108 | # CONFIG_DEFAULT_CFQ is not set | ||
| 109 | CONFIG_DEFAULT_NOOP=y | ||
| 110 | CONFIG_DEFAULT_IOSCHED="noop" | ||
| 111 | # CONFIG_INLINE_SPIN_TRYLOCK is not set | ||
| 112 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set | ||
| 113 | # CONFIG_INLINE_SPIN_LOCK is not set | ||
| 114 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | ||
| 115 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | ||
| 116 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | ||
| 117 | CONFIG_INLINE_SPIN_UNLOCK=y | ||
| 118 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | ||
| 119 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y | ||
| 120 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | ||
| 121 | # CONFIG_INLINE_READ_TRYLOCK is not set | ||
| 122 | # CONFIG_INLINE_READ_LOCK is not set | ||
| 123 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
| 124 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
| 125 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
| 126 | CONFIG_INLINE_READ_UNLOCK=y | ||
| 127 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
| 128 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
| 129 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
| 130 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
| 131 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
| 132 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
| 133 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
| 134 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
| 135 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
| 136 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
| 137 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
| 138 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
| 139 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
| 140 | # CONFIG_FREEZER is not set | ||
| 141 | CONFIG_MMU=y | ||
| 142 | # CONFIG_VARIANT_IRQ_SWITCH is not set | ||
| 52 | 143 | ||
| 53 | # | 144 | # |
| 54 | # Processor type and features | 145 | # Processor type and features |
| 55 | # | 146 | # |
| 56 | CONFIG_XTENSA_VARIANT_FSF=y | 147 | CONFIG_XTENSA_VARIANT_FSF=y |
| 57 | CONFIG_MMU=y | 148 | # CONFIG_XTENSA_VARIANT_DC232B is not set |
| 149 | # CONFIG_XTENSA_VARIANT_S6000 is not set | ||
| 58 | # CONFIG_XTENSA_UNALIGNED_USER is not set | 150 | # CONFIG_XTENSA_UNALIGNED_USER is not set |
| 59 | # CONFIG_PREEMPT is not set | 151 | # CONFIG_PREEMPT is not set |
| 60 | # CONFIG_MATH_EMULATION is not set | 152 | # CONFIG_MATH_EMULATION is not set |
| 61 | # CONFIG_HIGHMEM is not set | 153 | CONFIG_XTENSA_CALIBRATE_CCOUNT=y |
| 62 | |||
| 63 | # | ||
| 64 | # Platform options | ||
| 65 | # | ||
| 66 | CONFIG_XTENSA_PLATFORM_ISS=y | ||
| 67 | # CONFIG_XTENSA_PLATFORM_XT2000 is not set | ||
| 68 | # CONFIG_XTENSA_PLATFORM_ARUBA is not set | ||
| 69 | # CONFIG_XTENSA_CALIBRATE_CCOUNT is not set | ||
| 70 | CONFIG_XTENSA_CPU_CLOCK=10 | ||
| 71 | # CONFIG_GENERIC_CALIBRATE_DELAY is not set | ||
| 72 | CONFIG_CMDLINE_BOOL=y | ||
| 73 | CONFIG_CMDLINE="console=ttyS0,38400 eth0=tuntap,,tap0 ip=192.168.168.5:192.168.168.1 root=nfs nfsroot=192.168.168.1:/opt/montavista/pro/devkit/xtensa/linux_be/target" | ||
| 74 | CONFIG_SERIAL_CONSOLE=y | 154 | CONFIG_SERIAL_CONSOLE=y |
| 75 | CONFIG_XTENSA_ISS_NETWORK=y | 155 | CONFIG_XTENSA_ISS_NETWORK=y |
| 76 | 156 | ||
| 77 | # | 157 | # |
| 78 | # Bus options | 158 | # Bus options |
| 79 | # | 159 | # |
| 160 | # CONFIG_PCI is not set | ||
| 161 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 80 | 162 | ||
| 81 | # | 163 | # |
| 82 | # PCCARD (PCMCIA/CardBus) support | 164 | # Platform options |
| 83 | # | ||
| 84 | # CONFIG_PCCARD is not set | ||
| 85 | |||
| 86 | # | ||
| 87 | # PC-card bridges | ||
| 88 | # | ||
| 89 | |||
| 90 | # | ||
| 91 | # PCI Hotplug Support | ||
| 92 | # | ||
| 93 | |||
| 94 | # | 165 | # |
| 95 | # Exectuable file formats | 166 | CONFIG_XTENSA_PLATFORM_ISS=y |
| 167 | # CONFIG_XTENSA_PLATFORM_XT2000 is not set | ||
| 168 | # CONFIG_XTENSA_PLATFORM_S6105 is not set | ||
| 169 | # CONFIG_GENERIC_CALIBRATE_DELAY is not set | ||
| 170 | CONFIG_CMDLINE_BOOL=y | ||
| 171 | CONFIG_CMDLINE="console=ttyS0,38400 eth0=tuntap,,tap0 ip=192.168.168.5:192.168.168.1 root=nfs nfsroot=192.168.168.1:/opt/montavista/pro/devkit/xtensa/linux_be/target" | ||
| 172 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 173 | CONFIG_FLATMEM_MANUAL=y | ||
| 174 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 175 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 176 | CONFIG_FLATMEM=y | ||
| 177 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 178 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 179 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 180 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
| 181 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 182 | CONFIG_BOUNCE=y | ||
| 183 | CONFIG_VIRT_TO_BUS=y | ||
| 184 | # CONFIG_KSM is not set | ||
| 185 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 186 | |||
| 187 | # | ||
| 188 | # Executable file formats | ||
| 96 | # | 189 | # |
| 97 | CONFIG_KCORE_ELF=y | 190 | CONFIG_KCORE_ELF=y |
| 98 | CONFIG_BINFMT_ELF=y | 191 | CONFIG_BINFMT_ELF=y |
| 192 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 193 | # CONFIG_HAVE_AOUT is not set | ||
| 99 | # CONFIG_BINFMT_MISC is not set | 194 | # CONFIG_BINFMT_MISC is not set |
| 100 | |||
| 101 | # | ||
| 102 | # Device Drivers | ||
| 103 | # | ||
| 104 | |||
| 105 | # | ||
| 106 | # Generic Driver Options | ||
| 107 | # | ||
| 108 | # CONFIG_STANDALONE is not set | ||
| 109 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 110 | # CONFIG_FW_LOADER is not set | ||
| 111 | # CONFIG_DEBUG_DRIVER is not set | ||
| 112 | |||
| 113 | # | ||
| 114 | # Memory Technology Devices (MTD) | ||
| 115 | # | ||
| 116 | # CONFIG_MTD is not set | ||
| 117 | |||
| 118 | # | ||
| 119 | # Parallel port support | ||
| 120 | # | ||
| 121 | # CONFIG_PARPORT is not set | ||
| 122 | |||
| 123 | # | ||
| 124 | # Plug and Play support | ||
| 125 | # | ||
| 126 | |||
| 127 | # | ||
| 128 | # Block devices | ||
| 129 | # | ||
| 130 | # CONFIG_BLK_DEV_FD is not set | ||
| 131 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 132 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 133 | # CONFIG_BLK_DEV_NBD is not set | ||
| 134 | # CONFIG_BLK_DEV_RAM is not set | ||
| 135 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 136 | CONFIG_INITRAMFS_SOURCE="" | ||
| 137 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 138 | |||
| 139 | # | ||
| 140 | # IO Schedulers | ||
| 141 | # | ||
| 142 | CONFIG_IOSCHED_NOOP=y | ||
| 143 | # CONFIG_IOSCHED_AS is not set | ||
| 144 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 145 | # CONFIG_IOSCHED_CFQ is not set | ||
| 146 | # CONFIG_ATA_OVER_ETH is not set | ||
| 147 | |||
| 148 | # | ||
| 149 | # ATA/ATAPI/MFM/RLL support | ||
| 150 | # | ||
| 151 | # CONFIG_IDE is not set | ||
| 152 | |||
| 153 | # | ||
| 154 | # SCSI device support | ||
| 155 | # | ||
| 156 | # CONFIG_SCSI is not set | ||
| 157 | |||
| 158 | # | ||
| 159 | # Multi-device support (RAID and LVM) | ||
| 160 | # | ||
| 161 | # CONFIG_MD is not set | ||
| 162 | |||
| 163 | # | ||
| 164 | # Fusion MPT device support | ||
| 165 | # | ||
| 166 | |||
| 167 | # | ||
| 168 | # IEEE 1394 (FireWire) support | ||
| 169 | # | ||
| 170 | |||
| 171 | # | ||
| 172 | # I2O device support | ||
| 173 | # | ||
| 174 | |||
| 175 | # | ||
| 176 | # Networking support | ||
| 177 | # | ||
| 178 | CONFIG_NET=y | 195 | CONFIG_NET=y |
| 179 | 196 | ||
| 180 | # | 197 | # |
| 181 | # Networking options | 198 | # Networking options |
| 182 | # | 199 | # |
| 183 | CONFIG_PACKET=y | 200 | CONFIG_PACKET=y |
| 184 | # CONFIG_PACKET_MMAP is not set | ||
| 185 | # CONFIG_NETLINK_DEV is not set | ||
| 186 | CONFIG_UNIX=y | 201 | CONFIG_UNIX=y |
| 202 | CONFIG_XFRM=y | ||
| 203 | # CONFIG_XFRM_USER is not set | ||
| 204 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 205 | # CONFIG_XFRM_MIGRATE is not set | ||
| 206 | # CONFIG_XFRM_STATISTICS is not set | ||
| 187 | # CONFIG_NET_KEY is not set | 207 | # CONFIG_NET_KEY is not set |
| 188 | CONFIG_INET=y | 208 | CONFIG_INET=y |
| 189 | # CONFIG_IP_MULTICAST is not set | 209 | # CONFIG_IP_MULTICAST is not set |
| 190 | # CONFIG_IP_ADVANCED_ROUTER is not set | 210 | # CONFIG_IP_ADVANCED_ROUTER is not set |
| 211 | CONFIG_IP_FIB_HASH=y | ||
| 191 | CONFIG_IP_PNP=y | 212 | CONFIG_IP_PNP=y |
| 192 | CONFIG_IP_PNP_DHCP=y | 213 | CONFIG_IP_PNP_DHCP=y |
| 193 | CONFIG_IP_PNP_BOOTP=y | 214 | CONFIG_IP_PNP_BOOTP=y |
| @@ -199,21 +220,28 @@ CONFIG_IP_PNP_RARP=y | |||
| 199 | # CONFIG_INET_AH is not set | 220 | # CONFIG_INET_AH is not set |
| 200 | # CONFIG_INET_ESP is not set | 221 | # CONFIG_INET_ESP is not set |
| 201 | # CONFIG_INET_IPCOMP is not set | 222 | # CONFIG_INET_IPCOMP is not set |
| 223 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 202 | # CONFIG_INET_TUNNEL is not set | 224 | # CONFIG_INET_TUNNEL is not set |
| 203 | # CONFIG_IP_TCPDIAG is not set | 225 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 204 | # CONFIG_IP_TCPDIAG_IPV6 is not set | 226 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 227 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 228 | CONFIG_INET_LRO=y | ||
| 229 | CONFIG_INET_DIAG=y | ||
| 230 | CONFIG_INET_TCP_DIAG=y | ||
| 231 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 232 | CONFIG_TCP_CONG_CUBIC=y | ||
| 233 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 234 | # CONFIG_TCP_MD5SIG is not set | ||
| 205 | # CONFIG_IPV6 is not set | 235 | # CONFIG_IPV6 is not set |
| 236 | # CONFIG_NETWORK_SECMARK is not set | ||
| 206 | # CONFIG_NETFILTER is not set | 237 | # CONFIG_NETFILTER is not set |
| 207 | 238 | # CONFIG_IP_DCCP is not set | |
| 208 | # | ||
| 209 | # SCTP Configuration (EXPERIMENTAL) | ||
| 210 | # | ||
| 211 | # CONFIG_IP_SCTP is not set | 239 | # CONFIG_IP_SCTP is not set |
| 212 | # CONFIG_SCTP_HMAC_NONE is not set | 240 | # CONFIG_RDS is not set |
| 213 | # CONFIG_SCTP_HMAC_SHA1 is not set | 241 | # CONFIG_TIPC is not set |
| 214 | # CONFIG_SCTP_HMAC_MD5 is not set | ||
| 215 | # CONFIG_ATM is not set | 242 | # CONFIG_ATM is not set |
| 216 | # CONFIG_BRIDGE is not set | 243 | # CONFIG_BRIDGE is not set |
| 244 | # CONFIG_NET_DSA is not set | ||
| 217 | # CONFIG_VLAN_8021Q is not set | 245 | # CONFIG_VLAN_8021Q is not set |
| 218 | # CONFIG_DECNET is not set | 246 | # CONFIG_DECNET is not set |
| 219 | # CONFIG_LLC2 is not set | 247 | # CONFIG_LLC2 is not set |
| @@ -221,77 +249,126 @@ CONFIG_IP_PNP_RARP=y | |||
| 221 | # CONFIG_ATALK is not set | 249 | # CONFIG_ATALK is not set |
| 222 | # CONFIG_X25 is not set | 250 | # CONFIG_X25 is not set |
| 223 | # CONFIG_LAPB is not set | 251 | # CONFIG_LAPB is not set |
| 224 | # CONFIG_NET_DIVERT is not set | ||
| 225 | # CONFIG_ECONET is not set | 252 | # CONFIG_ECONET is not set |
| 226 | # CONFIG_WAN_ROUTER is not set | 253 | # CONFIG_WAN_ROUTER is not set |
| 227 | 254 | # CONFIG_PHONET is not set | |
| 228 | # | 255 | # CONFIG_IEEE802154 is not set |
| 229 | # QoS and/or fair queueing | ||
| 230 | # | ||
| 231 | # CONFIG_NET_SCHED is not set | 256 | # CONFIG_NET_SCHED is not set |
| 232 | # CONFIG_NET_SCH_CLK_JIFFIES is not set | 257 | # CONFIG_DCB is not set |
| 233 | # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set | ||
| 234 | # CONFIG_NET_SCH_CLK_CPU is not set | ||
| 235 | # CONFIG_NET_CLS_ROUTE is not set | ||
| 236 | 258 | ||
| 237 | # | 259 | # |
| 238 | # Network testing | 260 | # Network testing |
| 239 | # | 261 | # |
| 240 | # CONFIG_NET_PKTGEN is not set | 262 | # CONFIG_NET_PKTGEN is not set |
| 241 | # CONFIG_NETPOLL is not set | ||
| 242 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 243 | # CONFIG_HAMRADIO is not set | 263 | # CONFIG_HAMRADIO is not set |
| 264 | # CONFIG_CAN is not set | ||
| 244 | # CONFIG_IRDA is not set | 265 | # CONFIG_IRDA is not set |
| 245 | # CONFIG_BT is not set | 266 | # CONFIG_BT is not set |
| 246 | # CONFIG_NETDEVICES is not set | 267 | # CONFIG_AF_RXRPC is not set |
| 268 | CONFIG_WIRELESS=y | ||
| 269 | # CONFIG_CFG80211 is not set | ||
| 270 | # CONFIG_LIB80211 is not set | ||
| 247 | 271 | ||
| 248 | # | 272 | # |
| 249 | # ISDN subsystem | 273 | # CFG80211 needs to be enabled for MAC80211 |
| 250 | # | 274 | # |
| 251 | # CONFIG_ISDN is not set | 275 | # CONFIG_WIMAX is not set |
| 276 | # CONFIG_RFKILL is not set | ||
| 277 | # CONFIG_NET_9P is not set | ||
| 278 | |||
| 279 | # | ||
| 280 | # Device Drivers | ||
| 281 | # | ||
| 282 | |||
| 283 | # | ||
| 284 | # Generic Driver Options | ||
| 285 | # | ||
| 286 | # CONFIG_STANDALONE is not set | ||
| 287 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 288 | # CONFIG_DEBUG_DRIVER is not set | ||
| 289 | # CONFIG_DEBUG_DEVRES is not set | ||
| 290 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 291 | # CONFIG_CONNECTOR is not set | ||
| 292 | # CONFIG_MTD is not set | ||
| 293 | # CONFIG_PARPORT is not set | ||
| 294 | CONFIG_BLK_DEV=y | ||
| 295 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 296 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 252 | 297 | ||
| 253 | # | 298 | # |
| 254 | # Telephony Support | 299 | # DRBD disabled because PROC_FS, INET or CONNECTOR not selected |
| 300 | # | ||
| 301 | # CONFIG_BLK_DEV_NBD is not set | ||
| 302 | # CONFIG_BLK_DEV_RAM is not set | ||
| 303 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 304 | # CONFIG_ATA_OVER_ETH is not set | ||
| 305 | # CONFIG_BLK_DEV_HD is not set | ||
| 306 | CONFIG_MISC_DEVICES=y | ||
| 307 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 308 | # CONFIG_C2PORT is not set | ||
| 309 | |||
| 310 | # | ||
| 311 | # EEPROM support | ||
| 312 | # | ||
| 313 | # CONFIG_EEPROM_93CX6 is not set | ||
| 314 | CONFIG_HAVE_IDE=y | ||
| 315 | # CONFIG_IDE is not set | ||
| 316 | |||
| 255 | # | 317 | # |
| 318 | # SCSI device support | ||
| 319 | # | ||
| 320 | CONFIG_SCSI_MOD=y | ||
| 321 | # CONFIG_RAID_ATTRS is not set | ||
| 322 | # CONFIG_SCSI is not set | ||
| 323 | # CONFIG_SCSI_DMA is not set | ||
| 324 | # CONFIG_SCSI_NETLINK is not set | ||
| 325 | # CONFIG_ATA is not set | ||
| 326 | # CONFIG_MD is not set | ||
| 327 | # CONFIG_NETDEVICES is not set | ||
| 328 | # CONFIG_ISDN is not set | ||
| 256 | # CONFIG_PHONE is not set | 329 | # CONFIG_PHONE is not set |
| 257 | 330 | ||
| 258 | # | 331 | # |
| 259 | # Input device support | 332 | # Input device support |
| 260 | # | 333 | # |
| 261 | CONFIG_INPUT=y | 334 | CONFIG_INPUT=y |
| 335 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 336 | # CONFIG_INPUT_POLLDEV is not set | ||
| 337 | # CONFIG_INPUT_SPARSEKMAP is not set | ||
| 262 | 338 | ||
| 263 | # | 339 | # |
| 264 | # Userland interfaces | 340 | # Userland interfaces |
| 265 | # | 341 | # |
| 266 | # CONFIG_INPUT_MOUSEDEV is not set | 342 | # CONFIG_INPUT_MOUSEDEV is not set |
| 267 | # CONFIG_INPUT_JOYDEV is not set | 343 | # CONFIG_INPUT_JOYDEV is not set |
| 268 | # CONFIG_INPUT_TSDEV is not set | ||
| 269 | # CONFIG_INPUT_EVDEV is not set | 344 | # CONFIG_INPUT_EVDEV is not set |
| 270 | # CONFIG_INPUT_EVBUG is not set | 345 | # CONFIG_INPUT_EVBUG is not set |
| 271 | 346 | ||
| 272 | # | 347 | # |
| 273 | # Input I/O drivers | ||
| 274 | # | ||
| 275 | # CONFIG_GAMEPORT is not set | ||
| 276 | CONFIG_SOUND_GAMEPORT=y | ||
| 277 | # CONFIG_SERIO is not set | ||
| 278 | # CONFIG_SERIO_I8042 is not set | ||
| 279 | |||
| 280 | # | ||
| 281 | # Input Device Drivers | 348 | # Input Device Drivers |
| 282 | # | 349 | # |
| 283 | # CONFIG_INPUT_KEYBOARD is not set | 350 | # CONFIG_INPUT_KEYBOARD is not set |
| 284 | # CONFIG_INPUT_MOUSE is not set | 351 | # CONFIG_INPUT_MOUSE is not set |
| 285 | # CONFIG_INPUT_JOYSTICK is not set | 352 | # CONFIG_INPUT_JOYSTICK is not set |
| 353 | # CONFIG_INPUT_TABLET is not set | ||
| 286 | # CONFIG_INPUT_TOUCHSCREEN is not set | 354 | # CONFIG_INPUT_TOUCHSCREEN is not set |
| 287 | # CONFIG_INPUT_MISC is not set | 355 | # CONFIG_INPUT_MISC is not set |
| 288 | 356 | ||
| 289 | # | 357 | # |
| 358 | # Hardware I/O ports | ||
| 359 | # | ||
| 360 | # CONFIG_SERIO is not set | ||
| 361 | # CONFIG_GAMEPORT is not set | ||
| 362 | |||
| 363 | # | ||
| 290 | # Character devices | 364 | # Character devices |
| 291 | # | 365 | # |
| 292 | CONFIG_VT=y | 366 | CONFIG_VT=y |
| 367 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 293 | CONFIG_VT_CONSOLE=y | 368 | CONFIG_VT_CONSOLE=y |
| 294 | CONFIG_HW_CONSOLE=y | 369 | CONFIG_HW_CONSOLE=y |
| 370 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 371 | CONFIG_DEVKMEM=y | ||
| 295 | # CONFIG_SERIAL_NONSTANDARD is not set | 372 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 296 | 373 | ||
| 297 | # | 374 | # |
| @@ -302,117 +379,159 @@ CONFIG_HW_CONSOLE=y | |||
| 302 | # | 379 | # |
| 303 | # Non-8250 serial port support | 380 | # Non-8250 serial port support |
| 304 | # | 381 | # |
| 382 | # CONFIG_SERIAL_TIMBERDALE is not set | ||
| 305 | CONFIG_UNIX98_PTYS=y | 383 | CONFIG_UNIX98_PTYS=y |
| 384 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 306 | CONFIG_LEGACY_PTYS=y | 385 | CONFIG_LEGACY_PTYS=y |
| 307 | CONFIG_LEGACY_PTY_COUNT=256 | 386 | CONFIG_LEGACY_PTY_COUNT=256 |
| 308 | |||
| 309 | # | ||
| 310 | # IPMI | ||
| 311 | # | ||
| 312 | # CONFIG_IPMI_HANDLER is not set | 387 | # CONFIG_IPMI_HANDLER is not set |
| 313 | 388 | CONFIG_HW_RANDOM=y | |
| 314 | # | 389 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set |
| 315 | # Watchdog Cards | ||
| 316 | # | ||
| 317 | CONFIG_WATCHDOG=y | ||
| 318 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 319 | |||
| 320 | # | ||
| 321 | # Watchdog Device Drivers | ||
| 322 | # | ||
| 323 | CONFIG_SOFT_WATCHDOG=y | ||
| 324 | # CONFIG_RTC is not set | 390 | # CONFIG_RTC is not set |
| 325 | # CONFIG_GEN_RTC is not set | 391 | # CONFIG_GEN_RTC is not set |
| 326 | # CONFIG_DTLK is not set | ||
| 327 | # CONFIG_R3964 is not set | 392 | # CONFIG_R3964 is not set |
| 328 | |||
| 329 | # | ||
| 330 | # Ftape, the floppy tape device driver | ||
| 331 | # | ||
| 332 | # CONFIG_DRM is not set | ||
| 333 | # CONFIG_RAW_DRIVER is not set | 393 | # CONFIG_RAW_DRIVER is not set |
| 334 | 394 | # CONFIG_TCG_TPM is not set | |
| 335 | # | ||
| 336 | # I2C support | ||
| 337 | # | ||
| 338 | # CONFIG_I2C is not set | 395 | # CONFIG_I2C is not set |
| 396 | # CONFIG_SPI is not set | ||
| 339 | 397 | ||
| 340 | # | 398 | # |
| 341 | # Dallas's 1-wire bus | 399 | # PPS support |
| 342 | # | 400 | # |
| 401 | # CONFIG_PPS is not set | ||
| 343 | # CONFIG_W1 is not set | 402 | # CONFIG_W1 is not set |
| 403 | # CONFIG_POWER_SUPPLY is not set | ||
| 404 | CONFIG_HWMON=y | ||
| 405 | # CONFIG_HWMON_VID is not set | ||
| 406 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 407 | |||
| 408 | # | ||
| 409 | # Native drivers | ||
| 410 | # | ||
| 411 | # CONFIG_SENSORS_F71805F is not set | ||
| 412 | # CONFIG_SENSORS_F71882FG is not set | ||
| 413 | # CONFIG_SENSORS_IT87 is not set | ||
| 414 | # CONFIG_SENSORS_PC87360 is not set | ||
| 415 | # CONFIG_SENSORS_PC87427 is not set | ||
| 416 | # CONFIG_SENSORS_SHT15 is not set | ||
| 417 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 418 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 419 | # CONFIG_SENSORS_VT1211 is not set | ||
| 420 | # CONFIG_SENSORS_W83627HF is not set | ||
| 421 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 422 | # CONFIG_THERMAL is not set | ||
| 423 | CONFIG_WATCHDOG=y | ||
| 424 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 344 | 425 | ||
| 345 | # | 426 | # |
| 346 | # Misc devices | 427 | # Watchdog Device Drivers |
| 347 | # | 428 | # |
| 429 | CONFIG_SOFT_WATCHDOG=y | ||
| 430 | CONFIG_SSB_POSSIBLE=y | ||
| 348 | 431 | ||
| 349 | # | 432 | # |
| 350 | # Multimedia devices | 433 | # Sonics Silicon Backplane |
| 351 | # | 434 | # |
| 352 | # CONFIG_VIDEO_DEV is not set | 435 | # CONFIG_SSB is not set |
| 353 | 436 | ||
| 354 | # | 437 | # |
| 355 | # Digital Video Broadcasting Devices | 438 | # Multifunction device drivers |
| 356 | # | 439 | # |
| 357 | # CONFIG_DVB is not set | 440 | # CONFIG_MFD_CORE is not set |
| 441 | # CONFIG_MFD_SM501 is not set | ||
| 442 | # CONFIG_HTC_PASIC3 is not set | ||
| 443 | # CONFIG_MFD_TMIO is not set | ||
| 444 | # CONFIG_REGULATOR is not set | ||
| 445 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 358 | 446 | ||
| 359 | # | 447 | # |
| 360 | # Graphics support | 448 | # Graphics support |
| 361 | # | 449 | # |
| 450 | # CONFIG_VGASTATE is not set | ||
| 451 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 362 | # CONFIG_FB is not set | 452 | # CONFIG_FB is not set |
| 453 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 363 | 454 | ||
| 364 | # | 455 | # |
| 365 | # Console display driver support | 456 | # Display device support |
| 366 | # | 457 | # |
| 367 | # CONFIG_VGA_CONSOLE is not set | 458 | # CONFIG_DISPLAY_SUPPORT is not set |
| 368 | CONFIG_DUMMY_CONSOLE=y | ||
| 369 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 370 | 459 | ||
| 371 | # | 460 | # |
| 372 | # Sound | 461 | # Console display driver support |
| 373 | # | 462 | # |
| 463 | # CONFIG_VGA_CONSOLE is not set | ||
| 464 | CONFIG_DUMMY_CONSOLE=y | ||
| 374 | # CONFIG_SOUND is not set | 465 | # CONFIG_SOUND is not set |
| 466 | CONFIG_HID_SUPPORT=y | ||
| 467 | CONFIG_HID=y | ||
| 468 | # CONFIG_HIDRAW is not set | ||
| 469 | # CONFIG_HID_PID is not set | ||
| 375 | 470 | ||
| 376 | # | 471 | # |
| 377 | # USB support | 472 | # Special HID drivers |
| 378 | # | 473 | # |
| 474 | CONFIG_USB_SUPPORT=y | ||
| 379 | # CONFIG_USB_ARCH_HAS_HCD is not set | 475 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 380 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 476 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 477 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
| 478 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 479 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 381 | 480 | ||
| 382 | # | 481 | # |
| 383 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 482 | # Enable Host or Gadget support to see Inventra options |
| 384 | # | 483 | # |
| 385 | 484 | ||
| 386 | # | 485 | # |
| 387 | # USB Gadget Support | 486 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may |
| 388 | # | 487 | # |
| 389 | # CONFIG_USB_GADGET is not set | 488 | # CONFIG_USB_GADGET is not set |
| 390 | 489 | ||
| 391 | # | 490 | # |
| 392 | # MMC/SD Card support | 491 | # OTG and related infrastructure |
| 393 | # | 492 | # |
| 394 | # CONFIG_MMC is not set | 493 | # CONFIG_MMC is not set |
| 494 | # CONFIG_MEMSTICK is not set | ||
| 495 | # CONFIG_NEW_LEDS is not set | ||
| 496 | # CONFIG_ACCESSIBILITY is not set | ||
| 497 | # CONFIG_RTC_CLASS is not set | ||
| 498 | # CONFIG_DMADEVICES is not set | ||
| 499 | # CONFIG_AUXDISPLAY is not set | ||
| 500 | # CONFIG_UIO is not set | ||
| 395 | 501 | ||
| 396 | # | 502 | # |
| 397 | # InfiniBand support | 503 | # TI VLYNQ |
| 398 | # | 504 | # |
| 399 | # CONFIG_INFINIBAND is not set | 505 | # CONFIG_STAGING is not set |
| 400 | 506 | ||
| 401 | # | 507 | # |
| 402 | # File systems | 508 | # File systems |
| 403 | # | 509 | # |
| 404 | # CONFIG_EXT2_FS is not set | 510 | # CONFIG_EXT2_FS is not set |
| 405 | # CONFIG_EXT3_FS is not set | 511 | # CONFIG_EXT3_FS is not set |
| 406 | # CONFIG_JBD is not set | 512 | # CONFIG_EXT4_FS is not set |
| 407 | # CONFIG_REISERFS_FS is not set | 513 | # CONFIG_REISERFS_FS is not set |
| 408 | # CONFIG_JFS_FS is not set | 514 | # CONFIG_JFS_FS is not set |
| 515 | # CONFIG_FS_POSIX_ACL is not set | ||
| 409 | # CONFIG_XFS_FS is not set | 516 | # CONFIG_XFS_FS is not set |
| 410 | # CONFIG_MINIX_FS is not set | 517 | # CONFIG_GFS2_FS is not set |
| 411 | # CONFIG_ROMFS_FS is not set | 518 | # CONFIG_OCFS2_FS is not set |
| 412 | # CONFIG_QUOTA is not set | 519 | # CONFIG_BTRFS_FS is not set |
| 520 | # CONFIG_NILFS2_FS is not set | ||
| 521 | CONFIG_FILE_LOCKING=y | ||
| 522 | CONFIG_FSNOTIFY=y | ||
| 413 | # CONFIG_DNOTIFY is not set | 523 | # CONFIG_DNOTIFY is not set |
| 524 | # CONFIG_INOTIFY is not set | ||
| 525 | CONFIG_INOTIFY_USER=y | ||
| 526 | # CONFIG_QUOTA is not set | ||
| 414 | # CONFIG_AUTOFS_FS is not set | 527 | # CONFIG_AUTOFS_FS is not set |
| 415 | # CONFIG_AUTOFS4_FS is not set | 528 | # CONFIG_AUTOFS4_FS is not set |
| 529 | # CONFIG_FUSE_FS is not set | ||
| 530 | |||
| 531 | # | ||
| 532 | # Caches | ||
| 533 | # | ||
| 534 | # CONFIG_FSCACHE is not set | ||
| 416 | 535 | ||
| 417 | # | 536 | # |
| 418 | # CD-ROM/DVD Filesystems | 537 | # CD-ROM/DVD Filesystems |
| @@ -432,19 +551,14 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 432 | # | 551 | # |
| 433 | CONFIG_PROC_FS=y | 552 | CONFIG_PROC_FS=y |
| 434 | CONFIG_PROC_KCORE=y | 553 | CONFIG_PROC_KCORE=y |
| 554 | CONFIG_PROC_SYSCTL=y | ||
| 555 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 435 | CONFIG_SYSFS=y | 556 | CONFIG_SYSFS=y |
| 436 | CONFIG_DEVFS_FS=y | ||
| 437 | CONFIG_DEVFS_MOUNT=y | ||
| 438 | # CONFIG_DEVFS_DEBUG is not set | ||
| 439 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
| 440 | CONFIG_TMPFS=y | 557 | CONFIG_TMPFS=y |
| 441 | # CONFIG_TMPFS_XATTR is not set | 558 | # CONFIG_TMPFS_POSIX_ACL is not set |
| 442 | # CONFIG_HUGETLB_PAGE is not set | 559 | # CONFIG_HUGETLB_PAGE is not set |
| 443 | CONFIG_RAMFS=y | 560 | # CONFIG_CONFIGFS_FS is not set |
| 444 | 561 | CONFIG_MISC_FILESYSTEMS=y | |
| 445 | # | ||
| 446 | # Miscellaneous filesystems | ||
| 447 | # | ||
| 448 | # CONFIG_ADFS_FS is not set | 562 | # CONFIG_ADFS_FS is not set |
| 449 | # CONFIG_AFFS_FS is not set | 563 | # CONFIG_AFFS_FS is not set |
| 450 | # CONFIG_HFS_FS is not set | 564 | # CONFIG_HFS_FS is not set |
| @@ -452,29 +566,22 @@ CONFIG_RAMFS=y | |||
| 452 | # CONFIG_BEFS_FS is not set | 566 | # CONFIG_BEFS_FS is not set |
| 453 | # CONFIG_BFS_FS is not set | 567 | # CONFIG_BFS_FS is not set |
| 454 | # CONFIG_EFS_FS is not set | 568 | # CONFIG_EFS_FS is not set |
| 569 | # CONFIG_LOGFS is not set | ||
| 455 | # CONFIG_CRAMFS is not set | 570 | # CONFIG_CRAMFS is not set |
| 571 | # CONFIG_SQUASHFS is not set | ||
| 456 | # CONFIG_VXFS_FS is not set | 572 | # CONFIG_VXFS_FS is not set |
| 573 | # CONFIG_MINIX_FS is not set | ||
| 574 | # CONFIG_OMFS_FS is not set | ||
| 457 | # CONFIG_HPFS_FS is not set | 575 | # CONFIG_HPFS_FS is not set |
| 458 | # CONFIG_QNX4FS_FS is not set | 576 | # CONFIG_QNX4FS_FS is not set |
| 577 | # CONFIG_ROMFS_FS is not set | ||
| 459 | # CONFIG_SYSV_FS is not set | 578 | # CONFIG_SYSV_FS is not set |
| 460 | # CONFIG_UFS_FS is not set | 579 | # CONFIG_UFS_FS is not set |
| 461 | 580 | CONFIG_NETWORK_FILESYSTEMS=y | |
| 462 | # | 581 | # CONFIG_NFS_FS is not set |
| 463 | # Network File Systems | ||
| 464 | # | ||
| 465 | CONFIG_NFS_FS=y | ||
| 466 | CONFIG_NFS_V3=y | ||
| 467 | # CONFIG_NFS_V4 is not set | ||
| 468 | CONFIG_NFS_DIRECTIO=y | ||
| 469 | # CONFIG_NFSD is not set | 582 | # CONFIG_NFSD is not set |
| 470 | CONFIG_ROOT_NFS=y | ||
| 471 | CONFIG_LOCKD=y | ||
| 472 | CONFIG_LOCKD_V4=y | ||
| 473 | # CONFIG_EXPORTFS is not set | ||
| 474 | CONFIG_SUNRPC=y | ||
| 475 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 476 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 477 | # CONFIG_SMB_FS is not set | 583 | # CONFIG_SMB_FS is not set |
| 584 | # CONFIG_CEPH_FS is not set | ||
| 478 | # CONFIG_CIFS is not set | 585 | # CONFIG_CIFS is not set |
| 479 | # CONFIG_NCP_FS is not set | 586 | # CONFIG_NCP_FS is not set |
| 480 | # CONFIG_CODA_FS is not set | 587 | # CONFIG_CODA_FS is not set |
| @@ -485,43 +592,175 @@ CONFIG_SUNRPC=y | |||
| 485 | # | 592 | # |
| 486 | # CONFIG_PARTITION_ADVANCED is not set | 593 | # CONFIG_PARTITION_ADVANCED is not set |
| 487 | CONFIG_MSDOS_PARTITION=y | 594 | CONFIG_MSDOS_PARTITION=y |
| 488 | |||
| 489 | # | ||
| 490 | # Native Language Support | ||
| 491 | # | ||
| 492 | # CONFIG_NLS is not set | 595 | # CONFIG_NLS is not set |
| 596 | # CONFIG_DLM is not set | ||
| 493 | 597 | ||
| 494 | # | 598 | # |
| 495 | # Kernel hacking | 599 | # Kernel hacking |
| 496 | # | 600 | # |
| 497 | CONFIG_DEBUG_KERNEL=y | 601 | # CONFIG_PRINTK_TIME is not set |
| 498 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 602 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 499 | # CONFIG_DEBUG_SLAB is not set | 603 | CONFIG_ENABLE_MUST_CHECK=y |
| 604 | CONFIG_FRAME_WARN=1024 | ||
| 500 | # CONFIG_MAGIC_SYSRQ is not set | 605 | # CONFIG_MAGIC_SYSRQ is not set |
| 606 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 607 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 608 | # CONFIG_DEBUG_FS is not set | ||
| 609 | # CONFIG_HEADERS_CHECK is not set | ||
| 610 | CONFIG_DEBUG_KERNEL=y | ||
| 611 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 612 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 613 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 614 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 615 | CONFIG_DETECT_HUNG_TASK=y | ||
| 616 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
| 617 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
| 618 | CONFIG_SCHED_DEBUG=y | ||
| 619 | # CONFIG_SCHEDSTATS is not set | ||
| 620 | # CONFIG_TIMER_STATS is not set | ||
| 621 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 622 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 623 | # CONFIG_SLUB_STATS is not set | ||
| 624 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 625 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 501 | # CONFIG_DEBUG_SPINLOCK is not set | 626 | # CONFIG_DEBUG_SPINLOCK is not set |
| 502 | # CONFIG_DEBUG_PAGEALLOC is not set | 627 | # CONFIG_DEBUG_MUTEXES is not set |
| 503 | # CONFIG_DEBUG_INFO is not set | ||
| 504 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 628 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 505 | # CONFIG_KGDB is not set | 629 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 630 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 631 | # CONFIG_DEBUG_INFO is not set | ||
| 632 | # CONFIG_DEBUG_VM is not set | ||
| 633 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 634 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
| 635 | # CONFIG_DEBUG_LIST is not set | ||
| 636 | # CONFIG_DEBUG_SG is not set | ||
| 637 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 638 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
| 639 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 640 | CONFIG_RCU_CPU_STALL_DETECTOR=y | ||
| 641 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 642 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
| 643 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
| 644 | # CONFIG_FAULT_INJECTION is not set | ||
| 645 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 646 | # CONFIG_PAGE_POISONING is not set | ||
| 647 | # CONFIG_SAMPLES is not set | ||
| 506 | 648 | ||
| 507 | # | 649 | # |
| 508 | # Security options | 650 | # Security options |
| 509 | # | 651 | # |
| 510 | # CONFIG_KEYS is not set | 652 | # CONFIG_KEYS is not set |
| 511 | # CONFIG_SECURITY is not set | 653 | # CONFIG_SECURITY is not set |
| 654 | # CONFIG_SECURITYFS is not set | ||
| 655 | # CONFIG_DEFAULT_SECURITY_SELINUX is not set | ||
| 656 | # CONFIG_DEFAULT_SECURITY_SMACK is not set | ||
| 657 | # CONFIG_DEFAULT_SECURITY_TOMOYO is not set | ||
| 658 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
| 659 | CONFIG_DEFAULT_SECURITY="" | ||
| 660 | CONFIG_CRYPTO=y | ||
| 661 | |||
| 662 | # | ||
| 663 | # Crypto core or helper | ||
| 664 | # | ||
| 665 | # CONFIG_CRYPTO_FIPS is not set | ||
| 666 | CONFIG_CRYPTO_ALGAPI=y | ||
| 667 | CONFIG_CRYPTO_ALGAPI2=y | ||
| 668 | CONFIG_CRYPTO_RNG=y | ||
| 669 | CONFIG_CRYPTO_RNG2=y | ||
| 670 | # CONFIG_CRYPTO_MANAGER is not set | ||
| 671 | # CONFIG_CRYPTO_MANAGER2 is not set | ||
| 672 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 673 | # CONFIG_CRYPTO_NULL is not set | ||
| 674 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 675 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 676 | |||
| 677 | # | ||
| 678 | # Authenticated Encryption with Associated Data | ||
| 679 | # | ||
| 680 | # CONFIG_CRYPTO_CCM is not set | ||
| 681 | # CONFIG_CRYPTO_GCM is not set | ||
| 682 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 683 | |||
| 684 | # | ||
| 685 | # Block modes | ||
| 686 | # | ||
| 687 | # CONFIG_CRYPTO_CBC is not set | ||
| 688 | # CONFIG_CRYPTO_CTR is not set | ||
| 689 | # CONFIG_CRYPTO_CTS is not set | ||
| 690 | # CONFIG_CRYPTO_ECB is not set | ||
| 691 | # CONFIG_CRYPTO_LRW is not set | ||
| 692 | # CONFIG_CRYPTO_PCBC is not set | ||
| 693 | # CONFIG_CRYPTO_XTS is not set | ||
| 694 | |||
| 695 | # | ||
| 696 | # Hash modes | ||
| 697 | # | ||
| 698 | # CONFIG_CRYPTO_HMAC is not set | ||
| 699 | # CONFIG_CRYPTO_XCBC is not set | ||
| 700 | # CONFIG_CRYPTO_VMAC is not set | ||
| 701 | |||
| 702 | # | ||
| 703 | # Digest | ||
| 704 | # | ||
| 705 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 706 | # CONFIG_CRYPTO_GHASH is not set | ||
| 707 | # CONFIG_CRYPTO_MD4 is not set | ||
| 708 | # CONFIG_CRYPTO_MD5 is not set | ||
| 709 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 710 | # CONFIG_CRYPTO_RMD128 is not set | ||
| 711 | # CONFIG_CRYPTO_RMD160 is not set | ||
| 712 | # CONFIG_CRYPTO_RMD256 is not set | ||
| 713 | # CONFIG_CRYPTO_RMD320 is not set | ||
| 714 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 715 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 716 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 717 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 718 | # CONFIG_CRYPTO_WP512 is not set | ||
| 719 | |||
| 720 | # | ||
| 721 | # Ciphers | ||
| 722 | # | ||
| 723 | CONFIG_CRYPTO_AES=y | ||
| 724 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 725 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 726 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 727 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 728 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 729 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 730 | # CONFIG_CRYPTO_DES is not set | ||
| 731 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 732 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 733 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 734 | # CONFIG_CRYPTO_SEED is not set | ||
| 735 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 736 | # CONFIG_CRYPTO_TEA is not set | ||
| 737 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 512 | 738 | ||
| 513 | # | 739 | # |
| 514 | # Cryptographic options | 740 | # Compression |
| 515 | # | 741 | # |
| 516 | # CONFIG_CRYPTO is not set | 742 | # CONFIG_CRYPTO_DEFLATE is not set |
| 743 | # CONFIG_CRYPTO_ZLIB is not set | ||
| 744 | # CONFIG_CRYPTO_LZO is not set | ||
| 517 | 745 | ||
| 518 | # | 746 | # |
| 519 | # Hardware crypto devices | 747 | # Random Number Generation |
| 520 | # | 748 | # |
| 749 | CONFIG_CRYPTO_ANSI_CPRNG=y | ||
| 750 | CONFIG_CRYPTO_HW=y | ||
| 751 | # CONFIG_BINARY_PRINTF is not set | ||
| 521 | 752 | ||
| 522 | # | 753 | # |
| 523 | # Library routines | 754 | # Library routines |
| 524 | # | 755 | # |
| 756 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 525 | # CONFIG_CRC_CCITT is not set | 757 | # CONFIG_CRC_CCITT is not set |
| 758 | # CONFIG_CRC16 is not set | ||
| 759 | # CONFIG_CRC_T10DIF is not set | ||
| 760 | # CONFIG_CRC_ITU_T is not set | ||
| 526 | # CONFIG_CRC32 is not set | 761 | # CONFIG_CRC32 is not set |
| 762 | # CONFIG_CRC7 is not set | ||
| 527 | # CONFIG_LIBCRC32C is not set | 763 | # CONFIG_LIBCRC32C is not set |
| 764 | CONFIG_HAS_IOMEM=y | ||
| 765 | CONFIG_HAS_DMA=y | ||
| 766 | CONFIG_NLATTR=y | ||
diff --git a/arch/xtensa/include/asm/cacheflush.h b/arch/xtensa/include/asm/cacheflush.h index a508f2f73bd7..376cd9d5f455 100644 --- a/arch/xtensa/include/asm/cacheflush.h +++ b/arch/xtensa/include/asm/cacheflush.h | |||
| @@ -115,6 +115,7 @@ extern void flush_cache_page(struct vm_area_struct*, unsigned long, unsigned lon | |||
| 115 | #define flush_cache_vmap(start,end) do { } while (0) | 115 | #define flush_cache_vmap(start,end) do { } while (0) |
| 116 | #define flush_cache_vunmap(start,end) do { } while (0) | 116 | #define flush_cache_vunmap(start,end) do { } while (0) |
| 117 | 117 | ||
| 118 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
| 118 | #define flush_dcache_page(page) do { } while (0) | 119 | #define flush_dcache_page(page) do { } while (0) |
| 119 | 120 | ||
| 120 | #define flush_cache_page(vma,addr,pfn) do { } while (0) | 121 | #define flush_cache_page(vma,addr,pfn) do { } while (0) |
diff --git a/arch/xtensa/include/asm/coprocessor.h b/arch/xtensa/include/asm/coprocessor.h index 65a285d8d3fb..75c94a1658b0 100644 --- a/arch/xtensa/include/asm/coprocessor.h +++ b/arch/xtensa/include/asm/coprocessor.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #define _XTENSA_COPROCESSOR_H | 13 | #define _XTENSA_COPROCESSOR_H |
| 14 | 14 | ||
| 15 | #include <linux/stringify.h> | 15 | #include <linux/stringify.h> |
| 16 | #include <variant/core.h> | ||
| 16 | #include <variant/tie.h> | 17 | #include <variant/tie.h> |
| 17 | #include <asm/types.h> | 18 | #include <asm/types.h> |
| 18 | 19 | ||
diff --git a/arch/xtensa/include/asm/elf.h b/arch/xtensa/include/asm/elf.h index 5eb6d695e987..6e65eadaae14 100644 --- a/arch/xtensa/include/asm/elf.h +++ b/arch/xtensa/include/asm/elf.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #define _XTENSA_ELF_H | 14 | #define _XTENSA_ELF_H |
| 15 | 15 | ||
| 16 | #include <asm/ptrace.h> | 16 | #include <asm/ptrace.h> |
| 17 | #include <asm/coprocessor.h> | ||
| 17 | 18 | ||
| 18 | /* Xtensa processor ELF architecture-magic number */ | 19 | /* Xtensa processor ELF architecture-magic number */ |
| 19 | 20 | ||
diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h index 4f4a7987eded..40cf9bceda2c 100644 --- a/arch/xtensa/include/asm/pgalloc.h +++ b/arch/xtensa/include/asm/pgalloc.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #ifdef __KERNEL__ | 14 | #ifdef __KERNEL__ |
| 15 | 15 | ||
| 16 | #include <linux/highmem.h> | 16 | #include <linux/highmem.h> |
| 17 | #include <linux/slab.h> | ||
| 17 | 18 | ||
| 18 | /* | 19 | /* |
| 19 | * Allocating and freeing a pmd is trivial: the 1-entry pmd is | 20 | * Allocating and freeing a pmd is trivial: the 1-entry pmd is |
diff --git a/arch/xtensa/include/asm/processor.h b/arch/xtensa/include/asm/processor.h index 0ea4937c0b61..3acb26e8dead 100644 --- a/arch/xtensa/include/asm/processor.h +++ b/arch/xtensa/include/asm/processor.h | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #define _XTENSA_PROCESSOR_H | 12 | #define _XTENSA_PROCESSOR_H |
| 13 | 13 | ||
| 14 | #include <variant/core.h> | 14 | #include <variant/core.h> |
| 15 | #include <asm/coprocessor.h> | ||
| 16 | #include <platform/hardware.h> | 15 | #include <platform/hardware.h> |
| 17 | 16 | ||
| 18 | #include <linux/compiler.h> | 17 | #include <linux/compiler.h> |
diff --git a/arch/xtensa/include/asm/ptrace.h b/arch/xtensa/include/asm/ptrace.h index 3c549f798727..0d42c934b66f 100644 --- a/arch/xtensa/include/asm/ptrace.h +++ b/arch/xtensa/include/asm/ptrace.h | |||
| @@ -77,6 +77,8 @@ | |||
| 77 | 77 | ||
| 78 | #ifndef __ASSEMBLY__ | 78 | #ifndef __ASSEMBLY__ |
| 79 | 79 | ||
| 80 | #include <asm/coprocessor.h> | ||
| 81 | |||
| 80 | /* | 82 | /* |
| 81 | * This struct defines the way the registers are stored on the | 83 | * This struct defines the way the registers are stored on the |
| 82 | * kernel stack during a system call or other kernel entry. | 84 | * kernel stack during a system call or other kernel entry. |
diff --git a/arch/xtensa/kernel/Makefile b/arch/xtensa/kernel/Makefile index 6f56d95f2c1e..2d2728b3e862 100644 --- a/arch/xtensa/kernel/Makefile +++ b/arch/xtensa/kernel/Makefile | |||
| @@ -23,8 +23,8 @@ obj-$(CONFIG_MODULES) += xtensa_ksyms.o module.o | |||
| 23 | # | 23 | # |
| 24 | # Replicate rules in scripts/Makefile.build | 24 | # Replicate rules in scripts/Makefile.build |
| 25 | 25 | ||
| 26 | sed-y = -e 's/(\(\.[a-z]*it\|\.ref\|\)\.text)/(\1.literal \1.text)/g' \ | 26 | sed-y = -e 's/\*(\(\.[a-z]*it\|\.ref\|\)\.text)/*(\1.literal \1.text)/g' \ |
| 27 | -e 's/(\(\.text\.[a-z]*\))/(\1.literal \1)/g' | 27 | -e 's/\*(\(\.text\.[a-z]*\))/*(\1.literal \1)/g' |
| 28 | 28 | ||
| 29 | quiet_cmd__cpp_lds_S = LDS $@ | 29 | quiet_cmd__cpp_lds_S = LDS $@ |
| 30 | cmd__cpp_lds_S = $(CPP) $(cpp_flags) -P -C -Uxtensa -D__ASSEMBLY__ $< \ | 30 | cmd__cpp_lds_S = $(CPP) $(cpp_flags) -P -C -Uxtensa -D__ASSEMBLY__ $< \ |
diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c index 070ff8af3a21..7dc3f9157185 100644 --- a/arch/xtensa/kernel/asm-offsets.c +++ b/arch/xtensa/kernel/asm-offsets.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
| 16 | #include <asm/coprocessor.h> | ||
| 16 | 17 | ||
| 17 | #include <linux/types.h> | 18 | #include <linux/types.h> |
| 18 | #include <linux/stddef.h> | 19 | #include <linux/stddef.h> |
diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S index 77fc9f6dc016..5fd01f6aaf37 100644 --- a/arch/xtensa/kernel/entry.S +++ b/arch/xtensa/kernel/entry.S | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
| 17 | #include <asm/asm-offsets.h> | 17 | #include <asm/asm-offsets.h> |
| 18 | #include <asm/processor.h> | 18 | #include <asm/processor.h> |
| 19 | #include <asm/coprocessor.h> | ||
| 19 | #include <asm/thread_info.h> | 20 | #include <asm/thread_info.h> |
| 20 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
| 21 | #include <asm/unistd.h> | 22 | #include <asm/unistd.h> |
diff --git a/arch/xtensa/kernel/head.S b/arch/xtensa/kernel/head.S index d215adcfd4ea..3ef91a73652d 100644 --- a/arch/xtensa/kernel/head.S +++ b/arch/xtensa/kernel/head.S | |||
| @@ -184,8 +184,8 @@ _startup: | |||
| 184 | * Now clear the BSS segment. | 184 | * Now clear the BSS segment. |
| 185 | */ | 185 | */ |
| 186 | 186 | ||
| 187 | movi a2, _bss_start # start of BSS | 187 | movi a2, __bss_start # start of BSS |
| 188 | movi a3, _bss_end # end of BSS | 188 | movi a3, __bss_stop # end of BSS |
| 189 | 189 | ||
| 190 | __loopt a2, a3, a4, 2 | 190 | __loopt a2, a3, a4, 2 |
| 191 | s32i a0, a2, 0 | 191 | s32i a0, a2, 0 |
diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/iss/network.c index 87e218f98ef4..f717e20d961b 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c | |||
| @@ -623,6 +623,19 @@ static struct platform_driver iss_net_driver = { | |||
| 623 | 623 | ||
| 624 | static int driver_registered; | 624 | static int driver_registered; |
| 625 | 625 | ||
| 626 | static const struct net_device_ops iss_netdev_ops = { | ||
| 627 | .ndo_open = iss_net_open, | ||
| 628 | .ndo_stop = iss_net_close, | ||
| 629 | .ndo_get_stats = iss_net_get_stats, | ||
| 630 | .ndo_start_xmit = iss_net_start_xmit, | ||
| 631 | .ndo_validate_addr = eth_validate_addr, | ||
| 632 | .ndo_change_mtu = iss_net_change_mtu, | ||
| 633 | .ndo_set_mac_address = iss_net_set_mac, | ||
| 634 | //.ndo_do_ioctl = iss_net_ioctl, | ||
| 635 | .ndo_tx_timeout = iss_net_tx_timeout, | ||
| 636 | .ndo_set_multicast_list = iss_net_set_multicast_list, | ||
| 637 | }; | ||
| 638 | |||
| 626 | static int iss_net_configure(int index, char *init) | 639 | static int iss_net_configure(int index, char *init) |
| 627 | { | 640 | { |
| 628 | struct net_device *dev; | 641 | struct net_device *dev; |
| @@ -686,15 +699,8 @@ static int iss_net_configure(int index, char *init) | |||
| 686 | */ | 699 | */ |
| 687 | snprintf(dev->name, sizeof dev->name, "eth%d", index); | 700 | snprintf(dev->name, sizeof dev->name, "eth%d", index); |
| 688 | 701 | ||
| 702 | dev->netdev_ops = &iss_netdev_ops; | ||
| 689 | dev->mtu = lp->mtu; | 703 | dev->mtu = lp->mtu; |
| 690 | dev->open = iss_net_open; | ||
| 691 | dev->hard_start_xmit = iss_net_start_xmit; | ||
| 692 | dev->stop = iss_net_close; | ||
| 693 | dev->get_stats = iss_net_get_stats; | ||
| 694 | dev->set_multicast_list = iss_net_set_multicast_list; | ||
| 695 | dev->tx_timeout = iss_net_tx_timeout; | ||
| 696 | dev->set_mac_address = iss_net_set_mac; | ||
| 697 | dev->change_mtu = iss_net_change_mtu; | ||
| 698 | dev->watchdog_timeo = (HZ >> 1); | 704 | dev->watchdog_timeo = (HZ >> 1); |
| 699 | dev->irq = -1; | 705 | dev->irq = -1; |
| 700 | 706 | ||
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 258bc2ae2885..23b7c48df843 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -225,16 +225,6 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode, | |||
| 225 | struct gendisk *disk = bdev->bd_disk; | 225 | struct gendisk *disk = bdev->bd_disk; |
| 226 | struct virtio_blk *vblk = disk->private_data; | 226 | struct virtio_blk *vblk = disk->private_data; |
| 227 | 227 | ||
| 228 | if (cmd == 0x56424944) { /* 'VBID' */ | ||
| 229 | void __user *usr_data = (void __user *)data; | ||
| 230 | char id_str[VIRTIO_BLK_ID_BYTES]; | ||
| 231 | int err; | ||
| 232 | |||
| 233 | err = virtblk_get_id(disk, id_str); | ||
| 234 | if (!err && copy_to_user(usr_data, id_str, VIRTIO_BLK_ID_BYTES)) | ||
| 235 | err = -EFAULT; | ||
| 236 | return err; | ||
| 237 | } | ||
| 238 | /* | 228 | /* |
| 239 | * Only allow the generic SCSI ioctls if the host can support it. | 229 | * Only allow the generic SCSI ioctls if the host can support it. |
| 240 | */ | 230 | */ |
| @@ -281,6 +271,27 @@ static int index_to_minor(int index) | |||
| 281 | return index << PART_BITS; | 271 | return index << PART_BITS; |
| 282 | } | 272 | } |
| 283 | 273 | ||
| 274 | static ssize_t virtblk_serial_show(struct device *dev, | ||
| 275 | struct device_attribute *attr, char *buf) | ||
| 276 | { | ||
| 277 | struct gendisk *disk = dev_to_disk(dev); | ||
| 278 | int err; | ||
| 279 | |||
| 280 | /* sysfs gives us a PAGE_SIZE buffer */ | ||
| 281 | BUILD_BUG_ON(PAGE_SIZE < VIRTIO_BLK_ID_BYTES); | ||
| 282 | |||
| 283 | buf[VIRTIO_BLK_ID_BYTES] = '\0'; | ||
| 284 | err = virtblk_get_id(disk, buf); | ||
| 285 | if (!err) | ||
| 286 | return strlen(buf); | ||
| 287 | |||
| 288 | if (err == -EIO) /* Unsupported? Make it empty. */ | ||
| 289 | return 0; | ||
| 290 | |||
| 291 | return err; | ||
| 292 | } | ||
| 293 | DEVICE_ATTR(serial, S_IRUGO, virtblk_serial_show, NULL); | ||
| 294 | |||
| 284 | static int __devinit virtblk_probe(struct virtio_device *vdev) | 295 | static int __devinit virtblk_probe(struct virtio_device *vdev) |
| 285 | { | 296 | { |
| 286 | struct virtio_blk *vblk; | 297 | struct virtio_blk *vblk; |
| @@ -366,12 +377,32 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) | |||
| 366 | vblk->disk->driverfs_dev = &vdev->dev; | 377 | vblk->disk->driverfs_dev = &vdev->dev; |
| 367 | index++; | 378 | index++; |
| 368 | 379 | ||
| 369 | /* If barriers are supported, tell block layer that queue is ordered */ | 380 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_FLUSH)) { |
| 370 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_FLUSH)) | 381 | /* |
| 382 | * If the FLUSH feature is supported we do have support for | ||
| 383 | * flushing a volatile write cache on the host. Use that | ||
| 384 | * to implement write barrier support. | ||
| 385 | */ | ||
| 371 | blk_queue_ordered(q, QUEUE_ORDERED_DRAIN_FLUSH, | 386 | blk_queue_ordered(q, QUEUE_ORDERED_DRAIN_FLUSH, |
| 372 | virtblk_prepare_flush); | 387 | virtblk_prepare_flush); |
| 373 | else if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) | 388 | } else if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) { |
| 389 | /* | ||
| 390 | * If the BARRIER feature is supported the host expects us | ||
| 391 | * to order request by tags. This implies there is not | ||
| 392 | * volatile write cache on the host, and that the host | ||
| 393 | * never re-orders outstanding I/O. This feature is not | ||
| 394 | * useful for real life scenarious and deprecated. | ||
| 395 | */ | ||
| 374 | blk_queue_ordered(q, QUEUE_ORDERED_TAG, NULL); | 396 | blk_queue_ordered(q, QUEUE_ORDERED_TAG, NULL); |
| 397 | } else { | ||
| 398 | /* | ||
| 399 | * If the FLUSH feature is not supported we must assume that | ||
| 400 | * the host does not perform any kind of volatile write | ||
| 401 | * caching. We still need to drain the queue to provider | ||
| 402 | * proper barrier semantics. | ||
| 403 | */ | ||
| 404 | blk_queue_ordered(q, QUEUE_ORDERED_DRAIN, NULL); | ||
| 405 | } | ||
| 375 | 406 | ||
| 376 | /* If disk is read-only in the host, the guest should obey */ | 407 | /* If disk is read-only in the host, the guest should obey */ |
| 377 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO)) | 408 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO)) |
| @@ -445,8 +476,15 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) | |||
| 445 | 476 | ||
| 446 | 477 | ||
| 447 | add_disk(vblk->disk); | 478 | add_disk(vblk->disk); |
| 479 | err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial); | ||
| 480 | if (err) | ||
| 481 | goto out_del_disk; | ||
| 482 | |||
| 448 | return 0; | 483 | return 0; |
| 449 | 484 | ||
| 485 | out_del_disk: | ||
| 486 | del_gendisk(vblk->disk); | ||
| 487 | blk_cleanup_queue(vblk->disk->queue); | ||
| 450 | out_put_disk: | 488 | out_put_disk: |
| 451 | put_disk(vblk->disk); | 489 | put_disk(vblk->disk); |
| 452 | out_mempool: | 490 | out_mempool: |
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 82ed403147c0..f63ac3d1f8a4 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #include <xen/grant_table.h> | 48 | #include <xen/grant_table.h> |
| 49 | #include <xen/events.h> | 49 | #include <xen/events.h> |
| 50 | #include <xen/page.h> | 50 | #include <xen/page.h> |
| 51 | #include <xen/platform_pci.h> | ||
| 51 | 52 | ||
| 52 | #include <xen/interface/grant_table.h> | 53 | #include <xen/interface/grant_table.h> |
| 53 | #include <xen/interface/io/blkif.h> | 54 | #include <xen/interface/io/blkif.h> |
| @@ -737,6 +738,35 @@ static int blkfront_probe(struct xenbus_device *dev, | |||
| 737 | } | 738 | } |
| 738 | } | 739 | } |
| 739 | 740 | ||
| 741 | if (xen_hvm_domain()) { | ||
| 742 | char *type; | ||
| 743 | int len; | ||
| 744 | /* no unplug has been done: do not hook devices != xen vbds */ | ||
| 745 | if (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE) { | ||
| 746 | int major; | ||
| 747 | |||
| 748 | if (!VDEV_IS_EXTENDED(vdevice)) | ||
| 749 | major = BLKIF_MAJOR(vdevice); | ||
| 750 | else | ||
| 751 | major = XENVBD_MAJOR; | ||
| 752 | |||
| 753 | if (major != XENVBD_MAJOR) { | ||
| 754 | printk(KERN_INFO | ||
| 755 | "%s: HVM does not support vbd %d as xen block device\n", | ||
| 756 | __FUNCTION__, vdevice); | ||
| 757 | return -ENODEV; | ||
| 758 | } | ||
| 759 | } | ||
| 760 | /* do not create a PV cdrom device if we are an HVM guest */ | ||
| 761 | type = xenbus_read(XBT_NIL, dev->nodename, "device-type", &len); | ||
| 762 | if (IS_ERR(type)) | ||
| 763 | return -ENODEV; | ||
| 764 | if (strncmp(type, "cdrom", 5) == 0) { | ||
| 765 | kfree(type); | ||
| 766 | return -ENODEV; | ||
| 767 | } | ||
| 768 | kfree(type); | ||
| 769 | } | ||
| 740 | info = kzalloc(sizeof(*info), GFP_KERNEL); | 770 | info = kzalloc(sizeof(*info), GFP_KERNEL); |
| 741 | if (!info) { | 771 | if (!info) { |
| 742 | xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); | 772 | xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); |
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 35cca4c7fb18..fa27d1676ee5 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c | |||
| @@ -194,7 +194,7 @@ static int __init hvc_console_setup(struct console *co, char *options) | |||
| 194 | return 0; | 194 | return 0; |
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | static struct console hvc_con_driver = { | 197 | static struct console hvc_console = { |
| 198 | .name = "hvc", | 198 | .name = "hvc", |
| 199 | .write = hvc_console_print, | 199 | .write = hvc_console_print, |
| 200 | .device = hvc_console_device, | 200 | .device = hvc_console_device, |
| @@ -220,7 +220,7 @@ static struct console hvc_con_driver = { | |||
| 220 | */ | 220 | */ |
| 221 | static int __init hvc_console_init(void) | 221 | static int __init hvc_console_init(void) |
| 222 | { | 222 | { |
| 223 | register_console(&hvc_con_driver); | 223 | register_console(&hvc_console); |
| 224 | return 0; | 224 | return 0; |
| 225 | } | 225 | } |
| 226 | console_initcall(hvc_console_init); | 226 | console_initcall(hvc_console_init); |
| @@ -276,8 +276,8 @@ int hvc_instantiate(uint32_t vtermno, int index, const struct hv_ops *ops) | |||
| 276 | * now (setup won't fail at this point). It's ok to just | 276 | * now (setup won't fail at this point). It's ok to just |
| 277 | * call register again if previously .setup failed. | 277 | * call register again if previously .setup failed. |
| 278 | */ | 278 | */ |
| 279 | if (index == hvc_con_driver.index) | 279 | if (index == hvc_console.index) |
| 280 | register_console(&hvc_con_driver); | 280 | register_console(&hvc_console); |
| 281 | 281 | ||
| 282 | return 0; | 282 | return 0; |
| 283 | } | 283 | } |
| @@ -641,7 +641,7 @@ int hvc_poll(struct hvc_struct *hp) | |||
| 641 | } | 641 | } |
| 642 | for (i = 0; i < n; ++i) { | 642 | for (i = 0; i < n; ++i) { |
| 643 | #ifdef CONFIG_MAGIC_SYSRQ | 643 | #ifdef CONFIG_MAGIC_SYSRQ |
| 644 | if (hp->index == hvc_con_driver.index) { | 644 | if (hp->index == hvc_console.index) { |
| 645 | /* Handle the SysRq Hack */ | 645 | /* Handle the SysRq Hack */ |
| 646 | /* XXX should support a sequence */ | 646 | /* XXX should support a sequence */ |
| 647 | if (buf[i] == '\x0f') { /* ^O */ | 647 | if (buf[i] == '\x0f') { /* ^O */ |
| @@ -909,7 +909,7 @@ static void __exit hvc_exit(void) | |||
| 909 | tty_unregister_driver(hvc_driver); | 909 | tty_unregister_driver(hvc_driver); |
| 910 | /* return tty_struct instances allocated in hvc_init(). */ | 910 | /* return tty_struct instances allocated in hvc_init(). */ |
| 911 | put_tty_driver(hvc_driver); | 911 | put_tty_driver(hvc_driver); |
| 912 | unregister_console(&hvc_con_driver); | 912 | unregister_console(&hvc_console); |
| 913 | } | 913 | } |
| 914 | } | 914 | } |
| 915 | module_exit(hvc_exit); | 915 | module_exit(hvc_exit); |
diff --git a/drivers/char/hvsi.c b/drivers/char/hvsi.c index d4b14ff1c4c1..1f4b6de65a2d 100644 --- a/drivers/char/hvsi.c +++ b/drivers/char/hvsi.c | |||
| @@ -1255,7 +1255,7 @@ static int __init hvsi_console_setup(struct console *console, char *options) | |||
| 1255 | return 0; | 1255 | return 0; |
| 1256 | } | 1256 | } |
| 1257 | 1257 | ||
| 1258 | static struct console hvsi_con_driver = { | 1258 | static struct console hvsi_console = { |
| 1259 | .name = "hvsi", | 1259 | .name = "hvsi", |
| 1260 | .write = hvsi_console_print, | 1260 | .write = hvsi_console_print, |
| 1261 | .device = hvsi_console_device, | 1261 | .device = hvsi_console_device, |
| @@ -1308,7 +1308,7 @@ static int __init hvsi_console_init(void) | |||
| 1308 | } | 1308 | } |
| 1309 | 1309 | ||
| 1310 | if (hvsi_count) | 1310 | if (hvsi_count) |
| 1311 | register_console(&hvsi_con_driver); | 1311 | register_console(&hvsi_console); |
| 1312 | return 0; | 1312 | return 0; |
| 1313 | } | 1313 | } |
| 1314 | console_initcall(hvsi_console_init); | 1314 | console_initcall(hvsi_console_init); |
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index e19cf8eb6ccf..c57e530d07c7 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
| @@ -446,6 +446,16 @@ config SENSORS_IT87 | |||
| 446 | This driver can also be built as a module. If so, the module | 446 | This driver can also be built as a module. If so, the module |
| 447 | will be called it87. | 447 | will be called it87. |
| 448 | 448 | ||
| 449 | config SENSORS_JZ4740 | ||
| 450 | tristate "Ingenic JZ4740 SoC ADC driver" | ||
| 451 | depends on MACH_JZ4740 && MFD_JZ4740_ADC | ||
| 452 | help | ||
| 453 | If you say yes here you get support for reading adc values from the ADCIN | ||
| 454 | pin on Ingenic JZ4740 SoC based boards. | ||
| 455 | |||
| 456 | This driver can also be build as a module. If so, the module will be | ||
| 457 | called jz4740-hwmon. | ||
| 458 | |||
| 449 | config SENSORS_LM63 | 459 | config SENSORS_LM63 |
| 450 | tristate "National Semiconductor LM63 and LM64" | 460 | tristate "National Semiconductor LM63 and LM64" |
| 451 | depends on I2C | 461 | depends on I2C |
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index 2138ceb1a713..c5057745b068 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile | |||
| @@ -55,6 +55,7 @@ obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o | |||
| 55 | obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o | 55 | obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o |
| 56 | obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o | 56 | obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o |
| 57 | obj-$(CONFIG_SENSORS_IT87) += it87.o | 57 | obj-$(CONFIG_SENSORS_IT87) += it87.o |
| 58 | obj-$(CONFIG_SENSORS_JZ4740) += jz4740-hwmon.o | ||
| 58 | obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o | 59 | obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o |
| 59 | obj-$(CONFIG_SENSORS_K10TEMP) += k10temp.o | 60 | obj-$(CONFIG_SENSORS_K10TEMP) += k10temp.o |
| 60 | obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o | 61 | obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o |
diff --git a/drivers/hwmon/jz4740-hwmon.c b/drivers/hwmon/jz4740-hwmon.c new file mode 100644 index 000000000000..1c8b3d9e2051 --- /dev/null +++ b/drivers/hwmon/jz4740-hwmon.c | |||
| @@ -0,0 +1,230 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC HWMON driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/err.h> | ||
| 17 | #include <linux/interrupt.h> | ||
| 18 | #include <linux/kernel.h> | ||
| 19 | #include <linux/module.h> | ||
| 20 | #include <linux/mutex.h> | ||
| 21 | #include <linux/platform_device.h> | ||
| 22 | #include <linux/slab.h> | ||
| 23 | |||
| 24 | #include <linux/completion.h> | ||
| 25 | #include <linux/mfd/core.h> | ||
| 26 | |||
| 27 | #include <linux/hwmon.h> | ||
| 28 | |||
| 29 | struct jz4740_hwmon { | ||
| 30 | struct resource *mem; | ||
| 31 | void __iomem *base; | ||
| 32 | |||
| 33 | int irq; | ||
| 34 | |||
| 35 | struct mfd_cell *cell; | ||
| 36 | struct device *hwmon; | ||
| 37 | |||
| 38 | struct completion read_completion; | ||
| 39 | |||
| 40 | struct mutex lock; | ||
| 41 | }; | ||
| 42 | |||
| 43 | static ssize_t jz4740_hwmon_show_name(struct device *dev, | ||
| 44 | struct device_attribute *dev_attr, char *buf) | ||
| 45 | { | ||
| 46 | return sprintf(buf, "jz4740\n"); | ||
| 47 | } | ||
| 48 | |||
| 49 | static irqreturn_t jz4740_hwmon_irq(int irq, void *data) | ||
| 50 | { | ||
| 51 | struct jz4740_hwmon *hwmon = data; | ||
| 52 | |||
| 53 | complete(&hwmon->read_completion); | ||
| 54 | return IRQ_HANDLED; | ||
| 55 | } | ||
| 56 | |||
| 57 | static ssize_t jz4740_hwmon_read_adcin(struct device *dev, | ||
| 58 | struct device_attribute *dev_attr, char *buf) | ||
| 59 | { | ||
| 60 | struct jz4740_hwmon *hwmon = dev_get_drvdata(dev); | ||
| 61 | struct completion *completion = &hwmon->read_completion; | ||
| 62 | unsigned long t; | ||
| 63 | unsigned long val; | ||
| 64 | int ret; | ||
| 65 | |||
| 66 | mutex_lock(&hwmon->lock); | ||
| 67 | |||
| 68 | INIT_COMPLETION(*completion); | ||
| 69 | |||
| 70 | enable_irq(hwmon->irq); | ||
| 71 | hwmon->cell->enable(to_platform_device(dev)); | ||
| 72 | |||
| 73 | t = wait_for_completion_interruptible_timeout(completion, HZ); | ||
| 74 | |||
| 75 | if (t > 0) { | ||
| 76 | val = readw(hwmon->base) & 0xfff; | ||
| 77 | val = (val * 3300) >> 12; | ||
| 78 | ret = sprintf(buf, "%lu\n", val); | ||
| 79 | } else { | ||
| 80 | ret = t ? t : -ETIMEDOUT; | ||
| 81 | } | ||
| 82 | |||
| 83 | hwmon->cell->disable(to_platform_device(dev)); | ||
| 84 | disable_irq(hwmon->irq); | ||
| 85 | |||
| 86 | mutex_unlock(&hwmon->lock); | ||
| 87 | |||
| 88 | return ret; | ||
| 89 | } | ||
| 90 | |||
| 91 | static DEVICE_ATTR(name, S_IRUGO, jz4740_hwmon_show_name, NULL); | ||
| 92 | static DEVICE_ATTR(in0_input, S_IRUGO, jz4740_hwmon_read_adcin, NULL); | ||
| 93 | |||
| 94 | static struct attribute *jz4740_hwmon_attributes[] = { | ||
| 95 | &dev_attr_name.attr, | ||
| 96 | &dev_attr_in0_input.attr, | ||
| 97 | NULL | ||
| 98 | }; | ||
| 99 | |||
| 100 | static const struct attribute_group jz4740_hwmon_attr_group = { | ||
| 101 | .attrs = jz4740_hwmon_attributes, | ||
| 102 | }; | ||
| 103 | |||
| 104 | static int __devinit jz4740_hwmon_probe(struct platform_device *pdev) | ||
| 105 | { | ||
| 106 | int ret; | ||
| 107 | struct jz4740_hwmon *hwmon; | ||
| 108 | |||
| 109 | hwmon = kmalloc(sizeof(*hwmon), GFP_KERNEL); | ||
| 110 | if (!hwmon) { | ||
| 111 | dev_err(&pdev->dev, "Failed to allocate driver structure\n"); | ||
| 112 | return -ENOMEM; | ||
| 113 | } | ||
| 114 | |||
| 115 | hwmon->cell = pdev->dev.platform_data; | ||
| 116 | |||
| 117 | hwmon->irq = platform_get_irq(pdev, 0); | ||
| 118 | if (hwmon->irq < 0) { | ||
| 119 | ret = hwmon->irq; | ||
| 120 | dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret); | ||
| 121 | goto err_free; | ||
| 122 | } | ||
| 123 | |||
| 124 | hwmon->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 125 | if (!hwmon->mem) { | ||
| 126 | ret = -ENOENT; | ||
| 127 | dev_err(&pdev->dev, "Failed to get platform mmio resource\n"); | ||
| 128 | goto err_free; | ||
| 129 | } | ||
| 130 | |||
| 131 | hwmon->mem = request_mem_region(hwmon->mem->start, | ||
| 132 | resource_size(hwmon->mem), pdev->name); | ||
| 133 | if (!hwmon->mem) { | ||
| 134 | ret = -EBUSY; | ||
| 135 | dev_err(&pdev->dev, "Failed to request mmio memory region\n"); | ||
| 136 | goto err_free; | ||
| 137 | } | ||
| 138 | |||
| 139 | hwmon->base = ioremap_nocache(hwmon->mem->start, | ||
| 140 | resource_size(hwmon->mem)); | ||
| 141 | if (!hwmon->base) { | ||
| 142 | ret = -EBUSY; | ||
| 143 | dev_err(&pdev->dev, "Failed to ioremap mmio memory\n"); | ||
| 144 | goto err_release_mem_region; | ||
| 145 | } | ||
| 146 | |||
| 147 | init_completion(&hwmon->read_completion); | ||
| 148 | mutex_init(&hwmon->lock); | ||
| 149 | |||
| 150 | platform_set_drvdata(pdev, hwmon); | ||
| 151 | |||
| 152 | ret = request_irq(hwmon->irq, jz4740_hwmon_irq, 0, pdev->name, hwmon); | ||
| 153 | if (ret) { | ||
| 154 | dev_err(&pdev->dev, "Failed to request irq: %d\n", ret); | ||
| 155 | goto err_iounmap; | ||
| 156 | } | ||
| 157 | disable_irq(hwmon->irq); | ||
| 158 | |||
| 159 | ret = sysfs_create_group(&pdev->dev.kobj, &jz4740_hwmon_attr_group); | ||
| 160 | if (ret) { | ||
| 161 | dev_err(&pdev->dev, "Failed to create sysfs group: %d\n", ret); | ||
| 162 | goto err_free_irq; | ||
| 163 | } | ||
| 164 | |||
| 165 | hwmon->hwmon = hwmon_device_register(&pdev->dev); | ||
| 166 | if (IS_ERR(hwmon->hwmon)) { | ||
| 167 | ret = PTR_ERR(hwmon->hwmon); | ||
| 168 | goto err_remove_file; | ||
| 169 | } | ||
| 170 | |||
| 171 | return 0; | ||
| 172 | |||
| 173 | err_remove_file: | ||
| 174 | sysfs_remove_group(&pdev->dev.kobj, &jz4740_hwmon_attr_group); | ||
| 175 | err_free_irq: | ||
| 176 | free_irq(hwmon->irq, hwmon); | ||
| 177 | err_iounmap: | ||
| 178 | platform_set_drvdata(pdev, NULL); | ||
| 179 | iounmap(hwmon->base); | ||
| 180 | err_release_mem_region: | ||
| 181 | release_mem_region(hwmon->mem->start, resource_size(hwmon->mem)); | ||
| 182 | err_free: | ||
| 183 | kfree(hwmon); | ||
| 184 | |||
| 185 | return ret; | ||
| 186 | } | ||
| 187 | |||
| 188 | static int __devexit jz4740_hwmon_remove(struct platform_device *pdev) | ||
| 189 | { | ||
| 190 | struct jz4740_hwmon *hwmon = platform_get_drvdata(pdev); | ||
| 191 | |||
| 192 | hwmon_device_unregister(hwmon->hwmon); | ||
| 193 | sysfs_remove_group(&pdev->dev.kobj, &jz4740_hwmon_attr_group); | ||
| 194 | |||
| 195 | free_irq(hwmon->irq, hwmon); | ||
| 196 | |||
| 197 | iounmap(hwmon->base); | ||
| 198 | release_mem_region(hwmon->mem->start, resource_size(hwmon->mem)); | ||
| 199 | |||
| 200 | platform_set_drvdata(pdev, NULL); | ||
| 201 | kfree(hwmon); | ||
| 202 | |||
| 203 | return 0; | ||
| 204 | } | ||
| 205 | |||
| 206 | struct platform_driver jz4740_hwmon_driver = { | ||
| 207 | .probe = jz4740_hwmon_probe, | ||
| 208 | .remove = __devexit_p(jz4740_hwmon_remove), | ||
| 209 | .driver = { | ||
| 210 | .name = "jz4740-hwmon", | ||
| 211 | .owner = THIS_MODULE, | ||
| 212 | }, | ||
| 213 | }; | ||
| 214 | |||
| 215 | static int __init jz4740_hwmon_init(void) | ||
| 216 | { | ||
| 217 | return platform_driver_register(&jz4740_hwmon_driver); | ||
| 218 | } | ||
| 219 | module_init(jz4740_hwmon_init); | ||
| 220 | |||
| 221 | static void __exit jz4740_hwmon_exit(void) | ||
| 222 | { | ||
| 223 | platform_driver_unregister(&jz4740_hwmon_driver); | ||
| 224 | } | ||
| 225 | module_exit(jz4740_hwmon_exit); | ||
| 226 | |||
| 227 | MODULE_DESCRIPTION("JZ4740 SoC HWMON driver"); | ||
| 228 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
| 229 | MODULE_LICENSE("GPL"); | ||
| 230 | MODULE_ALIAS("platform:jz4740-hwmon"); | ||
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c index df00eb1f11f9..54247d475fc3 100644 --- a/drivers/i2c/busses/i2c-mpc.c +++ b/drivers/i2c/busses/i2c-mpc.c | |||
| @@ -63,6 +63,7 @@ struct mpc_i2c { | |||
| 63 | wait_queue_head_t queue; | 63 | wait_queue_head_t queue; |
| 64 | struct i2c_adapter adap; | 64 | struct i2c_adapter adap; |
| 65 | int irq; | 65 | int irq; |
| 66 | u32 real_clk; | ||
| 66 | }; | 67 | }; |
| 67 | 68 | ||
| 68 | struct mpc_i2c_divider { | 69 | struct mpc_i2c_divider { |
| @@ -96,20 +97,23 @@ static irqreturn_t mpc_i2c_isr(int irq, void *dev_id) | |||
| 96 | /* Sometimes 9th clock pulse isn't generated, and slave doesn't release | 97 | /* Sometimes 9th clock pulse isn't generated, and slave doesn't release |
| 97 | * the bus, because it wants to send ACK. | 98 | * the bus, because it wants to send ACK. |
| 98 | * Following sequence of enabling/disabling and sending start/stop generates | 99 | * Following sequence of enabling/disabling and sending start/stop generates |
| 99 | * the pulse, so it's all OK. | 100 | * the 9 pulses, so it's all OK. |
| 100 | */ | 101 | */ |
| 101 | static void mpc_i2c_fixup(struct mpc_i2c *i2c) | 102 | static void mpc_i2c_fixup(struct mpc_i2c *i2c) |
| 102 | { | 103 | { |
| 103 | writeccr(i2c, 0); | 104 | int k; |
| 104 | udelay(30); | 105 | u32 delay_val = 1000000 / i2c->real_clk + 1; |
| 105 | writeccr(i2c, CCR_MEN); | 106 | |
| 106 | udelay(30); | 107 | if (delay_val < 2) |
| 107 | writeccr(i2c, CCR_MSTA | CCR_MTX); | 108 | delay_val = 2; |
| 108 | udelay(30); | 109 | |
| 109 | writeccr(i2c, CCR_MSTA | CCR_MTX | CCR_MEN); | 110 | for (k = 9; k; k--) { |
| 110 | udelay(30); | 111 | writeccr(i2c, 0); |
| 111 | writeccr(i2c, CCR_MEN); | 112 | writeccr(i2c, CCR_MSTA | CCR_MTX | CCR_MEN); |
| 112 | udelay(30); | 113 | udelay(delay_val); |
| 114 | writeccr(i2c, CCR_MEN); | ||
| 115 | udelay(delay_val << 1); | ||
| 116 | } | ||
| 113 | } | 117 | } |
| 114 | 118 | ||
| 115 | static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing) | 119 | static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing) |
| @@ -190,15 +194,18 @@ static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] __devinitconst = { | |||
| 190 | }; | 194 | }; |
| 191 | 195 | ||
| 192 | static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, | 196 | static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, |
| 193 | int prescaler) | 197 | int prescaler, u32 *real_clk) |
| 194 | { | 198 | { |
| 195 | const struct mpc_i2c_divider *div = NULL; | 199 | const struct mpc_i2c_divider *div = NULL; |
| 196 | unsigned int pvr = mfspr(SPRN_PVR); | 200 | unsigned int pvr = mfspr(SPRN_PVR); |
| 197 | u32 divider; | 201 | u32 divider; |
| 198 | int i; | 202 | int i; |
| 199 | 203 | ||
| 200 | if (clock == MPC_I2C_CLOCK_LEGACY) | 204 | if (clock == MPC_I2C_CLOCK_LEGACY) { |
| 205 | /* see below - default fdr = 0x3f -> div = 2048 */ | ||
| 206 | *real_clk = mpc5xxx_get_bus_frequency(node) / 2048; | ||
| 201 | return -EINVAL; | 207 | return -EINVAL; |
| 208 | } | ||
| 202 | 209 | ||
| 203 | /* Determine divider value */ | 210 | /* Determine divider value */ |
| 204 | divider = mpc5xxx_get_bus_frequency(node) / clock; | 211 | divider = mpc5xxx_get_bus_frequency(node) / clock; |
| @@ -216,7 +223,8 @@ static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, | |||
| 216 | break; | 223 | break; |
| 217 | } | 224 | } |
| 218 | 225 | ||
| 219 | return div ? (int)div->fdr : -EINVAL; | 226 | *real_clk = mpc5xxx_get_bus_frequency(node) / div->divider; |
| 227 | return (int)div->fdr; | ||
| 220 | } | 228 | } |
| 221 | 229 | ||
| 222 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | 230 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, |
| @@ -231,13 +239,14 @@ static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | |||
| 231 | return; | 239 | return; |
| 232 | } | 240 | } |
| 233 | 241 | ||
| 234 | ret = mpc_i2c_get_fdr_52xx(node, clock, prescaler); | 242 | ret = mpc_i2c_get_fdr_52xx(node, clock, prescaler, &i2c->real_clk); |
| 235 | fdr = (ret >= 0) ? ret : 0x3f; /* backward compatibility */ | 243 | fdr = (ret >= 0) ? ret : 0x3f; /* backward compatibility */ |
| 236 | 244 | ||
| 237 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); | 245 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); |
| 238 | 246 | ||
| 239 | if (ret >= 0) | 247 | if (ret >= 0) |
| 240 | dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr); | 248 | dev_info(i2c->dev, "clock %u Hz (fdr=%d)\n", i2c->real_clk, |
| 249 | fdr); | ||
| 241 | } | 250 | } |
| 242 | #else /* !(CONFIG_PPC_MPC52xx || CONFIG_PPC_MPC512x) */ | 251 | #else /* !(CONFIG_PPC_MPC52xx || CONFIG_PPC_MPC512x) */ |
| 243 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | 252 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, |
| @@ -334,14 +343,17 @@ static u32 __devinit mpc_i2c_get_sec_cfg_8xxx(void) | |||
| 334 | } | 343 | } |
| 335 | 344 | ||
| 336 | static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, | 345 | static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, |
| 337 | u32 prescaler) | 346 | u32 prescaler, u32 *real_clk) |
| 338 | { | 347 | { |
| 339 | const struct mpc_i2c_divider *div = NULL; | 348 | const struct mpc_i2c_divider *div = NULL; |
| 340 | u32 divider; | 349 | u32 divider; |
| 341 | int i; | 350 | int i; |
| 342 | 351 | ||
| 343 | if (clock == MPC_I2C_CLOCK_LEGACY) | 352 | if (clock == MPC_I2C_CLOCK_LEGACY) { |
| 353 | /* see below - default fdr = 0x1031 -> div = 16 * 3072 */ | ||
| 354 | *real_clk = fsl_get_sys_freq() / prescaler / (16 * 3072); | ||
| 344 | return -EINVAL; | 355 | return -EINVAL; |
| 356 | } | ||
| 345 | 357 | ||
| 346 | /* Determine proper divider value */ | 358 | /* Determine proper divider value */ |
| 347 | if (of_device_is_compatible(node, "fsl,mpc8544-i2c")) | 359 | if (of_device_is_compatible(node, "fsl,mpc8544-i2c")) |
| @@ -364,6 +376,7 @@ static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, | |||
| 364 | break; | 376 | break; |
| 365 | } | 377 | } |
| 366 | 378 | ||
| 379 | *real_clk = fsl_get_sys_freq() / prescaler / div->divider; | ||
| 367 | return div ? (int)div->fdr : -EINVAL; | 380 | return div ? (int)div->fdr : -EINVAL; |
| 368 | } | 381 | } |
| 369 | 382 | ||
| @@ -380,7 +393,7 @@ static void __devinit mpc_i2c_setup_8xxx(struct device_node *node, | |||
| 380 | return; | 393 | return; |
| 381 | } | 394 | } |
| 382 | 395 | ||
| 383 | ret = mpc_i2c_get_fdr_8xxx(node, clock, prescaler); | 396 | ret = mpc_i2c_get_fdr_8xxx(node, clock, prescaler, &i2c->real_clk); |
| 384 | fdr = (ret >= 0) ? ret : 0x1031; /* backward compatibility */ | 397 | fdr = (ret >= 0) ? ret : 0x1031; /* backward compatibility */ |
| 385 | 398 | ||
| 386 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); | 399 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); |
| @@ -388,7 +401,7 @@ static void __devinit mpc_i2c_setup_8xxx(struct device_node *node, | |||
| 388 | 401 | ||
| 389 | if (ret >= 0) | 402 | if (ret >= 0) |
| 390 | dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n", | 403 | dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n", |
| 391 | clock, fdr >> 8, fdr & 0xff); | 404 | i2c->real_clk, fdr >> 8, fdr & 0xff); |
| 392 | } | 405 | } |
| 393 | 406 | ||
| 394 | #else /* !CONFIG_FSL_SOC */ | 407 | #else /* !CONFIG_FSL_SOC */ |
| @@ -500,10 +513,14 @@ static int mpc_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) | |||
| 500 | return -EINTR; | 513 | return -EINTR; |
| 501 | } | 514 | } |
| 502 | if (time_after(jiffies, orig_jiffies + HZ)) { | 515 | if (time_after(jiffies, orig_jiffies + HZ)) { |
| 516 | u8 status = readb(i2c->base + MPC_I2C_SR); | ||
| 517 | |||
| 503 | dev_dbg(i2c->dev, "timeout\n"); | 518 | dev_dbg(i2c->dev, "timeout\n"); |
| 504 | if (readb(i2c->base + MPC_I2C_SR) == | 519 | if ((status & (CSR_MCF | CSR_MBB | CSR_RXAK)) != 0) { |
| 505 | (CSR_MCF | CSR_MBB | CSR_RXAK)) | 520 | writeb(status & ~CSR_MAL, |
| 521 | i2c->base + MPC_I2C_SR); | ||
| 506 | mpc_i2c_fixup(i2c); | 522 | mpc_i2c_fixup(i2c); |
| 523 | } | ||
| 507 | return -EIO; | 524 | return -EIO; |
| 508 | } | 525 | } |
| 509 | schedule(); | 526 | schedule(); |
| @@ -595,6 +612,14 @@ static int __devinit fsl_i2c_probe(struct of_device *op, | |||
| 595 | mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock, 0); | 612 | mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock, 0); |
| 596 | } | 613 | } |
| 597 | 614 | ||
| 615 | prop = of_get_property(op->dev.of_node, "fsl,timeout", &plen); | ||
| 616 | if (prop && plen == sizeof(u32)) { | ||
| 617 | mpc_ops.timeout = *prop * HZ / 1000000; | ||
| 618 | if (mpc_ops.timeout < 5) | ||
| 619 | mpc_ops.timeout = 5; | ||
| 620 | } | ||
| 621 | dev_info(i2c->dev, "timeout %u us\n", mpc_ops.timeout * 1000000 / HZ); | ||
| 622 | |||
| 598 | dev_set_drvdata(&op->dev, i2c); | 623 | dev_set_drvdata(&op->dev, i2c); |
| 599 | 624 | ||
| 600 | i2c->adap = mpc_ops; | 625 | i2c->adap = mpc_ops; |
diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h index 847f4aad7ed5..5d48bb66aa73 100644 --- a/drivers/input/serio/i8042-io.h +++ b/drivers/input/serio/i8042-io.h | |||
| @@ -27,6 +27,11 @@ | |||
| 27 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
| 28 | #elif defined(CONFIG_SH_CAYMAN) | 28 | #elif defined(CONFIG_SH_CAYMAN) |
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | #elif defined(CONFIG_PPC) | ||
| 31 | extern int of_i8042_kbd_irq; | ||
| 32 | extern int of_i8042_aux_irq; | ||
| 33 | # define I8042_KBD_IRQ of_i8042_kbd_irq | ||
| 34 | # define I8042_AUX_IRQ of_i8042_aux_irq | ||
| 30 | #else | 35 | #else |
| 31 | # define I8042_KBD_IRQ 1 | 36 | # define I8042_KBD_IRQ 1 |
| 32 | # define I8042_AUX_IRQ 12 | 37 | # define I8042_AUX_IRQ 12 |
diff --git a/drivers/input/xen-kbdfront.c b/drivers/input/xen-kbdfront.c index e14081675bb2..ebb11907d402 100644 --- a/drivers/input/xen-kbdfront.c +++ b/drivers/input/xen-kbdfront.c | |||
| @@ -339,7 +339,7 @@ static struct xenbus_driver xenkbd_driver = { | |||
| 339 | 339 | ||
| 340 | static int __init xenkbd_init(void) | 340 | static int __init xenkbd_init(void) |
| 341 | { | 341 | { |
| 342 | if (!xen_domain()) | 342 | if (!xen_pv_domain()) |
| 343 | return -ENODEV; | 343 | return -ENODEV; |
| 344 | 344 | ||
| 345 | /* Nothing to do if running in dom0. */ | 345 | /* Nothing to do if running in dom0. */ |
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index f06d06e7fdfa..d25e22cee4c4 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig | |||
| @@ -432,3 +432,12 @@ config MMC_SH_MMCIF | |||
| 432 | This selects the MMC Host Interface controler (MMCIF). | 432 | This selects the MMC Host Interface controler (MMCIF). |
| 433 | 433 | ||
| 434 | This driver supports MMCIF in sh7724/sh7757/sh7372. | 434 | This driver supports MMCIF in sh7724/sh7757/sh7372. |
| 435 | |||
| 436 | config MMC_JZ4740 | ||
| 437 | tristate "JZ4740 SD/Multimedia Card Interface support" | ||
| 438 | depends on MACH_JZ4740 | ||
| 439 | help | ||
| 440 | This selects support for the SD/MMC controller on Ingenic JZ4740 | ||
| 441 | SoCs. | ||
| 442 | If you have a board based on such a SoC and with a SD/MMC slot, | ||
| 443 | say Y or M here. | ||
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile index e30c2ee48894..f4e53c98d944 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile | |||
| @@ -36,6 +36,7 @@ obj-$(CONFIG_MMC_CB710) += cb710-mmc.o | |||
| 36 | obj-$(CONFIG_MMC_VIA_SDMMC) += via-sdmmc.o | 36 | obj-$(CONFIG_MMC_VIA_SDMMC) += via-sdmmc.o |
| 37 | obj-$(CONFIG_SDH_BFIN) += bfin_sdh.o | 37 | obj-$(CONFIG_SDH_BFIN) += bfin_sdh.o |
| 38 | obj-$(CONFIG_MMC_SH_MMCIF) += sh_mmcif.o | 38 | obj-$(CONFIG_MMC_SH_MMCIF) += sh_mmcif.o |
| 39 | obj-$(CONFIG_MMC_JZ4740) += jz4740_mmc.o | ||
| 39 | 40 | ||
| 40 | obj-$(CONFIG_MMC_SDHCI_OF) += sdhci-of.o | 41 | obj-$(CONFIG_MMC_SDHCI_OF) += sdhci-of.o |
| 41 | sdhci-of-y := sdhci-of-core.o | 42 | sdhci-of-y := sdhci-of-core.o |
diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c new file mode 100644 index 000000000000..ad4f9870e3ca --- /dev/null +++ b/drivers/mmc/host/jz4740_mmc.c | |||
| @@ -0,0 +1,1029 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SD/MMC controller driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/mmc/host.h> | ||
| 17 | #include <linux/io.h> | ||
| 18 | #include <linux/irq.h> | ||
| 19 | #include <linux/interrupt.h> | ||
| 20 | #include <linux/module.h> | ||
| 21 | #include <linux/platform_device.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | #include <linux/scatterlist.h> | ||
| 24 | #include <linux/clk.h> | ||
| 25 | |||
| 26 | #include <linux/bitops.h> | ||
| 27 | #include <linux/gpio.h> | ||
| 28 | #include <asm/mach-jz4740/gpio.h> | ||
| 29 | #include <asm/cacheflush.h> | ||
| 30 | #include <linux/dma-mapping.h> | ||
| 31 | |||
| 32 | #include <asm/mach-jz4740/jz4740_mmc.h> | ||
| 33 | |||
| 34 | #define JZ_REG_MMC_STRPCL 0x00 | ||
| 35 | #define JZ_REG_MMC_STATUS 0x04 | ||
| 36 | #define JZ_REG_MMC_CLKRT 0x08 | ||
| 37 | #define JZ_REG_MMC_CMDAT 0x0C | ||
| 38 | #define JZ_REG_MMC_RESTO 0x10 | ||
| 39 | #define JZ_REG_MMC_RDTO 0x14 | ||
| 40 | #define JZ_REG_MMC_BLKLEN 0x18 | ||
| 41 | #define JZ_REG_MMC_NOB 0x1C | ||
| 42 | #define JZ_REG_MMC_SNOB 0x20 | ||
| 43 | #define JZ_REG_MMC_IMASK 0x24 | ||
| 44 | #define JZ_REG_MMC_IREG 0x28 | ||
| 45 | #define JZ_REG_MMC_CMD 0x2C | ||
| 46 | #define JZ_REG_MMC_ARG 0x30 | ||
| 47 | #define JZ_REG_MMC_RESP_FIFO 0x34 | ||
| 48 | #define JZ_REG_MMC_RXFIFO 0x38 | ||
| 49 | #define JZ_REG_MMC_TXFIFO 0x3C | ||
| 50 | |||
| 51 | #define JZ_MMC_STRPCL_EXIT_MULTIPLE BIT(7) | ||
| 52 | #define JZ_MMC_STRPCL_EXIT_TRANSFER BIT(6) | ||
| 53 | #define JZ_MMC_STRPCL_START_READWAIT BIT(5) | ||
| 54 | #define JZ_MMC_STRPCL_STOP_READWAIT BIT(4) | ||
| 55 | #define JZ_MMC_STRPCL_RESET BIT(3) | ||
| 56 | #define JZ_MMC_STRPCL_START_OP BIT(2) | ||
| 57 | #define JZ_MMC_STRPCL_CLOCK_CONTROL (BIT(1) | BIT(0)) | ||
| 58 | #define JZ_MMC_STRPCL_CLOCK_STOP BIT(0) | ||
| 59 | #define JZ_MMC_STRPCL_CLOCK_START BIT(1) | ||
| 60 | |||
| 61 | |||
| 62 | #define JZ_MMC_STATUS_IS_RESETTING BIT(15) | ||
| 63 | #define JZ_MMC_STATUS_SDIO_INT_ACTIVE BIT(14) | ||
| 64 | #define JZ_MMC_STATUS_PRG_DONE BIT(13) | ||
| 65 | #define JZ_MMC_STATUS_DATA_TRAN_DONE BIT(12) | ||
| 66 | #define JZ_MMC_STATUS_END_CMD_RES BIT(11) | ||
| 67 | #define JZ_MMC_STATUS_DATA_FIFO_AFULL BIT(10) | ||
| 68 | #define JZ_MMC_STATUS_IS_READWAIT BIT(9) | ||
| 69 | #define JZ_MMC_STATUS_CLK_EN BIT(8) | ||
| 70 | #define JZ_MMC_STATUS_DATA_FIFO_FULL BIT(7) | ||
| 71 | #define JZ_MMC_STATUS_DATA_FIFO_EMPTY BIT(6) | ||
| 72 | #define JZ_MMC_STATUS_CRC_RES_ERR BIT(5) | ||
| 73 | #define JZ_MMC_STATUS_CRC_READ_ERROR BIT(4) | ||
| 74 | #define JZ_MMC_STATUS_TIMEOUT_WRITE BIT(3) | ||
| 75 | #define JZ_MMC_STATUS_CRC_WRITE_ERROR BIT(2) | ||
| 76 | #define JZ_MMC_STATUS_TIMEOUT_RES BIT(1) | ||
| 77 | #define JZ_MMC_STATUS_TIMEOUT_READ BIT(0) | ||
| 78 | |||
| 79 | #define JZ_MMC_STATUS_READ_ERROR_MASK (BIT(4) | BIT(0)) | ||
| 80 | #define JZ_MMC_STATUS_WRITE_ERROR_MASK (BIT(3) | BIT(2)) | ||
| 81 | |||
| 82 | |||
| 83 | #define JZ_MMC_CMDAT_IO_ABORT BIT(11) | ||
| 84 | #define JZ_MMC_CMDAT_BUS_WIDTH_4BIT BIT(10) | ||
| 85 | #define JZ_MMC_CMDAT_DMA_EN BIT(8) | ||
| 86 | #define JZ_MMC_CMDAT_INIT BIT(7) | ||
| 87 | #define JZ_MMC_CMDAT_BUSY BIT(6) | ||
| 88 | #define JZ_MMC_CMDAT_STREAM BIT(5) | ||
| 89 | #define JZ_MMC_CMDAT_WRITE BIT(4) | ||
| 90 | #define JZ_MMC_CMDAT_DATA_EN BIT(3) | ||
| 91 | #define JZ_MMC_CMDAT_RESPONSE_FORMAT (BIT(2) | BIT(1) | BIT(0)) | ||
| 92 | #define JZ_MMC_CMDAT_RSP_R1 1 | ||
| 93 | #define JZ_MMC_CMDAT_RSP_R2 2 | ||
| 94 | #define JZ_MMC_CMDAT_RSP_R3 3 | ||
| 95 | |||
| 96 | #define JZ_MMC_IRQ_SDIO BIT(7) | ||
| 97 | #define JZ_MMC_IRQ_TXFIFO_WR_REQ BIT(6) | ||
| 98 | #define JZ_MMC_IRQ_RXFIFO_RD_REQ BIT(5) | ||
| 99 | #define JZ_MMC_IRQ_END_CMD_RES BIT(2) | ||
| 100 | #define JZ_MMC_IRQ_PRG_DONE BIT(1) | ||
| 101 | #define JZ_MMC_IRQ_DATA_TRAN_DONE BIT(0) | ||
| 102 | |||
| 103 | |||
| 104 | #define JZ_MMC_CLK_RATE 24000000 | ||
| 105 | |||
| 106 | enum jz4740_mmc_state { | ||
| 107 | JZ4740_MMC_STATE_READ_RESPONSE, | ||
| 108 | JZ4740_MMC_STATE_TRANSFER_DATA, | ||
| 109 | JZ4740_MMC_STATE_SEND_STOP, | ||
| 110 | JZ4740_MMC_STATE_DONE, | ||
| 111 | }; | ||
| 112 | |||
| 113 | struct jz4740_mmc_host { | ||
| 114 | struct mmc_host *mmc; | ||
| 115 | struct platform_device *pdev; | ||
| 116 | struct jz4740_mmc_platform_data *pdata; | ||
| 117 | struct clk *clk; | ||
| 118 | |||
| 119 | int irq; | ||
| 120 | int card_detect_irq; | ||
| 121 | |||
| 122 | struct resource *mem; | ||
| 123 | void __iomem *base; | ||
| 124 | struct mmc_request *req; | ||
| 125 | struct mmc_command *cmd; | ||
| 126 | |||
| 127 | unsigned long waiting; | ||
| 128 | |||
| 129 | uint32_t cmdat; | ||
| 130 | |||
| 131 | uint16_t irq_mask; | ||
| 132 | |||
| 133 | spinlock_t lock; | ||
| 134 | |||
| 135 | struct timer_list timeout_timer; | ||
| 136 | struct sg_mapping_iter miter; | ||
| 137 | enum jz4740_mmc_state state; | ||
| 138 | }; | ||
| 139 | |||
| 140 | static void jz4740_mmc_set_irq_enabled(struct jz4740_mmc_host *host, | ||
| 141 | unsigned int irq, bool enabled) | ||
| 142 | { | ||
| 143 | unsigned long flags; | ||
| 144 | |||
| 145 | spin_lock_irqsave(&host->lock, flags); | ||
| 146 | if (enabled) | ||
| 147 | host->irq_mask &= ~irq; | ||
| 148 | else | ||
| 149 | host->irq_mask |= irq; | ||
| 150 | spin_unlock_irqrestore(&host->lock, flags); | ||
| 151 | |||
| 152 | writew(host->irq_mask, host->base + JZ_REG_MMC_IMASK); | ||
| 153 | } | ||
| 154 | |||
| 155 | static void jz4740_mmc_clock_enable(struct jz4740_mmc_host *host, | ||
| 156 | bool start_transfer) | ||
| 157 | { | ||
| 158 | uint16_t val = JZ_MMC_STRPCL_CLOCK_START; | ||
| 159 | |||
| 160 | if (start_transfer) | ||
| 161 | val |= JZ_MMC_STRPCL_START_OP; | ||
| 162 | |||
| 163 | writew(val, host->base + JZ_REG_MMC_STRPCL); | ||
| 164 | } | ||
| 165 | |||
| 166 | static void jz4740_mmc_clock_disable(struct jz4740_mmc_host *host) | ||
| 167 | { | ||
| 168 | uint32_t status; | ||
| 169 | unsigned int timeout = 1000; | ||
| 170 | |||
| 171 | writew(JZ_MMC_STRPCL_CLOCK_STOP, host->base + JZ_REG_MMC_STRPCL); | ||
| 172 | do { | ||
| 173 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 174 | } while (status & JZ_MMC_STATUS_CLK_EN && --timeout); | ||
| 175 | } | ||
| 176 | |||
| 177 | static void jz4740_mmc_reset(struct jz4740_mmc_host *host) | ||
| 178 | { | ||
| 179 | uint32_t status; | ||
| 180 | unsigned int timeout = 1000; | ||
| 181 | |||
| 182 | writew(JZ_MMC_STRPCL_RESET, host->base + JZ_REG_MMC_STRPCL); | ||
| 183 | udelay(10); | ||
| 184 | do { | ||
| 185 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 186 | } while (status & JZ_MMC_STATUS_IS_RESETTING && --timeout); | ||
| 187 | } | ||
| 188 | |||
| 189 | static void jz4740_mmc_request_done(struct jz4740_mmc_host *host) | ||
| 190 | { | ||
| 191 | struct mmc_request *req; | ||
| 192 | |||
| 193 | req = host->req; | ||
| 194 | host->req = NULL; | ||
| 195 | |||
| 196 | mmc_request_done(host->mmc, req); | ||
| 197 | } | ||
| 198 | |||
| 199 | static unsigned int jz4740_mmc_poll_irq(struct jz4740_mmc_host *host, | ||
| 200 | unsigned int irq) | ||
| 201 | { | ||
| 202 | unsigned int timeout = 0x800; | ||
| 203 | uint16_t status; | ||
| 204 | |||
| 205 | do { | ||
| 206 | status = readw(host->base + JZ_REG_MMC_IREG); | ||
| 207 | } while (!(status & irq) && --timeout); | ||
| 208 | |||
| 209 | if (timeout == 0) { | ||
| 210 | set_bit(0, &host->waiting); | ||
| 211 | mod_timer(&host->timeout_timer, jiffies + 5*HZ); | ||
| 212 | jz4740_mmc_set_irq_enabled(host, irq, true); | ||
| 213 | return true; | ||
| 214 | } | ||
| 215 | |||
| 216 | return false; | ||
| 217 | } | ||
| 218 | |||
| 219 | static void jz4740_mmc_transfer_check_state(struct jz4740_mmc_host *host, | ||
| 220 | struct mmc_data *data) | ||
| 221 | { | ||
| 222 | int status; | ||
| 223 | |||
| 224 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 225 | if (status & JZ_MMC_STATUS_WRITE_ERROR_MASK) { | ||
| 226 | if (status & (JZ_MMC_STATUS_TIMEOUT_WRITE)) { | ||
| 227 | host->req->cmd->error = -ETIMEDOUT; | ||
| 228 | data->error = -ETIMEDOUT; | ||
| 229 | } else { | ||
| 230 | host->req->cmd->error = -EIO; | ||
| 231 | data->error = -EIO; | ||
| 232 | } | ||
| 233 | } | ||
| 234 | } | ||
| 235 | |||
| 236 | static bool jz4740_mmc_write_data(struct jz4740_mmc_host *host, | ||
| 237 | struct mmc_data *data) | ||
| 238 | { | ||
| 239 | struct sg_mapping_iter *miter = &host->miter; | ||
| 240 | void __iomem *fifo_addr = host->base + JZ_REG_MMC_TXFIFO; | ||
| 241 | uint32_t *buf; | ||
| 242 | bool timeout; | ||
| 243 | size_t i, j; | ||
| 244 | |||
| 245 | while (sg_miter_next(miter)) { | ||
| 246 | buf = miter->addr; | ||
| 247 | i = miter->length / 4; | ||
| 248 | j = i / 8; | ||
| 249 | i = i & 0x7; | ||
| 250 | while (j) { | ||
| 251 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_TXFIFO_WR_REQ); | ||
| 252 | if (unlikely(timeout)) | ||
| 253 | goto poll_timeout; | ||
| 254 | |||
| 255 | writel(buf[0], fifo_addr); | ||
| 256 | writel(buf[1], fifo_addr); | ||
| 257 | writel(buf[2], fifo_addr); | ||
| 258 | writel(buf[3], fifo_addr); | ||
| 259 | writel(buf[4], fifo_addr); | ||
| 260 | writel(buf[5], fifo_addr); | ||
| 261 | writel(buf[6], fifo_addr); | ||
| 262 | writel(buf[7], fifo_addr); | ||
| 263 | buf += 8; | ||
| 264 | --j; | ||
| 265 | } | ||
| 266 | if (unlikely(i)) { | ||
| 267 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_TXFIFO_WR_REQ); | ||
| 268 | if (unlikely(timeout)) | ||
| 269 | goto poll_timeout; | ||
| 270 | |||
| 271 | while (i) { | ||
| 272 | writel(*buf, fifo_addr); | ||
| 273 | ++buf; | ||
| 274 | --i; | ||
| 275 | } | ||
| 276 | } | ||
| 277 | data->bytes_xfered += miter->length; | ||
| 278 | } | ||
| 279 | sg_miter_stop(miter); | ||
| 280 | |||
| 281 | return false; | ||
| 282 | |||
| 283 | poll_timeout: | ||
| 284 | miter->consumed = (void *)buf - miter->addr; | ||
| 285 | data->bytes_xfered += miter->consumed; | ||
| 286 | sg_miter_stop(miter); | ||
| 287 | |||
| 288 | return true; | ||
| 289 | } | ||
| 290 | |||
| 291 | static bool jz4740_mmc_read_data(struct jz4740_mmc_host *host, | ||
| 292 | struct mmc_data *data) | ||
| 293 | { | ||
| 294 | struct sg_mapping_iter *miter = &host->miter; | ||
| 295 | void __iomem *fifo_addr = host->base + JZ_REG_MMC_RXFIFO; | ||
| 296 | uint32_t *buf; | ||
| 297 | uint32_t d; | ||
| 298 | uint16_t status; | ||
| 299 | size_t i, j; | ||
| 300 | unsigned int timeout; | ||
| 301 | |||
| 302 | while (sg_miter_next(miter)) { | ||
| 303 | buf = miter->addr; | ||
| 304 | i = miter->length; | ||
| 305 | j = i / 32; | ||
| 306 | i = i & 0x1f; | ||
| 307 | while (j) { | ||
| 308 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_RXFIFO_RD_REQ); | ||
| 309 | if (unlikely(timeout)) | ||
| 310 | goto poll_timeout; | ||
| 311 | |||
| 312 | buf[0] = readl(fifo_addr); | ||
| 313 | buf[1] = readl(fifo_addr); | ||
| 314 | buf[2] = readl(fifo_addr); | ||
| 315 | buf[3] = readl(fifo_addr); | ||
| 316 | buf[4] = readl(fifo_addr); | ||
| 317 | buf[5] = readl(fifo_addr); | ||
| 318 | buf[6] = readl(fifo_addr); | ||
| 319 | buf[7] = readl(fifo_addr); | ||
| 320 | |||
| 321 | buf += 8; | ||
| 322 | --j; | ||
| 323 | } | ||
| 324 | |||
| 325 | if (unlikely(i)) { | ||
| 326 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_RXFIFO_RD_REQ); | ||
| 327 | if (unlikely(timeout)) | ||
| 328 | goto poll_timeout; | ||
| 329 | |||
| 330 | while (i >= 4) { | ||
| 331 | *buf++ = readl(fifo_addr); | ||
| 332 | i -= 4; | ||
| 333 | } | ||
| 334 | if (unlikely(i > 0)) { | ||
| 335 | d = readl(fifo_addr); | ||
| 336 | memcpy(buf, &d, i); | ||
| 337 | } | ||
| 338 | } | ||
| 339 | data->bytes_xfered += miter->length; | ||
| 340 | |||
| 341 | /* This can go away once MIPS implements | ||
| 342 | * flush_kernel_dcache_page */ | ||
| 343 | flush_dcache_page(miter->page); | ||
| 344 | } | ||
| 345 | sg_miter_stop(miter); | ||
| 346 | |||
| 347 | /* For whatever reason there is sometime one word more in the fifo then | ||
| 348 | * requested */ | ||
| 349 | timeout = 1000; | ||
| 350 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 351 | while (!(status & JZ_MMC_STATUS_DATA_FIFO_EMPTY) && --timeout) { | ||
| 352 | d = readl(fifo_addr); | ||
| 353 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 354 | } | ||
| 355 | |||
| 356 | return false; | ||
| 357 | |||
| 358 | poll_timeout: | ||
| 359 | miter->consumed = (void *)buf - miter->addr; | ||
| 360 | data->bytes_xfered += miter->consumed; | ||
| 361 | sg_miter_stop(miter); | ||
| 362 | |||
| 363 | return true; | ||
| 364 | } | ||
| 365 | |||
| 366 | static void jz4740_mmc_timeout(unsigned long data) | ||
| 367 | { | ||
| 368 | struct jz4740_mmc_host *host = (struct jz4740_mmc_host *)data; | ||
| 369 | |||
| 370 | if (!test_and_clear_bit(0, &host->waiting)) | ||
| 371 | return; | ||
| 372 | |||
| 373 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); | ||
| 374 | |||
| 375 | host->req->cmd->error = -ETIMEDOUT; | ||
| 376 | jz4740_mmc_request_done(host); | ||
| 377 | } | ||
| 378 | |||
| 379 | static void jz4740_mmc_read_response(struct jz4740_mmc_host *host, | ||
| 380 | struct mmc_command *cmd) | ||
| 381 | { | ||
| 382 | int i; | ||
| 383 | uint16_t tmp; | ||
| 384 | void __iomem *fifo_addr = host->base + JZ_REG_MMC_RESP_FIFO; | ||
| 385 | |||
| 386 | if (cmd->flags & MMC_RSP_136) { | ||
| 387 | tmp = readw(fifo_addr); | ||
| 388 | for (i = 0; i < 4; ++i) { | ||
| 389 | cmd->resp[i] = tmp << 24; | ||
| 390 | tmp = readw(fifo_addr); | ||
| 391 | cmd->resp[i] |= tmp << 8; | ||
| 392 | tmp = readw(fifo_addr); | ||
| 393 | cmd->resp[i] |= tmp >> 8; | ||
| 394 | } | ||
| 395 | } else { | ||
| 396 | cmd->resp[0] = readw(fifo_addr) << 24; | ||
| 397 | cmd->resp[0] |= readw(fifo_addr) << 8; | ||
| 398 | cmd->resp[0] |= readw(fifo_addr) & 0xff; | ||
| 399 | } | ||
| 400 | } | ||
| 401 | |||
| 402 | static void jz4740_mmc_send_command(struct jz4740_mmc_host *host, | ||
| 403 | struct mmc_command *cmd) | ||
| 404 | { | ||
| 405 | uint32_t cmdat = host->cmdat; | ||
| 406 | |||
| 407 | host->cmdat &= ~JZ_MMC_CMDAT_INIT; | ||
| 408 | jz4740_mmc_clock_disable(host); | ||
| 409 | |||
| 410 | host->cmd = cmd; | ||
| 411 | |||
| 412 | if (cmd->flags & MMC_RSP_BUSY) | ||
| 413 | cmdat |= JZ_MMC_CMDAT_BUSY; | ||
| 414 | |||
| 415 | switch (mmc_resp_type(cmd)) { | ||
| 416 | case MMC_RSP_R1B: | ||
| 417 | case MMC_RSP_R1: | ||
| 418 | cmdat |= JZ_MMC_CMDAT_RSP_R1; | ||
| 419 | break; | ||
| 420 | case MMC_RSP_R2: | ||
| 421 | cmdat |= JZ_MMC_CMDAT_RSP_R2; | ||
| 422 | break; | ||
| 423 | case MMC_RSP_R3: | ||
| 424 | cmdat |= JZ_MMC_CMDAT_RSP_R3; | ||
| 425 | break; | ||
| 426 | default: | ||
| 427 | break; | ||
| 428 | } | ||
| 429 | |||
| 430 | if (cmd->data) { | ||
| 431 | cmdat |= JZ_MMC_CMDAT_DATA_EN; | ||
| 432 | if (cmd->data->flags & MMC_DATA_WRITE) | ||
| 433 | cmdat |= JZ_MMC_CMDAT_WRITE; | ||
| 434 | if (cmd->data->flags & MMC_DATA_STREAM) | ||
| 435 | cmdat |= JZ_MMC_CMDAT_STREAM; | ||
| 436 | |||
| 437 | writew(cmd->data->blksz, host->base + JZ_REG_MMC_BLKLEN); | ||
| 438 | writew(cmd->data->blocks, host->base + JZ_REG_MMC_NOB); | ||
| 439 | } | ||
| 440 | |||
| 441 | writeb(cmd->opcode, host->base + JZ_REG_MMC_CMD); | ||
| 442 | writel(cmd->arg, host->base + JZ_REG_MMC_ARG); | ||
| 443 | writel(cmdat, host->base + JZ_REG_MMC_CMDAT); | ||
| 444 | |||
| 445 | jz4740_mmc_clock_enable(host, 1); | ||
| 446 | } | ||
| 447 | |||
| 448 | static void jz_mmc_prepare_data_transfer(struct jz4740_mmc_host *host) | ||
| 449 | { | ||
| 450 | struct mmc_command *cmd = host->req->cmd; | ||
| 451 | struct mmc_data *data = cmd->data; | ||
| 452 | int direction; | ||
| 453 | |||
| 454 | if (data->flags & MMC_DATA_READ) | ||
| 455 | direction = SG_MITER_TO_SG; | ||
| 456 | else | ||
| 457 | direction = SG_MITER_FROM_SG; | ||
| 458 | |||
| 459 | sg_miter_start(&host->miter, data->sg, data->sg_len, direction); | ||
| 460 | } | ||
| 461 | |||
| 462 | |||
| 463 | static irqreturn_t jz_mmc_irq_worker(int irq, void *devid) | ||
| 464 | { | ||
| 465 | struct jz4740_mmc_host *host = (struct jz4740_mmc_host *)devid; | ||
| 466 | struct mmc_command *cmd = host->req->cmd; | ||
| 467 | struct mmc_request *req = host->req; | ||
| 468 | bool timeout = false; | ||
| 469 | |||
| 470 | if (cmd->error) | ||
| 471 | host->state = JZ4740_MMC_STATE_DONE; | ||
| 472 | |||
| 473 | switch (host->state) { | ||
| 474 | case JZ4740_MMC_STATE_READ_RESPONSE: | ||
| 475 | if (cmd->flags & MMC_RSP_PRESENT) | ||
| 476 | jz4740_mmc_read_response(host, cmd); | ||
| 477 | |||
| 478 | if (!cmd->data) | ||
| 479 | break; | ||
| 480 | |||
| 481 | jz_mmc_prepare_data_transfer(host); | ||
| 482 | |||
| 483 | case JZ4740_MMC_STATE_TRANSFER_DATA: | ||
| 484 | if (cmd->data->flags & MMC_DATA_READ) | ||
| 485 | timeout = jz4740_mmc_read_data(host, cmd->data); | ||
| 486 | else | ||
| 487 | timeout = jz4740_mmc_write_data(host, cmd->data); | ||
| 488 | |||
| 489 | if (unlikely(timeout)) { | ||
| 490 | host->state = JZ4740_MMC_STATE_TRANSFER_DATA; | ||
| 491 | break; | ||
| 492 | } | ||
| 493 | |||
| 494 | jz4740_mmc_transfer_check_state(host, cmd->data); | ||
| 495 | |||
| 496 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_DATA_TRAN_DONE); | ||
| 497 | if (unlikely(timeout)) { | ||
| 498 | host->state = JZ4740_MMC_STATE_SEND_STOP; | ||
| 499 | break; | ||
| 500 | } | ||
| 501 | writew(JZ_MMC_IRQ_DATA_TRAN_DONE, host->base + JZ_REG_MMC_IREG); | ||
| 502 | |||
| 503 | case JZ4740_MMC_STATE_SEND_STOP: | ||
| 504 | if (!req->stop) | ||
| 505 | break; | ||
| 506 | |||
| 507 | jz4740_mmc_send_command(host, req->stop); | ||
| 508 | |||
| 509 | timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_PRG_DONE); | ||
| 510 | if (timeout) { | ||
| 511 | host->state = JZ4740_MMC_STATE_DONE; | ||
| 512 | break; | ||
| 513 | } | ||
| 514 | case JZ4740_MMC_STATE_DONE: | ||
| 515 | break; | ||
| 516 | } | ||
| 517 | |||
| 518 | if (!timeout) | ||
| 519 | jz4740_mmc_request_done(host); | ||
| 520 | |||
| 521 | return IRQ_HANDLED; | ||
| 522 | } | ||
| 523 | |||
| 524 | static irqreturn_t jz_mmc_irq(int irq, void *devid) | ||
| 525 | { | ||
| 526 | struct jz4740_mmc_host *host = devid; | ||
| 527 | struct mmc_command *cmd = host->cmd; | ||
| 528 | uint16_t irq_reg, status, tmp; | ||
| 529 | |||
| 530 | irq_reg = readw(host->base + JZ_REG_MMC_IREG); | ||
| 531 | |||
| 532 | tmp = irq_reg; | ||
| 533 | irq_reg &= ~host->irq_mask; | ||
| 534 | |||
| 535 | tmp &= ~(JZ_MMC_IRQ_TXFIFO_WR_REQ | JZ_MMC_IRQ_RXFIFO_RD_REQ | | ||
| 536 | JZ_MMC_IRQ_PRG_DONE | JZ_MMC_IRQ_DATA_TRAN_DONE); | ||
| 537 | |||
| 538 | if (tmp != irq_reg) | ||
| 539 | writew(tmp & ~irq_reg, host->base + JZ_REG_MMC_IREG); | ||
| 540 | |||
| 541 | if (irq_reg & JZ_MMC_IRQ_SDIO) { | ||
| 542 | writew(JZ_MMC_IRQ_SDIO, host->base + JZ_REG_MMC_IREG); | ||
| 543 | mmc_signal_sdio_irq(host->mmc); | ||
| 544 | irq_reg &= ~JZ_MMC_IRQ_SDIO; | ||
| 545 | } | ||
| 546 | |||
| 547 | if (host->req && cmd && irq_reg) { | ||
| 548 | if (test_and_clear_bit(0, &host->waiting)) { | ||
| 549 | del_timer(&host->timeout_timer); | ||
| 550 | |||
| 551 | status = readl(host->base + JZ_REG_MMC_STATUS); | ||
| 552 | |||
| 553 | if (status & JZ_MMC_STATUS_TIMEOUT_RES) { | ||
| 554 | cmd->error = -ETIMEDOUT; | ||
| 555 | } else if (status & JZ_MMC_STATUS_CRC_RES_ERR) { | ||
| 556 | cmd->error = -EIO; | ||
| 557 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | ||
| 558 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | ||
| 559 | if (cmd->data) | ||
| 560 | cmd->data->error = -EIO; | ||
| 561 | cmd->error = -EIO; | ||
| 562 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | ||
| 563 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | ||
| 564 | if (cmd->data) | ||
| 565 | cmd->data->error = -EIO; | ||
| 566 | cmd->error = -EIO; | ||
| 567 | } | ||
| 568 | |||
| 569 | jz4740_mmc_set_irq_enabled(host, irq_reg, false); | ||
| 570 | writew(irq_reg, host->base + JZ_REG_MMC_IREG); | ||
| 571 | |||
| 572 | return IRQ_WAKE_THREAD; | ||
| 573 | } | ||
| 574 | } | ||
| 575 | |||
| 576 | return IRQ_HANDLED; | ||
| 577 | } | ||
| 578 | |||
| 579 | static int jz4740_mmc_set_clock_rate(struct jz4740_mmc_host *host, int rate) | ||
| 580 | { | ||
| 581 | int div = 0; | ||
| 582 | int real_rate; | ||
| 583 | |||
| 584 | jz4740_mmc_clock_disable(host); | ||
| 585 | clk_set_rate(host->clk, JZ_MMC_CLK_RATE); | ||
| 586 | |||
| 587 | real_rate = clk_get_rate(host->clk); | ||
| 588 | |||
| 589 | while (real_rate > rate && div < 7) { | ||
| 590 | ++div; | ||
| 591 | real_rate >>= 1; | ||
| 592 | } | ||
| 593 | |||
| 594 | writew(div, host->base + JZ_REG_MMC_CLKRT); | ||
| 595 | return real_rate; | ||
| 596 | } | ||
| 597 | |||
| 598 | static void jz4740_mmc_request(struct mmc_host *mmc, struct mmc_request *req) | ||
| 599 | { | ||
| 600 | struct jz4740_mmc_host *host = mmc_priv(mmc); | ||
| 601 | |||
| 602 | host->req = req; | ||
| 603 | |||
| 604 | writew(0xffff, host->base + JZ_REG_MMC_IREG); | ||
| 605 | |||
| 606 | writew(JZ_MMC_IRQ_END_CMD_RES, host->base + JZ_REG_MMC_IREG); | ||
| 607 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, true); | ||
| 608 | |||
| 609 | host->state = JZ4740_MMC_STATE_READ_RESPONSE; | ||
| 610 | set_bit(0, &host->waiting); | ||
| 611 | mod_timer(&host->timeout_timer, jiffies + 5*HZ); | ||
| 612 | jz4740_mmc_send_command(host, req->cmd); | ||
| 613 | } | ||
| 614 | |||
| 615 | static void jz4740_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | ||
| 616 | { | ||
| 617 | struct jz4740_mmc_host *host = mmc_priv(mmc); | ||
| 618 | if (ios->clock) | ||
| 619 | jz4740_mmc_set_clock_rate(host, ios->clock); | ||
| 620 | |||
| 621 | switch (ios->power_mode) { | ||
| 622 | case MMC_POWER_UP: | ||
| 623 | jz4740_mmc_reset(host); | ||
| 624 | if (gpio_is_valid(host->pdata->gpio_power)) | ||
| 625 | gpio_set_value(host->pdata->gpio_power, | ||
| 626 | !host->pdata->power_active_low); | ||
| 627 | host->cmdat |= JZ_MMC_CMDAT_INIT; | ||
| 628 | clk_enable(host->clk); | ||
| 629 | break; | ||
| 630 | case MMC_POWER_ON: | ||
| 631 | break; | ||
| 632 | default: | ||
| 633 | if (gpio_is_valid(host->pdata->gpio_power)) | ||
| 634 | gpio_set_value(host->pdata->gpio_power, | ||
| 635 | host->pdata->power_active_low); | ||
| 636 | clk_disable(host->clk); | ||
| 637 | break; | ||
| 638 | } | ||
| 639 | |||
| 640 | switch (ios->bus_width) { | ||
| 641 | case MMC_BUS_WIDTH_1: | ||
| 642 | host->cmdat &= ~JZ_MMC_CMDAT_BUS_WIDTH_4BIT; | ||
| 643 | break; | ||
| 644 | case MMC_BUS_WIDTH_4: | ||
| 645 | host->cmdat |= JZ_MMC_CMDAT_BUS_WIDTH_4BIT; | ||
| 646 | break; | ||
| 647 | default: | ||
| 648 | break; | ||
| 649 | } | ||
| 650 | } | ||
| 651 | |||
| 652 | static int jz4740_mmc_get_ro(struct mmc_host *mmc) | ||
| 653 | { | ||
| 654 | struct jz4740_mmc_host *host = mmc_priv(mmc); | ||
| 655 | if (!gpio_is_valid(host->pdata->gpio_read_only)) | ||
| 656 | return -ENOSYS; | ||
| 657 | |||
| 658 | return gpio_get_value(host->pdata->gpio_read_only) ^ | ||
| 659 | host->pdata->read_only_active_low; | ||
| 660 | } | ||
| 661 | |||
| 662 | static int jz4740_mmc_get_cd(struct mmc_host *mmc) | ||
| 663 | { | ||
| 664 | struct jz4740_mmc_host *host = mmc_priv(mmc); | ||
| 665 | if (!gpio_is_valid(host->pdata->gpio_card_detect)) | ||
| 666 | return -ENOSYS; | ||
| 667 | |||
| 668 | return gpio_get_value(host->pdata->gpio_card_detect) ^ | ||
| 669 | host->pdata->card_detect_active_low; | ||
| 670 | } | ||
| 671 | |||
| 672 | static irqreturn_t jz4740_mmc_card_detect_irq(int irq, void *devid) | ||
| 673 | { | ||
| 674 | struct jz4740_mmc_host *host = devid; | ||
| 675 | |||
| 676 | mmc_detect_change(host->mmc, HZ / 2); | ||
| 677 | |||
| 678 | return IRQ_HANDLED; | ||
| 679 | } | ||
| 680 | |||
| 681 | static void jz4740_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) | ||
| 682 | { | ||
| 683 | struct jz4740_mmc_host *host = mmc_priv(mmc); | ||
| 684 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_SDIO, enable); | ||
| 685 | } | ||
| 686 | |||
| 687 | static const struct mmc_host_ops jz4740_mmc_ops = { | ||
| 688 | .request = jz4740_mmc_request, | ||
| 689 | .set_ios = jz4740_mmc_set_ios, | ||
| 690 | .get_ro = jz4740_mmc_get_ro, | ||
| 691 | .get_cd = jz4740_mmc_get_cd, | ||
| 692 | .enable_sdio_irq = jz4740_mmc_enable_sdio_irq, | ||
| 693 | }; | ||
| 694 | |||
| 695 | static const struct jz_gpio_bulk_request jz4740_mmc_pins[] = { | ||
| 696 | JZ_GPIO_BULK_PIN(MSC_CMD), | ||
| 697 | JZ_GPIO_BULK_PIN(MSC_CLK), | ||
| 698 | JZ_GPIO_BULK_PIN(MSC_DATA0), | ||
| 699 | JZ_GPIO_BULK_PIN(MSC_DATA1), | ||
| 700 | JZ_GPIO_BULK_PIN(MSC_DATA2), | ||
| 701 | JZ_GPIO_BULK_PIN(MSC_DATA3), | ||
| 702 | }; | ||
| 703 | |||
| 704 | static int __devinit jz4740_mmc_request_gpio(struct device *dev, int gpio, | ||
| 705 | const char *name, bool output, int value) | ||
| 706 | { | ||
| 707 | int ret; | ||
| 708 | |||
| 709 | if (!gpio_is_valid(gpio)) | ||
| 710 | return 0; | ||
| 711 | |||
| 712 | ret = gpio_request(gpio, name); | ||
| 713 | if (ret) { | ||
| 714 | dev_err(dev, "Failed to request %s gpio: %d\n", name, ret); | ||
| 715 | return ret; | ||
| 716 | } | ||
| 717 | |||
| 718 | if (output) | ||
| 719 | gpio_direction_output(gpio, value); | ||
| 720 | else | ||
| 721 | gpio_direction_input(gpio); | ||
| 722 | |||
| 723 | return 0; | ||
| 724 | } | ||
| 725 | |||
| 726 | static int __devinit jz4740_mmc_request_gpios(struct platform_device *pdev) | ||
| 727 | { | ||
| 728 | int ret; | ||
| 729 | struct jz4740_mmc_platform_data *pdata = pdev->dev.platform_data; | ||
| 730 | |||
| 731 | if (!pdata) | ||
| 732 | return 0; | ||
| 733 | |||
| 734 | ret = jz4740_mmc_request_gpio(&pdev->dev, pdata->gpio_card_detect, | ||
| 735 | "MMC detect change", false, 0); | ||
| 736 | if (ret) | ||
| 737 | goto err; | ||
| 738 | |||
| 739 | ret = jz4740_mmc_request_gpio(&pdev->dev, pdata->gpio_read_only, | ||
| 740 | "MMC read only", false, 0); | ||
| 741 | if (ret) | ||
| 742 | goto err_free_gpio_card_detect; | ||
| 743 | |||
| 744 | ret = jz4740_mmc_request_gpio(&pdev->dev, pdata->gpio_power, | ||
| 745 | "MMC read only", true, pdata->power_active_low); | ||
| 746 | if (ret) | ||
| 747 | goto err_free_gpio_read_only; | ||
| 748 | |||
| 749 | return 0; | ||
| 750 | |||
| 751 | err_free_gpio_read_only: | ||
| 752 | if (gpio_is_valid(pdata->gpio_read_only)) | ||
| 753 | gpio_free(pdata->gpio_read_only); | ||
| 754 | err_free_gpio_card_detect: | ||
| 755 | if (gpio_is_valid(pdata->gpio_card_detect)) | ||
| 756 | gpio_free(pdata->gpio_card_detect); | ||
| 757 | err: | ||
| 758 | return ret; | ||
| 759 | } | ||
| 760 | |||
| 761 | static int __devinit jz4740_mmc_request_cd_irq(struct platform_device *pdev, | ||
| 762 | struct jz4740_mmc_host *host) | ||
| 763 | { | ||
| 764 | struct jz4740_mmc_platform_data *pdata = pdev->dev.platform_data; | ||
| 765 | |||
| 766 | if (!gpio_is_valid(pdata->gpio_card_detect)) | ||
| 767 | return 0; | ||
| 768 | |||
| 769 | host->card_detect_irq = gpio_to_irq(pdata->gpio_card_detect); | ||
| 770 | if (host->card_detect_irq < 0) { | ||
| 771 | dev_warn(&pdev->dev, "Failed to get card detect irq\n"); | ||
| 772 | return 0; | ||
| 773 | } | ||
| 774 | |||
| 775 | return request_irq(host->card_detect_irq, jz4740_mmc_card_detect_irq, | ||
| 776 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, | ||
| 777 | "MMC card detect", host); | ||
| 778 | } | ||
| 779 | |||
| 780 | static void jz4740_mmc_free_gpios(struct platform_device *pdev) | ||
| 781 | { | ||
| 782 | struct jz4740_mmc_platform_data *pdata = pdev->dev.platform_data; | ||
| 783 | |||
| 784 | if (!pdata) | ||
| 785 | return; | ||
| 786 | |||
| 787 | if (gpio_is_valid(pdata->gpio_power)) | ||
| 788 | gpio_free(pdata->gpio_power); | ||
| 789 | if (gpio_is_valid(pdata->gpio_read_only)) | ||
| 790 | gpio_free(pdata->gpio_read_only); | ||
| 791 | if (gpio_is_valid(pdata->gpio_card_detect)) | ||
| 792 | gpio_free(pdata->gpio_card_detect); | ||
| 793 | } | ||
| 794 | |||
| 795 | static inline size_t jz4740_mmc_num_pins(struct jz4740_mmc_host *host) | ||
| 796 | { | ||
| 797 | size_t num_pins = ARRAY_SIZE(jz4740_mmc_pins); | ||
| 798 | if (host->pdata && host->pdata->data_1bit) | ||
| 799 | num_pins -= 3; | ||
| 800 | |||
| 801 | return num_pins; | ||
| 802 | } | ||
| 803 | |||
| 804 | static int __devinit jz4740_mmc_probe(struct platform_device* pdev) | ||
| 805 | { | ||
| 806 | int ret; | ||
| 807 | struct mmc_host *mmc; | ||
| 808 | struct jz4740_mmc_host *host; | ||
| 809 | struct jz4740_mmc_platform_data *pdata; | ||
| 810 | |||
| 811 | pdata = pdev->dev.platform_data; | ||
| 812 | |||
| 813 | mmc = mmc_alloc_host(sizeof(struct jz4740_mmc_host), &pdev->dev); | ||
| 814 | if (!mmc) { | ||
| 815 | dev_err(&pdev->dev, "Failed to alloc mmc host structure\n"); | ||
| 816 | return -ENOMEM; | ||
| 817 | } | ||
| 818 | |||
| 819 | host = mmc_priv(mmc); | ||
| 820 | host->pdata = pdata; | ||
| 821 | |||
| 822 | host->irq = platform_get_irq(pdev, 0); | ||
| 823 | if (host->irq < 0) { | ||
| 824 | ret = host->irq; | ||
| 825 | dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret); | ||
| 826 | goto err_free_host; | ||
| 827 | } | ||
| 828 | |||
| 829 | host->clk = clk_get(&pdev->dev, "mmc"); | ||
| 830 | if (!host->clk) { | ||
| 831 | ret = -ENOENT; | ||
| 832 | dev_err(&pdev->dev, "Failed to get mmc clock\n"); | ||
| 833 | goto err_free_host; | ||
| 834 | } | ||
| 835 | |||
| 836 | host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 837 | if (!host->mem) { | ||
| 838 | ret = -ENOENT; | ||
| 839 | dev_err(&pdev->dev, "Failed to get base platform memory\n"); | ||
| 840 | goto err_clk_put; | ||
| 841 | } | ||
| 842 | |||
| 843 | host->mem = request_mem_region(host->mem->start, | ||
| 844 | resource_size(host->mem), pdev->name); | ||
| 845 | if (!host->mem) { | ||
| 846 | ret = -EBUSY; | ||
| 847 | dev_err(&pdev->dev, "Failed to request base memory region\n"); | ||
| 848 | goto err_clk_put; | ||
| 849 | } | ||
| 850 | |||
| 851 | host->base = ioremap_nocache(host->mem->start, resource_size(host->mem)); | ||
| 852 | if (!host->base) { | ||
| 853 | ret = -EBUSY; | ||
| 854 | dev_err(&pdev->dev, "Failed to ioremap base memory\n"); | ||
| 855 | goto err_release_mem_region; | ||
| 856 | } | ||
| 857 | |||
| 858 | ret = jz_gpio_bulk_request(jz4740_mmc_pins, jz4740_mmc_num_pins(host)); | ||
| 859 | if (ret) { | ||
| 860 | dev_err(&pdev->dev, "Failed to request mmc pins: %d\n", ret); | ||
| 861 | goto err_iounmap; | ||
| 862 | } | ||
| 863 | |||
| 864 | ret = jz4740_mmc_request_gpios(pdev); | ||
| 865 | if (ret) | ||
| 866 | goto err_gpio_bulk_free; | ||
| 867 | |||
| 868 | mmc->ops = &jz4740_mmc_ops; | ||
| 869 | mmc->f_min = JZ_MMC_CLK_RATE / 128; | ||
| 870 | mmc->f_max = JZ_MMC_CLK_RATE; | ||
| 871 | mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; | ||
| 872 | mmc->caps = (pdata && pdata->data_1bit) ? 0 : MMC_CAP_4_BIT_DATA; | ||
| 873 | mmc->caps |= MMC_CAP_SDIO_IRQ; | ||
| 874 | |||
| 875 | mmc->max_blk_size = (1 << 10) - 1; | ||
| 876 | mmc->max_blk_count = (1 << 15) - 1; | ||
| 877 | mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; | ||
| 878 | |||
| 879 | mmc->max_phys_segs = 128; | ||
| 880 | mmc->max_hw_segs = 128; | ||
| 881 | mmc->max_seg_size = mmc->max_req_size; | ||
| 882 | |||
| 883 | host->mmc = mmc; | ||
| 884 | host->pdev = pdev; | ||
| 885 | spin_lock_init(&host->lock); | ||
| 886 | host->irq_mask = 0xffff; | ||
| 887 | |||
| 888 | ret = jz4740_mmc_request_cd_irq(pdev, host); | ||
| 889 | if (ret) { | ||
| 890 | dev_err(&pdev->dev, "Failed to request card detect irq\n"); | ||
| 891 | goto err_free_gpios; | ||
| 892 | } | ||
| 893 | |||
| 894 | ret = request_threaded_irq(host->irq, jz_mmc_irq, jz_mmc_irq_worker, 0, | ||
| 895 | dev_name(&pdev->dev), host); | ||
| 896 | if (ret) { | ||
| 897 | dev_err(&pdev->dev, "Failed to request irq: %d\n", ret); | ||
| 898 | goto err_free_card_detect_irq; | ||
| 899 | } | ||
| 900 | |||
| 901 | jz4740_mmc_reset(host); | ||
| 902 | jz4740_mmc_clock_disable(host); | ||
| 903 | setup_timer(&host->timeout_timer, jz4740_mmc_timeout, | ||
| 904 | (unsigned long)host); | ||
| 905 | /* It is not important when it times out, it just needs to timeout. */ | ||
| 906 | set_timer_slack(&host->timeout_timer, HZ); | ||
| 907 | |||
| 908 | platform_set_drvdata(pdev, host); | ||
| 909 | ret = mmc_add_host(mmc); | ||
| 910 | |||
| 911 | if (ret) { | ||
| 912 | dev_err(&pdev->dev, "Failed to add mmc host: %d\n", ret); | ||
| 913 | goto err_free_irq; | ||
| 914 | } | ||
| 915 | dev_info(&pdev->dev, "JZ SD/MMC card driver registered\n"); | ||
| 916 | |||
| 917 | return 0; | ||
| 918 | |||
| 919 | err_free_irq: | ||
| 920 | free_irq(host->irq, host); | ||
| 921 | err_free_card_detect_irq: | ||
| 922 | if (host->card_detect_irq >= 0) | ||
| 923 | free_irq(host->card_detect_irq, host); | ||
| 924 | err_free_gpios: | ||
| 925 | jz4740_mmc_free_gpios(pdev); | ||
| 926 | err_gpio_bulk_free: | ||
| 927 | jz_gpio_bulk_free(jz4740_mmc_pins, jz4740_mmc_num_pins(host)); | ||
| 928 | err_iounmap: | ||
| 929 | iounmap(host->base); | ||
| 930 | err_release_mem_region: | ||
| 931 | release_mem_region(host->mem->start, resource_size(host->mem)); | ||
| 932 | err_clk_put: | ||
| 933 | clk_put(host->clk); | ||
| 934 | err_free_host: | ||
| 935 | platform_set_drvdata(pdev, NULL); | ||
| 936 | mmc_free_host(mmc); | ||
| 937 | |||
| 938 | return ret; | ||
| 939 | } | ||
| 940 | |||
| 941 | static int __devexit jz4740_mmc_remove(struct platform_device *pdev) | ||
| 942 | { | ||
| 943 | struct jz4740_mmc_host *host = platform_get_drvdata(pdev); | ||
| 944 | |||
| 945 | del_timer_sync(&host->timeout_timer); | ||
| 946 | jz4740_mmc_set_irq_enabled(host, 0xff, false); | ||
| 947 | jz4740_mmc_reset(host); | ||
| 948 | |||
| 949 | mmc_remove_host(host->mmc); | ||
| 950 | |||
| 951 | free_irq(host->irq, host); | ||
| 952 | if (host->card_detect_irq >= 0) | ||
| 953 | free_irq(host->card_detect_irq, host); | ||
| 954 | |||
| 955 | jz4740_mmc_free_gpios(pdev); | ||
| 956 | jz_gpio_bulk_free(jz4740_mmc_pins, jz4740_mmc_num_pins(host)); | ||
| 957 | |||
| 958 | iounmap(host->base); | ||
| 959 | release_mem_region(host->mem->start, resource_size(host->mem)); | ||
| 960 | |||
| 961 | clk_put(host->clk); | ||
| 962 | |||
| 963 | platform_set_drvdata(pdev, NULL); | ||
| 964 | mmc_free_host(host->mmc); | ||
| 965 | |||
| 966 | return 0; | ||
| 967 | } | ||
| 968 | |||
| 969 | #ifdef CONFIG_PM | ||
| 970 | |||
| 971 | static int jz4740_mmc_suspend(struct device *dev) | ||
| 972 | { | ||
| 973 | struct jz4740_mmc_host *host = dev_get_drvdata(dev); | ||
| 974 | |||
| 975 | mmc_suspend_host(host->mmc); | ||
| 976 | |||
| 977 | jz_gpio_bulk_suspend(jz4740_mmc_pins, jz4740_mmc_num_pins(host)); | ||
| 978 | |||
| 979 | return 0; | ||
| 980 | } | ||
| 981 | |||
| 982 | static int jz4740_mmc_resume(struct device *dev) | ||
| 983 | { | ||
| 984 | struct jz4740_mmc_host *host = dev_get_drvdata(dev); | ||
| 985 | |||
| 986 | jz_gpio_bulk_resume(jz4740_mmc_pins, jz4740_mmc_num_pins(host)); | ||
| 987 | |||
| 988 | mmc_resume_host(host->mmc); | ||
| 989 | |||
| 990 | return 0; | ||
| 991 | } | ||
| 992 | |||
| 993 | const struct dev_pm_ops jz4740_mmc_pm_ops = { | ||
| 994 | .suspend = jz4740_mmc_suspend, | ||
| 995 | .resume = jz4740_mmc_resume, | ||
| 996 | .poweroff = jz4740_mmc_suspend, | ||
| 997 | .restore = jz4740_mmc_resume, | ||
| 998 | }; | ||
| 999 | |||
| 1000 | #define JZ4740_MMC_PM_OPS (&jz4740_mmc_pm_ops) | ||
| 1001 | #else | ||
| 1002 | #define JZ4740_MMC_PM_OPS NULL | ||
| 1003 | #endif | ||
| 1004 | |||
| 1005 | static struct platform_driver jz4740_mmc_driver = { | ||
| 1006 | .probe = jz4740_mmc_probe, | ||
| 1007 | .remove = __devexit_p(jz4740_mmc_remove), | ||
| 1008 | .driver = { | ||
| 1009 | .name = "jz4740-mmc", | ||
| 1010 | .owner = THIS_MODULE, | ||
| 1011 | .pm = JZ4740_MMC_PM_OPS, | ||
| 1012 | }, | ||
| 1013 | }; | ||
| 1014 | |||
| 1015 | static int __init jz4740_mmc_init(void) | ||
| 1016 | { | ||
| 1017 | return platform_driver_register(&jz4740_mmc_driver); | ||
| 1018 | } | ||
| 1019 | module_init(jz4740_mmc_init); | ||
| 1020 | |||
| 1021 | static void __exit jz4740_mmc_exit(void) | ||
| 1022 | { | ||
| 1023 | platform_driver_unregister(&jz4740_mmc_driver); | ||
| 1024 | } | ||
| 1025 | module_exit(jz4740_mmc_exit); | ||
| 1026 | |||
| 1027 | MODULE_DESCRIPTION("JZ4740 SD/MMC controller driver"); | ||
| 1028 | MODULE_LICENSE("GPL"); | ||
| 1029 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index f22bc9f05ddb..6629d09f3b38 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
| @@ -321,7 +321,7 @@ config MTD_CFI_FLAGADM | |||
| 321 | 321 | ||
| 322 | config MTD_REDWOOD | 322 | config MTD_REDWOOD |
| 323 | tristate "CFI Flash devices mapped on IBM Redwood" | 323 | tristate "CFI Flash devices mapped on IBM Redwood" |
| 324 | depends on MTD_CFI && ( REDWOOD_4 || REDWOOD_5 || REDWOOD_6 ) | 324 | depends on MTD_CFI |
| 325 | help | 325 | help |
| 326 | This enables access routines for the flash chips on the IBM | 326 | This enables access routines for the flash chips on the IBM |
| 327 | Redwood board. If you have one of these boards and would like to | 327 | Redwood board. If you have one of these boards and would like to |
diff --git a/drivers/mtd/maps/redwood.c b/drivers/mtd/maps/redwood.c index 933c0b63b016..d2c9db00db0c 100644 --- a/drivers/mtd/maps/redwood.c +++ b/drivers/mtd/maps/redwood.c | |||
| @@ -22,8 +22,6 @@ | |||
| 22 | 22 | ||
| 23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
| 24 | 24 | ||
| 25 | #if !defined (CONFIG_REDWOOD_6) | ||
| 26 | |||
| 27 | #define WINDOW_ADDR 0xffc00000 | 25 | #define WINDOW_ADDR 0xffc00000 |
| 28 | #define WINDOW_SIZE 0x00400000 | 26 | #define WINDOW_SIZE 0x00400000 |
| 29 | 27 | ||
| @@ -69,47 +67,6 @@ static struct mtd_partition redwood_flash_partitions[] = { | |||
| 69 | } | 67 | } |
| 70 | }; | 68 | }; |
| 71 | 69 | ||
| 72 | #else /* CONFIG_REDWOOD_6 */ | ||
| 73 | /* FIXME: the window is bigger - armin */ | ||
| 74 | #define WINDOW_ADDR 0xff800000 | ||
| 75 | #define WINDOW_SIZE 0x00800000 | ||
| 76 | |||
| 77 | #define RW_PART0_OF 0 | ||
| 78 | #define RW_PART0_SZ 0x400000 /* 4 MiB data */ | ||
| 79 | #define RW_PART1_OF RW_PART0_OF + RW_PART0_SZ | ||
| 80 | #define RW_PART1_SZ 0x10000 /* 64K VPD */ | ||
| 81 | #define RW_PART2_OF RW_PART1_OF + RW_PART1_SZ | ||
| 82 | #define RW_PART2_SZ 0x400000 - (0x10000 + 0x20000) | ||
| 83 | #define RW_PART3_OF RW_PART2_OF + RW_PART2_SZ | ||
| 84 | #define RW_PART3_SZ 0x20000 | ||
| 85 | |||
| 86 | static struct mtd_partition redwood_flash_partitions[] = { | ||
| 87 | { | ||
| 88 | .name = "Redwood filesystem", | ||
| 89 | .offset = RW_PART0_OF, | ||
| 90 | .size = RW_PART0_SZ | ||
| 91 | }, | ||
| 92 | { | ||
| 93 | .name = "Redwood OpenBIOS Vital Product Data", | ||
| 94 | .offset = RW_PART1_OF, | ||
| 95 | .size = RW_PART1_SZ, | ||
| 96 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
| 97 | }, | ||
| 98 | { | ||
| 99 | .name = "Redwood kernel", | ||
| 100 | .offset = RW_PART2_OF, | ||
| 101 | .size = RW_PART2_SZ | ||
| 102 | }, | ||
| 103 | { | ||
| 104 | .name = "Redwood OpenBIOS", | ||
| 105 | .offset = RW_PART3_OF, | ||
| 106 | .size = RW_PART3_SZ, | ||
| 107 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
| 108 | } | ||
| 109 | }; | ||
| 110 | |||
| 111 | #endif /* CONFIG_REDWOOD_6 */ | ||
| 112 | |||
| 113 | struct map_info redwood_flash_map = { | 70 | struct map_info redwood_flash_map = { |
| 114 | .name = "IBM Redwood", | 71 | .name = "IBM Redwood", |
| 115 | .size = WINDOW_SIZE, | 72 | .size = WINDOW_SIZE, |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index ffc3720929f1..362d177efe1b 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
| @@ -526,4 +526,10 @@ config MTD_NAND_NUC900 | |||
| 526 | This enables the driver for the NAND Flash on evaluation board based | 526 | This enables the driver for the NAND Flash on evaluation board based |
| 527 | on w90p910 / NUC9xx. | 527 | on w90p910 / NUC9xx. |
| 528 | 528 | ||
| 529 | config MTD_NAND_JZ4740 | ||
| 530 | tristate "Support for JZ4740 SoC NAND controller" | ||
| 531 | depends on MACH_JZ4740 | ||
| 532 | help | ||
| 533 | Enables support for NAND Flash on JZ4740 SoC based boards. | ||
| 534 | |||
| 529 | endif # MTD_NAND | 535 | endif # MTD_NAND |
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index e8ab884ba47b..ac83dcdac5d6 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile | |||
| @@ -46,5 +46,6 @@ obj-$(CONFIG_MTD_NAND_NOMADIK) += nomadik_nand.o | |||
| 46 | obj-$(CONFIG_MTD_NAND_BCM_UMI) += bcm_umi_nand.o nand_bcm_umi.o | 46 | obj-$(CONFIG_MTD_NAND_BCM_UMI) += bcm_umi_nand.o nand_bcm_umi.o |
| 47 | obj-$(CONFIG_MTD_NAND_MPC5121_NFC) += mpc5121_nfc.o | 47 | obj-$(CONFIG_MTD_NAND_MPC5121_NFC) += mpc5121_nfc.o |
| 48 | obj-$(CONFIG_MTD_NAND_RICOH) += r852.o | 48 | obj-$(CONFIG_MTD_NAND_RICOH) += r852.o |
| 49 | obj-$(CONFIG_MTD_NAND_JZ4740) += jz4740_nand.o | ||
| 49 | 50 | ||
| 50 | nand-objs := nand_base.o nand_bbt.o | 51 | nand-objs := nand_base.o nand_bbt.o |
diff --git a/drivers/mtd/nand/jz4740_nand.c b/drivers/mtd/nand/jz4740_nand.c new file mode 100644 index 000000000000..67343fc31bd5 --- /dev/null +++ b/drivers/mtd/nand/jz4740_nand.c | |||
| @@ -0,0 +1,516 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC NAND controller driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/ioport.h> | ||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | #include <linux/platform_device.h> | ||
| 20 | #include <linux/slab.h> | ||
| 21 | |||
| 22 | #include <linux/mtd/mtd.h> | ||
| 23 | #include <linux/mtd/nand.h> | ||
| 24 | #include <linux/mtd/partitions.h> | ||
| 25 | |||
| 26 | #include <linux/gpio.h> | ||
| 27 | |||
| 28 | #include <asm/mach-jz4740/jz4740_nand.h> | ||
| 29 | |||
| 30 | #define JZ_REG_NAND_CTRL 0x50 | ||
| 31 | #define JZ_REG_NAND_ECC_CTRL 0x100 | ||
| 32 | #define JZ_REG_NAND_DATA 0x104 | ||
| 33 | #define JZ_REG_NAND_PAR0 0x108 | ||
| 34 | #define JZ_REG_NAND_PAR1 0x10C | ||
| 35 | #define JZ_REG_NAND_PAR2 0x110 | ||
| 36 | #define JZ_REG_NAND_IRQ_STAT 0x114 | ||
| 37 | #define JZ_REG_NAND_IRQ_CTRL 0x118 | ||
| 38 | #define JZ_REG_NAND_ERR(x) (0x11C + ((x) << 2)) | ||
| 39 | |||
| 40 | #define JZ_NAND_ECC_CTRL_PAR_READY BIT(4) | ||
| 41 | #define JZ_NAND_ECC_CTRL_ENCODING BIT(3) | ||
| 42 | #define JZ_NAND_ECC_CTRL_RS BIT(2) | ||
| 43 | #define JZ_NAND_ECC_CTRL_RESET BIT(1) | ||
| 44 | #define JZ_NAND_ECC_CTRL_ENABLE BIT(0) | ||
| 45 | |||
| 46 | #define JZ_NAND_STATUS_ERR_COUNT (BIT(31) | BIT(30) | BIT(29)) | ||
| 47 | #define JZ_NAND_STATUS_PAD_FINISH BIT(4) | ||
| 48 | #define JZ_NAND_STATUS_DEC_FINISH BIT(3) | ||
| 49 | #define JZ_NAND_STATUS_ENC_FINISH BIT(2) | ||
| 50 | #define JZ_NAND_STATUS_UNCOR_ERROR BIT(1) | ||
| 51 | #define JZ_NAND_STATUS_ERROR BIT(0) | ||
| 52 | |||
| 53 | #define JZ_NAND_CTRL_ENABLE_CHIP(x) BIT((x) << 1) | ||
| 54 | #define JZ_NAND_CTRL_ASSERT_CHIP(x) BIT(((x) << 1) + 1) | ||
| 55 | |||
| 56 | #define JZ_NAND_MEM_ADDR_OFFSET 0x10000 | ||
| 57 | #define JZ_NAND_MEM_CMD_OFFSET 0x08000 | ||
| 58 | |||
| 59 | struct jz_nand { | ||
| 60 | struct mtd_info mtd; | ||
| 61 | struct nand_chip chip; | ||
| 62 | void __iomem *base; | ||
| 63 | struct resource *mem; | ||
| 64 | |||
| 65 | void __iomem *bank_base; | ||
| 66 | struct resource *bank_mem; | ||
| 67 | |||
| 68 | struct jz_nand_platform_data *pdata; | ||
| 69 | bool is_reading; | ||
| 70 | }; | ||
| 71 | |||
| 72 | static inline struct jz_nand *mtd_to_jz_nand(struct mtd_info *mtd) | ||
| 73 | { | ||
| 74 | return container_of(mtd, struct jz_nand, mtd); | ||
| 75 | } | ||
| 76 | |||
| 77 | static void jz_nand_cmd_ctrl(struct mtd_info *mtd, int dat, unsigned int ctrl) | ||
| 78 | { | ||
| 79 | struct jz_nand *nand = mtd_to_jz_nand(mtd); | ||
| 80 | struct nand_chip *chip = mtd->priv; | ||
| 81 | uint32_t reg; | ||
| 82 | |||
| 83 | if (ctrl & NAND_CTRL_CHANGE) { | ||
| 84 | BUG_ON((ctrl & NAND_ALE) && (ctrl & NAND_CLE)); | ||
| 85 | if (ctrl & NAND_ALE) | ||
| 86 | chip->IO_ADDR_W = nand->bank_base + JZ_NAND_MEM_ADDR_OFFSET; | ||
| 87 | else if (ctrl & NAND_CLE) | ||
| 88 | chip->IO_ADDR_W = nand->bank_base + JZ_NAND_MEM_CMD_OFFSET; | ||
| 89 | else | ||
| 90 | chip->IO_ADDR_W = nand->bank_base; | ||
| 91 | |||
| 92 | reg = readl(nand->base + JZ_REG_NAND_CTRL); | ||
| 93 | if (ctrl & NAND_NCE) | ||
| 94 | reg |= JZ_NAND_CTRL_ASSERT_CHIP(0); | ||
| 95 | else | ||
| 96 | reg &= ~JZ_NAND_CTRL_ASSERT_CHIP(0); | ||
| 97 | writel(reg, nand->base + JZ_REG_NAND_CTRL); | ||
| 98 | } | ||
| 99 | if (dat != NAND_CMD_NONE) | ||
| 100 | writeb(dat, chip->IO_ADDR_W); | ||
| 101 | } | ||
| 102 | |||
| 103 | static int jz_nand_dev_ready(struct mtd_info *mtd) | ||
| 104 | { | ||
| 105 | struct jz_nand *nand = mtd_to_jz_nand(mtd); | ||
| 106 | return gpio_get_value_cansleep(nand->pdata->busy_gpio); | ||
| 107 | } | ||
| 108 | |||
| 109 | static void jz_nand_hwctl(struct mtd_info *mtd, int mode) | ||
| 110 | { | ||
| 111 | struct jz_nand *nand = mtd_to_jz_nand(mtd); | ||
| 112 | uint32_t reg; | ||
| 113 | |||
| 114 | writel(0, nand->base + JZ_REG_NAND_IRQ_STAT); | ||
| 115 | reg = readl(nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 116 | |||
| 117 | reg |= JZ_NAND_ECC_CTRL_RESET; | ||
| 118 | reg |= JZ_NAND_ECC_CTRL_ENABLE; | ||
| 119 | reg |= JZ_NAND_ECC_CTRL_RS; | ||
| 120 | |||
| 121 | switch (mode) { | ||
| 122 | case NAND_ECC_READ: | ||
| 123 | reg &= ~JZ_NAND_ECC_CTRL_ENCODING; | ||
| 124 | nand->is_reading = true; | ||
| 125 | break; | ||
| 126 | case NAND_ECC_WRITE: | ||
| 127 | reg |= JZ_NAND_ECC_CTRL_ENCODING; | ||
| 128 | nand->is_reading = false; | ||
| 129 | break; | ||
| 130 | default: | ||
| 131 | break; | ||
| 132 | } | ||
| 133 | |||
| 134 | writel(reg, nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 135 | } | ||
| 136 | |||
| 137 | static int jz_nand_calculate_ecc_rs(struct mtd_info *mtd, const uint8_t *dat, | ||
| 138 | uint8_t *ecc_code) | ||
| 139 | { | ||
| 140 | struct jz_nand *nand = mtd_to_jz_nand(mtd); | ||
| 141 | uint32_t reg, status; | ||
| 142 | int i; | ||
| 143 | unsigned int timeout = 1000; | ||
| 144 | static uint8_t empty_block_ecc[] = {0xcd, 0x9d, 0x90, 0x58, 0xf4, | ||
| 145 | 0x8b, 0xff, 0xb7, 0x6f}; | ||
| 146 | |||
| 147 | if (nand->is_reading) | ||
| 148 | return 0; | ||
| 149 | |||
| 150 | do { | ||
| 151 | status = readl(nand->base + JZ_REG_NAND_IRQ_STAT); | ||
| 152 | } while (!(status & JZ_NAND_STATUS_ENC_FINISH) && --timeout); | ||
| 153 | |||
| 154 | if (timeout == 0) | ||
| 155 | return -1; | ||
| 156 | |||
| 157 | reg = readl(nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 158 | reg &= ~JZ_NAND_ECC_CTRL_ENABLE; | ||
| 159 | writel(reg, nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 160 | |||
| 161 | for (i = 0; i < 9; ++i) | ||
| 162 | ecc_code[i] = readb(nand->base + JZ_REG_NAND_PAR0 + i); | ||
| 163 | |||
| 164 | /* If the written data is completly 0xff, we also want to write 0xff as | ||
| 165 | * ecc, otherwise we will get in trouble when doing subpage writes. */ | ||
| 166 | if (memcmp(ecc_code, empty_block_ecc, 9) == 0) | ||
| 167 | memset(ecc_code, 0xff, 9); | ||
| 168 | |||
| 169 | return 0; | ||
| 170 | } | ||
| 171 | |||
| 172 | static void jz_nand_correct_data(uint8_t *dat, int index, int mask) | ||
| 173 | { | ||
| 174 | int offset = index & 0x7; | ||
| 175 | uint16_t data; | ||
| 176 | |||
| 177 | index += (index >> 3); | ||
| 178 | |||
| 179 | data = dat[index]; | ||
| 180 | data |= dat[index+1] << 8; | ||
| 181 | |||
| 182 | mask ^= (data >> offset) & 0x1ff; | ||
| 183 | data &= ~(0x1ff << offset); | ||
| 184 | data |= (mask << offset); | ||
| 185 | |||
| 186 | dat[index] = data & 0xff; | ||
| 187 | dat[index+1] = (data >> 8) & 0xff; | ||
| 188 | } | ||
| 189 | |||
| 190 | static int jz_nand_correct_ecc_rs(struct mtd_info *mtd, uint8_t *dat, | ||
| 191 | uint8_t *read_ecc, uint8_t *calc_ecc) | ||
| 192 | { | ||
| 193 | struct jz_nand *nand = mtd_to_jz_nand(mtd); | ||
| 194 | int i, error_count, index; | ||
| 195 | uint32_t reg, status, error; | ||
| 196 | uint32_t t; | ||
| 197 | unsigned int timeout = 1000; | ||
| 198 | |||
| 199 | t = read_ecc[0]; | ||
| 200 | |||
| 201 | if (t == 0xff) { | ||
| 202 | for (i = 1; i < 9; ++i) | ||
| 203 | t &= read_ecc[i]; | ||
| 204 | |||
| 205 | t &= dat[0]; | ||
| 206 | t &= dat[nand->chip.ecc.size / 2]; | ||
| 207 | t &= dat[nand->chip.ecc.size - 1]; | ||
| 208 | |||
| 209 | if (t == 0xff) { | ||
| 210 | for (i = 1; i < nand->chip.ecc.size - 1; ++i) | ||
| 211 | t &= dat[i]; | ||
| 212 | if (t == 0xff) | ||
| 213 | return 0; | ||
| 214 | } | ||
| 215 | } | ||
| 216 | |||
| 217 | for (i = 0; i < 9; ++i) | ||
| 218 | writeb(read_ecc[i], nand->base + JZ_REG_NAND_PAR0 + i); | ||
| 219 | |||
| 220 | reg = readl(nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 221 | reg |= JZ_NAND_ECC_CTRL_PAR_READY; | ||
| 222 | writel(reg, nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 223 | |||
| 224 | do { | ||
| 225 | status = readl(nand->base + JZ_REG_NAND_IRQ_STAT); | ||
| 226 | } while (!(status & JZ_NAND_STATUS_DEC_FINISH) && --timeout); | ||
| 227 | |||
| 228 | if (timeout == 0) | ||
| 229 | return -1; | ||
| 230 | |||
| 231 | reg = readl(nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 232 | reg &= ~JZ_NAND_ECC_CTRL_ENABLE; | ||
| 233 | writel(reg, nand->base + JZ_REG_NAND_ECC_CTRL); | ||
| 234 | |||
| 235 | if (status & JZ_NAND_STATUS_ERROR) { | ||
| 236 | if (status & JZ_NAND_STATUS_UNCOR_ERROR) | ||
| 237 | return -1; | ||
| 238 | |||
| 239 | error_count = (status & JZ_NAND_STATUS_ERR_COUNT) >> 29; | ||
| 240 | |||
| 241 | for (i = 0; i < error_count; ++i) { | ||
| 242 | error = readl(nand->base + JZ_REG_NAND_ERR(i)); | ||
| 243 | index = ((error >> 16) & 0x1ff) - 1; | ||
| 244 | if (index >= 0 && index < 512) | ||
| 245 | jz_nand_correct_data(dat, index, error & 0x1ff); | ||
| 246 | } | ||
| 247 | |||
| 248 | return error_count; | ||
| 249 | } | ||
| 250 | |||
| 251 | return 0; | ||
| 252 | } | ||
| 253 | |||
| 254 | |||
| 255 | /* Copy paste of nand_read_page_hwecc_oob_first except for different eccpos | ||
| 256 | * handling. The ecc area is for 4k chips 72 bytes long and thus does not fit | ||
| 257 | * into the eccpos array. */ | ||
| 258 | static int jz_nand_read_page_hwecc_oob_first(struct mtd_info *mtd, | ||
| 259 | struct nand_chip *chip, uint8_t *buf, int page) | ||
| 260 | { | ||
| 261 | int i, eccsize = chip->ecc.size; | ||
| 262 | int eccbytes = chip->ecc.bytes; | ||
| 263 | int eccsteps = chip->ecc.steps; | ||
| 264 | uint8_t *p = buf; | ||
| 265 | unsigned int ecc_offset = chip->page_shift; | ||
| 266 | |||
| 267 | /* Read the OOB area first */ | ||
| 268 | chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); | ||
| 269 | chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); | ||
| 270 | chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page); | ||
| 271 | |||
| 272 | for (i = ecc_offset; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { | ||
| 273 | int stat; | ||
| 274 | |||
| 275 | chip->ecc.hwctl(mtd, NAND_ECC_READ); | ||
| 276 | chip->read_buf(mtd, p, eccsize); | ||
| 277 | |||
| 278 | stat = chip->ecc.correct(mtd, p, &chip->oob_poi[i], NULL); | ||
| 279 | if (stat < 0) | ||
| 280 | mtd->ecc_stats.failed++; | ||
| 281 | else | ||
| 282 | mtd->ecc_stats.corrected += stat; | ||
| 283 | } | ||
| 284 | return 0; | ||
| 285 | } | ||
| 286 | |||
| 287 | /* Copy-and-paste of nand_write_page_hwecc with different eccpos handling. */ | ||
| 288 | static void jz_nand_write_page_hwecc(struct mtd_info *mtd, | ||
| 289 | struct nand_chip *chip, const uint8_t *buf) | ||
| 290 | { | ||
| 291 | int i, eccsize = chip->ecc.size; | ||
| 292 | int eccbytes = chip->ecc.bytes; | ||
| 293 | int eccsteps = chip->ecc.steps; | ||
| 294 | const uint8_t *p = buf; | ||
| 295 | unsigned int ecc_offset = chip->page_shift; | ||
| 296 | |||
| 297 | for (i = ecc_offset; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { | ||
| 298 | chip->ecc.hwctl(mtd, NAND_ECC_WRITE); | ||
| 299 | chip->write_buf(mtd, p, eccsize); | ||
| 300 | chip->ecc.calculate(mtd, p, &chip->oob_poi[i]); | ||
| 301 | } | ||
| 302 | |||
| 303 | chip->write_buf(mtd, chip->oob_poi, mtd->oobsize); | ||
| 304 | } | ||
| 305 | |||
| 306 | #ifdef CONFIG_MTD_CMDLINE_PARTS | ||
| 307 | static const char *part_probes[] = {"cmdline", NULL}; | ||
| 308 | #endif | ||
| 309 | |||
| 310 | static int jz_nand_ioremap_resource(struct platform_device *pdev, | ||
| 311 | const char *name, struct resource **res, void __iomem **base) | ||
| 312 | { | ||
| 313 | int ret; | ||
| 314 | |||
| 315 | *res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name); | ||
| 316 | if (!*res) { | ||
| 317 | dev_err(&pdev->dev, "Failed to get platform %s memory\n", name); | ||
| 318 | ret = -ENXIO; | ||
| 319 | goto err; | ||
| 320 | } | ||
| 321 | |||
| 322 | *res = request_mem_region((*res)->start, resource_size(*res), | ||
| 323 | pdev->name); | ||
| 324 | if (!*res) { | ||
| 325 | dev_err(&pdev->dev, "Failed to request %s memory region\n", name); | ||
| 326 | ret = -EBUSY; | ||
| 327 | goto err; | ||
| 328 | } | ||
| 329 | |||
| 330 | *base = ioremap((*res)->start, resource_size(*res)); | ||
| 331 | if (!*base) { | ||
| 332 | dev_err(&pdev->dev, "Failed to ioremap %s memory region\n", name); | ||
| 333 | ret = -EBUSY; | ||
| 334 | goto err_release_mem; | ||
| 335 | } | ||
| 336 | |||
| 337 | return 0; | ||
| 338 | |||
| 339 | err_release_mem: | ||
| 340 | release_mem_region((*res)->start, resource_size(*res)); | ||
| 341 | err: | ||
| 342 | *res = NULL; | ||
| 343 | *base = NULL; | ||
| 344 | return ret; | ||
| 345 | } | ||
| 346 | |||
| 347 | static int __devinit jz_nand_probe(struct platform_device *pdev) | ||
| 348 | { | ||
| 349 | int ret; | ||
| 350 | struct jz_nand *nand; | ||
| 351 | struct nand_chip *chip; | ||
| 352 | struct mtd_info *mtd; | ||
| 353 | struct jz_nand_platform_data *pdata = pdev->dev.platform_data; | ||
| 354 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 355 | struct mtd_partition *partition_info; | ||
| 356 | int num_partitions = 0; | ||
| 357 | #endif | ||
| 358 | |||
| 359 | nand = kzalloc(sizeof(*nand), GFP_KERNEL); | ||
| 360 | if (!nand) { | ||
| 361 | dev_err(&pdev->dev, "Failed to allocate device structure.\n"); | ||
| 362 | return -ENOMEM; | ||
| 363 | } | ||
| 364 | |||
| 365 | ret = jz_nand_ioremap_resource(pdev, "mmio", &nand->mem, &nand->base); | ||
| 366 | if (ret) | ||
| 367 | goto err_free; | ||
| 368 | ret = jz_nand_ioremap_resource(pdev, "bank", &nand->bank_mem, | ||
| 369 | &nand->bank_base); | ||
| 370 | if (ret) | ||
| 371 | goto err_iounmap_mmio; | ||
| 372 | |||
| 373 | if (pdata && gpio_is_valid(pdata->busy_gpio)) { | ||
| 374 | ret = gpio_request(pdata->busy_gpio, "NAND busy pin"); | ||
| 375 | if (ret) { | ||
| 376 | dev_err(&pdev->dev, | ||
| 377 | "Failed to request busy gpio %d: %d\n", | ||
| 378 | pdata->busy_gpio, ret); | ||
| 379 | goto err_iounmap_mem; | ||
| 380 | } | ||
| 381 | } | ||
| 382 | |||
| 383 | mtd = &nand->mtd; | ||
| 384 | chip = &nand->chip; | ||
| 385 | mtd->priv = chip; | ||
| 386 | mtd->owner = THIS_MODULE; | ||
| 387 | mtd->name = "jz4740-nand"; | ||
| 388 | |||
| 389 | chip->ecc.hwctl = jz_nand_hwctl; | ||
| 390 | chip->ecc.calculate = jz_nand_calculate_ecc_rs; | ||
| 391 | chip->ecc.correct = jz_nand_correct_ecc_rs; | ||
| 392 | chip->ecc.mode = NAND_ECC_HW_OOB_FIRST; | ||
| 393 | chip->ecc.size = 512; | ||
| 394 | chip->ecc.bytes = 9; | ||
| 395 | |||
| 396 | chip->ecc.read_page = jz_nand_read_page_hwecc_oob_first; | ||
| 397 | chip->ecc.write_page = jz_nand_write_page_hwecc; | ||
| 398 | |||
| 399 | if (pdata) | ||
| 400 | chip->ecc.layout = pdata->ecc_layout; | ||
| 401 | |||
| 402 | chip->chip_delay = 50; | ||
| 403 | chip->cmd_ctrl = jz_nand_cmd_ctrl; | ||
| 404 | |||
| 405 | if (pdata && gpio_is_valid(pdata->busy_gpio)) | ||
| 406 | chip->dev_ready = jz_nand_dev_ready; | ||
| 407 | |||
| 408 | chip->IO_ADDR_R = nand->bank_base; | ||
| 409 | chip->IO_ADDR_W = nand->bank_base; | ||
| 410 | |||
| 411 | nand->pdata = pdata; | ||
| 412 | platform_set_drvdata(pdev, nand); | ||
| 413 | |||
| 414 | writel(JZ_NAND_CTRL_ENABLE_CHIP(0), nand->base + JZ_REG_NAND_CTRL); | ||
| 415 | |||
| 416 | ret = nand_scan_ident(mtd, 1, NULL); | ||
| 417 | if (ret) { | ||
| 418 | dev_err(&pdev->dev, "Failed to scan nand\n"); | ||
| 419 | goto err_gpio_free; | ||
| 420 | } | ||
| 421 | |||
| 422 | if (pdata && pdata->ident_callback) { | ||
| 423 | pdata->ident_callback(pdev, chip, &pdata->partitions, | ||
| 424 | &pdata->num_partitions); | ||
| 425 | } | ||
| 426 | |||
| 427 | ret = nand_scan_tail(mtd); | ||
| 428 | if (ret) { | ||
| 429 | dev_err(&pdev->dev, "Failed to scan nand\n"); | ||
| 430 | goto err_gpio_free; | ||
| 431 | } | ||
| 432 | |||
| 433 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 434 | #ifdef CONFIG_MTD_CMDLINE_PARTS | ||
| 435 | num_partitions = parse_mtd_partitions(mtd, part_probes, | ||
| 436 | &partition_info, 0); | ||
| 437 | #endif | ||
| 438 | if (num_partitions <= 0 && pdata) { | ||
| 439 | num_partitions = pdata->num_partitions; | ||
| 440 | partition_info = pdata->partitions; | ||
| 441 | } | ||
| 442 | |||
| 443 | if (num_partitions > 0) | ||
| 444 | ret = add_mtd_partitions(mtd, partition_info, num_partitions); | ||
| 445 | else | ||
| 446 | #endif | ||
| 447 | ret = add_mtd_device(mtd); | ||
| 448 | |||
| 449 | if (ret) { | ||
| 450 | dev_err(&pdev->dev, "Failed to add mtd device\n"); | ||
| 451 | goto err_nand_release; | ||
| 452 | } | ||
| 453 | |||
| 454 | dev_info(&pdev->dev, "Successfully registered JZ4740 NAND driver\n"); | ||
| 455 | |||
| 456 | return 0; | ||
| 457 | |||
| 458 | err_nand_release: | ||
| 459 | nand_release(&nand->mtd); | ||
| 460 | err_gpio_free: | ||
| 461 | platform_set_drvdata(pdev, NULL); | ||
| 462 | gpio_free(pdata->busy_gpio); | ||
| 463 | err_iounmap_mem: | ||
| 464 | iounmap(nand->bank_base); | ||
| 465 | err_iounmap_mmio: | ||
| 466 | iounmap(nand->base); | ||
| 467 | err_free: | ||
| 468 | kfree(nand); | ||
| 469 | return ret; | ||
| 470 | } | ||
| 471 | |||
| 472 | static int __devexit jz_nand_remove(struct platform_device *pdev) | ||
| 473 | { | ||
| 474 | struct jz_nand *nand = platform_get_drvdata(pdev); | ||
| 475 | |||
| 476 | nand_release(&nand->mtd); | ||
| 477 | |||
| 478 | /* Deassert and disable all chips */ | ||
| 479 | writel(0, nand->base + JZ_REG_NAND_CTRL); | ||
| 480 | |||
| 481 | iounmap(nand->bank_base); | ||
| 482 | release_mem_region(nand->bank_mem->start, resource_size(nand->bank_mem)); | ||
| 483 | iounmap(nand->base); | ||
| 484 | release_mem_region(nand->mem->start, resource_size(nand->mem)); | ||
| 485 | |||
| 486 | platform_set_drvdata(pdev, NULL); | ||
| 487 | kfree(nand); | ||
| 488 | |||
| 489 | return 0; | ||
| 490 | } | ||
| 491 | |||
| 492 | struct platform_driver jz_nand_driver = { | ||
| 493 | .probe = jz_nand_probe, | ||
| 494 | .remove = __devexit_p(jz_nand_remove), | ||
| 495 | .driver = { | ||
| 496 | .name = "jz4740-nand", | ||
| 497 | .owner = THIS_MODULE, | ||
| 498 | }, | ||
| 499 | }; | ||
| 500 | |||
| 501 | static int __init jz_nand_init(void) | ||
| 502 | { | ||
| 503 | return platform_driver_register(&jz_nand_driver); | ||
| 504 | } | ||
| 505 | module_init(jz_nand_init); | ||
| 506 | |||
| 507 | static void __exit jz_nand_exit(void) | ||
| 508 | { | ||
| 509 | platform_driver_unregister(&jz_nand_driver); | ||
| 510 | } | ||
| 511 | module_exit(jz_nand_exit); | ||
| 512 | |||
| 513 | MODULE_LICENSE("GPL"); | ||
| 514 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
| 515 | MODULE_DESCRIPTION("NAND controller driver for JZ4740 SoC"); | ||
| 516 | MODULE_ALIAS("platform:jz4740-nand"); | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index ebe68395ecf8..5a6895320b48 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -484,7 +484,7 @@ config XTENSA_XT2000_SONIC | |||
| 484 | 484 | ||
| 485 | config MIPS_AU1X00_ENET | 485 | config MIPS_AU1X00_ENET |
| 486 | tristate "MIPS AU1000 Ethernet support" | 486 | tristate "MIPS AU1000 Ethernet support" |
| 487 | depends on SOC_AU1X00 | 487 | depends on MIPS_ALCHEMY |
| 488 | select PHYLIB | 488 | select PHYLIB |
| 489 | select CRC32 | 489 | select CRC32 |
| 490 | help | 490 | help |
| @@ -914,7 +914,7 @@ config SMC91X | |||
| 914 | tristate "SMC 91C9x/91C1xxx support" | 914 | tristate "SMC 91C9x/91C1xxx support" |
| 915 | select CRC32 | 915 | select CRC32 |
| 916 | select MII | 916 | select MII |
| 917 | depends on ARM || REDWOOD_5 || REDWOOD_6 || M32R || SUPERH || \ | 917 | depends on ARM || M32R || SUPERH || \ |
| 918 | MIPS || BLACKFIN || MN10300 || COLDFIRE | 918 | MIPS || BLACKFIN || MN10300 || COLDFIRE |
| 919 | help | 919 | help |
| 920 | This is a driver for SMC's 91x series of Ethernet chipsets, | 920 | This is a driver for SMC's 91x series of Ethernet chipsets, |
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c index 386d4feec652..15ae6df2ff00 100644 --- a/drivers/net/au1000_eth.c +++ b/drivers/net/au1000_eth.c | |||
| @@ -104,14 +104,6 @@ MODULE_VERSION(DRV_VERSION); | |||
| 104 | * complete immediately. | 104 | * complete immediately. |
| 105 | */ | 105 | */ |
| 106 | 106 | ||
| 107 | /* These addresses are only used if yamon doesn't tell us what | ||
| 108 | * the mac address is, and the mac address is not passed on the | ||
| 109 | * command line. | ||
| 110 | */ | ||
| 111 | static unsigned char au1000_mac_addr[6] __devinitdata = { | ||
| 112 | 0x00, 0x50, 0xc2, 0x0c, 0x30, 0x00 | ||
| 113 | }; | ||
| 114 | |||
| 115 | struct au1000_private *au_macs[NUM_ETH_INTERFACES]; | 107 | struct au1000_private *au_macs[NUM_ETH_INTERFACES]; |
| 116 | 108 | ||
| 117 | /* | 109 | /* |
| @@ -1002,7 +994,6 @@ static int __devinit au1000_probe(struct platform_device *pdev) | |||
| 1002 | db_dest_t *pDB, *pDBfree; | 994 | db_dest_t *pDB, *pDBfree; |
| 1003 | int irq, i, err = 0; | 995 | int irq, i, err = 0; |
| 1004 | struct resource *base, *macen; | 996 | struct resource *base, *macen; |
| 1005 | char ethaddr[6]; | ||
| 1006 | 997 | ||
| 1007 | base = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 998 | base = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 1008 | if (!base) { | 999 | if (!base) { |
| @@ -1079,24 +1070,13 @@ static int __devinit au1000_probe(struct platform_device *pdev) | |||
| 1079 | } | 1070 | } |
| 1080 | aup->mac_id = pdev->id; | 1071 | aup->mac_id = pdev->id; |
| 1081 | 1072 | ||
| 1082 | if (pdev->id == 0) { | 1073 | if (pdev->id == 0) |
| 1083 | if (prom_get_ethernet_addr(ethaddr) == 0) | ||
| 1084 | memcpy(au1000_mac_addr, ethaddr, sizeof(au1000_mac_addr)); | ||
| 1085 | else { | ||
| 1086 | netdev_info(dev, "No MAC address found\n"); | ||
| 1087 | /* Use the hard coded MAC addresses */ | ||
| 1088 | } | ||
| 1089 | |||
| 1090 | au1000_setup_hw_rings(aup, MAC0_RX_DMA_ADDR, MAC0_TX_DMA_ADDR); | 1074 | au1000_setup_hw_rings(aup, MAC0_RX_DMA_ADDR, MAC0_TX_DMA_ADDR); |
| 1091 | } else if (pdev->id == 1) | 1075 | else if (pdev->id == 1) |
| 1092 | au1000_setup_hw_rings(aup, MAC1_RX_DMA_ADDR, MAC1_TX_DMA_ADDR); | 1076 | au1000_setup_hw_rings(aup, MAC1_RX_DMA_ADDR, MAC1_TX_DMA_ADDR); |
| 1093 | 1077 | ||
| 1094 | /* | 1078 | /* set a random MAC now in case platform_data doesn't provide one */ |
| 1095 | * Assign to the Ethernet ports two consecutive MAC addresses | 1079 | random_ether_addr(dev->dev_addr); |
| 1096 | * to match those that are printed on their stickers | ||
| 1097 | */ | ||
| 1098 | memcpy(dev->dev_addr, au1000_mac_addr, sizeof(au1000_mac_addr)); | ||
| 1099 | dev->dev_addr[5] += pdev->id; | ||
| 1100 | 1080 | ||
| 1101 | *aup->enable = 0; | 1081 | *aup->enable = 0; |
| 1102 | aup->mac_enabled = 0; | 1082 | aup->mac_enabled = 0; |
| @@ -1106,6 +1086,9 @@ static int __devinit au1000_probe(struct platform_device *pdev) | |||
| 1106 | dev_info(&pdev->dev, "no platform_data passed, PHY search on MAC0\n"); | 1086 | dev_info(&pdev->dev, "no platform_data passed, PHY search on MAC0\n"); |
| 1107 | aup->phy1_search_mac0 = 1; | 1087 | aup->phy1_search_mac0 = 1; |
| 1108 | } else { | 1088 | } else { |
| 1089 | if (is_valid_ether_addr(pd->mac)) | ||
| 1090 | memcpy(dev->dev_addr, pd->mac, 6); | ||
| 1091 | |||
| 1109 | aup->phy_static_config = pd->phy_static_config; | 1092 | aup->phy_static_config = pd->phy_static_config; |
| 1110 | aup->phy_search_highest_addr = pd->phy_search_highest_addr; | 1093 | aup->phy_search_highest_addr = pd->phy_search_highest_addr; |
| 1111 | aup->phy1_search_mac0 = pd->phy1_search_mac0; | 1094 | aup->phy1_search_mac0 = pd->phy1_search_mac0; |
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h index 8d2772cc42f2..ee747919a766 100644 --- a/drivers/net/smc91x.h +++ b/drivers/net/smc91x.h | |||
| @@ -83,43 +83,6 @@ static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg) | |||
| 83 | } | 83 | } |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | #elif defined(CONFIG_REDWOOD_5) || defined(CONFIG_REDWOOD_6) | ||
| 87 | |||
| 88 | /* We can only do 16-bit reads and writes in the static memory space. */ | ||
| 89 | #define SMC_CAN_USE_8BIT 0 | ||
| 90 | #define SMC_CAN_USE_16BIT 1 | ||
| 91 | #define SMC_CAN_USE_32BIT 0 | ||
| 92 | #define SMC_NOWAIT 1 | ||
| 93 | |||
| 94 | #define SMC_IO_SHIFT 0 | ||
| 95 | |||
| 96 | #define SMC_inw(a, r) in_be16((volatile u16 *)((a) + (r))) | ||
| 97 | #define SMC_outw(v, a, r) out_be16((volatile u16 *)((a) + (r)), v) | ||
| 98 | #define SMC_insw(a, r, p, l) \ | ||
| 99 | do { \ | ||
| 100 | unsigned long __port = (a) + (r); \ | ||
| 101 | u16 *__p = (u16 *)(p); \ | ||
| 102 | int __l = (l); \ | ||
| 103 | insw(__port, __p, __l); \ | ||
| 104 | while (__l > 0) { \ | ||
| 105 | *__p = swab16(*__p); \ | ||
| 106 | __p++; \ | ||
| 107 | __l--; \ | ||
| 108 | } \ | ||
| 109 | } while (0) | ||
| 110 | #define SMC_outsw(a, r, p, l) \ | ||
| 111 | do { \ | ||
| 112 | unsigned long __port = (a) + (r); \ | ||
| 113 | u16 *__p = (u16 *)(p); \ | ||
| 114 | int __l = (l); \ | ||
| 115 | while (__l > 0) { \ | ||
| 116 | /* Believe it or not, the swab isn't needed. */ \ | ||
| 117 | outw( /* swab16 */ (*__p++), __port); \ | ||
| 118 | __l--; \ | ||
| 119 | } \ | ||
| 120 | } while (0) | ||
| 121 | #define SMC_IRQ_FLAGS (0) | ||
| 122 | |||
| 123 | #elif defined(CONFIG_SA1100_PLEB) | 86 | #elif defined(CONFIG_SA1100_PLEB) |
| 124 | /* We can only do 16-bit reads and writes in the static memory space. */ | 87 | /* We can only do 16-bit reads and writes in the static memory space. */ |
| 125 | #define SMC_CAN_USE_8BIT 1 | 88 | #define SMC_CAN_USE_8BIT 1 |
diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig index d0f5ad306078..c988514eb551 100644 --- a/drivers/pcmcia/Kconfig +++ b/drivers/pcmcia/Kconfig | |||
| @@ -157,11 +157,11 @@ config PCMCIA_M8XX | |||
| 157 | 157 | ||
| 158 | config PCMCIA_AU1X00 | 158 | config PCMCIA_AU1X00 |
| 159 | tristate "Au1x00 pcmcia support" | 159 | tristate "Au1x00 pcmcia support" |
| 160 | depends on SOC_AU1X00 && PCMCIA | 160 | depends on MIPS_ALCHEMY && PCMCIA |
| 161 | 161 | ||
| 162 | config PCMCIA_ALCHEMY_DEVBOARD | 162 | config PCMCIA_ALCHEMY_DEVBOARD |
| 163 | tristate "Alchemy Db/Pb1xxx PCMCIA socket services" | 163 | tristate "Alchemy Db/Pb1xxx PCMCIA socket services" |
| 164 | depends on SOC_AU1X00 && PCMCIA | 164 | depends on MIPS_ALCHEMY && PCMCIA |
| 165 | select 64BIT_PHYS_ADDR | 165 | select 64BIT_PHYS_ADDR |
| 166 | help | 166 | help |
| 167 | Enable this driver of you want PCMCIA support on your Alchemy | 167 | Enable this driver of you want PCMCIA support on your Alchemy |
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig index 8e9ba177d817..1e5506be39b4 100644 --- a/drivers/power/Kconfig +++ b/drivers/power/Kconfig | |||
| @@ -142,4 +142,15 @@ config CHARGER_PCF50633 | |||
| 142 | help | 142 | help |
| 143 | Say Y to include support for NXP PCF50633 Main Battery Charger. | 143 | Say Y to include support for NXP PCF50633 Main Battery Charger. |
| 144 | 144 | ||
| 145 | config BATTERY_JZ4740 | ||
| 146 | tristate "Ingenic JZ4740 battery" | ||
| 147 | depends on MACH_JZ4740 | ||
| 148 | depends on MFD_JZ4740_ADC | ||
| 149 | help | ||
| 150 | Say Y to enable support for the battery on Ingenic JZ4740 based | ||
| 151 | boards. | ||
| 152 | |||
| 153 | This driver can be build as a module. If so, the module will be | ||
| 154 | called jz4740-battery. | ||
| 155 | |||
| 145 | endif # POWER_SUPPLY | 156 | endif # POWER_SUPPLY |
diff --git a/drivers/power/Makefile b/drivers/power/Makefile index 00050809a6c7..cf95009d9bcd 100644 --- a/drivers/power/Makefile +++ b/drivers/power/Makefile | |||
| @@ -34,3 +34,4 @@ obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o | |||
| 34 | obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o | 34 | obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o |
| 35 | obj-$(CONFIG_BATTERY_Z2) += z2_battery.o | 35 | obj-$(CONFIG_BATTERY_Z2) += z2_battery.o |
| 36 | obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o | 36 | obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o |
| 37 | obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o | ||
diff --git a/drivers/power/jz4740-battery.c b/drivers/power/jz4740-battery.c new file mode 100644 index 000000000000..20c4b952e9bd --- /dev/null +++ b/drivers/power/jz4740-battery.c | |||
| @@ -0,0 +1,445 @@ | |||
| 1 | /* | ||
| 2 | * Battery measurement code for Ingenic JZ SOC. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Jiejing Zhang <kzjeef@gmail.com> | ||
| 5 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 6 | * | ||
| 7 | * based on tosa_battery.c | ||
| 8 | * | ||
| 9 | * Copyright (C) 2008 Marek Vasut <marek.vasut@gmail.com> | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License version 2 as | ||
| 13 | * published by the Free Software Foundation. | ||
| 14 | * | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/interrupt.h> | ||
| 18 | #include <linux/kernel.h> | ||
| 19 | #include <linux/module.h> | ||
| 20 | #include <linux/platform_device.h> | ||
| 21 | #include <linux/slab.h> | ||
| 22 | |||
| 23 | #include <linux/delay.h> | ||
| 24 | #include <linux/gpio.h> | ||
| 25 | #include <linux/mfd/core.h> | ||
| 26 | #include <linux/power_supply.h> | ||
| 27 | |||
| 28 | #include <linux/power/jz4740-battery.h> | ||
| 29 | #include <linux/jz4740-adc.h> | ||
| 30 | |||
| 31 | struct jz_battery { | ||
| 32 | struct jz_battery_platform_data *pdata; | ||
| 33 | struct platform_device *pdev; | ||
| 34 | |||
| 35 | struct resource *mem; | ||
| 36 | void __iomem *base; | ||
| 37 | |||
| 38 | int irq; | ||
| 39 | int charge_irq; | ||
| 40 | |||
| 41 | struct mfd_cell *cell; | ||
| 42 | |||
| 43 | int status; | ||
| 44 | long voltage; | ||
| 45 | |||
| 46 | struct completion read_completion; | ||
| 47 | |||
| 48 | struct power_supply battery; | ||
| 49 | struct delayed_work work; | ||
| 50 | }; | ||
| 51 | |||
| 52 | static inline struct jz_battery *psy_to_jz_battery(struct power_supply *psy) | ||
| 53 | { | ||
| 54 | return container_of(psy, struct jz_battery, battery); | ||
| 55 | } | ||
| 56 | |||
| 57 | static irqreturn_t jz_battery_irq_handler(int irq, void *devid) | ||
| 58 | { | ||
| 59 | struct jz_battery *battery = devid; | ||
| 60 | |||
| 61 | complete(&battery->read_completion); | ||
| 62 | return IRQ_HANDLED; | ||
| 63 | } | ||
| 64 | |||
| 65 | static long jz_battery_read_voltage(struct jz_battery *battery) | ||
| 66 | { | ||
| 67 | unsigned long t; | ||
| 68 | unsigned long val; | ||
| 69 | long voltage; | ||
| 70 | |||
| 71 | INIT_COMPLETION(battery->read_completion); | ||
| 72 | |||
| 73 | enable_irq(battery->irq); | ||
| 74 | battery->cell->enable(battery->pdev); | ||
| 75 | |||
| 76 | t = wait_for_completion_interruptible_timeout(&battery->read_completion, | ||
| 77 | HZ); | ||
| 78 | |||
| 79 | if (t > 0) { | ||
| 80 | val = readw(battery->base) & 0xfff; | ||
| 81 | |||
| 82 | if (battery->pdata->info.voltage_max_design <= 2500000) | ||
| 83 | val = (val * 78125UL) >> 7UL; | ||
| 84 | else | ||
| 85 | val = ((val * 924375UL) >> 9UL) + 33000; | ||
| 86 | voltage = (long)val; | ||
| 87 | } else { | ||
| 88 | voltage = t ? t : -ETIMEDOUT; | ||
| 89 | } | ||
| 90 | |||
| 91 | battery->cell->disable(battery->pdev); | ||
| 92 | disable_irq(battery->irq); | ||
| 93 | |||
| 94 | return voltage; | ||
| 95 | } | ||
| 96 | |||
| 97 | static int jz_battery_get_capacity(struct power_supply *psy) | ||
| 98 | { | ||
| 99 | struct jz_battery *jz_battery = psy_to_jz_battery(psy); | ||
| 100 | struct power_supply_info *info = &jz_battery->pdata->info; | ||
| 101 | long voltage; | ||
| 102 | int ret; | ||
| 103 | int voltage_span; | ||
| 104 | |||
| 105 | voltage = jz_battery_read_voltage(jz_battery); | ||
| 106 | |||
| 107 | if (voltage < 0) | ||
| 108 | return voltage; | ||
| 109 | |||
| 110 | voltage_span = info->voltage_max_design - info->voltage_min_design; | ||
| 111 | ret = ((voltage - info->voltage_min_design) * 100) / voltage_span; | ||
| 112 | |||
| 113 | if (ret > 100) | ||
| 114 | ret = 100; | ||
| 115 | else if (ret < 0) | ||
| 116 | ret = 0; | ||
| 117 | |||
| 118 | return ret; | ||
| 119 | } | ||
| 120 | |||
| 121 | static int jz_battery_get_property(struct power_supply *psy, | ||
| 122 | enum power_supply_property psp, union power_supply_propval *val) | ||
| 123 | { | ||
| 124 | struct jz_battery *jz_battery = psy_to_jz_battery(psy); | ||
| 125 | struct power_supply_info *info = &jz_battery->pdata->info; | ||
| 126 | long voltage; | ||
| 127 | |||
| 128 | switch (psp) { | ||
| 129 | case POWER_SUPPLY_PROP_STATUS: | ||
| 130 | val->intval = jz_battery->status; | ||
| 131 | break; | ||
| 132 | case POWER_SUPPLY_PROP_TECHNOLOGY: | ||
| 133 | val->intval = jz_battery->pdata->info.technology; | ||
| 134 | break; | ||
| 135 | case POWER_SUPPLY_PROP_HEALTH: | ||
| 136 | voltage = jz_battery_read_voltage(jz_battery); | ||
| 137 | if (voltage < info->voltage_min_design) | ||
| 138 | val->intval = POWER_SUPPLY_HEALTH_DEAD; | ||
| 139 | else | ||
| 140 | val->intval = POWER_SUPPLY_HEALTH_GOOD; | ||
| 141 | break; | ||
| 142 | case POWER_SUPPLY_PROP_CAPACITY: | ||
| 143 | val->intval = jz_battery_get_capacity(psy); | ||
| 144 | break; | ||
| 145 | case POWER_SUPPLY_PROP_VOLTAGE_NOW: | ||
| 146 | val->intval = jz_battery_read_voltage(jz_battery); | ||
| 147 | if (val->intval < 0) | ||
| 148 | return val->intval; | ||
| 149 | break; | ||
| 150 | case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: | ||
| 151 | val->intval = info->voltage_max_design; | ||
| 152 | break; | ||
| 153 | case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: | ||
| 154 | val->intval = info->voltage_min_design; | ||
| 155 | break; | ||
| 156 | case POWER_SUPPLY_PROP_PRESENT: | ||
| 157 | val->intval = 1; | ||
| 158 | break; | ||
| 159 | default: | ||
| 160 | return -EINVAL; | ||
| 161 | } | ||
| 162 | return 0; | ||
| 163 | } | ||
| 164 | |||
| 165 | static void jz_battery_external_power_changed(struct power_supply *psy) | ||
| 166 | { | ||
| 167 | struct jz_battery *jz_battery = psy_to_jz_battery(psy); | ||
| 168 | |||
| 169 | cancel_delayed_work(&jz_battery->work); | ||
| 170 | schedule_delayed_work(&jz_battery->work, 0); | ||
| 171 | } | ||
| 172 | |||
| 173 | static irqreturn_t jz_battery_charge_irq(int irq, void *data) | ||
| 174 | { | ||
| 175 | struct jz_battery *jz_battery = data; | ||
| 176 | |||
| 177 | cancel_delayed_work(&jz_battery->work); | ||
| 178 | schedule_delayed_work(&jz_battery->work, 0); | ||
| 179 | |||
| 180 | return IRQ_HANDLED; | ||
| 181 | } | ||
| 182 | |||
| 183 | static void jz_battery_update(struct jz_battery *jz_battery) | ||
| 184 | { | ||
| 185 | int status; | ||
| 186 | long voltage; | ||
| 187 | bool has_changed = false; | ||
| 188 | int is_charging; | ||
| 189 | |||
| 190 | if (gpio_is_valid(jz_battery->pdata->gpio_charge)) { | ||
| 191 | is_charging = gpio_get_value(jz_battery->pdata->gpio_charge); | ||
| 192 | is_charging ^= jz_battery->pdata->gpio_charge_active_low; | ||
| 193 | if (is_charging) | ||
| 194 | status = POWER_SUPPLY_STATUS_CHARGING; | ||
| 195 | else | ||
| 196 | status = POWER_SUPPLY_STATUS_NOT_CHARGING; | ||
| 197 | |||
| 198 | if (status != jz_battery->status) { | ||
| 199 | jz_battery->status = status; | ||
| 200 | has_changed = true; | ||
| 201 | } | ||
| 202 | } | ||
| 203 | |||
| 204 | voltage = jz_battery_read_voltage(jz_battery); | ||
| 205 | if (abs(voltage - jz_battery->voltage) < 50000) { | ||
| 206 | jz_battery->voltage = voltage; | ||
| 207 | has_changed = true; | ||
| 208 | } | ||
| 209 | |||
| 210 | if (has_changed) | ||
| 211 | power_supply_changed(&jz_battery->battery); | ||
| 212 | } | ||
| 213 | |||
| 214 | static enum power_supply_property jz_battery_properties[] = { | ||
| 215 | POWER_SUPPLY_PROP_STATUS, | ||
| 216 | POWER_SUPPLY_PROP_TECHNOLOGY, | ||
| 217 | POWER_SUPPLY_PROP_HEALTH, | ||
| 218 | POWER_SUPPLY_PROP_CAPACITY, | ||
| 219 | POWER_SUPPLY_PROP_VOLTAGE_NOW, | ||
| 220 | POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, | ||
| 221 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, | ||
| 222 | POWER_SUPPLY_PROP_PRESENT, | ||
| 223 | }; | ||
| 224 | |||
| 225 | static void jz_battery_work(struct work_struct *work) | ||
| 226 | { | ||
| 227 | /* Too small interval will increase system workload */ | ||
| 228 | const int interval = HZ * 30; | ||
| 229 | struct jz_battery *jz_battery = container_of(work, struct jz_battery, | ||
| 230 | work.work); | ||
| 231 | |||
| 232 | jz_battery_update(jz_battery); | ||
| 233 | schedule_delayed_work(&jz_battery->work, interval); | ||
| 234 | } | ||
| 235 | |||
| 236 | static int __devinit jz_battery_probe(struct platform_device *pdev) | ||
| 237 | { | ||
| 238 | int ret = 0; | ||
| 239 | struct jz_battery_platform_data *pdata = pdev->dev.parent->platform_data; | ||
| 240 | struct jz_battery *jz_battery; | ||
| 241 | struct power_supply *battery; | ||
| 242 | |||
| 243 | jz_battery = kzalloc(sizeof(*jz_battery), GFP_KERNEL); | ||
| 244 | if (!jz_battery) { | ||
| 245 | dev_err(&pdev->dev, "Failed to allocate driver structure\n"); | ||
| 246 | return -ENOMEM; | ||
| 247 | } | ||
| 248 | |||
| 249 | jz_battery->cell = pdev->dev.platform_data; | ||
| 250 | |||
| 251 | jz_battery->irq = platform_get_irq(pdev, 0); | ||
| 252 | if (jz_battery->irq < 0) { | ||
| 253 | ret = jz_battery->irq; | ||
| 254 | dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret); | ||
| 255 | goto err_free; | ||
| 256 | } | ||
| 257 | |||
| 258 | jz_battery->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 259 | if (!jz_battery->mem) { | ||
| 260 | ret = -ENOENT; | ||
| 261 | dev_err(&pdev->dev, "Failed to get platform mmio resource\n"); | ||
| 262 | goto err_free; | ||
| 263 | } | ||
| 264 | |||
| 265 | jz_battery->mem = request_mem_region(jz_battery->mem->start, | ||
| 266 | resource_size(jz_battery->mem), pdev->name); | ||
| 267 | if (!jz_battery->mem) { | ||
| 268 | ret = -EBUSY; | ||
| 269 | dev_err(&pdev->dev, "Failed to request mmio memory region\n"); | ||
| 270 | goto err_free; | ||
| 271 | } | ||
| 272 | |||
| 273 | jz_battery->base = ioremap_nocache(jz_battery->mem->start, | ||
| 274 | resource_size(jz_battery->mem)); | ||
| 275 | if (!jz_battery->base) { | ||
| 276 | ret = -EBUSY; | ||
| 277 | dev_err(&pdev->dev, "Failed to ioremap mmio memory\n"); | ||
| 278 | goto err_release_mem_region; | ||
| 279 | } | ||
| 280 | |||
| 281 | battery = &jz_battery->battery; | ||
| 282 | battery->name = pdata->info.name; | ||
| 283 | battery->type = POWER_SUPPLY_TYPE_BATTERY; | ||
| 284 | battery->properties = jz_battery_properties; | ||
| 285 | battery->num_properties = ARRAY_SIZE(jz_battery_properties); | ||
| 286 | battery->get_property = jz_battery_get_property; | ||
| 287 | battery->external_power_changed = jz_battery_external_power_changed; | ||
| 288 | battery->use_for_apm = 1; | ||
| 289 | |||
| 290 | jz_battery->pdata = pdata; | ||
| 291 | jz_battery->pdev = pdev; | ||
| 292 | |||
| 293 | init_completion(&jz_battery->read_completion); | ||
| 294 | |||
| 295 | INIT_DELAYED_WORK(&jz_battery->work, jz_battery_work); | ||
| 296 | |||
| 297 | ret = request_irq(jz_battery->irq, jz_battery_irq_handler, 0, pdev->name, | ||
| 298 | jz_battery); | ||
| 299 | if (ret) { | ||
| 300 | dev_err(&pdev->dev, "Failed to request irq %d\n", ret); | ||
| 301 | goto err_iounmap; | ||
| 302 | } | ||
| 303 | disable_irq(jz_battery->irq); | ||
| 304 | |||
| 305 | if (gpio_is_valid(pdata->gpio_charge)) { | ||
| 306 | ret = gpio_request(pdata->gpio_charge, dev_name(&pdev->dev)); | ||
| 307 | if (ret) { | ||
| 308 | dev_err(&pdev->dev, "charger state gpio request failed.\n"); | ||
| 309 | goto err_free_irq; | ||
| 310 | } | ||
| 311 | ret = gpio_direction_input(pdata->gpio_charge); | ||
| 312 | if (ret) { | ||
| 313 | dev_err(&pdev->dev, "charger state gpio set direction failed.\n"); | ||
| 314 | goto err_free_gpio; | ||
| 315 | } | ||
| 316 | |||
| 317 | jz_battery->charge_irq = gpio_to_irq(pdata->gpio_charge); | ||
| 318 | |||
| 319 | if (jz_battery->charge_irq >= 0) { | ||
| 320 | ret = request_irq(jz_battery->charge_irq, | ||
| 321 | jz_battery_charge_irq, | ||
| 322 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, | ||
| 323 | dev_name(&pdev->dev), jz_battery); | ||
| 324 | if (ret) { | ||
| 325 | dev_err(&pdev->dev, "Failed to request charge irq: %d\n", ret); | ||
| 326 | goto err_free_gpio; | ||
| 327 | } | ||
| 328 | } | ||
| 329 | } else { | ||
| 330 | jz_battery->charge_irq = -1; | ||
| 331 | } | ||
| 332 | |||
| 333 | if (jz_battery->pdata->info.voltage_max_design <= 2500000) | ||
| 334 | jz4740_adc_set_config(pdev->dev.parent, JZ_ADC_CONFIG_BAT_MB, | ||
| 335 | JZ_ADC_CONFIG_BAT_MB); | ||
| 336 | else | ||
| 337 | jz4740_adc_set_config(pdev->dev.parent, JZ_ADC_CONFIG_BAT_MB, 0); | ||
| 338 | |||
| 339 | ret = power_supply_register(&pdev->dev, &jz_battery->battery); | ||
| 340 | if (ret) { | ||
| 341 | dev_err(&pdev->dev, "power supply battery register failed.\n"); | ||
| 342 | goto err_free_charge_irq; | ||
| 343 | } | ||
| 344 | |||
| 345 | platform_set_drvdata(pdev, jz_battery); | ||
| 346 | schedule_delayed_work(&jz_battery->work, 0); | ||
| 347 | |||
| 348 | return 0; | ||
| 349 | |||
| 350 | err_free_charge_irq: | ||
| 351 | if (jz_battery->charge_irq >= 0) | ||
| 352 | free_irq(jz_battery->charge_irq, jz_battery); | ||
| 353 | err_free_gpio: | ||
| 354 | if (gpio_is_valid(pdata->gpio_charge)) | ||
| 355 | gpio_free(jz_battery->pdata->gpio_charge); | ||
| 356 | err_free_irq: | ||
| 357 | free_irq(jz_battery->irq, jz_battery); | ||
| 358 | err_iounmap: | ||
| 359 | platform_set_drvdata(pdev, NULL); | ||
| 360 | iounmap(jz_battery->base); | ||
| 361 | err_release_mem_region: | ||
| 362 | release_mem_region(jz_battery->mem->start, resource_size(jz_battery->mem)); | ||
| 363 | err_free: | ||
| 364 | kfree(jz_battery); | ||
| 365 | return ret; | ||
| 366 | } | ||
| 367 | |||
| 368 | static int __devexit jz_battery_remove(struct platform_device *pdev) | ||
| 369 | { | ||
| 370 | struct jz_battery *jz_battery = platform_get_drvdata(pdev); | ||
| 371 | |||
| 372 | cancel_delayed_work_sync(&jz_battery->work); | ||
| 373 | |||
| 374 | if (gpio_is_valid(jz_battery->pdata->gpio_charge)) { | ||
| 375 | if (jz_battery->charge_irq >= 0) | ||
| 376 | free_irq(jz_battery->charge_irq, jz_battery); | ||
| 377 | gpio_free(jz_battery->pdata->gpio_charge); | ||
| 378 | } | ||
| 379 | |||
| 380 | power_supply_unregister(&jz_battery->battery); | ||
| 381 | |||
| 382 | free_irq(jz_battery->irq, jz_battery); | ||
| 383 | |||
| 384 | iounmap(jz_battery->base); | ||
| 385 | release_mem_region(jz_battery->mem->start, resource_size(jz_battery->mem)); | ||
| 386 | |||
| 387 | return 0; | ||
| 388 | } | ||
| 389 | |||
| 390 | #ifdef CONFIG_PM | ||
| 391 | static int jz_battery_suspend(struct device *dev) | ||
| 392 | { | ||
| 393 | struct jz_battery *jz_battery = dev_get_drvdata(dev); | ||
| 394 | |||
| 395 | cancel_delayed_work_sync(&jz_battery->work); | ||
| 396 | jz_battery->status = POWER_SUPPLY_STATUS_UNKNOWN; | ||
| 397 | |||
| 398 | return 0; | ||
| 399 | } | ||
| 400 | |||
| 401 | static int jz_battery_resume(struct device *dev) | ||
| 402 | { | ||
| 403 | struct jz_battery *jz_battery = dev_get_drvdata(dev); | ||
| 404 | |||
| 405 | schedule_delayed_work(&jz_battery->work, 0); | ||
| 406 | |||
| 407 | return 0; | ||
| 408 | } | ||
| 409 | |||
| 410 | static const struct dev_pm_ops jz_battery_pm_ops = { | ||
| 411 | .suspend = jz_battery_suspend, | ||
| 412 | .resume = jz_battery_resume, | ||
| 413 | }; | ||
| 414 | |||
| 415 | #define JZ_BATTERY_PM_OPS (&jz_battery_pm_ops) | ||
| 416 | #else | ||
| 417 | #define JZ_BATTERY_PM_OPS NULL | ||
| 418 | #endif | ||
| 419 | |||
| 420 | static struct platform_driver jz_battery_driver = { | ||
| 421 | .probe = jz_battery_probe, | ||
| 422 | .remove = __devexit_p(jz_battery_remove), | ||
| 423 | .driver = { | ||
| 424 | .name = "jz4740-battery", | ||
| 425 | .owner = THIS_MODULE, | ||
| 426 | .pm = JZ_BATTERY_PM_OPS, | ||
| 427 | }, | ||
| 428 | }; | ||
| 429 | |||
| 430 | static int __init jz_battery_init(void) | ||
| 431 | { | ||
| 432 | return platform_driver_register(&jz_battery_driver); | ||
| 433 | } | ||
| 434 | module_init(jz_battery_init); | ||
| 435 | |||
| 436 | static void __exit jz_battery_exit(void) | ||
| 437 | { | ||
| 438 | platform_driver_unregister(&jz_battery_driver); | ||
| 439 | } | ||
| 440 | module_exit(jz_battery_exit); | ||
| 441 | |||
| 442 | MODULE_ALIAS("platform:jz4740-battery"); | ||
| 443 | MODULE_LICENSE("GPL"); | ||
| 444 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
| 445 | MODULE_DESCRIPTION("JZ4740 SoC battery driver"); | ||
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 10ba12c8c5e0..4301a6c7ed3b 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
| @@ -774,7 +774,7 @@ config RTC_DRV_AT91SAM9_GPBR | |||
| 774 | 774 | ||
| 775 | config RTC_DRV_AU1XXX | 775 | config RTC_DRV_AU1XXX |
| 776 | tristate "Au1xxx Counter0 RTC support" | 776 | tristate "Au1xxx Counter0 RTC support" |
| 777 | depends on SOC_AU1X00 | 777 | depends on MIPS_ALCHEMY |
| 778 | help | 778 | help |
| 779 | This is a driver for the Au1xxx on-chip Counter0 (Time-Of-Year | 779 | This is a driver for the Au1xxx on-chip Counter0 (Time-Of-Year |
| 780 | counter) to be used as a RTC. | 780 | counter) to be used as a RTC. |
| @@ -905,4 +905,15 @@ config RTC_DRV_MPC5121 | |||
| 905 | This driver can also be built as a module. If so, the module | 905 | This driver can also be built as a module. If so, the module |
| 906 | will be called rtc-mpc5121. | 906 | will be called rtc-mpc5121. |
| 907 | 907 | ||
| 908 | config RTC_DRV_JZ4740 | ||
| 909 | tristate "Ingenic JZ4740 SoC" | ||
| 910 | depends on RTC_CLASS | ||
| 911 | depends on MACH_JZ4740 | ||
| 912 | help | ||
| 913 | If you say yes here you get support for the Ingenic JZ4740 SoC RTC | ||
| 914 | controller. | ||
| 915 | |||
| 916 | This driver can also be buillt as a module. If so, the module | ||
| 917 | will be called rtc-jz4740. | ||
| 918 | |||
| 908 | endif # RTC_CLASS | 919 | endif # RTC_CLASS |
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 5adbba7cf89c..fedf9bb36593 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile | |||
| @@ -47,6 +47,7 @@ obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o | |||
| 47 | obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o | 47 | obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o |
| 48 | obj-$(CONFIG_RTC_DRV_GENERIC) += rtc-generic.o | 48 | obj-$(CONFIG_RTC_DRV_GENERIC) += rtc-generic.o |
| 49 | obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o | 49 | obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o |
| 50 | obj-$(CONFIG_RTC_DRV_JZ4740) += rtc-jz4740.o | ||
| 50 | obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o | 51 | obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o |
| 51 | obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o | 52 | obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o |
| 52 | obj-$(CONFIG_RTC_DRV_M48T35) += rtc-m48t35.o | 53 | obj-$(CONFIG_RTC_DRV_M48T35) += rtc-m48t35.o |
diff --git a/drivers/rtc/rtc-jz4740.c b/drivers/rtc/rtc-jz4740.c new file mode 100644 index 000000000000..2619d57b91d7 --- /dev/null +++ b/drivers/rtc/rtc-jz4740.c | |||
| @@ -0,0 +1,345 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC RTC driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/rtc.h> | ||
| 20 | #include <linux/slab.h> | ||
| 21 | #include <linux/spinlock.h> | ||
| 22 | |||
| 23 | #define JZ_REG_RTC_CTRL 0x00 | ||
| 24 | #define JZ_REG_RTC_SEC 0x04 | ||
| 25 | #define JZ_REG_RTC_SEC_ALARM 0x08 | ||
| 26 | #define JZ_REG_RTC_REGULATOR 0x0C | ||
| 27 | #define JZ_REG_RTC_HIBERNATE 0x20 | ||
| 28 | #define JZ_REG_RTC_SCRATCHPAD 0x34 | ||
| 29 | |||
| 30 | #define JZ_RTC_CTRL_WRDY BIT(7) | ||
| 31 | #define JZ_RTC_CTRL_1HZ BIT(6) | ||
| 32 | #define JZ_RTC_CTRL_1HZ_IRQ BIT(5) | ||
| 33 | #define JZ_RTC_CTRL_AF BIT(4) | ||
| 34 | #define JZ_RTC_CTRL_AF_IRQ BIT(3) | ||
| 35 | #define JZ_RTC_CTRL_AE BIT(2) | ||
| 36 | #define JZ_RTC_CTRL_ENABLE BIT(0) | ||
| 37 | |||
| 38 | struct jz4740_rtc { | ||
| 39 | struct resource *mem; | ||
| 40 | void __iomem *base; | ||
| 41 | |||
| 42 | struct rtc_device *rtc; | ||
| 43 | |||
| 44 | unsigned int irq; | ||
| 45 | |||
| 46 | spinlock_t lock; | ||
| 47 | }; | ||
| 48 | |||
| 49 | static inline uint32_t jz4740_rtc_reg_read(struct jz4740_rtc *rtc, size_t reg) | ||
| 50 | { | ||
| 51 | return readl(rtc->base + reg); | ||
| 52 | } | ||
| 53 | |||
| 54 | static int jz4740_rtc_wait_write_ready(struct jz4740_rtc *rtc) | ||
| 55 | { | ||
| 56 | uint32_t ctrl; | ||
| 57 | int timeout = 1000; | ||
| 58 | |||
| 59 | do { | ||
| 60 | ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); | ||
| 61 | } while (!(ctrl & JZ_RTC_CTRL_WRDY) && --timeout); | ||
| 62 | |||
| 63 | return timeout ? 0 : -EIO; | ||
| 64 | } | ||
| 65 | |||
| 66 | static inline int jz4740_rtc_reg_write(struct jz4740_rtc *rtc, size_t reg, | ||
| 67 | uint32_t val) | ||
| 68 | { | ||
| 69 | int ret; | ||
| 70 | ret = jz4740_rtc_wait_write_ready(rtc); | ||
| 71 | if (ret == 0) | ||
| 72 | writel(val, rtc->base + reg); | ||
| 73 | |||
| 74 | return ret; | ||
| 75 | } | ||
| 76 | |||
| 77 | static int jz4740_rtc_ctrl_set_bits(struct jz4740_rtc *rtc, uint32_t mask, | ||
| 78 | bool set) | ||
| 79 | { | ||
| 80 | int ret; | ||
| 81 | unsigned long flags; | ||
| 82 | uint32_t ctrl; | ||
| 83 | |||
| 84 | spin_lock_irqsave(&rtc->lock, flags); | ||
| 85 | |||
| 86 | ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); | ||
| 87 | |||
| 88 | /* Don't clear interrupt flags by accident */ | ||
| 89 | ctrl |= JZ_RTC_CTRL_1HZ | JZ_RTC_CTRL_AF; | ||
| 90 | |||
| 91 | if (set) | ||
| 92 | ctrl |= mask; | ||
| 93 | else | ||
| 94 | ctrl &= ~mask; | ||
| 95 | |||
| 96 | ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_CTRL, ctrl); | ||
| 97 | |||
| 98 | spin_unlock_irqrestore(&rtc->lock, flags); | ||
| 99 | |||
| 100 | return ret; | ||
| 101 | } | ||
| 102 | |||
| 103 | static int jz4740_rtc_read_time(struct device *dev, struct rtc_time *time) | ||
| 104 | { | ||
| 105 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 106 | uint32_t secs, secs2; | ||
| 107 | int timeout = 5; | ||
| 108 | |||
| 109 | /* If the seconds register is read while it is updated, it can contain a | ||
| 110 | * bogus value. This can be avoided by making sure that two consecutive | ||
| 111 | * reads have the same value. | ||
| 112 | */ | ||
| 113 | secs = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); | ||
| 114 | secs2 = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); | ||
| 115 | |||
| 116 | while (secs != secs2 && --timeout) { | ||
| 117 | secs = secs2; | ||
| 118 | secs2 = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); | ||
| 119 | } | ||
| 120 | |||
| 121 | if (timeout == 0) | ||
| 122 | return -EIO; | ||
| 123 | |||
| 124 | rtc_time_to_tm(secs, time); | ||
| 125 | |||
| 126 | return rtc_valid_tm(time); | ||
| 127 | } | ||
| 128 | |||
| 129 | static int jz4740_rtc_set_mmss(struct device *dev, unsigned long secs) | ||
| 130 | { | ||
| 131 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 132 | |||
| 133 | return jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, secs); | ||
| 134 | } | ||
| 135 | |||
| 136 | static int jz4740_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
| 137 | { | ||
| 138 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 139 | uint32_t secs; | ||
| 140 | uint32_t ctrl; | ||
| 141 | |||
| 142 | secs = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC_ALARM); | ||
| 143 | |||
| 144 | ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); | ||
| 145 | |||
| 146 | alrm->enabled = !!(ctrl & JZ_RTC_CTRL_AE); | ||
| 147 | alrm->pending = !!(ctrl & JZ_RTC_CTRL_AF); | ||
| 148 | |||
| 149 | rtc_time_to_tm(secs, &alrm->time); | ||
| 150 | |||
| 151 | return rtc_valid_tm(&alrm->time); | ||
| 152 | } | ||
| 153 | |||
| 154 | static int jz4740_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
| 155 | { | ||
| 156 | int ret; | ||
| 157 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 158 | unsigned long secs; | ||
| 159 | |||
| 160 | rtc_tm_to_time(&alrm->time, &secs); | ||
| 161 | |||
| 162 | ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC_ALARM, secs); | ||
| 163 | if (!ret) | ||
| 164 | ret = jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_AE, alrm->enabled); | ||
| 165 | |||
| 166 | return ret; | ||
| 167 | } | ||
| 168 | |||
| 169 | static int jz4740_rtc_update_irq_enable(struct device *dev, unsigned int enable) | ||
| 170 | { | ||
| 171 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 172 | return jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_1HZ_IRQ, enable); | ||
| 173 | } | ||
| 174 | |||
| 175 | static int jz4740_rtc_alarm_irq_enable(struct device *dev, unsigned int enable) | ||
| 176 | { | ||
| 177 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 178 | return jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_AF_IRQ, enable); | ||
| 179 | } | ||
| 180 | |||
| 181 | static struct rtc_class_ops jz4740_rtc_ops = { | ||
| 182 | .read_time = jz4740_rtc_read_time, | ||
| 183 | .set_mmss = jz4740_rtc_set_mmss, | ||
| 184 | .read_alarm = jz4740_rtc_read_alarm, | ||
| 185 | .set_alarm = jz4740_rtc_set_alarm, | ||
| 186 | .update_irq_enable = jz4740_rtc_update_irq_enable, | ||
| 187 | .alarm_irq_enable = jz4740_rtc_alarm_irq_enable, | ||
| 188 | }; | ||
| 189 | |||
| 190 | static irqreturn_t jz4740_rtc_irq(int irq, void *data) | ||
| 191 | { | ||
| 192 | struct jz4740_rtc *rtc = data; | ||
| 193 | uint32_t ctrl; | ||
| 194 | unsigned long events = 0; | ||
| 195 | |||
| 196 | ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); | ||
| 197 | |||
| 198 | if (ctrl & JZ_RTC_CTRL_1HZ) | ||
| 199 | events |= (RTC_UF | RTC_IRQF); | ||
| 200 | |||
| 201 | if (ctrl & JZ_RTC_CTRL_AF) | ||
| 202 | events |= (RTC_AF | RTC_IRQF); | ||
| 203 | |||
| 204 | rtc_update_irq(rtc->rtc, 1, events); | ||
| 205 | |||
| 206 | jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_1HZ | JZ_RTC_CTRL_AF, false); | ||
| 207 | |||
| 208 | return IRQ_HANDLED; | ||
| 209 | } | ||
| 210 | |||
| 211 | void jz4740_rtc_poweroff(struct device *dev) | ||
| 212 | { | ||
| 213 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
| 214 | jz4740_rtc_reg_write(rtc, JZ_REG_RTC_HIBERNATE, 1); | ||
| 215 | } | ||
| 216 | EXPORT_SYMBOL_GPL(jz4740_rtc_poweroff); | ||
| 217 | |||
| 218 | static int __devinit jz4740_rtc_probe(struct platform_device *pdev) | ||
| 219 | { | ||
| 220 | int ret; | ||
| 221 | struct jz4740_rtc *rtc; | ||
| 222 | uint32_t scratchpad; | ||
| 223 | |||
| 224 | rtc = kzalloc(sizeof(*rtc), GFP_KERNEL); | ||
| 225 | if (!rtc) | ||
| 226 | return -ENOMEM; | ||
| 227 | |||
| 228 | rtc->irq = platform_get_irq(pdev, 0); | ||
| 229 | if (rtc->irq < 0) { | ||
| 230 | ret = -ENOENT; | ||
| 231 | dev_err(&pdev->dev, "Failed to get platform irq\n"); | ||
| 232 | goto err_free; | ||
| 233 | } | ||
| 234 | |||
| 235 | rtc->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 236 | if (!rtc->mem) { | ||
| 237 | ret = -ENOENT; | ||
| 238 | dev_err(&pdev->dev, "Failed to get platform mmio memory\n"); | ||
| 239 | goto err_free; | ||
| 240 | } | ||
| 241 | |||
| 242 | rtc->mem = request_mem_region(rtc->mem->start, resource_size(rtc->mem), | ||
| 243 | pdev->name); | ||
| 244 | if (!rtc->mem) { | ||
| 245 | ret = -EBUSY; | ||
| 246 | dev_err(&pdev->dev, "Failed to request mmio memory region\n"); | ||
| 247 | goto err_free; | ||
| 248 | } | ||
| 249 | |||
| 250 | rtc->base = ioremap_nocache(rtc->mem->start, resource_size(rtc->mem)); | ||
| 251 | if (!rtc->base) { | ||
| 252 | ret = -EBUSY; | ||
| 253 | dev_err(&pdev->dev, "Failed to ioremap mmio memory\n"); | ||
| 254 | goto err_release_mem_region; | ||
| 255 | } | ||
| 256 | |||
| 257 | spin_lock_init(&rtc->lock); | ||
| 258 | |||
| 259 | platform_set_drvdata(pdev, rtc); | ||
| 260 | |||
| 261 | rtc->rtc = rtc_device_register(pdev->name, &pdev->dev, &jz4740_rtc_ops, | ||
| 262 | THIS_MODULE); | ||
| 263 | if (IS_ERR(rtc->rtc)) { | ||
| 264 | ret = PTR_ERR(rtc->rtc); | ||
| 265 | dev_err(&pdev->dev, "Failed to register rtc device: %d\n", ret); | ||
| 266 | goto err_iounmap; | ||
| 267 | } | ||
| 268 | |||
| 269 | ret = request_irq(rtc->irq, jz4740_rtc_irq, 0, | ||
| 270 | pdev->name, rtc); | ||
| 271 | if (ret) { | ||
| 272 | dev_err(&pdev->dev, "Failed to request rtc irq: %d\n", ret); | ||
| 273 | goto err_unregister_rtc; | ||
| 274 | } | ||
| 275 | |||
| 276 | scratchpad = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SCRATCHPAD); | ||
| 277 | if (scratchpad != 0x12345678) { | ||
| 278 | ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SCRATCHPAD, 0x12345678); | ||
| 279 | ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, 0); | ||
| 280 | if (ret) { | ||
| 281 | dev_err(&pdev->dev, "Could not write write to RTC registers\n"); | ||
| 282 | goto err_free_irq; | ||
| 283 | } | ||
| 284 | } | ||
| 285 | |||
| 286 | return 0; | ||
| 287 | |||
| 288 | err_free_irq: | ||
| 289 | free_irq(rtc->irq, rtc); | ||
| 290 | err_unregister_rtc: | ||
| 291 | rtc_device_unregister(rtc->rtc); | ||
| 292 | err_iounmap: | ||
| 293 | platform_set_drvdata(pdev, NULL); | ||
| 294 | iounmap(rtc->base); | ||
| 295 | err_release_mem_region: | ||
| 296 | release_mem_region(rtc->mem->start, resource_size(rtc->mem)); | ||
| 297 | err_free: | ||
| 298 | kfree(rtc); | ||
| 299 | |||
| 300 | return ret; | ||
| 301 | } | ||
| 302 | |||
| 303 | static int __devexit jz4740_rtc_remove(struct platform_device *pdev) | ||
| 304 | { | ||
| 305 | struct jz4740_rtc *rtc = platform_get_drvdata(pdev); | ||
| 306 | |||
| 307 | free_irq(rtc->irq, rtc); | ||
| 308 | |||
| 309 | rtc_device_unregister(rtc->rtc); | ||
| 310 | |||
| 311 | iounmap(rtc->base); | ||
| 312 | release_mem_region(rtc->mem->start, resource_size(rtc->mem)); | ||
| 313 | |||
| 314 | kfree(rtc); | ||
| 315 | |||
| 316 | platform_set_drvdata(pdev, NULL); | ||
| 317 | |||
| 318 | return 0; | ||
| 319 | } | ||
| 320 | |||
| 321 | struct platform_driver jz4740_rtc_driver = { | ||
| 322 | .probe = jz4740_rtc_probe, | ||
| 323 | .remove = __devexit_p(jz4740_rtc_remove), | ||
| 324 | .driver = { | ||
| 325 | .name = "jz4740-rtc", | ||
| 326 | .owner = THIS_MODULE, | ||
| 327 | }, | ||
| 328 | }; | ||
| 329 | |||
| 330 | static int __init jz4740_rtc_init(void) | ||
| 331 | { | ||
| 332 | return platform_driver_register(&jz4740_rtc_driver); | ||
| 333 | } | ||
| 334 | module_init(jz4740_rtc_init); | ||
| 335 | |||
| 336 | static void __exit jz4740_rtc_exit(void) | ||
| 337 | { | ||
| 338 | platform_driver_unregister(&jz4740_rtc_driver); | ||
| 339 | } | ||
| 340 | module_exit(jz4740_rtc_exit); | ||
| 341 | |||
| 342 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
| 343 | MODULE_LICENSE("GPL"); | ||
| 344 | MODULE_DESCRIPTION("RTC driver for the JZ4740 SoC\n"); | ||
| 345 | MODULE_ALIAS("platform:jz4740-rtc"); | ||
diff --git a/drivers/sbus/char/display7seg.c b/drivers/sbus/char/display7seg.c index 7baf1b644039..4ad4d2c91075 100644 --- a/drivers/sbus/char/display7seg.c +++ b/drivers/sbus/char/display7seg.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/miscdevice.h> | 13 | #include <linux/miscdevice.h> |
| 14 | #include <linux/ioport.h> /* request_region */ | 14 | #include <linux/ioport.h> /* request_region */ |
| 15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
| 16 | #include <linux/smp_lock.h> | 16 | #include <linux/mutex.h> |
| 17 | #include <linux/of.h> | 17 | #include <linux/of.h> |
| 18 | #include <linux/of_device.h> | 18 | #include <linux/of_device.h> |
| 19 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| @@ -26,6 +26,7 @@ | |||
| 26 | #define DRIVER_NAME "d7s" | 26 | #define DRIVER_NAME "d7s" |
| 27 | #define PFX DRIVER_NAME ": " | 27 | #define PFX DRIVER_NAME ": " |
| 28 | 28 | ||
| 29 | static DEFINE_MUTEX(d7s_mutex); | ||
| 29 | static int sol_compat = 0; /* Solaris compatibility mode */ | 30 | static int sol_compat = 0; /* Solaris compatibility mode */ |
| 30 | 31 | ||
| 31 | /* Solaris compatibility flag - | 32 | /* Solaris compatibility flag - |
| @@ -74,7 +75,6 @@ static int d7s_open(struct inode *inode, struct file *f) | |||
| 74 | { | 75 | { |
| 75 | if (D7S_MINOR != iminor(inode)) | 76 | if (D7S_MINOR != iminor(inode)) |
| 76 | return -ENODEV; | 77 | return -ENODEV; |
| 77 | cycle_kernel_lock(); | ||
| 78 | atomic_inc(&d7s_users); | 78 | atomic_inc(&d7s_users); |
| 79 | return 0; | 79 | return 0; |
| 80 | } | 80 | } |
| @@ -110,7 +110,7 @@ static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 110 | if (D7S_MINOR != iminor(file->f_path.dentry->d_inode)) | 110 | if (D7S_MINOR != iminor(file->f_path.dentry->d_inode)) |
| 111 | return -ENODEV; | 111 | return -ENODEV; |
| 112 | 112 | ||
| 113 | lock_kernel(); | 113 | mutex_lock(&d7s_mutex); |
| 114 | switch (cmd) { | 114 | switch (cmd) { |
| 115 | case D7SIOCWR: | 115 | case D7SIOCWR: |
| 116 | /* assign device register values we mask-out D7S_FLIP | 116 | /* assign device register values we mask-out D7S_FLIP |
| @@ -151,7 +151,7 @@ static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 151 | writeb(regs, p->regs); | 151 | writeb(regs, p->regs); |
| 152 | break; | 152 | break; |
| 153 | }; | 153 | }; |
| 154 | unlock_kernel(); | 154 | mutex_unlock(&d7s_mutex); |
| 155 | 155 | ||
| 156 | return error; | 156 | return error; |
| 157 | } | 157 | } |
diff --git a/drivers/sbus/char/envctrl.c b/drivers/sbus/char/envctrl.c index c8166ecf5276..bd0bbc621351 100644 --- a/drivers/sbus/char/envctrl.c +++ b/drivers/sbus/char/envctrl.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <linux/kmod.h> | 27 | #include <linux/kmod.h> |
| 28 | #include <linux/reboot.h> | 28 | #include <linux/reboot.h> |
| 29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
| 30 | #include <linux/smp_lock.h> | ||
| 31 | #include <linux/of.h> | 30 | #include <linux/of.h> |
| 32 | #include <linux/of_device.h> | 31 | #include <linux/of_device.h> |
| 33 | 32 | ||
| @@ -699,7 +698,6 @@ envctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 699 | static int | 698 | static int |
| 700 | envctrl_open(struct inode *inode, struct file *file) | 699 | envctrl_open(struct inode *inode, struct file *file) |
| 701 | { | 700 | { |
| 702 | cycle_kernel_lock(); | ||
| 703 | file->private_data = NULL; | 701 | file->private_data = NULL; |
| 704 | return 0; | 702 | return 0; |
| 705 | } | 703 | } |
diff --git a/drivers/sbus/char/flash.c b/drivers/sbus/char/flash.c index 368d66294d83..ed9494e18859 100644 --- a/drivers/sbus/char/flash.c +++ b/drivers/sbus/char/flash.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include <linux/fcntl.h> | 10 | #include <linux/fcntl.h> |
| 11 | #include <linux/poll.h> | 11 | #include <linux/poll.h> |
| 12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
| 13 | #include <linux/smp_lock.h> | 13 | #include <linux/mutex.h> |
| 14 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
| 15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
| 16 | #include <linux/of.h> | 16 | #include <linux/of.h> |
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 23 | #include <asm/upa.h> | 23 | #include <asm/upa.h> |
| 24 | 24 | ||
| 25 | static DEFINE_MUTEX(flash_mutex); | ||
| 25 | static DEFINE_SPINLOCK(flash_lock); | 26 | static DEFINE_SPINLOCK(flash_lock); |
| 26 | static struct { | 27 | static struct { |
| 27 | unsigned long read_base; /* Physical read address */ | 28 | unsigned long read_base; /* Physical read address */ |
| @@ -80,7 +81,7 @@ flash_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 80 | static long long | 81 | static long long |
| 81 | flash_llseek(struct file *file, long long offset, int origin) | 82 | flash_llseek(struct file *file, long long offset, int origin) |
| 82 | { | 83 | { |
| 83 | lock_kernel(); | 84 | mutex_lock(&flash_mutex); |
| 84 | switch (origin) { | 85 | switch (origin) { |
| 85 | case 0: | 86 | case 0: |
| 86 | file->f_pos = offset; | 87 | file->f_pos = offset; |
| @@ -94,10 +95,10 @@ flash_llseek(struct file *file, long long offset, int origin) | |||
| 94 | file->f_pos = flash.read_size; | 95 | file->f_pos = flash.read_size; |
| 95 | break; | 96 | break; |
| 96 | default: | 97 | default: |
| 97 | unlock_kernel(); | 98 | mutex_unlock(&flash_mutex); |
| 98 | return -EINVAL; | 99 | return -EINVAL; |
| 99 | } | 100 | } |
| 100 | unlock_kernel(); | 101 | mutex_unlock(&flash_mutex); |
| 101 | return file->f_pos; | 102 | return file->f_pos; |
| 102 | } | 103 | } |
| 103 | 104 | ||
| @@ -125,13 +126,13 @@ flash_read(struct file * file, char __user * buf, | |||
| 125 | static int | 126 | static int |
| 126 | flash_open(struct inode *inode, struct file *file) | 127 | flash_open(struct inode *inode, struct file *file) |
| 127 | { | 128 | { |
| 128 | lock_kernel(); | 129 | mutex_lock(&flash_mutex); |
| 129 | if (test_and_set_bit(0, (void *)&flash.busy) != 0) { | 130 | if (test_and_set_bit(0, (void *)&flash.busy) != 0) { |
| 130 | unlock_kernel(); | 131 | mutex_unlock(&flash_mutex); |
| 131 | return -EBUSY; | 132 | return -EBUSY; |
| 132 | } | 133 | } |
| 133 | 134 | ||
| 134 | unlock_kernel(); | 135 | mutex_unlock(&flash_mutex); |
| 135 | return 0; | 136 | return 0; |
| 136 | } | 137 | } |
| 137 | 138 | ||
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c index aacbe14e2e7a..8d6e508222b8 100644 --- a/drivers/sbus/char/openprom.c +++ b/drivers/sbus/char/openprom.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <linux/kernel.h> | 33 | #include <linux/kernel.h> |
| 34 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
| 35 | #include <linux/slab.h> | 35 | #include <linux/slab.h> |
| 36 | #include <linux/smp_lock.h> | 36 | #include <linux/mutex.h> |
| 37 | #include <linux/string.h> | 37 | #include <linux/string.h> |
| 38 | #include <linux/miscdevice.h> | 38 | #include <linux/miscdevice.h> |
| 39 | #include <linux/init.h> | 39 | #include <linux/init.h> |
| @@ -61,6 +61,7 @@ typedef struct openprom_private_data | |||
| 61 | } DATA; | 61 | } DATA; |
| 62 | 62 | ||
| 63 | /* ID of the PROM node containing all of the EEPROM options. */ | 63 | /* ID of the PROM node containing all of the EEPROM options. */ |
| 64 | static DEFINE_MUTEX(openprom_mutex); | ||
| 64 | static struct device_node *options_node; | 65 | static struct device_node *options_node; |
| 65 | 66 | ||
| 66 | /* | 67 | /* |
| @@ -316,7 +317,7 @@ static long openprom_sunos_ioctl(struct file * file, | |||
| 316 | if (bufsize < 0) | 317 | if (bufsize < 0) |
| 317 | return bufsize; | 318 | return bufsize; |
| 318 | 319 | ||
| 319 | lock_kernel(); | 320 | mutex_lock(&openprom_mutex); |
| 320 | 321 | ||
| 321 | switch (cmd) { | 322 | switch (cmd) { |
| 322 | case OPROMGETOPT: | 323 | case OPROMGETOPT: |
| @@ -367,7 +368,7 @@ static long openprom_sunos_ioctl(struct file * file, | |||
| 367 | } | 368 | } |
| 368 | 369 | ||
| 369 | kfree(opp); | 370 | kfree(opp); |
| 370 | unlock_kernel(); | 371 | mutex_unlock(&openprom_mutex); |
| 371 | 372 | ||
| 372 | return error; | 373 | return error; |
| 373 | } | 374 | } |
| @@ -558,7 +559,7 @@ static int openprom_bsd_ioctl(struct file * file, | |||
| 558 | void __user *argp = (void __user *)arg; | 559 | void __user *argp = (void __user *)arg; |
| 559 | int err; | 560 | int err; |
| 560 | 561 | ||
| 561 | lock_kernel(); | 562 | mutex_lock(&openprom_mutex); |
| 562 | switch (cmd) { | 563 | switch (cmd) { |
| 563 | case OPIOCGET: | 564 | case OPIOCGET: |
| 564 | err = opiocget(argp, data); | 565 | err = opiocget(argp, data); |
| @@ -589,7 +590,7 @@ static int openprom_bsd_ioctl(struct file * file, | |||
| 589 | err = -EINVAL; | 590 | err = -EINVAL; |
| 590 | break; | 591 | break; |
| 591 | }; | 592 | }; |
| 592 | unlock_kernel(); | 593 | mutex_unlock(&openprom_mutex); |
| 593 | 594 | ||
| 594 | return err; | 595 | return err; |
| 595 | } | 596 | } |
| @@ -697,11 +698,11 @@ static int openprom_open(struct inode * inode, struct file * file) | |||
| 697 | if (!data) | 698 | if (!data) |
| 698 | return -ENOMEM; | 699 | return -ENOMEM; |
| 699 | 700 | ||
| 700 | lock_kernel(); | 701 | mutex_lock(&openprom_mutex); |
| 701 | data->current_node = of_find_node_by_path("/"); | 702 | data->current_node = of_find_node_by_path("/"); |
| 702 | data->lastnode = data->current_node; | 703 | data->lastnode = data->current_node; |
| 703 | file->private_data = (void *) data; | 704 | file->private_data = (void *) data; |
| 704 | unlock_kernel(); | 705 | mutex_unlock(&openprom_mutex); |
| 705 | 706 | ||
| 706 | return 0; | 707 | return 0; |
| 707 | } | 708 | } |
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c index 5f253665a1da..079da4cb45a5 100644 --- a/drivers/sbus/char/uctrl.c +++ b/drivers/sbus/char/uctrl.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include <linux/delay.h> | 9 | #include <linux/delay.h> |
| 10 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
| 11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
| 12 | #include <linux/smp_lock.h> | 12 | #include <linux/mutex.h> |
| 13 | #include <linux/ioport.h> | 13 | #include <linux/ioport.h> |
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 15 | #include <linux/miscdevice.h> | 15 | #include <linux/miscdevice.h> |
| @@ -72,6 +72,7 @@ struct ts102_regs { | |||
| 72 | #define UCTRL_STAT_RXNE_STA 0x04 /* receive FIFO not empty status */ | 72 | #define UCTRL_STAT_RXNE_STA 0x04 /* receive FIFO not empty status */ |
| 73 | #define UCTRL_STAT_RXO_STA 0x08 /* receive FIFO overflow status */ | 73 | #define UCTRL_STAT_RXO_STA 0x08 /* receive FIFO overflow status */ |
| 74 | 74 | ||
| 75 | static DEFINE_MUTEX(uctrl_mutex); | ||
| 75 | static const char *uctrl_extstatus[16] = { | 76 | static const char *uctrl_extstatus[16] = { |
| 76 | "main power available", | 77 | "main power available", |
| 77 | "internal battery attached", | 78 | "internal battery attached", |
| @@ -210,10 +211,10 @@ uctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 210 | static int | 211 | static int |
| 211 | uctrl_open(struct inode *inode, struct file *file) | 212 | uctrl_open(struct inode *inode, struct file *file) |
| 212 | { | 213 | { |
| 213 | lock_kernel(); | 214 | mutex_lock(&uctrl_mutex); |
| 214 | uctrl_get_event_status(global_driver); | 215 | uctrl_get_event_status(global_driver); |
| 215 | uctrl_get_external_status(global_driver); | 216 | uctrl_get_external_status(global_driver); |
| 216 | unlock_kernel(); | 217 | mutex_unlock(&uctrl_mutex); |
| 217 | return 0; | 218 | return 0; |
| 218 | } | 219 | } |
| 219 | 220 | ||
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 891e1dd65f24..09ef57034c9c 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -302,7 +302,7 @@ static const struct serial8250_config uart_config[] = { | |||
| 302 | }, | 302 | }, |
| 303 | }; | 303 | }; |
| 304 | 304 | ||
| 305 | #if defined (CONFIG_SERIAL_8250_AU1X00) | 305 | #if defined(CONFIG_MIPS_ALCHEMY) |
| 306 | 306 | ||
| 307 | /* Au1x00 UART hardware has a weird register layout */ | 307 | /* Au1x00 UART hardware has a weird register layout */ |
| 308 | static const u8 au_io_in_map[] = { | 308 | static const u8 au_io_in_map[] = { |
| @@ -422,7 +422,6 @@ static unsigned int mem32_serial_in(struct uart_port *p, int offset) | |||
| 422 | return readl(p->membase + offset); | 422 | return readl(p->membase + offset); |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | #ifdef CONFIG_SERIAL_8250_AU1X00 | ||
| 426 | static unsigned int au_serial_in(struct uart_port *p, int offset) | 425 | static unsigned int au_serial_in(struct uart_port *p, int offset) |
| 427 | { | 426 | { |
| 428 | offset = map_8250_in_reg(p, offset) << p->regshift; | 427 | offset = map_8250_in_reg(p, offset) << p->regshift; |
| @@ -434,7 +433,6 @@ static void au_serial_out(struct uart_port *p, int offset, int value) | |||
| 434 | offset = map_8250_out_reg(p, offset) << p->regshift; | 433 | offset = map_8250_out_reg(p, offset) << p->regshift; |
| 435 | __raw_writel(value, p->membase + offset); | 434 | __raw_writel(value, p->membase + offset); |
| 436 | } | 435 | } |
| 437 | #endif | ||
| 438 | 436 | ||
| 439 | static unsigned int tsi_serial_in(struct uart_port *p, int offset) | 437 | static unsigned int tsi_serial_in(struct uart_port *p, int offset) |
| 440 | { | 438 | { |
| @@ -503,12 +501,11 @@ static void set_io_from_upio(struct uart_port *p) | |||
| 503 | p->serial_out = mem32_serial_out; | 501 | p->serial_out = mem32_serial_out; |
| 504 | break; | 502 | break; |
| 505 | 503 | ||
| 506 | #ifdef CONFIG_SERIAL_8250_AU1X00 | ||
| 507 | case UPIO_AU: | 504 | case UPIO_AU: |
| 508 | p->serial_in = au_serial_in; | 505 | p->serial_in = au_serial_in; |
| 509 | p->serial_out = au_serial_out; | 506 | p->serial_out = au_serial_out; |
| 510 | break; | 507 | break; |
| 511 | #endif | 508 | |
| 512 | case UPIO_TSI: | 509 | case UPIO_TSI: |
| 513 | p->serial_in = tsi_serial_in; | 510 | p->serial_in = tsi_serial_in; |
| 514 | p->serial_out = tsi_serial_out; | 511 | p->serial_out = tsi_serial_out; |
| @@ -535,9 +532,7 @@ serial_out_sync(struct uart_8250_port *up, int offset, int value) | |||
| 535 | switch (p->iotype) { | 532 | switch (p->iotype) { |
| 536 | case UPIO_MEM: | 533 | case UPIO_MEM: |
| 537 | case UPIO_MEM32: | 534 | case UPIO_MEM32: |
| 538 | #ifdef CONFIG_SERIAL_8250_AU1X00 | ||
| 539 | case UPIO_AU: | 535 | case UPIO_AU: |
| 540 | #endif | ||
| 541 | case UPIO_DWAPB: | 536 | case UPIO_DWAPB: |
| 542 | p->serial_out(p, offset, value); | 537 | p->serial_out(p, offset, value); |
| 543 | p->serial_in(p, UART_LCR); /* safe, no side-effects */ | 538 | p->serial_in(p, UART_LCR); /* safe, no side-effects */ |
| @@ -573,7 +568,7 @@ static inline void _serial_dl_write(struct uart_8250_port *up, int value) | |||
| 573 | serial_outp(up, UART_DLM, value >> 8 & 0xff); | 568 | serial_outp(up, UART_DLM, value >> 8 & 0xff); |
| 574 | } | 569 | } |
| 575 | 570 | ||
| 576 | #if defined(CONFIG_SERIAL_8250_AU1X00) | 571 | #if defined(CONFIG_MIPS_ALCHEMY) |
| 577 | /* Au1x00 haven't got a standard divisor latch */ | 572 | /* Au1x00 haven't got a standard divisor latch */ |
| 578 | static int serial_dl_read(struct uart_8250_port *up) | 573 | static int serial_dl_read(struct uart_8250_port *up) |
| 579 | { | 574 | { |
| @@ -2596,11 +2591,9 @@ static void serial8250_config_port(struct uart_port *port, int flags) | |||
| 2596 | if (flags & UART_CONFIG_TYPE) | 2591 | if (flags & UART_CONFIG_TYPE) |
| 2597 | autoconfig(up, probeflags); | 2592 | autoconfig(up, probeflags); |
| 2598 | 2593 | ||
| 2599 | #ifdef CONFIG_SERIAL_8250_AU1X00 | ||
| 2600 | /* if access method is AU, it is a 16550 with a quirk */ | 2594 | /* if access method is AU, it is a 16550 with a quirk */ |
| 2601 | if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU) | 2595 | if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU) |
| 2602 | up->bugs |= UART_BUG_NOMSR; | 2596 | up->bugs |= UART_BUG_NOMSR; |
| 2603 | #endif | ||
| 2604 | 2597 | ||
| 2605 | if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ) | 2598 | if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ) |
| 2606 | autoconfig_irq(up); | 2599 | autoconfig_irq(up); |
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 8b23165bc5dc..e437ce8c1748 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig | |||
| @@ -258,14 +258,6 @@ config SERIAL_8250_ACORN | |||
| 258 | system, say Y to this option. The driver can handle 1, 2, or 3 port | 258 | system, say Y to this option. The driver can handle 1, 2, or 3 port |
| 259 | cards. If unsure, say N. | 259 | cards. If unsure, say N. |
| 260 | 260 | ||
| 261 | config SERIAL_8250_AU1X00 | ||
| 262 | bool "Au1x00 serial port support" | ||
| 263 | depends on SERIAL_8250 != n && SOC_AU1X00 | ||
| 264 | help | ||
| 265 | If you have an Au1x00 SOC based board and want to use the serial port, | ||
| 266 | say Y to this option. The driver can handle up to 4 serial ports, | ||
| 267 | depending on the SOC. If unsure, say N. | ||
| 268 | |||
| 269 | config SERIAL_8250_RM9K | 261 | config SERIAL_8250_RM9K |
| 270 | bool "Support for MIPS RM9xxx integrated serial port" | 262 | bool "Support for MIPS RM9xxx integrated serial port" |
| 271 | depends on SERIAL_8250 != n && SERIAL_RM9000 | 263 | depends on SERIAL_8250 != n && SERIAL_RM9000 |
diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c index 84a35f699016..1a88b363005c 100644 --- a/drivers/serial/mpc52xx_uart.c +++ b/drivers/serial/mpc52xx_uart.c | |||
| @@ -113,7 +113,9 @@ struct psc_ops { | |||
| 113 | unsigned char (*read_char)(struct uart_port *port); | 113 | unsigned char (*read_char)(struct uart_port *port); |
| 114 | void (*cw_disable_ints)(struct uart_port *port); | 114 | void (*cw_disable_ints)(struct uart_port *port); |
| 115 | void (*cw_restore_ints)(struct uart_port *port); | 115 | void (*cw_restore_ints)(struct uart_port *port); |
| 116 | unsigned long (*getuartclk)(void *p); | 116 | unsigned int (*set_baudrate)(struct uart_port *port, |
| 117 | struct ktermios *new, | ||
| 118 | struct ktermios *old); | ||
| 117 | int (*clock)(struct uart_port *port, int enable); | 119 | int (*clock)(struct uart_port *port, int enable); |
| 118 | int (*fifoc_init)(void); | 120 | int (*fifoc_init)(void); |
| 119 | void (*fifoc_uninit)(void); | 121 | void (*fifoc_uninit)(void); |
| @@ -121,6 +123,16 @@ struct psc_ops { | |||
| 121 | irqreturn_t (*handle_irq)(struct uart_port *port); | 123 | irqreturn_t (*handle_irq)(struct uart_port *port); |
| 122 | }; | 124 | }; |
| 123 | 125 | ||
| 126 | /* setting the prescaler and divisor reg is common for all chips */ | ||
| 127 | static inline void mpc52xx_set_divisor(struct mpc52xx_psc __iomem *psc, | ||
| 128 | u16 prescaler, unsigned int divisor) | ||
| 129 | { | ||
| 130 | /* select prescaler */ | ||
| 131 | out_be16(&psc->mpc52xx_psc_clock_select, prescaler); | ||
| 132 | out_8(&psc->ctur, divisor >> 8); | ||
| 133 | out_8(&psc->ctlr, divisor & 0xff); | ||
| 134 | } | ||
| 135 | |||
| 124 | #ifdef CONFIG_PPC_MPC52xx | 136 | #ifdef CONFIG_PPC_MPC52xx |
| 125 | #define FIFO_52xx(port) ((struct mpc52xx_psc_fifo __iomem *)(PSC(port)+1)) | 137 | #define FIFO_52xx(port) ((struct mpc52xx_psc_fifo __iomem *)(PSC(port)+1)) |
| 126 | static void mpc52xx_psc_fifo_init(struct uart_port *port) | 138 | static void mpc52xx_psc_fifo_init(struct uart_port *port) |
| @@ -128,9 +140,6 @@ static void mpc52xx_psc_fifo_init(struct uart_port *port) | |||
| 128 | struct mpc52xx_psc __iomem *psc = PSC(port); | 140 | struct mpc52xx_psc __iomem *psc = PSC(port); |
| 129 | struct mpc52xx_psc_fifo __iomem *fifo = FIFO_52xx(port); | 141 | struct mpc52xx_psc_fifo __iomem *fifo = FIFO_52xx(port); |
| 130 | 142 | ||
| 131 | /* /32 prescaler */ | ||
| 132 | out_be16(&psc->mpc52xx_psc_clock_select, 0xdd00); | ||
| 133 | |||
| 134 | out_8(&fifo->rfcntl, 0x00); | 143 | out_8(&fifo->rfcntl, 0x00); |
| 135 | out_be16(&fifo->rfalarm, 0x1ff); | 144 | out_be16(&fifo->rfalarm, 0x1ff); |
| 136 | out_8(&fifo->tfcntl, 0x07); | 145 | out_8(&fifo->tfcntl, 0x07); |
| @@ -219,15 +228,47 @@ static void mpc52xx_psc_cw_restore_ints(struct uart_port *port) | |||
| 219 | out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); | 228 | out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); |
| 220 | } | 229 | } |
| 221 | 230 | ||
| 222 | /* Search for bus-frequency property in this node or a parent */ | 231 | static unsigned int mpc5200_psc_set_baudrate(struct uart_port *port, |
| 223 | static unsigned long mpc52xx_getuartclk(void *p) | 232 | struct ktermios *new, |
| 233 | struct ktermios *old) | ||
| 224 | { | 234 | { |
| 225 | /* | 235 | unsigned int baud; |
| 226 | * 5200 UARTs have a / 32 prescaler | 236 | unsigned int divisor; |
| 227 | * but the generic serial code assumes 16 | 237 | |
| 228 | * so return ipb freq / 2 | 238 | /* The 5200 has a fixed /32 prescaler, uartclk contains the ipb freq */ |
| 229 | */ | 239 | baud = uart_get_baud_rate(port, new, old, |
| 230 | return mpc5xxx_get_bus_frequency(p) / 2; | 240 | port->uartclk / (32 * 0xffff) + 1, |
| 241 | port->uartclk / 32); | ||
| 242 | divisor = (port->uartclk + 16 * baud) / (32 * baud); | ||
| 243 | |||
| 244 | /* enable the /32 prescaler and set the divisor */ | ||
| 245 | mpc52xx_set_divisor(PSC(port), 0xdd00, divisor); | ||
| 246 | return baud; | ||
| 247 | } | ||
| 248 | |||
| 249 | static unsigned int mpc5200b_psc_set_baudrate(struct uart_port *port, | ||
| 250 | struct ktermios *new, | ||
| 251 | struct ktermios *old) | ||
| 252 | { | ||
| 253 | unsigned int baud; | ||
| 254 | unsigned int divisor; | ||
| 255 | u16 prescaler; | ||
| 256 | |||
| 257 | /* The 5200B has a selectable /4 or /32 prescaler, uartclk contains the | ||
| 258 | * ipb freq */ | ||
| 259 | baud = uart_get_baud_rate(port, new, old, | ||
| 260 | port->uartclk / (32 * 0xffff) + 1, | ||
| 261 | port->uartclk / 4); | ||
| 262 | divisor = (port->uartclk + 2 * baud) / (4 * baud); | ||
| 263 | |||
| 264 | /* select the proper prescaler and set the divisor */ | ||
| 265 | if (divisor > 0xffff) { | ||
| 266 | divisor = (divisor + 4) / 8; | ||
| 267 | prescaler = 0xdd00; /* /32 */ | ||
| 268 | } else | ||
| 269 | prescaler = 0xff00; /* /4 */ | ||
| 270 | mpc52xx_set_divisor(PSC(port), prescaler, divisor); | ||
| 271 | return baud; | ||
| 231 | } | 272 | } |
| 232 | 273 | ||
| 233 | static void mpc52xx_psc_get_irq(struct uart_port *port, struct device_node *np) | 274 | static void mpc52xx_psc_get_irq(struct uart_port *port, struct device_node *np) |
| @@ -258,7 +299,28 @@ static struct psc_ops mpc52xx_psc_ops = { | |||
| 258 | .read_char = mpc52xx_psc_read_char, | 299 | .read_char = mpc52xx_psc_read_char, |
| 259 | .cw_disable_ints = mpc52xx_psc_cw_disable_ints, | 300 | .cw_disable_ints = mpc52xx_psc_cw_disable_ints, |
| 260 | .cw_restore_ints = mpc52xx_psc_cw_restore_ints, | 301 | .cw_restore_ints = mpc52xx_psc_cw_restore_ints, |
| 261 | .getuartclk = mpc52xx_getuartclk, | 302 | .set_baudrate = mpc5200_psc_set_baudrate, |
| 303 | .get_irq = mpc52xx_psc_get_irq, | ||
| 304 | .handle_irq = mpc52xx_psc_handle_irq, | ||
| 305 | }; | ||
| 306 | |||
| 307 | static struct psc_ops mpc5200b_psc_ops = { | ||
| 308 | .fifo_init = mpc52xx_psc_fifo_init, | ||
| 309 | .raw_rx_rdy = mpc52xx_psc_raw_rx_rdy, | ||
| 310 | .raw_tx_rdy = mpc52xx_psc_raw_tx_rdy, | ||
| 311 | .rx_rdy = mpc52xx_psc_rx_rdy, | ||
| 312 | .tx_rdy = mpc52xx_psc_tx_rdy, | ||
| 313 | .tx_empty = mpc52xx_psc_tx_empty, | ||
| 314 | .stop_rx = mpc52xx_psc_stop_rx, | ||
| 315 | .start_tx = mpc52xx_psc_start_tx, | ||
| 316 | .stop_tx = mpc52xx_psc_stop_tx, | ||
| 317 | .rx_clr_irq = mpc52xx_psc_rx_clr_irq, | ||
| 318 | .tx_clr_irq = mpc52xx_psc_tx_clr_irq, | ||
| 319 | .write_char = mpc52xx_psc_write_char, | ||
| 320 | .read_char = mpc52xx_psc_read_char, | ||
| 321 | .cw_disable_ints = mpc52xx_psc_cw_disable_ints, | ||
| 322 | .cw_restore_ints = mpc52xx_psc_cw_restore_ints, | ||
| 323 | .set_baudrate = mpc5200b_psc_set_baudrate, | ||
| 262 | .get_irq = mpc52xx_psc_get_irq, | 324 | .get_irq = mpc52xx_psc_get_irq, |
| 263 | .handle_irq = mpc52xx_psc_handle_irq, | 325 | .handle_irq = mpc52xx_psc_handle_irq, |
| 264 | }; | 326 | }; |
| @@ -392,9 +454,35 @@ static void mpc512x_psc_cw_restore_ints(struct uart_port *port) | |||
| 392 | out_be32(&FIFO_512x(port)->rximr, port->read_status_mask & 0x7f); | 454 | out_be32(&FIFO_512x(port)->rximr, port->read_status_mask & 0x7f); |
| 393 | } | 455 | } |
| 394 | 456 | ||
| 395 | static unsigned long mpc512x_getuartclk(void *p) | 457 | static unsigned int mpc512x_psc_set_baudrate(struct uart_port *port, |
| 458 | struct ktermios *new, | ||
| 459 | struct ktermios *old) | ||
| 396 | { | 460 | { |
| 397 | return mpc5xxx_get_bus_frequency(p); | 461 | unsigned int baud; |
| 462 | unsigned int divisor; | ||
| 463 | |||
| 464 | /* | ||
| 465 | * The "MPC5121e Microcontroller Reference Manual, Rev. 3" says on | ||
| 466 | * pg. 30-10 that the chip supports a /32 and a /10 prescaler. | ||
| 467 | * Furthermore, it states that "After reset, the prescaler by 10 | ||
| 468 | * for the UART mode is selected", but the reset register value is | ||
| 469 | * 0x0000 which means a /32 prescaler. This is wrong. | ||
| 470 | * | ||
| 471 | * In reality using /32 prescaler doesn't work, as it is not supported! | ||
| 472 | * Use /16 or /10 prescaler, see "MPC5121e Hardware Design Guide", | ||
| 473 | * Chapter 4.1 PSC in UART Mode. | ||
| 474 | * Calculate with a /16 prescaler here. | ||
| 475 | */ | ||
| 476 | |||
| 477 | /* uartclk contains the ips freq */ | ||
| 478 | baud = uart_get_baud_rate(port, new, old, | ||
| 479 | port->uartclk / (16 * 0xffff) + 1, | ||
| 480 | port->uartclk / 16); | ||
| 481 | divisor = (port->uartclk + 8 * baud) / (16 * baud); | ||
| 482 | |||
| 483 | /* enable the /16 prescaler and set the divisor */ | ||
| 484 | mpc52xx_set_divisor(PSC(port), 0xdd00, divisor); | ||
| 485 | return baud; | ||
| 398 | } | 486 | } |
| 399 | 487 | ||
| 400 | /* Init PSC FIFO Controller */ | 488 | /* Init PSC FIFO Controller */ |
| @@ -498,7 +586,7 @@ static struct psc_ops mpc512x_psc_ops = { | |||
| 498 | .read_char = mpc512x_psc_read_char, | 586 | .read_char = mpc512x_psc_read_char, |
| 499 | .cw_disable_ints = mpc512x_psc_cw_disable_ints, | 587 | .cw_disable_ints = mpc512x_psc_cw_disable_ints, |
| 500 | .cw_restore_ints = mpc512x_psc_cw_restore_ints, | 588 | .cw_restore_ints = mpc512x_psc_cw_restore_ints, |
| 501 | .getuartclk = mpc512x_getuartclk, | 589 | .set_baudrate = mpc512x_psc_set_baudrate, |
| 502 | .clock = mpc512x_psc_clock, | 590 | .clock = mpc512x_psc_clock, |
| 503 | .fifoc_init = mpc512x_psc_fifoc_init, | 591 | .fifoc_init = mpc512x_psc_fifoc_init, |
| 504 | .fifoc_uninit = mpc512x_psc_fifoc_uninit, | 592 | .fifoc_uninit = mpc512x_psc_fifoc_uninit, |
| @@ -666,8 +754,8 @@ mpc52xx_uart_set_termios(struct uart_port *port, struct ktermios *new, | |||
| 666 | struct mpc52xx_psc __iomem *psc = PSC(port); | 754 | struct mpc52xx_psc __iomem *psc = PSC(port); |
| 667 | unsigned long flags; | 755 | unsigned long flags; |
| 668 | unsigned char mr1, mr2; | 756 | unsigned char mr1, mr2; |
| 669 | unsigned short ctr; | 757 | unsigned int j; |
| 670 | unsigned int j, baud, quot; | 758 | unsigned int baud; |
| 671 | 759 | ||
| 672 | /* Prepare what we're gonna write */ | 760 | /* Prepare what we're gonna write */ |
| 673 | mr1 = 0; | 761 | mr1 = 0; |
| @@ -704,16 +792,9 @@ mpc52xx_uart_set_termios(struct uart_port *port, struct ktermios *new, | |||
| 704 | mr2 |= MPC52xx_PSC_MODE_TXCTS; | 792 | mr2 |= MPC52xx_PSC_MODE_TXCTS; |
| 705 | } | 793 | } |
| 706 | 794 | ||
| 707 | baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16); | ||
| 708 | quot = uart_get_divisor(port, baud); | ||
| 709 | ctr = quot & 0xffff; | ||
| 710 | |||
| 711 | /* Get the lock */ | 795 | /* Get the lock */ |
| 712 | spin_lock_irqsave(&port->lock, flags); | 796 | spin_lock_irqsave(&port->lock, flags); |
| 713 | 797 | ||
| 714 | /* Update the per-port timeout */ | ||
| 715 | uart_update_timeout(port, new->c_cflag, baud); | ||
| 716 | |||
| 717 | /* Do our best to flush TX & RX, so we don't lose anything */ | 798 | /* Do our best to flush TX & RX, so we don't lose anything */ |
| 718 | /* But we don't wait indefinitely ! */ | 799 | /* But we don't wait indefinitely ! */ |
| 719 | j = 5000000; /* Maximum wait */ | 800 | j = 5000000; /* Maximum wait */ |
| @@ -737,8 +818,10 @@ mpc52xx_uart_set_termios(struct uart_port *port, struct ktermios *new, | |||
| 737 | out_8(&psc->command, MPC52xx_PSC_SEL_MODE_REG_1); | 818 | out_8(&psc->command, MPC52xx_PSC_SEL_MODE_REG_1); |
| 738 | out_8(&psc->mode, mr1); | 819 | out_8(&psc->mode, mr1); |
| 739 | out_8(&psc->mode, mr2); | 820 | out_8(&psc->mode, mr2); |
| 740 | out_8(&psc->ctur, ctr >> 8); | 821 | baud = psc_ops->set_baudrate(port, new, old); |
| 741 | out_8(&psc->ctlr, ctr & 0xff); | 822 | |
| 823 | /* Update the per-port timeout */ | ||
| 824 | uart_update_timeout(port, new->c_cflag, baud); | ||
| 742 | 825 | ||
| 743 | if (UART_ENABLE_MS(port, new->c_cflag)) | 826 | if (UART_ENABLE_MS(port, new->c_cflag)) |
| 744 | mpc52xx_uart_enable_ms(port); | 827 | mpc52xx_uart_enable_ms(port); |
| @@ -1118,7 +1201,7 @@ mpc52xx_console_setup(struct console *co, char *options) | |||
| 1118 | return ret; | 1201 | return ret; |
| 1119 | } | 1202 | } |
| 1120 | 1203 | ||
| 1121 | uartclk = psc_ops->getuartclk(np); | 1204 | uartclk = mpc5xxx_get_bus_frequency(np); |
| 1122 | if (uartclk == 0) { | 1205 | if (uartclk == 0) { |
| 1123 | pr_debug("Could not find uart clock frequency!\n"); | 1206 | pr_debug("Could not find uart clock frequency!\n"); |
| 1124 | return -EINVAL; | 1207 | return -EINVAL; |
| @@ -1201,6 +1284,7 @@ static struct uart_driver mpc52xx_uart_driver = { | |||
| 1201 | 1284 | ||
| 1202 | static struct of_device_id mpc52xx_uart_of_match[] = { | 1285 | static struct of_device_id mpc52xx_uart_of_match[] = { |
| 1203 | #ifdef CONFIG_PPC_MPC52xx | 1286 | #ifdef CONFIG_PPC_MPC52xx |
| 1287 | { .compatible = "fsl,mpc5200b-psc-uart", .data = &mpc5200b_psc_ops, }, | ||
| 1204 | { .compatible = "fsl,mpc5200-psc-uart", .data = &mpc52xx_psc_ops, }, | 1288 | { .compatible = "fsl,mpc5200-psc-uart", .data = &mpc52xx_psc_ops, }, |
| 1205 | /* binding used by old lite5200 device trees: */ | 1289 | /* binding used by old lite5200 device trees: */ |
| 1206 | { .compatible = "mpc5200-psc-uart", .data = &mpc52xx_psc_ops, }, | 1290 | { .compatible = "mpc5200-psc-uart", .data = &mpc52xx_psc_ops, }, |
| @@ -1233,7 +1317,10 @@ mpc52xx_uart_of_probe(struct of_device *op, const struct of_device_id *match) | |||
| 1233 | pr_debug("Found %s assigned to ttyPSC%x\n", | 1317 | pr_debug("Found %s assigned to ttyPSC%x\n", |
| 1234 | mpc52xx_uart_nodes[idx]->full_name, idx); | 1318 | mpc52xx_uart_nodes[idx]->full_name, idx); |
| 1235 | 1319 | ||
| 1236 | uartclk = psc_ops->getuartclk(op->dev.of_node); | 1320 | /* set the uart clock to the input clock of the psc, the different |
| 1321 | * prescalers are taken into account in the set_baudrate() methods | ||
| 1322 | * of the respective chip */ | ||
| 1323 | uartclk = mpc5xxx_get_bus_frequency(op->dev.of_node); | ||
| 1237 | if (uartclk == 0) { | 1324 | if (uartclk == 0) { |
| 1238 | dev_dbg(&op->dev, "Could not find uart clock frequency!\n"); | 1325 | dev_dbg(&op->dev, "Could not find uart clock frequency!\n"); |
| 1239 | return -EINVAL; | 1326 | return -EINVAL; |
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index 6a58cb1330c1..4aa00e6e57ad 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig | |||
| @@ -45,7 +45,8 @@ config USB_ARCH_HAS_OHCI | |||
| 45 | default y if STB03xxx | 45 | default y if STB03xxx |
| 46 | default y if PPC_MPC52xx | 46 | default y if PPC_MPC52xx |
| 47 | # MIPS: | 47 | # MIPS: |
| 48 | default y if SOC_AU1X00 | 48 | default y if MIPS_ALCHEMY |
| 49 | default y if MACH_JZ4740 | ||
| 49 | # SH: | 50 | # SH: |
| 50 | default y if CPU_SUBTYPE_SH7720 | 51 | default y if CPU_SUBTYPE_SH7720 |
| 51 | default y if CPU_SUBTYPE_SH7721 | 52 | default y if CPU_SUBTYPE_SH7721 |
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index fc576557d8a5..02864a237a2c 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c | |||
| @@ -1031,7 +1031,7 @@ MODULE_LICENSE ("GPL"); | |||
| 1031 | #define PLATFORM_DRIVER ohci_hcd_ep93xx_driver | 1031 | #define PLATFORM_DRIVER ohci_hcd_ep93xx_driver |
| 1032 | #endif | 1032 | #endif |
| 1033 | 1033 | ||
| 1034 | #ifdef CONFIG_SOC_AU1X00 | 1034 | #ifdef CONFIG_MIPS_ALCHEMY |
| 1035 | #include "ohci-au1xxx.c" | 1035 | #include "ohci-au1xxx.c" |
| 1036 | #define PLATFORM_DRIVER ohci_hcd_au1xxx_driver | 1036 | #define PLATFORM_DRIVER ohci_hcd_au1xxx_driver |
| 1037 | #endif | 1037 | #endif |
| @@ -1095,6 +1095,11 @@ MODULE_LICENSE ("GPL"); | |||
| 1095 | #define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver | 1095 | #define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver |
| 1096 | #endif | 1096 | #endif |
| 1097 | 1097 | ||
| 1098 | #ifdef CONFIG_MACH_JZ4740 | ||
| 1099 | #include "ohci-jz4740.c" | ||
| 1100 | #define PLATFORM_DRIVER ohci_hcd_jz4740_driver | ||
| 1101 | #endif | ||
| 1102 | |||
| 1098 | #if !defined(PCI_DRIVER) && \ | 1103 | #if !defined(PCI_DRIVER) && \ |
| 1099 | !defined(PLATFORM_DRIVER) && \ | 1104 | !defined(PLATFORM_DRIVER) && \ |
| 1100 | !defined(OMAP1_PLATFORM_DRIVER) && \ | 1105 | !defined(OMAP1_PLATFORM_DRIVER) && \ |
diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c new file mode 100644 index 000000000000..10e1872f3ab9 --- /dev/null +++ b/drivers/usb/host/ohci-jz4740.c | |||
| @@ -0,0 +1,276 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <linux/platform_device.h> | ||
| 16 | #include <linux/clk.h> | ||
| 17 | #include <linux/regulator/consumer.h> | ||
| 18 | |||
| 19 | struct jz4740_ohci_hcd { | ||
| 20 | struct ohci_hcd ohci_hcd; | ||
| 21 | |||
| 22 | struct regulator *vbus; | ||
| 23 | bool vbus_enabled; | ||
| 24 | struct clk *clk; | ||
| 25 | }; | ||
| 26 | |||
| 27 | static inline struct jz4740_ohci_hcd *hcd_to_jz4740_hcd(struct usb_hcd *hcd) | ||
| 28 | { | ||
| 29 | return (struct jz4740_ohci_hcd *)(hcd->hcd_priv); | ||
| 30 | } | ||
| 31 | |||
| 32 | static inline struct usb_hcd *jz4740_hcd_to_hcd(struct jz4740_ohci_hcd *jz4740_ohci) | ||
| 33 | { | ||
| 34 | return container_of((void *)jz4740_ohci, struct usb_hcd, hcd_priv); | ||
| 35 | } | ||
| 36 | |||
| 37 | static int ohci_jz4740_start(struct usb_hcd *hcd) | ||
| 38 | { | ||
| 39 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
| 40 | int ret; | ||
| 41 | |||
| 42 | ret = ohci_init(ohci); | ||
| 43 | if (ret < 0) | ||
| 44 | return ret; | ||
| 45 | |||
| 46 | ohci->num_ports = 1; | ||
| 47 | |||
| 48 | ret = ohci_run(ohci); | ||
| 49 | if (ret < 0) { | ||
| 50 | dev_err(hcd->self.controller, "Can not start %s", | ||
| 51 | hcd->self.bus_name); | ||
| 52 | ohci_stop(hcd); | ||
| 53 | return ret; | ||
| 54 | } | ||
| 55 | return 0; | ||
| 56 | } | ||
| 57 | |||
| 58 | static int ohci_jz4740_set_vbus_power(struct jz4740_ohci_hcd *jz4740_ohci, | ||
| 59 | bool enabled) | ||
| 60 | { | ||
| 61 | int ret = 0; | ||
| 62 | |||
| 63 | if (!jz4740_ohci->vbus) | ||
| 64 | return 0; | ||
| 65 | |||
| 66 | if (enabled && !jz4740_ohci->vbus_enabled) { | ||
| 67 | ret = regulator_enable(jz4740_ohci->vbus); | ||
| 68 | if (ret) | ||
| 69 | dev_err(jz4740_hcd_to_hcd(jz4740_ohci)->self.controller, | ||
| 70 | "Could not power vbus\n"); | ||
| 71 | } else if (!enabled && jz4740_ohci->vbus_enabled) { | ||
| 72 | ret = regulator_disable(jz4740_ohci->vbus); | ||
| 73 | } | ||
| 74 | |||
| 75 | if (ret == 0) | ||
| 76 | jz4740_ohci->vbus_enabled = enabled; | ||
| 77 | |||
| 78 | return ret; | ||
| 79 | } | ||
| 80 | |||
| 81 | static int ohci_jz4740_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | ||
| 82 | u16 wIndex, char *buf, u16 wLength) | ||
| 83 | { | ||
| 84 | struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd); | ||
| 85 | int ret; | ||
| 86 | |||
| 87 | switch (typeReq) { | ||
| 88 | case SetHubFeature: | ||
| 89 | if (wValue == USB_PORT_FEAT_POWER) | ||
| 90 | ret = ohci_jz4740_set_vbus_power(jz4740_ohci, true); | ||
| 91 | break; | ||
| 92 | case ClearHubFeature: | ||
| 93 | if (wValue == USB_PORT_FEAT_POWER) | ||
| 94 | ret = ohci_jz4740_set_vbus_power(jz4740_ohci, false); | ||
| 95 | break; | ||
| 96 | } | ||
| 97 | |||
| 98 | if (ret) | ||
| 99 | return ret; | ||
| 100 | |||
| 101 | return ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength); | ||
| 102 | } | ||
| 103 | |||
| 104 | |||
| 105 | static const struct hc_driver ohci_jz4740_hc_driver = { | ||
| 106 | .description = hcd_name, | ||
| 107 | .product_desc = "JZ4740 OHCI", | ||
| 108 | .hcd_priv_size = sizeof(struct jz4740_ohci_hcd), | ||
| 109 | |||
| 110 | /* | ||
| 111 | * generic hardware linkage | ||
| 112 | */ | ||
| 113 | .irq = ohci_irq, | ||
| 114 | .flags = HCD_USB11 | HCD_MEMORY, | ||
| 115 | |||
| 116 | /* | ||
| 117 | * basic lifecycle operations | ||
| 118 | */ | ||
| 119 | .start = ohci_jz4740_start, | ||
| 120 | .stop = ohci_stop, | ||
| 121 | .shutdown = ohci_shutdown, | ||
| 122 | |||
| 123 | /* | ||
| 124 | * managing i/o requests and associated device resources | ||
| 125 | */ | ||
| 126 | .urb_enqueue = ohci_urb_enqueue, | ||
| 127 | .urb_dequeue = ohci_urb_dequeue, | ||
| 128 | .endpoint_disable = ohci_endpoint_disable, | ||
| 129 | |||
| 130 | /* | ||
| 131 | * scheduling support | ||
| 132 | */ | ||
| 133 | .get_frame_number = ohci_get_frame, | ||
| 134 | |||
| 135 | /* | ||
| 136 | * root hub support | ||
| 137 | */ | ||
| 138 | .hub_status_data = ohci_hub_status_data, | ||
| 139 | .hub_control = ohci_jz4740_hub_control, | ||
| 140 | #ifdef CONFIG_PM | ||
| 141 | .bus_suspend = ohci_bus_suspend, | ||
| 142 | .bus_resume = ohci_bus_resume, | ||
| 143 | #endif | ||
| 144 | .start_port_reset = ohci_start_port_reset, | ||
| 145 | }; | ||
| 146 | |||
| 147 | |||
| 148 | static __devinit int jz4740_ohci_probe(struct platform_device *pdev) | ||
| 149 | { | ||
| 150 | int ret; | ||
| 151 | struct usb_hcd *hcd; | ||
| 152 | struct jz4740_ohci_hcd *jz4740_ohci; | ||
| 153 | struct resource *res; | ||
| 154 | int irq; | ||
| 155 | |||
| 156 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 157 | |||
| 158 | if (!res) { | ||
| 159 | dev_err(&pdev->dev, "Failed to get platform resource\n"); | ||
| 160 | return -ENOENT; | ||
| 161 | } | ||
| 162 | |||
| 163 | irq = platform_get_irq(pdev, 0); | ||
| 164 | if (irq < 0) { | ||
| 165 | dev_err(&pdev->dev, "Failed to get platform irq\n"); | ||
| 166 | return irq; | ||
| 167 | } | ||
| 168 | |||
| 169 | hcd = usb_create_hcd(&ohci_jz4740_hc_driver, &pdev->dev, "jz4740"); | ||
| 170 | if (!hcd) { | ||
| 171 | dev_err(&pdev->dev, "Failed to create hcd.\n"); | ||
| 172 | return -ENOMEM; | ||
| 173 | } | ||
| 174 | |||
| 175 | jz4740_ohci = hcd_to_jz4740_hcd(hcd); | ||
| 176 | |||
| 177 | res = request_mem_region(res->start, resource_size(res), hcd_name); | ||
| 178 | if (!res) { | ||
| 179 | dev_err(&pdev->dev, "Failed to request mem region.\n"); | ||
| 180 | ret = -EBUSY; | ||
| 181 | goto err_free; | ||
| 182 | } | ||
| 183 | |||
| 184 | hcd->rsrc_start = res->start; | ||
| 185 | hcd->rsrc_len = resource_size(res); | ||
| 186 | hcd->regs = ioremap(res->start, resource_size(res)); | ||
| 187 | |||
| 188 | if (!hcd->regs) { | ||
| 189 | dev_err(&pdev->dev, "Failed to ioremap registers.\n"); | ||
| 190 | ret = -EBUSY; | ||
| 191 | goto err_release_mem; | ||
| 192 | } | ||
| 193 | |||
| 194 | jz4740_ohci->clk = clk_get(&pdev->dev, "uhc"); | ||
| 195 | if (IS_ERR(jz4740_ohci->clk)) { | ||
| 196 | ret = PTR_ERR(jz4740_ohci->clk); | ||
| 197 | dev_err(&pdev->dev, "Failed to get clock: %d\n", ret); | ||
| 198 | goto err_iounmap; | ||
| 199 | } | ||
| 200 | |||
| 201 | jz4740_ohci->vbus = regulator_get(&pdev->dev, "vbus"); | ||
| 202 | if (IS_ERR(jz4740_ohci->vbus)) | ||
| 203 | jz4740_ohci->vbus = NULL; | ||
| 204 | |||
| 205 | |||
| 206 | clk_set_rate(jz4740_ohci->clk, 48000000); | ||
| 207 | clk_enable(jz4740_ohci->clk); | ||
| 208 | if (jz4740_ohci->vbus) | ||
| 209 | ohci_jz4740_set_vbus_power(jz4740_ohci, true); | ||
| 210 | |||
| 211 | platform_set_drvdata(pdev, hcd); | ||
| 212 | |||
| 213 | ohci_hcd_init(hcd_to_ohci(hcd)); | ||
| 214 | |||
| 215 | ret = usb_add_hcd(hcd, irq, 0); | ||
| 216 | if (ret) { | ||
| 217 | dev_err(&pdev->dev, "Failed to add hcd: %d\n", ret); | ||
| 218 | goto err_disable; | ||
| 219 | } | ||
| 220 | |||
| 221 | return 0; | ||
| 222 | |||
| 223 | err_disable: | ||
| 224 | platform_set_drvdata(pdev, NULL); | ||
| 225 | if (jz4740_ohci->vbus) { | ||
| 226 | regulator_disable(jz4740_ohci->vbus); | ||
| 227 | regulator_put(jz4740_ohci->vbus); | ||
| 228 | } | ||
| 229 | clk_disable(jz4740_ohci->clk); | ||
| 230 | |||
| 231 | clk_put(jz4740_ohci->clk); | ||
| 232 | err_iounmap: | ||
| 233 | iounmap(hcd->regs); | ||
| 234 | err_release_mem: | ||
| 235 | release_mem_region(res->start, resource_size(res)); | ||
| 236 | err_free: | ||
| 237 | usb_put_hcd(hcd); | ||
| 238 | |||
| 239 | return ret; | ||
| 240 | } | ||
| 241 | |||
| 242 | static __devexit int jz4740_ohci_remove(struct platform_device *pdev) | ||
| 243 | { | ||
| 244 | struct usb_hcd *hcd = platform_get_drvdata(pdev); | ||
| 245 | struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd); | ||
| 246 | |||
| 247 | usb_remove_hcd(hcd); | ||
| 248 | |||
| 249 | platform_set_drvdata(pdev, NULL); | ||
| 250 | |||
| 251 | if (jz4740_ohci->vbus) { | ||
| 252 | regulator_disable(jz4740_ohci->vbus); | ||
| 253 | regulator_put(jz4740_ohci->vbus); | ||
| 254 | } | ||
| 255 | |||
| 256 | clk_disable(jz4740_ohci->clk); | ||
| 257 | clk_put(jz4740_ohci->clk); | ||
| 258 | |||
| 259 | iounmap(hcd->regs); | ||
| 260 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | ||
| 261 | |||
| 262 | usb_put_hcd(hcd); | ||
| 263 | |||
| 264 | return 0; | ||
| 265 | } | ||
| 266 | |||
| 267 | static struct platform_driver ohci_hcd_jz4740_driver = { | ||
| 268 | .probe = jz4740_ohci_probe, | ||
| 269 | .remove = __devexit_p(jz4740_ohci_remove), | ||
| 270 | .driver = { | ||
| 271 | .name = "jz4740-ohci", | ||
| 272 | .owner = THIS_MODULE, | ||
| 273 | }, | ||
| 274 | }; | ||
| 275 | |||
| 276 | MODULE_ALIAS("platfrom:jz4740-ohci"); | ||
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 3d94a1471724..7b11ea68c80e 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -1871,6 +1871,7 @@ config FB_MBX_DEBUG | |||
| 1871 | config FB_FSL_DIU | 1871 | config FB_FSL_DIU |
| 1872 | tristate "Freescale DIU framebuffer support" | 1872 | tristate "Freescale DIU framebuffer support" |
| 1873 | depends on FB && FSL_SOC | 1873 | depends on FB && FSL_SOC |
| 1874 | select FB_MODE_HELPERS | ||
| 1874 | select FB_CFB_FILLRECT | 1875 | select FB_CFB_FILLRECT |
| 1875 | select FB_CFB_COPYAREA | 1876 | select FB_CFB_COPYAREA |
| 1876 | select FB_CFB_IMAGEBLIT | 1877 | select FB_CFB_IMAGEBLIT |
| @@ -2229,6 +2230,15 @@ config FB_BROADSHEET | |||
| 2229 | and could also have been called by other names when coupled with | 2230 | and could also have been called by other names when coupled with |
| 2230 | a bridge adapter. | 2231 | a bridge adapter. |
| 2231 | 2232 | ||
| 2233 | config FB_JZ4740 | ||
| 2234 | tristate "JZ4740 LCD framebuffer support" | ||
| 2235 | depends on FB && MACH_JZ4740 | ||
| 2236 | select FB_SYS_FILLRECT | ||
| 2237 | select FB_SYS_COPYAREA | ||
| 2238 | select FB_SYS_IMAGEBLIT | ||
| 2239 | help | ||
| 2240 | Framebuffer support for the JZ4740 SoC. | ||
| 2241 | |||
| 2232 | source "drivers/video/omap/Kconfig" | 2242 | source "drivers/video/omap/Kconfig" |
| 2233 | source "drivers/video/omap2/Kconfig" | 2243 | source "drivers/video/omap2/Kconfig" |
| 2234 | 2244 | ||
diff --git a/drivers/video/Makefile b/drivers/video/Makefile index ddc2af2ba45b..f56a9cae2157 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile | |||
| @@ -131,6 +131,7 @@ obj-$(CONFIG_FB_CARMINE) += carminefb.o | |||
| 131 | obj-$(CONFIG_FB_MB862XX) += mb862xx/ | 131 | obj-$(CONFIG_FB_MB862XX) += mb862xx/ |
| 132 | obj-$(CONFIG_FB_MSM) += msm/ | 132 | obj-$(CONFIG_FB_MSM) += msm/ |
| 133 | obj-$(CONFIG_FB_NUC900) += nuc900fb.o | 133 | obj-$(CONFIG_FB_NUC900) += nuc900fb.o |
| 134 | obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o | ||
| 134 | 135 | ||
| 135 | # Platform or fallback drivers go here | 136 | # Platform or fallback drivers go here |
| 136 | obj-$(CONFIG_FB_UVESA) += uvesafb.o | 137 | obj-$(CONFIG_FB_UVESA) += uvesafb.o |
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c index 27455ce298b7..e38ad2224540 100644 --- a/drivers/video/fsl-diu-fb.c +++ b/drivers/video/fsl-diu-fb.c | |||
| @@ -34,7 +34,8 @@ | |||
| 34 | #include <linux/of_platform.h> | 34 | #include <linux/of_platform.h> |
| 35 | 35 | ||
| 36 | #include <sysdev/fsl_soc.h> | 36 | #include <sysdev/fsl_soc.h> |
| 37 | #include "fsl-diu-fb.h" | 37 | #include <linux/fsl-diu-fb.h> |
| 38 | #include "edid.h" | ||
| 38 | 39 | ||
| 39 | /* | 40 | /* |
| 40 | * These parameters give default parameters | 41 | * These parameters give default parameters |
| @@ -217,6 +218,7 @@ struct mfb_info { | |||
| 217 | int x_aoi_d; /* aoi display x offset to physical screen */ | 218 | int x_aoi_d; /* aoi display x offset to physical screen */ |
| 218 | int y_aoi_d; /* aoi display y offset to physical screen */ | 219 | int y_aoi_d; /* aoi display y offset to physical screen */ |
| 219 | struct fsl_diu_data *parent; | 220 | struct fsl_diu_data *parent; |
| 221 | u8 *edid_data; | ||
| 220 | }; | 222 | }; |
| 221 | 223 | ||
| 222 | 224 | ||
| @@ -317,6 +319,17 @@ static void fsl_diu_free(void *virt, size_t size) | |||
| 317 | free_pages_exact(virt, size); | 319 | free_pages_exact(virt, size); |
| 318 | } | 320 | } |
| 319 | 321 | ||
| 322 | /* | ||
| 323 | * Workaround for failed writing desc register of planes. | ||
| 324 | * Needed with MPC5121 DIU rev 2.0 silicon. | ||
| 325 | */ | ||
| 326 | void wr_reg_wa(u32 *reg, u32 val) | ||
| 327 | { | ||
| 328 | do { | ||
| 329 | out_be32(reg, val); | ||
| 330 | } while (in_be32(reg) != val); | ||
| 331 | } | ||
| 332 | |||
| 320 | static int fsl_diu_enable_panel(struct fb_info *info) | 333 | static int fsl_diu_enable_panel(struct fb_info *info) |
| 321 | { | 334 | { |
| 322 | struct mfb_info *pmfbi, *cmfbi, *mfbi = info->par; | 335 | struct mfb_info *pmfbi, *cmfbi, *mfbi = info->par; |
| @@ -330,7 +343,7 @@ static int fsl_diu_enable_panel(struct fb_info *info) | |||
| 330 | switch (mfbi->index) { | 343 | switch (mfbi->index) { |
| 331 | case 0: /* plane 0 */ | 344 | case 0: /* plane 0 */ |
| 332 | if (hw->desc[0] != ad->paddr) | 345 | if (hw->desc[0] != ad->paddr) |
| 333 | out_be32(&hw->desc[0], ad->paddr); | 346 | wr_reg_wa(&hw->desc[0], ad->paddr); |
| 334 | break; | 347 | break; |
| 335 | case 1: /* plane 1 AOI 0 */ | 348 | case 1: /* plane 1 AOI 0 */ |
| 336 | cmfbi = machine_data->fsl_diu_info[2]->par; | 349 | cmfbi = machine_data->fsl_diu_info[2]->par; |
| @@ -340,7 +353,7 @@ static int fsl_diu_enable_panel(struct fb_info *info) | |||
| 340 | cpu_to_le32(cmfbi->ad->paddr); | 353 | cpu_to_le32(cmfbi->ad->paddr); |
| 341 | else | 354 | else |
| 342 | ad->next_ad = 0; | 355 | ad->next_ad = 0; |
| 343 | out_be32(&hw->desc[1], ad->paddr); | 356 | wr_reg_wa(&hw->desc[1], ad->paddr); |
| 344 | } | 357 | } |
| 345 | break; | 358 | break; |
| 346 | case 3: /* plane 2 AOI 0 */ | 359 | case 3: /* plane 2 AOI 0 */ |
| @@ -351,14 +364,14 @@ static int fsl_diu_enable_panel(struct fb_info *info) | |||
| 351 | cpu_to_le32(cmfbi->ad->paddr); | 364 | cpu_to_le32(cmfbi->ad->paddr); |
| 352 | else | 365 | else |
| 353 | ad->next_ad = 0; | 366 | ad->next_ad = 0; |
| 354 | out_be32(&hw->desc[2], ad->paddr); | 367 | wr_reg_wa(&hw->desc[2], ad->paddr); |
| 355 | } | 368 | } |
| 356 | break; | 369 | break; |
| 357 | case 2: /* plane 1 AOI 1 */ | 370 | case 2: /* plane 1 AOI 1 */ |
| 358 | pmfbi = machine_data->fsl_diu_info[1]->par; | 371 | pmfbi = machine_data->fsl_diu_info[1]->par; |
| 359 | ad->next_ad = 0; | 372 | ad->next_ad = 0; |
| 360 | if (hw->desc[1] == machine_data->dummy_ad->paddr) | 373 | if (hw->desc[1] == machine_data->dummy_ad->paddr) |
| 361 | out_be32(&hw->desc[1], ad->paddr); | 374 | wr_reg_wa(&hw->desc[1], ad->paddr); |
| 362 | else /* AOI0 open */ | 375 | else /* AOI0 open */ |
| 363 | pmfbi->ad->next_ad = cpu_to_le32(ad->paddr); | 376 | pmfbi->ad->next_ad = cpu_to_le32(ad->paddr); |
| 364 | break; | 377 | break; |
| @@ -366,7 +379,7 @@ static int fsl_diu_enable_panel(struct fb_info *info) | |||
| 366 | pmfbi = machine_data->fsl_diu_info[3]->par; | 379 | pmfbi = machine_data->fsl_diu_info[3]->par; |
| 367 | ad->next_ad = 0; | 380 | ad->next_ad = 0; |
| 368 | if (hw->desc[2] == machine_data->dummy_ad->paddr) | 381 | if (hw->desc[2] == machine_data->dummy_ad->paddr) |
| 369 | out_be32(&hw->desc[2], ad->paddr); | 382 | wr_reg_wa(&hw->desc[2], ad->paddr); |
| 370 | else /* AOI0 was open */ | 383 | else /* AOI0 was open */ |
| 371 | pmfbi->ad->next_ad = cpu_to_le32(ad->paddr); | 384 | pmfbi->ad->next_ad = cpu_to_le32(ad->paddr); |
| 372 | break; | 385 | break; |
| @@ -390,27 +403,24 @@ static int fsl_diu_disable_panel(struct fb_info *info) | |||
| 390 | switch (mfbi->index) { | 403 | switch (mfbi->index) { |
| 391 | case 0: /* plane 0 */ | 404 | case 0: /* plane 0 */ |
| 392 | if (hw->desc[0] != machine_data->dummy_ad->paddr) | 405 | if (hw->desc[0] != machine_data->dummy_ad->paddr) |
| 393 | out_be32(&hw->desc[0], | 406 | wr_reg_wa(&hw->desc[0], machine_data->dummy_ad->paddr); |
| 394 | machine_data->dummy_ad->paddr); | ||
| 395 | break; | 407 | break; |
| 396 | case 1: /* plane 1 AOI 0 */ | 408 | case 1: /* plane 1 AOI 0 */ |
| 397 | cmfbi = machine_data->fsl_diu_info[2]->par; | 409 | cmfbi = machine_data->fsl_diu_info[2]->par; |
| 398 | if (cmfbi->count > 0) /* AOI1 is open */ | 410 | if (cmfbi->count > 0) /* AOI1 is open */ |
| 399 | out_be32(&hw->desc[1], cmfbi->ad->paddr); | 411 | wr_reg_wa(&hw->desc[1], cmfbi->ad->paddr); |
| 400 | /* move AOI1 to the first */ | 412 | /* move AOI1 to the first */ |
| 401 | else /* AOI1 was closed */ | 413 | else /* AOI1 was closed */ |
| 402 | out_be32(&hw->desc[1], | 414 | wr_reg_wa(&hw->desc[1], machine_data->dummy_ad->paddr); |
| 403 | machine_data->dummy_ad->paddr); | ||
| 404 | /* close AOI 0 */ | 415 | /* close AOI 0 */ |
| 405 | break; | 416 | break; |
| 406 | case 3: /* plane 2 AOI 0 */ | 417 | case 3: /* plane 2 AOI 0 */ |
| 407 | cmfbi = machine_data->fsl_diu_info[4]->par; | 418 | cmfbi = machine_data->fsl_diu_info[4]->par; |
| 408 | if (cmfbi->count > 0) /* AOI1 is open */ | 419 | if (cmfbi->count > 0) /* AOI1 is open */ |
| 409 | out_be32(&hw->desc[2], cmfbi->ad->paddr); | 420 | wr_reg_wa(&hw->desc[2], cmfbi->ad->paddr); |
| 410 | /* move AOI1 to the first */ | 421 | /* move AOI1 to the first */ |
| 411 | else /* AOI1 was closed */ | 422 | else /* AOI1 was closed */ |
| 412 | out_be32(&hw->desc[2], | 423 | wr_reg_wa(&hw->desc[2], machine_data->dummy_ad->paddr); |
| 413 | machine_data->dummy_ad->paddr); | ||
| 414 | /* close AOI 0 */ | 424 | /* close AOI 0 */ |
| 415 | break; | 425 | break; |
| 416 | case 2: /* plane 1 AOI 1 */ | 426 | case 2: /* plane 1 AOI 1 */ |
| @@ -421,7 +431,7 @@ static int fsl_diu_disable_panel(struct fb_info *info) | |||
| 421 | /* AOI0 is open, must be the first */ | 431 | /* AOI0 is open, must be the first */ |
| 422 | pmfbi->ad->next_ad = 0; | 432 | pmfbi->ad->next_ad = 0; |
| 423 | } else /* AOI1 is the first in the chain */ | 433 | } else /* AOI1 is the first in the chain */ |
| 424 | out_be32(&hw->desc[1], machine_data->dummy_ad->paddr); | 434 | wr_reg_wa(&hw->desc[1], machine_data->dummy_ad->paddr); |
| 425 | /* close AOI 1 */ | 435 | /* close AOI 1 */ |
| 426 | break; | 436 | break; |
| 427 | case 4: /* plane 2 AOI 1 */ | 437 | case 4: /* plane 2 AOI 1 */ |
| @@ -432,7 +442,7 @@ static int fsl_diu_disable_panel(struct fb_info *info) | |||
| 432 | /* AOI0 is open, must be the first */ | 442 | /* AOI0 is open, must be the first */ |
| 433 | pmfbi->ad->next_ad = 0; | 443 | pmfbi->ad->next_ad = 0; |
| 434 | } else /* AOI1 is the first in the chain */ | 444 | } else /* AOI1 is the first in the chain */ |
| 435 | out_be32(&hw->desc[2], machine_data->dummy_ad->paddr); | 445 | wr_reg_wa(&hw->desc[2], machine_data->dummy_ad->paddr); |
| 436 | /* close AOI 1 */ | 446 | /* close AOI 1 */ |
| 437 | break; | 447 | break; |
| 438 | default: | 448 | default: |
| @@ -1100,6 +1110,10 @@ static int fsl_diu_open(struct fb_info *info, int user) | |||
| 1100 | struct mfb_info *mfbi = info->par; | 1110 | struct mfb_info *mfbi = info->par; |
| 1101 | int res = 0; | 1111 | int res = 0; |
| 1102 | 1112 | ||
| 1113 | /* free boot splash memory on first /dev/fb0 open */ | ||
| 1114 | if (!mfbi->index && diu_ops.release_bootmem) | ||
| 1115 | diu_ops.release_bootmem(); | ||
| 1116 | |||
| 1103 | spin_lock(&diu_lock); | 1117 | spin_lock(&diu_lock); |
| 1104 | mfbi->count++; | 1118 | mfbi->count++; |
| 1105 | if (mfbi->count == 1) { | 1119 | if (mfbi->count == 1) { |
| @@ -1173,18 +1187,30 @@ static int __devinit install_fb(struct fb_info *info) | |||
| 1173 | int rc; | 1187 | int rc; |
| 1174 | struct mfb_info *mfbi = info->par; | 1188 | struct mfb_info *mfbi = info->par; |
| 1175 | const char *aoi_mode, *init_aoi_mode = "320x240"; | 1189 | const char *aoi_mode, *init_aoi_mode = "320x240"; |
| 1190 | struct fb_videomode *db = fsl_diu_mode_db; | ||
| 1191 | unsigned int dbsize = ARRAY_SIZE(fsl_diu_mode_db); | ||
| 1192 | int has_default_mode = 1; | ||
| 1176 | 1193 | ||
| 1177 | if (init_fbinfo(info)) | 1194 | if (init_fbinfo(info)) |
| 1178 | return -EINVAL; | 1195 | return -EINVAL; |
| 1179 | 1196 | ||
| 1180 | if (mfbi->index == 0) /* plane 0 */ | 1197 | if (mfbi->index == 0) { /* plane 0 */ |
| 1198 | if (mfbi->edid_data) { | ||
| 1199 | /* Now build modedb from EDID */ | ||
| 1200 | fb_edid_to_monspecs(mfbi->edid_data, &info->monspecs); | ||
| 1201 | fb_videomode_to_modelist(info->monspecs.modedb, | ||
| 1202 | info->monspecs.modedb_len, | ||
| 1203 | &info->modelist); | ||
| 1204 | db = info->monspecs.modedb; | ||
| 1205 | dbsize = info->monspecs.modedb_len; | ||
| 1206 | } | ||
| 1181 | aoi_mode = fb_mode; | 1207 | aoi_mode = fb_mode; |
| 1182 | else | 1208 | } else { |
| 1183 | aoi_mode = init_aoi_mode; | 1209 | aoi_mode = init_aoi_mode; |
| 1210 | } | ||
| 1184 | pr_debug("mode used = %s\n", aoi_mode); | 1211 | pr_debug("mode used = %s\n", aoi_mode); |
| 1185 | rc = fb_find_mode(&info->var, info, aoi_mode, fsl_diu_mode_db, | 1212 | rc = fb_find_mode(&info->var, info, aoi_mode, db, dbsize, |
| 1186 | ARRAY_SIZE(fsl_diu_mode_db), &fsl_diu_default_mode, default_bpp); | 1213 | &fsl_diu_default_mode, default_bpp); |
| 1187 | |||
| 1188 | switch (rc) { | 1214 | switch (rc) { |
| 1189 | case 1: | 1215 | case 1: |
| 1190 | pr_debug("using mode specified in @mode\n"); | 1216 | pr_debug("using mode specified in @mode\n"); |
| @@ -1202,10 +1228,50 @@ static int __devinit install_fb(struct fb_info *info) | |||
| 1202 | default: | 1228 | default: |
| 1203 | pr_debug("rc = %d\n", rc); | 1229 | pr_debug("rc = %d\n", rc); |
| 1204 | pr_debug("failed to find mode\n"); | 1230 | pr_debug("failed to find mode\n"); |
| 1205 | return -EINVAL; | 1231 | /* |
| 1232 | * For plane 0 we continue and look into | ||
| 1233 | * driver's internal modedb. | ||
| 1234 | */ | ||
| 1235 | if (mfbi->index == 0 && mfbi->edid_data) | ||
| 1236 | has_default_mode = 0; | ||
| 1237 | else | ||
| 1238 | return -EINVAL; | ||
| 1206 | break; | 1239 | break; |
| 1207 | } | 1240 | } |
| 1208 | 1241 | ||
| 1242 | if (!has_default_mode) { | ||
| 1243 | rc = fb_find_mode(&info->var, info, aoi_mode, fsl_diu_mode_db, | ||
| 1244 | ARRAY_SIZE(fsl_diu_mode_db), | ||
| 1245 | &fsl_diu_default_mode, | ||
| 1246 | default_bpp); | ||
| 1247 | if (rc > 0 && rc < 5) | ||
| 1248 | has_default_mode = 1; | ||
| 1249 | } | ||
| 1250 | |||
| 1251 | /* Still not found, use preferred mode from database if any */ | ||
| 1252 | if (!has_default_mode && info->monspecs.modedb) { | ||
| 1253 | struct fb_monspecs *specs = &info->monspecs; | ||
| 1254 | struct fb_videomode *modedb = &specs->modedb[0]; | ||
| 1255 | |||
| 1256 | /* | ||
| 1257 | * Get preferred timing. If not found, | ||
| 1258 | * first mode in database will be used. | ||
| 1259 | */ | ||
| 1260 | if (specs->misc & FB_MISC_1ST_DETAIL) { | ||
| 1261 | int i; | ||
| 1262 | |||
| 1263 | for (i = 0; i < specs->modedb_len; i++) { | ||
| 1264 | if (specs->modedb[i].flag & FB_MODE_IS_FIRST) { | ||
| 1265 | modedb = &specs->modedb[i]; | ||
| 1266 | break; | ||
| 1267 | } | ||
| 1268 | } | ||
| 1269 | } | ||
| 1270 | |||
| 1271 | info->var.bits_per_pixel = default_bpp; | ||
| 1272 | fb_videomode_to_var(&info->var, modedb); | ||
| 1273 | } | ||
| 1274 | |||
| 1209 | pr_debug("xres_virtual %d\n", info->var.xres_virtual); | 1275 | pr_debug("xres_virtual %d\n", info->var.xres_virtual); |
| 1210 | pr_debug("bits_per_pixel %d\n", info->var.bits_per_pixel); | 1276 | pr_debug("bits_per_pixel %d\n", info->var.bits_per_pixel); |
| 1211 | 1277 | ||
| @@ -1244,6 +1310,9 @@ static void uninstall_fb(struct fb_info *info) | |||
| 1244 | if (!mfbi->registered) | 1310 | if (!mfbi->registered) |
| 1245 | return; | 1311 | return; |
| 1246 | 1312 | ||
| 1313 | if (mfbi->index == 0) | ||
| 1314 | kfree(mfbi->edid_data); | ||
| 1315 | |||
| 1247 | unregister_framebuffer(info); | 1316 | unregister_framebuffer(info); |
| 1248 | unmap_video_memory(info); | 1317 | unmap_video_memory(info); |
| 1249 | if (&info->cmap) | 1318 | if (&info->cmap) |
| @@ -1427,6 +1496,7 @@ static int __devinit fsl_diu_probe(struct of_device *ofdev, | |||
| 1427 | int ret, i, error = 0; | 1496 | int ret, i, error = 0; |
| 1428 | struct resource res; | 1497 | struct resource res; |
| 1429 | struct fsl_diu_data *machine_data; | 1498 | struct fsl_diu_data *machine_data; |
| 1499 | int diu_mode; | ||
| 1430 | 1500 | ||
| 1431 | machine_data = kzalloc(sizeof(struct fsl_diu_data), GFP_KERNEL); | 1501 | machine_data = kzalloc(sizeof(struct fsl_diu_data), GFP_KERNEL); |
| 1432 | if (!machine_data) | 1502 | if (!machine_data) |
| @@ -1443,6 +1513,17 @@ static int __devinit fsl_diu_probe(struct of_device *ofdev, | |||
| 1443 | mfbi = machine_data->fsl_diu_info[i]->par; | 1513 | mfbi = machine_data->fsl_diu_info[i]->par; |
| 1444 | memcpy(mfbi, &mfb_template[i], sizeof(struct mfb_info)); | 1514 | memcpy(mfbi, &mfb_template[i], sizeof(struct mfb_info)); |
| 1445 | mfbi->parent = machine_data; | 1515 | mfbi->parent = machine_data; |
| 1516 | |||
| 1517 | if (mfbi->index == 0) { | ||
| 1518 | const u8 *prop; | ||
| 1519 | int len; | ||
| 1520 | |||
| 1521 | /* Get EDID */ | ||
| 1522 | prop = of_get_property(np, "edid", &len); | ||
| 1523 | if (prop && len == EDID_LENGTH) | ||
| 1524 | mfbi->edid_data = kmemdup(prop, EDID_LENGTH, | ||
| 1525 | GFP_KERNEL); | ||
| 1526 | } | ||
| 1446 | } | 1527 | } |
| 1447 | 1528 | ||
| 1448 | ret = of_address_to_resource(np, 0, &res); | 1529 | ret = of_address_to_resource(np, 0, &res); |
| @@ -1463,7 +1544,9 @@ static int __devinit fsl_diu_probe(struct of_device *ofdev, | |||
| 1463 | goto error2; | 1544 | goto error2; |
| 1464 | } | 1545 | } |
| 1465 | 1546 | ||
| 1466 | out_be32(&dr.diu_reg->diu_mode, 0); /* disable DIU anyway*/ | 1547 | diu_mode = in_be32(&dr.diu_reg->diu_mode); |
| 1548 | if (diu_mode != MFB_MODE1) | ||
| 1549 | out_be32(&dr.diu_reg->diu_mode, 0); /* disable DIU */ | ||
| 1467 | 1550 | ||
| 1468 | /* Get the IRQ of the DIU */ | 1551 | /* Get the IRQ of the DIU */ |
| 1469 | machine_data->irq = irq_of_parse_and_map(np, 0); | 1552 | machine_data->irq = irq_of_parse_and_map(np, 0); |
| @@ -1511,7 +1594,13 @@ static int __devinit fsl_diu_probe(struct of_device *ofdev, | |||
| 1511 | machine_data->dummy_ad->offset_xyd = 0; | 1594 | machine_data->dummy_ad->offset_xyd = 0; |
| 1512 | machine_data->dummy_ad->next_ad = 0; | 1595 | machine_data->dummy_ad->next_ad = 0; |
| 1513 | 1596 | ||
| 1514 | out_be32(&dr.diu_reg->desc[0], machine_data->dummy_ad->paddr); | 1597 | /* |
| 1598 | * Let DIU display splash screen if it was pre-initialized | ||
| 1599 | * by the bootloader, set dummy area descriptor otherwise. | ||
| 1600 | */ | ||
| 1601 | if (diu_mode != MFB_MODE1) | ||
| 1602 | out_be32(&dr.diu_reg->desc[0], machine_data->dummy_ad->paddr); | ||
| 1603 | |||
| 1515 | out_be32(&dr.diu_reg->desc[1], machine_data->dummy_ad->paddr); | 1604 | out_be32(&dr.diu_reg->desc[1], machine_data->dummy_ad->paddr); |
| 1516 | out_be32(&dr.diu_reg->desc[2], machine_data->dummy_ad->paddr); | 1605 | out_be32(&dr.diu_reg->desc[2], machine_data->dummy_ad->paddr); |
| 1517 | 1606 | ||
diff --git a/drivers/video/jz4740_fb.c b/drivers/video/jz4740_fb.c new file mode 100644 index 000000000000..670ecaa0385a --- /dev/null +++ b/drivers/video/jz4740_fb.c | |||
| @@ -0,0 +1,847 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * JZ4740 SoC LCD framebuffer driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/mutex.h> | ||
| 19 | #include <linux/platform_device.h> | ||
| 20 | |||
| 21 | #include <linux/clk.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | |||
| 24 | #include <linux/console.h> | ||
| 25 | #include <linux/fb.h> | ||
| 26 | |||
| 27 | #include <linux/dma-mapping.h> | ||
| 28 | |||
| 29 | #include <asm/mach-jz4740/jz4740_fb.h> | ||
| 30 | #include <asm/mach-jz4740/gpio.h> | ||
| 31 | |||
| 32 | #define JZ_REG_LCD_CFG 0x00 | ||
| 33 | #define JZ_REG_LCD_VSYNC 0x04 | ||
| 34 | #define JZ_REG_LCD_HSYNC 0x08 | ||
| 35 | #define JZ_REG_LCD_VAT 0x0C | ||
| 36 | #define JZ_REG_LCD_DAH 0x10 | ||
| 37 | #define JZ_REG_LCD_DAV 0x14 | ||
| 38 | #define JZ_REG_LCD_PS 0x18 | ||
| 39 | #define JZ_REG_LCD_CLS 0x1C | ||
| 40 | #define JZ_REG_LCD_SPL 0x20 | ||
| 41 | #define JZ_REG_LCD_REV 0x24 | ||
| 42 | #define JZ_REG_LCD_CTRL 0x30 | ||
| 43 | #define JZ_REG_LCD_STATE 0x34 | ||
| 44 | #define JZ_REG_LCD_IID 0x38 | ||
| 45 | #define JZ_REG_LCD_DA0 0x40 | ||
| 46 | #define JZ_REG_LCD_SA0 0x44 | ||
| 47 | #define JZ_REG_LCD_FID0 0x48 | ||
| 48 | #define JZ_REG_LCD_CMD0 0x4C | ||
| 49 | #define JZ_REG_LCD_DA1 0x50 | ||
| 50 | #define JZ_REG_LCD_SA1 0x54 | ||
| 51 | #define JZ_REG_LCD_FID1 0x58 | ||
| 52 | #define JZ_REG_LCD_CMD1 0x5C | ||
| 53 | |||
| 54 | #define JZ_LCD_CFG_SLCD BIT(31) | ||
| 55 | #define JZ_LCD_CFG_PS_DISABLE BIT(23) | ||
| 56 | #define JZ_LCD_CFG_CLS_DISABLE BIT(22) | ||
| 57 | #define JZ_LCD_CFG_SPL_DISABLE BIT(21) | ||
| 58 | #define JZ_LCD_CFG_REV_DISABLE BIT(20) | ||
| 59 | #define JZ_LCD_CFG_HSYNCM BIT(19) | ||
| 60 | #define JZ_LCD_CFG_PCLKM BIT(18) | ||
| 61 | #define JZ_LCD_CFG_INV BIT(17) | ||
| 62 | #define JZ_LCD_CFG_SYNC_DIR BIT(16) | ||
| 63 | #define JZ_LCD_CFG_PS_POLARITY BIT(15) | ||
| 64 | #define JZ_LCD_CFG_CLS_POLARITY BIT(14) | ||
| 65 | #define JZ_LCD_CFG_SPL_POLARITY BIT(13) | ||
| 66 | #define JZ_LCD_CFG_REV_POLARITY BIT(12) | ||
| 67 | #define JZ_LCD_CFG_HSYNC_ACTIVE_LOW BIT(11) | ||
| 68 | #define JZ_LCD_CFG_PCLK_FALLING_EDGE BIT(10) | ||
| 69 | #define JZ_LCD_CFG_DE_ACTIVE_LOW BIT(9) | ||
| 70 | #define JZ_LCD_CFG_VSYNC_ACTIVE_LOW BIT(8) | ||
| 71 | #define JZ_LCD_CFG_18_BIT BIT(7) | ||
| 72 | #define JZ_LCD_CFG_PDW (BIT(5) | BIT(4)) | ||
| 73 | #define JZ_LCD_CFG_MODE_MASK 0xf | ||
| 74 | |||
| 75 | #define JZ_LCD_CTRL_BURST_4 (0x0 << 28) | ||
| 76 | #define JZ_LCD_CTRL_BURST_8 (0x1 << 28) | ||
| 77 | #define JZ_LCD_CTRL_BURST_16 (0x2 << 28) | ||
| 78 | #define JZ_LCD_CTRL_RGB555 BIT(27) | ||
| 79 | #define JZ_LCD_CTRL_OFUP BIT(26) | ||
| 80 | #define JZ_LCD_CTRL_FRC_GRAYSCALE_16 (0x0 << 24) | ||
| 81 | #define JZ_LCD_CTRL_FRC_GRAYSCALE_4 (0x1 << 24) | ||
| 82 | #define JZ_LCD_CTRL_FRC_GRAYSCALE_2 (0x2 << 24) | ||
| 83 | #define JZ_LCD_CTRL_PDD_MASK (0xff << 16) | ||
| 84 | #define JZ_LCD_CTRL_EOF_IRQ BIT(13) | ||
| 85 | #define JZ_LCD_CTRL_SOF_IRQ BIT(12) | ||
| 86 | #define JZ_LCD_CTRL_OFU_IRQ BIT(11) | ||
| 87 | #define JZ_LCD_CTRL_IFU0_IRQ BIT(10) | ||
| 88 | #define JZ_LCD_CTRL_IFU1_IRQ BIT(9) | ||
| 89 | #define JZ_LCD_CTRL_DD_IRQ BIT(8) | ||
| 90 | #define JZ_LCD_CTRL_QDD_IRQ BIT(7) | ||
| 91 | #define JZ_LCD_CTRL_REVERSE_ENDIAN BIT(6) | ||
| 92 | #define JZ_LCD_CTRL_LSB_FISRT BIT(5) | ||
| 93 | #define JZ_LCD_CTRL_DISABLE BIT(4) | ||
| 94 | #define JZ_LCD_CTRL_ENABLE BIT(3) | ||
| 95 | #define JZ_LCD_CTRL_BPP_1 0x0 | ||
| 96 | #define JZ_LCD_CTRL_BPP_2 0x1 | ||
| 97 | #define JZ_LCD_CTRL_BPP_4 0x2 | ||
| 98 | #define JZ_LCD_CTRL_BPP_8 0x3 | ||
| 99 | #define JZ_LCD_CTRL_BPP_15_16 0x4 | ||
| 100 | #define JZ_LCD_CTRL_BPP_18_24 0x5 | ||
| 101 | |||
| 102 | #define JZ_LCD_CMD_SOF_IRQ BIT(15) | ||
| 103 | #define JZ_LCD_CMD_EOF_IRQ BIT(16) | ||
| 104 | #define JZ_LCD_CMD_ENABLE_PAL BIT(12) | ||
| 105 | |||
| 106 | #define JZ_LCD_SYNC_MASK 0x3ff | ||
| 107 | |||
| 108 | #define JZ_LCD_STATE_DISABLED BIT(0) | ||
| 109 | |||
| 110 | struct jzfb_framedesc { | ||
| 111 | uint32_t next; | ||
| 112 | uint32_t addr; | ||
| 113 | uint32_t id; | ||
| 114 | uint32_t cmd; | ||
| 115 | } __packed; | ||
| 116 | |||
| 117 | struct jzfb { | ||
| 118 | struct fb_info *fb; | ||
| 119 | struct platform_device *pdev; | ||
| 120 | void __iomem *base; | ||
| 121 | struct resource *mem; | ||
| 122 | struct jz4740_fb_platform_data *pdata; | ||
| 123 | |||
| 124 | size_t vidmem_size; | ||
| 125 | void *vidmem; | ||
| 126 | dma_addr_t vidmem_phys; | ||
| 127 | struct jzfb_framedesc *framedesc; | ||
| 128 | dma_addr_t framedesc_phys; | ||
| 129 | |||
| 130 | struct clk *ldclk; | ||
| 131 | struct clk *lpclk; | ||
| 132 | |||
| 133 | unsigned is_enabled:1; | ||
| 134 | struct mutex lock; | ||
| 135 | |||
| 136 | uint32_t pseudo_palette[16]; | ||
| 137 | }; | ||
| 138 | |||
| 139 | static const struct fb_fix_screeninfo jzfb_fix __devinitdata = { | ||
| 140 | .id = "JZ4740 FB", | ||
| 141 | .type = FB_TYPE_PACKED_PIXELS, | ||
| 142 | .visual = FB_VISUAL_TRUECOLOR, | ||
| 143 | .xpanstep = 0, | ||
| 144 | .ypanstep = 0, | ||
| 145 | .ywrapstep = 0, | ||
| 146 | .accel = FB_ACCEL_NONE, | ||
| 147 | }; | ||
| 148 | |||
| 149 | static const struct jz_gpio_bulk_request jz_lcd_ctrl_pins[] = { | ||
| 150 | JZ_GPIO_BULK_PIN(LCD_PCLK), | ||
| 151 | JZ_GPIO_BULK_PIN(LCD_HSYNC), | ||
| 152 | JZ_GPIO_BULK_PIN(LCD_VSYNC), | ||
| 153 | JZ_GPIO_BULK_PIN(LCD_DE), | ||
| 154 | JZ_GPIO_BULK_PIN(LCD_PS), | ||
| 155 | JZ_GPIO_BULK_PIN(LCD_REV), | ||
| 156 | JZ_GPIO_BULK_PIN(LCD_CLS), | ||
| 157 | JZ_GPIO_BULK_PIN(LCD_SPL), | ||
| 158 | }; | ||
| 159 | |||
| 160 | static const struct jz_gpio_bulk_request jz_lcd_data_pins[] = { | ||
| 161 | JZ_GPIO_BULK_PIN(LCD_DATA0), | ||
| 162 | JZ_GPIO_BULK_PIN(LCD_DATA1), | ||
| 163 | JZ_GPIO_BULK_PIN(LCD_DATA2), | ||
| 164 | JZ_GPIO_BULK_PIN(LCD_DATA3), | ||
| 165 | JZ_GPIO_BULK_PIN(LCD_DATA4), | ||
| 166 | JZ_GPIO_BULK_PIN(LCD_DATA5), | ||
| 167 | JZ_GPIO_BULK_PIN(LCD_DATA6), | ||
| 168 | JZ_GPIO_BULK_PIN(LCD_DATA7), | ||
| 169 | JZ_GPIO_BULK_PIN(LCD_DATA8), | ||
| 170 | JZ_GPIO_BULK_PIN(LCD_DATA9), | ||
| 171 | JZ_GPIO_BULK_PIN(LCD_DATA10), | ||
| 172 | JZ_GPIO_BULK_PIN(LCD_DATA11), | ||
| 173 | JZ_GPIO_BULK_PIN(LCD_DATA12), | ||
| 174 | JZ_GPIO_BULK_PIN(LCD_DATA13), | ||
| 175 | JZ_GPIO_BULK_PIN(LCD_DATA14), | ||
| 176 | JZ_GPIO_BULK_PIN(LCD_DATA15), | ||
| 177 | JZ_GPIO_BULK_PIN(LCD_DATA16), | ||
| 178 | JZ_GPIO_BULK_PIN(LCD_DATA17), | ||
| 179 | }; | ||
| 180 | |||
| 181 | static unsigned int jzfb_num_ctrl_pins(struct jzfb *jzfb) | ||
| 182 | { | ||
| 183 | unsigned int num; | ||
| 184 | |||
| 185 | switch (jzfb->pdata->lcd_type) { | ||
| 186 | case JZ_LCD_TYPE_GENERIC_16_BIT: | ||
| 187 | num = 4; | ||
| 188 | break; | ||
| 189 | case JZ_LCD_TYPE_GENERIC_18_BIT: | ||
| 190 | num = 4; | ||
| 191 | break; | ||
| 192 | case JZ_LCD_TYPE_8BIT_SERIAL: | ||
| 193 | num = 3; | ||
| 194 | break; | ||
| 195 | case JZ_LCD_TYPE_SPECIAL_TFT_1: | ||
| 196 | case JZ_LCD_TYPE_SPECIAL_TFT_2: | ||
| 197 | case JZ_LCD_TYPE_SPECIAL_TFT_3: | ||
| 198 | num = 8; | ||
| 199 | break; | ||
| 200 | default: | ||
| 201 | num = 0; | ||
| 202 | break; | ||
| 203 | } | ||
| 204 | return num; | ||
| 205 | } | ||
| 206 | |||
| 207 | static unsigned int jzfb_num_data_pins(struct jzfb *jzfb) | ||
| 208 | { | ||
| 209 | unsigned int num; | ||
| 210 | |||
| 211 | switch (jzfb->pdata->lcd_type) { | ||
| 212 | case JZ_LCD_TYPE_GENERIC_16_BIT: | ||
| 213 | num = 16; | ||
| 214 | break; | ||
| 215 | case JZ_LCD_TYPE_GENERIC_18_BIT: | ||
| 216 | num = 18; | ||
| 217 | break; | ||
| 218 | case JZ_LCD_TYPE_8BIT_SERIAL: | ||
| 219 | num = 8; | ||
| 220 | break; | ||
| 221 | case JZ_LCD_TYPE_SPECIAL_TFT_1: | ||
| 222 | case JZ_LCD_TYPE_SPECIAL_TFT_2: | ||
| 223 | case JZ_LCD_TYPE_SPECIAL_TFT_3: | ||
| 224 | if (jzfb->pdata->bpp == 18) | ||
| 225 | num = 18; | ||
| 226 | else | ||
| 227 | num = 16; | ||
| 228 | break; | ||
| 229 | default: | ||
| 230 | num = 0; | ||
| 231 | break; | ||
| 232 | } | ||
| 233 | return num; | ||
| 234 | } | ||
| 235 | |||
| 236 | /* Based on CNVT_TOHW macro from skeletonfb.c */ | ||
| 237 | static inline uint32_t jzfb_convert_color_to_hw(unsigned val, | ||
| 238 | struct fb_bitfield *bf) | ||
| 239 | { | ||
| 240 | return (((val << bf->length) + 0x7FFF - val) >> 16) << bf->offset; | ||
| 241 | } | ||
| 242 | |||
| 243 | static int jzfb_setcolreg(unsigned regno, unsigned red, unsigned green, | ||
| 244 | unsigned blue, unsigned transp, struct fb_info *fb) | ||
| 245 | { | ||
| 246 | uint32_t color; | ||
| 247 | |||
| 248 | if (regno >= 16) | ||
| 249 | return -EINVAL; | ||
| 250 | |||
| 251 | color = jzfb_convert_color_to_hw(red, &fb->var.red); | ||
| 252 | color |= jzfb_convert_color_to_hw(green, &fb->var.green); | ||
| 253 | color |= jzfb_convert_color_to_hw(blue, &fb->var.blue); | ||
| 254 | color |= jzfb_convert_color_to_hw(transp, &fb->var.transp); | ||
| 255 | |||
| 256 | ((uint32_t *)(fb->pseudo_palette))[regno] = color; | ||
| 257 | |||
| 258 | return 0; | ||
| 259 | } | ||
| 260 | |||
| 261 | static int jzfb_get_controller_bpp(struct jzfb *jzfb) | ||
| 262 | { | ||
| 263 | switch (jzfb->pdata->bpp) { | ||
| 264 | case 18: | ||
| 265 | case 24: | ||
| 266 | return 32; | ||
| 267 | case 15: | ||
| 268 | return 16; | ||
| 269 | default: | ||
| 270 | return jzfb->pdata->bpp; | ||
| 271 | } | ||
| 272 | } | ||
| 273 | |||
| 274 | static struct fb_videomode *jzfb_get_mode(struct jzfb *jzfb, | ||
| 275 | struct fb_var_screeninfo *var) | ||
| 276 | { | ||
| 277 | size_t i; | ||
| 278 | struct fb_videomode *mode = jzfb->pdata->modes; | ||
| 279 | |||
| 280 | for (i = 0; i < jzfb->pdata->num_modes; ++i, ++mode) { | ||
| 281 | if (mode->xres == var->xres && mode->yres == var->yres) | ||
| 282 | return mode; | ||
| 283 | } | ||
| 284 | |||
| 285 | return NULL; | ||
| 286 | } | ||
| 287 | |||
| 288 | static int jzfb_check_var(struct fb_var_screeninfo *var, struct fb_info *fb) | ||
| 289 | { | ||
| 290 | struct jzfb *jzfb = fb->par; | ||
| 291 | struct fb_videomode *mode; | ||
| 292 | |||
| 293 | if (var->bits_per_pixel != jzfb_get_controller_bpp(jzfb) && | ||
| 294 | var->bits_per_pixel != jzfb->pdata->bpp) | ||
| 295 | return -EINVAL; | ||
| 296 | |||
| 297 | mode = jzfb_get_mode(jzfb, var); | ||
| 298 | if (mode == NULL) | ||
| 299 | return -EINVAL; | ||
| 300 | |||
| 301 | fb_videomode_to_var(var, mode); | ||
| 302 | |||
| 303 | switch (jzfb->pdata->bpp) { | ||
| 304 | case 8: | ||
| 305 | break; | ||
| 306 | case 15: | ||
| 307 | var->red.offset = 10; | ||
| 308 | var->red.length = 5; | ||
| 309 | var->green.offset = 6; | ||
| 310 | var->green.length = 5; | ||
| 311 | var->blue.offset = 0; | ||
| 312 | var->blue.length = 5; | ||
| 313 | break; | ||
| 314 | case 16: | ||
| 315 | var->red.offset = 11; | ||
| 316 | var->red.length = 5; | ||
| 317 | var->green.offset = 5; | ||
| 318 | var->green.length = 6; | ||
| 319 | var->blue.offset = 0; | ||
| 320 | var->blue.length = 5; | ||
| 321 | break; | ||
| 322 | case 18: | ||
| 323 | var->red.offset = 16; | ||
| 324 | var->red.length = 6; | ||
| 325 | var->green.offset = 8; | ||
| 326 | var->green.length = 6; | ||
| 327 | var->blue.offset = 0; | ||
| 328 | var->blue.length = 6; | ||
| 329 | var->bits_per_pixel = 32; | ||
| 330 | break; | ||
| 331 | case 32: | ||
| 332 | case 24: | ||
| 333 | var->transp.offset = 24; | ||
| 334 | var->transp.length = 8; | ||
| 335 | var->red.offset = 16; | ||
| 336 | var->red.length = 8; | ||
| 337 | var->green.offset = 8; | ||
| 338 | var->green.length = 8; | ||
| 339 | var->blue.offset = 0; | ||
| 340 | var->blue.length = 8; | ||
| 341 | var->bits_per_pixel = 32; | ||
| 342 | break; | ||
| 343 | default: | ||
| 344 | break; | ||
| 345 | } | ||
| 346 | |||
| 347 | return 0; | ||
| 348 | } | ||
| 349 | |||
| 350 | static int jzfb_set_par(struct fb_info *info) | ||
| 351 | { | ||
| 352 | struct jzfb *jzfb = info->par; | ||
| 353 | struct jz4740_fb_platform_data *pdata = jzfb->pdata; | ||
| 354 | struct fb_var_screeninfo *var = &info->var; | ||
| 355 | struct fb_videomode *mode; | ||
| 356 | uint16_t hds, vds; | ||
| 357 | uint16_t hde, vde; | ||
| 358 | uint16_t ht, vt; | ||
| 359 | uint32_t ctrl; | ||
| 360 | uint32_t cfg; | ||
| 361 | unsigned long rate; | ||
| 362 | |||
| 363 | mode = jzfb_get_mode(jzfb, var); | ||
| 364 | if (mode == NULL) | ||
| 365 | return -EINVAL; | ||
| 366 | |||
| 367 | if (mode == info->mode) | ||
| 368 | return 0; | ||
| 369 | |||
| 370 | info->mode = mode; | ||
| 371 | |||
| 372 | hds = mode->hsync_len + mode->left_margin; | ||
| 373 | hde = hds + mode->xres; | ||
| 374 | ht = hde + mode->right_margin; | ||
| 375 | |||
| 376 | vds = mode->vsync_len + mode->upper_margin; | ||
| 377 | vde = vds + mode->yres; | ||
| 378 | vt = vde + mode->lower_margin; | ||
| 379 | |||
| 380 | ctrl = JZ_LCD_CTRL_OFUP | JZ_LCD_CTRL_BURST_16; | ||
| 381 | |||
| 382 | switch (pdata->bpp) { | ||
| 383 | case 1: | ||
| 384 | ctrl |= JZ_LCD_CTRL_BPP_1; | ||
| 385 | break; | ||
| 386 | case 2: | ||
| 387 | ctrl |= JZ_LCD_CTRL_BPP_2; | ||
| 388 | break; | ||
| 389 | case 4: | ||
| 390 | ctrl |= JZ_LCD_CTRL_BPP_4; | ||
| 391 | break; | ||
| 392 | case 8: | ||
| 393 | ctrl |= JZ_LCD_CTRL_BPP_8; | ||
| 394 | break; | ||
| 395 | case 15: | ||
| 396 | ctrl |= JZ_LCD_CTRL_RGB555; /* Falltrough */ | ||
| 397 | case 16: | ||
| 398 | ctrl |= JZ_LCD_CTRL_BPP_15_16; | ||
| 399 | break; | ||
| 400 | case 18: | ||
| 401 | case 24: | ||
| 402 | case 32: | ||
| 403 | ctrl |= JZ_LCD_CTRL_BPP_18_24; | ||
| 404 | break; | ||
| 405 | default: | ||
| 406 | break; | ||
| 407 | } | ||
| 408 | |||
| 409 | cfg = pdata->lcd_type & 0xf; | ||
| 410 | |||
| 411 | if (!(mode->sync & FB_SYNC_HOR_HIGH_ACT)) | ||
| 412 | cfg |= JZ_LCD_CFG_HSYNC_ACTIVE_LOW; | ||
| 413 | |||
| 414 | if (!(mode->sync & FB_SYNC_VERT_HIGH_ACT)) | ||
| 415 | cfg |= JZ_LCD_CFG_VSYNC_ACTIVE_LOW; | ||
| 416 | |||
| 417 | if (pdata->pixclk_falling_edge) | ||
| 418 | cfg |= JZ_LCD_CFG_PCLK_FALLING_EDGE; | ||
| 419 | |||
| 420 | if (pdata->date_enable_active_low) | ||
| 421 | cfg |= JZ_LCD_CFG_DE_ACTIVE_LOW; | ||
| 422 | |||
| 423 | if (pdata->lcd_type == JZ_LCD_TYPE_GENERIC_18_BIT) | ||
| 424 | cfg |= JZ_LCD_CFG_18_BIT; | ||
| 425 | |||
| 426 | if (mode->pixclock) { | ||
| 427 | rate = PICOS2KHZ(mode->pixclock) * 1000; | ||
| 428 | mode->refresh = rate / vt / ht; | ||
| 429 | } else { | ||
| 430 | if (pdata->lcd_type == JZ_LCD_TYPE_8BIT_SERIAL) | ||
| 431 | rate = mode->refresh * (vt + 2 * mode->xres) * ht; | ||
| 432 | else | ||
| 433 | rate = mode->refresh * vt * ht; | ||
| 434 | |||
| 435 | mode->pixclock = KHZ2PICOS(rate / 1000); | ||
| 436 | } | ||
| 437 | |||
| 438 | mutex_lock(&jzfb->lock); | ||
| 439 | if (!jzfb->is_enabled) | ||
| 440 | clk_enable(jzfb->ldclk); | ||
| 441 | else | ||
| 442 | ctrl |= JZ_LCD_CTRL_ENABLE; | ||
| 443 | |||
| 444 | switch (pdata->lcd_type) { | ||
| 445 | case JZ_LCD_TYPE_SPECIAL_TFT_1: | ||
| 446 | case JZ_LCD_TYPE_SPECIAL_TFT_2: | ||
| 447 | case JZ_LCD_TYPE_SPECIAL_TFT_3: | ||
| 448 | writel(pdata->special_tft_config.spl, jzfb->base + JZ_REG_LCD_SPL); | ||
| 449 | writel(pdata->special_tft_config.cls, jzfb->base + JZ_REG_LCD_CLS); | ||
| 450 | writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_PS); | ||
| 451 | writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_REV); | ||
| 452 | break; | ||
| 453 | default: | ||
| 454 | cfg |= JZ_LCD_CFG_PS_DISABLE; | ||
| 455 | cfg |= JZ_LCD_CFG_CLS_DISABLE; | ||
| 456 | cfg |= JZ_LCD_CFG_SPL_DISABLE; | ||
| 457 | cfg |= JZ_LCD_CFG_REV_DISABLE; | ||
| 458 | break; | ||
| 459 | } | ||
| 460 | |||
| 461 | writel(mode->hsync_len, jzfb->base + JZ_REG_LCD_HSYNC); | ||
| 462 | writel(mode->vsync_len, jzfb->base + JZ_REG_LCD_VSYNC); | ||
| 463 | |||
| 464 | writel((ht << 16) | vt, jzfb->base + JZ_REG_LCD_VAT); | ||
| 465 | |||
| 466 | writel((hds << 16) | hde, jzfb->base + JZ_REG_LCD_DAH); | ||
| 467 | writel((vds << 16) | vde, jzfb->base + JZ_REG_LCD_DAV); | ||
| 468 | |||
| 469 | writel(cfg, jzfb->base + JZ_REG_LCD_CFG); | ||
| 470 | |||
| 471 | writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); | ||
| 472 | |||
| 473 | if (!jzfb->is_enabled) | ||
| 474 | clk_disable(jzfb->ldclk); | ||
| 475 | |||
| 476 | mutex_unlock(&jzfb->lock); | ||
| 477 | |||
| 478 | clk_set_rate(jzfb->lpclk, rate); | ||
| 479 | clk_set_rate(jzfb->ldclk, rate * 3); | ||
| 480 | |||
| 481 | return 0; | ||
| 482 | } | ||
| 483 | |||
| 484 | static void jzfb_enable(struct jzfb *jzfb) | ||
| 485 | { | ||
| 486 | uint32_t ctrl; | ||
| 487 | |||
| 488 | clk_enable(jzfb->ldclk); | ||
| 489 | |||
| 490 | jz_gpio_bulk_resume(jz_lcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); | ||
| 491 | jz_gpio_bulk_resume(jz_lcd_data_pins, jzfb_num_data_pins(jzfb)); | ||
| 492 | |||
| 493 | writel(0, jzfb->base + JZ_REG_LCD_STATE); | ||
| 494 | |||
| 495 | writel(jzfb->framedesc->next, jzfb->base + JZ_REG_LCD_DA0); | ||
| 496 | |||
| 497 | ctrl = readl(jzfb->base + JZ_REG_LCD_CTRL); | ||
| 498 | ctrl |= JZ_LCD_CTRL_ENABLE; | ||
| 499 | ctrl &= ~JZ_LCD_CTRL_DISABLE; | ||
| 500 | writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); | ||
| 501 | } | ||
| 502 | |||
| 503 | static void jzfb_disable(struct jzfb *jzfb) | ||
| 504 | { | ||
| 505 | uint32_t ctrl; | ||
| 506 | |||
| 507 | ctrl = readl(jzfb->base + JZ_REG_LCD_CTRL); | ||
| 508 | ctrl |= JZ_LCD_CTRL_DISABLE; | ||
| 509 | writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); | ||
| 510 | do { | ||
| 511 | ctrl = readl(jzfb->base + JZ_REG_LCD_STATE); | ||
| 512 | } while (!(ctrl & JZ_LCD_STATE_DISABLED)); | ||
| 513 | |||
| 514 | jz_gpio_bulk_suspend(jz_lcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); | ||
| 515 | jz_gpio_bulk_suspend(jz_lcd_data_pins, jzfb_num_data_pins(jzfb)); | ||
| 516 | |||
| 517 | clk_disable(jzfb->ldclk); | ||
| 518 | } | ||
| 519 | |||
| 520 | static int jzfb_blank(int blank_mode, struct fb_info *info) | ||
| 521 | { | ||
| 522 | struct jzfb *jzfb = info->par; | ||
| 523 | |||
| 524 | switch (blank_mode) { | ||
| 525 | case FB_BLANK_UNBLANK: | ||
| 526 | mutex_lock(&jzfb->lock); | ||
| 527 | if (jzfb->is_enabled) { | ||
| 528 | mutex_unlock(&jzfb->lock); | ||
| 529 | return 0; | ||
| 530 | } | ||
| 531 | |||
| 532 | jzfb_enable(jzfb); | ||
| 533 | jzfb->is_enabled = 1; | ||
| 534 | |||
| 535 | mutex_unlock(&jzfb->lock); | ||
| 536 | break; | ||
| 537 | default: | ||
| 538 | mutex_lock(&jzfb->lock); | ||
| 539 | if (!jzfb->is_enabled) { | ||
| 540 | mutex_unlock(&jzfb->lock); | ||
| 541 | return 0; | ||
| 542 | } | ||
| 543 | |||
| 544 | jzfb_disable(jzfb); | ||
| 545 | jzfb->is_enabled = 0; | ||
| 546 | |||
| 547 | mutex_unlock(&jzfb->lock); | ||
| 548 | break; | ||
| 549 | } | ||
| 550 | |||
| 551 | return 0; | ||
| 552 | } | ||
| 553 | |||
| 554 | static int jzfb_alloc_devmem(struct jzfb *jzfb) | ||
| 555 | { | ||
| 556 | int max_videosize = 0; | ||
| 557 | struct fb_videomode *mode = jzfb->pdata->modes; | ||
| 558 | void *page; | ||
| 559 | int i; | ||
| 560 | |||
| 561 | for (i = 0; i < jzfb->pdata->num_modes; ++mode, ++i) { | ||
| 562 | if (max_videosize < mode->xres * mode->yres) | ||
| 563 | max_videosize = mode->xres * mode->yres; | ||
| 564 | } | ||
| 565 | |||
| 566 | max_videosize *= jzfb_get_controller_bpp(jzfb) >> 3; | ||
| 567 | |||
| 568 | jzfb->framedesc = dma_alloc_coherent(&jzfb->pdev->dev, | ||
| 569 | sizeof(*jzfb->framedesc), | ||
| 570 | &jzfb->framedesc_phys, GFP_KERNEL); | ||
| 571 | |||
| 572 | if (!jzfb->framedesc) | ||
| 573 | return -ENOMEM; | ||
| 574 | |||
| 575 | jzfb->vidmem_size = PAGE_ALIGN(max_videosize); | ||
| 576 | jzfb->vidmem = dma_alloc_coherent(&jzfb->pdev->dev, | ||
| 577 | jzfb->vidmem_size, | ||
| 578 | &jzfb->vidmem_phys, GFP_KERNEL); | ||
| 579 | |||
| 580 | if (!jzfb->vidmem) | ||
| 581 | goto err_free_framedesc; | ||
| 582 | |||
| 583 | for (page = jzfb->vidmem; | ||
| 584 | page < jzfb->vidmem + PAGE_ALIGN(jzfb->vidmem_size); | ||
| 585 | page += PAGE_SIZE) { | ||
| 586 | SetPageReserved(virt_to_page(page)); | ||
| 587 | } | ||
| 588 | |||
| 589 | jzfb->framedesc->next = jzfb->framedesc_phys; | ||
| 590 | jzfb->framedesc->addr = jzfb->vidmem_phys; | ||
| 591 | jzfb->framedesc->id = 0xdeafbead; | ||
| 592 | jzfb->framedesc->cmd = 0; | ||
| 593 | jzfb->framedesc->cmd |= max_videosize / 4; | ||
| 594 | |||
| 595 | return 0; | ||
| 596 | |||
| 597 | err_free_framedesc: | ||
| 598 | dma_free_coherent(&jzfb->pdev->dev, sizeof(*jzfb->framedesc), | ||
| 599 | jzfb->framedesc, jzfb->framedesc_phys); | ||
| 600 | return -ENOMEM; | ||
| 601 | } | ||
| 602 | |||
| 603 | static void jzfb_free_devmem(struct jzfb *jzfb) | ||
| 604 | { | ||
| 605 | dma_free_coherent(&jzfb->pdev->dev, jzfb->vidmem_size, | ||
| 606 | jzfb->vidmem, jzfb->vidmem_phys); | ||
| 607 | dma_free_coherent(&jzfb->pdev->dev, sizeof(*jzfb->framedesc), | ||
| 608 | jzfb->framedesc, jzfb->framedesc_phys); | ||
| 609 | } | ||
| 610 | |||
| 611 | static struct fb_ops jzfb_ops = { | ||
| 612 | .owner = THIS_MODULE, | ||
| 613 | .fb_check_var = jzfb_check_var, | ||
| 614 | .fb_set_par = jzfb_set_par, | ||
| 615 | .fb_blank = jzfb_blank, | ||
| 616 | .fb_fillrect = sys_fillrect, | ||
| 617 | .fb_copyarea = sys_copyarea, | ||
| 618 | .fb_imageblit = sys_imageblit, | ||
| 619 | .fb_setcolreg = jzfb_setcolreg, | ||
| 620 | }; | ||
| 621 | |||
| 622 | static int __devinit jzfb_probe(struct platform_device *pdev) | ||
| 623 | { | ||
| 624 | int ret; | ||
| 625 | struct jzfb *jzfb; | ||
| 626 | struct fb_info *fb; | ||
| 627 | struct jz4740_fb_platform_data *pdata = pdev->dev.platform_data; | ||
| 628 | struct resource *mem; | ||
| 629 | |||
| 630 | if (!pdata) { | ||
| 631 | dev_err(&pdev->dev, "Missing platform data\n"); | ||
| 632 | return -ENXIO; | ||
| 633 | } | ||
| 634 | |||
| 635 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 636 | if (!mem) { | ||
| 637 | dev_err(&pdev->dev, "Failed to get register memory resource\n"); | ||
| 638 | return -ENXIO; | ||
| 639 | } | ||
| 640 | |||
| 641 | mem = request_mem_region(mem->start, resource_size(mem), pdev->name); | ||
| 642 | if (!mem) { | ||
| 643 | dev_err(&pdev->dev, "Failed to request register memory region\n"); | ||
| 644 | return -EBUSY; | ||
| 645 | } | ||
| 646 | |||
| 647 | fb = framebuffer_alloc(sizeof(struct jzfb), &pdev->dev); | ||
| 648 | if (!fb) { | ||
| 649 | dev_err(&pdev->dev, "Failed to allocate framebuffer device\n"); | ||
| 650 | ret = -ENOMEM; | ||
| 651 | goto err_release_mem_region; | ||
| 652 | } | ||
| 653 | |||
| 654 | fb->fbops = &jzfb_ops; | ||
| 655 | fb->flags = FBINFO_DEFAULT; | ||
| 656 | |||
| 657 | jzfb = fb->par; | ||
| 658 | jzfb->pdev = pdev; | ||
| 659 | jzfb->pdata = pdata; | ||
| 660 | jzfb->mem = mem; | ||
| 661 | |||
| 662 | jzfb->ldclk = clk_get(&pdev->dev, "lcd"); | ||
| 663 | if (IS_ERR(jzfb->ldclk)) { | ||
| 664 | ret = PTR_ERR(jzfb->ldclk); | ||
| 665 | dev_err(&pdev->dev, "Failed to get lcd clock: %d\n", ret); | ||
| 666 | goto err_framebuffer_release; | ||
| 667 | } | ||
| 668 | |||
| 669 | jzfb->lpclk = clk_get(&pdev->dev, "lcd_pclk"); | ||
| 670 | if (IS_ERR(jzfb->lpclk)) { | ||
| 671 | ret = PTR_ERR(jzfb->lpclk); | ||
| 672 | dev_err(&pdev->dev, "Failed to get lcd pixel clock: %d\n", ret); | ||
| 673 | goto err_put_ldclk; | ||
| 674 | } | ||
| 675 | |||
| 676 | jzfb->base = ioremap(mem->start, resource_size(mem)); | ||
| 677 | if (!jzfb->base) { | ||
| 678 | dev_err(&pdev->dev, "Failed to ioremap register memory region\n"); | ||
| 679 | ret = -EBUSY; | ||
| 680 | goto err_put_lpclk; | ||
| 681 | } | ||
| 682 | |||
| 683 | platform_set_drvdata(pdev, jzfb); | ||
| 684 | |||
| 685 | mutex_init(&jzfb->lock); | ||
| 686 | |||
| 687 | fb_videomode_to_modelist(pdata->modes, pdata->num_modes, | ||
| 688 | &fb->modelist); | ||
| 689 | fb_videomode_to_var(&fb->var, pdata->modes); | ||
| 690 | fb->var.bits_per_pixel = pdata->bpp; | ||
| 691 | jzfb_check_var(&fb->var, fb); | ||
| 692 | |||
| 693 | ret = jzfb_alloc_devmem(jzfb); | ||
| 694 | if (ret) { | ||
| 695 | dev_err(&pdev->dev, "Failed to allocate video memory\n"); | ||
| 696 | goto err_iounmap; | ||
| 697 | } | ||
| 698 | |||
| 699 | fb->fix = jzfb_fix; | ||
| 700 | fb->fix.line_length = fb->var.bits_per_pixel * fb->var.xres / 8; | ||
| 701 | fb->fix.mmio_start = mem->start; | ||
| 702 | fb->fix.mmio_len = resource_size(mem); | ||
| 703 | fb->fix.smem_start = jzfb->vidmem_phys; | ||
| 704 | fb->fix.smem_len = fb->fix.line_length * fb->var.yres; | ||
| 705 | fb->screen_base = jzfb->vidmem; | ||
| 706 | fb->pseudo_palette = jzfb->pseudo_palette; | ||
| 707 | |||
| 708 | fb_alloc_cmap(&fb->cmap, 256, 0); | ||
| 709 | |||
| 710 | clk_enable(jzfb->ldclk); | ||
| 711 | jzfb->is_enabled = 1; | ||
| 712 | |||
| 713 | writel(jzfb->framedesc->next, jzfb->base + JZ_REG_LCD_DA0); | ||
| 714 | |||
| 715 | fb->mode = NULL; | ||
| 716 | jzfb_set_par(fb); | ||
| 717 | |||
| 718 | jz_gpio_bulk_request(jz_lcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); | ||
| 719 | jz_gpio_bulk_request(jz_lcd_data_pins, jzfb_num_data_pins(jzfb)); | ||
| 720 | |||
| 721 | ret = register_framebuffer(fb); | ||
| 722 | if (ret) { | ||
| 723 | dev_err(&pdev->dev, "Failed to register framebuffer: %d\n", ret); | ||
| 724 | goto err_free_devmem; | ||
| 725 | } | ||
| 726 | |||
| 727 | jzfb->fb = fb; | ||
| 728 | |||
| 729 | return 0; | ||
| 730 | |||
| 731 | err_free_devmem: | ||
| 732 | jz_gpio_bulk_free(jz_lcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); | ||
| 733 | jz_gpio_bulk_free(jz_lcd_data_pins, jzfb_num_data_pins(jzfb)); | ||
| 734 | |||
| 735 | fb_dealloc_cmap(&fb->cmap); | ||
| 736 | jzfb_free_devmem(jzfb); | ||
| 737 | err_iounmap: | ||
| 738 | iounmap(jzfb->base); | ||
| 739 | err_put_lpclk: | ||
| 740 | clk_put(jzfb->lpclk); | ||
| 741 | err_put_ldclk: | ||
| 742 | clk_put(jzfb->ldclk); | ||
| 743 | err_framebuffer_release: | ||
| 744 | framebuffer_release(fb); | ||
| 745 | err_release_mem_region: | ||
| 746 | release_mem_region(mem->start, resource_size(mem)); | ||
| 747 | return ret; | ||
| 748 | } | ||
| 749 | |||
| 750 | static int __devexit jzfb_remove(struct platform_device *pdev) | ||
| 751 | { | ||
| 752 | struct jzfb *jzfb = platform_get_drvdata(pdev); | ||
| 753 | |||
| 754 | jzfb_blank(FB_BLANK_POWERDOWN, jzfb->fb); | ||
| 755 | |||
| 756 | jz_gpio_bulk_free(jz_lcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); | ||
| 757 | jz_gpio_bulk_free(jz_lcd_data_pins, jzfb_num_data_pins(jzfb)); | ||
| 758 | |||
| 759 | iounmap(jzfb->base); | ||
| 760 | release_mem_region(jzfb->mem->start, resource_size(jzfb->mem)); | ||
| 761 | |||
| 762 | fb_dealloc_cmap(&jzfb->fb->cmap); | ||
| 763 | jzfb_free_devmem(jzfb); | ||
| 764 | |||
| 765 | platform_set_drvdata(pdev, NULL); | ||
| 766 | |||
| 767 | clk_put(jzfb->lpclk); | ||
| 768 | clk_put(jzfb->ldclk); | ||
| 769 | |||
| 770 | framebuffer_release(jzfb->fb); | ||
| 771 | |||
| 772 | return 0; | ||
| 773 | } | ||
| 774 | |||
| 775 | #ifdef CONFIG_PM | ||
| 776 | |||
| 777 | static int jzfb_suspend(struct device *dev) | ||
| 778 | { | ||
| 779 | struct jzfb *jzfb = dev_get_drvdata(dev); | ||
| 780 | |||
| 781 | acquire_console_sem(); | ||
| 782 | fb_set_suspend(jzfb->fb, 1); | ||
| 783 | release_console_sem(); | ||
| 784 | |||
| 785 | mutex_lock(&jzfb->lock); | ||
| 786 | if (jzfb->is_enabled) | ||
| 787 | jzfb_disable(jzfb); | ||
| 788 | mutex_unlock(&jzfb->lock); | ||
| 789 | |||
| 790 | return 0; | ||
| 791 | } | ||
| 792 | |||
| 793 | static int jzfb_resume(struct device *dev) | ||
| 794 | { | ||
| 795 | struct jzfb *jzfb = dev_get_drvdata(dev); | ||
| 796 | clk_enable(jzfb->ldclk); | ||
| 797 | |||
| 798 | mutex_lock(&jzfb->lock); | ||
| 799 | if (jzfb->is_enabled) | ||
| 800 | jzfb_enable(jzfb); | ||
| 801 | mutex_unlock(&jzfb->lock); | ||
| 802 | |||
| 803 | acquire_console_sem(); | ||
| 804 | fb_set_suspend(jzfb->fb, 0); | ||
| 805 | release_console_sem(); | ||
| 806 | |||
| 807 | return 0; | ||
| 808 | } | ||
| 809 | |||
| 810 | static const struct dev_pm_ops jzfb_pm_ops = { | ||
| 811 | .suspend = jzfb_suspend, | ||
| 812 | .resume = jzfb_resume, | ||
| 813 | .poweroff = jzfb_suspend, | ||
| 814 | .restore = jzfb_resume, | ||
| 815 | }; | ||
| 816 | |||
| 817 | #define JZFB_PM_OPS (&jzfb_pm_ops) | ||
| 818 | |||
| 819 | #else | ||
| 820 | #define JZFB_PM_OPS NULL | ||
| 821 | #endif | ||
| 822 | |||
| 823 | static struct platform_driver jzfb_driver = { | ||
| 824 | .probe = jzfb_probe, | ||
| 825 | .remove = __devexit_p(jzfb_remove), | ||
| 826 | .driver = { | ||
| 827 | .name = "jz4740-fb", | ||
| 828 | .pm = JZFB_PM_OPS, | ||
| 829 | }, | ||
| 830 | }; | ||
| 831 | |||
| 832 | static int __init jzfb_init(void) | ||
| 833 | { | ||
| 834 | return platform_driver_register(&jzfb_driver); | ||
| 835 | } | ||
| 836 | module_init(jzfb_init); | ||
| 837 | |||
| 838 | static void __exit jzfb_exit(void) | ||
| 839 | { | ||
| 840 | platform_driver_unregister(&jzfb_driver); | ||
| 841 | } | ||
| 842 | module_exit(jzfb_exit); | ||
| 843 | |||
| 844 | MODULE_LICENSE("GPL"); | ||
| 845 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
| 846 | MODULE_DESCRIPTION("JZ4740 SoC LCD framebuffer driver"); | ||
| 847 | MODULE_ALIAS("platform:jz4740-fb"); | ||
diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c index 980548390048..3ee5e63cfa4f 100644 --- a/drivers/video/tdfxfb.c +++ b/drivers/video/tdfxfb.c | |||
| @@ -1571,8 +1571,8 @@ out_err_iobase: | |||
| 1571 | if (default_par->mtrr_handle >= 0) | 1571 | if (default_par->mtrr_handle >= 0) |
| 1572 | mtrr_del(default_par->mtrr_handle, info->fix.smem_start, | 1572 | mtrr_del(default_par->mtrr_handle, info->fix.smem_start, |
| 1573 | info->fix.smem_len); | 1573 | info->fix.smem_len); |
| 1574 | release_mem_region(pci_resource_start(pdev, 2), | 1574 | release_region(pci_resource_start(pdev, 2), |
| 1575 | pci_resource_len(pdev, 2)); | 1575 | pci_resource_len(pdev, 2)); |
| 1576 | out_err_screenbase: | 1576 | out_err_screenbase: |
| 1577 | if (info->screen_base) | 1577 | if (info->screen_base) |
| 1578 | iounmap(info->screen_base); | 1578 | iounmap(info->screen_base); |
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c index fa97d3e7c21a..7c7f42a12796 100644 --- a/drivers/video/xen-fbfront.c +++ b/drivers/video/xen-fbfront.c | |||
| @@ -684,7 +684,7 @@ static struct xenbus_driver xenfb_driver = { | |||
| 684 | 684 | ||
| 685 | static int __init xenfb_init(void) | 685 | static int __init xenfb_init(void) |
| 686 | { | 686 | { |
| 687 | if (!xen_domain()) | 687 | if (!xen_pv_domain()) |
| 688 | return -ENODEV; | 688 | return -ENODEV; |
| 689 | 689 | ||
| 690 | /* Nothing to do if running in dom0. */ | 690 | /* Nothing to do if running in dom0. */ |
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c index 574dc54e12d4..29b5daacc217 100644 --- a/drivers/video/xilinxfb.c +++ b/drivers/video/xilinxfb.c | |||
| @@ -485,6 +485,8 @@ static int __devexit xilinxfb_of_remove(struct of_device *op) | |||
| 485 | /* Match table for of_platform binding */ | 485 | /* Match table for of_platform binding */ |
| 486 | static struct of_device_id xilinxfb_of_match[] __devinitdata = { | 486 | static struct of_device_id xilinxfb_of_match[] __devinitdata = { |
| 487 | { .compatible = "xlnx,xps-tft-1.00.a", }, | 487 | { .compatible = "xlnx,xps-tft-1.00.a", }, |
| 488 | { .compatible = "xlnx,xps-tft-2.00.a", }, | ||
| 489 | { .compatible = "xlnx,xps-tft-2.01.a", }, | ||
| 488 | { .compatible = "xlnx,plb-tft-cntlr-ref-1.00.a", }, | 490 | { .compatible = "xlnx,plb-tft-cntlr-ref-1.00.a", }, |
| 489 | { .compatible = "xlnx,plb-dvi-cntlr-ref-1.00.c", }, | 491 | { .compatible = "xlnx,plb-dvi-cntlr-ref-1.00.c", }, |
| 490 | {}, | 492 | {}, |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index afcfacc9bbe2..b04b18468932 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
| @@ -875,6 +875,24 @@ config TXX9_WDT | |||
| 875 | help | 875 | help |
| 876 | Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs. | 876 | Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs. |
| 877 | 877 | ||
| 878 | config OCTEON_WDT | ||
| 879 | tristate "Cavium OCTEON SOC family Watchdog Timer" | ||
| 880 | depends on CPU_CAVIUM_OCTEON | ||
| 881 | default y | ||
| 882 | select EXPORT_UASM if OCTEON_WDT = m | ||
| 883 | help | ||
| 884 | Hardware driver for OCTEON's on chip watchdog timer. | ||
| 885 | Enables the watchdog for all cores running Linux. It | ||
| 886 | installs a NMI handler and pokes the watchdog based on an | ||
| 887 | interrupt. On first expiration of the watchdog, the | ||
| 888 | interrupt handler pokes it. The second expiration causes an | ||
| 889 | NMI that prints a message. The third expiration causes a | ||
| 890 | global soft reset. | ||
| 891 | |||
| 892 | When userspace has /dev/watchdog open, no poking is done | ||
| 893 | from the first interrupt, it is then only poked when the | ||
| 894 | device is written. | ||
| 895 | |||
| 878 | # PARISC Architecture | 896 | # PARISC Architecture |
| 879 | 897 | ||
| 880 | # POWERPC Architecture | 898 | # POWERPC Architecture |
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index 72f3e2073f8e..e30289a5e367 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile | |||
| @@ -114,6 +114,8 @@ obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt.o | |||
| 114 | obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o | 114 | obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o |
| 115 | obj-$(CONFIG_AR7_WDT) += ar7_wdt.o | 115 | obj-$(CONFIG_AR7_WDT) += ar7_wdt.o |
| 116 | obj-$(CONFIG_TXX9_WDT) += txx9wdt.o | 116 | obj-$(CONFIG_TXX9_WDT) += txx9wdt.o |
| 117 | obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o | ||
| 118 | octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o | ||
| 117 | 119 | ||
| 118 | # PARISC Architecture | 120 | # PARISC Architecture |
| 119 | 121 | ||
diff --git a/drivers/watchdog/octeon-wdt-main.c b/drivers/watchdog/octeon-wdt-main.c new file mode 100644 index 000000000000..2a410170eca6 --- /dev/null +++ b/drivers/watchdog/octeon-wdt-main.c | |||
| @@ -0,0 +1,745 @@ | |||
| 1 | /* | ||
| 2 | * Octeon Watchdog driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008, 2009, 2010 Cavium Networks | ||
| 5 | * | ||
| 6 | * Some parts derived from wdt.c | ||
| 7 | * | ||
| 8 | * (c) Copyright 1996-1997 Alan Cox <alan@lxorguk.ukuu.org.uk>, | ||
| 9 | * All Rights Reserved. | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or | ||
| 12 | * modify it under the terms of the GNU General Public License | ||
| 13 | * as published by the Free Software Foundation; either version | ||
| 14 | * 2 of the License, or (at your option) any later version. | ||
| 15 | * | ||
| 16 | * Neither Alan Cox nor CymruNet Ltd. admit liability nor provide | ||
| 17 | * warranty for any of this software. This material is provided | ||
| 18 | * "AS-IS" and at no charge. | ||
| 19 | * | ||
| 20 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk> | ||
| 21 | * | ||
| 22 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 23 | * License. See the file "COPYING" in the main directory of this archive | ||
| 24 | * for more details. | ||
| 25 | * | ||
| 26 | * | ||
| 27 | * The OCTEON watchdog has a maximum timeout of 2^32 * io_clock. | ||
| 28 | * For most systems this is less than 10 seconds, so to allow for | ||
| 29 | * software to request longer watchdog heartbeats, we maintain software | ||
| 30 | * counters to count multiples of the base rate. If the system locks | ||
| 31 | * up in such a manner that we can not run the software counters, the | ||
| 32 | * only result is a watchdog reset sooner than was requested. But | ||
| 33 | * that is OK, because in this case userspace would likely not be able | ||
| 34 | * to do anything anyhow. | ||
| 35 | * | ||
| 36 | * The hardware watchdog interval we call the period. The OCTEON | ||
| 37 | * watchdog goes through several stages, after the first period an | ||
| 38 | * irq is asserted, then if it is not reset, after the next period NMI | ||
| 39 | * is asserted, then after an additional period a chip wide soft reset. | ||
| 40 | * So for the software counters, we reset watchdog after each period | ||
| 41 | * and decrement the counter. But for the last two periods we need to | ||
| 42 | * let the watchdog progress to the NMI stage so we disable the irq | ||
| 43 | * and let it proceed. Once in the NMI, we print the register state | ||
| 44 | * to the serial port and then wait for the reset. | ||
| 45 | * | ||
| 46 | * A watchdog is maintained for each CPU in the system, that way if | ||
| 47 | * one CPU suffers a lockup, we also get a register dump and reset. | ||
| 48 | * The userspace ping resets the watchdog on all CPUs. | ||
| 49 | * | ||
| 50 | * Before userspace opens the watchdog device, we still run the | ||
| 51 | * watchdogs to catch any lockups that may be kernel related. | ||
| 52 | * | ||
| 53 | */ | ||
| 54 | |||
| 55 | #include <linux/miscdevice.h> | ||
| 56 | #include <linux/interrupt.h> | ||
| 57 | #include <linux/watchdog.h> | ||
| 58 | #include <linux/cpumask.h> | ||
| 59 | #include <linux/bitops.h> | ||
| 60 | #include <linux/kernel.h> | ||
| 61 | #include <linux/module.h> | ||
| 62 | #include <linux/string.h> | ||
| 63 | #include <linux/delay.h> | ||
| 64 | #include <linux/cpu.h> | ||
| 65 | #include <linux/smp.h> | ||
| 66 | #include <linux/fs.h> | ||
| 67 | |||
| 68 | #include <asm/mipsregs.h> | ||
| 69 | #include <asm/uasm.h> | ||
| 70 | |||
| 71 | #include <asm/octeon/octeon.h> | ||
| 72 | |||
| 73 | /* The count needed to achieve timeout_sec. */ | ||
| 74 | static unsigned int timeout_cnt; | ||
| 75 | |||
| 76 | /* The maximum period supported. */ | ||
| 77 | static unsigned int max_timeout_sec; | ||
| 78 | |||
| 79 | /* The current period. */ | ||
| 80 | static unsigned int timeout_sec; | ||
| 81 | |||
| 82 | /* Set to non-zero when userspace countdown mode active */ | ||
| 83 | static int do_coundown; | ||
| 84 | static unsigned int countdown_reset; | ||
| 85 | static unsigned int per_cpu_countdown[NR_CPUS]; | ||
| 86 | |||
| 87 | static cpumask_t irq_enabled_cpus; | ||
| 88 | |||
| 89 | #define WD_TIMO 60 /* Default heartbeat = 60 seconds */ | ||
| 90 | |||
| 91 | static int heartbeat = WD_TIMO; | ||
| 92 | module_param(heartbeat, int, S_IRUGO); | ||
| 93 | MODULE_PARM_DESC(heartbeat, | ||
| 94 | "Watchdog heartbeat in seconds. (0 < heartbeat, default=" | ||
| 95 | __MODULE_STRING(WD_TIMO) ")"); | ||
| 96 | |||
| 97 | static int nowayout = WATCHDOG_NOWAYOUT; | ||
| 98 | module_param(nowayout, int, S_IRUGO); | ||
| 99 | MODULE_PARM_DESC(nowayout, | ||
| 100 | "Watchdog cannot be stopped once started (default=" | ||
| 101 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 102 | |||
| 103 | static unsigned long octeon_wdt_is_open; | ||
| 104 | static char expect_close; | ||
| 105 | |||
| 106 | static u32 __initdata nmi_stage1_insns[64]; | ||
| 107 | /* We need one branch and therefore one relocation per target label. */ | ||
| 108 | static struct uasm_label __initdata labels[5]; | ||
| 109 | static struct uasm_reloc __initdata relocs[5]; | ||
| 110 | |||
| 111 | enum lable_id { | ||
| 112 | label_enter_bootloader = 1 | ||
| 113 | }; | ||
| 114 | |||
| 115 | /* Some CP0 registers */ | ||
| 116 | #define K0 26 | ||
| 117 | #define C0_CVMMEMCTL 11, 7 | ||
| 118 | #define C0_STATUS 12, 0 | ||
| 119 | #define C0_EBASE 15, 1 | ||
| 120 | #define C0_DESAVE 31, 0 | ||
| 121 | |||
| 122 | void octeon_wdt_nmi_stage2(void); | ||
| 123 | |||
| 124 | static void __init octeon_wdt_build_stage1(void) | ||
| 125 | { | ||
| 126 | int i; | ||
| 127 | int len; | ||
| 128 | u32 *p = nmi_stage1_insns; | ||
| 129 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 130 | struct uasm_label *l = labels; | ||
| 131 | struct uasm_reloc *r = relocs; | ||
| 132 | #endif | ||
| 133 | |||
| 134 | /* | ||
| 135 | * For the next few instructions running the debugger may | ||
| 136 | * cause corruption of k0 in the saved registers. Since we're | ||
| 137 | * about to crash, nobody probably cares. | ||
| 138 | * | ||
| 139 | * Save K0 into the debug scratch register | ||
| 140 | */ | ||
| 141 | uasm_i_dmtc0(&p, K0, C0_DESAVE); | ||
| 142 | |||
| 143 | uasm_i_mfc0(&p, K0, C0_STATUS); | ||
| 144 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 145 | uasm_il_bbit0(&p, &r, K0, ilog2(ST0_NMI), label_enter_bootloader); | ||
| 146 | #endif | ||
| 147 | /* Force 64-bit addressing enabled */ | ||
| 148 | uasm_i_ori(&p, K0, K0, ST0_UX | ST0_SX | ST0_KX); | ||
| 149 | uasm_i_mtc0(&p, K0, C0_STATUS); | ||
| 150 | |||
| 151 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 152 | uasm_i_mfc0(&p, K0, C0_EBASE); | ||
| 153 | /* Coreid number in K0 */ | ||
| 154 | uasm_i_andi(&p, K0, K0, 0xf); | ||
| 155 | /* 8 * coreid in bits 16-31 */ | ||
| 156 | uasm_i_dsll_safe(&p, K0, K0, 3 + 16); | ||
| 157 | uasm_i_ori(&p, K0, K0, 0x8001); | ||
| 158 | uasm_i_dsll_safe(&p, K0, K0, 16); | ||
| 159 | uasm_i_ori(&p, K0, K0, 0x0700); | ||
| 160 | uasm_i_drotr_safe(&p, K0, K0, 32); | ||
| 161 | /* | ||
| 162 | * Should result in: 0x8001,0700,0000,8*coreid which is | ||
| 163 | * CVMX_CIU_WDOGX(coreid) - 0x0500 | ||
| 164 | * | ||
| 165 | * Now ld K0, CVMX_CIU_WDOGX(coreid) | ||
| 166 | */ | ||
| 167 | uasm_i_ld(&p, K0, 0x500, K0); | ||
| 168 | /* | ||
| 169 | * If bit one set handle the NMI as a watchdog event. | ||
| 170 | * otherwise transfer control to bootloader. | ||
| 171 | */ | ||
| 172 | uasm_il_bbit0(&p, &r, K0, 1, label_enter_bootloader); | ||
| 173 | uasm_i_nop(&p); | ||
| 174 | #endif | ||
| 175 | |||
| 176 | /* Clear Dcache so cvmseg works right. */ | ||
| 177 | uasm_i_cache(&p, 1, 0, 0); | ||
| 178 | |||
| 179 | /* Use K0 to do a read/modify/write of CVMMEMCTL */ | ||
| 180 | uasm_i_dmfc0(&p, K0, C0_CVMMEMCTL); | ||
| 181 | /* Clear out the size of CVMSEG */ | ||
| 182 | uasm_i_dins(&p, K0, 0, 0, 6); | ||
| 183 | /* Set CVMSEG to its largest value */ | ||
| 184 | uasm_i_ori(&p, K0, K0, 0x1c0 | 54); | ||
| 185 | /* Store the CVMMEMCTL value */ | ||
| 186 | uasm_i_dmtc0(&p, K0, C0_CVMMEMCTL); | ||
| 187 | |||
| 188 | /* Load the address of the second stage handler */ | ||
| 189 | UASM_i_LA(&p, K0, (long)octeon_wdt_nmi_stage2); | ||
| 190 | uasm_i_jr(&p, K0); | ||
| 191 | uasm_i_dmfc0(&p, K0, C0_DESAVE); | ||
| 192 | |||
| 193 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 194 | uasm_build_label(&l, p, label_enter_bootloader); | ||
| 195 | /* Jump to the bootloader and restore K0 */ | ||
| 196 | UASM_i_LA(&p, K0, (long)octeon_bootloader_entry_addr); | ||
| 197 | uasm_i_jr(&p, K0); | ||
| 198 | uasm_i_dmfc0(&p, K0, C0_DESAVE); | ||
| 199 | #endif | ||
| 200 | uasm_resolve_relocs(relocs, labels); | ||
| 201 | |||
| 202 | len = (int)(p - nmi_stage1_insns); | ||
| 203 | pr_debug("Synthesized NMI stage 1 handler (%d instructions).\n", len); | ||
| 204 | |||
| 205 | pr_debug("\t.set push\n"); | ||
| 206 | pr_debug("\t.set noreorder\n"); | ||
| 207 | for (i = 0; i < len; i++) | ||
| 208 | pr_debug("\t.word 0x%08x\n", nmi_stage1_insns[i]); | ||
| 209 | pr_debug("\t.set pop\n"); | ||
| 210 | |||
| 211 | if (len > 32) | ||
| 212 | panic("NMI stage 1 handler exceeds 32 instructions, was %d\n", len); | ||
| 213 | } | ||
| 214 | |||
| 215 | static int cpu2core(int cpu) | ||
| 216 | { | ||
| 217 | #ifdef CONFIG_SMP | ||
| 218 | return cpu_logical_map(cpu); | ||
| 219 | #else | ||
| 220 | return cvmx_get_core_num(); | ||
| 221 | #endif | ||
| 222 | } | ||
| 223 | |||
| 224 | static int core2cpu(int coreid) | ||
| 225 | { | ||
| 226 | #ifdef CONFIG_SMP | ||
| 227 | return cpu_number_map(coreid); | ||
| 228 | #else | ||
| 229 | return 0; | ||
| 230 | #endif | ||
| 231 | } | ||
| 232 | |||
| 233 | /** | ||
| 234 | * Poke the watchdog when an interrupt is received | ||
| 235 | * | ||
| 236 | * @cpl: | ||
| 237 | * @dev_id: | ||
| 238 | * | ||
| 239 | * Returns | ||
| 240 | */ | ||
| 241 | static irqreturn_t octeon_wdt_poke_irq(int cpl, void *dev_id) | ||
| 242 | { | ||
| 243 | unsigned int core = cvmx_get_core_num(); | ||
| 244 | int cpu = core2cpu(core); | ||
| 245 | |||
| 246 | if (do_coundown) { | ||
| 247 | if (per_cpu_countdown[cpu] > 0) { | ||
| 248 | /* We're alive, poke the watchdog */ | ||
| 249 | cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1); | ||
| 250 | per_cpu_countdown[cpu]--; | ||
| 251 | } else { | ||
| 252 | /* Bad news, you are about to reboot. */ | ||
| 253 | disable_irq_nosync(cpl); | ||
| 254 | cpumask_clear_cpu(cpu, &irq_enabled_cpus); | ||
| 255 | } | ||
| 256 | } else { | ||
| 257 | /* Not open, just ping away... */ | ||
| 258 | cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1); | ||
| 259 | } | ||
| 260 | return IRQ_HANDLED; | ||
| 261 | } | ||
| 262 | |||
| 263 | /* From setup.c */ | ||
| 264 | extern int prom_putchar(char c); | ||
| 265 | |||
| 266 | /** | ||
| 267 | * Write a string to the uart | ||
| 268 | * | ||
| 269 | * @str: String to write | ||
| 270 | */ | ||
| 271 | static void octeon_wdt_write_string(const char *str) | ||
| 272 | { | ||
| 273 | /* Just loop writing one byte at a time */ | ||
| 274 | while (*str) | ||
| 275 | prom_putchar(*str++); | ||
| 276 | } | ||
| 277 | |||
| 278 | /** | ||
| 279 | * Write a hex number out of the uart | ||
| 280 | * | ||
| 281 | * @value: Number to display | ||
| 282 | * @digits: Number of digits to print (1 to 16) | ||
| 283 | */ | ||
| 284 | static void octeon_wdt_write_hex(u64 value, int digits) | ||
| 285 | { | ||
| 286 | int d; | ||
| 287 | int v; | ||
| 288 | for (d = 0; d < digits; d++) { | ||
| 289 | v = (value >> ((digits - d - 1) * 4)) & 0xf; | ||
| 290 | if (v >= 10) | ||
| 291 | prom_putchar('a' + v - 10); | ||
| 292 | else | ||
| 293 | prom_putchar('0' + v); | ||
| 294 | } | ||
| 295 | } | ||
| 296 | |||
| 297 | const char *reg_name[] = { | ||
| 298 | "$0", "at", "v0", "v1", "a0", "a1", "a2", "a3", | ||
| 299 | "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3", | ||
| 300 | "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", | ||
| 301 | "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra" | ||
| 302 | }; | ||
| 303 | |||
| 304 | /** | ||
| 305 | * NMI stage 3 handler. NMIs are handled in the following manner: | ||
| 306 | * 1) The first NMI handler enables CVMSEG and transfers from | ||
| 307 | * the bootbus region into normal memory. It is careful to not | ||
| 308 | * destroy any registers. | ||
| 309 | * 2) The second stage handler uses CVMSEG to save the registers | ||
| 310 | * and create a stack for C code. It then calls the third level | ||
| 311 | * handler with one argument, a pointer to the register values. | ||
| 312 | * 3) The third, and final, level handler is the following C | ||
| 313 | * function that prints out some useful infomration. | ||
| 314 | * | ||
| 315 | * @reg: Pointer to register state before the NMI | ||
| 316 | */ | ||
| 317 | void octeon_wdt_nmi_stage3(u64 reg[32]) | ||
| 318 | { | ||
| 319 | u64 i; | ||
| 320 | |||
| 321 | unsigned int coreid = cvmx_get_core_num(); | ||
| 322 | /* | ||
| 323 | * Save status and cause early to get them before any changes | ||
| 324 | * might happen. | ||
| 325 | */ | ||
| 326 | u64 cp0_cause = read_c0_cause(); | ||
| 327 | u64 cp0_status = read_c0_status(); | ||
| 328 | u64 cp0_error_epc = read_c0_errorepc(); | ||
| 329 | u64 cp0_epc = read_c0_epc(); | ||
| 330 | |||
| 331 | /* Delay so output from all cores output is not jumbled together. */ | ||
| 332 | __delay(100000000ull * coreid); | ||
| 333 | |||
| 334 | octeon_wdt_write_string("\r\n*** NMI Watchdog interrupt on Core 0x"); | ||
| 335 | octeon_wdt_write_hex(coreid, 1); | ||
| 336 | octeon_wdt_write_string(" ***\r\n"); | ||
| 337 | for (i = 0; i < 32; i++) { | ||
| 338 | octeon_wdt_write_string("\t"); | ||
| 339 | octeon_wdt_write_string(reg_name[i]); | ||
| 340 | octeon_wdt_write_string("\t0x"); | ||
| 341 | octeon_wdt_write_hex(reg[i], 16); | ||
| 342 | if (i & 1) | ||
| 343 | octeon_wdt_write_string("\r\n"); | ||
| 344 | } | ||
| 345 | octeon_wdt_write_string("\terr_epc\t0x"); | ||
| 346 | octeon_wdt_write_hex(cp0_error_epc, 16); | ||
| 347 | |||
| 348 | octeon_wdt_write_string("\tepc\t0x"); | ||
| 349 | octeon_wdt_write_hex(cp0_epc, 16); | ||
| 350 | octeon_wdt_write_string("\r\n"); | ||
| 351 | |||
| 352 | octeon_wdt_write_string("\tstatus\t0x"); | ||
| 353 | octeon_wdt_write_hex(cp0_status, 16); | ||
| 354 | octeon_wdt_write_string("\tcause\t0x"); | ||
| 355 | octeon_wdt_write_hex(cp0_cause, 16); | ||
| 356 | octeon_wdt_write_string("\r\n"); | ||
| 357 | |||
| 358 | octeon_wdt_write_string("\tsum0\t0x"); | ||
| 359 | octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_SUM0(coreid * 2)), 16); | ||
| 360 | octeon_wdt_write_string("\ten0\t0x"); | ||
| 361 | octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)), 16); | ||
| 362 | octeon_wdt_write_string("\r\n"); | ||
| 363 | |||
| 364 | octeon_wdt_write_string("*** Chip soft reset soon ***\r\n"); | ||
| 365 | } | ||
| 366 | |||
| 367 | static void octeon_wdt_disable_interrupt(int cpu) | ||
| 368 | { | ||
| 369 | unsigned int core; | ||
| 370 | unsigned int irq; | ||
| 371 | union cvmx_ciu_wdogx ciu_wdog; | ||
| 372 | |||
| 373 | core = cpu2core(cpu); | ||
| 374 | |||
| 375 | irq = OCTEON_IRQ_WDOG0 + core; | ||
| 376 | |||
| 377 | /* Poke the watchdog to clear out its state */ | ||
| 378 | cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1); | ||
| 379 | |||
| 380 | /* Disable the hardware. */ | ||
| 381 | ciu_wdog.u64 = 0; | ||
| 382 | cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64); | ||
| 383 | |||
| 384 | free_irq(irq, octeon_wdt_poke_irq); | ||
| 385 | } | ||
| 386 | |||
| 387 | static void octeon_wdt_setup_interrupt(int cpu) | ||
| 388 | { | ||
| 389 | unsigned int core; | ||
| 390 | unsigned int irq; | ||
| 391 | union cvmx_ciu_wdogx ciu_wdog; | ||
| 392 | |||
| 393 | core = cpu2core(cpu); | ||
| 394 | |||
| 395 | /* Disable it before doing anything with the interrupts. */ | ||
| 396 | ciu_wdog.u64 = 0; | ||
| 397 | cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64); | ||
| 398 | |||
| 399 | per_cpu_countdown[cpu] = countdown_reset; | ||
| 400 | |||
| 401 | irq = OCTEON_IRQ_WDOG0 + core; | ||
| 402 | |||
| 403 | if (request_irq(irq, octeon_wdt_poke_irq, | ||
| 404 | IRQF_DISABLED, "octeon_wdt", octeon_wdt_poke_irq)) | ||
| 405 | panic("octeon_wdt: Couldn't obtain irq %d", irq); | ||
| 406 | |||
| 407 | cpumask_set_cpu(cpu, &irq_enabled_cpus); | ||
| 408 | |||
| 409 | /* Poke the watchdog to clear out its state */ | ||
| 410 | cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1); | ||
| 411 | |||
| 412 | /* Finally enable the watchdog now that all handlers are installed */ | ||
| 413 | ciu_wdog.u64 = 0; | ||
| 414 | ciu_wdog.s.len = timeout_cnt; | ||
| 415 | ciu_wdog.s.mode = 3; /* 3 = Interrupt + NMI + Soft-Reset */ | ||
| 416 | cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64); | ||
| 417 | } | ||
| 418 | |||
| 419 | static int octeon_wdt_cpu_callback(struct notifier_block *nfb, | ||
| 420 | unsigned long action, void *hcpu) | ||
| 421 | { | ||
| 422 | unsigned int cpu = (unsigned long)hcpu; | ||
| 423 | |||
| 424 | switch (action) { | ||
| 425 | case CPU_DOWN_PREPARE: | ||
| 426 | octeon_wdt_disable_interrupt(cpu); | ||
| 427 | break; | ||
| 428 | case CPU_ONLINE: | ||
| 429 | case CPU_DOWN_FAILED: | ||
| 430 | octeon_wdt_setup_interrupt(cpu); | ||
| 431 | break; | ||
| 432 | default: | ||
| 433 | break; | ||
| 434 | } | ||
| 435 | return NOTIFY_OK; | ||
| 436 | } | ||
| 437 | |||
| 438 | static void octeon_wdt_ping(void) | ||
| 439 | { | ||
| 440 | int cpu; | ||
| 441 | int coreid; | ||
| 442 | |||
| 443 | for_each_online_cpu(cpu) { | ||
| 444 | coreid = cpu2core(cpu); | ||
| 445 | cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1); | ||
| 446 | per_cpu_countdown[cpu] = countdown_reset; | ||
| 447 | if ((countdown_reset || !do_coundown) && | ||
| 448 | !cpumask_test_cpu(cpu, &irq_enabled_cpus)) { | ||
| 449 | /* We have to enable the irq */ | ||
| 450 | int irq = OCTEON_IRQ_WDOG0 + coreid; | ||
| 451 | enable_irq(irq); | ||
| 452 | cpumask_set_cpu(cpu, &irq_enabled_cpus); | ||
| 453 | } | ||
| 454 | } | ||
| 455 | } | ||
| 456 | |||
| 457 | static void octeon_wdt_calc_parameters(int t) | ||
| 458 | { | ||
| 459 | unsigned int periods; | ||
| 460 | |||
| 461 | timeout_sec = max_timeout_sec; | ||
| 462 | |||
| 463 | |||
| 464 | /* | ||
| 465 | * Find the largest interrupt period, that can evenly divide | ||
| 466 | * the requested heartbeat time. | ||
| 467 | */ | ||
| 468 | while ((t % timeout_sec) != 0) | ||
| 469 | timeout_sec--; | ||
| 470 | |||
| 471 | periods = t / timeout_sec; | ||
| 472 | |||
| 473 | /* | ||
| 474 | * The last two periods are after the irq is disabled, and | ||
| 475 | * then to the nmi, so we subtract them off. | ||
| 476 | */ | ||
| 477 | |||
| 478 | countdown_reset = periods > 2 ? periods - 2 : 0; | ||
| 479 | heartbeat = t; | ||
| 480 | timeout_cnt = ((octeon_get_clock_rate() >> 8) * timeout_sec) >> 8; | ||
| 481 | } | ||
| 482 | |||
| 483 | static int octeon_wdt_set_heartbeat(int t) | ||
| 484 | { | ||
| 485 | int cpu; | ||
| 486 | int coreid; | ||
| 487 | union cvmx_ciu_wdogx ciu_wdog; | ||
| 488 | |||
| 489 | if (t <= 0) | ||
| 490 | return -1; | ||
| 491 | |||
| 492 | octeon_wdt_calc_parameters(t); | ||
| 493 | |||
| 494 | for_each_online_cpu(cpu) { | ||
| 495 | coreid = cpu2core(cpu); | ||
| 496 | cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1); | ||
| 497 | ciu_wdog.u64 = 0; | ||
| 498 | ciu_wdog.s.len = timeout_cnt; | ||
| 499 | ciu_wdog.s.mode = 3; /* 3 = Interrupt + NMI + Soft-Reset */ | ||
| 500 | cvmx_write_csr(CVMX_CIU_WDOGX(coreid), ciu_wdog.u64); | ||
| 501 | cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1); | ||
| 502 | } | ||
| 503 | octeon_wdt_ping(); /* Get the irqs back on. */ | ||
| 504 | return 0; | ||
| 505 | } | ||
| 506 | |||
| 507 | /** | ||
| 508 | * octeon_wdt_write: | ||
| 509 | * @file: file handle to the watchdog | ||
| 510 | * @buf: buffer to write (unused as data does not matter here | ||
| 511 | * @count: count of bytes | ||
| 512 | * @ppos: pointer to the position to write. No seeks allowed | ||
| 513 | * | ||
| 514 | * A write to a watchdog device is defined as a keepalive signal. Any | ||
| 515 | * write of data will do, as we we don't define content meaning. | ||
| 516 | */ | ||
| 517 | |||
| 518 | static ssize_t octeon_wdt_write(struct file *file, const char __user *buf, | ||
| 519 | size_t count, loff_t *ppos) | ||
| 520 | { | ||
| 521 | if (count) { | ||
| 522 | if (!nowayout) { | ||
| 523 | size_t i; | ||
| 524 | |||
| 525 | /* In case it was set long ago */ | ||
| 526 | expect_close = 0; | ||
| 527 | |||
| 528 | for (i = 0; i != count; i++) { | ||
| 529 | char c; | ||
| 530 | if (get_user(c, buf + i)) | ||
| 531 | return -EFAULT; | ||
| 532 | if (c == 'V') | ||
| 533 | expect_close = 1; | ||
| 534 | } | ||
| 535 | } | ||
| 536 | octeon_wdt_ping(); | ||
| 537 | } | ||
| 538 | return count; | ||
| 539 | } | ||
| 540 | |||
| 541 | /** | ||
| 542 | * octeon_wdt_ioctl: | ||
| 543 | * @file: file handle to the device | ||
| 544 | * @cmd: watchdog command | ||
| 545 | * @arg: argument pointer | ||
| 546 | * | ||
| 547 | * The watchdog API defines a common set of functions for all | ||
| 548 | * watchdogs according to their available features. We only | ||
| 549 | * actually usefully support querying capabilities and setting | ||
| 550 | * the timeout. | ||
| 551 | */ | ||
| 552 | |||
| 553 | static long octeon_wdt_ioctl(struct file *file, unsigned int cmd, | ||
| 554 | unsigned long arg) | ||
| 555 | { | ||
| 556 | void __user *argp = (void __user *)arg; | ||
| 557 | int __user *p = argp; | ||
| 558 | int new_heartbeat; | ||
| 559 | |||
| 560 | static struct watchdog_info ident = { | ||
| 561 | .options = WDIOF_SETTIMEOUT| | ||
| 562 | WDIOF_MAGICCLOSE| | ||
| 563 | WDIOF_KEEPALIVEPING, | ||
| 564 | .firmware_version = 1, | ||
| 565 | .identity = "OCTEON", | ||
| 566 | }; | ||
| 567 | |||
| 568 | switch (cmd) { | ||
| 569 | case WDIOC_GETSUPPORT: | ||
| 570 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | ||
| 571 | case WDIOC_GETSTATUS: | ||
| 572 | case WDIOC_GETBOOTSTATUS: | ||
| 573 | return put_user(0, p); | ||
| 574 | case WDIOC_KEEPALIVE: | ||
| 575 | octeon_wdt_ping(); | ||
| 576 | return 0; | ||
| 577 | case WDIOC_SETTIMEOUT: | ||
| 578 | if (get_user(new_heartbeat, p)) | ||
| 579 | return -EFAULT; | ||
| 580 | if (octeon_wdt_set_heartbeat(new_heartbeat)) | ||
| 581 | return -EINVAL; | ||
| 582 | /* Fall through. */ | ||
| 583 | case WDIOC_GETTIMEOUT: | ||
| 584 | return put_user(heartbeat, p); | ||
| 585 | default: | ||
| 586 | return -ENOTTY; | ||
| 587 | } | ||
| 588 | } | ||
| 589 | |||
| 590 | /** | ||
| 591 | * octeon_wdt_open: | ||
| 592 | * @inode: inode of device | ||
| 593 | * @file: file handle to device | ||
| 594 | * | ||
| 595 | * The watchdog device has been opened. The watchdog device is single | ||
| 596 | * open and on opening we do a ping to reset the counters. | ||
| 597 | */ | ||
| 598 | |||
| 599 | static int octeon_wdt_open(struct inode *inode, struct file *file) | ||
| 600 | { | ||
| 601 | if (test_and_set_bit(0, &octeon_wdt_is_open)) | ||
| 602 | return -EBUSY; | ||
| 603 | /* | ||
| 604 | * Activate | ||
| 605 | */ | ||
| 606 | octeon_wdt_ping(); | ||
| 607 | do_coundown = 1; | ||
| 608 | return nonseekable_open(inode, file); | ||
| 609 | } | ||
| 610 | |||
| 611 | /** | ||
| 612 | * octeon_wdt_release: | ||
| 613 | * @inode: inode to board | ||
| 614 | * @file: file handle to board | ||
| 615 | * | ||
| 616 | * The watchdog has a configurable API. There is a religious dispute | ||
| 617 | * between people who want their watchdog to be able to shut down and | ||
| 618 | * those who want to be sure if the watchdog manager dies the machine | ||
| 619 | * reboots. In the former case we disable the counters, in the latter | ||
| 620 | * case you have to open it again very soon. | ||
| 621 | */ | ||
| 622 | |||
| 623 | static int octeon_wdt_release(struct inode *inode, struct file *file) | ||
| 624 | { | ||
| 625 | if (expect_close) { | ||
| 626 | do_coundown = 0; | ||
| 627 | octeon_wdt_ping(); | ||
| 628 | } else { | ||
| 629 | pr_crit("octeon_wdt: WDT device closed unexpectedly. WDT will not stop!\n"); | ||
| 630 | } | ||
| 631 | clear_bit(0, &octeon_wdt_is_open); | ||
| 632 | expect_close = 0; | ||
| 633 | return 0; | ||
| 634 | } | ||
| 635 | |||
| 636 | static const struct file_operations octeon_wdt_fops = { | ||
| 637 | .owner = THIS_MODULE, | ||
| 638 | .llseek = no_llseek, | ||
| 639 | .write = octeon_wdt_write, | ||
| 640 | .unlocked_ioctl = octeon_wdt_ioctl, | ||
| 641 | .open = octeon_wdt_open, | ||
| 642 | .release = octeon_wdt_release, | ||
| 643 | }; | ||
| 644 | |||
| 645 | static struct miscdevice octeon_wdt_miscdev = { | ||
| 646 | .minor = WATCHDOG_MINOR, | ||
| 647 | .name = "watchdog", | ||
| 648 | .fops = &octeon_wdt_fops, | ||
| 649 | }; | ||
| 650 | |||
| 651 | static struct notifier_block octeon_wdt_cpu_notifier = { | ||
| 652 | .notifier_call = octeon_wdt_cpu_callback, | ||
| 653 | }; | ||
| 654 | |||
| 655 | |||
| 656 | /** | ||
| 657 | * Module/ driver initialization. | ||
| 658 | * | ||
| 659 | * Returns Zero on success | ||
| 660 | */ | ||
| 661 | static int __init octeon_wdt_init(void) | ||
| 662 | { | ||
| 663 | int i; | ||
| 664 | int ret; | ||
| 665 | int cpu; | ||
| 666 | u64 *ptr; | ||
| 667 | |||
| 668 | /* | ||
| 669 | * Watchdog time expiration length = The 16 bits of LEN | ||
| 670 | * represent the most significant bits of a 24 bit decrementer | ||
| 671 | * that decrements every 256 cycles. | ||
| 672 | * | ||
| 673 | * Try for a timeout of 5 sec, if that fails a smaller number | ||
| 674 | * of even seconds, | ||
| 675 | */ | ||
| 676 | max_timeout_sec = 6; | ||
| 677 | do { | ||
| 678 | max_timeout_sec--; | ||
| 679 | timeout_cnt = ((octeon_get_clock_rate() >> 8) * max_timeout_sec) >> 8; | ||
| 680 | } while (timeout_cnt > 65535); | ||
| 681 | |||
| 682 | BUG_ON(timeout_cnt == 0); | ||
| 683 | |||
| 684 | octeon_wdt_calc_parameters(heartbeat); | ||
| 685 | |||
| 686 | pr_info("octeon_wdt: Initial granularity %d Sec.\n", timeout_sec); | ||
| 687 | |||
| 688 | ret = misc_register(&octeon_wdt_miscdev); | ||
| 689 | if (ret) { | ||
| 690 | pr_err("octeon_wdt: cannot register miscdev on minor=%d (err=%d)\n", | ||
| 691 | WATCHDOG_MINOR, ret); | ||
| 692 | goto out; | ||
| 693 | } | ||
| 694 | |||
| 695 | /* Build the NMI handler ... */ | ||
| 696 | octeon_wdt_build_stage1(); | ||
| 697 | |||
| 698 | /* ... and install it. */ | ||
| 699 | ptr = (u64 *) nmi_stage1_insns; | ||
| 700 | for (i = 0; i < 16; i++) { | ||
| 701 | cvmx_write_csr(CVMX_MIO_BOOT_LOC_ADR, i * 8); | ||
| 702 | cvmx_write_csr(CVMX_MIO_BOOT_LOC_DAT, ptr[i]); | ||
| 703 | } | ||
| 704 | cvmx_write_csr(CVMX_MIO_BOOT_LOC_CFGX(0), 0x81fc0000); | ||
| 705 | |||
| 706 | cpumask_clear(&irq_enabled_cpus); | ||
| 707 | |||
| 708 | for_each_online_cpu(cpu) | ||
| 709 | octeon_wdt_setup_interrupt(cpu); | ||
| 710 | |||
| 711 | register_hotcpu_notifier(&octeon_wdt_cpu_notifier); | ||
| 712 | out: | ||
| 713 | return ret; | ||
| 714 | } | ||
| 715 | |||
| 716 | /** | ||
| 717 | * Module / driver shutdown | ||
| 718 | */ | ||
| 719 | static void __exit octeon_wdt_cleanup(void) | ||
| 720 | { | ||
| 721 | int cpu; | ||
| 722 | |||
| 723 | misc_deregister(&octeon_wdt_miscdev); | ||
| 724 | |||
| 725 | unregister_hotcpu_notifier(&octeon_wdt_cpu_notifier); | ||
| 726 | |||
| 727 | for_each_online_cpu(cpu) { | ||
| 728 | int core = cpu2core(cpu); | ||
| 729 | /* Disable the watchdog */ | ||
| 730 | cvmx_write_csr(CVMX_CIU_WDOGX(core), 0); | ||
| 731 | /* Free the interrupt handler */ | ||
| 732 | free_irq(OCTEON_IRQ_WDOG0 + core, octeon_wdt_poke_irq); | ||
| 733 | } | ||
| 734 | /* | ||
| 735 | * Disable the boot-bus memory, the code it points to is soon | ||
| 736 | * to go missing. | ||
| 737 | */ | ||
| 738 | cvmx_write_csr(CVMX_MIO_BOOT_LOC_CFGX(0), 0); | ||
| 739 | } | ||
| 740 | |||
| 741 | MODULE_LICENSE("GPL"); | ||
| 742 | MODULE_AUTHOR("Cavium Networks <support@caviumnetworks.com>"); | ||
| 743 | MODULE_DESCRIPTION("Cavium Networks Octeon Watchdog driver."); | ||
| 744 | module_init(octeon_wdt_init); | ||
| 745 | module_exit(octeon_wdt_cleanup); | ||
diff --git a/drivers/watchdog/octeon-wdt-nmi.S b/drivers/watchdog/octeon-wdt-nmi.S new file mode 100644 index 000000000000..8a900a5e3233 --- /dev/null +++ b/drivers/watchdog/octeon-wdt-nmi.S | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Cavium Networks | ||
| 7 | */ | ||
| 8 | #include <asm/asm.h> | ||
| 9 | #include <asm/regdef.h> | ||
| 10 | |||
| 11 | #define SAVE_REG(r) sd $r, -32768+6912-(32-r)*8($0) | ||
| 12 | |||
| 13 | NESTED(octeon_wdt_nmi_stage2, 0, sp) | ||
| 14 | .set push | ||
| 15 | .set noreorder | ||
| 16 | .set noat | ||
| 17 | /* Save all registers to the top CVMSEG. This shouldn't | ||
| 18 | * corrupt any state used by the kernel. Also all registers | ||
| 19 | * should have the value right before the NMI. */ | ||
| 20 | SAVE_REG(0) | ||
| 21 | SAVE_REG(1) | ||
| 22 | SAVE_REG(2) | ||
| 23 | SAVE_REG(3) | ||
| 24 | SAVE_REG(4) | ||
| 25 | SAVE_REG(5) | ||
| 26 | SAVE_REG(6) | ||
| 27 | SAVE_REG(7) | ||
| 28 | SAVE_REG(8) | ||
| 29 | SAVE_REG(9) | ||
| 30 | SAVE_REG(10) | ||
| 31 | SAVE_REG(11) | ||
| 32 | SAVE_REG(12) | ||
| 33 | SAVE_REG(13) | ||
| 34 | SAVE_REG(14) | ||
| 35 | SAVE_REG(15) | ||
| 36 | SAVE_REG(16) | ||
| 37 | SAVE_REG(17) | ||
| 38 | SAVE_REG(18) | ||
| 39 | SAVE_REG(19) | ||
| 40 | SAVE_REG(20) | ||
| 41 | SAVE_REG(21) | ||
| 42 | SAVE_REG(22) | ||
| 43 | SAVE_REG(23) | ||
| 44 | SAVE_REG(24) | ||
| 45 | SAVE_REG(25) | ||
| 46 | SAVE_REG(26) | ||
| 47 | SAVE_REG(27) | ||
| 48 | SAVE_REG(28) | ||
| 49 | SAVE_REG(29) | ||
| 50 | SAVE_REG(30) | ||
| 51 | SAVE_REG(31) | ||
| 52 | /* Set the stack to begin right below the registers */ | ||
| 53 | li sp, -32768+6912-32*8 | ||
| 54 | /* Load the address of the third stage handler */ | ||
| 55 | dla a0, octeon_wdt_nmi_stage3 | ||
| 56 | /* Call the third stage handler */ | ||
| 57 | jal a0 | ||
| 58 | /* a0 is the address of the saved registers */ | ||
| 59 | move a0, sp | ||
| 60 | /* Loop forvever if we get here. */ | ||
| 61 | 1: b 1b | ||
| 62 | nop | ||
| 63 | .set pop | ||
| 64 | END(octeon_wdt_nmi_stage2) | ||
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index fad3df2c1276..0a8826936639 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig | |||
| @@ -62,4 +62,13 @@ config XEN_SYS_HYPERVISOR | |||
| 62 | virtual environment, /sys/hypervisor will still be present, | 62 | virtual environment, /sys/hypervisor will still be present, |
| 63 | but will have no xen contents. | 63 | but will have no xen contents. |
| 64 | 64 | ||
| 65 | config XEN_PLATFORM_PCI | ||
| 66 | tristate "xen platform pci device driver" | ||
| 67 | depends on XEN_PVHVM | ||
| 68 | default m | ||
| 69 | help | ||
| 70 | Driver for the Xen PCI Platform device: it is responsible for | ||
| 71 | initializing xenbus and grant_table when running in a Xen HVM | ||
| 72 | domain. As a consequence this driver is required to run any Xen PV | ||
| 73 | frontend on Xen HVM. | ||
| 65 | endmenu | 74 | endmenu |
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile index 7c284342f30f..e392fb776af3 100644 --- a/drivers/xen/Makefile +++ b/drivers/xen/Makefile | |||
| @@ -9,4 +9,5 @@ obj-$(CONFIG_XEN_XENCOMM) += xencomm.o | |||
| 9 | obj-$(CONFIG_XEN_BALLOON) += balloon.o | 9 | obj-$(CONFIG_XEN_BALLOON) += balloon.o |
| 10 | obj-$(CONFIG_XEN_DEV_EVTCHN) += evtchn.o | 10 | obj-$(CONFIG_XEN_DEV_EVTCHN) += evtchn.o |
| 11 | obj-$(CONFIG_XENFS) += xenfs/ | 11 | obj-$(CONFIG_XENFS) += xenfs/ |
| 12 | obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o \ No newline at end of file | 12 | obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o |
| 13 | obj-$(CONFIG_XEN_PLATFORM_PCI) += platform-pci.o | ||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index db8f506817f0..5e1f34892dcc 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/bootmem.h> | 29 | #include <linux/bootmem.h> |
| 30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
| 31 | 31 | ||
| 32 | #include <asm/desc.h> | ||
| 32 | #include <asm/ptrace.h> | 33 | #include <asm/ptrace.h> |
| 33 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 34 | #include <asm/idle.h> | 35 | #include <asm/idle.h> |
| @@ -36,10 +37,14 @@ | |||
| 36 | #include <asm/xen/hypercall.h> | 37 | #include <asm/xen/hypercall.h> |
| 37 | #include <asm/xen/hypervisor.h> | 38 | #include <asm/xen/hypervisor.h> |
| 38 | 39 | ||
| 40 | #include <xen/xen.h> | ||
| 41 | #include <xen/hvm.h> | ||
| 39 | #include <xen/xen-ops.h> | 42 | #include <xen/xen-ops.h> |
| 40 | #include <xen/events.h> | 43 | #include <xen/events.h> |
| 41 | #include <xen/interface/xen.h> | 44 | #include <xen/interface/xen.h> |
| 42 | #include <xen/interface/event_channel.h> | 45 | #include <xen/interface/event_channel.h> |
| 46 | #include <xen/interface/hvm/hvm_op.h> | ||
| 47 | #include <xen/interface/hvm/params.h> | ||
| 43 | 48 | ||
| 44 | /* | 49 | /* |
| 45 | * This lock protects updates to the following mapping and reference-count | 50 | * This lock protects updates to the following mapping and reference-count |
| @@ -335,9 +340,18 @@ static int find_unbound_irq(void) | |||
| 335 | int irq; | 340 | int irq; |
| 336 | struct irq_desc *desc; | 341 | struct irq_desc *desc; |
| 337 | 342 | ||
| 338 | for (irq = 0; irq < nr_irqs; irq++) | 343 | for (irq = 0; irq < nr_irqs; irq++) { |
| 344 | desc = irq_to_desc(irq); | ||
| 345 | /* only 0->15 have init'd desc; handle irq > 16 */ | ||
| 346 | if (desc == NULL) | ||
| 347 | break; | ||
| 348 | if (desc->chip == &no_irq_chip) | ||
| 349 | break; | ||
| 350 | if (desc->chip != &xen_dynamic_chip) | ||
| 351 | continue; | ||
| 339 | if (irq_info[irq].type == IRQT_UNBOUND) | 352 | if (irq_info[irq].type == IRQT_UNBOUND) |
| 340 | break; | 353 | break; |
| 354 | } | ||
| 341 | 355 | ||
| 342 | if (irq == nr_irqs) | 356 | if (irq == nr_irqs) |
| 343 | panic("No available IRQ to bind to: increase nr_irqs!\n"); | 357 | panic("No available IRQ to bind to: increase nr_irqs!\n"); |
| @@ -346,7 +360,7 @@ static int find_unbound_irq(void) | |||
| 346 | if (WARN_ON(desc == NULL)) | 360 | if (WARN_ON(desc == NULL)) |
| 347 | return -1; | 361 | return -1; |
| 348 | 362 | ||
| 349 | dynamic_irq_init(irq); | 363 | dynamic_irq_init_keep_chip_data(irq); |
| 350 | 364 | ||
| 351 | return irq; | 365 | return irq; |
| 352 | } | 366 | } |
| @@ -617,17 +631,13 @@ static DEFINE_PER_CPU(unsigned, xed_nesting_count); | |||
| 617 | * a bitset of words which contain pending event bits. The second | 631 | * a bitset of words which contain pending event bits. The second |
| 618 | * level is a bitset of pending events themselves. | 632 | * level is a bitset of pending events themselves. |
| 619 | */ | 633 | */ |
| 620 | void xen_evtchn_do_upcall(struct pt_regs *regs) | 634 | static void __xen_evtchn_do_upcall(void) |
| 621 | { | 635 | { |
| 622 | int cpu = get_cpu(); | 636 | int cpu = get_cpu(); |
| 623 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 624 | struct shared_info *s = HYPERVISOR_shared_info; | 637 | struct shared_info *s = HYPERVISOR_shared_info; |
| 625 | struct vcpu_info *vcpu_info = __get_cpu_var(xen_vcpu); | 638 | struct vcpu_info *vcpu_info = __get_cpu_var(xen_vcpu); |
| 626 | unsigned count; | 639 | unsigned count; |
| 627 | 640 | ||
| 628 | exit_idle(); | ||
| 629 | irq_enter(); | ||
| 630 | |||
| 631 | do { | 641 | do { |
| 632 | unsigned long pending_words; | 642 | unsigned long pending_words; |
| 633 | 643 | ||
| @@ -664,14 +674,31 @@ void xen_evtchn_do_upcall(struct pt_regs *regs) | |||
| 664 | 674 | ||
| 665 | count = __get_cpu_var(xed_nesting_count); | 675 | count = __get_cpu_var(xed_nesting_count); |
| 666 | __get_cpu_var(xed_nesting_count) = 0; | 676 | __get_cpu_var(xed_nesting_count) = 0; |
| 667 | } while(count != 1); | 677 | } while (count != 1 || vcpu_info->evtchn_upcall_pending); |
| 668 | 678 | ||
| 669 | out: | 679 | out: |
| 680 | |||
| 681 | put_cpu(); | ||
| 682 | } | ||
| 683 | |||
| 684 | void xen_evtchn_do_upcall(struct pt_regs *regs) | ||
| 685 | { | ||
| 686 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 687 | |||
| 688 | exit_idle(); | ||
| 689 | irq_enter(); | ||
| 690 | |||
| 691 | __xen_evtchn_do_upcall(); | ||
| 692 | |||
| 670 | irq_exit(); | 693 | irq_exit(); |
| 671 | set_irq_regs(old_regs); | 694 | set_irq_regs(old_regs); |
| 695 | } | ||
| 672 | 696 | ||
| 673 | put_cpu(); | 697 | void xen_hvm_evtchn_do_upcall(void) |
| 698 | { | ||
| 699 | __xen_evtchn_do_upcall(); | ||
| 674 | } | 700 | } |
| 701 | EXPORT_SYMBOL_GPL(xen_hvm_evtchn_do_upcall); | ||
| 675 | 702 | ||
| 676 | /* Rebind a new event channel to an existing irq. */ | 703 | /* Rebind a new event channel to an existing irq. */ |
| 677 | void rebind_evtchn_irq(int evtchn, int irq) | 704 | void rebind_evtchn_irq(int evtchn, int irq) |
| @@ -708,7 +735,10 @@ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu) | |||
| 708 | struct evtchn_bind_vcpu bind_vcpu; | 735 | struct evtchn_bind_vcpu bind_vcpu; |
| 709 | int evtchn = evtchn_from_irq(irq); | 736 | int evtchn = evtchn_from_irq(irq); |
| 710 | 737 | ||
| 711 | if (!VALID_EVTCHN(evtchn)) | 738 | /* events delivered via platform PCI interrupts are always |
| 739 | * routed to vcpu 0 */ | ||
| 740 | if (!VALID_EVTCHN(evtchn) || | ||
| 741 | (xen_hvm_domain() && !xen_have_vector_callback)) | ||
| 712 | return -1; | 742 | return -1; |
| 713 | 743 | ||
| 714 | /* Send future instances of this interrupt to other vcpu. */ | 744 | /* Send future instances of this interrupt to other vcpu. */ |
| @@ -933,6 +963,44 @@ static struct irq_chip xen_dynamic_chip __read_mostly = { | |||
| 933 | .retrigger = retrigger_dynirq, | 963 | .retrigger = retrigger_dynirq, |
| 934 | }; | 964 | }; |
| 935 | 965 | ||
| 966 | int xen_set_callback_via(uint64_t via) | ||
| 967 | { | ||
| 968 | struct xen_hvm_param a; | ||
| 969 | a.domid = DOMID_SELF; | ||
| 970 | a.index = HVM_PARAM_CALLBACK_IRQ; | ||
| 971 | a.value = via; | ||
| 972 | return HYPERVISOR_hvm_op(HVMOP_set_param, &a); | ||
| 973 | } | ||
| 974 | EXPORT_SYMBOL_GPL(xen_set_callback_via); | ||
| 975 | |||
| 976 | #ifdef CONFIG_XEN_PVHVM | ||
| 977 | /* Vector callbacks are better than PCI interrupts to receive event | ||
| 978 | * channel notifications because we can receive vector callbacks on any | ||
| 979 | * vcpu and we don't need PCI support or APIC interactions. */ | ||
| 980 | void xen_callback_vector(void) | ||
| 981 | { | ||
| 982 | int rc; | ||
| 983 | uint64_t callback_via; | ||
| 984 | if (xen_have_vector_callback) { | ||
| 985 | callback_via = HVM_CALLBACK_VECTOR(XEN_HVM_EVTCHN_CALLBACK); | ||
| 986 | rc = xen_set_callback_via(callback_via); | ||
| 987 | if (rc) { | ||
| 988 | printk(KERN_ERR "Request for Xen HVM callback vector" | ||
| 989 | " failed.\n"); | ||
| 990 | xen_have_vector_callback = 0; | ||
| 991 | return; | ||
| 992 | } | ||
| 993 | printk(KERN_INFO "Xen HVM callback vector for event delivery is " | ||
| 994 | "enabled\n"); | ||
| 995 | /* in the restore case the vector has already been allocated */ | ||
| 996 | if (!test_bit(XEN_HVM_EVTCHN_CALLBACK, used_vectors)) | ||
| 997 | alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector); | ||
| 998 | } | ||
| 999 | } | ||
| 1000 | #else | ||
| 1001 | void xen_callback_vector(void) {} | ||
| 1002 | #endif | ||
| 1003 | |||
| 936 | void __init xen_init_IRQ(void) | 1004 | void __init xen_init_IRQ(void) |
| 937 | { | 1005 | { |
| 938 | int i; | 1006 | int i; |
| @@ -947,5 +1015,10 @@ void __init xen_init_IRQ(void) | |||
| 947 | for (i = 0; i < NR_EVENT_CHANNELS; i++) | 1015 | for (i = 0; i < NR_EVENT_CHANNELS; i++) |
| 948 | mask_evtchn(i); | 1016 | mask_evtchn(i); |
| 949 | 1017 | ||
| 950 | irq_ctx_init(smp_processor_id()); | 1018 | if (xen_hvm_domain()) { |
| 1019 | xen_callback_vector(); | ||
| 1020 | native_init_IRQ(); | ||
| 1021 | } else { | ||
| 1022 | irq_ctx_init(smp_processor_id()); | ||
| 1023 | } | ||
| 951 | } | 1024 | } |
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index f66db3b91d61..6c4531816496 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c | |||
| @@ -37,11 +37,13 @@ | |||
| 37 | #include <linux/slab.h> | 37 | #include <linux/slab.h> |
| 38 | #include <linux/vmalloc.h> | 38 | #include <linux/vmalloc.h> |
| 39 | #include <linux/uaccess.h> | 39 | #include <linux/uaccess.h> |
| 40 | #include <linux/io.h> | ||
| 40 | 41 | ||
| 41 | #include <xen/xen.h> | 42 | #include <xen/xen.h> |
| 42 | #include <xen/interface/xen.h> | 43 | #include <xen/interface/xen.h> |
| 43 | #include <xen/page.h> | 44 | #include <xen/page.h> |
| 44 | #include <xen/grant_table.h> | 45 | #include <xen/grant_table.h> |
| 46 | #include <xen/interface/memory.h> | ||
| 45 | #include <asm/xen/hypercall.h> | 47 | #include <asm/xen/hypercall.h> |
| 46 | 48 | ||
| 47 | #include <asm/pgtable.h> | 49 | #include <asm/pgtable.h> |
| @@ -59,6 +61,8 @@ static unsigned int boot_max_nr_grant_frames; | |||
| 59 | static int gnttab_free_count; | 61 | static int gnttab_free_count; |
| 60 | static grant_ref_t gnttab_free_head; | 62 | static grant_ref_t gnttab_free_head; |
| 61 | static DEFINE_SPINLOCK(gnttab_list_lock); | 63 | static DEFINE_SPINLOCK(gnttab_list_lock); |
| 64 | unsigned long xen_hvm_resume_frames; | ||
| 65 | EXPORT_SYMBOL_GPL(xen_hvm_resume_frames); | ||
| 62 | 66 | ||
| 63 | static struct grant_entry *shared; | 67 | static struct grant_entry *shared; |
| 64 | 68 | ||
| @@ -433,7 +437,7 @@ static unsigned int __max_nr_grant_frames(void) | |||
| 433 | return query.max_nr_frames; | 437 | return query.max_nr_frames; |
| 434 | } | 438 | } |
| 435 | 439 | ||
| 436 | static inline unsigned int max_nr_grant_frames(void) | 440 | unsigned int gnttab_max_grant_frames(void) |
| 437 | { | 441 | { |
| 438 | unsigned int xen_max = __max_nr_grant_frames(); | 442 | unsigned int xen_max = __max_nr_grant_frames(); |
| 439 | 443 | ||
| @@ -441,6 +445,7 @@ static inline unsigned int max_nr_grant_frames(void) | |||
| 441 | return boot_max_nr_grant_frames; | 445 | return boot_max_nr_grant_frames; |
| 442 | return xen_max; | 446 | return xen_max; |
| 443 | } | 447 | } |
| 448 | EXPORT_SYMBOL_GPL(gnttab_max_grant_frames); | ||
| 444 | 449 | ||
| 445 | static int gnttab_map(unsigned int start_idx, unsigned int end_idx) | 450 | static int gnttab_map(unsigned int start_idx, unsigned int end_idx) |
| 446 | { | 451 | { |
| @@ -449,6 +454,30 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx) | |||
| 449 | unsigned int nr_gframes = end_idx + 1; | 454 | unsigned int nr_gframes = end_idx + 1; |
| 450 | int rc; | 455 | int rc; |
| 451 | 456 | ||
| 457 | if (xen_hvm_domain()) { | ||
| 458 | struct xen_add_to_physmap xatp; | ||
| 459 | unsigned int i = end_idx; | ||
| 460 | rc = 0; | ||
| 461 | /* | ||
| 462 | * Loop backwards, so that the first hypercall has the largest | ||
| 463 | * index, ensuring that the table will grow only once. | ||
| 464 | */ | ||
| 465 | do { | ||
| 466 | xatp.domid = DOMID_SELF; | ||
| 467 | xatp.idx = i; | ||
| 468 | xatp.space = XENMAPSPACE_grant_table; | ||
| 469 | xatp.gpfn = (xen_hvm_resume_frames >> PAGE_SHIFT) + i; | ||
| 470 | rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp); | ||
| 471 | if (rc != 0) { | ||
| 472 | printk(KERN_WARNING | ||
| 473 | "grant table add_to_physmap failed, err=%d\n", rc); | ||
| 474 | break; | ||
| 475 | } | ||
| 476 | } while (i-- > start_idx); | ||
| 477 | |||
| 478 | return rc; | ||
| 479 | } | ||
| 480 | |||
| 452 | frames = kmalloc(nr_gframes * sizeof(unsigned long), GFP_ATOMIC); | 481 | frames = kmalloc(nr_gframes * sizeof(unsigned long), GFP_ATOMIC); |
| 453 | if (!frames) | 482 | if (!frames) |
| 454 | return -ENOMEM; | 483 | return -ENOMEM; |
| @@ -465,7 +494,7 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx) | |||
| 465 | 494 | ||
| 466 | BUG_ON(rc || setup.status); | 495 | BUG_ON(rc || setup.status); |
| 467 | 496 | ||
| 468 | rc = arch_gnttab_map_shared(frames, nr_gframes, max_nr_grant_frames(), | 497 | rc = arch_gnttab_map_shared(frames, nr_gframes, gnttab_max_grant_frames(), |
| 469 | &shared); | 498 | &shared); |
| 470 | BUG_ON(rc); | 499 | BUG_ON(rc); |
| 471 | 500 | ||
| @@ -476,9 +505,27 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx) | |||
| 476 | 505 | ||
| 477 | int gnttab_resume(void) | 506 | int gnttab_resume(void) |
| 478 | { | 507 | { |
| 479 | if (max_nr_grant_frames() < nr_grant_frames) | 508 | unsigned int max_nr_gframes; |
| 509 | |||
| 510 | max_nr_gframes = gnttab_max_grant_frames(); | ||
| 511 | if (max_nr_gframes < nr_grant_frames) | ||
| 480 | return -ENOSYS; | 512 | return -ENOSYS; |
| 481 | return gnttab_map(0, nr_grant_frames - 1); | 513 | |
| 514 | if (xen_pv_domain()) | ||
| 515 | return gnttab_map(0, nr_grant_frames - 1); | ||
| 516 | |||
| 517 | if (!shared) { | ||
| 518 | shared = ioremap(xen_hvm_resume_frames, PAGE_SIZE * max_nr_gframes); | ||
| 519 | if (shared == NULL) { | ||
| 520 | printk(KERN_WARNING | ||
| 521 | "Failed to ioremap gnttab share frames!"); | ||
| 522 | return -ENOMEM; | ||
| 523 | } | ||
| 524 | } | ||
| 525 | |||
| 526 | gnttab_map(0, nr_grant_frames - 1); | ||
| 527 | |||
| 528 | return 0; | ||
| 482 | } | 529 | } |
| 483 | 530 | ||
| 484 | int gnttab_suspend(void) | 531 | int gnttab_suspend(void) |
| @@ -495,7 +542,7 @@ static int gnttab_expand(unsigned int req_entries) | |||
| 495 | cur = nr_grant_frames; | 542 | cur = nr_grant_frames; |
| 496 | extra = ((req_entries + (GREFS_PER_GRANT_FRAME-1)) / | 543 | extra = ((req_entries + (GREFS_PER_GRANT_FRAME-1)) / |
| 497 | GREFS_PER_GRANT_FRAME); | 544 | GREFS_PER_GRANT_FRAME); |
| 498 | if (cur + extra > max_nr_grant_frames()) | 545 | if (cur + extra > gnttab_max_grant_frames()) |
| 499 | return -ENOSPC; | 546 | return -ENOSPC; |
| 500 | 547 | ||
| 501 | rc = gnttab_map(cur, cur + extra - 1); | 548 | rc = gnttab_map(cur, cur + extra - 1); |
| @@ -505,15 +552,12 @@ static int gnttab_expand(unsigned int req_entries) | |||
| 505 | return rc; | 552 | return rc; |
| 506 | } | 553 | } |
| 507 | 554 | ||
| 508 | static int __devinit gnttab_init(void) | 555 | int gnttab_init(void) |
| 509 | { | 556 | { |
| 510 | int i; | 557 | int i; |
| 511 | unsigned int max_nr_glist_frames, nr_glist_frames; | 558 | unsigned int max_nr_glist_frames, nr_glist_frames; |
| 512 | unsigned int nr_init_grefs; | 559 | unsigned int nr_init_grefs; |
| 513 | 560 | ||
| 514 | if (!xen_domain()) | ||
| 515 | return -ENODEV; | ||
| 516 | |||
| 517 | nr_grant_frames = 1; | 561 | nr_grant_frames = 1; |
| 518 | boot_max_nr_grant_frames = __max_nr_grant_frames(); | 562 | boot_max_nr_grant_frames = __max_nr_grant_frames(); |
| 519 | 563 | ||
| @@ -556,5 +600,18 @@ static int __devinit gnttab_init(void) | |||
| 556 | kfree(gnttab_list); | 600 | kfree(gnttab_list); |
| 557 | return -ENOMEM; | 601 | return -ENOMEM; |
| 558 | } | 602 | } |
| 603 | EXPORT_SYMBOL_GPL(gnttab_init); | ||
| 604 | |||
| 605 | static int __devinit __gnttab_init(void) | ||
| 606 | { | ||
| 607 | /* Delay grant-table initialization in the PV on HVM case */ | ||
| 608 | if (xen_hvm_domain()) | ||
| 609 | return 0; | ||
| 610 | |||
| 611 | if (!xen_pv_domain()) | ||
| 612 | return -ENODEV; | ||
| 613 | |||
| 614 | return gnttab_init(); | ||
| 615 | } | ||
| 559 | 616 | ||
| 560 | core_initcall(gnttab_init); | 617 | core_initcall(__gnttab_init); |
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index 07e857b0de13..1799bd890315 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/stop_machine.h> | 9 | #include <linux/stop_machine.h> |
| 10 | #include <linux/freezer.h> | 10 | #include <linux/freezer.h> |
| 11 | 11 | ||
| 12 | #include <xen/xen.h> | ||
| 12 | #include <xen/xenbus.h> | 13 | #include <xen/xenbus.h> |
| 13 | #include <xen/grant_table.h> | 14 | #include <xen/grant_table.h> |
| 14 | #include <xen/events.h> | 15 | #include <xen/events.h> |
| @@ -17,6 +18,7 @@ | |||
| 17 | 18 | ||
| 18 | #include <asm/xen/hypercall.h> | 19 | #include <asm/xen/hypercall.h> |
| 19 | #include <asm/xen/page.h> | 20 | #include <asm/xen/page.h> |
| 21 | #include <asm/xen/hypervisor.h> | ||
| 20 | 22 | ||
| 21 | enum shutdown_state { | 23 | enum shutdown_state { |
| 22 | SHUTDOWN_INVALID = -1, | 24 | SHUTDOWN_INVALID = -1, |
| @@ -33,10 +35,30 @@ enum shutdown_state { | |||
| 33 | static enum shutdown_state shutting_down = SHUTDOWN_INVALID; | 35 | static enum shutdown_state shutting_down = SHUTDOWN_INVALID; |
| 34 | 36 | ||
| 35 | #ifdef CONFIG_PM_SLEEP | 37 | #ifdef CONFIG_PM_SLEEP |
| 36 | static int xen_suspend(void *data) | 38 | static int xen_hvm_suspend(void *data) |
| 37 | { | 39 | { |
| 40 | struct sched_shutdown r = { .reason = SHUTDOWN_suspend }; | ||
| 38 | int *cancelled = data; | 41 | int *cancelled = data; |
| 42 | |||
| 43 | BUG_ON(!irqs_disabled()); | ||
| 44 | |||
| 45 | *cancelled = HYPERVISOR_sched_op(SCHEDOP_shutdown, &r); | ||
| 46 | |||
| 47 | xen_hvm_post_suspend(*cancelled); | ||
| 48 | gnttab_resume(); | ||
| 49 | |||
| 50 | if (!*cancelled) { | ||
| 51 | xen_irq_resume(); | ||
| 52 | xen_timer_resume(); | ||
| 53 | } | ||
| 54 | |||
| 55 | return 0; | ||
| 56 | } | ||
| 57 | |||
| 58 | static int xen_suspend(void *data) | ||
| 59 | { | ||
| 39 | int err; | 60 | int err; |
| 61 | int *cancelled = data; | ||
| 40 | 62 | ||
| 41 | BUG_ON(!irqs_disabled()); | 63 | BUG_ON(!irqs_disabled()); |
| 42 | 64 | ||
| @@ -106,7 +128,10 @@ static void do_suspend(void) | |||
| 106 | goto out_resume; | 128 | goto out_resume; |
| 107 | } | 129 | } |
| 108 | 130 | ||
| 109 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); | 131 | if (xen_hvm_domain()) |
| 132 | err = stop_machine(xen_hvm_suspend, &cancelled, cpumask_of(0)); | ||
| 133 | else | ||
| 134 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); | ||
| 110 | 135 | ||
| 111 | dpm_resume_noirq(PMSG_RESUME); | 136 | dpm_resume_noirq(PMSG_RESUME); |
| 112 | 137 | ||
| @@ -255,7 +280,19 @@ static int shutdown_event(struct notifier_block *notifier, | |||
| 255 | return NOTIFY_DONE; | 280 | return NOTIFY_DONE; |
| 256 | } | 281 | } |
| 257 | 282 | ||
| 258 | static int __init setup_shutdown_event(void) | 283 | static int __init __setup_shutdown_event(void) |
| 284 | { | ||
| 285 | /* Delay initialization in the PV on HVM case */ | ||
| 286 | if (xen_hvm_domain()) | ||
| 287 | return 0; | ||
| 288 | |||
| 289 | if (!xen_pv_domain()) | ||
| 290 | return -ENODEV; | ||
| 291 | |||
| 292 | return xen_setup_shutdown_event(); | ||
| 293 | } | ||
| 294 | |||
| 295 | int xen_setup_shutdown_event(void) | ||
| 259 | { | 296 | { |
| 260 | static struct notifier_block xenstore_notifier = { | 297 | static struct notifier_block xenstore_notifier = { |
| 261 | .notifier_call = shutdown_event | 298 | .notifier_call = shutdown_event |
| @@ -264,5 +301,6 @@ static int __init setup_shutdown_event(void) | |||
| 264 | 301 | ||
| 265 | return 0; | 302 | return 0; |
| 266 | } | 303 | } |
| 304 | EXPORT_SYMBOL_GPL(xen_setup_shutdown_event); | ||
| 267 | 305 | ||
| 268 | subsys_initcall(setup_shutdown_event); | 306 | subsys_initcall(__setup_shutdown_event); |
diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c new file mode 100644 index 000000000000..c01b5ddce529 --- /dev/null +++ b/drivers/xen/platform-pci.c | |||
| @@ -0,0 +1,207 @@ | |||
| 1 | /****************************************************************************** | ||
| 2 | * platform-pci.c | ||
| 3 | * | ||
| 4 | * Xen platform PCI device driver | ||
| 5 | * Copyright (c) 2005, Intel Corporation. | ||
| 6 | * Copyright (c) 2007, XenSource Inc. | ||
| 7 | * Copyright (c) 2010, Citrix | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms and conditions of the GNU General Public License, | ||
| 11 | * version 2, as published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 16 | * more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License along with | ||
| 19 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
| 20 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 24 | |||
| 25 | #include <linux/interrupt.h> | ||
| 26 | #include <linux/io.h> | ||
| 27 | #include <linux/module.h> | ||
| 28 | #include <linux/pci.h> | ||
| 29 | |||
| 30 | #include <xen/platform_pci.h> | ||
| 31 | #include <xen/grant_table.h> | ||
| 32 | #include <xen/xenbus.h> | ||
| 33 | #include <xen/events.h> | ||
| 34 | #include <xen/hvm.h> | ||
| 35 | #include <xen/xen-ops.h> | ||
| 36 | |||
| 37 | #define DRV_NAME "xen-platform-pci" | ||
| 38 | |||
| 39 | MODULE_AUTHOR("ssmith@xensource.com and stefano.stabellini@eu.citrix.com"); | ||
| 40 | MODULE_DESCRIPTION("Xen platform PCI device"); | ||
| 41 | MODULE_LICENSE("GPL"); | ||
| 42 | |||
| 43 | static unsigned long platform_mmio; | ||
| 44 | static unsigned long platform_mmio_alloc; | ||
| 45 | static unsigned long platform_mmiolen; | ||
| 46 | static uint64_t callback_via; | ||
| 47 | |||
| 48 | unsigned long alloc_xen_mmio(unsigned long len) | ||
| 49 | { | ||
| 50 | unsigned long addr; | ||
| 51 | |||
| 52 | addr = platform_mmio + platform_mmio_alloc; | ||
| 53 | platform_mmio_alloc += len; | ||
| 54 | BUG_ON(platform_mmio_alloc > platform_mmiolen); | ||
| 55 | |||
| 56 | return addr; | ||
| 57 | } | ||
| 58 | |||
| 59 | static uint64_t get_callback_via(struct pci_dev *pdev) | ||
| 60 | { | ||
| 61 | u8 pin; | ||
| 62 | int irq; | ||
| 63 | |||
| 64 | irq = pdev->irq; | ||
| 65 | if (irq < 16) | ||
| 66 | return irq; /* ISA IRQ */ | ||
| 67 | |||
| 68 | pin = pdev->pin; | ||
| 69 | |||
| 70 | /* We don't know the GSI. Specify the PCI INTx line instead. */ | ||
| 71 | return ((uint64_t)0x01 << 56) | /* PCI INTx identifier */ | ||
| 72 | ((uint64_t)pci_domain_nr(pdev->bus) << 32) | | ||
| 73 | ((uint64_t)pdev->bus->number << 16) | | ||
| 74 | ((uint64_t)(pdev->devfn & 0xff) << 8) | | ||
| 75 | ((uint64_t)(pin - 1) & 3); | ||
| 76 | } | ||
| 77 | |||
| 78 | static irqreturn_t do_hvm_evtchn_intr(int irq, void *dev_id) | ||
| 79 | { | ||
| 80 | xen_hvm_evtchn_do_upcall(); | ||
| 81 | return IRQ_HANDLED; | ||
| 82 | } | ||
| 83 | |||
| 84 | static int xen_allocate_irq(struct pci_dev *pdev) | ||
| 85 | { | ||
| 86 | return request_irq(pdev->irq, do_hvm_evtchn_intr, | ||
| 87 | IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TRIGGER_RISING, | ||
| 88 | "xen-platform-pci", pdev); | ||
| 89 | } | ||
| 90 | |||
| 91 | static int platform_pci_resume(struct pci_dev *pdev) | ||
| 92 | { | ||
| 93 | int err; | ||
| 94 | if (xen_have_vector_callback) | ||
| 95 | return 0; | ||
| 96 | err = xen_set_callback_via(callback_via); | ||
| 97 | if (err) { | ||
| 98 | dev_err(&pdev->dev, "platform_pci_resume failure!\n"); | ||
| 99 | return err; | ||
| 100 | } | ||
| 101 | return 0; | ||
| 102 | } | ||
| 103 | |||
| 104 | static int __devinit platform_pci_init(struct pci_dev *pdev, | ||
| 105 | const struct pci_device_id *ent) | ||
| 106 | { | ||
| 107 | int i, ret; | ||
| 108 | long ioaddr, iolen; | ||
| 109 | long mmio_addr, mmio_len; | ||
| 110 | unsigned int max_nr_gframes; | ||
| 111 | |||
| 112 | i = pci_enable_device(pdev); | ||
| 113 | if (i) | ||
| 114 | return i; | ||
| 115 | |||
| 116 | ioaddr = pci_resource_start(pdev, 0); | ||
| 117 | iolen = pci_resource_len(pdev, 0); | ||
| 118 | |||
| 119 | mmio_addr = pci_resource_start(pdev, 1); | ||
| 120 | mmio_len = pci_resource_len(pdev, 1); | ||
| 121 | |||
| 122 | if (mmio_addr == 0 || ioaddr == 0) { | ||
| 123 | dev_err(&pdev->dev, "no resources found\n"); | ||
| 124 | ret = -ENOENT; | ||
| 125 | goto pci_out; | ||
| 126 | } | ||
| 127 | |||
| 128 | if (request_mem_region(mmio_addr, mmio_len, DRV_NAME) == NULL) { | ||
| 129 | dev_err(&pdev->dev, "MEM I/O resource 0x%lx @ 0x%lx busy\n", | ||
| 130 | mmio_addr, mmio_len); | ||
| 131 | ret = -EBUSY; | ||
| 132 | goto pci_out; | ||
| 133 | } | ||
| 134 | |||
| 135 | if (request_region(ioaddr, iolen, DRV_NAME) == NULL) { | ||
| 136 | dev_err(&pdev->dev, "I/O resource 0x%lx @ 0x%lx busy\n", | ||
| 137 | iolen, ioaddr); | ||
| 138 | ret = -EBUSY; | ||
| 139 | goto mem_out; | ||
| 140 | } | ||
| 141 | |||
| 142 | platform_mmio = mmio_addr; | ||
| 143 | platform_mmiolen = mmio_len; | ||
| 144 | |||
| 145 | if (!xen_have_vector_callback) { | ||
| 146 | ret = xen_allocate_irq(pdev); | ||
| 147 | if (ret) { | ||
| 148 | dev_warn(&pdev->dev, "request_irq failed err=%d\n", ret); | ||
| 149 | goto out; | ||
| 150 | } | ||
| 151 | callback_via = get_callback_via(pdev); | ||
| 152 | ret = xen_set_callback_via(callback_via); | ||
| 153 | if (ret) { | ||
| 154 | dev_warn(&pdev->dev, "Unable to set the evtchn callback " | ||
| 155 | "err=%d\n", ret); | ||
| 156 | goto out; | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | max_nr_gframes = gnttab_max_grant_frames(); | ||
| 161 | xen_hvm_resume_frames = alloc_xen_mmio(PAGE_SIZE * max_nr_gframes); | ||
| 162 | ret = gnttab_init(); | ||
| 163 | if (ret) | ||
| 164 | goto out; | ||
| 165 | xenbus_probe(NULL); | ||
| 166 | ret = xen_setup_shutdown_event(); | ||
| 167 | if (ret) | ||
| 168 | goto out; | ||
| 169 | return 0; | ||
| 170 | |||
| 171 | out: | ||
| 172 | release_region(ioaddr, iolen); | ||
| 173 | mem_out: | ||
| 174 | release_mem_region(mmio_addr, mmio_len); | ||
| 175 | pci_out: | ||
| 176 | pci_disable_device(pdev); | ||
| 177 | return ret; | ||
| 178 | } | ||
| 179 | |||
| 180 | static struct pci_device_id platform_pci_tbl[] __devinitdata = { | ||
| 181 | {PCI_VENDOR_ID_XEN, PCI_DEVICE_ID_XEN_PLATFORM, | ||
| 182 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 183 | {0,} | ||
| 184 | }; | ||
| 185 | |||
| 186 | MODULE_DEVICE_TABLE(pci, platform_pci_tbl); | ||
| 187 | |||
| 188 | static struct pci_driver platform_driver = { | ||
| 189 | .name = DRV_NAME, | ||
| 190 | .probe = platform_pci_init, | ||
| 191 | .id_table = platform_pci_tbl, | ||
| 192 | #ifdef CONFIG_PM | ||
| 193 | .resume_early = platform_pci_resume, | ||
| 194 | #endif | ||
| 195 | }; | ||
| 196 | |||
| 197 | static int __init platform_pci_module_init(void) | ||
| 198 | { | ||
| 199 | /* no unplug has been done, IGNORE hasn't been specified: just | ||
| 200 | * return now */ | ||
| 201 | if (!xen_platform_pci_unplug) | ||
| 202 | return -ENODEV; | ||
| 203 | |||
| 204 | return pci_register_driver(&platform_driver); | ||
| 205 | } | ||
| 206 | |||
| 207 | module_init(platform_pci_module_init); | ||
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 3479332113e9..29bac5118877 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c | |||
| @@ -56,6 +56,9 @@ | |||
| 56 | #include <xen/events.h> | 56 | #include <xen/events.h> |
| 57 | #include <xen/page.h> | 57 | #include <xen/page.h> |
| 58 | 58 | ||
| 59 | #include <xen/platform_pci.h> | ||
| 60 | #include <xen/hvm.h> | ||
| 61 | |||
| 59 | #include "xenbus_comms.h" | 62 | #include "xenbus_comms.h" |
| 60 | #include "xenbus_probe.h" | 63 | #include "xenbus_probe.h" |
| 61 | 64 | ||
| @@ -752,10 +755,7 @@ int register_xenstore_notifier(struct notifier_block *nb) | |||
| 752 | { | 755 | { |
| 753 | int ret = 0; | 756 | int ret = 0; |
| 754 | 757 | ||
| 755 | if (xenstored_ready > 0) | 758 | blocking_notifier_chain_register(&xenstore_chain, nb); |
| 756 | ret = nb->notifier_call(nb, 0, NULL); | ||
| 757 | else | ||
| 758 | blocking_notifier_chain_register(&xenstore_chain, nb); | ||
| 759 | 759 | ||
| 760 | return ret; | 760 | return ret; |
| 761 | } | 761 | } |
| @@ -779,8 +779,23 @@ void xenbus_probe(struct work_struct *unused) | |||
| 779 | /* Notify others that xenstore is up */ | 779 | /* Notify others that xenstore is up */ |
| 780 | blocking_notifier_call_chain(&xenstore_chain, 0, NULL); | 780 | blocking_notifier_call_chain(&xenstore_chain, 0, NULL); |
| 781 | } | 781 | } |
| 782 | EXPORT_SYMBOL_GPL(xenbus_probe); | ||
| 783 | |||
| 784 | static int __init xenbus_probe_initcall(void) | ||
| 785 | { | ||
| 786 | if (!xen_domain()) | ||
| 787 | return -ENODEV; | ||
| 788 | |||
| 789 | if (xen_initial_domain() || xen_hvm_domain()) | ||
| 790 | return 0; | ||
| 791 | |||
| 792 | xenbus_probe(NULL); | ||
| 793 | return 0; | ||
| 794 | } | ||
| 795 | |||
| 796 | device_initcall(xenbus_probe_initcall); | ||
| 782 | 797 | ||
| 783 | static int __init xenbus_probe_init(void) | 798 | static int __init xenbus_init(void) |
| 784 | { | 799 | { |
| 785 | int err = 0; | 800 | int err = 0; |
| 786 | 801 | ||
| @@ -805,11 +820,24 @@ static int __init xenbus_probe_init(void) | |||
| 805 | if (xen_initial_domain()) { | 820 | if (xen_initial_domain()) { |
| 806 | /* dom0 not yet supported */ | 821 | /* dom0 not yet supported */ |
| 807 | } else { | 822 | } else { |
| 823 | if (xen_hvm_domain()) { | ||
| 824 | uint64_t v = 0; | ||
| 825 | err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); | ||
| 826 | if (err) | ||
| 827 | goto out_error; | ||
| 828 | xen_store_evtchn = (int)v; | ||
| 829 | err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v); | ||
| 830 | if (err) | ||
| 831 | goto out_error; | ||
| 832 | xen_store_mfn = (unsigned long)v; | ||
| 833 | xen_store_interface = ioremap(xen_store_mfn << PAGE_SHIFT, PAGE_SIZE); | ||
| 834 | } else { | ||
| 835 | xen_store_evtchn = xen_start_info->store_evtchn; | ||
| 836 | xen_store_mfn = xen_start_info->store_mfn; | ||
| 837 | xen_store_interface = mfn_to_virt(xen_store_mfn); | ||
| 838 | } | ||
| 808 | xenstored_ready = 1; | 839 | xenstored_ready = 1; |
| 809 | xen_store_evtchn = xen_start_info->store_evtchn; | ||
| 810 | xen_store_mfn = xen_start_info->store_mfn; | ||
| 811 | } | 840 | } |
| 812 | xen_store_interface = mfn_to_virt(xen_store_mfn); | ||
| 813 | 841 | ||
| 814 | /* Initialize the interface to xenstore. */ | 842 | /* Initialize the interface to xenstore. */ |
| 815 | err = xs_init(); | 843 | err = xs_init(); |
| @@ -819,9 +847,6 @@ static int __init xenbus_probe_init(void) | |||
| 819 | goto out_unreg_back; | 847 | goto out_unreg_back; |
| 820 | } | 848 | } |
| 821 | 849 | ||
| 822 | if (!xen_initial_domain()) | ||
| 823 | xenbus_probe(NULL); | ||
| 824 | |||
| 825 | #ifdef CONFIG_XEN_COMPAT_XENFS | 850 | #ifdef CONFIG_XEN_COMPAT_XENFS |
| 826 | /* | 851 | /* |
| 827 | * Create xenfs mountpoint in /proc for compatibility with | 852 | * Create xenfs mountpoint in /proc for compatibility with |
| @@ -842,7 +867,7 @@ static int __init xenbus_probe_init(void) | |||
| 842 | return err; | 867 | return err; |
| 843 | } | 868 | } |
| 844 | 869 | ||
| 845 | postcore_initcall(xenbus_probe_init); | 870 | postcore_initcall(xenbus_init); |
| 846 | 871 | ||
| 847 | MODULE_LICENSE("GPL"); | 872 | MODULE_LICENSE("GPL"); |
| 848 | 873 | ||
| @@ -950,6 +975,9 @@ static void wait_for_devices(struct xenbus_driver *xendrv) | |||
| 950 | #ifndef MODULE | 975 | #ifndef MODULE |
| 951 | static int __init boot_wait_for_devices(void) | 976 | static int __init boot_wait_for_devices(void) |
| 952 | { | 977 | { |
| 978 | if (xen_hvm_domain() && !xen_platform_pci_unplug) | ||
| 979 | return -ENODEV; | ||
| 980 | |||
| 953 | ready_to_wait_for_devices = 1; | 981 | ready_to_wait_for_devices = 1; |
| 954 | wait_for_devices(NULL); | 982 | wait_for_devices(NULL); |
| 955 | return 0; | 983 | return 0; |
diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c index 7b547f53f65e..5534690075af 100644 --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c | |||
| @@ -76,6 +76,14 @@ struct xs_handle { | |||
| 76 | /* | 76 | /* |
| 77 | * Mutex ordering: transaction_mutex -> watch_mutex -> request_mutex. | 77 | * Mutex ordering: transaction_mutex -> watch_mutex -> request_mutex. |
| 78 | * response_mutex is never taken simultaneously with the other three. | 78 | * response_mutex is never taken simultaneously with the other three. |
| 79 | * | ||
| 80 | * transaction_mutex must be held before incrementing | ||
| 81 | * transaction_count. The mutex is held when a suspend is in | ||
| 82 | * progress to prevent new transactions starting. | ||
| 83 | * | ||
| 84 | * When decrementing transaction_count to zero the wait queue | ||
| 85 | * should be woken up, the suspend code waits for count to | ||
| 86 | * reach zero. | ||
| 79 | */ | 87 | */ |
| 80 | 88 | ||
| 81 | /* One request at a time. */ | 89 | /* One request at a time. */ |
| @@ -85,7 +93,9 @@ struct xs_handle { | |||
| 85 | struct mutex response_mutex; | 93 | struct mutex response_mutex; |
| 86 | 94 | ||
| 87 | /* Protect transactions against save/restore. */ | 95 | /* Protect transactions against save/restore. */ |
| 88 | struct rw_semaphore transaction_mutex; | 96 | struct mutex transaction_mutex; |
| 97 | atomic_t transaction_count; | ||
| 98 | wait_queue_head_t transaction_wq; | ||
| 89 | 99 | ||
| 90 | /* Protect watch (de)register against save/restore. */ | 100 | /* Protect watch (de)register against save/restore. */ |
| 91 | struct rw_semaphore watch_mutex; | 101 | struct rw_semaphore watch_mutex; |
| @@ -157,6 +167,31 @@ static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len) | |||
| 157 | return body; | 167 | return body; |
| 158 | } | 168 | } |
| 159 | 169 | ||
| 170 | static void transaction_start(void) | ||
| 171 | { | ||
| 172 | mutex_lock(&xs_state.transaction_mutex); | ||
| 173 | atomic_inc(&xs_state.transaction_count); | ||
| 174 | mutex_unlock(&xs_state.transaction_mutex); | ||
| 175 | } | ||
| 176 | |||
| 177 | static void transaction_end(void) | ||
| 178 | { | ||
| 179 | if (atomic_dec_and_test(&xs_state.transaction_count)) | ||
| 180 | wake_up(&xs_state.transaction_wq); | ||
| 181 | } | ||
| 182 | |||
| 183 | static void transaction_suspend(void) | ||
| 184 | { | ||
| 185 | mutex_lock(&xs_state.transaction_mutex); | ||
| 186 | wait_event(xs_state.transaction_wq, | ||
| 187 | atomic_read(&xs_state.transaction_count) == 0); | ||
| 188 | } | ||
| 189 | |||
| 190 | static void transaction_resume(void) | ||
| 191 | { | ||
| 192 | mutex_unlock(&xs_state.transaction_mutex); | ||
| 193 | } | ||
| 194 | |||
| 160 | void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg) | 195 | void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg) |
| 161 | { | 196 | { |
| 162 | void *ret; | 197 | void *ret; |
| @@ -164,7 +199,7 @@ void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg) | |||
| 164 | int err; | 199 | int err; |
| 165 | 200 | ||
| 166 | if (req_msg.type == XS_TRANSACTION_START) | 201 | if (req_msg.type == XS_TRANSACTION_START) |
| 167 | down_read(&xs_state.transaction_mutex); | 202 | transaction_start(); |
| 168 | 203 | ||
| 169 | mutex_lock(&xs_state.request_mutex); | 204 | mutex_lock(&xs_state.request_mutex); |
| 170 | 205 | ||
| @@ -180,7 +215,7 @@ void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg) | |||
| 180 | if ((msg->type == XS_TRANSACTION_END) || | 215 | if ((msg->type == XS_TRANSACTION_END) || |
| 181 | ((req_msg.type == XS_TRANSACTION_START) && | 216 | ((req_msg.type == XS_TRANSACTION_START) && |
| 182 | (msg->type == XS_ERROR))) | 217 | (msg->type == XS_ERROR))) |
| 183 | up_read(&xs_state.transaction_mutex); | 218 | transaction_end(); |
| 184 | 219 | ||
| 185 | return ret; | 220 | return ret; |
| 186 | } | 221 | } |
| @@ -432,11 +467,11 @@ int xenbus_transaction_start(struct xenbus_transaction *t) | |||
| 432 | { | 467 | { |
| 433 | char *id_str; | 468 | char *id_str; |
| 434 | 469 | ||
| 435 | down_read(&xs_state.transaction_mutex); | 470 | transaction_start(); |
| 436 | 471 | ||
| 437 | id_str = xs_single(XBT_NIL, XS_TRANSACTION_START, "", NULL); | 472 | id_str = xs_single(XBT_NIL, XS_TRANSACTION_START, "", NULL); |
| 438 | if (IS_ERR(id_str)) { | 473 | if (IS_ERR(id_str)) { |
| 439 | up_read(&xs_state.transaction_mutex); | 474 | transaction_end(); |
| 440 | return PTR_ERR(id_str); | 475 | return PTR_ERR(id_str); |
| 441 | } | 476 | } |
| 442 | 477 | ||
| @@ -461,7 +496,7 @@ int xenbus_transaction_end(struct xenbus_transaction t, int abort) | |||
| 461 | 496 | ||
| 462 | err = xs_error(xs_single(t, XS_TRANSACTION_END, abortstr, NULL)); | 497 | err = xs_error(xs_single(t, XS_TRANSACTION_END, abortstr, NULL)); |
| 463 | 498 | ||
| 464 | up_read(&xs_state.transaction_mutex); | 499 | transaction_end(); |
| 465 | 500 | ||
| 466 | return err; | 501 | return err; |
| 467 | } | 502 | } |
| @@ -662,7 +697,7 @@ EXPORT_SYMBOL_GPL(unregister_xenbus_watch); | |||
| 662 | 697 | ||
| 663 | void xs_suspend(void) | 698 | void xs_suspend(void) |
| 664 | { | 699 | { |
| 665 | down_write(&xs_state.transaction_mutex); | 700 | transaction_suspend(); |
| 666 | down_write(&xs_state.watch_mutex); | 701 | down_write(&xs_state.watch_mutex); |
| 667 | mutex_lock(&xs_state.request_mutex); | 702 | mutex_lock(&xs_state.request_mutex); |
| 668 | mutex_lock(&xs_state.response_mutex); | 703 | mutex_lock(&xs_state.response_mutex); |
| @@ -677,7 +712,7 @@ void xs_resume(void) | |||
| 677 | 712 | ||
| 678 | mutex_unlock(&xs_state.response_mutex); | 713 | mutex_unlock(&xs_state.response_mutex); |
| 679 | mutex_unlock(&xs_state.request_mutex); | 714 | mutex_unlock(&xs_state.request_mutex); |
| 680 | up_write(&xs_state.transaction_mutex); | 715 | transaction_resume(); |
| 681 | 716 | ||
| 682 | /* No need for watches_lock: the watch_mutex is sufficient. */ | 717 | /* No need for watches_lock: the watch_mutex is sufficient. */ |
| 683 | list_for_each_entry(watch, &watches, list) { | 718 | list_for_each_entry(watch, &watches, list) { |
| @@ -693,7 +728,7 @@ void xs_suspend_cancel(void) | |||
| 693 | mutex_unlock(&xs_state.response_mutex); | 728 | mutex_unlock(&xs_state.response_mutex); |
| 694 | mutex_unlock(&xs_state.request_mutex); | 729 | mutex_unlock(&xs_state.request_mutex); |
| 695 | up_write(&xs_state.watch_mutex); | 730 | up_write(&xs_state.watch_mutex); |
| 696 | up_write(&xs_state.transaction_mutex); | 731 | mutex_unlock(&xs_state.transaction_mutex); |
| 697 | } | 732 | } |
| 698 | 733 | ||
| 699 | static int xenwatch_thread(void *unused) | 734 | static int xenwatch_thread(void *unused) |
| @@ -843,8 +878,10 @@ int xs_init(void) | |||
| 843 | 878 | ||
| 844 | mutex_init(&xs_state.request_mutex); | 879 | mutex_init(&xs_state.request_mutex); |
| 845 | mutex_init(&xs_state.response_mutex); | 880 | mutex_init(&xs_state.response_mutex); |
| 846 | init_rwsem(&xs_state.transaction_mutex); | 881 | mutex_init(&xs_state.transaction_mutex); |
| 847 | init_rwsem(&xs_state.watch_mutex); | 882 | init_rwsem(&xs_state.watch_mutex); |
| 883 | atomic_set(&xs_state.transaction_count, 0); | ||
| 884 | init_waitqueue_head(&xs_state.transaction_wq); | ||
| 848 | 885 | ||
| 849 | /* Initialize the shared memory rings to talk to xenstored */ | 886 | /* Initialize the shared memory rings to talk to xenstored */ |
| 850 | err = xb_init_comms(); | 887 | err = xb_init_comms(); |
diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c index 8924d93136f1..78bfab0700ba 100644 --- a/drivers/xen/xenfs/super.c +++ b/drivers/xen/xenfs/super.c | |||
| @@ -65,7 +65,7 @@ static struct file_system_type xenfs_type = { | |||
| 65 | 65 | ||
| 66 | static int __init xenfs_init(void) | 66 | static int __init xenfs_init(void) |
| 67 | { | 67 | { |
| 68 | if (xen_pv_domain()) | 68 | if (xen_domain()) |
| 69 | return register_filesystem(&xenfs_type); | 69 | return register_filesystem(&xenfs_type); |
| 70 | 70 | ||
| 71 | printk(KERN_INFO "XENFS: not registering filesystem on non-xen platform\n"); | 71 | printk(KERN_INFO "XENFS: not registering filesystem on non-xen platform\n"); |
| @@ -74,7 +74,7 @@ static int __init xenfs_init(void) | |||
| 74 | 74 | ||
| 75 | static void __exit xenfs_exit(void) | 75 | static void __exit xenfs_exit(void) |
| 76 | { | 76 | { |
| 77 | if (xen_pv_domain()) | 77 | if (xen_domain()) |
| 78 | unregister_filesystem(&xenfs_type); | 78 | unregister_filesystem(&xenfs_type); |
| 79 | } | 79 | } |
| 80 | 80 | ||
diff --git a/drivers/xen/xenfs/xenbus.c b/drivers/xen/xenfs/xenbus.c index f28ece397361..3b39c3752e21 100644 --- a/drivers/xen/xenfs/xenbus.c +++ b/drivers/xen/xenfs/xenbus.c | |||
| @@ -124,6 +124,9 @@ static ssize_t xenbus_file_read(struct file *filp, | |||
| 124 | mutex_lock(&u->reply_mutex); | 124 | mutex_lock(&u->reply_mutex); |
| 125 | while (list_empty(&u->read_buffers)) { | 125 | while (list_empty(&u->read_buffers)) { |
| 126 | mutex_unlock(&u->reply_mutex); | 126 | mutex_unlock(&u->reply_mutex); |
| 127 | if (filp->f_flags & O_NONBLOCK) | ||
| 128 | return -EAGAIN; | ||
| 129 | |||
| 127 | ret = wait_event_interruptible(u->read_waitq, | 130 | ret = wait_event_interruptible(u->read_waitq, |
| 128 | !list_empty(&u->read_buffers)); | 131 | !list_empty(&u->read_buffers)); |
| 129 | if (ret) | 132 | if (ret) |
| @@ -1277,7 +1277,7 @@ out: | |||
| 1277 | /* sys_io_destroy: | 1277 | /* sys_io_destroy: |
| 1278 | * Destroy the aio_context specified. May cancel any outstanding | 1278 | * Destroy the aio_context specified. May cancel any outstanding |
| 1279 | * AIOs and block on completion. Will fail with -ENOSYS if not | 1279 | * AIOs and block on completion. Will fail with -ENOSYS if not |
| 1280 | * implemented. May fail with -EFAULT if the context pointed to | 1280 | * implemented. May fail with -EINVAL if the context pointed to |
| 1281 | * is invalid. | 1281 | * is invalid. |
| 1282 | */ | 1282 | */ |
| 1283 | SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx) | 1283 | SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx) |
| @@ -1795,15 +1795,16 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, | |||
| 1795 | 1795 | ||
| 1796 | /* io_getevents: | 1796 | /* io_getevents: |
| 1797 | * Attempts to read at least min_nr events and up to nr events from | 1797 | * Attempts to read at least min_nr events and up to nr events from |
| 1798 | * the completion queue for the aio_context specified by ctx_id. May | 1798 | * the completion queue for the aio_context specified by ctx_id. If |
| 1799 | * fail with -EINVAL if ctx_id is invalid, if min_nr is out of range, | 1799 | * it succeeds, the number of read events is returned. May fail with |
| 1800 | * if nr is out of range, if when is out of range. May fail with | 1800 | * -EINVAL if ctx_id is invalid, if min_nr is out of range, if nr is |
| 1801 | * -EFAULT if any of the memory specified to is invalid. May return | 1801 | * out of range, if timeout is out of range. May fail with -EFAULT |
| 1802 | * 0 or < min_nr if no events are available and the timeout specified | 1802 | * if any of the memory specified is invalid. May return 0 or |
| 1803 | * by when has elapsed, where when == NULL specifies an infinite | 1803 | * < min_nr if the timeout specified by timeout has elapsed |
| 1804 | * timeout. Note that the timeout pointed to by when is relative and | 1804 | * before sufficient events are available, where timeout == NULL |
| 1805 | * will be updated if not NULL and the operation blocks. Will fail | 1805 | * specifies an infinite timeout. Note that the timeout pointed to by |
| 1806 | * with -ENOSYS if not implemented. | 1806 | * timeout is relative and will be updated if not NULL and the |
| 1807 | * operation blocks. Will fail with -ENOSYS if not implemented. | ||
| 1807 | */ | 1808 | */ |
| 1808 | SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, | 1809 | SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, |
| 1809 | long, min_nr, | 1810 | long, min_nr, |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 030a954ed292..4e7ae6002056 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -653,6 +653,7 @@ | |||
| 653 | EXIT_DATA \ | 653 | EXIT_DATA \ |
| 654 | EXIT_CALL \ | 654 | EXIT_CALL \ |
| 655 | *(.discard) \ | 655 | *(.discard) \ |
| 656 | *(.discard.*) \ | ||
| 656 | } | 657 | } |
| 657 | 658 | ||
| 658 | /** | 659 | /** |
diff --git a/drivers/video/fsl-diu-fb.h b/include/linux/fsl-diu-fb.h index fc295d7ea463..fc295d7ea463 100644 --- a/drivers/video/fsl-diu-fb.h +++ b/include/linux/fsl-diu-fb.h | |||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index e69612cace61..40c804d484ca 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2264,6 +2264,7 @@ | |||
| 2264 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 | 2264 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 |
| 2265 | 2265 | ||
| 2266 | #define PCI_VENDOR_ID_FREESCALE 0x1957 | 2266 | #define PCI_VENDOR_ID_FREESCALE 0x1957 |
| 2267 | #define PCI_DEVICE_ID_MPC8308 0xc006 | ||
| 2267 | #define PCI_DEVICE_ID_MPC8315E 0x00b4 | 2268 | #define PCI_DEVICE_ID_MPC8315E 0x00b4 |
| 2268 | #define PCI_DEVICE_ID_MPC8315 0x00b5 | 2269 | #define PCI_DEVICE_ID_MPC8315 0x00b5 |
| 2269 | #define PCI_DEVICE_ID_MPC8314E 0x00b6 | 2270 | #define PCI_DEVICE_ID_MPC8314E 0x00b6 |
| @@ -2772,3 +2773,6 @@ | |||
| 2772 | #define PCI_DEVICE_ID_RME_DIGI32 0x9896 | 2773 | #define PCI_DEVICE_ID_RME_DIGI32 0x9896 |
| 2773 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 | 2774 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 |
| 2774 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 | 2775 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 |
| 2776 | |||
| 2777 | #define PCI_VENDOR_ID_XEN 0x5853 | ||
| 2778 | #define PCI_DEVICE_ID_XEN_PLATFORM 0x0001 | ||
diff --git a/include/linux/power/jz4740-battery.h b/include/linux/power/jz4740-battery.h new file mode 100644 index 000000000000..19c9610c720a --- /dev/null +++ b/include/linux/power/jz4740-battery.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009, Jiejing Zhang <kzjeef@gmail.com> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * You should have received a copy of the GNU General Public License along | ||
| 10 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 11 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __JZ4740_BATTERY_H | ||
| 16 | #define __JZ4740_BATTERY_H | ||
| 17 | |||
| 18 | struct jz_battery_platform_data { | ||
| 19 | struct power_supply_info info; | ||
| 20 | int gpio_charge; /* GPIO port of Charger state */ | ||
| 21 | int gpio_charge_active_low; | ||
| 22 | }; | ||
| 23 | |||
| 24 | #endif | ||
diff --git a/include/xen/events.h b/include/xen/events.h index e68d59a90ca8..a15d93262e30 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
| @@ -56,4 +56,11 @@ void xen_poll_irq(int irq); | |||
| 56 | /* Determine the IRQ which is bound to an event channel */ | 56 | /* Determine the IRQ which is bound to an event channel */ |
| 57 | unsigned irq_from_evtchn(unsigned int evtchn); | 57 | unsigned irq_from_evtchn(unsigned int evtchn); |
| 58 | 58 | ||
| 59 | /* Xen HVM evtchn vector callback */ | ||
| 60 | extern void xen_hvm_callback_vector(void); | ||
| 61 | extern int xen_have_vector_callback; | ||
| 62 | int xen_set_callback_via(uint64_t via); | ||
| 63 | void xen_evtchn_do_upcall(struct pt_regs *regs); | ||
| 64 | void xen_hvm_evtchn_do_upcall(void); | ||
| 65 | |||
| 59 | #endif /* _XEN_EVENTS_H */ | 66 | #endif /* _XEN_EVENTS_H */ |
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index a40f1cd91be1..9a731706a016 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
| @@ -51,6 +51,7 @@ struct gnttab_free_callback { | |||
| 51 | u16 count; | 51 | u16 count; |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | int gnttab_init(void); | ||
| 54 | int gnttab_suspend(void); | 55 | int gnttab_suspend(void); |
| 55 | int gnttab_resume(void); | 56 | int gnttab_resume(void); |
| 56 | 57 | ||
| @@ -112,6 +113,9 @@ int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, | |||
| 112 | void arch_gnttab_unmap_shared(struct grant_entry *shared, | 113 | void arch_gnttab_unmap_shared(struct grant_entry *shared, |
| 113 | unsigned long nr_gframes); | 114 | unsigned long nr_gframes); |
| 114 | 115 | ||
| 116 | extern unsigned long xen_hvm_resume_frames; | ||
| 117 | unsigned int gnttab_max_grant_frames(void); | ||
| 118 | |||
| 115 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) | 119 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) |
| 116 | 120 | ||
| 117 | #endif /* __ASM_GNTTAB_H__ */ | 121 | #endif /* __ASM_GNTTAB_H__ */ |
diff --git a/include/xen/hvm.h b/include/xen/hvm.h new file mode 100644 index 000000000000..b193fa2f9fdd --- /dev/null +++ b/include/xen/hvm.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* Simple wrappers around HVM functions */ | ||
| 2 | #ifndef XEN_HVM_H__ | ||
| 3 | #define XEN_HVM_H__ | ||
| 4 | |||
| 5 | #include <xen/interface/hvm/params.h> | ||
| 6 | #include <asm/xen/hypercall.h> | ||
| 7 | |||
| 8 | static inline int hvm_get_parameter(int idx, uint64_t *value) | ||
| 9 | { | ||
| 10 | struct xen_hvm_param xhv; | ||
| 11 | int r; | ||
| 12 | |||
| 13 | xhv.domid = DOMID_SELF; | ||
| 14 | xhv.index = idx; | ||
| 15 | r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); | ||
| 16 | if (r < 0) { | ||
| 17 | printk(KERN_ERR "Cannot get hvm parameter %d: %d!\n", | ||
| 18 | idx, r); | ||
| 19 | return r; | ||
| 20 | } | ||
| 21 | *value = xhv.value; | ||
| 22 | return r; | ||
| 23 | } | ||
| 24 | |||
| 25 | #define HVM_CALLBACK_VIA_TYPE_VECTOR 0x2 | ||
| 26 | #define HVM_CALLBACK_VIA_TYPE_SHIFT 56 | ||
| 27 | #define HVM_CALLBACK_VECTOR(x) (((uint64_t)HVM_CALLBACK_VIA_TYPE_VECTOR)<<\ | ||
| 28 | HVM_CALLBACK_VIA_TYPE_SHIFT | (x)) | ||
| 29 | |||
| 30 | #endif /* XEN_HVM_H__ */ | ||
diff --git a/include/xen/interface/features.h b/include/xen/interface/features.h index f51b6413b054..70d2563ab166 100644 --- a/include/xen/interface/features.h +++ b/include/xen/interface/features.h | |||
| @@ -41,6 +41,12 @@ | |||
| 41 | /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */ | 41 | /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */ |
| 42 | #define XENFEAT_mmu_pt_update_preserve_ad 5 | 42 | #define XENFEAT_mmu_pt_update_preserve_ad 5 |
| 43 | 43 | ||
| 44 | /* x86: Does this Xen host support the HVM callback vector type? */ | ||
| 45 | #define XENFEAT_hvm_callback_vector 8 | ||
| 46 | |||
| 47 | /* x86: pvclock algorithm is safe to use on HVM */ | ||
| 48 | #define XENFEAT_hvm_safe_pvclock 9 | ||
| 49 | |||
| 44 | #define XENFEAT_NR_SUBMAPS 1 | 50 | #define XENFEAT_NR_SUBMAPS 1 |
| 45 | 51 | ||
| 46 | #endif /* __XEN_PUBLIC_FEATURES_H__ */ | 52 | #endif /* __XEN_PUBLIC_FEATURES_H__ */ |
diff --git a/include/xen/interface/grant_table.h b/include/xen/interface/grant_table.h index 39da93c21de0..39e571796e32 100644 --- a/include/xen/interface/grant_table.h +++ b/include/xen/interface/grant_table.h | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #ifndef __XEN_PUBLIC_GRANT_TABLE_H__ | 28 | #ifndef __XEN_PUBLIC_GRANT_TABLE_H__ |
| 29 | #define __XEN_PUBLIC_GRANT_TABLE_H__ | 29 | #define __XEN_PUBLIC_GRANT_TABLE_H__ |
| 30 | 30 | ||
| 31 | #include <xen/interface/xen.h> | ||
| 31 | 32 | ||
| 32 | /*********************************** | 33 | /*********************************** |
| 33 | * GRANT TABLE REPRESENTATION | 34 | * GRANT TABLE REPRESENTATION |
diff --git a/include/xen/interface/hvm/hvm_op.h b/include/xen/interface/hvm/hvm_op.h new file mode 100644 index 000000000000..a4827f46ee97 --- /dev/null +++ b/include/xen/interface/hvm/hvm_op.h | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | /* | ||
| 2 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 3 | * of this software and associated documentation files (the "Software"), to | ||
| 4 | * deal in the Software without restriction, including without limitation the | ||
| 5 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
| 6 | * sell copies of the Software, and to permit persons to whom the Software is | ||
| 7 | * furnished to do so, subject to the following conditions: | ||
| 8 | * | ||
| 9 | * The above copyright notice and this permission notice shall be included in | ||
| 10 | * all copies or substantial portions of the Software. | ||
| 11 | * | ||
| 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 13 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 15 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 16 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 17 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 18 | * DEALINGS IN THE SOFTWARE. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ | ||
| 22 | #define __XEN_PUBLIC_HVM_HVM_OP_H__ | ||
| 23 | |||
| 24 | /* Get/set subcommands: the second argument of the hypercall is a | ||
| 25 | * pointer to a xen_hvm_param struct. */ | ||
| 26 | #define HVMOP_set_param 0 | ||
| 27 | #define HVMOP_get_param 1 | ||
| 28 | struct xen_hvm_param { | ||
| 29 | domid_t domid; /* IN */ | ||
| 30 | uint32_t index; /* IN */ | ||
| 31 | uint64_t value; /* IN/OUT */ | ||
| 32 | }; | ||
| 33 | DEFINE_GUEST_HANDLE_STRUCT(xen_hvm_param); | ||
| 34 | |||
| 35 | /* Hint from PV drivers for pagetable destruction. */ | ||
| 36 | #define HVMOP_pagetable_dying 9 | ||
| 37 | struct xen_hvm_pagetable_dying { | ||
| 38 | /* Domain with a pagetable about to be destroyed. */ | ||
| 39 | domid_t domid; | ||
| 40 | /* guest physical address of the toplevel pagetable dying */ | ||
| 41 | aligned_u64 gpa; | ||
| 42 | }; | ||
| 43 | typedef struct xen_hvm_pagetable_dying xen_hvm_pagetable_dying_t; | ||
| 44 | DEFINE_GUEST_HANDLE_STRUCT(xen_hvm_pagetable_dying_t); | ||
| 45 | |||
| 46 | #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ | ||
diff --git a/include/xen/interface/hvm/params.h b/include/xen/interface/hvm/params.h new file mode 100644 index 000000000000..1888d8c157e6 --- /dev/null +++ b/include/xen/interface/hvm/params.h | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | /* | ||
| 2 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 3 | * of this software and associated documentation files (the "Software"), to | ||
| 4 | * deal in the Software without restriction, including without limitation the | ||
| 5 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
| 6 | * sell copies of the Software, and to permit persons to whom the Software is | ||
| 7 | * furnished to do so, subject to the following conditions: | ||
| 8 | * | ||
| 9 | * The above copyright notice and this permission notice shall be included in | ||
| 10 | * all copies or substantial portions of the Software. | ||
| 11 | * | ||
| 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 13 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 15 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 16 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 17 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 18 | * DEALINGS IN THE SOFTWARE. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __XEN_PUBLIC_HVM_PARAMS_H__ | ||
| 22 | #define __XEN_PUBLIC_HVM_PARAMS_H__ | ||
| 23 | |||
| 24 | #include "hvm_op.h" | ||
| 25 | |||
| 26 | /* | ||
| 27 | * Parameter space for HVMOP_{set,get}_param. | ||
| 28 | */ | ||
| 29 | |||
| 30 | /* | ||
| 31 | * How should CPU0 event-channel notifications be delivered? | ||
| 32 | * val[63:56] == 0: val[55:0] is a delivery GSI (Global System Interrupt). | ||
| 33 | * val[63:56] == 1: val[55:0] is a delivery PCI INTx line, as follows: | ||
| 34 | * Domain = val[47:32], Bus = val[31:16], | ||
| 35 | * DevFn = val[15: 8], IntX = val[ 1: 0] | ||
| 36 | * val[63:56] == 2: val[7:0] is a vector number. | ||
| 37 | * If val == 0 then CPU0 event-channel notifications are not delivered. | ||
| 38 | */ | ||
| 39 | #define HVM_PARAM_CALLBACK_IRQ 0 | ||
| 40 | |||
| 41 | #define HVM_PARAM_STORE_PFN 1 | ||
| 42 | #define HVM_PARAM_STORE_EVTCHN 2 | ||
| 43 | |||
| 44 | #define HVM_PARAM_PAE_ENABLED 4 | ||
| 45 | |||
| 46 | #define HVM_PARAM_IOREQ_PFN 5 | ||
| 47 | |||
| 48 | #define HVM_PARAM_BUFIOREQ_PFN 6 | ||
| 49 | |||
| 50 | /* | ||
| 51 | * Set mode for virtual timers (currently x86 only): | ||
| 52 | * delay_for_missed_ticks (default): | ||
| 53 | * Do not advance a vcpu's time beyond the correct delivery time for | ||
| 54 | * interrupts that have been missed due to preemption. Deliver missed | ||
| 55 | * interrupts when the vcpu is rescheduled and advance the vcpu's virtual | ||
| 56 | * time stepwise for each one. | ||
| 57 | * no_delay_for_missed_ticks: | ||
| 58 | * As above, missed interrupts are delivered, but guest time always tracks | ||
| 59 | * wallclock (i.e., real) time while doing so. | ||
| 60 | * no_missed_ticks_pending: | ||
| 61 | * No missed interrupts are held pending. Instead, to ensure ticks are | ||
| 62 | * delivered at some non-zero rate, if we detect missed ticks then the | ||
| 63 | * internal tick alarm is not disabled if the VCPU is preempted during the | ||
| 64 | * next tick period. | ||
| 65 | * one_missed_tick_pending: | ||
| 66 | * Missed interrupts are collapsed together and delivered as one 'late tick'. | ||
| 67 | * Guest time always tracks wallclock (i.e., real) time. | ||
| 68 | */ | ||
| 69 | #define HVM_PARAM_TIMER_MODE 10 | ||
| 70 | #define HVMPTM_delay_for_missed_ticks 0 | ||
| 71 | #define HVMPTM_no_delay_for_missed_ticks 1 | ||
| 72 | #define HVMPTM_no_missed_ticks_pending 2 | ||
| 73 | #define HVMPTM_one_missed_tick_pending 3 | ||
| 74 | |||
| 75 | /* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */ | ||
| 76 | #define HVM_PARAM_HPET_ENABLED 11 | ||
| 77 | |||
| 78 | /* Identity-map page directory used by Intel EPT when CR0.PG=0. */ | ||
| 79 | #define HVM_PARAM_IDENT_PT 12 | ||
| 80 | |||
| 81 | /* Device Model domain, defaults to 0. */ | ||
| 82 | #define HVM_PARAM_DM_DOMAIN 13 | ||
| 83 | |||
| 84 | /* ACPI S state: currently support S0 and S3 on x86. */ | ||
| 85 | #define HVM_PARAM_ACPI_S_STATE 14 | ||
| 86 | |||
| 87 | /* TSS used on Intel when CR0.PE=0. */ | ||
| 88 | #define HVM_PARAM_VM86_TSS 15 | ||
| 89 | |||
| 90 | /* Boolean: Enable aligning all periodic vpts to reduce interrupts */ | ||
| 91 | #define HVM_PARAM_VPT_ALIGN 16 | ||
| 92 | |||
| 93 | #define HVM_NR_PARAMS 17 | ||
| 94 | |||
| 95 | #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ | ||
diff --git a/include/xen/platform_pci.h b/include/xen/platform_pci.h new file mode 100644 index 000000000000..ce9d671c636c --- /dev/null +++ b/include/xen/platform_pci.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | #ifndef _XEN_PLATFORM_PCI_H | ||
| 2 | #define _XEN_PLATFORM_PCI_H | ||
| 3 | |||
| 4 | #define XEN_IOPORT_MAGIC_VAL 0x49d2 | ||
| 5 | #define XEN_IOPORT_LINUX_PRODNUM 0x0003 | ||
| 6 | #define XEN_IOPORT_LINUX_DRVVER 0x0001 | ||
| 7 | |||
| 8 | #define XEN_IOPORT_BASE 0x10 | ||
| 9 | |||
| 10 | #define XEN_IOPORT_PLATFLAGS (XEN_IOPORT_BASE + 0) /* 1 byte access (R/W) */ | ||
| 11 | #define XEN_IOPORT_MAGIC (XEN_IOPORT_BASE + 0) /* 2 byte access (R) */ | ||
| 12 | #define XEN_IOPORT_UNPLUG (XEN_IOPORT_BASE + 0) /* 2 byte access (W) */ | ||
| 13 | #define XEN_IOPORT_DRVVER (XEN_IOPORT_BASE + 0) /* 4 byte access (W) */ | ||
| 14 | |||
| 15 | #define XEN_IOPORT_SYSLOG (XEN_IOPORT_BASE + 2) /* 1 byte access (W) */ | ||
| 16 | #define XEN_IOPORT_PROTOVER (XEN_IOPORT_BASE + 2) /* 1 byte access (R) */ | ||
| 17 | #define XEN_IOPORT_PRODNUM (XEN_IOPORT_BASE + 2) /* 2 byte access (W) */ | ||
| 18 | |||
| 19 | #define XEN_UNPLUG_ALL_IDE_DISKS 1 | ||
| 20 | #define XEN_UNPLUG_ALL_NICS 2 | ||
| 21 | #define XEN_UNPLUG_AUX_IDE_DISKS 4 | ||
| 22 | #define XEN_UNPLUG_ALL 7 | ||
| 23 | #define XEN_UNPLUG_IGNORE 8 | ||
| 24 | |||
| 25 | static inline int xen_must_unplug_nics(void) { | ||
| 26 | #if (defined(CONFIG_XEN_NETDEV_FRONTEND) || \ | ||
| 27 | defined(CONFIG_XEN_NETDEV_FRONTEND_MODULE)) && \ | ||
| 28 | (defined(CONFIG_XEN_PLATFORM_PCI) || \ | ||
| 29 | defined(CONFIG_XEN_PLATFORM_PCI_MODULE)) | ||
| 30 | return 1; | ||
| 31 | #else | ||
| 32 | return 0; | ||
| 33 | #endif | ||
| 34 | } | ||
| 35 | |||
| 36 | static inline int xen_must_unplug_disks(void) { | ||
| 37 | #if (defined(CONFIG_XEN_BLKDEV_FRONTEND) || \ | ||
| 38 | defined(CONFIG_XEN_BLKDEV_FRONTEND_MODULE)) && \ | ||
| 39 | (defined(CONFIG_XEN_PLATFORM_PCI) || \ | ||
| 40 | defined(CONFIG_XEN_PLATFORM_PCI_MODULE)) | ||
| 41 | return 1; | ||
| 42 | #else | ||
| 43 | return 0; | ||
| 44 | #endif | ||
| 45 | } | ||
| 46 | |||
| 47 | extern int xen_platform_pci_unplug; | ||
| 48 | |||
| 49 | #endif /* _XEN_PLATFORM_PCI_H */ | ||
diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 883a21bba24b..46bc81ef74c6 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h | |||
| @@ -7,6 +7,7 @@ DECLARE_PER_CPU(struct vcpu_info *, xen_vcpu); | |||
| 7 | 7 | ||
| 8 | void xen_pre_suspend(void); | 8 | void xen_pre_suspend(void); |
| 9 | void xen_post_suspend(int suspend_cancelled); | 9 | void xen_post_suspend(int suspend_cancelled); |
| 10 | void xen_hvm_post_suspend(int suspend_cancelled); | ||
| 10 | 11 | ||
| 11 | void xen_mm_pin_all(void); | 12 | void xen_mm_pin_all(void); |
| 12 | void xen_mm_unpin_all(void); | 13 | void xen_mm_unpin_all(void); |
| @@ -14,4 +15,6 @@ void xen_mm_unpin_all(void); | |||
| 14 | void xen_timer_resume(void); | 15 | void xen_timer_resume(void); |
| 15 | void xen_arch_resume(void); | 16 | void xen_arch_resume(void); |
| 16 | 17 | ||
| 18 | int xen_setup_shutdown_event(void); | ||
| 19 | |||
| 17 | #endif /* INCLUDE_XEN_OPS_H */ | 20 | #endif /* INCLUDE_XEN_OPS_H */ |
diff --git a/kernel/hw_breakpoint.c b/kernel/hw_breakpoint.c index 7a56b22e0602..71ed3ce29e12 100644 --- a/kernel/hw_breakpoint.c +++ b/kernel/hw_breakpoint.c | |||
| @@ -242,6 +242,17 @@ toggle_bp_slot(struct perf_event *bp, bool enable, enum bp_type_idx type, | |||
| 242 | } | 242 | } |
| 243 | 243 | ||
| 244 | /* | 244 | /* |
| 245 | * Function to perform processor-specific cleanup during unregistration | ||
| 246 | */ | ||
| 247 | __weak void arch_unregister_hw_breakpoint(struct perf_event *bp) | ||
| 248 | { | ||
| 249 | /* | ||
| 250 | * A weak stub function here for those archs that don't define | ||
| 251 | * it inside arch/.../kernel/hw_breakpoint.c | ||
| 252 | */ | ||
| 253 | } | ||
| 254 | |||
| 255 | /* | ||
| 245 | * Contraints to check before allowing this new breakpoint counter: | 256 | * Contraints to check before allowing this new breakpoint counter: |
| 246 | * | 257 | * |
| 247 | * == Non-pinned counter == (Considered as pinned for now) | 258 | * == Non-pinned counter == (Considered as pinned for now) |
| @@ -339,6 +350,7 @@ void release_bp_slot(struct perf_event *bp) | |||
| 339 | { | 350 | { |
| 340 | mutex_lock(&nr_bp_mutex); | 351 | mutex_lock(&nr_bp_mutex); |
| 341 | 352 | ||
| 353 | arch_unregister_hw_breakpoint(bp); | ||
| 342 | __release_bp_slot(bp); | 354 | __release_bp_slot(bp); |
| 343 | 355 | ||
| 344 | mutex_unlock(&nr_bp_mutex); | 356 | mutex_unlock(&nr_bp_mutex); |
diff --git a/kernel/printk.c b/kernel/printk.c index 444b770c9595..4ab0164bcf84 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
| @@ -37,6 +37,8 @@ | |||
| 37 | #include <linux/ratelimit.h> | 37 | #include <linux/ratelimit.h> |
| 38 | #include <linux/kmsg_dump.h> | 38 | #include <linux/kmsg_dump.h> |
| 39 | #include <linux/syslog.h> | 39 | #include <linux/syslog.h> |
| 40 | #include <linux/cpu.h> | ||
| 41 | #include <linux/notifier.h> | ||
| 40 | 42 | ||
| 41 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
| 42 | 44 | ||
| @@ -985,6 +987,32 @@ void resume_console(void) | |||
| 985 | } | 987 | } |
| 986 | 988 | ||
| 987 | /** | 989 | /** |
| 990 | * console_cpu_notify - print deferred console messages after CPU hotplug | ||
| 991 | * @self: notifier struct | ||
| 992 | * @action: CPU hotplug event | ||
| 993 | * @hcpu: unused | ||
| 994 | * | ||
| 995 | * If printk() is called from a CPU that is not online yet, the messages | ||
| 996 | * will be spooled but will not show up on the console. This function is | ||
| 997 | * called when a new CPU comes online (or fails to come up), and ensures | ||
| 998 | * that any such output gets printed. | ||
| 999 | */ | ||
| 1000 | static int __cpuinit console_cpu_notify(struct notifier_block *self, | ||
| 1001 | unsigned long action, void *hcpu) | ||
| 1002 | { | ||
| 1003 | switch (action) { | ||
| 1004 | case CPU_ONLINE: | ||
| 1005 | case CPU_DEAD: | ||
| 1006 | case CPU_DYING: | ||
| 1007 | case CPU_DOWN_FAILED: | ||
| 1008 | case CPU_UP_CANCELED: | ||
| 1009 | acquire_console_sem(); | ||
| 1010 | release_console_sem(); | ||
| 1011 | } | ||
| 1012 | return NOTIFY_OK; | ||
| 1013 | } | ||
| 1014 | |||
| 1015 | /** | ||
| 988 | * acquire_console_sem - lock the console system for exclusive use. | 1016 | * acquire_console_sem - lock the console system for exclusive use. |
| 989 | * | 1017 | * |
| 990 | * Acquires a semaphore which guarantees that the caller has | 1018 | * Acquires a semaphore which guarantees that the caller has |
| @@ -1371,7 +1399,7 @@ int unregister_console(struct console *console) | |||
| 1371 | } | 1399 | } |
| 1372 | EXPORT_SYMBOL(unregister_console); | 1400 | EXPORT_SYMBOL(unregister_console); |
| 1373 | 1401 | ||
| 1374 | static int __init disable_boot_consoles(void) | 1402 | static int __init printk_late_init(void) |
| 1375 | { | 1403 | { |
| 1376 | struct console *con; | 1404 | struct console *con; |
| 1377 | 1405 | ||
| @@ -1382,9 +1410,10 @@ static int __init disable_boot_consoles(void) | |||
| 1382 | unregister_console(con); | 1410 | unregister_console(con); |
| 1383 | } | 1411 | } |
| 1384 | } | 1412 | } |
| 1413 | hotcpu_notifier(console_cpu_notify, 0); | ||
| 1385 | return 0; | 1414 | return 0; |
| 1386 | } | 1415 | } |
| 1387 | late_initcall(disable_boot_consoles); | 1416 | late_initcall(printk_late_init); |
| 1388 | 1417 | ||
| 1389 | #if defined CONFIG_PRINTK | 1418 | #if defined CONFIG_PRINTK |
| 1390 | 1419 | ||
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index dfdc0347b05d..154ff43aaa81 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -528,7 +528,7 @@ config LOCKDEP | |||
| 528 | bool | 528 | bool |
| 529 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 529 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
| 530 | select STACKTRACE | 530 | select STACKTRACE |
| 531 | select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 | 531 | select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE |
| 532 | select KALLSYMS | 532 | select KALLSYMS |
| 533 | select KALLSYMS_ALL | 533 | select KALLSYMS_ALL |
| 534 | 534 | ||
| @@ -958,13 +958,13 @@ config FAULT_INJECTION_STACKTRACE_FILTER | |||
| 958 | depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT | 958 | depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT |
| 959 | depends on !X86_64 | 959 | depends on !X86_64 |
| 960 | select STACKTRACE | 960 | select STACKTRACE |
| 961 | select FRAME_POINTER if !PPC && !S390 | 961 | select FRAME_POINTER if !PPC && !S390 && !MICROBLAZE |
| 962 | help | 962 | help |
| 963 | Provide stacktrace filter for fault-injection capabilities | 963 | Provide stacktrace filter for fault-injection capabilities |
| 964 | 964 | ||
| 965 | config LATENCYTOP | 965 | config LATENCYTOP |
| 966 | bool "Latency measuring infrastructure" | 966 | bool "Latency measuring infrastructure" |
| 967 | select FRAME_POINTER if !MIPS && !PPC && !S390 | 967 | select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE |
| 968 | select KALLSYMS | 968 | select KALLSYMS |
| 969 | select KALLSYMS_ALL | 969 | select KALLSYMS_ALL |
| 970 | select STACKTRACE | 970 | select STACKTRACE |
diff --git a/samples/kprobes/kprobe_example.c b/samples/kprobes/kprobe_example.c index a681998a871c..ebf5e0c368ea 100644 --- a/samples/kprobes/kprobe_example.c +++ b/samples/kprobes/kprobe_example.c | |||
| @@ -32,6 +32,11 @@ static int handler_pre(struct kprobe *p, struct pt_regs *regs) | |||
| 32 | " msr = 0x%lx\n", | 32 | " msr = 0x%lx\n", |
| 33 | p->addr, regs->nip, regs->msr); | 33 | p->addr, regs->nip, regs->msr); |
| 34 | #endif | 34 | #endif |
| 35 | #ifdef CONFIG_MIPS | ||
| 36 | printk(KERN_INFO "pre_handler: p->addr = 0x%p, epc = 0x%lx," | ||
| 37 | " status = 0x%lx\n", | ||
| 38 | p->addr, regs->cp0_epc, regs->cp0_status); | ||
| 39 | #endif | ||
| 35 | 40 | ||
| 36 | /* A dump_stack() here will give a stack backtrace */ | 41 | /* A dump_stack() here will give a stack backtrace */ |
| 37 | return 0; | 42 | return 0; |
| @@ -49,6 +54,10 @@ static void handler_post(struct kprobe *p, struct pt_regs *regs, | |||
| 49 | printk(KERN_INFO "post_handler: p->addr = 0x%p, msr = 0x%lx\n", | 54 | printk(KERN_INFO "post_handler: p->addr = 0x%p, msr = 0x%lx\n", |
| 50 | p->addr, regs->msr); | 55 | p->addr, regs->msr); |
| 51 | #endif | 56 | #endif |
| 57 | #ifdef CONFIG_MIPS | ||
| 58 | printk(KERN_INFO "post_handler: p->addr = 0x%p, status = 0x%lx\n", | ||
| 59 | p->addr, regs->cp0_status); | ||
| 60 | #endif | ||
| 52 | } | 61 | } |
| 53 | 62 | ||
| 54 | /* | 63 | /* |
