diff options
39 files changed, 680 insertions, 290 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index 3be8ab2a886a..82fafe0429fe 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
| @@ -157,6 +157,9 @@ struct virtqueue | |||
| 157 | 157 | ||
| 158 | /* The routine to call when the Guest pings us. */ | 158 | /* The routine to call when the Guest pings us. */ |
| 159 | void (*handle_output)(int fd, struct virtqueue *me); | 159 | void (*handle_output)(int fd, struct virtqueue *me); |
| 160 | |||
| 161 | /* Outstanding buffers */ | ||
| 162 | unsigned int inflight; | ||
| 160 | }; | 163 | }; |
| 161 | 164 | ||
| 162 | /* Remember the arguments to the program so we can "reboot" */ | 165 | /* Remember the arguments to the program so we can "reboot" */ |
| @@ -702,6 +705,7 @@ static unsigned get_vq_desc(struct virtqueue *vq, | |||
| 702 | errx(1, "Looped descriptor"); | 705 | errx(1, "Looped descriptor"); |
| 703 | } while ((i = next_desc(vq, i)) != vq->vring.num); | 706 | } while ((i = next_desc(vq, i)) != vq->vring.num); |
| 704 | 707 | ||
| 708 | vq->inflight++; | ||
| 705 | return head; | 709 | return head; |
| 706 | } | 710 | } |
| 707 | 711 | ||
| @@ -719,6 +723,7 @@ static void add_used(struct virtqueue *vq, unsigned int head, int len) | |||
| 719 | /* Make sure buffer is written before we update index. */ | 723 | /* Make sure buffer is written before we update index. */ |
| 720 | wmb(); | 724 | wmb(); |
| 721 | vq->vring.used->idx++; | 725 | vq->vring.used->idx++; |
| 726 | vq->inflight--; | ||
| 722 | } | 727 | } |
| 723 | 728 | ||
| 724 | /* This actually sends the interrupt for this virtqueue */ | 729 | /* This actually sends the interrupt for this virtqueue */ |
| @@ -726,8 +731,9 @@ static void trigger_irq(int fd, struct virtqueue *vq) | |||
| 726 | { | 731 | { |
| 727 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; | 732 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; |
| 728 | 733 | ||
| 729 | /* If they don't want an interrupt, don't send one. */ | 734 | /* If they don't want an interrupt, don't send one, unless empty. */ |
| 730 | if (vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) | 735 | if ((vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) |
| 736 | && vq->inflight) | ||
| 731 | return; | 737 | return; |
| 732 | 738 | ||
| 733 | /* Send the Guest an interrupt tell them we used something up. */ | 739 | /* Send the Guest an interrupt tell them we used something up. */ |
| @@ -1107,6 +1113,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs, | |||
| 1107 | vq->next = NULL; | 1113 | vq->next = NULL; |
| 1108 | vq->last_avail_idx = 0; | 1114 | vq->last_avail_idx = 0; |
| 1109 | vq->dev = dev; | 1115 | vq->dev = dev; |
| 1116 | vq->inflight = 0; | ||
| 1110 | 1117 | ||
| 1111 | /* Initialize the configuration. */ | 1118 | /* Initialize the configuration. */ |
| 1112 | vq->config.num = num_descs; | 1119 | vq->config.num = num_descs; |
| @@ -1368,6 +1375,7 @@ static void setup_tun_net(const char *arg) | |||
| 1368 | 1375 | ||
| 1369 | /* Tell Guest what MAC address to use. */ | 1376 | /* Tell Guest what MAC address to use. */ |
| 1370 | add_feature(dev, VIRTIO_NET_F_MAC); | 1377 | add_feature(dev, VIRTIO_NET_F_MAC); |
| 1378 | add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY); | ||
| 1371 | set_config(dev, sizeof(conf), &conf); | 1379 | set_config(dev, sizeof(conf), &conf); |
| 1372 | 1380 | ||
| 1373 | /* We don't need the socket any more; setup is done. */ | 1381 | /* We don't need the socket any more; setup is done. */ |
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 08a780d89807..fa9b6bbeb5af 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts | |||
| @@ -251,14 +251,14 @@ | |||
| 251 | dma@c300 { | 251 | dma@c300 { |
| 252 | #address-cells = <1>; | 252 | #address-cells = <1>; |
| 253 | #size-cells = <1>; | 253 | #size-cells = <1>; |
| 254 | compatible = "fsl,mpc8610-dma", "fsl,mpc8540-dma"; | 254 | compatible = "fsl,mpc8610-dma", "fsl,eloplus-dma"; |
| 255 | cell-index = <1>; | 255 | cell-index = <1>; |
| 256 | reg = <0xc300 0x4>; /* DMA general status register */ | 256 | reg = <0xc300 0x4>; /* DMA general status register */ |
| 257 | ranges = <0x0 0xc100 0x200>; | 257 | ranges = <0x0 0xc100 0x200>; |
| 258 | 258 | ||
| 259 | dma-channel@0 { | 259 | dma-channel@0 { |
| 260 | compatible = "fsl,mpc8610-dma-channel", | 260 | compatible = "fsl,mpc8610-dma-channel", |
| 261 | "fsl,mpc8540-dma-channel"; | 261 | "fsl,eloplus-dma-channel"; |
| 262 | cell-index = <0>; | 262 | cell-index = <0>; |
| 263 | reg = <0x0 0x80>; | 263 | reg = <0x0 0x80>; |
| 264 | interrupt-parent = <&mpic>; | 264 | interrupt-parent = <&mpic>; |
| @@ -266,7 +266,7 @@ | |||
| 266 | }; | 266 | }; |
| 267 | dma-channel@1 { | 267 | dma-channel@1 { |
| 268 | compatible = "fsl,mpc8610-dma-channel", | 268 | compatible = "fsl,mpc8610-dma-channel", |
| 269 | "fsl,mpc8540-dma-channel"; | 269 | "fsl,eloplus-dma-channel"; |
| 270 | cell-index = <1>; | 270 | cell-index = <1>; |
| 271 | reg = <0x80 0x80>; | 271 | reg = <0x80 0x80>; |
| 272 | interrupt-parent = <&mpic>; | 272 | interrupt-parent = <&mpic>; |
| @@ -274,7 +274,7 @@ | |||
| 274 | }; | 274 | }; |
| 275 | dma-channel@2 { | 275 | dma-channel@2 { |
| 276 | compatible = "fsl,mpc8610-dma-channel", | 276 | compatible = "fsl,mpc8610-dma-channel", |
| 277 | "fsl,mpc8540-dma-channel"; | 277 | "fsl,eloplus-dma-channel"; |
| 278 | cell-index = <2>; | 278 | cell-index = <2>; |
| 279 | reg = <0x100 0x80>; | 279 | reg = <0x100 0x80>; |
| 280 | interrupt-parent = <&mpic>; | 280 | interrupt-parent = <&mpic>; |
| @@ -282,7 +282,7 @@ | |||
| 282 | }; | 282 | }; |
| 283 | dma-channel@3 { | 283 | dma-channel@3 { |
| 284 | compatible = "fsl,mpc8610-dma-channel", | 284 | compatible = "fsl,mpc8610-dma-channel", |
| 285 | "fsl,mpc8540-dma-channel"; | 285 | "fsl,eloplus-dma-channel"; |
| 286 | cell-index = <3>; | 286 | cell-index = <3>; |
| 287 | reg = <0x180 0x80>; | 287 | reg = <0x180 0x80>; |
| 288 | interrupt-parent = <&mpic>; | 288 | interrupt-parent = <&mpic>; |
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig index 09f306248f2e..199e5f59d7a6 100644 --- a/arch/powerpc/configs/pasemi_defconfig +++ b/arch/powerpc/configs/pasemi_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.25-rc6 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Tue Mar 25 10:25:48 2008 | 4 | # Tue May 27 16:08:06 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | 7 | ||
| @@ -29,6 +29,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y | |||
| 29 | CONFIG_GENERIC_HARDIRQS=y | 29 | CONFIG_GENERIC_HARDIRQS=y |
| 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y |
| 31 | CONFIG_IRQ_PER_CPU=y | 31 | CONFIG_IRQ_PER_CPU=y |
| 32 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 33 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 34 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 32 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 35 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 33 | CONFIG_ARCH_HAS_ILOG2_U32=y | 36 | CONFIG_ARCH_HAS_ILOG2_U32=y |
| 34 | CONFIG_ARCH_HAS_ILOG2_U64=y | 37 | CONFIG_ARCH_HAS_ILOG2_U64=y |
| @@ -87,6 +90,7 @@ CONFIG_INITRAMFS_SOURCE="" | |||
| 87 | CONFIG_SYSCTL=y | 90 | CONFIG_SYSCTL=y |
| 88 | # CONFIG_EMBEDDED is not set | 91 | # CONFIG_EMBEDDED is not set |
| 89 | CONFIG_SYSCTL_SYSCALL=y | 92 | CONFIG_SYSCTL_SYSCALL=y |
| 93 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
| 90 | CONFIG_KALLSYMS=y | 94 | CONFIG_KALLSYMS=y |
| 91 | # CONFIG_KALLSYMS_ALL is not set | 95 | # CONFIG_KALLSYMS_ALL is not set |
| 92 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 96 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -115,12 +119,14 @@ CONFIG_HAVE_OPROFILE=y | |||
| 115 | # CONFIG_KPROBES is not set | 119 | # CONFIG_KPROBES is not set |
| 116 | CONFIG_HAVE_KPROBES=y | 120 | CONFIG_HAVE_KPROBES=y |
| 117 | CONFIG_HAVE_KRETPROBES=y | 121 | CONFIG_HAVE_KRETPROBES=y |
| 122 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 118 | CONFIG_PROC_PAGE_MONITOR=y | 123 | CONFIG_PROC_PAGE_MONITOR=y |
| 119 | CONFIG_SLABINFO=y | 124 | CONFIG_SLABINFO=y |
| 120 | CONFIG_RT_MUTEXES=y | 125 | CONFIG_RT_MUTEXES=y |
| 121 | # CONFIG_TINY_SHMEM is not set | 126 | # CONFIG_TINY_SHMEM is not set |
| 122 | CONFIG_BASE_SMALL=0 | 127 | CONFIG_BASE_SMALL=0 |
| 123 | CONFIG_MODULES=y | 128 | CONFIG_MODULES=y |
| 129 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 124 | CONFIG_MODULE_UNLOAD=y | 130 | CONFIG_MODULE_UNLOAD=y |
| 125 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 131 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 126 | # CONFIG_MODVERSIONS is not set | 132 | # CONFIG_MODVERSIONS is not set |
| @@ -167,11 +173,11 @@ CONFIG_PPC_PASEMI=y | |||
| 167 | CONFIG_PPC_PASEMI_IOMMU=y | 173 | CONFIG_PPC_PASEMI_IOMMU=y |
| 168 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set | 174 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set |
| 169 | CONFIG_PPC_PASEMI_MDIO=y | 175 | CONFIG_PPC_PASEMI_MDIO=y |
| 170 | # CONFIG_PPC_CELLEB is not set | ||
| 171 | # CONFIG_PPC_PS3 is not set | 176 | # CONFIG_PPC_PS3 is not set |
| 172 | # CONFIG_PPC_CELL is not set | 177 | # CONFIG_PPC_CELL is not set |
| 173 | # CONFIG_PPC_CELL_NATIVE is not set | 178 | # CONFIG_PPC_CELL_NATIVE is not set |
| 174 | # CONFIG_PPC_IBM_CELL_BLADE is not set | 179 | # CONFIG_PPC_IBM_CELL_BLADE is not set |
| 180 | # CONFIG_PPC_CELLEB is not set | ||
| 175 | # CONFIG_PQ2ADS is not set | 181 | # CONFIG_PQ2ADS is not set |
| 176 | CONFIG_PPC_NATIVE=y | 182 | CONFIG_PPC_NATIVE=y |
| 177 | # CONFIG_IPIC is not set | 183 | # CONFIG_IPIC is not set |
| @@ -192,6 +198,7 @@ CONFIG_CPU_FREQ_DEBUG=y | |||
| 192 | CONFIG_CPU_FREQ_STAT=y | 198 | CONFIG_CPU_FREQ_STAT=y |
| 193 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 199 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
| 194 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 200 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y |
| 201 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 202 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 196 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 203 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set |
| 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 204 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| @@ -226,7 +233,6 @@ CONFIG_PREEMPT_NONE=y | |||
| 226 | CONFIG_BINFMT_ELF=y | 233 | CONFIG_BINFMT_ELF=y |
| 227 | CONFIG_COMPAT_BINFMT_ELF=y | 234 | CONFIG_COMPAT_BINFMT_ELF=y |
| 228 | # CONFIG_BINFMT_MISC is not set | 235 | # CONFIG_BINFMT_MISC is not set |
| 229 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 230 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | 236 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y |
| 231 | CONFIG_IOMMU_VMERGE=y | 237 | CONFIG_IOMMU_VMERGE=y |
| 232 | CONFIG_IOMMU_HELPER=y | 238 | CONFIG_IOMMU_HELPER=y |
| @@ -249,12 +255,14 @@ CONFIG_FLATMEM=y | |||
| 249 | CONFIG_FLAT_NODE_MEM_MAP=y | 255 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 250 | # CONFIG_SPARSEMEM_STATIC is not set | 256 | # CONFIG_SPARSEMEM_STATIC is not set |
| 251 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | 257 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y |
| 258 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 252 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 259 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 253 | CONFIG_RESOURCES_64BIT=y | 260 | CONFIG_RESOURCES_64BIT=y |
| 254 | CONFIG_ZONE_DMA_FLAG=1 | 261 | CONFIG_ZONE_DMA_FLAG=1 |
| 255 | CONFIG_BOUNCE=y | 262 | CONFIG_BOUNCE=y |
| 256 | CONFIG_PPC_HAS_HASH_64K=y | 263 | CONFIG_PPC_HAS_HASH_64K=y |
| 257 | CONFIG_PPC_64K_PAGES=y | 264 | CONFIG_PPC_64K_PAGES=y |
| 265 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 258 | # CONFIG_PPC_SUBPAGE_PROT is not set | 266 | # CONFIG_PPC_SUBPAGE_PROT is not set |
| 259 | # CONFIG_SCHED_SMT is not set | 267 | # CONFIG_SCHED_SMT is not set |
| 260 | CONFIG_PROC_DEVICETREE=y | 268 | CONFIG_PROC_DEVICETREE=y |
| @@ -290,9 +298,12 @@ CONFIG_CARDBUS=y | |||
| 290 | # CONFIG_YENTA is not set | 298 | # CONFIG_YENTA is not set |
| 291 | # CONFIG_PD6729 is not set | 299 | # CONFIG_PD6729 is not set |
| 292 | # CONFIG_I82092 is not set | 300 | # CONFIG_I82092 is not set |
| 293 | # CONFIG_ELECTRA_CF is not set | 301 | CONFIG_ELECTRA_CF=y |
| 294 | # CONFIG_HOTPLUG_PCI is not set | 302 | # CONFIG_HOTPLUG_PCI is not set |
| 303 | # CONFIG_HAS_RAPIDIO is not set | ||
| 304 | CONFIG_PAGE_OFFSET=0xc000000000000000 | ||
| 295 | CONFIG_KERNEL_START=0xc000000000000000 | 305 | CONFIG_KERNEL_START=0xc000000000000000 |
| 306 | CONFIG_PHYSICAL_START=0x00000000 | ||
| 296 | 307 | ||
| 297 | # | 308 | # |
| 298 | # Networking | 309 | # Networking |
| @@ -341,8 +352,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 341 | CONFIG_DEFAULT_TCP_CONG="cubic" | 352 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 342 | # CONFIG_TCP_MD5SIG is not set | 353 | # CONFIG_TCP_MD5SIG is not set |
| 343 | # CONFIG_IPV6 is not set | 354 | # CONFIG_IPV6 is not set |
| 344 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 345 | # CONFIG_INET6_TUNNEL is not set | ||
| 346 | # CONFIG_NETWORK_SECMARK is not set | 355 | # CONFIG_NETWORK_SECMARK is not set |
| 347 | # CONFIG_NETFILTER is not set | 356 | # CONFIG_NETFILTER is not set |
| 348 | # CONFIG_IP_DCCP is not set | 357 | # CONFIG_IP_DCCP is not set |
| @@ -473,6 +482,7 @@ CONFIG_MTD_NAND_PASEMI=y | |||
| 473 | # | 482 | # |
| 474 | # CONFIG_MTD_UBI is not set | 483 | # CONFIG_MTD_UBI is not set |
| 475 | CONFIG_OF_DEVICE=y | 484 | CONFIG_OF_DEVICE=y |
| 485 | CONFIG_OF_I2C=y | ||
| 476 | # CONFIG_PARPORT is not set | 486 | # CONFIG_PARPORT is not set |
| 477 | CONFIG_BLK_DEV=y | 487 | CONFIG_BLK_DEV=y |
| 478 | # CONFIG_BLK_DEV_FD is not set | 488 | # CONFIG_BLK_DEV_FD is not set |
| @@ -520,7 +530,6 @@ CONFIG_IDE_PROC_FS=y | |||
| 520 | # | 530 | # |
| 521 | # IDE chipset support/bugfixes | 531 | # IDE chipset support/bugfixes |
| 522 | # | 532 | # |
| 523 | # CONFIG_IDE_GENERIC is not set | ||
| 524 | # CONFIG_BLK_DEV_PLATFORM is not set | 533 | # CONFIG_BLK_DEV_PLATFORM is not set |
| 525 | 534 | ||
| 526 | # | 535 | # |
| @@ -554,7 +563,7 @@ CONFIG_IDE_PROC_FS=y | |||
| 554 | # CONFIG_BLK_DEV_VIA82CXXX is not set | 563 | # CONFIG_BLK_DEV_VIA82CXXX is not set |
| 555 | # CONFIG_BLK_DEV_TC86C001 is not set | 564 | # CONFIG_BLK_DEV_TC86C001 is not set |
| 556 | # CONFIG_BLK_DEV_IDEDMA is not set | 565 | # CONFIG_BLK_DEV_IDEDMA is not set |
| 557 | CONFIG_IDE_ARCH_OBSOLETE_INIT=y | 566 | # CONFIG_BLK_DEV_HD_ONLY is not set |
| 558 | # CONFIG_BLK_DEV_HD is not set | 567 | # CONFIG_BLK_DEV_HD is not set |
| 559 | 568 | ||
| 560 | # | 569 | # |
| @@ -632,7 +641,10 @@ CONFIG_SCSI_LOWLEVEL=y | |||
| 632 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | 641 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set |
| 633 | CONFIG_ATA=y | 642 | CONFIG_ATA=y |
| 634 | # CONFIG_ATA_NONSTANDARD is not set | 643 | # CONFIG_ATA_NONSTANDARD is not set |
| 644 | CONFIG_SATA_PMP=y | ||
| 635 | # CONFIG_SATA_AHCI is not set | 645 | # CONFIG_SATA_AHCI is not set |
| 646 | CONFIG_SATA_SIL24=y | ||
| 647 | CONFIG_ATA_SFF=y | ||
| 636 | # CONFIG_SATA_SVW is not set | 648 | # CONFIG_SATA_SVW is not set |
| 637 | # CONFIG_ATA_PIIX is not set | 649 | # CONFIG_ATA_PIIX is not set |
| 638 | CONFIG_SATA_MV=y | 650 | CONFIG_SATA_MV=y |
| @@ -642,7 +654,6 @@ CONFIG_SATA_MV=y | |||
| 642 | # CONFIG_SATA_PROMISE is not set | 654 | # CONFIG_SATA_PROMISE is not set |
| 643 | # CONFIG_SATA_SX4 is not set | 655 | # CONFIG_SATA_SX4 is not set |
| 644 | # CONFIG_SATA_SIL is not set | 656 | # CONFIG_SATA_SIL is not set |
| 645 | CONFIG_SATA_SIL24=y | ||
| 646 | # CONFIG_SATA_SIS is not set | 657 | # CONFIG_SATA_SIS is not set |
| 647 | # CONFIG_SATA_ULI is not set | 658 | # CONFIG_SATA_ULI is not set |
| 648 | # CONFIG_SATA_VIA is not set | 659 | # CONFIG_SATA_VIA is not set |
| @@ -689,6 +700,7 @@ CONFIG_PATA_PCMCIA=y | |||
| 689 | # CONFIG_PATA_WINBOND is not set | 700 | # CONFIG_PATA_WINBOND is not set |
| 690 | CONFIG_PATA_PLATFORM=y | 701 | CONFIG_PATA_PLATFORM=y |
| 691 | CONFIG_PATA_OF_PLATFORM=y | 702 | CONFIG_PATA_OF_PLATFORM=y |
| 703 | # CONFIG_PATA_SCH is not set | ||
| 692 | CONFIG_MD=y | 704 | CONFIG_MD=y |
| 693 | CONFIG_BLK_DEV_MD=y | 705 | CONFIG_BLK_DEV_MD=y |
| 694 | CONFIG_MD_LINEAR=y | 706 | CONFIG_MD_LINEAR=y |
| @@ -791,7 +803,6 @@ CONFIG_E1000_NAPI=y | |||
| 791 | # CONFIG_SIS190 is not set | 803 | # CONFIG_SIS190 is not set |
| 792 | # CONFIG_SKGE is not set | 804 | # CONFIG_SKGE is not set |
| 793 | # CONFIG_SKY2 is not set | 805 | # CONFIG_SKY2 is not set |
| 794 | # CONFIG_SK98LIN is not set | ||
| 795 | # CONFIG_VIA_VELOCITY is not set | 806 | # CONFIG_VIA_VELOCITY is not set |
| 796 | CONFIG_TIGON3=y | 807 | CONFIG_TIGON3=y |
| 797 | # CONFIG_BNX2 is not set | 808 | # CONFIG_BNX2 is not set |
| @@ -810,6 +821,7 @@ CONFIG_PASEMI_MAC=y | |||
| 810 | # CONFIG_MLX4_CORE is not set | 821 | # CONFIG_MLX4_CORE is not set |
| 811 | # CONFIG_TEHUTI is not set | 822 | # CONFIG_TEHUTI is not set |
| 812 | # CONFIG_BNX2X is not set | 823 | # CONFIG_BNX2X is not set |
| 824 | # CONFIG_SFC is not set | ||
| 813 | # CONFIG_TR is not set | 825 | # CONFIG_TR is not set |
| 814 | 826 | ||
| 815 | # | 827 | # |
| @@ -817,6 +829,7 @@ CONFIG_PASEMI_MAC=y | |||
| 817 | # | 829 | # |
| 818 | # CONFIG_WLAN_PRE80211 is not set | 830 | # CONFIG_WLAN_PRE80211 is not set |
| 819 | # CONFIG_WLAN_80211 is not set | 831 | # CONFIG_WLAN_80211 is not set |
| 832 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 820 | 833 | ||
| 821 | # | 834 | # |
| 822 | # USB Network Adapters | 835 | # USB Network Adapters |
| @@ -890,6 +903,7 @@ CONFIG_VT=y | |||
| 890 | CONFIG_VT_CONSOLE=y | 903 | CONFIG_VT_CONSOLE=y |
| 891 | CONFIG_HW_CONSOLE=y | 904 | CONFIG_HW_CONSOLE=y |
| 892 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | 905 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 906 | CONFIG_DEVKMEM=y | ||
| 893 | # CONFIG_SERIAL_NONSTANDARD is not set | 907 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 894 | # CONFIG_NOZOMI is not set | 908 | # CONFIG_NOZOMI is not set |
| 895 | 909 | ||
| @@ -917,7 +931,6 @@ CONFIG_LEGACY_PTY_COUNT=4 | |||
| 917 | # CONFIG_IPMI_HANDLER is not set | 931 | # CONFIG_IPMI_HANDLER is not set |
| 918 | CONFIG_HW_RANDOM=y | 932 | CONFIG_HW_RANDOM=y |
| 919 | CONFIG_HW_RANDOM_PASEMI=y | 933 | CONFIG_HW_RANDOM_PASEMI=y |
| 920 | # CONFIG_GEN_RTC is not set | ||
| 921 | # CONFIG_R3964 is not set | 934 | # CONFIG_R3964 is not set |
| 922 | # CONFIG_APPLICOM is not set | 935 | # CONFIG_APPLICOM is not set |
| 923 | 936 | ||
| @@ -936,13 +949,7 @@ CONFIG_DEVPORT=y | |||
| 936 | CONFIG_I2C=y | 949 | CONFIG_I2C=y |
| 937 | CONFIG_I2C_BOARDINFO=y | 950 | CONFIG_I2C_BOARDINFO=y |
| 938 | CONFIG_I2C_CHARDEV=y | 951 | CONFIG_I2C_CHARDEV=y |
| 939 | |||
| 940 | # | ||
| 941 | # I2C Algorithms | ||
| 942 | # | ||
| 943 | CONFIG_I2C_ALGOBIT=y | 952 | CONFIG_I2C_ALGOBIT=y |
| 944 | CONFIG_I2C_ALGOPCF=y | ||
| 945 | CONFIG_I2C_ALGOPCA=y | ||
| 946 | 953 | ||
| 947 | # | 954 | # |
| 948 | # I2C Hardware Bus support | 955 | # I2C Hardware Bus support |
| @@ -971,6 +978,7 @@ CONFIG_I2C_PASEMI=y | |||
| 971 | # CONFIG_I2C_VIA is not set | 978 | # CONFIG_I2C_VIA is not set |
| 972 | # CONFIG_I2C_VIAPRO is not set | 979 | # CONFIG_I2C_VIAPRO is not set |
| 973 | # CONFIG_I2C_VOODOO3 is not set | 980 | # CONFIG_I2C_VOODOO3 is not set |
| 981 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 974 | 982 | ||
| 975 | # | 983 | # |
| 976 | # Miscellaneous I2C Chip support | 984 | # Miscellaneous I2C Chip support |
| @@ -980,19 +988,13 @@ CONFIG_SENSORS_EEPROM=y | |||
| 980 | # CONFIG_SENSORS_PCF8574 is not set | 988 | # CONFIG_SENSORS_PCF8574 is not set |
| 981 | # CONFIG_PCF8575 is not set | 989 | # CONFIG_PCF8575 is not set |
| 982 | # CONFIG_SENSORS_PCF8591 is not set | 990 | # CONFIG_SENSORS_PCF8591 is not set |
| 983 | # CONFIG_TPS65010 is not set | ||
| 984 | # CONFIG_SENSORS_MAX6875 is not set | 991 | # CONFIG_SENSORS_MAX6875 is not set |
| 985 | # CONFIG_SENSORS_TSL2550 is not set | 992 | # CONFIG_SENSORS_TSL2550 is not set |
| 986 | # CONFIG_I2C_DEBUG_CORE is not set | 993 | # CONFIG_I2C_DEBUG_CORE is not set |
| 987 | # CONFIG_I2C_DEBUG_ALGO is not set | 994 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 988 | # CONFIG_I2C_DEBUG_BUS is not set | 995 | # CONFIG_I2C_DEBUG_BUS is not set |
| 989 | # CONFIG_I2C_DEBUG_CHIP is not set | 996 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 990 | |||
| 991 | # | ||
| 992 | # SPI support | ||
| 993 | # | ||
| 994 | # CONFIG_SPI is not set | 997 | # CONFIG_SPI is not set |
| 995 | # CONFIG_SPI_MASTER is not set | ||
| 996 | # CONFIG_W1 is not set | 998 | # CONFIG_W1 is not set |
| 997 | # CONFIG_POWER_SUPPLY is not set | 999 | # CONFIG_POWER_SUPPLY is not set |
| 998 | CONFIG_HWMON=y | 1000 | CONFIG_HWMON=y |
| @@ -1062,12 +1064,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 1062 | # Multifunction device drivers | 1064 | # Multifunction device drivers |
| 1063 | # | 1065 | # |
| 1064 | # CONFIG_MFD_SM501 is not set | 1066 | # CONFIG_MFD_SM501 is not set |
| 1067 | # CONFIG_HTC_PASIC3 is not set | ||
| 1065 | 1068 | ||
| 1066 | # | 1069 | # |
| 1067 | # Multimedia devices | 1070 | # Multimedia devices |
| 1068 | # | 1071 | # |
| 1072 | |||
| 1073 | # | ||
| 1074 | # Multimedia core support | ||
| 1075 | # | ||
| 1069 | # CONFIG_VIDEO_DEV is not set | 1076 | # CONFIG_VIDEO_DEV is not set |
| 1070 | # CONFIG_DVB_CORE is not set | 1077 | # CONFIG_DVB_CORE is not set |
| 1078 | # CONFIG_VIDEO_MEDIA is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # Multimedia drivers | ||
| 1082 | # | ||
| 1071 | CONFIG_DAB=y | 1083 | CONFIG_DAB=y |
| 1072 | # CONFIG_USB_DABUSB is not set | 1084 | # CONFIG_USB_DABUSB is not set |
| 1073 | 1085 | ||
| @@ -1094,8 +1106,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 1094 | # CONFIG_FB_SYS_FILLRECT is not set | 1106 | # CONFIG_FB_SYS_FILLRECT is not set |
| 1095 | # CONFIG_FB_SYS_COPYAREA is not set | 1107 | # CONFIG_FB_SYS_COPYAREA is not set |
| 1096 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 1108 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 1109 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 1097 | # CONFIG_FB_SYS_FOPS is not set | 1110 | # CONFIG_FB_SYS_FOPS is not set |
| 1098 | CONFIG_FB_DEFERRED_IO=y | ||
| 1099 | # CONFIG_FB_SVGALIB is not set | 1111 | # CONFIG_FB_SVGALIB is not set |
| 1100 | CONFIG_FB_MACMODES=y | 1112 | CONFIG_FB_MACMODES=y |
| 1101 | CONFIG_FB_BACKLIGHT=y | 1113 | CONFIG_FB_BACKLIGHT=y |
| @@ -1213,6 +1225,7 @@ CONFIG_SND_VERBOSE_PROCFS=y | |||
| 1213 | # CONFIG_SND_AU8810 is not set | 1225 | # CONFIG_SND_AU8810 is not set |
| 1214 | # CONFIG_SND_AU8820 is not set | 1226 | # CONFIG_SND_AU8820 is not set |
| 1215 | # CONFIG_SND_AU8830 is not set | 1227 | # CONFIG_SND_AU8830 is not set |
| 1228 | # CONFIG_SND_AW2 is not set | ||
| 1216 | # CONFIG_SND_AZT3328 is not set | 1229 | # CONFIG_SND_AZT3328 is not set |
| 1217 | # CONFIG_SND_BT87X is not set | 1230 | # CONFIG_SND_BT87X is not set |
| 1218 | # CONFIG_SND_CA0106 is not set | 1231 | # CONFIG_SND_CA0106 is not set |
| @@ -1292,11 +1305,11 @@ CONFIG_SND_USB_USX2Y=y | |||
| 1292 | # CONFIG_SND_SOC is not set | 1305 | # CONFIG_SND_SOC is not set |
| 1293 | 1306 | ||
| 1294 | # | 1307 | # |
| 1295 | # SoC Audio support for SuperH | 1308 | # ALSA SoC audio for Freescale SOCs |
| 1296 | # | 1309 | # |
| 1297 | 1310 | ||
| 1298 | # | 1311 | # |
| 1299 | # ALSA SoC audio for Freescale SOCs | 1312 | # SoC Audio for the Texas Instruments OMAP |
| 1300 | # | 1313 | # |
| 1301 | 1314 | ||
| 1302 | # | 1315 | # |
| @@ -1334,11 +1347,13 @@ CONFIG_USB_DEVICEFS=y | |||
| 1334 | # | 1347 | # |
| 1335 | # USB Host Controller Drivers | 1348 | # USB Host Controller Drivers |
| 1336 | # | 1349 | # |
| 1350 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1337 | CONFIG_USB_EHCI_HCD=y | 1351 | CONFIG_USB_EHCI_HCD=y |
| 1338 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1352 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1339 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1353 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
| 1340 | CONFIG_USB_EHCI_HCD_PPC_OF=y | 1354 | CONFIG_USB_EHCI_HCD_PPC_OF=y |
| 1341 | # CONFIG_USB_ISP116X_HCD is not set | 1355 | # CONFIG_USB_ISP116X_HCD is not set |
| 1356 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1342 | CONFIG_USB_OHCI_HCD=y | 1357 | CONFIG_USB_OHCI_HCD=y |
| 1343 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set | 1358 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set |
| 1344 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | 1359 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
| @@ -1354,6 +1369,7 @@ CONFIG_USB_SL811_HCD=y | |||
| 1354 | # | 1369 | # |
| 1355 | # CONFIG_USB_ACM is not set | 1370 | # CONFIG_USB_ACM is not set |
| 1356 | # CONFIG_USB_PRINTER is not set | 1371 | # CONFIG_USB_PRINTER is not set |
| 1372 | # CONFIG_USB_WDM is not set | ||
| 1357 | 1373 | ||
| 1358 | # | 1374 | # |
| 1359 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1375 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| @@ -1375,6 +1391,7 @@ CONFIG_USB_STORAGE=y | |||
| 1375 | # CONFIG_USB_STORAGE_ALAUDA is not set | 1391 | # CONFIG_USB_STORAGE_ALAUDA is not set |
| 1376 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1392 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
| 1377 | # CONFIG_USB_STORAGE_KARMA is not set | 1393 | # CONFIG_USB_STORAGE_KARMA is not set |
| 1394 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1378 | CONFIG_USB_LIBUSUAL=y | 1395 | CONFIG_USB_LIBUSUAL=y |
| 1379 | 1396 | ||
| 1380 | # | 1397 | # |
| @@ -1416,6 +1433,7 @@ CONFIG_USB_LIBUSUAL=y | |||
| 1416 | # CONFIG_MMC is not set | 1433 | # CONFIG_MMC is not set |
| 1417 | # CONFIG_MEMSTICK is not set | 1434 | # CONFIG_MEMSTICK is not set |
| 1418 | # CONFIG_NEW_LEDS is not set | 1435 | # CONFIG_NEW_LEDS is not set |
| 1436 | # CONFIG_ACCESSIBILITY is not set | ||
| 1419 | # CONFIG_INFINIBAND is not set | 1437 | # CONFIG_INFINIBAND is not set |
| 1420 | CONFIG_EDAC=y | 1438 | CONFIG_EDAC=y |
| 1421 | 1439 | ||
| @@ -1475,10 +1493,6 @@ CONFIG_RTC_DRV_DS1307=y | |||
| 1475 | # on-CPU RTC drivers | 1493 | # on-CPU RTC drivers |
| 1476 | # | 1494 | # |
| 1477 | # CONFIG_DMADEVICES is not set | 1495 | # CONFIG_DMADEVICES is not set |
| 1478 | |||
| 1479 | # | ||
| 1480 | # Userspace I/O | ||
| 1481 | # | ||
| 1482 | # CONFIG_UIO is not set | 1496 | # CONFIG_UIO is not set |
| 1483 | 1497 | ||
| 1484 | # | 1498 | # |
| @@ -1576,12 +1590,10 @@ CONFIG_NFS_FS=y | |||
| 1576 | CONFIG_NFS_V3=y | 1590 | CONFIG_NFS_V3=y |
| 1577 | # CONFIG_NFS_V3_ACL is not set | 1591 | # CONFIG_NFS_V3_ACL is not set |
| 1578 | # CONFIG_NFS_V4 is not set | 1592 | # CONFIG_NFS_V4 is not set |
| 1579 | # CONFIG_NFS_DIRECTIO is not set | ||
| 1580 | CONFIG_NFSD=y | 1593 | CONFIG_NFSD=y |
| 1581 | CONFIG_NFSD_V3=y | 1594 | CONFIG_NFSD_V3=y |
| 1582 | # CONFIG_NFSD_V3_ACL is not set | 1595 | # CONFIG_NFSD_V3_ACL is not set |
| 1583 | CONFIG_NFSD_V4=y | 1596 | CONFIG_NFSD_V4=y |
| 1584 | CONFIG_NFSD_TCP=y | ||
| 1585 | CONFIG_ROOT_NFS=y | 1597 | CONFIG_ROOT_NFS=y |
| 1586 | CONFIG_LOCKD=y | 1598 | CONFIG_LOCKD=y |
| 1587 | CONFIG_LOCKD_V4=y | 1599 | CONFIG_LOCKD_V4=y |
| @@ -1665,9 +1677,10 @@ CONFIG_NLS_ISO8859_1=y | |||
| 1665 | # Library routines | 1677 | # Library routines |
| 1666 | # | 1678 | # |
| 1667 | CONFIG_BITREVERSE=y | 1679 | CONFIG_BITREVERSE=y |
| 1680 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1668 | CONFIG_CRC_CCITT=y | 1681 | CONFIG_CRC_CCITT=y |
| 1669 | # CONFIG_CRC16 is not set | 1682 | # CONFIG_CRC16 is not set |
| 1670 | # CONFIG_CRC_ITU_T is not set | 1683 | CONFIG_CRC_ITU_T=y |
| 1671 | CONFIG_CRC32=y | 1684 | CONFIG_CRC32=y |
| 1672 | # CONFIG_CRC7 is not set | 1685 | # CONFIG_CRC7 is not set |
| 1673 | CONFIG_LIBCRC32C=m | 1686 | CONFIG_LIBCRC32C=m |
| @@ -1677,6 +1690,7 @@ CONFIG_PLIST=y | |||
| 1677 | CONFIG_HAS_IOMEM=y | 1690 | CONFIG_HAS_IOMEM=y |
| 1678 | CONFIG_HAS_IOPORT=y | 1691 | CONFIG_HAS_IOPORT=y |
| 1679 | CONFIG_HAS_DMA=y | 1692 | CONFIG_HAS_DMA=y |
| 1693 | CONFIG_HAVE_LMB=y | ||
| 1680 | 1694 | ||
| 1681 | # | 1695 | # |
| 1682 | # Kernel hacking | 1696 | # Kernel hacking |
| @@ -1684,6 +1698,7 @@ CONFIG_HAS_DMA=y | |||
| 1684 | # CONFIG_PRINTK_TIME is not set | 1698 | # CONFIG_PRINTK_TIME is not set |
| 1685 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1699 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1686 | CONFIG_ENABLE_MUST_CHECK=y | 1700 | CONFIG_ENABLE_MUST_CHECK=y |
| 1701 | CONFIG_FRAME_WARN=2048 | ||
| 1687 | CONFIG_MAGIC_SYSRQ=y | 1702 | CONFIG_MAGIC_SYSRQ=y |
| 1688 | # CONFIG_UNUSED_SYMBOLS is not set | 1703 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1689 | # CONFIG_DEBUG_FS is not set | 1704 | # CONFIG_DEBUG_FS is not set |
| @@ -1694,18 +1709,23 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1694 | # CONFIG_SCHED_DEBUG is not set | 1709 | # CONFIG_SCHED_DEBUG is not set |
| 1695 | # CONFIG_SCHEDSTATS is not set | 1710 | # CONFIG_SCHEDSTATS is not set |
| 1696 | # CONFIG_TIMER_STATS is not set | 1711 | # CONFIG_TIMER_STATS is not set |
| 1712 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1697 | # CONFIG_SLUB_DEBUG_ON is not set | 1713 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1698 | # CONFIG_SLUB_STATS is not set | 1714 | # CONFIG_SLUB_STATS is not set |
| 1699 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1715 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1700 | # CONFIG_RT_MUTEX_TESTER is not set | 1716 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1701 | # CONFIG_DEBUG_SPINLOCK is not set | 1717 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1702 | # CONFIG_DEBUG_MUTEXES is not set | 1718 | # CONFIG_DEBUG_MUTEXES is not set |
| 1719 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1720 | # CONFIG_PROVE_LOCKING is not set | ||
| 1721 | # CONFIG_LOCK_STAT is not set | ||
| 1703 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1722 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1704 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1723 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 1705 | # CONFIG_DEBUG_KOBJECT is not set | 1724 | # CONFIG_DEBUG_KOBJECT is not set |
| 1706 | CONFIG_DEBUG_BUGVERBOSE=y | 1725 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1707 | # CONFIG_DEBUG_INFO is not set | 1726 | # CONFIG_DEBUG_INFO is not set |
| 1708 | # CONFIG_DEBUG_VM is not set | 1727 | # CONFIG_DEBUG_VM is not set |
| 1728 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1709 | # CONFIG_DEBUG_LIST is not set | 1729 | # CONFIG_DEBUG_LIST is not set |
| 1710 | # CONFIG_DEBUG_SG is not set | 1730 | # CONFIG_DEBUG_SG is not set |
| 1711 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1731 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| @@ -1735,53 +1755,83 @@ CONFIG_ASYNC_CORE=y | |||
| 1735 | CONFIG_ASYNC_MEMCPY=y | 1755 | CONFIG_ASYNC_MEMCPY=y |
| 1736 | CONFIG_ASYNC_XOR=y | 1756 | CONFIG_ASYNC_XOR=y |
| 1737 | CONFIG_CRYPTO=y | 1757 | CONFIG_CRYPTO=y |
| 1758 | |||
| 1759 | # | ||
| 1760 | # Crypto core or helper | ||
| 1761 | # | ||
| 1738 | CONFIG_CRYPTO_ALGAPI=y | 1762 | CONFIG_CRYPTO_ALGAPI=y |
| 1739 | CONFIG_CRYPTO_AEAD=y | 1763 | CONFIG_CRYPTO_AEAD=y |
| 1740 | CONFIG_CRYPTO_BLKCIPHER=y | 1764 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1741 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1742 | CONFIG_CRYPTO_HASH=y | 1765 | CONFIG_CRYPTO_HASH=y |
| 1743 | CONFIG_CRYPTO_MANAGER=y | 1766 | CONFIG_CRYPTO_MANAGER=y |
| 1767 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1768 | # CONFIG_CRYPTO_NULL is not set | ||
| 1769 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1770 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1771 | # CONFIG_CRYPTO_TEST is not set | ||
| 1772 | |||
| 1773 | # | ||
| 1774 | # Authenticated Encryption with Associated Data | ||
| 1775 | # | ||
| 1776 | # CONFIG_CRYPTO_CCM is not set | ||
| 1777 | # CONFIG_CRYPTO_GCM is not set | ||
| 1778 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1779 | |||
| 1780 | # | ||
| 1781 | # Block modes | ||
| 1782 | # | ||
| 1783 | CONFIG_CRYPTO_CBC=y | ||
| 1784 | # CONFIG_CRYPTO_CTR is not set | ||
| 1785 | # CONFIG_CRYPTO_CTS is not set | ||
| 1786 | # CONFIG_CRYPTO_ECB is not set | ||
| 1787 | # CONFIG_CRYPTO_LRW is not set | ||
| 1788 | # CONFIG_CRYPTO_PCBC is not set | ||
| 1789 | # CONFIG_CRYPTO_XTS is not set | ||
| 1790 | |||
| 1791 | # | ||
| 1792 | # Hash modes | ||
| 1793 | # | ||
| 1744 | CONFIG_CRYPTO_HMAC=y | 1794 | CONFIG_CRYPTO_HMAC=y |
| 1745 | # CONFIG_CRYPTO_XCBC is not set | 1795 | # CONFIG_CRYPTO_XCBC is not set |
| 1746 | # CONFIG_CRYPTO_NULL is not set | 1796 | |
| 1797 | # | ||
| 1798 | # Digest | ||
| 1799 | # | ||
| 1800 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1747 | CONFIG_CRYPTO_MD4=y | 1801 | CONFIG_CRYPTO_MD4=y |
| 1748 | CONFIG_CRYPTO_MD5=y | 1802 | CONFIG_CRYPTO_MD5=y |
| 1803 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1749 | CONFIG_CRYPTO_SHA1=y | 1804 | CONFIG_CRYPTO_SHA1=y |
| 1750 | CONFIG_CRYPTO_SHA256=y | 1805 | CONFIG_CRYPTO_SHA256=y |
| 1751 | CONFIG_CRYPTO_SHA512=y | 1806 | CONFIG_CRYPTO_SHA512=y |
| 1752 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1753 | # CONFIG_CRYPTO_TGR192 is not set | 1807 | # CONFIG_CRYPTO_TGR192 is not set |
| 1754 | # CONFIG_CRYPTO_GF128MUL is not set | 1808 | # CONFIG_CRYPTO_WP512 is not set |
| 1755 | # CONFIG_CRYPTO_ECB is not set | 1809 | |
| 1756 | CONFIG_CRYPTO_CBC=y | 1810 | # |
| 1757 | # CONFIG_CRYPTO_PCBC is not set | 1811 | # Ciphers |
| 1758 | # CONFIG_CRYPTO_LRW is not set | 1812 | # |
| 1759 | # CONFIG_CRYPTO_XTS is not set | ||
| 1760 | # CONFIG_CRYPTO_CTR is not set | ||
| 1761 | # CONFIG_CRYPTO_GCM is not set | ||
| 1762 | # CONFIG_CRYPTO_CCM is not set | ||
| 1763 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1764 | CONFIG_CRYPTO_DES=y | ||
| 1765 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1766 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1767 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1768 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1769 | CONFIG_CRYPTO_AES=y | 1813 | CONFIG_CRYPTO_AES=y |
| 1814 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1815 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1816 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1817 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1770 | # CONFIG_CRYPTO_CAST5 is not set | 1818 | # CONFIG_CRYPTO_CAST5 is not set |
| 1771 | # CONFIG_CRYPTO_CAST6 is not set | 1819 | # CONFIG_CRYPTO_CAST6 is not set |
| 1772 | # CONFIG_CRYPTO_TEA is not set | 1820 | CONFIG_CRYPTO_DES=y |
| 1773 | # CONFIG_CRYPTO_ARC4 is not set | 1821 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1774 | # CONFIG_CRYPTO_KHAZAD is not set | 1822 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1775 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1776 | # CONFIG_CRYPTO_SEED is not set | ||
| 1777 | # CONFIG_CRYPTO_SALSA20 is not set | 1823 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1824 | # CONFIG_CRYPTO_SEED is not set | ||
| 1825 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1826 | # CONFIG_CRYPTO_TEA is not set | ||
| 1827 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1828 | |||
| 1829 | # | ||
| 1830 | # Compression | ||
| 1831 | # | ||
| 1778 | # CONFIG_CRYPTO_DEFLATE is not set | 1832 | # CONFIG_CRYPTO_DEFLATE is not set |
| 1779 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1780 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1781 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1782 | # CONFIG_CRYPTO_TEST is not set | ||
| 1783 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1784 | # CONFIG_CRYPTO_LZO is not set | 1833 | # CONFIG_CRYPTO_LZO is not set |
| 1785 | CONFIG_CRYPTO_HW=y | 1834 | CONFIG_CRYPTO_HW=y |
| 1786 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | 1835 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set |
| 1787 | # CONFIG_PPC_CLOCK is not set | 1836 | # CONFIG_PPC_CLOCK is not set |
| 1837 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index 602c268fc8a2..5d529bcbeee9 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
| @@ -60,8 +60,10 @@ long long __ashrdi3(long long, int); | |||
| 60 | long long __ashldi3(long long, int); | 60 | long long __ashldi3(long long, int); |
| 61 | long long __lshrdi3(long long, int); | 61 | long long __lshrdi3(long long, int); |
| 62 | 62 | ||
| 63 | EXPORT_SYMBOL(empty_zero_page); | ||
| 63 | EXPORT_SYMBOL(clear_pages); | 64 | EXPORT_SYMBOL(clear_pages); |
| 64 | EXPORT_SYMBOL(clear_user_page); | 65 | EXPORT_SYMBOL(clear_user_page); |
| 66 | EXPORT_SYMBOL(copy_page); | ||
| 65 | EXPORT_SYMBOL(transfer_to_handler); | 67 | EXPORT_SYMBOL(transfer_to_handler); |
| 66 | EXPORT_SYMBOL(do_IRQ); | 68 | EXPORT_SYMBOL(do_IRQ); |
| 67 | EXPORT_SYMBOL(machine_check_exception); | 69 | EXPORT_SYMBOL(machine_check_exception); |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index af65b2da3ba0..5c7e2fd52075 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -582,8 +582,9 @@ static void __init lguest_init_IRQ(void) | |||
| 582 | int vector = FIRST_EXTERNAL_VECTOR + i; | 582 | int vector = FIRST_EXTERNAL_VECTOR + i; |
| 583 | if (vector != SYSCALL_VECTOR) { | 583 | if (vector != SYSCALL_VECTOR) { |
| 584 | set_intr_gate(vector, interrupt[i]); | 584 | set_intr_gate(vector, interrupt[i]); |
| 585 | set_irq_chip_and_handler(i, &lguest_irq_controller, | 585 | set_irq_chip_and_handler_name(i, &lguest_irq_controller, |
| 586 | handle_level_irq); | 586 | handle_level_irq, |
| 587 | "level"); | ||
| 587 | } | 588 | } |
| 588 | } | 589 | } |
| 589 | /* This call is required to set up for 4k stacks, where we have | 590 | /* This call is required to set up for 4k stacks, where we have |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 97f83fb2ee2e..544b7d6c617c 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -502,10 +502,10 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ | 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ |
| 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ | 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ |
| 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ | 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ |
| 505 | { PCI_VDEVICE(NVIDIA, 0x0bd0), board_ahci }, /* MCP7B */ | 505 | { PCI_VDEVICE(NVIDIA, 0x0bc4), board_ahci }, /* MCP7B */ |
| 506 | { PCI_VDEVICE(NVIDIA, 0x0bd1), board_ahci }, /* MCP7B */ | 506 | { PCI_VDEVICE(NVIDIA, 0x0bc5), board_ahci }, /* MCP7B */ |
| 507 | { PCI_VDEVICE(NVIDIA, 0x0bd2), board_ahci }, /* MCP7B */ | 507 | { PCI_VDEVICE(NVIDIA, 0x0bc6), board_ahci }, /* MCP7B */ |
| 508 | { PCI_VDEVICE(NVIDIA, 0x0bd3), board_ahci }, /* MCP7B */ | 508 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ |
| 509 | 509 | ||
| 510 | /* SiS */ | 510 | /* SiS */ |
| 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index a9027b8fbdd5..3548ee7014ca 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
| @@ -247,10 +247,11 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
| 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 248 | /* SATA Controller 2 IDE (ICH8) */ | 248 | /* SATA Controller 2 IDE (ICH8) */ |
| 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
| 250 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 251 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 252 | /* Mobile SATA Controller IDE (ICH8M), Apple */ | 250 | /* Mobile SATA Controller IDE (ICH8M), Apple */ |
| 253 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, | 251 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, |
| 252 | { 0x8086, 0x2828, 0x106b, 0x00a1, 0, 0, ich8m_apple_sata }, | ||
| 253 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 254 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 254 | /* SATA Controller IDE (ICH9) */ | 255 | /* SATA Controller IDE (ICH9) */ |
| 255 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 256 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 256 | /* SATA Controller IDE (ICH9) */ | 257 | /* SATA Controller IDE (ICH9) */ |
| @@ -526,7 +527,7 @@ static struct ata_port_info piix_port_info[] = { | |||
| 526 | 527 | ||
| 527 | [ich8m_apple_sata] = | 528 | [ich8m_apple_sata] = |
| 528 | { | 529 | { |
| 529 | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR, | 530 | .flags = PIIX_SATA_FLAGS, |
| 530 | .pio_mask = 0x1f, /* pio0-4 */ | 531 | .pio_mask = 0x1f, /* pio0-4 */ |
| 531 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 532 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
| 532 | .udma_mask = ATA_UDMA6, | 533 | .udma_mask = ATA_UDMA6, |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 3c89f205c83f..cc816ca623d3 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5403,7 +5403,7 @@ static void ata_host_stop(struct device *gendev, void *res) | |||
| 5403 | */ | 5403 | */ |
| 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) | 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) |
| 5405 | { | 5405 | { |
| 5406 | static spinlock_t lock = SPIN_LOCK_UNLOCKED; | 5406 | static DEFINE_SPINLOCK(lock); |
| 5407 | const struct ata_port_operations *cur; | 5407 | const struct ata_port_operations *cur; |
| 5408 | void **begin = (void **)ops; | 5408 | void **begin = (void **)ops; |
| 5409 | void **end = (void **)&ops->inherits; | 5409 | void **end = (void **)&ops->inherits; |
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c index 0f9386d4a5a0..7daf4c0f6216 100644 --- a/drivers/ata/libata-pmp.c +++ b/drivers/ata/libata-pmp.c | |||
| @@ -322,9 +322,12 @@ static void sata_pmp_quirks(struct ata_port *ap) | |||
| 322 | if (vendor == 0x1095 && devid == 0x3726) { | 322 | if (vendor == 0x1095 && devid == 0x3726) { |
| 323 | /* sil3726 quirks */ | 323 | /* sil3726 quirks */ |
| 324 | ata_port_for_each_link(link, ap) { | 324 | ata_port_for_each_link(link, ap) { |
| 325 | /* class code report is unreliable */ | 325 | /* Class code report is unreliable and SRST |
| 326 | * times out under certain configurations. | ||
| 327 | */ | ||
| 326 | if (link->pmp < 5) | 328 | if (link->pmp < 5) |
| 327 | link->flags |= ATA_LFLAG_ASSUME_ATA; | 329 | link->flags |= ATA_LFLAG_NO_SRST | |
| 330 | ATA_LFLAG_ASSUME_ATA; | ||
| 328 | 331 | ||
| 329 | /* port 5 is for SEMB device and it doesn't like SRST */ | 332 | /* port 5 is for SEMB device and it doesn't like SRST */ |
| 330 | if (link->pmp == 5) | 333 | if (link->pmp == 5) |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index aeb6e01d82ce..2e6e1622dc6d 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
| @@ -1637,6 +1637,7 @@ defer: | |||
| 1637 | 1637 | ||
| 1638 | /** | 1638 | /** |
| 1639 | * ata_scsi_rbuf_get - Map response buffer. | 1639 | * ata_scsi_rbuf_get - Map response buffer. |
| 1640 | * @cmd: SCSI command containing buffer to be mapped. | ||
| 1640 | * @flags: unsigned long variable to store irq enable status | 1641 | * @flags: unsigned long variable to store irq enable status |
| 1641 | * @copy_in: copy in from user buffer | 1642 | * @copy_in: copy in from user buffer |
| 1642 | * | 1643 | * |
| @@ -1954,7 +1955,7 @@ static unsigned int ata_msense_ctl_mode(u8 *buf) | |||
| 1954 | 1955 | ||
| 1955 | /** | 1956 | /** |
| 1956 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page | 1957 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page |
| 1957 | * @bufp: output buffer | 1958 | * @buf: output buffer |
| 1958 | * | 1959 | * |
| 1959 | * Generate a generic MODE SENSE r/w error recovery page. | 1960 | * Generate a generic MODE SENSE r/w error recovery page. |
| 1960 | * | 1961 | * |
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c index 853559e32315..3924e7209a44 100644 --- a/drivers/ata/sata_fsl.c +++ b/drivers/ata/sata_fsl.c | |||
| @@ -34,7 +34,7 @@ enum { | |||
| 34 | 34 | ||
| 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | | 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | |
| 37 | ATA_FLAG_NCQ), | 37 | ATA_FLAG_PMP | ATA_FLAG_NCQ), |
| 38 | 38 | ||
| 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, | 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, |
| 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ | 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ |
| @@ -395,7 +395,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc) | |||
| 395 | cd = (struct command_desc *)pp->cmdentry + tag; | 395 | cd = (struct command_desc *)pp->cmdentry + tag; |
| 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; | 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; |
| 397 | 397 | ||
| 398 | ata_tf_to_fis(&qc->tf, 0, 1, (u8 *) &cd->cfis); | 398 | ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *) &cd->cfis); |
| 399 | 399 | ||
| 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", | 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", |
| 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); | 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); |
| @@ -438,6 +438,8 @@ static unsigned int sata_fsl_qc_issue(struct ata_queued_cmd *qc) | |||
| 438 | ioread32(CA + hcr_base), | 438 | ioread32(CA + hcr_base), |
| 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); | 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); |
| 440 | 440 | ||
| 441 | iowrite32(qc->dev->link->pmp, CQPMP + hcr_base); | ||
| 442 | |||
| 441 | /* Simply queue command to the controller/device */ | 443 | /* Simply queue command to the controller/device */ |
| 442 | iowrite32(1 << tag, CQ + hcr_base); | 444 | iowrite32(1 << tag, CQ + hcr_base); |
| 443 | 445 | ||
| @@ -558,11 +560,36 @@ static void sata_fsl_thaw(struct ata_port *ap) | |||
| 558 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); | 560 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); |
| 559 | } | 561 | } |
| 560 | 562 | ||
| 563 | static void sata_fsl_pmp_attach(struct ata_port *ap) | ||
| 564 | { | ||
| 565 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 566 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 567 | u32 temp; | ||
| 568 | |||
| 569 | temp = ioread32(hcr_base + HCONTROL); | ||
| 570 | iowrite32((temp | HCONTROL_PMP_ATTACHED), hcr_base + HCONTROL); | ||
| 571 | } | ||
| 572 | |||
| 573 | static void sata_fsl_pmp_detach(struct ata_port *ap) | ||
| 574 | { | ||
| 575 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 576 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 577 | u32 temp; | ||
| 578 | |||
| 579 | temp = ioread32(hcr_base + HCONTROL); | ||
| 580 | temp &= ~HCONTROL_PMP_ATTACHED; | ||
| 581 | iowrite32(temp, hcr_base + HCONTROL); | ||
| 582 | |||
| 583 | /* enable interrupts on the controller/port */ | ||
| 584 | temp = ioread32(hcr_base + HCONTROL); | ||
| 585 | iowrite32((temp | DEFAULT_PORT_IRQ_ENABLE_MASK), hcr_base + HCONTROL); | ||
| 586 | |||
| 587 | } | ||
| 588 | |||
| 561 | static int sata_fsl_port_start(struct ata_port *ap) | 589 | static int sata_fsl_port_start(struct ata_port *ap) |
| 562 | { | 590 | { |
| 563 | struct device *dev = ap->host->dev; | 591 | struct device *dev = ap->host->dev; |
| 564 | struct sata_fsl_port_priv *pp; | 592 | struct sata_fsl_port_priv *pp; |
| 565 | int retval; | ||
| 566 | void *mem; | 593 | void *mem; |
| 567 | dma_addr_t mem_dma; | 594 | dma_addr_t mem_dma; |
| 568 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 595 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| @@ -688,12 +715,13 @@ static int sata_fsl_prereset(struct ata_link *link, unsigned long deadline) | |||
| 688 | } | 715 | } |
| 689 | 716 | ||
| 690 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | 717 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, |
| 691 | unsigned long deadline) | 718 | unsigned long deadline) |
| 692 | { | 719 | { |
| 693 | struct ata_port *ap = link->ap; | 720 | struct ata_port *ap = link->ap; |
| 694 | struct sata_fsl_port_priv *pp = ap->private_data; | 721 | struct sata_fsl_port_priv *pp = ap->private_data; |
| 695 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 722 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 696 | void __iomem *hcr_base = host_priv->hcr_base; | 723 | void __iomem *hcr_base = host_priv->hcr_base; |
| 724 | int pmp = sata_srst_pmp(link); | ||
| 697 | u32 temp; | 725 | u32 temp; |
| 698 | struct ata_taskfile tf; | 726 | struct ata_taskfile tf; |
| 699 | u8 *cfis; | 727 | u8 *cfis; |
| @@ -703,6 +731,9 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | |||
| 703 | 731 | ||
| 704 | DPRINTK("in xx_softreset\n"); | 732 | DPRINTK("in xx_softreset\n"); |
| 705 | 733 | ||
| 734 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 735 | goto issue_srst; | ||
| 736 | |||
| 706 | try_offline_again: | 737 | try_offline_again: |
| 707 | /* | 738 | /* |
| 708 | * Force host controller to go off-line, aborting current operations | 739 | * Force host controller to go off-line, aborting current operations |
| @@ -746,6 +777,7 @@ try_offline_again: | |||
| 746 | 777 | ||
| 747 | temp = ioread32(hcr_base + HCONTROL); | 778 | temp = ioread32(hcr_base + HCONTROL); |
| 748 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); | 779 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); |
| 780 | temp |= HCONTROL_PMP_ATTACHED; | ||
| 749 | iowrite32(temp, hcr_base + HCONTROL); | 781 | iowrite32(temp, hcr_base + HCONTROL); |
| 750 | 782 | ||
| 751 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); | 783 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); |
| @@ -771,7 +803,8 @@ try_offline_again: | |||
| 771 | ata_port_printk(ap, KERN_WARNING, | 803 | ata_port_printk(ap, KERN_WARNING, |
| 772 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", | 804 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", |
| 773 | ioread32(hcr_base + HSTATUS)); | 805 | ioread32(hcr_base + HSTATUS)); |
| 774 | goto err; | 806 | *class = ATA_DEV_NONE; |
| 807 | goto out; | ||
| 775 | } | 808 | } |
| 776 | 809 | ||
| 777 | /* | 810 | /* |
| @@ -783,7 +816,8 @@ try_offline_again: | |||
| 783 | 816 | ||
| 784 | if ((temp & 0xFF) != 0x18) { | 817 | if ((temp & 0xFF) != 0x18) { |
| 785 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); | 818 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); |
| 786 | goto err; | 819 | *class = ATA_DEV_NONE; |
| 820 | goto out; | ||
| 787 | } else { | 821 | } else { |
| 788 | ata_port_printk(ap, KERN_INFO, | 822 | ata_port_printk(ap, KERN_INFO, |
| 789 | "Signature Update detected @ %d msecs\n", | 823 | "Signature Update detected @ %d msecs\n", |
| @@ -798,6 +832,7 @@ try_offline_again: | |||
| 798 | * reached here, we can send a command to the target device | 832 | * reached here, we can send a command to the target device |
| 799 | */ | 833 | */ |
| 800 | 834 | ||
| 835 | issue_srst: | ||
| 801 | DPRINTK("Sending SRST/device reset\n"); | 836 | DPRINTK("Sending SRST/device reset\n"); |
| 802 | 837 | ||
| 803 | ata_tf_init(link->device, &tf); | 838 | ata_tf_init(link->device, &tf); |
| @@ -808,7 +843,7 @@ try_offline_again: | |||
| 808 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 843 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 809 | 844 | ||
| 810 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ | 845 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ |
| 811 | ata_tf_to_fis(&tf, 0, 0, cfis); | 846 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 812 | 847 | ||
| 813 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", | 848 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", |
| 814 | cfis[0], cfis[1], cfis[2], cfis[3]); | 849 | cfis[0], cfis[1], cfis[2], cfis[3]); |
| @@ -854,8 +889,10 @@ try_offline_again: | |||
| 854 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 889 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 855 | 890 | ||
| 856 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ | 891 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ |
| 857 | ata_tf_to_fis(&tf, 0, 0, cfis); | 892 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 858 | 893 | ||
| 894 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 895 | iowrite32(pmp, CQPMP + hcr_base); | ||
| 859 | iowrite32(1, CQ + hcr_base); | 896 | iowrite32(1, CQ + hcr_base); |
| 860 | msleep(150); /* ?? */ | 897 | msleep(150); /* ?? */ |
| 861 | 898 | ||
| @@ -886,12 +923,21 @@ try_offline_again: | |||
| 886 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); | 923 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); |
| 887 | } | 924 | } |
| 888 | 925 | ||
| 926 | out: | ||
| 889 | return 0; | 927 | return 0; |
| 890 | 928 | ||
| 891 | err: | 929 | err: |
| 892 | return -EIO; | 930 | return -EIO; |
| 893 | } | 931 | } |
| 894 | 932 | ||
| 933 | static void sata_fsl_error_handler(struct ata_port *ap) | ||
| 934 | { | ||
| 935 | |||
| 936 | DPRINTK("in xx_error_handler\n"); | ||
| 937 | sata_pmp_error_handler(ap); | ||
| 938 | |||
| 939 | } | ||
| 940 | |||
| 895 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | 941 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) |
| 896 | { | 942 | { |
| 897 | if (qc->flags & ATA_QCFLAG_FAILED) | 943 | if (qc->flags & ATA_QCFLAG_FAILED) |
| @@ -905,18 +951,21 @@ static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | |||
| 905 | 951 | ||
| 906 | static void sata_fsl_error_intr(struct ata_port *ap) | 952 | static void sata_fsl_error_intr(struct ata_port *ap) |
| 907 | { | 953 | { |
| 908 | struct ata_link *link = &ap->link; | ||
| 909 | struct ata_eh_info *ehi = &link->eh_info; | ||
| 910 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 954 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 911 | void __iomem *hcr_base = host_priv->hcr_base; | 955 | void __iomem *hcr_base = host_priv->hcr_base; |
| 912 | u32 hstatus, dereg, cereg = 0, SError = 0; | 956 | u32 hstatus, dereg=0, cereg = 0, SError = 0; |
| 913 | unsigned int err_mask = 0, action = 0; | 957 | unsigned int err_mask = 0, action = 0; |
| 914 | struct ata_queued_cmd *qc; | 958 | int freeze = 0, abort=0; |
| 915 | int freeze = 0; | 959 | struct ata_link *link = NULL; |
| 960 | struct ata_queued_cmd *qc = NULL; | ||
| 961 | struct ata_eh_info *ehi; | ||
| 916 | 962 | ||
| 917 | hstatus = ioread32(hcr_base + HSTATUS); | 963 | hstatus = ioread32(hcr_base + HSTATUS); |
| 918 | cereg = ioread32(hcr_base + CE); | 964 | cereg = ioread32(hcr_base + CE); |
| 919 | 965 | ||
| 966 | /* first, analyze and record host port events */ | ||
| 967 | link = &ap->link; | ||
| 968 | ehi = &link->eh_info; | ||
| 920 | ata_ehi_clear_desc(ehi); | 969 | ata_ehi_clear_desc(ehi); |
| 921 | 970 | ||
| 922 | /* | 971 | /* |
| @@ -926,42 +975,28 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 926 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); | 975 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); |
| 927 | if (unlikely(SError & 0xFFFF0000)) { | 976 | if (unlikely(SError & 0xFFFF0000)) { |
| 928 | sata_fsl_scr_write(ap, SCR_ERROR, SError); | 977 | sata_fsl_scr_write(ap, SCR_ERROR, SError); |
| 929 | err_mask |= AC_ERR_ATA_BUS; | ||
| 930 | } | 978 | } |
| 931 | 979 | ||
| 932 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", | 980 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", |
| 933 | hstatus, cereg, ioread32(hcr_base + DE), SError); | 981 | hstatus, cereg, ioread32(hcr_base + DE), SError); |
| 934 | 982 | ||
| 935 | /* handle single device errors */ | 983 | /* handle fatal errors */ |
| 936 | if (cereg) { | 984 | if (hstatus & FATAL_ERROR_DECODE) { |
| 937 | /* | 985 | ehi->err_mask |= AC_ERR_ATA_BUS; |
| 938 | * clear the command error, also clears queue to the device | 986 | ehi->action |= ATA_EH_SOFTRESET; |
| 939 | * in error, and we can (re)issue commands to this device. | ||
| 940 | * When a device is in error all commands queued into the | ||
| 941 | * host controller and at the device are considered aborted | ||
| 942 | * and the queue for that device is stopped. Now, after | ||
| 943 | * clearing the device error, we can issue commands to the | ||
| 944 | * device to interrogate it to find the source of the error. | ||
| 945 | */ | ||
| 946 | dereg = ioread32(hcr_base + DE); | ||
| 947 | iowrite32(dereg, hcr_base + DE); | ||
| 948 | iowrite32(cereg, hcr_base + CE); | ||
| 949 | 987 | ||
| 950 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 951 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 952 | /* | 988 | /* |
| 953 | * We should consider this as non fatal error, and TF must | 989 | * Ignore serror in case of fatal errors as we always want |
| 954 | * be updated as done below. | 990 | * to do a soft-reset of the FSL SATA controller. Analyzing |
| 991 | * serror may cause libata to schedule a hard-reset action, | ||
| 992 | * and hard-reset currently does not do controller | ||
| 993 | * offline/online, causing command timeouts and leads to an | ||
| 994 | * un-recoverable state, hence make libATA ignore | ||
| 995 | * autopsy in case of fatal errors. | ||
| 955 | */ | 996 | */ |
| 956 | 997 | ||
| 957 | err_mask |= AC_ERR_DEV; | 998 | ehi->flags |= ATA_EHI_NO_AUTOPSY; |
| 958 | } | ||
| 959 | 999 | ||
| 960 | /* handle fatal errors */ | ||
| 961 | if (hstatus & FATAL_ERROR_DECODE) { | ||
| 962 | err_mask |= AC_ERR_ATA_BUS; | ||
| 963 | action |= ATA_EH_RESET; | ||
| 964 | /* how will fatal error interrupts be completed ?? */ | ||
| 965 | freeze = 1; | 1000 | freeze = 1; |
| 966 | } | 1001 | } |
| 967 | 1002 | ||
| @@ -971,30 +1006,83 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 971 | 1006 | ||
| 972 | /* Setup a soft-reset EH action */ | 1007 | /* Setup a soft-reset EH action */ |
| 973 | ata_ehi_hotplugged(ehi); | 1008 | ata_ehi_hotplugged(ehi); |
| 1009 | ata_ehi_push_desc(ehi, "%s", "PHY RDY changed"); | ||
| 974 | freeze = 1; | 1010 | freeze = 1; |
| 975 | } | 1011 | } |
| 976 | 1012 | ||
| 977 | /* record error info */ | 1013 | /* handle single device errors */ |
| 978 | qc = ata_qc_from_tag(ap, link->active_tag); | 1014 | if (cereg) { |
| 1015 | /* | ||
| 1016 | * clear the command error, also clears queue to the device | ||
| 1017 | * in error, and we can (re)issue commands to this device. | ||
| 1018 | * When a device is in error all commands queued into the | ||
| 1019 | * host controller and at the device are considered aborted | ||
| 1020 | * and the queue for that device is stopped. Now, after | ||
| 1021 | * clearing the device error, we can issue commands to the | ||
| 1022 | * device to interrogate it to find the source of the error. | ||
| 1023 | */ | ||
| 1024 | abort = 1; | ||
| 1025 | |||
| 1026 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 1027 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 979 | 1028 | ||
| 980 | if (qc) | 1029 | /* find out the offending link and qc */ |
| 1030 | if (ap->nr_pmp_links) { | ||
| 1031 | dereg = ioread32(hcr_base + DE); | ||
| 1032 | iowrite32(dereg, hcr_base + DE); | ||
| 1033 | iowrite32(cereg, hcr_base + CE); | ||
| 1034 | |||
| 1035 | if (dereg < ap->nr_pmp_links) { | ||
| 1036 | link = &ap->pmp_link[dereg]; | ||
| 1037 | ehi = &link->eh_info; | ||
| 1038 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1039 | /* | ||
| 1040 | * We should consider this as non fatal error, | ||
| 1041 | * and TF must be updated as done below. | ||
| 1042 | */ | ||
| 1043 | |||
| 1044 | err_mask |= AC_ERR_DEV; | ||
| 1045 | |||
| 1046 | } else { | ||
| 1047 | err_mask |= AC_ERR_HSM; | ||
| 1048 | action |= ATA_EH_HARDRESET; | ||
| 1049 | freeze = 1; | ||
| 1050 | } | ||
| 1051 | } else { | ||
| 1052 | dereg = ioread32(hcr_base + DE); | ||
| 1053 | iowrite32(dereg, hcr_base + DE); | ||
| 1054 | iowrite32(cereg, hcr_base + CE); | ||
| 1055 | |||
| 1056 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1057 | /* | ||
| 1058 | * We should consider this as non fatal error, | ||
| 1059 | * and TF must be updated as done below. | ||
| 1060 | */ | ||
| 1061 | err_mask |= AC_ERR_DEV; | ||
| 1062 | } | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | /* record error info */ | ||
| 1066 | if (qc) { | ||
| 981 | qc->err_mask |= err_mask; | 1067 | qc->err_mask |= err_mask; |
| 982 | else | 1068 | } else |
| 983 | ehi->err_mask |= err_mask; | 1069 | ehi->err_mask |= err_mask; |
| 984 | 1070 | ||
| 985 | ehi->action |= action; | 1071 | ehi->action |= action; |
| 986 | ehi->serror |= SError; | ||
| 987 | 1072 | ||
| 988 | /* freeze or abort */ | 1073 | /* freeze or abort */ |
| 989 | if (freeze) | 1074 | if (freeze) |
| 990 | ata_port_freeze(ap); | 1075 | ata_port_freeze(ap); |
| 991 | else | 1076 | else if (abort) { |
| 992 | ata_port_abort(ap); | 1077 | if (qc) |
| 1078 | ata_link_abort(qc->dev->link); | ||
| 1079 | else | ||
| 1080 | ata_port_abort(ap); | ||
| 1081 | } | ||
| 993 | } | 1082 | } |
| 994 | 1083 | ||
| 995 | static void sata_fsl_host_intr(struct ata_port *ap) | 1084 | static void sata_fsl_host_intr(struct ata_port *ap) |
| 996 | { | 1085 | { |
| 997 | struct ata_link *link = &ap->link; | ||
| 998 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 1086 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 999 | void __iomem *hcr_base = host_priv->hcr_base; | 1087 | void __iomem *hcr_base = host_priv->hcr_base; |
| 1000 | u32 hstatus, qc_active = 0; | 1088 | u32 hstatus, qc_active = 0; |
| @@ -1017,10 +1105,19 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1017 | return; | 1105 | return; |
| 1018 | } | 1106 | } |
| 1019 | 1107 | ||
| 1020 | if (link->sactive) { /* only true for NCQ commands */ | 1108 | /* Read command completed register */ |
| 1109 | qc_active = ioread32(hcr_base + CC); | ||
| 1110 | |||
| 1111 | VPRINTK("Status of all queues :\n"); | ||
| 1112 | VPRINTK("qc_active/CC = 0x%x, CA = 0x%x, CE=0x%x,CQ=0x%x,apqa=0x%x\n", | ||
| 1113 | qc_active, | ||
| 1114 | ioread32(hcr_base + CA), | ||
| 1115 | ioread32(hcr_base + CE), | ||
| 1116 | ioread32(hcr_base + CQ), | ||
| 1117 | ap->qc_active); | ||
| 1118 | |||
| 1119 | if (qc_active & ap->qc_active) { | ||
| 1021 | int i; | 1120 | int i; |
| 1022 | /* Read command completed register */ | ||
| 1023 | qc_active = ioread32(hcr_base + CC); | ||
| 1024 | /* clear CC bit, this will also complete the interrupt */ | 1121 | /* clear CC bit, this will also complete the interrupt */ |
| 1025 | iowrite32(qc_active, hcr_base + CC); | 1122 | iowrite32(qc_active, hcr_base + CC); |
| 1026 | 1123 | ||
| @@ -1032,8 +1129,9 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1032 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { | 1129 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { |
| 1033 | if (qc_active & (1 << i)) { | 1130 | if (qc_active & (1 << i)) { |
| 1034 | qc = ata_qc_from_tag(ap, i); | 1131 | qc = ata_qc_from_tag(ap, i); |
| 1035 | if (qc) | 1132 | if (qc) { |
| 1036 | ata_qc_complete(qc); | 1133 | ata_qc_complete(qc); |
| 1134 | } | ||
| 1037 | DPRINTK | 1135 | DPRINTK |
| 1038 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", | 1136 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", |
| 1039 | i, ioread32(hcr_base + CC), | 1137 | i, ioread32(hcr_base + CC), |
| @@ -1042,19 +1140,21 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1042 | } | 1140 | } |
| 1043 | return; | 1141 | return; |
| 1044 | 1142 | ||
| 1045 | } else if (ap->qc_active) { | 1143 | } else if ((ap->qc_active & (1 << ATA_TAG_INTERNAL))) { |
| 1046 | iowrite32(1, hcr_base + CC); | 1144 | iowrite32(1, hcr_base + CC); |
| 1047 | qc = ata_qc_from_tag(ap, link->active_tag); | 1145 | qc = ata_qc_from_tag(ap, ATA_TAG_INTERNAL); |
| 1048 | 1146 | ||
| 1049 | DPRINTK("completing non-ncq cmd, tag=%d,CC=0x%x\n", | 1147 | DPRINTK("completing non-ncq cmd, CC=0x%x\n", |
| 1050 | link->active_tag, ioread32(hcr_base + CC)); | 1148 | ioread32(hcr_base + CC)); |
| 1051 | 1149 | ||
| 1052 | if (qc) | 1150 | if (qc) { |
| 1053 | ata_qc_complete(qc); | 1151 | ata_qc_complete(qc); |
| 1152 | } | ||
| 1054 | } else { | 1153 | } else { |
| 1055 | /* Spurious Interrupt!! */ | 1154 | /* Spurious Interrupt!! */ |
| 1056 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", | 1155 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", |
| 1057 | ioread32(hcr_base + CC)); | 1156 | ioread32(hcr_base + CC)); |
| 1157 | iowrite32(qc_active, hcr_base + CC); | ||
| 1058 | return; | 1158 | return; |
| 1059 | } | 1159 | } |
| 1060 | } | 1160 | } |
| @@ -1130,9 +1230,6 @@ static int sata_fsl_init_controller(struct ata_host *host) | |||
| 1130 | iowrite32(0x00000FFFF, hcr_base + CE); | 1230 | iowrite32(0x00000FFFF, hcr_base + CE); |
| 1131 | iowrite32(0x00000FFFF, hcr_base + DE); | 1231 | iowrite32(0x00000FFFF, hcr_base + DE); |
| 1132 | 1232 | ||
| 1133 | /* initially assuming no Port multiplier, set CQPMP to 0 */ | ||
| 1134 | iowrite32(0x0, hcr_base + CQPMP); | ||
| 1135 | |||
| 1136 | /* | 1233 | /* |
| 1137 | * host controller will be brought on-line, during xx_port_start() | 1234 | * host controller will be brought on-line, during xx_port_start() |
| 1138 | * callback, that should also initiate the OOB, COMINIT sequence | 1235 | * callback, that should also initiate the OOB, COMINIT sequence |
| @@ -1154,8 +1251,8 @@ static struct scsi_host_template sata_fsl_sht = { | |||
| 1154 | .dma_boundary = ATA_DMA_BOUNDARY, | 1251 | .dma_boundary = ATA_DMA_BOUNDARY, |
| 1155 | }; | 1252 | }; |
| 1156 | 1253 | ||
| 1157 | static const struct ata_port_operations sata_fsl_ops = { | 1254 | static struct ata_port_operations sata_fsl_ops = { |
| 1158 | .inherits = &sata_port_ops, | 1255 | .inherits = &sata_pmp_port_ops, |
| 1159 | 1256 | ||
| 1160 | .qc_prep = sata_fsl_qc_prep, | 1257 | .qc_prep = sata_fsl_qc_prep, |
| 1161 | .qc_issue = sata_fsl_qc_issue, | 1258 | .qc_issue = sata_fsl_qc_issue, |
| @@ -1168,10 +1265,15 @@ static const struct ata_port_operations sata_fsl_ops = { | |||
| 1168 | .thaw = sata_fsl_thaw, | 1265 | .thaw = sata_fsl_thaw, |
| 1169 | .prereset = sata_fsl_prereset, | 1266 | .prereset = sata_fsl_prereset, |
| 1170 | .softreset = sata_fsl_softreset, | 1267 | .softreset = sata_fsl_softreset, |
| 1268 | .pmp_softreset = sata_fsl_softreset, | ||
| 1269 | .error_handler = sata_fsl_error_handler, | ||
| 1171 | .post_internal_cmd = sata_fsl_post_internal_cmd, | 1270 | .post_internal_cmd = sata_fsl_post_internal_cmd, |
| 1172 | 1271 | ||
| 1173 | .port_start = sata_fsl_port_start, | 1272 | .port_start = sata_fsl_port_start, |
| 1174 | .port_stop = sata_fsl_port_stop, | 1273 | .port_stop = sata_fsl_port_stop, |
| 1274 | |||
| 1275 | .pmp_attach = sata_fsl_pmp_attach, | ||
| 1276 | .pmp_detach = sata_fsl_pmp_detach, | ||
| 1175 | }; | 1277 | }; |
| 1176 | 1278 | ||
| 1177 | static const struct ata_port_info sata_fsl_port_info[] = { | 1279 | static const struct ata_port_info sata_fsl_port_info[] = { |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index fb81f0c7a8c2..acf347f71a2f 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -72,7 +72,7 @@ | |||
| 72 | #include <linux/libata.h> | 72 | #include <linux/libata.h> |
| 73 | 73 | ||
| 74 | #define DRV_NAME "sata_mv" | 74 | #define DRV_NAME "sata_mv" |
| 75 | #define DRV_VERSION "1.21" | 75 | #define DRV_VERSION "1.24" |
| 76 | 76 | ||
| 77 | enum { | 77 | enum { |
| 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ | 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ |
| @@ -122,8 +122,6 @@ enum { | |||
| 122 | /* Host Flags */ | 122 | /* Host Flags */ |
| 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ | 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ |
| 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ | 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ |
| 125 | /* SoC integrated controllers, no PCI interface */ | ||
| 126 | MV_FLAG_SOC = (1 << 28), | ||
| 127 | 125 | ||
| 128 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 126 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 129 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | | 127 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | |
| @@ -356,12 +354,12 @@ enum { | |||
| 356 | MV_HP_ERRATA_50XXB2 = (1 << 2), | 354 | MV_HP_ERRATA_50XXB2 = (1 << 2), |
| 357 | MV_HP_ERRATA_60X1B2 = (1 << 3), | 355 | MV_HP_ERRATA_60X1B2 = (1 << 3), |
| 358 | MV_HP_ERRATA_60X1C0 = (1 << 4), | 356 | MV_HP_ERRATA_60X1C0 = (1 << 4), |
| 359 | MV_HP_ERRATA_XX42A0 = (1 << 5), | ||
| 360 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ | 357 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ |
| 361 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ | 358 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ |
| 362 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ | 359 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ |
| 363 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ | 360 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ |
| 364 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ | 361 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ |
| 362 | MV_HP_FLAG_SOC = (1 << 11), /* SystemOnChip, no PCI */ | ||
| 365 | 363 | ||
| 366 | /* Port private flags (pp_flags) */ | 364 | /* Port private flags (pp_flags) */ |
| 367 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ | 365 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ |
| @@ -374,7 +372,7 @@ enum { | |||
| 374 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) | 372 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) |
| 375 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) | 373 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) |
| 376 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) | 374 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) |
| 377 | #define HAS_PCI(host) (!((host)->ports[0]->flags & MV_FLAG_SOC)) | 375 | #define IS_SOC(hpriv) ((hpriv)->hp_flags & MV_HP_FLAG_SOC) |
| 378 | 376 | ||
| 379 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) | 377 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) |
| 380 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) | 378 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) |
| @@ -652,7 +650,7 @@ static const struct ata_port_info mv_port_info[] = { | |||
| 652 | .port_ops = &mv_iie_ops, | 650 | .port_ops = &mv_iie_ops, |
| 653 | }, | 651 | }, |
| 654 | { /* chip_soc */ | 652 | { /* chip_soc */ |
| 655 | .flags = MV_GENIIE_FLAGS | MV_FLAG_SOC, | 653 | .flags = MV_GENIIE_FLAGS, |
| 656 | .pio_mask = 0x1f, /* pio0-4 */ | 654 | .pio_mask = 0x1f, /* pio0-4 */ |
| 657 | .udma_mask = ATA_UDMA6, | 655 | .udma_mask = ATA_UDMA6, |
| 658 | .port_ops = &mv_iie_ops, | 656 | .port_ops = &mv_iie_ops, |
| @@ -812,12 +810,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 812 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); | 810 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); |
| 813 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, | 811 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, |
| 814 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); | 812 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); |
| 815 | 813 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | |
| 816 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 817 | writelfl((pp->crqb_dma & 0xffffffff) | index, | ||
| 818 | port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 819 | else | ||
| 820 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 821 | 814 | ||
| 822 | /* | 815 | /* |
| 823 | * initialize response queue | 816 | * initialize response queue |
| @@ -827,13 +820,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 827 | 820 | ||
| 828 | WARN_ON(pp->crpb_dma & 0xff); | 821 | WARN_ON(pp->crpb_dma & 0xff); |
| 829 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); | 822 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); |
| 830 | 823 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | |
| 831 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 832 | writelfl((pp->crpb_dma & 0xffffffff) | index, | ||
| 833 | port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 834 | else | ||
| 835 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 836 | |||
| 837 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, | 824 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, |
| 838 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); | 825 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); |
| 839 | } | 826 | } |
| @@ -1254,7 +1241,7 @@ static void mv_edma_cfg(struct ata_port *ap, int want_ncq) | |||
| 1254 | 1241 | ||
| 1255 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ | 1242 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ |
| 1256 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ | 1243 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ |
| 1257 | if (HAS_PCI(ap->host)) | 1244 | if (!IS_SOC(hpriv)) |
| 1258 | cfg |= (1 << 18); /* enab early completion */ | 1245 | cfg |= (1 << 18); /* enab early completion */ |
| 1259 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) | 1246 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) |
| 1260 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ | 1247 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ |
| @@ -2225,7 +2212,7 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance) | |||
| 2225 | * a bogus register value which can indicate HW removal or PCI fault. | 2212 | * a bogus register value which can indicate HW removal or PCI fault. |
| 2226 | */ | 2213 | */ |
| 2227 | if (pending_irqs && main_irq_cause != 0xffffffffU) { | 2214 | if (pending_irqs && main_irq_cause != 0xffffffffU) { |
| 2228 | if (unlikely((pending_irqs & PCI_ERR) && HAS_PCI(host))) | 2215 | if (unlikely((pending_irqs & PCI_ERR) && !IS_SOC(hpriv))) |
| 2229 | handled = mv_pci_error(host, hpriv->base); | 2216 | handled = mv_pci_error(host, hpriv->base); |
| 2230 | else | 2217 | else |
| 2231 | handled = mv_host_intr(host, pending_irqs); | 2218 | handled = mv_host_intr(host, pending_irqs); |
| @@ -2547,7 +2534,7 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2547 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2534 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2548 | int fix_phy_mode4 = | 2535 | int fix_phy_mode4 = |
| 2549 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2536 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2550 | u32 m2, tmp; | 2537 | u32 m2, m3; |
| 2551 | 2538 | ||
| 2552 | if (fix_phy_mode2) { | 2539 | if (fix_phy_mode2) { |
| 2553 | m2 = readl(port_mmio + PHY_MODE2); | 2540 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2564,28 +2551,37 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2564 | udelay(200); | 2551 | udelay(200); |
| 2565 | } | 2552 | } |
| 2566 | 2553 | ||
| 2567 | /* who knows what this magic does */ | 2554 | /* |
| 2568 | tmp = readl(port_mmio + PHY_MODE3); | 2555 | * Gen-II/IIe PHY_MODE3 errata RM#2: |
| 2569 | tmp &= ~0x7F800000; | 2556 | * Achieves better receiver noise performance than the h/w default: |
| 2570 | tmp |= 0x2A800000; | 2557 | */ |
| 2571 | writel(tmp, port_mmio + PHY_MODE3); | 2558 | m3 = readl(port_mmio + PHY_MODE3); |
| 2559 | m3 = (m3 & 0x1f) | (0x5555601 << 5); | ||
| 2560 | |||
| 2561 | /* Guideline 88F5182 (GL# SATA-S11) */ | ||
| 2562 | if (IS_SOC(hpriv)) | ||
| 2563 | m3 &= ~0x1c; | ||
| 2572 | 2564 | ||
| 2573 | if (fix_phy_mode4) { | 2565 | if (fix_phy_mode4) { |
| 2574 | u32 m4; | 2566 | u32 m4; |
| 2575 | 2567 | ||
| 2576 | m4 = readl(port_mmio + PHY_MODE4); | 2568 | m4 = readl(port_mmio + PHY_MODE4); |
| 2577 | 2569 | ||
| 2578 | if (hp_flags & MV_HP_ERRATA_60X1B2) | ||
| 2579 | tmp = readl(port_mmio + PHY_MODE3); | ||
| 2580 | |||
| 2581 | /* workaround for errata FEr SATA#10 (part 1) */ | 2570 | /* workaround for errata FEr SATA#10 (part 1) */ |
| 2582 | m4 = (m4 & ~(1 << 1)) | (1 << 0); | 2571 | m4 = (m4 & ~(1 << 1)) | (1 << 0); |
| 2583 | 2572 | ||
| 2584 | writel(m4, port_mmio + PHY_MODE4); | 2573 | /* enforce bit restrictions on GenIIe devices */ |
| 2574 | if (IS_GEN_IIE(hpriv)) | ||
| 2575 | m4 = (m4 & ~0x5DE3FFFC) | (1 << 2); | ||
| 2585 | 2576 | ||
| 2586 | if (hp_flags & MV_HP_ERRATA_60X1B2) | 2577 | writel(m4, port_mmio + PHY_MODE4); |
| 2587 | writel(tmp, port_mmio + PHY_MODE3); | ||
| 2588 | } | 2578 | } |
| 2579 | /* | ||
| 2580 | * Workaround for 60x1-B2 errata SATA#13: | ||
| 2581 | * Any write to PHY_MODE4 (above) may corrupt PHY_MODE3, | ||
| 2582 | * so we must always rewrite PHY_MODE3 after PHY_MODE4. | ||
| 2583 | */ | ||
| 2584 | writel(m3, port_mmio + PHY_MODE3); | ||
| 2589 | 2585 | ||
| 2590 | /* Revert values of pre-emphasis and signal amps to the saved ones */ | 2586 | /* Revert values of pre-emphasis and signal amps to the saved ones */ |
| 2591 | m2 = readl(port_mmio + PHY_MODE2); | 2587 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2876,7 +2872,7 @@ static unsigned int mv_in_pcix_mode(struct ata_host *host) | |||
| 2876 | void __iomem *mmio = hpriv->base; | 2872 | void __iomem *mmio = hpriv->base; |
| 2877 | u32 reg; | 2873 | u32 reg; |
| 2878 | 2874 | ||
| 2879 | if (!HAS_PCI(host) || !IS_PCIE(hpriv)) | 2875 | if (IS_SOC(hpriv) || !IS_PCIE(hpriv)) |
| 2880 | return 0; /* not PCI-X capable */ | 2876 | return 0; /* not PCI-X capable */ |
| 2881 | reg = readl(mmio + MV_PCI_MODE_OFS); | 2877 | reg = readl(mmio + MV_PCI_MODE_OFS); |
| 2882 | if ((reg & MV_PCI_MODE_MASK) == 0) | 2878 | if ((reg & MV_PCI_MODE_MASK) == 0) |
| @@ -3003,10 +2999,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3003 | hp_flags |= MV_HP_CUT_THROUGH; | 2999 | hp_flags |= MV_HP_CUT_THROUGH; |
| 3004 | 3000 | ||
| 3005 | switch (pdev->revision) { | 3001 | switch (pdev->revision) { |
| 3006 | case 0x0: | 3002 | case 0x2: /* Rev.B0: the first/only public release */ |
| 3007 | hp_flags |= MV_HP_ERRATA_XX42A0; | ||
| 3008 | break; | ||
| 3009 | case 0x1: | ||
| 3010 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3003 | hp_flags |= MV_HP_ERRATA_60X1C0; |
| 3011 | break; | 3004 | break; |
| 3012 | default: | 3005 | default: |
| @@ -3018,7 +3011,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3018 | break; | 3011 | break; |
| 3019 | case chip_soc: | 3012 | case chip_soc: |
| 3020 | hpriv->ops = &mv_soc_ops; | 3013 | hpriv->ops = &mv_soc_ops; |
| 3021 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3014 | hp_flags |= MV_HP_FLAG_SOC | MV_HP_ERRATA_60X1C0; |
| 3022 | break; | 3015 | break; |
| 3023 | 3016 | ||
| 3024 | default: | 3017 | default: |
| @@ -3062,12 +3055,12 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3062 | if (rc) | 3055 | if (rc) |
| 3063 | goto done; | 3056 | goto done; |
| 3064 | 3057 | ||
| 3065 | if (HAS_PCI(host)) { | 3058 | if (IS_SOC(hpriv)) { |
| 3066 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3067 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3068 | } else { | ||
| 3069 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; | 3059 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; |
| 3070 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; | 3060 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; |
| 3061 | } else { | ||
| 3062 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3063 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3071 | } | 3064 | } |
| 3072 | 3065 | ||
| 3073 | /* global interrupt mask: 0 == mask everything */ | 3066 | /* global interrupt mask: 0 == mask everything */ |
| @@ -3093,7 +3086,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3093 | mv_port_init(&ap->ioaddr, port_mmio); | 3086 | mv_port_init(&ap->ioaddr, port_mmio); |
| 3094 | 3087 | ||
| 3095 | #ifdef CONFIG_PCI | 3088 | #ifdef CONFIG_PCI |
| 3096 | if (HAS_PCI(host)) { | 3089 | if (!IS_SOC(hpriv)) { |
| 3097 | unsigned int offset = port_mmio - mmio; | 3090 | unsigned int offset = port_mmio - mmio; |
| 3098 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); | 3091 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); |
| 3099 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); | 3092 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); |
| @@ -3113,7 +3106,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3113 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); | 3106 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); |
| 3114 | } | 3107 | } |
| 3115 | 3108 | ||
| 3116 | if (HAS_PCI(host)) { | 3109 | if (!IS_SOC(hpriv)) { |
| 3117 | /* Clear any currently outstanding host interrupt conditions */ | 3110 | /* Clear any currently outstanding host interrupt conditions */ |
| 3118 | writelfl(0, mmio + hpriv->irq_cause_ofs); | 3111 | writelfl(0, mmio + hpriv->irq_cause_ofs); |
| 3119 | 3112 | ||
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 84e064ffee52..dd7ea203f940 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -260,6 +260,10 @@ static int virtblk_probe(struct virtio_device *vdev) | |||
| 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) | 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) |
| 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); | 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); |
| 262 | 262 | ||
| 263 | /* If disk is read-only in the host, the guest should obey */ | ||
| 264 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO)) | ||
| 265 | set_disk_ro(vblk->disk, 1); | ||
| 266 | |||
| 263 | /* Host must always specify the capacity. */ | 267 | /* Host must always specify the capacity. */ |
| 264 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), | 268 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), |
| 265 | &cap, sizeof(cap)); | 269 | &cap, sizeof(cap)); |
| @@ -311,6 +315,7 @@ static void virtblk_remove(struct virtio_device *vdev) | |||
| 311 | /* Stop all the virtqueues. */ | 315 | /* Stop all the virtqueues. */ |
| 312 | vdev->config->reset(vdev); | 316 | vdev->config->reset(vdev); |
| 313 | 317 | ||
| 318 | del_gendisk(vblk->disk); | ||
| 314 | blk_cleanup_queue(vblk->disk->queue); | 319 | blk_cleanup_queue(vblk->disk->queue); |
| 315 | put_disk(vblk->disk); | 320 | put_disk(vblk->disk); |
| 316 | mempool_destroy(vblk->pool); | 321 | mempool_destroy(vblk->pool); |
| @@ -325,7 +330,7 @@ static struct virtio_device_id id_table[] = { | |||
| 325 | 330 | ||
| 326 | static unsigned int features[] = { | 331 | static unsigned int features[] = { |
| 327 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, | 332 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, |
| 328 | VIRTIO_BLK_F_GEOMETRY, | 333 | VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, |
| 329 | }; | 334 | }; |
| 330 | 335 | ||
| 331 | static struct virtio_driver virtio_blk = { | 336 | static struct virtio_driver virtio_blk = { |
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 8d6c2089d2a8..efd0b4db7c8e 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig | |||
| @@ -112,3 +112,12 @@ config HW_RANDOM_PASEMI | |||
| 112 | 112 | ||
| 113 | If unsure, say Y. | 113 | If unsure, say Y. |
| 114 | 114 | ||
| 115 | config HW_RANDOM_VIRTIO | ||
| 116 | tristate "VirtIO Random Number Generator support" | ||
| 117 | depends on HW_RANDOM && VIRTIO | ||
| 118 | ---help--- | ||
| 119 | This driver provides kernel-side support for the virtual Random Number | ||
| 120 | Generator hardware. | ||
| 121 | |||
| 122 | To compile this driver as a module, choose M here: the | ||
| 123 | module will be called virtio-rng. If unsure, say N. | ||
diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index c8b7300e2fb1..b4940ddbb35f 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile | |||
| @@ -11,3 +11,4 @@ obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o | |||
| 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o | 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o |
| 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o | 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o |
| 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o | 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o |
| 14 | obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o | ||
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c new file mode 100644 index 000000000000..d0e563e4fc39 --- /dev/null +++ b/drivers/char/hw_random/virtio-rng.c | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | /* | ||
| 2 | * Randomness driver for virtio | ||
| 3 | * Copyright (C) 2007, 2008 Rusty Russell IBM Corporation | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 18 | */ | ||
| 19 | #include <linux/err.h> | ||
| 20 | #include <linux/hw_random.h> | ||
| 21 | #include <linux/scatterlist.h> | ||
| 22 | #include <linux/spinlock.h> | ||
| 23 | #include <linux/virtio.h> | ||
| 24 | #include <linux/virtio_rng.h> | ||
| 25 | |||
| 26 | /* The host will fill any buffer we give it with sweet, sweet randomness. We | ||
| 27 | * give it 64 bytes at a time, and the hwrng framework takes it 4 bytes at a | ||
| 28 | * time. */ | ||
| 29 | #define RANDOM_DATA_SIZE 64 | ||
| 30 | |||
| 31 | static struct virtqueue *vq; | ||
| 32 | static u32 *random_data; | ||
| 33 | static unsigned int data_left; | ||
| 34 | static DECLARE_COMPLETION(have_data); | ||
| 35 | |||
| 36 | static void random_recv_done(struct virtqueue *vq) | ||
| 37 | { | ||
| 38 | int len; | ||
| 39 | |||
| 40 | /* We never get spurious callbacks. */ | ||
| 41 | if (!vq->vq_ops->get_buf(vq, &len)) | ||
| 42 | BUG(); | ||
| 43 | |||
| 44 | data_left = len / sizeof(random_data[0]); | ||
| 45 | complete(&have_data); | ||
| 46 | } | ||
| 47 | |||
| 48 | static void register_buffer(void) | ||
| 49 | { | ||
| 50 | struct scatterlist sg; | ||
| 51 | |||
| 52 | sg_init_one(&sg, random_data, RANDOM_DATA_SIZE); | ||
| 53 | /* There should always be room for one buffer. */ | ||
| 54 | if (vq->vq_ops->add_buf(vq, &sg, 0, 1, random_data) != 0) | ||
| 55 | BUG(); | ||
| 56 | vq->vq_ops->kick(vq); | ||
| 57 | } | ||
| 58 | |||
| 59 | /* At least we don't udelay() in a loop like some other drivers. */ | ||
| 60 | static int virtio_data_present(struct hwrng *rng, int wait) | ||
| 61 | { | ||
| 62 | if (data_left) | ||
| 63 | return 1; | ||
| 64 | |||
| 65 | if (!wait) | ||
| 66 | return 0; | ||
| 67 | |||
| 68 | wait_for_completion(&have_data); | ||
| 69 | return 1; | ||
| 70 | } | ||
| 71 | |||
| 72 | /* virtio_data_present() must have succeeded before this is called. */ | ||
| 73 | static int virtio_data_read(struct hwrng *rng, u32 *data) | ||
| 74 | { | ||
| 75 | BUG_ON(!data_left); | ||
| 76 | |||
| 77 | *data = random_data[--data_left]; | ||
| 78 | |||
| 79 | if (!data_left) { | ||
| 80 | init_completion(&have_data); | ||
| 81 | register_buffer(); | ||
| 82 | } | ||
| 83 | return sizeof(*data); | ||
| 84 | } | ||
| 85 | |||
| 86 | static struct hwrng virtio_hwrng = { | ||
| 87 | .name = "virtio", | ||
| 88 | .data_present = virtio_data_present, | ||
| 89 | .data_read = virtio_data_read, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static int virtrng_probe(struct virtio_device *vdev) | ||
| 93 | { | ||
| 94 | int err; | ||
| 95 | |||
| 96 | /* We expect a single virtqueue. */ | ||
| 97 | vq = vdev->config->find_vq(vdev, 0, random_recv_done); | ||
| 98 | if (IS_ERR(vq)) | ||
| 99 | return PTR_ERR(vq); | ||
| 100 | |||
| 101 | err = hwrng_register(&virtio_hwrng); | ||
| 102 | if (err) { | ||
| 103 | vdev->config->del_vq(vq); | ||
| 104 | return err; | ||
| 105 | } | ||
| 106 | |||
| 107 | register_buffer(); | ||
| 108 | return 0; | ||
| 109 | } | ||
| 110 | |||
| 111 | static void virtrng_remove(struct virtio_device *vdev) | ||
| 112 | { | ||
| 113 | vdev->config->reset(vdev); | ||
| 114 | hwrng_unregister(&virtio_hwrng); | ||
| 115 | vdev->config->del_vq(vq); | ||
| 116 | } | ||
| 117 | |||
| 118 | static struct virtio_device_id id_table[] = { | ||
| 119 | { VIRTIO_ID_RNG, VIRTIO_DEV_ANY_ID }, | ||
| 120 | { 0 }, | ||
| 121 | }; | ||
| 122 | |||
| 123 | static struct virtio_driver virtio_rng = { | ||
| 124 | .driver.name = KBUILD_MODNAME, | ||
| 125 | .driver.owner = THIS_MODULE, | ||
| 126 | .id_table = id_table, | ||
| 127 | .probe = virtrng_probe, | ||
| 128 | .remove = __devexit_p(virtrng_remove), | ||
| 129 | }; | ||
| 130 | |||
| 131 | static int __init init(void) | ||
| 132 | { | ||
| 133 | int err; | ||
| 134 | |||
| 135 | random_data = kmalloc(RANDOM_DATA_SIZE, GFP_KERNEL); | ||
| 136 | if (!random_data) | ||
| 137 | return -ENOMEM; | ||
| 138 | |||
| 139 | err = register_virtio_driver(&virtio_rng); | ||
| 140 | if (err) | ||
| 141 | kfree(random_data); | ||
| 142 | return err; | ||
| 143 | } | ||
| 144 | |||
| 145 | static void __exit fini(void) | ||
| 146 | { | ||
| 147 | kfree(random_data); | ||
| 148 | unregister_virtio_driver(&virtio_rng); | ||
| 149 | } | ||
| 150 | module_init(init); | ||
| 151 | module_exit(fini); | ||
| 152 | |||
| 153 | MODULE_DEVICE_TABLE(virtio, id_table); | ||
| 154 | MODULE_DESCRIPTION("Virtio random number driver"); | ||
| 155 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 4a95adc4cc78..af58a6f1e898 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -807,6 +807,8 @@ static int atkbd_activate(struct atkbd *atkbd) | |||
| 807 | static void atkbd_cleanup(struct serio *serio) | 807 | static void atkbd_cleanup(struct serio *serio) |
| 808 | { | 808 | { |
| 809 | struct atkbd *atkbd = serio_get_drvdata(serio); | 809 | struct atkbd *atkbd = serio_get_drvdata(serio); |
| 810 | |||
| 811 | atkbd_disable(atkbd); | ||
| 810 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); | 812 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); |
| 811 | } | 813 | } |
| 812 | 814 | ||
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 3dea0c5077a9..45767e73f071 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c | |||
| @@ -136,6 +136,9 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 136 | set_bit(code, input_dev->keybit); | 136 | set_bit(code, input_dev->keybit); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | for (i = 0; i < pdata->direct_key_num; i++) | ||
| 140 | set_bit(pdata->direct_key_map[i], input_dev->keybit); | ||
| 141 | |||
| 139 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; | 142 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; |
| 140 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; | 143 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; |
| 141 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; | 144 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; |
| @@ -143,17 +146,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 143 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; | 146 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; |
| 144 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; | 147 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; |
| 145 | 148 | ||
| 146 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { | 149 | if (pdata->enable_rotary0) { |
| 147 | set_bit(pdata->rotary0_up_key, input_dev->keybit); | 150 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { |
| 148 | set_bit(pdata->rotary0_down_key, input_dev->keybit); | 151 | set_bit(pdata->rotary0_up_key, input_dev->keybit); |
| 149 | } else | 152 | set_bit(pdata->rotary0_down_key, input_dev->keybit); |
| 150 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | 153 | } else |
| 151 | 154 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | |
| 152 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { | 155 | } |
| 153 | set_bit(pdata->rotary1_up_key, input_dev->keybit); | 156 | |
| 154 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | 157 | if (pdata->enable_rotary1) { |
| 155 | } else | 158 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { |
| 156 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | 159 | set_bit(pdata->rotary1_up_key, input_dev->keybit); |
| 160 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | ||
| 161 | } else | ||
| 162 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | ||
| 163 | } | ||
| 157 | } | 164 | } |
| 158 | 165 | ||
| 159 | static inline unsigned int lookup_matrix_keycode( | 166 | static inline unsigned int lookup_matrix_keycode( |
| @@ -484,8 +491,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) | |||
| 484 | keypad->input_dev = input_dev; | 491 | keypad->input_dev = input_dev; |
| 485 | input_set_drvdata(input_dev, keypad); | 492 | input_set_drvdata(input_dev, keypad); |
| 486 | 493 | ||
| 487 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | | 494 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
| 488 | BIT_MASK(EV_REL); | 495 | if ((keypad->pdata->enable_rotary0 && |
| 496 | keypad->pdata->rotary0_rel_code) || | ||
| 497 | (keypad->pdata->enable_rotary1 && | ||
| 498 | keypad->pdata->rotary1_rel_code)) { | ||
| 499 | input_dev->evbit[0] |= BIT_MASK(EV_REL); | ||
| 500 | } | ||
| 489 | 501 | ||
| 490 | pxa27x_keypad_build_keycode(keypad); | 502 | pxa27x_keypad_build_keycode(keypad); |
| 491 | platform_set_drvdata(pdev, keypad); | 503 | platform_set_drvdata(pdev, keypad); |
diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c index 9531d8c7444f..d82f7f727f7a 100644 --- a/drivers/input/misc/apanel.c +++ b/drivers/input/misc/apanel.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
| 21 | #include <linux/ioport.h> | 21 | #include <linux/ioport.h> |
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/module.h> | ||
| 24 | #include <linux/input-polldev.h> | 23 | #include <linux/input-polldev.h> |
| 25 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
| 26 | #include <linux/workqueue.h> | 25 | #include <linux/workqueue.h> |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 5ece9f56babc..9aafa96cb746 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
| @@ -331,6 +331,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { | |||
| 331 | }, | 331 | }, |
| 332 | }, | 332 | }, |
| 333 | { | 333 | { |
| 334 | .ident = "Acer TravelMate 660", | ||
| 335 | .matches = { | ||
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
| 337 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), | ||
| 338 | }, | ||
| 339 | }, | ||
| 340 | { | ||
| 334 | .ident = "Acer TravelMate 2490", | 341 | .ident = "Acer TravelMate 2490", |
| 335 | .matches = { | 342 | .matches = { |
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | 343 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 65a74cfc187b..592ff55b62d0 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
| @@ -885,6 +885,20 @@ static long i8042_panic_blink(long count) | |||
| 885 | 885 | ||
| 886 | #undef DELAY | 886 | #undef DELAY |
| 887 | 887 | ||
| 888 | #ifdef CONFIG_X86 | ||
| 889 | static void i8042_dritek_enable(void) | ||
| 890 | { | ||
| 891 | char param = 0x90; | ||
| 892 | int error; | ||
| 893 | |||
| 894 | error = i8042_command(¶m, 0x1059); | ||
| 895 | if (error) | ||
| 896 | printk(KERN_WARNING | ||
| 897 | "Failed to enable DRITEK extension: %d\n", | ||
| 898 | error); | ||
| 899 | } | ||
| 900 | #endif | ||
| 901 | |||
| 888 | #ifdef CONFIG_PM | 902 | #ifdef CONFIG_PM |
| 889 | /* | 903 | /* |
| 890 | * Here we try to restore the original BIOS settings. We only want to | 904 | * Here we try to restore the original BIOS settings. We only want to |
| @@ -942,6 +956,12 @@ static int i8042_resume(struct platform_device *dev) | |||
| 942 | return -EIO; | 956 | return -EIO; |
| 943 | } | 957 | } |
| 944 | 958 | ||
| 959 | |||
| 960 | #ifdef CONFIG_X86 | ||
| 961 | if (i8042_dritek) | ||
| 962 | i8042_dritek_enable(); | ||
| 963 | #endif | ||
| 964 | |||
| 945 | if (i8042_mux_present) { | 965 | if (i8042_mux_present) { |
| 946 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) | 966 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) |
| 947 | printk(KERN_WARNING | 967 | printk(KERN_WARNING |
| @@ -1160,6 +1180,11 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1160 | if (error) | 1180 | if (error) |
| 1161 | return error; | 1181 | return error; |
| 1162 | 1182 | ||
| 1183 | #ifdef CONFIG_X86 | ||
| 1184 | if (i8042_dritek) | ||
| 1185 | i8042_dritek_enable(); | ||
| 1186 | #endif | ||
| 1187 | |||
| 1163 | if (!i8042_noaux) { | 1188 | if (!i8042_noaux) { |
| 1164 | error = i8042_setup_aux(); | 1189 | error = i8042_setup_aux(); |
| 1165 | if (error && error != -ENODEV && error != -EBUSY) | 1190 | if (error && error != -ENODEV && error != -EBUSY) |
| @@ -1171,14 +1196,6 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1171 | if (error) | 1196 | if (error) |
| 1172 | goto out_fail; | 1197 | goto out_fail; |
| 1173 | } | 1198 | } |
| 1174 | #ifdef CONFIG_X86 | ||
| 1175 | if (i8042_dritek) { | ||
| 1176 | char param = 0x90; | ||
| 1177 | error = i8042_command(¶m, 0x1059); | ||
| 1178 | if (error) | ||
| 1179 | goto out_fail; | ||
| 1180 | } | ||
| 1181 | #endif | ||
| 1182 | /* | 1199 | /* |
| 1183 | * Ok, everything is ready, let's register all serio ports | 1200 | * Ok, everything is ready, let's register all serio ports |
| 1184 | */ | 1201 | */ |
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index c5a8661a1baa..1e748e46d12e 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c | |||
| @@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 830 | struct gtco *gtco; | 830 | struct gtco *gtco; |
| 831 | struct input_dev *input_dev; | 831 | struct input_dev *input_dev; |
| 832 | struct hid_descriptor *hid_desc; | 832 | struct hid_descriptor *hid_desc; |
| 833 | char *report = NULL; | 833 | char *report; |
| 834 | int result = 0, retry; | 834 | int result = 0, retry; |
| 835 | int error; | 835 | int error; |
| 836 | struct usb_endpoint_descriptor *endpoint; | 836 | struct usb_endpoint_descriptor *endpoint; |
| @@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 916 | le16_to_cpu(hid_desc->wDescriptorLength), | 916 | le16_to_cpu(hid_desc->wDescriptorLength), |
| 917 | 5000); /* 5 secs */ | 917 | 5000); /* 5 secs */ |
| 918 | 918 | ||
| 919 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) | 919 | dbg("usb_control_msg result: %d", result); |
| 920 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) { | ||
| 921 | parse_hid_report_descriptor(gtco, report, result); | ||
| 920 | break; | 922 | break; |
| 923 | } | ||
| 921 | } | 924 | } |
| 922 | 925 | ||
| 926 | kfree(report); | ||
| 927 | |||
| 923 | /* If we didn't get the report, fail */ | 928 | /* If we didn't get the report, fail */ |
| 924 | dbg("usb_control_msg result: :%d", result); | ||
| 925 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { | 929 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { |
| 926 | err("Failed to get HID Report Descriptor of size: %d", | 930 | err("Failed to get HID Report Descriptor of size: %d", |
| 927 | hid_desc->wDescriptorLength); | 931 | hid_desc->wDescriptorLength); |
| @@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 929 | goto err_free_urb; | 933 | goto err_free_urb; |
| 930 | } | 934 | } |
| 931 | 935 | ||
| 932 | /* Now we parse the report */ | ||
| 933 | parse_hid_report_descriptor(gtco, report, result); | ||
| 934 | |||
| 935 | /* Now we delete it */ | ||
| 936 | kfree(report); | ||
| 937 | |||
| 938 | /* Create a device file node */ | 936 | /* Create a device file node */ |
| 939 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); | 937 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); |
| 940 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); | 938 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); |
| @@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 988 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, | 986 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, |
| 989 | gtco->buffer, gtco->buf_dma); | 987 | gtco->buffer, gtco->buf_dma); |
| 990 | err_free_devs: | 988 | err_free_devs: |
| 991 | kfree(report); | ||
| 992 | input_free_device(input_dev); | 989 | input_free_device(input_dev); |
| 993 | kfree(gtco); | 990 | kfree(gtco); |
| 994 | return error; | 991 | return error; |
diff --git a/drivers/input/touchscreen/wm9713.c b/drivers/input/touchscreen/wm9713.c index 01278bd7e65c..838458792ea0 100644 --- a/drivers/input/touchscreen/wm9713.c +++ b/drivers/input/touchscreen/wm9713.c | |||
| @@ -85,6 +85,15 @@ module_param(delay, int, 0); | |||
| 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); | 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); |
| 86 | 86 | ||
| 87 | /* | 87 | /* |
| 88 | * Set five_wire = 1 to use a 5 wire touchscreen. | ||
| 89 | * | ||
| 90 | * NOTE: Five wire mode does not allow for readback of pressure. | ||
| 91 | */ | ||
| 92 | static int five_wire; | ||
| 93 | module_param(five_wire, int, 0); | ||
| 94 | MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen."); | ||
| 95 | |||
| 96 | /* | ||
| 88 | * Set adc mask function. | 97 | * Set adc mask function. |
| 89 | * | 98 | * |
| 90 | * Sources of glitch noise, such as signals driving an LCD display, may feed | 99 | * Sources of glitch noise, such as signals driving an LCD display, may feed |
| @@ -162,6 +171,19 @@ static void wm9713_phy_init(struct wm97xx *wm) | |||
| 162 | 64000 / rpu); | 171 | 64000 / rpu); |
| 163 | } | 172 | } |
| 164 | 173 | ||
| 174 | /* Five wire panel? */ | ||
| 175 | if (five_wire) { | ||
| 176 | dig3 |= WM9713_45W; | ||
| 177 | dev_info(wm->dev, "setting 5-wire touchscreen mode."); | ||
| 178 | |||
| 179 | if (pil) { | ||
| 180 | dev_warn(wm->dev, | ||
| 181 | "Pressure measurement not supported in 5 " | ||
| 182 | "wire mode, disabling\n"); | ||
| 183 | pil = 0; | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 165 | /* touchpanel pressure */ | 187 | /* touchpanel pressure */ |
| 166 | if (pil == 2) { | 188 | if (pil == 2) { |
| 167 | dig3 |= WM9712_PIL; | 189 | dig3 |= WM9712_PIL; |
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c index e9c7ea46b6e3..cdc24ad314e0 100644 --- a/drivers/input/touchscreen/wm97xx-core.c +++ b/drivers/input/touchscreen/wm97xx-core.c | |||
| @@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev) | |||
| 608 | goto alloc_err; | 608 | goto alloc_err; |
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | /* set up physical characteristics */ | ||
| 612 | wm->codec->phy_init(wm); | ||
| 613 | |||
| 614 | /* load gpio cache */ | ||
| 615 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 616 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 617 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 618 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 619 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 620 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 621 | |||
| 611 | wm->input_dev = input_allocate_device(); | 622 | wm->input_dev = input_allocate_device(); |
| 612 | if (wm->input_dev == NULL) { | 623 | if (wm->input_dev == NULL) { |
| 613 | ret = -ENOMEM; | 624 | ret = -ENOMEM; |
| @@ -616,6 +627,7 @@ static int wm97xx_probe(struct device *dev) | |||
| 616 | 627 | ||
| 617 | /* set up touch configuration */ | 628 | /* set up touch configuration */ |
| 618 | wm->input_dev->name = "wm97xx touchscreen"; | 629 | wm->input_dev->name = "wm97xx touchscreen"; |
| 630 | wm->input_dev->phys = "wm97xx"; | ||
| 619 | wm->input_dev->open = wm97xx_ts_input_open; | 631 | wm->input_dev->open = wm97xx_ts_input_open; |
| 620 | wm->input_dev->close = wm97xx_ts_input_close; | 632 | wm->input_dev->close = wm97xx_ts_input_close; |
| 621 | set_bit(EV_ABS, wm->input_dev->evbit); | 633 | set_bit(EV_ABS, wm->input_dev->evbit); |
| @@ -634,17 +646,6 @@ static int wm97xx_probe(struct device *dev) | |||
| 634 | if (ret < 0) | 646 | if (ret < 0) |
| 635 | goto dev_alloc_err; | 647 | goto dev_alloc_err; |
| 636 | 648 | ||
| 637 | /* set up physical characteristics */ | ||
| 638 | wm->codec->phy_init(wm); | ||
| 639 | |||
| 640 | /* load gpio cache */ | ||
| 641 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 642 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 643 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 644 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 645 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 646 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 647 | |||
| 648 | /* register our battery device */ | 649 | /* register our battery device */ |
| 649 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); | 650 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); |
| 650 | if (!wm->battery_dev) { | 651 | if (!wm->battery_dev) { |
| @@ -801,7 +802,7 @@ void wm97xx_unregister_mach_ops(struct wm97xx *wm) | |||
| 801 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); | 802 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); |
| 802 | 803 | ||
| 803 | static struct device_driver wm97xx_driver = { | 804 | static struct device_driver wm97xx_driver = { |
| 804 | .name = "ac97", | 805 | .name = "wm97xx-ts", |
| 805 | .bus = &ac97_bus_type, | 806 | .bus = &ac97_bus_type, |
| 806 | .owner = THIS_MODULE, | 807 | .owner = THIS_MODULE, |
| 807 | .probe = wm97xx_probe, | 808 | .probe = wm97xx_probe, |
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index 8080249957af..1a8de57289eb 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c | |||
| @@ -20,14 +20,11 @@ | |||
| 20 | /* The pointer to our (page) of device descriptions. */ | 20 | /* The pointer to our (page) of device descriptions. */ |
| 21 | static void *lguest_devices; | 21 | static void *lguest_devices; |
| 22 | 22 | ||
| 23 | /* Unique numbering for lguest devices. */ | ||
| 24 | static unsigned int dev_index; | ||
| 25 | |||
| 26 | /* For Guests, device memory can be used as normal memory, so we cast away the | 23 | /* For Guests, device memory can be used as normal memory, so we cast away the |
| 27 | * __iomem to quieten sparse. */ | 24 | * __iomem to quieten sparse. */ |
| 28 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) | 25 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) |
| 29 | { | 26 | { |
| 30 | return (__force void *)ioremap(phys_addr, PAGE_SIZE*pages); | 27 | return (__force void *)ioremap_cache(phys_addr, PAGE_SIZE*pages); |
| 31 | } | 28 | } |
| 32 | 29 | ||
| 33 | static inline void lguest_unmap(void *addr) | 30 | static inline void lguest_unmap(void *addr) |
| @@ -325,8 +322,10 @@ static struct device lguest_root = { | |||
| 325 | * As Andrew Tridgell says, "Untested code is buggy code". | 322 | * As Andrew Tridgell says, "Untested code is buggy code". |
| 326 | * | 323 | * |
| 327 | * It's worth reading this carefully: we start with a pointer to the new device | 324 | * It's worth reading this carefully: we start with a pointer to the new device |
| 328 | * descriptor in the "lguest_devices" page. */ | 325 | * descriptor in the "lguest_devices" page, and the offset into the device |
| 329 | static void add_lguest_device(struct lguest_device_desc *d) | 326 | * descriptor page so we can uniquely identify it if things go badly wrong. */ |
| 327 | static void add_lguest_device(struct lguest_device_desc *d, | ||
| 328 | unsigned int offset) | ||
| 330 | { | 329 | { |
| 331 | struct lguest_device *ldev; | 330 | struct lguest_device *ldev; |
| 332 | 331 | ||
| @@ -334,18 +333,14 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 334 | * it. */ | 333 | * it. */ |
| 335 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); | 334 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); |
| 336 | if (!ldev) { | 335 | if (!ldev) { |
| 337 | printk(KERN_EMERG "Cannot allocate lguest dev %u\n", | 336 | printk(KERN_EMERG "Cannot allocate lguest dev %u type %u\n", |
| 338 | dev_index++); | 337 | offset, d->type); |
| 339 | return; | 338 | return; |
| 340 | } | 339 | } |
| 341 | 340 | ||
| 342 | /* This devices' parent is the lguest/ dir. */ | 341 | /* This devices' parent is the lguest/ dir. */ |
| 343 | ldev->vdev.dev.parent = &lguest_root; | 342 | ldev->vdev.dev.parent = &lguest_root; |
| 344 | /* We have a unique device index thanks to the dev_index counter. */ | 343 | /* We have a unique device index thanks to the dev_index counter. */ |
| 345 | ldev->vdev.index = dev_index++; | ||
| 346 | /* The device type comes straight from the descriptor. There's also a | ||
| 347 | * device vendor field in the virtio_device struct, which we leave as | ||
| 348 | * 0. */ | ||
| 349 | ldev->vdev.id.device = d->type; | 344 | ldev->vdev.id.device = d->type; |
| 350 | /* We have a simple set of routines for querying the device's | 345 | /* We have a simple set of routines for querying the device's |
| 351 | * configuration information and setting its status. */ | 346 | * configuration information and setting its status. */ |
| @@ -357,8 +352,8 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 357 | * virtio_device and calls device_register(). This makes the bus | 352 | * virtio_device and calls device_register(). This makes the bus |
| 358 | * infrastructure look for a matching driver. */ | 353 | * infrastructure look for a matching driver. */ |
| 359 | if (register_virtio_device(&ldev->vdev) != 0) { | 354 | if (register_virtio_device(&ldev->vdev) != 0) { |
| 360 | printk(KERN_ERR "Failed to register lguest device %u\n", | 355 | printk(KERN_ERR "Failed to register lguest dev %u type %u\n", |
| 361 | ldev->vdev.index); | 356 | offset, d->type); |
| 362 | kfree(ldev); | 357 | kfree(ldev); |
| 363 | } | 358 | } |
| 364 | } | 359 | } |
| @@ -379,7 +374,7 @@ static void scan_devices(void) | |||
| 379 | break; | 374 | break; |
| 380 | 375 | ||
| 381 | printk("Device at %i has size %u\n", i, desc_size(d)); | 376 | printk("Device at %i has size %u\n", i, desc_size(d)); |
| 382 | add_lguest_device(d); | 377 | add_lguest_device(d, i); |
| 383 | } | 378 | } |
| 384 | } | 379 | } |
| 385 | 380 | ||
diff --git a/drivers/pci/hotplug/rpadlpar_sysfs.c b/drivers/pci/hotplug/rpadlpar_sysfs.c index e32148a8fa12..779c5db71be4 100644 --- a/drivers/pci/hotplug/rpadlpar_sysfs.c +++ b/drivers/pci/hotplug/rpadlpar_sysfs.c | |||
| @@ -18,8 +18,12 @@ | |||
| 18 | #include "rpadlpar.h" | 18 | #include "rpadlpar.h" |
| 19 | 19 | ||
| 20 | #define DLPAR_KOBJ_NAME "control" | 20 | #define DLPAR_KOBJ_NAME "control" |
| 21 | #define ADD_SLOT_ATTR_NAME "add_slot" | 21 | |
| 22 | #define REMOVE_SLOT_ATTR_NAME "remove_slot" | 22 | /* Those two have no quotes because they are passed to __ATTR() which |
| 23 | * stringifies the argument (yuck !) | ||
| 24 | */ | ||
| 25 | #define ADD_SLOT_ATTR_NAME add_slot | ||
| 26 | #define REMOVE_SLOT_ATTR_NAME remove_slot | ||
| 23 | 27 | ||
| 24 | #define MAX_DRC_NAME_LEN 64 | 28 | #define MAX_DRC_NAME_LEN 64 |
| 25 | 29 | ||
diff --git a/drivers/pcmcia/electra_cf.c b/drivers/pcmcia/electra_cf.c index 0a6cea1316b4..52d0aa8c2e7a 100644 --- a/drivers/pcmcia/electra_cf.c +++ b/drivers/pcmcia/electra_cf.c | |||
| @@ -352,6 +352,7 @@ static struct of_device_id electra_cf_match[] = { | |||
| 352 | }, | 352 | }, |
| 353 | {}, | 353 | {}, |
| 354 | }; | 354 | }; |
| 355 | MODULE_DEVICE_TABLE(of, electra_cf_match); | ||
| 355 | 356 | ||
| 356 | static struct of_platform_driver electra_cf_driver = { | 357 | static struct of_platform_driver electra_cf_driver = { |
| 357 | .name = (char *)driver_name, | 358 | .name = (char *)driver_name, |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 9f55ce6f3c78..5ab34340919b 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
| @@ -31,11 +31,6 @@ | |||
| 31 | */ | 31 | */ |
| 32 | static void *kvm_devices; | 32 | static void *kvm_devices; |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * Unique numbering for kvm devices. | ||
| 36 | */ | ||
| 37 | static unsigned int dev_index; | ||
| 38 | |||
| 39 | struct kvm_device { | 34 | struct kvm_device { |
| 40 | struct virtio_device vdev; | 35 | struct virtio_device vdev; |
| 41 | struct kvm_device_desc *desc; | 36 | struct kvm_device_desc *desc; |
| @@ -250,26 +245,25 @@ static struct device kvm_root = { | |||
| 250 | * adds a new device and register it with virtio | 245 | * adds a new device and register it with virtio |
| 251 | * appropriate drivers are loaded by the device model | 246 | * appropriate drivers are loaded by the device model |
| 252 | */ | 247 | */ |
| 253 | static void add_kvm_device(struct kvm_device_desc *d) | 248 | static void add_kvm_device(struct kvm_device_desc *d, unsigned int offset) |
| 254 | { | 249 | { |
| 255 | struct kvm_device *kdev; | 250 | struct kvm_device *kdev; |
| 256 | 251 | ||
| 257 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); | 252 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); |
| 258 | if (!kdev) { | 253 | if (!kdev) { |
| 259 | printk(KERN_EMERG "Cannot allocate kvm dev %u\n", | 254 | printk(KERN_EMERG "Cannot allocate kvm dev %u type %u\n", |
| 260 | dev_index++); | 255 | offset, d->type); |
| 261 | return; | 256 | return; |
| 262 | } | 257 | } |
| 263 | 258 | ||
| 264 | kdev->vdev.dev.parent = &kvm_root; | 259 | kdev->vdev.dev.parent = &kvm_root; |
| 265 | kdev->vdev.index = dev_index++; | ||
| 266 | kdev->vdev.id.device = d->type; | 260 | kdev->vdev.id.device = d->type; |
| 267 | kdev->vdev.config = &kvm_vq_configspace_ops; | 261 | kdev->vdev.config = &kvm_vq_configspace_ops; |
| 268 | kdev->desc = d; | 262 | kdev->desc = d; |
| 269 | 263 | ||
| 270 | if (register_virtio_device(&kdev->vdev) != 0) { | 264 | if (register_virtio_device(&kdev->vdev) != 0) { |
| 271 | printk(KERN_ERR "Failed to register kvm device %u\n", | 265 | printk(KERN_ERR "Failed to register kvm device %u type %u\n", |
| 272 | kdev->vdev.index); | 266 | offset, d->type); |
| 273 | kfree(kdev); | 267 | kfree(kdev); |
| 274 | } | 268 | } |
| 275 | } | 269 | } |
| @@ -289,7 +283,7 @@ static void scan_devices(void) | |||
| 289 | if (d->type == 0) | 283 | if (d->type == 0) |
| 290 | break; | 284 | break; |
| 291 | 285 | ||
| 292 | add_kvm_device(d); | 286 | add_kvm_device(d, i); |
| 293 | } | 287 | } |
| 294 | } | 288 | } |
| 295 | 289 | ||
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 13866789b356..0f3c2bb7bf35 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | #include <linux/spinlock.h> | 2 | #include <linux/spinlock.h> |
| 3 | #include <linux/virtio_config.h> | 3 | #include <linux/virtio_config.h> |
| 4 | 4 | ||
| 5 | /* Unique numbering for virtio devices. */ | ||
| 6 | static unsigned int dev_index; | ||
| 7 | |||
| 5 | static ssize_t device_show(struct device *_d, | 8 | static ssize_t device_show(struct device *_d, |
| 6 | struct device_attribute *attr, char *buf) | 9 | struct device_attribute *attr, char *buf) |
| 7 | { | 10 | { |
| @@ -166,7 +169,10 @@ int register_virtio_device(struct virtio_device *dev) | |||
| 166 | int err; | 169 | int err; |
| 167 | 170 | ||
| 168 | dev->dev.bus = &virtio_bus; | 171 | dev->dev.bus = &virtio_bus; |
| 169 | sprintf(dev->dev.bus_id, "%u", dev->index); | 172 | |
| 173 | /* Assign a unique device index and hence name. */ | ||
| 174 | dev->index = dev_index++; | ||
| 175 | sprintf(dev->dev.bus_id, "virtio%u", dev->index); | ||
| 170 | 176 | ||
| 171 | /* We always start by resetting the device, in case a previous | 177 | /* We always start by resetting the device, in case a previous |
| 172 | * driver messed it up. This also tests that code path a little. */ | 178 | * driver messed it up. This also tests that code path a little. */ |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 27e9fc9117cd..eae7236310e4 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -78,9 +78,6 @@ static struct device virtio_pci_root = { | |||
| 78 | .bus_id = "virtio-pci", | 78 | .bus_id = "virtio-pci", |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | /* Unique numbering for devices under the kvm root */ | ||
| 82 | static unsigned int dev_index; | ||
| 83 | |||
| 84 | /* Convert a generic virtio device to our structure */ | 81 | /* Convert a generic virtio device to our structure */ |
| 85 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | 82 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) |
| 86 | { | 83 | { |
| @@ -325,10 +322,6 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, | |||
| 325 | if (vp_dev == NULL) | 322 | if (vp_dev == NULL) |
| 326 | return -ENOMEM; | 323 | return -ENOMEM; |
| 327 | 324 | ||
| 328 | snprintf(vp_dev->vdev.dev.bus_id, BUS_ID_SIZE, "virtio%d", dev_index); | ||
| 329 | vp_dev->vdev.index = dev_index; | ||
| 330 | dev_index++; | ||
| 331 | |||
| 332 | vp_dev->vdev.dev.parent = &virtio_pci_root; | 325 | vp_dev->vdev.dev.parent = &virtio_pci_root; |
| 333 | vp_dev->vdev.config = &virtio_pci_config_ops; | 326 | vp_dev->vdev.config = &virtio_pci_config_ops; |
| 334 | vp_dev->pci_dev = pci_dev; | 327 | vp_dev->pci_dev = pci_dev; |
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 937a49d6772c..72bf8bc09014 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
| @@ -227,7 +227,6 @@ static bool vring_enable_cb(struct virtqueue *_vq) | |||
| 227 | struct vring_virtqueue *vq = to_vvq(_vq); | 227 | struct vring_virtqueue *vq = to_vvq(_vq); |
| 228 | 228 | ||
| 229 | START_USE(vq); | 229 | START_USE(vq); |
| 230 | BUG_ON(!(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)); | ||
| 231 | 230 | ||
| 232 | /* We optimistically turn back on interrupts, then check if there was | 231 | /* We optimistically turn back on interrupts, then check if there was |
| 233 | * more to do. */ | 232 | * more to do. */ |
| @@ -254,13 +253,6 @@ irqreturn_t vring_interrupt(int irq, void *_vq) | |||
| 254 | if (unlikely(vq->broken)) | 253 | if (unlikely(vq->broken)) |
| 255 | return IRQ_HANDLED; | 254 | return IRQ_HANDLED; |
| 256 | 255 | ||
| 257 | /* Other side may have missed us turning off the interrupt, | ||
| 258 | * but we should preserve disable semantic for virtio users. */ | ||
| 259 | if (unlikely(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) { | ||
| 260 | pr_debug("virtqueue interrupt after disable for %p\n", vq); | ||
| 261 | return IRQ_HANDLED; | ||
| 262 | } | ||
| 263 | |||
| 264 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); | 256 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); |
| 265 | if (vq->vq.callback) | 257 | if (vq->vq.callback) |
| 266 | vq->vq.callback(&vq->vq); | 258 | vq->vq.callback(&vq->vq); |
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c index f85b19625f97..30d09cbbad94 100644 --- a/drivers/watchdog/geodewdt.c +++ b/drivers/watchdog/geodewdt.c | |||
| @@ -221,8 +221,7 @@ geodewdt_probe(struct platform_device *dev) | |||
| 221 | { | 221 | { |
| 222 | int ret, timer; | 222 | int ret, timer; |
| 223 | 223 | ||
| 224 | timer = geode_mfgpt_alloc_timer(MFGPT_TIMER_ANY, | 224 | timer = geode_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING); |
| 225 | MFGPT_DOMAIN_WORKING, THIS_MODULE); | ||
| 226 | 225 | ||
| 227 | if (timer == -1) { | 226 | if (timer == -1) { |
| 228 | printk(KERN_ERR "geodewdt: No timers were available\n"); | 227 | printk(KERN_ERR "geodewdt: No timers were available\n"); |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index e0062d73db1c..89189488e286 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
| @@ -100,7 +100,7 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 100 | { \ | 100 | { \ |
| 101 | type ret; \ | 101 | type ret; \ |
| 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ | 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ |
| 103 | : "=r" (ret) : "r" (addr), "m" (*addr)); \ | 103 | : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ |
| 104 | return ret; \ | 104 | return ret; \ |
| 105 | } | 105 | } |
| 106 | 106 | ||
| @@ -108,8 +108,8 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 108 | static inline void name(volatile type __iomem *addr, type val) \ | 108 | static inline void name(volatile type __iomem *addr, type val) \ |
| 109 | { \ | 109 | { \ |
| 110 | __asm__ __volatile__("sync;" insn \ | 110 | __asm__ __volatile__("sync;" insn \ |
| 111 | : "=m" (*addr) : "r" (val), "r" (addr)); \ | 111 | : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ |
| 112 | IO_SET_SYNC_FLAG(); \ | 112 | IO_SET_SYNC_FLAG(); \ |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | 115 | ||
| @@ -333,7 +333,8 @@ static inline unsigned int name(unsigned int port) \ | |||
| 333 | " .long 3b,5b\n" \ | 333 | " .long 3b,5b\n" \ |
| 334 | ".previous" \ | 334 | ".previous" \ |
| 335 | : "=&r" (x) \ | 335 | : "=&r" (x) \ |
| 336 | : "r" (port + _IO_BASE)); \ | 336 | : "r" (port + _IO_BASE) \ |
| 337 | : "memory"); \ | ||
| 337 | return x; \ | 338 | return x; \ |
| 338 | } | 339 | } |
| 339 | 340 | ||
| @@ -350,7 +351,8 @@ static inline void name(unsigned int val, unsigned int port) \ | |||
| 350 | " .long 0b,2b\n" \ | 351 | " .long 0b,2b\n" \ |
| 351 | " .long 1b,2b\n" \ | 352 | " .long 1b,2b\n" \ |
| 352 | ".previous" \ | 353 | ".previous" \ |
| 353 | : : "r" (val), "r" (port + _IO_BASE)); \ | 354 | : : "r" (val), "r" (port + _IO_BASE) \ |
| 355 | : "memory"); \ | ||
| 354 | } | 356 | } |
| 355 | 357 | ||
| 356 | __do_in_asm(_rec_inb, "lbzx") | 358 | __do_in_asm(_rec_inb, "lbzx") |
diff --git a/include/linux/input.h b/include/linux/input.h index 28a094fcfe20..e075c4b762fb 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -637,7 +637,9 @@ struct input_absinfo { | |||
| 637 | #define SW_LID 0x00 /* set = lid shut */ | 637 | #define SW_LID 0x00 /* set = lid shut */ |
| 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ | 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ |
| 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ | 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ |
| 640 | #define SW_RADIO 0x03 /* set = radio enabled */ | 640 | #define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" |
| 641 | set = radio enabled */ | ||
| 642 | #define SW_RADIO SW_RFKILL_ALL /* deprecated */ | ||
| 641 | #define SW_MAX 0x0f | 643 | #define SW_MAX 0x0f |
| 642 | #define SW_CNT (SW_MAX+1) | 644 | #define SW_CNT (SW_MAX+1) |
| 643 | 645 | ||
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index d4695a3356d0..5f79a5f9de79 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
| @@ -10,18 +10,19 @@ | |||
| 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ | 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ |
| 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ | 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ |
| 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ | 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ |
| 13 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ | ||
| 13 | 14 | ||
| 14 | struct virtio_blk_config | 15 | struct virtio_blk_config |
| 15 | { | 16 | { |
| 16 | /* The capacity (in 512-byte sectors). */ | 17 | /* The capacity (in 512-byte sectors). */ |
| 17 | __le64 capacity; | 18 | __u64 capacity; |
| 18 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ | 19 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ |
| 19 | __le32 size_max; | 20 | __u32 size_max; |
| 20 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ | 21 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ |
| 21 | __le32 seg_max; | 22 | __u32 seg_max; |
| 22 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ | 23 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ |
| 23 | struct virtio_blk_geometry { | 24 | struct virtio_blk_geometry { |
| 24 | __le16 cylinders; | 25 | __u16 cylinders; |
| 25 | __u8 heads; | 26 | __u8 heads; |
| 26 | __u8 sectors; | 27 | __u8 sectors; |
| 27 | } geometry; | 28 | } geometry; |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 50db245c81ad..f364bbf63c34 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -15,6 +15,10 @@ | |||
| 15 | /* We've given up on this device. */ | 15 | /* We've given up on this device. */ |
| 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 | 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 |
| 17 | 17 | ||
| 18 | /* Do we get callbacks when the ring is completely used, even if we've | ||
| 19 | * suppressed them? */ | ||
| 20 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | ||
| 21 | |||
| 18 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
| 19 | #include <linux/virtio.h> | 23 | #include <linux/virtio.h> |
| 20 | 24 | ||
| @@ -99,7 +103,7 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 99 | * The return value is -ENOENT if the feature doesn't exist. Otherwise | 103 | * The return value is -ENOENT if the feature doesn't exist. Otherwise |
| 100 | * the config value is copied into whatever is pointed to by v. */ | 104 | * the config value is copied into whatever is pointed to by v. */ |
| 101 | #define virtio_config_val(vdev, fbit, offset, v) \ | 105 | #define virtio_config_val(vdev, fbit, offset, v) \ |
| 102 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(v)) | 106 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(*v)) |
| 103 | 107 | ||
| 104 | static inline int virtio_config_buf(struct virtio_device *vdev, | 108 | static inline int virtio_config_buf(struct virtio_device *vdev, |
| 105 | unsigned int fbit, | 109 | unsigned int fbit, |
diff --git a/include/linux/virtio_rng.h b/include/linux/virtio_rng.h new file mode 100644 index 000000000000..331afb6c9f62 --- /dev/null +++ b/include/linux/virtio_rng.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_RNG_H | ||
| 2 | #define _LINUX_VIRTIO_RNG_H | ||
| 3 | #include <linux/virtio_config.h> | ||
| 4 | |||
| 5 | /* The ID for virtio_rng */ | ||
| 6 | #define VIRTIO_ID_RNG 4 | ||
| 7 | |||
| 8 | #endif /* _LINUX_VIRTIO_RNG_H */ | ||
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index 4d13732e9cf0..6f69968eab24 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
| @@ -100,6 +100,7 @@ | |||
| 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ | 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ |
| 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ | 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ |
| 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ | 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ |
| 103 | #define WM9713_45W 0x1000 /* set for 5 wire panel */ | ||
| 103 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ | 104 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ |
| 104 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ | 105 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ |
| 105 | #define WM9713_WAIT 0x0200 /* coordinate wait */ | 106 | #define WM9713_WAIT 0x0200 /* coordinate wait */ |
diff --git a/scripts/decodecode b/scripts/decodecode index 235d3938529d..235d3938529d 100644..100755 --- a/scripts/decodecode +++ b/scripts/decodecode | |||
