diff options
Diffstat (limited to 'arch')
519 files changed, 7187 insertions, 6585 deletions
diff --git a/arch/alpha/kernel/alpha_ksyms.c b/arch/alpha/kernel/alpha_ksyms.c index 8b02420f732e..e9762a33b043 100644 --- a/arch/alpha/kernel/alpha_ksyms.c +++ b/arch/alpha/kernel/alpha_ksyms.c | |||
| @@ -6,40 +6,13 @@ | |||
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | #include <linux/module.h> | 8 | #include <linux/module.h> |
| 9 | #include <linux/string.h> | ||
| 10 | #include <linux/user.h> | ||
| 11 | #include <linux/elfcore.h> | ||
| 12 | #include <linux/socket.h> | ||
| 13 | #include <linux/syscalls.h> | ||
| 14 | #include <linux/in.h> | ||
| 15 | #include <linux/in6.h> | ||
| 16 | #include <linux/pci.h> | ||
| 17 | #include <linux/screen_info.h> | ||
| 18 | #include <linux/tty.h> | ||
| 19 | #include <linux/mm.h> | ||
| 20 | #include <linux/delay.h> | ||
| 21 | #include <linux/dma-mapping.h> | ||
| 22 | |||
| 23 | #include <asm/io.h> | ||
| 24 | #include <asm/console.h> | 9 | #include <asm/console.h> |
| 25 | #include <asm/hwrpb.h> | ||
| 26 | #include <asm/uaccess.h> | 10 | #include <asm/uaccess.h> |
| 27 | #include <asm/processor.h> | ||
| 28 | #include <asm/checksum.h> | 11 | #include <asm/checksum.h> |
| 29 | #include <linux/interrupt.h> | ||
| 30 | #include <asm/fpu.h> | 12 | #include <asm/fpu.h> |
| 31 | #include <asm/irq.h> | ||
| 32 | #include <asm/machvec.h> | 13 | #include <asm/machvec.h> |
| 33 | #include <asm/pgalloc.h> | ||
| 34 | #include <asm/semaphore.h> | ||
| 35 | #include <asm/tlbflush.h> | ||
| 36 | #include <asm/cacheflush.h> | ||
| 37 | #include <asm/vga.h> | ||
| 38 | 14 | ||
| 39 | #include <asm/unistd.h> | 15 | #include <linux/syscalls.h> |
| 40 | |||
| 41 | extern struct hwrpb_struct *hwrpb; | ||
| 42 | extern spinlock_t rtc_lock; | ||
| 43 | 16 | ||
| 44 | /* these are C runtime functions with special calling conventions: */ | 17 | /* these are C runtime functions with special calling conventions: */ |
| 45 | extern void __divl (void); | 18 | extern void __divl (void); |
| @@ -52,14 +25,9 @@ extern void __divqu (void); | |||
| 52 | extern void __remqu (void); | 25 | extern void __remqu (void); |
| 53 | 26 | ||
| 54 | EXPORT_SYMBOL(alpha_mv); | 27 | EXPORT_SYMBOL(alpha_mv); |
| 55 | EXPORT_SYMBOL(screen_info); | ||
| 56 | EXPORT_SYMBOL(perf_irq); | ||
| 57 | EXPORT_SYMBOL(callback_getenv); | 28 | EXPORT_SYMBOL(callback_getenv); |
| 58 | EXPORT_SYMBOL(callback_setenv); | 29 | EXPORT_SYMBOL(callback_setenv); |
| 59 | EXPORT_SYMBOL(callback_save_env); | 30 | EXPORT_SYMBOL(callback_save_env); |
| 60 | #ifdef CONFIG_ALPHA_GENERIC | ||
| 61 | EXPORT_SYMBOL(alpha_using_srm); | ||
| 62 | #endif /* CONFIG_ALPHA_GENERIC */ | ||
| 63 | 31 | ||
| 64 | /* platform dependent support */ | 32 | /* platform dependent support */ |
| 65 | EXPORT_SYMBOL(strcat); | 33 | EXPORT_SYMBOL(strcat); |
| @@ -77,47 +45,14 @@ EXPORT_SYMBOL(__constant_c_memset); | |||
| 77 | EXPORT_SYMBOL(copy_page); | 45 | EXPORT_SYMBOL(copy_page); |
| 78 | EXPORT_SYMBOL(clear_page); | 46 | EXPORT_SYMBOL(clear_page); |
| 79 | 47 | ||
| 80 | EXPORT_SYMBOL(__direct_map_base); | ||
| 81 | EXPORT_SYMBOL(__direct_map_size); | ||
| 82 | |||
| 83 | #ifdef CONFIG_PCI | ||
| 84 | EXPORT_SYMBOL(pci_alloc_consistent); | ||
| 85 | EXPORT_SYMBOL(pci_free_consistent); | ||
| 86 | EXPORT_SYMBOL(pci_map_single); | ||
| 87 | EXPORT_SYMBOL(pci_map_page); | ||
| 88 | EXPORT_SYMBOL(pci_unmap_single); | ||
| 89 | EXPORT_SYMBOL(pci_unmap_page); | ||
| 90 | EXPORT_SYMBOL(pci_map_sg); | ||
| 91 | EXPORT_SYMBOL(pci_unmap_sg); | ||
| 92 | EXPORT_SYMBOL(pci_dma_supported); | ||
| 93 | EXPORT_SYMBOL(pci_dac_dma_supported); | ||
| 94 | EXPORT_SYMBOL(pci_dac_page_to_dma); | ||
| 95 | EXPORT_SYMBOL(pci_dac_dma_to_page); | ||
| 96 | EXPORT_SYMBOL(pci_dac_dma_to_offset); | ||
| 97 | EXPORT_SYMBOL(alpha_gendev_to_pci); | ||
| 98 | #endif | ||
| 99 | EXPORT_SYMBOL(dma_set_mask); | ||
| 100 | |||
| 101 | EXPORT_SYMBOL(dump_thread); | ||
| 102 | EXPORT_SYMBOL(dump_elf_thread); | ||
| 103 | EXPORT_SYMBOL(dump_elf_task); | ||
| 104 | EXPORT_SYMBOL(dump_elf_task_fp); | ||
| 105 | EXPORT_SYMBOL(hwrpb); | ||
| 106 | EXPORT_SYMBOL(start_thread); | ||
| 107 | EXPORT_SYMBOL(alpha_read_fp_reg); | 48 | EXPORT_SYMBOL(alpha_read_fp_reg); |
| 108 | EXPORT_SYMBOL(alpha_read_fp_reg_s); | 49 | EXPORT_SYMBOL(alpha_read_fp_reg_s); |
| 109 | EXPORT_SYMBOL(alpha_write_fp_reg); | 50 | EXPORT_SYMBOL(alpha_write_fp_reg); |
| 110 | EXPORT_SYMBOL(alpha_write_fp_reg_s); | 51 | EXPORT_SYMBOL(alpha_write_fp_reg_s); |
| 111 | 52 | ||
| 112 | /* In-kernel system calls. */ | 53 | /* entry.S */ |
| 113 | EXPORT_SYMBOL(kernel_thread); | 54 | EXPORT_SYMBOL(kernel_thread); |
| 114 | EXPORT_SYMBOL(sys_dup); | ||
| 115 | EXPORT_SYMBOL(sys_exit); | ||
| 116 | EXPORT_SYMBOL(sys_write); | ||
| 117 | EXPORT_SYMBOL(sys_lseek); | ||
| 118 | EXPORT_SYMBOL(kernel_execve); | 55 | EXPORT_SYMBOL(kernel_execve); |
| 119 | EXPORT_SYMBOL(sys_setsid); | ||
| 120 | EXPORT_SYMBOL(sys_wait4); | ||
| 121 | 56 | ||
| 122 | /* Networking helper routines. */ | 57 | /* Networking helper routines. */ |
| 123 | EXPORT_SYMBOL(csum_tcpudp_magic); | 58 | EXPORT_SYMBOL(csum_tcpudp_magic); |
| @@ -134,10 +69,6 @@ EXPORT_SYMBOL(alpha_fp_emul_imprecise); | |||
| 134 | EXPORT_SYMBOL(alpha_fp_emul); | 69 | EXPORT_SYMBOL(alpha_fp_emul); |
| 135 | #endif | 70 | #endif |
| 136 | 71 | ||
| 137 | #ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK | ||
| 138 | EXPORT_SYMBOL(__min_ipl); | ||
| 139 | #endif | ||
| 140 | |||
| 141 | /* | 72 | /* |
| 142 | * The following are specially called from the uaccess assembly stubs. | 73 | * The following are specially called from the uaccess assembly stubs. |
| 143 | */ | 74 | */ |
| @@ -160,27 +91,10 @@ EXPORT_SYMBOL(up); | |||
| 160 | */ | 91 | */ |
| 161 | 92 | ||
| 162 | #ifdef CONFIG_SMP | 93 | #ifdef CONFIG_SMP |
| 163 | EXPORT_SYMBOL(flush_tlb_mm); | ||
| 164 | EXPORT_SYMBOL(flush_tlb_range); | ||
| 165 | EXPORT_SYMBOL(flush_tlb_page); | ||
| 166 | EXPORT_SYMBOL(smp_imb); | ||
| 167 | EXPORT_SYMBOL(cpu_data); | ||
| 168 | EXPORT_SYMBOL(smp_num_cpus); | ||
| 169 | EXPORT_SYMBOL(smp_call_function); | ||
| 170 | EXPORT_SYMBOL(smp_call_function_on_cpu); | ||
| 171 | EXPORT_SYMBOL(_atomic_dec_and_lock); | 94 | EXPORT_SYMBOL(_atomic_dec_and_lock); |
| 172 | #endif /* CONFIG_SMP */ | 95 | #endif /* CONFIG_SMP */ |
| 173 | 96 | ||
| 174 | /* | 97 | /* |
| 175 | * NUMA specific symbols | ||
| 176 | */ | ||
| 177 | #ifdef CONFIG_DISCONTIGMEM | ||
| 178 | EXPORT_SYMBOL(node_data); | ||
| 179 | #endif /* CONFIG_DISCONTIGMEM */ | ||
| 180 | |||
| 181 | EXPORT_SYMBOL(rtc_lock); | ||
| 182 | |||
| 183 | /* | ||
| 184 | * The following are special because they're not called | 98 | * The following are special because they're not called |
| 185 | * explicitly (the C compiler or assembler generates them in | 99 | * explicitly (the C compiler or assembler generates them in |
| 186 | * response to division operations). Fortunately, their | 100 | * response to division operations). Fortunately, their |
| @@ -200,8 +114,3 @@ EXPORT_SYMBOL(__remqu); | |||
| 200 | EXPORT_SYMBOL(memcpy); | 114 | EXPORT_SYMBOL(memcpy); |
| 201 | EXPORT_SYMBOL(memset); | 115 | EXPORT_SYMBOL(memset); |
| 202 | EXPORT_SYMBOL(memchr); | 116 | EXPORT_SYMBOL(memchr); |
| 203 | |||
| 204 | #ifdef CONFIG_ALPHA_IRONGATE | ||
| 205 | EXPORT_SYMBOL(irongate_ioremap); | ||
| 206 | EXPORT_SYMBOL(irongate_iounmap); | ||
| 207 | #endif | ||
diff --git a/arch/alpha/kernel/core_irongate.c b/arch/alpha/kernel/core_irongate.c index 138d497d1cca..e4a0bcf1d28b 100644 --- a/arch/alpha/kernel/core_irongate.c +++ b/arch/alpha/kernel/core_irongate.c | |||
| @@ -404,6 +404,7 @@ irongate_ioremap(unsigned long addr, unsigned long size) | |||
| 404 | #endif | 404 | #endif |
| 405 | return (void __iomem *)vaddr; | 405 | return (void __iomem *)vaddr; |
| 406 | } | 406 | } |
| 407 | EXPORT_SYMBOL(irongate_ioremap); | ||
| 407 | 408 | ||
| 408 | void | 409 | void |
| 409 | irongate_iounmap(volatile void __iomem *xaddr) | 410 | irongate_iounmap(volatile void __iomem *xaddr) |
| @@ -414,3 +415,4 @@ irongate_iounmap(volatile void __iomem *xaddr) | |||
| 414 | if (addr) | 415 | if (addr) |
| 415 | return vfree((void *)(PAGE_MASK & addr)); | 416 | return vfree((void *)(PAGE_MASK & addr)); |
| 416 | } | 417 | } |
| 418 | EXPORT_SYMBOL(irongate_iounmap); | ||
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c index 6dd126b8be85..e16aeb6e79ef 100644 --- a/arch/alpha/kernel/irq_alpha.c +++ b/arch/alpha/kernel/irq_alpha.c | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include <linux/sched.h> | 6 | #include <linux/sched.h> |
| 7 | #include <linux/irq.h> | 7 | #include <linux/irq.h> |
| 8 | #include <linux/kernel_stat.h> | 8 | #include <linux/kernel_stat.h> |
| 9 | #include <linux/module.h> | ||
| 9 | 10 | ||
| 10 | #include <asm/machvec.h> | 11 | #include <asm/machvec.h> |
| 11 | #include <asm/dma.h> | 12 | #include <asm/dma.h> |
| @@ -16,6 +17,7 @@ | |||
| 16 | /* Hack minimum IPL during interrupt processing for broken hardware. */ | 17 | /* Hack minimum IPL during interrupt processing for broken hardware. */ |
| 17 | #ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK | 18 | #ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK |
| 18 | int __min_ipl; | 19 | int __min_ipl; |
| 20 | EXPORT_SYMBOL(__min_ipl); | ||
| 19 | #endif | 21 | #endif |
| 20 | 22 | ||
| 21 | /* | 23 | /* |
| @@ -30,6 +32,7 @@ dummy_perf(unsigned long vector, struct pt_regs *regs) | |||
| 30 | } | 32 | } |
| 31 | 33 | ||
| 32 | void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf; | 34 | void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf; |
| 35 | EXPORT_SYMBOL(perf_irq); | ||
| 33 | 36 | ||
| 34 | /* | 37 | /* |
| 35 | * The main interrupt entry point. | 38 | * The main interrupt entry point. |
diff --git a/arch/alpha/kernel/pci-noop.c b/arch/alpha/kernel/pci-noop.c index fff5cf93e816..174b729c504b 100644 --- a/arch/alpha/kernel/pci-noop.c +++ b/arch/alpha/kernel/pci-noop.c | |||
| @@ -201,6 +201,7 @@ dma_set_mask(struct device *dev, u64 mask) | |||
| 201 | 201 | ||
| 202 | return 0; | 202 | return 0; |
| 203 | } | 203 | } |
| 204 | EXPORT_SYMBOL(dma_set_mask); | ||
| 204 | 205 | ||
| 205 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | 206 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) |
| 206 | { | 207 | { |
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index c468e312e5f8..6e7d1fe6e935 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c | |||
| @@ -300,6 +300,7 @@ pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir) | |||
| 300 | dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; | 300 | dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; |
| 301 | return pci_map_single_1(pdev, cpu_addr, size, dac_allowed); | 301 | return pci_map_single_1(pdev, cpu_addr, size, dac_allowed); |
| 302 | } | 302 | } |
| 303 | EXPORT_SYMBOL(pci_map_single); | ||
| 303 | 304 | ||
| 304 | dma_addr_t | 305 | dma_addr_t |
| 305 | pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, | 306 | pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, |
| @@ -314,6 +315,7 @@ pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, | |||
| 314 | return pci_map_single_1(pdev, (char *)page_address(page) + offset, | 315 | return pci_map_single_1(pdev, (char *)page_address(page) + offset, |
| 315 | size, dac_allowed); | 316 | size, dac_allowed); |
| 316 | } | 317 | } |
| 318 | EXPORT_SYMBOL(pci_map_page); | ||
| 317 | 319 | ||
| 318 | /* Unmap a single streaming mode DMA translation. The DMA_ADDR and | 320 | /* Unmap a single streaming mode DMA translation. The DMA_ADDR and |
| 319 | SIZE must match what was provided for in a previous pci_map_single | 321 | SIZE must match what was provided for in a previous pci_map_single |
| @@ -379,6 +381,7 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | |||
| 379 | DBGA2("pci_unmap_single: sg [%lx,%lx] np %ld from %p\n", | 381 | DBGA2("pci_unmap_single: sg [%lx,%lx] np %ld from %p\n", |
| 380 | dma_addr, size, npages, __builtin_return_address(0)); | 382 | dma_addr, size, npages, __builtin_return_address(0)); |
| 381 | } | 383 | } |
| 384 | EXPORT_SYMBOL(pci_unmap_single); | ||
| 382 | 385 | ||
| 383 | void | 386 | void |
| 384 | pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr, | 387 | pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr, |
| @@ -386,6 +389,7 @@ pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr, | |||
| 386 | { | 389 | { |
| 387 | pci_unmap_single(pdev, dma_addr, size, direction); | 390 | pci_unmap_single(pdev, dma_addr, size, direction); |
| 388 | } | 391 | } |
| 392 | EXPORT_SYMBOL(pci_unmap_page); | ||
| 389 | 393 | ||
| 390 | /* Allocate and map kernel buffer using consistent mode DMA for PCI | 394 | /* Allocate and map kernel buffer using consistent mode DMA for PCI |
| 391 | device. Returns non-NULL cpu-view pointer to the buffer if | 395 | device. Returns non-NULL cpu-view pointer to the buffer if |
| @@ -427,6 +431,7 @@ try_again: | |||
| 427 | 431 | ||
| 428 | return cpu_addr; | 432 | return cpu_addr; |
| 429 | } | 433 | } |
| 434 | EXPORT_SYMBOL(pci_alloc_consistent); | ||
| 430 | 435 | ||
| 431 | /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must | 436 | /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must |
| 432 | be values that were returned from pci_alloc_consistent. SIZE must | 437 | be values that were returned from pci_alloc_consistent. SIZE must |
| @@ -444,7 +449,7 @@ pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr, | |||
| 444 | DBGA2("pci_free_consistent: [%x,%lx] from %p\n", | 449 | DBGA2("pci_free_consistent: [%x,%lx] from %p\n", |
| 445 | dma_addr, size, __builtin_return_address(0)); | 450 | dma_addr, size, __builtin_return_address(0)); |
| 446 | } | 451 | } |
| 447 | 452 | EXPORT_SYMBOL(pci_free_consistent); | |
| 448 | 453 | ||
| 449 | /* Classify the elements of the scatterlist. Write dma_address | 454 | /* Classify the elements of the scatterlist. Write dma_address |
| 450 | of each element with: | 455 | of each element with: |
| @@ -672,6 +677,7 @@ pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
| 672 | pci_unmap_sg(pdev, start, out - start, direction); | 677 | pci_unmap_sg(pdev, start, out - start, direction); |
| 673 | return 0; | 678 | return 0; |
| 674 | } | 679 | } |
| 680 | EXPORT_SYMBOL(pci_map_sg); | ||
| 675 | 681 | ||
| 676 | /* Unmap a set of streaming mode DMA translations. Again, cpu read | 682 | /* Unmap a set of streaming mode DMA translations. Again, cpu read |
| 677 | rules concerning calls here are the same as for pci_unmap_single() | 683 | rules concerning calls here are the same as for pci_unmap_single() |
| @@ -752,6 +758,7 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
| 752 | 758 | ||
| 753 | DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); | 759 | DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); |
| 754 | } | 760 | } |
| 761 | EXPORT_SYMBOL(pci_unmap_sg); | ||
| 755 | 762 | ||
| 756 | 763 | ||
| 757 | /* Return whether the given PCI device DMA address mask can be | 764 | /* Return whether the given PCI device DMA address mask can be |
| @@ -786,6 +793,7 @@ pci_dma_supported(struct pci_dev *pdev, u64 mask) | |||
| 786 | 793 | ||
| 787 | return 0; | 794 | return 0; |
| 788 | } | 795 | } |
| 796 | EXPORT_SYMBOL(pci_dma_supported); | ||
| 789 | 797 | ||
| 790 | 798 | ||
| 791 | /* | 799 | /* |
| @@ -908,6 +916,7 @@ pci_dac_dma_supported(struct pci_dev *dev, u64 mask) | |||
| 908 | 916 | ||
| 909 | return ok; | 917 | return ok; |
| 910 | } | 918 | } |
| 919 | EXPORT_SYMBOL(pci_dac_dma_supported); | ||
| 911 | 920 | ||
| 912 | dma64_addr_t | 921 | dma64_addr_t |
| 913 | pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, | 922 | pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, |
| @@ -917,6 +926,7 @@ pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, | |||
| 917 | + __pa(page_address(page)) | 926 | + __pa(page_address(page)) |
| 918 | + (dma64_addr_t) offset); | 927 | + (dma64_addr_t) offset); |
| 919 | } | 928 | } |
| 929 | EXPORT_SYMBOL(pci_dac_page_to_dma); | ||
| 920 | 930 | ||
| 921 | struct page * | 931 | struct page * |
| 922 | pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) | 932 | pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) |
| @@ -924,13 +934,14 @@ pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) | |||
| 924 | unsigned long paddr = (dma_addr & PAGE_MASK) - alpha_mv.pci_dac_offset; | 934 | unsigned long paddr = (dma_addr & PAGE_MASK) - alpha_mv.pci_dac_offset; |
| 925 | return virt_to_page(__va(paddr)); | 935 | return virt_to_page(__va(paddr)); |
| 926 | } | 936 | } |
| 937 | EXPORT_SYMBOL(pci_dac_dma_to_page); | ||
| 927 | 938 | ||
| 928 | unsigned long | 939 | unsigned long |
| 929 | pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) | 940 | pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) |
| 930 | { | 941 | { |
| 931 | return (dma_addr & ~PAGE_MASK); | 942 | return (dma_addr & ~PAGE_MASK); |
| 932 | } | 943 | } |
| 933 | 944 | EXPORT_SYMBOL(pci_dac_dma_to_offset); | |
| 934 | 945 | ||
| 935 | /* Helper for generic DMA-mapping functions. */ | 946 | /* Helper for generic DMA-mapping functions. */ |
| 936 | 947 | ||
| @@ -957,6 +968,7 @@ alpha_gendev_to_pci(struct device *dev) | |||
| 957 | /* This assumes ISA bus master with dma_mask 0xffffff. */ | 968 | /* This assumes ISA bus master with dma_mask 0xffffff. */ |
| 958 | return NULL; | 969 | return NULL; |
| 959 | } | 970 | } |
| 971 | EXPORT_SYMBOL(alpha_gendev_to_pci); | ||
| 960 | 972 | ||
| 961 | int | 973 | int |
| 962 | dma_set_mask(struct device *dev, u64 mask) | 974 | dma_set_mask(struct device *dev, u64 mask) |
| @@ -969,3 +981,4 @@ dma_set_mask(struct device *dev, u64 mask) | |||
| 969 | 981 | ||
| 970 | return 0; | 982 | return 0; |
| 971 | } | 983 | } |
| 984 | EXPORT_SYMBOL(dma_set_mask); | ||
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index b3a8a2980365..3370e6faeae0 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c | |||
| @@ -205,6 +205,7 @@ start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) | |||
| 205 | regs->ps = 8; | 205 | regs->ps = 8; |
| 206 | wrusp(sp); | 206 | wrusp(sp); |
| 207 | } | 207 | } |
| 208 | EXPORT_SYMBOL(start_thread); | ||
| 208 | 209 | ||
| 209 | /* | 210 | /* |
| 210 | * Free current thread data structures etc.. | 211 | * Free current thread data structures etc.. |
| @@ -376,6 +377,7 @@ dump_thread(struct pt_regs * pt, struct user * dump) | |||
| 376 | dump->regs[EF_A2] = pt->r18; | 377 | dump->regs[EF_A2] = pt->r18; |
| 377 | memcpy((char *)dump->regs + EF_SIZE, sw->fp, 32 * 8); | 378 | memcpy((char *)dump->regs + EF_SIZE, sw->fp, 32 * 8); |
| 378 | } | 379 | } |
| 380 | EXPORT_SYMBOL(dump_thread); | ||
| 379 | 381 | ||
| 380 | /* | 382 | /* |
| 381 | * Fill in the user structure for a ELF core dump. | 383 | * Fill in the user structure for a ELF core dump. |
| @@ -424,6 +426,7 @@ dump_elf_thread(elf_greg_t *dest, struct pt_regs *pt, struct thread_info *ti) | |||
| 424 | useful value of the thread's UNIQUE field. */ | 426 | useful value of the thread's UNIQUE field. */ |
| 425 | dest[32] = ti->pcb.unique; | 427 | dest[32] = ti->pcb.unique; |
| 426 | } | 428 | } |
| 429 | EXPORT_SYMBOL(dump_elf_thread); | ||
| 427 | 430 | ||
| 428 | int | 431 | int |
| 429 | dump_elf_task(elf_greg_t *dest, struct task_struct *task) | 432 | dump_elf_task(elf_greg_t *dest, struct task_struct *task) |
| @@ -431,6 +434,7 @@ dump_elf_task(elf_greg_t *dest, struct task_struct *task) | |||
| 431 | dump_elf_thread(dest, task_pt_regs(task), task_thread_info(task)); | 434 | dump_elf_thread(dest, task_pt_regs(task), task_thread_info(task)); |
| 432 | return 1; | 435 | return 1; |
| 433 | } | 436 | } |
| 437 | EXPORT_SYMBOL(dump_elf_task); | ||
| 434 | 438 | ||
| 435 | int | 439 | int |
| 436 | dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task) | 440 | dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task) |
| @@ -439,6 +443,7 @@ dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task) | |||
| 439 | memcpy(dest, sw->fp, 32 * 8); | 443 | memcpy(dest, sw->fp, 32 * 8); |
| 440 | return 1; | 444 | return 1; |
| 441 | } | 445 | } |
| 446 | EXPORT_SYMBOL(dump_elf_task_fp); | ||
| 442 | 447 | ||
| 443 | /* | 448 | /* |
| 444 | * sys_execve() executes a new program. | 449 | * sys_execve() executes a new program. |
diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c index a94e6d93e2ee..1aea7c7c683c 100644 --- a/arch/alpha/kernel/setup.c +++ b/arch/alpha/kernel/setup.c | |||
| @@ -66,6 +66,7 @@ static struct notifier_block alpha_panic_block = { | |||
| 66 | 66 | ||
| 67 | 67 | ||
| 68 | struct hwrpb_struct *hwrpb; | 68 | struct hwrpb_struct *hwrpb; |
| 69 | EXPORT_SYMBOL(hwrpb); | ||
| 69 | unsigned long srm_hae; | 70 | unsigned long srm_hae; |
| 70 | 71 | ||
| 71 | int alpha_l1i_cacheshape; | 72 | int alpha_l1i_cacheshape; |
| @@ -111,6 +112,7 @@ unsigned long alpha_agpgart_size = DEFAULT_AGP_APER_SIZE; | |||
| 111 | #ifdef CONFIG_ALPHA_GENERIC | 112 | #ifdef CONFIG_ALPHA_GENERIC |
| 112 | struct alpha_machine_vector alpha_mv; | 113 | struct alpha_machine_vector alpha_mv; |
| 113 | int alpha_using_srm; | 114 | int alpha_using_srm; |
| 115 | EXPORT_SYMBOL(alpha_using_srm); | ||
| 114 | #endif | 116 | #endif |
| 115 | 117 | ||
| 116 | static struct alpha_machine_vector *get_sysvec(unsigned long, unsigned long, | 118 | static struct alpha_machine_vector *get_sysvec(unsigned long, unsigned long, |
| @@ -137,6 +139,8 @@ struct screen_info screen_info = { | |||
| 137 | .orig_video_points = 16 | 139 | .orig_video_points = 16 |
| 138 | }; | 140 | }; |
| 139 | 141 | ||
| 142 | EXPORT_SYMBOL(screen_info); | ||
| 143 | |||
| 140 | /* | 144 | /* |
| 141 | * The direct map I/O window, if any. This should be the same | 145 | * The direct map I/O window, if any. This should be the same |
| 142 | * for all busses, since it's used by virt_to_bus. | 146 | * for all busses, since it's used by virt_to_bus. |
| @@ -144,6 +148,8 @@ struct screen_info screen_info = { | |||
| 144 | 148 | ||
| 145 | unsigned long __direct_map_base; | 149 | unsigned long __direct_map_base; |
| 146 | unsigned long __direct_map_size; | 150 | unsigned long __direct_map_size; |
| 151 | EXPORT_SYMBOL(__direct_map_base); | ||
| 152 | EXPORT_SYMBOL(__direct_map_size); | ||
| 147 | 153 | ||
| 148 | /* | 154 | /* |
| 149 | * Declare all of the machine vectors. | 155 | * Declare all of the machine vectors. |
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 596780e2c7da..d1ec4f51df1a 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
| @@ -52,6 +52,7 @@ | |||
| 52 | 52 | ||
| 53 | /* A collection of per-processor data. */ | 53 | /* A collection of per-processor data. */ |
| 54 | struct cpuinfo_alpha cpu_data[NR_CPUS]; | 54 | struct cpuinfo_alpha cpu_data[NR_CPUS]; |
| 55 | EXPORT_SYMBOL(cpu_data); | ||
| 55 | 56 | ||
| 56 | /* A collection of single bit ipi messages. */ | 57 | /* A collection of single bit ipi messages. */ |
| 57 | static struct { | 58 | static struct { |
| @@ -74,6 +75,7 @@ EXPORT_SYMBOL(cpu_online_map); | |||
| 74 | 75 | ||
| 75 | int smp_num_probed; /* Internal processor count */ | 76 | int smp_num_probed; /* Internal processor count */ |
| 76 | int smp_num_cpus = 1; /* Number that came online. */ | 77 | int smp_num_cpus = 1; /* Number that came online. */ |
| 78 | EXPORT_SYMBOL(smp_num_cpus); | ||
| 77 | 79 | ||
| 78 | extern void calibrate_delay(void); | 80 | extern void calibrate_delay(void); |
| 79 | 81 | ||
| @@ -790,6 +792,7 @@ smp_call_function_on_cpu (void (*func) (void *info), void *info, int retry, | |||
| 790 | 792 | ||
| 791 | return 0; | 793 | return 0; |
| 792 | } | 794 | } |
| 795 | EXPORT_SYMBOL(smp_call_function_on_cpu); | ||
| 793 | 796 | ||
| 794 | int | 797 | int |
| 795 | smp_call_function (void (*func) (void *info), void *info, int retry, int wait) | 798 | smp_call_function (void (*func) (void *info), void *info, int retry, int wait) |
| @@ -797,6 +800,7 @@ smp_call_function (void (*func) (void *info), void *info, int retry, int wait) | |||
| 797 | return smp_call_function_on_cpu (func, info, retry, wait, | 800 | return smp_call_function_on_cpu (func, info, retry, wait, |
| 798 | cpu_online_map); | 801 | cpu_online_map); |
| 799 | } | 802 | } |
| 803 | EXPORT_SYMBOL(smp_call_function); | ||
| 800 | 804 | ||
| 801 | static void | 805 | static void |
| 802 | ipi_imb(void *ignored) | 806 | ipi_imb(void *ignored) |
| @@ -811,6 +815,7 @@ smp_imb(void) | |||
| 811 | if (on_each_cpu(ipi_imb, NULL, 1, 1)) | 815 | if (on_each_cpu(ipi_imb, NULL, 1, 1)) |
| 812 | printk(KERN_CRIT "smp_imb: timed out\n"); | 816 | printk(KERN_CRIT "smp_imb: timed out\n"); |
| 813 | } | 817 | } |
| 818 | EXPORT_SYMBOL(smp_imb); | ||
| 814 | 819 | ||
| 815 | static void | 820 | static void |
| 816 | ipi_flush_tlb_all(void *ignored) | 821 | ipi_flush_tlb_all(void *ignored) |
| @@ -866,6 +871,7 @@ flush_tlb_mm(struct mm_struct *mm) | |||
| 866 | 871 | ||
| 867 | preempt_enable(); | 872 | preempt_enable(); |
| 868 | } | 873 | } |
| 874 | EXPORT_SYMBOL(flush_tlb_mm); | ||
| 869 | 875 | ||
| 870 | struct flush_tlb_page_struct { | 876 | struct flush_tlb_page_struct { |
| 871 | struct vm_area_struct *vma; | 877 | struct vm_area_struct *vma; |
| @@ -918,6 +924,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) | |||
| 918 | 924 | ||
| 919 | preempt_enable(); | 925 | preempt_enable(); |
| 920 | } | 926 | } |
| 927 | EXPORT_SYMBOL(flush_tlb_page); | ||
| 921 | 928 | ||
| 922 | void | 929 | void |
| 923 | flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 930 | flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) |
| @@ -925,6 +932,7 @@ flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long e | |||
| 925 | /* On the Alpha we always flush the whole user tlb. */ | 932 | /* On the Alpha we always flush the whole user tlb. */ |
| 926 | flush_tlb_mm(vma->vm_mm); | 933 | flush_tlb_mm(vma->vm_mm); |
| 927 | } | 934 | } |
| 935 | EXPORT_SYMBOL(flush_tlb_range); | ||
| 928 | 936 | ||
| 929 | static void | 937 | static void |
| 930 | ipi_flush_icache_page(void *x) | 938 | ipi_flush_icache_page(void *x) |
diff --git a/arch/alpha/kernel/srm_env.c b/arch/alpha/kernel/srm_env.c index 990ac61028f8..f7dd081d57ff 100644 --- a/arch/alpha/kernel/srm_env.c +++ b/arch/alpha/kernel/srm_env.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * srm_env.c - Access to SRM environment | 2 | * srm_env.c - Access to SRM environment |
| 3 | * variables through linux' procfs | 3 | * variables through linux' procfs |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2001-2002 Jan-Benedict Glaw <jbglaw@lug-owl.de> | 5 | * (C) 2001,2002,2006 by Jan-Benedict Glaw <jbglaw@lug-owl.de> |
| 6 | * | 6 | * |
| 7 | * This driver is at all a modified version of Erik Mouw's | 7 | * This driver is at all a modified version of Erik Mouw's |
| 8 | * Documentation/DocBook/procfs_example.c, so: thank | 8 | * Documentation/DocBook/procfs_example.c, so: thank |
| @@ -21,7 +21,7 @@ | |||
| 21 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | 21 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
| 22 | * PURPOSE. See the GNU General Public License for more | 22 | * PURPOSE. See the GNU General Public License for more |
| 23 | * details. | 23 | * details. |
| 24 | * | 24 | * |
| 25 | * You should have received a copy of the GNU General Public | 25 | * You should have received a copy of the GNU General Public |
| 26 | * License along with this program; if not, write to the | 26 | * License along with this program; if not, write to the |
| 27 | * Free Software Foundation, Inc., 59 Temple Place, | 27 | * Free Software Foundation, Inc., 59 Temple Place, |
| @@ -29,33 +29,6 @@ | |||
| 29 | * | 29 | * |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | /* | ||
| 33 | * Changelog | ||
| 34 | * ~~~~~~~~~ | ||
| 35 | * | ||
| 36 | * Thu, 22 Aug 2002 15:10:43 +0200 | ||
| 37 | * - Update Config.help entry. I got a number of emails asking | ||
| 38 | * me to tell their senders if they could make use of this | ||
| 39 | * piece of code... So: "SRM is something like BIOS for your | ||
| 40 | * Alpha" | ||
| 41 | * - Update code formatting a bit to better conform CodingStyle | ||
| 42 | * rules. | ||
| 43 | * - So this is v0.0.5, with no changes (except formatting) | ||
| 44 | * | ||
| 45 | * Wed, 22 May 2002 00:11:21 +0200 | ||
| 46 | * - Fix typo on comment (SRC -> SRM) | ||
| 47 | * - Call this "Version 0.0.4" | ||
| 48 | * | ||
| 49 | * Tue, 9 Apr 2002 18:44:40 +0200 | ||
| 50 | * - Implement access by variable name and additionally | ||
| 51 | * by number. This is done by creating two subdirectories | ||
| 52 | * where one holds all names (like the old directory | ||
| 53 | * did) and the other holding 256 files named like "0", | ||
| 54 | * "1" and so on. | ||
| 55 | * - Call this "Version 0.0.3" | ||
| 56 | * | ||
| 57 | */ | ||
| 58 | |||
| 59 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
| 60 | #include <linux/module.h> | 33 | #include <linux/module.h> |
| 61 | #include <linux/init.h> | 34 | #include <linux/init.h> |
| @@ -67,7 +40,7 @@ | |||
| 67 | #define BASE_DIR "srm_environment" /* Subdir in /proc/ */ | 40 | #define BASE_DIR "srm_environment" /* Subdir in /proc/ */ |
| 68 | #define NAMED_DIR "named_variables" /* Subdir for known variables */ | 41 | #define NAMED_DIR "named_variables" /* Subdir for known variables */ |
| 69 | #define NUMBERED_DIR "numbered_variables" /* Subdir for all variables */ | 42 | #define NUMBERED_DIR "numbered_variables" /* Subdir for all variables */ |
| 70 | #define VERSION "0.0.5" /* Module version */ | 43 | #define VERSION "0.0.6" /* Module version */ |
| 71 | #define NAME "srm_env" /* Module name */ | 44 | #define NAME "srm_env" /* Module name */ |
| 72 | 45 | ||
| 73 | MODULE_AUTHOR("Jan-Benedict Glaw <jbglaw@lug-owl.de>"); | 46 | MODULE_AUTHOR("Jan-Benedict Glaw <jbglaw@lug-owl.de>"); |
| @@ -106,7 +79,6 @@ static srm_env_t srm_named_entries[] = { | |||
| 106 | static srm_env_t srm_numbered_entries[256]; | 79 | static srm_env_t srm_numbered_entries[256]; |
| 107 | 80 | ||
| 108 | 81 | ||
| 109 | |||
| 110 | static int | 82 | static int |
| 111 | srm_env_read(char *page, char **start, off_t off, int count, int *eof, | 83 | srm_env_read(char *page, char **start, off_t off, int count, int *eof, |
| 112 | void *data) | 84 | void *data) |
| @@ -115,21 +87,23 @@ srm_env_read(char *page, char **start, off_t off, int count, int *eof, | |||
| 115 | unsigned long ret; | 87 | unsigned long ret; |
| 116 | srm_env_t *entry; | 88 | srm_env_t *entry; |
| 117 | 89 | ||
| 118 | if(off != 0) | 90 | if (off != 0) { |
| 119 | return -EFAULT; | 91 | *eof = 1; |
| 92 | return 0; | ||
| 93 | } | ||
| 120 | 94 | ||
| 121 | entry = (srm_env_t *) data; | 95 | entry = (srm_env_t *) data; |
| 122 | ret = callback_getenv(entry->id, page, count); | 96 | ret = callback_getenv(entry->id, page, count); |
| 123 | 97 | ||
| 124 | if((ret >> 61) == 0) | 98 | if ((ret >> 61) == 0) { |
| 125 | nbytes = (int) ret; | 99 | nbytes = (int) ret; |
| 126 | else | 100 | *eof = 1; |
| 101 | } else | ||
| 127 | nbytes = -EFAULT; | 102 | nbytes = -EFAULT; |
| 128 | 103 | ||
| 129 | return nbytes; | 104 | return nbytes; |
| 130 | } | 105 | } |
| 131 | 106 | ||
| 132 | |||
| 133 | static int | 107 | static int |
| 134 | srm_env_write(struct file *file, const char __user *buffer, unsigned long count, | 108 | srm_env_write(struct file *file, const char __user *buffer, unsigned long count, |
| 135 | void *data) | 109 | void *data) |
| @@ -155,7 +129,7 @@ srm_env_write(struct file *file, const char __user *buffer, unsigned long count, | |||
| 155 | 129 | ||
| 156 | ret1 = callback_setenv(entry->id, buf, count); | 130 | ret1 = callback_setenv(entry->id, buf, count); |
| 157 | if ((ret1 >> 61) == 0) { | 131 | if ((ret1 >> 61) == 0) { |
| 158 | do | 132 | do |
| 159 | ret2 = callback_save_env(); | 133 | ret2 = callback_save_env(); |
| 160 | while((ret2 >> 61) == 1); | 134 | while((ret2 >> 61) == 1); |
| 161 | res = (int) ret1; | 135 | res = (int) ret1; |
| @@ -172,14 +146,14 @@ srm_env_cleanup(void) | |||
| 172 | srm_env_t *entry; | 146 | srm_env_t *entry; |
| 173 | unsigned long var_num; | 147 | unsigned long var_num; |
| 174 | 148 | ||
| 175 | if(base_dir) { | 149 | if (base_dir) { |
| 176 | /* | 150 | /* |
| 177 | * Remove named entries | 151 | * Remove named entries |
| 178 | */ | 152 | */ |
| 179 | if(named_dir) { | 153 | if (named_dir) { |
| 180 | entry = srm_named_entries; | 154 | entry = srm_named_entries; |
| 181 | while(entry->name != NULL && entry->id != 0) { | 155 | while (entry->name != NULL && entry->id != 0) { |
| 182 | if(entry->proc_entry) { | 156 | if (entry->proc_entry) { |
| 183 | remove_proc_entry(entry->name, | 157 | remove_proc_entry(entry->name, |
| 184 | named_dir); | 158 | named_dir); |
| 185 | entry->proc_entry = NULL; | 159 | entry->proc_entry = NULL; |
| @@ -192,11 +166,11 @@ srm_env_cleanup(void) | |||
| 192 | /* | 166 | /* |
| 193 | * Remove numbered entries | 167 | * Remove numbered entries |
| 194 | */ | 168 | */ |
| 195 | if(numbered_dir) { | 169 | if (numbered_dir) { |
| 196 | for(var_num = 0; var_num <= 255; var_num++) { | 170 | for (var_num = 0; var_num <= 255; var_num++) { |
| 197 | entry = &srm_numbered_entries[var_num]; | 171 | entry = &srm_numbered_entries[var_num]; |
| 198 | 172 | ||
| 199 | if(entry->proc_entry) { | 173 | if (entry->proc_entry) { |
| 200 | remove_proc_entry(entry->name, | 174 | remove_proc_entry(entry->name, |
| 201 | numbered_dir); | 175 | numbered_dir); |
| 202 | entry->proc_entry = NULL; | 176 | entry->proc_entry = NULL; |
| @@ -212,7 +186,6 @@ srm_env_cleanup(void) | |||
| 212 | return; | 186 | return; |
| 213 | } | 187 | } |
| 214 | 188 | ||
| 215 | |||
| 216 | static int __init | 189 | static int __init |
| 217 | srm_env_init(void) | 190 | srm_env_init(void) |
| 218 | { | 191 | { |
| @@ -222,7 +195,7 @@ srm_env_init(void) | |||
| 222 | /* | 195 | /* |
| 223 | * Check system | 196 | * Check system |
| 224 | */ | 197 | */ |
| 225 | if(!alpha_using_srm) { | 198 | if (!alpha_using_srm) { |
| 226 | printk(KERN_INFO "%s: This Alpha system doesn't " | 199 | printk(KERN_INFO "%s: This Alpha system doesn't " |
| 227 | "know about SRM (or you've booted " | 200 | "know about SRM (or you've booted " |
| 228 | "SRM->MILO->Linux, which gets " | 201 | "SRM->MILO->Linux, which gets " |
| @@ -233,14 +206,14 @@ srm_env_init(void) | |||
| 233 | /* | 206 | /* |
| 234 | * Init numbers | 207 | * Init numbers |
| 235 | */ | 208 | */ |
| 236 | for(var_num = 0; var_num <= 255; var_num++) | 209 | for (var_num = 0; var_num <= 255; var_num++) |
| 237 | sprintf(number[var_num], "%ld", var_num); | 210 | sprintf(number[var_num], "%ld", var_num); |
| 238 | 211 | ||
| 239 | /* | 212 | /* |
| 240 | * Create base directory | 213 | * Create base directory |
| 241 | */ | 214 | */ |
| 242 | base_dir = proc_mkdir(BASE_DIR, NULL); | 215 | base_dir = proc_mkdir(BASE_DIR, NULL); |
| 243 | if(base_dir == NULL) { | 216 | if (!base_dir) { |
| 244 | printk(KERN_ERR "Couldn't create base dir /proc/%s\n", | 217 | printk(KERN_ERR "Couldn't create base dir /proc/%s\n", |
| 245 | BASE_DIR); | 218 | BASE_DIR); |
| 246 | goto cleanup; | 219 | goto cleanup; |
| @@ -251,7 +224,7 @@ srm_env_init(void) | |||
| 251 | * Create per-name subdirectory | 224 | * Create per-name subdirectory |
| 252 | */ | 225 | */ |
| 253 | named_dir = proc_mkdir(NAMED_DIR, base_dir); | 226 | named_dir = proc_mkdir(NAMED_DIR, base_dir); |
| 254 | if(named_dir == NULL) { | 227 | if (!named_dir) { |
| 255 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", | 228 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", |
| 256 | BASE_DIR, NAMED_DIR); | 229 | BASE_DIR, NAMED_DIR); |
| 257 | goto cleanup; | 230 | goto cleanup; |
| @@ -262,7 +235,7 @@ srm_env_init(void) | |||
| 262 | * Create per-number subdirectory | 235 | * Create per-number subdirectory |
| 263 | */ | 236 | */ |
| 264 | numbered_dir = proc_mkdir(NUMBERED_DIR, base_dir); | 237 | numbered_dir = proc_mkdir(NUMBERED_DIR, base_dir); |
| 265 | if(numbered_dir == NULL) { | 238 | if (!numbered_dir) { |
| 266 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", | 239 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", |
| 267 | BASE_DIR, NUMBERED_DIR); | 240 | BASE_DIR, NUMBERED_DIR); |
| 268 | goto cleanup; | 241 | goto cleanup; |
| @@ -274,10 +247,10 @@ srm_env_init(void) | |||
| 274 | * Create all named nodes | 247 | * Create all named nodes |
| 275 | */ | 248 | */ |
| 276 | entry = srm_named_entries; | 249 | entry = srm_named_entries; |
| 277 | while(entry->name != NULL && entry->id != 0) { | 250 | while (entry->name && entry->id) { |
| 278 | entry->proc_entry = create_proc_entry(entry->name, | 251 | entry->proc_entry = create_proc_entry(entry->name, |
| 279 | 0644, named_dir); | 252 | 0644, named_dir); |
| 280 | if(entry->proc_entry == NULL) | 253 | if (!entry->proc_entry) |
| 281 | goto cleanup; | 254 | goto cleanup; |
| 282 | 255 | ||
| 283 | entry->proc_entry->data = (void *) entry; | 256 | entry->proc_entry->data = (void *) entry; |
| @@ -291,13 +264,13 @@ srm_env_init(void) | |||
| 291 | /* | 264 | /* |
| 292 | * Create all numbered nodes | 265 | * Create all numbered nodes |
| 293 | */ | 266 | */ |
| 294 | for(var_num = 0; var_num <= 255; var_num++) { | 267 | for (var_num = 0; var_num <= 255; var_num++) { |
| 295 | entry = &srm_numbered_entries[var_num]; | 268 | entry = &srm_numbered_entries[var_num]; |
| 296 | entry->name = number[var_num]; | 269 | entry->name = number[var_num]; |
| 297 | 270 | ||
| 298 | entry->proc_entry = create_proc_entry(entry->name, | 271 | entry->proc_entry = create_proc_entry(entry->name, |
| 299 | 0644, numbered_dir); | 272 | 0644, numbered_dir); |
| 300 | if(entry->proc_entry == NULL) | 273 | if (!entry->proc_entry) |
| 301 | goto cleanup; | 274 | goto cleanup; |
| 302 | 275 | ||
| 303 | entry->id = var_num; | 276 | entry->id = var_num; |
| @@ -318,7 +291,6 @@ cleanup: | |||
| 318 | return -ENOMEM; | 291 | return -ENOMEM; |
| 319 | } | 292 | } |
| 320 | 293 | ||
| 321 | |||
| 322 | static void __exit | 294 | static void __exit |
| 323 | srm_env_exit(void) | 295 | srm_env_exit(void) |
| 324 | { | 296 | { |
| @@ -328,7 +300,5 @@ srm_env_exit(void) | |||
| 328 | return; | 300 | return; |
| 329 | } | 301 | } |
| 330 | 302 | ||
| 331 | |||
| 332 | module_init(srm_env_init); | 303 | module_init(srm_env_init); |
| 333 | module_exit(srm_env_exit); | 304 | module_exit(srm_env_exit); |
| 334 | |||
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c index cf0666523989..d7053eb4ffcf 100644 --- a/arch/alpha/kernel/time.c +++ b/arch/alpha/kernel/time.c | |||
| @@ -57,6 +57,7 @@ | |||
| 57 | static int set_rtc_mmss(unsigned long); | 57 | static int set_rtc_mmss(unsigned long); |
| 58 | 58 | ||
| 59 | DEFINE_SPINLOCK(rtc_lock); | 59 | DEFINE_SPINLOCK(rtc_lock); |
| 60 | EXPORT_SYMBOL(rtc_lock); | ||
| 60 | 61 | ||
| 61 | #define TICK_SIZE (tick_nsec / 1000) | 62 | #define TICK_SIZE (tick_nsec / 1000) |
| 62 | 63 | ||
diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S index 71470e9d93ba..76bf071e376c 100644 --- a/arch/alpha/kernel/vmlinux.lds.S +++ b/arch/alpha/kernel/vmlinux.lds.S | |||
| @@ -48,13 +48,7 @@ SECTIONS | |||
| 48 | . = ALIGN(8); | 48 | . = ALIGN(8); |
| 49 | __initcall_start = .; | 49 | __initcall_start = .; |
| 50 | .initcall.init : { | 50 | .initcall.init : { |
| 51 | *(.initcall1.init) | 51 | INITCALLS |
| 52 | *(.initcall2.init) | ||
| 53 | *(.initcall3.init) | ||
| 54 | *(.initcall4.init) | ||
| 55 | *(.initcall5.init) | ||
| 56 | *(.initcall6.init) | ||
| 57 | *(.initcall7.init) | ||
| 58 | } | 52 | } |
| 59 | __initcall_end = .; | 53 | __initcall_end = .; |
| 60 | 54 | ||
diff --git a/arch/alpha/mm/numa.c b/arch/alpha/mm/numa.c index b826f58c6e72..e3e3806a6f25 100644 --- a/arch/alpha/mm/numa.c +++ b/arch/alpha/mm/numa.c | |||
| @@ -13,12 +13,14 @@ | |||
| 13 | #include <linux/swap.h> | 13 | #include <linux/swap.h> |
| 14 | #include <linux/initrd.h> | 14 | #include <linux/initrd.h> |
| 15 | #include <linux/pfn.h> | 15 | #include <linux/pfn.h> |
| 16 | #include <linux/module.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/hwrpb.h> | 18 | #include <asm/hwrpb.h> |
| 18 | #include <asm/pgalloc.h> | 19 | #include <asm/pgalloc.h> |
| 19 | 20 | ||
| 20 | pg_data_t node_data[MAX_NUMNODES]; | 21 | pg_data_t node_data[MAX_NUMNODES]; |
| 21 | bootmem_data_t node_bdata[MAX_NUMNODES]; | 22 | bootmem_data_t node_bdata[MAX_NUMNODES]; |
| 23 | EXPORT_SYMBOL(node_data); | ||
| 22 | 24 | ||
| 23 | #undef DEBUG_DISCONTIG | 25 | #undef DEBUG_DISCONTIG |
| 24 | #ifdef DEBUG_DISCONTIG | 26 | #ifdef DEBUG_DISCONTIG |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 2a0b2c8a1fe0..6f4f8bf36071 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
| @@ -174,11 +174,13 @@ libs-y := arch/arm/lib/ $(libs-y) | |||
| 174 | 174 | ||
| 175 | # Default target when executing plain make | 175 | # Default target when executing plain make |
| 176 | ifeq ($(CONFIG_XIP_KERNEL),y) | 176 | ifeq ($(CONFIG_XIP_KERNEL),y) |
| 177 | all: xipImage | 177 | KBUILD_IMAGE := xipImage |
| 178 | else | 178 | else |
| 179 | all: zImage | 179 | KBUILD_IMAGE := zImage |
| 180 | endif | 180 | endif |
| 181 | 181 | ||
| 182 | all: $(KBUILD_IMAGE) | ||
| 183 | |||
| 182 | boot := arch/arm/boot | 184 | boot := arch/arm/boot |
| 183 | 185 | ||
| 184 | # Update machine arch and proc symlinks if something which affects | 186 | # Update machine arch and proc symlinks if something which affects |
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 028bdc9228fb..2e635b814c14 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
| @@ -662,7 +662,8 @@ EXPORT_SYMBOL(dma_map_single); | |||
| 662 | EXPORT_SYMBOL(dma_unmap_single); | 662 | EXPORT_SYMBOL(dma_unmap_single); |
| 663 | EXPORT_SYMBOL(dma_map_sg); | 663 | EXPORT_SYMBOL(dma_map_sg); |
| 664 | EXPORT_SYMBOL(dma_unmap_sg); | 664 | EXPORT_SYMBOL(dma_unmap_sg); |
| 665 | EXPORT_SYMBOL(dma_sync_single); | 665 | EXPORT_SYMBOL(dma_sync_single_for_cpu); |
| 666 | EXPORT_SYMBOL(dma_sync_single_for_device); | ||
| 666 | EXPORT_SYMBOL(dma_sync_sg); | 667 | EXPORT_SYMBOL(dma_sync_sg); |
| 667 | EXPORT_SYMBOL(dmabounce_register_dev); | 668 | EXPORT_SYMBOL(dmabounce_register_dev); |
| 668 | EXPORT_SYMBOL(dmabounce_unregister_dev); | 669 | EXPORT_SYMBOL(dmabounce_unregister_dev); |
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig index c82e4667f45e..b43041476e02 100644 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ b/arch/arm/configs/at91rm9200dk_defconfig | |||
| @@ -577,7 +577,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 577 | # Watchdog Device Drivers | 577 | # Watchdog Device Drivers |
| 578 | # | 578 | # |
| 579 | # CONFIG_SOFT_WATCHDOG is not set | 579 | # CONFIG_SOFT_WATCHDOG is not set |
| 580 | CONFIG_AT91_WATCHDOG=y | 580 | CONFIG_AT91RM9200_WATCHDOG=y |
| 581 | 581 | ||
| 582 | # | 582 | # |
| 583 | # USB-based Watchdog Cards | 583 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig index b983fc59aa42..d96fc8386e2f 100644 --- a/arch/arm/configs/at91rm9200ek_defconfig +++ b/arch/arm/configs/at91rm9200ek_defconfig | |||
| @@ -558,7 +558,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 558 | # Watchdog Device Drivers | 558 | # Watchdog Device Drivers |
| 559 | # | 559 | # |
| 560 | # CONFIG_SOFT_WATCHDOG is not set | 560 | # CONFIG_SOFT_WATCHDOG is not set |
| 561 | CONFIG_AT91_WATCHDOG=y | 561 | CONFIG_AT91RM9200_WATCHDOG=y |
| 562 | 562 | ||
| 563 | # | 563 | # |
| 564 | # USB-based Watchdog Cards | 564 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig index 15e6b0bbbde8..3de5c643848c 100644 --- a/arch/arm/configs/ateb9200_defconfig +++ b/arch/arm/configs/ateb9200_defconfig | |||
| @@ -217,7 +217,7 @@ CONFIG_BINFMT_ELF=y | |||
| 217 | # Power management options | 217 | # Power management options |
| 218 | # | 218 | # |
| 219 | CONFIG_PM=y | 219 | CONFIG_PM=y |
| 220 | CONFIG_PM_LEGACY=y | 220 | # CONFIG_PM_LEGACY is not set |
| 221 | # CONFIG_PM_DEBUG is not set | 221 | # CONFIG_PM_DEBUG is not set |
| 222 | # CONFIG_APM is not set | 222 | # CONFIG_APM is not set |
| 223 | 223 | ||
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig index 074c47a4fb2e..a3758913c0bb 100644 --- a/arch/arm/configs/collie_defconfig +++ b/arch/arm/configs/collie_defconfig | |||
| @@ -219,7 +219,7 @@ CONFIG_BINFMT_ELF=y | |||
| 219 | # Power management options | 219 | # Power management options |
| 220 | # | 220 | # |
| 221 | CONFIG_PM=y | 221 | CONFIG_PM=y |
| 222 | CONFIG_PM_LEGACY=y | 222 | # CONFIG_PM_LEGACY is not set |
| 223 | # CONFIG_PM_DEBUG is not set | 223 | # CONFIG_PM_DEBUG is not set |
| 224 | CONFIG_APM=y | 224 | CONFIG_APM=y |
| 225 | 225 | ||
diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig index a2d6fd398f16..20e68250d835 100644 --- a/arch/arm/configs/csb337_defconfig +++ b/arch/arm/configs/csb337_defconfig | |||
| @@ -615,7 +615,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 615 | # Watchdog Device Drivers | 615 | # Watchdog Device Drivers |
| 616 | # | 616 | # |
| 617 | # CONFIG_SOFT_WATCHDOG is not set | 617 | # CONFIG_SOFT_WATCHDOG is not set |
| 618 | CONFIG_AT91_WATCHDOG=y | 618 | CONFIG_AT91RM9200_WATCHDOG=y |
| 619 | 619 | ||
| 620 | # | 620 | # |
| 621 | # USB-based Watchdog Cards | 621 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig index 2a1ac6c60abc..df8595ac031f 100644 --- a/arch/arm/configs/csb637_defconfig +++ b/arch/arm/configs/csb637_defconfig | |||
| @@ -615,7 +615,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 615 | # Watchdog Device Drivers | 615 | # Watchdog Device Drivers |
| 616 | # | 616 | # |
| 617 | # CONFIG_SOFT_WATCHDOG is not set | 617 | # CONFIG_SOFT_WATCHDOG is not set |
| 618 | CONFIG_AT91_WATCHDOG=y | 618 | CONFIG_AT91RM9200_WATCHDOG=y |
| 619 | 619 | ||
| 620 | # | 620 | # |
| 621 | # USB-based Watchdog Cards | 621 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig index 4975b914f923..fac7c3b240c0 100644 --- a/arch/arm/configs/ixp4xx_defconfig +++ b/arch/arm/configs/ixp4xx_defconfig | |||
| @@ -206,10 +206,8 @@ CONFIG_BINFMT_ELF=y | |||
| 206 | # | 206 | # |
| 207 | # Power management options | 207 | # Power management options |
| 208 | # | 208 | # |
| 209 | CONFIG_PM=y | 209 | # CONFIG_PM is not set |
| 210 | CONFIG_PM_LEGACY=y | 210 | # CONFIG_APM is not set |
| 211 | # CONFIG_PM_DEBUG is not set | ||
| 212 | CONFIG_APM=y | ||
| 213 | 211 | ||
| 214 | # | 212 | # |
| 215 | # Networking | 213 | # Networking |
diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig index 54fcd75779da..a4cdafc1548a 100644 --- a/arch/arm/configs/kafa_defconfig +++ b/arch/arm/configs/kafa_defconfig | |||
| @@ -560,7 +560,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 560 | # Watchdog Device Drivers | 560 | # Watchdog Device Drivers |
| 561 | # | 561 | # |
| 562 | # CONFIG_SOFT_WATCHDOG is not set | 562 | # CONFIG_SOFT_WATCHDOG is not set |
| 563 | CONFIG_AT91_WATCHDOG=y | 563 | CONFIG_AT91RM9200_WATCHDOG=y |
| 564 | # CONFIG_NVRAM is not set | 564 | # CONFIG_NVRAM is not set |
| 565 | # CONFIG_DTLK is not set | 565 | # CONFIG_DTLK is not set |
| 566 | # CONFIG_R3964 is not set | 566 | # CONFIG_R3964 is not set |
diff --git a/arch/arm/configs/omap_h2_1610_defconfig b/arch/arm/configs/omap_h2_1610_defconfig index 05adb0b34e72..b0efd4ca9935 100644 --- a/arch/arm/configs/omap_h2_1610_defconfig +++ b/arch/arm/configs/omap_h2_1610_defconfig | |||
| @@ -257,7 +257,7 @@ CONFIG_BINFMT_AOUT=y | |||
| 257 | # Power management options | 257 | # Power management options |
| 258 | # | 258 | # |
| 259 | CONFIG_PM=y | 259 | CONFIG_PM=y |
| 260 | CONFIG_PM_LEGACY=y | 260 | # CONFIG_PM_LEGACY is not set |
| 261 | # CONFIG_PM_DEBUG is not set | 261 | # CONFIG_PM_DEBUG is not set |
| 262 | # CONFIG_APM is not set | 262 | # CONFIG_APM is not set |
| 263 | 263 | ||
diff --git a/arch/arm/configs/onearm_defconfig b/arch/arm/configs/onearm_defconfig index cb1d94f9049e..9b9f2155af35 100644 --- a/arch/arm/configs/onearm_defconfig +++ b/arch/arm/configs/onearm_defconfig | |||
| @@ -607,7 +607,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 607 | # Watchdog Device Drivers | 607 | # Watchdog Device Drivers |
| 608 | # | 608 | # |
| 609 | # CONFIG_SOFT_WATCHDOG is not set | 609 | # CONFIG_SOFT_WATCHDOG is not set |
| 610 | CONFIG_AT91_WATCHDOG=y | 610 | CONFIG_AT91RM9200_WATCHDOG=y |
| 611 | 611 | ||
| 612 | # | 612 | # |
| 613 | # USB-based Watchdog Cards | 613 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/bast_defconfig b/arch/arm/configs/realview-smp_defconfig index 4a8564f386af..ffd905ff19f1 100644 --- a/arch/arm/configs/bast_defconfig +++ b/arch/arm/configs/realview-smp_defconfig | |||
| @@ -1,136 +1,168 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.12-rc1-bk2 | 3 | # Linux kernel version: 2.6.19-rc3 |
| 4 | # Sun Mar 27 02:24:16 2005 | 4 | # Wed Oct 25 14:12:00 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
| 7 | # CONFIG_GENERIC_TIME is not set | ||
| 7 | CONFIG_MMU=y | 8 | CONFIG_MMU=y |
| 8 | CONFIG_UID16=y | 9 | CONFIG_GENERIC_HARDIRQS=y |
| 10 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 11 | CONFIG_HARDIRQS_SW_RESEND=y | ||
| 12 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 13 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 14 | CONFIG_GENERIC_HWEIGHT=y | ||
| 10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 15 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 11 | CONFIG_GENERIC_IOMAP=y | 16 | CONFIG_VECTORS_BASE=0xffff0000 |
| 17 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 12 | 18 | ||
| 13 | # | 19 | # |
| 14 | # Code maturity level options | 20 | # Code maturity level options |
| 15 | # | 21 | # |
| 16 | CONFIG_EXPERIMENTAL=y | 22 | CONFIG_EXPERIMENTAL=y |
| 17 | CONFIG_CLEAN_COMPILE=y | 23 | CONFIG_LOCK_KERNEL=y |
| 18 | CONFIG_BROKEN_ON_SMP=y | 24 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
| 19 | 25 | ||
| 20 | # | 26 | # |
| 21 | # General setup | 27 | # General setup |
| 22 | # | 28 | # |
| 23 | CONFIG_LOCALVERSION="" | 29 | CONFIG_LOCALVERSION="" |
| 24 | CONFIG_SWAP=y | 30 | CONFIG_LOCALVERSION_AUTO=y |
| 31 | # CONFIG_SWAP is not set | ||
| 25 | CONFIG_SYSVIPC=y | 32 | CONFIG_SYSVIPC=y |
| 33 | # CONFIG_IPC_NS is not set | ||
| 26 | # CONFIG_POSIX_MQUEUE is not set | 34 | # CONFIG_POSIX_MQUEUE is not set |
| 27 | # CONFIG_BSD_PROCESS_ACCT is not set | 35 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 28 | CONFIG_SYSCTL=y | 36 | # CONFIG_TASKSTATS is not set |
| 37 | # CONFIG_UTS_NS is not set | ||
| 29 | # CONFIG_AUDIT is not set | 38 | # CONFIG_AUDIT is not set |
| 30 | # CONFIG_HOTPLUG is not set | ||
| 31 | CONFIG_KOBJECT_UEVENT=y | ||
| 32 | # CONFIG_IKCONFIG is not set | 39 | # CONFIG_IKCONFIG is not set |
| 40 | # CONFIG_CPUSETS is not set | ||
| 41 | # CONFIG_RELAY is not set | ||
| 42 | CONFIG_INITRAMFS_SOURCE="" | ||
| 43 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 44 | CONFIG_SYSCTL=y | ||
| 33 | # CONFIG_EMBEDDED is not set | 45 | # CONFIG_EMBEDDED is not set |
| 46 | CONFIG_UID16=y | ||
| 47 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 34 | CONFIG_KALLSYMS=y | 48 | CONFIG_KALLSYMS=y |
| 35 | # CONFIG_KALLSYMS_ALL is not set | 49 | CONFIG_KALLSYMS_ALL=y |
| 36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 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 | ||
| 37 | CONFIG_BASE_FULL=y | 55 | CONFIG_BASE_FULL=y |
| 38 | CONFIG_FUTEX=y | 56 | CONFIG_FUTEX=y |
| 39 | CONFIG_EPOLL=y | 57 | CONFIG_EPOLL=y |
| 40 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 41 | CONFIG_SHMEM=y | 58 | CONFIG_SHMEM=y |
| 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 59 | CONFIG_SLAB=y |
| 43 | CONFIG_CC_ALIGN_LABELS=0 | 60 | CONFIG_VM_EVENT_COUNTERS=y |
| 44 | CONFIG_CC_ALIGN_LOOPS=0 | 61 | CONFIG_RT_MUTEXES=y |
| 45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
| 46 | # CONFIG_TINY_SHMEM is not set | 62 | # CONFIG_TINY_SHMEM is not set |
| 47 | CONFIG_BASE_SMALL=0 | 63 | CONFIG_BASE_SMALL=0 |
| 64 | # CONFIG_SLOB is not set | ||
| 48 | 65 | ||
| 49 | # | 66 | # |
| 50 | # Loadable module support | 67 | # Loadable module support |
| 51 | # | 68 | # |
| 52 | CONFIG_MODULES=y | 69 | CONFIG_MODULES=y |
| 53 | # CONFIG_MODULE_UNLOAD is not set | 70 | CONFIG_MODULE_UNLOAD=y |
| 54 | CONFIG_OBSOLETE_MODPARM=y | 71 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 55 | # CONFIG_MODVERSIONS is not set | 72 | # CONFIG_MODVERSIONS is not set |
| 56 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 73 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| 57 | CONFIG_KMOD=y | 74 | # CONFIG_KMOD is not set |
| 75 | CONFIG_STOP_MACHINE=y | ||
| 76 | |||
| 77 | # | ||
| 78 | # Block layer | ||
| 79 | # | ||
| 80 | CONFIG_BLOCK=y | ||
| 81 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 82 | |||
| 83 | # | ||
| 84 | # IO Schedulers | ||
| 85 | # | ||
| 86 | CONFIG_IOSCHED_NOOP=y | ||
| 87 | # CONFIG_IOSCHED_AS is not set | ||
| 88 | CONFIG_IOSCHED_DEADLINE=y | ||
| 89 | # CONFIG_IOSCHED_CFQ is not set | ||
| 90 | # CONFIG_DEFAULT_AS is not set | ||
| 91 | CONFIG_DEFAULT_DEADLINE=y | ||
| 92 | # CONFIG_DEFAULT_CFQ is not set | ||
| 93 | # CONFIG_DEFAULT_NOOP is not set | ||
| 94 | CONFIG_DEFAULT_IOSCHED="deadline" | ||
| 58 | 95 | ||
| 59 | # | 96 | # |
| 60 | # System Type | 97 | # System Type |
| 61 | # | 98 | # |
| 99 | # CONFIG_ARCH_AAEC2000 is not set | ||
| 100 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 101 | CONFIG_ARCH_REALVIEW=y | ||
| 102 | # CONFIG_ARCH_VERSATILE is not set | ||
| 103 | # CONFIG_ARCH_AT91 is not set | ||
| 62 | # CONFIG_ARCH_CLPS7500 is not set | 104 | # CONFIG_ARCH_CLPS7500 is not set |
| 63 | # CONFIG_ARCH_CLPS711X is not set | 105 | # CONFIG_ARCH_CLPS711X is not set |
| 64 | # CONFIG_ARCH_CO285 is not set | 106 | # CONFIG_ARCH_CO285 is not set |
| 65 | # CONFIG_ARCH_EBSA110 is not set | 107 | # CONFIG_ARCH_EBSA110 is not set |
| 108 | # CONFIG_ARCH_EP93XX is not set | ||
| 66 | # CONFIG_ARCH_FOOTBRIDGE is not set | 109 | # CONFIG_ARCH_FOOTBRIDGE is not set |
| 67 | # CONFIG_ARCH_INTEGRATOR is not set | 110 | # CONFIG_ARCH_NETX is not set |
| 68 | # CONFIG_ARCH_IOP3XX is not set | 111 | # CONFIG_ARCH_H720X is not set |
| 112 | # CONFIG_ARCH_IMX is not set | ||
| 113 | # CONFIG_ARCH_IOP32X is not set | ||
| 114 | # CONFIG_ARCH_IOP33X is not set | ||
| 69 | # CONFIG_ARCH_IXP4XX is not set | 115 | # CONFIG_ARCH_IXP4XX is not set |
| 70 | # CONFIG_ARCH_IXP2000 is not set | 116 | # CONFIG_ARCH_IXP2000 is not set |
| 117 | # CONFIG_ARCH_IXP23XX is not set | ||
| 71 | # CONFIG_ARCH_L7200 is not set | 118 | # CONFIG_ARCH_L7200 is not set |
| 119 | # CONFIG_ARCH_PNX4008 is not set | ||
| 72 | # CONFIG_ARCH_PXA is not set | 120 | # CONFIG_ARCH_PXA is not set |
| 73 | # CONFIG_ARCH_RPC is not set | 121 | # CONFIG_ARCH_RPC is not set |
| 74 | # CONFIG_ARCH_SA1100 is not set | 122 | # CONFIG_ARCH_SA1100 is not set |
| 75 | CONFIG_ARCH_S3C2410=y | 123 | # CONFIG_ARCH_S3C2410 is not set |
| 76 | # CONFIG_ARCH_SHARK is not set | 124 | # CONFIG_ARCH_SHARK is not set |
| 77 | # CONFIG_ARCH_LH7A40X is not set | 125 | # CONFIG_ARCH_LH7A40X is not set |
| 78 | # CONFIG_ARCH_OMAP is not set | 126 | # CONFIG_ARCH_OMAP is not set |
| 79 | # CONFIG_ARCH_VERSATILE is not set | ||
| 80 | # CONFIG_ARCH_IMX is not set | ||
| 81 | # CONFIG_ARCH_H720X is not set | ||
| 82 | |||
| 83 | # | ||
| 84 | # S3C24XX Implementations | ||
| 85 | # | ||
| 86 | CONFIG_ARCH_BAST=y | ||
| 87 | # CONFIG_ARCH_H1940 is not set | ||
| 88 | # CONFIG_MACH_N30 is not set | ||
| 89 | # CONFIG_ARCH_SMDK2410 is not set | ||
| 90 | # CONFIG_ARCH_S3C2440 is not set | ||
| 91 | CONFIG_MACH_VR1000=y | ||
| 92 | # CONFIG_MACH_RX3715 is not set | ||
| 93 | # CONFIG_MACH_OTOM is not set | ||
| 94 | # CONFIG_MACH_NEXCODER_2440 is not set | ||
| 95 | CONFIG_CPU_S3C2410=y | ||
| 96 | |||
| 97 | # | ||
| 98 | # S3C2410 Boot | ||
| 99 | # | ||
| 100 | # CONFIG_S3C2410_BOOT_WATCHDOG is not set | ||
| 101 | 127 | ||
| 102 | # | 128 | # |
| 103 | # S3C2410 Setup | 129 | # RealView platform type |
| 104 | # | 130 | # |
| 105 | CONFIG_S3C2410_DMA=y | 131 | CONFIG_MACH_REALVIEW_EB=y |
| 106 | # CONFIG_S3C2410_DMA_DEBUG is not set | 132 | CONFIG_REALVIEW_MPCORE=y |
| 107 | # CONFIG_S3C2410_PM_DEBUG is not set | ||
| 108 | # CONFIG_S3C2410_PM_CHECK is not set | ||
| 109 | CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | ||
| 110 | 133 | ||
| 111 | # | 134 | # |
| 112 | # Processor Type | 135 | # Processor Type |
| 113 | # | 136 | # |
| 114 | CONFIG_CPU_32=y | 137 | CONFIG_CPU_32=y |
| 115 | CONFIG_CPU_ARM920T=y | 138 | # CONFIG_CPU_ARM926T is not set |
| 116 | CONFIG_CPU_32v4=y | 139 | CONFIG_CPU_V6=y |
| 117 | CONFIG_CPU_ABRT_EV4T=y | 140 | CONFIG_CPU_32v6K=y |
| 118 | CONFIG_CPU_CACHE_V4WT=y | 141 | CONFIG_CPU_32v6=y |
| 119 | CONFIG_CPU_CACHE_VIVT=y | 142 | CONFIG_CPU_ABRT_EV6=y |
| 120 | CONFIG_CPU_COPY_V4WB=y | 143 | CONFIG_CPU_CACHE_V6=y |
| 121 | CONFIG_CPU_TLB_V4WBI=y | 144 | CONFIG_CPU_CACHE_VIPT=y |
| 145 | CONFIG_CPU_COPY_V6=y | ||
| 146 | CONFIG_CPU_TLB_V6=y | ||
| 147 | CONFIG_CPU_CP15=y | ||
| 148 | CONFIG_CPU_CP15_MMU=y | ||
| 122 | 149 | ||
| 123 | # | 150 | # |
| 124 | # Processor Features | 151 | # Processor Features |
| 125 | # | 152 | # |
| 126 | # CONFIG_ARM_THUMB is not set | 153 | CONFIG_ARM_THUMB=y |
| 127 | # CONFIG_CPU_ICACHE_DISABLE is not set | 154 | # CONFIG_CPU_ICACHE_DISABLE is not set |
| 128 | # CONFIG_CPU_DCACHE_DISABLE is not set | 155 | # CONFIG_CPU_DCACHE_DISABLE is not set |
| 129 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | 156 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set |
| 157 | # CONFIG_CPU_BPREDICT_DISABLE is not set | ||
| 158 | CONFIG_HAS_TLS_REG=y | ||
| 159 | CONFIG_ARM_GIC=y | ||
| 160 | CONFIG_ICST307=y | ||
| 130 | 161 | ||
| 131 | # | 162 | # |
| 132 | # Bus support | 163 | # Bus support |
| 133 | # | 164 | # |
| 165 | CONFIG_ARM_AMBA=y | ||
| 134 | 166 | ||
| 135 | # | 167 | # |
| 136 | # PCCARD (PCMCIA/CardBus) support | 168 | # PCCARD (PCMCIA/CardBus) support |
| @@ -140,7 +172,24 @@ CONFIG_CPU_TLB_V4WBI=y | |||
| 140 | # | 172 | # |
| 141 | # Kernel Features | 173 | # Kernel Features |
| 142 | # | 174 | # |
| 175 | CONFIG_SMP=y | ||
| 176 | CONFIG_NR_CPUS=4 | ||
| 177 | CONFIG_HOTPLUG_CPU=y | ||
| 178 | CONFIG_LOCAL_TIMERS=y | ||
| 143 | # CONFIG_PREEMPT is not set | 179 | # CONFIG_PREEMPT is not set |
| 180 | # CONFIG_NO_IDLE_HZ is not set | ||
| 181 | CONFIG_HZ=100 | ||
| 182 | # CONFIG_AEABI is not set | ||
| 183 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
| 184 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 185 | CONFIG_FLATMEM_MANUAL=y | ||
| 186 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 187 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 188 | CONFIG_FLATMEM=y | ||
| 189 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 190 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 191 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 192 | # CONFIG_RESOURCES_64BIT is not set | ||
| 144 | CONFIG_ALIGNMENT_TRAP=y | 193 | CONFIG_ALIGNMENT_TRAP=y |
| 145 | 194 | ||
| 146 | # | 195 | # |
| @@ -148,7 +197,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
| 148 | # | 197 | # |
| 149 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 198 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 150 | CONFIG_ZBOOT_ROM_BSS=0x0 | 199 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| 151 | CONFIG_CMDLINE="root=/dev/hda1 ro init=/bin/bash console=ttySAC0" | 200 | CONFIG_CMDLINE="root=/dev/nfs nfsroot=10.1.69.3:/work/nfsroot ip=dhcp console=ttyAMA0 mem=128M" |
| 152 | # CONFIG_XIP_KERNEL is not set | 201 | # CONFIG_XIP_KERNEL is not set |
| 153 | 202 | ||
| 154 | # | 203 | # |
| @@ -161,20 +210,105 @@ CONFIG_CMDLINE="root=/dev/hda1 ro init=/bin/bash console=ttySAC0" | |||
| 161 | CONFIG_FPE_NWFPE=y | 210 | CONFIG_FPE_NWFPE=y |
| 162 | # CONFIG_FPE_NWFPE_XP is not set | 211 | # CONFIG_FPE_NWFPE_XP is not set |
| 163 | # CONFIG_FPE_FASTFPE is not set | 212 | # CONFIG_FPE_FASTFPE is not set |
| 213 | CONFIG_VFP=y | ||
| 164 | 214 | ||
| 165 | # | 215 | # |
| 166 | # Userspace binary formats | 216 | # Userspace binary formats |
| 167 | # | 217 | # |
| 168 | CONFIG_BINFMT_ELF=y | 218 | CONFIG_BINFMT_ELF=y |
| 169 | CONFIG_BINFMT_AOUT=y | 219 | # CONFIG_BINFMT_AOUT is not set |
| 170 | # CONFIG_BINFMT_MISC is not set | 220 | # CONFIG_BINFMT_MISC is not set |
| 171 | # CONFIG_ARTHUR is not set | 221 | # CONFIG_ARTHUR is not set |
| 172 | 222 | ||
| 173 | # | 223 | # |
| 174 | # Power management options | 224 | # Power management options |
| 175 | # | 225 | # |
| 176 | CONFIG_PM=y | 226 | # CONFIG_PM is not set |
| 177 | CONFIG_APM=y | 227 | # CONFIG_APM is not set |
| 228 | |||
| 229 | # | ||
| 230 | # Networking | ||
| 231 | # | ||
| 232 | CONFIG_NET=y | ||
| 233 | |||
| 234 | # | ||
| 235 | # Networking options | ||
| 236 | # | ||
| 237 | # CONFIG_NETDEBUG is not set | ||
| 238 | CONFIG_PACKET=y | ||
| 239 | # CONFIG_PACKET_MMAP is not set | ||
| 240 | CONFIG_UNIX=y | ||
| 241 | # CONFIG_NET_KEY is not set | ||
| 242 | CONFIG_INET=y | ||
| 243 | # CONFIG_IP_MULTICAST is not set | ||
| 244 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 245 | CONFIG_IP_FIB_HASH=y | ||
| 246 | CONFIG_IP_PNP=y | ||
| 247 | CONFIG_IP_PNP_DHCP=y | ||
| 248 | CONFIG_IP_PNP_BOOTP=y | ||
| 249 | # CONFIG_IP_PNP_RARP is not set | ||
| 250 | # CONFIG_NET_IPIP is not set | ||
| 251 | # CONFIG_NET_IPGRE is not set | ||
| 252 | # CONFIG_ARPD is not set | ||
| 253 | # CONFIG_SYN_COOKIES is not set | ||
| 254 | # CONFIG_INET_AH is not set | ||
| 255 | # CONFIG_INET_ESP is not set | ||
| 256 | # CONFIG_INET_IPCOMP is not set | ||
| 257 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 258 | # CONFIG_INET_TUNNEL is not set | ||
| 259 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 260 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 261 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 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_IPV6 is not set | ||
| 268 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 269 | # CONFIG_INET6_TUNNEL is not set | ||
| 270 | # CONFIG_NETWORK_SECMARK is not set | ||
| 271 | # CONFIG_NETFILTER is not set | ||
| 272 | |||
| 273 | # | ||
| 274 | # DCCP Configuration (EXPERIMENTAL) | ||
| 275 | # | ||
| 276 | # CONFIG_IP_DCCP is not set | ||
| 277 | |||
| 278 | # | ||
| 279 | # SCTP Configuration (EXPERIMENTAL) | ||
| 280 | # | ||
| 281 | # CONFIG_IP_SCTP is not set | ||
| 282 | |||
| 283 | # | ||
| 284 | # TIPC Configuration (EXPERIMENTAL) | ||
| 285 | # | ||
| 286 | # CONFIG_TIPC is not set | ||
| 287 | # CONFIG_ATM is not set | ||
| 288 | # CONFIG_BRIDGE is not set | ||
| 289 | # CONFIG_VLAN_8021Q is not set | ||
| 290 | # CONFIG_DECNET is not set | ||
| 291 | # CONFIG_LLC2 is not set | ||
| 292 | # CONFIG_IPX is not set | ||
| 293 | # CONFIG_ATALK is not set | ||
| 294 | # CONFIG_X25 is not set | ||
| 295 | # CONFIG_LAPB is not set | ||
| 296 | # CONFIG_ECONET is not set | ||
| 297 | # CONFIG_WAN_ROUTER is not set | ||
| 298 | |||
| 299 | # | ||
| 300 | # QoS and/or fair queueing | ||
| 301 | # | ||
| 302 | # CONFIG_NET_SCHED is not set | ||
| 303 | |||
| 304 | # | ||
| 305 | # Network testing | ||
| 306 | # | ||
| 307 | # CONFIG_NET_PKTGEN is not set | ||
| 308 | # CONFIG_HAMRADIO is not set | ||
| 309 | # CONFIG_IRDA is not set | ||
| 310 | # CONFIG_BT is not set | ||
| 311 | # CONFIG_IEEE80211 is not set | ||
| 178 | 312 | ||
| 179 | # | 313 | # |
| 180 | # Device Drivers | 314 | # Device Drivers |
| @@ -187,6 +321,12 @@ CONFIG_STANDALONE=y | |||
| 187 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 321 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 188 | # CONFIG_FW_LOADER is not set | 322 | # CONFIG_FW_LOADER is not set |
| 189 | # CONFIG_DEBUG_DRIVER is not set | 323 | # CONFIG_DEBUG_DRIVER is not set |
| 324 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 325 | |||
| 326 | # | ||
| 327 | # Connector - unified userspace <-> kernelspace linker | ||
| 328 | # | ||
| 329 | # CONFIG_CONNECTOR is not set | ||
| 190 | 330 | ||
| 191 | # | 331 | # |
| 192 | # Memory Technology Devices (MTD) | 332 | # Memory Technology Devices (MTD) |
| @@ -195,10 +335,7 @@ CONFIG_MTD=y | |||
| 195 | # CONFIG_MTD_DEBUG is not set | 335 | # CONFIG_MTD_DEBUG is not set |
| 196 | # CONFIG_MTD_CONCAT is not set | 336 | # CONFIG_MTD_CONCAT is not set |
| 197 | CONFIG_MTD_PARTITIONS=y | 337 | CONFIG_MTD_PARTITIONS=y |
| 198 | CONFIG_MTD_REDBOOT_PARTS=y | 338 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 199 | CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||
| 200 | CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | ||
| 201 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set | ||
| 202 | CONFIG_MTD_CMDLINE_PARTS=y | 339 | CONFIG_MTD_CMDLINE_PARTS=y |
| 203 | # CONFIG_MTD_AFS_PARTS is not set | 340 | # CONFIG_MTD_AFS_PARTS is not set |
| 204 | 341 | ||
| @@ -210,44 +347,42 @@ CONFIG_MTD_BLOCK=y | |||
| 210 | # CONFIG_FTL is not set | 347 | # CONFIG_FTL is not set |
| 211 | # CONFIG_NFTL is not set | 348 | # CONFIG_NFTL is not set |
| 212 | # CONFIG_INFTL is not set | 349 | # CONFIG_INFTL is not set |
| 350 | # CONFIG_RFD_FTL is not set | ||
| 351 | # CONFIG_SSFDC is not set | ||
| 213 | 352 | ||
| 214 | # | 353 | # |
| 215 | # RAM/ROM/Flash chip drivers | 354 | # RAM/ROM/Flash chip drivers |
| 216 | # | 355 | # |
| 217 | CONFIG_MTD_CFI=y | 356 | CONFIG_MTD_CFI=y |
| 218 | CONFIG_MTD_JEDECPROBE=y | 357 | # CONFIG_MTD_JEDECPROBE is not set |
| 219 | CONFIG_MTD_GEN_PROBE=y | 358 | CONFIG_MTD_GEN_PROBE=y |
| 220 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | 359 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set |
| 221 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | 360 | CONFIG_MTD_MAP_BANK_WIDTH_1=y |
| 222 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | 361 | CONFIG_MTD_MAP_BANK_WIDTH_2=y |
| 223 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | 362 | CONFIG_MTD_MAP_BANK_WIDTH_4=y |
| 224 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | 363 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set |
| 225 | CONFIG_MTD_MAP_BANK_WIDTH_16=y | 364 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set |
| 226 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | 365 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set |
| 227 | CONFIG_MTD_CFI_I1=y | 366 | CONFIG_MTD_CFI_I1=y |
| 228 | CONFIG_MTD_CFI_I2=y | 367 | CONFIG_MTD_CFI_I2=y |
| 229 | # CONFIG_MTD_CFI_I4 is not set | 368 | # CONFIG_MTD_CFI_I4 is not set |
| 230 | # CONFIG_MTD_CFI_I8 is not set | 369 | # CONFIG_MTD_CFI_I8 is not set |
| 231 | CONFIG_MTD_CFI_INTELEXT=y | 370 | CONFIG_MTD_CFI_INTELEXT=y |
| 232 | # CONFIG_MTD_CFI_AMDSTD is not set | 371 | CONFIG_MTD_CFI_AMDSTD=y |
| 233 | # CONFIG_MTD_CFI_STAA is not set | 372 | # CONFIG_MTD_CFI_STAA is not set |
| 234 | CONFIG_MTD_CFI_UTIL=y | 373 | CONFIG_MTD_CFI_UTIL=y |
| 235 | # CONFIG_MTD_RAM is not set | 374 | # CONFIG_MTD_RAM is not set |
| 236 | # CONFIG_MTD_ROM is not set | 375 | # CONFIG_MTD_ROM is not set |
| 237 | # CONFIG_MTD_ABSENT is not set | 376 | # CONFIG_MTD_ABSENT is not set |
| 238 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | 377 | # CONFIG_MTD_OBSOLETE_CHIPS is not set |
| 239 | # CONFIG_MTD_XIP is not set | ||
| 240 | 378 | ||
| 241 | # | 379 | # |
| 242 | # Mapping drivers for chip access | 380 | # Mapping drivers for chip access |
| 243 | # | 381 | # |
| 244 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | 382 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set |
| 245 | # CONFIG_MTD_PHYSMAP is not set | 383 | # CONFIG_MTD_PHYSMAP is not set |
| 246 | # CONFIG_MTD_ARM_INTEGRATOR is not set | 384 | CONFIG_MTD_ARM_INTEGRATOR=y |
| 247 | # CONFIG_MTD_EDB7312 is not set | 385 | # CONFIG_MTD_PLATRAM is not set |
| 248 | # CONFIG_MTD_IMPA7 is not set | ||
| 249 | CONFIG_MTD_BAST=y | ||
| 250 | CONFIG_MTD_BAST_MAXSIZE=4 | ||
| 251 | 386 | ||
| 252 | # | 387 | # |
| 253 | # Self-contained MTD device drivers | 388 | # Self-contained MTD device drivers |
| @@ -255,7 +390,6 @@ CONFIG_MTD_BAST_MAXSIZE=4 | |||
| 255 | # CONFIG_MTD_SLRAM is not set | 390 | # CONFIG_MTD_SLRAM is not set |
| 256 | # CONFIG_MTD_PHRAM is not set | 391 | # CONFIG_MTD_PHRAM is not set |
| 257 | # CONFIG_MTD_MTDRAM is not set | 392 | # CONFIG_MTD_MTDRAM is not set |
| 258 | # CONFIG_MTD_BLKMTD is not set | ||
| 259 | # CONFIG_MTD_BLOCK2MTD is not set | 393 | # CONFIG_MTD_BLOCK2MTD is not set |
| 260 | 394 | ||
| 261 | # | 395 | # |
| @@ -268,23 +402,17 @@ CONFIG_MTD_BAST_MAXSIZE=4 | |||
| 268 | # | 402 | # |
| 269 | # NAND Flash Device Drivers | 403 | # NAND Flash Device Drivers |
| 270 | # | 404 | # |
| 271 | CONFIG_MTD_NAND=y | 405 | # CONFIG_MTD_NAND is not set |
| 272 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | 406 | |
| 273 | CONFIG_MTD_NAND_IDS=y | 407 | # |
| 274 | CONFIG_MTD_NAND_S3C2410=y | 408 | # OneNAND Flash Device Drivers |
| 275 | # CONFIG_MTD_NAND_S3C2410_DEBUG is not set | 409 | # |
| 276 | # CONFIG_MTD_NAND_S3C2410_HWECC is not set | 410 | # CONFIG_MTD_ONENAND is not set |
| 277 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
| 278 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 279 | 411 | ||
| 280 | # | 412 | # |
| 281 | # Parallel port support | 413 | # Parallel port support |
| 282 | # | 414 | # |
| 283 | CONFIG_PARPORT=y | 415 | # CONFIG_PARPORT is not set |
| 284 | # CONFIG_PARPORT_PC is not set | ||
| 285 | # CONFIG_PARPORT_ARC is not set | ||
| 286 | # CONFIG_PARPORT_GSC is not set | ||
| 287 | CONFIG_PARPORT_1284=y | ||
| 288 | 416 | ||
| 289 | # | 417 | # |
| 290 | # Plug and Play support | 418 | # Plug and Play support |
| @@ -293,59 +421,20 @@ CONFIG_PARPORT_1284=y | |||
| 293 | # | 421 | # |
| 294 | # Block devices | 422 | # Block devices |
| 295 | # | 423 | # |
| 296 | # CONFIG_BLK_DEV_FD is not set | ||
| 297 | # CONFIG_PARIDE is not set | ||
| 298 | # CONFIG_BLK_DEV_COW_COMMON is not set | 424 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| 299 | CONFIG_BLK_DEV_LOOP=y | 425 | # CONFIG_BLK_DEV_LOOP is not set |
| 300 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 426 | # CONFIG_BLK_DEV_NBD is not set |
| 301 | CONFIG_BLK_DEV_NBD=m | 427 | # CONFIG_BLK_DEV_RAM is not set |
| 302 | CONFIG_BLK_DEV_RAM=y | ||
| 303 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 304 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 305 | CONFIG_BLK_DEV_INITRD=y | 428 | CONFIG_BLK_DEV_INITRD=y |
| 306 | CONFIG_INITRAMFS_SOURCE="" | ||
| 307 | # CONFIG_CDROM_PKTCDVD is not set | 429 | # CONFIG_CDROM_PKTCDVD is not set |
| 308 | |||
| 309 | # | ||
| 310 | # IO Schedulers | ||
| 311 | # | ||
| 312 | CONFIG_IOSCHED_NOOP=y | ||
| 313 | CONFIG_IOSCHED_AS=y | ||
| 314 | CONFIG_IOSCHED_DEADLINE=y | ||
| 315 | CONFIG_IOSCHED_CFQ=y | ||
| 316 | # CONFIG_ATA_OVER_ETH is not set | 430 | # CONFIG_ATA_OVER_ETH is not set |
| 317 | 431 | ||
| 318 | # | 432 | # |
| 319 | # ATA/ATAPI/MFM/RLL support | ||
| 320 | # | ||
| 321 | CONFIG_IDE=y | ||
| 322 | CONFIG_BLK_DEV_IDE=y | ||
| 323 | |||
| 324 | # | ||
| 325 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 326 | # | ||
| 327 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 328 | CONFIG_BLK_DEV_IDEDISK=y | ||
| 329 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 330 | CONFIG_BLK_DEV_IDECD=y | ||
| 331 | CONFIG_BLK_DEV_IDETAPE=m | ||
| 332 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
| 333 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 334 | |||
| 335 | # | ||
| 336 | # IDE chipset support/bugfixes | ||
| 337 | # | ||
| 338 | CONFIG_IDE_GENERIC=y | ||
| 339 | # CONFIG_IDE_ARM is not set | ||
| 340 | CONFIG_BLK_DEV_IDE_BAST=y | ||
| 341 | # CONFIG_BLK_DEV_IDEDMA is not set | ||
| 342 | # CONFIG_IDEDMA_AUTO is not set | ||
| 343 | # CONFIG_BLK_DEV_HD is not set | ||
| 344 | |||
| 345 | # | ||
| 346 | # SCSI device support | 433 | # SCSI device support |
| 347 | # | 434 | # |
| 435 | # CONFIG_RAID_ATTRS is not set | ||
| 348 | # CONFIG_SCSI is not set | 436 | # CONFIG_SCSI is not set |
| 437 | # CONFIG_SCSI_NETLINK is not set | ||
| 349 | 438 | ||
| 350 | # | 439 | # |
| 351 | # Multi-device support (RAID and LVM) | 440 | # Multi-device support (RAID and LVM) |
| @@ -355,6 +444,7 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
| 355 | # | 444 | # |
| 356 | # Fusion MPT device support | 445 | # Fusion MPT device support |
| 357 | # | 446 | # |
| 447 | # CONFIG_FUSION is not set | ||
| 358 | 448 | ||
| 359 | # | 449 | # |
| 360 | # IEEE 1394 (FireWire) support | 450 | # IEEE 1394 (FireWire) support |
| @@ -365,69 +455,8 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
| 365 | # | 455 | # |
| 366 | 456 | ||
| 367 | # | 457 | # |
| 368 | # Networking support | 458 | # Network device support |
| 369 | # | ||
| 370 | CONFIG_NET=y | ||
| 371 | |||
| 372 | # | ||
| 373 | # Networking options | ||
| 374 | # | ||
| 375 | # CONFIG_PACKET is not set | ||
| 376 | # CONFIG_NETLINK_DEV is not set | ||
| 377 | CONFIG_UNIX=y | ||
| 378 | # CONFIG_NET_KEY is not set | ||
| 379 | CONFIG_INET=y | ||
| 380 | # CONFIG_IP_MULTICAST is not set | ||
| 381 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 382 | CONFIG_IP_PNP=y | ||
| 383 | # CONFIG_IP_PNP_DHCP is not set | ||
| 384 | CONFIG_IP_PNP_BOOTP=y | ||
| 385 | # CONFIG_IP_PNP_RARP is not set | ||
| 386 | # CONFIG_NET_IPIP is not set | ||
| 387 | # CONFIG_NET_IPGRE is not set | ||
| 388 | # CONFIG_ARPD is not set | ||
| 389 | # CONFIG_SYN_COOKIES is not set | ||
| 390 | # CONFIG_INET_AH is not set | ||
| 391 | # CONFIG_INET_ESP is not set | ||
| 392 | # CONFIG_INET_IPCOMP is not set | ||
| 393 | # CONFIG_INET_TUNNEL is not set | ||
| 394 | CONFIG_IP_TCPDIAG=y | ||
| 395 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
| 396 | # CONFIG_IPV6 is not set | ||
| 397 | # CONFIG_NETFILTER is not set | ||
| 398 | |||
| 399 | # | ||
| 400 | # SCTP Configuration (EXPERIMENTAL) | ||
| 401 | # | ||
| 402 | # CONFIG_IP_SCTP is not set | ||
| 403 | # CONFIG_ATM is not set | ||
| 404 | # CONFIG_BRIDGE is not set | ||
| 405 | # CONFIG_VLAN_8021Q is not set | ||
| 406 | # CONFIG_DECNET is not set | ||
| 407 | # CONFIG_LLC2 is not set | ||
| 408 | # CONFIG_IPX is not set | ||
| 409 | # CONFIG_ATALK is not set | ||
| 410 | # CONFIG_X25 is not set | ||
| 411 | # CONFIG_LAPB is not set | ||
| 412 | # CONFIG_NET_DIVERT is not set | ||
| 413 | # CONFIG_ECONET is not set | ||
| 414 | # CONFIG_WAN_ROUTER is not set | ||
| 415 | |||
| 416 | # | ||
| 417 | # QoS and/or fair queueing | ||
| 418 | # | ||
| 419 | # CONFIG_NET_SCHED is not set | ||
| 420 | # CONFIG_NET_CLS_ROUTE is not set | ||
| 421 | |||
| 422 | # | ||
| 423 | # Network testing | ||
| 424 | # | 459 | # |
| 425 | # CONFIG_NET_PKTGEN is not set | ||
| 426 | # CONFIG_NETPOLL is not set | ||
| 427 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 428 | # CONFIG_HAMRADIO is not set | ||
| 429 | # CONFIG_IRDA is not set | ||
| 430 | # CONFIG_BT is not set | ||
| 431 | CONFIG_NETDEVICES=y | 460 | CONFIG_NETDEVICES=y |
| 432 | # CONFIG_DUMMY is not set | 461 | # CONFIG_DUMMY is not set |
| 433 | # CONFIG_BONDING is not set | 462 | # CONFIG_BONDING is not set |
| @@ -435,11 +464,17 @@ CONFIG_NETDEVICES=y | |||
| 435 | # CONFIG_TUN is not set | 464 | # CONFIG_TUN is not set |
| 436 | 465 | ||
| 437 | # | 466 | # |
| 467 | # PHY device support | ||
| 468 | # | ||
| 469 | # CONFIG_PHYLIB is not set | ||
| 470 | |||
| 471 | # | ||
| 438 | # Ethernet (10 or 100Mbit) | 472 | # Ethernet (10 or 100Mbit) |
| 439 | # | 473 | # |
| 440 | CONFIG_NET_ETHERNET=y | 474 | CONFIG_NET_ETHERNET=y |
| 441 | # CONFIG_MII is not set | 475 | CONFIG_MII=y |
| 442 | # CONFIG_SMC91X is not set | 476 | CONFIG_SMC91X=y |
| 477 | # CONFIG_DM9000 is not set | ||
| 443 | 478 | ||
| 444 | # | 479 | # |
| 445 | # Ethernet (1000 Mbit) | 480 | # Ethernet (1000 Mbit) |
| @@ -462,11 +497,12 @@ CONFIG_NET_ETHERNET=y | |||
| 462 | # Wan interfaces | 497 | # Wan interfaces |
| 463 | # | 498 | # |
| 464 | # CONFIG_WAN is not set | 499 | # CONFIG_WAN is not set |
| 465 | # CONFIG_PLIP is not set | ||
| 466 | # CONFIG_PPP is not set | 500 | # CONFIG_PPP is not set |
| 467 | # CONFIG_SLIP is not set | 501 | # CONFIG_SLIP is not set |
| 468 | # CONFIG_SHAPER is not set | 502 | # CONFIG_SHAPER is not set |
| 469 | # CONFIG_NETCONSOLE is not set | 503 | # CONFIG_NETCONSOLE is not set |
| 504 | # CONFIG_NETPOLL is not set | ||
| 505 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 470 | 506 | ||
| 471 | # | 507 | # |
| 472 | # ISDN subsystem | 508 | # ISDN subsystem |
| @@ -477,6 +513,7 @@ CONFIG_NET_ETHERNET=y | |||
| 477 | # Input device support | 513 | # Input device support |
| 478 | # | 514 | # |
| 479 | CONFIG_INPUT=y | 515 | CONFIG_INPUT=y |
| 516 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 480 | 517 | ||
| 481 | # | 518 | # |
| 482 | # Userland interfaces | 519 | # Userland interfaces |
| @@ -499,6 +536,7 @@ CONFIG_KEYBOARD_ATKBD=y | |||
| 499 | # CONFIG_KEYBOARD_LKKBD is not set | 536 | # CONFIG_KEYBOARD_LKKBD is not set |
| 500 | # CONFIG_KEYBOARD_XTKBD is not set | 537 | # CONFIG_KEYBOARD_XTKBD is not set |
| 501 | # CONFIG_KEYBOARD_NEWTON is not set | 538 | # CONFIG_KEYBOARD_NEWTON is not set |
| 539 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 502 | CONFIG_INPUT_MOUSE=y | 540 | CONFIG_INPUT_MOUSE=y |
| 503 | CONFIG_MOUSE_PS2=y | 541 | CONFIG_MOUSE_PS2=y |
| 504 | # CONFIG_MOUSE_SERIAL is not set | 542 | # CONFIG_MOUSE_SERIAL is not set |
| @@ -511,12 +549,11 @@ CONFIG_MOUSE_PS2=y | |||
| 511 | # Hardware I/O ports | 549 | # Hardware I/O ports |
| 512 | # | 550 | # |
| 513 | CONFIG_SERIO=y | 551 | CONFIG_SERIO=y |
| 514 | CONFIG_SERIO_SERPORT=y | 552 | # CONFIG_SERIO_SERPORT is not set |
| 515 | # CONFIG_SERIO_PARKBD is not set | 553 | CONFIG_SERIO_AMBAKMI=y |
| 516 | CONFIG_SERIO_LIBPS2=y | 554 | CONFIG_SERIO_LIBPS2=y |
| 517 | # CONFIG_SERIO_RAW is not set | 555 | # CONFIG_SERIO_RAW is not set |
| 518 | # CONFIG_GAMEPORT is not set | 556 | # CONFIG_GAMEPORT is not set |
| 519 | CONFIG_SOUND_GAMEPORT=y | ||
| 520 | 557 | ||
| 521 | # | 558 | # |
| 522 | # Character devices | 559 | # Character devices |
| @@ -524,49 +561,25 @@ CONFIG_SOUND_GAMEPORT=y | |||
| 524 | CONFIG_VT=y | 561 | CONFIG_VT=y |
| 525 | CONFIG_VT_CONSOLE=y | 562 | CONFIG_VT_CONSOLE=y |
| 526 | CONFIG_HW_CONSOLE=y | 563 | CONFIG_HW_CONSOLE=y |
| 527 | CONFIG_SERIAL_NONSTANDARD=y | 564 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 528 | # CONFIG_COMPUTONE is not set | 565 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 529 | # CONFIG_ROCKETPORT is not set | ||
| 530 | # CONFIG_CYCLADES is not set | ||
| 531 | # CONFIG_DIGIEPCA is not set | ||
| 532 | # CONFIG_MOXA_INTELLIO is not set | ||
| 533 | # CONFIG_MOXA_SMARTIO is not set | ||
| 534 | # CONFIG_ISI is not set | ||
| 535 | # CONFIG_SYNCLINKMP is not set | ||
| 536 | # CONFIG_N_HDLC is not set | ||
| 537 | # CONFIG_RISCOM8 is not set | ||
| 538 | # CONFIG_SPECIALIX is not set | ||
| 539 | # CONFIG_SX is not set | ||
| 540 | # CONFIG_RIO is not set | ||
| 541 | # CONFIG_STALDRV is not set | ||
| 542 | 566 | ||
| 543 | # | 567 | # |
| 544 | # Serial drivers | 568 | # Serial drivers |
| 545 | # | 569 | # |
| 546 | CONFIG_SERIAL_8250=y | 570 | # CONFIG_SERIAL_8250 is not set |
| 547 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 548 | CONFIG_SERIAL_8250_NR_UARTS=8 | ||
| 549 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 550 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
| 551 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 552 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 553 | # CONFIG_SERIAL_8250_MULTIPORT is not set | ||
| 554 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 555 | 571 | ||
| 556 | # | 572 | # |
| 557 | # Non-8250 serial port support | 573 | # Non-8250 serial port support |
| 558 | # | 574 | # |
| 559 | CONFIG_SERIAL_S3C2410=y | 575 | # CONFIG_SERIAL_AMBA_PL010 is not set |
| 560 | CONFIG_SERIAL_S3C2410_CONSOLE=y | 576 | CONFIG_SERIAL_AMBA_PL011=y |
| 577 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||
| 561 | CONFIG_SERIAL_CORE=y | 578 | CONFIG_SERIAL_CORE=y |
| 562 | CONFIG_SERIAL_CORE_CONSOLE=y | 579 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 563 | CONFIG_UNIX98_PTYS=y | 580 | CONFIG_UNIX98_PTYS=y |
| 564 | CONFIG_LEGACY_PTYS=y | 581 | CONFIG_LEGACY_PTYS=y |
| 565 | CONFIG_LEGACY_PTY_COUNT=256 | 582 | CONFIG_LEGACY_PTY_COUNT=16 |
| 566 | CONFIG_PRINTER=y | ||
| 567 | # CONFIG_LP_CONSOLE is not set | ||
| 568 | CONFIG_PPDEV=y | ||
| 569 | # CONFIG_TIPAR is not set | ||
| 570 | 583 | ||
| 571 | # | 584 | # |
| 572 | # IPMI | 585 | # IPMI |
| @@ -576,24 +589,15 @@ CONFIG_PPDEV=y | |||
| 576 | # | 589 | # |
| 577 | # Watchdog Cards | 590 | # Watchdog Cards |
| 578 | # | 591 | # |
| 579 | CONFIG_WATCHDOG=y | 592 | # CONFIG_WATCHDOG is not set |
| 580 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 593 | # CONFIG_HW_RANDOM is not set |
| 581 | |||
| 582 | # | ||
| 583 | # Watchdog Device Drivers | ||
| 584 | # | ||
| 585 | # CONFIG_SOFT_WATCHDOG is not set | ||
| 586 | CONFIG_S3C2410_WATCHDOG=y | ||
| 587 | # CONFIG_NVRAM is not set | 594 | # CONFIG_NVRAM is not set |
| 588 | # CONFIG_RTC is not set | ||
| 589 | CONFIG_S3C2410_RTC=y | ||
| 590 | # CONFIG_DTLK is not set | 595 | # CONFIG_DTLK is not set |
| 591 | # CONFIG_R3964 is not set | 596 | # CONFIG_R3964 is not set |
| 592 | 597 | ||
| 593 | # | 598 | # |
| 594 | # Ftape, the floppy tape device driver | 599 | # Ftape, the floppy tape device driver |
| 595 | # | 600 | # |
| 596 | # CONFIG_DRM is not set | ||
| 597 | # CONFIG_RAW_DRIVER is not set | 601 | # CONFIG_RAW_DRIVER is not set |
| 598 | 602 | ||
| 599 | # | 603 | # |
| @@ -604,73 +608,43 @@ CONFIG_S3C2410_RTC=y | |||
| 604 | # | 608 | # |
| 605 | # I2C support | 609 | # I2C support |
| 606 | # | 610 | # |
| 607 | CONFIG_I2C=y | 611 | # CONFIG_I2C is not set |
| 608 | CONFIG_I2C_CHARDEV=m | 612 | |
| 609 | 613 | # | |
| 610 | # | 614 | # SPI support |
| 611 | # I2C Algorithms | 615 | # |
| 612 | # | 616 | # CONFIG_SPI is not set |
| 613 | CONFIG_I2C_ALGOBIT=m | 617 | # CONFIG_SPI_MASTER is not set |
| 614 | # CONFIG_I2C_ALGOPCF is not set | 618 | |
| 615 | # CONFIG_I2C_ALGOPCA is not set | 619 | # |
| 616 | 620 | # Dallas's 1-wire bus | |
| 617 | # | 621 | # |
| 618 | # I2C Hardware Bus support | 622 | # CONFIG_W1 is not set |
| 619 | # | 623 | |
| 620 | # CONFIG_I2C_ISA is not set | 624 | # |
| 621 | # CONFIG_I2C_PARPORT is not set | 625 | # Hardware Monitoring support |
| 622 | # CONFIG_I2C_PARPORT_LIGHT is not set | 626 | # |
| 623 | CONFIG_I2C_S3C2410=y | 627 | # CONFIG_HWMON is not set |
| 624 | # CONFIG_I2C_STUB is not set | 628 | # CONFIG_HWMON_VID is not set |
| 625 | # CONFIG_I2C_PCA_ISA is not set | ||
| 626 | |||
| 627 | # | ||
| 628 | # Hardware Sensors Chip support | ||
| 629 | # | ||
| 630 | CONFIG_I2C_SENSOR=m | ||
| 631 | # CONFIG_SENSORS_ADM1021 is not set | ||
| 632 | # CONFIG_SENSORS_ADM1025 is not set | ||
| 633 | # CONFIG_SENSORS_ADM1026 is not set | ||
| 634 | # CONFIG_SENSORS_ADM1031 is not set | ||
| 635 | # CONFIG_SENSORS_ASB100 is not set | ||
| 636 | # CONFIG_SENSORS_DS1621 is not set | ||
| 637 | # CONFIG_SENSORS_FSCHER is not set | ||
| 638 | # CONFIG_SENSORS_FSCPOS is not set | ||
| 639 | # CONFIG_SENSORS_GL518SM is not set | ||
| 640 | # CONFIG_SENSORS_GL520SM is not set | ||
| 641 | # CONFIG_SENSORS_IT87 is not set | ||
| 642 | # CONFIG_SENSORS_LM63 is not set | ||
| 643 | CONFIG_SENSORS_LM75=m | ||
| 644 | # CONFIG_SENSORS_LM77 is not set | ||
| 645 | CONFIG_SENSORS_LM78=m | ||
| 646 | # CONFIG_SENSORS_LM80 is not set | ||
| 647 | # CONFIG_SENSORS_LM83 is not set | ||
| 648 | CONFIG_SENSORS_LM85=m | ||
| 649 | # CONFIG_SENSORS_LM87 is not set | ||
| 650 | # CONFIG_SENSORS_LM90 is not set | ||
| 651 | # CONFIG_SENSORS_MAX1619 is not set | ||
| 652 | # CONFIG_SENSORS_PC87360 is not set | ||
| 653 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 654 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 655 | # CONFIG_SENSORS_W83781D is not set | ||
| 656 | # CONFIG_SENSORS_W83L785TS is not set | ||
| 657 | # CONFIG_SENSORS_W83627HF is not set | ||
| 658 | |||
| 659 | # | ||
| 660 | # Other I2C Chip support | ||
| 661 | # | ||
| 662 | CONFIG_SENSORS_EEPROM=m | ||
| 663 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 664 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 665 | # CONFIG_SENSORS_RTC8564 is not set | ||
| 666 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 667 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 668 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 669 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 670 | 629 | ||
| 671 | # | 630 | # |
| 672 | # Misc devices | 631 | # Misc devices |
| 673 | # | 632 | # |
| 633 | # CONFIG_SGI_IOC4 is not set | ||
| 634 | # CONFIG_TIFM_CORE is not set | ||
| 635 | |||
| 636 | # | ||
| 637 | # LED devices | ||
| 638 | # | ||
| 639 | # CONFIG_NEW_LEDS is not set | ||
| 640 | |||
| 641 | # | ||
| 642 | # LED drivers | ||
| 643 | # | ||
| 644 | |||
| 645 | # | ||
| 646 | # LED Triggers | ||
| 647 | # | ||
| 674 | 648 | ||
| 675 | # | 649 | # |
| 676 | # Multimedia devices | 650 | # Multimedia devices |
| @@ -685,13 +659,17 @@ CONFIG_SENSORS_EEPROM=m | |||
| 685 | # | 659 | # |
| 686 | # Graphics support | 660 | # Graphics support |
| 687 | # | 661 | # |
| 662 | # CONFIG_FIRMWARE_EDID is not set | ||
| 688 | CONFIG_FB=y | 663 | CONFIG_FB=y |
| 689 | # CONFIG_FB_CFB_FILLRECT is not set | 664 | CONFIG_FB_CFB_FILLRECT=y |
| 690 | # CONFIG_FB_CFB_COPYAREA is not set | 665 | CONFIG_FB_CFB_COPYAREA=y |
| 691 | # CONFIG_FB_CFB_IMAGEBLIT is not set | 666 | CONFIG_FB_CFB_IMAGEBLIT=y |
| 692 | # CONFIG_FB_SOFT_CURSOR is not set | 667 | # CONFIG_FB_MACMODES is not set |
| 693 | CONFIG_FB_MODE_HELPERS=y | 668 | # CONFIG_FB_BACKLIGHT is not set |
| 669 | # CONFIG_FB_MODE_HELPERS is not set | ||
| 694 | # CONFIG_FB_TILEBLITTING is not set | 670 | # CONFIG_FB_TILEBLITTING is not set |
| 671 | CONFIG_FB_ARMCLCD=y | ||
| 672 | # CONFIG_FB_S1D13XXX is not set | ||
| 695 | # CONFIG_FB_VIRTUAL is not set | 673 | # CONFIG_FB_VIRTUAL is not set |
| 696 | 674 | ||
| 697 | # | 675 | # |
| @@ -699,27 +677,76 @@ CONFIG_FB_MODE_HELPERS=y | |||
| 699 | # | 677 | # |
| 700 | # CONFIG_VGA_CONSOLE is not set | 678 | # CONFIG_VGA_CONSOLE is not set |
| 701 | CONFIG_DUMMY_CONSOLE=y | 679 | CONFIG_DUMMY_CONSOLE=y |
| 702 | # CONFIG_FRAMEBUFFER_CONSOLE is not set | 680 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 681 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
| 682 | # CONFIG_FONTS is not set | ||
| 683 | CONFIG_FONT_8x8=y | ||
| 684 | CONFIG_FONT_8x16=y | ||
| 703 | 685 | ||
| 704 | # | 686 | # |
| 705 | # Logo configuration | 687 | # Logo configuration |
| 706 | # | 688 | # |
| 707 | # CONFIG_LOGO is not set | 689 | CONFIG_LOGO=y |
| 690 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 691 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
| 692 | CONFIG_LOGO_LINUX_CLUT224=y | ||
| 708 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 693 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
| 709 | 694 | ||
| 710 | # | 695 | # |
| 711 | # Sound | 696 | # Sound |
| 712 | # | 697 | # |
| 713 | # CONFIG_SOUND is not set | 698 | CONFIG_SOUND=y |
| 699 | |||
| 700 | # | ||
| 701 | # Advanced Linux Sound Architecture | ||
| 702 | # | ||
| 703 | CONFIG_SND=y | ||
| 704 | CONFIG_SND_TIMER=y | ||
| 705 | CONFIG_SND_PCM=y | ||
| 706 | # CONFIG_SND_SEQUENCER is not set | ||
| 707 | CONFIG_SND_OSSEMUL=y | ||
| 708 | CONFIG_SND_MIXER_OSS=y | ||
| 709 | CONFIG_SND_PCM_OSS=y | ||
| 710 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 711 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 712 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 713 | CONFIG_SND_VERBOSE_PROCFS=y | ||
| 714 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
| 715 | # CONFIG_SND_DEBUG is not set | ||
| 716 | |||
| 717 | # | ||
| 718 | # Generic devices | ||
| 719 | # | ||
| 720 | CONFIG_SND_AC97_CODEC=m | ||
| 721 | CONFIG_SND_AC97_BUS=m | ||
| 722 | # CONFIG_SND_DUMMY is not set | ||
| 723 | # CONFIG_SND_MTPAV is not set | ||
| 724 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 725 | # CONFIG_SND_MPU401 is not set | ||
| 726 | |||
| 727 | # | ||
| 728 | # ALSA ARM devices | ||
| 729 | # | ||
| 730 | CONFIG_SND_ARMAACI=m | ||
| 731 | |||
| 732 | # | ||
| 733 | # Open Sound System | ||
| 734 | # | ||
| 735 | # CONFIG_SOUND_PRIME is not set | ||
| 714 | 736 | ||
| 715 | # | 737 | # |
| 716 | # USB support | 738 | # USB support |
| 717 | # | 739 | # |
| 718 | CONFIG_USB_ARCH_HAS_HCD=y | 740 | CONFIG_USB_ARCH_HAS_HCD=y |
| 719 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 741 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 742 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
| 720 | # CONFIG_USB is not set | 743 | # CONFIG_USB is not set |
| 721 | 744 | ||
| 722 | # | 745 | # |
| 746 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 747 | # | ||
| 748 | |||
| 749 | # | ||
| 723 | # USB Gadget Support | 750 | # USB Gadget Support |
| 724 | # | 751 | # |
| 725 | # CONFIG_USB_GADGET is not set | 752 | # CONFIG_USB_GADGET is not set |
| @@ -727,33 +754,62 @@ CONFIG_USB_ARCH_HAS_HCD=y | |||
| 727 | # | 754 | # |
| 728 | # MMC/SD Card support | 755 | # MMC/SD Card support |
| 729 | # | 756 | # |
| 730 | # CONFIG_MMC is not set | 757 | CONFIG_MMC=y |
| 758 | # CONFIG_MMC_DEBUG is not set | ||
| 759 | CONFIG_MMC_BLOCK=y | ||
| 760 | CONFIG_MMC_ARMMMCI=y | ||
| 761 | # CONFIG_MMC_TIFM_SD is not set | ||
| 762 | |||
| 763 | # | ||
| 764 | # Real Time Clock | ||
| 765 | # | ||
| 766 | CONFIG_RTC_LIB=y | ||
| 767 | CONFIG_RTC_CLASS=y | ||
| 768 | CONFIG_RTC_HCTOSYS=y | ||
| 769 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 770 | # CONFIG_RTC_DEBUG is not set | ||
| 771 | |||
| 772 | # | ||
| 773 | # RTC interfaces | ||
| 774 | # | ||
| 775 | CONFIG_RTC_INTF_SYSFS=y | ||
| 776 | CONFIG_RTC_INTF_PROC=y | ||
| 777 | CONFIG_RTC_INTF_DEV=y | ||
| 778 | CONFIG_RTC_INTF_DEV_UIE_EMUL=y | ||
| 779 | |||
| 780 | # | ||
| 781 | # RTC drivers | ||
| 782 | # | ||
| 783 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 784 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 785 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 786 | CONFIG_RTC_DRV_PL031=y | ||
| 787 | # CONFIG_RTC_DRV_TEST is not set | ||
| 788 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 731 | 789 | ||
| 732 | # | 790 | # |
| 733 | # File systems | 791 | # File systems |
| 734 | # | 792 | # |
| 735 | CONFIG_EXT2_FS=y | 793 | CONFIG_EXT2_FS=y |
| 736 | # CONFIG_EXT2_FS_XATTR is not set | 794 | # CONFIG_EXT2_FS_XATTR is not set |
| 737 | CONFIG_EXT3_FS=y | 795 | # CONFIG_EXT2_FS_XIP is not set |
| 738 | CONFIG_EXT3_FS_XATTR=y | 796 | # CONFIG_EXT3_FS is not set |
| 739 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 797 | # CONFIG_EXT4DEV_FS is not set |
| 740 | # CONFIG_EXT3_FS_SECURITY is not set | ||
| 741 | CONFIG_JBD=y | ||
| 742 | # CONFIG_JBD_DEBUG is not set | ||
| 743 | CONFIG_FS_MBCACHE=y | ||
| 744 | # CONFIG_REISERFS_FS is not set | 798 | # CONFIG_REISERFS_FS is not set |
| 745 | # CONFIG_JFS_FS is not set | 799 | # CONFIG_JFS_FS is not set |
| 746 | 800 | # CONFIG_FS_POSIX_ACL is not set | |
| 747 | # | ||
| 748 | # XFS support | ||
| 749 | # | ||
| 750 | # CONFIG_XFS_FS is not set | 801 | # CONFIG_XFS_FS is not set |
| 802 | # CONFIG_GFS2_FS is not set | ||
| 803 | # CONFIG_OCFS2_FS is not set | ||
| 751 | # CONFIG_MINIX_FS is not set | 804 | # CONFIG_MINIX_FS is not set |
| 752 | CONFIG_ROMFS_FS=y | 805 | # CONFIG_ROMFS_FS is not set |
| 806 | CONFIG_INOTIFY=y | ||
| 807 | # CONFIG_INOTIFY_USER is not set | ||
| 753 | # CONFIG_QUOTA is not set | 808 | # CONFIG_QUOTA is not set |
| 754 | CONFIG_DNOTIFY=y | 809 | CONFIG_DNOTIFY=y |
| 755 | # CONFIG_AUTOFS_FS is not set | 810 | # CONFIG_AUTOFS_FS is not set |
| 756 | # CONFIG_AUTOFS4_FS is not set | 811 | # CONFIG_AUTOFS4_FS is not set |
| 812 | # CONFIG_FUSE_FS is not set | ||
| 757 | 813 | ||
| 758 | # | 814 | # |
| 759 | # CD-ROM/DVD Filesystems | 815 | # CD-ROM/DVD Filesystems |
| @@ -765,7 +821,7 @@ CONFIG_DNOTIFY=y | |||
| 765 | # DOS/FAT/NT Filesystems | 821 | # DOS/FAT/NT Filesystems |
| 766 | # | 822 | # |
| 767 | CONFIG_FAT_FS=y | 823 | CONFIG_FAT_FS=y |
| 768 | CONFIG_MSDOS_FS=y | 824 | # CONFIG_MSDOS_FS is not set |
| 769 | CONFIG_VFAT_FS=y | 825 | CONFIG_VFAT_FS=y |
| 770 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 826 | CONFIG_FAT_DEFAULT_CODEPAGE=437 |
| 771 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 827 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" |
| @@ -775,12 +831,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 775 | # Pseudo filesystems | 831 | # Pseudo filesystems |
| 776 | # | 832 | # |
| 777 | CONFIG_PROC_FS=y | 833 | CONFIG_PROC_FS=y |
| 834 | CONFIG_PROC_SYSCTL=y | ||
| 778 | CONFIG_SYSFS=y | 835 | CONFIG_SYSFS=y |
| 779 | # CONFIG_DEVFS_FS is not set | 836 | CONFIG_TMPFS=y |
| 780 | # CONFIG_DEVPTS_FS_XATTR is not set | 837 | # CONFIG_TMPFS_POSIX_ACL is not set |
| 781 | # CONFIG_TMPFS is not set | ||
| 782 | # CONFIG_HUGETLB_PAGE is not set | 838 | # CONFIG_HUGETLB_PAGE is not set |
| 783 | CONFIG_RAMFS=y | 839 | CONFIG_RAMFS=y |
| 840 | # CONFIG_CONFIGFS_FS is not set | ||
| 784 | 841 | ||
| 785 | # | 842 | # |
| 786 | # Miscellaneous filesystems | 843 | # Miscellaneous filesystems |
| @@ -792,18 +849,9 @@ CONFIG_RAMFS=y | |||
| 792 | # CONFIG_BEFS_FS is not set | 849 | # CONFIG_BEFS_FS is not set |
| 793 | # CONFIG_BFS_FS is not set | 850 | # CONFIG_BFS_FS is not set |
| 794 | # CONFIG_EFS_FS is not set | 851 | # CONFIG_EFS_FS is not set |
| 795 | CONFIG_JFFS_FS=y | 852 | # CONFIG_JFFS_FS is not set |
| 796 | CONFIG_JFFS_FS_VERBOSE=0 | 853 | # CONFIG_JFFS2_FS is not set |
| 797 | # CONFIG_JFFS_PROC_FS is not set | 854 | CONFIG_CRAMFS=y |
| 798 | CONFIG_JFFS2_FS=y | ||
| 799 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 800 | # CONFIG_JFFS2_FS_NAND is not set | ||
| 801 | # CONFIG_JFFS2_FS_NOR_ECC is not set | ||
| 802 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
| 803 | CONFIG_JFFS2_ZLIB=y | ||
| 804 | CONFIG_JFFS2_RTIME=y | ||
| 805 | # CONFIG_JFFS2_RUBIN is not set | ||
| 806 | # CONFIG_CRAMFS is not set | ||
| 807 | # CONFIG_VXFS_FS is not set | 855 | # CONFIG_VXFS_FS is not set |
| 808 | # CONFIG_HPFS_FS is not set | 856 | # CONFIG_HPFS_FS is not set |
| 809 | # CONFIG_QNX4FS_FS is not set | 857 | # CONFIG_QNX4FS_FS is not set |
| @@ -814,12 +862,15 @@ CONFIG_JFFS2_RTIME=y | |||
| 814 | # Network File Systems | 862 | # Network File Systems |
| 815 | # | 863 | # |
| 816 | CONFIG_NFS_FS=y | 864 | CONFIG_NFS_FS=y |
| 817 | # CONFIG_NFS_V3 is not set | 865 | CONFIG_NFS_V3=y |
| 866 | # CONFIG_NFS_V3_ACL is not set | ||
| 818 | # CONFIG_NFS_V4 is not set | 867 | # CONFIG_NFS_V4 is not set |
| 819 | # CONFIG_NFS_DIRECTIO is not set | 868 | # CONFIG_NFS_DIRECTIO is not set |
| 820 | # CONFIG_NFSD is not set | 869 | # CONFIG_NFSD is not set |
| 821 | CONFIG_ROOT_NFS=y | 870 | CONFIG_ROOT_NFS=y |
| 822 | CONFIG_LOCKD=y | 871 | CONFIG_LOCKD=y |
| 872 | CONFIG_LOCKD_V4=y | ||
| 873 | CONFIG_NFS_COMMON=y | ||
| 823 | CONFIG_SUNRPC=y | 874 | CONFIG_SUNRPC=y |
| 824 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 875 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
| 825 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 876 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| @@ -828,33 +879,20 @@ CONFIG_SUNRPC=y | |||
| 828 | # CONFIG_NCP_FS is not set | 879 | # CONFIG_NCP_FS is not set |
| 829 | # CONFIG_CODA_FS is not set | 880 | # CONFIG_CODA_FS is not set |
| 830 | # CONFIG_AFS_FS is not set | 881 | # CONFIG_AFS_FS is not set |
| 882 | # CONFIG_9P_FS is not set | ||
| 831 | 883 | ||
| 832 | # | 884 | # |
| 833 | # Partition Types | 885 | # Partition Types |
| 834 | # | 886 | # |
| 835 | CONFIG_PARTITION_ADVANCED=y | 887 | # CONFIG_PARTITION_ADVANCED is not set |
| 836 | # CONFIG_ACORN_PARTITION is not set | ||
| 837 | # CONFIG_OSF_PARTITION is not set | ||
| 838 | # CONFIG_AMIGA_PARTITION is not set | ||
| 839 | # CONFIG_ATARI_PARTITION is not set | ||
| 840 | # CONFIG_MAC_PARTITION is not set | ||
| 841 | CONFIG_MSDOS_PARTITION=y | 888 | CONFIG_MSDOS_PARTITION=y |
| 842 | CONFIG_BSD_DISKLABEL=y | ||
| 843 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 844 | CONFIG_SOLARIS_X86_PARTITION=y | ||
| 845 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 846 | # CONFIG_LDM_PARTITION is not set | ||
| 847 | # CONFIG_SGI_PARTITION is not set | ||
| 848 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 849 | # CONFIG_SUN_PARTITION is not set | ||
| 850 | # CONFIG_EFI_PARTITION is not set | ||
| 851 | 889 | ||
| 852 | # | 890 | # |
| 853 | # Native Language Support | 891 | # Native Language Support |
| 854 | # | 892 | # |
| 855 | CONFIG_NLS=y | 893 | CONFIG_NLS=y |
| 856 | CONFIG_NLS_DEFAULT="iso8859-1" | 894 | CONFIG_NLS_DEFAULT="iso8859-1" |
| 857 | # CONFIG_NLS_CODEPAGE_437 is not set | 895 | CONFIG_NLS_CODEPAGE_437=y |
| 858 | # CONFIG_NLS_CODEPAGE_737 is not set | 896 | # CONFIG_NLS_CODEPAGE_737 is not set |
| 859 | # CONFIG_NLS_CODEPAGE_775 is not set | 897 | # CONFIG_NLS_CODEPAGE_775 is not set |
| 860 | # CONFIG_NLS_CODEPAGE_850 is not set | 898 | # CONFIG_NLS_CODEPAGE_850 is not set |
| @@ -878,7 +916,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 878 | # CONFIG_NLS_CODEPAGE_1250 is not set | 916 | # CONFIG_NLS_CODEPAGE_1250 is not set |
| 879 | # CONFIG_NLS_CODEPAGE_1251 is not set | 917 | # CONFIG_NLS_CODEPAGE_1251 is not set |
| 880 | # CONFIG_NLS_ASCII is not set | 918 | # CONFIG_NLS_ASCII is not set |
| 881 | # CONFIG_NLS_ISO8859_1 is not set | 919 | CONFIG_NLS_ISO8859_1=y |
| 882 | # CONFIG_NLS_ISO8859_2 is not set | 920 | # CONFIG_NLS_ISO8859_2 is not set |
| 883 | # CONFIG_NLS_ISO8859_3 is not set | 921 | # CONFIG_NLS_ISO8859_3 is not set |
| 884 | # CONFIG_NLS_ISO8859_4 is not set | 922 | # CONFIG_NLS_ISO8859_4 is not set |
| @@ -902,25 +940,37 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 902 | # Kernel hacking | 940 | # Kernel hacking |
| 903 | # | 941 | # |
| 904 | # CONFIG_PRINTK_TIME is not set | 942 | # CONFIG_PRINTK_TIME is not set |
| 943 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 944 | CONFIG_MAGIC_SYSRQ=y | ||
| 945 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 905 | CONFIG_DEBUG_KERNEL=y | 946 | CONFIG_DEBUG_KERNEL=y |
| 906 | # CONFIG_MAGIC_SYSRQ is not set | 947 | CONFIG_LOG_BUF_SHIFT=14 |
| 907 | CONFIG_LOG_BUF_SHIFT=16 | 948 | CONFIG_DETECT_SOFTLOCKUP=y |
| 908 | # CONFIG_SCHEDSTATS is not set | 949 | # CONFIG_SCHEDSTATS is not set |
| 909 | # CONFIG_DEBUG_SLAB is not set | 950 | # CONFIG_DEBUG_SLAB is not set |
| 910 | # CONFIG_DEBUG_SPINLOCK is not set | 951 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 952 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 953 | CONFIG_DEBUG_SPINLOCK=y | ||
| 954 | CONFIG_DEBUG_MUTEXES=y | ||
| 955 | CONFIG_DEBUG_RWSEMS=y | ||
| 911 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 956 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 957 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 912 | # CONFIG_DEBUG_KOBJECT is not set | 958 | # CONFIG_DEBUG_KOBJECT is not set |
| 913 | CONFIG_DEBUG_BUGVERBOSE=y | 959 | CONFIG_DEBUG_BUGVERBOSE=y |
| 914 | CONFIG_DEBUG_INFO=y | 960 | # CONFIG_DEBUG_INFO is not set |
| 915 | # CONFIG_DEBUG_FS is not set | 961 | # CONFIG_DEBUG_FS is not set |
| 962 | # CONFIG_DEBUG_VM is not set | ||
| 963 | # CONFIG_DEBUG_LIST is not set | ||
| 916 | CONFIG_FRAME_POINTER=y | 964 | CONFIG_FRAME_POINTER=y |
| 965 | # CONFIG_UNWIND_INFO is not set | ||
| 966 | CONFIG_FORCED_INLINING=y | ||
| 967 | # CONFIG_HEADERS_CHECK is not set | ||
| 968 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 917 | CONFIG_DEBUG_USER=y | 969 | CONFIG_DEBUG_USER=y |
| 918 | # CONFIG_DEBUG_WAITQ is not set | 970 | # CONFIG_DEBUG_WAITQ is not set |
| 919 | # CONFIG_DEBUG_ERRORS is not set | 971 | CONFIG_DEBUG_ERRORS=y |
| 920 | CONFIG_DEBUG_LL=y | 972 | CONFIG_DEBUG_LL=y |
| 921 | # CONFIG_DEBUG_ICEDCC is not set | 973 | # CONFIG_DEBUG_ICEDCC is not set |
| 922 | CONFIG_DEBUG_S3C2410_PORT=y | ||
| 923 | CONFIG_DEBUG_S3C2410_UART=0 | ||
| 924 | 974 | ||
| 925 | # | 975 | # |
| 926 | # Security options | 976 | # Security options |
| @@ -934,14 +984,11 @@ CONFIG_DEBUG_S3C2410_UART=0 | |||
| 934 | # CONFIG_CRYPTO is not set | 984 | # CONFIG_CRYPTO is not set |
| 935 | 985 | ||
| 936 | # | 986 | # |
| 937 | # Hardware crypto devices | ||
| 938 | # | ||
| 939 | |||
| 940 | # | ||
| 941 | # Library routines | 987 | # Library routines |
| 942 | # | 988 | # |
| 943 | # CONFIG_CRC_CCITT is not set | 989 | # CONFIG_CRC_CCITT is not set |
| 990 | # CONFIG_CRC16 is not set | ||
| 944 | CONFIG_CRC32=y | 991 | CONFIG_CRC32=y |
| 945 | # CONFIG_LIBCRC32C is not set | 992 | # CONFIG_LIBCRC32C is not set |
| 946 | CONFIG_ZLIB_INFLATE=y | 993 | CONFIG_ZLIB_INFLATE=y |
| 947 | CONFIG_ZLIB_DEFLATE=y | 994 | CONFIG_PLIST=y |
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index a83222641045..c0152393e494 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.18 | 3 | # Linux kernel version: 2.6.19-rc4 |
| 4 | # Wed Sep 20 20:27:31 2006 | 4 | # Fri Nov 3 17:41:31 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
| 7 | # CONFIG_GENERIC_TIME is not set | ||
| 7 | CONFIG_MMU=y | 8 | CONFIG_MMU=y |
| 8 | CONFIG_GENERIC_HARDIRQS=y | 9 | CONFIG_GENERIC_HARDIRQS=y |
| 9 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 10 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| @@ -29,17 +30,20 @@ CONFIG_LOCALVERSION="" | |||
| 29 | CONFIG_LOCALVERSION_AUTO=y | 30 | CONFIG_LOCALVERSION_AUTO=y |
| 30 | CONFIG_SWAP=y | 31 | CONFIG_SWAP=y |
| 31 | CONFIG_SYSVIPC=y | 32 | CONFIG_SYSVIPC=y |
| 33 | # CONFIG_IPC_NS is not set | ||
| 32 | # CONFIG_POSIX_MQUEUE is not set | 34 | # CONFIG_POSIX_MQUEUE is not set |
| 33 | # CONFIG_BSD_PROCESS_ACCT is not set | 35 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 34 | # CONFIG_TASKSTATS is not set | 36 | # CONFIG_TASKSTATS is not set |
| 37 | # CONFIG_UTS_NS is not set | ||
| 35 | # CONFIG_AUDIT is not set | 38 | # CONFIG_AUDIT is not set |
| 36 | # CONFIG_IKCONFIG is not set | 39 | # CONFIG_IKCONFIG is not set |
| 37 | # CONFIG_RELAY is not set | 40 | # CONFIG_RELAY is not set |
| 38 | CONFIG_INITRAMFS_SOURCE="" | 41 | CONFIG_INITRAMFS_SOURCE="" |
| 39 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 42 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 43 | CONFIG_SYSCTL=y | ||
| 40 | # CONFIG_EMBEDDED is not set | 44 | # CONFIG_EMBEDDED is not set |
| 41 | CONFIG_UID16=y | 45 | CONFIG_UID16=y |
| 42 | CONFIG_SYSCTL=y | 46 | # CONFIG_SYSCTL_SYSCALL is not set |
| 43 | CONFIG_KALLSYMS=y | 47 | CONFIG_KALLSYMS=y |
| 44 | # CONFIG_KALLSYMS_ALL is not set | 48 | # CONFIG_KALLSYMS_ALL is not set |
| 45 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 49 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -62,7 +66,8 @@ CONFIG_BASE_SMALL=0 | |||
| 62 | # Loadable module support | 66 | # Loadable module support |
| 63 | # | 67 | # |
| 64 | CONFIG_MODULES=y | 68 | CONFIG_MODULES=y |
| 65 | # CONFIG_MODULE_UNLOAD is not set | 69 | CONFIG_MODULE_UNLOAD=y |
| 70 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 66 | # CONFIG_MODVERSIONS is not set | 71 | # CONFIG_MODVERSIONS is not set |
| 67 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 72 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| 68 | CONFIG_KMOD=y | 73 | CONFIG_KMOD=y |
| @@ -70,6 +75,7 @@ CONFIG_KMOD=y | |||
| 70 | # | 75 | # |
| 71 | # Block layer | 76 | # Block layer |
| 72 | # | 77 | # |
| 78 | CONFIG_BLOCK=y | ||
| 73 | # CONFIG_BLK_DEV_IO_TRACE is not set | 79 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 74 | 80 | ||
| 75 | # | 81 | # |
| @@ -120,6 +126,7 @@ CONFIG_ARCH_S3C2410=y | |||
| 120 | # | 126 | # |
| 121 | # S3C24XX Implementations | 127 | # S3C24XX Implementations |
| 122 | # | 128 | # |
| 129 | # CONFIG_MACH_AML_M5900 is not set | ||
| 123 | CONFIG_MACH_ANUBIS=y | 130 | CONFIG_MACH_ANUBIS=y |
| 124 | CONFIG_MACH_OSIRIS=y | 131 | CONFIG_MACH_OSIRIS=y |
| 125 | CONFIG_ARCH_BAST=y | 132 | CONFIG_ARCH_BAST=y |
| @@ -178,6 +185,8 @@ CONFIG_CPU_CACHE_V4WT=y | |||
| 178 | CONFIG_CPU_CACHE_VIVT=y | 185 | CONFIG_CPU_CACHE_VIVT=y |
| 179 | CONFIG_CPU_COPY_V4WB=y | 186 | CONFIG_CPU_COPY_V4WB=y |
| 180 | CONFIG_CPU_TLB_V4WBI=y | 187 | CONFIG_CPU_TLB_V4WBI=y |
| 188 | CONFIG_CPU_CP15=y | ||
| 189 | CONFIG_CPU_CP15_MMU=y | ||
| 181 | 190 | ||
| 182 | # | 191 | # |
| 183 | # Processor Features | 192 | # Processor Features |
| @@ -249,8 +258,9 @@ CONFIG_BINFMT_AOUT=y | |||
| 249 | # Power management options | 258 | # Power management options |
| 250 | # | 259 | # |
| 251 | CONFIG_PM=y | 260 | CONFIG_PM=y |
| 252 | CONFIG_PM_LEGACY=y | 261 | # CONFIG_PM_LEGACY is not set |
| 253 | # CONFIG_PM_DEBUG is not set | 262 | # CONFIG_PM_DEBUG is not set |
| 263 | # CONFIG_PM_SYSFS_DEPRECATED is not set | ||
| 254 | CONFIG_APM=y | 264 | CONFIG_APM=y |
| 255 | 265 | ||
| 256 | # | 266 | # |
| @@ -266,6 +276,7 @@ CONFIG_NET=y | |||
| 266 | CONFIG_UNIX=y | 276 | CONFIG_UNIX=y |
| 267 | CONFIG_XFRM=y | 277 | CONFIG_XFRM=y |
| 268 | # CONFIG_XFRM_USER is not set | 278 | # CONFIG_XFRM_USER is not set |
| 279 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 269 | # CONFIG_NET_KEY is not set | 280 | # CONFIG_NET_KEY is not set |
| 270 | CONFIG_INET=y | 281 | CONFIG_INET=y |
| 271 | # CONFIG_IP_MULTICAST is not set | 282 | # CONFIG_IP_MULTICAST is not set |
| @@ -286,10 +297,12 @@ CONFIG_IP_PNP_BOOTP=y | |||
| 286 | # CONFIG_INET_TUNNEL is not set | 297 | # CONFIG_INET_TUNNEL is not set |
| 287 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 298 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 288 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 299 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 300 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 289 | CONFIG_INET_DIAG=y | 301 | CONFIG_INET_DIAG=y |
| 290 | CONFIG_INET_TCP_DIAG=y | 302 | CONFIG_INET_TCP_DIAG=y |
| 291 | # CONFIG_TCP_CONG_ADVANCED is not set | 303 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 292 | CONFIG_TCP_CONG_BIC=y | 304 | CONFIG_TCP_CONG_CUBIC=y |
| 305 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 293 | # CONFIG_IPV6 is not set | 306 | # CONFIG_IPV6 is not set |
| 294 | # CONFIG_INET6_XFRM_TUNNEL is not set | 307 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 295 | # CONFIG_INET6_TUNNEL is not set | 308 | # CONFIG_INET6_TUNNEL is not set |
| @@ -377,6 +390,7 @@ CONFIG_MTD_BLOCK=y | |||
| 377 | # CONFIG_NFTL is not set | 390 | # CONFIG_NFTL is not set |
| 378 | # CONFIG_INFTL is not set | 391 | # CONFIG_INFTL is not set |
| 379 | # CONFIG_RFD_FTL is not set | 392 | # CONFIG_RFD_FTL is not set |
| 393 | # CONFIG_SSFDC is not set | ||
| 380 | 394 | ||
| 381 | # | 395 | # |
| 382 | # RAM/ROM/Flash chip drivers | 396 | # RAM/ROM/Flash chip drivers |
| @@ -418,6 +432,8 @@ CONFIG_MTD_BAST_MAXSIZE=4 | |||
| 418 | # | 432 | # |
| 419 | # Self-contained MTD device drivers | 433 | # Self-contained MTD device drivers |
| 420 | # | 434 | # |
| 435 | # CONFIG_MTD_DATAFLASH is not set | ||
| 436 | # CONFIG_MTD_M25P80 is not set | ||
| 421 | # CONFIG_MTD_SLRAM is not set | 437 | # CONFIG_MTD_SLRAM is not set |
| 422 | # CONFIG_MTD_PHRAM is not set | 438 | # CONFIG_MTD_PHRAM is not set |
| 423 | # CONFIG_MTD_MTDRAM is not set | 439 | # CONFIG_MTD_MTDRAM is not set |
| @@ -512,6 +528,7 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
| 512 | # | 528 | # |
| 513 | # CONFIG_RAID_ATTRS is not set | 529 | # CONFIG_RAID_ATTRS is not set |
| 514 | # CONFIG_SCSI is not set | 530 | # CONFIG_SCSI is not set |
| 531 | # CONFIG_SCSI_NETLINK is not set | ||
| 515 | 532 | ||
| 516 | # | 533 | # |
| 517 | # Multi-device support (RAID and LVM) | 534 | # Multi-device support (RAID and LVM) |
| @@ -606,6 +623,7 @@ CONFIG_DM9000=y | |||
| 606 | # Input device support | 623 | # Input device support |
| 607 | # | 624 | # |
| 608 | CONFIG_INPUT=y | 625 | CONFIG_INPUT=y |
| 626 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 609 | 627 | ||
| 610 | # | 628 | # |
| 611 | # Userland interfaces | 629 | # Userland interfaces |
| @@ -628,6 +646,7 @@ CONFIG_KEYBOARD_ATKBD=y | |||
| 628 | # CONFIG_KEYBOARD_LKKBD is not set | 646 | # CONFIG_KEYBOARD_LKKBD is not set |
| 629 | # CONFIG_KEYBOARD_XTKBD is not set | 647 | # CONFIG_KEYBOARD_XTKBD is not set |
| 630 | # CONFIG_KEYBOARD_NEWTON is not set | 648 | # CONFIG_KEYBOARD_NEWTON is not set |
| 649 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 631 | CONFIG_INPUT_MOUSE=y | 650 | CONFIG_INPUT_MOUSE=y |
| 632 | CONFIG_MOUSE_PS2=y | 651 | CONFIG_MOUSE_PS2=y |
| 633 | # CONFIG_MOUSE_SERIAL is not set | 652 | # CONFIG_MOUSE_SERIAL is not set |
| @@ -734,7 +753,6 @@ CONFIG_S3C2410_WATCHDOG=y | |||
| 734 | # CONFIG_USBPCWATCHDOG is not set | 753 | # CONFIG_USBPCWATCHDOG is not set |
| 735 | CONFIG_HW_RANDOM=y | 754 | CONFIG_HW_RANDOM=y |
| 736 | # CONFIG_NVRAM is not set | 755 | # CONFIG_NVRAM is not set |
| 737 | CONFIG_S3C2410_RTC=y | ||
| 738 | # CONFIG_DTLK is not set | 756 | # CONFIG_DTLK is not set |
| 739 | # CONFIG_R3964 is not set | 757 | # CONFIG_R3964 is not set |
| 740 | 758 | ||
| @@ -747,7 +765,6 @@ CONFIG_S3C2410_RTC=y | |||
| 747 | # TPM devices | 765 | # TPM devices |
| 748 | # | 766 | # |
| 749 | # CONFIG_TCG_TPM is not set | 767 | # CONFIG_TCG_TPM is not set |
| 750 | # CONFIG_TELCLOCK is not set | ||
| 751 | 768 | ||
| 752 | # | 769 | # |
| 753 | # I2C support | 770 | # I2C support |
| @@ -792,12 +809,26 @@ CONFIG_SENSORS_EEPROM=m | |||
| 792 | # | 809 | # |
| 793 | # SPI support | 810 | # SPI support |
| 794 | # | 811 | # |
| 795 | # CONFIG_SPI is not set | 812 | CONFIG_SPI=y |
| 796 | # CONFIG_SPI_MASTER is not set | 813 | # CONFIG_SPI_DEBUG is not set |
| 814 | CONFIG_SPI_MASTER=y | ||
| 815 | |||
| 816 | # | ||
| 817 | # SPI Master Controller Drivers | ||
| 818 | # | ||
| 819 | CONFIG_SPI_BITBANG=m | ||
| 820 | # CONFIG_SPI_BUTTERFLY is not set | ||
| 821 | CONFIG_SPI_S3C24XX_GPIO=m | ||
| 822 | CONFIG_SPI_S3C24XX=m | ||
| 823 | |||
| 824 | # | ||
| 825 | # SPI Protocol Masters | ||
| 826 | # | ||
| 797 | 827 | ||
| 798 | # | 828 | # |
| 799 | # Dallas's 1-wire bus | 829 | # Dallas's 1-wire bus |
| 800 | # | 830 | # |
| 831 | # CONFIG_W1 is not set | ||
| 801 | 832 | ||
| 802 | # | 833 | # |
| 803 | # Hardware Monitoring support | 834 | # Hardware Monitoring support |
| @@ -820,6 +851,7 @@ CONFIG_HWMON_VID=m | |||
| 820 | # CONFIG_SENSORS_GL520SM is not set | 851 | # CONFIG_SENSORS_GL520SM is not set |
| 821 | # CONFIG_SENSORS_IT87 is not set | 852 | # CONFIG_SENSORS_IT87 is not set |
| 822 | # CONFIG_SENSORS_LM63 is not set | 853 | # CONFIG_SENSORS_LM63 is not set |
| 854 | # CONFIG_SENSORS_LM70 is not set | ||
| 823 | CONFIG_SENSORS_LM75=m | 855 | CONFIG_SENSORS_LM75=m |
| 824 | # CONFIG_SENSORS_LM77 is not set | 856 | # CONFIG_SENSORS_LM77 is not set |
| 825 | CONFIG_SENSORS_LM78=m | 857 | CONFIG_SENSORS_LM78=m |
| @@ -834,6 +866,7 @@ CONFIG_SENSORS_LM85=m | |||
| 834 | # CONFIG_SENSORS_SMSC47M1 is not set | 866 | # CONFIG_SENSORS_SMSC47M1 is not set |
| 835 | # CONFIG_SENSORS_SMSC47M192 is not set | 867 | # CONFIG_SENSORS_SMSC47M192 is not set |
| 836 | # CONFIG_SENSORS_SMSC47B397 is not set | 868 | # CONFIG_SENSORS_SMSC47B397 is not set |
| 869 | # CONFIG_SENSORS_VT1211 is not set | ||
| 837 | # CONFIG_SENSORS_W83781D is not set | 870 | # CONFIG_SENSORS_W83781D is not set |
| 838 | # CONFIG_SENSORS_W83791D is not set | 871 | # CONFIG_SENSORS_W83791D is not set |
| 839 | # CONFIG_SENSORS_W83792D is not set | 872 | # CONFIG_SENSORS_W83792D is not set |
| @@ -845,25 +878,31 @@ CONFIG_SENSORS_LM85=m | |||
| 845 | # | 878 | # |
| 846 | # Misc devices | 879 | # Misc devices |
| 847 | # | 880 | # |
| 881 | # CONFIG_TIFM_CORE is not set | ||
| 848 | 882 | ||
| 849 | # | 883 | # |
| 850 | # LED devices | 884 | # LED devices |
| 851 | # | 885 | # |
| 852 | # CONFIG_NEW_LEDS is not set | 886 | CONFIG_NEW_LEDS=y |
| 887 | CONFIG_LEDS_CLASS=m | ||
| 853 | 888 | ||
| 854 | # | 889 | # |
| 855 | # LED drivers | 890 | # LED drivers |
| 856 | # | 891 | # |
| 892 | CONFIG_LEDS_S3C24XX=m | ||
| 857 | 893 | ||
| 858 | # | 894 | # |
| 859 | # LED Triggers | 895 | # LED Triggers |
| 860 | # | 896 | # |
| 897 | CONFIG_LEDS_TRIGGERS=y | ||
| 898 | CONFIG_LEDS_TRIGGER_TIMER=m | ||
| 899 | # CONFIG_LEDS_TRIGGER_IDE_DISK is not set | ||
| 900 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||
| 861 | 901 | ||
| 862 | # | 902 | # |
| 863 | # Multimedia devices | 903 | # Multimedia devices |
| 864 | # | 904 | # |
| 865 | # CONFIG_VIDEO_DEV is not set | 905 | # CONFIG_VIDEO_DEV is not set |
| 866 | CONFIG_VIDEO_V4L2=y | ||
| 867 | 906 | ||
| 868 | # | 907 | # |
| 869 | # Digital Video Broadcasting Devices | 908 | # Digital Video Broadcasting Devices |
| @@ -876,6 +915,7 @@ CONFIG_VIDEO_V4L2=y | |||
| 876 | # | 915 | # |
| 877 | CONFIG_FIRMWARE_EDID=y | 916 | CONFIG_FIRMWARE_EDID=y |
| 878 | CONFIG_FB=y | 917 | CONFIG_FB=y |
| 918 | # CONFIG_FB_DDC is not set | ||
| 879 | CONFIG_FB_CFB_FILLRECT=y | 919 | CONFIG_FB_CFB_FILLRECT=y |
| 880 | CONFIG_FB_CFB_COPYAREA=y | 920 | CONFIG_FB_CFB_COPYAREA=y |
| 881 | CONFIG_FB_CFB_IMAGEBLIT=y | 921 | CONFIG_FB_CFB_IMAGEBLIT=y |
| @@ -951,7 +991,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y | |||
| 951 | # | 991 | # |
| 952 | # may also be needed; see USB_STORAGE Help for more information | 992 | # may also be needed; see USB_STORAGE Help for more information |
| 953 | # | 993 | # |
| 954 | # CONFIG_USB_STORAGE is not set | ||
| 955 | # CONFIG_USB_LIBUSUAL is not set | 994 | # CONFIG_USB_LIBUSUAL is not set |
| 956 | 995 | ||
| 957 | # | 996 | # |
| @@ -1007,6 +1046,7 @@ CONFIG_USB_MON=y | |||
| 1007 | # | 1046 | # |
| 1008 | # CONFIG_USB_EMI62 is not set | 1047 | # CONFIG_USB_EMI62 is not set |
| 1009 | # CONFIG_USB_EMI26 is not set | 1048 | # CONFIG_USB_EMI26 is not set |
| 1049 | # CONFIG_USB_ADUTUX is not set | ||
| 1010 | # CONFIG_USB_AUERSWALD is not set | 1050 | # CONFIG_USB_AUERSWALD is not set |
| 1011 | # CONFIG_USB_RIO500 is not set | 1051 | # CONFIG_USB_RIO500 is not set |
| 1012 | # CONFIG_USB_LEGOTOWER is not set | 1052 | # CONFIG_USB_LEGOTOWER is not set |
| @@ -1014,11 +1054,12 @@ CONFIG_USB_MON=y | |||
| 1014 | # CONFIG_USB_LED is not set | 1054 | # CONFIG_USB_LED is not set |
| 1015 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1055 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
| 1016 | # CONFIG_USB_CYTHERM is not set | 1056 | # CONFIG_USB_CYTHERM is not set |
| 1017 | # CONFIG_USB_PHIDGETKIT is not set | 1057 | # CONFIG_USB_PHIDGET is not set |
| 1018 | # CONFIG_USB_PHIDGETSERVO is not set | ||
| 1019 | # CONFIG_USB_IDMOUSE is not set | 1058 | # CONFIG_USB_IDMOUSE is not set |
| 1059 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1020 | # CONFIG_USB_APPLEDISPLAY is not set | 1060 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1021 | # CONFIG_USB_LD is not set | 1061 | # CONFIG_USB_LD is not set |
| 1062 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1022 | # CONFIG_USB_TEST is not set | 1063 | # CONFIG_USB_TEST is not set |
| 1023 | 1064 | ||
| 1024 | # | 1065 | # |
| @@ -1039,7 +1080,37 @@ CONFIG_USB_MON=y | |||
| 1039 | # Real Time Clock | 1080 | # Real Time Clock |
| 1040 | # | 1081 | # |
| 1041 | CONFIG_RTC_LIB=y | 1082 | CONFIG_RTC_LIB=y |
| 1042 | # CONFIG_RTC_CLASS is not set | 1083 | CONFIG_RTC_CLASS=y |
| 1084 | CONFIG_RTC_HCTOSYS=y | ||
| 1085 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 1086 | # CONFIG_RTC_DEBUG is not set | ||
| 1087 | |||
| 1088 | # | ||
| 1089 | # RTC interfaces | ||
| 1090 | # | ||
| 1091 | CONFIG_RTC_INTF_SYSFS=y | ||
| 1092 | CONFIG_RTC_INTF_PROC=y | ||
| 1093 | CONFIG_RTC_INTF_DEV=y | ||
| 1094 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 1095 | |||
| 1096 | # | ||
| 1097 | # RTC drivers | ||
| 1098 | # | ||
| 1099 | # CONFIG_RTC_DRV_X1205 is not set | ||
| 1100 | # CONFIG_RTC_DRV_DS1307 is not set | ||
| 1101 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 1102 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
| 1103 | # CONFIG_RTC_DRV_DS1672 is not set | ||
| 1104 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 1105 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
| 1106 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
| 1107 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 1108 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
| 1109 | CONFIG_RTC_DRV_S3C=y | ||
| 1110 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 1111 | # CONFIG_RTC_DRV_TEST is not set | ||
| 1112 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
| 1113 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 1043 | 1114 | ||
| 1044 | # | 1115 | # |
| 1045 | # File systems | 1116 | # File systems |
| @@ -1051,6 +1122,7 @@ CONFIG_EXT3_FS=y | |||
| 1051 | CONFIG_EXT3_FS_XATTR=y | 1122 | CONFIG_EXT3_FS_XATTR=y |
| 1052 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1123 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 1053 | # CONFIG_EXT3_FS_SECURITY is not set | 1124 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1125 | # CONFIG_EXT4DEV_FS is not set | ||
| 1054 | CONFIG_JBD=y | 1126 | CONFIG_JBD=y |
| 1055 | # CONFIG_JBD_DEBUG is not set | 1127 | # CONFIG_JBD_DEBUG is not set |
| 1056 | CONFIG_FS_MBCACHE=y | 1128 | CONFIG_FS_MBCACHE=y |
| @@ -1058,6 +1130,7 @@ CONFIG_FS_MBCACHE=y | |||
| 1058 | # CONFIG_JFS_FS is not set | 1130 | # CONFIG_JFS_FS is not set |
| 1059 | # CONFIG_FS_POSIX_ACL is not set | 1131 | # CONFIG_FS_POSIX_ACL is not set |
| 1060 | # CONFIG_XFS_FS is not set | 1132 | # CONFIG_XFS_FS is not set |
| 1133 | # CONFIG_GFS2_FS is not set | ||
| 1061 | # CONFIG_OCFS2_FS is not set | 1134 | # CONFIG_OCFS2_FS is not set |
| 1062 | # CONFIG_MINIX_FS is not set | 1135 | # CONFIG_MINIX_FS is not set |
| 1063 | CONFIG_ROMFS_FS=y | 1136 | CONFIG_ROMFS_FS=y |
| @@ -1089,6 +1162,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 1089 | # Pseudo filesystems | 1162 | # Pseudo filesystems |
| 1090 | # | 1163 | # |
| 1091 | CONFIG_PROC_FS=y | 1164 | CONFIG_PROC_FS=y |
| 1165 | CONFIG_PROC_SYSCTL=y | ||
| 1092 | CONFIG_SYSFS=y | 1166 | CONFIG_SYSFS=y |
| 1093 | # CONFIG_TMPFS is not set | 1167 | # CONFIG_TMPFS is not set |
| 1094 | # CONFIG_HUGETLB_PAGE is not set | 1168 | # CONFIG_HUGETLB_PAGE is not set |
| @@ -1219,6 +1293,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 1219 | # Kernel hacking | 1293 | # Kernel hacking |
| 1220 | # | 1294 | # |
| 1221 | # CONFIG_PRINTK_TIME is not set | 1295 | # CONFIG_PRINTK_TIME is not set |
| 1296 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1222 | CONFIG_MAGIC_SYSRQ=y | 1297 | CONFIG_MAGIC_SYSRQ=y |
| 1223 | # CONFIG_UNUSED_SYMBOLS is not set | 1298 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1224 | CONFIG_DEBUG_KERNEL=y | 1299 | CONFIG_DEBUG_KERNEL=y |
| @@ -1238,9 +1313,10 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 1238 | CONFIG_DEBUG_INFO=y | 1313 | CONFIG_DEBUG_INFO=y |
| 1239 | # CONFIG_DEBUG_FS is not set | 1314 | # CONFIG_DEBUG_FS is not set |
| 1240 | # CONFIG_DEBUG_VM is not set | 1315 | # CONFIG_DEBUG_VM is not set |
| 1316 | # CONFIG_DEBUG_LIST is not set | ||
| 1241 | CONFIG_FRAME_POINTER=y | 1317 | CONFIG_FRAME_POINTER=y |
| 1242 | # CONFIG_UNWIND_INFO is not set | ||
| 1243 | CONFIG_FORCED_INLINING=y | 1318 | CONFIG_FORCED_INLINING=y |
| 1319 | # CONFIG_HEADERS_CHECK is not set | ||
| 1244 | # CONFIG_RCU_TORTURE_TEST is not set | 1320 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1245 | CONFIG_DEBUG_USER=y | 1321 | CONFIG_DEBUG_USER=y |
| 1246 | # CONFIG_DEBUG_WAITQ is not set | 1322 | # CONFIG_DEBUG_WAITQ is not set |
| @@ -1262,10 +1338,6 @@ CONFIG_DEBUG_S3C2410_UART=0 | |||
| 1262 | # CONFIG_CRYPTO is not set | 1338 | # CONFIG_CRYPTO is not set |
| 1263 | 1339 | ||
| 1264 | # | 1340 | # |
| 1265 | # Hardware crypto devices | ||
| 1266 | # | ||
| 1267 | |||
| 1268 | # | ||
| 1269 | # Library routines | 1341 | # Library routines |
| 1270 | # | 1342 | # |
| 1271 | # CONFIG_CRC_CCITT is not set | 1343 | # CONFIG_CRC_CCITT is not set |
diff --git a/arch/arm/configs/smdk2410_defconfig b/arch/arm/configs/smdk2410_defconfig deleted file mode 100644 index 4d123d33c7df..000000000000 --- a/arch/arm/configs/smdk2410_defconfig +++ /dev/null | |||
| @@ -1,735 +0,0 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.12-rc1-bk2 | ||
| 4 | # Sun Mar 27 22:42:40 2005 | ||
| 5 | # | ||
| 6 | CONFIG_ARM=y | ||
| 7 | CONFIG_MMU=y | ||
| 8 | CONFIG_UID16=y | ||
| 9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 11 | CONFIG_GENERIC_IOMAP=y | ||
| 12 | |||
| 13 | # | ||
| 14 | # Code maturity level options | ||
| 15 | # | ||
| 16 | CONFIG_EXPERIMENTAL=y | ||
| 17 | CONFIG_CLEAN_COMPILE=y | ||
| 18 | CONFIG_BROKEN_ON_SMP=y | ||
| 19 | |||
| 20 | # | ||
| 21 | # General setup | ||
| 22 | # | ||
| 23 | CONFIG_LOCALVERSION="" | ||
| 24 | CONFIG_SWAP=y | ||
| 25 | CONFIG_SYSVIPC=y | ||
| 26 | # CONFIG_POSIX_MQUEUE is not set | ||
| 27 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 28 | CONFIG_SYSCTL=y | ||
| 29 | # CONFIG_AUDIT is not set | ||
| 30 | # CONFIG_HOTPLUG is not set | ||
| 31 | CONFIG_KOBJECT_UEVENT=y | ||
| 32 | # CONFIG_IKCONFIG is not set | ||
| 33 | # CONFIG_EMBEDDED is not set | ||
| 34 | CONFIG_KALLSYMS=y | ||
| 35 | # CONFIG_KALLSYMS_ALL is not set | ||
| 36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 37 | CONFIG_BASE_FULL=y | ||
| 38 | CONFIG_FUTEX=y | ||
| 39 | CONFIG_EPOLL=y | ||
| 40 | CONFIG_CC_OPTIMIZE_FOR_SIZE=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_TINY_SHMEM is not set | ||
| 47 | CONFIG_BASE_SMALL=0 | ||
| 48 | |||
| 49 | # | ||
| 50 | # Loadable module support | ||
| 51 | # | ||
| 52 | # CONFIG_MODULES is not set | ||
| 53 | |||
| 54 | # | ||
| 55 | # System Type | ||
| 56 | # | ||
| 57 | # CONFIG_ARCH_CLPS7500 is not set | ||
| 58 | # CONFIG_ARCH_CLPS711X is not set | ||
| 59 | # CONFIG_ARCH_CO285 is not set | ||
| 60 | # CONFIG_ARCH_EBSA110 is not set | ||
| 61 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
| 62 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 63 | # CONFIG_ARCH_IOP3XX is not set | ||
| 64 | # CONFIG_ARCH_IXP4XX is not set | ||
| 65 | # CONFIG_ARCH_IXP2000 is not set | ||
| 66 | # CONFIG_ARCH_L7200 is not set | ||
| 67 | # CONFIG_ARCH_PXA is not set | ||
| 68 | # CONFIG_ARCH_RPC is not set | ||
| 69 | # CONFIG_ARCH_SA1100 is not set | ||
| 70 | CONFIG_ARCH_S3C2410=y | ||
| 71 | # CONFIG_ARCH_SHARK is not set | ||
| 72 | # CONFIG_ARCH_LH7A40X is not set | ||
| 73 | # CONFIG_ARCH_OMAP is not set | ||
| 74 | # CONFIG_ARCH_VERSATILE is not set | ||
| 75 | # CONFIG_ARCH_IMX is not set | ||
| 76 | # CONFIG_ARCH_H720X is not set | ||
| 77 | |||
| 78 | # | ||
| 79 | # S3C24XX Implementations | ||
| 80 | # | ||
| 81 | # CONFIG_ARCH_BAST is not set | ||
| 82 | # CONFIG_ARCH_H1940 is not set | ||
| 83 | # CONFIG_MACH_N30 is not set | ||
| 84 | CONFIG_ARCH_SMDK2410=y | ||
| 85 | # CONFIG_ARCH_S3C2440 is not set | ||
| 86 | # CONFIG_MACH_VR1000 is not set | ||
| 87 | # CONFIG_MACH_RX3715 is not set | ||
| 88 | # CONFIG_MACH_OTOM is not set | ||
| 89 | # CONFIG_MACH_NEXCODER_2440 is not set | ||
| 90 | CONFIG_CPU_S3C2410=y | ||
| 91 | |||
| 92 | # | ||
| 93 | # S3C2410 Boot | ||
| 94 | # | ||
| 95 | |||
| 96 | # | ||
| 97 | # S3C2410 Setup | ||
| 98 | # | ||
| 99 | # CONFIG_S3C2410_DMA is not set | ||
| 100 | CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | ||
| 101 | |||
| 102 | # | ||
| 103 | # Processor Type | ||
| 104 | # | ||
| 105 | CONFIG_CPU_32=y | ||
| 106 | CONFIG_CPU_ARM920T=y | ||
| 107 | CONFIG_CPU_32v4=y | ||
| 108 | CONFIG_CPU_ABRT_EV4T=y | ||
| 109 | CONFIG_CPU_CACHE_V4WT=y | ||
| 110 | CONFIG_CPU_CACHE_VIVT=y | ||
| 111 | CONFIG_CPU_COPY_V4WB=y | ||
| 112 | CONFIG_CPU_TLB_V4WBI=y | ||
| 113 | |||
| 114 | # | ||
| 115 | # Processor Features | ||
| 116 | # | ||
| 117 | CONFIG_ARM_THUMB=y | ||
| 118 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
| 119 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
| 120 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
| 121 | |||
| 122 | # | ||
| 123 | # Bus support | ||
| 124 | # | ||
| 125 | |||
| 126 | # | ||
| 127 | # PCCARD (PCMCIA/CardBus) support | ||
| 128 | # | ||
| 129 | # CONFIG_PCCARD is not set | ||
| 130 | |||
| 131 | # | ||
| 132 | # Kernel Features | ||
| 133 | # | ||
| 134 | # CONFIG_PREEMPT is not set | ||
| 135 | CONFIG_ALIGNMENT_TRAP=y | ||
| 136 | |||
| 137 | # | ||
| 138 | # Boot options | ||
| 139 | # | ||
| 140 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 141 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 142 | CONFIG_CMDLINE="root=1f04 mem=32M" | ||
| 143 | # CONFIG_XIP_KERNEL is not set | ||
| 144 | |||
| 145 | # | ||
| 146 | # Floating point emulation | ||
| 147 | # | ||
| 148 | |||
| 149 | # | ||
| 150 | # At least one emulation must be selected | ||
| 151 | # | ||
| 152 | # CONFIG_FPE_NWFPE is not set | ||
| 153 | # CONFIG_FPE_FASTFPE is not set | ||
| 154 | |||
| 155 | # | ||
| 156 | # Userspace binary formats | ||
| 157 | # | ||
| 158 | CONFIG_BINFMT_ELF=y | ||
| 159 | CONFIG_BINFMT_AOUT=y | ||
| 160 | # CONFIG_BINFMT_MISC is not set | ||
| 161 | # CONFIG_ARTHUR is not set | ||
| 162 | |||
| 163 | # | ||
| 164 | # Power management options | ||
| 165 | # | ||
| 166 | # CONFIG_PM is not set | ||
| 167 | |||
| 168 | # | ||
| 169 | # Device Drivers | ||
| 170 | # | ||
| 171 | |||
| 172 | # | ||
| 173 | # Generic Driver Options | ||
| 174 | # | ||
| 175 | CONFIG_STANDALONE=y | ||
| 176 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 177 | # CONFIG_FW_LOADER is not set | ||
| 178 | # CONFIG_DEBUG_DRIVER is not set | ||
| 179 | |||
| 180 | # | ||
| 181 | # Memory Technology Devices (MTD) | ||
| 182 | # | ||
| 183 | CONFIG_MTD=y | ||
| 184 | # CONFIG_MTD_DEBUG is not set | ||
| 185 | # CONFIG_MTD_CONCAT is not set | ||
| 186 | # CONFIG_MTD_PARTITIONS is not set | ||
| 187 | |||
| 188 | # | ||
| 189 | # User Modules And Translation Layers | ||
| 190 | # | ||
| 191 | CONFIG_MTD_CHAR=y | ||
| 192 | CONFIG_MTD_BLOCK=y | ||
| 193 | # CONFIG_FTL is not set | ||
| 194 | # CONFIG_NFTL is not set | ||
| 195 | # CONFIG_INFTL is not set | ||
| 196 | |||
| 197 | # | ||
| 198 | # RAM/ROM/Flash chip drivers | ||
| 199 | # | ||
| 200 | CONFIG_MTD_CFI=y | ||
| 201 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 202 | CONFIG_MTD_GEN_PROBE=y | ||
| 203 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 204 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 205 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 206 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 207 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 208 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 209 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 210 | CONFIG_MTD_CFI_I1=y | ||
| 211 | CONFIG_MTD_CFI_I2=y | ||
| 212 | # CONFIG_MTD_CFI_I4 is not set | ||
| 213 | # CONFIG_MTD_CFI_I8 is not set | ||
| 214 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 215 | # CONFIG_MTD_CFI_AMDSTD is not set | ||
| 216 | # CONFIG_MTD_CFI_STAA is not set | ||
| 217 | CONFIG_MTD_CFI_UTIL=y | ||
| 218 | # CONFIG_MTD_RAM is not set | ||
| 219 | # CONFIG_MTD_ROM is not set | ||
| 220 | # CONFIG_MTD_ABSENT is not set | ||
| 221 | # CONFIG_MTD_XIP is not set | ||
| 222 | |||
| 223 | # | ||
| 224 | # Mapping drivers for chip access | ||
| 225 | # | ||
| 226 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 227 | # CONFIG_MTD_PHYSMAP is not set | ||
| 228 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
| 229 | # CONFIG_MTD_EDB7312 is not set | ||
| 230 | |||
| 231 | # | ||
| 232 | # Self-contained MTD device drivers | ||
| 233 | # | ||
| 234 | # CONFIG_MTD_SLRAM is not set | ||
| 235 | # CONFIG_MTD_PHRAM is not set | ||
| 236 | # CONFIG_MTD_MTDRAM is not set | ||
| 237 | # CONFIG_MTD_BLKMTD is not set | ||
| 238 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 239 | |||
| 240 | # | ||
| 241 | # Disk-On-Chip Device Drivers | ||
| 242 | # | ||
| 243 | # CONFIG_MTD_DOC2000 is not set | ||
| 244 | # CONFIG_MTD_DOC2001 is not set | ||
| 245 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 246 | |||
| 247 | # | ||
| 248 | # NAND Flash Device Drivers | ||
| 249 | # | ||
| 250 | # CONFIG_MTD_NAND is not set | ||
| 251 | |||
| 252 | # | ||
| 253 | # Parallel port support | ||
| 254 | # | ||
| 255 | # CONFIG_PARPORT is not set | ||
| 256 | |||
| 257 | # | ||
| 258 | # Plug and Play support | ||
| 259 | # | ||
| 260 | |||
| 261 | # | ||
| 262 | # Block devices | ||
| 263 | # | ||
| 264 | # CONFIG_BLK_DEV_FD is not set | ||
| 265 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 266 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 267 | # CONFIG_BLK_DEV_NBD is not set | ||
| 268 | CONFIG_BLK_DEV_RAM=y | ||
| 269 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 270 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 271 | # CONFIG_BLK_DEV_INITRD is not set | ||
| 272 | CONFIG_INITRAMFS_SOURCE="" | ||
| 273 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 274 | |||
| 275 | # | ||
| 276 | # IO Schedulers | ||
| 277 | # | ||
| 278 | CONFIG_IOSCHED_NOOP=y | ||
| 279 | CONFIG_IOSCHED_AS=y | ||
| 280 | CONFIG_IOSCHED_DEADLINE=y | ||
| 281 | CONFIG_IOSCHED_CFQ=y | ||
| 282 | # CONFIG_ATA_OVER_ETH is not set | ||
| 283 | |||
| 284 | # | ||
| 285 | # ATA/ATAPI/MFM/RLL support | ||
| 286 | # | ||
| 287 | # CONFIG_IDE is not set | ||
| 288 | |||
| 289 | # | ||
| 290 | # SCSI device support | ||
| 291 | # | ||
| 292 | # CONFIG_SCSI is not set | ||
| 293 | |||
| 294 | # | ||
| 295 | # Multi-device support (RAID and LVM) | ||
| 296 | # | ||
| 297 | # CONFIG_MD is not set | ||
| 298 | |||
| 299 | # | ||
| 300 | # Fusion MPT device support | ||
| 301 | # | ||
| 302 | |||
| 303 | # | ||
| 304 | # IEEE 1394 (FireWire) support | ||
| 305 | # | ||
| 306 | |||
| 307 | # | ||
| 308 | # I2O device support | ||
| 309 | # | ||
| 310 | |||
| 311 | # | ||
| 312 | # Networking support | ||
| 313 | # | ||
| 314 | CONFIG_NET=y | ||
| 315 | |||
| 316 | # | ||
| 317 | # Networking options | ||
| 318 | # | ||
| 319 | # CONFIG_PACKET is not set | ||
| 320 | # CONFIG_NETLINK_DEV is not set | ||
| 321 | CONFIG_UNIX=y | ||
| 322 | # CONFIG_NET_KEY is not set | ||
| 323 | CONFIG_INET=y | ||
| 324 | # CONFIG_IP_MULTICAST is not set | ||
| 325 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 326 | CONFIG_IP_PNP=y | ||
| 327 | # CONFIG_IP_PNP_DHCP is not set | ||
| 328 | CONFIG_IP_PNP_BOOTP=y | ||
| 329 | # CONFIG_IP_PNP_RARP is not set | ||
| 330 | # CONFIG_NET_IPIP is not set | ||
| 331 | # CONFIG_NET_IPGRE is not set | ||
| 332 | # CONFIG_ARPD is not set | ||
| 333 | # CONFIG_SYN_COOKIES is not set | ||
| 334 | # CONFIG_INET_AH is not set | ||
| 335 | # CONFIG_INET_ESP is not set | ||
| 336 | # CONFIG_INET_IPCOMP is not set | ||
| 337 | # CONFIG_INET_TUNNEL is not set | ||
| 338 | # CONFIG_IP_TCPDIAG is not set | ||
| 339 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
| 340 | # CONFIG_IPV6 is not set | ||
| 341 | # CONFIG_NETFILTER is not set | ||
| 342 | |||
| 343 | # | ||
| 344 | # SCTP Configuration (EXPERIMENTAL) | ||
| 345 | # | ||
| 346 | # CONFIG_IP_SCTP is not set | ||
| 347 | # CONFIG_ATM is not set | ||
| 348 | # CONFIG_BRIDGE is not set | ||
| 349 | # CONFIG_VLAN_8021Q is not set | ||
| 350 | # CONFIG_DECNET is not set | ||
| 351 | # CONFIG_LLC2 is not set | ||
| 352 | # CONFIG_IPX is not set | ||
| 353 | # CONFIG_ATALK is not set | ||
| 354 | # CONFIG_X25 is not set | ||
| 355 | # CONFIG_LAPB is not set | ||
| 356 | # CONFIG_NET_DIVERT is not set | ||
| 357 | # CONFIG_ECONET is not set | ||
| 358 | # CONFIG_WAN_ROUTER is not set | ||
| 359 | |||
| 360 | # | ||
| 361 | # QoS and/or fair queueing | ||
| 362 | # | ||
| 363 | # CONFIG_NET_SCHED is not set | ||
| 364 | # CONFIG_NET_CLS_ROUTE is not set | ||
| 365 | |||
| 366 | # | ||
| 367 | # Network testing | ||
| 368 | # | ||
| 369 | # CONFIG_NET_PKTGEN is not set | ||
| 370 | # CONFIG_NETPOLL is not set | ||
| 371 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 372 | # CONFIG_HAMRADIO is not set | ||
| 373 | # CONFIG_IRDA is not set | ||
| 374 | # CONFIG_BT is not set | ||
| 375 | CONFIG_NETDEVICES=y | ||
| 376 | # CONFIG_DUMMY is not set | ||
| 377 | # CONFIG_BONDING is not set | ||
| 378 | # CONFIG_EQUALIZER is not set | ||
| 379 | # CONFIG_TUN is not set | ||
| 380 | |||
| 381 | # | ||
| 382 | # Ethernet (10 or 100Mbit) | ||
| 383 | # | ||
| 384 | CONFIG_NET_ETHERNET=y | ||
| 385 | # CONFIG_MII is not set | ||
| 386 | # CONFIG_SMC91X is not set | ||
| 387 | |||
| 388 | # | ||
| 389 | # Ethernet (1000 Mbit) | ||
| 390 | # | ||
| 391 | |||
| 392 | # | ||
| 393 | # Ethernet (10000 Mbit) | ||
| 394 | # | ||
| 395 | |||
| 396 | # | ||
| 397 | # Token Ring devices | ||
| 398 | # | ||
| 399 | |||
| 400 | # | ||
| 401 | # Wireless LAN (non-hamradio) | ||
| 402 | # | ||
| 403 | # CONFIG_NET_RADIO is not set | ||
| 404 | |||
| 405 | # | ||
| 406 | # Wan interfaces | ||
| 407 | # | ||
| 408 | # CONFIG_WAN is not set | ||
| 409 | # CONFIG_PPP is not set | ||
| 410 | # CONFIG_SLIP is not set | ||
| 411 | # CONFIG_SHAPER is not set | ||
| 412 | # CONFIG_NETCONSOLE is not set | ||
| 413 | |||
| 414 | # | ||
| 415 | # ISDN subsystem | ||
| 416 | # | ||
| 417 | # CONFIG_ISDN is not set | ||
| 418 | |||
| 419 | # | ||
| 420 | # Input device support | ||
| 421 | # | ||
| 422 | CONFIG_INPUT=y | ||
| 423 | |||
| 424 | # | ||
| 425 | # Userland interfaces | ||
| 426 | # | ||
| 427 | CONFIG_INPUT_MOUSEDEV=y | ||
| 428 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 429 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 430 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 431 | # CONFIG_INPUT_JOYDEV is not set | ||
| 432 | # CONFIG_INPUT_TSDEV is not set | ||
| 433 | # CONFIG_INPUT_EVDEV is not set | ||
| 434 | # CONFIG_INPUT_EVBUG is not set | ||
| 435 | |||
| 436 | # | ||
| 437 | # Input Device Drivers | ||
| 438 | # | ||
| 439 | CONFIG_INPUT_KEYBOARD=y | ||
| 440 | CONFIG_KEYBOARD_ATKBD=y | ||
| 441 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 442 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 443 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 444 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 445 | CONFIG_INPUT_MOUSE=y | ||
| 446 | CONFIG_MOUSE_PS2=y | ||
| 447 | # CONFIG_MOUSE_SERIAL is not set | ||
| 448 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 449 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 450 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 451 | # CONFIG_INPUT_MISC is not set | ||
| 452 | |||
| 453 | # | ||
| 454 | # Hardware I/O ports | ||
| 455 | # | ||
| 456 | CONFIG_SERIO=y | ||
| 457 | CONFIG_SERIO_SERPORT=y | ||
| 458 | CONFIG_SERIO_LIBPS2=y | ||
| 459 | # CONFIG_SERIO_RAW is not set | ||
| 460 | # CONFIG_GAMEPORT is not set | ||
| 461 | CONFIG_SOUND_GAMEPORT=y | ||
| 462 | |||
| 463 | # | ||
| 464 | # Character devices | ||
| 465 | # | ||
| 466 | CONFIG_VT=y | ||
| 467 | CONFIG_VT_CONSOLE=y | ||
| 468 | CONFIG_HW_CONSOLE=y | ||
| 469 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 470 | |||
| 471 | # | ||
| 472 | # Serial drivers | ||
| 473 | # | ||
| 474 | # CONFIG_SERIAL_8250 is not set | ||
| 475 | |||
| 476 | # | ||
| 477 | # Non-8250 serial port support | ||
| 478 | # | ||
| 479 | CONFIG_SERIAL_S3C2410=y | ||
| 480 | CONFIG_SERIAL_S3C2410_CONSOLE=y | ||
| 481 | CONFIG_SERIAL_CORE=y | ||
| 482 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 483 | CONFIG_UNIX98_PTYS=y | ||
| 484 | CONFIG_LEGACY_PTYS=y | ||
| 485 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 486 | |||
| 487 | # | ||
| 488 | # IPMI | ||
| 489 | # | ||
| 490 | # CONFIG_IPMI_HANDLER is not set | ||
| 491 | |||
| 492 | # | ||
| 493 | # Watchdog Cards | ||
| 494 | # | ||
| 495 | # CONFIG_WATCHDOG is not set | ||
| 496 | # CONFIG_NVRAM is not set | ||
| 497 | # CONFIG_RTC is not set | ||
| 498 | # CONFIG_S3C2410_RTC is not set | ||
| 499 | # CONFIG_DTLK is not set | ||
| 500 | # CONFIG_R3964 is not set | ||
| 501 | |||
| 502 | # | ||
| 503 | # Ftape, the floppy tape device driver | ||
| 504 | # | ||
| 505 | # CONFIG_DRM is not set | ||
| 506 | # CONFIG_RAW_DRIVER is not set | ||
| 507 | |||
| 508 | # | ||
| 509 | # TPM devices | ||
| 510 | # | ||
| 511 | # CONFIG_TCG_TPM is not set | ||
| 512 | |||
| 513 | # | ||
| 514 | # I2C support | ||
| 515 | # | ||
| 516 | # CONFIG_I2C is not set | ||
| 517 | |||
| 518 | # | ||
| 519 | # Misc devices | ||
| 520 | # | ||
| 521 | |||
| 522 | # | ||
| 523 | # Multimedia devices | ||
| 524 | # | ||
| 525 | # CONFIG_VIDEO_DEV is not set | ||
| 526 | |||
| 527 | # | ||
| 528 | # Digital Video Broadcasting Devices | ||
| 529 | # | ||
| 530 | # CONFIG_DVB is not set | ||
| 531 | |||
| 532 | # | ||
| 533 | # Graphics support | ||
| 534 | # | ||
| 535 | CONFIG_FB=y | ||
| 536 | CONFIG_FB_CFB_FILLRECT=y | ||
| 537 | CONFIG_FB_CFB_COPYAREA=y | ||
| 538 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
| 539 | CONFIG_FB_SOFT_CURSOR=y | ||
| 540 | # CONFIG_FB_MODE_HELPERS is not set | ||
| 541 | # CONFIG_FB_TILEBLITTING is not set | ||
| 542 | CONFIG_FB_VIRTUAL=y | ||
| 543 | |||
| 544 | # | ||
| 545 | # Console display driver support | ||
| 546 | # | ||
| 547 | # CONFIG_VGA_CONSOLE is not set | ||
| 548 | CONFIG_DUMMY_CONSOLE=y | ||
| 549 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 550 | # CONFIG_FONTS is not set | ||
| 551 | CONFIG_FONT_8x8=y | ||
| 552 | CONFIG_FONT_8x16=y | ||
| 553 | |||
| 554 | # | ||
| 555 | # Logo configuration | ||
| 556 | # | ||
| 557 | # CONFIG_LOGO is not set | ||
| 558 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 559 | |||
| 560 | # | ||
| 561 | # Sound | ||
| 562 | # | ||
| 563 | # CONFIG_SOUND is not set | ||
| 564 | |||
| 565 | # | ||
| 566 | # USB support | ||
| 567 | # | ||
| 568 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 569 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
| 570 | # CONFIG_USB is not set | ||
| 571 | |||
| 572 | # | ||
| 573 | # USB Gadget Support | ||
| 574 | # | ||
| 575 | # CONFIG_USB_GADGET is not set | ||
| 576 | |||
| 577 | # | ||
| 578 | # MMC/SD Card support | ||
| 579 | # | ||
| 580 | # CONFIG_MMC is not set | ||
| 581 | |||
| 582 | # | ||
| 583 | # File systems | ||
| 584 | # | ||
| 585 | CONFIG_EXT2_FS=y | ||
| 586 | # CONFIG_EXT2_FS_XATTR is not set | ||
| 587 | # CONFIG_EXT3_FS is not set | ||
| 588 | # CONFIG_JBD is not set | ||
| 589 | # CONFIG_REISERFS_FS is not set | ||
| 590 | # CONFIG_JFS_FS is not set | ||
| 591 | |||
| 592 | # | ||
| 593 | # XFS support | ||
| 594 | # | ||
| 595 | # CONFIG_XFS_FS is not set | ||
| 596 | # CONFIG_MINIX_FS is not set | ||
| 597 | CONFIG_ROMFS_FS=y | ||
| 598 | # CONFIG_QUOTA is not set | ||
| 599 | CONFIG_DNOTIFY=y | ||
| 600 | # CONFIG_AUTOFS_FS is not set | ||
| 601 | # CONFIG_AUTOFS4_FS is not set | ||
| 602 | |||
| 603 | # | ||
| 604 | # CD-ROM/DVD Filesystems | ||
| 605 | # | ||
| 606 | # CONFIG_ISO9660_FS is not set | ||
| 607 | # CONFIG_UDF_FS is not set | ||
| 608 | |||
| 609 | # | ||
| 610 | # DOS/FAT/NT Filesystems | ||
| 611 | # | ||
| 612 | # CONFIG_MSDOS_FS is not set | ||
| 613 | # CONFIG_VFAT_FS is not set | ||
| 614 | # CONFIG_NTFS_FS is not set | ||
| 615 | |||
| 616 | # | ||
| 617 | # Pseudo filesystems | ||
| 618 | # | ||
| 619 | CONFIG_PROC_FS=y | ||
| 620 | CONFIG_SYSFS=y | ||
| 621 | # CONFIG_DEVFS_FS is not set | ||
| 622 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
| 623 | # CONFIG_TMPFS is not set | ||
| 624 | # CONFIG_HUGETLB_PAGE is not set | ||
| 625 | CONFIG_RAMFS=y | ||
| 626 | |||
| 627 | # | ||
| 628 | # Miscellaneous filesystems | ||
| 629 | # | ||
| 630 | # CONFIG_ADFS_FS is not set | ||
| 631 | # CONFIG_AFFS_FS is not set | ||
| 632 | # CONFIG_HFS_FS is not set | ||
| 633 | # CONFIG_HFSPLUS_FS is not set | ||
| 634 | # CONFIG_BEFS_FS is not set | ||
| 635 | # CONFIG_BFS_FS is not set | ||
| 636 | # CONFIG_EFS_FS is not set | ||
| 637 | # CONFIG_JFFS_FS is not set | ||
| 638 | # CONFIG_JFFS2_FS is not set | ||
| 639 | # CONFIG_CRAMFS is not set | ||
| 640 | # CONFIG_VXFS_FS is not set | ||
| 641 | # CONFIG_HPFS_FS is not set | ||
| 642 | # CONFIG_QNX4FS_FS is not set | ||
| 643 | # CONFIG_SYSV_FS is not set | ||
| 644 | # CONFIG_UFS_FS is not set | ||
| 645 | |||
| 646 | # | ||
| 647 | # Network File Systems | ||
| 648 | # | ||
| 649 | CONFIG_NFS_FS=y | ||
| 650 | # CONFIG_NFS_V3 is not set | ||
| 651 | # CONFIG_NFS_V4 is not set | ||
| 652 | # CONFIG_NFS_DIRECTIO is not set | ||
| 653 | # CONFIG_NFSD is not set | ||
| 654 | CONFIG_ROOT_NFS=y | ||
| 655 | CONFIG_LOCKD=y | ||
| 656 | CONFIG_SUNRPC=y | ||
| 657 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 658 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 659 | # CONFIG_SMB_FS is not set | ||
| 660 | # CONFIG_CIFS is not set | ||
| 661 | # CONFIG_NCP_FS is not set | ||
| 662 | # CONFIG_CODA_FS is not set | ||
| 663 | # CONFIG_AFS_FS is not set | ||
| 664 | |||
| 665 | # | ||
| 666 | # Partition Types | ||
| 667 | # | ||
| 668 | CONFIG_PARTITION_ADVANCED=y | ||
| 669 | # CONFIG_ACORN_PARTITION is not set | ||
| 670 | # CONFIG_OSF_PARTITION is not set | ||
| 671 | # CONFIG_AMIGA_PARTITION is not set | ||
| 672 | # CONFIG_ATARI_PARTITION is not set | ||
| 673 | # CONFIG_MAC_PARTITION is not set | ||
| 674 | # CONFIG_MSDOS_PARTITION is not set | ||
| 675 | # CONFIG_LDM_PARTITION is not set | ||
| 676 | # CONFIG_SGI_PARTITION is not set | ||
| 677 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 678 | # CONFIG_SUN_PARTITION is not set | ||
| 679 | # CONFIG_EFI_PARTITION is not set | ||
| 680 | |||
| 681 | # | ||
| 682 | # Native Language Support | ||
| 683 | # | ||
| 684 | # CONFIG_NLS is not set | ||
| 685 | |||
| 686 | # | ||
| 687 | # Profiling support | ||
| 688 | # | ||
| 689 | # CONFIG_PROFILING is not set | ||
| 690 | |||
| 691 | # | ||
| 692 | # Kernel hacking | ||
| 693 | # | ||
| 694 | # CONFIG_PRINTK_TIME is not set | ||
| 695 | CONFIG_DEBUG_KERNEL=y | ||
| 696 | # CONFIG_MAGIC_SYSRQ is not set | ||
| 697 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 698 | # CONFIG_SCHEDSTATS is not set | ||
| 699 | # CONFIG_DEBUG_SLAB is not set | ||
| 700 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 701 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 702 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 703 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 704 | # CONFIG_DEBUG_INFO is not set | ||
| 705 | # CONFIG_DEBUG_FS is not set | ||
| 706 | CONFIG_FRAME_POINTER=y | ||
| 707 | CONFIG_DEBUG_USER=y | ||
| 708 | # CONFIG_DEBUG_WAITQ is not set | ||
| 709 | # CONFIG_DEBUG_ERRORS is not set | ||
| 710 | CONFIG_DEBUG_LL=y | ||
| 711 | # CONFIG_DEBUG_ICEDCC is not set | ||
| 712 | CONFIG_DEBUG_S3C2410_PORT=y | ||
| 713 | CONFIG_DEBUG_S3C2410_UART=0 | ||
| 714 | |||
| 715 | # | ||
| 716 | # Security options | ||
| 717 | # | ||
| 718 | # CONFIG_KEYS is not set | ||
| 719 | # CONFIG_SECURITY is not set | ||
| 720 | |||
| 721 | # | ||
| 722 | # Cryptographic options | ||
| 723 | # | ||
| 724 | # CONFIG_CRYPTO is not set | ||
| 725 | |||
| 726 | # | ||
| 727 | # Hardware crypto devices | ||
| 728 | # | ||
| 729 | |||
| 730 | # | ||
| 731 | # Library routines | ||
| 732 | # | ||
| 733 | # CONFIG_CRC_CCITT is not set | ||
| 734 | CONFIG_CRC32=y | ||
| 735 | CONFIG_LIBCRC32C=y | ||
diff --git a/arch/arm/configs/versatile_defconfig b/arch/arm/configs/versatile_defconfig index 96b7a7762426..f7bf6ef27d19 100644 --- a/arch/arm/configs/versatile_defconfig +++ b/arch/arm/configs/versatile_defconfig | |||
| @@ -200,7 +200,7 @@ CONFIG_BINFMT_ELF=y | |||
| 200 | # Power management options | 200 | # Power management options |
| 201 | # | 201 | # |
| 202 | CONFIG_PM=y | 202 | CONFIG_PM=y |
| 203 | CONFIG_PM_LEGACY=y | 203 | # CONFIG_PM_LEGACY is not set |
| 204 | # CONFIG_PM_DEBUG is not set | 204 | # CONFIG_PM_DEBUG is not set |
| 205 | # CONFIG_APM is not set | 205 | # CONFIG_APM is not set |
| 206 | 206 | ||
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index da69e660574b..4779f474f911 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
| @@ -178,9 +178,3 @@ EXPORT_SYMBOL(_find_next_zero_bit_be); | |||
| 178 | EXPORT_SYMBOL(_find_first_bit_be); | 178 | EXPORT_SYMBOL(_find_first_bit_be); |
| 179 | EXPORT_SYMBOL(_find_next_bit_be); | 179 | EXPORT_SYMBOL(_find_next_bit_be); |
| 180 | #endif | 180 | #endif |
| 181 | |||
| 182 | /* syscalls */ | ||
| 183 | EXPORT_SYMBOL(sys_write); | ||
| 184 | EXPORT_SYMBOL(sys_lseek); | ||
| 185 | EXPORT_SYMBOL(sys_exit); | ||
| 186 | EXPORT_SYMBOL(sys_wait4); | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 6bbd93dd186a..29efc9f82057 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -357,6 +357,9 @@ static void __init setup_processor(void) | |||
| 357 | #ifndef CONFIG_VFP | 357 | #ifndef CONFIG_VFP |
| 358 | elf_hwcap &= ~HWCAP_VFP; | 358 | elf_hwcap &= ~HWCAP_VFP; |
| 359 | #endif | 359 | #endif |
| 360 | #ifndef CONFIG_IWMMXT | ||
| 361 | elf_hwcap &= ~HWCAP_IWMMXT; | ||
| 362 | #endif | ||
| 360 | 363 | ||
| 361 | cpu_proc_init(); | 364 | cpu_proc_init(); |
| 362 | } | 365 | } |
| @@ -854,6 +857,7 @@ static const char *hwcap_str[] = { | |||
| 854 | "vfp", | 857 | "vfp", |
| 855 | "edsp", | 858 | "edsp", |
| 856 | "java", | 859 | "java", |
| 860 | "iwmmxt", | ||
| 857 | NULL | 861 | NULL |
| 858 | }; | 862 | }; |
| 859 | 863 | ||
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 421329f5e18e..a07d202143c3 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #include <linux/module.h> | ||
| 10 | #include <linux/delay.h> | 11 | #include <linux/delay.h> |
| 11 | #include <linux/init.h> | 12 | #include <linux/init.h> |
| 12 | #include <linux/spinlock.h> | 13 | #include <linux/spinlock.h> |
| @@ -19,6 +20,7 @@ | |||
| 19 | #include <linux/cpu.h> | 20 | #include <linux/cpu.h> |
| 20 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
| 21 | #include <linux/seq_file.h> | 22 | #include <linux/seq_file.h> |
| 23 | #include <linux/irq.h> | ||
| 22 | 24 | ||
| 23 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
| 24 | #include <asm/cacheflush.h> | 26 | #include <asm/cacheflush.h> |
| @@ -474,25 +476,26 @@ void show_local_irqs(struct seq_file *p) | |||
| 474 | seq_putc(p, '\n'); | 476 | seq_putc(p, '\n'); |
| 475 | } | 477 | } |
| 476 | 478 | ||
| 477 | static void ipi_timer(struct pt_regs *regs) | 479 | static void ipi_timer(void) |
| 478 | { | 480 | { |
| 479 | int user = user_mode(regs); | ||
| 480 | |||
| 481 | irq_enter(); | 481 | irq_enter(); |
| 482 | profile_tick(CPU_PROFILING, regs); | 482 | profile_tick(CPU_PROFILING); |
| 483 | update_process_times(user); | 483 | update_process_times(user_mode(get_irq_regs())); |
| 484 | irq_exit(); | 484 | irq_exit(); |
| 485 | } | 485 | } |
| 486 | 486 | ||
| 487 | #ifdef CONFIG_LOCAL_TIMERS | 487 | #ifdef CONFIG_LOCAL_TIMERS |
| 488 | asmlinkage void do_local_timer(struct pt_regs *regs) | 488 | asmlinkage void do_local_timer(struct pt_regs *regs) |
| 489 | { | 489 | { |
| 490 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 490 | int cpu = smp_processor_id(); | 491 | int cpu = smp_processor_id(); |
| 491 | 492 | ||
| 492 | if (local_timer_ack()) { | 493 | if (local_timer_ack()) { |
| 493 | irq_stat[cpu].local_timer_irqs++; | 494 | irq_stat[cpu].local_timer_irqs++; |
| 494 | ipi_timer(regs); | 495 | ipi_timer(); |
| 495 | } | 496 | } |
| 497 | |||
| 498 | set_irq_regs(old_regs); | ||
| 496 | } | 499 | } |
| 497 | #endif | 500 | #endif |
| 498 | 501 | ||
| @@ -551,6 +554,7 @@ asmlinkage void do_IPI(struct pt_regs *regs) | |||
| 551 | { | 554 | { |
| 552 | unsigned int cpu = smp_processor_id(); | 555 | unsigned int cpu = smp_processor_id(); |
| 553 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | 556 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); |
| 557 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 554 | 558 | ||
| 555 | ipi->ipi_count++; | 559 | ipi->ipi_count++; |
| 556 | 560 | ||
| @@ -574,7 +578,7 @@ asmlinkage void do_IPI(struct pt_regs *regs) | |||
| 574 | 578 | ||
| 575 | switch (nextmsg) { | 579 | switch (nextmsg) { |
| 576 | case IPI_TIMER: | 580 | case IPI_TIMER: |
| 577 | ipi_timer(regs); | 581 | ipi_timer(); |
| 578 | break; | 582 | break; |
| 579 | 583 | ||
| 580 | case IPI_RESCHEDULE: | 584 | case IPI_RESCHEDULE: |
| @@ -599,6 +603,8 @@ asmlinkage void do_IPI(struct pt_regs *regs) | |||
| 599 | } | 603 | } |
| 600 | } while (msgs); | 604 | } while (msgs); |
| 601 | } | 605 | } |
| 606 | |||
| 607 | set_irq_regs(old_regs); | ||
| 602 | } | 608 | } |
| 603 | 609 | ||
| 604 | void smp_send_reschedule(int cpu) | 610 | void smp_send_reschedule(int cpu) |
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index c03cab5c4c79..6ff5e3ff6cb5 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
| @@ -220,10 +220,10 @@ EXPORT_SYMBOL(leds_event); | |||
| 220 | #ifdef CONFIG_LEDS_TIMER | 220 | #ifdef CONFIG_LEDS_TIMER |
| 221 | static inline void do_leds(void) | 221 | static inline void do_leds(void) |
| 222 | { | 222 | { |
| 223 | static unsigned int count = 50; | 223 | static unsigned int count = HZ/2; |
| 224 | 224 | ||
| 225 | if (--count == 0) { | 225 | if (--count == 0) { |
| 226 | count = 50; | 226 | count = HZ/2; |
| 227 | leds_event(led_timer); | 227 | leds_event(led_timer); |
| 228 | } | 228 | } |
| 229 | } | 229 | } |
| @@ -327,13 +327,12 @@ EXPORT_SYMBOL(restore_time_delta); | |||
| 327 | */ | 327 | */ |
| 328 | void timer_tick(void) | 328 | void timer_tick(void) |
| 329 | { | 329 | { |
| 330 | struct pt_regs *regs = get_irq_regs(); | ||
| 331 | profile_tick(CPU_PROFILING); | 330 | profile_tick(CPU_PROFILING); |
| 332 | do_leds(); | 331 | do_leds(); |
| 333 | do_set_rtc(); | 332 | do_set_rtc(); |
| 334 | do_timer(1); | 333 | do_timer(1); |
| 335 | #ifndef CONFIG_SMP | 334 | #ifndef CONFIG_SMP |
| 336 | update_process_times(user_mode(regs)); | 335 | update_process_times(user_mode(get_irq_regs())); |
| 337 | #endif | 336 | #endif |
| 338 | } | 337 | } |
| 339 | 338 | ||
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 3ca574ee2772..a8fa75ea07a9 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
| @@ -45,13 +45,7 @@ SECTIONS | |||
| 45 | *(.early_param.init) | 45 | *(.early_param.init) |
| 46 | __early_end = .; | 46 | __early_end = .; |
| 47 | __initcall_start = .; | 47 | __initcall_start = .; |
| 48 | *(.initcall1.init) | 48 | INITCALLS |
| 49 | *(.initcall2.init) | ||
| 50 | *(.initcall3.init) | ||
| 51 | *(.initcall4.init) | ||
| 52 | *(.initcall5.init) | ||
| 53 | *(.initcall6.init) | ||
| 54 | *(.initcall7.init) | ||
| 55 | __initcall_end = .; | 49 | __initcall_end = .; |
| 56 | __con_initcall_start = .; | 50 | __con_initcall_start = .; |
| 57 | *(.con_initcall.init) | 51 | *(.con_initcall.init) |
diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c index fa5d4976f514..1463330ed8ee 100644 --- a/arch/arm/mach-footbridge/dc21285.c +++ b/arch/arm/mach-footbridge/dc21285.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
| 18 | #include <linux/ioport.h> | 18 | #include <linux/ioport.h> |
| 19 | #include <linux/irq.h> | ||
| 19 | 20 | ||
| 20 | #include <asm/io.h> | 21 | #include <asm/io.h> |
| 21 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c index a2c94a47b2b2..2499a7707e3c 100644 --- a/arch/arm/mach-iop32x/n2100.c +++ b/arch/arm/mach-iop32x/n2100.c | |||
| @@ -85,7 +85,7 @@ n2100_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
| 85 | irq = IRQ_IOP32X_XINT0; | 85 | irq = IRQ_IOP32X_XINT0; |
| 86 | } else if (PCI_SLOT(dev->devfn) == 2) { | 86 | } else if (PCI_SLOT(dev->devfn) == 2) { |
| 87 | /* RTL8110SB #2 */ | 87 | /* RTL8110SB #2 */ |
| 88 | irq = IRQ_IOP32X_XINT1; | 88 | irq = IRQ_IOP32X_XINT3; |
| 89 | } else if (PCI_SLOT(dev->devfn) == 3) { | 89 | } else if (PCI_SLOT(dev->devfn) == 3) { |
| 90 | /* Sil3512 */ | 90 | /* Sil3512 */ |
| 91 | irq = IRQ_IOP32X_XINT2; | 91 | irq = IRQ_IOP32X_XINT2; |
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c index a6f14801872d..0fdd03ab36e6 100644 --- a/arch/arm/mach-ixp2000/ixdp2400.c +++ b/arch/arm/mach-ixp2000/ixdp2400.c | |||
| @@ -133,11 +133,13 @@ static void ixdp2400_pci_postinit(void) | |||
| 133 | struct pci_dev *dev; | 133 | struct pci_dev *dev; |
| 134 | 134 | ||
| 135 | if (ixdp2x00_master_npu()) { | 135 | if (ixdp2x00_master_npu()) { |
| 136 | dev = pci_find_slot(1, IXDP2400_SLAVE_ENET_DEVFN); | 136 | dev = pci_get_bus_and_slot(1, IXDP2400_SLAVE_ENET_DEVFN); |
| 137 | pci_remove_bus_device(dev); | 137 | pci_remove_bus_device(dev); |
| 138 | pci_dev_put(dev); | ||
| 138 | } else { | 139 | } else { |
| 139 | dev = pci_find_slot(1, IXDP2400_MASTER_ENET_DEVFN); | 140 | dev = pci_get_bus_and_slot(1, IXDP2400_MASTER_ENET_DEVFN); |
| 140 | pci_remove_bus_device(dev); | 141 | pci_remove_bus_device(dev); |
| 142 | pci_dev_put(dev); | ||
| 141 | 143 | ||
| 142 | ixdp2x00_slave_pci_postinit(); | 144 | ixdp2x00_slave_pci_postinit(); |
| 143 | } | 145 | } |
diff --git a/arch/arm/mach-ixp2000/ixdp2800.c b/arch/arm/mach-ixp2000/ixdp2800.c index 91d36d91dac0..70d247f09a7e 100644 --- a/arch/arm/mach-ixp2000/ixdp2800.c +++ b/arch/arm/mach-ixp2000/ixdp2800.c | |||
| @@ -261,14 +261,16 @@ int __init ixdp2800_pci_init(void) | |||
| 261 | 261 | ||
| 262 | pci_common_init(&ixdp2800_pci); | 262 | pci_common_init(&ixdp2800_pci); |
| 263 | if (ixdp2x00_master_npu()) { | 263 | if (ixdp2x00_master_npu()) { |
| 264 | dev = pci_find_slot(1, IXDP2800_SLAVE_ENET_DEVFN); | 264 | dev = pci_get_bus_and_slot(1, IXDP2800_SLAVE_ENET_DEVFN); |
| 265 | pci_remove_bus_device(dev); | 265 | pci_remove_bus_device(dev); |
| 266 | pci_dev_put(dev); | ||
| 266 | 267 | ||
| 267 | ixdp2800_master_enable_slave(); | 268 | ixdp2800_master_enable_slave(); |
| 268 | ixdp2800_master_wait_for_slave_bus_scan(); | 269 | ixdp2800_master_wait_for_slave_bus_scan(); |
| 269 | } else { | 270 | } else { |
| 270 | dev = pci_find_slot(1, IXDP2800_MASTER_ENET_DEVFN); | 271 | dev = pci_get_bus_and_slot(1, IXDP2800_MASTER_ENET_DEVFN); |
| 271 | pci_remove_bus_device(dev); | 272 | pci_remove_bus_device(dev); |
| 273 | pci_dev_put(dev); | ||
| 272 | } | 274 | } |
| 273 | } | 275 | } |
| 274 | 276 | ||
diff --git a/arch/arm/mach-ixp2000/ixdp2x00.c b/arch/arm/mach-ixp2000/ixdp2x00.c index af48cb52dfc4..aa2655092d2d 100644 --- a/arch/arm/mach-ixp2000/ixdp2x00.c +++ b/arch/arm/mach-ixp2000/ixdp2x00.c | |||
| @@ -241,11 +241,14 @@ void ixdp2x00_slave_pci_postinit(void) | |||
| 241 | /* | 241 | /* |
| 242 | * Remove PMC device is there is one | 242 | * Remove PMC device is there is one |
| 243 | */ | 243 | */ |
| 244 | if((dev = pci_find_slot(1, IXDP2X00_PMC_DEVFN))) | 244 | if((dev = pci_get_bus_and_slot(1, IXDP2X00_PMC_DEVFN))) { |
| 245 | pci_remove_bus_device(dev); | 245 | pci_remove_bus_device(dev); |
| 246 | pci_dev_put(dev); | ||
| 247 | } | ||
| 246 | 248 | ||
| 247 | dev = pci_find_slot(0, IXDP2X00_21555_DEVFN); | 249 | dev = pci_get_bus_and_slot(0, IXDP2X00_21555_DEVFN); |
| 248 | pci_remove_bus_device(dev); | 250 | pci_remove_bus_device(dev); |
| 251 | pci_dev_put(dev); | ||
| 249 | } | 252 | } |
| 250 | 253 | ||
| 251 | /************************************************************************** | 254 | /************************************************************************** |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index c7513f6eb50c..fbe288a8da65 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
| @@ -86,7 +86,8 @@ enum ixp4xx_irq_type { | |||
| 86 | IXP4XX_IRQ_LEVEL, IXP4XX_IRQ_EDGE | 86 | IXP4XX_IRQ_LEVEL, IXP4XX_IRQ_EDGE |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
| 89 | static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type); | 89 | /* Each bit represents an IRQ: 1: edge-triggered, 0: level triggered */ |
| 90 | static unsigned long long ixp4xx_irq_edge = 0; | ||
| 90 | 91 | ||
| 91 | /* | 92 | /* |
| 92 | * IRQ -> GPIO mapping table | 93 | * IRQ -> GPIO mapping table |
| @@ -135,7 +136,11 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) | |||
| 135 | default: | 136 | default: |
| 136 | return -EINVAL; | 137 | return -EINVAL; |
| 137 | } | 138 | } |
| 138 | ixp4xx_config_irq(irq, irq_type); | 139 | |
| 140 | if (irq_type == IXP4XX_IRQ_EDGE) | ||
| 141 | ixp4xx_irq_edge |= (1 << irq); | ||
| 142 | else | ||
| 143 | ixp4xx_irq_edge &= ~(1 << irq); | ||
| 139 | 144 | ||
| 140 | if (line >= 8) { /* pins 8-15 */ | 145 | if (line >= 8) { /* pins 8-15 */ |
| 141 | line -= 8; | 146 | line -= 8; |
| @@ -167,14 +172,6 @@ static void ixp4xx_irq_mask(unsigned int irq) | |||
| 167 | *IXP4XX_ICMR &= ~(1 << irq); | 172 | *IXP4XX_ICMR &= ~(1 << irq); |
| 168 | } | 173 | } |
| 169 | 174 | ||
| 170 | static void ixp4xx_irq_unmask(unsigned int irq) | ||
| 171 | { | ||
| 172 | if (cpu_is_ixp46x() && irq >= 32) | ||
| 173 | *IXP4XX_ICMR2 |= (1 << (irq - 32)); | ||
| 174 | else | ||
| 175 | *IXP4XX_ICMR |= (1 << irq); | ||
| 176 | } | ||
| 177 | |||
| 178 | static void ixp4xx_irq_ack(unsigned int irq) | 175 | static void ixp4xx_irq_ack(unsigned int irq) |
| 179 | { | 176 | { |
| 180 | int line = (irq < 32) ? irq2gpio[irq] : -1; | 177 | int line = (irq < 32) ? irq2gpio[irq] : -1; |
| @@ -187,41 +184,25 @@ static void ixp4xx_irq_ack(unsigned int irq) | |||
| 187 | * Level triggered interrupts on GPIO lines can only be cleared when the | 184 | * Level triggered interrupts on GPIO lines can only be cleared when the |
| 188 | * interrupt condition disappears. | 185 | * interrupt condition disappears. |
| 189 | */ | 186 | */ |
| 190 | static void ixp4xx_irq_level_unmask(unsigned int irq) | 187 | static void ixp4xx_irq_unmask(unsigned int irq) |
| 191 | { | 188 | { |
| 192 | ixp4xx_irq_ack(irq); | 189 | if (!(ixp4xx_irq_edge & (1 << irq))) |
| 193 | ixp4xx_irq_unmask(irq); | 190 | ixp4xx_irq_ack(irq); |
| 194 | } | ||
| 195 | 191 | ||
| 196 | static struct irqchip ixp4xx_irq_level_chip = { | 192 | if (cpu_is_ixp46x() && irq >= 32) |
| 197 | .ack = ixp4xx_irq_mask, | 193 | *IXP4XX_ICMR2 |= (1 << (irq - 32)); |
| 198 | .mask = ixp4xx_irq_mask, | 194 | else |
| 199 | .unmask = ixp4xx_irq_level_unmask, | 195 | *IXP4XX_ICMR |= (1 << irq); |
| 200 | .set_type = ixp4xx_set_irq_type, | 196 | } |
| 201 | }; | ||
| 202 | 197 | ||
| 203 | static struct irqchip ixp4xx_irq_edge_chip = { | 198 | static struct irqchip ixp4xx_irq_chip = { |
| 199 | .name = "IXP4xx", | ||
| 204 | .ack = ixp4xx_irq_ack, | 200 | .ack = ixp4xx_irq_ack, |
| 205 | .mask = ixp4xx_irq_mask, | 201 | .mask = ixp4xx_irq_mask, |
| 206 | .unmask = ixp4xx_irq_unmask, | 202 | .unmask = ixp4xx_irq_unmask, |
| 207 | .set_type = ixp4xx_set_irq_type, | 203 | .set_type = ixp4xx_set_irq_type, |
| 208 | }; | 204 | }; |
| 209 | 205 | ||
| 210 | static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type) | ||
| 211 | { | ||
| 212 | switch (type) { | ||
| 213 | case IXP4XX_IRQ_LEVEL: | ||
| 214 | set_irq_chip(irq, &ixp4xx_irq_level_chip); | ||
| 215 | set_irq_handler(irq, do_level_IRQ); | ||
| 216 | break; | ||
| 217 | case IXP4XX_IRQ_EDGE: | ||
| 218 | set_irq_chip(irq, &ixp4xx_irq_edge_chip); | ||
| 219 | set_irq_handler(irq, do_edge_IRQ); | ||
| 220 | break; | ||
| 221 | } | ||
| 222 | set_irq_flags(irq, IRQF_VALID); | ||
| 223 | } | ||
| 224 | |||
| 225 | void __init ixp4xx_init_irq(void) | 206 | void __init ixp4xx_init_irq(void) |
| 226 | { | 207 | { |
| 227 | int i = 0; | 208 | int i = 0; |
| @@ -241,8 +222,11 @@ void __init ixp4xx_init_irq(void) | |||
| 241 | } | 222 | } |
| 242 | 223 | ||
| 243 | /* Default to all level triggered */ | 224 | /* Default to all level triggered */ |
| 244 | for(i = 0; i < NR_IRQS; i++) | 225 | for(i = 0; i < NR_IRQS; i++) { |
| 245 | ixp4xx_config_irq(i, IXP4XX_IRQ_LEVEL); | 226 | set_irq_chip(i, &ixp4xx_irq_chip); |
| 227 | set_irq_handler(i, do_level_IRQ); | ||
| 228 | set_irq_flags(i, IRQF_VALID); | ||
| 229 | } | ||
| 246 | } | 230 | } |
| 247 | 231 | ||
| 248 | 232 | ||
diff --git a/arch/arm/mach-lh7a40x/Kconfig b/arch/arm/mach-lh7a40x/Kconfig index 558a34f53b1c..147b01928a9b 100644 --- a/arch/arm/mach-lh7a40x/Kconfig +++ b/arch/arm/mach-lh7a40x/Kconfig | |||
| @@ -14,7 +14,7 @@ config MACH_LPD7A400 | |||
| 14 | bool "LPD7A400 Card Engine" | 14 | bool "LPD7A400 Card Engine" |
| 15 | select ARCH_LH7A400 | 15 | select ARCH_LH7A400 |
| 16 | # select IDE_POLL | 16 | # select IDE_POLL |
| 17 | select HAS_TOUCHSCREEN_ADS7843_LH7 | 17 | # select HAS_TOUCHSCREEN_ADS7843_LH7 |
| 18 | help | 18 | help |
| 19 | Say Y here if you are using Logic Product Development's | 19 | Say Y here if you are using Logic Product Development's |
| 20 | LPD7A400 CardEngine. For the time being, the LPD7A400 and | 20 | LPD7A400 CardEngine. For the time being, the LPD7A400 and |
| @@ -24,7 +24,7 @@ config MACH_LPD7A404 | |||
| 24 | bool "LPD7A404 Card Engine" | 24 | bool "LPD7A404 Card Engine" |
| 25 | select ARCH_LH7A404 | 25 | select ARCH_LH7A404 |
| 26 | # select IDE_POLL | 26 | # select IDE_POLL |
| 27 | select HAS_TOUCHSCREEN_ADC_LH7 | 27 | # select HAS_TOUCHSCREEN_ADC_LH7 |
| 28 | help | 28 | help |
| 29 | Say Y here if you are using Logic Product Development's | 29 | Say Y here if you are using Logic Product Development's |
| 30 | LPD7A404 CardEngine. For the time being, the LPD7A400 and | 30 | LPD7A404 CardEngine. For the time being, the LPD7A400 and |
diff --git a/arch/arm/mach-lh7a40x/common.h b/arch/arm/mach-lh7a40x/common.h index 18e8bb4eb202..0ca20c6c83b7 100644 --- a/arch/arm/mach-lh7a40x/common.h +++ b/arch/arm/mach-lh7a40x/common.h | |||
| @@ -15,4 +15,4 @@ extern void lh7a404_init_irq (void); | |||
| 15 | extern void lh7a40x_clcd_init (void); | 15 | extern void lh7a40x_clcd_init (void); |
| 16 | extern void lh7a40x_init_board_irq (void); | 16 | extern void lh7a40x_init_board_irq (void); |
| 17 | 17 | ||
| 18 | #define IRQ_DISPATCH(irq) desc_handle_irq((irq),(irq_desc + irq), regs) | 18 | #define IRQ_DISPATCH(irq) desc_handle_irq((irq),(irq_desc + irq)) |
diff --git a/arch/arm/mach-pnx4008/core.c b/arch/arm/mach-pnx4008/core.c index 3d73c1e93752..429c796938be 100644 --- a/arch/arm/mach-pnx4008/core.c +++ b/arch/arm/mach-pnx4008/core.c | |||
| @@ -133,10 +133,79 @@ static struct platform_device serial_device = { | |||
| 133 | }, | 133 | }, |
| 134 | }; | 134 | }; |
| 135 | 135 | ||
| 136 | static struct platform_device nand_flash_device = { | ||
| 137 | .name = "pnx4008-flash", | ||
| 138 | .id = -1, | ||
| 139 | .dev = { | ||
| 140 | .coherent_dma_mask = 0xFFFFFFFF, | ||
| 141 | }, | ||
| 142 | }; | ||
| 143 | |||
| 144 | /* The dmamask must be set for OHCI to work */ | ||
| 145 | static u64 ohci_dmamask = ~(u32) 0; | ||
| 146 | |||
| 147 | static struct resource ohci_resources[] = { | ||
| 148 | { | ||
| 149 | .start = IO_ADDRESS(PNX4008_USB_CONFIG_BASE), | ||
| 150 | .end = IO_ADDRESS(PNX4008_USB_CONFIG_BASE + 0x100), | ||
| 151 | .flags = IORESOURCE_MEM, | ||
| 152 | }, { | ||
| 153 | .start = USB_HOST_INT, | ||
| 154 | .flags = IORESOURCE_IRQ, | ||
| 155 | }, | ||
| 156 | }; | ||
| 157 | |||
| 158 | static struct platform_device ohci_device = { | ||
| 159 | .name = "pnx4008-usb-ohci", | ||
| 160 | .id = -1, | ||
| 161 | .dev = { | ||
| 162 | .dma_mask = &ohci_dmamask, | ||
| 163 | .coherent_dma_mask = 0xffffffff, | ||
| 164 | }, | ||
| 165 | .num_resources = ARRAY_SIZE(ohci_resources), | ||
| 166 | .resource = ohci_resources, | ||
| 167 | }; | ||
| 168 | |||
| 169 | static struct platform_device sdum_device = { | ||
| 170 | .name = "pnx4008-sdum", | ||
| 171 | .id = 0, | ||
| 172 | .dev = { | ||
| 173 | .coherent_dma_mask = 0xffffffff, | ||
| 174 | }, | ||
| 175 | }; | ||
| 176 | |||
| 177 | static struct platform_device rgbfb_device = { | ||
| 178 | .name = "pnx4008-rgbfb", | ||
| 179 | .id = 0, | ||
| 180 | .dev = { | ||
| 181 | .coherent_dma_mask = 0xffffffff, | ||
| 182 | } | ||
| 183 | }; | ||
| 184 | |||
| 185 | struct resource watchdog_resources[] = { | ||
| 186 | { | ||
| 187 | .start = PNX4008_WDOG_BASE, | ||
| 188 | .end = PNX4008_WDOG_BASE + SZ_4K - 1, | ||
| 189 | .flags = IORESOURCE_MEM, | ||
| 190 | }, | ||
| 191 | }; | ||
| 192 | |||
| 193 | static struct platform_device watchdog_device = { | ||
| 194 | .name = "pnx4008-watchdog", | ||
| 195 | .id = -1, | ||
| 196 | .num_resources = ARRAY_SIZE(watchdog_resources), | ||
| 197 | .resource = watchdog_resources, | ||
| 198 | }; | ||
| 199 | |||
| 136 | static struct platform_device *devices[] __initdata = { | 200 | static struct platform_device *devices[] __initdata = { |
| 137 | &spipnx_1, | 201 | &spipnx_1, |
| 138 | &spipnx_2, | 202 | &spipnx_2, |
| 139 | &serial_device, | 203 | &serial_device, |
| 204 | &ohci_device, | ||
| 205 | &nand_flash_device, | ||
| 206 | &sdum_device, | ||
| 207 | &rgbfb_device, | ||
| 208 | &watchdog_device, | ||
| 140 | }; | 209 | }; |
| 141 | 210 | ||
| 142 | 211 | ||
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index ee80d62119d3..142c33c3dff5 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
| @@ -397,7 +397,7 @@ static void lubbock_mmc_poll(unsigned long data) | |||
| 397 | if (LUB_IRQ_SET_CLR & (1 << 0)) | 397 | if (LUB_IRQ_SET_CLR & (1 << 0)) |
| 398 | mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE); | 398 | mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE); |
| 399 | else { | 399 | else { |
| 400 | (void) mmc_detect_int(LUBBOCK_SD_IRQ, (void *)data, NULL); | 400 | (void) mmc_detect_int(LUBBOCK_SD_IRQ, (void *)data); |
| 401 | enable_irq(LUBBOCK_SD_IRQ); | 401 | enable_irq(LUBBOCK_SD_IRQ); |
| 402 | } | 402 | } |
| 403 | } | 403 | } |
diff --git a/arch/arm/mach-s3c2410/gpio.c b/arch/arm/mach-s3c2410/gpio.c index db6393c99860..ba346546150b 100644 --- a/arch/arm/mach-s3c2410/gpio.c +++ b/arch/arm/mach-s3c2410/gpio.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * Copyright (c) 2004-2005 Simtec Electronics | 3 | * Copyright (c) 2004-2005 Simtec Electronics |
| 4 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
| 5 | * | 5 | * |
| 6 | * S3C2410 GPIO support | 6 | * S3C24XX GPIO support |
| 7 | * | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
| @@ -163,3 +163,22 @@ unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change) | |||
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | EXPORT_SYMBOL(s3c2410_modify_misccr); | 165 | EXPORT_SYMBOL(s3c2410_modify_misccr); |
| 166 | |||
| 167 | int s3c2410_gpio_getirq(unsigned int pin) | ||
| 168 | { | ||
| 169 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15) | ||
| 170 | return -1; /* not valid interrupts */ | ||
| 171 | |||
| 172 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
| 173 | return -1; /* not valid pin */ | ||
| 174 | |||
| 175 | if (pin < S3C2410_GPF4) | ||
| 176 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
| 177 | |||
| 178 | if (pin < S3C2410_GPG0) | ||
| 179 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
| 180 | |||
| 181 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
| 182 | } | ||
| 183 | |||
| 184 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
diff --git a/arch/arm/mach-s3c2410/s3c2410-gpio.c b/arch/arm/mach-s3c2410/s3c2410-gpio.c index a2098f692d83..ec3a276cc3cf 100644 --- a/arch/arm/mach-s3c2410/s3c2410-gpio.c +++ b/arch/arm/mach-s3c2410/s3c2410-gpio.c | |||
| @@ -69,22 +69,3 @@ int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, | |||
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); | 71 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); |
| 72 | |||
| 73 | int s3c2410_gpio_getirq(unsigned int pin) | ||
| 74 | { | ||
| 75 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15) | ||
| 76 | return -1; /* not valid interrupts */ | ||
| 77 | |||
| 78 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
| 79 | return -1; /* not valid pin */ | ||
| 80 | |||
| 81 | if (pin < S3C2410_GPF4) | ||
| 82 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
| 83 | |||
| 84 | if (pin < S3C2410_GPG0) | ||
| 85 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
| 86 | |||
| 87 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
| 88 | } | ||
| 89 | |||
| 90 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
diff --git a/arch/arm/mach-sa1100/cpu-sa1110.c b/arch/arm/mach-sa1100/cpu-sa1110.c index 639597729932..78f4c1346044 100644 --- a/arch/arm/mach-sa1100/cpu-sa1110.c +++ b/arch/arm/mach-sa1100/cpu-sa1110.c | |||
| @@ -82,6 +82,14 @@ static struct sdram_params sdram_tbl[] __initdata = { | |||
| 82 | .twr = 9, | 82 | .twr = 9, |
| 83 | .refresh = 64000, | 83 | .refresh = 64000, |
| 84 | .cas_latency = 3, | 84 | .cas_latency = 3, |
| 85 | }, { /* Samsung K4S281632B-1H */ | ||
| 86 | .name = "K4S281632B-1H", | ||
| 87 | .rows = 12, | ||
| 88 | .tck = 10, | ||
| 89 | .trp = 20, | ||
| 90 | .twr = 10, | ||
| 91 | .refresh = 64000, | ||
| 92 | .cas_latency = 3, | ||
| 85 | }, { /* Samsung KM416S4030CT */ | 93 | }, { /* Samsung KM416S4030CT */ |
| 86 | .name = "KM416S4030CT", | 94 | .name = "KM416S4030CT", |
| 87 | .rows = 13, | 95 | .rows = 13, |
| @@ -366,6 +374,8 @@ static int __init sa1110_clk_init(void) | |||
| 366 | 374 | ||
| 367 | if (machine_is_h3100()) | 375 | if (machine_is_h3100()) |
| 368 | name = "KM416S4030CT"; | 376 | name = "KM416S4030CT"; |
| 377 | if (machine_is_jornada720()) | ||
| 378 | name = "K4S281632B-1H"; | ||
| 369 | } | 379 | } |
| 370 | 380 | ||
| 371 | sdram = sa1110_find_sdram(name); | 381 | sdram = sa1110_find_sdram(name); |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 2aa150b57ba1..3b8576111c16 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
| @@ -188,12 +188,12 @@ static struct map_desc versatile_io_desc[] __initdata = { | |||
| 188 | .length = SZ_4K, | 188 | .length = SZ_4K, |
| 189 | .type = MT_DEVICE | 189 | .type = MT_DEVICE |
| 190 | }, { | 190 | }, { |
| 191 | .virtual = VERSATILE_PCI_VIRT_BASE, | 191 | .virtual = (unsigned long)VERSATILE_PCI_VIRT_BASE, |
| 192 | .pfn = __phys_to_pfn(VERSATILE_PCI_BASE), | 192 | .pfn = __phys_to_pfn(VERSATILE_PCI_BASE), |
| 193 | .length = VERSATILE_PCI_BASE_SIZE, | 193 | .length = VERSATILE_PCI_BASE_SIZE, |
| 194 | .type = MT_DEVICE | 194 | .type = MT_DEVICE |
| 195 | }, { | 195 | }, { |
| 196 | .virtual = VERSATILE_PCI_CFG_VIRT_BASE, | 196 | .virtual = (unsigned long)VERSATILE_PCI_CFG_VIRT_BASE, |
| 197 | .pfn = __phys_to_pfn(VERSATILE_PCI_CFG_BASE), | 197 | .pfn = __phys_to_pfn(VERSATILE_PCI_CFG_BASE), |
| 198 | .length = VERSATILE_PCI_CFG_BASE_SIZE, | 198 | .length = VERSATILE_PCI_CFG_BASE_SIZE, |
| 199 | .type = MT_DEVICE | 199 | .type = MT_DEVICE |
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c index 13bbd08ff841..5cd0b5d9e7eb 100644 --- a/arch/arm/mach-versatile/pci.c +++ b/arch/arm/mach-versatile/pci.c | |||
| @@ -40,14 +40,15 @@ | |||
| 40 | * Cfg 42000000 - 42FFFFFF PCI config | 40 | * Cfg 42000000 - 42FFFFFF PCI config |
| 41 | * | 41 | * |
| 42 | */ | 42 | */ |
| 43 | #define SYS_PCICTL IO_ADDRESS(VERSATILE_SYS_PCICTL) | 43 | #define __IO_ADDRESS(n) ((void __iomem *)(unsigned long)IO_ADDRESS(n)) |
| 44 | #define PCI_IMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0) | 44 | #define SYS_PCICTL __IO_ADDRESS(VERSATILE_SYS_PCICTL) |
| 45 | #define PCI_IMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4) | 45 | #define PCI_IMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0) |
| 46 | #define PCI_IMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8) | 46 | #define PCI_IMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4) |
| 47 | #define PCI_SMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10) | 47 | #define PCI_IMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8) |
| 48 | #define PCI_SMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14) | 48 | #define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10) |
| 49 | #define PCI_SMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18) | 49 | #define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14) |
| 50 | #define PCI_SELFID IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc) | 50 | #define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18) |
| 51 | #define PCI_SELFID __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc) | ||
| 51 | 52 | ||
| 52 | #define DEVICE_ID_OFFSET 0x00 | 53 | #define DEVICE_ID_OFFSET 0x00 |
| 53 | #define CSR_OFFSET 0x04 | 54 | #define CSR_OFFSET 0x04 |
| @@ -76,7 +77,7 @@ static int __init versatile_pci_slot_ignore(char *str) | |||
| 76 | __setup("pci_slot_ignore=", versatile_pci_slot_ignore); | 77 | __setup("pci_slot_ignore=", versatile_pci_slot_ignore); |
| 77 | 78 | ||
| 78 | 79 | ||
| 79 | static unsigned long __pci_addr(struct pci_bus *bus, | 80 | static void __iomem *__pci_addr(struct pci_bus *bus, |
| 80 | unsigned int devfn, int offset) | 81 | unsigned int devfn, int offset) |
| 81 | { | 82 | { |
| 82 | unsigned int busnr = bus->number; | 83 | unsigned int busnr = bus->number; |
| @@ -91,14 +92,14 @@ static unsigned long __pci_addr(struct pci_bus *bus, | |||
| 91 | if (devfn > 255) | 92 | if (devfn > 255) |
| 92 | BUG(); | 93 | BUG(); |
| 93 | 94 | ||
| 94 | return (VERSATILE_PCI_CFG_VIRT_BASE | (busnr << 16) | | 95 | return VERSATILE_PCI_CFG_VIRT_BASE + ((busnr << 16) | |
| 95 | (PCI_SLOT(devfn) << 11) | (PCI_FUNC(devfn) << 8) | offset); | 96 | (PCI_SLOT(devfn) << 11) | (PCI_FUNC(devfn) << 8) | offset); |
| 96 | } | 97 | } |
| 97 | 98 | ||
| 98 | static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int where, | 99 | static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int where, |
| 99 | int size, u32 *val) | 100 | int size, u32 *val) |
| 100 | { | 101 | { |
| 101 | unsigned long addr = __pci_addr(bus, devfn, where); | 102 | void __iomem *addr = __pci_addr(bus, devfn, where & ~3); |
| 102 | u32 v; | 103 | u32 v; |
| 103 | int slot = PCI_SLOT(devfn); | 104 | int slot = PCI_SLOT(devfn); |
| 104 | 105 | ||
| @@ -121,13 +122,12 @@ static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int wh | |||
| 121 | break; | 122 | break; |
| 122 | 123 | ||
| 123 | case 2: | 124 | case 2: |
| 124 | v = __raw_readl(addr & ~3); | 125 | v = __raw_readl(addr); |
| 125 | if (addr & 2) v >>= 16; | 126 | if (where & 2) v >>= 16; |
| 126 | v &= 0xffff; | 127 | v &= 0xffff; |
| 127 | break; | 128 | break; |
| 128 | 129 | ||
| 129 | default: | 130 | default: |
| 130 | addr &= ~3; | ||
| 131 | v = __raw_readl(addr); | 131 | v = __raw_readl(addr); |
| 132 | break; | 132 | break; |
| 133 | } | 133 | } |
| @@ -140,7 +140,7 @@ static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int wh | |||
| 140 | static int versatile_write_config(struct pci_bus *bus, unsigned int devfn, int where, | 140 | static int versatile_write_config(struct pci_bus *bus, unsigned int devfn, int where, |
| 141 | int size, u32 val) | 141 | int size, u32 val) |
| 142 | { | 142 | { |
| 143 | unsigned long addr = __pci_addr(bus, devfn, where); | 143 | void __iomem *addr = __pci_addr(bus, devfn, where); |
| 144 | int slot = PCI_SLOT(devfn); | 144 | int slot = PCI_SLOT(devfn); |
| 145 | 145 | ||
| 146 | if (pci_slot_ignore & (1 << slot)) { | 146 | if (pci_slot_ignore & (1 << slot)) { |
| @@ -279,7 +279,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys) | |||
| 279 | printk("PCI core found (slot %d)\n",myslot); | 279 | printk("PCI core found (slot %d)\n",myslot); |
| 280 | 280 | ||
| 281 | __raw_writel(myslot, PCI_SELFID); | 281 | __raw_writel(myslot, PCI_SELFID); |
| 282 | local_pci_cfg_base = (void *) VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11); | 282 | local_pci_cfg_base = VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11); |
| 283 | 283 | ||
| 284 | val = __raw_readl(local_pci_cfg_base + CSR_OFFSET); | 284 | val = __raw_readl(local_pci_cfg_base + CSR_OFFSET); |
| 285 | val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; | 285 | val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; |
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 22217fe2650b..b5814b4b6f35 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
| @@ -32,40 +32,51 @@ extern unsigned long phys_initrd_start; | |||
| 32 | extern unsigned long phys_initrd_size; | 32 | extern unsigned long phys_initrd_size; |
| 33 | 33 | ||
| 34 | /* | 34 | /* |
| 35 | * The sole use of this is to pass memory configuration | 35 | * This is used to pass memory configuration data from paging_init |
| 36 | * data from paging_init to mem_init. | 36 | * to mem_init, and by show_mem() to skip holes in the memory map. |
| 37 | */ | 37 | */ |
| 38 | static struct meminfo meminfo __initdata = { 0, }; | 38 | static struct meminfo meminfo = { 0, }; |
| 39 | |||
| 40 | #define for_each_nodebank(iter,mi,no) \ | ||
| 41 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
| 42 | if (mi->bank[iter].node == no) | ||
| 39 | 43 | ||
| 40 | void show_mem(void) | 44 | void show_mem(void) |
| 41 | { | 45 | { |
| 42 | int free = 0, total = 0, reserved = 0; | 46 | int free = 0, total = 0, reserved = 0; |
| 43 | int shared = 0, cached = 0, slab = 0, node; | 47 | int shared = 0, cached = 0, slab = 0, node, i; |
| 48 | struct meminfo * mi = &meminfo; | ||
| 44 | 49 | ||
| 45 | printk("Mem-info:\n"); | 50 | printk("Mem-info:\n"); |
| 46 | show_free_areas(); | 51 | show_free_areas(); |
| 47 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 52 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
| 48 | 53 | ||
| 49 | for_each_online_node(node) { | 54 | for_each_online_node(node) { |
| 50 | struct page *page, *end; | 55 | for_each_nodebank (i,mi,node) { |
| 51 | 56 | unsigned int pfn1, pfn2; | |
| 52 | page = NODE_MEM_MAP(node); | 57 | struct page *page, *end; |
| 53 | end = page + NODE_DATA(node)->node_spanned_pages; | 58 | |
| 54 | 59 | pfn1 = mi->bank[i].start >> PAGE_SHIFT; | |
| 55 | do { | 60 | pfn2 = (mi->bank[i].size + mi->bank[i].start) >> PAGE_SHIFT; |
| 56 | total++; | 61 | |
| 57 | if (PageReserved(page)) | 62 | page = NODE_MEM_MAP(node) + pfn1; |
| 58 | reserved++; | 63 | end = NODE_MEM_MAP(node) + pfn2; |
| 59 | else if (PageSwapCache(page)) | 64 | |
| 60 | cached++; | 65 | do { |
| 61 | else if (PageSlab(page)) | 66 | total++; |
| 62 | slab++; | 67 | if (PageReserved(page)) |
| 63 | else if (!page_count(page)) | 68 | reserved++; |
| 64 | free++; | 69 | else if (PageSwapCache(page)) |
| 65 | else | 70 | cached++; |
| 66 | shared += page_count(page) - 1; | 71 | else if (PageSlab(page)) |
| 67 | page++; | 72 | slab++; |
| 68 | } while (page < end); | 73 | else if (!page_count(page)) |
| 74 | free++; | ||
| 75 | else | ||
| 76 | shared += page_count(page) - 1; | ||
| 77 | page++; | ||
| 78 | } while (page < end); | ||
| 79 | } | ||
| 69 | } | 80 | } |
| 70 | 81 | ||
| 71 | printk("%d pages of RAM\n", total); | 82 | printk("%d pages of RAM\n", total); |
| @@ -76,10 +87,6 @@ void show_mem(void) | |||
| 76 | printk("%d pages swap cached\n", cached); | 87 | printk("%d pages swap cached\n", cached); |
| 77 | } | 88 | } |
| 78 | 89 | ||
| 79 | #define for_each_nodebank(iter,mi,no) \ | ||
| 80 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
| 81 | if (mi->bank[iter].node == no) | ||
| 82 | |||
| 83 | /* | 90 | /* |
| 84 | * FIXME: We really want to avoid allocating the bootmap bitmap | 91 | * FIXME: We really want to avoid allocating the bootmap bitmap |
| 85 | * over the top of the initrd. Hopefully, this is located towards | 92 | * over the top of the initrd. Hopefully, this is located towards |
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index e8b377d637f6..2749c1f88d7d 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S | |||
| @@ -909,7 +909,7 @@ __pxa270_proc_info: | |||
| 909 | b __xscale_setup | 909 | b __xscale_setup |
| 910 | .long cpu_arch_name | 910 | .long cpu_arch_name |
| 911 | .long cpu_elf_name | 911 | .long cpu_elf_name |
| 912 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | 912 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_IWMMXT |
| 913 | .long cpu_pxa270_name | 913 | .long cpu_pxa270_name |
| 914 | .long xscale_processor_functions | 914 | .long xscale_processor_functions |
| 915 | .long v4wbi_tlb_fns | 915 | .long v4wbi_tlb_fns |
diff --git a/arch/arm/oprofile/op_counter.h b/arch/arm/oprofile/op_counter.h index 8c5351d751cf..ca942a63b52f 100644 --- a/arch/arm/oprofile/op_counter.h +++ b/arch/arm/oprofile/op_counter.h | |||
| @@ -10,8 +10,6 @@ | |||
| 10 | #ifndef OP_COUNTER_H | 10 | #ifndef OP_COUNTER_H |
| 11 | #define OP_COUNTER_H | 11 | #define OP_COUNTER_H |
| 12 | 12 | ||
| 13 | #define OP_MAX_COUNTER 5 | ||
| 14 | |||
| 15 | /* Per performance monitor configuration as set via | 13 | /* Per performance monitor configuration as set via |
| 16 | * oprofilefs. | 14 | * oprofilefs. |
| 17 | */ | 15 | */ |
diff --git a/arch/arm/oprofile/op_model_xscale.c b/arch/arm/oprofile/op_model_xscale.c index 7899d3ca75a3..7c3289c2acd7 100644 --- a/arch/arm/oprofile/op_model_xscale.c +++ b/arch/arm/oprofile/op_model_xscale.c | |||
| @@ -20,7 +20,8 @@ | |||
| 20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
| 21 | #include <linux/oprofile.h> | 21 | #include <linux/oprofile.h> |
| 22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
| 23 | #include <asm/irq.h> | 23 | #include <linux/irq.h> |
| 24 | |||
| 24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
| 25 | 26 | ||
| 26 | #include "op_counter.h" | 27 | #include "op_counter.h" |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index b02af1d740fa..579c69ae9ff7 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | # | 4 | # |
| 5 | # Up to date versions of this file can be obtained from: | 5 | # Up to date versions of this file can be obtained from: |
| 6 | # | 6 | # |
| 7 | # http://www.arm.linux.org.uk/developer/machines/?action=download | 7 | # http://www.arm.linux.org.uk/developer/machines/download.php |
| 8 | # | 8 | # |
| 9 | # Please do not send patches to this file; it is automatically generated! | 9 | # Please do not send patches to this file; it is automatically generated! |
| 10 | # To add an entry into this database, please see Documentation/arm/README, | 10 | # To add an entry into this database, please see Documentation/arm/README, |
| @@ -12,7 +12,7 @@ | |||
| 12 | # | 12 | # |
| 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
| 14 | # | 14 | # |
| 15 | # Last update: Sat Sep 23 13:20:43 2006 | 15 | # Last update: Mon Oct 16 21:13:36 2006 |
| 16 | # | 16 | # |
| 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
| 18 | # | 18 | # |
| @@ -1157,3 +1157,17 @@ adsturboxb MACH_ADSTURBOXB ADSTURBOXB 1143 | |||
| 1157 | oti4110 MACH_OTI4110 OTI4110 1144 | 1157 | oti4110 MACH_OTI4110 OTI4110 1144 |
| 1158 | hme_pxa MACH_HME_PXA HME_PXA 1145 | 1158 | hme_pxa MACH_HME_PXA HME_PXA 1145 |
| 1159 | deisterdca MACH_DEISTERDCA DEISTERDCA 1146 | 1159 | deisterdca MACH_DEISTERDCA DEISTERDCA 1146 |
| 1160 | ces_ssem2 MACH_CES_SSEM2 CES_SSEM2 1147 | ||
| 1161 | ces_mtr MACH_CES_MTR CES_MTR 1148 | ||
| 1162 | tds_avng_sbc MACH_TDS_AVNG_SBC TDS_AVNG_SBC 1149 | ||
| 1163 | everest MACH_EVEREST EVEREST 1150 | ||
| 1164 | pnx4010 MACH_PNX4010 PNX4010 1151 | ||
| 1165 | oxnas MACH_OXNAS OXNAS 1152 | ||
| 1166 | fiori MACH_FIORI FIORI 1153 | ||
| 1167 | ml1200 MACH_ML1200 ML1200 1154 | ||
| 1168 | cactus MACH_CACTUS CACTUS 1155 | ||
| 1169 | nb2xxx MACH_NB2XXX NB2XXX 1156 | ||
| 1170 | hw6900 MACH_HW6900 HW6900 1157 | ||
| 1171 | cdcs_quoll MACH_CDCS_QUOLL CDCS_QUOLL 1158 | ||
| 1172 | quicksilver MACH_QUICKSILVER QUICKSILVER 1159 | ||
| 1173 | uplat926 MACH_UPLAT926 UPLAT926 1160 | ||
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c index 4fc05ee0a2ef..e44b9ed0f81f 100644 --- a/arch/arm/vfp/vfpdouble.c +++ b/arch/arm/vfp/vfpdouble.c | |||
| @@ -56,7 +56,7 @@ static void vfp_double_normalise_denormal(struct vfp_double *vd) | |||
| 56 | { | 56 | { |
| 57 | int bits = 31 - fls(vd->significand >> 32); | 57 | int bits = 31 - fls(vd->significand >> 32); |
| 58 | if (bits == 31) | 58 | if (bits == 31) |
| 59 | bits = 62 - fls(vd->significand); | 59 | bits = 63 - fls(vd->significand); |
| 60 | 60 | ||
| 61 | vfp_double_dump("normalise_denormal: in", vd); | 61 | vfp_double_dump("normalise_denormal: in", vd); |
| 62 | 62 | ||
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index dedbb449632e..f08eafbddcc1 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c | |||
| @@ -90,7 +90,7 @@ void vfp_raise_sigfpe(unsigned int sicode, struct pt_regs *regs) | |||
| 90 | 90 | ||
| 91 | info.si_signo = SIGFPE; | 91 | info.si_signo = SIGFPE; |
| 92 | info.si_code = sicode; | 92 | info.si_code = sicode; |
| 93 | info.si_addr = (void *)(instruction_pointer(regs) - 4); | 93 | info.si_addr = (void __user *)(instruction_pointer(regs) - 4); |
| 94 | 94 | ||
| 95 | /* | 95 | /* |
| 96 | * This is the same as NWFPE, because it's not clear what | 96 | * This is the same as NWFPE, because it's not clear what |
| @@ -148,6 +148,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ | |||
| 148 | /* | 148 | /* |
| 149 | * These are arranged in priority order, least to highest. | 149 | * These are arranged in priority order, least to highest. |
| 150 | */ | 150 | */ |
| 151 | RAISE(FPSCR_DZC, FPSCR_DZE, FPE_FLTDIV); | ||
| 151 | RAISE(FPSCR_IXC, FPSCR_IXE, FPE_FLTRES); | 152 | RAISE(FPSCR_IXC, FPSCR_IXE, FPE_FLTRES); |
| 152 | RAISE(FPSCR_UFC, FPSCR_UFE, FPE_FLTUND); | 153 | RAISE(FPSCR_UFC, FPSCR_UFE, FPE_FLTUND); |
| 153 | RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF); | 154 | RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF); |
diff --git a/arch/arm26/kernel/armksyms.c b/arch/arm26/kernel/armksyms.c index 07907b6ecb63..93293d04b303 100644 --- a/arch/arm26/kernel/armksyms.c +++ b/arch/arm26/kernel/armksyms.c | |||
| @@ -202,14 +202,6 @@ EXPORT_SYMBOL(_find_next_zero_bit_le); | |||
| 202 | EXPORT_SYMBOL(elf_platform); | 202 | EXPORT_SYMBOL(elf_platform); |
| 203 | EXPORT_SYMBOL(elf_hwcap); | 203 | EXPORT_SYMBOL(elf_hwcap); |
| 204 | 204 | ||
| 205 | /* syscalls */ | ||
| 206 | EXPORT_SYMBOL(sys_write); | ||
| 207 | EXPORT_SYMBOL(sys_read); | ||
| 208 | EXPORT_SYMBOL(sys_lseek); | ||
| 209 | EXPORT_SYMBOL(sys_open); | ||
| 210 | EXPORT_SYMBOL(sys_exit); | ||
| 211 | EXPORT_SYMBOL(sys_wait4); | ||
| 212 | |||
| 213 | #ifdef CONFIG_PREEMPT | 205 | #ifdef CONFIG_PREEMPT |
| 214 | EXPORT_SYMBOL(kernel_flag); | 206 | EXPORT_SYMBOL(kernel_flag); |
| 215 | #endif | 207 | #endif |
diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile index cefc95a73980..7b842e98efed 100644 --- a/arch/avr32/Makefile +++ b/arch/avr32/Makefile | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | # Default target when executing plain make | 8 | # Default target when executing plain make |
| 9 | .PHONY: all | 9 | .PHONY: all |
| 10 | all: uImage vmlinux.elf linux.lst | 10 | all: uImage vmlinux.elf |
| 11 | 11 | ||
| 12 | KBUILD_DEFCONFIG := atstk1002_defconfig | 12 | KBUILD_DEFCONFIG := atstk1002_defconfig |
| 13 | 13 | ||
| @@ -21,9 +21,7 @@ cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000 | |||
| 21 | CFLAGS += $(cpuflags-y) | 21 | CFLAGS += $(cpuflags-y) |
| 22 | AFLAGS += $(cpuflags-y) | 22 | AFLAGS += $(cpuflags-y) |
| 23 | 23 | ||
| 24 | CHECKFLAGS += -D__avr32__ | 24 | CHECKFLAGS += -D__avr32__ -D__BIG_ENDIAN |
| 25 | |||
| 26 | LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) | ||
| 27 | 25 | ||
| 28 | head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o | 26 | head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o |
| 29 | head-y += arch/avr32/kernel/head.o | 27 | head-y += arch/avr32/kernel/head.o |
| @@ -32,7 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/ | |||
| 32 | core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ | 30 | core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ |
| 33 | core-y += arch/avr32/kernel/ | 31 | core-y += arch/avr32/kernel/ |
| 34 | core-y += arch/avr32/mm/ | 32 | core-y += arch/avr32/mm/ |
| 35 | libs-y += arch/avr32/lib/ #$(LIBGCC) | 33 | libs-y += arch/avr32/lib/ |
| 36 | 34 | ||
| 37 | archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap | 35 | archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap |
| 38 | 36 | ||
| @@ -48,6 +46,8 @@ endif | |||
| 48 | 46 | ||
| 49 | archprepare: include/asm-avr32/.arch | 47 | archprepare: include/asm-avr32/.arch |
| 50 | 48 | ||
| 49 | CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch | ||
| 50 | |||
| 51 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec | 51 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec |
| 52 | 52 | ||
| 53 | .PHONY: $(BOOT_TARGETS) install | 53 | .PHONY: $(BOOT_TARGETS) install |
| @@ -71,14 +71,19 @@ vmlinux.elf vmlinux.bin uImage.srec uImage vmlinux.cso: vmlinux | |||
| 71 | install: vmlinux | 71 | install: vmlinux |
| 72 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ | 72 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ |
| 73 | 73 | ||
| 74 | linux.s: vmlinux | 74 | vmlinux.s: vmlinux |
| 75 | $(call if_changed,disasm) | 75 | $(call if_changed,disasm) |
| 76 | 76 | ||
| 77 | linux.lst: vmlinux | 77 | vmlinux.lst: vmlinux |
| 78 | $(call if_changed,listing) | 78 | $(call if_changed,listing) |
| 79 | 79 | ||
| 80 | CLEAN_FILES += vmlinux.s vmlinux.lst | ||
| 81 | |||
| 82 | archclean: | ||
| 83 | $(Q)$(MAKE) $(clean)=$(boot) | ||
| 84 | |||
| 80 | define archhelp | 85 | define archhelp |
| 81 | @echo '* vmlinux.elf - ELF image with load address 0' | 86 | @echo '* vmlinux.elf - ELF image with load address 0' |
| 82 | @echo ' vmlinux.cso - PathFinder CSO image' | 87 | @echo ' vmlinux.cso - PathFinder CSO image' |
| 83 | @echo ' uImage - Create a bootable image for U-Boot' | 88 | @echo '* uImage - Create a bootable image for U-Boot' |
| 84 | endef | 89 | endef |
diff --git a/arch/avr32/boards/atstk1000/setup.c b/arch/avr32/boards/atstk1000/setup.c index 191ab85de9a3..272c011802a7 100644 --- a/arch/avr32/boards/atstk1000/setup.c +++ b/arch/avr32/boards/atstk1000/setup.c | |||
| @@ -21,15 +21,6 @@ struct tag *bootloader_tags __initdata; | |||
| 21 | 21 | ||
| 22 | struct lcdc_platform_data __initdata atstk1000_fb0_data; | 22 | struct lcdc_platform_data __initdata atstk1000_fb0_data; |
| 23 | 23 | ||
| 24 | asmlinkage void __init board_early_init(void) | ||
| 25 | { | ||
| 26 | extern void sdram_init(void); | ||
| 27 | |||
| 28 | #ifdef CONFIG_LOADER_STANDALONE | ||
| 29 | sdram_init(); | ||
| 30 | #endif | ||
| 31 | } | ||
| 32 | |||
| 33 | void __init board_setup_fbmem(unsigned long fbmem_start, | 24 | void __init board_setup_fbmem(unsigned long fbmem_start, |
| 34 | unsigned long fbmem_size) | 25 | unsigned long fbmem_size) |
| 35 | { | 26 | { |
diff --git a/arch/avr32/boot/images/Makefile b/arch/avr32/boot/images/Makefile index ccd74eeecec3..219720a47bf9 100644 --- a/arch/avr32/boot/images/Makefile +++ b/arch/avr32/boot/images/Makefile | |||
| @@ -37,14 +37,12 @@ OBJCOPYFLAGS_vmlinux.elf := --change-section-lma .text-0x80000000 \ | |||
| 37 | --change-section-lma .data-0x80000000 \ | 37 | --change-section-lma .data-0x80000000 \ |
| 38 | --change-section-lma .init-0x80000000 \ | 38 | --change-section-lma .init-0x80000000 \ |
| 39 | --change-section-lma .bss-0x80000000 \ | 39 | --change-section-lma .bss-0x80000000 \ |
| 40 | --change-section-lma .initrd-0x80000000 \ | ||
| 41 | --change-section-lma __param-0x80000000 \ | 40 | --change-section-lma __param-0x80000000 \ |
| 42 | --change-section-lma __ksymtab-0x80000000 \ | 41 | --change-section-lma __ksymtab-0x80000000 \ |
| 43 | --change-section-lma __ksymtab_gpl-0x80000000 \ | 42 | --change-section-lma __ksymtab_gpl-0x80000000 \ |
| 44 | --change-section-lma __kcrctab-0x80000000 \ | 43 | --change-section-lma __kcrctab-0x80000000 \ |
| 45 | --change-section-lma __kcrctab_gpl-0x80000000 \ | 44 | --change-section-lma __kcrctab_gpl-0x80000000 \ |
| 46 | --change-section-lma __ksymtab_strings-0x80000000 \ | 45 | --change-section-lma __ksymtab_strings-0x80000000 \ |
| 47 | --change-section-lma .got-0x80000000 \ | ||
| 48 | --set-start 0xa0000000 | 46 | --set-start 0xa0000000 |
| 49 | $(obj)/vmlinux.elf: vmlinux FORCE | 47 | $(obj)/vmlinux.elf: vmlinux FORCE |
| 50 | $(call if_changed,objcopy) | 48 | $(call if_changed,objcopy) |
| @@ -59,4 +57,4 @@ install: $(BOOTIMAGE) | |||
| 59 | sh $(srctree)/install-kernel.sh $< | 57 | sh $(srctree)/install-kernel.sh $< |
| 60 | 58 | ||
| 61 | # Generated files to be removed upon make clean | 59 | # Generated files to be removed upon make clean |
| 62 | clean-files := vmlinux* uImage uImage.srec | 60 | clean-files := vmlinux.elf vmlinux.bin vmlinux.gz uImage uImage.srec |
diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig index 6c2c5e00dfc7..ae92a14ef9a0 100644 --- a/arch/avr32/configs/atstk1002_defconfig +++ b/arch/avr32/configs/atstk1002_defconfig | |||
| @@ -1,13 +1,14 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Tue Jul 11 12:41:36 2006 | 4 | # Fri Oct 20 11:52:37 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_HARDIRQS=y | 7 | CONFIG_GENERIC_HARDIRQS=y |
| 8 | CONFIG_HARDIRQS_SW_RESEND=y | 8 | CONFIG_HARDIRQS_SW_RESEND=y |
| 9 | CONFIG_GENERIC_IRQ_PROBE=y | 9 | CONFIG_GENERIC_IRQ_PROBE=y |
| 10 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 10 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 11 | CONFIG_GENERIC_TIME=y | ||
| 11 | CONFIG_GENERIC_HWEIGHT=y | 12 | CONFIG_GENERIC_HWEIGHT=y |
| 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 13 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 13 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| @@ -25,16 +26,23 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
| 25 | CONFIG_LOCALVERSION="" | 26 | CONFIG_LOCALVERSION="" |
| 26 | # CONFIG_LOCALVERSION_AUTO is not set | 27 | # CONFIG_LOCALVERSION_AUTO is not set |
| 27 | CONFIG_SWAP=y | 28 | CONFIG_SWAP=y |
| 28 | # CONFIG_SYSVIPC is not set | 29 | CONFIG_SYSVIPC=y |
| 29 | # CONFIG_POSIX_MQUEUE is not set | 30 | # CONFIG_IPC_NS is not set |
| 30 | # CONFIG_BSD_PROCESS_ACCT is not set | 31 | CONFIG_POSIX_MQUEUE=y |
| 31 | CONFIG_SYSCTL=y | 32 | CONFIG_BSD_PROCESS_ACCT=y |
| 32 | # CONFIG_AUDIT is not set | 33 | CONFIG_BSD_PROCESS_ACCT_V3=y |
| 34 | CONFIG_TASKSTATS=y | ||
| 35 | CONFIG_TASK_DELAY_ACCT=y | ||
| 36 | # CONFIG_UTS_NS is not set | ||
| 37 | CONFIG_AUDIT=y | ||
| 33 | # CONFIG_IKCONFIG is not set | 38 | # CONFIG_IKCONFIG is not set |
| 34 | # CONFIG_RELAY is not set | 39 | CONFIG_RELAY=y |
| 35 | CONFIG_INITRAMFS_SOURCE="" | 40 | CONFIG_INITRAMFS_SOURCE="" |
| 36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 41 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 42 | # CONFIG_TASK_XACCT is not set | ||
| 43 | CONFIG_SYSCTL=y | ||
| 37 | CONFIG_EMBEDDED=y | 44 | CONFIG_EMBEDDED=y |
| 45 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 38 | CONFIG_KALLSYMS=y | 46 | CONFIG_KALLSYMS=y |
| 39 | # CONFIG_KALLSYMS_ALL is not set | 47 | # CONFIG_KALLSYMS_ALL is not set |
| 40 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 48 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -43,14 +51,15 @@ CONFIG_PRINTK=y | |||
| 43 | CONFIG_BUG=y | 51 | CONFIG_BUG=y |
| 44 | CONFIG_ELF_CORE=y | 52 | CONFIG_ELF_CORE=y |
| 45 | # CONFIG_BASE_FULL is not set | 53 | # CONFIG_BASE_FULL is not set |
| 46 | # CONFIG_FUTEX is not set | 54 | CONFIG_FUTEX=y |
| 47 | # CONFIG_EPOLL is not set | 55 | CONFIG_EPOLL=y |
| 48 | CONFIG_SHMEM=y | 56 | CONFIG_SHMEM=y |
| 49 | # CONFIG_SLAB is not set | 57 | CONFIG_SLAB=y |
| 50 | # CONFIG_VM_EVENT_COUNTERS is not set | 58 | CONFIG_VM_EVENT_COUNTERS=y |
| 59 | CONFIG_RT_MUTEXES=y | ||
| 51 | # CONFIG_TINY_SHMEM is not set | 60 | # CONFIG_TINY_SHMEM is not set |
| 52 | CONFIG_BASE_SMALL=1 | 61 | CONFIG_BASE_SMALL=1 |
| 53 | CONFIG_SLOB=y | 62 | # CONFIG_SLOB is not set |
| 54 | 63 | ||
| 55 | # | 64 | # |
| 56 | # Loadable module support | 65 | # Loadable module support |
| @@ -65,6 +74,7 @@ CONFIG_MODULE_UNLOAD=y | |||
| 65 | # | 74 | # |
| 66 | # Block layer | 75 | # Block layer |
| 67 | # | 76 | # |
| 77 | CONFIG_BLOCK=y | ||
| 68 | # CONFIG_BLK_DEV_IO_TRACE is not set | 78 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 69 | 79 | ||
| 70 | # | 80 | # |
| @@ -166,10 +176,12 @@ CONFIG_IP_PNP_DHCP=y | |||
| 166 | # CONFIG_INET_TUNNEL is not set | 176 | # CONFIG_INET_TUNNEL is not set |
| 167 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 177 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
| 168 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 178 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
| 179 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 169 | CONFIG_INET_DIAG=y | 180 | CONFIG_INET_DIAG=y |
| 170 | CONFIG_INET_TCP_DIAG=y | 181 | CONFIG_INET_TCP_DIAG=y |
| 171 | # CONFIG_TCP_CONG_ADVANCED is not set | 182 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 172 | CONFIG_TCP_CONG_BIC=y | 183 | CONFIG_TCP_CONG_CUBIC=y |
| 184 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 173 | # CONFIG_IPV6 is not set | 185 | # CONFIG_IPV6 is not set |
| 174 | # CONFIG_INET6_XFRM_TUNNEL is not set | 186 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 175 | # CONFIG_INET6_TUNNEL is not set | 187 | # CONFIG_INET6_TUNNEL is not set |
| @@ -199,7 +211,6 @@ CONFIG_TCP_CONG_BIC=y | |||
| 199 | # CONFIG_ATALK is not set | 211 | # CONFIG_ATALK is not set |
| 200 | # CONFIG_X25 is not set | 212 | # CONFIG_X25 is not set |
| 201 | # CONFIG_LAPB is not set | 213 | # CONFIG_LAPB is not set |
| 202 | # CONFIG_NET_DIVERT is not set | ||
| 203 | # CONFIG_ECONET is not set | 214 | # CONFIG_ECONET is not set |
| 204 | # CONFIG_WAN_ROUTER is not set | 215 | # CONFIG_WAN_ROUTER is not set |
| 205 | 216 | ||
| @@ -212,7 +223,6 @@ CONFIG_TCP_CONG_BIC=y | |||
| 212 | # Network testing | 223 | # Network testing |
| 213 | # | 224 | # |
| 214 | # CONFIG_NET_PKTGEN is not set | 225 | # CONFIG_NET_PKTGEN is not set |
| 215 | # CONFIG_NET_TCPPROBE is not set | ||
| 216 | # CONFIG_HAMRADIO is not set | 226 | # CONFIG_HAMRADIO is not set |
| 217 | # CONFIG_IRDA is not set | 227 | # CONFIG_IRDA is not set |
| 218 | # CONFIG_BT is not set | 228 | # CONFIG_BT is not set |
| @@ -239,7 +249,84 @@ CONFIG_STANDALONE=y | |||
| 239 | # | 249 | # |
| 240 | # Memory Technology Devices (MTD) | 250 | # Memory Technology Devices (MTD) |
| 241 | # | 251 | # |
| 242 | # CONFIG_MTD is not set | 252 | CONFIG_MTD=y |
| 253 | # CONFIG_MTD_DEBUG is not set | ||
| 254 | # CONFIG_MTD_CONCAT is not set | ||
| 255 | CONFIG_MTD_PARTITIONS=y | ||
| 256 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 257 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 258 | |||
| 259 | # | ||
| 260 | # User Modules And Translation Layers | ||
| 261 | # | ||
| 262 | CONFIG_MTD_CHAR=y | ||
| 263 | CONFIG_MTD_BLOCK=y | ||
| 264 | # CONFIG_FTL is not set | ||
| 265 | # CONFIG_NFTL is not set | ||
| 266 | # CONFIG_INFTL is not set | ||
| 267 | # CONFIG_RFD_FTL is not set | ||
| 268 | # CONFIG_SSFDC is not set | ||
| 269 | |||
| 270 | # | ||
| 271 | # RAM/ROM/Flash chip drivers | ||
| 272 | # | ||
| 273 | CONFIG_MTD_CFI=y | ||
| 274 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 275 | CONFIG_MTD_GEN_PROBE=y | ||
| 276 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 277 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 278 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 279 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 280 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 281 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 282 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 283 | CONFIG_MTD_CFI_I1=y | ||
| 284 | CONFIG_MTD_CFI_I2=y | ||
| 285 | # CONFIG_MTD_CFI_I4 is not set | ||
| 286 | # CONFIG_MTD_CFI_I8 is not set | ||
| 287 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 288 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 289 | # CONFIG_MTD_CFI_STAA is not set | ||
| 290 | CONFIG_MTD_CFI_UTIL=y | ||
| 291 | # CONFIG_MTD_RAM is not set | ||
| 292 | # CONFIG_MTD_ROM is not set | ||
| 293 | # CONFIG_MTD_ABSENT is not set | ||
| 294 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||
| 295 | |||
| 296 | # | ||
| 297 | # Mapping drivers for chip access | ||
| 298 | # | ||
| 299 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 300 | CONFIG_MTD_PHYSMAP=y | ||
| 301 | CONFIG_MTD_PHYSMAP_START=0x8000000 | ||
| 302 | CONFIG_MTD_PHYSMAP_LEN=0x0 | ||
| 303 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | ||
| 304 | # CONFIG_MTD_PLATRAM is not set | ||
| 305 | |||
| 306 | # | ||
| 307 | # Self-contained MTD device drivers | ||
| 308 | # | ||
| 309 | # CONFIG_MTD_SLRAM is not set | ||
| 310 | # CONFIG_MTD_PHRAM is not set | ||
| 311 | # CONFIG_MTD_MTDRAM is not set | ||
| 312 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 313 | |||
| 314 | # | ||
| 315 | # Disk-On-Chip Device Drivers | ||
| 316 | # | ||
| 317 | # CONFIG_MTD_DOC2000 is not set | ||
| 318 | # CONFIG_MTD_DOC2001 is not set | ||
| 319 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 320 | |||
| 321 | # | ||
| 322 | # NAND Flash Device Drivers | ||
| 323 | # | ||
| 324 | # CONFIG_MTD_NAND is not set | ||
| 325 | |||
| 326 | # | ||
| 327 | # OneNAND Flash Device Drivers | ||
| 328 | # | ||
| 329 | # CONFIG_MTD_ONENAND is not set | ||
| 243 | 330 | ||
| 244 | # | 331 | # |
| 245 | # Parallel port support | 332 | # Parallel port support |
| @@ -260,11 +347,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 260 | CONFIG_BLK_DEV_RAM=m | 347 | CONFIG_BLK_DEV_RAM=m |
| 261 | CONFIG_BLK_DEV_RAM_COUNT=16 | 348 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 262 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 349 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 350 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 263 | CONFIG_BLK_DEV_INITRD=y | 351 | CONFIG_BLK_DEV_INITRD=y |
| 264 | # CONFIG_CDROM_PKTCDVD is not set | 352 | # CONFIG_CDROM_PKTCDVD is not set |
| 265 | # CONFIG_ATA_OVER_ETH is not set | 353 | # CONFIG_ATA_OVER_ETH is not set |
| 266 | 354 | ||
| 267 | # | 355 | # |
| 356 | # Misc devices | ||
| 357 | # | ||
| 358 | # CONFIG_SGI_IOC4 is not set | ||
| 359 | # CONFIG_TIFM_CORE is not set | ||
| 360 | |||
| 361 | # | ||
| 268 | # ATA/ATAPI/MFM/RLL support | 362 | # ATA/ATAPI/MFM/RLL support |
| 269 | # | 363 | # |
| 270 | # CONFIG_IDE is not set | 364 | # CONFIG_IDE is not set |
| @@ -274,6 +368,12 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 274 | # | 368 | # |
| 275 | # CONFIG_RAID_ATTRS is not set | 369 | # CONFIG_RAID_ATTRS is not set |
| 276 | # CONFIG_SCSI is not set | 370 | # CONFIG_SCSI is not set |
| 371 | # CONFIG_SCSI_NETLINK is not set | ||
| 372 | |||
| 373 | # | ||
| 374 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 375 | # | ||
| 376 | # CONFIG_ATA is not set | ||
| 277 | 377 | ||
| 278 | # | 378 | # |
| 279 | # Multi-device support (RAID and LVM) | 379 | # Multi-device support (RAID and LVM) |
| @@ -305,14 +405,11 @@ CONFIG_TUN=m | |||
| 305 | # | 405 | # |
| 306 | # PHY device support | 406 | # PHY device support |
| 307 | # | 407 | # |
| 308 | # CONFIG_PHYLIB is not set | ||
| 309 | 408 | ||
| 310 | # | 409 | # |
| 311 | # Ethernet (10 or 100Mbit) | 410 | # Ethernet (10 or 100Mbit) |
| 312 | # | 411 | # |
| 313 | CONFIG_NET_ETHERNET=y | 412 | # CONFIG_NET_ETHERNET is not set |
| 314 | CONFIG_MII=y | ||
| 315 | CONFIG_MACB=y | ||
| 316 | 413 | ||
| 317 | # | 414 | # |
| 318 | # Ethernet (1000 Mbit) | 415 | # Ethernet (1000 Mbit) |
| @@ -341,10 +438,11 @@ CONFIG_PPP=m | |||
| 341 | CONFIG_PPP_ASYNC=m | 438 | CONFIG_PPP_ASYNC=m |
| 342 | # CONFIG_PPP_SYNC_TTY is not set | 439 | # CONFIG_PPP_SYNC_TTY is not set |
| 343 | CONFIG_PPP_DEFLATE=m | 440 | CONFIG_PPP_DEFLATE=m |
| 344 | # CONFIG_PPP_BSDCOMP is not set | 441 | CONFIG_PPP_BSDCOMP=m |
| 345 | # CONFIG_PPP_MPPE is not set | 442 | # CONFIG_PPP_MPPE is not set |
| 346 | # CONFIG_PPPOE is not set | 443 | # CONFIG_PPPOE is not set |
| 347 | # CONFIG_SLIP is not set | 444 | # CONFIG_SLIP is not set |
| 445 | CONFIG_SLHC=m | ||
| 348 | # CONFIG_SHAPER is not set | 446 | # CONFIG_SHAPER is not set |
| 349 | # CONFIG_NETCONSOLE is not set | 447 | # CONFIG_NETCONSOLE is not set |
| 350 | # CONFIG_NETPOLL is not set | 448 | # CONFIG_NETPOLL is not set |
| @@ -417,7 +515,6 @@ CONFIG_UNIX98_PTYS=y | |||
| 417 | # TPM devices | 515 | # TPM devices |
| 418 | # | 516 | # |
| 419 | # CONFIG_TCG_TPM is not set | 517 | # CONFIG_TCG_TPM is not set |
| 420 | # CONFIG_TELCLOCK is not set | ||
| 421 | 518 | ||
| 422 | # | 519 | # |
| 423 | # I2C support | 520 | # I2C support |
| @@ -427,23 +524,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 427 | # | 524 | # |
| 428 | # SPI support | 525 | # SPI support |
| 429 | # | 526 | # |
| 430 | CONFIG_SPI=y | 527 | # CONFIG_SPI is not set |
| 431 | # CONFIG_SPI_DEBUG is not set | 528 | # CONFIG_SPI_MASTER is not set |
| 432 | CONFIG_SPI_MASTER=y | ||
| 433 | |||
| 434 | # | ||
| 435 | # SPI Master Controller Drivers | ||
| 436 | # | ||
| 437 | CONFIG_SPI_ATMEL=m | ||
| 438 | # CONFIG_SPI_BITBANG is not set | ||
| 439 | |||
| 440 | # | ||
| 441 | # SPI Protocol Masters | ||
| 442 | # | ||
| 443 | 529 | ||
| 444 | # | 530 | # |
| 445 | # Dallas's 1-wire bus | 531 | # Dallas's 1-wire bus |
| 446 | # | 532 | # |
| 533 | # CONFIG_W1 is not set | ||
| 447 | 534 | ||
| 448 | # | 535 | # |
| 449 | # Hardware Monitoring support | 536 | # Hardware Monitoring support |
| @@ -452,14 +539,9 @@ CONFIG_SPI_ATMEL=m | |||
| 452 | # CONFIG_HWMON_VID is not set | 539 | # CONFIG_HWMON_VID is not set |
| 453 | 540 | ||
| 454 | # | 541 | # |
| 455 | # Misc devices | ||
| 456 | # | ||
| 457 | |||
| 458 | # | ||
| 459 | # Multimedia devices | 542 | # Multimedia devices |
| 460 | # | 543 | # |
| 461 | # CONFIG_VIDEO_DEV is not set | 544 | # CONFIG_VIDEO_DEV is not set |
| 462 | CONFIG_VIDEO_V4L2=y | ||
| 463 | 545 | ||
| 464 | # | 546 | # |
| 465 | # Digital Video Broadcasting Devices | 547 | # Digital Video Broadcasting Devices |
| @@ -470,28 +552,8 @@ CONFIG_VIDEO_V4L2=y | |||
| 470 | # Graphics support | 552 | # Graphics support |
| 471 | # | 553 | # |
| 472 | # CONFIG_FIRMWARE_EDID is not set | 554 | # CONFIG_FIRMWARE_EDID is not set |
| 473 | CONFIG_FB=m | 555 | # CONFIG_FB is not set |
| 474 | CONFIG_FB_CFB_FILLRECT=m | 556 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
| 475 | CONFIG_FB_CFB_COPYAREA=m | ||
| 476 | CONFIG_FB_CFB_IMAGEBLIT=m | ||
| 477 | # CONFIG_FB_MACMODES is not set | ||
| 478 | # CONFIG_FB_BACKLIGHT is not set | ||
| 479 | # CONFIG_FB_MODE_HELPERS is not set | ||
| 480 | # CONFIG_FB_TILEBLITTING is not set | ||
| 481 | CONFIG_FB_SIDSA=m | ||
| 482 | CONFIG_FB_SIDSA_DEFAULT_BPP=24 | ||
| 483 | # CONFIG_FB_S1D13XXX is not set | ||
| 484 | # CONFIG_FB_VIRTUAL is not set | ||
| 485 | |||
| 486 | # | ||
| 487 | # Logo configuration | ||
| 488 | # | ||
| 489 | # CONFIG_LOGO is not set | ||
| 490 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 491 | # CONFIG_BACKLIGHT_CLASS_DEVICE is not set | ||
| 492 | CONFIG_LCD_CLASS_DEVICE=m | ||
| 493 | CONFIG_LCD_DEVICE=y | ||
| 494 | CONFIG_LCD_LTV350QV=m | ||
| 495 | 557 | ||
| 496 | # | 558 | # |
| 497 | # Sound | 559 | # Sound |
| @@ -561,18 +623,21 @@ CONFIG_LCD_LTV350QV=m | |||
| 561 | # | 623 | # |
| 562 | # File systems | 624 | # File systems |
| 563 | # | 625 | # |
| 564 | CONFIG_EXT2_FS=y | 626 | CONFIG_EXT2_FS=m |
| 565 | # CONFIG_EXT2_FS_XATTR is not set | 627 | # CONFIG_EXT2_FS_XATTR is not set |
| 566 | # CONFIG_EXT2_FS_XIP is not set | 628 | # CONFIG_EXT2_FS_XIP is not set |
| 567 | # CONFIG_EXT3_FS is not set | 629 | # CONFIG_EXT3_FS is not set |
| 630 | # CONFIG_EXT4DEV_FS is not set | ||
| 568 | # CONFIG_REISERFS_FS is not set | 631 | # CONFIG_REISERFS_FS is not set |
| 569 | # CONFIG_JFS_FS is not set | 632 | # CONFIG_JFS_FS is not set |
| 570 | # CONFIG_FS_POSIX_ACL is not set | 633 | # CONFIG_FS_POSIX_ACL is not set |
| 571 | # CONFIG_XFS_FS is not set | 634 | # CONFIG_XFS_FS is not set |
| 635 | # CONFIG_GFS2_FS is not set | ||
| 572 | # CONFIG_OCFS2_FS is not set | 636 | # CONFIG_OCFS2_FS is not set |
| 573 | CONFIG_MINIX_FS=m | 637 | CONFIG_MINIX_FS=m |
| 574 | CONFIG_ROMFS_FS=m | 638 | # CONFIG_ROMFS_FS is not set |
| 575 | # CONFIG_INOTIFY is not set | 639 | CONFIG_INOTIFY=y |
| 640 | CONFIG_INOTIFY_USER=y | ||
| 576 | # CONFIG_QUOTA is not set | 641 | # CONFIG_QUOTA is not set |
| 577 | # CONFIG_DNOTIFY is not set | 642 | # CONFIG_DNOTIFY is not set |
| 578 | # CONFIG_AUTOFS_FS is not set | 643 | # CONFIG_AUTOFS_FS is not set |
| @@ -600,8 +665,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 600 | # | 665 | # |
| 601 | CONFIG_PROC_FS=y | 666 | CONFIG_PROC_FS=y |
| 602 | CONFIG_PROC_KCORE=y | 667 | CONFIG_PROC_KCORE=y |
| 668 | CONFIG_PROC_SYSCTL=y | ||
| 603 | CONFIG_SYSFS=y | 669 | CONFIG_SYSFS=y |
| 604 | CONFIG_TMPFS=y | 670 | CONFIG_TMPFS=y |
| 671 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 605 | # CONFIG_HUGETLB_PAGE is not set | 672 | # CONFIG_HUGETLB_PAGE is not set |
| 606 | CONFIG_RAMFS=y | 673 | CONFIG_RAMFS=y |
| 607 | CONFIG_CONFIGFS_FS=m | 674 | CONFIG_CONFIGFS_FS=m |
| @@ -616,6 +683,16 @@ CONFIG_CONFIGFS_FS=m | |||
| 616 | # CONFIG_BEFS_FS is not set | 683 | # CONFIG_BEFS_FS is not set |
| 617 | # CONFIG_BFS_FS is not set | 684 | # CONFIG_BFS_FS is not set |
| 618 | # CONFIG_EFS_FS is not set | 685 | # CONFIG_EFS_FS is not set |
| 686 | # CONFIG_JFFS_FS is not set | ||
| 687 | CONFIG_JFFS2_FS=y | ||
| 688 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 689 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
| 690 | # CONFIG_JFFS2_SUMMARY is not set | ||
| 691 | # CONFIG_JFFS2_FS_XATTR is not set | ||
| 692 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
| 693 | CONFIG_JFFS2_ZLIB=y | ||
| 694 | CONFIG_JFFS2_RTIME=y | ||
| 695 | # CONFIG_JFFS2_RUBIN is not set | ||
| 619 | # CONFIG_CRAMFS is not set | 696 | # CONFIG_CRAMFS is not set |
| 620 | # CONFIG_VXFS_FS is not set | 697 | # CONFIG_VXFS_FS is not set |
| 621 | # CONFIG_HPFS_FS is not set | 698 | # CONFIG_HPFS_FS is not set |
| @@ -626,26 +703,10 @@ CONFIG_CONFIGFS_FS=m | |||
| 626 | # | 703 | # |
| 627 | # Network File Systems | 704 | # Network File Systems |
| 628 | # | 705 | # |
| 629 | CONFIG_NFS_FS=y | 706 | # CONFIG_NFS_FS is not set |
| 630 | CONFIG_NFS_V3=y | ||
| 631 | # CONFIG_NFS_V3_ACL is not set | ||
| 632 | # CONFIG_NFS_V4 is not set | ||
| 633 | # CONFIG_NFS_DIRECTIO is not set | ||
| 634 | # CONFIG_NFSD is not set | 707 | # CONFIG_NFSD is not set |
| 635 | CONFIG_ROOT_NFS=y | ||
| 636 | CONFIG_LOCKD=y | ||
| 637 | CONFIG_LOCKD_V4=y | ||
| 638 | CONFIG_NFS_COMMON=y | ||
| 639 | CONFIG_SUNRPC=y | ||
| 640 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 641 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 642 | # CONFIG_SMB_FS is not set | 708 | # CONFIG_SMB_FS is not set |
| 643 | CONFIG_CIFS=m | 709 | # CONFIG_CIFS is not set |
| 644 | # CONFIG_CIFS_STATS is not set | ||
| 645 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 646 | # CONFIG_CIFS_XATTR is not set | ||
| 647 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 648 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 649 | # CONFIG_NCP_FS is not set | 710 | # CONFIG_NCP_FS is not set |
| 650 | # CONFIG_CODA_FS is not set | 711 | # CONFIG_CODA_FS is not set |
| 651 | # CONFIG_AFS_FS is not set | 712 | # CONFIG_AFS_FS is not set |
| @@ -665,7 +726,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 665 | CONFIG_NLS_CODEPAGE_437=m | 726 | CONFIG_NLS_CODEPAGE_437=m |
| 666 | # CONFIG_NLS_CODEPAGE_737 is not set | 727 | # CONFIG_NLS_CODEPAGE_737 is not set |
| 667 | # CONFIG_NLS_CODEPAGE_775 is not set | 728 | # CONFIG_NLS_CODEPAGE_775 is not set |
| 668 | CONFIG_NLS_CODEPAGE_850=m | 729 | # CONFIG_NLS_CODEPAGE_850 is not set |
| 669 | # CONFIG_NLS_CODEPAGE_852 is not set | 730 | # CONFIG_NLS_CODEPAGE_852 is not set |
| 670 | # CONFIG_NLS_CODEPAGE_855 is not set | 731 | # CONFIG_NLS_CODEPAGE_855 is not set |
| 671 | # CONFIG_NLS_CODEPAGE_857 is not set | 732 | # CONFIG_NLS_CODEPAGE_857 is not set |
| @@ -705,13 +766,17 @@ CONFIG_NLS_UTF8=m | |||
| 705 | # Kernel hacking | 766 | # Kernel hacking |
| 706 | # | 767 | # |
| 707 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 768 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 708 | CONFIG_PRINTK_TIME=y | 769 | # CONFIG_PRINTK_TIME is not set |
| 770 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 709 | CONFIG_MAGIC_SYSRQ=y | 771 | CONFIG_MAGIC_SYSRQ=y |
| 710 | # CONFIG_UNUSED_SYMBOLS is not set | 772 | # CONFIG_UNUSED_SYMBOLS is not set |
| 711 | CONFIG_DEBUG_KERNEL=y | 773 | CONFIG_DEBUG_KERNEL=y |
| 712 | CONFIG_LOG_BUF_SHIFT=14 | 774 | CONFIG_LOG_BUF_SHIFT=14 |
| 713 | CONFIG_DETECT_SOFTLOCKUP=y | 775 | CONFIG_DETECT_SOFTLOCKUP=y |
| 714 | # CONFIG_SCHEDSTATS is not set | 776 | # CONFIG_SCHEDSTATS is not set |
| 777 | # CONFIG_DEBUG_SLAB is not set | ||
| 778 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 779 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 715 | # CONFIG_DEBUG_SPINLOCK is not set | 780 | # CONFIG_DEBUG_SPINLOCK is not set |
| 716 | # CONFIG_DEBUG_MUTEXES is not set | 781 | # CONFIG_DEBUG_MUTEXES is not set |
| 717 | # CONFIG_DEBUG_RWSEMS is not set | 782 | # CONFIG_DEBUG_RWSEMS is not set |
| @@ -722,11 +787,13 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 722 | # CONFIG_DEBUG_INFO is not set | 787 | # CONFIG_DEBUG_INFO is not set |
| 723 | CONFIG_DEBUG_FS=y | 788 | CONFIG_DEBUG_FS=y |
| 724 | # CONFIG_DEBUG_VM is not set | 789 | # CONFIG_DEBUG_VM is not set |
| 790 | # CONFIG_DEBUG_LIST is not set | ||
| 725 | CONFIG_FRAME_POINTER=y | 791 | CONFIG_FRAME_POINTER=y |
| 726 | # CONFIG_UNWIND_INFO is not set | 792 | # CONFIG_UNWIND_INFO is not set |
| 727 | CONFIG_FORCED_INLINING=y | 793 | CONFIG_FORCED_INLINING=y |
| 794 | # CONFIG_HEADERS_CHECK is not set | ||
| 728 | # CONFIG_RCU_TORTURE_TEST is not set | 795 | # CONFIG_RCU_TORTURE_TEST is not set |
| 729 | CONFIG_KPROBES=y | 796 | # CONFIG_KPROBES is not set |
| 730 | 797 | ||
| 731 | # | 798 | # |
| 732 | # Security options | 799 | # Security options |
| @@ -740,15 +807,13 @@ CONFIG_KPROBES=y | |||
| 740 | # CONFIG_CRYPTO is not set | 807 | # CONFIG_CRYPTO is not set |
| 741 | 808 | ||
| 742 | # | 809 | # |
| 743 | # Hardware crypto devices | ||
| 744 | # | ||
| 745 | |||
| 746 | # | ||
| 747 | # Library routines | 810 | # Library routines |
| 748 | # | 811 | # |
| 749 | CONFIG_CRC_CCITT=m | 812 | CONFIG_CRC_CCITT=m |
| 750 | # CONFIG_CRC16 is not set | 813 | # CONFIG_CRC16 is not set |
| 751 | CONFIG_CRC32=m | 814 | CONFIG_CRC32=y |
| 752 | # CONFIG_LIBCRC32C is not set | 815 | # CONFIG_LIBCRC32C is not set |
| 753 | CONFIG_ZLIB_INFLATE=m | 816 | CONFIG_AUDIT_GENERIC=y |
| 754 | CONFIG_ZLIB_DEFLATE=m | 817 | CONFIG_ZLIB_INFLATE=y |
| 818 | CONFIG_ZLIB_DEFLATE=y | ||
| 819 | CONFIG_PLIST=y | ||
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 04f767a272b7..372e3f8b2417 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #include <linux/io.h> | ||
| 10 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 11 | 12 | ||
| 12 | #include <asm/checksum.h> | 13 | #include <asm/checksum.h> |
| @@ -53,3 +54,11 @@ EXPORT_SYMBOL(find_next_zero_bit); | |||
| 53 | EXPORT_SYMBOL(find_first_bit); | 54 | EXPORT_SYMBOL(find_first_bit); |
| 54 | EXPORT_SYMBOL(find_next_bit); | 55 | EXPORT_SYMBOL(find_next_bit); |
| 55 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); | 56 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); |
| 57 | |||
| 58 | /* I/O primitives (lib/io-*.S) */ | ||
| 59 | EXPORT_SYMBOL(__raw_readsb); | ||
| 60 | EXPORT_SYMBOL(__raw_readsw); | ||
| 61 | EXPORT_SYMBOL(__raw_readsl); | ||
| 62 | EXPORT_SYMBOL(__raw_writesb); | ||
| 63 | EXPORT_SYMBOL(__raw_writesw); | ||
| 64 | EXPORT_SYMBOL(__raw_writesl); | ||
diff --git a/arch/avr32/kernel/head.S b/arch/avr32/kernel/head.S index 773b7ad87be9..6163bd0acb95 100644 --- a/arch/avr32/kernel/head.S +++ b/arch/avr32/kernel/head.S | |||
| @@ -30,9 +30,6 @@ kernel_entry: | |||
| 30 | mov r7, 0 | 30 | mov r7, 0 |
| 31 | #endif | 31 | #endif |
| 32 | 32 | ||
| 33 | /* Set up the PIO, SDRAM controller, early printk, etc. */ | ||
| 34 | rcall board_early_init | ||
| 35 | |||
| 36 | /* Start the show */ | 33 | /* Start the show */ |
| 37 | lddpc pc, kernel_start_addr | 34 | lddpc pc, kernel_start_addr |
| 38 | 35 | ||
diff --git a/arch/avr32/kernel/kprobes.c b/arch/avr32/kernel/kprobes.c index 6caf9e8d8080..ca41fc1edbe1 100644 --- a/arch/avr32/kernel/kprobes.c +++ b/arch/avr32/kernel/kprobes.c | |||
| @@ -109,7 +109,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) | |||
| 109 | void *addr = (void *)regs->pc; | 109 | void *addr = (void *)regs->pc; |
| 110 | int ret = 0; | 110 | int ret = 0; |
| 111 | 111 | ||
| 112 | pr_debug("kprobe_handler: kprobe_running=%d\n", | 112 | pr_debug("kprobe_handler: kprobe_running=%p\n", |
| 113 | kprobe_running()); | 113 | kprobe_running()); |
| 114 | 114 | ||
| 115 | /* | 115 | /* |
diff --git a/arch/avr32/kernel/module.c b/arch/avr32/kernel/module.c index dfc32f2817b6..b599eae64576 100644 --- a/arch/avr32/kernel/module.c +++ b/arch/avr32/kernel/module.c | |||
| @@ -263,7 +263,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, | |||
| 263 | * value of PC. Just subtract the value of | 263 | * value of PC. Just subtract the value of |
| 264 | * GOT, and we're done. | 264 | * GOT, and we're done. |
| 265 | */ | 265 | */ |
| 266 | pr_debug("GOTPC: PC=0x%lx, got_offset=0x%lx, core=0x%p\n", | 266 | pr_debug("GOTPC: PC=0x%x, got_offset=0x%lx, core=0x%p\n", |
| 267 | relocation, module->arch.got_offset, | 267 | relocation, module->arch.got_offset, |
| 268 | module->module_core); | 268 | module->module_core); |
| 269 | relocation -= ((unsigned long)module->module_core | 269 | relocation -= ((unsigned long)module->module_core |
| @@ -282,7 +282,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, | |||
| 282 | && (relocation & 0xffff0000) != 0xffff0000) | 282 | && (relocation & 0xffff0000) != 0xffff0000) |
| 283 | return reloc_overflow(module, "R_AVR32_GOT16S", | 283 | return reloc_overflow(module, "R_AVR32_GOT16S", |
| 284 | relocation); | 284 | relocation); |
| 285 | pr_debug("GOT reloc @ 0x%lx -> %lu\n", | 285 | pr_debug("GOT reloc @ 0x%x -> %u\n", |
| 286 | rel->r_offset, relocation); | 286 | rel->r_offset, relocation); |
| 287 | value = *location; | 287 | value = *location; |
| 288 | value = ((value & 0xffff0000) | 288 | value = ((value & 0xffff0000) |
diff --git a/arch/avr32/kernel/ptrace.c b/arch/avr32/kernel/ptrace.c index 3c89e59029ab..f2e81cd79002 100644 --- a/arch/avr32/kernel/ptrace.c +++ b/arch/avr32/kernel/ptrace.c | |||
| @@ -157,7 +157,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
| 157 | unsigned long tmp; | 157 | unsigned long tmp; |
| 158 | int ret; | 158 | int ret; |
| 159 | 159 | ||
| 160 | pr_debug("arch_ptrace(%ld, %ld, %#lx, %#lx)\n", | 160 | pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n", |
| 161 | request, child->pid, addr, data); | 161 | request, child->pid, addr, data); |
| 162 | 162 | ||
| 163 | pr_debug("ptrace: Enabling monitor mode...\n"); | 163 | pr_debug("ptrace: Enabling monitor mode...\n"); |
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 7589a9b426cb..890286a1e62b 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
| @@ -100,3 +100,12 @@ __sys_splice: | |||
| 100 | rcall sys_splice | 100 | rcall sys_splice |
| 101 | sub sp, -4 | 101 | sub sp, -4 |
| 102 | popm pc | 102 | popm pc |
| 103 | |||
| 104 | .global __sys_epoll_pwait | ||
| 105 | .type __sys_epoll_pwait,@function | ||
| 106 | __sys_epoll_pwait: | ||
| 107 | pushm lr | ||
| 108 | st.w --sp, ARG6 | ||
| 109 | rcall sys_epoll_pwait | ||
| 110 | sub sp, -4 | ||
| 111 | popm pc | ||
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S index 63b206965d05..db8f8b55ffdf 100644 --- a/arch/avr32/kernel/syscall_table.S +++ b/arch/avr32/kernel/syscall_table.S | |||
| @@ -286,4 +286,5 @@ sys_call_table: | |||
| 286 | .long sys_sync_file_range | 286 | .long sys_sync_file_range |
| 287 | .long sys_tee | 287 | .long sys_tee |
| 288 | .long sys_vmsplice | 288 | .long sys_vmsplice |
| 289 | .long __sys_epoll_pwait /* 265 */ | ||
| 289 | .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ | 290 | .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ |
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c index 3e56b9f4358a..5a247ba71a72 100644 --- a/arch/avr32/kernel/time.c +++ b/arch/avr32/kernel/time.c | |||
| @@ -124,15 +124,15 @@ unsigned long long sched_clock(void) | |||
| 124 | * | 124 | * |
| 125 | * In UP mode, it is invoked from the (global) timer_interrupt. | 125 | * In UP mode, it is invoked from the (global) timer_interrupt. |
| 126 | */ | 126 | */ |
| 127 | static void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 127 | static void local_timer_interrupt(int irq, void *dev_id) |
| 128 | { | 128 | { |
| 129 | if (current->pid) | 129 | if (current->pid) |
| 130 | profile_tick(CPU_PROFILING, regs); | 130 | profile_tick(CPU_PROFILING); |
| 131 | update_process_times(user_mode(regs)); | 131 | update_process_times(user_mode(get_irq_regs())); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | static irqreturn_t | 134 | static irqreturn_t |
| 135 | timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 135 | timer_interrupt(int irq, void *dev_id) |
| 136 | { | 136 | { |
| 137 | unsigned int count; | 137 | unsigned int count; |
| 138 | 138 | ||
| @@ -157,7 +157,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
| 157 | * | 157 | * |
| 158 | * SMP is not supported yet. | 158 | * SMP is not supported yet. |
| 159 | */ | 159 | */ |
| 160 | local_timer_interrupt(irq, dev_id, regs); | 160 | local_timer_interrupt(irq, dev_id); |
| 161 | 161 | ||
| 162 | return IRQ_HANDLED; | 162 | return IRQ_HANDLED; |
| 163 | } | 163 | } |
diff --git a/arch/avr32/kernel/vmlinux.lds.c b/arch/avr32/kernel/vmlinux.lds.c index cdd627c6b7dc..5c4424e362b5 100644 --- a/arch/avr32/kernel/vmlinux.lds.c +++ b/arch/avr32/kernel/vmlinux.lds.c | |||
| @@ -38,13 +38,7 @@ SECTIONS | |||
| 38 | __setup_end = .; | 38 | __setup_end = .; |
| 39 | . = ALIGN(4); | 39 | . = ALIGN(4); |
| 40 | __initcall_start = .; | 40 | __initcall_start = .; |
| 41 | *(.initcall1.init) | 41 | INITCALLS |
| 42 | *(.initcall2.init) | ||
| 43 | *(.initcall3.init) | ||
| 44 | *(.initcall4.init) | ||
| 45 | *(.initcall5.init) | ||
| 46 | *(.initcall6.init) | ||
| 47 | *(.initcall7.init) | ||
| 48 | __initcall_end = .; | 42 | __initcall_end = .; |
| 49 | __con_initcall_start = .; | 43 | __con_initcall_start = .; |
| 50 | *(.con_initcall.init) | 44 | *(.con_initcall.init) |
diff --git a/arch/avr32/lib/Makefile b/arch/avr32/lib/Makefile index 09ac43e40522..084d95bac5e7 100644 --- a/arch/avr32/lib/Makefile +++ b/arch/avr32/lib/Makefile | |||
| @@ -7,4 +7,5 @@ lib-y += strncpy_from_user.o strnlen_user.o | |||
| 7 | lib-y += delay.o memset.o memcpy.o findbit.o | 7 | lib-y += delay.o memset.o memcpy.o findbit.o |
| 8 | lib-y += csum_partial.o csum_partial_copy_generic.o | 8 | lib-y += csum_partial.o csum_partial_copy_generic.o |
| 9 | lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o | 9 | lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o |
| 10 | lib-y += io-readsb.o io-writesb.o | ||
| 10 | lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o | 11 | lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o |
diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index 2b4856f4bf7c..c6b91dee857c 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S | |||
| @@ -136,6 +136,7 @@ ENTRY(generic_find_next_zero_le_bit) | |||
| 136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ | 136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ |
| 137 | ldswp.w r8, r12[0] | 137 | ldswp.w r8, r12[0] |
| 138 | sub r12, -4 | 138 | sub r12, -4 |
| 139 | com r8 | ||
| 139 | lsr r8, r8, r10 | 140 | lsr r8, r8, r10 |
| 140 | brne .L_found | 141 | brne .L_found |
| 141 | 142 | ||
| @@ -146,7 +147,7 @@ ENTRY(generic_find_next_zero_le_bit) | |||
| 146 | 147 | ||
| 147 | /* Main loop. offset must be word-aligned */ | 148 | /* Main loop. offset must be word-aligned */ |
| 148 | 1: ldswp.w r8, r12[0] | 149 | 1: ldswp.w r8, r12[0] |
| 149 | cp.w r8, 0 | 150 | com r8 |
| 150 | brne .L_found | 151 | brne .L_found |
| 151 | sub r12, -4 | 152 | sub r12, -4 |
| 152 | sub r9, 32 | 153 | sub r9, 32 |
diff --git a/arch/avr32/lib/io-readsb.S b/arch/avr32/lib/io-readsb.S new file mode 100644 index 000000000000..2be5da7ed26b --- /dev/null +++ b/arch/avr32/lib/io-readsb.S | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004-2006 Atmel 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 version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | .text | ||
| 10 | .Lnot_word_aligned: | ||
| 11 | 1: ld.ub r8, r12[0] | ||
| 12 | sub r10, 1 | ||
| 13 | st.b r11++, r8 | ||
| 14 | reteq r12 | ||
| 15 | tst r11, r9 | ||
| 16 | brne 1b | ||
| 17 | |||
| 18 | /* fall through */ | ||
| 19 | |||
| 20 | .global __raw_readsb | ||
| 21 | .type __raw_readsb,@function | ||
| 22 | __raw_readsb: | ||
| 23 | cp.w r10, 0 | ||
| 24 | mov r9, 3 | ||
| 25 | reteq r12 | ||
| 26 | |||
| 27 | tst r11, r9 | ||
| 28 | brne .Lnot_word_aligned | ||
| 29 | |||
| 30 | sub r10, 4 | ||
| 31 | brlt 2f | ||
| 32 | |||
| 33 | 1: ldins.b r8:t, r12[0] | ||
| 34 | ldins.b r8:u, r12[0] | ||
| 35 | ldins.b r8:l, r12[0] | ||
| 36 | ldins.b r8:b, r12[0] | ||
| 37 | st.w r11++, r8 | ||
| 38 | sub r10, 4 | ||
| 39 | brge 1b | ||
| 40 | |||
| 41 | 2: sub r10, -4 | ||
| 42 | reteq r12 | ||
| 43 | |||
| 44 | 3: ld.uh r8, r12[0] | ||
| 45 | sub r10, 1 | ||
| 46 | st.b r11++, r8 | ||
| 47 | brne 3b | ||
| 48 | |||
| 49 | retal r12 | ||
diff --git a/arch/avr32/lib/io-writesb.S b/arch/avr32/lib/io-writesb.S new file mode 100644 index 000000000000..b4ebaacccf68 --- /dev/null +++ b/arch/avr32/lib/io-writesb.S | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004-2006 Atmel 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 version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | .text | ||
| 10 | .Lnot_word_aligned: | ||
| 11 | 1: ld.ub r8, r11++ | ||
| 12 | sub r10, 1 | ||
| 13 | st.b r12[0], r8 | ||
| 14 | reteq r12 | ||
| 15 | tst r11, r9 | ||
| 16 | brne 1b | ||
| 17 | |||
| 18 | /* fall through */ | ||
| 19 | |||
| 20 | .global __raw_writesb | ||
| 21 | .type __raw_writesb,@function | ||
| 22 | __raw_writesb: | ||
| 23 | cp.w r10, 0 | ||
| 24 | mov r9, 3 | ||
| 25 | reteq r12 | ||
| 26 | |||
| 27 | tst r11, r9 | ||
| 28 | brne .Lnot_word_aligned | ||
| 29 | |||
| 30 | sub r10, 4 | ||
| 31 | brlt 2f | ||
| 32 | |||
| 33 | 1: ld.w r8, r11++ | ||
| 34 | bfextu r9, r8, 24, 8 | ||
| 35 | st.b r12[0], r9 | ||
| 36 | bfextu r9, r8, 16, 8 | ||
| 37 | st.b r12[0], r9 | ||
| 38 | bfextu r9, r8, 8, 8 | ||
| 39 | st.b r12[0], r9 | ||
| 40 | st.b r12[0], r8 | ||
| 41 | sub r10, 4 | ||
| 42 | brge 1b | ||
| 43 | |||
| 44 | 2: sub r10, -4 | ||
| 45 | reteq r12 | ||
| 46 | |||
| 47 | 3: ld.ub r8, r11++ | ||
| 48 | sub r10, 1 | ||
| 49 | st.b r12[0], r8 | ||
| 50 | brne 3b | ||
| 51 | |||
| 52 | retal r12 | ||
diff --git a/arch/avr32/mach-at32ap/extint.c b/arch/avr32/mach-at32ap/extint.c index 7da9c5f7a0eb..4dff1f988900 100644 --- a/arch/avr32/mach-at32ap/extint.c +++ b/arch/avr32/mach-at32ap/extint.c | |||
| @@ -102,8 +102,7 @@ struct irq_chip eim_chip = { | |||
| 102 | .set_type = eim_set_irq_type, | 102 | .set_type = eim_set_irq_type, |
| 103 | }; | 103 | }; |
| 104 | 104 | ||
| 105 | static void demux_eim_irq(unsigned int irq, struct irq_desc *desc, | 105 | static void demux_eim_irq(unsigned int irq, struct irq_desc *desc) |
| 106 | struct pt_regs *regs) | ||
| 107 | { | 106 | { |
| 108 | struct at32_sm *sm = desc->handler_data; | 107 | struct at32_sm *sm = desc->handler_data; |
| 109 | struct irq_desc *ext_desc; | 108 | struct irq_desc *ext_desc; |
| @@ -121,7 +120,7 @@ static void demux_eim_irq(unsigned int irq, struct irq_desc *desc, | |||
| 121 | 120 | ||
| 122 | ext_irq = i + sm->eim_first_irq; | 121 | ext_irq = i + sm->eim_first_irq; |
| 123 | ext_desc = irq_desc + ext_irq; | 122 | ext_desc = irq_desc + ext_irq; |
| 124 | ext_desc->handle_irq(ext_irq, ext_desc, regs); | 123 | ext_desc->handle_irq(ext_irq, ext_desc); |
| 125 | } | 124 | } |
| 126 | 125 | ||
| 127 | spin_unlock(&sm->lock); | 126 | spin_unlock(&sm->lock); |
diff --git a/arch/avr32/mach-at32ap/hsmc.h b/arch/avr32/mach-at32ap/hsmc.h index 5681276fafdb..d1d48e26e393 100644 --- a/arch/avr32/mach-at32ap/hsmc.h +++ b/arch/avr32/mach-at32ap/hsmc.h | |||
| @@ -120,8 +120,8 @@ | |||
| 120 | 120 | ||
| 121 | /* Register access macros */ | 121 | /* Register access macros */ |
| 122 | #define hsmc_readl(port,reg) \ | 122 | #define hsmc_readl(port,reg) \ |
| 123 | readl((port)->regs + HSMC_##reg) | 123 | __raw_readl((port)->regs + HSMC_##reg) |
| 124 | #define hsmc_writel(port,reg,value) \ | 124 | #define hsmc_writel(port,reg,value) \ |
| 125 | writel((value), (port)->regs + HSMC_##reg) | 125 | __raw_writel((value), (port)->regs + HSMC_##reg) |
| 126 | 126 | ||
| 127 | #endif /* __ASM_AVR32_HSMC_H__ */ | 127 | #endif /* __ASM_AVR32_HSMC_H__ */ |
diff --git a/arch/avr32/mach-at32ap/intc.c b/arch/avr32/mach-at32ap/intc.c index 74f8c9f2f03d..eb87a18ad7b2 100644 --- a/arch/avr32/mach-at32ap/intc.c +++ b/arch/avr32/mach-at32ap/intc.c | |||
| @@ -52,16 +52,19 @@ static struct intc intc0 = { | |||
| 52 | asmlinkage void do_IRQ(int level, struct pt_regs *regs) | 52 | asmlinkage void do_IRQ(int level, struct pt_regs *regs) |
| 53 | { | 53 | { |
| 54 | struct irq_desc *desc; | 54 | struct irq_desc *desc; |
| 55 | struct pt_regs *old_regs; | ||
| 55 | unsigned int irq; | 56 | unsigned int irq; |
| 56 | unsigned long status_reg; | 57 | unsigned long status_reg; |
| 57 | 58 | ||
| 58 | local_irq_disable(); | 59 | local_irq_disable(); |
| 59 | 60 | ||
| 61 | old_regs = set_irq_regs(regs); | ||
| 62 | |||
| 60 | irq_enter(); | 63 | irq_enter(); |
| 61 | 64 | ||
| 62 | irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); | 65 | irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); |
| 63 | desc = irq_desc + irq; | 66 | desc = irq_desc + irq; |
| 64 | desc->handle_irq(irq, desc, regs); | 67 | desc->handle_irq(irq, desc); |
| 65 | 68 | ||
| 66 | /* | 69 | /* |
| 67 | * Clear all interrupt level masks so that we may handle | 70 | * Clear all interrupt level masks so that we may handle |
| @@ -75,6 +78,8 @@ asmlinkage void do_IRQ(int level, struct pt_regs *regs) | |||
| 75 | sysreg_write(SR, status_reg); | 78 | sysreg_write(SR, status_reg); |
| 76 | 79 | ||
| 77 | irq_exit(); | 80 | irq_exit(); |
| 81 | |||
| 82 | set_irq_regs(old_regs); | ||
| 78 | } | 83 | } |
| 79 | 84 | ||
| 80 | void __init init_IRQ(void) | 85 | void __init init_IRQ(void) |
diff --git a/arch/avr32/mach-at32ap/intc.h b/arch/avr32/mach-at32ap/intc.h index d289ca2fff13..4d3664e43a8e 100644 --- a/arch/avr32/mach-at32ap/intc.h +++ b/arch/avr32/mach-at32ap/intc.h | |||
| @@ -321,7 +321,9 @@ | |||
| 321 | #define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET) | 321 | #define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET) |
| 322 | #define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1)) | 322 | #define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1)) |
| 323 | 323 | ||
| 324 | #define intc_readl(port,reg) readl((port)->regs + INTC_##reg) | 324 | #define intc_readl(port,reg) \ |
| 325 | #define intc_writel(port,reg,value) writel((value), (port)->regs + INTC_##reg) | 325 | __raw_readl((port)->regs + INTC_##reg) |
| 326 | #define intc_writel(port,reg,value) \ | ||
| 327 | __raw_writel((value), (port)->regs + INTC_##reg) | ||
| 326 | 328 | ||
| 327 | #endif /* __ASM_AVR32_PERIHP_INTC_H__ */ | 329 | #endif /* __ASM_AVR32_PERIHP_INTC_H__ */ |
diff --git a/arch/avr32/mach-at32ap/pio.h b/arch/avr32/mach-at32ap/pio.h index cfea12351599..50fa3aca32c5 100644 --- a/arch/avr32/mach-at32ap/pio.h +++ b/arch/avr32/mach-at32ap/pio.h | |||
| @@ -170,8 +170,10 @@ | |||
| 170 | #define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value)) | 170 | #define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value)) |
| 171 | 171 | ||
| 172 | /* Register access macros */ | 172 | /* Register access macros */ |
| 173 | #define pio_readl(port,reg) readl((port)->regs + PIO_##reg) | 173 | #define pio_readl(port,reg) \ |
| 174 | #define pio_writel(port,reg,value) writel((value), (port)->regs + PIO_##reg) | 174 | __raw_readl((port)->regs + PIO_##reg) |
| 175 | #define pio_writel(port,reg,value) \ | ||
| 176 | __raw_writel((value), (port)->regs + PIO_##reg) | ||
| 175 | 177 | ||
| 176 | void at32_init_pio(struct platform_device *pdev); | 178 | void at32_init_pio(struct platform_device *pdev); |
| 177 | 179 | ||
diff --git a/arch/avr32/mach-at32ap/sm.h b/arch/avr32/mach-at32ap/sm.h index 27565822ae2a..cad02b512bcb 100644 --- a/arch/avr32/mach-at32ap/sm.h +++ b/arch/avr32/mach-at32ap/sm.h | |||
| @@ -234,7 +234,9 @@ | |||
| 234 | #define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value)) | 234 | #define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value)) |
| 235 | 235 | ||
| 236 | /* Register access macros */ | 236 | /* Register access macros */ |
| 237 | #define sm_readl(port,reg) readl((port)->regs + SM_##reg) | 237 | #define sm_readl(port,reg) \ |
| 238 | #define sm_writel(port,reg,value) writel((value), (port)->regs + SM_##reg) | 238 | __raw_readl((port)->regs + SM_##reg) |
| 239 | #define sm_writel(port,reg,value) \ | ||
| 240 | __raw_writel((value), (port)->regs + SM_##reg) | ||
| 239 | 241 | ||
| 240 | #endif /* __ASM_AVR32_SM_H__ */ | 242 | #endif /* __ASM_AVR32_SM_H__ */ |
diff --git a/arch/avr32/mm/init.c b/arch/avr32/mm/init.c index 3e6c41039808..70da6894acc1 100644 --- a/arch/avr32/mm/init.c +++ b/arch/avr32/mm/init.c | |||
| @@ -206,7 +206,7 @@ void __init setup_bootmem(void) | |||
| 206 | 206 | ||
| 207 | if (mem_ramdisk) { | 207 | if (mem_ramdisk) { |
| 208 | #ifdef CONFIG_BLK_DEV_INITRD | 208 | #ifdef CONFIG_BLK_DEV_INITRD |
| 209 | initrd_start = __va(mem_ramdisk->addr); | 209 | initrd_start = (unsigned long)__va(mem_ramdisk->addr); |
| 210 | initrd_end = initrd_start + mem_ramdisk->size; | 210 | initrd_end = initrd_start + mem_ramdisk->size; |
| 211 | 211 | ||
| 212 | print_memory_map("RAMDISK images", mem_ramdisk); | 212 | print_memory_map("RAMDISK images", mem_ramdisk); |
diff --git a/arch/avr32/mm/ioremap.c b/arch/avr32/mm/ioremap.c index 8cfec65e37f7..3437c82434ac 100644 --- a/arch/avr32/mm/ioremap.c +++ b/arch/avr32/mm/ioremap.c | |||
| @@ -77,6 +77,8 @@ void __iounmap(void __iomem *addr) | |||
| 77 | 77 | ||
| 78 | if ((unsigned long)addr >= P4SEG) | 78 | if ((unsigned long)addr >= P4SEG) |
| 79 | return; | 79 | return; |
| 80 | if (PXSEG(addr) == P2SEG) | ||
| 81 | return; | ||
| 80 | 82 | ||
| 81 | p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); | 83 | p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); |
| 82 | if (unlikely(!p)) { | 84 | if (unlikely(!p)) { |
diff --git a/arch/cris/arch-v32/drivers/cryptocop.c b/arch/cris/arch-v32/drivers/cryptocop.c index ba096ebb0b15..2449637e6fc0 100644 --- a/arch/cris/arch-v32/drivers/cryptocop.c +++ b/arch/cris/arch-v32/drivers/cryptocop.c | |||
| @@ -2051,7 +2051,6 @@ static void cryptocop_job_queue_close(void) | |||
| 2051 | spin_lock_irqsave(&cryptocop_process_lock, process_flags); | 2051 | spin_lock_irqsave(&cryptocop_process_lock, process_flags); |
| 2052 | 2052 | ||
| 2053 | /* Empty the job queue. */ | 2053 | /* Empty the job queue. */ |
| 2054 | spin_lock_irqsave(&cryptocop_process_lock, process_flags); | ||
| 2055 | for (i = 0; i < cryptocop_prio_no_prios; i++){ | 2054 | for (i = 0; i < cryptocop_prio_no_prios; i++){ |
| 2056 | if (!list_empty(&(cryptocop_job_queues[i].jobs))){ | 2055 | if (!list_empty(&(cryptocop_job_queues[i].jobs))){ |
| 2057 | list_for_each_safe(node, tmp, &(cryptocop_job_queues[i].jobs)) { | 2056 | list_for_each_safe(node, tmp, &(cryptocop_job_queues[i].jobs)) { |
diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S index f474534ba78a..9c1fb12367fa 100644 --- a/arch/frv/kernel/vmlinux.lds.S +++ b/arch/frv/kernel/vmlinux.lds.S | |||
| @@ -44,13 +44,7 @@ SECTIONS | |||
| 44 | 44 | ||
| 45 | __initcall_start = .; | 45 | __initcall_start = .; |
| 46 | .initcall.init : { | 46 | .initcall.init : { |
| 47 | *(.initcall1.init) | 47 | INITCALLS |
| 48 | *(.initcall2.init) | ||
| 49 | *(.initcall3.init) | ||
| 50 | *(.initcall4.init) | ||
| 51 | *(.initcall5.init) | ||
| 52 | *(.initcall6.init) | ||
| 53 | *(.initcall7.init) | ||
| 54 | } | 48 | } |
| 55 | __initcall_end = .; | 49 | __initcall_end = .; |
| 56 | __con_initcall_start = .; | 50 | __con_initcall_start = .; |
diff --git a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S index 6406c388f88a..756325dd480e 100644 --- a/arch/h8300/kernel/vmlinux.lds.S +++ b/arch/h8300/kernel/vmlinux.lds.S | |||
| @@ -118,13 +118,7 @@ SECTIONS | |||
| 118 | . = ALIGN(0x4) ; | 118 | . = ALIGN(0x4) ; |
| 119 | ___setup_end = .; | 119 | ___setup_end = .; |
| 120 | ___initcall_start = .; | 120 | ___initcall_start = .; |
| 121 | *(.initcall1.init) | 121 | INITCALLS |
| 122 | *(.initcall2.init) | ||
| 123 | *(.initcall3.init) | ||
| 124 | *(.initcall4.init) | ||
| 125 | *(.initcall5.init) | ||
| 126 | *(.initcall6.init) | ||
| 127 | *(.initcall7.init) | ||
| 128 | ___initcall_end = .; | 122 | ___initcall_end = .; |
| 129 | ___con_initcall_start = .; | 123 | ___con_initcall_start = .; |
| 130 | *(.con_initcall.init) | 124 | *(.con_initcall.init) |
diff --git a/arch/i386/Kconfig.cpu b/arch/i386/Kconfig.cpu index 21c9a4e71104..fc4f2abccf06 100644 --- a/arch/i386/Kconfig.cpu +++ b/arch/i386/Kconfig.cpu | |||
| @@ -7,6 +7,7 @@ choice | |||
| 7 | 7 | ||
| 8 | config M386 | 8 | config M386 |
| 9 | bool "386" | 9 | bool "386" |
| 10 | depends on !UML | ||
| 10 | ---help--- | 11 | ---help--- |
| 11 | This is the processor type of your CPU. This information is used for | 12 | This is the processor type of your CPU. This information is used for |
| 12 | optimizing purposes. In order to compile a kernel that can run on | 13 | optimizing purposes. In order to compile a kernel that can run on |
| @@ -301,7 +302,7 @@ config X86_USE_PPRO_CHECKSUM | |||
| 301 | 302 | ||
| 302 | config X86_USE_3DNOW | 303 | config X86_USE_3DNOW |
| 303 | bool | 304 | bool |
| 304 | depends on MCYRIXIII || MK7 || MGEODE_LX | 305 | depends on (MCYRIXIII || MK7 || MGEODE_LX) && !UML |
| 305 | default y | 306 | default y |
| 306 | 307 | ||
| 307 | config X86_OOSTORE | 308 | config X86_OOSTORE |
diff --git a/arch/i386/Makefile b/arch/i386/Makefile index 7cc0b189b82b..0677908dfa06 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile | |||
| @@ -42,6 +42,10 @@ cflags-$(CONFIG_REGPARM) += -mregparm=3 | |||
| 42 | # temporary until string.h is fixed | 42 | # temporary until string.h is fixed |
| 43 | cflags-y += -ffreestanding | 43 | cflags-y += -ffreestanding |
| 44 | 44 | ||
| 45 | # this works around some issues with generating unwind tables in older gccs | ||
| 46 | # newer gccs do it by default | ||
| 47 | cflags-y += -maccumulate-outgoing-args | ||
| 48 | |||
| 45 | # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use | 49 | # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use |
| 46 | # a lot more stack due to the lack of sharing of stacklots: | 50 | # a lot more stack due to the lack of sharing of stacklots: |
| 47 | CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;) | 51 | CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;) |
| @@ -51,8 +55,8 @@ cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | |||
| 51 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | 55 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) |
| 52 | 56 | ||
| 53 | # is .cfi_signal_frame supported too? | 57 | # is .cfi_signal_frame supported too? |
| 54 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | 58 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) |
| 55 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | 59 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) |
| 56 | 60 | ||
| 57 | CFLAGS += $(cflags-y) | 61 | CFLAGS += $(cflags-y) |
| 58 | 62 | ||
diff --git a/arch/i386/defconfig b/arch/i386/defconfig index 60c0c02574f0..97aacd6bd7d8 100644 --- a/arch/i386/defconfig +++ b/arch/i386/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.19-rc1 | 3 | # Linux kernel version: 2.6.19-rc2-git4 |
| 4 | # Thu Oct 5 13:04:53 2006 | 4 | # Sat Oct 21 03:38:56 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_X86_32=y | 6 | CONFIG_X86_32=y |
| 7 | CONFIG_GENERIC_TIME=y | 7 | CONFIG_GENERIC_TIME=y |
| @@ -380,8 +380,8 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=y | |||
| 380 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | 380 | CONFIG_INET6_XFRM_MODE_TUNNEL=y |
| 381 | # CONFIG_INET6_XFRM_MODE_BEET is not set | 381 | # CONFIG_INET6_XFRM_MODE_BEET is not set |
| 382 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 382 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 383 | CONFIG_IPV6_SIT=y | ||
| 383 | # CONFIG_IPV6_TUNNEL is not set | 384 | # CONFIG_IPV6_TUNNEL is not set |
| 384 | # CONFIG_IPV6_SUBTREES is not set | ||
| 385 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 385 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 386 | # CONFIG_NETWORK_SECMARK is not set | 386 | # CONFIG_NETWORK_SECMARK is not set |
| 387 | # CONFIG_NETFILTER is not set | 387 | # CONFIG_NETFILTER is not set |
| @@ -483,6 +483,13 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 483 | # CONFIG_ATA_OVER_ETH is not set | 483 | # CONFIG_ATA_OVER_ETH is not set |
| 484 | 484 | ||
| 485 | # | 485 | # |
| 486 | # Misc devices | ||
| 487 | # | ||
| 488 | # CONFIG_IBM_ASM is not set | ||
| 489 | # CONFIG_SGI_IOC4 is not set | ||
| 490 | # CONFIG_TIFM_CORE is not set | ||
| 491 | |||
| 492 | # | ||
| 486 | # ATA/ATAPI/MFM/RLL support | 493 | # ATA/ATAPI/MFM/RLL support |
| 487 | # | 494 | # |
| 488 | CONFIG_IDE=y | 495 | CONFIG_IDE=y |
| @@ -1024,6 +1031,7 @@ CONFIG_HANGCHECK_TIMER=y | |||
| 1024 | # | 1031 | # |
| 1025 | # Dallas's 1-wire bus | 1032 | # Dallas's 1-wire bus |
| 1026 | # | 1033 | # |
| 1034 | # CONFIG_W1 is not set | ||
| 1027 | 1035 | ||
| 1028 | # | 1036 | # |
| 1029 | # Hardware Monitoring support | 1037 | # Hardware Monitoring support |
| @@ -1032,12 +1040,6 @@ CONFIG_HANGCHECK_TIMER=y | |||
| 1032 | # CONFIG_HWMON_VID is not set | 1040 | # CONFIG_HWMON_VID is not set |
| 1033 | 1041 | ||
| 1034 | # | 1042 | # |
| 1035 | # Misc devices | ||
| 1036 | # | ||
| 1037 | # CONFIG_IBM_ASM is not set | ||
| 1038 | # CONFIG_TIFM_CORE is not set | ||
| 1039 | |||
| 1040 | # | ||
| 1041 | # Multimedia devices | 1043 | # Multimedia devices |
| 1042 | # | 1044 | # |
| 1043 | # CONFIG_VIDEO_DEV is not set | 1045 | # CONFIG_VIDEO_DEV is not set |
| @@ -1169,7 +1171,6 @@ CONFIG_USB_HIDINPUT=y | |||
| 1169 | # CONFIG_USB_ATI_REMOTE2 is not set | 1171 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 1170 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1172 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 1171 | # CONFIG_USB_APPLETOUCH is not set | 1173 | # CONFIG_USB_APPLETOUCH is not set |
| 1172 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1173 | 1174 | ||
| 1174 | # | 1175 | # |
| 1175 | # USB Imaging devices | 1176 | # USB Imaging devices |
| @@ -1215,6 +1216,7 @@ CONFIG_USB_MON=y | |||
| 1215 | # CONFIG_USB_APPLEDISPLAY is not set | 1216 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1216 | # CONFIG_USB_SISUSBVGA is not set | 1217 | # CONFIG_USB_SISUSBVGA is not set |
| 1217 | # CONFIG_USB_LD is not set | 1218 | # CONFIG_USB_LD is not set |
| 1219 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1218 | # CONFIG_USB_TEST is not set | 1220 | # CONFIG_USB_TEST is not set |
| 1219 | 1221 | ||
| 1220 | # | 1222 | # |
| @@ -1284,6 +1286,7 @@ CONFIG_EXT3_FS=y | |||
| 1284 | CONFIG_EXT3_FS_XATTR=y | 1286 | CONFIG_EXT3_FS_XATTR=y |
| 1285 | CONFIG_EXT3_FS_POSIX_ACL=y | 1287 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1286 | # CONFIG_EXT3_FS_SECURITY is not set | 1288 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1289 | # CONFIG_EXT4DEV_FS is not set | ||
| 1287 | CONFIG_JBD=y | 1290 | CONFIG_JBD=y |
| 1288 | # CONFIG_JBD_DEBUG is not set | 1291 | # CONFIG_JBD_DEBUG is not set |
| 1289 | CONFIG_FS_MBCACHE=y | 1292 | CONFIG_FS_MBCACHE=y |
| @@ -1307,6 +1310,7 @@ CONFIG_DNOTIFY=y | |||
| 1307 | # CONFIG_AUTOFS_FS is not set | 1310 | # CONFIG_AUTOFS_FS is not set |
| 1308 | CONFIG_AUTOFS4_FS=y | 1311 | CONFIG_AUTOFS4_FS=y |
| 1309 | # CONFIG_FUSE_FS is not set | 1312 | # CONFIG_FUSE_FS is not set |
| 1313 | CONFIG_GENERIC_ACL=y | ||
| 1310 | 1314 | ||
| 1311 | # | 1315 | # |
| 1312 | # CD-ROM/DVD Filesystems | 1316 | # CD-ROM/DVD Filesystems |
| @@ -1384,7 +1388,6 @@ CONFIG_SUNRPC=y | |||
| 1384 | # CONFIG_CODA_FS is not set | 1388 | # CONFIG_CODA_FS is not set |
| 1385 | # CONFIG_AFS_FS is not set | 1389 | # CONFIG_AFS_FS is not set |
| 1386 | # CONFIG_9P_FS is not set | 1390 | # CONFIG_9P_FS is not set |
| 1387 | CONFIG_GENERIC_ACL=y | ||
| 1388 | 1391 | ||
| 1389 | # | 1392 | # |
| 1390 | # Partition Types | 1393 | # Partition Types |
| @@ -1437,10 +1440,6 @@ CONFIG_NLS_ISO8859_15=y | |||
| 1437 | CONFIG_NLS_UTF8=y | 1440 | CONFIG_NLS_UTF8=y |
| 1438 | 1441 | ||
| 1439 | # | 1442 | # |
| 1440 | # Distributed Lock Manager | ||
| 1441 | # | ||
| 1442 | |||
| 1443 | # | ||
| 1444 | # Instrumentation Support | 1443 | # Instrumentation Support |
| 1445 | # | 1444 | # |
| 1446 | CONFIG_PROFILING=y | 1445 | CONFIG_PROFILING=y |
| @@ -1480,6 +1479,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 1480 | CONFIG_UNWIND_INFO=y | 1479 | CONFIG_UNWIND_INFO=y |
| 1481 | CONFIG_STACK_UNWIND=y | 1480 | CONFIG_STACK_UNWIND=y |
| 1482 | # CONFIG_FORCED_INLINING is not set | 1481 | # CONFIG_FORCED_INLINING is not set |
| 1482 | # CONFIG_HEADERS_CHECK is not set | ||
| 1483 | # CONFIG_RCU_TORTURE_TEST is not set | 1483 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1484 | # CONFIG_LKDTM is not set | 1484 | # CONFIG_LKDTM is not set |
| 1485 | CONFIG_EARLY_PRINTK=y | 1485 | CONFIG_EARLY_PRINTK=y |
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index 92f79cdd9a48..d12fb97a5337 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
| @@ -70,7 +70,7 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return | |||
| 70 | 70 | ||
| 71 | #define PREFIX "ACPI: " | 71 | #define PREFIX "ACPI: " |
| 72 | 72 | ||
| 73 | int acpi_noirq __initdata; /* skip ACPI IRQ initialization */ | 73 | int acpi_noirq; /* skip ACPI IRQ initialization */ |
| 74 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ | 74 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ |
| 75 | int acpi_ht __initdata = 1; /* enable HT */ | 75 | int acpi_ht __initdata = 1; /* enable HT */ |
| 76 | 76 | ||
| @@ -82,6 +82,7 @@ EXPORT_SYMBOL(acpi_strict); | |||
| 82 | acpi_interrupt_flags acpi_sci_flags __initdata; | 82 | acpi_interrupt_flags acpi_sci_flags __initdata; |
| 83 | int acpi_sci_override_gsi __initdata; | 83 | int acpi_sci_override_gsi __initdata; |
| 84 | int acpi_skip_timer_override __initdata; | 84 | int acpi_skip_timer_override __initdata; |
| 85 | int acpi_use_timer_override __initdata; | ||
| 85 | 86 | ||
| 86 | #ifdef CONFIG_X86_LOCAL_APIC | 87 | #ifdef CONFIG_X86_LOCAL_APIC |
| 87 | static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; | 88 | static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; |
| @@ -332,7 +333,7 @@ acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end) | |||
| 332 | /* | 333 | /* |
| 333 | * Parse Interrupt Source Override for the ACPI SCI | 334 | * Parse Interrupt Source Override for the ACPI SCI |
| 334 | */ | 335 | */ |
| 335 | static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | 336 | static void acpi_sci_ioapic_setup(u32 bus_irq, u32 gsi, u16 polarity, u16 trigger) |
| 336 | { | 337 | { |
| 337 | if (trigger == 0) /* compatible SCI trigger is level */ | 338 | if (trigger == 0) /* compatible SCI trigger is level */ |
| 338 | trigger = 3; | 339 | trigger = 3; |
| @@ -352,13 +353,13 @@ static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | |||
| 352 | * If GSI is < 16, this will update its flags, | 353 | * If GSI is < 16, this will update its flags, |
| 353 | * else it will create a new mp_irqs[] entry. | 354 | * else it will create a new mp_irqs[] entry. |
| 354 | */ | 355 | */ |
| 355 | mp_override_legacy_irq(gsi, polarity, trigger, gsi); | 356 | mp_override_legacy_irq(bus_irq, polarity, trigger, gsi); |
| 356 | 357 | ||
| 357 | /* | 358 | /* |
| 358 | * stash over-ride to indicate we've been here | 359 | * stash over-ride to indicate we've been here |
| 359 | * and for later update of acpi_fadt | 360 | * and for later update of acpi_fadt |
| 360 | */ | 361 | */ |
| 361 | acpi_sci_override_gsi = gsi; | 362 | acpi_sci_override_gsi = bus_irq; |
| 362 | return; | 363 | return; |
| 363 | } | 364 | } |
| 364 | 365 | ||
| @@ -376,7 +377,7 @@ acpi_parse_int_src_ovr(acpi_table_entry_header * header, | |||
| 376 | acpi_table_print_madt_entry(header); | 377 | acpi_table_print_madt_entry(header); |
| 377 | 378 | ||
| 378 | if (intsrc->bus_irq == acpi_fadt.sci_int) { | 379 | if (intsrc->bus_irq == acpi_fadt.sci_int) { |
| 379 | acpi_sci_ioapic_setup(intsrc->global_irq, | 380 | acpi_sci_ioapic_setup(intsrc->bus_irq, intsrc->global_irq, |
| 380 | intsrc->flags.polarity, | 381 | intsrc->flags.polarity, |
| 381 | intsrc->flags.trigger); | 382 | intsrc->flags.trigger); |
| 382 | return 0; | 383 | return 0; |
| @@ -879,7 +880,7 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
| 879 | * pretend we got one so we can set the SCI flags. | 880 | * pretend we got one so we can set the SCI flags. |
| 880 | */ | 881 | */ |
| 881 | if (!acpi_sci_override_gsi) | 882 | if (!acpi_sci_override_gsi) |
| 882 | acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); | 883 | acpi_sci_ioapic_setup(acpi_fadt.sci_int, acpi_fadt.sci_int, 0, 0); |
| 883 | 884 | ||
| 884 | /* Fill in identity legacy mapings where no override */ | 885 | /* Fill in identity legacy mapings where no override */ |
| 885 | mp_config_acpi_legacy_irqs(); | 886 | mp_config_acpi_legacy_irqs(); |
| @@ -1300,6 +1301,13 @@ static int __init parse_acpi_skip_timer_override(char *arg) | |||
| 1300 | return 0; | 1301 | return 0; |
| 1301 | } | 1302 | } |
| 1302 | early_param("acpi_skip_timer_override", parse_acpi_skip_timer_override); | 1303 | early_param("acpi_skip_timer_override", parse_acpi_skip_timer_override); |
| 1304 | |||
| 1305 | static int __init parse_acpi_use_timer_override(char *arg) | ||
| 1306 | { | ||
| 1307 | acpi_use_timer_override = 1; | ||
| 1308 | return 0; | ||
| 1309 | } | ||
| 1310 | early_param("acpi_use_timer_override", parse_acpi_use_timer_override); | ||
| 1303 | #endif /* CONFIG_X86_IO_APIC */ | 1311 | #endif /* CONFIG_X86_IO_APIC */ |
| 1304 | 1312 | ||
| 1305 | static int __init setup_acpi_sci(char *s) | 1313 | static int __init setup_acpi_sci(char *s) |
diff --git a/arch/i386/kernel/acpi/cstate.c b/arch/i386/kernel/acpi/cstate.c index 25db49ef1770..20563e52c622 100644 --- a/arch/i386/kernel/acpi/cstate.c +++ b/arch/i386/kernel/acpi/cstate.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/module.h> | 10 | #include <linux/module.h> |
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/acpi.h> | 12 | #include <linux/acpi.h> |
| 13 | #include <linux/cpu.h> | ||
| 13 | 14 | ||
| 14 | #include <acpi/processor.h> | 15 | #include <acpi/processor.h> |
| 15 | #include <asm/acpi.h> | 16 | #include <asm/acpi.h> |
| @@ -41,5 +42,124 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, | |||
| 41 | flags->bm_check = 1; | 42 | flags->bm_check = 1; |
| 42 | } | 43 | } |
| 43 | } | 44 | } |
| 44 | |||
| 45 | EXPORT_SYMBOL(acpi_processor_power_init_bm_check); | 45 | EXPORT_SYMBOL(acpi_processor_power_init_bm_check); |
| 46 | |||
| 47 | /* The code below handles cstate entry with monitor-mwait pair on Intel*/ | ||
| 48 | |||
| 49 | struct cstate_entry_s { | ||
| 50 | struct { | ||
| 51 | unsigned int eax; | ||
| 52 | unsigned int ecx; | ||
| 53 | } states[ACPI_PROCESSOR_MAX_POWER]; | ||
| 54 | }; | ||
| 55 | static struct cstate_entry_s *cpu_cstate_entry; /* per CPU ptr */ | ||
| 56 | |||
| 57 | static short mwait_supported[ACPI_PROCESSOR_MAX_POWER]; | ||
| 58 | |||
| 59 | #define MWAIT_SUBSTATE_MASK (0xf) | ||
| 60 | #define MWAIT_SUBSTATE_SIZE (4) | ||
| 61 | |||
| 62 | #define CPUID_MWAIT_LEAF (5) | ||
| 63 | #define CPUID5_ECX_EXTENSIONS_SUPPORTED (0x1) | ||
| 64 | #define CPUID5_ECX_INTERRUPT_BREAK (0x2) | ||
| 65 | |||
| 66 | #define MWAIT_ECX_INTERRUPT_BREAK (0x1) | ||
| 67 | |||
| 68 | #define NATIVE_CSTATE_BEYOND_HALT (2) | ||
| 69 | |||
| 70 | int acpi_processor_ffh_cstate_probe(unsigned int cpu, | ||
| 71 | struct acpi_processor_cx *cx, struct acpi_power_register *reg) | ||
| 72 | { | ||
| 73 | struct cstate_entry_s *percpu_entry; | ||
| 74 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
| 75 | |||
| 76 | cpumask_t saved_mask; | ||
| 77 | int retval; | ||
| 78 | unsigned int eax, ebx, ecx, edx; | ||
| 79 | unsigned int edx_part; | ||
| 80 | unsigned int cstate_type; /* C-state type and not ACPI C-state type */ | ||
| 81 | unsigned int num_cstate_subtype; | ||
| 82 | |||
| 83 | if (!cpu_cstate_entry || c->cpuid_level < CPUID_MWAIT_LEAF ) | ||
| 84 | return -1; | ||
| 85 | |||
| 86 | if (reg->bit_offset != NATIVE_CSTATE_BEYOND_HALT) | ||
| 87 | return -1; | ||
| 88 | |||
| 89 | percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu); | ||
| 90 | percpu_entry->states[cx->index].eax = 0; | ||
| 91 | percpu_entry->states[cx->index].ecx = 0; | ||
| 92 | |||
| 93 | /* Make sure we are running on right CPU */ | ||
| 94 | saved_mask = current->cpus_allowed; | ||
| 95 | retval = set_cpus_allowed(current, cpumask_of_cpu(cpu)); | ||
| 96 | if (retval) | ||
| 97 | return -1; | ||
| 98 | |||
| 99 | cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx); | ||
| 100 | |||
| 101 | /* Check whether this particular cx_type (in CST) is supported or not */ | ||
| 102 | cstate_type = (cx->address >> MWAIT_SUBSTATE_SIZE) + 1; | ||
| 103 | edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE); | ||
| 104 | num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK; | ||
| 105 | |||
| 106 | retval = 0; | ||
| 107 | if (num_cstate_subtype < (cx->address & MWAIT_SUBSTATE_MASK)) { | ||
| 108 | retval = -1; | ||
| 109 | goto out; | ||
| 110 | } | ||
| 111 | |||
| 112 | /* mwait ecx extensions INTERRUPT_BREAK should be supported for C2/C3 */ | ||
| 113 | if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED) || | ||
| 114 | !(ecx & CPUID5_ECX_INTERRUPT_BREAK)) { | ||
| 115 | retval = -1; | ||
| 116 | goto out; | ||
| 117 | } | ||
| 118 | percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK; | ||
| 119 | |||
| 120 | /* Use the hint in CST */ | ||
| 121 | percpu_entry->states[cx->index].eax = cx->address; | ||
| 122 | |||
| 123 | if (!mwait_supported[cstate_type]) { | ||
| 124 | mwait_supported[cstate_type] = 1; | ||
| 125 | printk(KERN_DEBUG "Monitor-Mwait will be used to enter C-%d " | ||
| 126 | "state\n", cx->type); | ||
| 127 | } | ||
| 128 | |||
| 129 | out: | ||
| 130 | set_cpus_allowed(current, saved_mask); | ||
| 131 | return retval; | ||
| 132 | } | ||
| 133 | EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_probe); | ||
| 134 | |||
| 135 | void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx) | ||
| 136 | { | ||
| 137 | unsigned int cpu = smp_processor_id(); | ||
| 138 | struct cstate_entry_s *percpu_entry; | ||
| 139 | |||
| 140 | percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu); | ||
| 141 | mwait_idle_with_hints(percpu_entry->states[cx->index].eax, | ||
| 142 | percpu_entry->states[cx->index].ecx); | ||
| 143 | } | ||
| 144 | EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_enter); | ||
| 145 | |||
| 146 | static int __init ffh_cstate_init(void) | ||
| 147 | { | ||
| 148 | struct cpuinfo_x86 *c = &boot_cpu_data; | ||
| 149 | if (c->x86_vendor != X86_VENDOR_INTEL) | ||
| 150 | return -1; | ||
| 151 | |||
| 152 | cpu_cstate_entry = alloc_percpu(struct cstate_entry_s); | ||
| 153 | return 0; | ||
| 154 | } | ||
| 155 | |||
| 156 | static void __exit ffh_cstate_exit(void) | ||
| 157 | { | ||
| 158 | if (cpu_cstate_entry) { | ||
| 159 | free_percpu(cpu_cstate_entry); | ||
| 160 | cpu_cstate_entry = NULL; | ||
| 161 | } | ||
| 162 | } | ||
| 163 | |||
| 164 | arch_initcall(ffh_cstate_init); | ||
| 165 | __exitcall(ffh_cstate_exit); | ||
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index fe799b11ac0a..c9841692bb7c 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
| @@ -27,11 +27,17 @@ static int __init check_bridge(int vendor, int device) | |||
| 27 | #ifdef CONFIG_ACPI | 27 | #ifdef CONFIG_ACPI |
| 28 | /* According to Nvidia all timer overrides are bogus unless HPET | 28 | /* According to Nvidia all timer overrides are bogus unless HPET |
| 29 | is enabled. */ | 29 | is enabled. */ |
| 30 | if (vendor == PCI_VENDOR_ID_NVIDIA) { | 30 | if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) { |
| 31 | nvidia_hpet_detected = 0; | 31 | nvidia_hpet_detected = 0; |
| 32 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); | 32 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); |
| 33 | if (nvidia_hpet_detected == 0) { | 33 | if (nvidia_hpet_detected == 0) { |
| 34 | acpi_skip_timer_override = 1; | 34 | acpi_skip_timer_override = 1; |
| 35 | printk(KERN_INFO "Nvidia board " | ||
| 36 | "detected. Ignoring ACPI " | ||
| 37 | "timer override.\n"); | ||
| 38 | printk(KERN_INFO "If you got timer trouble " | ||
| 39 | "try acpi_use_timer_override\n"); | ||
| 40 | |||
| 35 | } | 41 | } |
| 36 | } | 42 | } |
| 37 | #endif | 43 | #endif |
diff --git a/arch/i386/kernel/alternative.c b/arch/i386/kernel/alternative.c index 28ab80649764..583c238e17fb 100644 --- a/arch/i386/kernel/alternative.c +++ b/arch/i386/kernel/alternative.c | |||
| @@ -344,6 +344,7 @@ void alternatives_smp_switch(int smp) | |||
| 344 | 344 | ||
| 345 | void __init alternative_instructions(void) | 345 | void __init alternative_instructions(void) |
| 346 | { | 346 | { |
| 347 | unsigned long flags; | ||
| 347 | if (no_replacement) { | 348 | if (no_replacement) { |
| 348 | printk(KERN_INFO "(SMP-)alternatives turned off\n"); | 349 | printk(KERN_INFO "(SMP-)alternatives turned off\n"); |
| 349 | free_init_pages("SMP alternatives", | 350 | free_init_pages("SMP alternatives", |
| @@ -351,6 +352,8 @@ void __init alternative_instructions(void) | |||
| 351 | (unsigned long)__smp_alt_end); | 352 | (unsigned long)__smp_alt_end); |
| 352 | return; | 353 | return; |
| 353 | } | 354 | } |
| 355 | |||
| 356 | local_irq_save(flags); | ||
| 354 | apply_alternatives(__alt_instructions, __alt_instructions_end); | 357 | apply_alternatives(__alt_instructions, __alt_instructions_end); |
| 355 | 358 | ||
| 356 | /* switch to patch-once-at-boottime-only mode and free the | 359 | /* switch to patch-once-at-boottime-only mode and free the |
| @@ -386,4 +389,5 @@ void __init alternative_instructions(void) | |||
| 386 | alternatives_smp_switch(0); | 389 | alternatives_smp_switch(0); |
| 387 | } | 390 | } |
| 388 | #endif | 391 | #endif |
| 392 | local_irq_restore(flags); | ||
| 389 | } | 393 | } |
diff --git a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c index b42f2d914af3..a60358fe9a49 100644 --- a/arch/i386/kernel/apm.c +++ b/arch/i386/kernel/apm.c | |||
| @@ -198,7 +198,7 @@ | |||
| 198 | * (APM) BIOS Interface Specification, Revision 1.2, February 1996. | 198 | * (APM) BIOS Interface Specification, Revision 1.2, February 1996. |
| 199 | * | 199 | * |
| 200 | * [This document is available from Microsoft at: | 200 | * [This document is available from Microsoft at: |
| 201 | * http://www.microsoft.com/hwdev/busbios/amp_12.htm] | 201 | * http://www.microsoft.com/whdc/archive/amp_12.mspx] |
| 202 | */ | 202 | */ |
| 203 | 203 | ||
| 204 | #include <linux/module.h> | 204 | #include <linux/module.h> |
| @@ -540,11 +540,30 @@ static inline void apm_restore_cpus(cpumask_t mask) | |||
| 540 | * Also, we KNOW that for the non error case of apm_bios_call, there | 540 | * Also, we KNOW that for the non error case of apm_bios_call, there |
| 541 | * is no useful data returned in the low order 8 bits of eax. | 541 | * is no useful data returned in the low order 8 bits of eax. |
| 542 | */ | 542 | */ |
| 543 | #define APM_DO_CLI \ | 543 | |
| 544 | if (apm_info.allow_ints) \ | 544 | static inline unsigned long __apm_irq_save(void) |
| 545 | local_irq_enable(); \ | 545 | { |
| 546 | else \ | 546 | unsigned long flags; |
| 547 | local_save_flags(flags); | ||
| 548 | if (apm_info.allow_ints) { | ||
| 549 | if (irqs_disabled_flags(flags)) | ||
| 550 | local_irq_enable(); | ||
| 551 | } else | ||
| 552 | local_irq_disable(); | ||
| 553 | |||
| 554 | return flags; | ||
| 555 | } | ||
| 556 | |||
| 557 | #define apm_irq_save(flags) \ | ||
| 558 | do { flags = __apm_irq_save(); } while (0) | ||
| 559 | |||
| 560 | static inline void apm_irq_restore(unsigned long flags) | ||
| 561 | { | ||
| 562 | if (irqs_disabled_flags(flags)) | ||
| 547 | local_irq_disable(); | 563 | local_irq_disable(); |
| 564 | else if (irqs_disabled()) | ||
| 565 | local_irq_enable(); | ||
| 566 | } | ||
| 548 | 567 | ||
| 549 | #ifdef APM_ZERO_SEGS | 568 | #ifdef APM_ZERO_SEGS |
| 550 | # define APM_DECL_SEGS \ | 569 | # define APM_DECL_SEGS \ |
| @@ -596,12 +615,11 @@ static u8 apm_bios_call(u32 func, u32 ebx_in, u32 ecx_in, | |||
| 596 | save_desc_40 = gdt[0x40 / 8]; | 615 | save_desc_40 = gdt[0x40 / 8]; |
| 597 | gdt[0x40 / 8] = bad_bios_desc; | 616 | gdt[0x40 / 8] = bad_bios_desc; |
| 598 | 617 | ||
| 599 | local_save_flags(flags); | 618 | apm_irq_save(flags); |
| 600 | APM_DO_CLI; | ||
| 601 | APM_DO_SAVE_SEGS; | 619 | APM_DO_SAVE_SEGS; |
| 602 | apm_bios_call_asm(func, ebx_in, ecx_in, eax, ebx, ecx, edx, esi); | 620 | apm_bios_call_asm(func, ebx_in, ecx_in, eax, ebx, ecx, edx, esi); |
| 603 | APM_DO_RESTORE_SEGS; | 621 | APM_DO_RESTORE_SEGS; |
| 604 | local_irq_restore(flags); | 622 | apm_irq_restore(flags); |
| 605 | gdt[0x40 / 8] = save_desc_40; | 623 | gdt[0x40 / 8] = save_desc_40; |
| 606 | put_cpu(); | 624 | put_cpu(); |
| 607 | apm_restore_cpus(cpus); | 625 | apm_restore_cpus(cpus); |
| @@ -640,12 +658,11 @@ static u8 apm_bios_call_simple(u32 func, u32 ebx_in, u32 ecx_in, u32 *eax) | |||
| 640 | save_desc_40 = gdt[0x40 / 8]; | 658 | save_desc_40 = gdt[0x40 / 8]; |
| 641 | gdt[0x40 / 8] = bad_bios_desc; | 659 | gdt[0x40 / 8] = bad_bios_desc; |
| 642 | 660 | ||
| 643 | local_save_flags(flags); | 661 | apm_irq_save(flags); |
| 644 | APM_DO_CLI; | ||
| 645 | APM_DO_SAVE_SEGS; | 662 | APM_DO_SAVE_SEGS; |
| 646 | error = apm_bios_call_simple_asm(func, ebx_in, ecx_in, eax); | 663 | error = apm_bios_call_simple_asm(func, ebx_in, ecx_in, eax); |
| 647 | APM_DO_RESTORE_SEGS; | 664 | APM_DO_RESTORE_SEGS; |
| 648 | local_irq_restore(flags); | 665 | apm_irq_restore(flags); |
| 649 | gdt[0x40 / 8] = save_desc_40; | 666 | gdt[0x40 / 8] = save_desc_40; |
| 650 | put_cpu(); | 667 | put_cpu(); |
| 651 | apm_restore_cpus(cpus); | 668 | apm_restore_cpus(cpus); |
diff --git a/arch/i386/kernel/cpu/mcheck/therm_throt.c b/arch/i386/kernel/cpu/mcheck/therm_throt.c index 4f43047de406..2d8703b7ce65 100644 --- a/arch/i386/kernel/cpu/mcheck/therm_throt.c +++ b/arch/i386/kernel/cpu/mcheck/therm_throt.c | |||
| @@ -110,17 +110,15 @@ int therm_throt_process(int curr) | |||
| 110 | 110 | ||
| 111 | #ifdef CONFIG_SYSFS | 111 | #ifdef CONFIG_SYSFS |
| 112 | /* Add/Remove thermal_throttle interface for CPU device */ | 112 | /* Add/Remove thermal_throttle interface for CPU device */ |
| 113 | static __cpuinit int thermal_throttle_add_dev(struct sys_device * sys_dev) | 113 | static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev) |
| 114 | { | 114 | { |
| 115 | sysfs_create_group(&sys_dev->kobj, &thermal_throttle_attr_group); | 115 | return sysfs_create_group(&sys_dev->kobj, &thermal_throttle_attr_group); |
| 116 | return 0; | ||
| 117 | } | 116 | } |
| 118 | 117 | ||
| 119 | #ifdef CONFIG_HOTPLUG_CPU | 118 | #ifdef CONFIG_HOTPLUG_CPU |
| 120 | static __cpuinit int thermal_throttle_remove_dev(struct sys_device * sys_dev) | 119 | static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) |
| 121 | { | 120 | { |
| 122 | sysfs_remove_group(&sys_dev->kobj, &thermal_throttle_attr_group); | 121 | return sysfs_remove_group(&sys_dev->kobj, &thermal_throttle_attr_group); |
| 123 | return 0; | ||
| 124 | } | 122 | } |
| 125 | 123 | ||
| 126 | /* Mutex protecting device creation against CPU hotplug */ | 124 | /* Mutex protecting device creation against CPU hotplug */ |
| @@ -133,12 +131,14 @@ static __cpuinit int thermal_throttle_cpu_callback(struct notifier_block *nfb, | |||
| 133 | { | 131 | { |
| 134 | unsigned int cpu = (unsigned long)hcpu; | 132 | unsigned int cpu = (unsigned long)hcpu; |
| 135 | struct sys_device *sys_dev; | 133 | struct sys_device *sys_dev; |
| 134 | int err; | ||
| 136 | 135 | ||
| 137 | sys_dev = get_cpu_sysdev(cpu); | 136 | sys_dev = get_cpu_sysdev(cpu); |
| 138 | mutex_lock(&therm_cpu_lock); | 137 | mutex_lock(&therm_cpu_lock); |
| 139 | switch (action) { | 138 | switch (action) { |
| 140 | case CPU_ONLINE: | 139 | case CPU_ONLINE: |
| 141 | thermal_throttle_add_dev(sys_dev); | 140 | err = thermal_throttle_add_dev(sys_dev); |
| 141 | WARN_ON(err); | ||
| 142 | break; | 142 | break; |
| 143 | case CPU_DEAD: | 143 | case CPU_DEAD: |
| 144 | thermal_throttle_remove_dev(sys_dev); | 144 | thermal_throttle_remove_dev(sys_dev); |
| @@ -157,6 +157,7 @@ static struct notifier_block thermal_throttle_cpu_notifier = | |||
| 157 | static __init int thermal_throttle_init_device(void) | 157 | static __init int thermal_throttle_init_device(void) |
| 158 | { | 158 | { |
| 159 | unsigned int cpu = 0; | 159 | unsigned int cpu = 0; |
| 160 | int err; | ||
| 160 | 161 | ||
| 161 | if (!atomic_read(&therm_throt_en)) | 162 | if (!atomic_read(&therm_throt_en)) |
| 162 | return 0; | 163 | return 0; |
| @@ -167,8 +168,10 @@ static __init int thermal_throttle_init_device(void) | |||
| 167 | mutex_lock(&therm_cpu_lock); | 168 | mutex_lock(&therm_cpu_lock); |
| 168 | #endif | 169 | #endif |
| 169 | /* connect live CPUs to sysfs */ | 170 | /* connect live CPUs to sysfs */ |
| 170 | for_each_online_cpu(cpu) | 171 | for_each_online_cpu(cpu) { |
| 171 | thermal_throttle_add_dev(get_cpu_sysdev(cpu)); | 172 | err = thermal_throttle_add_dev(get_cpu_sysdev(cpu)); |
| 173 | WARN_ON(err); | ||
| 174 | } | ||
| 172 | #ifdef CONFIG_HOTPLUG_CPU | 175 | #ifdef CONFIG_HOTPLUG_CPU |
| 173 | mutex_unlock(&therm_cpu_lock); | 176 | mutex_unlock(&therm_cpu_lock); |
| 174 | #endif | 177 | #endif |
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S index be9d883c62ce..ca31f18d277c 100644 --- a/arch/i386/kernel/head.S +++ b/arch/i386/kernel/head.S | |||
| @@ -317,7 +317,7 @@ is386: movl $2,%ecx # set MP | |||
| 317 | movl %eax,%gs | 317 | movl %eax,%gs |
| 318 | lldt %ax | 318 | lldt %ax |
| 319 | cld # gcc2 wants the direction flag cleared at all times | 319 | cld # gcc2 wants the direction flag cleared at all times |
| 320 | pushl %eax # fake return address | 320 | pushl $0 # fake return address for unwinder |
| 321 | #ifdef CONFIG_SMP | 321 | #ifdef CONFIG_SMP |
| 322 | movb ready, %cl | 322 | movb ready, %cl |
| 323 | movb $1, ready | 323 | movb $1, ready |
diff --git a/arch/i386/kernel/i8253.c b/arch/i386/kernel/i8253.c index 477b24daff53..9a0060b92e32 100644 --- a/arch/i386/kernel/i8253.c +++ b/arch/i386/kernel/i8253.c | |||
| @@ -109,7 +109,7 @@ static struct clocksource clocksource_pit = { | |||
| 109 | 109 | ||
| 110 | static int __init init_pit_clocksource(void) | 110 | static int __init init_pit_clocksource(void) |
| 111 | { | 111 | { |
| 112 | if (num_possible_cpus() > 4) /* PIT does not scale! */ | 112 | if (num_possible_cpus() > 1) /* PIT does not scale! */ |
| 113 | return 0; | 113 | return 0; |
| 114 | 114 | ||
| 115 | clocksource_pit.mult = clocksource_hz2mult(CLOCK_TICK_RATE, 20); | 115 | clocksource_pit.mult = clocksource_hz2mult(CLOCK_TICK_RATE, 20); |
diff --git a/arch/i386/kernel/i8259.c b/arch/i386/kernel/i8259.c index d53eafb6daa7..62996cd17084 100644 --- a/arch/i386/kernel/i8259.c +++ b/arch/i386/kernel/i8259.c | |||
| @@ -113,7 +113,8 @@ void make_8259A_irq(unsigned int irq) | |||
| 113 | { | 113 | { |
| 114 | disable_irq_nosync(irq); | 114 | disable_irq_nosync(irq); |
| 115 | io_apic_irqs &= ~(1<<irq); | 115 | io_apic_irqs &= ~(1<<irq); |
| 116 | set_irq_chip_and_handler(irq, &i8259A_chip, handle_level_irq); | 116 | set_irq_chip_and_handler_name(irq, &i8259A_chip, handle_level_irq, |
| 117 | "XT"); | ||
| 117 | enable_irq(irq); | 118 | enable_irq(irq); |
| 118 | } | 119 | } |
| 119 | 120 | ||
| @@ -369,8 +370,8 @@ void __init init_ISA_irqs (void) | |||
| 369 | /* | 370 | /* |
| 370 | * 16 old-style INTA-cycle interrupts: | 371 | * 16 old-style INTA-cycle interrupts: |
| 371 | */ | 372 | */ |
| 372 | set_irq_chip_and_handler(i, &i8259A_chip, | 373 | set_irq_chip_and_handler_name(i, &i8259A_chip, |
| 373 | handle_level_irq); | 374 | handle_level_irq, "XT"); |
| 374 | } else { | 375 | } else { |
| 375 | /* | 376 | /* |
| 376 | * 'high' PCI IRQs filled in on demand | 377 | * 'high' PCI IRQs filled in on demand |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index cd082c36ca03..3b7a63e0ed1a 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
| @@ -91,6 +91,46 @@ static struct irq_pin_list { | |||
| 91 | int apic, pin, next; | 91 | int apic, pin, next; |
| 92 | } irq_2_pin[PIN_MAP_SIZE]; | 92 | } irq_2_pin[PIN_MAP_SIZE]; |
| 93 | 93 | ||
| 94 | struct io_apic { | ||
| 95 | unsigned int index; | ||
| 96 | unsigned int unused[3]; | ||
| 97 | unsigned int data; | ||
| 98 | }; | ||
| 99 | |||
| 100 | static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) | ||
| 101 | { | ||
| 102 | return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) | ||
| 103 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK); | ||
| 104 | } | ||
| 105 | |||
| 106 | static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) | ||
| 107 | { | ||
| 108 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 109 | writel(reg, &io_apic->index); | ||
| 110 | return readl(&io_apic->data); | ||
| 111 | } | ||
| 112 | |||
| 113 | static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) | ||
| 114 | { | ||
| 115 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 116 | writel(reg, &io_apic->index); | ||
| 117 | writel(value, &io_apic->data); | ||
| 118 | } | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Re-write a value: to be used for read-modify-write | ||
| 122 | * cycles where the read already set up the index register. | ||
| 123 | * | ||
| 124 | * Older SiS APIC requires we rewrite the index register | ||
| 125 | */ | ||
| 126 | static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value) | ||
| 127 | { | ||
| 128 | volatile struct io_apic *io_apic = io_apic_base(apic); | ||
| 129 | if (sis_apic_bug) | ||
| 130 | writel(reg, &io_apic->index); | ||
| 131 | writel(value, &io_apic->data); | ||
| 132 | } | ||
| 133 | |||
| 94 | union entry_union { | 134 | union entry_union { |
| 95 | struct { u32 w1, w2; }; | 135 | struct { u32 w1, w2; }; |
| 96 | struct IO_APIC_route_entry entry; | 136 | struct IO_APIC_route_entry entry; |
| @@ -107,12 +147,34 @@ static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) | |||
| 107 | return eu.entry; | 147 | return eu.entry; |
| 108 | } | 148 | } |
| 109 | 149 | ||
| 150 | /* | ||
| 151 | * When we write a new IO APIC routing entry, we need to write the high | ||
| 152 | * word first! If the mask bit in the low word is clear, we will enable | ||
| 153 | * the interrupt, and we need to make sure the entry is fully populated | ||
| 154 | * before that happens. | ||
| 155 | */ | ||
| 110 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) | 156 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) |
| 111 | { | 157 | { |
| 112 | unsigned long flags; | 158 | unsigned long flags; |
| 113 | union entry_union eu; | 159 | union entry_union eu; |
| 114 | eu.entry = e; | 160 | eu.entry = e; |
| 115 | spin_lock_irqsave(&ioapic_lock, flags); | 161 | spin_lock_irqsave(&ioapic_lock, flags); |
| 162 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | ||
| 163 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | ||
| 164 | spin_unlock_irqrestore(&ioapic_lock, flags); | ||
| 165 | } | ||
| 166 | |||
| 167 | /* | ||
| 168 | * When we mask an IO APIC routing entry, we need to write the low | ||
| 169 | * word first, in order to set the mask bit before we change the | ||
| 170 | * high bits! | ||
| 171 | */ | ||
| 172 | static void ioapic_mask_entry(int apic, int pin) | ||
| 173 | { | ||
| 174 | unsigned long flags; | ||
| 175 | union entry_union eu = { .entry.mask = 1 }; | ||
| 176 | |||
| 177 | spin_lock_irqsave(&ioapic_lock, flags); | ||
| 116 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | 178 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); |
| 117 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | 179 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); |
| 118 | spin_unlock_irqrestore(&ioapic_lock, flags); | 180 | spin_unlock_irqrestore(&ioapic_lock, flags); |
| @@ -234,9 +296,7 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) | |||
| 234 | /* | 296 | /* |
| 235 | * Disable it in the IO-APIC irq-routing table: | 297 | * Disable it in the IO-APIC irq-routing table: |
| 236 | */ | 298 | */ |
| 237 | memset(&entry, 0, sizeof(entry)); | 299 | ioapic_mask_entry(apic, pin); |
| 238 | entry.mask = 1; | ||
| 239 | ioapic_write_entry(apic, pin, entry); | ||
| 240 | } | 300 | } |
| 241 | 301 | ||
| 242 | static void clear_IO_APIC (void) | 302 | static void clear_IO_APIC (void) |
| @@ -1225,11 +1285,13 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger) | |||
| 1225 | { | 1285 | { |
| 1226 | if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || | 1286 | if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || |
| 1227 | trigger == IOAPIC_LEVEL) | 1287 | trigger == IOAPIC_LEVEL) |
| 1228 | set_irq_chip_and_handler(irq, &ioapic_chip, | 1288 | set_irq_chip_and_handler_name(irq, &ioapic_chip, |
| 1229 | handle_fasteoi_irq); | 1289 | handle_fasteoi_irq, "fasteoi"); |
| 1230 | else | 1290 | else { |
| 1231 | set_irq_chip_and_handler(irq, &ioapic_chip, | 1291 | irq_desc[irq].status |= IRQ_DELAYED_DISABLE; |
| 1232 | handle_edge_irq); | 1292 | set_irq_chip_and_handler_name(irq, &ioapic_chip, |
| 1293 | handle_edge_irq, "edge"); | ||
| 1294 | } | ||
| 1233 | set_intr_gate(vector, interrupt[irq]); | 1295 | set_intr_gate(vector, interrupt[irq]); |
| 1234 | } | 1296 | } |
| 1235 | 1297 | ||
| @@ -2235,7 +2297,8 @@ static inline void check_timer(void) | |||
| 2235 | printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); | 2297 | printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); |
| 2236 | 2298 | ||
| 2237 | disable_8259A_irq(0); | 2299 | disable_8259A_irq(0); |
| 2238 | set_irq_chip_and_handler(0, &lapic_chip, handle_fasteoi_irq); | 2300 | set_irq_chip_and_handler_name(0, &lapic_chip, handle_fasteoi_irq, |
| 2301 | "fasteio"); | ||
| 2239 | apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ | 2302 | apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ |
| 2240 | enable_8259A_irq(0); | 2303 | enable_8259A_irq(0); |
| 2241 | 2304 | ||
| @@ -2541,7 +2604,8 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev) | |||
| 2541 | 2604 | ||
| 2542 | write_msi_msg(irq, &msg); | 2605 | write_msi_msg(irq, &msg); |
| 2543 | 2606 | ||
| 2544 | set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq); | 2607 | set_irq_chip_and_handler_name(irq, &msi_chip, handle_edge_irq, |
| 2608 | "edge"); | ||
| 2545 | 2609 | ||
| 2546 | return 0; | 2610 | return 0; |
| 2547 | } | 2611 | } |
| @@ -2562,18 +2626,16 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
| 2562 | 2626 | ||
| 2563 | static void target_ht_irq(unsigned int irq, unsigned int dest) | 2627 | static void target_ht_irq(unsigned int irq, unsigned int dest) |
| 2564 | { | 2628 | { |
| 2565 | u32 low, high; | 2629 | struct ht_irq_msg msg; |
| 2566 | low = read_ht_irq_low(irq); | 2630 | fetch_ht_irq_msg(irq, &msg); |
| 2567 | high = read_ht_irq_high(irq); | ||
| 2568 | 2631 | ||
| 2569 | low &= ~(HT_IRQ_LOW_DEST_ID_MASK); | 2632 | msg.address_lo &= ~(HT_IRQ_LOW_DEST_ID_MASK); |
| 2570 | high &= ~(HT_IRQ_HIGH_DEST_ID_MASK); | 2633 | msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK); |
| 2571 | 2634 | ||
| 2572 | low |= HT_IRQ_LOW_DEST_ID(dest); | 2635 | msg.address_lo |= HT_IRQ_LOW_DEST_ID(dest); |
| 2573 | high |= HT_IRQ_HIGH_DEST_ID(dest); | 2636 | msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest); |
| 2574 | 2637 | ||
| 2575 | write_ht_irq_low(irq, low); | 2638 | write_ht_irq_msg(irq, &msg); |
| 2576 | write_ht_irq_high(irq, high); | ||
| 2577 | } | 2639 | } |
| 2578 | 2640 | ||
| 2579 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | 2641 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) |
| @@ -2594,7 +2656,7 @@ static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | |||
| 2594 | } | 2656 | } |
| 2595 | #endif | 2657 | #endif |
| 2596 | 2658 | ||
| 2597 | static struct hw_interrupt_type ht_irq_chip = { | 2659 | static struct irq_chip ht_irq_chip = { |
| 2598 | .name = "PCI-HT", | 2660 | .name = "PCI-HT", |
| 2599 | .mask = mask_ht_irq, | 2661 | .mask = mask_ht_irq, |
| 2600 | .unmask = unmask_ht_irq, | 2662 | .unmask = unmask_ht_irq, |
| @@ -2611,7 +2673,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
| 2611 | 2673 | ||
| 2612 | vector = assign_irq_vector(irq); | 2674 | vector = assign_irq_vector(irq); |
| 2613 | if (vector >= 0) { | 2675 | if (vector >= 0) { |
| 2614 | u32 low, high; | 2676 | struct ht_irq_msg msg; |
| 2615 | unsigned dest; | 2677 | unsigned dest; |
| 2616 | cpumask_t tmp; | 2678 | cpumask_t tmp; |
| 2617 | 2679 | ||
| @@ -2619,9 +2681,10 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
| 2619 | cpu_set(vector >> 8, tmp); | 2681 | cpu_set(vector >> 8, tmp); |
| 2620 | dest = cpu_mask_to_apicid(tmp); | 2682 | dest = cpu_mask_to_apicid(tmp); |
| 2621 | 2683 | ||
| 2622 | high = HT_IRQ_HIGH_DEST_ID(dest); | 2684 | msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest); |
| 2623 | 2685 | ||
| 2624 | low = HT_IRQ_LOW_BASE | | 2686 | msg.address_lo = |
| 2687 | HT_IRQ_LOW_BASE | | ||
| 2625 | HT_IRQ_LOW_DEST_ID(dest) | | 2688 | HT_IRQ_LOW_DEST_ID(dest) | |
| 2626 | HT_IRQ_LOW_VECTOR(vector) | | 2689 | HT_IRQ_LOW_VECTOR(vector) | |
| 2627 | ((INT_DEST_MODE == 0) ? | 2690 | ((INT_DEST_MODE == 0) ? |
| @@ -2633,10 +2696,10 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
| 2633 | HT_IRQ_LOW_MT_ARBITRATED) | | 2696 | HT_IRQ_LOW_MT_ARBITRATED) | |
| 2634 | HT_IRQ_LOW_IRQ_MASKED; | 2697 | HT_IRQ_LOW_IRQ_MASKED; |
| 2635 | 2698 | ||
| 2636 | write_ht_irq_low(irq, low); | 2699 | write_ht_irq_msg(irq, &msg); |
| 2637 | write_ht_irq_high(irq, high); | ||
| 2638 | 2700 | ||
| 2639 | set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq); | 2701 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, |
| 2702 | handle_edge_irq, "edge"); | ||
| 2640 | } | 2703 | } |
| 2641 | return vector; | 2704 | return vector; |
| 2642 | } | 2705 | } |
diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c index 8cfc7dbec7b9..3201d421090a 100644 --- a/arch/i386/kernel/irq.c +++ b/arch/i386/kernel/irq.c | |||
| @@ -258,7 +258,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 258 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 258 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
| 259 | #endif | 259 | #endif |
| 260 | seq_printf(p, " %8s", irq_desc[i].chip->name); | 260 | seq_printf(p, " %8s", irq_desc[i].chip->name); |
| 261 | seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq)); | 261 | seq_printf(p, "-%-8s", irq_desc[i].name); |
| 262 | seq_printf(p, " %s", action->name); | 262 | seq_printf(p, " %s", action->name); |
| 263 | 263 | ||
| 264 | for (action=action->next; action; action = action->next) | 264 | for (action=action->next; action; action = action->next) |
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c index d98e44b16fe2..fc79e1e859c4 100644 --- a/arch/i386/kernel/kprobes.c +++ b/arch/i386/kernel/kprobes.c | |||
| @@ -361,8 +361,11 @@ no_kprobe: | |||
| 361 | asm volatile ( ".global kretprobe_trampoline\n" | 361 | asm volatile ( ".global kretprobe_trampoline\n" |
| 362 | "kretprobe_trampoline: \n" | 362 | "kretprobe_trampoline: \n" |
| 363 | " pushf\n" | 363 | " pushf\n" |
| 364 | /* skip cs, eip, orig_eax, es, ds */ | 364 | /* skip cs, eip, orig_eax */ |
| 365 | " subl $20, %esp\n" | 365 | " subl $12, %esp\n" |
| 366 | " pushl %gs\n" | ||
| 367 | " pushl %ds\n" | ||
| 368 | " pushl %es\n" | ||
| 366 | " pushl %eax\n" | 369 | " pushl %eax\n" |
| 367 | " pushl %ebp\n" | 370 | " pushl %ebp\n" |
| 368 | " pushl %edi\n" | 371 | " pushl %edi\n" |
| @@ -373,10 +376,10 @@ no_kprobe: | |||
| 373 | " movl %esp, %eax\n" | 376 | " movl %esp, %eax\n" |
| 374 | " call trampoline_handler\n" | 377 | " call trampoline_handler\n" |
| 375 | /* move eflags to cs */ | 378 | /* move eflags to cs */ |
| 376 | " movl 48(%esp), %edx\n" | 379 | " movl 52(%esp), %edx\n" |
| 377 | " movl %edx, 44(%esp)\n" | 380 | " movl %edx, 48(%esp)\n" |
| 378 | /* save true return address on eflags */ | 381 | /* save true return address on eflags */ |
| 379 | " movl %eax, 48(%esp)\n" | 382 | " movl %eax, 52(%esp)\n" |
| 380 | " popl %ebx\n" | 383 | " popl %ebx\n" |
| 381 | " popl %ecx\n" | 384 | " popl %ecx\n" |
| 382 | " popl %edx\n" | 385 | " popl %edx\n" |
| @@ -384,8 +387,8 @@ no_kprobe: | |||
| 384 | " popl %edi\n" | 387 | " popl %edi\n" |
| 385 | " popl %ebp\n" | 388 | " popl %ebp\n" |
| 386 | " popl %eax\n" | 389 | " popl %eax\n" |
| 387 | /* skip eip, orig_eax, es, ds */ | 390 | /* skip eip, orig_eax, es, ds, gs */ |
| 388 | " addl $16, %esp\n" | 391 | " addl $20, %esp\n" |
| 389 | " popf\n" | 392 | " popf\n" |
| 390 | " ret\n"); | 393 | " ret\n"); |
| 391 | } | 394 | } |
| @@ -404,6 +407,10 @@ fastcall void *__kprobes trampoline_handler(struct pt_regs *regs) | |||
| 404 | INIT_HLIST_HEAD(&empty_rp); | 407 | INIT_HLIST_HEAD(&empty_rp); |
| 405 | spin_lock_irqsave(&kretprobe_lock, flags); | 408 | spin_lock_irqsave(&kretprobe_lock, flags); |
| 406 | head = kretprobe_inst_table_head(current); | 409 | head = kretprobe_inst_table_head(current); |
| 410 | /* fixup registers */ | ||
| 411 | regs->xcs = __KERNEL_CS; | ||
| 412 | regs->eip = trampoline_address; | ||
| 413 | regs->orig_eax = 0xffffffff; | ||
| 407 | 414 | ||
| 408 | /* | 415 | /* |
| 409 | * It is possible to have multiple instances associated with a given | 416 | * It is possible to have multiple instances associated with a given |
| @@ -425,6 +432,7 @@ fastcall void *__kprobes trampoline_handler(struct pt_regs *regs) | |||
| 425 | 432 | ||
| 426 | if (ri->rp && ri->rp->handler){ | 433 | if (ri->rp && ri->rp->handler){ |
| 427 | __get_cpu_var(current_kprobe) = &ri->rp->kp; | 434 | __get_cpu_var(current_kprobe) = &ri->rp->kp; |
| 435 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; | ||
| 428 | ri->rp->handler(ri, regs); | 436 | ri->rp->handler(ri, regs); |
| 429 | __get_cpu_var(current_kprobe) = NULL; | 437 | __get_cpu_var(current_kprobe) = NULL; |
| 430 | } | 438 | } |
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c index 9b9479768d5e..23f5984d0654 100644 --- a/arch/i386/kernel/microcode.c +++ b/arch/i386/kernel/microcode.c | |||
| @@ -577,7 +577,7 @@ static void microcode_init_cpu(int cpu) | |||
| 577 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); | 577 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); |
| 578 | mutex_lock(µcode_mutex); | 578 | mutex_lock(µcode_mutex); |
| 579 | collect_cpu_info(cpu); | 579 | collect_cpu_info(cpu); |
| 580 | if (uci->valid) | 580 | if (uci->valid && system_state == SYSTEM_RUNNING) |
| 581 | cpu_request_microcode(cpu); | 581 | cpu_request_microcode(cpu); |
| 582 | mutex_unlock(µcode_mutex); | 582 | mutex_unlock(µcode_mutex); |
| 583 | set_cpus_allowed(current, old); | 583 | set_cpus_allowed(current, old); |
| @@ -656,14 +656,18 @@ static struct attribute_group mc_attr_group = { | |||
| 656 | 656 | ||
| 657 | static int mc_sysdev_add(struct sys_device *sys_dev) | 657 | static int mc_sysdev_add(struct sys_device *sys_dev) |
| 658 | { | 658 | { |
| 659 | int cpu = sys_dev->id; | 659 | int err, cpu = sys_dev->id; |
| 660 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu; | 660 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu; |
| 661 | 661 | ||
| 662 | if (!cpu_online(cpu)) | 662 | if (!cpu_online(cpu)) |
| 663 | return 0; | 663 | return 0; |
| 664 | |||
| 664 | pr_debug("Microcode:CPU %d added\n", cpu); | 665 | pr_debug("Microcode:CPU %d added\n", cpu); |
| 665 | memset(uci, 0, sizeof(*uci)); | 666 | memset(uci, 0, sizeof(*uci)); |
| 666 | sysfs_create_group(&sys_dev->kobj, &mc_attr_group); | 667 | |
| 668 | err = sysfs_create_group(&sys_dev->kobj, &mc_attr_group); | ||
| 669 | if (err) | ||
| 670 | return err; | ||
| 667 | 671 | ||
| 668 | microcode_init_cpu(cpu); | 672 | microcode_init_cpu(cpu); |
| 669 | return 0; | 673 | return 0; |
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c index 3e8e3adb0489..eaafe233a5da 100644 --- a/arch/i386/kernel/nmi.c +++ b/arch/i386/kernel/nmi.c | |||
| @@ -219,11 +219,11 @@ static int __init check_nmi_watchdog(void) | |||
| 219 | int cpu; | 219 | int cpu; |
| 220 | 220 | ||
| 221 | /* Enable NMI watchdog for newer systems. | 221 | /* Enable NMI watchdog for newer systems. |
| 222 | Actually it should be safe for most systems before 2004 too except | 222 | Probably safe on most older systems too, but let's be careful. |
| 223 | for some IBM systems that corrupt registers when NMI happens | 223 | IBM ThinkPads use INT10 inside SMM and that allows early NMI inside SMM |
| 224 | during SMM. Unfortunately we don't have more exact information | 224 | which hangs the system. Disable watchdog for all thinkpads */ |
| 225 | on these and use this coarse check. */ | 225 | if (nmi_watchdog == NMI_DEFAULT && dmi_get_year(DMI_BIOS_DATE) >= 2004 && |
| 226 | if (nmi_watchdog == NMI_DEFAULT && dmi_get_year(DMI_BIOS_DATE) >= 2004) | 226 | !dmi_name_in_vendors("ThinkPad")) |
| 227 | nmi_watchdog = NMI_LOCAL_APIC; | 227 | nmi_watchdog = NMI_LOCAL_APIC; |
| 228 | 228 | ||
| 229 | if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT)) | 229 | if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT)) |
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index b0a07801d9df..dd53c58f64f1 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c | |||
| @@ -205,7 +205,7 @@ void cpu_idle(void) | |||
| 205 | void cpu_idle_wait(void) | 205 | void cpu_idle_wait(void) |
| 206 | { | 206 | { |
| 207 | unsigned int cpu, this_cpu = get_cpu(); | 207 | unsigned int cpu, this_cpu = get_cpu(); |
| 208 | cpumask_t map; | 208 | cpumask_t map, tmp = current->cpus_allowed; |
| 209 | 209 | ||
| 210 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); | 210 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); |
| 211 | put_cpu(); | 211 | put_cpu(); |
| @@ -227,6 +227,8 @@ void cpu_idle_wait(void) | |||
| 227 | } | 227 | } |
| 228 | cpus_and(map, map, cpu_online_map); | 228 | cpus_and(map, map, cpu_online_map); |
| 229 | } while (!cpus_empty(map)); | 229 | } while (!cpus_empty(map)); |
| 230 | |||
| 231 | set_cpus_allowed(current, tmp); | ||
| 230 | } | 232 | } |
| 231 | EXPORT_SYMBOL_GPL(cpu_idle_wait); | 233 | EXPORT_SYMBOL_GPL(cpu_idle_wait); |
| 232 | 234 | ||
| @@ -236,20 +238,28 @@ EXPORT_SYMBOL_GPL(cpu_idle_wait); | |||
| 236 | * We execute MONITOR against need_resched and enter optimized wait state | 238 | * We execute MONITOR against need_resched and enter optimized wait state |
| 237 | * through MWAIT. Whenever someone changes need_resched, we would be woken | 239 | * through MWAIT. Whenever someone changes need_resched, we would be woken |
| 238 | * up from MWAIT (without an IPI). | 240 | * up from MWAIT (without an IPI). |
| 241 | * | ||
| 242 | * New with Core Duo processors, MWAIT can take some hints based on CPU | ||
| 243 | * capability. | ||
| 239 | */ | 244 | */ |
| 240 | static void mwait_idle(void) | 245 | void mwait_idle_with_hints(unsigned long eax, unsigned long ecx) |
| 241 | { | 246 | { |
| 242 | local_irq_enable(); | 247 | if (!need_resched()) { |
| 243 | |||
| 244 | while (!need_resched()) { | ||
| 245 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 248 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 246 | smp_mb(); | 249 | smp_mb(); |
| 247 | if (need_resched()) | 250 | if (!need_resched()) |
| 248 | break; | 251 | __mwait(eax, ecx); |
| 249 | __mwait(0, 0); | ||
| 250 | } | 252 | } |
| 251 | } | 253 | } |
| 252 | 254 | ||
| 255 | /* Default MONITOR/MWAIT with no hints, used for default C1 state */ | ||
| 256 | static void mwait_idle(void) | ||
| 257 | { | ||
| 258 | local_irq_enable(); | ||
| 259 | while (!need_resched()) | ||
| 260 | mwait_idle_with_hints(0, 0); | ||
| 261 | } | ||
| 262 | |||
| 253 | void __devinit select_idle_routine(const struct cpuinfo_x86 *c) | 263 | void __devinit select_idle_routine(const struct cpuinfo_x86 *c) |
| 254 | { | 264 | { |
| 255 | if (cpu_has(c, X86_FEATURE_MWAIT)) { | 265 | if (cpu_has(c, X86_FEATURE_MWAIT)) { |
| @@ -328,7 +338,6 @@ extern void kernel_thread_helper(void); | |||
| 328 | int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) | 338 | int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) |
| 329 | { | 339 | { |
| 330 | struct pt_regs regs; | 340 | struct pt_regs regs; |
| 331 | int err; | ||
| 332 | 341 | ||
| 333 | memset(®s, 0, sizeof(regs)); | 342 | memset(®s, 0, sizeof(regs)); |
| 334 | 343 | ||
| @@ -343,10 +352,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) | |||
| 343 | regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; | 352 | regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; |
| 344 | 353 | ||
| 345 | /* Ok, create the new process.. */ | 354 | /* Ok, create the new process.. */ |
| 346 | err = do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); | 355 | return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); |
| 347 | if (err == 0) /* terminate kernel stack */ | ||
| 348 | task_pt_regs(current)->eip = 0; | ||
| 349 | return err; | ||
| 350 | } | 356 | } |
| 351 | EXPORT_SYMBOL(kernel_thread); | 357 | EXPORT_SYMBOL(kernel_thread); |
| 352 | 358 | ||
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 000cf03751fe..141041dde74d 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
| @@ -846,7 +846,7 @@ efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) | |||
| 846 | static int __init | 846 | static int __init |
| 847 | efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) | 847 | efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) |
| 848 | { | 848 | { |
| 849 | memory_present(0, start, end); | 849 | memory_present(0, PFN_UP(start), PFN_DOWN(end)); |
| 850 | return 0; | 850 | return 0; |
| 851 | } | 851 | } |
| 852 | 852 | ||
| @@ -1083,16 +1083,15 @@ static unsigned long __init setup_memory(void) | |||
| 1083 | 1083 | ||
| 1084 | void __init zone_sizes_init(void) | 1084 | void __init zone_sizes_init(void) |
| 1085 | { | 1085 | { |
| 1086 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | ||
| 1087 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | ||
| 1088 | max_zone_pfns[ZONE_DMA] = | ||
| 1089 | virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; | ||
| 1090 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | ||
| 1086 | #ifdef CONFIG_HIGHMEM | 1091 | #ifdef CONFIG_HIGHMEM |
| 1087 | unsigned long max_zone_pfns[MAX_NR_ZONES] = { | 1092 | max_zone_pfns[ZONE_HIGHMEM] = highend_pfn; |
| 1088 | virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT, | ||
| 1089 | max_low_pfn, | ||
| 1090 | highend_pfn}; | ||
| 1091 | add_active_range(0, 0, highend_pfn); | 1093 | add_active_range(0, 0, highend_pfn); |
| 1092 | #else | 1094 | #else |
| 1093 | unsigned long max_zone_pfns[MAX_NR_ZONES] = { | ||
| 1094 | virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT, | ||
| 1095 | max_low_pfn}; | ||
| 1096 | add_active_range(0, 0, max_low_pfn); | 1095 | add_active_range(0, 0, max_low_pfn); |
| 1097 | #endif | 1096 | #endif |
| 1098 | 1097 | ||
diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S index 7e639f78b0b9..2697e9210e92 100644 --- a/arch/i386/kernel/syscall_table.S +++ b/arch/i386/kernel/syscall_table.S | |||
| @@ -318,3 +318,4 @@ ENTRY(sys_call_table) | |||
| 318 | .long sys_vmsplice | 318 | .long sys_vmsplice |
| 319 | .long sys_move_pages | 319 | .long sys_move_pages |
| 320 | .long sys_getcpu | 320 | .long sys_getcpu |
| 321 | .long sys_epoll_pwait | ||
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 00489b706d27..fe9c5e8e7e6f 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
| @@ -129,15 +129,19 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo, | |||
| 129 | 129 | ||
| 130 | #ifdef CONFIG_FRAME_POINTER | 130 | #ifdef CONFIG_FRAME_POINTER |
| 131 | while (valid_stack_ptr(tinfo, (void *)ebp)) { | 131 | while (valid_stack_ptr(tinfo, (void *)ebp)) { |
| 132 | unsigned long new_ebp; | ||
| 132 | addr = *(unsigned long *)(ebp + 4); | 133 | addr = *(unsigned long *)(ebp + 4); |
| 133 | ops->address(data, addr); | 134 | ops->address(data, addr); |
| 134 | /* | 135 | /* |
| 135 | * break out of recursive entries (such as | 136 | * break out of recursive entries (such as |
| 136 | * end_of_stack_stop_unwind_function): | 137 | * end_of_stack_stop_unwind_function). Also, |
| 138 | * we can never allow a frame pointer to | ||
| 139 | * move downwards! | ||
| 137 | */ | 140 | */ |
| 138 | if (ebp == *(unsigned long *)ebp) | 141 | new_ebp = *(unsigned long *)ebp; |
| 142 | if (new_ebp <= ebp) | ||
| 139 | break; | 143 | break; |
| 140 | ebp = *(unsigned long *)ebp; | 144 | ebp = new_ebp; |
| 141 | } | 145 | } |
| 142 | #else | 146 | #else |
| 143 | while (valid_stack_ptr(tinfo, stack)) { | 147 | while (valid_stack_ptr(tinfo, stack)) { |
diff --git a/arch/i386/kernel/tsc.c b/arch/i386/kernel/tsc.c index b8fa0a8b2e47..fbc95828cd74 100644 --- a/arch/i386/kernel/tsc.c +++ b/arch/i386/kernel/tsc.c | |||
| @@ -349,8 +349,8 @@ static int tsc_update_callback(void) | |||
| 349 | int change = 0; | 349 | int change = 0; |
| 350 | 350 | ||
| 351 | /* check to see if we should switch to the safe clocksource: */ | 351 | /* check to see if we should switch to the safe clocksource: */ |
| 352 | if (clocksource_tsc.rating != 50 && check_tsc_unstable()) { | 352 | if (clocksource_tsc.rating != 0 && check_tsc_unstable()) { |
| 353 | clocksource_tsc.rating = 50; | 353 | clocksource_tsc.rating = 0; |
| 354 | clocksource_reselect(); | 354 | clocksource_reselect(); |
| 355 | change = 1; | 355 | change = 1; |
| 356 | } | 356 | } |
| @@ -461,7 +461,7 @@ static int __init init_tsc_clocksource(void) | |||
| 461 | clocksource_tsc.shift); | 461 | clocksource_tsc.shift); |
| 462 | /* lower the rating if we already know its unstable: */ | 462 | /* lower the rating if we already know its unstable: */ |
| 463 | if (check_tsc_unstable()) | 463 | if (check_tsc_unstable()) |
| 464 | clocksource_tsc.rating = 50; | 464 | clocksource_tsc.rating = 0; |
| 465 | 465 | ||
| 466 | init_timer(&verify_tsc_freq_timer); | 466 | init_timer(&verify_tsc_freq_timer); |
| 467 | verify_tsc_freq_timer.function = verify_tsc_freq; | 467 | verify_tsc_freq_timer.function = verify_tsc_freq; |
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S index 1e7ac1c44ddc..c6f84a0322ba 100644 --- a/arch/i386/kernel/vmlinux.lds.S +++ b/arch/i386/kernel/vmlinux.lds.S | |||
| @@ -51,6 +51,7 @@ SECTIONS | |||
| 51 | __tracedata_end = .; | 51 | __tracedata_end = .; |
| 52 | 52 | ||
| 53 | /* writeable */ | 53 | /* writeable */ |
| 54 | . = ALIGN(4096); | ||
| 54 | .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ | 55 | .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ |
| 55 | *(.data) | 56 | *(.data) |
| 56 | CONSTRUCTORS | 57 | CONSTRUCTORS |
| @@ -126,13 +127,7 @@ SECTIONS | |||
| 126 | __setup_end = .; | 127 | __setup_end = .; |
| 127 | __initcall_start = .; | 128 | __initcall_start = .; |
| 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { | 129 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { |
| 129 | *(.initcall1.init) | 130 | INITCALLS |
| 130 | *(.initcall2.init) | ||
| 131 | *(.initcall3.init) | ||
| 132 | *(.initcall4.init) | ||
| 133 | *(.initcall5.init) | ||
| 134 | *(.initcall6.init) | ||
| 135 | *(.initcall7.init) | ||
| 136 | } | 131 | } |
| 137 | __initcall_end = .; | 132 | __initcall_end = .; |
| 138 | __con_initcall_start = .; | 133 | __con_initcall_start = .; |
diff --git a/arch/i386/lib/usercopy.c b/arch/i386/lib/usercopy.c index 08502fc6d0cb..d22cfc9d656c 100644 --- a/arch/i386/lib/usercopy.c +++ b/arch/i386/lib/usercopy.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/highmem.h> | 9 | #include <linux/highmem.h> |
| 10 | #include <linux/blkdev.h> | 10 | #include <linux/blkdev.h> |
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/backing-dev.h> | ||
| 12 | #include <asm/uaccess.h> | 13 | #include <asm/uaccess.h> |
| 13 | #include <asm/mmx.h> | 14 | #include <asm/mmx.h> |
| 14 | 15 | ||
| @@ -179,7 +180,7 @@ __clear_user(void __user *to, unsigned long n) | |||
| 179 | EXPORT_SYMBOL(__clear_user); | 180 | EXPORT_SYMBOL(__clear_user); |
| 180 | 181 | ||
| 181 | /** | 182 | /** |
| 182 | * strlen_user: - Get the size of a string in user space. | 183 | * strnlen_user: - Get the size of a string in user space. |
| 183 | * @s: The string to measure. | 184 | * @s: The string to measure. |
| 184 | * @n: The maximum valid length | 185 | * @n: The maximum valid length |
| 185 | * | 186 | * |
| @@ -741,7 +742,7 @@ survive: | |||
| 741 | 742 | ||
| 742 | if (retval == -ENOMEM && is_init(current)) { | 743 | if (retval == -ENOMEM && is_init(current)) { |
| 743 | up_read(¤t->mm->mmap_sem); | 744 | up_read(¤t->mm->mmap_sem); |
| 744 | blk_congestion_wait(WRITE, HZ/50); | 745 | congestion_wait(WRITE, HZ/50); |
| 745 | goto survive; | 746 | goto survive; |
| 746 | } | 747 | } |
| 747 | 748 | ||
diff --git a/arch/i386/mach-visws/visws_apic.c b/arch/i386/mach-visws/visws_apic.c index 07097ed48890..38c2b13124d9 100644 --- a/arch/i386/mach-visws/visws_apic.c +++ b/arch/i386/mach-visws/visws_apic.c | |||
| @@ -122,7 +122,7 @@ static void end_cobalt_irq(unsigned int irq) | |||
| 122 | spin_unlock_irqrestore(&cobalt_lock, flags); | 122 | spin_unlock_irqrestore(&cobalt_lock, flags); |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | static struct hw_interrupt_type cobalt_irq_type = { | 125 | static struct irq_chip cobalt_irq_type = { |
| 126 | .typename = "Cobalt-APIC", | 126 | .typename = "Cobalt-APIC", |
| 127 | .startup = startup_cobalt_irq, | 127 | .startup = startup_cobalt_irq, |
| 128 | .shutdown = disable_cobalt_irq, | 128 | .shutdown = disable_cobalt_irq, |
| @@ -159,7 +159,7 @@ static void end_piix4_master_irq(unsigned int irq) | |||
| 159 | spin_unlock_irqrestore(&cobalt_lock, flags); | 159 | spin_unlock_irqrestore(&cobalt_lock, flags); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | static struct hw_interrupt_type piix4_master_irq_type = { | 162 | static struct irq_chip piix4_master_irq_type = { |
| 163 | .typename = "PIIX4-master", | 163 | .typename = "PIIX4-master", |
| 164 | .startup = startup_piix4_master_irq, | 164 | .startup = startup_piix4_master_irq, |
| 165 | .ack = ack_cobalt_irq, | 165 | .ack = ack_cobalt_irq, |
| @@ -167,9 +167,8 @@ static struct hw_interrupt_type piix4_master_irq_type = { | |||
| 167 | }; | 167 | }; |
| 168 | 168 | ||
| 169 | 169 | ||
| 170 | static struct hw_interrupt_type piix4_virtual_irq_type = { | 170 | static struct irq_chip piix4_virtual_irq_type = { |
| 171 | .typename = "PIIX4-virtual", | 171 | .typename = "PIIX4-virtual", |
| 172 | .startup = startup_8259A_irq, | ||
| 173 | .shutdown = disable_8259A_irq, | 172 | .shutdown = disable_8259A_irq, |
| 174 | .enable = enable_8259A_irq, | 173 | .enable = enable_8259A_irq, |
| 175 | .disable = disable_8259A_irq, | 174 | .disable = disable_8259A_irq, |
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c index c639d30d8bdc..8fe7e4593d5f 100644 --- a/arch/i386/mach-voyager/voyager_basic.c +++ b/arch/i386/mach-voyager/voyager_basic.c | |||
| @@ -44,7 +44,7 @@ struct voyager_SUS *voyager_SUS = NULL; | |||
| 44 | 44 | ||
| 45 | #ifdef CONFIG_SMP | 45 | #ifdef CONFIG_SMP |
| 46 | static void | 46 | static void |
| 47 | voyager_dump(int dummy1, struct pt_regs *dummy2, struct tty_struct *dummy3) | 47 | voyager_dump(int dummy1, struct tty_struct *dummy3) |
| 48 | { | 48 | { |
| 49 | /* get here via a sysrq */ | 49 | /* get here via a sysrq */ |
| 50 | voyager_smp_dump(); | 50 | voyager_smp_dump(); |
| @@ -166,7 +166,7 @@ voyager_memory_detect(int region, __u32 *start, __u32 *length) | |||
| 166 | * off the timer tick to the SMP code, since the VIC doesn't have an | 166 | * off the timer tick to the SMP code, since the VIC doesn't have an |
| 167 | * internal timer (The QIC does, but that's another story). */ | 167 | * internal timer (The QIC does, but that's another story). */ |
| 168 | void | 168 | void |
| 169 | voyager_timer_interrupt(struct pt_regs *regs) | 169 | voyager_timer_interrupt(void) |
| 170 | { | 170 | { |
| 171 | if((jiffies & 0x3ff) == 0) { | 171 | if((jiffies & 0x3ff) == 0) { |
| 172 | 172 | ||
| @@ -202,7 +202,7 @@ voyager_timer_interrupt(struct pt_regs *regs) | |||
| 202 | } | 202 | } |
| 203 | } | 203 | } |
| 204 | #ifdef CONFIG_SMP | 204 | #ifdef CONFIG_SMP |
| 205 | smp_vic_timer_interrupt(regs); | 205 | smp_vic_timer_interrupt(); |
| 206 | #endif | 206 | #endif |
| 207 | } | 207 | } |
| 208 | 208 | ||
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c index d42422fc4af3..f3fea2ad50fe 100644 --- a/arch/i386/mach-voyager/voyager_smp.c +++ b/arch/i386/mach-voyager/voyager_smp.c | |||
| @@ -85,8 +85,8 @@ static int ack_QIC_CPI(__u8 cpi); | |||
| 85 | static void ack_special_QIC_CPI(__u8 cpi); | 85 | static void ack_special_QIC_CPI(__u8 cpi); |
| 86 | static void ack_VIC_CPI(__u8 cpi); | 86 | static void ack_VIC_CPI(__u8 cpi); |
| 87 | static void send_CPI_allbutself(__u8 cpi); | 87 | static void send_CPI_allbutself(__u8 cpi); |
| 88 | static void enable_vic_irq(unsigned int irq); | 88 | static void mask_vic_irq(unsigned int irq); |
| 89 | static void disable_vic_irq(unsigned int irq); | 89 | static void unmask_vic_irq(unsigned int irq); |
| 90 | static unsigned int startup_vic_irq(unsigned int irq); | 90 | static unsigned int startup_vic_irq(unsigned int irq); |
| 91 | static void enable_local_vic_irq(unsigned int irq); | 91 | static void enable_local_vic_irq(unsigned int irq); |
| 92 | static void disable_local_vic_irq(unsigned int irq); | 92 | static void disable_local_vic_irq(unsigned int irq); |
| @@ -205,15 +205,12 @@ ack_CPI(__u8 cpi) | |||
| 205 | /* The VIC IRQ descriptors -- these look almost identical to the | 205 | /* The VIC IRQ descriptors -- these look almost identical to the |
| 206 | * 8259 IRQs except that masks and things must be kept per processor | 206 | * 8259 IRQs except that masks and things must be kept per processor |
| 207 | */ | 207 | */ |
| 208 | static struct hw_interrupt_type vic_irq_type = { | 208 | static struct irq_chip vic_chip = { |
| 209 | .typename = "VIC-level", | 209 | .name = "VIC", |
| 210 | .startup = startup_vic_irq, | 210 | .startup = startup_vic_irq, |
| 211 | .shutdown = disable_vic_irq, | 211 | .mask = mask_vic_irq, |
| 212 | .enable = enable_vic_irq, | 212 | .unmask = unmask_vic_irq, |
| 213 | .disable = disable_vic_irq, | 213 | .set_affinity = set_vic_irq_affinity, |
| 214 | .ack = before_handle_vic_irq, | ||
| 215 | .end = after_handle_vic_irq, | ||
| 216 | .set_affinity = set_vic_irq_affinity, | ||
| 217 | }; | 214 | }; |
| 218 | 215 | ||
| 219 | /* used to count up as CPUs are brought on line (starts at 0) */ | 216 | /* used to count up as CPUs are brought on line (starts at 0) */ |
| @@ -1144,9 +1141,9 @@ smp_apic_timer_interrupt(struct pt_regs *regs) | |||
| 1144 | fastcall void | 1141 | fastcall void |
| 1145 | smp_qic_timer_interrupt(struct pt_regs *regs) | 1142 | smp_qic_timer_interrupt(struct pt_regs *regs) |
| 1146 | { | 1143 | { |
| 1147 | ack_QIC_CPI(QIC_TIMER_CPI); | ||
| 1148 | struct pt_regs *old_regs = set_irq_regs(regs); | 1144 | struct pt_regs *old_regs = set_irq_regs(regs); |
| 1149 | wrapper_smp_local_timer_interrupt(void); | 1145 | ack_QIC_CPI(QIC_TIMER_CPI); |
| 1146 | wrapper_smp_local_timer_interrupt(); | ||
| 1150 | set_irq_regs(old_regs); | 1147 | set_irq_regs(old_regs); |
| 1151 | } | 1148 | } |
| 1152 | 1149 | ||
| @@ -1270,12 +1267,10 @@ smp_send_stop(void) | |||
| 1270 | /* this function is triggered in time.c when a clock tick fires | 1267 | /* this function is triggered in time.c when a clock tick fires |
| 1271 | * we need to re-broadcast the tick to all CPUs */ | 1268 | * we need to re-broadcast the tick to all CPUs */ |
| 1272 | void | 1269 | void |
| 1273 | smp_vic_timer_interrupt(struct pt_regs *regs) | 1270 | smp_vic_timer_interrupt(void) |
| 1274 | { | 1271 | { |
| 1275 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
| 1276 | send_CPI_allbutself(VIC_TIMER_CPI); | 1272 | send_CPI_allbutself(VIC_TIMER_CPI); |
| 1277 | smp_local_timer_interrupt(); | 1273 | smp_local_timer_interrupt(); |
| 1278 | set_irq_regs(old_regs); | ||
| 1279 | } | 1274 | } |
| 1280 | 1275 | ||
| 1281 | /* local (per CPU) timer interrupt. It does both profiling and | 1276 | /* local (per CPU) timer interrupt. It does both profiling and |
| @@ -1310,7 +1305,7 @@ smp_local_timer_interrupt(void) | |||
| 1310 | per_cpu(prof_counter, cpu); | 1305 | per_cpu(prof_counter, cpu); |
| 1311 | } | 1306 | } |
| 1312 | 1307 | ||
| 1313 | update_process_times(user_mode_vm(irq_regs)); | 1308 | update_process_times(user_mode_vm(get_irq_regs())); |
| 1314 | } | 1309 | } |
| 1315 | 1310 | ||
| 1316 | if( ((1<<cpu) & voyager_extended_vic_processors) == 0) | 1311 | if( ((1<<cpu) & voyager_extended_vic_processors) == 0) |
| @@ -1397,6 +1392,17 @@ setup_profiling_timer(unsigned int multiplier) | |||
| 1397 | return 0; | 1392 | return 0; |
| 1398 | } | 1393 | } |
| 1399 | 1394 | ||
| 1395 | /* This is a bit of a mess, but forced on us by the genirq changes | ||
| 1396 | * there's no genirq handler that really does what voyager wants | ||
| 1397 | * so hack it up with the simple IRQ handler */ | ||
| 1398 | static void fastcall | ||
| 1399 | handle_vic_irq(unsigned int irq, struct irq_desc *desc) | ||
| 1400 | { | ||
| 1401 | before_handle_vic_irq(irq); | ||
| 1402 | handle_simple_irq(irq, desc); | ||
| 1403 | after_handle_vic_irq(irq); | ||
| 1404 | } | ||
| 1405 | |||
| 1400 | 1406 | ||
| 1401 | /* The CPIs are handled in the per cpu 8259s, so they must be | 1407 | /* The CPIs are handled in the per cpu 8259s, so they must be |
| 1402 | * enabled to be received: FIX: enabling the CPIs in the early | 1408 | * enabled to be received: FIX: enabling the CPIs in the early |
| @@ -1433,7 +1439,7 @@ smp_intr_init(void) | |||
| 1433 | * This is for later: first 16 correspond to PC IRQs; next 16 | 1439 | * This is for later: first 16 correspond to PC IRQs; next 16 |
| 1434 | * are Primary MC IRQs and final 16 are Secondary MC IRQs */ | 1440 | * are Primary MC IRQs and final 16 are Secondary MC IRQs */ |
| 1435 | for(i = 0; i < 48; i++) | 1441 | for(i = 0; i < 48; i++) |
| 1436 | irq_desc[i].chip = &vic_irq_type; | 1442 | set_irq_chip_and_handler(i, &vic_chip, handle_vic_irq); |
| 1437 | } | 1443 | } |
| 1438 | 1444 | ||
| 1439 | /* send a CPI at level cpi to a set of cpus in cpuset (set 1 bit per | 1445 | /* send a CPI at level cpi to a set of cpus in cpuset (set 1 bit per |
| @@ -1531,7 +1537,7 @@ ack_VIC_CPI(__u8 cpi) | |||
| 1531 | static unsigned int | 1537 | static unsigned int |
| 1532 | startup_vic_irq(unsigned int irq) | 1538 | startup_vic_irq(unsigned int irq) |
| 1533 | { | 1539 | { |
| 1534 | enable_vic_irq(irq); | 1540 | unmask_vic_irq(irq); |
| 1535 | 1541 | ||
| 1536 | return 0; | 1542 | return 0; |
| 1537 | } | 1543 | } |
| @@ -1558,7 +1564,7 @@ startup_vic_irq(unsigned int irq) | |||
| 1558 | * adjust their masks accordingly. */ | 1564 | * adjust their masks accordingly. */ |
| 1559 | 1565 | ||
| 1560 | static void | 1566 | static void |
| 1561 | enable_vic_irq(unsigned int irq) | 1567 | unmask_vic_irq(unsigned int irq) |
| 1562 | { | 1568 | { |
| 1563 | /* linux doesn't to processor-irq affinity, so enable on | 1569 | /* linux doesn't to processor-irq affinity, so enable on |
| 1564 | * all CPUs we know about */ | 1570 | * all CPUs we know about */ |
| @@ -1567,7 +1573,7 @@ enable_vic_irq(unsigned int irq) | |||
| 1567 | __u32 processorList = 0; | 1573 | __u32 processorList = 0; |
| 1568 | unsigned long flags; | 1574 | unsigned long flags; |
| 1569 | 1575 | ||
| 1570 | VDEBUG(("VOYAGER: enable_vic_irq(%d) CPU%d affinity 0x%lx\n", | 1576 | VDEBUG(("VOYAGER: unmask_vic_irq(%d) CPU%d affinity 0x%lx\n", |
| 1571 | irq, cpu, cpu_irq_affinity[cpu])); | 1577 | irq, cpu, cpu_irq_affinity[cpu])); |
| 1572 | spin_lock_irqsave(&vic_irq_lock, flags); | 1578 | spin_lock_irqsave(&vic_irq_lock, flags); |
| 1573 | for_each_online_cpu(real_cpu) { | 1579 | for_each_online_cpu(real_cpu) { |
| @@ -1591,7 +1597,7 @@ enable_vic_irq(unsigned int irq) | |||
| 1591 | } | 1597 | } |
| 1592 | 1598 | ||
| 1593 | static void | 1599 | static void |
| 1594 | disable_vic_irq(unsigned int irq) | 1600 | mask_vic_irq(unsigned int irq) |
| 1595 | { | 1601 | { |
| 1596 | /* lazy disable, do nothing */ | 1602 | /* lazy disable, do nothing */ |
| 1597 | } | 1603 | } |
| @@ -1819,7 +1825,7 @@ set_vic_irq_affinity(unsigned int irq, cpumask_t mask) | |||
| 1819 | * disabled again as it comes in (voyager lazy disable). If | 1825 | * disabled again as it comes in (voyager lazy disable). If |
| 1820 | * the affinity map is tightened to disable the interrupt on a | 1826 | * the affinity map is tightened to disable the interrupt on a |
| 1821 | * cpu, it will be pushed off when it comes in */ | 1827 | * cpu, it will be pushed off when it comes in */ |
| 1822 | enable_vic_irq(irq); | 1828 | unmask_vic_irq(irq); |
| 1823 | } | 1829 | } |
| 1824 | 1830 | ||
| 1825 | static void | 1831 | static void |
diff --git a/arch/i386/mm/discontig.c b/arch/i386/mm/discontig.c index 455597db84df..ddbdb0336f28 100644 --- a/arch/i386/mm/discontig.c +++ b/arch/i386/mm/discontig.c | |||
| @@ -356,11 +356,12 @@ void __init numa_kva_reserve(void) | |||
| 356 | void __init zone_sizes_init(void) | 356 | void __init zone_sizes_init(void) |
| 357 | { | 357 | { |
| 358 | int nid; | 358 | int nid; |
| 359 | unsigned long max_zone_pfns[MAX_NR_ZONES] = { | 359 | unsigned long max_zone_pfns[MAX_NR_ZONES]; |
| 360 | virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT, | 360 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); |
| 361 | max_low_pfn, | 361 | max_zone_pfns[ZONE_DMA] = |
| 362 | highend_pfn | 362 | virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; |
| 363 | }; | 363 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; |
| 364 | max_zone_pfns[ZONE_HIGHMEM] = highend_pfn; | ||
| 364 | 365 | ||
| 365 | /* If SRAT has not registered memory, register it now */ | 366 | /* If SRAT has not registered memory, register it now */ |
| 366 | if (find_max_pfn_with_active_regions() == 0) { | 367 | if (find_max_pfn_with_active_regions() == 0) { |
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index 68bce194e688..cdfcf971098b 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | | 20 | unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | |
| 21 | PCI_PROBE_MMCONF; | 21 | PCI_PROBE_MMCONF; |
| 22 | 22 | ||
| 23 | int pci_bf_sort; | ||
| 23 | int pci_routeirq; | 24 | int pci_routeirq; |
| 24 | int pcibios_last_bus = -1; | 25 | int pcibios_last_bus = -1; |
| 25 | unsigned long pirq_table_addr; | 26 | unsigned long pirq_table_addr; |
| @@ -118,6 +119,20 @@ void __devinit pcibios_fixup_bus(struct pci_bus *b) | |||
| 118 | } | 119 | } |
| 119 | 120 | ||
| 120 | /* | 121 | /* |
| 122 | * Only use DMI information to set this if nothing was passed | ||
| 123 | * on the kernel command line (which was parsed earlier). | ||
| 124 | */ | ||
| 125 | |||
| 126 | static int __devinit set_bf_sort(struct dmi_system_id *d) | ||
| 127 | { | ||
| 128 | if (pci_bf_sort == pci_bf_sort_default) { | ||
| 129 | pci_bf_sort = pci_dmi_bf; | ||
| 130 | printk(KERN_INFO "PCI: %s detected, enabling pci=bfsort.\n", d->ident); | ||
| 131 | } | ||
| 132 | return 0; | ||
| 133 | } | ||
| 134 | |||
| 135 | /* | ||
| 121 | * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) | 136 | * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) |
| 122 | */ | 137 | */ |
| 123 | #ifdef __i386__ | 138 | #ifdef __i386__ |
| @@ -130,11 +145,11 @@ static int __devinit assign_all_busses(struct dmi_system_id *d) | |||
| 130 | } | 145 | } |
| 131 | #endif | 146 | #endif |
| 132 | 147 | ||
| 148 | static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | ||
| 149 | #ifdef __i386__ | ||
| 133 | /* | 150 | /* |
| 134 | * Laptops which need pci=assign-busses to see Cardbus cards | 151 | * Laptops which need pci=assign-busses to see Cardbus cards |
| 135 | */ | 152 | */ |
| 136 | static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | ||
| 137 | #ifdef __i386__ | ||
| 138 | { | 153 | { |
| 139 | .callback = assign_all_busses, | 154 | .callback = assign_all_busses, |
| 140 | .ident = "Samsung X20 Laptop", | 155 | .ident = "Samsung X20 Laptop", |
| @@ -144,6 +159,38 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | |||
| 144 | }, | 159 | }, |
| 145 | }, | 160 | }, |
| 146 | #endif /* __i386__ */ | 161 | #endif /* __i386__ */ |
| 162 | { | ||
| 163 | .callback = set_bf_sort, | ||
| 164 | .ident = "Dell PowerEdge 1950", | ||
| 165 | .matches = { | ||
| 166 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | ||
| 167 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1950"), | ||
| 168 | }, | ||
| 169 | }, | ||
| 170 | { | ||
| 171 | .callback = set_bf_sort, | ||
| 172 | .ident = "Dell PowerEdge 1955", | ||
| 173 | .matches = { | ||
| 174 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | ||
| 175 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1955"), | ||
| 176 | }, | ||
| 177 | }, | ||
| 178 | { | ||
| 179 | .callback = set_bf_sort, | ||
| 180 | .ident = "Dell PowerEdge 2900", | ||
| 181 | .matches = { | ||
| 182 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | ||
| 183 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2900"), | ||
| 184 | }, | ||
| 185 | }, | ||
| 186 | { | ||
| 187 | .callback = set_bf_sort, | ||
| 188 | .ident = "Dell PowerEdge 2950", | ||
| 189 | .matches = { | ||
| 190 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | ||
| 191 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2950"), | ||
| 192 | }, | ||
| 193 | }, | ||
| 147 | {} | 194 | {} |
| 148 | }; | 195 | }; |
| 149 | 196 | ||
| @@ -189,6 +236,8 @@ static int __init pcibios_init(void) | |||
| 189 | 236 | ||
| 190 | pcibios_resource_survey(); | 237 | pcibios_resource_survey(); |
| 191 | 238 | ||
| 239 | if (pci_bf_sort >= pci_force_bf) | ||
| 240 | pci_sort_breadthfirst(); | ||
| 192 | #ifdef CONFIG_PCI_BIOS | 241 | #ifdef CONFIG_PCI_BIOS |
| 193 | if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT)) | 242 | if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT)) |
| 194 | pcibios_sort(); | 243 | pcibios_sort(); |
| @@ -203,6 +252,12 @@ char * __devinit pcibios_setup(char *str) | |||
| 203 | if (!strcmp(str, "off")) { | 252 | if (!strcmp(str, "off")) { |
| 204 | pci_probe = 0; | 253 | pci_probe = 0; |
| 205 | return NULL; | 254 | return NULL; |
| 255 | } else if (!strcmp(str, "bfsort")) { | ||
| 256 | pci_bf_sort = pci_force_bf; | ||
| 257 | return NULL; | ||
| 258 | } else if (!strcmp(str, "nobfsort")) { | ||
| 259 | pci_bf_sort = pci_force_nobf; | ||
| 260 | return NULL; | ||
| 206 | } | 261 | } |
| 207 | #ifdef CONFIG_PCI_BIOS | 262 | #ifdef CONFIG_PCI_BIOS |
| 208 | else if (!strcmp(str, "bios")) { | 263 | else if (!strcmp(str, "bios")) { |
| @@ -288,7 +343,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
| 288 | 343 | ||
| 289 | void pcibios_disable_device (struct pci_dev *dev) | 344 | void pcibios_disable_device (struct pci_dev *dev) |
| 290 | { | 345 | { |
| 291 | pcibios_disable_resources(dev); | ||
| 292 | if (pcibios_disable_irq) | 346 | if (pcibios_disable_irq) |
| 293 | pcibios_disable_irq(dev); | 347 | pcibios_disable_irq(dev); |
| 294 | } | 348 | } |
diff --git a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c index b60d7e8689ed..c1949ff38d61 100644 --- a/arch/i386/pci/fixup.c +++ b/arch/i386/pci/fixup.c | |||
| @@ -348,8 +348,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_r | |||
| 348 | * From information provided by "Jon Smirl" <jonsmirl@gmail.com> | 348 | * From information provided by "Jon Smirl" <jonsmirl@gmail.com> |
| 349 | * | 349 | * |
| 350 | * The standard boot ROM sequence for an x86 machine uses the BIOS | 350 | * The standard boot ROM sequence for an x86 machine uses the BIOS |
| 351 | * to select an initial video card for boot display. This boot video | 351 | * to select an initial video card for boot display. This boot video |
| 352 | * card will have it's BIOS copied to C0000 in system RAM. | 352 | * card will have it's BIOS copied to C0000 in system RAM. |
| 353 | * IORESOURCE_ROM_SHADOW is used to associate the boot video | 353 | * IORESOURCE_ROM_SHADOW is used to associate the boot video |
| 354 | * card with this copy. On laptops this copy has to be used since | 354 | * card with this copy. On laptops this copy has to be used since |
| 355 | * the main ROM may be compressed or combined with another image. | 355 | * the main ROM may be compressed or combined with another image. |
| @@ -371,7 +371,17 @@ static void __devinit pci_fixup_video(struct pci_dev *pdev) | |||
| 371 | bus = pdev->bus; | 371 | bus = pdev->bus; |
| 372 | while (bus) { | 372 | while (bus) { |
| 373 | bridge = bus->self; | 373 | bridge = bus->self; |
| 374 | if (bridge) { | 374 | |
| 375 | /* | ||
| 376 | * From information provided by | ||
| 377 | * "David Miller" <davem@davemloft.net> | ||
| 378 | * The bridge control register is valid for PCI header | ||
| 379 | * type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
| 380 | * PCI header type NORMAL. | ||
| 381 | */ | ||
| 382 | if (bridge | ||
| 383 | &&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
| 384 | ||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
| 375 | pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | 385 | pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, |
| 376 | &config); | 386 | &config); |
| 377 | if (!(config & PCI_BRIDGE_CTL_VGA)) | 387 | if (!(config & PCI_BRIDGE_CTL_VGA)) |
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c index 10154a2cac68..98580292f0d4 100644 --- a/arch/i386/pci/i386.c +++ b/arch/i386/pci/i386.c | |||
| @@ -242,15 +242,6 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask) | |||
| 242 | return 0; | 242 | return 0; |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | void pcibios_disable_resources(struct pci_dev *dev) | ||
| 246 | { | ||
| 247 | u16 cmd; | ||
| 248 | |||
| 249 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | ||
| 250 | cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY); | ||
| 251 | pci_write_config_word(dev, PCI_COMMAND, cmd); | ||
| 252 | } | ||
| 253 | |||
| 254 | /* | 245 | /* |
| 255 | * If we set up a device for bus mastering, we need to check the latency | 246 | * If we set up a device for bus mastering, we need to check the latency |
| 256 | * timer as certain crappy BIOSes forget to set it properly. | 247 | * timer as certain crappy BIOSes forget to set it properly. |
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index dbc4aae91959..69163998adeb 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
| @@ -255,13 +255,13 @@ static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, i | |||
| 255 | */ | 255 | */ |
| 256 | static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq) | 256 | static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq) |
| 257 | { | 257 | { |
| 258 | static const unsigned int pirqmap[4] = { 3, 2, 5, 1 }; | 258 | static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 }; |
| 259 | return read_config_nybble(router, 0x55, pirqmap[pirq-1]); | 259 | return read_config_nybble(router, 0x55, pirqmap[pirq-1]); |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) | 262 | static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) |
| 263 | { | 263 | { |
| 264 | static const unsigned int pirqmap[4] = { 3, 2, 5, 1 }; | 264 | static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 }; |
| 265 | write_config_nybble(router, 0x55, pirqmap[pirq-1], irq); | 265 | write_config_nybble(router, 0x55, pirqmap[pirq-1], irq); |
| 266 | return 1; | 266 | return 1; |
| 267 | } | 267 | } |
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c index d0c3da3aa2aa..c6b6d9bbc453 100644 --- a/arch/i386/pci/mmconfig.c +++ b/arch/i386/pci/mmconfig.c | |||
| @@ -154,38 +154,6 @@ static struct pci_raw_ops pci_mmcfg = { | |||
| 154 | .write = pci_mmcfg_write, | 154 | .write = pci_mmcfg_write, |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | |||
| 158 | static __init void pci_mmcfg_insert_resources(void) | ||
| 159 | { | ||
| 160 | #define PCI_MMCFG_RESOURCE_NAME_LEN 19 | ||
| 161 | int i; | ||
| 162 | struct resource *res; | ||
| 163 | char *names; | ||
| 164 | unsigned num_buses; | ||
| 165 | |||
| 166 | res = kcalloc(PCI_MMCFG_RESOURCE_NAME_LEN + sizeof(*res), | ||
| 167 | pci_mmcfg_config_num, GFP_KERNEL); | ||
| 168 | |||
| 169 | if (!res) { | ||
| 170 | printk(KERN_ERR "PCI: Unable to allocate MMCONFIG resources\n"); | ||
| 171 | return; | ||
| 172 | } | ||
| 173 | |||
| 174 | names = (void *)&res[pci_mmcfg_config_num]; | ||
| 175 | for (i = 0; i < pci_mmcfg_config_num; i++, res++) { | ||
| 176 | num_buses = pci_mmcfg_config[i].end_bus_number - | ||
| 177 | pci_mmcfg_config[i].start_bus_number + 1; | ||
| 178 | res->name = names; | ||
| 179 | snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN, "PCI MMCONFIG %u", | ||
| 180 | pci_mmcfg_config[i].pci_segment_group_number); | ||
| 181 | res->start = pci_mmcfg_config[i].base_address; | ||
| 182 | res->end = res->start + (num_buses << 20) - 1; | ||
| 183 | res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; | ||
| 184 | insert_resource(&iomem_resource, res); | ||
| 185 | names += PCI_MMCFG_RESOURCE_NAME_LEN; | ||
| 186 | } | ||
| 187 | } | ||
| 188 | |||
| 189 | /* K8 systems have some devices (typically in the builtin northbridge) | 157 | /* K8 systems have some devices (typically in the builtin northbridge) |
| 190 | that are only accessible using type1 | 158 | that are only accessible using type1 |
| 191 | Normally this can be expressed in the MCFG by not listing them | 159 | Normally this can be expressed in the MCFG by not listing them |
| @@ -222,8 +190,6 @@ static __init void unreachable_devices(void) | |||
| 222 | } | 190 | } |
| 223 | } | 191 | } |
| 224 | 192 | ||
| 225 | |||
| 226 | |||
| 227 | void __init pci_mmcfg_init(int type) | 193 | void __init pci_mmcfg_init(int type) |
| 228 | { | 194 | { |
| 229 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) | 195 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) |
| @@ -251,5 +217,4 @@ void __init pci_mmcfg_init(int type) | |||
| 251 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; | 217 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; |
| 252 | 218 | ||
| 253 | unreachable_devices(); | 219 | unreachable_devices(); |
| 254 | pci_mmcfg_insert_resources(); | ||
| 255 | } | 220 | } |
diff --git a/arch/i386/pci/pci.h b/arch/i386/pci/pci.h index 1814f74569c6..a0a25180b61a 100644 --- a/arch/i386/pci/pci.h +++ b/arch/i386/pci/pci.h | |||
| @@ -30,13 +30,19 @@ | |||
| 30 | extern unsigned int pci_probe; | 30 | extern unsigned int pci_probe; |
| 31 | extern unsigned long pirq_table_addr; | 31 | extern unsigned long pirq_table_addr; |
| 32 | 32 | ||
| 33 | enum pci_bf_sort_state { | ||
| 34 | pci_bf_sort_default, | ||
| 35 | pci_force_nobf, | ||
| 36 | pci_force_bf, | ||
| 37 | pci_dmi_bf, | ||
| 38 | }; | ||
| 39 | |||
| 33 | /* pci-i386.c */ | 40 | /* pci-i386.c */ |
| 34 | 41 | ||
| 35 | extern unsigned int pcibios_max_latency; | 42 | extern unsigned int pcibios_max_latency; |
| 36 | 43 | ||
| 37 | void pcibios_resource_survey(void); | 44 | void pcibios_resource_survey(void); |
| 38 | int pcibios_enable_resources(struct pci_dev *, int); | 45 | int pcibios_enable_resources(struct pci_dev *, int); |
| 39 | void pcibios_disable_resources(struct pci_dev *); | ||
| 40 | 46 | ||
| 41 | /* pci-pc.c */ | 47 | /* pci-pc.c */ |
| 42 | 48 | ||
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 70f7eb9fed35..683b12c6f76c 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
| @@ -341,6 +341,7 @@ config NUMA | |||
| 341 | bool "NUMA support" | 341 | bool "NUMA support" |
| 342 | depends on !IA64_HP_SIM && !FLATMEM | 342 | depends on !IA64_HP_SIM && !FLATMEM |
| 343 | default y if IA64_SGI_SN2 | 343 | default y if IA64_SGI_SN2 |
| 344 | select ACPI_NUMA if ACPI | ||
| 344 | help | 345 | help |
| 345 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory | 346 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory |
| 346 | Access). This option is for configuring high-end multiprocessor | 347 | Access). This option is for configuring high-end multiprocessor |
| @@ -483,6 +484,15 @@ source "net/Kconfig" | |||
| 483 | 484 | ||
| 484 | source "drivers/Kconfig" | 485 | source "drivers/Kconfig" |
| 485 | 486 | ||
| 487 | config MSPEC | ||
| 488 | tristate "Memory special operations driver" | ||
| 489 | depends on IA64 | ||
| 490 | select IA64_UNCACHED_ALLOCATOR | ||
| 491 | help | ||
| 492 | If you have an ia64 and you want to enable memory special | ||
| 493 | operations support (formerly known as fetchop), say Y here, | ||
| 494 | otherwise say N. | ||
| 495 | |||
| 486 | source "fs/Kconfig" | 496 | source "fs/Kconfig" |
| 487 | 497 | ||
| 488 | source "lib/Kconfig" | 498 | source "lib/Kconfig" |
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig index 0f14a82b856e..64e951de4e57 100644 --- a/arch/ia64/configs/sn2_defconfig +++ b/arch/ia64/configs/sn2_defconfig | |||
| @@ -1,8 +1,9 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.17-rc3 | 3 | # Linux kernel version: 2.6.19-rc1 |
| 4 | # Thu Apr 27 11:48:23 2006 | 4 | # Mon Oct 9 10:53:59 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 6 | 7 | ||
| 7 | # | 8 | # |
| 8 | # Code maturity level options | 9 | # Code maturity level options |
| @@ -18,16 +19,22 @@ CONFIG_LOCALVERSION="" | |||
| 18 | # CONFIG_LOCALVERSION_AUTO is not set | 19 | # CONFIG_LOCALVERSION_AUTO is not set |
| 19 | CONFIG_SWAP=y | 20 | CONFIG_SWAP=y |
| 20 | CONFIG_SYSVIPC=y | 21 | CONFIG_SYSVIPC=y |
| 22 | # CONFIG_IPC_NS is not set | ||
| 21 | CONFIG_POSIX_MQUEUE=y | 23 | CONFIG_POSIX_MQUEUE=y |
| 22 | # CONFIG_BSD_PROCESS_ACCT is not set | 24 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 23 | CONFIG_SYSCTL=y | 25 | CONFIG_TASKSTATS=y |
| 26 | # CONFIG_TASK_DELAY_ACCT is not set | ||
| 27 | # CONFIG_UTS_NS is not set | ||
| 24 | # CONFIG_AUDIT is not set | 28 | # CONFIG_AUDIT is not set |
| 25 | # CONFIG_IKCONFIG is not set | 29 | # CONFIG_IKCONFIG is not set |
| 26 | CONFIG_CPUSETS=y | 30 | CONFIG_CPUSETS=y |
| 27 | CONFIG_RELAY=y | 31 | CONFIG_RELAY=y |
| 28 | CONFIG_INITRAMFS_SOURCE="" | 32 | CONFIG_INITRAMFS_SOURCE="" |
| 29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 33 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 34 | CONFIG_TASK_XACCT=y | ||
| 35 | CONFIG_SYSCTL=y | ||
| 30 | # CONFIG_EMBEDDED is not set | 36 | # CONFIG_EMBEDDED is not set |
| 37 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 31 | CONFIG_KALLSYMS=y | 38 | CONFIG_KALLSYMS=y |
| 32 | CONFIG_KALLSYMS_ALL=y | 39 | CONFIG_KALLSYMS_ALL=y |
| 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 40 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -40,6 +47,8 @@ CONFIG_FUTEX=y | |||
| 40 | CONFIG_EPOLL=y | 47 | CONFIG_EPOLL=y |
| 41 | CONFIG_SHMEM=y | 48 | CONFIG_SHMEM=y |
| 42 | CONFIG_SLAB=y | 49 | CONFIG_SLAB=y |
| 50 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 51 | CONFIG_RT_MUTEXES=y | ||
| 43 | # CONFIG_TINY_SHMEM is not set | 52 | # CONFIG_TINY_SHMEM is not set |
| 44 | CONFIG_BASE_SMALL=0 | 53 | CONFIG_BASE_SMALL=0 |
| 45 | # CONFIG_SLOB is not set | 54 | # CONFIG_SLOB is not set |
| @@ -58,6 +67,7 @@ CONFIG_STOP_MACHINE=y | |||
| 58 | # | 67 | # |
| 59 | # Block layer | 68 | # Block layer |
| 60 | # | 69 | # |
| 70 | CONFIG_BLOCK=y | ||
| 61 | # CONFIG_BLK_DEV_IO_TRACE is not set | 71 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 62 | 72 | ||
| 63 | # | 73 | # |
| @@ -89,7 +99,7 @@ CONFIG_EFI=y | |||
| 89 | CONFIG_GENERIC_IOMAP=y | 99 | CONFIG_GENERIC_IOMAP=y |
| 90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 100 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
| 91 | CONFIG_IA64_UNCACHED_ALLOCATOR=y | 101 | CONFIG_IA64_UNCACHED_ALLOCATOR=y |
| 92 | CONFIG_DMA_IS_DMA32=y | 102 | CONFIG_AUDIT_ARCH=y |
| 93 | # CONFIG_IA64_GENERIC is not set | 103 | # CONFIG_IA64_GENERIC is not set |
| 94 | # CONFIG_IA64_DIG is not set | 104 | # CONFIG_IA64_DIG is not set |
| 95 | # CONFIG_IA64_HP_ZX1 is not set | 105 | # CONFIG_IA64_HP_ZX1 is not set |
| @@ -116,6 +126,7 @@ CONFIG_FORCE_MAX_ZONEORDER=17 | |||
| 116 | CONFIG_SMP=y | 126 | CONFIG_SMP=y |
| 117 | CONFIG_NR_CPUS=1024 | 127 | CONFIG_NR_CPUS=1024 |
| 118 | # CONFIG_HOTPLUG_CPU is not set | 128 | # CONFIG_HOTPLUG_CPU is not set |
| 129 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 119 | CONFIG_SCHED_SMT=y | 130 | CONFIG_SCHED_SMT=y |
| 120 | CONFIG_PREEMPT=y | 131 | CONFIG_PREEMPT=y |
| 121 | CONFIG_SELECT_MEMORY_MODEL=y | 132 | CONFIG_SELECT_MEMORY_MODEL=y |
| @@ -128,6 +139,7 @@ CONFIG_NEED_MULTIPLE_NODES=y | |||
| 128 | # CONFIG_SPARSEMEM_STATIC is not set | 139 | # CONFIG_SPARSEMEM_STATIC is not set |
| 129 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 140 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 130 | CONFIG_MIGRATION=y | 141 | CONFIG_MIGRATION=y |
| 142 | CONFIG_RESOURCES_64BIT=y | ||
| 131 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 143 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
| 132 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 144 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
| 133 | CONFIG_ARCH_FLATMEM_ENABLE=y | 145 | CONFIG_ARCH_FLATMEM_ENABLE=y |
| @@ -135,15 +147,24 @@ CONFIG_ARCH_SPARSEMEM_ENABLE=y | |||
| 135 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | 147 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y |
| 136 | CONFIG_NUMA=y | 148 | CONFIG_NUMA=y |
| 137 | CONFIG_NODES_SHIFT=10 | 149 | CONFIG_NODES_SHIFT=10 |
| 150 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 138 | CONFIG_VIRTUAL_MEM_MAP=y | 151 | CONFIG_VIRTUAL_MEM_MAP=y |
| 139 | CONFIG_HOLES_IN_ZONE=y | 152 | CONFIG_HOLES_IN_ZONE=y |
| 140 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | 153 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y |
| 154 | CONFIG_HAVE_ARCH_NODEDATA_EXTENSION=y | ||
| 141 | CONFIG_IA32_SUPPORT=y | 155 | CONFIG_IA32_SUPPORT=y |
| 142 | CONFIG_COMPAT=y | 156 | CONFIG_COMPAT=y |
| 143 | CONFIG_IA64_MCA_RECOVERY=y | 157 | CONFIG_IA64_MCA_RECOVERY=y |
| 144 | CONFIG_PERFMON=y | 158 | CONFIG_PERFMON=y |
| 145 | CONFIG_IA64_PALINFO=y | 159 | CONFIG_IA64_PALINFO=y |
| 146 | CONFIG_SGI_SN=y | 160 | CONFIG_SGI_SN=y |
| 161 | # CONFIG_IA64_ESI is not set | ||
| 162 | |||
| 163 | # | ||
| 164 | # SN Devices | ||
| 165 | # | ||
| 166 | CONFIG_SGI_IOC4=y | ||
| 167 | CONFIG_SGI_IOC3=y | ||
| 147 | 168 | ||
| 148 | # | 169 | # |
| 149 | # Firmware Drivers | 170 | # Firmware Drivers |
| @@ -159,6 +180,7 @@ CONFIG_BINFMT_ELF=y | |||
| 159 | CONFIG_PM=y | 180 | CONFIG_PM=y |
| 160 | # CONFIG_PM_LEGACY is not set | 181 | # CONFIG_PM_LEGACY is not set |
| 161 | # CONFIG_PM_DEBUG is not set | 182 | # CONFIG_PM_DEBUG is not set |
| 183 | # CONFIG_PM_SYSFS_DEPRECATED is not set | ||
| 162 | 184 | ||
| 163 | # | 185 | # |
| 164 | # ACPI (Advanced Configuration and Power Interface) Support | 186 | # ACPI (Advanced Configuration and Power Interface) Support |
| @@ -166,6 +188,7 @@ CONFIG_PM=y | |||
| 166 | CONFIG_ACPI=y | 188 | CONFIG_ACPI=y |
| 167 | # CONFIG_ACPI_BUTTON is not set | 189 | # CONFIG_ACPI_BUTTON is not set |
| 168 | # CONFIG_ACPI_FAN is not set | 190 | # CONFIG_ACPI_FAN is not set |
| 191 | # CONFIG_ACPI_DOCK is not set | ||
| 169 | # CONFIG_ACPI_PROCESSOR is not set | 192 | # CONFIG_ACPI_PROCESSOR is not set |
| 170 | CONFIG_ACPI_NUMA=y | 193 | CONFIG_ACPI_NUMA=y |
| 171 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 194 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
| @@ -185,7 +208,12 @@ CONFIG_ACPI_SYSTEM=y | |||
| 185 | # | 208 | # |
| 186 | CONFIG_PCI=y | 209 | CONFIG_PCI=y |
| 187 | CONFIG_PCI_DOMAINS=y | 210 | CONFIG_PCI_DOMAINS=y |
| 211 | CONFIG_PCIEPORTBUS=y | ||
| 212 | CONFIG_HOTPLUG_PCI_PCIE=y | ||
| 213 | # CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set | ||
| 214 | CONFIG_PCIEAER=y | ||
| 188 | # CONFIG_PCI_MSI is not set | 215 | # CONFIG_PCI_MSI is not set |
| 216 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
| 189 | # CONFIG_PCI_DEBUG is not set | 217 | # CONFIG_PCI_DEBUG is not set |
| 190 | 218 | ||
| 191 | # | 219 | # |
| @@ -215,6 +243,9 @@ CONFIG_NET=y | |||
| 215 | CONFIG_PACKET=y | 243 | CONFIG_PACKET=y |
| 216 | CONFIG_PACKET_MMAP=y | 244 | CONFIG_PACKET_MMAP=y |
| 217 | CONFIG_UNIX=y | 245 | CONFIG_UNIX=y |
| 246 | CONFIG_XFRM=y | ||
| 247 | # CONFIG_XFRM_USER is not set | ||
| 248 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 218 | # CONFIG_NET_KEY is not set | 249 | # CONFIG_NET_KEY is not set |
| 219 | CONFIG_INET=y | 250 | CONFIG_INET=y |
| 220 | CONFIG_IP_MULTICAST=y | 251 | CONFIG_IP_MULTICAST=y |
| @@ -231,19 +262,31 @@ CONFIG_SYN_COOKIES=y | |||
| 231 | # CONFIG_INET_IPCOMP is not set | 262 | # CONFIG_INET_IPCOMP is not set |
| 232 | # CONFIG_INET_XFRM_TUNNEL is not set | 263 | # CONFIG_INET_XFRM_TUNNEL is not set |
| 233 | # CONFIG_INET_TUNNEL is not set | 264 | # CONFIG_INET_TUNNEL is not set |
| 265 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 266 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 267 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 234 | CONFIG_INET_DIAG=m | 268 | CONFIG_INET_DIAG=m |
| 235 | CONFIG_INET_TCP_DIAG=m | 269 | CONFIG_INET_TCP_DIAG=m |
| 236 | # CONFIG_TCP_CONG_ADVANCED is not set | 270 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 237 | CONFIG_TCP_CONG_BIC=y | 271 | CONFIG_TCP_CONG_CUBIC=y |
| 272 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 238 | CONFIG_IPV6=m | 273 | CONFIG_IPV6=m |
| 239 | # CONFIG_IPV6_PRIVACY is not set | 274 | # CONFIG_IPV6_PRIVACY is not set |
| 240 | # CONFIG_IPV6_ROUTER_PREF is not set | 275 | # CONFIG_IPV6_ROUTER_PREF is not set |
| 241 | # CONFIG_INET6_AH is not set | 276 | # CONFIG_INET6_AH is not set |
| 242 | # CONFIG_INET6_ESP is not set | 277 | # CONFIG_INET6_ESP is not set |
| 243 | # CONFIG_INET6_IPCOMP is not set | 278 | # CONFIG_INET6_IPCOMP is not set |
| 279 | # CONFIG_IPV6_MIP6 is not set | ||
| 244 | # CONFIG_INET6_XFRM_TUNNEL is not set | 280 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 245 | # CONFIG_INET6_TUNNEL is not set | 281 | # CONFIG_INET6_TUNNEL is not set |
| 282 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | ||
| 283 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | ||
| 284 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
| 285 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
| 246 | # CONFIG_IPV6_TUNNEL is not set | 286 | # CONFIG_IPV6_TUNNEL is not set |
| 287 | # CONFIG_IPV6_SUBTREES is not set | ||
| 288 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
| 289 | # CONFIG_NETWORK_SECMARK is not set | ||
| 247 | # CONFIG_NETFILTER is not set | 290 | # CONFIG_NETFILTER is not set |
| 248 | 291 | ||
| 249 | # | 292 | # |
| @@ -269,7 +312,6 @@ CONFIG_IPV6=m | |||
| 269 | # CONFIG_ATALK is not set | 312 | # CONFIG_ATALK is not set |
| 270 | # CONFIG_X25 is not set | 313 | # CONFIG_X25 is not set |
| 271 | # CONFIG_LAPB is not set | 314 | # CONFIG_LAPB is not set |
| 272 | # CONFIG_NET_DIVERT is not set | ||
| 273 | # CONFIG_ECONET is not set | 315 | # CONFIG_ECONET is not set |
| 274 | # CONFIG_WAN_ROUTER is not set | 316 | # CONFIG_WAN_ROUTER is not set |
| 275 | 317 | ||
| @@ -298,6 +340,7 @@ CONFIG_STANDALONE=y | |||
| 298 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 340 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 299 | CONFIG_FW_LOADER=y | 341 | CONFIG_FW_LOADER=y |
| 300 | # CONFIG_DEBUG_DRIVER is not set | 342 | # CONFIG_DEBUG_DRIVER is not set |
| 343 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 301 | 344 | ||
| 302 | # | 345 | # |
| 303 | # Connector - unified userspace <-> kernelspace linker | 346 | # Connector - unified userspace <-> kernelspace linker |
| @@ -335,6 +378,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 335 | CONFIG_BLK_DEV_RAM=y | 378 | CONFIG_BLK_DEV_RAM=y |
| 336 | CONFIG_BLK_DEV_RAM_COUNT=16 | 379 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 337 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 380 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 381 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 338 | CONFIG_BLK_DEV_INITRD=y | 382 | CONFIG_BLK_DEV_INITRD=y |
| 339 | # CONFIG_CDROM_PKTCDVD is not set | 383 | # CONFIG_CDROM_PKTCDVD is not set |
| 340 | CONFIG_ATA_OVER_ETH=m | 384 | CONFIG_ATA_OVER_ETH=m |
| @@ -381,6 +425,7 @@ CONFIG_IDEDMA_PCI_AUTO=y | |||
| 381 | # CONFIG_BLK_DEV_CS5530 is not set | 425 | # CONFIG_BLK_DEV_CS5530 is not set |
| 382 | # CONFIG_BLK_DEV_HPT34X is not set | 426 | # CONFIG_BLK_DEV_HPT34X is not set |
| 383 | # CONFIG_BLK_DEV_HPT366 is not set | 427 | # CONFIG_BLK_DEV_HPT366 is not set |
| 428 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 384 | # CONFIG_BLK_DEV_SC1200 is not set | 429 | # CONFIG_BLK_DEV_SC1200 is not set |
| 385 | # CONFIG_BLK_DEV_PIIX is not set | 430 | # CONFIG_BLK_DEV_PIIX is not set |
| 386 | # CONFIG_BLK_DEV_IT821X is not set | 431 | # CONFIG_BLK_DEV_IT821X is not set |
| @@ -404,6 +449,7 @@ CONFIG_IDEDMA_AUTO=y | |||
| 404 | # | 449 | # |
| 405 | # CONFIG_RAID_ATTRS is not set | 450 | # CONFIG_RAID_ATTRS is not set |
| 406 | CONFIG_SCSI=y | 451 | CONFIG_SCSI=y |
| 452 | CONFIG_SCSI_NETLINK=y | ||
| 407 | CONFIG_SCSI_PROC_FS=y | 453 | CONFIG_SCSI_PROC_FS=y |
| 408 | 454 | ||
| 409 | # | 455 | # |
| @@ -425,12 +471,14 @@ CONFIG_SCSI_CONSTANTS=y | |||
| 425 | # CONFIG_SCSI_LOGGING is not set | 471 | # CONFIG_SCSI_LOGGING is not set |
| 426 | 472 | ||
| 427 | # | 473 | # |
| 428 | # SCSI Transport Attributes | 474 | # SCSI Transports |
| 429 | # | 475 | # |
| 430 | CONFIG_SCSI_SPI_ATTRS=y | 476 | CONFIG_SCSI_SPI_ATTRS=y |
| 431 | CONFIG_SCSI_FC_ATTRS=y | 477 | CONFIG_SCSI_FC_ATTRS=y |
| 432 | CONFIG_SCSI_ISCSI_ATTRS=m | 478 | CONFIG_SCSI_ISCSI_ATTRS=m |
| 433 | CONFIG_SCSI_SAS_ATTRS=y | 479 | CONFIG_SCSI_SAS_ATTRS=y |
| 480 | CONFIG_SCSI_SAS_LIBSAS=y | ||
| 481 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
| 434 | 482 | ||
| 435 | # | 483 | # |
| 436 | # SCSI low-level drivers | 484 | # SCSI low-level drivers |
| @@ -443,46 +491,82 @@ CONFIG_ISCSI_TCP=m | |||
| 443 | # CONFIG_SCSI_AIC7XXX is not set | 491 | # CONFIG_SCSI_AIC7XXX is not set |
| 444 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 492 | # CONFIG_SCSI_AIC7XXX_OLD is not set |
| 445 | # CONFIG_SCSI_AIC79XX is not set | 493 | # CONFIG_SCSI_AIC79XX is not set |
| 494 | # CONFIG_SCSI_AIC94XX is not set | ||
| 495 | # CONFIG_SCSI_ARCMSR is not set | ||
| 446 | # CONFIG_MEGARAID_NEWGEN is not set | 496 | # CONFIG_MEGARAID_NEWGEN is not set |
| 447 | # CONFIG_MEGARAID_LEGACY is not set | 497 | # CONFIG_MEGARAID_LEGACY is not set |
| 448 | # CONFIG_MEGARAID_SAS is not set | 498 | # CONFIG_MEGARAID_SAS is not set |
| 449 | CONFIG_SCSI_SATA=y | 499 | # CONFIG_SCSI_HPTIOP is not set |
| 450 | # CONFIG_SCSI_SATA_AHCI is not set | ||
| 451 | # CONFIG_SCSI_SATA_SVW is not set | ||
| 452 | # CONFIG_SCSI_ATA_PIIX is not set | ||
| 453 | # CONFIG_SCSI_SATA_MV is not set | ||
| 454 | # CONFIG_SCSI_SATA_NV is not set | ||
| 455 | # CONFIG_SCSI_PDC_ADMA is not set | ||
| 456 | # CONFIG_SCSI_SATA_QSTOR is not set | ||
| 457 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
| 458 | # CONFIG_SCSI_SATA_SX4 is not set | ||
| 459 | # CONFIG_SCSI_SATA_SIL is not set | ||
| 460 | # CONFIG_SCSI_SATA_SIL24 is not set | ||
| 461 | # CONFIG_SCSI_SATA_SIS is not set | ||
| 462 | # CONFIG_SCSI_SATA_ULI is not set | ||
| 463 | # CONFIG_SCSI_SATA_VIA is not set | ||
| 464 | CONFIG_SCSI_SATA_VITESSE=y | ||
| 465 | # CONFIG_SCSI_DMX3191D is not set | 500 | # CONFIG_SCSI_DMX3191D is not set |
| 466 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 501 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
| 467 | # CONFIG_SCSI_IPS is not set | 502 | # CONFIG_SCSI_IPS is not set |
| 468 | # CONFIG_SCSI_INITIO is not set | 503 | # CONFIG_SCSI_INITIO is not set |
| 469 | # CONFIG_SCSI_INIA100 is not set | 504 | # CONFIG_SCSI_INIA100 is not set |
| 505 | # CONFIG_SCSI_STEX is not set | ||
| 470 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 506 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 471 | # CONFIG_SCSI_IPR is not set | 507 | # CONFIG_SCSI_IPR is not set |
| 472 | CONFIG_SCSI_QLOGIC_1280=y | 508 | CONFIG_SCSI_QLOGIC_1280=y |
| 473 | CONFIG_SCSI_QLA_FC=y | 509 | CONFIG_SCSI_QLA_FC=y |
| 474 | CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y | 510 | # CONFIG_SCSI_QLA_ISCSI is not set |
| 475 | # CONFIG_SCSI_QLA21XX is not set | ||
| 476 | CONFIG_SCSI_QLA22XX=y | ||
| 477 | CONFIG_SCSI_QLA2300=y | ||
| 478 | CONFIG_SCSI_QLA2322=y | ||
| 479 | # CONFIG_SCSI_QLA24XX is not set | ||
| 480 | # CONFIG_SCSI_LPFC is not set | 511 | # CONFIG_SCSI_LPFC is not set |
| 481 | # CONFIG_SCSI_DC395x is not set | 512 | # CONFIG_SCSI_DC395x is not set |
| 482 | # CONFIG_SCSI_DC390T is not set | 513 | # CONFIG_SCSI_DC390T is not set |
| 483 | # CONFIG_SCSI_DEBUG is not set | 514 | # CONFIG_SCSI_DEBUG is not set |
| 484 | 515 | ||
| 485 | # | 516 | # |
| 517 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 518 | # | ||
| 519 | CONFIG_ATA=y | ||
| 520 | # CONFIG_SATA_AHCI is not set | ||
| 521 | # CONFIG_SATA_SVW is not set | ||
| 522 | # CONFIG_ATA_PIIX is not set | ||
| 523 | # CONFIG_SATA_MV is not set | ||
| 524 | # CONFIG_SATA_NV is not set | ||
| 525 | # CONFIG_PDC_ADMA is not set | ||
| 526 | # CONFIG_SATA_QSTOR is not set | ||
| 527 | # CONFIG_SATA_PROMISE is not set | ||
| 528 | # CONFIG_SATA_SX4 is not set | ||
| 529 | # CONFIG_SATA_SIL is not set | ||
| 530 | # CONFIG_SATA_SIL24 is not set | ||
| 531 | # CONFIG_SATA_SIS is not set | ||
| 532 | # CONFIG_SATA_ULI is not set | ||
| 533 | # CONFIG_SATA_VIA is not set | ||
| 534 | CONFIG_SATA_VITESSE=y | ||
| 535 | # CONFIG_PATA_ALI is not set | ||
| 536 | # CONFIG_PATA_AMD is not set | ||
| 537 | # CONFIG_PATA_ARTOP is not set | ||
| 538 | # CONFIG_PATA_ATIIXP is not set | ||
| 539 | # CONFIG_PATA_CMD64X is not set | ||
| 540 | # CONFIG_PATA_CS5520 is not set | ||
| 541 | # CONFIG_PATA_CS5530 is not set | ||
| 542 | # CONFIG_PATA_CYPRESS is not set | ||
| 543 | # CONFIG_PATA_EFAR is not set | ||
| 544 | # CONFIG_ATA_GENERIC is not set | ||
| 545 | # CONFIG_PATA_HPT366 is not set | ||
| 546 | # CONFIG_PATA_HPT37X is not set | ||
| 547 | # CONFIG_PATA_HPT3X2N is not set | ||
| 548 | # CONFIG_PATA_HPT3X3 is not set | ||
| 549 | # CONFIG_PATA_IT821X is not set | ||
| 550 | # CONFIG_PATA_JMICRON is not set | ||
| 551 | # CONFIG_PATA_TRIFLEX is not set | ||
| 552 | # CONFIG_PATA_MPIIX is not set | ||
| 553 | # CONFIG_PATA_OLDPIIX is not set | ||
| 554 | # CONFIG_PATA_NETCELL is not set | ||
| 555 | # CONFIG_PATA_NS87410 is not set | ||
| 556 | # CONFIG_PATA_OPTI is not set | ||
| 557 | # CONFIG_PATA_OPTIDMA is not set | ||
| 558 | # CONFIG_PATA_PDC_OLD is not set | ||
| 559 | # CONFIG_PATA_RADISYS is not set | ||
| 560 | # CONFIG_PATA_RZ1000 is not set | ||
| 561 | # CONFIG_PATA_SC1200 is not set | ||
| 562 | # CONFIG_PATA_SERVERWORKS is not set | ||
| 563 | # CONFIG_PATA_PDC2027X is not set | ||
| 564 | # CONFIG_PATA_SIL680 is not set | ||
| 565 | # CONFIG_PATA_SIS is not set | ||
| 566 | # CONFIG_PATA_VIA is not set | ||
| 567 | # CONFIG_PATA_WINBOND is not set | ||
| 568 | |||
| 569 | # | ||
| 486 | # Multi-device support (RAID and LVM) | 570 | # Multi-device support (RAID and LVM) |
| 487 | # | 571 | # |
| 488 | CONFIG_MD=y | 572 | CONFIG_MD=y |
| @@ -491,12 +575,12 @@ CONFIG_MD_LINEAR=y | |||
| 491 | CONFIG_MD_RAID0=y | 575 | CONFIG_MD_RAID0=y |
| 492 | CONFIG_MD_RAID1=y | 576 | CONFIG_MD_RAID1=y |
| 493 | # CONFIG_MD_RAID10 is not set | 577 | # CONFIG_MD_RAID10 is not set |
| 494 | CONFIG_MD_RAID5=y | 578 | CONFIG_MD_RAID456=y |
| 495 | # CONFIG_MD_RAID5_RESHAPE is not set | 579 | # CONFIG_MD_RAID5_RESHAPE is not set |
| 496 | # CONFIG_MD_RAID6 is not set | ||
| 497 | CONFIG_MD_MULTIPATH=y | 580 | CONFIG_MD_MULTIPATH=y |
| 498 | # CONFIG_MD_FAULTY is not set | 581 | # CONFIG_MD_FAULTY is not set |
| 499 | CONFIG_BLK_DEV_DM=y | 582 | CONFIG_BLK_DEV_DM=y |
| 583 | # CONFIG_DM_DEBUG is not set | ||
| 500 | CONFIG_DM_CRYPT=m | 584 | CONFIG_DM_CRYPT=m |
| 501 | CONFIG_DM_SNAPSHOT=m | 585 | CONFIG_DM_SNAPSHOT=m |
| 502 | CONFIG_DM_MIRROR=m | 586 | CONFIG_DM_MIRROR=m |
| @@ -563,6 +647,7 @@ CONFIG_NETDEVICES=y | |||
| 563 | # CONFIG_SK98LIN is not set | 647 | # CONFIG_SK98LIN is not set |
| 564 | CONFIG_TIGON3=y | 648 | CONFIG_TIGON3=y |
| 565 | # CONFIG_BNX2 is not set | 649 | # CONFIG_BNX2 is not set |
| 650 | # CONFIG_QLA3XXX is not set | ||
| 566 | 651 | ||
| 567 | # | 652 | # |
| 568 | # Ethernet (10000 Mbit) | 653 | # Ethernet (10000 Mbit) |
| @@ -571,6 +656,7 @@ CONFIG_CHELSIO_T1=m | |||
| 571 | # CONFIG_IXGB is not set | 656 | # CONFIG_IXGB is not set |
| 572 | CONFIG_S2IO=m | 657 | CONFIG_S2IO=m |
| 573 | # CONFIG_S2IO_NAPI is not set | 658 | # CONFIG_S2IO_NAPI is not set |
| 659 | # CONFIG_MYRI10GE is not set | ||
| 574 | 660 | ||
| 575 | # | 661 | # |
| 576 | # Token Ring devices | 662 | # Token Ring devices |
| @@ -612,6 +698,7 @@ CONFIG_NET_POLL_CONTROLLER=y | |||
| 612 | # Input device support | 698 | # Input device support |
| 613 | # | 699 | # |
| 614 | CONFIG_INPUT=y | 700 | CONFIG_INPUT=y |
| 701 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 615 | 702 | ||
| 616 | # | 703 | # |
| 617 | # Userland interfaces | 704 | # Userland interfaces |
| @@ -646,6 +733,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | |||
| 646 | CONFIG_VT=y | 733 | CONFIG_VT=y |
| 647 | CONFIG_VT_CONSOLE=y | 734 | CONFIG_VT_CONSOLE=y |
| 648 | CONFIG_HW_CONSOLE=y | 735 | CONFIG_HW_CONSOLE=y |
| 736 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 649 | CONFIG_SERIAL_NONSTANDARD=y | 737 | CONFIG_SERIAL_NONSTANDARD=y |
| 650 | # CONFIG_COMPUTONE is not set | 738 | # CONFIG_COMPUTONE is not set |
| 651 | # CONFIG_ROCKETPORT is not set | 739 | # CONFIG_ROCKETPORT is not set |
| @@ -659,10 +747,12 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
| 659 | # CONFIG_N_HDLC is not set | 747 | # CONFIG_N_HDLC is not set |
| 660 | # CONFIG_SPECIALIX is not set | 748 | # CONFIG_SPECIALIX is not set |
| 661 | # CONFIG_SX is not set | 749 | # CONFIG_SX is not set |
| 750 | # CONFIG_RIO is not set | ||
| 662 | # CONFIG_STALDRV is not set | 751 | # CONFIG_STALDRV is not set |
| 663 | CONFIG_SGI_SNSC=y | 752 | CONFIG_SGI_SNSC=y |
| 664 | CONFIG_SGI_TIOCX=y | 753 | CONFIG_SGI_TIOCX=y |
| 665 | CONFIG_SGI_MBCS=m | 754 | CONFIG_SGI_MBCS=m |
| 755 | CONFIG_MSPEC=y | ||
| 666 | 756 | ||
| 667 | # | 757 | # |
| 668 | # Serial drivers | 758 | # Serial drivers |
| @@ -701,6 +791,7 @@ CONFIG_EFI_RTC=y | |||
| 701 | # Ftape, the floppy tape device driver | 791 | # Ftape, the floppy tape device driver |
| 702 | # | 792 | # |
| 703 | CONFIG_AGP=y | 793 | CONFIG_AGP=y |
| 794 | # CONFIG_AGP_SIS is not set | ||
| 704 | # CONFIG_AGP_VIA is not set | 795 | # CONFIG_AGP_VIA is not set |
| 705 | CONFIG_AGP_SGI_TIOCA=y | 796 | CONFIG_AGP_SGI_TIOCA=y |
| 706 | # CONFIG_DRM is not set | 797 | # CONFIG_DRM is not set |
| @@ -730,7 +821,6 @@ CONFIG_MMTIMER=y | |||
| 730 | # | 821 | # |
| 731 | # Dallas's 1-wire bus | 822 | # Dallas's 1-wire bus |
| 732 | # | 823 | # |
| 733 | # CONFIG_W1 is not set | ||
| 734 | 824 | ||
| 735 | # | 825 | # |
| 736 | # Hardware Monitoring support | 826 | # Hardware Monitoring support |
| @@ -741,6 +831,7 @@ CONFIG_MMTIMER=y | |||
| 741 | # | 831 | # |
| 742 | # Misc devices | 832 | # Misc devices |
| 743 | # | 833 | # |
| 834 | # CONFIG_TIFM_CORE is not set | ||
| 744 | 835 | ||
| 745 | # | 836 | # |
| 746 | # Multimedia devices | 837 | # Multimedia devices |
| @@ -756,6 +847,7 @@ CONFIG_MMTIMER=y | |||
| 756 | # | 847 | # |
| 757 | # Graphics support | 848 | # Graphics support |
| 758 | # | 849 | # |
| 850 | CONFIG_FIRMWARE_EDID=y | ||
| 759 | # CONFIG_FB is not set | 851 | # CONFIG_FB is not set |
| 760 | 852 | ||
| 761 | # | 853 | # |
| @@ -764,6 +856,7 @@ CONFIG_MMTIMER=y | |||
| 764 | CONFIG_VGA_CONSOLE=y | 856 | CONFIG_VGA_CONSOLE=y |
| 765 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | 857 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set |
| 766 | CONFIG_DUMMY_CONSOLE=y | 858 | CONFIG_DUMMY_CONSOLE=y |
| 859 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 767 | 860 | ||
| 768 | # | 861 | # |
| 769 | # Sound | 862 | # Sound |
| @@ -794,6 +887,7 @@ CONFIG_USB=m | |||
| 794 | CONFIG_USB_EHCI_HCD=m | 887 | CONFIG_USB_EHCI_HCD=m |
| 795 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 888 | # CONFIG_USB_EHCI_SPLIT_ISO is not set |
| 796 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 889 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 890 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 797 | # CONFIG_USB_ISP116X_HCD is not set | 891 | # CONFIG_USB_ISP116X_HCD is not set |
| 798 | CONFIG_USB_OHCI_HCD=m | 892 | CONFIG_USB_OHCI_HCD=m |
| 799 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 893 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set |
| @@ -843,6 +937,7 @@ CONFIG_USB_HIDINPUT=y | |||
| 843 | # CONFIG_USB_ATI_REMOTE2 is not set | 937 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 844 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 938 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 845 | # CONFIG_USB_APPLETOUCH is not set | 939 | # CONFIG_USB_APPLETOUCH is not set |
| 940 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 846 | 941 | ||
| 847 | # | 942 | # |
| 848 | # USB Imaging devices | 943 | # USB Imaging devices |
| @@ -874,15 +969,18 @@ CONFIG_USB_MON=y | |||
| 874 | # | 969 | # |
| 875 | # CONFIG_USB_EMI62 is not set | 970 | # CONFIG_USB_EMI62 is not set |
| 876 | # CONFIG_USB_EMI26 is not set | 971 | # CONFIG_USB_EMI26 is not set |
| 972 | # CONFIG_USB_ADUTUX is not set | ||
| 877 | # CONFIG_USB_AUERSWALD is not set | 973 | # CONFIG_USB_AUERSWALD is not set |
| 878 | # CONFIG_USB_RIO500 is not set | 974 | # CONFIG_USB_RIO500 is not set |
| 879 | # CONFIG_USB_LEGOTOWER is not set | 975 | # CONFIG_USB_LEGOTOWER is not set |
| 880 | # CONFIG_USB_LCD is not set | 976 | # CONFIG_USB_LCD is not set |
| 881 | # CONFIG_USB_LED is not set | 977 | # CONFIG_USB_LED is not set |
| 978 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 882 | # CONFIG_USB_CYTHERM is not set | 979 | # CONFIG_USB_CYTHERM is not set |
| 883 | # CONFIG_USB_PHIDGETKIT is not set | 980 | # CONFIG_USB_PHIDGET is not set |
| 884 | # CONFIG_USB_PHIDGETSERVO is not set | ||
| 885 | # CONFIG_USB_IDMOUSE is not set | 981 | # CONFIG_USB_IDMOUSE is not set |
| 982 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 983 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 886 | # CONFIG_USB_SISUSBVGA is not set | 984 | # CONFIG_USB_SISUSBVGA is not set |
| 887 | # CONFIG_USB_LD is not set | 985 | # CONFIG_USB_LD is not set |
| 888 | 986 | ||
| @@ -919,18 +1017,15 @@ CONFIG_USB_MON=y | |||
| 919 | CONFIG_INFINIBAND=m | 1017 | CONFIG_INFINIBAND=m |
| 920 | # CONFIG_INFINIBAND_USER_MAD is not set | 1018 | # CONFIG_INFINIBAND_USER_MAD is not set |
| 921 | CONFIG_INFINIBAND_USER_ACCESS=m | 1019 | CONFIG_INFINIBAND_USER_ACCESS=m |
| 1020 | CONFIG_INFINIBAND_ADDR_TRANS=y | ||
| 922 | CONFIG_INFINIBAND_MTHCA=m | 1021 | CONFIG_INFINIBAND_MTHCA=m |
| 923 | CONFIG_INFINIBAND_MTHCA_DEBUG=y | 1022 | CONFIG_INFINIBAND_MTHCA_DEBUG=y |
| 1023 | # CONFIG_INFINIBAND_AMSO1100 is not set | ||
| 924 | CONFIG_INFINIBAND_IPOIB=m | 1024 | CONFIG_INFINIBAND_IPOIB=m |
| 925 | CONFIG_INFINIBAND_IPOIB_DEBUG=y | 1025 | CONFIG_INFINIBAND_IPOIB_DEBUG=y |
| 926 | # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set | 1026 | # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set |
| 927 | CONFIG_INFINIBAND_SRP=m | 1027 | CONFIG_INFINIBAND_SRP=m |
| 928 | 1028 | # CONFIG_INFINIBAND_ISER is not set | |
| 929 | # | ||
| 930 | # SN Devices | ||
| 931 | # | ||
| 932 | CONFIG_SGI_IOC4=y | ||
| 933 | CONFIG_SGI_IOC3=y | ||
| 934 | 1029 | ||
| 935 | # | 1030 | # |
| 936 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | 1031 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
| @@ -942,6 +1037,19 @@ CONFIG_SGI_IOC3=y | |||
| 942 | # CONFIG_RTC_CLASS is not set | 1037 | # CONFIG_RTC_CLASS is not set |
| 943 | 1038 | ||
| 944 | # | 1039 | # |
| 1040 | # DMA Engine support | ||
| 1041 | # | ||
| 1042 | # CONFIG_DMA_ENGINE is not set | ||
| 1043 | |||
| 1044 | # | ||
| 1045 | # DMA Clients | ||
| 1046 | # | ||
| 1047 | |||
| 1048 | # | ||
| 1049 | # DMA Devices | ||
| 1050 | # | ||
| 1051 | |||
| 1052 | # | ||
| 945 | # File systems | 1053 | # File systems |
| 946 | # | 1054 | # |
| 947 | CONFIG_EXT2_FS=y | 1055 | CONFIG_EXT2_FS=y |
| @@ -965,15 +1073,16 @@ CONFIG_REISERFS_FS_SECURITY=y | |||
| 965 | # CONFIG_JFS_FS is not set | 1073 | # CONFIG_JFS_FS is not set |
| 966 | CONFIG_FS_POSIX_ACL=y | 1074 | CONFIG_FS_POSIX_ACL=y |
| 967 | CONFIG_XFS_FS=y | 1075 | CONFIG_XFS_FS=y |
| 968 | CONFIG_XFS_EXPORT=y | ||
| 969 | CONFIG_XFS_QUOTA=y | 1076 | CONFIG_XFS_QUOTA=y |
| 970 | # CONFIG_XFS_SECURITY is not set | 1077 | # CONFIG_XFS_SECURITY is not set |
| 971 | CONFIG_XFS_POSIX_ACL=y | 1078 | CONFIG_XFS_POSIX_ACL=y |
| 972 | CONFIG_XFS_RT=y | 1079 | CONFIG_XFS_RT=y |
| 1080 | # CONFIG_GFS2_FS is not set | ||
| 973 | # CONFIG_OCFS2_FS is not set | 1081 | # CONFIG_OCFS2_FS is not set |
| 974 | # CONFIG_MINIX_FS is not set | 1082 | # CONFIG_MINIX_FS is not set |
| 975 | # CONFIG_ROMFS_FS is not set | 1083 | # CONFIG_ROMFS_FS is not set |
| 976 | CONFIG_INOTIFY=y | 1084 | CONFIG_INOTIFY=y |
| 1085 | CONFIG_INOTIFY_USER=y | ||
| 977 | CONFIG_QUOTA=y | 1086 | CONFIG_QUOTA=y |
| 978 | # CONFIG_QFMT_V1 is not set | 1087 | # CONFIG_QFMT_V1 is not set |
| 979 | # CONFIG_QFMT_V2 is not set | 1088 | # CONFIG_QFMT_V2 is not set |
| @@ -1007,8 +1116,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 1007 | # | 1116 | # |
| 1008 | CONFIG_PROC_FS=y | 1117 | CONFIG_PROC_FS=y |
| 1009 | CONFIG_PROC_KCORE=y | 1118 | CONFIG_PROC_KCORE=y |
| 1119 | CONFIG_PROC_SYSCTL=y | ||
| 1010 | CONFIG_SYSFS=y | 1120 | CONFIG_SYSFS=y |
| 1011 | CONFIG_TMPFS=y | 1121 | CONFIG_TMPFS=y |
| 1122 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1012 | CONFIG_HUGETLBFS=y | 1123 | CONFIG_HUGETLBFS=y |
| 1013 | CONFIG_HUGETLB_PAGE=y | 1124 | CONFIG_HUGETLB_PAGE=y |
| 1014 | CONFIG_RAMFS=y | 1125 | CONFIG_RAMFS=y |
| @@ -1046,7 +1157,7 @@ CONFIG_NFSD_V4=y | |||
| 1046 | CONFIG_NFSD_TCP=y | 1157 | CONFIG_NFSD_TCP=y |
| 1047 | CONFIG_LOCKD=m | 1158 | CONFIG_LOCKD=m |
| 1048 | CONFIG_LOCKD_V4=y | 1159 | CONFIG_LOCKD_V4=y |
| 1049 | CONFIG_EXPORTFS=y | 1160 | CONFIG_EXPORTFS=m |
| 1050 | CONFIG_NFS_COMMON=y | 1161 | CONFIG_NFS_COMMON=y |
| 1051 | CONFIG_SUNRPC=m | 1162 | CONFIG_SUNRPC=m |
| 1052 | CONFIG_SUNRPC_GSS=m | 1163 | CONFIG_SUNRPC_GSS=m |
| @@ -1056,7 +1167,9 @@ CONFIG_SMB_FS=m | |||
| 1056 | # CONFIG_SMB_NLS_DEFAULT is not set | 1167 | # CONFIG_SMB_NLS_DEFAULT is not set |
| 1057 | CONFIG_CIFS=m | 1168 | CONFIG_CIFS=m |
| 1058 | # CONFIG_CIFS_STATS is not set | 1169 | # CONFIG_CIFS_STATS is not set |
| 1170 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1059 | # CONFIG_CIFS_XATTR is not set | 1171 | # CONFIG_CIFS_XATTR is not set |
| 1172 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1060 | # CONFIG_CIFS_EXPERIMENTAL is not set | 1173 | # CONFIG_CIFS_EXPERIMENTAL is not set |
| 1061 | # CONFIG_NCP_FS is not set | 1174 | # CONFIG_NCP_FS is not set |
| 1062 | # CONFIG_CODA_FS is not set | 1175 | # CONFIG_CODA_FS is not set |
| @@ -1129,6 +1242,10 @@ CONFIG_NLS_ISO8859_1=y | |||
| 1129 | CONFIG_NLS_UTF8=y | 1242 | CONFIG_NLS_UTF8=y |
| 1130 | 1243 | ||
| 1131 | # | 1244 | # |
| 1245 | # Distributed Lock Manager | ||
| 1246 | # | ||
| 1247 | |||
| 1248 | # | ||
| 1132 | # Library routines | 1249 | # Library routines |
| 1133 | # | 1250 | # |
| 1134 | # CONFIG_CRC_CCITT is not set | 1251 | # CONFIG_CRC_CCITT is not set |
| @@ -1138,9 +1255,11 @@ CONFIG_LIBCRC32C=m | |||
| 1138 | CONFIG_ZLIB_INFLATE=m | 1255 | CONFIG_ZLIB_INFLATE=m |
| 1139 | CONFIG_ZLIB_DEFLATE=m | 1256 | CONFIG_ZLIB_DEFLATE=m |
| 1140 | CONFIG_GENERIC_ALLOCATOR=y | 1257 | CONFIG_GENERIC_ALLOCATOR=y |
| 1258 | CONFIG_PLIST=y | ||
| 1141 | CONFIG_GENERIC_HARDIRQS=y | 1259 | CONFIG_GENERIC_HARDIRQS=y |
| 1142 | CONFIG_GENERIC_IRQ_PROBE=y | 1260 | CONFIG_GENERIC_IRQ_PROBE=y |
| 1143 | CONFIG_GENERIC_PENDING_IRQ=y | 1261 | CONFIG_GENERIC_PENDING_IRQ=y |
| 1262 | CONFIG_IRQ_PER_CPU=y | ||
| 1144 | 1263 | ||
| 1145 | # | 1264 | # |
| 1146 | # Instrumentation Support | 1265 | # Instrumentation Support |
| @@ -1152,20 +1271,26 @@ CONFIG_GENERIC_PENDING_IRQ=y | |||
| 1152 | # Kernel hacking | 1271 | # Kernel hacking |
| 1153 | # | 1272 | # |
| 1154 | # CONFIG_PRINTK_TIME is not set | 1273 | # CONFIG_PRINTK_TIME is not set |
| 1274 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1155 | CONFIG_MAGIC_SYSRQ=y | 1275 | CONFIG_MAGIC_SYSRQ=y |
| 1276 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1156 | CONFIG_DEBUG_KERNEL=y | 1277 | CONFIG_DEBUG_KERNEL=y |
| 1157 | CONFIG_LOG_BUF_SHIFT=20 | 1278 | CONFIG_LOG_BUF_SHIFT=20 |
| 1158 | CONFIG_DETECT_SOFTLOCKUP=y | 1279 | CONFIG_DETECT_SOFTLOCKUP=y |
| 1159 | # CONFIG_SCHEDSTATS is not set | 1280 | # CONFIG_SCHEDSTATS is not set |
| 1160 | # CONFIG_DEBUG_SLAB is not set | 1281 | # CONFIG_DEBUG_SLAB is not set |
| 1161 | CONFIG_DEBUG_PREEMPT=y | 1282 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1162 | # CONFIG_DEBUG_MUTEXES is not set | 1283 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1163 | # CONFIG_DEBUG_SPINLOCK is not set | 1284 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1285 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 1286 | # CONFIG_DEBUG_RWSEMS is not set | ||
| 1164 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1287 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1288 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1165 | # CONFIG_DEBUG_KOBJECT is not set | 1289 | # CONFIG_DEBUG_KOBJECT is not set |
| 1166 | CONFIG_DEBUG_INFO=y | 1290 | CONFIG_DEBUG_INFO=y |
| 1167 | # CONFIG_DEBUG_FS is not set | 1291 | # CONFIG_DEBUG_FS is not set |
| 1168 | # CONFIG_DEBUG_VM is not set | 1292 | # CONFIG_DEBUG_VM is not set |
| 1293 | # CONFIG_DEBUG_LIST is not set | ||
| 1169 | CONFIG_FORCED_INLINING=y | 1294 | CONFIG_FORCED_INLINING=y |
| 1170 | # CONFIG_RCU_TORTURE_TEST is not set | 1295 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1171 | CONFIG_IA64_GRANULE_16MB=y | 1296 | CONFIG_IA64_GRANULE_16MB=y |
| @@ -1186,6 +1311,10 @@ CONFIG_SYSVIPC_COMPAT=y | |||
| 1186 | # Cryptographic options | 1311 | # Cryptographic options |
| 1187 | # | 1312 | # |
| 1188 | CONFIG_CRYPTO=y | 1313 | CONFIG_CRYPTO=y |
| 1314 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1315 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1316 | CONFIG_CRYPTO_HASH=y | ||
| 1317 | CONFIG_CRYPTO_MANAGER=m | ||
| 1189 | CONFIG_CRYPTO_HMAC=y | 1318 | CONFIG_CRYPTO_HMAC=y |
| 1190 | # CONFIG_CRYPTO_NULL is not set | 1319 | # CONFIG_CRYPTO_NULL is not set |
| 1191 | # CONFIG_CRYPTO_MD4 is not set | 1320 | # CONFIG_CRYPTO_MD4 is not set |
| @@ -1195,6 +1324,8 @@ CONFIG_CRYPTO_SHA1=m | |||
| 1195 | # CONFIG_CRYPTO_SHA512 is not set | 1324 | # CONFIG_CRYPTO_SHA512 is not set |
| 1196 | # CONFIG_CRYPTO_WP512 is not set | 1325 | # CONFIG_CRYPTO_WP512 is not set |
| 1197 | # CONFIG_CRYPTO_TGR192 is not set | 1326 | # CONFIG_CRYPTO_TGR192 is not set |
| 1327 | CONFIG_CRYPTO_ECB=m | ||
| 1328 | CONFIG_CRYPTO_CBC=m | ||
| 1198 | CONFIG_CRYPTO_DES=m | 1329 | CONFIG_CRYPTO_DES=m |
| 1199 | # CONFIG_CRYPTO_BLOWFISH is not set | 1330 | # CONFIG_CRYPTO_BLOWFISH is not set |
| 1200 | # CONFIG_CRYPTO_TWOFISH is not set | 1331 | # CONFIG_CRYPTO_TWOFISH is not set |
diff --git a/arch/ia64/hp/sim/Kconfig b/arch/ia64/hp/sim/Kconfig index 18ccb1266e18..f92306bbedb8 100644 --- a/arch/ia64/hp/sim/Kconfig +++ b/arch/ia64/hp/sim/Kconfig | |||
| @@ -13,8 +13,8 @@ config HP_SIMSERIAL_CONSOLE | |||
| 13 | depends on HP_SIMSERIAL | 13 | depends on HP_SIMSERIAL |
| 14 | 14 | ||
| 15 | config HP_SIMSCSI | 15 | config HP_SIMSCSI |
| 16 | tristate "Simulated SCSI disk" | 16 | bool "Simulated SCSI disk" |
| 17 | depends on SCSI | 17 | depends on SCSI=y |
| 18 | 18 | ||
| 19 | endmenu | 19 | endmenu |
| 20 | 20 | ||
diff --git a/arch/ia64/hp/sim/hpsim_irq.c b/arch/ia64/hp/sim/hpsim_irq.c index 8145547bb52d..c2f58ff364e7 100644 --- a/arch/ia64/hp/sim/hpsim_irq.c +++ b/arch/ia64/hp/sim/hpsim_irq.c | |||
| @@ -27,7 +27,7 @@ hpsim_set_affinity_noop (unsigned int a, cpumask_t b) | |||
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | static struct hw_interrupt_type irq_type_hp_sim = { | 29 | static struct hw_interrupt_type irq_type_hp_sim = { |
| 30 | .typename = "hpsim", | 30 | .name = "hpsim", |
| 31 | .startup = hpsim_irq_startup, | 31 | .startup = hpsim_irq_startup, |
| 32 | .shutdown = hpsim_irq_noop, | 32 | .shutdown = hpsim_irq_noop, |
| 33 | .enable = hpsim_irq_noop, | 33 | .enable = hpsim_irq_noop, |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 32c3abededc6..73ef4a85b861 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
| @@ -64,9 +64,6 @@ EXPORT_SYMBOL(pm_idle); | |||
| 64 | void (*pm_power_off) (void); | 64 | void (*pm_power_off) (void); |
| 65 | EXPORT_SYMBOL(pm_power_off); | 65 | EXPORT_SYMBOL(pm_power_off); |
| 66 | 66 | ||
| 67 | unsigned char acpi_kbd_controller_present = 1; | ||
| 68 | unsigned char acpi_legacy_devices; | ||
| 69 | |||
| 70 | unsigned int acpi_cpei_override; | 67 | unsigned int acpi_cpei_override; |
| 71 | unsigned int acpi_cpei_phys_cpuid; | 68 | unsigned int acpi_cpei_phys_cpuid; |
| 72 | 69 | ||
| @@ -628,12 +625,6 @@ static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size) | |||
| 628 | 625 | ||
| 629 | fadt = (struct fadt_descriptor *)fadt_header; | 626 | fadt = (struct fadt_descriptor *)fadt_header; |
| 630 | 627 | ||
| 631 | if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER)) | ||
| 632 | acpi_kbd_controller_present = 0; | ||
| 633 | |||
| 634 | if (fadt->iapc_boot_arch & BAF_LEGACY_DEVICES) | ||
| 635 | acpi_legacy_devices = 1; | ||
| 636 | |||
| 637 | acpi_register_gsi(fadt->sci_int, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); | 628 | acpi_register_gsi(fadt->sci_int, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); |
| 638 | return 0; | 629 | return 0; |
| 639 | } | 630 | } |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 9bf15fefa7e4..60d64950e3c2 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
| @@ -426,7 +426,7 @@ iosapic_end_level_irq (unsigned int irq) | |||
| 426 | #define iosapic_ack_level_irq nop | 426 | #define iosapic_ack_level_irq nop |
| 427 | 427 | ||
| 428 | struct hw_interrupt_type irq_type_iosapic_level = { | 428 | struct hw_interrupt_type irq_type_iosapic_level = { |
| 429 | .typename = "IO-SAPIC-level", | 429 | .name = "IO-SAPIC-level", |
| 430 | .startup = iosapic_startup_level_irq, | 430 | .startup = iosapic_startup_level_irq, |
| 431 | .shutdown = iosapic_shutdown_level_irq, | 431 | .shutdown = iosapic_shutdown_level_irq, |
| 432 | .enable = iosapic_enable_level_irq, | 432 | .enable = iosapic_enable_level_irq, |
| @@ -473,7 +473,7 @@ iosapic_ack_edge_irq (unsigned int irq) | |||
| 473 | #define iosapic_end_edge_irq nop | 473 | #define iosapic_end_edge_irq nop |
| 474 | 474 | ||
| 475 | struct hw_interrupt_type irq_type_iosapic_edge = { | 475 | struct hw_interrupt_type irq_type_iosapic_edge = { |
| 476 | .typename = "IO-SAPIC-edge", | 476 | .name = "IO-SAPIC-edge", |
| 477 | .startup = iosapic_startup_edge_irq, | 477 | .startup = iosapic_startup_edge_irq, |
| 478 | .shutdown = iosapic_disable_edge_irq, | 478 | .shutdown = iosapic_disable_edge_irq, |
| 479 | .enable = iosapic_enable_edge_irq, | 479 | .enable = iosapic_enable_edge_irq, |
| @@ -664,7 +664,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery, | |||
| 664 | printk(KERN_WARNING | 664 | printk(KERN_WARNING |
| 665 | "%s: changing vector %d from %s to %s\n", | 665 | "%s: changing vector %d from %s to %s\n", |
| 666 | __FUNCTION__, vector, | 666 | __FUNCTION__, vector, |
| 667 | idesc->chip->typename, irq_type->typename); | 667 | idesc->chip->name, irq_type->name); |
| 668 | idesc->chip = irq_type; | 668 | idesc->chip = irq_type; |
| 669 | } | 669 | } |
| 670 | return 0; | 670 | return 0; |
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index f07c0864b0b4..54d55e4d64f7 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
| @@ -76,7 +76,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 76 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 76 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
| 77 | } | 77 | } |
| 78 | #endif | 78 | #endif |
| 79 | seq_printf(p, " %14s", irq_desc[i].chip->typename); | 79 | seq_printf(p, " %14s", irq_desc[i].chip->name); |
| 80 | seq_printf(p, " %s", action->name); | 80 | seq_printf(p, " %s", action->name); |
| 81 | 81 | ||
| 82 | for (action=action->next; action; action = action->next) | 82 | for (action=action->next; action; action = action->next) |
| @@ -197,7 +197,7 @@ void fixup_irqs(void) | |||
| 197 | struct pt_regs *old_regs = set_irq_regs(NULL); | 197 | struct pt_regs *old_regs = set_irq_regs(NULL); |
| 198 | 198 | ||
| 199 | vectors_in_migration[irq]=0; | 199 | vectors_in_migration[irq]=0; |
| 200 | __do_IRQ(irq); | 200 | generic_handle_irq(irq); |
| 201 | set_irq_regs(old_regs); | 201 | set_irq_regs(old_regs); |
| 202 | } | 202 | } |
| 203 | } | 203 | } |
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 68339dd0c9e2..ba3ba8bc50be 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
| @@ -180,11 +180,13 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | |||
| 180 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); | 180 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); |
| 181 | ia64_srlz_d(); | 181 | ia64_srlz_d(); |
| 182 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 182 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
| 183 | if (!IS_RESCHEDULE(vector)) { | 183 | if (unlikely(IS_RESCHEDULE(vector))) |
| 184 | kstat_this_cpu.irqs[vector]++; | ||
| 185 | else { | ||
| 184 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 186 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
| 185 | ia64_srlz_d(); | 187 | ia64_srlz_d(); |
| 186 | 188 | ||
| 187 | __do_IRQ(local_vector_to_irq(vector)); | 189 | generic_handle_irq(local_vector_to_irq(vector)); |
| 188 | 190 | ||
| 189 | /* | 191 | /* |
| 190 | * Disable interrupts and send EOI: | 192 | * Disable interrupts and send EOI: |
| @@ -225,7 +227,9 @@ void ia64_process_pending_intr(void) | |||
| 225 | * Perform normal interrupt style processing | 227 | * Perform normal interrupt style processing |
| 226 | */ | 228 | */ |
| 227 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 229 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
| 228 | if (!IS_RESCHEDULE(vector)) { | 230 | if (unlikely(IS_RESCHEDULE(vector))) |
| 231 | kstat_this_cpu.irqs[vector]++; | ||
| 232 | else { | ||
| 229 | struct pt_regs *old_regs = set_irq_regs(NULL); | 233 | struct pt_regs *old_regs = set_irq_regs(NULL); |
| 230 | 234 | ||
| 231 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 235 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
| @@ -238,7 +242,7 @@ void ia64_process_pending_intr(void) | |||
| 238 | * Probably could shared code. | 242 | * Probably could shared code. |
| 239 | */ | 243 | */ |
| 240 | vectors_in_migration[local_vector_to_irq(vector)]=0; | 244 | vectors_in_migration[local_vector_to_irq(vector)]=0; |
| 241 | __do_IRQ(local_vector_to_irq(vector)); | 245 | generic_handle_irq(local_vector_to_irq(vector)); |
| 242 | set_irq_regs(old_regs); | 246 | set_irq_regs(old_regs); |
| 243 | 247 | ||
| 244 | /* | 248 | /* |
| @@ -258,11 +262,22 @@ void ia64_process_pending_intr(void) | |||
| 258 | #ifdef CONFIG_SMP | 262 | #ifdef CONFIG_SMP |
| 259 | extern irqreturn_t handle_IPI (int irq, void *dev_id); | 263 | extern irqreturn_t handle_IPI (int irq, void *dev_id); |
| 260 | 264 | ||
| 265 | static irqreturn_t dummy_handler (int irq, void *dev_id) | ||
| 266 | { | ||
| 267 | BUG(); | ||
| 268 | } | ||
| 269 | |||
| 261 | static struct irqaction ipi_irqaction = { | 270 | static struct irqaction ipi_irqaction = { |
| 262 | .handler = handle_IPI, | 271 | .handler = handle_IPI, |
| 263 | .flags = IRQF_DISABLED, | 272 | .flags = IRQF_DISABLED, |
| 264 | .name = "IPI" | 273 | .name = "IPI" |
| 265 | }; | 274 | }; |
| 275 | |||
| 276 | static struct irqaction resched_irqaction = { | ||
| 277 | .handler = dummy_handler, | ||
| 278 | .flags = SA_INTERRUPT, | ||
| 279 | .name = "resched" | ||
| 280 | }; | ||
| 266 | #endif | 281 | #endif |
| 267 | 282 | ||
| 268 | void | 283 | void |
| @@ -287,6 +302,7 @@ init_IRQ (void) | |||
| 287 | register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL); | 302 | register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL); |
| 288 | #ifdef CONFIG_SMP | 303 | #ifdef CONFIG_SMP |
| 289 | register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction); | 304 | register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction); |
| 305 | register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction); | ||
| 290 | #endif | 306 | #endif |
| 291 | #ifdef CONFIG_PERFMON | 307 | #ifdef CONFIG_PERFMON |
| 292 | pfm_init_percpu(); | 308 | pfm_init_percpu(); |
diff --git a/arch/ia64/kernel/irq_lsapic.c b/arch/ia64/kernel/irq_lsapic.c index 1ab58b09f3d7..c2f07beb1759 100644 --- a/arch/ia64/kernel/irq_lsapic.c +++ b/arch/ia64/kernel/irq_lsapic.c | |||
| @@ -34,7 +34,7 @@ static int lsapic_retrigger(unsigned int irq) | |||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | struct hw_interrupt_type irq_type_ia64_lsapic = { | 36 | struct hw_interrupt_type irq_type_ia64_lsapic = { |
| 37 | .typename = "LSAPIC", | 37 | .name = "LSAPIC", |
| 38 | .startup = lsapic_noop_startup, | 38 | .startup = lsapic_noop_startup, |
| 39 | .shutdown = lsapic_noop, | 39 | .shutdown = lsapic_noop, |
| 40 | .enable = lsapic_noop, | 40 | .enable = lsapic_noop, |
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c index a45009d2bc90..afc1403799c9 100644 --- a/arch/ia64/kernel/mca_drv.c +++ b/arch/ia64/kernel/mca_drv.c | |||
| @@ -435,6 +435,50 @@ is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci, | |||
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | /** | 437 | /** |
| 438 | * get_target_identifier - Get the valid Cache or Bus check target identifier. | ||
| 439 | * @peidx: pointer of index of processor error section | ||
| 440 | * | ||
| 441 | * Return value: | ||
| 442 | * target address on Success / 0 on Failue | ||
| 443 | */ | ||
| 444 | static u64 | ||
| 445 | get_target_identifier(peidx_table_t *peidx) | ||
| 446 | { | ||
| 447 | u64 target_address = 0; | ||
| 448 | sal_log_mod_error_info_t *smei; | ||
| 449 | pal_cache_check_info_t *pcci; | ||
| 450 | int i, level = 9; | ||
| 451 | |||
| 452 | /* | ||
| 453 | * Look through the cache checks for a valid target identifier | ||
| 454 | * If more than one valid target identifier, return the one | ||
| 455 | * with the lowest cache level. | ||
| 456 | */ | ||
| 457 | for (i = 0; i < peidx_cache_check_num(peidx); i++) { | ||
| 458 | smei = (sal_log_mod_error_info_t *)peidx_cache_check(peidx, i); | ||
| 459 | if (smei->valid.target_identifier && smei->target_identifier) { | ||
| 460 | pcci = (pal_cache_check_info_t *)&(smei->check_info); | ||
| 461 | if (!target_address || (pcci->level < level)) { | ||
| 462 | target_address = smei->target_identifier; | ||
| 463 | level = pcci->level; | ||
| 464 | continue; | ||
| 465 | } | ||
| 466 | } | ||
| 467 | } | ||
| 468 | if (target_address) | ||
| 469 | return target_address; | ||
| 470 | |||
| 471 | /* | ||
| 472 | * Look at the bus check for a valid target identifier | ||
| 473 | */ | ||
| 474 | smei = peidx_bus_check(peidx, 0); | ||
| 475 | if (smei && smei->valid.target_identifier) | ||
| 476 | return smei->target_identifier; | ||
| 477 | |||
| 478 | return 0; | ||
| 479 | } | ||
| 480 | |||
| 481 | /** | ||
| 438 | * recover_from_read_error - Try to recover the errors which type are "read"s. | 482 | * recover_from_read_error - Try to recover the errors which type are "read"s. |
| 439 | * @slidx: pointer of index of SAL error record | 483 | * @slidx: pointer of index of SAL error record |
| 440 | * @peidx: pointer of index of processor error section | 484 | * @peidx: pointer of index of processor error section |
| @@ -450,13 +494,14 @@ recover_from_read_error(slidx_table_t *slidx, | |||
| 450 | peidx_table_t *peidx, pal_bus_check_info_t *pbci, | 494 | peidx_table_t *peidx, pal_bus_check_info_t *pbci, |
| 451 | struct ia64_sal_os_state *sos) | 495 | struct ia64_sal_os_state *sos) |
| 452 | { | 496 | { |
| 453 | sal_log_mod_error_info_t *smei; | 497 | u64 target_identifier; |
| 454 | pal_min_state_area_t *pmsa; | 498 | pal_min_state_area_t *pmsa; |
| 455 | struct ia64_psr *psr1, *psr2; | 499 | struct ia64_psr *psr1, *psr2; |
| 456 | ia64_fptr_t *mca_hdlr_bh = (ia64_fptr_t*)mca_handler_bhhook; | 500 | ia64_fptr_t *mca_hdlr_bh = (ia64_fptr_t*)mca_handler_bhhook; |
| 457 | 501 | ||
| 458 | /* Is target address valid? */ | 502 | /* Is target address valid? */ |
| 459 | if (!pbci->tv) | 503 | target_identifier = get_target_identifier(peidx); |
| 504 | if (!target_identifier) | ||
| 460 | return fatal_mca("target address not valid"); | 505 | return fatal_mca("target address not valid"); |
| 461 | 506 | ||
| 462 | /* | 507 | /* |
| @@ -487,32 +532,28 @@ recover_from_read_error(slidx_table_t *slidx, | |||
| 487 | pmsa = sos->pal_min_state; | 532 | pmsa = sos->pal_min_state; |
| 488 | if (psr1->cpl != 0 || | 533 | if (psr1->cpl != 0 || |
| 489 | ((psr2->cpl != 0) && mca_recover_range(pmsa->pmsa_iip))) { | 534 | ((psr2->cpl != 0) && mca_recover_range(pmsa->pmsa_iip))) { |
| 490 | smei = peidx_bus_check(peidx, 0); | 535 | /* |
| 491 | if (smei->valid.target_identifier) { | 536 | * setup for resume to bottom half of MCA, |
| 492 | /* | 537 | * "mca_handler_bhhook" |
| 493 | * setup for resume to bottom half of MCA, | 538 | */ |
| 494 | * "mca_handler_bhhook" | 539 | /* pass to bhhook as argument (gr8, ...) */ |
| 495 | */ | 540 | pmsa->pmsa_gr[8-1] = target_identifier; |
| 496 | /* pass to bhhook as argument (gr8, ...) */ | 541 | pmsa->pmsa_gr[9-1] = pmsa->pmsa_iip; |
| 497 | pmsa->pmsa_gr[8-1] = smei->target_identifier; | 542 | pmsa->pmsa_gr[10-1] = pmsa->pmsa_ipsr; |
| 498 | pmsa->pmsa_gr[9-1] = pmsa->pmsa_iip; | 543 | /* set interrupted return address (but no use) */ |
| 499 | pmsa->pmsa_gr[10-1] = pmsa->pmsa_ipsr; | 544 | pmsa->pmsa_br0 = pmsa->pmsa_iip; |
| 500 | /* set interrupted return address (but no use) */ | 545 | /* change resume address to bottom half */ |
| 501 | pmsa->pmsa_br0 = pmsa->pmsa_iip; | 546 | pmsa->pmsa_iip = mca_hdlr_bh->fp; |
| 502 | /* change resume address to bottom half */ | 547 | pmsa->pmsa_gr[1-1] = mca_hdlr_bh->gp; |
| 503 | pmsa->pmsa_iip = mca_hdlr_bh->fp; | 548 | /* set cpl with kernel mode */ |
| 504 | pmsa->pmsa_gr[1-1] = mca_hdlr_bh->gp; | 549 | psr2 = (struct ia64_psr *)&pmsa->pmsa_ipsr; |
| 505 | /* set cpl with kernel mode */ | 550 | psr2->cpl = 0; |
| 506 | psr2 = (struct ia64_psr *)&pmsa->pmsa_ipsr; | 551 | psr2->ri = 0; |
| 507 | psr2->cpl = 0; | 552 | psr2->bn = 1; |
| 508 | psr2->ri = 0; | 553 | psr2->i = 0; |
| 509 | psr2->bn = 1; | 554 | |
| 510 | psr2->i = 0; | 555 | return mca_recovered("user memory corruption. " |
| 511 | |||
| 512 | return mca_recovered("user memory corruption. " | ||
| 513 | "kill affected process - recovered."); | 556 | "kill affected process - recovered."); |
| 514 | } | ||
| 515 | |||
| 516 | } | 557 | } |
| 517 | 558 | ||
| 518 | return fatal_mca("kernel context not recovered, iip 0x%lx\n", | 559 | return fatal_mca("kernel context not recovered, iip 0x%lx\n", |
diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S index ebaf1e685f5e..0b533441c3c9 100644 --- a/arch/ia64/kernel/pal.S +++ b/arch/ia64/kernel/pal.S | |||
| @@ -21,11 +21,12 @@ pal_entry_point: | |||
| 21 | .text | 21 | .text |
| 22 | 22 | ||
| 23 | /* | 23 | /* |
| 24 | * Set the PAL entry point address. This could be written in C code, but we do it here | 24 | * Set the PAL entry point address. This could be written in C code, but we |
| 25 | * to keep it all in one module (besides, it's so trivial that it's | 25 | * do it here to keep it all in one module (besides, it's so trivial that it's |
| 26 | * not a big deal). | 26 | * not a big deal). |
| 27 | * | 27 | * |
| 28 | * in0 Address of the PAL entry point (text address, NOT a function descriptor). | 28 | * in0 Address of the PAL entry point (text address, NOT a function |
| 29 | * descriptor). | ||
| 29 | */ | 30 | */ |
| 30 | GLOBAL_ENTRY(ia64_pal_handler_init) | 31 | GLOBAL_ENTRY(ia64_pal_handler_init) |
| 31 | alloc r3=ar.pfs,1,0,0,0 | 32 | alloc r3=ar.pfs,1,0,0,0 |
| @@ -36,9 +37,9 @@ GLOBAL_ENTRY(ia64_pal_handler_init) | |||
| 36 | END(ia64_pal_handler_init) | 37 | END(ia64_pal_handler_init) |
| 37 | 38 | ||
| 38 | /* | 39 | /* |
| 39 | * Default PAL call handler. This needs to be coded in assembly because it uses | 40 | * Default PAL call handler. This needs to be coded in assembly because it |
| 40 | * the static calling convention, i.e., the RSE may not be used and calls are | 41 | * uses the static calling convention, i.e., the RSE may not be used and |
| 41 | * done via "br.cond" (not "br.call"). | 42 | * calls are done via "br.cond" (not "br.call"). |
| 42 | */ | 43 | */ |
| 43 | GLOBAL_ENTRY(ia64_pal_default_handler) | 44 | GLOBAL_ENTRY(ia64_pal_default_handler) |
| 44 | mov r8=-1 | 45 | mov r8=-1 |
| @@ -50,12 +51,10 @@ END(ia64_pal_default_handler) | |||
| 50 | * | 51 | * |
| 51 | * in0 Index of PAL service | 52 | * in0 Index of PAL service |
| 52 | * in1 - in3 Remaining PAL arguments | 53 | * in1 - in3 Remaining PAL arguments |
| 53 | * in4 1 ==> clear psr.ic, 0 ==> don't clear psr.ic | ||
| 54 | * | ||
| 55 | */ | 54 | */ |
| 56 | GLOBAL_ENTRY(ia64_pal_call_static) | 55 | GLOBAL_ENTRY(ia64_pal_call_static) |
| 57 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) | 56 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) |
| 58 | alloc loc1 = ar.pfs,5,5,0,0 | 57 | alloc loc1 = ar.pfs,4,5,0,0 |
| 59 | movl loc2 = pal_entry_point | 58 | movl loc2 = pal_entry_point |
| 60 | 1: { | 59 | 1: { |
| 61 | mov r28 = in0 | 60 | mov r28 = in0 |
| @@ -64,7 +63,6 @@ GLOBAL_ENTRY(ia64_pal_call_static) | |||
| 64 | } | 63 | } |
| 65 | ;; | 64 | ;; |
| 66 | ld8 loc2 = [loc2] // loc2 <- entry point | 65 | ld8 loc2 = [loc2] // loc2 <- entry point |
| 67 | tbit.nz p6,p7 = in4, 0 | ||
| 68 | adds r8 = 1f-1b,r8 | 66 | adds r8 = 1f-1b,r8 |
| 69 | mov loc4=ar.rsc // save RSE configuration | 67 | mov loc4=ar.rsc // save RSE configuration |
| 70 | ;; | 68 | ;; |
| @@ -74,13 +72,11 @@ GLOBAL_ENTRY(ia64_pal_call_static) | |||
| 74 | .body | 72 | .body |
| 75 | mov r30 = in2 | 73 | mov r30 = in2 |
| 76 | 74 | ||
| 77 | (p6) rsm psr.i | psr.ic | ||
| 78 | mov r31 = in3 | 75 | mov r31 = in3 |
| 79 | mov b7 = loc2 | 76 | mov b7 = loc2 |
| 80 | 77 | ||
| 81 | (p7) rsm psr.i | 78 | rsm psr.i |
| 82 | ;; | 79 | ;; |
| 83 | (p6) srlz.i | ||
| 84 | mov rp = r8 | 80 | mov rp = r8 |
| 85 | br.cond.sptk.many b7 | 81 | br.cond.sptk.many b7 |
| 86 | 1: mov psr.l = loc3 | 82 | 1: mov psr.l = loc3 |
| @@ -96,8 +92,8 @@ END(ia64_pal_call_static) | |||
| 96 | * Make a PAL call using the stacked registers calling convention. | 92 | * Make a PAL call using the stacked registers calling convention. |
| 97 | * | 93 | * |
| 98 | * Inputs: | 94 | * Inputs: |
| 99 | * in0 Index of PAL service | 95 | * in0 Index of PAL service |
| 100 | * in2 - in3 Remaning PAL arguments | 96 | * in2 - in3 Remaining PAL arguments |
| 101 | */ | 97 | */ |
| 102 | GLOBAL_ENTRY(ia64_pal_call_stacked) | 98 | GLOBAL_ENTRY(ia64_pal_call_stacked) |
| 103 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) | 99 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) |
| @@ -131,18 +127,18 @@ END(ia64_pal_call_stacked) | |||
| 131 | * Make a physical mode PAL call using the static registers calling convention. | 127 | * Make a physical mode PAL call using the static registers calling convention. |
| 132 | * | 128 | * |
| 133 | * Inputs: | 129 | * Inputs: |
| 134 | * in0 Index of PAL service | 130 | * in0 Index of PAL service |
| 135 | * in2 - in3 Remaning PAL arguments | 131 | * in2 - in3 Remaining PAL arguments |
| 136 | * | 132 | * |
| 137 | * PSR_LP, PSR_TB, PSR_ID, PSR_DA are never set by the kernel. | 133 | * PSR_LP, PSR_TB, PSR_ID, PSR_DA are never set by the kernel. |
| 138 | * So we don't need to clear them. | 134 | * So we don't need to clear them. |
| 139 | */ | 135 | */ |
| 140 | #define PAL_PSR_BITS_TO_CLEAR \ | 136 | #define PAL_PSR_BITS_TO_CLEAR \ |
| 141 | (IA64_PSR_I | IA64_PSR_IT | IA64_PSR_DT | IA64_PSR_DB | IA64_PSR_RT | \ | 137 | (IA64_PSR_I | IA64_PSR_IT | IA64_PSR_DT | IA64_PSR_DB | IA64_PSR_RT |\ |
| 142 | IA64_PSR_DD | IA64_PSR_SS | IA64_PSR_RI | IA64_PSR_ED | \ | 138 | IA64_PSR_DD | IA64_PSR_SS | IA64_PSR_RI | IA64_PSR_ED | \ |
| 143 | IA64_PSR_DFL | IA64_PSR_DFH) | 139 | IA64_PSR_DFL | IA64_PSR_DFH) |
| 144 | 140 | ||
| 145 | #define PAL_PSR_BITS_TO_SET \ | 141 | #define PAL_PSR_BITS_TO_SET \ |
| 146 | (IA64_PSR_BN) | 142 | (IA64_PSR_BN) |
| 147 | 143 | ||
| 148 | 144 | ||
| @@ -178,7 +174,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_static) | |||
| 178 | ;; | 174 | ;; |
| 179 | andcm r16=loc3,r16 // removes bits to clear from psr | 175 | andcm r16=loc3,r16 // removes bits to clear from psr |
| 180 | br.call.sptk.many rp=ia64_switch_mode_phys | 176 | br.call.sptk.many rp=ia64_switch_mode_phys |
| 181 | .ret1: mov rp = r8 // install return address (physical) | 177 | mov rp = r8 // install return address (physical) |
| 182 | mov loc5 = r19 | 178 | mov loc5 = r19 |
| 183 | mov loc6 = r20 | 179 | mov loc6 = r20 |
| 184 | br.cond.sptk.many b7 | 180 | br.cond.sptk.many b7 |
| @@ -188,7 +184,6 @@ GLOBAL_ENTRY(ia64_pal_call_phys_static) | |||
| 188 | mov r19=loc5 | 184 | mov r19=loc5 |
| 189 | mov r20=loc6 | 185 | mov r20=loc6 |
| 190 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode | 186 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode |
| 191 | .ret2: | ||
| 192 | mov psr.l = loc3 // restore init PSR | 187 | mov psr.l = loc3 // restore init PSR |
| 193 | 188 | ||
| 194 | mov ar.pfs = loc1 | 189 | mov ar.pfs = loc1 |
| @@ -203,8 +198,8 @@ END(ia64_pal_call_phys_static) | |||
| 203 | * Make a PAL call using the stacked registers in physical mode. | 198 | * Make a PAL call using the stacked registers in physical mode. |
| 204 | * | 199 | * |
| 205 | * Inputs: | 200 | * Inputs: |
| 206 | * in0 Index of PAL service | 201 | * in0 Index of PAL service |
| 207 | * in2 - in3 Remaning PAL arguments | 202 | * in2 - in3 Remaining PAL arguments |
| 208 | */ | 203 | */ |
| 209 | GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | 204 | GLOBAL_ENTRY(ia64_pal_call_phys_stacked) |
| 210 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) | 205 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) |
| @@ -212,7 +207,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 212 | movl loc2 = pal_entry_point | 207 | movl loc2 = pal_entry_point |
| 213 | 1: { | 208 | 1: { |
| 214 | mov r28 = in0 // copy procedure index | 209 | mov r28 = in0 // copy procedure index |
| 215 | mov loc0 = rp // save rp | 210 | mov loc0 = rp // save rp |
| 216 | } | 211 | } |
| 217 | .body | 212 | .body |
| 218 | ;; | 213 | ;; |
| @@ -245,7 +240,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 245 | mov r16=loc3 // r16= original psr | 240 | mov r16=loc3 // r16= original psr |
| 246 | mov r19=loc5 | 241 | mov r19=loc5 |
| 247 | mov r20=loc6 | 242 | mov r20=loc6 |
| 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode | 243 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode |
| 249 | 244 | ||
| 250 | mov psr.l = loc3 // restore init PSR | 245 | mov psr.l = loc3 // restore init PSR |
| 251 | mov ar.pfs = loc1 | 246 | mov ar.pfs = loc1 |
| @@ -257,10 +252,11 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 257 | END(ia64_pal_call_phys_stacked) | 252 | END(ia64_pal_call_phys_stacked) |
| 258 | 253 | ||
| 259 | /* | 254 | /* |
| 260 | * Save scratch fp scratch regs which aren't saved in pt_regs already (fp10-fp15). | 255 | * Save scratch fp scratch regs which aren't saved in pt_regs already |
| 256 | * (fp10-fp15). | ||
| 261 | * | 257 | * |
| 262 | * NOTE: We need to do this since firmware (SAL and PAL) may use any of the scratch | 258 | * NOTE: We need to do this since firmware (SAL and PAL) may use any of the |
| 263 | * regs fp-low partition. | 259 | * scratch regs fp-low partition. |
| 264 | * | 260 | * |
| 265 | * Inputs: | 261 | * Inputs: |
| 266 | * in0 Address of stack storage for fp regs | 262 | * in0 Address of stack storage for fp regs |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 281004ff7b00..3aaede0d6981 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
| @@ -5558,12 +5558,13 @@ report_spurious2: | |||
| 5558 | } | 5558 | } |
| 5559 | 5559 | ||
| 5560 | static irqreturn_t | 5560 | static irqreturn_t |
| 5561 | pfm_interrupt_handler(int irq, void *arg, struct pt_regs *regs) | 5561 | pfm_interrupt_handler(int irq, void *arg) |
| 5562 | { | 5562 | { |
| 5563 | unsigned long start_cycles, total_cycles; | 5563 | unsigned long start_cycles, total_cycles; |
| 5564 | unsigned long min, max; | 5564 | unsigned long min, max; |
| 5565 | int this_cpu; | 5565 | int this_cpu; |
| 5566 | int ret; | 5566 | int ret; |
| 5567 | struct pt_regs *regs = get_irq_regs(); | ||
| 5567 | 5568 | ||
| 5568 | this_cpu = get_cpu(); | 5569 | this_cpu = get_cpu(); |
| 5569 | if (likely(!pfm_alt_intr_handler)) { | 5570 | if (likely(!pfm_alt_intr_handler)) { |
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c index 642fdc7b969d..20bad78b5073 100644 --- a/arch/ia64/kernel/sal.c +++ b/arch/ia64/kernel/sal.c | |||
| @@ -223,12 +223,13 @@ static void __init sal_desc_ap_wakeup(void *p) { } | |||
| 223 | */ | 223 | */ |
| 224 | static int sal_cache_flush_drops_interrupts; | 224 | static int sal_cache_flush_drops_interrupts; |
| 225 | 225 | ||
| 226 | static void __init | 226 | void __init |
| 227 | check_sal_cache_flush (void) | 227 | check_sal_cache_flush (void) |
| 228 | { | 228 | { |
| 229 | unsigned long flags; | 229 | unsigned long flags; |
| 230 | int cpu; | 230 | int cpu; |
| 231 | u64 vector; | 231 | u64 vector, cache_type = 3; |
| 232 | struct ia64_sal_retval isrv; | ||
| 232 | 233 | ||
| 233 | cpu = get_cpu(); | 234 | cpu = get_cpu(); |
| 234 | local_irq_save(flags); | 235 | local_irq_save(flags); |
| @@ -243,7 +244,10 @@ check_sal_cache_flush (void) | |||
| 243 | while (!ia64_get_irr(IA64_TIMER_VECTOR)) | 244 | while (!ia64_get_irr(IA64_TIMER_VECTOR)) |
| 244 | cpu_relax(); | 245 | cpu_relax(); |
| 245 | 246 | ||
| 246 | ia64_sal_cache_flush(3); | 247 | SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0); |
| 248 | |||
| 249 | if (isrv.status) | ||
| 250 | printk(KERN_ERR "SAL_CAL_FLUSH failed with %ld\n", isrv.status); | ||
| 247 | 251 | ||
| 248 | if (ia64_get_irr(IA64_TIMER_VECTOR)) { | 252 | if (ia64_get_irr(IA64_TIMER_VECTOR)) { |
| 249 | vector = ia64_get_ivr(); | 253 | vector = ia64_get_ivr(); |
| @@ -331,7 +335,6 @@ ia64_sal_init (struct ia64_sal_systab *systab) | |||
| 331 | p += SAL_DESC_SIZE(*p); | 335 | p += SAL_DESC_SIZE(*p); |
| 332 | } | 336 | } |
| 333 | 337 | ||
| 334 | check_sal_cache_flush(); | ||
| 335 | } | 338 | } |
| 336 | 339 | ||
| 337 | int | 340 | int |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index c4caa8003492..d10404a41756 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
| @@ -457,6 +457,8 @@ setup_arch (char **cmdline_p) | |||
| 457 | cpu_init(); /* initialize the bootstrap CPU */ | 457 | cpu_init(); /* initialize the bootstrap CPU */ |
| 458 | mmu_context_init(); /* initialize context_id bitmap */ | 458 | mmu_context_init(); /* initialize context_id bitmap */ |
| 459 | 459 | ||
| 460 | check_sal_cache_flush(); | ||
| 461 | |||
| 460 | #ifdef CONFIG_ACPI | 462 | #ifdef CONFIG_ACPI |
| 461 | acpi_boot_init(); | 463 | acpi_boot_init(); |
| 462 | #endif | 464 | #endif |
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index 657ac99a451c..6ab95ceaf9d4 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
| @@ -108,7 +108,7 @@ cpu_die(void) | |||
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | irqreturn_t | 110 | irqreturn_t |
| 111 | handle_IPI (int irq, void *dev_id, struct pt_regs *regs) | 111 | handle_IPI (int irq, void *dev_id) |
| 112 | { | 112 | { |
| 113 | int this_cpu = get_cpu(); | 113 | int this_cpu = get_cpu(); |
| 114 | unsigned long *pending_ipis = &__ia64_per_cpu_var(ipi_operation); | 114 | unsigned long *pending_ipis = &__ia64_per_cpu_var(ipi_operation); |
| @@ -328,10 +328,14 @@ int | |||
| 328 | smp_call_function (void (*func) (void *info), void *info, int nonatomic, int wait) | 328 | smp_call_function (void (*func) (void *info), void *info, int nonatomic, int wait) |
| 329 | { | 329 | { |
| 330 | struct call_data_struct data; | 330 | struct call_data_struct data; |
| 331 | int cpus = num_online_cpus()-1; | 331 | int cpus; |
| 332 | 332 | ||
| 333 | if (!cpus) | 333 | spin_lock(&call_lock); |
| 334 | cpus = num_online_cpus() - 1; | ||
| 335 | if (!cpus) { | ||
| 336 | spin_unlock(&call_lock); | ||
| 334 | return 0; | 337 | return 0; |
| 338 | } | ||
| 335 | 339 | ||
| 336 | /* Can deadlock when called with interrupts disabled */ | 340 | /* Can deadlock when called with interrupts disabled */ |
| 337 | WARN_ON(irqs_disabled()); | 341 | WARN_ON(irqs_disabled()); |
| @@ -343,8 +347,6 @@ smp_call_function (void (*func) (void *info), void *info, int nonatomic, int wai | |||
| 343 | if (wait) | 347 | if (wait) |
| 344 | atomic_set(&data.finished, 0); | 348 | atomic_set(&data.finished, 0); |
| 345 | 349 | ||
| 346 | spin_lock(&call_lock); | ||
| 347 | |||
| 348 | call_data = &data; | 350 | call_data = &data; |
| 349 | mb(); /* ensure store to call_data precedes setting of IPI_CALL_FUNC */ | 351 | mb(); /* ensure store to call_data precedes setting of IPI_CALL_FUNC */ |
| 350 | send_IPI_allbutself(IPI_CALL_FUNC); | 352 | send_IPI_allbutself(IPI_CALL_FUNC); |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 41169a9bc301..39e0cd3a0884 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
| @@ -84,6 +84,12 @@ timer_interrupt (int irq, void *dev_id) | |||
| 84 | 84 | ||
| 85 | if (time_after(new_itm, ia64_get_itc())) | 85 | if (time_after(new_itm, ia64_get_itc())) |
| 86 | break; | 86 | break; |
| 87 | |||
| 88 | /* | ||
| 89 | * Allow IPIs to interrupt the timer loop. | ||
| 90 | */ | ||
| 91 | local_irq_enable(); | ||
| 92 | local_irq_disable(); | ||
| 87 | } | 93 | } |
| 88 | 94 | ||
| 89 | do { | 95 | do { |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index b3b2e389d6b2..d6083a0936f4 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -128,13 +128,7 @@ SECTIONS | |||
| 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) | 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) |
| 129 | { | 129 | { |
| 130 | __initcall_start = .; | 130 | __initcall_start = .; |
| 131 | *(.initcall1.init) | 131 | INITCALLS |
| 132 | *(.initcall2.init) | ||
| 133 | *(.initcall3.init) | ||
| 134 | *(.initcall4.init) | ||
| 135 | *(.initcall5.init) | ||
| 136 | *(.initcall6.init) | ||
| 137 | *(.initcall7.init) | ||
| 138 | __initcall_end = .; | 132 | __initcall_end = .; |
| 139 | } | 133 | } |
| 140 | 134 | ||
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index daf977ff2920..82deaa3a7c48 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
| @@ -233,6 +233,7 @@ paging_init (void) | |||
| 233 | efi_memmap_walk(count_pages, &num_physpages); | 233 | efi_memmap_walk(count_pages, &num_physpages); |
| 234 | 234 | ||
| 235 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; | 235 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; |
| 236 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | ||
| 236 | max_zone_pfns[ZONE_DMA] = max_dma; | 237 | max_zone_pfns[ZONE_DMA] = max_dma; |
| 237 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | 238 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; |
| 238 | 239 | ||
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index d497b6b0f5b2..96722cb1b49d 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
| @@ -709,6 +709,7 @@ void __init paging_init(void) | |||
| 709 | max_pfn = mem_data[node].max_pfn; | 709 | max_pfn = mem_data[node].max_pfn; |
| 710 | } | 710 | } |
| 711 | 711 | ||
| 712 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | ||
| 712 | max_zone_pfns[ZONE_DMA] = max_dma; | 713 | max_zone_pfns[ZONE_DMA] = max_dma; |
| 713 | max_zone_pfns[ZONE_NORMAL] = max_pfn; | 714 | max_zone_pfns[ZONE_NORMAL] = max_pfn; |
| 714 | free_area_init_nodes(max_zone_pfns); | 715 | free_area_init_nodes(max_zone_pfns); |
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c index eee5c1cfbe32..f3a9585e98a8 100644 --- a/arch/ia64/mm/hugetlbpage.c +++ b/arch/ia64/mm/hugetlbpage.c | |||
| @@ -70,8 +70,10 @@ huge_pte_offset (struct mm_struct *mm, unsigned long addr) | |||
| 70 | * Don't actually need to do any preparation, but need to make sure | 70 | * Don't actually need to do any preparation, but need to make sure |
| 71 | * the address is in the right region. | 71 | * the address is in the right region. |
| 72 | */ | 72 | */ |
| 73 | int prepare_hugepage_range(unsigned long addr, unsigned long len) | 73 | int prepare_hugepage_range(unsigned long addr, unsigned long len, pgoff_t pgoff) |
| 74 | { | 74 | { |
| 75 | if (pgoff & (~HPAGE_MASK >> PAGE_SHIFT)) | ||
| 76 | return -EINVAL; | ||
| 75 | if (len & ~HPAGE_MASK) | 77 | if (len & ~HPAGE_MASK) |
| 76 | return -EINVAL; | 78 | return -EINVAL; |
| 77 | if (addr & ~HPAGE_MASK) | 79 | if (addr & ~HPAGE_MASK) |
diff --git a/arch/ia64/pci/Makefile b/arch/ia64/pci/Makefile index e66889e6922a..fb14dc520d2d 100644 --- a/arch/ia64/pci/Makefile +++ b/arch/ia64/pci/Makefile | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # | 1 | # |
| 2 | # Makefile for the ia64-specific parts of the pci bus | 2 | # Makefile for the ia64-specific parts of the pci bus |
| 3 | # | 3 | # |
| 4 | obj-y := pci.o | 4 | obj-y := pci.o fixup.o |
diff --git a/arch/ia64/pci/fixup.c b/arch/ia64/pci/fixup.c new file mode 100644 index 000000000000..245dc1fedc24 --- /dev/null +++ b/arch/ia64/pci/fixup.c | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | /* | ||
| 2 | * Exceptions for specific devices. Usually work-arounds for fatal design flaws. | ||
| 3 | * Derived from fixup.c of i386 tree. | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <linux/pci.h> | ||
| 7 | #include <linux/init.h> | ||
| 8 | |||
| 9 | #include <asm/machvec.h> | ||
| 10 | |||
| 11 | /* | ||
| 12 | * Fixup to mark boot BIOS video selected by BIOS before it changes | ||
| 13 | * | ||
| 14 | * From information provided by "Jon Smirl" <jonsmirl@gmail.com> | ||
| 15 | * | ||
| 16 | * The standard boot ROM sequence for an x86 machine uses the BIOS | ||
| 17 | * to select an initial video card for boot display. This boot video | ||
| 18 | * card will have it's BIOS copied to C0000 in system RAM. | ||
| 19 | * IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
| 20 | * card with this copy. On laptops this copy has to be used since | ||
| 21 | * the main ROM may be compressed or combined with another image. | ||
| 22 | * See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
| 23 | * is marked here since the boot video device will be the only enabled | ||
| 24 | * video device at this point. | ||
| 25 | */ | ||
| 26 | |||
| 27 | static void __devinit pci_fixup_video(struct pci_dev *pdev) | ||
| 28 | { | ||
| 29 | struct pci_dev *bridge; | ||
| 30 | struct pci_bus *bus; | ||
| 31 | u16 config; | ||
| 32 | |||
| 33 | if ((strcmp(platform_name, "dig") != 0) | ||
| 34 | && (strcmp(platform_name, "hpzx1") != 0)) | ||
| 35 | return; | ||
| 36 | /* Maybe, this machine supports legacy memory map. */ | ||
| 37 | |||
| 38 | if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
| 39 | return; | ||
| 40 | |||
| 41 | /* Is VGA routed to us? */ | ||
| 42 | bus = pdev->bus; | ||
| 43 | while (bus) { | ||
| 44 | bridge = bus->self; | ||
| 45 | |||
| 46 | /* | ||
| 47 | * From information provided by | ||
| 48 | * "David Miller" <davem@davemloft.net> | ||
| 49 | * The bridge control register is valid for PCI header | ||
| 50 | * type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
| 51 | * PCI header type NORMAL. | ||
| 52 | */ | ||
| 53 | if (bridge | ||
| 54 | &&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
| 55 | ||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
| 56 | pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
| 57 | &config); | ||
| 58 | if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
| 59 | return; | ||
| 60 | } | ||
| 61 | bus = bus->parent; | ||
| 62 | } | ||
| 63 | pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
| 64 | if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
| 65 | pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
| 66 | printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
| 67 | } | ||
| 68 | } | ||
| 69 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); | ||
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c index 7f73ad4408aa..ff1c55601178 100644 --- a/arch/ia64/sn/kernel/bte.c +++ b/arch/ia64/sn/kernel/bte.c | |||
| @@ -381,14 +381,13 @@ bte_result_t bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) | |||
| 381 | * bcopy to the destination. | 381 | * bcopy to the destination. |
| 382 | */ | 382 | */ |
| 383 | 383 | ||
| 384 | /* Add the leader from source */ | ||
| 385 | headBteLen = len + (src & L1_CACHE_MASK); | ||
| 386 | /* Add the trailing bytes from footer. */ | ||
| 387 | headBteLen += L1_CACHE_BYTES - (headBteLen & L1_CACHE_MASK); | ||
| 388 | headBteSource = src & ~L1_CACHE_MASK; | ||
| 389 | headBcopySrcOffset = src & L1_CACHE_MASK; | 384 | headBcopySrcOffset = src & L1_CACHE_MASK; |
| 390 | headBcopyDest = dest; | 385 | headBcopyDest = dest; |
| 391 | headBcopyLen = len; | 386 | headBcopyLen = len; |
| 387 | |||
| 388 | headBteSource = src - headBcopySrcOffset; | ||
| 389 | /* Add the leading and trailing bytes from source */ | ||
| 390 | headBteLen = L1_CACHE_ALIGN(len + headBcopySrcOffset); | ||
| 392 | } | 391 | } |
| 393 | 392 | ||
| 394 | if (headBcopyLen > 0) { | 393 | if (headBcopyLen > 0) { |
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c index 7bb6ad188ba3..0b49459a878a 100644 --- a/arch/ia64/sn/kernel/irq.c +++ b/arch/ia64/sn/kernel/irq.c | |||
| @@ -201,7 +201,7 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask) | |||
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | struct hw_interrupt_type irq_type_sn = { | 203 | struct hw_interrupt_type irq_type_sn = { |
| 204 | .typename = "SN hub", | 204 | .name = "SN hub", |
| 205 | .startup = sn_startup_irq, | 205 | .startup = sn_startup_irq, |
| 206 | .shutdown = sn_shutdown_irq, | 206 | .shutdown = sn_shutdown_irq, |
| 207 | .enable = sn_enable_irq, | 207 | .enable = sn_enable_irq, |
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index 5f2dcba7fa8d..7a2d824c5ce3 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
| @@ -65,7 +65,6 @@ extern void sn_timer_init(void); | |||
| 65 | extern unsigned long last_time_offset; | 65 | extern unsigned long last_time_offset; |
| 66 | extern void (*ia64_mark_idle) (int); | 66 | extern void (*ia64_mark_idle) (int); |
| 67 | extern void snidle(int); | 67 | extern void snidle(int); |
| 68 | extern unsigned char acpi_kbd_controller_present; | ||
| 69 | extern unsigned long long (*ia64_printk_clock)(void); | 68 | extern unsigned long long (*ia64_printk_clock)(void); |
| 70 | 69 | ||
| 71 | unsigned long sn_rtc_cycles_per_second; | 70 | unsigned long sn_rtc_cycles_per_second; |
| @@ -452,17 +451,6 @@ void __init sn_setup(char **cmdline_p) | |||
| 452 | 451 | ||
| 453 | ia64_printk_clock = ia64_sn2_printk_clock; | 452 | ia64_printk_clock = ia64_sn2_printk_clock; |
| 454 | 453 | ||
| 455 | /* | ||
| 456 | * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard | ||
| 457 | * support here so we don't have to listen to failed keyboard probe | ||
| 458 | * messages. | ||
| 459 | */ | ||
| 460 | if (is_shub1() && version <= 0x0209 && acpi_kbd_controller_present) { | ||
| 461 | printk(KERN_INFO "Disabling legacy keyboard support as prom " | ||
| 462 | "is too old and doesn't provide FADT\n"); | ||
| 463 | acpi_kbd_controller_present = 0; | ||
| 464 | } | ||
| 465 | |||
| 466 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); | 454 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); |
| 467 | 455 | ||
| 468 | /* | 456 | /* |
diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c index 3f35ab3d2dc2..0e7778be33cc 100644 --- a/arch/m32r/kernel/setup.c +++ b/arch/m32r/kernel/setup.c | |||
| @@ -369,10 +369,10 @@ static void c_stop(struct seq_file *m, void *v) | |||
| 369 | } | 369 | } |
| 370 | 370 | ||
| 371 | struct seq_operations cpuinfo_op = { | 371 | struct seq_operations cpuinfo_op = { |
| 372 | start: c_start, | 372 | .start = c_start, |
| 373 | next: c_next, | 373 | .next = c_next, |
| 374 | stop: c_stop, | 374 | .stop = c_stop, |
| 375 | show: show_cpuinfo, | 375 | .show = show_cpuinfo, |
| 376 | }; | 376 | }; |
| 377 | #endif /* CONFIG_PROC_FS */ | 377 | #endif /* CONFIG_PROC_FS */ |
| 378 | 378 | ||
diff --git a/arch/m32r/kernel/setup_mappi.c b/arch/m32r/kernel/setup_mappi.c index 67dbbdc9d111..6b2d77da0683 100644 --- a/arch/m32r/kernel/setup_mappi.c +++ b/arch/m32r/kernel/setup_mappi.c | |||
| @@ -86,7 +86,7 @@ void __init init_IRQ(void) | |||
| 86 | /* INT0 : LAN controller (RTL8019AS) */ | 86 | /* INT0 : LAN controller (RTL8019AS) */ |
| 87 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; | 87 | irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; |
| 88 | irq_desc[M32R_IRQ_INT0].chip = &mappi_irq_type; | 88 | irq_desc[M32R_IRQ_INT0].chip = &mappi_irq_type; |
| 89 | irq_desc[M32R_IRQ_INT0].action = 0; | 89 | irq_desc[M32R_IRQ_INT0].action = NULL; |
| 90 | irq_desc[M32R_IRQ_INT0].depth = 1; | 90 | irq_desc[M32R_IRQ_INT0].depth = 1; |
| 91 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; | 91 | icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; |
| 92 | disable_mappi_irq(M32R_IRQ_INT0); | 92 | disable_mappi_irq(M32R_IRQ_INT0); |
| @@ -95,7 +95,7 @@ void __init init_IRQ(void) | |||
| 95 | /* MFT2 : system timer */ | 95 | /* MFT2 : system timer */ |
| 96 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; | 96 | irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED; |
| 97 | irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type; | 97 | irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type; |
| 98 | irq_desc[M32R_IRQ_MFT2].action = 0; | 98 | irq_desc[M32R_IRQ_MFT2].action = NULL; |
| 99 | irq_desc[M32R_IRQ_MFT2].depth = 1; | 99 | irq_desc[M32R_IRQ_MFT2].depth = 1; |
| 100 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; | 100 | icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; |
| 101 | disable_mappi_irq(M32R_IRQ_MFT2); | 101 | disable_mappi_irq(M32R_IRQ_MFT2); |
| @@ -104,7 +104,7 @@ void __init init_IRQ(void) | |||
| 104 | /* SIO0_R : uart receive data */ | 104 | /* SIO0_R : uart receive data */ |
| 105 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; | 105 | irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED; |
| 106 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type; | 106 | irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type; |
| 107 | irq_desc[M32R_IRQ_SIO0_R].action = 0; | 107 | irq_desc[M32R_IRQ_SIO0_R].action = NULL; |
| 108 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; | 108 | irq_desc[M32R_IRQ_SIO0_R].depth = 1; |
| 109 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; | 109 | icu_data[M32R_IRQ_SIO0_R].icucr = 0; |
| 110 | disable_mappi_irq(M32R_IRQ_SIO0_R); | 110 | disable_mappi_irq(M32R_IRQ_SIO0_R); |
| @@ -112,7 +112,7 @@ void __init init_IRQ(void) | |||
| 112 | /* SIO0_S : uart send data */ | 112 | /* SIO0_S : uart send data */ |
| 113 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; | 113 | irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED; |
| 114 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type; | 114 | irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type; |
| 115 | irq_desc[M32R_IRQ_SIO0_S].action = 0; | 115 | irq_desc[M32R_IRQ_SIO0_S].action = NULL; |
| 116 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; | 116 | irq_desc[M32R_IRQ_SIO0_S].depth = 1; |
| 117 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; | 117 | icu_data[M32R_IRQ_SIO0_S].icucr = 0; |
| 118 | disable_mappi_irq(M32R_IRQ_SIO0_S); | 118 | disable_mappi_irq(M32R_IRQ_SIO0_S); |
| @@ -120,7 +120,7 @@ void __init init_IRQ(void) | |||
| 120 | /* SIO1_R : uart receive data */ | 120 | /* SIO1_R : uart receive data */ |
| 121 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; | 121 | irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED; |
| 122 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type; | 122 | irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type; |
| 123 | irq_desc[M32R_IRQ_SIO1_R].action = 0; | 123 | irq_desc[M32R_IRQ_SIO1_R].action = NULL; |
| 124 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; | 124 | irq_desc[M32R_IRQ_SIO1_R].depth = 1; |
| 125 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; | 125 | icu_data[M32R_IRQ_SIO1_R].icucr = 0; |
| 126 | disable_mappi_irq(M32R_IRQ_SIO1_R); | 126 | disable_mappi_irq(M32R_IRQ_SIO1_R); |
| @@ -128,7 +128,7 @@ void __init init_IRQ(void) | |||
| 128 | /* SIO1_S : uart send data */ | 128 | /* SIO1_S : uart send data */ |
| 129 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; | 129 | irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED; |
| 130 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type; | 130 | irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type; |
| 131 | irq_desc[M32R_IRQ_SIO1_S].action = 0; | 131 | irq_desc[M32R_IRQ_SIO1_S].action = NULL; |
| 132 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; | 132 | irq_desc[M32R_IRQ_SIO1_S].depth = 1; |
| 133 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; | 133 | icu_data[M32R_IRQ_SIO1_S].icucr = 0; |
| 134 | disable_mappi_irq(M32R_IRQ_SIO1_S); | 134 | disable_mappi_irq(M32R_IRQ_SIO1_S); |
| @@ -138,7 +138,7 @@ void __init init_IRQ(void) | |||
| 138 | /* INT1 : pccard0 interrupt */ | 138 | /* INT1 : pccard0 interrupt */ |
| 139 | irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED; | 139 | irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED; |
| 140 | irq_desc[M32R_IRQ_INT1].chip = &mappi_irq_type; | 140 | irq_desc[M32R_IRQ_INT1].chip = &mappi_irq_type; |
| 141 | irq_desc[M32R_IRQ_INT1].action = 0; | 141 | irq_desc[M32R_IRQ_INT1].action = NULL; |
| 142 | irq_desc[M32R_IRQ_INT1].depth = 1; | 142 | irq_desc[M32R_IRQ_INT1].depth = 1; |
| 143 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; | 143 | icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; |
| 144 | disable_mappi_irq(M32R_IRQ_INT1); | 144 | disable_mappi_irq(M32R_IRQ_INT1); |
| @@ -146,7 +146,7 @@ void __init init_IRQ(void) | |||
| 146 | /* INT2 : pccard1 interrupt */ | 146 | /* INT2 : pccard1 interrupt */ |
| 147 | irq_desc[M32R_IRQ_INT2].status = IRQ_DISABLED; | 147 | irq_desc[M32R_IRQ_INT2].status = IRQ_DISABLED; |
| 148 | irq_desc[M32R_IRQ_INT2].chip = &mappi_irq_type; | 148 | irq_desc[M32R_IRQ_INT2].chip = &mappi_irq_type; |
| 149 | irq_desc[M32R_IRQ_INT2].action = 0; | 149 | irq_desc[M32R_IRQ_INT2].action = NULL; |
| 150 | irq_desc[M32R_IRQ_INT2].depth = 1; | 150 | irq_desc[M32R_IRQ_INT2].depth = 1; |
| 151 | icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; | 151 | icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; |
| 152 | disable_mappi_irq(M32R_IRQ_INT2); | 152 | disable_mappi_irq(M32R_IRQ_INT2); |
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index a9174efe80cb..b60cea4aebaa 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | int do_signal(struct pt_regs *, sigset_t *); | 33 | int do_signal(struct pt_regs *, sigset_t *); |
| 34 | 34 | ||
| 35 | asmlinkage int | 35 | asmlinkage int |
| 36 | sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, | 36 | sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, |
| 37 | unsigned long r2, unsigned long r3, unsigned long r4, | 37 | unsigned long r2, unsigned long r3, unsigned long r4, |
| 38 | unsigned long r5, unsigned long r6, struct pt_regs *regs) | 38 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
| 39 | { | 39 | { |
| @@ -78,8 +78,8 @@ sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | |||
| 78 | struct rt_sigframe | 78 | struct rt_sigframe |
| 79 | { | 79 | { |
| 80 | int sig; | 80 | int sig; |
| 81 | struct siginfo *pinfo; | 81 | struct siginfo __user *pinfo; |
| 82 | void *puc; | 82 | void __user *puc; |
| 83 | struct siginfo info; | 83 | struct siginfo info; |
| 84 | struct ucontext uc; | 84 | struct ucontext uc; |
| 85 | // struct _fpstate fpstate; | 85 | // struct _fpstate fpstate; |
diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index 722e21f556dc..360129174b2b 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c | |||
| @@ -231,7 +231,7 @@ void smp_flush_tlb_all(void) | |||
| 231 | local_irq_save(flags); | 231 | local_irq_save(flags); |
| 232 | __flush_tlb_all(); | 232 | __flush_tlb_all(); |
| 233 | local_irq_restore(flags); | 233 | local_irq_restore(flags); |
| 234 | smp_call_function(flush_tlb_all_ipi, 0, 1, 1); | 234 | smp_call_function(flush_tlb_all_ipi, NULL, 1, 1); |
| 235 | preempt_enable(); | 235 | preempt_enable(); |
| 236 | } | 236 | } |
| 237 | 237 | ||
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c index b567351f3c52..b4e7bcb43540 100644 --- a/arch/m32r/kernel/sys_m32r.c +++ b/arch/m32r/kernel/sys_m32r.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | /* | 31 | /* |
| 32 | * sys_tas() - test-and-set | 32 | * sys_tas() - test-and-set |
| 33 | */ | 33 | */ |
| 34 | asmlinkage int sys_tas(int *addr) | 34 | asmlinkage int sys_tas(int __user *addr) |
| 35 | { | 35 | { |
| 36 | int oldval; | 36 | int oldval; |
| 37 | 37 | ||
| @@ -90,7 +90,7 @@ sys_pipe(unsigned long r0, unsigned long r1, unsigned long r2, | |||
| 90 | 90 | ||
| 91 | error = do_pipe(fd); | 91 | error = do_pipe(fd); |
| 92 | if (!error) { | 92 | if (!error) { |
| 93 | if (copy_to_user((void *)r0, (void *)fd, 2*sizeof(int))) | 93 | if (copy_to_user((void __user *)r0, fd, 2*sizeof(int))) |
| 94 | error = -EFAULT; | 94 | error = -EFAULT; |
| 95 | } | 95 | } |
| 96 | return error; | 96 | return error; |
| @@ -201,7 +201,7 @@ asmlinkage int sys_ipc(uint call, int first, int second, | |||
| 201 | } | 201 | } |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | asmlinkage int sys_uname(struct old_utsname * name) | 204 | asmlinkage int sys_uname(struct old_utsname __user * name) |
| 205 | { | 205 | { |
| 206 | int err; | 206 | int err; |
| 207 | if (!name) | 207 | if (!name) |
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c index c1daf2c40c7c..97e0b1c0830e 100644 --- a/arch/m32r/kernel/traps.c +++ b/arch/m32r/kernel/traps.c | |||
| @@ -268,7 +268,7 @@ static __inline__ void do_trap(int trapnr, int signr, const char * str, | |||
| 268 | #define DO_ERROR(trapnr, signr, str, name) \ | 268 | #define DO_ERROR(trapnr, signr, str, name) \ |
| 269 | asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ | 269 | asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ |
| 270 | { \ | 270 | { \ |
| 271 | do_trap(trapnr, signr, 0, regs, error_code, NULL); \ | 271 | do_trap(trapnr, signr, NULL, regs, error_code, NULL); \ |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | #define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \ | 274 | #define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \ |
diff --git a/arch/m32r/kernel/vmlinux.lds.S b/arch/m32r/kernel/vmlinux.lds.S index 13c7bb698e37..358b9cee2c65 100644 --- a/arch/m32r/kernel/vmlinux.lds.S +++ b/arch/m32r/kernel/vmlinux.lds.S | |||
| @@ -83,13 +83,7 @@ SECTIONS | |||
| 83 | __setup_end = .; | 83 | __setup_end = .; |
| 84 | __initcall_start = .; | 84 | __initcall_start = .; |
| 85 | .initcall.init : { | 85 | .initcall.init : { |
| 86 | *(.initcall1.init) | 86 | INITCALLS |
| 87 | *(.initcall2.init) | ||
| 88 | *(.initcall3.init) | ||
| 89 | *(.initcall4.init) | ||
| 90 | *(.initcall5.init) | ||
| 91 | *(.initcall6.init) | ||
| 92 | *(.initcall7.init) | ||
| 93 | } | 87 | } |
| 94 | __initcall_end = .; | 88 | __initcall_end = .; |
| 95 | __con_initcall_start = .; | 89 | __con_initcall_start = .; |
diff --git a/arch/m68k/kernel/m68k_ksyms.c b/arch/m68k/kernel/m68k_ksyms.c index f9636e84e6a4..6fc69c74fe2e 100644 --- a/arch/m68k/kernel/m68k_ksyms.c +++ b/arch/m68k/kernel/m68k_ksyms.c | |||
| @@ -1,61 +1,10 @@ | |||
| 1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
| 2 | #include <linux/linkage.h> | ||
| 3 | #include <linux/sched.h> | ||
| 4 | #include <linux/mm.h> | ||
| 5 | #include <linux/user.h> | ||
| 6 | #include <linux/elfcore.h> | ||
| 7 | #include <linux/in6.h> | ||
| 8 | #include <linux/interrupt.h> | ||
| 9 | |||
| 10 | #include <asm/setup.h> | ||
| 11 | #include <asm/machdep.h> | ||
| 12 | #include <asm/pgalloc.h> | ||
| 13 | #include <asm/irq.h> | ||
| 14 | #include <asm/io.h> | ||
| 15 | #include <asm/semaphore.h> | 2 | #include <asm/semaphore.h> |
| 16 | #include <asm/checksum.h> | ||
| 17 | 3 | ||
| 18 | asmlinkage long long __ashldi3 (long long, int); | 4 | asmlinkage long long __ashldi3 (long long, int); |
| 19 | asmlinkage long long __ashrdi3 (long long, int); | 5 | asmlinkage long long __ashrdi3 (long long, int); |
| 20 | asmlinkage long long __lshrdi3 (long long, int); | 6 | asmlinkage long long __lshrdi3 (long long, int); |
| 21 | asmlinkage long long __muldi3 (long long, long long); | 7 | asmlinkage long long __muldi3 (long long, long long); |
| 22 | extern char m68k_debug_device[]; | ||
| 23 | |||
| 24 | /* platform dependent support */ | ||
| 25 | |||
| 26 | EXPORT_SYMBOL(m68k_machtype); | ||
| 27 | EXPORT_SYMBOL(m68k_cputype); | ||
| 28 | EXPORT_SYMBOL(m68k_is040or060); | ||
| 29 | EXPORT_SYMBOL(m68k_realnum_memory); | ||
| 30 | EXPORT_SYMBOL(m68k_memory); | ||
| 31 | #ifndef CONFIG_SUN3 | ||
| 32 | EXPORT_SYMBOL(cache_push); | ||
| 33 | EXPORT_SYMBOL(cache_clear); | ||
| 34 | #ifndef CONFIG_SINGLE_MEMORY_CHUNK | ||
| 35 | EXPORT_SYMBOL(mm_vtop); | ||
| 36 | EXPORT_SYMBOL(mm_ptov); | ||
| 37 | EXPORT_SYMBOL(mm_end_of_chunk); | ||
| 38 | #else | ||
| 39 | EXPORT_SYMBOL(m68k_memoffset); | ||
| 40 | #endif /* !CONFIG_SINGLE_MEMORY_CHUNK */ | ||
| 41 | EXPORT_SYMBOL(__ioremap); | ||
| 42 | EXPORT_SYMBOL(iounmap); | ||
| 43 | EXPORT_SYMBOL(kernel_set_cachemode); | ||
| 44 | #endif /* !CONFIG_SUN3 */ | ||
| 45 | EXPORT_SYMBOL(m68k_debug_device); | ||
| 46 | EXPORT_SYMBOL(mach_hwclk); | ||
| 47 | EXPORT_SYMBOL(mach_get_ss); | ||
| 48 | EXPORT_SYMBOL(mach_get_rtc_pll); | ||
| 49 | EXPORT_SYMBOL(mach_set_rtc_pll); | ||
| 50 | #ifdef CONFIG_INPUT_M68K_BEEP_MODULE | ||
| 51 | EXPORT_SYMBOL(mach_beep); | ||
| 52 | #endif | ||
| 53 | EXPORT_SYMBOL(dump_fpu); | ||
| 54 | EXPORT_SYMBOL(dump_thread); | ||
| 55 | EXPORT_SYMBOL(kernel_thread); | ||
| 56 | #ifdef CONFIG_VME | ||
| 57 | EXPORT_SYMBOL(vme_brdtype); | ||
| 58 | #endif | ||
| 59 | 8 | ||
| 60 | /* The following are special because they're not called | 9 | /* The following are special because they're not called |
| 61 | explicitly (the C compiler generates them). Fortunately, | 10 | explicitly (the C compiler generates them). Fortunately, |
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c index 45a46646c1b3..99fc1226f7f8 100644 --- a/arch/m68k/kernel/process.c +++ b/arch/m68k/kernel/process.c | |||
| @@ -187,6 +187,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) | |||
| 187 | set_fs (fs); | 187 | set_fs (fs); |
| 188 | return pid; | 188 | return pid; |
| 189 | } | 189 | } |
| 190 | EXPORT_SYMBOL(kernel_thread); | ||
| 190 | 191 | ||
| 191 | void flush_thread(void) | 192 | void flush_thread(void) |
| 192 | { | 193 | { |
| @@ -221,13 +222,13 @@ asmlinkage int m68k_clone(struct pt_regs *regs) | |||
| 221 | { | 222 | { |
| 222 | unsigned long clone_flags; | 223 | unsigned long clone_flags; |
| 223 | unsigned long newsp; | 224 | unsigned long newsp; |
| 224 | int *parent_tidptr, *child_tidptr; | 225 | int __user *parent_tidptr, *child_tidptr; |
| 225 | 226 | ||
| 226 | /* syscall2 puts clone_flags in d1 and usp in d2 */ | 227 | /* syscall2 puts clone_flags in d1 and usp in d2 */ |
| 227 | clone_flags = regs->d1; | 228 | clone_flags = regs->d1; |
| 228 | newsp = regs->d2; | 229 | newsp = regs->d2; |
| 229 | parent_tidptr = (int *)regs->d3; | 230 | parent_tidptr = (int __user *)regs->d3; |
| 230 | child_tidptr = (int *)regs->d4; | 231 | child_tidptr = (int __user *)regs->d4; |
| 231 | if (!newsp) | 232 | if (!newsp) |
| 232 | newsp = rdusp(); | 233 | newsp = rdusp(); |
| 233 | return do_fork(clone_flags, newsp, regs, 0, | 234 | return do_fork(clone_flags, newsp, regs, 0, |
| @@ -311,6 +312,7 @@ int dump_fpu (struct pt_regs *regs, struct user_m68kfp_struct *fpu) | |||
| 311 | : "memory"); | 312 | : "memory"); |
| 312 | return 1; | 313 | return 1; |
| 313 | } | 314 | } |
| 315 | EXPORT_SYMBOL(dump_fpu); | ||
| 314 | 316 | ||
| 315 | /* | 317 | /* |
| 316 | * fill in the user structure for a core dump.. | 318 | * fill in the user structure for a core dump.. |
| @@ -357,11 +359,12 @@ void dump_thread(struct pt_regs * regs, struct user * dump) | |||
| 357 | /* dump floating point stuff */ | 359 | /* dump floating point stuff */ |
| 358 | dump->u_fpvalid = dump_fpu (regs, &dump->m68kfp); | 360 | dump->u_fpvalid = dump_fpu (regs, &dump->m68kfp); |
| 359 | } | 361 | } |
| 362 | EXPORT_SYMBOL(dump_thread); | ||
| 360 | 363 | ||
| 361 | /* | 364 | /* |
| 362 | * sys_execve() executes a new program. | 365 | * sys_execve() executes a new program. |
| 363 | */ | 366 | */ |
| 364 | asmlinkage int sys_execve(char *name, char **argv, char **envp) | 367 | asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp) |
| 365 | { | 368 | { |
| 366 | int error; | 369 | int error; |
| 367 | char * filename; | 370 | char * filename; |
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c index 42d5b85f3350..9af3ee0e555d 100644 --- a/arch/m68k/kernel/setup.c +++ b/arch/m68k/kernel/setup.c | |||
| @@ -42,27 +42,37 @@ | |||
| 42 | 42 | ||
| 43 | unsigned long m68k_machtype; | 43 | unsigned long m68k_machtype; |
| 44 | unsigned long m68k_cputype; | 44 | unsigned long m68k_cputype; |
| 45 | EXPORT_SYMBOL(m68k_machtype); | ||
| 46 | EXPORT_SYMBOL(m68k_cputype); | ||
| 45 | unsigned long m68k_fputype; | 47 | unsigned long m68k_fputype; |
| 46 | unsigned long m68k_mmutype; | 48 | unsigned long m68k_mmutype; |
| 47 | #ifdef CONFIG_VME | 49 | #ifdef CONFIG_VME |
| 48 | unsigned long vme_brdtype; | 50 | unsigned long vme_brdtype; |
| 51 | EXPORT_SYMBOL(vme_brdtype); | ||
| 49 | #endif | 52 | #endif |
| 50 | 53 | ||
| 51 | int m68k_is040or060; | 54 | int m68k_is040or060; |
| 55 | EXPORT_SYMBOL(m68k_is040or060); | ||
| 52 | 56 | ||
| 53 | extern int end; | 57 | extern int end; |
| 54 | extern unsigned long availmem; | 58 | extern unsigned long availmem; |
| 55 | 59 | ||
| 56 | int m68k_num_memory; | 60 | int m68k_num_memory; |
| 57 | int m68k_realnum_memory; | 61 | int m68k_realnum_memory; |
| 62 | EXPORT_SYMBOL(m68k_realnum_memory); | ||
| 63 | #ifdef CONFIG_SINGLE_MEMORY_CHUNK | ||
| 58 | unsigned long m68k_memoffset; | 64 | unsigned long m68k_memoffset; |
| 65 | EXPORT_SYMBOL(m68k_memoffset); | ||
| 66 | #endif | ||
| 59 | struct mem_info m68k_memory[NUM_MEMINFO]; | 67 | struct mem_info m68k_memory[NUM_MEMINFO]; |
| 68 | EXPORT_SYMBOL(m68k_memory); | ||
| 60 | 69 | ||
| 61 | static struct mem_info m68k_ramdisk; | 70 | static struct mem_info m68k_ramdisk; |
| 62 | 71 | ||
| 63 | static char m68k_command_line[CL_SIZE]; | 72 | static char m68k_command_line[CL_SIZE]; |
| 64 | 73 | ||
| 65 | char m68k_debug_device[6] = ""; | 74 | char m68k_debug_device[6] = ""; |
| 75 | EXPORT_SYMBOL(m68k_debug_device); | ||
| 66 | 76 | ||
| 67 | void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL; | 77 | void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL; |
| 68 | /* machine dependent irq functions */ | 78 | /* machine dependent irq functions */ |
| @@ -72,10 +82,14 @@ int (*mach_get_hardware_list) (char *buffer); | |||
| 72 | /* machine dependent timer functions */ | 82 | /* machine dependent timer functions */ |
| 73 | unsigned long (*mach_gettimeoffset) (void); | 83 | unsigned long (*mach_gettimeoffset) (void); |
| 74 | int (*mach_hwclk) (int, struct rtc_time*); | 84 | int (*mach_hwclk) (int, struct rtc_time*); |
| 85 | EXPORT_SYMBOL(mach_hwclk); | ||
| 75 | int (*mach_set_clock_mmss) (unsigned long); | 86 | int (*mach_set_clock_mmss) (unsigned long); |
| 76 | unsigned int (*mach_get_ss)(void); | 87 | unsigned int (*mach_get_ss)(void); |
| 77 | int (*mach_get_rtc_pll)(struct rtc_pll_info *); | 88 | int (*mach_get_rtc_pll)(struct rtc_pll_info *); |
| 78 | int (*mach_set_rtc_pll)(struct rtc_pll_info *); | 89 | int (*mach_set_rtc_pll)(struct rtc_pll_info *); |
| 90 | EXPORT_SYMBOL(mach_get_ss); | ||
| 91 | EXPORT_SYMBOL(mach_get_rtc_pll); | ||
| 92 | EXPORT_SYMBOL(mach_set_rtc_pll); | ||
| 79 | void (*mach_reset)( void ); | 93 | void (*mach_reset)( void ); |
| 80 | void (*mach_halt)( void ); | 94 | void (*mach_halt)( void ); |
| 81 | void (*mach_power_off)( void ); | 95 | void (*mach_power_off)( void ); |
| @@ -89,6 +103,7 @@ void (*mach_l2_flush) (int); | |||
| 89 | #endif | 103 | #endif |
| 90 | #if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE) | 104 | #if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE) |
| 91 | void (*mach_beep)(unsigned int, unsigned int); | 105 | void (*mach_beep)(unsigned int, unsigned int); |
| 106 | EXPORT_SYMBOL(mach_beep); | ||
| 92 | #endif | 107 | #endif |
| 93 | #if defined(CONFIG_ISA) && defined(MULTI_ISA) | 108 | #if defined(CONFIG_ISA) && defined(MULTI_ISA) |
| 94 | int isa_type; | 109 | int isa_type; |
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c index 4569406a2e1f..759fa244e6cd 100644 --- a/arch/m68k/kernel/traps.c +++ b/arch/m68k/kernel/traps.c | |||
| @@ -326,13 +326,13 @@ static inline int do_040writeback1(unsigned short wbs, unsigned long wba, | |||
| 326 | 326 | ||
| 327 | switch (wbs & WBSIZ_040) { | 327 | switch (wbs & WBSIZ_040) { |
| 328 | case BA_SIZE_BYTE: | 328 | case BA_SIZE_BYTE: |
| 329 | res = put_user(wbd & 0xff, (char *)wba); | 329 | res = put_user(wbd & 0xff, (char __user *)wba); |
| 330 | break; | 330 | break; |
| 331 | case BA_SIZE_WORD: | 331 | case BA_SIZE_WORD: |
| 332 | res = put_user(wbd & 0xffff, (short *)wba); | 332 | res = put_user(wbd & 0xffff, (short __user *)wba); |
| 333 | break; | 333 | break; |
| 334 | case BA_SIZE_LONG: | 334 | case BA_SIZE_LONG: |
| 335 | res = put_user(wbd, (int *)wba); | 335 | res = put_user(wbd, (int __user *)wba); |
| 336 | break; | 336 | break; |
| 337 | } | 337 | } |
| 338 | 338 | ||
diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds index 69d1d3d30c78..d2794452b195 100644 --- a/arch/m68k/kernel/vmlinux-std.lds +++ b/arch/m68k/kernel/vmlinux-std.lds | |||
| @@ -54,13 +54,7 @@ SECTIONS | |||
| 54 | __setup_end = .; | 54 | __setup_end = .; |
| 55 | __initcall_start = .; | 55 | __initcall_start = .; |
| 56 | .initcall.init : { | 56 | .initcall.init : { |
| 57 | *(.initcall1.init) | 57 | INITCALLS |
| 58 | *(.initcall2.init) | ||
| 59 | *(.initcall3.init) | ||
| 60 | *(.initcall4.init) | ||
| 61 | *(.initcall5.init) | ||
| 62 | *(.initcall6.init) | ||
| 63 | *(.initcall7.init) | ||
| 64 | } | 58 | } |
| 65 | __initcall_end = .; | 59 | __initcall_end = .; |
| 66 | __con_initcall_start = .; | 60 | __con_initcall_start = .; |
diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds index 65cc39c24185..2550b4ae2732 100644 --- a/arch/m68k/kernel/vmlinux-sun3.lds +++ b/arch/m68k/kernel/vmlinux-sun3.lds | |||
| @@ -48,13 +48,7 @@ __init_begin = .; | |||
| 48 | __setup_end = .; | 48 | __setup_end = .; |
| 49 | __initcall_start = .; | 49 | __initcall_start = .; |
| 50 | .initcall.init : { | 50 | .initcall.init : { |
| 51 | *(.initcall1.init) | 51 | INITCALLS |
| 52 | *(.initcall2.init) | ||
| 53 | *(.initcall3.init) | ||
| 54 | *(.initcall4.init) | ||
| 55 | *(.initcall5.init) | ||
| 56 | *(.initcall6.init) | ||
| 57 | *(.initcall7.init) | ||
| 58 | } | 52 | } |
| 59 | __initcall_end = .; | 53 | __initcall_end = .; |
| 60 | __con_initcall_start = .; | 54 | __con_initcall_start = .; |
diff --git a/arch/m68k/mm/kmap.c b/arch/m68k/mm/kmap.c index f46f049d29ff..b54ef1726c55 100644 --- a/arch/m68k/mm/kmap.c +++ b/arch/m68k/mm/kmap.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * used by other architectures /Roman Zippel | 7 | * used by other architectures /Roman Zippel |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/module.h> | ||
| 10 | #include <linux/mm.h> | 11 | #include <linux/mm.h> |
| 11 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
| 12 | #include <linux/string.h> | 13 | #include <linux/string.h> |
| @@ -219,6 +220,7 @@ void __iomem *__ioremap(unsigned long physaddr, unsigned long size, int cachefla | |||
| 219 | 220 | ||
| 220 | return (void __iomem *)retaddr; | 221 | return (void __iomem *)retaddr; |
| 221 | } | 222 | } |
| 223 | EXPORT_SYMBOL(__ioremap); | ||
| 222 | 224 | ||
| 223 | /* | 225 | /* |
| 224 | * Unmap a ioremap()ed region again | 226 | * Unmap a ioremap()ed region again |
| @@ -234,6 +236,7 @@ void iounmap(void __iomem *addr) | |||
| 234 | free_io_area((__force void *)addr); | 236 | free_io_area((__force void *)addr); |
| 235 | #endif | 237 | #endif |
| 236 | } | 238 | } |
| 239 | EXPORT_SYMBOL(iounmap); | ||
| 237 | 240 | ||
| 238 | /* | 241 | /* |
| 239 | * __iounmap unmaps nearly everything, so be careful | 242 | * __iounmap unmaps nearly everything, so be careful |
| @@ -360,3 +363,4 @@ void kernel_set_cachemode(void *addr, unsigned long size, int cmode) | |||
| 360 | 363 | ||
| 361 | flush_tlb_all(); | 364 | flush_tlb_all(); |
| 362 | } | 365 | } |
| 366 | EXPORT_SYMBOL(kernel_set_cachemode); | ||
diff --git a/arch/m68k/mm/memory.c b/arch/m68k/mm/memory.c index a0c095e17222..0f88812822b1 100644 --- a/arch/m68k/mm/memory.c +++ b/arch/m68k/mm/memory.c | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | * Copyright (C) 1995 Hamish Macdonald | 4 | * Copyright (C) 1995 Hamish Macdonald |
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | #include <linux/module.h> | ||
| 7 | #include <linux/mm.h> | 8 | #include <linux/mm.h> |
| 8 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
| 9 | #include <linux/string.h> | 10 | #include <linux/string.h> |
| @@ -157,9 +158,8 @@ unsigned long mm_vtop(unsigned long vaddr) | |||
| 157 | 158 | ||
| 158 | return -1; | 159 | return -1; |
| 159 | } | 160 | } |
| 160 | #endif | 161 | EXPORT_SYMBOL(mm_vtop); |
| 161 | 162 | ||
| 162 | #ifndef CONFIG_SINGLE_MEMORY_CHUNK | ||
| 163 | unsigned long mm_ptov (unsigned long paddr) | 163 | unsigned long mm_ptov (unsigned long paddr) |
| 164 | { | 164 | { |
| 165 | int i = 0; | 165 | int i = 0; |
| @@ -185,6 +185,7 @@ unsigned long mm_ptov (unsigned long paddr) | |||
| 185 | #endif | 185 | #endif |
| 186 | return -1; | 186 | return -1; |
| 187 | } | 187 | } |
| 188 | EXPORT_SYMBOL(mm_ptov); | ||
| 188 | #endif | 189 | #endif |
| 189 | 190 | ||
| 190 | /* invalidate page in both caches */ | 191 | /* invalidate page in both caches */ |
| @@ -298,6 +299,7 @@ void cache_clear (unsigned long paddr, int len) | |||
| 298 | mach_l2_flush(0); | 299 | mach_l2_flush(0); |
| 299 | #endif | 300 | #endif |
| 300 | } | 301 | } |
| 302 | EXPORT_SYMBOL(cache_clear); /* probably can be unexported */ | ||
| 301 | 303 | ||
| 302 | 304 | ||
| 303 | /* | 305 | /* |
| @@ -350,6 +352,7 @@ void cache_push (unsigned long paddr, int len) | |||
| 350 | mach_l2_flush(1); | 352 | mach_l2_flush(1); |
| 351 | #endif | 353 | #endif |
| 352 | } | 354 | } |
| 355 | EXPORT_SYMBOL(cache_push); /* probably can be unexported */ | ||
| 353 | 356 | ||
| 354 | #ifndef CONFIG_SINGLE_MEMORY_CHUNK | 357 | #ifndef CONFIG_SINGLE_MEMORY_CHUNK |
| 355 | int mm_end_of_chunk (unsigned long addr, int len) | 358 | int mm_end_of_chunk (unsigned long addr, int len) |
| @@ -361,4 +364,5 @@ int mm_end_of_chunk (unsigned long addr, int len) | |||
| 361 | return 1; | 364 | return 1; |
| 362 | return 0; | 365 | return 0; |
| 363 | } | 366 | } |
| 367 | EXPORT_SYMBOL(mm_end_of_chunk); | ||
| 364 | #endif | 368 | #endif |
diff --git a/arch/m68k/mm/sun3kmap.c b/arch/m68k/mm/sun3kmap.c index 7f0d86f3fe73..1af24cb5bfe1 100644 --- a/arch/m68k/mm/sun3kmap.c +++ b/arch/m68k/mm/sun3kmap.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | * for more details. | 8 | * for more details. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <linux/module.h> | ||
| 11 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 12 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 13 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
| @@ -59,7 +60,7 @@ static inline void do_pmeg_mapin(unsigned long phys, unsigned long virt, | |||
| 59 | } | 60 | } |
| 60 | } | 61 | } |
| 61 | 62 | ||
| 62 | void *sun3_ioremap(unsigned long phys, unsigned long size, | 63 | void __iomem *sun3_ioremap(unsigned long phys, unsigned long size, |
| 63 | unsigned long type) | 64 | unsigned long type) |
| 64 | { | 65 | { |
| 65 | struct vm_struct *area; | 66 | struct vm_struct *area; |
| @@ -101,22 +102,24 @@ void *sun3_ioremap(unsigned long phys, unsigned long size, | |||
| 101 | virt += seg_pages * PAGE_SIZE; | 102 | virt += seg_pages * PAGE_SIZE; |
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | return (void *)ret; | 105 | return (void __iomem *)ret; |
| 105 | 106 | ||
| 106 | } | 107 | } |
| 107 | 108 | ||
| 108 | 109 | ||
| 109 | void *__ioremap(unsigned long phys, unsigned long size, int cache) | 110 | void __iomem *__ioremap(unsigned long phys, unsigned long size, int cache) |
| 110 | { | 111 | { |
| 111 | 112 | ||
| 112 | return sun3_ioremap(phys, size, SUN3_PAGE_TYPE_IO); | 113 | return sun3_ioremap(phys, size, SUN3_PAGE_TYPE_IO); |
| 113 | 114 | ||
| 114 | } | 115 | } |
| 116 | EXPORT_SYMBOL(__ioremap); | ||
| 115 | 117 | ||
| 116 | void iounmap(void *addr) | 118 | void iounmap(void __iomem *addr) |
| 117 | { | 119 | { |
| 118 | vfree((void *)(PAGE_MASK & (unsigned long)addr)); | 120 | vfree((void *)(PAGE_MASK & (unsigned long)addr)); |
| 119 | } | 121 | } |
| 122 | EXPORT_SYMBOL(iounmap); | ||
| 120 | 123 | ||
| 121 | /* sun3_map_test(addr, val) -- Reads a byte from addr, storing to val, | 124 | /* sun3_map_test(addr, val) -- Reads a byte from addr, storing to val, |
| 122 | * trapping the potential read fault. Returns 0 if the access faulted, | 125 | * trapping the potential read fault. Returns 0 if the access faulted, |
diff --git a/arch/m68k/sun3/Makefile b/arch/m68k/sun3/Makefile index 4d4f0695d985..be1a8470d636 100644 --- a/arch/m68k/sun3/Makefile +++ b/arch/m68k/sun3/Makefile | |||
| @@ -2,6 +2,6 @@ | |||
| 2 | # Makefile for Linux arch/m68k/sun3 source directory | 2 | # Makefile for Linux arch/m68k/sun3 source directory |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := sun3_ksyms.o sun3ints.o sun3dvma.o sbus.o idprom.o | 5 | obj-y := sun3ints.o sun3dvma.o sbus.o idprom.o |
| 6 | 6 | ||
| 7 | obj-$(CONFIG_SUN3) += config.o mmu_emu.o leds.o dvma.o intersil.o | 7 | obj-$(CONFIG_SUN3) += config.o mmu_emu.o leds.o dvma.o intersil.o |
diff --git a/arch/m68k/sun3/idprom.c b/arch/m68k/sun3/idprom.c index 02c1fee6fe74..dca6ab6a4ede 100644 --- a/arch/m68k/sun3/idprom.c +++ b/arch/m68k/sun3/idprom.c | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | * Sun3/3x models added by David Monro (davidm@psrg.cs.usyd.edu.au) | 6 | * Sun3/3x models added by David Monro (davidm@psrg.cs.usyd.edu.au) |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/module.h> | ||
| 9 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 10 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 11 | #include <linux/init.h> | 12 | #include <linux/init.h> |
| @@ -16,6 +17,8 @@ | |||
| 16 | #include <asm/machines.h> /* Fun with Sun released architectures. */ | 17 | #include <asm/machines.h> /* Fun with Sun released architectures. */ |
| 17 | 18 | ||
| 18 | struct idprom *idprom; | 19 | struct idprom *idprom; |
| 20 | EXPORT_SYMBOL(idprom); | ||
| 21 | |||
| 19 | static struct idprom idprom_buffer; | 22 | static struct idprom idprom_buffer; |
| 20 | 23 | ||
| 21 | /* Here is the master table of Sun machines which use some implementation | 24 | /* Here is the master table of Sun machines which use some implementation |
diff --git a/arch/m68k/sun3/sun3_ksyms.c b/arch/m68k/sun3/sun3_ksyms.c deleted file mode 100644 index 43e5a9af8abd..000000000000 --- a/arch/m68k/sun3/sun3_ksyms.c +++ /dev/null | |||
| @@ -1,13 +0,0 @@ | |||
| 1 | #include <linux/module.h> | ||
| 2 | #include <linux/types.h> | ||
| 3 | #include <asm/dvma.h> | ||
| 4 | #include <asm/idprom.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * Add things here when you find the need for it. | ||
| 8 | */ | ||
| 9 | EXPORT_SYMBOL(dvma_map_align); | ||
| 10 | EXPORT_SYMBOL(dvma_unmap); | ||
| 11 | EXPORT_SYMBOL(dvma_malloc_align); | ||
| 12 | EXPORT_SYMBOL(dvma_free); | ||
| 13 | EXPORT_SYMBOL(idprom); | ||
diff --git a/arch/m68k/sun3/sun3dvma.c b/arch/m68k/sun3/sun3dvma.c index a2bc2da7f8f0..8709677fa025 100644 --- a/arch/m68k/sun3/sun3dvma.c +++ b/arch/m68k/sun3/sun3dvma.c | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | * Contains common routines for sun3/sun3x DVMA management. | 6 | * Contains common routines for sun3/sun3x DVMA management. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/module.h> | ||
| 9 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 10 | #include <linux/mm.h> | 11 | #include <linux/mm.h> |
| 11 | #include <linux/list.h> | 12 | #include <linux/list.h> |
| @@ -312,6 +313,7 @@ inline unsigned long dvma_map_align(unsigned long kaddr, int len, int align) | |||
| 312 | BUG(); | 313 | BUG(); |
| 313 | return 0; | 314 | return 0; |
| 314 | } | 315 | } |
| 316 | EXPORT_SYMBOL(dvma_map_align); | ||
| 315 | 317 | ||
| 316 | void dvma_unmap(void *baddr) | 318 | void dvma_unmap(void *baddr) |
| 317 | { | 319 | { |
| @@ -327,7 +329,7 @@ void dvma_unmap(void *baddr) | |||
| 327 | return; | 329 | return; |
| 328 | 330 | ||
| 329 | } | 331 | } |
| 330 | 332 | EXPORT_SYMBOL(dvma_unmap); | |
| 331 | 333 | ||
| 332 | void *dvma_malloc_align(unsigned long len, unsigned long align) | 334 | void *dvma_malloc_align(unsigned long len, unsigned long align) |
| 333 | { | 335 | { |
| @@ -367,6 +369,7 @@ void *dvma_malloc_align(unsigned long len, unsigned long align) | |||
| 367 | return (void *)vaddr; | 369 | return (void *)vaddr; |
| 368 | 370 | ||
| 369 | } | 371 | } |
| 372 | EXPORT_SYMBOL(dvma_malloc_align); | ||
| 370 | 373 | ||
| 371 | void dvma_free(void *vaddr) | 374 | void dvma_free(void *vaddr) |
| 372 | { | 375 | { |
| @@ -374,3 +377,4 @@ void dvma_free(void *vaddr) | |||
| 374 | return; | 377 | return; |
| 375 | 378 | ||
| 376 | } | 379 | } |
| 380 | EXPORT_SYMBOL(dvma_free); | ||
diff --git a/arch/m68knommu/kernel/setup.c b/arch/m68knommu/kernel/setup.c index bde9811cf98c..7b21959eaeae 100644 --- a/arch/m68knommu/kernel/setup.c +++ b/arch/m68knommu/kernel/setup.c | |||
| @@ -62,7 +62,7 @@ int (*mach_kbdrate) (struct kbd_repeat *); | |||
| 62 | void (*mach_kbd_leds) (unsigned int); | 62 | void (*mach_kbd_leds) (unsigned int); |
| 63 | /* machine dependent irq functions */ | 63 | /* machine dependent irq functions */ |
| 64 | void (*mach_init_IRQ) (void); | 64 | void (*mach_init_IRQ) (void); |
| 65 | irqreturn_t (*(*mach_default_handler)[]) (int, void *, struct pt_regs *); | 65 | irq_handler_t mach_default_handler; |
| 66 | int (*mach_get_irq_list) (struct seq_file *, void *); | 66 | int (*mach_get_irq_list) (struct seq_file *, void *); |
| 67 | void (*mach_process_int) (int irq, struct pt_regs *fp); | 67 | void (*mach_process_int) (int irq, struct pt_regs *fp); |
| 68 | void (*mach_trap_init) (void); | 68 | void (*mach_trap_init) (void); |
diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S index 617e43ec95ae..4603f4f3c935 100644 --- a/arch/m68knommu/kernel/syscalltable.S +++ b/arch/m68knommu/kernel/syscalltable.S | |||
| @@ -296,10 +296,39 @@ ENTRY(sys_call_table) | |||
| 296 | .long sys_mq_notify /* 275 */ | 296 | .long sys_mq_notify /* 275 */ |
| 297 | .long sys_mq_getsetattr | 297 | .long sys_mq_getsetattr |
| 298 | .long sys_waitid | 298 | .long sys_waitid |
| 299 | .long sys_ni_syscall /* sys_setaltroot */ | 299 | .long sys_ni_syscall /* for sys_vserver */ |
| 300 | .long sys_ni_syscall /* sys_add_key */ | 300 | .long sys_add_key |
| 301 | .long sys_ni_syscall /* 280 */ /* sys_request_key */ | 301 | .long sys_request_key /* 280 */ |
| 302 | .long sys_ni_syscall /* sys_keyctl */ | 302 | .long sys_keyctl |
| 303 | .long sys_ioprio_set | ||
| 304 | .long sys_ioprio_get | ||
| 305 | .long sys_inotify_init | ||
| 306 | .long sys_inotify_add_watch /* 285 */ | ||
| 307 | .long sys_inotify_rm_watch | ||
| 308 | .long sys_migrate_pages | ||
| 309 | .long sys_openat | ||
| 310 | .long sys_mkdirat | ||
| 311 | .long sys_mknodat /* 290 */ | ||
| 312 | .long sys_fchownat | ||
| 313 | .long sys_futimesat | ||
| 314 | .long sys_fstatat64 | ||
| 315 | .long sys_unlinkat | ||
| 316 | .long sys_renameat /* 295 */ | ||
| 317 | .long sys_linkat | ||
| 318 | .long sys_symlinkat | ||
| 319 | .long sys_readlinkat | ||
| 320 | .long sys_fchmodat | ||
| 321 | .long sys_faccessat /* 300 */ | ||
| 322 | .long sys_ni_syscall /* Reserved for pselect6 */ | ||
| 323 | .long sys_ni_syscall /* Reserved for ppoll */ | ||
| 324 | .long sys_unshare | ||
| 325 | .long sys_set_robust_list | ||
| 326 | .long sys_get_robust_list /* 305 */ | ||
| 327 | .long sys_splice | ||
| 328 | .long sys_sync_file_range | ||
| 329 | .long sys_tee | ||
| 330 | .long sys_vmsplice | ||
| 331 | .long sys_move_pages /* 310 */ | ||
| 303 | 332 | ||
| 304 | .rept NR_syscalls-(.-sys_call_table)/4 | 333 | .rept NR_syscalls-(.-sys_call_table)/4 |
| 305 | .long sys_ni_syscall | 334 | .long sys_ni_syscall |
diff --git a/arch/m68knommu/kernel/time.c b/arch/m68knommu/kernel/time.c index c5667bdddd5e..9226264abf1a 100644 --- a/arch/m68knommu/kernel/time.c +++ b/arch/m68knommu/kernel/time.c | |||
| @@ -54,7 +54,7 @@ static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) | |||
| 54 | update_process_times(user_mode(regs)); | 54 | update_process_times(user_mode(regs)); |
| 55 | #endif | 55 | #endif |
| 56 | if (current->pid) | 56 | if (current->pid) |
| 57 | profile_tick(CPU_PROFILING, regs); | 57 | profile_tick(CPU_PROFILING); |
| 58 | 58 | ||
| 59 | /* | 59 | /* |
| 60 | * If we have an externally synchronized Linux clock, then update | 60 | * If we have an externally synchronized Linux clock, then update |
diff --git a/arch/m68knommu/kernel/vmlinux.lds.S b/arch/m68knommu/kernel/vmlinux.lds.S index ccd2ceb05cfb..58afa8be604e 100644 --- a/arch/m68knommu/kernel/vmlinux.lds.S +++ b/arch/m68knommu/kernel/vmlinux.lds.S | |||
| @@ -140,13 +140,7 @@ SECTIONS { | |||
| 140 | *(.init.setup) | 140 | *(.init.setup) |
| 141 | __setup_end = .; | 141 | __setup_end = .; |
| 142 | __initcall_start = .; | 142 | __initcall_start = .; |
| 143 | *(.initcall1.init) | 143 | INITCALLS |
| 144 | *(.initcall2.init) | ||
| 145 | *(.initcall3.init) | ||
| 146 | *(.initcall4.init) | ||
| 147 | *(.initcall5.init) | ||
| 148 | *(.initcall6.init) | ||
| 149 | *(.initcall7.init) | ||
| 150 | __initcall_end = .; | 144 | __initcall_end = .; |
| 151 | __con_initcall_start = .; | 145 | __con_initcall_start = .; |
| 152 | *(.con_initcall.init) | 146 | *(.con_initcall.init) |
diff --git a/arch/m68knommu/platform/5307/ints.c b/arch/m68knommu/platform/5307/ints.c index b4b55093ae7e..a57239ec6c8c 100644 --- a/arch/m68knommu/platform/5307/ints.c +++ b/arch/m68knommu/platform/5307/ints.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | /* | 33 | /* |
| 34 | * This table stores the address info for each vector handler. | 34 | * This table stores the address info for each vector handler. |
| 35 | */ | 35 | */ |
| 36 | irq_handler_t irq_list[SYS_IRQS]; | 36 | struct irq_entry irq_list[SYS_IRQS]; |
| 37 | 37 | ||
| 38 | #define NUM_IRQ_NODES 16 | 38 | #define NUM_IRQ_NODES 16 |
| 39 | static irq_node_t nodes[NUM_IRQ_NODES]; | 39 | static irq_node_t nodes[NUM_IRQ_NODES]; |
| @@ -44,7 +44,7 @@ volatile unsigned int num_spurious; | |||
| 44 | unsigned int local_bh_count[NR_CPUS]; | 44 | unsigned int local_bh_count[NR_CPUS]; |
| 45 | unsigned int local_irq_count[NR_CPUS]; | 45 | unsigned int local_irq_count[NR_CPUS]; |
| 46 | 46 | ||
| 47 | static irqreturn_t default_irq_handler(int irq, void *ptr, struct pt_regs *regs) | 47 | static irqreturn_t default_irq_handler(int irq, void *ptr) |
| 48 | { | 48 | { |
| 49 | #if 1 | 49 | #if 1 |
| 50 | printk(KERN_INFO "%s(%d): default irq handler vec=%d [0x%x]\n", | 50 | printk(KERN_INFO "%s(%d): default irq handler vec=%d [0x%x]\n", |
| @@ -70,7 +70,7 @@ void __init init_IRQ(void) | |||
| 70 | 70 | ||
| 71 | for (i = 0; i < SYS_IRQS; i++) { | 71 | for (i = 0; i < SYS_IRQS; i++) { |
| 72 | if (mach_default_handler) | 72 | if (mach_default_handler) |
| 73 | irq_list[i].handler = (*mach_default_handler)[i]; | 73 | irq_list[i].handler = mach_default_handler; |
| 74 | else | 74 | else |
| 75 | irq_list[i].handler = default_irq_handler; | 75 | irq_list[i].handler = default_irq_handler; |
| 76 | irq_list[i].flags = IRQ_FLG_STD; | 76 | irq_list[i].flags = IRQ_FLG_STD; |
| @@ -100,7 +100,7 @@ irq_node_t *new_irq_node(void) | |||
| 100 | 100 | ||
| 101 | int request_irq( | 101 | int request_irq( |
| 102 | unsigned int irq, | 102 | unsigned int irq, |
| 103 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 103 | irq_handler_t handler, |
| 104 | unsigned long flags, | 104 | unsigned long flags, |
| 105 | const char *devname, | 105 | const char *devname, |
| 106 | void *dev_id) | 106 | void *dev_id) |
| @@ -157,7 +157,7 @@ void free_irq(unsigned int irq, void *dev_id) | |||
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | if (mach_default_handler) | 159 | if (mach_default_handler) |
| 160 | irq_list[irq].handler = (*mach_default_handler)[irq]; | 160 | irq_list[irq].handler = mach_default_handler; |
| 161 | else | 161 | else |
| 162 | irq_list[irq].handler = default_irq_handler; | 162 | irq_list[irq].handler = default_irq_handler; |
| 163 | irq_list[irq].flags = IRQ_FLG_STD; | 163 | irq_list[irq].flags = IRQ_FLG_STD; |
| @@ -168,8 +168,7 @@ void free_irq(unsigned int irq, void *dev_id) | |||
| 168 | EXPORT_SYMBOL(free_irq); | 168 | EXPORT_SYMBOL(free_irq); |
| 169 | 169 | ||
| 170 | 170 | ||
| 171 | int sys_request_irq(unsigned int irq, | 171 | int sys_request_irq(unsigned int irq, irq_handler_t handler, |
| 172 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | ||
| 173 | unsigned long flags, const char *devname, void *dev_id) | 172 | unsigned long flags, const char *devname, void *dev_id) |
| 174 | { | 173 | { |
| 175 | if (irq > IRQ7) { | 174 | if (irq > IRQ7) { |
| @@ -211,7 +210,7 @@ void sys_free_irq(unsigned int irq, void *dev_id) | |||
| 211 | printk(KERN_WARNING "%s: Removing probably wrong IRQ %d from %s\n", | 210 | printk(KERN_WARNING "%s: Removing probably wrong IRQ %d from %s\n", |
| 212 | __FUNCTION__, irq, irq_list[irq].devname); | 211 | __FUNCTION__, irq, irq_list[irq].devname); |
| 213 | 212 | ||
| 214 | irq_list[irq].handler = (*mach_default_handler)[irq]; | 213 | irq_list[irq].handler = mach_default_handler; |
| 215 | irq_list[irq].flags = 0; | 214 | irq_list[irq].flags = 0; |
| 216 | irq_list[irq].dev_id = NULL; | 215 | irq_list[irq].dev_id = NULL; |
| 217 | irq_list[irq].devname = NULL; | 216 | irq_list[irq].devname = NULL; |
| @@ -241,7 +240,7 @@ asmlinkage void process_int(unsigned long vec, struct pt_regs *fp) | |||
| 241 | if (vec >= VEC_INT1 && vec <= VEC_INT7) { | 240 | if (vec >= VEC_INT1 && vec <= VEC_INT7) { |
| 242 | vec -= VEC_SPUR; | 241 | vec -= VEC_SPUR; |
| 243 | kstat_cpu(0).irqs[vec]++; | 242 | kstat_cpu(0).irqs[vec]++; |
| 244 | irq_list[vec].handler(vec, irq_list[vec].dev_id, fp); | 243 | irq_list[vec].handler(vec, irq_list[vec].dev_id); |
| 245 | } else { | 244 | } else { |
| 246 | if (mach_process_int) | 245 | if (mach_process_int) |
| 247 | mach_process_int(vec, fp); | 246 | mach_process_int(vec, fp); |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 14af6cce2fa2..1443024b1c7c 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -425,9 +425,8 @@ config MOMENCO_OCELOT_G | |||
| 425 | select SWAP_IO_SPACE | 425 | select SWAP_IO_SPACE |
| 426 | select SYS_HAS_CPU_RM7000 | 426 | select SYS_HAS_CPU_RM7000 |
| 427 | select SYS_SUPPORTS_32BIT_KERNEL | 427 | select SYS_SUPPORTS_32BIT_KERNEL |
| 428 | select SYS_SUPPORTS_64BIT_KERNEL | 428 | select SYS_SUPPORTS_64BIT_KERNEL if BROKEN |
| 429 | select SYS_SUPPORTS_BIG_ENDIAN | 429 | select SYS_SUPPORTS_BIG_ENDIAN |
| 430 | select ARCH_SPARSEMEM_ENABLE | ||
| 431 | help | 430 | help |
| 432 | The Ocelot is a MIPS-based Single Board Computer (SBC) made by | 431 | The Ocelot is a MIPS-based Single Board Computer (SBC) made by |
| 433 | Momentum Computer <http://www.momenco.com/>. | 432 | Momentum Computer <http://www.momenco.com/>. |
| @@ -560,6 +559,7 @@ config SGI_IP27 | |||
| 560 | select SYS_SUPPORTS_64BIT_KERNEL | 559 | select SYS_SUPPORTS_64BIT_KERNEL |
| 561 | select SYS_SUPPORTS_BIG_ENDIAN | 560 | select SYS_SUPPORTS_BIG_ENDIAN |
| 562 | select SYS_SUPPORTS_NUMA | 561 | select SYS_SUPPORTS_NUMA |
| 562 | select SYS_SUPPORTS_SMP | ||
| 563 | help | 563 | help |
| 564 | This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics | 564 | This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics |
| 565 | workstations. To compile a Linux kernel that runs on these, say Y | 565 | workstations. To compile a Linux kernel that runs on these, say Y |
| @@ -1633,9 +1633,6 @@ config ARCH_DISCONTIGMEM_ENABLE | |||
| 1633 | 1633 | ||
| 1634 | config ARCH_SPARSEMEM_ENABLE | 1634 | config ARCH_SPARSEMEM_ENABLE |
| 1635 | bool | 1635 | bool |
| 1636 | |||
| 1637 | config ARCH_SPARSEMEM_ENABLE | ||
| 1638 | bool | ||
| 1639 | select SPARSEMEM_STATIC | 1636 | select SPARSEMEM_STATIC |
| 1640 | 1637 | ||
| 1641 | config NUMA | 1638 | config NUMA |
| @@ -1690,6 +1687,7 @@ config NR_CPUS | |||
| 1690 | depends on SMP | 1687 | depends on SMP |
| 1691 | default "64" if SGI_IP27 | 1688 | default "64" if SGI_IP27 |
| 1692 | default "2" | 1689 | default "2" |
| 1690 | default "8" if MIPS_MT_SMTC | ||
| 1693 | help | 1691 | help |
| 1694 | This allows you to specify the maximum number of CPUs which this | 1692 | This allows you to specify the maximum number of CPUs which this |
| 1695 | kernel will support. The maximum supported value is 32 for 32-bit | 1693 | kernel will support. The maximum supported value is 32 for 32-bit |
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 2124350ab94d..d580d46f967b 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
| @@ -63,7 +63,9 @@ cflags-y += -mabi=64 | |||
| 63 | ifdef CONFIG_BUILD_ELF64 | 63 | ifdef CONFIG_BUILD_ELF64 |
| 64 | cflags-y += $(call cc-option,-mno-explicit-relocs) | 64 | cflags-y += $(call cc-option,-mno-explicit-relocs) |
| 65 | else | 65 | else |
| 66 | cflags-y += $(call cc-option,-msym32) | 66 | # -msym32 can not be used for modules since they are loaded into XKSEG |
| 67 | CFLAGS_MODULE += $(call cc-option,-mno-explicit-relocs) | ||
| 68 | CFLAGS_KERNEL += $(call cc-option,-msym32) | ||
| 67 | endif | 69 | endif |
| 68 | endif | 70 | endif |
| 69 | 71 | ||
| @@ -91,8 +93,17 @@ cflags-y += -ffreestanding | |||
| 91 | # carefully avoid to add it redundantly because gcc 3.3/3.4 complains | 93 | # carefully avoid to add it redundantly because gcc 3.3/3.4 complains |
| 92 | # when fed the toolchain default! | 94 | # when fed the toolchain default! |
| 93 | # | 95 | # |
| 94 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB -D__MIPSEB__) | 96 | # Certain gcc versions upto gcc 4.1.1 (probably 4.2-subversion as of |
| 95 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL -D__MIPSEL__) | 97 | # 2006-10-10 don't properly change the the predefined symbols if -EB / -EL |
| 98 | # are used, so we kludge that here. A bug has been filed at | ||
| 99 | # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29413. | ||
| 100 | # | ||
| 101 | undef-all += -UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ | ||
| 102 | undef-all += -UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ | ||
| 103 | predef-be += -DMIPSEB -D_MIPSEB -D__MIPSEB -D__MIPSEB__ | ||
| 104 | predef-le += -DMIPSEL -D_MIPSEL -D__MIPSEL -D__MIPSEL__ | ||
| 105 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB $(undef-all) $(predef-be)) | ||
| 106 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL $(undef-all) $(predef-le)) | ||
| 96 | 107 | ||
| 97 | cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \ | 108 | cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \ |
| 98 | -fno-omit-frame-pointer | 109 | -fno-omit-frame-pointer |
diff --git a/arch/mips/au1000/common/dbdma.c b/arch/mips/au1000/common/dbdma.c index c4fae8ff4671..626de44bd888 100644 --- a/arch/mips/au1000/common/dbdma.c +++ b/arch/mips/au1000/common/dbdma.c | |||
| @@ -849,7 +849,7 @@ au1xxx_dbdma_chan_free(u32 chanid) | |||
| 849 | EXPORT_SYMBOL(au1xxx_dbdma_chan_free); | 849 | EXPORT_SYMBOL(au1xxx_dbdma_chan_free); |
| 850 | 850 | ||
| 851 | static irqreturn_t | 851 | static irqreturn_t |
| 852 | dbdma_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 852 | dbdma_interrupt(int irq, void *dev_id) |
| 853 | { | 853 | { |
| 854 | u32 intstat; | 854 | u32 intstat; |
| 855 | u32 chan_index; | 855 | u32 chan_index; |
diff --git a/arch/mips/au1000/common/prom.c b/arch/mips/au1000/common/prom.c index b4b010a2fe36..6fce60af005d 100644 --- a/arch/mips/au1000/common/prom.c +++ b/arch/mips/au1000/common/prom.c | |||
| @@ -47,7 +47,7 @@ extern int prom_argc; | |||
| 47 | extern char **prom_argv, **prom_envp; | 47 | extern char **prom_argv, **prom_envp; |
| 48 | 48 | ||
| 49 | 49 | ||
| 50 | char * prom_getcmdline(void) | 50 | char * __init_or_module prom_getcmdline(void) |
| 51 | { | 51 | { |
| 52 | return &(arcs_cmdline[0]); | 52 | return &(arcs_cmdline[0]); |
| 53 | } | 53 | } |
diff --git a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c index 377ae0d8ff00..919172db560c 100644 --- a/arch/mips/au1000/common/setup.c +++ b/arch/mips/au1000/common/setup.c | |||
| @@ -43,7 +43,7 @@ | |||
| 43 | #include <asm/mach-au1x00/au1000.h> | 43 | #include <asm/mach-au1x00/au1000.h> |
| 44 | #include <asm/time.h> | 44 | #include <asm/time.h> |
| 45 | 45 | ||
| 46 | extern char * __init prom_getcmdline(void); | 46 | extern char * prom_getcmdline(void); |
| 47 | extern void __init board_setup(void); | 47 | extern void __init board_setup(void); |
| 48 | extern void au1000_restart(char *); | 48 | extern void au1000_restart(char *); |
| 49 | extern void au1000_halt(void); | 49 | extern void au1000_halt(void); |
diff --git a/arch/mips/au1000/common/time.c b/arch/mips/au1000/common/time.c index 94f09194d63d..fa1c62f05515 100644 --- a/arch/mips/au1000/common/time.c +++ b/arch/mips/au1000/common/time.c | |||
| @@ -53,9 +53,6 @@ static unsigned long r4k_cur; /* What counter should be at next timer irq */ | |||
| 53 | int no_au1xxx_32khz; | 53 | int no_au1xxx_32khz; |
| 54 | extern int allow_au1k_wait; /* default off for CP0 Counter */ | 54 | extern int allow_au1k_wait; /* default off for CP0 Counter */ |
| 55 | 55 | ||
| 56 | /* Cycle counter value at the previous timer interrupt.. */ | ||
| 57 | static unsigned int timerhi = 0, timerlo = 0; | ||
| 58 | |||
| 59 | #ifdef CONFIG_PM | 56 | #ifdef CONFIG_PM |
| 60 | #if HZ < 100 || HZ > 1000 | 57 | #if HZ < 100 || HZ > 1000 |
| 61 | #error "unsupported HZ value! Must be in [100,1000]" | 58 | #error "unsupported HZ value! Must be in [100,1000]" |
| @@ -82,7 +79,6 @@ unsigned long wtimer; | |||
| 82 | void mips_timer_interrupt(void) | 79 | void mips_timer_interrupt(void) |
| 83 | { | 80 | { |
| 84 | int irq = 63; | 81 | int irq = 63; |
| 85 | unsigned long count; | ||
| 86 | 82 | ||
| 87 | irq_enter(); | 83 | irq_enter(); |
| 88 | kstat_this_cpu.irqs[irq]++; | 84 | kstat_this_cpu.irqs[irq]++; |
| @@ -91,10 +87,6 @@ void mips_timer_interrupt(void) | |||
| 91 | goto null; | 87 | goto null; |
| 92 | 88 | ||
| 93 | do { | 89 | do { |
| 94 | count = read_c0_count(); | ||
| 95 | timerhi += (count < timerlo); /* Wrap around */ | ||
| 96 | timerlo = count; | ||
| 97 | |||
| 98 | kstat_this_cpu.irqs[irq]++; | 90 | kstat_this_cpu.irqs[irq]++; |
| 99 | do_timer(1); | 91 | do_timer(1); |
| 100 | #ifndef CONFIG_SMP | 92 | #ifndef CONFIG_SMP |
| @@ -231,7 +223,6 @@ wakeup_counter0_set(int ticks) | |||
| 231 | */ | 223 | */ |
| 232 | unsigned long cal_r4koff(void) | 224 | unsigned long cal_r4koff(void) |
| 233 | { | 225 | { |
| 234 | unsigned long count; | ||
| 235 | unsigned long cpu_speed; | 226 | unsigned long cpu_speed; |
| 236 | unsigned long flags; | 227 | unsigned long flags; |
| 237 | unsigned long counter; | 228 | unsigned long counter; |
| @@ -258,7 +249,7 @@ unsigned long cal_r4koff(void) | |||
| 258 | 249 | ||
| 259 | #if defined(CONFIG_AU1000_USE32K) | 250 | #if defined(CONFIG_AU1000_USE32K) |
| 260 | { | 251 | { |
| 261 | unsigned long start, end; | 252 | unsigned long start, end, count; |
| 262 | 253 | ||
| 263 | start = au_readl(SYS_RTCREAD); | 254 | start = au_readl(SYS_RTCREAD); |
| 264 | start += 2; | 255 | start += 2; |
| @@ -282,7 +273,6 @@ unsigned long cal_r4koff(void) | |||
| 282 | #else | 273 | #else |
| 283 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * | 274 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * |
| 284 | AU1000_SRC_CLK; | 275 | AU1000_SRC_CLK; |
| 285 | count = cpu_speed / 2; | ||
| 286 | #endif | 276 | #endif |
| 287 | } | 277 | } |
| 288 | else { | 278 | else { |
| @@ -291,98 +281,15 @@ unsigned long cal_r4koff(void) | |||
| 291 | * NOTE: some old silicon doesn't allow reading the PLL. | 281 | * NOTE: some old silicon doesn't allow reading the PLL. |
| 292 | */ | 282 | */ |
| 293 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * AU1000_SRC_CLK; | 283 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * AU1000_SRC_CLK; |
| 294 | count = cpu_speed / 2; | ||
| 295 | no_au1xxx_32khz = 1; | 284 | no_au1xxx_32khz = 1; |
| 296 | } | 285 | } |
| 297 | mips_hpt_frequency = count; | 286 | mips_hpt_frequency = cpu_speed; |
| 298 | // Equation: Baudrate = CPU / (SD * 2 * CLKDIV * 16) | 287 | // Equation: Baudrate = CPU / (SD * 2 * CLKDIV * 16) |
| 299 | set_au1x00_uart_baud_base(cpu_speed / (2 * ((int)(au_readl(SYS_POWERCTRL)&0x03) + 2) * 16)); | 288 | set_au1x00_uart_baud_base(cpu_speed / (2 * ((int)(au_readl(SYS_POWERCTRL)&0x03) + 2) * 16)); |
| 300 | spin_unlock_irqrestore(&time_lock, flags); | 289 | spin_unlock_irqrestore(&time_lock, flags); |
| 301 | return (cpu_speed / HZ); | 290 | return (cpu_speed / HZ); |
| 302 | } | 291 | } |
| 303 | 292 | ||
| 304 | /* This is for machines which generate the exact clock. */ | ||
| 305 | #define USECS_PER_JIFFY (1000000/HZ) | ||
| 306 | #define USECS_PER_JIFFY_FRAC (0x100000000LL*1000000/HZ&0xffffffff) | ||
| 307 | |||
| 308 | static unsigned long | ||
| 309 | div64_32(unsigned long v1, unsigned long v2, unsigned long v3) | ||
| 310 | { | ||
| 311 | unsigned long r0; | ||
| 312 | do_div64_32(r0, v1, v2, v3); | ||
| 313 | return r0; | ||
| 314 | } | ||
| 315 | |||
| 316 | static unsigned long do_fast_cp0_gettimeoffset(void) | ||
| 317 | { | ||
| 318 | u32 count; | ||
| 319 | unsigned long res, tmp; | ||
| 320 | unsigned long r0; | ||
| 321 | |||
| 322 | /* Last jiffy when do_fast_gettimeoffset() was called. */ | ||
| 323 | static unsigned long last_jiffies=0; | ||
| 324 | unsigned long quotient; | ||
| 325 | |||
| 326 | /* | ||
| 327 | * Cached "1/(clocks per usec)*2^32" value. | ||
| 328 | * It has to be recalculated once each jiffy. | ||
| 329 | */ | ||
| 330 | static unsigned long cached_quotient=0; | ||
| 331 | |||
| 332 | tmp = jiffies; | ||
| 333 | |||
| 334 | quotient = cached_quotient; | ||
| 335 | |||
| 336 | if (tmp && last_jiffies != tmp) { | ||
| 337 | last_jiffies = tmp; | ||
| 338 | if (last_jiffies != 0) { | ||
| 339 | r0 = div64_32(timerhi, timerlo, tmp); | ||
| 340 | quotient = div64_32(USECS_PER_JIFFY, USECS_PER_JIFFY_FRAC, r0); | ||
| 341 | cached_quotient = quotient; | ||
| 342 | } | ||
| 343 | } | ||
| 344 | |||
| 345 | /* Get last timer tick in absolute kernel time */ | ||
| 346 | count = read_c0_count(); | ||
| 347 | |||
| 348 | /* .. relative to previous jiffy (32 bits is enough) */ | ||
| 349 | count -= timerlo; | ||
| 350 | |||
| 351 | __asm__("multu\t%1,%2\n\t" | ||
| 352 | "mfhi\t%0" | ||
| 353 | : "=r" (res) | ||
| 354 | : "r" (count), "r" (quotient) | ||
| 355 | : "hi", "lo", GCC_REG_ACCUM); | ||
| 356 | |||
| 357 | /* | ||
| 358 | * Due to possible jiffies inconsistencies, we need to check | ||
| 359 | * the result so that we'll get a timer that is monotonic. | ||
| 360 | */ | ||
| 361 | if (res >= USECS_PER_JIFFY) | ||
| 362 | res = USECS_PER_JIFFY-1; | ||
| 363 | |||
| 364 | return res; | ||
| 365 | } | ||
| 366 | |||
| 367 | #ifdef CONFIG_PM | ||
| 368 | static unsigned long do_fast_pm_gettimeoffset(void) | ||
| 369 | { | ||
| 370 | unsigned long pc0; | ||
| 371 | unsigned long offset; | ||
| 372 | |||
| 373 | pc0 = au_readl(SYS_TOYREAD); | ||
| 374 | au_sync(); | ||
| 375 | offset = pc0 - last_pc0; | ||
| 376 | if (offset > 2*MATCH20_INC) { | ||
| 377 | printk("huge offset %x, last_pc0 %x last_match20 %x pc0 %x\n", | ||
| 378 | (unsigned)offset, (unsigned)last_pc0, | ||
| 379 | (unsigned)last_match20, (unsigned)pc0); | ||
| 380 | } | ||
| 381 | offset = (unsigned long)((offset * 305) / 10); | ||
| 382 | return offset; | ||
| 383 | } | ||
| 384 | #endif | ||
| 385 | |||
| 386 | void __init plat_timer_setup(struct irqaction *irq) | 293 | void __init plat_timer_setup(struct irqaction *irq) |
| 387 | { | 294 | { |
| 388 | unsigned int est_freq; | 295 | unsigned int est_freq; |
| @@ -420,7 +327,6 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
| 420 | unsigned int c0_status; | 327 | unsigned int c0_status; |
| 421 | 328 | ||
| 422 | printk("WARNING: no 32KHz clock found.\n"); | 329 | printk("WARNING: no 32KHz clock found.\n"); |
| 423 | do_gettimeoffset = do_fast_cp0_gettimeoffset; | ||
| 424 | 330 | ||
| 425 | /* Ensure we get CPO_COUNTER interrupts. | 331 | /* Ensure we get CPO_COUNTER interrupts. |
| 426 | */ | 332 | */ |
| @@ -445,19 +351,11 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
| 445 | while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20); | 351 | while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20); |
| 446 | startup_match20_interrupt(counter0_irq); | 352 | startup_match20_interrupt(counter0_irq); |
| 447 | 353 | ||
| 448 | do_gettimeoffset = do_fast_pm_gettimeoffset; | ||
| 449 | |||
| 450 | /* We can use the real 'wait' instruction. | 354 | /* We can use the real 'wait' instruction. |
| 451 | */ | 355 | */ |
| 452 | allow_au1k_wait = 1; | 356 | allow_au1k_wait = 1; |
| 453 | } | 357 | } |
| 454 | 358 | ||
| 455 | #else | ||
| 456 | /* We have to do this here instead of in timer_init because | ||
| 457 | * the generic code in arch/mips/kernel/time.c will write | ||
| 458 | * over our function pointer. | ||
| 459 | */ | ||
| 460 | do_gettimeoffset = do_fast_cp0_gettimeoffset; | ||
| 461 | #endif | 359 | #endif |
| 462 | } | 360 | } |
| 463 | 361 | ||
diff --git a/arch/mips/configs/bigsur_defconfig b/arch/mips/configs/bigsur_defconfig index c6a015940b41..ba3bf733d27d 100644 --- a/arch/mips/configs/bigsur_defconfig +++ b/arch/mips/configs/bigsur_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.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc1 |
| 4 | # Thu Jul 6 10:02:58 2006 | 4 | # Wed Oct 11 01:41:41 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -25,8 +25,6 @@ CONFIG_MIPS=y | |||
| 25 | # CONFIG_MIPS_COBALT is not set | 25 | # CONFIG_MIPS_COBALT is not set |
| 26 | # CONFIG_MACH_DECSTATION is not set | 26 | # CONFIG_MACH_DECSTATION is not set |
| 27 | # CONFIG_MIPS_EV64120 is not set | 27 | # CONFIG_MIPS_EV64120 is not set |
| 28 | # CONFIG_MIPS_IVR is not set | ||
| 29 | # CONFIG_MIPS_ITE8172 is not set | ||
| 30 | # CONFIG_MACH_JAZZ is not set | 28 | # CONFIG_MACH_JAZZ is not set |
| 31 | # CONFIG_LASAT is not set | 29 | # CONFIG_LASAT is not set |
| 32 | # CONFIG_MIPS_ATLAS is not set | 30 | # CONFIG_MIPS_ATLAS is not set |
| @@ -83,6 +81,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
| 83 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 81 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| 84 | CONFIG_GENERIC_HWEIGHT=y | 82 | CONFIG_GENERIC_HWEIGHT=y |
| 85 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 83 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 84 | CONFIG_GENERIC_TIME=y | ||
| 86 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 85 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
| 87 | CONFIG_DMA_COHERENT=y | 86 | CONFIG_DMA_COHERENT=y |
| 88 | CONFIG_CPU_BIG_ENDIAN=y | 87 | CONFIG_CPU_BIG_ENDIAN=y |
| @@ -132,8 +131,8 @@ CONFIG_PAGE_SIZE_4KB=y | |||
| 132 | # CONFIG_PAGE_SIZE_64KB is not set | 131 | # CONFIG_PAGE_SIZE_64KB is not set |
| 133 | # CONFIG_SIBYTE_DMA_PAGEOPS is not set | 132 | # CONFIG_SIBYTE_DMA_PAGEOPS is not set |
| 134 | CONFIG_MIPS_MT_DISABLED=y | 133 | CONFIG_MIPS_MT_DISABLED=y |
| 135 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 136 | # CONFIG_MIPS_MT_SMP is not set | 134 | # CONFIG_MIPS_MT_SMP is not set |
| 135 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 137 | # CONFIG_MIPS_VPE_LOADER is not set | 136 | # CONFIG_MIPS_VPE_LOADER is not set |
| 138 | CONFIG_CPU_HAS_LLSC=y | 137 | CONFIG_CPU_HAS_LLSC=y |
| 139 | CONFIG_CPU_HAS_SYNC=y | 138 | CONFIG_CPU_HAS_SYNC=y |
| @@ -185,9 +184,11 @@ CONFIG_LOCALVERSION="" | |||
| 185 | CONFIG_LOCALVERSION_AUTO=y | 184 | CONFIG_LOCALVERSION_AUTO=y |
| 186 | CONFIG_SWAP=y | 185 | CONFIG_SWAP=y |
| 187 | CONFIG_SYSVIPC=y | 186 | CONFIG_SYSVIPC=y |
| 187 | # CONFIG_IPC_NS is not set | ||
| 188 | # CONFIG_POSIX_MQUEUE is not set | 188 | # CONFIG_POSIX_MQUEUE is not set |
| 189 | # CONFIG_BSD_PROCESS_ACCT is not set | 189 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 190 | CONFIG_SYSCTL=y | 190 | # CONFIG_TASKSTATS is not set |
| 191 | # CONFIG_UTS_NS is not set | ||
| 191 | # CONFIG_AUDIT is not set | 192 | # CONFIG_AUDIT is not set |
| 192 | CONFIG_IKCONFIG=y | 193 | CONFIG_IKCONFIG=y |
| 193 | CONFIG_IKCONFIG_PROC=y | 194 | CONFIG_IKCONFIG_PROC=y |
| @@ -195,7 +196,9 @@ CONFIG_IKCONFIG_PROC=y | |||
| 195 | # CONFIG_RELAY is not set | 196 | # CONFIG_RELAY is not set |
| 196 | CONFIG_INITRAMFS_SOURCE="" | 197 | CONFIG_INITRAMFS_SOURCE="" |
| 197 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 198 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 199 | CONFIG_SYSCTL=y | ||
| 198 | CONFIG_EMBEDDED=y | 200 | CONFIG_EMBEDDED=y |
| 201 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 199 | CONFIG_KALLSYMS=y | 202 | CONFIG_KALLSYMS=y |
| 200 | # CONFIG_KALLSYMS_ALL is not set | 203 | # CONFIG_KALLSYMS_ALL is not set |
| 201 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 204 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -204,12 +207,12 @@ CONFIG_PRINTK=y | |||
| 204 | CONFIG_BUG=y | 207 | CONFIG_BUG=y |
| 205 | CONFIG_ELF_CORE=y | 208 | CONFIG_ELF_CORE=y |
| 206 | CONFIG_BASE_FULL=y | 209 | CONFIG_BASE_FULL=y |
| 207 | CONFIG_RT_MUTEXES=y | ||
| 208 | CONFIG_FUTEX=y | 210 | CONFIG_FUTEX=y |
| 209 | CONFIG_EPOLL=y | 211 | CONFIG_EPOLL=y |
| 210 | CONFIG_SHMEM=y | 212 | CONFIG_SHMEM=y |
| 211 | CONFIG_SLAB=y | 213 | CONFIG_SLAB=y |
| 212 | CONFIG_VM_EVENT_COUNTERS=y | 214 | CONFIG_VM_EVENT_COUNTERS=y |
| 215 | CONFIG_RT_MUTEXES=y | ||
| 213 | # CONFIG_TINY_SHMEM is not set | 216 | # CONFIG_TINY_SHMEM is not set |
| 214 | CONFIG_BASE_SMALL=0 | 217 | CONFIG_BASE_SMALL=0 |
| 215 | # CONFIG_SLOB is not set | 218 | # CONFIG_SLOB is not set |
| @@ -228,6 +231,7 @@ CONFIG_STOP_MACHINE=y | |||
| 228 | # | 231 | # |
| 229 | # Block layer | 232 | # Block layer |
| 230 | # | 233 | # |
| 234 | CONFIG_BLOCK=y | ||
| 231 | # CONFIG_BLK_DEV_IO_TRACE is not set | 235 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 232 | 236 | ||
| 233 | # | 237 | # |
| @@ -249,18 +253,17 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| 249 | CONFIG_HW_HAS_PCI=y | 253 | CONFIG_HW_HAS_PCI=y |
| 250 | CONFIG_PCI=y | 254 | CONFIG_PCI=y |
| 251 | CONFIG_PCI_DOMAINS=y | 255 | CONFIG_PCI_DOMAINS=y |
| 256 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
| 252 | CONFIG_PCI_DEBUG=y | 257 | CONFIG_PCI_DEBUG=y |
| 253 | CONFIG_MMU=y | 258 | CONFIG_MMU=y |
| 254 | 259 | ||
| 255 | # | 260 | # |
| 256 | # PCCARD (PCMCIA/CardBus) support | 261 | # PCCARD (PCMCIA/CardBus) support |
| 257 | # | 262 | # |
| 258 | # CONFIG_PCCARD is not set | ||
| 259 | 263 | ||
| 260 | # | 264 | # |
| 261 | # PCI Hotplug Support | 265 | # PCI Hotplug Support |
| 262 | # | 266 | # |
| 263 | # CONFIG_HOTPLUG_PCI is not set | ||
| 264 | 267 | ||
| 265 | # | 268 | # |
| 266 | # Executable file formats | 269 | # Executable file formats |
| @@ -271,7 +274,7 @@ CONFIG_BINFMT_ELF=y | |||
| 271 | CONFIG_MIPS32_COMPAT=y | 274 | CONFIG_MIPS32_COMPAT=y |
| 272 | CONFIG_COMPAT=y | 275 | CONFIG_COMPAT=y |
| 273 | CONFIG_MIPS32_O32=y | 276 | CONFIG_MIPS32_O32=y |
| 274 | # CONFIG_MIPS32_N32 is not set | 277 | CONFIG_MIPS32_N32=y |
| 275 | CONFIG_BINFMT_ELF32=y | 278 | CONFIG_BINFMT_ELF32=y |
| 276 | 279 | ||
| 277 | # | 280 | # |
| @@ -288,6 +291,7 @@ CONFIG_PACKET_MMAP=y | |||
| 288 | CONFIG_UNIX=y | 291 | CONFIG_UNIX=y |
| 289 | CONFIG_XFRM=y | 292 | CONFIG_XFRM=y |
| 290 | CONFIG_XFRM_USER=m | 293 | CONFIG_XFRM_USER=m |
| 294 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 291 | CONFIG_NET_KEY=y | 295 | CONFIG_NET_KEY=y |
| 292 | CONFIG_INET=y | 296 | CONFIG_INET=y |
| 293 | # CONFIG_IP_MULTICAST is not set | 297 | # CONFIG_IP_MULTICAST is not set |
| @@ -308,10 +312,12 @@ CONFIG_IP_PNP_BOOTP=y | |||
| 308 | # CONFIG_INET_TUNNEL is not set | 312 | # CONFIG_INET_TUNNEL is not set |
| 309 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 313 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
| 310 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 314 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
| 315 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 311 | CONFIG_INET_DIAG=y | 316 | CONFIG_INET_DIAG=y |
| 312 | CONFIG_INET_TCP_DIAG=y | 317 | CONFIG_INET_TCP_DIAG=y |
| 313 | # CONFIG_TCP_CONG_ADVANCED is not set | 318 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 314 | CONFIG_TCP_CONG_BIC=y | 319 | CONFIG_TCP_CONG_CUBIC=y |
| 320 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 315 | # CONFIG_IPV6 is not set | 321 | # CONFIG_IPV6 is not set |
| 316 | # CONFIG_INET6_XFRM_TUNNEL is not set | 322 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 317 | # CONFIG_INET6_TUNNEL is not set | 323 | # CONFIG_INET6_TUNNEL is not set |
| @@ -341,7 +347,6 @@ CONFIG_NETWORK_SECMARK=y | |||
| 341 | # CONFIG_ATALK is not set | 347 | # CONFIG_ATALK is not set |
| 342 | # CONFIG_X25 is not set | 348 | # CONFIG_X25 is not set |
| 343 | # CONFIG_LAPB is not set | 349 | # CONFIG_LAPB is not set |
| 344 | # CONFIG_NET_DIVERT is not set | ||
| 345 | # CONFIG_ECONET is not set | 350 | # CONFIG_ECONET is not set |
| 346 | # CONFIG_WAN_ROUTER is not set | 351 | # CONFIG_WAN_ROUTER is not set |
| 347 | 352 | ||
| @@ -368,7 +373,6 @@ CONFIG_NETWORK_SECMARK=y | |||
| 368 | # | 373 | # |
| 369 | CONFIG_STANDALONE=y | 374 | CONFIG_STANDALONE=y |
| 370 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 375 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 371 | # CONFIG_FW_LOADER is not set | ||
| 372 | # CONFIG_DEBUG_DRIVER is not set | 376 | # CONFIG_DEBUG_DRIVER is not set |
| 373 | # CONFIG_SYS_HYPERVISOR is not set | 377 | # CONFIG_SYS_HYPERVISOR is not set |
| 374 | 378 | ||
| @@ -404,7 +408,7 @@ CONFIG_BLK_DEV_LOOP=m | |||
| 404 | CONFIG_BLK_DEV_NBD=m | 408 | CONFIG_BLK_DEV_NBD=m |
| 405 | # CONFIG_BLK_DEV_SX8 is not set | 409 | # CONFIG_BLK_DEV_SX8 is not set |
| 406 | # CONFIG_BLK_DEV_RAM is not set | 410 | # CONFIG_BLK_DEV_RAM is not set |
| 407 | # CONFIG_BLK_DEV_INITRD is not set | 411 | CONFIG_BLK_DEV_INITRD=y |
| 408 | # CONFIG_CDROM_PKTCDVD is not set | 412 | # CONFIG_CDROM_PKTCDVD is not set |
| 409 | # CONFIG_ATA_OVER_ETH is not set | 413 | # CONFIG_ATA_OVER_ETH is not set |
| 410 | 414 | ||
| @@ -412,6 +416,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 412 | # ATA/ATAPI/MFM/RLL support | 416 | # ATA/ATAPI/MFM/RLL support |
| 413 | # | 417 | # |
| 414 | CONFIG_IDE=y | 418 | CONFIG_IDE=y |
| 419 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 415 | CONFIG_BLK_DEV_IDE=y | 420 | CONFIG_BLK_DEV_IDE=y |
| 416 | 421 | ||
| 417 | # | 422 | # |
| @@ -429,10 +434,40 @@ CONFIG_BLK_DEV_IDEFLOPPY=y | |||
| 429 | # IDE chipset support/bugfixes | 434 | # IDE chipset support/bugfixes |
| 430 | # | 435 | # |
| 431 | CONFIG_IDE_GENERIC=y | 436 | CONFIG_IDE_GENERIC=y |
| 432 | # CONFIG_BLK_DEV_IDEPCI is not set | 437 | CONFIG_BLK_DEV_IDEPCI=y |
| 438 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
| 439 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 440 | CONFIG_BLK_DEV_GENERIC=y | ||
| 441 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 442 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 443 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 444 | # CONFIG_IDEDMA_PCI_AUTO is not set | ||
| 445 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 446 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 447 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 448 | CONFIG_BLK_DEV_CMD64X=y | ||
| 449 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 450 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 451 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 452 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 453 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 454 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 455 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 456 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 457 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 458 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 459 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 460 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 461 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 462 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 463 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 464 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 465 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 466 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 433 | # CONFIG_BLK_DEV_IDE_SWARM is not set | 467 | # CONFIG_BLK_DEV_IDE_SWARM is not set |
| 434 | # CONFIG_IDE_ARM is not set | 468 | # CONFIG_IDE_ARM is not set |
| 435 | # CONFIG_BLK_DEV_IDEDMA is not set | 469 | CONFIG_BLK_DEV_IDEDMA=y |
| 470 | # CONFIG_IDEDMA_IVB is not set | ||
| 436 | # CONFIG_IDEDMA_AUTO is not set | 471 | # CONFIG_IDEDMA_AUTO is not set |
| 437 | # CONFIG_BLK_DEV_HD is not set | 472 | # CONFIG_BLK_DEV_HD is not set |
| 438 | 473 | ||
| @@ -441,6 +476,12 @@ CONFIG_IDE_GENERIC=y | |||
| 441 | # | 476 | # |
| 442 | # CONFIG_RAID_ATTRS is not set | 477 | # CONFIG_RAID_ATTRS is not set |
| 443 | # CONFIG_SCSI is not set | 478 | # CONFIG_SCSI is not set |
| 479 | # CONFIG_SCSI_NETLINK is not set | ||
| 480 | |||
| 481 | # | ||
| 482 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 483 | # | ||
| 484 | # CONFIG_ATA is not set | ||
| 444 | 485 | ||
| 445 | # | 486 | # |
| 446 | # Multi-device support (RAID and LVM) | 487 | # Multi-device support (RAID and LVM) |
| @@ -516,6 +557,7 @@ CONFIG_NET_SB1250_MAC=y | |||
| 516 | # CONFIG_SK98LIN is not set | 557 | # CONFIG_SK98LIN is not set |
| 517 | # CONFIG_TIGON3 is not set | 558 | # CONFIG_TIGON3 is not set |
| 518 | # CONFIG_BNX2 is not set | 559 | # CONFIG_BNX2 is not set |
| 560 | # CONFIG_QLA3XXX is not set | ||
| 519 | 561 | ||
| 520 | # | 562 | # |
| 521 | # Ethernet (10000 Mbit) | 563 | # Ethernet (10000 Mbit) |
| @@ -650,7 +692,6 @@ CONFIG_I2C_CHARDEV=y | |||
| 650 | # CONFIG_I2C_ALGOBIT is not set | 692 | # CONFIG_I2C_ALGOBIT is not set |
| 651 | # CONFIG_I2C_ALGOPCF is not set | 693 | # CONFIG_I2C_ALGOPCF is not set |
| 652 | # CONFIG_I2C_ALGOPCA is not set | 694 | # CONFIG_I2C_ALGOPCA is not set |
| 653 | CONFIG_I2C_ALGO_SIBYTE=y | ||
| 654 | 695 | ||
| 655 | # | 696 | # |
| 656 | # I2C Hardware Bus support | 697 | # I2C Hardware Bus support |
| @@ -712,12 +753,12 @@ CONFIG_I2C_DEBUG_CHIP=y | |||
| 712 | # | 753 | # |
| 713 | # Misc devices | 754 | # Misc devices |
| 714 | # | 755 | # |
| 756 | # CONFIG_TIFM_CORE is not set | ||
| 715 | 757 | ||
| 716 | # | 758 | # |
| 717 | # Multimedia devices | 759 | # Multimedia devices |
| 718 | # | 760 | # |
| 719 | # CONFIG_VIDEO_DEV is not set | 761 | # CONFIG_VIDEO_DEV is not set |
| 720 | CONFIG_VIDEO_V4L2=y | ||
| 721 | 762 | ||
| 722 | # | 763 | # |
| 723 | # Digital Video Broadcasting Devices | 764 | # Digital Video Broadcasting Devices |
| @@ -729,6 +770,7 @@ CONFIG_VIDEO_V4L2=y | |||
| 729 | # | 770 | # |
| 730 | # CONFIG_FIRMWARE_EDID is not set | 771 | # CONFIG_FIRMWARE_EDID is not set |
| 731 | # CONFIG_FB is not set | 772 | # CONFIG_FB is not set |
| 773 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 732 | 774 | ||
| 733 | # | 775 | # |
| 734 | # Sound | 776 | # Sound |
| @@ -811,6 +853,7 @@ CONFIG_FS_MBCACHE=y | |||
| 811 | # CONFIG_JFS_FS is not set | 853 | # CONFIG_JFS_FS is not set |
| 812 | CONFIG_FS_POSIX_ACL=y | 854 | CONFIG_FS_POSIX_ACL=y |
| 813 | # CONFIG_XFS_FS is not set | 855 | # CONFIG_XFS_FS is not set |
| 856 | # CONFIG_GFS2_FS is not set | ||
| 814 | # CONFIG_OCFS2_FS is not set | 857 | # CONFIG_OCFS2_FS is not set |
| 815 | # CONFIG_MINIX_FS is not set | 858 | # CONFIG_MINIX_FS is not set |
| 816 | # CONFIG_ROMFS_FS is not set | 859 | # CONFIG_ROMFS_FS is not set |
| @@ -840,8 +883,10 @@ CONFIG_DNOTIFY=y | |||
| 840 | # | 883 | # |
| 841 | CONFIG_PROC_FS=y | 884 | CONFIG_PROC_FS=y |
| 842 | CONFIG_PROC_KCORE=y | 885 | CONFIG_PROC_KCORE=y |
| 886 | CONFIG_PROC_SYSCTL=y | ||
| 843 | CONFIG_SYSFS=y | 887 | CONFIG_SYSFS=y |
| 844 | # CONFIG_TMPFS is not set | 888 | CONFIG_TMPFS=y |
| 889 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 845 | # CONFIG_HUGETLB_PAGE is not set | 890 | # CONFIG_HUGETLB_PAGE is not set |
| 846 | CONFIG_RAMFS=y | 891 | CONFIG_RAMFS=y |
| 847 | # CONFIG_CONFIGFS_FS is not set | 892 | # CONFIG_CONFIGFS_FS is not set |
| @@ -851,6 +896,7 @@ CONFIG_RAMFS=y | |||
| 851 | # | 896 | # |
| 852 | # CONFIG_ADFS_FS is not set | 897 | # CONFIG_ADFS_FS is not set |
| 853 | # CONFIG_AFFS_FS is not set | 898 | # CONFIG_AFFS_FS is not set |
| 899 | # CONFIG_ECRYPT_FS is not set | ||
| 854 | # CONFIG_HFS_FS is not set | 900 | # CONFIG_HFS_FS is not set |
| 855 | # CONFIG_HFSPLUS_FS is not set | 901 | # CONFIG_HFSPLUS_FS is not set |
| 856 | # CONFIG_BEFS_FS is not set | 902 | # CONFIG_BEFS_FS is not set |
| @@ -881,7 +927,6 @@ CONFIG_SUNRPC=y | |||
| 881 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 927 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 882 | # CONFIG_SMB_FS is not set | 928 | # CONFIG_SMB_FS is not set |
| 883 | # CONFIG_CIFS is not set | 929 | # CONFIG_CIFS is not set |
| 884 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 885 | # CONFIG_NCP_FS is not set | 930 | # CONFIG_NCP_FS is not set |
| 886 | # CONFIG_CODA_FS is not set | 931 | # CONFIG_CODA_FS is not set |
| 887 | # CONFIG_AFS_FS is not set | 932 | # CONFIG_AFS_FS is not set |
| @@ -899,6 +944,10 @@ CONFIG_MSDOS_PARTITION=y | |||
| 899 | # CONFIG_NLS is not set | 944 | # CONFIG_NLS is not set |
| 900 | 945 | ||
| 901 | # | 946 | # |
| 947 | # Distributed Lock Manager | ||
| 948 | # | ||
| 949 | |||
| 950 | # | ||
| 902 | # Profiling support | 951 | # Profiling support |
| 903 | # | 952 | # |
| 904 | # CONFIG_PROFILING is not set | 953 | # CONFIG_PROFILING is not set |
| @@ -907,7 +956,8 @@ CONFIG_MSDOS_PARTITION=y | |||
| 907 | # Kernel hacking | 956 | # Kernel hacking |
| 908 | # | 957 | # |
| 909 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 958 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 910 | CONFIG_PRINTK_TIME=y | 959 | # CONFIG_PRINTK_TIME is not set |
| 960 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 911 | CONFIG_MAGIC_SYSRQ=y | 961 | CONFIG_MAGIC_SYSRQ=y |
| 912 | # CONFIG_UNUSED_SYMBOLS is not set | 962 | # CONFIG_UNUSED_SYMBOLS is not set |
| 913 | CONFIG_DEBUG_KERNEL=y | 963 | CONFIG_DEBUG_KERNEL=y |
| @@ -920,12 +970,15 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 920 | # CONFIG_DEBUG_SPINLOCK is not set | 970 | # CONFIG_DEBUG_SPINLOCK is not set |
| 921 | CONFIG_DEBUG_MUTEXES=y | 971 | CONFIG_DEBUG_MUTEXES=y |
| 922 | # CONFIG_DEBUG_RWSEMS is not set | 972 | # CONFIG_DEBUG_RWSEMS is not set |
| 973 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 974 | # CONFIG_PROVE_LOCKING is not set | ||
| 923 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 975 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 924 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 976 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 925 | # CONFIG_DEBUG_KOBJECT is not set | 977 | # CONFIG_DEBUG_KOBJECT is not set |
| 926 | # CONFIG_DEBUG_INFO is not set | 978 | # CONFIG_DEBUG_INFO is not set |
| 927 | # CONFIG_DEBUG_FS is not set | 979 | # CONFIG_DEBUG_FS is not set |
| 928 | # CONFIG_DEBUG_VM is not set | 980 | # CONFIG_DEBUG_VM is not set |
| 981 | # CONFIG_DEBUG_LIST is not set | ||
| 929 | CONFIG_FORCED_INLINING=y | 982 | CONFIG_FORCED_INLINING=y |
| 930 | # CONFIG_RCU_TORTURE_TEST is not set | 983 | # CONFIG_RCU_TORTURE_TEST is not set |
| 931 | CONFIG_CROSSCOMPILE=y | 984 | CONFIG_CROSSCOMPILE=y |
| @@ -946,6 +999,10 @@ CONFIG_KEYS_DEBUG_PROC_KEYS=y | |||
| 946 | # Cryptographic options | 999 | # Cryptographic options |
| 947 | # | 1000 | # |
| 948 | CONFIG_CRYPTO=y | 1001 | CONFIG_CRYPTO=y |
| 1002 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1003 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1004 | CONFIG_CRYPTO_HASH=y | ||
| 1005 | CONFIG_CRYPTO_MANAGER=m | ||
| 949 | CONFIG_CRYPTO_HMAC=y | 1006 | CONFIG_CRYPTO_HMAC=y |
| 950 | CONFIG_CRYPTO_NULL=y | 1007 | CONFIG_CRYPTO_NULL=y |
| 951 | CONFIG_CRYPTO_MD4=y | 1008 | CONFIG_CRYPTO_MD4=y |
| @@ -955,9 +1012,12 @@ CONFIG_CRYPTO_SHA256=y | |||
| 955 | CONFIG_CRYPTO_SHA512=y | 1012 | CONFIG_CRYPTO_SHA512=y |
| 956 | CONFIG_CRYPTO_WP512=m | 1013 | CONFIG_CRYPTO_WP512=m |
| 957 | CONFIG_CRYPTO_TGR192=m | 1014 | CONFIG_CRYPTO_TGR192=m |
| 1015 | CONFIG_CRYPTO_ECB=m | ||
| 1016 | CONFIG_CRYPTO_CBC=m | ||
| 958 | CONFIG_CRYPTO_DES=y | 1017 | CONFIG_CRYPTO_DES=y |
| 959 | CONFIG_CRYPTO_BLOWFISH=y | 1018 | CONFIG_CRYPTO_BLOWFISH=y |
| 960 | CONFIG_CRYPTO_TWOFISH=y | 1019 | CONFIG_CRYPTO_TWOFISH=y |
| 1020 | CONFIG_CRYPTO_TWOFISH_COMMON=y | ||
| 961 | CONFIG_CRYPTO_SERPENT=y | 1021 | CONFIG_CRYPTO_SERPENT=y |
| 962 | CONFIG_CRYPTO_AES=m | 1022 | CONFIG_CRYPTO_AES=m |
| 963 | # CONFIG_CRYPTO_CAST5 is not set | 1023 | # CONFIG_CRYPTO_CAST5 is not set |
diff --git a/arch/mips/configs/pnx8550-jbs_defconfig b/arch/mips/configs/pnx8550-jbs_defconfig index 26b0b9883496..280a8001eacf 100644 --- a/arch/mips/configs/pnx8550-jbs_defconfig +++ b/arch/mips/configs/pnx8550-jbs_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.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Thu Jul 6 10:04:18 2006 | 4 | # Sat Oct 14 23:01:16 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -25,8 +25,6 @@ CONFIG_MIPS=y | |||
| 25 | # CONFIG_MIPS_COBALT is not set | 25 | # CONFIG_MIPS_COBALT is not set |
| 26 | # CONFIG_MACH_DECSTATION is not set | 26 | # CONFIG_MACH_DECSTATION is not set |
| 27 | # CONFIG_MIPS_EV64120 is not set | 27 | # CONFIG_MIPS_EV64120 is not set |
| 28 | # CONFIG_MIPS_IVR is not set | ||
| 29 | # CONFIG_MIPS_ITE8172 is not set | ||
| 30 | # CONFIG_MACH_JAZZ is not set | 28 | # CONFIG_MACH_JAZZ is not set |
| 31 | # CONFIG_LASAT is not set | 29 | # CONFIG_LASAT is not set |
| 32 | # CONFIG_MIPS_ATLAS is not set | 30 | # CONFIG_MIPS_ATLAS is not set |
| @@ -41,13 +39,13 @@ CONFIG_MIPS=y | |||
| 41 | # CONFIG_MOMENCO_OCELOT_G is not set | 39 | # CONFIG_MOMENCO_OCELOT_G is not set |
| 42 | # CONFIG_MIPS_XXS1500 is not set | 40 | # CONFIG_MIPS_XXS1500 is not set |
| 43 | # CONFIG_PNX8550_V2PCI is not set | 41 | # CONFIG_PNX8550_V2PCI is not set |
| 44 | # CONFIG_PNX8550_JBS is not set | 42 | CONFIG_PNX8550_JBS=y |
| 45 | # CONFIG_DDB5477 is not set | 43 | # CONFIG_DDB5477 is not set |
| 46 | # CONFIG_MACH_VR41XX is not set | 44 | # CONFIG_MACH_VR41XX is not set |
| 47 | # CONFIG_PMC_YOSEMITE is not set | 45 | # CONFIG_PMC_YOSEMITE is not set |
| 48 | # CONFIG_QEMU is not set | 46 | # CONFIG_QEMU is not set |
| 49 | # CONFIG_MARKEINS is not set | 47 | # CONFIG_MARKEINS is not set |
| 50 | CONFIG_SGI_IP22=y | 48 | # CONFIG_SGI_IP22 is not set |
| 51 | # CONFIG_SGI_IP27 is not set | 49 | # CONFIG_SGI_IP27 is not set |
| 52 | # CONFIG_SGI_IP32 is not set | 50 | # CONFIG_SGI_IP32 is not set |
| 53 | # CONFIG_SIBYTE_BIGSUR is not set | 51 | # CONFIG_SIBYTE_BIGSUR is not set |
| @@ -67,25 +65,21 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
| 67 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 65 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| 68 | CONFIG_GENERIC_HWEIGHT=y | 66 | CONFIG_GENERIC_HWEIGHT=y |
| 69 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 67 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 68 | CONFIG_GENERIC_TIME=y | ||
| 70 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 69 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
| 71 | CONFIG_ARC=y | ||
| 72 | CONFIG_DMA_NONCOHERENT=y | 70 | CONFIG_DMA_NONCOHERENT=y |
| 73 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 71 | CONFIG_DMA_NEED_PCI_MAP_STATE=y |
| 74 | CONFIG_CPU_BIG_ENDIAN=y | 72 | # CONFIG_CPU_BIG_ENDIAN is not set |
| 75 | # CONFIG_CPU_LITTLE_ENDIAN is not set | 73 | CONFIG_CPU_LITTLE_ENDIAN=y |
| 76 | CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y | 74 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y |
| 77 | CONFIG_IRQ_CPU=y | 75 | CONFIG_PNX8550=y |
| 78 | CONFIG_SWAP_IO_SPACE=y | 76 | CONFIG_SOC_PNX8550=y |
| 79 | CONFIG_ARC32=y | ||
| 80 | CONFIG_BOOT_ELF32=y | ||
| 81 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | 77 | CONFIG_MIPS_L1_CACHE_SHIFT=5 |
| 82 | # CONFIG_ARC_CONSOLE is not set | ||
| 83 | CONFIG_ARC_PROMLIB=y | ||
| 84 | 78 | ||
| 85 | # | 79 | # |
| 86 | # CPU selection | 80 | # CPU selection |
| 87 | # | 81 | # |
| 88 | # CONFIG_CPU_MIPS32_R1 is not set | 82 | CONFIG_CPU_MIPS32_R1=y |
| 89 | # CONFIG_CPU_MIPS32_R2 is not set | 83 | # CONFIG_CPU_MIPS32_R2 is not set |
| 90 | # CONFIG_CPU_MIPS64_R1 is not set | 84 | # CONFIG_CPU_MIPS64_R1 is not set |
| 91 | # CONFIG_CPU_MIPS64_R2 is not set | 85 | # CONFIG_CPU_MIPS64_R2 is not set |
| @@ -93,7 +87,7 @@ CONFIG_ARC_PROMLIB=y | |||
| 93 | # CONFIG_CPU_TX39XX is not set | 87 | # CONFIG_CPU_TX39XX is not set |
| 94 | # CONFIG_CPU_VR41XX is not set | 88 | # CONFIG_CPU_VR41XX is not set |
| 95 | # CONFIG_CPU_R4300 is not set | 89 | # CONFIG_CPU_R4300 is not set |
| 96 | CONFIG_CPU_R4X00=y | 90 | # CONFIG_CPU_R4X00 is not set |
| 97 | # CONFIG_CPU_TX49XX is not set | 91 | # CONFIG_CPU_TX49XX is not set |
| 98 | # CONFIG_CPU_R5000 is not set | 92 | # CONFIG_CPU_R5000 is not set |
| 99 | # CONFIG_CPU_R5432 is not set | 93 | # CONFIG_CPU_R5432 is not set |
| @@ -104,12 +98,11 @@ CONFIG_CPU_R4X00=y | |||
| 104 | # CONFIG_CPU_RM7000 is not set | 98 | # CONFIG_CPU_RM7000 is not set |
| 105 | # CONFIG_CPU_RM9000 is not set | 99 | # CONFIG_CPU_RM9000 is not set |
| 106 | # CONFIG_CPU_SB1 is not set | 100 | # CONFIG_CPU_SB1 is not set |
| 107 | CONFIG_SYS_HAS_CPU_R4X00=y | 101 | CONFIG_SYS_HAS_CPU_MIPS32_R1=y |
| 108 | CONFIG_SYS_HAS_CPU_R5000=y | 102 | CONFIG_CPU_MIPS32=y |
| 103 | CONFIG_CPU_MIPSR1=y | ||
| 109 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | 104 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y |
| 110 | CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y | ||
| 111 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | 105 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y |
| 112 | CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y | ||
| 113 | 106 | ||
| 114 | # | 107 | # |
| 115 | # Kernel type | 108 | # Kernel type |
| @@ -120,17 +113,17 @@ CONFIG_PAGE_SIZE_4KB=y | |||
| 120 | # CONFIG_PAGE_SIZE_8KB is not set | 113 | # CONFIG_PAGE_SIZE_8KB is not set |
| 121 | # CONFIG_PAGE_SIZE_16KB is not set | 114 | # CONFIG_PAGE_SIZE_16KB is not set |
| 122 | # CONFIG_PAGE_SIZE_64KB is not set | 115 | # CONFIG_PAGE_SIZE_64KB is not set |
| 123 | CONFIG_BOARD_SCACHE=y | 116 | CONFIG_CPU_HAS_PREFETCH=y |
| 124 | CONFIG_IP22_CPU_SCACHE=y | ||
| 125 | CONFIG_MIPS_MT_DISABLED=y | 117 | CONFIG_MIPS_MT_DISABLED=y |
| 126 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 127 | # CONFIG_MIPS_MT_SMP is not set | 118 | # CONFIG_MIPS_MT_SMP is not set |
| 119 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 128 | # CONFIG_MIPS_VPE_LOADER is not set | 120 | # CONFIG_MIPS_VPE_LOADER is not set |
| 129 | # CONFIG_64BIT_PHYS_ADDR is not set | 121 | # CONFIG_64BIT_PHYS_ADDR is not set |
| 130 | CONFIG_CPU_HAS_LLSC=y | 122 | CONFIG_CPU_HAS_LLSC=y |
| 131 | CONFIG_CPU_HAS_SYNC=y | 123 | CONFIG_CPU_HAS_SYNC=y |
| 132 | CONFIG_GENERIC_HARDIRQS=y | 124 | CONFIG_GENERIC_HARDIRQS=y |
| 133 | CONFIG_GENERIC_IRQ_PROBE=y | 125 | CONFIG_GENERIC_IRQ_PROBE=y |
| 126 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | ||
| 134 | CONFIG_ARCH_FLATMEM_ENABLE=y | 127 | CONFIG_ARCH_FLATMEM_ENABLE=y |
| 135 | CONFIG_SELECT_MEMORY_MODEL=y | 128 | CONFIG_SELECT_MEMORY_MODEL=y |
| 136 | CONFIG_FLATMEM_MANUAL=y | 129 | CONFIG_FLATMEM_MANUAL=y |
| @@ -144,12 +137,12 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | |||
| 144 | # CONFIG_HZ_48 is not set | 137 | # CONFIG_HZ_48 is not set |
| 145 | # CONFIG_HZ_100 is not set | 138 | # CONFIG_HZ_100 is not set |
| 146 | # CONFIG_HZ_128 is not set | 139 | # CONFIG_HZ_128 is not set |
| 147 | # CONFIG_HZ_250 is not set | 140 | CONFIG_HZ_250=y |
| 148 | # CONFIG_HZ_256 is not set | 141 | # CONFIG_HZ_256 is not set |
| 149 | CONFIG_HZ_1000=y | 142 | # CONFIG_HZ_1000 is not set |
| 150 | # CONFIG_HZ_1024 is not set | 143 | # CONFIG_HZ_1024 is not set |
| 151 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y | 144 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y |
| 152 | CONFIG_HZ=1000 | 145 | CONFIG_HZ=250 |
| 153 | CONFIG_PREEMPT_NONE=y | 146 | CONFIG_PREEMPT_NONE=y |
| 154 | # CONFIG_PREEMPT_VOLUNTARY is not set | 147 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 155 | # CONFIG_PREEMPT is not set | 148 | # CONFIG_PREEMPT is not set |
| @@ -171,16 +164,20 @@ CONFIG_LOCALVERSION="" | |||
| 171 | CONFIG_LOCALVERSION_AUTO=y | 164 | CONFIG_LOCALVERSION_AUTO=y |
| 172 | CONFIG_SWAP=y | 165 | CONFIG_SWAP=y |
| 173 | CONFIG_SYSVIPC=y | 166 | CONFIG_SYSVIPC=y |
| 167 | # CONFIG_IPC_NS is not set | ||
| 174 | # CONFIG_POSIX_MQUEUE is not set | 168 | # CONFIG_POSIX_MQUEUE is not set |
| 175 | # CONFIG_BSD_PROCESS_ACCT is not set | 169 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 176 | CONFIG_SYSCTL=y | 170 | # CONFIG_TASKSTATS is not set |
| 171 | # CONFIG_UTS_NS is not set | ||
| 177 | # CONFIG_AUDIT is not set | 172 | # CONFIG_AUDIT is not set |
| 178 | CONFIG_IKCONFIG=y | 173 | CONFIG_IKCONFIG=y |
| 179 | CONFIG_IKCONFIG_PROC=y | 174 | CONFIG_IKCONFIG_PROC=y |
| 180 | # CONFIG_RELAY is not set | 175 | # CONFIG_RELAY is not set |
| 181 | CONFIG_INITRAMFS_SOURCE="" | 176 | CONFIG_INITRAMFS_SOURCE="" |
| 182 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 177 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 178 | CONFIG_SYSCTL=y | ||
| 183 | CONFIG_EMBEDDED=y | 179 | CONFIG_EMBEDDED=y |
| 180 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 184 | CONFIG_KALLSYMS=y | 181 | CONFIG_KALLSYMS=y |
| 185 | # CONFIG_KALLSYMS_ALL is not set | 182 | # CONFIG_KALLSYMS_ALL is not set |
| 186 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 183 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -189,12 +186,12 @@ CONFIG_PRINTK=y | |||
| 189 | CONFIG_BUG=y | 186 | CONFIG_BUG=y |
| 190 | CONFIG_ELF_CORE=y | 187 | CONFIG_ELF_CORE=y |
| 191 | CONFIG_BASE_FULL=y | 188 | CONFIG_BASE_FULL=y |
| 192 | CONFIG_RT_MUTEXES=y | ||
| 193 | CONFIG_FUTEX=y | 189 | CONFIG_FUTEX=y |
| 194 | CONFIG_EPOLL=y | 190 | CONFIG_EPOLL=y |
| 195 | CONFIG_SHMEM=y | 191 | CONFIG_SHMEM=y |
| 196 | CONFIG_SLAB=y | 192 | CONFIG_SLAB=y |
| 197 | CONFIG_VM_EVENT_COUNTERS=y | 193 | CONFIG_VM_EVENT_COUNTERS=y |
| 194 | CONFIG_RT_MUTEXES=y | ||
| 198 | # CONFIG_TINY_SHMEM is not set | 195 | # CONFIG_TINY_SHMEM is not set |
| 199 | CONFIG_BASE_SMALL=0 | 196 | CONFIG_BASE_SMALL=0 |
| 200 | # CONFIG_SLOB is not set | 197 | # CONFIG_SLOB is not set |
| @@ -211,6 +208,7 @@ CONFIG_KMOD=y | |||
| 211 | # | 208 | # |
| 212 | # Block layer | 209 | # Block layer |
| 213 | # | 210 | # |
| 211 | CONFIG_BLOCK=y | ||
| 214 | # CONFIG_LBD is not set | 212 | # CONFIG_LBD is not set |
| 215 | # CONFIG_BLK_DEV_IO_TRACE is not set | 213 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 216 | # CONFIG_LSF is not set | 214 | # CONFIG_LSF is not set |
| @@ -231,8 +229,10 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| 231 | # | 229 | # |
| 232 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | 230 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) |
| 233 | # | 231 | # |
| 234 | CONFIG_HW_HAS_EISA=y | 232 | CONFIG_HW_HAS_PCI=y |
| 235 | # CONFIG_EISA is not set | 233 | CONFIG_PCI=y |
| 234 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
| 235 | # CONFIG_PCI_DEBUG is not set | ||
| 236 | CONFIG_MMU=y | 236 | CONFIG_MMU=y |
| 237 | 237 | ||
| 238 | # | 238 | # |
| @@ -243,6 +243,7 @@ CONFIG_MMU=y | |||
| 243 | # | 243 | # |
| 244 | # PCI Hotplug Support | 244 | # PCI Hotplug Support |
| 245 | # | 245 | # |
| 246 | # CONFIG_HOTPLUG_PCI is not set | ||
| 246 | 247 | ||
| 247 | # | 248 | # |
| 248 | # Executable file formats | 249 | # Executable file formats |
| @@ -265,6 +266,7 @@ CONFIG_PACKET=y | |||
| 265 | CONFIG_UNIX=y | 266 | CONFIG_UNIX=y |
| 266 | CONFIG_XFRM=y | 267 | CONFIG_XFRM=y |
| 267 | # CONFIG_XFRM_USER is not set | 268 | # CONFIG_XFRM_USER is not set |
| 269 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 268 | # CONFIG_NET_KEY is not set | 270 | # CONFIG_NET_KEY is not set |
| 269 | CONFIG_INET=y | 271 | CONFIG_INET=y |
| 270 | # CONFIG_IP_MULTICAST is not set | 272 | # CONFIG_IP_MULTICAST is not set |
| @@ -283,16 +285,18 @@ CONFIG_IP_PNP_BOOTP=y | |||
| 283 | # CONFIG_INET_IPCOMP is not set | 285 | # CONFIG_INET_IPCOMP is not set |
| 284 | # CONFIG_INET_XFRM_TUNNEL is not set | 286 | # CONFIG_INET_XFRM_TUNNEL is not set |
| 285 | # CONFIG_INET_TUNNEL is not set | 287 | # CONFIG_INET_TUNNEL is not set |
| 286 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 288 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 287 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 289 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 290 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 288 | CONFIG_INET_DIAG=y | 291 | CONFIG_INET_DIAG=y |
| 289 | CONFIG_INET_TCP_DIAG=y | 292 | CONFIG_INET_TCP_DIAG=y |
| 290 | # CONFIG_TCP_CONG_ADVANCED is not set | 293 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 291 | CONFIG_TCP_CONG_BIC=y | 294 | CONFIG_TCP_CONG_CUBIC=y |
| 295 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 292 | # CONFIG_IPV6 is not set | 296 | # CONFIG_IPV6 is not set |
| 293 | # CONFIG_INET6_XFRM_TUNNEL is not set | 297 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 294 | # CONFIG_INET6_TUNNEL is not set | 298 | # CONFIG_INET6_TUNNEL is not set |
| 295 | CONFIG_NETWORK_SECMARK=y | 299 | # CONFIG_NETWORK_SECMARK is not set |
| 296 | # CONFIG_NETFILTER is not set | 300 | # CONFIG_NETFILTER is not set |
| 297 | 301 | ||
| 298 | # | 302 | # |
| @@ -318,7 +322,6 @@ CONFIG_NETWORK_SECMARK=y | |||
| 318 | # CONFIG_ATALK is not set | 322 | # CONFIG_ATALK is not set |
| 319 | # CONFIG_X25 is not set | 323 | # CONFIG_X25 is not set |
| 320 | # CONFIG_LAPB is not set | 324 | # CONFIG_LAPB is not set |
| 321 | # CONFIG_NET_DIVERT is not set | ||
| 322 | # CONFIG_ECONET is not set | 325 | # CONFIG_ECONET is not set |
| 323 | # CONFIG_WAN_ROUTER is not set | 326 | # CONFIG_WAN_ROUTER is not set |
| 324 | 327 | ||
| @@ -371,13 +374,20 @@ CONFIG_FW_LOADER=y | |||
| 371 | # | 374 | # |
| 372 | # Block devices | 375 | # Block devices |
| 373 | # | 376 | # |
| 377 | # CONFIG_BLK_CPQ_DA is not set | ||
| 378 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 379 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 380 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 374 | # CONFIG_BLK_DEV_COW_COMMON is not set | 381 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| 375 | CONFIG_BLK_DEV_LOOP=y | 382 | CONFIG_BLK_DEV_LOOP=y |
| 376 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 383 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
| 377 | # CONFIG_BLK_DEV_NBD is not set | 384 | # CONFIG_BLK_DEV_NBD is not set |
| 385 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 386 | # CONFIG_BLK_DEV_UB is not set | ||
| 378 | CONFIG_BLK_DEV_RAM=y | 387 | CONFIG_BLK_DEV_RAM=y |
| 379 | CONFIG_BLK_DEV_RAM_COUNT=16 | 388 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 380 | CONFIG_BLK_DEV_RAM_SIZE=8192 | 389 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
| 390 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 381 | CONFIG_BLK_DEV_INITRD=y | 391 | CONFIG_BLK_DEV_INITRD=y |
| 382 | # CONFIG_CDROM_PKTCDVD is not set | 392 | # CONFIG_CDROM_PKTCDVD is not set |
| 383 | # CONFIG_ATA_OVER_ETH is not set | 393 | # CONFIG_ATA_OVER_ETH is not set |
| @@ -386,6 +396,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 386 | # ATA/ATAPI/MFM/RLL support | 396 | # ATA/ATAPI/MFM/RLL support |
| 387 | # | 397 | # |
| 388 | CONFIG_IDE=y | 398 | CONFIG_IDE=y |
| 399 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 389 | CONFIG_BLK_DEV_IDE=y | 400 | CONFIG_BLK_DEV_IDE=y |
| 390 | 401 | ||
| 391 | # | 402 | # |
| @@ -404,8 +415,39 @@ CONFIG_BLK_DEV_IDESCSI=y | |||
| 404 | # IDE chipset support/bugfixes | 415 | # IDE chipset support/bugfixes |
| 405 | # | 416 | # |
| 406 | CONFIG_IDE_GENERIC=y | 417 | CONFIG_IDE_GENERIC=y |
| 418 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 419 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
| 420 | CONFIG_BLK_DEV_OFFBOARD=y | ||
| 421 | CONFIG_BLK_DEV_GENERIC=y | ||
| 422 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 423 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 424 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 425 | # CONFIG_IDEDMA_PCI_AUTO is not set | ||
| 426 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 427 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 428 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 429 | # CONFIG_BLK_DEV_CMD64X is not set | ||
| 430 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 431 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 432 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 433 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 434 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 435 | CONFIG_BLK_DEV_HPT366=y | ||
| 436 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 437 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 438 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 439 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 440 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 441 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 442 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 443 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 444 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 445 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 446 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 447 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 407 | # CONFIG_IDE_ARM is not set | 448 | # CONFIG_IDE_ARM is not set |
| 408 | # CONFIG_BLK_DEV_IDEDMA is not set | 449 | CONFIG_BLK_DEV_IDEDMA=y |
| 450 | # CONFIG_IDEDMA_IVB is not set | ||
| 409 | # CONFIG_IDEDMA_AUTO is not set | 451 | # CONFIG_IDEDMA_AUTO is not set |
| 410 | # CONFIG_BLK_DEV_HD is not set | 452 | # CONFIG_BLK_DEV_HD is not set |
| 411 | 453 | ||
| @@ -414,6 +456,7 @@ CONFIG_IDE_GENERIC=y | |||
| 414 | # | 456 | # |
| 415 | # CONFIG_RAID_ATTRS is not set | 457 | # CONFIG_RAID_ATTRS is not set |
| 416 | CONFIG_SCSI=y | 458 | CONFIG_SCSI=y |
| 459 | CONFIG_SCSI_NETLINK=y | ||
| 417 | CONFIG_SCSI_PROC_FS=y | 460 | CONFIG_SCSI_PROC_FS=y |
| 418 | 461 | ||
| 419 | # | 462 | # |
| @@ -434,22 +477,54 @@ CONFIG_SCSI_CONSTANTS=y | |||
| 434 | # CONFIG_SCSI_LOGGING is not set | 477 | # CONFIG_SCSI_LOGGING is not set |
| 435 | 478 | ||
| 436 | # | 479 | # |
| 437 | # SCSI Transport Attributes | 480 | # SCSI Transports |
| 438 | # | 481 | # |
| 439 | # CONFIG_SCSI_SPI_ATTRS is not set | 482 | # CONFIG_SCSI_SPI_ATTRS is not set |
| 440 | CONFIG_SCSI_FC_ATTRS=y | 483 | CONFIG_SCSI_FC_ATTRS=y |
| 441 | CONFIG_SCSI_ISCSI_ATTRS=m | 484 | CONFIG_SCSI_ISCSI_ATTRS=m |
| 442 | # CONFIG_SCSI_SAS_ATTRS is not set | 485 | # CONFIG_SCSI_SAS_ATTRS is not set |
| 486 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 443 | 487 | ||
| 444 | # | 488 | # |
| 445 | # SCSI low-level drivers | 489 | # SCSI low-level drivers |
| 446 | # | 490 | # |
| 447 | CONFIG_ISCSI_TCP=m | 491 | CONFIG_ISCSI_TCP=m |
| 448 | # CONFIG_SGIWD93_SCSI is not set | 492 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
| 449 | # CONFIG_SCSI_SATA is not set | 493 | # CONFIG_SCSI_3W_9XXX is not set |
| 494 | # CONFIG_SCSI_ACARD is not set | ||
| 495 | # CONFIG_SCSI_AACRAID is not set | ||
| 496 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 497 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 498 | # CONFIG_SCSI_AIC79XX is not set | ||
| 499 | # CONFIG_SCSI_AIC94XX is not set | ||
| 500 | # CONFIG_SCSI_DPT_I2O is not set | ||
| 501 | # CONFIG_SCSI_ARCMSR is not set | ||
| 502 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 503 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 504 | # CONFIG_MEGARAID_SAS is not set | ||
| 505 | # CONFIG_SCSI_HPTIOP is not set | ||
| 506 | # CONFIG_SCSI_DMX3191D is not set | ||
| 507 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 508 | # CONFIG_SCSI_IPS is not set | ||
| 509 | # CONFIG_SCSI_INITIO is not set | ||
| 510 | # CONFIG_SCSI_INIA100 is not set | ||
| 511 | # CONFIG_SCSI_STEX is not set | ||
| 512 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
| 513 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
| 514 | # CONFIG_SCSI_QLA_FC is not set | ||
| 515 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 516 | # CONFIG_SCSI_LPFC is not set | ||
| 517 | # CONFIG_SCSI_DC395x is not set | ||
| 518 | # CONFIG_SCSI_DC390T is not set | ||
| 519 | # CONFIG_SCSI_NSP32 is not set | ||
| 450 | # CONFIG_SCSI_DEBUG is not set | 520 | # CONFIG_SCSI_DEBUG is not set |
| 451 | 521 | ||
| 452 | # | 522 | # |
| 523 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 524 | # | ||
| 525 | # CONFIG_ATA is not set | ||
| 526 | |||
| 527 | # | ||
| 453 | # Multi-device support (RAID and LVM) | 528 | # Multi-device support (RAID and LVM) |
| 454 | # | 529 | # |
| 455 | # CONFIG_MD is not set | 530 | # CONFIG_MD is not set |
| @@ -458,14 +533,19 @@ CONFIG_ISCSI_TCP=m | |||
| 458 | # Fusion MPT device support | 533 | # Fusion MPT device support |
| 459 | # | 534 | # |
| 460 | # CONFIG_FUSION is not set | 535 | # CONFIG_FUSION is not set |
| 536 | # CONFIG_FUSION_SPI is not set | ||
| 537 | # CONFIG_FUSION_FC is not set | ||
| 538 | # CONFIG_FUSION_SAS is not set | ||
| 461 | 539 | ||
| 462 | # | 540 | # |
| 463 | # IEEE 1394 (FireWire) support | 541 | # IEEE 1394 (FireWire) support |
| 464 | # | 542 | # |
| 543 | # CONFIG_IEEE1394 is not set | ||
| 465 | 544 | ||
| 466 | # | 545 | # |
| 467 | # I2O device support | 546 | # I2O device support |
| 468 | # | 547 | # |
| 548 | # CONFIG_I2O is not set | ||
| 469 | 549 | ||
| 470 | # | 550 | # |
| 471 | # Network device support | 551 | # Network device support |
| @@ -477,6 +557,11 @@ CONFIG_NETDEVICES=y | |||
| 477 | # CONFIG_TUN is not set | 557 | # CONFIG_TUN is not set |
| 478 | 558 | ||
| 479 | # | 559 | # |
| 560 | # ARCnet devices | ||
| 561 | # | ||
| 562 | # CONFIG_ARCNET is not set | ||
| 563 | |||
| 564 | # | ||
| 480 | # PHY device support | 565 | # PHY device support |
| 481 | # | 566 | # |
| 482 | # CONFIG_PHYLIB is not set | 567 | # CONFIG_PHYLIB is not set |
| @@ -486,20 +571,73 @@ CONFIG_NETDEVICES=y | |||
| 486 | # | 571 | # |
| 487 | CONFIG_NET_ETHERNET=y | 572 | CONFIG_NET_ETHERNET=y |
| 488 | CONFIG_MII=y | 573 | CONFIG_MII=y |
| 574 | # CONFIG_HAPPYMEAL is not set | ||
| 575 | # CONFIG_SUNGEM is not set | ||
| 576 | # CONFIG_CASSINI is not set | ||
| 577 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 489 | # CONFIG_DM9000 is not set | 578 | # CONFIG_DM9000 is not set |
| 490 | # CONFIG_SGISEEQ is not set | 579 | |
| 580 | # | ||
| 581 | # Tulip family network device support | ||
| 582 | # | ||
| 583 | # CONFIG_NET_TULIP is not set | ||
| 584 | # CONFIG_HP100 is not set | ||
| 585 | CONFIG_NET_PCI=y | ||
| 586 | # CONFIG_PCNET32 is not set | ||
| 587 | # CONFIG_AMD8111_ETH is not set | ||
| 588 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 589 | # CONFIG_B44 is not set | ||
| 590 | # CONFIG_FORCEDETH is not set | ||
| 591 | # CONFIG_DGRS is not set | ||
| 592 | # CONFIG_EEPRO100 is not set | ||
| 593 | # CONFIG_E100 is not set | ||
| 594 | # CONFIG_FEALNX is not set | ||
| 595 | # CONFIG_NATSEMI is not set | ||
| 596 | # CONFIG_NE2K_PCI is not set | ||
| 597 | # CONFIG_8139CP is not set | ||
| 598 | CONFIG_8139TOO=y | ||
| 599 | # CONFIG_8139TOO_PIO is not set | ||
| 600 | CONFIG_8139TOO_TUNE_TWISTER=y | ||
| 601 | CONFIG_8139TOO_8129=y | ||
| 602 | # CONFIG_8139_OLD_RX_RESET is not set | ||
| 603 | # CONFIG_SIS900 is not set | ||
| 604 | # CONFIG_EPIC100 is not set | ||
| 605 | # CONFIG_SUNDANCE is not set | ||
| 606 | # CONFIG_TLAN is not set | ||
| 607 | # CONFIG_VIA_RHINE is not set | ||
| 608 | # CONFIG_LAN_SAA9730 is not set | ||
| 491 | 609 | ||
| 492 | # | 610 | # |
| 493 | # Ethernet (1000 Mbit) | 611 | # Ethernet (1000 Mbit) |
| 494 | # | 612 | # |
| 613 | # CONFIG_ACENIC is not set | ||
| 614 | # CONFIG_DL2K is not set | ||
| 615 | # CONFIG_E1000 is not set | ||
| 616 | # CONFIG_NS83820 is not set | ||
| 617 | # CONFIG_HAMACHI is not set | ||
| 618 | # CONFIG_YELLOWFIN is not set | ||
| 619 | # CONFIG_R8169 is not set | ||
| 620 | # CONFIG_SIS190 is not set | ||
| 621 | # CONFIG_SKGE is not set | ||
| 622 | # CONFIG_SKY2 is not set | ||
| 623 | # CONFIG_SK98LIN is not set | ||
| 624 | # CONFIG_VIA_VELOCITY is not set | ||
| 625 | # CONFIG_TIGON3 is not set | ||
| 626 | # CONFIG_BNX2 is not set | ||
| 627 | # CONFIG_QLA3XXX is not set | ||
| 495 | 628 | ||
| 496 | # | 629 | # |
| 497 | # Ethernet (10000 Mbit) | 630 | # Ethernet (10000 Mbit) |
| 498 | # | 631 | # |
| 632 | # CONFIG_CHELSIO_T1 is not set | ||
| 633 | # CONFIG_IXGB is not set | ||
| 634 | # CONFIG_S2IO is not set | ||
| 635 | # CONFIG_MYRI10GE is not set | ||
| 499 | 636 | ||
| 500 | # | 637 | # |
| 501 | # Token Ring devices | 638 | # Token Ring devices |
| 502 | # | 639 | # |
| 640 | # CONFIG_TR is not set | ||
| 503 | 641 | ||
| 504 | # | 642 | # |
| 505 | # Wireless LAN (non-hamradio) | 643 | # Wireless LAN (non-hamradio) |
| @@ -510,8 +648,11 @@ CONFIG_MII=y | |||
| 510 | # Wan interfaces | 648 | # Wan interfaces |
| 511 | # | 649 | # |
| 512 | # CONFIG_WAN is not set | 650 | # CONFIG_WAN is not set |
| 651 | # CONFIG_FDDI is not set | ||
| 652 | # CONFIG_HIPPI is not set | ||
| 513 | # CONFIG_PPP is not set | 653 | # CONFIG_PPP is not set |
| 514 | # CONFIG_SLIP is not set | 654 | # CONFIG_SLIP is not set |
| 655 | # CONFIG_NET_FC is not set | ||
| 515 | # CONFIG_SHAPER is not set | 656 | # CONFIG_SHAPER is not set |
| 516 | # CONFIG_NETCONSOLE is not set | 657 | # CONFIG_NETCONSOLE is not set |
| 517 | # CONFIG_NETPOLL is not set | 658 | # CONFIG_NETPOLL is not set |
| @@ -531,6 +672,7 @@ CONFIG_MII=y | |||
| 531 | # Input device support | 672 | # Input device support |
| 532 | # | 673 | # |
| 533 | CONFIG_INPUT=y | 674 | CONFIG_INPUT=y |
| 675 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 534 | 676 | ||
| 535 | # | 677 | # |
| 536 | # Userland interfaces | 678 | # Userland interfaces |
| @@ -556,6 +698,7 @@ CONFIG_INPUT=y | |||
| 556 | CONFIG_SERIO=y | 698 | CONFIG_SERIO=y |
| 557 | # CONFIG_SERIO_I8042 is not set | 699 | # CONFIG_SERIO_I8042 is not set |
| 558 | # CONFIG_SERIO_SERPORT is not set | 700 | # CONFIG_SERIO_SERPORT is not set |
| 701 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 559 | CONFIG_SERIO_LIBPS2=y | 702 | CONFIG_SERIO_LIBPS2=y |
| 560 | # CONFIG_SERIO_RAW is not set | 703 | # CONFIG_SERIO_RAW is not set |
| 561 | # CONFIG_GAMEPORT is not set | 704 | # CONFIG_GAMEPORT is not set |
| @@ -566,7 +709,7 @@ CONFIG_SERIO_LIBPS2=y | |||
| 566 | CONFIG_VT=y | 709 | CONFIG_VT=y |
| 567 | CONFIG_VT_CONSOLE=y | 710 | CONFIG_VT_CONSOLE=y |
| 568 | CONFIG_HW_CONSOLE=y | 711 | CONFIG_HW_CONSOLE=y |
| 569 | CONFIG_VT_HW_CONSOLE_BINDING=y | 712 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 570 | # CONFIG_SERIAL_NONSTANDARD is not set | 713 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 571 | 714 | ||
| 572 | # | 715 | # |
| @@ -577,7 +720,8 @@ CONFIG_VT_HW_CONSOLE_BINDING=y | |||
| 577 | # | 720 | # |
| 578 | # Non-8250 serial port support | 721 | # Non-8250 serial port support |
| 579 | # | 722 | # |
| 580 | # CONFIG_SERIAL_IP22_ZILOG is not set | 723 | # CONFIG_SERIAL_IP3106 is not set |
| 724 | # CONFIG_SERIAL_JSM is not set | ||
| 581 | CONFIG_UNIX98_PTYS=y | 725 | CONFIG_UNIX98_PTYS=y |
| 582 | CONFIG_LEGACY_PTYS=y | 726 | CONFIG_LEGACY_PTYS=y |
| 583 | CONFIG_LEGACY_PTY_COUNT=256 | 727 | CONFIG_LEGACY_PTY_COUNT=256 |
| @@ -591,16 +735,17 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| 591 | # Watchdog Cards | 735 | # Watchdog Cards |
| 592 | # | 736 | # |
| 593 | # CONFIG_WATCHDOG is not set | 737 | # CONFIG_WATCHDOG is not set |
| 594 | # CONFIG_HW_RANDOM is not set | 738 | CONFIG_HW_RANDOM=y |
| 595 | # CONFIG_RTC is not set | 739 | # CONFIG_RTC is not set |
| 596 | # CONFIG_SGI_DS1286 is not set | ||
| 597 | # CONFIG_GEN_RTC is not set | 740 | # CONFIG_GEN_RTC is not set |
| 598 | # CONFIG_DTLK is not set | 741 | # CONFIG_DTLK is not set |
| 599 | # CONFIG_R3964 is not set | 742 | # CONFIG_R3964 is not set |
| 743 | # CONFIG_APPLICOM is not set | ||
| 600 | 744 | ||
| 601 | # | 745 | # |
| 602 | # Ftape, the floppy tape device driver | 746 | # Ftape, the floppy tape device driver |
| 603 | # | 747 | # |
| 748 | # CONFIG_DRM is not set | ||
| 604 | # CONFIG_RAW_DRIVER is not set | 749 | # CONFIG_RAW_DRIVER is not set |
| 605 | 750 | ||
| 606 | # | 751 | # |
| @@ -631,35 +776,37 @@ CONFIG_HWMON=y | |||
| 631 | # CONFIG_HWMON_VID is not set | 776 | # CONFIG_HWMON_VID is not set |
| 632 | # CONFIG_SENSORS_ABITUGURU is not set | 777 | # CONFIG_SENSORS_ABITUGURU is not set |
| 633 | # CONFIG_SENSORS_F71805F is not set | 778 | # CONFIG_SENSORS_F71805F is not set |
| 779 | # CONFIG_SENSORS_VT1211 is not set | ||
| 634 | # CONFIG_HWMON_DEBUG_CHIP is not set | 780 | # CONFIG_HWMON_DEBUG_CHIP is not set |
| 635 | 781 | ||
| 636 | # | 782 | # |
| 637 | # Misc devices | 783 | # Misc devices |
| 638 | # | 784 | # |
| 785 | # CONFIG_TIFM_CORE is not set | ||
| 639 | 786 | ||
| 640 | # | 787 | # |
| 641 | # Multimedia devices | 788 | # Multimedia devices |
| 642 | # | 789 | # |
| 643 | # CONFIG_VIDEO_DEV is not set | 790 | # CONFIG_VIDEO_DEV is not set |
| 644 | CONFIG_VIDEO_V4L2=y | ||
| 645 | 791 | ||
| 646 | # | 792 | # |
| 647 | # Digital Video Broadcasting Devices | 793 | # Digital Video Broadcasting Devices |
| 648 | # | 794 | # |
| 649 | # CONFIG_DVB is not set | 795 | # CONFIG_DVB is not set |
| 796 | # CONFIG_USB_DABUSB is not set | ||
| 650 | 797 | ||
| 651 | # | 798 | # |
| 652 | # Graphics support | 799 | # Graphics support |
| 653 | # | 800 | # |
| 654 | # CONFIG_FIRMWARE_EDID is not set | 801 | CONFIG_FIRMWARE_EDID=y |
| 655 | # CONFIG_FB is not set | 802 | # CONFIG_FB is not set |
| 656 | 803 | ||
| 657 | # | 804 | # |
| 658 | # Console display driver support | 805 | # Console display driver support |
| 659 | # | 806 | # |
| 660 | # CONFIG_VGA_CONSOLE is not set | 807 | # CONFIG_VGA_CONSOLE is not set |
| 661 | # CONFIG_SGI_NEWPORT_CONSOLE is not set | ||
| 662 | CONFIG_DUMMY_CONSOLE=y | 808 | CONFIG_DUMMY_CONSOLE=y |
| 809 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 663 | 810 | ||
| 664 | # | 811 | # |
| 665 | # Sound | 812 | # Sound |
| @@ -669,15 +816,131 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 669 | # | 816 | # |
| 670 | # USB support | 817 | # USB support |
| 671 | # | 818 | # |
| 672 | # CONFIG_USB_ARCH_HAS_HCD is not set | 819 | CONFIG_USB_ARCH_HAS_HCD=y |
| 673 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 820 | CONFIG_USB_ARCH_HAS_OHCI=y |
| 674 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 821 | CONFIG_USB_ARCH_HAS_EHCI=y |
| 822 | CONFIG_USB=y | ||
| 823 | # CONFIG_USB_DEBUG is not set | ||
| 824 | |||
| 825 | # | ||
| 826 | # Miscellaneous USB options | ||
| 827 | # | ||
| 828 | # CONFIG_USB_DEVICEFS is not set | ||
| 829 | # CONFIG_USB_BANDWIDTH is not set | ||
| 830 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 831 | # CONFIG_USB_OTG is not set | ||
| 832 | |||
| 833 | # | ||
| 834 | # USB Host Controller Drivers | ||
| 835 | # | ||
| 836 | # CONFIG_USB_EHCI_HCD is not set | ||
| 837 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 838 | CONFIG_USB_OHCI_HCD=y | ||
| 839 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | ||
| 840 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 841 | # CONFIG_USB_UHCI_HCD is not set | ||
| 842 | # CONFIG_USB_SL811_HCD is not set | ||
| 843 | |||
| 844 | # | ||
| 845 | # USB Device Class drivers | ||
| 846 | # | ||
| 847 | # CONFIG_USB_ACM is not set | ||
| 848 | # CONFIG_USB_PRINTER is not set | ||
| 675 | 849 | ||
| 676 | # | 850 | # |
| 677 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 851 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 678 | # | 852 | # |
| 679 | 853 | ||
| 680 | # | 854 | # |
| 855 | # may also be needed; see USB_STORAGE Help for more information | ||
| 856 | # | ||
| 857 | CONFIG_USB_STORAGE=y | ||
| 858 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 859 | CONFIG_USB_STORAGE_DATAFAB=y | ||
| 860 | CONFIG_USB_STORAGE_FREECOM=y | ||
| 861 | CONFIG_USB_STORAGE_ISD200=y | ||
| 862 | CONFIG_USB_STORAGE_DPCM=y | ||
| 863 | CONFIG_USB_STORAGE_USBAT=y | ||
| 864 | CONFIG_USB_STORAGE_SDDR09=y | ||
| 865 | CONFIG_USB_STORAGE_SDDR55=y | ||
| 866 | CONFIG_USB_STORAGE_JUMPSHOT=y | ||
| 867 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 868 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 869 | # CONFIG_USB_LIBUSUAL is not set | ||
| 870 | |||
| 871 | # | ||
| 872 | # USB Input Devices | ||
| 873 | # | ||
| 874 | # CONFIG_USB_HID is not set | ||
| 875 | |||
| 876 | # | ||
| 877 | # USB HID Boot Protocol drivers | ||
| 878 | # | ||
| 879 | # CONFIG_USB_KBD is not set | ||
| 880 | # CONFIG_USB_MOUSE is not set | ||
| 881 | # CONFIG_USB_AIPTEK is not set | ||
| 882 | # CONFIG_USB_WACOM is not set | ||
| 883 | # CONFIG_USB_ACECAD is not set | ||
| 884 | # CONFIG_USB_KBTAB is not set | ||
| 885 | # CONFIG_USB_POWERMATE is not set | ||
| 886 | # CONFIG_USB_TOUCHSCREEN is not set | ||
| 887 | # CONFIG_USB_YEALINK is not set | ||
| 888 | # CONFIG_USB_XPAD is not set | ||
| 889 | # CONFIG_USB_ATI_REMOTE is not set | ||
| 890 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
| 891 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
| 892 | # CONFIG_USB_APPLETOUCH is not set | ||
| 893 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 894 | |||
| 895 | # | ||
| 896 | # USB Imaging devices | ||
| 897 | # | ||
| 898 | # CONFIG_USB_MDC800 is not set | ||
| 899 | # CONFIG_USB_MICROTEK is not set | ||
| 900 | |||
| 901 | # | ||
| 902 | # USB Network Adapters | ||
| 903 | # | ||
| 904 | # CONFIG_USB_CATC is not set | ||
| 905 | # CONFIG_USB_KAWETH is not set | ||
| 906 | # CONFIG_USB_PEGASUS is not set | ||
| 907 | # CONFIG_USB_RTL8150 is not set | ||
| 908 | # CONFIG_USB_USBNET is not set | ||
| 909 | CONFIG_USB_MON=y | ||
| 910 | |||
| 911 | # | ||
| 912 | # USB port drivers | ||
| 913 | # | ||
| 914 | |||
| 915 | # | ||
| 916 | # USB Serial Converter support | ||
| 917 | # | ||
| 918 | # CONFIG_USB_SERIAL is not set | ||
| 919 | |||
| 920 | # | ||
| 921 | # USB Miscellaneous drivers | ||
| 922 | # | ||
| 923 | # CONFIG_USB_EMI62 is not set | ||
| 924 | # CONFIG_USB_EMI26 is not set | ||
| 925 | # CONFIG_USB_ADUTUX is not set | ||
| 926 | # CONFIG_USB_AUERSWALD is not set | ||
| 927 | # CONFIG_USB_RIO500 is not set | ||
| 928 | # CONFIG_USB_LEGOTOWER is not set | ||
| 929 | # CONFIG_USB_LCD is not set | ||
| 930 | # CONFIG_USB_LED is not set | ||
| 931 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 932 | # CONFIG_USB_CYTHERM is not set | ||
| 933 | # CONFIG_USB_PHIDGET is not set | ||
| 934 | # CONFIG_USB_IDMOUSE is not set | ||
| 935 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 936 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 937 | # CONFIG_USB_LD is not set | ||
| 938 | |||
| 939 | # | ||
| 940 | # USB DSL modem support | ||
| 941 | # | ||
| 942 | |||
| 943 | # | ||
| 681 | # USB Gadget Support | 944 | # USB Gadget Support |
| 682 | # | 945 | # |
| 683 | # CONFIG_USB_GADGET is not set | 946 | # CONFIG_USB_GADGET is not set |
| @@ -703,6 +966,7 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 703 | # | 966 | # |
| 704 | # InfiniBand support | 967 | # InfiniBand support |
| 705 | # | 968 | # |
| 969 | # CONFIG_INFINIBAND is not set | ||
| 706 | 970 | ||
| 707 | # | 971 | # |
| 708 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | 972 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
| @@ -733,10 +997,12 @@ CONFIG_EXT2_FS=y | |||
| 733 | # CONFIG_EXT2_FS_XATTR is not set | 997 | # CONFIG_EXT2_FS_XATTR is not set |
| 734 | # CONFIG_EXT2_FS_XIP is not set | 998 | # CONFIG_EXT2_FS_XIP is not set |
| 735 | # CONFIG_EXT3_FS is not set | 999 | # CONFIG_EXT3_FS is not set |
| 1000 | # CONFIG_EXT4DEV_FS is not set | ||
| 736 | # CONFIG_REISERFS_FS is not set | 1001 | # CONFIG_REISERFS_FS is not set |
| 737 | # CONFIG_JFS_FS is not set | 1002 | # CONFIG_JFS_FS is not set |
| 738 | # CONFIG_FS_POSIX_ACL is not set | 1003 | # CONFIG_FS_POSIX_ACL is not set |
| 739 | # CONFIG_XFS_FS is not set | 1004 | # CONFIG_XFS_FS is not set |
| 1005 | # CONFIG_GFS2_FS is not set | ||
| 740 | # CONFIG_OCFS2_FS is not set | 1006 | # CONFIG_OCFS2_FS is not set |
| 741 | # CONFIG_MINIX_FS is not set | 1007 | # CONFIG_MINIX_FS is not set |
| 742 | # CONFIG_ROMFS_FS is not set | 1008 | # CONFIG_ROMFS_FS is not set |
| @@ -769,8 +1035,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 769 | # | 1035 | # |
| 770 | CONFIG_PROC_FS=y | 1036 | CONFIG_PROC_FS=y |
| 771 | # CONFIG_PROC_KCORE is not set | 1037 | # CONFIG_PROC_KCORE is not set |
| 1038 | CONFIG_PROC_SYSCTL=y | ||
| 772 | CONFIG_SYSFS=y | 1039 | CONFIG_SYSFS=y |
| 773 | CONFIG_TMPFS=y | 1040 | CONFIG_TMPFS=y |
| 1041 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 774 | # CONFIG_HUGETLB_PAGE is not set | 1042 | # CONFIG_HUGETLB_PAGE is not set |
| 775 | CONFIG_RAMFS=y | 1043 | CONFIG_RAMFS=y |
| 776 | # CONFIG_CONFIGFS_FS is not set | 1044 | # CONFIG_CONFIGFS_FS is not set |
| @@ -813,7 +1081,6 @@ CONFIG_SUNRPC=y | |||
| 813 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1081 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 814 | # CONFIG_SMB_FS is not set | 1082 | # CONFIG_SMB_FS is not set |
| 815 | # CONFIG_CIFS is not set | 1083 | # CONFIG_CIFS is not set |
| 816 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 817 | # CONFIG_NCP_FS is not set | 1084 | # CONFIG_NCP_FS is not set |
| 818 | # CONFIG_CODA_FS is not set | 1085 | # CONFIG_CODA_FS is not set |
| 819 | # CONFIG_AFS_FS is not set | 1086 | # CONFIG_AFS_FS is not set |
| @@ -824,7 +1091,6 @@ CONFIG_SUNRPC=y | |||
| 824 | # | 1091 | # |
| 825 | # CONFIG_PARTITION_ADVANCED is not set | 1092 | # CONFIG_PARTITION_ADVANCED is not set |
| 826 | CONFIG_MSDOS_PARTITION=y | 1093 | CONFIG_MSDOS_PARTITION=y |
| 827 | CONFIG_SGI_PARTITION=y | ||
| 828 | 1094 | ||
| 829 | # | 1095 | # |
| 830 | # Native Language Support | 1096 | # Native Language Support |
| @@ -880,6 +1146,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 880 | # | 1146 | # |
| 881 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 1147 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 882 | # CONFIG_PRINTK_TIME is not set | 1148 | # CONFIG_PRINTK_TIME is not set |
| 1149 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 883 | CONFIG_MAGIC_SYSRQ=y | 1150 | CONFIG_MAGIC_SYSRQ=y |
| 884 | # CONFIG_UNUSED_SYMBOLS is not set | 1151 | # CONFIG_UNUSED_SYMBOLS is not set |
| 885 | CONFIG_DEBUG_KERNEL=y | 1152 | CONFIG_DEBUG_KERNEL=y |
| @@ -893,13 +1160,17 @@ CONFIG_DEBUG_SLAB=y | |||
| 893 | # CONFIG_DEBUG_SPINLOCK is not set | 1160 | # CONFIG_DEBUG_SPINLOCK is not set |
| 894 | CONFIG_DEBUG_MUTEXES=y | 1161 | CONFIG_DEBUG_MUTEXES=y |
| 895 | # CONFIG_DEBUG_RWSEMS is not set | 1162 | # CONFIG_DEBUG_RWSEMS is not set |
| 1163 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1164 | # CONFIG_PROVE_LOCKING is not set | ||
| 896 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1165 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 897 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1166 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 898 | # CONFIG_DEBUG_KOBJECT is not set | 1167 | # CONFIG_DEBUG_KOBJECT is not set |
| 899 | # CONFIG_DEBUG_INFO is not set | 1168 | # CONFIG_DEBUG_INFO is not set |
| 900 | # CONFIG_DEBUG_FS is not set | 1169 | # CONFIG_DEBUG_FS is not set |
| 901 | # CONFIG_DEBUG_VM is not set | 1170 | # CONFIG_DEBUG_VM is not set |
| 1171 | # CONFIG_DEBUG_LIST is not set | ||
| 902 | CONFIG_FORCED_INLINING=y | 1172 | CONFIG_FORCED_INLINING=y |
| 1173 | # CONFIG_HEADERS_CHECK is not set | ||
| 903 | # CONFIG_RCU_TORTURE_TEST is not set | 1174 | # CONFIG_RCU_TORTURE_TEST is not set |
| 904 | CONFIG_CROSSCOMPILE=y | 1175 | CONFIG_CROSSCOMPILE=y |
| 905 | CONFIG_CMDLINE="console=ttyS1,38400n8 kgdb=ttyS0 root=/dev/nfs ip=bootp" | 1176 | CONFIG_CMDLINE="console=ttyS1,38400n8 kgdb=ttyS0 root=/dev/nfs ip=bootp" |
| @@ -918,6 +1189,9 @@ CONFIG_CMDLINE="console=ttyS1,38400n8 kgdb=ttyS0 root=/dev/nfs ip=bootp" | |||
| 918 | # Cryptographic options | 1189 | # Cryptographic options |
| 919 | # | 1190 | # |
| 920 | CONFIG_CRYPTO=y | 1191 | CONFIG_CRYPTO=y |
| 1192 | CONFIG_CRYPTO_ALGAPI=m | ||
| 1193 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1194 | CONFIG_CRYPTO_MANAGER=m | ||
| 921 | # CONFIG_CRYPTO_HMAC is not set | 1195 | # CONFIG_CRYPTO_HMAC is not set |
| 922 | # CONFIG_CRYPTO_NULL is not set | 1196 | # CONFIG_CRYPTO_NULL is not set |
| 923 | # CONFIG_CRYPTO_MD4 is not set | 1197 | # CONFIG_CRYPTO_MD4 is not set |
| @@ -927,6 +1201,8 @@ CONFIG_CRYPTO_MD5=m | |||
| 927 | # CONFIG_CRYPTO_SHA512 is not set | 1201 | # CONFIG_CRYPTO_SHA512 is not set |
| 928 | # CONFIG_CRYPTO_WP512 is not set | 1202 | # CONFIG_CRYPTO_WP512 is not set |
| 929 | # CONFIG_CRYPTO_TGR192 is not set | 1203 | # CONFIG_CRYPTO_TGR192 is not set |
| 1204 | CONFIG_CRYPTO_ECB=m | ||
| 1205 | CONFIG_CRYPTO_CBC=m | ||
| 930 | # CONFIG_CRYPTO_DES is not set | 1206 | # CONFIG_CRYPTO_DES is not set |
| 931 | # CONFIG_CRYPTO_BLOWFISH is not set | 1207 | # CONFIG_CRYPTO_BLOWFISH is not set |
| 932 | # CONFIG_CRYPTO_TWOFISH is not set | 1208 | # CONFIG_CRYPTO_TWOFISH is not set |
diff --git a/arch/mips/configs/pnx8550-v2pci_defconfig b/arch/mips/configs/pnx8550-v2pci_defconfig index e93266b37dd9..64b9fbf44a64 100644 --- a/arch/mips/configs/pnx8550-v2pci_defconfig +++ b/arch/mips/configs/pnx8550-v2pci_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.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Thu Jul 6 10:04:18 2006 | 4 | # Sat Oct 14 23:12:15 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -25,8 +25,6 @@ CONFIG_MIPS=y | |||
| 25 | # CONFIG_MIPS_COBALT is not set | 25 | # CONFIG_MIPS_COBALT is not set |
| 26 | # CONFIG_MACH_DECSTATION is not set | 26 | # CONFIG_MACH_DECSTATION is not set |
| 27 | # CONFIG_MIPS_EV64120 is not set | 27 | # CONFIG_MIPS_EV64120 is not set |
| 28 | # CONFIG_MIPS_IVR is not set | ||
| 29 | # CONFIG_MIPS_ITE8172 is not set | ||
| 30 | # CONFIG_MACH_JAZZ is not set | 28 | # CONFIG_MACH_JAZZ is not set |
| 31 | # CONFIG_LASAT is not set | 29 | # CONFIG_LASAT is not set |
| 32 | # CONFIG_MIPS_ATLAS is not set | 30 | # CONFIG_MIPS_ATLAS is not set |
| @@ -40,14 +38,14 @@ CONFIG_MIPS=y | |||
| 40 | # CONFIG_MOMENCO_OCELOT_C is not set | 38 | # CONFIG_MOMENCO_OCELOT_C is not set |
| 41 | # CONFIG_MOMENCO_OCELOT_G is not set | 39 | # CONFIG_MOMENCO_OCELOT_G is not set |
| 42 | # CONFIG_MIPS_XXS1500 is not set | 40 | # CONFIG_MIPS_XXS1500 is not set |
| 43 | # CONFIG_PNX8550_V2PCI is not set | 41 | CONFIG_PNX8550_V2PCI=y |
| 44 | # CONFIG_PNX8550_JBS is not set | 42 | # CONFIG_PNX8550_JBS is not set |
| 45 | # CONFIG_DDB5477 is not set | 43 | # CONFIG_DDB5477 is not set |
| 46 | # CONFIG_MACH_VR41XX is not set | 44 | # CONFIG_MACH_VR41XX is not set |
| 47 | # CONFIG_PMC_YOSEMITE is not set | 45 | # CONFIG_PMC_YOSEMITE is not set |
| 48 | # CONFIG_QEMU is not set | 46 | # CONFIG_QEMU is not set |
| 49 | # CONFIG_MARKEINS is not set | 47 | # CONFIG_MARKEINS is not set |
| 50 | CONFIG_SGI_IP22=y | 48 | # CONFIG_SGI_IP22 is not set |
| 51 | # CONFIG_SGI_IP27 is not set | 49 | # CONFIG_SGI_IP27 is not set |
| 52 | # CONFIG_SGI_IP32 is not set | 50 | # CONFIG_SGI_IP32 is not set |
| 53 | # CONFIG_SIBYTE_BIGSUR is not set | 51 | # CONFIG_SIBYTE_BIGSUR is not set |
| @@ -67,25 +65,21 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
| 67 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 65 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| 68 | CONFIG_GENERIC_HWEIGHT=y | 66 | CONFIG_GENERIC_HWEIGHT=y |
| 69 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 67 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 68 | CONFIG_GENERIC_TIME=y | ||
| 70 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 69 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
| 71 | CONFIG_ARC=y | ||
| 72 | CONFIG_DMA_NONCOHERENT=y | 70 | CONFIG_DMA_NONCOHERENT=y |
| 73 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 71 | CONFIG_DMA_NEED_PCI_MAP_STATE=y |
| 74 | CONFIG_CPU_BIG_ENDIAN=y | 72 | # CONFIG_CPU_BIG_ENDIAN is not set |
| 75 | # CONFIG_CPU_LITTLE_ENDIAN is not set | 73 | CONFIG_CPU_LITTLE_ENDIAN=y |
| 76 | CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y | 74 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y |
| 77 | CONFIG_IRQ_CPU=y | 75 | CONFIG_PNX8550=y |
| 78 | CONFIG_SWAP_IO_SPACE=y | 76 | CONFIG_SOC_PNX8550=y |
| 79 | CONFIG_ARC32=y | ||
| 80 | CONFIG_BOOT_ELF32=y | ||
| 81 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | 77 | CONFIG_MIPS_L1_CACHE_SHIFT=5 |
| 82 | # CONFIG_ARC_CONSOLE is not set | ||
| 83 | CONFIG_ARC_PROMLIB=y | ||
| 84 | 78 | ||
| 85 | # | 79 | # |
| 86 | # CPU selection | 80 | # CPU selection |
| 87 | # | 81 | # |
| 88 | # CONFIG_CPU_MIPS32_R1 is not set | 82 | CONFIG_CPU_MIPS32_R1=y |
| 89 | # CONFIG_CPU_MIPS32_R2 is not set | 83 | # CONFIG_CPU_MIPS32_R2 is not set |
| 90 | # CONFIG_CPU_MIPS64_R1 is not set | 84 | # CONFIG_CPU_MIPS64_R1 is not set |
| 91 | # CONFIG_CPU_MIPS64_R2 is not set | 85 | # CONFIG_CPU_MIPS64_R2 is not set |
| @@ -93,7 +87,7 @@ CONFIG_ARC_PROMLIB=y | |||
| 93 | # CONFIG_CPU_TX39XX is not set | 87 | # CONFIG_CPU_TX39XX is not set |
| 94 | # CONFIG_CPU_VR41XX is not set | 88 | # CONFIG_CPU_VR41XX is not set |
| 95 | # CONFIG_CPU_R4300 is not set | 89 | # CONFIG_CPU_R4300 is not set |
| 96 | CONFIG_CPU_R4X00=y | 90 | # CONFIG_CPU_R4X00 is not set |
| 97 | # CONFIG_CPU_TX49XX is not set | 91 | # CONFIG_CPU_TX49XX is not set |
| 98 | # CONFIG_CPU_R5000 is not set | 92 | # CONFIG_CPU_R5000 is not set |
| 99 | # CONFIG_CPU_R5432 is not set | 93 | # CONFIG_CPU_R5432 is not set |
| @@ -104,12 +98,11 @@ CONFIG_CPU_R4X00=y | |||
| 104 | # CONFIG_CPU_RM7000 is not set | 98 | # CONFIG_CPU_RM7000 is not set |
| 105 | # CONFIG_CPU_RM9000 is not set | 99 | # CONFIG_CPU_RM9000 is not set |
| 106 | # CONFIG_CPU_SB1 is not set | 100 | # CONFIG_CPU_SB1 is not set |
| 107 | CONFIG_SYS_HAS_CPU_R4X00=y | 101 | CONFIG_SYS_HAS_CPU_MIPS32_R1=y |
| 108 | CONFIG_SYS_HAS_CPU_R5000=y | 102 | CONFIG_CPU_MIPS32=y |
| 103 | CONFIG_CPU_MIPSR1=y | ||
| 109 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | 104 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y |
| 110 | CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y | ||
| 111 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | 105 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y |
| 112 | CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y | ||
| 113 | 106 | ||
| 114 | # | 107 | # |
| 115 | # Kernel type | 108 | # Kernel type |
| @@ -120,17 +113,17 @@ CONFIG_PAGE_SIZE_4KB=y | |||
| 120 | # CONFIG_PAGE_SIZE_8KB is not set | 113 | # CONFIG_PAGE_SIZE_8KB is not set |
| 121 | # CONFIG_PAGE_SIZE_16KB is not set | 114 | # CONFIG_PAGE_SIZE_16KB is not set |
| 122 | # CONFIG_PAGE_SIZE_64KB is not set | 115 | # CONFIG_PAGE_SIZE_64KB is not set |
| 123 | CONFIG_BOARD_SCACHE=y | 116 | CONFIG_CPU_HAS_PREFETCH=y |
| 124 | CONFIG_IP22_CPU_SCACHE=y | ||
| 125 | CONFIG_MIPS_MT_DISABLED=y | 117 | CONFIG_MIPS_MT_DISABLED=y |
| 126 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 127 | # CONFIG_MIPS_MT_SMP is not set | 118 | # CONFIG_MIPS_MT_SMP is not set |
| 119 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 128 | # CONFIG_MIPS_VPE_LOADER is not set | 120 | # CONFIG_MIPS_VPE_LOADER is not set |
| 129 | # CONFIG_64BIT_PHYS_ADDR is not set | 121 | # CONFIG_64BIT_PHYS_ADDR is not set |
| 130 | CONFIG_CPU_HAS_LLSC=y | 122 | CONFIG_CPU_HAS_LLSC=y |
| 131 | CONFIG_CPU_HAS_SYNC=y | 123 | CONFIG_CPU_HAS_SYNC=y |
| 132 | CONFIG_GENERIC_HARDIRQS=y | 124 | CONFIG_GENERIC_HARDIRQS=y |
| 133 | CONFIG_GENERIC_IRQ_PROBE=y | 125 | CONFIG_GENERIC_IRQ_PROBE=y |
| 126 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | ||
| 134 | CONFIG_ARCH_FLATMEM_ENABLE=y | 127 | CONFIG_ARCH_FLATMEM_ENABLE=y |
| 135 | CONFIG_SELECT_MEMORY_MODEL=y | 128 | CONFIG_SELECT_MEMORY_MODEL=y |
| 136 | CONFIG_FLATMEM_MANUAL=y | 129 | CONFIG_FLATMEM_MANUAL=y |
| @@ -144,12 +137,12 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | |||
| 144 | # CONFIG_HZ_48 is not set | 137 | # CONFIG_HZ_48 is not set |
| 145 | # CONFIG_HZ_100 is not set | 138 | # CONFIG_HZ_100 is not set |
| 146 | # CONFIG_HZ_128 is not set | 139 | # CONFIG_HZ_128 is not set |
| 147 | # CONFIG_HZ_250 is not set | 140 | CONFIG_HZ_250=y |
| 148 | # CONFIG_HZ_256 is not set | 141 | # CONFIG_HZ_256 is not set |
| 149 | CONFIG_HZ_1000=y | 142 | # CONFIG_HZ_1000 is not set |
| 150 | # CONFIG_HZ_1024 is not set | 143 | # CONFIG_HZ_1024 is not set |
| 151 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y | 144 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y |
| 152 | CONFIG_HZ=1000 | 145 | CONFIG_HZ=250 |
| 153 | CONFIG_PREEMPT_NONE=y | 146 | CONFIG_PREEMPT_NONE=y |
| 154 | # CONFIG_PREEMPT_VOLUNTARY is not set | 147 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 155 | # CONFIG_PREEMPT is not set | 148 | # CONFIG_PREEMPT is not set |
| @@ -171,16 +164,20 @@ CONFIG_LOCALVERSION="" | |||
| 171 | CONFIG_LOCALVERSION_AUTO=y | 164 | CONFIG_LOCALVERSION_AUTO=y |
| 172 | CONFIG_SWAP=y | 165 | CONFIG_SWAP=y |
| 173 | CONFIG_SYSVIPC=y | 166 | CONFIG_SYSVIPC=y |
| 167 | # CONFIG_IPC_NS is not set | ||
| 174 | # CONFIG_POSIX_MQUEUE is not set | 168 | # CONFIG_POSIX_MQUEUE is not set |
| 175 | # CONFIG_BSD_PROCESS_ACCT is not set | 169 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 176 | CONFIG_SYSCTL=y | 170 | # CONFIG_TASKSTATS is not set |
| 171 | # CONFIG_UTS_NS is not set | ||
| 177 | # CONFIG_AUDIT is not set | 172 | # CONFIG_AUDIT is not set |
| 178 | CONFIG_IKCONFIG=y | 173 | CONFIG_IKCONFIG=y |
| 179 | CONFIG_IKCONFIG_PROC=y | 174 | CONFIG_IKCONFIG_PROC=y |
| 180 | # CONFIG_RELAY is not set | 175 | # CONFIG_RELAY is not set |
| 181 | CONFIG_INITRAMFS_SOURCE="" | 176 | CONFIG_INITRAMFS_SOURCE="" |
| 182 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 177 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 178 | CONFIG_SYSCTL=y | ||
| 183 | CONFIG_EMBEDDED=y | 179 | CONFIG_EMBEDDED=y |
| 180 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 184 | CONFIG_KALLSYMS=y | 181 | CONFIG_KALLSYMS=y |
| 185 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 182 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| 186 | CONFIG_HOTPLUG=y | 183 | CONFIG_HOTPLUG=y |
| @@ -188,12 +185,12 @@ CONFIG_PRINTK=y | |||
| 188 | CONFIG_BUG=y | 185 | CONFIG_BUG=y |
| 189 | CONFIG_ELF_CORE=y | 186 | CONFIG_ELF_CORE=y |
| 190 | CONFIG_BASE_FULL=y | 187 | CONFIG_BASE_FULL=y |
| 191 | CONFIG_RT_MUTEXES=y | ||
| 192 | CONFIG_FUTEX=y | 188 | CONFIG_FUTEX=y |
| 193 | CONFIG_EPOLL=y | 189 | CONFIG_EPOLL=y |
| 194 | CONFIG_SHMEM=y | 190 | CONFIG_SHMEM=y |
| 195 | CONFIG_SLAB=y | 191 | CONFIG_SLAB=y |
| 196 | CONFIG_VM_EVENT_COUNTERS=y | 192 | CONFIG_VM_EVENT_COUNTERS=y |
| 193 | CONFIG_RT_MUTEXES=y | ||
| 197 | # CONFIG_TINY_SHMEM is not set | 194 | # CONFIG_TINY_SHMEM is not set |
| 198 | CONFIG_BASE_SMALL=0 | 195 | CONFIG_BASE_SMALL=0 |
| 199 | # CONFIG_SLOB is not set | 196 | # CONFIG_SLOB is not set |
| @@ -210,6 +207,7 @@ CONFIG_KMOD=y | |||
| 210 | # | 207 | # |
| 211 | # Block layer | 208 | # Block layer |
| 212 | # | 209 | # |
| 210 | CONFIG_BLOCK=y | ||
| 213 | # CONFIG_LBD is not set | 211 | # CONFIG_LBD is not set |
| 214 | # CONFIG_BLK_DEV_IO_TRACE is not set | 212 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 215 | # CONFIG_LSF is not set | 213 | # CONFIG_LSF is not set |
| @@ -230,8 +228,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| 230 | # | 228 | # |
| 231 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | 229 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) |
| 232 | # | 230 | # |
| 233 | CONFIG_HW_HAS_EISA=y | 231 | CONFIG_HW_HAS_PCI=y |
| 234 | # CONFIG_EISA is not set | 232 | CONFIG_PCI=y |
| 233 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
| 235 | CONFIG_MMU=y | 234 | CONFIG_MMU=y |
| 236 | 235 | ||
| 237 | # | 236 | # |
| @@ -242,6 +241,7 @@ CONFIG_MMU=y | |||
| 242 | # | 241 | # |
| 243 | # PCI Hotplug Support | 242 | # PCI Hotplug Support |
| 244 | # | 243 | # |
| 244 | # CONFIG_HOTPLUG_PCI is not set | ||
| 245 | 245 | ||
| 246 | # | 246 | # |
| 247 | # Executable file formats | 247 | # Executable file formats |
| @@ -264,6 +264,7 @@ CONFIG_PACKET=y | |||
| 264 | CONFIG_UNIX=y | 264 | CONFIG_UNIX=y |
| 265 | CONFIG_XFRM=y | 265 | CONFIG_XFRM=y |
| 266 | # CONFIG_XFRM_USER is not set | 266 | # CONFIG_XFRM_USER is not set |
| 267 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 267 | # CONFIG_NET_KEY is not set | 268 | # CONFIG_NET_KEY is not set |
| 268 | CONFIG_INET=y | 269 | CONFIG_INET=y |
| 269 | # CONFIG_IP_MULTICAST is not set | 270 | # CONFIG_IP_MULTICAST is not set |
| @@ -282,12 +283,14 @@ CONFIG_IP_PNP=y | |||
| 282 | # CONFIG_INET_IPCOMP is not set | 283 | # CONFIG_INET_IPCOMP is not set |
| 283 | # CONFIG_INET_XFRM_TUNNEL is not set | 284 | # CONFIG_INET_XFRM_TUNNEL is not set |
| 284 | # CONFIG_INET_TUNNEL is not set | 285 | # CONFIG_INET_TUNNEL is not set |
| 285 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 286 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 286 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 287 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 288 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 287 | CONFIG_INET_DIAG=y | 289 | CONFIG_INET_DIAG=y |
| 288 | CONFIG_INET_TCP_DIAG=y | 290 | CONFIG_INET_TCP_DIAG=y |
| 289 | # CONFIG_TCP_CONG_ADVANCED is not set | 291 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 290 | CONFIG_TCP_CONG_BIC=y | 292 | CONFIG_TCP_CONG_CUBIC=y |
| 293 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 291 | 294 | ||
| 292 | # | 295 | # |
| 293 | # IP: Virtual Server Configuration | 296 | # IP: Virtual Server Configuration |
| @@ -300,12 +303,18 @@ CONFIG_IPV6_ROUTE_INFO=y | |||
| 300 | # CONFIG_INET6_AH is not set | 303 | # CONFIG_INET6_AH is not set |
| 301 | # CONFIG_INET6_ESP is not set | 304 | # CONFIG_INET6_ESP is not set |
| 302 | # CONFIG_INET6_IPCOMP is not set | 305 | # CONFIG_INET6_IPCOMP is not set |
| 306 | # CONFIG_IPV6_MIP6 is not set | ||
| 303 | # CONFIG_INET6_XFRM_TUNNEL is not set | 307 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 304 | # CONFIG_INET6_TUNNEL is not set | 308 | # CONFIG_INET6_TUNNEL is not set |
| 305 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | 309 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m |
| 306 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | 310 | CONFIG_INET6_XFRM_MODE_TUNNEL=m |
| 311 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
| 312 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
| 313 | CONFIG_IPV6_SIT=m | ||
| 307 | # CONFIG_IPV6_TUNNEL is not set | 314 | # CONFIG_IPV6_TUNNEL is not set |
| 308 | CONFIG_NETWORK_SECMARK=y | 315 | # CONFIG_IPV6_SUBTREES is not set |
| 316 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
| 317 | # CONFIG_NETWORK_SECMARK is not set | ||
| 309 | CONFIG_NETFILTER=y | 318 | CONFIG_NETFILTER=y |
| 310 | # CONFIG_NETFILTER_DEBUG is not set | 319 | # CONFIG_NETFILTER_DEBUG is not set |
| 311 | 320 | ||
| @@ -318,9 +327,9 @@ CONFIG_NETFILTER_XTABLES=m | |||
| 318 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 327 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
| 319 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 328 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
| 320 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 329 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
| 321 | CONFIG_NETFILTER_XT_TARGET_SECMARK=m | ||
| 322 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 330 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
| 323 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 331 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
| 332 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
| 324 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 333 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
| 325 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 334 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
| 326 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 335 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
| @@ -329,10 +338,10 @@ CONFIG_NETFILTER_XT_MATCH_MARK=m | |||
| 329 | # CONFIG_NETFILTER_XT_MATCH_POLICY is not set | 338 | # CONFIG_NETFILTER_XT_MATCH_POLICY is not set |
| 330 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 339 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
| 331 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 340 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
| 332 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 341 | # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set |
| 333 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 342 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
| 334 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 343 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
| 335 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 344 | # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set |
| 336 | CONFIG_NETFILTER_XT_MATCH_STRING=m | 345 | CONFIG_NETFILTER_XT_MATCH_STRING=m |
| 337 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 346 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
| 338 | 347 | ||
| @@ -373,7 +382,6 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | |||
| 373 | # CONFIG_ATALK is not set | 382 | # CONFIG_ATALK is not set |
| 374 | # CONFIG_X25 is not set | 383 | # CONFIG_X25 is not set |
| 375 | # CONFIG_LAPB is not set | 384 | # CONFIG_LAPB is not set |
| 376 | # CONFIG_NET_DIVERT is not set | ||
| 377 | # CONFIG_ECONET is not set | 385 | # CONFIG_ECONET is not set |
| 378 | # CONFIG_WAN_ROUTER is not set | 386 | # CONFIG_WAN_ROUTER is not set |
| 379 | 387 | ||
| @@ -426,13 +434,20 @@ CONFIG_FW_LOADER=y | |||
| 426 | # | 434 | # |
| 427 | # Block devices | 435 | # Block devices |
| 428 | # | 436 | # |
| 437 | # CONFIG_BLK_CPQ_DA is not set | ||
| 438 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 439 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 440 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 429 | # CONFIG_BLK_DEV_COW_COMMON is not set | 441 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| 430 | CONFIG_BLK_DEV_LOOP=y | 442 | CONFIG_BLK_DEV_LOOP=y |
| 431 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 443 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
| 432 | # CONFIG_BLK_DEV_NBD is not set | 444 | # CONFIG_BLK_DEV_NBD is not set |
| 445 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 446 | # CONFIG_BLK_DEV_UB is not set | ||
| 433 | CONFIG_BLK_DEV_RAM=y | 447 | CONFIG_BLK_DEV_RAM=y |
| 434 | CONFIG_BLK_DEV_RAM_COUNT=16 | 448 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 435 | CONFIG_BLK_DEV_RAM_SIZE=8192 | 449 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
| 450 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 436 | CONFIG_BLK_DEV_INITRD=y | 451 | CONFIG_BLK_DEV_INITRD=y |
| 437 | # CONFIG_CDROM_PKTCDVD is not set | 452 | # CONFIG_CDROM_PKTCDVD is not set |
| 438 | # CONFIG_ATA_OVER_ETH is not set | 453 | # CONFIG_ATA_OVER_ETH is not set |
| @@ -441,6 +456,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 441 | # ATA/ATAPI/MFM/RLL support | 456 | # ATA/ATAPI/MFM/RLL support |
| 442 | # | 457 | # |
| 443 | CONFIG_IDE=y | 458 | CONFIG_IDE=y |
| 459 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 444 | CONFIG_BLK_DEV_IDE=y | 460 | CONFIG_BLK_DEV_IDE=y |
| 445 | 461 | ||
| 446 | # | 462 | # |
| @@ -459,9 +475,41 @@ CONFIG_IDEDISK_MULTI_MODE=y | |||
| 459 | # IDE chipset support/bugfixes | 475 | # IDE chipset support/bugfixes |
| 460 | # | 476 | # |
| 461 | CONFIG_IDE_GENERIC=y | 477 | CONFIG_IDE_GENERIC=y |
| 478 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 479 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
| 480 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 481 | # CONFIG_BLK_DEV_GENERIC is not set | ||
| 482 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 483 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 484 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 485 | CONFIG_IDEDMA_PCI_AUTO=y | ||
| 486 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
| 487 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 488 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 489 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 490 | CONFIG_BLK_DEV_CMD64X=y | ||
| 491 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 492 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 493 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 494 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 495 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 496 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 497 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 498 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 499 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 500 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 501 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 502 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 503 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 504 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 505 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 506 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 507 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 508 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 462 | # CONFIG_IDE_ARM is not set | 509 | # CONFIG_IDE_ARM is not set |
| 463 | # CONFIG_BLK_DEV_IDEDMA is not set | 510 | CONFIG_BLK_DEV_IDEDMA=y |
| 464 | # CONFIG_IDEDMA_AUTO is not set | 511 | # CONFIG_IDEDMA_IVB is not set |
| 512 | CONFIG_IDEDMA_AUTO=y | ||
| 465 | # CONFIG_BLK_DEV_HD is not set | 513 | # CONFIG_BLK_DEV_HD is not set |
| 466 | 514 | ||
| 467 | # | 515 | # |
| @@ -469,6 +517,7 @@ CONFIG_IDE_GENERIC=y | |||
| 469 | # | 517 | # |
| 470 | # CONFIG_RAID_ATTRS is not set | 518 | # CONFIG_RAID_ATTRS is not set |
| 471 | CONFIG_SCSI=y | 519 | CONFIG_SCSI=y |
| 520 | CONFIG_SCSI_NETLINK=y | ||
| 472 | CONFIG_SCSI_PROC_FS=y | 521 | CONFIG_SCSI_PROC_FS=y |
| 473 | 522 | ||
| 474 | # | 523 | # |
| @@ -489,22 +538,59 @@ CONFIG_BLK_DEV_SD=y | |||
| 489 | # CONFIG_SCSI_LOGGING is not set | 538 | # CONFIG_SCSI_LOGGING is not set |
| 490 | 539 | ||
| 491 | # | 540 | # |
| 492 | # SCSI Transport Attributes | 541 | # SCSI Transports |
| 493 | # | 542 | # |
| 494 | CONFIG_SCSI_SPI_ATTRS=m | 543 | CONFIG_SCSI_SPI_ATTRS=m |
| 495 | CONFIG_SCSI_FC_ATTRS=y | 544 | CONFIG_SCSI_FC_ATTRS=y |
| 496 | CONFIG_SCSI_ISCSI_ATTRS=m | 545 | CONFIG_SCSI_ISCSI_ATTRS=m |
| 497 | # CONFIG_SCSI_SAS_ATTRS is not set | 546 | # CONFIG_SCSI_SAS_ATTRS is not set |
| 547 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 498 | 548 | ||
| 499 | # | 549 | # |
| 500 | # SCSI low-level drivers | 550 | # SCSI low-level drivers |
| 501 | # | 551 | # |
| 502 | CONFIG_ISCSI_TCP=m | 552 | CONFIG_ISCSI_TCP=m |
| 503 | # CONFIG_SGIWD93_SCSI is not set | 553 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
| 504 | # CONFIG_SCSI_SATA is not set | 554 | # CONFIG_SCSI_3W_9XXX is not set |
| 555 | # CONFIG_SCSI_ACARD is not set | ||
| 556 | # CONFIG_SCSI_AACRAID is not set | ||
| 557 | CONFIG_SCSI_AIC7XXX=m | ||
| 558 | CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 | ||
| 559 | CONFIG_AIC7XXX_RESET_DELAY_MS=15000 | ||
| 560 | # CONFIG_AIC7XXX_DEBUG_ENABLE is not set | ||
| 561 | CONFIG_AIC7XXX_DEBUG_MASK=0 | ||
| 562 | # CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set | ||
| 563 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 564 | # CONFIG_SCSI_AIC79XX is not set | ||
| 565 | # CONFIG_SCSI_AIC94XX is not set | ||
| 566 | # CONFIG_SCSI_DPT_I2O is not set | ||
| 567 | # CONFIG_SCSI_ARCMSR is not set | ||
| 568 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 569 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 570 | # CONFIG_MEGARAID_SAS is not set | ||
| 571 | # CONFIG_SCSI_HPTIOP is not set | ||
| 572 | # CONFIG_SCSI_DMX3191D is not set | ||
| 573 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 574 | # CONFIG_SCSI_IPS is not set | ||
| 575 | # CONFIG_SCSI_INITIO is not set | ||
| 576 | # CONFIG_SCSI_INIA100 is not set | ||
| 577 | # CONFIG_SCSI_STEX is not set | ||
| 578 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
| 579 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
| 580 | # CONFIG_SCSI_QLA_FC is not set | ||
| 581 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 582 | # CONFIG_SCSI_LPFC is not set | ||
| 583 | # CONFIG_SCSI_DC395x is not set | ||
| 584 | # CONFIG_SCSI_DC390T is not set | ||
| 585 | # CONFIG_SCSI_NSP32 is not set | ||
| 505 | # CONFIG_SCSI_DEBUG is not set | 586 | # CONFIG_SCSI_DEBUG is not set |
| 506 | 587 | ||
| 507 | # | 588 | # |
| 589 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 590 | # | ||
| 591 | # CONFIG_ATA is not set | ||
| 592 | |||
| 593 | # | ||
| 508 | # Multi-device support (RAID and LVM) | 594 | # Multi-device support (RAID and LVM) |
| 509 | # | 595 | # |
| 510 | # CONFIG_MD is not set | 596 | # CONFIG_MD is not set |
| @@ -513,14 +599,19 @@ CONFIG_ISCSI_TCP=m | |||
| 513 | # Fusion MPT device support | 599 | # Fusion MPT device support |
| 514 | # | 600 | # |
| 515 | # CONFIG_FUSION is not set | 601 | # CONFIG_FUSION is not set |
| 602 | # CONFIG_FUSION_SPI is not set | ||
| 603 | # CONFIG_FUSION_FC is not set | ||
| 604 | # CONFIG_FUSION_SAS is not set | ||
| 516 | 605 | ||
| 517 | # | 606 | # |
| 518 | # IEEE 1394 (FireWire) support | 607 | # IEEE 1394 (FireWire) support |
| 519 | # | 608 | # |
| 609 | # CONFIG_IEEE1394 is not set | ||
| 520 | 610 | ||
| 521 | # | 611 | # |
| 522 | # I2O device support | 612 | # I2O device support |
| 523 | # | 613 | # |
| 614 | # CONFIG_I2O is not set | ||
| 524 | 615 | ||
| 525 | # | 616 | # |
| 526 | # Network device support | 617 | # Network device support |
| @@ -532,6 +623,11 @@ CONFIG_NETDEVICES=y | |||
| 532 | CONFIG_TUN=m | 623 | CONFIG_TUN=m |
| 533 | 624 | ||
| 534 | # | 625 | # |
| 626 | # ARCnet devices | ||
| 627 | # | ||
| 628 | # CONFIG_ARCNET is not set | ||
| 629 | |||
| 630 | # | ||
| 535 | # PHY device support | 631 | # PHY device support |
| 536 | # | 632 | # |
| 537 | # CONFIG_PHYLIB is not set | 633 | # CONFIG_PHYLIB is not set |
| @@ -541,20 +637,73 @@ CONFIG_TUN=m | |||
| 541 | # | 637 | # |
| 542 | CONFIG_NET_ETHERNET=y | 638 | CONFIG_NET_ETHERNET=y |
| 543 | CONFIG_MII=y | 639 | CONFIG_MII=y |
| 640 | # CONFIG_HAPPYMEAL is not set | ||
| 641 | # CONFIG_SUNGEM is not set | ||
| 642 | # CONFIG_CASSINI is not set | ||
| 643 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 544 | # CONFIG_DM9000 is not set | 644 | # CONFIG_DM9000 is not set |
| 545 | # CONFIG_SGISEEQ is not set | 645 | |
| 646 | # | ||
| 647 | # Tulip family network device support | ||
| 648 | # | ||
| 649 | # CONFIG_NET_TULIP is not set | ||
| 650 | # CONFIG_HP100 is not set | ||
| 651 | CONFIG_NET_PCI=y | ||
| 652 | # CONFIG_PCNET32 is not set | ||
| 653 | # CONFIG_AMD8111_ETH is not set | ||
| 654 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 655 | # CONFIG_B44 is not set | ||
| 656 | # CONFIG_FORCEDETH is not set | ||
| 657 | # CONFIG_DGRS is not set | ||
| 658 | # CONFIG_EEPRO100 is not set | ||
| 659 | # CONFIG_E100 is not set | ||
| 660 | # CONFIG_FEALNX is not set | ||
| 661 | CONFIG_NATSEMI=y | ||
| 662 | # CONFIG_NE2K_PCI is not set | ||
| 663 | # CONFIG_8139CP is not set | ||
| 664 | CONFIG_8139TOO=y | ||
| 665 | # CONFIG_8139TOO_PIO is not set | ||
| 666 | # CONFIG_8139TOO_TUNE_TWISTER is not set | ||
| 667 | # CONFIG_8139TOO_8129 is not set | ||
| 668 | # CONFIG_8139_OLD_RX_RESET is not set | ||
| 669 | # CONFIG_SIS900 is not set | ||
| 670 | # CONFIG_EPIC100 is not set | ||
| 671 | # CONFIG_SUNDANCE is not set | ||
| 672 | # CONFIG_TLAN is not set | ||
| 673 | # CONFIG_VIA_RHINE is not set | ||
| 674 | # CONFIG_LAN_SAA9730 is not set | ||
| 546 | 675 | ||
| 547 | # | 676 | # |
| 548 | # Ethernet (1000 Mbit) | 677 | # Ethernet (1000 Mbit) |
| 549 | # | 678 | # |
| 679 | # CONFIG_ACENIC is not set | ||
| 680 | # CONFIG_DL2K is not set | ||
| 681 | # CONFIG_E1000 is not set | ||
| 682 | # CONFIG_NS83820 is not set | ||
| 683 | # CONFIG_HAMACHI is not set | ||
| 684 | # CONFIG_YELLOWFIN is not set | ||
| 685 | # CONFIG_R8169 is not set | ||
| 686 | # CONFIG_SIS190 is not set | ||
| 687 | # CONFIG_SKGE is not set | ||
| 688 | # CONFIG_SKY2 is not set | ||
| 689 | # CONFIG_SK98LIN is not set | ||
| 690 | # CONFIG_VIA_VELOCITY is not set | ||
| 691 | # CONFIG_TIGON3 is not set | ||
| 692 | # CONFIG_BNX2 is not set | ||
| 693 | # CONFIG_QLA3XXX is not set | ||
| 550 | 694 | ||
| 551 | # | 695 | # |
| 552 | # Ethernet (10000 Mbit) | 696 | # Ethernet (10000 Mbit) |
| 553 | # | 697 | # |
| 698 | # CONFIG_CHELSIO_T1 is not set | ||
| 699 | # CONFIG_IXGB is not set | ||
| 700 | # CONFIG_S2IO is not set | ||
| 701 | # CONFIG_MYRI10GE is not set | ||
| 554 | 702 | ||
| 555 | # | 703 | # |
| 556 | # Token Ring devices | 704 | # Token Ring devices |
| 557 | # | 705 | # |
| 706 | # CONFIG_TR is not set | ||
| 558 | 707 | ||
| 559 | # | 708 | # |
| 560 | # Wireless LAN (non-hamradio) | 709 | # Wireless LAN (non-hamradio) |
| @@ -565,6 +714,8 @@ CONFIG_MII=y | |||
| 565 | # Wan interfaces | 714 | # Wan interfaces |
| 566 | # | 715 | # |
| 567 | # CONFIG_WAN is not set | 716 | # CONFIG_WAN is not set |
| 717 | # CONFIG_FDDI is not set | ||
| 718 | # CONFIG_HIPPI is not set | ||
| 568 | CONFIG_PPP=m | 719 | CONFIG_PPP=m |
| 569 | # CONFIG_PPP_MULTILINK is not set | 720 | # CONFIG_PPP_MULTILINK is not set |
| 570 | # CONFIG_PPP_FILTER is not set | 721 | # CONFIG_PPP_FILTER is not set |
| @@ -575,6 +726,8 @@ CONFIG_PPP_DEFLATE=m | |||
| 575 | CONFIG_PPP_MPPE=m | 726 | CONFIG_PPP_MPPE=m |
| 576 | # CONFIG_PPPOE is not set | 727 | # CONFIG_PPPOE is not set |
| 577 | # CONFIG_SLIP is not set | 728 | # CONFIG_SLIP is not set |
| 729 | CONFIG_SLHC=m | ||
| 730 | # CONFIG_NET_FC is not set | ||
| 578 | # CONFIG_SHAPER is not set | 731 | # CONFIG_SHAPER is not set |
| 579 | # CONFIG_NETCONSOLE is not set | 732 | # CONFIG_NETCONSOLE is not set |
| 580 | # CONFIG_NETPOLL is not set | 733 | # CONFIG_NETPOLL is not set |
| @@ -594,6 +747,7 @@ CONFIG_PPP_MPPE=m | |||
| 594 | # Input device support | 747 | # Input device support |
| 595 | # | 748 | # |
| 596 | CONFIG_INPUT=y | 749 | CONFIG_INPUT=y |
| 750 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 597 | 751 | ||
| 598 | # | 752 | # |
| 599 | # Userland interfaces | 753 | # Userland interfaces |
| @@ -616,6 +770,7 @@ CONFIG_KEYBOARD_ATKBD=y | |||
| 616 | # CONFIG_KEYBOARD_LKKBD is not set | 770 | # CONFIG_KEYBOARD_LKKBD is not set |
| 617 | # CONFIG_KEYBOARD_XTKBD is not set | 771 | # CONFIG_KEYBOARD_XTKBD is not set |
| 618 | # CONFIG_KEYBOARD_NEWTON is not set | 772 | # CONFIG_KEYBOARD_NEWTON is not set |
| 773 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 619 | CONFIG_INPUT_MOUSE=y | 774 | CONFIG_INPUT_MOUSE=y |
| 620 | CONFIG_MOUSE_PS2=y | 775 | CONFIG_MOUSE_PS2=y |
| 621 | # CONFIG_MOUSE_SERIAL is not set | 776 | # CONFIG_MOUSE_SERIAL is not set |
| @@ -630,6 +785,7 @@ CONFIG_MOUSE_PS2=y | |||
| 630 | CONFIG_SERIO=y | 785 | CONFIG_SERIO=y |
| 631 | CONFIG_SERIO_I8042=y | 786 | CONFIG_SERIO_I8042=y |
| 632 | CONFIG_SERIO_SERPORT=y | 787 | CONFIG_SERIO_SERPORT=y |
| 788 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 633 | CONFIG_SERIO_LIBPS2=y | 789 | CONFIG_SERIO_LIBPS2=y |
| 634 | # CONFIG_SERIO_RAW is not set | 790 | # CONFIG_SERIO_RAW is not set |
| 635 | # CONFIG_GAMEPORT is not set | 791 | # CONFIG_GAMEPORT is not set |
| @@ -640,7 +796,7 @@ CONFIG_SERIO_LIBPS2=y | |||
| 640 | CONFIG_VT=y | 796 | CONFIG_VT=y |
| 641 | # CONFIG_VT_CONSOLE is not set | 797 | # CONFIG_VT_CONSOLE is not set |
| 642 | CONFIG_HW_CONSOLE=y | 798 | CONFIG_HW_CONSOLE=y |
| 643 | CONFIG_VT_HW_CONSOLE_BINDING=y | 799 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 644 | CONFIG_SERIAL_NONSTANDARD=y | 800 | CONFIG_SERIAL_NONSTANDARD=y |
| 645 | # CONFIG_COMPUTONE is not set | 801 | # CONFIG_COMPUTONE is not set |
| 646 | # CONFIG_ROCKETPORT is not set | 802 | # CONFIG_ROCKETPORT is not set |
| @@ -650,6 +806,7 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
| 650 | # CONFIG_MOXA_SMARTIO is not set | 806 | # CONFIG_MOXA_SMARTIO is not set |
| 651 | # CONFIG_ISI is not set | 807 | # CONFIG_ISI is not set |
| 652 | # CONFIG_SYNCLINKMP is not set | 808 | # CONFIG_SYNCLINKMP is not set |
| 809 | # CONFIG_SYNCLINK_GT is not set | ||
| 653 | # CONFIG_N_HDLC is not set | 810 | # CONFIG_N_HDLC is not set |
| 654 | # CONFIG_RISCOM8 is not set | 811 | # CONFIG_RISCOM8 is not set |
| 655 | # CONFIG_SPECIALIX is not set | 812 | # CONFIG_SPECIALIX is not set |
| @@ -665,7 +822,8 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
| 665 | # | 822 | # |
| 666 | # Non-8250 serial port support | 823 | # Non-8250 serial port support |
| 667 | # | 824 | # |
| 668 | # CONFIG_SERIAL_IP22_ZILOG is not set | 825 | # CONFIG_SERIAL_IP3106 is not set |
| 826 | # CONFIG_SERIAL_JSM is not set | ||
| 669 | CONFIG_UNIX98_PTYS=y | 827 | CONFIG_UNIX98_PTYS=y |
| 670 | CONFIG_LEGACY_PTYS=y | 828 | CONFIG_LEGACY_PTYS=y |
| 671 | CONFIG_LEGACY_PTY_COUNT=256 | 829 | CONFIG_LEGACY_PTY_COUNT=256 |
| @@ -679,16 +837,17 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| 679 | # Watchdog Cards | 837 | # Watchdog Cards |
| 680 | # | 838 | # |
| 681 | # CONFIG_WATCHDOG is not set | 839 | # CONFIG_WATCHDOG is not set |
| 682 | # CONFIG_HW_RANDOM is not set | 840 | CONFIG_HW_RANDOM=y |
| 683 | # CONFIG_RTC is not set | 841 | # CONFIG_RTC is not set |
| 684 | # CONFIG_SGI_DS1286 is not set | ||
| 685 | # CONFIG_GEN_RTC is not set | 842 | # CONFIG_GEN_RTC is not set |
| 686 | # CONFIG_DTLK is not set | 843 | # CONFIG_DTLK is not set |
| 687 | # CONFIG_R3964 is not set | 844 | # CONFIG_R3964 is not set |
| 845 | # CONFIG_APPLICOM is not set | ||
| 688 | 846 | ||
| 689 | # | 847 | # |
| 690 | # Ftape, the floppy tape device driver | 848 | # Ftape, the floppy tape device driver |
| 691 | # | 849 | # |
| 850 | # CONFIG_DRM is not set | ||
| 692 | # CONFIG_RAW_DRIVER is not set | 851 | # CONFIG_RAW_DRIVER is not set |
| 693 | 852 | ||
| 694 | # | 853 | # |
| @@ -709,14 +868,30 @@ CONFIG_I2C_CHARDEV=m | |||
| 709 | CONFIG_I2C_ALGOBIT=m | 868 | CONFIG_I2C_ALGOBIT=m |
| 710 | # CONFIG_I2C_ALGOPCF is not set | 869 | # CONFIG_I2C_ALGOPCF is not set |
| 711 | # CONFIG_I2C_ALGOPCA is not set | 870 | # CONFIG_I2C_ALGOPCA is not set |
| 712 | # CONFIG_I2C_ALGO_SGI is not set | ||
| 713 | 871 | ||
| 714 | # | 872 | # |
| 715 | # I2C Hardware Bus support | 873 | # I2C Hardware Bus support |
| 716 | # | 874 | # |
| 875 | # CONFIG_I2C_ALI1535 is not set | ||
| 876 | # CONFIG_I2C_ALI1563 is not set | ||
| 877 | # CONFIG_I2C_ALI15X3 is not set | ||
| 878 | # CONFIG_I2C_AMD756 is not set | ||
| 879 | # CONFIG_I2C_AMD8111 is not set | ||
| 880 | # CONFIG_I2C_I801 is not set | ||
| 881 | # CONFIG_I2C_I810 is not set | ||
| 882 | # CONFIG_I2C_PIIX4 is not set | ||
| 883 | # CONFIG_I2C_NFORCE2 is not set | ||
| 717 | # CONFIG_I2C_OCORES is not set | 884 | # CONFIG_I2C_OCORES is not set |
| 718 | # CONFIG_I2C_PARPORT_LIGHT is not set | 885 | # CONFIG_I2C_PARPORT_LIGHT is not set |
| 886 | # CONFIG_I2C_PROSAVAGE is not set | ||
| 887 | # CONFIG_I2C_SAVAGE4 is not set | ||
| 888 | # CONFIG_I2C_SIS5595 is not set | ||
| 889 | # CONFIG_I2C_SIS630 is not set | ||
| 890 | # CONFIG_I2C_SIS96X is not set | ||
| 719 | # CONFIG_I2C_STUB is not set | 891 | # CONFIG_I2C_STUB is not set |
| 892 | # CONFIG_I2C_VIA is not set | ||
| 893 | # CONFIG_I2C_VIAPRO is not set | ||
| 894 | # CONFIG_I2C_VOODOO3 is not set | ||
| 720 | # CONFIG_I2C_PCA_ISA is not set | 895 | # CONFIG_I2C_PCA_ISA is not set |
| 721 | 896 | ||
| 722 | # | 897 | # |
| @@ -776,9 +951,13 @@ CONFIG_HWMON=y | |||
| 776 | # CONFIG_SENSORS_LM92 is not set | 951 | # CONFIG_SENSORS_LM92 is not set |
| 777 | # CONFIG_SENSORS_MAX1619 is not set | 952 | # CONFIG_SENSORS_MAX1619 is not set |
| 778 | # CONFIG_SENSORS_PC87360 is not set | 953 | # CONFIG_SENSORS_PC87360 is not set |
| 954 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 779 | # CONFIG_SENSORS_SMSC47M1 is not set | 955 | # CONFIG_SENSORS_SMSC47M1 is not set |
| 780 | # CONFIG_SENSORS_SMSC47M192 is not set | 956 | # CONFIG_SENSORS_SMSC47M192 is not set |
| 781 | # CONFIG_SENSORS_SMSC47B397 is not set | 957 | # CONFIG_SENSORS_SMSC47B397 is not set |
| 958 | # CONFIG_SENSORS_VIA686A is not set | ||
| 959 | # CONFIG_SENSORS_VT1211 is not set | ||
| 960 | # CONFIG_SENSORS_VT8231 is not set | ||
| 782 | # CONFIG_SENSORS_W83781D is not set | 961 | # CONFIG_SENSORS_W83781D is not set |
| 783 | # CONFIG_SENSORS_W83791D is not set | 962 | # CONFIG_SENSORS_W83791D is not set |
| 784 | # CONFIG_SENSORS_W83792D is not set | 963 | # CONFIG_SENSORS_W83792D is not set |
| @@ -790,23 +969,25 @@ CONFIG_HWMON=y | |||
| 790 | # | 969 | # |
| 791 | # Misc devices | 970 | # Misc devices |
| 792 | # | 971 | # |
| 972 | # CONFIG_TIFM_CORE is not set | ||
| 793 | 973 | ||
| 794 | # | 974 | # |
| 795 | # Multimedia devices | 975 | # Multimedia devices |
| 796 | # | 976 | # |
| 797 | # CONFIG_VIDEO_DEV is not set | 977 | # CONFIG_VIDEO_DEV is not set |
| 798 | CONFIG_VIDEO_V4L2=y | ||
| 799 | 978 | ||
| 800 | # | 979 | # |
| 801 | # Digital Video Broadcasting Devices | 980 | # Digital Video Broadcasting Devices |
| 802 | # | 981 | # |
| 803 | # CONFIG_DVB is not set | 982 | # CONFIG_DVB is not set |
| 983 | # CONFIG_USB_DABUSB is not set | ||
| 804 | 984 | ||
| 805 | # | 985 | # |
| 806 | # Graphics support | 986 | # Graphics support |
| 807 | # | 987 | # |
| 808 | # CONFIG_FIRMWARE_EDID is not set | 988 | CONFIG_FIRMWARE_EDID=y |
| 809 | CONFIG_FB=y | 989 | CONFIG_FB=y |
| 990 | # CONFIG_FB_DDC is not set | ||
| 810 | # CONFIG_FB_CFB_FILLRECT is not set | 991 | # CONFIG_FB_CFB_FILLRECT is not set |
| 811 | # CONFIG_FB_CFB_COPYAREA is not set | 992 | # CONFIG_FB_CFB_COPYAREA is not set |
| 812 | # CONFIG_FB_CFB_IMAGEBLIT is not set | 993 | # CONFIG_FB_CFB_IMAGEBLIT is not set |
| @@ -814,14 +995,32 @@ CONFIG_FB=y | |||
| 814 | # CONFIG_FB_BACKLIGHT is not set | 995 | # CONFIG_FB_BACKLIGHT is not set |
| 815 | # CONFIG_FB_MODE_HELPERS is not set | 996 | # CONFIG_FB_MODE_HELPERS is not set |
| 816 | # CONFIG_FB_TILEBLITTING is not set | 997 | # CONFIG_FB_TILEBLITTING is not set |
| 998 | # CONFIG_FB_CIRRUS is not set | ||
| 999 | # CONFIG_FB_PM2 is not set | ||
| 1000 | # CONFIG_FB_CYBER2000 is not set | ||
| 1001 | # CONFIG_FB_ASILIANT is not set | ||
| 1002 | # CONFIG_FB_IMSTT is not set | ||
| 817 | # CONFIG_FB_S1D13XXX is not set | 1003 | # CONFIG_FB_S1D13XXX is not set |
| 1004 | # CONFIG_FB_NVIDIA is not set | ||
| 1005 | # CONFIG_FB_RIVA is not set | ||
| 1006 | # CONFIG_FB_MATROX is not set | ||
| 1007 | # CONFIG_FB_RADEON is not set | ||
| 1008 | # CONFIG_FB_ATY128 is not set | ||
| 1009 | # CONFIG_FB_ATY is not set | ||
| 1010 | # CONFIG_FB_SAVAGE is not set | ||
| 1011 | # CONFIG_FB_SIS is not set | ||
| 1012 | # CONFIG_FB_NEOMAGIC is not set | ||
| 1013 | # CONFIG_FB_KYRO is not set | ||
| 1014 | # CONFIG_FB_3DFX is not set | ||
| 1015 | # CONFIG_FB_VOODOO1 is not set | ||
| 1016 | # CONFIG_FB_SMIVGX is not set | ||
| 1017 | # CONFIG_FB_TRIDENT is not set | ||
| 818 | # CONFIG_FB_VIRTUAL is not set | 1018 | # CONFIG_FB_VIRTUAL is not set |
| 819 | 1019 | ||
| 820 | # | 1020 | # |
| 821 | # Console display driver support | 1021 | # Console display driver support |
| 822 | # | 1022 | # |
| 823 | # CONFIG_VGA_CONSOLE is not set | 1023 | # CONFIG_VGA_CONSOLE is not set |
| 824 | # CONFIG_SGI_NEWPORT_CONSOLE is not set | ||
| 825 | CONFIG_DUMMY_CONSOLE=y | 1024 | CONFIG_DUMMY_CONSOLE=y |
| 826 | # CONFIG_FRAMEBUFFER_CONSOLE is not set | 1025 | # CONFIG_FRAMEBUFFER_CONSOLE is not set |
| 827 | 1026 | ||
| @@ -839,15 +1038,129 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 839 | # | 1038 | # |
| 840 | # USB support | 1039 | # USB support |
| 841 | # | 1040 | # |
| 842 | # CONFIG_USB_ARCH_HAS_HCD is not set | 1041 | CONFIG_USB_ARCH_HAS_HCD=y |
| 843 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 1042 | CONFIG_USB_ARCH_HAS_OHCI=y |
| 844 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 1043 | CONFIG_USB_ARCH_HAS_EHCI=y |
| 1044 | CONFIG_USB=y | ||
| 1045 | # CONFIG_USB_DEBUG is not set | ||
| 1046 | |||
| 1047 | # | ||
| 1048 | # Miscellaneous USB options | ||
| 1049 | # | ||
| 1050 | CONFIG_USB_DEVICEFS=y | ||
| 1051 | # CONFIG_USB_BANDWIDTH is not set | ||
| 1052 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 1053 | # CONFIG_USB_OTG is not set | ||
| 1054 | |||
| 1055 | # | ||
| 1056 | # USB Host Controller Drivers | ||
| 1057 | # | ||
| 1058 | # CONFIG_USB_EHCI_HCD is not set | ||
| 1059 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1060 | # CONFIG_USB_OHCI_HCD is not set | ||
| 1061 | # CONFIG_USB_UHCI_HCD is not set | ||
| 1062 | # CONFIG_USB_SL811_HCD is not set | ||
| 1063 | |||
| 1064 | # | ||
| 1065 | # USB Device Class drivers | ||
| 1066 | # | ||
| 1067 | # CONFIG_USB_ACM is not set | ||
| 1068 | # CONFIG_USB_PRINTER is not set | ||
| 845 | 1069 | ||
| 846 | # | 1070 | # |
| 847 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1071 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 848 | # | 1072 | # |
| 849 | 1073 | ||
| 850 | # | 1074 | # |
| 1075 | # may also be needed; see USB_STORAGE Help for more information | ||
| 1076 | # | ||
| 1077 | CONFIG_USB_STORAGE=y | ||
| 1078 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1079 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1080 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1081 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1082 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 1083 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1084 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1085 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1086 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1087 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1088 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 1089 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1090 | # CONFIG_USB_LIBUSUAL is not set | ||
| 1091 | |||
| 1092 | # | ||
| 1093 | # USB Input Devices | ||
| 1094 | # | ||
| 1095 | CONFIG_USB_HID=y | ||
| 1096 | CONFIG_USB_HIDINPUT=y | ||
| 1097 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 1098 | # CONFIG_HID_FF is not set | ||
| 1099 | CONFIG_USB_HIDDEV=y | ||
| 1100 | # CONFIG_USB_AIPTEK is not set | ||
| 1101 | # CONFIG_USB_WACOM is not set | ||
| 1102 | # CONFIG_USB_ACECAD is not set | ||
| 1103 | # CONFIG_USB_KBTAB is not set | ||
| 1104 | # CONFIG_USB_POWERMATE is not set | ||
| 1105 | # CONFIG_USB_TOUCHSCREEN is not set | ||
| 1106 | # CONFIG_USB_YEALINK is not set | ||
| 1107 | # CONFIG_USB_XPAD is not set | ||
| 1108 | # CONFIG_USB_ATI_REMOTE is not set | ||
| 1109 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
| 1110 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
| 1111 | # CONFIG_USB_APPLETOUCH is not set | ||
| 1112 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1113 | |||
| 1114 | # | ||
| 1115 | # USB Imaging devices | ||
| 1116 | # | ||
| 1117 | # CONFIG_USB_MDC800 is not set | ||
| 1118 | # CONFIG_USB_MICROTEK is not set | ||
| 1119 | |||
| 1120 | # | ||
| 1121 | # USB Network Adapters | ||
| 1122 | # | ||
| 1123 | # CONFIG_USB_CATC is not set | ||
| 1124 | # CONFIG_USB_KAWETH is not set | ||
| 1125 | # CONFIG_USB_PEGASUS is not set | ||
| 1126 | # CONFIG_USB_RTL8150 is not set | ||
| 1127 | # CONFIG_USB_USBNET is not set | ||
| 1128 | CONFIG_USB_MON=y | ||
| 1129 | |||
| 1130 | # | ||
| 1131 | # USB port drivers | ||
| 1132 | # | ||
| 1133 | |||
| 1134 | # | ||
| 1135 | # USB Serial Converter support | ||
| 1136 | # | ||
| 1137 | # CONFIG_USB_SERIAL is not set | ||
| 1138 | |||
| 1139 | # | ||
| 1140 | # USB Miscellaneous drivers | ||
| 1141 | # | ||
| 1142 | # CONFIG_USB_EMI62 is not set | ||
| 1143 | # CONFIG_USB_EMI26 is not set | ||
| 1144 | # CONFIG_USB_ADUTUX is not set | ||
| 1145 | # CONFIG_USB_AUERSWALD is not set | ||
| 1146 | # CONFIG_USB_RIO500 is not set | ||
| 1147 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1148 | # CONFIG_USB_LCD is not set | ||
| 1149 | # CONFIG_USB_LED is not set | ||
| 1150 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1151 | # CONFIG_USB_CYTHERM is not set | ||
| 1152 | # CONFIG_USB_PHIDGET is not set | ||
| 1153 | # CONFIG_USB_IDMOUSE is not set | ||
| 1154 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1155 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1156 | # CONFIG_USB_LD is not set | ||
| 1157 | # CONFIG_USB_TEST is not set | ||
| 1158 | |||
| 1159 | # | ||
| 1160 | # USB DSL modem support | ||
| 1161 | # | ||
| 1162 | |||
| 1163 | # | ||
| 851 | # USB Gadget Support | 1164 | # USB Gadget Support |
| 852 | # | 1165 | # |
| 853 | # CONFIG_USB_GADGET is not set | 1166 | # CONFIG_USB_GADGET is not set |
| @@ -873,6 +1186,7 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 873 | # | 1186 | # |
| 874 | # InfiniBand support | 1187 | # InfiniBand support |
| 875 | # | 1188 | # |
| 1189 | # CONFIG_INFINIBAND is not set | ||
| 876 | 1190 | ||
| 877 | # | 1191 | # |
| 878 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | 1192 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
| @@ -906,6 +1220,7 @@ CONFIG_EXT3_FS=y | |||
| 906 | CONFIG_EXT3_FS_XATTR=y | 1220 | CONFIG_EXT3_FS_XATTR=y |
| 907 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1221 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 908 | # CONFIG_EXT3_FS_SECURITY is not set | 1222 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1223 | # CONFIG_EXT4DEV_FS is not set | ||
| 909 | CONFIG_JBD=y | 1224 | CONFIG_JBD=y |
| 910 | # CONFIG_JBD_DEBUG is not set | 1225 | # CONFIG_JBD_DEBUG is not set |
| 911 | CONFIG_FS_MBCACHE=y | 1226 | CONFIG_FS_MBCACHE=y |
| @@ -917,6 +1232,7 @@ CONFIG_XFS_FS=m | |||
| 917 | # CONFIG_XFS_SECURITY is not set | 1232 | # CONFIG_XFS_SECURITY is not set |
| 918 | # CONFIG_XFS_POSIX_ACL is not set | 1233 | # CONFIG_XFS_POSIX_ACL is not set |
| 919 | # CONFIG_XFS_RT is not set | 1234 | # CONFIG_XFS_RT is not set |
| 1235 | # CONFIG_GFS2_FS is not set | ||
| 920 | # CONFIG_OCFS2_FS is not set | 1236 | # CONFIG_OCFS2_FS is not set |
| 921 | # CONFIG_MINIX_FS is not set | 1237 | # CONFIG_MINIX_FS is not set |
| 922 | # CONFIG_ROMFS_FS is not set | 1238 | # CONFIG_ROMFS_FS is not set |
| @@ -949,8 +1265,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 949 | # | 1265 | # |
| 950 | CONFIG_PROC_FS=y | 1266 | CONFIG_PROC_FS=y |
| 951 | # CONFIG_PROC_KCORE is not set | 1267 | # CONFIG_PROC_KCORE is not set |
| 1268 | CONFIG_PROC_SYSCTL=y | ||
| 952 | CONFIG_SYSFS=y | 1269 | CONFIG_SYSFS=y |
| 953 | CONFIG_TMPFS=y | 1270 | CONFIG_TMPFS=y |
| 1271 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 954 | # CONFIG_HUGETLB_PAGE is not set | 1272 | # CONFIG_HUGETLB_PAGE is not set |
| 955 | CONFIG_RAMFS=y | 1273 | CONFIG_RAMFS=y |
| 956 | # CONFIG_CONFIGFS_FS is not set | 1274 | # CONFIG_CONFIGFS_FS is not set |
| @@ -994,7 +1312,6 @@ CONFIG_SUNRPC=y | |||
| 994 | CONFIG_SMB_FS=m | 1312 | CONFIG_SMB_FS=m |
| 995 | # CONFIG_SMB_NLS_DEFAULT is not set | 1313 | # CONFIG_SMB_NLS_DEFAULT is not set |
| 996 | # CONFIG_CIFS is not set | 1314 | # CONFIG_CIFS is not set |
| 997 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 998 | # CONFIG_NCP_FS is not set | 1315 | # CONFIG_NCP_FS is not set |
| 999 | # CONFIG_CODA_FS is not set | 1316 | # CONFIG_CODA_FS is not set |
| 1000 | # CONFIG_AFS_FS is not set | 1317 | # CONFIG_AFS_FS is not set |
| @@ -1005,7 +1322,6 @@ CONFIG_SMB_FS=m | |||
| 1005 | # | 1322 | # |
| 1006 | # CONFIG_PARTITION_ADVANCED is not set | 1323 | # CONFIG_PARTITION_ADVANCED is not set |
| 1007 | CONFIG_MSDOS_PARTITION=y | 1324 | CONFIG_MSDOS_PARTITION=y |
| 1008 | CONFIG_SGI_PARTITION=y | ||
| 1009 | 1325 | ||
| 1010 | # | 1326 | # |
| 1011 | # Native Language Support | 1327 | # Native Language Support |
| @@ -1061,11 +1377,13 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 1061 | # | 1377 | # |
| 1062 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 1378 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 1063 | # CONFIG_PRINTK_TIME is not set | 1379 | # CONFIG_PRINTK_TIME is not set |
| 1380 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1064 | # CONFIG_MAGIC_SYSRQ is not set | 1381 | # CONFIG_MAGIC_SYSRQ is not set |
| 1065 | # CONFIG_UNUSED_SYMBOLS is not set | 1382 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1066 | # CONFIG_DEBUG_KERNEL is not set | 1383 | # CONFIG_DEBUG_KERNEL is not set |
| 1067 | CONFIG_LOG_BUF_SHIFT=14 | 1384 | CONFIG_LOG_BUF_SHIFT=14 |
| 1068 | # CONFIG_DEBUG_FS is not set | 1385 | # CONFIG_DEBUG_FS is not set |
| 1386 | # CONFIG_HEADERS_CHECK is not set | ||
| 1069 | CONFIG_CROSSCOMPILE=y | 1387 | CONFIG_CROSSCOMPILE=y |
| 1070 | CONFIG_CMDLINE="" | 1388 | CONFIG_CMDLINE="" |
| 1071 | 1389 | ||
| @@ -1079,6 +1397,9 @@ CONFIG_CMDLINE="" | |||
| 1079 | # Cryptographic options | 1397 | # Cryptographic options |
| 1080 | # | 1398 | # |
| 1081 | CONFIG_CRYPTO=y | 1399 | CONFIG_CRYPTO=y |
| 1400 | CONFIG_CRYPTO_ALGAPI=m | ||
| 1401 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1402 | CONFIG_CRYPTO_MANAGER=m | ||
| 1082 | # CONFIG_CRYPTO_HMAC is not set | 1403 | # CONFIG_CRYPTO_HMAC is not set |
| 1083 | # CONFIG_CRYPTO_NULL is not set | 1404 | # CONFIG_CRYPTO_NULL is not set |
| 1084 | # CONFIG_CRYPTO_MD4 is not set | 1405 | # CONFIG_CRYPTO_MD4 is not set |
| @@ -1088,6 +1409,8 @@ CONFIG_CRYPTO_SHA1=m | |||
| 1088 | # CONFIG_CRYPTO_SHA512 is not set | 1409 | # CONFIG_CRYPTO_SHA512 is not set |
| 1089 | # CONFIG_CRYPTO_WP512 is not set | 1410 | # CONFIG_CRYPTO_WP512 is not set |
| 1090 | # CONFIG_CRYPTO_TGR192 is not set | 1411 | # CONFIG_CRYPTO_TGR192 is not set |
| 1412 | CONFIG_CRYPTO_ECB=m | ||
| 1413 | CONFIG_CRYPTO_CBC=m | ||
| 1091 | # CONFIG_CRYPTO_DES is not set | 1414 | # CONFIG_CRYPTO_DES is not set |
| 1092 | # CONFIG_CRYPTO_BLOWFISH is not set | 1415 | # CONFIG_CRYPTO_BLOWFISH is not set |
| 1093 | # CONFIG_CRYPTO_TWOFISH is not set | 1416 | # CONFIG_CRYPTO_TWOFISH is not set |
diff --git a/arch/mips/configs/tb0287_defconfig b/arch/mips/configs/tb0287_defconfig index ad7271b3f266..f7e8194809a1 100644 --- a/arch/mips/configs/tb0287_defconfig +++ b/arch/mips/configs/tb0287_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.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Thu Jul 6 10:04:21 2006 | 4 | # Wed Oct 18 12:57:11 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -25,8 +25,6 @@ CONFIG_MIPS=y | |||
| 25 | # CONFIG_MIPS_COBALT is not set | 25 | # CONFIG_MIPS_COBALT is not set |
| 26 | # CONFIG_MACH_DECSTATION is not set | 26 | # CONFIG_MACH_DECSTATION is not set |
| 27 | # CONFIG_MIPS_EV64120 is not set | 27 | # CONFIG_MIPS_EV64120 is not set |
| 28 | # CONFIG_MIPS_IVR is not set | ||
| 29 | # CONFIG_MIPS_ITE8172 is not set | ||
| 30 | # CONFIG_MACH_JAZZ is not set | 28 | # CONFIG_MACH_JAZZ is not set |
| 31 | # CONFIG_LASAT is not set | 29 | # CONFIG_LASAT is not set |
| 32 | # CONFIG_MIPS_ATLAS is not set | 30 | # CONFIG_MIPS_ATLAS is not set |
| @@ -72,11 +70,11 @@ CONFIG_TANBAC_TB0287=y | |||
| 72 | # CONFIG_VICTOR_MPC30X is not set | 70 | # CONFIG_VICTOR_MPC30X is not set |
| 73 | # CONFIG_ZAO_CAPCELLA is not set | 71 | # CONFIG_ZAO_CAPCELLA is not set |
| 74 | CONFIG_PCI_VR41XX=y | 72 | CONFIG_PCI_VR41XX=y |
| 75 | # CONFIG_VRC4173 is not set | ||
| 76 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 73 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 77 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 74 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| 78 | CONFIG_GENERIC_HWEIGHT=y | 75 | CONFIG_GENERIC_HWEIGHT=y |
| 79 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 76 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 77 | CONFIG_GENERIC_TIME=y | ||
| 80 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 78 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
| 81 | CONFIG_DMA_NONCOHERENT=y | 79 | CONFIG_DMA_NONCOHERENT=y |
| 82 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 80 | CONFIG_DMA_NEED_PCI_MAP_STATE=y |
| @@ -123,8 +121,8 @@ CONFIG_PAGE_SIZE_4KB=y | |||
| 123 | # CONFIG_PAGE_SIZE_16KB is not set | 121 | # CONFIG_PAGE_SIZE_16KB is not set |
| 124 | # CONFIG_PAGE_SIZE_64KB is not set | 122 | # CONFIG_PAGE_SIZE_64KB is not set |
| 125 | CONFIG_MIPS_MT_DISABLED=y | 123 | CONFIG_MIPS_MT_DISABLED=y |
| 126 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 127 | # CONFIG_MIPS_MT_SMP is not set | 124 | # CONFIG_MIPS_MT_SMP is not set |
| 125 | # CONFIG_MIPS_MT_SMTC is not set | ||
| 128 | # CONFIG_MIPS_VPE_LOADER is not set | 126 | # CONFIG_MIPS_VPE_LOADER is not set |
| 129 | CONFIG_CPU_HAS_SYNC=y | 127 | CONFIG_CPU_HAS_SYNC=y |
| 130 | CONFIG_GENERIC_HARDIRQS=y | 128 | CONFIG_GENERIC_HARDIRQS=y |
| @@ -169,15 +167,19 @@ CONFIG_LOCALVERSION="" | |||
| 169 | CONFIG_LOCALVERSION_AUTO=y | 167 | CONFIG_LOCALVERSION_AUTO=y |
| 170 | CONFIG_SWAP=y | 168 | CONFIG_SWAP=y |
| 171 | CONFIG_SYSVIPC=y | 169 | CONFIG_SYSVIPC=y |
| 170 | # CONFIG_IPC_NS is not set | ||
| 172 | # CONFIG_POSIX_MQUEUE is not set | 171 | # CONFIG_POSIX_MQUEUE is not set |
| 173 | # CONFIG_BSD_PROCESS_ACCT is not set | 172 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 174 | CONFIG_SYSCTL=y | 173 | # CONFIG_TASKSTATS is not set |
| 174 | # CONFIG_UTS_NS is not set | ||
| 175 | # CONFIG_AUDIT is not set | 175 | # CONFIG_AUDIT is not set |
| 176 | # CONFIG_IKCONFIG is not set | 176 | # CONFIG_IKCONFIG is not set |
| 177 | # CONFIG_RELAY is not set | 177 | # CONFIG_RELAY is not set |
| 178 | CONFIG_INITRAMFS_SOURCE="" | 178 | CONFIG_INITRAMFS_SOURCE="" |
| 179 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 179 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| 180 | CONFIG_SYSCTL=y | ||
| 180 | CONFIG_EMBEDDED=y | 181 | CONFIG_EMBEDDED=y |
| 182 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 181 | CONFIG_KALLSYMS=y | 183 | CONFIG_KALLSYMS=y |
| 182 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 184 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| 183 | # CONFIG_HOTPLUG is not set | 185 | # CONFIG_HOTPLUG is not set |
| @@ -185,12 +187,12 @@ CONFIG_PRINTK=y | |||
| 185 | CONFIG_BUG=y | 187 | CONFIG_BUG=y |
| 186 | CONFIG_ELF_CORE=y | 188 | CONFIG_ELF_CORE=y |
| 187 | CONFIG_BASE_FULL=y | 189 | CONFIG_BASE_FULL=y |
| 188 | CONFIG_RT_MUTEXES=y | ||
| 189 | CONFIG_FUTEX=y | 190 | CONFIG_FUTEX=y |
| 190 | CONFIG_EPOLL=y | 191 | CONFIG_EPOLL=y |
| 191 | CONFIG_SHMEM=y | 192 | CONFIG_SHMEM=y |
| 192 | CONFIG_SLAB=y | 193 | CONFIG_SLAB=y |
| 193 | CONFIG_VM_EVENT_COUNTERS=y | 194 | CONFIG_VM_EVENT_COUNTERS=y |
| 195 | CONFIG_RT_MUTEXES=y | ||
| 194 | # CONFIG_TINY_SHMEM is not set | 196 | # CONFIG_TINY_SHMEM is not set |
| 195 | CONFIG_BASE_SMALL=0 | 197 | CONFIG_BASE_SMALL=0 |
| 196 | # CONFIG_SLOB is not set | 198 | # CONFIG_SLOB is not set |
| @@ -208,6 +210,7 @@ CONFIG_KMOD=y | |||
| 208 | # | 210 | # |
| 209 | # Block layer | 211 | # Block layer |
| 210 | # | 212 | # |
| 213 | CONFIG_BLOCK=y | ||
| 211 | # CONFIG_LBD is not set | 214 | # CONFIG_LBD is not set |
| 212 | # CONFIG_BLK_DEV_IO_TRACE is not set | 215 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 213 | # CONFIG_LSF is not set | 216 | # CONFIG_LSF is not set |
| @@ -230,17 +233,16 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| 230 | # | 233 | # |
| 231 | CONFIG_HW_HAS_PCI=y | 234 | CONFIG_HW_HAS_PCI=y |
| 232 | CONFIG_PCI=y | 235 | CONFIG_PCI=y |
| 236 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
| 233 | CONFIG_MMU=y | 237 | CONFIG_MMU=y |
| 234 | 238 | ||
| 235 | # | 239 | # |
| 236 | # PCCARD (PCMCIA/CardBus) support | 240 | # PCCARD (PCMCIA/CardBus) support |
| 237 | # | 241 | # |
| 238 | # CONFIG_PCCARD is not set | ||
| 239 | 242 | ||
| 240 | # | 243 | # |
| 241 | # PCI Hotplug Support | 244 | # PCI Hotplug Support |
| 242 | # | 245 | # |
| 243 | # CONFIG_HOTPLUG_PCI is not set | ||
| 244 | 246 | ||
| 245 | # | 247 | # |
| 246 | # Executable file formats | 248 | # Executable file formats |
| @@ -263,6 +265,7 @@ CONFIG_PACKET=y | |||
| 263 | CONFIG_UNIX=y | 265 | CONFIG_UNIX=y |
| 264 | CONFIG_XFRM=y | 266 | CONFIG_XFRM=y |
| 265 | # CONFIG_XFRM_USER is not set | 267 | # CONFIG_XFRM_USER is not set |
| 268 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 266 | # CONFIG_NET_KEY is not set | 269 | # CONFIG_NET_KEY is not set |
| 267 | CONFIG_INET=y | 270 | CONFIG_INET=y |
| 268 | CONFIG_IP_MULTICAST=y | 271 | CONFIG_IP_MULTICAST=y |
| @@ -291,13 +294,10 @@ CONFIG_SYN_COOKIES=y | |||
| 291 | CONFIG_INET_TUNNEL=m | 294 | CONFIG_INET_TUNNEL=m |
| 292 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 295 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
| 293 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 296 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
| 297 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 294 | CONFIG_INET_DIAG=y | 298 | CONFIG_INET_DIAG=y |
| 295 | CONFIG_INET_TCP_DIAG=y | 299 | CONFIG_INET_TCP_DIAG=y |
| 296 | CONFIG_TCP_CONG_ADVANCED=y | 300 | CONFIG_TCP_CONG_ADVANCED=y |
| 297 | |||
| 298 | # | ||
| 299 | # TCP congestion control | ||
| 300 | # | ||
| 301 | CONFIG_TCP_CONG_BIC=y | 301 | CONFIG_TCP_CONG_BIC=y |
| 302 | CONFIG_TCP_CONG_CUBIC=m | 302 | CONFIG_TCP_CONG_CUBIC=m |
| 303 | CONFIG_TCP_CONG_WESTWOOD=m | 303 | CONFIG_TCP_CONG_WESTWOOD=m |
| @@ -308,7 +308,13 @@ CONFIG_TCP_CONG_HTCP=m | |||
| 308 | # CONFIG_TCP_CONG_SCALABLE is not set | 308 | # CONFIG_TCP_CONG_SCALABLE is not set |
| 309 | # CONFIG_TCP_CONG_LP is not set | 309 | # CONFIG_TCP_CONG_LP is not set |
| 310 | # CONFIG_TCP_CONG_VENO is not set | 310 | # CONFIG_TCP_CONG_VENO is not set |
| 311 | # CONFIG_TCP_CONG_COMPOUND is not set | 311 | CONFIG_DEFAULT_BIC=y |
| 312 | # CONFIG_DEFAULT_CUBIC is not set | ||
| 313 | # CONFIG_DEFAULT_HTCP is not set | ||
| 314 | # CONFIG_DEFAULT_VEGAS is not set | ||
| 315 | # CONFIG_DEFAULT_WESTWOOD is not set | ||
| 316 | # CONFIG_DEFAULT_RENO is not set | ||
| 317 | CONFIG_DEFAULT_TCP_CONG="bic" | ||
| 312 | # CONFIG_IPV6 is not set | 318 | # CONFIG_IPV6 is not set |
| 313 | # CONFIG_INET6_XFRM_TUNNEL is not set | 319 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 314 | # CONFIG_INET6_TUNNEL is not set | 320 | # CONFIG_INET6_TUNNEL is not set |
| @@ -338,7 +344,6 @@ CONFIG_NETWORK_SECMARK=y | |||
| 338 | # CONFIG_ATALK is not set | 344 | # CONFIG_ATALK is not set |
| 339 | # CONFIG_X25 is not set | 345 | # CONFIG_X25 is not set |
| 340 | # CONFIG_LAPB is not set | 346 | # CONFIG_LAPB is not set |
| 341 | # CONFIG_NET_DIVERT is not set | ||
| 342 | # CONFIG_ECONET is not set | 347 | # CONFIG_ECONET is not set |
| 343 | # CONFIG_WAN_ROUTER is not set | 348 | # CONFIG_WAN_ROUTER is not set |
| 344 | 349 | ||
| @@ -355,6 +360,7 @@ CONFIG_NETWORK_SECMARK=y | |||
| 355 | # CONFIG_IRDA is not set | 360 | # CONFIG_IRDA is not set |
| 356 | # CONFIG_BT is not set | 361 | # CONFIG_BT is not set |
| 357 | # CONFIG_IEEE80211 is not set | 362 | # CONFIG_IEEE80211 is not set |
| 363 | CONFIG_FIB_RULES=y | ||
| 358 | 364 | ||
| 359 | # | 365 | # |
| 360 | # Device Drivers | 366 | # Device Drivers |
| @@ -365,7 +371,6 @@ CONFIG_NETWORK_SECMARK=y | |||
| 365 | # | 371 | # |
| 366 | CONFIG_STANDALONE=y | 372 | CONFIG_STANDALONE=y |
| 367 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 373 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 368 | # CONFIG_FW_LOADER is not set | ||
| 369 | # CONFIG_SYS_HYPERVISOR is not set | 374 | # CONFIG_SYS_HYPERVISOR is not set |
| 370 | 375 | ||
| 371 | # | 376 | # |
| @@ -403,6 +408,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 403 | CONFIG_BLK_DEV_RAM=y | 408 | CONFIG_BLK_DEV_RAM=y |
| 404 | CONFIG_BLK_DEV_RAM_COUNT=16 | 409 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 405 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 410 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 411 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 406 | # CONFIG_BLK_DEV_INITRD is not set | 412 | # CONFIG_BLK_DEV_INITRD is not set |
| 407 | # CONFIG_CDROM_PKTCDVD is not set | 413 | # CONFIG_CDROM_PKTCDVD is not set |
| 408 | # CONFIG_ATA_OVER_ETH is not set | 414 | # CONFIG_ATA_OVER_ETH is not set |
| @@ -410,65 +416,14 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
| 410 | # | 416 | # |
| 411 | # ATA/ATAPI/MFM/RLL support | 417 | # ATA/ATAPI/MFM/RLL support |
| 412 | # | 418 | # |
| 413 | CONFIG_IDE=y | 419 | # CONFIG_IDE is not set |
| 414 | CONFIG_BLK_DEV_IDE=y | ||
| 415 | |||
| 416 | # | ||
| 417 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 418 | # | ||
| 419 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 420 | CONFIG_BLK_DEV_IDEDISK=y | ||
| 421 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
| 422 | # CONFIG_BLK_DEV_IDECD is not set | ||
| 423 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 424 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
| 425 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
| 426 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 427 | |||
| 428 | # | ||
| 429 | # IDE chipset support/bugfixes | ||
| 430 | # | ||
| 431 | CONFIG_IDE_GENERIC=y | ||
| 432 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 433 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
| 434 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 435 | # CONFIG_BLK_DEV_GENERIC is not set | ||
| 436 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 437 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 438 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 439 | # CONFIG_IDEDMA_PCI_AUTO is not set | ||
| 440 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 441 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 442 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 443 | # CONFIG_BLK_DEV_CMD64X is not set | ||
| 444 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 445 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 446 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 447 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 448 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 449 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 450 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 451 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 452 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 453 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 454 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 455 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 456 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 457 | CONFIG_BLK_DEV_SIIMAGE=y | ||
| 458 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 459 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 460 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 461 | # CONFIG_IDE_ARM is not set | ||
| 462 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 463 | # CONFIG_IDEDMA_IVB is not set | ||
| 464 | # CONFIG_IDEDMA_AUTO is not set | ||
| 465 | # CONFIG_BLK_DEV_HD is not set | ||
| 466 | 420 | ||
| 467 | # | 421 | # |
| 468 | # SCSI device support | 422 | # SCSI device support |
| 469 | # | 423 | # |
| 470 | # CONFIG_RAID_ATTRS is not set | 424 | # CONFIG_RAID_ATTRS is not set |
| 471 | CONFIG_SCSI=y | 425 | CONFIG_SCSI=y |
| 426 | # CONFIG_SCSI_NETLINK is not set | ||
| 472 | CONFIG_SCSI_PROC_FS=y | 427 | CONFIG_SCSI_PROC_FS=y |
| 473 | 428 | ||
| 474 | # | 429 | # |
| @@ -489,12 +444,13 @@ CONFIG_BLK_DEV_SD=y | |||
| 489 | # CONFIG_SCSI_LOGGING is not set | 444 | # CONFIG_SCSI_LOGGING is not set |
| 490 | 445 | ||
| 491 | # | 446 | # |
| 492 | # SCSI Transport Attributes | 447 | # SCSI Transports |
| 493 | # | 448 | # |
| 494 | # CONFIG_SCSI_SPI_ATTRS is not set | 449 | # CONFIG_SCSI_SPI_ATTRS is not set |
| 495 | # CONFIG_SCSI_FC_ATTRS is not set | 450 | # CONFIG_SCSI_FC_ATTRS is not set |
| 496 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 451 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
| 497 | # CONFIG_SCSI_SAS_ATTRS is not set | 452 | # CONFIG_SCSI_SAS_ATTRS is not set |
| 453 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 498 | 454 | ||
| 499 | # | 455 | # |
| 500 | # SCSI low-level drivers | 456 | # SCSI low-level drivers |
| @@ -507,21 +463,24 @@ CONFIG_BLK_DEV_SD=y | |||
| 507 | # CONFIG_SCSI_AIC7XXX is not set | 463 | # CONFIG_SCSI_AIC7XXX is not set |
| 508 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 464 | # CONFIG_SCSI_AIC7XXX_OLD is not set |
| 509 | # CONFIG_SCSI_AIC79XX is not set | 465 | # CONFIG_SCSI_AIC79XX is not set |
| 466 | # CONFIG_SCSI_AIC94XX is not set | ||
| 510 | # CONFIG_SCSI_DPT_I2O is not set | 467 | # CONFIG_SCSI_DPT_I2O is not set |
| 468 | # CONFIG_SCSI_ARCMSR is not set | ||
| 511 | # CONFIG_MEGARAID_NEWGEN is not set | 469 | # CONFIG_MEGARAID_NEWGEN is not set |
| 512 | # CONFIG_MEGARAID_LEGACY is not set | 470 | # CONFIG_MEGARAID_LEGACY is not set |
| 513 | # CONFIG_MEGARAID_SAS is not set | 471 | # CONFIG_MEGARAID_SAS is not set |
| 514 | # CONFIG_SCSI_SATA is not set | ||
| 515 | # CONFIG_SCSI_HPTIOP is not set | 472 | # CONFIG_SCSI_HPTIOP is not set |
| 516 | # CONFIG_SCSI_DMX3191D is not set | 473 | # CONFIG_SCSI_DMX3191D is not set |
| 517 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 474 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
| 518 | # CONFIG_SCSI_IPS is not set | 475 | # CONFIG_SCSI_IPS is not set |
| 519 | # CONFIG_SCSI_INITIO is not set | 476 | # CONFIG_SCSI_INITIO is not set |
| 520 | # CONFIG_SCSI_INIA100 is not set | 477 | # CONFIG_SCSI_INIA100 is not set |
| 478 | # CONFIG_SCSI_STEX is not set | ||
| 521 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 479 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 522 | # CONFIG_SCSI_IPR is not set | 480 | # CONFIG_SCSI_IPR is not set |
| 523 | # CONFIG_SCSI_QLOGIC_1280 is not set | 481 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 524 | # CONFIG_SCSI_QLA_FC is not set | 482 | # CONFIG_SCSI_QLA_FC is not set |
| 483 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 525 | # CONFIG_SCSI_LPFC is not set | 484 | # CONFIG_SCSI_LPFC is not set |
| 526 | # CONFIG_SCSI_DC395x is not set | 485 | # CONFIG_SCSI_DC395x is not set |
| 527 | # CONFIG_SCSI_DC390T is not set | 486 | # CONFIG_SCSI_DC390T is not set |
| @@ -529,6 +488,59 @@ CONFIG_BLK_DEV_SD=y | |||
| 529 | # CONFIG_SCSI_DEBUG is not set | 488 | # CONFIG_SCSI_DEBUG is not set |
| 530 | 489 | ||
| 531 | # | 490 | # |
| 491 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 492 | # | ||
| 493 | CONFIG_ATA=y | ||
| 494 | # CONFIG_SATA_AHCI is not set | ||
| 495 | # CONFIG_SATA_SVW is not set | ||
| 496 | # CONFIG_ATA_PIIX is not set | ||
| 497 | # CONFIG_SATA_MV is not set | ||
| 498 | # CONFIG_SATA_NV is not set | ||
| 499 | # CONFIG_PDC_ADMA is not set | ||
| 500 | # CONFIG_SATA_QSTOR is not set | ||
| 501 | # CONFIG_SATA_PROMISE is not set | ||
| 502 | # CONFIG_SATA_SX4 is not set | ||
| 503 | # CONFIG_SATA_SIL is not set | ||
| 504 | # CONFIG_SATA_SIL24 is not set | ||
| 505 | # CONFIG_SATA_SIS is not set | ||
| 506 | # CONFIG_SATA_ULI is not set | ||
| 507 | # CONFIG_SATA_VIA is not set | ||
| 508 | # CONFIG_SATA_VITESSE is not set | ||
| 509 | # CONFIG_PATA_ALI is not set | ||
| 510 | # CONFIG_PATA_AMD is not set | ||
| 511 | # CONFIG_PATA_ARTOP is not set | ||
| 512 | # CONFIG_PATA_ATIIXP is not set | ||
| 513 | # CONFIG_PATA_CMD64X is not set | ||
| 514 | # CONFIG_PATA_CS5520 is not set | ||
| 515 | # CONFIG_PATA_CS5530 is not set | ||
| 516 | # CONFIG_PATA_CYPRESS is not set | ||
| 517 | # CONFIG_PATA_EFAR is not set | ||
| 518 | # CONFIG_ATA_GENERIC is not set | ||
| 519 | # CONFIG_PATA_HPT366 is not set | ||
| 520 | # CONFIG_PATA_HPT37X is not set | ||
| 521 | # CONFIG_PATA_HPT3X2N is not set | ||
| 522 | # CONFIG_PATA_HPT3X3 is not set | ||
| 523 | # CONFIG_PATA_IT821X is not set | ||
| 524 | # CONFIG_PATA_JMICRON is not set | ||
| 525 | # CONFIG_PATA_TRIFLEX is not set | ||
| 526 | # CONFIG_PATA_MPIIX is not set | ||
| 527 | # CONFIG_PATA_OLDPIIX is not set | ||
| 528 | # CONFIG_PATA_NETCELL is not set | ||
| 529 | # CONFIG_PATA_NS87410 is not set | ||
| 530 | # CONFIG_PATA_OPTI is not set | ||
| 531 | # CONFIG_PATA_OPTIDMA is not set | ||
| 532 | # CONFIG_PATA_PDC_OLD is not set | ||
| 533 | # CONFIG_PATA_RADISYS is not set | ||
| 534 | # CONFIG_PATA_RZ1000 is not set | ||
| 535 | # CONFIG_PATA_SC1200 is not set | ||
| 536 | # CONFIG_PATA_SERVERWORKS is not set | ||
| 537 | # CONFIG_PATA_PDC2027X is not set | ||
| 538 | CONFIG_PATA_SIL680=y | ||
| 539 | # CONFIG_PATA_SIS is not set | ||
| 540 | # CONFIG_PATA_VIA is not set | ||
| 541 | # CONFIG_PATA_WINBOND is not set | ||
| 542 | |||
| 543 | # | ||
| 532 | # Multi-device support (RAID and LVM) | 544 | # Multi-device support (RAID and LVM) |
| 533 | # | 545 | # |
| 534 | # CONFIG_MD is not set | 546 | # CONFIG_MD is not set |
| @@ -632,6 +644,7 @@ CONFIG_R8169=y | |||
| 632 | # CONFIG_SK98LIN is not set | 644 | # CONFIG_SK98LIN is not set |
| 633 | # CONFIG_TIGON3 is not set | 645 | # CONFIG_TIGON3 is not set |
| 634 | # CONFIG_BNX2 is not set | 646 | # CONFIG_BNX2 is not set |
| 647 | # CONFIG_QLA3XXX is not set | ||
| 635 | 648 | ||
| 636 | # | 649 | # |
| 637 | # Ethernet (10000 Mbit) | 650 | # Ethernet (10000 Mbit) |
| @@ -679,6 +692,7 @@ CONFIG_R8169=y | |||
| 679 | # Input device support | 692 | # Input device support |
| 680 | # | 693 | # |
| 681 | CONFIG_INPUT=y | 694 | CONFIG_INPUT=y |
| 695 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 682 | 696 | ||
| 683 | # | 697 | # |
| 684 | # Userland interfaces | 698 | # Userland interfaces |
| @@ -758,7 +772,6 @@ CONFIG_GPIO_VR41XX=y | |||
| 758 | # TPM devices | 772 | # TPM devices |
| 759 | # | 773 | # |
| 760 | # CONFIG_TCG_TPM is not set | 774 | # CONFIG_TCG_TPM is not set |
| 761 | # CONFIG_TELCLOCK is not set | ||
| 762 | 775 | ||
| 763 | # | 776 | # |
| 764 | # I2C support | 777 | # I2C support |
| @@ -784,12 +797,12 @@ CONFIG_GPIO_VR41XX=y | |||
| 784 | # | 797 | # |
| 785 | # Misc devices | 798 | # Misc devices |
| 786 | # | 799 | # |
| 800 | # CONFIG_TIFM_CORE is not set | ||
| 787 | 801 | ||
| 788 | # | 802 | # |
| 789 | # Multimedia devices | 803 | # Multimedia devices |
| 790 | # | 804 | # |
| 791 | # CONFIG_VIDEO_DEV is not set | 805 | # CONFIG_VIDEO_DEV is not set |
| 792 | CONFIG_VIDEO_V4L2=y | ||
| 793 | 806 | ||
| 794 | # | 807 | # |
| 795 | # Digital Video Broadcasting Devices | 808 | # Digital Video Broadcasting Devices |
| @@ -897,13 +910,13 @@ CONFIG_USB_STORAGE=m | |||
| 897 | # CONFIG_USB_STORAGE_DEBUG is not set | 910 | # CONFIG_USB_STORAGE_DEBUG is not set |
| 898 | # CONFIG_USB_STORAGE_DATAFAB is not set | 911 | # CONFIG_USB_STORAGE_DATAFAB is not set |
| 899 | # CONFIG_USB_STORAGE_FREECOM is not set | 912 | # CONFIG_USB_STORAGE_FREECOM is not set |
| 900 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 901 | # CONFIG_USB_STORAGE_DPCM is not set | 913 | # CONFIG_USB_STORAGE_DPCM is not set |
| 902 | # CONFIG_USB_STORAGE_USBAT is not set | 914 | # CONFIG_USB_STORAGE_USBAT is not set |
| 903 | # CONFIG_USB_STORAGE_SDDR09 is not set | 915 | # CONFIG_USB_STORAGE_SDDR09 is not set |
| 904 | # CONFIG_USB_STORAGE_SDDR55 is not set | 916 | # CONFIG_USB_STORAGE_SDDR55 is not set |
| 905 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 917 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
| 906 | # CONFIG_USB_STORAGE_ALAUDA is not set | 918 | # CONFIG_USB_STORAGE_ALAUDA is not set |
| 919 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 907 | # CONFIG_USB_LIBUSUAL is not set | 920 | # CONFIG_USB_LIBUSUAL is not set |
| 908 | 921 | ||
| 909 | # | 922 | # |
| @@ -932,6 +945,7 @@ CONFIG_USB_HIDINPUT=y | |||
| 932 | # CONFIG_USB_ATI_REMOTE2 is not set | 945 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 933 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 946 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 934 | # CONFIG_USB_APPLETOUCH is not set | 947 | # CONFIG_USB_APPLETOUCH is not set |
| 948 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 935 | 949 | ||
| 936 | # | 950 | # |
| 937 | # USB Imaging devices | 951 | # USB Imaging devices |
| @@ -963,16 +977,17 @@ CONFIG_USB_MON=y | |||
| 963 | # | 977 | # |
| 964 | # CONFIG_USB_EMI62 is not set | 978 | # CONFIG_USB_EMI62 is not set |
| 965 | # CONFIG_USB_EMI26 is not set | 979 | # CONFIG_USB_EMI26 is not set |
| 980 | # CONFIG_USB_ADUTUX is not set | ||
| 966 | # CONFIG_USB_AUERSWALD is not set | 981 | # CONFIG_USB_AUERSWALD is not set |
| 967 | # CONFIG_USB_RIO500 is not set | 982 | # CONFIG_USB_RIO500 is not set |
| 968 | # CONFIG_USB_LEGOTOWER is not set | 983 | # CONFIG_USB_LEGOTOWER is not set |
| 969 | # CONFIG_USB_LCD is not set | 984 | # CONFIG_USB_LCD is not set |
| 970 | # CONFIG_USB_LED is not set | 985 | # CONFIG_USB_LED is not set |
| 971 | # CONFIG_USB_CY7C63 is not set | 986 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
| 972 | # CONFIG_USB_CYTHERM is not set | 987 | # CONFIG_USB_CYTHERM is not set |
| 973 | # CONFIG_USB_PHIDGETKIT is not set | 988 | # CONFIG_USB_PHIDGET is not set |
| 974 | # CONFIG_USB_PHIDGETSERVO is not set | ||
| 975 | # CONFIG_USB_IDMOUSE is not set | 989 | # CONFIG_USB_IDMOUSE is not set |
| 990 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 976 | # CONFIG_USB_APPLEDISPLAY is not set | 991 | # CONFIG_USB_APPLEDISPLAY is not set |
| 977 | # CONFIG_USB_SISUSBVGA is not set | 992 | # CONFIG_USB_SISUSBVGA is not set |
| 978 | # CONFIG_USB_LD is not set | 993 | # CONFIG_USB_LD is not set |
| @@ -1041,6 +1056,7 @@ CONFIG_EXT3_FS=y | |||
| 1041 | CONFIG_EXT3_FS_XATTR=y | 1056 | CONFIG_EXT3_FS_XATTR=y |
| 1042 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1057 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 1043 | # CONFIG_EXT3_FS_SECURITY is not set | 1058 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1059 | # CONFIG_EXT4DEV_FS is not set | ||
| 1044 | CONFIG_JBD=y | 1060 | CONFIG_JBD=y |
| 1045 | # CONFIG_JBD_DEBUG is not set | 1061 | # CONFIG_JBD_DEBUG is not set |
| 1046 | CONFIG_FS_MBCACHE=y | 1062 | CONFIG_FS_MBCACHE=y |
| @@ -1052,6 +1068,7 @@ CONFIG_XFS_QUOTA=y | |||
| 1052 | # CONFIG_XFS_SECURITY is not set | 1068 | # CONFIG_XFS_SECURITY is not set |
| 1053 | CONFIG_XFS_POSIX_ACL=y | 1069 | CONFIG_XFS_POSIX_ACL=y |
| 1054 | # CONFIG_XFS_RT is not set | 1070 | # CONFIG_XFS_RT is not set |
| 1071 | # CONFIG_GFS2_FS is not set | ||
| 1055 | # CONFIG_OCFS2_FS is not set | 1072 | # CONFIG_OCFS2_FS is not set |
| 1056 | # CONFIG_MINIX_FS is not set | 1073 | # CONFIG_MINIX_FS is not set |
| 1057 | CONFIG_ROMFS_FS=m | 1074 | CONFIG_ROMFS_FS=m |
| @@ -1082,8 +1099,10 @@ CONFIG_AUTOFS4_FS=y | |||
| 1082 | # | 1099 | # |
| 1083 | CONFIG_PROC_FS=y | 1100 | CONFIG_PROC_FS=y |
| 1084 | CONFIG_PROC_KCORE=y | 1101 | CONFIG_PROC_KCORE=y |
| 1102 | CONFIG_PROC_SYSCTL=y | ||
| 1085 | CONFIG_SYSFS=y | 1103 | CONFIG_SYSFS=y |
| 1086 | CONFIG_TMPFS=y | 1104 | CONFIG_TMPFS=y |
| 1105 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1087 | # CONFIG_HUGETLB_PAGE is not set | 1106 | # CONFIG_HUGETLB_PAGE is not set |
| 1088 | CONFIG_RAMFS=y | 1107 | CONFIG_RAMFS=y |
| 1089 | # CONFIG_CONFIGFS_FS is not set | 1108 | # CONFIG_CONFIGFS_FS is not set |
| @@ -1123,7 +1142,6 @@ CONFIG_SUNRPC=y | |||
| 1123 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1142 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 1124 | # CONFIG_SMB_FS is not set | 1143 | # CONFIG_SMB_FS is not set |
| 1125 | # CONFIG_CIFS is not set | 1144 | # CONFIG_CIFS is not set |
| 1126 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1127 | # CONFIG_NCP_FS is not set | 1145 | # CONFIG_NCP_FS is not set |
| 1128 | # CONFIG_CODA_FS is not set | 1146 | # CONFIG_CODA_FS is not set |
| 1129 | # CONFIG_AFS_FS is not set | 1147 | # CONFIG_AFS_FS is not set |
| @@ -1150,11 +1168,13 @@ CONFIG_MSDOS_PARTITION=y | |||
| 1150 | # | 1168 | # |
| 1151 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 1169 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 1152 | # CONFIG_PRINTK_TIME is not set | 1170 | # CONFIG_PRINTK_TIME is not set |
| 1171 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1153 | # CONFIG_MAGIC_SYSRQ is not set | 1172 | # CONFIG_MAGIC_SYSRQ is not set |
| 1154 | # CONFIG_UNUSED_SYMBOLS is not set | 1173 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1155 | # CONFIG_DEBUG_KERNEL is not set | 1174 | # CONFIG_DEBUG_KERNEL is not set |
| 1156 | CONFIG_LOG_BUF_SHIFT=14 | 1175 | CONFIG_LOG_BUF_SHIFT=14 |
| 1157 | # CONFIG_DEBUG_FS is not set | 1176 | # CONFIG_DEBUG_FS is not set |
| 1177 | # CONFIG_HEADERS_CHECK is not set | ||
| 1158 | CONFIG_CROSSCOMPILE=y | 1178 | CONFIG_CROSSCOMPILE=y |
| 1159 | CONFIG_CMDLINE="mem=64M console=ttyVR0,115200 ip=any root=/dev/nfs" | 1179 | CONFIG_CMDLINE="mem=64M console=ttyVR0,115200 ip=any root=/dev/nfs" |
| 1160 | 1180 | ||
| @@ -1170,10 +1190,6 @@ CONFIG_CMDLINE="mem=64M console=ttyVR0,115200 ip=any root=/dev/nfs" | |||
| 1170 | # CONFIG_CRYPTO is not set | 1190 | # CONFIG_CRYPTO is not set |
| 1171 | 1191 | ||
| 1172 | # | 1192 | # |
| 1173 | # Hardware crypto devices | ||
| 1174 | # | ||
| 1175 | |||
| 1176 | # | ||
| 1177 | # Library routines | 1193 | # Library routines |
| 1178 | # | 1194 | # |
| 1179 | # CONFIG_CRC_CCITT is not set | 1195 | # CONFIG_CRC_CCITT is not set |
diff --git a/arch/mips/dec/time.c b/arch/mips/dec/time.c index 4cf0c06e2414..69e424e9ab6f 100644 --- a/arch/mips/dec/time.c +++ b/arch/mips/dec/time.c | |||
| @@ -160,11 +160,6 @@ static unsigned int dec_ioasic_hpt_read(void) | |||
| 160 | return ioasic_read(IO_REG_FCTR); | 160 | return ioasic_read(IO_REG_FCTR); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | static void dec_ioasic_hpt_init(unsigned int count) | ||
| 164 | { | ||
| 165 | ioasic_write(IO_REG_FCTR, ioasic_read(IO_REG_FCTR) - count); | ||
| 166 | } | ||
| 167 | |||
| 168 | 163 | ||
| 169 | void __init dec_time_init(void) | 164 | void __init dec_time_init(void) |
| 170 | { | 165 | { |
| @@ -174,11 +169,9 @@ void __init dec_time_init(void) | |||
| 174 | mips_timer_state = dec_timer_state; | 169 | mips_timer_state = dec_timer_state; |
| 175 | mips_timer_ack = dec_timer_ack; | 170 | mips_timer_ack = dec_timer_ack; |
| 176 | 171 | ||
| 177 | if (!cpu_has_counter && IOASIC) { | 172 | if (!cpu_has_counter && IOASIC) |
| 178 | /* For pre-R4k systems we use the I/O ASIC's counter. */ | 173 | /* For pre-R4k systems we use the I/O ASIC's counter. */ |
| 179 | mips_hpt_read = dec_ioasic_hpt_read; | 174 | mips_hpt_read = dec_ioasic_hpt_read; |
| 180 | mips_hpt_init = dec_ioasic_hpt_init; | ||
| 181 | } | ||
| 182 | 175 | ||
| 183 | /* Set up the rate of periodic DS1287 interrupts. */ | 176 | /* Set up the rate of periodic DS1287 interrupts. */ |
| 184 | CMOS_WRITE(RTC_REF_CLCK_32KHZ | (16 - __ffs(HZ)), RTC_REG_A); | 177 | CMOS_WRITE(RTC_REF_CLCK_32KHZ | (16 - __ffs(HZ)), RTC_REG_A); |
diff --git a/arch/mips/emma2rh/common/irq_emma2rh.c b/arch/mips/emma2rh/common/irq_emma2rh.c index 7c930860c921..197ed4c2ba04 100644 --- a/arch/mips/emma2rh/common/irq_emma2rh.c +++ b/arch/mips/emma2rh/common/irq_emma2rh.c | |||
| @@ -97,7 +97,7 @@ void emma2rh_irq_init(u32 irq_base) | |||
| 97 | irq_desc[i].status = IRQ_DISABLED; | 97 | irq_desc[i].status = IRQ_DISABLED; |
| 98 | irq_desc[i].action = NULL; | 98 | irq_desc[i].action = NULL; |
| 99 | irq_desc[i].depth = 1; | 99 | irq_desc[i].depth = 1; |
| 100 | irq_desc[i].handler = &emma2rh_irq_controller; | 100 | irq_desc[i].chip = &emma2rh_irq_controller; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | emma2rh_irq_base = irq_base; | 103 | emma2rh_irq_base = irq_base; |
diff --git a/arch/mips/emma2rh/markeins/irq_markeins.c b/arch/mips/emma2rh/markeins/irq_markeins.c index f23ae9fcffa0..0b36eb001e62 100644 --- a/arch/mips/emma2rh/markeins/irq_markeins.c +++ b/arch/mips/emma2rh/markeins/irq_markeins.c | |||
| @@ -86,7 +86,7 @@ void emma2rh_sw_irq_init(u32 irq_base) | |||
| 86 | irq_desc[i].status = IRQ_DISABLED; | 86 | irq_desc[i].status = IRQ_DISABLED; |
| 87 | irq_desc[i].action = NULL; | 87 | irq_desc[i].action = NULL; |
| 88 | irq_desc[i].depth = 2; | 88 | irq_desc[i].depth = 2; |
| 89 | irq_desc[i].handler = &emma2rh_sw_irq_controller; | 89 | irq_desc[i].chip = &emma2rh_sw_irq_controller; |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | emma2rh_sw_irq_base = irq_base; | 92 | emma2rh_sw_irq_base = irq_base; |
| @@ -166,7 +166,7 @@ void emma2rh_gpio_irq_init(u32 irq_base) | |||
| 166 | irq_desc[i].status = IRQ_DISABLED; | 166 | irq_desc[i].status = IRQ_DISABLED; |
| 167 | irq_desc[i].action = NULL; | 167 | irq_desc[i].action = NULL; |
| 168 | irq_desc[i].depth = 2; | 168 | irq_desc[i].depth = 2; |
| 169 | irq_desc[i].handler = &emma2rh_gpio_irq_controller; | 169 | irq_desc[i].chip = &emma2rh_gpio_irq_controller; |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | emma2rh_gpio_irq_base = irq_base; | 172 | emma2rh_gpio_irq_base = irq_base; |
diff --git a/arch/mips/emma2rh/markeins/platform.c b/arch/mips/emma2rh/markeins/platform.c index 15cc61df3622..11567702b155 100644 --- a/arch/mips/emma2rh/markeins/platform.c +++ b/arch/mips/emma2rh/markeins/platform.c | |||
| @@ -44,18 +44,45 @@ | |||
| 44 | #define I2C_EMMA2RH "emma2rh-iic" /* must be in sync with IIC driver */ | 44 | #define I2C_EMMA2RH "emma2rh-iic" /* must be in sync with IIC driver */ |
| 45 | 45 | ||
| 46 | static struct resource i2c_emma_resources_0[] = { | 46 | static struct resource i2c_emma_resources_0[] = { |
| 47 | { NULL, EMMA2RH_IRQ_PIIC0, EMMA2RH_IRQ_PIIC0, IORESOURCE_IRQ }, | 47 | { |
| 48 | { NULL, KSEG1ADDR(EMMA2RH_PIIC0_BASE), KSEG1ADDR(EMMA2RH_PIIC0_BASE + 0x1000), 0 }, | 48 | .name = NULL, |
| 49 | .start = EMMA2RH_IRQ_PIIC0, | ||
| 50 | .end = EMMA2RH_IRQ_PIIC0, | ||
| 51 | .flags = IORESOURCE_IRQ | ||
| 52 | }, { | ||
| 53 | .name = NULL, | ||
| 54 | .start = EMMA2RH_PIIC0_BASE, | ||
| 55 | .end = EMMA2RH_PIIC0_BASE + 0x1000, | ||
| 56 | .flags = 0 | ||
| 57 | }, | ||
| 49 | }; | 58 | }; |
| 50 | 59 | ||
| 51 | struct resource i2c_emma_resources_1[] = { | 60 | struct resource i2c_emma_resources_1[] = { |
| 52 | { NULL, EMMA2RH_IRQ_PIIC1, EMMA2RH_IRQ_PIIC1, IORESOURCE_IRQ }, | 61 | { |
| 53 | { NULL, KSEG1ADDR(EMMA2RH_PIIC1_BASE), KSEG1ADDR(EMMA2RH_PIIC1_BASE + 0x1000), 0 }, | 62 | .name = NULL, |
| 63 | .start = EMMA2RH_IRQ_PIIC1, | ||
| 64 | .end = EMMA2RH_IRQ_PIIC1, | ||
| 65 | .flags = IORESOURCE_IRQ | ||
| 66 | }, { | ||
| 67 | .name = NULL, | ||
| 68 | .start = EMMA2RH_PIIC1_BASE, | ||
| 69 | .end = EMMA2RH_PIIC1_BASE + 0x1000, | ||
| 70 | .flags = 0 | ||
| 71 | }, | ||
| 54 | }; | 72 | }; |
| 55 | 73 | ||
| 56 | struct resource i2c_emma_resources_2[] = { | 74 | struct resource i2c_emma_resources_2[] = { |
| 57 | { NULL, EMMA2RH_IRQ_PIIC2, EMMA2RH_IRQ_PIIC2, IORESOURCE_IRQ }, | 75 | { |
| 58 | { NULL, KSEG1ADDR(EMMA2RH_PIIC2_BASE), KSEG1ADDR(EMMA2RH_PIIC2_BASE + 0x1000), 0 }, | 76 | .name = NULL, |
| 77 | .start = EMMA2RH_IRQ_PIIC2, | ||
| 78 | .end = EMMA2RH_IRQ_PIIC2, | ||
| 79 | .flags = IORESOURCE_IRQ | ||
| 80 | }, { | ||
| 81 | .name = NULL, | ||
| 82 | .start = EMMA2RH_PIIC2_BASE, | ||
| 83 | .end = EMMA2RH_PIIC2_BASE + 0x1000, | ||
| 84 | .flags = 0 | ||
| 85 | }, | ||
| 59 | }; | 86 | }; |
| 60 | 87 | ||
| 61 | struct platform_device i2c_emma_devices[] = { | 88 | struct platform_device i2c_emma_devices[] = { |
| @@ -83,32 +110,29 @@ struct platform_device i2c_emma_devices[] = { | |||
| 83 | #define EMMA2RH_SERIAL_FLAGS UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | 110 | #define EMMA2RH_SERIAL_FLAGS UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
| 84 | 111 | ||
| 85 | static struct plat_serial8250_port platform_serial_ports[] = { | 112 | static struct plat_serial8250_port platform_serial_ports[] = { |
| 86 | [0] = { | 113 | [0] = { |
| 87 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR0_BASE + 3), | 114 | .membase= (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR0_BASE + 3), |
| 88 | .irq = EMMA2RH_IRQ_PFUR0, | 115 | .irq = EMMA2RH_IRQ_PFUR0, |
| 89 | .uartclk = EMMA2RH_SERIAL_CLOCK, | 116 | .uartclk = EMMA2RH_SERIAL_CLOCK, |
| 90 | .regshift = 4, | 117 | .regshift = 4, |
| 91 | .iotype = UPIO_MEM, | 118 | .iotype = UPIO_MEM, |
| 92 | .flags = EMMA2RH_SERIAL_FLAGS, | 119 | .flags = EMMA2RH_SERIAL_FLAGS, |
| 93 | }, | 120 | }, [1] = { |
| 94 | [1] = { | 121 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR1_BASE + 3), |
| 95 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR1_BASE + 3), | 122 | .irq = EMMA2RH_IRQ_PFUR1, |
| 96 | .irq = EMMA2RH_IRQ_PFUR1, | 123 | .uartclk = EMMA2RH_SERIAL_CLOCK, |
| 97 | .uartclk = EMMA2RH_SERIAL_CLOCK, | 124 | .regshift = 4, |
| 98 | .regshift = 4, | 125 | .iotype = UPIO_MEM, |
| 99 | .iotype = UPIO_MEM, | 126 | .flags = EMMA2RH_SERIAL_FLAGS, |
| 100 | .flags = EMMA2RH_SERIAL_FLAGS, | 127 | }, [2] = { |
| 101 | }, | 128 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR2_BASE + 3), |
| 102 | [2] = { | 129 | .irq = EMMA2RH_IRQ_PFUR2, |
| 103 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR2_BASE + 3), | 130 | .uartclk = EMMA2RH_SERIAL_CLOCK, |
| 104 | .irq = EMMA2RH_IRQ_PFUR2, | 131 | .regshift = 4, |
| 105 | .uartclk = EMMA2RH_SERIAL_CLOCK, | 132 | .iotype = UPIO_MEM, |
| 106 | .regshift = 4, | 133 | .flags = EMMA2RH_SERIAL_FLAGS, |
| 107 | .iotype = UPIO_MEM, | 134 | }, [3] = { |
| 108 | .flags = EMMA2RH_SERIAL_FLAGS, | 135 | .flags = 0, |
| 109 | }, | ||
| 110 | [3] = { | ||
| 111 | .flags = 0, | ||
| 112 | }, | 136 | }, |
| 113 | }; | 137 | }; |
| 114 | 138 | ||
diff --git a/arch/mips/gt64120/common/time.c b/arch/mips/gt64120/common/time.c index c83ae6acd601..c47eeb768192 100644 --- a/arch/mips/gt64120/common/time.c +++ b/arch/mips/gt64120/common/time.c | |||
| @@ -64,14 +64,14 @@ static irqreturn_t gt64120_irq(int irq, void *dev_id) | |||
| 64 | * as *irq (=irq0 in ../kernel/time.c). We will do our own timer interrupt | 64 | * as *irq (=irq0 in ../kernel/time.c). We will do our own timer interrupt |
| 65 | * handling. | 65 | * handling. |
| 66 | */ | 66 | */ |
| 67 | void gt64120_time_init(void) | 67 | void __init plat_timer_setup(struct irqaction *irq) |
| 68 | { | 68 | { |
| 69 | static struct irqaction timer; | 69 | static struct irqaction timer; |
| 70 | 70 | ||
| 71 | /* Disable timer first */ | 71 | /* Disable timer first */ |
| 72 | GT_WRITE(GT_TC_CONTROL_OFS, 0); | 72 | GT_WRITE(GT_TC_CONTROL_OFS, 0); |
| 73 | /* Load timer value for 100 Hz */ | 73 | /* Load timer value for 100 Hz */ |
| 74 | GT_WRITE(GT_TC3_OFS, Sys_clock / 100); | 74 | GT_WRITE(GT_TC3_OFS, Sys_clock / HZ); |
| 75 | 75 | ||
| 76 | /* | 76 | /* |
| 77 | * Create the IRQ structure entry for the timer. Since we're too early | 77 | * Create the IRQ structure entry for the timer. Since we're too early |
diff --git a/arch/mips/gt64120/ev64120/setup.c b/arch/mips/gt64120/ev64120/setup.c index 91c2d3f41617..99c8d42212e2 100644 --- a/arch/mips/gt64120/ev64120/setup.c +++ b/arch/mips/gt64120/ev64120/setup.c | |||
| @@ -68,7 +68,6 @@ unsigned long __init prom_free_prom_memory(void) | |||
| 68 | * Initializes basic routines and structures pointers, memory size (as | 68 | * Initializes basic routines and structures pointers, memory size (as |
| 69 | * given by the bios and saves the command line. | 69 | * given by the bios and saves the command line. |
| 70 | */ | 70 | */ |
| 71 | extern void gt64120_time_init(void); | ||
| 72 | 71 | ||
| 73 | void __init plat_mem_setup(void) | 72 | void __init plat_mem_setup(void) |
| 74 | { | 73 | { |
| @@ -76,7 +75,6 @@ void __init plat_mem_setup(void) | |||
| 76 | _machine_halt = galileo_machine_halt; | 75 | _machine_halt = galileo_machine_halt; |
| 77 | pm_power_off = galileo_machine_power_off; | 76 | pm_power_off = galileo_machine_power_off; |
| 78 | 77 | ||
| 79 | board_time_init = gt64120_time_init; | ||
| 80 | set_io_port_base(KSEG1); | 78 | set_io_port_base(KSEG1); |
| 81 | } | 79 | } |
| 82 | 80 | ||
diff --git a/arch/mips/gt64120/momenco_ocelot/setup.c b/arch/mips/gt64120/momenco_ocelot/setup.c index 0e5bbee2d5b7..94f94ebbda6c 100644 --- a/arch/mips/gt64120/momenco_ocelot/setup.c +++ b/arch/mips/gt64120/momenco_ocelot/setup.c | |||
| @@ -70,7 +70,6 @@ extern void momenco_ocelot_restart(char *command); | |||
| 70 | extern void momenco_ocelot_halt(void); | 70 | extern void momenco_ocelot_halt(void); |
| 71 | extern void momenco_ocelot_power_off(void); | 71 | extern void momenco_ocelot_power_off(void); |
| 72 | 72 | ||
| 73 | extern void gt64120_time_init(void); | ||
| 74 | extern void momenco_ocelot_irq_setup(void); | 73 | extern void momenco_ocelot_irq_setup(void); |
| 75 | 74 | ||
| 76 | static char reset_reason; | 75 | static char reset_reason; |
| @@ -156,8 +155,6 @@ void __init plat_mem_setup(void) | |||
| 156 | void (*l3func)(unsigned long)=KSEG1ADDR(&setup_l3cache); | 155 | void (*l3func)(unsigned long)=KSEG1ADDR(&setup_l3cache); |
| 157 | unsigned int tmpword; | 156 | unsigned int tmpword; |
| 158 | 157 | ||
| 159 | board_time_init = gt64120_time_init; | ||
| 160 | |||
| 161 | _machine_restart = momenco_ocelot_restart; | 158 | _machine_restart = momenco_ocelot_restart; |
| 162 | _machine_halt = momenco_ocelot_halt; | 159 | _machine_halt = momenco_ocelot_halt; |
| 163 | pm_power_off = momenco_ocelot_power_off; | 160 | pm_power_off = momenco_ocelot_power_off; |
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index 6dc4135d6e11..d848f1a07786 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c | |||
| @@ -37,7 +37,7 @@ extern void jazz_machine_restart(char *command); | |||
| 37 | extern void jazz_machine_halt(void); | 37 | extern void jazz_machine_halt(void); |
| 38 | extern void jazz_machine_power_off(void); | 38 | extern void jazz_machine_power_off(void); |
| 39 | 39 | ||
| 40 | void __init plat_time_init(struct irqaction *irq) | 40 | void __init plat_timer_setup(struct irqaction *irq) |
| 41 | { | 41 | { |
| 42 | /* set the clock to 100 Hz */ | 42 | /* set the clock to 100 Hz */ |
| 43 | r4030_write_reg32(JAZZ_TIMER_INTERVAL, 9); | 43 | r4030_write_reg32(JAZZ_TIMER_INTERVAL, 9); |
diff --git a/arch/mips/jmr3927/rbhma3100/irq.c b/arch/mips/jmr3927/rbhma3100/irq.c index 39a0243bed9a..de4a238c28be 100644 --- a/arch/mips/jmr3927/rbhma3100/irq.c +++ b/arch/mips/jmr3927/rbhma3100/irq.c | |||
| @@ -288,6 +288,8 @@ static void tx_branch_likely_bug_fixup(void) | |||
| 288 | 288 | ||
| 289 | static void jmr3927_spurious(void) | 289 | static void jmr3927_spurious(void) |
| 290 | { | 290 | { |
| 291 | struct pt_regs * regs = get_irq_regs(); | ||
| 292 | |||
| 291 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | 293 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND |
| 292 | tx_branch_likely_bug_fixup(); | 294 | tx_branch_likely_bug_fixup(); |
| 293 | #endif | 295 | #endif |
| @@ -297,6 +299,7 @@ static void jmr3927_spurious(void) | |||
| 297 | 299 | ||
| 298 | asmlinkage void plat_irq_dispatch(void) | 300 | asmlinkage void plat_irq_dispatch(void) |
| 299 | { | 301 | { |
| 302 | struct pt_regs * regs = get_irq_regs(); | ||
| 300 | int irq; | 303 | int irq; |
| 301 | 304 | ||
| 302 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | 305 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND |
diff --git a/arch/mips/jmr3927/rbhma3100/setup.c b/arch/mips/jmr3927/rbhma3100/setup.c index 025434054ed0..16e5dfe7aa8a 100644 --- a/arch/mips/jmr3927/rbhma3100/setup.c +++ b/arch/mips/jmr3927/rbhma3100/setup.c | |||
| @@ -170,12 +170,20 @@ static void jmr3927_machine_power_off(void) | |||
| 170 | while (1); | 170 | while (1); |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | static unsigned int jmr3927_hpt_read(void) | ||
| 174 | { | ||
| 175 | /* We assume this function is called xtime_lock held. */ | ||
| 176 | return jiffies * (JMR3927_TIMER_CLK / HZ) + jmr3927_tmrptr->trr; | ||
| 177 | } | ||
| 178 | |||
| 173 | #define USE_RTC_DS1742 | 179 | #define USE_RTC_DS1742 |
| 174 | #ifdef USE_RTC_DS1742 | 180 | #ifdef USE_RTC_DS1742 |
| 175 | extern void rtc_ds1742_init(unsigned long base); | 181 | extern void rtc_ds1742_init(unsigned long base); |
| 176 | #endif | 182 | #endif |
| 177 | static void __init jmr3927_time_init(void) | 183 | static void __init jmr3927_time_init(void) |
| 178 | { | 184 | { |
| 185 | mips_hpt_read = jmr3927_hpt_read; | ||
| 186 | mips_hpt_frequency = JMR3927_TIMER_CLK; | ||
| 179 | #ifdef USE_RTC_DS1742 | 187 | #ifdef USE_RTC_DS1742 |
| 180 | if (jmr3927_have_nvram()) { | 188 | if (jmr3927_have_nvram()) { |
| 181 | rtc_ds1742_init(JMR3927_IOC_NVRAMB_ADDR); | 189 | rtc_ds1742_init(JMR3927_IOC_NVRAMB_ADDR); |
| @@ -183,12 +191,8 @@ static void __init jmr3927_time_init(void) | |||
| 183 | #endif | 191 | #endif |
| 184 | } | 192 | } |
| 185 | 193 | ||
| 186 | unsigned long jmr3927_do_gettimeoffset(void); | ||
| 187 | |||
| 188 | void __init plat_timer_setup(struct irqaction *irq) | 194 | void __init plat_timer_setup(struct irqaction *irq) |
| 189 | { | 195 | { |
| 190 | do_gettimeoffset = jmr3927_do_gettimeoffset; | ||
| 191 | |||
| 192 | jmr3927_tmrptr->cpra = JMR3927_TIMER_CLK / HZ; | 196 | jmr3927_tmrptr->cpra = JMR3927_TIMER_CLK / HZ; |
| 193 | jmr3927_tmrptr->itmr = TXx927_TMTITMR_TIIE | TXx927_TMTITMR_TZCE; | 197 | jmr3927_tmrptr->itmr = TXx927_TMTITMR_TIIE | TXx927_TMTITMR_TZCE; |
| 194 | jmr3927_tmrptr->ccdr = JMR3927_TIMER_CCD; | 198 | jmr3927_tmrptr->ccdr = JMR3927_TIMER_CCD; |
| @@ -200,34 +204,6 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
| 200 | 204 | ||
| 201 | #define USECS_PER_JIFFY (1000000/HZ) | 205 | #define USECS_PER_JIFFY (1000000/HZ) |
| 202 | 206 | ||
| 203 | unsigned long jmr3927_do_gettimeoffset(void) | ||
| 204 | { | ||
| 205 | unsigned long count; | ||
| 206 | unsigned long res = 0; | ||
| 207 | |||
| 208 | /* MUST read TRR before TISR. */ | ||
| 209 | count = jmr3927_tmrptr->trr; | ||
| 210 | |||
| 211 | if (jmr3927_tmrptr->tisr & TXx927_TMTISR_TIIS) { | ||
| 212 | /* timer interrupt is pending. use Max value. */ | ||
| 213 | res = USECS_PER_JIFFY - 1; | ||
| 214 | } else { | ||
| 215 | /* convert to usec */ | ||
| 216 | /* res = count / (JMR3927_TIMER_CLK / 1000000); */ | ||
| 217 | res = (count << 7) / ((JMR3927_TIMER_CLK << 7) / 1000000); | ||
| 218 | |||
| 219 | /* | ||
| 220 | * Due to possible jiffies inconsistencies, we need to check | ||
| 221 | * the result so that we'll get a timer that is monotonic. | ||
| 222 | */ | ||
| 223 | if (res >= USECS_PER_JIFFY) | ||
| 224 | res = USECS_PER_JIFFY-1; | ||
| 225 | } | ||
| 226 | |||
| 227 | return res; | ||
| 228 | } | ||
| 229 | |||
| 230 | |||
| 231 | //#undef DO_WRITE_THROUGH | 207 | //#undef DO_WRITE_THROUGH |
| 232 | #define DO_WRITE_THROUGH | 208 | #define DO_WRITE_THROUGH |
| 233 | #define DO_ENABLE_CACHE | 209 | #define DO_ENABLE_CACHE |
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index e9ce5b3721af..ff88b06f89df 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #define offset(string, ptr, member) \ | 22 | #define offset(string, ptr, member) \ |
| 23 | __asm__("\n@@@" string "%0" : : "i" (_offset(ptr, member))) | 23 | __asm__("\n@@@" string "%0" : : "i" (_offset(ptr, member))) |
| 24 | #define constant(string, member) \ | 24 | #define constant(string, member) \ |
| 25 | __asm__("\n@@@" string "%x0" : : "ri" (member)) | 25 | __asm__("\n@@@" string "%X0" : : "ri" (member)) |
| 26 | #define size(string, size) \ | 26 | #define size(string, size) \ |
| 27 | __asm__("\n@@@" string "%0" : : "i" (sizeof(size))) | 27 | __asm__("\n@@@" string "%0" : : "i" (sizeof(size))) |
| 28 | #define linefeed text("") | 28 | #define linefeed text("") |
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index 417c08ac76eb..f10b6a19f8bf 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
| @@ -83,7 +83,10 @@ FEXPORT(syscall_exit) | |||
| 83 | FEXPORT(restore_all) # restore full frame | 83 | FEXPORT(restore_all) # restore full frame |
| 84 | #ifdef CONFIG_MIPS_MT_SMTC | 84 | #ifdef CONFIG_MIPS_MT_SMTC |
| 85 | /* Detect and execute deferred IPI "interrupts" */ | 85 | /* Detect and execute deferred IPI "interrupts" */ |
| 86 | LONG_L s0, TI_REGS($28) | ||
| 87 | LONG_S sp, TI_REGS($28) | ||
| 86 | jal deferred_smtc_ipi | 88 | jal deferred_smtc_ipi |
| 89 | LONG_S s0, TI_REGS($28) | ||
| 87 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ | 90 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ |
| 88 | mfc0 v0, CP0_TCSTATUS | 91 | mfc0 v0, CP0_TCSTATUS |
| 89 | ori v1, v0, TCSTATUS_IXMT | 92 | ori v1, v0, TCSTATUS_IXMT |
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 8c6db0fc72f0..ddc1b71c9378 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S | |||
| @@ -189,7 +189,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point | |||
| 189 | 189 | ||
| 190 | MTC0 zero, CP0_CONTEXT # clear context register | 190 | MTC0 zero, CP0_CONTEXT # clear context register |
| 191 | PTR_LA $28, init_thread_union | 191 | PTR_LA $28, init_thread_union |
| 192 | PTR_ADDIU sp, $28, _THREAD_SIZE - 32 | 192 | PTR_LI sp, _THREAD_SIZE - 32 |
| 193 | PTR_ADDU sp, $28 | ||
| 193 | set_saved_sp sp, t0, t1 | 194 | set_saved_sp sp, t0, t1 |
| 194 | PTR_SUBU sp, 4 * SZREG # init stack pointer | 195 | PTR_SUBU sp, 4 * SZREG # init stack pointer |
| 195 | 196 | ||
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index dd24434392b6..9b0e49d63d7b 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
| @@ -26,6 +26,48 @@ | |||
| 26 | #include <asm/system.h> | 26 | #include <asm/system.h> |
| 27 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
| 28 | 28 | ||
| 29 | static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; | ||
| 30 | |||
| 31 | int __devinit allocate_irqno(void) | ||
| 32 | { | ||
| 33 | int irq; | ||
| 34 | |||
| 35 | again: | ||
| 36 | irq = find_first_zero_bit(irq_map, NR_IRQS); | ||
| 37 | |||
| 38 | if (irq >= NR_IRQS) | ||
| 39 | return -ENOSPC; | ||
| 40 | |||
| 41 | if (test_and_set_bit(irq, irq_map)) | ||
| 42 | goto again; | ||
| 43 | |||
| 44 | return irq; | ||
| 45 | } | ||
| 46 | |||
| 47 | EXPORT_SYMBOL_GPL(allocate_irqno); | ||
| 48 | |||
| 49 | /* | ||
| 50 | * Allocate the 16 legacy interrupts for i8259 devices. This happens early | ||
| 51 | * in the kernel initialization so treating allocation failure as BUG() is | ||
| 52 | * ok. | ||
| 53 | */ | ||
| 54 | void __init alloc_legacy_irqno(void) | ||
| 55 | { | ||
| 56 | int i; | ||
| 57 | |||
| 58 | for (i = 0; i <= 16; i++) | ||
| 59 | BUG_ON(test_and_set_bit(i, irq_map)); | ||
| 60 | } | ||
| 61 | |||
| 62 | void __devinit free_irqno(unsigned int irq) | ||
| 63 | { | ||
| 64 | smp_mb__before_clear_bit(); | ||
| 65 | clear_bit(irq, irq_map); | ||
| 66 | smp_mb__after_clear_bit(); | ||
| 67 | } | ||
| 68 | |||
| 69 | EXPORT_SYMBOL_GPL(free_irqno); | ||
| 70 | |||
| 29 | /* | 71 | /* |
| 30 | * 'what should we do if we get a hw irq event on an illegal vector'. | 72 | * 'what should we do if we get a hw irq event on an illegal vector'. |
| 31 | * each architecture has to answer this themselves. | 73 | * each architecture has to answer this themselves. |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 53f4171fc188..7a3ebbeba1f3 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
| @@ -1055,7 +1055,9 @@ asmlinkage long sys32_newuname(struct new_utsname __user * name) | |||
| 1055 | asmlinkage int sys32_personality(unsigned long personality) | 1055 | asmlinkage int sys32_personality(unsigned long personality) |
| 1056 | { | 1056 | { |
| 1057 | int ret; | 1057 | int ret; |
| 1058 | if (current->personality == PER_LINUX32 && personality == PER_LINUX) | 1058 | personality &= 0xffffffff; |
| 1059 | if (personality(current->personality) == PER_LINUX32 && | ||
| 1060 | personality == PER_LINUX) | ||
| 1059 | personality = PER_LINUX32; | 1061 | personality = PER_LINUX32; |
| 1060 | ret = sys_personality(personality); | 1062 | ret = sys_personality(personality); |
| 1061 | if (ret == PER_LINUX32) | 1063 | if (ret == PER_LINUX32) |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 9f307eb1a31e..ec8209f3a0c6 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
| @@ -358,10 +358,8 @@ static int __init frame_info_init(void) | |||
| 358 | unsigned long size = 0; | 358 | unsigned long size = 0; |
| 359 | #ifdef CONFIG_KALLSYMS | 359 | #ifdef CONFIG_KALLSYMS |
| 360 | unsigned long ofs; | 360 | unsigned long ofs; |
| 361 | char *modname; | ||
| 362 | char namebuf[KSYM_NAME_LEN + 1]; | ||
| 363 | 361 | ||
| 364 | kallsyms_lookup((unsigned long)schedule, &size, &ofs, &modname, namebuf); | 362 | kallsyms_lookup_size_offset((unsigned long)schedule, &size, &ofs); |
| 365 | #endif | 363 | #endif |
| 366 | schedule_mfi.func = schedule; | 364 | schedule_mfi.func = schedule; |
| 367 | schedule_mfi.func_size = size; | 365 | schedule_mfi.func_size = size; |
| @@ -403,8 +401,6 @@ unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, | |||
| 403 | { | 401 | { |
| 404 | unsigned long stack_page; | 402 | unsigned long stack_page; |
| 405 | struct mips_frame_info info; | 403 | struct mips_frame_info info; |
| 406 | char *modname; | ||
| 407 | char namebuf[KSYM_NAME_LEN + 1]; | ||
| 408 | unsigned long size, ofs; | 404 | unsigned long size, ofs; |
| 409 | int leaf; | 405 | int leaf; |
| 410 | extern void ret_from_irq(void); | 406 | extern void ret_from_irq(void); |
| @@ -433,7 +429,7 @@ unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, | |||
| 433 | } | 429 | } |
| 434 | return 0; | 430 | return 0; |
| 435 | } | 431 | } |
| 436 | if (!kallsyms_lookup(pc, &size, &ofs, &modname, namebuf)) | 432 | if (!kallsyms_lookup_size_offset(pc, &size, &ofs)) |
| 437 | return 0; | 433 | return 0; |
| 438 | /* | 434 | /* |
| 439 | * Return ra if an exception occured at the first instruction | 435 | * Return ra if an exception occured at the first instruction |
diff --git a/arch/mips/kernel/r4k_switch.S b/arch/mips/kernel/r4k_switch.S index d5c8b82fed72..cc566cf12246 100644 --- a/arch/mips/kernel/r4k_switch.S +++ b/arch/mips/kernel/r4k_switch.S | |||
| @@ -85,7 +85,12 @@ | |||
| 85 | move $28, a2 | 85 | move $28, a2 |
| 86 | cpu_restore_nonscratch a1 | 86 | cpu_restore_nonscratch a1 |
| 87 | 87 | ||
| 88 | #if (_THREAD_SIZE - 32) < 0x10000 | ||
| 88 | PTR_ADDIU t0, $28, _THREAD_SIZE - 32 | 89 | PTR_ADDIU t0, $28, _THREAD_SIZE - 32 |
| 90 | #else | ||
| 91 | PTR_LI t0, _THREAD_SIZE - 32 | ||
| 92 | PTR_ADDU t0, $28 | ||
| 93 | #endif | ||
| 89 | set_saved_sp t0, t1, t2 | 94 | set_saved_sp t0, t1, t2 |
| 90 | #ifdef CONFIG_MIPS_MT_SMTC | 95 | #ifdef CONFIG_MIPS_MT_SMTC |
| 91 | /* Read-modify-writes of Status must be atomic on a VPE */ | 96 | /* Read-modify-writes of Status must be atomic on a VPE */ |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 61362e6fa9ec..a95f37de080e 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
| @@ -652,7 +652,10 @@ einval: li v0, -EINVAL | |||
| 652 | sys sys_vmsplice 4 | 652 | sys sys_vmsplice 4 |
| 653 | sys sys_move_pages 6 | 653 | sys sys_move_pages 6 |
| 654 | sys sys_set_robust_list 2 | 654 | sys sys_set_robust_list 2 |
| 655 | sys sys_get_robust_list 3 | 655 | sys sys_get_robust_list 3 /* 4310 */ |
| 656 | sys sys_ni_syscall 0 | ||
| 657 | sys sys_getcpu 3 | ||
| 658 | sys sys_epoll_pwait 6 | ||
| 656 | .endm | 659 | .endm |
| 657 | 660 | ||
| 658 | /* We pre-compute the number of _instruction_ bytes needed to | 661 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index 6c7b5ed0ea6e..8fb0f60f657b 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
| @@ -468,3 +468,6 @@ sys_call_table: | |||
| 468 | PTR sys_move_pages | 468 | PTR sys_move_pages |
| 469 | PTR sys_set_robust_list | 469 | PTR sys_set_robust_list |
| 470 | PTR sys_get_robust_list | 470 | PTR sys_get_robust_list |
| 471 | PTR sys_ni_syscall /* 5270 */ | ||
| 472 | PTR sys_getcpu | ||
| 473 | PTR sys_epoll_pwait | ||
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 6d9f18727ac5..0da5ca2040ff 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
| @@ -280,7 +280,7 @@ EXPORT(sysn32_call_table) | |||
| 280 | PTR sys_sync | 280 | PTR sys_sync |
| 281 | PTR sys_acct | 281 | PTR sys_acct |
| 282 | PTR sys32_settimeofday | 282 | PTR sys32_settimeofday |
| 283 | PTR sys_mount /* 6160 */ | 283 | PTR compat_sys_mount /* 6160 */ |
| 284 | PTR sys_umount | 284 | PTR sys_umount |
| 285 | PTR sys_swapon | 285 | PTR sys_swapon |
| 286 | PTR sys_swapoff | 286 | PTR sys_swapoff |
| @@ -394,3 +394,6 @@ EXPORT(sysn32_call_table) | |||
| 394 | PTR sys_move_pages | 394 | PTR sys_move_pages |
| 395 | PTR compat_sys_set_robust_list | 395 | PTR compat_sys_set_robust_list |
| 396 | PTR compat_sys_get_robust_list | 396 | PTR compat_sys_get_robust_list |
| 397 | PTR sys_ni_syscall | ||
| 398 | PTR sys_getcpu | ||
| 399 | PTR sys_epoll_pwait | ||
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 2e6d0673163e..b9d00cae8b5f 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
| @@ -226,7 +226,7 @@ sys_call_table: | |||
| 226 | PTR sys_ni_syscall /* was sys_stat */ | 226 | PTR sys_ni_syscall /* was sys_stat */ |
| 227 | PTR sys_lseek | 227 | PTR sys_lseek |
| 228 | PTR sys_getpid /* 4020 */ | 228 | PTR sys_getpid /* 4020 */ |
| 229 | PTR sys_mount | 229 | PTR compat_sys_mount |
| 230 | PTR sys_oldumount | 230 | PTR sys_oldumount |
| 231 | PTR sys_setuid | 231 | PTR sys_setuid |
| 232 | PTR sys_getuid | 232 | PTR sys_getuid |
| @@ -516,4 +516,7 @@ sys_call_table: | |||
| 516 | PTR compat_sys_move_pages | 516 | PTR compat_sys_move_pages |
| 517 | PTR compat_sys_set_robust_list | 517 | PTR compat_sys_set_robust_list |
| 518 | PTR compat_sys_get_robust_list /* 4310 */ | 518 | PTR compat_sys_get_robust_list /* 4310 */ |
| 519 | PTR sys_ni_syscall | ||
| 520 | PTR sys_getcpu | ||
| 521 | PTR sys_epoll_pwait | ||
| 519 | .size sys_call_table,.-sys_call_table | 522 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index fdbb508661c5..8f6e89697ccf 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
| @@ -223,7 +223,11 @@ disable: | |||
| 223 | 223 | ||
| 224 | #else /* !CONFIG_BLK_DEV_INITRD */ | 224 | #else /* !CONFIG_BLK_DEV_INITRD */ |
| 225 | 225 | ||
| 226 | #define init_initrd() 0 | 226 | static unsigned long __init init_initrd(void) |
| 227 | { | ||
| 228 | return 0; | ||
| 229 | } | ||
| 230 | |||
| 227 | #define finalize_initrd() do {} while (0) | 231 | #define finalize_initrd() do {} while (0) |
| 228 | 232 | ||
| 229 | #endif | 233 | #endif |
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c index 3b5f3b632622..2ac19a6cbf68 100644 --- a/arch/mips/kernel/smp-mt.c +++ b/arch/mips/kernel/smp-mt.c | |||
| @@ -140,15 +140,90 @@ static struct irqaction irq_call = { | |||
| 140 | .name = "IPI_call" | 140 | .name = "IPI_call" |
| 141 | }; | 141 | }; |
| 142 | 142 | ||
| 143 | static void __init smp_copy_vpe_config(void) | ||
| 144 | { | ||
| 145 | write_vpe_c0_status( | ||
| 146 | (read_c0_status() & ~(ST0_IM | ST0_IE | ST0_KSU)) | ST0_CU0); | ||
| 147 | |||
| 148 | /* set config to be the same as vpe0, particularly kseg0 coherency alg */ | ||
| 149 | write_vpe_c0_config( read_c0_config()); | ||
| 150 | |||
| 151 | /* make sure there are no software interrupts pending */ | ||
| 152 | write_vpe_c0_cause(0); | ||
| 153 | |||
| 154 | /* Propagate Config7 */ | ||
| 155 | write_vpe_c0_config7(read_c0_config7()); | ||
| 156 | |||
| 157 | write_vpe_c0_count(read_c0_count()); | ||
| 158 | } | ||
| 159 | |||
| 160 | static unsigned int __init smp_vpe_init(unsigned int tc, unsigned int mvpconf0, | ||
| 161 | unsigned int ncpu) | ||
| 162 | { | ||
| 163 | if (tc > ((mvpconf0 & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT)) | ||
| 164 | return ncpu; | ||
| 165 | |||
| 166 | /* Deactivate all but VPE 0 */ | ||
| 167 | if (tc != 0) { | ||
| 168 | unsigned long tmp = read_vpe_c0_vpeconf0(); | ||
| 169 | |||
| 170 | tmp &= ~VPECONF0_VPA; | ||
| 171 | |||
| 172 | /* master VPE */ | ||
| 173 | tmp |= VPECONF0_MVP; | ||
| 174 | write_vpe_c0_vpeconf0(tmp); | ||
| 175 | |||
| 176 | /* Record this as available CPU */ | ||
| 177 | cpu_set(tc, phys_cpu_present_map); | ||
| 178 | __cpu_number_map[tc] = ++ncpu; | ||
| 179 | __cpu_logical_map[ncpu] = tc; | ||
| 180 | } | ||
| 181 | |||
| 182 | /* Disable multi-threading with TC's */ | ||
| 183 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() & ~VPECONTROL_TE); | ||
| 184 | |||
| 185 | if (tc != 0) | ||
| 186 | smp_copy_vpe_config(); | ||
| 187 | |||
| 188 | return ncpu; | ||
| 189 | } | ||
| 190 | |||
| 191 | static void __init smp_tc_init(unsigned int tc, unsigned int mvpconf0) | ||
| 192 | { | ||
| 193 | unsigned long tmp; | ||
| 194 | |||
| 195 | if (!tc) | ||
| 196 | return; | ||
| 197 | |||
| 198 | /* bind a TC to each VPE, May as well put all excess TC's | ||
| 199 | on the last VPE */ | ||
| 200 | if (tc >= (((mvpconf0 & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT)+1)) | ||
| 201 | write_tc_c0_tcbind(read_tc_c0_tcbind() | ((mvpconf0 & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT)); | ||
| 202 | else { | ||
| 203 | write_tc_c0_tcbind(read_tc_c0_tcbind() | tc); | ||
| 204 | |||
| 205 | /* and set XTC */ | ||
| 206 | write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() | (tc << VPECONF0_XTC_SHIFT)); | ||
| 207 | } | ||
| 208 | |||
| 209 | tmp = read_tc_c0_tcstatus(); | ||
| 210 | |||
| 211 | /* mark not allocated and not dynamically allocatable */ | ||
| 212 | tmp &= ~(TCSTATUS_A | TCSTATUS_DA); | ||
| 213 | tmp |= TCSTATUS_IXMT; /* interrupt exempt */ | ||
| 214 | write_tc_c0_tcstatus(tmp); | ||
| 215 | |||
| 216 | write_tc_c0_tchalt(TCHALT_H); | ||
| 217 | } | ||
| 218 | |||
| 143 | /* | 219 | /* |
| 144 | * Common setup before any secondaries are started | 220 | * Common setup before any secondaries are started |
| 145 | * Make sure all CPU's are in a sensible state before we boot any of the | 221 | * Make sure all CPU's are in a sensible state before we boot any of the |
| 146 | * secondarys | 222 | * secondarys |
| 147 | */ | 223 | */ |
| 148 | void plat_smp_setup(void) | 224 | void __init plat_smp_setup(void) |
| 149 | { | 225 | { |
| 150 | unsigned long val; | 226 | unsigned int mvpconf0, ntc, tc, ncpu = 0; |
| 151 | int i, num; | ||
| 152 | 227 | ||
| 153 | #ifdef CONFIG_MIPS_MT_FPAFF | 228 | #ifdef CONFIG_MIPS_MT_FPAFF |
| 154 | /* If we have an FPU, enroll ourselves in the FPU-full mask */ | 229 | /* If we have an FPU, enroll ourselves in the FPU-full mask */ |
| @@ -167,75 +242,16 @@ void plat_smp_setup(void) | |||
| 167 | /* Put MVPE's into 'configuration state' */ | 242 | /* Put MVPE's into 'configuration state' */ |
| 168 | set_c0_mvpcontrol(MVPCONTROL_VPC); | 243 | set_c0_mvpcontrol(MVPCONTROL_VPC); |
| 169 | 244 | ||
| 170 | val = read_c0_mvpconf0(); | 245 | mvpconf0 = read_c0_mvpconf0(); |
| 246 | ntc = (mvpconf0 & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT; | ||
| 171 | 247 | ||
| 172 | /* we'll always have more TC's than VPE's, so loop setting everything | 248 | /* we'll always have more TC's than VPE's, so loop setting everything |
| 173 | to a sensible state */ | 249 | to a sensible state */ |
| 174 | for (i = 0, num = 0; i <= ((val & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT); i++) { | 250 | for (tc = 0; tc <= ntc; tc++) { |
| 175 | settc(i); | 251 | settc(tc); |
| 176 | |||
| 177 | /* VPE's */ | ||
| 178 | if (i <= ((val & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT)) { | ||
| 179 | |||
| 180 | /* deactivate all but vpe0 */ | ||
| 181 | if (i != 0) { | ||
| 182 | unsigned long tmp = read_vpe_c0_vpeconf0(); | ||
| 183 | |||
| 184 | tmp &= ~VPECONF0_VPA; | ||
| 185 | |||
| 186 | /* master VPE */ | ||
| 187 | tmp |= VPECONF0_MVP; | ||
| 188 | write_vpe_c0_vpeconf0(tmp); | ||
| 189 | |||
| 190 | /* Record this as available CPU */ | ||
| 191 | cpu_set(i, phys_cpu_present_map); | ||
| 192 | __cpu_number_map[i] = ++num; | ||
| 193 | __cpu_logical_map[num] = i; | ||
| 194 | } | ||
| 195 | |||
| 196 | /* disable multi-threading with TC's */ | ||
| 197 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() & ~VPECONTROL_TE); | ||
| 198 | |||
| 199 | if (i != 0) { | ||
| 200 | write_vpe_c0_status((read_c0_status() & ~(ST0_IM | ST0_IE | ST0_KSU)) | ST0_CU0); | ||
| 201 | 252 | ||
| 202 | /* set config to be the same as vpe0, particularly kseg0 coherency alg */ | 253 | smp_tc_init(tc, mvpconf0); |
| 203 | write_vpe_c0_config( read_c0_config()); | 254 | ncpu = smp_vpe_init(tc, mvpconf0, ncpu); |
| 204 | |||
| 205 | /* make sure there are no software interrupts pending */ | ||
| 206 | write_vpe_c0_cause(0); | ||
| 207 | |||
| 208 | /* Propagate Config7 */ | ||
| 209 | write_vpe_c0_config7(read_c0_config7()); | ||
| 210 | } | ||
| 211 | |||
| 212 | } | ||
| 213 | |||
| 214 | /* TC's */ | ||
| 215 | |||
| 216 | if (i != 0) { | ||
| 217 | unsigned long tmp; | ||
| 218 | |||
| 219 | /* bind a TC to each VPE, May as well put all excess TC's | ||
| 220 | on the last VPE */ | ||
| 221 | if ( i >= (((val & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT)+1) ) | ||
| 222 | write_tc_c0_tcbind(read_tc_c0_tcbind() | ((val & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT) ); | ||
| 223 | else { | ||
| 224 | write_tc_c0_tcbind( read_tc_c0_tcbind() | i); | ||
| 225 | |||
| 226 | /* and set XTC */ | ||
| 227 | write_vpe_c0_vpeconf0( read_vpe_c0_vpeconf0() | (i << VPECONF0_XTC_SHIFT)); | ||
| 228 | } | ||
| 229 | |||
| 230 | tmp = read_tc_c0_tcstatus(); | ||
| 231 | |||
| 232 | /* mark not allocated and not dynamically allocatable */ | ||
| 233 | tmp &= ~(TCSTATUS_A | TCSTATUS_DA); | ||
| 234 | tmp |= TCSTATUS_IXMT; /* interrupt exempt */ | ||
| 235 | write_tc_c0_tcstatus(tmp); | ||
| 236 | |||
| 237 | write_tc_c0_tchalt(TCHALT_H); | ||
| 238 | } | ||
| 239 | } | 255 | } |
| 240 | 256 | ||
| 241 | /* Release config state */ | 257 | /* Release config state */ |
| @@ -243,7 +259,7 @@ void plat_smp_setup(void) | |||
| 243 | 259 | ||
| 244 | /* We'll wait until starting the secondaries before starting MVPE */ | 260 | /* We'll wait until starting the secondaries before starting MVPE */ |
| 245 | 261 | ||
| 246 | printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num); | 262 | printk(KERN_INFO "Detected %i available secondary CPU(s)\n", ncpu); |
| 247 | } | 263 | } |
| 248 | 264 | ||
| 249 | void __init plat_prepare_cpus(unsigned int max_cpus) | 265 | void __init plat_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 1af3612a1ce8..db80957ada89 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
| @@ -310,7 +310,7 @@ static void flush_tlb_all_ipi(void *info) | |||
| 310 | 310 | ||
| 311 | void flush_tlb_all(void) | 311 | void flush_tlb_all(void) |
| 312 | { | 312 | { |
| 313 | on_each_cpu(flush_tlb_all_ipi, 0, 1, 1); | 313 | on_each_cpu(flush_tlb_all_ipi, NULL, 1, 1); |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | static void flush_tlb_mm_ipi(void *mm) | 316 | static void flush_tlb_mm_ipi(void *mm) |
diff --git a/arch/mips/kernel/smtc-asm.S b/arch/mips/kernel/smtc-asm.S index 1cb9441f1474..921207c4a83c 100644 --- a/arch/mips/kernel/smtc-asm.S +++ b/arch/mips/kernel/smtc-asm.S | |||
| @@ -101,7 +101,9 @@ FEXPORT(__smtc_ipi_vector) | |||
| 101 | lw t0,PT_PADSLOT5(sp) | 101 | lw t0,PT_PADSLOT5(sp) |
| 102 | /* Argument from sender passed in stack pad slot 4 */ | 102 | /* Argument from sender passed in stack pad slot 4 */ |
| 103 | lw a0,PT_PADSLOT4(sp) | 103 | lw a0,PT_PADSLOT4(sp) |
| 104 | PTR_LA ra, _ret_from_irq | 104 | LONG_L s0, TI_REGS($28) |
| 105 | LONG_S sp, TI_REGS($28) | ||
| 106 | PTR_LA ra, ret_from_irq | ||
| 105 | jr t0 | 107 | jr t0 |
| 106 | 108 | ||
| 107 | /* | 109 | /* |
| @@ -119,7 +121,10 @@ LEAF(self_ipi) | |||
| 119 | subu t1,sp,PT_SIZE | 121 | subu t1,sp,PT_SIZE |
| 120 | sw ra,PT_EPC(t1) | 122 | sw ra,PT_EPC(t1) |
| 121 | sw a0,PT_PADSLOT4(t1) | 123 | sw a0,PT_PADSLOT4(t1) |
| 124 | LONG_L s0, TI_REGS($28) | ||
| 125 | LONG_S sp, TI_REGS($28) | ||
| 122 | la t2,ipi_decode | 126 | la t2,ipi_decode |
| 127 | LONG_S s0, TI_REGS($28) | ||
| 123 | sw t2,PT_PADSLOT5(t1) | 128 | sw t2,PT_PADSLOT5(t1) |
| 124 | /* Save pre-disable value of TCStatus */ | 129 | /* Save pre-disable value of TCStatus */ |
| 125 | sw t0,PT_TCSTATUS(t1) | 130 | sw t0,PT_TCSTATUS(t1) |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index cc1f7474f7d7..3b78caf112f5 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
| @@ -476,6 +476,7 @@ void mipsmt_prepare_cpus(void) | |||
| 476 | write_vpe_c0_compare(0); | 476 | write_vpe_c0_compare(0); |
| 477 | /* Propagate Config7 */ | 477 | /* Propagate Config7 */ |
| 478 | write_vpe_c0_config7(read_c0_config7()); | 478 | write_vpe_c0_config7(read_c0_config7()); |
| 479 | write_vpe_c0_count(read_c0_count()); | ||
| 479 | } | 480 | } |
| 480 | /* enable multi-threading within VPE */ | 481 | /* enable multi-threading within VPE */ |
| 481 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() | VPECONTROL_TE); | 482 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() | VPECONTROL_TE); |
diff --git a/arch/mips/kernel/stacktrace.c b/arch/mips/kernel/stacktrace.c index 4aabe526a68e..a586aba337a7 100644 --- a/arch/mips/kernel/stacktrace.c +++ b/arch/mips/kernel/stacktrace.c | |||
| @@ -57,7 +57,7 @@ static void save_context_stack(struct stack_trace *trace, | |||
| 57 | pc = unwind_stack(task, &sp, pc, &ra); | 57 | pc = unwind_stack(task, &sp, pc, &ra); |
| 58 | } while (pc); | 58 | } while (pc); |
| 59 | #else | 59 | #else |
| 60 | save_raw_context_stack(sp); | 60 | save_raw_context_stack(trace, sp); |
| 61 | #endif | 61 | #endif |
| 62 | } | 62 | } |
| 63 | 63 | ||
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index debe86c2f691..e535f86efa2f 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * Free Software Foundation; either version 2 of the License, or (at your | 11 | * Free Software Foundation; either version 2 of the License, or (at your |
| 12 | * option) any later version. | 12 | * option) any later version. |
| 13 | */ | 13 | */ |
| 14 | #include <linux/clocksource.h> | ||
| 14 | #include <linux/types.h> | 15 | #include <linux/types.h> |
| 15 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
| 16 | #include <linux/init.h> | 17 | #include <linux/init.h> |
| @@ -67,15 +68,9 @@ int (*rtc_mips_set_time)(unsigned long) = null_rtc_set_time; | |||
| 67 | int (*rtc_mips_set_mmss)(unsigned long); | 68 | int (*rtc_mips_set_mmss)(unsigned long); |
| 68 | 69 | ||
| 69 | 70 | ||
| 70 | /* usecs per counter cycle, shifted to left by 32 bits */ | ||
| 71 | static unsigned int sll32_usecs_per_cycle; | ||
| 72 | |||
| 73 | /* how many counter cycles in a jiffy */ | 71 | /* how many counter cycles in a jiffy */ |
| 74 | static unsigned long cycles_per_jiffy __read_mostly; | 72 | static unsigned long cycles_per_jiffy __read_mostly; |
| 75 | 73 | ||
| 76 | /* Cycle counter value at the previous timer interrupt.. */ | ||
| 77 | static unsigned int timerhi, timerlo; | ||
| 78 | |||
| 79 | /* expirelo is the count value for next CPU timer interrupt */ | 74 | /* expirelo is the count value for next CPU timer interrupt */ |
| 80 | static unsigned int expirelo; | 75 | static unsigned int expirelo; |
| 81 | 76 | ||
| @@ -93,7 +88,7 @@ static unsigned int null_hpt_read(void) | |||
| 93 | return 0; | 88 | return 0; |
| 94 | } | 89 | } |
| 95 | 90 | ||
| 96 | static void null_hpt_init(unsigned int count) | 91 | static void __init null_hpt_init(void) |
| 97 | { | 92 | { |
| 98 | /* nothing */ | 93 | /* nothing */ |
| 99 | } | 94 | } |
| @@ -128,186 +123,18 @@ static unsigned int c0_hpt_read(void) | |||
| 128 | return read_c0_count(); | 123 | return read_c0_count(); |
| 129 | } | 124 | } |
| 130 | 125 | ||
| 131 | /* For use solely as a high precision timer. */ | ||
| 132 | static void c0_hpt_init(unsigned int count) | ||
| 133 | { | ||
| 134 | write_c0_count(read_c0_count() - count); | ||
| 135 | } | ||
| 136 | |||
| 137 | /* For use both as a high precision timer and an interrupt source. */ | 126 | /* For use both as a high precision timer and an interrupt source. */ |
| 138 | static void c0_hpt_timer_init(unsigned int count) | 127 | static void __init c0_hpt_timer_init(void) |
| 139 | { | 128 | { |
| 140 | count = read_c0_count() - count; | 129 | expirelo = read_c0_count() + cycles_per_jiffy; |
| 141 | expirelo = (count / cycles_per_jiffy + 1) * cycles_per_jiffy; | ||
| 142 | write_c0_count(expirelo - cycles_per_jiffy); | ||
| 143 | write_c0_compare(expirelo); | 130 | write_c0_compare(expirelo); |
| 144 | write_c0_count(count); | ||
| 145 | } | 131 | } |
| 146 | 132 | ||
| 147 | int (*mips_timer_state)(void); | 133 | int (*mips_timer_state)(void); |
| 148 | void (*mips_timer_ack)(void); | 134 | void (*mips_timer_ack)(void); |
| 149 | unsigned int (*mips_hpt_read)(void); | 135 | unsigned int (*mips_hpt_read)(void); |
| 150 | void (*mips_hpt_init)(unsigned int); | 136 | void (*mips_hpt_init)(void) __initdata = null_hpt_init; |
| 151 | 137 | unsigned int mips_hpt_mask = 0xffffffff; | |
| 152 | /* | ||
| 153 | * Gettimeoffset routines. These routines returns the time duration | ||
| 154 | * since last timer interrupt in usecs. | ||
| 155 | * | ||
| 156 | * If the exact CPU counter frequency is known, use fixed_rate_gettimeoffset. | ||
| 157 | * Otherwise use calibrate_gettimeoffset() | ||
| 158 | * | ||
| 159 | * If the CPU does not have the counter register, you can either supply | ||
| 160 | * your own gettimeoffset() routine, or use null_gettimeoffset(), which | ||
| 161 | * gives the same resolution as HZ. | ||
| 162 | */ | ||
| 163 | |||
| 164 | static unsigned long null_gettimeoffset(void) | ||
| 165 | { | ||
| 166 | return 0; | ||
| 167 | } | ||
| 168 | |||
| 169 | |||
| 170 | /* The function pointer to one of the gettimeoffset funcs. */ | ||
| 171 | unsigned long (*do_gettimeoffset)(void) = null_gettimeoffset; | ||
| 172 | |||
| 173 | |||
| 174 | static unsigned long fixed_rate_gettimeoffset(void) | ||
| 175 | { | ||
| 176 | u32 count; | ||
| 177 | unsigned long res; | ||
| 178 | |||
| 179 | /* Get last timer tick in absolute kernel time */ | ||
| 180 | count = mips_hpt_read(); | ||
| 181 | |||
| 182 | /* .. relative to previous jiffy (32 bits is enough) */ | ||
| 183 | count -= timerlo; | ||
| 184 | |||
| 185 | __asm__("multu %1,%2" | ||
| 186 | : "=h" (res) | ||
| 187 | : "r" (count), "r" (sll32_usecs_per_cycle) | ||
| 188 | : "lo", GCC_REG_ACCUM); | ||
| 189 | |||
| 190 | /* | ||
| 191 | * Due to possible jiffies inconsistencies, we need to check | ||
| 192 | * the result so that we'll get a timer that is monotonic. | ||
| 193 | */ | ||
| 194 | if (res >= USECS_PER_JIFFY) | ||
| 195 | res = USECS_PER_JIFFY - 1; | ||
| 196 | |||
| 197 | return res; | ||
| 198 | } | ||
| 199 | |||
| 200 | |||
| 201 | /* | ||
| 202 | * Cached "1/(clocks per usec) * 2^32" value. | ||
| 203 | * It has to be recalculated once each jiffy. | ||
| 204 | */ | ||
| 205 | static unsigned long cached_quotient; | ||
| 206 | |||
| 207 | /* Last jiffy when calibrate_divXX_gettimeoffset() was called. */ | ||
| 208 | static unsigned long last_jiffies; | ||
| 209 | |||
| 210 | /* | ||
| 211 | * This is moved from dec/time.c:do_ioasic_gettimeoffset() by Maciej. | ||
| 212 | */ | ||
| 213 | static unsigned long calibrate_div32_gettimeoffset(void) | ||
| 214 | { | ||
| 215 | u32 count; | ||
| 216 | unsigned long res, tmp; | ||
| 217 | unsigned long quotient; | ||
| 218 | |||
| 219 | tmp = jiffies; | ||
| 220 | |||
| 221 | quotient = cached_quotient; | ||
| 222 | |||
| 223 | if (last_jiffies != tmp) { | ||
| 224 | last_jiffies = tmp; | ||
| 225 | if (last_jiffies != 0) { | ||
| 226 | unsigned long r0; | ||
| 227 | do_div64_32(r0, timerhi, timerlo, tmp); | ||
| 228 | do_div64_32(quotient, USECS_PER_JIFFY, | ||
| 229 | USECS_PER_JIFFY_FRAC, r0); | ||
| 230 | cached_quotient = quotient; | ||
| 231 | } | ||
| 232 | } | ||
| 233 | |||
| 234 | /* Get last timer tick in absolute kernel time */ | ||
| 235 | count = mips_hpt_read(); | ||
| 236 | |||
| 237 | /* .. relative to previous jiffy (32 bits is enough) */ | ||
| 238 | count -= timerlo; | ||
| 239 | |||
| 240 | __asm__("multu %1,%2" | ||
| 241 | : "=h" (res) | ||
| 242 | : "r" (count), "r" (quotient) | ||
| 243 | : "lo", GCC_REG_ACCUM); | ||
| 244 | |||
| 245 | /* | ||
| 246 | * Due to possible jiffies inconsistencies, we need to check | ||
| 247 | * the result so that we'll get a timer that is monotonic. | ||
| 248 | */ | ||
| 249 | if (res >= USECS_PER_JIFFY) | ||
| 250 | res = USECS_PER_JIFFY - 1; | ||
| 251 | |||
| 252 | return res; | ||
| 253 | } | ||
| 254 | |||
| 255 | static unsigned long calibrate_div64_gettimeoffset(void) | ||
| 256 | { | ||
| 257 | u32 count; | ||
| 258 | unsigned long res, tmp; | ||
| 259 | unsigned long quotient; | ||
| 260 | |||
| 261 | tmp = jiffies; | ||
| 262 | |||
| 263 | quotient = cached_quotient; | ||
| 264 | |||
| 265 | if (last_jiffies != tmp) { | ||
| 266 | last_jiffies = tmp; | ||
| 267 | if (last_jiffies) { | ||
| 268 | unsigned long r0; | ||
| 269 | __asm__(".set push\n\t" | ||
| 270 | ".set mips3\n\t" | ||
| 271 | "lwu %0,%3\n\t" | ||
| 272 | "dsll32 %1,%2,0\n\t" | ||
| 273 | "or %1,%1,%0\n\t" | ||
| 274 | "ddivu $0,%1,%4\n\t" | ||
| 275 | "mflo %1\n\t" | ||
| 276 | "dsll32 %0,%5,0\n\t" | ||
| 277 | "or %0,%0,%6\n\t" | ||
| 278 | "ddivu $0,%0,%1\n\t" | ||
| 279 | "mflo %0\n\t" | ||
| 280 | ".set pop" | ||
| 281 | : "=&r" (quotient), "=&r" (r0) | ||
| 282 | : "r" (timerhi), "m" (timerlo), | ||
| 283 | "r" (tmp), "r" (USECS_PER_JIFFY), | ||
| 284 | "r" (USECS_PER_JIFFY_FRAC) | ||
| 285 | : "hi", "lo", GCC_REG_ACCUM); | ||
| 286 | cached_quotient = quotient; | ||
| 287 | } | ||
| 288 | } | ||
| 289 | |||
| 290 | /* Get last timer tick in absolute kernel time */ | ||
| 291 | count = mips_hpt_read(); | ||
| 292 | |||
| 293 | /* .. relative to previous jiffy (32 bits is enough) */ | ||
| 294 | count -= timerlo; | ||
| 295 | |||
| 296 | __asm__("multu %1,%2" | ||
| 297 | : "=h" (res) | ||
| 298 | : "r" (count), "r" (quotient) | ||
| 299 | : "lo", GCC_REG_ACCUM); | ||
| 300 | |||
| 301 | /* | ||
| 302 | * Due to possible jiffies inconsistencies, we need to check | ||
| 303 | * the result so that we'll get a timer that is monotonic. | ||
| 304 | */ | ||
| 305 | if (res >= USECS_PER_JIFFY) | ||
| 306 | res = USECS_PER_JIFFY - 1; | ||
| 307 | |||
| 308 | return res; | ||
| 309 | } | ||
| 310 | |||
| 311 | 138 | ||
| 312 | /* last time when xtime and rtc are sync'ed up */ | 139 | /* last time when xtime and rtc are sync'ed up */ |
| 313 | static long last_rtc_update; | 140 | static long last_rtc_update; |
| @@ -334,18 +161,10 @@ void local_timer_interrupt(int irq, void *dev_id) | |||
| 334 | */ | 161 | */ |
| 335 | irqreturn_t timer_interrupt(int irq, void *dev_id) | 162 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
| 336 | { | 163 | { |
| 337 | unsigned long j; | ||
| 338 | unsigned int count; | ||
| 339 | |||
| 340 | write_seqlock(&xtime_lock); | 164 | write_seqlock(&xtime_lock); |
| 341 | 165 | ||
| 342 | count = mips_hpt_read(); | ||
| 343 | mips_timer_ack(); | 166 | mips_timer_ack(); |
| 344 | 167 | ||
| 345 | /* Update timerhi/timerlo for intra-jiffy calibration. */ | ||
| 346 | timerhi += count < timerlo; /* Wrap around */ | ||
| 347 | timerlo = count; | ||
| 348 | |||
| 349 | /* | 168 | /* |
| 350 | * call the generic timer interrupt handling | 169 | * call the generic timer interrupt handling |
| 351 | */ | 170 | */ |
| @@ -368,47 +187,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id) | |||
| 368 | } | 187 | } |
| 369 | } | 188 | } |
| 370 | 189 | ||
| 371 | /* | ||
| 372 | * If jiffies has overflown in this timer_interrupt, we must | ||
| 373 | * update the timer[hi]/[lo] to make fast gettimeoffset funcs | ||
| 374 | * quotient calc still valid. -arca | ||
| 375 | * | ||
| 376 | * The first timer interrupt comes late as interrupts are | ||
| 377 | * enabled long after timers are initialized. Therefore the | ||
| 378 | * high precision timer is fast, leading to wrong gettimeoffset() | ||
| 379 | * calculations. We deal with it by setting it based on the | ||
| 380 | * number of its ticks between the second and the third interrupt. | ||
| 381 | * That is still somewhat imprecise, but it's a good estimate. | ||
| 382 | * --macro | ||
| 383 | */ | ||
| 384 | j = jiffies; | ||
| 385 | if (j < 4) { | ||
| 386 | static unsigned int prev_count; | ||
| 387 | static int hpt_initialized; | ||
| 388 | |||
| 389 | switch (j) { | ||
| 390 | case 0: | ||
| 391 | timerhi = timerlo = 0; | ||
| 392 | mips_hpt_init(count); | ||
| 393 | break; | ||
| 394 | case 2: | ||
| 395 | prev_count = count; | ||
| 396 | break; | ||
| 397 | case 3: | ||
| 398 | if (!hpt_initialized) { | ||
| 399 | unsigned int c3 = 3 * (count - prev_count); | ||
| 400 | |||
| 401 | timerhi = 0; | ||
| 402 | timerlo = c3; | ||
| 403 | mips_hpt_init(count - c3); | ||
| 404 | hpt_initialized = 1; | ||
| 405 | } | ||
| 406 | break; | ||
| 407 | default: | ||
| 408 | break; | ||
| 409 | } | ||
| 410 | } | ||
| 411 | |||
| 412 | write_sequnlock(&xtime_lock); | 190 | write_sequnlock(&xtime_lock); |
| 413 | 191 | ||
| 414 | /* | 192 | /* |
| @@ -476,12 +254,11 @@ asmlinkage void ll_local_timer_interrupt(int irq) | |||
| 476 | * 1) board_time_init() - | 254 | * 1) board_time_init() - |
| 477 | * a) (optional) set up RTC routines, | 255 | * a) (optional) set up RTC routines, |
| 478 | * b) (optional) calibrate and set the mips_hpt_frequency | 256 | * b) (optional) calibrate and set the mips_hpt_frequency |
| 479 | * (only needed if you intended to use fixed_rate_gettimeoffset | 257 | * (only needed if you intended to use cpu counter as timer interrupt |
| 480 | * or use cpu counter as timer interrupt source) | 258 | * source) |
| 481 | * 2) setup xtime based on rtc_mips_get_time(). | 259 | * 2) setup xtime based on rtc_mips_get_time(). |
| 482 | * 3) choose a appropriate gettimeoffset routine. | 260 | * 3) calculate a couple of cached variables for later usage |
| 483 | * 4) calculate a couple of cached variables for later usage | 261 | * 4) plat_timer_setup() - |
| 484 | * 5) plat_timer_setup() - | ||
| 485 | * a) (optional) over-write any choices made above by time_init(). | 262 | * a) (optional) over-write any choices made above by time_init(). |
| 486 | * b) machine specific code should setup the timer irqaction. | 263 | * b) machine specific code should setup the timer irqaction. |
| 487 | * c) enable the timer interrupt | 264 | * c) enable the timer interrupt |
| @@ -533,13 +310,48 @@ static unsigned int __init calibrate_hpt(void) | |||
| 533 | } while (--i); | 310 | } while (--i); |
| 534 | hpt_end = mips_hpt_read(); | 311 | hpt_end = mips_hpt_read(); |
| 535 | 312 | ||
| 536 | hpt_count = hpt_end - hpt_start; | 313 | hpt_count = (hpt_end - hpt_start) & mips_hpt_mask; |
| 537 | hz = HZ; | 314 | hz = HZ; |
| 538 | frequency = (u64)hpt_count * (u64)hz; | 315 | frequency = (u64)hpt_count * (u64)hz; |
| 539 | 316 | ||
| 540 | return frequency >> log_2_loops; | 317 | return frequency >> log_2_loops; |
| 541 | } | 318 | } |
| 542 | 319 | ||
| 320 | static cycle_t read_mips_hpt(void) | ||
| 321 | { | ||
| 322 | return (cycle_t)mips_hpt_read(); | ||
| 323 | } | ||
| 324 | |||
| 325 | static struct clocksource clocksource_mips = { | ||
| 326 | .name = "MIPS", | ||
| 327 | .read = read_mips_hpt, | ||
| 328 | .is_continuous = 1, | ||
| 329 | }; | ||
| 330 | |||
| 331 | static void __init init_mips_clocksource(void) | ||
| 332 | { | ||
| 333 | u64 temp; | ||
| 334 | u32 shift; | ||
| 335 | |||
| 336 | if (!mips_hpt_frequency || mips_hpt_read == null_hpt_read) | ||
| 337 | return; | ||
| 338 | |||
| 339 | /* Calclate a somewhat reasonable rating value */ | ||
| 340 | clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; | ||
| 341 | /* Find a shift value */ | ||
| 342 | for (shift = 32; shift > 0; shift--) { | ||
| 343 | temp = (u64) NSEC_PER_SEC << shift; | ||
| 344 | do_div(temp, mips_hpt_frequency); | ||
| 345 | if ((temp >> 32) == 0) | ||
| 346 | break; | ||
| 347 | } | ||
| 348 | clocksource_mips.shift = shift; | ||
| 349 | clocksource_mips.mult = (u32)temp; | ||
| 350 | clocksource_mips.mask = mips_hpt_mask; | ||
| 351 | |||
| 352 | clocksource_register(&clocksource_mips); | ||
| 353 | } | ||
| 354 | |||
| 543 | void __init time_init(void) | 355 | void __init time_init(void) |
| 544 | { | 356 | { |
| 545 | if (board_time_init) | 357 | if (board_time_init) |
| @@ -555,41 +367,21 @@ void __init time_init(void) | |||
| 555 | -xtime.tv_sec, -xtime.tv_nsec); | 367 | -xtime.tv_sec, -xtime.tv_nsec); |
| 556 | 368 | ||
| 557 | /* Choose appropriate high precision timer routines. */ | 369 | /* Choose appropriate high precision timer routines. */ |
| 558 | if (!cpu_has_counter && !mips_hpt_read) { | 370 | if (!cpu_has_counter && !mips_hpt_read) |
| 559 | /* No high precision timer -- sorry. */ | 371 | /* No high precision timer -- sorry. */ |
| 560 | mips_hpt_read = null_hpt_read; | 372 | mips_hpt_read = null_hpt_read; |
| 561 | mips_hpt_init = null_hpt_init; | 373 | else if (!mips_hpt_frequency && !mips_timer_state) { |
| 562 | } else if (!mips_hpt_frequency && !mips_timer_state) { | ||
| 563 | /* A high precision timer of unknown frequency. */ | 374 | /* A high precision timer of unknown frequency. */ |
| 564 | if (!mips_hpt_read) { | 375 | if (!mips_hpt_read) |
| 565 | /* No external high precision timer -- use R4k. */ | 376 | /* No external high precision timer -- use R4k. */ |
| 566 | mips_hpt_read = c0_hpt_read; | 377 | mips_hpt_read = c0_hpt_read; |
| 567 | mips_hpt_init = c0_hpt_init; | ||
| 568 | } | ||
| 569 | |||
| 570 | if (cpu_has_mips32r1 || cpu_has_mips32r2 || | ||
| 571 | (current_cpu_data.isa_level == MIPS_CPU_ISA_I) || | ||
| 572 | (current_cpu_data.isa_level == MIPS_CPU_ISA_II)) | ||
| 573 | /* | ||
| 574 | * We need to calibrate the counter but we don't have | ||
| 575 | * 64-bit division. | ||
| 576 | */ | ||
| 577 | do_gettimeoffset = calibrate_div32_gettimeoffset; | ||
| 578 | else | ||
| 579 | /* | ||
| 580 | * We need to calibrate the counter but we *do* have | ||
| 581 | * 64-bit division. | ||
| 582 | */ | ||
| 583 | do_gettimeoffset = calibrate_div64_gettimeoffset; | ||
| 584 | } else { | 378 | } else { |
| 585 | /* We know counter frequency. Or we can get it. */ | 379 | /* We know counter frequency. Or we can get it. */ |
| 586 | if (!mips_hpt_read) { | 380 | if (!mips_hpt_read) { |
| 587 | /* No external high precision timer -- use R4k. */ | 381 | /* No external high precision timer -- use R4k. */ |
| 588 | mips_hpt_read = c0_hpt_read; | 382 | mips_hpt_read = c0_hpt_read; |
| 589 | 383 | ||
| 590 | if (mips_timer_state) | 384 | if (!mips_timer_state) { |
| 591 | mips_hpt_init = c0_hpt_init; | ||
| 592 | else { | ||
| 593 | /* No external timer interrupt -- use R4k. */ | 385 | /* No external timer interrupt -- use R4k. */ |
| 594 | mips_hpt_init = c0_hpt_timer_init; | 386 | mips_hpt_init = c0_hpt_timer_init; |
| 595 | mips_timer_ack = c0_timer_ack; | 387 | mips_timer_ack = c0_timer_ack; |
| @@ -598,16 +390,9 @@ void __init time_init(void) | |||
| 598 | if (!mips_hpt_frequency) | 390 | if (!mips_hpt_frequency) |
| 599 | mips_hpt_frequency = calibrate_hpt(); | 391 | mips_hpt_frequency = calibrate_hpt(); |
| 600 | 392 | ||
| 601 | do_gettimeoffset = fixed_rate_gettimeoffset; | ||
| 602 | |||
| 603 | /* Calculate cache parameters. */ | 393 | /* Calculate cache parameters. */ |
| 604 | cycles_per_jiffy = (mips_hpt_frequency + HZ / 2) / HZ; | 394 | cycles_per_jiffy = (mips_hpt_frequency + HZ / 2) / HZ; |
| 605 | 395 | ||
| 606 | /* sll32_usecs_per_cycle = 10^6 * 2^32 / mips_counter_freq */ | ||
| 607 | do_div64_32(sll32_usecs_per_cycle, | ||
| 608 | 1000000, mips_hpt_frequency / 2, | ||
| 609 | mips_hpt_frequency); | ||
| 610 | |||
| 611 | /* Report the high precision timer rate for a reference. */ | 396 | /* Report the high precision timer rate for a reference. */ |
| 612 | printk("Using %u.%03u MHz high precision timer.\n", | 397 | printk("Using %u.%03u MHz high precision timer.\n", |
| 613 | ((mips_hpt_frequency + 500) / 1000) / 1000, | 398 | ((mips_hpt_frequency + 500) / 1000) / 1000, |
| @@ -619,7 +404,7 @@ void __init time_init(void) | |||
| 619 | mips_timer_ack = null_timer_ack; | 404 | mips_timer_ack = null_timer_ack; |
| 620 | 405 | ||
| 621 | /* This sets up the high precision timer for the first interrupt. */ | 406 | /* This sets up the high precision timer for the first interrupt. */ |
| 622 | mips_hpt_init(mips_hpt_read()); | 407 | mips_hpt_init(); |
| 623 | 408 | ||
| 624 | /* | 409 | /* |
| 625 | * Call board specific timer interrupt setup. | 410 | * Call board specific timer interrupt setup. |
| @@ -633,6 +418,8 @@ void __init time_init(void) | |||
| 633 | * is not invoked accidentally. | 418 | * is not invoked accidentally. |
| 634 | */ | 419 | */ |
| 635 | plat_timer_setup(&timer_irqaction); | 420 | plat_timer_setup(&timer_irqaction); |
| 421 | |||
| 422 | init_mips_clocksource(); | ||
| 636 | } | 423 | } |
| 637 | 424 | ||
| 638 | #define FEBRUARY 2 | 425 | #define FEBRUARY 2 |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index cce8313ec27d..9fda1b8be3a7 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
| @@ -1111,7 +1111,7 @@ static struct shadow_registers { | |||
| 1111 | static void mips_srs_init(void) | 1111 | static void mips_srs_init(void) |
| 1112 | { | 1112 | { |
| 1113 | shadow_registers.sr_supported = ((read_c0_srsctl() >> 26) & 0x0f) + 1; | 1113 | shadow_registers.sr_supported = ((read_c0_srsctl() >> 26) & 0x0f) + 1; |
| 1114 | printk(KERN_INFO "%d MIPSR2 register sets available\n", | 1114 | printk(KERN_INFO "%ld MIPSR2 register sets available\n", |
| 1115 | shadow_registers.sr_supported); | 1115 | shadow_registers.sr_supported); |
| 1116 | shadow_registers.sr_allocated = 1; /* Set 0 used by kernel */ | 1116 | shadow_registers.sr_allocated = 1; /* Set 0 used by kernel */ |
| 1117 | } | 1117 | } |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 0bb9cd889456..79f0317d84ac 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
| @@ -50,6 +50,16 @@ SECTIONS | |||
| 50 | /* writeable */ | 50 | /* writeable */ |
| 51 | .data : { /* Data */ | 51 | .data : { /* Data */ |
| 52 | . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ | 52 | . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ |
| 53 | /* | ||
| 54 | * This ALIGN is needed as a workaround for a bug a gcc bug upto 4.1 which | ||
| 55 | * limits the maximum alignment to at most 32kB and results in the following | ||
| 56 | * warning: | ||
| 57 | * | ||
| 58 | * CC arch/mips/kernel/init_task.o | ||
| 59 | * arch/mips/kernel/init_task.c:30: warning: alignment of ‘init_thread_union’ | ||
| 60 | * is greater than maximum object file alignment. Using 32768 | ||
| 61 | */ | ||
| 62 | . = ALIGN(_PAGE_SIZE); | ||
| 53 | *(.data.init_task) | 63 | *(.data.init_task) |
| 54 | 64 | ||
| 55 | *(.data) | 65 | *(.data) |
| @@ -91,13 +101,7 @@ SECTIONS | |||
| 91 | 101 | ||
| 92 | __initcall_start = .; | 102 | __initcall_start = .; |
| 93 | .initcall.init : { | 103 | .initcall.init : { |
| 94 | *(.initcall1.init) | 104 | INITCALLS |
| 95 | *(.initcall2.init) | ||
| 96 | *(.initcall3.init) | ||
| 97 | *(.initcall4.init) | ||
| 98 | *(.initcall5.init) | ||
| 99 | *(.initcall6.init) | ||
| 100 | *(.initcall7.init) | ||
| 101 | } | 105 | } |
| 102 | __initcall_end = .; | 106 | __initcall_end = .; |
| 103 | 107 | ||
diff --git a/arch/mips/lib-64/dump_tlb.c b/arch/mips/lib-64/dump_tlb.c index be8261be679b..594df1a05ecc 100644 --- a/arch/mips/lib-64/dump_tlb.c +++ b/arch/mips/lib-64/dump_tlb.c | |||
| @@ -149,7 +149,7 @@ void dump_list_process(struct task_struct *t, void *address) | |||
| 149 | printk("Addr == %08lx\n", addr); | 149 | printk("Addr == %08lx\n", addr); |
| 150 | printk("tasks->mm.pgd == %08lx\n", (unsigned long) t->mm->pgd); | 150 | printk("tasks->mm.pgd == %08lx\n", (unsigned long) t->mm->pgd); |
| 151 | 151 | ||
| 152 | page_dir = pgd_offset(t->mm, 0); | 152 | page_dir = pgd_offset(t->mm, 0UL); |
| 153 | printk("page_dir == %016lx\n", (unsigned long) page_dir); | 153 | printk("page_dir == %016lx\n", (unsigned long) page_dir); |
| 154 | 154 | ||
| 155 | pgd = pgd_offset(t->mm, addr); | 155 | pgd = pgd_offset(t->mm, addr); |
| @@ -184,13 +184,13 @@ void dump_list_current(void *address) | |||
| 184 | dump_list_process(current, address); | 184 | dump_list_process(current, address); |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | unsigned int vtop(void *address) | 187 | unsigned long vtop(void *address) |
| 188 | { | 188 | { |
| 189 | pgd_t *pgd; | 189 | pgd_t *pgd; |
| 190 | pud_t *pud; | 190 | pud_t *pud; |
| 191 | pmd_t *pmd; | 191 | pmd_t *pmd; |
| 192 | pte_t *pte; | 192 | pte_t *pte; |
| 193 | unsigned int addr, paddr; | 193 | unsigned long addr, paddr; |
| 194 | 194 | ||
| 195 | addr = (unsigned long) address; | 195 | addr = (unsigned long) address; |
| 196 | pgd = pgd_offset(current->mm, addr); | 196 | pgd = pgd_offset(current->mm, addr); |
diff --git a/arch/mips/mips-boards/generic/memory.c b/arch/mips/mips-boards/generic/memory.c index be80c5dd4a0c..eeed944e0f83 100644 --- a/arch/mips/mips-boards/generic/memory.c +++ b/arch/mips/mips-boards/generic/memory.c | |||
| @@ -176,7 +176,7 @@ unsigned long __init prom_free_prom_memory(void) | |||
| 176 | if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) | 176 | if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) |
| 177 | continue; | 177 | continue; |
| 178 | 178 | ||
| 179 | addr = boot_mem_map.map[i].addr; | 179 | addr = PAGE_ALIGN(boot_mem_map.map[i].addr); |
| 180 | while (addr < boot_mem_map.map[i].addr | 180 | while (addr < boot_mem_map.map[i].addr |
| 181 | + boot_mem_map.map[i].size) { | 181 | + boot_mem_map.map[i].size) { |
| 182 | ClearPageReserved(virt_to_page(__va(addr))); | 182 | ClearPageReserved(virt_to_page(__va(addr))); |
diff --git a/arch/mips/mips-boards/generic/pci.c b/arch/mips/mips-boards/generic/pci.c index 9337f6c8873a..3192a14698c8 100644 --- a/arch/mips/mips-boards/generic/pci.c +++ b/arch/mips/mips-boards/generic/pci.c | |||
| @@ -90,7 +90,7 @@ static struct pci_controller msc_controller = { | |||
| 90 | void __init mips_pcibios_init(void) | 90 | void __init mips_pcibios_init(void) |
| 91 | { | 91 | { |
| 92 | struct pci_controller *controller; | 92 | struct pci_controller *controller; |
| 93 | unsigned long start, end, map, start1, end1, map1, map2, map3, mask; | 93 | resource_size_t start, end, map, start1, end1, map1, map2, map3, mask; |
| 94 | 94 | ||
| 95 | switch (mips_revision_corid) { | 95 | switch (mips_revision_corid) { |
| 96 | case MIPS_REVISION_CORID_QED_RM5261: | 96 | case MIPS_REVISION_CORID_QED_RM5261: |
diff --git a/arch/mips/mips-boards/generic/time.c b/arch/mips/mips-boards/generic/time.c index 6f8a9fe7c1e3..d817c60c5ca5 100644 --- a/arch/mips/mips-boards/generic/time.c +++ b/arch/mips/mips-boards/generic/time.c | |||
| @@ -187,7 +187,7 @@ out: | |||
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | /* | 189 | /* |
| 190 | * Estimate CPU frequency. Sets mips_counter_frequency as a side-effect | 190 | * Estimate CPU frequency. Sets mips_hpt_frequency as a side-effect |
| 191 | */ | 191 | */ |
| 192 | static unsigned int __init estimate_cpu_frequency(void) | 192 | static unsigned int __init estimate_cpu_frequency(void) |
| 193 | { | 193 | { |
| @@ -208,7 +208,8 @@ static unsigned int __init estimate_cpu_frequency(void) | |||
| 208 | count = 6000000; | 208 | count = 6000000; |
| 209 | #endif | 209 | #endif |
| 210 | #if defined(CONFIG_MIPS_ATLAS) || defined(CONFIG_MIPS_MALTA) | 210 | #if defined(CONFIG_MIPS_ATLAS) || defined(CONFIG_MIPS_MALTA) |
| 211 | unsigned int flags; | 211 | unsigned long flags; |
| 212 | unsigned int start; | ||
| 212 | 213 | ||
| 213 | local_irq_save(flags); | 214 | local_irq_save(flags); |
| 214 | 215 | ||
| @@ -217,13 +218,13 @@ static unsigned int __init estimate_cpu_frequency(void) | |||
| 217 | while (!(CMOS_READ(RTC_REG_A) & RTC_UIP)); | 218 | while (!(CMOS_READ(RTC_REG_A) & RTC_UIP)); |
| 218 | 219 | ||
| 219 | /* Start r4k counter. */ | 220 | /* Start r4k counter. */ |
| 220 | write_c0_count(0); | 221 | start = read_c0_count(); |
| 221 | 222 | ||
| 222 | /* Read counter exactly on falling edge of update flag */ | 223 | /* Read counter exactly on falling edge of update flag */ |
| 223 | while (CMOS_READ(RTC_REG_A) & RTC_UIP); | 224 | while (CMOS_READ(RTC_REG_A) & RTC_UIP); |
| 224 | while (!(CMOS_READ(RTC_REG_A) & RTC_UIP)); | 225 | while (!(CMOS_READ(RTC_REG_A) & RTC_UIP)); |
| 225 | 226 | ||
| 226 | count = read_c0_count(); | 227 | count = read_c0_count() - start; |
| 227 | 228 | ||
| 228 | /* restore interrupts */ | 229 | /* restore interrupts */ |
| 229 | local_irq_restore(flags); | 230 | local_irq_restore(flags); |
diff --git a/arch/mips/mips-boards/malta/malta_int.c b/arch/mips/mips-boards/malta/malta_int.c index 6244d0e2c7de..90ad5bf3e2f1 100644 --- a/arch/mips/mips-boards/malta/malta_int.c +++ b/arch/mips/mips-boards/malta/malta_int.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <asm/i8259.h> | 32 | #include <asm/i8259.h> |
| 33 | #include <asm/irq_cpu.h> | 33 | #include <asm/irq_cpu.h> |
| 34 | #include <asm/io.h> | 34 | #include <asm/io.h> |
| 35 | #include <asm/irq_regs.h> | ||
| 35 | #include <asm/mips-boards/malta.h> | 36 | #include <asm/mips-boards/malta.h> |
| 36 | #include <asm/mips-boards/maltaint.h> | 37 | #include <asm/mips-boards/maltaint.h> |
| 37 | #include <asm/mips-boards/piix4.h> | 38 | #include <asm/mips-boards/piix4.h> |
| @@ -131,7 +132,7 @@ static void corehi_irqdispatch(void) | |||
| 131 | unsigned int intedge, intsteer, pcicmd, pcibadaddr; | 132 | unsigned int intedge, intsteer, pcicmd, pcibadaddr; |
| 132 | unsigned int pcimstat, intisr, inten, intpol; | 133 | unsigned int pcimstat, intisr, inten, intpol; |
| 133 | unsigned int intrcause,datalo,datahi; | 134 | unsigned int intrcause,datalo,datahi; |
| 134 | struct pt_regs *regs; | 135 | struct pt_regs *regs = get_irq_regs(); |
| 135 | 136 | ||
| 136 | printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n"); | 137 | printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n"); |
| 137 | printk("epc : %08lx\nStatus: %08lx\n" | 138 | printk("epc : %08lx\nStatus: %08lx\n" |
diff --git a/arch/mips/mips-boards/sim/sim_time.c b/arch/mips/mips-boards/sim/sim_time.c index c566b9bd0427..24a4ed00cc0a 100644 --- a/arch/mips/mips-boards/sim/sim_time.c +++ b/arch/mips/mips-boards/sim/sim_time.c | |||
| @@ -102,7 +102,7 @@ irqreturn_t sim_timer_interrupt(int irq, void *dev_id) | |||
| 102 | 102 | ||
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| 105 | * Estimate CPU frequency. Sets mips_counter_frequency as a side-effect | 105 | * Estimate CPU frequency. Sets mips_hpt_frequency as a side-effect |
| 106 | */ | 106 | */ |
| 107 | static unsigned int __init estimate_cpu_frequency(void) | 107 | static unsigned int __init estimate_cpu_frequency(void) |
| 108 | { | 108 | { |
diff --git a/arch/mips/mm/c-sb1.c b/arch/mips/mm/c-sb1.c index 5537558f19f7..d0ddb4a768a5 100644 --- a/arch/mips/mm/c-sb1.c +++ b/arch/mips/mm/c-sb1.c | |||
| @@ -49,6 +49,15 @@ static unsigned short dcache_sets; | |||
| 49 | static unsigned int icache_range_cutoff; | 49 | static unsigned int icache_range_cutoff; |
| 50 | static unsigned int dcache_range_cutoff; | 50 | static unsigned int dcache_range_cutoff; |
| 51 | 51 | ||
| 52 | static inline void sb1_on_each_cpu(void (*func) (void *info), void *info, | ||
| 53 | int retry, int wait) | ||
| 54 | { | ||
| 55 | preempt_disable(); | ||
| 56 | smp_call_function(func, info, retry, wait); | ||
| 57 | func(info); | ||
| 58 | preempt_enable(); | ||
| 59 | } | ||
| 60 | |||
| 52 | /* | 61 | /* |
| 53 | * The dcache is fully coherent to the system, with one | 62 | * The dcache is fully coherent to the system, with one |
| 54 | * big caveat: the instruction stream. In other words, | 63 | * big caveat: the instruction stream. In other words, |
| @@ -226,7 +235,7 @@ static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, | |||
| 226 | args.vma = vma; | 235 | args.vma = vma; |
| 227 | args.addr = addr; | 236 | args.addr = addr; |
| 228 | args.pfn = pfn; | 237 | args.pfn = pfn; |
| 229 | on_each_cpu(sb1_flush_cache_page_ipi, (void *) &args, 1, 1); | 238 | sb1_on_each_cpu(sb1_flush_cache_page_ipi, (void *) &args, 1, 1); |
| 230 | } | 239 | } |
| 231 | #else | 240 | #else |
| 232 | void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn) | 241 | void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn) |
| @@ -249,7 +258,7 @@ void sb1___flush_cache_all_ipi(void *ignored) | |||
| 249 | 258 | ||
| 250 | static void sb1___flush_cache_all(void) | 259 | static void sb1___flush_cache_all(void) |
| 251 | { | 260 | { |
| 252 | on_each_cpu(sb1___flush_cache_all_ipi, 0, 1, 1); | 261 | sb1_on_each_cpu(sb1___flush_cache_all_ipi, 0, 1, 1); |
| 253 | } | 262 | } |
| 254 | #else | 263 | #else |
| 255 | void sb1___flush_cache_all(void) | 264 | void sb1___flush_cache_all(void) |
| @@ -299,7 +308,7 @@ void sb1_flush_icache_range(unsigned long start, unsigned long end) | |||
| 299 | 308 | ||
| 300 | args.start = start; | 309 | args.start = start; |
| 301 | args.end = end; | 310 | args.end = end; |
| 302 | on_each_cpu(sb1_flush_icache_range_ipi, &args, 1, 1); | 311 | sb1_on_each_cpu(sb1_flush_icache_range_ipi, &args, 1, 1); |
| 303 | } | 312 | } |
| 304 | #else | 313 | #else |
| 305 | void sb1_flush_icache_range(unsigned long start, unsigned long end) | 314 | void sb1_flush_icache_range(unsigned long start, unsigned long end) |
| @@ -326,7 +335,7 @@ static void sb1_flush_cache_sigtramp_ipi(void *info) | |||
| 326 | 335 | ||
| 327 | static void sb1_flush_cache_sigtramp(unsigned long addr) | 336 | static void sb1_flush_cache_sigtramp(unsigned long addr) |
| 328 | { | 337 | { |
| 329 | on_each_cpu(sb1_flush_cache_sigtramp_ipi, (void *) addr, 1, 1); | 338 | sb1_on_each_cpu(sb1_flush_cache_sigtramp_ipi, (void *) addr, 1, 1); |
| 330 | } | 339 | } |
| 331 | #else | 340 | #else |
| 332 | void sb1_flush_cache_sigtramp(unsigned long addr) | 341 | void sb1_flush_cache_sigtramp(unsigned long addr) |
| @@ -444,7 +453,6 @@ static __init void probe_cache_sizes(void) | |||
| 444 | void sb1_cache_init(void) | 453 | void sb1_cache_init(void) |
| 445 | { | 454 | { |
| 446 | extern char except_vec2_sb1; | 455 | extern char except_vec2_sb1; |
| 447 | extern char handle_vec2_sb1; | ||
| 448 | 456 | ||
| 449 | /* Special cache error handler for SB1 */ | 457 | /* Special cache error handler for SB1 */ |
| 450 | set_uncached_handler (0x100, &except_vec2_sb1, 0x80); | 458 | set_uncached_handler (0x100, &except_vec2_sb1, 0x80); |
| @@ -497,5 +505,5 @@ void sb1_cache_init(void) | |||
| 497 | : | 505 | : |
| 498 | : "memory"); | 506 | : "memory"); |
| 499 | 507 | ||
| 500 | flush_cache_all(); | 508 | local_sb1___flush_cache_all(); |
| 501 | } | 509 | } |
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 88b72c9a8495..2de4d3c367a2 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
| @@ -30,11 +30,34 @@ | |||
| 30 | #include <asm/cachectl.h> | 30 | #include <asm/cachectl.h> |
| 31 | #include <asm/cpu.h> | 31 | #include <asm/cpu.h> |
| 32 | #include <asm/dma.h> | 32 | #include <asm/dma.h> |
| 33 | #include <asm/kmap_types.h> | ||
| 33 | #include <asm/mmu_context.h> | 34 | #include <asm/mmu_context.h> |
| 34 | #include <asm/sections.h> | 35 | #include <asm/sections.h> |
| 35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
| 36 | #include <asm/pgalloc.h> | 37 | #include <asm/pgalloc.h> |
| 37 | #include <asm/tlb.h> | 38 | #include <asm/tlb.h> |
| 39 | #include <asm/fixmap.h> | ||
| 40 | |||
| 41 | /* Atomicity and interruptability */ | ||
| 42 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 43 | |||
| 44 | #include <asm/mipsmtregs.h> | ||
| 45 | |||
| 46 | #define ENTER_CRITICAL(flags) \ | ||
| 47 | { \ | ||
| 48 | unsigned int mvpflags; \ | ||
| 49 | local_irq_save(flags);\ | ||
| 50 | mvpflags = dvpe() | ||
| 51 | #define EXIT_CRITICAL(flags) \ | ||
| 52 | evpe(mvpflags); \ | ||
| 53 | local_irq_restore(flags); \ | ||
| 54 | } | ||
| 55 | #else | ||
| 56 | |||
| 57 | #define ENTER_CRITICAL(flags) local_irq_save(flags) | ||
| 58 | #define EXIT_CRITICAL(flags) local_irq_restore(flags) | ||
| 59 | |||
| 60 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
| 38 | 61 | ||
| 39 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | 62 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); |
| 40 | 63 | ||
| @@ -80,13 +103,142 @@ unsigned long setup_zero_pages(void) | |||
| 80 | return 1UL << order; | 103 | return 1UL << order; |
| 81 | } | 104 | } |
| 82 | 105 | ||
| 83 | #ifdef CONFIG_HIGHMEM | 106 | /* |
| 84 | pte_t *kmap_pte; | 107 | * These are almost like kmap_atomic / kunmap_atmic except they take an |
| 85 | pgprot_t kmap_prot; | 108 | * additional address argument as the hint. |
| 109 | */ | ||
| 86 | 110 | ||
| 87 | #define kmap_get_fixmap_pte(vaddr) \ | 111 | #define kmap_get_fixmap_pte(vaddr) \ |
| 88 | pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr)) | 112 | pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr)) |
| 89 | 113 | ||
| 114 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 115 | static pte_t *kmap_coherent_pte; | ||
| 116 | static void __init kmap_coherent_init(void) | ||
| 117 | { | ||
| 118 | unsigned long vaddr; | ||
| 119 | |||
| 120 | /* cache the first coherent kmap pte */ | ||
| 121 | vaddr = __fix_to_virt(FIX_CMAP_BEGIN); | ||
| 122 | kmap_coherent_pte = kmap_get_fixmap_pte(vaddr); | ||
| 123 | } | ||
| 124 | #else | ||
| 125 | static inline void kmap_coherent_init(void) {} | ||
| 126 | #endif | ||
| 127 | |||
| 128 | static inline void *kmap_coherent(struct page *page, unsigned long addr) | ||
| 129 | { | ||
| 130 | enum fixed_addresses idx; | ||
| 131 | unsigned long vaddr, flags, entrylo; | ||
| 132 | unsigned long old_ctx; | ||
| 133 | pte_t pte; | ||
| 134 | int tlbidx; | ||
| 135 | |||
| 136 | inc_preempt_count(); | ||
| 137 | idx = (addr >> PAGE_SHIFT) & (FIX_N_COLOURS - 1); | ||
| 138 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 139 | idx += FIX_N_COLOURS * smp_processor_id(); | ||
| 140 | #endif | ||
| 141 | vaddr = __fix_to_virt(FIX_CMAP_END - idx); | ||
| 142 | pte = mk_pte(page, PAGE_KERNEL); | ||
| 143 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) | ||
| 144 | entrylo = pte.pte_high; | ||
| 145 | #else | ||
| 146 | entrylo = pte_val(pte) >> 6; | ||
| 147 | #endif | ||
| 148 | |||
| 149 | ENTER_CRITICAL(flags); | ||
| 150 | old_ctx = read_c0_entryhi(); | ||
| 151 | write_c0_entryhi(vaddr & (PAGE_MASK << 1)); | ||
| 152 | write_c0_entrylo0(entrylo); | ||
| 153 | write_c0_entrylo1(entrylo); | ||
| 154 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 155 | set_pte(kmap_coherent_pte - (FIX_CMAP_END - idx), pte); | ||
| 156 | /* preload TLB instead of local_flush_tlb_one() */ | ||
| 157 | mtc0_tlbw_hazard(); | ||
| 158 | tlb_probe(); | ||
| 159 | tlb_probe_hazard(); | ||
| 160 | tlbidx = read_c0_index(); | ||
| 161 | mtc0_tlbw_hazard(); | ||
| 162 | if (tlbidx < 0) | ||
| 163 | tlb_write_random(); | ||
| 164 | else | ||
| 165 | tlb_write_indexed(); | ||
| 166 | #else | ||
| 167 | tlbidx = read_c0_wired(); | ||
| 168 | write_c0_wired(tlbidx + 1); | ||
| 169 | write_c0_index(tlbidx); | ||
| 170 | mtc0_tlbw_hazard(); | ||
| 171 | tlb_write_indexed(); | ||
| 172 | #endif | ||
| 173 | tlbw_use_hazard(); | ||
| 174 | write_c0_entryhi(old_ctx); | ||
| 175 | EXIT_CRITICAL(flags); | ||
| 176 | |||
| 177 | return (void*) vaddr; | ||
| 178 | } | ||
| 179 | |||
| 180 | #define UNIQUE_ENTRYHI(idx) (CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) | ||
| 181 | |||
| 182 | static inline void kunmap_coherent(struct page *page) | ||
| 183 | { | ||
| 184 | #ifndef CONFIG_MIPS_MT_SMTC | ||
| 185 | unsigned int wired; | ||
| 186 | unsigned long flags, old_ctx; | ||
| 187 | |||
| 188 | ENTER_CRITICAL(flags); | ||
| 189 | old_ctx = read_c0_entryhi(); | ||
| 190 | wired = read_c0_wired() - 1; | ||
| 191 | write_c0_wired(wired); | ||
| 192 | write_c0_index(wired); | ||
| 193 | write_c0_entryhi(UNIQUE_ENTRYHI(wired)); | ||
| 194 | write_c0_entrylo0(0); | ||
| 195 | write_c0_entrylo1(0); | ||
| 196 | mtc0_tlbw_hazard(); | ||
| 197 | tlb_write_indexed(); | ||
| 198 | tlbw_use_hazard(); | ||
| 199 | write_c0_entryhi(old_ctx); | ||
| 200 | EXIT_CRITICAL(flags); | ||
| 201 | #endif | ||
| 202 | dec_preempt_count(); | ||
| 203 | preempt_check_resched(); | ||
| 204 | } | ||
| 205 | |||
| 206 | void copy_to_user_page(struct vm_area_struct *vma, | ||
| 207 | struct page *page, unsigned long vaddr, void *dst, const void *src, | ||
| 208 | unsigned long len) | ||
| 209 | { | ||
| 210 | if (cpu_has_dc_aliases) { | ||
| 211 | void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); | ||
| 212 | memcpy(vto, src, len); | ||
| 213 | kunmap_coherent(page); | ||
| 214 | } else | ||
| 215 | memcpy(dst, src, len); | ||
| 216 | if ((vma->vm_flags & VM_EXEC) && !cpu_has_ic_fills_f_dc) | ||
| 217 | flush_cache_page(vma, vaddr, page_to_pfn(page)); | ||
| 218 | } | ||
| 219 | |||
| 220 | EXPORT_SYMBOL(copy_to_user_page); | ||
| 221 | |||
| 222 | void copy_from_user_page(struct vm_area_struct *vma, | ||
| 223 | struct page *page, unsigned long vaddr, void *dst, const void *src, | ||
| 224 | unsigned long len) | ||
| 225 | { | ||
| 226 | if (cpu_has_dc_aliases) { | ||
| 227 | void *vfrom = | ||
| 228 | kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); | ||
| 229 | memcpy(dst, vfrom, len); | ||
| 230 | kunmap_coherent(page); | ||
| 231 | } else | ||
| 232 | memcpy(dst, src, len); | ||
| 233 | } | ||
| 234 | |||
| 235 | EXPORT_SYMBOL(copy_from_user_page); | ||
| 236 | |||
| 237 | |||
| 238 | #ifdef CONFIG_HIGHMEM | ||
| 239 | pte_t *kmap_pte; | ||
| 240 | pgprot_t kmap_prot; | ||
| 241 | |||
| 90 | static void __init kmap_init(void) | 242 | static void __init kmap_init(void) |
| 91 | { | 243 | { |
| 92 | unsigned long kmap_vstart; | 244 | unsigned long kmap_vstart; |
| @@ -97,11 +249,12 @@ static void __init kmap_init(void) | |||
| 97 | 249 | ||
| 98 | kmap_prot = PAGE_KERNEL; | 250 | kmap_prot = PAGE_KERNEL; |
| 99 | } | 251 | } |
| 252 | #endif /* CONFIG_HIGHMEM */ | ||
| 100 | 253 | ||
| 101 | #ifdef CONFIG_32BIT | ||
| 102 | void __init fixrange_init(unsigned long start, unsigned long end, | 254 | void __init fixrange_init(unsigned long start, unsigned long end, |
| 103 | pgd_t *pgd_base) | 255 | pgd_t *pgd_base) |
| 104 | { | 256 | { |
| 257 | #if defined(CONFIG_HIGHMEM) || defined(CONFIG_MIPS_MT_SMTC) | ||
| 105 | pgd_t *pgd; | 258 | pgd_t *pgd; |
| 106 | pud_t *pud; | 259 | pud_t *pud; |
| 107 | pmd_t *pmd; | 260 | pmd_t *pmd; |
| @@ -122,7 +275,7 @@ void __init fixrange_init(unsigned long start, unsigned long end, | |||
| 122 | for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) { | 275 | for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) { |
| 123 | if (pmd_none(*pmd)) { | 276 | if (pmd_none(*pmd)) { |
| 124 | pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); | 277 | pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); |
| 125 | set_pmd(pmd, __pmd(pte)); | 278 | set_pmd(pmd, __pmd((unsigned long)pte)); |
| 126 | if (pte != pte_offset_kernel(pmd, 0)) | 279 | if (pte != pte_offset_kernel(pmd, 0)) |
| 127 | BUG(); | 280 | BUG(); |
| 128 | } | 281 | } |
| @@ -132,9 +285,8 @@ void __init fixrange_init(unsigned long start, unsigned long end, | |||
| 132 | } | 285 | } |
| 133 | j = 0; | 286 | j = 0; |
| 134 | } | 287 | } |
| 288 | #endif | ||
| 135 | } | 289 | } |
| 136 | #endif /* CONFIG_32BIT */ | ||
| 137 | #endif /* CONFIG_HIGHMEM */ | ||
| 138 | 290 | ||
| 139 | #ifndef CONFIG_NEED_MULTIPLE_NODES | 291 | #ifndef CONFIG_NEED_MULTIPLE_NODES |
| 140 | extern void pagetable_init(void); | 292 | extern void pagetable_init(void); |
| @@ -175,6 +327,7 @@ void __init paging_init(void) | |||
| 175 | #ifdef CONFIG_HIGHMEM | 327 | #ifdef CONFIG_HIGHMEM |
| 176 | kmap_init(); | 328 | kmap_init(); |
| 177 | #endif | 329 | #endif |
| 330 | kmap_coherent_init(); | ||
| 178 | 331 | ||
| 179 | max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; | 332 | max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; |
| 180 | low = max_low_pfn; | 333 | low = max_low_pfn; |
diff --git a/arch/mips/mm/ioremap.c b/arch/mips/mm/ioremap.c index 3101d1db5592..cea7d0ea36e4 100644 --- a/arch/mips/mm/ioremap.c +++ b/arch/mips/mm/ioremap.c | |||
| @@ -176,7 +176,7 @@ void __iomem * __ioremap(phys_t phys_addr, phys_t size, unsigned long flags) | |||
| 176 | 176 | ||
| 177 | #define IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1) | 177 | #define IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1) |
| 178 | 178 | ||
| 179 | void __iounmap(volatile void __iomem *addr) | 179 | void __iounmap(const volatile void __iomem *addr) |
| 180 | { | 180 | { |
| 181 | struct vm_struct *p; | 181 | struct vm_struct *p; |
| 182 | 182 | ||
diff --git a/arch/mips/mm/pg-r4k.c b/arch/mips/mm/pg-r4k.c index b7c749232ffe..d41fc5885e87 100644 --- a/arch/mips/mm/pg-r4k.c +++ b/arch/mips/mm/pg-r4k.c | |||
| @@ -270,6 +270,20 @@ static inline void build_addiu_a2_a0(unsigned long offset) | |||
| 270 | emit_instruction(mi); | 270 | emit_instruction(mi); |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | static inline void build_addiu_a2(unsigned long offset) | ||
| 274 | { | ||
| 275 | union mips_instruction mi; | ||
| 276 | |||
| 277 | BUG_ON(offset > 0x7fff); | ||
| 278 | |||
| 279 | mi.i_format.opcode = cpu_has_64bit_gp_regs ? daddiu_op : addiu_op; | ||
| 280 | mi.i_format.rs = 6; /* $a2 */ | ||
| 281 | mi.i_format.rt = 6; /* $a2 */ | ||
| 282 | mi.i_format.simmediate = offset; | ||
| 283 | |||
| 284 | emit_instruction(mi); | ||
| 285 | } | ||
| 286 | |||
| 273 | static inline void build_addiu_a1(unsigned long offset) | 287 | static inline void build_addiu_a1(unsigned long offset) |
| 274 | { | 288 | { |
| 275 | union mips_instruction mi; | 289 | union mips_instruction mi; |
| @@ -333,6 +347,7 @@ static inline void build_jr_ra(void) | |||
| 333 | void __init build_clear_page(void) | 347 | void __init build_clear_page(void) |
| 334 | { | 348 | { |
| 335 | unsigned int loop_start; | 349 | unsigned int loop_start; |
| 350 | unsigned long off; | ||
| 336 | 351 | ||
| 337 | epc = (unsigned int *) &clear_page_array; | 352 | epc = (unsigned int *) &clear_page_array; |
| 338 | instruction_pending = 0; | 353 | instruction_pending = 0; |
| @@ -369,7 +384,12 @@ void __init build_clear_page(void) | |||
| 369 | } | 384 | } |
| 370 | } | 385 | } |
| 371 | 386 | ||
| 372 | build_addiu_a2_a0(PAGE_SIZE - (cpu_has_prefetch ? pref_offset_clear : 0)); | 387 | off = PAGE_SIZE - (cpu_has_prefetch ? pref_offset_clear : 0); |
| 388 | if (off > 0x7fff) { | ||
| 389 | build_addiu_a2_a0(off >> 1); | ||
| 390 | build_addiu_a2(off >> 1); | ||
| 391 | } else | ||
| 392 | build_addiu_a2_a0(off); | ||
| 373 | 393 | ||
| 374 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 394 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 375 | build_insn_word(0x3c01a000); /* lui $at, 0xa000 */ | 395 | build_insn_word(0x3c01a000); /* lui $at, 0xa000 */ |
| @@ -420,12 +440,18 @@ dest = label(); | |||
| 420 | void __init build_copy_page(void) | 440 | void __init build_copy_page(void) |
| 421 | { | 441 | { |
| 422 | unsigned int loop_start; | 442 | unsigned int loop_start; |
| 443 | unsigned long off; | ||
| 423 | 444 | ||
| 424 | epc = (unsigned int *) ©_page_array; | 445 | epc = (unsigned int *) ©_page_array; |
| 425 | store_offset = load_offset = 0; | 446 | store_offset = load_offset = 0; |
| 426 | instruction_pending = 0; | 447 | instruction_pending = 0; |
| 427 | 448 | ||
| 428 | build_addiu_a2_a0(PAGE_SIZE - (cpu_has_prefetch ? pref_offset_copy : 0)); | 449 | off = PAGE_SIZE - (cpu_has_prefetch ? pref_offset_copy : 0); |
| 450 | if (off > 0x7fff) { | ||
| 451 | build_addiu_a2_a0(off >> 1); | ||
| 452 | build_addiu_a2(off >> 1); | ||
| 453 | } else | ||
| 454 | build_addiu_a2_a0(off); | ||
| 429 | 455 | ||
| 430 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 456 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 431 | build_insn_word(0x3c01a000); /* lui $at, 0xa000 */ | 457 | build_insn_word(0x3c01a000); /* lui $at, 0xa000 */ |
diff --git a/arch/mips/mm/pgtable-32.c b/arch/mips/mm/pgtable-32.c index 4bdaa05f485b..4a61e624b0ec 100644 --- a/arch/mips/mm/pgtable-32.c +++ b/arch/mips/mm/pgtable-32.c | |||
| @@ -31,9 +31,10 @@ void pgd_init(unsigned long page) | |||
| 31 | 31 | ||
| 32 | void __init pagetable_init(void) | 32 | void __init pagetable_init(void) |
| 33 | { | 33 | { |
| 34 | #ifdef CONFIG_HIGHMEM | ||
| 35 | unsigned long vaddr; | 34 | unsigned long vaddr; |
| 36 | pgd_t *pgd, *pgd_base; | 35 | pgd_t *pgd_base; |
| 36 | #ifdef CONFIG_HIGHMEM | ||
| 37 | pgd_t *pgd; | ||
| 37 | pud_t *pud; | 38 | pud_t *pud; |
| 38 | pmd_t *pmd; | 39 | pmd_t *pmd; |
| 39 | pte_t *pte; | 40 | pte_t *pte; |
| @@ -44,7 +45,6 @@ void __init pagetable_init(void) | |||
| 44 | pgd_init((unsigned long)swapper_pg_dir | 45 | pgd_init((unsigned long)swapper_pg_dir |
| 45 | + sizeof(pgd_t) * USER_PTRS_PER_PGD); | 46 | + sizeof(pgd_t) * USER_PTRS_PER_PGD); |
| 46 | 47 | ||
| 47 | #ifdef CONFIG_HIGHMEM | ||
| 48 | pgd_base = swapper_pg_dir; | 48 | pgd_base = swapper_pg_dir; |
| 49 | 49 | ||
| 50 | /* | 50 | /* |
| @@ -53,6 +53,7 @@ void __init pagetable_init(void) | |||
| 53 | vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; | 53 | vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; |
| 54 | fixrange_init(vaddr, 0, pgd_base); | 54 | fixrange_init(vaddr, 0, pgd_base); |
| 55 | 55 | ||
| 56 | #ifdef CONFIG_HIGHMEM | ||
| 56 | /* | 57 | /* |
| 57 | * Permanent kmaps: | 58 | * Permanent kmaps: |
| 58 | */ | 59 | */ |
diff --git a/arch/mips/mm/pgtable-64.c b/arch/mips/mm/pgtable-64.c index 44b5e97fff65..8d600d307d5d 100644 --- a/arch/mips/mm/pgtable-64.c +++ b/arch/mips/mm/pgtable-64.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | */ | 8 | */ |
| 9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
| 10 | #include <linux/mm.h> | 10 | #include <linux/mm.h> |
| 11 | #include <asm/fixmap.h> | ||
| 11 | #include <asm/pgtable.h> | 12 | #include <asm/pgtable.h> |
| 12 | 13 | ||
| 13 | void pgd_init(unsigned long page) | 14 | void pgd_init(unsigned long page) |
| @@ -52,7 +53,17 @@ void pmd_init(unsigned long addr, unsigned long pagetable) | |||
| 52 | 53 | ||
| 53 | void __init pagetable_init(void) | 54 | void __init pagetable_init(void) |
| 54 | { | 55 | { |
| 56 | unsigned long vaddr; | ||
| 57 | pgd_t *pgd_base; | ||
| 58 | |||
| 55 | /* Initialize the entire pgd. */ | 59 | /* Initialize the entire pgd. */ |
| 56 | pgd_init((unsigned long)swapper_pg_dir); | 60 | pgd_init((unsigned long)swapper_pg_dir); |
| 57 | pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); | 61 | pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); |
| 62 | |||
| 63 | pgd_base = swapper_pg_dir; | ||
| 64 | /* | ||
| 65 | * Fixed mappings: | ||
| 66 | */ | ||
| 67 | vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; | ||
| 68 | fixrange_init(vaddr, 0, pgd_base); | ||
| 58 | } | 69 | } |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 6f8b25cfa6f0..fec318a1c8c5 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
| @@ -102,7 +102,7 @@ enum opcode { | |||
| 102 | insn_addu, insn_addiu, insn_and, insn_andi, insn_beq, | 102 | insn_addu, insn_addiu, insn_and, insn_andi, insn_beq, |
| 103 | insn_beql, insn_bgez, insn_bgezl, insn_bltz, insn_bltzl, | 103 | insn_beql, insn_bgez, insn_bgezl, insn_bltz, insn_bltzl, |
| 104 | insn_bne, insn_daddu, insn_daddiu, insn_dmfc0, insn_dmtc0, | 104 | insn_bne, insn_daddu, insn_daddiu, insn_dmfc0, insn_dmtc0, |
| 105 | insn_dsll, insn_dsll32, insn_dsra, insn_dsrl, | 105 | insn_dsll, insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, |
| 106 | insn_dsubu, insn_eret, insn_j, insn_jal, insn_jr, insn_ld, | 106 | insn_dsubu, insn_eret, insn_j, insn_jal, insn_jr, insn_ld, |
| 107 | insn_ll, insn_lld, insn_lui, insn_lw, insn_mfc0, insn_mtc0, | 107 | insn_ll, insn_lld, insn_lui, insn_lw, insn_mfc0, insn_mtc0, |
| 108 | insn_ori, insn_rfe, insn_sc, insn_scd, insn_sd, insn_sll, | 108 | insn_ori, insn_rfe, insn_sc, insn_scd, insn_sd, insn_sll, |
| @@ -145,6 +145,7 @@ static __initdata struct insn insn_table[] = { | |||
| 145 | { insn_dsll32, M(spec_op,0,0,0,0,dsll32_op), RT | RD | RE }, | 145 | { insn_dsll32, M(spec_op,0,0,0,0,dsll32_op), RT | RD | RE }, |
| 146 | { insn_dsra, M(spec_op,0,0,0,0,dsra_op), RT | RD | RE }, | 146 | { insn_dsra, M(spec_op,0,0,0,0,dsra_op), RT | RD | RE }, |
| 147 | { insn_dsrl, M(spec_op,0,0,0,0,dsrl_op), RT | RD | RE }, | 147 | { insn_dsrl, M(spec_op,0,0,0,0,dsrl_op), RT | RD | RE }, |
| 148 | { insn_dsrl32, M(spec_op,0,0,0,0,dsrl32_op), RT | RD | RE }, | ||
| 148 | { insn_dsubu, M(spec_op,0,0,0,0,dsubu_op), RS | RT | RD }, | 149 | { insn_dsubu, M(spec_op,0,0,0,0,dsubu_op), RS | RT | RD }, |
| 149 | { insn_eret, M(cop0_op,cop_op,0,0,0,eret_op), 0 }, | 150 | { insn_eret, M(cop0_op,cop_op,0,0,0,eret_op), 0 }, |
| 150 | { insn_j, M(j_op,0,0,0,0,0), JIMM }, | 151 | { insn_j, M(j_op,0,0,0,0,0), JIMM }, |
| @@ -385,6 +386,7 @@ I_u2u1u3(_dsll); | |||
| 385 | I_u2u1u3(_dsll32); | 386 | I_u2u1u3(_dsll32); |
| 386 | I_u2u1u3(_dsra); | 387 | I_u2u1u3(_dsra); |
| 387 | I_u2u1u3(_dsrl); | 388 | I_u2u1u3(_dsrl); |
| 389 | I_u2u1u3(_dsrl32); | ||
| 388 | I_u3u1u2(_dsubu); | 390 | I_u3u1u2(_dsubu); |
| 389 | I_0(_eret); | 391 | I_0(_eret); |
| 390 | I_u1(_j); | 392 | I_u1(_j); |
| @@ -996,7 +998,12 @@ build_get_pmde64(u32 **p, struct label **l, struct reloc **r, | |||
| 996 | #endif | 998 | #endif |
| 997 | 999 | ||
| 998 | l_vmalloc_done(l, *p); | 1000 | l_vmalloc_done(l, *p); |
| 999 | i_dsrl(p, tmp, tmp, PGDIR_SHIFT-3); /* get pgd offset in bytes */ | 1001 | |
| 1002 | if (PGDIR_SHIFT - 3 < 32) /* get pgd offset in bytes */ | ||
| 1003 | i_dsrl(p, tmp, tmp, PGDIR_SHIFT-3); | ||
| 1004 | else | ||
| 1005 | i_dsrl32(p, tmp, tmp, PGDIR_SHIFT - 3 - 32); | ||
| 1006 | |||
| 1000 | i_andi(p, tmp, tmp, (PTRS_PER_PGD - 1)<<3); | 1007 | i_andi(p, tmp, tmp, (PTRS_PER_PGD - 1)<<3); |
| 1001 | i_daddu(p, ptr, ptr, tmp); /* add in pgd offset */ | 1008 | i_daddu(p, ptr, ptr, tmp); /* add in pgd offset */ |
| 1002 | i_dmfc0(p, tmp, C0_BADVADDR); /* get faulting address */ | 1009 | i_dmfc0(p, tmp, C0_BADVADDR); /* get faulting address */ |
| @@ -1073,7 +1080,7 @@ build_get_pgde32(u32 **p, unsigned int tmp, unsigned int ptr) | |||
| 1073 | 1080 | ||
| 1074 | static __init void build_adjust_context(u32 **p, unsigned int ctx) | 1081 | static __init void build_adjust_context(u32 **p, unsigned int ctx) |
| 1075 | { | 1082 | { |
| 1076 | unsigned int shift = 4 - (PTE_T_LOG2 + 1); | 1083 | unsigned int shift = 4 - (PTE_T_LOG2 + 1) + PAGE_SHIFT - 12; |
| 1077 | unsigned int mask = (PTRS_PER_PTE / 2 - 1) << (PTE_T_LOG2 + 1); | 1084 | unsigned int mask = (PTRS_PER_PTE / 2 - 1) << (PTE_T_LOG2 + 1); |
| 1078 | 1085 | ||
| 1079 | switch (current_cpu_data.cputype) { | 1086 | switch (current_cpu_data.cputype) { |
diff --git a/arch/mips/momentum/ocelot_3/Makefile b/arch/mips/momentum/ocelot_3/Makefile index 8bcea64dd27b..d5a090a85a15 100644 --- a/arch/mips/momentum/ocelot_3/Makefile +++ b/arch/mips/momentum/ocelot_3/Makefile | |||
| @@ -5,4 +5,4 @@ | |||
| 5 | # removes any old dependencies. DON'T put your own dependencies here | 5 | # removes any old dependencies. DON'T put your own dependencies here |
| 6 | # unless it's something special (ie not a .c file). | 6 | # unless it's something special (ie not a .c file). |
| 7 | # | 7 | # |
| 8 | obj-y += irq.o prom.o reset.o setup.o | 8 | obj-y += irq.o platform.o prom.o reset.o setup.o |
diff --git a/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h b/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h index 227e429fe720..5710a9029f1c 100644 --- a/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h +++ b/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h | |||
| @@ -51,7 +51,9 @@ | |||
| 51 | 51 | ||
| 52 | extern unsigned long ocelot_fpga_base; | 52 | extern unsigned long ocelot_fpga_base; |
| 53 | 53 | ||
| 54 | #define OCELOT_FPGA_WRITE(x, y) writeb(x, ocelot_fpga_base + OCELOT_3_REG_##y) | 54 | #define __FPGA_REG_TO_ADDR(reg) \ |
| 55 | #define OCELOT_FPGA_READ(x) readb(ocelot_fpga_base + OCELOT_3_REG_##x) | 55 | ((void *) ocelot_fpga_base + OCELOT_3_REG_##reg) |
| 56 | #define OCELOT_FPGA_WRITE(x, reg) writeb(x, __FPGA_REG_TO_ADDR(reg)) | ||
| 57 | #define OCELOT_FPGA_READ(reg) readb(__FPGA_REG_TO_ADDR(reg)) | ||
| 56 | 58 | ||
| 57 | #endif | 59 | #endif |
diff --git a/arch/mips/momentum/ocelot_3/platform.c b/arch/mips/momentum/ocelot_3/platform.c new file mode 100644 index 000000000000..eefe5841fbb2 --- /dev/null +++ b/arch/mips/momentum/ocelot_3/platform.c | |||
| @@ -0,0 +1,235 @@ | |||
| 1 | #include <linux/delay.h> | ||
| 2 | #include <linux/if_ether.h> | ||
| 3 | #include <linux/ioport.h> | ||
| 4 | #include <linux/mv643xx.h> | ||
| 5 | #include <linux/platform_device.h> | ||
| 6 | |||
| 7 | #include "ocelot_3_fpga.h" | ||
| 8 | |||
| 9 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) | ||
| 10 | |||
| 11 | static struct resource mv643xx_eth_shared_resources[] = { | ||
| 12 | [0] = { | ||
| 13 | .name = "ethernet shared base", | ||
| 14 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | ||
| 15 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | ||
| 16 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | ||
| 17 | .flags = IORESOURCE_MEM, | ||
| 18 | }, | ||
| 19 | }; | ||
| 20 | |||
| 21 | static struct platform_device mv643xx_eth_shared_device = { | ||
| 22 | .name = MV643XX_ETH_SHARED_NAME, | ||
| 23 | .id = 0, | ||
| 24 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | ||
| 25 | .resource = mv643xx_eth_shared_resources, | ||
| 26 | }; | ||
| 27 | |||
| 28 | #define MV_SRAM_BASE 0xfe000000UL | ||
| 29 | #define MV_SRAM_SIZE (256 * 1024) | ||
| 30 | |||
| 31 | #define MV_SRAM_RXRING_SIZE (MV_SRAM_SIZE / 4) | ||
| 32 | #define MV_SRAM_TXRING_SIZE (MV_SRAM_SIZE / 4) | ||
| 33 | |||
| 34 | #define MV_SRAM_BASE_ETH0 MV_SRAM_BASE | ||
| 35 | #define MV_SRAM_BASE_ETH1 (MV_SRAM_BASE + (MV_SRAM_SIZE / 2)) | ||
| 36 | |||
| 37 | #define MV64x60_IRQ_ETH_0 48 | ||
| 38 | #define MV64x60_IRQ_ETH_1 49 | ||
| 39 | #define MV64x60_IRQ_ETH_2 50 | ||
| 40 | |||
| 41 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 42 | |||
| 43 | static struct resource mv64x60_eth0_resources[] = { | ||
| 44 | [0] = { | ||
| 45 | .name = "eth0 irq", | ||
| 46 | .start = MV64x60_IRQ_ETH_0, | ||
| 47 | .end = MV64x60_IRQ_ETH_0, | ||
| 48 | .flags = IORESOURCE_IRQ, | ||
| 49 | }, | ||
| 50 | }; | ||
| 51 | |||
| 52 | static char eth0_mac_addr[ETH_ALEN]; | ||
| 53 | |||
| 54 | static struct mv643xx_eth_platform_data eth0_pd = { | ||
| 55 | .mac_addr = eth0_mac_addr, | ||
| 56 | |||
| 57 | .tx_sram_addr = MV_SRAM_BASE_ETH0, | ||
| 58 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
| 59 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
| 60 | |||
| 61 | .rx_sram_addr = MV_SRAM_BASE_ETH0 + MV_SRAM_TXRING_SIZE, | ||
| 62 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
| 63 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
| 64 | }; | ||
| 65 | |||
| 66 | static struct platform_device eth0_device = { | ||
| 67 | .name = MV643XX_ETH_NAME, | ||
| 68 | .id = 0, | ||
| 69 | .num_resources = ARRAY_SIZE(mv64x60_eth0_resources), | ||
| 70 | .resource = mv64x60_eth0_resources, | ||
| 71 | .dev = { | ||
| 72 | .platform_data = ð0_pd, | ||
| 73 | }, | ||
| 74 | }; | ||
| 75 | #endif /* CONFIG_MV643XX_ETH_0 */ | ||
| 76 | |||
| 77 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 78 | |||
| 79 | static struct resource mv64x60_eth1_resources[] = { | ||
| 80 | [0] = { | ||
| 81 | .name = "eth1 irq", | ||
| 82 | .start = MV64x60_IRQ_ETH_1, | ||
| 83 | .end = MV64x60_IRQ_ETH_1, | ||
| 84 | .flags = IORESOURCE_IRQ, | ||
| 85 | }, | ||
| 86 | }; | ||
| 87 | |||
| 88 | static char eth1_mac_addr[ETH_ALEN]; | ||
| 89 | |||
| 90 | static struct mv643xx_eth_platform_data eth1_pd = { | ||
| 91 | .mac_addr = eth1_mac_addr, | ||
| 92 | |||
| 93 | .tx_sram_addr = MV_SRAM_BASE_ETH1, | ||
| 94 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
| 95 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
| 96 | |||
| 97 | .rx_sram_addr = MV_SRAM_BASE_ETH1 + MV_SRAM_TXRING_SIZE, | ||
| 98 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
| 99 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
| 100 | }; | ||
| 101 | |||
| 102 | static struct platform_device eth1_device = { | ||
| 103 | .name = MV643XX_ETH_NAME, | ||
| 104 | .id = 1, | ||
| 105 | .num_resources = ARRAY_SIZE(mv64x60_eth1_resources), | ||
| 106 | .resource = mv64x60_eth1_resources, | ||
| 107 | .dev = { | ||
| 108 | .platform_data = ð1_pd, | ||
| 109 | }, | ||
| 110 | }; | ||
| 111 | #endif /* CONFIG_MV643XX_ETH_1 */ | ||
| 112 | |||
| 113 | #ifdef CONFIG_MV643XX_ETH_2 | ||
| 114 | |||
| 115 | static struct resource mv64x60_eth2_resources[] = { | ||
| 116 | [0] = { | ||
| 117 | .name = "eth2 irq", | ||
| 118 | .start = MV64x60_IRQ_ETH_2, | ||
| 119 | .end = MV64x60_IRQ_ETH_2, | ||
| 120 | .flags = IORESOURCE_IRQ, | ||
| 121 | }, | ||
| 122 | }; | ||
| 123 | |||
| 124 | static char eth2_mac_addr[ETH_ALEN]; | ||
| 125 | |||
| 126 | static struct mv643xx_eth_platform_data eth2_pd = { | ||
| 127 | .mac_addr = eth2_mac_addr, | ||
| 128 | }; | ||
| 129 | |||
| 130 | static struct platform_device eth2_device = { | ||
| 131 | .name = MV643XX_ETH_NAME, | ||
| 132 | .id = 1, | ||
| 133 | .num_resources = ARRAY_SIZE(mv64x60_eth2_resources), | ||
| 134 | .resource = mv64x60_eth2_resources, | ||
| 135 | .dev = { | ||
| 136 | .platform_data = ð2_pd, | ||
| 137 | }, | ||
| 138 | }; | ||
| 139 | #endif /* CONFIG_MV643XX_ETH_2 */ | ||
| 140 | |||
| 141 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | ||
| 142 | &mv643xx_eth_shared_device, | ||
| 143 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 144 | ð0_device, | ||
| 145 | #endif | ||
| 146 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 147 | ð1_device, | ||
| 148 | #endif | ||
| 149 | #ifdef CONFIG_MV643XX_ETH_2 | ||
| 150 | ð2_device, | ||
| 151 | #endif | ||
| 152 | }; | ||
| 153 | |||
| 154 | static u8 __init exchange_bit(u8 val, u8 cs) | ||
| 155 | { | ||
| 156 | /* place the data */ | ||
| 157 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
| 158 | udelay(1); | ||
| 159 | |||
| 160 | /* turn the clock on */ | ||
| 161 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
| 162 | udelay(1); | ||
| 163 | |||
| 164 | /* turn the clock off and read-strobe */ | ||
| 165 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
| 166 | |||
| 167 | /* return the data */ | ||
| 168 | return (OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1; | ||
| 169 | } | ||
| 170 | |||
| 171 | static void __init get_mac(char dest[6]) | ||
| 172 | { | ||
| 173 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
| 174 | int i,j; | ||
| 175 | |||
| 176 | for (i = 0; i < 12; i++) | ||
| 177 | exchange_bit(read_opcode[i], 1); | ||
| 178 | |||
| 179 | for (j = 0; j < 6; j++) { | ||
| 180 | dest[j] = 0; | ||
| 181 | for (i = 0; i < 8; i++) { | ||
| 182 | dest[j] <<= 1; | ||
| 183 | dest[j] |= exchange_bit(0, 1); | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 187 | /* turn off CS */ | ||
| 188 | exchange_bit(0,0); | ||
| 189 | } | ||
| 190 | |||
| 191 | /* | ||
| 192 | * Copy and increment ethernet MAC address by a small value. | ||
| 193 | * | ||
| 194 | * This is useful for systems where the only one MAC address is stored in | ||
| 195 | * non-volatile memory for multiple ports. | ||
| 196 | */ | ||
| 197 | static inline void eth_mac_add(unsigned char *dst, unsigned char *src, | ||
| 198 | unsigned int add) | ||
| 199 | { | ||
| 200 | int i; | ||
| 201 | |||
| 202 | BUG_ON(add >= 256); | ||
| 203 | |||
| 204 | for (i = ETH_ALEN; i >= 0; i--) { | ||
| 205 | dst[i] = src[i] + add; | ||
| 206 | add = dst[i] < src[i]; /* compute carry */ | ||
| 207 | } | ||
| 208 | |||
| 209 | WARN_ON(add); | ||
| 210 | } | ||
| 211 | |||
| 212 | static int __init mv643xx_eth_add_pds(void) | ||
| 213 | { | ||
| 214 | unsigned char mac[ETH_ALEN]; | ||
| 215 | int ret; | ||
| 216 | |||
| 217 | get_mac(mac); | ||
| 218 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 219 | eth_mac_add(eth1_mac_addr, mac, 0); | ||
| 220 | #endif | ||
| 221 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 222 | eth_mac_add(eth1_mac_addr, mac, 1); | ||
| 223 | #endif | ||
| 224 | #ifdef CONFIG_MV643XX_ETH_2 | ||
| 225 | eth_mac_add(eth2_mac_addr, mac, 2); | ||
| 226 | #endif | ||
| 227 | ret = platform_add_devices(mv643xx_eth_pd_devs, | ||
| 228 | ARRAY_SIZE(mv643xx_eth_pd_devs)); | ||
| 229 | |||
| 230 | return ret; | ||
| 231 | } | ||
| 232 | |||
| 233 | device_initcall(mv643xx_eth_add_pds); | ||
| 234 | |||
| 235 | #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */ | ||
diff --git a/arch/mips/momentum/ocelot_3/prom.c b/arch/mips/momentum/ocelot_3/prom.c index 296d945bc248..6ce9b7fdb824 100644 --- a/arch/mips/momentum/ocelot_3/prom.c +++ b/arch/mips/momentum/ocelot_3/prom.c | |||
| @@ -34,64 +34,11 @@ struct callvectors* debug_vectors; | |||
| 34 | extern unsigned long marvell_base; | 34 | extern unsigned long marvell_base; |
| 35 | extern unsigned long cpu_clock; | 35 | extern unsigned long cpu_clock; |
| 36 | 36 | ||
| 37 | #ifdef CONFIG_MV643XX_ETH | ||
| 38 | extern unsigned char prom_mac_addr_base[6]; | ||
| 39 | #endif | ||
| 40 | |||
| 41 | const char *get_system_type(void) | 37 | const char *get_system_type(void) |
| 42 | { | 38 | { |
| 43 | return "Momentum Ocelot-3"; | 39 | return "Momentum Ocelot-3"; |
| 44 | } | 40 | } |
| 45 | 41 | ||
| 46 | #ifdef CONFIG_MV643XX_ETH | ||
| 47 | void burn_clocks(void) | ||
| 48 | { | ||
| 49 | int i; | ||
| 50 | |||
| 51 | /* this loop should burn at least 1us -- this should be plenty */ | ||
| 52 | for (i = 0; i < 0x10000; i++) | ||
| 53 | ; | ||
| 54 | } | ||
| 55 | |||
| 56 | u8 exchange_bit(u8 val, u8 cs) | ||
| 57 | { | ||
| 58 | /* place the data */ | ||
| 59 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
| 60 | burn_clocks(); | ||
| 61 | |||
| 62 | /* turn the clock on */ | ||
| 63 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
| 64 | burn_clocks(); | ||
| 65 | |||
| 66 | /* turn the clock off and read-strobe */ | ||
| 67 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
| 68 | |||
| 69 | /* return the data */ | ||
| 70 | return ((OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1); | ||
| 71 | } | ||
| 72 | |||
| 73 | void get_mac(char dest[6]) | ||
| 74 | { | ||
| 75 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
| 76 | int i,j; | ||
| 77 | |||
| 78 | for (i = 0; i < 12; i++) | ||
| 79 | exchange_bit(read_opcode[i], 1); | ||
| 80 | |||
| 81 | for (j = 0; j < 6; j++) { | ||
| 82 | dest[j] = 0; | ||
| 83 | for (i = 0; i < 8; i++) { | ||
| 84 | dest[j] <<= 1; | ||
| 85 | dest[j] |= exchange_bit(0, 1); | ||
| 86 | } | ||
| 87 | } | ||
| 88 | |||
| 89 | /* turn off CS */ | ||
| 90 | exchange_bit(0,0); | ||
| 91 | } | ||
| 92 | #endif | ||
| 93 | |||
| 94 | |||
| 95 | #ifdef CONFIG_64BIT | 42 | #ifdef CONFIG_64BIT |
| 96 | 43 | ||
| 97 | unsigned long signext(unsigned long addr) | 44 | unsigned long signext(unsigned long addr) |
| @@ -228,11 +175,6 @@ void __init prom_init(void) | |||
| 228 | mips_machgroup = MACH_GROUP_MOMENCO; | 175 | mips_machgroup = MACH_GROUP_MOMENCO; |
| 229 | mips_machtype = MACH_MOMENCO_OCELOT_3; | 176 | mips_machtype = MACH_MOMENCO_OCELOT_3; |
| 230 | 177 | ||
| 231 | #ifdef CONFIG_MV643XX_ETH | ||
| 232 | /* get the base MAC address for on-board ethernet ports */ | ||
| 233 | get_mac(prom_mac_addr_base); | ||
| 234 | #endif | ||
| 235 | |||
| 236 | #ifndef CONFIG_64BIT | 178 | #ifndef CONFIG_64BIT |
| 237 | debug_vectors->printf("Booting Linux kernel...\n"); | 179 | debug_vectors->printf("Booting Linux kernel...\n"); |
| 238 | #endif | 180 | #endif |
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c index 7d74f8c54129..ff0829f81116 100644 --- a/arch/mips/momentum/ocelot_3/setup.c +++ b/arch/mips/momentum/ocelot_3/setup.c | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * BRIEF MODULE DESCRIPTION | 4 | * BRIEF MODULE DESCRIPTION |
| 5 | * Momentum Computer Ocelot-3 board dependent boot routines | 5 | * Momentum Computer Ocelot-3 board dependent boot routines |
| 6 | * | 6 | * |
| 7 | * Copyright (C) 1996, 1997, 01, 05 Ralf Baechle | 7 | * Copyright (C) 1996, 1997, 01, 05 - 06 Ralf Baechle |
| 8 | * Copyright (C) 2000 RidgeRun, Inc. | 8 | * Copyright (C) 2000 RidgeRun, Inc. |
| 9 | * Copyright (C) 2001 Red Hat, Inc. | 9 | * Copyright (C) 2001 Red Hat, Inc. |
| 10 | * Copyright (C) 2002 Momentum Computer | 10 | * Copyright (C) 2002 Momentum Computer |
diff --git a/arch/mips/momentum/ocelot_c/Makefile b/arch/mips/momentum/ocelot_c/Makefile index 94802b4db472..d69161aa1675 100644 --- a/arch/mips/momentum/ocelot_c/Makefile +++ b/arch/mips/momentum/ocelot_c/Makefile | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | # Makefile for Momentum Computer's Ocelot-C and -CS boards. | 2 | # Makefile for Momentum Computer's Ocelot-C and -CS boards. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += cpci-irq.o irq.o prom.o reset.o \ | 5 | obj-y += cpci-irq.o irq.o platform.o prom.o reset.o \ |
| 6 | setup.o uart-irq.o | 6 | setup.o uart-irq.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_KGDB) += dbg_io.o | 8 | obj-$(CONFIG_KGDB) += dbg_io.o |
diff --git a/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h b/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h index 7228cd19e5ea..f0f5581dcb50 100644 --- a/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h +++ b/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h | |||
| @@ -53,7 +53,9 @@ | |||
| 53 | #define OCELOT_C_REG_INTSET 0xe | 53 | #define OCELOT_C_REG_INTSET 0xe |
| 54 | #define OCELOT_C_REG_INTCLR 0xf | 54 | #define OCELOT_C_REG_INTCLR 0xf |
| 55 | 55 | ||
| 56 | #define OCELOT_FPGA_WRITE(x, y) writeb(x, OCELOT_C_CS0_ADDR + OCELOT_C_REG_##y) | 56 | #define __FPGA_REG_TO_ADDR(reg) \ |
| 57 | #define OCELOT_FPGA_READ(x) readb(OCELOT_C_CS0_ADDR + OCELOT_C_REG_##x) | 57 | ((void *) OCELOT_C_CS0_ADDR + OCELOT_C_REG_##reg) |
| 58 | #define OCELOT_FPGA_WRITE(x, reg) writeb(x, __FPGA_REG_TO_ADDR(reg)) | ||
| 59 | #define OCELOT_FPGA_READ(reg) readb(__FPGA_REG_TO_ADDR(reg)) | ||
| 58 | 60 | ||
| 59 | #endif | 61 | #endif |
diff --git a/arch/mips/momentum/ocelot_c/platform.c b/arch/mips/momentum/ocelot_c/platform.c new file mode 100644 index 000000000000..6c495b2f1560 --- /dev/null +++ b/arch/mips/momentum/ocelot_c/platform.c | |||
| @@ -0,0 +1,201 @@ | |||
| 1 | #include <linux/delay.h> | ||
| 2 | #include <linux/if_ether.h> | ||
| 3 | #include <linux/ioport.h> | ||
| 4 | #include <linux/mv643xx.h> | ||
| 5 | #include <linux/platform_device.h> | ||
| 6 | |||
| 7 | #include "ocelot_c_fpga.h" | ||
| 8 | |||
| 9 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) | ||
| 10 | |||
| 11 | static struct resource mv643xx_eth_shared_resources[] = { | ||
| 12 | [0] = { | ||
| 13 | .name = "ethernet shared base", | ||
| 14 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | ||
| 15 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | ||
| 16 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | ||
| 17 | .flags = IORESOURCE_MEM, | ||
| 18 | }, | ||
| 19 | }; | ||
| 20 | |||
| 21 | static struct platform_device mv643xx_eth_shared_device = { | ||
| 22 | .name = MV643XX_ETH_SHARED_NAME, | ||
| 23 | .id = 0, | ||
| 24 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | ||
| 25 | .resource = mv643xx_eth_shared_resources, | ||
| 26 | }; | ||
| 27 | |||
| 28 | #define MV_SRAM_BASE 0xfe000000UL | ||
| 29 | #define MV_SRAM_SIZE (256 * 1024) | ||
| 30 | |||
| 31 | #define MV_SRAM_RXRING_SIZE (MV_SRAM_SIZE / 4) | ||
| 32 | #define MV_SRAM_TXRING_SIZE (MV_SRAM_SIZE / 4) | ||
| 33 | |||
| 34 | #define MV_SRAM_BASE_ETH0 MV_SRAM_BASE | ||
| 35 | #define MV_SRAM_BASE_ETH1 (MV_SRAM_BASE + (MV_SRAM_SIZE / 2)) | ||
| 36 | |||
| 37 | #define MV64x60_IRQ_ETH_0 48 | ||
| 38 | #define MV64x60_IRQ_ETH_1 49 | ||
| 39 | |||
| 40 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 41 | |||
| 42 | static struct resource mv64x60_eth0_resources[] = { | ||
| 43 | [0] = { | ||
| 44 | .name = "eth0 irq", | ||
| 45 | .start = MV64x60_IRQ_ETH_0, | ||
| 46 | .end = MV64x60_IRQ_ETH_0, | ||
| 47 | .flags = IORESOURCE_IRQ, | ||
| 48 | }, | ||
| 49 | }; | ||
| 50 | |||
| 51 | static char eth0_mac_addr[ETH_ALEN]; | ||
| 52 | |||
| 53 | static struct mv643xx_eth_platform_data eth0_pd = { | ||
| 54 | .mac_addr = eth0_mac_addr, | ||
| 55 | |||
| 56 | .tx_sram_addr = MV_SRAM_BASE_ETH0, | ||
| 57 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
| 58 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
| 59 | |||
| 60 | .rx_sram_addr = MV_SRAM_BASE_ETH0 + MV_SRAM_TXRING_SIZE, | ||
| 61 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
| 62 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
| 63 | }; | ||
| 64 | |||
| 65 | static struct platform_device eth0_device = { | ||
| 66 | .name = MV643XX_ETH_NAME, | ||
| 67 | .id = 0, | ||
| 68 | .num_resources = ARRAY_SIZE(mv64x60_eth0_resources), | ||
| 69 | .resource = mv64x60_eth0_resources, | ||
| 70 | .dev = { | ||
| 71 | .platform_data = ð0_pd, | ||
| 72 | }, | ||
| 73 | }; | ||
| 74 | #endif /* CONFIG_MV643XX_ETH_0 */ | ||
| 75 | |||
| 76 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 77 | |||
| 78 | static struct resource mv64x60_eth1_resources[] = { | ||
| 79 | [0] = { | ||
| 80 | .name = "eth1 irq", | ||
| 81 | .start = MV64x60_IRQ_ETH_1, | ||
| 82 | .end = MV64x60_IRQ_ETH_1, | ||
| 83 | .flags = IORESOURCE_IRQ, | ||
| 84 | }, | ||
| 85 | }; | ||
| 86 | |||
| 87 | static char eth1_mac_addr[ETH_ALEN]; | ||
| 88 | |||
| 89 | static struct mv643xx_eth_platform_data eth1_pd = { | ||
| 90 | .mac_addr = eth1_mac_addr, | ||
| 91 | |||
| 92 | .tx_sram_addr = MV_SRAM_BASE_ETH1, | ||
| 93 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
| 94 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
| 95 | |||
| 96 | .rx_sram_addr = MV_SRAM_BASE_ETH1 + MV_SRAM_TXRING_SIZE, | ||
| 97 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
| 98 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
| 99 | }; | ||
| 100 | |||
| 101 | static struct platform_device eth1_device = { | ||
| 102 | .name = MV643XX_ETH_NAME, | ||
| 103 | .id = 1, | ||
| 104 | .num_resources = ARRAY_SIZE(mv64x60_eth1_resources), | ||
| 105 | .resource = mv64x60_eth1_resources, | ||
| 106 | .dev = { | ||
| 107 | .platform_data = ð1_pd, | ||
| 108 | }, | ||
| 109 | }; | ||
| 110 | #endif /* CONFIG_MV643XX_ETH_1 */ | ||
| 111 | |||
| 112 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | ||
| 113 | &mv643xx_eth_shared_device, | ||
| 114 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 115 | ð0_device, | ||
| 116 | #endif | ||
| 117 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 118 | ð1_device, | ||
| 119 | #endif | ||
| 120 | /* The third port is not wired up on the Ocelot C */ | ||
| 121 | }; | ||
| 122 | |||
| 123 | static u8 __init exchange_bit(u8 val, u8 cs) | ||
| 124 | { | ||
| 125 | /* place the data */ | ||
| 126 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
| 127 | udelay(1); | ||
| 128 | |||
| 129 | /* turn the clock on */ | ||
| 130 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
| 131 | udelay(1); | ||
| 132 | |||
| 133 | /* turn the clock off and read-strobe */ | ||
| 134 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
| 135 | |||
| 136 | /* return the data */ | ||
| 137 | return (OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1; | ||
| 138 | } | ||
| 139 | |||
| 140 | static void __init get_mac(char dest[6]) | ||
| 141 | { | ||
| 142 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
| 143 | int i,j; | ||
| 144 | |||
| 145 | for (i = 0; i < 12; i++) | ||
| 146 | exchange_bit(read_opcode[i], 1); | ||
| 147 | |||
| 148 | for (j = 0; j < 6; j++) { | ||
| 149 | dest[j] = 0; | ||
| 150 | for (i = 0; i < 8; i++) { | ||
| 151 | dest[j] <<= 1; | ||
| 152 | dest[j] |= exchange_bit(0, 1); | ||
| 153 | } | ||
| 154 | } | ||
| 155 | |||
| 156 | /* turn off CS */ | ||
| 157 | exchange_bit(0,0); | ||
| 158 | } | ||
| 159 | |||
| 160 | /* | ||
| 161 | * Copy and increment ethernet MAC address by a small value. | ||
| 162 | * | ||
| 163 | * This is useful for systems where the only one MAC address is stored in | ||
| 164 | * non-volatile memory for multiple ports. | ||
| 165 | */ | ||
| 166 | static inline void eth_mac_add(unsigned char *dst, unsigned char *src, | ||
| 167 | unsigned int add) | ||
| 168 | { | ||
| 169 | int i; | ||
| 170 | |||
| 171 | BUG_ON(add >= 256); | ||
| 172 | |||
| 173 | for (i = ETH_ALEN; i >= 0; i--) { | ||
| 174 | dst[i] = src[i] + add; | ||
| 175 | add = dst[i] < src[i]; /* compute carry */ | ||
| 176 | } | ||
| 177 | |||
| 178 | WARN_ON(add); | ||
| 179 | } | ||
| 180 | |||
| 181 | static int __init mv643xx_eth_add_pds(void) | ||
| 182 | { | ||
| 183 | unsigned char mac[ETH_ALEN]; | ||
| 184 | int ret; | ||
| 185 | |||
| 186 | get_mac(mac); | ||
| 187 | #ifdef CONFIG_MV643XX_ETH_0 | ||
| 188 | eth_mac_add(eth1_mac_addr, mac, 0); | ||
| 189 | #endif | ||
| 190 | #ifdef CONFIG_MV643XX_ETH_1 | ||
| 191 | eth_mac_add(eth1_mac_addr, mac, 1); | ||
| 192 | #endif | ||
| 193 | ret = platform_add_devices(mv643xx_eth_pd_devs, | ||
| 194 | ARRAY_SIZE(mv643xx_eth_pd_devs)); | ||
| 195 | |||
| 196 | return ret; | ||
| 197 | } | ||
| 198 | |||
| 199 | device_initcall(mv643xx_eth_add_pds); | ||
| 200 | |||
| 201 | #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */ | ||
diff --git a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c index 4c50a147f429..d0b77e101d74 100644 --- a/arch/mips/momentum/ocelot_c/prom.c +++ b/arch/mips/momentum/ocelot_c/prom.c | |||
| @@ -29,11 +29,7 @@ | |||
| 29 | struct callvectors* debug_vectors; | 29 | struct callvectors* debug_vectors; |
| 30 | 30 | ||
| 31 | extern unsigned long marvell_base; | 31 | extern unsigned long marvell_base; |
| 32 | extern unsigned long cpu_clock; | 32 | extern unsigned int cpu_clock; |
| 33 | |||
| 34 | #ifdef CONFIG_MV643XX_ETH | ||
| 35 | extern unsigned char prom_mac_addr_base[6]; | ||
| 36 | #endif | ||
| 37 | 33 | ||
| 38 | const char *get_system_type(void) | 34 | const char *get_system_type(void) |
| 39 | { | 35 | { |
| @@ -44,55 +40,6 @@ const char *get_system_type(void) | |||
| 44 | #endif | 40 | #endif |
| 45 | } | 41 | } |
| 46 | 42 | ||
| 47 | #ifdef CONFIG_MV643XX_ETH | ||
| 48 | static void burn_clocks(void) | ||
| 49 | { | ||
| 50 | int i; | ||
| 51 | |||
| 52 | /* this loop should burn at least 1us -- this should be plenty */ | ||
| 53 | for (i = 0; i < 0x10000; i++) | ||
| 54 | ; | ||
| 55 | } | ||
| 56 | |||
| 57 | static u8 exchange_bit(u8 val, u8 cs) | ||
| 58 | { | ||
| 59 | /* place the data */ | ||
| 60 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
| 61 | burn_clocks(); | ||
| 62 | |||
| 63 | /* turn the clock on */ | ||
| 64 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
| 65 | burn_clocks(); | ||
| 66 | |||
| 67 | /* turn the clock off and read-strobe */ | ||
| 68 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
| 69 | |||
| 70 | /* return the data */ | ||
| 71 | return ((OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1); | ||
| 72 | } | ||
| 73 | |||
| 74 | void get_mac(char dest[6]) | ||
| 75 | { | ||
| 76 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
| 77 | int i,j; | ||
| 78 | |||
| 79 | for (i = 0; i < 12; i++) | ||
| 80 | exchange_bit(read_opcode[i], 1); | ||
| 81 | |||
| 82 | for (j = 0; j < 6; j++) { | ||
| 83 | dest[j] = 0; | ||
| 84 | for (i = 0; i < 8; i++) { | ||
| 85 | dest[j] <<= 1; | ||
| 86 | dest[j] |= exchange_bit(0, 1); | ||
| 87 | } | ||
| 88 | } | ||
| 89 | |||
| 90 | /* turn off CS */ | ||
| 91 | exchange_bit(0,0); | ||
| 92 | } | ||
| 93 | #endif | ||
| 94 | |||
| 95 | |||
| 96 | #ifdef CONFIG_64BIT | 43 | #ifdef CONFIG_64BIT |
| 97 | 44 | ||
| 98 | unsigned long signext(unsigned long addr) | 45 | unsigned long signext(unsigned long addr) |
| @@ -226,11 +173,6 @@ void __init prom_init(void) | |||
| 226 | mips_machgroup = MACH_GROUP_MOMENCO; | 173 | mips_machgroup = MACH_GROUP_MOMENCO; |
| 227 | mips_machtype = MACH_MOMENCO_OCELOT_C; | 174 | mips_machtype = MACH_MOMENCO_OCELOT_C; |
| 228 | 175 | ||
| 229 | #ifdef CONFIG_MV643XX_ETH | ||
| 230 | /* get the base MAC address for on-board ethernet ports */ | ||
| 231 | get_mac(prom_mac_addr_base); | ||
| 232 | #endif | ||
| 233 | |||
| 234 | #ifndef CONFIG_64BIT | 176 | #ifndef CONFIG_64BIT |
| 235 | debug_vectors->printf("Booting Linux kernel...\n"); | 177 | debug_vectors->printf("Booting Linux kernel...\n"); |
| 236 | #endif | 178 | #endif |
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c index 9c0c462af650..0b6b2338cfb4 100644 --- a/arch/mips/momentum/ocelot_c/setup.c +++ b/arch/mips/momentum/ocelot_c/setup.c | |||
| @@ -69,8 +69,7 @@ | |||
| 69 | #include "ocelot_c_fpga.h" | 69 | #include "ocelot_c_fpga.h" |
| 70 | 70 | ||
| 71 | unsigned long marvell_base; | 71 | unsigned long marvell_base; |
| 72 | extern unsigned long mv64340_sram_base; | 72 | unsigned int cpu_clock; |
| 73 | unsigned long cpu_clock; | ||
| 74 | 73 | ||
| 75 | /* These functions are used for rebooting or halting the machine*/ | 74 | /* These functions are used for rebooting or halting the machine*/ |
| 76 | extern void momenco_ocelot_restart(char *command); | 75 | extern void momenco_ocelot_restart(char *command); |
| @@ -119,7 +118,6 @@ void PMON_v2_setup(void) | |||
| 119 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); | 118 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); |
| 120 | 119 | ||
| 121 | marvell_base = 0xfffffffff4000000; | 120 | marvell_base = 0xfffffffff4000000; |
| 122 | mv64340_sram_base = 0xfffffffffe000000; | ||
| 123 | #else | 121 | #else |
| 124 | /* marvell and extra space */ | 122 | /* marvell and extra space */ |
| 125 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); | 123 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); |
| @@ -129,7 +127,6 @@ void PMON_v2_setup(void) | |||
| 129 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); | 127 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); |
| 130 | 128 | ||
| 131 | marvell_base = 0xf4000000; | 129 | marvell_base = 0xf4000000; |
| 132 | mv64340_sram_base = 0xfe000000; | ||
| 133 | #endif | 130 | #endif |
| 134 | } | 131 | } |
| 135 | 132 | ||
| @@ -346,22 +343,20 @@ void __init plat_mem_setup(void) | |||
| 346 | } | 343 | } |
| 347 | } | 344 | } |
| 348 | 345 | ||
| 349 | #ifndef CONFIG_64BIT | 346 | /* |
| 350 | /* This needs to be one of the first initcalls, because no I/O port access | 347 | * This needs to be one of the first initcalls, because no I/O port access |
| 351 | can work before this */ | 348 | * can work before this |
| 349 | */ | ||
| 352 | static int io_base_ioremap(void) | 350 | static int io_base_ioremap(void) |
| 353 | { | 351 | { |
| 354 | /* we're mapping PCI accesses from 0xc0000000 to 0xf0000000 */ | 352 | void __iomem * io_remap_range = ioremap(0xc0000000UL, 0x10000); |
| 355 | void *io_remap_range = ioremap(0xc0000000, 0x30000000); | ||
| 356 | 353 | ||
| 357 | if (!io_remap_range) { | 354 | if (!io_remap_range) |
| 358 | panic("Could not ioremap I/O port range"); | 355 | panic("Could not ioremap I/O port range"); |
| 359 | } | 356 | |
| 360 | printk("io_remap_range set at 0x%08x\n", (uint32_t)io_remap_range); | 357 | set_io_port_base((unsigned long) io_remap_range); |
| 361 | set_io_port_base(io_remap_range - 0xc0000000); | ||
| 362 | 358 | ||
| 363 | return 0; | 359 | return 0; |
| 364 | } | 360 | } |
| 365 | 361 | ||
| 366 | module_init(io_base_ioremap); | 362 | module_init(io_base_ioremap); |
| 367 | #endif | ||
diff --git a/arch/mips/momentum/ocelot_g/gt-irq.c b/arch/mips/momentum/ocelot_g/gt-irq.c index 7b5cc6648f7e..e5576bd50fa9 100644 --- a/arch/mips/momentum/ocelot_g/gt-irq.c +++ b/arch/mips/momentum/ocelot_g/gt-irq.c | |||
| @@ -27,7 +27,7 @@ unsigned long bus_clock; | |||
| 27 | * be handled and ack'ed differently than other MIPS interrupts. | 27 | * be handled and ack'ed differently than other MIPS interrupts. |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #if CURRENTLY_UNUSED | 30 | #if 0 |
| 31 | 31 | ||
| 32 | struct tq_struct irq_handlers[MAX_CAUSE_REGS][MAX_CAUSE_REG_WIDTH]; | 32 | struct tq_struct irq_handlers[MAX_CAUSE_REGS][MAX_CAUSE_REG_WIDTH]; |
| 33 | void hook_irq_handler(int int_cause, int bit_num, void *isr_ptr); | 33 | void hook_irq_handler(int int_cause, int bit_num, void *isr_ptr); |
| @@ -95,7 +95,7 @@ int disable_galileo_irq(int int_cause, int bit_num) | |||
| 95 | return 0; | 95 | return 0; |
| 96 | return 1; | 96 | return 1; |
| 97 | } | 97 | } |
| 98 | #endif /* UNUSED */ | 98 | #endif /* 0 */ |
| 99 | 99 | ||
| 100 | /* | 100 | /* |
| 101 | * Interrupt handler for interrupts coming from the Galileo chip via P0_INT#. | 101 | * Interrupt handler for interrupts coming from the Galileo chip via P0_INT#. |
| @@ -196,7 +196,7 @@ void gt64240_time_init(void) | |||
| 196 | 196 | ||
| 197 | void gt64240_irq_init(void) | 197 | void gt64240_irq_init(void) |
| 198 | { | 198 | { |
| 199 | #if CURRENTLY_UNUSED | 199 | #if 0 |
| 200 | int i, j; | 200 | int i, j; |
| 201 | 201 | ||
| 202 | /* Reset irq handlers pointers to NULL */ | 202 | /* Reset irq handlers pointers to NULL */ |
| @@ -208,5 +208,5 @@ void gt64240_irq_init(void) | |||
| 208 | irq_handlers[i][j].data = NULL; | 208 | irq_handlers[i][j].data = NULL; |
| 209 | } | 209 | } |
| 210 | } | 210 | } |
| 211 | #endif | 211 | #endif /* 0 */ |
| 212 | } | 212 | } |
diff --git a/arch/mips/momentum/ocelot_g/ocelot_pld.h b/arch/mips/momentum/ocelot_g/ocelot_pld.h index fcb8275e219d..95e0534026d0 100644 --- a/arch/mips/momentum/ocelot_g/ocelot_pld.h +++ b/arch/mips/momentum/ocelot_g/ocelot_pld.h | |||
| @@ -23,8 +23,8 @@ | |||
| 23 | #define OCELOT_REG_INTSET (12) | 23 | #define OCELOT_REG_INTSET (12) |
| 24 | #define OCELOT_REG_INTCLR (13) | 24 | #define OCELOT_REG_INTCLR (13) |
| 25 | 25 | ||
| 26 | #define OCELOT_PLD_WRITE(x, y) writeb(x, OCELOT_CS0_ADDR + OCELOT_REG_##y) | 26 | #define __PLD_REG_TO_ADDR(reg) ((void *) OCELOT_CS0_ADDR + OCELOT_REG_##reg) |
| 27 | #define OCELOT_PLD_READ(x) readb(OCELOT_CS0_ADDR + OCELOT_REG_##x) | 27 | #define OCELOT_PLD_WRITE(x, reg) writeb(x, __PLD_REG_TO_ADDR(reg)) |
| 28 | 28 | #define OCELOT_PLD_READ(reg) readb(__PLD_REG_TO_ADDR(reg)) | |
| 29 | 29 | ||
| 30 | #endif /* __MOMENCO_OCELOT_PLD_H__ */ | 30 | #endif /* __MOMENCO_OCELOT_PLD_H__ */ |
diff --git a/arch/mips/momentum/ocelot_g/setup.c b/arch/mips/momentum/ocelot_g/setup.c index 56ec47039c16..d288f7b01842 100644 --- a/arch/mips/momentum/ocelot_g/setup.c +++ b/arch/mips/momentum/ocelot_g/setup.c | |||
| @@ -57,6 +57,7 @@ | |||
| 57 | #include <asm/gt64240.h> | 57 | #include <asm/gt64240.h> |
| 58 | #include <asm/irq.h> | 58 | #include <asm/irq.h> |
| 59 | #include <asm/pci.h> | 59 | #include <asm/pci.h> |
| 60 | #include <asm/pgtable.h> | ||
| 60 | #include <asm/processor.h> | 61 | #include <asm/processor.h> |
| 61 | #include <asm/reboot.h> | 62 | #include <asm/reboot.h> |
| 62 | #include <linux/bootmem.h> | 63 | #include <linux/bootmem.h> |
| @@ -160,6 +161,10 @@ static void __init setup_l3cache(unsigned long size) | |||
| 160 | printk("Done\n"); | 161 | printk("Done\n"); |
| 161 | } | 162 | } |
| 162 | 163 | ||
| 164 | void __init plat_timer_setup(struct irqaction *irq) | ||
| 165 | { | ||
| 166 | } | ||
| 167 | |||
| 163 | void __init plat_mem_setup(void) | 168 | void __init plat_mem_setup(void) |
| 164 | { | 169 | { |
| 165 | void (*l3func)(unsigned long) = (void *) KSEG1ADDR(setup_l3cache); | 170 | void (*l3func)(unsigned long) = (void *) KSEG1ADDR(setup_l3cache); |
diff --git a/arch/mips/oprofile/op_impl.h b/arch/mips/oprofile/op_impl.h index 354e54496406..fa6b4aae7523 100644 --- a/arch/mips/oprofile/op_impl.h +++ b/arch/mips/oprofile/op_impl.h | |||
| @@ -10,8 +10,6 @@ | |||
| 10 | #ifndef OP_IMPL_H | 10 | #ifndef OP_IMPL_H |
| 11 | #define OP_IMPL_H 1 | 11 | #define OP_IMPL_H 1 |
| 12 | 12 | ||
| 13 | struct pt_regs; | ||
| 14 | |||
| 15 | extern int null_perf_irq(void); | 13 | extern int null_perf_irq(void); |
| 16 | extern int (*perf_irq)(void); | 14 | extern int (*perf_irq)(void); |
| 17 | 15 | ||
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c index dd0aec9c3ce1..1fb240c57bac 100644 --- a/arch/mips/oprofile/op_model_mipsxx.c +++ b/arch/mips/oprofile/op_model_mipsxx.c | |||
| @@ -31,16 +31,18 @@ | |||
| 31 | #define M_COUNTER_OVERFLOW (1UL << 31) | 31 | #define M_COUNTER_OVERFLOW (1UL << 31) |
| 32 | 32 | ||
| 33 | #ifdef CONFIG_MIPS_MT_SMP | 33 | #ifdef CONFIG_MIPS_MT_SMP |
| 34 | #define WHAT (M_TC_EN_VPE | M_PERFCTL_VPEID(smp_processor_id())) | 34 | #define WHAT (M_TC_EN_VPE | M_PERFCTL_VPEID(smp_processor_id())) |
| 35 | #define vpe_id() smp_processor_id() | ||
| 35 | #else | 36 | #else |
| 36 | #define WHAT 0 | 37 | #define WHAT 0 |
| 38 | #define vpe_id() smp_processor_id() | ||
| 37 | #endif | 39 | #endif |
| 38 | 40 | ||
| 39 | #define __define_perf_accessors(r, n, np) \ | 41 | #define __define_perf_accessors(r, n, np) \ |
| 40 | \ | 42 | \ |
| 41 | static inline unsigned int r_c0_ ## r ## n(void) \ | 43 | static inline unsigned int r_c0_ ## r ## n(void) \ |
| 42 | { \ | 44 | { \ |
| 43 | unsigned int cpu = smp_processor_id(); \ | 45 | unsigned int cpu = vpe_id(); \ |
| 44 | \ | 46 | \ |
| 45 | switch (cpu) { \ | 47 | switch (cpu) { \ |
| 46 | case 0: \ | 48 | case 0: \ |
| @@ -55,7 +57,7 @@ static inline unsigned int r_c0_ ## r ## n(void) \ | |||
| 55 | \ | 57 | \ |
| 56 | static inline void w_c0_ ## r ## n(unsigned int value) \ | 58 | static inline void w_c0_ ## r ## n(unsigned int value) \ |
| 57 | { \ | 59 | { \ |
| 58 | unsigned int cpu = smp_processor_id(); \ | 60 | unsigned int cpu = vpe_id(); \ |
| 59 | \ | 61 | \ |
| 60 | switch (cpu) { \ | 62 | switch (cpu) { \ |
| 61 | case 0: \ | 63 | case 0: \ |
| @@ -218,7 +220,7 @@ static inline int n_counters(void) | |||
| 218 | { | 220 | { |
| 219 | int counters = __n_counters(); | 221 | int counters = __n_counters(); |
| 220 | 222 | ||
| 221 | #ifndef CONFIG_SMP | 223 | #ifdef CONFIG_MIPS_MT_SMP |
| 222 | if (current_cpu_data.cputype == CPU_34K) | 224 | if (current_cpu_data.cputype == CPU_34K) |
| 223 | return counters >> 1; | 225 | return counters >> 1; |
| 224 | #endif | 226 | #endif |
diff --git a/arch/mips/oprofile/op_model_rm9000.c b/arch/mips/oprofile/op_model_rm9000.c index b7063fefa65b..7dc9bf6f1321 100644 --- a/arch/mips/oprofile/op_model_rm9000.c +++ b/arch/mips/oprofile/op_model_rm9000.c | |||
| @@ -80,8 +80,7 @@ static void rm9000_cpu_stop(void *args) | |||
| 80 | write_c0_perfcontrol(0); | 80 | write_c0_perfcontrol(0); |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | static irqreturn_t rm9000_perfcount_handler(int irq, void * dev_id, | 83 | static irqreturn_t rm9000_perfcount_handler(int irq, void * dev_id) |
| 84 | struct pt_regs *regs) | ||
| 85 | { | 84 | { |
| 86 | unsigned int control = read_c0_perfcontrol(); | 85 | unsigned int control = read_c0_perfcontrol(); |
| 87 | uint32_t counter1, counter2; | 86 | uint32_t counter1, counter2; |
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index 3cf0dd4ba548..70cb55b89df6 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
| @@ -26,7 +26,7 @@ obj-$(CONFIG_DDB5477) += fixup-ddb5477.o pci-ddb5477.o ops-ddb5477.o | |||
| 26 | obj-$(CONFIG_LASAT) += pci-lasat.o | 26 | obj-$(CONFIG_LASAT) += pci-lasat.o |
| 27 | obj-$(CONFIG_MIPS_ATLAS) += fixup-atlas.o | 27 | obj-$(CONFIG_MIPS_ATLAS) += fixup-atlas.o |
| 28 | obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o | 28 | obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o |
| 29 | obj-$(CONFIG_MIPS_EV64120) += fixup-ev64120.o | 29 | obj-$(CONFIG_MIPS_EV64120) += pci-ev64120.o |
| 30 | obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o | 30 | obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o |
| 31 | obj-$(CONFIG_SOC_AU1550) += fixup-au1000.o ops-au1000.o | 31 | obj-$(CONFIG_SOC_AU1550) += fixup-au1000.o ops-au1000.o |
| 32 | obj-$(CONFIG_SOC_PNX8550) += fixup-pnx8550.o ops-pnx8550.o | 32 | obj-$(CONFIG_SOC_PNX8550) += fixup-pnx8550.o ops-pnx8550.o |
diff --git a/arch/mips/pci/fixup-ev64120.c b/arch/mips/pci/fixup-ev64120.c deleted file mode 100644 index 8dbb90d63f0a..000000000000 --- a/arch/mips/pci/fixup-ev64120.c +++ /dev/null | |||
| @@ -1,34 +0,0 @@ | |||
| 1 | #include <linux/pci.h> | ||
| 2 | #include <linux/init.h> | ||
| 3 | |||
| 4 | int pci_range_ck(unsigned char bus, unsigned char dev) | ||
| 5 | { | ||
| 6 | if (((bus == 0) || (bus == 1)) && (dev >= 6) && (dev <= 8)) | ||
| 7 | return 0; | ||
| 8 | |||
| 9 | return -1; | ||
| 10 | } | ||
| 11 | |||
| 12 | /* | ||
| 13 | * After detecting all agents over the PCI , this function is called | ||
| 14 | * in order to give an interrupt number for each PCI device starting | ||
| 15 | * from IRQ 20. It does also enables master for each device. | ||
| 16 | */ | ||
| 17 | void __devinit pcibios_fixup_bus(struct pci_bus *bus) | ||
| 18 | { | ||
| 19 | unsigned int irq = 20; | ||
| 20 | struct pci_bus *current_bus = bus; | ||
| 21 | struct pci_dev *dev; | ||
| 22 | struct list_head *devices_link; | ||
| 23 | |||
| 24 | list_for_each(devices_link, &(current_bus->devices)) { | ||
| 25 | dev = pci_dev_b(devices_link); | ||
| 26 | if (dev != NULL) { | ||
| 27 | dev->irq = irq++; | ||
| 28 | |||
| 29 | /* Assign an interrupt number for the device */ | ||
| 30 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); | ||
| 31 | pcibios_set_master(dev); | ||
| 32 | } | ||
| 33 | } | ||
| 34 | } | ||
diff --git a/arch/mips/pci/pci-ev64120.c b/arch/mips/pci/pci-ev64120.c new file mode 100644 index 000000000000..9cd859ef1842 --- /dev/null +++ b/arch/mips/pci/pci-ev64120.c | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | #include <linux/pci.h> | ||
| 2 | |||
| 3 | int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
| 4 | { | ||
| 5 | int irq; | ||
| 6 | |||
| 7 | if (!pin) | ||
| 8 | return 0; | ||
| 9 | |||
| 10 | irq = allocate_irqno(); | ||
| 11 | if (irq < 0) | ||
| 12 | return 0; | ||
| 13 | |||
| 14 | return irq; | ||
| 15 | } | ||
| 16 | |||
| 17 | /* Do platform specific device initialization at pci_enable_device() time */ | ||
| 18 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
| 19 | { | ||
| 20 | return 0; | ||
| 21 | } | ||
diff --git a/arch/mips/philips/pnx8550/common/time.c b/arch/mips/philips/pnx8550/common/time.c index 0af655b1f330..65c440e8480b 100644 --- a/arch/mips/philips/pnx8550/common/time.c +++ b/arch/mips/philips/pnx8550/common/time.c | |||
| @@ -41,8 +41,8 @@ extern unsigned int mips_hpt_frequency; | |||
| 41 | * 1) board_time_init() - | 41 | * 1) board_time_init() - |
| 42 | * a) (optional) set up RTC routines, | 42 | * a) (optional) set up RTC routines, |
| 43 | * b) (optional) calibrate and set the mips_hpt_frequency | 43 | * b) (optional) calibrate and set the mips_hpt_frequency |
| 44 | * (only needed if you intended to use fixed_rate_gettimeoffset | 44 | * (only needed if you intended to use cpu counter as timer interrupt |
| 45 | * or use cpu counter as timer interrupt source) | 45 | * source) |
| 46 | */ | 46 | */ |
| 47 | 47 | ||
| 48 | void pnx8550_time_init(void) | 48 | void pnx8550_time_init(void) |
diff --git a/arch/mips/pmc-sierra/yosemite/i2c-yosemite.c b/arch/mips/pmc-sierra/yosemite/i2c-yosemite.c index 416da22b3bf4..85b14c73c226 100644 --- a/arch/mips/pmc-sierra/yosemite/i2c-yosemite.c +++ b/arch/mips/pmc-sierra/yosemite/i2c-yosemite.c | |||
| @@ -74,7 +74,7 @@ static int titan_i2c_poll(void) | |||
| 74 | int titan_i2c_xfer(unsigned int slave_addr, titan_i2c_command * cmd, | 74 | int titan_i2c_xfer(unsigned int slave_addr, titan_i2c_command * cmd, |
| 75 | int size, unsigned int *addr) | 75 | int size, unsigned int *addr) |
| 76 | { | 76 | { |
| 77 | int loop = 0, bytes, i; | 77 | int loop, bytes = 0, i; |
| 78 | unsigned int *write_data, data, *read_data; | 78 | unsigned int *write_data, data, *read_data; |
| 79 | unsigned long reg_val, val; | 79 | unsigned long reg_val, val; |
| 80 | 80 | ||
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c index 65fa3a23ea5e..3cc0436db6cf 100644 --- a/arch/mips/pmc-sierra/yosemite/smp.c +++ b/arch/mips/pmc-sierra/yosemite/smp.c | |||
| @@ -3,9 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <asm/pmon.h> | 4 | #include <asm/pmon.h> |
| 5 | #include <asm/titan_dep.h> | 5 | #include <asm/titan_dep.h> |
| 6 | 6 | #include <asm/time.h> | |
| 7 | extern unsigned int (*mips_hpt_read)(void); | ||
| 8 | extern void (*mips_hpt_init)(unsigned int); | ||
| 9 | 7 | ||
| 10 | #define LAUNCHSTACK_SIZE 256 | 8 | #define LAUNCHSTACK_SIZE 256 |
| 11 | 9 | ||
| @@ -101,7 +99,7 @@ void prom_cpus_done(void) | |||
| 101 | */ | 99 | */ |
| 102 | void prom_init_secondary(void) | 100 | void prom_init_secondary(void) |
| 103 | { | 101 | { |
| 104 | mips_hpt_init(mips_hpt_read()); | 102 | mips_hpt_init(); |
| 105 | 103 | ||
| 106 | set_c0_status(ST0_CO | ST0_IE | ST0_IM); | 104 | set_c0_status(ST0_CO | ST0_IE | ST0_IM); |
| 107 | } | 105 | } |
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c index f01ba1f90770..270ecd3e6b4a 100644 --- a/arch/mips/sgi-ip27/ip27-irq.c +++ b/arch/mips/sgi-ip27/ip27-irq.c | |||
| @@ -354,29 +354,6 @@ static struct irq_chip bridge_irq_type = { | |||
| 354 | .end = end_bridge_irq, | 354 | .end = end_bridge_irq, |
| 355 | }; | 355 | }; |
| 356 | 356 | ||
| 357 | static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; | ||
| 358 | |||
| 359 | int allocate_irqno(void) | ||
| 360 | { | ||
| 361 | int irq; | ||
| 362 | |||
| 363 | again: | ||
| 364 | irq = find_first_zero_bit(irq_map, NR_IRQS); | ||
| 365 | |||
| 366 | if (irq >= NR_IRQS) | ||
| 367 | return -ENOSPC; | ||
| 368 | |||
| 369 | if (test_and_set_bit(irq, irq_map)) | ||
| 370 | goto again; | ||
| 371 | |||
| 372 | return irq; | ||
| 373 | } | ||
| 374 | |||
| 375 | void free_irqno(unsigned int irq) | ||
| 376 | { | ||
| 377 | clear_bit(irq, irq_map); | ||
| 378 | } | ||
| 379 | |||
| 380 | void __devinit register_bridge_irq(unsigned int irq) | 357 | void __devinit register_bridge_irq(unsigned int irq) |
| 381 | { | 358 | { |
| 382 | irq_desc[irq].status = IRQ_DISABLED; | 359 | irq_desc[irq].status = IRQ_DISABLED; |
diff --git a/arch/mips/sgi-ip27/ip27-klnuma.c b/arch/mips/sgi-ip27/ip27-klnuma.c index d777b7d1a9fe..f9f404a8ddad 100644 --- a/arch/mips/sgi-ip27/ip27-klnuma.c +++ b/arch/mips/sgi-ip27/ip27-klnuma.c | |||
| @@ -26,7 +26,7 @@ static cpumask_t ktext_repmask; | |||
| 26 | * kernel. For example, we should never put a copy on a headless node, | 26 | * kernel. For example, we should never put a copy on a headless node, |
| 27 | * and we should respect the topology of the machine. | 27 | * and we should respect the topology of the machine. |
| 28 | */ | 28 | */ |
| 29 | void __init setup_replication_mask() | 29 | void __init setup_replication_mask(void) |
| 30 | { | 30 | { |
| 31 | cnodeid_t cnode; | 31 | cnodeid_t cnode; |
| 32 | 32 | ||
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index 4e870fc4469b..5e82a268e3c9 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
| @@ -134,13 +134,6 @@ again: | |||
| 134 | irq_exit(); | 134 | irq_exit(); |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | unsigned long ip27_do_gettimeoffset(void) | ||
| 138 | { | ||
| 139 | unsigned long ct_cur1; | ||
| 140 | ct_cur1 = REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT) + CYCLES_PER_JIFFY; | ||
| 141 | return (ct_cur1 - ct_cur[0]) * NSEC_PER_CYCLE / 1000; | ||
| 142 | } | ||
| 143 | |||
| 144 | /* Includes for ioc3_init(). */ | 137 | /* Includes for ioc3_init(). */ |
| 145 | #include <asm/sn/types.h> | 138 | #include <asm/sn/types.h> |
| 146 | #include <asm/sn/sn0/addrs.h> | 139 | #include <asm/sn/sn0/addrs.h> |
| @@ -221,8 +214,6 @@ static struct irqaction rt_irqaction = { | |||
| 221 | .name = "timer" | 214 | .name = "timer" |
| 222 | }; | 215 | }; |
| 223 | 216 | ||
| 224 | extern int allocate_irqno(void); | ||
| 225 | |||
| 226 | void __init plat_timer_setup(struct irqaction *irq) | 217 | void __init plat_timer_setup(struct irqaction *irq) |
| 227 | { | 218 | { |
| 228 | int irqno = allocate_irqno(); | 219 | int irqno = allocate_irqno(); |
| @@ -248,12 +239,17 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
| 248 | setup_irq(irqno, &rt_irqaction); | 239 | setup_irq(irqno, &rt_irqaction); |
| 249 | } | 240 | } |
| 250 | 241 | ||
| 242 | static unsigned int ip27_hpt_read(void) | ||
| 243 | { | ||
| 244 | return REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT); | ||
| 245 | } | ||
| 246 | |||
| 251 | void __init ip27_time_init(void) | 247 | void __init ip27_time_init(void) |
| 252 | { | 248 | { |
| 249 | mips_hpt_read = ip27_hpt_read; | ||
| 250 | mips_hpt_frequency = CYCLES_PER_SEC; | ||
| 253 | xtime.tv_sec = get_m48t35_time(); | 251 | xtime.tv_sec = get_m48t35_time(); |
| 254 | xtime.tv_nsec = 0; | 252 | xtime.tv_nsec = 0; |
| 255 | |||
| 256 | do_gettimeoffset = ip27_do_gettimeoffset; | ||
| 257 | } | 253 | } |
| 258 | 254 | ||
| 259 | void __init cpu_time_init(void) | 255 | void __init cpu_time_init(void) |
diff --git a/arch/mips/sgi-ip32/ip32-reset.c b/arch/mips/sgi-ip32/ip32-reset.c index fd0932b2d521..db8084411538 100644 --- a/arch/mips/sgi-ip32/ip32-reset.c +++ b/arch/mips/sgi-ip32/ip32-reset.c | |||
| @@ -135,7 +135,7 @@ static inline void ip32_power_button(void) | |||
| 135 | add_timer(&power_timer); | 135 | add_timer(&power_timer); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static irqreturn_t ip32_rtc_int(int irq, void *dev_id, struct pt_regs *regs) | 138 | static irqreturn_t ip32_rtc_int(int irq, void *dev_id) |
| 139 | { | 139 | { |
| 140 | volatile unsigned char reg_c; | 140 | volatile unsigned char reg_c; |
| 141 | 141 | ||
diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c index 6eac36d1b8c8..bf328277c775 100644 --- a/arch/mips/sibyte/bcm1480/smp.c +++ b/arch/mips/sibyte/bcm1480/smp.c | |||
| @@ -34,21 +34,21 @@ extern void smp_call_function_interrupt(void); | |||
| 34 | * independent of board/firmware | 34 | * independent of board/firmware |
| 35 | */ | 35 | */ |
| 36 | 36 | ||
| 37 | static void *mailbox_0_set_regs[] = { | 37 | static volatile void *mailbox_0_set_regs[] = { |
| 38 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), | 38 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), |
| 39 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), | 39 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), |
| 40 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), | 40 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), |
| 41 | IOADDR(A_BCM1480_IMR_CPU3_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), | 41 | IOADDR(A_BCM1480_IMR_CPU3_BASE + R_BCM1480_IMR_MAILBOX_0_SET_CPU), |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | static void *mailbox_0_clear_regs[] = { | 44 | static volatile void *mailbox_0_clear_regs[] = { |
| 45 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), | 45 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), |
| 46 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), | 46 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), |
| 47 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), | 47 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), |
| 48 | IOADDR(A_BCM1480_IMR_CPU3_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), | 48 | IOADDR(A_BCM1480_IMR_CPU3_BASE + R_BCM1480_IMR_MAILBOX_0_CLR_CPU), |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | static void *mailbox_0_regs[] = { | 51 | static volatile void *mailbox_0_regs[] = { |
| 52 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), | 52 | IOADDR(A_BCM1480_IMR_CPU0_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), |
| 53 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), | 53 | IOADDR(A_BCM1480_IMR_CPU1_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), |
| 54 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), | 54 | IOADDR(A_BCM1480_IMR_CPU2_BASE + R_BCM1480_IMR_MAILBOX_0_CPU), |
diff --git a/arch/mips/sibyte/bcm1480/time.c b/arch/mips/sibyte/bcm1480/time.c index bf12af46132e..e136bde5248e 100644 --- a/arch/mips/sibyte/bcm1480/time.c +++ b/arch/mips/sibyte/bcm1480/time.c | |||
| @@ -47,6 +47,12 @@ | |||
| 47 | #define IMR_IP3_VAL K_BCM1480_INT_MAP_I1 | 47 | #define IMR_IP3_VAL K_BCM1480_INT_MAP_I1 |
| 48 | #define IMR_IP4_VAL K_BCM1480_INT_MAP_I2 | 48 | #define IMR_IP4_VAL K_BCM1480_INT_MAP_I2 |
| 49 | 49 | ||
| 50 | #ifdef CONFIG_SIMULATION | ||
| 51 | #define BCM1480_HPT_VALUE 50000 | ||
| 52 | #else | ||
| 53 | #define BCM1480_HPT_VALUE 1000000 | ||
| 54 | #endif | ||
| 55 | |||
| 50 | extern int bcm1480_steal_irq(int irq); | 56 | extern int bcm1480_steal_irq(int irq); |
| 51 | 57 | ||
| 52 | void bcm1480_time_init(void) | 58 | void bcm1480_time_init(void) |
| @@ -59,11 +65,6 @@ void bcm1480_time_init(void) | |||
| 59 | BUG(); | 65 | BUG(); |
| 60 | } | 66 | } |
| 61 | 67 | ||
| 62 | if (!cpu) { | ||
| 63 | /* Use our own gettimeoffset() routine */ | ||
| 64 | do_gettimeoffset = bcm1480_gettimeoffset; | ||
| 65 | } | ||
| 66 | |||
| 67 | bcm1480_mask_irq(cpu, irq); | 68 | bcm1480_mask_irq(cpu, irq); |
| 68 | 69 | ||
| 69 | /* Map the timer interrupt to ip[4] of this cpu */ | 70 | /* Map the timer interrupt to ip[4] of this cpu */ |
| @@ -74,11 +75,7 @@ void bcm1480_time_init(void) | |||
| 74 | /* Disable the timer and set up the count */ | 75 | /* Disable the timer and set up the count */ |
| 75 | __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); | 76 | __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); |
| 76 | __raw_writeq( | 77 | __raw_writeq( |
| 77 | #ifndef CONFIG_SIMULATION | 78 | BCM1480_HPT_VALUE/HZ |
| 78 | 1000000/HZ | ||
| 79 | #else | ||
| 80 | 50000/HZ | ||
| 81 | #endif | ||
| 82 | , IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); | 79 | , IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); |
| 83 | 80 | ||
| 84 | /* Set the timer running */ | 81 | /* Set the timer running */ |
| @@ -122,16 +119,16 @@ void bcm1480_timer_interrupt(void) | |||
| 122 | } | 119 | } |
| 123 | } | 120 | } |
| 124 | 121 | ||
| 125 | /* | 122 | static unsigned int bcm1480_hpt_read(void) |
| 126 | * We use our own do_gettimeoffset() instead of the generic one, | ||
| 127 | * because the generic one does not work for SMP case. | ||
| 128 | * In addition, since we use general timer 0 for system time, | ||
| 129 | * we can get accurate intra-jiffy offset without calibration. | ||
| 130 | */ | ||
| 131 | unsigned long bcm1480_gettimeoffset(void) | ||
| 132 | { | 123 | { |
| 124 | /* We assume this function is called xtime_lock held. */ | ||
| 133 | unsigned long count = | 125 | unsigned long count = |
| 134 | __raw_readq(IOADDR(A_SCD_TIMER_REGISTER(0, R_SCD_TIMER_CNT))); | 126 | __raw_readq(IOADDR(A_SCD_TIMER_REGISTER(0, R_SCD_TIMER_CNT))); |
| 127 | return (jiffies + 1) * (BCM1480_HPT_VALUE / HZ) - count; | ||
| 128 | } | ||
| 135 | 129 | ||
| 136 | return 1000000/HZ - count; | 130 | void __init bcm1480_hpt_setup(void) |
| 131 | { | ||
| 132 | mips_hpt_read = bcm1480_hpt_read; | ||
| 133 | mips_hpt_frequency = BCM1480_HPT_VALUE; | ||
| 137 | } | 134 | } |
diff --git a/arch/mips/sibyte/sb1250/bcm1250_tbprof.c b/arch/mips/sibyte/sb1250/bcm1250_tbprof.c index 992e0d8dbb67..d1a906e683b2 100644 --- a/arch/mips/sibyte/sb1250/bcm1250_tbprof.c +++ b/arch/mips/sibyte/sb1250/bcm1250_tbprof.c | |||
| @@ -88,7 +88,7 @@ static void arm_tb(void) | |||
| 88 | sbp.tb_armed = 1; | 88 | sbp.tb_armed = 1; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | static irqreturn_t sbprof_tb_intr(int irq, void *dev_id, struct pt_regs *regs) | 91 | static irqreturn_t sbprof_tb_intr(int irq, void *dev_id) |
| 92 | { | 92 | { |
| 93 | int i; | 93 | int i; |
| 94 | DBG(printk(DEVNAME ": tb_intr\n")); | 94 | DBG(printk(DEVNAME ": tb_intr\n")); |
| @@ -138,7 +138,7 @@ static irqreturn_t sbprof_tb_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
| 138 | return IRQ_HANDLED; | 138 | return IRQ_HANDLED; |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | static irqreturn_t sbprof_pc_intr(int irq, void *dev_id, struct pt_regs *regs) | 141 | static irqreturn_t sbprof_pc_intr(int irq, void *dev_id) |
| 142 | { | 142 | { |
| 143 | printk(DEVNAME ": unexpected pc_intr"); | 143 | printk(DEVNAME ": unexpected pc_intr"); |
| 144 | return IRQ_NONE; | 144 | return IRQ_NONE; |
diff --git a/arch/mips/sibyte/sb1250/bus_watcher.c b/arch/mips/sibyte/sb1250/bus_watcher.c index bb90649fbc48..45274bd3cd8b 100644 --- a/arch/mips/sibyte/sb1250/bus_watcher.c +++ b/arch/mips/sibyte/sb1250/bus_watcher.c | |||
| @@ -171,7 +171,7 @@ static void create_proc_decoder(struct bw_stats_struct *stats) | |||
| 171 | * notes: possible re-entry due to multiple sources | 171 | * notes: possible re-entry due to multiple sources |
| 172 | * should check/indicate saturation | 172 | * should check/indicate saturation |
| 173 | */ | 173 | */ |
| 174 | static irqreturn_t sibyte_bw_int(int irq, void *data, struct pt_regs *regs) | 174 | static irqreturn_t sibyte_bw_int(int irq, void *data) |
| 175 | { | 175 | { |
| 176 | struct bw_stats_struct *stats = data; | 176 | struct bw_stats_struct *stats = data; |
| 177 | unsigned long cntr; | 177 | unsigned long cntr; |
diff --git a/arch/mips/sibyte/sb1250/time.c b/arch/mips/sibyte/sb1250/time.c index 0ccf1796dd78..bcb74f2c1948 100644 --- a/arch/mips/sibyte/sb1250/time.c +++ b/arch/mips/sibyte/sb1250/time.c | |||
| @@ -47,15 +47,11 @@ | |||
| 47 | 47 | ||
| 48 | #define SB1250_HPT_NUM 3 | 48 | #define SB1250_HPT_NUM 3 |
| 49 | #define SB1250_HPT_VALUE M_SCD_TIMER_CNT /* max value */ | 49 | #define SB1250_HPT_VALUE M_SCD_TIMER_CNT /* max value */ |
| 50 | #define SB1250_HPT_SHIFT ((sizeof(unsigned int)*8)-V_SCD_TIMER_WIDTH) | ||
| 51 | 50 | ||
| 52 | 51 | ||
| 53 | extern int sb1250_steal_irq(int irq); | 52 | extern int sb1250_steal_irq(int irq); |
| 54 | 53 | ||
| 55 | static unsigned int sb1250_hpt_read(void); | 54 | static unsigned int sb1250_hpt_read(void); |
| 56 | static void sb1250_hpt_init(unsigned int); | ||
| 57 | |||
| 58 | static unsigned int hpt_offset; | ||
| 59 | 55 | ||
| 60 | void __init sb1250_hpt_setup(void) | 56 | void __init sb1250_hpt_setup(void) |
| 61 | { | 57 | { |
| @@ -69,13 +65,9 @@ void __init sb1250_hpt_setup(void) | |||
| 69 | __raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, | 65 | __raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, |
| 70 | IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG))); | 66 | IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG))); |
| 71 | 67 | ||
| 72 | /* | 68 | mips_hpt_frequency = V_SCD_TIMER_FREQ; |
| 73 | * we need to fill 32 bits, so just use the upper 23 bits and pretend | ||
| 74 | * the timer is going 512Mhz instead of 1Mhz | ||
| 75 | */ | ||
| 76 | mips_hpt_frequency = V_SCD_TIMER_FREQ << SB1250_HPT_SHIFT; | ||
| 77 | mips_hpt_init = sb1250_hpt_init; | ||
| 78 | mips_hpt_read = sb1250_hpt_read; | 69 | mips_hpt_read = sb1250_hpt_read; |
| 70 | mips_hpt_mask = M_SCD_TIMER_INIT; | ||
| 79 | } | 71 | } |
| 80 | } | 72 | } |
| 81 | 73 | ||
| @@ -149,11 +141,7 @@ void sb1250_timer_interrupt(void) | |||
| 149 | 141 | ||
| 150 | /* | 142 | /* |
| 151 | * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over | 143 | * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over |
| 152 | * again. There's no easy way to set to a specific value so store init value | 144 | * again. |
| 153 | * in hpt_offset and subtract each time. | ||
| 154 | * | ||
| 155 | * Note: Timer isn't full 32bits so shift it into the upper part making | ||
| 156 | * it appear to run at a higher frequency. | ||
| 157 | */ | 145 | */ |
| 158 | static unsigned int sb1250_hpt_read(void) | 146 | static unsigned int sb1250_hpt_read(void) |
| 159 | { | 147 | { |
| @@ -161,13 +149,5 @@ static unsigned int sb1250_hpt_read(void) | |||
| 161 | 149 | ||
| 162 | count = G_SCD_TIMER_CNT(__raw_readq(IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CNT)))); | 150 | count = G_SCD_TIMER_CNT(__raw_readq(IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CNT)))); |
| 163 | 151 | ||
| 164 | count = (SB1250_HPT_VALUE - count) << SB1250_HPT_SHIFT; | 152 | return SB1250_HPT_VALUE - count; |
| 165 | |||
| 166 | return count - hpt_offset; | ||
| 167 | } | ||
| 168 | |||
| 169 | static void sb1250_hpt_init(unsigned int count) | ||
| 170 | { | ||
| 171 | hpt_offset = count; | ||
| 172 | return; | ||
| 173 | } | 153 | } |
diff --git a/arch/mips/tx4927/common/smsc_fdc37m81x.c b/arch/mips/tx4927/common/smsc_fdc37m81x.c new file mode 100644 index 000000000000..33f517bc9a08 --- /dev/null +++ b/arch/mips/tx4927/common/smsc_fdc37m81x.c | |||
| @@ -0,0 +1,172 @@ | |||
| 1 | /* | ||
| 2 | * Interface for smsc fdc48m81x Super IO chip | ||
| 3 | * | ||
| 4 | * Author: MontaVista Software, Inc. source@mvista.com | ||
| 5 | * | ||
| 6 | * 2001-2003 (c) MontaVista Software, Inc. This file is licensed under | ||
| 7 | * the terms of the GNU General Public License version 2. This program | ||
| 8 | * is licensed "as is" without any warranty of any kind, whether express | ||
| 9 | * or implied. | ||
| 10 | * | ||
| 11 | * Copyright 2004 (c) MontaVista Software, Inc. | ||
| 12 | */ | ||
| 13 | #include <linux/init.h> | ||
| 14 | #include <linux/types.h> | ||
| 15 | #include <asm/io.h> | ||
| 16 | #include <asm/tx4927/smsc_fdc37m81x.h> | ||
| 17 | |||
| 18 | #define DEBUG | ||
| 19 | |||
| 20 | /* Common Registers */ | ||
| 21 | #define SMSC_FDC37M81X_CONFIG_INDEX 0x00 | ||
| 22 | #define SMSC_FDC37M81X_CONFIG_DATA 0x01 | ||
| 23 | #define SMSC_FDC37M81X_CONF 0x02 | ||
| 24 | #define SMSC_FDC37M81X_INDEX 0x03 | ||
| 25 | #define SMSC_FDC37M81X_DNUM 0x07 | ||
| 26 | #define SMSC_FDC37M81X_DID 0x20 | ||
| 27 | #define SMSC_FDC37M81X_DREV 0x21 | ||
| 28 | #define SMSC_FDC37M81X_PCNT 0x22 | ||
| 29 | #define SMSC_FDC37M81X_PMGT 0x23 | ||
| 30 | #define SMSC_FDC37M81X_OSC 0x24 | ||
| 31 | #define SMSC_FDC37M81X_CONFPA0 0x26 | ||
| 32 | #define SMSC_FDC37M81X_CONFPA1 0x27 | ||
| 33 | #define SMSC_FDC37M81X_TEST4 0x2B | ||
| 34 | #define SMSC_FDC37M81X_TEST5 0x2C | ||
| 35 | #define SMSC_FDC37M81X_TEST1 0x2D | ||
| 36 | #define SMSC_FDC37M81X_TEST2 0x2E | ||
| 37 | #define SMSC_FDC37M81X_TEST3 0x2F | ||
| 38 | |||
| 39 | /* Logical device numbers */ | ||
| 40 | #define SMSC_FDC37M81X_FDD 0x00 | ||
| 41 | #define SMSC_FDC37M81X_SERIAL1 0x04 | ||
| 42 | #define SMSC_FDC37M81X_SERIAL2 0x05 | ||
| 43 | #define SMSC_FDC37M81X_KBD 0x07 | ||
| 44 | |||
| 45 | /* Logical device Config Registers */ | ||
| 46 | #define SMSC_FDC37M81X_ACTIVE 0x30 | ||
| 47 | #define SMSC_FDC37M81X_BASEADDR0 0x60 | ||
| 48 | #define SMSC_FDC37M81X_BASEADDR1 0x61 | ||
| 49 | #define SMSC_FDC37M81X_INT 0x70 | ||
| 50 | #define SMSC_FDC37M81X_INT2 0x72 | ||
| 51 | #define SMSC_FDC37M81X_MODE 0xF0 | ||
| 52 | |||
| 53 | /* Chip Config Values */ | ||
| 54 | #define SMSC_FDC37M81X_CONFIG_ENTER 0x55 | ||
| 55 | #define SMSC_FDC37M81X_CONFIG_EXIT 0xaa | ||
| 56 | #define SMSC_FDC37M81X_CHIP_ID 0x4d | ||
| 57 | |||
| 58 | static unsigned long g_smsc_fdc37m81x_base = 0; | ||
| 59 | |||
| 60 | static inline unsigned char smsc_fdc37m81x_rd(unsigned char index) | ||
| 61 | { | ||
| 62 | outb(index, g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_INDEX); | ||
| 63 | |||
| 64 | return inb(g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_DATA); | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline void smsc_dc37m81x_wr(unsigned char index, unsigned char data) | ||
| 68 | { | ||
| 69 | outb(index, g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_INDEX); | ||
| 70 | outb(data, g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_DATA); | ||
| 71 | } | ||
| 72 | |||
| 73 | void smsc_fdc37m81x_config_beg(void) | ||
| 74 | { | ||
| 75 | if (g_smsc_fdc37m81x_base) { | ||
| 76 | outb(SMSC_FDC37M81X_CONFIG_ENTER, | ||
| 77 | g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_INDEX); | ||
| 78 | } | ||
| 79 | } | ||
| 80 | |||
| 81 | void smsc_fdc37m81x_config_end(void) | ||
| 82 | { | ||
| 83 | if (g_smsc_fdc37m81x_base) | ||
| 84 | outb(SMSC_FDC37M81X_CONFIG_EXIT, | ||
| 85 | g_smsc_fdc37m81x_base + SMSC_FDC37M81X_CONFIG_INDEX); | ||
| 86 | } | ||
| 87 | |||
| 88 | u8 smsc_fdc37m81x_config_get(u8 reg) | ||
| 89 | { | ||
| 90 | u8 val = 0; | ||
| 91 | |||
| 92 | if (g_smsc_fdc37m81x_base) | ||
| 93 | val = smsc_fdc37m81x_rd(reg); | ||
| 94 | |||
| 95 | return val; | ||
| 96 | } | ||
| 97 | |||
| 98 | void smsc_fdc37m81x_config_set(u8 reg, u8 val) | ||
| 99 | { | ||
| 100 | if (g_smsc_fdc37m81x_base) | ||
| 101 | smsc_dc37m81x_wr(reg, val); | ||
| 102 | } | ||
| 103 | |||
| 104 | unsigned long __init smsc_fdc37m81x_init(unsigned long port) | ||
| 105 | { | ||
| 106 | const int field = sizeof(unsigned long) * 2; | ||
| 107 | u8 chip_id; | ||
| 108 | |||
| 109 | if (g_smsc_fdc37m81x_base) | ||
| 110 | printk("smsc_fdc37m81x_init() stepping on old base=0x%0*lx\n", | ||
| 111 | field, g_smsc_fdc37m81x_base); | ||
| 112 | |||
| 113 | g_smsc_fdc37m81x_base = port; | ||
| 114 | |||
| 115 | smsc_fdc37m81x_config_beg(); | ||
| 116 | |||
| 117 | chip_id = smsc_fdc37m81x_rd(SMSC_FDC37M81X_DID); | ||
| 118 | if (chip_id == SMSC_FDC37M81X_CHIP_ID) | ||
| 119 | smsc_fdc37m81x_config_end(); | ||
| 120 | else { | ||
| 121 | printk("smsc_fdc37m81x_init() unknow chip id 0x%02x\n", | ||
| 122 | chip_id); | ||
| 123 | g_smsc_fdc37m81x_base = 0; | ||
| 124 | } | ||
| 125 | |||
| 126 | return g_smsc_fdc37m81x_base; | ||
| 127 | } | ||
| 128 | |||
| 129 | #ifdef DEBUG | ||
| 130 | void smsc_fdc37m81x_config_dump_one(char *key, u8 dev, u8 reg) | ||
| 131 | { | ||
| 132 | printk("%s: dev=0x%02x reg=0x%02x val=0x%02x\n", key, dev, reg, | ||
| 133 | smsc_fdc37m81x_rd(reg)); | ||
| 134 | } | ||
| 135 | |||
| 136 | void smsc_fdc37m81x_config_dump(void) | ||
| 137 | { | ||
| 138 | u8 orig; | ||
| 139 | char *fname = "smsc_fdc37m81x_config_dump()"; | ||
| 140 | |||
| 141 | smsc_fdc37m81x_config_beg(); | ||
| 142 | |||
| 143 | orig = smsc_fdc37m81x_rd(SMSC_FDC37M81X_DNUM); | ||
| 144 | |||
| 145 | printk("%s: common\n", fname); | ||
| 146 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_NONE, | ||
| 147 | SMSC_FDC37M81X_DNUM); | ||
| 148 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_NONE, | ||
| 149 | SMSC_FDC37M81X_DID); | ||
| 150 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_NONE, | ||
| 151 | SMSC_FDC37M81X_DREV); | ||
| 152 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_NONE, | ||
| 153 | SMSC_FDC37M81X_PCNT); | ||
| 154 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_NONE, | ||
| 155 | SMSC_FDC37M81X_PMGT); | ||
| 156 | |||
| 157 | printk("%s: keyboard\n", fname); | ||
| 158 | smsc_dc37m81x_wr(SMSC_FDC37M81X_DNUM, SMSC_FDC37M81X_KBD); | ||
| 159 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_KBD, | ||
| 160 | SMSC_FDC37M81X_ACTIVE); | ||
| 161 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_KBD, | ||
| 162 | SMSC_FDC37M81X_INT); | ||
| 163 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_KBD, | ||
| 164 | SMSC_FDC37M81X_INT2); | ||
| 165 | smsc_fdc37m81x_config_dump_one(fname, SMSC_FDC37M81X_KBD, | ||
| 166 | SMSC_FDC37M81X_LDCR_F0); | ||
| 167 | |||
| 168 | smsc_dc37m81x_wr(SMSC_FDC37M81X_DNUM, orig); | ||
| 169 | |||
| 170 | smsc_fdc37m81x_config_end(); | ||
| 171 | } | ||
| 172 | #endif | ||
diff --git a/arch/mips/tx4927/common/tx4927_setup.c b/arch/mips/tx4927/common/tx4927_setup.c index 4658b2ae4833..941c441729b0 100644 --- a/arch/mips/tx4927/common/tx4927_setup.c +++ b/arch/mips/tx4927/common/tx4927_setup.c | |||
| @@ -112,8 +112,6 @@ void print_cp0(char *key, int num, char *name, u32 val) | |||
| 112 | return; | 112 | return; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | indent: Standard input:25: Error:Unexpected end of file | ||
| 116 | |||
| 117 | void | 115 | void |
| 118 | dump_cp0(char *key) | 116 | dump_cp0(char *key) |
| 119 | { | 117 | { |
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c b/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c index b926e6a75c29..08b20cdfd7b3 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c | |||
| @@ -36,14 +36,18 @@ void __init txx9_spi_init(unsigned long base, int (*cs_func)(int chipid, int on) | |||
| 36 | 36 | ||
| 37 | static DECLARE_WAIT_QUEUE_HEAD(txx9_spi_wait); | 37 | static DECLARE_WAIT_QUEUE_HEAD(txx9_spi_wait); |
| 38 | 38 | ||
| 39 | static void txx9_spi_interrupt(int irq, void *dev_id) | 39 | static irqreturn_t txx9_spi_interrupt(int irq, void *dev_id) |
| 40 | { | 40 | { |
| 41 | /* disable rx intr */ | 41 | /* disable rx intr */ |
| 42 | tx4938_spiptr->cr0 &= ~TXx9_SPCR0_RBSIE; | 42 | tx4938_spiptr->cr0 &= ~TXx9_SPCR0_RBSIE; |
| 43 | wake_up(&txx9_spi_wait); | 43 | wake_up(&txx9_spi_wait); |
| 44 | |||
| 45 | return IRQ_HANDLED; | ||
| 44 | } | 46 | } |
| 47 | |||
| 45 | static struct irqaction txx9_spi_action = { | 48 | static struct irqaction txx9_spi_action = { |
| 46 | txx9_spi_interrupt, 0, 0, "spi", NULL, NULL, | 49 | .handler = txx9_spi_interrupt, |
| 50 | .name = "spi", | ||
| 47 | }; | 51 | }; |
| 48 | 52 | ||
| 49 | void __init txx9_spi_irqinit(int irc_irq) | 53 | void __init txx9_spi_irqinit(int irc_irq) |
diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index 6d57553d8ef8..8f6a0b312f7a 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c | |||
| @@ -69,10 +69,6 @@ EXPORT_SYMBOL(memcpy_toio); | |||
| 69 | EXPORT_SYMBOL(memcpy_fromio); | 69 | EXPORT_SYMBOL(memcpy_fromio); |
| 70 | EXPORT_SYMBOL(memset_io); | 70 | EXPORT_SYMBOL(memset_io); |
| 71 | 71 | ||
| 72 | #include <asm/unistd.h> | ||
| 73 | EXPORT_SYMBOL(sys_lseek); | ||
| 74 | EXPORT_SYMBOL(sys_write); | ||
| 75 | |||
| 76 | #include <asm/semaphore.h> | 72 | #include <asm/semaphore.h> |
| 77 | EXPORT_SYMBOL(__up); | 73 | EXPORT_SYMBOL(__up); |
| 78 | EXPORT_SYMBOL(__down_interruptible); | 74 | EXPORT_SYMBOL(__down_interruptible); |
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S index b3677fc8eef5..7b943b45f7cd 100644 --- a/arch/parisc/kernel/vmlinux.lds.S +++ b/arch/parisc/kernel/vmlinux.lds.S | |||
| @@ -153,13 +153,7 @@ SECTIONS | |||
| 153 | __setup_end = .; | 153 | __setup_end = .; |
| 154 | __initcall_start = .; | 154 | __initcall_start = .; |
| 155 | .initcall.init : { | 155 | .initcall.init : { |
| 156 | *(.initcall1.init) | 156 | INITCALLS |
| 157 | *(.initcall2.init) | ||
| 158 | *(.initcall3.init) | ||
| 159 | *(.initcall4.init) | ||
| 160 | *(.initcall5.init) | ||
| 161 | *(.initcall6.init) | ||
| 162 | *(.initcall7.init) | ||
| 163 | } | 157 | } |
| 164 | __initcall_end = .; | 158 | __initcall_end = .; |
| 165 | __con_initcall_start = .; | 159 | __con_initcall_start = .; |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 8b6910465578..0673dbedb241 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -740,7 +740,7 @@ config ARCH_SPARSEMEM_ENABLE | |||
| 740 | 740 | ||
| 741 | config ARCH_SPARSEMEM_DEFAULT | 741 | config ARCH_SPARSEMEM_DEFAULT |
| 742 | def_bool y | 742 | def_bool y |
| 743 | depends on SMP && PPC_PSERIES | 743 | depends on (SMP && PPC_PSERIES) || PPC_CELL |
| 744 | 744 | ||
| 745 | config ARCH_POPULATES_NODE_MAP | 745 | config ARCH_POPULATES_NODE_MAP |
| 746 | def_bool y | 746 | def_bool y |
| @@ -751,6 +751,15 @@ config ARCH_MEMORY_PROBE | |||
| 751 | def_bool y | 751 | def_bool y |
| 752 | depends on MEMORY_HOTPLUG | 752 | depends on MEMORY_HOTPLUG |
| 753 | 753 | ||
| 754 | # Some NUMA nodes have memory ranges that span | ||
| 755 | # other nodes. Even though a pfn is valid and | ||
| 756 | # between a node's start and end pfns, it may not | ||
| 757 | # reside on that node. See memmap_init_zone() | ||
| 758 | # for details. | ||
| 759 | config NODES_SPAN_OTHER_NODES | ||
| 760 | def_bool y | ||
| 761 | depends on NEED_MULTIPLE_NODES | ||
| 762 | |||
| 754 | config PPC_64K_PAGES | 763 | config PPC_64K_PAGES |
| 755 | bool "64k page size" | 764 | bool "64k page size" |
| 756 | depends on PPC64 | 765 | depends on PPC64 |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 37ddfcab0003..4b2be611f77f 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
| @@ -115,7 +115,7 @@ endif | |||
| 115 | quiet_cmd_wrap = WRAP $@ | 115 | quiet_cmd_wrap = WRAP $@ |
| 116 | cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux | 116 | cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux |
| 117 | quiet_cmd_wrap_initrd = WRAP $@ | 117 | quiet_cmd_wrap_initrd = WRAP $@ |
| 118 | cmd_wrap_initrd =$(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \ | 118 | cmd_wrap_initrd =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \ |
| 119 | -i $(obj)/ramdisk.image.gz vmlinux | 119 | -i $(obj)/ramdisk.image.gz vmlinux |
| 120 | 120 | ||
| 121 | $(obj)/zImage.chrp: vmlinux $(wrapperbits) | 121 | $(obj)/zImage.chrp: vmlinux $(wrapperbits) |
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index eab7318729e9..b5fb1fee76f8 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper | |||
| @@ -179,11 +179,11 @@ if [ -z "$cacheit" ]; then | |||
| 179 | fi | 179 | fi |
| 180 | 180 | ||
| 181 | if [ -n "$initrd" ]; then | 181 | if [ -n "$initrd" ]; then |
| 182 | addsec $tmp "$initrd" initrd | 182 | addsec $tmp "$initrd" $isection |
| 183 | fi | 183 | fi |
| 184 | 184 | ||
| 185 | if [ -n "$dtb" ]; then | 185 | if [ -n "$dtb" ]; then |
| 186 | addsec $tmp "$dtb" dtb | 186 | addsec $tmp "$dtb" .kernel:dtb |
| 187 | fi | 187 | fi |
| 188 | 188 | ||
| 189 | if [ "$platform" != "miboot" ]; then | 189 | if [ "$platform" != "miboot" ]; then |
diff --git a/arch/powerpc/boot/zImage.lds.S b/arch/powerpc/boot/zImage.lds.S index 4b6bb3ffe3dc..4be3c6414b04 100644 --- a/arch/powerpc/boot/zImage.lds.S +++ b/arch/powerpc/boot/zImage.lds.S | |||
| @@ -21,6 +21,11 @@ SECTIONS | |||
| 21 | __got2_end = .; | 21 | __got2_end = .; |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | . = ALIGN(8); | ||
| 25 | _dtb_start = .; | ||
| 26 | .kernel:dtb : { *(.kernel:dtb) } | ||
| 27 | _dtb_end = .; | ||
| 28 | |||
| 24 | . = ALIGN(4096); | 29 | . = ALIGN(4096); |
| 25 | _vmlinux_start = .; | 30 | _vmlinux_start = .; |
| 26 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } | 31 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } |
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig index 892d5dd3254e..0aba06d7d2ec 100644 --- a/arch/powerpc/configs/cell_defconfig +++ b/arch/powerpc/configs/cell_defconfig | |||
| @@ -254,6 +254,7 @@ CONFIG_SYN_COOKIES=y | |||
| 254 | CONFIG_INET_TUNNEL=y | 254 | CONFIG_INET_TUNNEL=y |
| 255 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 255 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 256 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 256 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 257 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 257 | CONFIG_INET_DIAG=y | 258 | CONFIG_INET_DIAG=y |
| 258 | CONFIG_INET_TCP_DIAG=y | 259 | CONFIG_INET_TCP_DIAG=y |
| 259 | # CONFIG_TCP_CONG_ADVANCED is not set | 260 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -275,7 +276,9 @@ CONFIG_INET6_XFRM_TUNNEL=m | |||
| 275 | CONFIG_INET6_TUNNEL=m | 276 | CONFIG_INET6_TUNNEL=m |
| 276 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | 277 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y |
| 277 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | 278 | CONFIG_INET6_XFRM_MODE_TUNNEL=y |
| 279 | # CONFIG_INET6_XFRM_MODE_BEET is not set | ||
| 278 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 280 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 281 | # CONFIG_IPV6_SIT is not set | ||
| 279 | CONFIG_IPV6_TUNNEL=m | 282 | CONFIG_IPV6_TUNNEL=m |
| 280 | # CONFIG_IPV6_SUBTREES is not set | 283 | # CONFIG_IPV6_SUBTREES is not set |
| 281 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 284 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| @@ -406,6 +409,12 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 406 | # CONFIG_ATA_OVER_ETH is not set | 409 | # CONFIG_ATA_OVER_ETH is not set |
| 407 | 410 | ||
| 408 | # | 411 | # |
| 412 | # Misc devices | ||
| 413 | # | ||
| 414 | # CONFIG_SGI_IOC4 is not set | ||
| 415 | # CONFIG_TIFM_CORE is not set | ||
| 416 | |||
| 417 | # | ||
| 409 | # ATA/ATAPI/MFM/RLL support | 418 | # ATA/ATAPI/MFM/RLL support |
| 410 | # | 419 | # |
| 411 | CONFIG_IDE=y | 420 | CONFIG_IDE=y |
| @@ -738,7 +747,6 @@ CONFIG_GEN_RTC=y | |||
| 738 | # TPM devices | 747 | # TPM devices |
| 739 | # | 748 | # |
| 740 | # CONFIG_TCG_TPM is not set | 749 | # CONFIG_TCG_TPM is not set |
| 741 | # CONFIG_TELCLOCK is not set | ||
| 742 | 750 | ||
| 743 | # | 751 | # |
| 744 | # I2C support | 752 | # I2C support |
| @@ -802,6 +810,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 802 | # | 810 | # |
| 803 | # Dallas's 1-wire bus | 811 | # Dallas's 1-wire bus |
| 804 | # | 812 | # |
| 813 | # CONFIG_W1 is not set | ||
| 805 | 814 | ||
| 806 | # | 815 | # |
| 807 | # Hardware Monitoring support | 816 | # Hardware Monitoring support |
| @@ -810,14 +819,9 @@ CONFIG_I2C_ALGOBIT=y | |||
| 810 | # CONFIG_HWMON_VID is not set | 819 | # CONFIG_HWMON_VID is not set |
| 811 | 820 | ||
| 812 | # | 821 | # |
| 813 | # Misc devices | ||
| 814 | # | ||
| 815 | |||
| 816 | # | ||
| 817 | # Multimedia devices | 822 | # Multimedia devices |
| 818 | # | 823 | # |
| 819 | # CONFIG_VIDEO_DEV is not set | 824 | # CONFIG_VIDEO_DEV is not set |
| 820 | CONFIG_VIDEO_V4L2=y | ||
| 821 | 825 | ||
| 822 | # | 826 | # |
| 823 | # Digital Video Broadcasting Devices | 827 | # Digital Video Broadcasting Devices |
| @@ -923,6 +927,7 @@ CONFIG_EXT3_FS=y | |||
| 923 | CONFIG_EXT3_FS_XATTR=y | 927 | CONFIG_EXT3_FS_XATTR=y |
| 924 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 928 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 925 | # CONFIG_EXT3_FS_SECURITY is not set | 929 | # CONFIG_EXT3_FS_SECURITY is not set |
| 930 | # CONFIG_EXT4DEV_FS is not set | ||
| 926 | CONFIG_JBD=y | 931 | CONFIG_JBD=y |
| 927 | # CONFIG_JBD_DEBUG is not set | 932 | # CONFIG_JBD_DEBUG is not set |
| 928 | CONFIG_FS_MBCACHE=y | 933 | CONFIG_FS_MBCACHE=y |
| @@ -930,6 +935,7 @@ CONFIG_FS_MBCACHE=y | |||
| 930 | # CONFIG_JFS_FS is not set | 935 | # CONFIG_JFS_FS is not set |
| 931 | CONFIG_FS_POSIX_ACL=y | 936 | CONFIG_FS_POSIX_ACL=y |
| 932 | # CONFIG_XFS_FS is not set | 937 | # CONFIG_XFS_FS is not set |
| 938 | # CONFIG_GFS2_FS is not set | ||
| 933 | # CONFIG_OCFS2_FS is not set | 939 | # CONFIG_OCFS2_FS is not set |
| 934 | # CONFIG_MINIX_FS is not set | 940 | # CONFIG_MINIX_FS is not set |
| 935 | # CONFIG_ROMFS_FS is not set | 941 | # CONFIG_ROMFS_FS is not set |
| @@ -1129,6 +1135,7 @@ CONFIG_DEBUG_FS=y | |||
| 1129 | # CONFIG_DEBUG_VM is not set | 1135 | # CONFIG_DEBUG_VM is not set |
| 1130 | # CONFIG_DEBUG_LIST is not set | 1136 | # CONFIG_DEBUG_LIST is not set |
| 1131 | # CONFIG_FORCED_INLINING is not set | 1137 | # CONFIG_FORCED_INLINING is not set |
| 1138 | # CONFIG_HEADERS_CHECK is not set | ||
| 1132 | # CONFIG_RCU_TORTURE_TEST is not set | 1139 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1133 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1140 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
| 1134 | # CONFIG_DEBUG_STACK_USAGE is not set | 1141 | # CONFIG_DEBUG_STACK_USAGE is not set |
diff --git a/arch/powerpc/configs/mpc834x_itx_defconfig b/arch/powerpc/configs/mpc834x_itx_defconfig index cd3535e1a095..0561b73a918f 100644 --- a/arch/powerpc/configs/mpc834x_itx_defconfig +++ b/arch/powerpc/configs/mpc834x_itx_defconfig | |||
| @@ -1248,7 +1248,7 @@ CONFIG_PARTITION_ADVANCED=y | |||
| 1248 | # CONFIG_AMIGA_PARTITION is not set | 1248 | # CONFIG_AMIGA_PARTITION is not set |
| 1249 | # CONFIG_ATARI_PARTITION is not set | 1249 | # CONFIG_ATARI_PARTITION is not set |
| 1250 | # CONFIG_MAC_PARTITION is not set | 1250 | # CONFIG_MAC_PARTITION is not set |
| 1251 | # CONFIG_MSDOS_PARTITION is not set | 1251 | CONFIG_MSDOS_PARTITION=y |
| 1252 | # CONFIG_LDM_PARTITION is not set | 1252 | # CONFIG_LDM_PARTITION is not set |
| 1253 | # CONFIG_SGI_PARTITION is not set | 1253 | # CONFIG_SGI_PARTITION is not set |
| 1254 | # CONFIG_ULTRIX_PARTITION is not set | 1254 | # CONFIG_ULTRIX_PARTITION is not set |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index 9828663652e9..d2833c1a1f3d 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
| @@ -184,6 +184,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | |||
| 184 | CONFIG_MIGRATION=y | 184 | CONFIG_MIGRATION=y |
| 185 | CONFIG_RESOURCES_64BIT=y | 185 | CONFIG_RESOURCES_64BIT=y |
| 186 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | 186 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y |
| 187 | CONFIG_NODES_SPAN_OTHER_NODES=y | ||
| 187 | # CONFIG_PPC_64K_PAGES is not set | 188 | # CONFIG_PPC_64K_PAGES is not set |
| 188 | CONFIG_SCHED_SMT=y | 189 | CONFIG_SCHED_SMT=y |
| 189 | CONFIG_PROC_DEVICETREE=y | 190 | CONFIG_PROC_DEVICETREE=y |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 8b133afbdc20..7af23c43fd4b 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
| @@ -38,7 +38,6 @@ obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o | |||
| 38 | obj-$(CONFIG_TAU) += tau_6xx.o | 38 | obj-$(CONFIG_TAU) += tau_6xx.o |
| 39 | obj32-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_32.o | 39 | obj32-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_32.o |
| 40 | obj32-$(CONFIG_MODULES) += module_32.o | 40 | obj32-$(CONFIG_MODULES) += module_32.o |
| 41 | obj-$(CONFIG_E500) += perfmon_fsl_booke.o | ||
| 42 | 41 | ||
| 43 | ifeq ($(CONFIG_PPC_MERGE),y) | 42 | ifeq ($(CONFIG_PPC_MERGE),y) |
| 44 | 43 | ||
diff --git a/arch/powerpc/kernel/btext.c b/arch/powerpc/kernel/btext.c index 995fcef156fd..93f21aaf7c8e 100644 --- a/arch/powerpc/kernel/btext.c +++ b/arch/powerpc/kernel/btext.c | |||
| @@ -182,7 +182,7 @@ int btext_initialize(struct device_node *np) | |||
| 182 | prop = get_property(np, "linux,bootx-linebytes", NULL); | 182 | prop = get_property(np, "linux,bootx-linebytes", NULL); |
| 183 | if (prop == NULL) | 183 | if (prop == NULL) |
| 184 | prop = get_property(np, "linebytes", NULL); | 184 | prop = get_property(np, "linebytes", NULL); |
| 185 | if (prop) | 185 | if (prop && *prop != 0xffffffffu) |
| 186 | pitch = *prop; | 186 | pitch = *prop; |
| 187 | if (pitch == 1) | 187 | if (pitch == 1) |
| 188 | pitch = 0x1000; | 188 | pitch = 0x1000; |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 47a613cdd775..bfd499ee3753 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <asm/oprofile_impl.h> | 19 | #include <asm/oprofile_impl.h> |
| 20 | #include <asm/cputable.h> | 20 | #include <asm/cputable.h> |
| 21 | #include <asm/prom.h> /* for PTRRELOC on ARCH=ppc */ | ||
| 21 | 22 | ||
| 22 | struct cpu_spec* cur_cpu_spec = NULL; | 23 | struct cpu_spec* cur_cpu_spec = NULL; |
| 23 | EXPORT_SYMBOL(cur_cpu_spec); | 24 | EXPORT_SYMBOL(cur_cpu_spec); |
| @@ -73,7 +74,7 @@ extern void __restore_cpu_ppc970(void); | |||
| 73 | #define PPC_FEATURE_SPE_COMP 0 | 74 | #define PPC_FEATURE_SPE_COMP 0 |
| 74 | #endif | 75 | #endif |
| 75 | 76 | ||
| 76 | struct cpu_spec cpu_specs[] = { | 77 | static struct cpu_spec cpu_specs[] = { |
| 77 | #ifdef CONFIG_PPC64 | 78 | #ifdef CONFIG_PPC64 |
| 78 | { /* Power3 */ | 79 | { /* Power3 */ |
| 79 | .pvr_mask = 0xffff0000, | 80 | .pvr_mask = 0xffff0000, |
| @@ -227,6 +228,21 @@ struct cpu_spec cpu_specs[] = { | |||
| 227 | .oprofile_type = PPC_OPROFILE_POWER4, | 228 | .oprofile_type = PPC_OPROFILE_POWER4, |
| 228 | .platform = "ppc970", | 229 | .platform = "ppc970", |
| 229 | }, | 230 | }, |
| 231 | { /* PPC970GX */ | ||
| 232 | .pvr_mask = 0xffff0000, | ||
| 233 | .pvr_value = 0x00450000, | ||
| 234 | .cpu_name = "PPC970GX", | ||
| 235 | .cpu_features = CPU_FTRS_PPC970, | ||
| 236 | .cpu_user_features = COMMON_USER_POWER4 | | ||
| 237 | PPC_FEATURE_HAS_ALTIVEC_COMP, | ||
| 238 | .icache_bsize = 128, | ||
| 239 | .dcache_bsize = 128, | ||
| 240 | .num_pmcs = 8, | ||
| 241 | .cpu_setup = __setup_cpu_ppc970, | ||
| 242 | .oprofile_cpu_type = "ppc64/970", | ||
| 243 | .oprofile_type = PPC_OPROFILE_POWER4, | ||
| 244 | .platform = "ppc970", | ||
| 245 | }, | ||
| 230 | { /* Power5 GR */ | 246 | { /* Power5 GR */ |
| 231 | .pvr_mask = 0xffff0000, | 247 | .pvr_mask = 0xffff0000, |
| 232 | .pvr_value = 0x003a0000, | 248 | .pvr_value = 0x003a0000, |
| @@ -268,7 +284,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 268 | .cpu_user_features = COMMON_USER_POWER6, | 284 | .cpu_user_features = COMMON_USER_POWER6, |
| 269 | .icache_bsize = 128, | 285 | .icache_bsize = 128, |
| 270 | .dcache_bsize = 128, | 286 | .dcache_bsize = 128, |
| 271 | .num_pmcs = 8, | 287 | .num_pmcs = 6, |
| 272 | .oprofile_cpu_type = "ppc64/power6", | 288 | .oprofile_cpu_type = "ppc64/power6", |
| 273 | .oprofile_type = PPC_OPROFILE_POWER4, | 289 | .oprofile_type = PPC_OPROFILE_POWER4, |
| 274 | .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV, | 290 | .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV, |
| @@ -1152,3 +1168,71 @@ struct cpu_spec cpu_specs[] = { | |||
| 1152 | #endif /* !CLASSIC_PPC */ | 1168 | #endif /* !CLASSIC_PPC */ |
| 1153 | #endif /* CONFIG_PPC32 */ | 1169 | #endif /* CONFIG_PPC32 */ |
| 1154 | }; | 1170 | }; |
| 1171 | |||
| 1172 | struct cpu_spec *identify_cpu(unsigned long offset) | ||
| 1173 | { | ||
| 1174 | struct cpu_spec *s = cpu_specs; | ||
| 1175 | struct cpu_spec **cur = &cur_cpu_spec; | ||
| 1176 | unsigned int pvr = mfspr(SPRN_PVR); | ||
| 1177 | int i; | ||
| 1178 | |||
| 1179 | s = PTRRELOC(s); | ||
| 1180 | cur = PTRRELOC(cur); | ||
| 1181 | |||
| 1182 | if (*cur != NULL) | ||
| 1183 | return PTRRELOC(*cur); | ||
| 1184 | |||
| 1185 | for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) | ||
| 1186 | if ((pvr & s->pvr_mask) == s->pvr_value) { | ||
| 1187 | *cur = cpu_specs + i; | ||
| 1188 | #ifdef CONFIG_PPC64 | ||
| 1189 | /* ppc64 expects identify_cpu to also call setup_cpu | ||
| 1190 | * for that processor. I will consolidate that at a | ||
| 1191 | * later time, for now, just use our friend #ifdef. | ||
| 1192 | * we also don't need to PTRRELOC the function pointer | ||
| 1193 | * on ppc64 as we are running at 0 in real mode. | ||
| 1194 | */ | ||
| 1195 | if (s->cpu_setup) { | ||
| 1196 | s->cpu_setup(offset, s); | ||
| 1197 | } | ||
| 1198 | #endif /* CONFIG_PPC64 */ | ||
| 1199 | return s; | ||
| 1200 | } | ||
| 1201 | BUG(); | ||
| 1202 | return NULL; | ||
| 1203 | } | ||
| 1204 | |||
| 1205 | void do_feature_fixups(unsigned long value, void *fixup_start, void *fixup_end) | ||
| 1206 | { | ||
| 1207 | struct fixup_entry { | ||
| 1208 | unsigned long mask; | ||
| 1209 | unsigned long value; | ||
| 1210 | long start_off; | ||
| 1211 | long end_off; | ||
| 1212 | } *fcur, *fend; | ||
| 1213 | |||
| 1214 | fcur = fixup_start; | ||
| 1215 | fend = fixup_end; | ||
| 1216 | |||
| 1217 | for (; fcur < fend; fcur++) { | ||
| 1218 | unsigned int *pstart, *pend, *p; | ||
| 1219 | |||
| 1220 | if ((value & fcur->mask) == fcur->value) | ||
| 1221 | continue; | ||
| 1222 | |||
| 1223 | /* These PTRRELOCs will disappear once the new scheme for | ||
| 1224 | * modules and vdso is implemented | ||
| 1225 | */ | ||
| 1226 | pstart = ((unsigned int *)fcur) + (fcur->start_off / 4); | ||
| 1227 | pend = ((unsigned int *)fcur) + (fcur->end_off / 4); | ||
| 1228 | |||
| 1229 | for (p = pstart; p < pend; p++) { | ||
| 1230 | *p = 0x60000000u; | ||
| 1231 | asm volatile ("dcbst 0, %0" : : "r" (p)); | ||
| 1232 | } | ||
| 1233 | asm volatile ("sync" : : : "memory"); | ||
| 1234 | for (p = pstart; p < pend; p++) | ||
| 1235 | asm volatile ("icbi 0,%0" : : "r" (p)); | ||
| 1236 | asm volatile ("sync; isync" : : : "memory"); | ||
| 1237 | } | ||
| 1238 | } | ||
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 645c7f10fb28..e720729f3e55 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
| @@ -487,7 +487,7 @@ BEGIN_FTR_SECTION | |||
| 487 | rlwimi r13,r12,16,0x20 | 487 | rlwimi r13,r12,16,0x20 |
| 488 | mfcr r12 | 488 | mfcr r12 |
| 489 | cmpwi r13,0x2c | 489 | cmpwi r13,0x2c |
| 490 | beq .do_stab_bolted_pSeries | 490 | beq do_stab_bolted_pSeries |
| 491 | mtcrf 0x80,r12 | 491 | mtcrf 0x80,r12 |
| 492 | mfspr r12,SPRN_SPRG2 | 492 | mfspr r12,SPRN_SPRG2 |
| 493 | END_FTR_SECTION_IFCLR(CPU_FTR_SLB) | 493 | END_FTR_SECTION_IFCLR(CPU_FTR_SLB) |
| @@ -600,7 +600,7 @@ system_call_pSeries: | |||
| 600 | STD_EXCEPTION_PSERIES(., performance_monitor) | 600 | STD_EXCEPTION_PSERIES(., performance_monitor) |
| 601 | 601 | ||
| 602 | .align 7 | 602 | .align 7 |
| 603 | _GLOBAL(do_stab_bolted_pSeries) | 603 | do_stab_bolted_pSeries: |
| 604 | mtcrf 0x80,r12 | 604 | mtcrf 0x80,r12 |
| 605 | mfspr r12,SPRN_SPRG2 | 605 | mfspr r12,SPRN_SPRG2 |
| 606 | EXCEPTION_PROLOG_PSERIES(PACA_EXSLB, .do_stab_bolted) | 606 | EXCEPTION_PROLOG_PSERIES(PACA_EXSLB, .do_stab_bolted) |
| @@ -1046,7 +1046,7 @@ slb_miss_fault: | |||
| 1046 | li r5,0 | 1046 | li r5,0 |
| 1047 | std r4,_DAR(r1) | 1047 | std r4,_DAR(r1) |
| 1048 | std r5,_DSISR(r1) | 1048 | std r5,_DSISR(r1) |
| 1049 | b .handle_page_fault | 1049 | b handle_page_fault |
| 1050 | 1050 | ||
| 1051 | unrecov_user_slb: | 1051 | unrecov_user_slb: |
| 1052 | EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) | 1052 | EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) |
| @@ -1174,12 +1174,13 @@ program_check_common: | |||
| 1174 | .globl fp_unavailable_common | 1174 | .globl fp_unavailable_common |
| 1175 | fp_unavailable_common: | 1175 | fp_unavailable_common: |
| 1176 | EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) | 1176 | EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) |
| 1177 | bne .load_up_fpu /* if from user, just load it up */ | 1177 | bne 1f /* if from user, just load it up */ |
| 1178 | bl .save_nvgprs | 1178 | bl .save_nvgprs |
| 1179 | addi r3,r1,STACK_FRAME_OVERHEAD | 1179 | addi r3,r1,STACK_FRAME_OVERHEAD |
| 1180 | ENABLE_INTS | 1180 | ENABLE_INTS |
| 1181 | bl .kernel_fp_unavailable_exception | 1181 | bl .kernel_fp_unavailable_exception |
| 1182 | BUG_OPCODE | 1182 | BUG_OPCODE |
| 1183 | 1: b .load_up_fpu | ||
| 1183 | 1184 | ||
| 1184 | .align 7 | 1185 | .align 7 |
| 1185 | .globl altivec_unavailable_common | 1186 | .globl altivec_unavailable_common |
| @@ -1279,10 +1280,10 @@ _GLOBAL(do_hash_page) | |||
| 1279 | std r4,_DSISR(r1) | 1280 | std r4,_DSISR(r1) |
| 1280 | 1281 | ||
| 1281 | andis. r0,r4,0xa450 /* weird error? */ | 1282 | andis. r0,r4,0xa450 /* weird error? */ |
| 1282 | bne- .handle_page_fault /* if not, try to insert a HPTE */ | 1283 | bne- handle_page_fault /* if not, try to insert a HPTE */ |
| 1283 | BEGIN_FTR_SECTION | 1284 | BEGIN_FTR_SECTION |
| 1284 | andis. r0,r4,0x0020 /* Is it a segment table fault? */ | 1285 | andis. r0,r4,0x0020 /* Is it a segment table fault? */ |
| 1285 | bne- .do_ste_alloc /* If so handle it */ | 1286 | bne- do_ste_alloc /* If so handle it */ |
| 1286 | END_FTR_SECTION_IFCLR(CPU_FTR_SLB) | 1287 | END_FTR_SECTION_IFCLR(CPU_FTR_SLB) |
| 1287 | 1288 | ||
| 1288 | /* | 1289 | /* |
| @@ -1324,7 +1325,7 @@ BEGIN_FW_FTR_SECTION | |||
| 1324 | * because ret_from_except_lite will check for and handle pending | 1325 | * because ret_from_except_lite will check for and handle pending |
| 1325 | * interrupts if necessary. | 1326 | * interrupts if necessary. |
| 1326 | */ | 1327 | */ |
| 1327 | beq .ret_from_except_lite | 1328 | beq 13f |
| 1328 | /* For a hash failure, we don't bother re-enabling interrupts */ | 1329 | /* For a hash failure, we don't bother re-enabling interrupts */ |
| 1329 | ble- 12f | 1330 | ble- 12f |
| 1330 | 1331 | ||
| @@ -1346,14 +1347,14 @@ BEGIN_FW_FTR_SECTION | |||
| 1346 | END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) | 1347 | END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) |
| 1347 | 1348 | ||
| 1348 | /* Here we have a page fault that hash_page can't handle. */ | 1349 | /* Here we have a page fault that hash_page can't handle. */ |
| 1349 | _GLOBAL(handle_page_fault) | 1350 | handle_page_fault: |
| 1350 | ENABLE_INTS | 1351 | ENABLE_INTS |
| 1351 | 11: ld r4,_DAR(r1) | 1352 | 11: ld r4,_DAR(r1) |
| 1352 | ld r5,_DSISR(r1) | 1353 | ld r5,_DSISR(r1) |
| 1353 | addi r3,r1,STACK_FRAME_OVERHEAD | 1354 | addi r3,r1,STACK_FRAME_OVERHEAD |
| 1354 | bl .do_page_fault | 1355 | bl .do_page_fault |
| 1355 | cmpdi r3,0 | 1356 | cmpdi r3,0 |
| 1356 | beq+ .ret_from_except_lite | 1357 | beq+ 13f |
| 1357 | bl .save_nvgprs | 1358 | bl .save_nvgprs |
| 1358 | mr r5,r3 | 1359 | mr r5,r3 |
| 1359 | addi r3,r1,STACK_FRAME_OVERHEAD | 1360 | addi r3,r1,STACK_FRAME_OVERHEAD |
| @@ -1370,12 +1371,14 @@ _GLOBAL(handle_page_fault) | |||
| 1370 | bl .low_hash_fault | 1371 | bl .low_hash_fault |
| 1371 | b .ret_from_except | 1372 | b .ret_from_except |
| 1372 | 1373 | ||
| 1374 | 13: b .ret_from_except_lite | ||
| 1375 | |||
| 1373 | /* here we have a segment miss */ | 1376 | /* here we have a segment miss */ |
| 1374 | _GLOBAL(do_ste_alloc) | 1377 | do_ste_alloc: |
| 1375 | bl .ste_allocate /* try to insert stab entry */ | 1378 | bl .ste_allocate /* try to insert stab entry */ |
| 1376 | cmpdi r3,0 | 1379 | cmpdi r3,0 |
| 1377 | beq+ fast_exception_return | 1380 | bne- handle_page_fault |
| 1378 | b .handle_page_fault | 1381 | b fast_exception_return |
| 1379 | 1382 | ||
| 1380 | /* | 1383 | /* |
| 1381 | * r13 points to the PACA, r9 contains the saved CR, | 1384 | * r13 points to the PACA, r9 contains the saved CR, |
| @@ -1580,11 +1583,6 @@ _STATIC(__start_initialization_iSeries) | |||
| 1580 | li r0,0 | 1583 | li r0,0 |
| 1581 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1584 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
| 1582 | 1585 | ||
| 1583 | LOAD_REG_IMMEDIATE(r3,cpu_specs) | ||
| 1584 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) | ||
| 1585 | li r5,0 | ||
| 1586 | bl .identify_cpu | ||
| 1587 | |||
| 1588 | LOAD_REG_IMMEDIATE(r2,__toc_start) | 1586 | LOAD_REG_IMMEDIATE(r2,__toc_start) |
| 1589 | addi r2,r2,0x4000 | 1587 | addi r2,r2,0x4000 |
| 1590 | addi r2,r2,0x4000 | 1588 | addi r2,r2,0x4000 |
| @@ -1646,6 +1644,8 @@ _GLOBAL(__start_initialization_multiplatform) | |||
| 1646 | cmpwi r0,0x3c /* 970FX */ | 1644 | cmpwi r0,0x3c /* 970FX */ |
| 1647 | beq 1f | 1645 | beq 1f |
| 1648 | cmpwi r0,0x44 /* 970MP */ | 1646 | cmpwi r0,0x44 /* 970MP */ |
| 1647 | beq 1f | ||
| 1648 | cmpwi r0,0x45 /* 970GX */ | ||
| 1649 | bne 2f | 1649 | bne 2f |
| 1650 | 1: bl .__cpu_preinit_ppc970 | 1650 | 1: bl .__cpu_preinit_ppc970 |
| 1651 | 2: | 1651 | 2: |
| @@ -1964,13 +1964,6 @@ _STATIC(start_here_multiplatform) | |||
| 1964 | addi r2,r2,0x4000 | 1964 | addi r2,r2,0x4000 |
| 1965 | add r2,r2,r26 | 1965 | add r2,r2,r26 |
| 1966 | 1966 | ||
| 1967 | LOAD_REG_IMMEDIATE(r3, cpu_specs) | ||
| 1968 | add r3,r3,r26 | ||
| 1969 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) | ||
| 1970 | add r4,r4,r26 | ||
| 1971 | mr r5,r26 | ||
| 1972 | bl .identify_cpu | ||
| 1973 | |||
| 1974 | /* Do very early kernel initializations, including initial hash table, | 1967 | /* Do very early kernel initializations, including initial hash table, |
| 1975 | * stab and slb setup before we turn on relocation. */ | 1968 | * stab and slb setup before we turn on relocation. */ |
| 1976 | 1969 | ||
| @@ -2000,13 +1993,6 @@ _STATIC(start_here_common) | |||
| 2000 | li r0,0 | 1993 | li r0,0 |
| 2001 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1994 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
| 2002 | 1995 | ||
| 2003 | /* Apply the CPUs-specific fixups (nop out sections not relevant | ||
| 2004 | * to this CPU | ||
| 2005 | */ | ||
| 2006 | li r3,0 | ||
| 2007 | bl .do_cpu_ftr_fixups | ||
| 2008 | bl .do_fw_ftr_fixups | ||
| 2009 | |||
| 2010 | /* ptr to current */ | 1996 | /* ptr to current */ |
| 2011 | LOAD_REG_IMMEDIATE(r4, init_task) | 1997 | LOAD_REG_IMMEDIATE(r4, init_task) |
| 2012 | std r4,PACACURRENT(r13) | 1998 | std r4,PACACURRENT(r13) |
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index f88a2a675d90..ba6b7256084b 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
| @@ -47,6 +47,17 @@ static int novmerge = 0; | |||
| 47 | static int novmerge = 1; | 47 | static int novmerge = 1; |
| 48 | #endif | 48 | #endif |
| 49 | 49 | ||
| 50 | static inline unsigned long iommu_num_pages(unsigned long vaddr, | ||
| 51 | unsigned long slen) | ||
| 52 | { | ||
| 53 | unsigned long npages; | ||
| 54 | |||
| 55 | npages = IOMMU_PAGE_ALIGN(vaddr + slen) - (vaddr & IOMMU_PAGE_MASK); | ||
| 56 | npages >>= IOMMU_PAGE_SHIFT; | ||
| 57 | |||
| 58 | return npages; | ||
| 59 | } | ||
| 60 | |||
| 50 | static int __init setup_iommu(char *str) | 61 | static int __init setup_iommu(char *str) |
| 51 | { | 62 | { |
| 52 | if (!strcmp(str, "novmerge")) | 63 | if (!strcmp(str, "novmerge")) |
| @@ -178,10 +189,10 @@ static dma_addr_t iommu_alloc(struct iommu_table *tbl, void *page, | |||
| 178 | } | 189 | } |
| 179 | 190 | ||
| 180 | entry += tbl->it_offset; /* Offset into real TCE table */ | 191 | entry += tbl->it_offset; /* Offset into real TCE table */ |
| 181 | ret = entry << PAGE_SHIFT; /* Set the return dma address */ | 192 | ret = entry << IOMMU_PAGE_SHIFT; /* Set the return dma address */ |
| 182 | 193 | ||
| 183 | /* Put the TCEs in the HW table */ | 194 | /* Put the TCEs in the HW table */ |
| 184 | ppc_md.tce_build(tbl, entry, npages, (unsigned long)page & PAGE_MASK, | 195 | ppc_md.tce_build(tbl, entry, npages, (unsigned long)page & IOMMU_PAGE_MASK, |
| 185 | direction); | 196 | direction); |
| 186 | 197 | ||
| 187 | 198 | ||
| @@ -203,7 +214,7 @@ static void __iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
| 203 | unsigned long entry, free_entry; | 214 | unsigned long entry, free_entry; |
| 204 | unsigned long i; | 215 | unsigned long i; |
| 205 | 216 | ||
| 206 | entry = dma_addr >> PAGE_SHIFT; | 217 | entry = dma_addr >> IOMMU_PAGE_SHIFT; |
| 207 | free_entry = entry - tbl->it_offset; | 218 | free_entry = entry - tbl->it_offset; |
| 208 | 219 | ||
| 209 | if (((free_entry + npages) > tbl->it_size) || | 220 | if (((free_entry + npages) > tbl->it_size) || |
| @@ -270,7 +281,7 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
| 270 | /* Init first segment length for backout at failure */ | 281 | /* Init first segment length for backout at failure */ |
| 271 | outs->dma_length = 0; | 282 | outs->dma_length = 0; |
| 272 | 283 | ||
| 273 | DBG("mapping %d elements:\n", nelems); | 284 | DBG("sg mapping %d elements:\n", nelems); |
| 274 | 285 | ||
| 275 | spin_lock_irqsave(&(tbl->it_lock), flags); | 286 | spin_lock_irqsave(&(tbl->it_lock), flags); |
| 276 | 287 | ||
| @@ -285,9 +296,8 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
| 285 | } | 296 | } |
| 286 | /* Allocate iommu entries for that segment */ | 297 | /* Allocate iommu entries for that segment */ |
| 287 | vaddr = (unsigned long)page_address(s->page) + s->offset; | 298 | vaddr = (unsigned long)page_address(s->page) + s->offset; |
| 288 | npages = PAGE_ALIGN(vaddr + slen) - (vaddr & PAGE_MASK); | 299 | npages = iommu_num_pages(vaddr, slen); |
| 289 | npages >>= PAGE_SHIFT; | 300 | entry = iommu_range_alloc(tbl, npages, &handle, mask >> IOMMU_PAGE_SHIFT, 0); |
| 290 | entry = iommu_range_alloc(tbl, npages, &handle, mask >> PAGE_SHIFT, 0); | ||
| 291 | 301 | ||
| 292 | DBG(" - vaddr: %lx, size: %lx\n", vaddr, slen); | 302 | DBG(" - vaddr: %lx, size: %lx\n", vaddr, slen); |
| 293 | 303 | ||
| @@ -301,14 +311,14 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
| 301 | 311 | ||
| 302 | /* Convert entry to a dma_addr_t */ | 312 | /* Convert entry to a dma_addr_t */ |
| 303 | entry += tbl->it_offset; | 313 | entry += tbl->it_offset; |
| 304 | dma_addr = entry << PAGE_SHIFT; | 314 | dma_addr = entry << IOMMU_PAGE_SHIFT; |
| 305 | dma_addr |= s->offset; | 315 | dma_addr |= (s->offset & ~IOMMU_PAGE_MASK); |
| 306 | 316 | ||
| 307 | DBG(" - %lx pages, entry: %lx, dma_addr: %lx\n", | 317 | DBG(" - %lu pages, entry: %lx, dma_addr: %lx\n", |
| 308 | npages, entry, dma_addr); | 318 | npages, entry, dma_addr); |
| 309 | 319 | ||
| 310 | /* Insert into HW table */ | 320 | /* Insert into HW table */ |
| 311 | ppc_md.tce_build(tbl, entry, npages, vaddr & PAGE_MASK, direction); | 321 | ppc_md.tce_build(tbl, entry, npages, vaddr & IOMMU_PAGE_MASK, direction); |
| 312 | 322 | ||
| 313 | /* If we are in an open segment, try merging */ | 323 | /* If we are in an open segment, try merging */ |
| 314 | if (segstart != s) { | 324 | if (segstart != s) { |
| @@ -323,7 +333,7 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
| 323 | DBG(" can't merge, new segment.\n"); | 333 | DBG(" can't merge, new segment.\n"); |
| 324 | } else { | 334 | } else { |
| 325 | outs->dma_length += s->length; | 335 | outs->dma_length += s->length; |
| 326 | DBG(" merged, new len: %lx\n", outs->dma_length); | 336 | DBG(" merged, new len: %ux\n", outs->dma_length); |
| 327 | } | 337 | } |
| 328 | } | 338 | } |
| 329 | 339 | ||
| @@ -367,9 +377,8 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
| 367 | if (s->dma_length != 0) { | 377 | if (s->dma_length != 0) { |
| 368 | unsigned long vaddr, npages; | 378 | unsigned long vaddr, npages; |
| 369 | 379 | ||
| 370 | vaddr = s->dma_address & PAGE_MASK; | 380 | vaddr = s->dma_address & IOMMU_PAGE_MASK; |
| 371 | npages = (PAGE_ALIGN(s->dma_address + s->dma_length) - vaddr) | 381 | npages = iommu_num_pages(s->dma_address, s->dma_length); |
| 372 | >> PAGE_SHIFT; | ||
| 373 | __iommu_free(tbl, vaddr, npages); | 382 | __iommu_free(tbl, vaddr, npages); |
| 374 | s->dma_address = DMA_ERROR_CODE; | 383 | s->dma_address = DMA_ERROR_CODE; |
| 375 | s->dma_length = 0; | 384 | s->dma_length = 0; |
| @@ -398,8 +407,7 @@ void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, | |||
| 398 | 407 | ||
| 399 | if (sglist->dma_length == 0) | 408 | if (sglist->dma_length == 0) |
| 400 | break; | 409 | break; |
| 401 | npages = (PAGE_ALIGN(dma_handle + sglist->dma_length) | 410 | npages = iommu_num_pages(dma_handle,sglist->dma_length); |
| 402 | - (dma_handle & PAGE_MASK)) >> PAGE_SHIFT; | ||
| 403 | __iommu_free(tbl, dma_handle, npages); | 411 | __iommu_free(tbl, dma_handle, npages); |
| 404 | sglist++; | 412 | sglist++; |
| 405 | } | 413 | } |
| @@ -532,12 +540,11 @@ dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr, | |||
| 532 | BUG_ON(direction == DMA_NONE); | 540 | BUG_ON(direction == DMA_NONE); |
| 533 | 541 | ||
| 534 | uaddr = (unsigned long)vaddr; | 542 | uaddr = (unsigned long)vaddr; |
| 535 | npages = PAGE_ALIGN(uaddr + size) - (uaddr & PAGE_MASK); | 543 | npages = iommu_num_pages(uaddr, size); |
| 536 | npages >>= PAGE_SHIFT; | ||
| 537 | 544 | ||
| 538 | if (tbl) { | 545 | if (tbl) { |
| 539 | dma_handle = iommu_alloc(tbl, vaddr, npages, direction, | 546 | dma_handle = iommu_alloc(tbl, vaddr, npages, direction, |
| 540 | mask >> PAGE_SHIFT, 0); | 547 | mask >> IOMMU_PAGE_SHIFT, 0); |
| 541 | if (dma_handle == DMA_ERROR_CODE) { | 548 | if (dma_handle == DMA_ERROR_CODE) { |
| 542 | if (printk_ratelimit()) { | 549 | if (printk_ratelimit()) { |
| 543 | printk(KERN_INFO "iommu_alloc failed, " | 550 | printk(KERN_INFO "iommu_alloc failed, " |
| @@ -545,7 +552,7 @@ dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr, | |||
| 545 | tbl, vaddr, npages); | 552 | tbl, vaddr, npages); |
| 546 | } | 553 | } |
| 547 | } else | 554 | } else |
| 548 | dma_handle |= (uaddr & ~PAGE_MASK); | 555 | dma_handle |= (uaddr & ~IOMMU_PAGE_MASK); |
| 549 | } | 556 | } |
| 550 | 557 | ||
| 551 | return dma_handle; | 558 | return dma_handle; |
| @@ -554,11 +561,14 @@ dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr, | |||
| 554 | void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle, | 561 | void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle, |
| 555 | size_t size, enum dma_data_direction direction) | 562 | size_t size, enum dma_data_direction direction) |
| 556 | { | 563 | { |
| 564 | unsigned int npages; | ||
| 565 | |||
| 557 | BUG_ON(direction == DMA_NONE); | 566 | BUG_ON(direction == DMA_NONE); |
| 558 | 567 | ||
| 559 | if (tbl) | 568 | if (tbl) { |
| 560 | iommu_free(tbl, dma_handle, (PAGE_ALIGN(dma_handle + size) - | 569 | npages = iommu_num_pages(dma_handle, size); |
| 561 | (dma_handle & PAGE_MASK)) >> PAGE_SHIFT); | 570 | iommu_free(tbl, dma_handle, npages); |
| 571 | } | ||
| 562 | } | 572 | } |
| 563 | 573 | ||
| 564 | /* Allocates a contiguous real buffer and creates mappings over it. | 574 | /* Allocates a contiguous real buffer and creates mappings over it. |
| @@ -570,11 +580,11 @@ void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size, | |||
| 570 | { | 580 | { |
| 571 | void *ret = NULL; | 581 | void *ret = NULL; |
| 572 | dma_addr_t mapping; | 582 | dma_addr_t mapping; |
| 573 | unsigned int npages, order; | 583 | unsigned int order; |
| 584 | unsigned int nio_pages, io_order; | ||
| 574 | struct page *page; | 585 | struct page *page; |
| 575 | 586 | ||
| 576 | size = PAGE_ALIGN(size); | 587 | size = PAGE_ALIGN(size); |
| 577 | npages = size >> PAGE_SHIFT; | ||
| 578 | order = get_order(size); | 588 | order = get_order(size); |
| 579 | 589 | ||
| 580 | /* | 590 | /* |
| @@ -598,8 +608,10 @@ void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size, | |||
| 598 | memset(ret, 0, size); | 608 | memset(ret, 0, size); |
| 599 | 609 | ||
| 600 | /* Set up tces to cover the allocated range */ | 610 | /* Set up tces to cover the allocated range */ |
| 601 | mapping = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL, | 611 | nio_pages = size >> IOMMU_PAGE_SHIFT; |
| 602 | mask >> PAGE_SHIFT, order); | 612 | io_order = get_iommu_order(size); |
| 613 | mapping = iommu_alloc(tbl, ret, nio_pages, DMA_BIDIRECTIONAL, | ||
| 614 | mask >> IOMMU_PAGE_SHIFT, io_order); | ||
| 603 | if (mapping == DMA_ERROR_CODE) { | 615 | if (mapping == DMA_ERROR_CODE) { |
| 604 | free_pages((unsigned long)ret, order); | 616 | free_pages((unsigned long)ret, order); |
| 605 | return NULL; | 617 | return NULL; |
| @@ -611,12 +623,13 @@ void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size, | |||
| 611 | void iommu_free_coherent(struct iommu_table *tbl, size_t size, | 623 | void iommu_free_coherent(struct iommu_table *tbl, size_t size, |
| 612 | void *vaddr, dma_addr_t dma_handle) | 624 | void *vaddr, dma_addr_t dma_handle) |
| 613 | { | 625 | { |
| 614 | unsigned int npages; | ||
| 615 | |||
| 616 | if (tbl) { | 626 | if (tbl) { |
| 627 | unsigned int nio_pages; | ||
| 628 | |||
| 629 | size = PAGE_ALIGN(size); | ||
| 630 | nio_pages = size >> IOMMU_PAGE_SHIFT; | ||
| 631 | iommu_free(tbl, dma_handle, nio_pages); | ||
| 617 | size = PAGE_ALIGN(size); | 632 | size = PAGE_ALIGN(size); |
| 618 | npages = size >> PAGE_SHIFT; | ||
| 619 | iommu_free(tbl, dma_handle, npages); | ||
| 620 | free_pages((unsigned long)vaddr, get_order(size)); | 633 | free_pages((unsigned long)vaddr, get_order(size)); |
| 621 | } | 634 | } |
| 622 | } | 635 | } |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 88fd73fdf048..412bea3cf813 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -102,80 +102,6 @@ _GLOBAL(reloc_got2) | |||
| 102 | blr | 102 | blr |
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| 105 | * identify_cpu, | ||
| 106 | * called with r3 = data offset and r4 = CPU number | ||
| 107 | * doesn't change r3 | ||
| 108 | */ | ||
| 109 | _GLOBAL(identify_cpu) | ||
| 110 | addis r8,r3,cpu_specs@ha | ||
| 111 | addi r8,r8,cpu_specs@l | ||
| 112 | mfpvr r7 | ||
| 113 | 1: | ||
| 114 | lwz r5,CPU_SPEC_PVR_MASK(r8) | ||
| 115 | and r5,r5,r7 | ||
| 116 | lwz r6,CPU_SPEC_PVR_VALUE(r8) | ||
| 117 | cmplw 0,r6,r5 | ||
| 118 | beq 1f | ||
| 119 | addi r8,r8,CPU_SPEC_ENTRY_SIZE | ||
| 120 | b 1b | ||
| 121 | 1: | ||
| 122 | addis r6,r3,cur_cpu_spec@ha | ||
| 123 | addi r6,r6,cur_cpu_spec@l | ||
| 124 | sub r8,r8,r3 | ||
| 125 | stw r8,0(r6) | ||
| 126 | blr | ||
| 127 | |||
| 128 | /* | ||
| 129 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 130 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 131 | * r3 = data offset (not changed) | ||
| 132 | */ | ||
| 133 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 134 | /* Get CPU 0 features */ | ||
| 135 | addis r6,r3,cur_cpu_spec@ha | ||
| 136 | addi r6,r6,cur_cpu_spec@l | ||
| 137 | lwz r4,0(r6) | ||
| 138 | add r4,r4,r3 | ||
| 139 | lwz r4,CPU_SPEC_FEATURES(r4) | ||
| 140 | |||
| 141 | /* Get the fixup table */ | ||
| 142 | addis r6,r3,__start___ftr_fixup@ha | ||
| 143 | addi r6,r6,__start___ftr_fixup@l | ||
| 144 | addis r7,r3,__stop___ftr_fixup@ha | ||
| 145 | addi r7,r7,__stop___ftr_fixup@l | ||
| 146 | |||
| 147 | /* Do the fixup */ | ||
| 148 | 1: cmplw 0,r6,r7 | ||
| 149 | bgelr | ||
| 150 | addi r6,r6,16 | ||
| 151 | lwz r8,-16(r6) /* mask */ | ||
| 152 | and r8,r8,r4 | ||
| 153 | lwz r9,-12(r6) /* value */ | ||
| 154 | cmplw 0,r8,r9 | ||
| 155 | beq 1b | ||
| 156 | lwz r8,-8(r6) /* section begin */ | ||
| 157 | lwz r9,-4(r6) /* section end */ | ||
| 158 | subf. r9,r8,r9 | ||
| 159 | beq 1b | ||
| 160 | /* write nops over the section of code */ | ||
| 161 | /* todo: if large section, add a branch at the start of it */ | ||
| 162 | srwi r9,r9,2 | ||
| 163 | mtctr r9 | ||
| 164 | add r8,r8,r3 | ||
| 165 | lis r0,0x60000000@h /* nop */ | ||
| 166 | 3: stw r0,0(r8) | ||
| 167 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 168 | beq 2f | ||
| 169 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 170 | sync | ||
| 171 | icbi 0,r8 | ||
| 172 | 2: addi r8,r8,4 | ||
| 173 | bdnz 3b | ||
| 174 | sync /* additional sync needed on g4 */ | ||
| 175 | isync | ||
| 176 | b 1b | ||
| 177 | |||
| 178 | /* | ||
| 179 | * call_setup_cpu - call the setup_cpu function for this cpu | 105 | * call_setup_cpu - call the setup_cpu function for this cpu |
| 180 | * r3 = data offset, r24 = cpu number | 106 | * r3 = data offset, r24 = cpu number |
| 181 | * | 107 | * |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index c70e20708a1f..21fd2c662a99 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
| @@ -246,130 +246,6 @@ _GLOBAL(__flush_dcache_icache) | |||
| 246 | isync | 246 | isync |
| 247 | blr | 247 | blr |
| 248 | 248 | ||
| 249 | /* | ||
| 250 | * identify_cpu and calls setup_cpu | ||
| 251 | * In: r3 = base of the cpu_specs array | ||
| 252 | * r4 = address of cur_cpu_spec | ||
| 253 | * r5 = relocation offset | ||
| 254 | */ | ||
| 255 | _GLOBAL(identify_cpu) | ||
| 256 | mfpvr r7 | ||
| 257 | 1: | ||
| 258 | lwz r8,CPU_SPEC_PVR_MASK(r3) | ||
| 259 | and r8,r8,r7 | ||
| 260 | lwz r9,CPU_SPEC_PVR_VALUE(r3) | ||
| 261 | cmplw 0,r9,r8 | ||
| 262 | beq 1f | ||
| 263 | addi r3,r3,CPU_SPEC_ENTRY_SIZE | ||
| 264 | b 1b | ||
| 265 | 1: | ||
| 266 | sub r0,r3,r5 | ||
| 267 | std r0,0(r4) | ||
| 268 | ld r4,CPU_SPEC_SETUP(r3) | ||
| 269 | cmpdi 0,r4,0 | ||
| 270 | add r4,r4,r5 | ||
| 271 | beqlr | ||
| 272 | ld r4,0(r4) | ||
| 273 | add r4,r4,r5 | ||
| 274 | mtctr r4 | ||
| 275 | /* Calling convention for cpu setup is r3=offset, r4=cur_cpu_spec */ | ||
| 276 | mr r4,r3 | ||
| 277 | mr r3,r5 | ||
| 278 | bctr | ||
| 279 | |||
| 280 | /* | ||
| 281 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 282 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 283 | * r3 = data offset (not changed) | ||
| 284 | */ | ||
| 285 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 286 | /* Get CPU 0 features */ | ||
| 287 | LOAD_REG_IMMEDIATE(r6,cur_cpu_spec) | ||
| 288 | sub r6,r6,r3 | ||
| 289 | ld r4,0(r6) | ||
| 290 | sub r4,r4,r3 | ||
| 291 | ld r4,CPU_SPEC_FEATURES(r4) | ||
| 292 | /* Get the fixup table */ | ||
| 293 | LOAD_REG_IMMEDIATE(r6,__start___ftr_fixup) | ||
| 294 | sub r6,r6,r3 | ||
| 295 | LOAD_REG_IMMEDIATE(r7,__stop___ftr_fixup) | ||
| 296 | sub r7,r7,r3 | ||
| 297 | /* Do the fixup */ | ||
| 298 | 1: cmpld r6,r7 | ||
| 299 | bgelr | ||
| 300 | addi r6,r6,32 | ||
| 301 | ld r8,-32(r6) /* mask */ | ||
| 302 | and r8,r8,r4 | ||
| 303 | ld r9,-24(r6) /* value */ | ||
| 304 | cmpld r8,r9 | ||
| 305 | beq 1b | ||
| 306 | ld r8,-16(r6) /* section begin */ | ||
| 307 | ld r9,-8(r6) /* section end */ | ||
| 308 | subf. r9,r8,r9 | ||
| 309 | beq 1b | ||
| 310 | /* write nops over the section of code */ | ||
| 311 | /* todo: if large section, add a branch at the start of it */ | ||
| 312 | srwi r9,r9,2 | ||
| 313 | mtctr r9 | ||
| 314 | sub r8,r8,r3 | ||
| 315 | lis r0,0x60000000@h /* nop */ | ||
| 316 | 3: stw r0,0(r8) | ||
| 317 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 318 | beq 2f | ||
| 319 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 320 | sync | ||
| 321 | icbi 0,r8 | ||
| 322 | 2: addi r8,r8,4 | ||
| 323 | bdnz 3b | ||
| 324 | sync /* additional sync needed on g4 */ | ||
| 325 | isync | ||
| 326 | b 1b | ||
| 327 | |||
| 328 | /* | ||
| 329 | * do_fw_ftr_fixups - goes through the list of firmware feature fixups | ||
| 330 | * and writes nop's over sections of code that don't apply for this firmware. | ||
| 331 | * r3 = data offset (not changed) | ||
| 332 | */ | ||
| 333 | _GLOBAL(do_fw_ftr_fixups) | ||
| 334 | /* Get firmware features */ | ||
| 335 | LOAD_REG_IMMEDIATE(r6,powerpc_firmware_features) | ||
| 336 | sub r6,r6,r3 | ||
| 337 | ld r4,0(r6) | ||
| 338 | /* Get the fixup table */ | ||
| 339 | LOAD_REG_IMMEDIATE(r6,__start___fw_ftr_fixup) | ||
| 340 | sub r6,r6,r3 | ||
| 341 | LOAD_REG_IMMEDIATE(r7,__stop___fw_ftr_fixup) | ||
| 342 | sub r7,r7,r3 | ||
| 343 | /* Do the fixup */ | ||
| 344 | 1: cmpld r6,r7 | ||
| 345 | bgelr | ||
| 346 | addi r6,r6,32 | ||
| 347 | ld r8,-32(r6) /* mask */ | ||
| 348 | and r8,r8,r4 | ||
| 349 | ld r9,-24(r6) /* value */ | ||
| 350 | cmpld r8,r9 | ||
| 351 | beq 1b | ||
| 352 | ld r8,-16(r6) /* section begin */ | ||
| 353 | ld r9,-8(r6) /* section end */ | ||
| 354 | subf. r9,r8,r9 | ||
| 355 | beq 1b | ||
| 356 | /* write nops over the section of code */ | ||
| 357 | /* todo: if large section, add a branch at the start of it */ | ||
| 358 | srwi r9,r9,2 | ||
| 359 | mtctr r9 | ||
| 360 | sub r8,r8,r3 | ||
| 361 | lis r0,0x60000000@h /* nop */ | ||
| 362 | 3: stw r0,0(r8) | ||
| 363 | BEGIN_FTR_SECTION | ||
| 364 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 365 | sync | ||
| 366 | icbi 0,r8 | ||
| 367 | END_FTR_SECTION_IFSET(CPU_FTR_SPLIT_ID_CACHE) | ||
| 368 | addi r8,r8,4 | ||
| 369 | bdnz 3b | ||
| 370 | sync /* additional sync needed on g4 */ | ||
| 371 | isync | ||
| 372 | b 1b | ||
| 373 | 249 | ||
| 374 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) | 250 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) |
| 375 | /* | 251 | /* |
diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c index 92f4e5f64f02..e2c3c6a85f33 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
| 25 | #include <linux/cache.h> | 25 | #include <linux/cache.h> |
| 26 | 26 | ||
| 27 | #include "setup.h" | ||
| 28 | |||
| 27 | #if 0 | 29 | #if 0 |
| 28 | #define DEBUGP printk | 30 | #define DEBUGP printk |
| 29 | #else | 31 | #else |
| @@ -269,33 +271,50 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 269 | return 0; | 271 | return 0; |
| 270 | } | 272 | } |
| 271 | 273 | ||
| 274 | static const Elf_Shdr *find_section(const Elf_Ehdr *hdr, | ||
| 275 | const Elf_Shdr *sechdrs, | ||
| 276 | const char *name) | ||
| 277 | { | ||
| 278 | char *secstrings; | ||
| 279 | unsigned int i; | ||
| 280 | |||
| 281 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | ||
| 282 | for (i = 1; i < hdr->e_shnum; i++) | ||
| 283 | if (strcmp(secstrings+sechdrs[i].sh_name, name) == 0) | ||
| 284 | return &sechdrs[i]; | ||
| 285 | return NULL; | ||
| 286 | } | ||
| 287 | |||
| 272 | int module_finalize(const Elf_Ehdr *hdr, | 288 | int module_finalize(const Elf_Ehdr *hdr, |
| 273 | const Elf_Shdr *sechdrs, | 289 | const Elf_Shdr *sechdrs, |
| 274 | struct module *me) | 290 | struct module *me) |
| 275 | { | 291 | { |
| 276 | char *secstrings; | 292 | const Elf_Shdr *sect; |
| 277 | unsigned int i; | ||
| 278 | 293 | ||
| 279 | me->arch.bug_table = NULL; | 294 | me->arch.bug_table = NULL; |
| 280 | me->arch.num_bugs = 0; | 295 | me->arch.num_bugs = 0; |
| 281 | 296 | ||
| 282 | /* Find the __bug_table section, if present */ | 297 | /* Find the __bug_table section, if present */ |
| 283 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 298 | sect = find_section(hdr, sechdrs, "__bug_table"); |
| 284 | for (i = 1; i < hdr->e_shnum; i++) { | 299 | if (sect != NULL) { |
| 285 | if (strcmp(secstrings+sechdrs[i].sh_name, "__bug_table")) | 300 | me->arch.bug_table = (void *) sect->sh_addr; |
| 286 | continue; | 301 | me->arch.num_bugs = sect->sh_size / sizeof(struct bug_entry); |
| 287 | me->arch.bug_table = (void *) sechdrs[i].sh_addr; | ||
| 288 | me->arch.num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry); | ||
| 289 | break; | ||
| 290 | } | 302 | } |
| 291 | 303 | ||
| 292 | /* | 304 | /* |
| 293 | * Strictly speaking this should have a spinlock to protect against | 305 | * Strictly speaking this should have a spinlock to protect against |
| 294 | * traversals, but since we only traverse on BUG()s, a spinlock | 306 | * traversals, but since we only traverse on BUG()s, a spinlock |
| 295 | * could potentially lead to deadlock and thus be counter-productive. | 307 | * could potentially lead to deadlock and thus be counter-productive. |
| 296 | */ | 308 | */ |
| 297 | list_add(&me->arch.bug_list, &module_bug_list); | 309 | list_add(&me->arch.bug_list, &module_bug_list); |
| 298 | 310 | ||
| 311 | /* Apply feature fixups */ | ||
| 312 | sect = find_section(hdr, sechdrs, "__ftr_fixup"); | ||
| 313 | if (sect != NULL) | ||
| 314 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 315 | (void *)sect->sh_addr, | ||
| 316 | (void *)sect->sh_addr + sect->sh_size); | ||
| 317 | |||
| 299 | return 0; | 318 | return 0; |
| 300 | } | 319 | } |
| 301 | 320 | ||
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c index ba34001fca8e..8dd1f0aae5d6 100644 --- a/arch/powerpc/kernel/module_64.c +++ b/arch/powerpc/kernel/module_64.c | |||
| @@ -22,6 +22,9 @@ | |||
| 22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
| 23 | #include <asm/module.h> | 23 | #include <asm/module.h> |
| 24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
| 25 | #include <asm/firmware.h> | ||
| 26 | |||
| 27 | #include "setup.h" | ||
| 25 | 28 | ||
| 26 | /* FIXME: We don't do .init separately. To do this, we'd need to have | 29 | /* FIXME: We don't do .init separately. To do this, we'd need to have |
| 27 | a separate r2 value in the init and core section, and stub between | 30 | a separate r2 value in the init and core section, and stub between |
| @@ -400,6 +403,11 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
| 400 | | (value & 0x03fffffc); | 403 | | (value & 0x03fffffc); |
| 401 | break; | 404 | break; |
| 402 | 405 | ||
| 406 | case R_PPC64_REL64: | ||
| 407 | /* 64 bits relative (used by features fixups) */ | ||
| 408 | *location = value - (unsigned long)location; | ||
| 409 | break; | ||
| 410 | |||
| 403 | default: | 411 | default: |
| 404 | printk("%s: Unknown ADD relocation: %lu\n", | 412 | printk("%s: Unknown ADD relocation: %lu\n", |
| 405 | me->name, | 413 | me->name, |
| @@ -413,23 +421,33 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
| 413 | 421 | ||
| 414 | LIST_HEAD(module_bug_list); | 422 | LIST_HEAD(module_bug_list); |
| 415 | 423 | ||
| 416 | int module_finalize(const Elf_Ehdr *hdr, | 424 | static const Elf_Shdr *find_section(const Elf_Ehdr *hdr, |
| 417 | const Elf_Shdr *sechdrs, struct module *me) | 425 | const Elf_Shdr *sechdrs, |
| 426 | const char *name) | ||
| 418 | { | 427 | { |
| 419 | char *secstrings; | 428 | char *secstrings; |
| 420 | unsigned int i; | 429 | unsigned int i; |
| 421 | 430 | ||
| 431 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | ||
| 432 | for (i = 1; i < hdr->e_shnum; i++) | ||
| 433 | if (strcmp(secstrings+sechdrs[i].sh_name, name) == 0) | ||
| 434 | return &sechdrs[i]; | ||
| 435 | return NULL; | ||
| 436 | } | ||
| 437 | |||
| 438 | int module_finalize(const Elf_Ehdr *hdr, | ||
| 439 | const Elf_Shdr *sechdrs, struct module *me) | ||
| 440 | { | ||
| 441 | const Elf_Shdr *sect; | ||
| 442 | |||
| 422 | me->arch.bug_table = NULL; | 443 | me->arch.bug_table = NULL; |
| 423 | me->arch.num_bugs = 0; | 444 | me->arch.num_bugs = 0; |
| 424 | 445 | ||
| 425 | /* Find the __bug_table section, if present */ | 446 | /* Find the __bug_table section, if present */ |
| 426 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 447 | sect = find_section(hdr, sechdrs, "__bug_table"); |
| 427 | for (i = 1; i < hdr->e_shnum; i++) { | 448 | if (sect != NULL) { |
| 428 | if (strcmp(secstrings+sechdrs[i].sh_name, "__bug_table")) | 449 | me->arch.bug_table = (void *) sect->sh_addr; |
| 429 | continue; | 450 | me->arch.num_bugs = sect->sh_size / sizeof(struct bug_entry); |
| 430 | me->arch.bug_table = (void *) sechdrs[i].sh_addr; | ||
| 431 | me->arch.num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry); | ||
| 432 | break; | ||
| 433 | } | 451 | } |
| 434 | 452 | ||
| 435 | /* | 453 | /* |
| @@ -439,6 +457,19 @@ int module_finalize(const Elf_Ehdr *hdr, | |||
| 439 | */ | 457 | */ |
| 440 | list_add(&me->arch.bug_list, &module_bug_list); | 458 | list_add(&me->arch.bug_list, &module_bug_list); |
| 441 | 459 | ||
| 460 | /* Apply feature fixups */ | ||
| 461 | sect = find_section(hdr, sechdrs, "__ftr_fixup"); | ||
| 462 | if (sect != NULL) | ||
| 463 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 464 | (void *)sect->sh_addr, | ||
| 465 | (void *)sect->sh_addr + sect->sh_size); | ||
| 466 | |||
| 467 | sect = find_section(hdr, sechdrs, "__fw_ftr_fixup"); | ||
| 468 | if (sect != NULL) | ||
| 469 | do_feature_fixups(powerpc_firmware_features, | ||
| 470 | (void *)sect->sh_addr, | ||
| 471 | (void *)sect->sh_addr + sect->sh_size); | ||
| 472 | |||
| 442 | return 0; | 473 | return 0; |
| 443 | } | 474 | } |
| 444 | 475 | ||
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index 9b49f8691d29..0d9ff72e2852 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c | |||
| @@ -441,14 +441,14 @@ update_bridge_base(struct pci_bus *bus, int i) | |||
| 441 | end = res->end - off; | 441 | end = res->end - off; |
| 442 | io_base_lo = (start >> 8) & PCI_IO_RANGE_MASK; | 442 | io_base_lo = (start >> 8) & PCI_IO_RANGE_MASK; |
| 443 | io_limit_lo = (end >> 8) & PCI_IO_RANGE_MASK; | 443 | io_limit_lo = (end >> 8) & PCI_IO_RANGE_MASK; |
| 444 | if (end > 0xffff) { | 444 | if (end > 0xffff) |
| 445 | pci_write_config_word(dev, PCI_IO_BASE_UPPER16, | ||
| 446 | start >> 16); | ||
| 447 | pci_write_config_word(dev, PCI_IO_LIMIT_UPPER16, | ||
| 448 | end >> 16); | ||
| 449 | io_base_lo |= PCI_IO_RANGE_TYPE_32; | 445 | io_base_lo |= PCI_IO_RANGE_TYPE_32; |
| 450 | } else | 446 | else |
| 451 | io_base_lo |= PCI_IO_RANGE_TYPE_16; | 447 | io_base_lo |= PCI_IO_RANGE_TYPE_16; |
| 448 | pci_write_config_word(dev, PCI_IO_BASE_UPPER16, | ||
| 449 | start >> 16); | ||
| 450 | pci_write_config_word(dev, PCI_IO_LIMIT_UPPER16, | ||
| 451 | end >> 16); | ||
| 452 | pci_write_config_byte(dev, PCI_IO_BASE, io_base_lo); | 452 | pci_write_config_byte(dev, PCI_IO_BASE, io_base_lo); |
| 453 | pci_write_config_byte(dev, PCI_IO_LIMIT, io_limit_lo); | 453 | pci_write_config_byte(dev, PCI_IO_LIMIT, io_limit_lo); |
| 454 | 454 | ||
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 78d3c0fc8dfb..9bae8a5bf671 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
| @@ -199,8 +199,14 @@ struct pci_controller * pcibios_alloc_controller(struct device_node *dev) | |||
| 199 | pci_setup_pci_controller(phb); | 199 | pci_setup_pci_controller(phb); |
| 200 | phb->arch_data = dev; | 200 | phb->arch_data = dev; |
| 201 | phb->is_dynamic = mem_init_done; | 201 | phb->is_dynamic = mem_init_done; |
| 202 | if (dev) | 202 | if (dev) { |
| 203 | PHB_SET_NODE(phb, of_node_to_nid(dev)); | 203 | int nid = of_node_to_nid(dev); |
| 204 | |||
| 205 | if (nid < 0 || !node_online(nid)) | ||
| 206 | nid = -1; | ||
| 207 | |||
| 208 | PHB_SET_NODE(phb, nid); | ||
| 209 | } | ||
| 204 | return phb; | 210 | return phb; |
| 205 | } | 211 | } |
| 206 | 212 | ||
diff --git a/arch/powerpc/kernel/perfmon_fsl_booke.c b/arch/powerpc/kernel/perfmon_fsl_booke.c deleted file mode 100644 index e0dcf2b41fbe..000000000000 --- a/arch/powerpc/kernel/perfmon_fsl_booke.c +++ /dev/null | |||
| @@ -1,221 +0,0 @@ | |||
| 1 | /* arch/powerpc/kernel/perfmon_fsl_booke.c | ||
| 2 | * Freescale Book-E Performance Monitor code | ||
| 3 | * | ||
| 4 | * Author: Andy Fleming | ||
| 5 | * Copyright (c) 2004 Freescale Semiconductor, Inc | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * as published by the Free Software Foundation; either version | ||
| 10 | * 2 of the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/errno.h> | ||
| 14 | #include <linux/sched.h> | ||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/mm.h> | ||
| 17 | #include <linux/stddef.h> | ||
| 18 | #include <linux/unistd.h> | ||
| 19 | #include <linux/ptrace.h> | ||
| 20 | #include <linux/slab.h> | ||
| 21 | #include <linux/user.h> | ||
| 22 | #include <linux/a.out.h> | ||
| 23 | #include <linux/interrupt.h> | ||
| 24 | #include <linux/init.h> | ||
| 25 | #include <linux/module.h> | ||
| 26 | #include <linux/prctl.h> | ||
| 27 | |||
| 28 | #include <asm/pgtable.h> | ||
| 29 | #include <asm/uaccess.h> | ||
| 30 | #include <asm/system.h> | ||
| 31 | #include <asm/io.h> | ||
| 32 | #include <asm/reg.h> | ||
| 33 | #include <asm/xmon.h> | ||
| 34 | #include <asm/pmc.h> | ||
| 35 | |||
| 36 | static inline u32 get_pmlca(int ctr); | ||
| 37 | static inline void set_pmlca(int ctr, u32 pmlca); | ||
| 38 | |||
| 39 | static inline u32 get_pmlca(int ctr) | ||
| 40 | { | ||
| 41 | u32 pmlca; | ||
| 42 | |||
| 43 | switch (ctr) { | ||
| 44 | case 0: | ||
| 45 | pmlca = mfpmr(PMRN_PMLCA0); | ||
| 46 | break; | ||
| 47 | case 1: | ||
| 48 | pmlca = mfpmr(PMRN_PMLCA1); | ||
| 49 | break; | ||
| 50 | case 2: | ||
| 51 | pmlca = mfpmr(PMRN_PMLCA2); | ||
| 52 | break; | ||
| 53 | case 3: | ||
| 54 | pmlca = mfpmr(PMRN_PMLCA3); | ||
| 55 | break; | ||
| 56 | default: | ||
| 57 | panic("Bad ctr number\n"); | ||
| 58 | } | ||
| 59 | |||
| 60 | return pmlca; | ||
| 61 | } | ||
| 62 | |||
| 63 | static inline void set_pmlca(int ctr, u32 pmlca) | ||
| 64 | { | ||
| 65 | switch (ctr) { | ||
| 66 | case 0: | ||
| 67 | mtpmr(PMRN_PMLCA0, pmlca); | ||
| 68 | break; | ||
| 69 | case 1: | ||
| 70 | mtpmr(PMRN_PMLCA1, pmlca); | ||
| 71 | break; | ||
| 72 | case 2: | ||
| 73 | mtpmr(PMRN_PMLCA2, pmlca); | ||
| 74 | break; | ||
| 75 | case 3: | ||
| 76 | mtpmr(PMRN_PMLCA3, pmlca); | ||
| 77 | break; | ||
| 78 | default: | ||
| 79 | panic("Bad ctr number\n"); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | void init_pmc_stop(int ctr) | ||
| 84 | { | ||
| 85 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | | ||
| 86 | PMLCA_FCM1 | PMLCA_FCM0); | ||
| 87 | u32 pmlcb = 0; | ||
| 88 | |||
| 89 | switch (ctr) { | ||
| 90 | case 0: | ||
| 91 | mtpmr(PMRN_PMLCA0, pmlca); | ||
| 92 | mtpmr(PMRN_PMLCB0, pmlcb); | ||
| 93 | break; | ||
| 94 | case 1: | ||
| 95 | mtpmr(PMRN_PMLCA1, pmlca); | ||
| 96 | mtpmr(PMRN_PMLCB1, pmlcb); | ||
| 97 | break; | ||
| 98 | case 2: | ||
| 99 | mtpmr(PMRN_PMLCA2, pmlca); | ||
| 100 | mtpmr(PMRN_PMLCB2, pmlcb); | ||
| 101 | break; | ||
| 102 | case 3: | ||
| 103 | mtpmr(PMRN_PMLCA3, pmlca); | ||
| 104 | mtpmr(PMRN_PMLCB3, pmlcb); | ||
| 105 | break; | ||
| 106 | default: | ||
| 107 | panic("Bad ctr number!\n"); | ||
| 108 | } | ||
| 109 | } | ||
| 110 | |||
| 111 | void set_pmc_event(int ctr, int event) | ||
| 112 | { | ||
| 113 | u32 pmlca; | ||
| 114 | |||
| 115 | pmlca = get_pmlca(ctr); | ||
| 116 | |||
| 117 | pmlca = (pmlca & ~PMLCA_EVENT_MASK) | | ||
| 118 | ((event << PMLCA_EVENT_SHIFT) & | ||
| 119 | PMLCA_EVENT_MASK); | ||
| 120 | |||
| 121 | set_pmlca(ctr, pmlca); | ||
| 122 | } | ||
| 123 | |||
| 124 | void set_pmc_user_kernel(int ctr, int user, int kernel) | ||
| 125 | { | ||
| 126 | u32 pmlca; | ||
| 127 | |||
| 128 | pmlca = get_pmlca(ctr); | ||
| 129 | |||
| 130 | if(user) | ||
| 131 | pmlca &= ~PMLCA_FCU; | ||
| 132 | else | ||
| 133 | pmlca |= PMLCA_FCU; | ||
| 134 | |||
| 135 | if(kernel) | ||
| 136 | pmlca &= ~PMLCA_FCS; | ||
| 137 | else | ||
| 138 | pmlca |= PMLCA_FCS; | ||
| 139 | |||
| 140 | set_pmlca(ctr, pmlca); | ||
| 141 | } | ||
| 142 | |||
| 143 | void set_pmc_marked(int ctr, int mark0, int mark1) | ||
| 144 | { | ||
| 145 | u32 pmlca = get_pmlca(ctr); | ||
| 146 | |||
| 147 | if(mark0) | ||
| 148 | pmlca &= ~PMLCA_FCM0; | ||
| 149 | else | ||
| 150 | pmlca |= PMLCA_FCM0; | ||
| 151 | |||
| 152 | if(mark1) | ||
| 153 | pmlca &= ~PMLCA_FCM1; | ||
| 154 | else | ||
| 155 | pmlca |= PMLCA_FCM1; | ||
| 156 | |||
| 157 | set_pmlca(ctr, pmlca); | ||
| 158 | } | ||
| 159 | |||
| 160 | void pmc_start_ctr(int ctr, int enable) | ||
| 161 | { | ||
| 162 | u32 pmlca = get_pmlca(ctr); | ||
| 163 | |||
| 164 | pmlca &= ~PMLCA_FC; | ||
| 165 | |||
| 166 | if (enable) | ||
| 167 | pmlca |= PMLCA_CE; | ||
| 168 | else | ||
| 169 | pmlca &= ~PMLCA_CE; | ||
| 170 | |||
| 171 | set_pmlca(ctr, pmlca); | ||
| 172 | } | ||
| 173 | |||
| 174 | void pmc_start_ctrs(int enable) | ||
| 175 | { | ||
| 176 | u32 pmgc0 = mfpmr(PMRN_PMGC0); | ||
| 177 | |||
| 178 | pmgc0 &= ~PMGC0_FAC; | ||
| 179 | pmgc0 |= PMGC0_FCECE; | ||
| 180 | |||
| 181 | if (enable) | ||
| 182 | pmgc0 |= PMGC0_PMIE; | ||
| 183 | else | ||
| 184 | pmgc0 &= ~PMGC0_PMIE; | ||
| 185 | |||
| 186 | mtpmr(PMRN_PMGC0, pmgc0); | ||
| 187 | } | ||
| 188 | |||
| 189 | void pmc_stop_ctrs(void) | ||
| 190 | { | ||
| 191 | u32 pmgc0 = mfpmr(PMRN_PMGC0); | ||
| 192 | |||
| 193 | pmgc0 |= PMGC0_FAC; | ||
| 194 | |||
| 195 | pmgc0 &= ~(PMGC0_PMIE | PMGC0_FCECE); | ||
| 196 | |||
| 197 | mtpmr(PMRN_PMGC0, pmgc0); | ||
| 198 | } | ||
| 199 | |||
| 200 | void dump_pmcs(void) | ||
| 201 | { | ||
| 202 | printk("pmgc0: %x\n", mfpmr(PMRN_PMGC0)); | ||
| 203 | printk("pmc\t\tpmlca\t\tpmlcb\n"); | ||
| 204 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC0), | ||
| 205 | mfpmr(PMRN_PMLCA0), mfpmr(PMRN_PMLCB0)); | ||
| 206 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC1), | ||
| 207 | mfpmr(PMRN_PMLCA1), mfpmr(PMRN_PMLCB1)); | ||
| 208 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC2), | ||
| 209 | mfpmr(PMRN_PMLCA2), mfpmr(PMRN_PMLCB2)); | ||
| 210 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC3), | ||
| 211 | mfpmr(PMRN_PMLCA3), mfpmr(PMRN_PMLCB3)); | ||
| 212 | } | ||
| 213 | |||
| 214 | EXPORT_SYMBOL(init_pmc_stop); | ||
| 215 | EXPORT_SYMBOL(set_pmc_event); | ||
| 216 | EXPORT_SYMBOL(set_pmc_user_kernel); | ||
| 217 | EXPORT_SYMBOL(set_pmc_marked); | ||
| 218 | EXPORT_SYMBOL(pmc_start_ctr); | ||
| 219 | EXPORT_SYMBOL(pmc_start_ctrs); | ||
| 220 | EXPORT_SYMBOL(pmc_stop_ctrs); | ||
| 221 | EXPORT_SYMBOL(dump_pmcs); | ||
diff --git a/arch/powerpc/kernel/pmc.c b/arch/powerpc/kernel/pmc.c index a0a2efadeabf..3d8f6f44641e 100644 --- a/arch/powerpc/kernel/pmc.c +++ b/arch/powerpc/kernel/pmc.c | |||
| @@ -71,7 +71,7 @@ int reserve_pmc_hardware(perf_irq_t new_perf_irq) | |||
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | pmc_owner_caller = __builtin_return_address(0); | 73 | pmc_owner_caller = __builtin_return_address(0); |
| 74 | perf_irq = new_perf_irq ? : dummy_perf; | 74 | perf_irq = new_perf_irq ? new_perf_irq : dummy_perf; |
| 75 | 75 | ||
| 76 | out: | 76 | out: |
| 77 | spin_unlock(&pmc_owner_lock); | 77 | spin_unlock(&pmc_owner_lock); |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 7b2f6452ba72..f3d4dd580dd6 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -341,13 +341,6 @@ struct task_struct *__switch_to(struct task_struct *prev, | |||
| 341 | 341 | ||
| 342 | static int instructions_to_print = 16; | 342 | static int instructions_to_print = 16; |
| 343 | 343 | ||
| 344 | #ifdef CONFIG_PPC64 | ||
| 345 | #define BAD_PC(pc) ((REGION_ID(pc) != KERNEL_REGION_ID) && \ | ||
| 346 | (REGION_ID(pc) != VMALLOC_REGION_ID)) | ||
| 347 | #else | ||
| 348 | #define BAD_PC(pc) ((pc) < KERNELBASE) | ||
| 349 | #endif | ||
| 350 | |||
| 351 | static void show_instructions(struct pt_regs *regs) | 344 | static void show_instructions(struct pt_regs *regs) |
| 352 | { | 345 | { |
| 353 | int i; | 346 | int i; |
| @@ -366,7 +359,8 @@ static void show_instructions(struct pt_regs *regs) | |||
| 366 | * bad address because the pc *should* only be a | 359 | * bad address because the pc *should* only be a |
| 367 | * kernel address. | 360 | * kernel address. |
| 368 | */ | 361 | */ |
| 369 | if (BAD_PC(pc) || __get_user(instr, (unsigned int __user *)pc)) { | 362 | if (!__kernel_text_address(pc) || |
| 363 | __get_user(instr, (unsigned int __user *)pc)) { | ||
| 370 | printk("XXXXXXXX "); | 364 | printk("XXXXXXXX "); |
| 371 | } else { | 365 | } else { |
| 372 | if (regs->nip == pc) | 366 | if (regs->nip == pc) |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 865b9648d0d5..bdb412d4b748 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -1014,7 +1014,7 @@ EXPORT_SYMBOL(find_all_nodes); | |||
| 1014 | /** Checks if the given "compat" string matches one of the strings in | 1014 | /** Checks if the given "compat" string matches one of the strings in |
| 1015 | * the device's "compatible" property | 1015 | * the device's "compatible" property |
| 1016 | */ | 1016 | */ |
| 1017 | int device_is_compatible(struct device_node *device, const char *compat) | 1017 | int device_is_compatible(const struct device_node *device, const char *compat) |
| 1018 | { | 1018 | { |
| 1019 | const char* cp; | 1019 | const char* cp; |
| 1020 | int cplen, l; | 1020 | int cplen, l; |
| @@ -1491,7 +1491,8 @@ static int __init prom_reconfig_setup(void) | |||
| 1491 | __initcall(prom_reconfig_setup); | 1491 | __initcall(prom_reconfig_setup); |
| 1492 | #endif | 1492 | #endif |
| 1493 | 1493 | ||
| 1494 | struct property *of_find_property(struct device_node *np, const char *name, | 1494 | struct property *of_find_property(const struct device_node *np, |
| 1495 | const char *name, | ||
| 1495 | int *lenp) | 1496 | int *lenp) |
| 1496 | { | 1497 | { |
| 1497 | struct property *pp; | 1498 | struct property *pp; |
| @@ -1512,7 +1513,8 @@ struct property *of_find_property(struct device_node *np, const char *name, | |||
| 1512 | * Find a property with a given name for a given node | 1513 | * Find a property with a given name for a given node |
| 1513 | * and return the value. | 1514 | * and return the value. |
| 1514 | */ | 1515 | */ |
| 1515 | const void *get_property(struct device_node *np, const char *name, int *lenp) | 1516 | const void *get_property(const struct device_node *np, const char *name, |
| 1517 | int *lenp) | ||
| 1516 | { | 1518 | { |
| 1517 | struct property *pp = of_find_property(np,name,lenp); | 1519 | struct property *pp = of_find_property(np,name,lenp); |
| 1518 | return pp ? pp->value : NULL; | 1520 | return pp ? pp->value : NULL; |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 1442b63a75da..6f6fc977cb39 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
| @@ -72,6 +72,10 @@ | |||
| 72 | #define VALIDATE_BUF_SIZE 4096 | 72 | #define VALIDATE_BUF_SIZE 4096 |
| 73 | #define RTAS_MSG_MAXLEN 64 | 73 | #define RTAS_MSG_MAXLEN 64 |
| 74 | 74 | ||
| 75 | /* Quirk - RTAS requires 4k list length and block size */ | ||
| 76 | #define RTAS_BLKLIST_LENGTH 4096 | ||
| 77 | #define RTAS_BLK_SIZE 4096 | ||
| 78 | |||
| 75 | struct flash_block { | 79 | struct flash_block { |
| 76 | char *data; | 80 | char *data; |
| 77 | unsigned long length; | 81 | unsigned long length; |
| @@ -83,7 +87,7 @@ struct flash_block { | |||
| 83 | * into a version/length and translate the pointers | 87 | * into a version/length and translate the pointers |
| 84 | * to absolute. | 88 | * to absolute. |
| 85 | */ | 89 | */ |
| 86 | #define FLASH_BLOCKS_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct flash_block)) | 90 | #define FLASH_BLOCKS_PER_NODE ((RTAS_BLKLIST_LENGTH - 16) / sizeof(struct flash_block)) |
| 87 | struct flash_block_list { | 91 | struct flash_block_list { |
| 88 | unsigned long num_blocks; | 92 | unsigned long num_blocks; |
| 89 | struct flash_block_list *next; | 93 | struct flash_block_list *next; |
| @@ -96,6 +100,9 @@ struct flash_block_list_header { /* just the header of flash_block_list */ | |||
| 96 | 100 | ||
| 97 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; | 101 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; |
| 98 | 102 | ||
| 103 | /* Use slab cache to guarantee 4k alignment */ | ||
| 104 | static kmem_cache_t *flash_block_cache = NULL; | ||
| 105 | |||
| 99 | #define FLASH_BLOCK_LIST_VERSION (1UL) | 106 | #define FLASH_BLOCK_LIST_VERSION (1UL) |
| 100 | 107 | ||
| 101 | /* Local copy of the flash block list. | 108 | /* Local copy of the flash block list. |
| @@ -153,7 +160,7 @@ static int flash_list_valid(struct flash_block_list *flist) | |||
| 153 | return FLASH_IMG_NULL_DATA; | 160 | return FLASH_IMG_NULL_DATA; |
| 154 | } | 161 | } |
| 155 | block_size = f->blocks[i].length; | 162 | block_size = f->blocks[i].length; |
| 156 | if (block_size <= 0 || block_size > PAGE_SIZE) { | 163 | if (block_size <= 0 || block_size > RTAS_BLK_SIZE) { |
| 157 | return FLASH_IMG_BAD_LEN; | 164 | return FLASH_IMG_BAD_LEN; |
| 158 | } | 165 | } |
| 159 | image_size += block_size; | 166 | image_size += block_size; |
| @@ -177,9 +184,9 @@ static void free_flash_list(struct flash_block_list *f) | |||
| 177 | 184 | ||
| 178 | while (f) { | 185 | while (f) { |
| 179 | for (i = 0; i < f->num_blocks; i++) | 186 | for (i = 0; i < f->num_blocks; i++) |
| 180 | free_page((unsigned long)(f->blocks[i].data)); | 187 | kmem_cache_free(flash_block_cache, f->blocks[i].data); |
| 181 | next = f->next; | 188 | next = f->next; |
| 182 | free_page((unsigned long)f); | 189 | kmem_cache_free(flash_block_cache, f); |
| 183 | f = next; | 190 | f = next; |
| 184 | } | 191 | } |
| 185 | } | 192 | } |
| @@ -278,6 +285,12 @@ static ssize_t rtas_flash_read(struct file *file, char __user *buf, | |||
| 278 | return msglen; | 285 | return msglen; |
| 279 | } | 286 | } |
| 280 | 287 | ||
| 288 | /* constructor for flash_block_cache */ | ||
| 289 | void rtas_block_ctor(void *ptr, kmem_cache_t *cache, unsigned long flags) | ||
| 290 | { | ||
| 291 | memset(ptr, 0, RTAS_BLK_SIZE); | ||
| 292 | } | ||
| 293 | |||
| 281 | /* We could be much more efficient here. But to keep this function | 294 | /* We could be much more efficient here. But to keep this function |
| 282 | * simple we allocate a page to the block list no matter how small the | 295 | * simple we allocate a page to the block list no matter how small the |
| 283 | * count is. If the system is low on memory it will be just as well | 296 | * count is. If the system is low on memory it will be just as well |
| @@ -302,7 +315,7 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
| 302 | * proc file | 315 | * proc file |
| 303 | */ | 316 | */ |
| 304 | if (uf->flist == NULL) { | 317 | if (uf->flist == NULL) { |
| 305 | uf->flist = (struct flash_block_list *) get_zeroed_page(GFP_KERNEL); | 318 | uf->flist = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 306 | if (!uf->flist) | 319 | if (!uf->flist) |
| 307 | return -ENOMEM; | 320 | return -ENOMEM; |
| 308 | } | 321 | } |
| @@ -313,21 +326,21 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
| 313 | next_free = fl->num_blocks; | 326 | next_free = fl->num_blocks; |
| 314 | if (next_free == FLASH_BLOCKS_PER_NODE) { | 327 | if (next_free == FLASH_BLOCKS_PER_NODE) { |
| 315 | /* Need to allocate another block_list */ | 328 | /* Need to allocate another block_list */ |
| 316 | fl->next = (struct flash_block_list *)get_zeroed_page(GFP_KERNEL); | 329 | fl->next = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 317 | if (!fl->next) | 330 | if (!fl->next) |
| 318 | return -ENOMEM; | 331 | return -ENOMEM; |
| 319 | fl = fl->next; | 332 | fl = fl->next; |
| 320 | next_free = 0; | 333 | next_free = 0; |
| 321 | } | 334 | } |
| 322 | 335 | ||
| 323 | if (count > PAGE_SIZE) | 336 | if (count > RTAS_BLK_SIZE) |
| 324 | count = PAGE_SIZE; | 337 | count = RTAS_BLK_SIZE; |
| 325 | p = (char *)get_zeroed_page(GFP_KERNEL); | 338 | p = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
| 326 | if (!p) | 339 | if (!p) |
| 327 | return -ENOMEM; | 340 | return -ENOMEM; |
| 328 | 341 | ||
| 329 | if(copy_from_user(p, buffer, count)) { | 342 | if(copy_from_user(p, buffer, count)) { |
| 330 | free_page((unsigned long)p); | 343 | kmem_cache_free(flash_block_cache, p); |
| 331 | return -EFAULT; | 344 | return -EFAULT; |
| 332 | } | 345 | } |
| 333 | fl->blocks[next_free].data = p; | 346 | fl->blocks[next_free].data = p; |
| @@ -791,6 +804,16 @@ int __init rtas_flash_init(void) | |||
| 791 | goto cleanup; | 804 | goto cleanup; |
| 792 | 805 | ||
| 793 | rtas_flash_term_hook = rtas_flash_firmware; | 806 | rtas_flash_term_hook = rtas_flash_firmware; |
| 807 | |||
| 808 | flash_block_cache = kmem_cache_create("rtas_flash_cache", | ||
| 809 | RTAS_BLK_SIZE, RTAS_BLK_SIZE, 0, | ||
| 810 | rtas_block_ctor, NULL); | ||
| 811 | if (!flash_block_cache) { | ||
| 812 | printk(KERN_ERR "%s: failed to create block cache\n", | ||
| 813 | __FUNCTION__); | ||
| 814 | rc = -ENOMEM; | ||
| 815 | goto cleanup; | ||
| 816 | } | ||
| 794 | return 0; | 817 | return 0; |
| 795 | 818 | ||
| 796 | cleanup: | 819 | cleanup: |
| @@ -805,6 +828,10 @@ cleanup: | |||
| 805 | void __exit rtas_flash_cleanup(void) | 828 | void __exit rtas_flash_cleanup(void) |
| 806 | { | 829 | { |
| 807 | rtas_flash_term_hook = NULL; | 830 | rtas_flash_term_hook = NULL; |
| 831 | |||
| 832 | if (flash_block_cache) | ||
| 833 | kmem_cache_destroy(flash_block_cache); | ||
| 834 | |||
| 808 | remove_flash_pde(firmware_flash_pde); | 835 | remove_flash_pde(firmware_flash_pde); |
| 809 | remove_flash_pde(firmware_update_pde); | 836 | remove_flash_pde(firmware_update_pde); |
| 810 | remove_flash_pde(validate_pde); | 837 | remove_flash_pde(validate_pde); |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 191d0ab09222..a4c2964a3ca6 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
| @@ -91,6 +91,7 @@ int ucache_bsize; | |||
| 91 | unsigned long __init early_init(unsigned long dt_ptr) | 91 | unsigned long __init early_init(unsigned long dt_ptr) |
| 92 | { | 92 | { |
| 93 | unsigned long offset = reloc_offset(); | 93 | unsigned long offset = reloc_offset(); |
| 94 | struct cpu_spec *spec; | ||
| 94 | 95 | ||
| 95 | /* First zero the BSS -- use memset_io, some platforms don't have | 96 | /* First zero the BSS -- use memset_io, some platforms don't have |
| 96 | * caches on yet */ | 97 | * caches on yet */ |
| @@ -100,8 +101,11 @@ unsigned long __init early_init(unsigned long dt_ptr) | |||
| 100 | * Identify the CPU type and fix up code sections | 101 | * Identify the CPU type and fix up code sections |
| 101 | * that depend on which cpu we have. | 102 | * that depend on which cpu we have. |
| 102 | */ | 103 | */ |
| 103 | identify_cpu(offset, 0); | 104 | spec = identify_cpu(offset); |
| 104 | do_cpu_ftr_fixups(offset); | 105 | |
| 106 | do_feature_fixups(spec->cpu_features, | ||
| 107 | PTRRELOC(&__start___ftr_fixup), | ||
| 108 | PTRRELOC(&__stop___ftr_fixup)); | ||
| 105 | 109 | ||
| 106 | return KERNELBASE + offset; | 110 | return KERNELBASE + offset; |
| 107 | } | 111 | } |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 4b2e32eab9dc..16278968dab6 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -170,6 +170,9 @@ void __init setup_paca(int cpu) | |||
| 170 | 170 | ||
| 171 | void __init early_setup(unsigned long dt_ptr) | 171 | void __init early_setup(unsigned long dt_ptr) |
| 172 | { | 172 | { |
| 173 | /* Identify CPU type */ | ||
| 174 | identify_cpu(0); | ||
| 175 | |||
| 173 | /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ | 176 | /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ |
| 174 | setup_paca(0); | 177 | setup_paca(0); |
| 175 | 178 | ||
| @@ -348,6 +351,14 @@ void __init setup_system(void) | |||
| 348 | { | 351 | { |
| 349 | DBG(" -> setup_system()\n"); | 352 | DBG(" -> setup_system()\n"); |
| 350 | 353 | ||
| 354 | /* Apply the CPUs-specific and firmware specific fixups to kernel | ||
| 355 | * text (nop out sections not relevant to this CPU or this firmware) | ||
| 356 | */ | ||
| 357 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 358 | &__start___ftr_fixup, &__stop___ftr_fixup); | ||
| 359 | do_feature_fixups(powerpc_firmware_features, | ||
| 360 | &__start___fw_ftr_fixup, &__stop___fw_ftr_fixup); | ||
| 361 | |||
| 351 | /* | 362 | /* |
| 352 | * Unflatten the device-tree passed by prom_init or kexec | 363 | * Unflatten the device-tree passed by prom_init or kexec |
| 353 | */ | 364 | */ |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 5b59bc18dfe7..46a24de36fec 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -220,11 +220,8 @@ static void account_process_time(struct pt_regs *regs) | |||
| 220 | */ | 220 | */ |
| 221 | struct cpu_purr_data { | 221 | struct cpu_purr_data { |
| 222 | int initialized; /* thread is running */ | 222 | int initialized; /* thread is running */ |
| 223 | u64 tb0; /* timebase at origin time */ | ||
| 224 | u64 purr0; /* PURR at origin time */ | ||
| 225 | u64 tb; /* last TB value read */ | 223 | u64 tb; /* last TB value read */ |
| 226 | u64 purr; /* last PURR value read */ | 224 | u64 purr; /* last PURR value read */ |
| 227 | u64 stolen; /* stolen time so far */ | ||
| 228 | spinlock_t lock; | 225 | spinlock_t lock; |
| 229 | }; | 226 | }; |
| 230 | 227 | ||
| @@ -234,10 +231,8 @@ static void snapshot_tb_and_purr(void *data) | |||
| 234 | { | 231 | { |
| 235 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); | 232 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); |
| 236 | 233 | ||
| 237 | p->tb0 = mftb(); | 234 | p->tb = mftb(); |
| 238 | p->purr0 = mfspr(SPRN_PURR); | 235 | p->purr = mfspr(SPRN_PURR); |
| 239 | p->tb = p->tb0; | ||
| 240 | p->purr = 0; | ||
| 241 | wmb(); | 236 | wmb(); |
| 242 | p->initialized = 1; | 237 | p->initialized = 1; |
| 243 | } | 238 | } |
| @@ -258,37 +253,24 @@ void snapshot_timebases(void) | |||
| 258 | 253 | ||
| 259 | void calculate_steal_time(void) | 254 | void calculate_steal_time(void) |
| 260 | { | 255 | { |
| 261 | u64 tb, purr, t0; | 256 | u64 tb, purr; |
| 262 | s64 stolen; | 257 | s64 stolen; |
| 263 | struct cpu_purr_data *p0, *pme, *phim; | 258 | struct cpu_purr_data *pme; |
| 264 | int cpu; | ||
| 265 | 259 | ||
| 266 | if (!cpu_has_feature(CPU_FTR_PURR)) | 260 | if (!cpu_has_feature(CPU_FTR_PURR)) |
| 267 | return; | 261 | return; |
| 268 | cpu = smp_processor_id(); | 262 | pme = &per_cpu(cpu_purr_data, smp_processor_id()); |
| 269 | pme = &per_cpu(cpu_purr_data, cpu); | ||
| 270 | if (!pme->initialized) | 263 | if (!pme->initialized) |
| 271 | return; /* this can happen in early boot */ | 264 | return; /* this can happen in early boot */ |
| 272 | p0 = &per_cpu(cpu_purr_data, cpu & ~1); | 265 | spin_lock(&pme->lock); |
| 273 | phim = &per_cpu(cpu_purr_data, cpu ^ 1); | ||
| 274 | spin_lock(&p0->lock); | ||
| 275 | tb = mftb(); | 266 | tb = mftb(); |
| 276 | purr = mfspr(SPRN_PURR) - pme->purr0; | 267 | purr = mfspr(SPRN_PURR); |
| 277 | if (!phim->initialized || !cpu_online(cpu ^ 1)) { | 268 | stolen = (tb - pme->tb) - (purr - pme->purr); |
| 278 | stolen = (tb - pme->tb) - (purr - pme->purr); | 269 | if (stolen > 0) |
| 279 | } else { | ||
| 280 | t0 = pme->tb0; | ||
| 281 | if (phim->tb0 < t0) | ||
| 282 | t0 = phim->tb0; | ||
| 283 | stolen = phim->tb - t0 - phim->purr - purr - p0->stolen; | ||
| 284 | } | ||
| 285 | if (stolen > 0) { | ||
| 286 | account_steal_time(current, stolen); | 270 | account_steal_time(current, stolen); |
| 287 | p0->stolen += stolen; | ||
| 288 | } | ||
| 289 | pme->tb = tb; | 271 | pme->tb = tb; |
| 290 | pme->purr = purr; | 272 | pme->purr = purr; |
| 291 | spin_unlock(&p0->lock); | 273 | spin_unlock(&pme->lock); |
| 292 | } | 274 | } |
| 293 | 275 | ||
| 294 | /* | 276 | /* |
| @@ -297,30 +279,17 @@ void calculate_steal_time(void) | |||
| 297 | */ | 279 | */ |
| 298 | static void snapshot_purr(void) | 280 | static void snapshot_purr(void) |
| 299 | { | 281 | { |
| 300 | int cpu; | 282 | struct cpu_purr_data *pme; |
| 301 | u64 purr; | ||
| 302 | struct cpu_purr_data *p0, *pme, *phim; | ||
| 303 | unsigned long flags; | 283 | unsigned long flags; |
| 304 | 284 | ||
| 305 | if (!cpu_has_feature(CPU_FTR_PURR)) | 285 | if (!cpu_has_feature(CPU_FTR_PURR)) |
| 306 | return; | 286 | return; |
| 307 | cpu = smp_processor_id(); | 287 | pme = &per_cpu(cpu_purr_data, smp_processor_id()); |
| 308 | pme = &per_cpu(cpu_purr_data, cpu); | 288 | spin_lock_irqsave(&pme->lock, flags); |
| 309 | p0 = &per_cpu(cpu_purr_data, cpu & ~1); | 289 | pme->tb = mftb(); |
| 310 | phim = &per_cpu(cpu_purr_data, cpu ^ 1); | 290 | pme->purr = mfspr(SPRN_PURR); |
| 311 | spin_lock_irqsave(&p0->lock, flags); | ||
| 312 | pme->tb = pme->tb0 = mftb(); | ||
| 313 | purr = mfspr(SPRN_PURR); | ||
| 314 | if (!phim->initialized) { | ||
| 315 | pme->purr = 0; | ||
| 316 | pme->purr0 = purr; | ||
| 317 | } else { | ||
| 318 | /* set p->purr and p->purr0 for no change in p0->stolen */ | ||
| 319 | pme->purr = phim->tb - phim->tb0 - phim->purr - p0->stolen; | ||
| 320 | pme->purr0 = purr - pme->purr; | ||
| 321 | } | ||
| 322 | pme->initialized = 1; | 291 | pme->initialized = 1; |
| 323 | spin_unlock_irqrestore(&p0->lock, flags); | 292 | spin_unlock_irqrestore(&pme->lock, flags); |
| 324 | } | 293 | } |
| 325 | 294 | ||
| 326 | #endif /* CONFIG_PPC_SPLPAR */ | 295 | #endif /* CONFIG_PPC_SPLPAR */ |
| @@ -1045,48 +1014,6 @@ void __init time_init(void) | |||
| 1045 | set_dec(tb_ticks_per_jiffy); | 1014 | set_dec(tb_ticks_per_jiffy); |
| 1046 | } | 1015 | } |
| 1047 | 1016 | ||
| 1048 | #ifdef CONFIG_RTC_CLASS | ||
| 1049 | static int set_rtc_class_time(struct rtc_time *tm) | ||
| 1050 | { | ||
| 1051 | int err; | ||
| 1052 | struct class_device *class_dev = | ||
| 1053 | rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); | ||
| 1054 | |||
| 1055 | if (class_dev == NULL) | ||
| 1056 | return -ENODEV; | ||
| 1057 | |||
| 1058 | err = rtc_set_time(class_dev, tm); | ||
| 1059 | |||
| 1060 | rtc_class_close(class_dev); | ||
| 1061 | |||
| 1062 | return 0; | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | static void get_rtc_class_time(struct rtc_time *tm) | ||
| 1066 | { | ||
| 1067 | int err; | ||
| 1068 | struct class_device *class_dev = | ||
| 1069 | rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); | ||
| 1070 | |||
| 1071 | if (class_dev == NULL) | ||
| 1072 | return; | ||
| 1073 | |||
| 1074 | err = rtc_read_time(class_dev, tm); | ||
| 1075 | |||
| 1076 | rtc_class_close(class_dev); | ||
| 1077 | |||
| 1078 | return; | ||
| 1079 | } | ||
| 1080 | |||
| 1081 | int __init rtc_class_hookup(void) | ||
| 1082 | { | ||
| 1083 | ppc_md.get_rtc_time = get_rtc_class_time; | ||
| 1084 | ppc_md.set_rtc_time = set_rtc_class_time; | ||
| 1085 | |||
| 1086 | return 0; | ||
| 1087 | } | ||
| 1088 | #endif /* CONFIG_RTC_CLASS */ | ||
| 1089 | |||
| 1090 | 1017 | ||
| 1091 | #define FEBRUARY 2 | 1018 | #define FEBRUARY 2 |
| 1092 | #define STARTOFTIME 1970 | 1019 | #define STARTOFTIME 1970 |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index d9f10f2fc372..c66b4771ef44 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
| @@ -843,7 +843,7 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
| 843 | 843 | ||
| 844 | void alignment_exception(struct pt_regs *regs) | 844 | void alignment_exception(struct pt_regs *regs) |
| 845 | { | 845 | { |
| 846 | int fixed = 0; | 846 | int sig, code, fixed = 0; |
| 847 | 847 | ||
| 848 | /* we don't implement logging of alignment exceptions */ | 848 | /* we don't implement logging of alignment exceptions */ |
| 849 | if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS)) | 849 | if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS)) |
| @@ -857,14 +857,16 @@ void alignment_exception(struct pt_regs *regs) | |||
| 857 | 857 | ||
| 858 | /* Operand address was bad */ | 858 | /* Operand address was bad */ |
| 859 | if (fixed == -EFAULT) { | 859 | if (fixed == -EFAULT) { |
| 860 | if (user_mode(regs)) | 860 | sig = SIGSEGV; |
| 861 | _exception(SIGSEGV, regs, SEGV_ACCERR, regs->dar); | 861 | code = SEGV_ACCERR; |
| 862 | else | 862 | } else { |
| 863 | /* Search exception table */ | 863 | sig = SIGBUS; |
| 864 | bad_page_fault(regs, regs->dar, SIGSEGV); | 864 | code = BUS_ADRALN; |
| 865 | return; | ||
| 866 | } | 865 | } |
| 867 | _exception(SIGBUS, regs, BUS_ADRALN, regs->dar); | 866 | if (user_mode(regs)) |
| 867 | _exception(sig, regs, code, regs->dar); | ||
| 868 | else | ||
| 869 | bad_page_fault(regs, regs->dar, sig); | ||
| 868 | } | 870 | } |
| 869 | 871 | ||
| 870 | void StackOverflow(struct pt_regs *regs) | 872 | void StackOverflow(struct pt_regs *regs) |
| @@ -900,14 +902,13 @@ void kernel_fp_unavailable_exception(struct pt_regs *regs) | |||
| 900 | 902 | ||
| 901 | void altivec_unavailable_exception(struct pt_regs *regs) | 903 | void altivec_unavailable_exception(struct pt_regs *regs) |
| 902 | { | 904 | { |
| 903 | #if !defined(CONFIG_ALTIVEC) | ||
| 904 | if (user_mode(regs)) { | 905 | if (user_mode(regs)) { |
| 905 | /* A user program has executed an altivec instruction, | 906 | /* A user program has executed an altivec instruction, |
| 906 | but this kernel doesn't support altivec. */ | 907 | but this kernel doesn't support altivec. */ |
| 907 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | 908 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); |
| 908 | return; | 909 | return; |
| 909 | } | 910 | } |
| 910 | #endif | 911 | |
| 911 | printk(KERN_EMERG "Unrecoverable VMX/Altivec Unavailable Exception " | 912 | printk(KERN_EMERG "Unrecoverable VMX/Altivec Unavailable Exception " |
| 912 | "%lx at %lx\n", regs->trap, regs->nip); | 913 | "%lx at %lx\n", regs->trap, regs->nip); |
| 913 | die("Unrecoverable VMX/Altivec Unavailable Exception", regs, SIGABRT); | 914 | die("Unrecoverable VMX/Altivec Unavailable Exception", regs, SIGABRT); |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 1a7e19cdab39..c913ad5cad29 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
| @@ -36,6 +36,8 @@ | |||
| 36 | #include <asm/vdso.h> | 36 | #include <asm/vdso.h> |
| 37 | #include <asm/vdso_datapage.h> | 37 | #include <asm/vdso_datapage.h> |
| 38 | 38 | ||
| 39 | #include "setup.h" | ||
| 40 | |||
| 39 | #undef DEBUG | 41 | #undef DEBUG |
| 40 | 42 | ||
| 41 | #ifdef DEBUG | 43 | #ifdef DEBUG |
| @@ -586,6 +588,43 @@ static __init int vdso_fixup_datapage(struct lib32_elfinfo *v32, | |||
| 586 | return 0; | 588 | return 0; |
| 587 | } | 589 | } |
| 588 | 590 | ||
| 591 | |||
| 592 | static __init int vdso_fixup_features(struct lib32_elfinfo *v32, | ||
| 593 | struct lib64_elfinfo *v64) | ||
| 594 | { | ||
| 595 | void *start32; | ||
| 596 | unsigned long size32; | ||
| 597 | |||
| 598 | #ifdef CONFIG_PPC64 | ||
| 599 | void *start64; | ||
| 600 | unsigned long size64; | ||
| 601 | |||
| 602 | start64 = find_section64(v64->hdr, "__ftr_fixup", &size64); | ||
| 603 | if (start64) | ||
| 604 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 605 | start64, start64 + size64); | ||
| 606 | |||
| 607 | start64 = find_section64(v64->hdr, "__fw_ftr_fixup", &size64); | ||
| 608 | if (start64) | ||
| 609 | do_feature_fixups(powerpc_firmware_features, | ||
| 610 | start64, start64 + size64); | ||
| 611 | #endif /* CONFIG_PPC64 */ | ||
| 612 | |||
| 613 | start32 = find_section32(v32->hdr, "__ftr_fixup", &size32); | ||
| 614 | if (start32) | ||
| 615 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 616 | start32, start32 + size32); | ||
| 617 | |||
| 618 | #ifdef CONFIG_PPC64 | ||
| 619 | start32 = find_section32(v32->hdr, "__fw_ftr_fixup", &size32); | ||
| 620 | if (start32) | ||
| 621 | do_feature_fixups(powerpc_firmware_features, | ||
| 622 | start32, start32 + size32); | ||
| 623 | #endif /* CONFIG_PPC64 */ | ||
| 624 | |||
| 625 | return 0; | ||
| 626 | } | ||
| 627 | |||
| 589 | static __init int vdso_fixup_alt_funcs(struct lib32_elfinfo *v32, | 628 | static __init int vdso_fixup_alt_funcs(struct lib32_elfinfo *v32, |
| 590 | struct lib64_elfinfo *v64) | 629 | struct lib64_elfinfo *v64) |
| 591 | { | 630 | { |
| @@ -634,6 +673,9 @@ static __init int vdso_setup(void) | |||
| 634 | if (vdso_fixup_datapage(&v32, &v64)) | 673 | if (vdso_fixup_datapage(&v32, &v64)) |
| 635 | return -1; | 674 | return -1; |
| 636 | 675 | ||
| 676 | if (vdso_fixup_features(&v32, &v64)) | ||
| 677 | return -1; | ||
| 678 | |||
| 637 | if (vdso_fixup_alt_funcs(&v32, &v64)) | 679 | if (vdso_fixup_alt_funcs(&v32, &v64)) |
| 638 | return -1; | 680 | return -1; |
| 639 | 681 | ||
| @@ -714,6 +756,7 @@ void __init vdso_init(void) | |||
| 714 | * Setup the syscall map in the vDOS | 756 | * Setup the syscall map in the vDOS |
| 715 | */ | 757 | */ |
| 716 | vdso_setup_syscall_map(); | 758 | vdso_setup_syscall_map(); |
| 759 | |||
| 717 | /* | 760 | /* |
| 718 | * Initialize the vDSO images in memory, that is do necessary | 761 | * Initialize the vDSO images in memory, that is do necessary |
| 719 | * fixups of vDSO symbols, locate trampolines, etc... | 762 | * fixups of vDSO symbols, locate trampolines, etc... |
diff --git a/arch/powerpc/kernel/vdso32/vdso32.lds.S b/arch/powerpc/kernel/vdso32/vdso32.lds.S index 6187af2d54c3..26e138c4ce17 100644 --- a/arch/powerpc/kernel/vdso32/vdso32.lds.S +++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S | |||
| @@ -32,6 +32,18 @@ SECTIONS | |||
| 32 | PROVIDE (_etext = .); | 32 | PROVIDE (_etext = .); |
| 33 | PROVIDE (etext = .); | 33 | PROVIDE (etext = .); |
| 34 | 34 | ||
| 35 | . = ALIGN(8); | ||
| 36 | __ftr_fixup : { | ||
| 37 | *(__ftr_fixup) | ||
| 38 | } | ||
| 39 | |||
| 40 | #ifdef CONFIG_PPC64 | ||
| 41 | . = ALIGN(8); | ||
| 42 | __fw_ftr_fixup : { | ||
| 43 | *(__fw_ftr_fixup) | ||
| 44 | } | ||
| 45 | #endif | ||
| 46 | |||
| 35 | /* Other stuff is appended to the text segment: */ | 47 | /* Other stuff is appended to the text segment: */ |
| 36 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } | 48 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } |
| 37 | .rodata1 : { *(.rodata1) } | 49 | .rodata1 : { *(.rodata1) } |
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S index 56e76ff5498f..40ffd9b6cef7 100644 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | |||
| @@ -229,8 +229,10 @@ V_FUNCTION_BEGIN(__do_get_xsec) | |||
| 229 | xor r0,r8,r8 /* create dependency */ | 229 | xor r0,r8,r8 /* create dependency */ |
| 230 | add r3,r3,r0 | 230 | add r3,r3,r0 |
| 231 | 231 | ||
| 232 | /* Get TB & offset it */ | 232 | /* Get TB & offset it. We use the MFTB macro which will generate |
| 233 | mftb r7 | 233 | * workaround code for Cell. |
| 234 | */ | ||
| 235 | MFTB(r7) | ||
| 234 | ld r9,CFG_TB_ORIG_STAMP(r3) | 236 | ld r9,CFG_TB_ORIG_STAMP(r3) |
| 235 | subf r7,r9,r7 | 237 | subf r7,r9,r7 |
| 236 | 238 | ||
diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S index 4a2b6dc0960c..2d70f35d50b5 100644 --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S | |||
| @@ -31,6 +31,16 @@ SECTIONS | |||
| 31 | PROVIDE (_etext = .); | 31 | PROVIDE (_etext = .); |
| 32 | PROVIDE (etext = .); | 32 | PROVIDE (etext = .); |
| 33 | 33 | ||
| 34 | . = ALIGN(8); | ||
| 35 | __ftr_fixup : { | ||
| 36 | *(__ftr_fixup) | ||
| 37 | } | ||
| 38 | |||
| 39 | . = ALIGN(8); | ||
| 40 | __fw_ftr_fixup : { | ||
| 41 | *(__fw_ftr_fixup) | ||
| 42 | } | ||
| 43 | |||
| 34 | /* Other stuff is appended to the text segment: */ | 44 | /* Other stuff is appended to the text segment: */ |
| 35 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } | 45 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } |
| 36 | .rodata1 : { *(.rodata1) } | 46 | .rodata1 : { *(.rodata1) } |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index cb87e71eec66..ed007878d1bf 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
| @@ -92,9 +92,9 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev) | |||
| 92 | &tbl->it_index, &offset, &size); | 92 | &tbl->it_index, &offset, &size); |
| 93 | 93 | ||
| 94 | /* TCE table size - measured in tce entries */ | 94 | /* TCE table size - measured in tce entries */ |
| 95 | tbl->it_size = size >> PAGE_SHIFT; | 95 | tbl->it_size = size >> IOMMU_PAGE_SHIFT; |
| 96 | /* offset for VIO should always be 0 */ | 96 | /* offset for VIO should always be 0 */ |
| 97 | tbl->it_offset = offset >> PAGE_SHIFT; | 97 | tbl->it_offset = offset >> IOMMU_PAGE_SHIFT; |
| 98 | tbl->it_busno = 0; | 98 | tbl->it_busno = 0; |
| 99 | tbl->it_type = TCE_VB; | 99 | tbl->it_type = TCE_VB; |
| 100 | 100 | ||
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index cb0e8d46c3e8..e8342d867536 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
| @@ -108,13 +108,7 @@ SECTIONS | |||
| 108 | 108 | ||
| 109 | .initcall.init : { | 109 | .initcall.init : { |
| 110 | __initcall_start = .; | 110 | __initcall_start = .; |
| 111 | *(.initcall1.init) | 111 | INITCALLS |
| 112 | *(.initcall2.init) | ||
| 113 | *(.initcall3.init) | ||
| 114 | *(.initcall4.init) | ||
| 115 | *(.initcall5.init) | ||
| 116 | *(.initcall6.init) | ||
| 117 | *(.initcall7.init) | ||
| 118 | __initcall_end = .; | 112 | __initcall_end = .; |
| 119 | } | 113 | } |
| 120 | 114 | ||
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index 9590ba780b98..7e8ded051b5b 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | */ | 10 | */ |
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/kprobes.h> | ||
| 12 | #include <linux/ptrace.h> | 13 | #include <linux/ptrace.h> |
| 13 | #include <asm/sstep.h> | 14 | #include <asm/sstep.h> |
| 14 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
| @@ -25,7 +26,7 @@ extern char system_call_common[]; | |||
| 25 | /* | 26 | /* |
| 26 | * Determine whether a conditional branch instruction would branch. | 27 | * Determine whether a conditional branch instruction would branch. |
| 27 | */ | 28 | */ |
| 28 | static int branch_taken(unsigned int instr, struct pt_regs *regs) | 29 | static int __kprobes branch_taken(unsigned int instr, struct pt_regs *regs) |
| 29 | { | 30 | { |
| 30 | unsigned int bo = (instr >> 21) & 0x1f; | 31 | unsigned int bo = (instr >> 21) & 0x1f; |
| 31 | unsigned int bi; | 32 | unsigned int bi; |
| @@ -51,7 +52,7 @@ static int branch_taken(unsigned int instr, struct pt_regs *regs) | |||
| 51 | * or -1 if the instruction is one that should not be stepped, | 52 | * or -1 if the instruction is one that should not be stepped, |
| 52 | * such as an rfid, or a mtmsrd that would clear MSR_RI. | 53 | * such as an rfid, or a mtmsrd that would clear MSR_RI. |
| 53 | */ | 54 | */ |
| 54 | int emulate_step(struct pt_regs *regs, unsigned int instr) | 55 | int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
| 55 | { | 56 | { |
| 56 | unsigned int opcode, rd; | 57 | unsigned int opcode, rd; |
| 57 | unsigned long int imm; | 58 | unsigned long int imm; |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 5615acc29527..506d89768d45 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
| @@ -480,9 +480,6 @@ static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas) | |||
| 480 | 480 | ||
| 481 | mm->context.high_htlb_areas |= newareas; | 481 | mm->context.high_htlb_areas |= newareas; |
| 482 | 482 | ||
| 483 | /* update the paca copy of the context struct */ | ||
| 484 | get_paca()->context = mm->context; | ||
| 485 | |||
| 486 | /* the context change must make it to memory before the flush, | 483 | /* the context change must make it to memory before the flush, |
| 487 | * so that further SLB misses do the right thing. */ | 484 | * so that further SLB misses do the right thing. */ |
| 488 | mb(); | 485 | mb(); |
| @@ -494,11 +491,15 @@ static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas) | |||
| 494 | return 0; | 491 | return 0; |
| 495 | } | 492 | } |
| 496 | 493 | ||
| 497 | int prepare_hugepage_range(unsigned long addr, unsigned long len) | 494 | int prepare_hugepage_range(unsigned long addr, unsigned long len, pgoff_t pgoff) |
| 498 | { | 495 | { |
| 499 | int err = 0; | 496 | int err = 0; |
| 500 | 497 | ||
| 501 | if ( (addr+len) < addr ) | 498 | if (pgoff & (~HPAGE_MASK >> PAGE_SHIFT)) |
| 499 | return -EINVAL; | ||
| 500 | if (len & ~HPAGE_MASK) | ||
| 501 | return -EINVAL; | ||
| 502 | if (addr & ~HPAGE_MASK) | ||
| 502 | return -EINVAL; | 503 | return -EINVAL; |
| 503 | 504 | ||
| 504 | if (addr < 0x100000000UL) | 505 | if (addr < 0x100000000UL) |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 16fe027bbc12..d1c0758c5611 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
| @@ -307,11 +307,12 @@ void __init paging_init(void) | |||
| 307 | top_of_ram, total_ram); | 307 | top_of_ram, total_ram); |
| 308 | printk(KERN_DEBUG "Memory hole size: %ldMB\n", | 308 | printk(KERN_DEBUG "Memory hole size: %ldMB\n", |
| 309 | (top_of_ram - total_ram) >> 20); | 309 | (top_of_ram - total_ram) >> 20); |
| 310 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | ||
| 310 | #ifdef CONFIG_HIGHMEM | 311 | #ifdef CONFIG_HIGHMEM |
| 311 | max_zone_pfns[0] = total_lowmem >> PAGE_SHIFT; | 312 | max_zone_pfns[ZONE_DMA] = total_lowmem >> PAGE_SHIFT; |
| 312 | max_zone_pfns[1] = top_of_ram >> PAGE_SHIFT; | 313 | max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT; |
| 313 | #else | 314 | #else |
| 314 | max_zone_pfns[0] = top_of_ram >> PAGE_SHIFT; | 315 | max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT; |
| 315 | #endif | 316 | #endif |
| 316 | free_area_init_nodes(max_zone_pfns); | 317 | free_area_init_nodes(max_zone_pfns); |
| 317 | } | 318 | } |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 43c272075e1a..9da01dc8cfd9 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -617,9 +617,9 @@ void __init do_init_bootmem(void) | |||
| 617 | 617 | ||
| 618 | void __init paging_init(void) | 618 | void __init paging_init(void) |
| 619 | { | 619 | { |
| 620 | unsigned long max_zone_pfns[MAX_NR_ZONES] = { | 620 | unsigned long max_zone_pfns[MAX_NR_ZONES]; |
| 621 | lmb_end_of_DRAM() >> PAGE_SHIFT | 621 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); |
| 622 | }; | 622 | max_zone_pfns[ZONE_DMA] = lmb_end_of_DRAM() >> PAGE_SHIFT; |
| 623 | free_area_init_nodes(max_zone_pfns); | 623 | free_area_init_nodes(max_zone_pfns); |
| 624 | } | 624 | } |
| 625 | 625 | ||
diff --git a/arch/powerpc/oprofile/Makefile b/arch/powerpc/oprofile/Makefile index 3145d610b5b0..0b5df9c96ae0 100644 --- a/arch/powerpc/oprofile/Makefile +++ b/arch/powerpc/oprofile/Makefile | |||
| @@ -13,4 +13,4 @@ DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \ | |||
| 13 | oprofile-y := $(DRIVER_OBJS) common.o backtrace.o | 13 | oprofile-y := $(DRIVER_OBJS) common.o backtrace.o |
| 14 | oprofile-$(CONFIG_PPC64) += op_model_rs64.o op_model_power4.o | 14 | oprofile-$(CONFIG_PPC64) += op_model_rs64.o op_model_power4.o |
| 15 | oprofile-$(CONFIG_FSL_BOOKE) += op_model_fsl_booke.o | 15 | oprofile-$(CONFIG_FSL_BOOKE) += op_model_fsl_booke.o |
| 16 | oprofile-$(CONFIG_PPC32) += op_model_7450.o | 16 | oprofile-$(CONFIG_6xx) += op_model_7450.o |
diff --git a/arch/powerpc/oprofile/common.c b/arch/powerpc/oprofile/common.c index fd0bbbe7a4de..63bbef3b63f1 100644 --- a/arch/powerpc/oprofile/common.c +++ b/arch/powerpc/oprofile/common.c | |||
| @@ -34,6 +34,11 @@ static void op_handle_interrupt(struct pt_regs *regs) | |||
| 34 | model->handle_interrupt(regs, ctr); | 34 | model->handle_interrupt(regs, ctr); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static void op_powerpc_cpu_setup(void *dummy) | ||
| 38 | { | ||
| 39 | model->cpu_setup(ctr); | ||
| 40 | } | ||
| 41 | |||
| 37 | static int op_powerpc_setup(void) | 42 | static int op_powerpc_setup(void) |
| 38 | { | 43 | { |
| 39 | int err; | 44 | int err; |
| @@ -47,7 +52,7 @@ static int op_powerpc_setup(void) | |||
| 47 | model->reg_setup(ctr, &sys, model->num_counters); | 52 | model->reg_setup(ctr, &sys, model->num_counters); |
| 48 | 53 | ||
| 49 | /* Configure the registers on all cpus. */ | 54 | /* Configure the registers on all cpus. */ |
| 50 | on_each_cpu(model->cpu_setup, NULL, 0, 1); | 55 | on_each_cpu(op_powerpc_cpu_setup, NULL, 0, 1); |
| 51 | 56 | ||
| 52 | return 0; | 57 | return 0; |
| 53 | } | 58 | } |
| @@ -142,7 +147,8 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) | |||
| 142 | case PPC_OPROFILE_POWER4: | 147 | case PPC_OPROFILE_POWER4: |
| 143 | model = &op_model_power4; | 148 | model = &op_model_power4; |
| 144 | break; | 149 | break; |
| 145 | #else | 150 | #endif |
| 151 | #ifdef CONFIG_6xx | ||
| 146 | case PPC_OPROFILE_G4: | 152 | case PPC_OPROFILE_G4: |
| 147 | model = &op_model_7450; | 153 | model = &op_model_7450; |
| 148 | break; | 154 | break; |
diff --git a/arch/powerpc/oprofile/op_model_7450.c b/arch/powerpc/oprofile/op_model_7450.c index d8ee3aea83f8..f481c0ed5e67 100644 --- a/arch/powerpc/oprofile/op_model_7450.c +++ b/arch/powerpc/oprofile/op_model_7450.c | |||
| @@ -81,7 +81,7 @@ static void pmc_stop_ctrs(void) | |||
| 81 | 81 | ||
| 82 | /* Configures the counters on this CPU based on the global | 82 | /* Configures the counters on this CPU based on the global |
| 83 | * settings */ | 83 | * settings */ |
| 84 | static void fsl7450_cpu_setup(void *unused) | 84 | static void fsl7450_cpu_setup(struct op_counter_config *ctr) |
| 85 | { | 85 | { |
| 86 | /* freeze all counters */ | 86 | /* freeze all counters */ |
| 87 | pmc_stop_ctrs(); | 87 | pmc_stop_ctrs(); |
diff --git a/arch/powerpc/oprofile/op_model_fsl_booke.c b/arch/powerpc/oprofile/op_model_fsl_booke.c index e29dede31423..0b3c31f5209e 100644 --- a/arch/powerpc/oprofile/op_model_fsl_booke.c +++ b/arch/powerpc/oprofile/op_model_fsl_booke.c | |||
| @@ -32,42 +32,152 @@ static unsigned long reset_value[OP_MAX_COUNTER]; | |||
| 32 | static int num_counters; | 32 | static int num_counters; |
| 33 | static int oprofile_running; | 33 | static int oprofile_running; |
| 34 | 34 | ||
| 35 | static inline unsigned int ctr_read(unsigned int i) | 35 | static void init_pmc_stop(int ctr) |
| 36 | { | 36 | { |
| 37 | switch(i) { | 37 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | |
| 38 | case 0: | 38 | PMLCA_FCM1 | PMLCA_FCM0); |
| 39 | return mfpmr(PMRN_PMC0); | 39 | u32 pmlcb = 0; |
| 40 | case 1: | ||
| 41 | return mfpmr(PMRN_PMC1); | ||
| 42 | case 2: | ||
| 43 | return mfpmr(PMRN_PMC2); | ||
| 44 | case 3: | ||
| 45 | return mfpmr(PMRN_PMC3); | ||
| 46 | default: | ||
| 47 | return 0; | ||
| 48 | } | ||
| 49 | } | ||
| 50 | 40 | ||
| 51 | static inline void ctr_write(unsigned int i, unsigned int val) | 41 | switch (ctr) { |
| 52 | { | ||
| 53 | switch(i) { | ||
| 54 | case 0: | 42 | case 0: |
| 55 | mtpmr(PMRN_PMC0, val); | 43 | mtpmr(PMRN_PMLCA0, pmlca); |
| 44 | mtpmr(PMRN_PMLCB0, pmlcb); | ||
| 56 | break; | 45 | break; |
| 57 | case 1: | 46 | case 1: |
| 58 | mtpmr(PMRN_PMC1, val); | 47 | mtpmr(PMRN_PMLCA1, pmlca); |
| 48 | mtpmr(PMRN_PMLCB1, pmlcb); | ||
| 59 | break; | 49 | break; |
| 60 | case 2: | 50 | case 2: |
| 61 | mtpmr(PMRN_PMC2, val); | 51 | mtpmr(PMRN_PMLCA2, pmlca); |
| 52 | mtpmr(PMRN_PMLCB2, pmlcb); | ||
| 62 | break; | 53 | break; |
| 63 | case 3: | 54 | case 3: |
| 64 | mtpmr(PMRN_PMC3, val); | 55 | mtpmr(PMRN_PMLCA3, pmlca); |
| 56 | mtpmr(PMRN_PMLCB3, pmlcb); | ||
| 65 | break; | 57 | break; |
| 66 | default: | 58 | default: |
| 67 | break; | 59 | panic("Bad ctr number!\n"); |
| 68 | } | 60 | } |
| 69 | } | 61 | } |
| 70 | 62 | ||
| 63 | static void set_pmc_event(int ctr, int event) | ||
| 64 | { | ||
| 65 | u32 pmlca; | ||
| 66 | |||
| 67 | pmlca = get_pmlca(ctr); | ||
| 68 | |||
| 69 | pmlca = (pmlca & ~PMLCA_EVENT_MASK) | | ||
| 70 | ((event << PMLCA_EVENT_SHIFT) & | ||
| 71 | PMLCA_EVENT_MASK); | ||
| 72 | |||
| 73 | set_pmlca(ctr, pmlca); | ||
| 74 | } | ||
| 75 | |||
| 76 | static void set_pmc_user_kernel(int ctr, int user, int kernel) | ||
| 77 | { | ||
| 78 | u32 pmlca; | ||
| 79 | |||
| 80 | pmlca = get_pmlca(ctr); | ||
| 81 | |||
| 82 | if(user) | ||
| 83 | pmlca &= ~PMLCA_FCU; | ||
| 84 | else | ||
| 85 | pmlca |= PMLCA_FCU; | ||
| 86 | |||
| 87 | if(kernel) | ||
| 88 | pmlca &= ~PMLCA_FCS; | ||
| 89 | else | ||
| 90 | pmlca |= PMLCA_FCS; | ||
| 91 | |||
| 92 | set_pmlca(ctr, pmlca); | ||
| 93 | } | ||
| 94 | |||
| 95 | static void set_pmc_marked(int ctr, int mark0, int mark1) | ||
| 96 | { | ||
| 97 | u32 pmlca = get_pmlca(ctr); | ||
| 98 | |||
| 99 | if(mark0) | ||
| 100 | pmlca &= ~PMLCA_FCM0; | ||
| 101 | else | ||
| 102 | pmlca |= PMLCA_FCM0; | ||
| 103 | |||
| 104 | if(mark1) | ||
| 105 | pmlca &= ~PMLCA_FCM1; | ||
| 106 | else | ||
| 107 | pmlca |= PMLCA_FCM1; | ||
| 108 | |||
| 109 | set_pmlca(ctr, pmlca); | ||
| 110 | } | ||
| 111 | |||
| 112 | static void pmc_start_ctr(int ctr, int enable) | ||
| 113 | { | ||
| 114 | u32 pmlca = get_pmlca(ctr); | ||
| 115 | |||
| 116 | pmlca &= ~PMLCA_FC; | ||
| 117 | |||
| 118 | if (enable) | ||
| 119 | pmlca |= PMLCA_CE; | ||
| 120 | else | ||
| 121 | pmlca &= ~PMLCA_CE; | ||
| 122 | |||
| 123 | set_pmlca(ctr, pmlca); | ||
| 124 | } | ||
| 125 | |||
| 126 | static void pmc_start_ctrs(int enable) | ||
| 127 | { | ||
| 128 | u32 pmgc0 = mfpmr(PMRN_PMGC0); | ||
| 129 | |||
| 130 | pmgc0 &= ~PMGC0_FAC; | ||
| 131 | pmgc0 |= PMGC0_FCECE; | ||
| 132 | |||
| 133 | if (enable) | ||
| 134 | pmgc0 |= PMGC0_PMIE; | ||
| 135 | else | ||
| 136 | pmgc0 &= ~PMGC0_PMIE; | ||
| 137 | |||
| 138 | mtpmr(PMRN_PMGC0, pmgc0); | ||
| 139 | } | ||
| 140 | |||
| 141 | static void pmc_stop_ctrs(void) | ||
| 142 | { | ||
| 143 | u32 pmgc0 = mfpmr(PMRN_PMGC0); | ||
| 144 | |||
| 145 | pmgc0 |= PMGC0_FAC; | ||
| 146 | |||
| 147 | pmgc0 &= ~(PMGC0_PMIE | PMGC0_FCECE); | ||
| 148 | |||
| 149 | mtpmr(PMRN_PMGC0, pmgc0); | ||
| 150 | } | ||
| 151 | |||
| 152 | static void dump_pmcs(void) | ||
| 153 | { | ||
| 154 | printk("pmgc0: %x\n", mfpmr(PMRN_PMGC0)); | ||
| 155 | printk("pmc\t\tpmlca\t\tpmlcb\n"); | ||
| 156 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC0), | ||
| 157 | mfpmr(PMRN_PMLCA0), mfpmr(PMRN_PMLCB0)); | ||
| 158 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC1), | ||
| 159 | mfpmr(PMRN_PMLCA1), mfpmr(PMRN_PMLCB1)); | ||
| 160 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC2), | ||
| 161 | mfpmr(PMRN_PMLCA2), mfpmr(PMRN_PMLCB2)); | ||
| 162 | printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC3), | ||
| 163 | mfpmr(PMRN_PMLCA3), mfpmr(PMRN_PMLCB3)); | ||
| 164 | } | ||
| 165 | |||
| 166 | static void fsl_booke_cpu_setup(struct op_counter_config *ctr) | ||
| 167 | { | ||
| 168 | int i; | ||
| 169 | |||
| 170 | /* freeze all counters */ | ||
| 171 | pmc_stop_ctrs(); | ||
| 172 | |||
| 173 | for (i = 0;i < num_counters;i++) { | ||
| 174 | init_pmc_stop(i); | ||
| 175 | |||
| 176 | set_pmc_event(i, ctr[i].event); | ||
| 177 | |||
| 178 | set_pmc_user_kernel(i, ctr[i].user, ctr[i].kernel); | ||
| 179 | } | ||
| 180 | } | ||
| 71 | 181 | ||
| 72 | static void fsl_booke_reg_setup(struct op_counter_config *ctr, | 182 | static void fsl_booke_reg_setup(struct op_counter_config *ctr, |
| 73 | struct op_system_config *sys, | 183 | struct op_system_config *sys, |
| @@ -77,23 +187,14 @@ static void fsl_booke_reg_setup(struct op_counter_config *ctr, | |||
| 77 | 187 | ||
| 78 | num_counters = num_ctrs; | 188 | num_counters = num_ctrs; |
| 79 | 189 | ||
| 80 | /* freeze all counters */ | ||
| 81 | pmc_stop_ctrs(); | ||
| 82 | |||
| 83 | /* Our counters count up, and "count" refers to | 190 | /* Our counters count up, and "count" refers to |
| 84 | * how much before the next interrupt, and we interrupt | 191 | * how much before the next interrupt, and we interrupt |
| 85 | * on overflow. So we calculate the starting value | 192 | * on overflow. So we calculate the starting value |
| 86 | * which will give us "count" until overflow. | 193 | * which will give us "count" until overflow. |
| 87 | * Then we set the events on the enabled counters */ | 194 | * Then we set the events on the enabled counters */ |
| 88 | for (i = 0; i < num_counters; ++i) { | 195 | for (i = 0; i < num_counters; ++i) |
| 89 | reset_value[i] = 0x80000000UL - ctr[i].count; | 196 | reset_value[i] = 0x80000000UL - ctr[i].count; |
| 90 | 197 | ||
| 91 | init_pmc_stop(i); | ||
| 92 | |||
| 93 | set_pmc_event(i, ctr[i].event); | ||
| 94 | |||
| 95 | set_pmc_user_kernel(i, ctr[i].user, ctr[i].kernel); | ||
| 96 | } | ||
| 97 | } | 198 | } |
| 98 | 199 | ||
| 99 | static void fsl_booke_start(struct op_counter_config *ctr) | 200 | static void fsl_booke_start(struct op_counter_config *ctr) |
| @@ -105,8 +206,8 @@ static void fsl_booke_start(struct op_counter_config *ctr) | |||
| 105 | for (i = 0; i < num_counters; ++i) { | 206 | for (i = 0; i < num_counters; ++i) { |
| 106 | if (ctr[i].enabled) { | 207 | if (ctr[i].enabled) { |
| 107 | ctr_write(i, reset_value[i]); | 208 | ctr_write(i, reset_value[i]); |
| 108 | /* Set Each enabled counterd to only | 209 | /* Set each enabled counter to only |
| 109 | * count when the Mark bit is not set */ | 210 | * count when the Mark bit is *not* set */ |
| 110 | set_pmc_marked(i, 1, 0); | 211 | set_pmc_marked(i, 1, 0); |
| 111 | pmc_start_ctr(i, 1); | 212 | pmc_start_ctr(i, 1); |
| 112 | } else { | 213 | } else { |
| @@ -177,6 +278,7 @@ static void fsl_booke_handle_interrupt(struct pt_regs *regs, | |||
| 177 | 278 | ||
| 178 | struct op_powerpc_model op_model_fsl_booke = { | 279 | struct op_powerpc_model op_model_fsl_booke = { |
| 179 | .reg_setup = fsl_booke_reg_setup, | 280 | .reg_setup = fsl_booke_reg_setup, |
| 281 | .cpu_setup = fsl_booke_cpu_setup, | ||
| 180 | .start = fsl_booke_start, | 282 | .start = fsl_booke_start, |
| 181 | .stop = fsl_booke_stop, | 283 | .stop = fsl_booke_stop, |
| 182 | .handle_interrupt = fsl_booke_handle_interrupt, | 284 | .handle_interrupt = fsl_booke_handle_interrupt, |
diff --git a/arch/powerpc/oprofile/op_model_power4.c b/arch/powerpc/oprofile/op_model_power4.c index 506f6b79f893..356709d515b9 100644 --- a/arch/powerpc/oprofile/op_model_power4.c +++ b/arch/powerpc/oprofile/op_model_power4.c | |||
| @@ -76,13 +76,13 @@ static inline int mmcra_must_set_sample(void) | |||
| 76 | { | 76 | { |
| 77 | if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p) || | 77 | if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p) || |
| 78 | __is_processor(PV_970) || __is_processor(PV_970FX) || | 78 | __is_processor(PV_970) || __is_processor(PV_970FX) || |
| 79 | __is_processor(PV_970MP)) | 79 | __is_processor(PV_970MP) || __is_processor(PV_970GX)) |
| 80 | return 1; | 80 | return 1; |
| 81 | 81 | ||
| 82 | return 0; | 82 | return 0; |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static void power4_cpu_setup(void *unused) | 85 | static void power4_cpu_setup(struct op_counter_config *ctr) |
| 86 | { | 86 | { |
| 87 | unsigned int mmcr0 = mmcr0_val; | 87 | unsigned int mmcr0 = mmcr0_val; |
| 88 | unsigned long mmcra = mmcra_val; | 88 | unsigned long mmcra = mmcra_val; |
diff --git a/arch/powerpc/oprofile/op_model_rs64.c b/arch/powerpc/oprofile/op_model_rs64.c index 042f8f4867ad..19c5ee089bc9 100644 --- a/arch/powerpc/oprofile/op_model_rs64.c +++ b/arch/powerpc/oprofile/op_model_rs64.c | |||
| @@ -102,7 +102,7 @@ static void rs64_reg_setup(struct op_counter_config *ctr, | |||
| 102 | /* XXX setup user and kernel profiling */ | 102 | /* XXX setup user and kernel profiling */ |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | static void rs64_cpu_setup(void *unused) | 105 | static void rs64_cpu_setup(struct op_counter_config *ctr) |
| 106 | { | 106 | { |
| 107 | unsigned int mmcr0; | 107 | unsigned int mmcr0; |
| 108 | 108 | ||
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig index 0975e94ac7c4..7edb6b461382 100644 --- a/arch/powerpc/platforms/83xx/Kconfig +++ b/arch/powerpc/platforms/83xx/Kconfig | |||
| @@ -32,6 +32,13 @@ config MPC834x_ITX | |||
| 32 | Be aware that PCI initialization is the bootloader's | 32 | Be aware that PCI initialization is the bootloader's |
| 33 | responsiblilty. | 33 | responsiblilty. |
| 34 | 34 | ||
| 35 | config MPC8360E_PB | ||
| 36 | bool "Freescale MPC8360E PB" | ||
| 37 | select DEFAULT_UIMAGE | ||
| 38 | select QUICC_ENGINE | ||
| 39 | help | ||
| 40 | This option enables support for the MPC836x EMDS Processor Board. | ||
| 41 | |||
| 35 | endchoice | 42 | endchoice |
| 36 | 43 | ||
| 37 | config PPC_MPC832x | 44 | config PPC_MPC832x |
| @@ -46,4 +53,10 @@ config MPC834x | |||
| 46 | select PPC_INDIRECT_PCI | 53 | select PPC_INDIRECT_PCI |
| 47 | default y if MPC834x_SYS || MPC834x_ITX | 54 | default y if MPC834x_SYS || MPC834x_ITX |
| 48 | 55 | ||
| 56 | config PPC_MPC836x | ||
| 57 | bool | ||
| 58 | select PPC_UDBG_16550 | ||
| 59 | select PPC_INDIRECT_PCI | ||
| 60 | default y if MPC8360E_PB | ||
| 61 | |||
| 49 | endmenu | 62 | endmenu |
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile index 9387a110d28a..f1aa7e24a938 100644 --- a/arch/powerpc/platforms/83xx/Makefile +++ b/arch/powerpc/platforms/83xx/Makefile | |||
| @@ -5,3 +5,5 @@ obj-y := misc.o | |||
| 5 | obj-$(CONFIG_PCI) += pci.o | 5 | obj-$(CONFIG_PCI) += pci.o |
| 6 | obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o | 6 | obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o |
| 7 | obj-$(CONFIG_MPC834x_ITX) += mpc834x_itx.o | 7 | obj-$(CONFIG_MPC834x_ITX) += mpc834x_itx.o |
| 8 | obj-$(CONFIG_MPC8360E_PB) += mpc8360e_pb.o | ||
| 9 | obj-$(CONFIG_MPC832x_MDS) += mpc832x_mds.o | ||
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c index 54dea9d42dc9..a43ac71ab740 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/root_dev.h> | 24 | #include <linux/root_dev.h> |
| 25 | #include <linux/initrd.h> | 25 | #include <linux/initrd.h> |
| 26 | 26 | ||
| 27 | #include <asm/of_device.h> | ||
| 27 | #include <asm/system.h> | 28 | #include <asm/system.h> |
| 28 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
| 29 | #include <asm/time.h> | 30 | #include <asm/time.h> |
| @@ -136,6 +137,24 @@ static void __init mpc832x_sys_setup_arch(void) | |||
| 136 | #endif | 137 | #endif |
| 137 | } | 138 | } |
| 138 | 139 | ||
| 140 | static int __init mpc832x_declare_of_platform_devices(void) | ||
| 141 | { | ||
| 142 | struct device_node *np; | ||
| 143 | |||
| 144 | for (np = NULL; (np = of_find_compatible_node(np, "network", | ||
| 145 | "ucc_geth")) != NULL;) { | ||
| 146 | int ucc_num; | ||
| 147 | char bus_id[BUS_ID_SIZE]; | ||
| 148 | |||
| 149 | ucc_num = *((uint *) get_property(np, "device-id", NULL)) - 1; | ||
| 150 | snprintf(bus_id, BUS_ID_SIZE, "ucc_geth.%u", ucc_num); | ||
| 151 | of_platform_device_create(np, bus_id, NULL); | ||
| 152 | } | ||
| 153 | |||
| 154 | return 0; | ||
| 155 | } | ||
| 156 | device_initcall(mpc832x_declare_of_platform_devices); | ||
| 157 | |||
| 139 | void __init mpc832x_sys_init_IRQ(void) | 158 | void __init mpc832x_sys_init_IRQ(void) |
| 140 | { | 159 | { |
| 141 | 160 | ||
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c index 5446bab08eca..e2bcaaf6b329 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_itx.c +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c | |||
| @@ -108,10 +108,6 @@ static int __init mpc834x_itx_probe(void) | |||
| 108 | return 1; | 108 | return 1; |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | #ifdef CONFIG_RTC_CLASS | ||
| 112 | late_initcall(rtc_class_hookup); | ||
| 113 | #endif | ||
| 114 | |||
| 115 | define_machine(mpc834x_itx) { | 111 | define_machine(mpc834x_itx) { |
| 116 | .name = "MPC834x ITX", | 112 | .name = "MPC834x ITX", |
| 117 | .probe = mpc834x_itx_probe, | 113 | .probe = mpc834x_itx_probe, |
diff --git a/arch/powerpc/platforms/83xx/mpc8360e_pb.c b/arch/powerpc/platforms/83xx/mpc8360e_pb.c index c0191900fc25..1a523c81c06e 100644 --- a/arch/powerpc/platforms/83xx/mpc8360e_pb.c +++ b/arch/powerpc/platforms/83xx/mpc8360e_pb.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/root_dev.h> | 30 | #include <linux/root_dev.h> |
| 31 | #include <linux/initrd.h> | 31 | #include <linux/initrd.h> |
| 32 | 32 | ||
| 33 | #include <asm/of_device.h> | ||
| 33 | #include <asm/system.h> | 34 | #include <asm/system.h> |
| 34 | #include <asm/atomic.h> | 35 | #include <asm/atomic.h> |
| 35 | #include <asm/time.h> | 36 | #include <asm/time.h> |
| @@ -141,6 +142,24 @@ static void __init mpc8360_sys_setup_arch(void) | |||
| 141 | #endif | 142 | #endif |
| 142 | } | 143 | } |
| 143 | 144 | ||
| 145 | static int __init mpc8360_declare_of_platform_devices(void) | ||
| 146 | { | ||
| 147 | struct device_node *np; | ||
| 148 | |||
| 149 | for (np = NULL; (np = of_find_compatible_node(np, "network", | ||
| 150 | "ucc_geth")) != NULL;) { | ||
| 151 | int ucc_num; | ||
| 152 | char bus_id[BUS_ID_SIZE]; | ||
| 153 | |||
| 154 | ucc_num = *((uint *) get_property(np, "device-id", NULL)) - 1; | ||
| 155 | snprintf(bus_id, BUS_ID_SIZE, "ucc_geth.%u", ucc_num); | ||
| 156 | of_platform_device_create(np, bus_id, NULL); | ||
| 157 | } | ||
| 158 | |||
| 159 | return 0; | ||
| 160 | } | ||
| 161 | device_initcall(mpc8360_declare_of_platform_devices); | ||
| 162 | |||
| 144 | void __init mpc8360_sys_init_IRQ(void) | 163 | void __init mpc8360_sys_init_IRQ(void) |
| 145 | { | 164 | { |
| 146 | 165 | ||
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index ccfd0c4db874..7aa809d5a244 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
| @@ -655,14 +655,19 @@ static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) | |||
| 655 | 655 | ||
| 656 | for (i=0; i < 3; i++) { | 656 | for (i=0; i < 3; i++) { |
| 657 | ret = of_irq_map_one(np, i, &oirq); | 657 | ret = of_irq_map_one(np, i, &oirq); |
| 658 | if (ret) | 658 | if (ret) { |
| 659 | pr_debug("spu_new: failed to get irq %d\n", i); | ||
| 659 | goto err; | 660 | goto err; |
| 660 | 661 | } | |
| 661 | ret = -EINVAL; | 662 | ret = -EINVAL; |
| 663 | pr_debug(" irq %d no 0x%x on %s\n", i, oirq.specifier[0], | ||
| 664 | oirq.controller->full_name); | ||
| 662 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, | 665 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, |
| 663 | oirq.specifier, oirq.size); | 666 | oirq.specifier, oirq.size); |
| 664 | if (spu->irqs[i] == NO_IRQ) | 667 | if (spu->irqs[i] == NO_IRQ) { |
| 668 | pr_debug("spu_new: failed to map it !\n"); | ||
| 665 | goto err; | 669 | goto err; |
| 670 | } | ||
| 666 | } | 671 | } |
| 667 | return 0; | 672 | return 0; |
| 668 | 673 | ||
| @@ -681,7 +686,7 @@ static int spu_map_resource(struct device_node *node, int nr, | |||
| 681 | struct resource resource = { }; | 686 | struct resource resource = { }; |
| 682 | int ret; | 687 | int ret; |
| 683 | 688 | ||
| 684 | ret = of_address_to_resource(node, 0, &resource); | 689 | ret = of_address_to_resource(node, nr, &resource); |
| 685 | if (ret) | 690 | if (ret) |
| 686 | goto out; | 691 | goto out; |
| 687 | 692 | ||
| @@ -704,22 +709,42 @@ static int __init spu_map_device(struct spu *spu, struct device_node *node) | |||
| 704 | 709 | ||
| 705 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, | 710 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, |
| 706 | &spu->local_store_phys); | 711 | &spu->local_store_phys); |
| 707 | if (ret) | 712 | if (ret) { |
| 713 | pr_debug("spu_new: failed to map %s resource 0\n", | ||
| 714 | node->full_name); | ||
| 708 | goto out; | 715 | goto out; |
| 716 | } | ||
| 709 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, | 717 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, |
| 710 | &spu->problem_phys); | 718 | &spu->problem_phys); |
| 711 | if (ret) | 719 | if (ret) { |
| 720 | pr_debug("spu_new: failed to map %s resource 1\n", | ||
| 721 | node->full_name); | ||
| 712 | goto out_unmap; | 722 | goto out_unmap; |
| 723 | } | ||
| 713 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, | 724 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, |
| 714 | NULL); | 725 | NULL); |
| 715 | if (ret) | 726 | if (ret) { |
| 727 | pr_debug("spu_new: failed to map %s resource 2\n", | ||
| 728 | node->full_name); | ||
| 716 | goto out_unmap; | 729 | goto out_unmap; |
| 730 | } | ||
| 717 | 731 | ||
| 718 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | 732 | if (!firmware_has_feature(FW_FEATURE_LPAR)) |
| 719 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, | 733 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, |
| 720 | NULL); | 734 | NULL); |
| 721 | if (ret) | 735 | if (ret) { |
| 736 | pr_debug("spu_new: failed to map %s resource 3\n", | ||
| 737 | node->full_name); | ||
| 722 | goto out_unmap; | 738 | goto out_unmap; |
| 739 | } | ||
| 740 | pr_debug("spu_new: %s maps:\n", node->full_name); | ||
| 741 | pr_debug(" local store : 0x%016lx -> 0x%p\n", | ||
| 742 | spu->local_store_phys, spu->local_store); | ||
| 743 | pr_debug(" problem state : 0x%016lx -> 0x%p\n", | ||
| 744 | spu->problem_phys, spu->problem); | ||
| 745 | pr_debug(" priv2 : 0x%p\n", spu->priv2); | ||
| 746 | pr_debug(" priv1 : 0x%p\n", spu->priv1); | ||
| 747 | |||
| 723 | return 0; | 748 | return 0; |
| 724 | 749 | ||
| 725 | out_unmap: | 750 | out_unmap: |
| @@ -781,6 +806,17 @@ static int __init create_spu(struct device_node *spe) | |||
| 781 | if (!spu) | 806 | if (!spu) |
| 782 | goto out; | 807 | goto out; |
| 783 | 808 | ||
| 809 | spu->node = find_spu_node_id(spe); | ||
| 810 | if (spu->node >= MAX_NUMNODES) { | ||
| 811 | printk(KERN_WARNING "SPE %s on node %d ignored," | ||
| 812 | " node number too big\n", spe->full_name, spu->node); | ||
| 813 | printk(KERN_WARNING "Check if CONFIG_NUMA is enabled.\n"); | ||
| 814 | return -ENODEV; | ||
| 815 | } | ||
| 816 | spu->nid = of_node_to_nid(spe); | ||
| 817 | if (spu->nid == -1) | ||
| 818 | spu->nid = 0; | ||
| 819 | |||
| 784 | ret = spu_map_device(spu, spe); | 820 | ret = spu_map_device(spu, spe); |
| 785 | /* try old method */ | 821 | /* try old method */ |
| 786 | if (ret) | 822 | if (ret) |
| @@ -788,10 +824,6 @@ static int __init create_spu(struct device_node *spe) | |||
| 788 | if (ret) | 824 | if (ret) |
| 789 | goto out_free; | 825 | goto out_free; |
| 790 | 826 | ||
| 791 | spu->node = find_spu_node_id(spe); | ||
| 792 | spu->nid = of_node_to_nid(spe); | ||
| 793 | if (spu->nid == -1) | ||
| 794 | spu->nid = 0; | ||
| 795 | ret = spu_map_interrupts(spu, spe); | 827 | ret = spu_map_interrupts(spu, spe); |
| 796 | if (ret) | 828 | if (ret) |
| 797 | ret = spu_map_interrupts_old(spu, spe); | 829 | ret = spu_map_interrupts_old(spu, spe); |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index e0d730045260..533e2723e184 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
| @@ -246,6 +246,7 @@ static int spufs_cntl_open(struct inode *inode, struct file *file) | |||
| 246 | 246 | ||
| 247 | static struct file_operations spufs_cntl_fops = { | 247 | static struct file_operations spufs_cntl_fops = { |
| 248 | .open = spufs_cntl_open, | 248 | .open = spufs_cntl_open, |
| 249 | .release = simple_attr_close, | ||
| 249 | .read = simple_attr_read, | 250 | .read = simple_attr_read, |
| 250 | .write = simple_attr_write, | 251 | .write = simple_attr_write, |
| 251 | .mmap = spufs_cntl_mmap, | 252 | .mmap = spufs_cntl_mmap, |
| @@ -384,7 +385,7 @@ static ssize_t spufs_mbox_read(struct file *file, char __user *buf, | |||
| 384 | udata = (void __user *)buf; | 385 | udata = (void __user *)buf; |
| 385 | 386 | ||
| 386 | spu_acquire(ctx); | 387 | spu_acquire(ctx); |
| 387 | for (count = 0; count <= len; count += 4, udata++) { | 388 | for (count = 0; (count + 4) <= len; count += 4, udata++) { |
| 388 | int ret; | 389 | int ret; |
| 389 | ret = ctx->ops->mbox_read(ctx, &mbox_data); | 390 | ret = ctx->ops->mbox_read(ctx, &mbox_data); |
| 390 | if (ret == 0) | 391 | if (ret == 0) |
diff --git a/arch/powerpc/platforms/cell/spufs/hw_ops.c b/arch/powerpc/platforms/cell/spufs/hw_ops.c index efc452e71ab0..d805ffed892d 100644 --- a/arch/powerpc/platforms/cell/spufs/hw_ops.c +++ b/arch/powerpc/platforms/cell/spufs/hw_ops.c | |||
| @@ -147,7 +147,7 @@ static void spu_hw_signal1_write(struct spu_context *ctx, u32 data) | |||
| 147 | 147 | ||
| 148 | static u32 spu_hw_signal2_read(struct spu_context *ctx) | 148 | static u32 spu_hw_signal2_read(struct spu_context *ctx) |
| 149 | { | 149 | { |
| 150 | return in_be32(&ctx->spu->problem->signal_notify1); | 150 | return in_be32(&ctx->spu->problem->signal_notify2); |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | static void spu_hw_signal2_write(struct spu_context *ctx, u32 data) | 153 | static void spu_hw_signal2_write(struct spu_context *ctx, u32 data) |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index cae3d13229b9..49b8dabcbc99 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
| @@ -477,8 +477,10 @@ static void __init chrp_find_8259(void) | |||
| 477 | " address, polling\n"); | 477 | " address, polling\n"); |
| 478 | 478 | ||
| 479 | i8259_init(pic, chrp_int_ack); | 479 | i8259_init(pic, chrp_int_ack); |
| 480 | if (ppc_md.get_irq == NULL) | 480 | if (ppc_md.get_irq == NULL) { |
| 481 | ppc_md.get_irq = i8259_irq; | 481 | ppc_md.get_irq = i8259_irq; |
| 482 | irq_set_default_host(i8259_get_host()); | ||
| 483 | } | ||
| 482 | if (chrp_mpic != NULL) { | 484 | if (chrp_mpic != NULL) { |
| 483 | cascade_irq = irq_of_parse_and_map(pic, 0); | 485 | cascade_irq = irq_of_parse_and_map(pic, 0); |
| 484 | if (cascade_irq == NO_IRQ) | 486 | if (cascade_irq == NO_IRQ) |
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c index f4cbbcf8773a..218817d13c5c 100644 --- a/arch/powerpc/platforms/iseries/iommu.c +++ b/arch/powerpc/platforms/iseries/iommu.c | |||
| @@ -43,9 +43,6 @@ static void tce_build_iSeries(struct iommu_table *tbl, long index, long npages, | |||
| 43 | u64 rc; | 43 | u64 rc; |
| 44 | u64 tce, rpn; | 44 | u64 tce, rpn; |
| 45 | 45 | ||
| 46 | index <<= TCE_PAGE_FACTOR; | ||
| 47 | npages <<= TCE_PAGE_FACTOR; | ||
| 48 | |||
| 49 | while (npages--) { | 46 | while (npages--) { |
| 50 | rpn = virt_to_abs(uaddr) >> TCE_SHIFT; | 47 | rpn = virt_to_abs(uaddr) >> TCE_SHIFT; |
| 51 | tce = (rpn & TCE_RPN_MASK) << TCE_RPN_SHIFT; | 48 | tce = (rpn & TCE_RPN_MASK) << TCE_RPN_SHIFT; |
| @@ -75,9 +72,6 @@ static void tce_free_iSeries(struct iommu_table *tbl, long index, long npages) | |||
| 75 | { | 72 | { |
| 76 | u64 rc; | 73 | u64 rc; |
| 77 | 74 | ||
| 78 | npages <<= TCE_PAGE_FACTOR; | ||
| 79 | index <<= TCE_PAGE_FACTOR; | ||
| 80 | |||
| 81 | while (npages--) { | 75 | while (npages--) { |
| 82 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0); | 76 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0); |
| 83 | if (rc) | 77 | if (rc) |
| @@ -136,10 +130,9 @@ void iommu_table_getparms_iSeries(unsigned long busno, | |||
| 136 | panic("PCI_DMA: parms->size is zero, parms is 0x%p", parms); | 130 | panic("PCI_DMA: parms->size is zero, parms is 0x%p", parms); |
| 137 | 131 | ||
| 138 | /* itc_size is in pages worth of table, it_size is in # of entries */ | 132 | /* itc_size is in pages worth of table, it_size is in # of entries */ |
| 139 | tbl->it_size = ((parms->itc_size * TCE_PAGE_SIZE) / | 133 | tbl->it_size = (parms->itc_size * TCE_PAGE_SIZE) / TCE_ENTRY_SIZE; |
| 140 | TCE_ENTRY_SIZE) >> TCE_PAGE_FACTOR; | ||
| 141 | tbl->it_busno = parms->itc_busno; | 134 | tbl->it_busno = parms->itc_busno; |
| 142 | tbl->it_offset = parms->itc_offset >> TCE_PAGE_FACTOR; | 135 | tbl->it_offset = parms->itc_offset; |
| 143 | tbl->it_index = parms->itc_index; | 136 | tbl->it_index = parms->itc_index; |
| 144 | tbl->it_blocksize = 1; | 137 | tbl->it_blocksize = 1; |
| 145 | tbl->it_type = virtbus ? TCE_VB : TCE_PCI; | 138 | tbl->it_type = virtbus ? TCE_VB : TCE_PCI; |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index a0ff7ba7d666..6f73469fd3b0 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
| @@ -694,6 +694,11 @@ void * __init iSeries_early_setup(void) | |||
| 694 | { | 694 | { |
| 695 | unsigned long phys_mem_size; | 695 | unsigned long phys_mem_size; |
| 696 | 696 | ||
| 697 | /* Identify CPU type. This is done again by the common code later | ||
| 698 | * on but calling this function multiple times is fine. | ||
| 699 | */ | ||
| 700 | identify_cpu(0); | ||
| 701 | |||
| 697 | powerpc_firmware_features |= FW_FEATURE_ISERIES; | 702 | powerpc_firmware_features |= FW_FEATURE_ISERIES; |
| 698 | powerpc_firmware_features |= FW_FEATURE_LPAR; | 703 | powerpc_firmware_features |= FW_FEATURE_LPAR; |
| 699 | 704 | ||
diff --git a/arch/powerpc/platforms/powermac/sleep.S b/arch/powerpc/platforms/powermac/sleep.S index 1174ca128efa..adee28da353f 100644 --- a/arch/powerpc/platforms/powermac/sleep.S +++ b/arch/powerpc/platforms/powermac/sleep.S | |||
| @@ -45,7 +45,8 @@ | |||
| 45 | .section .text | 45 | .section .text |
| 46 | .align 5 | 46 | .align 5 |
| 47 | 47 | ||
| 48 | #if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC) | 48 | #if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC) || \ |
| 49 | (defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32)) | ||
| 49 | 50 | ||
| 50 | /* This gets called by via-pmu.c late during the sleep process. | 51 | /* This gets called by via-pmu.c late during the sleep process. |
| 51 | * The PMU was already send the sleep command and will shut us down | 52 | * The PMU was already send the sleep command and will shut us down |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index d24ba547e53f..556c279a789d 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
| @@ -57,9 +57,6 @@ static void tce_build_pSeries(struct iommu_table *tbl, long index, | |||
| 57 | u64 *tcep; | 57 | u64 *tcep; |
| 58 | u64 rpn; | 58 | u64 rpn; |
| 59 | 59 | ||
| 60 | index <<= TCE_PAGE_FACTOR; | ||
| 61 | npages <<= TCE_PAGE_FACTOR; | ||
| 62 | |||
| 63 | proto_tce = TCE_PCI_READ; // Read allowed | 60 | proto_tce = TCE_PCI_READ; // Read allowed |
| 64 | 61 | ||
| 65 | if (direction != DMA_TO_DEVICE) | 62 | if (direction != DMA_TO_DEVICE) |
| @@ -82,9 +79,6 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages) | |||
| 82 | { | 79 | { |
| 83 | u64 *tcep; | 80 | u64 *tcep; |
| 84 | 81 | ||
| 85 | npages <<= TCE_PAGE_FACTOR; | ||
| 86 | index <<= TCE_PAGE_FACTOR; | ||
| 87 | |||
| 88 | tcep = ((u64 *)tbl->it_base) + index; | 82 | tcep = ((u64 *)tbl->it_base) + index; |
| 89 | 83 | ||
| 90 | while (npages--) | 84 | while (npages--) |
| @@ -95,7 +89,6 @@ static unsigned long tce_get_pseries(struct iommu_table *tbl, long index) | |||
| 95 | { | 89 | { |
| 96 | u64 *tcep; | 90 | u64 *tcep; |
| 97 | 91 | ||
| 98 | index <<= TCE_PAGE_FACTOR; | ||
| 99 | tcep = ((u64 *)tbl->it_base) + index; | 92 | tcep = ((u64 *)tbl->it_base) + index; |
| 100 | 93 | ||
| 101 | return *tcep; | 94 | return *tcep; |
| @@ -109,9 +102,6 @@ static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
| 109 | u64 proto_tce, tce; | 102 | u64 proto_tce, tce; |
| 110 | u64 rpn; | 103 | u64 rpn; |
| 111 | 104 | ||
| 112 | tcenum <<= TCE_PAGE_FACTOR; | ||
| 113 | npages <<= TCE_PAGE_FACTOR; | ||
| 114 | |||
| 115 | rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; | 105 | rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; |
| 116 | proto_tce = TCE_PCI_READ; | 106 | proto_tce = TCE_PCI_READ; |
| 117 | if (direction != DMA_TO_DEVICE) | 107 | if (direction != DMA_TO_DEVICE) |
| @@ -146,7 +136,7 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
| 146 | u64 rpn; | 136 | u64 rpn; |
| 147 | long l, limit; | 137 | long l, limit; |
| 148 | 138 | ||
| 149 | if (TCE_PAGE_FACTOR == 0 && npages == 1) | 139 | if (npages == 1) |
| 150 | return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, | 140 | return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, |
| 151 | direction); | 141 | direction); |
| 152 | 142 | ||
| @@ -164,9 +154,6 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
| 164 | __get_cpu_var(tce_page) = tcep; | 154 | __get_cpu_var(tce_page) = tcep; |
| 165 | } | 155 | } |
| 166 | 156 | ||
| 167 | tcenum <<= TCE_PAGE_FACTOR; | ||
| 168 | npages <<= TCE_PAGE_FACTOR; | ||
| 169 | |||
| 170 | rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; | 157 | rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; |
| 171 | proto_tce = TCE_PCI_READ; | 158 | proto_tce = TCE_PCI_READ; |
| 172 | if (direction != DMA_TO_DEVICE) | 159 | if (direction != DMA_TO_DEVICE) |
| @@ -207,9 +194,6 @@ static void tce_free_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages | |||
| 207 | { | 194 | { |
| 208 | u64 rc; | 195 | u64 rc; |
| 209 | 196 | ||
| 210 | tcenum <<= TCE_PAGE_FACTOR; | ||
| 211 | npages <<= TCE_PAGE_FACTOR; | ||
| 212 | |||
| 213 | while (npages--) { | 197 | while (npages--) { |
| 214 | rc = plpar_tce_put((u64)tbl->it_index, (u64)tcenum << 12, 0); | 198 | rc = plpar_tce_put((u64)tbl->it_index, (u64)tcenum << 12, 0); |
| 215 | 199 | ||
| @@ -229,9 +213,6 @@ static void tce_freemulti_pSeriesLP(struct iommu_table *tbl, long tcenum, long n | |||
| 229 | { | 213 | { |
| 230 | u64 rc; | 214 | u64 rc; |
| 231 | 215 | ||
| 232 | tcenum <<= TCE_PAGE_FACTOR; | ||
| 233 | npages <<= TCE_PAGE_FACTOR; | ||
| 234 | |||
| 235 | rc = plpar_tce_stuff((u64)tbl->it_index, (u64)tcenum << 12, 0, npages); | 216 | rc = plpar_tce_stuff((u64)tbl->it_index, (u64)tcenum << 12, 0, npages); |
| 236 | 217 | ||
| 237 | if (rc && printk_ratelimit()) { | 218 | if (rc && printk_ratelimit()) { |
| @@ -248,7 +229,6 @@ static unsigned long tce_get_pSeriesLP(struct iommu_table *tbl, long tcenum) | |||
| 248 | u64 rc; | 229 | u64 rc; |
| 249 | unsigned long tce_ret; | 230 | unsigned long tce_ret; |
| 250 | 231 | ||
| 251 | tcenum <<= TCE_PAGE_FACTOR; | ||
| 252 | rc = plpar_tce_get((u64)tbl->it_index, (u64)tcenum << 12, &tce_ret); | 232 | rc = plpar_tce_get((u64)tbl->it_index, (u64)tcenum << 12, &tce_ret); |
| 253 | 233 | ||
| 254 | if (rc && printk_ratelimit()) { | 234 | if (rc && printk_ratelimit()) { |
| @@ -289,7 +269,7 @@ static void iommu_table_setparms(struct pci_controller *phb, | |||
| 289 | tbl->it_busno = phb->bus->number; | 269 | tbl->it_busno = phb->bus->number; |
| 290 | 270 | ||
| 291 | /* Units of tce entries */ | 271 | /* Units of tce entries */ |
| 292 | tbl->it_offset = phb->dma_window_base_cur >> PAGE_SHIFT; | 272 | tbl->it_offset = phb->dma_window_base_cur >> IOMMU_PAGE_SHIFT; |
| 293 | 273 | ||
| 294 | /* Test if we are going over 2GB of DMA space */ | 274 | /* Test if we are going over 2GB of DMA space */ |
| 295 | if (phb->dma_window_base_cur + phb->dma_window_size > 0x80000000ul) { | 275 | if (phb->dma_window_base_cur + phb->dma_window_size > 0x80000000ul) { |
| @@ -300,7 +280,7 @@ static void iommu_table_setparms(struct pci_controller *phb, | |||
| 300 | phb->dma_window_base_cur += phb->dma_window_size; | 280 | phb->dma_window_base_cur += phb->dma_window_size; |
| 301 | 281 | ||
| 302 | /* Set the tce table size - measured in entries */ | 282 | /* Set the tce table size - measured in entries */ |
| 303 | tbl->it_size = phb->dma_window_size >> PAGE_SHIFT; | 283 | tbl->it_size = phb->dma_window_size >> IOMMU_PAGE_SHIFT; |
| 304 | 284 | ||
| 305 | tbl->it_index = 0; | 285 | tbl->it_index = 0; |
| 306 | tbl->it_blocksize = 16; | 286 | tbl->it_blocksize = 16; |
| @@ -325,8 +305,8 @@ static void iommu_table_setparms_lpar(struct pci_controller *phb, | |||
| 325 | tbl->it_base = 0; | 305 | tbl->it_base = 0; |
| 326 | tbl->it_blocksize = 16; | 306 | tbl->it_blocksize = 16; |
| 327 | tbl->it_type = TCE_PCI; | 307 | tbl->it_type = TCE_PCI; |
| 328 | tbl->it_offset = offset >> PAGE_SHIFT; | 308 | tbl->it_offset = offset >> IOMMU_PAGE_SHIFT; |
| 329 | tbl->it_size = size >> PAGE_SHIFT; | 309 | tbl->it_size = size >> IOMMU_PAGE_SHIFT; |
| 330 | } | 310 | } |
| 331 | 311 | ||
| 332 | static void iommu_bus_setup_pSeries(struct pci_bus *bus) | 312 | static void iommu_bus_setup_pSeries(struct pci_bus *bus) |
| @@ -522,8 +502,6 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 522 | const void *dma_window = NULL; | 502 | const void *dma_window = NULL; |
| 523 | struct pci_dn *pci; | 503 | struct pci_dn *pci; |
| 524 | 504 | ||
| 525 | DBG("iommu_dev_setup_pSeriesLP, dev %p (%s)\n", dev, pci_name(dev)); | ||
| 526 | |||
| 527 | /* dev setup for LPAR is a little tricky, since the device tree might | 505 | /* dev setup for LPAR is a little tricky, since the device tree might |
| 528 | * contain the dma-window properties per-device and not neccesarily | 506 | * contain the dma-window properties per-device and not neccesarily |
| 529 | * for the bus. So we need to search upwards in the tree until we | 507 | * for the bus. So we need to search upwards in the tree until we |
| @@ -532,6 +510,9 @@ static void iommu_dev_setup_pSeriesLP(struct pci_dev *dev) | |||
| 532 | */ | 510 | */ |
| 533 | dn = pci_device_to_OF_node(dev); | 511 | dn = pci_device_to_OF_node(dev); |
| 534 | 512 | ||
| 513 | DBG("iommu_dev_setup_pSeriesLP, dev %p (%s) %s\n", | ||
| 514 | dev, pci_name(dev), dn->full_name); | ||
| 515 | |||
| 535 | for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table; | 516 | for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table; |
| 536 | pdn = pdn->parent) { | 517 | pdn = pdn->parent) { |
| 537 | dma_window = get_property(pdn, "ibm,dma-window", NULL); | 518 | dma_window = get_property(pdn, "ibm,dma-window", NULL); |
diff --git a/arch/powerpc/sysdev/dart.h b/arch/powerpc/sysdev/dart.h index 1c8817c4835e..ff202edb0591 100644 --- a/arch/powerpc/sysdev/dart.h +++ b/arch/powerpc/sysdev/dart.h | |||
| @@ -72,7 +72,6 @@ | |||
| 72 | 72 | ||
| 73 | #define DART_PAGE_SHIFT 12 | 73 | #define DART_PAGE_SHIFT 12 |
| 74 | #define DART_PAGE_SIZE (1 << DART_PAGE_SHIFT) | 74 | #define DART_PAGE_SIZE (1 << DART_PAGE_SHIFT) |
| 75 | #define DART_PAGE_FACTOR (PAGE_SHIFT - DART_PAGE_SHIFT) | ||
| 76 | 75 | ||
| 77 | 76 | ||
| 78 | #endif /* _POWERPC_SYSDEV_DART_H */ | 77 | #endif /* _POWERPC_SYSDEV_DART_H */ |
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c index 03b4477dd7f0..572b7846cc77 100644 --- a/arch/powerpc/sysdev/dart_iommu.c +++ b/arch/powerpc/sysdev/dart_iommu.c | |||
| @@ -156,9 +156,6 @@ static void dart_build(struct iommu_table *tbl, long index, | |||
| 156 | 156 | ||
| 157 | DBG("dart: build at: %lx, %lx, addr: %x\n", index, npages, uaddr); | 157 | DBG("dart: build at: %lx, %lx, addr: %x\n", index, npages, uaddr); |
| 158 | 158 | ||
| 159 | index <<= DART_PAGE_FACTOR; | ||
| 160 | npages <<= DART_PAGE_FACTOR; | ||
| 161 | |||
| 162 | dp = ((unsigned int*)tbl->it_base) + index; | 159 | dp = ((unsigned int*)tbl->it_base) + index; |
| 163 | 160 | ||
| 164 | /* On U3, all memory is contigous, so we can move this | 161 | /* On U3, all memory is contigous, so we can move this |
| @@ -199,9 +196,6 @@ static void dart_free(struct iommu_table *tbl, long index, long npages) | |||
| 199 | 196 | ||
| 200 | DBG("dart: free at: %lx, %lx\n", index, npages); | 197 | DBG("dart: free at: %lx, %lx\n", index, npages); |
| 201 | 198 | ||
| 202 | index <<= DART_PAGE_FACTOR; | ||
| 203 | npages <<= DART_PAGE_FACTOR; | ||
| 204 | |||
| 205 | dp = ((unsigned int *)tbl->it_base) + index; | 199 | dp = ((unsigned int *)tbl->it_base) + index; |
| 206 | 200 | ||
| 207 | while (npages--) | 201 | while (npages--) |
| @@ -281,7 +275,7 @@ static void iommu_table_dart_setup(void) | |||
| 281 | iommu_table_dart.it_busno = 0; | 275 | iommu_table_dart.it_busno = 0; |
| 282 | iommu_table_dart.it_offset = 0; | 276 | iommu_table_dart.it_offset = 0; |
| 283 | /* it_size is in number of entries */ | 277 | /* it_size is in number of entries */ |
| 284 | iommu_table_dart.it_size = (dart_tablesize / sizeof(u32)) >> DART_PAGE_FACTOR; | 278 | iommu_table_dart.it_size = dart_tablesize / sizeof(u32); |
| 285 | 279 | ||
| 286 | /* Initialize the common IOMMU code */ | 280 | /* Initialize the common IOMMU code */ |
| 287 | iommu_table_dart.it_base = (unsigned long)dart_vbase; | 281 | iommu_table_dart.it_base = (unsigned long)dart_vbase; |
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c index 0450265d73bb..ad87adc975bc 100644 --- a/arch/powerpc/sysdev/i8259.c +++ b/arch/powerpc/sysdev/i8259.c | |||
| @@ -224,6 +224,11 @@ static struct irq_host_ops i8259_host_ops = { | |||
| 224 | .xlate = i8259_host_xlate, | 224 | .xlate = i8259_host_xlate, |
| 225 | }; | 225 | }; |
| 226 | 226 | ||
| 227 | struct irq_host *i8259_get_host(void) | ||
| 228 | { | ||
| 229 | return i8259_host; | ||
| 230 | } | ||
| 231 | |||
| 227 | /** | 232 | /** |
| 228 | * i8259_init - Initialize the legacy controller | 233 | * i8259_init - Initialize the legacy controller |
| 229 | * @node: device node of the legacy PIC (can be NULL, but then, it will match | 234 | * @node: device node of the legacy PIC (can be NULL, but then, it will match |
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index bc4d4a7f9657..746f78c15375 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
| @@ -473,9 +473,9 @@ static int ipic_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
| 473 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; | 473 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; |
| 474 | if (flow_type & IRQ_TYPE_LEVEL_LOW) { | 474 | if (flow_type & IRQ_TYPE_LEVEL_LOW) { |
| 475 | desc->status |= IRQ_LEVEL; | 475 | desc->status |= IRQ_LEVEL; |
| 476 | set_irq_handler(virq, handle_level_irq); | 476 | desc->handle_irq = handle_level_irq; |
| 477 | } else { | 477 | } else { |
| 478 | set_irq_handler(virq, handle_edge_irq); | 478 | desc->handle_irq = handle_edge_irq; |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | /* only EXT IRQ senses are programmable on ipic | 481 | /* only EXT IRQ senses are programmable on ipic |
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c index 2bae632d3ad7..e4223226a7a8 100644 --- a/arch/powerpc/sysdev/qe_lib/qe.c +++ b/arch/powerpc/sysdev/qe_lib/qe.c | |||
| @@ -122,8 +122,7 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) | |||
| 122 | mcn_shift = QE_CR_MCN_NORMAL_SHIFT; | 122 | mcn_shift = QE_CR_MCN_NORMAL_SHIFT; |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | out_be32(&qe_immr->cp.cecdr, | 125 | out_be32(&qe_immr->cp.cecdr, cmd_input); |
| 126 | immrbar_virt_to_phys((void *)cmd_input)); | ||
| 127 | out_be32(&qe_immr->cp.cecr, | 126 | out_be32(&qe_immr->cp.cecr, |
| 128 | (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32) | 127 | (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32) |
| 129 | mcn_protocol << mcn_shift)); | 128 | mcn_protocol << mcn_shift)); |
diff --git a/arch/powerpc/sysdev/qe_lib/ucc.c b/arch/powerpc/sysdev/qe_lib/ucc.c index 916c9e5df57f..ac12a44d516f 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc.c +++ b/arch/powerpc/sysdev/qe_lib/ucc.c | |||
| @@ -207,6 +207,7 @@ int ucc_set_qe_mux_rxtx(int ucc_num, enum qe_clock clock, enum comm_dir mode) | |||
| 207 | case QE_CLK18: source = 8; break; | 207 | case QE_CLK18: source = 8; break; |
| 208 | case QE_CLK7: source = 9; break; | 208 | case QE_CLK7: source = 9; break; |
| 209 | case QE_CLK8: source = 10; break; | 209 | case QE_CLK8: source = 10; break; |
| 210 | case QE_CLK16: source = 11; break; | ||
| 210 | default: source = -1; break; | 211 | default: source = -1; break; |
| 211 | } | 212 | } |
| 212 | break; | 213 | break; |
| @@ -222,6 +223,7 @@ int ucc_set_qe_mux_rxtx(int ucc_num, enum qe_clock clock, enum comm_dir mode) | |||
| 222 | case QE_CLK22: source = 8; break; | 223 | case QE_CLK22: source = 8; break; |
| 223 | case QE_CLK7: source = 9; break; | 224 | case QE_CLK7: source = 9; break; |
| 224 | case QE_CLK8: source = 10; break; | 225 | case QE_CLK8: source = 10; break; |
| 226 | case QE_CLK16: source = 11; break; | ||
| 225 | default: source = -1; break; | 227 | default: source = -1; break; |
| 226 | } | 228 | } |
| 227 | break; | 229 | break; |
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_fast.c b/arch/powerpc/sysdev/qe_lib/ucc_fast.c index c2be7348fcbd..75fa3104a43a 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c +++ b/arch/powerpc/sysdev/qe_lib/ucc_fast.c | |||
| @@ -163,7 +163,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc | |||
| 163 | 163 | ||
| 164 | /* check if the UCC port number is in range. */ | 164 | /* check if the UCC port number is in range. */ |
| 165 | if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) { | 165 | if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) { |
| 166 | uccf_err("ucc_fast_init: Illagal UCC number!"); | 166 | uccf_err("ucc_fast_init: Illegal UCC number!"); |
| 167 | return -EINVAL; | 167 | return -EINVAL; |
| 168 | } | 168 | } |
| 169 | 169 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_slow.c b/arch/powerpc/sysdev/qe_lib/ucc_slow.c index 1fb88ef7cf06..a49da6b73ecf 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c +++ b/arch/powerpc/sysdev/qe_lib/ucc_slow.c | |||
| @@ -152,7 +152,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc | |||
| 152 | 152 | ||
| 153 | /* check if the UCC port number is in range. */ | 153 | /* check if the UCC port number is in range. */ |
| 154 | if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) { | 154 | if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) { |
| 155 | uccs_err("ucc_slow_init: Illagal UCC number!"); | 155 | uccs_err("ucc_slow_init: Illegal UCC number!"); |
| 156 | return -EINVAL; | 156 | return -EINVAL; |
| 157 | } | 157 | } |
| 158 | 158 | ||
diff --git a/arch/powerpc/sysdev/tsi108_dev.c b/arch/powerpc/sysdev/tsi108_dev.c index 11de090eb901..97f37ef4bbbf 100644 --- a/arch/powerpc/sysdev/tsi108_dev.c +++ b/arch/powerpc/sysdev/tsi108_dev.c | |||
| @@ -48,7 +48,7 @@ phys_addr_t get_csrbase(void) | |||
| 48 | tsi = of_find_node_by_type(NULL, "tsi-bridge"); | 48 | tsi = of_find_node_by_type(NULL, "tsi-bridge"); |
| 49 | if (tsi) { | 49 | if (tsi) { |
| 50 | unsigned int size; | 50 | unsigned int size; |
| 51 | void *prop = get_property(tsi, "reg", &size); | 51 | const void *prop = get_property(tsi, "reg", &size); |
| 52 | tsi108_csr_base = of_translate_address(tsi, prop); | 52 | tsi108_csr_base = of_translate_address(tsi, prop); |
| 53 | of_node_put(tsi); | 53 | of_node_put(tsi); |
| 54 | }; | 54 | }; |
| @@ -79,7 +79,7 @@ static int __init tsi108_eth_of_init(void) | |||
| 79 | hw_info tsi_eth_data; | 79 | hw_info tsi_eth_data; |
| 80 | unsigned int *id; | 80 | unsigned int *id; |
| 81 | unsigned int *phy_id; | 81 | unsigned int *phy_id; |
| 82 | void *mac_addr; | 82 | const void *mac_addr; |
| 83 | phandle *ph; | 83 | phandle *ph; |
| 84 | 84 | ||
| 85 | memset(r, 0, sizeof(r)); | 85 | memset(r, 0, sizeof(r)); |
diff --git a/arch/ppc/boot/simple/relocate.S b/arch/ppc/boot/simple/relocate.S index 0c021556d78e..1bbbcd2f2bcb 100644 --- a/arch/ppc/boot/simple/relocate.S +++ b/arch/ppc/boot/simple/relocate.S | |||
| @@ -154,8 +154,8 @@ do_relocate_out: | |||
| 154 | 154 | ||
| 155 | start_ldr: | 155 | start_ldr: |
| 156 | /* Clear all of BSS and set up stack for C calls */ | 156 | /* Clear all of BSS and set up stack for C calls */ |
| 157 | lis r3,edata@h | 157 | lis r3,__bss_start@h |
| 158 | ori r3,r3,edata@l | 158 | ori r3,r3,__bss_start@l |
| 159 | lis r4,end@h | 159 | lis r4,end@h |
| 160 | ori r4,r4,end@l | 160 | ori r4,r4,end@l |
| 161 | subi r3,r3,4 | 161 | subi r3,r3,4 |
| @@ -163,7 +163,7 @@ start_ldr: | |||
| 163 | li r0,0 | 163 | li r0,0 |
| 164 | 50: stwu r0,4(r3) | 164 | 50: stwu r0,4(r3) |
| 165 | cmpw cr0,r3,r4 | 165 | cmpw cr0,r3,r4 |
| 166 | bne 50b | 166 | blt 50b |
| 167 | 90: mr r9,r1 /* Save old stack pointer (in case it matters) */ | 167 | 90: mr r9,r1 /* Save old stack pointer (in case it matters) */ |
| 168 | lis r1,.stack@h | 168 | lis r1,.stack@h |
| 169 | ori r1,r1,.stack@l | 169 | ori r1,r1,.stack@l |
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S index 5f6684012ded..d319f9ba2379 100644 --- a/arch/ppc/kernel/misc.S +++ b/arch/ppc/kernel/misc.S | |||
| @@ -110,80 +110,6 @@ _GLOBAL(reloc_got2) | |||
| 110 | blr | 110 | blr |
| 111 | 111 | ||
| 112 | /* | 112 | /* |
| 113 | * identify_cpu, | ||
| 114 | * called with r3 = data offset and r4 = CPU number | ||
| 115 | * doesn't change r3 | ||
| 116 | */ | ||
| 117 | _GLOBAL(identify_cpu) | ||
| 118 | addis r8,r3,cpu_specs@ha | ||
| 119 | addi r8,r8,cpu_specs@l | ||
| 120 | mfpvr r7 | ||
| 121 | 1: | ||
| 122 | lwz r5,CPU_SPEC_PVR_MASK(r8) | ||
| 123 | and r5,r5,r7 | ||
| 124 | lwz r6,CPU_SPEC_PVR_VALUE(r8) | ||
| 125 | cmplw 0,r6,r5 | ||
| 126 | beq 1f | ||
| 127 | addi r8,r8,CPU_SPEC_ENTRY_SIZE | ||
| 128 | b 1b | ||
| 129 | 1: | ||
| 130 | addis r6,r3,cur_cpu_spec@ha | ||
| 131 | addi r6,r6,cur_cpu_spec@l | ||
| 132 | sub r8,r8,r3 | ||
| 133 | stw r8,0(r6) | ||
| 134 | blr | ||
| 135 | |||
| 136 | /* | ||
| 137 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 138 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 139 | * r3 = data offset (not changed) | ||
| 140 | */ | ||
| 141 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 142 | /* Get CPU 0 features */ | ||
| 143 | addis r6,r3,cur_cpu_spec@ha | ||
| 144 | addi r6,r6,cur_cpu_spec@l | ||
| 145 | lwz r4,0(r6) | ||
| 146 | add r4,r4,r3 | ||
| 147 | lwz r4,CPU_SPEC_FEATURES(r4) | ||
| 148 | |||
| 149 | /* Get the fixup table */ | ||
| 150 | addis r6,r3,__start___ftr_fixup@ha | ||
| 151 | addi r6,r6,__start___ftr_fixup@l | ||
| 152 | addis r7,r3,__stop___ftr_fixup@ha | ||
| 153 | addi r7,r7,__stop___ftr_fixup@l | ||
| 154 | |||
| 155 | /* Do the fixup */ | ||
| 156 | 1: cmplw 0,r6,r7 | ||
| 157 | bgelr | ||
| 158 | addi r6,r6,16 | ||
| 159 | lwz r8,-16(r6) /* mask */ | ||
| 160 | and r8,r8,r4 | ||
| 161 | lwz r9,-12(r6) /* value */ | ||
| 162 | cmplw 0,r8,r9 | ||
| 163 | beq 1b | ||
| 164 | lwz r8,-8(r6) /* section begin */ | ||
| 165 | lwz r9,-4(r6) /* section end */ | ||
| 166 | subf. r9,r8,r9 | ||
| 167 | beq 1b | ||
| 168 | /* write nops over the section of code */ | ||
| 169 | /* todo: if large section, add a branch at the start of it */ | ||
| 170 | srwi r9,r9,2 | ||
| 171 | mtctr r9 | ||
| 172 | add r8,r8,r3 | ||
| 173 | lis r0,0x60000000@h /* nop */ | ||
| 174 | 3: stw r0,0(r8) | ||
| 175 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 176 | beq 2f | ||
| 177 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 178 | sync | ||
| 179 | icbi 0,r8 | ||
| 180 | 2: addi r8,r8,4 | ||
| 181 | bdnz 3b | ||
| 182 | sync /* additional sync needed on g4 */ | ||
| 183 | isync | ||
| 184 | b 1b | ||
| 185 | |||
| 186 | /* | ||
| 187 | * call_setup_cpu - call the setup_cpu function for this cpu | 113 | * call_setup_cpu - call the setup_cpu function for this cpu |
| 188 | * r3 = data offset, r24 = cpu number | 114 | * r3 = data offset, r24 = cpu number |
| 189 | * | 115 | * |
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c index 75fe13815be2..27faeca2c7a2 100644 --- a/arch/ppc/kernel/setup.c +++ b/arch/ppc/kernel/setup.c | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <asm/nvram.h> | 38 | #include <asm/nvram.h> |
| 39 | #include <asm/xmon.h> | 39 | #include <asm/xmon.h> |
| 40 | #include <asm/ocp.h> | 40 | #include <asm/ocp.h> |
| 41 | #include <asm/prom.h> | ||
| 41 | 42 | ||
| 42 | #define USES_PPC_SYS (defined(CONFIG_85xx) || defined(CONFIG_83xx) || \ | 43 | #define USES_PPC_SYS (defined(CONFIG_85xx) || defined(CONFIG_83xx) || \ |
| 43 | defined(CONFIG_MPC10X_BRIDGE) || defined(CONFIG_8260) || \ | 44 | defined(CONFIG_MPC10X_BRIDGE) || defined(CONFIG_8260) || \ |
| @@ -53,8 +54,6 @@ | |||
| 53 | 54 | ||
| 54 | extern void platform_init(unsigned long r3, unsigned long r4, | 55 | extern void platform_init(unsigned long r3, unsigned long r4, |
| 55 | unsigned long r5, unsigned long r6, unsigned long r7); | 56 | unsigned long r5, unsigned long r6, unsigned long r7); |
| 56 | extern void identify_cpu(unsigned long offset, unsigned long cpu); | ||
| 57 | extern void do_cpu_ftr_fixups(unsigned long offset); | ||
| 58 | extern void reloc_got2(unsigned long offset); | 57 | extern void reloc_got2(unsigned long offset); |
| 59 | 58 | ||
| 60 | extern void ppc6xx_idle(void); | 59 | extern void ppc6xx_idle(void); |
| @@ -301,6 +300,7 @@ early_init(int r3, int r4, int r5) | |||
| 301 | { | 300 | { |
| 302 | unsigned long phys; | 301 | unsigned long phys; |
| 303 | unsigned long offset = reloc_offset(); | 302 | unsigned long offset = reloc_offset(); |
| 303 | struct cpu_spec *spec; | ||
| 304 | 304 | ||
| 305 | /* Default */ | 305 | /* Default */ |
| 306 | phys = offset + KERNELBASE; | 306 | phys = offset + KERNELBASE; |
| @@ -313,8 +313,10 @@ early_init(int r3, int r4, int r5) | |||
| 313 | * Identify the CPU type and fix up code sections | 313 | * Identify the CPU type and fix up code sections |
| 314 | * that depend on which cpu we have. | 314 | * that depend on which cpu we have. |
| 315 | */ | 315 | */ |
| 316 | identify_cpu(offset, 0); | 316 | spec = identify_cpu(offset); |
| 317 | do_cpu_ftr_fixups(offset); | 317 | do_feature_fixups(spec->cpu_features, |
| 318 | PTRRELOC(&__start___ftr_fixup), | ||
| 319 | PTRRELOC(&__stop___ftr_fixup)); | ||
| 318 | 320 | ||
| 319 | return phys; | 321 | return phys; |
| 320 | } | 322 | } |
diff --git a/arch/ppc/kernel/time.c b/arch/ppc/kernel/time.c index d4b2cf74da6a..18ee851e33e3 100644 --- a/arch/ppc/kernel/time.c +++ b/arch/ppc/kernel/time.c | |||
| @@ -62,6 +62,7 @@ | |||
| 62 | #include <asm/cache.h> | 62 | #include <asm/cache.h> |
| 63 | #include <asm/8xx_immap.h> | 63 | #include <asm/8xx_immap.h> |
| 64 | #include <asm/machdep.h> | 64 | #include <asm/machdep.h> |
| 65 | #include <asm/irq_regs.h> | ||
| 65 | 66 | ||
| 66 | #include <asm/time.h> | 67 | #include <asm/time.h> |
| 67 | 68 | ||
| @@ -129,6 +130,7 @@ void wakeup_decrementer(void) | |||
| 129 | */ | 130 | */ |
| 130 | void timer_interrupt(struct pt_regs * regs) | 131 | void timer_interrupt(struct pt_regs * regs) |
| 131 | { | 132 | { |
| 133 | struct pt_regs *old_regs; | ||
| 132 | int next_dec; | 134 | int next_dec; |
| 133 | unsigned long cpu = smp_processor_id(); | 135 | unsigned long cpu = smp_processor_id(); |
| 134 | unsigned jiffy_stamp = last_jiffy_stamp(cpu); | 136 | unsigned jiffy_stamp = last_jiffy_stamp(cpu); |
| @@ -137,6 +139,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
| 137 | if (atomic_read(&ppc_n_lost_interrupts) != 0) | 139 | if (atomic_read(&ppc_n_lost_interrupts) != 0) |
| 138 | do_IRQ(regs); | 140 | do_IRQ(regs); |
| 139 | 141 | ||
| 142 | old_regs = set_irq_regs(regs); | ||
| 140 | irq_enter(); | 143 | irq_enter(); |
| 141 | 144 | ||
| 142 | while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) <= 0) { | 145 | while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) <= 0) { |
| @@ -188,6 +191,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
| 188 | ppc_md.heartbeat(); | 191 | ppc_md.heartbeat(); |
| 189 | 192 | ||
| 190 | irq_exit(); | 193 | irq_exit(); |
| 194 | set_irq_regs(old_regs); | ||
| 191 | } | 195 | } |
| 192 | 196 | ||
| 193 | /* | 197 | /* |
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index aafc8e8893d1..9661a91183b3 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c | |||
| @@ -708,7 +708,7 @@ void single_step_exception(struct pt_regs *regs) | |||
| 708 | 708 | ||
| 709 | void alignment_exception(struct pt_regs *regs) | 709 | void alignment_exception(struct pt_regs *regs) |
| 710 | { | 710 | { |
| 711 | int fixed; | 711 | int sig, code, fixed = 0; |
| 712 | 712 | ||
| 713 | fixed = fix_alignment(regs); | 713 | fixed = fix_alignment(regs); |
| 714 | if (fixed == 1) { | 714 | if (fixed == 1) { |
| @@ -717,14 +717,16 @@ void alignment_exception(struct pt_regs *regs) | |||
| 717 | return; | 717 | return; |
| 718 | } | 718 | } |
| 719 | if (fixed == -EFAULT) { | 719 | if (fixed == -EFAULT) { |
| 720 | /* fixed == -EFAULT means the operand address was bad */ | 720 | sig = SIGSEGV; |
| 721 | if (user_mode(regs)) | 721 | code = SEGV_ACCERR; |
| 722 | _exception(SIGSEGV, regs, SEGV_ACCERR, regs->dar); | 722 | } else { |
| 723 | else | 723 | sig = SIGBUS; |
| 724 | bad_page_fault(regs, regs->dar, SIGSEGV); | 724 | code = BUS_ADRALN; |
| 725 | return; | ||
| 726 | } | 725 | } |
| 727 | _exception(SIGBUS, regs, BUS_ADRALN, regs->dar); | 726 | if (user_mode(regs)) |
| 727 | _exception(sig, regs, code, regs->dar); | ||
| 728 | else | ||
| 729 | bad_page_fault(regs, regs->dar, sig); | ||
| 728 | } | 730 | } |
| 729 | 731 | ||
| 730 | void StackOverflow(struct pt_regs *regs) | 732 | void StackOverflow(struct pt_regs *regs) |
diff --git a/arch/ppc/kernel/vmlinux.lds.S b/arch/ppc/kernel/vmlinux.lds.S index 095fd3323323..16e8661e1fec 100644 --- a/arch/ppc/kernel/vmlinux.lds.S +++ b/arch/ppc/kernel/vmlinux.lds.S | |||
| @@ -115,13 +115,7 @@ SECTIONS | |||
| 115 | __setup_end = .; | 115 | __setup_end = .; |
| 116 | __initcall_start = .; | 116 | __initcall_start = .; |
| 117 | .initcall.init : { | 117 | .initcall.init : { |
| 118 | *(.initcall1.init) | 118 | INITCALLS |
| 119 | *(.initcall2.init) | ||
| 120 | *(.initcall3.init) | ||
| 121 | *(.initcall4.init) | ||
| 122 | *(.initcall5.init) | ||
| 123 | *(.initcall6.init) | ||
| 124 | *(.initcall7.init) | ||
| 125 | } | 119 | } |
| 126 | __initcall_end = .; | 120 | __initcall_end = .; |
| 127 | 121 | ||
diff --git a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c index 410200046af1..c374e53ae03a 100644 --- a/arch/ppc/mm/init.c +++ b/arch/ppc/mm/init.c | |||
| @@ -374,11 +374,12 @@ void __init paging_init(void) | |||
| 374 | end_pfn = start_pfn + (total_memory >> PAGE_SHIFT); | 374 | end_pfn = start_pfn + (total_memory >> PAGE_SHIFT); |
| 375 | add_active_range(0, start_pfn, end_pfn); | 375 | add_active_range(0, start_pfn, end_pfn); |
| 376 | 376 | ||
| 377 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | ||
| 377 | #ifdef CONFIG_HIGHMEM | 378 | #ifdef CONFIG_HIGHMEM |
| 378 | max_zone_pfns[0] = total_lowmem >> PAGE_SHIFT; | 379 | max_zone_pfns[ZONE_DMA] = total_lowmem >> PAGE_SHIFT; |
| 379 | max_zone_pfns[1] = total_memory >> PAGE_SHIFT; | 380 | max_zone_pfns[ZONE_HIGHMEM] = total_memory >> PAGE_SHIFT; |
| 380 | #else | 381 | #else |
| 381 | max_zone_pfns[0] = total_memory >> PAGE_SHIFT; | 382 | max_zone_pfns[ZONE_DMA] = total_memory >> PAGE_SHIFT; |
| 382 | #endif /* CONFIG_HIGHMEM */ | 383 | #endif /* CONFIG_HIGHMEM */ |
| 383 | free_area_init_nodes(max_zone_pfns); | 384 | free_area_init_nodes(max_zone_pfns); |
| 384 | } | 385 | } |
diff --git a/arch/ppc/platforms/mpc8272ads_setup.c b/arch/ppc/platforms/mpc8272ads_setup.c index d7b3a6afa78f..1f9ea36837b1 100644 --- a/arch/ppc/platforms/mpc8272ads_setup.c +++ b/arch/ppc/platforms/mpc8272ads_setup.c | |||
| @@ -196,7 +196,7 @@ static void __init mpc8272ads_fixup_enet_pdata(struct platform_device *pdev, | |||
| 196 | bd_t* bi = (void*)__res; | 196 | bd_t* bi = (void*)__res; |
| 197 | int fs_no = fsid_fcc1+pdev->id-1; | 197 | int fs_no = fsid_fcc1+pdev->id-1; |
| 198 | 198 | ||
| 199 | if(fs_no > ARRAY_SIZE(mpc82xx_enet_pdata)) { | 199 | if(fs_no >= ARRAY_SIZE(mpc82xx_enet_pdata)) { |
| 200 | return; | 200 | return; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| @@ -222,7 +222,7 @@ static void mpc8272ads_fixup_uart_pdata(struct platform_device *pdev, | |||
| 222 | int id = fs_uart_id_scc2fsid(idx); | 222 | int id = fs_uart_id_scc2fsid(idx); |
| 223 | 223 | ||
| 224 | /* no need to alter anything if console */ | 224 | /* no need to alter anything if console */ |
| 225 | if ((id <= num) && (!pdev->dev.platform_data)) { | 225 | if ((id < num) && (!pdev->dev.platform_data)) { |
| 226 | pinfo = &mpc8272_uart_pdata[id]; | 226 | pinfo = &mpc8272_uart_pdata[id]; |
| 227 | pinfo->uart_clk = bd->bi_intfreq; | 227 | pinfo->uart_clk = bd->bi_intfreq; |
| 228 | pdev->dev.platform_data = pinfo; | 228 | pdev->dev.platform_data = pinfo; |
diff --git a/arch/ppc/platforms/mpc866ads_setup.c b/arch/ppc/platforms/mpc866ads_setup.c index 5f130dca3770..e95d2c111747 100644 --- a/arch/ppc/platforms/mpc866ads_setup.c +++ b/arch/ppc/platforms/mpc866ads_setup.c | |||
| @@ -259,7 +259,7 @@ static void mpc866ads_fixup_enet_pdata(struct platform_device *pdev, int fs_no) | |||
| 259 | /* Get pointer to Communication Processor */ | 259 | /* Get pointer to Communication Processor */ |
| 260 | cp = cpmp; | 260 | cp = cpmp; |
| 261 | 261 | ||
| 262 | if(fs_no > ARRAY_SIZE(mpc8xx_enet_pdata)) { | 262 | if(fs_no >= ARRAY_SIZE(mpc8xx_enet_pdata)) { |
| 263 | printk(KERN_ERR"No network-suitable #%d device on bus", fs_no); | 263 | printk(KERN_ERR"No network-suitable #%d device on bus", fs_no); |
| 264 | return; | 264 | return; |
| 265 | } | 265 | } |
| @@ -305,7 +305,7 @@ static void __init mpc866ads_fixup_uart_pdata(struct platform_device *pdev, | |||
| 305 | int id = fs_uart_id_smc2fsid(idx); | 305 | int id = fs_uart_id_smc2fsid(idx); |
| 306 | 306 | ||
| 307 | /* no need to alter anything if console */ | 307 | /* no need to alter anything if console */ |
| 308 | if ((id <= num) && (!pdev->dev.platform_data)) { | 308 | if ((id < num) && (!pdev->dev.platform_data)) { |
| 309 | pinfo = &mpc866_uart_pdata[id]; | 309 | pinfo = &mpc866_uart_pdata[id]; |
| 310 | pinfo->uart_clk = bd->bi_intfreq; | 310 | pinfo->uart_clk = bd->bi_intfreq; |
| 311 | pdev->dev.platform_data = pinfo; | 311 | pdev->dev.platform_data = pinfo; |
diff --git a/arch/ppc/platforms/mpc885ads_setup.c b/arch/ppc/platforms/mpc885ads_setup.c index 02293141efb5..f8161f3557f5 100644 --- a/arch/ppc/platforms/mpc885ads_setup.c +++ b/arch/ppc/platforms/mpc885ads_setup.c | |||
| @@ -263,7 +263,7 @@ static void mpc885ads_fixup_enet_pdata(struct platform_device *pdev, int fs_no) | |||
| 263 | char *e; | 263 | char *e; |
| 264 | int i; | 264 | int i; |
| 265 | 265 | ||
| 266 | if(fs_no > ARRAY_SIZE(mpc8xx_enet_pdata)) { | 266 | if(fs_no >= ARRAY_SIZE(mpc8xx_enet_pdata)) { |
| 267 | printk(KERN_ERR"No network-suitable #%d device on bus", fs_no); | 267 | printk(KERN_ERR"No network-suitable #%d device on bus", fs_no); |
| 268 | return; | 268 | return; |
| 269 | } | 269 | } |
| @@ -371,7 +371,7 @@ static void __init mpc885ads_fixup_uart_pdata(struct platform_device *pdev, | |||
| 371 | int id = fs_uart_id_smc2fsid(idx); | 371 | int id = fs_uart_id_smc2fsid(idx); |
| 372 | 372 | ||
| 373 | /* no need to alter anything if console */ | 373 | /* no need to alter anything if console */ |
| 374 | if ((id <= num) && (!pdev->dev.platform_data)) { | 374 | if ((id < num) && (!pdev->dev.platform_data)) { |
| 375 | pinfo = &mpc885_uart_pdata[id]; | 375 | pinfo = &mpc885_uart_pdata[id]; |
| 376 | pinfo->uart_clk = bd->bi_intfreq; | 376 | pinfo->uart_clk = bd->bi_intfreq; |
| 377 | pdev->dev.platform_data = pinfo; | 377 | pdev->dev.platform_data = pinfo; |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 608193cfe43f..245b81bc7157 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
| @@ -236,9 +236,6 @@ config WARN_STACK_SIZE | |||
| 236 | This allows you to specify the maximum frame size a function may | 236 | This allows you to specify the maximum frame size a function may |
| 237 | have without the compiler complaining about it. | 237 | have without the compiler complaining about it. |
| 238 | 238 | ||
| 239 | config ARCH_POPULATES_NODE_MAP | ||
| 240 | def_bool y | ||
| 241 | |||
| 242 | source "mm/Kconfig" | 239 | source "mm/Kconfig" |
| 243 | 240 | ||
| 244 | comment "I/O subsystem configuration" | 241 | comment "I/O subsystem configuration" |
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 2b1e6c9a6e0e..af1e8fc7d985 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
| @@ -109,7 +109,7 @@ static LIST_HEAD(appldata_ops_list); | |||
| 109 | * | 109 | * |
| 110 | * schedule work and reschedule timer | 110 | * schedule work and reschedule timer |
| 111 | */ | 111 | */ |
| 112 | static void appldata_timer_function(unsigned long data, struct pt_regs *regs) | 112 | static void appldata_timer_function(unsigned long data) |
| 113 | { | 113 | { |
| 114 | P_DEBUG(" -= Timer =-\n"); | 114 | P_DEBUG(" -= Timer =-\n"); |
| 115 | P_DEBUG("CPU: %i, expire_count: %i\n", smp_processor_id(), | 115 | P_DEBUG("CPU: %i, expire_count: %i\n", smp_processor_id(), |
| @@ -310,6 +310,7 @@ appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 310 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) { | 310 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) { |
| 311 | return -EFAULT; | 311 | return -EFAULT; |
| 312 | } | 312 | } |
| 313 | interval = 0; | ||
| 313 | sscanf(buf, "%i", &interval); | 314 | sscanf(buf, "%i", &interval); |
| 314 | if (interval <= 0) { | 315 | if (interval <= 0) { |
| 315 | P_ERROR("Timer CPU interval has to be > 0!\n"); | 316 | P_ERROR("Timer CPU interval has to be > 0!\n"); |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index a3257398ea8d..7cd51e73e274 100644 --- a/arch/s390/defconfig +++ b/arch/s390/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.18 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Wed Oct 4 19:45:46 2006 | 4 | # Wed Oct 18 17:11:10 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_MMU=y | 6 | CONFIG_MMU=y |
| 7 | CONFIG_LOCKDEP_SUPPORT=y | 7 | CONFIG_LOCKDEP_SUPPORT=y |
| @@ -119,7 +119,6 @@ CONFIG_PACK_STACK=y | |||
| 119 | CONFIG_CHECK_STACK=y | 119 | CONFIG_CHECK_STACK=y |
| 120 | CONFIG_STACK_GUARD=256 | 120 | CONFIG_STACK_GUARD=256 |
| 121 | # CONFIG_WARN_STACK is not set | 121 | # CONFIG_WARN_STACK is not set |
| 122 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 123 | CONFIG_SELECT_MEMORY_MODEL=y | 122 | CONFIG_SELECT_MEMORY_MODEL=y |
| 124 | CONFIG_FLATMEM_MANUAL=y | 123 | CONFIG_FLATMEM_MANUAL=y |
| 125 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 124 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
| @@ -211,6 +210,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=y | |||
| 211 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | 210 | CONFIG_INET6_XFRM_MODE_TUNNEL=y |
| 212 | CONFIG_INET6_XFRM_MODE_BEET=y | 211 | CONFIG_INET6_XFRM_MODE_BEET=y |
| 213 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 212 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 213 | CONFIG_IPV6_SIT=y | ||
| 214 | # CONFIG_IPV6_TUNNEL is not set | 214 | # CONFIG_IPV6_TUNNEL is not set |
| 215 | # CONFIG_IPV6_SUBTREES is not set | 215 | # CONFIG_IPV6_SUBTREES is not set |
| 216 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 216 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| @@ -528,6 +528,7 @@ CONFIG_EXT3_FS=y | |||
| 528 | CONFIG_EXT3_FS_XATTR=y | 528 | CONFIG_EXT3_FS_XATTR=y |
| 529 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 529 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 530 | # CONFIG_EXT3_FS_SECURITY is not set | 530 | # CONFIG_EXT3_FS_SECURITY is not set |
| 531 | # CONFIG_EXT4DEV_FS is not set | ||
| 531 | CONFIG_JBD=y | 532 | CONFIG_JBD=y |
| 532 | # CONFIG_JBD_DEBUG is not set | 533 | # CONFIG_JBD_DEBUG is not set |
| 533 | CONFIG_FS_MBCACHE=y | 534 | CONFIG_FS_MBCACHE=y |
| @@ -646,10 +647,6 @@ CONFIG_MSDOS_PARTITION=y | |||
| 646 | # CONFIG_NLS is not set | 647 | # CONFIG_NLS is not set |
| 647 | 648 | ||
| 648 | # | 649 | # |
| 649 | # Distributed Lock Manager | ||
| 650 | # | ||
| 651 | |||
| 652 | # | ||
| 653 | # Instrumentation Support | 650 | # Instrumentation Support |
| 654 | # | 651 | # |
| 655 | 652 | ||
| @@ -669,7 +666,6 @@ CONFIG_MAGIC_SYSRQ=y | |||
| 669 | # CONFIG_UNUSED_SYMBOLS is not set | 666 | # CONFIG_UNUSED_SYMBOLS is not set |
| 670 | CONFIG_DEBUG_KERNEL=y | 667 | CONFIG_DEBUG_KERNEL=y |
| 671 | CONFIG_LOG_BUF_SHIFT=17 | 668 | CONFIG_LOG_BUF_SHIFT=17 |
| 672 | # CONFIG_DETECT_SOFTLOCKUP is not set | ||
| 673 | # CONFIG_SCHEDSTATS is not set | 669 | # CONFIG_SCHEDSTATS is not set |
| 674 | # CONFIG_DEBUG_SLAB is not set | 670 | # CONFIG_DEBUG_SLAB is not set |
| 675 | CONFIG_DEBUG_PREEMPT=y | 671 | CONFIG_DEBUG_PREEMPT=y |
| @@ -690,6 +686,7 @@ CONFIG_DEBUG_FS=y | |||
| 690 | # CONFIG_FRAME_POINTER is not set | 686 | # CONFIG_FRAME_POINTER is not set |
| 691 | # CONFIG_UNWIND_INFO is not set | 687 | # CONFIG_UNWIND_INFO is not set |
| 692 | CONFIG_FORCED_INLINING=y | 688 | CONFIG_FORCED_INLINING=y |
| 689 | CONFIG_HEADERS_CHECK=y | ||
| 693 | # CONFIG_RCU_TORTURE_TEST is not set | 690 | # CONFIG_RCU_TORTURE_TEST is not set |
| 694 | # CONFIG_LKDTM is not set | 691 | # CONFIG_LKDTM is not set |
| 695 | 692 | ||
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index e15e1489aef5..5b33f823863a 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
| @@ -295,6 +295,7 @@ static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i) | |||
| 295 | * | 295 | * |
| 296 | * This is really horribly ugly. | 296 | * This is really horribly ugly. |
| 297 | */ | 297 | */ |
| 298 | #ifdef CONFIG_SYSVIPC | ||
| 298 | asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) | 299 | asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) |
| 299 | { | 300 | { |
| 300 | if (call >> 16) /* hack for backward compatibility */ | 301 | if (call >> 16) /* hack for backward compatibility */ |
| @@ -338,6 +339,7 @@ asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) | |||
| 338 | 339 | ||
| 339 | return -ENOSYS; | 340 | return -ENOSYS; |
| 340 | } | 341 | } |
| 342 | #endif | ||
| 341 | 343 | ||
| 342 | asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low) | 344 | asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low) |
| 343 | { | 345 | { |
| @@ -755,7 +757,9 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) | |||
| 755 | put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp))) | 757 | put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp))) |
| 756 | error = -EFAULT; | 758 | error = -EFAULT; |
| 757 | } | 759 | } |
| 758 | copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); | 760 | if (copy_to_user(args->__unused, tmp.__unused, |
| 761 | sizeof(tmp.__unused))) | ||
| 762 | error = -EFAULT; | ||
| 759 | } | 763 | } |
| 760 | return error; | 764 | return error; |
| 761 | } | 765 | } |
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index d49b876a83bf..861888ab8c13 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
| @@ -169,12 +169,12 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | |||
| 169 | compat_old_sigset_t mask; | 169 | compat_old_sigset_t mask; |
| 170 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || | 170 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || |
| 171 | __get_user(sa_handler, &act->sa_handler) || | 171 | __get_user(sa_handler, &act->sa_handler) || |
| 172 | __get_user(sa_restorer, &act->sa_restorer)) | 172 | __get_user(sa_restorer, &act->sa_restorer) || |
| 173 | __get_user(new_ka.sa.sa_flags, &act->sa_flags) || | ||
| 174 | __get_user(mask, &act->sa_mask)) | ||
| 173 | return -EFAULT; | 175 | return -EFAULT; |
| 174 | new_ka.sa.sa_handler = (__sighandler_t) sa_handler; | 176 | new_ka.sa.sa_handler = (__sighandler_t) sa_handler; |
| 175 | new_ka.sa.sa_restorer = (void (*)(void)) sa_restorer; | 177 | new_ka.sa.sa_restorer = (void (*)(void)) sa_restorer; |
| 176 | __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
| 177 | __get_user(mask, &act->sa_mask); | ||
| 178 | siginitset(&new_ka.sa.sa_mask, mask); | 178 | siginitset(&new_ka.sa.sa_mask, mask); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| @@ -185,10 +185,10 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | |||
| 185 | sa_restorer = (unsigned long) old_ka.sa.sa_restorer; | 185 | sa_restorer = (unsigned long) old_ka.sa.sa_restorer; |
| 186 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || | 186 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || |
| 187 | __put_user(sa_handler, &oact->sa_handler) || | 187 | __put_user(sa_handler, &oact->sa_handler) || |
| 188 | __put_user(sa_restorer, &oact->sa_restorer)) | 188 | __put_user(sa_restorer, &oact->sa_restorer) || |
| 189 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || | ||
| 190 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) | ||
| 189 | return -EFAULT; | 191 | return -EFAULT; |
| 190 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
| 191 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | return ret; | 194 | return ret; |
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index cb0efae6802f..71e54ef0931e 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
| @@ -1664,4 +1664,4 @@ sys_getcpu_wrapper: | |||
| 1664 | llgtr %r2,%r2 # unsigned * | 1664 | llgtr %r2,%r2 # unsigned * |
| 1665 | llgtr %r3,%r3 # unsigned * | 1665 | llgtr %r3,%r3 # unsigned * |
| 1666 | llgtr %r4,%r4 # struct getcpu_cache * | 1666 | llgtr %r4,%r4 # struct getcpu_cache * |
| 1667 | jg sys_tee | 1667 | jg sys_getcpu |
diff --git a/arch/s390/kernel/s390_ext.c b/arch/s390/kernel/s390_ext.c index c49ab8c784d2..4faf96f8a834 100644 --- a/arch/s390/kernel/s390_ext.c +++ b/arch/s390/kernel/s390_ext.c | |||
| @@ -117,8 +117,8 @@ void do_extint(struct pt_regs *regs, unsigned short code) | |||
| 117 | int index; | 117 | int index; |
| 118 | struct pt_regs *old_regs; | 118 | struct pt_regs *old_regs; |
| 119 | 119 | ||
| 120 | irq_enter(); | ||
| 121 | old_regs = set_irq_regs(regs); | 120 | old_regs = set_irq_regs(regs); |
| 121 | irq_enter(); | ||
| 122 | asm volatile ("mc 0,0"); | 122 | asm volatile ("mc 0,0"); |
| 123 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) | 123 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) |
| 124 | /** | 124 | /** |
| @@ -134,8 +134,8 @@ void do_extint(struct pt_regs *regs, unsigned short code) | |||
| 134 | p->handler(code); | 134 | p->handler(code); |
| 135 | } | 135 | } |
| 136 | } | 136 | } |
| 137 | set_irq_regs(old_regs); | ||
| 138 | irq_exit(); | 137 | irq_exit(); |
| 138 | set_irq_regs(old_regs); | ||
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | EXPORT_SYMBOL(register_external_interrupt); | 141 | EXPORT_SYMBOL(register_external_interrupt); |
diff --git a/arch/s390/kernel/s390_ksyms.c b/arch/s390/kernel/s390_ksyms.c index 9f19e833a562..90b5ef529eb7 100644 --- a/arch/s390/kernel/s390_ksyms.c +++ b/arch/s390/kernel/s390_ksyms.c | |||
| @@ -51,4 +51,3 @@ EXPORT_SYMBOL(csum_fold); | |||
| 51 | EXPORT_SYMBOL(console_mode); | 51 | EXPORT_SYMBOL(console_mode); |
| 52 | EXPORT_SYMBOL(console_devno); | 52 | EXPORT_SYMBOL(console_devno); |
| 53 | EXPORT_SYMBOL(console_irq); | 53 | EXPORT_SYMBOL(console_irq); |
| 54 | EXPORT_SYMBOL(sys_wait4); | ||
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 49f2b68e32b1..2aa13e8e000a 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
| @@ -70,6 +70,7 @@ struct { | |||
| 70 | #define CHUNK_READ_WRITE 0 | 70 | #define CHUNK_READ_WRITE 0 |
| 71 | #define CHUNK_READ_ONLY 1 | 71 | #define CHUNK_READ_ONLY 1 |
| 72 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ | 72 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ |
| 73 | unsigned long __initdata zholes_size[MAX_NR_ZONES]; | ||
| 73 | static unsigned long __initdata memory_end; | 74 | static unsigned long __initdata memory_end; |
| 74 | 75 | ||
| 75 | /* | 76 | /* |
| @@ -357,6 +358,21 @@ void machine_power_off(void) | |||
| 357 | */ | 358 | */ |
| 358 | void (*pm_power_off)(void) = machine_power_off; | 359 | void (*pm_power_off)(void) = machine_power_off; |
| 359 | 360 | ||
| 361 | static void __init | ||
| 362 | add_memory_hole(unsigned long start, unsigned long end) | ||
| 363 | { | ||
| 364 | unsigned long dma_pfn = MAX_DMA_ADDRESS >> PAGE_SHIFT; | ||
| 365 | |||
| 366 | if (end <= dma_pfn) | ||
| 367 | zholes_size[ZONE_DMA] += end - start + 1; | ||
| 368 | else if (start > dma_pfn) | ||
| 369 | zholes_size[ZONE_NORMAL] += end - start + 1; | ||
| 370 | else { | ||
| 371 | zholes_size[ZONE_DMA] += dma_pfn - start + 1; | ||
| 372 | zholes_size[ZONE_NORMAL] += end - dma_pfn; | ||
| 373 | } | ||
| 374 | } | ||
| 375 | |||
| 360 | static int __init early_parse_mem(char *p) | 376 | static int __init early_parse_mem(char *p) |
| 361 | { | 377 | { |
| 362 | memory_end = memparse(p, &p); | 378 | memory_end = memparse(p, &p); |
| @@ -434,7 +450,7 @@ setup_lowcore(void) | |||
| 434 | lc->extended_save_area_addr = (__u32) | 450 | lc->extended_save_area_addr = (__u32) |
| 435 | __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0); | 451 | __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0); |
| 436 | /* enable extended save area */ | 452 | /* enable extended save area */ |
| 437 | ctl_set_bit(14, 29); | 453 | __ctl_set_bit(14, 29); |
| 438 | } | 454 | } |
| 439 | #endif | 455 | #endif |
| 440 | set_prefix((u32)(unsigned long) lc); | 456 | set_prefix((u32)(unsigned long) lc); |
| @@ -478,6 +494,7 @@ setup_memory(void) | |||
| 478 | { | 494 | { |
| 479 | unsigned long bootmap_size; | 495 | unsigned long bootmap_size; |
| 480 | unsigned long start_pfn, end_pfn, init_pfn; | 496 | unsigned long start_pfn, end_pfn, init_pfn; |
| 497 | unsigned long last_rw_end; | ||
| 481 | int i; | 498 | int i; |
| 482 | 499 | ||
| 483 | /* | 500 | /* |
| @@ -533,27 +550,39 @@ setup_memory(void) | |||
| 533 | /* | 550 | /* |
| 534 | * Register RAM areas with the bootmem allocator. | 551 | * Register RAM areas with the bootmem allocator. |
| 535 | */ | 552 | */ |
| 553 | last_rw_end = start_pfn; | ||
| 536 | 554 | ||
| 537 | for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) { | 555 | for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) { |
| 538 | unsigned long start_chunk, end_chunk, pfn; | 556 | unsigned long start_chunk, end_chunk; |
| 539 | 557 | ||
| 540 | if (memory_chunk[i].type != CHUNK_READ_WRITE) | 558 | if (memory_chunk[i].type != CHUNK_READ_WRITE) |
| 541 | continue; | 559 | continue; |
| 542 | start_chunk = PFN_DOWN(memory_chunk[i].addr); | 560 | start_chunk = (memory_chunk[i].addr + PAGE_SIZE - 1); |
| 543 | end_chunk = start_chunk + PFN_DOWN(memory_chunk[i].size) - 1; | 561 | start_chunk >>= PAGE_SHIFT; |
| 544 | end_chunk = min(end_chunk, end_pfn); | 562 | end_chunk = (memory_chunk[i].addr + memory_chunk[i].size); |
| 545 | if (start_chunk >= end_chunk) | 563 | end_chunk >>= PAGE_SHIFT; |
| 546 | continue; | 564 | if (start_chunk < start_pfn) |
| 547 | add_active_range(0, start_chunk, end_chunk); | 565 | start_chunk = start_pfn; |
| 548 | pfn = max(start_chunk, start_pfn); | 566 | if (end_chunk > end_pfn) |
| 549 | for (; pfn <= end_chunk; pfn++) | 567 | end_chunk = end_pfn; |
| 550 | page_set_storage_key(PFN_PHYS(pfn), PAGE_DEFAULT_KEY); | 568 | if (start_chunk < end_chunk) { |
| 569 | /* Initialize storage key for RAM pages */ | ||
| 570 | for (init_pfn = start_chunk ; init_pfn < end_chunk; | ||
| 571 | init_pfn++) | ||
| 572 | page_set_storage_key(init_pfn << PAGE_SHIFT, | ||
| 573 | PAGE_DEFAULT_KEY); | ||
| 574 | free_bootmem(start_chunk << PAGE_SHIFT, | ||
| 575 | (end_chunk - start_chunk) << PAGE_SHIFT); | ||
| 576 | if (last_rw_end < start_chunk) | ||
| 577 | add_memory_hole(last_rw_end, start_chunk - 1); | ||
| 578 | last_rw_end = end_chunk; | ||
| 579 | } | ||
| 551 | } | 580 | } |
| 552 | 581 | ||
| 553 | psw_set_key(PAGE_DEFAULT_KEY); | 582 | psw_set_key(PAGE_DEFAULT_KEY); |
| 554 | 583 | ||
| 555 | free_bootmem_with_active_regions(0, max_pfn); | 584 | if (last_rw_end < end_pfn - 1) |
| 556 | reserve_bootmem(0, PFN_PHYS(start_pfn)); | 585 | add_memory_hole(last_rw_end, end_pfn - 1); |
| 557 | 586 | ||
| 558 | /* | 587 | /* |
| 559 | * Reserve the bootmem bitmap itself as well. We do this in two | 588 | * Reserve the bootmem bitmap itself as well. We do this in two |
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 4392a77cbae8..4c8a7954ef48 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
| @@ -80,10 +80,10 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
| 80 | old_sigset_t mask; | 80 | old_sigset_t mask; |
| 81 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || | 81 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || |
| 82 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || | 82 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || |
| 83 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) | 83 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || |
| 84 | __get_user(new_ka.sa.sa_flags, &act->sa_flags) || | ||
| 85 | __get_user(mask, &act->sa_mask)) | ||
| 84 | return -EFAULT; | 86 | return -EFAULT; |
| 85 | __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
| 86 | __get_user(mask, &act->sa_mask); | ||
| 87 | siginitset(&new_ka.sa.sa_mask, mask); | 87 | siginitset(&new_ka.sa.sa_mask, mask); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| @@ -92,10 +92,10 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
| 92 | if (!ret && oact) { | 92 | if (!ret && oact) { |
| 93 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || | 93 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || |
| 94 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || | 94 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || |
| 95 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) | 95 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || |
| 96 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || | ||
| 97 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) | ||
| 96 | return -EFAULT; | 98 | return -EFAULT; |
| 97 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
| 98 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | return ret; | 101 | return ret; |
diff --git a/arch/s390/kernel/stacktrace.c b/arch/s390/kernel/stacktrace.c index d9428a0fc8fb..0d14a4789bf2 100644 --- a/arch/s390/kernel/stacktrace.c +++ b/arch/s390/kernel/stacktrace.c | |||
| @@ -62,27 +62,26 @@ static inline unsigned long save_context_stack(struct stack_trace *trace, | |||
| 62 | void save_stack_trace(struct stack_trace *trace, struct task_struct *task) | 62 | void save_stack_trace(struct stack_trace *trace, struct task_struct *task) |
| 63 | { | 63 | { |
| 64 | register unsigned long sp asm ("15"); | 64 | register unsigned long sp asm ("15"); |
| 65 | unsigned long orig_sp; | 65 | unsigned long orig_sp, new_sp; |
| 66 | 66 | ||
| 67 | sp &= PSW_ADDR_INSN; | 67 | orig_sp = sp & PSW_ADDR_INSN; |
| 68 | orig_sp = sp; | ||
| 69 | 68 | ||
| 70 | sp = save_context_stack(trace, &trace->skip, sp, | 69 | new_sp = save_context_stack(trace, &trace->skip, orig_sp, |
| 71 | S390_lowcore.panic_stack - PAGE_SIZE, | 70 | S390_lowcore.panic_stack - PAGE_SIZE, |
| 72 | S390_lowcore.panic_stack); | 71 | S390_lowcore.panic_stack); |
| 73 | if ((sp != orig_sp) && !trace->all_contexts) | 72 | if ((new_sp != orig_sp) && !trace->all_contexts) |
| 74 | return; | 73 | return; |
| 75 | sp = save_context_stack(trace, &trace->skip, sp, | 74 | new_sp = save_context_stack(trace, &trace->skip, new_sp, |
| 76 | S390_lowcore.async_stack - ASYNC_SIZE, | 75 | S390_lowcore.async_stack - ASYNC_SIZE, |
| 77 | S390_lowcore.async_stack); | 76 | S390_lowcore.async_stack); |
| 78 | if ((sp != orig_sp) && !trace->all_contexts) | 77 | if ((new_sp != orig_sp) && !trace->all_contexts) |
| 79 | return; | 78 | return; |
| 80 | if (task) | 79 | if (task) |
| 81 | save_context_stack(trace, &trace->skip, sp, | 80 | save_context_stack(trace, &trace->skip, new_sp, |
| 82 | (unsigned long) task_stack_page(task), | 81 | (unsigned long) task_stack_page(task), |
| 83 | (unsigned long) task_stack_page(task) + THREAD_SIZE); | 82 | (unsigned long) task_stack_page(task) + THREAD_SIZE); |
| 84 | else | 83 | else |
| 85 | save_context_stack(trace, &trace->skip, sp, | 84 | save_context_stack(trace, &trace->skip, new_sp, |
| 86 | S390_lowcore.thread_info, | 85 | S390_lowcore.thread_info, |
| 87 | S390_lowcore.thread_info + THREAD_SIZE); | 86 | S390_lowcore.thread_info + THREAD_SIZE); |
| 88 | return; | 87 | return; |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index e59baec56520..a4ceae3dbcf1 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
| @@ -320,3 +320,4 @@ SYSCALL(sys_tee,sys_tee,sys_tee_wrapper) | |||
| 320 | SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) | 320 | SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) |
| 321 | NI_SYSCALL /* 310 sys_move_pages */ | 321 | NI_SYSCALL /* 310 sys_move_pages */ |
| 322 | SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) | 322 | SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) |
| 323 | SYSCALL(sys_epoll_pwait,sys_epoll_pwait,sys_ni_syscall) | ||
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 66375a5e3d12..92ecffbc8d82 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
| @@ -462,7 +462,8 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
| 462 | local_irq_enable(); | 462 | local_irq_enable(); |
| 463 | 463 | ||
| 464 | if (regs->psw.mask & PSW_MASK_PSTATE) { | 464 | if (regs->psw.mask & PSW_MASK_PSTATE) { |
| 465 | get_user(*((__u16 *) opcode), (__u16 __user *) location); | 465 | if (get_user(*((__u16 *) opcode), (__u16 __user *) location)) |
| 466 | return; | ||
| 466 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { | 467 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { |
| 467 | if (current->ptrace & PT_PTRACED) | 468 | if (current->ptrace & PT_PTRACED) |
| 468 | force_sig(SIGTRAP, current); | 469 | force_sig(SIGTRAP, current); |
| @@ -470,20 +471,25 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
| 470 | signal = SIGILL; | 471 | signal = SIGILL; |
| 471 | #ifdef CONFIG_MATHEMU | 472 | #ifdef CONFIG_MATHEMU |
| 472 | } else if (opcode[0] == 0xb3) { | 473 | } else if (opcode[0] == 0xb3) { |
| 473 | get_user(*((__u16 *) (opcode+2)), location+1); | 474 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 475 | return; | ||
| 474 | signal = math_emu_b3(opcode, regs); | 476 | signal = math_emu_b3(opcode, regs); |
| 475 | } else if (opcode[0] == 0xed) { | 477 | } else if (opcode[0] == 0xed) { |
| 476 | get_user(*((__u32 *) (opcode+2)), | 478 | if (get_user(*((__u32 *) (opcode+2)), |
| 477 | (__u32 __user *)(location+1)); | 479 | (__u32 __user *)(location+1))) |
| 480 | return; | ||
| 478 | signal = math_emu_ed(opcode, regs); | 481 | signal = math_emu_ed(opcode, regs); |
| 479 | } else if (*((__u16 *) opcode) == 0xb299) { | 482 | } else if (*((__u16 *) opcode) == 0xb299) { |
| 480 | get_user(*((__u16 *) (opcode+2)), location+1); | 483 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 484 | return; | ||
| 481 | signal = math_emu_srnm(opcode, regs); | 485 | signal = math_emu_srnm(opcode, regs); |
| 482 | } else if (*((__u16 *) opcode) == 0xb29c) { | 486 | } else if (*((__u16 *) opcode) == 0xb29c) { |
| 483 | get_user(*((__u16 *) (opcode+2)), location+1); | 487 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 488 | return; | ||
| 484 | signal = math_emu_stfpc(opcode, regs); | 489 | signal = math_emu_stfpc(opcode, regs); |
| 485 | } else if (*((__u16 *) opcode) == 0xb29d) { | 490 | } else if (*((__u16 *) opcode) == 0xb29d) { |
| 486 | get_user(*((__u16 *) (opcode+2)), location+1); | 491 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 492 | return; | ||
| 487 | signal = math_emu_lfpc(opcode, regs); | 493 | signal = math_emu_lfpc(opcode, regs); |
| 488 | #endif | 494 | #endif |
| 489 | } else | 495 | } else |
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S index af9e69a03011..fe0f2e97ba7b 100644 --- a/arch/s390/kernel/vmlinux.lds.S +++ b/arch/s390/kernel/vmlinux.lds.S | |||
| @@ -83,13 +83,7 @@ SECTIONS | |||
| 83 | __setup_end = .; | 83 | __setup_end = .; |
| 84 | __initcall_start = .; | 84 | __initcall_start = .; |
| 85 | .initcall.init : { | 85 | .initcall.init : { |
| 86 | *(.initcall1.init) | 86 | INITCALLS |
| 87 | *(.initcall2.init) | ||
| 88 | *(.initcall3.init) | ||
| 89 | *(.initcall4.init) | ||
| 90 | *(.initcall5.init) | ||
| 91 | *(.initcall6.init) | ||
| 92 | *(.initcall7.init) | ||
| 93 | } | 87 | } |
| 94 | __initcall_end = .; | 88 | __initcall_end = .; |
| 95 | __con_initcall_start = .; | 89 | __con_initcall_start = .; |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 1d7d3938b2b1..21baaf5496d6 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
| @@ -209,11 +209,11 @@ static void list_add_sorted(struct vtimer_list *timer, struct list_head *head) | |||
| 209 | * Do the callback functions of expired vtimer events. | 209 | * Do the callback functions of expired vtimer events. |
| 210 | * Called from within the interrupt handler. | 210 | * Called from within the interrupt handler. |
| 211 | */ | 211 | */ |
| 212 | static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs) | 212 | static void do_callbacks(struct list_head *cb_list) |
| 213 | { | 213 | { |
| 214 | struct vtimer_queue *vt_list; | 214 | struct vtimer_queue *vt_list; |
| 215 | struct vtimer_list *event, *tmp; | 215 | struct vtimer_list *event, *tmp; |
| 216 | void (*fn)(unsigned long, struct pt_regs*); | 216 | void (*fn)(unsigned long); |
| 217 | unsigned long data; | 217 | unsigned long data; |
| 218 | 218 | ||
| 219 | if (list_empty(cb_list)) | 219 | if (list_empty(cb_list)) |
| @@ -224,7 +224,7 @@ static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs) | |||
| 224 | list_for_each_entry_safe(event, tmp, cb_list, entry) { | 224 | list_for_each_entry_safe(event, tmp, cb_list, entry) { |
| 225 | fn = event->function; | 225 | fn = event->function; |
| 226 | data = event->data; | 226 | data = event->data; |
| 227 | fn(data, regs); | 227 | fn(data); |
| 228 | 228 | ||
| 229 | if (!event->interval) | 229 | if (!event->interval) |
| 230 | /* delete one shot timer */ | 230 | /* delete one shot timer */ |
| @@ -275,7 +275,7 @@ static void do_cpu_timer_interrupt(__u16 error_code) | |||
| 275 | list_move_tail(&event->entry, &cb_list); | 275 | list_move_tail(&event->entry, &cb_list); |
| 276 | } | 276 | } |
| 277 | spin_unlock(&vt_list->lock); | 277 | spin_unlock(&vt_list->lock); |
| 278 | do_callbacks(&cb_list, get_irq_regs()); | 278 | do_callbacks(&cb_list); |
| 279 | 279 | ||
| 280 | /* next event is first in list */ | 280 | /* next event is first in list */ |
| 281 | spin_lock(&vt_list->lock); | 281 | spin_lock(&vt_list->lock); |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index d99891718709..e1881c31b1cb 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
| @@ -84,6 +84,7 @@ void show_mem(void) | |||
| 84 | printk("%d pages swap cached\n",cached); | 84 | printk("%d pages swap cached\n",cached); |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | extern unsigned long __initdata zholes_size[]; | ||
| 87 | /* | 88 | /* |
| 88 | * paging_init() sets up the page tables | 89 | * paging_init() sets up the page tables |
| 89 | */ | 90 | */ |
| @@ -100,15 +101,16 @@ void __init paging_init(void) | |||
| 100 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | _KERNSEG_TABLE; | 101 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | _KERNSEG_TABLE; |
| 101 | static const int ssm_mask = 0x04000000L; | 102 | static const int ssm_mask = 0x04000000L; |
| 102 | unsigned long ro_start_pfn, ro_end_pfn; | 103 | unsigned long ro_start_pfn, ro_end_pfn; |
| 103 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | 104 | unsigned long zones_size[MAX_NR_ZONES]; |
| 104 | 105 | ||
| 105 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); | 106 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); |
| 106 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); | 107 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); |
| 107 | 108 | ||
| 108 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | 109 | memset(zones_size, 0, sizeof(zones_size)); |
| 109 | max_zone_pfns[ZONE_DMA] = max_low_pfn; | 110 | zones_size[ZONE_DMA] = max_low_pfn; |
| 110 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | 111 | free_area_init_node(0, &contig_page_data, zones_size, |
| 111 | free_area_init_nodes(max_zone_pfns); | 112 | __pa(PAGE_OFFSET) >> PAGE_SHIFT, |
| 113 | zholes_size); | ||
| 112 | 114 | ||
| 113 | /* unmap whole virtual address space */ | 115 | /* unmap whole virtual address space */ |
| 114 | 116 | ||
| @@ -168,16 +170,26 @@ void __init paging_init(void) | |||
| 168 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | | 170 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | |
| 169 | _KERN_REGION_TABLE; | 171 | _KERN_REGION_TABLE; |
| 170 | static const int ssm_mask = 0x04000000L; | 172 | static const int ssm_mask = 0x04000000L; |
| 173 | unsigned long zones_size[MAX_NR_ZONES]; | ||
| 174 | unsigned long dma_pfn, high_pfn; | ||
| 171 | unsigned long ro_start_pfn, ro_end_pfn; | 175 | unsigned long ro_start_pfn, ro_end_pfn; |
| 172 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | ||
| 173 | 176 | ||
| 177 | memset(zones_size, 0, sizeof(zones_size)); | ||
| 178 | dma_pfn = MAX_DMA_ADDRESS >> PAGE_SHIFT; | ||
| 179 | high_pfn = max_low_pfn; | ||
| 174 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); | 180 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); |
| 175 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); | 181 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); |
| 176 | 182 | ||
| 177 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | 183 | if (dma_pfn > high_pfn) |
| 178 | max_zone_pfns[ZONE_DMA] = PFN_DOWN(MAX_DMA_ADDRESS); | 184 | zones_size[ZONE_DMA] = high_pfn; |
| 179 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | 185 | else { |
| 180 | free_area_init_nodes(max_zone_pfns); | 186 | zones_size[ZONE_DMA] = dma_pfn; |
| 187 | zones_size[ZONE_NORMAL] = high_pfn - dma_pfn; | ||
| 188 | } | ||
| 189 | |||
| 190 | /* Initialize mem_map[]. */ | ||
| 191 | free_area_init_node(0, &contig_page_data, zones_size, | ||
| 192 | __pa(PAGE_OFFSET) >> PAGE_SHIFT, zholes_size); | ||
| 181 | 193 | ||
| 182 | /* | 194 | /* |
| 183 | * map whole physical memory to virtual memory (identity mapping) | 195 | * map whole physical memory to virtual memory (identity mapping) |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index f6a0c4436168..6a461d4caeff 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
| @@ -45,6 +45,9 @@ config GENERIC_CALIBRATE_DELAY | |||
| 45 | config GENERIC_IOMAP | 45 | config GENERIC_IOMAP |
| 46 | bool | 46 | bool |
| 47 | 47 | ||
| 48 | config GENERIC_TIME | ||
| 49 | def_bool n | ||
| 50 | |||
| 48 | config ARCH_MAY_HAVE_PC_FDC | 51 | config ARCH_MAY_HAVE_PC_FDC |
| 49 | bool | 52 | bool |
| 50 | 53 | ||
| @@ -357,6 +360,7 @@ config CPU_HAS_SR_RB | |||
| 357 | endmenu | 360 | endmenu |
| 358 | 361 | ||
| 359 | menu "Timer support" | 362 | menu "Timer support" |
| 363 | depends on !GENERIC_TIME | ||
| 360 | 364 | ||
| 361 | config SH_TMU | 365 | config SH_TMU |
| 362 | bool "TMU timer support" | 366 | bool "TMU timer support" |
diff --git a/arch/sh/boards/hp6xx/hp6xx_apm.c b/arch/sh/boards/hp6xx/hp6xx_apm.c index 75f91aaae077..d146cdaa0b8b 100644 --- a/arch/sh/boards/hp6xx/hp6xx_apm.c +++ b/arch/sh/boards/hp6xx/hp6xx_apm.c | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | #include <asm/io.h> | 14 | #include <asm/io.h> |
| 15 | #include <asm/apm.h> | 15 | #include <asm/apm.h> |
| 16 | #include <asm/adc.h> | 16 | #include <asm/adc.h> |
| 17 | #include <asm/hp6xx/hp6xx.h> | 17 | #include <asm/hp6xx.h> |
| 18 | 18 | ||
| 19 | #define SH7709_PGDR 0xa400012c | 19 | #define SH7709_PGDR 0xa400012c |
| 20 | 20 | ||
| @@ -83,7 +83,7 @@ static int hp6x0_apm_get_info(char *buf, char **start, off_t fpos, int length) | |||
| 83 | return p - buf; | 83 | return p - buf; |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev, struct pt_regs *regs) | 86 | static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev) |
| 87 | { | 87 | { |
| 88 | if (!apm_suspended) | 88 | if (!apm_suspended) |
| 89 | apm_queue_event(APM_USER_SUSPEND); | 89 | apm_queue_event(APM_USER_SUSPEND); |
| @@ -96,7 +96,7 @@ static int __init hp6x0_apm_init(void) | |||
| 96 | int ret; | 96 | int ret; |
| 97 | 97 | ||
| 98 | ret = request_irq(HP680_BTN_IRQ, hp6x0_apm_interrupt, | 98 | ret = request_irq(HP680_BTN_IRQ, hp6x0_apm_interrupt, |
| 99 | SA_INTERRUPT, MODNAME, 0); | 99 | IRQF_DISABLED, MODNAME, 0); |
| 100 | if (unlikely(ret < 0)) { | 100 | if (unlikely(ret < 0)) { |
| 101 | printk(KERN_ERR MODNAME ": IRQ %d request failed\n", | 101 | printk(KERN_ERR MODNAME ": IRQ %d request failed\n", |
| 102 | HP680_BTN_IRQ); | 102 | HP680_BTN_IRQ); |
diff --git a/arch/sh/boards/hp6xx/pm.c b/arch/sh/boards/hp6xx/pm.c index 83d327212064..d1947732fb3e 100644 --- a/arch/sh/boards/hp6xx/pm.c +++ b/arch/sh/boards/hp6xx/pm.c | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #include <linux/time.h> | 12 | #include <linux/time.h> |
| 13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
| 14 | #include <asm/hd64461.h> | 14 | #include <asm/hd64461.h> |
| 15 | #include <asm/hp6xx/hp6xx.h> | 15 | #include <asm/hp6xx.h> |
| 16 | #include <asm/cpu/dac.h> | 16 | #include <asm/cpu/dac.h> |
| 17 | #include <asm/pm.h> | 17 | #include <asm/pm.h> |
| 18 | 18 | ||
diff --git a/arch/sh/boards/hp6xx/setup.c b/arch/sh/boards/hp6xx/setup.c index 2d3a5b4faf58..b5a96649ed26 100644 --- a/arch/sh/boards/hp6xx/setup.c +++ b/arch/sh/boards/hp6xx/setup.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <asm/hd64461.h> | 13 | #include <asm/hd64461.h> |
| 14 | #include <asm/io.h> | 14 | #include <asm/io.h> |
| 15 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
| 16 | #include <asm/hp6xx/hp6xx.h> | 16 | #include <asm/hp6xx.h> |
| 17 | #include <asm/cpu/dac.h> | 17 | #include <asm/cpu/dac.h> |
| 18 | 18 | ||
| 19 | #define SCPCR 0xa4000116 | 19 | #define SCPCR 0xa4000116 |
diff --git a/arch/sh/boards/landisk/landisk_pwb.c b/arch/sh/boards/landisk/landisk_pwb.c index 0b7bee1a9ca5..e62524978160 100644 --- a/arch/sh/boards/landisk/landisk_pwb.c +++ b/arch/sh/boards/landisk/landisk_pwb.c | |||
| @@ -135,7 +135,7 @@ static int swdrv_write(struct file *filp, const char *buff, size_t count, | |||
| 135 | return count; | 135 | return count; |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static irqreturn_t sw_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 138 | static irqreturn_t sw_interrupt(int irq, void *dev_id) |
| 139 | { | 139 | { |
| 140 | landisk_btn = (0x0ff & (~ctrl_inb(PA_STATUS))); | 140 | landisk_btn = (0x0ff & (~ctrl_inb(PA_STATUS))); |
| 141 | disable_irq(IRQ_BUTTON); | 141 | disable_irq(IRQ_BUTTON); |
diff --git a/arch/sh/boards/mpc1211/setup.c b/arch/sh/boards/mpc1211/setup.c index 01c10fa5c058..7c3d1d304157 100644 --- a/arch/sh/boards/mpc1211/setup.c +++ b/arch/sh/boards/mpc1211/setup.c | |||
| @@ -69,7 +69,6 @@ static void __init pci_write_config(unsigned long busNo, | |||
| 69 | 69 | ||
| 70 | static unsigned char m_irq_mask = 0xfb; | 70 | static unsigned char m_irq_mask = 0xfb; |
| 71 | static unsigned char s_irq_mask = 0xff; | 71 | static unsigned char s_irq_mask = 0xff; |
| 72 | volatile unsigned long irq_err_count; | ||
| 73 | 72 | ||
| 74 | static void disable_mpc1211_irq(unsigned int irq) | 73 | static void disable_mpc1211_irq(unsigned int irq) |
| 75 | { | 74 | { |
| @@ -118,7 +117,7 @@ static void mask_and_ack_mpc1211(unsigned int irq) | |||
| 118 | if(irq < 8) { | 117 | if(irq < 8) { |
| 119 | if(m_irq_mask & (1<<irq)){ | 118 | if(m_irq_mask & (1<<irq)){ |
| 120 | if(!mpc1211_irq_real(irq)){ | 119 | if(!mpc1211_irq_real(irq)){ |
| 121 | irq_err_count++; | 120 | atomic_inc(&irq_err_count) |
| 122 | printk("spurious 8259A interrupt: IRQ %x\n",irq); | 121 | printk("spurious 8259A interrupt: IRQ %x\n",irq); |
| 123 | } | 122 | } |
| 124 | } else { | 123 | } else { |
| @@ -131,7 +130,7 @@ static void mask_and_ack_mpc1211(unsigned int irq) | |||
| 131 | } else { | 130 | } else { |
| 132 | if(s_irq_mask & (1<<(irq - 8))){ | 131 | if(s_irq_mask & (1<<(irq - 8))){ |
| 133 | if(!mpc1211_irq_real(irq)){ | 132 | if(!mpc1211_irq_real(irq)){ |
| 134 | irq_err_count++; | 133 | atomic_inc(&irq_err_count); |
| 135 | printk("spurious 8259A interrupt: IRQ %x\n",irq); | 134 | printk("spurious 8259A interrupt: IRQ %x\n",irq); |
| 136 | } | 135 | } |
| 137 | } else { | 136 | } else { |
diff --git a/arch/sh/boards/renesas/hs7751rvoip/io.c b/arch/sh/boards/renesas/hs7751rvoip/io.c index 51f3f6574210..bb9aa0d62852 100644 --- a/arch/sh/boards/renesas/hs7751rvoip/io.c +++ b/arch/sh/boards/renesas/hs7751rvoip/io.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 16 | #include <linux/pci.h> | 16 | #include <linux/pci.h> |
| 17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
| 18 | #include <asm/hs7751rvoip/hs7751rvoip.h> | 18 | #include <asm/hs7751rvoip.h> |
| 19 | #include <asm/addrspace.h> | 19 | #include <asm/addrspace.h> |
| 20 | 20 | ||
| 21 | extern void *area6_io8_base; /* Area 6 8bit I/O Base address */ | 21 | extern void *area6_io8_base; /* Area 6 8bit I/O Base address */ |
diff --git a/arch/sh/boards/renesas/hs7751rvoip/irq.c b/arch/sh/boards/renesas/hs7751rvoip/irq.c index c617b188258a..943f93aa6052 100644 --- a/arch/sh/boards/renesas/hs7751rvoip/irq.c +++ b/arch/sh/boards/renesas/hs7751rvoip/irq.c | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
| 15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
| 16 | #include <asm/irq.h> | 16 | #include <asm/irq.h> |
| 17 | #include <asm/hs7751rvoip/hs7751rvoip.h> | 17 | #include <asm/hs7751rvoip.h> |
| 18 | 18 | ||
| 19 | static int mask_pos[] = {8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7}; | 19 | static int mask_pos[] = {8, 9, 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7}; |
| 20 | 20 | ||
diff --git a/arch/sh/boards/renesas/hs7751rvoip/setup.c b/arch/sh/boards/renesas/hs7751rvoip/setup.c index 0414c15c3458..f7d0e304d899 100644 --- a/arch/sh/boards/renesas/hs7751rvoip/setup.c +++ b/arch/sh/boards/renesas/hs7751rvoip/setup.c | |||
| @@ -10,22 +10,21 @@ | |||
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
| 11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
| 12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
| 13 | #include <linux/vmalloc.h> | ||
| 14 | #include <linux/hdreg.h> | ||
| 15 | #include <linux/ide.h> | ||
| 16 | #include <linux/pm.h> | 13 | #include <linux/pm.h> |
| 14 | #include <asm/hs7751rvoip.h> | ||
| 17 | #include <asm/io.h> | 15 | #include <asm/io.h> |
| 18 | #include <asm/hs7751rvoip/hs7751rvoip.h> | ||
| 19 | #include <asm/machvec.h> | 16 | #include <asm/machvec.h> |
| 20 | #include <asm/rtc.h> | ||
| 21 | #include <asm/irq.h> | ||
| 22 | 17 | ||
| 23 | static void __init hs7751rvoip_init_irq(void) | 18 | static struct ipr_data hs77501rvoip_ipr_map[] = { |
| 24 | { | ||
| 25 | #if defined(CONFIG_HS7751RVOIP_CODEC) | 19 | #if defined(CONFIG_HS7751RVOIP_CODEC) |
| 26 | make_ipr_irq(DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | 20 | { DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 27 | make_ipr_irq(DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | 21 | { DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 28 | #endif | 22 | #endif |
| 23 | }; | ||
| 24 | |||
| 25 | static void __init hs7751rvoip_init_irq(void) | ||
| 26 | { | ||
| 27 | make_ipr_irq(hs77501rvoip_ipr_map, ARRAY_SIZE(hs77501rvoip_ipr_map)); | ||
| 29 | 28 | ||
| 30 | init_hs7751rvoip_IRQ(); | 29 | init_hs7751rvoip_IRQ(); |
| 31 | } | 30 | } |
diff --git a/arch/sh/boards/renesas/r7780rp/io.c b/arch/sh/boards/renesas/r7780rp/io.c index db92d6e6ae99..311ccccba718 100644 --- a/arch/sh/boards/renesas/r7780rp/io.c +++ b/arch/sh/boards/renesas/r7780rp/io.c | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #include <linux/pci.h> | 11 | #include <linux/pci.h> |
| 12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
| 13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
| 14 | #include <asm/r7780rp/r7780rp.h> | 14 | #include <asm/r7780rp.h> |
| 15 | #include <asm/addrspace.h> | 15 | #include <asm/addrspace.h> |
| 16 | #include <asm/io.h> | 16 | #include <asm/io.h> |
| 17 | 17 | ||
diff --git a/arch/sh/boards/renesas/r7780rp/irq.c b/arch/sh/boards/renesas/r7780rp/irq.c index 2d960e9a3143..aa15ec5bc69e 100644 --- a/arch/sh/boards/renesas/r7780rp/irq.c +++ b/arch/sh/boards/renesas/r7780rp/irq.c | |||
| @@ -1,18 +1,17 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/arch/sh/boards/renesas/r7780rp/irq.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Kazumoto Kojima | ||
| 5 | * | ||
| 6 | * Renesas Solutions Highlander R7780RP-1 Support. | 2 | * Renesas Solutions Highlander R7780RP-1 Support. |
| 7 | * | 3 | * |
| 8 | * Modified for R7780RP-1 by | 4 | * Copyright (C) 2002 Atom Create Engineering Co., Ltd. |
| 9 | * Atom Create Engineering Co., Ltd. 2002. | 5 | * Copyright (C) 2006 Paul Mundt |
| 6 | * | ||
| 7 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 8 | * License. See the file "COPYING" in the main directory of this archive | ||
| 9 | * for more details. | ||
| 10 | */ | 10 | */ |
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/irq.h> | 12 | #include <linux/irq.h> |
| 13 | #include <asm/io.h> | 13 | #include <linux/io.h> |
| 14 | #include <asm/irq.h> | 14 | #include <asm/r7780rp.h> |
| 15 | #include <asm/r7780rp/r7780rp.h> | ||
| 16 | 15 | ||
| 17 | #ifdef CONFIG_SH_R7780MP | 16 | #ifdef CONFIG_SH_R7780MP |
| 18 | static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0}; | 17 | static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0}; |
| @@ -20,71 +19,26 @@ static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0}; | |||
| 20 | static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0}; | 19 | static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0}; |
| 21 | #endif | 20 | #endif |
| 22 | 21 | ||
| 23 | static void enable_r7780rp_irq(unsigned int irq); | ||
| 24 | static void disable_r7780rp_irq(unsigned int irq); | ||
| 25 | |||
| 26 | /* shutdown is same as "disable" */ | ||
| 27 | #define shutdown_r7780rp_irq disable_r7780rp_irq | ||
| 28 | |||
| 29 | static void ack_r7780rp_irq(unsigned int irq); | ||
| 30 | static void end_r7780rp_irq(unsigned int irq); | ||
| 31 | |||
| 32 | static unsigned int startup_r7780rp_irq(unsigned int irq) | ||
| 33 | { | ||
| 34 | enable_r7780rp_irq(irq); | ||
| 35 | return 0; /* never anything pending */ | ||
| 36 | } | ||
| 37 | |||
| 38 | static void disable_r7780rp_irq(unsigned int irq) | ||
| 39 | { | ||
| 40 | unsigned short val; | ||
| 41 | unsigned short mask = 0xffff ^ (0x0001 << mask_pos[irq]); | ||
| 42 | |||
| 43 | /* Set the priority in IPR to 0 */ | ||
| 44 | val = ctrl_inw(IRLCNTR1); | ||
| 45 | val &= mask; | ||
| 46 | ctrl_outw(val, IRLCNTR1); | ||
| 47 | } | ||
| 48 | |||
| 49 | static void enable_r7780rp_irq(unsigned int irq) | 22 | static void enable_r7780rp_irq(unsigned int irq) |
| 50 | { | 23 | { |
| 51 | unsigned short val; | ||
| 52 | unsigned short value = (0x0001 << mask_pos[irq]); | ||
| 53 | |||
| 54 | /* Set priority in IPR back to original value */ | 24 | /* Set priority in IPR back to original value */ |
| 55 | val = ctrl_inw(IRLCNTR1); | 25 | ctrl_outw(ctrl_inw(IRLCNTR1) | (1 << mask_pos[irq]), IRLCNTR1); |
| 56 | val |= value; | ||
| 57 | ctrl_outw(val, IRLCNTR1); | ||
| 58 | } | ||
| 59 | |||
| 60 | static void ack_r7780rp_irq(unsigned int irq) | ||
| 61 | { | ||
| 62 | disable_r7780rp_irq(irq); | ||
| 63 | } | 26 | } |
| 64 | 27 | ||
| 65 | static void end_r7780rp_irq(unsigned int irq) | 28 | static void disable_r7780rp_irq(unsigned int irq) |
| 66 | { | 29 | { |
| 67 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | 30 | /* Set the priority in IPR to 0 */ |
| 68 | enable_r7780rp_irq(irq); | 31 | ctrl_outw(ctrl_inw(IRLCNTR1) & (0xffff ^ (1 << mask_pos[irq])), |
| 32 | IRLCNTR1); | ||
| 69 | } | 33 | } |
| 70 | 34 | ||
| 71 | static struct hw_interrupt_type r7780rp_irq_type = { | 35 | static struct irq_chip r7780rp_irq_chip __read_mostly = { |
| 72 | .typename = "R7780RP-IRQ", | 36 | .name = "R7780RP", |
| 73 | .startup = startup_r7780rp_irq, | 37 | .mask = disable_r7780rp_irq, |
| 74 | .shutdown = shutdown_r7780rp_irq, | 38 | .unmask = enable_r7780rp_irq, |
| 75 | .enable = enable_r7780rp_irq, | 39 | .mask_ack = disable_r7780rp_irq, |
| 76 | .disable = disable_r7780rp_irq, | ||
| 77 | .ack = ack_r7780rp_irq, | ||
| 78 | .end = end_r7780rp_irq, | ||
| 79 | }; | 40 | }; |
| 80 | 41 | ||
| 81 | static void make_r7780rp_irq(unsigned int irq) | ||
| 82 | { | ||
| 83 | disable_irq_nosync(irq); | ||
| 84 | irq_desc[irq].chip = &r7780rp_irq_type; | ||
| 85 | disable_r7780rp_irq(irq); | ||
| 86 | } | ||
| 87 | |||
| 88 | /* | 42 | /* |
| 89 | * Initialize IRQ setting | 43 | * Initialize IRQ setting |
| 90 | */ | 44 | */ |
| @@ -92,24 +46,10 @@ void __init init_r7780rp_IRQ(void) | |||
| 92 | { | 46 | { |
| 93 | int i; | 47 | int i; |
| 94 | 48 | ||
| 95 | /* IRL0=PCI Slot #A | 49 | for (i = 0; i < 15; i++) { |
| 96 | * IRL1=PCI Slot #B | 50 | disable_irq_nosync(i); |
| 97 | * IRL2=PCI Slot #C | 51 | set_irq_chip_and_handler_name(i, &r7780rp_irq_chip, |
| 98 | * IRL3=PCI Slot #D | 52 | handle_level_irq, "level"); |
| 99 | * IRL4=CF Card | 53 | enable_r7780rp_irq(i); |
| 100 | * IRL5=CF Card Insert | 54 | } |
| 101 | * IRL6=M66596 | ||
| 102 | * IRL7=SD Card | ||
| 103 | * IRL8=Touch Panel | ||
| 104 | * IRL9=SCI | ||
| 105 | * IRL10=Serial | ||
| 106 | * IRL11=Extention #A | ||
| 107 | * IRL11=Extention #B | ||
| 108 | * IRL12=Debug LAN | ||
| 109 | * IRL13=Push Switch | ||
| 110 | * IRL14=ZiggBee IO | ||
| 111 | */ | ||
| 112 | |||
| 113 | for (i=0; i<15; i++) | ||
| 114 | make_r7780rp_irq(i); | ||
| 115 | } | 55 | } |
diff --git a/arch/sh/boards/renesas/r7780rp/setup.c b/arch/sh/boards/renesas/r7780rp/setup.c index b941aa0aa34e..c331caeb694b 100644 --- a/arch/sh/boards/renesas/r7780rp/setup.c +++ b/arch/sh/boards/renesas/r7780rp/setup.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
| 15 | #include <asm/machvec.h> | 15 | #include <asm/machvec.h> |
| 16 | #include <asm/r7780rp/r7780rp.h> | 16 | #include <asm/r7780rp.h> |
| 17 | #include <asm/clock.h> | 17 | #include <asm/clock.h> |
| 18 | #include <asm/io.h> | 18 | #include <asm/io.h> |
| 19 | 19 | ||
diff --git a/arch/sh/boards/renesas/rts7751r2d/io.c b/arch/sh/boards/renesas/rts7751r2d/io.c index 135aa0b5e62d..f2507a804979 100644 --- a/arch/sh/boards/renesas/rts7751r2d/io.c +++ b/arch/sh/boards/renesas/rts7751r2d/io.c | |||
| @@ -11,8 +11,8 @@ | |||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/pci.h> | 13 | #include <linux/pci.h> |
| 14 | #include <asm/rts7751r2d/rts7751r2d.h> | 14 | #include <linux/io.h> |
| 15 | #include <asm/io.h> | 15 | #include <asm/rts7751r2d.h> |
| 16 | #include <asm/addrspace.h> | 16 | #include <asm/addrspace.h> |
| 17 | 17 | ||
| 18 | /* | 18 | /* |
diff --git a/arch/sh/boards/renesas/rts7751r2d/irq.c b/arch/sh/boards/renesas/rts7751r2d/irq.c index c915e7a3693a..cb0eb20d1b43 100644 --- a/arch/sh/boards/renesas/rts7751r2d/irq.c +++ b/arch/sh/boards/renesas/rts7751r2d/irq.c | |||
| @@ -8,12 +8,10 @@ | |||
| 8 | * Modified for RTS7751R2D by | 8 | * Modified for RTS7751R2D by |
| 9 | * Atom Create Engineering Co., Ltd. 2002. | 9 | * Atom Create Engineering Co., Ltd. 2002. |
| 10 | */ | 10 | */ |
| 11 | |||
| 12 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 13 | #include <linux/irq.h> | 12 | #include <linux/irq.h> |
| 14 | #include <asm/io.h> | 13 | #include <linux/io.h> |
| 15 | #include <asm/irq.h> | 14 | #include <asm/rts7751r2d.h> |
| 16 | #include <asm/rts7751r2d/rts7751r2d.h> | ||
| 17 | 15 | ||
| 18 | #if defined(CONFIG_RTS7751R2D_REV11) | 16 | #if defined(CONFIG_RTS7751R2D_REV11) |
| 19 | static int mask_pos[] = {11, 9, 8, 12, 10, 6, 5, 4, 7, 14, 13, 0, 0, 0, 0}; | 17 | static int mask_pos[] = {11, 9, 8, 12, 10, 6, 5, 4, 7, 14, 13, 0, 0, 0, 0}; |
diff --git a/arch/sh/boards/renesas/rts7751r2d/led.c b/arch/sh/boards/renesas/rts7751r2d/led.c index a7ce66c1e4f0..509f548bdce0 100644 --- a/arch/sh/boards/renesas/rts7751r2d/led.c +++ b/arch/sh/boards/renesas/rts7751r2d/led.c | |||
| @@ -8,13 +8,9 @@ | |||
| 8 | * | 8 | * |
| 9 | * This file contains Renesas Technology Sales RTS7751R2D specific LED code. | 9 | * This file contains Renesas Technology Sales RTS7751R2D specific LED code. |
| 10 | */ | 10 | */ |
| 11 | 11 | #include <linux/io.h> | |
| 12 | #include <asm/io.h> | ||
| 13 | #include <asm/rts7751r2d/rts7751r2d.h> | ||
| 14 | |||
| 15 | #ifdef CONFIG_HEARTBEAT | ||
| 16 | |||
| 17 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
| 13 | #include <asm/rts7751r2d.h> | ||
| 18 | 14 | ||
| 19 | /* Cycle the LED's in the clasic Knightriger/Sun pattern */ | 15 | /* Cycle the LED's in the clasic Knightriger/Sun pattern */ |
| 20 | void heartbeat_rts7751r2d(void) | 16 | void heartbeat_rts7751r2d(void) |
| @@ -46,10 +42,3 @@ void heartbeat_rts7751r2d(void) | |||
| 46 | else | 42 | else |
| 47 | bit--; | 43 | bit--; |
| 48 | } | 44 | } |
| 49 | #endif /* CONFIG_HEARTBEAT */ | ||
| 50 | |||
| 51 | void rts7751r2d_led(unsigned short value) | ||
| 52 | { | ||
| 53 | ctrl_outw(value, PA_OUTPORT); | ||
| 54 | } | ||
| 55 | |||
diff --git a/arch/sh/boards/renesas/rts7751r2d/setup.c b/arch/sh/boards/renesas/rts7751r2d/setup.c index 20597a6e6702..5c042d35ec91 100644 --- a/arch/sh/boards/renesas/rts7751r2d/setup.c +++ b/arch/sh/boards/renesas/rts7751r2d/setup.c | |||
| @@ -12,9 +12,9 @@ | |||
| 12 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
| 13 | #include <linux/serial_8250.h> | 13 | #include <linux/serial_8250.h> |
| 14 | #include <linux/pm.h> | 14 | #include <linux/pm.h> |
| 15 | #include <asm/io.h> | ||
| 16 | #include <asm/machvec.h> | 15 | #include <asm/machvec.h> |
| 17 | #include <asm/mach/rts7751r2d.h> | 16 | #include <asm/mach/rts7751r2d.h> |
| 17 | #include <asm/io.h> | ||
| 18 | #include <asm/voyagergx.h> | 18 | #include <asm/voyagergx.h> |
| 19 | 19 | ||
| 20 | extern void heartbeat_rts7751r2d(void); | 20 | extern void heartbeat_rts7751r2d(void); |
diff --git a/arch/sh/boards/renesas/sh7710voipgw/setup.c b/arch/sh/boards/renesas/sh7710voipgw/setup.c index e57e7afab8c6..180810b12107 100644 --- a/arch/sh/boards/renesas/sh7710voipgw/setup.c +++ b/arch/sh/boards/renesas/sh7710voipgw/setup.c | |||
| @@ -13,6 +13,51 @@ | |||
| 13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
| 14 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
| 15 | 15 | ||
| 16 | static struct ipr_data sh7710voipgw_ipr_map[] = { | ||
| 17 | { TIMER2_IRQ, TIMER2_IPR_ADDR, TIMER2_IPR_POS, TIMER2_PRIORITY }, | ||
| 18 | { WDT_IRQ, WDT_IPR_ADDR, WDT_IPR_POS, WDT_PRIORITY }, | ||
| 19 | |||
| 20 | /* SCIF0 */ | ||
| 21 | { SCIF0_ERI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY }, | ||
| 22 | { SCIF0_RXI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY }, | ||
| 23 | { SCIF0_BRI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY }, | ||
| 24 | { SCIF0_TXI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY }, | ||
| 25 | |||
| 26 | /* DMAC-1 */ | ||
| 27 | { DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 28 | { DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 29 | { DMTE2_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 30 | { DMTE3_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 31 | |||
| 32 | /* DMAC-2 */ | ||
| 33 | { DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY }, | ||
| 34 | { DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY }, | ||
| 35 | |||
| 36 | /* IPSEC */ | ||
| 37 | { IPSEC_IRQ, IPSEC_IPR_ADDR, IPSEC_IPR_POS, IPSEC_PRIORITY }, | ||
| 38 | |||
| 39 | /* EDMAC */ | ||
| 40 | { EDMAC0_IRQ, EDMAC0_IPR_ADDR, EDMAC0_IPR_POS, EDMAC0_PRIORITY }, | ||
| 41 | { EDMAC1_IRQ, EDMAC1_IPR_ADDR, EDMAC1_IPR_POS, EDMAC1_PRIORITY }, | ||
| 42 | { EDMAC2_IRQ, EDMAC2_IPR_ADDR, EDMAC2_IPR_POS, EDMAC2_PRIORITY }, | ||
| 43 | |||
| 44 | /* SIOF0 */ | ||
| 45 | { SIOF0_ERI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 46 | { SIOF0_TXI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 47 | { SIOF0_RXI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 48 | { SIOF0_CCI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 49 | |||
| 50 | /* SIOF1 */ | ||
| 51 | { SIOF1_ERI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, SIOF1_PRIORITY }, | ||
| 52 | { SIOF1_TXI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, SIOF1_PRIORITY }, | ||
| 53 | { SIOF1_RXI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, SIOF1_PRIORITY }, | ||
| 54 | { SIOF1_CCI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, SIOF1_PRIORITY }, | ||
| 55 | |||
| 56 | /* SLIC IRQ's */ | ||
| 57 | { IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY }, | ||
| 58 | { IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY }, | ||
| 59 | }; | ||
| 60 | |||
| 16 | /* | 61 | /* |
| 17 | * Initialize IRQ setting | 62 | * Initialize IRQ setting |
| 18 | */ | 63 | */ |
| @@ -37,65 +82,7 @@ static void __init sh7710voipgw_init_irq(void) | |||
| 37 | */ | 82 | */ |
| 38 | ctrl_outw(0x2aa, INTC_ICR1); | 83 | ctrl_outw(0x2aa, INTC_ICR1); |
| 39 | 84 | ||
| 40 | /* Now make IPR interrupts */ | 85 | make_ipr_irq(sh7710voipgw_ipr_map, ARRAY_SIZE(sh7710voipgw_ipr_map)); |
| 41 | make_ipr_irq(TIMER2_IRQ, TIMER2_IPR_ADDR, | ||
| 42 | TIMER2_IPR_POS, TIMER2_PRIORITY); | ||
| 43 | make_ipr_irq(WDT_IRQ, WDT_IPR_ADDR, WDT_IPR_POS, WDT_PRIORITY); | ||
| 44 | |||
| 45 | /* SCIF0 */ | ||
| 46 | make_ipr_irq(SCIF0_ERI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, | ||
| 47 | SCIF0_PRIORITY); | ||
| 48 | make_ipr_irq(SCIF0_RXI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, | ||
| 49 | SCIF0_PRIORITY); | ||
| 50 | make_ipr_irq(SCIF0_BRI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, | ||
| 51 | SCIF0_PRIORITY); | ||
| 52 | make_ipr_irq(SCIF0_TXI_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, | ||
| 53 | SCIF0_PRIORITY); | ||
| 54 | |||
| 55 | /* DMAC-1 */ | ||
| 56 | make_ipr_irq(DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | ||
| 57 | make_ipr_irq(DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | ||
| 58 | make_ipr_irq(DMTE2_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | ||
| 59 | make_ipr_irq(DMTE3_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | ||
| 60 | |||
| 61 | /* DMAC-2 */ | ||
| 62 | make_ipr_irq(DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY); | ||
| 63 | make_ipr_irq(DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY); | ||
| 64 | |||
| 65 | /* IPSEC */ | ||
| 66 | make_ipr_irq(IPSEC_IRQ, IPSEC_IPR_ADDR, IPSEC_IPR_POS, IPSEC_PRIORITY); | ||
| 67 | |||
| 68 | /* EDMAC */ | ||
| 69 | make_ipr_irq(EDMAC0_IRQ, EDMAC0_IPR_ADDR, EDMAC0_IPR_POS, | ||
| 70 | EDMAC0_PRIORITY); | ||
| 71 | make_ipr_irq(EDMAC1_IRQ, EDMAC1_IPR_ADDR, EDMAC1_IPR_POS, | ||
| 72 | EDMAC1_PRIORITY); | ||
| 73 | make_ipr_irq(EDMAC2_IRQ, EDMAC2_IPR_ADDR, EDMAC2_IPR_POS, | ||
| 74 | EDMAC2_PRIORITY); | ||
| 75 | |||
| 76 | /* SIOF0 */ | ||
| 77 | make_ipr_irq(SIOF0_ERI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, | ||
| 78 | SIOF0_PRIORITY); | ||
| 79 | make_ipr_irq(SIOF0_TXI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, | ||
| 80 | SIOF0_PRIORITY); | ||
| 81 | make_ipr_irq(SIOF0_RXI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, | ||
| 82 | SIOF0_PRIORITY); | ||
| 83 | make_ipr_irq(SIOF0_CCI_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, | ||
| 84 | SIOF0_PRIORITY); | ||
| 85 | |||
| 86 | /* SIOF1 */ | ||
| 87 | make_ipr_irq(SIOF1_ERI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, | ||
| 88 | SIOF1_PRIORITY); | ||
| 89 | make_ipr_irq(SIOF1_TXI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, | ||
| 90 | SIOF1_PRIORITY); | ||
| 91 | make_ipr_irq(SIOF1_RXI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, | ||
| 92 | SIOF1_PRIORITY); | ||
| 93 | make_ipr_irq(SIOF1_CCI_IRQ, SIOF1_IPR_ADDR, SIOF1_IPR_POS, | ||
| 94 | SIOF1_PRIORITY); | ||
| 95 | |||
| 96 | /* SLIC IRQ's */ | ||
| 97 | make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY); | ||
| 98 | make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY); | ||
| 99 | } | 86 | } |
| 100 | 87 | ||
| 101 | /* | 88 | /* |
diff --git a/arch/sh/boards/se/7300/irq.c b/arch/sh/boards/se/7300/irq.c index ad1034f98a29..1279d776d60f 100644 --- a/arch/sh/boards/se/7300/irq.c +++ b/arch/sh/boards/se/7300/irq.c | |||
| @@ -13,6 +13,17 @@ | |||
| 13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
| 14 | #include <asm/se7300.h> | 14 | #include <asm/se7300.h> |
| 15 | 15 | ||
| 16 | static struct ipr_data se7300_ipr_map[] = { | ||
| 17 | /* PC_IRQ[0-3] -> IRQ0 (32) */ | ||
| 18 | { IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, 0x0f - IRQ0_IRQ }, | ||
| 19 | /* A_IRQ[0-3] -> IRQ1 (33) */ | ||
| 20 | { IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, 0x0f - IRQ1_IRQ }, | ||
| 21 | { SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 22 | { DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 23 | { DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 24 | { VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 25 | }; | ||
| 26 | |||
| 16 | /* | 27 | /* |
| 17 | * Initialize IRQ setting | 28 | * Initialize IRQ setting |
| 18 | */ | 29 | */ |
| @@ -23,14 +34,7 @@ init_7300se_IRQ(void) | |||
| 23 | ctrl_outw(0xa000, INTC_ICR1); /* IRQ mode; IRQ0,1 enable. */ | 34 | ctrl_outw(0xa000, INTC_ICR1); /* IRQ mode; IRQ0,1 enable. */ |
| 24 | ctrl_outw(0x0000, PORT_PFCR); /* use F for IRQ[3:0] and SIU. */ | 35 | ctrl_outw(0x0000, PORT_PFCR); /* use F for IRQ[3:0] and SIU. */ |
| 25 | 36 | ||
| 26 | /* PC_IRQ[0-3] -> IRQ0 (32) */ | 37 | make_ipr_irq(se7300_ipr_map, ARRAY_SIZE(se7300_ipr_map)); |
| 27 | make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, 0x0f - IRQ0_IRQ); | ||
| 28 | /* A_IRQ[0-3] -> IRQ1 (33) */ | ||
| 29 | make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, 0x0f - IRQ1_IRQ); | ||
| 30 | make_ipr_irq(SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY); | ||
| 31 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 32 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 33 | make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 34 | 38 | ||
| 35 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ | 39 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ |
| 36 | } | 40 | } |
diff --git a/arch/sh/boards/se/73180/irq.c b/arch/sh/boards/se/73180/irq.c index 2c62b8ea350e..e7200c56bb45 100644 --- a/arch/sh/boards/se/73180/irq.c +++ b/arch/sh/boards/se/73180/irq.c | |||
| @@ -87,13 +87,38 @@ shmse_irq_demux(int irq) | |||
| 87 | return irq; | 87 | return irq; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | static struct ipr_data se73180_siof0_ipr_map[] = { | ||
| 91 | { SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 92 | }; | ||
| 93 | static struct ipr_data se73180_vpu_ipr_map[] = { | ||
| 94 | { VPU_IRQ, VPU_IPR_ADDR, VPU_IPR_POS, 8 }, | ||
| 95 | }; | ||
| 96 | static struct ipr_data se73180_other_ipr_map[] = { | ||
| 97 | { DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 98 | { DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 99 | { DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY }, | ||
| 100 | { IIC0_ALI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 101 | { IIC0_TACKI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 102 | { IIC0_WAITI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 103 | { IIC0_DTEI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 104 | { SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 105 | { SIU_IRQ, SIU_IPR_ADDR, SIU_IPR_POS, SIU_PRIORITY }, | ||
| 106 | |||
| 107 | /* VIO interrupt */ | ||
| 108 | { CEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 109 | { BEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 110 | { VEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 111 | |||
| 112 | { LCDC_IRQ, LCDC_IPR_ADDR, LCDC_IPR_POS, LCDC_PRIORITY }, | ||
| 113 | }; | ||
| 114 | |||
| 90 | /* | 115 | /* |
| 91 | * Initialize IRQ setting | 116 | * Initialize IRQ setting |
| 92 | */ | 117 | */ |
| 93 | void __init | 118 | void __init |
| 94 | init_73180se_IRQ(void) | 119 | init_73180se_IRQ(void) |
| 95 | { | 120 | { |
| 96 | make_ipr_irq(SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY); | 121 | make_ipr_irq(se73180_siof0_ipr_map, ARRAY_SIZE(se73180_siof0_ipr_map)); |
| 97 | 122 | ||
| 98 | ctrl_outw(0x2000, 0xb03fffec); /* mrshpc irq enable */ | 123 | ctrl_outw(0x2000, 0xb03fffec); /* mrshpc irq enable */ |
| 99 | ctrl_outw(0x2000, 0xb07fffec); /* mrshpc irq enable */ | 124 | ctrl_outw(0x2000, 0xb07fffec); /* mrshpc irq enable */ |
| @@ -101,27 +126,11 @@ init_73180se_IRQ(void) | |||
| 101 | ctrl_outw(2 << ((7 - 5) * 2), INTC_ICR1); /* low-level irq */ | 126 | ctrl_outw(2 << ((7 - 5) * 2), INTC_ICR1); /* low-level irq */ |
| 102 | make_intreq_irq(10); | 127 | make_intreq_irq(10); |
| 103 | 128 | ||
| 104 | make_ipr_irq(VPU_IRQ, VPU_IPR_ADDR, VPU_IPR_POS, 8); | 129 | make_ipr_irq(se73180_vpu_ipr_map, ARRAY_SIZE(se73180_vpu_ipr_map)); |
| 105 | 130 | ||
| 106 | ctrl_outb(0x0f, INTC_IMCR5); /* enable SCIF IRQ */ | 131 | ctrl_outb(0x0f, INTC_IMCR5); /* enable SCIF IRQ */ |
| 107 | 132 | ||
| 108 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | 133 | make_ipr_irq(se73180_other_ipr_map, ARRAY_SIZE(se73180_other_ipr_map)); |
| 109 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 110 | make_ipr_irq(DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY); | ||
| 111 | make_ipr_irq(IIC0_ALI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY); | ||
| 112 | make_ipr_irq(IIC0_TACKI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, | ||
| 113 | IIC0_PRIORITY); | ||
| 114 | make_ipr_irq(IIC0_WAITI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, | ||
| 115 | IIC0_PRIORITY); | ||
| 116 | make_ipr_irq(IIC0_DTEI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY); | ||
| 117 | make_ipr_irq(SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY); | ||
| 118 | make_ipr_irq(SIU_IRQ, SIU_IPR_ADDR, SIU_IPR_POS, SIU_PRIORITY); | ||
| 119 | |||
| 120 | /* VIO interrupt */ | ||
| 121 | make_ipr_irq(CEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 122 | make_ipr_irq(BEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 123 | make_ipr_irq(VEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 124 | 134 | ||
| 125 | make_ipr_irq(LCDC_IRQ, LCDC_IPR_ADDR, LCDC_IPR_POS, LCDC_PRIORITY); | ||
| 126 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ | 135 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ |
| 127 | } | 136 | } |
diff --git a/arch/sh/boards/se/7343/irq.c b/arch/sh/boards/se/7343/irq.c index 288b62f59419..360153ecc55b 100644 --- a/arch/sh/boards/se/7343/irq.c +++ b/arch/sh/boards/se/7343/irq.c | |||
| @@ -102,6 +102,51 @@ shmse_irq_demux(int irq) | |||
| 102 | static struct irqaction irq5 = { no_action, 0, CPU_MASK_NONE, "IRQ5-cascade", | 102 | static struct irqaction irq5 = { no_action, 0, CPU_MASK_NONE, "IRQ5-cascade", |
| 103 | NULL, NULL}; | 103 | NULL, NULL}; |
| 104 | 104 | ||
| 105 | static struct ipr_data se7343_irq5_ipr_map[] = { | ||
| 106 | { IRQ5_IRQ, IRQ5_IPR_ADDR+2, IRQ5_IPR_POS, IRQ5_PRIORITY }, | ||
| 107 | }; | ||
| 108 | static struct ipr_data se7343_siof0_vpu_ipr_map[] = { | ||
| 109 | { SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 110 | { VPU_IRQ, VPU_IPR_ADDR, VPU_IPR_POS, 8 }, | ||
| 111 | }; | ||
| 112 | static struct ipr_data se7343_other_ipr_map[] = { | ||
| 113 | { DMTE0_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 114 | { DMTE1_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 115 | { DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 116 | { DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, | ||
| 117 | { DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY }, | ||
| 118 | { DMTE5_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY }, | ||
| 119 | |||
| 120 | /* I2C block */ | ||
| 121 | { IIC0_ALI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 122 | { IIC0_TACKI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 123 | { IIC0_WAITI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 124 | { IIC0_DTEI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY }, | ||
| 125 | |||
| 126 | { IIC1_ALI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY }, | ||
| 127 | { IIC1_TACKI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY }, | ||
| 128 | { IIC1_WAITI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY }, | ||
| 129 | { IIC1_DTEI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY }, | ||
| 130 | |||
| 131 | /* SIOF */ | ||
| 132 | { SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY }, | ||
| 133 | |||
| 134 | /* SIU */ | ||
| 135 | { SIU_IRQ, SIU_IPR_ADDR, SIU_IPR_POS, SIU_PRIORITY }, | ||
| 136 | |||
| 137 | /* VIO interrupt */ | ||
| 138 | { CEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 139 | { BEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 140 | { VEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, | ||
| 141 | |||
| 142 | /*MFI interrupt*/ | ||
| 143 | |||
| 144 | { MFI_IRQ, MFI_IPR_ADDR, MFI_IPR_POS, MFI_PRIORITY }, | ||
| 145 | |||
| 146 | /* LCD controller */ | ||
| 147 | { LCDC_IRQ, LCDC_IPR_ADDR, LCDC_IPR_POS, LCDC_PRIORITY }, | ||
| 148 | }; | ||
| 149 | |||
| 105 | /* | 150 | /* |
| 106 | * Initialize IRQ setting | 151 | * Initialize IRQ setting |
| 107 | */ | 152 | */ |
| @@ -138,54 +183,17 @@ init_7343se_IRQ(void) | |||
| 138 | /* Setup all external interrupts to be active low */ | 183 | /* Setup all external interrupts to be active low */ |
| 139 | ctrl_outw(0xaaaa, INTC_ICR1); | 184 | ctrl_outw(0xaaaa, INTC_ICR1); |
| 140 | 185 | ||
| 141 | make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR+2, IRQ5_IPR_POS, IRQ5_PRIORITY); | 186 | make_ipr_irq(se7343_irq5_ipr_map, ARRAY_SIZE(se7343_irq5_ipr_map)); |
| 187 | |||
| 142 | setup_irq(IRQ5_IRQ, &irq5); | 188 | setup_irq(IRQ5_IRQ, &irq5); |
| 143 | /* Set port control to use IRQ5 */ | 189 | /* Set port control to use IRQ5 */ |
| 144 | *(u16 *)0xA4050108 &= ~0xc; | 190 | *(u16 *)0xA4050108 &= ~0xc; |
| 145 | 191 | ||
| 146 | make_ipr_irq(SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY); | 192 | make_ipr_irq(se7343_siof0_vpu_ipr_map, ARRAY_SIZE(se7343_siof0_vpu_ipr_map)); |
| 147 | make_ipr_irq(VPU_IRQ, VPU_IPR_ADDR, VPU_IPR_POS, 8); | ||
| 148 | 193 | ||
| 149 | ctrl_outb(0x0f, INTC_IMCR5); /* enable SCIF IRQ */ | 194 | ctrl_outb(0x0f, INTC_IMCR5); /* enable SCIF IRQ */ |
| 150 | 195 | ||
| 151 | make_ipr_irq(DMTE0_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | 196 | make_ipr_irq(se7343_other_ipr_map, ARRAY_SIZE(se7343_other_ipr_map)); |
| 152 | make_ipr_irq(DMTE1_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 153 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 154 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | ||
| 155 | make_ipr_irq(DMTE4_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY); | ||
| 156 | make_ipr_irq(DMTE5_IRQ, DMA2_IPR_ADDR, DMA2_IPR_POS, DMA2_PRIORITY); | ||
| 157 | |||
| 158 | /* I2C block */ | ||
| 159 | make_ipr_irq(IIC0_ALI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY); | ||
| 160 | make_ipr_irq(IIC0_TACKI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, | ||
| 161 | IIC0_PRIORITY); | ||
| 162 | make_ipr_irq(IIC0_WAITI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, | ||
| 163 | IIC0_PRIORITY); | ||
| 164 | make_ipr_irq(IIC0_DTEI_IRQ, IIC0_IPR_ADDR, IIC0_IPR_POS, IIC0_PRIORITY); | ||
| 165 | |||
| 166 | make_ipr_irq(IIC1_ALI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY); | ||
| 167 | make_ipr_irq(IIC1_TACKI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, | ||
| 168 | IIC1_PRIORITY); | ||
| 169 | make_ipr_irq(IIC1_WAITI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, | ||
| 170 | IIC1_PRIORITY); | ||
| 171 | make_ipr_irq(IIC1_DTEI_IRQ, IIC1_IPR_ADDR, IIC1_IPR_POS, IIC1_PRIORITY); | ||
| 172 | |||
| 173 | /* SIOF */ | ||
| 174 | make_ipr_irq(SIOF0_IRQ, SIOF0_IPR_ADDR, SIOF0_IPR_POS, SIOF0_PRIORITY); | ||
| 175 | 197 | ||
| 176 | /* SIU */ | ||
| 177 | make_ipr_irq(SIU_IRQ, SIU_IPR_ADDR, SIU_IPR_POS, SIU_PRIORITY); | ||
| 178 | |||
| 179 | /* VIO interrupt */ | ||
| 180 | make_ipr_irq(CEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 181 | make_ipr_irq(BEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 182 | make_ipr_irq(VEU_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | ||
| 183 | |||
| 184 | /*MFI interrupt*/ | ||
| 185 | |||
| 186 | make_ipr_irq(MFI_IRQ, MFI_IPR_ADDR, MFI_IPR_POS, MFI_PRIORITY); | ||
| 187 | |||
| 188 | /* LCD controller */ | ||
| 189 | make_ipr_irq(LCDC_IRQ, LCDC_IPR_ADDR, LCDC_IPR_POS, LCDC_PRIORITY); | ||
| 190 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ | 198 | ctrl_outw(0x2000, PA_MRSHPC + 0x0c); /* mrshpc irq enable */ |
| 191 | } | 199 | } |
diff --git a/arch/sh/boards/se/770x/irq.c b/arch/sh/boards/se/770x/irq.c index cff6700bbafd..fcd7cd7fa05f 100644 --- a/arch/sh/boards/se/770x/irq.c +++ b/arch/sh/boards/se/770x/irq.c | |||
| @@ -13,6 +13,48 @@ | |||
| 13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
| 14 | #include <asm/se.h> | 14 | #include <asm/se.h> |
| 15 | 15 | ||
| 16 | static struct ipr_data se770x_ipr_map[] = { | ||
| 17 | #if defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
| 18 | /* This is default value */ | ||
| 19 | { 0xf-0x2, BCR_ILCRA, 2, 0x2 }, | ||
| 20 | { 0xf-0xa, BCR_ILCRA, 1, 0xa }, | ||
| 21 | { 0xf-0x5, BCR_ILCRB, 0, 0x5 }, | ||
| 22 | { 0xf-0x8, BCR_ILCRC, 1, 0x8 }, | ||
| 23 | { 0xf-0xc, BCR_ILCRC, 0, 0xc }, | ||
| 24 | { 0xf-0xe, BCR_ILCRD, 3, 0xe }, | ||
| 25 | { 0xf-0x3, BCR_ILCRD, 1, 0x3 }, /* LAN */ | ||
| 26 | { 0xf-0xd, BCR_ILCRE, 2, 0xd }, | ||
| 27 | { 0xf-0x9, BCR_ILCRE, 1, 0x9 }, | ||
| 28 | { 0xf-0x1, BCR_ILCRE, 0, 0x1 }, | ||
| 29 | { 0xf-0xf, BCR_ILCRF, 3, 0xf }, | ||
| 30 | { 0xf-0xb, BCR_ILCRF, 1, 0xb }, | ||
| 31 | { 0xf-0x7, BCR_ILCRG, 3, 0x7 }, | ||
| 32 | { 0xf-0x6, BCR_ILCRG, 2, 0x6 }, | ||
| 33 | { 0xf-0x4, BCR_ILCRG, 1, 0x4 }, | ||
| 34 | #else | ||
| 35 | { 14, BCR_ILCRA, 2, 0x0f-14 }, | ||
| 36 | { 12, BCR_ILCRA, 1, 0x0f-12 }, | ||
| 37 | { 8, BCR_ILCRB, 1, 0x0f- 8 }, | ||
| 38 | { 6, BCR_ILCRC, 3, 0x0f- 6 }, | ||
| 39 | { 5, BCR_ILCRC, 2, 0x0f- 5 }, | ||
| 40 | { 4, BCR_ILCRC, 1, 0x0f- 4 }, | ||
| 41 | { 3, BCR_ILCRC, 0, 0x0f- 3 }, | ||
| 42 | { 1, BCR_ILCRD, 3, 0x0f- 1 }, | ||
| 43 | |||
| 44 | { 10, BCR_ILCRD, 1, 0x0f-10 }, /* LAN */ | ||
| 45 | |||
| 46 | { 0, BCR_ILCRE, 3, 0x0f- 0 }, /* PCIRQ3 */ | ||
| 47 | { 11, BCR_ILCRE, 2, 0x0f-11 }, /* PCIRQ2 */ | ||
| 48 | { 9, BCR_ILCRE, 1, 0x0f- 9 }, /* PCIRQ1 */ | ||
| 49 | { 7, BCR_ILCRE, 0, 0x0f- 7 }, /* PCIRQ0 */ | ||
| 50 | |||
| 51 | /* #2, #13 are allocated for SLOT IRQ #1 and #2 (for now) */ | ||
| 52 | /* NOTE: #2 and #13 are not used on PC */ | ||
| 53 | { 13, BCR_ILCRG, 1, 0x0f-13 }, /* SLOTIRQ2 */ | ||
| 54 | { 2, BCR_ILCRG, 0, 0x0f- 2 }, /* SLOTIRQ1 */ | ||
| 55 | #endif | ||
| 56 | }; | ||
| 57 | |||
| 16 | /* | 58 | /* |
| 17 | * Initialize IRQ setting | 59 | * Initialize IRQ setting |
| 18 | */ | 60 | */ |
| @@ -38,42 +80,6 @@ void __init init_se_IRQ(void) | |||
| 38 | ctrl_outw(0, BCR_ILCRE); | 80 | ctrl_outw(0, BCR_ILCRE); |
| 39 | ctrl_outw(0, BCR_ILCRF); | 81 | ctrl_outw(0, BCR_ILCRF); |
| 40 | ctrl_outw(0, BCR_ILCRG); | 82 | ctrl_outw(0, BCR_ILCRG); |
| 41 | /* This is default value */ | ||
| 42 | make_ipr_irq(0xf-0x2, BCR_ILCRA, 2, 0x2); | ||
| 43 | make_ipr_irq(0xf-0xa, BCR_ILCRA, 1, 0xa); | ||
| 44 | make_ipr_irq(0xf-0x5, BCR_ILCRB, 0, 0x5); | ||
| 45 | make_ipr_irq(0xf-0x8, BCR_ILCRC, 1, 0x8); | ||
| 46 | make_ipr_irq(0xf-0xc, BCR_ILCRC, 0, 0xc); | ||
| 47 | make_ipr_irq(0xf-0xe, BCR_ILCRD, 3, 0xe); | ||
| 48 | make_ipr_irq(0xf-0x3, BCR_ILCRD, 1, 0x3); /* LAN */ | ||
| 49 | make_ipr_irq(0xf-0xd, BCR_ILCRE, 2, 0xd); | ||
| 50 | make_ipr_irq(0xf-0x9, BCR_ILCRE, 1, 0x9); | ||
| 51 | make_ipr_irq(0xf-0x1, BCR_ILCRE, 0, 0x1); | ||
| 52 | make_ipr_irq(0xf-0xf, BCR_ILCRF, 3, 0xf); | ||
| 53 | make_ipr_irq(0xf-0xb, BCR_ILCRF, 1, 0xb); | ||
| 54 | make_ipr_irq(0xf-0x7, BCR_ILCRG, 3, 0x7); | ||
| 55 | make_ipr_irq(0xf-0x6, BCR_ILCRG, 2, 0x6); | ||
| 56 | make_ipr_irq(0xf-0x4, BCR_ILCRG, 1, 0x4); | ||
| 57 | #else | ||
| 58 | make_ipr_irq(14, BCR_ILCRA, 2, 0x0f-14); | ||
| 59 | make_ipr_irq(12, BCR_ILCRA, 1, 0x0f-12); | ||
| 60 | make_ipr_irq( 8, BCR_ILCRB, 1, 0x0f- 8); | ||
| 61 | make_ipr_irq( 6, BCR_ILCRC, 3, 0x0f- 6); | ||
| 62 | make_ipr_irq( 5, BCR_ILCRC, 2, 0x0f- 5); | ||
| 63 | make_ipr_irq( 4, BCR_ILCRC, 1, 0x0f- 4); | ||
| 64 | make_ipr_irq( 3, BCR_ILCRC, 0, 0x0f- 3); | ||
| 65 | make_ipr_irq( 1, BCR_ILCRD, 3, 0x0f- 1); | ||
| 66 | |||
| 67 | make_ipr_irq(10, BCR_ILCRD, 1, 0x0f-10); /* LAN */ | ||
| 68 | |||
| 69 | make_ipr_irq( 0, BCR_ILCRE, 3, 0x0f- 0); /* PCIRQ3 */ | ||
| 70 | make_ipr_irq(11, BCR_ILCRE, 2, 0x0f-11); /* PCIRQ2 */ | ||
| 71 | make_ipr_irq( 9, BCR_ILCRE, 1, 0x0f- 9); /* PCIRQ1 */ | ||
| 72 | make_ipr_irq( 7, BCR_ILCRE, 0, 0x0f- 7); /* PCIRQ0 */ | ||
| 73 | |||
| 74 | /* #2, #13 are allocated for SLOT IRQ #1 and #2 (for now) */ | ||
| 75 | /* NOTE: #2 and #13 are not used on PC */ | ||
| 76 | make_ipr_irq(13, BCR_ILCRG, 1, 0x0f-13); /* SLOTIRQ2 */ | ||
| 77 | make_ipr_irq( 2, BCR_ILCRG, 0, 0x0f- 2); /* SLOTIRQ1 */ | ||
| 78 | #endif | 83 | #endif |
| 84 | make_ipr_irq(se770x_ipr_map, ARRAY_SIZE(se770x_ipr_map)); | ||
| 79 | } | 85 | } |
diff --git a/arch/sh/boards/se/7751/irq.c b/arch/sh/boards/se/7751/irq.c index c607b0a48479..e4c63a48296c 100644 --- a/arch/sh/boards/se/7751/irq.c +++ b/arch/sh/boards/se/7751/irq.c | |||
| @@ -14,53 +14,50 @@ | |||
| 14 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
| 15 | #include <asm/se7751.h> | 15 | #include <asm/se7751.h> |
| 16 | 16 | ||
| 17 | /* | 17 | static struct ipr_data se7751_ipr_map[] = { |
| 18 | * Initialize IRQ setting | ||
| 19 | */ | ||
| 20 | void __init init_7751se_IRQ(void) | ||
| 21 | { | ||
| 22 | |||
| 23 | /* Leave old Solution Engine code in for reference. */ | 18 | /* Leave old Solution Engine code in for reference. */ |
| 24 | #if defined(CONFIG_SH_SOLUTION_ENGINE) | 19 | #if defined(CONFIG_SH_SOLUTION_ENGINE) |
| 25 | /* | 20 | /* |
| 26 | * Super I/O (Just mimic PC): | 21 | * Super I/O (Just mimic PC): |
| 27 | * 1: keyboard | 22 | * 1: keyboard |
| 28 | * 3: serial 0 | 23 | * 3: serial 0 |
| 29 | * 4: serial 1 | 24 | * 4: serial 1 |
| 30 | * 5: printer | 25 | * 5: printer |
| 31 | * 6: floppy | 26 | * 6: floppy |
| 32 | * 8: rtc | 27 | * 8: rtc |
| 33 | * 12: mouse | 28 | * 12: mouse |
| 34 | * 14: ide0 | 29 | * 14: ide0 |
| 35 | */ | 30 | */ |
| 36 | make_ipr_irq(14, BCR_ILCRA, 2, 0x0f-14); | 31 | { 14, BCR_ILCRA, 2, 0x0f-14 }, |
| 37 | make_ipr_irq(12, BCR_ILCRA, 1, 0x0f-12); | 32 | { 12, BCR_ILCRA, 1, 0x0f-12 }, |
| 38 | make_ipr_irq( 8, BCR_ILCRB, 1, 0x0f- 8); | 33 | { 8, BCR_ILCRB, 1, 0x0f- 8 }, |
| 39 | make_ipr_irq( 6, BCR_ILCRC, 3, 0x0f- 6); | 34 | { 6, BCR_ILCRC, 3, 0x0f- 6 }, |
| 40 | make_ipr_irq( 5, BCR_ILCRC, 2, 0x0f- 5); | 35 | { 5, BCR_ILCRC, 2, 0x0f- 5 }, |
| 41 | make_ipr_irq( 4, BCR_ILCRC, 1, 0x0f- 4); | 36 | { 4, BCR_ILCRC, 1, 0x0f- 4 }, |
| 42 | make_ipr_irq( 3, BCR_ILCRC, 0, 0x0f- 3); | 37 | { 3, BCR_ILCRC, 0, 0x0f- 3 }, |
| 43 | make_ipr_irq( 1, BCR_ILCRD, 3, 0x0f- 1); | 38 | { 1, BCR_ILCRD, 3, 0x0f- 1 }, |
| 44 | 39 | ||
| 45 | make_ipr_irq(10, BCR_ILCRD, 1, 0x0f-10); /* LAN */ | 40 | { 10, BCR_ILCRD, 1, 0x0f-10 }, /* LAN */ |
| 46 | 41 | ||
| 47 | make_ipr_irq( 0, BCR_ILCRE, 3, 0x0f- 0); /* PCIRQ3 */ | 42 | { 0, BCR_ILCRE, 3, 0x0f- 0 }, /* PCIRQ3 */ |
| 48 | make_ipr_irq(11, BCR_ILCRE, 2, 0x0f-11); /* PCIRQ2 */ | 43 | { 11, BCR_ILCRE, 2, 0x0f-11 }, /* PCIRQ2 */ |
| 49 | make_ipr_irq( 9, BCR_ILCRE, 1, 0x0f- 9); /* PCIRQ1 */ | 44 | { 9, BCR_ILCRE, 1, 0x0f- 9 }, /* PCIRQ1 */ |
| 50 | make_ipr_irq( 7, BCR_ILCRE, 0, 0x0f- 7); /* PCIRQ0 */ | 45 | { 7, BCR_ILCRE, 0, 0x0f- 7 }, /* PCIRQ0 */ |
| 51 | 46 | ||
| 52 | /* #2, #13 are allocated for SLOT IRQ #1 and #2 (for now) */ | 47 | /* #2, #13 are allocated for SLOT IRQ #1 and #2 (for now) */ |
| 53 | /* NOTE: #2 and #13 are not used on PC */ | 48 | /* NOTE: #2 and #13 are not used on PC */ |
| 54 | make_ipr_irq(13, BCR_ILCRG, 1, 0x0f-13); /* SLOTIRQ2 */ | 49 | { 13, BCR_ILCRG, 1, 0x0f-13 }, /* SLOTIRQ2 */ |
| 55 | make_ipr_irq( 2, BCR_ILCRG, 0, 0x0f- 2); /* SLOTIRQ1 */ | 50 | { 2, BCR_ILCRG, 0, 0x0f- 2 }, /* SLOTIRQ1 */ |
| 56 | |||
| 57 | #elif defined(CONFIG_SH_7751_SOLUTION_ENGINE) | 51 | #elif defined(CONFIG_SH_7751_SOLUTION_ENGINE) |
| 58 | 52 | { 13, BCR_ILCRD, 3, 2 }, | |
| 59 | make_ipr_irq(13, BCR_ILCRD, 3, 2); | 53 | /* Add additional entries here as drivers are added and tested. */ |
| 60 | |||
| 61 | /* Add additional calls to make_ipr_irq() as drivers are added | ||
| 62 | * and tested. | ||
| 63 | */ | ||
| 64 | #endif | 54 | #endif |
| 55 | }; | ||
| 65 | 56 | ||
| 57 | /* | ||
| 58 | * Initialize IRQ setting | ||
| 59 | */ | ||
| 60 | void __init init_7751se_IRQ(void) | ||
| 61 | { | ||
| 62 | make_ipr_irq(se7751_ipr_map, ARRAY_SIZE(se7751_ipr_map)); | ||
| 66 | } | 63 | } |
diff --git a/arch/sh/boards/sh03/setup.c b/arch/sh/boards/sh03/setup.c index 137e2ba9243e..5ad1e19771be 100644 --- a/arch/sh/boards/sh03/setup.c +++ b/arch/sh/boards/sh03/setup.c | |||
| @@ -14,14 +14,17 @@ | |||
| 14 | #include <asm/sh03/sh03.h> | 14 | #include <asm/sh03/sh03.h> |
| 15 | #include <asm/addrspace.h> | 15 | #include <asm/addrspace.h> |
| 16 | 16 | ||
| 17 | static struct ipr_data sh03_ipr_map[] = { | ||
| 18 | { IRL0_IRQ, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY }, | ||
| 19 | { IRL1_IRQ, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY }, | ||
| 20 | { IRL2_IRQ, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY }, | ||
| 21 | { IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY }, | ||
| 22 | }; | ||
| 23 | |||
| 17 | static void __init init_sh03_IRQ(void) | 24 | static void __init init_sh03_IRQ(void) |
| 18 | { | 25 | { |
| 19 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | 26 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); |
| 20 | 27 | make_ipr_irq(sh03_ipr_map, ARRAY_SIZE(sh03_ipr_map)); | |
| 21 | make_ipr_irq(IRL0_IRQ, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); | ||
| 22 | make_ipr_irq(IRL1_IRQ, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); | ||
| 23 | make_ipr_irq(IRL2_IRQ, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); | ||
| 24 | make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); | ||
| 25 | } | 28 | } |
| 26 | 29 | ||
| 27 | extern void *cf_io_base; | 30 | extern void *cf_io_base; |
diff --git a/arch/sh/boards/shmin/setup.c b/arch/sh/boards/shmin/setup.c index 2f0c19706cf9..a31a1d1e2681 100644 --- a/arch/sh/boards/shmin/setup.c +++ b/arch/sh/boards/shmin/setup.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | */ | 7 | */ |
| 8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
| 9 | #include <asm/machvec.h> | 9 | #include <asm/machvec.h> |
| 10 | #include <asm/shmin/shmin.h> | 10 | #include <asm/shmin.h> |
| 11 | #include <asm/clock.h> | 11 | #include <asm/clock.h> |
| 12 | #include <asm/irq.h> | 12 | #include <asm/irq.h> |
| 13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
diff --git a/arch/sh/boards/snapgear/setup.c b/arch/sh/boards/snapgear/setup.c index f5e98c56b530..650fb3645947 100644 --- a/arch/sh/boards/snapgear/setup.c +++ b/arch/sh/boards/snapgear/setup.c | |||
| @@ -33,7 +33,7 @@ extern void pcibios_init(void); | |||
| 33 | * EraseConfig handling functions | 33 | * EraseConfig handling functions |
| 34 | */ | 34 | */ |
| 35 | 35 | ||
| 36 | static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 36 | static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id) |
| 37 | { | 37 | { |
| 38 | volatile char dummy __attribute__((unused)) = * (volatile char *) 0xb8000000; | 38 | volatile char dummy __attribute__((unused)) = * (volatile char *) 0xb8000000; |
| 39 | 39 | ||
| @@ -68,6 +68,13 @@ module_init(eraseconfig_init); | |||
| 68 | * IRL3 = crypto | 68 | * IRL3 = crypto |
| 69 | */ | 69 | */ |
| 70 | 70 | ||
| 71 | static struct ipr_data snapgear_ipr_map[] = { | ||
| 72 | make_ipr_irq(IRL0_IRQ, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); | ||
| 73 | make_ipr_irq(IRL1_IRQ, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); | ||
| 74 | make_ipr_irq(IRL2_IRQ, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); | ||
| 75 | make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); | ||
| 76 | }; | ||
| 77 | |||
| 71 | static void __init init_snapgear_IRQ(void) | 78 | static void __init init_snapgear_IRQ(void) |
| 72 | { | 79 | { |
| 73 | /* enable individual interrupt mode for externals */ | 80 | /* enable individual interrupt mode for externals */ |
| @@ -75,10 +82,7 @@ static void __init init_snapgear_IRQ(void) | |||
| 75 | 82 | ||
| 76 | printk("Setup SnapGear IRQ/IPR ...\n"); | 83 | printk("Setup SnapGear IRQ/IPR ...\n"); |
| 77 | 84 | ||
| 78 | make_ipr_irq(IRL0_IRQ, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); | 85 | make_ipr_irq(snapgear_ipr_map, ARRAY_SIZE(snapgear_ipr_map)); |
| 79 | make_ipr_irq(IRL1_IRQ, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); | ||
| 80 | make_ipr_irq(IRL2_IRQ, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); | ||
| 81 | make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); | ||
| 82 | } | 86 | } |
| 83 | 87 | ||
| 84 | /* | 88 | /* |
diff --git a/arch/sh/boards/titan/setup.c b/arch/sh/boards/titan/setup.c index 52b66d8b8d2a..a6046d93758b 100644 --- a/arch/sh/boards/titan/setup.c +++ b/arch/sh/boards/titan/setup.c | |||
| @@ -9,15 +9,19 @@ | |||
| 9 | 9 | ||
| 10 | extern void __init pcibios_init_platform(void); | 10 | extern void __init pcibios_init_platform(void); |
| 11 | 11 | ||
| 12 | static struct ipr_data titan_ipr_map[] = { | ||
| 13 | { TITAN_IRQ_WAN, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY }, | ||
| 14 | { TITAN_IRQ_LAN, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY }, | ||
| 15 | { TITAN_IRQ_MPCIA, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY }, | ||
| 16 | { TITAN_IRQ_USB, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY }, | ||
| 17 | }; | ||
| 18 | |||
| 12 | static void __init init_titan_irq(void) | 19 | static void __init init_titan_irq(void) |
| 13 | { | 20 | { |
| 14 | /* enable individual interrupt mode for externals */ | 21 | /* enable individual interrupt mode for externals */ |
| 15 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | 22 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); |
| 16 | 23 | ||
| 17 | make_ipr_irq( TITAN_IRQ_WAN, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); /* PCIRQ0 */ | 24 | make_ipr_irq(titan_ipr_map, ARRAY_SIZE(titan_ipr_map)); |
| 18 | make_ipr_irq( TITAN_IRQ_LAN, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); /* PCIRQ1 */ | ||
| 19 | make_ipr_irq( TITAN_IRQ_MPCIA, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); /* PCIRQ2 */ | ||
| 20 | make_ipr_irq( TITAN_IRQ_USB, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); /* PCIRQ3 */ | ||
| 21 | } | 25 | } |
| 22 | 26 | ||
| 23 | struct sh_machine_vector mv_titan __initmv = { | 27 | struct sh_machine_vector mv_titan __initmv = { |
diff --git a/arch/sh/cchips/hd6446x/hd64461/setup.c b/arch/sh/cchips/hd6446x/hd64461/setup.c index 38f1e8171a3a..4d49b5cbcc13 100644 --- a/arch/sh/cchips/hd6446x/hd64461/setup.c +++ b/arch/sh/cchips/hd6446x/hd64461/setup.c | |||
| @@ -71,7 +71,7 @@ static struct hw_interrupt_type hd64461_irq_type = { | |||
| 71 | .end = end_hd64461_irq, | 71 | .end = end_hd64461_irq, |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | static irqreturn_t hd64461_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 74 | static irqreturn_t hd64461_interrupt(int irq, void *dev_id) |
| 75 | { | 75 | { |
| 76 | printk(KERN_INFO | 76 | printk(KERN_INFO |
| 77 | "HD64461: spurious interrupt, nirr: 0x%x nimr: 0x%x\n", | 77 | "HD64461: spurious interrupt, nirr: 0x%x nimr: 0x%x\n", |
diff --git a/arch/sh/cchips/hd6446x/hd64465/gpio.c b/arch/sh/cchips/hd6446x/hd64465/gpio.c index 72320d02d69a..43431855ec86 100644 --- a/arch/sh/cchips/hd6446x/hd64465/gpio.c +++ b/arch/sh/cchips/hd6446x/hd64465/gpio.c | |||
| @@ -85,7 +85,7 @@ static struct { | |||
| 85 | void *dev; | 85 | void *dev; |
| 86 | } handlers[GPIO_NPORTS * 8]; | 86 | } handlers[GPIO_NPORTS * 8]; |
| 87 | 87 | ||
| 88 | static irqreturn_t hd64465_gpio_interrupt(int irq, void *dev, struct pt_regs *regs) | 88 | static irqreturn_t hd64465_gpio_interrupt(int irq, void *dev) |
| 89 | { | 89 | { |
| 90 | unsigned short port, pin, isr, mask, portpin; | 90 | unsigned short port, pin, isr, mask, portpin; |
| 91 | 91 | ||
diff --git a/arch/sh/cchips/hd6446x/hd64465/setup.c b/arch/sh/cchips/hd6446x/hd64465/setup.c index 30573d3e1966..d126e1f30dee 100644 --- a/arch/sh/cchips/hd6446x/hd64465/setup.c +++ b/arch/sh/cchips/hd6446x/hd64465/setup.c | |||
| @@ -84,7 +84,7 @@ static struct hw_interrupt_type hd64465_irq_type = { | |||
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | 86 | ||
| 87 | static irqreturn_t hd64465_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 87 | static irqreturn_t hd64465_interrupt(int irq, void *dev_id) |
| 88 | { | 88 | { |
| 89 | printk(KERN_INFO | 89 | printk(KERN_INFO |
| 90 | "HD64465: spurious interrupt, nirr: 0x%x nimr: 0x%x\n", | 90 | "HD64465: spurious interrupt, nirr: 0x%x nimr: 0x%x\n", |
diff --git a/arch/sh/cchips/voyagergx/irq.c b/arch/sh/cchips/voyagergx/irq.c index 392c8b12ce36..f7ea700d05ae 100644 --- a/arch/sh/cchips/voyagergx/irq.c +++ b/arch/sh/cchips/voyagergx/irq.c | |||
| @@ -17,29 +17,18 @@ | |||
| 17 | 17 | ||
| 18 | Copyright 2003 (c) Lineo uSolutions,Inc. | 18 | Copyright 2003 (c) Lineo uSolutions,Inc. |
| 19 | */ | 19 | */ |
| 20 | /* -------------------------------------------------------------------- */ | ||
| 21 | |||
| 22 | #undef DEBUG | ||
| 23 | |||
| 24 | #include <linux/sched.h> | ||
| 25 | #include <linux/module.h> | ||
| 26 | #include <linux/kernel.h> | ||
| 27 | #include <linux/param.h> | ||
| 28 | #include <linux/ioport.h> | ||
| 29 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
| 30 | #include <linux/init.h> | 21 | #include <linux/init.h> |
| 31 | #include <linux/irq.h> | 22 | #include <linux/io.h> |
| 32 | |||
| 33 | #include <asm/io.h> | ||
| 34 | #include <asm/irq.h> | ||
| 35 | #include <asm/voyagergx.h> | 23 | #include <asm/voyagergx.h> |
| 24 | #include <asm/rts7751r2d.h> | ||
| 36 | 25 | ||
| 37 | static void disable_voyagergx_irq(unsigned int irq) | 26 | static void disable_voyagergx_irq(unsigned int irq) |
| 38 | { | 27 | { |
| 39 | unsigned long val; | 28 | unsigned long val; |
| 40 | unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE); | 29 | unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE); |
| 41 | 30 | ||
| 42 | pr_debug("disable_voyagergx_irq(%d): mask=%x\n", irq, mask); | 31 | pr_debug("disable_voyagergx_irq(%d): mask=%lx\n", irq, mask); |
| 43 | val = inl(VOYAGER_INT_MASK); | 32 | val = inl(VOYAGER_INT_MASK); |
| 44 | val &= ~mask; | 33 | val &= ~mask; |
| 45 | outl(val, VOYAGER_INT_MASK); | 34 | outl(val, VOYAGER_INT_MASK); |
| @@ -50,7 +39,7 @@ static void enable_voyagergx_irq(unsigned int irq) | |||
| 50 | unsigned long val; | 39 | unsigned long val; |
| 51 | unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE); | 40 | unsigned long mask = 1 << (irq - VOYAGER_IRQ_BASE); |
| 52 | 41 | ||
| 53 | pr_debug("disable_voyagergx_irq(%d): mask=%x\n", irq, mask); | 42 | pr_debug("disable_voyagergx_irq(%d): mask=%lx\n", irq, mask); |
| 54 | val = inl(VOYAGER_INT_MASK); | 43 | val = inl(VOYAGER_INT_MASK); |
| 55 | val |= mask; | 44 | val |= mask; |
| 56 | outl(val, VOYAGER_INT_MASK); | 45 | outl(val, VOYAGER_INT_MASK); |
| @@ -88,8 +77,7 @@ static struct hw_interrupt_type voyagergx_irq_type = { | |||
| 88 | .end = end_voyagergx_irq, | 77 | .end = end_voyagergx_irq, |
| 89 | }; | 78 | }; |
| 90 | 79 | ||
| 91 | static irqreturn_t voyagergx_interrupt(int irq, void *dev_id, | 80 | static irqreturn_t voyagergx_interrupt(int irq, void *dev_id) |
| 92 | struct pt_regs *regs) | ||
| 93 | { | 81 | { |
| 94 | printk(KERN_INFO | 82 | printk(KERN_INFO |
| 95 | "VoyagerGX: spurious interrupt, status: 0x%x\n", | 83 | "VoyagerGX: spurious interrupt, status: 0x%x\n", |
| @@ -138,7 +126,7 @@ int voyagergx_irq_demux(int irq) | |||
| 138 | } else { | 126 | } else { |
| 139 | printk("Unexpected IRQ irq = %d status = 0x%08lx\n", irq, val); | 127 | printk("Unexpected IRQ irq = %d status = 0x%08lx\n", irq, val); |
| 140 | } | 128 | } |
| 141 | pr_debug("voyagergx_irq_demux %d \n", i); | 129 | pr_debug("voyagergx_irq_demux %ld\n", i); |
| 142 | #else | 130 | #else |
| 143 | for (bit = 1, i = 0 ; i < VOYAGER_IRQ_NUM ; bit <<= 1, i++) | 131 | for (bit = 1, i = 0 ; i < VOYAGER_IRQ_NUM ; bit <<= 1, i++) |
| 144 | if (val & bit) | 132 | if (val & bit) |
| @@ -186,4 +174,3 @@ void __init setup_voyagergx_irq(void) | |||
| 186 | 174 | ||
| 187 | setup_irq(IRQ_VOYAGER, &irq0); | 175 | setup_irq(IRQ_VOYAGER, &irq0); |
| 188 | } | 176 | } |
| 189 | |||
diff --git a/arch/sh/configs/r7780rp_defconfig b/arch/sh/configs/r7780rp_defconfig index 2470364948e7..34e2046c3213 100644 --- a/arch/sh/configs/r7780rp_defconfig +++ b/arch/sh/configs/r7780rp_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.18 | 3 | # Linux kernel version: 2.6.19-rc3 |
| 4 | # Tue Oct 3 11:32:47 2006 | 4 | # Tue Oct 31 12:32:06 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| @@ -10,6 +10,7 @@ CONFIG_GENERIC_HWEIGHT=y | |||
| 10 | CONFIG_GENERIC_HARDIRQS=y | 10 | CONFIG_GENERIC_HARDIRQS=y |
| 11 | CONFIG_GENERIC_IRQ_PROBE=y | 11 | CONFIG_GENERIC_IRQ_PROBE=y |
| 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 13 | # CONFIG_GENERIC_TIME is not set | ||
| 13 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 14 | 15 | ||
| 15 | # | 16 | # |
| @@ -178,7 +179,7 @@ CONFIG_MMU=y | |||
| 178 | CONFIG_PAGE_OFFSET=0x80000000 | 179 | CONFIG_PAGE_OFFSET=0x80000000 |
| 179 | CONFIG_MEMORY_START=0x08000000 | 180 | CONFIG_MEMORY_START=0x08000000 |
| 180 | CONFIG_MEMORY_SIZE=0x08000000 | 181 | CONFIG_MEMORY_SIZE=0x08000000 |
| 181 | CONFIG_32BIT=y | 182 | # CONFIG_32BIT is not set |
| 182 | CONFIG_VSYSCALL=y | 183 | CONFIG_VSYSCALL=y |
| 183 | CONFIG_HUGETLB_PAGE_SIZE_64K=y | 184 | CONFIG_HUGETLB_PAGE_SIZE_64K=y |
| 184 | # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set | 185 | # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set |
| @@ -229,9 +230,7 @@ CONFIG_SH_PCLK_FREQ=32000000 | |||
| 229 | # | 230 | # |
| 230 | # DMA support | 231 | # DMA support |
| 231 | # | 232 | # |
| 232 | CONFIG_SH_DMA=y | 233 | # CONFIG_SH_DMA is not set |
| 233 | CONFIG_NR_ONCHIP_DMA_CHANNELS=6 | ||
| 234 | # CONFIG_NR_DMA_CHANNELS_BOOL is not set | ||
| 235 | 234 | ||
| 236 | # | 235 | # |
| 237 | # Companion Chips | 236 | # Companion Chips |
| @@ -259,7 +258,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000 | |||
| 259 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | 258 | CONFIG_BOOT_LINK_OFFSET=0x00800000 |
| 260 | # CONFIG_UBC_WAKEUP is not set | 259 | # CONFIG_UBC_WAKEUP is not set |
| 261 | CONFIG_CMDLINE_BOOL=y | 260 | CONFIG_CMDLINE_BOOL=y |
| 262 | CONFIG_CMDLINE="mem=128M console=ttySC0,115200 root=/dev/hda1" | 261 | CONFIG_CMDLINE="mem=128M console=ttySC0,115200 root=/dev/sda1" |
| 263 | 262 | ||
| 264 | # | 263 | # |
| 265 | # Bus options | 264 | # Bus options |
| @@ -336,6 +335,7 @@ CONFIG_IP_PNP_DHCP=y | |||
| 336 | # CONFIG_INET_TUNNEL is not set | 335 | # CONFIG_INET_TUNNEL is not set |
| 337 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 336 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 338 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 337 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 338 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 339 | CONFIG_INET_DIAG=y | 339 | CONFIG_INET_DIAG=y |
| 340 | CONFIG_INET_TCP_DIAG=y | 340 | CONFIG_INET_TCP_DIAG=y |
| 341 | # CONFIG_TCP_CONG_ADVANCED is not set | 341 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -441,76 +441,28 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | |||
| 441 | # CONFIG_ATA_OVER_ETH is not set | 441 | # CONFIG_ATA_OVER_ETH is not set |
| 442 | 442 | ||
| 443 | # | 443 | # |
| 444 | # Misc devices | ||
| 445 | # | ||
| 446 | # CONFIG_SGI_IOC4 is not set | ||
| 447 | # CONFIG_TIFM_CORE is not set | ||
| 448 | |||
| 449 | # | ||
| 444 | # ATA/ATAPI/MFM/RLL support | 450 | # ATA/ATAPI/MFM/RLL support |
| 445 | # | 451 | # |
| 446 | CONFIG_IDE=m | 452 | # CONFIG_IDE is not set |
| 447 | CONFIG_IDE_MAX_HWIFS=4 | ||
| 448 | CONFIG_BLK_DEV_IDE=m | ||
| 449 | |||
| 450 | # | ||
| 451 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
| 452 | # | ||
| 453 | CONFIG_BLK_DEV_IDE_SATA=y | ||
| 454 | CONFIG_BLK_DEV_IDEDISK=m | ||
| 455 | CONFIG_IDEDISK_MULTI_MODE=y | ||
| 456 | # CONFIG_BLK_DEV_IDECD is not set | ||
| 457 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 458 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
| 459 | CONFIG_BLK_DEV_IDESCSI=m | ||
| 460 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 461 | |||
| 462 | # | ||
| 463 | # IDE chipset support/bugfixes | ||
| 464 | # | ||
| 465 | CONFIG_IDE_GENERIC=m | ||
| 466 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 467 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
| 468 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 469 | CONFIG_BLK_DEV_GENERIC=m | ||
| 470 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 471 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 472 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
| 473 | CONFIG_IDEDMA_PCI_AUTO=y | ||
| 474 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
| 475 | CONFIG_BLK_DEV_AEC62XX=m | ||
| 476 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 477 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 478 | # CONFIG_BLK_DEV_CMD64X is not set | ||
| 479 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 480 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
| 481 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 482 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 483 | # CONFIG_BLK_DEV_HPT34X is not set | ||
| 484 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 485 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 486 | # CONFIG_BLK_DEV_PIIX is not set | ||
| 487 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 488 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 489 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 490 | CONFIG_BLK_DEV_PDC202XX_NEW=m | ||
| 491 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 492 | CONFIG_BLK_DEV_SIIMAGE=m | ||
| 493 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 494 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 495 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 496 | # CONFIG_IDE_ARM is not set | ||
| 497 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 498 | # CONFIG_IDEDMA_IVB is not set | ||
| 499 | CONFIG_IDEDMA_AUTO=y | ||
| 500 | # CONFIG_BLK_DEV_HD is not set | ||
| 501 | 453 | ||
| 502 | # | 454 | # |
| 503 | # SCSI device support | 455 | # SCSI device support |
| 504 | # | 456 | # |
| 505 | # CONFIG_RAID_ATTRS is not set | 457 | # CONFIG_RAID_ATTRS is not set |
| 506 | CONFIG_SCSI=m | 458 | CONFIG_SCSI=y |
| 507 | # CONFIG_SCSI_NETLINK is not set | 459 | # CONFIG_SCSI_NETLINK is not set |
| 508 | CONFIG_SCSI_PROC_FS=y | 460 | CONFIG_SCSI_PROC_FS=y |
| 509 | 461 | ||
| 510 | # | 462 | # |
| 511 | # SCSI support type (disk, tape, CD-ROM) | 463 | # SCSI support type (disk, tape, CD-ROM) |
| 512 | # | 464 | # |
| 513 | CONFIG_BLK_DEV_SD=m | 465 | CONFIG_BLK_DEV_SD=y |
| 514 | # CONFIG_CHR_DEV_ST is not set | 466 | # CONFIG_CHR_DEV_ST is not set |
| 515 | # CONFIG_CHR_DEV_OSST is not set | 467 | # CONFIG_CHR_DEV_OSST is not set |
| 516 | # CONFIG_BLK_DEV_SR is not set | 468 | # CONFIG_BLK_DEV_SR is not set |
| @@ -561,6 +513,7 @@ CONFIG_CHR_DEV_SG=m | |||
| 561 | # CONFIG_SCSI_IPR is not set | 513 | # CONFIG_SCSI_IPR is not set |
| 562 | # CONFIG_SCSI_QLOGIC_1280 is not set | 514 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 563 | # CONFIG_SCSI_QLA_FC is not set | 515 | # CONFIG_SCSI_QLA_FC is not set |
| 516 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 564 | # CONFIG_SCSI_LPFC is not set | 517 | # CONFIG_SCSI_LPFC is not set |
| 565 | # CONFIG_SCSI_DC395x is not set | 518 | # CONFIG_SCSI_DC395x is not set |
| 566 | # CONFIG_SCSI_DC390T is not set | 519 | # CONFIG_SCSI_DC390T is not set |
| @@ -570,7 +523,55 @@ CONFIG_CHR_DEV_SG=m | |||
| 570 | # | 523 | # |
| 571 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | 524 | # Serial ATA (prod) and Parallel ATA (experimental) drivers |
| 572 | # | 525 | # |
| 573 | # CONFIG_ATA is not set | 526 | CONFIG_ATA=y |
| 527 | # CONFIG_SATA_AHCI is not set | ||
| 528 | # CONFIG_SATA_SVW is not set | ||
| 529 | # CONFIG_ATA_PIIX is not set | ||
| 530 | # CONFIG_SATA_MV is not set | ||
| 531 | # CONFIG_SATA_NV is not set | ||
| 532 | # CONFIG_PDC_ADMA is not set | ||
| 533 | # CONFIG_SATA_QSTOR is not set | ||
| 534 | # CONFIG_SATA_PROMISE is not set | ||
| 535 | # CONFIG_SATA_SX4 is not set | ||
| 536 | CONFIG_SATA_SIL=y | ||
| 537 | # CONFIG_SATA_SIL24 is not set | ||
| 538 | # CONFIG_SATA_SIS is not set | ||
| 539 | # CONFIG_SATA_ULI is not set | ||
| 540 | # CONFIG_SATA_VIA is not set | ||
| 541 | # CONFIG_SATA_VITESSE is not set | ||
| 542 | # CONFIG_PATA_ALI is not set | ||
| 543 | # CONFIG_PATA_AMD is not set | ||
| 544 | # CONFIG_PATA_ARTOP is not set | ||
| 545 | # CONFIG_PATA_ATIIXP is not set | ||
| 546 | # CONFIG_PATA_CMD64X is not set | ||
| 547 | # CONFIG_PATA_CS5520 is not set | ||
| 548 | # CONFIG_PATA_CS5530 is not set | ||
| 549 | # CONFIG_PATA_CYPRESS is not set | ||
| 550 | # CONFIG_PATA_EFAR is not set | ||
| 551 | # CONFIG_ATA_GENERIC is not set | ||
| 552 | # CONFIG_PATA_HPT366 is not set | ||
| 553 | # CONFIG_PATA_HPT37X is not set | ||
| 554 | # CONFIG_PATA_HPT3X2N is not set | ||
| 555 | # CONFIG_PATA_HPT3X3 is not set | ||
| 556 | # CONFIG_PATA_IT821X is not set | ||
| 557 | # CONFIG_PATA_JMICRON is not set | ||
| 558 | # CONFIG_PATA_TRIFLEX is not set | ||
| 559 | # CONFIG_PATA_MPIIX is not set | ||
| 560 | # CONFIG_PATA_OLDPIIX is not set | ||
| 561 | # CONFIG_PATA_NETCELL is not set | ||
| 562 | # CONFIG_PATA_NS87410 is not set | ||
| 563 | # CONFIG_PATA_OPTI is not set | ||
| 564 | # CONFIG_PATA_OPTIDMA is not set | ||
| 565 | # CONFIG_PATA_PDC_OLD is not set | ||
| 566 | # CONFIG_PATA_RADISYS is not set | ||
| 567 | # CONFIG_PATA_RZ1000 is not set | ||
| 568 | # CONFIG_PATA_SC1200 is not set | ||
| 569 | # CONFIG_PATA_SERVERWORKS is not set | ||
| 570 | # CONFIG_PATA_PDC2027X is not set | ||
| 571 | # CONFIG_PATA_SIL680 is not set | ||
| 572 | # CONFIG_PATA_SIS is not set | ||
| 573 | # CONFIG_PATA_VIA is not set | ||
| 574 | # CONFIG_PATA_WINBOND is not set | ||
| 574 | 575 | ||
| 575 | # | 576 | # |
| 576 | # Multi-device support (RAID and LVM) | 577 | # Multi-device support (RAID and LVM) |
| @@ -840,7 +841,6 @@ CONFIG_HW_RANDOM=y | |||
| 840 | # TPM devices | 841 | # TPM devices |
| 841 | # | 842 | # |
| 842 | # CONFIG_TCG_TPM is not set | 843 | # CONFIG_TCG_TPM is not set |
| 843 | # CONFIG_TELCLOCK is not set | ||
| 844 | 844 | ||
| 845 | # | 845 | # |
| 846 | # I2C support | 846 | # I2C support |
| @@ -856,6 +856,7 @@ CONFIG_HW_RANDOM=y | |||
| 856 | # | 856 | # |
| 857 | # Dallas's 1-wire bus | 857 | # Dallas's 1-wire bus |
| 858 | # | 858 | # |
| 859 | # CONFIG_W1 is not set | ||
| 859 | 860 | ||
| 860 | # | 861 | # |
| 861 | # Hardware Monitoring support | 862 | # Hardware Monitoring support |
| @@ -868,14 +869,9 @@ CONFIG_HWMON=y | |||
| 868 | # CONFIG_HWMON_DEBUG_CHIP is not set | 869 | # CONFIG_HWMON_DEBUG_CHIP is not set |
| 869 | 870 | ||
| 870 | # | 871 | # |
| 871 | # Misc devices | ||
| 872 | # | ||
| 873 | |||
| 874 | # | ||
| 875 | # Multimedia devices | 872 | # Multimedia devices |
| 876 | # | 873 | # |
| 877 | # CONFIG_VIDEO_DEV is not set | 874 | # CONFIG_VIDEO_DEV is not set |
| 878 | CONFIG_VIDEO_V4L2=y | ||
| 879 | 875 | ||
| 880 | # | 876 | # |
| 881 | # Digital Video Broadcasting Devices | 877 | # Digital Video Broadcasting Devices |
| @@ -959,7 +955,29 @@ CONFIG_USB_ARCH_HAS_EHCI=y | |||
| 959 | # | 955 | # |
| 960 | # Real Time Clock | 956 | # Real Time Clock |
| 961 | # | 957 | # |
| 962 | # CONFIG_RTC_CLASS is not set | 958 | CONFIG_RTC_LIB=y |
| 959 | CONFIG_RTC_CLASS=y | ||
| 960 | CONFIG_RTC_HCTOSYS=y | ||
| 961 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 962 | # CONFIG_RTC_DEBUG is not set | ||
| 963 | |||
| 964 | # | ||
| 965 | # RTC interfaces | ||
| 966 | # | ||
| 967 | CONFIG_RTC_INTF_SYSFS=y | ||
| 968 | CONFIG_RTC_INTF_PROC=y | ||
| 969 | CONFIG_RTC_INTF_DEV=y | ||
| 970 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 971 | |||
| 972 | # | ||
| 973 | # RTC drivers | ||
| 974 | # | ||
| 975 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 976 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 977 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 978 | CONFIG_RTC_DRV_SH=y | ||
| 979 | # CONFIG_RTC_DRV_TEST is not set | ||
| 980 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 963 | 981 | ||
| 964 | # | 982 | # |
| 965 | # DMA Engine support | 983 | # DMA Engine support |
| @@ -984,6 +1002,7 @@ CONFIG_EXT3_FS=y | |||
| 984 | CONFIG_EXT3_FS_XATTR=y | 1002 | CONFIG_EXT3_FS_XATTR=y |
| 985 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1003 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 986 | # CONFIG_EXT3_FS_SECURITY is not set | 1004 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1005 | # CONFIG_EXT4DEV_FS is not set | ||
| 987 | CONFIG_JBD=y | 1006 | CONFIG_JBD=y |
| 988 | # CONFIG_JBD_DEBUG is not set | 1007 | # CONFIG_JBD_DEBUG is not set |
| 989 | CONFIG_FS_MBCACHE=y | 1008 | CONFIG_FS_MBCACHE=y |
| @@ -991,6 +1010,7 @@ CONFIG_FS_MBCACHE=y | |||
| 991 | # CONFIG_JFS_FS is not set | 1010 | # CONFIG_JFS_FS is not set |
| 992 | CONFIG_FS_POSIX_ACL=y | 1011 | CONFIG_FS_POSIX_ACL=y |
| 993 | # CONFIG_XFS_FS is not set | 1012 | # CONFIG_XFS_FS is not set |
| 1013 | # CONFIG_GFS2_FS is not set | ||
| 994 | # CONFIG_OCFS2_FS is not set | 1014 | # CONFIG_OCFS2_FS is not set |
| 995 | CONFIG_MINIX_FS=y | 1015 | CONFIG_MINIX_FS=y |
| 996 | # CONFIG_ROMFS_FS is not set | 1016 | # CONFIG_ROMFS_FS is not set |
| @@ -1027,7 +1047,8 @@ CONFIG_PROC_FS=y | |||
| 1027 | CONFIG_PROC_KCORE=y | 1047 | CONFIG_PROC_KCORE=y |
| 1028 | CONFIG_PROC_SYSCTL=y | 1048 | CONFIG_PROC_SYSCTL=y |
| 1029 | CONFIG_SYSFS=y | 1049 | CONFIG_SYSFS=y |
| 1030 | # CONFIG_TMPFS is not set | 1050 | CONFIG_TMPFS=y |
| 1051 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1031 | CONFIG_HUGETLBFS=y | 1052 | CONFIG_HUGETLBFS=y |
| 1032 | CONFIG_HUGETLB_PAGE=y | 1053 | CONFIG_HUGETLB_PAGE=y |
| 1033 | CONFIG_RAMFS=y | 1054 | CONFIG_RAMFS=y |
| @@ -1159,6 +1180,7 @@ CONFIG_DEBUG_FS=y | |||
| 1159 | # CONFIG_DEBUG_LIST is not set | 1180 | # CONFIG_DEBUG_LIST is not set |
| 1160 | CONFIG_FRAME_POINTER=y | 1181 | CONFIG_FRAME_POINTER=y |
| 1161 | CONFIG_FORCED_INLINING=y | 1182 | CONFIG_FORCED_INLINING=y |
| 1183 | # CONFIG_HEADERS_CHECK is not set | ||
| 1162 | # CONFIG_RCU_TORTURE_TEST is not set | 1184 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1163 | # CONFIG_SH_STANDARD_BIOS is not set | 1185 | # CONFIG_SH_STANDARD_BIOS is not set |
| 1164 | # CONFIG_EARLY_SCIF_CONSOLE is not set | 1186 | # CONFIG_EARLY_SCIF_CONSOLE is not set |
| @@ -1178,9 +1200,9 @@ CONFIG_FORCED_INLINING=y | |||
| 1178 | # | 1200 | # |
| 1179 | CONFIG_CRYPTO=y | 1201 | CONFIG_CRYPTO=y |
| 1180 | CONFIG_CRYPTO_ALGAPI=y | 1202 | CONFIG_CRYPTO_ALGAPI=y |
| 1181 | CONFIG_CRYPTO_BLKCIPHER=m | 1203 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1182 | CONFIG_CRYPTO_HASH=y | 1204 | CONFIG_CRYPTO_HASH=y |
| 1183 | CONFIG_CRYPTO_MANAGER=m | 1205 | CONFIG_CRYPTO_MANAGER=y |
| 1184 | CONFIG_CRYPTO_HMAC=y | 1206 | CONFIG_CRYPTO_HMAC=y |
| 1185 | # CONFIG_CRYPTO_NULL is not set | 1207 | # CONFIG_CRYPTO_NULL is not set |
| 1186 | # CONFIG_CRYPTO_MD4 is not set | 1208 | # CONFIG_CRYPTO_MD4 is not set |
| @@ -1191,7 +1213,7 @@ CONFIG_CRYPTO_MD5=y | |||
| 1191 | # CONFIG_CRYPTO_WP512 is not set | 1213 | # CONFIG_CRYPTO_WP512 is not set |
| 1192 | # CONFIG_CRYPTO_TGR192 is not set | 1214 | # CONFIG_CRYPTO_TGR192 is not set |
| 1193 | CONFIG_CRYPTO_ECB=m | 1215 | CONFIG_CRYPTO_ECB=m |
| 1194 | CONFIG_CRYPTO_CBC=m | 1216 | CONFIG_CRYPTO_CBC=y |
| 1195 | CONFIG_CRYPTO_DES=y | 1217 | CONFIG_CRYPTO_DES=y |
| 1196 | # CONFIG_CRYPTO_BLOWFISH is not set | 1218 | # CONFIG_CRYPTO_BLOWFISH is not set |
| 1197 | # CONFIG_CRYPTO_TWOFISH is not set | 1219 | # CONFIG_CRYPTO_TWOFISH is not set |
diff --git a/arch/sh/configs/titan_defconfig b/arch/sh/configs/titan_defconfig index 5e8175461138..41049cf14b79 100644 --- a/arch/sh/configs/titan_defconfig +++ b/arch/sh/configs/titan_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.18 | 3 | # Linux kernel version: 2.6.19-rc3 |
| 4 | # Tue Oct 3 12:59:14 2006 | 4 | # Mon Oct 30 18:04:49 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| @@ -10,6 +10,7 @@ CONFIG_GENERIC_HWEIGHT=y | |||
| 10 | CONFIG_GENERIC_HARDIRQS=y | 10 | CONFIG_GENERIC_HARDIRQS=y |
| 11 | CONFIG_GENERIC_IRQ_PROBE=y | 11 | CONFIG_GENERIC_IRQ_PROBE=y |
| 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 13 | # CONFIG_GENERIC_TIME is not set | ||
| 13 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 14 | 15 | ||
| 15 | # | 16 | # |
| @@ -23,7 +24,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
| 23 | # General setup | 24 | # General setup |
| 24 | # | 25 | # |
| 25 | CONFIG_LOCALVERSION="" | 26 | CONFIG_LOCALVERSION="" |
| 26 | CONFIG_LOCALVERSION_AUTO=y | 27 | # CONFIG_LOCALVERSION_AUTO is not set |
| 27 | CONFIG_SWAP=y | 28 | CONFIG_SWAP=y |
| 28 | CONFIG_SYSVIPC=y | 29 | CONFIG_SYSVIPC=y |
| 29 | # CONFIG_IPC_NS is not set | 30 | # CONFIG_IPC_NS is not set |
| @@ -236,8 +237,8 @@ CONFIG_HZ_250=y | |||
| 236 | CONFIG_HZ=250 | 237 | CONFIG_HZ=250 |
| 237 | # CONFIG_KEXEC is not set | 238 | # CONFIG_KEXEC is not set |
| 238 | # CONFIG_SMP is not set | 239 | # CONFIG_SMP is not set |
| 239 | CONFIG_PREEMPT_NONE=y | 240 | # CONFIG_PREEMPT_NONE is not set |
| 240 | # CONFIG_PREEMPT_VOLUNTARY is not set | 241 | CONFIG_PREEMPT_VOLUNTARY=y |
| 241 | # CONFIG_PREEMPT is not set | 242 | # CONFIG_PREEMPT is not set |
| 242 | 243 | ||
| 243 | # | 244 | # |
| @@ -247,7 +248,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000 | |||
| 247 | CONFIG_BOOT_LINK_OFFSET=0x009e0000 | 248 | CONFIG_BOOT_LINK_OFFSET=0x009e0000 |
| 248 | # CONFIG_UBC_WAKEUP is not set | 249 | # CONFIG_UBC_WAKEUP is not set |
| 249 | CONFIG_CMDLINE_BOOL=y | 250 | CONFIG_CMDLINE_BOOL=y |
| 250 | CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/nfs ip=:::::eth1:autoconf" | 251 | CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/nfs ip=:::::eth1:autoconf rw" |
| 251 | 252 | ||
| 252 | # | 253 | # |
| 253 | # Bus options | 254 | # Bus options |
| @@ -334,6 +335,7 @@ CONFIG_INET_XFRM_TUNNEL=y | |||
| 334 | CONFIG_INET_TUNNEL=y | 335 | CONFIG_INET_TUNNEL=y |
| 335 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 336 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 336 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 337 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 338 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 337 | CONFIG_INET_DIAG=m | 339 | CONFIG_INET_DIAG=m |
| 338 | CONFIG_INET_TCP_DIAG=m | 340 | CONFIG_INET_TCP_DIAG=m |
| 339 | # CONFIG_TCP_CONG_ADVANCED is not set | 341 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -355,9 +357,10 @@ CONFIG_INET6_XFRM_TUNNEL=y | |||
| 355 | CONFIG_INET6_TUNNEL=y | 357 | CONFIG_INET6_TUNNEL=y |
| 356 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | 358 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y |
| 357 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | 359 | CONFIG_INET6_XFRM_MODE_TUNNEL=y |
| 360 | CONFIG_INET6_XFRM_MODE_BEET=y | ||
| 358 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 361 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 362 | CONFIG_IPV6_SIT=m | ||
| 359 | CONFIG_IPV6_TUNNEL=y | 363 | CONFIG_IPV6_TUNNEL=y |
| 360 | # CONFIG_IPV6_SUBTREES is not set | ||
| 361 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 364 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 362 | # CONFIG_NETWORK_SECMARK is not set | 365 | # CONFIG_NETWORK_SECMARK is not set |
| 363 | CONFIG_NETFILTER=y | 366 | CONFIG_NETFILTER=y |
| @@ -714,6 +717,12 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 714 | CONFIG_ATA_OVER_ETH=m | 717 | CONFIG_ATA_OVER_ETH=m |
| 715 | 718 | ||
| 716 | # | 719 | # |
| 720 | # Misc devices | ||
| 721 | # | ||
| 722 | # CONFIG_SGI_IOC4 is not set | ||
| 723 | # CONFIG_TIFM_CORE is not set | ||
| 724 | |||
| 725 | # | ||
| 717 | # ATA/ATAPI/MFM/RLL support | 726 | # ATA/ATAPI/MFM/RLL support |
| 718 | # | 727 | # |
| 719 | # CONFIG_IDE is not set | 728 | # CONFIG_IDE is not set |
| @@ -778,9 +787,9 @@ CONFIG_CHR_DEV_SG=m | |||
| 778 | # CONFIG_SCSI_INIA100 is not set | 787 | # CONFIG_SCSI_INIA100 is not set |
| 779 | # CONFIG_SCSI_STEX is not set | 788 | # CONFIG_SCSI_STEX is not set |
| 780 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 789 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 781 | # CONFIG_SCSI_IPR is not set | ||
| 782 | # CONFIG_SCSI_QLOGIC_1280 is not set | 790 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 783 | # CONFIG_SCSI_QLA_FC is not set | 791 | # CONFIG_SCSI_QLA_FC is not set |
| 792 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 784 | # CONFIG_SCSI_LPFC is not set | 793 | # CONFIG_SCSI_LPFC is not set |
| 785 | # CONFIG_SCSI_DC395x is not set | 794 | # CONFIG_SCSI_DC395x is not set |
| 786 | # CONFIG_SCSI_DC390T is not set | 795 | # CONFIG_SCSI_DC390T is not set |
| @@ -1095,7 +1104,6 @@ CONFIG_HW_RANDOM=y | |||
| 1095 | # TPM devices | 1104 | # TPM devices |
| 1096 | # | 1105 | # |
| 1097 | # CONFIG_TCG_TPM is not set | 1106 | # CONFIG_TCG_TPM is not set |
| 1098 | # CONFIG_TELCLOCK is not set | ||
| 1099 | 1107 | ||
| 1100 | # | 1108 | # |
| 1101 | # I2C support | 1109 | # I2C support |
| @@ -1124,14 +1132,9 @@ CONFIG_HWMON=y | |||
| 1124 | # CONFIG_HWMON_DEBUG_CHIP is not set | 1132 | # CONFIG_HWMON_DEBUG_CHIP is not set |
| 1125 | 1133 | ||
| 1126 | # | 1134 | # |
| 1127 | # Misc devices | ||
| 1128 | # | ||
| 1129 | |||
| 1130 | # | ||
| 1131 | # Multimedia devices | 1135 | # Multimedia devices |
| 1132 | # | 1136 | # |
| 1133 | # CONFIG_VIDEO_DEV is not set | 1137 | # CONFIG_VIDEO_DEV is not set |
| 1134 | CONFIG_VIDEO_V4L2=y | ||
| 1135 | 1138 | ||
| 1136 | # | 1139 | # |
| 1137 | # Digital Video Broadcasting Devices | 1140 | # Digital Video Broadcasting Devices |
| @@ -1177,9 +1180,9 @@ CONFIG_USB_DEVICEFS=y | |||
| 1177 | # USB Host Controller Drivers | 1180 | # USB Host Controller Drivers |
| 1178 | # | 1181 | # |
| 1179 | CONFIG_USB_EHCI_HCD=y | 1182 | CONFIG_USB_EHCI_HCD=y |
| 1180 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 1183 | CONFIG_USB_EHCI_SPLIT_ISO=y |
| 1181 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1184 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
| 1182 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1185 | CONFIG_USB_EHCI_TT_NEWSCHED=y |
| 1183 | # CONFIG_USB_ISP116X_HCD is not set | 1186 | # CONFIG_USB_ISP116X_HCD is not set |
| 1184 | CONFIG_USB_OHCI_HCD=y | 1187 | CONFIG_USB_OHCI_HCD=y |
| 1185 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 1188 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set |
| @@ -1235,7 +1238,6 @@ CONFIG_USB_STORAGE=y | |||
| 1235 | # CONFIG_USB_ATI_REMOTE2 is not set | 1238 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 1236 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1239 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 1237 | # CONFIG_USB_APPLETOUCH is not set | 1240 | # CONFIG_USB_APPLETOUCH is not set |
| 1238 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1239 | 1241 | ||
| 1240 | # | 1242 | # |
| 1241 | # USB Imaging devices | 1243 | # USB Imaging devices |
| @@ -1246,11 +1248,20 @@ CONFIG_USB_STORAGE=y | |||
| 1246 | # | 1248 | # |
| 1247 | # USB Network Adapters | 1249 | # USB Network Adapters |
| 1248 | # | 1250 | # |
| 1249 | # CONFIG_USB_CATC is not set | 1251 | CONFIG_USB_CATC=m |
| 1250 | # CONFIG_USB_KAWETH is not set | 1252 | CONFIG_USB_KAWETH=m |
| 1251 | # CONFIG_USB_PEGASUS is not set | 1253 | CONFIG_USB_PEGASUS=m |
| 1252 | # CONFIG_USB_RTL8150 is not set | 1254 | CONFIG_USB_RTL8150=m |
| 1253 | # CONFIG_USB_USBNET is not set | 1255 | CONFIG_USB_USBNET=m |
| 1256 | CONFIG_USB_NET_AX8817X=m | ||
| 1257 | CONFIG_USB_NET_CDCETHER=m | ||
| 1258 | # CONFIG_USB_NET_GL620A is not set | ||
| 1259 | CONFIG_USB_NET_NET1080=m | ||
| 1260 | CONFIG_USB_NET_PLUSB=m | ||
| 1261 | # CONFIG_USB_NET_MCS7830 is not set | ||
| 1262 | # CONFIG_USB_NET_RNDIS_HOST is not set | ||
| 1263 | # CONFIG_USB_NET_CDC_SUBSET is not set | ||
| 1264 | CONFIG_USB_NET_ZAURUS=m | ||
| 1254 | CONFIG_USB_MON=y | 1265 | CONFIG_USB_MON=y |
| 1255 | 1266 | ||
| 1256 | # | 1267 | # |
| @@ -1285,6 +1296,7 @@ CONFIG_USB_SERIAL_ARK3116=m | |||
| 1285 | # CONFIG_USB_SERIAL_KLSI is not set | 1296 | # CONFIG_USB_SERIAL_KLSI is not set |
| 1286 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | 1297 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set |
| 1287 | # CONFIG_USB_SERIAL_MCT_U232 is not set | 1298 | # CONFIG_USB_SERIAL_MCT_U232 is not set |
| 1299 | # CONFIG_USB_SERIAL_MOS7720 is not set | ||
| 1288 | # CONFIG_USB_SERIAL_MOS7840 is not set | 1300 | # CONFIG_USB_SERIAL_MOS7840 is not set |
| 1289 | # CONFIG_USB_SERIAL_NAVMAN is not set | 1301 | # CONFIG_USB_SERIAL_NAVMAN is not set |
| 1290 | CONFIG_USB_SERIAL_PL2303=m | 1302 | CONFIG_USB_SERIAL_PL2303=m |
| @@ -1316,6 +1328,7 @@ CONFIG_USB_SERIAL_PL2303=m | |||
| 1316 | # CONFIG_USB_APPLEDISPLAY is not set | 1328 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1317 | # CONFIG_USB_SISUSBVGA is not set | 1329 | # CONFIG_USB_SISUSBVGA is not set |
| 1318 | # CONFIG_USB_LD is not set | 1330 | # CONFIG_USB_LD is not set |
| 1331 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1319 | # CONFIG_USB_TEST is not set | 1332 | # CONFIG_USB_TEST is not set |
| 1320 | 1333 | ||
| 1321 | # | 1334 | # |
| @@ -1357,7 +1370,26 @@ CONFIG_USB_SERIAL_PL2303=m | |||
| 1357 | # | 1370 | # |
| 1358 | # Real Time Clock | 1371 | # Real Time Clock |
| 1359 | # | 1372 | # |
| 1360 | # CONFIG_RTC_CLASS is not set | 1373 | CONFIG_RTC_LIB=m |
| 1374 | CONFIG_RTC_CLASS=m | ||
| 1375 | |||
| 1376 | # | ||
| 1377 | # RTC interfaces | ||
| 1378 | # | ||
| 1379 | CONFIG_RTC_INTF_SYSFS=m | ||
| 1380 | CONFIG_RTC_INTF_PROC=m | ||
| 1381 | CONFIG_RTC_INTF_DEV=m | ||
| 1382 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 1383 | |||
| 1384 | # | ||
| 1385 | # RTC drivers | ||
| 1386 | # | ||
| 1387 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 1388 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 1389 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 1390 | CONFIG_RTC_DRV_SH=m | ||
| 1391 | # CONFIG_RTC_DRV_TEST is not set | ||
| 1392 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 1361 | 1393 | ||
| 1362 | # | 1394 | # |
| 1363 | # DMA Engine support | 1395 | # DMA Engine support |
| @@ -1380,8 +1412,12 @@ CONFIG_EXT2_FS=y | |||
| 1380 | # CONFIG_EXT2_FS_XIP is not set | 1412 | # CONFIG_EXT2_FS_XIP is not set |
| 1381 | CONFIG_EXT3_FS=y | 1413 | CONFIG_EXT3_FS=y |
| 1382 | # CONFIG_EXT3_FS_XATTR is not set | 1414 | # CONFIG_EXT3_FS_XATTR is not set |
| 1415 | CONFIG_EXT4DEV_FS=m | ||
| 1416 | # CONFIG_EXT4DEV_FS_XATTR is not set | ||
| 1383 | CONFIG_JBD=y | 1417 | CONFIG_JBD=y |
| 1384 | # CONFIG_JBD_DEBUG is not set | 1418 | # CONFIG_JBD_DEBUG is not set |
| 1419 | CONFIG_JBD2=m | ||
| 1420 | # CONFIG_JBD2_DEBUG is not set | ||
| 1385 | CONFIG_REISERFS_FS=m | 1421 | CONFIG_REISERFS_FS=m |
| 1386 | # CONFIG_REISERFS_CHECK is not set | 1422 | # CONFIG_REISERFS_CHECK is not set |
| 1387 | # CONFIG_REISERFS_PROC_INFO is not set | 1423 | # CONFIG_REISERFS_PROC_INFO is not set |
| @@ -1393,9 +1429,10 @@ CONFIG_XFS_FS=m | |||
| 1393 | # CONFIG_XFS_SECURITY is not set | 1429 | # CONFIG_XFS_SECURITY is not set |
| 1394 | # CONFIG_XFS_POSIX_ACL is not set | 1430 | # CONFIG_XFS_POSIX_ACL is not set |
| 1395 | # CONFIG_XFS_RT is not set | 1431 | # CONFIG_XFS_RT is not set |
| 1432 | # CONFIG_GFS2_FS is not set | ||
| 1396 | # CONFIG_OCFS2_FS is not set | 1433 | # CONFIG_OCFS2_FS is not set |
| 1397 | # CONFIG_MINIX_FS is not set | 1434 | # CONFIG_MINIX_FS is not set |
| 1398 | # CONFIG_ROMFS_FS is not set | 1435 | CONFIG_ROMFS_FS=y |
| 1399 | CONFIG_INOTIFY=y | 1436 | CONFIG_INOTIFY=y |
| 1400 | CONFIG_INOTIFY_USER=y | 1437 | CONFIG_INOTIFY_USER=y |
| 1401 | # CONFIG_QUOTA is not set | 1438 | # CONFIG_QUOTA is not set |
| @@ -1480,7 +1517,12 @@ CONFIG_SUNRPC=y | |||
| 1480 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1517 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 1481 | CONFIG_SMB_FS=m | 1518 | CONFIG_SMB_FS=m |
| 1482 | # CONFIG_SMB_NLS_DEFAULT is not set | 1519 | # CONFIG_SMB_NLS_DEFAULT is not set |
| 1483 | # CONFIG_CIFS is not set | 1520 | CONFIG_CIFS=m |
| 1521 | # CONFIG_CIFS_STATS is not set | ||
| 1522 | CONFIG_CIFS_WEAK_PW_HASH=y | ||
| 1523 | # CONFIG_CIFS_XATTR is not set | ||
| 1524 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1525 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1484 | # CONFIG_NCP_FS is not set | 1526 | # CONFIG_NCP_FS is not set |
| 1485 | # CONFIG_CODA_FS is not set | 1527 | # CONFIG_CODA_FS is not set |
| 1486 | # CONFIG_AFS_FS is not set | 1528 | # CONFIG_AFS_FS is not set |
| @@ -1583,9 +1625,10 @@ CONFIG_LOG_BUF_SHIFT=16 | |||
| 1583 | # CONFIG_DEBUG_LIST is not set | 1625 | # CONFIG_DEBUG_LIST is not set |
| 1584 | # CONFIG_FRAME_POINTER is not set | 1626 | # CONFIG_FRAME_POINTER is not set |
| 1585 | # CONFIG_FORCED_INLINING is not set | 1627 | # CONFIG_FORCED_INLINING is not set |
| 1628 | # CONFIG_HEADERS_CHECK is not set | ||
| 1586 | # CONFIG_RCU_TORTURE_TEST is not set | 1629 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1587 | # CONFIG_SH_STANDARD_BIOS is not set | 1630 | # CONFIG_SH_STANDARD_BIOS is not set |
| 1588 | CONFIG_EARLY_SCIF_CONSOLE=y | 1631 | # CONFIG_EARLY_SCIF_CONSOLE is not set |
| 1589 | # CONFIG_EARLY_PRINTK is not set | 1632 | # CONFIG_EARLY_PRINTK is not set |
| 1590 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1633 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
| 1591 | # CONFIG_DEBUG_STACK_USAGE is not set | 1634 | # CONFIG_DEBUG_STACK_USAGE is not set |
| @@ -1605,7 +1648,7 @@ CONFIG_CRYPTO=y | |||
| 1605 | CONFIG_CRYPTO_ALGAPI=y | 1648 | CONFIG_CRYPTO_ALGAPI=y |
| 1606 | CONFIG_CRYPTO_BLKCIPHER=y | 1649 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1607 | CONFIG_CRYPTO_HASH=y | 1650 | CONFIG_CRYPTO_HASH=y |
| 1608 | CONFIG_CRYPTO_MANAGER=m | 1651 | CONFIG_CRYPTO_MANAGER=y |
| 1609 | CONFIG_CRYPTO_HMAC=y | 1652 | CONFIG_CRYPTO_HMAC=y |
| 1610 | CONFIG_CRYPTO_NULL=m | 1653 | CONFIG_CRYPTO_NULL=m |
| 1611 | CONFIG_CRYPTO_MD4=m | 1654 | CONFIG_CRYPTO_MD4=m |
| @@ -1615,7 +1658,7 @@ CONFIG_CRYPTO_SHA256=m | |||
| 1615 | CONFIG_CRYPTO_SHA512=m | 1658 | CONFIG_CRYPTO_SHA512=m |
| 1616 | CONFIG_CRYPTO_WP512=m | 1659 | CONFIG_CRYPTO_WP512=m |
| 1617 | CONFIG_CRYPTO_TGR192=m | 1660 | CONFIG_CRYPTO_TGR192=m |
| 1618 | CONFIG_CRYPTO_ECB=m | 1661 | CONFIG_CRYPTO_ECB=y |
| 1619 | CONFIG_CRYPTO_CBC=y | 1662 | CONFIG_CRYPTO_CBC=y |
| 1620 | CONFIG_CRYPTO_DES=y | 1663 | CONFIG_CRYPTO_DES=y |
| 1621 | CONFIG_CRYPTO_BLOWFISH=m | 1664 | CONFIG_CRYPTO_BLOWFISH=m |
diff --git a/arch/sh/drivers/dma/dma-g2.c b/arch/sh/drivers/dma/dma-g2.c index 9cb070924180..0caf11bb7e27 100644 --- a/arch/sh/drivers/dma/dma-g2.c +++ b/arch/sh/drivers/dma/dma-g2.c | |||
| @@ -51,7 +51,7 @@ static volatile struct g2_dma_info *g2_dma = (volatile struct g2_dma_info *)0xa0 | |||
| 51 | ((g2_dma->channel[i].size - \ | 51 | ((g2_dma->channel[i].size - \ |
| 52 | g2_dma->status[i].size) & 0x0fffffff) | 52 | g2_dma->status[i].size) & 0x0fffffff) |
| 53 | 53 | ||
| 54 | static irqreturn_t g2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 54 | static irqreturn_t g2_dma_interrupt(int irq, void *dev_id) |
| 55 | { | 55 | { |
| 56 | int i; | 56 | int i; |
| 57 | 57 | ||
diff --git a/arch/sh/drivers/dma/dma-pvr2.c b/arch/sh/drivers/dma/dma-pvr2.c index c1b6bc23c107..838fad566eaf 100644 --- a/arch/sh/drivers/dma/dma-pvr2.c +++ b/arch/sh/drivers/dma/dma-pvr2.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | static unsigned int xfer_complete; | 21 | static unsigned int xfer_complete; |
| 22 | static int count; | 22 | static int count; |
| 23 | 23 | ||
| 24 | static irqreturn_t pvr2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 24 | static irqreturn_t pvr2_dma_interrupt(int irq, void *dev_id) |
| 25 | { | 25 | { |
| 26 | if (get_dma_residue(PVR2_CASCADE_CHAN)) { | 26 | if (get_dma_residue(PVR2_CASCADE_CHAN)) { |
| 27 | printk(KERN_WARNING "DMA: SH DMAC did not complete transfer " | 27 | printk(KERN_WARNING "DMA: SH DMAC did not complete transfer " |
diff --git a/arch/sh/drivers/dma/dma-sh.c b/arch/sh/drivers/dma/dma-sh.c index cbbe8bce3d67..660786013350 100644 --- a/arch/sh/drivers/dma/dma-sh.c +++ b/arch/sh/drivers/dma/dma-sh.c | |||
| @@ -19,23 +19,34 @@ | |||
| 19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
| 20 | #include "dma-sh.h" | 20 | #include "dma-sh.h" |
| 21 | 21 | ||
| 22 | static inline unsigned int get_dmte_irq(unsigned int chan) | ||
| 23 | { | ||
| 24 | unsigned int irq = 0; | ||
| 25 | 22 | ||
| 23 | |||
| 24 | #ifdef CONFIG_CPU_SH4 | ||
| 25 | static struct ipr_data dmae_ipr_map[] = { | ||
| 26 | { DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 27 | }; | ||
| 28 | #endif | ||
| 29 | static struct ipr_data dmte_ipr_map[] = { | ||
| 26 | /* | 30 | /* |
| 27 | * Normally we could just do DMTE0_IRQ + chan outright, though in the | 31 | * Normally we could just do DMTE0_IRQ + chan outright, though in the |
| 28 | * case of the 7751R, the DMTE IRQs for channels > 4 start right above | 32 | * case of the 7751R, the DMTE IRQs for channels > 4 start right above |
| 29 | * the SCIF | 33 | * the SCIF |
| 30 | */ | 34 | */ |
| 31 | if (chan < 4) { | 35 | { DMTE0_IRQ + 0, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 32 | irq = DMTE0_IRQ + chan; | 36 | { DMTE0_IRQ + 1, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 33 | } else { | 37 | { DMTE0_IRQ + 2, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 34 | #ifdef DMTE4_IRQ | 38 | { DMTE0_IRQ + 3, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 35 | irq = DMTE4_IRQ + chan - 4; | 39 | { DMTE4_IRQ + 0, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 36 | #endif | 40 | { DMTE4_IRQ + 1, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 37 | } | 41 | { DMTE4_IRQ + 2, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, |
| 42 | { DMTE4_IRQ + 3, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, | ||
| 43 | }; | ||
| 38 | 44 | ||
| 45 | static inline unsigned int get_dmte_irq(unsigned int chan) | ||
| 46 | { | ||
| 47 | unsigned int irq = 0; | ||
| 48 | if (chan < ARRAY_SIZE(dmte_ipr_map)) | ||
| 49 | irq = dmte_ipr_map[chan].irq; | ||
| 39 | return irq; | 50 | return irq; |
| 40 | } | 51 | } |
| 41 | 52 | ||
| @@ -60,9 +71,9 @@ static inline unsigned int calc_xmit_shift(struct dma_channel *chan) | |||
| 60 | * Besides that it needs to waken any waiting process, which should handle | 71 | * Besides that it needs to waken any waiting process, which should handle |
| 61 | * setting up the next transfer. | 72 | * setting up the next transfer. |
| 62 | */ | 73 | */ |
| 63 | static irqreturn_t dma_tei(int irq, void *dev_id, struct pt_regs *regs) | 74 | static irqreturn_t dma_tei(int irq, void *dev_id) |
| 64 | { | 75 | { |
| 65 | struct dma_channel *chan = (struct dma_channel *)dev_id; | 76 | struct dma_channel *chan = dev_id; |
| 66 | u32 chcr; | 77 | u32 chcr; |
| 67 | 78 | ||
| 68 | chcr = ctrl_inl(CHCR[chan->chan]); | 79 | chcr = ctrl_inl(CHCR[chan->chan]); |
| @@ -228,7 +239,7 @@ static inline int dmaor_reset(void) | |||
| 228 | } | 239 | } |
| 229 | 240 | ||
| 230 | #if defined(CONFIG_CPU_SH4) | 241 | #if defined(CONFIG_CPU_SH4) |
| 231 | static irqreturn_t dma_err(int irq, void *dev_id, struct pt_regs *regs) | 242 | static irqreturn_t dma_err(int irq, void *dummy) |
| 232 | { | 243 | { |
| 233 | dmaor_reset(); | 244 | dmaor_reset(); |
| 234 | disable_irq(irq); | 245 | disable_irq(irq); |
| @@ -258,17 +269,16 @@ static int __init sh_dmac_init(void) | |||
| 258 | int i; | 269 | int i; |
| 259 | 270 | ||
| 260 | #ifdef CONFIG_CPU_SH4 | 271 | #ifdef CONFIG_CPU_SH4 |
| 261 | make_ipr_irq(DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | 272 | make_ipr_irq(dmae_ipr_map, ARRAY_SIZE(dmae_ipr_map)); |
| 262 | i = request_irq(DMAE_IRQ, dma_err, IRQF_DISABLED, "DMAC Address Error", 0); | 273 | i = request_irq(DMAE_IRQ, dma_err, IRQF_DISABLED, "DMAC Address Error", 0); |
| 263 | if (unlikely(i < 0)) | 274 | if (unlikely(i < 0)) |
| 264 | return i; | 275 | return i; |
| 265 | #endif | 276 | #endif |
| 266 | 277 | ||
| 267 | for (i = 0; i < info->nr_channels; i++) { | 278 | i = info->nr_channels; |
| 268 | int irq = get_dmte_irq(i); | 279 | if (i > ARRAY_SIZE(dmte_ipr_map)) |
| 269 | 280 | i = ARRAY_SIZE(dmte_ipr_map); | |
| 270 | make_ipr_irq(irq, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); | 281 | make_ipr_irq(dmte_ipr_map, i); |
| 271 | } | ||
| 272 | 282 | ||
| 273 | /* | 283 | /* |
| 274 | * Initialize DMAOR, and clean up any error flags that may have | 284 | * Initialize DMAOR, and clean up any error flags that may have |
diff --git a/arch/sh/drivers/pci/ops-r7780rp.c b/arch/sh/drivers/pci/ops-r7780rp.c index 6e3ba9c65b40..eeea1577e112 100644 --- a/arch/sh/drivers/pci/ops-r7780rp.c +++ b/arch/sh/drivers/pci/ops-r7780rp.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/delay.h> | 14 | #include <linux/delay.h> |
| 15 | #include <linux/pci.h> | 15 | #include <linux/pci.h> |
| 16 | #include <asm/r7780rp/r7780rp.h> | 16 | #include <asm/r7780rp.h> |
| 17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
| 18 | #include "pci-sh4.h" | 18 | #include "pci-sh4.h" |
| 19 | 19 | ||
diff --git a/arch/sh/drivers/pci/ops-rts7751r2d.c b/arch/sh/drivers/pci/ops-rts7751r2d.c index b68824c8b81e..4a518d948049 100644 --- a/arch/sh/drivers/pci/ops-rts7751r2d.c +++ b/arch/sh/drivers/pci/ops-rts7751r2d.c | |||
| @@ -10,28 +10,24 @@ | |||
| 10 | * | 10 | * |
| 11 | * PCI initialization for the Renesas SH7751R RTS7751R2D board | 11 | * PCI initialization for the Renesas SH7751R RTS7751R2D board |
| 12 | */ | 12 | */ |
| 13 | |||
| 14 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 15 | #include <linux/types.h> | 14 | #include <linux/types.h> |
| 16 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 17 | #include <linux/delay.h> | ||
| 18 | #include <linux/pci.h> | 16 | #include <linux/pci.h> |
| 19 | #include <linux/module.h> | 17 | #include <linux/io.h> |
| 20 | #include <asm/rts7751r2d/rts7751r2d.h> | 18 | #include <asm/rts7751r2d.h> |
| 21 | #include <asm/io.h> | ||
| 22 | #include "pci-sh4.h" | 19 | #include "pci-sh4.h" |
| 23 | 20 | ||
| 21 | static u8 rts7751r2d_irq_tab[] __initdata = { | ||
| 22 | IRQ_PCISLOT1, | ||
| 23 | IRQ_PCISLOT2, | ||
| 24 | IRQ_PCMCIA, | ||
| 25 | IRQ_PCIETH, | ||
| 26 | }; | ||
| 27 | |||
| 24 | int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) | 28 | int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) |
| 25 | { | 29 | { |
| 26 | switch (slot) { | 30 | return rts7751r2d_irq_tab[slot]; |
| 27 | case 0: return IRQ_PCISLOT1; /* PCI Extend slot #1 */ | ||
| 28 | case 1: return IRQ_PCISLOT2; /* PCI Extend slot #2 */ | ||
| 29 | case 2: return IRQ_PCMCIA; /* PCI Cardbus Bridge */ | ||
| 30 | case 3: return IRQ_PCIETH; /* Realtek Ethernet controller */ | ||
| 31 | default: | ||
| 32 | printk("PCI: Bad IRQ mapping request for slot %d\n", slot); | ||
| 33 | return -1; | ||
| 34 | } | ||
| 35 | } | 31 | } |
| 36 | 32 | ||
| 37 | static struct resource sh7751_io_resource = { | 33 | static struct resource sh7751_io_resource = { |
diff --git a/arch/sh/drivers/pci/pci-sh7751.c b/arch/sh/drivers/pci/pci-sh7751.c index dbe837884983..85e1ee2e2e7b 100644 --- a/arch/sh/drivers/pci/pci-sh7751.c +++ b/arch/sh/drivers/pci/pci-sh7751.c | |||
| @@ -155,7 +155,7 @@ int __init sh7751_pcic_init(struct sh4_pci_address_map *map) | |||
| 155 | */ | 155 | */ |
| 156 | pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", | 156 | pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", |
| 157 | PCIBIOS_MIN_IO, (64 << 10), | 157 | PCIBIOS_MIN_IO, (64 << 10), |
| 158 | SH4_PCI_IO_BASE + PCIBIOS_MIN_IO); | 158 | SH7751_PCI_IO_BASE + PCIBIOS_MIN_IO); |
| 159 | 159 | ||
| 160 | /* | 160 | /* |
| 161 | * XXX: For now, leave this board-specific. In the event we have other | 161 | * XXX: For now, leave this board-specific. In the event we have other |
| @@ -163,7 +163,7 @@ int __init sh7751_pcic_init(struct sh4_pci_address_map *map) | |||
| 163 | */ | 163 | */ |
| 164 | #ifdef CONFIG_SH_BIGSUR | 164 | #ifdef CONFIG_SH_BIGSUR |
| 165 | bigsur_port_map(PCIBIOS_MIN_IO, (64 << 10), | 165 | bigsur_port_map(PCIBIOS_MIN_IO, (64 << 10), |
| 166 | SH4_PCI_IO_BASE + PCIBIOS_MIN_IO, 0); | 166 | SH7751_PCI_IO_BASE + PCIBIOS_MIN_IO, 0); |
| 167 | #endif | 167 | #endif |
| 168 | 168 | ||
| 169 | /* Make sure the MSB's of IO window are set to access PCI space | 169 | /* Make sure the MSB's of IO window are set to access PCI space |
diff --git a/arch/sh/drivers/pci/pci-st40.c b/arch/sh/drivers/pci/pci-st40.c index 4ab5ea6b35fb..efecb3d5995c 100644 --- a/arch/sh/drivers/pci/pci-st40.c +++ b/arch/sh/drivers/pci/pci-st40.c | |||
| @@ -161,7 +161,7 @@ static char * pci_commands[16]={ | |||
| 161 | "Memory Write-and-Invalidate" | 161 | "Memory Write-and-Invalidate" |
| 162 | }; | 162 | }; |
| 163 | 163 | ||
| 164 | static irqreturn_t st40_pci_irq(int irq, void *dev_instance, struct pt_regs *regs) | 164 | static irqreturn_t st40_pci_irq(int irq, void *dev_instance) |
| 165 | { | 165 | { |
| 166 | unsigned pci_int, pci_air, pci_cir, pci_aint; | 166 | unsigned pci_int, pci_air, pci_cir, pci_aint; |
| 167 | static int count=0; | 167 | static int count=0; |
diff --git a/arch/sh/kernel/cpu/irq/intc2.c b/arch/sh/kernel/cpu/irq/intc2.c index e30e4b7aa70e..74ca576a7ce5 100644 --- a/arch/sh/kernel/cpu/irq/intc2.c +++ b/arch/sh/kernel/cpu/irq/intc2.c | |||
| @@ -10,93 +10,31 @@ | |||
| 10 | * These are the "new Hitachi style" interrupts, as present on the | 10 | * These are the "new Hitachi style" interrupts, as present on the |
| 11 | * Hitachi 7751, the STM ST40 STB1, SH7760, and SH7780. | 11 | * Hitachi 7751, the STM ST40 STB1, SH7760, and SH7780. |
| 12 | */ | 12 | */ |
| 13 | |||
| 14 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 15 | #include <linux/init.h> | ||
| 16 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
| 15 | #include <linux/io.h> | ||
| 17 | #include <asm/system.h> | 16 | #include <asm/system.h> |
| 18 | #include <asm/io.h> | ||
| 19 | #include <asm/machvec.h> | ||
| 20 | |||
| 21 | struct intc2_data { | ||
| 22 | unsigned char msk_offset; | ||
| 23 | unsigned char msk_shift; | ||
| 24 | |||
| 25 | int (*clear_irq) (int); | ||
| 26 | }; | ||
| 27 | |||
| 28 | static struct intc2_data intc2_data[NR_INTC2_IRQS]; | ||
| 29 | |||
| 30 | static void enable_intc2_irq(unsigned int irq); | ||
| 31 | static void disable_intc2_irq(unsigned int irq); | ||
| 32 | |||
| 33 | /* shutdown is same as "disable" */ | ||
| 34 | #define shutdown_intc2_irq disable_intc2_irq | ||
| 35 | |||
| 36 | static void mask_and_ack_intc2(unsigned int); | ||
| 37 | static void end_intc2_irq(unsigned int irq); | ||
| 38 | |||
| 39 | static unsigned int startup_intc2_irq(unsigned int irq) | ||
| 40 | { | ||
| 41 | enable_intc2_irq(irq); | ||
| 42 | return 0; /* never anything pending */ | ||
| 43 | } | ||
| 44 | |||
| 45 | static struct hw_interrupt_type intc2_irq_type = { | ||
| 46 | .typename = "INTC2-IRQ", | ||
| 47 | .startup = startup_intc2_irq, | ||
| 48 | .shutdown = shutdown_intc2_irq, | ||
| 49 | .enable = enable_intc2_irq, | ||
| 50 | .disable = disable_intc2_irq, | ||
| 51 | .ack = mask_and_ack_intc2, | ||
| 52 | .end = end_intc2_irq | ||
| 53 | }; | ||
| 54 | 17 | ||
| 55 | static void disable_intc2_irq(unsigned int irq) | 18 | static void disable_intc2_irq(unsigned int irq) |
| 56 | { | 19 | { |
| 57 | int irq_offset = irq - INTC2_FIRST_IRQ; | 20 | struct intc2_data *p = get_irq_chip_data(irq); |
| 58 | int msk_shift, msk_offset; | 21 | ctrl_outl(1 << p->msk_shift, |
| 59 | 22 | INTC2_BASE + INTC2_INTMSK_OFFSET + p->msk_offset); | |
| 60 | /* Sanity check */ | ||
| 61 | if (unlikely(irq_offset < 0 || irq_offset >= NR_INTC2_IRQS)) | ||
| 62 | return; | ||
| 63 | |||
| 64 | msk_shift = intc2_data[irq_offset].msk_shift; | ||
| 65 | msk_offset = intc2_data[irq_offset].msk_offset; | ||
| 66 | |||
| 67 | ctrl_outl(1 << msk_shift, | ||
| 68 | INTC2_BASE + INTC2_INTMSK_OFFSET + msk_offset); | ||
| 69 | } | 23 | } |
| 70 | 24 | ||
| 71 | static void enable_intc2_irq(unsigned int irq) | 25 | static void enable_intc2_irq(unsigned int irq) |
| 72 | { | 26 | { |
| 73 | int irq_offset = irq - INTC2_FIRST_IRQ; | 27 | struct intc2_data *p = get_irq_chip_data(irq); |
| 74 | int msk_shift, msk_offset; | 28 | ctrl_outl(1 << p->msk_shift, |
| 75 | 29 | INTC2_BASE + INTC2_INTMSKCLR_OFFSET + p->msk_offset); | |
| 76 | /* Sanity check */ | ||
| 77 | if (unlikely(irq_offset < 0 || irq_offset >= NR_INTC2_IRQS)) | ||
| 78 | return; | ||
| 79 | |||
| 80 | msk_shift = intc2_data[irq_offset].msk_shift; | ||
| 81 | msk_offset = intc2_data[irq_offset].msk_offset; | ||
| 82 | |||
| 83 | ctrl_outl(1 << msk_shift, | ||
| 84 | INTC2_BASE + INTC2_INTMSKCLR_OFFSET + msk_offset); | ||
| 85 | } | 30 | } |
| 86 | 31 | ||
| 87 | static void mask_and_ack_intc2(unsigned int irq) | 32 | static struct irq_chip intc2_irq_chip = { |
| 88 | { | 33 | .name = "INTC2", |
| 89 | disable_intc2_irq(irq); | 34 | .mask = disable_intc2_irq, |
| 90 | } | 35 | .unmask = enable_intc2_irq, |
| 91 | 36 | .mask_ack = disable_intc2_irq, | |
| 92 | static void end_intc2_irq(unsigned int irq) | 37 | }; |
| 93 | { | ||
| 94 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | ||
| 95 | enable_intc2_irq(irq); | ||
| 96 | |||
| 97 | if (unlikely(intc2_data[irq - INTC2_FIRST_IRQ].clear_irq)) | ||
| 98 | intc2_data[irq - INTC2_FIRST_IRQ].clear_irq(irq); | ||
| 99 | } | ||
| 100 | 38 | ||
| 101 | /* | 39 | /* |
| 102 | * Setup an INTC2 style interrupt. | 40 | * Setup an INTC2 style interrupt. |
| @@ -106,179 +44,36 @@ static void end_intc2_irq(unsigned int irq) | |||
| 106 | * PIO1 which is INTPRI00[19,16] and INTMSK00[13] | 44 | * PIO1 which is INTPRI00[19,16] and INTMSK00[13] |
| 107 | * would be: ^ ^ ^ ^ | 45 | * would be: ^ ^ ^ ^ |
| 108 | * | | | | | 46 | * | | | | |
| 109 | * make_intc2_irq(84, 0, 16, 0, 13); | 47 | * { 84, 0, 16, 0, 13 }, |
| 48 | * | ||
| 49 | * in the intc2_data table. | ||
| 110 | */ | 50 | */ |
| 111 | void make_intc2_irq(unsigned int irq, | 51 | void make_intc2_irq(struct intc2_data *table, unsigned int nr_irqs) |
| 112 | unsigned int ipr_offset, unsigned int ipr_shift, | ||
| 113 | unsigned int msk_offset, unsigned int msk_shift, | ||
| 114 | unsigned int priority) | ||
| 115 | { | 52 | { |
| 116 | int irq_offset = irq - INTC2_FIRST_IRQ; | 53 | int i; |
| 117 | unsigned int flags; | ||
| 118 | unsigned long ipr; | ||
| 119 | |||
| 120 | if (unlikely(irq_offset < 0 || irq_offset >= NR_INTC2_IRQS)) | ||
| 121 | return; | ||
| 122 | |||
| 123 | disable_irq_nosync(irq); | ||
| 124 | |||
| 125 | /* Fill the data we need */ | ||
| 126 | intc2_data[irq_offset].msk_offset = msk_offset; | ||
| 127 | intc2_data[irq_offset].msk_shift = msk_shift; | ||
| 128 | intc2_data[irq_offset].clear_irq = NULL; | ||
| 129 | |||
| 130 | /* Set the priority level */ | ||
| 131 | local_irq_save(flags); | ||
| 132 | |||
| 133 | ipr = ctrl_inl(INTC2_BASE + INTC2_INTPRI_OFFSET + ipr_offset); | ||
| 134 | ipr &= ~(0xf << ipr_shift); | ||
| 135 | ipr |= priority << ipr_shift; | ||
| 136 | ctrl_outl(ipr, INTC2_BASE + INTC2_INTPRI_OFFSET + ipr_offset); | ||
| 137 | |||
| 138 | local_irq_restore(flags); | ||
| 139 | 54 | ||
| 140 | irq_desc[irq].chip = &intc2_irq_type; | 55 | for (i = 0; i < nr_irqs; i++) { |
| 56 | unsigned long ipr, flags; | ||
| 57 | struct intc2_data *p = table + i; | ||
| 141 | 58 | ||
| 142 | disable_intc2_irq(irq); | 59 | disable_irq_nosync(p->irq); |
| 143 | } | ||
| 144 | 60 | ||
| 145 | static struct intc2_init { | 61 | /* Set the priority level */ |
| 146 | unsigned short irq; | 62 | local_irq_save(flags); |
| 147 | unsigned char ipr_offset, ipr_shift; | ||
| 148 | unsigned char msk_offset, msk_shift; | ||
| 149 | unsigned char priority; | ||
| 150 | } intc2_init_data[] __initdata = { | ||
| 151 | #if defined(CONFIG_CPU_SUBTYPE_ST40) | ||
| 152 | {64, 0, 0, 0, 0, 13}, /* PCI serr */ | ||
| 153 | {65, 0, 4, 0, 1, 13}, /* PCI err */ | ||
| 154 | {66, 0, 4, 0, 2, 13}, /* PCI ad */ | ||
| 155 | {67, 0, 4, 0, 3, 13}, /* PCI pwd down */ | ||
| 156 | {72, 0, 8, 0, 5, 13}, /* DMAC INT0 */ | ||
| 157 | {73, 0, 8, 0, 6, 13}, /* DMAC INT1 */ | ||
| 158 | {74, 0, 8, 0, 7, 13}, /* DMAC INT2 */ | ||
| 159 | {75, 0, 8, 0, 8, 13}, /* DMAC INT3 */ | ||
| 160 | {76, 0, 8, 0, 9, 13}, /* DMAC INT4 */ | ||
| 161 | {78, 0, 8, 0, 11, 13}, /* DMAC ERR */ | ||
| 162 | {80, 0, 12, 0, 12, 13}, /* PIO0 */ | ||
| 163 | {84, 0, 16, 0, 13, 13}, /* PIO1 */ | ||
| 164 | {88, 0, 20, 0, 14, 13}, /* PIO2 */ | ||
| 165 | {112, 4, 0, 4, 0, 13}, /* Mailbox */ | ||
| 166 | #ifdef CONFIG_CPU_SUBTYPE_ST40GX1 | ||
| 167 | {116, 4, 4, 4, 4, 13}, /* SSC0 */ | ||
| 168 | {120, 4, 8, 4, 8, 13}, /* IR Blaster */ | ||
| 169 | {124, 4, 12, 4, 12, 13}, /* USB host */ | ||
| 170 | {128, 4, 16, 4, 16, 13}, /* Video processor BLITTER */ | ||
| 171 | {132, 4, 20, 4, 20, 13}, /* UART0 */ | ||
| 172 | {134, 4, 20, 4, 22, 13}, /* UART2 */ | ||
| 173 | {136, 4, 24, 4, 24, 13}, /* IO_PIO0 */ | ||
| 174 | {140, 4, 28, 4, 28, 13}, /* EMPI */ | ||
| 175 | {144, 8, 0, 8, 0, 13}, /* MAFE */ | ||
| 176 | {148, 8, 4, 8, 4, 13}, /* PWM */ | ||
| 177 | {152, 8, 8, 8, 8, 13}, /* SSC1 */ | ||
| 178 | {156, 8, 12, 8, 12, 13}, /* IO_PIO1 */ | ||
| 179 | {160, 8, 16, 8, 16, 13}, /* USB target */ | ||
| 180 | {164, 8, 20, 8, 20, 13}, /* UART1 */ | ||
| 181 | {168, 8, 24, 8, 24, 13}, /* Teletext */ | ||
| 182 | {172, 8, 28, 8, 28, 13}, /* VideoSync VTG */ | ||
| 183 | {173, 8, 28, 8, 29, 13}, /* VideoSync DVP0 */ | ||
| 184 | {174, 8, 28, 8, 30, 13}, /* VideoSync DVP1 */ | ||
| 185 | #endif | ||
| 186 | #elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
| 187 | /* | ||
| 188 | * SH7760 INTC2-Style interrupts, vectors IRQ48-111 INTEVT 0x800-0xFE0 | ||
| 189 | */ | ||
| 190 | /* INTPRIO0 | INTMSK0 */ | ||
| 191 | {48, 0, 28, 0, 31, 3}, /* IRQ 4 */ | ||
| 192 | {49, 0, 24, 0, 30, 3}, /* IRQ 3 */ | ||
| 193 | {50, 0, 20, 0, 29, 3}, /* IRQ 2 */ | ||
| 194 | {51, 0, 16, 0, 28, 3}, /* IRQ 1 */ | ||
| 195 | /* 52-55 (INTEVT 0x880-0x8E0) unused/reserved */ | ||
| 196 | /* INTPRIO4 | INTMSK0 */ | ||
| 197 | {56, 4, 28, 0, 25, 3}, /* HCAN2_CHAN0 */ | ||
| 198 | {57, 4, 24, 0, 24, 3}, /* HCAN2_CHAN1 */ | ||
| 199 | {58, 4, 20, 0, 23, 3}, /* I2S_CHAN0 */ | ||
| 200 | {59, 4, 16, 0, 22, 3}, /* I2S_CHAN1 */ | ||
| 201 | {60, 4, 12, 0, 21, 3}, /* AC97_CHAN0 */ | ||
| 202 | {61, 4, 8, 0, 20, 3}, /* AC97_CHAN1 */ | ||
| 203 | {62, 4, 4, 0, 19, 3}, /* I2C_CHAN0 */ | ||
| 204 | {63, 4, 0, 0, 18, 3}, /* I2C_CHAN1 */ | ||
| 205 | /* INTPRIO8 | INTMSK0 */ | ||
| 206 | {52, 8, 16, 0, 11, 3}, /* SCIF0_ERI_IRQ */ | ||
| 207 | {53, 8, 16, 0, 10, 3}, /* SCIF0_RXI_IRQ */ | ||
| 208 | {54, 8, 16, 0, 9, 3}, /* SCIF0_BRI_IRQ */ | ||
| 209 | {55, 8, 16, 0, 8, 3}, /* SCIF0_TXI_IRQ */ | ||
| 210 | {64, 8, 28, 0, 17, 3}, /* USBHI_IRQ */ | ||
| 211 | {65, 8, 24, 0, 16, 3}, /* LCDC */ | ||
| 212 | /* 66, 67 unused */ | ||
| 213 | {68, 8, 20, 0, 14, 13}, /* DMABRGI0_IRQ */ | ||
| 214 | {69, 8, 20, 0, 13, 13}, /* DMABRGI1_IRQ */ | ||
| 215 | {70, 8, 20, 0, 12, 13}, /* DMABRGI2_IRQ */ | ||
| 216 | /* 71 unused */ | ||
| 217 | {72, 8, 12, 0, 7, 3}, /* SCIF1_ERI_IRQ */ | ||
| 218 | {73, 8, 12, 0, 6, 3}, /* SCIF1_RXI_IRQ */ | ||
| 219 | {74, 8, 12, 0, 5, 3}, /* SCIF1_BRI_IRQ */ | ||
| 220 | {75, 8, 12, 0, 4, 3}, /* SCIF1_TXI_IRQ */ | ||
| 221 | {76, 8, 8, 0, 3, 3}, /* SCIF2_ERI_IRQ */ | ||
| 222 | {77, 8, 8, 0, 2, 3}, /* SCIF2_RXI_IRQ */ | ||
| 223 | {78, 8, 8, 0, 1, 3}, /* SCIF2_BRI_IRQ */ | ||
| 224 | {79, 8, 8, 0, 0, 3}, /* SCIF2_TXI_IRQ */ | ||
| 225 | /* | INTMSK4 */ | ||
| 226 | {80, 8, 4, 4, 23, 3}, /* SIM_ERI */ | ||
| 227 | {81, 8, 4, 4, 22, 3}, /* SIM_RXI */ | ||
| 228 | {82, 8, 4, 4, 21, 3}, /* SIM_TXI */ | ||
| 229 | {83, 8, 4, 4, 20, 3}, /* SIM_TEI */ | ||
| 230 | {84, 8, 0, 4, 19, 3}, /* HSPII */ | ||
| 231 | /* INTPRIOC | INTMSK4 */ | ||
| 232 | /* 85-87 unused/reserved */ | ||
| 233 | {88, 12, 20, 4, 18, 3}, /* MMCI0 */ | ||
| 234 | {89, 12, 20, 4, 17, 3}, /* MMCI1 */ | ||
| 235 | {90, 12, 20, 4, 16, 3}, /* MMCI2 */ | ||
| 236 | {91, 12, 20, 4, 15, 3}, /* MMCI3 */ | ||
| 237 | {92, 12, 12, 4, 6, 3}, /* MFI (unsure, bug? in my 7760 manual*/ | ||
| 238 | /* 93-107 reserved/undocumented */ | ||
| 239 | {108,12, 4, 4, 1, 3}, /* ADC */ | ||
| 240 | {109,12, 0, 4, 0, 3}, /* CMTI */ | ||
| 241 | /* 110-111 reserved/unused */ | ||
| 242 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | ||
| 243 | { TIMER_IRQ, 0, 24, 0, INTC_TMU0_MSK, 2}, | ||
| 244 | { 21, 1, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 245 | { 22, 1, 1, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 246 | { 23, 1, 2, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 247 | { SCIF0_ERI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 248 | { SCIF0_RXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 249 | { SCIF0_BRI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 250 | { SCIF0_TXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 251 | 63 | ||
| 252 | { SCIF1_ERI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | 64 | ipr = ctrl_inl(INTC2_BASE + INTC2_INTPRI_OFFSET + |
| 253 | { SCIF1_RXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | 65 | p->ipr_offset); |
| 254 | { SCIF1_BRI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | 66 | ipr &= ~(0xf << p->ipr_shift); |
| 255 | { SCIF1_TXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | 67 | ipr |= p->priority << p->ipr_shift; |
| 68 | ctrl_outl(ipr, INTC2_BASE + INTC2_INTPRI_OFFSET + | ||
| 69 | p->ipr_offset); | ||
| 256 | 70 | ||
| 257 | { PCIC0_IRQ, 0x10, 8, 0, INTC_PCIC0_MSK, PCIC0_PRIORITY }, | 71 | local_irq_restore(flags); |
| 258 | { PCIC1_IRQ, 0x10, 0, 0, INTC_PCIC1_MSK, PCIC1_PRIORITY }, | ||
| 259 | { PCIC2_IRQ, 0x14, 24, 0, INTC_PCIC2_MSK, PCIC2_PRIORITY }, | ||
| 260 | { PCIC3_IRQ, 0x14, 16, 0, INTC_PCIC3_MSK, PCIC3_PRIORITY }, | ||
| 261 | { PCIC4_IRQ, 0x14, 8, 0, INTC_PCIC4_MSK, PCIC4_PRIORITY }, | ||
| 262 | #endif | ||
| 263 | }; | ||
| 264 | 72 | ||
| 265 | void __init init_IRQ_intc2(void) | 73 | set_irq_chip_and_handler_name(p->irq, &intc2_irq_chip, |
| 266 | { | 74 | handle_level_irq, "level"); |
| 267 | int i; | 75 | set_irq_chip_data(p->irq, p); |
| 268 | 76 | ||
| 269 | for (i = 0; i < ARRAY_SIZE(intc2_init_data); i++) { | 77 | enable_intc2_irq(p->irq); |
| 270 | struct intc2_init *p = intc2_init_data + i; | ||
| 271 | make_intc2_irq(p->irq, p->ipr_offset, p->ipr_shift, | ||
| 272 | p-> msk_offset, p->msk_shift, p->priority); | ||
| 273 | } | 78 | } |
| 274 | } | 79 | } |
| 275 | |||
| 276 | /* Adds a termination callback to the interrupt */ | ||
| 277 | void intc2_add_clear_irq(int irq, int (*fn)(int)) | ||
| 278 | { | ||
| 279 | if (unlikely(irq < INTC2_FIRST_IRQ)) | ||
| 280 | return; | ||
| 281 | |||
| 282 | intc2_data[irq - INTC2_FIRST_IRQ].clear_irq = fn; | ||
| 283 | } | ||
| 284 | |||
diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c index f785822cd5de..a0089563cbfc 100644 --- a/arch/sh/kernel/cpu/irq/ipr.c +++ b/arch/sh/kernel/cpu/irq/ipr.c | |||
| @@ -1,11 +1,10 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/sh/kernel/cpu/irq/ipr.c | 2 | * Interrupt handling for IPR-based IRQ. |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999 Niibe Yutaka & Takeshi Yaegashi | 4 | * Copyright (C) 1999 Niibe Yutaka & Takeshi Yaegashi |
| 5 | * Copyright (C) 2000 Kazumoto Kojima | 5 | * Copyright (C) 2000 Kazumoto Kojima |
| 6 | * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> | 6 | * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> |
| 7 | * | 7 | * Copyright (C) 2006 Paul Mundt |
| 8 | * Interrupt handling for IPR-based IRQ. | ||
| 9 | * | 8 | * |
| 10 | * Supported system: | 9 | * Supported system: |
| 11 | * On-chip supporting modules (TMU, RTC, etc.). | 10 | * On-chip supporting modules (TMU, RTC, etc.). |
| @@ -13,151 +12,92 @@ | |||
| 13 | * Hitachi SolutionEngine external I/O: | 12 | * Hitachi SolutionEngine external I/O: |
| 14 | * MS7709SE01, MS7709ASE01, and MS7750SE01 | 13 | * MS7709SE01, MS7709ASE01, and MS7750SE01 |
| 15 | * | 14 | * |
| 15 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 16 | * License. See the file "COPYING" in the main directory of this archive | ||
| 17 | * for more details. | ||
| 16 | */ | 18 | */ |
| 17 | |||
| 18 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 19 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 20 | #include <linux/module.h> | 21 | #include <linux/module.h> |
| 21 | |||
| 22 | #include <asm/system.h> | 22 | #include <asm/system.h> |
| 23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
| 24 | #include <asm/machvec.h> | 24 | #include <asm/machvec.h> |
| 25 | 25 | ||
| 26 | struct ipr_data { | ||
| 27 | unsigned int addr; /* Address of Interrupt Priority Register */ | ||
| 28 | int shift; /* Shifts of the 16-bit data */ | ||
| 29 | int priority; /* The priority */ | ||
| 30 | }; | ||
| 31 | static struct ipr_data ipr_data[NR_IRQS]; | ||
| 32 | |||
| 33 | static void enable_ipr_irq(unsigned int irq); | ||
| 34 | static void disable_ipr_irq(unsigned int irq); | ||
| 35 | |||
| 36 | /* shutdown is same as "disable" */ | ||
| 37 | #define shutdown_ipr_irq disable_ipr_irq | ||
| 38 | |||
| 39 | static void mask_and_ack_ipr(unsigned int); | ||
| 40 | static void end_ipr_irq(unsigned int irq); | ||
| 41 | |||
| 42 | static unsigned int startup_ipr_irq(unsigned int irq) | ||
| 43 | { | ||
| 44 | enable_ipr_irq(irq); | ||
| 45 | return 0; /* never anything pending */ | ||
| 46 | } | ||
| 47 | |||
| 48 | static struct hw_interrupt_type ipr_irq_type = { | ||
| 49 | .typename = "IPR-IRQ", | ||
| 50 | .startup = startup_ipr_irq, | ||
| 51 | .shutdown = shutdown_ipr_irq, | ||
| 52 | .enable = enable_ipr_irq, | ||
| 53 | .disable = disable_ipr_irq, | ||
| 54 | .ack = mask_and_ack_ipr, | ||
| 55 | .end = end_ipr_irq | ||
| 56 | }; | ||
| 57 | 26 | ||
| 58 | static void disable_ipr_irq(unsigned int irq) | 27 | static void disable_ipr_irq(unsigned int irq) |
| 59 | { | 28 | { |
| 60 | unsigned long val; | 29 | struct ipr_data *p = get_irq_chip_data(irq); |
| 61 | unsigned int addr = ipr_data[irq].addr; | 30 | int shift = p->shift*4; |
| 62 | unsigned short mask = 0xffff ^ (0x0f << ipr_data[irq].shift); | ||
| 63 | |||
| 64 | /* Set the priority in IPR to 0 */ | 31 | /* Set the priority in IPR to 0 */ |
| 65 | val = ctrl_inw(addr); | 32 | ctrl_outw(ctrl_inw(p->addr) & (0xffff ^ (0xf << shift)), p->addr); |
| 66 | val &= mask; | ||
| 67 | ctrl_outw(val, addr); | ||
| 68 | } | 33 | } |
| 69 | 34 | ||
| 70 | static void enable_ipr_irq(unsigned int irq) | 35 | static void enable_ipr_irq(unsigned int irq) |
| 71 | { | 36 | { |
| 72 | unsigned long val; | 37 | struct ipr_data *p = get_irq_chip_data(irq); |
| 73 | unsigned int addr = ipr_data[irq].addr; | 38 | int shift = p->shift*4; |
| 74 | int priority = ipr_data[irq].priority; | ||
| 75 | unsigned short value = (priority << ipr_data[irq].shift); | ||
| 76 | |||
| 77 | /* Set priority in IPR back to original value */ | 39 | /* Set priority in IPR back to original value */ |
| 78 | val = ctrl_inw(addr); | 40 | ctrl_outw(ctrl_inw(p->addr) | (p->priority << shift), p->addr); |
| 79 | val |= value; | ||
| 80 | ctrl_outw(val, addr); | ||
| 81 | } | 41 | } |
| 82 | 42 | ||
| 83 | static void mask_and_ack_ipr(unsigned int irq) | 43 | static struct irq_chip ipr_irq_chip = { |
| 84 | { | 44 | .name = "IPR", |
| 85 | disable_ipr_irq(irq); | 45 | .mask = disable_ipr_irq, |
| 86 | 46 | .unmask = enable_ipr_irq, | |
| 87 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | 47 | .mask_ack = disable_ipr_irq, |
| 88 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | 48 | }; |
| 89 | defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
| 90 | /* This is needed when we use edge triggered setting */ | ||
| 91 | /* XXX: Is it really needed? */ | ||
| 92 | if (IRQ0_IRQ <= irq && irq <= IRQ5_IRQ) { | ||
| 93 | /* Clear external interrupt request */ | ||
| 94 | int a = ctrl_inb(INTC_IRR0); | ||
| 95 | a &= ~(1 << (irq - IRQ0_IRQ)); | ||
| 96 | ctrl_outb(a, INTC_IRR0); | ||
| 97 | } | ||
| 98 | #endif | ||
| 99 | } | ||
| 100 | 49 | ||
| 101 | static void end_ipr_irq(unsigned int irq) | 50 | void make_ipr_irq(struct ipr_data *table, unsigned int nr_irqs) |
| 102 | { | 51 | { |
| 103 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | 52 | int i; |
| 53 | |||
| 54 | for (i = 0; i < nr_irqs; i++) { | ||
| 55 | unsigned int irq = table[i].irq; | ||
| 56 | disable_irq_nosync(irq); | ||
| 57 | set_irq_chip_and_handler_name(irq, &ipr_irq_chip, | ||
| 58 | handle_level_irq, "level"); | ||
| 59 | set_irq_chip_data(irq, &table[i]); | ||
| 104 | enable_ipr_irq(irq); | 60 | enable_ipr_irq(irq); |
| 61 | } | ||
| 105 | } | 62 | } |
| 63 | EXPORT_SYMBOL(make_ipr_irq); | ||
| 106 | 64 | ||
| 107 | void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, int priority) | 65 | static struct ipr_data sys_ipr_map[] = { |
| 108 | { | ||
| 109 | disable_irq_nosync(irq); | ||
| 110 | ipr_data[irq].addr = addr; | ||
| 111 | ipr_data[irq].shift = pos*4; /* POSition (0-3) x 4 means shift */ | ||
| 112 | ipr_data[irq].priority = priority; | ||
| 113 | |||
| 114 | irq_desc[irq].chip = &ipr_irq_type; | ||
| 115 | disable_ipr_irq(irq); | ||
| 116 | } | ||
| 117 | |||
| 118 | void __init init_IRQ(void) | ||
| 119 | { | ||
| 120 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | 66 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 |
| 121 | make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY); | 67 | { TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY }, |
| 122 | make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY); | 68 | { TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY }, |
| 123 | #ifdef RTC_IRQ | 69 | #ifdef RTC_IRQ |
| 124 | make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY); | 70 | { RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY }, |
| 125 | #endif | 71 | #endif |
| 126 | |||
| 127 | #ifdef SCI_ERI_IRQ | 72 | #ifdef SCI_ERI_IRQ |
| 128 | make_ipr_irq(SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); | 73 | { SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY }, |
| 129 | make_ipr_irq(SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); | 74 | { SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY }, |
| 130 | make_ipr_irq(SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); | 75 | { SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY }, |
| 131 | #endif | 76 | #endif |
| 132 | |||
| 133 | #ifdef SCIF1_ERI_IRQ | 77 | #ifdef SCIF1_ERI_IRQ |
| 134 | make_ipr_irq(SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); | 78 | { SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY }, |
| 135 | make_ipr_irq(SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); | 79 | { SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY }, |
| 136 | make_ipr_irq(SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); | 80 | { SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY }, |
| 137 | make_ipr_irq(SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); | 81 | { SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY }, |
| 138 | #endif | 82 | #endif |
| 139 | |||
| 140 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | 83 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) |
| 141 | make_ipr_irq(SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY); | 84 | { SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY }, |
| 142 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | 85 | { DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, |
| 143 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); | 86 | { DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY }, |
| 144 | make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); | 87 | { VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY }, |
| 145 | #endif | 88 | #endif |
| 146 | |||
| 147 | #ifdef SCIF_ERI_IRQ | 89 | #ifdef SCIF_ERI_IRQ |
| 148 | make_ipr_irq(SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); | 90 | { SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY }, |
| 149 | make_ipr_irq(SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); | 91 | { SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY }, |
| 150 | make_ipr_irq(SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); | 92 | { SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY }, |
| 151 | make_ipr_irq(SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); | 93 | { SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY }, |
| 152 | #endif | 94 | #endif |
| 153 | |||
| 154 | #ifdef IRDA_ERI_IRQ | 95 | #ifdef IRDA_ERI_IRQ |
| 155 | make_ipr_irq(IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); | 96 | { IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY }, |
| 156 | make_ipr_irq(IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); | 97 | { IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY }, |
| 157 | make_ipr_irq(IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); | 98 | { IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY }, |
| 158 | make_ipr_irq(IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); | 99 | { IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY }, |
| 159 | #endif | 100 | #endif |
| 160 | |||
| 161 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | 101 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ |
| 162 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | 102 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ |
| 163 | defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705) | 103 | defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705) |
| @@ -171,14 +111,19 @@ void __init init_IRQ(void) | |||
| 171 | * You should set corresponding bits of PFC to "00" | 111 | * You should set corresponding bits of PFC to "00" |
| 172 | * to enable these interrupts. | 112 | * to enable these interrupts. |
| 173 | */ | 113 | */ |
| 174 | make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY); | 114 | { IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY }, |
| 175 | make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY); | 115 | { IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY }, |
| 176 | make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY); | 116 | { IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY }, |
| 177 | make_ipr_irq(IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY); | 117 | { IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY }, |
| 178 | make_ipr_irq(IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY); | 118 | { IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY }, |
| 179 | make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY); | 119 | { IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY }, |
| 180 | #endif | 120 | #endif |
| 181 | #endif | 121 | #endif |
| 122 | }; | ||
| 123 | |||
| 124 | void __init init_IRQ(void) | ||
| 125 | { | ||
| 126 | make_ipr_irq(sys_ipr_map, ARRAY_SIZE(sys_ipr_map)); | ||
| 182 | 127 | ||
| 183 | #ifdef CONFIG_CPU_HAS_PINT_IRQ | 128 | #ifdef CONFIG_CPU_HAS_PINT_IRQ |
| 184 | init_IRQ_pint(); | 129 | init_IRQ_pint(); |
| @@ -200,5 +145,3 @@ int ipr_irq_demux(int irq) | |||
| 200 | return irq; | 145 | return irq; |
| 201 | } | 146 | } |
| 202 | #endif | 147 | #endif |
| 203 | |||
| 204 | EXPORT_SYMBOL(make_ipr_irq); | ||
diff --git a/arch/sh/kernel/cpu/irq/pint.c b/arch/sh/kernel/cpu/irq/pint.c index 17f47b373d6e..f60007783a21 100644 --- a/arch/sh/kernel/cpu/irq/pint.c +++ b/arch/sh/kernel/cpu/irq/pint.c | |||
| @@ -84,12 +84,16 @@ void make_pint_irq(unsigned int irq) | |||
| 84 | disable_pint_irq(irq); | 84 | disable_pint_irq(irq); |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | static struct ipr_data pint_ipr_map[] = { | ||
| 88 | { PINT0_IRQ, PINT0_IPR_ADDR, PINT0_IPR_POS, PINT0_PRIORITY }, | ||
| 89 | { PINT8_IRQ, PINT8_IPR_ADDR, PINT8_IPR_POS, PINT8_PRIORITY }, | ||
| 90 | }; | ||
| 91 | |||
| 87 | void __init init_IRQ_pint(void) | 92 | void __init init_IRQ_pint(void) |
| 88 | { | 93 | { |
| 89 | int i; | 94 | int i; |
| 90 | 95 | ||
| 91 | make_ipr_irq(PINT0_IRQ, PINT0_IPR_ADDR, PINT0_IPR_POS, PINT0_PRIORITY); | 96 | make_ipr_irq(pint_ipr_map, ARRAY_SIZE(pint_ipr_map)); |
| 92 | make_ipr_irq(PINT8_IRQ, PINT8_IPR_ADDR, PINT8_IPR_POS, PINT8_PRIORITY); | ||
| 93 | 97 | ||
| 94 | enable_irq(PINT0_IRQ); | 98 | enable_irq(PINT0_IRQ); |
| 95 | enable_irq(PINT8_IRQ); | 99 | enable_irq(PINT8_IRQ); |
diff --git a/arch/sh/kernel/cpu/sh3/ex.S b/arch/sh/kernel/cpu/sh3/ex.S index 44daf44833f9..ba3082d640b5 100644 --- a/arch/sh/kernel/cpu/sh3/ex.S +++ b/arch/sh/kernel/cpu/sh3/ex.S | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * The SH-3 exception vector table. | 4 | * The SH-3 exception vector table. |
| 5 | 5 | ||
| 6 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka | 6 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka |
| 7 | * Copyright (C) 2003 Paul Mundt | 7 | * Copyright (C) 2003 - 2006 Paul Mundt |
| 8 | * | 8 | * |
| 9 | * This file is subject to the terms and conditions of the GNU General Public | 9 | * This file is subject to the terms and conditions of the GNU General Public |
| 10 | * License. See the file "COPYING" in the main directory of this archive | 10 | * License. See the file "COPYING" in the main directory of this archive |
| @@ -49,198 +49,10 @@ ENTRY(nmi_slot) | |||
| 49 | #endif | 49 | #endif |
| 50 | ENTRY(user_break_point_trap) | 50 | ENTRY(user_break_point_trap) |
| 51 | .long break_point_trap /* 1E0 */ | 51 | .long break_point_trap /* 1E0 */ |
| 52 | ENTRY(interrupt_table) | 52 | |
| 53 | ! external hardware | 53 | /* |
| 54 | .long do_IRQ ! 0000 /* 200 */ | 54 | * Pad the remainder of the table out, exceptions residing in far |
| 55 | .long do_IRQ ! 0001 | 55 | * away offsets can be manually inserted in to their appropriate |
| 56 | .long do_IRQ ! 0010 | 56 | * location via set_exception_table_{evt,vec}(). |
| 57 | .long do_IRQ ! 0011 | 57 | */ |
| 58 | .long do_IRQ ! 0100 | 58 | .balign 4096,0,4096 |
| 59 | .long do_IRQ ! 0101 | ||
| 60 | .long do_IRQ ! 0110 | ||
| 61 | .long do_IRQ ! 0111 | ||
| 62 | .long do_IRQ ! 1000 /* 300 */ | ||
| 63 | .long do_IRQ ! 1001 | ||
| 64 | .long do_IRQ ! 1010 | ||
| 65 | .long do_IRQ ! 1011 | ||
| 66 | .long do_IRQ ! 1100 | ||
| 67 | .long do_IRQ ! 1101 | ||
| 68 | .long do_IRQ ! 1110 | ||
| 69 | .long exception_error | ||
| 70 | ! Internal hardware | ||
| 71 | .long do_IRQ ! TMU0 tuni0 /* 400 */ | ||
| 72 | .long do_IRQ ! TMU1 tuni1 | ||
| 73 | .long do_IRQ ! TMU2 tuni2 | ||
| 74 | .long do_IRQ ! ticpi2 | ||
| 75 | .long do_IRQ ! RTC ati | ||
| 76 | .long do_IRQ ! pri | ||
| 77 | .long do_IRQ ! cui | ||
| 78 | .long do_IRQ ! SCI eri | ||
| 79 | .long do_IRQ ! rxi /* 500 */ | ||
| 80 | .long do_IRQ ! txi | ||
| 81 | .long do_IRQ ! tei | ||
| 82 | .long do_IRQ ! WDT iti /* 560 */ | ||
| 83 | .long do_IRQ ! REF rcmi | ||
| 84 | .long do_IRQ ! rovi | ||
| 85 | .long do_IRQ | ||
| 86 | .long do_IRQ /* 5E0 */ | ||
| 87 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || \ | ||
| 88 | defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | ||
| 89 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
| 90 | defined(CONFIG_CPU_SUBTYPE_SH7300) || \ | ||
| 91 | defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | ||
| 92 | defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
| 93 | .long do_IRQ ! 32 IRQ irq0 /* 600 */ | ||
| 94 | .long do_IRQ ! 33 irq1 | ||
| 95 | .long do_IRQ ! 34 irq2 | ||
| 96 | .long do_IRQ ! 35 irq3 | ||
| 97 | .long do_IRQ ! 36 irq4 | ||
| 98 | .long do_IRQ ! 37 irq5 | ||
| 99 | .long do_IRQ ! 38 | ||
| 100 | .long do_IRQ ! 39 | ||
| 101 | .long do_IRQ ! 40 PINT pint0-7 /* 700 */ | ||
| 102 | .long do_IRQ ! 41 pint8-15 | ||
| 103 | .long do_IRQ ! 42 | ||
| 104 | .long do_IRQ ! 43 | ||
| 105 | .long do_IRQ ! 44 | ||
| 106 | .long do_IRQ ! 45 | ||
| 107 | .long do_IRQ ! 46 | ||
| 108 | .long do_IRQ ! 47 | ||
| 109 | .long do_IRQ ! 48 DMAC dei0 /* 800 */ | ||
| 110 | .long do_IRQ ! 49 dei1 | ||
| 111 | .long do_IRQ ! 50 dei2 | ||
| 112 | .long do_IRQ ! 51 dei3 | ||
| 113 | .long do_IRQ ! 52 IrDA eri1 | ||
| 114 | .long do_IRQ ! 53 rxi1 | ||
| 115 | .long do_IRQ ! 54 bri1 | ||
| 116 | .long do_IRQ ! 55 txi1 | ||
| 117 | .long do_IRQ ! 56 SCIF eri2 | ||
| 118 | .long do_IRQ ! 57 rxi2 | ||
| 119 | .long do_IRQ ! 58 bri2 | ||
| 120 | .long do_IRQ ! 59 txi2 | ||
| 121 | .long do_IRQ ! 60 ADC adi /* 980 */ | ||
| 122 | #if defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
| 123 | .long exception_none ! 61 /* 9A0 */ | ||
| 124 | .long exception_none ! 62 | ||
| 125 | .long exception_none ! 63 | ||
| 126 | .long exception_none ! 64 /* A00 */ | ||
| 127 | .long do_IRQ ! 65 USB usi0 | ||
| 128 | .long do_IRQ ! 66 usi1 | ||
| 129 | .long exception_none ! 67 | ||
| 130 | .long exception_none ! 68 | ||
| 131 | .long exception_none ! 69 | ||
| 132 | .long exception_none ! 70 | ||
| 133 | .long exception_none ! 71 | ||
| 134 | .long exception_none ! 72 /* B00 */ | ||
| 135 | .long exception_none ! 73 | ||
| 136 | .long exception_none ! 74 | ||
| 137 | .long exception_none ! 75 | ||
| 138 | .long exception_none ! 76 | ||
| 139 | .long exception_none ! 77 | ||
| 140 | .long exception_none ! 78 | ||
| 141 | .long exception_none ! 79 | ||
| 142 | .long do_IRQ ! 80 TPU0 tpi0 /* C00 */ | ||
| 143 | .long do_IRQ ! 81 TPU1 tpi1 | ||
| 144 | .long exception_none ! 82 | ||
| 145 | .long exception_none ! 83 | ||
| 146 | .long do_IRQ ! 84 TPU2 tpi2 | ||
| 147 | .long do_IRQ ! 85 TPU3 tpi3 /* CA0 */ | ||
| 148 | #endif | ||
| 149 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
| 150 | .long do_IRQ ! 61 LCDC lcdi /* 9A0 */ | ||
| 151 | .long do_IRQ ! 62 PCC pcc0i | ||
| 152 | .long do_IRQ ! 63 pcc1i /* 9E0 */ | ||
| 153 | #endif | ||
| 154 | #if defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
| 155 | .long exception_none ! 61 /* 9A0 */ | ||
| 156 | .long exception_none ! 62 | ||
| 157 | .long exception_none ! 63 | ||
| 158 | .long exception_none ! 64 /* A00 */ | ||
| 159 | .long exception_none ! 65 | ||
| 160 | .long exception_none ! 66 | ||
| 161 | .long exception_none ! 67 | ||
| 162 | .long exception_none ! 68 | ||
| 163 | .long exception_none ! 69 | ||
| 164 | .long exception_none ! 70 | ||
| 165 | .long exception_none ! 71 | ||
| 166 | .long exception_none ! 72 /* B00 */ | ||
| 167 | .long exception_none ! 73 | ||
| 168 | .long exception_none ! 74 | ||
| 169 | .long exception_none ! 75 | ||
| 170 | .long do_IRQ ! 76 DMAC2 dei4 /* B80 */ | ||
| 171 | .long do_IRQ ! 77 DMAC2 dei5 | ||
| 172 | .long exception_none ! 78 | ||
| 173 | .long do_IRQ ! 79 IPSEC ipseci /* BE0 */ | ||
| 174 | .long do_IRQ ! 80 EDMAC eint0 /* C00 */ | ||
| 175 | .long do_IRQ ! 81 EDMAC eint1 | ||
| 176 | .long do_IRQ ! 82 EDMAC eint2 | ||
| 177 | .long exception_none ! 83 /* C60 */ | ||
| 178 | .long exception_none ! 84 | ||
| 179 | .long exception_none ! 85 | ||
| 180 | .long exception_none ! 86 | ||
| 181 | .long exception_none ! 87 | ||
| 182 | .long exception_none ! 88 /* D00 */ | ||
| 183 | .long exception_none ! 89 | ||
| 184 | .long exception_none ! 90 | ||
| 185 | .long exception_none ! 91 | ||
| 186 | .long exception_none ! 92 | ||
| 187 | .long exception_none ! 93 | ||
| 188 | .long exception_none ! 94 | ||
| 189 | .long exception_none ! 95 | ||
| 190 | .long do_IRQ ! 96 SIOF eri0 /* E00 */ | ||
| 191 | .long do_IRQ ! 97 txi0 | ||
| 192 | .long do_IRQ ! 98 rxi0 | ||
| 193 | .long do_IRQ ! 99 cci0 | ||
| 194 | .long do_IRQ ! 100 eri1 /* E80 */ | ||
| 195 | .long do_IRQ ! 101 txi1 | ||
| 196 | .long do_IRQ ! 102 rxi2 | ||
| 197 | .long do_IRQ ! 103 cci3 | ||
| 198 | #endif | ||
| 199 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
| 200 | .long do_IRQ ! 64 | ||
| 201 | .long do_IRQ ! 65 | ||
| 202 | .long do_IRQ ! 66 | ||
| 203 | .long do_IRQ ! 67 | ||
| 204 | .long do_IRQ ! 68 | ||
| 205 | .long do_IRQ ! 69 | ||
| 206 | .long do_IRQ ! 70 | ||
| 207 | .long do_IRQ ! 71 | ||
| 208 | .long do_IRQ ! 72 | ||
| 209 | .long do_IRQ ! 73 | ||
| 210 | .long do_IRQ ! 74 | ||
| 211 | .long do_IRQ ! 75 | ||
| 212 | .long do_IRQ ! 76 | ||
| 213 | .long do_IRQ ! 77 | ||
| 214 | .long do_IRQ ! 78 | ||
| 215 | .long do_IRQ ! 79 | ||
| 216 | .long do_IRQ ! 80 SCIF0(SH7300) | ||
| 217 | .long do_IRQ ! 81 | ||
| 218 | .long do_IRQ ! 82 | ||
| 219 | .long do_IRQ ! 83 | ||
| 220 | .long do_IRQ ! 84 | ||
| 221 | .long do_IRQ ! 85 | ||
| 222 | .long do_IRQ ! 86 | ||
| 223 | .long do_IRQ ! 87 | ||
| 224 | .long do_IRQ ! 88 | ||
| 225 | .long do_IRQ ! 89 | ||
| 226 | .long do_IRQ ! 90 | ||
| 227 | .long do_IRQ ! 91 | ||
| 228 | .long do_IRQ ! 92 | ||
| 229 | .long do_IRQ ! 93 | ||
| 230 | .long do_IRQ ! 94 | ||
| 231 | .long do_IRQ ! 95 | ||
| 232 | .long do_IRQ ! 96 | ||
| 233 | .long do_IRQ ! 97 | ||
| 234 | .long do_IRQ ! 98 | ||
| 235 | .long do_IRQ ! 99 | ||
| 236 | .long do_IRQ ! 100 | ||
| 237 | .long do_IRQ ! 101 | ||
| 238 | .long do_IRQ ! 102 | ||
| 239 | .long do_IRQ ! 103 | ||
| 240 | .long do_IRQ ! 104 | ||
| 241 | .long do_IRQ ! 105 | ||
| 242 | .long do_IRQ ! 106 | ||
| 243 | .long do_IRQ ! 107 | ||
| 244 | .long do_IRQ ! 108 | ||
| 245 | #endif | ||
| 246 | #endif | ||
diff --git a/arch/sh/kernel/cpu/sh4/ex.S b/arch/sh/kernel/cpu/sh4/ex.S index 7146893a6cca..ac8ab57413cc 100644 --- a/arch/sh/kernel/cpu/sh4/ex.S +++ b/arch/sh/kernel/cpu/sh4/ex.S | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * The SH-4 exception vector table. | 4 | * The SH-4 exception vector table. |
| 5 | 5 | ||
| 6 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka | 6 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka |
| 7 | * Copyright (C) 2003 Paul Mundt | 7 | * Copyright (C) 2003 - 2006 Paul Mundt |
| 8 | * | 8 | * |
| 9 | * This file is subject to the terms and conditions of the GNU General Public | 9 | * This file is subject to the terms and conditions of the GNU General Public |
| 10 | * License. See the file "COPYING" in the main directory of this archive | 10 | * License. See the file "COPYING" in the main directory of this archive |
| @@ -53,503 +53,10 @@ ENTRY(nmi_slot) | |||
| 53 | #endif | 53 | #endif |
| 54 | ENTRY(user_break_point_trap) | 54 | ENTRY(user_break_point_trap) |
| 55 | .long break_point_trap /* 1E0 */ | 55 | .long break_point_trap /* 1E0 */ |
| 56 | ENTRY(interrupt_table) | ||
| 57 | ! external hardware | ||
| 58 | .long do_IRQ ! 0000 /* 200 */ | ||
| 59 | .long do_IRQ ! 0001 | ||
| 60 | .long do_IRQ ! 0010 | ||
| 61 | .long do_IRQ ! 0011 | ||
| 62 | .long do_IRQ ! 0100 | ||
| 63 | .long do_IRQ ! 0101 | ||
| 64 | .long do_IRQ ! 0110 | ||
| 65 | .long do_IRQ ! 0111 | ||
| 66 | .long do_IRQ ! 1000 /* 300 */ | ||
| 67 | .long do_IRQ ! 1001 | ||
| 68 | .long do_IRQ ! 1010 | ||
| 69 | .long do_IRQ ! 1011 | ||
| 70 | .long do_IRQ ! 1100 | ||
| 71 | .long do_IRQ ! 1101 | ||
| 72 | .long do_IRQ ! 1110 | ||
| 73 | .long exception_error | ||
| 74 | ! Internal hardware | ||
| 75 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | ||
| 76 | .long do_IRQ ! TMU0 tuni0 /* 400 */ | ||
| 77 | .long do_IRQ ! TMU1 tuni1 | ||
| 78 | .long do_IRQ ! TMU2 tuni2 | ||
| 79 | .long do_IRQ ! ticpi2 | ||
| 80 | #if defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
| 81 | .long exception_error | ||
| 82 | .long exception_error | ||
| 83 | .long exception_error | ||
| 84 | .long exception_error | ||
| 85 | .long exception_error /* 500 */ | ||
| 86 | .long exception_error | ||
| 87 | .long exception_error | ||
| 88 | #else | ||
| 89 | .long do_IRQ ! RTC ati | ||
| 90 | .long do_IRQ ! pri | ||
| 91 | .long do_IRQ ! cui | ||
| 92 | .long do_IRQ ! SCI eri | ||
| 93 | .long do_IRQ ! rxi /* 500 */ | ||
| 94 | .long do_IRQ ! txi | ||
| 95 | .long do_IRQ ! tei | ||
| 96 | #endif | ||
| 97 | .long do_IRQ ! WDT iti /* 560 */ | ||
| 98 | .long do_IRQ ! REF rcmi | ||
| 99 | .long do_IRQ ! rovi | ||
| 100 | .long do_IRQ | ||
| 101 | .long do_IRQ /* 5E0 */ | ||
| 102 | .long do_IRQ ! 32 Hitachi UDI /* 600 */ | ||
| 103 | .long do_IRQ ! 33 GPIO | ||
| 104 | .long do_IRQ ! 34 DMAC dmte0 | ||
| 105 | .long do_IRQ ! 35 dmte1 | ||
| 106 | .long do_IRQ ! 36 dmte2 | ||
| 107 | .long do_IRQ ! 37 dmte3 | ||
| 108 | .long do_IRQ ! 38 dmae | ||
| 109 | .long exception_error ! 39 /* 6E0 */ | ||
| 110 | #if defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
| 111 | .long exception_error /* 700 */ | ||
| 112 | .long exception_error | ||
| 113 | .long exception_error | ||
| 114 | .long exception_error /* 760 */ | ||
| 115 | #else | ||
| 116 | .long do_IRQ ! 40 SCIF eri /* 700 */ | ||
| 117 | .long do_IRQ ! 41 rxi | ||
| 118 | .long do_IRQ ! 42 bri | ||
| 119 | .long do_IRQ ! 43 txi | ||
| 120 | #endif | ||
| 121 | #if CONFIG_NR_ONCHIP_DMA_CHANNELS == 8 | ||
| 122 | .long do_IRQ ! 44 DMAC dmte4 /* 780 */ | ||
| 123 | .long do_IRQ ! 45 dmte5 | ||
| 124 | .long do_IRQ ! 46 dmte6 | ||
| 125 | .long do_IRQ ! 47 dmte7 /* 7E0 */ | ||
| 126 | #elif defined(CONFIG_CPU_SUBTYPE_SH7343) | ||
| 127 | .long do_IRQ ! 44 IIC1 ali /* 780 */ | ||
| 128 | .long do_IRQ ! 45 tacki | ||
| 129 | .long do_IRQ ! 46 waiti | ||
| 130 | .long do_IRQ ! 47 dtei /* 7E0 */ | ||
| 131 | .long do_IRQ ! 48 DMAC dei0 /* 800 */ | ||
| 132 | .long do_IRQ ! 49 dei1 /* 820 */ | ||
| 133 | #else | ||
| 134 | .long exception_error ! 44 /* 780 */ | ||
| 135 | .long exception_error ! 45 | ||
| 136 | .long exception_error ! 46 | ||
| 137 | .long exception_error ! 47 | ||
| 138 | #endif | ||
| 139 | #if defined(CONFIG_SH_FPU) | ||
| 140 | .long do_fpu_state_restore ! 48 /* 800 */ | ||
| 141 | .long do_fpu_state_restore ! 49 /* 820 */ | ||
| 142 | #elif !defined(CONFIG_CPU_SUBTYPE_SH7343) && \ | ||
| 143 | !defined(CONFIG_CPU_SUBTYPE_SH73180) | ||
| 144 | .long exception_error | ||
| 145 | .long exception_error | ||
| 146 | #endif | ||
| 147 | #if defined(CONFIG_CPU_SUBTYPE_SH7751) | ||
| 148 | .long exception_error /* 840 */ | ||
| 149 | .long exception_error | ||
| 150 | .long exception_error | ||
| 151 | .long exception_error | ||
| 152 | .long exception_error | ||
| 153 | .long exception_error | ||
| 154 | .long exception_error /* 900 */ | ||
| 155 | .long exception_error | ||
| 156 | .long exception_error | ||
| 157 | .long exception_error | ||
| 158 | .long exception_error | ||
| 159 | .long exception_error | ||
| 160 | .long exception_error | ||
| 161 | .long exception_error | ||
| 162 | .long do_IRQ ! PCI serr /* A00 */ | ||
| 163 | .long do_IRQ ! dma3 | ||
| 164 | .long do_IRQ ! dma2 | ||
| 165 | .long do_IRQ ! dma1 | ||
| 166 | .long do_IRQ ! dma0 | ||
| 167 | .long do_IRQ ! pwon | ||
| 168 | .long do_IRQ ! pwdwn | ||
| 169 | .long do_IRQ ! err | ||
| 170 | .long do_IRQ ! TMU3 tuni3 /* B00 */ | ||
| 171 | .long exception_error | ||
| 172 | .long exception_error | ||
| 173 | .long exception_error | ||
| 174 | .long do_IRQ ! TMU4 tuni4 /* B80 */ | ||
| 175 | #elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
| 176 | .long do_IRQ ! IRQ irq6 /* 840 */ | ||
| 177 | .long do_IRQ ! irq7 | ||
| 178 | .long do_IRQ ! SCIF eri0 | ||
| 179 | .long do_IRQ ! rxi0 | ||
| 180 | .long do_IRQ ! bri0 | ||
| 181 | .long do_IRQ ! txi0 | ||
| 182 | .long do_IRQ ! HCAN2 cani0 /* 900 */ | ||
| 183 | .long do_IRQ ! cani1 | ||
| 184 | .long do_IRQ ! SSI ssii0 | ||
| 185 | .long do_IRQ ! ssii1 | ||
| 186 | .long do_IRQ ! HAC haci0 | ||
| 187 | .long do_IRQ ! haci1 | ||
| 188 | .long do_IRQ ! IIC iici0 | ||
| 189 | .long do_IRQ ! iici1 | ||
| 190 | .long do_IRQ ! USB usbi /* A00 */ | ||
| 191 | .long do_IRQ ! LCDC vint | ||
| 192 | .long exception_error | ||
| 193 | .long exception_error | ||
| 194 | .long do_IRQ ! DMABRG dmabrgi0 | ||
| 195 | .long do_IRQ ! dmabrgi1 | ||
| 196 | .long do_IRQ ! dmabrgi2 | ||
| 197 | .long exception_error | ||
| 198 | .long do_IRQ ! SCIF eri1 /* B00 */ | ||
| 199 | .long do_IRQ ! rxi1 | ||
| 200 | .long do_IRQ ! bri1 | ||
| 201 | .long do_IRQ ! txi1 | ||
| 202 | .long do_IRQ ! eri2 | ||
| 203 | .long do_IRQ ! rxi2 | ||
| 204 | .long do_IRQ ! bri2 | ||
| 205 | .long do_IRQ ! txi2 | ||
| 206 | .long do_IRQ ! SIM simeri /* C00 */ | ||
| 207 | .long do_IRQ ! simrxi | ||
| 208 | .long do_IRQ ! simtxi | ||
| 209 | .long do_IRQ ! simtei | ||
| 210 | .long do_IRQ ! HSPI spii | ||
| 211 | .long exception_error | ||
| 212 | .long exception_error | ||
| 213 | .long exception_error | ||
| 214 | .long do_IRQ ! MMCIF mmci0 /* D00 */ | ||
| 215 | .long do_IRQ ! mmci1 | ||
| 216 | .long do_IRQ ! mmci2 | ||
| 217 | .long do_IRQ ! mmci3 | ||
| 218 | .long exception_error | ||
| 219 | .long exception_error | ||
| 220 | .long exception_error | ||
| 221 | .long exception_error | ||
| 222 | .long exception_error /* E00 */ | ||
| 223 | .long exception_error | ||
| 224 | .long exception_error | ||
| 225 | .long exception_error | ||
| 226 | .long do_IRQ ! MFI mfii | ||
| 227 | .long exception_error | ||
| 228 | .long exception_error | ||
| 229 | .long exception_error | ||
| 230 | .long exception_error /* F00 */ | ||
| 231 | .long exception_error | ||
| 232 | .long exception_error | ||
| 233 | .long exception_error | ||
| 234 | .long do_IRQ ! ADC adi | ||
| 235 | .long do_IRQ ! CMT cmti /* FA0 */ | ||
| 236 | #elif defined(CONFIG_CPU_SUBTYPE_SH73180) || defined(CONFIG_CPU_SUBTYPE_SH7343) | ||
| 237 | .long do_IRQ ! 50 0x840 | ||
| 238 | .long do_IRQ ! 51 0x860 | ||
| 239 | .long do_IRQ ! 52 0x880 | ||
| 240 | .long do_IRQ ! 53 0x8a0 | ||
| 241 | .long do_IRQ ! 54 0x8c0 | ||
| 242 | .long do_IRQ ! 55 0x8e0 | ||
| 243 | .long do_IRQ ! 56 0x900 | ||
| 244 | .long do_IRQ ! 57 0x920 | ||
| 245 | .long do_IRQ ! 58 0x940 | ||
| 246 | .long do_IRQ ! 59 0x960 | ||
| 247 | .long do_IRQ ! 60 0x980 | ||
| 248 | .long do_IRQ ! 61 0x9a0 | ||
| 249 | .long do_IRQ ! 62 0x9c0 | ||
| 250 | .long do_IRQ ! 63 0x9e0 | ||
| 251 | .long do_IRQ ! 64 0xa00 | ||
| 252 | .long do_IRQ ! 65 0xa20 | ||
| 253 | .long do_IRQ ! 66 0xa40 | ||
| 254 | .long do_IRQ ! 67 0xa60 | ||
| 255 | .long do_IRQ ! 68 0xa80 | ||
| 256 | .long do_IRQ ! 69 0xaa0 | ||
| 257 | .long do_IRQ ! 70 0xac0 | ||
| 258 | .long do_IRQ ! 71 0xae0 | ||
| 259 | .long do_IRQ ! 72 0xb00 | ||
| 260 | .long do_IRQ ! 73 0xb20 | ||
| 261 | .long do_IRQ ! 74 0xb40 | ||
| 262 | .long do_IRQ ! 75 0xb60 | ||
| 263 | .long do_IRQ ! 76 0xb80 | ||
| 264 | .long do_IRQ ! 77 0xba0 | ||
| 265 | .long do_IRQ ! 78 0xbc0 | ||
| 266 | .long do_IRQ ! 79 0xbe0 | ||
| 267 | .long do_IRQ ! 80 0xc00 | ||
| 268 | .long do_IRQ ! 81 0xc20 | ||
| 269 | .long do_IRQ ! 82 0xc40 | ||
| 270 | .long do_IRQ ! 83 0xc60 | ||
| 271 | .long do_IRQ ! 84 0xc80 | ||
| 272 | .long do_IRQ ! 85 0xca0 | ||
| 273 | .long do_IRQ ! 86 0xcc0 | ||
| 274 | .long do_IRQ ! 87 0xce0 | ||
| 275 | .long do_IRQ ! 88 0xd00 | ||
| 276 | .long do_IRQ ! 89 0xd20 | ||
| 277 | .long do_IRQ ! 90 0xd40 | ||
| 278 | .long do_IRQ ! 91 0xd60 | ||
| 279 | .long do_IRQ ! 92 0xd80 | ||
| 280 | .long do_IRQ ! 93 0xda0 | ||
| 281 | .long do_IRQ ! 94 0xdc0 | ||
| 282 | .long do_IRQ ! 95 0xde0 | ||
| 283 | .long do_IRQ ! 96 0xe00 | ||
| 284 | .long do_IRQ ! 97 0xe20 | ||
| 285 | .long do_IRQ ! 98 0xe40 | ||
| 286 | .long do_IRQ ! 99 0xe60 | ||
| 287 | .long do_IRQ ! 100 0xe80 | ||
| 288 | .long do_IRQ ! 101 0xea0 | ||
| 289 | .long do_IRQ ! 102 0xec0 | ||
| 290 | .long do_IRQ ! 103 0xee0 | ||
| 291 | .long do_IRQ ! 104 0xf00 | ||
| 292 | .long do_IRQ ! 105 0xf20 | ||
| 293 | .long do_IRQ ! 106 0xf40 | ||
| 294 | .long do_IRQ ! 107 0xf60 | ||
| 295 | .long do_IRQ ! 108 0xf80 | ||
| 296 | #elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
| 297 | .long exception_error ! 50 0x840 | ||
| 298 | .long exception_error ! 51 0x860 | ||
| 299 | .long exception_error ! 52 0x880 | ||
| 300 | .long exception_error ! 53 0x8a0 | ||
| 301 | .long exception_error ! 54 0x8c0 | ||
| 302 | .long exception_error ! 55 0x8e0 | ||
| 303 | .long exception_error ! 56 0x900 | ||
| 304 | .long exception_error ! 57 0x920 | ||
| 305 | .long exception_error ! 58 0x940 | ||
| 306 | .long exception_error ! 59 0x960 | ||
| 307 | .long exception_error ! 60 0x980 | ||
| 308 | .long exception_error ! 61 0x9a0 | ||
| 309 | .long exception_error ! 62 0x9c0 | ||
| 310 | .long exception_error ! 63 0x9e0 | ||
| 311 | .long do_IRQ ! 64 0xa00 PCI serr | ||
| 312 | .long do_IRQ ! 65 0xa20 err | ||
| 313 | .long do_IRQ ! 66 0xa40 ad | ||
| 314 | .long do_IRQ ! 67 0xa60 pwr_dwn | ||
| 315 | .long exception_error ! 68 0xa80 | ||
| 316 | .long exception_error ! 69 0xaa0 | ||
| 317 | .long exception_error ! 70 0xac0 | ||
| 318 | .long exception_error ! 71 0xae0 | ||
| 319 | .long do_IRQ ! 72 0xb00 DMA INT0 | ||
| 320 | .long do_IRQ ! 73 0xb20 INT1 | ||
| 321 | .long do_IRQ ! 74 0xb40 INT2 | ||
| 322 | .long do_IRQ ! 75 0xb60 INT3 | ||
| 323 | .long do_IRQ ! 76 0xb80 INT4 | ||
| 324 | .long exception_error ! 77 0xba0 | ||
| 325 | .long do_IRQ ! 78 0xbc0 DMA ERR | ||
| 326 | .long exception_error ! 79 0xbe0 | ||
| 327 | .long do_IRQ ! 80 0xc00 PIO0 | ||
| 328 | .long do_IRQ ! 81 0xc20 PIO1 | ||
| 329 | .long do_IRQ ! 82 0xc40 PIO2 | ||
| 330 | .long exception_error ! 83 0xc60 | ||
| 331 | .long exception_error ! 84 0xc80 | ||
| 332 | .long exception_error ! 85 0xca0 | ||
| 333 | .long exception_error ! 86 0xcc0 | ||
| 334 | .long exception_error ! 87 0xce0 | ||
| 335 | .long exception_error ! 88 0xd00 | ||
| 336 | .long exception_error ! 89 0xd20 | ||
| 337 | .long exception_error ! 90 0xd40 | ||
| 338 | .long exception_error ! 91 0xd60 | ||
| 339 | .long exception_error ! 92 0xd80 | ||
| 340 | .long exception_error ! 93 0xda0 | ||
| 341 | .long exception_error ! 94 0xdc0 | ||
| 342 | .long exception_error ! 95 0xde0 | ||
| 343 | .long exception_error ! 96 0xe00 | ||
| 344 | .long exception_error ! 97 0xe20 | ||
| 345 | .long exception_error ! 98 0xe40 | ||
| 346 | .long exception_error ! 99 0xe60 | ||
| 347 | .long exception_error ! 100 0xe80 | ||
| 348 | .long exception_error ! 101 0xea0 | ||
| 349 | .long exception_error ! 102 0xec0 | ||
| 350 | .long exception_error ! 103 0xee0 | ||
| 351 | .long exception_error ! 104 0xf00 | ||
| 352 | .long exception_error ! 105 0xf20 | ||
| 353 | .long exception_error ! 106 0xf40 | ||
| 354 | .long exception_error ! 107 0xf60 | ||
| 355 | .long exception_error ! 108 0xf80 | ||
| 356 | .long exception_error ! 109 0xfa0 | ||
| 357 | .long exception_error ! 110 0xfc0 | ||
| 358 | .long exception_error ! 111 0xfe0 | ||
| 359 | .long do_IRQ ! 112 0x1000 Mailbox | ||
| 360 | .long exception_error ! 113 0x1020 | ||
| 361 | .long exception_error ! 114 0x1040 | ||
| 362 | .long exception_error ! 115 0x1060 | ||
| 363 | .long exception_error ! 116 0x1080 | ||
| 364 | .long exception_error ! 117 0x10a0 | ||
| 365 | .long exception_error ! 118 0x10c0 | ||
| 366 | .long exception_error ! 119 0x10e0 | ||
| 367 | .long exception_error ! 120 0x1100 | ||
| 368 | .long exception_error ! 121 0x1120 | ||
| 369 | .long exception_error ! 122 0x1140 | ||
| 370 | .long exception_error ! 123 0x1160 | ||
| 371 | .long exception_error ! 124 0x1180 | ||
| 372 | .long exception_error ! 125 0x11a0 | ||
| 373 | .long exception_error ! 126 0x11c0 | ||
| 374 | .long exception_error ! 127 0x11e0 | ||
| 375 | .long exception_error ! 128 0x1200 | ||
| 376 | .long exception_error ! 129 0x1220 | ||
| 377 | .long exception_error ! 130 0x1240 | ||
| 378 | .long exception_error ! 131 0x1260 | ||
| 379 | .long exception_error ! 132 0x1280 | ||
| 380 | .long exception_error ! 133 0x12a0 | ||
| 381 | .long exception_error ! 134 0x12c0 | ||
| 382 | .long exception_error ! 135 0x12e0 | ||
| 383 | .long exception_error ! 136 0x1300 | ||
| 384 | .long exception_error ! 137 0x1320 | ||
| 385 | .long exception_error ! 138 0x1340 | ||
| 386 | .long exception_error ! 139 0x1360 | ||
| 387 | .long do_IRQ ! 140 0x1380 EMPI INV_ADDR | ||
| 388 | .long exception_error ! 141 0x13a0 | ||
| 389 | .long exception_error ! 142 0x13c0 | ||
| 390 | .long exception_error ! 143 0x13e0 | ||
| 391 | #elif defined(CONFIG_CPU_SUBTYPE_SH7770) | ||
| 392 | .long do_IRQ ! 50 0x840 | ||
| 393 | .long do_IRQ ! 51 0x860 | ||
| 394 | .long do_IRQ ! 52 0x880 | ||
| 395 | .long do_IRQ ! 53 0x8a0 | ||
| 396 | .long do_IRQ ! 54 0x8c0 | ||
| 397 | .long do_IRQ ! 55 0x8e0 | ||
| 398 | .long do_IRQ ! 56 0x900 | ||
| 399 | .long do_IRQ ! 57 0x920 | ||
| 400 | .long do_IRQ ! 58 0x940 | ||
| 401 | .long do_IRQ ! 59 0x960 | ||
| 402 | .long do_IRQ ! 60 0x980 | ||
| 403 | .long do_IRQ ! 61 0x9a0 | ||
| 404 | .long do_IRQ ! 62 0x9c0 | ||
| 405 | .long do_IRQ ! 63 0x9e0 | ||
| 406 | .long do_IRQ ! 64 0xa00 | ||
| 407 | .long do_IRQ ! 65 0xa20 | ||
| 408 | .long do_IRQ ! 66 0xa4d | ||
| 409 | .long do_IRQ ! 67 0xa60 | ||
| 410 | .long do_IRQ ! 68 0xa80 | ||
| 411 | .long do_IRQ ! 69 0xaa0 | ||
| 412 | .long do_IRQ ! 70 0xac0 | ||
| 413 | .long do_IRQ ! 71 0xae0 | ||
| 414 | .long do_IRQ ! 72 0xb00 | ||
| 415 | .long do_IRQ ! 73 0xb20 | ||
| 416 | .long do_IRQ ! 74 0xb40 | ||
| 417 | .long do_IRQ ! 75 0xb60 | ||
| 418 | .long do_IRQ ! 76 0xb80 | ||
| 419 | .long do_IRQ ! 77 0xba0 | ||
| 420 | .long do_IRQ ! 78 0xbc0 | ||
| 421 | .long do_IRQ ! 79 0xbe0 | ||
| 422 | .long do_IRQ ! 80 0xc00 | ||
| 423 | .long do_IRQ ! 81 0xc20 | ||
| 424 | .long do_IRQ ! 82 0xc40 | ||
| 425 | .long do_IRQ ! 83 0xc60 | ||
| 426 | .long do_IRQ ! 84 0xc80 | ||
| 427 | .long do_IRQ ! 85 0xca0 | ||
| 428 | .long do_IRQ ! 86 0xcc0 | ||
| 429 | .long do_IRQ ! 87 0xce0 | ||
| 430 | .long do_IRQ ! 88 0xd00 | ||
| 431 | .long do_IRQ ! 89 0xd20 | ||
| 432 | .long do_IRQ ! 90 0xd40 | ||
| 433 | .long do_IRQ ! 91 0xd60 | ||
| 434 | .long do_IRQ ! 92 0xd80 | ||
| 435 | .long do_IRQ ! 93 0xda0 | ||
| 436 | .long do_IRQ ! 94 0xdc0 | ||
| 437 | .long do_IRQ ! 95 0xde0 | ||
| 438 | .long do_IRQ ! 96 0xe00 | ||
| 439 | .long do_IRQ ! 97 0xe20 | ||
| 440 | .long do_IRQ ! 98 0xe40 | ||
| 441 | .long do_IRQ ! 99 0xe60 | ||
| 442 | .long do_IRQ ! 100 0xe80 | ||
| 443 | .long do_IRQ ! 101 0xea0 | ||
| 444 | .long do_IRQ ! 102 0xec0 | ||
| 445 | .long do_IRQ ! 103 0xee0 | ||
| 446 | .long do_IRQ ! 104 0xf00 | ||
| 447 | .long do_IRQ ! 105 0xf20 | ||
| 448 | .long do_IRQ ! 106 0xf40 | ||
| 449 | .long do_IRQ ! 107 0xf60 | ||
| 450 | .long do_IRQ ! 108 0xf80 | ||
| 451 | #endif | ||
| 452 | #else | ||
| 453 | .long exception_error /* 400 */ | ||
| 454 | .long exception_error | ||
| 455 | .long exception_error | ||
| 456 | .long exception_error | ||
| 457 | .long do_IRQ ! RTC ati | ||
| 458 | .long do_IRQ ! pri | ||
| 459 | .long do_IRQ ! cui | ||
| 460 | .long exception_error | ||
| 461 | .long exception_error /* 500 */ | ||
| 462 | .long exception_error | ||
| 463 | .long exception_error | ||
| 464 | .long do_IRQ ! WDT iti /* 560 */ | ||
| 465 | .long do_IRQ ! TMU-ch0 | ||
| 466 | .long do_IRQ ! TMU-ch1 | ||
| 467 | .long do_IRQ ! TMU-ch2 | ||
| 468 | .long do_IRQ ! ticpi2 /* 5E0 */ | ||
| 469 | .long do_IRQ ! 32 Hitachi UDI /* 600 */ | ||
| 470 | .long exception_error | ||
| 471 | .long do_IRQ ! 34 DMAC dmte0 | ||
| 472 | .long do_IRQ ! 35 dmte1 | ||
| 473 | .long do_IRQ ! 36 dmte2 | ||
| 474 | .long do_IRQ ! 37 dmte3 | ||
| 475 | .long do_IRQ ! 38 dmae | ||
| 476 | .long exception_error ! 39 /* 6E0 */ | ||
| 477 | .long do_IRQ ! 40 SCIF-ch0 eri /* 700 */ | ||
| 478 | .long do_IRQ ! 41 rxi | ||
| 479 | .long do_IRQ ! 42 bri | ||
| 480 | .long do_IRQ ! 43 txi | ||
| 481 | .long do_IRQ ! 44 DMAC dmte4 /* 780 */ | ||
| 482 | .long do_IRQ ! 45 dmte5 | ||
| 483 | .long do_IRQ ! 46 dmte6 | ||
| 484 | .long do_IRQ ! 47 dmte7 /* 7E0 */ | ||
| 485 | #if defined(CONFIG_SH_FPU) | ||
| 486 | .long do_fpu_state_restore ! 48 /* 800 */ | ||
| 487 | .long do_fpu_state_restore ! 49 /* 820 */ | ||
| 488 | #else | ||
| 489 | .long exception_error | ||
| 490 | .long exception_error | ||
| 491 | #endif | ||
| 492 | .long exception_error /* 840 */ | ||
| 493 | .long exception_error | ||
| 494 | .long exception_error | ||
| 495 | .long exception_error | ||
| 496 | .long exception_error | ||
| 497 | .long exception_error | ||
| 498 | .long do_IRQ ! 56 CMT /* 900 */ | ||
| 499 | .long exception_error | ||
| 500 | .long exception_error | ||
| 501 | .long exception_error | ||
| 502 | .long do_IRQ ! 60 HAC | ||
| 503 | .long exception_error | ||
| 504 | .long exception_error | ||
| 505 | .long exception_error | ||
| 506 | .long do_IRQ ! PCI serr /* A00 */ | ||
| 507 | .long do_IRQ ! INTA | ||
| 508 | .long do_IRQ ! INTB | ||
| 509 | .long do_IRQ ! INTC | ||
| 510 | .long do_IRQ ! INTD | ||
| 511 | .long do_IRQ ! err | ||
| 512 | .long do_IRQ ! pwd3 | ||
| 513 | .long do_IRQ ! pwd2 | ||
| 514 | .long do_IRQ ! pwd1 /* B00 */ | ||
| 515 | .long do_IRQ ! pwd0 | ||
| 516 | .long exception_error | ||
| 517 | .long exception_error | ||
| 518 | .long do_IRQ ! SCIF-ch1 eri /* B80 */ | ||
| 519 | .long do_IRQ ! rxi | ||
| 520 | .long do_IRQ ! bri | ||
| 521 | .long do_IRQ ! txi | ||
| 522 | .long do_IRQ ! SIOF /* C00 */ | ||
| 523 | .long exception_error | ||
| 524 | .long exception_error | ||
| 525 | .long exception_error | ||
| 526 | .long do_IRQ ! HSPI /* C80 */ | ||
| 527 | .long exception_error | ||
| 528 | .long exception_error | ||
| 529 | .long exception_error | ||
| 530 | .long do_IRQ ! MMCIF fatat /* D00 */ | ||
| 531 | .long do_IRQ ! tran | ||
| 532 | .long do_IRQ ! err | ||
| 533 | .long do_IRQ ! frdy | ||
| 534 | .long do_IRQ ! DMAC dmint8 /* D80 */ | ||
| 535 | .long do_IRQ ! dmint9 | ||
| 536 | .long do_IRQ ! dmint10 | ||
| 537 | .long do_IRQ ! dmint11 | ||
| 538 | .long do_IRQ ! TMU-ch3 /* E00 */ | ||
| 539 | .long do_IRQ ! TMU-ch4 | ||
| 540 | .long do_IRQ ! TMU-ch5 | ||
| 541 | .long exception_error | ||
| 542 | .long do_IRQ ! SSI | ||
| 543 | .long exception_error | ||
| 544 | .long exception_error | ||
| 545 | .long exception_error | ||
| 546 | .long do_IRQ ! FLCTL flste /* F00 */ | ||
| 547 | .long do_IRQ ! fltend | ||
| 548 | .long do_IRQ ! fltrq0 | ||
| 549 | .long do_IRQ ! fltrq1 | ||
| 550 | .long do_IRQ ! GPIO gpioi0 /* F80 */ | ||
| 551 | .long do_IRQ ! gpioi1 | ||
| 552 | .long do_IRQ ! gpioi2 | ||
| 553 | .long do_IRQ ! gpioi3 | ||
| 554 | #endif | ||
| 555 | 56 | ||
| 57 | /* | ||
| 58 | * Pad the remainder of the table out, exceptions residing in far | ||
| 59 | * away offsets can be manually inserted in to their appropriate | ||
| 60 | * location via set_exception_table_{evt,vec}(). | ||
| 61 | */ | ||
| 62 | .balign 4096,0,4096 | ||
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7760.c b/arch/sh/kernel/cpu/sh4/setup-sh7760.c index 97f1c9af35d6..07e5377bf550 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7760.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7760.c | |||
| @@ -51,3 +51,66 @@ static int __init sh7760_devices_setup(void) | |||
| 51 | ARRAY_SIZE(sh7760_devices)); | 51 | ARRAY_SIZE(sh7760_devices)); |
| 52 | } | 52 | } |
| 53 | __initcall(sh7760_devices_setup); | 53 | __initcall(sh7760_devices_setup); |
| 54 | |||
| 55 | /* | ||
| 56 | * SH7760 INTC2-Style interrupts, vectors IRQ48-111 INTEVT 0x800-0xFE0 | ||
| 57 | */ | ||
| 58 | static struct intc2_data intc2_irq_table[] = { | ||
| 59 | /* INTPRIO0 | INTMSK0 */ | ||
| 60 | {48, 0, 28, 0, 31, 3}, /* IRQ 4 */ | ||
| 61 | {49, 0, 24, 0, 30, 3}, /* IRQ 3 */ | ||
| 62 | {50, 0, 20, 0, 29, 3}, /* IRQ 2 */ | ||
| 63 | {51, 0, 16, 0, 28, 3}, /* IRQ 1 */ | ||
| 64 | /* 52-55 (INTEVT 0x880-0x8E0) unused/reserved */ | ||
| 65 | /* INTPRIO4 | INTMSK0 */ | ||
| 66 | {56, 4, 28, 0, 25, 3}, /* HCAN2_CHAN0 */ | ||
| 67 | {57, 4, 24, 0, 24, 3}, /* HCAN2_CHAN1 */ | ||
| 68 | {58, 4, 20, 0, 23, 3}, /* I2S_CHAN0 */ | ||
| 69 | {59, 4, 16, 0, 22, 3}, /* I2S_CHAN1 */ | ||
| 70 | {60, 4, 12, 0, 21, 3}, /* AC97_CHAN0 */ | ||
| 71 | {61, 4, 8, 0, 20, 3}, /* AC97_CHAN1 */ | ||
| 72 | {62, 4, 4, 0, 19, 3}, /* I2C_CHAN0 */ | ||
| 73 | {63, 4, 0, 0, 18, 3}, /* I2C_CHAN1 */ | ||
| 74 | /* INTPRIO8 | INTMSK0 */ | ||
| 75 | {52, 8, 16, 0, 11, 3}, /* SCIF0_ERI_IRQ */ | ||
| 76 | {53, 8, 16, 0, 10, 3}, /* SCIF0_RXI_IRQ */ | ||
| 77 | {54, 8, 16, 0, 9, 3}, /* SCIF0_BRI_IRQ */ | ||
| 78 | {55, 8, 16, 0, 8, 3}, /* SCIF0_TXI_IRQ */ | ||
| 79 | {64, 8, 28, 0, 17, 3}, /* USBHI_IRQ */ | ||
| 80 | {65, 8, 24, 0, 16, 3}, /* LCDC */ | ||
| 81 | /* 66, 67 unused */ | ||
| 82 | {68, 8, 20, 0, 14, 13}, /* DMABRGI0_IRQ */ | ||
| 83 | {69, 8, 20, 0, 13, 13}, /* DMABRGI1_IRQ */ | ||
| 84 | {70, 8, 20, 0, 12, 13}, /* DMABRGI2_IRQ */ | ||
| 85 | /* 71 unused */ | ||
| 86 | {72, 8, 12, 0, 7, 3}, /* SCIF1_ERI_IRQ */ | ||
| 87 | {73, 8, 12, 0, 6, 3}, /* SCIF1_RXI_IRQ */ | ||
| 88 | {74, 8, 12, 0, 5, 3}, /* SCIF1_BRI_IRQ */ | ||
| 89 | {75, 8, 12, 0, 4, 3}, /* SCIF1_TXI_IRQ */ | ||
| 90 | {76, 8, 8, 0, 3, 3}, /* SCIF2_ERI_IRQ */ | ||
| 91 | {77, 8, 8, 0, 2, 3}, /* SCIF2_RXI_IRQ */ | ||
| 92 | {78, 8, 8, 0, 1, 3}, /* SCIF2_BRI_IRQ */ | ||
| 93 | {79, 8, 8, 0, 0, 3}, /* SCIF2_TXI_IRQ */ | ||
| 94 | /* | INTMSK4 */ | ||
| 95 | {80, 8, 4, 4, 23, 3}, /* SIM_ERI */ | ||
| 96 | {81, 8, 4, 4, 22, 3}, /* SIM_RXI */ | ||
| 97 | {82, 8, 4, 4, 21, 3}, /* SIM_TXI */ | ||
| 98 | {83, 8, 4, 4, 20, 3}, /* SIM_TEI */ | ||
| 99 | {84, 8, 0, 4, 19, 3}, /* HSPII */ | ||
| 100 | /* INTPRIOC | INTMSK4 */ | ||
| 101 | /* 85-87 unused/reserved */ | ||
| 102 | {88, 12, 20, 4, 18, 3}, /* MMCI0 */ | ||
| 103 | {89, 12, 20, 4, 17, 3}, /* MMCI1 */ | ||
| 104 | {90, 12, 20, 4, 16, 3}, /* MMCI2 */ | ||
| 105 | {91, 12, 20, 4, 15, 3}, /* MMCI3 */ | ||
| 106 | {92, 12, 12, 4, 6, 3}, /* MFI (unsure, bug? in my 7760 manual*/ | ||
| 107 | /* 93-107 reserved/undocumented */ | ||
| 108 | {108,12, 4, 4, 1, 3}, /* ADC */ | ||
| 109 | {109,12, 0, 4, 0, 3}, /* CMTI */ | ||
| 110 | /* 110-111 reserved/unused */ | ||
| 111 | }; | ||
| 112 | |||
| 113 | void __init init_IRQ_intc2(void) | ||
| 114 | { | ||
| 115 | make_intc2_irq(intc2_irq_table, ARRAY_SIZE(intc2_irq_table)); | ||
| 116 | } | ||
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7780.c b/arch/sh/kernel/cpu/sh4/setup-sh7780.c index 72493f259edc..814ddb226531 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7780.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7780.c | |||
| @@ -77,3 +77,30 @@ static int __init sh7780_devices_setup(void) | |||
| 77 | ARRAY_SIZE(sh7780_devices)); | 77 | ARRAY_SIZE(sh7780_devices)); |
| 78 | } | 78 | } |
| 79 | __initcall(sh7780_devices_setup); | 79 | __initcall(sh7780_devices_setup); |
| 80 | |||
| 81 | static struct intc2_data intc2_irq_table[] = { | ||
| 82 | { TIMER_IRQ, 0, 24, 0, INTC_TMU0_MSK, 2 }, | ||
| 83 | { 21, 1, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 84 | { 22, 1, 1, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 85 | { 23, 1, 2, 0, INTC_RTC_MSK, TIMER_PRIORITY }, | ||
| 86 | { SCIF0_ERI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 87 | { SCIF0_RXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 88 | { SCIF0_BRI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 89 | { SCIF0_TXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, | ||
| 90 | |||
| 91 | { SCIF1_ERI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | ||
| 92 | { SCIF1_RXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | ||
| 93 | { SCIF1_BRI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | ||
| 94 | { SCIF1_TXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY }, | ||
| 95 | |||
| 96 | { PCIC0_IRQ, 0x10, 8, 0, INTC_PCIC0_MSK, PCIC0_PRIORITY }, | ||
| 97 | { PCIC1_IRQ, 0x10, 0, 0, INTC_PCIC1_MSK, PCIC1_PRIORITY }, | ||
| 98 | { PCIC2_IRQ, 0x14, 24, 0, INTC_PCIC2_MSK, PCIC2_PRIORITY }, | ||
| 99 | { PCIC3_IRQ, 0x14, 16, 0, INTC_PCIC3_MSK, PCIC3_PRIORITY }, | ||
| 100 | { PCIC4_IRQ, 0x14, 8, 0, INTC_PCIC4_MSK, PCIC4_PRIORITY }, | ||
| 101 | }; | ||
| 102 | |||
| 103 | void __init init_IRQ_intc2(void) | ||
| 104 | { | ||
| 105 | make_intc2_irq(intc2_irq_table, ARRAY_SIZE(intc2_irq_table)); | ||
| 106 | } | ||
diff --git a/arch/sh/kernel/entry.S b/arch/sh/kernel/entry.S index 97c571fbcdf1..39aaefb2d83f 100644 --- a/arch/sh/kernel/entry.S +++ b/arch/sh/kernel/entry.S | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | /* $Id: entry.S,v 1.37 2004/06/11 13:02:46 doyu Exp $ | 1 | /* |
| 2 | * | ||
| 3 | * linux/arch/sh/entry.S | 2 | * linux/arch/sh/entry.S |
| 4 | * | 3 | * |
| 5 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka | 4 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka |
| 6 | * Copyright (C) 2003 Paul Mundt | 5 | * Copyright (C) 2003 - 2006 Paul Mundt |
| 7 | * | 6 | * |
| 8 | * This file is subject to the terms and conditions of the GNU General Public | 7 | * This file is subject to the terms and conditions of the GNU General Public |
| 9 | * License. See the file "COPYING" in the main directory of this archive | 8 | * License. See the file "COPYING" in the main directory of this archive |
| @@ -78,7 +77,6 @@ OFF_TRA = (16*4+6*4) | |||
| 78 | #define k3 r3 | 77 | #define k3 r3 |
| 79 | #define k4 r4 | 78 | #define k4 r4 |
| 80 | 79 | ||
| 81 | #define k_ex_code r2_bank /* r2_bank1 */ | ||
| 82 | #define g_imask r6 /* r6_bank1 */ | 80 | #define g_imask r6 /* r6_bank1 */ |
| 83 | #define k_g_imask r6_bank /* r6_bank1 */ | 81 | #define k_g_imask r6_bank /* r6_bank1 */ |
| 84 | #define current r7 /* r7_bank1 */ | 82 | #define current r7 /* r7_bank1 */ |
| @@ -691,7 +689,7 @@ interrupt: | |||
| 691 | 0: | 689 | 0: |
| 692 | #endif /* defined(CONFIG_KGDB_NMI) */ | 690 | #endif /* defined(CONFIG_KGDB_NMI) */ |
| 693 | bra handle_exception | 691 | bra handle_exception |
| 694 | mov.l @k2, k2 | 692 | mov #-1, k2 ! interrupt exception marker |
| 695 | 693 | ||
| 696 | .align 2 | 694 | .align 2 |
| 697 | 1: .long EXPEVT | 695 | 1: .long EXPEVT |
| @@ -717,8 +715,7 @@ ENTRY(handle_exception) | |||
| 717 | add current, k1 | 715 | add current, k1 |
| 718 | mov k1, r15 ! change to kernel stack | 716 | mov k1, r15 ! change to kernel stack |
| 719 | ! | 717 | ! |
| 720 | 1: mov #-1, k4 | 718 | 1: mov.l 2f, k1 |
| 721 | mov.l 2f, k1 | ||
| 722 | ! | 719 | ! |
| 723 | #ifdef CONFIG_SH_DSP | 720 | #ifdef CONFIG_SH_DSP |
| 724 | mov.l r2, @-r15 ! Save r2, we need another reg | 721 | mov.l r2, @-r15 ! Save r2, we need another reg |
| @@ -763,6 +760,8 @@ skip_save: | |||
| 763 | #endif | 760 | #endif |
| 764 | ! Save the user registers on the stack. | 761 | ! Save the user registers on the stack. |
| 765 | mov.l k2, @-r15 ! EXPEVT | 762 | mov.l k2, @-r15 ! EXPEVT |
| 763 | |||
| 764 | mov #-1, k4 | ||
| 766 | mov.l k4, @-r15 ! set TRA (default: -1) | 765 | mov.l k4, @-r15 ! set TRA (default: -1) |
| 767 | ! | 766 | ! |
| 768 | sts.l macl, @-r15 | 767 | sts.l macl, @-r15 |
| @@ -797,8 +796,21 @@ skip_save: | |||
| 797 | mov.l r2, @-r15 | 796 | mov.l r2, @-r15 |
| 798 | mov.l r1, @-r15 | 797 | mov.l r1, @-r15 |
| 799 | mov.l r0, @-r15 | 798 | mov.l r0, @-r15 |
| 800 | ! Then, dispatch to the handler, according to the exception code. | 799 | |
| 801 | stc k_ex_code, r8 | 800 | /* |
| 801 | * This gets a bit tricky.. in the INTEVT case we don't want to use | ||
| 802 | * the VBR offset as a destination in the jump call table, since all | ||
| 803 | * of the destinations are the same. In this case, (interrupt) sets | ||
| 804 | * a marker in r2 (now r2_bank since SR.RB changed), which we check | ||
| 805 | * to determine the exception type. For all other exceptions, we | ||
| 806 | * forcibly read EXPEVT from memory and fix up the jump address, in | ||
| 807 | * the interrupt exception case we jump to do_IRQ() and defer the | ||
| 808 | * INTEVT read until there. As a bonus, we can also clean up the SR.RB | ||
| 809 | * checks that do_IRQ() was doing.. | ||
| 810 | */ | ||
| 811 | stc r2_bank, r8 | ||
| 812 | cmp/pz r8 | ||
| 813 | bf interrupt_exception | ||
| 802 | shlr2 r8 | 814 | shlr2 r8 |
| 803 | shlr r8 | 815 | shlr r8 |
| 804 | mov.l 4f, r9 | 816 | mov.l 4f, r9 |
| @@ -806,6 +818,8 @@ skip_save: | |||
| 806 | mov.l @r9, r9 | 818 | mov.l @r9, r9 |
| 807 | jmp @r9 | 819 | jmp @r9 |
| 808 | nop | 820 | nop |
| 821 | rts | ||
| 822 | nop | ||
| 809 | 823 | ||
| 810 | .align 2 | 824 | .align 2 |
| 811 | 1: .long 0x00001000 ! DSP=1 | 825 | 1: .long 0x00001000 ! DSP=1 |
| @@ -813,8 +827,17 @@ skip_save: | |||
| 813 | 3: .long 0xcfffffff ! RB=0, BL=0 | 827 | 3: .long 0xcfffffff ! RB=0, BL=0 |
| 814 | 4: .long exception_handling_table | 828 | 4: .long exception_handling_table |
| 815 | 829 | ||
| 830 | interrupt_exception: | ||
| 831 | mov.l 1f, r9 | ||
| 832 | jmp @r9 | ||
| 833 | nop | ||
| 834 | rts | ||
| 835 | nop | ||
| 836 | |||
| 837 | .align 2 | ||
| 838 | 1: .long do_IRQ | ||
| 839 | |||
| 816 | .align 2 | 840 | .align 2 |
| 817 | ENTRY(exception_none) | 841 | ENTRY(exception_none) |
| 818 | rts | 842 | rts |
| 819 | nop | 843 | nop |
| 820 | |||
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index c7ebd6aec951..944128ce9706 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
| @@ -11,12 +11,15 @@ | |||
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/kernel_stat.h> | 12 | #include <linux/kernel_stat.h> |
| 13 | #include <linux/seq_file.h> | 13 | #include <linux/seq_file.h> |
| 14 | #include <linux/io.h> | ||
| 14 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
| 15 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
| 16 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
| 17 | #include <asm/thread_info.h> | 18 | #include <asm/thread_info.h> |
| 18 | #include <asm/cpu/mmu_context.h> | 19 | #include <asm/cpu/mmu_context.h> |
| 19 | 20 | ||
| 21 | atomic_t irq_err_count; | ||
| 22 | |||
| 20 | /* | 23 | /* |
| 21 | * 'what should we do if we get a hw irq event on an illegal vector'. | 24 | * 'what should we do if we get a hw irq event on an illegal vector'. |
| 22 | * each architecture has to answer this themselves, it doesn't deserve | 25 | * each architecture has to answer this themselves, it doesn't deserve |
| @@ -24,6 +27,7 @@ | |||
| 24 | */ | 27 | */ |
| 25 | void ack_bad_irq(unsigned int irq) | 28 | void ack_bad_irq(unsigned int irq) |
| 26 | { | 29 | { |
| 30 | atomic_inc(&irq_err_count); | ||
| 27 | printk("unexpected IRQ trap at vector %02x\n", irq); | 31 | printk("unexpected IRQ trap at vector %02x\n", irq); |
| 28 | } | 32 | } |
| 29 | 33 | ||
| @@ -47,8 +51,10 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 47 | if (!action) | 51 | if (!action) |
| 48 | goto unlock; | 52 | goto unlock; |
| 49 | seq_printf(p, "%3d: ",i); | 53 | seq_printf(p, "%3d: ",i); |
| 50 | seq_printf(p, "%10u ", kstat_irqs(i)); | 54 | for_each_online_cpu(j) |
| 51 | seq_printf(p, " %14s", irq_desc[i].chip->typename); | 55 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
| 56 | seq_printf(p, " %14s", irq_desc[i].chip->name); | ||
| 57 | seq_printf(p, "-%-8s", irq_desc[i].name); | ||
| 52 | seq_printf(p, " %s", action->name); | 58 | seq_printf(p, " %s", action->name); |
| 53 | 59 | ||
| 54 | for (action=action->next; action; action = action->next) | 60 | for (action=action->next; action; action = action->next) |
| @@ -56,7 +62,9 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 56 | seq_putc(p, '\n'); | 62 | seq_putc(p, '\n'); |
| 57 | unlock: | 63 | unlock: |
| 58 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 64 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); |
| 59 | } | 65 | } else if (i == NR_IRQS) |
| 66 | seq_printf(p, "Err: %10u\n", atomic_read(&irq_err_count)); | ||
| 67 | |||
| 60 | return 0; | 68 | return 0; |
| 61 | } | 69 | } |
| 62 | #endif | 70 | #endif |
| @@ -78,7 +86,8 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, | |||
| 78 | unsigned long r6, unsigned long r7, | 86 | unsigned long r6, unsigned long r7, |
| 79 | struct pt_regs regs) | 87 | struct pt_regs regs) |
| 80 | { | 88 | { |
| 81 | int irq = r4; | 89 | struct pt_regs *old_regs = set_irq_regs(®s); |
| 90 | int irq; | ||
| 82 | #ifdef CONFIG_4KSTACKS | 91 | #ifdef CONFIG_4KSTACKS |
| 83 | union irq_ctx *curctx, *irqctx; | 92 | union irq_ctx *curctx, *irqctx; |
| 84 | #endif | 93 | #endif |
| @@ -102,20 +111,9 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, | |||
| 102 | #endif | 111 | #endif |
| 103 | 112 | ||
| 104 | #ifdef CONFIG_CPU_HAS_INTEVT | 113 | #ifdef CONFIG_CPU_HAS_INTEVT |
| 105 | __asm__ __volatile__ ( | 114 | irq = (ctrl_inl(INTEVT) >> 5) - 16; |
| 106 | #ifdef CONFIG_CPU_HAS_SR_RB | ||
| 107 | "stc r2_bank, %0\n\t" | ||
| 108 | #else | 115 | #else |
| 109 | "mov.l @%1, %0\n\t" | 116 | irq = r4; |
| 110 | #endif | ||
| 111 | "shlr2 %0\n\t" | ||
| 112 | "shlr2 %0\n\t" | ||
| 113 | "shlr %0\n\t" | ||
| 114 | "add #-16, %0\n\t" | ||
| 115 | : "=z" (irq), "=r" (r4) | ||
| 116 | : "1" (INTEVT) | ||
| 117 | : "memory" | ||
| 118 | ); | ||
| 119 | #endif | 117 | #endif |
| 120 | 118 | ||
| 121 | irq = irq_demux(irq); | 119 | irq = irq_demux(irq); |
| @@ -139,25 +137,25 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, | |||
| 139 | 137 | ||
| 140 | __asm__ __volatile__ ( | 138 | __asm__ __volatile__ ( |
| 141 | "mov %0, r4 \n" | 139 | "mov %0, r4 \n" |
| 142 | "mov %1, r5 \n" | ||
| 143 | "mov r15, r9 \n" | 140 | "mov r15, r9 \n" |
| 144 | "jsr @%2 \n" | 141 | "jsr @%1 \n" |
| 145 | /* swith to the irq stack */ | 142 | /* swith to the irq stack */ |
| 146 | " mov %3, r15 \n" | 143 | " mov %2, r15 \n" |
| 147 | /* restore the stack (ring zero) */ | 144 | /* restore the stack (ring zero) */ |
| 148 | "mov r9, r15 \n" | 145 | "mov r9, r15 \n" |
| 149 | : /* no outputs */ | 146 | : /* no outputs */ |
| 150 | : "r" (irq), "r" (®s), "r" (__do_IRQ), "r" (isp) | 147 | : "r" (irq), "r" (generic_handle_irq), "r" (isp) |
| 151 | /* XXX: A somewhat excessive clobber list? -PFM */ | 148 | /* XXX: A somewhat excessive clobber list? -PFM */ |
| 152 | : "memory", "r0", "r1", "r2", "r3", "r4", | 149 | : "memory", "r0", "r1", "r2", "r3", "r4", |
| 153 | "r5", "r6", "r7", "r8", "t", "pr" | 150 | "r5", "r6", "r7", "r8", "t", "pr" |
| 154 | ); | 151 | ); |
| 155 | } else | 152 | } else |
| 156 | #endif | 153 | #endif |
| 157 | __do_IRQ(irq, ®s); | 154 | generic_handle_irq(irq); |
| 158 | 155 | ||
| 159 | irq_exit(); | 156 | irq_exit(); |
| 160 | 157 | ||
| 158 | set_irq_regs(old_regs); | ||
| 161 | return 1; | 159 | return 1; |
| 162 | } | 160 | } |
| 163 | 161 | ||
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index 0b1d5dd7a93b..a52b13ac6b7f 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | * Copyright (C) 1995 Linus Torvalds | 5 | * Copyright (C) 1995 Linus Torvalds |
| 6 | * | 6 | * |
| 7 | * SuperH version: Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima | 7 | * SuperH version: Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima |
| 8 | * Copyright (C) 2006 Lineo Solutions Inc. support SH4A UBC | ||
| 8 | */ | 9 | */ |
| 9 | 10 | ||
| 10 | /* | 11 | /* |
| @@ -104,7 +105,7 @@ void show_regs(struct pt_regs * regs) | |||
| 104 | { | 105 | { |
| 105 | printk("\n"); | 106 | printk("\n"); |
| 106 | printk("Pid : %d, Comm: %20s\n", current->pid, current->comm); | 107 | printk("Pid : %d, Comm: %20s\n", current->pid, current->comm); |
| 107 | print_symbol("PC is at %s\n", regs->pc); | 108 | print_symbol("PC is at %s\n", instruction_pointer(regs)); |
| 108 | printk("PC : %08lx SP : %08lx SR : %08lx ", | 109 | printk("PC : %08lx SP : %08lx SR : %08lx ", |
| 109 | regs->pc, regs->regs[15], regs->sr); | 110 | regs->pc, regs->regs[15], regs->sr); |
| 110 | #ifdef CONFIG_MMU | 111 | #ifdef CONFIG_MMU |
| @@ -129,15 +130,7 @@ void show_regs(struct pt_regs * regs) | |||
| 129 | printk("MACH: %08lx MACL: %08lx GBR : %08lx PR : %08lx\n", | 130 | printk("MACH: %08lx MACL: %08lx GBR : %08lx PR : %08lx\n", |
| 130 | regs->mach, regs->macl, regs->gbr, regs->pr); | 131 | regs->mach, regs->macl, regs->gbr, regs->pr); |
| 131 | 132 | ||
| 132 | /* | 133 | show_trace(NULL, (unsigned long *)regs->regs[15], regs); |
| 133 | * If we're in kernel mode, dump the stack too.. | ||
| 134 | */ | ||
| 135 | if (!user_mode(regs)) { | ||
| 136 | extern void show_task(unsigned long *sp); | ||
| 137 | unsigned long sp = regs->regs[15]; | ||
| 138 | |||
| 139 | show_task((unsigned long *)sp); | ||
| 140 | } | ||
| 141 | } | 134 | } |
| 142 | 135 | ||
| 143 | /* | 136 | /* |
| @@ -290,6 +283,24 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, | |||
| 290 | static void | 283 | static void |
| 291 | ubc_set_tracing(int asid, unsigned long pc) | 284 | ubc_set_tracing(int asid, unsigned long pc) |
| 292 | { | 285 | { |
| 286 | #if defined(CONFIG_CPU_SH4A) | ||
| 287 | unsigned long val; | ||
| 288 | |||
| 289 | val = (UBC_CBR_ID_INST | UBC_CBR_RW_READ | UBC_CBR_CE); | ||
| 290 | val |= (UBC_CBR_AIE | UBC_CBR_AIV_SET(asid)); | ||
| 291 | |||
| 292 | ctrl_outl(val, UBC_CBR0); | ||
| 293 | ctrl_outl(pc, UBC_CAR0); | ||
| 294 | ctrl_outl(0x0, UBC_CAMR0); | ||
| 295 | ctrl_outl(0x0, UBC_CBCR); | ||
| 296 | |||
| 297 | val = (UBC_CRR_RES | UBC_CRR_PCB | UBC_CRR_BIE); | ||
| 298 | ctrl_outl(val, UBC_CRR0); | ||
| 299 | |||
| 300 | /* Read UBC register that we writed last. For chekking UBC Register changed */ | ||
| 301 | val = ctrl_inl(UBC_CRR0); | ||
| 302 | |||
| 303 | #else /* CONFIG_CPU_SH4A */ | ||
| 293 | ctrl_outl(pc, UBC_BARA); | 304 | ctrl_outl(pc, UBC_BARA); |
| 294 | 305 | ||
| 295 | #ifdef CONFIG_MMU | 306 | #ifdef CONFIG_MMU |
| @@ -307,6 +318,7 @@ ubc_set_tracing(int asid, unsigned long pc) | |||
| 307 | ctrl_outw(BBR_INST | BBR_READ, UBC_BBRA); | 318 | ctrl_outw(BBR_INST | BBR_READ, UBC_BBRA); |
| 308 | ctrl_outw(BRCR_PCBA, UBC_BRCR); | 319 | ctrl_outw(BRCR_PCBA, UBC_BRCR); |
| 309 | } | 320 | } |
| 321 | #endif /* CONFIG_CPU_SH4A */ | ||
| 310 | } | 322 | } |
| 311 | 323 | ||
| 312 | /* | 324 | /* |
| @@ -359,8 +371,13 @@ struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *ne | |||
| 359 | #endif | 371 | #endif |
| 360 | ubc_set_tracing(asid, next->thread.ubc_pc); | 372 | ubc_set_tracing(asid, next->thread.ubc_pc); |
| 361 | } else { | 373 | } else { |
| 374 | #if defined(CONFIG_CPU_SH4A) | ||
| 375 | ctrl_outl(UBC_CBR_INIT, UBC_CBR0); | ||
| 376 | ctrl_outl(UBC_CRR_INIT, UBC_CRR0); | ||
| 377 | #else | ||
| 362 | ctrl_outw(0, UBC_BBRA); | 378 | ctrl_outw(0, UBC_BBRA); |
| 363 | ctrl_outw(0, UBC_BBRB); | 379 | ctrl_outw(0, UBC_BBRB); |
| 380 | #endif | ||
| 364 | } | 381 | } |
| 365 | 382 | ||
| 366 | return prev; | 383 | return prev; |
| @@ -460,8 +477,13 @@ asmlinkage void break_point_trap(unsigned long r4, unsigned long r5, | |||
| 460 | struct pt_regs regs) | 477 | struct pt_regs regs) |
| 461 | { | 478 | { |
| 462 | /* Clear tracing. */ | 479 | /* Clear tracing. */ |
| 480 | #if defined(CONFIG_CPU_SH4A) | ||
| 481 | ctrl_outl(UBC_CBR_INIT, UBC_CBR0); | ||
| 482 | ctrl_outl(UBC_CRR_INIT, UBC_CRR0); | ||
| 483 | #else | ||
| 463 | ctrl_outw(0, UBC_BBRA); | 484 | ctrl_outw(0, UBC_BBRA); |
| 464 | ctrl_outw(0, UBC_BBRB); | 485 | ctrl_outw(0, UBC_BBRB); |
| 486 | #endif | ||
| 465 | current->thread.ubc_pc = 0; | 487 | current->thread.ubc_pc = 0; |
| 466 | ubc_usercnt -= 1; | 488 | ubc_usercnt -= 1; |
| 467 | 489 | ||
diff --git a/arch/sh/kernel/syscalls.S b/arch/sh/kernel/syscalls.S index 768334e95075..ca81976e9e34 100644 --- a/arch/sh/kernel/syscalls.S +++ b/arch/sh/kernel/syscalls.S | |||
| @@ -351,3 +351,6 @@ ENTRY(sys_call_table) | |||
| 351 | .long sys_sync_file_range | 351 | .long sys_sync_file_range |
| 352 | .long sys_tee /* 315 */ | 352 | .long sys_tee /* 315 */ |
| 353 | .long sys_vmsplice | 353 | .long sys_vmsplice |
| 354 | .long sys_move_pages | ||
| 355 | .long sys_getcpu | ||
| 356 | .long sys_epoll_pwait | ||
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c index 450c68f1df05..57e708d7b52d 100644 --- a/arch/sh/kernel/time.c +++ b/arch/sh/kernel/time.c | |||
| @@ -47,6 +47,7 @@ unsigned long long __attribute__ ((weak)) sched_clock(void) | |||
| 47 | return (unsigned long long)jiffies * (1000000000 / HZ); | 47 | return (unsigned long long)jiffies * (1000000000 / HZ); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | #ifndef CONFIG_GENERIC_TIME | ||
| 50 | void do_gettimeofday(struct timeval *tv) | 51 | void do_gettimeofday(struct timeval *tv) |
| 51 | { | 52 | { |
| 52 | unsigned long seq; | 53 | unsigned long seq; |
| @@ -99,6 +100,7 @@ int do_settimeofday(struct timespec *tv) | |||
| 99 | return 0; | 100 | return 0; |
| 100 | } | 101 | } |
| 101 | EXPORT_SYMBOL(do_settimeofday); | 102 | EXPORT_SYMBOL(do_settimeofday); |
| 103 | #endif /* !CONFIG_GENERIC_TIME */ | ||
| 102 | 104 | ||
| 103 | /* last time the RTC clock got updated */ | 105 | /* last time the RTC clock got updated */ |
| 104 | static long last_rtc_update; | 106 | static long last_rtc_update; |
| @@ -107,13 +109,14 @@ static long last_rtc_update; | |||
| 107 | * handle_timer_tick() needs to keep up the real-time clock, | 109 | * handle_timer_tick() needs to keep up the real-time clock, |
| 108 | * as well as call the "do_timer()" routine every clocktick | 110 | * as well as call the "do_timer()" routine every clocktick |
| 109 | */ | 111 | */ |
| 110 | void handle_timer_tick(struct pt_regs *regs) | 112 | void handle_timer_tick(void) |
| 111 | { | 113 | { |
| 112 | do_timer(1); | 114 | do_timer(1); |
| 113 | #ifndef CONFIG_SMP | 115 | #ifndef CONFIG_SMP |
| 114 | update_process_times(user_mode(regs)); | 116 | update_process_times(user_mode(get_irq_regs())); |
| 115 | #endif | 117 | #endif |
| 116 | profile_tick(CPU_PROFILING, regs); | 118 | if (current->pid) |
| 119 | profile_tick(CPU_PROFILING); | ||
| 117 | 120 | ||
| 118 | #ifdef CONFIG_HEARTBEAT | 121 | #ifdef CONFIG_HEARTBEAT |
| 119 | if (sh_mv.mv_heartbeat != NULL) | 122 | if (sh_mv.mv_heartbeat != NULL) |
diff --git a/arch/sh/kernel/timers/timer-tmu.c b/arch/sh/kernel/timers/timer-tmu.c index 205816fcf0da..24927015dc31 100644 --- a/arch/sh/kernel/timers/timer-tmu.c +++ b/arch/sh/kernel/timers/timer-tmu.c | |||
| @@ -80,8 +80,7 @@ static unsigned long tmu_timer_get_offset(void) | |||
| 80 | return count; | 80 | return count; |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | static irqreturn_t tmu_timer_interrupt(int irq, void *dev_id, | 83 | static irqreturn_t tmu_timer_interrupt(int irq, void *dummy) |
| 84 | struct pt_regs *regs) | ||
| 85 | { | 84 | { |
| 86 | unsigned long timer_status; | 85 | unsigned long timer_status; |
| 87 | 86 | ||
| @@ -98,7 +97,7 @@ static irqreturn_t tmu_timer_interrupt(int irq, void *dev_id, | |||
| 98 | * locally disabled. -arca | 97 | * locally disabled. -arca |
| 99 | */ | 98 | */ |
| 100 | write_seqlock(&xtime_lock); | 99 | write_seqlock(&xtime_lock); |
| 101 | handle_timer_tick(regs); | 100 | handle_timer_tick(); |
| 102 | write_sequnlock(&xtime_lock); | 101 | write_sequnlock(&xtime_lock); |
| 103 | 102 | ||
| 104 | return IRQ_HANDLED; | 103 | return IRQ_HANDLED; |
| @@ -111,60 +110,6 @@ static struct irqaction tmu_irq = { | |||
| 111 | .mask = CPU_MASK_NONE, | 110 | .mask = CPU_MASK_NONE, |
| 112 | }; | 111 | }; |
| 113 | 112 | ||
| 114 | /* | ||
| 115 | * Hah! We'll see if this works (switching from usecs to nsecs). | ||
| 116 | */ | ||
| 117 | static unsigned long tmu_timer_get_frequency(void) | ||
| 118 | { | ||
| 119 | u32 freq; | ||
| 120 | struct timespec ts1, ts2; | ||
| 121 | unsigned long diff_nsec; | ||
| 122 | unsigned long factor; | ||
| 123 | |||
| 124 | /* Setup the timer: We don't want to generate interrupts, just | ||
| 125 | * have it count down at its natural rate. | ||
| 126 | */ | ||
| 127 | ctrl_outb(0, TMU_TSTR); | ||
| 128 | #if !defined(CONFIG_CPU_SUBTYPE_SH7300) && !defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
| 129 | ctrl_outb(TMU_TOCR_INIT, TMU_TOCR); | ||
| 130 | #endif | ||
| 131 | ctrl_outw(TMU0_TCR_CALIB, TMU0_TCR); | ||
| 132 | ctrl_outl(0xffffffff, TMU0_TCOR); | ||
| 133 | ctrl_outl(0xffffffff, TMU0_TCNT); | ||
| 134 | |||
| 135 | rtc_sh_get_time(&ts2); | ||
| 136 | |||
| 137 | do { | ||
| 138 | rtc_sh_get_time(&ts1); | ||
| 139 | } while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec); | ||
| 140 | |||
| 141 | /* actually start the timer */ | ||
| 142 | ctrl_outb(TMU_TSTR_INIT, TMU_TSTR); | ||
| 143 | |||
| 144 | do { | ||
| 145 | rtc_sh_get_time(&ts2); | ||
| 146 | } while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec); | ||
| 147 | |||
| 148 | freq = 0xffffffff - ctrl_inl(TMU0_TCNT); | ||
| 149 | if (ts2.tv_nsec < ts1.tv_nsec) { | ||
| 150 | ts2.tv_nsec += 1000000000; | ||
| 151 | ts2.tv_sec--; | ||
| 152 | } | ||
| 153 | |||
| 154 | diff_nsec = (ts2.tv_sec - ts1.tv_sec) * 1000000000 + (ts2.tv_nsec - ts1.tv_nsec); | ||
| 155 | |||
| 156 | /* this should work well if the RTC has a precision of n Hz, where | ||
| 157 | * n is an integer. I don't think we have to worry about the other | ||
| 158 | * cases. */ | ||
| 159 | factor = (1000000000 + diff_nsec/2) / diff_nsec; | ||
| 160 | |||
| 161 | if (factor * diff_nsec > 1100000000 || | ||
| 162 | factor * diff_nsec < 900000000) | ||
| 163 | panic("weird RTC (diff_nsec %ld)", diff_nsec); | ||
| 164 | |||
| 165 | return freq * factor; | ||
| 166 | } | ||
| 167 | |||
| 168 | static void tmu_clk_init(struct clk *clk) | 113 | static void tmu_clk_init(struct clk *clk) |
| 169 | { | 114 | { |
| 170 | u8 divisor = TMU0_TCR_INIT & 0x7; | 115 | u8 divisor = TMU0_TCR_INIT & 0x7; |
| @@ -232,12 +177,12 @@ struct sys_timer_ops tmu_timer_ops = { | |||
| 232 | .init = tmu_timer_init, | 177 | .init = tmu_timer_init, |
| 233 | .start = tmu_timer_start, | 178 | .start = tmu_timer_start, |
| 234 | .stop = tmu_timer_stop, | 179 | .stop = tmu_timer_stop, |
| 235 | .get_frequency = tmu_timer_get_frequency, | 180 | #ifndef CONFIG_GENERIC_TIME |
| 236 | .get_offset = tmu_timer_get_offset, | 181 | .get_offset = tmu_timer_get_offset, |
| 182 | #endif | ||
| 237 | }; | 183 | }; |
| 238 | 184 | ||
| 239 | struct sys_timer tmu_timer = { | 185 | struct sys_timer tmu_timer = { |
| 240 | .name = "tmu", | 186 | .name = "tmu", |
| 241 | .ops = &tmu_timer_ops, | 187 | .ops = &tmu_timer_ops, |
| 242 | }; | 188 | }; |
| 243 | |||
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c index c2c597e09482..53dfa55f3156 100644 --- a/arch/sh/kernel/traps.c +++ b/arch/sh/kernel/traps.c | |||
| @@ -1,38 +1,25 @@ | |||
| 1 | /* $Id: traps.c,v 1.17 2004/05/02 01:46:30 sugioka Exp $ | 1 | /* |
| 2 | * | 2 | * 'traps.c' handles hardware traps and faults after we have saved some |
| 3 | * linux/arch/sh/traps.c | 3 | * state in 'entry.S'. |
| 4 | * | 4 | * |
| 5 | * SuperH version: Copyright (C) 1999 Niibe Yutaka | 5 | * SuperH version: Copyright (C) 1999 Niibe Yutaka |
| 6 | * Copyright (C) 2000 Philipp Rumpf | 6 | * Copyright (C) 2000 Philipp Rumpf |
| 7 | * Copyright (C) 2000 David Howells | 7 | * Copyright (C) 2000 David Howells |
| 8 | * Copyright (C) 2002, 2003 Paul Mundt | 8 | * Copyright (C) 2002 - 2006 Paul Mundt |
| 9 | */ | 9 | * |
| 10 | 10 | * This file is subject to the terms and conditions of the GNU General Public | |
| 11 | /* | 11 | * License. See the file "COPYING" in the main directory of this archive |
| 12 | * 'Traps.c' handles hardware traps and faults after we have saved some | 12 | * for more details. |
| 13 | * state in 'entry.S'. | ||
| 14 | */ | 13 | */ |
| 15 | #include <linux/sched.h> | ||
| 16 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 17 | #include <linux/string.h> | ||
| 18 | #include <linux/errno.h> | ||
| 19 | #include <linux/ptrace.h> | 15 | #include <linux/ptrace.h> |
| 20 | #include <linux/timer.h> | ||
| 21 | #include <linux/mm.h> | ||
| 22 | #include <linux/smp.h> | ||
| 23 | #include <linux/smp_lock.h> | ||
| 24 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 25 | #include <linux/delay.h> | ||
| 26 | #include <linux/spinlock.h> | 17 | #include <linux/spinlock.h> |
| 27 | #include <linux/module.h> | 18 | #include <linux/module.h> |
| 28 | #include <linux/kallsyms.h> | 19 | #include <linux/kallsyms.h> |
| 29 | 20 | #include <linux/io.h> | |
| 30 | #include <asm/system.h> | 21 | #include <asm/system.h> |
| 31 | #include <asm/uaccess.h> | 22 | #include <asm/uaccess.h> |
| 32 | #include <asm/io.h> | ||
| 33 | #include <asm/atomic.h> | ||
| 34 | #include <asm/processor.h> | ||
| 35 | #include <asm/sections.h> | ||
| 36 | 23 | ||
| 37 | #ifdef CONFIG_SH_KGDB | 24 | #ifdef CONFIG_SH_KGDB |
| 38 | #include <asm/kgdb.h> | 25 | #include <asm/kgdb.h> |
| @@ -53,13 +40,32 @@ | |||
| 53 | #define TRAP_ILLEGAL_SLOT_INST 13 | 40 | #define TRAP_ILLEGAL_SLOT_INST 13 |
| 54 | #endif | 41 | #endif |
| 55 | 42 | ||
| 56 | /* | 43 | static void dump_mem(const char *str, unsigned long bottom, unsigned long top) |
| 57 | * These constants are for searching for possible module text | 44 | { |
| 58 | * segments. VMALLOC_OFFSET comes from mm/vmalloc.c; MODULE_RANGE is | 45 | unsigned long p; |
| 59 | * a guess of how much space is likely to be vmalloced. | 46 | int i; |
| 60 | */ | 47 | |
| 61 | #define VMALLOC_OFFSET (8*1024*1024) | 48 | printk("%s(0x%08lx to 0x%08lx)\n", str, bottom, top); |
| 62 | #define MODULE_RANGE (8*1024*1024) | 49 | |
| 50 | for (p = bottom & ~31; p < top; ) { | ||
| 51 | printk("%04lx: ", p & 0xffff); | ||
| 52 | |||
| 53 | for (i = 0; i < 8; i++, p += 4) { | ||
| 54 | unsigned int val; | ||
| 55 | |||
| 56 | if (p < bottom || p >= top) | ||
| 57 | printk(" "); | ||
| 58 | else { | ||
| 59 | if (__get_user(val, (unsigned int __user *)p)) { | ||
| 60 | printk("\n"); | ||
| 61 | return; | ||
| 62 | } | ||
| 63 | printk("%08x ", val); | ||
| 64 | } | ||
| 65 | } | ||
| 66 | printk("\n"); | ||
| 67 | } | ||
| 68 | } | ||
| 63 | 69 | ||
| 64 | DEFINE_SPINLOCK(die_lock); | 70 | DEFINE_SPINLOCK(die_lock); |
| 65 | 71 | ||
| @@ -69,14 +75,28 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 69 | 75 | ||
| 70 | console_verbose(); | 76 | console_verbose(); |
| 71 | spin_lock_irq(&die_lock); | 77 | spin_lock_irq(&die_lock); |
| 78 | bust_spinlocks(1); | ||
| 79 | |||
| 72 | printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); | 80 | printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); |
| 81 | |||
| 73 | CHK_REMOTE_DEBUG(regs); | 82 | CHK_REMOTE_DEBUG(regs); |
| 83 | print_modules(); | ||
| 74 | show_regs(regs); | 84 | show_regs(regs); |
| 85 | |||
| 86 | printk("Process: %s (pid: %d, stack limit = %p)\n", | ||
| 87 | current->comm, current->pid, task_stack_page(current) + 1); | ||
| 88 | |||
| 89 | if (!user_mode(regs) || in_interrupt()) | ||
| 90 | dump_mem("Stack: ", regs->regs[15], THREAD_SIZE + | ||
| 91 | (unsigned long)task_stack_page(current)); | ||
| 92 | |||
| 93 | bust_spinlocks(0); | ||
| 75 | spin_unlock_irq(&die_lock); | 94 | spin_unlock_irq(&die_lock); |
| 76 | do_exit(SIGSEGV); | 95 | do_exit(SIGSEGV); |
| 77 | } | 96 | } |
| 78 | 97 | ||
| 79 | static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err) | 98 | static inline void die_if_kernel(const char *str, struct pt_regs *regs, |
| 99 | long err) | ||
| 80 | { | 100 | { |
| 81 | if (!user_mode(regs)) | 101 | if (!user_mode(regs)) |
| 82 | die(str, regs, err); | 102 | die(str, regs, err); |
| @@ -93,8 +113,7 @@ static int handle_unaligned_notify_count = 10; | |||
| 93 | */ | 113 | */ |
| 94 | static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) | 114 | static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) |
| 95 | { | 115 | { |
| 96 | if (!user_mode(regs)) | 116 | if (!user_mode(regs)) { |
| 97 | { | ||
| 98 | const struct exception_table_entry *fixup; | 117 | const struct exception_table_entry *fixup; |
| 99 | fixup = search_exception_tables(regs->pc); | 118 | fixup = search_exception_tables(regs->pc); |
| 100 | if (fixup) { | 119 | if (fixup) { |
| @@ -550,7 +569,10 @@ int is_dsp_inst(struct pt_regs *regs) | |||
| 550 | #define is_dsp_inst(regs) (0) | 569 | #define is_dsp_inst(regs) (0) |
| 551 | #endif /* CONFIG_SH_DSP */ | 570 | #endif /* CONFIG_SH_DSP */ |
| 552 | 571 | ||
| 553 | extern int do_fpu_inst(unsigned short, struct pt_regs*); | 572 | /* arch/sh/kernel/cpu/sh4/fpu.c */ |
| 573 | extern int do_fpu_inst(unsigned short, struct pt_regs *); | ||
| 574 | extern asmlinkage void do_fpu_state_restore(unsigned long r4, unsigned long r5, | ||
| 575 | unsigned long r6, unsigned long r7, struct pt_regs regs); | ||
| 554 | 576 | ||
| 555 | asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, | 577 | asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, |
| 556 | unsigned long r6, unsigned long r7, | 578 | unsigned long r6, unsigned long r7, |
| @@ -709,14 +731,20 @@ void __init per_cpu_trap_init(void) | |||
| 709 | : "memory"); | 731 | : "memory"); |
| 710 | } | 732 | } |
| 711 | 733 | ||
| 712 | void __init trap_init(void) | 734 | void *set_exception_table_vec(unsigned int vec, void *handler) |
| 713 | { | 735 | { |
| 714 | extern void *exception_handling_table[]; | 736 | extern void *exception_handling_table[]; |
| 737 | void *old_handler; | ||
| 738 | |||
| 739 | old_handler = exception_handling_table[vec]; | ||
| 740 | exception_handling_table[vec] = handler; | ||
| 741 | return old_handler; | ||
| 742 | } | ||
| 715 | 743 | ||
| 716 | exception_handling_table[TRAP_RESERVED_INST] | 744 | void __init trap_init(void) |
| 717 | = (void *)do_reserved_inst; | 745 | { |
| 718 | exception_handling_table[TRAP_ILLEGAL_SLOT_INST] | 746 | set_exception_table_vec(TRAP_RESERVED_INST, do_reserved_inst); |
| 719 | = (void *)do_illegal_slot_inst; | 747 | set_exception_table_vec(TRAP_ILLEGAL_SLOT_INST, do_illegal_slot_inst); |
| 720 | 748 | ||
| 721 | #if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_FPU) || \ | 749 | #if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_FPU) || \ |
| 722 | defined(CONFIG_SH_FPU_EMU) | 750 | defined(CONFIG_SH_FPU_EMU) |
| @@ -725,61 +753,54 @@ void __init trap_init(void) | |||
| 725 | * reserved. They'll be handled in the math-emu case, or faulted on | 753 | * reserved. They'll be handled in the math-emu case, or faulted on |
| 726 | * otherwise. | 754 | * otherwise. |
| 727 | */ | 755 | */ |
| 728 | /* entry 64 corresponds to EXPEVT=0x800 */ | 756 | set_exception_table_evt(0x800, do_reserved_inst); |
| 729 | exception_handling_table[64] = (void *)do_reserved_inst; | 757 | set_exception_table_evt(0x820, do_illegal_slot_inst); |
| 730 | exception_handling_table[65] = (void *)do_illegal_slot_inst; | 758 | #elif defined(CONFIG_SH_FPU) |
| 759 | set_exception_table_evt(0x800, do_fpu_state_restore); | ||
| 760 | set_exception_table_evt(0x820, do_fpu_state_restore); | ||
| 731 | #endif | 761 | #endif |
| 732 | 762 | ||
| 733 | /* Setup VBR for boot cpu */ | 763 | /* Setup VBR for boot cpu */ |
| 734 | per_cpu_trap_init(); | 764 | per_cpu_trap_init(); |
| 735 | } | 765 | } |
| 736 | 766 | ||
| 737 | void show_stack(struct task_struct *tsk, unsigned long *sp) | 767 | void show_trace(struct task_struct *tsk, unsigned long *sp, |
| 768 | struct pt_regs *regs) | ||
| 738 | { | 769 | { |
| 739 | unsigned long *stack, addr; | 770 | unsigned long addr; |
| 740 | unsigned long module_start = VMALLOC_START; | ||
| 741 | unsigned long module_end = VMALLOC_END; | ||
| 742 | int i = 1; | ||
| 743 | |||
| 744 | if (!tsk) | ||
| 745 | tsk = current; | ||
| 746 | if (tsk == current) | ||
| 747 | sp = (unsigned long *)current_stack_pointer; | ||
| 748 | else | ||
| 749 | sp = (unsigned long *)tsk->thread.sp; | ||
| 750 | 771 | ||
| 751 | stack = sp; | 772 | if (regs && user_mode(regs)) |
| 773 | return; | ||
| 752 | 774 | ||
| 753 | printk("\nCall trace: "); | 775 | printk("\nCall trace: "); |
| 754 | #ifdef CONFIG_KALLSYMS | 776 | #ifdef CONFIG_KALLSYMS |
| 755 | printk("\n"); | 777 | printk("\n"); |
| 756 | #endif | 778 | #endif |
| 757 | 779 | ||
| 758 | while (!kstack_end(stack)) { | 780 | while (!kstack_end(sp)) { |
| 759 | addr = *stack++; | 781 | addr = *sp++; |
| 760 | if (((addr >= (unsigned long)_text) && | 782 | if (kernel_text_address(addr)) |
| 761 | (addr <= (unsigned long)_etext)) || | 783 | print_ip_sym(addr); |
| 762 | ((addr >= module_start) && (addr <= module_end))) { | ||
| 763 | /* | ||
| 764 | * For 80-columns display, 6 entry is maximum. | ||
| 765 | * NOTE: '[<8c00abcd>] ' consumes 13 columns . | ||
| 766 | */ | ||
| 767 | #ifndef CONFIG_KALLSYMS | ||
| 768 | if (i && ((i % 6) == 0)) | ||
| 769 | printk("\n "); | ||
| 770 | #endif | ||
| 771 | printk("[<%08lx>] ", addr); | ||
| 772 | print_symbol("%s\n", addr); | ||
| 773 | i++; | ||
| 774 | } | ||
| 775 | } | 784 | } |
| 776 | 785 | ||
| 777 | printk("\n"); | 786 | printk("\n"); |
| 778 | } | 787 | } |
| 779 | 788 | ||
| 780 | void show_task(unsigned long *sp) | 789 | void show_stack(struct task_struct *tsk, unsigned long *sp) |
| 781 | { | 790 | { |
| 782 | show_stack(NULL, sp); | 791 | unsigned long stack; |
| 792 | |||
| 793 | if (!tsk) | ||
| 794 | tsk = current; | ||
| 795 | if (tsk == current) | ||
| 796 | sp = (unsigned long *)current_stack_pointer; | ||
| 797 | else | ||
| 798 | sp = (unsigned long *)tsk->thread.sp; | ||
| 799 | |||
| 800 | stack = (unsigned long)sp; | ||
| 801 | dump_mem("Stack: ", stack, THREAD_SIZE + | ||
| 802 | (unsigned long)task_stack_page(tsk)); | ||
| 803 | show_trace(tsk, sp, NULL); | ||
| 783 | } | 804 | } |
| 784 | 805 | ||
| 785 | void dump_stack(void) | 806 | void dump_stack(void) |
diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S index 5eb930918186..77b4026d5688 100644 --- a/arch/sh/kernel/vmlinux.lds.S +++ b/arch/sh/kernel/vmlinux.lds.S | |||
| @@ -76,13 +76,7 @@ SECTIONS | |||
| 76 | __setup_end = .; | 76 | __setup_end = .; |
| 77 | __initcall_start = .; | 77 | __initcall_start = .; |
| 78 | .initcall.init : { | 78 | .initcall.init : { |
| 79 | *(.initcall1.init) | 79 | INITCALLS |
| 80 | *(.initcall2.init) | ||
| 81 | *(.initcall3.init) | ||
| 82 | *(.initcall4.init) | ||
| 83 | *(.initcall5.init) | ||
| 84 | *(.initcall6.init) | ||
| 85 | *(.initcall7.init) | ||
| 86 | } | 80 | } |
| 87 | __initcall_end = .; | 81 | __initcall_end = .; |
| 88 | __con_initcall_start = .; | 82 | __con_initcall_start = .; |
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index c81e6b67ad30..38c82d890ffd 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c | |||
| @@ -28,6 +28,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *handle) | |||
| 28 | split_page(page, order); | 28 | split_page(page, order); |
| 29 | 29 | ||
| 30 | ret = page_address(page); | 30 | ret = page_address(page); |
| 31 | memset(ret, 0, size); | ||
| 31 | *handle = virt_to_phys(ret); | 32 | *handle = virt_to_phys(ret); |
| 32 | 33 | ||
| 33 | /* | 34 | /* |
diff --git a/arch/sh64/kernel/vmlinux.lds.S b/arch/sh64/kernel/vmlinux.lds.S index a8fcc3a71585..95c4d753e357 100644 --- a/arch/sh64/kernel/vmlinux.lds.S +++ b/arch/sh64/kernel/vmlinux.lds.S | |||
| @@ -108,13 +108,7 @@ SECTIONS | |||
| 108 | __setup_end = .; | 108 | __setup_end = .; |
| 109 | __initcall_start = .; | 109 | __initcall_start = .; |
| 110 | .initcall.init : C_PHYS(.initcall.init) { | 110 | .initcall.init : C_PHYS(.initcall.init) { |
| 111 | *(.initcall1.init) | 111 | INITCALLS |
| 112 | *(.initcall2.init) | ||
| 113 | *(.initcall3.init) | ||
| 114 | *(.initcall4.init) | ||
| 115 | *(.initcall5.init) | ||
| 116 | *(.initcall6.init) | ||
| 117 | *(.initcall7.init) | ||
| 118 | } | 112 | } |
| 119 | __initcall_end = .; | 113 | __initcall_end = .; |
| 120 | __con_initcall_start = .; | 114 | __con_initcall_start = .; |
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 9431e967aa45..2f96610a83e9 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
| @@ -289,6 +289,13 @@ endmenu | |||
| 289 | 289 | ||
| 290 | source "fs/Kconfig" | 290 | source "fs/Kconfig" |
| 291 | 291 | ||
| 292 | menu "Instrumentation Support" | ||
| 293 | depends on EXPERIMENTAL | ||
| 294 | |||
| 295 | source "arch/sparc/oprofile/Kconfig" | ||
| 296 | |||
| 297 | endmenu | ||
| 298 | |||
| 292 | source "arch/sparc/Kconfig.debug" | 299 | source "arch/sparc/Kconfig.debug" |
| 293 | 300 | ||
| 294 | source "security/Kconfig" | 301 | source "security/Kconfig" |
diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile index 4cdbb2d59ed0..f33c3817f014 100644 --- a/arch/sparc/Makefile +++ b/arch/sparc/Makefile | |||
| @@ -30,6 +30,8 @@ HEAD_Y := $(head-y) | |||
| 30 | core-y += arch/sparc/kernel/ arch/sparc/mm/ arch/sparc/math-emu/ | 30 | core-y += arch/sparc/kernel/ arch/sparc/mm/ arch/sparc/math-emu/ |
| 31 | libs-y += arch/sparc/prom/ arch/sparc/lib/ | 31 | libs-y += arch/sparc/prom/ arch/sparc/lib/ |
| 32 | 32 | ||
| 33 | drivers-$(CONFIG_OPROFILE) += arch/sparc/oprofile/ | ||
| 34 | |||
| 33 | # Export what is needed by arch/sparc/boot/Makefile | 35 | # Export what is needed by arch/sparc/boot/Makefile |
| 34 | # Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-) | 36 | # Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-) |
| 35 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) | 37 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) |
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c index 75ac24d229b1..ba58c3a061fd 100644 --- a/arch/sparc/kernel/ebus.c +++ b/arch/sparc/kernel/ebus.c | |||
| @@ -237,12 +237,12 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d | |||
| 237 | dev->ofdev.node = dp; | 237 | dev->ofdev.node = dp; |
| 238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; | 238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; |
| 239 | dev->ofdev.dev.bus = &ebus_bus_type; | 239 | dev->ofdev.dev.bus = &ebus_bus_type; |
| 240 | strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); | 240 | sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); |
| 241 | 241 | ||
| 242 | /* Register with core */ | 242 | /* Register with core */ |
| 243 | if (of_device_register(&dev->ofdev) != 0) | 243 | if (of_device_register(&dev->ofdev) != 0) |
| 244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 245 | dev->ofdev.dev.bus_id); | 245 | dp->path_component_name); |
| 246 | 246 | ||
| 247 | if ((dp = dp->child) != NULL) { | 247 | if ((dp = dp->child) != NULL) { |
| 248 | dev->children = (struct linux_ebus_child *) | 248 | dev->children = (struct linux_ebus_child *) |
| @@ -332,12 +332,12 @@ void __init ebus_init(void) | |||
| 332 | ebus->ofdev.node = dp; | 332 | ebus->ofdev.node = dp; |
| 333 | ebus->ofdev.dev.parent = &pdev->dev; | 333 | ebus->ofdev.dev.parent = &pdev->dev; |
| 334 | ebus->ofdev.dev.bus = &ebus_bus_type; | 334 | ebus->ofdev.dev.bus = &ebus_bus_type; |
| 335 | strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); | 335 | sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); |
| 336 | 336 | ||
| 337 | /* Register with core */ | 337 | /* Register with core */ |
| 338 | if (of_device_register(&ebus->ofdev) != 0) | 338 | if (of_device_register(&ebus->ofdev) != 0) |
| 339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 340 | ebus->ofdev.dev.bus_id); | 340 | dp->path_component_name); |
| 341 | 341 | ||
| 342 | 342 | ||
| 343 | nd = dp->child; | 343 | nd = dp->child; |
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index a4edff4c3be3..831f540251f8 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
| @@ -32,13 +32,12 @@ | |||
| 32 | #include <asm/mxcc.h> | 32 | #include <asm/mxcc.h> |
| 33 | #include <asm/thread_info.h> | 33 | #include <asm/thread_info.h> |
| 34 | #include <asm/param.h> | 34 | #include <asm/param.h> |
| 35 | #include <asm/unistd.h> | ||
| 35 | 36 | ||
| 36 | #include <asm/asmmacro.h> | 37 | #include <asm/asmmacro.h> |
| 37 | 38 | ||
| 38 | #define curptr g6 | 39 | #define curptr g6 |
| 39 | 40 | ||
| 40 | #define NR_SYSCALLS 300 /* Each OS is different... */ | ||
| 41 | |||
| 42 | /* These are just handy. */ | 41 | /* These are just handy. */ |
| 43 | #define _SV save %sp, -STACKFRAME_SZ, %sp | 42 | #define _SV save %sp, -STACKFRAME_SZ, %sp |
| 44 | #define _RS restore | 43 | #define _RS restore |
diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c index b3b6680a2a30..c8cb211b9072 100644 --- a/arch/sparc/kernel/irq.c +++ b/arch/sparc/kernel/irq.c | |||
| @@ -351,7 +351,7 @@ void handler_irq(int irq, struct pt_regs * regs) | |||
| 351 | } | 351 | } |
| 352 | 352 | ||
| 353 | #ifdef CONFIG_BLK_DEV_FD | 353 | #ifdef CONFIG_BLK_DEV_FD |
| 354 | extern void floppy_interrupt(int irq, void *dev_id) | 354 | extern void floppy_interrupt(int irq, void *dev_id); |
| 355 | 355 | ||
| 356 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) | 356 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) |
| 357 | { | 357 | { |
diff --git a/arch/sparc/kernel/of_device.c b/arch/sparc/kernel/of_device.c index 74bef2a2d37f..46200c43ffb1 100644 --- a/arch/sparc/kernel/of_device.c +++ b/arch/sparc/kernel/of_device.c | |||
| @@ -651,7 +651,7 @@ build_resources: | |||
| 651 | if (!parent) | 651 | if (!parent) |
| 652 | strcpy(op->dev.bus_id, "root"); | 652 | strcpy(op->dev.bus_id, "root"); |
| 653 | else | 653 | else |
| 654 | strcpy(op->dev.bus_id, dp->path_component_name); | 654 | sprintf(op->dev.bus_id, "%08x", dp->node); |
| 655 | 655 | ||
| 656 | if (of_device_register(op)) { | 656 | if (of_device_register(op)) { |
| 657 | printk("%s: Could not register of device.\n", | 657 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index b4e50ae323bf..207f1b6eef53 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <asm/pcic.h> | 34 | #include <asm/pcic.h> |
| 35 | #include <asm/timer.h> | 35 | #include <asm/timer.h> |
| 36 | #include <asm/uaccess.h> | 36 | #include <asm/uaccess.h> |
| 37 | #include <asm/irq_regs.h> | ||
| 37 | 38 | ||
| 38 | 39 | ||
| 39 | unsigned int pcic_pin_to_irq(unsigned int pin, char *name); | 40 | unsigned int pcic_pin_to_irq(unsigned int pin, char *name); |
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c index 0251cab4708b..383526ad94fc 100644 --- a/arch/sparc/kernel/setup.c +++ b/arch/sparc/kernel/setup.c | |||
| @@ -103,7 +103,6 @@ void prom_sync_me(void) | |||
| 103 | 103 | ||
| 104 | unsigned int boot_flags __initdata = 0; | 104 | unsigned int boot_flags __initdata = 0; |
| 105 | #define BOOTME_DEBUG 0x1 | 105 | #define BOOTME_DEBUG 0x1 |
| 106 | #define BOOTME_SINGLE 0x2 | ||
| 107 | 106 | ||
| 108 | /* Exported for mm/init.c:paging_init. */ | 107 | /* Exported for mm/init.c:paging_init. */ |
| 109 | unsigned long cmdline_memory_size __initdata = 0; | 108 | unsigned long cmdline_memory_size __initdata = 0; |
| @@ -121,16 +120,6 @@ static struct console prom_debug_console = { | |||
| 121 | .index = -1, | 120 | .index = -1, |
| 122 | }; | 121 | }; |
| 123 | 122 | ||
| 124 | int obp_system_intr(void) | ||
| 125 | { | ||
| 126 | if (boot_flags & BOOTME_DEBUG) { | ||
| 127 | printk("OBP: system interrupted\n"); | ||
| 128 | prom_halt(); | ||
| 129 | return 1; | ||
| 130 | } | ||
| 131 | return 0; | ||
| 132 | } | ||
| 133 | |||
| 134 | /* | 123 | /* |
| 135 | * Process kernel command line switches that are specific to the | 124 | * Process kernel command line switches that are specific to the |
| 136 | * SPARC or that require special low-level processing. | 125 | * SPARC or that require special low-level processing. |
| @@ -142,7 +131,6 @@ static void __init process_switch(char c) | |||
| 142 | boot_flags |= BOOTME_DEBUG; | 131 | boot_flags |= BOOTME_DEBUG; |
| 143 | break; | 132 | break; |
| 144 | case 's': | 133 | case 's': |
| 145 | boot_flags |= BOOTME_SINGLE; | ||
| 146 | break; | 134 | break; |
| 147 | case 'h': | 135 | case 'h': |
| 148 | prom_printf("boot_flags_init: Halt!\n"); | 136 | prom_printf("boot_flags_init: Halt!\n"); |
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index 10df38eeae08..ea75ca569052 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
| @@ -78,7 +78,7 @@ sys_call_table: | |||
| 78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
| 79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
| 81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list | 81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages |
| 82 | 82 | ||
| 83 | #ifdef CONFIG_SUNOS_EMUL | 83 | #ifdef CONFIG_SUNOS_EMUL |
| 84 | /* Now the SunOS syscall table. */ | 84 | /* Now the SunOS syscall table. */ |
| @@ -190,6 +190,7 @@ sunos_sys_table: | |||
| 190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys | 190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys |
| 191 | .long sunos_nosys, sunos_nosys, sunos_nosys | 191 | .long sunos_nosys, sunos_nosys, sunos_nosys |
| 192 | .long sunos_nosys, sunos_nosys, sunos_nosys | 192 | .long sunos_nosys, sunos_nosys, sunos_nosys |
| 193 | .long sunos_nosys, sunos_nosys, sunos_nosys | 193 | .long sunos_nosys |
| 194 | /*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys | ||
| 194 | 195 | ||
| 195 | #endif | 196 | #endif |
diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c index 7dcd1a16c6e4..6c7aa51b590f 100644 --- a/arch/sparc/kernel/time.c +++ b/arch/sparc/kernel/time.c | |||
| @@ -95,6 +95,8 @@ unsigned long profile_pc(struct pt_regs *regs) | |||
| 95 | return pc; | 95 | return pc; |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | EXPORT_SYMBOL(profile_pc); | ||
| 99 | |||
| 98 | __volatile__ unsigned int *master_l10_counter; | 100 | __volatile__ unsigned int *master_l10_counter; |
| 99 | __volatile__ unsigned int *master_l10_limit; | 101 | __volatile__ unsigned int *master_l10_limit; |
| 100 | 102 | ||
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 346c19a949fd..5cc5ff7f8824 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
| @@ -36,11 +36,11 @@ SECTIONS | |||
| 36 | 36 | ||
| 37 | . = ALIGN(4096); | 37 | . = ALIGN(4096); |
| 38 | __init_begin = .; | 38 | __init_begin = .; |
| 39 | _sinittext = .; | ||
| 39 | .init.text : { | 40 | .init.text : { |
| 40 | _sinittext = .; | ||
| 41 | *(.init.text) | 41 | *(.init.text) |
| 42 | _einittext = .; | ||
| 43 | } | 42 | } |
| 43 | _einittext = .; | ||
| 44 | __init_text_end = .; | 44 | __init_text_end = .; |
| 45 | .init.data : { *(.init.data) } | 45 | .init.data : { *(.init.data) } |
| 46 | . = ALIGN(16); | 46 | . = ALIGN(16); |
| @@ -49,13 +49,7 @@ SECTIONS | |||
| 49 | __setup_end = .; | 49 | __setup_end = .; |
| 50 | __initcall_start = .; | 50 | __initcall_start = .; |
| 51 | .initcall.init : { | 51 | .initcall.init : { |
| 52 | *(.initcall1.init) | 52 | INITCALLS |
| 53 | *(.initcall2.init) | ||
| 54 | *(.initcall3.init) | ||
| 55 | *(.initcall4.init) | ||
| 56 | *(.initcall5.init) | ||
| 57 | *(.initcall6.init) | ||
| 58 | *(.initcall7.init) | ||
| 59 | } | 53 | } |
| 60 | __initcall_end = .; | 54 | __initcall_end = .; |
| 61 | __con_initcall_start = .; | 55 | __con_initcall_start = .; |
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index b27a506309ee..0df7121cef07 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c | |||
| @@ -402,7 +402,7 @@ void srmmu_nocache_calcsize(void) | |||
| 402 | srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size; | 402 | srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size; |
| 403 | } | 403 | } |
| 404 | 404 | ||
| 405 | void srmmu_nocache_init(void) | 405 | void __init srmmu_nocache_init(void) |
| 406 | { | 406 | { |
| 407 | unsigned int bitmap_bits; | 407 | unsigned int bitmap_bits; |
| 408 | pgd_t *pgd; | 408 | pgd_t *pgd; |
diff --git a/arch/sparc/oprofile/Kconfig b/arch/sparc/oprofile/Kconfig new file mode 100644 index 000000000000..d8a84088471a --- /dev/null +++ b/arch/sparc/oprofile/Kconfig | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | config PROFILING | ||
| 2 | bool "Profiling support (EXPERIMENTAL)" | ||
| 3 | help | ||
| 4 | Say Y here to enable the extended profiling support mechanisms used | ||
| 5 | by profilers such as OProfile. | ||
| 6 | |||
| 7 | |||
| 8 | config OPROFILE | ||
| 9 | tristate "OProfile system profiling (EXPERIMENTAL)" | ||
| 10 | depends on PROFILING | ||
| 11 | help | ||
| 12 | OProfile is a profiling system capable of profiling the | ||
| 13 | whole system, include the kernel, kernel modules, libraries, | ||
| 14 | and applications. | ||
| 15 | |||
| 16 | If unsure, say N. | ||
| 17 | |||
diff --git a/arch/sparc/oprofile/Makefile b/arch/sparc/oprofile/Makefile new file mode 100644 index 000000000000..e9feca1ca28b --- /dev/null +++ b/arch/sparc/oprofile/Makefile | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | obj-$(CONFIG_OPROFILE) += oprofile.o | ||
| 2 | |||
| 3 | DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \ | ||
| 4 | oprof.o cpu_buffer.o buffer_sync.o \ | ||
| 5 | event_buffer.o oprofile_files.o \ | ||
| 6 | oprofilefs.o oprofile_stats.o \ | ||
| 7 | timer_int.o ) | ||
| 8 | |||
| 9 | oprofile-y := $(DRIVER_OBJS) init.o | ||
diff --git a/arch/sparc/oprofile/init.c b/arch/sparc/oprofile/init.c new file mode 100644 index 000000000000..9ab815b95b5a --- /dev/null +++ b/arch/sparc/oprofile/init.c | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | /** | ||
| 2 | * @file init.c | ||
| 3 | * | ||
| 4 | * @remark Copyright 2002 OProfile authors | ||
| 5 | * @remark Read the file COPYING | ||
| 6 | * | ||
| 7 | * @author John Levon <levon@movementarian.org> | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <linux/kernel.h> | ||
| 11 | #include <linux/oprofile.h> | ||
| 12 | #include <linux/errno.h> | ||
| 13 | #include <linux/init.h> | ||
| 14 | |||
| 15 | int __init oprofile_arch_init(struct oprofile_operations * ops) | ||
| 16 | { | ||
| 17 | return -ENODEV; | ||
| 18 | } | ||
| 19 | |||
| 20 | |||
| 21 | void oprofile_arch_exit(void) | ||
| 22 | { | ||
| 23 | } | ||
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig index dcae559879ae..2f4612fa81f2 100644 --- a/arch/sparc64/defconfig +++ b/arch/sparc64/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.19-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Thu Oct 5 02:08:41 2006 | 4 | # Tue Oct 17 19:29:20 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_SPARC=y | 6 | CONFIG_SPARC=y |
| 7 | CONFIG_SPARC64=y | 7 | CONFIG_SPARC64=y |
| @@ -217,6 +217,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m | |||
| 217 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | 217 | CONFIG_INET6_XFRM_MODE_TUNNEL=m |
| 218 | CONFIG_INET6_XFRM_MODE_BEET=m | 218 | CONFIG_INET6_XFRM_MODE_BEET=m |
| 219 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 219 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 220 | CONFIG_IPV6_SIT=m | ||
| 220 | CONFIG_IPV6_TUNNEL=m | 221 | CONFIG_IPV6_TUNNEL=m |
| 221 | # CONFIG_IPV6_SUBTREES is not set | 222 | # CONFIG_IPV6_SUBTREES is not set |
| 222 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 223 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| @@ -334,6 +335,12 @@ CONFIG_CDROM_PKTCDVD_WCACHE=y | |||
| 334 | CONFIG_ATA_OVER_ETH=m | 335 | CONFIG_ATA_OVER_ETH=m |
| 335 | 336 | ||
| 336 | # | 337 | # |
| 338 | # Misc devices | ||
| 339 | # | ||
| 340 | # CONFIG_SGI_IOC4 is not set | ||
| 341 | # CONFIG_TIFM_CORE is not set | ||
| 342 | |||
| 343 | # | ||
| 337 | # ATA/ATAPI/MFM/RLL support | 344 | # ATA/ATAPI/MFM/RLL support |
| 338 | # | 345 | # |
| 339 | CONFIG_IDE=y | 346 | CONFIG_IDE=y |
| @@ -728,7 +735,6 @@ CONFIG_RTC=y | |||
| 728 | # TPM devices | 735 | # TPM devices |
| 729 | # | 736 | # |
| 730 | # CONFIG_TCG_TPM is not set | 737 | # CONFIG_TCG_TPM is not set |
| 731 | # CONFIG_TELCLOCK is not set | ||
| 732 | 738 | ||
| 733 | # | 739 | # |
| 734 | # I2C support | 740 | # I2C support |
| @@ -842,11 +848,6 @@ CONFIG_HWMON=y | |||
| 842 | # CONFIG_HWMON_DEBUG_CHIP is not set | 848 | # CONFIG_HWMON_DEBUG_CHIP is not set |
| 843 | 849 | ||
| 844 | # | 850 | # |
| 845 | # Misc devices | ||
| 846 | # | ||
| 847 | # CONFIG_TIFM_CORE is not set | ||
| 848 | |||
| 849 | # | ||
| 850 | # Multimedia devices | 851 | # Multimedia devices |
| 851 | # | 852 | # |
| 852 | # CONFIG_VIDEO_DEV is not set | 853 | # CONFIG_VIDEO_DEV is not set |
| @@ -1104,7 +1105,6 @@ CONFIG_USB_HIDDEV=y | |||
| 1104 | # CONFIG_USB_ATI_REMOTE2 is not set | 1105 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 1105 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1106 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 1106 | # CONFIG_USB_APPLETOUCH is not set | 1107 | # CONFIG_USB_APPLETOUCH is not set |
| 1107 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1108 | 1108 | ||
| 1109 | # | 1109 | # |
| 1110 | # USB Imaging devices | 1110 | # USB Imaging devices |
| @@ -1150,6 +1150,7 @@ CONFIG_USB_HIDDEV=y | |||
| 1150 | # CONFIG_USB_APPLEDISPLAY is not set | 1150 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1151 | # CONFIG_USB_SISUSBVGA is not set | 1151 | # CONFIG_USB_SISUSBVGA is not set |
| 1152 | # CONFIG_USB_LD is not set | 1152 | # CONFIG_USB_LD is not set |
| 1153 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1153 | # CONFIG_USB_TEST is not set | 1154 | # CONFIG_USB_TEST is not set |
| 1154 | 1155 | ||
| 1155 | # | 1156 | # |
| @@ -1234,6 +1235,7 @@ CONFIG_EXT3_FS=y | |||
| 1234 | CONFIG_EXT3_FS_XATTR=y | 1235 | CONFIG_EXT3_FS_XATTR=y |
| 1235 | CONFIG_EXT3_FS_POSIX_ACL=y | 1236 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1236 | CONFIG_EXT3_FS_SECURITY=y | 1237 | CONFIG_EXT3_FS_SECURITY=y |
| 1238 | # CONFIG_EXT4DEV_FS is not set | ||
| 1237 | CONFIG_JBD=y | 1239 | CONFIG_JBD=y |
| 1238 | # CONFIG_JBD_DEBUG is not set | 1240 | # CONFIG_JBD_DEBUG is not set |
| 1239 | CONFIG_FS_MBCACHE=y | 1241 | CONFIG_FS_MBCACHE=y |
| @@ -1362,10 +1364,6 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 1362 | # CONFIG_NLS_UTF8 is not set | 1364 | # CONFIG_NLS_UTF8 is not set |
| 1363 | 1365 | ||
| 1364 | # | 1366 | # |
| 1365 | # Distributed Lock Manager | ||
| 1366 | # | ||
| 1367 | |||
| 1368 | # | ||
| 1369 | # Instrumentation Support | 1367 | # Instrumentation Support |
| 1370 | # | 1368 | # |
| 1371 | CONFIG_PROFILING=y | 1369 | CONFIG_PROFILING=y |
| @@ -1399,6 +1397,7 @@ CONFIG_DEBUG_FS=y | |||
| 1399 | # CONFIG_DEBUG_LIST is not set | 1397 | # CONFIG_DEBUG_LIST is not set |
| 1400 | # CONFIG_UNWIND_INFO is not set | 1398 | # CONFIG_UNWIND_INFO is not set |
| 1401 | CONFIG_FORCED_INLINING=y | 1399 | CONFIG_FORCED_INLINING=y |
| 1400 | # CONFIG_HEADERS_CHECK is not set | ||
| 1402 | # CONFIG_RCU_TORTURE_TEST is not set | 1401 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1403 | # CONFIG_LKDTM is not set | 1402 | # CONFIG_LKDTM is not set |
| 1404 | # CONFIG_DEBUG_STACK_USAGE is not set | 1403 | # CONFIG_DEBUG_STACK_USAGE is not set |
diff --git a/arch/sparc64/kernel/central.c b/arch/sparc64/kernel/central.c index b66336db00ee..e724c54af029 100644 --- a/arch/sparc64/kernel/central.c +++ b/arch/sparc64/kernel/central.c | |||
| @@ -126,6 +126,10 @@ static void probe_other_fhcs(void) | |||
| 126 | int board; | 126 | int board; |
| 127 | u32 tmp; | 127 | u32 tmp; |
| 128 | 128 | ||
| 129 | if (dp->parent && | ||
| 130 | dp->parent->parent != NULL) | ||
| 131 | continue; | ||
| 132 | |||
| 129 | fhc = (struct linux_fhc *) | 133 | fhc = (struct linux_fhc *) |
| 130 | central_alloc_bootmem(sizeof(struct linux_fhc)); | 134 | central_alloc_bootmem(sizeof(struct linux_fhc)); |
| 131 | if (fhc == NULL) | 135 | if (fhc == NULL) |
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c index 2df25c2b4071..35bf895fdeee 100644 --- a/arch/sparc64/kernel/ebus.c +++ b/arch/sparc64/kernel/ebus.c | |||
| @@ -389,12 +389,12 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de | |||
| 389 | dev->ofdev.node = dp; | 389 | dev->ofdev.node = dp; |
| 390 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; | 390 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; |
| 391 | dev->ofdev.dev.bus = &ebus_bus_type; | 391 | dev->ofdev.dev.bus = &ebus_bus_type; |
| 392 | strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); | 392 | sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); |
| 393 | 393 | ||
| 394 | /* Register with core */ | 394 | /* Register with core */ |
| 395 | if (of_device_register(&dev->ofdev) != 0) | 395 | if (of_device_register(&dev->ofdev) != 0) |
| 396 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 396 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 397 | dev->ofdev.dev.bus_id); | 397 | dp->path_component_name); |
| 398 | 398 | ||
| 399 | dp = dp->child; | 399 | dp = dp->child; |
| 400 | if (dp) { | 400 | if (dp) { |
| @@ -494,12 +494,12 @@ void __init ebus_init(void) | |||
| 494 | ebus->ofdev.node = dp; | 494 | ebus->ofdev.node = dp; |
| 495 | ebus->ofdev.dev.parent = &pdev->dev; | 495 | ebus->ofdev.dev.parent = &pdev->dev; |
| 496 | ebus->ofdev.dev.bus = &ebus_bus_type; | 496 | ebus->ofdev.dev.bus = &ebus_bus_type; |
| 497 | strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); | 497 | sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); |
| 498 | 498 | ||
| 499 | /* Register with core */ | 499 | /* Register with core */ |
| 500 | if (of_device_register(&ebus->ofdev) != 0) | 500 | if (of_device_register(&ebus->ofdev) != 0) |
| 501 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 501 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 502 | ebus->ofdev.dev.bus_id); | 502 | dp->path_component_name); |
| 503 | 503 | ||
| 504 | 504 | ||
| 505 | child = dp->child; | 505 | child = dp->child; |
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index 0aaa35fc5a9c..6f28bec0a9bf 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
| @@ -22,11 +22,10 @@ | |||
| 22 | #include <asm/auxio.h> | 22 | #include <asm/auxio.h> |
| 23 | #include <asm/sfafsr.h> | 23 | #include <asm/sfafsr.h> |
| 24 | #include <asm/pil.h> | 24 | #include <asm/pil.h> |
| 25 | #include <asm/unistd.h> | ||
| 25 | 26 | ||
| 26 | #define curptr g6 | 27 | #define curptr g6 |
| 27 | 28 | ||
| 28 | #define NR_SYSCALLS 300 /* Each OS is different... */ | ||
| 29 | |||
| 30 | .text | 29 | .text |
| 31 | .align 32 | 30 | .align 32 |
| 32 | 31 | ||
diff --git a/arch/sparc64/kernel/isa.c b/arch/sparc64/kernel/isa.c index 0f3aec72ef5f..f028e68b23f2 100644 --- a/arch/sparc64/kernel/isa.c +++ b/arch/sparc64/kernel/isa.c | |||
| @@ -115,12 +115,12 @@ static void __init isa_fill_devices(struct sparc_isa_bridge *isa_br) | |||
| 115 | isa_dev->ofdev.node = dp; | 115 | isa_dev->ofdev.node = dp; |
| 116 | isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev; | 116 | isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev; |
| 117 | isa_dev->ofdev.dev.bus = &isa_bus_type; | 117 | isa_dev->ofdev.dev.bus = &isa_bus_type; |
| 118 | strcpy(isa_dev->ofdev.dev.bus_id, dp->path_component_name); | 118 | sprintf(isa_dev->ofdev.dev.bus_id, "isa[%08x]", dp->node); |
| 119 | 119 | ||
| 120 | /* Register with core */ | 120 | /* Register with core */ |
| 121 | if (of_device_register(&isa_dev->ofdev) != 0) { | 121 | if (of_device_register(&isa_dev->ofdev) != 0) { |
| 122 | printk(KERN_DEBUG "isa: device registration error for %s!\n", | 122 | printk(KERN_DEBUG "isa: device registration error for %s!\n", |
| 123 | isa_dev->ofdev.dev.bus_id); | 123 | dp->path_component_name); |
| 124 | kfree(isa_dev); | 124 | kfree(isa_dev); |
| 125 | goto next_sibling; | 125 | goto next_sibling; |
| 126 | } | 126 | } |
| @@ -191,12 +191,12 @@ void __init isa_init(void) | |||
| 191 | isa_br->ofdev.node = dp; | 191 | isa_br->ofdev.node = dp; |
| 192 | isa_br->ofdev.dev.parent = &pdev->dev; | 192 | isa_br->ofdev.dev.parent = &pdev->dev; |
| 193 | isa_br->ofdev.dev.bus = &isa_bus_type; | 193 | isa_br->ofdev.dev.bus = &isa_bus_type; |
| 194 | strcpy(isa_br->ofdev.dev.bus_id, dp->path_component_name); | 194 | sprintf(isa_br->ofdev.dev.bus_id, "isa%d", index); |
| 195 | 195 | ||
| 196 | /* Register with core */ | 196 | /* Register with core */ |
| 197 | if (of_device_register(&isa_br->ofdev) != 0) { | 197 | if (of_device_register(&isa_br->ofdev) != 0) { |
| 198 | printk(KERN_DEBUG "isa: device registration error for %s!\n", | 198 | printk(KERN_DEBUG "isa: device registration error for %s!\n", |
| 199 | isa_br->ofdev.dev.bus_id); | 199 | dp->path_component_name); |
| 200 | kfree(isa_br); | 200 | kfree(isa_br); |
| 201 | return; | 201 | return; |
| 202 | } | 202 | } |
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index d822c7c18e1f..8cc14fc6b6f1 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c | |||
| @@ -131,8 +131,13 @@ static int of_device_resume(struct device * dev) | |||
| 131 | void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name) | 131 | void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name) |
| 132 | { | 132 | { |
| 133 | unsigned long ret = res->start + offset; | 133 | unsigned long ret = res->start + offset; |
| 134 | struct resource *r; | ||
| 134 | 135 | ||
| 135 | if (!request_region(ret, size, name)) | 136 | if (res->flags & IORESOURCE_MEM) |
| 137 | r = request_mem_region(ret, size, name); | ||
| 138 | else | ||
| 139 | r = request_region(ret, size, name); | ||
| 140 | if (!r) | ||
| 136 | ret = 0; | 141 | ret = 0; |
| 137 | 142 | ||
| 138 | return (void __iomem *) ret; | 143 | return (void __iomem *) ret; |
| @@ -397,16 +402,22 @@ static void of_bus_sbus_count_cells(struct device_node *child, | |||
| 397 | *sizec = 1; | 402 | *sizec = 1; |
| 398 | } | 403 | } |
| 399 | 404 | ||
| 400 | static int of_bus_sbus_map(u32 *addr, const u32 *range, int na, int ns, int pna) | 405 | /* |
| 401 | { | 406 | * FHC/Central bus specific translator. |
| 402 | return of_bus_default_map(addr, range, na, ns, pna); | 407 | * |
| 403 | } | 408 | * This is just needed to hard-code the address and size cell |
| 404 | 409 | * counts. 'fhc' and 'central' nodes lack the #address-cells and | |
| 405 | static unsigned int of_bus_sbus_get_flags(u32 *addr) | 410 | * #size-cells properties, and if you walk to the root on such |
| 411 | * Enterprise boxes all you'll get is a #size-cells of 2 which is | ||
| 412 | * not what we want to use. | ||
| 413 | */ | ||
| 414 | static int of_bus_fhc_match(struct device_node *np) | ||
| 406 | { | 415 | { |
| 407 | return IORESOURCE_MEM; | 416 | return !strcmp(np->name, "fhc") || |
| 417 | !strcmp(np->name, "central"); | ||
| 408 | } | 418 | } |
| 409 | 419 | ||
| 420 | #define of_bus_fhc_count_cells of_bus_sbus_count_cells | ||
| 410 | 421 | ||
| 411 | /* | 422 | /* |
| 412 | * Array of bus specific translators | 423 | * Array of bus specific translators |
| @@ -428,8 +439,17 @@ static struct of_bus of_busses[] = { | |||
| 428 | .addr_prop_name = "reg", | 439 | .addr_prop_name = "reg", |
| 429 | .match = of_bus_sbus_match, | 440 | .match = of_bus_sbus_match, |
| 430 | .count_cells = of_bus_sbus_count_cells, | 441 | .count_cells = of_bus_sbus_count_cells, |
| 431 | .map = of_bus_sbus_map, | 442 | .map = of_bus_default_map, |
| 432 | .get_flags = of_bus_sbus_get_flags, | 443 | .get_flags = of_bus_default_get_flags, |
| 444 | }, | ||
| 445 | /* FHC */ | ||
| 446 | { | ||
| 447 | .name = "fhc", | ||
| 448 | .addr_prop_name = "reg", | ||
| 449 | .match = of_bus_fhc_match, | ||
| 450 | .count_cells = of_bus_fhc_count_cells, | ||
| 451 | .map = of_bus_default_map, | ||
| 452 | .get_flags = of_bus_default_get_flags, | ||
| 433 | }, | 453 | }, |
| 434 | /* Default */ | 454 | /* Default */ |
| 435 | { | 455 | { |
| @@ -841,7 +861,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 841 | if (!parent) | 861 | if (!parent) |
| 842 | strcpy(op->dev.bus_id, "root"); | 862 | strcpy(op->dev.bus_id, "root"); |
| 843 | else | 863 | else |
| 844 | sprintf(op->dev.bus_id, "%s@%08x", dp->name, dp->node); | 864 | sprintf(op->dev.bus_id, "%08x", dp->node); |
| 845 | 865 | ||
| 846 | if (of_device_register(op)) { | 866 | if (of_device_register(op)) { |
| 847 | printk("%s: Could not register of device.\n", | 867 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc64/kernel/pci_common.c b/arch/sparc64/kernel/pci_common.c index 7a59cc72c844..827ae30aa497 100644 --- a/arch/sparc64/kernel/pci_common.c +++ b/arch/sparc64/kernel/pci_common.c | |||
| @@ -330,19 +330,6 @@ __init get_device_resource(struct linux_prom_pci_registers *ap, | |||
| 330 | return res; | 330 | return res; |
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | static int __init pdev_resource_collisions_expected(struct pci_dev *pdev) | ||
| 334 | { | ||
| 335 | if (pdev->vendor != PCI_VENDOR_ID_SUN) | ||
| 336 | return 0; | ||
| 337 | |||
| 338 | if (pdev->device == PCI_DEVICE_ID_SUN_RIO_EBUS || | ||
| 339 | pdev->device == PCI_DEVICE_ID_SUN_RIO_1394 || | ||
| 340 | pdev->device == PCI_DEVICE_ID_SUN_RIO_USB) | ||
| 341 | return 1; | ||
| 342 | |||
| 343 | return 0; | ||
| 344 | } | ||
| 345 | |||
| 346 | static void __init pdev_record_assignments(struct pci_pbm_info *pbm, | 333 | static void __init pdev_record_assignments(struct pci_pbm_info *pbm, |
| 347 | struct pci_dev *pdev) | 334 | struct pci_dev *pdev) |
| 348 | { | 335 | { |
| @@ -400,19 +387,23 @@ static void __init pdev_record_assignments(struct pci_pbm_info *pbm, | |||
| 400 | pbm->parent->resource_adjust(pdev, res, root); | 387 | pbm->parent->resource_adjust(pdev, res, root); |
| 401 | 388 | ||
| 402 | if (request_resource(root, res) < 0) { | 389 | if (request_resource(root, res) < 0) { |
| 390 | int rnum; | ||
| 391 | |||
| 403 | /* OK, there is some conflict. But this is fine | 392 | /* OK, there is some conflict. But this is fine |
| 404 | * since we'll reassign it in the fixup pass. | 393 | * since we'll reassign it in the fixup pass. |
| 405 | * | 394 | * |
| 406 | * We notify the user that OBP made an error if it | 395 | * Do not print the warning for ROM resources |
| 407 | * is a case we don't expect. | 396 | * as such a conflict is quite common and |
| 397 | * harmless as the ROM bar is disabled. | ||
| 408 | */ | 398 | */ |
| 409 | if (!pdev_resource_collisions_expected(pdev)) { | 399 | rnum = (res - &pdev->resource[0]); |
| 410 | printk(KERN_ERR "PCI: Address space collision on region %ld " | 400 | if (rnum != PCI_ROM_RESOURCE) |
| 401 | printk(KERN_ERR "PCI: Resource collision, " | ||
| 402 | "region %d " | ||
| 411 | "[%016lx:%016lx] of device %s\n", | 403 | "[%016lx:%016lx] of device %s\n", |
| 412 | (res - &pdev->resource[0]), | 404 | rnum, |
| 413 | res->start, res->end, | 405 | res->start, res->end, |
| 414 | pci_name(pdev)); | 406 | pci_name(pdev)); |
| 415 | } | ||
| 416 | } | 407 | } |
| 417 | } | 408 | } |
| 418 | } | 409 | } |
diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c index 82e5455134c6..2e7f1427088a 100644 --- a/arch/sparc64/kernel/pci_iommu.c +++ b/arch/sparc64/kernel/pci_iommu.c | |||
| @@ -281,7 +281,7 @@ static void pci_4u_free_consistent(struct pci_dev *pdev, size_t size, void *cpu, | |||
| 281 | 281 | ||
| 282 | spin_lock_irqsave(&iommu->lock, flags); | 282 | spin_lock_irqsave(&iommu->lock, flags); |
| 283 | 283 | ||
| 284 | free_npages(iommu, dvma, npages); | 284 | free_npages(iommu, dvma - iommu->page_table_map_base, npages); |
| 285 | 285 | ||
| 286 | spin_unlock_irqrestore(&iommu->lock, flags); | 286 | spin_unlock_irqrestore(&iommu->lock, flags); |
| 287 | 287 | ||
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c index 6ec569828c29..94bb681f2323 100644 --- a/arch/sparc64/kernel/pci_sabre.c +++ b/arch/sparc64/kernel/pci_sabre.c | |||
| @@ -1196,7 +1196,7 @@ static void pbm_register_toplevel_resources(struct pci_controller_info *p, | |||
| 1196 | &pbm->mem_space); | 1196 | &pbm->mem_space); |
| 1197 | } | 1197 | } |
| 1198 | 1198 | ||
| 1199 | static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp, u32 dma_begin) | 1199 | static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp, u32 dma_start, u32 dma_end) |
| 1200 | { | 1200 | { |
| 1201 | struct pci_pbm_info *pbm; | 1201 | struct pci_pbm_info *pbm; |
| 1202 | struct device_node *node; | 1202 | struct device_node *node; |
| @@ -1261,6 +1261,8 @@ static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp | |||
| 1261 | node = node->sibling; | 1261 | node = node->sibling; |
| 1262 | } | 1262 | } |
| 1263 | if (simbas_found == 0) { | 1263 | if (simbas_found == 0) { |
| 1264 | struct resource *rp; | ||
| 1265 | |||
| 1264 | /* No APBs underneath, probably this is a hummingbird | 1266 | /* No APBs underneath, probably this is a hummingbird |
| 1265 | * system. | 1267 | * system. |
| 1266 | */ | 1268 | */ |
| @@ -1302,8 +1304,10 @@ static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp | |||
| 1302 | pbm->io_space.end = pbm->io_space.start + (1UL << 24) - 1UL; | 1304 | pbm->io_space.end = pbm->io_space.start + (1UL << 24) - 1UL; |
| 1303 | pbm->io_space.flags = IORESOURCE_IO; | 1305 | pbm->io_space.flags = IORESOURCE_IO; |
| 1304 | 1306 | ||
| 1305 | pbm->mem_space.start = p->pbm_A.controller_regs + SABRE_MEMSPACE; | 1307 | pbm->mem_space.start = |
| 1306 | pbm->mem_space.end = pbm->mem_space.start + (unsigned long)dma_begin - 1UL; | 1308 | (p->pbm_A.controller_regs + SABRE_MEMSPACE); |
| 1309 | pbm->mem_space.end = | ||
| 1310 | (pbm->mem_space.start + ((1UL << 32UL) - 1UL)); | ||
| 1307 | pbm->mem_space.flags = IORESOURCE_MEM; | 1311 | pbm->mem_space.flags = IORESOURCE_MEM; |
| 1308 | 1312 | ||
| 1309 | if (request_resource(&ioport_resource, &pbm->io_space) < 0) { | 1313 | if (request_resource(&ioport_resource, &pbm->io_space) < 0) { |
| @@ -1315,6 +1319,17 @@ static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp | |||
| 1315 | prom_halt(); | 1319 | prom_halt(); |
| 1316 | } | 1320 | } |
| 1317 | 1321 | ||
| 1322 | rp = kmalloc(sizeof(*rp), GFP_KERNEL); | ||
| 1323 | if (!rp) { | ||
| 1324 | prom_printf("Cannot allocate IOMMU resource.\n"); | ||
| 1325 | prom_halt(); | ||
| 1326 | } | ||
| 1327 | rp->name = "IOMMU"; | ||
| 1328 | rp->start = pbm->mem_space.start + (unsigned long) dma_start; | ||
| 1329 | rp->end = pbm->mem_space.start + (unsigned long) dma_end - 1UL; | ||
| 1330 | rp->flags = IORESOURCE_BUSY; | ||
| 1331 | request_resource(&pbm->mem_space, rp); | ||
| 1332 | |||
| 1318 | pci_register_legacy_regions(&pbm->io_space, | 1333 | pci_register_legacy_regions(&pbm->io_space, |
| 1319 | &pbm->mem_space); | 1334 | &pbm->mem_space); |
| 1320 | } | 1335 | } |
| @@ -1450,5 +1465,5 @@ void sabre_init(struct device_node *dp, char *model_name) | |||
| 1450 | /* | 1465 | /* |
| 1451 | * Look for APB underneath. | 1466 | * Look for APB underneath. |
| 1452 | */ | 1467 | */ |
| 1453 | sabre_pbm_init(p, dp, vdma[0]); | 1468 | sabre_pbm_init(p, dp, vdma[0], vdma[0] + vdma[1]); |
| 1454 | } | 1469 | } |
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index e21cd6afa709..0917c24c4f08 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c | |||
| @@ -793,7 +793,7 @@ static unsigned int schizo_irq_build(struct device_node *dp, | |||
| 793 | return virt_irq; | 793 | return virt_irq; |
| 794 | } | 794 | } |
| 795 | 795 | ||
| 796 | static void schizo_irq_trans_init(struct device_node *dp) | 796 | static void __schizo_irq_trans_init(struct device_node *dp, int is_tomatillo) |
| 797 | { | 797 | { |
| 798 | struct linux_prom64_registers *regs; | 798 | struct linux_prom64_registers *regs; |
| 799 | struct schizo_irq_data *irq_data; | 799 | struct schizo_irq_data *irq_data; |
| @@ -807,11 +807,24 @@ static void schizo_irq_trans_init(struct device_node *dp) | |||
| 807 | dp->irq_trans->data = irq_data; | 807 | dp->irq_trans->data = irq_data; |
| 808 | 808 | ||
| 809 | irq_data->pbm_regs = regs[0].phys_addr; | 809 | irq_data->pbm_regs = regs[0].phys_addr; |
| 810 | irq_data->sync_reg = regs[3].phys_addr + 0x1a18UL; | 810 | if (is_tomatillo) |
| 811 | irq_data->sync_reg = regs[3].phys_addr + 0x1a18UL; | ||
| 812 | else | ||
| 813 | irq_data->sync_reg = 0UL; | ||
| 811 | irq_data->portid = of_getintprop_default(dp, "portid", 0); | 814 | irq_data->portid = of_getintprop_default(dp, "portid", 0); |
| 812 | irq_data->chip_version = of_getintprop_default(dp, "version#", 0); | 815 | irq_data->chip_version = of_getintprop_default(dp, "version#", 0); |
| 813 | } | 816 | } |
| 814 | 817 | ||
| 818 | static void schizo_irq_trans_init(struct device_node *dp) | ||
| 819 | { | ||
| 820 | __schizo_irq_trans_init(dp, 0); | ||
| 821 | } | ||
| 822 | |||
| 823 | static void tomatillo_irq_trans_init(struct device_node *dp) | ||
| 824 | { | ||
| 825 | __schizo_irq_trans_init(dp, 1); | ||
| 826 | } | ||
| 827 | |||
| 815 | static unsigned int pci_sun4v_irq_build(struct device_node *dp, | 828 | static unsigned int pci_sun4v_irq_build(struct device_node *dp, |
| 816 | unsigned int devino, | 829 | unsigned int devino, |
| 817 | void *_data) | 830 | void *_data) |
| @@ -1050,8 +1063,8 @@ static struct irq_trans pci_irq_trans_table[] = { | |||
| 1050 | { "pci108e,8001", schizo_irq_trans_init }, | 1063 | { "pci108e,8001", schizo_irq_trans_init }, |
| 1051 | { "SUNW,schizo+", schizo_irq_trans_init }, | 1064 | { "SUNW,schizo+", schizo_irq_trans_init }, |
| 1052 | { "pci108e,8002", schizo_irq_trans_init }, | 1065 | { "pci108e,8002", schizo_irq_trans_init }, |
| 1053 | { "SUNW,tomatillo", schizo_irq_trans_init }, | 1066 | { "SUNW,tomatillo", tomatillo_irq_trans_init }, |
| 1054 | { "pci108e,a801", schizo_irq_trans_init }, | 1067 | { "pci108e,a801", tomatillo_irq_trans_init }, |
| 1055 | { "SUNW,sun4v-pci", pci_sun4v_irq_trans_init }, | 1068 | { "SUNW,sun4v-pci", pci_sun4v_irq_trans_init }, |
| 1056 | }; | 1069 | }; |
| 1057 | #endif | 1070 | #endif |
| @@ -1079,23 +1092,22 @@ static void sun4v_vdev_irq_trans_init(struct device_node *dp) | |||
| 1079 | 1092 | ||
| 1080 | static void irq_trans_init(struct device_node *dp) | 1093 | static void irq_trans_init(struct device_node *dp) |
| 1081 | { | 1094 | { |
| 1082 | const char *model; | ||
| 1083 | #ifdef CONFIG_PCI | 1095 | #ifdef CONFIG_PCI |
| 1096 | const char *model; | ||
| 1084 | int i; | 1097 | int i; |
| 1085 | #endif | 1098 | #endif |
| 1086 | 1099 | ||
| 1100 | #ifdef CONFIG_PCI | ||
| 1087 | model = of_get_property(dp, "model", NULL); | 1101 | model = of_get_property(dp, "model", NULL); |
| 1088 | if (!model) | 1102 | if (!model) |
| 1089 | model = of_get_property(dp, "compatible", NULL); | 1103 | model = of_get_property(dp, "compatible", NULL); |
| 1090 | if (!model) | 1104 | if (model) { |
| 1091 | return; | 1105 | for (i = 0; i < ARRAY_SIZE(pci_irq_trans_table); i++) { |
| 1092 | 1106 | struct irq_trans *t = &pci_irq_trans_table[i]; | |
| 1093 | #ifdef CONFIG_PCI | ||
| 1094 | for (i = 0; i < ARRAY_SIZE(pci_irq_trans_table); i++) { | ||
| 1095 | struct irq_trans *t = &pci_irq_trans_table[i]; | ||
| 1096 | 1107 | ||
| 1097 | if (!strcmp(model, t->name)) | 1108 | if (!strcmp(model, t->name)) |
| 1098 | return t->init(dp); | 1109 | return t->init(dp); |
| 1110 | } | ||
| 1099 | } | 1111 | } |
| 1100 | #endif | 1112 | #endif |
| 1101 | #ifdef CONFIG_SBUS | 1113 | #ifdef CONFIG_SBUS |
| @@ -1103,8 +1115,9 @@ static void irq_trans_init(struct device_node *dp) | |||
| 1103 | !strcmp(dp->name, "sbi")) | 1115 | !strcmp(dp->name, "sbi")) |
| 1104 | return sbus_irq_trans_init(dp); | 1116 | return sbus_irq_trans_init(dp); |
| 1105 | #endif | 1117 | #endif |
| 1106 | if (!strcmp(dp->name, "central")) | 1118 | if (!strcmp(dp->name, "fhc") && |
| 1107 | return central_irq_trans_init(dp->child); | 1119 | !strcmp(dp->parent->name, "central")) |
| 1120 | return central_irq_trans_init(dp); | ||
| 1108 | if (!strcmp(dp->name, "virtual-devices")) | 1121 | if (!strcmp(dp->name, "virtual-devices")) |
| 1109 | return sun4v_vdev_irq_trans_init(dp); | 1122 | return sun4v_vdev_irq_trans_init(dp); |
| 1110 | } | 1123 | } |
| @@ -1516,7 +1529,7 @@ static char * __init get_one_property(phandle node, const char *name) | |||
| 1516 | return buf; | 1529 | return buf; |
| 1517 | } | 1530 | } |
| 1518 | 1531 | ||
| 1519 | static struct device_node * __init create_node(phandle node) | 1532 | static struct device_node * __init create_node(phandle node, struct device_node *parent) |
| 1520 | { | 1533 | { |
| 1521 | struct device_node *dp; | 1534 | struct device_node *dp; |
| 1522 | 1535 | ||
| @@ -1525,6 +1538,7 @@ static struct device_node * __init create_node(phandle node) | |||
| 1525 | 1538 | ||
| 1526 | dp = prom_early_alloc(sizeof(*dp)); | 1539 | dp = prom_early_alloc(sizeof(*dp)); |
| 1527 | dp->unique_id = unique_id++; | 1540 | dp->unique_id = unique_id++; |
| 1541 | dp->parent = parent; | ||
| 1528 | 1542 | ||
| 1529 | kref_init(&dp->kref); | 1543 | kref_init(&dp->kref); |
| 1530 | 1544 | ||
| @@ -1543,12 +1557,11 @@ static struct device_node * __init build_tree(struct device_node *parent, phandl | |||
| 1543 | { | 1557 | { |
| 1544 | struct device_node *dp; | 1558 | struct device_node *dp; |
| 1545 | 1559 | ||
| 1546 | dp = create_node(node); | 1560 | dp = create_node(node, parent); |
| 1547 | if (dp) { | 1561 | if (dp) { |
| 1548 | *(*nextp) = dp; | 1562 | *(*nextp) = dp; |
| 1549 | *nextp = &dp->allnext; | 1563 | *nextp = &dp->allnext; |
| 1550 | 1564 | ||
| 1551 | dp->parent = parent; | ||
| 1552 | dp->path_component_name = build_path_component(dp); | 1565 | dp->path_component_name = build_path_component(dp); |
| 1553 | dp->full_name = build_full_name(dp); | 1566 | dp->full_name = build_full_name(dp); |
| 1554 | 1567 | ||
| @@ -1564,7 +1577,7 @@ void __init prom_build_devicetree(void) | |||
| 1564 | { | 1577 | { |
| 1565 | struct device_node **nextp; | 1578 | struct device_node **nextp; |
| 1566 | 1579 | ||
| 1567 | allnodes = create_node(prom_root_node); | 1580 | allnodes = create_node(prom_root_node, NULL); |
| 1568 | allnodes->path_component_name = ""; | 1581 | allnodes->path_component_name = ""; |
| 1569 | allnodes->full_name = "/"; | 1582 | allnodes->full_name = "/"; |
| 1570 | 1583 | ||
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 958287448cfe..bf033b31d437 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
| @@ -74,7 +74,6 @@ prom_console_write(struct console *con, const char *s, unsigned n) | |||
| 74 | 74 | ||
| 75 | unsigned int boot_flags = 0; | 75 | unsigned int boot_flags = 0; |
| 76 | #define BOOTME_DEBUG 0x1 | 76 | #define BOOTME_DEBUG 0x1 |
| 77 | #define BOOTME_SINGLE 0x2 | ||
| 78 | 77 | ||
| 79 | /* Exported for mm/init.c:paging_init. */ | 78 | /* Exported for mm/init.c:paging_init. */ |
| 80 | unsigned long cmdline_memory_size = 0; | 79 | unsigned long cmdline_memory_size = 0; |
| @@ -91,16 +90,6 @@ void kernel_enter_debugger(void) | |||
| 91 | { | 90 | { |
| 92 | } | 91 | } |
| 93 | 92 | ||
| 94 | int obp_system_intr(void) | ||
| 95 | { | ||
| 96 | if (boot_flags & BOOTME_DEBUG) { | ||
| 97 | printk("OBP: system interrupted\n"); | ||
| 98 | prom_halt(); | ||
| 99 | return 1; | ||
| 100 | } | ||
| 101 | return 0; | ||
| 102 | } | ||
| 103 | |||
| 104 | /* | 93 | /* |
| 105 | * Process kernel command line switches that are specific to the | 94 | * Process kernel command line switches that are specific to the |
| 106 | * SPARC or that require special low-level processing. | 95 | * SPARC or that require special low-level processing. |
| @@ -112,7 +101,6 @@ static void __init process_switch(char c) | |||
| 112 | boot_flags |= BOOTME_DEBUG; | 101 | boot_flags |= BOOTME_DEBUG; |
| 113 | break; | 102 | break; |
| 114 | case 's': | 103 | case 's': |
| 115 | boot_flags |= BOOTME_SINGLE; | ||
| 116 | break; | 104 | break; |
| 117 | case 'h': | 105 | case 'h': |
| 118 | prom_printf("boot_flags_init: Halt!\n"); | 106 | prom_printf("boot_flags_init: Halt!\n"); |
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index 419a63fca172..9a8026797ac0 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
| @@ -79,7 +79,7 @@ sys_call_table32: | |||
| 79 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 | 79 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 |
| 80 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 80 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 81 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare | 81 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
| 82 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list | 82 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages |
| 83 | 83 | ||
| 84 | #endif /* CONFIG_COMPAT */ | 84 | #endif /* CONFIG_COMPAT */ |
| 85 | 85 | ||
| @@ -149,7 +149,7 @@ sys_call_table: | |||
| 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
| 150 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 150 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
| 152 | /*300*/ .word sys_set_robust_list, sys_get_robust_list | 152 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages |
| 153 | 153 | ||
| 154 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ | 154 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ |
| 155 | defined(CONFIG_SOLARIS_EMUL_MODULE) | 155 | defined(CONFIG_SOLARIS_EMUL_MODULE) |
| @@ -262,5 +262,7 @@ sunos_sys_table: | |||
| 262 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys | 262 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys |
| 263 | .word sunos_nosys, sunos_nosys, sunos_nosys | 263 | .word sunos_nosys, sunos_nosys, sunos_nosys |
| 264 | .word sunos_nosys, sunos_nosys, sunos_nosys | 264 | .word sunos_nosys, sunos_nosys, sunos_nosys |
| 265 | .word sunos_nosys, sunos_nosys, sunos_nosys | 265 | .word sunos_nosys |
| 266 | /*300*/ .word sunos_nosys, sunos_nosys, sunos_nosys | ||
| 267 | |||
| 266 | #endif | 268 | #endif |
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index 68420e2dad0e..fe1796c939c3 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c | |||
| @@ -87,6 +87,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p) | |||
| 87 | i + 1, | 87 | i + 1, |
| 88 | p->trapstack[i].tstate, p->trapstack[i].tpc, | 88 | p->trapstack[i].tstate, p->trapstack[i].tpc, |
| 89 | p->trapstack[i].tnpc, p->trapstack[i].tt); | 89 | p->trapstack[i].tnpc, p->trapstack[i].tt); |
| 90 | print_symbol("TRAPLOG: TPC<%s>\n", p->trapstack[i].tpc); | ||
| 90 | } | 91 | } |
| 91 | } | 92 | } |
| 92 | 93 | ||
| @@ -1134,6 +1135,9 @@ static void cheetah_log_errors(struct pt_regs *regs, struct cheetah_err_info *in | |||
| 1134 | printk("%s" "ERROR(%d): TPC[%lx] TNPC[%lx] O7[%lx] TSTATE[%lx]\n", | 1135 | printk("%s" "ERROR(%d): TPC[%lx] TNPC[%lx] O7[%lx] TSTATE[%lx]\n", |
| 1135 | (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), | 1136 | (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), |
| 1136 | regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate); | 1137 | regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate); |
| 1138 | printk("%s" "ERROR(%d): ", | ||
| 1139 | (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id()); | ||
| 1140 | print_symbol("TPC<%s>\n", regs->tpc); | ||
| 1137 | printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n", | 1141 | printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n", |
| 1138 | (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), | 1142 | (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), |
| 1139 | (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT, | 1143 | (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT, |
| @@ -1741,6 +1745,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) | |||
| 1741 | smp_processor_id(), | 1745 | smp_processor_id(), |
| 1742 | (type & 0x1) ? 'I' : 'D', | 1746 | (type & 0x1) ? 'I' : 'D', |
| 1743 | regs->tpc); | 1747 | regs->tpc); |
| 1748 | print_symbol(KERN_EMERG "TPC<%s>\n", regs->tpc); | ||
| 1744 | panic("Irrecoverable Cheetah+ parity error."); | 1749 | panic("Irrecoverable Cheetah+ parity error."); |
| 1745 | } | 1750 | } |
| 1746 | 1751 | ||
| @@ -1748,6 +1753,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) | |||
| 1748 | smp_processor_id(), | 1753 | smp_processor_id(), |
| 1749 | (type & 0x1) ? 'I' : 'D', | 1754 | (type & 0x1) ? 'I' : 'D', |
| 1750 | regs->tpc); | 1755 | regs->tpc); |
| 1756 | print_symbol(KERN_WARNING "TPC<%s>\n", regs->tpc); | ||
| 1751 | } | 1757 | } |
| 1752 | 1758 | ||
| 1753 | struct sun4v_error_entry { | 1759 | struct sun4v_error_entry { |
| @@ -1946,6 +1952,7 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl) | |||
| 1946 | 1952 | ||
| 1947 | printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n", | 1953 | printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n", |
| 1948 | regs->tpc, tl); | 1954 | regs->tpc, tl); |
| 1955 | print_symbol(KERN_EMERG "SUN4V-ITLB: TPC<%s>\n", regs->tpc); | ||
| 1949 | printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] " | 1956 | printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] " |
| 1950 | "pte[%lx] error[%lx]\n", | 1957 | "pte[%lx] error[%lx]\n", |
| 1951 | sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx, | 1958 | sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx, |
| @@ -1966,6 +1973,7 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl) | |||
| 1966 | 1973 | ||
| 1967 | printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n", | 1974 | printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n", |
| 1968 | regs->tpc, tl); | 1975 | regs->tpc, tl); |
| 1976 | print_symbol(KERN_EMERG "SUN4V-DTLB: TPC<%s>\n", regs->tpc); | ||
| 1969 | printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] " | 1977 | printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] " |
| 1970 | "pte[%lx] error[%lx]\n", | 1978 | "pte[%lx] error[%lx]\n", |
| 1971 | sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx, | 1979 | sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx, |
diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S index b097379a49a8..bd9de8c2a2aa 100644 --- a/arch/sparc64/kernel/vmlinux.lds.S +++ b/arch/sparc64/kernel/vmlinux.lds.S | |||
| @@ -57,13 +57,7 @@ SECTIONS | |||
| 57 | __setup_end = .; | 57 | __setup_end = .; |
| 58 | __initcall_start = .; | 58 | __initcall_start = .; |
| 59 | .initcall.init : { | 59 | .initcall.init : { |
| 60 | *(.initcall1.init) | 60 | INITCALLS |
| 61 | *(.initcall2.init) | ||
| 62 | *(.initcall3.init) | ||
| 63 | *(.initcall4.init) | ||
| 64 | *(.initcall5.init) | ||
| 65 | *(.initcall6.init) | ||
| 66 | *(.initcall7.init) | ||
| 67 | } | 61 | } |
| 68 | __initcall_end = .; | 62 | __initcall_end = .; |
| 69 | __con_initcall_start = .; | 63 | __con_initcall_start = .; |
diff --git a/arch/um/Kconfig b/arch/um/Kconfig index d75307589d74..5ac1f2963ae3 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | config DEFCONFIG_LIST | ||
| 2 | string | ||
| 3 | option defconfig_list | ||
| 4 | default "arch/$ARCH/defconfig" | ||
| 5 | |||
| 1 | # UML uses the generic IRQ sugsystem | 6 | # UML uses the generic IRQ sugsystem |
| 2 | config GENERIC_HARDIRQS | 7 | config GENERIC_HARDIRQS |
| 3 | bool | 8 | bool |
| @@ -25,6 +30,19 @@ config PCI | |||
| 25 | config PCMCIA | 30 | config PCMCIA |
| 26 | bool | 31 | bool |
| 27 | 32 | ||
| 33 | # Yet to do! | ||
| 34 | config TRACE_IRQFLAGS_SUPPORT | ||
| 35 | bool | ||
| 36 | default n | ||
| 37 | |||
| 38 | config LOCKDEP_SUPPORT | ||
| 39 | bool | ||
| 40 | default y | ||
| 41 | |||
| 42 | config STACKTRACE_SUPPORT | ||
| 43 | bool | ||
| 44 | default y | ||
| 45 | |||
| 28 | config GENERIC_CALIBRATE_DELAY | 46 | config GENERIC_CALIBRATE_DELAY |
| 29 | bool | 47 | bool |
| 30 | default y | 48 | default y |
| @@ -37,13 +55,16 @@ config IRQ_RELEASE_METHOD | |||
| 37 | menu "UML-specific options" | 55 | menu "UML-specific options" |
| 38 | 56 | ||
| 39 | config MODE_TT | 57 | config MODE_TT |
| 40 | bool "Tracing thread support" | 58 | bool "Tracing thread support (DEPRECATED)" |
| 41 | default n | 59 | default n |
| 60 | depends on BROKEN | ||
| 42 | help | 61 | help |
| 43 | This option controls whether tracing thread support is compiled | 62 | This option controls whether tracing thread support is compiled |
| 44 | into UML. This option is largely obsolete, given that skas0 provides | 63 | into UML. This option is largely obsolete, given that skas0 provides |
| 45 | skas security and performance without needing to patch the host. | 64 | skas security and performance without needing to patch the host. |
| 46 | It is safe to say 'N' here. | 65 | It is safe to say 'N' here; saying 'Y' may cause additional problems |
| 66 | with the resulting binary even if you run UML in SKAS mode, and running | ||
| 67 | in TT mode is strongly *NOT RECOMMENDED*. | ||
| 47 | 68 | ||
| 48 | config STATIC_LINK | 69 | config STATIC_LINK |
| 49 | bool "Force a static link" | 70 | bool "Force a static link" |
| @@ -56,6 +77,9 @@ config STATIC_LINK | |||
| 56 | for use in a chroot jail. So, if you intend to run UML inside a | 77 | for use in a chroot jail. So, if you intend to run UML inside a |
| 57 | chroot, and you disable CONFIG_MODE_TT, you probably want to say Y | 78 | chroot, and you disable CONFIG_MODE_TT, you probably want to say Y |
| 58 | here. | 79 | here. |
| 80 | Additionally, this option enables using higher memory spaces (up to | ||
| 81 | 2.75G) for UML - disabling CONFIG_MODE_TT and enabling this option leads | ||
| 82 | to best results for this. | ||
| 59 | 83 | ||
| 60 | config KERNEL_HALF_GIGS | 84 | config KERNEL_HALF_GIGS |
| 61 | int "Kernel address space size (in .5G units)" | 85 | int "Kernel address space size (in .5G units)" |
| @@ -72,10 +96,13 @@ config MODE_SKAS | |||
| 72 | default y | 96 | default y |
| 73 | help | 97 | help |
| 74 | This option controls whether skas (separate kernel address space) | 98 | This option controls whether skas (separate kernel address space) |
| 75 | support is compiled in. If you have applied the skas patch to the | 99 | support is compiled in. |
| 76 | host, then you certainly want to say Y here (and consider saying N | 100 | Unless you have specific needs to use TT mode (which applies almost only |
| 77 | to CONFIG_MODE_TT). Otherwise, it is safe to say Y. Disabling this | 101 | to developers), you should say Y here. |
| 78 | option will shrink the UML binary slightly. | 102 | SKAS mode will make use of the SKAS3 patch if it is applied on the host |
| 103 | (and your UML will run in SKAS3 mode), but if no SKAS patch is applied | ||
| 104 | on the host it will run in SKAS0 mode, which is anyway faster than TT | ||
| 105 | mode. | ||
| 79 | 106 | ||
| 80 | source "arch/um/Kconfig.arch" | 107 | source "arch/um/Kconfig.arch" |
| 81 | source "mm/Kconfig" | 108 | source "mm/Kconfig" |
diff --git a/arch/um/Kconfig.char b/arch/um/Kconfig.char index 62d87b71179b..e03e40c7aac3 100644 --- a/arch/um/Kconfig.char +++ b/arch/um/Kconfig.char | |||
| @@ -190,6 +190,11 @@ config HOSTAUDIO | |||
| 190 | tristate | 190 | tristate |
| 191 | default UML_SOUND | 191 | default UML_SOUND |
| 192 | 192 | ||
| 193 | #It is selected elsewhere, so kconfig would warn without this. | ||
| 194 | config HW_RANDOM | ||
| 195 | tristate | ||
| 196 | default n | ||
| 197 | |||
| 193 | config UML_RANDOM | 198 | config UML_RANDOM |
| 194 | tristate "Hardware random number generator" | 199 | tristate "Hardware random number generator" |
| 195 | help | 200 | help |
diff --git a/arch/um/Kconfig.i386 b/arch/um/Kconfig.i386 index f6eb72d117b9..f191a550a079 100644 --- a/arch/um/Kconfig.i386 +++ b/arch/um/Kconfig.i386 | |||
| @@ -16,23 +16,42 @@ config SEMAPHORE_SLEEPERS | |||
| 16 | bool | 16 | bool |
| 17 | default y | 17 | default y |
| 18 | 18 | ||
| 19 | config HOST_2G_2G | 19 | choice |
| 20 | bool "2G/2G host address space split" | 20 | prompt "Host memory split" |
| 21 | default n | 21 | default HOST_VMSPLIT_3G |
| 22 | help | 22 | ---help--- |
| 23 | This is needed when the host on which you run has a 2G/2G memory | 23 | This is needed when the host kernel on which you run has a non-default |
| 24 | split, instead of the customary 3G/1G. | 24 | (like 2G/2G) memory split, instead of the customary 3G/1G. If you did |
| 25 | 25 | not recompile your own kernel but use the default distro's one, you can | |
| 26 | Note that to enable such a host | 26 | safely accept the "Default split" option. |
| 27 | configuration, which makes sense only in some cases, you need special | 27 | |
| 28 | host patches. | 28 | It can be enabled on recent (>=2.6.16-rc2) vanilla kernels via |
| 29 | 29 | CONFIG_VM_SPLIT_*, or on previous kernels with special patches (-ck | |
| 30 | So, if you do not know what to do here, say 'N'. | 30 | patchset by Con Kolivas, or other ones) - option names match closely the |
| 31 | host CONFIG_VM_SPLIT_* ones. | ||
| 32 | |||
| 33 | A lower setting (where 1G/3G is lowest and 3G/1G is higher) will | ||
| 34 | tolerate even more "normal" host kernels, but an higher setting will be | ||
| 35 | stricter. | ||
| 36 | |||
| 37 | So, if you do not know what to do here, say 'Default split'. | ||
| 38 | |||
| 39 | config HOST_VMSPLIT_3G | ||
| 40 | bool "Default split (3G/1G user/kernel host split)" | ||
| 41 | config HOST_VMSPLIT_3G_OPT | ||
| 42 | bool "3G/1G user/kernel host split (for full 1G low memory)" | ||
| 43 | config HOST_VMSPLIT_2G | ||
| 44 | bool "2G/2G user/kernel host split" | ||
| 45 | config HOST_VMSPLIT_1G | ||
| 46 | bool "1G/3G user/kernel host split" | ||
| 47 | endchoice | ||
| 31 | 48 | ||
| 32 | config TOP_ADDR | 49 | config TOP_ADDR |
| 33 | hex | 50 | hex |
| 34 | default 0xc0000000 if !HOST_2G_2G | 51 | default 0xB0000000 if HOST_VMSPLIT_3G_OPT |
| 35 | default 0x80000000 if HOST_2G_2G | 52 | default 0x78000000 if HOST_VMSPLIT_2G |
| 53 | default 0x40000000 if HOST_VMSPLIT_1G | ||
| 54 | default 0xC0000000 | ||
| 36 | 55 | ||
| 37 | config 3_LEVEL_PGTABLES | 56 | config 3_LEVEL_PGTABLES |
| 38 | bool "Three-level pagetables (EXPERIMENTAL)" | 57 | bool "Three-level pagetables (EXPERIMENTAL)" |
diff --git a/arch/um/Makefile b/arch/um/Makefile index c8016a98483b..5d5ed726faa0 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
| @@ -64,9 +64,14 @@ CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ | |||
| 64 | 64 | ||
| 65 | AFLAGS += $(ARCH_INCLUDE) | 65 | AFLAGS += $(ARCH_INCLUDE) |
| 66 | 66 | ||
| 67 | USER_CFLAGS := $(patsubst -I%,,$(CFLAGS)) | 67 | USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\ |
| 68 | USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \ | 68 | $(patsubst -I%,,$(CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \ |
| 69 | $(MODE_INCLUDE) -D_FILE_OFFSET_BITS=64 | 69 | -D_FILE_OFFSET_BITS=64 |
| 70 | |||
| 71 | include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH) | ||
| 72 | |||
| 73 | #This will adjust *FLAGS accordingly to the platform. | ||
| 74 | include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS) | ||
| 70 | 75 | ||
| 71 | # -Derrno=kernel_errno - This turns all kernel references to errno into | 76 | # -Derrno=kernel_errno - This turns all kernel references to errno into |
| 72 | # kernel_errno to separate them from the libc errno. This allows -fno-common | 77 | # kernel_errno to separate them from the libc errno. This allows -fno-common |
| @@ -74,15 +79,11 @@ USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \ | |||
| 74 | # errnos. | 79 | # errnos. |
| 75 | # These apply to kernelspace only. | 80 | # These apply to kernelspace only. |
| 76 | 81 | ||
| 77 | CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ | 82 | KERNEL_DEFINES = -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ |
| 78 | -Dmktime=kernel_mktime | 83 | -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES) |
| 84 | CFLAGS += $(KERNEL_DEFINES) | ||
| 79 | CFLAGS += $(call cc-option,-fno-unit-at-a-time,) | 85 | CFLAGS += $(call cc-option,-fno-unit-at-a-time,) |
| 80 | 86 | ||
| 81 | include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH) | ||
| 82 | |||
| 83 | #This will adjust *FLAGS accordingly to the platform. | ||
| 84 | include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS) | ||
| 85 | |||
| 86 | # These are needed for clean and mrproper, since in that case .config is not | 87 | # These are needed for clean and mrproper, since in that case .config is not |
| 87 | # included; the values here are meaningless | 88 | # included; the values here are meaningless |
| 88 | 89 | ||
diff --git a/arch/um/Makefile-i386 b/arch/um/Makefile-i386 index b65ca115ef77..c9f1c5b24c9a 100644 --- a/arch/um/Makefile-i386 +++ b/arch/um/Makefile-i386 | |||
| @@ -16,7 +16,6 @@ OBJCOPYFLAGS := -O binary -R .note -R .comment -S | |||
| 16 | ifeq ("$(origin SUBARCH)", "command line") | 16 | ifeq ("$(origin SUBARCH)", "command line") |
| 17 | ifneq ("$(shell uname -m | sed -e s/i.86/i386/)", "$(SUBARCH)") | 17 | ifneq ("$(shell uname -m | sed -e s/i.86/i386/)", "$(SUBARCH)") |
| 18 | CFLAGS += $(call cc-option,-m32) | 18 | CFLAGS += $(call cc-option,-m32) |
| 19 | USER_CFLAGS += $(call cc-option,-m32) | ||
| 20 | AFLAGS += $(call cc-option,-m32) | 19 | AFLAGS += $(call cc-option,-m32) |
| 21 | LINK-y += $(call cc-option,-m32) | 20 | LINK-y += $(call cc-option,-m32) |
| 22 | UML_OBJCOPYFLAGS += -F $(ELF_FORMAT) | 21 | UML_OBJCOPYFLAGS += -F $(ELF_FORMAT) |
| @@ -25,7 +24,7 @@ export LDFLAGS HOSTCFLAGS HOSTLDFLAGS UML_OBJCOPYFLAGS | |||
| 25 | endif | 24 | endif |
| 26 | endif | 25 | endif |
| 27 | 26 | ||
| 28 | CFLAGS += -U__$(SUBARCH)__ -U$(SUBARCH) | 27 | ARCH_KERNEL_DEFINES += -U__$(SUBARCH)__ -U$(SUBARCH) |
| 29 | 28 | ||
| 30 | # First of all, tune CFLAGS for the specific CPU. This actually sets cflags-y. | 29 | # First of all, tune CFLAGS for the specific CPU. This actually sets cflags-y. |
| 31 | include $(srctree)/arch/i386/Makefile.cpu | 30 | include $(srctree)/arch/i386/Makefile.cpu |
| @@ -38,4 +37,3 @@ cflags-y += $(call cc-option,-mpreferred-stack-boundary=2) | |||
| 38 | cflags-y += -ffreestanding | 37 | cflags-y += -ffreestanding |
| 39 | 38 | ||
| 40 | CFLAGS += $(cflags-y) | 39 | CFLAGS += $(cflags-y) |
| 41 | USER_CFLAGS += $(cflags-y) | ||
diff --git a/arch/um/Makefile-x86_64 b/arch/um/Makefile-x86_64 index 11154b6773ec..69ecea63fdae 100644 --- a/arch/um/Makefile-x86_64 +++ b/arch/um/Makefile-x86_64 | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | # Copyright 2003 - 2004 Pathscale, Inc | 1 | # Copyright 2003 - 2004 Pathscale, Inc |
| 2 | # Released under the GPL | 2 | # Released under the GPL |
| 3 | 3 | ||
| 4 | core-y += arch/um/sys-x86_64/ | 4 | core-y += arch/um/sys-x86_64/ arch/x86_64/crypto/ |
| 5 | START := 0x60000000 | 5 | START := 0x60000000 |
| 6 | 6 | ||
| 7 | _extra_flags_ = -fno-builtin -m64 -mcmodel=kernel | 7 | _extra_flags_ = -fno-builtin -m64 |
| 8 | 8 | ||
| 9 | #We #undef __x86_64__ for kernelspace, not for userspace where | 9 | #We #undef __x86_64__ for kernelspace, not for userspace where |
| 10 | #it's needed for headers to work! | 10 | #it's needed for headers to work! |
| 11 | CFLAGS += -U__$(SUBARCH)__ $(_extra_flags_) | 11 | ARCH_KERNEL_DEFINES = -U__$(SUBARCH)__ |
| 12 | USER_CFLAGS += $(_extra_flags_) | 12 | CFLAGS += $(_extra_flags_) |
| 13 | 13 | ||
| 14 | CHECKFLAGS += -m64 | 14 | CHECKFLAGS += -m64 |
| 15 | AFLAGS += -m64 | 15 | AFLAGS += -m64 |
diff --git a/arch/um/drivers/cow_sys.h b/arch/um/drivers/cow_sys.h index 7a5b4afde692..c6a308464acb 100644 --- a/arch/um/drivers/cow_sys.h +++ b/arch/um/drivers/cow_sys.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include "user_util.h" | 5 | #include "user_util.h" |
| 6 | #include "os.h" | 6 | #include "os.h" |
| 7 | #include "user.h" | 7 | #include "user.h" |
| 8 | #include "um_malloc.h" | ||
| 8 | 9 | ||
| 9 | static inline void *cow_malloc(int size) | 10 | static inline void *cow_malloc(int size) |
| 10 | { | 11 | { |
diff --git a/arch/um/drivers/daemon_user.c b/arch/um/drivers/daemon_user.c index 77954ea77043..310af0f1e49e 100644 --- a/arch/um/drivers/daemon_user.c +++ b/arch/um/drivers/daemon_user.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include "user_util.h" | 17 | #include "user_util.h" |
| 18 | #include "user.h" | 18 | #include "user.h" |
| 19 | #include "os.h" | 19 | #include "os.h" |
| 20 | #include "um_malloc.h" | ||
| 20 | 21 | ||
| 21 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) | 22 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) |
| 22 | 23 | ||
diff --git a/arch/um/drivers/fd.c b/arch/um/drivers/fd.c index 108b7dafbd0e..218aa0e9b792 100644 --- a/arch/um/drivers/fd.c +++ b/arch/um/drivers/fd.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include "user_util.h" | 12 | #include "user_util.h" |
| 13 | #include "chan_user.h" | 13 | #include "chan_user.h" |
| 14 | #include "os.h" | 14 | #include "os.h" |
| 15 | #include "um_malloc.h" | ||
| 15 | 16 | ||
| 16 | struct fd_chan { | 17 | struct fd_chan { |
| 17 | int fd; | 18 | int fd; |
diff --git a/arch/um/drivers/mcast_user.c b/arch/um/drivers/mcast_user.c index 4d2bd39a85bc..8138f5ea1bf7 100644 --- a/arch/um/drivers/mcast_user.c +++ b/arch/um/drivers/mcast_user.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include "user_util.h" | 23 | #include "user_util.h" |
| 24 | #include "user.h" | 24 | #include "user.h" |
| 25 | #include "os.h" | 25 | #include "os.h" |
| 26 | #include "um_malloc.h" | ||
| 26 | 27 | ||
| 27 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) | 28 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) |
| 28 | 29 | ||
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index d08bd036ccb8..7b172160fe04 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
| @@ -79,7 +79,7 @@ static irqreturn_t mconsole_interrupt(int irq, void *dev_id) | |||
| 79 | /* long to avoid size mismatch warnings from gcc */ | 79 | /* long to avoid size mismatch warnings from gcc */ |
| 80 | long fd; | 80 | long fd; |
| 81 | struct mconsole_entry *new; | 81 | struct mconsole_entry *new; |
| 82 | struct mc_request req; | 82 | static struct mc_request req; /* that's OK */ |
| 83 | 83 | ||
| 84 | fd = (long) dev_id; | 84 | fd = (long) dev_id; |
| 85 | while (mconsole_get_request(fd, &req)){ | 85 | while (mconsole_get_request(fd, &req)){ |
| @@ -91,6 +91,7 @@ static irqreturn_t mconsole_interrupt(int irq, void *dev_id) | |||
| 91 | mconsole_reply(&req, "Out of memory", 1, 0); | 91 | mconsole_reply(&req, "Out of memory", 1, 0); |
| 92 | else { | 92 | else { |
| 93 | new->request = req; | 93 | new->request = req; |
| 94 | new->request.regs = get_irq_regs()->regs; | ||
| 94 | list_add(&new->list, &mc_requests); | 95 | list_add(&new->list, &mc_requests); |
| 95 | } | 96 | } |
| 96 | } | 97 | } |
| @@ -314,9 +315,21 @@ void mconsole_stop(struct mc_request *req) | |||
| 314 | { | 315 | { |
| 315 | deactivate_fd(req->originating_fd, MCONSOLE_IRQ); | 316 | deactivate_fd(req->originating_fd, MCONSOLE_IRQ); |
| 316 | os_set_fd_block(req->originating_fd, 1); | 317 | os_set_fd_block(req->originating_fd, 1); |
| 317 | mconsole_reply(req, "", 0, 0); | 318 | mconsole_reply(req, "stopped", 0, 0); |
| 318 | while(mconsole_get_request(req->originating_fd, req)){ | 319 | while (mconsole_get_request(req->originating_fd, req)) { |
| 319 | if(req->cmd->handler == mconsole_go) break; | 320 | if (req->cmd->handler == mconsole_go) |
| 321 | break; | ||
| 322 | if (req->cmd->handler == mconsole_stop) { | ||
| 323 | mconsole_reply(req, "Already stopped", 1, 0); | ||
| 324 | continue; | ||
| 325 | } | ||
| 326 | if (req->cmd->handler == mconsole_sysrq) { | ||
| 327 | struct pt_regs *old_regs; | ||
| 328 | old_regs = set_irq_regs((struct pt_regs *)&req->regs); | ||
| 329 | mconsole_sysrq(req); | ||
| 330 | set_irq_regs(old_regs); | ||
| 331 | continue; | ||
| 332 | } | ||
| 320 | (*req->cmd->handler)(req); | 333 | (*req->cmd->handler)(req); |
| 321 | } | 334 | } |
| 322 | os_set_fd_block(req->originating_fd, 0); | 335 | os_set_fd_block(req->originating_fd, 0); |
| @@ -673,9 +686,7 @@ static void with_console(struct mc_request *req, void (*proc)(void *), | |||
| 673 | static void sysrq_proc(void *arg) | 686 | static void sysrq_proc(void *arg) |
| 674 | { | 687 | { |
| 675 | char *op = arg; | 688 | char *op = arg; |
| 676 | struct pt_regs *old_regs = set_irq_regs(¤t->thread.regs); | ||
| 677 | handle_sysrq(*op, NULL); | 689 | handle_sysrq(*op, NULL); |
| 678 | set_irq_regs(old_regs); | ||
| 679 | } | 690 | } |
| 680 | 691 | ||
| 681 | void mconsole_sysrq(struct mc_request *req) | 692 | void mconsole_sysrq(struct mc_request *req) |
diff --git a/arch/um/drivers/mconsole_user.c b/arch/um/drivers/mconsole_user.c index 17068eb746c0..75aef6f7ef6e 100644 --- a/arch/um/drivers/mconsole_user.c +++ b/arch/um/drivers/mconsole_user.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <sys/un.h> | 14 | #include <sys/un.h> |
| 15 | #include <unistd.h> | 15 | #include <unistd.h> |
| 16 | #include "user.h" | 16 | #include "user.h" |
| 17 | #include "sysdep/ptrace.h" | ||
| 17 | #include "mconsole.h" | 18 | #include "mconsole.h" |
| 18 | #include "umid.h" | 19 | #include "umid.h" |
| 19 | #include "user_util.h" | 20 | #include "user_util.h" |
diff --git a/arch/um/drivers/mmapper_kern.c b/arch/um/drivers/mmapper_kern.c index 9a3b5daf6250..df3516e47d4d 100644 --- a/arch/um/drivers/mmapper_kern.c +++ b/arch/um/drivers/mmapper_kern.c | |||
| @@ -95,7 +95,8 @@ static const struct file_operations mmapper_fops = { | |||
| 95 | .release = mmapper_release, | 95 | .release = mmapper_release, |
| 96 | }; | 96 | }; |
| 97 | 97 | ||
| 98 | static const struct miscdevice mmapper_dev = { | 98 | /* No locking needed - only used (and modified) by below initcall and exitcall. */ |
| 99 | static struct miscdevice mmapper_dev = { | ||
| 99 | .minor = MISC_DYNAMIC_MINOR, | 100 | .minor = MISC_DYNAMIC_MINOR, |
| 100 | .name = "mmapper", | 101 | .name = "mmapper", |
| 101 | .fops = &mmapper_fops | 102 | .fops = &mmapper_fops |
diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c index f3a3f8a29c7a..0ffd7ac295d4 100644 --- a/arch/um/drivers/net_user.c +++ b/arch/um/drivers/net_user.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "kern_util.h" | 18 | #include "kern_util.h" |
| 19 | #include "net_user.h" | 19 | #include "net_user.h" |
| 20 | #include "os.h" | 20 | #include "os.h" |
| 21 | #include "um_malloc.h" | ||
| 21 | 22 | ||
| 22 | int tap_open_common(void *dev, char *gate_addr) | 23 | int tap_open_common(void *dev, char *gate_addr) |
| 23 | { | 24 | { |
diff --git a/arch/um/drivers/pcap_user.c b/arch/um/drivers/pcap_user.c index 2ef641ded960..11921a7baa7b 100644 --- a/arch/um/drivers/pcap_user.c +++ b/arch/um/drivers/pcap_user.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include "net_user.h" | 12 | #include "net_user.h" |
| 13 | #include "pcap_user.h" | 13 | #include "pcap_user.h" |
| 14 | #include "user.h" | 14 | #include "user.h" |
| 15 | #include "um_malloc.h" | ||
| 15 | 16 | ||
| 16 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) | 17 | #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) |
| 17 | 18 | ||
diff --git a/arch/um/drivers/port_user.c b/arch/um/drivers/port_user.c index f2e8fc42ecc2..bc6afaf74c1a 100644 --- a/arch/um/drivers/port_user.c +++ b/arch/um/drivers/port_user.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include "chan_user.h" | 19 | #include "chan_user.h" |
| 20 | #include "port.h" | 20 | #include "port.h" |
| 21 | #include "os.h" | 21 | #include "os.h" |
| 22 | #include "um_malloc.h" | ||
| 22 | 23 | ||
| 23 | struct port_chan { | 24 | struct port_chan { |
| 24 | int raw; | 25 | int raw; |
diff --git a/arch/um/drivers/pty.c b/arch/um/drivers/pty.c index abec620e8380..829a5eca8c07 100644 --- a/arch/um/drivers/pty.c +++ b/arch/um/drivers/pty.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "user_util.h" | 13 | #include "user_util.h" |
| 14 | #include "kern_util.h" | 14 | #include "kern_util.h" |
| 15 | #include "os.h" | 15 | #include "os.h" |
| 16 | #include "um_malloc.h" | ||
| 16 | 17 | ||
| 17 | struct pty_chan { | 18 | struct pty_chan { |
| 18 | void (*announce)(char *dev_name, int dev); | 19 | void (*announce)(char *dev_name, int dev); |
diff --git a/arch/um/drivers/slip_user.c b/arch/um/drivers/slip_user.c index 8460285c69a5..7eddacc53b6e 100644 --- a/arch/um/drivers/slip_user.c +++ b/arch/um/drivers/slip_user.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include "slip.h" | 15 | #include "slip.h" |
| 16 | #include "slip_common.h" | 16 | #include "slip_common.h" |
| 17 | #include "os.h" | 17 | #include "os.h" |
| 18 | #include "um_malloc.h" | ||
| 18 | 19 | ||
| 19 | void slip_user_init(void *data, void *dev) | 20 | void slip_user_init(void *data, void *dev) |
| 20 | { | 21 | { |
diff --git a/arch/um/drivers/tty.c b/arch/um/drivers/tty.c index 11de3ac1eb5c..d95d64309eaf 100644 --- a/arch/um/drivers/tty.c +++ b/arch/um/drivers/tty.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "user_util.h" | 11 | #include "user_util.h" |
| 12 | #include "user.h" | 12 | #include "user.h" |
| 13 | #include "os.h" | 13 | #include "os.h" |
| 14 | #include "um_malloc.h" | ||
| 14 | 15 | ||
| 15 | struct tty_chan { | 16 | struct tty_chan { |
| 16 | char *dev; | 17 | char *dev; |
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index bc458f57921b..49c047b75cc5 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
| @@ -106,10 +106,15 @@ static inline void ubd_set_bit(__u64 bit, unsigned char *data) | |||
| 106 | 106 | ||
| 107 | #define DRIVER_NAME "uml-blkdev" | 107 | #define DRIVER_NAME "uml-blkdev" |
| 108 | 108 | ||
| 109 | /* Can be taken in interrupt context, and is passed to the block layer to lock | ||
| 110 | * the request queue. Kernel side code knows that. */ | ||
| 109 | static DEFINE_SPINLOCK(ubd_io_lock); | 111 | static DEFINE_SPINLOCK(ubd_io_lock); |
| 110 | static DEFINE_SPINLOCK(ubd_lock); | ||
| 111 | 112 | ||
| 112 | static void (*do_ubd)(void); | 113 | static DEFINE_MUTEX(ubd_lock); |
| 114 | |||
| 115 | /* XXX - this made sense in 2.4 days, now it's only used as a boolean, and | ||
| 116 | * probably it doesn't make sense even for that. */ | ||
| 117 | static int do_ubd; | ||
| 113 | 118 | ||
| 114 | static int ubd_open(struct inode * inode, struct file * filp); | 119 | static int ubd_open(struct inode * inode, struct file * filp); |
| 115 | static int ubd_release(struct inode * inode, struct file * file); | 120 | static int ubd_release(struct inode * inode, struct file * file); |
| @@ -117,7 +122,7 @@ static int ubd_ioctl(struct inode * inode, struct file * file, | |||
| 117 | unsigned int cmd, unsigned long arg); | 122 | unsigned int cmd, unsigned long arg); |
| 118 | static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo); | 123 | static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo); |
| 119 | 124 | ||
| 120 | #define MAX_DEV (8) | 125 | #define MAX_DEV (16) |
| 121 | 126 | ||
| 122 | static struct block_device_operations ubd_blops = { | 127 | static struct block_device_operations ubd_blops = { |
| 123 | .owner = THIS_MODULE, | 128 | .owner = THIS_MODULE, |
| @@ -150,8 +155,9 @@ static struct gendisk *fake_gendisk[MAX_DEV]; | |||
| 150 | static struct openflags global_openflags = OPEN_FLAGS; | 155 | static struct openflags global_openflags = OPEN_FLAGS; |
| 151 | 156 | ||
| 152 | struct cow { | 157 | struct cow { |
| 153 | /* This is the backing file, actually */ | 158 | /* backing file name */ |
| 154 | char *file; | 159 | char *file; |
| 160 | /* backing file fd */ | ||
| 155 | int fd; | 161 | int fd; |
| 156 | unsigned long *bitmap; | 162 | unsigned long *bitmap; |
| 157 | unsigned long bitmap_len; | 163 | unsigned long bitmap_len; |
| @@ -160,14 +166,16 @@ struct cow { | |||
| 160 | }; | 166 | }; |
| 161 | 167 | ||
| 162 | struct ubd { | 168 | struct ubd { |
| 169 | /* name (and fd, below) of the file opened for writing, either the | ||
| 170 | * backing or the cow file. */ | ||
| 163 | char *file; | 171 | char *file; |
| 164 | int count; | 172 | int count; |
| 165 | int fd; | 173 | int fd; |
| 166 | __u64 size; | 174 | __u64 size; |
| 167 | struct openflags boot_openflags; | 175 | struct openflags boot_openflags; |
| 168 | struct openflags openflags; | 176 | struct openflags openflags; |
| 169 | int shared; | 177 | unsigned shared:1; |
| 170 | int no_cow; | 178 | unsigned no_cow:1; |
| 171 | struct cow cow; | 179 | struct cow cow; |
| 172 | struct platform_device pdev; | 180 | struct platform_device pdev; |
| 173 | }; | 181 | }; |
| @@ -192,18 +200,7 @@ struct ubd { | |||
| 192 | .cow = DEFAULT_COW, \ | 200 | .cow = DEFAULT_COW, \ |
| 193 | } | 201 | } |
| 194 | 202 | ||
| 195 | struct ubd ubd_dev[MAX_DEV] = { [ 0 ... MAX_DEV - 1 ] = DEFAULT_UBD }; | 203 | struct ubd ubd_devs[MAX_DEV] = { [ 0 ... MAX_DEV - 1 ] = DEFAULT_UBD }; |
| 196 | |||
| 197 | static int ubd0_init(void) | ||
| 198 | { | ||
| 199 | struct ubd *dev = &ubd_dev[0]; | ||
| 200 | |||
| 201 | if(dev->file == NULL) | ||
| 202 | dev->file = "root_fs"; | ||
| 203 | return(0); | ||
| 204 | } | ||
| 205 | |||
| 206 | __initcall(ubd0_init); | ||
| 207 | 204 | ||
| 208 | /* Only changed by fake_ide_setup which is a setup */ | 205 | /* Only changed by fake_ide_setup which is a setup */ |
| 209 | static int fake_ide = 0; | 206 | static int fake_ide = 0; |
| @@ -277,7 +274,7 @@ static int parse_unit(char **ptr) | |||
| 277 | return(-1); | 274 | return(-1); |
| 278 | *ptr = end; | 275 | *ptr = end; |
| 279 | } | 276 | } |
| 280 | else if (('a' <= *str) && (*str <= 'h')) { | 277 | else if (('a' <= *str) && (*str <= 'z')) { |
| 281 | n = *str - 'a'; | 278 | n = *str - 'a'; |
| 282 | str++; | 279 | str++; |
| 283 | *ptr = str; | 280 | *ptr = str; |
| @@ -285,9 +282,13 @@ static int parse_unit(char **ptr) | |||
| 285 | return(n); | 282 | return(n); |
| 286 | } | 283 | } |
| 287 | 284 | ||
| 285 | /* If *index_out == -1 at exit, the passed option was a general one; | ||
| 286 | * otherwise, the str pointer is used (and owned) inside ubd_devs array, so it | ||
| 287 | * should not be freed on exit. | ||
| 288 | */ | ||
| 288 | static int ubd_setup_common(char *str, int *index_out) | 289 | static int ubd_setup_common(char *str, int *index_out) |
| 289 | { | 290 | { |
| 290 | struct ubd *dev; | 291 | struct ubd *ubd_dev; |
| 291 | struct openflags flags = global_openflags; | 292 | struct openflags flags = global_openflags; |
| 292 | char *backing_file; | 293 | char *backing_file; |
| 293 | int n, err, i; | 294 | int n, err, i; |
| @@ -311,7 +312,7 @@ static int ubd_setup_common(char *str, int *index_out) | |||
| 311 | } | 312 | } |
| 312 | 313 | ||
| 313 | err = 1; | 314 | err = 1; |
| 314 | spin_lock(&ubd_lock); | 315 | mutex_lock(&ubd_lock); |
| 315 | if(fake_major != MAJOR_NR){ | 316 | if(fake_major != MAJOR_NR){ |
| 316 | printk(KERN_ERR "Can't assign a fake major twice\n"); | 317 | printk(KERN_ERR "Can't assign a fake major twice\n"); |
| 317 | goto out1; | 318 | goto out1; |
| @@ -323,7 +324,7 @@ static int ubd_setup_common(char *str, int *index_out) | |||
| 323 | major); | 324 | major); |
| 324 | err = 0; | 325 | err = 0; |
| 325 | out1: | 326 | out1: |
| 326 | spin_unlock(&ubd_lock); | 327 | mutex_unlock(&ubd_lock); |
| 327 | return(err); | 328 | return(err); |
| 328 | } | 329 | } |
| 329 | 330 | ||
| @@ -340,10 +341,10 @@ static int ubd_setup_common(char *str, int *index_out) | |||
| 340 | } | 341 | } |
| 341 | 342 | ||
| 342 | err = 1; | 343 | err = 1; |
| 343 | spin_lock(&ubd_lock); | 344 | mutex_lock(&ubd_lock); |
| 344 | 345 | ||
| 345 | dev = &ubd_dev[n]; | 346 | ubd_dev = &ubd_devs[n]; |
| 346 | if(dev->file != NULL){ | 347 | if(ubd_dev->file != NULL){ |
| 347 | printk(KERN_ERR "ubd_setup : device already configured\n"); | 348 | printk(KERN_ERR "ubd_setup : device already configured\n"); |
| 348 | goto out; | 349 | goto out; |
| 349 | } | 350 | } |
| @@ -360,10 +361,10 @@ static int ubd_setup_common(char *str, int *index_out) | |||
| 360 | flags.s = 1; | 361 | flags.s = 1; |
| 361 | break; | 362 | break; |
| 362 | case 'd': | 363 | case 'd': |
| 363 | dev->no_cow = 1; | 364 | ubd_dev->no_cow = 1; |
| 364 | break; | 365 | break; |
| 365 | case 'c': | 366 | case 'c': |
| 366 | dev->shared = 1; | 367 | ubd_dev->shared = 1; |
| 367 | break; | 368 | break; |
| 368 | case '=': | 369 | case '=': |
| 369 | str++; | 370 | str++; |
| @@ -390,7 +391,7 @@ break_loop: | |||
| 390 | } | 391 | } |
| 391 | 392 | ||
| 392 | if(backing_file){ | 393 | if(backing_file){ |
| 393 | if(dev->no_cow) | 394 | if(ubd_dev->no_cow) |
| 394 | printk(KERN_ERR "Can't specify both 'd' and a " | 395 | printk(KERN_ERR "Can't specify both 'd' and a " |
| 395 | "cow file\n"); | 396 | "cow file\n"); |
| 396 | else { | 397 | else { |
| @@ -398,11 +399,11 @@ break_loop: | |||
| 398 | backing_file++; | 399 | backing_file++; |
| 399 | } | 400 | } |
| 400 | } | 401 | } |
| 401 | dev->file = str; | 402 | ubd_dev->file = str; |
| 402 | dev->cow.file = backing_file; | 403 | ubd_dev->cow.file = backing_file; |
| 403 | dev->boot_openflags = flags; | 404 | ubd_dev->boot_openflags = flags; |
| 404 | out: | 405 | out: |
| 405 | spin_unlock(&ubd_lock); | 406 | mutex_unlock(&ubd_lock); |
| 406 | return(err); | 407 | return(err); |
| 407 | } | 408 | } |
| 408 | 409 | ||
| @@ -472,8 +473,9 @@ int thread_fd = -1; | |||
| 472 | 473 | ||
| 473 | /* Changed by ubd_handler, which is serialized because interrupts only | 474 | /* Changed by ubd_handler, which is serialized because interrupts only |
| 474 | * happen on CPU 0. | 475 | * happen on CPU 0. |
| 476 | * XXX: currently unused. | ||
| 475 | */ | 477 | */ |
| 476 | int intr_count = 0; | 478 | static int intr_count = 0; |
| 477 | 479 | ||
| 478 | /* call ubd_finish if you need to serialize */ | 480 | /* call ubd_finish if you need to serialize */ |
| 479 | static void __ubd_finish(struct request *req, int error) | 481 | static void __ubd_finish(struct request *req, int error) |
| @@ -493,6 +495,8 @@ static void __ubd_finish(struct request *req, int error) | |||
| 493 | end_request(req, 1); | 495 | end_request(req, 1); |
| 494 | } | 496 | } |
| 495 | 497 | ||
| 498 | /* Callable only from interrupt context - otherwise you need to do | ||
| 499 | * spin_lock_irq()/spin_lock_irqsave() */ | ||
| 496 | static inline void ubd_finish(struct request *req, int error) | 500 | static inline void ubd_finish(struct request *req, int error) |
| 497 | { | 501 | { |
| 498 | spin_lock(&ubd_io_lock); | 502 | spin_lock(&ubd_io_lock); |
| @@ -500,14 +504,15 @@ static inline void ubd_finish(struct request *req, int error) | |||
| 500 | spin_unlock(&ubd_io_lock); | 504 | spin_unlock(&ubd_io_lock); |
| 501 | } | 505 | } |
| 502 | 506 | ||
| 503 | /* Called without ubd_io_lock held */ | 507 | /* XXX - move this inside ubd_intr. */ |
| 508 | /* Called without ubd_io_lock held, and only in interrupt context. */ | ||
| 504 | static void ubd_handler(void) | 509 | static void ubd_handler(void) |
| 505 | { | 510 | { |
| 506 | struct io_thread_req req; | 511 | struct io_thread_req req; |
| 507 | struct request *rq = elv_next_request(ubd_queue); | 512 | struct request *rq = elv_next_request(ubd_queue); |
| 508 | int n; | 513 | int n; |
| 509 | 514 | ||
| 510 | do_ubd = NULL; | 515 | do_ubd = 0; |
| 511 | intr_count++; | 516 | intr_count++; |
| 512 | n = os_read_file(thread_fd, &req, sizeof(req)); | 517 | n = os_read_file(thread_fd, &req, sizeof(req)); |
| 513 | if(n != sizeof(req)){ | 518 | if(n != sizeof(req)){ |
| @@ -521,7 +526,9 @@ static void ubd_handler(void) | |||
| 521 | 526 | ||
| 522 | ubd_finish(rq, req.error); | 527 | ubd_finish(rq, req.error); |
| 523 | reactivate_fd(thread_fd, UBD_IRQ); | 528 | reactivate_fd(thread_fd, UBD_IRQ); |
| 529 | spin_lock(&ubd_io_lock); | ||
| 524 | do_ubd_request(ubd_queue); | 530 | do_ubd_request(ubd_queue); |
| 531 | spin_unlock(&ubd_io_lock); | ||
| 525 | } | 532 | } |
| 526 | 533 | ||
| 527 | static irqreturn_t ubd_intr(int irq, void *dev) | 534 | static irqreturn_t ubd_intr(int irq, void *dev) |
| @@ -541,87 +548,90 @@ void kill_io_thread(void) | |||
| 541 | 548 | ||
| 542 | __uml_exitcall(kill_io_thread); | 549 | __uml_exitcall(kill_io_thread); |
| 543 | 550 | ||
| 544 | static int ubd_file_size(struct ubd *dev, __u64 *size_out) | 551 | static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out) |
| 545 | { | 552 | { |
| 546 | char *file; | 553 | char *file; |
| 547 | 554 | ||
| 548 | file = dev->cow.file ? dev->cow.file : dev->file; | 555 | file = ubd_dev->cow.file ? ubd_dev->cow.file : ubd_dev->file; |
| 549 | return(os_file_size(file, size_out)); | 556 | return(os_file_size(file, size_out)); |
| 550 | } | 557 | } |
| 551 | 558 | ||
| 552 | static void ubd_close(struct ubd *dev) | 559 | static void ubd_close_dev(struct ubd *ubd_dev) |
| 553 | { | 560 | { |
| 554 | os_close_file(dev->fd); | 561 | os_close_file(ubd_dev->fd); |
| 555 | if(dev->cow.file == NULL) | 562 | if(ubd_dev->cow.file == NULL) |
| 556 | return; | 563 | return; |
| 557 | 564 | ||
| 558 | os_close_file(dev->cow.fd); | 565 | os_close_file(ubd_dev->cow.fd); |
| 559 | vfree(dev->cow.bitmap); | 566 | vfree(ubd_dev->cow.bitmap); |
| 560 | dev->cow.bitmap = NULL; | 567 | ubd_dev->cow.bitmap = NULL; |
| 561 | } | 568 | } |
| 562 | 569 | ||
| 563 | static int ubd_open_dev(struct ubd *dev) | 570 | static int ubd_open_dev(struct ubd *ubd_dev) |
| 564 | { | 571 | { |
| 565 | struct openflags flags; | 572 | struct openflags flags; |
| 566 | char **back_ptr; | 573 | char **back_ptr; |
| 567 | int err, create_cow, *create_ptr; | 574 | int err, create_cow, *create_ptr; |
| 575 | int fd; | ||
| 568 | 576 | ||
| 569 | dev->openflags = dev->boot_openflags; | 577 | ubd_dev->openflags = ubd_dev->boot_openflags; |
| 570 | create_cow = 0; | 578 | create_cow = 0; |
| 571 | create_ptr = (dev->cow.file != NULL) ? &create_cow : NULL; | 579 | create_ptr = (ubd_dev->cow.file != NULL) ? &create_cow : NULL; |
| 572 | back_ptr = dev->no_cow ? NULL : &dev->cow.file; | 580 | back_ptr = ubd_dev->no_cow ? NULL : &ubd_dev->cow.file; |
| 573 | dev->fd = open_ubd_file(dev->file, &dev->openflags, dev->shared, | 581 | |
| 574 | back_ptr, &dev->cow.bitmap_offset, | 582 | fd = open_ubd_file(ubd_dev->file, &ubd_dev->openflags, ubd_dev->shared, |
| 575 | &dev->cow.bitmap_len, &dev->cow.data_offset, | 583 | back_ptr, &ubd_dev->cow.bitmap_offset, |
| 584 | &ubd_dev->cow.bitmap_len, &ubd_dev->cow.data_offset, | ||
| 576 | create_ptr); | 585 | create_ptr); |
| 577 | 586 | ||
| 578 | if((dev->fd == -ENOENT) && create_cow){ | 587 | if((fd == -ENOENT) && create_cow){ |
| 579 | dev->fd = create_cow_file(dev->file, dev->cow.file, | 588 | fd = create_cow_file(ubd_dev->file, ubd_dev->cow.file, |
| 580 | dev->openflags, 1 << 9, PAGE_SIZE, | 589 | ubd_dev->openflags, 1 << 9, PAGE_SIZE, |
| 581 | &dev->cow.bitmap_offset, | 590 | &ubd_dev->cow.bitmap_offset, |
| 582 | &dev->cow.bitmap_len, | 591 | &ubd_dev->cow.bitmap_len, |
| 583 | &dev->cow.data_offset); | 592 | &ubd_dev->cow.data_offset); |
| 584 | if(dev->fd >= 0){ | 593 | if(fd >= 0){ |
| 585 | printk(KERN_INFO "Creating \"%s\" as COW file for " | 594 | printk(KERN_INFO "Creating \"%s\" as COW file for " |
| 586 | "\"%s\"\n", dev->file, dev->cow.file); | 595 | "\"%s\"\n", ubd_dev->file, ubd_dev->cow.file); |
| 587 | } | 596 | } |
| 588 | } | 597 | } |
| 589 | 598 | ||
| 590 | if(dev->fd < 0){ | 599 | if(fd < 0){ |
| 591 | printk("Failed to open '%s', errno = %d\n", dev->file, | 600 | printk("Failed to open '%s', errno = %d\n", ubd_dev->file, |
| 592 | -dev->fd); | 601 | -fd); |
| 593 | return(dev->fd); | 602 | return fd; |
| 594 | } | 603 | } |
| 604 | ubd_dev->fd = fd; | ||
| 595 | 605 | ||
| 596 | if(dev->cow.file != NULL){ | 606 | if(ubd_dev->cow.file != NULL){ |
| 597 | err = -ENOMEM; | 607 | err = -ENOMEM; |
| 598 | dev->cow.bitmap = (void *) vmalloc(dev->cow.bitmap_len); | 608 | ubd_dev->cow.bitmap = (void *) vmalloc(ubd_dev->cow.bitmap_len); |
| 599 | if(dev->cow.bitmap == NULL){ | 609 | if(ubd_dev->cow.bitmap == NULL){ |
| 600 | printk(KERN_ERR "Failed to vmalloc COW bitmap\n"); | 610 | printk(KERN_ERR "Failed to vmalloc COW bitmap\n"); |
| 601 | goto error; | 611 | goto error; |
| 602 | } | 612 | } |
| 603 | flush_tlb_kernel_vm(); | 613 | flush_tlb_kernel_vm(); |
| 604 | 614 | ||
| 605 | err = read_cow_bitmap(dev->fd, dev->cow.bitmap, | 615 | err = read_cow_bitmap(ubd_dev->fd, ubd_dev->cow.bitmap, |
| 606 | dev->cow.bitmap_offset, | 616 | ubd_dev->cow.bitmap_offset, |
| 607 | dev->cow.bitmap_len); | 617 | ubd_dev->cow.bitmap_len); |
| 608 | if(err < 0) | 618 | if(err < 0) |
| 609 | goto error; | 619 | goto error; |
| 610 | 620 | ||
| 611 | flags = dev->openflags; | 621 | flags = ubd_dev->openflags; |
| 612 | flags.w = 0; | 622 | flags.w = 0; |
| 613 | err = open_ubd_file(dev->cow.file, &flags, dev->shared, NULL, | 623 | err = open_ubd_file(ubd_dev->cow.file, &flags, ubd_dev->shared, NULL, |
| 614 | NULL, NULL, NULL, NULL); | 624 | NULL, NULL, NULL, NULL); |
| 615 | if(err < 0) goto error; | 625 | if(err < 0) goto error; |
| 616 | dev->cow.fd = err; | 626 | ubd_dev->cow.fd = err; |
| 617 | } | 627 | } |
| 618 | return(0); | 628 | return(0); |
| 619 | error: | 629 | error: |
| 620 | os_close_file(dev->fd); | 630 | os_close_file(ubd_dev->fd); |
| 621 | return(err); | 631 | return(err); |
| 622 | } | 632 | } |
| 623 | 633 | ||
| 624 | static int ubd_new_disk(int major, u64 size, int unit, | 634 | static int ubd_disk_register(int major, u64 size, int unit, |
| 625 | struct gendisk **disk_out) | 635 | struct gendisk **disk_out) |
| 626 | 636 | ||
| 627 | { | 637 | { |
| @@ -642,13 +652,13 @@ static int ubd_new_disk(int major, u64 size, int unit, | |||
| 642 | 652 | ||
| 643 | /* sysfs register (not for ide fake devices) */ | 653 | /* sysfs register (not for ide fake devices) */ |
| 644 | if (major == MAJOR_NR) { | 654 | if (major == MAJOR_NR) { |
| 645 | ubd_dev[unit].pdev.id = unit; | 655 | ubd_devs[unit].pdev.id = unit; |
| 646 | ubd_dev[unit].pdev.name = DRIVER_NAME; | 656 | ubd_devs[unit].pdev.name = DRIVER_NAME; |
| 647 | platform_device_register(&ubd_dev[unit].pdev); | 657 | platform_device_register(&ubd_devs[unit].pdev); |
| 648 | disk->driverfs_dev = &ubd_dev[unit].pdev.dev; | 658 | disk->driverfs_dev = &ubd_devs[unit].pdev.dev; |
| 649 | } | 659 | } |
| 650 | 660 | ||
| 651 | disk->private_data = &ubd_dev[unit]; | 661 | disk->private_data = &ubd_devs[unit]; |
| 652 | disk->queue = ubd_queue; | 662 | disk->queue = ubd_queue; |
| 653 | add_disk(disk); | 663 | add_disk(disk); |
| 654 | 664 | ||
| @@ -660,25 +670,25 @@ static int ubd_new_disk(int major, u64 size, int unit, | |||
| 660 | 670 | ||
| 661 | static int ubd_add(int n) | 671 | static int ubd_add(int n) |
| 662 | { | 672 | { |
| 663 | struct ubd *dev = &ubd_dev[n]; | 673 | struct ubd *ubd_dev = &ubd_devs[n]; |
| 664 | int err; | 674 | int err; |
| 665 | 675 | ||
| 666 | err = -ENODEV; | 676 | err = -ENODEV; |
| 667 | if(dev->file == NULL) | 677 | if(ubd_dev->file == NULL) |
| 668 | goto out; | 678 | goto out; |
| 669 | 679 | ||
| 670 | err = ubd_file_size(dev, &dev->size); | 680 | err = ubd_file_size(ubd_dev, &ubd_dev->size); |
| 671 | if(err < 0) | 681 | if(err < 0) |
| 672 | goto out; | 682 | goto out; |
| 673 | 683 | ||
| 674 | dev->size = ROUND_BLOCK(dev->size); | 684 | ubd_dev->size = ROUND_BLOCK(ubd_dev->size); |
| 675 | 685 | ||
| 676 | err = ubd_new_disk(MAJOR_NR, dev->size, n, &ubd_gendisk[n]); | 686 | err = ubd_disk_register(MAJOR_NR, ubd_dev->size, n, &ubd_gendisk[n]); |
| 677 | if(err) | 687 | if(err) |
| 678 | goto out; | 688 | goto out; |
| 679 | 689 | ||
| 680 | if(fake_major != MAJOR_NR) | 690 | if(fake_major != MAJOR_NR) |
| 681 | ubd_new_disk(fake_major, dev->size, n, | 691 | ubd_disk_register(fake_major, ubd_dev->size, n, |
| 682 | &fake_gendisk[n]); | 692 | &fake_gendisk[n]); |
| 683 | 693 | ||
| 684 | /* perhaps this should also be under the "if (fake_major)" above */ | 694 | /* perhaps this should also be under the "if (fake_major)" above */ |
| @@ -693,32 +703,41 @@ out: | |||
| 693 | 703 | ||
| 694 | static int ubd_config(char *str) | 704 | static int ubd_config(char *str) |
| 695 | { | 705 | { |
| 696 | int n, err; | 706 | int n, ret; |
| 697 | 707 | ||
| 698 | str = kstrdup(str, GFP_KERNEL); | 708 | str = kstrdup(str, GFP_KERNEL); |
| 699 | if(str == NULL){ | 709 | if (str == NULL) { |
| 700 | printk(KERN_ERR "ubd_config failed to strdup string\n"); | 710 | printk(KERN_ERR "ubd_config failed to strdup string\n"); |
| 701 | return(1); | 711 | ret = 1; |
| 712 | goto out; | ||
| 702 | } | 713 | } |
| 703 | err = ubd_setup_common(str, &n); | 714 | ret = ubd_setup_common(str, &n); |
| 704 | if(err){ | 715 | if (ret) { |
| 705 | kfree(str); | 716 | ret = -1; |
| 706 | return(-1); | 717 | goto err_free; |
| 718 | } | ||
| 719 | if (n == -1) { | ||
| 720 | ret = 0; | ||
| 721 | goto err_free; | ||
| 707 | } | 722 | } |
| 708 | if(n == -1) return(0); | ||
| 709 | 723 | ||
| 710 | spin_lock(&ubd_lock); | 724 | mutex_lock(&ubd_lock); |
| 711 | err = ubd_add(n); | 725 | ret = ubd_add(n); |
| 712 | if(err) | 726 | if (ret) |
| 713 | ubd_dev[n].file = NULL; | 727 | ubd_devs[n].file = NULL; |
| 714 | spin_unlock(&ubd_lock); | 728 | mutex_unlock(&ubd_lock); |
| 715 | 729 | ||
| 716 | return(err); | 730 | out: |
| 731 | return ret; | ||
| 732 | |||
| 733 | err_free: | ||
| 734 | kfree(str); | ||
| 735 | goto out; | ||
| 717 | } | 736 | } |
| 718 | 737 | ||
| 719 | static int ubd_get_config(char *name, char *str, int size, char **error_out) | 738 | static int ubd_get_config(char *name, char *str, int size, char **error_out) |
| 720 | { | 739 | { |
| 721 | struct ubd *dev; | 740 | struct ubd *ubd_dev; |
| 722 | int n, len = 0; | 741 | int n, len = 0; |
| 723 | 742 | ||
| 724 | n = parse_unit(&name); | 743 | n = parse_unit(&name); |
| @@ -727,24 +746,24 @@ static int ubd_get_config(char *name, char *str, int size, char **error_out) | |||
| 727 | return(-1); | 746 | return(-1); |
| 728 | } | 747 | } |
| 729 | 748 | ||
| 730 | dev = &ubd_dev[n]; | 749 | ubd_dev = &ubd_devs[n]; |
| 731 | spin_lock(&ubd_lock); | 750 | mutex_lock(&ubd_lock); |
| 732 | 751 | ||
| 733 | if(dev->file == NULL){ | 752 | if(ubd_dev->file == NULL){ |
| 734 | CONFIG_CHUNK(str, size, len, "", 1); | 753 | CONFIG_CHUNK(str, size, len, "", 1); |
| 735 | goto out; | 754 | goto out; |
| 736 | } | 755 | } |
| 737 | 756 | ||
| 738 | CONFIG_CHUNK(str, size, len, dev->file, 0); | 757 | CONFIG_CHUNK(str, size, len, ubd_dev->file, 0); |
| 739 | 758 | ||
| 740 | if(dev->cow.file != NULL){ | 759 | if(ubd_dev->cow.file != NULL){ |
| 741 | CONFIG_CHUNK(str, size, len, ",", 0); | 760 | CONFIG_CHUNK(str, size, len, ",", 0); |
| 742 | CONFIG_CHUNK(str, size, len, dev->cow.file, 1); | 761 | CONFIG_CHUNK(str, size, len, ubd_dev->cow.file, 1); |
| 743 | } | 762 | } |
| 744 | else CONFIG_CHUNK(str, size, len, "", 1); | 763 | else CONFIG_CHUNK(str, size, len, "", 1); |
| 745 | 764 | ||
| 746 | out: | 765 | out: |
| 747 | spin_unlock(&ubd_lock); | 766 | mutex_unlock(&ubd_lock); |
| 748 | return(len); | 767 | return(len); |
| 749 | } | 768 | } |
| 750 | 769 | ||
| @@ -760,22 +779,22 @@ static int ubd_id(char **str, int *start_out, int *end_out) | |||
| 760 | 779 | ||
| 761 | static int ubd_remove(int n) | 780 | static int ubd_remove(int n) |
| 762 | { | 781 | { |
| 763 | struct ubd *dev; | 782 | struct ubd *ubd_dev; |
| 764 | int err = -ENODEV; | 783 | int err = -ENODEV; |
| 765 | 784 | ||
| 766 | spin_lock(&ubd_lock); | 785 | mutex_lock(&ubd_lock); |
| 767 | 786 | ||
| 768 | if(ubd_gendisk[n] == NULL) | 787 | if(ubd_gendisk[n] == NULL) |
| 769 | goto out; | 788 | goto out; |
| 770 | 789 | ||
| 771 | dev = &ubd_dev[n]; | 790 | ubd_dev = &ubd_devs[n]; |
| 772 | 791 | ||
| 773 | if(dev->file == NULL) | 792 | if(ubd_dev->file == NULL) |
| 774 | goto out; | 793 | goto out; |
| 775 | 794 | ||
| 776 | /* you cannot remove a open disk */ | 795 | /* you cannot remove a open disk */ |
| 777 | err = -EBUSY; | 796 | err = -EBUSY; |
| 778 | if(dev->count > 0) | 797 | if(ubd_dev->count > 0) |
| 779 | goto out; | 798 | goto out; |
| 780 | 799 | ||
| 781 | del_gendisk(ubd_gendisk[n]); | 800 | del_gendisk(ubd_gendisk[n]); |
| @@ -788,14 +807,15 @@ static int ubd_remove(int n) | |||
| 788 | fake_gendisk[n] = NULL; | 807 | fake_gendisk[n] = NULL; |
| 789 | } | 808 | } |
| 790 | 809 | ||
| 791 | platform_device_unregister(&dev->pdev); | 810 | platform_device_unregister(&ubd_dev->pdev); |
| 792 | *dev = ((struct ubd) DEFAULT_UBD); | 811 | *ubd_dev = ((struct ubd) DEFAULT_UBD); |
| 793 | err = 0; | 812 | err = 0; |
| 794 | out: | 813 | out: |
| 795 | spin_unlock(&ubd_lock); | 814 | mutex_unlock(&ubd_lock); |
| 796 | return err; | 815 | return err; |
| 797 | } | 816 | } |
| 798 | 817 | ||
| 818 | /* All these are called by mconsole in process context and without ubd-specific locks. */ | ||
| 799 | static struct mc_device ubd_mc = { | 819 | static struct mc_device ubd_mc = { |
| 800 | .name = "ubd", | 820 | .name = "ubd", |
| 801 | .config = ubd_config, | 821 | .config = ubd_config, |
| @@ -804,7 +824,7 @@ static struct mc_device ubd_mc = { | |||
| 804 | .remove = ubd_remove, | 824 | .remove = ubd_remove, |
| 805 | }; | 825 | }; |
| 806 | 826 | ||
| 807 | static int ubd_mc_init(void) | 827 | static int __init ubd_mc_init(void) |
| 808 | { | 828 | { |
| 809 | mconsole_register_dev(&ubd_mc); | 829 | mconsole_register_dev(&ubd_mc); |
| 810 | return 0; | 830 | return 0; |
| @@ -812,13 +832,24 @@ static int ubd_mc_init(void) | |||
| 812 | 832 | ||
| 813 | __initcall(ubd_mc_init); | 833 | __initcall(ubd_mc_init); |
| 814 | 834 | ||
| 835 | static int __init ubd0_init(void) | ||
| 836 | { | ||
| 837 | struct ubd *ubd_dev = &ubd_devs[0]; | ||
| 838 | |||
| 839 | if(ubd_dev->file == NULL) | ||
| 840 | ubd_dev->file = "root_fs"; | ||
| 841 | return(0); | ||
| 842 | } | ||
| 843 | |||
| 844 | __initcall(ubd0_init); | ||
| 845 | |||
| 815 | static struct platform_driver ubd_driver = { | 846 | static struct platform_driver ubd_driver = { |
| 816 | .driver = { | 847 | .driver = { |
| 817 | .name = DRIVER_NAME, | 848 | .name = DRIVER_NAME, |
| 818 | }, | 849 | }, |
| 819 | }; | 850 | }; |
| 820 | 851 | ||
| 821 | int ubd_init(void) | 852 | static int __init ubd_init(void) |
| 822 | { | 853 | { |
| 823 | int i; | 854 | int i; |
| 824 | 855 | ||
| @@ -846,7 +877,7 @@ int ubd_init(void) | |||
| 846 | 877 | ||
| 847 | late_initcall(ubd_init); | 878 | late_initcall(ubd_init); |
| 848 | 879 | ||
| 849 | int ubd_driver_init(void){ | 880 | static int __init ubd_driver_init(void){ |
| 850 | unsigned long stack; | 881 | unsigned long stack; |
| 851 | int err; | 882 | int err; |
| 852 | 883 | ||
| @@ -867,7 +898,7 @@ int ubd_driver_init(void){ | |||
| 867 | return(0); | 898 | return(0); |
| 868 | } | 899 | } |
| 869 | err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr, | 900 | err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr, |
| 870 | IRQF_DISABLED, "ubd", ubd_dev); | 901 | IRQF_DISABLED, "ubd", ubd_devs); |
| 871 | if(err != 0) | 902 | if(err != 0) |
| 872 | printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err); | 903 | printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err); |
| 873 | return 0; | 904 | return 0; |
| @@ -878,24 +909,24 @@ device_initcall(ubd_driver_init); | |||
| 878 | static int ubd_open(struct inode *inode, struct file *filp) | 909 | static int ubd_open(struct inode *inode, struct file *filp) |
| 879 | { | 910 | { |
| 880 | struct gendisk *disk = inode->i_bdev->bd_disk; | 911 | struct gendisk *disk = inode->i_bdev->bd_disk; |
| 881 | struct ubd *dev = disk->private_data; | 912 | struct ubd *ubd_dev = disk->private_data; |
| 882 | int err = 0; | 913 | int err = 0; |
| 883 | 914 | ||
| 884 | if(dev->count == 0){ | 915 | if(ubd_dev->count == 0){ |
| 885 | err = ubd_open_dev(dev); | 916 | err = ubd_open_dev(ubd_dev); |
| 886 | if(err){ | 917 | if(err){ |
| 887 | printk(KERN_ERR "%s: Can't open \"%s\": errno = %d\n", | 918 | printk(KERN_ERR "%s: Can't open \"%s\": errno = %d\n", |
| 888 | disk->disk_name, dev->file, -err); | 919 | disk->disk_name, ubd_dev->file, -err); |
| 889 | goto out; | 920 | goto out; |
| 890 | } | 921 | } |
| 891 | } | 922 | } |
| 892 | dev->count++; | 923 | ubd_dev->count++; |
| 893 | set_disk_ro(disk, !dev->openflags.w); | 924 | set_disk_ro(disk, !ubd_dev->openflags.w); |
| 894 | 925 | ||
| 895 | /* This should no more be needed. And it didn't work anyway to exclude | 926 | /* This should no more be needed. And it didn't work anyway to exclude |
| 896 | * read-write remounting of filesystems.*/ | 927 | * read-write remounting of filesystems.*/ |
| 897 | /*if((filp->f_mode & FMODE_WRITE) && !dev->openflags.w){ | 928 | /*if((filp->f_mode & FMODE_WRITE) && !ubd_dev->openflags.w){ |
| 898 | if(--dev->count == 0) ubd_close(dev); | 929 | if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev); |
| 899 | err = -EROFS; | 930 | err = -EROFS; |
| 900 | }*/ | 931 | }*/ |
| 901 | out: | 932 | out: |
| @@ -905,10 +936,10 @@ static int ubd_open(struct inode *inode, struct file *filp) | |||
| 905 | static int ubd_release(struct inode * inode, struct file * file) | 936 | static int ubd_release(struct inode * inode, struct file * file) |
| 906 | { | 937 | { |
| 907 | struct gendisk *disk = inode->i_bdev->bd_disk; | 938 | struct gendisk *disk = inode->i_bdev->bd_disk; |
| 908 | struct ubd *dev = disk->private_data; | 939 | struct ubd *ubd_dev = disk->private_data; |
| 909 | 940 | ||
| 910 | if(--dev->count == 0) | 941 | if(--ubd_dev->count == 0) |
| 911 | ubd_close(dev); | 942 | ubd_close_dev(ubd_dev); |
| 912 | return(0); | 943 | return(0); |
| 913 | } | 944 | } |
| 914 | 945 | ||
| @@ -976,12 +1007,12 @@ static void cowify_req(struct io_thread_req *req, unsigned long *bitmap, | |||
| 976 | static int prepare_request(struct request *req, struct io_thread_req *io_req) | 1007 | static int prepare_request(struct request *req, struct io_thread_req *io_req) |
| 977 | { | 1008 | { |
| 978 | struct gendisk *disk = req->rq_disk; | 1009 | struct gendisk *disk = req->rq_disk; |
| 979 | struct ubd *dev = disk->private_data; | 1010 | struct ubd *ubd_dev = disk->private_data; |
| 980 | __u64 offset; | 1011 | __u64 offset; |
| 981 | int len; | 1012 | int len; |
| 982 | 1013 | ||
| 983 | /* This should be impossible now */ | 1014 | /* This should be impossible now */ |
| 984 | if((rq_data_dir(req) == WRITE) && !dev->openflags.w){ | 1015 | if((rq_data_dir(req) == WRITE) && !ubd_dev->openflags.w){ |
| 985 | printk("Write attempted on readonly ubd device %s\n", | 1016 | printk("Write attempted on readonly ubd device %s\n", |
| 986 | disk->disk_name); | 1017 | disk->disk_name); |
| 987 | end_request(req, 0); | 1018 | end_request(req, 0); |
| @@ -991,8 +1022,8 @@ static int prepare_request(struct request *req, struct io_thread_req *io_req) | |||
| 991 | offset = ((__u64) req->sector) << 9; | 1022 | offset = ((__u64) req->sector) << 9; |
| 992 | len = req->current_nr_sectors << 9; | 1023 | len = req->current_nr_sectors << 9; |
| 993 | 1024 | ||
| 994 | io_req->fds[0] = (dev->cow.file != NULL) ? dev->cow.fd : dev->fd; | 1025 | io_req->fds[0] = (ubd_dev->cow.file != NULL) ? ubd_dev->cow.fd : ubd_dev->fd; |
| 995 | io_req->fds[1] = dev->fd; | 1026 | io_req->fds[1] = ubd_dev->fd; |
| 996 | io_req->cow_offset = -1; | 1027 | io_req->cow_offset = -1; |
| 997 | io_req->offset = offset; | 1028 | io_req->offset = offset; |
| 998 | io_req->length = len; | 1029 | io_req->length = len; |
| @@ -1001,13 +1032,13 @@ static int prepare_request(struct request *req, struct io_thread_req *io_req) | |||
| 1001 | 1032 | ||
| 1002 | io_req->op = (rq_data_dir(req) == READ) ? UBD_READ : UBD_WRITE; | 1033 | io_req->op = (rq_data_dir(req) == READ) ? UBD_READ : UBD_WRITE; |
| 1003 | io_req->offsets[0] = 0; | 1034 | io_req->offsets[0] = 0; |
| 1004 | io_req->offsets[1] = dev->cow.data_offset; | 1035 | io_req->offsets[1] = ubd_dev->cow.data_offset; |
| 1005 | io_req->buffer = req->buffer; | 1036 | io_req->buffer = req->buffer; |
| 1006 | io_req->sectorsize = 1 << 9; | 1037 | io_req->sectorsize = 1 << 9; |
| 1007 | 1038 | ||
| 1008 | if(dev->cow.file != NULL) | 1039 | if(ubd_dev->cow.file != NULL) |
| 1009 | cowify_req(io_req, dev->cow.bitmap, dev->cow.bitmap_offset, | 1040 | cowify_req(io_req, ubd_dev->cow.bitmap, ubd_dev->cow.bitmap_offset, |
| 1010 | dev->cow.bitmap_len); | 1041 | ubd_dev->cow.bitmap_len); |
| 1011 | 1042 | ||
| 1012 | return(0); | 1043 | return(0); |
| 1013 | } | 1044 | } |
| @@ -1033,7 +1064,7 @@ static void do_ubd_request(request_queue_t *q) | |||
| 1033 | return; | 1064 | return; |
| 1034 | err = prepare_request(req, &io_req); | 1065 | err = prepare_request(req, &io_req); |
| 1035 | if(!err){ | 1066 | if(!err){ |
| 1036 | do_ubd = ubd_handler; | 1067 | do_ubd = 1; |
| 1037 | n = os_write_file(thread_fd, (char *) &io_req, | 1068 | n = os_write_file(thread_fd, (char *) &io_req, |
| 1038 | sizeof(io_req)); | 1069 | sizeof(io_req)); |
| 1039 | if(n != sizeof(io_req)) | 1070 | if(n != sizeof(io_req)) |
| @@ -1045,18 +1076,18 @@ static void do_ubd_request(request_queue_t *q) | |||
| 1045 | 1076 | ||
| 1046 | static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo) | 1077 | static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
| 1047 | { | 1078 | { |
| 1048 | struct ubd *dev = bdev->bd_disk->private_data; | 1079 | struct ubd *ubd_dev = bdev->bd_disk->private_data; |
| 1049 | 1080 | ||
| 1050 | geo->heads = 128; | 1081 | geo->heads = 128; |
| 1051 | geo->sectors = 32; | 1082 | geo->sectors = 32; |
| 1052 | geo->cylinders = dev->size / (128 * 32 * 512); | 1083 | geo->cylinders = ubd_dev->size / (128 * 32 * 512); |
| 1053 | return 0; | 1084 | return 0; |
| 1054 | } | 1085 | } |
| 1055 | 1086 | ||
| 1056 | static int ubd_ioctl(struct inode * inode, struct file * file, | 1087 | static int ubd_ioctl(struct inode * inode, struct file * file, |
| 1057 | unsigned int cmd, unsigned long arg) | 1088 | unsigned int cmd, unsigned long arg) |
| 1058 | { | 1089 | { |
| 1059 | struct ubd *dev = inode->i_bdev->bd_disk->private_data; | 1090 | struct ubd *ubd_dev = inode->i_bdev->bd_disk->private_data; |
| 1060 | struct hd_driveid ubd_id = { | 1091 | struct hd_driveid ubd_id = { |
| 1061 | .cyls = 0, | 1092 | .cyls = 0, |
| 1062 | .heads = 128, | 1093 | .heads = 128, |
| @@ -1066,7 +1097,7 @@ static int ubd_ioctl(struct inode * inode, struct file * file, | |||
| 1066 | switch (cmd) { | 1097 | switch (cmd) { |
| 1067 | struct cdrom_volctrl volume; | 1098 | struct cdrom_volctrl volume; |
| 1068 | case HDIO_GET_IDENTITY: | 1099 | case HDIO_GET_IDENTITY: |
| 1069 | ubd_id.cyls = dev->size / (128 * 32 * 512); | 1100 | ubd_id.cyls = ubd_dev->size / (128 * 32 * 512); |
| 1070 | if(copy_to_user((char __user *) arg, (char *) &ubd_id, | 1101 | if(copy_to_user((char __user *) arg, (char *) &ubd_id, |
| 1071 | sizeof(ubd_id))) | 1102 | sizeof(ubd_id))) |
| 1072 | return(-EFAULT); | 1103 | return(-EFAULT); |
| @@ -1353,8 +1384,8 @@ void do_io(struct io_thread_req *req) | |||
| 1353 | */ | 1384 | */ |
| 1354 | int kernel_fd = -1; | 1385 | int kernel_fd = -1; |
| 1355 | 1386 | ||
| 1356 | /* Only changed by the io thread */ | 1387 | /* Only changed by the io thread. XXX: currently unused. */ |
| 1357 | int io_count = 0; | 1388 | static int io_count = 0; |
| 1358 | 1389 | ||
| 1359 | int io_thread(void *arg) | 1390 | int io_thread(void *arg) |
| 1360 | { | 1391 | { |
diff --git a/arch/um/drivers/xterm.c b/arch/um/drivers/xterm.c index 386f8b952982..850221d9b4c9 100644 --- a/arch/um/drivers/xterm.c +++ b/arch/um/drivers/xterm.c | |||
| @@ -136,8 +136,6 @@ int xterm_open(int input, int output, int primary, void *d, | |||
| 136 | return(pid); | 136 | return(pid); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | if(data->stack == 0) free_stack(stack, 0); | ||
| 140 | |||
| 141 | if (data->direct_rcv) { | 139 | if (data->direct_rcv) { |
| 142 | new = os_rcv_fd(fd, &data->helper_pid); | 140 | new = os_rcv_fd(fd, &data->helper_pid); |
| 143 | } else { | 141 | } else { |
diff --git a/arch/um/include/common-offsets.h b/arch/um/include/common-offsets.h index 356390d1f8b9..461175f8b1d9 100644 --- a/arch/um/include/common-offsets.h +++ b/arch/um/include/common-offsets.h | |||
| @@ -1,9 +1,16 @@ | |||
| 1 | /* for use by sys-$SUBARCH/kernel-offsets.c */ | 1 | /* for use by sys-$SUBARCH/kernel-offsets.c */ |
| 2 | 2 | ||
| 3 | DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); | ||
| 4 | #ifdef CONFIG_MODE_TT | ||
| 5 | OFFSET(HOST_TASK_EXTERN_PID, task_struct, thread.mode.tt.extern_pid); | ||
| 6 | #endif | ||
| 7 | |||
| 3 | OFFSET(HOST_TASK_REGS, task_struct, thread.regs); | 8 | OFFSET(HOST_TASK_REGS, task_struct, thread.regs); |
| 4 | OFFSET(HOST_TASK_PID, task_struct, pid); | 9 | OFFSET(HOST_TASK_PID, task_struct, pid); |
| 10 | |||
| 5 | DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); | 11 | DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); |
| 6 | DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); | 12 | DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); |
| 13 | |||
| 7 | DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); | 14 | DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); |
| 8 | DEFINE_STR(UM_KERN_ALERT, KERN_ALERT); | 15 | DEFINE_STR(UM_KERN_ALERT, KERN_ALERT); |
| 9 | DEFINE_STR(UM_KERN_CRIT, KERN_CRIT); | 16 | DEFINE_STR(UM_KERN_CRIT, KERN_CRIT); |
| @@ -12,6 +19,10 @@ DEFINE_STR(UM_KERN_WARNING, KERN_WARNING); | |||
| 12 | DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE); | 19 | DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE); |
| 13 | DEFINE_STR(UM_KERN_INFO, KERN_INFO); | 20 | DEFINE_STR(UM_KERN_INFO, KERN_INFO); |
| 14 | DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG); | 21 | DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG); |
| 22 | |||
| 15 | DEFINE(UM_ELF_CLASS, ELF_CLASS); | 23 | DEFINE(UM_ELF_CLASS, ELF_CLASS); |
| 16 | DEFINE(UM_ELFCLASS32, ELFCLASS32); | 24 | DEFINE(UM_ELFCLASS32, ELFCLASS32); |
| 17 | DEFINE(UM_ELFCLASS64, ELFCLASS64); | 25 | DEFINE(UM_ELFCLASS64, ELFCLASS64); |
| 26 | |||
| 27 | /* For crypto assembler code. */ | ||
| 28 | DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx)); | ||
diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index 59cfa9e0cad0..cec9fcc57bf5 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | #ifndef __KERN_UTIL_H__ | 6 | #ifndef __KERN_UTIL_H__ |
| 7 | #define __KERN_UTIL_H__ | 7 | #define __KERN_UTIL_H__ |
| 8 | 8 | ||
| 9 | #include "linux/threads.h" | ||
| 10 | #include "sysdep/ptrace.h" | 9 | #include "sysdep/ptrace.h" |
| 11 | #include "sysdep/faultinfo.h" | 10 | #include "sysdep/faultinfo.h" |
| 12 | 11 | ||
diff --git a/arch/um/include/longjmp.h b/arch/um/include/longjmp.h index e93c6d3e893b..e860bc5848e0 100644 --- a/arch/um/include/longjmp.h +++ b/arch/um/include/longjmp.h | |||
| @@ -12,7 +12,8 @@ extern void longjmp(jmp_buf, int); | |||
| 12 | } while(0) | 12 | } while(0) |
| 13 | 13 | ||
| 14 | #define UML_SETJMP(buf) ({ \ | 14 | #define UML_SETJMP(buf) ({ \ |
| 15 | int n, enable; \ | 15 | int n; \ |
| 16 | volatile int enable; \ | ||
| 16 | enable = get_signals(); \ | 17 | enable = get_signals(); \ |
| 17 | n = setjmp(*buf); \ | 18 | n = setjmp(*buf); \ |
| 18 | if(n != 0) \ | 19 | if(n != 0) \ |
diff --git a/arch/um/include/mconsole.h b/arch/um/include/mconsole.h index 58f67d391105..2666815b6af5 100644 --- a/arch/um/include/mconsole.h +++ b/arch/um/include/mconsole.h | |||
| @@ -61,6 +61,7 @@ struct mc_request | |||
| 61 | 61 | ||
| 62 | struct mconsole_request request; | 62 | struct mconsole_request request; |
| 63 | struct mconsole_command *cmd; | 63 | struct mconsole_command *cmd; |
| 64 | union uml_pt_regs regs; | ||
| 64 | }; | 65 | }; |
| 65 | 66 | ||
| 66 | extern char mconsole_socket_name[]; | 67 | extern char mconsole_socket_name[]; |
diff --git a/arch/um/include/mconsole_kern.h b/arch/um/include/mconsole_kern.h index d0b690197fd7..1ea6d928e1cd 100644 --- a/arch/um/include/mconsole_kern.h +++ b/arch/um/include/mconsole_kern.h | |||
| @@ -14,6 +14,7 @@ struct mconsole_entry { | |||
| 14 | struct mc_request request; | 14 | struct mc_request request; |
| 15 | }; | 15 | }; |
| 16 | 16 | ||
| 17 | /* All these methods are called in process context. */ | ||
| 17 | struct mc_device { | 18 | struct mc_device { |
| 18 | struct list_head list; | 19 | struct list_head list; |
| 19 | char *name; | 20 | char *name; |
diff --git a/arch/um/include/os.h b/arch/um/include/os.h index 120ca21a513a..6516f6dca96d 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h | |||
| @@ -201,6 +201,7 @@ extern int os_getpgrp(void); | |||
| 201 | 201 | ||
| 202 | #ifdef UML_CONFIG_MODE_TT | 202 | #ifdef UML_CONFIG_MODE_TT |
| 203 | extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)); | 203 | extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)); |
| 204 | extern void stop(void); | ||
| 204 | #endif | 205 | #endif |
| 205 | extern void init_new_thread_signals(void); | 206 | extern void init_new_thread_signals(void); |
| 206 | extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr); | 207 | extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr); |
diff --git a/arch/um/include/sysdep-i386/barrier.h b/arch/um/include/sysdep-i386/barrier.h new file mode 100644 index 000000000000..b58d52c5b2f4 --- /dev/null +++ b/arch/um/include/sysdep-i386/barrier.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __SYSDEP_I386_BARRIER_H | ||
| 2 | #define __SYSDEP_I386_BARRIER_H | ||
| 3 | |||
| 4 | /* Copied from include/asm-i386 for use by userspace. i386 has the option | ||
| 5 | * of using mfence, but I'm just using this, which works everywhere, for now. | ||
| 6 | */ | ||
| 7 | #define mb() asm volatile("lock; addl $0,0(%esp)") | ||
| 8 | |||
| 9 | #endif | ||
diff --git a/arch/um/include/sysdep-i386/kernel-offsets.h b/arch/um/include/sysdep-i386/kernel-offsets.h index 2c13de321f2f..97ec9d894d75 100644 --- a/arch/um/include/sysdep-i386/kernel-offsets.h +++ b/arch/um/include/sysdep-i386/kernel-offsets.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <linux/stddef.h> | 1 | #include <linux/stddef.h> |
| 2 | #include <linux/sched.h> | 2 | #include <linux/sched.h> |
| 3 | #include <linux/elf.h> | 3 | #include <linux/elf.h> |
| 4 | #include <linux/crypto.h> | ||
| 4 | #include <asm/mman.h> | 5 | #include <asm/mman.h> |
| 5 | 6 | ||
| 6 | #define DEFINE(sym, val) \ | 7 | #define DEFINE(sym, val) \ |
| @@ -17,9 +18,5 @@ | |||
| 17 | void foo(void) | 18 | void foo(void) |
| 18 | { | 19 | { |
| 19 | OFFSET(HOST_TASK_DEBUGREGS, task_struct, thread.arch.debugregs); | 20 | OFFSET(HOST_TASK_DEBUGREGS, task_struct, thread.arch.debugregs); |
| 20 | DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); | ||
| 21 | #ifdef CONFIG_MODE_TT | ||
| 22 | OFFSET(HOST_TASK_EXTERN_PID, task_struct, thread.mode.tt.extern_pid); | ||
| 23 | #endif | ||
| 24 | #include <common-offsets.h> | 21 | #include <common-offsets.h> |
| 25 | } | 22 | } |
diff --git a/arch/um/include/sysdep-x86_64/barrier.h b/arch/um/include/sysdep-x86_64/barrier.h new file mode 100644 index 000000000000..7b610befdc8f --- /dev/null +++ b/arch/um/include/sysdep-x86_64/barrier.h | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | #ifndef __SYSDEP_X86_64_BARRIER_H | ||
| 2 | #define __SYSDEP_X86_64_BARRIER_H | ||
| 3 | |||
| 4 | /* Copied from include/asm-x86_64 for use by userspace. */ | ||
| 5 | #define mb() asm volatile("mfence":::"memory") | ||
| 6 | |||
| 7 | #endif | ||
diff --git a/arch/um/include/sysdep-x86_64/kernel-offsets.h b/arch/um/include/sysdep-x86_64/kernel-offsets.h index 91d129fb3930..a307237b7964 100644 --- a/arch/um/include/sysdep-x86_64/kernel-offsets.h +++ b/arch/um/include/sysdep-x86_64/kernel-offsets.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #include <linux/sched.h> | 2 | #include <linux/sched.h> |
| 3 | #include <linux/time.h> | 3 | #include <linux/time.h> |
| 4 | #include <linux/elf.h> | 4 | #include <linux/elf.h> |
| 5 | #include <linux/crypto.h> | ||
| 5 | #include <asm/page.h> | 6 | #include <asm/page.h> |
| 6 | #include <asm/mman.h> | 7 | #include <asm/mman.h> |
| 7 | 8 | ||
| @@ -18,9 +19,5 @@ | |||
| 18 | 19 | ||
| 19 | void foo(void) | 20 | void foo(void) |
| 20 | { | 21 | { |
| 21 | DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); | ||
| 22 | #ifdef CONFIG_MODE_TT | ||
| 23 | OFFSET(HOST_TASK_EXTERN_PID, task_struct, thread.mode.tt.extern_pid); | ||
| 24 | #endif | ||
| 25 | #include <common-offsets.h> | 22 | #include <common-offsets.h> |
| 26 | } | 23 | } |
diff --git a/arch/um/include/um_malloc.h b/arch/um/include/um_malloc.h new file mode 100644 index 000000000000..0363a9b53f8d --- /dev/null +++ b/arch/um/include/um_malloc.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2005 Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __UM_MALLOC_H__ | ||
| 7 | #define __UM_MALLOC_H__ | ||
| 8 | |||
| 9 | extern void *um_kmalloc(int size); | ||
| 10 | extern void *um_kmalloc_atomic(int size); | ||
| 11 | extern void kfree(const void *ptr); | ||
| 12 | |||
| 13 | extern void *um_vmalloc(int size); | ||
| 14 | extern void *um_vmalloc_atomic(int size); | ||
| 15 | extern void vfree(void *ptr); | ||
| 16 | |||
| 17 | #endif /* __UM_MALLOC_H__ */ | ||
diff --git a/arch/um/include/user.h b/arch/um/include/user.h index 39f8c8801076..acadce3f271f 100644 --- a/arch/um/include/user.h +++ b/arch/um/include/user.h | |||
| @@ -11,17 +11,11 @@ extern void panic(const char *fmt, ...) | |||
| 11 | extern int printk(const char *fmt, ...) | 11 | extern int printk(const char *fmt, ...) |
| 12 | __attribute__ ((format (printf, 1, 2))); | 12 | __attribute__ ((format (printf, 1, 2))); |
| 13 | extern void schedule(void); | 13 | extern void schedule(void); |
| 14 | extern void *um_kmalloc(int size); | ||
| 15 | extern void *um_kmalloc_atomic(int size); | ||
| 16 | extern void kfree(void *ptr); | ||
| 17 | extern int in_aton(char *str); | 14 | extern int in_aton(char *str); |
| 18 | extern int open_gdb_chan(void); | 15 | extern int open_gdb_chan(void); |
| 19 | /* These use size_t, however unsigned long is correct on both i386 and x86_64. */ | 16 | /* These use size_t, however unsigned long is correct on both i386 and x86_64. */ |
| 20 | extern unsigned long strlcpy(char *, const char *, unsigned long); | 17 | extern unsigned long strlcpy(char *, const char *, unsigned long); |
| 21 | extern unsigned long strlcat(char *, const char *, unsigned long); | 18 | extern unsigned long strlcat(char *, const char *, unsigned long); |
| 22 | extern void *um_vmalloc(int size); | ||
| 23 | extern void *um_vmalloc_atomic(int size); | ||
| 24 | extern void vfree(void *ptr); | ||
| 25 | 19 | ||
| 26 | #endif | 20 | #endif |
| 27 | 21 | ||
diff --git a/arch/um/include/user_util.h b/arch/um/include/user_util.h index 802d7842514d..06625fefef33 100644 --- a/arch/um/include/user_util.h +++ b/arch/um/include/user_util.h | |||
| @@ -52,7 +52,6 @@ extern int linux_main(int argc, char **argv); | |||
| 52 | extern void set_cmdline(char *cmd); | 52 | extern void set_cmdline(char *cmd); |
| 53 | extern void input_cb(void (*proc)(void *), void *arg, int arg_len); | 53 | extern void input_cb(void (*proc)(void *), void *arg, int arg_len); |
| 54 | extern int get_pty(void); | 54 | extern int get_pty(void); |
| 55 | extern void *um_kmalloc(int size); | ||
| 56 | extern int switcheroo(int fd, int prot, void *from, void *to, int size); | 55 | extern int switcheroo(int fd, int prot, void *from, void *to, int size); |
| 57 | extern void do_exec(int old_pid, int new_pid); | 56 | extern void do_exec(int old_pid, int new_pid); |
| 58 | extern void tracer_panic(char *msg, ...) | 57 | extern void tracer_panic(char *msg, ...) |
diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S index 68ed24df5c8f..e36f92b463ce 100644 --- a/arch/um/kernel/dyn.lds.S +++ b/arch/um/kernel/dyn.lds.S | |||
| @@ -14,6 +14,7 @@ SECTIONS | |||
| 14 | * is remapped.*/ | 14 | * is remapped.*/ |
| 15 | __binary_start = .; | 15 | __binary_start = .; |
| 16 | . = ALIGN(4096); /* Init code and data */ | 16 | . = ALIGN(4096); /* Init code and data */ |
| 17 | _text = .; | ||
| 17 | _stext = .; | 18 | _stext = .; |
| 18 | __init_begin = .; | 19 | __init_begin = .; |
| 19 | .init.text : { | 20 | .init.text : { |
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index ef259569fd8c..5c1e611f628d 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include "irq_kern.h" | 31 | #include "irq_kern.h" |
| 32 | #include "os.h" | 32 | #include "os.h" |
| 33 | #include "sigio.h" | 33 | #include "sigio.h" |
| 34 | #include "um_malloc.h" | ||
| 34 | #include "misc_constants.h" | 35 | #include "misc_constants.h" |
| 35 | 36 | ||
| 36 | /* | 37 | /* |
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index fe6c64abda5b..348b272bb766 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c | |||
| @@ -46,6 +46,7 @@ | |||
| 46 | #include "mode.h" | 46 | #include "mode.h" |
| 47 | #include "mode_kern.h" | 47 | #include "mode_kern.h" |
| 48 | #include "choose-mode.h" | 48 | #include "choose-mode.h" |
| 49 | #include "um_malloc.h" | ||
| 49 | 50 | ||
| 50 | /* This is a per-cpu array. A processor only modifies its entry and it only | 51 | /* This is a per-cpu array. A processor only modifies its entry and it only |
| 51 | * cares about its entry, so it's OK if another processor is modifying its | 52 | * cares about its entry, so it's OK if another processor is modifying its |
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c index c17eddcf89b3..2c6d090a2e87 100644 --- a/arch/um/kernel/skas/mmu.c +++ b/arch/um/kernel/skas/mmu.c | |||
| @@ -60,10 +60,7 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc, | |||
| 60 | #endif | 60 | #endif |
| 61 | 61 | ||
| 62 | *pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT)); | 62 | *pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT)); |
| 63 | /* This is wrong for the code page, but it doesn't matter since the | 63 | *pte = pte_mkread(*pte); |
| 64 | * stub is mapped by hand with the correct permissions. | ||
| 65 | */ | ||
| 66 | *pte = pte_mkwrite(*pte); | ||
| 67 | return(0); | 64 | return(0); |
| 68 | 65 | ||
| 69 | out_pmd: | 66 | out_pmd: |
diff --git a/arch/um/kernel/tt/tracer.c b/arch/um/kernel/tt/tracer.c index 9882342206ec..b9195355075a 100644 --- a/arch/um/kernel/tt/tracer.c +++ b/arch/um/kernel/tt/tracer.c | |||
| @@ -176,7 +176,6 @@ struct { | |||
| 176 | int signal_index[32]; | 176 | int signal_index[32]; |
| 177 | int nsignals = 0; | 177 | int nsignals = 0; |
| 178 | int debug_trace = 0; | 178 | int debug_trace = 0; |
| 179 | extern int io_nsignals, io_count, intr_count; | ||
| 180 | 179 | ||
| 181 | extern void signal_usr1(int sig); | 180 | extern void signal_usr1(int sig); |
| 182 | 181 | ||
diff --git a/arch/um/kernel/tt/uaccess_user.c b/arch/um/kernel/tt/uaccess_user.c index 6c92bbccb49c..ed1abcf4d057 100644 --- a/arch/um/kernel/tt/uaccess_user.c +++ b/arch/um/kernel/tt/uaccess_user.c | |||
| @@ -4,13 +4,13 @@ | |||
| 4 | * Licensed under the GPL | 4 | * Licensed under the GPL |
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | #include <setjmp.h> | ||
| 8 | #include <string.h> | 7 | #include <string.h> |
| 9 | #include "user_util.h" | 8 | #include "user_util.h" |
| 10 | #include "uml_uaccess.h" | 9 | #include "uml_uaccess.h" |
| 11 | #include "task.h" | 10 | #include "task.h" |
| 12 | #include "kern_util.h" | 11 | #include "kern_util.h" |
| 13 | #include "os.h" | 12 | #include "os.h" |
| 13 | #include "longjmp.h" | ||
| 14 | 14 | ||
| 15 | int __do_copy_from_user(void *to, const void *from, int n, | 15 | int __do_copy_from_user(void *to, const void *from, int n, |
| 16 | void **fault_addr, void **fault_catcher) | 16 | void **fault_addr, void **fault_catcher) |
| @@ -80,10 +80,10 @@ int __do_strnlen_user(const char *str, unsigned long n, | |||
| 80 | struct tt_regs save = TASK_REGS(get_current())->tt; | 80 | struct tt_regs save = TASK_REGS(get_current())->tt; |
| 81 | int ret; | 81 | int ret; |
| 82 | unsigned long *faddrp = (unsigned long *)fault_addr; | 82 | unsigned long *faddrp = (unsigned long *)fault_addr; |
| 83 | sigjmp_buf jbuf; | 83 | jmp_buf jbuf; |
| 84 | 84 | ||
| 85 | *fault_catcher = &jbuf; | 85 | *fault_catcher = &jbuf; |
| 86 | if(sigsetjmp(jbuf, 1) == 0) | 86 | if(UML_SETJMP(&jbuf) == 0) |
| 87 | ret = strlen(str) + 1; | 87 | ret = strlen(str) + 1; |
| 88 | else ret = *faddrp - (unsigned long) str; | 88 | else ret = *faddrp - (unsigned long) str; |
| 89 | 89 | ||
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S index 8eca47a6ff08..f6301274cf3c 100644 --- a/arch/um/kernel/uml.lds.S +++ b/arch/um/kernel/uml.lds.S | |||
| @@ -25,6 +25,7 @@ SECTIONS | |||
| 25 | . = ALIGN(4096); /* Init code and data */ | 25 | . = ALIGN(4096); /* Init code and data */ |
| 26 | #endif | 26 | #endif |
| 27 | 27 | ||
| 28 | _text = .; | ||
| 28 | _stext = .; | 29 | _stext = .; |
| 29 | __init_begin = .; | 30 | __init_begin = .; |
| 30 | .init.text : { | 31 | .init.text : { |
diff --git a/arch/um/os-Linux/drivers/ethertap_user.c b/arch/um/os-Linux/drivers/ethertap_user.c index f559bdf746e6..863981ba1468 100644 --- a/arch/um/os-Linux/drivers/ethertap_user.c +++ b/arch/um/os-Linux/drivers/ethertap_user.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include "net_user.h" | 20 | #include "net_user.h" |
| 21 | #include "etap.h" | 21 | #include "etap.h" |
| 22 | #include "os.h" | 22 | #include "os.h" |
| 23 | #include "um_malloc.h" | ||
| 23 | 24 | ||
| 24 | #define MAX_PACKET ETH_MAX_PACKET | 25 | #define MAX_PACKET ETH_MAX_PACKET |
| 25 | 26 | ||
diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c index cd15b9df5b5c..d13299cfa318 100644 --- a/arch/um/os-Linux/helper.c +++ b/arch/um/os-Linux/helper.c | |||
| @@ -35,22 +35,23 @@ static int helper_child(void *arg) | |||
| 35 | char **argv = data->argv; | 35 | char **argv = data->argv; |
| 36 | int errval; | 36 | int errval; |
| 37 | 37 | ||
| 38 | if(helper_pause){ | 38 | if (helper_pause){ |
| 39 | signal(SIGHUP, helper_hup); | 39 | signal(SIGHUP, helper_hup); |
| 40 | pause(); | 40 | pause(); |
| 41 | } | 41 | } |
| 42 | if(data->pre_exec != NULL) | 42 | if (data->pre_exec != NULL) |
| 43 | (*data->pre_exec)(data->pre_data); | 43 | (*data->pre_exec)(data->pre_data); |
| 44 | execvp(argv[0], argv); | 44 | execvp(argv[0], argv); |
| 45 | errval = -errno; | 45 | errval = -errno; |
| 46 | printk("helper_child - execve of '%s' failed - errno = %d\n", argv[0], errno); | 46 | printk("helper_child - execve of '%s' failed - errno = %d\n", argv[0], errno); |
| 47 | os_write_file(data->fd, &errval, sizeof(errval)); | 47 | os_write_file(data->fd, &errval, sizeof(errval)); |
| 48 | kill(os_getpid(), SIGKILL); | 48 | kill(os_getpid(), SIGKILL); |
| 49 | return(0); | 49 | return 0; |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | /* Returns either the pid of the child process we run or -E* on failure. | 52 | /* Returns either the pid of the child process we run or -E* on failure. |
| 53 | * XXX The alloc_stack here breaks if this is called in the tracing thread */ | 53 | * XXX The alloc_stack here breaks if this is called in the tracing thread, so |
| 54 | * we need to receive a preallocated stack (a local buffer is ok). */ | ||
| 54 | int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | 55 | int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, |
| 55 | unsigned long *stack_out) | 56 | unsigned long *stack_out) |
| 56 | { | 57 | { |
| @@ -58,20 +59,21 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | |||
| 58 | unsigned long stack, sp; | 59 | unsigned long stack, sp; |
| 59 | int pid, fds[2], ret, n; | 60 | int pid, fds[2], ret, n; |
| 60 | 61 | ||
| 61 | if((stack_out != NULL) && (*stack_out != 0)) | 62 | if ((stack_out != NULL) && (*stack_out != 0)) |
| 62 | stack = *stack_out; | 63 | stack = *stack_out; |
| 63 | else stack = alloc_stack(0, __cant_sleep()); | 64 | else |
| 64 | if(stack == 0) | 65 | stack = alloc_stack(0, __cant_sleep()); |
| 66 | if (stack == 0) | ||
| 65 | return -ENOMEM; | 67 | return -ENOMEM; |
| 66 | 68 | ||
| 67 | ret = os_pipe(fds, 1, 0); | 69 | ret = os_pipe(fds, 1, 0); |
| 68 | if(ret < 0){ | 70 | if (ret < 0) { |
| 69 | printk("run_helper : pipe failed, ret = %d\n", -ret); | 71 | printk("run_helper : pipe failed, ret = %d\n", -ret); |
| 70 | goto out_free; | 72 | goto out_free; |
| 71 | } | 73 | } |
| 72 | 74 | ||
| 73 | ret = os_set_exec_close(fds[1], 1); | 75 | ret = os_set_exec_close(fds[1], 1); |
| 74 | if(ret < 0){ | 76 | if (ret < 0) { |
| 75 | printk("run_helper : setting FD_CLOEXEC failed, ret = %d\n", | 77 | printk("run_helper : setting FD_CLOEXEC failed, ret = %d\n", |
| 76 | -ret); | 78 | -ret); |
| 77 | goto out_close; | 79 | goto out_close; |
| @@ -83,7 +85,7 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | |||
| 83 | data.argv = argv; | 85 | data.argv = argv; |
| 84 | data.fd = fds[1]; | 86 | data.fd = fds[1]; |
| 85 | pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); | 87 | pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); |
| 86 | if(pid < 0){ | 88 | if (pid < 0) { |
| 87 | ret = -errno; | 89 | ret = -errno; |
| 88 | printk("run_helper : clone failed, errno = %d\n", errno); | 90 | printk("run_helper : clone failed, errno = %d\n", errno); |
| 89 | goto out_close; | 91 | goto out_close; |
| @@ -95,10 +97,10 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | |||
| 95 | /* Read the errno value from the child, if the exec failed, or get 0 if | 97 | /* Read the errno value from the child, if the exec failed, or get 0 if |
| 96 | * the exec succeeded because the pipe fd was set as close-on-exec. */ | 98 | * the exec succeeded because the pipe fd was set as close-on-exec. */ |
| 97 | n = os_read_file(fds[0], &ret, sizeof(ret)); | 99 | n = os_read_file(fds[0], &ret, sizeof(ret)); |
| 98 | if(n == 0) | 100 | if (n == 0) { |
| 99 | ret = pid; | 101 | ret = pid; |
| 100 | else { | 102 | } else { |
| 101 | if(n < 0){ | 103 | if (n < 0) { |
| 102 | printk("run_helper : read on pipe failed, ret = %d\n", | 104 | printk("run_helper : read on pipe failed, ret = %d\n", |
| 103 | -n); | 105 | -n); |
| 104 | ret = n; | 106 | ret = n; |
| @@ -112,10 +114,9 @@ out_close: | |||
| 112 | close(fds[1]); | 114 | close(fds[1]); |
| 113 | close(fds[0]); | 115 | close(fds[0]); |
| 114 | out_free: | 116 | out_free: |
| 115 | if(stack_out == NULL) | 117 | if ((stack_out == NULL) || (*stack_out == 0)) |
| 116 | free_stack(stack, 0); | 118 | free_stack(stack, 0); |
| 117 | else *stack_out = stack; | 119 | return ret; |
| 118 | return(ret); | ||
| 119 | } | 120 | } |
| 120 | 121 | ||
| 121 | int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, | 122 | int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, |
| @@ -125,31 +126,32 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, | |||
| 125 | int pid, status, err; | 126 | int pid, status, err; |
| 126 | 127 | ||
| 127 | stack = alloc_stack(stack_order, __cant_sleep()); | 128 | stack = alloc_stack(stack_order, __cant_sleep()); |
| 128 | if(stack == 0) return(-ENOMEM); | 129 | if (stack == 0) |
| 130 | return -ENOMEM; | ||
| 129 | 131 | ||
| 130 | sp = stack + (page_size() << stack_order) - sizeof(void *); | 132 | sp = stack + (page_size() << stack_order) - sizeof(void *); |
| 131 | pid = clone(proc, (void *) sp, flags | SIGCHLD, arg); | 133 | pid = clone(proc, (void *) sp, flags | SIGCHLD, arg); |
| 132 | if(pid < 0){ | 134 | if (pid < 0) { |
| 133 | err = -errno; | 135 | err = -errno; |
| 134 | printk("run_helper_thread : clone failed, errno = %d\n", | 136 | printk("run_helper_thread : clone failed, errno = %d\n", |
| 135 | errno); | 137 | errno); |
| 136 | return err; | 138 | return err; |
| 137 | } | 139 | } |
| 138 | if(stack_out == NULL){ | 140 | if (stack_out == NULL) { |
| 139 | CATCH_EINTR(pid = waitpid(pid, &status, 0)); | 141 | CATCH_EINTR(pid = waitpid(pid, &status, 0)); |
| 140 | if(pid < 0){ | 142 | if (pid < 0) { |
| 141 | err = -errno; | 143 | err = -errno; |
| 142 | printk("run_helper_thread - wait failed, errno = %d\n", | 144 | printk("run_helper_thread - wait failed, errno = %d\n", |
| 143 | errno); | 145 | errno); |
| 144 | pid = err; | 146 | pid = err; |
| 145 | } | 147 | } |
| 146 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) | 148 | if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) |
| 147 | printk("run_helper_thread - thread returned status " | 149 | printk("run_helper_thread - thread returned status " |
| 148 | "0x%x\n", status); | 150 | "0x%x\n", status); |
| 149 | free_stack(stack, stack_order); | 151 | free_stack(stack, stack_order); |
| 150 | } | 152 | } else |
| 151 | else *stack_out = stack; | 153 | *stack_out = stack; |
| 152 | return(pid); | 154 | return pid; |
| 153 | } | 155 | } |
| 154 | 156 | ||
| 155 | int helper_wait(int pid) | 157 | int helper_wait(int pid) |
| @@ -157,9 +159,9 @@ int helper_wait(int pid) | |||
| 157 | int ret; | 159 | int ret; |
| 158 | 160 | ||
| 159 | CATCH_EINTR(ret = waitpid(pid, NULL, WNOHANG)); | 161 | CATCH_EINTR(ret = waitpid(pid, NULL, WNOHANG)); |
| 160 | if(ret < 0){ | 162 | if (ret < 0) { |
| 161 | ret = -errno; | 163 | ret = -errno; |
| 162 | printk("helper_wait : waitpid failed, errno = %d\n", errno); | 164 | printk("helper_wait : waitpid failed, errno = %d\n", errno); |
| 163 | } | 165 | } |
| 164 | return(ret); | 166 | return ret; |
| 165 | } | 167 | } |
diff --git a/arch/um/os-Linux/irq.c b/arch/um/os-Linux/irq.c index a97206df5b52..d46b818c1311 100644 --- a/arch/um/os-Linux/irq.c +++ b/arch/um/os-Linux/irq.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "sigio.h" | 18 | #include "sigio.h" |
| 19 | #include "irq_user.h" | 19 | #include "irq_user.h" |
| 20 | #include "os.h" | 20 | #include "os.h" |
| 21 | #include "um_malloc.h" | ||
| 21 | 22 | ||
| 22 | static struct pollfd *pollfds = NULL; | 23 | static struct pollfd *pollfds = NULL; |
| 23 | static int pollfds_num = 0; | 24 | static int pollfds_num = 0; |
diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c index d1c5670787dc..685feaab65d2 100644 --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include "choose-mode.h" | 23 | #include "choose-mode.h" |
| 24 | #include "uml-config.h" | 24 | #include "uml-config.h" |
| 25 | #include "os.h" | 25 | #include "os.h" |
| 26 | #include "um_malloc.h" | ||
| 26 | 27 | ||
| 27 | /* Set in set_stklim, which is called from main and __wrap_malloc. | 28 | /* Set in set_stklim, which is called from main and __wrap_malloc. |
| 28 | * __wrap_malloc only calls it if main hasn't started. | 29 | * __wrap_malloc only calls it if main hasn't started. |
diff --git a/arch/um/os-Linux/process.c b/arch/um/os-Linux/process.c index 51f0893640a6..c692a192957a 100644 --- a/arch/um/os-Linux/process.c +++ b/arch/um/os-Linux/process.c | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | #include <stdio.h> | 7 | #include <stdio.h> |
| 8 | #include <errno.h> | 8 | #include <errno.h> |
| 9 | #include <signal.h> | 9 | #include <signal.h> |
| 10 | #include <linux/unistd.h> | ||
| 11 | #include <sys/mman.h> | 10 | #include <sys/mman.h> |
| 12 | #include <sys/wait.h> | 11 | #include <sys/wait.h> |
| 13 | #include <sys/mman.h> | 12 | #include <sys/mman.h> |
diff --git a/arch/um/os-Linux/sigio.c b/arch/um/os-Linux/sigio.c index f6457765b17d..925a65240cfe 100644 --- a/arch/um/os-Linux/sigio.c +++ b/arch/um/os-Linux/sigio.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include "user_util.h" | 19 | #include "user_util.h" |
| 20 | #include "sigio.h" | 20 | #include "sigio.h" |
| 21 | #include "os.h" | 21 | #include "os.h" |
| 22 | #include "um_malloc.h" | ||
| 22 | 23 | ||
| 23 | /* Protected by sigio_lock(), also used by sigio_cleanup, which is an | 24 | /* Protected by sigio_lock(), also used by sigio_cleanup, which is an |
| 24 | * exitcall. | 25 | * exitcall. |
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index 6b81739279d1..b897e8592d77 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include "user.h" | 15 | #include "user.h" |
| 16 | #include "signal_kern.h" | 16 | #include "signal_kern.h" |
| 17 | #include "sysdep/sigcontext.h" | 17 | #include "sysdep/sigcontext.h" |
| 18 | #include "sysdep/barrier.h" | ||
| 18 | #include "sigcontext.h" | 19 | #include "sigcontext.h" |
| 19 | #include "mode.h" | 20 | #include "mode.h" |
| 20 | #include "os.h" | 21 | #include "os.h" |
| @@ -34,8 +35,12 @@ | |||
| 34 | #define SIGALRM_BIT 2 | 35 | #define SIGALRM_BIT 2 |
| 35 | #define SIGALRM_MASK (1 << SIGALRM_BIT) | 36 | #define SIGALRM_MASK (1 << SIGALRM_BIT) |
| 36 | 37 | ||
| 37 | static int signals_enabled = 1; | 38 | /* These are used by both the signal handlers and |
| 38 | static int pending = 0; | 39 | * block/unblock_signals. I don't want modifications cached in a |
| 40 | * register - they must go straight to memory. | ||
| 41 | */ | ||
| 42 | static volatile int signals_enabled = 1; | ||
| 43 | static volatile int pending = 0; | ||
| 39 | 44 | ||
| 40 | void sig_handler(int sig, struct sigcontext *sc) | 45 | void sig_handler(int sig, struct sigcontext *sc) |
| 41 | { | 46 | { |
| @@ -152,6 +157,12 @@ int change_sig(int signal, int on) | |||
| 152 | void block_signals(void) | 157 | void block_signals(void) |
| 153 | { | 158 | { |
| 154 | signals_enabled = 0; | 159 | signals_enabled = 0; |
| 160 | /* This must return with signals disabled, so this barrier | ||
| 161 | * ensures that writes are flushed out before the return. | ||
| 162 | * This might matter if gcc figures out how to inline this and | ||
| 163 | * decides to shuffle this code into the caller. | ||
| 164 | */ | ||
| 165 | mb(); | ||
| 155 | } | 166 | } |
| 156 | 167 | ||
| 157 | void unblock_signals(void) | 168 | void unblock_signals(void) |
| @@ -171,9 +182,23 @@ void unblock_signals(void) | |||
| 171 | */ | 182 | */ |
| 172 | signals_enabled = 1; | 183 | signals_enabled = 1; |
| 173 | 184 | ||
| 185 | /* Setting signals_enabled and reading pending must | ||
| 186 | * happen in this order. | ||
| 187 | */ | ||
| 188 | mb(); | ||
| 189 | |||
| 174 | save_pending = pending; | 190 | save_pending = pending; |
| 175 | if(save_pending == 0) | 191 | if(save_pending == 0){ |
| 192 | /* This must return with signals enabled, so | ||
| 193 | * this barrier ensures that writes are | ||
| 194 | * flushed out before the return. This might | ||
| 195 | * matter if gcc figures out how to inline | ||
| 196 | * this (unlikely, given its size) and decides | ||
| 197 | * to shuffle this code into the caller. | ||
| 198 | */ | ||
| 199 | mb(); | ||
| 176 | return; | 200 | return; |
| 201 | } | ||
| 177 | 202 | ||
| 178 | pending = 0; | 203 | pending = 0; |
| 179 | 204 | ||
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index cb9ab54146cc..9b34fe65949a 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | #include <sys/mman.h> | 14 | #include <sys/mman.h> |
| 15 | #include <sys/user.h> | 15 | #include <sys/user.h> |
| 16 | #include <sys/time.h> | 16 | #include <sys/time.h> |
| 17 | #include <asm/unistd.h> | 17 | #include <sys/syscall.h> |
| 18 | #include <asm/types.h> | 18 | #include <asm/types.h> |
| 19 | #include "user.h" | 19 | #include "user.h" |
| 20 | #include "sysdep/ptrace.h" | 20 | #include "sysdep/ptrace.h" |
diff --git a/arch/um/os-Linux/sys-i386/tls.c b/arch/um/os-Linux/sys-i386/tls.c index 6e945ab45843..256532034c62 100644 --- a/arch/um/os-Linux/sys-i386/tls.c +++ b/arch/um/os-Linux/sys-i386/tls.c | |||
| @@ -1,6 +1,9 @@ | |||
| 1 | #include <errno.h> | 1 | #include <errno.h> |
| 2 | #include <linux/unistd.h> | 2 | #include <linux/unistd.h> |
| 3 | |||
| 3 | #include <sys/syscall.h> | 4 | #include <sys/syscall.h> |
| 5 | #include <unistd.h> | ||
| 6 | |||
| 4 | #include "sysdep/tls.h" | 7 | #include "sysdep/tls.h" |
| 5 | #include "user_util.h" | 8 | #include "user_util.h" |
| 6 | 9 | ||
diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c index 38be096e750f..2115b8beb541 100644 --- a/arch/um/os-Linux/time.c +++ b/arch/um/os-Linux/time.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include "process.h" | 16 | #include "process.h" |
| 17 | #include "kern_constants.h" | 17 | #include "kern_constants.h" |
| 18 | #include "os.h" | 18 | #include "os.h" |
| 19 | #include "uml-config.h" | ||
| 19 | 20 | ||
| 20 | int set_interval(int is_virtual) | 21 | int set_interval(int is_virtual) |
| 21 | { | 22 | { |
| @@ -30,7 +31,7 @@ int set_interval(int is_virtual) | |||
| 30 | return 0; | 31 | return 0; |
| 31 | } | 32 | } |
| 32 | 33 | ||
| 33 | #ifdef CONFIG_MODE_TT | 34 | #ifdef UML_CONFIG_MODE_TT |
| 34 | void enable_timer(void) | 35 | void enable_timer(void) |
| 35 | { | 36 | { |
| 36 | set_interval(1); | 37 | set_interval(1); |
diff --git a/arch/um/os-Linux/tls.c b/arch/um/os-Linux/tls.c index a2de2580b8af..16215b990804 100644 --- a/arch/um/os-Linux/tls.c +++ b/arch/um/os-Linux/tls.c | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | #include <errno.h> | 1 | #include <errno.h> |
| 2 | #include <unistd.h> | ||
| 2 | #include <sys/ptrace.h> | 3 | #include <sys/ptrace.h> |
| 3 | #include <sys/syscall.h> | 4 | #include <sys/syscall.h> |
| 4 | #include <asm/ldt.h> | 5 | #include <asm/ldt.h> |
diff --git a/arch/um/os-Linux/tt.c b/arch/um/os-Linux/tt.c index 5461a065bbb9..3dc3a02d6263 100644 --- a/arch/um/os-Linux/tt.c +++ b/arch/um/os-Linux/tt.c | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #include <errno.h> | 10 | #include <errno.h> |
| 11 | #include <stdarg.h> | 11 | #include <stdarg.h> |
| 12 | #include <stdlib.h> | 12 | #include <stdlib.h> |
| 13 | #include <setjmp.h> | ||
| 14 | #include <sys/time.h> | 13 | #include <sys/time.h> |
| 15 | #include <sys/ptrace.h> | 14 | #include <sys/ptrace.h> |
| 16 | #include <linux/ptrace.h> | 15 | #include <linux/ptrace.h> |
diff --git a/arch/um/os-Linux/util.c b/arch/um/os-Linux/util.c index 3f5b1514e8a7..56b8a50e8bc2 100644 --- a/arch/um/os-Linux/util.c +++ b/arch/um/os-Linux/util.c | |||
| @@ -80,11 +80,18 @@ void setup_machinename(char *machine_out) | |||
| 80 | struct utsname host; | 80 | struct utsname host; |
| 81 | 81 | ||
| 82 | uname(&host); | 82 | uname(&host); |
| 83 | #if defined(UML_CONFIG_UML_X86) && !defined(UML_CONFIG_64BIT) | 83 | #ifdef UML_CONFIG_UML_X86 |
| 84 | # ifndef UML_CONFIG_64BIT | ||
| 84 | if (!strcmp(host.machine, "x86_64")) { | 85 | if (!strcmp(host.machine, "x86_64")) { |
| 85 | strcpy(machine_out, "i686"); | 86 | strcpy(machine_out, "i686"); |
| 86 | return; | 87 | return; |
| 87 | } | 88 | } |
| 89 | # else | ||
| 90 | if (!strcmp(host.machine, "i686")) { | ||
| 91 | strcpy(machine_out, "x86_64"); | ||
| 92 | return; | ||
| 93 | } | ||
| 94 | # endif | ||
| 88 | #endif | 95 | #endif |
| 89 | strcpy(machine_out, host.machine); | 96 | strcpy(machine_out, host.machine); |
| 90 | } | 97 | } |
diff --git a/arch/um/sys-i386/unmap.c b/arch/um/sys-i386/unmap.c index 8e55cd5d3d07..1b0ad0e4adcd 100644 --- a/arch/um/sys-i386/unmap.c +++ b/arch/um/sys-i386/unmap.c | |||
| @@ -5,17 +5,20 @@ | |||
| 5 | 5 | ||
| 6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
| 7 | #include <asm/unistd.h> | 7 | #include <asm/unistd.h> |
| 8 | #include <sys/syscall.h> | ||
| 9 | 8 | ||
| 9 | static int errno; | ||
| 10 | |||
| 11 | static inline _syscall2(int,munmap,void *,start,size_t,len) | ||
| 12 | static inline _syscall6(void *,mmap2,void *,addr,size_t,len,int,prot,int,flags,int,fd,off_t,offset) | ||
| 10 | int switcheroo(int fd, int prot, void *from, void *to, int size) | 13 | int switcheroo(int fd, int prot, void *from, void *to, int size) |
| 11 | { | 14 | { |
| 12 | if (syscall(__NR_munmap, to, size) < 0){ | 15 | if(munmap(to, size) < 0){ |
| 13 | return(-1); | 16 | return(-1); |
| 14 | } | 17 | } |
| 15 | if (syscall(__NR_mmap2, to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1 ){ | 18 | if(mmap2(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1 ){ |
| 16 | return(-1); | 19 | return(-1); |
| 17 | } | 20 | } |
| 18 | if (syscall(__NR_munmap, from, size) < 0){ | 21 | if(munmap(from, size) < 0){ |
| 19 | return(-1); | 22 | return(-1); |
| 20 | } | 23 | } |
| 21 | return(0); | 24 | return(0); |
diff --git a/arch/um/sys-x86_64/ksyms.c b/arch/um/sys-x86_64/ksyms.c index 859273808203..12c593607c59 100644 --- a/arch/um/sys-x86_64/ksyms.c +++ b/arch/um/sys-x86_64/ksyms.c | |||
| @@ -14,6 +14,3 @@ EXPORT_SYMBOL(__up_wakeup); | |||
| 14 | 14 | ||
| 15 | /*XXX: we need them because they would be exported by x86_64 */ | 15 | /*XXX: we need them because they would be exported by x86_64 */ |
| 16 | EXPORT_SYMBOL(__memcpy); | 16 | EXPORT_SYMBOL(__memcpy); |
| 17 | |||
| 18 | /* Networking helper routines. */ | ||
| 19 | EXPORT_SYMBOL(ip_compute_csum); | ||
diff --git a/arch/um/sys-x86_64/stub_segv.c b/arch/um/sys-x86_64/stub_segv.c index 1c967026c957..652fa34c2cd3 100644 --- a/arch/um/sys-x86_64/stub_segv.c +++ b/arch/um/sys-x86_64/stub_segv.c | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | 5 | ||
| 6 | #include <stddef.h> | 6 | #include <stddef.h> |
| 7 | #include <signal.h> | 7 | #include <signal.h> |
| 8 | #include <linux/compiler.h> | ||
| 9 | #include <asm/unistd.h> | 8 | #include <asm/unistd.h> |
| 10 | #include "uml-config.h" | 9 | #include "uml-config.h" |
| 11 | #include "sysdep/sigcontext.h" | 10 | #include "sysdep/sigcontext.h" |
diff --git a/arch/um/sys-x86_64/unmap.c b/arch/um/sys-x86_64/unmap.c index 57c9286a701b..f4a4bffd8a18 100644 --- a/arch/um/sys-x86_64/unmap.c +++ b/arch/um/sys-x86_64/unmap.c | |||
| @@ -5,17 +5,20 @@ | |||
| 5 | 5 | ||
| 6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
| 7 | #include <asm/unistd.h> | 7 | #include <asm/unistd.h> |
| 8 | #include <sys/syscall.h> | ||
| 9 | 8 | ||
| 9 | static int errno; | ||
| 10 | |||
| 11 | static inline _syscall2(int,munmap,void *,start,size_t,len) | ||
| 12 | static inline _syscall6(void *,mmap,void *,addr,size_t,len,int,prot,int,flags,int,fd,off_t,offset) | ||
| 10 | int switcheroo(int fd, int prot, void *from, void *to, int size) | 13 | int switcheroo(int fd, int prot, void *from, void *to, int size) |
| 11 | { | 14 | { |
| 12 | if (syscall(__NR_munmap, to, size) < 0){ | 15 | if(munmap(to, size) < 0){ |
| 13 | return(-1); | 16 | return(-1); |
| 14 | } | 17 | } |
| 15 | if (syscall(__NR_mmap, to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ | 18 | if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ |
| 16 | return(-1); | 19 | return(-1); |
| 17 | } | 20 | } |
| 18 | if (syscall(__NR_munmap, from, size) < 0){ | 21 | if(munmap(from, size) < 0){ |
| 19 | return(-1); | 22 | return(-1); |
| 20 | } | 23 | } |
| 21 | return(0); | 24 | return(0); |
diff --git a/arch/v850/kernel/vmlinux.lds.S b/arch/v850/kernel/vmlinux.lds.S index 63399219cd9f..88d087f527c9 100644 --- a/arch/v850/kernel/vmlinux.lds.S +++ b/arch/v850/kernel/vmlinux.lds.S | |||
| @@ -140,13 +140,7 @@ | |||
| 140 | ___setup_end = . ; \ | 140 | ___setup_end = . ; \ |
| 141 | ___initcall_start = . ; \ | 141 | ___initcall_start = . ; \ |
| 142 | *(.initcall.init) \ | 142 | *(.initcall.init) \ |
| 143 | *(.initcall1.init) \ | 143 | INITCALLS \ |
| 144 | *(.initcall2.init) \ | ||
| 145 | *(.initcall3.init) \ | ||
| 146 | *(.initcall4.init) \ | ||
| 147 | *(.initcall5.init) \ | ||
| 148 | *(.initcall6.init) \ | ||
| 149 | *(.initcall7.init) \ | ||
| 150 | . = ALIGN (4) ; \ | 144 | . = ALIGN (4) ; \ |
| 151 | ___initcall_end = . ; \ | 145 | ___initcall_end = . ; \ |
| 152 | ___con_initcall_start = .; \ | 146 | ___con_initcall_start = .; \ |
diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index 1c0f18d4f887..6e38d4daeed7 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile | |||
| @@ -54,6 +54,10 @@ endif | |||
| 54 | cflags-y += $(call cc-option,-funit-at-a-time) | 54 | cflags-y += $(call cc-option,-funit-at-a-time) |
| 55 | # prevent gcc from generating any FP code by mistake | 55 | # prevent gcc from generating any FP code by mistake |
| 56 | cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,) | 56 | cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,) |
| 57 | # this works around some issues with generating unwind tables in older gccs | ||
| 58 | # newer gccs do it by default | ||
| 59 | cflags-y += -maccumulate-outgoing-args | ||
| 60 | |||
| 57 | # do binutils support CFI? | 61 | # do binutils support CFI? |
| 58 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | 62 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) |
| 59 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | 63 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) |
| @@ -62,8 +66,8 @@ AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,) | |||
| 62 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) | 66 | cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) |
| 63 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) | 67 | AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,) |
| 64 | 68 | ||
| 65 | cflags-$(CONFIG_CC_STACKPROTECTOR) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC) -fstack-protector ) | 69 | cflags-$(CONFIG_CC_STACKPROTECTOR) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh "$(CC)" -fstack-protector ) |
| 66 | cflags-$(CONFIG_CC_STACKPROTECTOR_ALL) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC) -fstack-protector-all ) | 70 | cflags-$(CONFIG_CC_STACKPROTECTOR_ALL) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh "$(CC)" -fstack-protector-all ) |
| 67 | 71 | ||
| 68 | CFLAGS += $(cflags-y) | 72 | CFLAGS += $(cflags-y) |
| 69 | CFLAGS_KERNEL += $(cflags-kernel-y) | 73 | CFLAGS_KERNEL += $(cflags-kernel-y) |
diff --git a/arch/x86_64/boot/setup.S b/arch/x86_64/boot/setup.S index c3bfd223ab49..770940cc0108 100644 --- a/arch/x86_64/boot/setup.S +++ b/arch/x86_64/boot/setup.S | |||
| @@ -836,13 +836,12 @@ gdt: | |||
| 836 | .word 0x9200 # data read/write | 836 | .word 0x9200 # data read/write |
| 837 | .word 0x00CF # granularity = 4096, 386 | 837 | .word 0x00CF # granularity = 4096, 386 |
| 838 | # (+5th nibble of limit) | 838 | # (+5th nibble of limit) |
| 839 | gdt_end: | ||
| 839 | idt_48: | 840 | idt_48: |
| 840 | .word 0 # idt limit = 0 | 841 | .word 0 # idt limit = 0 |
| 841 | .word 0, 0 # idt base = 0L | 842 | .word 0, 0 # idt base = 0L |
| 842 | gdt_48: | 843 | gdt_48: |
| 843 | .word 0x8000 # gdt limit=2048, | 844 | .word gdt_end-gdt-1 # gdt limit |
| 844 | # 256 GDT entries | ||
| 845 | |||
| 846 | .word 0, 0 # gdt base (filled in later) | 845 | .word 0, 0 # gdt base (filled in later) |
| 847 | 846 | ||
| 848 | # Include video setup & detection code | 847 | # Include video setup & detection code |
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig index 47bfba6e9dc4..0f5d44e86be5 100644 --- a/arch/x86_64/defconfig +++ b/arch/x86_64/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.19-rc1 | 3 | # Linux kernel version: 2.6.19-rc2-git4 |
| 4 | # Thu Oct 5 13:04:43 2006 | 4 | # Sat Oct 21 03:38:52 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_X86_64=y | 6 | CONFIG_X86_64=y |
| 7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
| @@ -335,8 +335,8 @@ CONFIG_IPV6=y | |||
| 335 | # CONFIG_INET6_XFRM_MODE_TUNNEL is not set | 335 | # CONFIG_INET6_XFRM_MODE_TUNNEL is not set |
| 336 | # CONFIG_INET6_XFRM_MODE_BEET is not set | 336 | # CONFIG_INET6_XFRM_MODE_BEET is not set |
| 337 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 337 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 338 | CONFIG_IPV6_SIT=y | ||
| 338 | # CONFIG_IPV6_TUNNEL is not set | 339 | # CONFIG_IPV6_TUNNEL is not set |
| 339 | # CONFIG_IPV6_SUBTREES is not set | ||
| 340 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 340 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 341 | # CONFIG_NETWORK_SECMARK is not set | 341 | # CONFIG_NETWORK_SECMARK is not set |
| 342 | # CONFIG_NETFILTER is not set | 342 | # CONFIG_NETFILTER is not set |
| @@ -438,6 +438,13 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 438 | # CONFIG_ATA_OVER_ETH is not set | 438 | # CONFIG_ATA_OVER_ETH is not set |
| 439 | 439 | ||
| 440 | # | 440 | # |
| 441 | # Misc devices | ||
| 442 | # | ||
| 443 | # CONFIG_IBM_ASM is not set | ||
| 444 | # CONFIG_SGI_IOC4 is not set | ||
| 445 | # CONFIG_TIFM_CORE is not set | ||
| 446 | |||
| 447 | # | ||
| 441 | # ATA/ATAPI/MFM/RLL support | 448 | # ATA/ATAPI/MFM/RLL support |
| 442 | # | 449 | # |
| 443 | CONFIG_IDE=y | 450 | CONFIG_IDE=y |
| @@ -1008,6 +1015,7 @@ CONFIG_I2C_ISA=m | |||
| 1008 | # | 1015 | # |
| 1009 | # Dallas's 1-wire bus | 1016 | # Dallas's 1-wire bus |
| 1010 | # | 1017 | # |
| 1018 | # CONFIG_W1 is not set | ||
| 1011 | 1019 | ||
| 1012 | # | 1020 | # |
| 1013 | # Hardware Monitoring support | 1021 | # Hardware Monitoring support |
| @@ -1059,12 +1067,6 @@ CONFIG_SENSORS_SMSC47B397=m | |||
| 1059 | # CONFIG_HWMON_DEBUG_CHIP is not set | 1067 | # CONFIG_HWMON_DEBUG_CHIP is not set |
| 1060 | 1068 | ||
| 1061 | # | 1069 | # |
| 1062 | # Misc devices | ||
| 1063 | # | ||
| 1064 | # CONFIG_IBM_ASM is not set | ||
| 1065 | # CONFIG_TIFM_CORE is not set | ||
| 1066 | |||
| 1067 | # | ||
| 1068 | # Multimedia devices | 1070 | # Multimedia devices |
| 1069 | # | 1071 | # |
| 1070 | # CONFIG_VIDEO_DEV is not set | 1072 | # CONFIG_VIDEO_DEV is not set |
| @@ -1196,7 +1198,6 @@ CONFIG_USB_HIDINPUT=y | |||
| 1196 | # CONFIG_USB_ATI_REMOTE2 is not set | 1198 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 1197 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1199 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 1198 | # CONFIG_USB_APPLETOUCH is not set | 1200 | # CONFIG_USB_APPLETOUCH is not set |
| 1199 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1200 | 1201 | ||
| 1201 | # | 1202 | # |
| 1202 | # USB Imaging devices | 1203 | # USB Imaging devices |
| @@ -1242,6 +1243,7 @@ CONFIG_USB_MON=y | |||
| 1242 | # CONFIG_USB_APPLEDISPLAY is not set | 1243 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1243 | # CONFIG_USB_SISUSBVGA is not set | 1244 | # CONFIG_USB_SISUSBVGA is not set |
| 1244 | # CONFIG_USB_LD is not set | 1245 | # CONFIG_USB_LD is not set |
| 1246 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1245 | # CONFIG_USB_TEST is not set | 1247 | # CONFIG_USB_TEST is not set |
| 1246 | 1248 | ||
| 1247 | # | 1249 | # |
| @@ -1318,6 +1320,7 @@ CONFIG_EXT3_FS=y | |||
| 1318 | CONFIG_EXT3_FS_XATTR=y | 1320 | CONFIG_EXT3_FS_XATTR=y |
| 1319 | CONFIG_EXT3_FS_POSIX_ACL=y | 1321 | CONFIG_EXT3_FS_POSIX_ACL=y |
| 1320 | # CONFIG_EXT3_FS_SECURITY is not set | 1322 | # CONFIG_EXT3_FS_SECURITY is not set |
| 1323 | # CONFIG_EXT4DEV_FS is not set | ||
| 1321 | CONFIG_JBD=y | 1324 | CONFIG_JBD=y |
| 1322 | # CONFIG_JBD_DEBUG is not set | 1325 | # CONFIG_JBD_DEBUG is not set |
| 1323 | CONFIG_FS_MBCACHE=y | 1326 | CONFIG_FS_MBCACHE=y |
| @@ -1341,6 +1344,7 @@ CONFIG_DNOTIFY=y | |||
| 1341 | # CONFIG_AUTOFS_FS is not set | 1344 | # CONFIG_AUTOFS_FS is not set |
| 1342 | CONFIG_AUTOFS4_FS=y | 1345 | CONFIG_AUTOFS4_FS=y |
| 1343 | # CONFIG_FUSE_FS is not set | 1346 | # CONFIG_FUSE_FS is not set |
| 1347 | CONFIG_GENERIC_ACL=y | ||
| 1344 | 1348 | ||
| 1345 | # | 1349 | # |
| 1346 | # CD-ROM/DVD Filesystems | 1350 | # CD-ROM/DVD Filesystems |
| @@ -1418,7 +1422,6 @@ CONFIG_SUNRPC=y | |||
| 1418 | # CONFIG_CODA_FS is not set | 1422 | # CONFIG_CODA_FS is not set |
| 1419 | # CONFIG_AFS_FS is not set | 1423 | # CONFIG_AFS_FS is not set |
| 1420 | # CONFIG_9P_FS is not set | 1424 | # CONFIG_9P_FS is not set |
| 1421 | CONFIG_GENERIC_ACL=y | ||
| 1422 | 1425 | ||
| 1423 | # | 1426 | # |
| 1424 | # Partition Types | 1427 | # Partition Types |
| @@ -1471,10 +1474,6 @@ CONFIG_NLS_ISO8859_15=y | |||
| 1471 | CONFIG_NLS_UTF8=y | 1474 | CONFIG_NLS_UTF8=y |
| 1472 | 1475 | ||
| 1473 | # | 1476 | # |
| 1474 | # Distributed Lock Manager | ||
| 1475 | # | ||
| 1476 | |||
| 1477 | # | ||
| 1478 | # Instrumentation Support | 1477 | # Instrumentation Support |
| 1479 | # | 1478 | # |
| 1480 | CONFIG_PROFILING=y | 1479 | CONFIG_PROFILING=y |
| @@ -1512,6 +1511,7 @@ CONFIG_DEBUG_FS=y | |||
| 1512 | CONFIG_UNWIND_INFO=y | 1511 | CONFIG_UNWIND_INFO=y |
| 1513 | CONFIG_STACK_UNWIND=y | 1512 | CONFIG_STACK_UNWIND=y |
| 1514 | # CONFIG_FORCED_INLINING is not set | 1513 | # CONFIG_FORCED_INLINING is not set |
| 1514 | # CONFIG_HEADERS_CHECK is not set | ||
| 1515 | # CONFIG_RCU_TORTURE_TEST is not set | 1515 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1516 | # CONFIG_LKDTM is not set | 1516 | # CONFIG_LKDTM is not set |
| 1517 | # CONFIG_DEBUG_RODATA is not set | 1517 | # CONFIG_DEBUG_RODATA is not set |
diff --git a/arch/x86_64/ia32/ia32_signal.c b/arch/x86_64/ia32/ia32_signal.c index a6ba9951e86c..0e0a266d976f 100644 --- a/arch/x86_64/ia32/ia32_signal.c +++ b/arch/x86_64/ia32/ia32_signal.c | |||
| @@ -579,6 +579,11 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 579 | regs->rsp = (unsigned long) frame; | 579 | regs->rsp = (unsigned long) frame; |
| 580 | regs->rip = (unsigned long) ka->sa.sa_handler; | 580 | regs->rip = (unsigned long) ka->sa.sa_handler; |
| 581 | 581 | ||
| 582 | /* Make -mregparm=3 work */ | ||
| 583 | regs->rax = sig; | ||
| 584 | regs->rdx = (unsigned long) &frame->info; | ||
| 585 | regs->rcx = (unsigned long) &frame->uc; | ||
| 586 | |||
| 582 | asm volatile("movl %0,%%ds" :: "r" (__USER32_DS)); | 587 | asm volatile("movl %0,%%ds" :: "r" (__USER32_DS)); |
| 583 | asm volatile("movl %0,%%es" :: "r" (__USER32_DS)); | 588 | asm volatile("movl %0,%%es" :: "r" (__USER32_DS)); |
| 584 | 589 | ||
diff --git a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c index 3a7561d4703e..04566fe5de49 100644 --- a/arch/x86_64/ia32/ptrace32.c +++ b/arch/x86_64/ia32/ptrace32.c | |||
| @@ -244,6 +244,8 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) | |||
| 244 | case PTRACE_DETACH: | 244 | case PTRACE_DETACH: |
| 245 | case PTRACE_SYSCALL: | 245 | case PTRACE_SYSCALL: |
| 246 | case PTRACE_SETOPTIONS: | 246 | case PTRACE_SETOPTIONS: |
| 247 | case PTRACE_SET_THREAD_AREA: | ||
| 248 | case PTRACE_GET_THREAD_AREA: | ||
| 247 | return sys_ptrace(request, pid, addr, data); | 249 | return sys_ptrace(request, pid, addr, data); |
| 248 | 250 | ||
| 249 | default: | 251 | default: |
diff --git a/arch/x86_64/kernel/e820.c b/arch/x86_64/kernel/e820.c index b3f0908668ec..6fe191c58084 100644 --- a/arch/x86_64/kernel/e820.c +++ b/arch/x86_64/kernel/e820.c | |||
| @@ -54,13 +54,13 @@ static inline int bad_addr(unsigned long *addrp, unsigned long size) | |||
| 54 | 54 | ||
| 55 | /* various gunk below that needed for SMP startup */ | 55 | /* various gunk below that needed for SMP startup */ |
| 56 | if (addr < 0x8000) { | 56 | if (addr < 0x8000) { |
| 57 | *addrp = 0x8000; | 57 | *addrp = PAGE_ALIGN(0x8000); |
| 58 | return 1; | 58 | return 1; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | /* direct mapping tables of the kernel */ | 61 | /* direct mapping tables of the kernel */ |
| 62 | if (last >= table_start<<PAGE_SHIFT && addr < table_end<<PAGE_SHIFT) { | 62 | if (last >= table_start<<PAGE_SHIFT && addr < table_end<<PAGE_SHIFT) { |
| 63 | *addrp = table_end << PAGE_SHIFT; | 63 | *addrp = PAGE_ALIGN(table_end << PAGE_SHIFT); |
| 64 | return 1; | 64 | return 1; |
| 65 | } | 65 | } |
| 66 | 66 | ||
| @@ -68,18 +68,18 @@ static inline int bad_addr(unsigned long *addrp, unsigned long size) | |||
| 68 | #ifdef CONFIG_BLK_DEV_INITRD | 68 | #ifdef CONFIG_BLK_DEV_INITRD |
| 69 | if (LOADER_TYPE && INITRD_START && last >= INITRD_START && | 69 | if (LOADER_TYPE && INITRD_START && last >= INITRD_START && |
| 70 | addr < INITRD_START+INITRD_SIZE) { | 70 | addr < INITRD_START+INITRD_SIZE) { |
| 71 | *addrp = INITRD_START + INITRD_SIZE; | 71 | *addrp = PAGE_ALIGN(INITRD_START + INITRD_SIZE); |
| 72 | return 1; | 72 | return 1; |
| 73 | } | 73 | } |
| 74 | #endif | 74 | #endif |
| 75 | /* kernel code */ | 75 | /* kernel code */ |
| 76 | if (last >= __pa_symbol(&_text) && last < __pa_symbol(&_end)) { | 76 | if (last >= __pa_symbol(&_text) && addr < __pa_symbol(&_end)) { |
| 77 | *addrp = __pa_symbol(&_end); | 77 | *addrp = PAGE_ALIGN(__pa_symbol(&_end)); |
| 78 | return 1; | 78 | return 1; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | if (last >= ebda_addr && addr < ebda_addr + ebda_size) { | 81 | if (last >= ebda_addr && addr < ebda_addr + ebda_size) { |
| 82 | *addrp = ebda_addr + ebda_size; | 82 | *addrp = PAGE_ALIGN(ebda_addr + ebda_size); |
| 83 | return 1; | 83 | return 1; |
| 84 | } | 84 | } |
| 85 | 85 | ||
| @@ -152,7 +152,7 @@ unsigned long __init find_e820_area(unsigned long start, unsigned long end, unsi | |||
| 152 | continue; | 152 | continue; |
| 153 | while (bad_addr(&addr, size) && addr+size <= ei->addr+ei->size) | 153 | while (bad_addr(&addr, size) && addr+size <= ei->addr+ei->size) |
| 154 | ; | 154 | ; |
| 155 | last = addr + size; | 155 | last = PAGE_ALIGN(addr) + size; |
| 156 | if (last > ei->addr + ei->size) | 156 | if (last > ei->addr + ei->size) |
| 157 | continue; | 157 | continue; |
| 158 | if (last > end) | 158 | if (last > end) |
| @@ -278,7 +278,7 @@ e820_register_active_regions(int nid, unsigned long start_pfn, | |||
| 278 | >> PAGE_SHIFT; | 278 | >> PAGE_SHIFT; |
| 279 | 279 | ||
| 280 | /* Skip map entries smaller than a page */ | 280 | /* Skip map entries smaller than a page */ |
| 281 | if (ei_startpfn > ei_endpfn) | 281 | if (ei_startpfn >= ei_endpfn) |
| 282 | continue; | 282 | continue; |
| 283 | 283 | ||
| 284 | /* Check if end_pfn_map should be updated */ | 284 | /* Check if end_pfn_map should be updated */ |
| @@ -594,7 +594,9 @@ static int __init parse_memmap_opt(char *p) | |||
| 594 | * size before original memory map is | 594 | * size before original memory map is |
| 595 | * reset. | 595 | * reset. |
| 596 | */ | 596 | */ |
| 597 | e820_register_active_regions(0, 0, -1UL); | ||
| 597 | saved_max_pfn = e820_end_of_ram(); | 598 | saved_max_pfn = e820_end_of_ram(); |
| 599 | remove_all_active_ranges(); | ||
| 598 | #endif | 600 | #endif |
| 599 | end_pfn_map = 0; | 601 | end_pfn_map = 0; |
| 600 | e820.nr_map = 0; | 602 | e820.nr_map = 0; |
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c index 208e38a372c1..68273bff58cc 100644 --- a/arch/x86_64/kernel/early-quirks.c +++ b/arch/x86_64/kernel/early-quirks.c | |||
| @@ -45,7 +45,13 @@ static void nvidia_bugs(void) | |||
| 45 | /* | 45 | /* |
| 46 | * All timer overrides on Nvidia are | 46 | * All timer overrides on Nvidia are |
| 47 | * wrong unless HPET is enabled. | 47 | * wrong unless HPET is enabled. |
| 48 | * Unfortunately that's not true on many Asus boards. | ||
| 49 | * We don't know yet how to detect this automatically, but | ||
| 50 | * at least allow a command line override. | ||
| 48 | */ | 51 | */ |
| 52 | if (acpi_use_timer_override) | ||
| 53 | return; | ||
| 54 | |||
| 49 | nvidia_hpet_detected = 0; | 55 | nvidia_hpet_detected = 0; |
| 50 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); | 56 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); |
| 51 | if (nvidia_hpet_detected == 0) { | 57 | if (nvidia_hpet_detected == 0) { |
| @@ -53,6 +59,8 @@ static void nvidia_bugs(void) | |||
| 53 | printk(KERN_INFO "Nvidia board " | 59 | printk(KERN_INFO "Nvidia board " |
| 54 | "detected. Ignoring ACPI " | 60 | "detected. Ignoring ACPI " |
| 55 | "timer override.\n"); | 61 | "timer override.\n"); |
| 62 | printk(KERN_INFO "If you got timer trouble " | ||
| 63 | "try acpi_use_timer_override\n"); | ||
| 56 | } | 64 | } |
| 57 | #endif | 65 | #endif |
| 58 | /* RED-PEN skip them on mptables too? */ | 66 | /* RED-PEN skip them on mptables too? */ |
| @@ -61,10 +69,11 @@ static void nvidia_bugs(void) | |||
| 61 | 69 | ||
| 62 | static void ati_bugs(void) | 70 | static void ati_bugs(void) |
| 63 | { | 71 | { |
| 64 | #if 1 /* for testing */ | 72 | if (timer_over_8254 == 1) { |
| 65 | printk("ATI board detected\n"); | 73 | timer_over_8254 = 0; |
| 66 | #endif | 74 | printk(KERN_INFO |
| 67 | /* No bugs right now */ | 75 | "ATI board detected. Disabling timer routing over 8254.\n"); |
| 76 | } | ||
| 68 | } | 77 | } |
| 69 | 78 | ||
| 70 | struct chipset { | 79 | struct chipset { |
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index 38a7b2d528e2..7d401b00d822 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
| @@ -315,6 +315,8 @@ tracesys: | |||
| 315 | LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ | 315 | LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ |
| 316 | RESTORE_REST | 316 | RESTORE_REST |
| 317 | cmpq $__NR_syscall_max,%rax | 317 | cmpq $__NR_syscall_max,%rax |
| 318 | movq $-ENOSYS,%rcx | ||
| 319 | cmova %rcx,%rax | ||
| 318 | ja 1f | 320 | ja 1f |
| 319 | movq %r10,%rcx /* fixup for C */ | 321 | movq %r10,%rcx /* fixup for C */ |
| 320 | call *sys_call_table(,%rax,8) | 322 | call *sys_call_table(,%rax,8) |
| @@ -535,8 +537,6 @@ END(stub_rt_sigreturn) | |||
| 535 | 1: incl %gs:pda_irqcount | 537 | 1: incl %gs:pda_irqcount |
| 536 | cmoveq %gs:pda_irqstackptr,%rsp | 538 | cmoveq %gs:pda_irqstackptr,%rsp |
| 537 | push %rbp # backlink for old unwinder | 539 | push %rbp # backlink for old unwinder |
| 538 | CFI_ADJUST_CFA_OFFSET 8 | ||
| 539 | CFI_REL_OFFSET rbp,0 | ||
| 540 | /* | 540 | /* |
| 541 | * We entered an interrupt context - irqs are off: | 541 | * We entered an interrupt context - irqs are off: |
| 542 | */ | 542 | */ |
| @@ -980,11 +980,6 @@ ENTRY(kernel_thread) | |||
| 980 | call do_fork | 980 | call do_fork |
| 981 | movq %rax,RAX(%rsp) | 981 | movq %rax,RAX(%rsp) |
| 982 | xorl %edi,%edi | 982 | xorl %edi,%edi |
| 983 | test %rax,%rax | ||
| 984 | jnz 1f | ||
| 985 | /* terminate stack in child */ | ||
| 986 | movq %rdi,RIP(%rsp) | ||
| 987 | 1: | ||
| 988 | 983 | ||
| 989 | /* | 984 | /* |
| 990 | * It isn't worth to check for reschedule here, | 985 | * It isn't worth to check for reschedule here, |
| @@ -1176,7 +1171,6 @@ ENTRY(call_softirq) | |||
| 1176 | incl %gs:pda_irqcount | 1171 | incl %gs:pda_irqcount |
| 1177 | cmove %gs:pda_irqstackptr,%rsp | 1172 | cmove %gs:pda_irqstackptr,%rsp |
| 1178 | push %rbp # backlink for old unwinder | 1173 | push %rbp # backlink for old unwinder |
| 1179 | CFI_ADJUST_CFA_OFFSET 8 | ||
| 1180 | call __do_softirq | 1174 | call __do_softirq |
| 1181 | leaveq | 1175 | leaveq |
| 1182 | CFI_DEF_CFA_REGISTER rsp | 1176 | CFI_DEF_CFA_REGISTER rsp |
diff --git a/arch/x86_64/kernel/genapic_flat.c b/arch/x86_64/kernel/genapic_flat.c index 0dfc223c1839..7c01db8fa9d1 100644 --- a/arch/x86_64/kernel/genapic_flat.c +++ b/arch/x86_64/kernel/genapic_flat.c | |||
| @@ -153,7 +153,7 @@ struct genapic apic_flat = { | |||
| 153 | 153 | ||
| 154 | static cpumask_t physflat_target_cpus(void) | 154 | static cpumask_t physflat_target_cpus(void) |
| 155 | { | 155 | { |
| 156 | return cpumask_of_cpu(0); | 156 | return cpu_online_map; |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | static cpumask_t physflat_vector_allocation_domain(int cpu) | 159 | static cpumask_t physflat_vector_allocation_domain(int cpu) |
diff --git a/arch/x86_64/kernel/i8259.c b/arch/x86_64/kernel/i8259.c index 0612a33bb896..c4ef801b765b 100644 --- a/arch/x86_64/kernel/i8259.c +++ b/arch/x86_64/kernel/i8259.c | |||
| @@ -178,7 +178,8 @@ void make_8259A_irq(unsigned int irq) | |||
| 178 | { | 178 | { |
| 179 | disable_irq_nosync(irq); | 179 | disable_irq_nosync(irq); |
| 180 | io_apic_irqs &= ~(1<<irq); | 180 | io_apic_irqs &= ~(1<<irq); |
| 181 | set_irq_chip_and_handler(irq, &i8259A_chip, handle_level_irq); | 181 | set_irq_chip_and_handler_name(irq, &i8259A_chip, handle_level_irq, |
| 182 | "XT"); | ||
| 182 | enable_irq(irq); | 183 | enable_irq(irq); |
| 183 | } | 184 | } |
| 184 | 185 | ||
| @@ -431,8 +432,8 @@ void __init init_ISA_irqs (void) | |||
| 431 | /* | 432 | /* |
| 432 | * 16 old-style INTA-cycle interrupts: | 433 | * 16 old-style INTA-cycle interrupts: |
| 433 | */ | 434 | */ |
| 434 | set_irq_chip_and_handler(i, &i8259A_chip, | 435 | set_irq_chip_and_handler_name(i, &i8259A_chip, |
| 435 | handle_level_irq); | 436 | handle_level_irq, "XT"); |
| 436 | } else { | 437 | } else { |
| 437 | /* | 438 | /* |
| 438 | * 'high' PCI IRQs filled in on demand | 439 | * 'high' PCI IRQs filled in on demand |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index 771bcf77daf2..14654e682411 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
| @@ -57,13 +57,13 @@ static int no_timer_check; | |||
| 57 | 57 | ||
| 58 | static int disable_timer_pin_1 __initdata; | 58 | static int disable_timer_pin_1 __initdata; |
| 59 | 59 | ||
| 60 | int timer_over_8254 __initdata = 0; | 60 | int timer_over_8254 __initdata = 1; |
| 61 | 61 | ||
| 62 | /* Where if anywhere is the i8259 connect in external int mode */ | 62 | /* Where if anywhere is the i8259 connect in external int mode */ |
| 63 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 63 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; |
| 64 | 64 | ||
| 65 | static DEFINE_SPINLOCK(ioapic_lock); | 65 | static DEFINE_SPINLOCK(ioapic_lock); |
| 66 | static DEFINE_SPINLOCK(vector_lock); | 66 | DEFINE_SPINLOCK(vector_lock); |
| 67 | 67 | ||
| 68 | /* | 68 | /* |
| 69 | * # of IRQ routing registers | 69 | * # of IRQ routing registers |
| @@ -88,6 +88,52 @@ static struct irq_pin_list { | |||
| 88 | short apic, pin, next; | 88 | short apic, pin, next; |
| 89 | } irq_2_pin[PIN_MAP_SIZE]; | 89 | } irq_2_pin[PIN_MAP_SIZE]; |
| 90 | 90 | ||
| 91 | struct io_apic { | ||
| 92 | unsigned int index; | ||
| 93 | unsigned int unused[3]; | ||
| 94 | unsigned int data; | ||
| 95 | }; | ||
| 96 | |||
| 97 | static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) | ||
| 98 | { | ||
| 99 | return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) | ||
| 100 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK); | ||
| 101 | } | ||
| 102 | |||
| 103 | static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) | ||
| 104 | { | ||
| 105 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 106 | writel(reg, &io_apic->index); | ||
| 107 | return readl(&io_apic->data); | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) | ||
| 111 | { | ||
| 112 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 113 | writel(reg, &io_apic->index); | ||
| 114 | writel(value, &io_apic->data); | ||
| 115 | } | ||
| 116 | |||
| 117 | /* | ||
| 118 | * Re-write a value: to be used for read-modify-write | ||
| 119 | * cycles where the read already set up the index register. | ||
| 120 | */ | ||
| 121 | static inline void io_apic_modify(unsigned int apic, unsigned int value) | ||
| 122 | { | ||
| 123 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 124 | writel(value, &io_apic->data); | ||
| 125 | } | ||
| 126 | |||
| 127 | /* | ||
| 128 | * Synchronize the IO-APIC and the CPU by doing | ||
| 129 | * a dummy read from the IO-APIC | ||
| 130 | */ | ||
| 131 | static inline void io_apic_sync(unsigned int apic) | ||
| 132 | { | ||
| 133 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
| 134 | readl(&io_apic->data); | ||
| 135 | } | ||
| 136 | |||
| 91 | #define __DO_ACTION(R, ACTION, FINAL) \ | 137 | #define __DO_ACTION(R, ACTION, FINAL) \ |
| 92 | \ | 138 | \ |
| 93 | { \ | 139 | { \ |
| @@ -126,12 +172,34 @@ static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) | |||
| 126 | return eu.entry; | 172 | return eu.entry; |
| 127 | } | 173 | } |
| 128 | 174 | ||
| 175 | /* | ||
| 176 | * When we write a new IO APIC routing entry, we need to write the high | ||
| 177 | * word first! If the mask bit in the low word is clear, we will enable | ||
| 178 | * the interrupt, and we need to make sure the entry is fully populated | ||
| 179 | * before that happens. | ||
| 180 | */ | ||
| 129 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) | 181 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) |
| 130 | { | 182 | { |
| 131 | unsigned long flags; | 183 | unsigned long flags; |
| 132 | union entry_union eu; | 184 | union entry_union eu; |
| 133 | eu.entry = e; | 185 | eu.entry = e; |
| 134 | spin_lock_irqsave(&ioapic_lock, flags); | 186 | spin_lock_irqsave(&ioapic_lock, flags); |
| 187 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | ||
| 188 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | ||
| 189 | spin_unlock_irqrestore(&ioapic_lock, flags); | ||
| 190 | } | ||
| 191 | |||
| 192 | /* | ||
| 193 | * When we mask an IO APIC routing entry, we need to write the low | ||
| 194 | * word first, in order to set the mask bit before we change the | ||
| 195 | * high bits! | ||
| 196 | */ | ||
| 197 | static void ioapic_mask_entry(int apic, int pin) | ||
| 198 | { | ||
| 199 | unsigned long flags; | ||
| 200 | union entry_union eu = { .entry.mask = 1 }; | ||
| 201 | |||
| 202 | spin_lock_irqsave(&ioapic_lock, flags); | ||
| 135 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | 203 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); |
| 136 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | 204 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); |
| 137 | spin_unlock_irqrestore(&ioapic_lock, flags); | 205 | spin_unlock_irqrestore(&ioapic_lock, flags); |
| @@ -256,9 +324,7 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) | |||
| 256 | /* | 324 | /* |
| 257 | * Disable it in the IO-APIC irq-routing table: | 325 | * Disable it in the IO-APIC irq-routing table: |
| 258 | */ | 326 | */ |
| 259 | memset(&entry, 0, sizeof(entry)); | 327 | ioapic_mask_entry(apic, pin); |
| 260 | entry.mask = 1; | ||
| 261 | ioapic_write_entry(apic, pin, entry); | ||
| 262 | } | 328 | } |
| 263 | 329 | ||
| 264 | static void clear_IO_APIC (void) | 330 | static void clear_IO_APIC (void) |
| @@ -612,15 +678,15 @@ static int __assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 612 | * Also, we've got to be careful not to trash gate | 678 | * Also, we've got to be careful not to trash gate |
| 613 | * 0x80, because int 0x80 is hm, kind of importantish. ;) | 679 | * 0x80, because int 0x80 is hm, kind of importantish. ;) |
| 614 | */ | 680 | */ |
| 615 | static struct { | 681 | static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0; |
| 616 | int vector; | ||
| 617 | int offset; | ||
| 618 | } pos[NR_CPUS] = { [ 0 ... NR_CPUS - 1] = {FIRST_DEVICE_VECTOR, 0} }; | ||
| 619 | int old_vector = -1; | 682 | int old_vector = -1; |
| 620 | int cpu; | 683 | int cpu; |
| 621 | 684 | ||
| 622 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 685 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
| 623 | 686 | ||
| 687 | /* Only try and allocate irqs on cpus that are present */ | ||
| 688 | cpus_and(mask, mask, cpu_online_map); | ||
| 689 | |||
| 624 | if (irq_vector[irq] > 0) | 690 | if (irq_vector[irq] > 0) |
| 625 | old_vector = irq_vector[irq]; | 691 | old_vector = irq_vector[irq]; |
| 626 | if (old_vector > 0) { | 692 | if (old_vector > 0) { |
| @@ -630,15 +696,15 @@ static int __assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 630 | } | 696 | } |
| 631 | 697 | ||
| 632 | for_each_cpu_mask(cpu, mask) { | 698 | for_each_cpu_mask(cpu, mask) { |
| 633 | cpumask_t domain; | 699 | cpumask_t domain, new_mask; |
| 634 | int first, new_cpu; | 700 | int new_cpu; |
| 635 | int vector, offset; | 701 | int vector, offset; |
| 636 | 702 | ||
| 637 | domain = vector_allocation_domain(cpu); | 703 | domain = vector_allocation_domain(cpu); |
| 638 | first = first_cpu(domain); | 704 | cpus_and(new_mask, domain, cpu_online_map); |
| 639 | 705 | ||
| 640 | vector = pos[first].vector; | 706 | vector = current_vector; |
| 641 | offset = pos[first].offset; | 707 | offset = current_offset; |
| 642 | next: | 708 | next: |
| 643 | vector += 8; | 709 | vector += 8; |
| 644 | if (vector >= FIRST_SYSTEM_VECTOR) { | 710 | if (vector >= FIRST_SYSTEM_VECTOR) { |
| @@ -646,24 +712,24 @@ next: | |||
| 646 | offset = (offset + 1) % 8; | 712 | offset = (offset + 1) % 8; |
| 647 | vector = FIRST_DEVICE_VECTOR + offset; | 713 | vector = FIRST_DEVICE_VECTOR + offset; |
| 648 | } | 714 | } |
| 649 | if (unlikely(pos[first].vector == vector)) | 715 | if (unlikely(current_vector == vector)) |
| 650 | continue; | 716 | continue; |
| 651 | if (vector == IA32_SYSCALL_VECTOR) | 717 | if (vector == IA32_SYSCALL_VECTOR) |
| 652 | goto next; | 718 | goto next; |
| 653 | for_each_cpu_mask(new_cpu, domain) | 719 | for_each_cpu_mask(new_cpu, new_mask) |
| 654 | if (per_cpu(vector_irq, cpu)[vector] != -1) | 720 | if (per_cpu(vector_irq, new_cpu)[vector] != -1) |
| 655 | goto next; | 721 | goto next; |
| 656 | /* Found one! */ | 722 | /* Found one! */ |
| 657 | for_each_cpu_mask(new_cpu, domain) { | 723 | current_vector = vector; |
| 658 | pos[cpu].vector = vector; | 724 | current_offset = offset; |
| 659 | pos[cpu].offset = offset; | ||
| 660 | } | ||
| 661 | if (old_vector >= 0) { | 725 | if (old_vector >= 0) { |
| 726 | cpumask_t old_mask; | ||
| 662 | int old_cpu; | 727 | int old_cpu; |
| 663 | for_each_cpu_mask(old_cpu, domain) | 728 | cpus_and(old_mask, irq_domain[irq], cpu_online_map); |
| 729 | for_each_cpu_mask(old_cpu, old_mask) | ||
| 664 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; | 730 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; |
| 665 | } | 731 | } |
| 666 | for_each_cpu_mask(new_cpu, domain) | 732 | for_each_cpu_mask(new_cpu, new_mask) |
| 667 | per_cpu(vector_irq, new_cpu)[vector] = irq; | 733 | per_cpu(vector_irq, new_cpu)[vector] = irq; |
| 668 | irq_vector[irq] = vector; | 734 | irq_vector[irq] = vector; |
| 669 | irq_domain[irq] = domain; | 735 | irq_domain[irq] = domain; |
| @@ -684,6 +750,32 @@ static int assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 684 | return vector; | 750 | return vector; |
| 685 | } | 751 | } |
| 686 | 752 | ||
| 753 | void __setup_vector_irq(int cpu) | ||
| 754 | { | ||
| 755 | /* Initialize vector_irq on a new cpu */ | ||
| 756 | /* This function must be called with vector_lock held */ | ||
| 757 | unsigned long flags; | ||
| 758 | int irq, vector; | ||
| 759 | |||
| 760 | |||
| 761 | /* Mark the inuse vectors */ | ||
| 762 | for (irq = 0; irq < NR_IRQ_VECTORS; ++irq) { | ||
| 763 | if (!cpu_isset(cpu, irq_domain[irq])) | ||
| 764 | continue; | ||
| 765 | vector = irq_vector[irq]; | ||
| 766 | per_cpu(vector_irq, cpu)[vector] = irq; | ||
| 767 | } | ||
| 768 | /* Mark the free vectors */ | ||
| 769 | for (vector = 0; vector < NR_VECTORS; ++vector) { | ||
| 770 | irq = per_cpu(vector_irq, cpu)[vector]; | ||
| 771 | if (irq < 0) | ||
| 772 | continue; | ||
| 773 | if (!cpu_isset(cpu, irq_domain[irq])) | ||
| 774 | per_cpu(vector_irq, cpu)[vector] = -1; | ||
| 775 | } | ||
| 776 | } | ||
| 777 | |||
| 778 | |||
| 687 | extern void (*interrupt[NR_IRQS])(void); | 779 | extern void (*interrupt[NR_IRQS])(void); |
| 688 | 780 | ||
| 689 | static struct irq_chip ioapic_chip; | 781 | static struct irq_chip ioapic_chip; |
| @@ -696,11 +788,13 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger) | |||
| 696 | { | 788 | { |
| 697 | if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || | 789 | if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || |
| 698 | trigger == IOAPIC_LEVEL) | 790 | trigger == IOAPIC_LEVEL) |
| 699 | set_irq_chip_and_handler(irq, &ioapic_chip, | 791 | set_irq_chip_and_handler_name(irq, &ioapic_chip, |
| 700 | handle_fasteoi_irq); | 792 | handle_fasteoi_irq, "fasteoi"); |
| 701 | else | 793 | else { |
| 702 | set_irq_chip_and_handler(irq, &ioapic_chip, | 794 | irq_desc[irq].status |= IRQ_DELAYED_DISABLE; |
| 703 | handle_edge_irq); | 795 | set_irq_chip_and_handler_name(irq, &ioapic_chip, |
| 796 | handle_edge_irq, "edge"); | ||
| 797 | } | ||
| 704 | } | 798 | } |
| 705 | 799 | ||
| 706 | static void __init setup_IO_APIC_irqs(void) | 800 | static void __init setup_IO_APIC_irqs(void) |
| @@ -806,7 +900,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in | |||
| 806 | * The timer IRQ doesn't have to know that behind the | 900 | * The timer IRQ doesn't have to know that behind the |
| 807 | * scene we have a 8259A-master in AEOI mode ... | 901 | * scene we have a 8259A-master in AEOI mode ... |
| 808 | */ | 902 | */ |
| 809 | set_irq_chip_and_handler(0, &ioapic_chip, handle_edge_irq); | 903 | set_irq_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq, "edge"); |
| 810 | 904 | ||
| 811 | /* | 905 | /* |
| 812 | * Add it to the IO-APIC irq-routing table: | 906 | * Add it to the IO-APIC irq-routing table: |
| @@ -1255,12 +1349,15 @@ static int ioapic_retrigger_irq(unsigned int irq) | |||
| 1255 | { | 1349 | { |
| 1256 | cpumask_t mask; | 1350 | cpumask_t mask; |
| 1257 | unsigned vector; | 1351 | unsigned vector; |
| 1352 | unsigned long flags; | ||
| 1258 | 1353 | ||
| 1354 | spin_lock_irqsave(&vector_lock, flags); | ||
| 1259 | vector = irq_vector[irq]; | 1355 | vector = irq_vector[irq]; |
| 1260 | cpus_clear(mask); | 1356 | cpus_clear(mask); |
| 1261 | cpu_set(vector >> 8, mask); | 1357 | cpu_set(first_cpu(irq_domain[irq]), mask); |
| 1262 | 1358 | ||
| 1263 | send_IPI_mask(mask, vector & 0xff); | 1359 | send_IPI_mask(mask, vector); |
| 1360 | spin_unlock_irqrestore(&vector_lock, flags); | ||
| 1264 | 1361 | ||
| 1265 | return 1; | 1362 | return 1; |
| 1266 | } | 1363 | } |
| @@ -1839,7 +1936,7 @@ int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev) | |||
| 1839 | 1936 | ||
| 1840 | write_msi_msg(irq, &msg); | 1937 | write_msi_msg(irq, &msg); |
| 1841 | 1938 | ||
| 1842 | set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq); | 1939 | set_irq_chip_and_handler_name(irq, &msi_chip, handle_edge_irq, "edge"); |
| 1843 | 1940 | ||
| 1844 | return 0; | 1941 | return 0; |
| 1845 | } | 1942 | } |
| @@ -1860,18 +1957,16 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
| 1860 | 1957 | ||
| 1861 | static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector) | 1958 | static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector) |
| 1862 | { | 1959 | { |
| 1863 | u32 low, high; | 1960 | struct ht_irq_msg msg; |
| 1864 | low = read_ht_irq_low(irq); | 1961 | fetch_ht_irq_msg(irq, &msg); |
| 1865 | high = read_ht_irq_high(irq); | ||
| 1866 | 1962 | ||
| 1867 | low &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK); | 1963 | msg.address_lo &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK); |
| 1868 | high &= ~(HT_IRQ_HIGH_DEST_ID_MASK); | 1964 | msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK); |
| 1869 | 1965 | ||
| 1870 | low |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest); | 1966 | msg.address_lo |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest); |
| 1871 | high |= HT_IRQ_HIGH_DEST_ID(dest); | 1967 | msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest); |
| 1872 | 1968 | ||
| 1873 | write_ht_irq_low(irq, low); | 1969 | write_ht_irq_msg(irq, &msg); |
| 1874 | write_ht_irq_high(irq, high); | ||
| 1875 | } | 1970 | } |
| 1876 | 1971 | ||
| 1877 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | 1972 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) |
| @@ -1892,12 +1987,12 @@ static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | |||
| 1892 | 1987 | ||
| 1893 | dest = cpu_mask_to_apicid(tmp); | 1988 | dest = cpu_mask_to_apicid(tmp); |
| 1894 | 1989 | ||
| 1895 | target_ht_irq(irq, dest, vector & 0xff); | 1990 | target_ht_irq(irq, dest, vector); |
| 1896 | set_native_irq_info(irq, mask); | 1991 | set_native_irq_info(irq, mask); |
| 1897 | } | 1992 | } |
| 1898 | #endif | 1993 | #endif |
| 1899 | 1994 | ||
| 1900 | static struct hw_interrupt_type ht_irq_chip = { | 1995 | static struct irq_chip ht_irq_chip = { |
| 1901 | .name = "PCI-HT", | 1996 | .name = "PCI-HT", |
| 1902 | .mask = mask_ht_irq, | 1997 | .mask = mask_ht_irq, |
| 1903 | .unmask = unmask_ht_irq, | 1998 | .unmask = unmask_ht_irq, |
| @@ -1915,14 +2010,15 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
| 1915 | 2010 | ||
| 1916 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); | 2011 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); |
| 1917 | if (vector >= 0) { | 2012 | if (vector >= 0) { |
| 1918 | u32 low, high; | 2013 | struct ht_irq_msg msg; |
| 1919 | unsigned dest; | 2014 | unsigned dest; |
| 1920 | 2015 | ||
| 1921 | dest = cpu_mask_to_apicid(tmp); | 2016 | dest = cpu_mask_to_apicid(tmp); |
| 1922 | 2017 | ||
| 1923 | high = HT_IRQ_HIGH_DEST_ID(dest); | 2018 | msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest); |
| 1924 | 2019 | ||
| 1925 | low = HT_IRQ_LOW_BASE | | 2020 | msg.address_lo = |
| 2021 | HT_IRQ_LOW_BASE | | ||
| 1926 | HT_IRQ_LOW_DEST_ID(dest) | | 2022 | HT_IRQ_LOW_DEST_ID(dest) | |
| 1927 | HT_IRQ_LOW_VECTOR(vector) | | 2023 | HT_IRQ_LOW_VECTOR(vector) | |
| 1928 | ((INT_DEST_MODE == 0) ? | 2024 | ((INT_DEST_MODE == 0) ? |
| @@ -1931,12 +2027,13 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
| 1931 | HT_IRQ_LOW_RQEOI_EDGE | | 2027 | HT_IRQ_LOW_RQEOI_EDGE | |
| 1932 | ((INT_DELIVERY_MODE != dest_LowestPrio) ? | 2028 | ((INT_DELIVERY_MODE != dest_LowestPrio) ? |
| 1933 | HT_IRQ_LOW_MT_FIXED : | 2029 | HT_IRQ_LOW_MT_FIXED : |
| 1934 | HT_IRQ_LOW_MT_ARBITRATED); | 2030 | HT_IRQ_LOW_MT_ARBITRATED) | |
| 2031 | HT_IRQ_LOW_IRQ_MASKED; | ||
| 1935 | 2032 | ||
| 1936 | write_ht_irq_low(irq, low); | 2033 | write_ht_irq_msg(irq, &msg); |
| 1937 | write_ht_irq_high(irq, high); | ||
| 1938 | 2034 | ||
| 1939 | set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq); | 2035 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, |
| 2036 | handle_edge_irq, "edge"); | ||
| 1940 | } | 2037 | } |
| 1941 | return vector; | 2038 | return vector; |
| 1942 | } | 2039 | } |
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c index dff68eb2b787..e46c55856d40 100644 --- a/arch/x86_64/kernel/irq.c +++ b/arch/x86_64/kernel/irq.c | |||
| @@ -75,7 +75,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 75 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 75 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
| 76 | #endif | 76 | #endif |
| 77 | seq_printf(p, " %8s", irq_desc[i].chip->name); | 77 | seq_printf(p, " %8s", irq_desc[i].chip->name); |
| 78 | seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq)); | 78 | seq_printf(p, "-%-8s", irq_desc[i].name); |
| 79 | 79 | ||
| 80 | seq_printf(p, " %s", action->name); | 80 | seq_printf(p, " %s", action->name); |
| 81 | for (action=action->next; action; action = action->next) | 81 | for (action=action->next; action; action = action->next) |
diff --git a/arch/x86_64/kernel/pci-calgary.c b/arch/x86_64/kernel/pci-calgary.c index b3296cc2f2f2..37a770859e71 100644 --- a/arch/x86_64/kernel/pci-calgary.c +++ b/arch/x86_64/kernel/pci-calgary.c | |||
| @@ -52,7 +52,8 @@ | |||
| 52 | #define ONE_BASED_CHASSIS_NUM 1 | 52 | #define ONE_BASED_CHASSIS_NUM 1 |
| 53 | 53 | ||
| 54 | /* register offsets inside the host bridge space */ | 54 | /* register offsets inside the host bridge space */ |
| 55 | #define PHB_CSR_OFFSET 0x0110 | 55 | #define CALGARY_CONFIG_REG 0x0108 |
| 56 | #define PHB_CSR_OFFSET 0x0110 /* Channel Status */ | ||
| 56 | #define PHB_PLSSR_OFFSET 0x0120 | 57 | #define PHB_PLSSR_OFFSET 0x0120 |
| 57 | #define PHB_CONFIG_RW_OFFSET 0x0160 | 58 | #define PHB_CONFIG_RW_OFFSET 0x0160 |
| 58 | #define PHB_IOBASE_BAR_LOW 0x0170 | 59 | #define PHB_IOBASE_BAR_LOW 0x0170 |
| @@ -83,6 +84,8 @@ | |||
| 83 | #define TAR_VALID 0x0000000000000008UL | 84 | #define TAR_VALID 0x0000000000000008UL |
| 84 | /* CSR (Channel/DMA Status Register) */ | 85 | /* CSR (Channel/DMA Status Register) */ |
| 85 | #define CSR_AGENT_MASK 0xffe0ffff | 86 | #define CSR_AGENT_MASK 0xffe0ffff |
| 87 | /* CCR (Calgary Configuration Register) */ | ||
| 88 | #define CCR_2SEC_TIMEOUT 0x000000000000000EUL | ||
| 86 | 89 | ||
| 87 | #define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */ | 90 | #define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */ |
| 88 | #define MAX_NUM_CHASSIS 8 /* max number of chassis */ | 91 | #define MAX_NUM_CHASSIS 8 /* max number of chassis */ |
| @@ -732,6 +735,38 @@ static void calgary_watchdog(unsigned long data) | |||
| 732 | } | 735 | } |
| 733 | } | 736 | } |
| 734 | 737 | ||
| 738 | static void __init calgary_increase_split_completion_timeout(void __iomem *bbar, | ||
| 739 | unsigned char busnum) | ||
| 740 | { | ||
| 741 | u64 val64; | ||
| 742 | void __iomem *target; | ||
| 743 | unsigned long phb_shift = -1; | ||
| 744 | u64 mask; | ||
| 745 | |||
| 746 | switch (busno_to_phbid(busnum)) { | ||
| 747 | case 0: phb_shift = (63 - 19); | ||
| 748 | break; | ||
| 749 | case 1: phb_shift = (63 - 23); | ||
| 750 | break; | ||
| 751 | case 2: phb_shift = (63 - 27); | ||
| 752 | break; | ||
| 753 | case 3: phb_shift = (63 - 35); | ||
| 754 | break; | ||
| 755 | default: | ||
| 756 | BUG_ON(busno_to_phbid(busnum)); | ||
| 757 | } | ||
| 758 | |||
| 759 | target = calgary_reg(bbar, CALGARY_CONFIG_REG); | ||
| 760 | val64 = be64_to_cpu(readq(target)); | ||
| 761 | |||
| 762 | /* zero out this PHB's timer bits */ | ||
| 763 | mask = ~(0xFUL << phb_shift); | ||
| 764 | val64 &= mask; | ||
| 765 | val64 |= (CCR_2SEC_TIMEOUT << phb_shift); | ||
| 766 | writeq(cpu_to_be64(val64), target); | ||
| 767 | readq(target); /* flush */ | ||
| 768 | } | ||
| 769 | |||
| 735 | static void __init calgary_enable_translation(struct pci_dev *dev) | 770 | static void __init calgary_enable_translation(struct pci_dev *dev) |
| 736 | { | 771 | { |
| 737 | u32 val32; | 772 | u32 val32; |
| @@ -756,6 +791,13 @@ static void __init calgary_enable_translation(struct pci_dev *dev) | |||
| 756 | writel(cpu_to_be32(val32), target); | 791 | writel(cpu_to_be32(val32), target); |
| 757 | readl(target); /* flush */ | 792 | readl(target); /* flush */ |
| 758 | 793 | ||
| 794 | /* | ||
| 795 | * Give split completion a longer timeout on bus 1 for aic94xx | ||
| 796 | * http://bugzilla.kernel.org/show_bug.cgi?id=7180 | ||
| 797 | */ | ||
| 798 | if (busnum == 1) | ||
| 799 | calgary_increase_split_completion_timeout(bbar, busnum); | ||
| 800 | |||
| 759 | init_timer(&tbl->watchdog_timer); | 801 | init_timer(&tbl->watchdog_timer); |
| 760 | tbl->watchdog_timer.function = &calgary_watchdog; | 802 | tbl->watchdog_timer.function = &calgary_watchdog; |
| 761 | tbl->watchdog_timer.data = (unsigned long)dev; | 803 | tbl->watchdog_timer.data = (unsigned long)dev; |
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index 5e95b257ee26..7451a4c43c16 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
| @@ -88,9 +88,8 @@ void enter_idle(void) | |||
| 88 | 88 | ||
| 89 | static void __exit_idle(void) | 89 | static void __exit_idle(void) |
| 90 | { | 90 | { |
| 91 | if (read_pda(isidle) == 0) | 91 | if (test_and_clear_bit_pda(0, isidle) == 0) |
| 92 | return; | 92 | return; |
| 93 | write_pda(isidle, 0); | ||
| 94 | atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL); | 93 | atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL); |
| 95 | } | 94 | } |
| 96 | 95 | ||
| @@ -145,7 +144,7 @@ static void poll_idle (void) | |||
| 145 | void cpu_idle_wait(void) | 144 | void cpu_idle_wait(void) |
| 146 | { | 145 | { |
| 147 | unsigned int cpu, this_cpu = get_cpu(); | 146 | unsigned int cpu, this_cpu = get_cpu(); |
| 148 | cpumask_t map; | 147 | cpumask_t map, tmp = current->cpus_allowed; |
| 149 | 148 | ||
| 150 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); | 149 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); |
| 151 | put_cpu(); | 150 | put_cpu(); |
| @@ -168,6 +167,8 @@ void cpu_idle_wait(void) | |||
| 168 | } | 167 | } |
| 169 | cpus_and(map, map, cpu_online_map); | 168 | cpus_and(map, map, cpu_online_map); |
| 170 | } while (!cpus_empty(map)); | 169 | } while (!cpus_empty(map)); |
| 170 | |||
| 171 | set_cpus_allowed(current, tmp); | ||
| 171 | } | 172 | } |
| 172 | EXPORT_SYMBOL_GPL(cpu_idle_wait); | 173 | EXPORT_SYMBOL_GPL(cpu_idle_wait); |
| 173 | 174 | ||
| @@ -238,20 +239,28 @@ void cpu_idle (void) | |||
| 238 | * We execute MONITOR against need_resched and enter optimized wait state | 239 | * We execute MONITOR against need_resched and enter optimized wait state |
| 239 | * through MWAIT. Whenever someone changes need_resched, we would be woken | 240 | * through MWAIT. Whenever someone changes need_resched, we would be woken |
| 240 | * up from MWAIT (without an IPI). | 241 | * up from MWAIT (without an IPI). |
| 242 | * | ||
| 243 | * New with Core Duo processors, MWAIT can take some hints based on CPU | ||
| 244 | * capability. | ||
| 241 | */ | 245 | */ |
| 242 | static void mwait_idle(void) | 246 | void mwait_idle_with_hints(unsigned long eax, unsigned long ecx) |
| 243 | { | 247 | { |
| 244 | local_irq_enable(); | 248 | if (!need_resched()) { |
| 245 | |||
| 246 | while (!need_resched()) { | ||
| 247 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 249 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 248 | smp_mb(); | 250 | smp_mb(); |
| 249 | if (need_resched()) | 251 | if (!need_resched()) |
| 250 | break; | 252 | __mwait(eax, ecx); |
| 251 | __mwait(0, 0); | ||
| 252 | } | 253 | } |
| 253 | } | 254 | } |
| 254 | 255 | ||
| 256 | /* Default MONITOR/MWAIT with no hints, used for default C1 state */ | ||
| 257 | static void mwait_idle(void) | ||
| 258 | { | ||
| 259 | local_irq_enable(); | ||
| 260 | while (!need_resched()) | ||
| 261 | mwait_idle_with_hints(0,0); | ||
| 262 | } | ||
| 263 | |||
| 255 | void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) | 264 | void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) |
| 256 | { | 265 | { |
| 257 | static int printed; | 266 | static int printed; |
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index 4f67697f5036..9f74c883568c 100644 --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c | |||
| @@ -376,9 +376,8 @@ int smp_call_function_single (int cpu, void (*func) (void *info), void *info, | |||
| 376 | /* prevent preemption and reschedule on another processor */ | 376 | /* prevent preemption and reschedule on another processor */ |
| 377 | int me = get_cpu(); | 377 | int me = get_cpu(); |
| 378 | if (cpu == me) { | 378 | if (cpu == me) { |
| 379 | WARN_ON(1); | ||
| 380 | put_cpu(); | 379 | put_cpu(); |
| 381 | return -EBUSY; | 380 | return 0; |
| 382 | } | 381 | } |
| 383 | spin_lock_bh(&call_lock); | 382 | spin_lock_bh(&call_lock); |
| 384 | __smp_call_function_single(cpu, func, info, nonatomic, wait); | 383 | __smp_call_function_single(cpu, func, info, nonatomic, wait); |
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c index 7b7a6870288a..62c2e747af58 100644 --- a/arch/x86_64/kernel/smpboot.c +++ b/arch/x86_64/kernel/smpboot.c | |||
| @@ -581,12 +581,16 @@ void __cpuinit start_secondary(void) | |||
| 581 | * smp_call_function(). | 581 | * smp_call_function(). |
| 582 | */ | 582 | */ |
| 583 | lock_ipi_call_lock(); | 583 | lock_ipi_call_lock(); |
| 584 | spin_lock(&vector_lock); | ||
| 584 | 585 | ||
| 586 | /* Setup the per cpu irq handling data structures */ | ||
| 587 | __setup_vector_irq(smp_processor_id()); | ||
| 585 | /* | 588 | /* |
| 586 | * Allow the master to continue. | 589 | * Allow the master to continue. |
| 587 | */ | 590 | */ |
| 588 | cpu_set(smp_processor_id(), cpu_online_map); | 591 | cpu_set(smp_processor_id(), cpu_online_map); |
| 589 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; | 592 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; |
| 593 | spin_unlock(&vector_lock); | ||
| 590 | unlock_ipi_call_lock(); | 594 | unlock_ipi_call_lock(); |
| 591 | 595 | ||
| 592 | cpu_idle(); | 596 | cpu_idle(); |
| @@ -799,7 +803,6 @@ static int __cpuinit do_boot_cpu(int cpu, int apicid) | |||
| 799 | cpu, node); | 803 | cpu, node); |
| 800 | } | 804 | } |
| 801 | 805 | ||
| 802 | |||
| 803 | alternatives_smp_switch(1); | 806 | alternatives_smp_switch(1); |
| 804 | 807 | ||
| 805 | c_idle.idle = get_idle_for_cpu(cpu); | 808 | c_idle.idle = get_idle_for_cpu(cpu); |
| @@ -1246,8 +1249,10 @@ int __cpu_disable(void) | |||
| 1246 | local_irq_disable(); | 1249 | local_irq_disable(); |
| 1247 | remove_siblinginfo(cpu); | 1250 | remove_siblinginfo(cpu); |
| 1248 | 1251 | ||
| 1252 | spin_lock(&vector_lock); | ||
| 1249 | /* It's now safe to remove this processor from the online map */ | 1253 | /* It's now safe to remove this processor from the online map */ |
| 1250 | cpu_clear(cpu, cpu_online_map); | 1254 | cpu_clear(cpu, cpu_online_map); |
| 1255 | spin_unlock(&vector_lock); | ||
| 1251 | remove_cpu_from_maps(); | 1256 | remove_cpu_from_maps(); |
| 1252 | fixup_irqs(cpu_online_map); | 1257 | fixup_irqs(cpu_online_map); |
| 1253 | return 0; | 1258 | return 0; |
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c index 1ba5a442ac32..e3ef544d2cfb 100644 --- a/arch/x86_64/kernel/time.c +++ b/arch/x86_64/kernel/time.c | |||
| @@ -876,15 +876,6 @@ static struct irqaction irq0 = { | |||
| 876 | timer_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "timer", NULL, NULL | 876 | timer_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "timer", NULL, NULL |
| 877 | }; | 877 | }; |
| 878 | 878 | ||
| 879 | static int __cpuinit | ||
| 880 | time_cpu_notifier(struct notifier_block *nb, unsigned long action, void *hcpu) | ||
| 881 | { | ||
| 882 | unsigned cpu = (unsigned long) hcpu; | ||
| 883 | if (action == CPU_ONLINE) | ||
| 884 | vsyscall_set_cpu(cpu); | ||
| 885 | return NOTIFY_DONE; | ||
| 886 | } | ||
| 887 | |||
| 888 | void __init time_init(void) | 879 | void __init time_init(void) |
| 889 | { | 880 | { |
| 890 | if (nohpet) | 881 | if (nohpet) |
| @@ -925,8 +916,6 @@ void __init time_init(void) | |||
| 925 | vxtime.last_tsc = get_cycles_sync(); | 916 | vxtime.last_tsc = get_cycles_sync(); |
| 926 | set_cyc2ns_scale(cpu_khz); | 917 | set_cyc2ns_scale(cpu_khz); |
| 927 | setup_irq(0, &irq0); | 918 | setup_irq(0, &irq0); |
| 928 | hotcpu_notifier(time_cpu_notifier, 0); | ||
| 929 | time_cpu_notifier(NULL, CPU_ONLINE, (void *)(long)smp_processor_id()); | ||
| 930 | 919 | ||
| 931 | #ifndef CONFIG_SMP | 920 | #ifndef CONFIG_SMP |
| 932 | time_init_gtod(); | 921 | time_init_gtod(); |
| @@ -948,7 +937,7 @@ __cpuinit int unsynchronized_tsc(void) | |||
| 948 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { | 937 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { |
| 949 | #ifdef CONFIG_ACPI | 938 | #ifdef CONFIG_ACPI |
| 950 | /* But TSC doesn't tick in C3 so don't use it there */ | 939 | /* But TSC doesn't tick in C3 so don't use it there */ |
| 951 | if (acpi_fadt.length > 0 && acpi_fadt.plvl3_lat < 100) | 940 | if (acpi_fadt.length > 0 && acpi_fadt.plvl3_lat < 1000) |
| 952 | return 1; | 941 | return 1; |
| 953 | #endif | 942 | #endif |
| 954 | return 0; | 943 | return 0; |
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 7819022a8db5..a153d0a01b72 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
| @@ -290,6 +290,12 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s | |||
| 290 | if (tsk && tsk != current) | 290 | if (tsk && tsk != current) |
| 291 | stack = (unsigned long *)tsk->thread.rsp; | 291 | stack = (unsigned long *)tsk->thread.rsp; |
| 292 | } | 292 | } |
| 293 | /* | ||
| 294 | * Align the stack pointer on word boundary, later loops | ||
| 295 | * rely on that (and corruption / debug info bugs can cause | ||
| 296 | * unaligned values here): | ||
| 297 | */ | ||
| 298 | stack = (unsigned long *)((unsigned long)stack & ~(sizeof(long)-1)); | ||
| 293 | 299 | ||
| 294 | /* | 300 | /* |
| 295 | * Print function call entries within a stack. 'cond' is the | 301 | * Print function call entries within a stack. 'cond' is the |
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S index b9df2ab6529f..d9534e750d4f 100644 --- a/arch/x86_64/kernel/vmlinux.lds.S +++ b/arch/x86_64/kernel/vmlinux.lds.S | |||
| @@ -17,6 +17,7 @@ PHDRS { | |||
| 17 | text PT_LOAD FLAGS(5); /* R_E */ | 17 | text PT_LOAD FLAGS(5); /* R_E */ |
| 18 | data PT_LOAD FLAGS(7); /* RWE */ | 18 | data PT_LOAD FLAGS(7); /* RWE */ |
| 19 | user PT_LOAD FLAGS(7); /* RWE */ | 19 | user PT_LOAD FLAGS(7); /* RWE */ |
| 20 | data.init PT_LOAD FLAGS(7); /* RWE */ | ||
| 20 | note PT_NOTE FLAGS(4); /* R__ */ | 21 | note PT_NOTE FLAGS(4); /* R__ */ |
| 21 | } | 22 | } |
| 22 | SECTIONS | 23 | SECTIONS |
| @@ -59,6 +60,7 @@ SECTIONS | |||
| 59 | } | 60 | } |
| 60 | #endif | 61 | #endif |
| 61 | 62 | ||
| 63 | . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ | ||
| 62 | /* Data */ | 64 | /* Data */ |
| 63 | .data : AT(ADDR(.data) - LOAD_OFFSET) { | 65 | .data : AT(ADDR(.data) - LOAD_OFFSET) { |
| 64 | *(.data) | 66 | *(.data) |
| @@ -131,7 +133,7 @@ SECTIONS | |||
| 131 | . = ALIGN(8192); /* init_task */ | 133 | . = ALIGN(8192); /* init_task */ |
| 132 | .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { | 134 | .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { |
| 133 | *(.data.init_task) | 135 | *(.data.init_task) |
| 134 | } :data | 136 | }:data.init |
| 135 | 137 | ||
| 136 | . = ALIGN(4096); | 138 | . = ALIGN(4096); |
| 137 | .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { | 139 | .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { |
| @@ -174,13 +176,7 @@ SECTIONS | |||
| 174 | __setup_end = .; | 176 | __setup_end = .; |
| 175 | __initcall_start = .; | 177 | __initcall_start = .; |
| 176 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { | 178 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { |
| 177 | *(.initcall1.init) | 179 | INITCALLS |
| 178 | *(.initcall2.init) | ||
| 179 | *(.initcall3.init) | ||
| 180 | *(.initcall4.init) | ||
| 181 | *(.initcall5.init) | ||
| 182 | *(.initcall6.init) | ||
| 183 | *(.initcall7.init) | ||
| 184 | } | 180 | } |
| 185 | __initcall_end = .; | 181 | __initcall_end = .; |
| 186 | __con_initcall_start = .; | 182 | __con_initcall_start = .; |
diff --git a/arch/x86_64/kernel/vsmp.c b/arch/x86_64/kernel/vsmp.c index 044e852bd25e..414caf0c5f9a 100644 --- a/arch/x86_64/kernel/vsmp.c +++ b/arch/x86_64/kernel/vsmp.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/pci_ids.h> | 14 | #include <linux/pci_ids.h> |
| 15 | #include <linux/pci_regs.h> | 15 | #include <linux/pci_regs.h> |
| 16 | #include <asm/pci-direct.h> | 16 | #include <asm/pci-direct.h> |
| 17 | #include <asm/io.h> | ||
| 17 | 18 | ||
| 18 | static int __init vsmp_init(void) | 19 | static int __init vsmp_init(void) |
| 19 | { | 20 | { |
diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c index a98b460af6a1..92546c1526f1 100644 --- a/arch/x86_64/kernel/vsyscall.c +++ b/arch/x86_64/kernel/vsyscall.c | |||
| @@ -27,6 +27,9 @@ | |||
| 27 | #include <linux/jiffies.h> | 27 | #include <linux/jiffies.h> |
| 28 | #include <linux/sysctl.h> | 28 | #include <linux/sysctl.h> |
| 29 | #include <linux/getcpu.h> | 29 | #include <linux/getcpu.h> |
| 30 | #include <linux/cpu.h> | ||
| 31 | #include <linux/smp.h> | ||
| 32 | #include <linux/notifier.h> | ||
| 30 | 33 | ||
| 31 | #include <asm/vsyscall.h> | 34 | #include <asm/vsyscall.h> |
| 32 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
| @@ -243,32 +246,17 @@ static ctl_table kernel_root_table2[] = { | |||
| 243 | 246 | ||
| 244 | #endif | 247 | #endif |
| 245 | 248 | ||
| 246 | static void __cpuinit write_rdtscp_cb(void *info) | 249 | /* Assume __initcall executes before all user space. Hopefully kmod |
| 247 | { | 250 | doesn't violate that. We'll find out if it does. */ |
| 248 | write_rdtscp_aux((unsigned long)info); | 251 | static void __cpuinit vsyscall_set_cpu(int cpu) |
| 249 | } | ||
| 250 | |||
| 251 | void __cpuinit vsyscall_set_cpu(int cpu) | ||
| 252 | { | 252 | { |
| 253 | unsigned long *d; | 253 | unsigned long *d; |
| 254 | unsigned long node = 0; | 254 | unsigned long node = 0; |
| 255 | #ifdef CONFIG_NUMA | 255 | #ifdef CONFIG_NUMA |
| 256 | node = cpu_to_node[cpu]; | 256 | node = cpu_to_node[cpu]; |
| 257 | #endif | 257 | #endif |
| 258 | if (cpu_has(&cpu_data[cpu], X86_FEATURE_RDTSCP)) { | 258 | if (cpu_has(&cpu_data[cpu], X86_FEATURE_RDTSCP)) |
| 259 | void *info = (void *)((node << 12) | cpu); | 259 | write_rdtscp_aux((node << 12) | cpu); |
| 260 | /* Can happen on preemptive kernel */ | ||
| 261 | if (get_cpu() == cpu) | ||
| 262 | write_rdtscp_cb(info); | ||
| 263 | #ifdef CONFIG_SMP | ||
| 264 | else { | ||
| 265 | /* the notifier is unfortunately not executed on the | ||
| 266 | target CPU */ | ||
| 267 | smp_call_function_single(cpu,write_rdtscp_cb,info,0,1); | ||
| 268 | } | ||
| 269 | #endif | ||
| 270 | put_cpu(); | ||
| 271 | } | ||
| 272 | 260 | ||
| 273 | /* Store cpu number in limit so that it can be loaded quickly | 261 | /* Store cpu number in limit so that it can be loaded quickly |
| 274 | in user space in vgetcpu. | 262 | in user space in vgetcpu. |
| @@ -280,6 +268,23 @@ void __cpuinit vsyscall_set_cpu(int cpu) | |||
| 280 | *d |= (node >> 4) << 48; | 268 | *d |= (node >> 4) << 48; |
| 281 | } | 269 | } |
| 282 | 270 | ||
| 271 | static void __cpuinit cpu_vsyscall_init(void *arg) | ||
| 272 | { | ||
| 273 | /* preemption should be already off */ | ||
| 274 | vsyscall_set_cpu(raw_smp_processor_id()); | ||
| 275 | } | ||
| 276 | |||
| 277 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 278 | static int __cpuinit | ||
| 279 | cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg) | ||
| 280 | { | ||
| 281 | long cpu = (long)arg; | ||
| 282 | if (action == CPU_ONLINE) | ||
| 283 | smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1); | ||
| 284 | return NOTIFY_DONE; | ||
| 285 | } | ||
| 286 | #endif | ||
| 287 | |||
| 283 | static void __init map_vsyscall(void) | 288 | static void __init map_vsyscall(void) |
| 284 | { | 289 | { |
| 285 | extern char __vsyscall_0; | 290 | extern char __vsyscall_0; |
| @@ -299,6 +304,8 @@ static int __init vsyscall_init(void) | |||
| 299 | #ifdef CONFIG_SYSCTL | 304 | #ifdef CONFIG_SYSCTL |
| 300 | register_sysctl_table(kernel_root_table2, 0); | 305 | register_sysctl_table(kernel_root_table2, 0); |
| 301 | #endif | 306 | #endif |
| 307 | on_each_cpu(cpu_vsyscall_init, NULL, 0, 1); | ||
| 308 | hotcpu_notifier(cpu_vsyscall_notifier, 0); | ||
| 302 | return 0; | 309 | return 0; |
| 303 | } | 310 | } |
| 304 | 311 | ||
diff --git a/arch/x86_64/mm/init.c b/arch/x86_64/mm/init.c index 19c72520a868..4c0c00ef3ca7 100644 --- a/arch/x86_64/mm/init.c +++ b/arch/x86_64/mm/init.c | |||
| @@ -406,9 +406,12 @@ void __cpuinit zap_low_mappings(int cpu) | |||
| 406 | #ifndef CONFIG_NUMA | 406 | #ifndef CONFIG_NUMA |
| 407 | void __init paging_init(void) | 407 | void __init paging_init(void) |
| 408 | { | 408 | { |
| 409 | unsigned long max_zone_pfns[MAX_NR_ZONES] = {MAX_DMA_PFN, | 409 | unsigned long max_zone_pfns[MAX_NR_ZONES]; |
| 410 | MAX_DMA32_PFN, | 410 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); |
| 411 | end_pfn}; | 411 | max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN; |
| 412 | max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN; | ||
| 413 | max_zone_pfns[ZONE_NORMAL] = end_pfn; | ||
| 414 | |||
| 412 | memory_present(0, 0, end_pfn); | 415 | memory_present(0, 0, end_pfn); |
| 413 | sparse_init(); | 416 | sparse_init(); |
| 414 | free_area_init_nodes(max_zone_pfns); | 417 | free_area_init_nodes(max_zone_pfns); |
| @@ -493,7 +496,7 @@ int remove_memory(u64 start, u64 size) | |||
| 493 | } | 496 | } |
| 494 | EXPORT_SYMBOL_GPL(remove_memory); | 497 | EXPORT_SYMBOL_GPL(remove_memory); |
| 495 | 498 | ||
| 496 | #ifndef CONFIG_ACPI_NUMA | 499 | #if !defined(CONFIG_ACPI_NUMA) && defined(CONFIG_NUMA) |
| 497 | int memory_add_physaddr_to_nid(u64 start) | 500 | int memory_add_physaddr_to_nid(u64 start) |
| 498 | { | 501 | { |
| 499 | return 0; | 502 | return 0; |
| @@ -501,13 +504,6 @@ int memory_add_physaddr_to_nid(u64 start) | |||
| 501 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); | 504 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); |
| 502 | #endif | 505 | #endif |
| 503 | 506 | ||
| 504 | #ifndef CONFIG_ACPI_NUMA | ||
| 505 | int memory_add_physaddr_to_nid(u64 start) | ||
| 506 | { | ||
| 507 | return 0; | ||
| 508 | } | ||
| 509 | #endif | ||
| 510 | |||
| 511 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 507 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
| 512 | 508 | ||
| 513 | #ifdef CONFIG_MEMORY_HOTPLUG_RESERVE | 509 | #ifdef CONFIG_MEMORY_HOTPLUG_RESERVE |
| @@ -652,9 +648,22 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
| 652 | 648 | ||
| 653 | void __init reserve_bootmem_generic(unsigned long phys, unsigned len) | 649 | void __init reserve_bootmem_generic(unsigned long phys, unsigned len) |
| 654 | { | 650 | { |
| 655 | /* Should check here against the e820 map to avoid double free */ | ||
| 656 | #ifdef CONFIG_NUMA | 651 | #ifdef CONFIG_NUMA |
| 657 | int nid = phys_to_nid(phys); | 652 | int nid = phys_to_nid(phys); |
| 653 | #endif | ||
| 654 | unsigned long pfn = phys >> PAGE_SHIFT; | ||
| 655 | if (pfn >= end_pfn) { | ||
| 656 | /* This can happen with kdump kernels when accessing firmware | ||
| 657 | tables. */ | ||
| 658 | if (pfn < end_pfn_map) | ||
| 659 | return; | ||
| 660 | printk(KERN_ERR "reserve_bootmem: illegal reserve %lx %u\n", | ||
| 661 | phys, len); | ||
| 662 | return; | ||
| 663 | } | ||
| 664 | |||
| 665 | /* Should check here against the e820 map to avoid double free */ | ||
| 666 | #ifdef CONFIG_NUMA | ||
| 658 | reserve_bootmem_node(NODE_DATA(nid), phys, len); | 667 | reserve_bootmem_node(NODE_DATA(nid), phys, len); |
| 659 | #else | 668 | #else |
| 660 | reserve_bootmem(phys, len); | 669 | reserve_bootmem(phys, len); |
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c index 829a008bd39b..2ee2e003606c 100644 --- a/arch/x86_64/mm/numa.c +++ b/arch/x86_64/mm/numa.c | |||
| @@ -338,9 +338,11 @@ static void __init arch_sparse_init(void) | |||
| 338 | void __init paging_init(void) | 338 | void __init paging_init(void) |
| 339 | { | 339 | { |
| 340 | int i; | 340 | int i; |
| 341 | unsigned long max_zone_pfns[MAX_NR_ZONES] = { MAX_DMA_PFN, | 341 | unsigned long max_zone_pfns[MAX_NR_ZONES]; |
| 342 | MAX_DMA32_PFN, | 342 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); |
| 343 | end_pfn}; | 343 | max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN; |
| 344 | max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN; | ||
| 345 | max_zone_pfns[ZONE_NORMAL] = end_pfn; | ||
| 344 | 346 | ||
| 345 | arch_sparse_init(); | 347 | arch_sparse_init(); |
| 346 | 348 | ||
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c index 3cc0544e25f5..1087e150a218 100644 --- a/arch/x86_64/mm/srat.c +++ b/arch/x86_64/mm/srat.c | |||
| @@ -207,7 +207,7 @@ static inline int save_add_info(void) | |||
| 207 | return hotadd_percent > 0; | 207 | return hotadd_percent > 0; |
| 208 | } | 208 | } |
| 209 | #else | 209 | #else |
| 210 | int update_end_of_memory(unsigned long end) {return 0;} | 210 | int update_end_of_memory(unsigned long end) {return -1;} |
| 211 | static int hotadd_enough_memory(struct bootnode *nd) {return 1;} | 211 | static int hotadd_enough_memory(struct bootnode *nd) {return 1;} |
| 212 | #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE | 212 | #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE |
| 213 | static inline int save_add_info(void) {return 1;} | 213 | static inline int save_add_info(void) {return 1;} |
| @@ -337,7 +337,7 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
| 337 | push_node_boundaries(node, nd->start >> PAGE_SHIFT, | 337 | push_node_boundaries(node, nd->start >> PAGE_SHIFT, |
| 338 | nd->end >> PAGE_SHIFT); | 338 | nd->end >> PAGE_SHIFT); |
| 339 | 339 | ||
| 340 | if (ma->flags.hot_pluggable && !reserve_hotadd(node, start, end) < 0) { | 340 | if (ma->flags.hot_pluggable && (reserve_hotadd(node, start, end) < 0)) { |
| 341 | /* Ignore hotadd region. Undo damage */ | 341 | /* Ignore hotadd region. Undo damage */ |
| 342 | printk(KERN_NOTICE "SRAT: Hotplug region ignored\n"); | 342 | printk(KERN_NOTICE "SRAT: Hotplug region ignored\n"); |
| 343 | *nd = oldnode; | 343 | *nd = oldnode; |
diff --git a/arch/x86_64/pci/Makefile b/arch/x86_64/pci/Makefile index 1eb18f421edf..149aba05a5b8 100644 --- a/arch/x86_64/pci/Makefile +++ b/arch/x86_64/pci/Makefile | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | # Reuse the i386 PCI subsystem | 4 | # Reuse the i386 PCI subsystem |
| 5 | # | 5 | # |
| 6 | CFLAGS += -Iarch/i386/pci | 6 | EXTRA_CFLAGS += -Iarch/i386/pci |
| 7 | 7 | ||
| 8 | obj-y := i386.o | 8 | obj-y := i386.o |
| 9 | obj-$(CONFIG_PCI_DIRECT)+= direct.o | 9 | obj-$(CONFIG_PCI_DIRECT)+= direct.o |
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c index 7732f4254d21..f8b6b2800a62 100644 --- a/arch/x86_64/pci/mmconfig.c +++ b/arch/x86_64/pci/mmconfig.c | |||
| @@ -163,37 +163,6 @@ static __init void unreachable_devices(void) | |||
| 163 | } | 163 | } |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | static __init void pci_mmcfg_insert_resources(void) | ||
| 167 | { | ||
| 168 | #define PCI_MMCFG_RESOURCE_NAME_LEN 19 | ||
| 169 | int i; | ||
| 170 | struct resource *res; | ||
| 171 | char *names; | ||
| 172 | unsigned num_buses; | ||
| 173 | |||
| 174 | res = kcalloc(PCI_MMCFG_RESOURCE_NAME_LEN + sizeof(*res), | ||
| 175 | pci_mmcfg_config_num, GFP_KERNEL); | ||
| 176 | |||
| 177 | if (!res) { | ||
| 178 | printk(KERN_ERR "PCI: Unable to allocate MMCONFIG resources\n"); | ||
| 179 | return; | ||
| 180 | } | ||
| 181 | |||
| 182 | names = (void *)&res[pci_mmcfg_config_num]; | ||
| 183 | for (i = 0; i < pci_mmcfg_config_num; i++, res++) { | ||
| 184 | num_buses = pci_mmcfg_config[i].end_bus_number - | ||
| 185 | pci_mmcfg_config[i].start_bus_number + 1; | ||
| 186 | res->name = names; | ||
| 187 | snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN, "PCI MMCONFIG %u", | ||
| 188 | pci_mmcfg_config[i].pci_segment_group_number); | ||
| 189 | res->start = pci_mmcfg_config[i].base_address; | ||
| 190 | res->end = res->start + (num_buses << 20) - 1; | ||
| 191 | res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; | ||
| 192 | insert_resource(&iomem_resource, res); | ||
| 193 | names += PCI_MMCFG_RESOURCE_NAME_LEN; | ||
| 194 | } | ||
| 195 | } | ||
| 196 | |||
| 197 | void __init pci_mmcfg_init(int type) | 166 | void __init pci_mmcfg_init(int type) |
| 198 | { | 167 | { |
| 199 | int i; | 168 | int i; |
| @@ -220,7 +189,7 @@ void __init pci_mmcfg_init(int type) | |||
| 220 | 189 | ||
| 221 | pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); | 190 | pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); |
| 222 | if (pci_mmcfg_virt == NULL) { | 191 | if (pci_mmcfg_virt == NULL) { |
| 223 | printk("PCI: Can not allocate memory for mmconfig structures\n"); | 192 | printk(KERN_ERR "PCI: Can not allocate memory for mmconfig structures\n"); |
| 224 | return; | 193 | return; |
| 225 | } | 194 | } |
| 226 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | 195 | for (i = 0; i < pci_mmcfg_config_num; ++i) { |
| @@ -228,7 +197,8 @@ void __init pci_mmcfg_init(int type) | |||
| 228 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, | 197 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, |
| 229 | MMCONFIG_APER_MAX); | 198 | MMCONFIG_APER_MAX); |
| 230 | if (!pci_mmcfg_virt[i].virt) { | 199 | if (!pci_mmcfg_virt[i].virt) { |
| 231 | printk("PCI: Cannot map mmconfig aperture for segment %d\n", | 200 | printk(KERN_ERR "PCI: Cannot map mmconfig aperture for " |
| 201 | "segment %d\n", | ||
| 232 | pci_mmcfg_config[i].pci_segment_group_number); | 202 | pci_mmcfg_config[i].pci_segment_group_number); |
| 233 | return; | 203 | return; |
| 234 | } | 204 | } |
| @@ -236,7 +206,6 @@ void __init pci_mmcfg_init(int type) | |||
| 236 | } | 206 | } |
| 237 | 207 | ||
| 238 | unreachable_devices(); | 208 | unreachable_devices(); |
| 239 | pci_mmcfg_insert_resources(); | ||
| 240 | 209 | ||
| 241 | raw_pci_ops = &pci_mmcfg; | 210 | raw_pci_ops = &pci_mmcfg; |
| 242 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; | 211 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; |
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index ab6cdbd5eb68..cfe75f528725 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
| @@ -184,13 +184,7 @@ SECTIONS | |||
| 184 | 184 | ||
| 185 | __initcall_start = .; | 185 | __initcall_start = .; |
| 186 | .initcall.init : { | 186 | .initcall.init : { |
| 187 | *(.initcall1.init) | 187 | INITCALLS |
| 188 | *(.initcall2.init) | ||
| 189 | *(.initcall3.init) | ||
| 190 | *(.initcall4.init) | ||
| 191 | *(.initcall5.init) | ||
| 192 | *(.initcall6.init) | ||
| 193 | *(.initcall7.init) | ||
| 194 | } | 188 | } |
| 195 | __initcall_end = .; | 189 | __initcall_end = .; |
| 196 | 190 | ||
