aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/common/dmabounce.c22
-rw-r--r--arch/arm/common/locomo.c2
-rw-r--r--arch/arm/common/sa1111.c10
-rw-r--r--arch/arm/common/scoop.c2
-rw-r--r--arch/arm/kernel/ecard.c5
-rw-r--r--arch/arm/kernel/time.c4
-rw-r--r--arch/arm/mach-integrator/impd1.c7
-rw-r--r--arch/arm/mach-integrator/lm.c6
-rw-r--r--arch/arm/plat-omap/mailbox.c2
-rw-r--r--arch/avr32/kernel/cpu.c38
-rw-r--r--arch/blackfin/Kconfig4
-rw-r--r--arch/ia64/Kconfig4
-rw-r--r--arch/ia64/Makefile6
-rw-r--r--arch/ia64/kernel/Makefile44
-rw-r--r--arch/ia64/kernel/acpi.c5
-rw-r--r--arch/ia64/kernel/cpufreq/acpi-cpufreq.c4
-rw-r--r--arch/ia64/kernel/entry.S115
-rw-r--r--arch/ia64/kernel/err_inject.c22
-rw-r--r--arch/ia64/kernel/head.S41
-rw-r--r--arch/ia64/kernel/iosapic.c45
-rw-r--r--arch/ia64/kernel/irq_ia64.c19
-rw-r--r--arch/ia64/kernel/ivt.S462
-rw-r--r--arch/ia64/kernel/minstate.h13
-rw-r--r--arch/ia64/kernel/module.c3
-rw-r--r--arch/ia64/kernel/nr-irqs.c24
-rw-r--r--arch/ia64/kernel/paravirt.c369
-rw-r--r--arch/ia64/kernel/paravirt_inst.h29
-rw-r--r--arch/ia64/kernel/paravirtentry.S60
-rw-r--r--arch/ia64/kernel/setup.c10
-rw-r--r--arch/ia64/kernel/smpboot.c2
-rw-r--r--arch/ia64/kernel/time.c23
-rw-r--r--arch/ia64/kernel/vmlinux.lds.S1
-rw-r--r--arch/mips/kernel/rtlx.c4
-rw-r--r--arch/mips/sibyte/common/sb_tbprof.c3
-rw-r--r--arch/powerpc/Kconfig14
-rw-r--r--arch/powerpc/boot/Makefile4
-rw-r--r--arch/powerpc/boot/dts/mpc7448hpc2.dts24
-rw-r--r--arch/powerpc/boot/dts/mpc8313erdb.dts241
-rw-r--r--arch/powerpc/boot/dts/mpc8610_hpcd.dts14
-rw-r--r--arch/powerpc/configs/85xx/mpc8544_ds_defconfig8
-rw-r--r--arch/powerpc/configs/85xx/mpc8572_ds_defconfig8
-rw-r--r--arch/powerpc/configs/mpc85xx_defconfig8
-rw-r--r--arch/powerpc/configs/mpc8610_hpcd_defconfig121
-rw-r--r--arch/powerpc/configs/mpc8641_hpcn_defconfig8
-rw-r--r--arch/powerpc/configs/ppc6xx_defconfig3304
-rw-r--r--arch/powerpc/configs/ps3_defconfig196
-rw-r--r--arch/powerpc/kernel/cputable.c20
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S187
-rw-r--r--arch/powerpc/kernel/iommu.c13
-rw-r--r--arch/powerpc/kernel/pci-common.c1
-rw-r--r--arch/powerpc/kernel/prom_parse.c44
-rw-r--r--arch/powerpc/kernel/stacktrace.c2
-rw-r--r--arch/powerpc/kernel/sysfs.c15
-rw-r--r--arch/powerpc/kernel/vmlinux.lds.S31
-rw-r--r--arch/powerpc/lib/feature-fixups.c2
-rw-r--r--arch/powerpc/lib/string.S18
-rw-r--r--arch/powerpc/platforms/52xx/Kconfig1
-rw-r--r--arch/powerpc/platforms/82xx/Kconfig1
-rw-r--r--arch/powerpc/platforms/82xx/ep8248e.c4
-rw-r--r--arch/powerpc/platforms/83xx/Kconfig3
-rw-r--r--arch/powerpc/platforms/83xx/Makefile2
-rw-r--r--arch/powerpc/platforms/83xx/mpc831x_rdb.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_mds.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_rdb.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_itx.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_mds.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc836x_mds.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc836x_rdk.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc837x_mds.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc837x_rdb.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc83xx.h5
-rw-r--r--arch/powerpc/platforms/83xx/pci.c91
-rw-r--r--arch/powerpc/platforms/83xx/sbc834x.c1
-rw-r--r--arch/powerpc/platforms/83xx/suspend-asm.S533
-rw-r--r--arch/powerpc/platforms/83xx/suspend.c388
-rw-r--r--arch/powerpc/platforms/83xx/usb.c24
-rw-r--r--arch/powerpc/platforms/85xx/Kconfig3
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ds.c2
-rw-r--r--arch/powerpc/platforms/86xx/Kconfig3
-rw-r--r--arch/powerpc/platforms/86xx/mpc8610_hpcd.c87
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx_hpcn.c2
-rw-r--r--arch/powerpc/platforms/Kconfig6
-rw-r--r--arch/powerpc/platforms/Kconfig.cputype5
-rw-r--r--arch/powerpc/platforms/cell/Kconfig25
-rw-r--r--arch/powerpc/platforms/cell/Makefile3
-rw-r--r--arch/powerpc/platforms/cell/cbe_powerbutton.c117
-rw-r--r--arch/powerpc/platforms/cell/cbe_thermal.c45
-rw-r--r--arch/powerpc/platforms/cell/cpufreq_spudemand.c184
-rw-r--r--arch/powerpc/platforms/cell/iommu.c118
-rw-r--r--arch/powerpc/platforms/cell/pervasive.c27
-rw-r--r--arch/powerpc/platforms/cell/pervasive.h9
-rw-r--r--arch/powerpc/platforms/cell/ras.c46
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c3
-rw-r--r--arch/powerpc/platforms/chrp/pci.c2
-rw-r--r--arch/powerpc/platforms/fsl_uli1575.c117
-rw-r--r--arch/powerpc/platforms/iseries/Kconfig1
-rw-r--r--arch/powerpc/platforms/iseries/iommu.c3
-rw-r--r--arch/powerpc/platforms/pasemi/iommu.c3
-rw-r--r--arch/powerpc/platforms/ps3/Kconfig1
-rw-r--r--arch/powerpc/platforms/ps3/device-init.c1
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c21
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig1
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c26
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c14
-rw-r--r--arch/powerpc/sysdev/axonram.c28
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c3
-rw-r--r--arch/powerpc/sysdev/fsl_pci.c61
-rw-r--r--arch/powerpc/sysdev/fsl_pci.h1
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c90
-rw-r--r--arch/powerpc/sysdev/fsl_soc.h1
-rw-r--r--arch/powerpc/sysdev/ipic.c71
-rw-r--r--arch/powerpc/sysdev/qe_lib/qe.c6
-rw-r--r--arch/powerpc/sysdev/qe_lib/ucc.c6
-rw-r--r--arch/powerpc/sysdev/qe_lib/ucc_fast.c16
-rw-r--r--arch/s390/kernel/smp.c36
-rw-r--r--arch/s390/kernel/time.c35
-rw-r--r--arch/sh/drivers/dma/dma-sysfs.c15
-rw-r--r--arch/sparc/kernel/apc.c42
-rw-r--r--arch/sparc/kernel/asm-offsets.c12
-rw-r--r--arch/sparc/kernel/ebus.c9
-rw-r--r--arch/sparc/kernel/entry.S5
-rw-r--r--arch/sparc/kernel/etrap.S1
-rw-r--r--arch/sparc/kernel/head.S2
-rw-r--r--arch/sparc/kernel/idprom.c2
-rw-r--r--arch/sparc/kernel/ioport.c13
-rw-r--r--arch/sparc/kernel/irq.c2
-rw-r--r--arch/sparc/kernel/process.c14
-rw-r--r--arch/sparc/kernel/rtrap.S2
-rw-r--r--arch/sparc/kernel/setup.c4
-rw-r--r--arch/sparc/kernel/smp.c7
-rw-r--r--arch/sparc/kernel/sun4c_irq.c3
-rw-r--r--arch/sparc/kernel/sun4d_irq.c7
-rw-r--r--arch/sparc/kernel/sun4m_irq.c7
-rw-r--r--arch/sparc/kernel/sun4m_smp.c9
-rw-r--r--arch/sparc/kernel/time.c4
-rw-r--r--arch/sparc/kernel/traps.c16
-rw-r--r--arch/sparc/kernel/wof.S1
-rw-r--r--arch/sparc/kernel/wuf.S1
-rw-r--r--arch/sparc/mm/fault.c2
-rw-r--r--arch/sparc/mm/init.c9
-rw-r--r--arch/sparc/mm/srmmu.c38
-rw-r--r--arch/sparc/mm/tsunami.S1
-rw-r--r--arch/sparc64/Kconfig20
-rw-r--r--arch/sparc64/Makefile4
-rw-r--r--arch/sparc64/defconfig145
-rw-r--r--arch/sparc64/kernel/central.c14
-rw-r--r--arch/sparc64/kernel/ds.c2
-rw-r--r--arch/sparc64/kernel/ebus.c4
-rw-r--r--arch/sparc64/kernel/hvapi.c4
-rw-r--r--arch/sparc64/kernel/of_device.c4
-rw-r--r--arch/sparc64/kernel/pci.c2
-rw-r--r--arch/sparc64/kernel/pci_msi.c10
-rw-r--r--arch/sparc64/kernel/pci_sun4v.c2
-rw-r--r--arch/sparc64/kernel/process.c32
-rw-r--r--arch/sparc64/kernel/smp.c87
-rw-r--r--arch/sparc64/kernel/sparc64_ksyms.c2
-rw-r--r--arch/sparc64/kernel/sys_sparc.c6
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c7
-rw-r--r--arch/sparc64/kernel/sysfs.c16
-rw-r--r--arch/sparc64/kernel/traps.c40
-rw-r--r--arch/sparc64/kernel/ttable.S7
-rw-r--r--arch/sparc64/kernel/unaligned.c7
-rw-r--r--arch/sparc64/kernel/vio.c18
-rw-r--r--arch/sparc64/lib/copy_page.S6
-rw-r--r--arch/sparc64/mm/fault.c5
-rw-r--r--arch/sparc64/mm/tsb.c6
-rw-r--r--arch/sparc64/mm/ultra.S5
-rw-r--r--arch/x86/Kconfig.debug2
-rw-r--r--arch/x86/kernel/cpu/cpufreq/powernow-k7.h1
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_64.c18
-rw-r--r--arch/x86/kernel/cpu/mcheck/therm_throt.c1
-rw-r--r--arch/x86/kernel/cpuid.c4
-rw-r--r--arch/x86/kernel/microcode.c10
-rw-r--r--arch/x86/kernel/msr.c4
-rw-r--r--arch/x86/kernel/pci-dma.c6
-rw-r--r--arch/x86/kernel/pci-gart_64.c4
-rw-r--r--arch/xtensa/Kconfig4
177 files changed, 7197 insertions, 1524 deletions
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c
index 2744673314b4..dd2947342604 100644
--- a/arch/arm/common/dmabounce.c
+++ b/arch/arm/common/dmabounce.c
@@ -554,9 +554,8 @@ dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size,
554 554
555 device_info = kmalloc(sizeof(struct dmabounce_device_info), GFP_ATOMIC); 555 device_info = kmalloc(sizeof(struct dmabounce_device_info), GFP_ATOMIC);
556 if (!device_info) { 556 if (!device_info) {
557 printk(KERN_ERR 557 dev_err(dev,
558 "Could not allocated dmabounce_device_info for %s", 558 "Could not allocated dmabounce_device_info\n");
559 dev->bus_id);
560 return -ENOMEM; 559 return -ENOMEM;
561 } 560 }
562 561
@@ -594,8 +593,7 @@ dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size,
594 593
595 dev->archdata.dmabounce = device_info; 594 dev->archdata.dmabounce = device_info;
596 595
597 printk(KERN_INFO "dmabounce: registered device %s on %s bus\n", 596 dev_info(dev, "dmabounce: registered device\n");
598 dev->bus_id, dev->bus->name);
599 597
600 return 0; 598 return 0;
601 599
@@ -614,16 +612,15 @@ dmabounce_unregister_dev(struct device *dev)
614 dev->archdata.dmabounce = NULL; 612 dev->archdata.dmabounce = NULL;
615 613
616 if (!device_info) { 614 if (!device_info) {
617 printk(KERN_WARNING 615 dev_warn(dev,
618 "%s: Never registered with dmabounce but attempting" \ 616 "Never registered with dmabounce but attempting"
619 "to unregister!\n", dev->bus_id); 617 "to unregister!\n");
620 return; 618 return;
621 } 619 }
622 620
623 if (!list_empty(&device_info->safe_buffers)) { 621 if (!list_empty(&device_info->safe_buffers)) {
624 printk(KERN_ERR 622 dev_err(dev,
625 "%s: Removing from dmabounce with pending buffers!\n", 623 "Removing from dmabounce with pending buffers!\n");
626 dev->bus_id);
627 BUG(); 624 BUG();
628 } 625 }
629 626
@@ -639,8 +636,7 @@ dmabounce_unregister_dev(struct device *dev)
639 636
640 kfree(device_info); 637 kfree(device_info);
641 638
642 printk(KERN_INFO "dmabounce: device %s on %s bus unregistered\n", 639 dev_info(dev, "dmabounce: device unregistered\n");
643 dev->bus_id, dev->bus->name);
644} 640}
645 641
646 642
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index d973c986f721..c3c3a3339049 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -543,7 +543,6 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
543 goto out; 543 goto out;
544 } 544 }
545 545
546 strncpy(dev->dev.bus_id, info->name, sizeof(dev->dev.bus_id));
547 /* 546 /*
548 * If the parent device has a DMA mask associated with it, 547 * If the parent device has a DMA mask associated with it,
549 * propagate it down to the children. 548 * propagate it down to the children.
@@ -553,6 +552,7 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
553 dev->dev.dma_mask = &dev->dma_mask; 552 dev->dev.dma_mask = &dev->dma_mask;
554 } 553 }
555 554
555 dev_set_name(&dev->dev, "%s", info->name);
556 dev->devid = info->devid; 556 dev->devid = info->devid;
557 dev->dev.parent = lchip->dev; 557 dev->dev.parent = lchip->dev;
558 dev->dev.bus = &locomo_bus_type; 558 dev->dev.bus = &locomo_bus_type;
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index eb06d0b2cb74..c8e8f0ea59e1 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -550,9 +550,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
550 goto out; 550 goto out;
551 } 551 }
552 552
553 snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), 553 dev_set_name(&dev->dev, "%4.4lx", info->offset);
554 "%4.4lx", info->offset);
555
556 dev->devid = info->devid; 554 dev->devid = info->devid;
557 dev->dev.parent = sachip->dev; 555 dev->dev.parent = sachip->dev;
558 dev->dev.bus = &sa1111_bus_type; 556 dev->dev.bus = &sa1111_bus_type;
@@ -560,7 +558,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
560 dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask; 558 dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask;
561 dev->res.start = sachip->phys + info->offset; 559 dev->res.start = sachip->phys + info->offset;
562 dev->res.end = dev->res.start + 511; 560 dev->res.end = dev->res.start + 511;
563 dev->res.name = dev->dev.bus_id; 561 dev->res.name = dev_name(&dev->dev);
564 dev->res.flags = IORESOURCE_MEM; 562 dev->res.flags = IORESOURCE_MEM;
565 dev->mapbase = sachip->base + info->offset; 563 dev->mapbase = sachip->base + info->offset;
566 dev->skpcr_mask = info->skpcr_mask; 564 dev->skpcr_mask = info->skpcr_mask;
@@ -570,6 +568,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
570 if (ret) { 568 if (ret) {
571 printk("SA1111: failed to allocate resource for %s\n", 569 printk("SA1111: failed to allocate resource for %s\n",
572 dev->res.name); 570 dev->res.name);
571 dev_set_name(&dev->dev, NULL);
573 kfree(dev); 572 kfree(dev);
574 goto out; 573 goto out;
575 } 574 }
@@ -593,7 +592,8 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
593 if (dev->dma_mask != 0xffffffffUL) { 592 if (dev->dma_mask != 0xffffffffUL) {
594 ret = dmabounce_register_dev(&dev->dev, 1024, 4096); 593 ret = dmabounce_register_dev(&dev->dev, 1024, 4096);
595 if (ret) { 594 if (ret) {
596 printk("SA1111: Failed to register %s with dmabounce", dev->dev.bus_id); 595 dev_err(&dev->dev, "SA1111: Failed to register"
596 " with dmabounce\n");
597 device_unregister(&dev->dev); 597 device_unregister(&dev->dev);
598 } 598 }
599 } 599 }
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c
index bc299b07a6fa..ae39553589dd 100644
--- a/arch/arm/common/scoop.c
+++ b/arch/arm/common/scoop.c
@@ -247,7 +247,7 @@ static int __devinit scoop_probe(struct platform_device *pdev)
247 devptr->gpio.base = -1; 247 devptr->gpio.base = -1;
248 248
249 if (inf->gpio_base != 0) { 249 if (inf->gpio_base != 0) {
250 devptr->gpio.label = pdev->dev.bus_id; 250 devptr->gpio.label = dev_name(&pdev->dev);
251 devptr->gpio.base = inf->gpio_base; 251 devptr->gpio.base = inf->gpio_base;
252 devptr->gpio.ngpio = 12; /* PA11 = 0, PA12 = 1, etc. up to PA22 = 11 */ 252 devptr->gpio.ngpio = 12; /* PA11 = 0, PA12 = 1, etc. up to PA22 = 11 */
253 devptr->gpio.set = scoop_gpio_set; 253 devptr->gpio.set = scoop_gpio_set;
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c
index 8bfd299bfe77..f5cfdabcb87d 100644
--- a/arch/arm/kernel/ecard.c
+++ b/arch/arm/kernel/ecard.c
@@ -783,7 +783,7 @@ static void ecard_proc_init(void)
783 783
784#define ec_set_resource(ec,nr,st,sz) \ 784#define ec_set_resource(ec,nr,st,sz) \
785 do { \ 785 do { \
786 (ec)->resource[nr].name = ec->dev.bus_id; \ 786 (ec)->resource[nr].name = dev_name(&ec->dev); \
787 (ec)->resource[nr].start = st; \ 787 (ec)->resource[nr].start = st; \
788 (ec)->resource[nr].end = (st) + (sz) - 1; \ 788 (ec)->resource[nr].end = (st) + (sz) - 1; \
789 (ec)->resource[nr].flags = IORESOURCE_MEM; \ 789 (ec)->resource[nr].flags = IORESOURCE_MEM; \
@@ -853,8 +853,7 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
853 for (i = 0; i < ECARD_NUM_RESOURCES; i++) { 853 for (i = 0; i < ECARD_NUM_RESOURCES; i++) {
854 if (ec->resource[i].flags && 854 if (ec->resource[i].flags &&
855 request_resource(&iomem_resource, &ec->resource[i])) { 855 request_resource(&iomem_resource, &ec->resource[i])) {
856 printk(KERN_ERR "%s: resource(s) not available\n", 856 dev_err(&ec->dev, "resource(s) not available\n");
857 ec->dev.bus_id);
858 ec->resource[i].end -= ec->resource[i].start; 857 ec->resource[i].end -= ec->resource[i].start;
859 ec->resource[i].start = 0; 858 ec->resource[i].start = 0;
860 ec->resource[i].flags = 0; 859 ec->resource[i].flags = 0;
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index cc5145b28e7f..368d171754cf 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -130,7 +130,9 @@ static const struct leds_evt_name evt_names[] = {
130 { "red", led_red_on, led_red_off }, 130 { "red", led_red_on, led_red_off },
131}; 131};
132 132
133static ssize_t leds_store(struct sys_device *dev, const char *buf, size_t size) 133static ssize_t leds_store(struct sys_device *dev,
134 struct sysdev_attribute *attr,
135 const char *buf, size_t size)
134{ 136{
135 int ret = -EINVAL, len = strcspn(buf, " "); 137 int ret = -EINVAL, len = strcspn(buf, " ");
136 138
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c
index 62e653a3ea1a..5a1588cf8242 100644
--- a/arch/arm/mach-integrator/impd1.c
+++ b/arch/arm/mach-integrator/impd1.c
@@ -393,9 +393,7 @@ static int impd1_probe(struct lm_device *dev)
393 if (!d) 393 if (!d)
394 continue; 394 continue;
395 395
396 snprintf(d->dev.bus_id, sizeof(d->dev.bus_id), 396 dev_set_name(&d->dev, "lm%x:%5.5lx", dev->id, idev->offset >> 12);
397 "lm%x:%5.5lx", dev->id, idev->offset >> 12);
398
399 d->dev.parent = &dev->dev; 397 d->dev.parent = &dev->dev;
400 d->res.start = dev->resource.start + idev->offset; 398 d->res.start = dev->resource.start + idev->offset;
401 d->res.end = d->res.start + SZ_4K - 1; 399 d->res.end = d->res.start + SZ_4K - 1;
@@ -407,8 +405,7 @@ static int impd1_probe(struct lm_device *dev)
407 405
408 ret = amba_device_register(d, &dev->resource); 406 ret = amba_device_register(d, &dev->resource);
409 if (ret) { 407 if (ret) {
410 printk("unable to register device %s: %d\n", 408 dev_err(&d->dev, "unable to register device: %d\n");
411 d->dev.bus_id, ret);
412 kfree(d); 409 kfree(d);
413 } 410 }
414 } 411 }
diff --git a/arch/arm/mach-integrator/lm.c b/arch/arm/mach-integrator/lm.c
index 622cdc4212dd..f939c5091405 100644
--- a/arch/arm/mach-integrator/lm.c
+++ b/arch/arm/mach-integrator/lm.c
@@ -81,8 +81,10 @@ int lm_device_register(struct lm_device *dev)
81 dev->dev.release = lm_device_release; 81 dev->dev.release = lm_device_release;
82 dev->dev.bus = &lm_bustype; 82 dev->dev.bus = &lm_bustype;
83 83
84 snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), "lm%d", dev->id); 84 ret = dev_set_name(&dev->dev, "lm%d", dev->id);
85 dev->resource.name = dev->dev.bus_id; 85 if (ret)
86 return ret;
87 dev->resource.name = dev_name(&dev->dev);
86 88
87 ret = request_resource(&iomem_resource, &dev->resource); 89 ret = request_resource(&iomem_resource, &dev->resource);
88 if (ret == 0) { 90 if (ret == 0) {
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c
index 6f33f58bca45..ff1413eae0b8 100644
--- a/arch/arm/plat-omap/mailbox.c
+++ b/arch/arm/plat-omap/mailbox.c
@@ -334,7 +334,7 @@ static int omap_mbox_init(struct omap_mbox *mbox)
334 } 334 }
335 335
336 mbox->dev.class = &omap_mbox_class; 336 mbox->dev.class = &omap_mbox_class;
337 strlcpy(mbox->dev.bus_id, mbox->name, KOBJ_NAME_LEN); 337 dev_set_name(&mbox->dev, "%s", mbox->name);
338 dev_set_drvdata(&mbox->dev, mbox); 338 dev_set_drvdata(&mbox->dev, mbox);
339 339
340 ret = device_register(&mbox->dev); 340 ret = device_register(&mbox->dev);
diff --git a/arch/avr32/kernel/cpu.c b/arch/avr32/kernel/cpu.c
index b8409caeb23d..e84faffbbeca 100644
--- a/arch/avr32/kernel/cpu.c
+++ b/arch/avr32/kernel/cpu.c
@@ -26,14 +26,16 @@ static DEFINE_PER_CPU(struct cpu, cpu_devices);
26 * XXX: If/when a SMP-capable implementation of AVR32 will ever be 26 * XXX: If/when a SMP-capable implementation of AVR32 will ever be
27 * made, we must make sure that the code executes on the correct CPU. 27 * made, we must make sure that the code executes on the correct CPU.
28 */ 28 */
29static ssize_t show_pc0event(struct sys_device *dev, char *buf) 29static ssize_t show_pc0event(struct sys_device *dev,
30 struct sysdev_attribute *attr, char *buf)
30{ 31{
31 unsigned long pccr; 32 unsigned long pccr;
32 33
33 pccr = sysreg_read(PCCR); 34 pccr = sysreg_read(PCCR);
34 return sprintf(buf, "0x%lx\n", (pccr >> 12) & 0x3f); 35 return sprintf(buf, "0x%lx\n", (pccr >> 12) & 0x3f);
35} 36}
36static ssize_t store_pc0event(struct sys_device *dev, const char *buf, 37static ssize_t store_pc0event(struct sys_device *dev,
38 struct sysdev_attribute *attr, const char *buf,
37 size_t count) 39 size_t count)
38{ 40{
39 unsigned long val; 41 unsigned long val;
@@ -46,15 +48,17 @@ static ssize_t store_pc0event(struct sys_device *dev, const char *buf,
46 sysreg_write(PCCR, val); 48 sysreg_write(PCCR, val);
47 return count; 49 return count;
48} 50}
49static ssize_t show_pc0count(struct sys_device *dev, char *buf) 51static ssize_t show_pc0count(struct sys_device *dev,
52 struct sysdev_attribute *attr, char *buf)
50{ 53{
51 unsigned long pcnt0; 54 unsigned long pcnt0;
52 55
53 pcnt0 = sysreg_read(PCNT0); 56 pcnt0 = sysreg_read(PCNT0);
54 return sprintf(buf, "%lu\n", pcnt0); 57 return sprintf(buf, "%lu\n", pcnt0);
55} 58}
56static ssize_t store_pc0count(struct sys_device *dev, const char *buf, 59static ssize_t store_pc0count(struct sys_device *dev,
57 size_t count) 60 struct sysdev_attribute *attr,
61 const char *buf, size_t count)
58{ 62{
59 unsigned long val; 63 unsigned long val;
60 char *endp; 64 char *endp;
@@ -67,14 +71,16 @@ static ssize_t store_pc0count(struct sys_device *dev, const char *buf,
67 return count; 71 return count;
68} 72}
69 73
70static ssize_t show_pc1event(struct sys_device *dev, char *buf) 74static ssize_t show_pc1event(struct sys_device *dev,
75 struct sysdev_attribute *attr, char *buf)
71{ 76{
72 unsigned long pccr; 77 unsigned long pccr;
73 78
74 pccr = sysreg_read(PCCR); 79 pccr = sysreg_read(PCCR);
75 return sprintf(buf, "0x%lx\n", (pccr >> 18) & 0x3f); 80 return sprintf(buf, "0x%lx\n", (pccr >> 18) & 0x3f);
76} 81}
77static ssize_t store_pc1event(struct sys_device *dev, const char *buf, 82static ssize_t store_pc1event(struct sys_device *dev,
83 struct sysdev_attribute *attr, const char *buf,
78 size_t count) 84 size_t count)
79{ 85{
80 unsigned long val; 86 unsigned long val;
@@ -87,14 +93,16 @@ static ssize_t store_pc1event(struct sys_device *dev, const char *buf,
87 sysreg_write(PCCR, val); 93 sysreg_write(PCCR, val);
88 return count; 94 return count;
89} 95}
90static ssize_t show_pc1count(struct sys_device *dev, char *buf) 96static ssize_t show_pc1count(struct sys_device *dev,
97 struct sysdev_attribute *attr, char *buf)
91{ 98{
92 unsigned long pcnt1; 99 unsigned long pcnt1;
93 100
94 pcnt1 = sysreg_read(PCNT1); 101 pcnt1 = sysreg_read(PCNT1);
95 return sprintf(buf, "%lu\n", pcnt1); 102 return sprintf(buf, "%lu\n", pcnt1);
96} 103}
97static ssize_t store_pc1count(struct sys_device *dev, const char *buf, 104static ssize_t store_pc1count(struct sys_device *dev,
105 struct sysdev_attribute *attr, const char *buf,
98 size_t count) 106 size_t count)
99{ 107{
100 unsigned long val; 108 unsigned long val;
@@ -108,14 +116,16 @@ static ssize_t store_pc1count(struct sys_device *dev, const char *buf,
108 return count; 116 return count;
109} 117}
110 118
111static ssize_t show_pccycles(struct sys_device *dev, char *buf) 119static ssize_t show_pccycles(struct sys_device *dev,
120 struct sysdev_attribute *attr, char *buf)
112{ 121{
113 unsigned long pccnt; 122 unsigned long pccnt;
114 123
115 pccnt = sysreg_read(PCCNT); 124 pccnt = sysreg_read(PCCNT);
116 return sprintf(buf, "%lu\n", pccnt); 125 return sprintf(buf, "%lu\n", pccnt);
117} 126}
118static ssize_t store_pccycles(struct sys_device *dev, const char *buf, 127static ssize_t store_pccycles(struct sys_device *dev,
128 struct sysdev_attribute *attr, const char *buf,
119 size_t count) 129 size_t count)
120{ 130{
121 unsigned long val; 131 unsigned long val;
@@ -129,14 +139,16 @@ static ssize_t store_pccycles(struct sys_device *dev, const char *buf,
129 return count; 139 return count;
130} 140}
131 141
132static ssize_t show_pcenable(struct sys_device *dev, char *buf) 142static ssize_t show_pcenable(struct sys_device *dev,
143 struct sysdev_attribute *attr, char *buf)
133{ 144{
134 unsigned long pccr; 145 unsigned long pccr;
135 146
136 pccr = sysreg_read(PCCR); 147 pccr = sysreg_read(PCCR);
137 return sprintf(buf, "%c\n", (pccr & 1)?'1':'0'); 148 return sprintf(buf, "%c\n", (pccr & 1)?'1':'0');
138} 149}
139static ssize_t store_pcenable(struct sys_device *dev, const char *buf, 150static ssize_t store_pcenable(struct sys_device *dev,
151 struct sysdev_attribute *attr, const char *buf,
140 size_t count) 152 size_t count)
141{ 153{
142 unsigned long pccr, val; 154 unsigned long pccr, val;
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
index b87634e75f20..b83b8ef84e91 100644
--- a/arch/blackfin/Kconfig
+++ b/arch/blackfin/Kconfig
@@ -873,8 +873,8 @@ config HOTPLUG
873 plugged into slots found on all modern laptop computers. Another 873 plugged into slots found on all modern laptop computers. Another
874 example, used on modern desktops as well as laptops, is USB. 874 example, used on modern desktops as well as laptops, is USB.
875 875
876 Enable HOTPLUG and KMOD, and build a modular kernel. Get agent 876 Enable HOTPLUG and build a modular kernel. Get agent software
877 software (at <http://linux-hotplug.sourceforge.net/>) and install it. 877 (from <http://linux-hotplug.sourceforge.net/>) and install it.
878 Then your kernel will automatically call out to a user mode "policy 878 Then your kernel will automatically call out to a user mode "policy
879 agent" (/sbin/hotplug) to load modules and set up software needed 879 agent" (/sbin/hotplug) to load modules and set up software needed
880 to use devices as you hotplug them. 880 to use devices as you hotplug them.
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 18bcc10903b4..451f2ffb137b 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -540,8 +540,8 @@ config KEXEC
540 strongly in flux, so no good recommendation can be made. 540 strongly in flux, so no good recommendation can be made.
541 541
542config CRASH_DUMP 542config CRASH_DUMP
543 bool "kernel crash dumps (EXPERIMENTAL)" 543 bool "kernel crash dumps"
544 depends on EXPERIMENTAL && IA64_MCA_RECOVERY && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU) 544 depends on IA64_MCA_RECOVERY && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
545 help 545 help
546 Generate crash dump after being started by kexec. 546 Generate crash dump after being started by kexec.
547 547
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index e67ee3f27698..905d25b13d5a 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -100,3 +100,9 @@ define archhelp
100 echo ' boot - Build vmlinux and bootloader for Ski simulator' 100 echo ' boot - Build vmlinux and bootloader for Ski simulator'
101 echo '* unwcheck - Check vmlinux for invalid unwind info' 101 echo '* unwcheck - Check vmlinux for invalid unwind info'
102endef 102endef
103
104archprepare: make_nr_irqs_h FORCE
105PHONY += make_nr_irqs_h FORCE
106
107make_nr_irqs_h: FORCE
108 $(Q)$(MAKE) $(build)=arch/ia64/kernel include/asm-ia64/nr-irqs.h
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile
index 13fd10e8699e..87fea11aecb7 100644
--- a/arch/ia64/kernel/Makefile
+++ b/arch/ia64/kernel/Makefile
@@ -36,6 +36,8 @@ obj-$(CONFIG_PCI_MSI) += msi_ia64.o
36mca_recovery-y += mca_drv.o mca_drv_asm.o 36mca_recovery-y += mca_drv.o mca_drv_asm.o
37obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o 37obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o
38 38
39obj-$(CONFIG_PARAVIRT) += paravirt.o paravirtentry.o
40
39obj-$(CONFIG_IA64_ESI) += esi.o 41obj-$(CONFIG_IA64_ESI) += esi.o
40ifneq ($(CONFIG_IA64_ESI),) 42ifneq ($(CONFIG_IA64_ESI),)
41obj-y += esi_stub.o # must be in kernel proper 43obj-y += esi_stub.o # must be in kernel proper
@@ -70,3 +72,45 @@ $(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE
70# We must build gate.so before we can assemble it. 72# We must build gate.so before we can assemble it.
71# Note: kbuild does not track this dependency due to usage of .incbin 73# Note: kbuild does not track this dependency due to usage of .incbin
72$(obj)/gate-data.o: $(obj)/gate.so 74$(obj)/gate-data.o: $(obj)/gate.so
75
76# Calculate NR_IRQ = max(IA64_NATIVE_NR_IRQS, XEN_NR_IRQS, ...) based on config
77define sed-y
78 "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"
79endef
80quiet_cmd_nr_irqs = GEN $@
81define cmd_nr_irqs
82 (set -e; \
83 echo "#ifndef __ASM_NR_IRQS_H__"; \
84 echo "#define __ASM_NR_IRQS_H__"; \
85 echo "/*"; \
86 echo " * DO NOT MODIFY."; \
87 echo " *"; \
88 echo " * This file was generated by Kbuild"; \
89 echo " *"; \
90 echo " */"; \
91 echo ""; \
92 sed -ne $(sed-y) $<; \
93 echo ""; \
94 echo "#endif" ) > $@
95endef
96
97# We use internal kbuild rules to avoid the "is up to date" message from make
98arch/$(SRCARCH)/kernel/nr-irqs.s: $(srctree)/arch/$(SRCARCH)/kernel/nr-irqs.c \
99 $(wildcard $(srctree)/include/asm-ia64/*/irq.h)
100 $(Q)mkdir -p $(dir $@)
101 $(call if_changed_dep,cc_s_c)
102
103include/asm-ia64/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s
104 $(Q)mkdir -p $(dir $@)
105 $(call cmd,nr_irqs)
106
107clean-files += $(objtree)/include/asm-ia64/nr-irqs.h
108
109#
110# native ivt.S and entry.S
111#
112ASM_PARAVIRT_OBJS = ivt.o entry.o
113define paravirtualized_native
114AFLAGS_$(1) += -D__IA64_ASM_PARAVIRTUALIZED_NATIVE
115endef
116$(foreach obj,$(ASM_PARAVIRT_OBJS),$(eval $(call paravirtualized_native,$(obj))))
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 43687cc60dfb..5d1eb7ee2bf6 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -774,7 +774,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
774 */ 774 */
775#ifdef CONFIG_ACPI_HOTPLUG_CPU 775#ifdef CONFIG_ACPI_HOTPLUG_CPU
776static 776static
777int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid) 777int acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
778{ 778{
779#ifdef CONFIG_ACPI_NUMA 779#ifdef CONFIG_ACPI_NUMA
780 int pxm_id; 780 int pxm_id;
@@ -854,8 +854,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)
854 union acpi_object *obj; 854 union acpi_object *obj;
855 struct acpi_madt_local_sapic *lsapic; 855 struct acpi_madt_local_sapic *lsapic;
856 cpumask_t tmp_map; 856 cpumask_t tmp_map;
857 long physid; 857 int cpu, physid;
858 int cpu;
859 858
860 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer))) 859 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
861 return -EINVAL; 860 return -EINVAL;
diff --git a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
index b8498ea62068..7b435451b3dc 100644
--- a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
+++ b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
@@ -51,7 +51,7 @@ processor_set_pstate (
51 retval = ia64_pal_set_pstate((u64)value); 51 retval = ia64_pal_set_pstate((u64)value);
52 52
53 if (retval) { 53 if (retval) {
54 dprintk("Failed to set freq to 0x%x, with error 0x%x\n", 54 dprintk("Failed to set freq to 0x%x, with error 0x%lx\n",
55 value, retval); 55 value, retval);
56 return -ENODEV; 56 return -ENODEV;
57 } 57 }
@@ -74,7 +74,7 @@ processor_get_pstate (
74 74
75 if (retval) 75 if (retval)
76 dprintk("Failed to get current freq with " 76 dprintk("Failed to get current freq with "
77 "error 0x%x, idx 0x%x\n", retval, *value); 77 "error 0x%lx, idx 0x%x\n", retval, *value);
78 78
79 return (int)retval; 79 return (int)retval;
80} 80}
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
index ca2bb95726de..56ab156c48ae 100644
--- a/arch/ia64/kernel/entry.S
+++ b/arch/ia64/kernel/entry.S
@@ -23,6 +23,11 @@
23 * 11/07/2000 23 * 11/07/2000
24 */ 24 */
25/* 25/*
26 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
27 * VA Linux Systems Japan K.K.
28 * pv_ops.
29 */
30/*
26 * Global (preserved) predicate usage on syscall entry/exit path: 31 * Global (preserved) predicate usage on syscall entry/exit path:
27 * 32 *
28 * pKStk: See entry.h. 33 * pKStk: See entry.h.
@@ -45,6 +50,7 @@
45 50
46#include "minstate.h" 51#include "minstate.h"
47 52
53#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
48 /* 54 /*
49 * execve() is special because in case of success, we need to 55 * execve() is special because in case of success, we need to
50 * setup a null register window frame. 56 * setup a null register window frame.
@@ -173,6 +179,7 @@ GLOBAL_ENTRY(sys_clone)
173 mov rp=loc0 179 mov rp=loc0
174 br.ret.sptk.many rp 180 br.ret.sptk.many rp
175END(sys_clone) 181END(sys_clone)
182#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
176 183
177/* 184/*
178 * prev_task <- ia64_switch_to(struct task_struct *next) 185 * prev_task <- ia64_switch_to(struct task_struct *next)
@@ -180,7 +187,7 @@ END(sys_clone)
180 * called. The code starting at .map relies on this. The rest of the code 187 * called. The code starting at .map relies on this. The rest of the code
181 * doesn't care about the interrupt masking status. 188 * doesn't care about the interrupt masking status.
182 */ 189 */
183GLOBAL_ENTRY(ia64_switch_to) 190GLOBAL_ENTRY(__paravirt_switch_to)
184 .prologue 191 .prologue
185 alloc r16=ar.pfs,1,0,0,0 192 alloc r16=ar.pfs,1,0,0,0
186 DO_SAVE_SWITCH_STACK 193 DO_SAVE_SWITCH_STACK
@@ -204,7 +211,7 @@ GLOBAL_ENTRY(ia64_switch_to)
204 ;; 211 ;;
205.done: 212.done:
206 ld8 sp=[r21] // load kernel stack pointer of new task 213 ld8 sp=[r21] // load kernel stack pointer of new task
207 mov IA64_KR(CURRENT)=in0 // update "current" application register 214 MOV_TO_KR(CURRENT, in0, r8, r9) // update "current" application register
208 mov r8=r13 // return pointer to previously running task 215 mov r8=r13 // return pointer to previously running task
209 mov r13=in0 // set "current" pointer 216 mov r13=in0 // set "current" pointer
210 ;; 217 ;;
@@ -216,26 +223,25 @@ GLOBAL_ENTRY(ia64_switch_to)
216 br.ret.sptk.many rp // boogie on out in new context 223 br.ret.sptk.many rp // boogie on out in new context
217 224
218.map: 225.map:
219 rsm psr.ic // interrupts (psr.i) are already disabled here 226 RSM_PSR_IC(r25) // interrupts (psr.i) are already disabled here
220 movl r25=PAGE_KERNEL 227 movl r25=PAGE_KERNEL
221 ;; 228 ;;
222 srlz.d 229 srlz.d
223 or r23=r25,r20 // construct PA | page properties 230 or r23=r25,r20 // construct PA | page properties
224 mov r25=IA64_GRANULE_SHIFT<<2 231 mov r25=IA64_GRANULE_SHIFT<<2
225 ;; 232 ;;
226 mov cr.itir=r25 233 MOV_TO_ITIR(p0, r25, r8)
227 mov cr.ifa=in0 // VA of next task... 234 MOV_TO_IFA(in0, r8) // VA of next task...
228 ;; 235 ;;
229 mov r25=IA64_TR_CURRENT_STACK 236 mov r25=IA64_TR_CURRENT_STACK
230 mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped... 237 MOV_TO_KR(CURRENT_STACK, r26, r8, r9) // remember last page we mapped...
231 ;; 238 ;;
232 itr.d dtr[r25]=r23 // wire in new mapping... 239 itr.d dtr[r25]=r23 // wire in new mapping...
233 ssm psr.ic // reenable the psr.ic bit 240 SSM_PSR_IC_AND_SRLZ_D(r8, r9) // reenable the psr.ic bit
234 ;;
235 srlz.d
236 br.cond.sptk .done 241 br.cond.sptk .done
237END(ia64_switch_to) 242END(__paravirt_switch_to)
238 243
244#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
239/* 245/*
240 * Note that interrupts are enabled during save_switch_stack and load_switch_stack. This 246 * Note that interrupts are enabled during save_switch_stack and load_switch_stack. This
241 * means that we may get an interrupt with "sp" pointing to the new kernel stack while 247 * means that we may get an interrupt with "sp" pointing to the new kernel stack while
@@ -375,7 +381,7 @@ END(save_switch_stack)
375 * - b7 holds address to return to 381 * - b7 holds address to return to
376 * - must not touch r8-r11 382 * - must not touch r8-r11
377 */ 383 */
378ENTRY(load_switch_stack) 384GLOBAL_ENTRY(load_switch_stack)
379 .prologue 385 .prologue
380 .altrp b7 386 .altrp b7
381 387
@@ -571,7 +577,7 @@ GLOBAL_ENTRY(ia64_trace_syscall)
571.ret3: 577.ret3:
572(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk 578(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
573(pUStk) rsm psr.i // disable interrupts 579(pUStk) rsm psr.i // disable interrupts
574 br.cond.sptk .work_pending_syscall_end 580 br.cond.sptk ia64_work_pending_syscall_end
575 581
576strace_error: 582strace_error:
577 ld8 r3=[r2] // load pt_regs.r8 583 ld8 r3=[r2] // load pt_regs.r8
@@ -636,8 +642,17 @@ GLOBAL_ENTRY(ia64_ret_from_syscall)
636 adds r2=PT(R8)+16,sp // r2 = &pt_regs.r8 642 adds r2=PT(R8)+16,sp // r2 = &pt_regs.r8
637 mov r10=r0 // clear error indication in r10 643 mov r10=r0 // clear error indication in r10
638(p7) br.cond.spnt handle_syscall_error // handle potential syscall failure 644(p7) br.cond.spnt handle_syscall_error // handle potential syscall failure
645#ifdef CONFIG_PARAVIRT
646 ;;
647 br.cond.sptk.few ia64_leave_syscall
648 ;;
649#endif /* CONFIG_PARAVIRT */
639END(ia64_ret_from_syscall) 650END(ia64_ret_from_syscall)
651#ifndef CONFIG_PARAVIRT
640 // fall through 652 // fall through
653#endif
654#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
655
641/* 656/*
642 * ia64_leave_syscall(): Same as ia64_leave_kernel, except that it doesn't 657 * ia64_leave_syscall(): Same as ia64_leave_kernel, except that it doesn't
643 * need to switch to bank 0 and doesn't restore the scratch registers. 658 * need to switch to bank 0 and doesn't restore the scratch registers.
@@ -682,7 +697,7 @@ END(ia64_ret_from_syscall)
682 * ar.csd: cleared 697 * ar.csd: cleared
683 * ar.ssd: cleared 698 * ar.ssd: cleared
684 */ 699 */
685ENTRY(ia64_leave_syscall) 700GLOBAL_ENTRY(__paravirt_leave_syscall)
686 PT_REGS_UNWIND_INFO(0) 701 PT_REGS_UNWIND_INFO(0)
687 /* 702 /*
688 * work.need_resched etc. mustn't get changed by this CPU before it returns to 703 * work.need_resched etc. mustn't get changed by this CPU before it returns to
@@ -692,11 +707,11 @@ ENTRY(ia64_leave_syscall)
692 * extra work. We always check for extra work when returning to user-level. 707 * extra work. We always check for extra work when returning to user-level.
693 * With CONFIG_PREEMPT, we also check for extra work when the preempt_count 708 * With CONFIG_PREEMPT, we also check for extra work when the preempt_count
694 * is 0. After extra work processing has been completed, execution 709 * is 0. After extra work processing has been completed, execution
695 * resumes at .work_processed_syscall with p6 set to 1 if the extra-work-check 710 * resumes at ia64_work_processed_syscall with p6 set to 1 if the extra-work-check
696 * needs to be redone. 711 * needs to be redone.
697 */ 712 */
698#ifdef CONFIG_PREEMPT 713#ifdef CONFIG_PREEMPT
699 rsm psr.i // disable interrupts 714 RSM_PSR_I(p0, r2, r18) // disable interrupts
700 cmp.eq pLvSys,p0=r0,r0 // pLvSys=1: leave from syscall 715 cmp.eq pLvSys,p0=r0,r0 // pLvSys=1: leave from syscall
701(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13 716(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
702 ;; 717 ;;
@@ -706,11 +721,12 @@ ENTRY(ia64_leave_syscall)
706 ;; 721 ;;
707 cmp.eq p6,p0=r21,r0 // p6 <- pUStk || (preempt_count == 0) 722 cmp.eq p6,p0=r21,r0 // p6 <- pUStk || (preempt_count == 0)
708#else /* !CONFIG_PREEMPT */ 723#else /* !CONFIG_PREEMPT */
709(pUStk) rsm psr.i 724 RSM_PSR_I(pUStk, r2, r18)
710 cmp.eq pLvSys,p0=r0,r0 // pLvSys=1: leave from syscall 725 cmp.eq pLvSys,p0=r0,r0 // pLvSys=1: leave from syscall
711(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk 726(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
712#endif 727#endif
713.work_processed_syscall: 728.global __paravirt_work_processed_syscall;
729__paravirt_work_processed_syscall:
714#ifdef CONFIG_VIRT_CPU_ACCOUNTING 730#ifdef CONFIG_VIRT_CPU_ACCOUNTING
715 adds r2=PT(LOADRS)+16,r12 731 adds r2=PT(LOADRS)+16,r12
716(pUStk) mov.m r22=ar.itc // fetch time at leave 732(pUStk) mov.m r22=ar.itc // fetch time at leave
@@ -744,7 +760,7 @@ ENTRY(ia64_leave_syscall)
744(pNonSys) break 0 // bug check: we shouldn't be here if pNonSys is TRUE! 760(pNonSys) break 0 // bug check: we shouldn't be here if pNonSys is TRUE!
745 ;; 761 ;;
746 invala // M0|1 invalidate ALAT 762 invala // M0|1 invalidate ALAT
747 rsm psr.i | psr.ic // M2 turn off interrupts and interruption collection 763 RSM_PSR_I_IC(r28, r29, r30) // M2 turn off interrupts and interruption collection
748 cmp.eq p9,p0=r0,r0 // A set p9 to indicate that we should restore cr.ifs 764 cmp.eq p9,p0=r0,r0 // A set p9 to indicate that we should restore cr.ifs
749 765
750 ld8 r29=[r2],16 // M0|1 load cr.ipsr 766 ld8 r29=[r2],16 // M0|1 load cr.ipsr
@@ -765,7 +781,7 @@ ENTRY(ia64_leave_syscall)
765 ;; 781 ;;
766#endif 782#endif
767 ld8 r26=[r2],PT(B0)-PT(AR_PFS) // M0|1 load ar.pfs 783 ld8 r26=[r2],PT(B0)-PT(AR_PFS) // M0|1 load ar.pfs
768(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled 784 MOV_FROM_PSR(pKStk, r22, r21) // M2 read PSR now that interrupts are disabled
769 nop 0 785 nop 0
770 ;; 786 ;;
771 ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0 787 ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0
@@ -798,7 +814,7 @@ ENTRY(ia64_leave_syscall)
798 814
799 srlz.d // M0 ensure interruption collection is off (for cover) 815 srlz.d // M0 ensure interruption collection is off (for cover)
800 shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition 816 shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition
801 cover // B add current frame into dirty partition & set cr.ifs 817 COVER // B add current frame into dirty partition & set cr.ifs
802 ;; 818 ;;
803#ifdef CONFIG_VIRT_CPU_ACCOUNTING 819#ifdef CONFIG_VIRT_CPU_ACCOUNTING
804 mov r19=ar.bsp // M2 get new backing store pointer 820 mov r19=ar.bsp // M2 get new backing store pointer
@@ -823,8 +839,9 @@ ENTRY(ia64_leave_syscall)
823 mov.m ar.ssd=r0 // M2 clear ar.ssd 839 mov.m ar.ssd=r0 // M2 clear ar.ssd
824 mov f11=f0 // F clear f11 840 mov f11=f0 // F clear f11
825 br.cond.sptk.many rbs_switch // B 841 br.cond.sptk.many rbs_switch // B
826END(ia64_leave_syscall) 842END(__paravirt_leave_syscall)
827 843
844#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
828#ifdef CONFIG_IA32_SUPPORT 845#ifdef CONFIG_IA32_SUPPORT
829GLOBAL_ENTRY(ia64_ret_from_ia32_execve) 846GLOBAL_ENTRY(ia64_ret_from_ia32_execve)
830 PT_REGS_UNWIND_INFO(0) 847 PT_REGS_UNWIND_INFO(0)
@@ -835,10 +852,20 @@ GLOBAL_ENTRY(ia64_ret_from_ia32_execve)
835 st8.spill [r2]=r8 // store return value in slot for r8 and set unat bit 852 st8.spill [r2]=r8 // store return value in slot for r8 and set unat bit
836 .mem.offset 8,0 853 .mem.offset 8,0
837 st8.spill [r3]=r0 // clear error indication in slot for r10 and set unat bit 854 st8.spill [r3]=r0 // clear error indication in slot for r10 and set unat bit
855#ifdef CONFIG_PARAVIRT
856 ;;
857 // don't fall through, ia64_leave_kernel may be #define'd
858 br.cond.sptk.few ia64_leave_kernel
859 ;;
860#endif /* CONFIG_PARAVIRT */
838END(ia64_ret_from_ia32_execve) 861END(ia64_ret_from_ia32_execve)
862#ifndef CONFIG_PARAVIRT
839 // fall through 863 // fall through
864#endif
840#endif /* CONFIG_IA32_SUPPORT */ 865#endif /* CONFIG_IA32_SUPPORT */
841GLOBAL_ENTRY(ia64_leave_kernel) 866#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
867
868GLOBAL_ENTRY(__paravirt_leave_kernel)
842 PT_REGS_UNWIND_INFO(0) 869 PT_REGS_UNWIND_INFO(0)
843 /* 870 /*
844 * work.need_resched etc. mustn't get changed by this CPU before it returns to 871 * work.need_resched etc. mustn't get changed by this CPU before it returns to
@@ -852,7 +879,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
852 * needs to be redone. 879 * needs to be redone.
853 */ 880 */
854#ifdef CONFIG_PREEMPT 881#ifdef CONFIG_PREEMPT
855 rsm psr.i // disable interrupts 882 RSM_PSR_I(p0, r17, r31) // disable interrupts
856 cmp.eq p0,pLvSys=r0,r0 // pLvSys=0: leave from kernel 883 cmp.eq p0,pLvSys=r0,r0 // pLvSys=0: leave from kernel
857(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13 884(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
858 ;; 885 ;;
@@ -862,7 +889,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
862 ;; 889 ;;
863 cmp.eq p6,p0=r21,r0 // p6 <- pUStk || (preempt_count == 0) 890 cmp.eq p6,p0=r21,r0 // p6 <- pUStk || (preempt_count == 0)
864#else 891#else
865(pUStk) rsm psr.i 892 RSM_PSR_I(pUStk, r17, r31)
866 cmp.eq p0,pLvSys=r0,r0 // pLvSys=0: leave from kernel 893 cmp.eq p0,pLvSys=r0,r0 // pLvSys=0: leave from kernel
867(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk 894(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
868#endif 895#endif
@@ -910,7 +937,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
910 mov ar.csd=r30 937 mov ar.csd=r30
911 mov ar.ssd=r31 938 mov ar.ssd=r31
912 ;; 939 ;;
913 rsm psr.i | psr.ic // initiate turning off of interrupt and interruption collection 940 RSM_PSR_I_IC(r23, r22, r25) // initiate turning off of interrupt and interruption collection
914 invala // invalidate ALAT 941 invala // invalidate ALAT
915 ;; 942 ;;
916 ld8.fill r22=[r2],24 943 ld8.fill r22=[r2],24
@@ -942,7 +969,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
942 mov ar.ccv=r15 969 mov ar.ccv=r15
943 ;; 970 ;;
944 ldf.fill f11=[r2] 971 ldf.fill f11=[r2]
945 bsw.0 // switch back to bank 0 (no stop bit required beforehand...) 972 BSW_0(r2, r3, r15) // switch back to bank 0 (no stop bit required beforehand...)
946 ;; 973 ;;
947(pUStk) mov r18=IA64_KR(CURRENT)// M2 (12 cycle read latency) 974(pUStk) mov r18=IA64_KR(CURRENT)// M2 (12 cycle read latency)
948 adds r16=PT(CR_IPSR)+16,r12 975 adds r16=PT(CR_IPSR)+16,r12
@@ -950,12 +977,12 @@ GLOBAL_ENTRY(ia64_leave_kernel)
950 977
951#ifdef CONFIG_VIRT_CPU_ACCOUNTING 978#ifdef CONFIG_VIRT_CPU_ACCOUNTING
952 .pred.rel.mutex pUStk,pKStk 979 .pred.rel.mutex pUStk,pKStk
953(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled 980 MOV_FROM_PSR(pKStk, r22, r29) // M2 read PSR now that interrupts are disabled
954(pUStk) mov.m r22=ar.itc // M fetch time at leave 981(pUStk) mov.m r22=ar.itc // M fetch time at leave
955 nop.i 0 982 nop.i 0
956 ;; 983 ;;
957#else 984#else
958(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled 985 MOV_FROM_PSR(pKStk, r22, r29) // M2 read PSR now that interrupts are disabled
959 nop.i 0 986 nop.i 0
960 nop.i 0 987 nop.i 0
961 ;; 988 ;;
@@ -1027,7 +1054,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
1027 * NOTE: alloc, loadrs, and cover can't be predicated. 1054 * NOTE: alloc, loadrs, and cover can't be predicated.
1028 */ 1055 */
1029(pNonSys) br.cond.dpnt dont_preserve_current_frame 1056(pNonSys) br.cond.dpnt dont_preserve_current_frame
1030 cover // add current frame into dirty partition and set cr.ifs 1057 COVER // add current frame into dirty partition and set cr.ifs
1031 ;; 1058 ;;
1032 mov r19=ar.bsp // get new backing store pointer 1059 mov r19=ar.bsp // get new backing store pointer
1033rbs_switch: 1060rbs_switch:
@@ -1130,16 +1157,16 @@ skip_rbs_switch:
1130(pKStk) dep r29=r22,r29,21,1 // I0 update ipsr.pp with psr.pp 1157(pKStk) dep r29=r22,r29,21,1 // I0 update ipsr.pp with psr.pp
1131(pLvSys)mov r16=r0 // A clear r16 for leave_syscall, no-op otherwise 1158(pLvSys)mov r16=r0 // A clear r16 for leave_syscall, no-op otherwise
1132 ;; 1159 ;;
1133 mov cr.ipsr=r29 // M2 1160 MOV_TO_IPSR(p0, r29, r25) // M2
1134 mov ar.pfs=r26 // I0 1161 mov ar.pfs=r26 // I0
1135(pLvSys)mov r17=r0 // A clear r17 for leave_syscall, no-op otherwise 1162(pLvSys)mov r17=r0 // A clear r17 for leave_syscall, no-op otherwise
1136 1163
1137(p9) mov cr.ifs=r30 // M2 1164 MOV_TO_IFS(p9, r30, r25)// M2
1138 mov b0=r21 // I0 1165 mov b0=r21 // I0
1139(pLvSys)mov r18=r0 // A clear r18 for leave_syscall, no-op otherwise 1166(pLvSys)mov r18=r0 // A clear r18 for leave_syscall, no-op otherwise
1140 1167
1141 mov ar.fpsr=r20 // M2 1168 mov ar.fpsr=r20 // M2
1142 mov cr.iip=r28 // M2 1169 MOV_TO_IIP(r28, r25) // M2
1143 nop 0 1170 nop 0
1144 ;; 1171 ;;
1145(pUStk) mov ar.rnat=r24 // M2 must happen with RSE in lazy mode 1172(pUStk) mov ar.rnat=r24 // M2 must happen with RSE in lazy mode
@@ -1148,7 +1175,7 @@ skip_rbs_switch:
1148 1175
1149 mov ar.rsc=r27 // M2 1176 mov ar.rsc=r27 // M2
1150 mov pr=r31,-1 // I0 1177 mov pr=r31,-1 // I0
1151 rfi // B 1178 RFI // B
1152 1179
1153 /* 1180 /*
1154 * On entry: 1181 * On entry:
@@ -1174,35 +1201,36 @@ skip_rbs_switch:
1174 ;; 1201 ;;
1175(pKStk) st4 [r20]=r21 1202(pKStk) st4 [r20]=r21
1176#endif 1203#endif
1177 ssm psr.i // enable interrupts 1204 SSM_PSR_I(p0, p6, r2) // enable interrupts
1178 br.call.spnt.many rp=schedule 1205 br.call.spnt.many rp=schedule
1179.ret9: cmp.eq p6,p0=r0,r0 // p6 <- 1 (re-check) 1206.ret9: cmp.eq p6,p0=r0,r0 // p6 <- 1 (re-check)
1180 rsm psr.i // disable interrupts 1207 RSM_PSR_I(p0, r2, r20) // disable interrupts
1181 ;; 1208 ;;
1182#ifdef CONFIG_PREEMPT 1209#ifdef CONFIG_PREEMPT
1183(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13 1210(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
1184 ;; 1211 ;;
1185(pKStk) st4 [r20]=r0 // preempt_count() <- 0 1212(pKStk) st4 [r20]=r0 // preempt_count() <- 0
1186#endif 1213#endif
1187(pLvSys)br.cond.sptk.few .work_pending_syscall_end 1214(pLvSys)br.cond.sptk.few __paravirt_pending_syscall_end
1188 br.cond.sptk.many .work_processed_kernel 1215 br.cond.sptk.many .work_processed_kernel
1189 1216
1190.notify: 1217.notify:
1191(pUStk) br.call.spnt.many rp=notify_resume_user 1218(pUStk) br.call.spnt.many rp=notify_resume_user
1192.ret10: cmp.ne p6,p0=r0,r0 // p6 <- 0 (don't re-check) 1219.ret10: cmp.ne p6,p0=r0,r0 // p6 <- 0 (don't re-check)
1193(pLvSys)br.cond.sptk.few .work_pending_syscall_end 1220(pLvSys)br.cond.sptk.few __paravirt_pending_syscall_end
1194 br.cond.sptk.many .work_processed_kernel 1221 br.cond.sptk.many .work_processed_kernel
1195 1222
1196.work_pending_syscall_end: 1223.global __paravirt_pending_syscall_end;
1224__paravirt_pending_syscall_end:
1197 adds r2=PT(R8)+16,r12 1225 adds r2=PT(R8)+16,r12
1198 adds r3=PT(R10)+16,r12 1226 adds r3=PT(R10)+16,r12
1199 ;; 1227 ;;
1200 ld8 r8=[r2] 1228 ld8 r8=[r2]
1201 ld8 r10=[r3] 1229 ld8 r10=[r3]
1202 br.cond.sptk.many .work_processed_syscall 1230 br.cond.sptk.many __paravirt_work_processed_syscall_target
1203 1231END(__paravirt_leave_kernel)
1204END(ia64_leave_kernel)
1205 1232
1233#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
1206ENTRY(handle_syscall_error) 1234ENTRY(handle_syscall_error)
1207 /* 1235 /*
1208 * Some system calls (e.g., ptrace, mmap) can return arbitrary values which could 1236 * Some system calls (e.g., ptrace, mmap) can return arbitrary values which could
@@ -1244,7 +1272,7 @@ END(ia64_invoke_schedule_tail)
1244 * We declare 8 input registers so the system call args get preserved, 1272 * We declare 8 input registers so the system call args get preserved,
1245 * in case we need to restart a system call. 1273 * in case we need to restart a system call.
1246 */ 1274 */
1247ENTRY(notify_resume_user) 1275GLOBAL_ENTRY(notify_resume_user)
1248 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8) 1276 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
1249 alloc loc1=ar.pfs,8,2,3,0 // preserve all eight input regs in case of syscall restart! 1277 alloc loc1=ar.pfs,8,2,3,0 // preserve all eight input regs in case of syscall restart!
1250 mov r9=ar.unat 1278 mov r9=ar.unat
@@ -1306,7 +1334,7 @@ ENTRY(sys_rt_sigreturn)
1306 adds sp=16,sp 1334 adds sp=16,sp
1307 ;; 1335 ;;
1308 ld8 r9=[sp] // load new ar.unat 1336 ld8 r9=[sp] // load new ar.unat
1309 mov.sptk b7=r8,ia64_leave_kernel 1337 mov.sptk b7=r8,ia64_native_leave_kernel
1310 ;; 1338 ;;
1311 mov ar.unat=r9 1339 mov ar.unat=r9
1312 br.many b7 1340 br.many b7
@@ -1665,3 +1693,4 @@ sys_call_table:
1665 data8 sys_timerfd_gettime 1693 data8 sys_timerfd_gettime
1666 1694
1667 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 1695 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
1696#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
diff --git a/arch/ia64/kernel/err_inject.c b/arch/ia64/kernel/err_inject.c
index b642648cc2ac..c539c689493b 100644
--- a/arch/ia64/kernel/err_inject.c
+++ b/arch/ia64/kernel/err_inject.c
@@ -55,7 +55,8 @@ static u64 resources[NR_CPUS];
55 55
56#define show(name) \ 56#define show(name) \
57static ssize_t \ 57static ssize_t \
58show_##name(struct sys_device *dev, char *buf) \ 58show_##name(struct sys_device *dev, struct sysdev_attribute *attr, \
59 char *buf) \
59{ \ 60{ \
60 u32 cpu=dev->id; \ 61 u32 cpu=dev->id; \
61 return sprintf(buf, "%lx\n", name[cpu]); \ 62 return sprintf(buf, "%lx\n", name[cpu]); \
@@ -63,7 +64,8 @@ show_##name(struct sys_device *dev, char *buf) \
63 64
64#define store(name) \ 65#define store(name) \
65static ssize_t \ 66static ssize_t \
66store_##name(struct sys_device *dev, const char *buf, size_t size) \ 67store_##name(struct sys_device *dev, struct sysdev_attribute *attr, \
68 const char *buf, size_t size) \
67{ \ 69{ \
68 unsigned int cpu=dev->id; \ 70 unsigned int cpu=dev->id; \
69 name[cpu] = simple_strtoull(buf, NULL, 16); \ 71 name[cpu] = simple_strtoull(buf, NULL, 16); \
@@ -76,7 +78,8 @@ show(call_start)
76 * processor. The cpu number in driver is only used for storing data. 78 * processor. The cpu number in driver is only used for storing data.
77 */ 79 */
78static ssize_t 80static ssize_t
79store_call_start(struct sys_device *dev, const char *buf, size_t size) 81store_call_start(struct sys_device *dev, struct sysdev_attribute *attr,
82 const char *buf, size_t size)
80{ 83{
81 unsigned int cpu=dev->id; 84 unsigned int cpu=dev->id;
82 unsigned long call_start = simple_strtoull(buf, NULL, 16); 85 unsigned long call_start = simple_strtoull(buf, NULL, 16);
@@ -124,14 +127,16 @@ show(err_type_info)
124store(err_type_info) 127store(err_type_info)
125 128
126static ssize_t 129static ssize_t
127show_virtual_to_phys(struct sys_device *dev, char *buf) 130show_virtual_to_phys(struct sys_device *dev, struct sysdev_attribute *attr,
131 char *buf)
128{ 132{
129 unsigned int cpu=dev->id; 133 unsigned int cpu=dev->id;
130 return sprintf(buf, "%lx\n", phys_addr[cpu]); 134 return sprintf(buf, "%lx\n", phys_addr[cpu]);
131} 135}
132 136
133static ssize_t 137static ssize_t
134store_virtual_to_phys(struct sys_device *dev, const char *buf, size_t size) 138store_virtual_to_phys(struct sys_device *dev, struct sysdev_attribute *attr,
139 const char *buf, size_t size)
135{ 140{
136 unsigned int cpu=dev->id; 141 unsigned int cpu=dev->id;
137 u64 virt_addr=simple_strtoull(buf, NULL, 16); 142 u64 virt_addr=simple_strtoull(buf, NULL, 16);
@@ -154,7 +159,8 @@ show(err_struct_info)
154store(err_struct_info) 159store(err_struct_info)
155 160
156static ssize_t 161static ssize_t
157show_err_data_buffer(struct sys_device *dev, char *buf) 162show_err_data_buffer(struct sys_device *dev,
163 struct sysdev_attribute *attr, char *buf)
158{ 164{
159 unsigned int cpu=dev->id; 165 unsigned int cpu=dev->id;
160 166
@@ -165,7 +171,9 @@ show_err_data_buffer(struct sys_device *dev, char *buf)
165} 171}
166 172
167static ssize_t 173static ssize_t
168store_err_data_buffer(struct sys_device *dev, const char *buf, size_t size) 174store_err_data_buffer(struct sys_device *dev,
175 struct sysdev_attribute *attr,
176 const char *buf, size_t size)
169{ 177{
170 unsigned int cpu=dev->id; 178 unsigned int cpu=dev->id;
171 int ret; 179 int ret;
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
index ddeab4e36fd5..db540e58c783 100644
--- a/arch/ia64/kernel/head.S
+++ b/arch/ia64/kernel/head.S
@@ -26,11 +26,14 @@
26#include <asm/mmu_context.h> 26#include <asm/mmu_context.h>
27#include <asm/asm-offsets.h> 27#include <asm/asm-offsets.h>
28#include <asm/pal.h> 28#include <asm/pal.h>
29#include <asm/paravirt.h>
29#include <asm/pgtable.h> 30#include <asm/pgtable.h>
30#include <asm/processor.h> 31#include <asm/processor.h>
31#include <asm/ptrace.h> 32#include <asm/ptrace.h>
32#include <asm/system.h> 33#include <asm/system.h>
33#include <asm/mca_asm.h> 34#include <asm/mca_asm.h>
35#include <linux/init.h>
36#include <linux/linkage.h>
34 37
35#ifdef CONFIG_HOTPLUG_CPU 38#ifdef CONFIG_HOTPLUG_CPU
36#define SAL_PSR_BITS_TO_SET \ 39#define SAL_PSR_BITS_TO_SET \
@@ -367,6 +370,44 @@ start_ap:
367 ;; 370 ;;
368(isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader 371(isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader
369 372
373#ifdef CONFIG_PARAVIRT
374
375 movl r14=hypervisor_setup_hooks
376 movl r15=hypervisor_type
377 mov r16=num_hypervisor_hooks
378 ;;
379 ld8 r2=[r15]
380 ;;
381 cmp.ltu p7,p0=r2,r16 // array size check
382 shladd r8=r2,3,r14
383 ;;
384(p7) ld8 r9=[r8]
385 ;;
386(p7) mov b1=r9
387(p7) cmp.ne.unc p7,p0=r9,r0 // no actual branch to NULL
388 ;;
389(p7) br.call.sptk.many rp=b1
390
391 __INITDATA
392
393default_setup_hook = 0 // Currently nothing needs to be done.
394
395 .weak xen_setup_hook
396
397 .global hypervisor_type
398hypervisor_type:
399 data8 PARAVIRT_HYPERVISOR_TYPE_DEFAULT
400
401 // must have the same order with PARAVIRT_HYPERVISOR_TYPE_xxx
402
403hypervisor_setup_hooks:
404 data8 default_setup_hook
405 data8 xen_setup_hook
406num_hypervisor_hooks = (. - hypervisor_setup_hooks) / 8
407 .previous
408
409#endif
410
370#ifdef CONFIG_SMP 411#ifdef CONFIG_SMP
371(isAP) br.call.sptk.many rp=start_secondary 412(isAP) br.call.sptk.many rp=start_secondary
372.ret0: 413.ret0:
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
index 39752cdef6ff..3bc2fa64f87f 100644
--- a/arch/ia64/kernel/iosapic.c
+++ b/arch/ia64/kernel/iosapic.c
@@ -585,6 +585,15 @@ static inline int irq_is_shared (int irq)
585 return (iosapic_intr_info[irq].count > 1); 585 return (iosapic_intr_info[irq].count > 1);
586} 586}
587 587
588struct irq_chip*
589ia64_native_iosapic_get_irq_chip(unsigned long trigger)
590{
591 if (trigger == IOSAPIC_EDGE)
592 return &irq_type_iosapic_edge;
593 else
594 return &irq_type_iosapic_level;
595}
596
588static int 597static int
589register_intr (unsigned int gsi, int irq, unsigned char delivery, 598register_intr (unsigned int gsi, int irq, unsigned char delivery,
590 unsigned long polarity, unsigned long trigger) 599 unsigned long polarity, unsigned long trigger)
@@ -635,13 +644,10 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
635 iosapic_intr_info[irq].dmode = delivery; 644 iosapic_intr_info[irq].dmode = delivery;
636 iosapic_intr_info[irq].trigger = trigger; 645 iosapic_intr_info[irq].trigger = trigger;
637 646
638 if (trigger == IOSAPIC_EDGE) 647 irq_type = iosapic_get_irq_chip(trigger);
639 irq_type = &irq_type_iosapic_edge;
640 else
641 irq_type = &irq_type_iosapic_level;
642 648
643 idesc = irq_desc + irq; 649 idesc = irq_desc + irq;
644 if (idesc->chip != irq_type) { 650 if (irq_type != NULL && idesc->chip != irq_type) {
645 if (idesc->chip != &no_irq_type) 651 if (idesc->chip != &no_irq_type)
646 printk(KERN_WARNING 652 printk(KERN_WARNING
647 "%s: changing vector %d from %s to %s\n", 653 "%s: changing vector %d from %s to %s\n",
@@ -974,6 +980,22 @@ iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
974} 980}
975 981
976void __init 982void __init
983ia64_native_iosapic_pcat_compat_init(void)
984{
985 if (pcat_compat) {
986 /*
987 * Disable the compatibility mode interrupts (8259 style),
988 * needs IN/OUT support enabled.
989 */
990 printk(KERN_INFO
991 "%s: Disabling PC-AT compatible 8259 interrupts\n",
992 __func__);
993 outb(0xff, 0xA1);
994 outb(0xff, 0x21);
995 }
996}
997
998void __init
977iosapic_system_init (int system_pcat_compat) 999iosapic_system_init (int system_pcat_compat)
978{ 1000{
979 int irq; 1001 int irq;
@@ -987,17 +1009,8 @@ iosapic_system_init (int system_pcat_compat)
987 } 1009 }
988 1010
989 pcat_compat = system_pcat_compat; 1011 pcat_compat = system_pcat_compat;
990 if (pcat_compat) { 1012 if (pcat_compat)
991 /* 1013 iosapic_pcat_compat_init();
992 * Disable the compatibility mode interrupts (8259 style),
993 * needs IN/OUT support enabled.
994 */
995 printk(KERN_INFO
996 "%s: Disabling PC-AT compatible 8259 interrupts\n",
997 __func__);
998 outb(0xff, 0xA1);
999 outb(0xff, 0x21);
1000 }
1001} 1014}
1002 1015
1003static inline int 1016static inline int
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c
index 5538471e8d68..28d3d483db92 100644
--- a/arch/ia64/kernel/irq_ia64.c
+++ b/arch/ia64/kernel/irq_ia64.c
@@ -196,7 +196,7 @@ static void clear_irq_vector(int irq)
196} 196}
197 197
198int 198int
199assign_irq_vector (int irq) 199ia64_native_assign_irq_vector (int irq)
200{ 200{
201 unsigned long flags; 201 unsigned long flags;
202 int vector, cpu; 202 int vector, cpu;
@@ -222,7 +222,7 @@ assign_irq_vector (int irq)
222} 222}
223 223
224void 224void
225free_irq_vector (int vector) 225ia64_native_free_irq_vector (int vector)
226{ 226{
227 if (vector < IA64_FIRST_DEVICE_VECTOR || 227 if (vector < IA64_FIRST_DEVICE_VECTOR ||
228 vector > IA64_LAST_DEVICE_VECTOR) 228 vector > IA64_LAST_DEVICE_VECTOR)
@@ -600,7 +600,6 @@ static irqreturn_t dummy_handler (int irq, void *dev_id)
600{ 600{
601 BUG(); 601 BUG();
602} 602}
603extern irqreturn_t handle_IPI (int irq, void *dev_id);
604 603
605static struct irqaction ipi_irqaction = { 604static struct irqaction ipi_irqaction = {
606 .handler = handle_IPI, 605 .handler = handle_IPI,
@@ -623,7 +622,7 @@ static struct irqaction tlb_irqaction = {
623#endif 622#endif
624 623
625void 624void
626register_percpu_irq (ia64_vector vec, struct irqaction *action) 625ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action)
627{ 626{
628 irq_desc_t *desc; 627 irq_desc_t *desc;
629 unsigned int irq; 628 unsigned int irq;
@@ -638,13 +637,21 @@ register_percpu_irq (ia64_vector vec, struct irqaction *action)
638} 637}
639 638
640void __init 639void __init
641init_IRQ (void) 640ia64_native_register_ipi(void)
642{ 641{
643 register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL);
644#ifdef CONFIG_SMP 642#ifdef CONFIG_SMP
645 register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction); 643 register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction);
646 register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction); 644 register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction);
647 register_percpu_irq(IA64_IPI_LOCAL_TLB_FLUSH, &tlb_irqaction); 645 register_percpu_irq(IA64_IPI_LOCAL_TLB_FLUSH, &tlb_irqaction);
646#endif
647}
648
649void __init
650init_IRQ (void)
651{
652 ia64_register_ipi();
653 register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL);
654#ifdef CONFIG_SMP
648#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_DIG) 655#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_DIG)
649 if (vector_domain_type != VECTOR_DOMAIN_NONE) { 656 if (vector_domain_type != VECTOR_DOMAIN_NONE) {
650 BUG_ON(IA64_FIRST_DEVICE_VECTOR != IA64_IRQ_MOVE_VECTOR); 657 BUG_ON(IA64_FIRST_DEVICE_VECTOR != IA64_IRQ_MOVE_VECTOR);
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S
index 80b44ea052d7..c39627df3cde 100644
--- a/arch/ia64/kernel/ivt.S
+++ b/arch/ia64/kernel/ivt.S
@@ -12,6 +12,14 @@
12 * 12 *
13 * 00/08/23 Asit Mallick <asit.k.mallick@intel.com> TLB handling for SMP 13 * 00/08/23 Asit Mallick <asit.k.mallick@intel.com> TLB handling for SMP
14 * 00/12/20 David Mosberger-Tang <davidm@hpl.hp.com> DTLB/ITLB handler now uses virtual PT. 14 * 00/12/20 David Mosberger-Tang <davidm@hpl.hp.com> DTLB/ITLB handler now uses virtual PT.
15 *
16 * Copyright (C) 2005 Hewlett-Packard Co
17 * Dan Magenheimer <dan.magenheimer@hp.com>
18 * Xen paravirtualization
19 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
20 * VA Linux Systems Japan K.K.
21 * pv_ops.
22 * Yaozu (Eddie) Dong <eddie.dong@intel.com>
15 */ 23 */
16/* 24/*
17 * This file defines the interruption vector table used by the CPU. 25 * This file defines the interruption vector table used by the CPU.
@@ -102,13 +110,13 @@ ENTRY(vhpt_miss)
102 * - the faulting virtual address uses unimplemented address bits 110 * - the faulting virtual address uses unimplemented address bits
103 * - the faulting virtual address has no valid page table mapping 111 * - the faulting virtual address has no valid page table mapping
104 */ 112 */
105 mov r16=cr.ifa // get address that caused the TLB miss 113 MOV_FROM_IFA(r16) // get address that caused the TLB miss
106#ifdef CONFIG_HUGETLB_PAGE 114#ifdef CONFIG_HUGETLB_PAGE
107 movl r18=PAGE_SHIFT 115 movl r18=PAGE_SHIFT
108 mov r25=cr.itir 116 MOV_FROM_ITIR(r25)
109#endif 117#endif
110 ;; 118 ;;
111 rsm psr.dt // use physical addressing for data 119 RSM_PSR_DT // use physical addressing for data
112 mov r31=pr // save the predicate registers 120 mov r31=pr // save the predicate registers
113 mov r19=IA64_KR(PT_BASE) // get page table base address 121 mov r19=IA64_KR(PT_BASE) // get page table base address
114 shl r21=r16,3 // shift bit 60 into sign bit 122 shl r21=r16,3 // shift bit 60 into sign bit
@@ -168,21 +176,21 @@ ENTRY(vhpt_miss)
168 dep r21=r19,r20,3,(PAGE_SHIFT-3) // r21=pte_offset(pmd,addr) 176 dep r21=r19,r20,3,(PAGE_SHIFT-3) // r21=pte_offset(pmd,addr)
169 ;; 177 ;;
170(p7) ld8 r18=[r21] // read *pte 178(p7) ld8 r18=[r21] // read *pte
171 mov r19=cr.isr // cr.isr bit 32 tells us if this is an insn miss 179 MOV_FROM_ISR(r19) // cr.isr bit 32 tells us if this is an insn miss
172 ;; 180 ;;
173(p7) tbit.z p6,p7=r18,_PAGE_P_BIT // page present bit cleared? 181(p7) tbit.z p6,p7=r18,_PAGE_P_BIT // page present bit cleared?
174 mov r22=cr.iha // get the VHPT address that caused the TLB miss 182 MOV_FROM_IHA(r22) // get the VHPT address that caused the TLB miss
175 ;; // avoid RAW on p7 183 ;; // avoid RAW on p7
176(p7) tbit.nz.unc p10,p11=r19,32 // is it an instruction TLB miss? 184(p7) tbit.nz.unc p10,p11=r19,32 // is it an instruction TLB miss?
177 dep r23=0,r20,0,PAGE_SHIFT // clear low bits to get page address 185 dep r23=0,r20,0,PAGE_SHIFT // clear low bits to get page address
178 ;; 186 ;;
179(p10) itc.i r18 // insert the instruction TLB entry 187 ITC_I_AND_D(p10, p11, r18, r24) // insert the instruction TLB entry and
180(p11) itc.d r18 // insert the data TLB entry 188 // insert the data TLB entry
181(p6) br.cond.spnt.many page_fault // handle bad address/page not present (page fault) 189(p6) br.cond.spnt.many page_fault // handle bad address/page not present (page fault)
182 mov cr.ifa=r22 190 MOV_TO_IFA(r22, r24)
183 191
184#ifdef CONFIG_HUGETLB_PAGE 192#ifdef CONFIG_HUGETLB_PAGE
185(p8) mov cr.itir=r25 // change to default page-size for VHPT 193 MOV_TO_ITIR(p8, r25, r24) // change to default page-size for VHPT
186#endif 194#endif
187 195
188 /* 196 /*
@@ -192,7 +200,7 @@ ENTRY(vhpt_miss)
192 */ 200 */
193 adds r24=__DIRTY_BITS_NO_ED|_PAGE_PL_0|_PAGE_AR_RW,r23 201 adds r24=__DIRTY_BITS_NO_ED|_PAGE_PL_0|_PAGE_AR_RW,r23
194 ;; 202 ;;
195(p7) itc.d r24 203 ITC_D(p7, r24, r25)
196 ;; 204 ;;
197#ifdef CONFIG_SMP 205#ifdef CONFIG_SMP
198 /* 206 /*
@@ -234,7 +242,7 @@ ENTRY(vhpt_miss)
234#endif 242#endif
235 243
236 mov pr=r31,-1 // restore predicate registers 244 mov pr=r31,-1 // restore predicate registers
237 rfi 245 RFI
238END(vhpt_miss) 246END(vhpt_miss)
239 247
240 .org ia64_ivt+0x400 248 .org ia64_ivt+0x400
@@ -248,11 +256,11 @@ ENTRY(itlb_miss)
248 * mode, walk the page table, and then re-execute the PTE read and 256 * mode, walk the page table, and then re-execute the PTE read and
249 * go on normally after that. 257 * go on normally after that.
250 */ 258 */
251 mov r16=cr.ifa // get virtual address 259 MOV_FROM_IFA(r16) // get virtual address
252 mov r29=b0 // save b0 260 mov r29=b0 // save b0
253 mov r31=pr // save predicates 261 mov r31=pr // save predicates
254.itlb_fault: 262.itlb_fault:
255 mov r17=cr.iha // get virtual address of PTE 263 MOV_FROM_IHA(r17) // get virtual address of PTE
256 movl r30=1f // load nested fault continuation point 264 movl r30=1f // load nested fault continuation point
257 ;; 265 ;;
2581: ld8 r18=[r17] // read *pte 2661: ld8 r18=[r17] // read *pte
@@ -261,7 +269,7 @@ ENTRY(itlb_miss)
261 tbit.z p6,p0=r18,_PAGE_P_BIT // page present bit cleared? 269 tbit.z p6,p0=r18,_PAGE_P_BIT // page present bit cleared?
262(p6) br.cond.spnt page_fault 270(p6) br.cond.spnt page_fault
263 ;; 271 ;;
264 itc.i r18 272 ITC_I(p0, r18, r19)
265 ;; 273 ;;
266#ifdef CONFIG_SMP 274#ifdef CONFIG_SMP
267 /* 275 /*
@@ -278,7 +286,7 @@ ENTRY(itlb_miss)
278(p7) ptc.l r16,r20 286(p7) ptc.l r16,r20
279#endif 287#endif
280 mov pr=r31,-1 288 mov pr=r31,-1
281 rfi 289 RFI
282END(itlb_miss) 290END(itlb_miss)
283 291
284 .org ia64_ivt+0x0800 292 .org ia64_ivt+0x0800
@@ -292,11 +300,11 @@ ENTRY(dtlb_miss)
292 * mode, walk the page table, and then re-execute the PTE read and 300 * mode, walk the page table, and then re-execute the PTE read and
293 * go on normally after that. 301 * go on normally after that.
294 */ 302 */
295 mov r16=cr.ifa // get virtual address 303 MOV_FROM_IFA(r16) // get virtual address
296 mov r29=b0 // save b0 304 mov r29=b0 // save b0
297 mov r31=pr // save predicates 305 mov r31=pr // save predicates
298dtlb_fault: 306dtlb_fault:
299 mov r17=cr.iha // get virtual address of PTE 307 MOV_FROM_IHA(r17) // get virtual address of PTE
300 movl r30=1f // load nested fault continuation point 308 movl r30=1f // load nested fault continuation point
301 ;; 309 ;;
3021: ld8 r18=[r17] // read *pte 3101: ld8 r18=[r17] // read *pte
@@ -305,7 +313,7 @@ dtlb_fault:
305 tbit.z p6,p0=r18,_PAGE_P_BIT // page present bit cleared? 313 tbit.z p6,p0=r18,_PAGE_P_BIT // page present bit cleared?
306(p6) br.cond.spnt page_fault 314(p6) br.cond.spnt page_fault
307 ;; 315 ;;
308 itc.d r18 316 ITC_D(p0, r18, r19)
309 ;; 317 ;;
310#ifdef CONFIG_SMP 318#ifdef CONFIG_SMP
311 /* 319 /*
@@ -322,7 +330,7 @@ dtlb_fault:
322(p7) ptc.l r16,r20 330(p7) ptc.l r16,r20
323#endif 331#endif
324 mov pr=r31,-1 332 mov pr=r31,-1
325 rfi 333 RFI
326END(dtlb_miss) 334END(dtlb_miss)
327 335
328 .org ia64_ivt+0x0c00 336 .org ia64_ivt+0x0c00
@@ -330,9 +338,9 @@ END(dtlb_miss)
330// 0x0c00 Entry 3 (size 64 bundles) Alt ITLB (19) 338// 0x0c00 Entry 3 (size 64 bundles) Alt ITLB (19)
331ENTRY(alt_itlb_miss) 339ENTRY(alt_itlb_miss)
332 DBG_FAULT(3) 340 DBG_FAULT(3)
333 mov r16=cr.ifa // get address that caused the TLB miss 341 MOV_FROM_IFA(r16) // get address that caused the TLB miss
334 movl r17=PAGE_KERNEL 342 movl r17=PAGE_KERNEL
335 mov r21=cr.ipsr 343 MOV_FROM_IPSR(p0, r21)
336 movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff) 344 movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff)
337 mov r31=pr 345 mov r31=pr
338 ;; 346 ;;
@@ -341,9 +349,9 @@ ENTRY(alt_itlb_miss)
341 ;; 349 ;;
342 cmp.gt p8,p0=6,r22 // user mode 350 cmp.gt p8,p0=6,r22 // user mode
343 ;; 351 ;;
344(p8) thash r17=r16 352 THASH(p8, r17, r16, r23)
345 ;; 353 ;;
346(p8) mov cr.iha=r17 354 MOV_TO_IHA(p8, r17, r23)
347(p8) mov r29=b0 // save b0 355(p8) mov r29=b0 // save b0
348(p8) br.cond.dptk .itlb_fault 356(p8) br.cond.dptk .itlb_fault
349#endif 357#endif
@@ -358,9 +366,9 @@ ENTRY(alt_itlb_miss)
358 or r19=r19,r18 // set bit 4 (uncached) if the access was to region 6 366 or r19=r19,r18 // set bit 4 (uncached) if the access was to region 6
359(p8) br.cond.spnt page_fault 367(p8) br.cond.spnt page_fault
360 ;; 368 ;;
361 itc.i r19 // insert the TLB entry 369 ITC_I(p0, r19, r18) // insert the TLB entry
362 mov pr=r31,-1 370 mov pr=r31,-1
363 rfi 371 RFI
364END(alt_itlb_miss) 372END(alt_itlb_miss)
365 373
366 .org ia64_ivt+0x1000 374 .org ia64_ivt+0x1000
@@ -368,11 +376,11 @@ END(alt_itlb_miss)
368// 0x1000 Entry 4 (size 64 bundles) Alt DTLB (7,46) 376// 0x1000 Entry 4 (size 64 bundles) Alt DTLB (7,46)
369ENTRY(alt_dtlb_miss) 377ENTRY(alt_dtlb_miss)
370 DBG_FAULT(4) 378 DBG_FAULT(4)
371 mov r16=cr.ifa // get address that caused the TLB miss 379 MOV_FROM_IFA(r16) // get address that caused the TLB miss
372 movl r17=PAGE_KERNEL 380 movl r17=PAGE_KERNEL
373 mov r20=cr.isr 381 MOV_FROM_ISR(r20)
374 movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff) 382 movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff)
375 mov r21=cr.ipsr 383 MOV_FROM_IPSR(p0, r21)
376 mov r31=pr 384 mov r31=pr
377 mov r24=PERCPU_ADDR 385 mov r24=PERCPU_ADDR
378 ;; 386 ;;
@@ -381,9 +389,9 @@ ENTRY(alt_dtlb_miss)
381 ;; 389 ;;
382 cmp.gt p8,p0=6,r22 // access to region 0-5 390 cmp.gt p8,p0=6,r22 // access to region 0-5
383 ;; 391 ;;
384(p8) thash r17=r16 392 THASH(p8, r17, r16, r25)
385 ;; 393 ;;
386(p8) mov cr.iha=r17 394 MOV_TO_IHA(p8, r17, r25)
387(p8) mov r29=b0 // save b0 395(p8) mov r29=b0 // save b0
388(p8) br.cond.dptk dtlb_fault 396(p8) br.cond.dptk dtlb_fault
389#endif 397#endif
@@ -402,7 +410,7 @@ ENTRY(alt_dtlb_miss)
402 tbit.nz p9,p0=r20,IA64_ISR_NA_BIT // is non-access bit on? 410 tbit.nz p9,p0=r20,IA64_ISR_NA_BIT // is non-access bit on?
403 ;; 411 ;;
404(p10) sub r19=r19,r26 412(p10) sub r19=r19,r26
405(p10) mov cr.itir=r25 413 MOV_TO_ITIR(p10, r25, r24)
406 cmp.ne p8,p0=r0,r23 414 cmp.ne p8,p0=r0,r23
407(p9) cmp.eq.or.andcm p6,p7=IA64_ISR_CODE_LFETCH,r22 // check isr.code field 415(p9) cmp.eq.or.andcm p6,p7=IA64_ISR_CODE_LFETCH,r22 // check isr.code field
408(p12) dep r17=-1,r17,4,1 // set ma=UC for region 6 addr 416(p12) dep r17=-1,r17,4,1 // set ma=UC for region 6 addr
@@ -411,11 +419,11 @@ ENTRY(alt_dtlb_miss)
411 dep r21=-1,r21,IA64_PSR_ED_BIT,1 419 dep r21=-1,r21,IA64_PSR_ED_BIT,1
412 ;; 420 ;;
413 or r19=r19,r17 // insert PTE control bits into r19 421 or r19=r19,r17 // insert PTE control bits into r19
414(p6) mov cr.ipsr=r21 422 MOV_TO_IPSR(p6, r21, r24)
415 ;; 423 ;;
416(p7) itc.d r19 // insert the TLB entry 424 ITC_D(p7, r19, r18) // insert the TLB entry
417 mov pr=r31,-1 425 mov pr=r31,-1
418 rfi 426 RFI
419END(alt_dtlb_miss) 427END(alt_dtlb_miss)
420 428
421 .org ia64_ivt+0x1400 429 .org ia64_ivt+0x1400
@@ -444,10 +452,10 @@ ENTRY(nested_dtlb_miss)
444 * 452 *
445 * Clobbered: b0, r18, r19, r21, r22, psr.dt (cleared) 453 * Clobbered: b0, r18, r19, r21, r22, psr.dt (cleared)
446 */ 454 */
447 rsm psr.dt // switch to using physical data addressing 455 RSM_PSR_DT // switch to using physical data addressing
448 mov r19=IA64_KR(PT_BASE) // get the page table base address 456 mov r19=IA64_KR(PT_BASE) // get the page table base address
449 shl r21=r16,3 // shift bit 60 into sign bit 457 shl r21=r16,3 // shift bit 60 into sign bit
450 mov r18=cr.itir 458 MOV_FROM_ITIR(r18)
451 ;; 459 ;;
452 shr.u r17=r16,61 // get the region number into r17 460 shr.u r17=r16,61 // get the region number into r17
453 extr.u r18=r18,2,6 // get the faulting page size 461 extr.u r18=r18,2,6 // get the faulting page size
@@ -507,33 +515,6 @@ ENTRY(ikey_miss)
507 FAULT(6) 515 FAULT(6)
508END(ikey_miss) 516END(ikey_miss)
509 517
510 //-----------------------------------------------------------------------------------
511 // call do_page_fault (predicates are in r31, psr.dt may be off, r16 is faulting address)
512ENTRY(page_fault)
513 ssm psr.dt
514 ;;
515 srlz.i
516 ;;
517 SAVE_MIN_WITH_COVER
518 alloc r15=ar.pfs,0,0,3,0
519 mov out0=cr.ifa
520 mov out1=cr.isr
521 adds r3=8,r2 // set up second base pointer
522 ;;
523 ssm psr.ic | PSR_DEFAULT_BITS
524 ;;
525 srlz.i // guarantee that interruption collectin is on
526 ;;
527(p15) ssm psr.i // restore psr.i
528 movl r14=ia64_leave_kernel
529 ;;
530 SAVE_REST
531 mov rp=r14
532 ;;
533 adds out2=16,r12 // out2 = pointer to pt_regs
534 br.call.sptk.many b6=ia64_do_page_fault // ignore return address
535END(page_fault)
536
537 .org ia64_ivt+0x1c00 518 .org ia64_ivt+0x1c00
538///////////////////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////////////////
539// 0x1c00 Entry 7 (size 64 bundles) Data Key Miss (12,51) 520// 0x1c00 Entry 7 (size 64 bundles) Data Key Miss (12,51)
@@ -556,10 +537,10 @@ ENTRY(dirty_bit)
556 * page table TLB entry isn't present, we take a nested TLB miss hit where we look 537 * page table TLB entry isn't present, we take a nested TLB miss hit where we look
557 * up the physical address of the L3 PTE and then continue at label 1 below. 538 * up the physical address of the L3 PTE and then continue at label 1 below.
558 */ 539 */
559 mov r16=cr.ifa // get the address that caused the fault 540 MOV_FROM_IFA(r16) // get the address that caused the fault
560 movl r30=1f // load continuation point in case of nested fault 541 movl r30=1f // load continuation point in case of nested fault
561 ;; 542 ;;
562 thash r17=r16 // compute virtual address of L3 PTE 543 THASH(p0, r17, r16, r18) // compute virtual address of L3 PTE
563 mov r29=b0 // save b0 in case of nested fault 544 mov r29=b0 // save b0 in case of nested fault
564 mov r31=pr // save pr 545 mov r31=pr // save pr
565#ifdef CONFIG_SMP 546#ifdef CONFIG_SMP
@@ -576,7 +557,7 @@ ENTRY(dirty_bit)
576 ;; 557 ;;
577(p6) cmp.eq p6,p7=r26,r18 // Only compare if page is present 558(p6) cmp.eq p6,p7=r26,r18 // Only compare if page is present
578 ;; 559 ;;
579(p6) itc.d r25 // install updated PTE 560 ITC_D(p6, r25, r18) // install updated PTE
580 ;; 561 ;;
581 /* 562 /*
582 * Tell the assemblers dependency-violation checker that the above "itc" instructions 563 * Tell the assemblers dependency-violation checker that the above "itc" instructions
@@ -602,7 +583,7 @@ ENTRY(dirty_bit)
602 itc.d r18 // install updated PTE 583 itc.d r18 // install updated PTE
603#endif 584#endif
604 mov pr=r31,-1 // restore pr 585 mov pr=r31,-1 // restore pr
605 rfi 586 RFI
606END(dirty_bit) 587END(dirty_bit)
607 588
608 .org ia64_ivt+0x2400 589 .org ia64_ivt+0x2400
@@ -611,22 +592,22 @@ END(dirty_bit)
611ENTRY(iaccess_bit) 592ENTRY(iaccess_bit)
612 DBG_FAULT(9) 593 DBG_FAULT(9)
613 // Like Entry 8, except for instruction access 594 // Like Entry 8, except for instruction access
614 mov r16=cr.ifa // get the address that caused the fault 595 MOV_FROM_IFA(r16) // get the address that caused the fault
615 movl r30=1f // load continuation point in case of nested fault 596 movl r30=1f // load continuation point in case of nested fault
616 mov r31=pr // save predicates 597 mov r31=pr // save predicates
617#ifdef CONFIG_ITANIUM 598#ifdef CONFIG_ITANIUM
618 /* 599 /*
619 * Erratum 10 (IFA may contain incorrect address) has "NoFix" status. 600 * Erratum 10 (IFA may contain incorrect address) has "NoFix" status.
620 */ 601 */
621 mov r17=cr.ipsr 602 MOV_FROM_IPSR(p0, r17)
622 ;; 603 ;;
623 mov r18=cr.iip 604 MOV_FROM_IIP(r18)
624 tbit.z p6,p0=r17,IA64_PSR_IS_BIT // IA64 instruction set? 605 tbit.z p6,p0=r17,IA64_PSR_IS_BIT // IA64 instruction set?
625 ;; 606 ;;
626(p6) mov r16=r18 // if so, use cr.iip instead of cr.ifa 607(p6) mov r16=r18 // if so, use cr.iip instead of cr.ifa
627#endif /* CONFIG_ITANIUM */ 608#endif /* CONFIG_ITANIUM */
628 ;; 609 ;;
629 thash r17=r16 // compute virtual address of L3 PTE 610 THASH(p0, r17, r16, r18) // compute virtual address of L3 PTE
630 mov r29=b0 // save b0 in case of nested fault) 611 mov r29=b0 // save b0 in case of nested fault)
631#ifdef CONFIG_SMP 612#ifdef CONFIG_SMP
632 mov r28=ar.ccv // save ar.ccv 613 mov r28=ar.ccv // save ar.ccv
@@ -642,7 +623,7 @@ ENTRY(iaccess_bit)
642 ;; 623 ;;
643(p6) cmp.eq p6,p7=r26,r18 // Only if page present 624(p6) cmp.eq p6,p7=r26,r18 // Only if page present
644 ;; 625 ;;
645(p6) itc.i r25 // install updated PTE 626 ITC_I(p6, r25, r26) // install updated PTE
646 ;; 627 ;;
647 /* 628 /*
648 * Tell the assemblers dependency-violation checker that the above "itc" instructions 629 * Tell the assemblers dependency-violation checker that the above "itc" instructions
@@ -668,7 +649,7 @@ ENTRY(iaccess_bit)
668 itc.i r18 // install updated PTE 649 itc.i r18 // install updated PTE
669#endif /* !CONFIG_SMP */ 650#endif /* !CONFIG_SMP */
670 mov pr=r31,-1 651 mov pr=r31,-1
671 rfi 652 RFI
672END(iaccess_bit) 653END(iaccess_bit)
673 654
674 .org ia64_ivt+0x2800 655 .org ia64_ivt+0x2800
@@ -677,10 +658,10 @@ END(iaccess_bit)
677ENTRY(daccess_bit) 658ENTRY(daccess_bit)
678 DBG_FAULT(10) 659 DBG_FAULT(10)
679 // Like Entry 8, except for data access 660 // Like Entry 8, except for data access
680 mov r16=cr.ifa // get the address that caused the fault 661 MOV_FROM_IFA(r16) // get the address that caused the fault
681 movl r30=1f // load continuation point in case of nested fault 662 movl r30=1f // load continuation point in case of nested fault
682 ;; 663 ;;
683 thash r17=r16 // compute virtual address of L3 PTE 664 THASH(p0, r17, r16, r18) // compute virtual address of L3 PTE
684 mov r31=pr 665 mov r31=pr
685 mov r29=b0 // save b0 in case of nested fault) 666 mov r29=b0 // save b0 in case of nested fault)
686#ifdef CONFIG_SMP 667#ifdef CONFIG_SMP
@@ -697,7 +678,7 @@ ENTRY(daccess_bit)
697 ;; 678 ;;
698(p6) cmp.eq p6,p7=r26,r18 // Only if page is present 679(p6) cmp.eq p6,p7=r26,r18 // Only if page is present
699 ;; 680 ;;
700(p6) itc.d r25 // install updated PTE 681 ITC_D(p6, r25, r26) // install updated PTE
701 /* 682 /*
702 * Tell the assemblers dependency-violation checker that the above "itc" instructions 683 * Tell the assemblers dependency-violation checker that the above "itc" instructions
703 * cannot possibly affect the following loads: 684 * cannot possibly affect the following loads:
@@ -721,7 +702,7 @@ ENTRY(daccess_bit)
721#endif 702#endif
722 mov b0=r29 // restore b0 703 mov b0=r29 // restore b0
723 mov pr=r31,-1 704 mov pr=r31,-1
724 rfi 705 RFI
725END(daccess_bit) 706END(daccess_bit)
726 707
727 .org ia64_ivt+0x2c00 708 .org ia64_ivt+0x2c00
@@ -745,10 +726,10 @@ ENTRY(break_fault)
745 */ 726 */
746 DBG_FAULT(11) 727 DBG_FAULT(11)
747 mov.m r16=IA64_KR(CURRENT) // M2 r16 <- current task (12 cyc) 728 mov.m r16=IA64_KR(CURRENT) // M2 r16 <- current task (12 cyc)
748 mov r29=cr.ipsr // M2 (12 cyc) 729 MOV_FROM_IPSR(p0, r29) // M2 (12 cyc)
749 mov r31=pr // I0 (2 cyc) 730 mov r31=pr // I0 (2 cyc)
750 731
751 mov r17=cr.iim // M2 (2 cyc) 732 MOV_FROM_IIM(r17) // M2 (2 cyc)
752 mov.m r27=ar.rsc // M2 (12 cyc) 733 mov.m r27=ar.rsc // M2 (12 cyc)
753 mov r18=__IA64_BREAK_SYSCALL // A 734 mov r18=__IA64_BREAK_SYSCALL // A
754 735
@@ -767,7 +748,7 @@ ENTRY(break_fault)
767 nop.m 0 748 nop.m 0
768 movl r30=sys_call_table // X 749 movl r30=sys_call_table // X
769 750
770 mov r28=cr.iip // M2 (2 cyc) 751 MOV_FROM_IIP(r28) // M2 (2 cyc)
771 cmp.eq p0,p7=r18,r17 // I0 is this a system call? 752 cmp.eq p0,p7=r18,r17 // I0 is this a system call?
772(p7) br.cond.spnt non_syscall // B no -> 753(p7) br.cond.spnt non_syscall // B no ->
773 // 754 //
@@ -864,18 +845,17 @@ ENTRY(break_fault)
864#endif 845#endif
865 mov ar.rsc=0x3 // M2 set eager mode, pl 0, LE, loadrs=0 846 mov ar.rsc=0x3 // M2 set eager mode, pl 0, LE, loadrs=0
866 nop 0 847 nop 0
867 bsw.1 // B (6 cyc) regs are saved, switch to bank 1 848 BSW_1(r2, r14) // B (6 cyc) regs are saved, switch to bank 1
868 ;; 849 ;;
869 850
870 ssm psr.ic | PSR_DEFAULT_BITS // M2 now it's safe to re-enable intr.-collection 851 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r16) // M2 now it's safe to re-enable intr.-collection
852 // M0 ensure interruption collection is on
871 movl r3=ia64_ret_from_syscall // X 853 movl r3=ia64_ret_from_syscall // X
872 ;; 854 ;;
873
874 srlz.i // M0 ensure interruption collection is on
875 mov rp=r3 // I0 set the real return addr 855 mov rp=r3 // I0 set the real return addr
876(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT 856(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT
877 857
878(p15) ssm psr.i // M2 restore psr.i 858 SSM_PSR_I(p15, p15, r16) // M2 restore psr.i
879(p14) br.call.sptk.many b6=b6 // B invoke syscall-handker (ignore return addr) 859(p14) br.call.sptk.many b6=b6 // B invoke syscall-handker (ignore return addr)
880 br.cond.spnt.many ia64_trace_syscall // B do syscall-tracing thingamagic 860 br.cond.spnt.many ia64_trace_syscall // B do syscall-tracing thingamagic
881 // NOT REACHED 861 // NOT REACHED
@@ -895,27 +875,8 @@ END(break_fault)
895///////////////////////////////////////////////////////////////////////////////////////// 875/////////////////////////////////////////////////////////////////////////////////////////
896// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4) 876// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
897ENTRY(interrupt) 877ENTRY(interrupt)
898 DBG_FAULT(12) 878 /* interrupt handler has become too big to fit this area. */
899 mov r31=pr // prepare to save predicates 879 br.sptk.many __interrupt
900 ;;
901 SAVE_MIN_WITH_COVER // uses r31; defines r2 and r3
902 ssm psr.ic | PSR_DEFAULT_BITS
903 ;;
904 adds r3=8,r2 // set up second base pointer for SAVE_REST
905 srlz.i // ensure everybody knows psr.ic is back on
906 ;;
907 SAVE_REST
908 ;;
909 MCA_RECOVER_RANGE(interrupt)
910 alloc r14=ar.pfs,0,0,2,0 // must be first in an insn group
911 mov out0=cr.ivr // pass cr.ivr as first arg
912 add out1=16,sp // pass pointer to pt_regs as second arg
913 ;;
914 srlz.d // make sure we see the effect of cr.ivr
915 movl r14=ia64_leave_kernel
916 ;;
917 mov rp=r14
918 br.call.sptk.many b6=ia64_handle_irq
919END(interrupt) 880END(interrupt)
920 881
921 .org ia64_ivt+0x3400 882 .org ia64_ivt+0x3400
@@ -978,6 +939,7 @@ END(interrupt)
978 * - ar.fpsr: set to kernel settings 939 * - ar.fpsr: set to kernel settings
979 * - b6: preserved (same as on entry) 940 * - b6: preserved (same as on entry)
980 */ 941 */
942#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
981GLOBAL_ENTRY(ia64_syscall_setup) 943GLOBAL_ENTRY(ia64_syscall_setup)
982#if PT(B6) != 0 944#if PT(B6) != 0
983# error This code assumes that b6 is the first field in pt_regs. 945# error This code assumes that b6 is the first field in pt_regs.
@@ -1069,6 +1031,7 @@ GLOBAL_ENTRY(ia64_syscall_setup)
1069(p10) mov r8=-EINVAL 1031(p10) mov r8=-EINVAL
1070 br.ret.sptk.many b7 1032 br.ret.sptk.many b7
1071END(ia64_syscall_setup) 1033END(ia64_syscall_setup)
1034#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
1072 1035
1073 .org ia64_ivt+0x3c00 1036 .org ia64_ivt+0x3c00
1074///////////////////////////////////////////////////////////////////////////////////////// 1037/////////////////////////////////////////////////////////////////////////////////////////
@@ -1082,7 +1045,7 @@ END(ia64_syscall_setup)
1082 DBG_FAULT(16) 1045 DBG_FAULT(16)
1083 FAULT(16) 1046 FAULT(16)
1084 1047
1085#ifdef CONFIG_VIRT_CPU_ACCOUNTING 1048#if defined(CONFIG_VIRT_CPU_ACCOUNTING) && defined(__IA64_ASM_PARAVIRTUALIZED_NATIVE)
1086 /* 1049 /*
1087 * There is no particular reason for this code to be here, other than 1050 * There is no particular reason for this code to be here, other than
1088 * that there happens to be space here that would go unused otherwise. 1051 * that there happens to be space here that would go unused otherwise.
@@ -1092,7 +1055,7 @@ END(ia64_syscall_setup)
1092 * account_sys_enter is called from SAVE_MIN* macros if accounting is 1055 * account_sys_enter is called from SAVE_MIN* macros if accounting is
1093 * enabled and if the macro is entered from user mode. 1056 * enabled and if the macro is entered from user mode.
1094 */ 1057 */
1095ENTRY(account_sys_enter) 1058GLOBAL_ENTRY(account_sys_enter)
1096 // mov.m r20=ar.itc is called in advance, and r13 is current 1059 // mov.m r20=ar.itc is called in advance, and r13 is current
1097 add r16=TI_AC_STAMP+IA64_TASK_SIZE,r13 1060 add r16=TI_AC_STAMP+IA64_TASK_SIZE,r13
1098 add r17=TI_AC_LEAVE+IA64_TASK_SIZE,r13 1061 add r17=TI_AC_LEAVE+IA64_TASK_SIZE,r13
@@ -1123,110 +1086,18 @@ END(account_sys_enter)
1123 DBG_FAULT(17) 1086 DBG_FAULT(17)
1124 FAULT(17) 1087 FAULT(17)
1125 1088
1126ENTRY(non_syscall)
1127 mov ar.rsc=r27 // restore ar.rsc before SAVE_MIN_WITH_COVER
1128 ;;
1129 SAVE_MIN_WITH_COVER
1130
1131 // There is no particular reason for this code to be here, other than that
1132 // there happens to be space here that would go unused otherwise. If this
1133 // fault ever gets "unreserved", simply moved the following code to a more
1134 // suitable spot...
1135
1136 alloc r14=ar.pfs,0,0,2,0
1137 mov out0=cr.iim
1138 add out1=16,sp
1139 adds r3=8,r2 // set up second base pointer for SAVE_REST
1140
1141 ssm psr.ic | PSR_DEFAULT_BITS
1142 ;;
1143 srlz.i // guarantee that interruption collection is on
1144 ;;
1145(p15) ssm psr.i // restore psr.i
1146 movl r15=ia64_leave_kernel
1147 ;;
1148 SAVE_REST
1149 mov rp=r15
1150 ;;
1151 br.call.sptk.many b6=ia64_bad_break // avoid WAW on CFM and ignore return addr
1152END(non_syscall)
1153
1154 .org ia64_ivt+0x4800 1089 .org ia64_ivt+0x4800
1155///////////////////////////////////////////////////////////////////////////////////////// 1090/////////////////////////////////////////////////////////////////////////////////////////
1156// 0x4800 Entry 18 (size 64 bundles) Reserved 1091// 0x4800 Entry 18 (size 64 bundles) Reserved
1157 DBG_FAULT(18) 1092 DBG_FAULT(18)
1158 FAULT(18) 1093 FAULT(18)
1159 1094
1160 /*
1161 * There is no particular reason for this code to be here, other than that
1162 * there happens to be space here that would go unused otherwise. If this
1163 * fault ever gets "unreserved", simply moved the following code to a more
1164 * suitable spot...
1165 */
1166
1167ENTRY(dispatch_unaligned_handler)
1168 SAVE_MIN_WITH_COVER
1169 ;;
1170 alloc r14=ar.pfs,0,0,2,0 // now it's safe (must be first in insn group!)
1171 mov out0=cr.ifa
1172 adds out1=16,sp
1173
1174 ssm psr.ic | PSR_DEFAULT_BITS
1175 ;;
1176 srlz.i // guarantee that interruption collection is on
1177 ;;
1178(p15) ssm psr.i // restore psr.i
1179 adds r3=8,r2 // set up second base pointer
1180 ;;
1181 SAVE_REST
1182 movl r14=ia64_leave_kernel
1183 ;;
1184 mov rp=r14
1185 br.sptk.many ia64_prepare_handle_unaligned
1186END(dispatch_unaligned_handler)
1187
1188 .org ia64_ivt+0x4c00 1095 .org ia64_ivt+0x4c00
1189///////////////////////////////////////////////////////////////////////////////////////// 1096/////////////////////////////////////////////////////////////////////////////////////////
1190// 0x4c00 Entry 19 (size 64 bundles) Reserved 1097// 0x4c00 Entry 19 (size 64 bundles) Reserved
1191 DBG_FAULT(19) 1098 DBG_FAULT(19)
1192 FAULT(19) 1099 FAULT(19)
1193 1100
1194 /*
1195 * There is no particular reason for this code to be here, other than that
1196 * there happens to be space here that would go unused otherwise. If this
1197 * fault ever gets "unreserved", simply moved the following code to a more
1198 * suitable spot...
1199 */
1200
1201ENTRY(dispatch_to_fault_handler)
1202 /*
1203 * Input:
1204 * psr.ic: off
1205 * r19: fault vector number (e.g., 24 for General Exception)
1206 * r31: contains saved predicates (pr)
1207 */
1208 SAVE_MIN_WITH_COVER_R19
1209 alloc r14=ar.pfs,0,0,5,0
1210 mov out0=r15
1211 mov out1=cr.isr
1212 mov out2=cr.ifa
1213 mov out3=cr.iim
1214 mov out4=cr.itir
1215 ;;
1216 ssm psr.ic | PSR_DEFAULT_BITS
1217 ;;
1218 srlz.i // guarantee that interruption collection is on
1219 ;;
1220(p15) ssm psr.i // restore psr.i
1221 adds r3=8,r2 // set up second base pointer for SAVE_REST
1222 ;;
1223 SAVE_REST
1224 movl r14=ia64_leave_kernel
1225 ;;
1226 mov rp=r14
1227 br.call.sptk.many b6=ia64_fault
1228END(dispatch_to_fault_handler)
1229
1230// 1101//
1231// --- End of long entries, Beginning of short entries 1102// --- End of long entries, Beginning of short entries
1232// 1103//
@@ -1236,8 +1107,8 @@ END(dispatch_to_fault_handler)
1236// 0x5000 Entry 20 (size 16 bundles) Page Not Present (10,22,49) 1107// 0x5000 Entry 20 (size 16 bundles) Page Not Present (10,22,49)
1237ENTRY(page_not_present) 1108ENTRY(page_not_present)
1238 DBG_FAULT(20) 1109 DBG_FAULT(20)
1239 mov r16=cr.ifa 1110 MOV_FROM_IFA(r16)
1240 rsm psr.dt 1111 RSM_PSR_DT
1241 /* 1112 /*
1242 * The Linux page fault handler doesn't expect non-present pages to be in 1113 * The Linux page fault handler doesn't expect non-present pages to be in
1243 * the TLB. Flush the existing entry now, so we meet that expectation. 1114 * the TLB. Flush the existing entry now, so we meet that expectation.
@@ -1256,8 +1127,8 @@ END(page_not_present)
1256// 0x5100 Entry 21 (size 16 bundles) Key Permission (13,25,52) 1127// 0x5100 Entry 21 (size 16 bundles) Key Permission (13,25,52)
1257ENTRY(key_permission) 1128ENTRY(key_permission)
1258 DBG_FAULT(21) 1129 DBG_FAULT(21)
1259 mov r16=cr.ifa 1130 MOV_FROM_IFA(r16)
1260 rsm psr.dt 1131 RSM_PSR_DT
1261 mov r31=pr 1132 mov r31=pr
1262 ;; 1133 ;;
1263 srlz.d 1134 srlz.d
@@ -1269,8 +1140,8 @@ END(key_permission)
1269// 0x5200 Entry 22 (size 16 bundles) Instruction Access Rights (26) 1140// 0x5200 Entry 22 (size 16 bundles) Instruction Access Rights (26)
1270ENTRY(iaccess_rights) 1141ENTRY(iaccess_rights)
1271 DBG_FAULT(22) 1142 DBG_FAULT(22)
1272 mov r16=cr.ifa 1143 MOV_FROM_IFA(r16)
1273 rsm psr.dt 1144 RSM_PSR_DT
1274 mov r31=pr 1145 mov r31=pr
1275 ;; 1146 ;;
1276 srlz.d 1147 srlz.d
@@ -1282,8 +1153,8 @@ END(iaccess_rights)
1282// 0x5300 Entry 23 (size 16 bundles) Data Access Rights (14,53) 1153// 0x5300 Entry 23 (size 16 bundles) Data Access Rights (14,53)
1283ENTRY(daccess_rights) 1154ENTRY(daccess_rights)
1284 DBG_FAULT(23) 1155 DBG_FAULT(23)
1285 mov r16=cr.ifa 1156 MOV_FROM_IFA(r16)
1286 rsm psr.dt 1157 RSM_PSR_DT
1287 mov r31=pr 1158 mov r31=pr
1288 ;; 1159 ;;
1289 srlz.d 1160 srlz.d
@@ -1295,7 +1166,7 @@ END(daccess_rights)
1295// 0x5400 Entry 24 (size 16 bundles) General Exception (5,32,34,36,38,39) 1166// 0x5400 Entry 24 (size 16 bundles) General Exception (5,32,34,36,38,39)
1296ENTRY(general_exception) 1167ENTRY(general_exception)
1297 DBG_FAULT(24) 1168 DBG_FAULT(24)
1298 mov r16=cr.isr 1169 MOV_FROM_ISR(r16)
1299 mov r31=pr 1170 mov r31=pr
1300 ;; 1171 ;;
1301 cmp4.eq p6,p0=0,r16 1172 cmp4.eq p6,p0=0,r16
@@ -1324,8 +1195,8 @@ END(disabled_fp_reg)
1324ENTRY(nat_consumption) 1195ENTRY(nat_consumption)
1325 DBG_FAULT(26) 1196 DBG_FAULT(26)
1326 1197
1327 mov r16=cr.ipsr 1198 MOV_FROM_IPSR(p0, r16)
1328 mov r17=cr.isr 1199 MOV_FROM_ISR(r17)
1329 mov r31=pr // save PR 1200 mov r31=pr // save PR
1330 ;; 1201 ;;
1331 and r18=0xf,r17 // r18 = cr.ipsr.code{3:0} 1202 and r18=0xf,r17 // r18 = cr.ipsr.code{3:0}
@@ -1335,10 +1206,10 @@ ENTRY(nat_consumption)
1335 dep r16=-1,r16,IA64_PSR_ED_BIT,1 1206 dep r16=-1,r16,IA64_PSR_ED_BIT,1
1336(p6) br.cond.spnt 1f // branch if (cr.ispr.na == 0 || cr.ipsr.code{3:0} != LFETCH) 1207(p6) br.cond.spnt 1f // branch if (cr.ispr.na == 0 || cr.ipsr.code{3:0} != LFETCH)
1337 ;; 1208 ;;
1338 mov cr.ipsr=r16 // set cr.ipsr.na 1209 MOV_TO_IPSR(p0, r16, r18)
1339 mov pr=r31,-1 1210 mov pr=r31,-1
1340 ;; 1211 ;;
1341 rfi 1212 RFI
1342 1213
13431: mov pr=r31,-1 12141: mov pr=r31,-1
1344 ;; 1215 ;;
@@ -1360,26 +1231,26 @@ ENTRY(speculation_vector)
1360 * 1231 *
1361 * cr.imm contains zero_ext(imm21) 1232 * cr.imm contains zero_ext(imm21)
1362 */ 1233 */
1363 mov r18=cr.iim 1234 MOV_FROM_IIM(r18)
1364 ;; 1235 ;;
1365 mov r17=cr.iip 1236 MOV_FROM_IIP(r17)
1366 shl r18=r18,43 // put sign bit in position (43=64-21) 1237 shl r18=r18,43 // put sign bit in position (43=64-21)
1367 ;; 1238 ;;
1368 1239
1369 mov r16=cr.ipsr 1240 MOV_FROM_IPSR(p0, r16)
1370 shr r18=r18,39 // sign extend (39=43-4) 1241 shr r18=r18,39 // sign extend (39=43-4)
1371 ;; 1242 ;;
1372 1243
1373 add r17=r17,r18 // now add the offset 1244 add r17=r17,r18 // now add the offset
1374 ;; 1245 ;;
1375 mov cr.iip=r17 1246 MOV_FROM_IIP(r17)
1376 dep r16=0,r16,41,2 // clear EI 1247 dep r16=0,r16,41,2 // clear EI
1377 ;; 1248 ;;
1378 1249
1379 mov cr.ipsr=r16 1250 MOV_FROM_IPSR(p0, r16)
1380 ;; 1251 ;;
1381 1252
1382 rfi // and go back 1253 RFI
1383END(speculation_vector) 1254END(speculation_vector)
1384 1255
1385 .org ia64_ivt+0x5800 1256 .org ia64_ivt+0x5800
@@ -1517,11 +1388,11 @@ ENTRY(ia32_intercept)
1517 DBG_FAULT(46) 1388 DBG_FAULT(46)
1518#ifdef CONFIG_IA32_SUPPORT 1389#ifdef CONFIG_IA32_SUPPORT
1519 mov r31=pr 1390 mov r31=pr
1520 mov r16=cr.isr 1391 MOV_FROM_ISR(r16)
1521 ;; 1392 ;;
1522 extr.u r17=r16,16,8 // get ISR.code 1393 extr.u r17=r16,16,8 // get ISR.code
1523 mov r18=ar.eflag 1394 mov r18=ar.eflag
1524 mov r19=cr.iim // old eflag value 1395 MOV_FROM_IIM(r19) // old eflag value
1525 ;; 1396 ;;
1526 cmp.ne p6,p0=2,r17 1397 cmp.ne p6,p0=2,r17
1527(p6) br.cond.spnt 1f // not a system flag fault 1398(p6) br.cond.spnt 1f // not a system flag fault
@@ -1533,7 +1404,7 @@ ENTRY(ia32_intercept)
1533(p6) br.cond.spnt 1f // eflags.ac bit didn't change 1404(p6) br.cond.spnt 1f // eflags.ac bit didn't change
1534 ;; 1405 ;;
1535 mov pr=r31,-1 // restore predicate registers 1406 mov pr=r31,-1 // restore predicate registers
1536 rfi 1407 RFI
1537 1408
15381: 14091:
1539#endif // CONFIG_IA32_SUPPORT 1410#endif // CONFIG_IA32_SUPPORT
@@ -1673,6 +1544,137 @@ END(ia32_interrupt)
1673 DBG_FAULT(67) 1544 DBG_FAULT(67)
1674 FAULT(67) 1545 FAULT(67)
1675 1546
1547 //-----------------------------------------------------------------------------------
1548 // call do_page_fault (predicates are in r31, psr.dt may be off, r16 is faulting address)
1549ENTRY(page_fault)
1550 SSM_PSR_DT_AND_SRLZ_I
1551 ;;
1552 SAVE_MIN_WITH_COVER
1553 alloc r15=ar.pfs,0,0,3,0
1554 MOV_FROM_IFA(out0)
1555 MOV_FROM_ISR(out1)
1556 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r14, r3)
1557 adds r3=8,r2 // set up second base pointer
1558 SSM_PSR_I(p15, p15, r14) // restore psr.i
1559 movl r14=ia64_leave_kernel
1560 ;;
1561 SAVE_REST
1562 mov rp=r14
1563 ;;
1564 adds out2=16,r12 // out2 = pointer to pt_regs
1565 br.call.sptk.many b6=ia64_do_page_fault // ignore return address
1566END(page_fault)
1567
1568ENTRY(non_syscall)
1569 mov ar.rsc=r27 // restore ar.rsc before SAVE_MIN_WITH_COVER
1570 ;;
1571 SAVE_MIN_WITH_COVER
1572
1573 // There is no particular reason for this code to be here, other than that
1574 // there happens to be space here that would go unused otherwise. If this
1575 // fault ever gets "unreserved", simply moved the following code to a more
1576 // suitable spot...
1577
1578 alloc r14=ar.pfs,0,0,2,0
1579 MOV_FROM_IIM(out0)
1580 add out1=16,sp
1581 adds r3=8,r2 // set up second base pointer for SAVE_REST
1582
1583 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r15, r24)
1584 // guarantee that interruption collection is on
1585 SSM_PSR_I(p15, p15, r15) // restore psr.i
1586 movl r15=ia64_leave_kernel
1587 ;;
1588 SAVE_REST
1589 mov rp=r15
1590 ;;
1591 br.call.sptk.many b6=ia64_bad_break // avoid WAW on CFM and ignore return addr
1592END(non_syscall)
1593
1594ENTRY(__interrupt)
1595 DBG_FAULT(12)
1596 mov r31=pr // prepare to save predicates
1597 ;;
1598 SAVE_MIN_WITH_COVER // uses r31; defines r2 and r3
1599 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r14)
1600 // ensure everybody knows psr.ic is back on
1601 adds r3=8,r2 // set up second base pointer for SAVE_REST
1602 ;;
1603 SAVE_REST
1604 ;;
1605 MCA_RECOVER_RANGE(interrupt)
1606 alloc r14=ar.pfs,0,0,2,0 // must be first in an insn group
1607 MOV_FROM_IVR(out0, r8) // pass cr.ivr as first arg
1608 add out1=16,sp // pass pointer to pt_regs as second arg
1609 ;;
1610 srlz.d // make sure we see the effect of cr.ivr
1611 movl r14=ia64_leave_kernel
1612 ;;
1613 mov rp=r14
1614 br.call.sptk.many b6=ia64_handle_irq
1615END(__interrupt)
1616
1617 /*
1618 * There is no particular reason for this code to be here, other than that
1619 * there happens to be space here that would go unused otherwise. If this
1620 * fault ever gets "unreserved", simply moved the following code to a more
1621 * suitable spot...
1622 */
1623
1624ENTRY(dispatch_unaligned_handler)
1625 SAVE_MIN_WITH_COVER
1626 ;;
1627 alloc r14=ar.pfs,0,0,2,0 // now it's safe (must be first in insn group!)
1628 MOV_FROM_IFA(out0)
1629 adds out1=16,sp
1630
1631 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r24)
1632 // guarantee that interruption collection is on
1633 SSM_PSR_I(p15, p15, r3) // restore psr.i
1634 adds r3=8,r2 // set up second base pointer
1635 ;;
1636 SAVE_REST
1637 movl r14=ia64_leave_kernel
1638 ;;
1639 mov rp=r14
1640 br.sptk.many ia64_prepare_handle_unaligned
1641END(dispatch_unaligned_handler)
1642
1643 /*
1644 * There is no particular reason for this code to be here, other than that
1645 * there happens to be space here that would go unused otherwise. If this
1646 * fault ever gets "unreserved", simply moved the following code to a more
1647 * suitable spot...
1648 */
1649
1650ENTRY(dispatch_to_fault_handler)
1651 /*
1652 * Input:
1653 * psr.ic: off
1654 * r19: fault vector number (e.g., 24 for General Exception)
1655 * r31: contains saved predicates (pr)
1656 */
1657 SAVE_MIN_WITH_COVER_R19
1658 alloc r14=ar.pfs,0,0,5,0
1659 MOV_FROM_ISR(out1)
1660 MOV_FROM_IFA(out2)
1661 MOV_FROM_IIM(out3)
1662 MOV_FROM_ITIR(out4)
1663 ;;
1664 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, out0)
1665 // guarantee that interruption collection is on
1666 mov out0=r15
1667 ;;
1668 SSM_PSR_I(p15, p15, r3) // restore psr.i
1669 adds r3=8,r2 // set up second base pointer for SAVE_REST
1670 ;;
1671 SAVE_REST
1672 movl r14=ia64_leave_kernel
1673 ;;
1674 mov rp=r14
1675 br.call.sptk.many b6=ia64_fault
1676END(dispatch_to_fault_handler)
1677
1676 /* 1678 /*
1677 * Squatting in this space ... 1679 * Squatting in this space ...
1678 * 1680 *
@@ -1686,11 +1688,10 @@ ENTRY(dispatch_illegal_op_fault)
1686 .prologue 1688 .prologue
1687 .body 1689 .body
1688 SAVE_MIN_WITH_COVER 1690 SAVE_MIN_WITH_COVER
1689 ssm psr.ic | PSR_DEFAULT_BITS 1691 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r24)
1690 ;; 1692 // guarantee that interruption collection is on
1691 srlz.i // guarantee that interruption collection is on
1692 ;; 1693 ;;
1693(p15) ssm psr.i // restore psr.i 1694 SSM_PSR_I(p15, p15, r3) // restore psr.i
1694 adds r3=8,r2 // set up second base pointer for SAVE_REST 1695 adds r3=8,r2 // set up second base pointer for SAVE_REST
1695 ;; 1696 ;;
1696 alloc r14=ar.pfs,0,0,1,0 // must be first in insn group 1697 alloc r14=ar.pfs,0,0,1,0 // must be first in insn group
@@ -1729,12 +1730,11 @@ END(dispatch_illegal_op_fault)
1729ENTRY(dispatch_to_ia32_handler) 1730ENTRY(dispatch_to_ia32_handler)
1730 SAVE_MIN 1731 SAVE_MIN
1731 ;; 1732 ;;
1732 mov r14=cr.isr 1733 MOV_FROM_ISR(r14)
1733 ssm psr.ic | PSR_DEFAULT_BITS 1734 SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r24)
1734 ;; 1735 // guarantee that interruption collection is on
1735 srlz.i // guarantee that interruption collection is on
1736 ;; 1736 ;;
1737(p15) ssm psr.i 1737 SSM_PSR_I(p15, p15, r3)
1738 adds r3=8,r2 // Base pointer for SAVE_REST 1738 adds r3=8,r2 // Base pointer for SAVE_REST
1739 ;; 1739 ;;
1740 SAVE_REST 1740 SAVE_REST
diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h
index 74b6d670aaef..292e214a3b84 100644
--- a/arch/ia64/kernel/minstate.h
+++ b/arch/ia64/kernel/minstate.h
@@ -2,6 +2,7 @@
2#include <asm/cache.h> 2#include <asm/cache.h>
3 3
4#include "entry.h" 4#include "entry.h"
5#include "paravirt_inst.h"
5 6
6#ifdef CONFIG_VIRT_CPU_ACCOUNTING 7#ifdef CONFIG_VIRT_CPU_ACCOUNTING
7/* read ar.itc in advance, and use it before leaving bank 0 */ 8/* read ar.itc in advance, and use it before leaving bank 0 */
@@ -43,16 +44,16 @@
43 * Note that psr.ic is NOT turned on by this macro. This is so that 44 * Note that psr.ic is NOT turned on by this macro. This is so that
44 * we can pass interruption state as arguments to a handler. 45 * we can pass interruption state as arguments to a handler.
45 */ 46 */
46#define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA,WORKAROUND) \ 47#define IA64_NATIVE_DO_SAVE_MIN(__COVER,SAVE_IFS,EXTRA,WORKAROUND) \
47 mov r16=IA64_KR(CURRENT); /* M */ \ 48 mov r16=IA64_KR(CURRENT); /* M */ \
48 mov r27=ar.rsc; /* M */ \ 49 mov r27=ar.rsc; /* M */ \
49 mov r20=r1; /* A */ \ 50 mov r20=r1; /* A */ \
50 mov r25=ar.unat; /* M */ \ 51 mov r25=ar.unat; /* M */ \
51 mov r29=cr.ipsr; /* M */ \ 52 MOV_FROM_IPSR(p0,r29); /* M */ \
52 mov r26=ar.pfs; /* I */ \ 53 mov r26=ar.pfs; /* I */ \
53 mov r28=cr.iip; /* M */ \ 54 MOV_FROM_IIP(r28); /* M */ \
54 mov r21=ar.fpsr; /* M */ \ 55 mov r21=ar.fpsr; /* M */ \
55 COVER; /* B;; (or nothing) */ \ 56 __COVER; /* B;; (or nothing) */ \
56 ;; \ 57 ;; \
57 adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16; \ 58 adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16; \
58 ;; \ 59 ;; \
@@ -244,6 +245,6 @@
2441: \ 2451: \
245 .pred.rel "mutex", pKStk, pUStk 246 .pred.rel "mutex", pKStk, pUStk
246 247
247#define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs, , RSE_WORKAROUND) 248#define SAVE_MIN_WITH_COVER DO_SAVE_MIN(COVER, mov r30=cr.ifs, , RSE_WORKAROUND)
248#define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19, RSE_WORKAROUND) 249#define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(COVER, mov r30=cr.ifs, mov r15=r19, RSE_WORKAROUND)
249#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, , ) 250#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, , )
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c
index e83e2ea3b3e0..29aad349e0c4 100644
--- a/arch/ia64/kernel/module.c
+++ b/arch/ia64/kernel/module.c
@@ -321,7 +321,8 @@ module_alloc (unsigned long size)
321void 321void
322module_free (struct module *mod, void *module_region) 322module_free (struct module *mod, void *module_region)
323{ 323{
324 if (mod->arch.init_unw_table && module_region == mod->module_init) { 324 if (mod && mod->arch.init_unw_table &&
325 module_region == mod->module_init) {
325 unw_remove_unwind_table(mod->arch.init_unw_table); 326 unw_remove_unwind_table(mod->arch.init_unw_table);
326 mod->arch.init_unw_table = NULL; 327 mod->arch.init_unw_table = NULL;
327 } 328 }
diff --git a/arch/ia64/kernel/nr-irqs.c b/arch/ia64/kernel/nr-irqs.c
new file mode 100644
index 000000000000..1ae049181e83
--- /dev/null
+++ b/arch/ia64/kernel/nr-irqs.c
@@ -0,0 +1,24 @@
1/*
2 * calculate
3 * NR_IRQS = max(IA64_NATIVE_NR_IRQS, XEN_NR_IRQS, FOO_NR_IRQS...)
4 * depending on config.
5 * This must be calculated before processing asm-offset.c.
6 */
7
8#define ASM_OFFSETS_C 1
9
10#include <linux/kbuild.h>
11#include <linux/threads.h>
12#include <asm-ia64/native/irq.h>
13
14void foo(void)
15{
16 union paravirt_nr_irqs_max {
17 char ia64_native_nr_irqs[IA64_NATIVE_NR_IRQS];
18#ifdef CONFIG_XEN
19 char xen_nr_irqs[XEN_NR_IRQS];
20#endif
21 };
22
23 DEFINE(NR_IRQS, sizeof (union paravirt_nr_irqs_max));
24}
diff --git a/arch/ia64/kernel/paravirt.c b/arch/ia64/kernel/paravirt.c
new file mode 100644
index 000000000000..afaf5b9a2cf0
--- /dev/null
+++ b/arch/ia64/kernel/paravirt.c
@@ -0,0 +1,369 @@
1/******************************************************************************
2 * arch/ia64/kernel/paravirt.c
3 *
4 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
5 * VA Linux Systems Japan K.K.
6 * Yaozu (Eddie) Dong <eddie.dong@intel.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 */
23
24#include <linux/init.h>
25
26#include <linux/compiler.h>
27#include <linux/io.h>
28#include <linux/irq.h>
29#include <linux/module.h>
30#include <linux/types.h>
31
32#include <asm/iosapic.h>
33#include <asm/paravirt.h>
34
35/***************************************************************************
36 * general info
37 */
38struct pv_info pv_info = {
39 .kernel_rpl = 0,
40 .paravirt_enabled = 0,
41 .name = "bare hardware"
42};
43
44/***************************************************************************
45 * pv_init_ops
46 * initialization hooks.
47 */
48
49struct pv_init_ops pv_init_ops;
50
51/***************************************************************************
52 * pv_cpu_ops
53 * intrinsics hooks.
54 */
55
56/* ia64_native_xxx are macros so that we have to make them real functions */
57
58#define DEFINE_VOID_FUNC1(name) \
59 static void \
60 ia64_native_ ## name ## _func(unsigned long arg) \
61 { \
62 ia64_native_ ## name(arg); \
63 } \
64
65#define DEFINE_VOID_FUNC2(name) \
66 static void \
67 ia64_native_ ## name ## _func(unsigned long arg0, \
68 unsigned long arg1) \
69 { \
70 ia64_native_ ## name(arg0, arg1); \
71 } \
72
73#define DEFINE_FUNC0(name) \
74 static unsigned long \
75 ia64_native_ ## name ## _func(void) \
76 { \
77 return ia64_native_ ## name(); \
78 }
79
80#define DEFINE_FUNC1(name, type) \
81 static unsigned long \
82 ia64_native_ ## name ## _func(type arg) \
83 { \
84 return ia64_native_ ## name(arg); \
85 } \
86
87DEFINE_VOID_FUNC1(fc);
88DEFINE_VOID_FUNC1(intrin_local_irq_restore);
89
90DEFINE_VOID_FUNC2(ptcga);
91DEFINE_VOID_FUNC2(set_rr);
92
93DEFINE_FUNC0(get_psr_i);
94
95DEFINE_FUNC1(thash, unsigned long);
96DEFINE_FUNC1(get_cpuid, int);
97DEFINE_FUNC1(get_pmd, int);
98DEFINE_FUNC1(get_rr, unsigned long);
99
100static void
101ia64_native_ssm_i_func(void)
102{
103 ia64_native_ssm(IA64_PSR_I);
104}
105
106static void
107ia64_native_rsm_i_func(void)
108{
109 ia64_native_rsm(IA64_PSR_I);
110}
111
112static void
113ia64_native_set_rr0_to_rr4_func(unsigned long val0, unsigned long val1,
114 unsigned long val2, unsigned long val3,
115 unsigned long val4)
116{
117 ia64_native_set_rr0_to_rr4(val0, val1, val2, val3, val4);
118}
119
120#define CASE_GET_REG(id) \
121 case _IA64_REG_ ## id: \
122 res = ia64_native_getreg(_IA64_REG_ ## id); \
123 break;
124#define CASE_GET_AR(id) CASE_GET_REG(AR_ ## id)
125#define CASE_GET_CR(id) CASE_GET_REG(CR_ ## id)
126
127unsigned long
128ia64_native_getreg_func(int regnum)
129{
130 unsigned long res = -1;
131 switch (regnum) {
132 CASE_GET_REG(GP);
133 CASE_GET_REG(IP);
134 CASE_GET_REG(PSR);
135 CASE_GET_REG(TP);
136 CASE_GET_REG(SP);
137
138 CASE_GET_AR(KR0);
139 CASE_GET_AR(KR1);
140 CASE_GET_AR(KR2);
141 CASE_GET_AR(KR3);
142 CASE_GET_AR(KR4);
143 CASE_GET_AR(KR5);
144 CASE_GET_AR(KR6);
145 CASE_GET_AR(KR7);
146 CASE_GET_AR(RSC);
147 CASE_GET_AR(BSP);
148 CASE_GET_AR(BSPSTORE);
149 CASE_GET_AR(RNAT);
150 CASE_GET_AR(FCR);
151 CASE_GET_AR(EFLAG);
152 CASE_GET_AR(CSD);
153 CASE_GET_AR(SSD);
154 CASE_GET_AR(CFLAG);
155 CASE_GET_AR(FSR);
156 CASE_GET_AR(FIR);
157 CASE_GET_AR(FDR);
158 CASE_GET_AR(CCV);
159 CASE_GET_AR(UNAT);
160 CASE_GET_AR(FPSR);
161 CASE_GET_AR(ITC);
162 CASE_GET_AR(PFS);
163 CASE_GET_AR(LC);
164 CASE_GET_AR(EC);
165
166 CASE_GET_CR(DCR);
167 CASE_GET_CR(ITM);
168 CASE_GET_CR(IVA);
169 CASE_GET_CR(PTA);
170 CASE_GET_CR(IPSR);
171 CASE_GET_CR(ISR);
172 CASE_GET_CR(IIP);
173 CASE_GET_CR(IFA);
174 CASE_GET_CR(ITIR);
175 CASE_GET_CR(IIPA);
176 CASE_GET_CR(IFS);
177 CASE_GET_CR(IIM);
178 CASE_GET_CR(IHA);
179 CASE_GET_CR(LID);
180 CASE_GET_CR(IVR);
181 CASE_GET_CR(TPR);
182 CASE_GET_CR(EOI);
183 CASE_GET_CR(IRR0);
184 CASE_GET_CR(IRR1);
185 CASE_GET_CR(IRR2);
186 CASE_GET_CR(IRR3);
187 CASE_GET_CR(ITV);
188 CASE_GET_CR(PMV);
189 CASE_GET_CR(CMCV);
190 CASE_GET_CR(LRR0);
191 CASE_GET_CR(LRR1);
192
193 default:
194 printk(KERN_CRIT "wrong_getreg %d\n", regnum);
195 break;
196 }
197 return res;
198}
199
200#define CASE_SET_REG(id) \
201 case _IA64_REG_ ## id: \
202 ia64_native_setreg(_IA64_REG_ ## id, val); \
203 break;
204#define CASE_SET_AR(id) CASE_SET_REG(AR_ ## id)
205#define CASE_SET_CR(id) CASE_SET_REG(CR_ ## id)
206
207void
208ia64_native_setreg_func(int regnum, unsigned long val)
209{
210 switch (regnum) {
211 case _IA64_REG_PSR_L:
212 ia64_native_setreg(_IA64_REG_PSR_L, val);
213 ia64_dv_serialize_data();
214 break;
215 CASE_SET_REG(SP);
216 CASE_SET_REG(GP);
217
218 CASE_SET_AR(KR0);
219 CASE_SET_AR(KR1);
220 CASE_SET_AR(KR2);
221 CASE_SET_AR(KR3);
222 CASE_SET_AR(KR4);
223 CASE_SET_AR(KR5);
224 CASE_SET_AR(KR6);
225 CASE_SET_AR(KR7);
226 CASE_SET_AR(RSC);
227 CASE_SET_AR(BSP);
228 CASE_SET_AR(BSPSTORE);
229 CASE_SET_AR(RNAT);
230 CASE_SET_AR(FCR);
231 CASE_SET_AR(EFLAG);
232 CASE_SET_AR(CSD);
233 CASE_SET_AR(SSD);
234 CASE_SET_AR(CFLAG);
235 CASE_SET_AR(FSR);
236 CASE_SET_AR(FIR);
237 CASE_SET_AR(FDR);
238 CASE_SET_AR(CCV);
239 CASE_SET_AR(UNAT);
240 CASE_SET_AR(FPSR);
241 CASE_SET_AR(ITC);
242 CASE_SET_AR(PFS);
243 CASE_SET_AR(LC);
244 CASE_SET_AR(EC);
245
246 CASE_SET_CR(DCR);
247 CASE_SET_CR(ITM);
248 CASE_SET_CR(IVA);
249 CASE_SET_CR(PTA);
250 CASE_SET_CR(IPSR);
251 CASE_SET_CR(ISR);
252 CASE_SET_CR(IIP);
253 CASE_SET_CR(IFA);
254 CASE_SET_CR(ITIR);
255 CASE_SET_CR(IIPA);
256 CASE_SET_CR(IFS);
257 CASE_SET_CR(IIM);
258 CASE_SET_CR(IHA);
259 CASE_SET_CR(LID);
260 CASE_SET_CR(IVR);
261 CASE_SET_CR(TPR);
262 CASE_SET_CR(EOI);
263 CASE_SET_CR(IRR0);
264 CASE_SET_CR(IRR1);
265 CASE_SET_CR(IRR2);
266 CASE_SET_CR(IRR3);
267 CASE_SET_CR(ITV);
268 CASE_SET_CR(PMV);
269 CASE_SET_CR(CMCV);
270 CASE_SET_CR(LRR0);
271 CASE_SET_CR(LRR1);
272 default:
273 printk(KERN_CRIT "wrong setreg %d\n", regnum);
274 break;
275 }
276}
277
278struct pv_cpu_ops pv_cpu_ops = {
279 .fc = ia64_native_fc_func,
280 .thash = ia64_native_thash_func,
281 .get_cpuid = ia64_native_get_cpuid_func,
282 .get_pmd = ia64_native_get_pmd_func,
283 .ptcga = ia64_native_ptcga_func,
284 .get_rr = ia64_native_get_rr_func,
285 .set_rr = ia64_native_set_rr_func,
286 .set_rr0_to_rr4 = ia64_native_set_rr0_to_rr4_func,
287 .ssm_i = ia64_native_ssm_i_func,
288 .getreg = ia64_native_getreg_func,
289 .setreg = ia64_native_setreg_func,
290 .rsm_i = ia64_native_rsm_i_func,
291 .get_psr_i = ia64_native_get_psr_i_func,
292 .intrin_local_irq_restore
293 = ia64_native_intrin_local_irq_restore_func,
294};
295EXPORT_SYMBOL(pv_cpu_ops);
296
297/******************************************************************************
298 * replacement of hand written assembly codes.
299 */
300
301void
302paravirt_cpu_asm_init(const struct pv_cpu_asm_switch *cpu_asm_switch)
303{
304 extern unsigned long paravirt_switch_to_targ;
305 extern unsigned long paravirt_leave_syscall_targ;
306 extern unsigned long paravirt_work_processed_syscall_targ;
307 extern unsigned long paravirt_leave_kernel_targ;
308
309 paravirt_switch_to_targ = cpu_asm_switch->switch_to;
310 paravirt_leave_syscall_targ = cpu_asm_switch->leave_syscall;
311 paravirt_work_processed_syscall_targ =
312 cpu_asm_switch->work_processed_syscall;
313 paravirt_leave_kernel_targ = cpu_asm_switch->leave_kernel;
314}
315
316/***************************************************************************
317 * pv_iosapic_ops
318 * iosapic read/write hooks.
319 */
320
321static unsigned int
322ia64_native_iosapic_read(char __iomem *iosapic, unsigned int reg)
323{
324 return __ia64_native_iosapic_read(iosapic, reg);
325}
326
327static void
328ia64_native_iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val)
329{
330 __ia64_native_iosapic_write(iosapic, reg, val);
331}
332
333struct pv_iosapic_ops pv_iosapic_ops = {
334 .pcat_compat_init = ia64_native_iosapic_pcat_compat_init,
335 .get_irq_chip = ia64_native_iosapic_get_irq_chip,
336
337 .__read = ia64_native_iosapic_read,
338 .__write = ia64_native_iosapic_write,
339};
340
341/***************************************************************************
342 * pv_irq_ops
343 * irq operations
344 */
345
346struct pv_irq_ops pv_irq_ops = {
347 .register_ipi = ia64_native_register_ipi,
348
349 .assign_irq_vector = ia64_native_assign_irq_vector,
350 .free_irq_vector = ia64_native_free_irq_vector,
351 .register_percpu_irq = ia64_native_register_percpu_irq,
352
353 .resend_irq = ia64_native_resend_irq,
354};
355
356/***************************************************************************
357 * pv_time_ops
358 * time operations
359 */
360
361static int
362ia64_native_do_steal_accounting(unsigned long *new_itm)
363{
364 return 0;
365}
366
367struct pv_time_ops pv_time_ops = {
368 .do_steal_accounting = ia64_native_do_steal_accounting,
369};
diff --git a/arch/ia64/kernel/paravirt_inst.h b/arch/ia64/kernel/paravirt_inst.h
new file mode 100644
index 000000000000..5cad6fb2ed19
--- /dev/null
+++ b/arch/ia64/kernel/paravirt_inst.h
@@ -0,0 +1,29 @@
1/******************************************************************************
2 * linux/arch/ia64/xen/paravirt_inst.h
3 *
4 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
5 * VA Linux Systems Japan K.K.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#ifdef __IA64_ASM_PARAVIRTUALIZED_XEN
24#include <asm/xen/inst.h>
25#include <asm/xen/minstate.h>
26#else
27#include <asm/native/inst.h>
28#endif
29
diff --git a/arch/ia64/kernel/paravirtentry.S b/arch/ia64/kernel/paravirtentry.S
new file mode 100644
index 000000000000..2f42fcb9776a
--- /dev/null
+++ b/arch/ia64/kernel/paravirtentry.S
@@ -0,0 +1,60 @@
1/******************************************************************************
2 * linux/arch/ia64/xen/paravirtentry.S
3 *
4 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
5 * VA Linux Systems Japan K.K.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#include <asm/asmmacro.h>
24#include <asm/asm-offsets.h>
25#include "entry.h"
26
27#define DATA8(sym, init_value) \
28 .pushsection .data.read_mostly ; \
29 .align 8 ; \
30 .global sym ; \
31 sym: ; \
32 data8 init_value ; \
33 .popsection
34
35#define BRANCH(targ, reg, breg) \
36 movl reg=targ ; \
37 ;; \
38 ld8 reg=[reg] ; \
39 ;; \
40 mov breg=reg ; \
41 br.cond.sptk.many breg
42
43#define BRANCH_PROC(sym, reg, breg) \
44 DATA8(paravirt_ ## sym ## _targ, ia64_native_ ## sym) ; \
45 GLOBAL_ENTRY(paravirt_ ## sym) ; \
46 BRANCH(paravirt_ ## sym ## _targ, reg, breg) ; \
47 END(paravirt_ ## sym)
48
49#define BRANCH_PROC_UNWINFO(sym, reg, breg) \
50 DATA8(paravirt_ ## sym ## _targ, ia64_native_ ## sym) ; \
51 GLOBAL_ENTRY(paravirt_ ## sym) ; \
52 PT_REGS_UNWIND_INFO(0) ; \
53 BRANCH(paravirt_ ## sym ## _targ, reg, breg) ; \
54 END(paravirt_ ## sym)
55
56
57BRANCH_PROC(switch_to, r22, b7)
58BRANCH_PROC_UNWINFO(leave_syscall, r22, b7)
59BRANCH_PROC(work_processed_syscall, r2, b7)
60BRANCH_PROC_UNWINFO(leave_kernel, r22, b7)
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index 632cda8f2e76..e5c2de9b29a5 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -51,6 +51,7 @@
51#include <asm/mca.h> 51#include <asm/mca.h>
52#include <asm/meminit.h> 52#include <asm/meminit.h>
53#include <asm/page.h> 53#include <asm/page.h>
54#include <asm/paravirt.h>
54#include <asm/patch.h> 55#include <asm/patch.h>
55#include <asm/pgtable.h> 56#include <asm/pgtable.h>
56#include <asm/processor.h> 57#include <asm/processor.h>
@@ -341,6 +342,8 @@ reserve_memory (void)
341 rsvd_region[n].end = (unsigned long) ia64_imva(_end); 342 rsvd_region[n].end = (unsigned long) ia64_imva(_end);
342 n++; 343 n++;
343 344
345 n += paravirt_reserve_memory(&rsvd_region[n]);
346
344#ifdef CONFIG_BLK_DEV_INITRD 347#ifdef CONFIG_BLK_DEV_INITRD
345 if (ia64_boot_param->initrd_start) { 348 if (ia64_boot_param->initrd_start) {
346 rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start); 349 rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start);
@@ -519,6 +522,8 @@ setup_arch (char **cmdline_p)
519{ 522{
520 unw_init(); 523 unw_init();
521 524
525 paravirt_arch_setup_early();
526
522 ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist); 527 ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);
523 528
524 *cmdline_p = __va(ia64_boot_param->command_line); 529 *cmdline_p = __va(ia64_boot_param->command_line);
@@ -583,6 +588,9 @@ setup_arch (char **cmdline_p)
583 acpi_boot_init(); 588 acpi_boot_init();
584#endif 589#endif
585 590
591 paravirt_banner();
592 paravirt_arch_setup_console(cmdline_p);
593
586#ifdef CONFIG_VT 594#ifdef CONFIG_VT
587 if (!conswitchp) { 595 if (!conswitchp) {
588# if defined(CONFIG_DUMMY_CONSOLE) 596# if defined(CONFIG_DUMMY_CONSOLE)
@@ -602,6 +610,8 @@ setup_arch (char **cmdline_p)
602#endif 610#endif
603 611
604 /* enable IA-64 Machine Check Abort Handling unless disabled */ 612 /* enable IA-64 Machine Check Abort Handling unless disabled */
613 if (paravirt_arch_setup_nomca())
614 nomca = 1;
605 if (!nomca) 615 if (!nomca)
606 ia64_mca_init(); 616 ia64_mca_init();
607 617
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index 9d1d429c6c59..03f1a9908afc 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -50,6 +50,7 @@
50#include <asm/machvec.h> 50#include <asm/machvec.h>
51#include <asm/mca.h> 51#include <asm/mca.h>
52#include <asm/page.h> 52#include <asm/page.h>
53#include <asm/paravirt.h>
53#include <asm/pgalloc.h> 54#include <asm/pgalloc.h>
54#include <asm/pgtable.h> 55#include <asm/pgtable.h>
55#include <asm/processor.h> 56#include <asm/processor.h>
@@ -642,6 +643,7 @@ void __devinit smp_prepare_boot_cpu(void)
642 cpu_set(smp_processor_id(), cpu_online_map); 643 cpu_set(smp_processor_id(), cpu_online_map);
643 cpu_set(smp_processor_id(), cpu_callin_map); 644 cpu_set(smp_processor_id(), cpu_callin_map);
644 per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; 645 per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
646 paravirt_post_smp_prepare_boot_cpu();
645} 647}
646 648
647#ifdef CONFIG_HOTPLUG_CPU 649#ifdef CONFIG_HOTPLUG_CPU
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index aad1b7b1fff9..65c10a42c88f 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -24,6 +24,7 @@
24#include <asm/machvec.h> 24#include <asm/machvec.h>
25#include <asm/delay.h> 25#include <asm/delay.h>
26#include <asm/hw_irq.h> 26#include <asm/hw_irq.h>
27#include <asm/paravirt.h>
27#include <asm/ptrace.h> 28#include <asm/ptrace.h>
28#include <asm/sal.h> 29#include <asm/sal.h>
29#include <asm/sections.h> 30#include <asm/sections.h>
@@ -48,6 +49,15 @@ EXPORT_SYMBOL(last_cli_ip);
48 49
49#endif 50#endif
50 51
52#ifdef CONFIG_PARAVIRT
53static void
54paravirt_clocksource_resume(void)
55{
56 if (pv_time_ops.clocksource_resume)
57 pv_time_ops.clocksource_resume();
58}
59#endif
60
51static struct clocksource clocksource_itc = { 61static struct clocksource clocksource_itc = {
52 .name = "itc", 62 .name = "itc",
53 .rating = 350, 63 .rating = 350,
@@ -56,6 +66,9 @@ static struct clocksource clocksource_itc = {
56 .mult = 0, /*to be calculated*/ 66 .mult = 0, /*to be calculated*/
57 .shift = 16, 67 .shift = 16,
58 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 68 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
69#ifdef CONFIG_PARAVIRT
70 .resume = paravirt_clocksource_resume,
71#endif
59}; 72};
60static struct clocksource *itc_clocksource; 73static struct clocksource *itc_clocksource;
61 74
@@ -157,6 +170,9 @@ timer_interrupt (int irq, void *dev_id)
157 170
158 profile_tick(CPU_PROFILING); 171 profile_tick(CPU_PROFILING);
159 172
173 if (paravirt_do_steal_accounting(&new_itm))
174 goto skip_process_time_accounting;
175
160 while (1) { 176 while (1) {
161 update_process_times(user_mode(get_irq_regs())); 177 update_process_times(user_mode(get_irq_regs()));
162 178
@@ -186,6 +202,8 @@ timer_interrupt (int irq, void *dev_id)
186 local_irq_disable(); 202 local_irq_disable();
187 } 203 }
188 204
205skip_process_time_accounting:
206
189 do { 207 do {
190 /* 208 /*
191 * If we're too close to the next clock tick for 209 * If we're too close to the next clock tick for
@@ -335,6 +353,11 @@ ia64_init_itm (void)
335 */ 353 */
336 clocksource_itc.rating = 50; 354 clocksource_itc.rating = 50;
337 355
356 paravirt_init_missing_ticks_accounting(smp_processor_id());
357
358 /* avoid softlock up message when cpu is unplug and plugged again. */
359 touch_softlockup_watchdog();
360
338 /* Setup the CPU local timer tick */ 361 /* Setup the CPU local timer tick */
339 ia64_cpu_local_tick(); 362 ia64_cpu_local_tick();
340 363
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S
index 5929ab10a289..5a77206c2492 100644
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -4,7 +4,6 @@
4#include <asm/system.h> 4#include <asm/system.h>
5#include <asm/pgtable.h> 5#include <asm/pgtable.h>
6 6
7#define LOAD_OFFSET (KERNEL_START - KERNEL_TR_PAGE_SIZE)
8#include <asm-generic/vmlinux.lds.h> 7#include <asm-generic/vmlinux.lds.h>
9 8
10#define IVT_TEXT \ 9#define IVT_TEXT \
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c
index b55641961232..dfd868b68364 100644
--- a/arch/mips/kernel/rtlx.c
+++ b/arch/mips/kernel/rtlx.c
@@ -522,8 +522,8 @@ static int __init rtlx_module_init(void)
522 atomic_set(&channel_wqs[i].in_open, 0); 522 atomic_set(&channel_wqs[i].in_open, 0);
523 mutex_init(&channel_wqs[i].mutex); 523 mutex_init(&channel_wqs[i].mutex);
524 524
525 dev = device_create(mt_class, NULL, MKDEV(major, i), 525 dev = device_create_drvdata(mt_class, NULL, MKDEV(major, i),
526 "%s%d", module_name, i); 526 NULL, "%s%d", module_name, i);
527 if (IS_ERR(dev)) { 527 if (IS_ERR(dev)) {
528 err = PTR_ERR(dev); 528 err = PTR_ERR(dev);
529 goto out_chrdev; 529 goto out_chrdev;
diff --git a/arch/mips/sibyte/common/sb_tbprof.c b/arch/mips/sibyte/common/sb_tbprof.c
index 28b012ab8dcb..66e3e3fb311f 100644
--- a/arch/mips/sibyte/common/sb_tbprof.c
+++ b/arch/mips/sibyte/common/sb_tbprof.c
@@ -576,7 +576,8 @@ static int __init sbprof_tb_init(void)
576 576
577 tb_class = tbc; 577 tb_class = tbc;
578 578
579 dev = device_create(tbc, NULL, MKDEV(SBPROF_TB_MAJOR, 0), "tb"); 579 dev = device_create_drvdata(tbc, NULL, MKDEV(SBPROF_TB_MAJOR, 0),
580 NULL, "tb");
580 if (IS_ERR(dev)) { 581 if (IS_ERR(dev)) {
581 err = PTR_ERR(dev); 582 err = PTR_ERR(dev);
582 goto out_class; 583 goto out_class;
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index de88972c5896..4c22242b396f 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -199,7 +199,7 @@ config ARCH_HIBERNATION_POSSIBLE
199 199
200config ARCH_SUSPEND_POSSIBLE 200config ARCH_SUSPEND_POSSIBLE
201 def_bool y 201 def_bool y
202 depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 202 depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_83xx
203 203
204config PPC_DCR_NATIVE 204config PPC_DCR_NATIVE
205 bool 205 bool
@@ -568,11 +568,15 @@ config FSL_GTM
568config MCA 568config MCA
569 bool 569 bool
570 570
571# Platforms that what PCI turned unconditionally just do select PCI
572# in their config node. Platforms that want to choose at config
573# time should select PPC_PCI_CHOICE
574config PPC_PCI_CHOICE
575 bool
576
571config PCI 577config PCI
572 bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ 578 bool "PCI support" if PPC_PCI_CHOICE
573 || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ 579 default y if !40x && !CPM2 && !8xx && !PPC_83xx \
574 || PPC_PS3 || 44x
575 default y if !40x && !CPM2 && !8xx && !PPC_MPC512x && !PPC_83xx \
576 && !PPC_85xx && !PPC_86xx 580 && !PPC_85xx && !PPC_86xx
577 default PCI_PERMEDIA if !4xx && !CPM2 && !8xx 581 default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
578 default PCI_QSPAN if !4xx && !CPM2 && 8xx 582 default PCI_QSPAN if !4xx && !CPM2 && 8xx
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 19f83c8f219d..14174aa24074 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -163,12 +163,12 @@ quiet_cmd_flex = FLEX $@
163 cmd_flex = $(FLEX) -o$@ $<; cp $@ $@_shipped 163 cmd_flex = $(FLEX) -o$@ $<; cp $@ $@_shipped
164 164
165$(obj)/dtc-src/dtc-parser.tab.c: $(src)/dtc-src/dtc-parser.y FORCE 165$(obj)/dtc-src/dtc-parser.tab.c: $(src)/dtc-src/dtc-parser.y FORCE
166 $(call if_changed,bison) 166 $(call if_changed,bison)
167 167
168$(obj)/dtc-src/dtc-parser.tab.h: $(obj)/dtc-src/dtc-parser.tab.c 168$(obj)/dtc-src/dtc-parser.tab.h: $(obj)/dtc-src/dtc-parser.tab.c
169 169
170$(obj)/dtc-src/dtc-lexer.lex.c: $(src)/dtc-src/dtc-lexer.l FORCE 170$(obj)/dtc-src/dtc-lexer.lex.c: $(src)/dtc-src/dtc-lexer.l FORCE
171 $(call if_changed,flex) 171 $(call if_changed,flex)
172endif 172endif
173 173
174############# 174#############
diff --git a/arch/powerpc/boot/dts/mpc7448hpc2.dts b/arch/powerpc/boot/dts/mpc7448hpc2.dts
index 705c23c14f32..2544f3ecd6e9 100644
--- a/arch/powerpc/boot/dts/mpc7448hpc2.dts
+++ b/arch/powerpc/boot/dts/mpc7448hpc2.dts
@@ -18,6 +18,16 @@
18 #address-cells = <1>; 18 #address-cells = <1>;
19 #size-cells = <1>; 19 #size-cells = <1>;
20 20
21 aliases {
22 ethernet0 = &enet0;
23 ethernet1 = &enet1;
24
25 serial0 = &serial0;
26 serial1 = &serial1;
27
28 pci0 = &pci0;
29 };
30
21 cpus { 31 cpus {
22 #address-cells = <1>; 32 #address-cells = <1>;
23 #size-cells =<0>; 33 #size-cells =<0>;
@@ -78,7 +88,7 @@
78 88
79 }; 89 };
80 90
81 ethernet@6200 { 91 enet0: ethernet@6200 {
82 linux,network-index = <0>; 92 linux,network-index = <0>;
83 #size-cells = <0>; 93 #size-cells = <0>;
84 device_type = "network"; 94 device_type = "network";
@@ -91,7 +101,7 @@
91 phy-handle = <&phy8>; 101 phy-handle = <&phy8>;
92 }; 102 };
93 103
94 ethernet@6600 { 104 enet1: ethernet@6600 {
95 linux,network-index = <1>; 105 linux,network-index = <1>;
96 #address-cells = <1>; 106 #address-cells = <1>;
97 #size-cells = <0>; 107 #size-cells = <0>;
@@ -105,7 +115,7 @@
105 phy-handle = <&phy9>; 115 phy-handle = <&phy9>;
106 }; 116 };
107 117
108 serial@7808 { 118 serial0: serial@7808 {
109 device_type = "serial"; 119 device_type = "serial";
110 compatible = "ns16550"; 120 compatible = "ns16550";
111 reg = <0x7808 0x200>; 121 reg = <0x7808 0x200>;
@@ -114,7 +124,7 @@
114 interrupt-parent = <&mpic>; 124 interrupt-parent = <&mpic>;
115 }; 125 };
116 126
117 serial@7c08 { 127 serial1: serial@7c08 {
118 device_type = "serial"; 128 device_type = "serial";
119 compatible = "ns16550"; 129 compatible = "ns16550";
120 reg = <0x7c08 0x200>; 130 reg = <0x7c08 0x200>;
@@ -131,7 +141,7 @@
131 compatible = "chrp,open-pic"; 141 compatible = "chrp,open-pic";
132 device_type = "open-pic"; 142 device_type = "open-pic";
133 }; 143 };
134 pci@1000 { 144 pci0: pci@1000 {
135 compatible = "tsi108-pci"; 145 compatible = "tsi108-pci";
136 device_type = "pci"; 146 device_type = "pci";
137 #interrupt-cells = <1>; 147 #interrupt-cells = <1>;
@@ -184,8 +194,4 @@
184 }; 194 };
185 }; 195 };
186 }; 196 };
187 chosen {
188 linux,stdout-path = "/tsi108@c0000000/serial@7808";
189 };
190
191}; 197};
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts
index 3664fb584026..2a94ae0dc8b8 100644
--- a/arch/powerpc/boot/dts/mpc8313erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8313erdb.dts
@@ -109,18 +109,38 @@
109 reg = <0x200 0x100>; 109 reg = <0x200 0x100>;
110 }; 110 };
111 111
112 i2c@3000 { 112 sleep-nexus {
113 #address-cells = <1>; 113 #address-cells = <1>;
114 #size-cells = <0>; 114 #size-cells = <1>;
115 cell-index = <0>; 115 compatible = "simple-bus";
116 compatible = "fsl-i2c"; 116 sleep = <&pmc 0x03000000>;
117 reg = <0x3000 0x100>; 117 ranges;
118 interrupts = <14 0x8>; 118
119 interrupt-parent = <&ipic>; 119 i2c@3000 {
120 dfsrr; 120 #address-cells = <1>;
121 rtc@68 { 121 #size-cells = <0>;
122 compatible = "dallas,ds1339"; 122 cell-index = <0>;
123 reg = <0x68>; 123 compatible = "fsl-i2c";
124 reg = <0x3000 0x100>;
125 interrupts = <14 0x8>;
126 interrupt-parent = <&ipic>;
127 dfsrr;
128 rtc@68 {
129 compatible = "dallas,ds1339";
130 reg = <0x68>;
131 };
132 };
133
134 crypto@30000 {
135 compatible = "fsl,sec2.2", "fsl,sec2.1",
136 "fsl,sec2.0";
137 reg = <0x30000 0x10000>;
138 interrupts = <11 0x8>;
139 interrupt-parent = <&ipic>;
140 fsl,num-channels = <1>;
141 fsl,channel-fifo-len = <24>;
142 fsl,exec-units-mask = <0x4c>;
143 fsl,descriptor-types-mask = <0x0122003f>;
124 }; 144 };
125 }; 145 };
126 146
@@ -188,37 +208,44 @@
188 interrupt-parent = <&ipic>; 208 interrupt-parent = <&ipic>;
189 interrupts = <38 0x8>; 209 interrupts = <38 0x8>;
190 phy_type = "utmi_wide"; 210 phy_type = "utmi_wide";
211 sleep = <&pmc 0x00300000>;
191 }; 212 };
192 213
193 mdio@24520 { 214 enet0: ethernet@24000 {
194 #address-cells = <1>; 215 #address-cells = <1>;
195 #size-cells = <0>; 216 #size-cells = <1>;
196 compatible = "fsl,gianfar-mdio"; 217 sleep = <&pmc 0x20000000>;
197 reg = <0x24520 0x20>; 218 ranges;
198 phy1: ethernet-phy@1 {
199 interrupt-parent = <&ipic>;
200 interrupts = <19 0x8>;
201 reg = <0x1>;
202 device_type = "ethernet-phy";
203 };
204 phy4: ethernet-phy@4 {
205 interrupt-parent = <&ipic>;
206 interrupts = <20 0x8>;
207 reg = <0x4>;
208 device_type = "ethernet-phy";
209 };
210 };
211 219
212 enet0: ethernet@24000 {
213 cell-index = <0>; 220 cell-index = <0>;
214 device_type = "network"; 221 device_type = "network";
215 model = "eTSEC"; 222 model = "eTSEC";
216 compatible = "gianfar"; 223 compatible = "gianfar", "simple-bus";
217 reg = <0x24000 0x1000>; 224 reg = <0x24000 0x1000>;
218 local-mac-address = [ 00 00 00 00 00 00 ]; 225 local-mac-address = [ 00 00 00 00 00 00 ];
219 interrupts = <37 0x8 36 0x8 35 0x8>; 226 interrupts = <37 0x8 36 0x8 35 0x8>;
220 interrupt-parent = <&ipic>; 227 interrupt-parent = <&ipic>;
221 phy-handle = < &phy1 >; 228 phy-handle = < &phy1 >;
229 fsl,magic-packet;
230
231 mdio@24520 {
232 #address-cells = <1>;
233 #size-cells = <0>;
234 compatible = "fsl,gianfar-mdio";
235 reg = <0x24520 0x20>;
236 phy1: ethernet-phy@1 {
237 interrupt-parent = <&ipic>;
238 interrupts = <19 0x8>;
239 reg = <0x1>;
240 device_type = "ethernet-phy";
241 };
242 phy4: ethernet-phy@4 {
243 interrupt-parent = <&ipic>;
244 interrupts = <20 0x8>;
245 reg = <0x4>;
246 device_type = "ethernet-phy";
247 };
248 };
222 }; 249 };
223 250
224 enet1: ethernet@25000 { 251 enet1: ethernet@25000 {
@@ -231,6 +258,8 @@
231 interrupts = <34 0x8 33 0x8 32 0x8>; 258 interrupts = <34 0x8 33 0x8 32 0x8>;
232 interrupt-parent = <&ipic>; 259 interrupt-parent = <&ipic>;
233 phy-handle = < &phy4 >; 260 phy-handle = < &phy4 >;
261 sleep = <&pmc 0x10000000>;
262 fsl,magic-packet;
234 }; 263 };
235 264
236 serial0: serial@4500 { 265 serial0: serial@4500 {
@@ -253,17 +282,6 @@
253 interrupt-parent = <&ipic>; 282 interrupt-parent = <&ipic>;
254 }; 283 };
255 284
256 crypto@30000 {
257 compatible = "fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0";
258 reg = <0x30000 0x10000>;
259 interrupts = <11 0x8>;
260 interrupt-parent = <&ipic>;
261 fsl,num-channels = <1>;
262 fsl,channel-fifo-len = <24>;
263 fsl,exec-units-mask = <0x4c>;
264 fsl,descriptor-types-mask = <0x0122003f>;
265 };
266
267 /* IPIC 285 /* IPIC
268 * interrupts cell = <intr #, sense> 286 * interrupts cell = <intr #, sense>
269 * sense values match linux IORESOURCE_IRQ_* defines: 287 * sense values match linux IORESOURCE_IRQ_* defines:
@@ -277,36 +295,119 @@
277 reg = <0x700 0x100>; 295 reg = <0x700 0x100>;
278 device_type = "ipic"; 296 device_type = "ipic";
279 }; 297 };
298
299 pmc: power@b00 {
300 compatible = "fsl,mpc8313-pmc", "fsl,mpc8349-pmc";
301 reg = <0xb00 0x100 0xa00 0x100>;
302 interrupts = <80 8>;
303 interrupt-parent = <&ipic>;
304 fsl,mpc8313-wakeup-timer = <&gtm1>;
305
306 /* Remove this (or change to "okay") if you have
307 * a REVA3 or later board, if you apply one of the
308 * workarounds listed in section 8.5 of the board
309 * manual, or if you are adapting this device tree
310 * to a different board.
311 */
312 status = "fail";
313 };
314
315 gtm1: timer@500 {
316 compatible = "fsl,mpc8313-gtm", "fsl,gtm";
317 reg = <0x500 0x100>;
318 interrupts = <90 8 78 8 84 8 72 8>;
319 interrupt-parent = <&ipic>;
320 };
321
322 timer@600 {
323 compatible = "fsl,mpc8313-gtm", "fsl,gtm";
324 reg = <0x600 0x100>;
325 interrupts = <91 8 79 8 85 8 73 8>;
326 interrupt-parent = <&ipic>;
327 };
280 }; 328 };
281 329
282 pci0: pci@e0008500 { 330 sleep-nexus {
283 cell-index = <1>; 331 #address-cells = <1>;
284 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 332 #size-cells = <1>;
285 interrupt-map = < 333 compatible = "simple-bus";
286 334 sleep = <&pmc 0x00010000>;
287 /* IDSEL 0x0E -mini PCI */ 335 ranges;
288 0x7000 0x0 0x0 0x1 &ipic 18 0x8 336
289 0x7000 0x0 0x0 0x2 &ipic 18 0x8 337 pci0: pci@e0008500 {
290 0x7000 0x0 0x0 0x3 &ipic 18 0x8 338 cell-index = <1>;
291 0x7000 0x0 0x0 0x4 &ipic 18 0x8 339 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
292 340 interrupt-map = <
293 /* IDSEL 0x0F - PCI slot */ 341 /* IDSEL 0x0E -mini PCI */
294 0x7800 0x0 0x0 0x1 &ipic 17 0x8 342 0x7000 0x0 0x0 0x1 &ipic 18 0x8
295 0x7800 0x0 0x0 0x2 &ipic 18 0x8 343 0x7000 0x0 0x0 0x2 &ipic 18 0x8
296 0x7800 0x0 0x0 0x3 &ipic 17 0x8 344 0x7000 0x0 0x0 0x3 &ipic 18 0x8
297 0x7800 0x0 0x0 0x4 &ipic 18 0x8>; 345 0x7000 0x0 0x0 0x4 &ipic 18 0x8
298 interrupt-parent = <&ipic>; 346
299 interrupts = <66 0x8>; 347 /* IDSEL 0x0F - PCI slot */
300 bus-range = <0x0 0x0>; 348 0x7800 0x0 0x0 0x1 &ipic 17 0x8
301 ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000 349 0x7800 0x0 0x0 0x2 &ipic 18 0x8
302 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000 350 0x7800 0x0 0x0 0x3 &ipic 17 0x8
303 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>; 351 0x7800 0x0 0x0 0x4 &ipic 18 0x8>;
304 clock-frequency = <66666666>; 352 interrupt-parent = <&ipic>;
305 #interrupt-cells = <1>; 353 interrupts = <66 0x8>;
306 #size-cells = <2>; 354 bus-range = <0x0 0x0>;
307 #address-cells = <3>; 355 ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
308 reg = <0xe0008500 0x100>; 356 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
309 compatible = "fsl,mpc8349-pci"; 357 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
310 device_type = "pci"; 358 clock-frequency = <66666666>;
359 #interrupt-cells = <1>;
360 #size-cells = <2>;
361 #address-cells = <3>;
362 reg = <0xe0008500 0x100>;
363 compatible = "fsl,mpc8349-pci";
364 device_type = "pci";
365 };
366
367 dma@82a8 {
368 #address-cells = <1>;
369 #size-cells = <1>;
370 compatible = "fsl,mpc8313-dma", "fsl,elo-dma";
371 reg = <0xe00082a8 4>;
372 ranges = <0 0xe0008100 0x1a8>;
373 interrupt-parent = <&ipic>;
374 interrupts = <71 8>;
375
376 dma-channel@0 {
377 compatible = "fsl,mpc8313-dma-channel",
378 "fsl,elo-dma-channel";
379 reg = <0 0x28>;
380 interrupt-parent = <&ipic>;
381 interrupts = <71 8>;
382 cell-index = <0>;
383 };
384
385 dma-channel@80 {
386 compatible = "fsl,mpc8313-dma-channel",
387 "fsl,elo-dma-channel";
388 reg = <0x80 0x28>;
389 interrupt-parent = <&ipic>;
390 interrupts = <71 8>;
391 cell-index = <1>;
392 };
393
394 dma-channel@100 {
395 compatible = "fsl,mpc8313-dma-channel",
396 "fsl,elo-dma-channel";
397 reg = <0x100 0x28>;
398 interrupt-parent = <&ipic>;
399 interrupts = <71 8>;
400 cell-index = <2>;
401 };
402
403 dma-channel@180 {
404 compatible = "fsl,mpc8313-dma-channel",
405 "fsl,elo-dma-channel";
406 reg = <0x180 0x28>;
407 interrupt-parent = <&ipic>;
408 interrupts = <71 8>;
409 cell-index = <3>;
410 };
411 };
311 }; 412 };
312}; 413};
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index 981941e5d7a5..666185f59459 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -388,6 +388,20 @@
388 0x01000000 0x0 0x00000000 388 0x01000000 0x0 0x00000000
389 0x01000000 0x0 0x00000000 389 0x01000000 0x0 0x00000000
390 0x0 0x00100000>; 390 0x0 0x00100000>;
391
392 isa@1e {
393 device_type = "isa";
394 #size-cells = <1>;
395 #address-cells = <2>;
396 reg = <0xf000 0 0 0 0>;
397 ranges = <1 0 0x01000000 0 0
398 0x00001000>;
399
400 rtc@70 {
401 compatible = "pnpPNP,b00";
402 reg = <1 0x70 2>;
403 };
404 };
391 }; 405 };
392 }; 406 };
393 }; 407 };
diff --git a/arch/powerpc/configs/85xx/mpc8544_ds_defconfig b/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
index 042a85ea7b72..a0583e5119f5 100644
--- a/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
@@ -997,10 +997,12 @@ CONFIG_SND=y
997CONFIG_SND_TIMER=y 997CONFIG_SND_TIMER=y
998CONFIG_SND_PCM=y 998CONFIG_SND_PCM=y
999# CONFIG_SND_SEQUENCER is not set 999# CONFIG_SND_SEQUENCER is not set
1000# CONFIG_SND_MIXER_OSS is not set 1000CONFIG_SND_OSSEMUL=y
1001# CONFIG_SND_PCM_OSS is not set 1001CONFIG_SND_MIXER_OSS=y
1002CONFIG_SND_PCM_OSS=y
1003CONFIG_SND_PCM_OSS_PLUGINS=y
1002# CONFIG_SND_DYNAMIC_MINORS is not set 1004# CONFIG_SND_DYNAMIC_MINORS is not set
1003CONFIG_SND_SUPPORT_OLD_API=y 1005# CONFIG_SND_SUPPORT_OLD_API is not set
1004CONFIG_SND_VERBOSE_PROCFS=y 1006CONFIG_SND_VERBOSE_PROCFS=y
1005# CONFIG_SND_VERBOSE_PRINTK is not set 1007# CONFIG_SND_VERBOSE_PRINTK is not set
1006# CONFIG_SND_DEBUG is not set 1008# CONFIG_SND_DEBUG is not set
diff --git a/arch/powerpc/configs/85xx/mpc8572_ds_defconfig b/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
index 03627cfebcb4..164fd9606ee6 100644
--- a/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
+++ b/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
@@ -997,10 +997,12 @@ CONFIG_SND=y
997CONFIG_SND_TIMER=y 997CONFIG_SND_TIMER=y
998CONFIG_SND_PCM=y 998CONFIG_SND_PCM=y
999# CONFIG_SND_SEQUENCER is not set 999# CONFIG_SND_SEQUENCER is not set
1000# CONFIG_SND_MIXER_OSS is not set 1000CONFIG_SND_OSSEMUL=y
1001# CONFIG_SND_PCM_OSS is not set 1001CONFIG_SND_MIXER_OSS=y
1002CONFIG_SND_PCM_OSS=y
1003CONFIG_SND_PCM_OSS_PLUGINS=y
1002# CONFIG_SND_DYNAMIC_MINORS is not set 1004# CONFIG_SND_DYNAMIC_MINORS is not set
1003CONFIG_SND_SUPPORT_OLD_API=y 1005# CONFIG_SND_SUPPORT_OLD_API is not set
1004CONFIG_SND_VERBOSE_PROCFS=y 1006CONFIG_SND_VERBOSE_PROCFS=y
1005# CONFIG_SND_VERBOSE_PRINTK is not set 1007# CONFIG_SND_VERBOSE_PRINTK is not set
1006# CONFIG_SND_DEBUG is not set 1008# CONFIG_SND_DEBUG is not set
diff --git a/arch/powerpc/configs/mpc85xx_defconfig b/arch/powerpc/configs/mpc85xx_defconfig
index 3efab71a603b..fa0170504b88 100644
--- a/arch/powerpc/configs/mpc85xx_defconfig
+++ b/arch/powerpc/configs/mpc85xx_defconfig
@@ -1005,10 +1005,12 @@ CONFIG_SND=y
1005CONFIG_SND_TIMER=y 1005CONFIG_SND_TIMER=y
1006CONFIG_SND_PCM=y 1006CONFIG_SND_PCM=y
1007# CONFIG_SND_SEQUENCER is not set 1007# CONFIG_SND_SEQUENCER is not set
1008# CONFIG_SND_MIXER_OSS is not set 1008CONFIG_SND_OSSEMUL=y
1009# CONFIG_SND_PCM_OSS is not set 1009CONFIG_SND_MIXER_OSS=y
1010CONFIG_SND_PCM_OSS=y
1011CONFIG_SND_PCM_OSS_PLUGINS=y
1010# CONFIG_SND_DYNAMIC_MINORS is not set 1012# CONFIG_SND_DYNAMIC_MINORS is not set
1011CONFIG_SND_SUPPORT_OLD_API=y 1013# CONFIG_SND_SUPPORT_OLD_API is not set
1012CONFIG_SND_VERBOSE_PROCFS=y 1014CONFIG_SND_VERBOSE_PROCFS=y
1013# CONFIG_SND_VERBOSE_PRINTK is not set 1015# CONFIG_SND_VERBOSE_PRINTK is not set
1014# CONFIG_SND_DEBUG is not set 1016# CONFIG_SND_DEBUG is not set
diff --git a/arch/powerpc/configs/mpc8610_hpcd_defconfig b/arch/powerpc/configs/mpc8610_hpcd_defconfig
index 5612d40d0463..cdf98ae3682b 100644
--- a/arch/powerpc/configs/mpc8610_hpcd_defconfig
+++ b/arch/powerpc/configs/mpc8610_hpcd_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.26-rc5 3# Linux kernel version: 2.6.26
4# Mon Jun 9 08:50:24 2008 4# Tue Jul 15 08:31:01 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -51,6 +51,8 @@ CONFIG_PPC_UDBG_16550=y
51CONFIG_AUDIT_ARCH=y 51CONFIG_AUDIT_ARCH=y
52CONFIG_GENERIC_BUG=y 52CONFIG_GENERIC_BUG=y
53CONFIG_DEFAULT_UIMAGE=y 53CONFIG_DEFAULT_UIMAGE=y
54CONFIG_HIBERNATE_32=y
55CONFIG_ARCH_HIBERNATION_POSSIBLE=y
54# CONFIG_PPC_DCR_NATIVE is not set 56# CONFIG_PPC_DCR_NATIVE is not set
55# CONFIG_PPC_DCR_MMIO is not set 57# CONFIG_PPC_DCR_MMIO is not set
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 58CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -97,6 +99,7 @@ CONFIG_HOTPLUG=y
97CONFIG_PRINTK=y 99CONFIG_PRINTK=y
98CONFIG_BUG=y 100CONFIG_BUG=y
99# CONFIG_ELF_CORE is not set 101# CONFIG_ELF_CORE is not set
102CONFIG_PCSPKR_PLATFORM=y
100CONFIG_COMPAT_BRK=y 103CONFIG_COMPAT_BRK=y
101CONFIG_BASE_FULL=y 104CONFIG_BASE_FULL=y
102CONFIG_FUTEX=y 105CONFIG_FUTEX=y
@@ -117,7 +120,7 @@ CONFIG_HAVE_OPROFILE=y
117# CONFIG_KPROBES is not set 120# CONFIG_KPROBES is not set
118CONFIG_HAVE_KPROBES=y 121CONFIG_HAVE_KPROBES=y
119CONFIG_HAVE_KRETPROBES=y 122CONFIG_HAVE_KRETPROBES=y
120# CONFIG_HAVE_DMA_ATTRS is not set 123CONFIG_HAVE_DMA_ATTRS=y
121CONFIG_PROC_PAGE_MONITOR=y 124CONFIG_PROC_PAGE_MONITOR=y
122CONFIG_SLABINFO=y 125CONFIG_SLABINFO=y
123CONFIG_RT_MUTEXES=y 126CONFIG_RT_MUTEXES=y
@@ -153,31 +156,43 @@ CONFIG_CLASSIC_RCU=y
153# 156#
154# Platform support 157# Platform support
155# 158#
156# CONFIG_PPC_MULTIPLATFORM is not set 159CONFIG_PPC_MULTIPLATFORM=y
157# CONFIG_PPC_82xx is not set 160CONFIG_CLASSIC32=y
158# CONFIG_PPC_83xx is not set 161CONFIG_PPC_CHRP=y
159CONFIG_PPC_86xx=y
160# CONFIG_PPC_MPC512x is not set 162# CONFIG_PPC_MPC512x is not set
161# CONFIG_PPC_MPC5121 is not set 163# CONFIG_PPC_MPC5121 is not set
164# CONFIG_MPC5121_ADS is not set
165# CONFIG_PPC_MPC52xx is not set
166CONFIG_PPC_PMAC=y
162# CONFIG_PPC_CELL is not set 167# CONFIG_PPC_CELL is not set
163# CONFIG_PPC_CELL_NATIVE is not set 168# CONFIG_PPC_CELL_NATIVE is not set
169# CONFIG_PPC_82xx is not set
164# CONFIG_PQ2ADS is not set 170# CONFIG_PQ2ADS is not set
171# CONFIG_PPC_83xx is not set
172CONFIG_PPC_86xx=y
165# CONFIG_MPC8641_HPCN is not set 173# CONFIG_MPC8641_HPCN is not set
166# CONFIG_SBC8641D is not set 174# CONFIG_SBC8641D is not set
167CONFIG_MPC8610_HPCD=y 175CONFIG_MPC8610_HPCD=y
168CONFIG_MPC8610=y 176CONFIG_MPC8610=y
177# CONFIG_EMBEDDED6xx is not set
178CONFIG_PPC_NATIVE=y
179# CONFIG_UDBG_RTAS_CONSOLE is not set
169# CONFIG_IPIC is not set 180# CONFIG_IPIC is not set
170CONFIG_MPIC=y 181CONFIG_MPIC=y
171# CONFIG_MPIC_WEIRD is not set 182# CONFIG_MPIC_WEIRD is not set
172# CONFIG_PPC_I8259 is not set 183CONFIG_PPC_I8259=y
173# CONFIG_PPC_RTAS is not set 184CONFIG_PPC_RTAS=y
185# CONFIG_RTAS_ERROR_LOGGING is not set
186CONFIG_RTAS_PROC=y
174# CONFIG_MMIO_NVRAM is not set 187# CONFIG_MMIO_NVRAM is not set
175# CONFIG_PPC_MPC106 is not set 188CONFIG_PPC_MPC106=y
176# CONFIG_PPC_970_NAP is not set 189# CONFIG_PPC_970_NAP is not set
177# CONFIG_PPC_INDIRECT_IO is not set 190# CONFIG_PPC_INDIRECT_IO is not set
178# CONFIG_GENERIC_IOMAP is not set 191# CONFIG_GENERIC_IOMAP is not set
179# CONFIG_CPU_FREQ is not set 192# CONFIG_CPU_FREQ is not set
180# CONFIG_FSL_ULI1575 is not set 193# CONFIG_PPC601_SYNC_FIX is not set
194# CONFIG_TAU is not set
195CONFIG_FSL_ULI1575=y
181 196
182# 197#
183# Kernel options 198# Kernel options
@@ -202,6 +217,7 @@ CONFIG_BINFMT_ELF=y
202CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 217CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
203CONFIG_ARCH_HAS_WALK_MEMORY=y 218CONFIG_ARCH_HAS_WALK_MEMORY=y
204CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y 219CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
220# CONFIG_KEXEC is not set
205CONFIG_ARCH_FLATMEM_ENABLE=y 221CONFIG_ARCH_FLATMEM_ENABLE=y
206CONFIG_ARCH_POPULATES_NODE_MAP=y 222CONFIG_ARCH_POPULATES_NODE_MAP=y
207CONFIG_SELECT_MEMORY_MODEL=y 223CONFIG_SELECT_MEMORY_MODEL=y
@@ -228,11 +244,13 @@ CONFIG_ISA_DMA_API=y
228# 244#
229# Bus options 245# Bus options
230# 246#
247# CONFIG_ISA is not set
231CONFIG_ZONE_DMA=y 248CONFIG_ZONE_DMA=y
232CONFIG_GENERIC_ISA_DMA=y 249CONFIG_GENERIC_ISA_DMA=y
233CONFIG_PPC_INDIRECT_PCI=y 250CONFIG_PPC_INDIRECT_PCI=y
234CONFIG_FSL_SOC=y 251CONFIG_FSL_SOC=y
235CONFIG_FSL_PCI=y 252CONFIG_FSL_PCI=y
253CONFIG_PPC_PCI_CHOICE=y
236CONFIG_PCI=y 254CONFIG_PCI=y
237CONFIG_PCI_DOMAINS=y 255CONFIG_PCI_DOMAINS=y
238CONFIG_PCI_SYSCALL=y 256CONFIG_PCI_SYSCALL=y
@@ -469,6 +487,7 @@ CONFIG_OF_I2C=y
469# CONFIG_PARPORT is not set 487# CONFIG_PARPORT is not set
470CONFIG_BLK_DEV=y 488CONFIG_BLK_DEV=y
471# CONFIG_BLK_DEV_FD is not set 489# CONFIG_BLK_DEV_FD is not set
490# CONFIG_MAC_FLOPPY is not set
472# CONFIG_BLK_CPQ_DA is not set 491# CONFIG_BLK_CPQ_DA is not set
473# CONFIG_BLK_CPQ_CISS_DA is not set 492# CONFIG_BLK_CPQ_CISS_DA is not set
474# CONFIG_BLK_DEV_DAC960 is not set 493# CONFIG_BLK_DEV_DAC960 is not set
@@ -571,6 +590,8 @@ CONFIG_SCSI_LOWLEVEL=y
571# CONFIG_SCSI_DC390T is not set 590# CONFIG_SCSI_DC390T is not set
572# CONFIG_SCSI_NSP32 is not set 591# CONFIG_SCSI_NSP32 is not set
573# CONFIG_SCSI_DEBUG is not set 592# CONFIG_SCSI_DEBUG is not set
593# CONFIG_SCSI_MESH is not set
594# CONFIG_SCSI_MAC53C94 is not set
574# CONFIG_SCSI_SRP is not set 595# CONFIG_SCSI_SRP is not set
575CONFIG_ATA=y 596CONFIG_ATA=y
576# CONFIG_ATA_NONSTANDARD is not set 597# CONFIG_ATA_NONSTANDARD is not set
@@ -639,6 +660,10 @@ CONFIG_PATA_ALI=y
639# 660#
640# IEEE 1394 (FireWire) support 661# IEEE 1394 (FireWire) support
641# 662#
663
664#
665# Enable only one of the two stacks, unless you know what you are doing
666#
642# CONFIG_FIREWIRE is not set 667# CONFIG_FIREWIRE is not set
643# CONFIG_IEEE1394 is not set 668# CONFIG_IEEE1394 is not set
644# CONFIG_I2O is not set 669# CONFIG_I2O is not set
@@ -655,6 +680,8 @@ CONFIG_DUMMY=y
655# CONFIG_PHYLIB is not set 680# CONFIG_PHYLIB is not set
656CONFIG_NET_ETHERNET=y 681CONFIG_NET_ETHERNET=y
657# CONFIG_MII is not set 682# CONFIG_MII is not set
683# CONFIG_MACE is not set
684# CONFIG_BMAC is not set
658# CONFIG_HAPPYMEAL is not set 685# CONFIG_HAPPYMEAL is not set
659# CONFIG_SUNGEM is not set 686# CONFIG_SUNGEM is not set
660# CONFIG_CASSINI is not set 687# CONFIG_CASSINI is not set
@@ -762,14 +789,16 @@ CONFIG_SERIAL_8250_RSA=y
762# CONFIG_SERIAL_UARTLITE is not set 789# CONFIG_SERIAL_UARTLITE is not set
763CONFIG_SERIAL_CORE=y 790CONFIG_SERIAL_CORE=y
764CONFIG_SERIAL_CORE_CONSOLE=y 791CONFIG_SERIAL_CORE_CONSOLE=y
792# CONFIG_SERIAL_PMACZILOG is not set
765# CONFIG_SERIAL_JSM is not set 793# CONFIG_SERIAL_JSM is not set
766# CONFIG_SERIAL_OF_PLATFORM is not set 794# CONFIG_SERIAL_OF_PLATFORM is not set
767CONFIG_UNIX98_PTYS=y 795CONFIG_UNIX98_PTYS=y
768# CONFIG_LEGACY_PTYS is not set 796# CONFIG_LEGACY_PTYS is not set
797# CONFIG_BRIQ_PANEL is not set
798# CONFIG_HVC_RTAS is not set
769# CONFIG_IPMI_HANDLER is not set 799# CONFIG_IPMI_HANDLER is not set
770# CONFIG_HW_RANDOM is not set 800# CONFIG_HW_RANDOM is not set
771# CONFIG_NVRAM is not set 801# CONFIG_NVRAM is not set
772# CONFIG_GEN_RTC is not set
773# CONFIG_R3964 is not set 802# CONFIG_R3964 is not set
774# CONFIG_APPLICOM is not set 803# CONFIG_APPLICOM is not set
775# CONFIG_RAW_DRIVER is not set 804# CONFIG_RAW_DRIVER is not set
@@ -787,9 +816,11 @@ CONFIG_I2C_BOARDINFO=y
787# CONFIG_I2C_ALI15X3 is not set 816# CONFIG_I2C_ALI15X3 is not set
788# CONFIG_I2C_AMD756 is not set 817# CONFIG_I2C_AMD756 is not set
789# CONFIG_I2C_AMD8111 is not set 818# CONFIG_I2C_AMD8111 is not set
819# CONFIG_I2C_HYDRA is not set
790# CONFIG_I2C_I801 is not set 820# CONFIG_I2C_I801 is not set
791# CONFIG_I2C_I810 is not set 821# CONFIG_I2C_I810 is not set
792# CONFIG_I2C_PIIX4 is not set 822# CONFIG_I2C_PIIX4 is not set
823CONFIG_I2C_POWERMAC=y
793CONFIG_I2C_MPC=y 824CONFIG_I2C_MPC=y
794# CONFIG_I2C_NFORCE2 is not set 825# CONFIG_I2C_NFORCE2 is not set
795# CONFIG_I2C_OCORES is not set 826# CONFIG_I2C_OCORES is not set
@@ -826,6 +857,7 @@ CONFIG_I2C_MPC=y
826# CONFIG_POWER_SUPPLY is not set 857# CONFIG_POWER_SUPPLY is not set
827# CONFIG_HWMON is not set 858# CONFIG_HWMON is not set
828# CONFIG_THERMAL is not set 859# CONFIG_THERMAL is not set
860# CONFIG_THERMAL_HWMON is not set
829# CONFIG_WATCHDOG is not set 861# CONFIG_WATCHDOG is not set
830 862
831# 863#
@@ -888,6 +920,9 @@ CONFIG_FB_CFB_IMAGEBLIT=y
888# CONFIG_FB_PM2 is not set 920# CONFIG_FB_PM2 is not set
889# CONFIG_FB_CYBER2000 is not set 921# CONFIG_FB_CYBER2000 is not set
890# CONFIG_FB_OF is not set 922# CONFIG_FB_OF is not set
923# CONFIG_FB_CONTROL is not set
924# CONFIG_FB_PLATINUM is not set
925# CONFIG_FB_VALKYRIE is not set
891# CONFIG_FB_CT65550 is not set 926# CONFIG_FB_CT65550 is not set
892# CONFIG_FB_ASILIANT is not set 927# CONFIG_FB_ASILIANT is not set
893# CONFIG_FB_IMSTT is not set 928# CONFIG_FB_IMSTT is not set
@@ -1027,12 +1062,19 @@ CONFIG_SND_VERBOSE_PROCFS=y
1027# 1062#
1028# ALSA PowerMac devices 1063# ALSA PowerMac devices
1029# 1064#
1065# CONFIG_SND_POWERMAC is not set
1030 1066
1031# 1067#
1032# ALSA PowerPC devices 1068# ALSA PowerPC devices
1033# 1069#
1034 1070
1035# 1071#
1072# Apple Onboard Audio driver
1073#
1074# CONFIG_SND_AOA is not set
1075# CONFIG_SND_AOA_SOUNDBUS is not set
1076
1077#
1036# System on Chip audio support 1078# System on Chip audio support
1037# 1079#
1038CONFIG_SND_SOC=y 1080CONFIG_SND_SOC=y
@@ -1075,7 +1117,57 @@ CONFIG_USB_ARCH_HAS_EHCI=y
1075# CONFIG_ACCESSIBILITY is not set 1117# CONFIG_ACCESSIBILITY is not set
1076# CONFIG_INFINIBAND is not set 1118# CONFIG_INFINIBAND is not set
1077# CONFIG_EDAC is not set 1119# CONFIG_EDAC is not set
1078# CONFIG_RTC_CLASS is not set 1120CONFIG_RTC_LIB=y
1121CONFIG_RTC_CLASS=y
1122CONFIG_RTC_HCTOSYS=y
1123CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1124# CONFIG_RTC_DEBUG is not set
1125
1126#
1127# RTC interfaces
1128#
1129CONFIG_RTC_INTF_SYSFS=y
1130CONFIG_RTC_INTF_PROC=y
1131CONFIG_RTC_INTF_DEV=y
1132# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1133# CONFIG_RTC_DRV_TEST is not set
1134
1135#
1136# I2C RTC drivers
1137#
1138# CONFIG_RTC_DRV_DS1307 is not set
1139# CONFIG_RTC_DRV_DS1374 is not set
1140# CONFIG_RTC_DRV_DS1672 is not set
1141# CONFIG_RTC_DRV_MAX6900 is not set
1142# CONFIG_RTC_DRV_RS5C372 is not set
1143# CONFIG_RTC_DRV_ISL1208 is not set
1144# CONFIG_RTC_DRV_X1205 is not set
1145# CONFIG_RTC_DRV_PCF8563 is not set
1146# CONFIG_RTC_DRV_PCF8583 is not set
1147# CONFIG_RTC_DRV_M41T80 is not set
1148# CONFIG_RTC_DRV_S35390A is not set
1149# CONFIG_RTC_DRV_FM3130 is not set
1150
1151#
1152# SPI RTC drivers
1153#
1154
1155#
1156# Platform RTC drivers
1157#
1158CONFIG_RTC_DRV_CMOS=y
1159# CONFIG_RTC_DRV_DS1511 is not set
1160# CONFIG_RTC_DRV_DS1553 is not set
1161# CONFIG_RTC_DRV_DS1742 is not set
1162# CONFIG_RTC_DRV_STK17TA8 is not set
1163# CONFIG_RTC_DRV_M48T86 is not set
1164# CONFIG_RTC_DRV_M48T59 is not set
1165# CONFIG_RTC_DRV_V3020 is not set
1166
1167#
1168# on-CPU RTC drivers
1169#
1170# CONFIG_RTC_DRV_PPC is not set
1079# CONFIG_DMADEVICES is not set 1171# CONFIG_DMADEVICES is not set
1080# CONFIG_UIO is not set 1172# CONFIG_UIO is not set
1081 1173
@@ -1295,8 +1387,11 @@ CONFIG_DEBUG_INFO=y
1295# CONFIG_DEBUG_STACK_USAGE is not set 1387# CONFIG_DEBUG_STACK_USAGE is not set
1296# CONFIG_DEBUG_PAGEALLOC is not set 1388# CONFIG_DEBUG_PAGEALLOC is not set
1297# CONFIG_DEBUGGER is not set 1389# CONFIG_DEBUGGER is not set
1390# CONFIG_CODE_PATCHING_SELFTEST is not set
1391# CONFIG_FTR_FIXUP_SELFTEST is not set
1298# CONFIG_IRQSTACKS is not set 1392# CONFIG_IRQSTACKS is not set
1299# CONFIG_BDI_SWITCH is not set 1393# CONFIG_BDI_SWITCH is not set
1394# CONFIG_BOOTX_TEXT is not set
1300# CONFIG_PPC_EARLY_DEBUG is not set 1395# CONFIG_PPC_EARLY_DEBUG is not set
1301 1396
1302# 1397#
diff --git a/arch/powerpc/configs/mpc8641_hpcn_defconfig b/arch/powerpc/configs/mpc8641_hpcn_defconfig
index 4a8171507391..867b8c0215f3 100644
--- a/arch/powerpc/configs/mpc8641_hpcn_defconfig
+++ b/arch/powerpc/configs/mpc8641_hpcn_defconfig
@@ -991,10 +991,12 @@ CONFIG_SND=y
991CONFIG_SND_TIMER=y 991CONFIG_SND_TIMER=y
992CONFIG_SND_PCM=y 992CONFIG_SND_PCM=y
993# CONFIG_SND_SEQUENCER is not set 993# CONFIG_SND_SEQUENCER is not set
994# CONFIG_SND_MIXER_OSS is not set 994CONFIG_SND_OSSEMUL=y
995# CONFIG_SND_PCM_OSS is not set 995CONFIG_SND_MIXER_OSS=y
996CONFIG_SND_PCM_OSS=y
997CONFIG_SND_PCM_OSS_PLUGINS=y
996# CONFIG_SND_DYNAMIC_MINORS is not set 998# CONFIG_SND_DYNAMIC_MINORS is not set
997CONFIG_SND_SUPPORT_OLD_API=y 999# CONFIG_SND_SUPPORT_OLD_API is not set
998CONFIG_SND_VERBOSE_PROCFS=y 1000CONFIG_SND_VERBOSE_PROCFS=y
999# CONFIG_SND_VERBOSE_PRINTK is not set 1001# CONFIG_SND_VERBOSE_PRINTK is not set
1000# CONFIG_SND_DEBUG is not set 1002# CONFIG_SND_DEBUG is not set
diff --git a/arch/powerpc/configs/ppc6xx_defconfig b/arch/powerpc/configs/ppc6xx_defconfig
new file mode 100644
index 000000000000..e6e91c85da31
--- /dev/null
+++ b/arch/powerpc/configs/ppc6xx_defconfig
@@ -0,0 +1,3304 @@
1# powerpc
2#
3# Automatically generated make config: don't edit
4# Linux kernel version: 2.6.26-git2
5# Tue Jul 15 23:54:18 2008
6#
7# CONFIG_PPC64 is not set
8
9#
10# Processor support
11#
12CONFIG_6xx=y
13# CONFIG_PPC_85xx is not set
14# CONFIG_PPC_8xx is not set
15# CONFIG_40x is not set
16# CONFIG_44x is not set
17# CONFIG_E200 is not set
18CONFIG_PPC_FPU=y
19CONFIG_FSL_EMB_PERFMON=y
20CONFIG_ALTIVEC=y
21CONFIG_PPC_STD_MMU=y
22CONFIG_PPC_STD_MMU_32=y
23# CONFIG_PPC_MM_SLICES is not set
24# CONFIG_SMP is not set
25CONFIG_PPC32=y
26CONFIG_WORD_SIZE=32
27CONFIG_PPC_MERGE=y
28CONFIG_MMU=y
29CONFIG_GENERIC_CMOS_UPDATE=y
30CONFIG_GENERIC_TIME=y
31CONFIG_GENERIC_TIME_VSYSCALL=y
32CONFIG_GENERIC_CLOCKEVENTS=y
33CONFIG_GENERIC_HARDIRQS=y
34# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
35CONFIG_IRQ_PER_CPU=y
36CONFIG_STACKTRACE_SUPPORT=y
37CONFIG_HAVE_LATENCYTOP_SUPPORT=y
38CONFIG_LOCKDEP_SUPPORT=y
39CONFIG_RWSEM_XCHGADD_ALGORITHM=y
40CONFIG_ARCH_HAS_ILOG2_U32=y
41CONFIG_GENERIC_HWEIGHT=y
42CONFIG_GENERIC_CALIBRATE_DELAY=y
43CONFIG_GENERIC_FIND_NEXT_BIT=y
44CONFIG_GENERIC_GPIO=y
45# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
46CONFIG_PPC=y
47CONFIG_EARLY_PRINTK=y
48CONFIG_GENERIC_NVRAM=y
49CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
50CONFIG_ARCH_MAY_HAVE_PC_FDC=y
51CONFIG_PPC_OF=y
52CONFIG_OF=y
53CONFIG_PPC_UDBG_16550=y
54# CONFIG_GENERIC_TBSYNC is not set
55CONFIG_AUDIT_ARCH=y
56CONFIG_GENERIC_BUG=y
57CONFIG_SYS_SUPPORTS_APM_EMULATION=y
58CONFIG_DEFAULT_UIMAGE=y
59CONFIG_REDBOOT=y
60CONFIG_HIBERNATE_32=y
61CONFIG_ARCH_HIBERNATION_POSSIBLE=y
62CONFIG_ARCH_SUSPEND_POSSIBLE=y
63# CONFIG_PPC_DCR_NATIVE is not set
64# CONFIG_PPC_DCR_MMIO is not set
65CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
66
67#
68# General setup
69#
70CONFIG_EXPERIMENTAL=y
71CONFIG_BROKEN_ON_SMP=y
72CONFIG_INIT_ENV_ARG_LIMIT=32
73CONFIG_LOCALVERSION=""
74# CONFIG_LOCALVERSION_AUTO is not set
75CONFIG_SWAP=y
76CONFIG_SYSVIPC=y
77CONFIG_SYSVIPC_SYSCTL=y
78CONFIG_POSIX_MQUEUE=y
79CONFIG_BSD_PROCESS_ACCT=y
80# CONFIG_BSD_PROCESS_ACCT_V3 is not set
81CONFIG_TASKSTATS=y
82CONFIG_TASK_DELAY_ACCT=y
83CONFIG_TASK_XACCT=y
84CONFIG_TASK_IO_ACCOUNTING=y
85CONFIG_AUDIT=y
86CONFIG_AUDITSYSCALL=y
87CONFIG_AUDIT_TREE=y
88# CONFIG_IKCONFIG is not set
89CONFIG_LOG_BUF_SHIFT=17
90CONFIG_CGROUPS=y
91# CONFIG_CGROUP_DEBUG is not set
92CONFIG_CGROUP_NS=y
93CONFIG_CGROUP_DEVICE=y
94CONFIG_GROUP_SCHED=y
95CONFIG_FAIR_GROUP_SCHED=y
96CONFIG_RT_GROUP_SCHED=y
97# CONFIG_USER_SCHED is not set
98CONFIG_CGROUP_SCHED=y
99CONFIG_CGROUP_CPUACCT=y
100CONFIG_RESOURCE_COUNTERS=y
101# CONFIG_CGROUP_MEM_RES_CTLR is not set
102# CONFIG_SYSFS_DEPRECATED_V2 is not set
103CONFIG_RELAY=y
104CONFIG_NAMESPACES=y
105CONFIG_UTS_NS=y
106CONFIG_IPC_NS=y
107CONFIG_USER_NS=y
108CONFIG_PID_NS=y
109CONFIG_BLK_DEV_INITRD=y
110CONFIG_INITRAMFS_SOURCE=""
111CONFIG_CC_OPTIMIZE_FOR_SIZE=y
112CONFIG_SYSCTL=y
113# CONFIG_EMBEDDED is not set
114CONFIG_SYSCTL_SYSCALL=y
115CONFIG_SYSCTL_SYSCALL_CHECK=y
116CONFIG_KALLSYMS=y
117CONFIG_KALLSYMS_ALL=y
118CONFIG_KALLSYMS_EXTRA_PASS=y
119CONFIG_HOTPLUG=y
120CONFIG_PRINTK=y
121CONFIG_BUG=y
122CONFIG_ELF_CORE=y
123CONFIG_PCSPKR_PLATFORM=y
124# CONFIG_COMPAT_BRK is not set
125CONFIG_BASE_FULL=y
126CONFIG_FUTEX=y
127CONFIG_ANON_INODES=y
128CONFIG_EPOLL=y
129CONFIG_SIGNALFD=y
130CONFIG_TIMERFD=y
131CONFIG_EVENTFD=y
132CONFIG_SHMEM=y
133CONFIG_VM_EVENT_COUNTERS=y
134CONFIG_SLUB_DEBUG=y
135# CONFIG_SLAB is not set
136CONFIG_SLUB=y
137# CONFIG_SLOB is not set
138CONFIG_PROFILING=y
139CONFIG_MARKERS=y
140CONFIG_OPROFILE=m
141CONFIG_HAVE_OPROFILE=y
142CONFIG_KPROBES=y
143CONFIG_KRETPROBES=y
144CONFIG_HAVE_KPROBES=y
145CONFIG_HAVE_KRETPROBES=y
146# CONFIG_HAVE_DMA_ATTRS is not set
147# CONFIG_USE_GENERIC_SMP_HELPERS is not set
148CONFIG_PROC_PAGE_MONITOR=y
149CONFIG_SLABINFO=y
150CONFIG_RT_MUTEXES=y
151# CONFIG_TINY_SHMEM is not set
152CONFIG_BASE_SMALL=0
153CONFIG_MODULES=y
154# CONFIG_MODULE_FORCE_LOAD is not set
155CONFIG_MODULE_UNLOAD=y
156# CONFIG_MODULE_FORCE_UNLOAD is not set
157# CONFIG_MODVERSIONS is not set
158CONFIG_MODULE_SRCVERSION_ALL=y
159CONFIG_KMOD=y
160CONFIG_BLOCK=y
161CONFIG_LBD=y
162CONFIG_BLK_DEV_IO_TRACE=y
163CONFIG_LSF=y
164CONFIG_BLK_DEV_BSG=y
165CONFIG_BLK_DEV_INTEGRITY=y
166
167#
168# IO Schedulers
169#
170CONFIG_IOSCHED_NOOP=y
171CONFIG_IOSCHED_AS=y
172CONFIG_IOSCHED_DEADLINE=y
173CONFIG_IOSCHED_CFQ=y
174# CONFIG_DEFAULT_AS is not set
175# CONFIG_DEFAULT_DEADLINE is not set
176CONFIG_DEFAULT_CFQ=y
177# CONFIG_DEFAULT_NOOP is not set
178CONFIG_DEFAULT_IOSCHED="cfq"
179CONFIG_CLASSIC_RCU=y
180
181#
182# Platform support
183#
184CONFIG_PPC_MULTIPLATFORM=y
185CONFIG_CLASSIC32=y
186CONFIG_PPC_CHRP=y
187# CONFIG_MPC5121_ADS is not set
188# CONFIG_MPC5121_GENERIC is not set
189CONFIG_PPC_MPC52xx=y
190# CONFIG_PPC_MPC5200_SIMPLE is not set
191CONFIG_PPC_EFIKA=y
192# CONFIG_PPC_LITE5200 is not set
193CONFIG_PPC_MPC5200_BUGFIX=y
194CONFIG_PPC_MPC5200_GPIO=y
195CONFIG_PPC_PMAC=y
196# CONFIG_PPC_CELL is not set
197# CONFIG_PPC_CELL_NATIVE is not set
198CONFIG_PPC_82xx=y
199CONFIG_MPC8272_ADS=y
200CONFIG_PQ2FADS=y
201CONFIG_EP8248E=y
202CONFIG_PQ2ADS=y
203CONFIG_8260=y
204CONFIG_8272=y
205CONFIG_PQ2_ADS_PCI_PIC=y
206CONFIG_PPC_83xx=y
207CONFIG_MPC831x_RDB=y
208CONFIG_MPC832x_MDS=y
209CONFIG_MPC832x_RDB=y
210CONFIG_MPC834x_MDS=y
211CONFIG_MPC834x_ITX=y
212CONFIG_MPC836x_MDS=y
213CONFIG_MPC836x_RDK=y
214CONFIG_MPC837x_MDS=y
215CONFIG_MPC837x_RDB=y
216CONFIG_SBC834x=y
217CONFIG_ASP834x=y
218CONFIG_PPC_MPC831x=y
219CONFIG_PPC_MPC832x=y
220CONFIG_PPC_MPC834x=y
221CONFIG_PPC_MPC837x=y
222CONFIG_PPC_86xx=y
223CONFIG_MPC8641_HPCN=y
224CONFIG_SBC8641D=y
225CONFIG_MPC8610_HPCD=y
226CONFIG_MPC8641=y
227CONFIG_MPC8610=y
228# CONFIG_EMBEDDED6xx is not set
229CONFIG_PPC_NATIVE=y
230# CONFIG_UDBG_RTAS_CONSOLE is not set
231CONFIG_IPIC=y
232CONFIG_MPIC=y
233# CONFIG_MPIC_WEIRD is not set
234CONFIG_PPC_I8259=y
235CONFIG_PPC_RTAS=y
236# CONFIG_RTAS_ERROR_LOGGING is not set
237CONFIG_RTAS_PROC=y
238# CONFIG_MMIO_NVRAM is not set
239CONFIG_PPC_MPC106=y
240# CONFIG_PPC_970_NAP is not set
241# CONFIG_PPC_INDIRECT_IO is not set
242# CONFIG_GENERIC_IOMAP is not set
243CONFIG_CPU_FREQ=y
244CONFIG_CPU_FREQ_TABLE=y
245CONFIG_CPU_FREQ_DEBUG=y
246CONFIG_CPU_FREQ_STAT=m
247CONFIG_CPU_FREQ_STAT_DETAILS=y
248# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
249# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
250CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
251# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
252# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
253CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
254CONFIG_CPU_FREQ_GOV_POWERSAVE=m
255CONFIG_CPU_FREQ_GOV_USERSPACE=y
256CONFIG_CPU_FREQ_GOV_ONDEMAND=m
257CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
258
259#
260# CPU Frequency drivers
261#
262CONFIG_CPU_FREQ_PMAC=y
263# CONFIG_PPC601_SYNC_FIX is not set
264CONFIG_TAU=y
265# CONFIG_TAU_INT is not set
266CONFIG_TAU_AVERAGE=y
267CONFIG_QUICC_ENGINE=y
268CONFIG_CPM2=y
269CONFIG_PPC_CPM_NEW_BINDING=y
270CONFIG_FSL_ULI1575=y
271CONFIG_CPM=y
272CONFIG_PPC_BESTCOMM=y
273CONFIG_PPC_BESTCOMM_ATA=m
274CONFIG_PPC_BESTCOMM_FEC=m
275CONFIG_PPC_BESTCOMM_GEN_BD=m
276
277#
278# Kernel options
279#
280CONFIG_HIGHMEM=y
281CONFIG_TICK_ONESHOT=y
282CONFIG_NO_HZ=y
283CONFIG_HIGH_RES_TIMERS=y
284CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
285# CONFIG_HZ_100 is not set
286# CONFIG_HZ_250 is not set
287# CONFIG_HZ_300 is not set
288CONFIG_HZ_1000=y
289CONFIG_HZ=1000
290# CONFIG_SCHED_HRTICK is not set
291# CONFIG_PREEMPT_NONE is not set
292CONFIG_PREEMPT_VOLUNTARY=y
293# CONFIG_PREEMPT is not set
294CONFIG_BINFMT_ELF=y
295CONFIG_BINFMT_MISC=y
296# CONFIG_MATH_EMULATION is not set
297# CONFIG_IOMMU_HELPER is not set
298CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
299CONFIG_ARCH_HAS_WALK_MEMORY=y
300CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
301# CONFIG_KEXEC is not set
302CONFIG_ARCH_FLATMEM_ENABLE=y
303CONFIG_ARCH_POPULATES_NODE_MAP=y
304CONFIG_SELECT_MEMORY_MODEL=y
305CONFIG_FLATMEM_MANUAL=y
306# CONFIG_DISCONTIGMEM_MANUAL is not set
307# CONFIG_SPARSEMEM_MANUAL is not set
308CONFIG_FLATMEM=y
309CONFIG_FLAT_NODE_MEM_MAP=y
310# CONFIG_SPARSEMEM_STATIC is not set
311# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
312CONFIG_PAGEFLAGS_EXTENDED=y
313CONFIG_SPLIT_PTLOCK_CPUS=4
314CONFIG_RESOURCES_64BIT=y
315CONFIG_ZONE_DMA_FLAG=1
316CONFIG_BOUNCE=y
317CONFIG_VIRT_TO_BUS=y
318CONFIG_FORCE_MAX_ZONEORDER=11
319CONFIG_PROC_DEVICETREE=y
320# CONFIG_CMDLINE_BOOL is not set
321CONFIG_EXTRA_TARGETS=""
322CONFIG_ARCH_WANTS_FREEZER_CONTROL=y
323CONFIG_PM=y
324CONFIG_PM_DEBUG=y
325# CONFIG_PM_VERBOSE is not set
326CONFIG_CAN_PM_TRACE=y
327CONFIG_PM_SLEEP=y
328CONFIG_SUSPEND=y
329CONFIG_SUSPEND_FREEZER=y
330CONFIG_HIBERNATION=y
331CONFIG_PM_STD_PARTITION=""
332CONFIG_APM_EMULATION=y
333CONFIG_SECCOMP=y
334CONFIG_ISA_DMA_API=y
335
336#
337# Bus options
338#
339CONFIG_ISA=y
340CONFIG_ZONE_DMA=y
341CONFIG_GENERIC_ISA_DMA=y
342CONFIG_PPC_INDIRECT_PCI=y
343CONFIG_FSL_SOC=y
344CONFIG_FSL_PCI=y
345CONFIG_FSL_LBC=y
346CONFIG_FSL_GTM=y
347CONFIG_PCI=y
348CONFIG_PCI_DOMAINS=y
349CONFIG_PCI_SYSCALL=y
350CONFIG_PCI_8260=y
351CONFIG_PCIEPORTBUS=y
352CONFIG_PCIEAER=y
353CONFIG_PCIEASPM=y
354# CONFIG_PCIEASPM_DEBUG is not set
355CONFIG_ARCH_SUPPORTS_MSI=y
356CONFIG_PCI_MSI=y
357CONFIG_PCI_LEGACY=y
358# CONFIG_PCI_DEBUG is not set
359CONFIG_PCCARD=y
360# CONFIG_PCMCIA_DEBUG is not set
361CONFIG_PCMCIA=y
362CONFIG_PCMCIA_LOAD_CIS=y
363CONFIG_PCMCIA_IOCTL=y
364CONFIG_CARDBUS=y
365
366#
367# PC-card bridges
368#
369CONFIG_YENTA=y
370CONFIG_YENTA_O2=y
371CONFIG_YENTA_RICOH=y
372CONFIG_YENTA_TI=y
373CONFIG_YENTA_ENE_TUNE=y
374CONFIG_YENTA_TOSHIBA=y
375CONFIG_PD6729=m
376CONFIG_I82092=m
377CONFIG_I82365=m
378# CONFIG_TCIC is not set
379CONFIG_PCMCIA_PROBE=y
380CONFIG_PCCARD_NONSTATIC=y
381# CONFIG_HOTPLUG_PCI is not set
382CONFIG_HAS_RAPIDIO=y
383# CONFIG_RAPIDIO is not set
384
385#
386# Advanced setup
387#
388CONFIG_ADVANCED_OPTIONS=y
389# CONFIG_LOWMEM_SIZE_BOOL is not set
390CONFIG_LOWMEM_SIZE=0x30000000
391# CONFIG_PAGE_OFFSET_BOOL is not set
392CONFIG_PAGE_OFFSET=0xc0000000
393# CONFIG_KERNEL_START_BOOL is not set
394CONFIG_KERNEL_START=0xc0000000
395CONFIG_PHYSICAL_START=0x00000000
396# CONFIG_TASK_SIZE_BOOL is not set
397CONFIG_TASK_SIZE=0xc0000000
398
399#
400# Networking
401#
402CONFIG_NET=y
403
404#
405# Networking options
406#
407CONFIG_PACKET=y
408CONFIG_PACKET_MMAP=y
409CONFIG_UNIX=y
410CONFIG_XFRM=y
411CONFIG_XFRM_USER=y
412CONFIG_XFRM_SUB_POLICY=y
413CONFIG_XFRM_MIGRATE=y
414CONFIG_XFRM_STATISTICS=y
415CONFIG_NET_KEY=m
416CONFIG_NET_KEY_MIGRATE=y
417CONFIG_INET=y
418CONFIG_IP_MULTICAST=y
419CONFIG_IP_ADVANCED_ROUTER=y
420CONFIG_ASK_IP_FIB_HASH=y
421# CONFIG_IP_FIB_TRIE is not set
422CONFIG_IP_FIB_HASH=y
423CONFIG_IP_MULTIPLE_TABLES=y
424CONFIG_IP_ROUTE_MULTIPATH=y
425CONFIG_IP_ROUTE_VERBOSE=y
426# CONFIG_IP_PNP is not set
427CONFIG_NET_IPIP=m
428CONFIG_NET_IPGRE=m
429CONFIG_NET_IPGRE_BROADCAST=y
430CONFIG_IP_MROUTE=y
431CONFIG_IP_PIMSM_V1=y
432CONFIG_IP_PIMSM_V2=y
433# CONFIG_ARPD is not set
434CONFIG_SYN_COOKIES=y
435CONFIG_INET_AH=m
436CONFIG_INET_ESP=m
437CONFIG_INET_IPCOMP=m
438CONFIG_INET_XFRM_TUNNEL=m
439CONFIG_INET_TUNNEL=m
440CONFIG_INET_XFRM_MODE_TRANSPORT=m
441CONFIG_INET_XFRM_MODE_TUNNEL=m
442CONFIG_INET_XFRM_MODE_BEET=m
443CONFIG_INET_LRO=y
444CONFIG_INET_DIAG=m
445CONFIG_INET_TCP_DIAG=m
446CONFIG_TCP_CONG_ADVANCED=y
447CONFIG_TCP_CONG_BIC=m
448CONFIG_TCP_CONG_CUBIC=y
449CONFIG_TCP_CONG_WESTWOOD=m
450CONFIG_TCP_CONG_HTCP=m
451CONFIG_TCP_CONG_HSTCP=m
452CONFIG_TCP_CONG_HYBLA=m
453CONFIG_TCP_CONG_VEGAS=m
454CONFIG_TCP_CONG_SCALABLE=m
455CONFIG_TCP_CONG_LP=m
456CONFIG_TCP_CONG_VENO=m
457CONFIG_TCP_CONG_YEAH=m
458CONFIG_TCP_CONG_ILLINOIS=m
459# CONFIG_DEFAULT_BIC is not set
460CONFIG_DEFAULT_CUBIC=y
461# CONFIG_DEFAULT_HTCP is not set
462# CONFIG_DEFAULT_VEGAS is not set
463# CONFIG_DEFAULT_WESTWOOD is not set
464# CONFIG_DEFAULT_RENO is not set
465CONFIG_DEFAULT_TCP_CONG="cubic"
466CONFIG_TCP_MD5SIG=y
467# CONFIG_IP_VS is not set
468CONFIG_IPV6=m
469CONFIG_IPV6_PRIVACY=y
470CONFIG_IPV6_ROUTER_PREF=y
471CONFIG_IPV6_ROUTE_INFO=y
472CONFIG_IPV6_OPTIMISTIC_DAD=y
473CONFIG_INET6_AH=m
474CONFIG_INET6_ESP=m
475CONFIG_INET6_IPCOMP=m
476CONFIG_IPV6_MIP6=m
477CONFIG_INET6_XFRM_TUNNEL=m
478CONFIG_INET6_TUNNEL=m
479CONFIG_INET6_XFRM_MODE_TRANSPORT=m
480CONFIG_INET6_XFRM_MODE_TUNNEL=m
481CONFIG_INET6_XFRM_MODE_BEET=m
482CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
483CONFIG_IPV6_SIT=m
484CONFIG_IPV6_NDISC_NODETYPE=y
485CONFIG_IPV6_TUNNEL=m
486CONFIG_IPV6_MULTIPLE_TABLES=y
487CONFIG_IPV6_SUBTREES=y
488CONFIG_IPV6_MROUTE=y
489CONFIG_IPV6_PIMSM_V2=y
490CONFIG_NETLABEL=y
491CONFIG_NETWORK_SECMARK=y
492CONFIG_NETFILTER=y
493# CONFIG_NETFILTER_DEBUG is not set
494CONFIG_NETFILTER_ADVANCED=y
495CONFIG_BRIDGE_NETFILTER=y
496
497#
498# Core Netfilter Configuration
499#
500CONFIG_NETFILTER_NETLINK=m
501CONFIG_NETFILTER_NETLINK_QUEUE=m
502CONFIG_NETFILTER_NETLINK_LOG=m
503CONFIG_NF_CONNTRACK=m
504CONFIG_NF_CT_ACCT=y
505CONFIG_NF_CONNTRACK_MARK=y
506CONFIG_NF_CONNTRACK_SECMARK=y
507CONFIG_NF_CONNTRACK_EVENTS=y
508CONFIG_NF_CT_PROTO_DCCP=m
509CONFIG_NF_CT_PROTO_GRE=m
510CONFIG_NF_CT_PROTO_SCTP=m
511CONFIG_NF_CT_PROTO_UDPLITE=m
512CONFIG_NF_CONNTRACK_AMANDA=m
513CONFIG_NF_CONNTRACK_FTP=m
514CONFIG_NF_CONNTRACK_H323=m
515CONFIG_NF_CONNTRACK_IRC=m
516CONFIG_NF_CONNTRACK_NETBIOS_NS=m
517CONFIG_NF_CONNTRACK_PPTP=m
518CONFIG_NF_CONNTRACK_SANE=m
519CONFIG_NF_CONNTRACK_SIP=m
520CONFIG_NF_CONNTRACK_TFTP=m
521CONFIG_NF_CT_NETLINK=m
522CONFIG_NETFILTER_XTABLES=m
523CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
524CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
525CONFIG_NETFILTER_XT_TARGET_DSCP=m
526CONFIG_NETFILTER_XT_TARGET_MARK=m
527CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
528CONFIG_NETFILTER_XT_TARGET_NFLOG=m
529CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
530CONFIG_NETFILTER_XT_TARGET_RATEEST=m
531CONFIG_NETFILTER_XT_TARGET_TRACE=m
532CONFIG_NETFILTER_XT_TARGET_SECMARK=m
533CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
534CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
535CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
536CONFIG_NETFILTER_XT_MATCH_COMMENT=m
537CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
538CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
539CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
540CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
541CONFIG_NETFILTER_XT_MATCH_DCCP=m
542CONFIG_NETFILTER_XT_MATCH_DSCP=m
543CONFIG_NETFILTER_XT_MATCH_ESP=m
544CONFIG_NETFILTER_XT_MATCH_HELPER=m
545CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
546CONFIG_NETFILTER_XT_MATCH_LENGTH=m
547CONFIG_NETFILTER_XT_MATCH_LIMIT=m
548CONFIG_NETFILTER_XT_MATCH_MAC=m
549CONFIG_NETFILTER_XT_MATCH_MARK=m
550CONFIG_NETFILTER_XT_MATCH_OWNER=m
551CONFIG_NETFILTER_XT_MATCH_POLICY=m
552CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
553CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
554CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
555CONFIG_NETFILTER_XT_MATCH_QUOTA=m
556CONFIG_NETFILTER_XT_MATCH_RATEEST=m
557CONFIG_NETFILTER_XT_MATCH_REALM=m
558CONFIG_NETFILTER_XT_MATCH_SCTP=m
559CONFIG_NETFILTER_XT_MATCH_STATE=m
560CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
561CONFIG_NETFILTER_XT_MATCH_STRING=m
562CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
563CONFIG_NETFILTER_XT_MATCH_TIME=m
564CONFIG_NETFILTER_XT_MATCH_U32=m
565CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
566
567#
568# IP: Netfilter Configuration
569#
570CONFIG_NF_CONNTRACK_IPV4=m
571# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
572CONFIG_IP_NF_QUEUE=m
573CONFIG_IP_NF_IPTABLES=m
574CONFIG_IP_NF_MATCH_RECENT=m
575CONFIG_IP_NF_MATCH_ECN=m
576CONFIG_IP_NF_MATCH_AH=m
577CONFIG_IP_NF_MATCH_TTL=m
578CONFIG_IP_NF_MATCH_ADDRTYPE=m
579CONFIG_IP_NF_FILTER=m
580CONFIG_IP_NF_TARGET_REJECT=m
581CONFIG_IP_NF_TARGET_LOG=m
582CONFIG_IP_NF_TARGET_ULOG=m
583CONFIG_NF_NAT=m
584CONFIG_NF_NAT_NEEDED=y
585CONFIG_IP_NF_TARGET_MASQUERADE=m
586CONFIG_IP_NF_TARGET_REDIRECT=m
587CONFIG_IP_NF_TARGET_NETMAP=m
588CONFIG_NF_NAT_SNMP_BASIC=m
589CONFIG_NF_NAT_PROTO_DCCP=m
590CONFIG_NF_NAT_PROTO_GRE=m
591CONFIG_NF_NAT_PROTO_UDPLITE=m
592CONFIG_NF_NAT_PROTO_SCTP=m
593CONFIG_NF_NAT_FTP=m
594CONFIG_NF_NAT_IRC=m
595CONFIG_NF_NAT_TFTP=m
596CONFIG_NF_NAT_AMANDA=m
597CONFIG_NF_NAT_PPTP=m
598CONFIG_NF_NAT_H323=m
599CONFIG_NF_NAT_SIP=m
600CONFIG_IP_NF_MANGLE=m
601CONFIG_IP_NF_TARGET_ECN=m
602CONFIG_IP_NF_TARGET_TTL=m
603CONFIG_IP_NF_TARGET_CLUSTERIP=m
604CONFIG_IP_NF_RAW=m
605CONFIG_IP_NF_ARPTABLES=m
606CONFIG_IP_NF_ARPFILTER=m
607CONFIG_IP_NF_ARP_MANGLE=m
608
609#
610# IPv6: Netfilter Configuration
611#
612CONFIG_NF_CONNTRACK_IPV6=m
613CONFIG_IP6_NF_QUEUE=m
614CONFIG_IP6_NF_IPTABLES=m
615CONFIG_IP6_NF_MATCH_RT=m
616CONFIG_IP6_NF_MATCH_OPTS=m
617CONFIG_IP6_NF_MATCH_FRAG=m
618CONFIG_IP6_NF_MATCH_HL=m
619CONFIG_IP6_NF_MATCH_IPV6HEADER=m
620CONFIG_IP6_NF_MATCH_AH=m
621CONFIG_IP6_NF_MATCH_MH=m
622CONFIG_IP6_NF_MATCH_EUI64=m
623CONFIG_IP6_NF_FILTER=m
624CONFIG_IP6_NF_TARGET_LOG=m
625CONFIG_IP6_NF_TARGET_REJECT=m
626CONFIG_IP6_NF_MANGLE=m
627CONFIG_IP6_NF_TARGET_HL=m
628CONFIG_IP6_NF_RAW=m
629
630#
631# DECnet: Netfilter Configuration
632#
633# CONFIG_DECNET_NF_GRABULATOR is not set
634
635#
636# Bridge: Netfilter Configuration
637#
638CONFIG_BRIDGE_NF_EBTABLES=m
639CONFIG_BRIDGE_EBT_BROUTE=m
640CONFIG_BRIDGE_EBT_T_FILTER=m
641CONFIG_BRIDGE_EBT_T_NAT=m
642CONFIG_BRIDGE_EBT_802_3=m
643CONFIG_BRIDGE_EBT_AMONG=m
644CONFIG_BRIDGE_EBT_ARP=m
645CONFIG_BRIDGE_EBT_IP=m
646CONFIG_BRIDGE_EBT_LIMIT=m
647CONFIG_BRIDGE_EBT_MARK=m
648CONFIG_BRIDGE_EBT_PKTTYPE=m
649CONFIG_BRIDGE_EBT_STP=m
650CONFIG_BRIDGE_EBT_VLAN=m
651CONFIG_BRIDGE_EBT_ARPREPLY=m
652CONFIG_BRIDGE_EBT_DNAT=m
653CONFIG_BRIDGE_EBT_MARK_T=m
654CONFIG_BRIDGE_EBT_REDIRECT=m
655CONFIG_BRIDGE_EBT_SNAT=m
656CONFIG_BRIDGE_EBT_LOG=m
657CONFIG_BRIDGE_EBT_ULOG=m
658CONFIG_BRIDGE_EBT_NFLOG=m
659CONFIG_IP_DCCP=m
660CONFIG_INET_DCCP_DIAG=m
661CONFIG_IP_DCCP_ACKVEC=y
662
663#
664# DCCP CCIDs Configuration (EXPERIMENTAL)
665#
666CONFIG_IP_DCCP_CCID2=m
667# CONFIG_IP_DCCP_CCID2_DEBUG is not set
668CONFIG_IP_DCCP_CCID3=m
669# CONFIG_IP_DCCP_CCID3_DEBUG is not set
670CONFIG_IP_DCCP_CCID3_RTO=100
671CONFIG_IP_DCCP_TFRC_LIB=m
672
673#
674# DCCP Kernel Hacking
675#
676# CONFIG_IP_DCCP_DEBUG is not set
677CONFIG_NET_DCCPPROBE=m
678CONFIG_IP_SCTP=m
679# CONFIG_SCTP_DBG_MSG is not set
680# CONFIG_SCTP_DBG_OBJCNT is not set
681# CONFIG_SCTP_HMAC_NONE is not set
682# CONFIG_SCTP_HMAC_SHA1 is not set
683CONFIG_SCTP_HMAC_MD5=y
684CONFIG_TIPC=m
685# CONFIG_TIPC_ADVANCED is not set
686# CONFIG_TIPC_DEBUG is not set
687CONFIG_ATM=m
688CONFIG_ATM_CLIP=m
689# CONFIG_ATM_CLIP_NO_ICMP is not set
690CONFIG_ATM_LANE=m
691# CONFIG_ATM_MPOA is not set
692CONFIG_ATM_BR2684=m
693# CONFIG_ATM_BR2684_IPFILTER is not set
694CONFIG_BRIDGE=m
695CONFIG_VLAN_8021Q=m
696CONFIG_DECNET=m
697CONFIG_DECNET_ROUTER=y
698CONFIG_LLC=m
699# CONFIG_LLC2 is not set
700CONFIG_IPX=m
701# CONFIG_IPX_INTERN is not set
702CONFIG_ATALK=m
703CONFIG_DEV_APPLETALK=m
704# CONFIG_LTPC is not set
705# CONFIG_COPS is not set
706CONFIG_IPDDP=m
707CONFIG_IPDDP_ENCAP=y
708CONFIG_IPDDP_DECAP=y
709# CONFIG_X25 is not set
710# CONFIG_LAPB is not set
711# CONFIG_ECONET is not set
712CONFIG_WAN_ROUTER=m
713CONFIG_NET_SCHED=y
714
715#
716# Queueing/Scheduling
717#
718CONFIG_NET_SCH_CBQ=m
719CONFIG_NET_SCH_HTB=m
720CONFIG_NET_SCH_HFSC=m
721CONFIG_NET_SCH_ATM=m
722CONFIG_NET_SCH_PRIO=m
723CONFIG_NET_SCH_RED=m
724CONFIG_NET_SCH_SFQ=m
725CONFIG_NET_SCH_TEQL=m
726CONFIG_NET_SCH_TBF=m
727CONFIG_NET_SCH_GRED=m
728CONFIG_NET_SCH_DSMARK=m
729CONFIG_NET_SCH_NETEM=m
730CONFIG_NET_SCH_INGRESS=m
731
732#
733# Classification
734#
735CONFIG_NET_CLS=y
736CONFIG_NET_CLS_BASIC=m
737CONFIG_NET_CLS_TCINDEX=m
738CONFIG_NET_CLS_ROUTE4=m
739CONFIG_NET_CLS_ROUTE=y
740CONFIG_NET_CLS_FW=m
741CONFIG_NET_CLS_U32=m
742CONFIG_CLS_U32_PERF=y
743CONFIG_CLS_U32_MARK=y
744CONFIG_NET_CLS_RSVP=m
745CONFIG_NET_CLS_RSVP6=m
746CONFIG_NET_CLS_FLOW=m
747CONFIG_NET_EMATCH=y
748CONFIG_NET_EMATCH_STACK=32
749CONFIG_NET_EMATCH_CMP=m
750CONFIG_NET_EMATCH_NBYTE=m
751CONFIG_NET_EMATCH_U32=m
752CONFIG_NET_EMATCH_META=m
753CONFIG_NET_EMATCH_TEXT=m
754CONFIG_NET_CLS_ACT=y
755CONFIG_NET_ACT_POLICE=m
756CONFIG_NET_ACT_GACT=m
757CONFIG_GACT_PROB=y
758CONFIG_NET_ACT_MIRRED=m
759CONFIG_NET_ACT_IPT=m
760CONFIG_NET_ACT_NAT=m
761CONFIG_NET_ACT_PEDIT=m
762CONFIG_NET_ACT_SIMP=m
763CONFIG_NET_CLS_IND=y
764CONFIG_NET_SCH_FIFO=y
765
766#
767# Network testing
768#
769# CONFIG_NET_PKTGEN is not set
770# CONFIG_NET_TCPPROBE is not set
771# CONFIG_HAMRADIO is not set
772# CONFIG_CAN is not set
773CONFIG_IRDA=m
774
775#
776# IrDA protocols
777#
778CONFIG_IRLAN=m
779CONFIG_IRNET=m
780CONFIG_IRCOMM=m
781# CONFIG_IRDA_ULTRA is not set
782
783#
784# IrDA options
785#
786CONFIG_IRDA_CACHE_LAST_LSAP=y
787CONFIG_IRDA_FAST_RR=y
788# CONFIG_IRDA_DEBUG is not set
789
790#
791# Infrared-port device drivers
792#
793
794#
795# SIR device drivers
796#
797CONFIG_IRTTY_SIR=m
798
799#
800# Dongle support
801#
802# CONFIG_DONGLE is not set
803CONFIG_KINGSUN_DONGLE=m
804CONFIG_KSDAZZLE_DONGLE=m
805CONFIG_KS959_DONGLE=m
806
807#
808# FIR device drivers
809#
810CONFIG_USB_IRDA=m
811CONFIG_SIGMATEL_FIR=m
812CONFIG_NSC_FIR=m
813CONFIG_WINBOND_FIR=m
814CONFIG_TOSHIBA_FIR=m
815CONFIG_SMC_IRCC_FIR=m
816CONFIG_ALI_FIR=m
817CONFIG_VLSI_FIR=m
818CONFIG_VIA_FIR=m
819CONFIG_MCS_FIR=m
820CONFIG_BT=m
821CONFIG_BT_L2CAP=m
822CONFIG_BT_SCO=m
823CONFIG_BT_RFCOMM=m
824CONFIG_BT_RFCOMM_TTY=y
825CONFIG_BT_BNEP=m
826CONFIG_BT_BNEP_MC_FILTER=y
827CONFIG_BT_BNEP_PROTO_FILTER=y
828CONFIG_BT_HIDP=m
829
830#
831# Bluetooth device drivers
832#
833CONFIG_BT_HCIUSB=m
834CONFIG_BT_HCIUSB_SCO=y
835CONFIG_BT_HCIUART=m
836CONFIG_BT_HCIUART_H4=y
837CONFIG_BT_HCIUART_BCSP=y
838CONFIG_BT_HCIUART_LL=y
839CONFIG_BT_HCIBCM203X=m
840CONFIG_BT_HCIBPA10X=m
841CONFIG_BT_HCIBFUSB=m
842CONFIG_BT_HCIDTL1=m
843CONFIG_BT_HCIBT3C=m
844CONFIG_BT_HCIBLUECARD=m
845CONFIG_BT_HCIBTUART=m
846CONFIG_BT_HCIVHCI=m
847# CONFIG_AF_RXRPC is not set
848CONFIG_FIB_RULES=y
849
850#
851# Wireless
852#
853CONFIG_CFG80211=m
854CONFIG_NL80211=y
855CONFIG_WIRELESS_EXT=y
856CONFIG_WIRELESS_EXT_SYSFS=y
857CONFIG_MAC80211=m
858CONFIG_MAC80211_QOS=y
859
860#
861# Rate control algorithm selection
862#
863CONFIG_MAC80211_RC_PID=y
864CONFIG_MAC80211_RC_DEFAULT_PID=y
865CONFIG_MAC80211_RC_DEFAULT="pid"
866CONFIG_MAC80211_MESH=y
867CONFIG_MAC80211_LEDS=y
868CONFIG_MAC80211_DEBUGFS=y
869# CONFIG_MAC80211_DEBUG_MENU is not set
870CONFIG_IEEE80211=m
871CONFIG_IEEE80211_DEBUG=y
872CONFIG_IEEE80211_CRYPT_WEP=m
873CONFIG_IEEE80211_CRYPT_CCMP=m
874CONFIG_IEEE80211_CRYPT_TKIP=m
875# CONFIG_RFKILL is not set
876CONFIG_NET_9P=m
877CONFIG_NET_9P_VIRTIO=m
878# CONFIG_NET_9P_DEBUG is not set
879
880#
881# Device Drivers
882#
883
884#
885# Generic Driver Options
886#
887CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
888CONFIG_STANDALONE=y
889CONFIG_PREVENT_FIRMWARE_BUILD=y
890CONFIG_FW_LOADER=y
891# CONFIG_FIRMWARE_IN_KERNEL is not set
892CONFIG_EXTRA_FIRMWARE=""
893# CONFIG_DEBUG_DRIVER is not set
894CONFIG_DEBUG_DEVRES=y
895# CONFIG_SYS_HYPERVISOR is not set
896CONFIG_CONNECTOR=y
897CONFIG_PROC_EVENTS=y
898# CONFIG_MTD is not set
899CONFIG_OF_DEVICE=y
900CONFIG_OF_GPIO=y
901CONFIG_OF_I2C=y
902CONFIG_PARPORT=m
903CONFIG_PARPORT_PC=m
904CONFIG_PARPORT_SERIAL=m
905# CONFIG_PARPORT_PC_FIFO is not set
906# CONFIG_PARPORT_PC_SUPERIO is not set
907# CONFIG_PARPORT_PC_PCMCIA is not set
908# CONFIG_PARPORT_GSC is not set
909# CONFIG_PARPORT_AX88796 is not set
910CONFIG_PARPORT_1284=y
911CONFIG_PARPORT_NOT_PC=y
912CONFIG_PNP=y
913# CONFIG_PNP_DEBUG is not set
914
915#
916# Protocols
917#
918CONFIG_ISAPNP=y
919# CONFIG_PNPACPI is not set
920CONFIG_BLK_DEV=y
921# CONFIG_BLK_DEV_FD is not set
922CONFIG_MAC_FLOPPY=m
923# CONFIG_BLK_DEV_XD is not set
924# CONFIG_PARIDE is not set
925# CONFIG_BLK_CPQ_DA is not set
926# CONFIG_BLK_CPQ_CISS_DA is not set
927# CONFIG_BLK_DEV_DAC960 is not set
928# CONFIG_BLK_DEV_UMEM is not set
929# CONFIG_BLK_DEV_COW_COMMON is not set
930CONFIG_BLK_DEV_LOOP=m
931CONFIG_BLK_DEV_CRYPTOLOOP=m
932CONFIG_BLK_DEV_NBD=m
933# CONFIG_BLK_DEV_SX8 is not set
934# CONFIG_BLK_DEV_UB is not set
935CONFIG_BLK_DEV_RAM=y
936CONFIG_BLK_DEV_RAM_COUNT=16
937CONFIG_BLK_DEV_RAM_SIZE=16384
938# CONFIG_BLK_DEV_XIP is not set
939CONFIG_CDROM_PKTCDVD=m
940CONFIG_CDROM_PKTCDVD_BUFFERS=8
941# CONFIG_CDROM_PKTCDVD_WCACHE is not set
942# CONFIG_ATA_OVER_ETH is not set
943CONFIG_VIRTIO_BLK=m
944CONFIG_MISC_DEVICES=y
945# CONFIG_PHANTOM is not set
946CONFIG_EEPROM_93CX6=m
947# CONFIG_SGI_IOC4 is not set
948# CONFIG_TIFM_CORE is not set
949CONFIG_ENCLOSURE_SERVICES=m
950CONFIG_HAVE_IDE=y
951CONFIG_IDE=y
952CONFIG_BLK_DEV_IDE=y
953
954#
955# Please see Documentation/ide/ide.txt for help/info on IDE drives
956#
957CONFIG_IDE_ATAPI=y
958# CONFIG_BLK_DEV_IDE_SATA is not set
959CONFIG_BLK_DEV_IDEDISK=y
960CONFIG_IDEDISK_MULTI_MODE=y
961# CONFIG_BLK_DEV_IDECS is not set
962# CONFIG_BLK_DEV_DELKIN is not set
963CONFIG_BLK_DEV_IDECD=m
964CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
965# CONFIG_BLK_DEV_IDETAPE is not set
966CONFIG_BLK_DEV_IDEFLOPPY=m
967# CONFIG_BLK_DEV_IDESCSI is not set
968CONFIG_IDE_TASK_IOCTL=y
969CONFIG_IDE_PROC_FS=y
970
971#
972# IDE chipset support/bugfixes
973#
974# CONFIG_IDE_GENERIC is not set
975# CONFIG_BLK_DEV_PLATFORM is not set
976# CONFIG_BLK_DEV_IDEPNP is not set
977CONFIG_BLK_DEV_IDEDMA_SFF=y
978
979#
980# PCI IDE chipsets support
981#
982CONFIG_BLK_DEV_IDEPCI=y
983# CONFIG_IDEPCI_PCIBUS_ORDER is not set
984# CONFIG_BLK_DEV_OFFBOARD is not set
985CONFIG_BLK_DEV_GENERIC=y
986# CONFIG_BLK_DEV_OPTI621 is not set
987CONFIG_BLK_DEV_IDEDMA_PCI=y
988# CONFIG_BLK_DEV_AEC62XX is not set
989# CONFIG_BLK_DEV_ALI15X3 is not set
990# CONFIG_BLK_DEV_AMD74XX is not set
991# CONFIG_BLK_DEV_CMD64X is not set
992# CONFIG_BLK_DEV_TRIFLEX is not set
993# CONFIG_BLK_DEV_CY82C693 is not set
994# CONFIG_BLK_DEV_CS5520 is not set
995# CONFIG_BLK_DEV_CS5530 is not set
996# CONFIG_BLK_DEV_HPT34X is not set
997# CONFIG_BLK_DEV_HPT366 is not set
998# CONFIG_BLK_DEV_JMICRON is not set
999# CONFIG_BLK_DEV_SC1200 is not set
1000# CONFIG_BLK_DEV_PIIX is not set
1001# CONFIG_BLK_DEV_IT8213 is not set
1002# CONFIG_BLK_DEV_IT821X is not set
1003# CONFIG_BLK_DEV_NS87415 is not set
1004# CONFIG_BLK_DEV_PDC202XX_OLD is not set
1005# CONFIG_BLK_DEV_PDC202XX_NEW is not set
1006# CONFIG_BLK_DEV_SVWKS is not set
1007# CONFIG_BLK_DEV_SIIMAGE is not set
1008# CONFIG_BLK_DEV_SL82C105 is not set
1009# CONFIG_BLK_DEV_SLC90E66 is not set
1010# CONFIG_BLK_DEV_TRM290 is not set
1011# CONFIG_BLK_DEV_VIA82CXXX is not set
1012# CONFIG_BLK_DEV_TC86C001 is not set
1013CONFIG_BLK_DEV_IDE_PMAC=y
1014CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
1015CONFIG_BLK_DEV_IDEDMA_PMAC=y
1016CONFIG_BLK_DEV_IDEDMA=y
1017CONFIG_BLK_DEV_HD_ONLY=y
1018CONFIG_BLK_DEV_HD=y
1019
1020#
1021# SCSI device support
1022#
1023CONFIG_RAID_ATTRS=m
1024CONFIG_SCSI=y
1025CONFIG_SCSI_DMA=y
1026CONFIG_SCSI_TGT=m
1027# CONFIG_SCSI_NETLINK is not set
1028CONFIG_SCSI_PROC_FS=y
1029
1030#
1031# SCSI support type (disk, tape, CD-ROM)
1032#
1033CONFIG_BLK_DEV_SD=y
1034CONFIG_CHR_DEV_ST=m
1035CONFIG_CHR_DEV_OSST=m
1036CONFIG_BLK_DEV_SR=m
1037CONFIG_BLK_DEV_SR_VENDOR=y
1038CONFIG_CHR_DEV_SG=y
1039CONFIG_CHR_DEV_SCH=m
1040CONFIG_SCSI_ENCLOSURE=m
1041
1042#
1043# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
1044#
1045CONFIG_SCSI_MULTI_LUN=y
1046CONFIG_SCSI_CONSTANTS=y
1047CONFIG_SCSI_LOGGING=y
1048CONFIG_SCSI_SCAN_ASYNC=y
1049CONFIG_SCSI_WAIT_SCAN=m
1050
1051#
1052# SCSI Transports
1053#
1054CONFIG_SCSI_SPI_ATTRS=m
1055# CONFIG_SCSI_FC_ATTRS is not set
1056# CONFIG_SCSI_ISCSI_ATTRS is not set
1057# CONFIG_SCSI_SAS_ATTRS is not set
1058# CONFIG_SCSI_SAS_LIBSAS is not set
1059CONFIG_SCSI_SRP_ATTRS=m
1060CONFIG_SCSI_SRP_TGT_ATTRS=y
1061CONFIG_SCSI_LOWLEVEL=y
1062# CONFIG_ISCSI_TCP is not set
1063# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
1064# CONFIG_SCSI_3W_9XXX is not set
1065# CONFIG_SCSI_7000FASST is not set
1066# CONFIG_SCSI_ACARD is not set
1067# CONFIG_SCSI_AHA152X is not set
1068# CONFIG_SCSI_AHA1542 is not set
1069# CONFIG_SCSI_AACRAID is not set
1070# CONFIG_SCSI_AIC7XXX is not set
1071# CONFIG_SCSI_AIC7XXX_OLD is not set
1072# CONFIG_SCSI_AIC79XX is not set
1073# CONFIG_SCSI_AIC94XX is not set
1074# CONFIG_SCSI_DPT_I2O is not set
1075# CONFIG_SCSI_ADVANSYS is not set
1076# CONFIG_SCSI_IN2000 is not set
1077# CONFIG_SCSI_ARCMSR is not set
1078# CONFIG_MEGARAID_NEWGEN is not set
1079# CONFIG_MEGARAID_LEGACY is not set
1080# CONFIG_MEGARAID_SAS is not set
1081# CONFIG_SCSI_HPTIOP is not set
1082# CONFIG_SCSI_BUSLOGIC is not set
1083# CONFIG_SCSI_DMX3191D is not set
1084# CONFIG_SCSI_DTC3280 is not set
1085# CONFIG_SCSI_EATA is not set
1086# CONFIG_SCSI_FUTURE_DOMAIN is not set
1087# CONFIG_SCSI_GDTH is not set
1088# CONFIG_SCSI_GENERIC_NCR5380 is not set
1089# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
1090# CONFIG_SCSI_IPS is not set
1091# CONFIG_SCSI_INITIO is not set
1092# CONFIG_SCSI_INIA100 is not set
1093# CONFIG_SCSI_PPA is not set
1094# CONFIG_SCSI_IMM is not set
1095# CONFIG_SCSI_MVSAS is not set
1096# CONFIG_SCSI_NCR53C406A is not set
1097# CONFIG_SCSI_STEX is not set
1098# CONFIG_SCSI_SYM53C8XX_2 is not set
1099# CONFIG_SCSI_IPR is not set
1100# CONFIG_SCSI_PAS16 is not set
1101# CONFIG_SCSI_QLOGIC_FAS is not set
1102# CONFIG_SCSI_QLOGIC_1280 is not set
1103# CONFIG_SCSI_QLA_FC is not set
1104# CONFIG_SCSI_QLA_ISCSI is not set
1105# CONFIG_SCSI_LPFC is not set
1106# CONFIG_SCSI_SYM53C416 is not set
1107# CONFIG_SCSI_DC395x is not set
1108# CONFIG_SCSI_DC390T is not set
1109# CONFIG_SCSI_T128 is not set
1110# CONFIG_SCSI_U14_34F is not set
1111# CONFIG_SCSI_NSP32 is not set
1112# CONFIG_SCSI_DEBUG is not set
1113CONFIG_SCSI_MESH=m
1114CONFIG_SCSI_MESH_SYNC_RATE=5
1115CONFIG_SCSI_MESH_RESET_DELAY_MS=4000
1116CONFIG_SCSI_MAC53C94=m
1117CONFIG_SCSI_SRP=m
1118CONFIG_SCSI_LOWLEVEL_PCMCIA=y
1119# CONFIG_PCMCIA_AHA152X is not set
1120# CONFIG_PCMCIA_FDOMAIN is not set
1121# CONFIG_PCMCIA_NINJA_SCSI is not set
1122# CONFIG_PCMCIA_QLOGIC is not set
1123# CONFIG_PCMCIA_SYM53C500 is not set
1124CONFIG_SCSI_DH=y
1125CONFIG_SCSI_DH_RDAC=m
1126CONFIG_SCSI_DH_HP_SW=m
1127CONFIG_SCSI_DH_EMC=m
1128CONFIG_ATA=y
1129# CONFIG_ATA_NONSTANDARD is not set
1130# CONFIG_SATA_PMP is not set
1131# CONFIG_SATA_AHCI is not set
1132# CONFIG_SATA_SIL24 is not set
1133CONFIG_SATA_FSL=m
1134CONFIG_ATA_SFF=y
1135# CONFIG_SATA_SVW is not set
1136CONFIG_ATA_PIIX=m
1137# CONFIG_SATA_MV is not set
1138# CONFIG_SATA_NV is not set
1139CONFIG_PDC_ADMA=m
1140# CONFIG_SATA_QSTOR is not set
1141# CONFIG_SATA_PROMISE is not set
1142# CONFIG_SATA_SX4 is not set
1143# CONFIG_SATA_SIL is not set
1144# CONFIG_SATA_SIS is not set
1145# CONFIG_SATA_ULI is not set
1146# CONFIG_SATA_VIA is not set
1147# CONFIG_SATA_VITESSE is not set
1148# CONFIG_SATA_INIC162X is not set
1149# CONFIG_PATA_ALI is not set
1150# CONFIG_PATA_AMD is not set
1151# CONFIG_PATA_ARTOP is not set
1152# CONFIG_PATA_ATIIXP is not set
1153# CONFIG_PATA_CMD640_PCI is not set
1154# CONFIG_PATA_CMD64X is not set
1155# CONFIG_PATA_CS5520 is not set
1156# CONFIG_PATA_CS5530 is not set
1157# CONFIG_PATA_CYPRESS is not set
1158# CONFIG_PATA_EFAR is not set
1159CONFIG_ATA_GENERIC=m
1160# CONFIG_PATA_HPT366 is not set
1161# CONFIG_PATA_HPT37X is not set
1162# CONFIG_PATA_HPT3X2N is not set
1163# CONFIG_PATA_HPT3X3 is not set
1164# CONFIG_PATA_ISAPNP is not set
1165# CONFIG_PATA_IT821X is not set
1166# CONFIG_PATA_IT8213 is not set
1167# CONFIG_PATA_JMICRON is not set
1168# CONFIG_PATA_LEGACY is not set
1169# CONFIG_PATA_TRIFLEX is not set
1170# CONFIG_PATA_MARVELL is not set
1171CONFIG_PATA_MPC52xx=m
1172# CONFIG_PATA_MPIIX is not set
1173# CONFIG_PATA_OLDPIIX is not set
1174# CONFIG_PATA_NETCELL is not set
1175# CONFIG_PATA_NINJA32 is not set
1176# CONFIG_PATA_NS87410 is not set
1177# CONFIG_PATA_NS87415 is not set
1178# CONFIG_PATA_OPTI is not set
1179CONFIG_PATA_OPTIDMA=m
1180# CONFIG_PATA_PCMCIA is not set
1181# CONFIG_PATA_PDC_OLD is not set
1182# CONFIG_PATA_QDI is not set
1183# CONFIG_PATA_RADISYS is not set
1184# CONFIG_PATA_RZ1000 is not set
1185# CONFIG_PATA_SC1200 is not set
1186# CONFIG_PATA_SERVERWORKS is not set
1187# CONFIG_PATA_PDC2027X is not set
1188# CONFIG_PATA_SIL680 is not set
1189# CONFIG_PATA_SIS is not set
1190CONFIG_PATA_VIA=m
1191# CONFIG_PATA_WINBOND is not set
1192# CONFIG_PATA_WINBOND_VLB is not set
1193CONFIG_PATA_PLATFORM=m
1194CONFIG_PATA_OF_PLATFORM=m
1195CONFIG_PATA_SCH=m
1196CONFIG_MD=y
1197CONFIG_BLK_DEV_MD=y
1198CONFIG_MD_LINEAR=m
1199CONFIG_MD_RAID0=m
1200CONFIG_MD_RAID1=m
1201CONFIG_MD_RAID10=m
1202CONFIG_MD_RAID456=m
1203CONFIG_MD_RAID5_RESHAPE=y
1204CONFIG_MD_MULTIPATH=m
1205CONFIG_MD_FAULTY=m
1206CONFIG_BLK_DEV_DM=m
1207CONFIG_DM_DEBUG=y
1208CONFIG_DM_CRYPT=m
1209CONFIG_DM_SNAPSHOT=m
1210CONFIG_DM_MIRROR=m
1211CONFIG_DM_ZERO=m
1212CONFIG_DM_MULTIPATH=m
1213# CONFIG_DM_DELAY is not set
1214CONFIG_DM_UEVENT=y
1215# CONFIG_FUSION is not set
1216
1217#
1218# IEEE 1394 (FireWire) support
1219#
1220
1221#
1222# Enable only one of the two stacks, unless you know what you are doing
1223#
1224CONFIG_FIREWIRE=m
1225CONFIG_FIREWIRE_OHCI=m
1226CONFIG_FIREWIRE_OHCI_DEBUG=y
1227CONFIG_FIREWIRE_SBP2=m
1228# CONFIG_IEEE1394 is not set
1229# CONFIG_I2O is not set
1230CONFIG_MACINTOSH_DRIVERS=y
1231CONFIG_ADB=y
1232CONFIG_ADB_CUDA=y
1233CONFIG_ADB_PMU=y
1234CONFIG_ADB_PMU_LED=y
1235CONFIG_ADB_PMU_LED_IDE=y
1236CONFIG_PMAC_APM_EMU=y
1237CONFIG_PMAC_MEDIABAY=y
1238CONFIG_PMAC_BACKLIGHT=y
1239# CONFIG_PMAC_BACKLIGHT_LEGACY is not set
1240CONFIG_ADB_MACIO=y
1241CONFIG_INPUT_ADBHID=y
1242CONFIG_MAC_EMUMOUSEBTN=y
1243CONFIG_THERM_WINDTUNNEL=m
1244CONFIG_THERM_ADT746X=m
1245CONFIG_WINDFARM=y
1246# CONFIG_ANSLCD is not set
1247CONFIG_PMAC_RACKMETER=m
1248CONFIG_NETDEVICES=y
1249CONFIG_NETDEVICES_MULTIQUEUE=y
1250CONFIG_IFB=m
1251CONFIG_DUMMY=m
1252CONFIG_BONDING=m
1253CONFIG_MACVLAN=m
1254CONFIG_EQUALIZER=m
1255CONFIG_TUN=m
1256CONFIG_VETH=m
1257CONFIG_NET_SB1000=m
1258# CONFIG_ARCNET is not set
1259CONFIG_PHYLIB=m
1260
1261#
1262# MII PHY device drivers
1263#
1264CONFIG_MARVELL_PHY=m
1265CONFIG_DAVICOM_PHY=m
1266CONFIG_QSEMI_PHY=m
1267CONFIG_LXT_PHY=m
1268CONFIG_CICADA_PHY=m
1269CONFIG_VITESSE_PHY=m
1270CONFIG_SMSC_PHY=m
1271CONFIG_BROADCOM_PHY=m
1272CONFIG_ICPLUS_PHY=m
1273CONFIG_REALTEK_PHY=m
1274CONFIG_MDIO_BITBANG=y
1275CONFIG_NET_ETHERNET=y
1276CONFIG_MII=m
1277CONFIG_MACE=m
1278# CONFIG_MACE_AAUI_PORT is not set
1279CONFIG_BMAC=m
1280CONFIG_HAPPYMEAL=m
1281CONFIG_SUNGEM=m
1282CONFIG_CASSINI=m
1283CONFIG_NET_VENDOR_3COM=y
1284# CONFIG_EL1 is not set
1285# CONFIG_EL2 is not set
1286# CONFIG_ELPLUS is not set
1287# CONFIG_EL16 is not set
1288CONFIG_EL3=m
1289# CONFIG_3C515 is not set
1290CONFIG_VORTEX=m
1291CONFIG_TYPHOON=m
1292# CONFIG_LANCE is not set
1293CONFIG_NET_VENDOR_SMC=y
1294# CONFIG_WD80x3 is not set
1295CONFIG_ULTRA=m
1296# CONFIG_SMC9194 is not set
1297# CONFIG_NET_VENDOR_RACAL is not set
1298CONFIG_NET_TULIP=y
1299CONFIG_DE2104X=m
1300CONFIG_TULIP=m
1301# CONFIG_TULIP_MWI is not set
1302CONFIG_TULIP_MMIO=y
1303# CONFIG_TULIP_NAPI is not set
1304CONFIG_DE4X5=m
1305CONFIG_WINBOND_840=m
1306CONFIG_DM9102=m
1307CONFIG_ULI526X=m
1308CONFIG_PCMCIA_XIRCOM=m
1309# CONFIG_AT1700 is not set
1310# CONFIG_DEPCA is not set
1311# CONFIG_HP100 is not set
1312CONFIG_NET_ISA=y
1313# CONFIG_E2100 is not set
1314CONFIG_EWRK3=m
1315# CONFIG_EEXPRESS is not set
1316# CONFIG_EEXPRESS_PRO is not set
1317# CONFIG_HPLAN_PLUS is not set
1318# CONFIG_HPLAN is not set
1319# CONFIG_LP486E is not set
1320# CONFIG_ETH16I is not set
1321CONFIG_NE2000=m
1322# CONFIG_ZNET is not set
1323# CONFIG_SEEQ8005 is not set
1324# CONFIG_IBM_NEW_EMAC_ZMII is not set
1325# CONFIG_IBM_NEW_EMAC_RGMII is not set
1326# CONFIG_IBM_NEW_EMAC_TAH is not set
1327# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
1328CONFIG_NET_PCI=y
1329CONFIG_PCNET32=m
1330CONFIG_AMD8111_ETH=m
1331CONFIG_AMD8111E_NAPI=y
1332CONFIG_ADAPTEC_STARFIRE=m
1333CONFIG_ADAPTEC_STARFIRE_NAPI=y
1334# CONFIG_AC3200 is not set
1335# CONFIG_APRICOT is not set
1336CONFIG_B44=m
1337CONFIG_B44_PCI_AUTOSELECT=y
1338CONFIG_B44_PCICORE_AUTOSELECT=y
1339CONFIG_B44_PCI=y
1340CONFIG_FORCEDETH=m
1341CONFIG_FORCEDETH_NAPI=y
1342# CONFIG_CS89x0 is not set
1343# CONFIG_EEPRO100 is not set
1344CONFIG_E100=m
1345CONFIG_FEALNX=m
1346CONFIG_NATSEMI=m
1347CONFIG_NE2K_PCI=m
1348CONFIG_8139CP=m
1349CONFIG_8139TOO=m
1350# CONFIG_8139TOO_PIO is not set
1351# CONFIG_8139TOO_TUNE_TWISTER is not set
1352CONFIG_8139TOO_8129=y
1353# CONFIG_8139_OLD_RX_RESET is not set
1354CONFIG_R6040=m
1355CONFIG_SIS900=m
1356CONFIG_EPIC100=m
1357CONFIG_SUNDANCE=m
1358# CONFIG_SUNDANCE_MMIO is not set
1359CONFIG_TLAN=m
1360CONFIG_VIA_RHINE=m
1361CONFIG_VIA_RHINE_MMIO=y
1362CONFIG_VIA_RHINE_NAPI=y
1363CONFIG_SC92031=m
1364CONFIG_NET_POCKET=y
1365CONFIG_DE600=m
1366CONFIG_DE620=m
1367CONFIG_FEC_MPC52xx=m
1368CONFIG_FEC_MPC52xx_MDIO=y
1369# CONFIG_FS_ENET is not set
1370CONFIG_NETDEV_1000=y
1371CONFIG_ACENIC=m
1372# CONFIG_ACENIC_OMIT_TIGON_I is not set
1373CONFIG_DL2K=m
1374CONFIG_E1000=m
1375CONFIG_E1000_NAPI=y
1376# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
1377CONFIG_E1000E=m
1378CONFIG_E1000E_ENABLED=y
1379CONFIG_IP1000=m
1380CONFIG_IGB=m
1381CONFIG_NS83820=m
1382CONFIG_HAMACHI=m
1383CONFIG_YELLOWFIN=m
1384CONFIG_R8169=m
1385CONFIG_R8169_NAPI=y
1386CONFIG_R8169_VLAN=y
1387CONFIG_SIS190=m
1388CONFIG_SKGE=m
1389# CONFIG_SKGE_DEBUG is not set
1390CONFIG_SKY2=m
1391# CONFIG_SKY2_DEBUG is not set
1392CONFIG_VIA_VELOCITY=m
1393CONFIG_TIGON3=m
1394CONFIG_BNX2=m
1395CONFIG_GIANFAR=m
1396CONFIG_GFAR_NAPI=y
1397# CONFIG_UCC_GETH is not set
1398CONFIG_MV643XX_ETH=m
1399CONFIG_QLA3XXX=m
1400CONFIG_ATL1=m
1401CONFIG_NETDEV_10000=y
1402CONFIG_CHELSIO_T1=m
1403CONFIG_CHELSIO_T1_1G=y
1404CONFIG_CHELSIO_T1_NAPI=y
1405CONFIG_CHELSIO_T3=m
1406CONFIG_IXGBE=m
1407CONFIG_IXGB=m
1408CONFIG_IXGB_NAPI=y
1409CONFIG_S2IO=m
1410CONFIG_S2IO_NAPI=y
1411CONFIG_MYRI10GE=m
1412CONFIG_NETXEN_NIC=m
1413CONFIG_NIU=m
1414# CONFIG_MLX4_CORE is not set
1415CONFIG_TEHUTI=m
1416CONFIG_BNX2X=m
1417CONFIG_SFC=m
1418# CONFIG_TR is not set
1419
1420#
1421# Wireless LAN
1422#
1423# CONFIG_WLAN_PRE80211 is not set
1424# CONFIG_WLAN_80211 is not set
1425# CONFIG_IWLWIFI_LEDS is not set
1426
1427#
1428# USB Network Adapters
1429#
1430CONFIG_USB_CATC=m
1431CONFIG_USB_KAWETH=m
1432CONFIG_USB_PEGASUS=m
1433CONFIG_USB_RTL8150=m
1434CONFIG_USB_USBNET=m
1435CONFIG_USB_NET_AX8817X=m
1436CONFIG_USB_NET_CDCETHER=m
1437CONFIG_USB_NET_DM9601=m
1438CONFIG_USB_NET_GL620A=m
1439CONFIG_USB_NET_NET1080=m
1440CONFIG_USB_NET_PLUSB=m
1441CONFIG_USB_NET_MCS7830=m
1442CONFIG_USB_NET_RNDIS_HOST=m
1443CONFIG_USB_NET_CDC_SUBSET=m
1444CONFIG_USB_ALI_M5632=y
1445CONFIG_USB_AN2720=y
1446CONFIG_USB_BELKIN=y
1447CONFIG_USB_ARMLINUX=y
1448CONFIG_USB_EPSON2888=y
1449CONFIG_USB_KC2190=y
1450CONFIG_USB_NET_ZAURUS=m
1451CONFIG_NET_PCMCIA=y
1452CONFIG_PCMCIA_3C589=m
1453CONFIG_PCMCIA_3C574=m
1454CONFIG_PCMCIA_FMVJ18X=m
1455CONFIG_PCMCIA_PCNET=m
1456CONFIG_PCMCIA_NMCLAN=m
1457CONFIG_PCMCIA_SMC91C92=m
1458CONFIG_PCMCIA_XIRC2PS=m
1459CONFIG_PCMCIA_AXNET=m
1460# CONFIG_WAN is not set
1461CONFIG_ATM_DRIVERS=y
1462# CONFIG_ATM_DUMMY is not set
1463CONFIG_ATM_TCP=m
1464CONFIG_ATM_LANAI=m
1465CONFIG_ATM_ENI=m
1466# CONFIG_ATM_ENI_DEBUG is not set
1467# CONFIG_ATM_ENI_TUNE_BURST is not set
1468# CONFIG_ATM_FIRESTREAM is not set
1469# CONFIG_ATM_ZATM is not set
1470CONFIG_ATM_NICSTAR=m
1471# CONFIG_ATM_NICSTAR_USE_SUNI is not set
1472# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
1473CONFIG_ATM_IDT77252=m
1474# CONFIG_ATM_IDT77252_DEBUG is not set
1475# CONFIG_ATM_IDT77252_RCV_ALL is not set
1476CONFIG_ATM_IDT77252_USE_SUNI=y
1477# CONFIG_ATM_AMBASSADOR is not set
1478# CONFIG_ATM_HORIZON is not set
1479# CONFIG_ATM_IA is not set
1480CONFIG_ATM_FORE200E_MAYBE=m
1481# CONFIG_ATM_FORE200E_PCA is not set
1482CONFIG_ATM_HE=m
1483# CONFIG_ATM_HE_USE_SUNI is not set
1484CONFIG_FDDI=y
1485# CONFIG_DEFXX is not set
1486CONFIG_SKFP=m
1487# CONFIG_HIPPI is not set
1488CONFIG_PLIP=m
1489CONFIG_PPP=m
1490CONFIG_PPP_MULTILINK=y
1491CONFIG_PPP_FILTER=y
1492CONFIG_PPP_ASYNC=m
1493CONFIG_PPP_SYNC_TTY=m
1494CONFIG_PPP_DEFLATE=m
1495# CONFIG_PPP_BSDCOMP is not set
1496CONFIG_PPP_MPPE=m
1497CONFIG_PPPOE=m
1498CONFIG_PPPOATM=m
1499CONFIG_PPPOL2TP=m
1500CONFIG_SLIP=m
1501CONFIG_SLIP_COMPRESSED=y
1502CONFIG_SLHC=m
1503CONFIG_SLIP_SMART=y
1504# CONFIG_SLIP_MODE_SLIP6 is not set
1505CONFIG_NET_FC=y
1506CONFIG_NETCONSOLE=m
1507CONFIG_NETCONSOLE_DYNAMIC=y
1508CONFIG_NETPOLL=y
1509CONFIG_NETPOLL_TRAP=y
1510CONFIG_NET_POLL_CONTROLLER=y
1511CONFIG_VIRTIO_NET=m
1512# CONFIG_ISDN is not set
1513# CONFIG_PHONE is not set
1514
1515#
1516# Input device support
1517#
1518CONFIG_INPUT=y
1519CONFIG_INPUT_FF_MEMLESS=y
1520CONFIG_INPUT_POLLDEV=m
1521
1522#
1523# Userland interfaces
1524#
1525CONFIG_INPUT_MOUSEDEV=y
1526# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
1527CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1528CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1529CONFIG_INPUT_JOYDEV=m
1530CONFIG_INPUT_EVDEV=y
1531# CONFIG_INPUT_EVBUG is not set
1532
1533#
1534# Input Device Drivers
1535#
1536CONFIG_INPUT_KEYBOARD=y
1537CONFIG_KEYBOARD_ATKBD=y
1538# CONFIG_KEYBOARD_SUNKBD is not set
1539# CONFIG_KEYBOARD_LKKBD is not set
1540# CONFIG_KEYBOARD_XTKBD is not set
1541# CONFIG_KEYBOARD_NEWTON is not set
1542# CONFIG_KEYBOARD_STOWAWAY is not set
1543# CONFIG_KEYBOARD_GPIO is not set
1544CONFIG_INPUT_MOUSE=y
1545CONFIG_MOUSE_PS2=y
1546CONFIG_MOUSE_PS2_ALPS=y
1547CONFIG_MOUSE_PS2_LOGIPS2PP=y
1548CONFIG_MOUSE_PS2_SYNAPTICS=y
1549CONFIG_MOUSE_PS2_LIFEBOOK=y
1550CONFIG_MOUSE_PS2_TRACKPOINT=y
1551# CONFIG_MOUSE_PS2_TOUCHKIT is not set
1552CONFIG_MOUSE_SERIAL=m
1553CONFIG_MOUSE_APPLETOUCH=m
1554# CONFIG_MOUSE_INPORT is not set
1555# CONFIG_MOUSE_LOGIBM is not set
1556# CONFIG_MOUSE_PC110PAD is not set
1557CONFIG_MOUSE_VSXXXAA=m
1558# CONFIG_MOUSE_GPIO is not set
1559CONFIG_INPUT_JOYSTICK=y
1560CONFIG_JOYSTICK_ANALOG=m
1561CONFIG_JOYSTICK_A3D=m
1562CONFIG_JOYSTICK_ADI=m
1563CONFIG_JOYSTICK_COBRA=m
1564CONFIG_JOYSTICK_GF2K=m
1565CONFIG_JOYSTICK_GRIP=m
1566CONFIG_JOYSTICK_GRIP_MP=m
1567CONFIG_JOYSTICK_GUILLEMOT=m
1568CONFIG_JOYSTICK_INTERACT=m
1569CONFIG_JOYSTICK_SIDEWINDER=m
1570CONFIG_JOYSTICK_TMDC=m
1571CONFIG_JOYSTICK_IFORCE=m
1572CONFIG_JOYSTICK_IFORCE_USB=y
1573CONFIG_JOYSTICK_IFORCE_232=y
1574CONFIG_JOYSTICK_WARRIOR=m
1575CONFIG_JOYSTICK_MAGELLAN=m
1576CONFIG_JOYSTICK_SPACEORB=m
1577CONFIG_JOYSTICK_SPACEBALL=m
1578CONFIG_JOYSTICK_STINGER=m
1579CONFIG_JOYSTICK_TWIDJOY=m
1580CONFIG_JOYSTICK_ZHENHUA=m
1581CONFIG_JOYSTICK_DB9=m
1582CONFIG_JOYSTICK_GAMECON=m
1583CONFIG_JOYSTICK_TURBOGRAFX=m
1584CONFIG_JOYSTICK_JOYDUMP=m
1585CONFIG_JOYSTICK_XPAD=m
1586CONFIG_JOYSTICK_XPAD_FF=y
1587CONFIG_JOYSTICK_XPAD_LEDS=y
1588CONFIG_INPUT_TABLET=y
1589CONFIG_TABLET_USB_ACECAD=m
1590CONFIG_TABLET_USB_AIPTEK=m
1591CONFIG_TABLET_USB_GTCO=m
1592CONFIG_TABLET_USB_KBTAB=m
1593CONFIG_TABLET_USB_WACOM=m
1594# CONFIG_INPUT_TOUCHSCREEN is not set
1595CONFIG_INPUT_MISC=y
1596CONFIG_INPUT_PCSPKR=m
1597CONFIG_INPUT_ATI_REMOTE=m
1598CONFIG_INPUT_ATI_REMOTE2=m
1599CONFIG_INPUT_KEYSPAN_REMOTE=m
1600CONFIG_INPUT_POWERMATE=m
1601CONFIG_INPUT_YEALINK=m
1602CONFIG_INPUT_UINPUT=m
1603
1604#
1605# Hardware I/O ports
1606#
1607CONFIG_SERIO=y
1608CONFIG_SERIO_I8042=y
1609CONFIG_SERIO_SERPORT=y
1610# CONFIG_SERIO_PARKBD is not set
1611# CONFIG_SERIO_PCIPS2 is not set
1612CONFIG_SERIO_LIBPS2=y
1613CONFIG_SERIO_RAW=m
1614CONFIG_GAMEPORT=m
1615CONFIG_GAMEPORT_NS558=m
1616CONFIG_GAMEPORT_L4=m
1617CONFIG_GAMEPORT_EMU10K1=m
1618CONFIG_GAMEPORT_FM801=m
1619CONFIG_INPUT_LIRC=y
1620CONFIG_LIRC_DEV=m
1621CONFIG_LIRC_ATIUSB=m
1622CONFIG_LIRC_BT829=m
1623CONFIG_LIRC_CMDIR=m
1624CONFIG_LIRC_I2C=m
1625CONFIG_LIRC_IGORPLUGUSB=m
1626CONFIG_LIRC_IMON=m
1627CONFIG_LIRC_IT87=m
1628CONFIG_LIRC_MCEUSB=m
1629CONFIG_LIRC_MCEUSB2=m
1630CONFIG_LIRC_PVR150=m
1631CONFIG_LIRC_PARALLEL=m
1632CONFIG_LIRC_SERIAL=m
1633CONFIG_LIRC_SIR=m
1634CONFIG_LIRC_STREAMZAP=m
1635CONFIG_LIRC_TTUSBIR=m
1636
1637#
1638# Character devices
1639#
1640CONFIG_VT=y
1641CONFIG_VT_CONSOLE=y
1642CONFIG_HW_CONSOLE=y
1643CONFIG_VT_HW_CONSOLE_BINDING=y
1644# CONFIG_DEVKMEM is not set
1645CONFIG_SERIAL_NONSTANDARD=y
1646# CONFIG_COMPUTONE is not set
1647CONFIG_ROCKETPORT=m
1648CONFIG_CYCLADES=m
1649# CONFIG_CYZ_INTR is not set
1650# CONFIG_DIGIEPCA is not set
1651# CONFIG_ESPSERIAL is not set
1652# CONFIG_MOXA_INTELLIO is not set
1653# CONFIG_MOXA_SMARTIO is not set
1654# CONFIG_ISI is not set
1655CONFIG_SYNCLINK=m
1656CONFIG_SYNCLINKMP=m
1657CONFIG_SYNCLINK_GT=m
1658CONFIG_N_HDLC=m
1659# CONFIG_RISCOM8 is not set
1660# CONFIG_SPECIALIX is not set
1661# CONFIG_SX is not set
1662# CONFIG_RIO is not set
1663# CONFIG_STALDRV is not set
1664CONFIG_NOZOMI=m
1665
1666#
1667# Serial drivers
1668#
1669CONFIG_SERIAL_8250=y
1670CONFIG_SERIAL_8250_CONSOLE=y
1671CONFIG_SERIAL_8250_PCI=y
1672CONFIG_SERIAL_8250_PNP=y
1673CONFIG_SERIAL_8250_CS=m
1674CONFIG_SERIAL_8250_NR_UARTS=32
1675CONFIG_SERIAL_8250_RUNTIME_UARTS=4
1676CONFIG_SERIAL_8250_EXTENDED=y
1677CONFIG_SERIAL_8250_MANY_PORTS=y
1678# CONFIG_SERIAL_8250_FOURPORT is not set
1679# CONFIG_SERIAL_8250_ACCENT is not set
1680# CONFIG_SERIAL_8250_BOCA is not set
1681# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
1682# CONFIG_SERIAL_8250_HUB6 is not set
1683CONFIG_SERIAL_8250_SHARE_IRQ=y
1684CONFIG_SERIAL_8250_DETECT_IRQ=y
1685CONFIG_SERIAL_8250_RSA=y
1686
1687#
1688# Non-8250 serial port support
1689#
1690CONFIG_SERIAL_UARTLITE=m
1691CONFIG_SERIAL_CORE=y
1692CONFIG_SERIAL_CORE_CONSOLE=y
1693CONFIG_SERIAL_PMACZILOG=m
1694# CONFIG_SERIAL_PMACZILOG_TTYS is not set
1695# CONFIG_SERIAL_CPM is not set
1696CONFIG_SERIAL_MPC52xx=y
1697CONFIG_SERIAL_MPC52xx_CONSOLE=y
1698CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
1699CONFIG_SERIAL_JSM=m
1700CONFIG_SERIAL_OF_PLATFORM=y
1701# CONFIG_SERIAL_QE is not set
1702CONFIG_UNIX98_PTYS=y
1703# CONFIG_LEGACY_PTYS is not set
1704# CONFIG_CRASH is not set
1705CONFIG_BRIQ_PANEL=m
1706CONFIG_PRINTER=m
1707CONFIG_LP_CONSOLE=y
1708CONFIG_PPDEV=m
1709# CONFIG_HVC_RTAS is not set
1710# CONFIG_IPMI_HANDLER is not set
1711CONFIG_HW_RANDOM=y
1712CONFIG_HW_RANDOM_VIRTIO=m
1713CONFIG_NVRAM=y
1714CONFIG_DTLK=m
1715CONFIG_R3964=m
1716# CONFIG_APPLICOM is not set
1717
1718#
1719# PCMCIA character devices
1720#
1721# CONFIG_SYNCLINK_CS is not set
1722CONFIG_CARDMAN_4000=m
1723CONFIG_CARDMAN_4040=m
1724CONFIG_IPWIRELESS=m
1725# CONFIG_RAW_DRIVER is not set
1726# CONFIG_TCG_TPM is not set
1727CONFIG_DEVPORT=y
1728CONFIG_I2C=y
1729CONFIG_I2C_BOARDINFO=y
1730CONFIG_I2C_CHARDEV=m
1731CONFIG_I2C_ALGOBIT=y
1732CONFIG_I2C_ALGOPCA=m
1733
1734#
1735# I2C Hardware Bus support
1736#
1737
1738#
1739# PC SMBus host controller drivers
1740#
1741# CONFIG_I2C_ALI1535 is not set
1742# CONFIG_I2C_ALI1563 is not set
1743# CONFIG_I2C_ALI15X3 is not set
1744# CONFIG_I2C_AMD756 is not set
1745# CONFIG_I2C_AMD8111 is not set
1746# CONFIG_I2C_I801 is not set
1747# CONFIG_I2C_ISCH is not set
1748# CONFIG_I2C_PIIX4 is not set
1749# CONFIG_I2C_NFORCE2 is not set
1750# CONFIG_I2C_SIS5595 is not set
1751# CONFIG_I2C_SIS630 is not set
1752# CONFIG_I2C_SIS96X is not set
1753# CONFIG_I2C_VIA is not set
1754# CONFIG_I2C_VIAPRO is not set
1755
1756#
1757# Mac SMBus host controller drivers
1758#
1759CONFIG_I2C_HYDRA=m
1760CONFIG_I2C_POWERMAC=y
1761
1762#
1763# I2C system bus drivers (mostly embedded / system-on-chip)
1764#
1765# CONFIG_I2C_CPM is not set
1766# CONFIG_I2C_GPIO is not set
1767CONFIG_I2C_MPC=m
1768# CONFIG_I2C_OCORES is not set
1769CONFIG_I2C_SIMTEC=m
1770
1771#
1772# External I2C/SMBus adapter drivers
1773#
1774CONFIG_I2C_PARPORT=m
1775CONFIG_I2C_PARPORT_LIGHT=m
1776# CONFIG_I2C_TAOS_EVM is not set
1777CONFIG_I2C_TINY_USB=m
1778
1779#
1780# Graphics adapter I2C/DDC channel drivers
1781#
1782CONFIG_I2C_VOODOO3=m
1783
1784#
1785# Other I2C/SMBus bus drivers
1786#
1787# CONFIG_I2C_ELEKTOR is not set
1788CONFIG_I2C_PCA_ISA=m
1789CONFIG_I2C_PCA_PLATFORM=m
1790CONFIG_I2C_STUB=m
1791
1792#
1793# Miscellaneous I2C Chip support
1794#
1795# CONFIG_DS1682 is not set
1796CONFIG_AT24=m
1797CONFIG_SENSORS_EEPROM=m
1798CONFIG_SENSORS_PCF8574=m
1799CONFIG_PCF8575=m
1800CONFIG_SENSORS_PCA9539=m
1801CONFIG_SENSORS_PCF8591=m
1802# CONFIG_TPS65010 is not set
1803CONFIG_SENSORS_MAX6875=m
1804CONFIG_SENSORS_TSL2550=m
1805# CONFIG_I2C_DEBUG_CORE is not set
1806# CONFIG_I2C_DEBUG_ALGO is not set
1807# CONFIG_I2C_DEBUG_BUS is not set
1808# CONFIG_I2C_DEBUG_CHIP is not set
1809# CONFIG_SPI is not set
1810CONFIG_HAVE_GPIO_LIB=y
1811
1812#
1813# GPIO Support
1814#
1815# CONFIG_DEBUG_GPIO is not set
1816
1817#
1818# I2C GPIO expanders:
1819#
1820# CONFIG_GPIO_PCA953X is not set
1821# CONFIG_GPIO_PCF857X is not set
1822
1823#
1824# SPI GPIO expanders:
1825#
1826CONFIG_W1=m
1827CONFIG_W1_CON=y
1828
1829#
1830# 1-wire Bus Masters
1831#
1832# CONFIG_W1_MASTER_MATROX is not set
1833CONFIG_W1_MASTER_DS2490=m
1834CONFIG_W1_MASTER_DS2482=m
1835# CONFIG_W1_MASTER_GPIO is not set
1836
1837#
1838# 1-wire Slaves
1839#
1840CONFIG_W1_SLAVE_THERM=m
1841CONFIG_W1_SLAVE_SMEM=m
1842CONFIG_W1_SLAVE_DS2433=m
1843CONFIG_W1_SLAVE_DS2433_CRC=y
1844CONFIG_W1_SLAVE_DS2760=m
1845CONFIG_POWER_SUPPLY=m
1846# CONFIG_POWER_SUPPLY_DEBUG is not set
1847# CONFIG_PDA_POWER is not set
1848CONFIG_APM_POWER=m
1849# CONFIG_BATTERY_DS2760 is not set
1850CONFIG_BATTERY_PMU=m
1851CONFIG_HWMON=m
1852CONFIG_HWMON_VID=m
1853CONFIG_SENSORS_AD7418=m
1854CONFIG_SENSORS_ADM1021=m
1855CONFIG_SENSORS_ADM1025=m
1856CONFIG_SENSORS_ADM1026=m
1857CONFIG_SENSORS_ADM1029=m
1858CONFIG_SENSORS_ADM1031=m
1859CONFIG_SENSORS_ADM9240=m
1860CONFIG_SENSORS_ADT7470=m
1861CONFIG_SENSORS_ADT7473=m
1862CONFIG_SENSORS_AMS=m
1863CONFIG_SENSORS_AMS_PMU=y
1864CONFIG_SENSORS_AMS_I2C=y
1865CONFIG_SENSORS_ATXP1=m
1866CONFIG_SENSORS_DS1621=m
1867# CONFIG_SENSORS_I5K_AMB is not set
1868CONFIG_SENSORS_F71805F=m
1869CONFIG_SENSORS_F71882FG=m
1870CONFIG_SENSORS_F75375S=m
1871CONFIG_SENSORS_GL518SM=m
1872CONFIG_SENSORS_GL520SM=m
1873CONFIG_SENSORS_IT87=m
1874CONFIG_SENSORS_LM63=m
1875CONFIG_SENSORS_LM75=m
1876CONFIG_SENSORS_LM77=m
1877CONFIG_SENSORS_LM78=m
1878CONFIG_SENSORS_LM80=m
1879CONFIG_SENSORS_LM83=m
1880CONFIG_SENSORS_LM85=m
1881CONFIG_SENSORS_LM87=m
1882CONFIG_SENSORS_LM90=m
1883CONFIG_SENSORS_LM92=m
1884CONFIG_SENSORS_LM93=m
1885CONFIG_SENSORS_MAX1619=m
1886CONFIG_SENSORS_MAX6650=m
1887CONFIG_SENSORS_PC87360=m
1888CONFIG_SENSORS_PC87427=m
1889CONFIG_SENSORS_SIS5595=m
1890CONFIG_SENSORS_DME1737=m
1891CONFIG_SENSORS_SMSC47M1=m
1892CONFIG_SENSORS_SMSC47M192=m
1893CONFIG_SENSORS_SMSC47B397=m
1894CONFIG_SENSORS_ADS7828=m
1895CONFIG_SENSORS_THMC50=m
1896CONFIG_SENSORS_VIA686A=m
1897CONFIG_SENSORS_VT1211=m
1898CONFIG_SENSORS_VT8231=m
1899CONFIG_SENSORS_W83781D=m
1900CONFIG_SENSORS_W83791D=m
1901CONFIG_SENSORS_W83792D=m
1902CONFIG_SENSORS_W83793=m
1903CONFIG_SENSORS_W83L785TS=m
1904CONFIG_SENSORS_W83L786NG=m
1905CONFIG_SENSORS_W83627HF=m
1906CONFIG_SENSORS_W83627EHF=m
1907# CONFIG_HWMON_DEBUG_CHIP is not set
1908CONFIG_THERMAL=y
1909CONFIG_WATCHDOG=y
1910# CONFIG_WATCHDOG_NOWAYOUT is not set
1911
1912#
1913# Watchdog Device Drivers
1914#
1915CONFIG_SOFT_WATCHDOG=m
1916# CONFIG_MPC5200_WDT is not set
1917CONFIG_83xx_WDT=m
1918CONFIG_WATCHDOG_RTAS=m
1919
1920#
1921# ISA-based Watchdog Cards
1922#
1923# CONFIG_PCWATCHDOG is not set
1924# CONFIG_MIXCOMWD is not set
1925# CONFIG_WDT is not set
1926
1927#
1928# PCI-based Watchdog Cards
1929#
1930# CONFIG_PCIPCWATCHDOG is not set
1931# CONFIG_WDTPCI is not set
1932
1933#
1934# USB-based Watchdog Cards
1935#
1936CONFIG_USBPCWATCHDOG=m
1937
1938#
1939# Sonics Silicon Backplane
1940#
1941CONFIG_SSB_POSSIBLE=y
1942CONFIG_SSB=m
1943CONFIG_SSB_SPROM=y
1944CONFIG_SSB_PCIHOST_POSSIBLE=y
1945CONFIG_SSB_PCIHOST=y
1946# CONFIG_SSB_B43_PCI_BRIDGE is not set
1947CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
1948CONFIG_SSB_PCMCIAHOST=y
1949# CONFIG_SSB_DEBUG is not set
1950CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
1951CONFIG_SSB_DRIVER_PCICORE=y
1952
1953#
1954# Multifunction device drivers
1955#
1956CONFIG_MFD_SM501=m
1957# CONFIG_HTC_PASIC3 is not set
1958
1959#
1960# Multimedia devices
1961#
1962
1963#
1964# Multimedia core support
1965#
1966CONFIG_VIDEO_DEV=m
1967CONFIG_VIDEO_V4L2_COMMON=m
1968CONFIG_VIDEO_ALLOW_V4L1=y
1969CONFIG_VIDEO_V4L1_COMPAT=y
1970CONFIG_DVB_CORE=m
1971CONFIG_VIDEO_MEDIA=m
1972
1973#
1974# Multimedia drivers
1975#
1976CONFIG_VIDEO_SAA7146=m
1977CONFIG_VIDEO_SAA7146_VV=m
1978CONFIG_MEDIA_ATTACH=y
1979CONFIG_MEDIA_TUNER=m
1980# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
1981CONFIG_MEDIA_TUNER_SIMPLE=m
1982CONFIG_MEDIA_TUNER_TDA8290=m
1983CONFIG_MEDIA_TUNER_TDA827X=m
1984CONFIG_MEDIA_TUNER_TDA18271=m
1985CONFIG_MEDIA_TUNER_TDA9887=m
1986CONFIG_MEDIA_TUNER_TEA5761=m
1987CONFIG_MEDIA_TUNER_TEA5767=m
1988CONFIG_MEDIA_TUNER_MT20XX=m
1989CONFIG_MEDIA_TUNER_MT2060=m
1990CONFIG_MEDIA_TUNER_MT2266=m
1991CONFIG_MEDIA_TUNER_MT2131=m
1992CONFIG_MEDIA_TUNER_QT1010=m
1993CONFIG_MEDIA_TUNER_XC2028=m
1994CONFIG_MEDIA_TUNER_XC5000=m
1995CONFIG_MEDIA_TUNER_MXL5005S=m
1996CONFIG_VIDEO_V4L2=m
1997CONFIG_VIDEO_V4L1=m
1998CONFIG_VIDEOBUF_GEN=m
1999CONFIG_VIDEOBUF_DMA_SG=m
2000CONFIG_VIDEOBUF_VMALLOC=m
2001CONFIG_VIDEOBUF_DVB=m
2002CONFIG_VIDEO_BTCX=m
2003CONFIG_VIDEO_IR_I2C=m
2004CONFIG_VIDEO_IR=m
2005CONFIG_VIDEO_TVEEPROM=m
2006CONFIG_VIDEO_TUNER=m
2007CONFIG_VIDEO_CAPTURE_DRIVERS=y
2008# CONFIG_VIDEO_ADV_DEBUG is not set
2009# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
2010
2011#
2012# Encoders/decoders and other helper chips
2013#
2014
2015#
2016# Audio decoders
2017#
2018CONFIG_VIDEO_TVAUDIO=m
2019CONFIG_VIDEO_TDA7432=m
2020CONFIG_VIDEO_TDA9840=m
2021CONFIG_VIDEO_TDA9875=m
2022CONFIG_VIDEO_TEA6415C=m
2023CONFIG_VIDEO_TEA6420=m
2024CONFIG_VIDEO_MSP3400=m
2025CONFIG_VIDEO_CS5345=m
2026CONFIG_VIDEO_CS53L32A=m
2027CONFIG_VIDEO_M52790=m
2028CONFIG_VIDEO_TLV320AIC23B=m
2029CONFIG_VIDEO_WM8775=m
2030CONFIG_VIDEO_WM8739=m
2031CONFIG_VIDEO_VP27SMPX=m
2032
2033#
2034# Video decoders
2035#
2036CONFIG_VIDEO_BT819=m
2037CONFIG_VIDEO_BT856=m
2038CONFIG_VIDEO_BT866=m
2039CONFIG_VIDEO_KS0127=m
2040CONFIG_VIDEO_OV7670=m
2041CONFIG_VIDEO_TCM825X=m
2042CONFIG_VIDEO_SAA7110=m
2043CONFIG_VIDEO_SAA7111=m
2044CONFIG_VIDEO_SAA7114=m
2045CONFIG_VIDEO_SAA711X=m
2046CONFIG_VIDEO_SAA717X=m
2047CONFIG_VIDEO_SAA7191=m
2048CONFIG_VIDEO_TVP5150=m
2049CONFIG_VIDEO_VPX3220=m
2050
2051#
2052# Video and audio decoders
2053#
2054CONFIG_VIDEO_CX25840=m
2055
2056#
2057# MPEG video encoders
2058#
2059CONFIG_VIDEO_CX2341X=m
2060
2061#
2062# Video encoders
2063#
2064CONFIG_VIDEO_SAA7127=m
2065CONFIG_VIDEO_SAA7185=m
2066CONFIG_VIDEO_ADV7170=m
2067CONFIG_VIDEO_ADV7175=m
2068
2069#
2070# Video improvement chips
2071#
2072CONFIG_VIDEO_UPD64031A=m
2073CONFIG_VIDEO_UPD64083=m
2074# CONFIG_VIDEO_VIVI is not set
2075CONFIG_VIDEO_BT848=m
2076CONFIG_VIDEO_BT848_DVB=y
2077CONFIG_VIDEO_SAA6588=m
2078# CONFIG_VIDEO_PMS is not set
2079CONFIG_VIDEO_BWQCAM=m
2080CONFIG_VIDEO_CQCAM=m
2081CONFIG_VIDEO_W9966=m
2082CONFIG_VIDEO_CPIA=m
2083CONFIG_VIDEO_CPIA_PP=m
2084CONFIG_VIDEO_CPIA_USB=m
2085CONFIG_VIDEO_CPIA2=m
2086CONFIG_VIDEO_SAA5246A=m
2087CONFIG_VIDEO_SAA5249=m
2088CONFIG_TUNER_3036=m
2089# CONFIG_VIDEO_STRADIS is not set
2090# CONFIG_VIDEO_ZORAN is not set
2091CONFIG_VIDEO_SAA7134=m
2092CONFIG_VIDEO_SAA7134_ALSA=m
2093CONFIG_VIDEO_SAA7134_DVB=m
2094CONFIG_VIDEO_MXB=m
2095CONFIG_VIDEO_DPC=m
2096CONFIG_VIDEO_HEXIUM_ORION=m
2097CONFIG_VIDEO_HEXIUM_GEMINI=m
2098CONFIG_VIDEO_CX88=m
2099CONFIG_VIDEO_CX88_ALSA=m
2100CONFIG_VIDEO_CX88_BLACKBIRD=m
2101CONFIG_VIDEO_CX88_DVB=m
2102CONFIG_VIDEO_CX88_VP3054=m
2103CONFIG_VIDEO_CX23885=m
2104CONFIG_VIDEO_AU0828=m
2105CONFIG_VIDEO_IVTV=m
2106CONFIG_VIDEO_FB_IVTV=m
2107CONFIG_VIDEO_CX18=m
2108# CONFIG_VIDEO_CAFE_CCIC is not set
2109CONFIG_V4L_USB_DRIVERS=y
2110CONFIG_USB_VIDEO_CLASS=m
2111CONFIG_VIDEO_PVRUSB2=m
2112CONFIG_VIDEO_PVRUSB2_SYSFS=y
2113CONFIG_VIDEO_PVRUSB2_DVB=y
2114# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
2115CONFIG_VIDEO_EM28XX=m
2116CONFIG_VIDEO_EM28XX_ALSA=m
2117CONFIG_VIDEO_EM28XX_DVB=m
2118CONFIG_VIDEO_USBVISION=m
2119CONFIG_VIDEO_USBVIDEO=m
2120CONFIG_USB_VICAM=m
2121CONFIG_USB_IBMCAM=m
2122CONFIG_USB_KONICAWC=m
2123CONFIG_USB_QUICKCAM_MESSENGER=m
2124CONFIG_USB_ET61X251=m
2125CONFIG_VIDEO_OVCAMCHIP=m
2126CONFIG_USB_W9968CF=m
2127CONFIG_USB_OV511=m
2128CONFIG_USB_SE401=m
2129CONFIG_USB_SN9C102=m
2130CONFIG_USB_STV680=m
2131CONFIG_USB_ZC0301=m
2132CONFIG_USB_PWC=m
2133# CONFIG_USB_PWC_DEBUG is not set
2134CONFIG_USB_ZR364XX=m
2135CONFIG_USB_STKWEBCAM=m
2136CONFIG_SOC_CAMERA=m
2137CONFIG_SOC_CAMERA_MT9M001=m
2138# CONFIG_MT9M001_PCA9536_SWITCH is not set
2139CONFIG_SOC_CAMERA_MT9V022=m
2140# CONFIG_MT9V022_PCA9536_SWITCH is not set
2141CONFIG_RADIO_ADAPTERS=y
2142# CONFIG_RADIO_CADET is not set
2143# CONFIG_RADIO_RTRACK is not set
2144# CONFIG_RADIO_RTRACK2 is not set
2145# CONFIG_RADIO_AZTECH is not set
2146# CONFIG_RADIO_GEMTEK is not set
2147CONFIG_RADIO_GEMTEK_PCI=m
2148CONFIG_RADIO_MAXIRADIO=m
2149CONFIG_RADIO_MAESTRO=m
2150# CONFIG_RADIO_SF16FMI is not set
2151# CONFIG_RADIO_SF16FMR2 is not set
2152# CONFIG_RADIO_TERRATEC is not set
2153# CONFIG_RADIO_TRUST is not set
2154# CONFIG_RADIO_TYPHOON is not set
2155# CONFIG_RADIO_ZOLTRIX is not set
2156CONFIG_USB_DSBR=m
2157CONFIG_USB_SI470X=m
2158CONFIG_DVB_CAPTURE_DRIVERS=y
2159
2160#
2161# Supported SAA7146 based PCI Adapters
2162#
2163CONFIG_TTPCI_EEPROM=m
2164CONFIG_DVB_AV7110=m
2165CONFIG_DVB_AV7110_OSD=y
2166CONFIG_DVB_BUDGET_CORE=m
2167CONFIG_DVB_BUDGET=m
2168CONFIG_DVB_BUDGET_CI=m
2169CONFIG_DVB_BUDGET_AV=m
2170CONFIG_DVB_BUDGET_PATCH=m
2171
2172#
2173# Supported USB Adapters
2174#
2175CONFIG_DVB_USB=m
2176# CONFIG_DVB_USB_DEBUG is not set
2177CONFIG_DVB_USB_A800=m
2178CONFIG_DVB_USB_DIBUSB_MB=m
2179# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
2180CONFIG_DVB_USB_DIBUSB_MC=m
2181CONFIG_DVB_USB_DIB0700=m
2182CONFIG_DVB_USB_UMT_010=m
2183CONFIG_DVB_USB_CXUSB=m
2184CONFIG_DVB_USB_M920X=m
2185CONFIG_DVB_USB_GL861=m
2186CONFIG_DVB_USB_AU6610=m
2187CONFIG_DVB_USB_DIGITV=m
2188CONFIG_DVB_USB_VP7045=m
2189CONFIG_DVB_USB_VP702X=m
2190CONFIG_DVB_USB_GP8PSK=m
2191CONFIG_DVB_USB_NOVA_T_USB2=m
2192CONFIG_DVB_USB_TTUSB2=m
2193CONFIG_DVB_USB_DTT200U=m
2194CONFIG_DVB_USB_OPERA1=m
2195CONFIG_DVB_USB_AF9005=m
2196CONFIG_DVB_USB_AF9005_REMOTE=m
2197CONFIG_DVB_TTUSB_BUDGET=m
2198CONFIG_DVB_TTUSB_DEC=m
2199CONFIG_DVB_CINERGYT2=m
2200CONFIG_DVB_CINERGYT2_TUNING=y
2201CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
2202CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
2203CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
2204CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
2205CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=100
2206
2207#
2208# Supported FlexCopII (B2C2) Adapters
2209#
2210CONFIG_DVB_B2C2_FLEXCOP=m
2211CONFIG_DVB_B2C2_FLEXCOP_PCI=m
2212CONFIG_DVB_B2C2_FLEXCOP_USB=m
2213# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
2214
2215#
2216# Supported BT878 Adapters
2217#
2218CONFIG_DVB_BT8XX=m
2219
2220#
2221# Supported Pluto2 Adapters
2222#
2223CONFIG_DVB_PLUTO2=m
2224
2225#
2226# Supported DVB Frontends
2227#
2228
2229#
2230# Customise DVB Frontends
2231#
2232# CONFIG_DVB_FE_CUSTOMISE is not set
2233
2234#
2235# DVB-S (satellite) frontends
2236#
2237CONFIG_DVB_CX24110=m
2238CONFIG_DVB_CX24123=m
2239CONFIG_DVB_MT312=m
2240CONFIG_DVB_S5H1420=m
2241CONFIG_DVB_STV0299=m
2242CONFIG_DVB_TDA8083=m
2243CONFIG_DVB_TDA10086=m
2244CONFIG_DVB_VES1X93=m
2245CONFIG_DVB_TUNER_ITD1000=m
2246CONFIG_DVB_TDA826X=m
2247CONFIG_DVB_TUA6100=m
2248
2249#
2250# DVB-T (terrestrial) frontends
2251#
2252CONFIG_DVB_SP8870=m
2253CONFIG_DVB_SP887X=m
2254CONFIG_DVB_CX22700=m
2255CONFIG_DVB_CX22702=m
2256CONFIG_DVB_L64781=m
2257CONFIG_DVB_TDA1004X=m
2258CONFIG_DVB_NXT6000=m
2259CONFIG_DVB_MT352=m
2260CONFIG_DVB_ZL10353=m
2261CONFIG_DVB_DIB3000MB=m
2262CONFIG_DVB_DIB3000MC=m
2263CONFIG_DVB_DIB7000M=m
2264CONFIG_DVB_DIB7000P=m
2265CONFIG_DVB_TDA10048=m
2266
2267#
2268# DVB-C (cable) frontends
2269#
2270CONFIG_DVB_VES1820=m
2271CONFIG_DVB_TDA10021=m
2272CONFIG_DVB_TDA10023=m
2273CONFIG_DVB_STV0297=m
2274
2275#
2276# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
2277#
2278CONFIG_DVB_NXT200X=m
2279CONFIG_DVB_OR51211=m
2280CONFIG_DVB_OR51132=m
2281CONFIG_DVB_BCM3510=m
2282CONFIG_DVB_LGDT330X=m
2283CONFIG_DVB_S5H1409=m
2284CONFIG_DVB_AU8522=m
2285CONFIG_DVB_S5H1411=m
2286
2287#
2288# Digital terrestrial only tuners/PLL
2289#
2290CONFIG_DVB_PLL=m
2291CONFIG_DVB_TUNER_DIB0070=m
2292
2293#
2294# SEC control devices for DVB-S
2295#
2296CONFIG_DVB_LNBP21=m
2297CONFIG_DVB_ISL6405=m
2298CONFIG_DVB_ISL6421=m
2299CONFIG_DAB=y
2300CONFIG_USB_DABUSB=m
2301
2302#
2303# Graphics support
2304#
2305CONFIG_AGP=y
2306CONFIG_AGP_UNINORTH=y
2307CONFIG_DRM=m
2308CONFIG_DRM_TDFX=m
2309CONFIG_DRM_R128=m
2310CONFIG_DRM_RADEON=m
2311CONFIG_DRM_MGA=m
2312CONFIG_DRM_SIS=m
2313CONFIG_DRM_VIA=m
2314CONFIG_DRM_SAVAGE=m
2315CONFIG_VGASTATE=y
2316CONFIG_VIDEO_OUTPUT_CONTROL=m
2317CONFIG_FB=y
2318# CONFIG_FIRMWARE_EDID is not set
2319CONFIG_FB_DDC=y
2320CONFIG_FB_CFB_FILLRECT=y
2321CONFIG_FB_CFB_COPYAREA=y
2322CONFIG_FB_CFB_IMAGEBLIT=y
2323# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
2324# CONFIG_FB_SYS_FILLRECT is not set
2325# CONFIG_FB_SYS_COPYAREA is not set
2326# CONFIG_FB_SYS_IMAGEBLIT is not set
2327# CONFIG_FB_FOREIGN_ENDIAN is not set
2328# CONFIG_FB_SYS_FOPS is not set
2329CONFIG_FB_SVGALIB=m
2330CONFIG_FB_MACMODES=y
2331CONFIG_FB_BACKLIGHT=y
2332CONFIG_FB_MODE_HELPERS=y
2333CONFIG_FB_TILEBLITTING=y
2334
2335#
2336# Frame buffer hardware drivers
2337#
2338CONFIG_FB_CIRRUS=m
2339# CONFIG_FB_PM2 is not set
2340# CONFIG_FB_CYBER2000 is not set
2341CONFIG_FB_OF=y
2342# CONFIG_FB_CONTROL is not set
2343CONFIG_FB_PLATINUM=y
2344CONFIG_FB_VALKYRIE=y
2345CONFIG_FB_CT65550=y
2346# CONFIG_FB_ASILIANT is not set
2347# CONFIG_FB_IMSTT is not set
2348# CONFIG_FB_VGA16 is not set
2349# CONFIG_FB_UVESA is not set
2350# CONFIG_FB_S1D13XXX is not set
2351CONFIG_FB_NVIDIA=y
2352CONFIG_FB_NVIDIA_I2C=y
2353# CONFIG_FB_NVIDIA_DEBUG is not set
2354CONFIG_FB_NVIDIA_BACKLIGHT=y
2355CONFIG_FB_RIVA=m
2356# CONFIG_FB_RIVA_I2C is not set
2357# CONFIG_FB_RIVA_DEBUG is not set
2358CONFIG_FB_RIVA_BACKLIGHT=y
2359CONFIG_FB_MATROX=y
2360CONFIG_FB_MATROX_MILLENIUM=y
2361CONFIG_FB_MATROX_MYSTIQUE=y
2362CONFIG_FB_MATROX_G=y
2363CONFIG_FB_MATROX_I2C=m
2364CONFIG_FB_MATROX_MAVEN=m
2365CONFIG_FB_MATROX_MULTIHEAD=y
2366CONFIG_FB_RADEON=y
2367CONFIG_FB_RADEON_I2C=y
2368CONFIG_FB_RADEON_BACKLIGHT=y
2369# CONFIG_FB_RADEON_DEBUG is not set
2370CONFIG_FB_ATY128=y
2371CONFIG_FB_ATY128_BACKLIGHT=y
2372CONFIG_FB_ATY=y
2373CONFIG_FB_ATY_CT=y
2374CONFIG_FB_ATY_GENERIC_LCD=y
2375CONFIG_FB_ATY_GX=y
2376CONFIG_FB_ATY_BACKLIGHT=y
2377CONFIG_FB_S3=m
2378CONFIG_FB_SAVAGE=m
2379CONFIG_FB_SAVAGE_I2C=y
2380CONFIG_FB_SAVAGE_ACCEL=y
2381# CONFIG_FB_SIS is not set
2382CONFIG_FB_NEOMAGIC=m
2383CONFIG_FB_KYRO=m
2384CONFIG_FB_3DFX=m
2385CONFIG_FB_3DFX_ACCEL=y
2386CONFIG_FB_VOODOO1=m
2387# CONFIG_FB_VT8623 is not set
2388CONFIG_FB_TRIDENT=m
2389CONFIG_FB_TRIDENT_ACCEL=y
2390# CONFIG_FB_ARK is not set
2391# CONFIG_FB_PM3 is not set
2392# CONFIG_FB_FSL_DIU is not set
2393CONFIG_FB_SM501=m
2394CONFIG_FB_IBM_GXT4500=y
2395# CONFIG_FB_VIRTUAL is not set
2396CONFIG_BACKLIGHT_LCD_SUPPORT=y
2397CONFIG_LCD_CLASS_DEVICE=m
2398CONFIG_BACKLIGHT_CLASS_DEVICE=y
2399# CONFIG_BACKLIGHT_CORGI is not set
2400
2401#
2402# Display device support
2403#
2404CONFIG_DISPLAY_SUPPORT=m
2405
2406#
2407# Display hardware drivers
2408#
2409
2410#
2411# Console display driver support
2412#
2413CONFIG_VGA_CONSOLE=y
2414CONFIG_VGACON_SOFT_SCROLLBACK=y
2415CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
2416# CONFIG_MDA_CONSOLE is not set
2417CONFIG_DUMMY_CONSOLE=y
2418CONFIG_FRAMEBUFFER_CONSOLE=y
2419CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
2420CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
2421# CONFIG_FONTS is not set
2422CONFIG_FONT_8x8=y
2423CONFIG_FONT_8x16=y
2424CONFIG_LOGO=y
2425# CONFIG_LOGO_LINUX_MONO is not set
2426# CONFIG_LOGO_LINUX_VGA16 is not set
2427CONFIG_LOGO_LINUX_CLUT224=y
2428CONFIG_SOUND=m
2429CONFIG_SND=m
2430CONFIG_SND_TIMER=m
2431CONFIG_SND_PCM=m
2432CONFIG_SND_HWDEP=m
2433CONFIG_SND_RAWMIDI=m
2434CONFIG_SND_SEQUENCER=m
2435CONFIG_SND_SEQ_DUMMY=m
2436CONFIG_SND_OSSEMUL=y
2437CONFIG_SND_MIXER_OSS=m
2438CONFIG_SND_PCM_OSS=m
2439CONFIG_SND_PCM_OSS_PLUGINS=y
2440CONFIG_SND_SEQUENCER_OSS=y
2441CONFIG_SND_DYNAMIC_MINORS=y
2442# CONFIG_SND_SUPPORT_OLD_API is not set
2443CONFIG_SND_VERBOSE_PROCFS=y
2444CONFIG_SND_VERBOSE_PRINTK=y
2445CONFIG_SND_DEBUG=y
2446CONFIG_SND_DEBUG_VERBOSE=y
2447CONFIG_SND_PCM_XRUN_DEBUG=y
2448CONFIG_SND_VMASTER=y
2449CONFIG_SND_MPU401_UART=m
2450CONFIG_SND_OPL3_LIB=m
2451CONFIG_SND_VX_LIB=m
2452CONFIG_SND_AC97_CODEC=m
2453CONFIG_SND_DRIVERS=y
2454CONFIG_SND_DUMMY=m
2455CONFIG_SND_VIRMIDI=m
2456CONFIG_SND_MTPAV=m
2457CONFIG_SND_MTS64=m
2458CONFIG_SND_SERIAL_U16550=m
2459CONFIG_SND_MPU401=m
2460CONFIG_SND_PORTMAN2X4=m
2461CONFIG_SND_AC97_POWER_SAVE=y
2462CONFIG_SND_AC97_POWER_SAVE_DEFAULT=5
2463CONFIG_SND_SB_COMMON=m
2464CONFIG_SND_SB16_DSP=m
2465CONFIG_SND_ISA=y
2466# CONFIG_SND_ADLIB is not set
2467# CONFIG_SND_AD1816A is not set
2468# CONFIG_SND_AD1848 is not set
2469# CONFIG_SND_ALS100 is not set
2470# CONFIG_SND_AZT2320 is not set
2471# CONFIG_SND_CMI8330 is not set
2472# CONFIG_SND_CS4231 is not set
2473# CONFIG_SND_CS4232 is not set
2474# CONFIG_SND_CS4236 is not set
2475# CONFIG_SND_DT019X is not set
2476# CONFIG_SND_ES968 is not set
2477# CONFIG_SND_ES1688 is not set
2478# CONFIG_SND_ES18XX is not set
2479# CONFIG_SND_SC6000 is not set
2480# CONFIG_SND_GUSCLASSIC is not set
2481# CONFIG_SND_GUSEXTREME is not set
2482# CONFIG_SND_GUSMAX is not set
2483# CONFIG_SND_INTERWAVE is not set
2484# CONFIG_SND_INTERWAVE_STB is not set
2485# CONFIG_SND_OPL3SA2 is not set
2486# CONFIG_SND_OPTI92X_AD1848 is not set
2487# CONFIG_SND_OPTI92X_CS4231 is not set
2488# CONFIG_SND_OPTI93X is not set
2489# CONFIG_SND_MIRO is not set
2490# CONFIG_SND_SB8 is not set
2491# CONFIG_SND_SB16 is not set
2492# CONFIG_SND_SBAWE is not set
2493# CONFIG_SND_SGALAXY is not set
2494# CONFIG_SND_SSCAPE is not set
2495# CONFIG_SND_WAVEFRONT is not set
2496CONFIG_SND_PCI=y
2497CONFIG_SND_AD1889=m
2498CONFIG_SND_ALS300=m
2499CONFIG_SND_ALS4000=m
2500CONFIG_SND_ALI5451=m
2501CONFIG_SND_ATIIXP=m
2502CONFIG_SND_ATIIXP_MODEM=m
2503CONFIG_SND_AU8810=m
2504CONFIG_SND_AU8820=m
2505CONFIG_SND_AU8830=m
2506CONFIG_SND_AW2=m
2507CONFIG_SND_AZT3328=m
2508CONFIG_SND_BT87X=m
2509# CONFIG_SND_BT87X_OVERCLOCK is not set
2510CONFIG_SND_CA0106=m
2511CONFIG_SND_CMIPCI=m
2512CONFIG_SND_OXYGEN_LIB=m
2513CONFIG_SND_OXYGEN=m
2514CONFIG_SND_CS4281=m
2515CONFIG_SND_CS46XX=m
2516CONFIG_SND_CS46XX_NEW_DSP=y
2517CONFIG_SND_CS5530=m
2518CONFIG_SND_DARLA20=m
2519CONFIG_SND_GINA20=m
2520CONFIG_SND_LAYLA20=m
2521CONFIG_SND_DARLA24=m
2522CONFIG_SND_GINA24=m
2523CONFIG_SND_LAYLA24=m
2524CONFIG_SND_MONA=m
2525CONFIG_SND_MIA=m
2526CONFIG_SND_ECHO3G=m
2527CONFIG_SND_INDIGO=m
2528CONFIG_SND_INDIGOIO=m
2529CONFIG_SND_INDIGODJ=m
2530CONFIG_SND_EMU10K1=m
2531CONFIG_SND_EMU10K1X=m
2532CONFIG_SND_ENS1370=m
2533CONFIG_SND_ENS1371=m
2534CONFIG_SND_ES1938=m
2535CONFIG_SND_ES1968=m
2536CONFIG_SND_FM801=m
2537CONFIG_SND_FM801_TEA575X_BOOL=y
2538CONFIG_SND_FM801_TEA575X=m
2539# CONFIG_SND_HDA_INTEL is not set
2540CONFIG_SND_HDSP=m
2541CONFIG_SND_HDSPM=m
2542CONFIG_SND_HIFIER=m
2543CONFIG_SND_ICE1712=m
2544CONFIG_SND_ICE1724=m
2545# CONFIG_SND_INTEL8X0 is not set
2546# CONFIG_SND_INTEL8X0M is not set
2547CONFIG_SND_KORG1212=m
2548CONFIG_SND_MAESTRO3=m
2549CONFIG_SND_MIXART=m
2550CONFIG_SND_NM256=m
2551CONFIG_SND_PCXHR=m
2552CONFIG_SND_RIPTIDE=m
2553CONFIG_SND_RME32=m
2554CONFIG_SND_RME96=m
2555CONFIG_SND_RME9652=m
2556CONFIG_SND_SONICVIBES=m
2557CONFIG_SND_TRIDENT=m
2558CONFIG_SND_VIA82XX=m
2559CONFIG_SND_VIA82XX_MODEM=m
2560CONFIG_SND_VIRTUOSO=m
2561CONFIG_SND_VX222=m
2562# CONFIG_SND_YMFPCI is not set
2563CONFIG_SND_PPC=y
2564CONFIG_SND_POWERMAC=m
2565CONFIG_SND_POWERMAC_AUTO_DRC=y
2566CONFIG_SND_AOA=m
2567CONFIG_SND_AOA_FABRIC_LAYOUT=m
2568CONFIG_SND_AOA_ONYX=m
2569CONFIG_SND_AOA_TAS=m
2570CONFIG_SND_AOA_TOONIE=m
2571CONFIG_SND_AOA_SOUNDBUS=m
2572CONFIG_SND_AOA_SOUNDBUS_I2S=m
2573CONFIG_SND_USB=y
2574CONFIG_SND_USB_AUDIO=m
2575CONFIG_SND_USB_USX2Y=m
2576CONFIG_SND_USB_CAIAQ=m
2577CONFIG_SND_USB_CAIAQ_INPUT=y
2578# CONFIG_SND_PCMCIA is not set
2579# CONFIG_SND_SOC is not set
2580# CONFIG_SOUND_PRIME is not set
2581CONFIG_AC97_BUS=m
2582CONFIG_HID_SUPPORT=y
2583CONFIG_HID=y
2584CONFIG_HID_DEBUG=y
2585CONFIG_HIDRAW=y
2586
2587#
2588# USB Input Devices
2589#
2590CONFIG_USB_HID=y
2591CONFIG_USB_HIDINPUT_POWERBOOK=y
2592CONFIG_HID_FF=y
2593CONFIG_HID_PID=y
2594CONFIG_LOGITECH_FF=y
2595CONFIG_LOGIRUMBLEPAD2_FF=y
2596CONFIG_PANTHERLORD_FF=y
2597CONFIG_THRUSTMASTER_FF=y
2598CONFIG_ZEROPLUS_FF=y
2599CONFIG_USB_HIDDEV=y
2600CONFIG_USB_SUPPORT=y
2601CONFIG_USB_ARCH_HAS_HCD=y
2602CONFIG_USB_ARCH_HAS_OHCI=y
2603CONFIG_USB_ARCH_HAS_EHCI=y
2604CONFIG_USB=y
2605CONFIG_USB_DEBUG=y
2606CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
2607
2608#
2609# Miscellaneous USB options
2610#
2611CONFIG_USB_DEVICEFS=y
2612# CONFIG_USB_DEVICE_CLASS is not set
2613# CONFIG_USB_DYNAMIC_MINORS is not set
2614CONFIG_USB_SUSPEND=y
2615# CONFIG_USB_OTG is not set
2616
2617#
2618# USB Host Controller Drivers
2619#
2620# CONFIG_USB_C67X00_HCD is not set
2621CONFIG_USB_EHCI_HCD=m
2622CONFIG_USB_EHCI_ROOT_HUB_TT=y
2623CONFIG_USB_EHCI_TT_NEWSCHED=y
2624CONFIG_USB_EHCI_FSL=y
2625CONFIG_USB_EHCI_HCD_PPC_OF=y
2626# CONFIG_USB_ISP116X_HCD is not set
2627# CONFIG_USB_ISP1760_HCD is not set
2628CONFIG_USB_OHCI_HCD=m
2629CONFIG_USB_OHCI_HCD_PPC_SOC=y
2630CONFIG_USB_OHCI_HCD_PPC_OF=y
2631CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
2632CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
2633CONFIG_USB_OHCI_HCD_PCI=y
2634# CONFIG_USB_OHCI_HCD_SSB is not set
2635CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
2636CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
2637CONFIG_USB_OHCI_LITTLE_ENDIAN=y
2638CONFIG_USB_UHCI_HCD=m
2639CONFIG_USB_U132_HCD=m
2640CONFIG_USB_SL811_HCD=m
2641# CONFIG_USB_SL811_CS is not set
2642# CONFIG_USB_R8A66597_HCD is not set
2643
2644#
2645# USB Device Class drivers
2646#
2647CONFIG_USB_ACM=m
2648CONFIG_USB_PRINTER=m
2649CONFIG_USB_WDM=m
2650
2651#
2652# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
2653#
2654
2655#
2656# may also be needed; see USB_STORAGE Help for more information
2657#
2658CONFIG_USB_STORAGE=m
2659# CONFIG_USB_STORAGE_DEBUG is not set
2660CONFIG_USB_STORAGE_DATAFAB=y
2661CONFIG_USB_STORAGE_FREECOM=y
2662# CONFIG_USB_STORAGE_ISD200 is not set
2663CONFIG_USB_STORAGE_DPCM=y
2664CONFIG_USB_STORAGE_USBAT=y
2665CONFIG_USB_STORAGE_SDDR09=y
2666CONFIG_USB_STORAGE_SDDR55=y
2667CONFIG_USB_STORAGE_JUMPSHOT=y
2668CONFIG_USB_STORAGE_ALAUDA=y
2669CONFIG_USB_STORAGE_ONETOUCH=y
2670CONFIG_USB_STORAGE_KARMA=y
2671CONFIG_USB_STORAGE_CYPRESS_ATACB=y
2672# CONFIG_USB_LIBUSUAL is not set
2673
2674#
2675# USB Imaging devices
2676#
2677CONFIG_USB_MDC800=m
2678CONFIG_USB_MICROTEK=m
2679CONFIG_USB_MON=y
2680
2681#
2682# USB port drivers
2683#
2684CONFIG_USB_USS720=m
2685CONFIG_USB_SERIAL=m
2686CONFIG_USB_EZUSB=y
2687CONFIG_USB_SERIAL_GENERIC=y
2688CONFIG_USB_SERIAL_AIRCABLE=m
2689CONFIG_USB_SERIAL_AIRPRIME=m
2690CONFIG_USB_SERIAL_ARK3116=m
2691CONFIG_USB_SERIAL_BELKIN=m
2692CONFIG_USB_SERIAL_CH341=m
2693CONFIG_USB_SERIAL_WHITEHEAT=m
2694CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
2695CONFIG_USB_SERIAL_CP2101=m
2696CONFIG_USB_SERIAL_CYPRESS_M8=m
2697CONFIG_USB_SERIAL_EMPEG=m
2698CONFIG_USB_SERIAL_FTDI_SIO=m
2699CONFIG_USB_SERIAL_FUNSOFT=m
2700CONFIG_USB_SERIAL_VISOR=m
2701CONFIG_USB_SERIAL_IPAQ=m
2702CONFIG_USB_SERIAL_IR=m
2703CONFIG_USB_SERIAL_EDGEPORT=m
2704CONFIG_USB_SERIAL_EDGEPORT_TI=m
2705# CONFIG_USB_SERIAL_GARMIN is not set
2706CONFIG_USB_SERIAL_IPW=m
2707CONFIG_USB_SERIAL_IUU=m
2708CONFIG_USB_SERIAL_KEYSPAN_PDA=m
2709CONFIG_USB_SERIAL_KEYSPAN=m
2710CONFIG_USB_SERIAL_KLSI=m
2711CONFIG_USB_SERIAL_KOBIL_SCT=m
2712CONFIG_USB_SERIAL_MCT_U232=m
2713CONFIG_USB_SERIAL_MOS7720=m
2714CONFIG_USB_SERIAL_MOS7840=m
2715CONFIG_USB_SERIAL_MOTOROLA=m
2716CONFIG_USB_SERIAL_NAVMAN=m
2717CONFIG_USB_SERIAL_PL2303=m
2718CONFIG_USB_SERIAL_OTI6858=m
2719CONFIG_USB_SERIAL_SPCP8X5=m
2720CONFIG_USB_SERIAL_HP4X=m
2721CONFIG_USB_SERIAL_SAFE=m
2722CONFIG_USB_SERIAL_SAFE_PADDED=y
2723CONFIG_USB_SERIAL_SIERRAWIRELESS=m
2724CONFIG_USB_SERIAL_TI=m
2725CONFIG_USB_SERIAL_CYBERJACK=m
2726CONFIG_USB_SERIAL_XIRCOM=m
2727CONFIG_USB_SERIAL_OPTION=m
2728CONFIG_USB_SERIAL_OMNINET=m
2729CONFIG_USB_SERIAL_DEBUG=m
2730
2731#
2732# USB Miscellaneous drivers
2733#
2734CONFIG_USB_EMI62=m
2735CONFIG_USB_EMI26=m
2736CONFIG_USB_ADUTUX=m
2737CONFIG_USB_AUERSWALD=m
2738# CONFIG_USB_RIO500 is not set
2739CONFIG_USB_LEGOTOWER=m
2740CONFIG_USB_LCD=m
2741CONFIG_USB_BERRY_CHARGE=m
2742CONFIG_USB_LED=m
2743# CONFIG_USB_CYPRESS_CY7C63 is not set
2744# CONFIG_USB_CYTHERM is not set
2745CONFIG_USB_PHIDGET=m
2746CONFIG_USB_PHIDGETKIT=m
2747CONFIG_USB_PHIDGETMOTORCONTROL=m
2748CONFIG_USB_PHIDGETSERVO=m
2749CONFIG_USB_IDMOUSE=m
2750CONFIG_USB_FTDI_ELAN=m
2751CONFIG_USB_APPLEDISPLAY=m
2752CONFIG_USB_SISUSBVGA=m
2753CONFIG_USB_SISUSBVGA_CON=y
2754CONFIG_USB_LD=m
2755CONFIG_USB_TRANCEVIBRATOR=m
2756CONFIG_USB_IOWARRIOR=m
2757# CONFIG_USB_TEST is not set
2758CONFIG_USB_ISIGHTFW=m
2759CONFIG_USB_ATM=m
2760CONFIG_USB_SPEEDTOUCH=m
2761CONFIG_USB_CXACRU=m
2762CONFIG_USB_UEAGLEATM=m
2763CONFIG_USB_XUSBATM=m
2764# CONFIG_USB_GADGET is not set
2765# CONFIG_MMC is not set
2766# CONFIG_MEMSTICK is not set
2767CONFIG_NEW_LEDS=y
2768CONFIG_LEDS_CLASS=y
2769
2770#
2771# LED drivers
2772#
2773# CONFIG_LEDS_GPIO is not set
2774
2775#
2776# LED Triggers
2777#
2778CONFIG_LEDS_TRIGGERS=y
2779CONFIG_LEDS_TRIGGER_TIMER=m
2780CONFIG_LEDS_TRIGGER_IDE_DISK=y
2781CONFIG_LEDS_TRIGGER_HEARTBEAT=m
2782CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
2783CONFIG_ACCESSIBILITY=y
2784CONFIG_A11Y_BRAILLE_CONSOLE=y
2785# CONFIG_INFINIBAND is not set
2786CONFIG_EDAC=y
2787
2788#
2789# Reporting subsystems
2790#
2791# CONFIG_EDAC_DEBUG is not set
2792CONFIG_EDAC_MM_EDAC=m
2793CONFIG_RTC_LIB=y
2794CONFIG_RTC_CLASS=y
2795# CONFIG_RTC_HCTOSYS is not set
2796# CONFIG_RTC_DEBUG is not set
2797
2798#
2799# RTC interfaces
2800#
2801CONFIG_RTC_INTF_SYSFS=y
2802CONFIG_RTC_INTF_PROC=y
2803CONFIG_RTC_INTF_DEV=y
2804# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
2805# CONFIG_RTC_DRV_TEST is not set
2806
2807#
2808# I2C RTC drivers
2809#
2810CONFIG_RTC_DRV_DS1307=m
2811CONFIG_RTC_DRV_DS1374=m
2812CONFIG_RTC_DRV_DS1672=m
2813CONFIG_RTC_DRV_MAX6900=m
2814CONFIG_RTC_DRV_RS5C372=m
2815CONFIG_RTC_DRV_ISL1208=m
2816CONFIG_RTC_DRV_X1205=m
2817CONFIG_RTC_DRV_PCF8563=m
2818CONFIG_RTC_DRV_PCF8583=m
2819CONFIG_RTC_DRV_M41T80=m
2820CONFIG_RTC_DRV_M41T80_WDT=y
2821# CONFIG_RTC_DRV_S35390A is not set
2822CONFIG_RTC_DRV_FM3130=m
2823
2824#
2825# SPI RTC drivers
2826#
2827
2828#
2829# Platform RTC drivers
2830#
2831CONFIG_RTC_DRV_CMOS=y
2832CONFIG_RTC_DRV_DS1511=m
2833CONFIG_RTC_DRV_DS1553=m
2834CONFIG_RTC_DRV_DS1742=m
2835CONFIG_RTC_DRV_STK17TA8=m
2836# CONFIG_RTC_DRV_M48T86 is not set
2837CONFIG_RTC_DRV_M48T59=m
2838CONFIG_RTC_DRV_V3020=m
2839
2840#
2841# on-CPU RTC drivers
2842#
2843CONFIG_RTC_DRV_PPC=y
2844CONFIG_DMADEVICES=y
2845
2846#
2847# DMA Devices
2848#
2849# CONFIG_FSL_DMA is not set
2850CONFIG_AUXDISPLAY=y
2851CONFIG_KS0108=m
2852CONFIG_KS0108_PORT=0x378
2853CONFIG_KS0108_DELAY=2
2854CONFIG_UIO=m
2855CONFIG_UIO_CIF=m
2856CONFIG_UIO_SMX=m
2857
2858#
2859# File systems
2860#
2861CONFIG_EXT2_FS=m
2862CONFIG_EXT2_FS_XATTR=y
2863CONFIG_EXT2_FS_POSIX_ACL=y
2864CONFIG_EXT2_FS_SECURITY=y
2865CONFIG_EXT2_FS_XIP=y
2866CONFIG_FS_XIP=y
2867CONFIG_EXT3_FS=m
2868CONFIG_EXT3_FS_XATTR=y
2869CONFIG_EXT3_FS_POSIX_ACL=y
2870CONFIG_EXT3_FS_SECURITY=y
2871CONFIG_EXT4DEV_FS=m
2872CONFIG_EXT4DEV_FS_XATTR=y
2873CONFIG_EXT4DEV_FS_POSIX_ACL=y
2874CONFIG_EXT4DEV_FS_SECURITY=y
2875CONFIG_JBD=m
2876# CONFIG_JBD_DEBUG is not set
2877CONFIG_JBD2=m
2878CONFIG_JBD2_DEBUG=y
2879CONFIG_FS_MBCACHE=m
2880CONFIG_REISERFS_FS=m
2881# CONFIG_REISERFS_CHECK is not set
2882CONFIG_REISERFS_PROC_INFO=y
2883CONFIG_REISERFS_FS_XATTR=y
2884CONFIG_REISERFS_FS_POSIX_ACL=y
2885CONFIG_REISERFS_FS_SECURITY=y
2886CONFIG_JFS_FS=m
2887CONFIG_JFS_POSIX_ACL=y
2888CONFIG_JFS_SECURITY=y
2889# CONFIG_JFS_DEBUG is not set
2890# CONFIG_JFS_STATISTICS is not set
2891CONFIG_FS_POSIX_ACL=y
2892CONFIG_XFS_FS=m
2893CONFIG_XFS_QUOTA=y
2894CONFIG_XFS_POSIX_ACL=y
2895# CONFIG_XFS_RT is not set
2896# CONFIG_XFS_DEBUG is not set
2897CONFIG_GFS2_FS=m
2898CONFIG_GFS2_FS_LOCKING_DLM=m
2899CONFIG_OCFS2_FS=m
2900CONFIG_OCFS2_FS_O2CB=m
2901CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
2902# CONFIG_OCFS2_DEBUG_MASKLOG is not set
2903# CONFIG_OCFS2_DEBUG_FS is not set
2904CONFIG_DNOTIFY=y
2905CONFIG_INOTIFY=y
2906CONFIG_INOTIFY_USER=y
2907CONFIG_QUOTA=y
2908CONFIG_QUOTA_NETLINK_INTERFACE=y
2909# CONFIG_PRINT_QUOTA_WARNING is not set
2910# CONFIG_QFMT_V1 is not set
2911CONFIG_QFMT_V2=y
2912CONFIG_QUOTACTL=y
2913CONFIG_AUTOFS_FS=m
2914CONFIG_AUTOFS4_FS=m
2915CONFIG_FUSE_FS=m
2916CONFIG_GENERIC_ACL=y
2917
2918#
2919# CD-ROM/DVD Filesystems
2920#
2921CONFIG_ISO9660_FS=y
2922CONFIG_JOLIET=y
2923CONFIG_ZISOFS=y
2924CONFIG_UDF_FS=m
2925CONFIG_UDF_NLS=y
2926
2927#
2928# DOS/FAT/NT Filesystems
2929#
2930CONFIG_FAT_FS=m
2931CONFIG_MSDOS_FS=m
2932CONFIG_VFAT_FS=m
2933CONFIG_FAT_DEFAULT_CODEPAGE=437
2934CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
2935# CONFIG_NTFS_FS is not set
2936
2937#
2938# Pseudo filesystems
2939#
2940CONFIG_PROC_FS=y
2941CONFIG_PROC_KCORE=y
2942CONFIG_PROC_SYSCTL=y
2943CONFIG_SYSFS=y
2944CONFIG_TMPFS=y
2945CONFIG_TMPFS_POSIX_ACL=y
2946# CONFIG_HUGETLB_PAGE is not set
2947CONFIG_CONFIGFS_FS=m
2948
2949#
2950# Miscellaneous filesystems
2951#
2952# CONFIG_ADFS_FS is not set
2953CONFIG_AFFS_FS=m
2954CONFIG_ECRYPT_FS=m
2955CONFIG_HFS_FS=m
2956CONFIG_HFSPLUS_FS=m
2957CONFIG_BEFS_FS=m
2958# CONFIG_BEFS_DEBUG is not set
2959CONFIG_BFS_FS=m
2960CONFIG_EFS_FS=m
2961CONFIG_CRAMFS=m
2962CONFIG_SQUASHFS=m
2963# CONFIG_SQUASHFS_EMBEDDED is not set
2964CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
2965CONFIG_VXFS_FS=m
2966CONFIG_MINIX_FS=m
2967# CONFIG_HPFS_FS is not set
2968CONFIG_QNX4FS_FS=m
2969CONFIG_ROMFS_FS=m
2970CONFIG_SYSV_FS=m
2971CONFIG_UFS_FS=m
2972# CONFIG_UFS_FS_WRITE is not set
2973# CONFIG_UFS_DEBUG is not set
2974CONFIG_NETWORK_FILESYSTEMS=y
2975CONFIG_NFS_FS=m
2976CONFIG_NFS_V3=y
2977CONFIG_NFS_V3_ACL=y
2978CONFIG_NFS_V4=y
2979CONFIG_NFSD=m
2980CONFIG_NFSD_V2_ACL=y
2981CONFIG_NFSD_V3=y
2982CONFIG_NFSD_V3_ACL=y
2983CONFIG_NFSD_V4=y
2984CONFIG_LOCKD=m
2985CONFIG_LOCKD_V4=y
2986CONFIG_EXPORTFS=m
2987CONFIG_NFS_ACL_SUPPORT=m
2988CONFIG_NFS_COMMON=y
2989CONFIG_SUNRPC=m
2990CONFIG_SUNRPC_GSS=m
2991CONFIG_SUNRPC_BIND34=y
2992CONFIG_RPCSEC_GSS_KRB5=m
2993CONFIG_RPCSEC_GSS_SPKM3=m
2994# CONFIG_SMB_FS is not set
2995CONFIG_CIFS=m
2996# CONFIG_CIFS_STATS is not set
2997CONFIG_CIFS_WEAK_PW_HASH=y
2998CONFIG_CIFS_XATTR=y
2999CONFIG_CIFS_POSIX=y
3000# CONFIG_CIFS_DEBUG2 is not set
3001CONFIG_CIFS_EXPERIMENTAL=y
3002CONFIG_CIFS_UPCALL=y
3003CONFIG_CIFS_DFS_UPCALL=y
3004CONFIG_NCP_FS=m
3005CONFIG_NCPFS_PACKET_SIGNING=y
3006CONFIG_NCPFS_IOCTL_LOCKING=y
3007CONFIG_NCPFS_STRONG=y
3008CONFIG_NCPFS_NFS_NS=y
3009CONFIG_NCPFS_OS2_NS=y
3010CONFIG_NCPFS_SMALLDOS=y
3011CONFIG_NCPFS_NLS=y
3012CONFIG_NCPFS_EXTRAS=y
3013CONFIG_CODA_FS=m
3014# CONFIG_CODA_FS_OLD_API is not set
3015# CONFIG_AFS_FS is not set
3016CONFIG_9P_FS=m
3017
3018#
3019# Partition Types
3020#
3021CONFIG_PARTITION_ADVANCED=y
3022# CONFIG_ACORN_PARTITION is not set
3023CONFIG_OSF_PARTITION=y
3024CONFIG_AMIGA_PARTITION=y
3025# CONFIG_ATARI_PARTITION is not set
3026CONFIG_MAC_PARTITION=y
3027CONFIG_MSDOS_PARTITION=y
3028CONFIG_BSD_DISKLABEL=y
3029CONFIG_MINIX_SUBPARTITION=y
3030CONFIG_SOLARIS_X86_PARTITION=y
3031CONFIG_UNIXWARE_DISKLABEL=y
3032# CONFIG_LDM_PARTITION is not set
3033CONFIG_SGI_PARTITION=y
3034# CONFIG_ULTRIX_PARTITION is not set
3035CONFIG_SUN_PARTITION=y
3036CONFIG_KARMA_PARTITION=y
3037CONFIG_EFI_PARTITION=y
3038# CONFIG_SYSV68_PARTITION is not set
3039CONFIG_NLS=y
3040CONFIG_NLS_DEFAULT="utf8"
3041CONFIG_NLS_CODEPAGE_437=y
3042CONFIG_NLS_CODEPAGE_737=m
3043CONFIG_NLS_CODEPAGE_775=m
3044CONFIG_NLS_CODEPAGE_850=m
3045CONFIG_NLS_CODEPAGE_852=m
3046CONFIG_NLS_CODEPAGE_855=m
3047CONFIG_NLS_CODEPAGE_857=m
3048CONFIG_NLS_CODEPAGE_860=m
3049CONFIG_NLS_CODEPAGE_861=m
3050CONFIG_NLS_CODEPAGE_862=m
3051CONFIG_NLS_CODEPAGE_863=m
3052CONFIG_NLS_CODEPAGE_864=m
3053CONFIG_NLS_CODEPAGE_865=m
3054CONFIG_NLS_CODEPAGE_866=m
3055CONFIG_NLS_CODEPAGE_869=m
3056CONFIG_NLS_CODEPAGE_936=m
3057CONFIG_NLS_CODEPAGE_950=m
3058CONFIG_NLS_CODEPAGE_932=m
3059CONFIG_NLS_CODEPAGE_949=m
3060CONFIG_NLS_CODEPAGE_874=m
3061CONFIG_NLS_ISO8859_8=m
3062CONFIG_NLS_CODEPAGE_1250=m
3063CONFIG_NLS_CODEPAGE_1251=m
3064CONFIG_NLS_ASCII=y
3065CONFIG_NLS_ISO8859_1=m
3066CONFIG_NLS_ISO8859_2=m
3067CONFIG_NLS_ISO8859_3=m
3068CONFIG_NLS_ISO8859_4=m
3069CONFIG_NLS_ISO8859_5=m
3070CONFIG_NLS_ISO8859_6=m
3071CONFIG_NLS_ISO8859_7=m
3072CONFIG_NLS_ISO8859_9=m
3073CONFIG_NLS_ISO8859_13=m
3074CONFIG_NLS_ISO8859_14=m
3075CONFIG_NLS_ISO8859_15=m
3076CONFIG_NLS_KOI8_R=m
3077CONFIG_NLS_KOI8_U=m
3078CONFIG_NLS_UTF8=m
3079CONFIG_DLM=m
3080CONFIG_DLM_DEBUG=y
3081CONFIG_QE_GPIO=y
3082
3083#
3084# Library routines
3085#
3086CONFIG_BITREVERSE=y
3087# CONFIG_GENERIC_FIND_FIRST_BIT is not set
3088CONFIG_CRC_CCITT=m
3089CONFIG_CRC16=m
3090CONFIG_CRC_T10DIF=m
3091CONFIG_CRC_ITU_T=m
3092CONFIG_CRC32=y
3093# CONFIG_CRC7 is not set
3094CONFIG_LIBCRC32C=m
3095CONFIG_ZLIB_INFLATE=y
3096CONFIG_ZLIB_DEFLATE=m
3097CONFIG_LZO_COMPRESS=m
3098CONFIG_LZO_DECOMPRESS=m
3099CONFIG_TEXTSEARCH=y
3100CONFIG_TEXTSEARCH_KMP=m
3101CONFIG_TEXTSEARCH_BM=m
3102CONFIG_TEXTSEARCH_FSM=m
3103CONFIG_PLIST=y
3104CONFIG_HAS_IOMEM=y
3105CONFIG_HAS_IOPORT=y
3106CONFIG_HAS_DMA=y
3107CONFIG_HAVE_LMB=y
3108
3109#
3110# Kernel hacking
3111#
3112# CONFIG_PRINTK_TIME is not set
3113# CONFIG_ENABLE_WARN_DEPRECATED is not set
3114CONFIG_ENABLE_MUST_CHECK=y
3115CONFIG_FRAME_WARN=1024
3116CONFIG_MAGIC_SYSRQ=y
3117CONFIG_UNUSED_SYMBOLS=y
3118CONFIG_DEBUG_FS=y
3119CONFIG_HEADERS_CHECK=y
3120CONFIG_DEBUG_KERNEL=y
3121CONFIG_DEBUG_SHIRQ=y
3122CONFIG_DETECT_SOFTLOCKUP=y
3123CONFIG_SCHED_DEBUG=y
3124CONFIG_SCHEDSTATS=y
3125CONFIG_TIMER_STATS=y
3126CONFIG_DEBUG_OBJECTS=y
3127# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
3128CONFIG_DEBUG_OBJECTS_FREE=y
3129CONFIG_DEBUG_OBJECTS_TIMERS=y
3130CONFIG_SLUB_DEBUG_ON=y
3131# CONFIG_SLUB_STATS is not set
3132CONFIG_DEBUG_RT_MUTEXES=y
3133CONFIG_DEBUG_PI_LIST=y
3134# CONFIG_RT_MUTEX_TESTER is not set
3135CONFIG_DEBUG_SPINLOCK=y
3136CONFIG_DEBUG_MUTEXES=y
3137CONFIG_DEBUG_SPINLOCK_SLEEP=y
3138# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
3139CONFIG_STACKTRACE=y
3140# CONFIG_DEBUG_KOBJECT is not set
3141CONFIG_DEBUG_HIGHMEM=y
3142CONFIG_DEBUG_BUGVERBOSE=y
3143CONFIG_DEBUG_INFO=y
3144CONFIG_DEBUG_VM=y
3145CONFIG_DEBUG_WRITECOUNT=y
3146CONFIG_DEBUG_LIST=y
3147CONFIG_DEBUG_SG=y
3148CONFIG_FRAME_POINTER=y
3149CONFIG_BOOT_PRINTK_DELAY=y
3150# CONFIG_RCU_TORTURE_TEST is not set
3151# CONFIG_KPROBES_SANITY_TEST is not set
3152# CONFIG_BACKTRACE_SELF_TEST is not set
3153# CONFIG_LKDTM is not set
3154CONFIG_FAULT_INJECTION=y
3155CONFIG_FAILSLAB=y
3156CONFIG_FAIL_PAGE_ALLOC=y
3157CONFIG_FAIL_MAKE_REQUEST=y
3158CONFIG_FAULT_INJECTION_DEBUG_FS=y
3159CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
3160CONFIG_LATENCYTOP=y
3161CONFIG_HAVE_FTRACE=y
3162CONFIG_HAVE_DYNAMIC_FTRACE=y
3163CONFIG_TRACER_MAX_TRACE=y
3164CONFIG_TRACING=y
3165CONFIG_FTRACE=y
3166CONFIG_SCHED_TRACER=y
3167CONFIG_CONTEXT_SWITCH_TRACER=y
3168CONFIG_DYNAMIC_FTRACE=y
3169# CONFIG_FTRACE_STARTUP_TEST is not set
3170# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
3171# CONFIG_SAMPLES is not set
3172CONFIG_DEBUG_STACKOVERFLOW=y
3173CONFIG_DEBUG_STACK_USAGE=y
3174CONFIG_DEBUGGER=y
3175# CONFIG_CODE_PATCHING_SELFTEST is not set
3176# CONFIG_FTR_FIXUP_SELFTEST is not set
3177# CONFIG_KGDB_CONSOLE is not set
3178CONFIG_XMON=y
3179# CONFIG_XMON_DEFAULT is not set
3180CONFIG_XMON_DISASSEMBLY=y
3181CONFIG_IRQSTACKS=y
3182# CONFIG_VIRQ_DEBUG is not set
3183# CONFIG_BDI_SWITCH is not set
3184CONFIG_BOOTX_TEXT=y
3185# CONFIG_PPC_EARLY_DEBUG is not set
3186
3187#
3188# Security options
3189#
3190CONFIG_KEYS=y
3191CONFIG_KEYS_DEBUG_PROC_KEYS=y
3192CONFIG_SECURITY=y
3193CONFIG_SECURITY_NETWORK=y
3194CONFIG_SECURITY_NETWORK_XFRM=y
3195CONFIG_SECURITY_FILE_CAPABILITIES=y
3196# CONFIG_SECURITY_ROOTPLUG is not set
3197CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
3198CONFIG_SECURITY_SELINUX=y
3199CONFIG_SECURITY_SELINUX_BOOTPARAM=y
3200CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
3201CONFIG_SECURITY_SELINUX_DISABLE=y
3202CONFIG_SECURITY_SELINUX_DEVELOP=y
3203CONFIG_SECURITY_SELINUX_AVC_STATS=y
3204CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
3205CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
3206# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
3207# CONFIG_SECURITY_SMACK is not set
3208CONFIG_XOR_BLOCKS=m
3209CONFIG_ASYNC_CORE=m
3210CONFIG_ASYNC_MEMCPY=m
3211CONFIG_ASYNC_XOR=m
3212CONFIG_CRYPTO=y
3213
3214#
3215# Crypto core or helper
3216#
3217CONFIG_CRYPTO_ALGAPI=y
3218CONFIG_CRYPTO_AEAD=m
3219CONFIG_CRYPTO_BLKCIPHER=m
3220CONFIG_CRYPTO_HASH=y
3221CONFIG_CRYPTO_MANAGER=y
3222CONFIG_CRYPTO_GF128MUL=m
3223CONFIG_CRYPTO_NULL=m
3224# CONFIG_CRYPTO_CRYPTD is not set
3225CONFIG_CRYPTO_AUTHENC=m
3226CONFIG_CRYPTO_TEST=m
3227
3228#
3229# Authenticated Encryption with Associated Data
3230#
3231CONFIG_CRYPTO_CCM=m
3232CONFIG_CRYPTO_GCM=m
3233CONFIG_CRYPTO_SEQIV=m
3234
3235#
3236# Block modes
3237#
3238CONFIG_CRYPTO_CBC=m
3239CONFIG_CRYPTO_CTR=m
3240CONFIG_CRYPTO_CTS=m
3241CONFIG_CRYPTO_ECB=m
3242CONFIG_CRYPTO_LRW=m
3243CONFIG_CRYPTO_PCBC=m
3244CONFIG_CRYPTO_XTS=m
3245
3246#
3247# Hash modes
3248#
3249CONFIG_CRYPTO_HMAC=y
3250CONFIG_CRYPTO_XCBC=m
3251
3252#
3253# Digest
3254#
3255CONFIG_CRYPTO_CRC32C=m
3256CONFIG_CRYPTO_MD4=m
3257CONFIG_CRYPTO_MD5=y
3258CONFIG_CRYPTO_MICHAEL_MIC=m
3259CONFIG_CRYPTO_RMD128=m
3260CONFIG_CRYPTO_RMD160=m
3261CONFIG_CRYPTO_RMD256=m
3262CONFIG_CRYPTO_RMD320=m
3263CONFIG_CRYPTO_SHA1=y
3264CONFIG_CRYPTO_SHA256=m
3265CONFIG_CRYPTO_SHA512=m
3266CONFIG_CRYPTO_TGR192=m
3267CONFIG_CRYPTO_WP512=m
3268
3269#
3270# Ciphers
3271#
3272CONFIG_CRYPTO_AES=m
3273CONFIG_CRYPTO_ANUBIS=m
3274CONFIG_CRYPTO_ARC4=m
3275CONFIG_CRYPTO_BLOWFISH=m
3276CONFIG_CRYPTO_CAMELLIA=m
3277CONFIG_CRYPTO_CAST5=m
3278CONFIG_CRYPTO_CAST6=m
3279CONFIG_CRYPTO_DES=m
3280CONFIG_CRYPTO_FCRYPT=m
3281CONFIG_CRYPTO_KHAZAD=m
3282CONFIG_CRYPTO_SALSA20=m
3283CONFIG_CRYPTO_SEED=m
3284CONFIG_CRYPTO_SERPENT=m
3285CONFIG_CRYPTO_TEA=m
3286CONFIG_CRYPTO_TWOFISH=m
3287CONFIG_CRYPTO_TWOFISH_COMMON=m
3288
3289#
3290# Compression
3291#
3292CONFIG_CRYPTO_DEFLATE=m
3293CONFIG_CRYPTO_LZO=m
3294CONFIG_CRYPTO_HW=y
3295CONFIG_CRYPTO_DEV_HIFN_795X=m
3296CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
3297CONFIG_CRYPTO_DEV_TALITOS=m
3298CONFIG_PPC_CLOCK=y
3299CONFIG_PPC_LIB_RHEAP=y
3300CONFIG_VIRTUALIZATION=y
3301CONFIG_VIRTIO=m
3302CONFIG_VIRTIO_RING=m
3303CONFIG_VIRTIO_PCI=m
3304CONFIG_VIRTIO_BALLOON=m
diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig
index 71d79e428d20..f9a3d3b394cf 100644
--- a/arch/powerpc/configs/ps3_defconfig
+++ b/arch/powerpc/configs/ps3_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 3# Linux kernel version: 2.6.26
4# Mon Apr 28 12:39:10 2008 4# Wed Jul 16 13:59:24 2008
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7 7
@@ -14,8 +14,9 @@ CONFIG_POWER4=y
14CONFIG_TUNE_CELL=y 14CONFIG_TUNE_CELL=y
15CONFIG_PPC_FPU=y 15CONFIG_PPC_FPU=y
16CONFIG_ALTIVEC=y 16CONFIG_ALTIVEC=y
17# CONFIG_VSX is not set
17CONFIG_PPC_STD_MMU=y 18CONFIG_PPC_STD_MMU=y
18# CONFIG_PPC_MM_SLICES is not set 19CONFIG_PPC_MM_SLICES=y
19CONFIG_VIRT_CPU_ACCOUNTING=y 20CONFIG_VIRT_CPU_ACCOUNTING=y
20CONFIG_SMP=y 21CONFIG_SMP=y
21CONFIG_NR_CPUS=2 22CONFIG_NR_CPUS=2
@@ -31,6 +32,7 @@ CONFIG_GENERIC_HARDIRQS=y
31CONFIG_HAVE_SETUP_PER_CPU_AREA=y 32CONFIG_HAVE_SETUP_PER_CPU_AREA=y
32CONFIG_IRQ_PER_CPU=y 33CONFIG_IRQ_PER_CPU=y
33CONFIG_STACKTRACE_SUPPORT=y 34CONFIG_STACKTRACE_SUPPORT=y
35CONFIG_HAVE_LATENCYTOP_SUPPORT=y
34CONFIG_TRACE_IRQFLAGS_SUPPORT=y 36CONFIG_TRACE_IRQFLAGS_SUPPORT=y
35CONFIG_LOCKDEP_SUPPORT=y 37CONFIG_LOCKDEP_SUPPORT=y
36CONFIG_RWSEM_XCHGADD_ALGORITHM=y 38CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -90,6 +92,7 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
90CONFIG_SYSCTL=y 92CONFIG_SYSCTL=y
91# CONFIG_EMBEDDED is not set 93# CONFIG_EMBEDDED is not set
92CONFIG_SYSCTL_SYSCALL=y 94CONFIG_SYSCTL_SYSCALL=y
95CONFIG_SYSCTL_SYSCALL_CHECK=y
93CONFIG_KALLSYMS=y 96CONFIG_KALLSYMS=y
94CONFIG_KALLSYMS_ALL=y 97CONFIG_KALLSYMS_ALL=y
95CONFIG_KALLSYMS_EXTRA_PASS=y 98CONFIG_KALLSYMS_EXTRA_PASS=y
@@ -117,12 +120,15 @@ CONFIG_HAVE_OPROFILE=y
117# CONFIG_KPROBES is not set 120# CONFIG_KPROBES is not set
118CONFIG_HAVE_KPROBES=y 121CONFIG_HAVE_KPROBES=y
119CONFIG_HAVE_KRETPROBES=y 122CONFIG_HAVE_KRETPROBES=y
123CONFIG_HAVE_DMA_ATTRS=y
124CONFIG_USE_GENERIC_SMP_HELPERS=y
120CONFIG_PROC_PAGE_MONITOR=y 125CONFIG_PROC_PAGE_MONITOR=y
121CONFIG_SLABINFO=y 126CONFIG_SLABINFO=y
122CONFIG_RT_MUTEXES=y 127CONFIG_RT_MUTEXES=y
123# CONFIG_TINY_SHMEM is not set 128# CONFIG_TINY_SHMEM is not set
124CONFIG_BASE_SMALL=0 129CONFIG_BASE_SMALL=0
125CONFIG_MODULES=y 130CONFIG_MODULES=y
131# CONFIG_MODULE_FORCE_LOAD is not set
126CONFIG_MODULE_UNLOAD=y 132CONFIG_MODULE_UNLOAD=y
127# CONFIG_MODULE_FORCE_UNLOAD is not set 133# CONFIG_MODULE_FORCE_UNLOAD is not set
128# CONFIG_MODVERSIONS is not set 134# CONFIG_MODVERSIONS is not set
@@ -132,6 +138,7 @@ CONFIG_STOP_MACHINE=y
132CONFIG_BLOCK=y 138CONFIG_BLOCK=y
133# CONFIG_BLK_DEV_IO_TRACE is not set 139# CONFIG_BLK_DEV_IO_TRACE is not set
134CONFIG_BLK_DEV_BSG=y 140CONFIG_BLK_DEV_BSG=y
141# CONFIG_BLK_DEV_INTEGRITY is not set
135CONFIG_BLOCK_COMPAT=y 142CONFIG_BLOCK_COMPAT=y
136 143
137# 144#
@@ -152,13 +159,8 @@ CONFIG_CLASSIC_RCU=y
152# Platform support 159# Platform support
153# 160#
154CONFIG_PPC_MULTIPLATFORM=y 161CONFIG_PPC_MULTIPLATFORM=y
155# CONFIG_PPC_82xx is not set
156# CONFIG_PPC_83xx is not set
157# CONFIG_PPC_86xx is not set
158# CONFIG_PPC_PSERIES is not set 162# CONFIG_PPC_PSERIES is not set
159# CONFIG_PPC_ISERIES is not set 163# CONFIG_PPC_ISERIES is not set
160# CONFIG_PPC_MPC512x is not set
161# CONFIG_PPC_MPC5121 is not set
162# CONFIG_PPC_PMAC is not set 164# CONFIG_PPC_PMAC is not set
163# CONFIG_PPC_MAPLE is not set 165# CONFIG_PPC_MAPLE is not set
164# CONFIG_PPC_PASEMI is not set 166# CONFIG_PPC_PASEMI is not set
@@ -187,6 +189,7 @@ CONFIG_PPC_CELL=y
187# Cell Broadband Engine options 189# Cell Broadband Engine options
188# 190#
189CONFIG_SPU_FS=y 191CONFIG_SPU_FS=y
192CONFIG_SPU_FS_64K_LS=y
190CONFIG_SPU_BASE=y 193CONFIG_SPU_BASE=y
191# CONFIG_PQ2ADS is not set 194# CONFIG_PQ2ADS is not set
192# CONFIG_IPIC is not set 195# CONFIG_IPIC is not set
@@ -222,6 +225,7 @@ CONFIG_PREEMPT_NONE=y
222CONFIG_BINFMT_ELF=y 225CONFIG_BINFMT_ELF=y
223CONFIG_COMPAT_BINFMT_ELF=y 226CONFIG_COMPAT_BINFMT_ELF=y
224CONFIG_BINFMT_MISC=y 227CONFIG_BINFMT_MISC=y
228CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
225# CONFIG_IOMMU_VMERGE is not set 229# CONFIG_IOMMU_VMERGE is not set
226CONFIG_IOMMU_HELPER=y 230CONFIG_IOMMU_HELPER=y
227CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 231CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -248,18 +252,22 @@ CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
248# CONFIG_SPARSEMEM_VMEMMAP is not set 252# CONFIG_SPARSEMEM_VMEMMAP is not set
249CONFIG_MEMORY_HOTPLUG=y 253CONFIG_MEMORY_HOTPLUG=y
250CONFIG_MEMORY_HOTPLUG_SPARSE=y 254CONFIG_MEMORY_HOTPLUG_SPARSE=y
255CONFIG_PAGEFLAGS_EXTENDED=y
251CONFIG_SPLIT_PTLOCK_CPUS=4 256CONFIG_SPLIT_PTLOCK_CPUS=4
252CONFIG_RESOURCES_64BIT=y 257CONFIG_RESOURCES_64BIT=y
253CONFIG_ZONE_DMA_FLAG=1 258CONFIG_ZONE_DMA_FLAG=1
254CONFIG_BOUNCE=y 259CONFIG_BOUNCE=y
255CONFIG_ARCH_MEMORY_PROBE=y 260CONFIG_ARCH_MEMORY_PROBE=y
256# CONFIG_PPC_HAS_HASH_64K is not set 261CONFIG_PPC_HAS_HASH_64K=y
257# CONFIG_PPC_64K_PAGES is not set 262# CONFIG_PPC_64K_PAGES is not set
258CONFIG_FORCE_MAX_ZONEORDER=13 263CONFIG_FORCE_MAX_ZONEORDER=13
259# CONFIG_SCHED_SMT is not set 264CONFIG_SCHED_SMT=y
260CONFIG_PROC_DEVICETREE=y 265CONFIG_PROC_DEVICETREE=y
261# CONFIG_CMDLINE_BOOL is not set 266# CONFIG_CMDLINE_BOOL is not set
262# CONFIG_PM is not set 267CONFIG_EXTRA_TARGETS=""
268CONFIG_PM=y
269CONFIG_PM_DEBUG=y
270# CONFIG_PM_VERBOSE is not set
263# CONFIG_SECCOMP is not set 271# CONFIG_SECCOMP is not set
264CONFIG_ISA_DMA_API=y 272CONFIG_ISA_DMA_API=y
265 273
@@ -273,6 +281,7 @@ CONFIG_GENERIC_ISA_DMA=y
273# CONFIG_PCI_SYSCALL is not set 281# CONFIG_PCI_SYSCALL is not set
274# CONFIG_ARCH_SUPPORTS_MSI is not set 282# CONFIG_ARCH_SUPPORTS_MSI is not set
275# CONFIG_PCCARD is not set 283# CONFIG_PCCARD is not set
284# CONFIG_HAS_RAPIDIO is not set
276CONFIG_PAGE_OFFSET=0xc000000000000000 285CONFIG_PAGE_OFFSET=0xc000000000000000
277CONFIG_KERNEL_START=0xc000000000000000 286CONFIG_KERNEL_START=0xc000000000000000
278CONFIG_PHYSICAL_START=0x00000000 287CONFIG_PHYSICAL_START=0x00000000
@@ -412,6 +421,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
412CONFIG_STANDALONE=y 421CONFIG_STANDALONE=y
413CONFIG_PREVENT_FIRMWARE_BUILD=y 422CONFIG_PREVENT_FIRMWARE_BUILD=y
414CONFIG_FW_LOADER=m 423CONFIG_FW_LOADER=m
424# CONFIG_FIRMWARE_IN_KERNEL is not set
425CONFIG_EXTRA_FIRMWARE=""
415# CONFIG_DEBUG_DRIVER is not set 426# CONFIG_DEBUG_DRIVER is not set
416# CONFIG_DEBUG_DEVRES is not set 427# CONFIG_DEBUG_DEVRES is not set
417# CONFIG_SYS_HYPERVISOR is not set 428# CONFIG_SYS_HYPERVISOR is not set
@@ -478,6 +489,7 @@ CONFIG_SCSI_WAIT_SCAN=m
478# CONFIG_SCSI_SAS_LIBSAS is not set 489# CONFIG_SCSI_SAS_LIBSAS is not set
479# CONFIG_SCSI_SRP_ATTRS is not set 490# CONFIG_SCSI_SRP_ATTRS is not set
480# CONFIG_SCSI_LOWLEVEL is not set 491# CONFIG_SCSI_LOWLEVEL is not set
492# CONFIG_SCSI_DH is not set
481# CONFIG_ATA is not set 493# CONFIG_ATA is not set
482# CONFIG_MD is not set 494# CONFIG_MD is not set
483# CONFIG_MACINTOSH_DRIVERS is not set 495# CONFIG_MACINTOSH_DRIVERS is not set
@@ -533,8 +545,18 @@ CONFIG_USB_NET_MCS7830=m
533# CONFIG_USB_NET_CDC_SUBSET is not set 545# CONFIG_USB_NET_CDC_SUBSET is not set
534# CONFIG_USB_NET_ZAURUS is not set 546# CONFIG_USB_NET_ZAURUS is not set
535# CONFIG_WAN is not set 547# CONFIG_WAN is not set
536# CONFIG_PPP is not set 548CONFIG_PPP=m
549CONFIG_PPP_MULTILINK=y
550# CONFIG_PPP_FILTER is not set
551CONFIG_PPP_ASYNC=m
552# CONFIG_PPP_SYNC_TTY is not set
553CONFIG_PPP_DEFLATE=m
554# CONFIG_PPP_BSDCOMP is not set
555# CONFIG_PPP_MPPE is not set
556CONFIG_PPPOE=m
557# CONFIG_PPPOL2TP is not set
537# CONFIG_SLIP is not set 558# CONFIG_SLIP is not set
559CONFIG_SLHC=m
538# CONFIG_NETCONSOLE is not set 560# CONFIG_NETCONSOLE is not set
539# CONFIG_NETPOLL is not set 561# CONFIG_NETPOLL is not set
540# CONFIG_NET_POLL_CONTROLLER is not set 562# CONFIG_NET_POLL_CONTROLLER is not set
@@ -603,6 +625,7 @@ CONFIG_VT=y
603CONFIG_VT_CONSOLE=y 625CONFIG_VT_CONSOLE=y
604CONFIG_HW_CONSOLE=y 626CONFIG_HW_CONSOLE=y
605CONFIG_VT_HW_CONSOLE_BINDING=y 627CONFIG_VT_HW_CONSOLE_BINDING=y
628CONFIG_DEVKMEM=y
606# CONFIG_SERIAL_NONSTANDARD is not set 629# CONFIG_SERIAL_NONSTANDARD is not set
607 630
608# 631#
@@ -618,23 +641,17 @@ CONFIG_LEGACY_PTYS=y
618CONFIG_LEGACY_PTY_COUNT=16 641CONFIG_LEGACY_PTY_COUNT=16
619# CONFIG_IPMI_HANDLER is not set 642# CONFIG_IPMI_HANDLER is not set
620# CONFIG_HW_RANDOM is not set 643# CONFIG_HW_RANDOM is not set
621CONFIG_GEN_RTC=y
622# CONFIG_GEN_RTC_X is not set
623# CONFIG_R3964 is not set 644# CONFIG_R3964 is not set
624# CONFIG_RAW_DRIVER is not set 645# CONFIG_RAW_DRIVER is not set
625# CONFIG_HANGCHECK_TIMER is not set 646# CONFIG_HANGCHECK_TIMER is not set
626# CONFIG_TCG_TPM is not set 647# CONFIG_TCG_TPM is not set
627# CONFIG_I2C is not set 648# CONFIG_I2C is not set
628
629#
630# SPI support
631#
632# CONFIG_SPI is not set 649# CONFIG_SPI is not set
633# CONFIG_SPI_MASTER is not set
634# CONFIG_W1 is not set 650# CONFIG_W1 is not set
635# CONFIG_POWER_SUPPLY is not set 651# CONFIG_POWER_SUPPLY is not set
636# CONFIG_HWMON is not set 652# CONFIG_HWMON is not set
637# CONFIG_THERMAL is not set 653# CONFIG_THERMAL is not set
654# CONFIG_THERMAL_HWMON is not set
638# CONFIG_WATCHDOG is not set 655# CONFIG_WATCHDOG is not set
639 656
640# 657#
@@ -652,8 +669,17 @@ CONFIG_SSB_POSSIBLE=y
652# 669#
653# Multimedia devices 670# Multimedia devices
654# 671#
672
673#
674# Multimedia core support
675#
655# CONFIG_VIDEO_DEV is not set 676# CONFIG_VIDEO_DEV is not set
656# CONFIG_DVB_CORE is not set 677# CONFIG_DVB_CORE is not set
678# CONFIG_VIDEO_MEDIA is not set
679
680#
681# Multimedia drivers
682#
657# CONFIG_DAB is not set 683# CONFIG_DAB is not set
658 684
659# 685#
@@ -671,8 +697,8 @@ CONFIG_FB=y
671CONFIG_FB_SYS_FILLRECT=y 697CONFIG_FB_SYS_FILLRECT=y
672CONFIG_FB_SYS_COPYAREA=y 698CONFIG_FB_SYS_COPYAREA=y
673CONFIG_FB_SYS_IMAGEBLIT=y 699CONFIG_FB_SYS_IMAGEBLIT=y
700# CONFIG_FB_FOREIGN_ENDIAN is not set
674CONFIG_FB_SYS_FOPS=y 701CONFIG_FB_SYS_FOPS=y
675CONFIG_FB_DEFERRED_IO=y
676# CONFIG_FB_SVGALIB is not set 702# CONFIG_FB_SVGALIB is not set
677# CONFIG_FB_MACMODES is not set 703# CONFIG_FB_MACMODES is not set
678# CONFIG_FB_BACKLIGHT is not set 704# CONFIG_FB_BACKLIGHT is not set
@@ -712,18 +738,12 @@ CONFIG_FB_LOGO_EXTRA=y
712# CONFIG_LOGO_LINUX_MONO is not set 738# CONFIG_LOGO_LINUX_MONO is not set
713# CONFIG_LOGO_LINUX_VGA16 is not set 739# CONFIG_LOGO_LINUX_VGA16 is not set
714CONFIG_LOGO_LINUX_CLUT224=y 740CONFIG_LOGO_LINUX_CLUT224=y
715
716#
717# Sound
718#
719CONFIG_SOUND=m 741CONFIG_SOUND=m
720
721#
722# Advanced Linux Sound Architecture
723#
724CONFIG_SND=m 742CONFIG_SND=m
725CONFIG_SND_TIMER=m 743CONFIG_SND_TIMER=m
726CONFIG_SND_PCM=m 744CONFIG_SND_PCM=m
745CONFIG_SND_HWDEP=m
746CONFIG_SND_RAWMIDI=m
727# CONFIG_SND_SEQUENCER is not set 747# CONFIG_SND_SEQUENCER is not set
728# CONFIG_SND_MIXER_OSS is not set 748# CONFIG_SND_MIXER_OSS is not set
729# CONFIG_SND_PCM_OSS is not set 749# CONFIG_SND_PCM_OSS is not set
@@ -732,53 +752,20 @@ CONFIG_SND_SUPPORT_OLD_API=y
732CONFIG_SND_VERBOSE_PROCFS=y 752CONFIG_SND_VERBOSE_PROCFS=y
733# CONFIG_SND_VERBOSE_PRINTK is not set 753# CONFIG_SND_VERBOSE_PRINTK is not set
734# CONFIG_SND_DEBUG is not set 754# CONFIG_SND_DEBUG is not set
735 755# CONFIG_SND_DRIVERS is not set
736# 756CONFIG_SND_PPC=y
737# Generic devices
738#
739# CONFIG_SND_DUMMY is not set
740# CONFIG_SND_MTPAV is not set
741# CONFIG_SND_SERIAL_U16550 is not set
742# CONFIG_SND_MPU401 is not set
743
744#
745# ALSA PowerMac devices
746#
747
748#
749# ALSA PowerMac requires I2C
750#
751
752#
753# ALSA PowerPC devices
754#
755CONFIG_SND_PS3=m 757CONFIG_SND_PS3=m
756CONFIG_SND_PS3_DEFAULT_START_DELAY=2000 758CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
757 759CONFIG_SND_USB=y
758# 760CONFIG_SND_USB_AUDIO=m
759# USB devices
760#
761# CONFIG_SND_USB_AUDIO is not set
762# CONFIG_SND_USB_USX2Y is not set 761# CONFIG_SND_USB_USX2Y is not set
763# CONFIG_SND_USB_CAIAQ is not set 762# CONFIG_SND_USB_CAIAQ is not set
764
765#
766# System on Chip audio support
767#
768# CONFIG_SND_SOC is not set 763# CONFIG_SND_SOC is not set
769
770#
771# ALSA SoC audio for Freescale SOCs
772#
773
774#
775# Open Sound System
776#
777# CONFIG_SOUND_PRIME is not set 764# CONFIG_SOUND_PRIME is not set
778CONFIG_HID_SUPPORT=y 765CONFIG_HID_SUPPORT=y
779CONFIG_HID=y 766CONFIG_HID=y
780# CONFIG_HID_DEBUG is not set 767# CONFIG_HID_DEBUG is not set
781# CONFIG_HIDRAW is not set 768CONFIG_HIDRAW=y
782 769
783# 770#
784# USB Input Devices 771# USB Input Devices
@@ -807,17 +794,20 @@ CONFIG_USB=m
807CONFIG_USB_DEVICEFS=y 794CONFIG_USB_DEVICEFS=y
808# CONFIG_USB_DEVICE_CLASS is not set 795# CONFIG_USB_DEVICE_CLASS is not set
809# CONFIG_USB_DYNAMIC_MINORS is not set 796# CONFIG_USB_DYNAMIC_MINORS is not set
797CONFIG_USB_SUSPEND=y
810# CONFIG_USB_OTG is not set 798# CONFIG_USB_OTG is not set
811 799
812# 800#
813# USB Host Controller Drivers 801# USB Host Controller Drivers
814# 802#
803# CONFIG_USB_C67X00_HCD is not set
815CONFIG_USB_EHCI_HCD=m 804CONFIG_USB_EHCI_HCD=m
816# CONFIG_USB_EHCI_ROOT_HUB_TT is not set 805# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
817# CONFIG_USB_EHCI_TT_NEWSCHED is not set 806# CONFIG_USB_EHCI_TT_NEWSCHED is not set
818CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y 807CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
819# CONFIG_USB_EHCI_HCD_PPC_OF is not set 808# CONFIG_USB_EHCI_HCD_PPC_OF is not set
820# CONFIG_USB_ISP116X_HCD is not set 809# CONFIG_USB_ISP116X_HCD is not set
810# CONFIG_USB_ISP1760_HCD is not set
821CONFIG_USB_OHCI_HCD=m 811CONFIG_USB_OHCI_HCD=m
822# CONFIG_USB_OHCI_HCD_PPC_OF is not set 812# CONFIG_USB_OHCI_HCD_PPC_OF is not set
823# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set 813# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
@@ -831,6 +821,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
831# 821#
832# CONFIG_USB_ACM is not set 822# CONFIG_USB_ACM is not set
833# CONFIG_USB_PRINTER is not set 823# CONFIG_USB_PRINTER is not set
824# CONFIG_USB_WDM is not set
834 825
835# 826#
836# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 827# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -890,12 +881,45 @@ CONFIG_USB_MON=y
890# CONFIG_USB_TRANCEVIBRATOR is not set 881# CONFIG_USB_TRANCEVIBRATOR is not set
891# CONFIG_USB_IOWARRIOR is not set 882# CONFIG_USB_IOWARRIOR is not set
892# CONFIG_USB_TEST is not set 883# CONFIG_USB_TEST is not set
884# CONFIG_USB_ISIGHTFW is not set
893# CONFIG_USB_GADGET is not set 885# CONFIG_USB_GADGET is not set
894# CONFIG_MMC is not set 886# CONFIG_MMC is not set
895# CONFIG_MEMSTICK is not set 887# CONFIG_MEMSTICK is not set
896# CONFIG_NEW_LEDS is not set 888# CONFIG_NEW_LEDS is not set
889# CONFIG_ACCESSIBILITY is not set
897# CONFIG_EDAC is not set 890# CONFIG_EDAC is not set
898# CONFIG_RTC_CLASS is not set 891CONFIG_RTC_LIB=m
892CONFIG_RTC_CLASS=m
893
894#
895# RTC interfaces
896#
897CONFIG_RTC_INTF_SYSFS=y
898CONFIG_RTC_INTF_PROC=y
899CONFIG_RTC_INTF_DEV=y
900# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
901# CONFIG_RTC_DRV_TEST is not set
902
903#
904# SPI RTC drivers
905#
906
907#
908# Platform RTC drivers
909#
910# CONFIG_RTC_DRV_CMOS is not set
911# CONFIG_RTC_DRV_DS1511 is not set
912# CONFIG_RTC_DRV_DS1553 is not set
913# CONFIG_RTC_DRV_DS1742 is not set
914# CONFIG_RTC_DRV_STK17TA8 is not set
915# CONFIG_RTC_DRV_M48T86 is not set
916# CONFIG_RTC_DRV_M48T59 is not set
917# CONFIG_RTC_DRV_V3020 is not set
918
919#
920# on-CPU RTC drivers
921#
922CONFIG_RTC_DRV_PPC=m
899# CONFIG_DMADEVICES is not set 923# CONFIG_DMADEVICES is not set
900# CONFIG_UIO is not set 924# CONFIG_UIO is not set
901 925
@@ -911,6 +935,7 @@ CONFIG_EXT3_FS_XATTR=y
911# CONFIG_EXT3_FS_SECURITY is not set 935# CONFIG_EXT3_FS_SECURITY is not set
912# CONFIG_EXT4DEV_FS is not set 936# CONFIG_EXT4DEV_FS is not set
913CONFIG_JBD=y 937CONFIG_JBD=y
938# CONFIG_JBD_DEBUG is not set
914CONFIG_FS_MBCACHE=y 939CONFIG_FS_MBCACHE=y
915# CONFIG_REISERFS_FS is not set 940# CONFIG_REISERFS_FS is not set
916# CONFIG_JFS_FS is not set 941# CONFIG_JFS_FS is not set
@@ -959,8 +984,8 @@ CONFIG_PROC_SYSCTL=y
959CONFIG_SYSFS=y 984CONFIG_SYSFS=y
960CONFIG_TMPFS=y 985CONFIG_TMPFS=y
961# CONFIG_TMPFS_POSIX_ACL is not set 986# CONFIG_TMPFS_POSIX_ACL is not set
962# CONFIG_HUGETLBFS is not set 987CONFIG_HUGETLBFS=y
963# CONFIG_HUGETLB_PAGE is not set 988CONFIG_HUGETLB_PAGE=y
964# CONFIG_CONFIGFS_FS is not set 989# CONFIG_CONFIGFS_FS is not set
965 990
966# 991#
@@ -1059,12 +1084,15 @@ CONFIG_NLS_ISO8859_1=y
1059# 1084#
1060CONFIG_BITREVERSE=y 1085CONFIG_BITREVERSE=y
1061# CONFIG_GENERIC_FIND_FIRST_BIT is not set 1086# CONFIG_GENERIC_FIND_FIRST_BIT is not set
1062# CONFIG_CRC_CCITT is not set 1087CONFIG_CRC_CCITT=m
1063# CONFIG_CRC16 is not set 1088# CONFIG_CRC16 is not set
1089# CONFIG_CRC_T10DIF is not set
1064CONFIG_CRC_ITU_T=m 1090CONFIG_CRC_ITU_T=m
1065CONFIG_CRC32=y 1091CONFIG_CRC32=y
1066# CONFIG_CRC7 is not set 1092# CONFIG_CRC7 is not set
1067# CONFIG_LIBCRC32C is not set 1093# CONFIG_LIBCRC32C is not set
1094CONFIG_ZLIB_INFLATE=m
1095CONFIG_ZLIB_DEFLATE=m
1068CONFIG_LZO_COMPRESS=m 1096CONFIG_LZO_COMPRESS=m
1069CONFIG_LZO_DECOMPRESS=m 1097CONFIG_LZO_DECOMPRESS=m
1070CONFIG_PLIST=y 1098CONFIG_PLIST=y
@@ -1082,7 +1110,7 @@ CONFIG_ENABLE_MUST_CHECK=y
1082CONFIG_FRAME_WARN=2048 1110CONFIG_FRAME_WARN=2048
1083CONFIG_MAGIC_SYSRQ=y 1111CONFIG_MAGIC_SYSRQ=y
1084# CONFIG_UNUSED_SYMBOLS is not set 1112# CONFIG_UNUSED_SYMBOLS is not set
1085# CONFIG_DEBUG_FS is not set 1113CONFIG_DEBUG_FS=y
1086# CONFIG_HEADERS_CHECK is not set 1114# CONFIG_HEADERS_CHECK is not set
1087CONFIG_DEBUG_KERNEL=y 1115CONFIG_DEBUG_KERNEL=y
1088# CONFIG_DEBUG_SHIRQ is not set 1116# CONFIG_DEBUG_SHIRQ is not set
@@ -1090,33 +1118,49 @@ CONFIG_DETECT_SOFTLOCKUP=y
1090CONFIG_SCHED_DEBUG=y 1118CONFIG_SCHED_DEBUG=y
1091# CONFIG_SCHEDSTATS is not set 1119# CONFIG_SCHEDSTATS is not set
1092# CONFIG_TIMER_STATS is not set 1120# CONFIG_TIMER_STATS is not set
1121# CONFIG_DEBUG_OBJECTS is not set
1093# CONFIG_DEBUG_SLAB is not set 1122# CONFIG_DEBUG_SLAB is not set
1094# CONFIG_DEBUG_RT_MUTEXES is not set 1123# CONFIG_DEBUG_RT_MUTEXES is not set
1095# CONFIG_RT_MUTEX_TESTER is not set 1124# CONFIG_RT_MUTEX_TESTER is not set
1096CONFIG_DEBUG_SPINLOCK=y 1125CONFIG_DEBUG_SPINLOCK=y
1097CONFIG_DEBUG_MUTEXES=y 1126CONFIG_DEBUG_MUTEXES=y
1098# CONFIG_DEBUG_LOCK_ALLOC is not set 1127CONFIG_DEBUG_LOCK_ALLOC=y
1099# CONFIG_PROVE_LOCKING is not set 1128CONFIG_PROVE_LOCKING=y
1129CONFIG_LOCKDEP=y
1100# CONFIG_LOCK_STAT is not set 1130# CONFIG_LOCK_STAT is not set
1131CONFIG_DEBUG_LOCKDEP=y
1132CONFIG_TRACE_IRQFLAGS=y
1101CONFIG_DEBUG_SPINLOCK_SLEEP=y 1133CONFIG_DEBUG_SPINLOCK_SLEEP=y
1102# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1134# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1135CONFIG_STACKTRACE=y
1103# CONFIG_DEBUG_KOBJECT is not set 1136# CONFIG_DEBUG_KOBJECT is not set
1104CONFIG_DEBUG_BUGVERBOSE=y 1137CONFIG_DEBUG_BUGVERBOSE=y
1105CONFIG_DEBUG_INFO=y 1138CONFIG_DEBUG_INFO=y
1106# CONFIG_DEBUG_VM is not set 1139# CONFIG_DEBUG_VM is not set
1107# CONFIG_DEBUG_WRITECOUNT is not set 1140CONFIG_DEBUG_WRITECOUNT=y
1108CONFIG_DEBUG_LIST=y 1141CONFIG_DEBUG_LIST=y
1109# CONFIG_DEBUG_SG is not set 1142# CONFIG_DEBUG_SG is not set
1143CONFIG_FRAME_POINTER=y
1110# CONFIG_BOOT_PRINTK_DELAY is not set 1144# CONFIG_BOOT_PRINTK_DELAY is not set
1111# CONFIG_RCU_TORTURE_TEST is not set 1145# CONFIG_RCU_TORTURE_TEST is not set
1112# CONFIG_BACKTRACE_SELF_TEST is not set 1146# CONFIG_BACKTRACE_SELF_TEST is not set
1113# CONFIG_FAULT_INJECTION is not set 1147# CONFIG_FAULT_INJECTION is not set
1148# CONFIG_LATENCYTOP is not set
1149CONFIG_HAVE_FTRACE=y
1150CONFIG_HAVE_DYNAMIC_FTRACE=y
1151# CONFIG_FTRACE is not set
1152# CONFIG_IRQSOFF_TRACER is not set
1153# CONFIG_SCHED_TRACER is not set
1154# CONFIG_CONTEXT_SWITCH_TRACER is not set
1114# CONFIG_SAMPLES is not set 1155# CONFIG_SAMPLES is not set
1115CONFIG_DEBUG_STACKOVERFLOW=y 1156CONFIG_DEBUG_STACKOVERFLOW=y
1116# CONFIG_DEBUG_STACK_USAGE is not set 1157# CONFIG_DEBUG_STACK_USAGE is not set
1117# CONFIG_DEBUG_PAGEALLOC is not set 1158# CONFIG_DEBUG_PAGEALLOC is not set
1118# CONFIG_DEBUGGER is not set 1159# CONFIG_DEBUGGER is not set
1160# CONFIG_CODE_PATCHING_SELFTEST is not set
1161# CONFIG_FTR_FIXUP_SELFTEST is not set
1119CONFIG_IRQSTACKS=y 1162CONFIG_IRQSTACKS=y
1163# CONFIG_VIRQ_DEBUG is not set
1120# CONFIG_BOOTX_TEXT is not set 1164# CONFIG_BOOTX_TEXT is not set
1121# CONFIG_PPC_EARLY_DEBUG is not set 1165# CONFIG_PPC_EARLY_DEBUG is not set
1122 1166
@@ -1172,6 +1216,10 @@ CONFIG_CRYPTO_PCBC=m
1172# CONFIG_CRYPTO_MD4 is not set 1216# CONFIG_CRYPTO_MD4 is not set
1173CONFIG_CRYPTO_MD5=y 1217CONFIG_CRYPTO_MD5=y
1174CONFIG_CRYPTO_MICHAEL_MIC=m 1218CONFIG_CRYPTO_MICHAEL_MIC=m
1219# CONFIG_CRYPTO_RMD128 is not set
1220# CONFIG_CRYPTO_RMD160 is not set
1221# CONFIG_CRYPTO_RMD256 is not set
1222# CONFIG_CRYPTO_RMD320 is not set
1175# CONFIG_CRYPTO_SHA1 is not set 1223# CONFIG_CRYPTO_SHA1 is not set
1176# CONFIG_CRYPTO_SHA256 is not set 1224# CONFIG_CRYPTO_SHA256 is not set
1177# CONFIG_CRYPTO_SHA512 is not set 1225# CONFIG_CRYPTO_SHA512 is not set
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index f7f3c215d06f..b936a1dd0a50 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -355,6 +355,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
355 .icache_bsize = 128, 355 .icache_bsize = 128,
356 .dcache_bsize = 128, 356 .dcache_bsize = 128,
357 .machine_check = machine_check_generic, 357 .machine_check = machine_check_generic,
358 .oprofile_cpu_type = "ppc64/compat-power5+",
358 .platform = "power5+", 359 .platform = "power5+",
359 }, 360 },
360 { /* Power6 */ 361 { /* Power6 */
@@ -386,6 +387,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
386 .icache_bsize = 128, 387 .icache_bsize = 128,
387 .dcache_bsize = 128, 388 .dcache_bsize = 128,
388 .machine_check = machine_check_generic, 389 .machine_check = machine_check_generic,
390 .oprofile_cpu_type = "ppc64/compat-power6",
389 .platform = "power6", 391 .platform = "power6",
390 }, 392 },
391 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */ 393 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
@@ -397,6 +399,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
397 .icache_bsize = 128, 399 .icache_bsize = 128,
398 .dcache_bsize = 128, 400 .dcache_bsize = 128,
399 .machine_check = machine_check_generic, 401 .machine_check = machine_check_generic,
402 .oprofile_cpu_type = "ppc64/compat-power7",
400 .platform = "power7", 403 .platform = "power7",
401 }, 404 },
402 { /* Power7 */ 405 { /* Power7 */
@@ -1629,6 +1632,23 @@ struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
1629 t->cpu_setup = s->cpu_setup; 1632 t->cpu_setup = s->cpu_setup;
1630 t->cpu_restore = s->cpu_restore; 1633 t->cpu_restore = s->cpu_restore;
1631 t->platform = s->platform; 1634 t->platform = s->platform;
1635 /*
1636 * If we have passed through this logic once
1637 * before and have pulled the default case
1638 * because the real PVR was not found inside
1639 * cpu_specs[], then we are possibly running in
1640 * compatibility mode. In that case, let the
1641 * oprofiler know which set of compatibility
1642 * counters to pull from by making sure the
1643 * oprofile_cpu_type string is set to that of
1644 * compatibility mode. If the oprofile_cpu_type
1645 * already has a value, then we are possibly
1646 * overriding a real PVR with a logical one, and,
1647 * in that case, keep the current value for
1648 * oprofile_cpu_type.
1649 */
1650 if (t->oprofile_cpu_type == NULL)
1651 t->oprofile_cpu_type = s->oprofile_cpu_type;
1632 } else 1652 } else
1633 *t = *s; 1653 *t = *s;
1634 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; 1654 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index c4268500e856..3cb52fa0eda3 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -151,16 +151,11 @@ skpinv: addi r6,r6,1 /* Increment */
151 /* Invalidate TLB0 */ 151 /* Invalidate TLB0 */
152 li r6,0x04 152 li r6,0x04
153 tlbivax 0,r6 153 tlbivax 0,r6
154#ifdef CONFIG_SMP 154 TLBSYNC
155 tlbsync
156#endif
157 /* Invalidate TLB1 */ 155 /* Invalidate TLB1 */
158 li r6,0x0c 156 li r6,0x0c
159 tlbivax 0,r6 157 tlbivax 0,r6
160#ifdef CONFIG_SMP 158 TLBSYNC
161 tlbsync
162#endif
163 msync
164 159
165/* 3. Setup a temp mapping and jump to it */ 160/* 3. Setup a temp mapping and jump to it */
166 andi. r5, r3, 0x1 /* Find an entry not used and is non-zero */ 161 andi. r5, r3, 0x1 /* Find an entry not used and is non-zero */
@@ -238,10 +233,7 @@ skpinv: addi r6,r6,1 /* Increment */
238 /* Invalidate TLB1 */ 233 /* Invalidate TLB1 */
239 li r9,0x0c 234 li r9,0x0c
240 tlbivax 0,r9 235 tlbivax 0,r9
241#ifdef CONFIG_SMP 236 TLBSYNC
242 tlbsync
243#endif
244 msync
245 237
246/* 6. Setup KERNELBASE mapping in TLB1[0] */ 238/* 6. Setup KERNELBASE mapping in TLB1[0] */
247 lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */ 239 lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */
@@ -283,10 +275,7 @@ skpinv: addi r6,r6,1 /* Increment */
283 /* Invalidate TLB1 */ 275 /* Invalidate TLB1 */
284 li r9,0x0c 276 li r9,0x0c
285 tlbivax 0,r9 277 tlbivax 0,r9
286#ifdef CONFIG_SMP 278 TLBSYNC
287 tlbsync
288#endif
289 msync
290 279
291 /* Establish the interrupt vector offsets */ 280 /* Establish the interrupt vector offsets */
292 SET_IVOR(0, CriticalInput); 281 SET_IVOR(0, CriticalInput);
@@ -483,90 +472,16 @@ interrupt_base:
483 472
484 /* Data Storage Interrupt */ 473 /* Data Storage Interrupt */
485 START_EXCEPTION(DataStorage) 474 START_EXCEPTION(DataStorage)
486 mtspr SPRN_SPRG0, r10 /* Save some working registers */ 475 NORMAL_EXCEPTION_PROLOG
487 mtspr SPRN_SPRG1, r11 476 mfspr r5,SPRN_ESR /* Grab the ESR, save it, pass arg3 */
488 mtspr SPRN_SPRG4W, r12 477 stw r5,_ESR(r11)
489 mtspr SPRN_SPRG5W, r13 478 mfspr r4,SPRN_DEAR /* Grab the DEAR, save it, pass arg2 */
490 mfcr r11 479 andis. r10,r5,(ESR_ILK|ESR_DLK)@h
491 mtspr SPRN_SPRG7W, r11 480 bne 1f
492 481 EXC_XFER_EE_LITE(0x0300, handle_page_fault)
493 /* 4821:
494 * Check if it was a store fault, if not then bail 483 addi r3,r1,STACK_FRAME_OVERHEAD
495 * because a user tried to access a kernel or 484 EXC_XFER_EE_LITE(0x0300, CacheLockingException)
496 * read-protected page. Otherwise, get the
497 * offending address and handle it.
498 */
499 mfspr r10, SPRN_ESR
500 andis. r10, r10, ESR_ST@h
501 beq 2f
502
503 mfspr r10, SPRN_DEAR /* Get faulting address */
504
505 /* If we are faulting a kernel address, we have to use the
506 * kernel page tables.
507 */
508 lis r11, PAGE_OFFSET@h
509 cmplw 0, r10, r11
510 bge 2f
511
512 /* Get the PGD for the current thread */
5133:
514 mfspr r11,SPRN_SPRG3
515 lwz r11,PGDIR(r11)
5164:
517 FIND_PTE
518
519 /* Are _PAGE_USER & _PAGE_RW set & _PAGE_HWWRITE not? */
520 andi. r13, r11, _PAGE_RW|_PAGE_USER|_PAGE_HWWRITE
521 cmpwi 0, r13, _PAGE_RW|_PAGE_USER
522 bne 2f /* Bail if not */
523
524 /* Update 'changed'. */
525 ori r11, r11, _PAGE_DIRTY|_PAGE_ACCESSED|_PAGE_HWWRITE
526 stw r11, PTE_FLAGS_OFFSET(r12) /* Update Linux page table */
527
528 /* MAS2 not updated as the entry does exist in the tlb, this
529 fault taken to detect state transition (eg: COW -> DIRTY)
530 */
531 andi. r11, r11, _PAGE_HWEXEC
532 rlwimi r11, r11, 31, 27, 27 /* SX <- _PAGE_HWEXEC */
533 ori r11, r11, (MAS3_UW|MAS3_SW|MAS3_UR|MAS3_SR)@l /* set static perms */
534
535 /* update search PID in MAS6, AS = 0 */
536 mfspr r12, SPRN_PID0
537 slwi r12, r12, 16
538 mtspr SPRN_MAS6, r12
539
540 /* find the TLB index that caused the fault. It has to be here. */
541 tlbsx 0, r10
542
543 /* only update the perm bits, assume the RPN is fine */
544 mfspr r12, SPRN_MAS3
545 rlwimi r12, r11, 0, 20, 31
546 mtspr SPRN_MAS3,r12
547 tlbwe
548
549 /* Done...restore registers and get out of here. */
550 mfspr r11, SPRN_SPRG7R
551 mtcr r11
552 mfspr r13, SPRN_SPRG5R
553 mfspr r12, SPRN_SPRG4R
554 mfspr r11, SPRN_SPRG1
555 mfspr r10, SPRN_SPRG0
556 rfi /* Force context change */
557
5582:
559 /*
560 * The bailout. Restore registers to pre-exception conditions
561 * and call the heavyweights to help us out.
562 */
563 mfspr r11, SPRN_SPRG7R
564 mtcr r11
565 mfspr r13, SPRN_SPRG5R
566 mfspr r12, SPRN_SPRG4R
567 mfspr r11, SPRN_SPRG1
568 mfspr r10, SPRN_SPRG0
569 b data_access
570 485
571 /* Instruction Storage Interrupt */ 486 /* Instruction Storage Interrupt */
572 INSTRUCTION_STORAGE_EXCEPTION 487 INSTRUCTION_STORAGE_EXCEPTION
@@ -645,15 +560,30 @@ interrupt_base:
645 lwz r11,PGDIR(r11) 560 lwz r11,PGDIR(r11)
646 561
6474: 5624:
563 /* Mask of required permission bits. Note that while we
564 * do copy ESR:ST to _PAGE_RW position as trying to write
565 * to an RO page is pretty common, we don't do it with
566 * _PAGE_DIRTY. We could do it, but it's a fairly rare
567 * event so I'd rather take the overhead when it happens
568 * rather than adding an instruction here. We should measure
569 * whether the whole thing is worth it in the first place
570 * as we could avoid loading SPRN_ESR completely in the first
571 * place...
572 *
573 * TODO: Is it worth doing that mfspr & rlwimi in the first
574 * place or can we save a couple of instructions here ?
575 */
576 mfspr r12,SPRN_ESR
577 li r13,_PAGE_PRESENT|_PAGE_ACCESSED
578 rlwimi r13,r12,11,29,29
579
648 FIND_PTE 580 FIND_PTE
649 andi. r13, r11, _PAGE_PRESENT /* Is the page present? */ 581 andc. r13,r13,r11 /* Check permission */
650 beq 2f /* Bail if not present */ 582 bne 2f /* Bail if permission mismach */
651 583
652#ifdef CONFIG_PTE_64BIT 584#ifdef CONFIG_PTE_64BIT
653 lwz r13, 0(r12) 585 lwz r13, 0(r12)
654#endif 586#endif
655 ori r11, r11, _PAGE_ACCESSED
656 stw r11, PTE_FLAGS_OFFSET(r12)
657 587
658 /* Jump to common tlb load */ 588 /* Jump to common tlb load */
659 b finish_tlb_load 589 b finish_tlb_load
@@ -667,7 +597,7 @@ interrupt_base:
667 mfspr r12, SPRN_SPRG4R 597 mfspr r12, SPRN_SPRG4R
668 mfspr r11, SPRN_SPRG1 598 mfspr r11, SPRN_SPRG1
669 mfspr r10, SPRN_SPRG0 599 mfspr r10, SPRN_SPRG0
670 b data_access 600 b DataStorage
671 601
672 /* Instruction TLB Error Interrupt */ 602 /* Instruction TLB Error Interrupt */
673 /* 603 /*
@@ -705,15 +635,16 @@ interrupt_base:
705 lwz r11,PGDIR(r11) 635 lwz r11,PGDIR(r11)
706 636
7074: 6374:
638 /* Make up the required permissions */
639 li r13,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_HWEXEC
640
708 FIND_PTE 641 FIND_PTE
709 andi. r13, r11, _PAGE_PRESENT /* Is the page present? */ 642 andc. r13,r13,r11 /* Check permission */
710 beq 2f /* Bail if not present */ 643 bne 2f /* Bail if permission mismach */
711 644
712#ifdef CONFIG_PTE_64BIT 645#ifdef CONFIG_PTE_64BIT
713 lwz r13, 0(r12) 646 lwz r13, 0(r12)
714#endif 647#endif
715 ori r11, r11, _PAGE_ACCESSED
716 stw r11, PTE_FLAGS_OFFSET(r12)
717 648
718 /* Jump to common TLB load point */ 649 /* Jump to common TLB load point */
719 b finish_tlb_load 650 b finish_tlb_load
@@ -768,29 +699,13 @@ interrupt_base:
768 * Local functions 699 * Local functions
769 */ 700 */
770 701
771 /*
772 * Data TLB exceptions will bail out to this point
773 * if they can't resolve the lightweight TLB fault.
774 */
775data_access:
776 NORMAL_EXCEPTION_PROLOG
777 mfspr r5,SPRN_ESR /* Grab the ESR, save it, pass arg3 */
778 stw r5,_ESR(r11)
779 mfspr r4,SPRN_DEAR /* Grab the DEAR, save it, pass arg2 */
780 andis. r10,r5,(ESR_ILK|ESR_DLK)@h
781 bne 1f
782 EXC_XFER_EE_LITE(0x0300, handle_page_fault)
7831:
784 addi r3,r1,STACK_FRAME_OVERHEAD
785 EXC_XFER_EE_LITE(0x0300, CacheLockingException)
786
787/* 702/*
788
789 * Both the instruction and data TLB miss get to this 703 * Both the instruction and data TLB miss get to this
790 * point to load the TLB. 704 * point to load the TLB.
791 * r10 - EA of fault 705 * r10 - EA of fault
792 * r11 - TLB (info from Linux PTE) 706 * r11 - TLB (info from Linux PTE)
793 * r12, r13 - available to use 707 * r12 - available to use
708 * r13 - upper bits of PTE (if PTE_64BIT) or available to use
794 * CR5 - results of addr >= PAGE_OFFSET 709 * CR5 - results of addr >= PAGE_OFFSET
795 * MAS0, MAS1 - loaded with proper value when we get here 710 * MAS0, MAS1 - loaded with proper value when we get here
796 * MAS2, MAS3 - will need additional info from Linux PTE 711 * MAS2, MAS3 - will need additional info from Linux PTE
@@ -812,20 +727,14 @@ finish_tlb_load:
812#endif 727#endif
813 mtspr SPRN_MAS2, r12 728 mtspr SPRN_MAS2, r12
814 729
815 bge 5, 1f 730 li r10, (_PAGE_HWEXEC | _PAGE_PRESENT)
816 731 rlwimi r10, r11, 31, 29, 29 /* extract _PAGE_DIRTY into SW */
817 /* is user addr */ 732 and r12, r11, r10
818 andi. r12, r11, (_PAGE_USER | _PAGE_HWWRITE | _PAGE_HWEXEC)
819 andi. r10, r11, _PAGE_USER /* Test for _PAGE_USER */ 733 andi. r10, r11, _PAGE_USER /* Test for _PAGE_USER */
820 srwi r10, r12, 1 734 slwi r10, r12, 1
821 or r12, r12, r10 /* Copy user perms into supervisor */ 735 or r10, r10, r12
822 iseleq r12, 0, r12 736 iseleq r12, r12, r10
823 b 2f 737
824
825 /* is kernel addr */
8261: rlwinm r12, r11, 31, 29, 29 /* Extract _PAGE_HWWRITE into SW */
827 ori r12, r12, (MAS3_SX | MAS3_SR)
828
829#ifdef CONFIG_PTE_64BIT 738#ifdef CONFIG_PTE_64BIT
8302: rlwimi r12, r13, 24, 0, 7 /* grab RPN[32:39] */ 7392: rlwimi r12, r13, 24, 0, 7 /* grab RPN[32:39] */
831 rlwimi r12, r11, 24, 8, 19 /* grab RPN[40:51] */ 740 rlwimi r12, r11, 24, 8, 19 /* grab RPN[40:51] */
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 8c68ee9e5d1c..2385f68c1751 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -186,7 +186,8 @@ static unsigned long iommu_range_alloc(struct device *dev,
186static dma_addr_t iommu_alloc(struct device *dev, struct iommu_table *tbl, 186static dma_addr_t iommu_alloc(struct device *dev, struct iommu_table *tbl,
187 void *page, unsigned int npages, 187 void *page, unsigned int npages,
188 enum dma_data_direction direction, 188 enum dma_data_direction direction,
189 unsigned long mask, unsigned int align_order) 189 unsigned long mask, unsigned int align_order,
190 struct dma_attrs *attrs)
190{ 191{
191 unsigned long entry, flags; 192 unsigned long entry, flags;
192 dma_addr_t ret = DMA_ERROR_CODE; 193 dma_addr_t ret = DMA_ERROR_CODE;
@@ -205,7 +206,7 @@ static dma_addr_t iommu_alloc(struct device *dev, struct iommu_table *tbl,
205 206
206 /* Put the TCEs in the HW table */ 207 /* Put the TCEs in the HW table */
207 ppc_md.tce_build(tbl, entry, npages, (unsigned long)page & IOMMU_PAGE_MASK, 208 ppc_md.tce_build(tbl, entry, npages, (unsigned long)page & IOMMU_PAGE_MASK,
208 direction); 209 direction, attrs);
209 210
210 211
211 /* Flush/invalidate TLB caches if necessary */ 212 /* Flush/invalidate TLB caches if necessary */
@@ -336,7 +337,8 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
336 npages, entry, dma_addr); 337 npages, entry, dma_addr);
337 338
338 /* Insert into HW table */ 339 /* Insert into HW table */
339 ppc_md.tce_build(tbl, entry, npages, vaddr & IOMMU_PAGE_MASK, direction); 340 ppc_md.tce_build(tbl, entry, npages, vaddr & IOMMU_PAGE_MASK,
341 direction, attrs);
340 342
341 /* If we are in an open segment, try merging */ 343 /* If we are in an open segment, try merging */
342 if (segstart != s) { 344 if (segstart != s) {
@@ -573,7 +575,8 @@ dma_addr_t iommu_map_single(struct device *dev, struct iommu_table *tbl,
573 align = PAGE_SHIFT - IOMMU_PAGE_SHIFT; 575 align = PAGE_SHIFT - IOMMU_PAGE_SHIFT;
574 576
575 dma_handle = iommu_alloc(dev, tbl, vaddr, npages, direction, 577 dma_handle = iommu_alloc(dev, tbl, vaddr, npages, direction,
576 mask >> IOMMU_PAGE_SHIFT, align); 578 mask >> IOMMU_PAGE_SHIFT, align,
579 attrs);
577 if (dma_handle == DMA_ERROR_CODE) { 580 if (dma_handle == DMA_ERROR_CODE) {
578 if (printk_ratelimit()) { 581 if (printk_ratelimit()) {
579 printk(KERN_INFO "iommu_alloc failed, " 582 printk(KERN_INFO "iommu_alloc failed, "
@@ -642,7 +645,7 @@ void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl,
642 nio_pages = size >> IOMMU_PAGE_SHIFT; 645 nio_pages = size >> IOMMU_PAGE_SHIFT;
643 io_order = get_iommu_order(size); 646 io_order = get_iommu_order(size);
644 mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL, 647 mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL,
645 mask >> IOMMU_PAGE_SHIFT, io_order); 648 mask >> IOMMU_PAGE_SHIFT, io_order, NULL);
646 if (mapping == DMA_ERROR_CODE) { 649 if (mapping == DMA_ERROR_CODE) {
647 free_pages((unsigned long)ret, order); 650 free_pages((unsigned long)ret, order);
648 return NULL; 651 return NULL;
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index 063cdd413049..224e9a11765c 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -598,6 +598,7 @@ void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose,
598 res->start = pci_addr; 598 res->start = pci_addr;
599 break; 599 break;
600 case 2: /* PCI Memory space */ 600 case 2: /* PCI Memory space */
601 case 3: /* PCI 64 bits Memory space */
601 printk(KERN_INFO 602 printk(KERN_INFO
602 " MEM 0x%016llx..0x%016llx -> 0x%016llx %s\n", 603 " MEM 0x%016llx..0x%016llx -> 0x%016llx %s\n",
603 cpu_addr, cpu_addr + size - 1, pci_addr, 604 cpu_addr, cpu_addr + size - 1, pci_addr,
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
index 90eb3a3e383e..bc1fb27368af 100644
--- a/arch/powerpc/kernel/prom_parse.c
+++ b/arch/powerpc/kernel/prom_parse.c
@@ -128,12 +128,35 @@ static void of_bus_pci_count_cells(struct device_node *np,
128 *sizec = 2; 128 *sizec = 2;
129} 129}
130 130
131static unsigned int of_bus_pci_get_flags(const u32 *addr)
132{
133 unsigned int flags = 0;
134 u32 w = addr[0];
135
136 switch((w >> 24) & 0x03) {
137 case 0x01:
138 flags |= IORESOURCE_IO;
139 break;
140 case 0x02: /* 32 bits */
141 case 0x03: /* 64 bits */
142 flags |= IORESOURCE_MEM;
143 break;
144 }
145 if (w & 0x40000000)
146 flags |= IORESOURCE_PREFETCH;
147 return flags;
148}
149
131static u64 of_bus_pci_map(u32 *addr, const u32 *range, int na, int ns, int pna) 150static u64 of_bus_pci_map(u32 *addr, const u32 *range, int na, int ns, int pna)
132{ 151{
133 u64 cp, s, da; 152 u64 cp, s, da;
153 unsigned int af, rf;
154
155 af = of_bus_pci_get_flags(addr);
156 rf = of_bus_pci_get_flags(range);
134 157
135 /* Check address type match */ 158 /* Check address type match */
136 if ((addr[0] ^ range[0]) & 0x03000000) 159 if ((af ^ rf) & (IORESOURCE_MEM | IORESOURCE_IO))
137 return OF_BAD_ADDR; 160 return OF_BAD_ADDR;
138 161
139 /* Read address values, skipping high cell */ 162 /* Read address values, skipping high cell */
@@ -153,25 +176,6 @@ static int of_bus_pci_translate(u32 *addr, u64 offset, int na)
153 return of_bus_default_translate(addr + 1, offset, na - 1); 176 return of_bus_default_translate(addr + 1, offset, na - 1);
154} 177}
155 178
156static unsigned int of_bus_pci_get_flags(const u32 *addr)
157{
158 unsigned int flags = 0;
159 u32 w = addr[0];
160
161 switch((w >> 24) & 0x03) {
162 case 0x01:
163 flags |= IORESOURCE_IO;
164 break;
165 case 0x02: /* 32 bits */
166 case 0x03: /* 64 bits */
167 flags |= IORESOURCE_MEM;
168 break;
169 }
170 if (w & 0x40000000)
171 flags |= IORESOURCE_PREFETCH;
172 return flags;
173}
174
175const u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size, 179const u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
176 unsigned int *flags) 180 unsigned int *flags)
177{ 181{
diff --git a/arch/powerpc/kernel/stacktrace.c b/arch/powerpc/kernel/stacktrace.c
index 071bee3ec749..f2589645870a 100644
--- a/arch/powerpc/kernel/stacktrace.c
+++ b/arch/powerpc/kernel/stacktrace.c
@@ -59,6 +59,6 @@ EXPORT_SYMBOL_GPL(save_stack_trace);
59 59
60void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) 60void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
61{ 61{
62 save_context_stack(trace, tsk->thread.regs->gpr[1], tsk, 0); 62 save_context_stack(trace, tsk->thread.ksp, tsk, 0);
63} 63}
64EXPORT_SYMBOL_GPL(save_stack_trace_tsk); 64EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index c8127f832df0..aba0ba95f062 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -28,7 +28,9 @@ static DEFINE_PER_CPU(struct cpu, cpu_devices);
28/* Time in microseconds we delay before sleeping in the idle loop */ 28/* Time in microseconds we delay before sleeping in the idle loop */
29DEFINE_PER_CPU(unsigned long, smt_snooze_delay) = { 100 }; 29DEFINE_PER_CPU(unsigned long, smt_snooze_delay) = { 100 };
30 30
31static ssize_t store_smt_snooze_delay(struct sys_device *dev, const char *buf, 31static ssize_t store_smt_snooze_delay(struct sys_device *dev,
32 struct sysdev_attribute *attr,
33 const char *buf,
32 size_t count) 34 size_t count)
33{ 35{
34 struct cpu *cpu = container_of(dev, struct cpu, sysdev); 36 struct cpu *cpu = container_of(dev, struct cpu, sysdev);
@@ -44,7 +46,9 @@ static ssize_t store_smt_snooze_delay(struct sys_device *dev, const char *buf,
44 return count; 46 return count;
45} 47}
46 48
47static ssize_t show_smt_snooze_delay(struct sys_device *dev, char *buf) 49static ssize_t show_smt_snooze_delay(struct sys_device *dev,
50 struct sysdev_attribute *attr,
51 char *buf)
48{ 52{
49 struct cpu *cpu = container_of(dev, struct cpu, sysdev); 53 struct cpu *cpu = container_of(dev, struct cpu, sysdev);
50 54
@@ -152,14 +156,17 @@ static unsigned long write_##NAME(unsigned long val) \
152 mtspr(ADDRESS, val); \ 156 mtspr(ADDRESS, val); \
153 return 0; \ 157 return 0; \
154} \ 158} \
155static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 159static ssize_t show_##NAME(struct sys_device *dev, \
160 struct sysdev_attribute *attr, \
161 char *buf) \
156{ \ 162{ \
157 struct cpu *cpu = container_of(dev, struct cpu, sysdev); \ 163 struct cpu *cpu = container_of(dev, struct cpu, sysdev); \
158 unsigned long val = run_on_cpu(cpu->sysdev.id, read_##NAME, 0); \ 164 unsigned long val = run_on_cpu(cpu->sysdev.id, read_##NAME, 0); \
159 return sprintf(buf, "%lx\n", val); \ 165 return sprintf(buf, "%lx\n", val); \
160} \ 166} \
161static ssize_t __used \ 167static ssize_t __used \
162 store_##NAME(struct sys_device *dev, const char *buf, size_t count) \ 168 store_##NAME(struct sys_device *dev, struct sysdev_attribute *attr, \
169 const char *buf, size_t count) \
163{ \ 170{ \
164 struct cpu *cpu = container_of(dev, struct cpu, sysdev); \ 171 struct cpu *cpu = container_of(dev, struct cpu, sysdev); \
165 unsigned long val; \ 172 unsigned long val; \
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 87a72c66ce27..a914411bced5 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -9,6 +9,25 @@
9 9
10ENTRY(_stext) 10ENTRY(_stext)
11 11
12PHDRS {
13 kernel PT_LOAD FLAGS(7); /* RWX */
14 notes PT_NOTE FLAGS(0);
15 dummy PT_NOTE FLAGS(0);
16
17 /* binutils < 2.18 has a bug that makes it misbehave when taking an
18 ELF file with all segments at load address 0 as input. This
19 happens when running "strip" on vmlinux, because of the AT() magic
20 in this linker script. People using GCC >= 4.2 won't run into
21 this problem, because the "build-id" support will put some data
22 into the "notes" segment (at a non-zero load address).
23
24 To work around this, we force some data into both the "dummy"
25 segment and the kernel segment, so the dummy segment will get a
26 non-zero load address. It's not enough to always create the
27 "notes" segment, since if nothing gets assigned to it, its load
28 address will be zero. */
29}
30
12#ifdef CONFIG_PPC64 31#ifdef CONFIG_PPC64
13OUTPUT_ARCH(powerpc:common64) 32OUTPUT_ARCH(powerpc:common64)
14jiffies = jiffies_64; 33jiffies = jiffies_64;
@@ -50,7 +69,7 @@ SECTIONS
50 . = ALIGN(PAGE_SIZE); 69 . = ALIGN(PAGE_SIZE);
51 _etext = .; 70 _etext = .;
52 PROVIDE32 (etext = .); 71 PROVIDE32 (etext = .);
53 } 72 } :kernel
54 73
55 /* Read-only data */ 74 /* Read-only data */
56 RODATA 75 RODATA
@@ -62,7 +81,13 @@ SECTIONS
62 __stop___ex_table = .; 81 __stop___ex_table = .;
63 } 82 }
64 83
65 NOTES 84 NOTES :kernel :notes
85
86 /* The dummy segment contents for the bug workaround mentioned above
87 near PHDRS. */
88 .dummy : {
89 LONG(0xf177)
90 } :kernel :dummy
66 91
67/* 92/*
68 * Init sections discarded at runtime 93 * Init sections discarded at runtime
@@ -74,7 +99,7 @@ SECTIONS
74 _sinittext = .; 99 _sinittext = .;
75 INIT_TEXT 100 INIT_TEXT
76 _einittext = .; 101 _einittext = .;
77 } 102 } :kernel
78 103
79 /* .exit.text is discarded at runtime, not link time, 104 /* .exit.text is discarded at runtime, not link time,
80 * to deal with references from __bug_table 105 * to deal with references from __bug_table
diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c
index 4e43702b9813..8c5a03be31e0 100644
--- a/arch/powerpc/lib/feature-fixups.c
+++ b/arch/powerpc/lib/feature-fixups.c
@@ -99,7 +99,7 @@ void do_feature_fixups(unsigned long value, void *fixup_start, void *fixup_end)
99 99
100 for (; fcur < fend; fcur++) { 100 for (; fcur < fend; fcur++) {
101 if (patch_feature_section(value, fcur)) { 101 if (patch_feature_section(value, fcur)) {
102 __WARN(); 102 WARN_ON(1);
103 printk("Unable to patch feature section at %p - %p" \ 103 printk("Unable to patch feature section at %p - %p" \
104 " with %p - %p\n", 104 " with %p - %p\n",
105 calc_addr(fcur, fcur->start_off), 105 calc_addr(fcur, fcur->start_off),
diff --git a/arch/powerpc/lib/string.S b/arch/powerpc/lib/string.S
index 49eb1f1a2bb4..64e2e499e32a 100644
--- a/arch/powerpc/lib/string.S
+++ b/arch/powerpc/lib/string.S
@@ -13,13 +13,7 @@
13#include <asm/ppc_asm.h> 13#include <asm/ppc_asm.h>
14 14
15 .section __ex_table,"a" 15 .section __ex_table,"a"
16#ifdef CONFIG_PPC64 16 PPC_LONG_ALIGN
17 .align 3
18#define EXTBL .llong
19#else
20 .align 2
21#define EXTBL .long
22#endif
23 .text 17 .text
24 18
25_GLOBAL(strcpy) 19_GLOBAL(strcpy)
@@ -160,9 +154,9 @@ _GLOBAL(__clear_user)
160 blr 154 blr
161 155
162 .section __ex_table,"a" 156 .section __ex_table,"a"
163 EXTBL 11b,90b 157 PPC_LONG 11b,90b
164 EXTBL 1b,91b 158 PPC_LONG 1b,91b
165 EXTBL 8b,92b 159 PPC_LONG 8b,92b
166 .text 160 .text
167 161
168_GLOBAL(__strncpy_from_user) 162_GLOBAL(__strncpy_from_user)
@@ -183,7 +177,7 @@ _GLOBAL(__strncpy_from_user)
183 blr 177 blr
184 178
185 .section __ex_table,"a" 179 .section __ex_table,"a"
186 EXTBL 1b,99b 180 PPC_LONG 1b,99b
187 .text 181 .text
188 182
189/* r3 = str, r4 = len (> 0), r5 = top (highest addr) */ 183/* r3 = str, r4 = len (> 0), r5 = top (highest addr) */
@@ -208,4 +202,4 @@ _GLOBAL(__strnlen_user)
208 blr 202 blr
209 203
210 .section __ex_table,"a" 204 .section __ex_table,"a"
211 EXTBL 1b,99b 205 PPC_LONG 1b,99b
diff --git a/arch/powerpc/platforms/52xx/Kconfig b/arch/powerpc/platforms/52xx/Kconfig
index acd2fc8cf492..d664b1bce381 100644
--- a/arch/powerpc/platforms/52xx/Kconfig
+++ b/arch/powerpc/platforms/52xx/Kconfig
@@ -3,6 +3,7 @@ config PPC_MPC52xx
3 depends on PPC_MULTIPLATFORM && PPC32 3 depends on PPC_MULTIPLATFORM && PPC32
4 select FSL_SOC 4 select FSL_SOC
5 select PPC_CLOCK 5 select PPC_CLOCK
6 select PPC_PCI_CHOICE
6 7
7config PPC_MPC5200_SIMPLE 8config PPC_MPC5200_SIMPLE
8 bool "Generic support for simple MPC5200 based boards" 9 bool "Generic support for simple MPC5200 based boards"
diff --git a/arch/powerpc/platforms/82xx/Kconfig b/arch/powerpc/platforms/82xx/Kconfig
index 1c8034bfa796..75eb1ede5497 100644
--- a/arch/powerpc/platforms/82xx/Kconfig
+++ b/arch/powerpc/platforms/82xx/Kconfig
@@ -30,6 +30,7 @@ config EP8248E
30 select 8272 30 select 8272
31 select 8260 31 select 8260
32 select FSL_SOC 32 select FSL_SOC
33 select PHYLIB
33 select MDIO_BITBANG 34 select MDIO_BITBANG
34 help 35 help
35 This enables support for the Embedded Planet EP8248E board. 36 This enables support for the Embedded Planet EP8248E board.
diff --git a/arch/powerpc/platforms/82xx/ep8248e.c b/arch/powerpc/platforms/82xx/ep8248e.c
index 373e993a5ed5..d5770fdf7f09 100644
--- a/arch/powerpc/platforms/82xx/ep8248e.c
+++ b/arch/powerpc/platforms/82xx/ep8248e.c
@@ -59,7 +59,6 @@ static void __init ep8248e_pic_init(void)
59 of_node_put(np); 59 of_node_put(np);
60} 60}
61 61
62#ifdef CONFIG_FS_ENET_MDIO_FCC
63static void ep8248e_set_mdc(struct mdiobb_ctrl *ctrl, int level) 62static void ep8248e_set_mdc(struct mdiobb_ctrl *ctrl, int level)
64{ 63{
65 if (level) 64 if (level)
@@ -165,7 +164,6 @@ static struct of_platform_driver ep8248e_mdio_driver = {
165 .probe = ep8248e_mdio_probe, 164 .probe = ep8248e_mdio_probe,
166 .remove = ep8248e_mdio_remove, 165 .remove = ep8248e_mdio_remove,
167}; 166};
168#endif
169 167
170struct cpm_pin { 168struct cpm_pin {
171 int port, pin, flags; 169 int port, pin, flags;
@@ -298,9 +296,7 @@ static __initdata struct of_device_id of_bus_ids[] = {
298static int __init declare_of_platform_devices(void) 296static int __init declare_of_platform_devices(void)
299{ 297{
300 of_platform_bus_probe(NULL, of_bus_ids, NULL); 298 of_platform_bus_probe(NULL, of_bus_ids, NULL);
301#ifdef CONFIG_FS_ENET_MDIO_FCC
302 of_register_platform_driver(&ep8248e_mdio_driver); 299 of_register_platform_driver(&ep8248e_mdio_driver);
303#endif
304 300
305 return 0; 301 return 0;
306} 302}
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig
index 27d9bf86de01..6159c5d4e5f1 100644
--- a/arch/powerpc/platforms/83xx/Kconfig
+++ b/arch/powerpc/platforms/83xx/Kconfig
@@ -2,7 +2,8 @@ menuconfig PPC_83xx
2 bool "83xx-based boards" 2 bool "83xx-based boards"
3 depends on 6xx && PPC_MULTIPLATFORM 3 depends on 6xx && PPC_MULTIPLATFORM
4 select PPC_UDBG_16550 4 select PPC_UDBG_16550
5 select PPC_INDIRECT_PCI 5 select PPC_PCI_CHOICE
6 select FSL_PCI if PCI
6 select FSL_SOC 7 select FSL_SOC
7 select IPIC 8 select IPIC
8 9
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile
index f331fd7dd836..ba5028e29890 100644
--- a/arch/powerpc/platforms/83xx/Makefile
+++ b/arch/powerpc/platforms/83xx/Makefile
@@ -2,7 +2,7 @@
2# Makefile for the PowerPC 83xx linux kernel. 2# Makefile for the PowerPC 83xx linux kernel.
3# 3#
4obj-y := misc.o usb.o 4obj-y := misc.o usb.o
5obj-$(CONFIG_PCI) += pci.o 5obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o
6obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o 6obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o
7obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o 7obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o
8obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o 8obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o
diff --git a/arch/powerpc/platforms/83xx/mpc831x_rdb.c b/arch/powerpc/platforms/83xx/mpc831x_rdb.c
index c4db5172b27a..a428f8d1ac80 100644
--- a/arch/powerpc/platforms/83xx/mpc831x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc831x_rdb.c
@@ -19,6 +19,7 @@
19#include <asm/time.h> 19#include <asm/time.h>
20#include <asm/ipic.h> 20#include <asm/ipic.h>
21#include <asm/udbg.h> 21#include <asm/udbg.h>
22#include <sysdev/fsl_pci.h>
22 23
23#include "mpc83xx.h" 24#include "mpc83xx.h"
24 25
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index 6dbc6eabcb02..dd4be4aee314 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -36,6 +36,7 @@
36#include <asm/prom.h> 36#include <asm/prom.h>
37#include <asm/udbg.h> 37#include <asm/udbg.h>
38#include <sysdev/fsl_soc.h> 38#include <sysdev/fsl_soc.h>
39#include <sysdev/fsl_pci.h>
39#include <asm/qe.h> 40#include <asm/qe.h>
40#include <asm/qe_ic.h> 41#include <asm/qe_ic.h>
41 42
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index e7f706b624fe..f049d692d4c8 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -27,6 +27,7 @@
27#include <asm/qe.h> 27#include <asm/qe.h>
28#include <asm/qe_ic.h> 28#include <asm/qe_ic.h>
29#include <sysdev/fsl_soc.h> 29#include <sysdev/fsl_soc.h>
30#include <sysdev/fsl_pci.h>
30 31
31#include "mpc83xx.h" 32#include "mpc83xx.h"
32 33
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c
index 50e8f632061c..7301d77a08ee 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_itx.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c
@@ -35,6 +35,7 @@
35#include <asm/prom.h> 35#include <asm/prom.h>
36#include <asm/udbg.h> 36#include <asm/udbg.h>
37#include <sysdev/fsl_soc.h> 37#include <sysdev/fsl_soc.h>
38#include <sysdev/fsl_pci.h>
38 39
39#include "mpc83xx.h" 40#include "mpc83xx.h"
40 41
diff --git a/arch/powerpc/platforms/83xx/mpc834x_mds.c b/arch/powerpc/platforms/83xx/mpc834x_mds.c
index 2b8a0a3f8557..30d509aa9f08 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_mds.c
@@ -35,6 +35,7 @@
35#include <asm/prom.h> 35#include <asm/prom.h>
36#include <asm/udbg.h> 36#include <asm/udbg.h>
37#include <sysdev/fsl_soc.h> 37#include <sysdev/fsl_soc.h>
38#include <sysdev/fsl_pci.h>
38 39
39#include "mpc83xx.h" 40#include "mpc83xx.h"
40 41
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index c2e5de60c055..75b80e836576 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -42,6 +42,7 @@
42#include <asm/prom.h> 42#include <asm/prom.h>
43#include <asm/udbg.h> 43#include <asm/udbg.h>
44#include <sysdev/fsl_soc.h> 44#include <sysdev/fsl_soc.h>
45#include <sysdev/fsl_pci.h>
45#include <asm/qe.h> 46#include <asm/qe.h>
46#include <asm/qe_ic.h> 47#include <asm/qe_ic.h>
47 48
diff --git a/arch/powerpc/platforms/83xx/mpc836x_rdk.c b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
index c10dec4bf178..a5273bb28e1b 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_rdk.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
@@ -23,6 +23,7 @@
23#include <asm/qe.h> 23#include <asm/qe.h>
24#include <asm/qe_ic.h> 24#include <asm/qe_ic.h>
25#include <sysdev/fsl_soc.h> 25#include <sysdev/fsl_soc.h>
26#include <sysdev/fsl_pci.h>
26 27
27#include "mpc83xx.h" 28#include "mpc83xx.h"
28 29
diff --git a/arch/powerpc/platforms/83xx/mpc837x_mds.c b/arch/powerpc/platforms/83xx/mpc837x_mds.c
index 64d17b0d6455..be62de23bead 100644
--- a/arch/powerpc/platforms/83xx/mpc837x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc837x_mds.c
@@ -19,6 +19,7 @@
19#include <asm/ipic.h> 19#include <asm/ipic.h>
20#include <asm/udbg.h> 20#include <asm/udbg.h>
21#include <asm/prom.h> 21#include <asm/prom.h>
22#include <sysdev/fsl_pci.h>
22 23
23#include "mpc83xx.h" 24#include "mpc83xx.h"
24 25
diff --git a/arch/powerpc/platforms/83xx/mpc837x_rdb.c b/arch/powerpc/platforms/83xx/mpc837x_rdb.c
index c00356bdb1dd..da030afa2e2c 100644
--- a/arch/powerpc/platforms/83xx/mpc837x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc837x_rdb.c
@@ -17,6 +17,7 @@
17#include <asm/time.h> 17#include <asm/time.h>
18#include <asm/ipic.h> 18#include <asm/ipic.h>
19#include <asm/udbg.h> 19#include <asm/udbg.h>
20#include <sysdev/fsl_pci.h>
20 21
21#include "mpc83xx.h" 22#include "mpc83xx.h"
22 23
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h
index 88a3b5cabb18..2a7cbabb410a 100644
--- a/arch/powerpc/platforms/83xx/mpc83xx.h
+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
@@ -26,6 +26,8 @@
26#define MPC834X_SICRL_USB1 0x20000000 26#define MPC834X_SICRL_USB1 0x20000000
27#define MPC831X_SICRL_USB_MASK 0x00000c00 27#define MPC831X_SICRL_USB_MASK 0x00000c00
28#define MPC831X_SICRL_USB_ULPI 0x00000800 28#define MPC831X_SICRL_USB_ULPI 0x00000800
29#define MPC8315_SICRL_USB_MASK 0x000000fc
30#define MPC8315_SICRL_USB_ULPI 0x00000054
29#define MPC837X_SICRL_USB_MASK 0xf0000000 31#define MPC837X_SICRL_USB_MASK 0xf0000000
30#define MPC837X_SICRL_USB_ULPI 0x50000000 32#define MPC837X_SICRL_USB_ULPI 0x50000000
31 33
@@ -34,6 +36,8 @@
34#define MPC834X_SICRH_USB_UTMI 0x00020000 36#define MPC834X_SICRH_USB_UTMI 0x00020000
35#define MPC831X_SICRH_USB_MASK 0x000000e0 37#define MPC831X_SICRH_USB_MASK 0x000000e0
36#define MPC831X_SICRH_USB_ULPI 0x000000a0 38#define MPC831X_SICRH_USB_ULPI 0x000000a0
39#define MPC8315_SICRH_USB_MASK 0x0000ff00
40#define MPC8315_SICRH_USB_ULPI 0x00000000
37 41
38/* USB Control Register */ 42/* USB Control Register */
39#define FSL_USB2_CONTROL_OFFS 0x500 43#define FSL_USB2_CONTROL_OFFS 0x500
@@ -55,7 +59,6 @@
55 * mpc83xx_* files. Mostly for use by mpc83xx_setup 59 * mpc83xx_* files. Mostly for use by mpc83xx_setup
56 */ 60 */
57 61
58extern int mpc83xx_add_bridge(struct device_node *dev);
59extern void mpc83xx_restart(char *cmd); 62extern void mpc83xx_restart(char *cmd);
60extern long mpc83xx_time_init(void); 63extern long mpc83xx_time_init(void);
61extern int mpc834x_usb_cfg(void); 64extern int mpc834x_usb_cfg(void);
diff --git a/arch/powerpc/platforms/83xx/pci.c b/arch/powerpc/platforms/83xx/pci.c
deleted file mode 100644
index 14f1080c6c9d..000000000000
--- a/arch/powerpc/platforms/83xx/pci.c
+++ /dev/null
@@ -1,91 +0,0 @@
1/*
2 * FSL SoC setup code
3 *
4 * Maintained by Kumar Gala (see MAINTAINERS for contact information)
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 */
11
12#include <linux/stddef.h>
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/errno.h>
16#include <linux/pci.h>
17#include <linux/delay.h>
18#include <linux/irq.h>
19#include <linux/module.h>
20
21#include <asm/system.h>
22#include <asm/atomic.h>
23#include <asm/io.h>
24#include <asm/pci-bridge.h>
25#include <asm/prom.h>
26#include <sysdev/fsl_soc.h>
27
28#undef DEBUG
29
30#ifdef DEBUG
31#define DBG(x...) printk(x)
32#else
33#define DBG(x...)
34#endif
35
36int __init mpc83xx_add_bridge(struct device_node *dev)
37{
38 int len;
39 struct pci_controller *hose;
40 struct resource rsrc;
41 const int *bus_range;
42 int primary = 1, has_address = 0;
43 phys_addr_t immr = get_immrbase();
44
45 DBG("Adding PCI host bridge %s\n", dev->full_name);
46
47 /* Fetch host bridge registers address */
48 has_address = (of_address_to_resource(dev, 0, &rsrc) == 0);
49
50 /* Get bus range if any */
51 bus_range = of_get_property(dev, "bus-range", &len);
52 if (bus_range == NULL || len < 2 * sizeof(int)) {
53 printk(KERN_WARNING "Can't get bus-range for %s, assume"
54 " bus 0\n", dev->full_name);
55 }
56
57 ppc_pci_flags |= PPC_PCI_REASSIGN_ALL_BUS;
58 hose = pcibios_alloc_controller(dev);
59 if (!hose)
60 return -ENOMEM;
61
62 hose->first_busno = bus_range ? bus_range[0] : 0;
63 hose->last_busno = bus_range ? bus_range[1] : 0xff;
64
65 /* MPC83xx supports up to two host controllers one at 0x8500 from immrbar
66 * the other at 0x8600, we consider the 0x8500 the primary controller
67 */
68 /* PCI 1 */
69 if ((rsrc.start & 0xfffff) == 0x8500) {
70 setup_indirect_pci(hose, immr + 0x8300, immr + 0x8304, 0);
71 }
72 /* PCI 2 */
73 if ((rsrc.start & 0xfffff) == 0x8600) {
74 setup_indirect_pci(hose, immr + 0x8380, immr + 0x8384, 0);
75 primary = 0;
76 }
77
78 printk(KERN_INFO "Found MPC83xx PCI host bridge at 0x%016llx. "
79 "Firmware bus number: %d->%d\n",
80 (unsigned long long)rsrc.start, hose->first_busno,
81 hose->last_busno);
82
83 DBG(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
84 hose, hose->cfg_addr, hose->cfg_data);
85
86 /* Interpret the "ranges" property */
87 /* This also maps the I/O region and sets isa_io/mem_base */
88 pci_process_bridge_OF_ranges(hose, dev, primary);
89
90 return 0;
91}
diff --git a/arch/powerpc/platforms/83xx/sbc834x.c b/arch/powerpc/platforms/83xx/sbc834x.c
index cf382474a83d..fc21f5c15bab 100644
--- a/arch/powerpc/platforms/83xx/sbc834x.c
+++ b/arch/powerpc/platforms/83xx/sbc834x.c
@@ -37,6 +37,7 @@
37#include <asm/prom.h> 37#include <asm/prom.h>
38#include <asm/udbg.h> 38#include <asm/udbg.h>
39#include <sysdev/fsl_soc.h> 39#include <sysdev/fsl_soc.h>
40#include <sysdev/fsl_pci.h>
40 41
41#include "mpc83xx.h" 42#include "mpc83xx.h"
42 43
diff --git a/arch/powerpc/platforms/83xx/suspend-asm.S b/arch/powerpc/platforms/83xx/suspend-asm.S
new file mode 100644
index 000000000000..1930543c98d3
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/suspend-asm.S
@@ -0,0 +1,533 @@
1/*
2 * Enter and leave deep sleep state on MPC83xx
3 *
4 * Copyright (c) 2006-2008 Freescale Semiconductor, Inc.
5 * Author: Scott Wood <scottwood@freescale.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published
9 * by the Free Software Foundation.
10 */
11
12#include <asm/page.h>
13#include <asm/ppc_asm.h>
14#include <asm/reg.h>
15#include <asm/asm-offsets.h>
16
17#define SS_MEMSAVE 0x00 /* First 8 bytes of RAM */
18#define SS_HID 0x08 /* 3 HIDs */
19#define SS_IABR 0x14 /* 2 IABRs */
20#define SS_IBCR 0x1c
21#define SS_DABR 0x20 /* 2 DABRs */
22#define SS_DBCR 0x28
23#define SS_SP 0x2c
24#define SS_SR 0x30 /* 16 segment registers */
25#define SS_R2 0x70
26#define SS_MSR 0x74
27#define SS_SDR1 0x78
28#define SS_LR 0x7c
29#define SS_SPRG 0x80 /* 4 SPRGs */
30#define SS_DBAT 0x90 /* 8 DBATs */
31#define SS_IBAT 0xd0 /* 8 IBATs */
32#define SS_TB 0x110
33#define SS_CR 0x118
34#define SS_GPREG 0x11c /* r12-r31 */
35#define STATE_SAVE_SIZE 0x16c
36
37 .section .data
38 .align 5
39
40mpc83xx_sleep_save_area:
41 .space STATE_SAVE_SIZE
42immrbase:
43 .long 0
44
45 .section .text
46 .align 5
47
48 /* r3 = physical address of IMMR */
49_GLOBAL(mpc83xx_enter_deep_sleep)
50 lis r4, immrbase@ha
51 stw r3, immrbase@l(r4)
52
53 /* The first 2 words of memory are used to communicate with the
54 * bootloader, to tell it how to resume.
55 *
56 * The first word is the magic number 0xf5153ae5, and the second
57 * is the pointer to mpc83xx_deep_resume.
58 *
59 * The original content of these two words is saved in SS_MEMSAVE.
60 */
61
62 lis r3, mpc83xx_sleep_save_area@h
63 ori r3, r3, mpc83xx_sleep_save_area@l
64
65 lis r4, KERNELBASE@h
66 lwz r5, 0(r4)
67 lwz r6, 4(r4)
68
69 stw r5, SS_MEMSAVE+0(r3)
70 stw r6, SS_MEMSAVE+4(r3)
71
72 mfspr r5, SPRN_HID0
73 mfspr r6, SPRN_HID1
74 mfspr r7, SPRN_HID2
75
76 stw r5, SS_HID+0(r3)
77 stw r6, SS_HID+4(r3)
78 stw r7, SS_HID+8(r3)
79
80 mfspr r4, SPRN_IABR
81 mfspr r5, SPRN_IABR2
82 mfspr r6, SPRN_IBCR
83 mfspr r7, SPRN_DABR
84 mfspr r8, SPRN_DABR2
85 mfspr r9, SPRN_DBCR
86
87 stw r4, SS_IABR+0(r3)
88 stw r5, SS_IABR+4(r3)
89 stw r6, SS_IBCR(r3)
90 stw r7, SS_DABR+0(r3)
91 stw r8, SS_DABR+4(r3)
92 stw r9, SS_DBCR(r3)
93
94 mfspr r4, SPRN_SPRG0
95 mfspr r5, SPRN_SPRG1
96 mfspr r6, SPRN_SPRG2
97 mfspr r7, SPRN_SPRG3
98 mfsdr1 r8
99
100 stw r4, SS_SPRG+0(r3)
101 stw r5, SS_SPRG+4(r3)
102 stw r6, SS_SPRG+8(r3)
103 stw r7, SS_SPRG+12(r3)
104 stw r8, SS_SDR1(r3)
105
106 mfspr r4, SPRN_DBAT0U
107 mfspr r5, SPRN_DBAT0L
108 mfspr r6, SPRN_DBAT1U
109 mfspr r7, SPRN_DBAT1L
110
111 stw r4, SS_DBAT+0x00(r3)
112 stw r5, SS_DBAT+0x04(r3)
113 stw r6, SS_DBAT+0x08(r3)
114 stw r7, SS_DBAT+0x0c(r3)
115
116 mfspr r4, SPRN_DBAT2U
117 mfspr r5, SPRN_DBAT2L
118 mfspr r6, SPRN_DBAT3U
119 mfspr r7, SPRN_DBAT3L
120
121 stw r4, SS_DBAT+0x10(r3)
122 stw r5, SS_DBAT+0x14(r3)
123 stw r6, SS_DBAT+0x18(r3)
124 stw r7, SS_DBAT+0x1c(r3)
125
126 mfspr r4, SPRN_DBAT4U
127 mfspr r5, SPRN_DBAT4L
128 mfspr r6, SPRN_DBAT5U
129 mfspr r7, SPRN_DBAT5L
130
131 stw r4, SS_DBAT+0x20(r3)
132 stw r5, SS_DBAT+0x24(r3)
133 stw r6, SS_DBAT+0x28(r3)
134 stw r7, SS_DBAT+0x2c(r3)
135
136 mfspr r4, SPRN_DBAT6U
137 mfspr r5, SPRN_DBAT6L
138 mfspr r6, SPRN_DBAT7U
139 mfspr r7, SPRN_DBAT7L
140
141 stw r4, SS_DBAT+0x30(r3)
142 stw r5, SS_DBAT+0x34(r3)
143 stw r6, SS_DBAT+0x38(r3)
144 stw r7, SS_DBAT+0x3c(r3)
145
146 mfspr r4, SPRN_IBAT0U
147 mfspr r5, SPRN_IBAT0L
148 mfspr r6, SPRN_IBAT1U
149 mfspr r7, SPRN_IBAT1L
150
151 stw r4, SS_IBAT+0x00(r3)
152 stw r5, SS_IBAT+0x04(r3)
153 stw r6, SS_IBAT+0x08(r3)
154 stw r7, SS_IBAT+0x0c(r3)
155
156 mfspr r4, SPRN_IBAT2U
157 mfspr r5, SPRN_IBAT2L
158 mfspr r6, SPRN_IBAT3U
159 mfspr r7, SPRN_IBAT3L
160
161 stw r4, SS_IBAT+0x10(r3)
162 stw r5, SS_IBAT+0x14(r3)
163 stw r6, SS_IBAT+0x18(r3)
164 stw r7, SS_IBAT+0x1c(r3)
165
166 mfspr r4, SPRN_IBAT4U
167 mfspr r5, SPRN_IBAT4L
168 mfspr r6, SPRN_IBAT5U
169 mfspr r7, SPRN_IBAT5L
170
171 stw r4, SS_IBAT+0x20(r3)
172 stw r5, SS_IBAT+0x24(r3)
173 stw r6, SS_IBAT+0x28(r3)
174 stw r7, SS_IBAT+0x2c(r3)
175
176 mfspr r4, SPRN_IBAT6U
177 mfspr r5, SPRN_IBAT6L
178 mfspr r6, SPRN_IBAT7U
179 mfspr r7, SPRN_IBAT7L
180
181 stw r4, SS_IBAT+0x30(r3)
182 stw r5, SS_IBAT+0x34(r3)
183 stw r6, SS_IBAT+0x38(r3)
184 stw r7, SS_IBAT+0x3c(r3)
185
186 mfmsr r4
187 mflr r5
188 mfcr r6
189
190 stw r4, SS_MSR(r3)
191 stw r5, SS_LR(r3)
192 stw r6, SS_CR(r3)
193 stw r1, SS_SP(r3)
194 stw r2, SS_R2(r3)
195
1961: mftbu r4
197 mftb r5
198 mftbu r6
199 cmpw r4, r6
200 bne 1b
201
202 stw r4, SS_TB+0(r3)
203 stw r5, SS_TB+4(r3)
204
205 stmw r12, SS_GPREG(r3)
206
207 li r4, 0
208 addi r6, r3, SS_SR-4
2091: mfsrin r5, r4
210 stwu r5, 4(r6)
211 addis r4, r4, 0x1000
212 cmpwi r4, 0
213 bne 1b
214
215 /* Disable machine checks and critical exceptions */
216 mfmsr r4
217 rlwinm r4, r4, 0, ~MSR_CE
218 rlwinm r4, r4, 0, ~MSR_ME
219 mtmsr r4
220 isync
221
222#define TMP_VIRT_IMMR 0xf0000000
223#define DEFAULT_IMMR_VALUE 0xff400000
224#define IMMRBAR_BASE 0x0000
225
226 lis r4, immrbase@ha
227 lwz r4, immrbase@l(r4)
228
229 /* Use DBAT0 to address the current IMMR space */
230
231 ori r4, r4, 0x002a
232 mtspr SPRN_DBAT0L, r4
233 lis r8, TMP_VIRT_IMMR@h
234 ori r4, r8, 0x001e /* 1 MByte accessable from Kernel Space only */
235 mtspr SPRN_DBAT0U, r4
236 isync
237
238 /* Use DBAT1 to address the original IMMR space */
239
240 lis r4, DEFAULT_IMMR_VALUE@h
241 ori r4, r4, 0x002a
242 mtspr SPRN_DBAT1L, r4
243 lis r9, (TMP_VIRT_IMMR + 0x01000000)@h
244 ori r4, r9, 0x001e /* 1 MByte accessable from Kernel Space only */
245 mtspr SPRN_DBAT1U, r4
246 isync
247
248 /* Use DBAT2 to address the beginning of RAM. This isn't done
249 * using the normal virtual mapping, because with page debugging
250 * enabled it will be read-only.
251 */
252
253 li r4, 0x0002
254 mtspr SPRN_DBAT2L, r4
255 lis r4, KERNELBASE@h
256 ori r4, r4, 0x001e /* 1 MByte accessable from Kernel Space only */
257 mtspr SPRN_DBAT2U, r4
258 isync
259
260 /* Flush the cache with our BAT, as there will be TLB misses
261 * otherwise if page debugging is enabled, and these misses
262 * will disturb the PLRU algorithm.
263 */
264
265 bl __flush_disable_L1
266
267 /* Keep the i-cache enabled, so the hack below for low-boot
268 * flash will work.
269 */
270 mfspr r3, SPRN_HID0
271 ori r3, r3, HID0_ICE
272 mtspr SPRN_HID0, r3
273 isync
274
275 lis r6, 0xf515
276 ori r6, r6, 0x3ae5
277
278 lis r7, mpc83xx_deep_resume@h
279 ori r7, r7, mpc83xx_deep_resume@l
280 tophys(r7, r7)
281
282 lis r5, KERNELBASE@h
283 stw r6, 0(r5)
284 stw r7, 4(r5)
285
286 /* Reset BARs */
287
288 li r4, 0
289 stw r4, 0x0024(r8)
290 stw r4, 0x002c(r8)
291 stw r4, 0x0034(r8)
292 stw r4, 0x003c(r8)
293 stw r4, 0x0064(r8)
294 stw r4, 0x006c(r8)
295
296 /* Rev 1 of the 8313 has problems with wakeup events that are
297 * pending during the transition to deep sleep state (such as if
298 * the PCI host sets the state to D3 and then D0 in rapid
299 * succession). This check shrinks the race window somewhat.
300 *
301 * See erratum PCI23, though the problem is not limited
302 * to PCI.
303 */
304
305 lwz r3, 0x0b04(r8)
306 andi. r3, r3, 1
307 bne- mpc83xx_deep_resume
308
309 /* Move IMMR back to the default location, following the
310 * procedure specified in the MPC8313 manual.
311 */
312 lwz r4, IMMRBAR_BASE(r8)
313 isync
314 lis r4, DEFAULT_IMMR_VALUE@h
315 stw r4, IMMRBAR_BASE(r8)
316 lis r4, KERNELBASE@h
317 lwz r4, 0(r4)
318 isync
319 lwz r4, IMMRBAR_BASE(r9)
320 mr r8, r9
321 isync
322
323 /* Check the Reset Configuration Word to see whether flash needs
324 * to be mapped at a low address or a high address.
325 */
326
327 lwz r4, 0x0904(r8)
328 andis. r4, r4, 0x0400
329 li r4, 0
330 beq boot_low
331 lis r4, 0xff80
332boot_low:
333 stw r4, 0x0020(r8)
334 lis r7, 0x8000
335 ori r7, r7, 0x0016
336
337 mfspr r5, SPRN_HID0
338 rlwinm r5, r5, 0, ~(HID0_DOZE | HID0_NAP)
339 oris r5, r5, HID0_SLEEP@h
340 mtspr SPRN_HID0, r5
341 isync
342
343 mfmsr r5
344 oris r5, r5, MSR_POW@h
345
346 /* Enable the flash mapping at the appropriate address. This
347 * mapping will override the RAM mapping if booting low, so there's
348 * no need to disable the latter. This must be done inside the same
349 * cache line as setting MSR_POW, so that no instruction fetches
350 * from RAM happen after the flash mapping is turned on.
351 */
352
353 .align 5
354 stw r7, 0x0024(r8)
355 sync
356 isync
357 mtmsr r5
358 isync
3591: b 1b
360
361mpc83xx_deep_resume:
362 lis r4, 1f@h
363 ori r4, r4, 1f@l
364 tophys(r4, r4)
365 mtsrr0 r4
366
367 mfmsr r4
368 rlwinm r4, r4, 0, ~(MSR_IR | MSR_DR)
369 mtsrr1 r4
370
371 rfi
372
3731: tlbia
374 bl __inval_enable_L1
375
376 lis r3, mpc83xx_sleep_save_area@h
377 ori r3, r3, mpc83xx_sleep_save_area@l
378 tophys(r3, r3)
379
380 lwz r5, SS_MEMSAVE+0(r3)
381 lwz r6, SS_MEMSAVE+4(r3)
382
383 stw r5, 0(0)
384 stw r6, 4(0)
385
386 lwz r5, SS_HID+0(r3)
387 lwz r6, SS_HID+4(r3)
388 lwz r7, SS_HID+8(r3)
389
390 mtspr SPRN_HID0, r5
391 mtspr SPRN_HID1, r6
392 mtspr SPRN_HID2, r7
393
394 lwz r4, SS_IABR+0(r3)
395 lwz r5, SS_IABR+4(r3)
396 lwz r6, SS_IBCR(r3)
397 lwz r7, SS_DABR+0(r3)
398 lwz r8, SS_DABR+4(r3)
399 lwz r9, SS_DBCR(r3)
400
401 mtspr SPRN_IABR, r4
402 mtspr SPRN_IABR2, r5
403 mtspr SPRN_IBCR, r6
404 mtspr SPRN_DABR, r7
405 mtspr SPRN_DABR2, r8
406 mtspr SPRN_DBCR, r9
407
408 li r4, 0
409 addi r6, r3, SS_SR-4
4101: lwzu r5, 4(r6)
411 mtsrin r5, r4
412 addis r4, r4, 0x1000
413 cmpwi r4, 0
414 bne 1b
415
416 lwz r4, SS_DBAT+0x00(r3)
417 lwz r5, SS_DBAT+0x04(r3)
418 lwz r6, SS_DBAT+0x08(r3)
419 lwz r7, SS_DBAT+0x0c(r3)
420
421 mtspr SPRN_DBAT0U, r4
422 mtspr SPRN_DBAT0L, r5
423 mtspr SPRN_DBAT1U, r6
424 mtspr SPRN_DBAT1L, r7
425
426 lwz r4, SS_DBAT+0x10(r3)
427 lwz r5, SS_DBAT+0x14(r3)
428 lwz r6, SS_DBAT+0x18(r3)
429 lwz r7, SS_DBAT+0x1c(r3)
430
431 mtspr SPRN_DBAT2U, r4
432 mtspr SPRN_DBAT2L, r5
433 mtspr SPRN_DBAT3U, r6
434 mtspr SPRN_DBAT3L, r7
435
436 lwz r4, SS_DBAT+0x20(r3)
437 lwz r5, SS_DBAT+0x24(r3)
438 lwz r6, SS_DBAT+0x28(r3)
439 lwz r7, SS_DBAT+0x2c(r3)
440
441 mtspr SPRN_DBAT4U, r4
442 mtspr SPRN_DBAT4L, r5
443 mtspr SPRN_DBAT5U, r6
444 mtspr SPRN_DBAT5L, r7
445
446 lwz r4, SS_DBAT+0x30(r3)
447 lwz r5, SS_DBAT+0x34(r3)
448 lwz r6, SS_DBAT+0x38(r3)
449 lwz r7, SS_DBAT+0x3c(r3)
450
451 mtspr SPRN_DBAT6U, r4
452 mtspr SPRN_DBAT6L, r5
453 mtspr SPRN_DBAT7U, r6
454 mtspr SPRN_DBAT7L, r7
455
456 lwz r4, SS_IBAT+0x00(r3)
457 lwz r5, SS_IBAT+0x04(r3)
458 lwz r6, SS_IBAT+0x08(r3)
459 lwz r7, SS_IBAT+0x0c(r3)
460
461 mtspr SPRN_IBAT0U, r4
462 mtspr SPRN_IBAT0L, r5
463 mtspr SPRN_IBAT1U, r6
464 mtspr SPRN_IBAT1L, r7
465
466 lwz r4, SS_IBAT+0x10(r3)
467 lwz r5, SS_IBAT+0x14(r3)
468 lwz r6, SS_IBAT+0x18(r3)
469 lwz r7, SS_IBAT+0x1c(r3)
470
471 mtspr SPRN_IBAT2U, r4
472 mtspr SPRN_IBAT2L, r5
473 mtspr SPRN_IBAT3U, r6
474 mtspr SPRN_IBAT3L, r7
475
476 lwz r4, SS_IBAT+0x20(r3)
477 lwz r5, SS_IBAT+0x24(r3)
478 lwz r6, SS_IBAT+0x28(r3)
479 lwz r7, SS_IBAT+0x2c(r3)
480
481 mtspr SPRN_IBAT4U, r4
482 mtspr SPRN_IBAT4L, r5
483 mtspr SPRN_IBAT5U, r6
484 mtspr SPRN_IBAT5L, r7
485
486 lwz r4, SS_IBAT+0x30(r3)
487 lwz r5, SS_IBAT+0x34(r3)
488 lwz r6, SS_IBAT+0x38(r3)
489 lwz r7, SS_IBAT+0x3c(r3)
490
491 mtspr SPRN_IBAT6U, r4
492 mtspr SPRN_IBAT6L, r5
493 mtspr SPRN_IBAT7U, r6
494 mtspr SPRN_IBAT7L, r7
495
496 lwz r4, SS_SPRG+0(r3)
497 lwz r5, SS_SPRG+4(r3)
498 lwz r6, SS_SPRG+8(r3)
499 lwz r7, SS_SPRG+12(r3)
500 lwz r8, SS_SDR1(r3)
501
502 mtspr SPRN_SPRG0, r4
503 mtspr SPRN_SPRG1, r5
504 mtspr SPRN_SPRG2, r6
505 mtspr SPRN_SPRG3, r7
506 mtsdr1 r8
507
508 lwz r4, SS_MSR(r3)
509 lwz r5, SS_LR(r3)
510 lwz r6, SS_CR(r3)
511 lwz r1, SS_SP(r3)
512 lwz r2, SS_R2(r3)
513
514 mtsrr1 r4
515 mtsrr0 r5
516 mtcr r6
517
518 li r4, 0
519 mtspr SPRN_TBWL, r4
520
521 lwz r4, SS_TB+0(r3)
522 lwz r5, SS_TB+4(r3)
523
524 mtspr SPRN_TBWU, r4
525 mtspr SPRN_TBWL, r5
526
527 lmw r12, SS_GPREG(r3)
528
529 /* Kick decrementer */
530 li r0, 1
531 mtdec r0
532
533 rfi
diff --git a/arch/powerpc/platforms/83xx/suspend.c b/arch/powerpc/platforms/83xx/suspend.c
new file mode 100644
index 000000000000..08e65fc8b98c
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/suspend.c
@@ -0,0 +1,388 @@
1/*
2 * MPC83xx suspend support
3 *
4 * Author: Scott Wood <scottwood@freescale.com>
5 *
6 * Copyright (c) 2006-2007 Freescale Semiconductor, Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published
10 * by the Free Software Foundation.
11 */
12
13#include <linux/init.h>
14#include <linux/pm.h>
15#include <linux/types.h>
16#include <linux/ioport.h>
17#include <linux/interrupt.h>
18#include <linux/wait.h>
19#include <linux/kthread.h>
20#include <linux/freezer.h>
21#include <linux/suspend.h>
22#include <linux/fsl_devices.h>
23#include <linux/of_platform.h>
24
25#include <asm/reg.h>
26#include <asm/io.h>
27#include <asm/time.h>
28#include <asm/mpc6xx.h>
29
30#include <sysdev/fsl_soc.h>
31
32#define PMCCR1_NEXT_STATE 0x0C /* Next state for power management */
33#define PMCCR1_NEXT_STATE_SHIFT 2
34#define PMCCR1_CURR_STATE 0x03 /* Current state for power management*/
35#define IMMR_RCW_OFFSET 0x900
36#define RCW_PCI_HOST 0x80000000
37
38void mpc83xx_enter_deep_sleep(phys_addr_t immrbase);
39
40struct mpc83xx_pmc {
41 u32 config;
42#define PMCCR_DLPEN 2 /* DDR SDRAM low power enable */
43#define PMCCR_SLPEN 1 /* System low power enable */
44
45 u32 event;
46 u32 mask;
47/* All but PMCI are deep-sleep only */
48#define PMCER_GPIO 0x100
49#define PMCER_PCI 0x080
50#define PMCER_USB 0x040
51#define PMCER_ETSEC1 0x020
52#define PMCER_ETSEC2 0x010
53#define PMCER_TIMER 0x008
54#define PMCER_INT1 0x004
55#define PMCER_INT2 0x002
56#define PMCER_PMCI 0x001
57#define PMCER_ALL 0x1FF
58
59 /* deep-sleep only */
60 u32 config1;
61#define PMCCR1_USE_STATE 0x80000000
62#define PMCCR1_PME_EN 0x00000080
63#define PMCCR1_ASSERT_PME 0x00000040
64#define PMCCR1_POWER_OFF 0x00000020
65
66 /* deep-sleep only */
67 u32 config2;
68};
69
70struct mpc83xx_rcw {
71 u32 rcwlr;
72 u32 rcwhr;
73};
74
75struct mpc83xx_clock {
76 u32 spmr;
77 u32 occr;
78 u32 sccr;
79};
80
81struct pmc_type {
82 int has_deep_sleep;
83};
84
85static struct of_device *pmc_dev;
86static int has_deep_sleep, deep_sleeping;
87static int pmc_irq;
88static struct mpc83xx_pmc __iomem *pmc_regs;
89static struct mpc83xx_clock __iomem *clock_regs;
90static int is_pci_agent, wake_from_pci;
91static phys_addr_t immrbase;
92static int pci_pm_state;
93static DECLARE_WAIT_QUEUE_HEAD(agent_wq);
94
95int fsl_deep_sleep(void)
96{
97 return deep_sleeping;
98}
99
100static int mpc83xx_change_state(void)
101{
102 u32 curr_state;
103 u32 reg_cfg1 = in_be32(&pmc_regs->config1);
104
105 if (is_pci_agent) {
106 pci_pm_state = (reg_cfg1 & PMCCR1_NEXT_STATE) >>
107 PMCCR1_NEXT_STATE_SHIFT;
108 curr_state = reg_cfg1 & PMCCR1_CURR_STATE;
109
110 if (curr_state != pci_pm_state) {
111 reg_cfg1 &= ~PMCCR1_CURR_STATE;
112 reg_cfg1 |= pci_pm_state;
113 out_be32(&pmc_regs->config1, reg_cfg1);
114
115 wake_up(&agent_wq);
116 return 1;
117 }
118 }
119
120 return 0;
121}
122
123static irqreturn_t pmc_irq_handler(int irq, void *dev_id)
124{
125 u32 event = in_be32(&pmc_regs->event);
126 int ret = IRQ_NONE;
127
128 if (mpc83xx_change_state())
129 ret = IRQ_HANDLED;
130
131 if (event) {
132 out_be32(&pmc_regs->event, event);
133 ret = IRQ_HANDLED;
134 }
135
136 return ret;
137}
138
139static int mpc83xx_suspend_enter(suspend_state_t state)
140{
141 int ret = -EAGAIN;
142
143 /* Don't go to sleep if there's a race where pci_pm_state changes
144 * between the agent thread checking it and the PM code disabling
145 * interrupts.
146 */
147 if (wake_from_pci) {
148 if (pci_pm_state != (deep_sleeping ? 3 : 2))
149 goto out;
150
151 out_be32(&pmc_regs->config1,
152 in_be32(&pmc_regs->config1) | PMCCR1_PME_EN);
153 }
154
155 /* Put the system into low-power mode and the RAM
156 * into self-refresh mode once the core goes to
157 * sleep.
158 */
159
160 out_be32(&pmc_regs->config, PMCCR_SLPEN | PMCCR_DLPEN);
161
162 /* If it has deep sleep (i.e. it's an 831x or compatible),
163 * disable power to the core upon entering sleep mode. This will
164 * require going through the boot firmware upon a wakeup event.
165 */
166
167 if (deep_sleeping) {
168 out_be32(&pmc_regs->mask, PMCER_ALL);
169
170 out_be32(&pmc_regs->config1,
171 in_be32(&pmc_regs->config1) | PMCCR1_POWER_OFF);
172
173 enable_kernel_fp();
174
175 mpc83xx_enter_deep_sleep(immrbase);
176
177 out_be32(&pmc_regs->config1,
178 in_be32(&pmc_regs->config1) & ~PMCCR1_POWER_OFF);
179
180 out_be32(&pmc_regs->mask, PMCER_PMCI);
181 } else {
182 out_be32(&pmc_regs->mask, PMCER_PMCI);
183
184 mpc6xx_enter_standby();
185 }
186
187 ret = 0;
188
189out:
190 out_be32(&pmc_regs->config1,
191 in_be32(&pmc_regs->config1) & ~PMCCR1_PME_EN);
192
193 return ret;
194}
195
196static void mpc83xx_suspend_finish(void)
197{
198 deep_sleeping = 0;
199}
200
201static int mpc83xx_suspend_valid(suspend_state_t state)
202{
203 return state == PM_SUSPEND_STANDBY || state == PM_SUSPEND_MEM;
204}
205
206static int mpc83xx_suspend_begin(suspend_state_t state)
207{
208 switch (state) {
209 case PM_SUSPEND_STANDBY:
210 deep_sleeping = 0;
211 return 0;
212
213 case PM_SUSPEND_MEM:
214 if (has_deep_sleep)
215 deep_sleeping = 1;
216
217 return 0;
218
219 default:
220 return -EINVAL;
221 }
222}
223
224static int agent_thread_fn(void *data)
225{
226 while (1) {
227 wait_event_interruptible(agent_wq, pci_pm_state >= 2);
228 try_to_freeze();
229
230 if (signal_pending(current) || pci_pm_state < 2)
231 continue;
232
233 /* With a preemptible kernel (or SMP), this could race with
234 * a userspace-driven suspend request. It's probably best
235 * to avoid mixing the two with such a configuration (or
236 * else fix it by adding a mutex to state_store that we can
237 * synchronize with).
238 */
239
240 wake_from_pci = 1;
241
242 pm_suspend(pci_pm_state == 3 ? PM_SUSPEND_MEM :
243 PM_SUSPEND_STANDBY);
244
245 wake_from_pci = 0;
246 }
247
248 return 0;
249}
250
251static void mpc83xx_set_agent(void)
252{
253 out_be32(&pmc_regs->config1, PMCCR1_USE_STATE);
254 out_be32(&pmc_regs->mask, PMCER_PMCI);
255
256 kthread_run(agent_thread_fn, NULL, "PCI power mgt");
257}
258
259static int mpc83xx_is_pci_agent(void)
260{
261 struct mpc83xx_rcw __iomem *rcw_regs;
262 int ret;
263
264 rcw_regs = ioremap(get_immrbase() + IMMR_RCW_OFFSET,
265 sizeof(struct mpc83xx_rcw));
266
267 if (!rcw_regs)
268 return -ENOMEM;
269
270 ret = !(in_be32(&rcw_regs->rcwhr) & RCW_PCI_HOST);
271
272 iounmap(rcw_regs);
273 return ret;
274}
275
276static struct platform_suspend_ops mpc83xx_suspend_ops = {
277 .valid = mpc83xx_suspend_valid,
278 .begin = mpc83xx_suspend_begin,
279 .enter = mpc83xx_suspend_enter,
280 .finish = mpc83xx_suspend_finish,
281};
282
283static int pmc_probe(struct of_device *ofdev,
284 const struct of_device_id *match)
285{
286 struct device_node *np = ofdev->node;
287 struct resource res;
288 struct pmc_type *type = match->data;
289 int ret = 0;
290
291 if (!of_device_is_available(np))
292 return -ENODEV;
293
294 has_deep_sleep = type->has_deep_sleep;
295 immrbase = get_immrbase();
296 pmc_dev = ofdev;
297
298 is_pci_agent = mpc83xx_is_pci_agent();
299 if (is_pci_agent < 0)
300 return is_pci_agent;
301
302 ret = of_address_to_resource(np, 0, &res);
303 if (ret)
304 return -ENODEV;
305
306 pmc_irq = irq_of_parse_and_map(np, 0);
307 if (pmc_irq != NO_IRQ) {
308 ret = request_irq(pmc_irq, pmc_irq_handler, IRQF_SHARED,
309 "pmc", ofdev);
310
311 if (ret)
312 return -EBUSY;
313 }
314
315 pmc_regs = ioremap(res.start, sizeof(struct mpc83xx_pmc));
316
317 if (!pmc_regs) {
318 ret = -ENOMEM;
319 goto out;
320 }
321
322 ret = of_address_to_resource(np, 1, &res);
323 if (ret) {
324 ret = -ENODEV;
325 goto out_pmc;
326 }
327
328 clock_regs = ioremap(res.start, sizeof(struct mpc83xx_pmc));
329
330 if (!clock_regs) {
331 ret = -ENOMEM;
332 goto out_pmc;
333 }
334
335 if (is_pci_agent)
336 mpc83xx_set_agent();
337
338 suspend_set_ops(&mpc83xx_suspend_ops);
339 return 0;
340
341out_pmc:
342 iounmap(pmc_regs);
343out:
344 if (pmc_irq != NO_IRQ)
345 free_irq(pmc_irq, ofdev);
346
347 return ret;
348}
349
350static int pmc_remove(struct of_device *ofdev)
351{
352 return -EPERM;
353};
354
355static struct pmc_type pmc_types[] = {
356 {
357 .has_deep_sleep = 1,
358 },
359 {
360 .has_deep_sleep = 0,
361 }
362};
363
364static struct of_device_id pmc_match[] = {
365 {
366 .compatible = "fsl,mpc8313-pmc",
367 .data = &pmc_types[0],
368 },
369 {
370 .compatible = "fsl,mpc8349-pmc",
371 .data = &pmc_types[1],
372 },
373 {}
374};
375
376static struct of_platform_driver pmc_driver = {
377 .name = "mpc83xx-pmc",
378 .match_table = pmc_match,
379 .probe = pmc_probe,
380 .remove = pmc_remove
381};
382
383static int pmc_init(void)
384{
385 return of_register_platform_driver(&pmc_driver);
386}
387
388module_init(pmc_init);
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index 64bcf0a33c71..cc99c280aad9 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -137,15 +137,21 @@ int mpc831x_usb_cfg(void)
137 137
138 /* Configure pin mux for ULPI. There is no pin mux for UTMI */ 138 /* Configure pin mux for ULPI. There is no pin mux for UTMI */
139 if (prop && !strcmp(prop, "ulpi")) { 139 if (prop && !strcmp(prop, "ulpi")) {
140 temp = in_be32(immap + MPC83XX_SICRL_OFFS); 140 if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) {
141 temp &= ~MPC831X_SICRL_USB_MASK; 141 clrsetbits_be32(immap + MPC83XX_SICRL_OFFS,
142 temp |= MPC831X_SICRL_USB_ULPI; 142 MPC8315_SICRL_USB_MASK,
143 out_be32(immap + MPC83XX_SICRL_OFFS, temp); 143 MPC8315_SICRL_USB_ULPI);
144 144 clrsetbits_be32(immap + MPC83XX_SICRH_OFFS,
145 temp = in_be32(immap + MPC83XX_SICRH_OFFS); 145 MPC8315_SICRH_USB_MASK,
146 temp &= ~MPC831X_SICRH_USB_MASK; 146 MPC8315_SICRH_USB_ULPI);
147 temp |= MPC831X_SICRH_USB_ULPI; 147 } else {
148 out_be32(immap + MPC83XX_SICRH_OFFS, temp); 148 clrsetbits_be32(immap + MPC83XX_SICRL_OFFS,
149 MPC831X_SICRL_USB_MASK,
150 MPC831X_SICRL_USB_ULPI);
151 clrsetbits_be32(immap + MPC83XX_SICRH_OFFS,
152 MPC831X_SICRH_USB_MASK,
153 MPC831X_SICRH_USB_ULPI);
154 }
149 } 155 }
150 156
151 iounmap(immap); 157 iounmap(immap);
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig
index cebea5cadbc1..291675b0097a 100644
--- a/arch/powerpc/platforms/85xx/Kconfig
+++ b/arch/powerpc/platforms/85xx/Kconfig
@@ -2,8 +2,8 @@ menuconfig MPC85xx
2 bool "Machine Type" 2 bool "Machine Type"
3 depends on PPC_85xx 3 depends on PPC_85xx
4 select PPC_UDBG_16550 4 select PPC_UDBG_16550
5 select PPC_INDIRECT_PCI if PCI
6 select MPIC 5 select MPIC
6 select PPC_PCI_CHOICE
7 select FSL_PCI if PCI 7 select FSL_PCI if PCI
8 select SERIAL_8250_SHARE_IRQ if SERIAL_8250 8 select SERIAL_8250_SHARE_IRQ if SERIAL_8250
9 default y 9 default y
@@ -86,7 +86,6 @@ config TQM8548
86 help 86 help
87 This option enables support for the TQ Components TQM8548 board. 87 This option enables support for the TQ Components TQM8548 board.
88 select DEFAULT_UIMAGE 88 select DEFAULT_UIMAGE
89 select PPC_CPM_NEW_BINDING
90 select TQM85xx 89 select TQM85xx
91 90
92config TQM8555 91config TQM8555
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index 25f41cd2d33a..00c535806647 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -115,7 +115,6 @@ void __init mpc85xx_ds_pic_init(void)
115 115
116#ifdef CONFIG_PCI 116#ifdef CONFIG_PCI
117static int primary_phb_addr; 117static int primary_phb_addr;
118extern int uses_fsl_uli_m1575;
119extern int uli_exclude_device(struct pci_controller *hose, 118extern int uli_exclude_device(struct pci_controller *hose,
120 u_char bus, u_char devfn); 119 u_char bus, u_char devfn);
121 120
@@ -161,7 +160,6 @@ static void __init mpc85xx_ds_setup_arch(void)
161 } 160 }
162 } 161 }
163 162
164 uses_fsl_uli_m1575 = 1;
165 ppc_md.pci_exclude_device = mpc85xx_exclude_device; 163 ppc_md.pci_exclude_device = mpc85xx_exclude_device;
166#endif 164#endif
167 165
diff --git a/arch/powerpc/platforms/86xx/Kconfig b/arch/powerpc/platforms/86xx/Kconfig
index 80a81e02bb55..9355a5269431 100644
--- a/arch/powerpc/platforms/86xx/Kconfig
+++ b/arch/powerpc/platforms/86xx/Kconfig
@@ -27,6 +27,7 @@ config SBC8641D
27config MPC8610_HPCD 27config MPC8610_HPCD
28 bool "Freescale MPC8610 HPCD" 28 bool "Freescale MPC8610 HPCD"
29 select DEFAULT_UIMAGE 29 select DEFAULT_UIMAGE
30 select FSL_ULI1575
30 help 31 help
31 This option enables support for the MPC8610 HPCD board. 32 This option enables support for the MPC8610 HPCD board.
32 33
@@ -34,6 +35,7 @@ endif
34 35
35config MPC8641 36config MPC8641
36 bool 37 bool
38 select PPC_PCI_CHOICE
37 select FSL_PCI if PCI 39 select FSL_PCI if PCI
38 select PPC_UDBG_16550 40 select PPC_UDBG_16550
39 select MPIC 41 select MPIC
@@ -41,6 +43,7 @@ config MPC8641
41 43
42config MPC8610 44config MPC8610
43 bool 45 bool
46 select PPC_PCI_CHOICE
44 select FSL_PCI if PCI 47 select FSL_PCI if PCI
45 select PPC_UDBG_16550 48 select PPC_UDBG_16550
46 select MPIC 49 select MPIC
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 30725302884a..5eedb710896e 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -58,93 +58,6 @@ static int __init mpc8610_declare_of_platform_devices(void)
58} 58}
59machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices); 59machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices);
60 60
61#ifdef CONFIG_PCI
62static void __devinit quirk_uli1575(struct pci_dev *dev)
63{
64 u32 temp32;
65
66 /* Disable INTx */
67 pci_read_config_dword(dev, 0x48, &temp32);
68 pci_write_config_dword(dev, 0x48, (temp32 | 1<<26));
69
70 /* Enable sideband interrupt */
71 pci_read_config_dword(dev, 0x90, &temp32);
72 pci_write_config_dword(dev, 0x90, (temp32 | 1<<22));
73}
74
75static void __devinit quirk_uli5288(struct pci_dev *dev)
76{
77 unsigned char c;
78 unsigned short temp;
79
80 /* Interrupt Disable, Needed when SATA disabled */
81 pci_read_config_word(dev, PCI_COMMAND, &temp);
82 temp |= 1<<10;
83 pci_write_config_word(dev, PCI_COMMAND, temp);
84
85 pci_read_config_byte(dev, 0x83, &c);
86 c |= 0x80;
87 pci_write_config_byte(dev, 0x83, c);
88
89 pci_write_config_byte(dev, PCI_CLASS_PROG, 0x01);
90 pci_write_config_byte(dev, PCI_CLASS_DEVICE, 0x06);
91
92 pci_read_config_byte(dev, 0x83, &c);
93 c &= 0x7f;
94 pci_write_config_byte(dev, 0x83, c);
95}
96
97/*
98 * Since 8259PIC was disabled on the board, the IDE device can not
99 * use the legacy IRQ, we need to let the IDE device work under
100 * native mode and use the interrupt line like other PCI devices.
101 * IRQ14 is a sideband interrupt from IDE device to CPU and we use this
102 * as the interrupt for IDE device.
103 */
104static void __devinit quirk_uli5229(struct pci_dev *dev)
105{
106 unsigned char c;
107
108 pci_read_config_byte(dev, 0x4b, &c);
109 c |= 0x10;
110 pci_write_config_byte(dev, 0x4b, c);
111}
112
113/*
114 * SATA interrupt pin bug fix
115 * There's a chip bug for 5288, The interrupt pin should be 2,
116 * not the read only value 1, So it use INTB#, not INTA# which
117 * actually used by the IDE device 5229.
118 * As of this bug, during the PCI initialization, 5288 read the
119 * irq of IDE device from the device tree, this function fix this
120 * bug by re-assigning a correct irq to 5288.
121 *
122 */
123static void __devinit final_uli5288(struct pci_dev *dev)
124{
125 struct pci_controller *hose = pci_bus_to_host(dev->bus);
126 struct device_node *hosenode = hose ? hose->dn : NULL;
127 struct of_irq oirq;
128 int virq, pin = 2;
129 u32 laddr[3];
130
131 if (!hosenode)
132 return;
133
134 laddr[0] = (hose->first_busno << 16) | (PCI_DEVFN(31, 0) << 8);
135 laddr[1] = laddr[2] = 0;
136 of_irq_map_raw(hosenode, &pin, 1, laddr, &oirq);
137 virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
138 oirq.size);
139 dev->irq = virq;
140}
141
142DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x1575, quirk_uli1575);
143DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5288, quirk_uli5288);
144DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229);
145DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5288, final_uli5288);
146#endif /* CONFIG_PCI */
147
148#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE) 61#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
149 62
150static u32 get_busfreq(void) 63static u32 get_busfreq(void)
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index 7916599c9126..f712d9c0991b 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -45,7 +45,6 @@
45#endif 45#endif
46 46
47#ifdef CONFIG_PCI 47#ifdef CONFIG_PCI
48extern int uses_fsl_uli_m1575;
49extern int uli_exclude_device(struct pci_controller *hose, 48extern int uli_exclude_device(struct pci_controller *hose,
50 u_char bus, u_char devfn); 49 u_char bus, u_char devfn);
51 50
@@ -87,7 +86,6 @@ mpc86xx_hpcn_setup_arch(void)
87 fsl_add_bridge(np, 0); 86 fsl_add_bridge(np, 0);
88 } 87 }
89 88
90 uses_fsl_uli_m1575 = 1;
91 ppc_md.pci_exclude_device = mpc86xx_exclude_device; 89 ppc_md.pci_exclude_device = mpc86xx_exclude_device;
92 90
93#endif 91#endif
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 690c1f46e698..1d0968775c0a 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -253,17 +253,13 @@ config CPM2
253 depends on MPC85xx || 8260 253 depends on MPC85xx || 8260
254 select CPM 254 select CPM
255 select PPC_LIB_RHEAP 255 select PPC_LIB_RHEAP
256 select PPC_PCI_CHOICE
256 help 257 help
257 The CPM2 (Communications Processor Module) is a coprocessor on 258 The CPM2 (Communications Processor Module) is a coprocessor on
258 embedded CPUs made by Freescale. Selecting this option means that 259 embedded CPUs made by Freescale. Selecting this option means that
259 you wish to build a kernel for a machine with a CPM2 coprocessor 260 you wish to build a kernel for a machine with a CPM2 coprocessor
260 on it (826x, 827x, 8560). 261 on it (826x, 827x, 8560).
261 262
262config PPC_CPM_NEW_BINDING
263 bool
264 depends on CPM1 || CPM2
265 default y
266
267config AXON_RAM 263config AXON_RAM
268 tristate "Axon DDR2 memory device driver" 264 tristate "Axon DDR2 memory device driver"
269 depends on PPC_IBM_CELL_BLADE 265 depends on PPC_IBM_CELL_BLADE
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 5bc4b611ff88..7f6512733862 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -42,12 +42,14 @@ config 40x
42 select PPC_DCR_NATIVE 42 select PPC_DCR_NATIVE
43 select PPC_UDBG_16550 43 select PPC_UDBG_16550
44 select 4xx_SOC 44 select 4xx_SOC
45 select PPC_PCI_CHOICE
45 46
46config 44x 47config 44x
47 bool "AMCC 44x" 48 bool "AMCC 44x"
48 select PPC_DCR_NATIVE 49 select PPC_DCR_NATIVE
49 select PPC_UDBG_16550 50 select PPC_UDBG_16550
50 select 4xx_SOC 51 select 4xx_SOC
52 select PPC_PCI_CHOICE
51 53
52config E200 54config E200
53 bool "Freescale e200" 55 bool "Freescale e200"
@@ -84,9 +86,6 @@ config TUNE_CELL
84 machines. When building a kernel that is supposed to run only 86 machines. When building a kernel that is supposed to run only
85 on Cell, you should also select the POWER4_ONLY option. 87 on Cell, you should also select the POWER4_ONLY option.
86 88
87config 6xx
88 bool
89
90# this is temp to handle compat with arch=ppc 89# this is temp to handle compat with arch=ppc
91config 8xx 90config 8xx
92 bool 91 bool
diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig
index 3959fcfe731c..c14d7d8d96c8 100644
--- a/arch/powerpc/platforms/cell/Kconfig
+++ b/arch/powerpc/platforms/cell/Kconfig
@@ -83,6 +83,22 @@ config CBE_RAS
83 depends on PPC_CELL_NATIVE 83 depends on PPC_CELL_NATIVE
84 default y 84 default y
85 85
86config PPC_IBM_CELL_RESETBUTTON
87 bool "IBM Cell Blade Pinhole reset button"
88 depends on CBE_RAS && PPC_IBM_CELL_BLADE
89 default y
90 help
91 Support Pinhole Resetbutton on IBM Cell blades.
92 This adds a method to trigger system reset via front panel pinhole button.
93
94config PPC_IBM_CELL_POWERBUTTON
95 tristate "IBM Cell Blade power button"
96 depends on PPC_IBM_CELL_BLADE && PPC_PMI && INPUT_EVDEV
97 default y
98 help
99 Support Powerbutton on IBM Cell blades.
100 This will enable the powerbutton as an input device.
101
86config CBE_THERM 102config CBE_THERM
87 tristate "CBE thermal support" 103 tristate "CBE thermal support"
88 default m 104 default m
@@ -107,6 +123,15 @@ config CBE_CPUFREQ_PMI
107 processor will not only be able to run at lower speed, 123 processor will not only be able to run at lower speed,
108 but also at lower core voltage. 124 but also at lower core voltage.
109 125
126config CBE_CPUFREQ_SPU_GOVERNOR
127 tristate "CBE frequency scaling based on SPU usage"
128 depends on SPU_FS && CPU_FREQ
129 default m
130 help
131 This governor checks for spu usage to adjust the cpu frequency.
132 If no spu is running on a given cpu, that cpu will be throttled to
133 the minimal possible frequency.
134
110endmenu 135endmenu
111 136
112config OPROFILE_CELL 137config OPROFILE_CELL
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile
index c2a7e4e5ddf9..7fd830872c43 100644
--- a/arch/powerpc/platforms/cell/Makefile
+++ b/arch/powerpc/platforms/cell/Makefile
@@ -8,6 +8,9 @@ obj-$(CONFIG_CBE_THERM) += cbe_thermal.o
8obj-$(CONFIG_CBE_CPUFREQ_PMI) += cbe_cpufreq_pmi.o 8obj-$(CONFIG_CBE_CPUFREQ_PMI) += cbe_cpufreq_pmi.o
9obj-$(CONFIG_CBE_CPUFREQ) += cbe-cpufreq.o 9obj-$(CONFIG_CBE_CPUFREQ) += cbe-cpufreq.o
10cbe-cpufreq-y += cbe_cpufreq_pervasive.o cbe_cpufreq.o 10cbe-cpufreq-y += cbe_cpufreq_pervasive.o cbe_cpufreq.o
11obj-$(CONFIG_CBE_CPUFREQ_SPU_GOVERNOR) += cpufreq_spudemand.o
12
13obj-$(CONFIG_PPC_IBM_CELL_POWERBUTTON) += cbe_powerbutton.o
11 14
12ifeq ($(CONFIG_SMP),y) 15ifeq ($(CONFIG_SMP),y)
13obj-$(CONFIG_PPC_CELL_NATIVE) += smp.o 16obj-$(CONFIG_PPC_CELL_NATIVE) += smp.o
diff --git a/arch/powerpc/platforms/cell/cbe_powerbutton.c b/arch/powerpc/platforms/cell/cbe_powerbutton.c
new file mode 100644
index 000000000000..dcddaa5fcb66
--- /dev/null
+++ b/arch/powerpc/platforms/cell/cbe_powerbutton.c
@@ -0,0 +1,117 @@
1/*
2 * driver for powerbutton on IBM cell blades
3 *
4 * (C) Copyright IBM Corp. 2005-2008
5 *
6 * Author: Christian Krafft <krafft@de.ibm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/input.h>
24#include <linux/platform_device.h>
25#include <asm/pmi.h>
26#include <asm/prom.h>
27
28static struct input_dev *button_dev;
29static struct platform_device *button_pdev;
30
31static void cbe_powerbutton_handle_pmi(pmi_message_t pmi_msg)
32{
33 BUG_ON(pmi_msg.type != PMI_TYPE_POWER_BUTTON);
34
35 input_report_key(button_dev, KEY_POWER, 1);
36 input_sync(button_dev);
37 input_report_key(button_dev, KEY_POWER, 0);
38 input_sync(button_dev);
39}
40
41static struct pmi_handler cbe_pmi_handler = {
42 .type = PMI_TYPE_POWER_BUTTON,
43 .handle_pmi_message = cbe_powerbutton_handle_pmi,
44};
45
46static int __init cbe_powerbutton_init(void)
47{
48 int ret = 0;
49 struct input_dev *dev;
50
51 if (!machine_is_compatible("IBM,CBPLUS-1.0")) {
52 printk(KERN_ERR "%s: Not a cell blade.\n", __func__);
53 ret = -ENODEV;
54 goto out;
55 }
56
57 dev = input_allocate_device();
58 if (!dev) {
59 ret = -ENOMEM;
60 printk(KERN_ERR "%s: Not enough memory.\n", __func__);
61 goto out;
62 }
63
64 set_bit(EV_KEY, dev->evbit);
65 set_bit(KEY_POWER, dev->keybit);
66
67 dev->name = "Power Button";
68 dev->id.bustype = BUS_HOST;
69
70 /* this makes the button look like an acpi power button
71 * no clue whether anyone relies on that though */
72 dev->id.product = 0x02;
73 dev->phys = "LNXPWRBN/button/input0";
74
75 button_pdev = platform_device_register_simple("power_button", 0, NULL, 0);
76 if (IS_ERR(button_pdev)) {
77 ret = PTR_ERR(button_pdev);
78 goto out_free_input;
79 }
80
81 dev->dev.parent = &button_pdev->dev;
82 ret = input_register_device(dev);
83 if (ret) {
84 printk(KERN_ERR "%s: Failed to register device\n", __func__);
85 goto out_free_pdev;
86 }
87
88 button_dev = dev;
89
90 ret = pmi_register_handler(&cbe_pmi_handler);
91 if (ret) {
92 printk(KERN_ERR "%s: Failed to register with pmi.\n", __func__);
93 goto out_free_pdev;
94 }
95
96 goto out;
97
98out_free_pdev:
99 platform_device_unregister(button_pdev);
100out_free_input:
101 input_free_device(dev);
102out:
103 return ret;
104}
105
106static void __exit cbe_powerbutton_exit(void)
107{
108 pmi_unregister_handler(&cbe_pmi_handler);
109 platform_device_unregister(button_pdev);
110 input_free_device(button_dev);
111}
112
113module_init(cbe_powerbutton_init);
114module_exit(cbe_powerbutton_exit);
115
116MODULE_LICENSE("GPL");
117MODULE_AUTHOR("Christian Krafft <krafft@de.ibm.com>");
diff --git a/arch/powerpc/platforms/cell/cbe_thermal.c b/arch/powerpc/platforms/cell/cbe_thermal.c
index 4852bf312d83..4d4c8c169124 100644
--- a/arch/powerpc/platforms/cell/cbe_thermal.c
+++ b/arch/powerpc/platforms/cell/cbe_thermal.c
@@ -97,7 +97,8 @@ static u8 spu_read_register_value(struct sys_device *sysdev, union spe_reg __iom
97 return value.spe[spu->spe_id]; 97 return value.spe[spu->spe_id];
98} 98}
99 99
100static ssize_t spu_show_temp(struct sys_device *sysdev, char *buf) 100static ssize_t spu_show_temp(struct sys_device *sysdev, struct sysdev_attribute *attr,
101 char *buf)
101{ 102{
102 u8 value; 103 u8 value;
103 struct cbe_pmd_regs __iomem *pmd_regs; 104 struct cbe_pmd_regs __iomem *pmd_regs;
@@ -146,32 +147,38 @@ static ssize_t store_throttle(struct cbe_pmd_regs __iomem *pmd_regs, const char
146 return size; 147 return size;
147} 148}
148 149
149static ssize_t spu_show_throttle_end(struct sys_device *sysdev, char *buf) 150static ssize_t spu_show_throttle_end(struct sys_device *sysdev,
151 struct sysdev_attribute *attr, char *buf)
150{ 152{
151 return show_throttle(get_pmd_regs(sysdev), buf, 0); 153 return show_throttle(get_pmd_regs(sysdev), buf, 0);
152} 154}
153 155
154static ssize_t spu_show_throttle_begin(struct sys_device *sysdev, char *buf) 156static ssize_t spu_show_throttle_begin(struct sys_device *sysdev,
157 struct sysdev_attribute *attr, char *buf)
155{ 158{
156 return show_throttle(get_pmd_regs(sysdev), buf, 8); 159 return show_throttle(get_pmd_regs(sysdev), buf, 8);
157} 160}
158 161
159static ssize_t spu_show_throttle_full_stop(struct sys_device *sysdev, char *buf) 162static ssize_t spu_show_throttle_full_stop(struct sys_device *sysdev,
163 struct sysdev_attribute *attr, char *buf)
160{ 164{
161 return show_throttle(get_pmd_regs(sysdev), buf, 16); 165 return show_throttle(get_pmd_regs(sysdev), buf, 16);
162} 166}
163 167
164static ssize_t spu_store_throttle_end(struct sys_device *sysdev, const char *buf, size_t size) 168static ssize_t spu_store_throttle_end(struct sys_device *sysdev,
169 struct sysdev_attribute *attr, const char *buf, size_t size)
165{ 170{
166 return store_throttle(get_pmd_regs(sysdev), buf, size, 0); 171 return store_throttle(get_pmd_regs(sysdev), buf, size, 0);
167} 172}
168 173
169static ssize_t spu_store_throttle_begin(struct sys_device *sysdev, const char *buf, size_t size) 174static ssize_t spu_store_throttle_begin(struct sys_device *sysdev,
175 struct sysdev_attribute *attr, const char *buf, size_t size)
170{ 176{
171 return store_throttle(get_pmd_regs(sysdev), buf, size, 8); 177 return store_throttle(get_pmd_regs(sysdev), buf, size, 8);
172} 178}
173 179
174static ssize_t spu_store_throttle_full_stop(struct sys_device *sysdev, const char *buf, size_t size) 180static ssize_t spu_store_throttle_full_stop(struct sys_device *sysdev,
181 struct sysdev_attribute *attr, const char *buf, size_t size)
175{ 182{
176 return store_throttle(get_pmd_regs(sysdev), buf, size, 16); 183 return store_throttle(get_pmd_regs(sysdev), buf, size, 16);
177} 184}
@@ -192,43 +199,51 @@ static ssize_t ppe_show_temp(struct sys_device *sysdev, char *buf, int pos)
192 199
193/* shows the temperature of the DTS on the PPE, 200/* shows the temperature of the DTS on the PPE,
194 * located near the linear thermal sensor */ 201 * located near the linear thermal sensor */
195static ssize_t ppe_show_temp0(struct sys_device *sysdev, char *buf) 202static ssize_t ppe_show_temp0(struct sys_device *sysdev,
203 struct sysdev_attribute *attr, char *buf)
196{ 204{
197 return ppe_show_temp(sysdev, buf, 32); 205 return ppe_show_temp(sysdev, buf, 32);
198} 206}
199 207
200/* shows the temperature of the second DTS on the PPE */ 208/* shows the temperature of the second DTS on the PPE */
201static ssize_t ppe_show_temp1(struct sys_device *sysdev, char *buf) 209static ssize_t ppe_show_temp1(struct sys_device *sysdev,
210 struct sysdev_attribute *attr, char *buf)
202{ 211{
203 return ppe_show_temp(sysdev, buf, 0); 212 return ppe_show_temp(sysdev, buf, 0);
204} 213}
205 214
206static ssize_t ppe_show_throttle_end(struct sys_device *sysdev, char *buf) 215static ssize_t ppe_show_throttle_end(struct sys_device *sysdev,
216 struct sysdev_attribute *attr, char *buf)
207{ 217{
208 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 32); 218 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 32);
209} 219}
210 220
211static ssize_t ppe_show_throttle_begin(struct sys_device *sysdev, char *buf) 221static ssize_t ppe_show_throttle_begin(struct sys_device *sysdev,
222 struct sysdev_attribute *attr, char *buf)
212{ 223{
213 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 40); 224 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 40);
214} 225}
215 226
216static ssize_t ppe_show_throttle_full_stop(struct sys_device *sysdev, char *buf) 227static ssize_t ppe_show_throttle_full_stop(struct sys_device *sysdev,
228 struct sysdev_attribute *attr, char *buf)
217{ 229{
218 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 48); 230 return show_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, 48);
219} 231}
220 232
221static ssize_t ppe_store_throttle_end(struct sys_device *sysdev, const char *buf, size_t size) 233static ssize_t ppe_store_throttle_end(struct sys_device *sysdev,
234 struct sysdev_attribute *attr, const char *buf, size_t size)
222{ 235{
223 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 32); 236 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 32);
224} 237}
225 238
226static ssize_t ppe_store_throttle_begin(struct sys_device *sysdev, const char *buf, size_t size) 239static ssize_t ppe_store_throttle_begin(struct sys_device *sysdev,
240 struct sysdev_attribute *attr, const char *buf, size_t size)
227{ 241{
228 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 40); 242 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 40);
229} 243}
230 244
231static ssize_t ppe_store_throttle_full_stop(struct sys_device *sysdev, const char *buf, size_t size) 245static ssize_t ppe_store_throttle_full_stop(struct sys_device *sysdev,
246 struct sysdev_attribute *attr, const char *buf, size_t size)
232{ 247{
233 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 48); 248 return store_throttle(cbe_get_cpu_pmd_regs(sysdev->id), buf, size, 48);
234} 249}
diff --git a/arch/powerpc/platforms/cell/cpufreq_spudemand.c b/arch/powerpc/platforms/cell/cpufreq_spudemand.c
new file mode 100644
index 000000000000..a3c6c01bd6db
--- /dev/null
+++ b/arch/powerpc/platforms/cell/cpufreq_spudemand.c
@@ -0,0 +1,184 @@
1/*
2 * spu aware cpufreq governor for the cell processor
3 *
4 * © Copyright IBM Corporation 2006-2008
5 *
6 * Author: Christian Krafft <krafft@de.ibm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/cpufreq.h>
24#include <linux/sched.h>
25#include <linux/timer.h>
26#include <linux/workqueue.h>
27#include <asm/atomic.h>
28#include <asm/machdep.h>
29#include <asm/spu.h>
30
31#define POLL_TIME 100000 /* in µs */
32#define EXP 753 /* exp(-1) in fixed-point */
33
34struct spu_gov_info_struct {
35 unsigned long busy_spus; /* fixed-point */
36 struct cpufreq_policy *policy;
37 struct delayed_work work;
38 unsigned int poll_int; /* µs */
39};
40static DEFINE_PER_CPU(struct spu_gov_info_struct, spu_gov_info);
41
42static struct workqueue_struct *kspugov_wq;
43
44static int calc_freq(struct spu_gov_info_struct *info)
45{
46 int cpu;
47 int busy_spus;
48
49 cpu = info->policy->cpu;
50 busy_spus = atomic_read(&cbe_spu_info[cpu_to_node(cpu)].busy_spus);
51
52 CALC_LOAD(info->busy_spus, EXP, busy_spus * FIXED_1);
53 pr_debug("cpu %d: busy_spus=%d, info->busy_spus=%ld\n",
54 cpu, busy_spus, info->busy_spus);
55
56 return info->policy->max * info->busy_spus / FIXED_1;
57}
58
59static void spu_gov_work(struct work_struct *work)
60{
61 struct spu_gov_info_struct *info;
62 int delay;
63 unsigned long target_freq;
64
65 info = container_of(work, struct spu_gov_info_struct, work.work);
66
67 /* after cancel_delayed_work_sync we unset info->policy */
68 BUG_ON(info->policy == NULL);
69
70 target_freq = calc_freq(info);
71 __cpufreq_driver_target(info->policy, target_freq, CPUFREQ_RELATION_H);
72
73 delay = usecs_to_jiffies(info->poll_int);
74 queue_delayed_work_on(info->policy->cpu, kspugov_wq, &info->work, delay);
75}
76
77static void spu_gov_init_work(struct spu_gov_info_struct *info)
78{
79 int delay = usecs_to_jiffies(info->poll_int);
80 INIT_DELAYED_WORK_DEFERRABLE(&info->work, spu_gov_work);
81 queue_delayed_work_on(info->policy->cpu, kspugov_wq, &info->work, delay);
82}
83
84static void spu_gov_cancel_work(struct spu_gov_info_struct *info)
85{
86 cancel_delayed_work_sync(&info->work);
87}
88
89static int spu_gov_govern(struct cpufreq_policy *policy, unsigned int event)
90{
91 unsigned int cpu = policy->cpu;
92 struct spu_gov_info_struct *info, *affected_info;
93 int i;
94 int ret = 0;
95
96 info = &per_cpu(spu_gov_info, cpu);
97
98 switch (event) {
99 case CPUFREQ_GOV_START:
100 if (!cpu_online(cpu)) {
101 printk(KERN_ERR "cpu %d is not online\n", cpu);
102 ret = -EINVAL;
103 break;
104 }
105
106 if (!policy->cur) {
107 printk(KERN_ERR "no cpu specified in policy\n");
108 ret = -EINVAL;
109 break;
110 }
111
112 /* initialize spu_gov_info for all affected cpus */
113 for_each_cpu_mask(i, policy->cpus) {
114 affected_info = &per_cpu(spu_gov_info, i);
115 affected_info->policy = policy;
116 }
117
118 info->poll_int = POLL_TIME;
119
120 /* setup timer */
121 spu_gov_init_work(info);
122
123 break;
124
125 case CPUFREQ_GOV_STOP:
126 /* cancel timer */
127 spu_gov_cancel_work(info);
128
129 /* clean spu_gov_info for all affected cpus */
130 for_each_cpu_mask (i, policy->cpus) {
131 info = &per_cpu(spu_gov_info, i);
132 info->policy = NULL;
133 }
134
135 break;
136 }
137
138 return ret;
139}
140
141static struct cpufreq_governor spu_governor = {
142 .name = "spudemand",
143 .governor = spu_gov_govern,
144 .owner = THIS_MODULE,
145};
146
147/*
148 * module init and destoy
149 */
150
151static int __init spu_gov_init(void)
152{
153 int ret;
154
155 kspugov_wq = create_workqueue("kspugov");
156 if (!kspugov_wq) {
157 printk(KERN_ERR "creation of kspugov failed\n");
158 ret = -EFAULT;
159 goto out;
160 }
161
162 ret = cpufreq_register_governor(&spu_governor);
163 if (ret) {
164 printk(KERN_ERR "registration of governor failed\n");
165 destroy_workqueue(kspugov_wq);
166 goto out;
167 }
168out:
169 return ret;
170}
171
172static void __exit spu_gov_exit(void)
173{
174 cpufreq_unregister_governor(&spu_governor);
175 destroy_workqueue(kspugov_wq);
176}
177
178
179module_init(spu_gov_init);
180module_exit(spu_gov_exit);
181
182MODULE_LICENSE("GPL");
183MODULE_AUTHOR("Christian Krafft <krafft@de.ibm.com>");
184
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index eeacb3a52ca1..208005ca262c 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -173,7 +173,8 @@ static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte,
173} 173}
174 174
175static void tce_build_cell(struct iommu_table *tbl, long index, long npages, 175static void tce_build_cell(struct iommu_table *tbl, long index, long npages,
176 unsigned long uaddr, enum dma_data_direction direction) 176 unsigned long uaddr, enum dma_data_direction direction,
177 struct dma_attrs *attrs)
177{ 178{
178 int i; 179 int i;
179 unsigned long *io_pte, base_pte; 180 unsigned long *io_pte, base_pte;
@@ -198,6 +199,8 @@ static void tce_build_cell(struct iommu_table *tbl, long index, long npages,
198 base_pte = IOPTE_PP_W | IOPTE_PP_R | IOPTE_M | IOPTE_SO_RW | 199 base_pte = IOPTE_PP_W | IOPTE_PP_R | IOPTE_M | IOPTE_SO_RW |
199 (window->ioid & IOPTE_IOID_Mask); 200 (window->ioid & IOPTE_IOID_Mask);
200#endif 201#endif
202 if (unlikely(dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)))
203 base_pte &= ~IOPTE_SO_RW;
201 204
202 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset); 205 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
203 206
@@ -519,7 +522,7 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
519 522
520 __set_bit(0, window->table.it_map); 523 __set_bit(0, window->table.it_map);
521 tce_build_cell(&window->table, window->table.it_offset, 1, 524 tce_build_cell(&window->table, window->table.it_offset, 1,
522 (unsigned long)iommu->pad_page, DMA_TO_DEVICE); 525 (unsigned long)iommu->pad_page, DMA_TO_DEVICE, NULL);
523 window->table.it_hint = window->table.it_blocksize; 526 window->table.it_hint = window->table.it_blocksize;
524 527
525 return window; 528 return window;
@@ -538,7 +541,9 @@ static struct cbe_iommu *cell_iommu_for_node(int nid)
538static unsigned long cell_dma_direct_offset; 541static unsigned long cell_dma_direct_offset;
539 542
540static unsigned long dma_iommu_fixed_base; 543static unsigned long dma_iommu_fixed_base;
541struct dma_mapping_ops dma_iommu_fixed_ops; 544
545/* iommu_fixed_is_weak is set if booted with iommu_fixed=weak */
546static int iommu_fixed_is_weak;
542 547
543static struct iommu_table *cell_get_iommu_table(struct device *dev) 548static struct iommu_table *cell_get_iommu_table(struct device *dev)
544{ 549{
@@ -562,6 +567,98 @@ static struct iommu_table *cell_get_iommu_table(struct device *dev)
562 return &window->table; 567 return &window->table;
563} 568}
564 569
570/* A coherent allocation implies strong ordering */
571
572static void *dma_fixed_alloc_coherent(struct device *dev, size_t size,
573 dma_addr_t *dma_handle, gfp_t flag)
574{
575 if (iommu_fixed_is_weak)
576 return iommu_alloc_coherent(dev, cell_get_iommu_table(dev),
577 size, dma_handle,
578 device_to_mask(dev), flag,
579 dev->archdata.numa_node);
580 else
581 return dma_direct_ops.alloc_coherent(dev, size, dma_handle,
582 flag);
583}
584
585static void dma_fixed_free_coherent(struct device *dev, size_t size,
586 void *vaddr, dma_addr_t dma_handle)
587{
588 if (iommu_fixed_is_weak)
589 iommu_free_coherent(cell_get_iommu_table(dev), size, vaddr,
590 dma_handle);
591 else
592 dma_direct_ops.free_coherent(dev, size, vaddr, dma_handle);
593}
594
595static dma_addr_t dma_fixed_map_single(struct device *dev, void *ptr,
596 size_t size,
597 enum dma_data_direction direction,
598 struct dma_attrs *attrs)
599{
600 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
601 return dma_direct_ops.map_single(dev, ptr, size, direction,
602 attrs);
603 else
604 return iommu_map_single(dev, cell_get_iommu_table(dev), ptr,
605 size, device_to_mask(dev), direction,
606 attrs);
607}
608
609static void dma_fixed_unmap_single(struct device *dev, dma_addr_t dma_addr,
610 size_t size,
611 enum dma_data_direction direction,
612 struct dma_attrs *attrs)
613{
614 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
615 dma_direct_ops.unmap_single(dev, dma_addr, size, direction,
616 attrs);
617 else
618 iommu_unmap_single(cell_get_iommu_table(dev), dma_addr, size,
619 direction, attrs);
620}
621
622static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg,
623 int nents, enum dma_data_direction direction,
624 struct dma_attrs *attrs)
625{
626 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
627 return dma_direct_ops.map_sg(dev, sg, nents, direction, attrs);
628 else
629 return iommu_map_sg(dev, cell_get_iommu_table(dev), sg, nents,
630 device_to_mask(dev), direction, attrs);
631}
632
633static void dma_fixed_unmap_sg(struct device *dev, struct scatterlist *sg,
634 int nents, enum dma_data_direction direction,
635 struct dma_attrs *attrs)
636{
637 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
638 dma_direct_ops.unmap_sg(dev, sg, nents, direction, attrs);
639 else
640 iommu_unmap_sg(cell_get_iommu_table(dev), sg, nents, direction,
641 attrs);
642}
643
644static int dma_fixed_dma_supported(struct device *dev, u64 mask)
645{
646 return mask == DMA_64BIT_MASK;
647}
648
649static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask);
650
651struct dma_mapping_ops dma_iommu_fixed_ops = {
652 .alloc_coherent = dma_fixed_alloc_coherent,
653 .free_coherent = dma_fixed_free_coherent,
654 .map_single = dma_fixed_map_single,
655 .unmap_single = dma_fixed_unmap_single,
656 .map_sg = dma_fixed_map_sg,
657 .unmap_sg = dma_fixed_unmap_sg,
658 .dma_supported = dma_fixed_dma_supported,
659 .set_dma_mask = dma_set_mask_and_switch,
660};
661
565static void cell_dma_dev_setup_fixed(struct device *dev); 662static void cell_dma_dev_setup_fixed(struct device *dev);
566 663
567static void cell_dma_dev_setup(struct device *dev) 664static void cell_dma_dev_setup(struct device *dev)
@@ -918,9 +1015,16 @@ static void cell_iommu_setup_fixed_ptab(struct cbe_iommu *iommu,
918 1015
919 pr_debug("iommu: mapping 0x%lx pages from 0x%lx\n", fsize, fbase); 1016 pr_debug("iommu: mapping 0x%lx pages from 0x%lx\n", fsize, fbase);
920 1017
921 base_pte = IOPTE_PP_W | IOPTE_PP_R | IOPTE_M | IOPTE_SO_RW 1018 base_pte = IOPTE_PP_W | IOPTE_PP_R | IOPTE_M
922 | (cell_iommu_get_ioid(np) & IOPTE_IOID_Mask); 1019 | (cell_iommu_get_ioid(np) & IOPTE_IOID_Mask);
923 1020
1021 if (iommu_fixed_is_weak)
1022 pr_info("IOMMU: Using weak ordering for fixed mapping\n");
1023 else {
1024 pr_info("IOMMU: Using strong ordering for fixed mapping\n");
1025 base_pte |= IOPTE_SO_RW;
1026 }
1027
924 for (uaddr = 0; uaddr < fsize; uaddr += (1 << 24)) { 1028 for (uaddr = 0; uaddr < fsize; uaddr += (1 << 24)) {
925 /* Don't touch the dynamic region */ 1029 /* Don't touch the dynamic region */
926 ioaddr = uaddr + fbase; 1030 ioaddr = uaddr + fbase;
@@ -1036,9 +1140,6 @@ static int __init cell_iommu_fixed_mapping_init(void)
1036 cell_iommu_setup_window(iommu, np, dbase, dsize, 0); 1140 cell_iommu_setup_window(iommu, np, dbase, dsize, 0);
1037 } 1141 }
1038 1142
1039 dma_iommu_fixed_ops = dma_direct_ops;
1040 dma_iommu_fixed_ops.set_dma_mask = dma_set_mask_and_switch;
1041
1042 dma_iommu_ops.set_dma_mask = dma_set_mask_and_switch; 1143 dma_iommu_ops.set_dma_mask = dma_set_mask_and_switch;
1043 set_pci_dma_ops(&dma_iommu_ops); 1144 set_pci_dma_ops(&dma_iommu_ops);
1044 1145
@@ -1052,6 +1153,9 @@ static int __init setup_iommu_fixed(char *str)
1052 if (strcmp(str, "off") == 0) 1153 if (strcmp(str, "off") == 0)
1053 iommu_fixed_disabled = 1; 1154 iommu_fixed_disabled = 1;
1054 1155
1156 else if (strcmp(str, "weak") == 0)
1157 iommu_fixed_is_weak = 1;
1158
1055 return 1; 1159 return 1;
1056} 1160}
1057__setup("iommu_fixed=", setup_iommu_fixed); 1161__setup("iommu_fixed=", setup_iommu_fixed);
diff --git a/arch/powerpc/platforms/cell/pervasive.c b/arch/powerpc/platforms/cell/pervasive.c
index 8a3631ce912b..efdacc829576 100644
--- a/arch/powerpc/platforms/cell/pervasive.c
+++ b/arch/powerpc/platforms/cell/pervasive.c
@@ -38,8 +38,6 @@
38 38
39#include "pervasive.h" 39#include "pervasive.h"
40 40
41static int sysreset_hack;
42
43static void cbe_power_save(void) 41static void cbe_power_save(void)
44{ 42{
45 unsigned long ctrl, thread_switch_control; 43 unsigned long ctrl, thread_switch_control;
@@ -87,9 +85,6 @@ static void cbe_power_save(void)
87 85
88static int cbe_system_reset_exception(struct pt_regs *regs) 86static int cbe_system_reset_exception(struct pt_regs *regs)
89{ 87{
90 int cpu;
91 struct cbe_pmd_regs __iomem *pmd;
92
93 switch (regs->msr & SRR1_WAKEMASK) { 88 switch (regs->msr & SRR1_WAKEMASK) {
94 case SRR1_WAKEEE: 89 case SRR1_WAKEEE:
95 do_IRQ(regs); 90 do_IRQ(regs);
@@ -98,19 +93,7 @@ static int cbe_system_reset_exception(struct pt_regs *regs)
98 timer_interrupt(regs); 93 timer_interrupt(regs);
99 break; 94 break;
100 case SRR1_WAKEMT: 95 case SRR1_WAKEMT:
101 /* 96 return cbe_sysreset_hack();
102 * The BMC can inject user triggered system reset exceptions,
103 * but cannot set the system reset reason in srr1,
104 * so check an extra register here.
105 */
106 if (sysreset_hack && (cpu = smp_processor_id()) == 0) {
107 pmd = cbe_get_cpu_pmd_regs(cpu);
108 if (in_be64(&pmd->ras_esc_0) & 0xffff) {
109 out_be64(&pmd->ras_esc_0, 0);
110 return 0;
111 }
112 }
113 break;
114#ifdef CONFIG_CBE_RAS 97#ifdef CONFIG_CBE_RAS
115 case SRR1_WAKESYSERR: 98 case SRR1_WAKESYSERR:
116 cbe_system_error_exception(regs); 99 cbe_system_error_exception(regs);
@@ -134,8 +117,6 @@ void __init cbe_pervasive_init(void)
134 if (!cpu_has_feature(CPU_FTR_PAUSE_ZERO)) 117 if (!cpu_has_feature(CPU_FTR_PAUSE_ZERO))
135 return; 118 return;
136 119
137 sysreset_hack = machine_is_compatible("IBM,CBPLUS-1.0");
138
139 for_each_possible_cpu(cpu) { 120 for_each_possible_cpu(cpu) {
140 struct cbe_pmd_regs __iomem *regs = cbe_get_cpu_pmd_regs(cpu); 121 struct cbe_pmd_regs __iomem *regs = cbe_get_cpu_pmd_regs(cpu);
141 if (!regs) 122 if (!regs)
@@ -144,12 +125,6 @@ void __init cbe_pervasive_init(void)
144 /* Enable Pause(0) control bit */ 125 /* Enable Pause(0) control bit */
145 out_be64(&regs->pmcr, in_be64(&regs->pmcr) | 126 out_be64(&regs->pmcr, in_be64(&regs->pmcr) |
146 CBE_PMD_PAUSE_ZERO_CONTROL); 127 CBE_PMD_PAUSE_ZERO_CONTROL);
147
148 /* Enable JTAG system-reset hack */
149 if (sysreset_hack)
150 out_be32(&regs->fir_mode_reg,
151 in_be32(&regs->fir_mode_reg) |
152 CBE_PMD_FIR_MODE_M8);
153 } 128 }
154 129
155 ppc_md.power_save = cbe_power_save; 130 ppc_md.power_save = cbe_power_save;
diff --git a/arch/powerpc/platforms/cell/pervasive.h b/arch/powerpc/platforms/cell/pervasive.h
index 7b50947f8044..fd4d7b7092b4 100644
--- a/arch/powerpc/platforms/cell/pervasive.h
+++ b/arch/powerpc/platforms/cell/pervasive.h
@@ -30,4 +30,13 @@ extern void cbe_system_error_exception(struct pt_regs *regs);
30extern void cbe_maintenance_exception(struct pt_regs *regs); 30extern void cbe_maintenance_exception(struct pt_regs *regs);
31extern void cbe_thermal_exception(struct pt_regs *regs); 31extern void cbe_thermal_exception(struct pt_regs *regs);
32 32
33#ifdef CONFIG_PPC_IBM_CELL_RESETBUTTON
34extern int cbe_sysreset_hack(void);
35#else
36static inline int cbe_sysreset_hack(void)
37{
38 return 1;
39}
40#endif /* CONFIG_PPC_IBM_CELL_RESETBUTTON */
41
33#endif 42#endif
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c
index 505f9b9bdf0c..2a14b052abcd 100644
--- a/arch/powerpc/platforms/cell/ras.c
+++ b/arch/powerpc/platforms/cell/ras.c
@@ -236,6 +236,52 @@ static struct notifier_block cbe_ptcal_reboot_notifier = {
236 .notifier_call = cbe_ptcal_notify_reboot 236 .notifier_call = cbe_ptcal_notify_reboot
237}; 237};
238 238
239#ifdef CONFIG_PPC_IBM_CELL_RESETBUTTON
240static int sysreset_hack;
241
242static int __init cbe_sysreset_init(void)
243{
244 struct cbe_pmd_regs __iomem *regs;
245
246 sysreset_hack = machine_is_compatible("IBM,CBPLUS-1.0");
247 if (!sysreset_hack)
248 return 0;
249
250 regs = cbe_get_cpu_pmd_regs(0);
251 if (!regs)
252 return 0;
253
254 /* Enable JTAG system-reset hack */
255 out_be32(&regs->fir_mode_reg,
256 in_be32(&regs->fir_mode_reg) |
257 CBE_PMD_FIR_MODE_M8);
258
259 return 0;
260}
261device_initcall(cbe_sysreset_init);
262
263int cbe_sysreset_hack(void)
264{
265 struct cbe_pmd_regs __iomem *regs;
266
267 /*
268 * The BMC can inject user triggered system reset exceptions,
269 * but cannot set the system reset reason in srr1,
270 * so check an extra register here.
271 */
272 if (sysreset_hack && (smp_processor_id() == 0)) {
273 regs = cbe_get_cpu_pmd_regs(0);
274 if (!regs)
275 return 0;
276 if (in_be64(&regs->ras_esc_0) & 0x0000ffff) {
277 out_be64(&regs->ras_esc_0, 0);
278 return 0;
279 }
280 }
281 return 1;
282}
283#endif /* CONFIG_PPC_IBM_CELL_RESETBUTTON */
284
239int __init cbe_ptcal_init(void) 285int __init cbe_ptcal_init(void)
240{ 286{
241 int ret; 287 int ret;
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index 78f905bc6a42..a5bdb89a17c3 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -703,7 +703,8 @@ static unsigned long long spu_acct_time(struct spu *spu,
703} 703}
704 704
705 705
706static ssize_t spu_stat_show(struct sys_device *sysdev, char *buf) 706static ssize_t spu_stat_show(struct sys_device *sysdev,
707 struct sysdev_attribute *attr, char *buf)
707{ 708{
708 struct spu *spu = container_of(sysdev, struct spu, sysdev); 709 struct spu *spu = container_of(sysdev, struct spu, sysdev);
709 710
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c
index 609c46db4a1b..768c262b9368 100644
--- a/arch/powerpc/platforms/chrp/pci.c
+++ b/arch/powerpc/platforms/chrp/pci.c
@@ -367,7 +367,7 @@ static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
367 viaisa = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231, NULL); 367 viaisa = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231, NULL);
368 if (!viaisa) 368 if (!viaisa)
369 return; 369 return;
370 printk("Fixing VIA IDE, force legacy mode on '%s'\n", viaide->dev.bus_id); 370 dev_info(&viaide->dev, "Fixing VIA IDE, force legacy mode on\n");
371 371
372 pci_read_config_byte(viaide, PCI_CLASS_PROG, &progif); 372 pci_read_config_byte(viaide, PCI_CLASS_PROG, &progif);
373 pci_write_config_byte(viaide, PCI_CLASS_PROG, progif & ~0x5); 373 pci_write_config_byte(viaide, PCI_CLASS_PROG, progif & ~0x5);
diff --git a/arch/powerpc/platforms/fsl_uli1575.c b/arch/powerpc/platforms/fsl_uli1575.c
index afc9141be63e..ef74a0763ec1 100644
--- a/arch/powerpc/platforms/fsl_uli1575.c
+++ b/arch/powerpc/platforms/fsl_uli1575.c
@@ -51,15 +51,13 @@ u8 uli_pirq_to_irq[8] = {
51 ULI_8259_NONE, /* PIRQH */ 51 ULI_8259_NONE, /* PIRQH */
52}; 52};
53 53
54/* set in board code if you want this quirks to do something */
55int uses_fsl_uli_m1575;
56
57/* Bridge */ 54/* Bridge */
58static void __devinit early_uli5249(struct pci_dev *dev) 55static void __devinit early_uli5249(struct pci_dev *dev)
59{ 56{
60 unsigned char temp; 57 unsigned char temp;
61 58
62 if (!uses_fsl_uli_m1575) 59 if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) &&
60 !machine_is(mpc8572_ds))
63 return; 61 return;
64 62
65 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_IO | 63 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_IO |
@@ -82,7 +80,8 @@ static void __devinit quirk_uli1575(struct pci_dev *dev)
82{ 80{
83 int i; 81 int i;
84 82
85 if (!uses_fsl_uli_m1575) 83 if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) &&
84 !machine_is(mpc8572_ds))
86 return; 85 return;
87 86
88 /* 87 /*
@@ -150,7 +149,8 @@ static void __devinit quirk_final_uli1575(struct pci_dev *dev)
150 * IRQ 14: Edge 149 * IRQ 14: Edge
151 * IRQ 15: Edge 150 * IRQ 15: Edge
152 */ 151 */
153 if (!uses_fsl_uli_m1575) 152 if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) &&
153 !machine_is(mpc8572_ds))
154 return; 154 return;
155 155
156 outb(0xfa, 0x4d0); 156 outb(0xfa, 0x4d0);
@@ -176,7 +176,8 @@ static void __devinit quirk_uli5288(struct pci_dev *dev)
176 unsigned char c; 176 unsigned char c;
177 unsigned int d; 177 unsigned int d;
178 178
179 if (!uses_fsl_uli_m1575) 179 if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) &&
180 !machine_is(mpc8572_ds))
180 return; 181 return;
181 182
182 /* read/write lock */ 183 /* read/write lock */
@@ -200,7 +201,8 @@ static void __devinit quirk_uli5229(struct pci_dev *dev)
200{ 201{
201 unsigned short temp; 202 unsigned short temp;
202 203
203 if (!uses_fsl_uli_m1575) 204 if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) &&
205 !machine_is(mpc8572_ds))
204 return; 206 return;
205 207
206 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE | 208 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE |
@@ -221,7 +223,7 @@ static void __devinit quirk_final_uli5249(struct pci_dev *dev)
221 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 223 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
222 if ((bus->resource[i]) && 224 if ((bus->resource[i]) &&
223 (bus->resource[i]->flags & IORESOURCE_MEM)) { 225 (bus->resource[i]->flags & IORESOURCE_MEM)) {
224 dummy = ioremap(bus->resource[i]->start, 0x4); 226 dummy = ioremap(bus->resource[i]->end - 3, 0x4);
225 if (dummy) { 227 if (dummy) {
226 in_8(dummy); 228 in_8(dummy);
227 iounmap(dummy); 229 iounmap(dummy);
@@ -238,6 +240,103 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229);
238DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5249, quirk_final_uli5249); 240DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5249, quirk_final_uli5249);
239DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x1575, quirk_final_uli1575); 241DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x1575, quirk_final_uli1575);
240 242
243static void __devinit hpcd_quirk_uli1575(struct pci_dev *dev)
244{
245 u32 temp32;
246
247 if (!machine_is(mpc86xx_hpcd))
248 return;
249
250 /* Disable INTx */
251 pci_read_config_dword(dev, 0x48, &temp32);
252 pci_write_config_dword(dev, 0x48, (temp32 | 1<<26));
253
254 /* Enable sideband interrupt */
255 pci_read_config_dword(dev, 0x90, &temp32);
256 pci_write_config_dword(dev, 0x90, (temp32 | 1<<22));
257}
258
259static void __devinit hpcd_quirk_uli5288(struct pci_dev *dev)
260{
261 unsigned char c;
262 unsigned short temp;
263
264 if (!machine_is(mpc86xx_hpcd))
265 return;
266
267 /* Interrupt Disable, Needed when SATA disabled */
268 pci_read_config_word(dev, PCI_COMMAND, &temp);
269 temp |= 1<<10;
270 pci_write_config_word(dev, PCI_COMMAND, temp);
271
272 pci_read_config_byte(dev, 0x83, &c);
273 c |= 0x80;
274 pci_write_config_byte(dev, 0x83, c);
275
276 pci_write_config_byte(dev, PCI_CLASS_PROG, 0x01);
277 pci_write_config_byte(dev, PCI_CLASS_DEVICE, 0x06);
278
279 pci_read_config_byte(dev, 0x83, &c);
280 c &= 0x7f;
281 pci_write_config_byte(dev, 0x83, c);
282}
283
284/*
285 * Since 8259PIC was disabled on the board, the IDE device can not
286 * use the legacy IRQ, we need to let the IDE device work under
287 * native mode and use the interrupt line like other PCI devices.
288 * IRQ14 is a sideband interrupt from IDE device to CPU and we use this
289 * as the interrupt for IDE device.
290 */
291static void __devinit hpcd_quirk_uli5229(struct pci_dev *dev)
292{
293 unsigned char c;
294
295 if (!machine_is(mpc86xx_hpcd))
296 return;
297
298 pci_read_config_byte(dev, 0x4b, &c);
299 c |= 0x10;
300 pci_write_config_byte(dev, 0x4b, c);
301}
302
303/*
304 * SATA interrupt pin bug fix
305 * There's a chip bug for 5288, The interrupt pin should be 2,
306 * not the read only value 1, So it use INTB#, not INTA# which
307 * actually used by the IDE device 5229.
308 * As of this bug, during the PCI initialization, 5288 read the
309 * irq of IDE device from the device tree, this function fix this
310 * bug by re-assigning a correct irq to 5288.
311 *
312 */
313static void __devinit hpcd_final_uli5288(struct pci_dev *dev)
314{
315 struct pci_controller *hose = pci_bus_to_host(dev->bus);
316 struct device_node *hosenode = hose ? hose->dn : NULL;
317 struct of_irq oirq;
318 int virq, pin = 2;
319 u32 laddr[3];
320
321 if (!machine_is(mpc86xx_hpcd))
322 return;
323
324 if (!hosenode)
325 return;
326
327 laddr[0] = (hose->first_busno << 16) | (PCI_DEVFN(31, 0) << 8);
328 laddr[1] = laddr[2] = 0;
329 of_irq_map_raw(hosenode, &pin, 1, laddr, &oirq);
330 virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
331 oirq.size);
332 dev->irq = virq;
333}
334
335DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x1575, hpcd_quirk_uli1575);
336DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5288, hpcd_quirk_uli5288);
337DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, hpcd_quirk_uli5229);
338DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5288, hpcd_final_uli5288);
339
241int uli_exclude_device(struct pci_controller *hose, 340int uli_exclude_device(struct pci_controller *hose,
242 u_char bus, u_char devfn) 341 u_char bus, u_char devfn)
243{ 342{
diff --git a/arch/powerpc/platforms/iseries/Kconfig b/arch/powerpc/platforms/iseries/Kconfig
index 761d9e971fc4..ea3e541ac74f 100644
--- a/arch/powerpc/platforms/iseries/Kconfig
+++ b/arch/powerpc/platforms/iseries/Kconfig
@@ -2,6 +2,7 @@ config PPC_ISERIES
2 bool "IBM Legacy iSeries" 2 bool "IBM Legacy iSeries"
3 depends on PPC_MULTIPLATFORM && PPC64 3 depends on PPC_MULTIPLATFORM && PPC64
4 select PPC_INDIRECT_IO 4 select PPC_INDIRECT_IO
5 select PPC_PCI_CHOICE if EMBEDDED
5 6
6menu "iSeries device drivers" 7menu "iSeries device drivers"
7 depends on PPC_ISERIES 8 depends on PPC_ISERIES
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index ab5d8687c3cf..bc818e4e2033 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -42,7 +42,8 @@
42#include <asm/iseries/iommu.h> 42#include <asm/iseries/iommu.h>
43 43
44static void tce_build_iSeries(struct iommu_table *tbl, long index, long npages, 44static void tce_build_iSeries(struct iommu_table *tbl, long index, long npages,
45 unsigned long uaddr, enum dma_data_direction direction) 45 unsigned long uaddr, enum dma_data_direction direction,
46 struct dma_attrs *attrs)
46{ 47{
47 u64 rc; 48 u64 rc;
48 u64 tce, rpn; 49 u64 tce, rpn;
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index 86967bdd8774..70541b7a5013 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -85,7 +85,8 @@ static int iommu_table_iobmap_inited;
85 85
86static void iobmap_build(struct iommu_table *tbl, long index, 86static void iobmap_build(struct iommu_table *tbl, long index,
87 long npages, unsigned long uaddr, 87 long npages, unsigned long uaddr,
88 enum dma_data_direction direction) 88 enum dma_data_direction direction,
89 struct dma_attrs *attrs)
89{ 90{
90 u32 *ip; 91 u32 *ip;
91 u32 rpn; 92 u32 rpn;
diff --git a/arch/powerpc/platforms/ps3/Kconfig b/arch/powerpc/platforms/ps3/Kconfig
index a5f4e95dfc3d..920cf7a454b1 100644
--- a/arch/powerpc/platforms/ps3/Kconfig
+++ b/arch/powerpc/platforms/ps3/Kconfig
@@ -8,6 +8,7 @@ config PPC_PS3
8 select USB_ARCH_HAS_EHCI 8 select USB_ARCH_HAS_EHCI
9 select USB_EHCI_BIG_ENDIAN_MMIO 9 select USB_EHCI_BIG_ENDIAN_MMIO
10 select MEMORY_HOTPLUG 10 select MEMORY_HOTPLUG
11 select PPC_PCI_CHOICE
11 help 12 help
12 This option enables support for the Sony PS3 game console 13 This option enables support for the Sony PS3 game console
13 and other platforms using the PS3 hypervisor. Enabling this 14 and other platforms using the PS3 hypervisor. Enabling this
diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c
index 3866debfa3c4..ffdd8e963fbd 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -486,6 +486,7 @@ static int __init ps3_register_graphics_devices(void)
486 return -ENOMEM; 486 return -ENOMEM;
487 487
488 p->dev.match_id = PS3_MATCH_ID_GRAPHICS; 488 p->dev.match_id = PS3_MATCH_ID_GRAPHICS;
489 p->dev.match_sub_id = PS3_MATCH_SUB_ID_FB;
489 p->dev.dev_type = PS3_DEVICE_TYPE_IOC0; 490 p->dev.dev_type = PS3_DEVICE_TYPE_IOC0;
490 491
491 result = ps3_system_bus_device_register(&p->dev); 492 result = ps3_system_bus_device_register(&p->dev);
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index d66c3628a112..280ee88cb0b0 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -347,16 +347,23 @@ static int ps3_system_bus_match(struct device *_dev,
347 struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv); 347 struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv);
348 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 348 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
349 349
350 result = dev->match_id == drv->match_id; 350 if (!dev->match_sub_id)
351 result = dev->match_id == drv->match_id;
352 else
353 result = dev->match_sub_id == drv->match_sub_id &&
354 dev->match_id == drv->match_id;
351 355
352 if (result) 356 if (result)
353 pr_info("%s:%d: dev=%u(%s), drv=%u(%s): match\n", __func__, 357 pr_info("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): match\n",
354 __LINE__, dev->match_id, dev->core.bus_id, 358 __func__, __LINE__,
355 drv->match_id, drv->core.name); 359 dev->match_id, dev->match_sub_id, dev->core.bus_id,
360 drv->match_id, drv->match_sub_id, drv->core.name);
356 else 361 else
357 pr_debug("%s:%d: dev=%u(%s), drv=%u(%s): miss\n", __func__, 362 pr_debug("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): miss\n",
358 __LINE__, dev->match_id, dev->core.bus_id, 363 __func__, __LINE__,
359 drv->match_id, drv->core.name); 364 dev->match_id, dev->match_sub_id, dev->core.bus_id,
365 drv->match_id, drv->match_sub_id, drv->core.name);
366
360 return result; 367 return result;
361} 368}
362 369
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 07fe5b69b9e2..757c0296e0b8 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -7,6 +7,7 @@ config PPC_PSERIES
7 select RTAS_ERROR_LOGGING 7 select RTAS_ERROR_LOGGING
8 select PPC_UDBG_16550 8 select PPC_UDBG_16550
9 select PPC_NATIVE 9 select PPC_NATIVE
10 select PPC_PCI_CHOICE if EMBEDDED
10 default y 11 default y
11 12
12config PPC_SPLPAR 13config PPC_SPLPAR
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index c027f0a70a04..54816d75b578 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -75,9 +75,9 @@
75 */ 75 */
76 76
77/* If a device driver keeps reading an MMIO register in an interrupt 77/* If a device driver keeps reading an MMIO register in an interrupt
78 * handler after a slot isolation event has occurred, we assume it 78 * handler after a slot isolation event, it might be broken.
79 * is broken and panic. This sets the threshold for how many read 79 * This sets the threshold for how many read attempts we allow
80 * attempts we allow before panicking. 80 * before printing an error message.
81 */ 81 */
82#define EEH_MAX_FAILS 2100000 82#define EEH_MAX_FAILS 2100000
83 83
@@ -470,6 +470,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
470 unsigned long flags; 470 unsigned long flags;
471 struct pci_dn *pdn; 471 struct pci_dn *pdn;
472 int rc = 0; 472 int rc = 0;
473 const char *location;
473 474
474 total_mmio_ffs++; 475 total_mmio_ffs++;
475 476
@@ -509,18 +510,15 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
509 rc = 1; 510 rc = 1;
510 if (pdn->eeh_mode & EEH_MODE_ISOLATED) { 511 if (pdn->eeh_mode & EEH_MODE_ISOLATED) {
511 pdn->eeh_check_count ++; 512 pdn->eeh_check_count ++;
512 if (pdn->eeh_check_count >= EEH_MAX_FAILS) { 513 if (pdn->eeh_check_count % EEH_MAX_FAILS == 0) {
513 printk (KERN_ERR "EEH: Device driver ignored %d bad reads, panicing\n", 514 location = of_get_property(dn, "ibm,loc-code", NULL);
514 pdn->eeh_check_count); 515 printk (KERN_ERR "EEH: %d reads ignored for recovering device at "
516 "location=%s driver=%s pci addr=%s\n",
517 pdn->eeh_check_count, location,
518 dev->driver->name, pci_name(dev));
519 printk (KERN_ERR "EEH: Might be infinite loop in %s driver\n",
520 dev->driver->name);
515 dump_stack(); 521 dump_stack();
516 msleep(5000);
517
518 /* re-read the slot reset state */
519 if (read_slot_reset_state(pdn, rets) != 0)
520 rets[0] = -1; /* reset state unknown */
521
522 /* If we are here, then we hit an infinite loop. Stop. */
523 panic("EEH: MMIO halt (%d) on device:%s\n", rets[0], pci_name(dev));
524 } 522 }
525 goto dn_unlock; 523 goto dn_unlock;
526 } 524 }
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 9a12908510fb..5377dd4b849a 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -50,7 +50,8 @@
50 50
51static void tce_build_pSeries(struct iommu_table *tbl, long index, 51static void tce_build_pSeries(struct iommu_table *tbl, long index,
52 long npages, unsigned long uaddr, 52 long npages, unsigned long uaddr,
53 enum dma_data_direction direction) 53 enum dma_data_direction direction,
54 struct dma_attrs *attrs)
54{ 55{
55 u64 proto_tce; 56 u64 proto_tce;
56 u64 *tcep; 57 u64 *tcep;
@@ -95,7 +96,8 @@ static unsigned long tce_get_pseries(struct iommu_table *tbl, long index)
95 96
96static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, 97static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum,
97 long npages, unsigned long uaddr, 98 long npages, unsigned long uaddr,
98 enum dma_data_direction direction) 99 enum dma_data_direction direction,
100 struct dma_attrs *attrs)
99{ 101{
100 u64 rc; 102 u64 rc;
101 u64 proto_tce, tce; 103 u64 proto_tce, tce;
@@ -127,7 +129,8 @@ static DEFINE_PER_CPU(u64 *, tce_page) = NULL;
127 129
128static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, 130static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
129 long npages, unsigned long uaddr, 131 long npages, unsigned long uaddr,
130 enum dma_data_direction direction) 132 enum dma_data_direction direction,
133 struct dma_attrs *attrs)
131{ 134{
132 u64 rc; 135 u64 rc;
133 u64 proto_tce; 136 u64 proto_tce;
@@ -136,7 +139,8 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
136 long l, limit; 139 long l, limit;
137 140
138 if (npages == 1) { 141 if (npages == 1) {
139 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, direction); 142 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr,
143 direction, attrs);
140 return; 144 return;
141 } 145 }
142 146
@@ -150,7 +154,7 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
150 /* If allocation fails, fall back to the loop implementation */ 154 /* If allocation fails, fall back to the loop implementation */
151 if (!tcep) { 155 if (!tcep) {
152 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, 156 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr,
153 direction); 157 direction, attrs);
154 return; 158 return;
155 } 159 }
156 __get_cpu_var(tce_page) = tcep; 160 __get_cpu_var(tce_page) = tcep;
diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
index 7f59188cd9a1..9e105cbc5e5f 100644
--- a/arch/powerpc/sysdev/axonram.c
+++ b/arch/powerpc/sysdev/axonram.c
@@ -57,6 +57,8 @@
57#define AXON_RAM_SECTOR_SIZE 1 << AXON_RAM_SECTOR_SHIFT 57#define AXON_RAM_SECTOR_SIZE 1 << AXON_RAM_SECTOR_SHIFT
58#define AXON_RAM_IRQ_FLAGS IRQF_SHARED | IRQF_TRIGGER_RISING 58#define AXON_RAM_IRQ_FLAGS IRQF_SHARED | IRQF_TRIGGER_RISING
59 59
60static int azfs_major, azfs_minor;
61
60struct axon_ram_bank { 62struct axon_ram_bank {
61 struct of_device *device; 63 struct of_device *device;
62 struct gendisk *disk; 64 struct gendisk *disk;
@@ -148,7 +150,10 @@ axon_ram_direct_access(struct block_device *device, sector_t sector,
148 struct axon_ram_bank *bank = device->bd_disk->private_data; 150 struct axon_ram_bank *bank = device->bd_disk->private_data;
149 loff_t offset; 151 loff_t offset;
150 152
151 offset = sector << AXON_RAM_SECTOR_SHIFT; 153 offset = sector;
154 if (device->bd_part != NULL)
155 offset += device->bd_part->start_sect;
156 offset <<= AXON_RAM_SECTOR_SHIFT;
152 if (offset >= bank->size) { 157 if (offset >= bank->size) {
153 dev_err(&bank->device->dev, "Access outside of address space\n"); 158 dev_err(&bank->device->dev, "Access outside of address space\n");
154 return -ERANGE; 159 return -ERANGE;
@@ -227,19 +232,14 @@ axon_ram_probe(struct of_device *device, const struct of_device_id *device_id)
227 goto failed; 232 goto failed;
228 } 233 }
229 234
230 bank->disk->first_minor = 0; 235 bank->disk->major = azfs_major;
236 bank->disk->first_minor = azfs_minor;
231 bank->disk->fops = &axon_ram_devops; 237 bank->disk->fops = &axon_ram_devops;
232 bank->disk->private_data = bank; 238 bank->disk->private_data = bank;
233 bank->disk->driverfs_dev = &device->dev; 239 bank->disk->driverfs_dev = &device->dev;
234 240
235 sprintf(bank->disk->disk_name, "%s%d", 241 sprintf(bank->disk->disk_name, "%s%d",
236 AXON_RAM_DEVICE_NAME, axon_ram_bank_id); 242 AXON_RAM_DEVICE_NAME, axon_ram_bank_id);
237 bank->disk->major = register_blkdev(0, bank->disk->disk_name);
238 if (bank->disk->major < 0) {
239 dev_err(&device->dev, "Cannot register block device\n");
240 rc = -EFAULT;
241 goto failed;
242 }
243 243
244 bank->disk->queue = blk_alloc_queue(GFP_KERNEL); 244 bank->disk->queue = blk_alloc_queue(GFP_KERNEL);
245 if (bank->disk->queue == NULL) { 245 if (bank->disk->queue == NULL) {
@@ -276,6 +276,8 @@ axon_ram_probe(struct of_device *device, const struct of_device_id *device_id)
276 goto failed; 276 goto failed;
277 } 277 }
278 278
279 azfs_minor += bank->disk->minors;
280
279 return 0; 281 return 0;
280 282
281failed: 283failed:
@@ -310,7 +312,6 @@ axon_ram_remove(struct of_device *device)
310 312
311 device_remove_file(&device->dev, &dev_attr_ecc); 313 device_remove_file(&device->dev, &dev_attr_ecc);
312 free_irq(bank->irq_id, device); 314 free_irq(bank->irq_id, device);
313 unregister_blkdev(bank->disk->major, bank->disk->disk_name);
314 del_gendisk(bank->disk); 315 del_gendisk(bank->disk);
315 iounmap((void __iomem *) bank->io_addr); 316 iounmap((void __iomem *) bank->io_addr);
316 kfree(bank); 317 kfree(bank);
@@ -341,6 +342,14 @@ static struct of_platform_driver axon_ram_driver = {
341static int __init 342static int __init
342axon_ram_init(void) 343axon_ram_init(void)
343{ 344{
345 azfs_major = register_blkdev(azfs_major, AXON_RAM_DEVICE_NAME);
346 if (azfs_major < 0) {
347 printk(KERN_ERR "%s cannot become block device major number\n",
348 AXON_RAM_MODULE_NAME);
349 return -EFAULT;
350 }
351 azfs_minor = 0;
352
344 return of_register_platform_driver(&axon_ram_driver); 353 return of_register_platform_driver(&axon_ram_driver);
345} 354}
346 355
@@ -351,6 +360,7 @@ static void __exit
351axon_ram_exit(void) 360axon_ram_exit(void)
352{ 361{
353 of_unregister_platform_driver(&axon_ram_driver); 362 of_unregister_platform_driver(&axon_ram_driver);
363 unregister_blkdev(azfs_major, AXON_RAM_DEVICE_NAME);
354} 364}
355 365
356module_init(axon_ram_init); 366module_init(axon_ram_init);
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 005c2ecf976f..de8c8b542cfa 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -149,7 +149,8 @@ static void dart_flush(struct iommu_table *tbl)
149 149
150static void dart_build(struct iommu_table *tbl, long index, 150static void dart_build(struct iommu_table *tbl, long index,
151 long npages, unsigned long uaddr, 151 long npages, unsigned long uaddr,
152 enum dma_data_direction direction) 152 enum dma_data_direction direction,
153 struct dma_attrs *attrs)
153{ 154{
154 unsigned int *dp; 155 unsigned int *dp;
155 unsigned int rpn; 156 unsigned int rpn;
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 87b0aa13ab48..61e6d77efa4f 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -27,6 +27,7 @@
27#include <sysdev/fsl_soc.h> 27#include <sysdev/fsl_soc.h>
28#include <sysdev/fsl_pci.h> 28#include <sysdev/fsl_pci.h>
29 29
30#if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx)
30/* atmu setup for fsl pci/pcie controller */ 31/* atmu setup for fsl pci/pcie controller */
31void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc) 32void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc)
32{ 33{
@@ -248,3 +249,63 @@ DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8536, quirk_fsl_pcie_header);
248DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header); 249DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header);
249DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header); 250DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header);
250DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header); 251DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header);
252#endif /* CONFIG_PPC_85xx || CONFIG_PPC_86xx */
253
254#if defined(CONFIG_PPC_83xx)
255int __init mpc83xx_add_bridge(struct device_node *dev)
256{
257 int len;
258 struct pci_controller *hose;
259 struct resource rsrc;
260 const int *bus_range;
261 int primary = 1, has_address = 0;
262 phys_addr_t immr = get_immrbase();
263
264 pr_debug("Adding PCI host bridge %s\n", dev->full_name);
265
266 /* Fetch host bridge registers address */
267 has_address = (of_address_to_resource(dev, 0, &rsrc) == 0);
268
269 /* Get bus range if any */
270 bus_range = of_get_property(dev, "bus-range", &len);
271 if (bus_range == NULL || len < 2 * sizeof(int)) {
272 printk(KERN_WARNING "Can't get bus-range for %s, assume"
273 " bus 0\n", dev->full_name);
274 }
275
276 ppc_pci_flags |= PPC_PCI_REASSIGN_ALL_BUS;
277 hose = pcibios_alloc_controller(dev);
278 if (!hose)
279 return -ENOMEM;
280
281 hose->first_busno = bus_range ? bus_range[0] : 0;
282 hose->last_busno = bus_range ? bus_range[1] : 0xff;
283
284 /* MPC83xx supports up to two host controllers one at 0x8500 from immrbar
285 * the other at 0x8600, we consider the 0x8500 the primary controller
286 */
287 /* PCI 1 */
288 if ((rsrc.start & 0xfffff) == 0x8500) {
289 setup_indirect_pci(hose, immr + 0x8300, immr + 0x8304, 0);
290 }
291 /* PCI 2 */
292 if ((rsrc.start & 0xfffff) == 0x8600) {
293 setup_indirect_pci(hose, immr + 0x8380, immr + 0x8384, 0);
294 primary = 0;
295 }
296
297 printk(KERN_INFO "Found MPC83xx PCI host bridge at 0x%016llx. "
298 "Firmware bus number: %d->%d\n",
299 (unsigned long long)rsrc.start, hose->first_busno,
300 hose->last_busno);
301
302 pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
303 hose, hose->cfg_addr, hose->cfg_data);
304
305 /* Interpret the "ranges" property */
306 /* This also maps the I/O region and sets isa_io/mem_base */
307 pci_process_bridge_OF_ranges(hose, dev, primary);
308
309 return 0;
310}
311#endif /* CONFIG_PPC_83xx */
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index 37b04ad26571..13f30c2a61e7 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -83,6 +83,7 @@ struct ccsr_pci {
83 83
84extern int fsl_add_bridge(struct device_node *dev, int is_primary); 84extern int fsl_add_bridge(struct device_node *dev, int is_primary);
85extern void fsl_pcibios_fixup_bus(struct pci_bus *bus); 85extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
86extern int mpc83xx_add_bridge(struct device_node *dev);
86 87
87#endif /* __POWERPC_FSL_PCI_H */ 88#endif /* __POWERPC_FSL_PCI_H */
88#endif /* __KERNEL__ */ 89#endif /* __KERNEL__ */
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index ebcec7362f95..214388e11807 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -207,66 +207,58 @@ static int __init of_add_fixed_phys(void)
207arch_initcall(of_add_fixed_phys); 207arch_initcall(of_add_fixed_phys);
208#endif /* CONFIG_FIXED_PHY */ 208#endif /* CONFIG_FIXED_PHY */
209 209
210static int __init gfar_mdio_of_init(void) 210static int gfar_mdio_of_init_one(struct device_node *np)
211{ 211{
212 struct device_node *np = NULL; 212 int k;
213 struct device_node *child = NULL;
214 struct gianfar_mdio_data mdio_data;
213 struct platform_device *mdio_dev; 215 struct platform_device *mdio_dev;
214 struct resource res; 216 struct resource res;
215 int ret; 217 int ret;
216 218
217 np = of_find_compatible_node(np, NULL, "fsl,gianfar-mdio"); 219 memset(&res, 0, sizeof(res));
220 memset(&mdio_data, 0, sizeof(mdio_data));
218 221
219 /* try the deprecated version */ 222 ret = of_address_to_resource(np, 0, &res);
220 if (!np) 223 if (ret)
221 np = of_find_compatible_node(np, "mdio", "gianfar"); 224 return ret;
222 225
223 if (np) { 226 mdio_dev = platform_device_register_simple("fsl-gianfar_mdio",
224 int k; 227 res.start&0xfffff, &res, 1);
225 struct device_node *child = NULL; 228 if (IS_ERR(mdio_dev))
226 struct gianfar_mdio_data mdio_data; 229 return PTR_ERR(mdio_dev);
227 230
228 memset(&res, 0, sizeof(res)); 231 for (k = 0; k < 32; k++)
229 memset(&mdio_data, 0, sizeof(mdio_data)); 232 mdio_data.irq[k] = PHY_POLL;
230 233
231 ret = of_address_to_resource(np, 0, &res); 234 while ((child = of_get_next_child(np, child)) != NULL) {
232 if (ret) 235 int irq = irq_of_parse_and_map(child, 0);
233 goto err; 236 if (irq != NO_IRQ) {
234 237 const u32 *id = of_get_property(child, "reg", NULL);
235 mdio_dev = 238 mdio_data.irq[*id] = irq;
236 platform_device_register_simple("fsl-gianfar_mdio",
237 res.start, &res, 1);
238 if (IS_ERR(mdio_dev)) {
239 ret = PTR_ERR(mdio_dev);
240 goto err;
241 } 239 }
240 }
242 241
243 for (k = 0; k < 32; k++) 242 ret = platform_device_add_data(mdio_dev, &mdio_data,
244 mdio_data.irq[k] = PHY_POLL; 243 sizeof(struct gianfar_mdio_data));
244 if (ret)
245 platform_device_unregister(mdio_dev);
245 246
246 while ((child = of_get_next_child(np, child)) != NULL) { 247 return ret;
247 int irq = irq_of_parse_and_map(child, 0); 248}
248 if (irq != NO_IRQ) {
249 const u32 *id = of_get_property(child,
250 "reg", NULL);
251 mdio_data.irq[*id] = irq;
252 }
253 }
254 249
255 ret = 250static int __init gfar_mdio_of_init(void)
256 platform_device_add_data(mdio_dev, &mdio_data, 251{
257 sizeof(struct gianfar_mdio_data)); 252 struct device_node *np = NULL;
258 if (ret)
259 goto unreg;
260 }
261 253
262 of_node_put(np); 254 for_each_compatible_node(np, NULL, "fsl,gianfar-mdio")
263 return 0; 255 gfar_mdio_of_init_one(np);
264 256
265unreg: 257 /* try the deprecated version */
266 platform_device_unregister(mdio_dev); 258 for_each_compatible_node(np, "mdio", "gianfar");
267err: 259 gfar_mdio_of_init_one(np);
268 of_node_put(np); 260
269 return ret; 261 return 0;
270} 262}
271 263
272arch_initcall(gfar_mdio_of_init); 264arch_initcall(gfar_mdio_of_init);
@@ -296,6 +288,9 @@ static int __init gfar_of_init(void)
296 const phandle *ph; 288 const phandle *ph;
297 int n_res = 2; 289 int n_res = 2;
298 290
291 if (!of_device_is_available(np))
292 continue;
293
299 memset(r, 0, sizeof(r)); 294 memset(r, 0, sizeof(r));
300 memset(&gfar_data, 0, sizeof(gfar_data)); 295 memset(&gfar_data, 0, sizeof(gfar_data));
301 296
@@ -357,6 +352,9 @@ static int __init gfar_of_init(void)
357 else 352 else
358 gfar_data.interface = PHY_INTERFACE_MODE_MII; 353 gfar_data.interface = PHY_INTERFACE_MODE_MII;
359 354
355 if (of_get_property(np, "fsl,magic-packet", NULL))
356 gfar_data.device_flags |= FSL_GIANFAR_DEV_HAS_MAGIC_PACKET;
357
360 ph = of_get_property(np, "phy-handle", NULL); 358 ph = of_get_property(np, "phy-handle", NULL);
361 if (ph == NULL) { 359 if (ph == NULL) {
362 u32 *fixed_link; 360 u32 *fixed_link;
@@ -390,7 +388,7 @@ static int __init gfar_of_init(void)
390 388
391 gfar_data.phy_id = *id; 389 gfar_data.phy_id = *id;
392 snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "%llx", 390 snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "%llx",
393 (unsigned long long)res.start); 391 (unsigned long long)res.start&0xfffff);
394 392
395 of_node_put(phy); 393 of_node_put(phy);
396 of_node_put(mdio); 394 of_node_put(mdio);
diff --git a/arch/powerpc/sysdev/fsl_soc.h b/arch/powerpc/sysdev/fsl_soc.h
index 52c831fa1886..024299887352 100644
--- a/arch/powerpc/sysdev/fsl_soc.h
+++ b/arch/powerpc/sysdev/fsl_soc.h
@@ -10,6 +10,7 @@ extern u32 get_baudrate(void);
10extern u32 fsl_get_sys_freq(void); 10extern u32 fsl_get_sys_freq(void);
11 11
12struct spi_board_info; 12struct spi_board_info;
13struct device_node;
13 14
14extern int fsl_spi_init(struct spi_board_info *board_infos, 15extern int fsl_spi_init(struct spi_board_info *board_infos,
15 unsigned int num_board_infos, 16 unsigned int num_board_infos,
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index caba1c0be5a7..88a983ece5c9 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -22,6 +22,7 @@
22#include <linux/device.h> 22#include <linux/device.h>
23#include <linux/bootmem.h> 23#include <linux/bootmem.h>
24#include <linux/spinlock.h> 24#include <linux/spinlock.h>
25#include <linux/fsl_devices.h>
25#include <asm/irq.h> 26#include <asm/irq.h>
26#include <asm/io.h> 27#include <asm/io.h>
27#include <asm/prom.h> 28#include <asm/prom.h>
@@ -889,8 +890,78 @@ unsigned int ipic_get_irq(void)
889 return irq_linear_revmap(primary_ipic->irqhost, irq); 890 return irq_linear_revmap(primary_ipic->irqhost, irq);
890} 891}
891 892
893#ifdef CONFIG_PM
894static struct {
895 u32 sicfr;
896 u32 siprr[2];
897 u32 simsr[2];
898 u32 sicnr;
899 u32 smprr[2];
900 u32 semsr;
901 u32 secnr;
902 u32 sermr;
903 u32 sercr;
904} ipic_saved_state;
905
906static int ipic_suspend(struct sys_device *sdev, pm_message_t state)
907{
908 struct ipic *ipic = primary_ipic;
909
910 ipic_saved_state.sicfr = ipic_read(ipic->regs, IPIC_SICFR);
911 ipic_saved_state.siprr[0] = ipic_read(ipic->regs, IPIC_SIPRR_A);
912 ipic_saved_state.siprr[1] = ipic_read(ipic->regs, IPIC_SIPRR_D);
913 ipic_saved_state.simsr[0] = ipic_read(ipic->regs, IPIC_SIMSR_H);
914 ipic_saved_state.simsr[1] = ipic_read(ipic->regs, IPIC_SIMSR_L);
915 ipic_saved_state.sicnr = ipic_read(ipic->regs, IPIC_SICNR);
916 ipic_saved_state.smprr[0] = ipic_read(ipic->regs, IPIC_SMPRR_A);
917 ipic_saved_state.smprr[1] = ipic_read(ipic->regs, IPIC_SMPRR_B);
918 ipic_saved_state.semsr = ipic_read(ipic->regs, IPIC_SEMSR);
919 ipic_saved_state.secnr = ipic_read(ipic->regs, IPIC_SECNR);
920 ipic_saved_state.sermr = ipic_read(ipic->regs, IPIC_SERMR);
921 ipic_saved_state.sercr = ipic_read(ipic->regs, IPIC_SERCR);
922
923 if (fsl_deep_sleep()) {
924 /* In deep sleep, make sure there can be no
925 * pending interrupts, as this can cause
926 * problems on 831x.
927 */
928 ipic_write(ipic->regs, IPIC_SIMSR_H, 0);
929 ipic_write(ipic->regs, IPIC_SIMSR_L, 0);
930 ipic_write(ipic->regs, IPIC_SEMSR, 0);
931 ipic_write(ipic->regs, IPIC_SERMR, 0);
932 }
933
934 return 0;
935}
936
937static int ipic_resume(struct sys_device *sdev)
938{
939 struct ipic *ipic = primary_ipic;
940
941 ipic_write(ipic->regs, IPIC_SICFR, ipic_saved_state.sicfr);
942 ipic_write(ipic->regs, IPIC_SIPRR_A, ipic_saved_state.siprr[0]);
943 ipic_write(ipic->regs, IPIC_SIPRR_D, ipic_saved_state.siprr[1]);
944 ipic_write(ipic->regs, IPIC_SIMSR_H, ipic_saved_state.simsr[0]);
945 ipic_write(ipic->regs, IPIC_SIMSR_L, ipic_saved_state.simsr[1]);
946 ipic_write(ipic->regs, IPIC_SICNR, ipic_saved_state.sicnr);
947 ipic_write(ipic->regs, IPIC_SMPRR_A, ipic_saved_state.smprr[0]);
948 ipic_write(ipic->regs, IPIC_SMPRR_B, ipic_saved_state.smprr[1]);
949 ipic_write(ipic->regs, IPIC_SEMSR, ipic_saved_state.semsr);
950 ipic_write(ipic->regs, IPIC_SECNR, ipic_saved_state.secnr);
951 ipic_write(ipic->regs, IPIC_SERMR, ipic_saved_state.sermr);
952 ipic_write(ipic->regs, IPIC_SERCR, ipic_saved_state.sercr);
953
954 return 0;
955}
956#else
957#define ipic_suspend NULL
958#define ipic_resume NULL
959#endif
960
892static struct sysdev_class ipic_sysclass = { 961static struct sysdev_class ipic_sysclass = {
893 .name = "ipic", 962 .name = "ipic",
963 .suspend = ipic_suspend,
964 .resume = ipic_resume,
894}; 965};
895 966
896static struct sys_device device_ipic = { 967static struct sys_device device_ipic = {
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c
index 9e82d7e725a5..b3b73ae57d6d 100644
--- a/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/arch/powerpc/sysdev/qe_lib/qe.c
@@ -64,7 +64,7 @@ static phys_addr_t qebase = -1;
64phys_addr_t get_qe_base(void) 64phys_addr_t get_qe_base(void)
65{ 65{
66 struct device_node *qe; 66 struct device_node *qe;
67 unsigned int size; 67 int size;
68 const u32 *prop; 68 const u32 *prop;
69 69
70 if (qebase != -1) 70 if (qebase != -1)
@@ -158,7 +158,7 @@ static unsigned int brg_clk = 0;
158unsigned int qe_get_brg_clk(void) 158unsigned int qe_get_brg_clk(void)
159{ 159{
160 struct device_node *qe; 160 struct device_node *qe;
161 unsigned int size; 161 int size;
162 const u32 *prop; 162 const u32 *prop;
163 163
164 if (brg_clk) 164 if (brg_clk)
@@ -305,7 +305,7 @@ EXPORT_SYMBOL(qe_put_snum);
305 305
306static int qe_sdma_init(void) 306static int qe_sdma_init(void)
307{ 307{
308 struct sdma *sdma = &qe_immr->sdma; 308 struct sdma __iomem *sdma = &qe_immr->sdma;
309 unsigned long sdma_buf_offset; 309 unsigned long sdma_buf_offset;
310 310
311 if (!sdma) 311 if (!sdma)
diff --git a/arch/powerpc/sysdev/qe_lib/ucc.c b/arch/powerpc/sysdev/qe_lib/ucc.c
index d3c7f5af9bc8..1d78071aad7d 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc.c
+++ b/arch/powerpc/sysdev/qe_lib/ucc.c
@@ -88,7 +88,7 @@ int ucc_set_type(unsigned int ucc_num, enum ucc_speed_type speed)
88 return 0; 88 return 0;
89} 89}
90 90
91static void get_cmxucr_reg(unsigned int ucc_num, __be32 **cmxucr, 91static void get_cmxucr_reg(unsigned int ucc_num, __be32 __iomem **cmxucr,
92 unsigned int *reg_num, unsigned int *shift) 92 unsigned int *reg_num, unsigned int *shift)
93{ 93{
94 unsigned int cmx = ((ucc_num & 1) << 1) + (ucc_num > 3); 94 unsigned int cmx = ((ucc_num & 1) << 1) + (ucc_num > 3);
@@ -100,7 +100,7 @@ static void get_cmxucr_reg(unsigned int ucc_num, __be32 **cmxucr,
100 100
101int ucc_mux_set_grant_tsa_bkpt(unsigned int ucc_num, int set, u32 mask) 101int ucc_mux_set_grant_tsa_bkpt(unsigned int ucc_num, int set, u32 mask)
102{ 102{
103 __be32 *cmxucr; 103 __be32 __iomem *cmxucr;
104 unsigned int reg_num; 104 unsigned int reg_num;
105 unsigned int shift; 105 unsigned int shift;
106 106
@@ -121,7 +121,7 @@ int ucc_mux_set_grant_tsa_bkpt(unsigned int ucc_num, int set, u32 mask)
121int ucc_set_qe_mux_rxtx(unsigned int ucc_num, enum qe_clock clock, 121int ucc_set_qe_mux_rxtx(unsigned int ucc_num, enum qe_clock clock,
122 enum comm_dir mode) 122 enum comm_dir mode)
123{ 123{
124 __be32 *cmxucr; 124 __be32 __iomem *cmxucr;
125 unsigned int reg_num; 125 unsigned int reg_num;
126 unsigned int shift; 126 unsigned int shift;
127 u32 clock_bits = 0; 127 u32 clock_bits = 0;
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_fast.c b/arch/powerpc/sysdev/qe_lib/ucc_fast.c
index bcf88e6ce962..1aecb075a72e 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c
+++ b/arch/powerpc/sysdev/qe_lib/ucc_fast.c
@@ -46,7 +46,7 @@ void ucc_fast_dump_regs(struct ucc_fast_private * uccf)
46 printk(KERN_INFO "uccm : addr=0x%p, val=0x%08x\n", 46 printk(KERN_INFO "uccm : addr=0x%p, val=0x%08x\n",
47 &uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm)); 47 &uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm));
48 printk(KERN_INFO "uccs : addr=0x%p, val=0x%02x\n", 48 printk(KERN_INFO "uccs : addr=0x%p, val=0x%02x\n",
49 &uccf->uf_regs->uccs, uccf->uf_regs->uccs); 49 &uccf->uf_regs->uccs, in_8(&uccf->uf_regs->uccs));
50 printk(KERN_INFO "urfb : addr=0x%p, val=0x%08x\n", 50 printk(KERN_INFO "urfb : addr=0x%p, val=0x%08x\n",
51 &uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb)); 51 &uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb));
52 printk(KERN_INFO "urfs : addr=0x%p, val=0x%04x\n", 52 printk(KERN_INFO "urfs : addr=0x%p, val=0x%04x\n",
@@ -68,7 +68,7 @@ void ucc_fast_dump_regs(struct ucc_fast_private * uccf)
68 printk(KERN_INFO "urtry : addr=0x%p, val=0x%08x\n", 68 printk(KERN_INFO "urtry : addr=0x%p, val=0x%08x\n",
69 &uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry)); 69 &uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry));
70 printk(KERN_INFO "guemr : addr=0x%p, val=0x%02x\n", 70 printk(KERN_INFO "guemr : addr=0x%p, val=0x%02x\n",
71 &uccf->uf_regs->guemr, uccf->uf_regs->guemr); 71 &uccf->uf_regs->guemr, in_8(&uccf->uf_regs->guemr));
72} 72}
73EXPORT_SYMBOL(ucc_fast_dump_regs); 73EXPORT_SYMBOL(ucc_fast_dump_regs);
74 74
@@ -96,7 +96,7 @@ EXPORT_SYMBOL(ucc_fast_transmit_on_demand);
96 96
97void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode) 97void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode)
98{ 98{
99 struct ucc_fast *uf_regs; 99 struct ucc_fast __iomem *uf_regs;
100 u32 gumr; 100 u32 gumr;
101 101
102 uf_regs = uccf->uf_regs; 102 uf_regs = uccf->uf_regs;
@@ -117,7 +117,7 @@ EXPORT_SYMBOL(ucc_fast_enable);
117 117
118void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode) 118void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode)
119{ 119{
120 struct ucc_fast *uf_regs; 120 struct ucc_fast __iomem *uf_regs;
121 u32 gumr; 121 u32 gumr;
122 122
123 uf_regs = uccf->uf_regs; 123 uf_regs = uccf->uf_regs;
@@ -139,7 +139,7 @@ EXPORT_SYMBOL(ucc_fast_disable);
139int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** uccf_ret) 139int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** uccf_ret)
140{ 140{
141 struct ucc_fast_private *uccf; 141 struct ucc_fast_private *uccf;
142 struct ucc_fast *uf_regs; 142 struct ucc_fast __iomem *uf_regs;
143 u32 gumr; 143 u32 gumr;
144 int ret; 144 int ret;
145 145
@@ -216,10 +216,10 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
216 uccf->stopped_tx = 0; 216 uccf->stopped_tx = 0;
217 uccf->stopped_rx = 0; 217 uccf->stopped_rx = 0;
218 uf_regs = uccf->uf_regs; 218 uf_regs = uccf->uf_regs;
219 uccf->p_ucce = (u32 *) & (uf_regs->ucce); 219 uccf->p_ucce = &uf_regs->ucce;
220 uccf->p_uccm = (u32 *) & (uf_regs->uccm); 220 uccf->p_uccm = &uf_regs->uccm;
221#ifdef CONFIG_UGETH_TX_ON_DEMAND 221#ifdef CONFIG_UGETH_TX_ON_DEMAND
222 uccf->p_utodr = (u16 *) & (uf_regs->utodr); 222 uccf->p_utodr = &uf_regs->utodr;
223#endif 223#endif
224#ifdef STATISTICS 224#ifdef STATISTICS
225 uccf->tx_frames = 0; 225 uccf->tx_frames = 0;
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index b6781030cfbd..b795b3e24afd 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -864,7 +864,8 @@ int setup_profiling_timer(unsigned int multiplier)
864} 864}
865 865
866#ifdef CONFIG_HOTPLUG_CPU 866#ifdef CONFIG_HOTPLUG_CPU
867static ssize_t cpu_configure_show(struct sys_device *dev, char *buf) 867static ssize_t cpu_configure_show(struct sys_device *dev,
868 struct sysdev_attribute *attr, char *buf)
868{ 869{
869 ssize_t count; 870 ssize_t count;
870 871
@@ -874,8 +875,9 @@ static ssize_t cpu_configure_show(struct sys_device *dev, char *buf)
874 return count; 875 return count;
875} 876}
876 877
877static ssize_t cpu_configure_store(struct sys_device *dev, const char *buf, 878static ssize_t cpu_configure_store(struct sys_device *dev,
878 size_t count) 879 struct sysdev_attribute *attr,
880 const char *buf, size_t count)
879{ 881{
880 int cpu = dev->id; 882 int cpu = dev->id;
881 int val, rc; 883 int val, rc;
@@ -922,7 +924,8 @@ out:
922static SYSDEV_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store); 924static SYSDEV_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store);
923#endif /* CONFIG_HOTPLUG_CPU */ 925#endif /* CONFIG_HOTPLUG_CPU */
924 926
925static ssize_t cpu_polarization_show(struct sys_device *dev, char *buf) 927static ssize_t cpu_polarization_show(struct sys_device *dev,
928 struct sysdev_attribute *attr, char *buf)
926{ 929{
927 int cpu = dev->id; 930 int cpu = dev->id;
928 ssize_t count; 931 ssize_t count;
@@ -950,7 +953,8 @@ static ssize_t cpu_polarization_show(struct sys_device *dev, char *buf)
950} 953}
951static SYSDEV_ATTR(polarization, 0444, cpu_polarization_show, NULL); 954static SYSDEV_ATTR(polarization, 0444, cpu_polarization_show, NULL);
952 955
953static ssize_t show_cpu_address(struct sys_device *dev, char *buf) 956static ssize_t show_cpu_address(struct sys_device *dev,
957 struct sysdev_attribute *attr, char *buf)
954{ 958{
955 return sprintf(buf, "%d\n", __cpu_logical_map[dev->id]); 959 return sprintf(buf, "%d\n", __cpu_logical_map[dev->id]);
956} 960}
@@ -970,7 +974,8 @@ static struct attribute_group cpu_common_attr_group = {
970 .attrs = cpu_common_attrs, 974 .attrs = cpu_common_attrs,
971}; 975};
972 976
973static ssize_t show_capability(struct sys_device *dev, char *buf) 977static ssize_t show_capability(struct sys_device *dev,
978 struct sysdev_attribute *attr, char *buf)
974{ 979{
975 unsigned int capability; 980 unsigned int capability;
976 int rc; 981 int rc;
@@ -982,7 +987,8 @@ static ssize_t show_capability(struct sys_device *dev, char *buf)
982} 987}
983static SYSDEV_ATTR(capability, 0444, show_capability, NULL); 988static SYSDEV_ATTR(capability, 0444, show_capability, NULL);
984 989
985static ssize_t show_idle_count(struct sys_device *dev, char *buf) 990static ssize_t show_idle_count(struct sys_device *dev,
991 struct sysdev_attribute *attr, char *buf)
986{ 992{
987 struct s390_idle_data *idle; 993 struct s390_idle_data *idle;
988 unsigned long long idle_count; 994 unsigned long long idle_count;
@@ -995,7 +1001,8 @@ static ssize_t show_idle_count(struct sys_device *dev, char *buf)
995} 1001}
996static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); 1002static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL);
997 1003
998static ssize_t show_idle_time(struct sys_device *dev, char *buf) 1004static ssize_t show_idle_time(struct sys_device *dev,
1005 struct sysdev_attribute *attr, char *buf)
999{ 1006{
1000 struct s390_idle_data *idle; 1007 struct s390_idle_data *idle;
1001 unsigned long long new_time; 1008 unsigned long long new_time;
@@ -1112,7 +1119,9 @@ out:
1112 return rc; 1119 return rc;
1113} 1120}
1114 1121
1115static ssize_t __ref rescan_store(struct sys_device *dev, const char *buf, 1122static ssize_t __ref rescan_store(struct sys_device *dev,
1123 struct sysdev_attribute *attr,
1124 const char *buf,
1116 size_t count) 1125 size_t count)
1117{ 1126{
1118 int rc; 1127 int rc;
@@ -1123,7 +1132,9 @@ static ssize_t __ref rescan_store(struct sys_device *dev, const char *buf,
1123static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store); 1132static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store);
1124#endif /* CONFIG_HOTPLUG_CPU */ 1133#endif /* CONFIG_HOTPLUG_CPU */
1125 1134
1126static ssize_t dispatching_show(struct sys_device *dev, char *buf) 1135static ssize_t dispatching_show(struct sys_device *dev,
1136 struct sysdev_attribute *attr,
1137 char *buf)
1127{ 1138{
1128 ssize_t count; 1139 ssize_t count;
1129 1140
@@ -1133,8 +1144,9 @@ static ssize_t dispatching_show(struct sys_device *dev, char *buf)
1133 return count; 1144 return count;
1134} 1145}
1135 1146
1136static ssize_t dispatching_store(struct sys_device *dev, const char *buf, 1147static ssize_t dispatching_store(struct sys_device *dev,
1137 size_t count) 1148 struct sysdev_attribute *attr,
1149 const char *buf, size_t count)
1138{ 1150{
1139 int val, rc; 1151 int val, rc;
1140 char delim; 1152 char delim;
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index f2cede3947b2..ab70d9bd9261 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -1100,7 +1100,9 @@ static inline struct etr_aib *etr_aib_from_dev(struct sys_device *dev)
1100 return etr_port1_online ? &etr_port1 : NULL; 1100 return etr_port1_online ? &etr_port1 : NULL;
1101} 1101}
1102 1102
1103static ssize_t etr_online_show(struct sys_device *dev, char *buf) 1103static ssize_t etr_online_show(struct sys_device *dev,
1104 struct sysdev_attribute *attr,
1105 char *buf)
1104{ 1106{
1105 unsigned int online; 1107 unsigned int online;
1106 1108
@@ -1109,7 +1111,8 @@ static ssize_t etr_online_show(struct sys_device *dev, char *buf)
1109} 1111}
1110 1112
1111static ssize_t etr_online_store(struct sys_device *dev, 1113static ssize_t etr_online_store(struct sys_device *dev,
1112 const char *buf, size_t count) 1114 struct sysdev_attribute *attr,
1115 const char *buf, size_t count)
1113{ 1116{
1114 unsigned int value; 1117 unsigned int value;
1115 1118
@@ -1136,7 +1139,9 @@ static ssize_t etr_online_store(struct sys_device *dev,
1136 1139
1137static SYSDEV_ATTR(online, 0600, etr_online_show, etr_online_store); 1140static SYSDEV_ATTR(online, 0600, etr_online_show, etr_online_store);
1138 1141
1139static ssize_t etr_stepping_control_show(struct sys_device *dev, char *buf) 1142static ssize_t etr_stepping_control_show(struct sys_device *dev,
1143 struct sysdev_attribute *attr,
1144 char *buf)
1140{ 1145{
1141 return sprintf(buf, "%i\n", (dev == &etr_port0_dev) ? 1146 return sprintf(buf, "%i\n", (dev == &etr_port0_dev) ?
1142 etr_eacr.e0 : etr_eacr.e1); 1147 etr_eacr.e0 : etr_eacr.e1);
@@ -1144,7 +1149,8 @@ static ssize_t etr_stepping_control_show(struct sys_device *dev, char *buf)
1144 1149
1145static SYSDEV_ATTR(stepping_control, 0400, etr_stepping_control_show, NULL); 1150static SYSDEV_ATTR(stepping_control, 0400, etr_stepping_control_show, NULL);
1146 1151
1147static ssize_t etr_mode_code_show(struct sys_device *dev, char *buf) 1152static ssize_t etr_mode_code_show(struct sys_device *dev,
1153 struct sysdev_attribute *attr, char *buf)
1148{ 1154{
1149 if (!etr_port0_online && !etr_port1_online) 1155 if (!etr_port0_online && !etr_port1_online)
1150 /* Status word is not uptodate if both ports are offline. */ 1156 /* Status word is not uptodate if both ports are offline. */
@@ -1155,7 +1161,8 @@ static ssize_t etr_mode_code_show(struct sys_device *dev, char *buf)
1155 1161
1156static SYSDEV_ATTR(state_code, 0400, etr_mode_code_show, NULL); 1162static SYSDEV_ATTR(state_code, 0400, etr_mode_code_show, NULL);
1157 1163
1158static ssize_t etr_untuned_show(struct sys_device *dev, char *buf) 1164static ssize_t etr_untuned_show(struct sys_device *dev,
1165 struct sysdev_attribute *attr, char *buf)
1159{ 1166{
1160 struct etr_aib *aib = etr_aib_from_dev(dev); 1167 struct etr_aib *aib = etr_aib_from_dev(dev);
1161 1168
@@ -1166,7 +1173,8 @@ static ssize_t etr_untuned_show(struct sys_device *dev, char *buf)
1166 1173
1167static SYSDEV_ATTR(untuned, 0400, etr_untuned_show, NULL); 1174static SYSDEV_ATTR(untuned, 0400, etr_untuned_show, NULL);
1168 1175
1169static ssize_t etr_network_id_show(struct sys_device *dev, char *buf) 1176static ssize_t etr_network_id_show(struct sys_device *dev,
1177 struct sysdev_attribute *attr, char *buf)
1170{ 1178{
1171 struct etr_aib *aib = etr_aib_from_dev(dev); 1179 struct etr_aib *aib = etr_aib_from_dev(dev);
1172 1180
@@ -1177,7 +1185,8 @@ static ssize_t etr_network_id_show(struct sys_device *dev, char *buf)
1177 1185
1178static SYSDEV_ATTR(network, 0400, etr_network_id_show, NULL); 1186static SYSDEV_ATTR(network, 0400, etr_network_id_show, NULL);
1179 1187
1180static ssize_t etr_id_show(struct sys_device *dev, char *buf) 1188static ssize_t etr_id_show(struct sys_device *dev,
1189 struct sysdev_attribute *attr, char *buf)
1181{ 1190{
1182 struct etr_aib *aib = etr_aib_from_dev(dev); 1191 struct etr_aib *aib = etr_aib_from_dev(dev);
1183 1192
@@ -1188,7 +1197,8 @@ static ssize_t etr_id_show(struct sys_device *dev, char *buf)
1188 1197
1189static SYSDEV_ATTR(id, 0400, etr_id_show, NULL); 1198static SYSDEV_ATTR(id, 0400, etr_id_show, NULL);
1190 1199
1191static ssize_t etr_port_number_show(struct sys_device *dev, char *buf) 1200static ssize_t etr_port_number_show(struct sys_device *dev,
1201 struct sysdev_attribute *attr, char *buf)
1192{ 1202{
1193 struct etr_aib *aib = etr_aib_from_dev(dev); 1203 struct etr_aib *aib = etr_aib_from_dev(dev);
1194 1204
@@ -1199,7 +1209,8 @@ static ssize_t etr_port_number_show(struct sys_device *dev, char *buf)
1199 1209
1200static SYSDEV_ATTR(port, 0400, etr_port_number_show, NULL); 1210static SYSDEV_ATTR(port, 0400, etr_port_number_show, NULL);
1201 1211
1202static ssize_t etr_coupled_show(struct sys_device *dev, char *buf) 1212static ssize_t etr_coupled_show(struct sys_device *dev,
1213 struct sysdev_attribute *attr, char *buf)
1203{ 1214{
1204 struct etr_aib *aib = etr_aib_from_dev(dev); 1215 struct etr_aib *aib = etr_aib_from_dev(dev);
1205 1216
@@ -1210,7 +1221,8 @@ static ssize_t etr_coupled_show(struct sys_device *dev, char *buf)
1210 1221
1211static SYSDEV_ATTR(coupled, 0400, etr_coupled_show, NULL); 1222static SYSDEV_ATTR(coupled, 0400, etr_coupled_show, NULL);
1212 1223
1213static ssize_t etr_local_time_show(struct sys_device *dev, char *buf) 1224static ssize_t etr_local_time_show(struct sys_device *dev,
1225 struct sysdev_attribute *attr, char *buf)
1214{ 1226{
1215 struct etr_aib *aib = etr_aib_from_dev(dev); 1227 struct etr_aib *aib = etr_aib_from_dev(dev);
1216 1228
@@ -1221,7 +1233,8 @@ static ssize_t etr_local_time_show(struct sys_device *dev, char *buf)
1221 1233
1222static SYSDEV_ATTR(local_time, 0400, etr_local_time_show, NULL); 1234static SYSDEV_ATTR(local_time, 0400, etr_local_time_show, NULL);
1223 1235
1224static ssize_t etr_utc_offset_show(struct sys_device *dev, char *buf) 1236static ssize_t etr_utc_offset_show(struct sys_device *dev,
1237 struct sysdev_attribute *attr, char *buf)
1225{ 1238{
1226 struct etr_aib *aib = etr_aib_from_dev(dev); 1239 struct etr_aib *aib = etr_aib_from_dev(dev);
1227 1240
diff --git a/arch/sh/drivers/dma/dma-sysfs.c b/arch/sh/drivers/dma/dma-sysfs.c
index 51b57c0d1a3c..347ee11351ec 100644
--- a/arch/sh/drivers/dma/dma-sysfs.c
+++ b/arch/sh/drivers/dma/dma-sysfs.c
@@ -23,7 +23,8 @@ static struct sysdev_class dma_sysclass = {
23}; 23};
24EXPORT_SYMBOL(dma_sysclass); 24EXPORT_SYMBOL(dma_sysclass);
25 25
26static ssize_t dma_show_devices(struct sys_device *dev, char *buf) 26static ssize_t dma_show_devices(struct sys_device *dev,
27 struct sysdev_attribute *attr, char *buf)
27{ 28{
28 ssize_t len = 0; 29 ssize_t len = 0;
29 int i; 30 int i;
@@ -57,13 +58,15 @@ static int __init dma_sysclass_init(void)
57} 58}
58postcore_initcall(dma_sysclass_init); 59postcore_initcall(dma_sysclass_init);
59 60
60static ssize_t dma_show_dev_id(struct sys_device *dev, char *buf) 61static ssize_t dma_show_dev_id(struct sys_device *dev,
62 struct sysdev_attribute *attr, char *buf)
61{ 63{
62 struct dma_channel *channel = to_dma_channel(dev); 64 struct dma_channel *channel = to_dma_channel(dev);
63 return sprintf(buf, "%s\n", channel->dev_id); 65 return sprintf(buf, "%s\n", channel->dev_id);
64} 66}
65 67
66static ssize_t dma_store_dev_id(struct sys_device *dev, 68static ssize_t dma_store_dev_id(struct sys_device *dev,
69 struct sysdev_attribute *attr,
67 const char *buf, size_t count) 70 const char *buf, size_t count)
68{ 71{
69 struct dma_channel *channel = to_dma_channel(dev); 72 struct dma_channel *channel = to_dma_channel(dev);
@@ -74,6 +77,7 @@ static ssize_t dma_store_dev_id(struct sys_device *dev,
74static SYSDEV_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id); 77static SYSDEV_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id);
75 78
76static ssize_t dma_store_config(struct sys_device *dev, 79static ssize_t dma_store_config(struct sys_device *dev,
80 struct sysdev_attribute *attr,
77 const char *buf, size_t count) 81 const char *buf, size_t count)
78{ 82{
79 struct dma_channel *channel = to_dma_channel(dev); 83 struct dma_channel *channel = to_dma_channel(dev);
@@ -87,13 +91,15 @@ static ssize_t dma_store_config(struct sys_device *dev,
87 91
88static SYSDEV_ATTR(config, S_IWUSR, NULL, dma_store_config); 92static SYSDEV_ATTR(config, S_IWUSR, NULL, dma_store_config);
89 93
90static ssize_t dma_show_mode(struct sys_device *dev, char *buf) 94static ssize_t dma_show_mode(struct sys_device *dev,
95 struct sysdev_attribute *attr, char *buf)
91{ 96{
92 struct dma_channel *channel = to_dma_channel(dev); 97 struct dma_channel *channel = to_dma_channel(dev);
93 return sprintf(buf, "0x%08x\n", channel->mode); 98 return sprintf(buf, "0x%08x\n", channel->mode);
94} 99}
95 100
96static ssize_t dma_store_mode(struct sys_device *dev, 101static ssize_t dma_store_mode(struct sys_device *dev,
102 struct sysdev_attribute *attr,
97 const char *buf, size_t count) 103 const char *buf, size_t count)
98{ 104{
99 struct dma_channel *channel = to_dma_channel(dev); 105 struct dma_channel *channel = to_dma_channel(dev);
@@ -104,7 +110,8 @@ static ssize_t dma_store_mode(struct sys_device *dev,
104static SYSDEV_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode); 110static SYSDEV_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode);
105 111
106#define dma_ro_attr(field, fmt) \ 112#define dma_ro_attr(field, fmt) \
107static ssize_t dma_show_##field(struct sys_device *dev, char *buf) \ 113static ssize_t dma_show_##field(struct sys_device *dev, \
114 struct sysdev_attribute *attr, char *buf)\
108{ \ 115{ \
109 struct dma_channel *channel = to_dma_channel(dev); \ 116 struct dma_channel *channel = to_dma_channel(dev); \
110 return sprintf(buf, fmt, channel->field); \ 117 return sprintf(buf, fmt, channel->field); \
diff --git a/arch/sparc/kernel/apc.c b/arch/sparc/kernel/apc.c
index 6707422c9847..5267d48fb2c6 100644
--- a/arch/sparc/kernel/apc.c
+++ b/arch/sparc/kernel/apc.c
@@ -56,7 +56,7 @@ __setup("apc=", apc_setup);
56 * CPU idle callback function 56 * CPU idle callback function
57 * See .../arch/sparc/kernel/process.c 57 * See .../arch/sparc/kernel/process.c
58 */ 58 */
59void apc_swift_idle(void) 59static void apc_swift_idle(void)
60{ 60{
61#ifdef APC_DEBUG_LED 61#ifdef APC_DEBUG_LED
62 set_auxio(0x00, AUXIO_LED); 62 set_auxio(0x00, AUXIO_LED);
@@ -85,54 +85,70 @@ static int apc_release(struct inode *inode, struct file *f)
85 return 0; 85 return 0;
86} 86}
87 87
88static int apc_ioctl(struct inode *inode, struct file *f, 88static long apc_ioctl(struct file *f, unsigned int cmd, unsigned long __arg)
89 unsigned int cmd, unsigned long __arg)
90{ 89{
91 __u8 inarg, __user *arg; 90 __u8 inarg, __user *arg;
92 91
93 arg = (__u8 __user *) __arg; 92 arg = (__u8 __user *) __arg;
93
94 lock_kernel();
95
94 switch (cmd) { 96 switch (cmd) {
95 case APCIOCGFANCTL: 97 case APCIOCGFANCTL:
96 if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) 98 if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) {
97 return -EFAULT; 99 unlock_kernel();
100 return -EFAULT;
101 }
98 break; 102 break;
99 103
100 case APCIOCGCPWR: 104 case APCIOCGCPWR:
101 if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) 105 if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) {
106 unlock_kernel();
102 return -EFAULT; 107 return -EFAULT;
108 }
103 break; 109 break;
104 110
105 case APCIOCGBPORT: 111 case APCIOCGBPORT:
106 if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) 112 if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) {
113 unlock_kernel();
107 return -EFAULT; 114 return -EFAULT;
115 }
108 break; 116 break;
109 117
110 case APCIOCSFANCTL: 118 case APCIOCSFANCTL:
111 if (get_user(inarg, arg)) 119 if (get_user(inarg, arg)) {
120 unlock_kernel();
112 return -EFAULT; 121 return -EFAULT;
122 }
113 apc_writeb(inarg & APC_REGMASK, APC_FANCTL_REG); 123 apc_writeb(inarg & APC_REGMASK, APC_FANCTL_REG);
114 break; 124 break;
115 case APCIOCSCPWR: 125 case APCIOCSCPWR:
116 if (get_user(inarg, arg)) 126 if (get_user(inarg, arg)) {
127 unlock_kernel();
117 return -EFAULT; 128 return -EFAULT;
129 }
118 apc_writeb(inarg & APC_REGMASK, APC_CPOWER_REG); 130 apc_writeb(inarg & APC_REGMASK, APC_CPOWER_REG);
119 break; 131 break;
120 case APCIOCSBPORT: 132 case APCIOCSBPORT:
121 if (get_user(inarg, arg)) 133 if (get_user(inarg, arg)) {
134 unlock_kernel();
122 return -EFAULT; 135 return -EFAULT;
136 }
123 apc_writeb(inarg & APC_BPMASK, APC_BPORT_REG); 137 apc_writeb(inarg & APC_BPMASK, APC_BPORT_REG);
124 break; 138 break;
125 default: 139 default:
140 unlock_kernel();
126 return -EINVAL; 141 return -EINVAL;
127 }; 142 };
128 143
144 unlock_kernel();
129 return 0; 145 return 0;
130} 146}
131 147
132static const struct file_operations apc_fops = { 148static const struct file_operations apc_fops = {
133 .ioctl = apc_ioctl, 149 .unlocked_ioctl = apc_ioctl,
134 .open = apc_open, 150 .open = apc_open,
135 .release = apc_release, 151 .release = apc_release,
136}; 152};
137 153
138static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops }; 154static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops };
diff --git a/arch/sparc/kernel/asm-offsets.c b/arch/sparc/kernel/asm-offsets.c
index cd3f7694e9b9..b5bb99ed892c 100644
--- a/arch/sparc/kernel/asm-offsets.c
+++ b/arch/sparc/kernel/asm-offsets.c
@@ -18,18 +18,6 @@ int foo(void)
18{ 18{
19 DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread)); 19 DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
20 BLANK(); 20 BLANK();
21 /* XXX This is the stuff for sclow.S, kill it. */
22 DEFINE(AOFF_task_pid, offsetof(struct task_struct, pid));
23 DEFINE(AOFF_task_uid, offsetof(struct task_struct, uid));
24 DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid));
25 DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid));
26 DEFINE(AOFF_task_egid, offsetof(struct task_struct, egid));
27 /* DEFINE(THREAD_INFO, offsetof(struct task_struct, stack)); */
28 DEFINE(ASIZ_task_uid, sizeof(current->uid));
29 DEFINE(ASIZ_task_gid, sizeof(current->gid));
30 DEFINE(ASIZ_task_euid, sizeof(current->euid));
31 DEFINE(ASIZ_task_egid, sizeof(current->egid));
32 BLANK();
33 DEFINE(AOFF_thread_fork_kpsr, 21 DEFINE(AOFF_thread_fork_kpsr,
34 offsetof(struct thread_struct, fork_kpsr)); 22 offsetof(struct thread_struct, fork_kpsr));
35 BLANK(); 23 BLANK();
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c
index 92c6fc07e59c..97294232259c 100644
--- a/arch/sparc/kernel/ebus.c
+++ b/arch/sparc/kernel/ebus.c
@@ -69,7 +69,7 @@ static inline unsigned long ebus_alloc(size_t size)
69 69
70/* 70/*
71 */ 71 */
72int __init ebus_blacklist_irq(const char *name) 72static int __init ebus_blacklist_irq(const char *name)
73{ 73{
74 struct ebus_device_irq *dp; 74 struct ebus_device_irq *dp;
75 75
@@ -83,8 +83,8 @@ int __init ebus_blacklist_irq(const char *name)
83 return 0; 83 return 0;
84} 84}
85 85
86void __init fill_ebus_child(struct device_node *dp, 86static void __init fill_ebus_child(struct device_node *dp,
87 struct linux_ebus_child *dev) 87 struct linux_ebus_child *dev)
88{ 88{
89 const int *regs; 89 const int *regs;
90 const int *irqs; 90 const int *irqs;
@@ -144,7 +144,8 @@ void __init fill_ebus_child(struct device_node *dp,
144 } 144 }
145} 145}
146 146
147void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *dev) 147static void __init fill_ebus_device(struct device_node *dp,
148 struct linux_ebus_device *dev)
148{ 149{
149 const struct linux_prom_registers *regs; 150 const struct linux_prom_registers *regs;
150 struct linux_ebus_child *child; 151 struct linux_ebus_child *child;
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
index 4bcfe54f878d..2f96256dc515 100644
--- a/arch/sparc/kernel/entry.S
+++ b/arch/sparc/kernel/entry.S
@@ -19,6 +19,7 @@
19#include <asm/vaddrs.h> 19#include <asm/vaddrs.h>
20#include <asm/memreg.h> 20#include <asm/memreg.h>
21#include <asm/page.h> 21#include <asm/page.h>
22#include <asm/pgtable.h>
22#ifdef CONFIG_SUN4 23#ifdef CONFIG_SUN4
23#include <asm/pgtsun4.h> 24#include <asm/pgtsun4.h>
24#else 25#else
@@ -1317,7 +1318,6 @@ linux_sparc_syscall:
1317 bne linux_fast_syscall 1318 bne linux_fast_syscall
1318 /* Just do first insn from SAVE_ALL in the delay slot */ 1319 /* Just do first insn from SAVE_ALL in the delay slot */
1319 1320
1320 .globl syscall_is_too_hard
1321syscall_is_too_hard: 1321syscall_is_too_hard:
1322 SAVE_ALL_HEAD 1322 SAVE_ALL_HEAD
1323 rd %wim, %l3 1323 rd %wim, %l3
@@ -1544,8 +1544,7 @@ kgdb_trap_low:
1544#endif 1544#endif
1545 1545
1546 .align 4 1546 .align 4
1547 .globl __handle_exception, flush_patch_exception 1547 .globl flush_patch_exception
1548__handle_exception:
1549flush_patch_exception: 1548flush_patch_exception:
1550 FLUSH_ALL_KERNEL_WINDOWS; 1549 FLUSH_ALL_KERNEL_WINDOWS;
1551 ldd [%o0], %o6 1550 ldd [%o0], %o6
diff --git a/arch/sparc/kernel/etrap.S b/arch/sparc/kernel/etrap.S
index f37d961d67a6..e806fcdc46db 100644
--- a/arch/sparc/kernel/etrap.S
+++ b/arch/sparc/kernel/etrap.S
@@ -228,7 +228,6 @@ tsetup_mmu_patchme:
228 */ 228 */
229#define glob_tmp g1 229#define glob_tmp g1
230 230
231 .globl tsetup_sun4c_stackchk
232tsetup_sun4c_stackchk: 231tsetup_sun4c_stackchk:
233 /* Done by caller: andcc %sp, 0x7, %g0 */ 232 /* Done by caller: andcc %sp, 0x7, %g0 */
234 bne trap_setup_user_stack_is_bolixed 233 bne trap_setup_user_stack_is_bolixed
diff --git a/arch/sparc/kernel/head.S b/arch/sparc/kernel/head.S
index 3bfd6085a91d..50d9a16af795 100644
--- a/arch/sparc/kernel/head.S
+++ b/arch/sparc/kernel/head.S
@@ -32,7 +32,6 @@
32 */ 32 */
33 33
34 .align 4 34 .align 4
35 .globl cputyp
36cputyp: 35cputyp:
37 .word 1 36 .word 1
38 37
@@ -1280,7 +1279,6 @@ halt_me:
1280 * gets initialized in c-code so all routines can use it. 1279 * gets initialized in c-code so all routines can use it.
1281 */ 1280 */
1282 1281
1283 .globl prom_vector_p
1284prom_vector_p: 1282prom_vector_p:
1285 .word 0 1283 .word 0
1286 1284
diff --git a/arch/sparc/kernel/idprom.c b/arch/sparc/kernel/idprom.c
index 7220562cdb34..fc511f3c4c18 100644
--- a/arch/sparc/kernel/idprom.c
+++ b/arch/sparc/kernel/idprom.c
@@ -24,7 +24,7 @@ static struct idprom idprom_buffer;
24 * of the Sparc CPU and have a meaningful IDPROM machtype value that we 24 * of the Sparc CPU and have a meaningful IDPROM machtype value that we
25 * know about. See asm-sparc/machines.h for empirical constants. 25 * know about. See asm-sparc/machines.h for empirical constants.
26 */ 26 */
27struct Sun_Machine_Models Sun_Machines[NUM_SUN_MACHINES] = { 27static struct Sun_Machine_Models Sun_Machines[NUM_SUN_MACHINES] = {
28/* First, Sun4's */ 28/* First, Sun4's */
29{ "Sun 4/100 Series", (SM_SUN4 | SM_4_110) }, 29{ "Sun 4/100 Series", (SM_SUN4 | SM_4_110) },
30{ "Sun 4/200 Series", (SM_SUN4 | SM_4_260) }, 30{ "Sun 4/200 Series", (SM_SUN4 | SM_4_260) },
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 7b17522f59bf..487960919f1f 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -49,13 +49,16 @@
49 49
50#define mmu_inval_dma_area(p, l) /* Anton pulled it out for 2.4.0-xx */ 50#define mmu_inval_dma_area(p, l) /* Anton pulled it out for 2.4.0-xx */
51 51
52struct resource *_sparc_find_resource(struct resource *r, unsigned long); 52static struct resource *_sparc_find_resource(struct resource *r,
53 unsigned long);
53 54
54static void __iomem *_sparc_ioremap(struct resource *res, u32 bus, u32 pa, int sz); 55static void __iomem *_sparc_ioremap(struct resource *res, u32 bus, u32 pa, int sz);
55static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys, 56static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
56 unsigned long size, char *name); 57 unsigned long size, char *name);
57static void _sparc_free_io(struct resource *res); 58static void _sparc_free_io(struct resource *res);
58 59
60static void register_proc_sparc_ioport(void);
61
59/* This points to the next to use virtual memory for DVMA mappings */ 62/* This points to the next to use virtual memory for DVMA mappings */
60static struct resource _sparc_dvma = { 63static struct resource _sparc_dvma = {
61 .name = "sparc_dvma", .start = DVMA_VADDR, .end = DVMA_END - 1 64 .name = "sparc_dvma", .start = DVMA_VADDR, .end = DVMA_END - 1
@@ -539,8 +542,6 @@ void __init sbus_setup_arch_props(struct sbus_bus *sbus, struct device_node *dp)
539 542
540int __init sbus_arch_preinit(void) 543int __init sbus_arch_preinit(void)
541{ 544{
542 extern void register_proc_sparc_ioport(void);
543
544 register_proc_sparc_ioport(); 545 register_proc_sparc_ioport();
545 546
546#ifdef CONFIG_SUN4 547#ifdef CONFIG_SUN4
@@ -853,8 +854,8 @@ _sparc_io_get_info(char *buf, char **start, off_t fpos, int length, int *eof,
853 * XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case. 854 * XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case.
854 * This probably warrants some sort of hashing. 855 * This probably warrants some sort of hashing.
855 */ 856 */
856struct resource * 857static struct resource *_sparc_find_resource(struct resource *root,
857_sparc_find_resource(struct resource *root, unsigned long hit) 858 unsigned long hit)
858{ 859{
859 struct resource *tmp; 860 struct resource *tmp;
860 861
@@ -865,7 +866,7 @@ _sparc_find_resource(struct resource *root, unsigned long hit)
865 return NULL; 866 return NULL;
866} 867}
867 868
868void register_proc_sparc_ioport(void) 869static void register_proc_sparc_ioport(void)
869{ 870{
870#ifdef CONFIG_PROC_FS 871#ifdef CONFIG_PROC_FS
871 create_proc_read_entry("io_map",0,NULL,_sparc_io_get_info,&sparc_iomap); 872 create_proc_read_entry("io_map",0,NULL,_sparc_io_get_info,&sparc_iomap);
diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c
index 087390b092b0..93e1d1c65290 100644
--- a/arch/sparc/kernel/irq.c
+++ b/arch/sparc/kernel/irq.c
@@ -154,7 +154,7 @@ void (*sparc_init_timers)(irq_handler_t ) =
154struct irqaction static_irqaction[MAX_STATIC_ALLOC]; 154struct irqaction static_irqaction[MAX_STATIC_ALLOC];
155int static_irq_count; 155int static_irq_count;
156 156
157struct { 157static struct {
158 struct irqaction *action; 158 struct irqaction *action;
159 int flags; 159 int flags;
160} sparc_irq[NR_IRQS]; 160} sparc_irq[NR_IRQS];
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
index da48d248cc17..4bb430940a61 100644
--- a/arch/sparc/kernel/process.c
+++ b/arch/sparc/kernel/process.c
@@ -1,6 +1,6 @@
1/* linux/arch/sparc/kernel/process.c 1/* linux/arch/sparc/kernel/process.c
2 * 2 *
3 * Copyright (C) 1995 David S. Miller (davem@davemloft.net) 3 * Copyright (C) 1995, 2008 David S. Miller (davem@davemloft.net)
4 * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be) 4 * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
5 */ 5 */
6 6
@@ -14,7 +14,6 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/kallsyms.h>
18#include <linux/mm.h> 17#include <linux/mm.h>
19#include <linux/stddef.h> 18#include <linux/stddef.h>
20#include <linux/ptrace.h> 19#include <linux/ptrace.h>
@@ -177,6 +176,8 @@ void machine_power_off(void)
177 machine_halt(); 176 machine_halt();
178} 177}
179 178
179#if 0
180
180static DEFINE_SPINLOCK(sparc_backtrace_lock); 181static DEFINE_SPINLOCK(sparc_backtrace_lock);
181 182
182void __show_backtrace(unsigned long fp) 183void __show_backtrace(unsigned long fp)
@@ -196,7 +197,7 @@ void __show_backtrace(unsigned long fp)
196 rw->ins[4], rw->ins[5], 197 rw->ins[4], rw->ins[5],
197 rw->ins[6], 198 rw->ins[6],
198 rw->ins[7]); 199 rw->ins[7]);
199 print_symbol("%s\n", rw->ins[7]); 200 printk("%pS\n", (void *) rw->ins[7]);
200 rw = (struct reg_window *) rw->ins[6]; 201 rw = (struct reg_window *) rw->ins[6];
201 } 202 }
202 spin_unlock_irqrestore(&sparc_backtrace_lock, flags); 203 spin_unlock_irqrestore(&sparc_backtrace_lock, flags);
@@ -228,7 +229,6 @@ void smp_show_backtrace_all_cpus(void)
228} 229}
229#endif 230#endif
230 231
231#if 0
232void show_stackframe(struct sparc_stackf *sf) 232void show_stackframe(struct sparc_stackf *sf)
233{ 233{
234 unsigned long size; 234 unsigned long size;
@@ -264,14 +264,14 @@ void show_regs(struct pt_regs *r)
264 264
265 printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", 265 printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n",
266 r->psr, r->pc, r->npc, r->y, print_tainted()); 266 r->psr, r->pc, r->npc, r->y, print_tainted());
267 print_symbol("PC: <%s>\n", r->pc); 267 printk("PC: <%pS>\n", (void *) r->pc);
268 printk("%%G: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", 268 printk("%%G: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
269 r->u_regs[0], r->u_regs[1], r->u_regs[2], r->u_regs[3], 269 r->u_regs[0], r->u_regs[1], r->u_regs[2], r->u_regs[3],
270 r->u_regs[4], r->u_regs[5], r->u_regs[6], r->u_regs[7]); 270 r->u_regs[4], r->u_regs[5], r->u_regs[6], r->u_regs[7]);
271 printk("%%O: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", 271 printk("%%O: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
272 r->u_regs[8], r->u_regs[9], r->u_regs[10], r->u_regs[11], 272 r->u_regs[8], r->u_regs[9], r->u_regs[10], r->u_regs[11],
273 r->u_regs[12], r->u_regs[13], r->u_regs[14], r->u_regs[15]); 273 r->u_regs[12], r->u_regs[13], r->u_regs[14], r->u_regs[15]);
274 print_symbol("RPC: <%s>\n", r->u_regs[15]); 274 printk("RPC: <%pS>\n", (void *) r->u_regs[15]);
275 275
276 printk("%%L: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", 276 printk("%%L: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
277 rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3], 277 rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3],
@@ -306,7 +306,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
306 rw = (struct reg_window *) fp; 306 rw = (struct reg_window *) fp;
307 pc = rw->ins[7]; 307 pc = rw->ins[7];
308 printk("[%08lx : ", pc); 308 printk("[%08lx : ", pc);
309 print_symbol("%s ] ", pc); 309 printk("%pS ] ", (void *) pc);
310 fp = rw->ins[6]; 310 fp = rw->ins[6];
311 } while (++count < 16); 311 } while (++count < 16);
312 printk("\n"); 312 printk("\n");
diff --git a/arch/sparc/kernel/rtrap.S b/arch/sparc/kernel/rtrap.S
index ce30082ab266..891f460b7b96 100644
--- a/arch/sparc/kernel/rtrap.S
+++ b/arch/sparc/kernel/rtrap.S
@@ -224,8 +224,6 @@ ret_trap_user_stack_is_bolixed:
224 b signal_p 224 b signal_p
225 ld [%curptr + TI_FLAGS], %g2 225 ld [%curptr + TI_FLAGS], %g2
226 226
227
228 .globl sun4c_rett_stackchk
229sun4c_rett_stackchk: 227sun4c_rett_stackchk:
230 be 1f 228 be 1f
231 and %fp, 0xfff, %g1 ! delay slot 229 and %fp, 0xfff, %g1 ! delay slot
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c
index a0ea0bc6f471..9e451b21202e 100644
--- a/arch/sparc/kernel/setup.c
+++ b/arch/sparc/kernel/setup.c
@@ -67,7 +67,7 @@ struct screen_info screen_info = {
67extern unsigned long trapbase; 67extern unsigned long trapbase;
68 68
69/* Pretty sick eh? */ 69/* Pretty sick eh? */
70void prom_sync_me(void) 70static void prom_sync_me(void)
71{ 71{
72 unsigned long prom_tbr, flags; 72 unsigned long prom_tbr, flags;
73 73
@@ -97,7 +97,7 @@ void prom_sync_me(void)
97 return; 97 return;
98} 98}
99 99
100unsigned int boot_flags __initdata = 0; 100static unsigned int boot_flags __initdata = 0;
101#define BOOTME_DEBUG 0x1 101#define BOOTME_DEBUG 0x1
102 102
103/* Exported for mm/init.c:paging_init. */ 103/* Exported for mm/init.c:paging_init. */
diff --git a/arch/sparc/kernel/smp.c b/arch/sparc/kernel/smp.c
index 6724ab90f82b..1619ec15c099 100644
--- a/arch/sparc/kernel/smp.c
+++ b/arch/sparc/kernel/smp.c
@@ -35,13 +35,9 @@
35 35
36#include "irq.h" 36#include "irq.h"
37 37
38int smp_num_cpus = 1;
39volatile unsigned long cpu_callin_map[NR_CPUS] __initdata = {0,}; 38volatile unsigned long cpu_callin_map[NR_CPUS] __initdata = {0,};
40unsigned char boot_cpu_id = 0; 39unsigned char boot_cpu_id = 0;
41unsigned char boot_cpu_id4 = 0; /* boot_cpu_id << 2 */ 40unsigned char boot_cpu_id4 = 0; /* boot_cpu_id << 2 */
42int smp_activated = 0;
43volatile int __cpu_number_map[NR_CPUS];
44volatile int __cpu_logical_map[NR_CPUS];
45 41
46cpumask_t cpu_online_map = CPU_MASK_NONE; 42cpumask_t cpu_online_map = CPU_MASK_NONE;
47cpumask_t phys_cpu_present_map = CPU_MASK_NONE; 43cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
@@ -55,9 +51,6 @@ cpumask_t smp_commenced_mask = CPU_MASK_NONE;
55 * instruction which is much better... 51 * instruction which is much better...
56 */ 52 */
57 53
58/* Used to make bitops atomic */
59unsigned char bitops_spinlock = 0;
60
61void __cpuinit smp_store_cpu_info(int id) 54void __cpuinit smp_store_cpu_info(int id)
62{ 55{
63 int cpu_node; 56 int cpu_node;
diff --git a/arch/sparc/kernel/sun4c_irq.c b/arch/sparc/kernel/sun4c_irq.c
index c6ac9fc52563..340fc395fe2d 100644
--- a/arch/sparc/kernel/sun4c_irq.c
+++ b/arch/sparc/kernel/sun4c_irq.c
@@ -68,7 +68,8 @@ unsigned char *interrupt_enable = NULL;
68 68
69static int sun4c_pil_map[] = { 0, 1, 2, 3, 5, 7, 8, 9 }; 69static int sun4c_pil_map[] = { 0, 1, 2, 3, 5, 7, 8, 9 };
70 70
71unsigned int sun4c_sbint_to_irq(struct sbus_dev *sdev, unsigned int sbint) 71static unsigned int sun4c_sbint_to_irq(struct sbus_dev *sdev,
72 unsigned int sbint)
72{ 73{
73 if (sbint >= sizeof(sun4c_pil_map)) { 74 if (sbint >= sizeof(sun4c_pil_map)) {
74 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint); 75 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint);
diff --git a/arch/sparc/kernel/sun4d_irq.c b/arch/sparc/kernel/sun4d_irq.c
index 8ac5661cafff..1290b5998f83 100644
--- a/arch/sparc/kernel/sun4d_irq.c
+++ b/arch/sparc/kernel/sun4d_irq.c
@@ -52,13 +52,13 @@ extern struct irqaction static_irqaction[MAX_STATIC_ALLOC];
52extern int static_irq_count; 52extern int static_irq_count;
53unsigned char cpu_leds[32]; 53unsigned char cpu_leds[32];
54#ifdef CONFIG_SMP 54#ifdef CONFIG_SMP
55unsigned char sbus_tid[32]; 55static unsigned char sbus_tid[32];
56#endif 56#endif
57 57
58static struct irqaction *irq_action[NR_IRQS]; 58static struct irqaction *irq_action[NR_IRQS];
59extern spinlock_t irq_action_lock; 59extern spinlock_t irq_action_lock;
60 60
61struct sbus_action { 61static struct sbus_action {
62 struct irqaction *action; 62 struct irqaction *action;
63 /* For SMP this needs to be extended */ 63 /* For SMP this needs to be extended */
64} *sbus_actions; 64} *sbus_actions;
@@ -267,7 +267,8 @@ unsigned int sun4d_build_irq(struct sbus_dev *sdev, int irq)
267 return irq; 267 return irq;
268} 268}
269 269
270unsigned int sun4d_sbint_to_irq(struct sbus_dev *sdev, unsigned int sbint) 270static unsigned int sun4d_sbint_to_irq(struct sbus_dev *sdev,
271 unsigned int sbint)
271{ 272{
272 if (sbint >= sizeof(sbus_to_pil)) { 273 if (sbint >= sizeof(sbus_to_pil)) {
273 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint); 274 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint);
diff --git a/arch/sparc/kernel/sun4m_irq.c b/arch/sparc/kernel/sun4m_irq.c
index b92d6d2d5b04..94e02de960ea 100644
--- a/arch/sparc/kernel/sun4m_irq.c
+++ b/arch/sparc/kernel/sun4m_irq.c
@@ -154,7 +154,8 @@ static unsigned long irq_mask[] = {
154 154
155static int sun4m_pil_map[] = { 0, 2, 3, 5, 7, 9, 11, 13 }; 155static int sun4m_pil_map[] = { 0, 2, 3, 5, 7, 9, 11, 13 };
156 156
157unsigned int sun4m_sbint_to_irq(struct sbus_dev *sdev, unsigned int sbint) 157static unsigned int sun4m_sbint_to_irq(struct sbus_dev *sdev,
158 unsigned int sbint)
158{ 159{
159 if (sbint >= sizeof(sun4m_pil_map)) { 160 if (sbint >= sizeof(sun4m_pil_map)) {
160 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint); 161 printk(KERN_ERR "%s: bogus SBINT %d\n", sdev->prom_name, sbint);
@@ -163,7 +164,7 @@ unsigned int sun4m_sbint_to_irq(struct sbus_dev *sdev, unsigned int sbint)
163 return sun4m_pil_map[sbint] | 0x30; 164 return sun4m_pil_map[sbint] | 0x30;
164} 165}
165 166
166inline unsigned long sun4m_get_irqmask(unsigned int irq) 167static unsigned long sun4m_get_irqmask(unsigned int irq)
167{ 168{
168 unsigned long mask; 169 unsigned long mask;
169 170
@@ -281,7 +282,7 @@ static void sun4m_set_udt(int cpu)
281#define TIMER_IRQ (OBIO_INTR | 10) 282#define TIMER_IRQ (OBIO_INTR | 10)
282#define PROFILE_IRQ (OBIO_INTR | 14) 283#define PROFILE_IRQ (OBIO_INTR | 14)
283 284
284struct sun4m_timer_regs *sun4m_timers; 285static struct sun4m_timer_regs *sun4m_timers;
285unsigned int lvl14_resolution = (((1000000/HZ) + 1) << 10); 286unsigned int lvl14_resolution = (((1000000/HZ) + 1) << 10);
286 287
287static void sun4m_clear_clock_irq(void) 288static void sun4m_clear_clock_irq(void)
diff --git a/arch/sparc/kernel/sun4m_smp.c b/arch/sparc/kernel/sun4m_smp.c
index ffb875aacb7e..406ac1abc83a 100644
--- a/arch/sparc/kernel/sun4m_smp.c
+++ b/arch/sparc/kernel/sun4m_smp.c
@@ -244,8 +244,9 @@ static struct smp_funcall {
244static DEFINE_SPINLOCK(cross_call_lock); 244static DEFINE_SPINLOCK(cross_call_lock);
245 245
246/* Cross calls must be serialized, at least currently. */ 246/* Cross calls must be serialized, at least currently. */
247void smp4m_cross_call(smpfunc_t func, unsigned long arg1, unsigned long arg2, 247static void smp4m_cross_call(smpfunc_t func, unsigned long arg1,
248 unsigned long arg3, unsigned long arg4, unsigned long arg5) 248 unsigned long arg2, unsigned long arg3,
249 unsigned long arg4, unsigned long arg5)
249{ 250{
250 register int ncpus = SUN4M_NCPUS; 251 register int ncpus = SUN4M_NCPUS;
251 unsigned long flags; 252 unsigned long flags;
@@ -344,7 +345,7 @@ static void __init smp_setup_percpu_timer(void)
344 enable_pil_irq(14); 345 enable_pil_irq(14);
345} 346}
346 347
347void __init smp4m_blackbox_id(unsigned *addr) 348static void __init smp4m_blackbox_id(unsigned *addr)
348{ 349{
349 int rd = *addr & 0x3e000000; 350 int rd = *addr & 0x3e000000;
350 int rs1 = rd >> 11; 351 int rs1 = rd >> 11;
@@ -354,7 +355,7 @@ void __init smp4m_blackbox_id(unsigned *addr)
354 addr[2] = 0x80082003 | rd | rs1; /* and reg, 3, reg */ 355 addr[2] = 0x80082003 | rd | rs1; /* and reg, 3, reg */
355} 356}
356 357
357void __init smp4m_blackbox_current(unsigned *addr) 358static void __init smp4m_blackbox_current(unsigned *addr)
358{ 359{
359 int rd = *addr & 0x3e000000; 360 int rd = *addr & 0x3e000000;
360 int rs1 = rd >> 11; 361 int rs1 = rd >> 11;
diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c
index 53caacbb3982..ab3dd0b257d3 100644
--- a/arch/sparc/kernel/time.c
+++ b/arch/sparc/kernel/time.c
@@ -46,7 +46,7 @@
46#include "irq.h" 46#include "irq.h"
47 47
48DEFINE_SPINLOCK(rtc_lock); 48DEFINE_SPINLOCK(rtc_lock);
49enum sparc_clock_type sp_clock_typ; 49static enum sparc_clock_type sp_clock_typ;
50DEFINE_SPINLOCK(mostek_lock); 50DEFINE_SPINLOCK(mostek_lock);
51void __iomem *mstk48t02_regs = NULL; 51void __iomem *mstk48t02_regs = NULL;
52static struct mostek48t08 __iomem *mstk48t08_regs = NULL; 52static struct mostek48t08 __iomem *mstk48t08_regs = NULL;
@@ -366,7 +366,7 @@ static int __init clock_init(void)
366fs_initcall(clock_init); 366fs_initcall(clock_init);
367#endif /* !CONFIG_SUN4 */ 367#endif /* !CONFIG_SUN4 */
368 368
369void __init sbus_time_init(void) 369static void __init sbus_time_init(void)
370{ 370{
371 371
372 BTFIXUPSET_CALL(bus_do_settimeofday, sbus_do_settimeofday, BTFIXUPCALL_NORM); 372 BTFIXUPSET_CALL(bus_do_settimeofday, sbus_do_settimeofday, BTFIXUPCALL_NORM);
diff --git a/arch/sparc/kernel/traps.c b/arch/sparc/kernel/traps.c
index 978e9d85949e..5d45d5fd8c99 100644
--- a/arch/sparc/kernel/traps.c
+++ b/arch/sparc/kernel/traps.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/sparc/kernel/traps.c 2 * arch/sparc/kernel/traps.c
3 * 3 *
4 * Copyright 1995 David S. Miller (davem@caip.rutgers.edu) 4 * Copyright 1995, 2008 David S. Miller (davem@davemloft.net)
5 * Copyright 2000 Jakub Jelinek (jakub@redhat.com) 5 * Copyright 2000 Jakub Jelinek (jakub@redhat.com)
6 */ 6 */
7 7
@@ -11,7 +11,6 @@
11 11
12#include <linux/sched.h> /* for jiffies */ 12#include <linux/sched.h> /* for jiffies */
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/kallsyms.h>
15#include <linux/signal.h> 14#include <linux/signal.h>
16#include <linux/smp.h> 15#include <linux/smp.h>
17#include <linux/smp_lock.h> 16#include <linux/smp_lock.h>
@@ -33,9 +32,6 @@ struct trap_trace_entry {
33 unsigned long type; 32 unsigned long type;
34}; 33};
35 34
36int trap_curbuf = 0;
37struct trap_trace_entry trapbuf[1024];
38
39void syscall_trace_entry(struct pt_regs *regs) 35void syscall_trace_entry(struct pt_regs *regs)
40{ 36{
41 printk("%s[%d]: ", current->comm, task_pid_nr(current)); 37 printk("%s[%d]: ", current->comm, task_pid_nr(current));
@@ -72,7 +68,7 @@ void sun4d_nmi(struct pt_regs *regs)
72 prom_halt(); 68 prom_halt();
73} 69}
74 70
75void instruction_dump (unsigned long *pc) 71static void instruction_dump(unsigned long *pc)
76{ 72{
77 int i; 73 int i;
78 74
@@ -119,8 +115,8 @@ void die_if_kernel(char *str, struct pt_regs *regs)
119 count++ < 30 && 115 count++ < 30 &&
120 (((unsigned long) rw) >= PAGE_OFFSET) && 116 (((unsigned long) rw) >= PAGE_OFFSET) &&
121 !(((unsigned long) rw) & 0x7)) { 117 !(((unsigned long) rw) & 0x7)) {
122 printk("Caller[%08lx]", rw->ins[7]); 118 printk("Caller[%08lx]: %pS\n", rw->ins[7],
123 print_symbol(": %s\n", rw->ins[7]); 119 (void *) rw->ins[7]);
124 rw = (struct reg_window *)rw->ins[6]; 120 rw = (struct reg_window *)rw->ins[6];
125 } 121 }
126 } 122 }
@@ -479,10 +475,6 @@ void do_BUG(const char *file, int line)
479 475
480extern void sparc_cpu_startup(void); 476extern void sparc_cpu_startup(void);
481 477
482int linux_smp_still_initting;
483unsigned int thiscpus_tbr;
484int thiscpus_mid;
485
486void trap_init(void) 478void trap_init(void)
487{ 479{
488 extern void thread_info_offsets_are_bolixed_pete(void); 480 extern void thread_info_offsets_are_bolixed_pete(void);
diff --git a/arch/sparc/kernel/wof.S b/arch/sparc/kernel/wof.S
index 4bce38dfe3c5..3bbcd8dc9abf 100644
--- a/arch/sparc/kernel/wof.S
+++ b/arch/sparc/kernel/wof.S
@@ -306,7 +306,6 @@ spwin_bad_ustack_from_kernel:
306 * As noted above %curptr cannot be touched by this routine at all. 306 * As noted above %curptr cannot be touched by this routine at all.
307 */ 307 */
308 308
309 .globl spwin_sun4c_stackchk
310spwin_sun4c_stackchk: 309spwin_sun4c_stackchk:
311 /* LOCATION: Window to be saved on the stack */ 310 /* LOCATION: Window to be saved on the stack */
312 311
diff --git a/arch/sparc/kernel/wuf.S b/arch/sparc/kernel/wuf.S
index 82e5145b0f77..779ff750603d 100644
--- a/arch/sparc/kernel/wuf.S
+++ b/arch/sparc/kernel/wuf.S
@@ -243,7 +243,6 @@ fwin_user_finish_up:
243 */ 243 */
244 244
245 .align 4 245 .align 4
246 .globl sun4c_fwin_stackchk
247sun4c_fwin_stackchk: 246sun4c_fwin_stackchk:
248 /* LOCATION: Window 'W' */ 247 /* LOCATION: Window 'W' */
249 248
diff --git a/arch/sparc/mm/fault.c b/arch/sparc/mm/fault.c
index 0a3cd8f6cfe4..3604c2e86709 100644
--- a/arch/sparc/mm/fault.c
+++ b/arch/sparc/mm/fault.c
@@ -451,7 +451,7 @@ asmlinkage void do_sun4c_fault(struct pt_regs *regs, int text_fault, int write,
451} 451}
452 452
453/* This always deals with user addresses. */ 453/* This always deals with user addresses. */
454inline void force_user_fault(unsigned long address, int write) 454static void force_user_fault(unsigned long address, int write)
455{ 455{
456 struct vm_area_struct *vma; 456 struct vm_area_struct *vma;
457 struct task_struct *tsk = current; 457 struct task_struct *tsk = current;
diff --git a/arch/sparc/mm/init.c b/arch/sparc/mm/init.c
index 7794ecb896e3..e103f1bb3777 100644
--- a/arch/sparc/mm/init.c
+++ b/arch/sparc/mm/init.c
@@ -22,6 +22,7 @@
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/highmem.h> 23#include <linux/highmem.h>
24#include <linux/bootmem.h> 24#include <linux/bootmem.h>
25#include <linux/pagemap.h>
25 26
26#include <asm/system.h> 27#include <asm/system.h>
27#include <asm/vac-ops.h> 28#include <asm/vac-ops.h>
@@ -128,7 +129,7 @@ unsigned long calc_highpages(void)
128 return nr; 129 return nr;
129} 130}
130 131
131unsigned long calc_max_low_pfn(void) 132static unsigned long calc_max_low_pfn(void)
132{ 133{
133 int i; 134 int i;
134 unsigned long tmp = pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT); 135 unsigned long tmp = pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT);
@@ -292,7 +293,7 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
292 * 293 *
293 * We simply copy the 2.4 implementation for now. 294 * We simply copy the 2.4 implementation for now.
294 */ 295 */
295int pgt_cache_water[2] = { 25, 50 }; 296static int pgt_cache_water[2] = { 25, 50 };
296 297
297void check_pgt_cache(void) 298void check_pgt_cache(void)
298{ 299{
@@ -356,8 +357,6 @@ void __init paging_init(void)
356 device_scan(); 357 device_scan();
357} 358}
358 359
359struct cache_palias *sparc_aliases;
360
361static void __init taint_real_pages(void) 360static void __init taint_real_pages(void)
362{ 361{
363 int i; 362 int i;
@@ -375,7 +374,7 @@ static void __init taint_real_pages(void)
375 } 374 }
376} 375}
377 376
378void map_high_region(unsigned long start_pfn, unsigned long end_pfn) 377static void map_high_region(unsigned long start_pfn, unsigned long end_pfn)
379{ 378{
380 unsigned long tmp; 379 unsigned long tmp;
381 380
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
index 23d3291a3e81..c624e04ff03e 100644
--- a/arch/sparc/mm/srmmu.c
+++ b/arch/sparc/mm/srmmu.c
@@ -50,7 +50,7 @@
50#include <asm/btfixup.h> 50#include <asm/btfixup.h>
51 51
52enum mbus_module srmmu_modtype; 52enum mbus_module srmmu_modtype;
53unsigned int hwbug_bitmask; 53static unsigned int hwbug_bitmask;
54int vac_cache_size; 54int vac_cache_size;
55int vac_line_size; 55int vac_line_size;
56 56
@@ -60,7 +60,7 @@ extern unsigned long last_valid_pfn;
60 60
61extern unsigned long page_kernel; 61extern unsigned long page_kernel;
62 62
63pgd_t *srmmu_swapper_pg_dir; 63static pgd_t *srmmu_swapper_pg_dir;
64 64
65#ifdef CONFIG_SMP 65#ifdef CONFIG_SMP
66#define FLUSH_BEGIN(mm) 66#define FLUSH_BEGIN(mm)
@@ -83,12 +83,12 @@ BTFIXUPDEF_CALL(void, local_flush_page_for_dma, unsigned long)
83char *srmmu_name; 83char *srmmu_name;
84 84
85ctxd_t *srmmu_ctx_table_phys; 85ctxd_t *srmmu_ctx_table_phys;
86ctxd_t *srmmu_context_table; 86static ctxd_t *srmmu_context_table;
87 87
88int viking_mxcc_present; 88int viking_mxcc_present;
89static DEFINE_SPINLOCK(srmmu_context_spinlock); 89static DEFINE_SPINLOCK(srmmu_context_spinlock);
90 90
91int is_hypersparc; 91static int is_hypersparc;
92 92
93/* 93/*
94 * In general all page table modifications should use the V8 atomic 94 * In general all page table modifications should use the V8 atomic
@@ -112,11 +112,11 @@ static inline int srmmu_device_memory(unsigned long x)
112 return ((x & 0xF0000000) != 0); 112 return ((x & 0xF0000000) != 0);
113} 113}
114 114
115int srmmu_cache_pagetables; 115static int srmmu_cache_pagetables;
116 116
117/* these will be initialized in srmmu_nocache_calcsize() */ 117/* these will be initialized in srmmu_nocache_calcsize() */
118unsigned long srmmu_nocache_size; 118static unsigned long srmmu_nocache_size;
119unsigned long srmmu_nocache_end; 119static unsigned long srmmu_nocache_end;
120 120
121/* 1 bit <=> 256 bytes of nocache <=> 64 PTEs */ 121/* 1 bit <=> 256 bytes of nocache <=> 64 PTEs */
122#define SRMMU_NOCACHE_BITMAP_SHIFT (PAGE_SHIFT - 4) 122#define SRMMU_NOCACHE_BITMAP_SHIFT (PAGE_SHIFT - 4)
@@ -324,7 +324,7 @@ static unsigned long __srmmu_get_nocache(int size, int align)
324 return (SRMMU_NOCACHE_VADDR + (offset << SRMMU_NOCACHE_BITMAP_SHIFT)); 324 return (SRMMU_NOCACHE_VADDR + (offset << SRMMU_NOCACHE_BITMAP_SHIFT));
325} 325}
326 326
327unsigned inline long srmmu_get_nocache(int size, int align) 327static unsigned long srmmu_get_nocache(int size, int align)
328{ 328{
329 unsigned long tmp; 329 unsigned long tmp;
330 330
@@ -336,7 +336,7 @@ unsigned inline long srmmu_get_nocache(int size, int align)
336 return tmp; 336 return tmp;
337} 337}
338 338
339void srmmu_free_nocache(unsigned long vaddr, int size) 339static void srmmu_free_nocache(unsigned long vaddr, int size)
340{ 340{
341 int offset; 341 int offset;
342 342
@@ -369,7 +369,8 @@ void srmmu_free_nocache(unsigned long vaddr, int size)
369 bit_map_clear(&srmmu_nocache_map, offset, size); 369 bit_map_clear(&srmmu_nocache_map, offset, size);
370} 370}
371 371
372void srmmu_early_allocate_ptable_skeleton(unsigned long start, unsigned long end); 372static void srmmu_early_allocate_ptable_skeleton(unsigned long start,
373 unsigned long end);
373 374
374extern unsigned long probe_memory(void); /* in fault.c */ 375extern unsigned long probe_memory(void); /* in fault.c */
375 376
@@ -377,7 +378,7 @@ extern unsigned long probe_memory(void); /* in fault.c */
377 * Reserve nocache dynamically proportionally to the amount of 378 * Reserve nocache dynamically proportionally to the amount of
378 * system RAM. -- Tomas Szepe <szepe@pinerecords.com>, June 2002 379 * system RAM. -- Tomas Szepe <szepe@pinerecords.com>, June 2002
379 */ 380 */
380void srmmu_nocache_calcsize(void) 381static void srmmu_nocache_calcsize(void)
381{ 382{
382 unsigned long sysmemavail = probe_memory() / 1024; 383 unsigned long sysmemavail = probe_memory() / 1024;
383 int srmmu_nocache_npages; 384 int srmmu_nocache_npages;
@@ -398,7 +399,7 @@ void srmmu_nocache_calcsize(void)
398 srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size; 399 srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size;
399} 400}
400 401
401void __init srmmu_nocache_init(void) 402static void __init srmmu_nocache_init(void)
402{ 403{
403 unsigned int bitmap_bits; 404 unsigned int bitmap_bits;
404 pgd_t *pgd; 405 pgd_t *pgd;
@@ -645,7 +646,7 @@ static void srmmu_unmapiorange(unsigned long virt_addr, unsigned int len)
645 * mappings on the kernel stack without any special code as we did 646 * mappings on the kernel stack without any special code as we did
646 * need on the sun4c. 647 * need on the sun4c.
647 */ 648 */
648struct thread_info *srmmu_alloc_thread_info(void) 649static struct thread_info *srmmu_alloc_thread_info(void)
649{ 650{
650 struct thread_info *ret; 651 struct thread_info *ret;
651 652
@@ -1045,13 +1046,14 @@ extern void hypersparc_setup_blockops(void);
1045 * around 8mb mapped for us. 1046 * around 8mb mapped for us.
1046 */ 1047 */
1047 1048
1048void __init early_pgtable_allocfail(char *type) 1049static void __init early_pgtable_allocfail(char *type)
1049{ 1050{
1050 prom_printf("inherit_prom_mappings: Cannot alloc kernel %s.\n", type); 1051 prom_printf("inherit_prom_mappings: Cannot alloc kernel %s.\n", type);
1051 prom_halt(); 1052 prom_halt();
1052} 1053}
1053 1054
1054void __init srmmu_early_allocate_ptable_skeleton(unsigned long start, unsigned long end) 1055static void __init srmmu_early_allocate_ptable_skeleton(unsigned long start,
1056 unsigned long end)
1055{ 1057{
1056 pgd_t *pgdp; 1058 pgd_t *pgdp;
1057 pmd_t *pmdp; 1059 pmd_t *pmdp;
@@ -1081,7 +1083,8 @@ void __init srmmu_early_allocate_ptable_skeleton(unsigned long start, unsigned l
1081 } 1083 }
1082} 1084}
1083 1085
1084void __init srmmu_allocate_ptable_skeleton(unsigned long start, unsigned long end) 1086static void __init srmmu_allocate_ptable_skeleton(unsigned long start,
1087 unsigned long end)
1085{ 1088{
1086 pgd_t *pgdp; 1089 pgd_t *pgdp;
1087 pmd_t *pmdp; 1090 pmd_t *pmdp;
@@ -1116,7 +1119,8 @@ void __init srmmu_allocate_ptable_skeleton(unsigned long start, unsigned long en
1116 * looking at the prom's page table directly which is what most 1119 * looking at the prom's page table directly which is what most
1117 * other OS's do. Yuck... this is much better. 1120 * other OS's do. Yuck... this is much better.
1118 */ 1121 */
1119void __init srmmu_inherit_prom_mappings(unsigned long start,unsigned long end) 1122static void __init srmmu_inherit_prom_mappings(unsigned long start,
1123 unsigned long end)
1120{ 1124{
1121 pgd_t *pgdp; 1125 pgd_t *pgdp;
1122 pmd_t *pmdp; 1126 pmd_t *pmdp;
diff --git a/arch/sparc/mm/tsunami.S b/arch/sparc/mm/tsunami.S
index db0d6de33a87..4e55e8f76648 100644
--- a/arch/sparc/mm/tsunami.S
+++ b/arch/sparc/mm/tsunami.S
@@ -93,7 +93,6 @@ tsunami_flush_tlb_page_out:
93 ldd [src + offset + 0x00], t2; \ 93 ldd [src + offset + 0x00], t2; \
94 std t2, [dst + offset + 0x00]; 94 std t2, [dst + offset + 0x00];
95 95
96 .globl tsunami_copy_1page
97tsunami_copy_1page: 96tsunami_copy_1page:
98/* NOTE: This routine has to be shorter than 70insns --jj */ 97/* NOTE: This routine has to be shorter than 70insns --jj */
99 or %g0, (PAGE_SIZE >> 8), %g1 98 or %g0, (PAGE_SIZE >> 8), %g1
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index fca9246470b1..7c88263256af 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -16,6 +16,7 @@ config SPARC64
16 select HAVE_IDE 16 select HAVE_IDE
17 select HAVE_LMB 17 select HAVE_LMB
18 select HAVE_ARCH_KGDB 18 select HAVE_ARCH_KGDB
19 select USE_GENERIC_SMP_HELPERS if SMP
19 20
20config GENERIC_TIME 21config GENERIC_TIME
21 bool 22 bool
@@ -81,6 +82,10 @@ config GENERIC_HARDIRQS_NO__DO_IRQ
81 bool 82 bool
82 def_bool y 83 def_bool y
83 84
85source "init/Kconfig"
86
87menu "Processor type and features"
88
84choice 89choice
85 prompt "Kernel page size" 90 prompt "Kernel page size"
86 default SPARC64_PAGE_SIZE_8KB 91 default SPARC64_PAGE_SIZE_8KB
@@ -93,19 +98,11 @@ config SPARC64_PAGE_SIZE_8KB
93 8KB and 64KB work quite well, since SPARC ELF sections 98 8KB and 64KB work quite well, since SPARC ELF sections
94 provide for up to 64KB alignment. 99 provide for up to 64KB alignment.
95 100
96 Therefore, 512KB and 4MB are for expert hackers only.
97
98 If you don't know what to do, choose 8KB. 101 If you don't know what to do, choose 8KB.
99 102
100config SPARC64_PAGE_SIZE_64KB 103config SPARC64_PAGE_SIZE_64KB
101 bool "64KB" 104 bool "64KB"
102 105
103config SPARC64_PAGE_SIZE_512KB
104 bool "512KB"
105
106config SPARC64_PAGE_SIZE_4MB
107 bool "4MB"
108
109endchoice 106endchoice
110 107
111config SECCOMP 108config SECCOMP
@@ -136,14 +133,10 @@ config HOTPLUG_CPU
136 can be controlled through /sys/devices/system/cpu/cpu#. 133 can be controlled through /sys/devices/system/cpu/cpu#.
137 Say N if you want to disable CPU hotplug. 134 Say N if you want to disable CPU hotplug.
138 135
139source "init/Kconfig"
140
141config GENERIC_HARDIRQS 136config GENERIC_HARDIRQS
142 bool 137 bool
143 default y 138 default y
144 139
145menu "General machine setup"
146
147source "kernel/time/Kconfig" 140source "kernel/time/Kconfig"
148 141
149config SMP 142config SMP
@@ -225,11 +218,10 @@ config HUGETLB_PAGE_SIZE_4MB
225 bool "4MB" 218 bool "4MB"
226 219
227config HUGETLB_PAGE_SIZE_512K 220config HUGETLB_PAGE_SIZE_512K
228 depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB
229 bool "512K" 221 bool "512K"
230 222
231config HUGETLB_PAGE_SIZE_64K 223config HUGETLB_PAGE_SIZE_64K
232 depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB && !SPARC64_PAGE_SIZE_64KB 224 depends on !SPARC64_PAGE_SIZE_64KB
233 bool "64K" 225 bool "64K"
234 226
235endchoice 227endchoice
diff --git a/arch/sparc64/Makefile b/arch/sparc64/Makefile
index 4b8f2b084c21..b785a395b12f 100644
--- a/arch/sparc64/Makefile
+++ b/arch/sparc64/Makefile
@@ -9,7 +9,9 @@
9 9
10CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64 10CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64
11 11
12CPPFLAGS_vmlinux.lds += -Usparc 12# Undefine sparc when processing vmlinux.lds - it is used
13# And teach CPP we are doing 64 bit builds (for this case)
14CPPFLAGS_vmlinux.lds += -m64 -Usparc
13 15
14LDFLAGS := -m elf64_sparc 16LDFLAGS := -m elf64_sparc
15 17
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index 76eb832527f2..82cab5cc8070 100644
--- a/arch/sparc64/defconfig
+++ b/arch/sparc64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.26-rc2 3# Linux kernel version: 2.6.26
4# Fri May 16 13:36:07 2008 4# Fri Jul 18 00:47:07 2008
5# 5#
6CONFIG_SPARC=y 6CONFIG_SPARC=y
7CONFIG_SPARC64=y 7CONFIG_SPARC64=y
@@ -22,18 +22,6 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
22CONFIG_ARCH_NO_VIRT_TO_BUS=y 22CONFIG_ARCH_NO_VIRT_TO_BUS=y
23CONFIG_OF=y 23CONFIG_OF=y
24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
25CONFIG_SPARC64_PAGE_SIZE_8KB=y
26# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
27# CONFIG_SPARC64_PAGE_SIZE_512KB is not set
28# CONFIG_SPARC64_PAGE_SIZE_4MB is not set
29CONFIG_SECCOMP=y
30CONFIG_HZ_100=y
31# CONFIG_HZ_250 is not set
32# CONFIG_HZ_300 is not set
33# CONFIG_HZ_1000 is not set
34CONFIG_HZ=100
35# CONFIG_SCHED_HRTICK is not set
36CONFIG_HOTPLUG_CPU=y
37CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 25CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
38 26
39# 27#
@@ -105,6 +93,7 @@ CONFIG_KRETPROBES=y
105CONFIG_HAVE_KPROBES=y 93CONFIG_HAVE_KPROBES=y
106CONFIG_HAVE_KRETPROBES=y 94CONFIG_HAVE_KRETPROBES=y
107# CONFIG_HAVE_DMA_ATTRS is not set 95# CONFIG_HAVE_DMA_ATTRS is not set
96CONFIG_USE_GENERIC_SMP_HELPERS=y
108CONFIG_PROC_PAGE_MONITOR=y 97CONFIG_PROC_PAGE_MONITOR=y
109CONFIG_SLABINFO=y 98CONFIG_SLABINFO=y
110CONFIG_RT_MUTEXES=y 99CONFIG_RT_MUTEXES=y
@@ -121,6 +110,7 @@ CONFIG_STOP_MACHINE=y
121CONFIG_BLOCK=y 110CONFIG_BLOCK=y
122CONFIG_BLK_DEV_IO_TRACE=y 111CONFIG_BLK_DEV_IO_TRACE=y
123CONFIG_BLK_DEV_BSG=y 112CONFIG_BLK_DEV_BSG=y
113# CONFIG_BLK_DEV_INTEGRITY is not set
124CONFIG_BLOCK_COMPAT=y 114CONFIG_BLOCK_COMPAT=y
125 115
126# 116#
@@ -136,11 +126,21 @@ CONFIG_DEFAULT_AS=y
136# CONFIG_DEFAULT_NOOP is not set 126# CONFIG_DEFAULT_NOOP is not set
137CONFIG_DEFAULT_IOSCHED="anticipatory" 127CONFIG_DEFAULT_IOSCHED="anticipatory"
138CONFIG_CLASSIC_RCU=y 128CONFIG_CLASSIC_RCU=y
139CONFIG_GENERIC_HARDIRQS=y
140 129
141# 130#
142# General machine setup 131# Processor type and features
143# 132#
133CONFIG_SPARC64_PAGE_SIZE_8KB=y
134# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
135CONFIG_SECCOMP=y
136CONFIG_HZ_100=y
137# CONFIG_HZ_250 is not set
138# CONFIG_HZ_300 is not set
139# CONFIG_HZ_1000 is not set
140CONFIG_HZ=100
141# CONFIG_SCHED_HRTICK is not set
142CONFIG_HOTPLUG_CPU=y
143CONFIG_GENERIC_HARDIRQS=y
144CONFIG_TICK_ONESHOT=y 144CONFIG_TICK_ONESHOT=y
145CONFIG_NO_HZ=y 145CONFIG_NO_HZ=y
146CONFIG_HIGH_RES_TIMERS=y 146CONFIG_HIGH_RES_TIMERS=y
@@ -342,6 +342,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
342CONFIG_STANDALONE=y 342CONFIG_STANDALONE=y
343# CONFIG_PREVENT_FIRMWARE_BUILD is not set 343# CONFIG_PREVENT_FIRMWARE_BUILD is not set
344CONFIG_FW_LOADER=y 344CONFIG_FW_LOADER=y
345CONFIG_FIRMWARE_IN_KERNEL=y
346CONFIG_EXTRA_FIRMWARE=""
345# CONFIG_DEBUG_DRIVER is not set 347# CONFIG_DEBUG_DRIVER is not set
346# CONFIG_DEBUG_DEVRES is not set 348# CONFIG_DEBUG_DEVRES is not set
347# CONFIG_SYS_HYPERVISOR is not set 349# CONFIG_SYS_HYPERVISOR is not set
@@ -366,6 +368,7 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8
366CONFIG_CDROM_PKTCDVD_WCACHE=y 368CONFIG_CDROM_PKTCDVD_WCACHE=y
367CONFIG_ATA_OVER_ETH=m 369CONFIG_ATA_OVER_ETH=m
368CONFIG_SUNVDC=m 370CONFIG_SUNVDC=m
371# CONFIG_BLK_DEV_HD is not set
369CONFIG_MISC_DEVICES=y 372CONFIG_MISC_DEVICES=y
370# CONFIG_PHANTOM is not set 373# CONFIG_PHANTOM is not set
371# CONFIG_EEPROM_93CX6 is not set 374# CONFIG_EEPROM_93CX6 is not set
@@ -379,6 +382,7 @@ CONFIG_BLK_DEV_IDE=y
379# 382#
380# Please see Documentation/ide/ide.txt for help/info on IDE drives 383# Please see Documentation/ide/ide.txt for help/info on IDE drives
381# 384#
385CONFIG_IDE_TIMINGS=y
382# CONFIG_BLK_DEV_IDE_SATA is not set 386# CONFIG_BLK_DEV_IDE_SATA is not set
383CONFIG_BLK_DEV_IDEDISK=y 387CONFIG_BLK_DEV_IDEDISK=y
384# CONFIG_IDEDISK_MULTI_MODE is not set 388# CONFIG_IDEDISK_MULTI_MODE is not set
@@ -429,8 +433,6 @@ CONFIG_BLK_DEV_ALI15X3=y
429# CONFIG_BLK_DEV_VIA82CXXX is not set 433# CONFIG_BLK_DEV_VIA82CXXX is not set
430# CONFIG_BLK_DEV_TC86C001 is not set 434# CONFIG_BLK_DEV_TC86C001 is not set
431CONFIG_BLK_DEV_IDEDMA=y 435CONFIG_BLK_DEV_IDEDMA=y
432# CONFIG_BLK_DEV_HD_ONLY is not set
433# CONFIG_BLK_DEV_HD is not set
434 436
435# 437#
436# SCSI device support 438# SCSI device support
@@ -504,6 +506,7 @@ CONFIG_SCSI_LOWLEVEL=y
504# CONFIG_SCSI_DEBUG is not set 506# CONFIG_SCSI_DEBUG is not set
505# CONFIG_SCSI_SUNESP is not set 507# CONFIG_SCSI_SUNESP is not set
506# CONFIG_SCSI_SRP is not set 508# CONFIG_SCSI_SRP is not set
509# CONFIG_SCSI_DH is not set
507# CONFIG_ATA is not set 510# CONFIG_ATA is not set
508CONFIG_MD=y 511CONFIG_MD=y
509CONFIG_BLK_DEV_MD=m 512CONFIG_BLK_DEV_MD=m
@@ -529,6 +532,10 @@ CONFIG_DM_ZERO=m
529# 532#
530# IEEE 1394 (FireWire) support 533# IEEE 1394 (FireWire) support
531# 534#
535
536#
537# Enable only one of the two stacks, unless you know what you are doing
538#
532# CONFIG_FIREWIRE is not set 539# CONFIG_FIREWIRE is not set
533# CONFIG_IEEE1394 is not set 540# CONFIG_IEEE1394 is not set
534# CONFIG_I2O is not set 541# CONFIG_I2O is not set
@@ -745,7 +752,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y
745CONFIG_UNIX98_PTYS=y 752CONFIG_UNIX98_PTYS=y
746# CONFIG_LEGACY_PTYS is not set 753# CONFIG_LEGACY_PTYS is not set
747# CONFIG_IPMI_HANDLER is not set 754# CONFIG_IPMI_HANDLER is not set
748# CONFIG_HW_RANDOM is not set 755CONFIG_HW_RANDOM=m
756CONFIG_HW_RANDOM_N2RNG=m
749# CONFIG_R3964 is not set 757# CONFIG_R3964 is not set
750# CONFIG_APPLICOM is not set 758# CONFIG_APPLICOM is not set
751# CONFIG_RAW_DRIVER is not set 759# CONFIG_RAW_DRIVER is not set
@@ -759,38 +767,58 @@ CONFIG_I2C_ALGOBIT=y
759# 767#
760# I2C Hardware Bus support 768# I2C Hardware Bus support
761# 769#
770
771#
772# PC SMBus host controller drivers
773#
762# CONFIG_I2C_ALI1535 is not set 774# CONFIG_I2C_ALI1535 is not set
763# CONFIG_I2C_ALI1563 is not set 775# CONFIG_I2C_ALI1563 is not set
764# CONFIG_I2C_ALI15X3 is not set 776# CONFIG_I2C_ALI15X3 is not set
765# CONFIG_I2C_AMD756 is not set 777# CONFIG_I2C_AMD756 is not set
766# CONFIG_I2C_AMD8111 is not set 778# CONFIG_I2C_AMD8111 is not set
767# CONFIG_I2C_I801 is not set 779# CONFIG_I2C_I801 is not set
768# CONFIG_I2C_I810 is not set 780# CONFIG_I2C_ISCH is not set
769# CONFIG_I2C_PIIX4 is not set 781# CONFIG_I2C_PIIX4 is not set
770# CONFIG_I2C_NFORCE2 is not set 782# CONFIG_I2C_NFORCE2 is not set
771# CONFIG_I2C_OCORES is not set
772# CONFIG_I2C_PARPORT_LIGHT is not set
773# CONFIG_I2C_PROSAVAGE is not set
774# CONFIG_I2C_SAVAGE4 is not set
775# CONFIG_I2C_SIMTEC is not set
776# CONFIG_I2C_SIS5595 is not set 783# CONFIG_I2C_SIS5595 is not set
777# CONFIG_I2C_SIS630 is not set 784# CONFIG_I2C_SIS630 is not set
778# CONFIG_I2C_SIS96X is not set 785# CONFIG_I2C_SIS96X is not set
779# CONFIG_I2C_TAOS_EVM is not set
780# CONFIG_I2C_STUB is not set
781# CONFIG_I2C_TINY_USB is not set
782# CONFIG_I2C_VIA is not set 786# CONFIG_I2C_VIA is not set
783# CONFIG_I2C_VIAPRO is not set 787# CONFIG_I2C_VIAPRO is not set
788
789#
790# I2C system bus drivers (mostly embedded / system-on-chip)
791#
792# CONFIG_I2C_OCORES is not set
793# CONFIG_I2C_SIMTEC is not set
794
795#
796# External I2C/SMBus adapter drivers
797#
798# CONFIG_I2C_PARPORT_LIGHT is not set
799# CONFIG_I2C_TAOS_EVM is not set
800# CONFIG_I2C_TINY_USB is not set
801
802#
803# Graphics adapter I2C/DDC channel drivers
804#
784# CONFIG_I2C_VOODOO3 is not set 805# CONFIG_I2C_VOODOO3 is not set
806
807#
808# Other I2C/SMBus bus drivers
809#
785# CONFIG_I2C_PCA_PLATFORM is not set 810# CONFIG_I2C_PCA_PLATFORM is not set
811# CONFIG_I2C_STUB is not set
786 812
787# 813#
788# Miscellaneous I2C Chip support 814# Miscellaneous I2C Chip support
789# 815#
790# CONFIG_DS1682 is not set 816# CONFIG_DS1682 is not set
817# CONFIG_AT24 is not set
791# CONFIG_SENSORS_EEPROM is not set 818# CONFIG_SENSORS_EEPROM is not set
792# CONFIG_SENSORS_PCF8574 is not set 819# CONFIG_SENSORS_PCF8574 is not set
793# CONFIG_PCF8575 is not set 820# CONFIG_PCF8575 is not set
821# CONFIG_SENSORS_PCA9539 is not set
794# CONFIG_SENSORS_PCF8591 is not set 822# CONFIG_SENSORS_PCF8591 is not set
795# CONFIG_SENSORS_MAX6875 is not set 823# CONFIG_SENSORS_MAX6875 is not set
796# CONFIG_SENSORS_TSL2550 is not set 824# CONFIG_SENSORS_TSL2550 is not set
@@ -856,6 +884,7 @@ CONFIG_HWMON=y
856# CONFIG_SENSORS_W83627EHF is not set 884# CONFIG_SENSORS_W83627EHF is not set
857# CONFIG_HWMON_DEBUG_CHIP is not set 885# CONFIG_HWMON_DEBUG_CHIP is not set
858# CONFIG_THERMAL is not set 886# CONFIG_THERMAL is not set
887# CONFIG_THERMAL_HWMON is not set
859# CONFIG_WATCHDOG is not set 888# CONFIG_WATCHDOG is not set
860 889
861# 890#
@@ -985,15 +1014,7 @@ CONFIG_LOGO=y
985# CONFIG_LOGO_LINUX_VGA16 is not set 1014# CONFIG_LOGO_LINUX_VGA16 is not set
986# CONFIG_LOGO_LINUX_CLUT224 is not set 1015# CONFIG_LOGO_LINUX_CLUT224 is not set
987CONFIG_LOGO_SUN_CLUT224=y 1016CONFIG_LOGO_SUN_CLUT224=y
988
989#
990# Sound
991#
992CONFIG_SOUND=m 1017CONFIG_SOUND=m
993
994#
995# Advanced Linux Sound Architecture
996#
997CONFIG_SND=m 1018CONFIG_SND=m
998CONFIG_SND_TIMER=m 1019CONFIG_SND_TIMER=m
999CONFIG_SND_PCM=m 1020CONFIG_SND_PCM=m
@@ -1010,21 +1031,17 @@ CONFIG_SND_SUPPORT_OLD_API=y
1010CONFIG_SND_VERBOSE_PROCFS=y 1031CONFIG_SND_VERBOSE_PROCFS=y
1011# CONFIG_SND_VERBOSE_PRINTK is not set 1032# CONFIG_SND_VERBOSE_PRINTK is not set
1012# CONFIG_SND_DEBUG is not set 1033# CONFIG_SND_DEBUG is not set
1013 1034CONFIG_SND_VMASTER=y
1014#
1015# Generic devices
1016#
1017CONFIG_SND_MPU401_UART=m 1035CONFIG_SND_MPU401_UART=m
1018CONFIG_SND_AC97_CODEC=m 1036CONFIG_SND_AC97_CODEC=m
1037CONFIG_SND_DRIVERS=y
1019CONFIG_SND_DUMMY=m 1038CONFIG_SND_DUMMY=m
1020CONFIG_SND_VIRMIDI=m 1039CONFIG_SND_VIRMIDI=m
1021CONFIG_SND_MTPAV=m 1040CONFIG_SND_MTPAV=m
1022# CONFIG_SND_SERIAL_U16550 is not set 1041# CONFIG_SND_SERIAL_U16550 is not set
1023# CONFIG_SND_MPU401 is not set 1042# CONFIG_SND_MPU401 is not set
1024 1043# CONFIG_SND_AC97_POWER_SAVE is not set
1025# 1044CONFIG_SND_PCI=y
1026# PCI devices
1027#
1028# CONFIG_SND_AD1889 is not set 1045# CONFIG_SND_AD1889 is not set
1029# CONFIG_SND_ALS300 is not set 1046# CONFIG_SND_ALS300 is not set
1030CONFIG_SND_ALI5451=m 1047CONFIG_SND_ALI5451=m
@@ -1084,37 +1101,14 @@ CONFIG_SND_ALI5451=m
1084# CONFIG_SND_VIRTUOSO is not set 1101# CONFIG_SND_VIRTUOSO is not set
1085# CONFIG_SND_VX222 is not set 1102# CONFIG_SND_VX222 is not set
1086# CONFIG_SND_YMFPCI is not set 1103# CONFIG_SND_YMFPCI is not set
1087# CONFIG_SND_AC97_POWER_SAVE is not set 1104CONFIG_SND_USB=y
1088
1089#
1090# USB devices
1091#
1092# CONFIG_SND_USB_AUDIO is not set 1105# CONFIG_SND_USB_AUDIO is not set
1093# CONFIG_SND_USB_CAIAQ is not set 1106# CONFIG_SND_USB_CAIAQ is not set
1094 1107CONFIG_SND_SPARC=y
1095#
1096# ALSA Sparc devices
1097#
1098# CONFIG_SND_SUN_AMD7930 is not set 1108# CONFIG_SND_SUN_AMD7930 is not set
1099CONFIG_SND_SUN_CS4231=m 1109CONFIG_SND_SUN_CS4231=m
1100# CONFIG_SND_SUN_DBRI is not set 1110# CONFIG_SND_SUN_DBRI is not set
1101
1102#
1103# System on Chip audio support
1104#
1105# CONFIG_SND_SOC is not set 1111# CONFIG_SND_SOC is not set
1106
1107#
1108# ALSA SoC audio for Freescale SOCs
1109#
1110
1111#
1112# SoC Audio for the Texas Instruments OMAP
1113#
1114
1115#
1116# Open Sound System
1117#
1118# CONFIG_SOUND_PRIME is not set 1112# CONFIG_SOUND_PRIME is not set
1119CONFIG_AC97_BUS=m 1113CONFIG_AC97_BUS=m
1120CONFIG_HID_SUPPORT=y 1114CONFIG_HID_SUPPORT=y
@@ -1167,6 +1161,7 @@ CONFIG_USB_UHCI_HCD=m
1167# 1161#
1168# CONFIG_USB_ACM is not set 1162# CONFIG_USB_ACM is not set
1169# CONFIG_USB_PRINTER is not set 1163# CONFIG_USB_PRINTER is not set
1164# CONFIG_USB_WDM is not set
1170 1165
1171# 1166#
1172# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1167# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1226,6 +1221,7 @@ CONFIG_USB_STORAGE=m
1226# CONFIG_USB_TRANCEVIBRATOR is not set 1221# CONFIG_USB_TRANCEVIBRATOR is not set
1227# CONFIG_USB_IOWARRIOR is not set 1222# CONFIG_USB_IOWARRIOR is not set
1228# CONFIG_USB_TEST is not set 1223# CONFIG_USB_TEST is not set
1224# CONFIG_USB_ISIGHTFW is not set
1229# CONFIG_USB_GADGET is not set 1225# CONFIG_USB_GADGET is not set
1230# CONFIG_MMC is not set 1226# CONFIG_MMC is not set
1231# CONFIG_MEMSTICK is not set 1227# CONFIG_MEMSTICK is not set
@@ -1420,6 +1416,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
1420# CONFIG_BACKTRACE_SELF_TEST is not set 1416# CONFIG_BACKTRACE_SELF_TEST is not set
1421# CONFIG_LKDTM is not set 1417# CONFIG_LKDTM is not set
1422# CONFIG_FAULT_INJECTION is not set 1418# CONFIG_FAULT_INJECTION is not set
1419CONFIG_HAVE_FTRACE=y
1420CONFIG_HAVE_DYNAMIC_FTRACE=y
1421# CONFIG_FTRACE is not set
1422# CONFIG_IRQSOFF_TRACER is not set
1423# CONFIG_SCHED_TRACER is not set
1424# CONFIG_CONTEXT_SWITCH_TRACER is not set
1423# CONFIG_SAMPLES is not set 1425# CONFIG_SAMPLES is not set
1424CONFIG_HAVE_ARCH_KGDB=y 1426CONFIG_HAVE_ARCH_KGDB=y
1425# CONFIG_KGDB is not set 1427# CONFIG_KGDB is not set
@@ -1486,6 +1488,10 @@ CONFIG_CRYPTO_CRC32C=m
1486CONFIG_CRYPTO_MD4=y 1488CONFIG_CRYPTO_MD4=y
1487CONFIG_CRYPTO_MD5=y 1489CONFIG_CRYPTO_MD5=y
1488CONFIG_CRYPTO_MICHAEL_MIC=m 1490CONFIG_CRYPTO_MICHAEL_MIC=m
1491# CONFIG_CRYPTO_RMD128 is not set
1492# CONFIG_CRYPTO_RMD160 is not set
1493# CONFIG_CRYPTO_RMD256 is not set
1494# CONFIG_CRYPTO_RMD320 is not set
1489CONFIG_CRYPTO_SHA1=y 1495CONFIG_CRYPTO_SHA1=y
1490CONFIG_CRYPTO_SHA256=m 1496CONFIG_CRYPTO_SHA256=m
1491CONFIG_CRYPTO_SHA512=m 1497CONFIG_CRYPTO_SHA512=m
@@ -1527,6 +1533,7 @@ CONFIG_BITREVERSE=y
1527# CONFIG_GENERIC_FIND_FIRST_BIT is not set 1533# CONFIG_GENERIC_FIND_FIRST_BIT is not set
1528CONFIG_CRC_CCITT=m 1534CONFIG_CRC_CCITT=m
1529CONFIG_CRC16=m 1535CONFIG_CRC16=m
1536# CONFIG_CRC_T10DIF is not set
1530# CONFIG_CRC_ITU_T is not set 1537# CONFIG_CRC_ITU_T is not set
1531CONFIG_CRC32=y 1538CONFIG_CRC32=y
1532# CONFIG_CRC7 is not set 1539# CONFIG_CRC7 is not set
diff --git a/arch/sparc64/kernel/central.c b/arch/sparc64/kernel/central.c
index b61b8dfb09cf..f2e87d0d7e1d 100644
--- a/arch/sparc64/kernel/central.c
+++ b/arch/sparc64/kernel/central.c
@@ -16,8 +16,8 @@
16#include <asm/fhc.h> 16#include <asm/fhc.h>
17#include <asm/starfire.h> 17#include <asm/starfire.h>
18 18
19struct linux_central *central_bus = NULL; 19static struct linux_central *central_bus = NULL;
20struct linux_fhc *fhc_list = NULL; 20static struct linux_fhc *fhc_list = NULL;
21 21
22#define IS_CENTRAL_FHC(__fhc) ((__fhc) == central_bus->child) 22#define IS_CENTRAL_FHC(__fhc) ((__fhc) == central_bus->child)
23 23
@@ -79,9 +79,9 @@ static void adjust_regs(struct linux_prom_registers *regp, int nregs,
79} 79}
80 80
81/* Apply probed fhc ranges to registers passed, if no ranges return. */ 81/* Apply probed fhc ranges to registers passed, if no ranges return. */
82void apply_fhc_ranges(struct linux_fhc *fhc, 82static void apply_fhc_ranges(struct linux_fhc *fhc,
83 struct linux_prom_registers *regs, 83 struct linux_prom_registers *regs,
84 int nregs) 84 int nregs)
85{ 85{
86 if (fhc->num_fhc_ranges) 86 if (fhc->num_fhc_ranges)
87 adjust_regs(regs, nregs, fhc->fhc_ranges, 87 adjust_regs(regs, nregs, fhc->fhc_ranges,
@@ -89,8 +89,8 @@ void apply_fhc_ranges(struct linux_fhc *fhc,
89} 89}
90 90
91/* Apply probed central ranges to registers passed, if no ranges return. */ 91/* Apply probed central ranges to registers passed, if no ranges return. */
92void apply_central_ranges(struct linux_central *central, 92static void apply_central_ranges(struct linux_central *central,
93 struct linux_prom_registers *regs, int nregs) 93 struct linux_prom_registers *regs, int nregs)
94{ 94{
95 if (central->num_central_ranges) 95 if (central->num_central_ranges)
96 adjust_regs(regs, nregs, central->central_ranges, 96 adjust_regs(regs, nregs, central->central_ranges,
diff --git a/arch/sparc64/kernel/ds.c b/arch/sparc64/kernel/ds.c
index edb74f5a1186..d0fa5aa38934 100644
--- a/arch/sparc64/kernel/ds.c
+++ b/arch/sparc64/kernel/ds.c
@@ -159,7 +159,7 @@ static void ds_var_data(struct ds_info *dp,
159 struct ds_cap_state *cp, 159 struct ds_cap_state *cp,
160 void *buf, int len); 160 void *buf, int len);
161 161
162struct ds_cap_state ds_states_template[] = { 162static struct ds_cap_state ds_states_template[] = {
163 { 163 {
164 .service_id = "md-update", 164 .service_id = "md-update",
165 .data = md_update_data, 165 .data = md_update_data,
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c
index c49d0388b793..4d58d7ce708d 100644
--- a/arch/sparc64/kernel/ebus.c
+++ b/arch/sparc64/kernel/ebus.c
@@ -401,7 +401,7 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de
401 dev->ofdev.node = dp; 401 dev->ofdev.node = dp;
402 dev->ofdev.dev.parent = &dev->bus->ofdev.dev; 402 dev->ofdev.dev.parent = &dev->bus->ofdev.dev;
403 dev->ofdev.dev.bus = &ebus_bus_type; 403 dev->ofdev.dev.bus = &ebus_bus_type;
404 sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); 404 dev_set_name(&dev->ofdev.dev, "ebus[%08x]", dp->node);
405 405
406 /* Register with core */ 406 /* Register with core */
407 if (of_device_register(&dev->ofdev) != 0) 407 if (of_device_register(&dev->ofdev) != 0)
@@ -501,7 +501,7 @@ void __init ebus_init(void)
501 ebus->ofdev.node = dp; 501 ebus->ofdev.node = dp;
502 ebus->ofdev.dev.parent = &pdev->dev; 502 ebus->ofdev.dev.parent = &pdev->dev;
503 ebus->ofdev.dev.bus = &ebus_bus_type; 503 ebus->ofdev.dev.bus = &ebus_bus_type;
504 sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); 504 dev_set_name(&ebus->ofdev.dev, "ebus%d", num_ebus);
505 505
506 /* Register with core */ 506 /* Register with core */
507 if (of_device_register(&ebus->ofdev) != 0) 507 if (of_device_register(&ebus->ofdev) != 0)
diff --git a/arch/sparc64/kernel/hvapi.c b/arch/sparc64/kernel/hvapi.c
index f34f5d6181ef..691760b5b012 100644
--- a/arch/sparc64/kernel/hvapi.c
+++ b/arch/sparc64/kernel/hvapi.c
@@ -34,8 +34,12 @@ static struct api_info api_table[] = {
34 { .group = HV_GRP_LDOM, }, 34 { .group = HV_GRP_LDOM, },
35 { .group = HV_GRP_SVC_CHAN, .flags = FLAG_PRE_API }, 35 { .group = HV_GRP_SVC_CHAN, .flags = FLAG_PRE_API },
36 { .group = HV_GRP_NCS, .flags = FLAG_PRE_API }, 36 { .group = HV_GRP_NCS, .flags = FLAG_PRE_API },
37 { .group = HV_GRP_RNG, },
37 { .group = HV_GRP_NIAG_PERF, .flags = FLAG_PRE_API }, 38 { .group = HV_GRP_NIAG_PERF, .flags = FLAG_PRE_API },
38 { .group = HV_GRP_FIRE_PERF, }, 39 { .group = HV_GRP_FIRE_PERF, },
40 { .group = HV_GRP_N2_CPU, },
41 { .group = HV_GRP_NIU, },
42 { .group = HV_GRP_VF_CPU, },
39 { .group = HV_GRP_DIAG, .flags = FLAG_PRE_API }, 43 { .group = HV_GRP_DIAG, .flags = FLAG_PRE_API },
40}; 44};
41 45
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c
index d569f60c24b8..4fd48ab7dda4 100644
--- a/arch/sparc64/kernel/of_device.c
+++ b/arch/sparc64/kernel/of_device.c
@@ -797,9 +797,9 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
797 op->dev.parent = parent; 797 op->dev.parent = parent;
798 op->dev.bus = &of_platform_bus_type; 798 op->dev.bus = &of_platform_bus_type;
799 if (!parent) 799 if (!parent)
800 strcpy(op->dev.bus_id, "root"); 800 dev_set_name(&op->dev, "root");
801 else 801 else
802 sprintf(op->dev.bus_id, "%08x", dp->node); 802 dev_set_name(&op->dev, "%08x", dp->node);
803 803
804 if (of_device_register(op)) { 804 if (of_device_register(op)) {
805 printk("%s: Could not register of device.\n", 805 printk("%s: Could not register of device.\n",
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c
index d00a3656c287..55096195458f 100644
--- a/arch/sparc64/kernel/pci.c
+++ b/arch/sparc64/kernel/pci.c
@@ -408,7 +408,7 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
408 dev->class = class >> 8; 408 dev->class = class >> 8;
409 dev->revision = class & 0xff; 409 dev->revision = class & 0xff;
410 410
411 sprintf(dev->dev.bus_id, "%04x:%02x:%02x.%d", pci_domain_nr(bus), 411 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(bus),
412 dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); 412 dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn));
413 413
414 if (ofpci_verbose) 414 if (ofpci_verbose)
diff --git a/arch/sparc64/kernel/pci_msi.c b/arch/sparc64/kernel/pci_msi.c
index db5e8fd8f674..60c71e350212 100644
--- a/arch/sparc64/kernel/pci_msi.c
+++ b/arch/sparc64/kernel/pci_msi.c
@@ -120,9 +120,9 @@ static struct irq_chip msi_irq = {
120 /* XXX affinity XXX */ 120 /* XXX affinity XXX */
121}; 121};
122 122
123int sparc64_setup_msi_irq(unsigned int *virt_irq_p, 123static int sparc64_setup_msi_irq(unsigned int *virt_irq_p,
124 struct pci_dev *pdev, 124 struct pci_dev *pdev,
125 struct msi_desc *entry) 125 struct msi_desc *entry)
126{ 126{
127 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; 127 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
128 const struct sparc64_msiq_ops *ops = pbm->msi_ops; 128 const struct sparc64_msiq_ops *ops = pbm->msi_ops;
@@ -179,8 +179,8 @@ out_err:
179 return err; 179 return err;
180} 180}
181 181
182void sparc64_teardown_msi_irq(unsigned int virt_irq, 182static void sparc64_teardown_msi_irq(unsigned int virt_irq,
183 struct pci_dev *pdev) 183 struct pci_dev *pdev)
184{ 184{
185 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; 185 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
186 const struct sparc64_msiq_ops *ops = pbm->msi_ops; 186 const struct sparc64_msiq_ops *ops = pbm->msi_ops;
diff --git a/arch/sparc64/kernel/pci_sun4v.c b/arch/sparc64/kernel/pci_sun4v.c
index e2bb9790039c..a104c80d319d 100644
--- a/arch/sparc64/kernel/pci_sun4v.c
+++ b/arch/sparc64/kernel/pci_sun4v.c
@@ -531,7 +531,7 @@ static void dma_4v_sync_sg_for_cpu(struct device *dev,
531 /* Nothing to do... */ 531 /* Nothing to do... */
532} 532}
533 533
534const struct dma_ops sun4v_dma_ops = { 534static const struct dma_ops sun4v_dma_ops = {
535 .alloc_coherent = dma_4v_alloc_coherent, 535 .alloc_coherent = dma_4v_alloc_coherent,
536 .free_coherent = dma_4v_free_coherent, 536 .free_coherent = dma_4v_free_coherent,
537 .map_single = dma_4v_map_single, 537 .map_single = dma_4v_map_single,
diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
index 2084f81a76e1..31ea752d307b 100644
--- a/arch/sparc64/kernel/process.c
+++ b/arch/sparc64/kernel/process.c
@@ -15,7 +15,6 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/sched.h> 16#include <linux/sched.h>
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/kallsyms.h>
19#include <linux/mm.h> 18#include <linux/mm.h>
20#include <linux/fs.h> 19#include <linux/fs.h>
21#include <linux/smp.h> 20#include <linux/smp.h>
@@ -211,7 +210,7 @@ static void show_regwindow(struct pt_regs *regs)
211 printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n", 210 printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n",
212 rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]); 211 rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]);
213 if (regs->tstate & TSTATE_PRIV) 212 if (regs->tstate & TSTATE_PRIV)
214 print_symbol("I7: <%s>\n", rwk->ins[7]); 213 printk("I7: <%pS>\n", (void *) rwk->ins[7]);
215} 214}
216 215
217#ifdef CONFIG_SMP 216#ifdef CONFIG_SMP
@@ -232,7 +231,7 @@ void __show_regs(struct pt_regs * regs)
232#endif 231#endif
233 printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x %s\n", regs->tstate, 232 printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x %s\n", regs->tstate,
234 regs->tpc, regs->tnpc, regs->y, print_tainted()); 233 regs->tpc, regs->tnpc, regs->y, print_tainted());
235 print_symbol("TPC: <%s>\n", regs->tpc); 234 printk("TPC: <%pS>\n", (void *) regs->tpc);
236 printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n", 235 printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n",
237 regs->u_regs[0], regs->u_regs[1], regs->u_regs[2], 236 regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
238 regs->u_regs[3]); 237 regs->u_regs[3]);
@@ -245,7 +244,7 @@ void __show_regs(struct pt_regs * regs)
245 printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n", 244 printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n",
246 regs->u_regs[12], regs->u_regs[13], regs->u_regs[14], 245 regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
247 regs->u_regs[15]); 246 regs->u_regs[15]);
248 print_symbol("RPC: <%s>\n", regs->u_regs[15]); 247 printk("RPC: <%pS>\n", (void *) regs->u_regs[15]);
249 show_regwindow(regs); 248 show_regwindow(regs);
250#ifdef CONFIG_SMP 249#ifdef CONFIG_SMP
251 spin_unlock(&regdump_lock); 250 spin_unlock(&regdump_lock);
@@ -346,9 +345,6 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)
346{ 345{
347 struct thread_info *tp = current_thread_info(); 346 struct thread_info *tp = current_thread_info();
348 struct pt_regs *regs = get_irq_regs(); 347 struct pt_regs *regs = get_irq_regs();
349#ifdef CONFIG_KALLSYMS
350 char buffer[KSYM_SYMBOL_LEN];
351#endif
352 unsigned long flags; 348 unsigned long flags;
353 int this_cpu, cpu; 349 int this_cpu, cpu;
354 350
@@ -377,17 +373,13 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)
377 gp->tstate, gp->tpc, gp->tnpc, 373 gp->tstate, gp->tpc, gp->tnpc,
378 ((tp && tp->task) ? tp->task->comm : "NULL"), 374 ((tp && tp->task) ? tp->task->comm : "NULL"),
379 ((tp && tp->task) ? tp->task->pid : -1)); 375 ((tp && tp->task) ? tp->task->pid : -1));
380#ifdef CONFIG_KALLSYMS 376
381 if (gp->tstate & TSTATE_PRIV) { 377 if (gp->tstate & TSTATE_PRIV) {
382 sprint_symbol(buffer, gp->tpc); 378 printk(" TPC[%pS] O7[%pS] I7[%pS]\n",
383 printk(" TPC[%s] ", buffer); 379 (void *) gp->tpc,
384 sprint_symbol(buffer, gp->o7); 380 (void *) gp->o7,
385 printk("O7[%s] ", buffer); 381 (void *) gp->i7);
386 sprint_symbol(buffer, gp->i7); 382 } else {
387 printk("I7[%s]\n", buffer);
388 } else
389#endif
390 {
391 printk(" TPC[%lx] O7[%lx] I7[%lx]\n", 383 printk(" TPC[%lx] O7[%lx] I7[%lx]\n",
392 gp->tpc, gp->o7, gp->i7); 384 gp->tpc, gp->o7, gp->i7);
393 } 385 }
@@ -691,9 +683,9 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
691 ((unsigned long) child_sf) - STACK_BIAS; 683 ((unsigned long) child_sf) - STACK_BIAS;
692 684
693 /* Special case, if we are spawning a kernel thread from 685 /* Special case, if we are spawning a kernel thread from
694 * a userspace task (via KMOD, NFS, or similar) we must 686 * a userspace task (usermode helper, NFS or similar), we
695 * disable performance counters in the child because the 687 * must disable performance counters in the child because
696 * address space and protection realm are changing. 688 * the address space and protection realm are changing.
697 */ 689 */
698 if (t->flags & _TIF_PERFCTR) { 690 if (t->flags & _TIF_PERFCTR) {
699 t->user_cntd0 = t->user_cntd1 = NULL; 691 t->user_cntd0 = t->user_cntd1 = NULL;
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index c099d96f1239..7cf72b4bb108 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -788,89 +788,36 @@ static void smp_start_sync_tick_client(int cpu)
788 0, 0, 0, mask); 788 0, 0, 0, mask);
789} 789}
790 790
791/* Send cross call to all processors except self. */
792#define smp_cross_call(func, ctx, data1, data2) \
793 smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
794
795struct call_data_struct {
796 void (*func) (void *info);
797 void *info;
798 atomic_t finished;
799 int wait;
800};
801
802static struct call_data_struct *call_data;
803
804extern unsigned long xcall_call_function; 791extern unsigned long xcall_call_function;
805 792
806/** 793void arch_send_call_function_ipi(cpumask_t mask)
807 * smp_call_function(): Run a function on all other CPUs.
808 * @func: The function to run. This must be fast and non-blocking.
809 * @info: An arbitrary pointer to pass to the function.
810 * @wait: If true, wait (atomically) until function has completed on other CPUs.
811 *
812 * Returns 0 on success, else a negative status code. Does not return until
813 * remote CPUs are nearly ready to execute <<func>> or are or have executed.
814 *
815 * You must not call this function with disabled interrupts or from a
816 * hardware interrupt handler or from a bottom half handler.
817 */
818static int sparc64_smp_call_function_mask(void (*func)(void *info), void *info,
819 int wait, cpumask_t mask)
820{ 794{
821 struct call_data_struct data;
822 int cpus;
823
824 /* Can deadlock when called with interrupts disabled */
825 WARN_ON(irqs_disabled());
826
827 data.func = func;
828 data.info = info;
829 atomic_set(&data.finished, 0);
830 data.wait = wait;
831
832 spin_lock(&call_lock);
833
834 cpu_clear(smp_processor_id(), mask);
835 cpus = cpus_weight(mask);
836 if (!cpus)
837 goto out_unlock;
838
839 call_data = &data;
840 mb();
841
842 smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask); 795 smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask);
796}
843 797
844 /* Wait for response */ 798extern unsigned long xcall_call_function_single;
845 while (atomic_read(&data.finished) != cpus)
846 cpu_relax();
847 799
848out_unlock: 800void arch_send_call_function_single_ipi(int cpu)
849 spin_unlock(&call_lock); 801{
802 cpumask_t mask = cpumask_of_cpu(cpu);
850 803
851 return 0; 804 smp_cross_call_masked(&xcall_call_function_single, 0, 0, 0, mask);
852} 805}
853 806
854int smp_call_function(void (*func)(void *info), void *info, int wait) 807/* Send cross call to all processors except self. */
855{ 808#define smp_cross_call(func, ctx, data1, data2) \
856 return sparc64_smp_call_function_mask(func, info, wait, cpu_online_map); 809 smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
857}
858 810
859void smp_call_function_client(int irq, struct pt_regs *regs) 811void smp_call_function_client(int irq, struct pt_regs *regs)
860{ 812{
861 void (*func) (void *info) = call_data->func; 813 clear_softint(1 << irq);
862 void *info = call_data->info; 814 generic_smp_call_function_interrupt();
815}
863 816
817void smp_call_function_single_client(int irq, struct pt_regs *regs)
818{
864 clear_softint(1 << irq); 819 clear_softint(1 << irq);
865 if (call_data->wait) { 820 generic_smp_call_function_single_interrupt();
866 /* let initiator proceed only after completion */
867 func(info);
868 atomic_inc(&call_data->finished);
869 } else {
870 /* let initiator proceed after getting data */
871 atomic_inc(&call_data->finished);
872 func(info);
873 }
874} 821}
875 822
876static void tsb_sync(void *info) 823static void tsb_sync(void *info)
@@ -890,7 +837,7 @@ static void tsb_sync(void *info)
890 837
891void smp_tsb_sync(struct mm_struct *mm) 838void smp_tsb_sync(struct mm_struct *mm)
892{ 839{
893 sparc64_smp_call_function_mask(tsb_sync, mm, 1, mm->cpu_vm_mask); 840 smp_call_function_mask(mm->cpu_vm_mask, tsb_sync, mm, 1);
894} 841}
895 842
896extern unsigned long xcall_flush_tlb_mm; 843extern unsigned long xcall_flush_tlb_mm;
diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c
index 49d3ea50c247..504e678ee128 100644
--- a/arch/sparc64/kernel/sparc64_ksyms.c
+++ b/arch/sparc64/kernel/sparc64_ksyms.c
@@ -108,8 +108,6 @@ EXPORT_SYMBOL(__read_unlock);
108EXPORT_SYMBOL(__write_lock); 108EXPORT_SYMBOL(__write_lock);
109EXPORT_SYMBOL(__write_unlock); 109EXPORT_SYMBOL(__write_unlock);
110EXPORT_SYMBOL(__write_trylock); 110EXPORT_SYMBOL(__write_trylock);
111
112EXPORT_SYMBOL(smp_call_function);
113#endif /* CONFIG_SMP */ 111#endif /* CONFIG_SMP */
114 112
115#ifdef CONFIG_MCOUNT 113#ifdef CONFIG_MCOUNT
diff --git a/arch/sparc64/kernel/sys_sparc.c b/arch/sparc64/kernel/sys_sparc.c
index ac1bff58c1ac..e1f4eba2e576 100644
--- a/arch/sparc64/kernel/sys_sparc.c
+++ b/arch/sparc64/kernel/sys_sparc.c
@@ -542,7 +542,7 @@ asmlinkage long sparc64_personality(unsigned long personality)
542 return ret; 542 return ret;
543} 543}
544 544
545int sparc64_mmap_check(unsigned long addr, unsigned long len) 545int sparc_mmap_check(unsigned long addr, unsigned long len)
546{ 546{
547 if (test_thread_flag(TIF_32BIT)) { 547 if (test_thread_flag(TIF_32BIT)) {
548 if (len >= STACK_TOP32) 548 if (len >= STACK_TOP32)
@@ -614,9 +614,9 @@ asmlinkage unsigned long sys64_mremap(unsigned long addr,
614 goto out; 614 goto out;
615 if (unlikely(new_len >= VA_EXCLUDE_START)) 615 if (unlikely(new_len >= VA_EXCLUDE_START))
616 goto out; 616 goto out;
617 if (unlikely(sparc64_mmap_check(addr, old_len))) 617 if (unlikely(sparc_mmap_check(addr, old_len)))
618 goto out; 618 goto out;
619 if (unlikely(sparc64_mmap_check(new_addr, new_len))) 619 if (unlikely(sparc_mmap_check(new_addr, new_len)))
620 goto out; 620 goto out;
621 621
622 down_write(&current->mm->mmap_sem); 622 down_write(&current->mm->mmap_sem);
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
index ba5bd626b39e..97b77fb5c50e 100644
--- a/arch/sparc64/kernel/sys_sparc32.c
+++ b/arch/sparc64/kernel/sys_sparc32.c
@@ -359,7 +359,8 @@ int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
359 return err; 359 return err;
360} 360}
361 361
362int cp_compat_stat64(struct kstat *stat, struct compat_stat64 __user *statbuf) 362static int cp_compat_stat64(struct kstat *stat,
363 struct compat_stat64 __user *statbuf)
363{ 364{
364 int err; 365 int err;
365 366
@@ -870,9 +871,9 @@ asmlinkage unsigned long sys32_mremap(unsigned long addr,
870 unsigned long ret = -EINVAL; 871 unsigned long ret = -EINVAL;
871 unsigned long new_addr = __new_addr; 872 unsigned long new_addr = __new_addr;
872 873
873 if (unlikely(sparc64_mmap_check(addr, old_len))) 874 if (unlikely(sparc_mmap_check(addr, old_len)))
874 goto out; 875 goto out;
875 if (unlikely(sparc64_mmap_check(new_addr, new_len))) 876 if (unlikely(sparc_mmap_check(new_addr, new_len)))
876 goto out; 877 goto out;
877 down_write(&current->mm->mmap_sem); 878 down_write(&current->mm->mmap_sem);
878 ret = do_mremap(addr, old_len, new_len, flags, new_addr); 879 ret = do_mremap(addr, old_len, new_len, flags, new_addr);
diff --git a/arch/sparc64/kernel/sysfs.c b/arch/sparc64/kernel/sysfs.c
index e885034a6b73..84e5ce146713 100644
--- a/arch/sparc64/kernel/sysfs.c
+++ b/arch/sparc64/kernel/sysfs.c
@@ -14,7 +14,8 @@
14static DEFINE_PER_CPU(struct hv_mmu_statistics, mmu_stats) __attribute__((aligned(64))); 14static DEFINE_PER_CPU(struct hv_mmu_statistics, mmu_stats) __attribute__((aligned(64)));
15 15
16#define SHOW_MMUSTAT_ULONG(NAME) \ 16#define SHOW_MMUSTAT_ULONG(NAME) \
17static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 17static ssize_t show_##NAME(struct sys_device *dev, \
18 struct sysdev_attribute *attr, char *buf) \
18{ \ 19{ \
19 struct hv_mmu_statistics *p = &per_cpu(mmu_stats, dev->id); \ 20 struct hv_mmu_statistics *p = &per_cpu(mmu_stats, dev->id); \
20 return sprintf(buf, "%lu\n", p->NAME); \ 21 return sprintf(buf, "%lu\n", p->NAME); \
@@ -135,13 +136,16 @@ static unsigned long write_mmustat_enable(unsigned long val)
135 return sun4v_mmustat_conf(ra, &orig_ra); 136 return sun4v_mmustat_conf(ra, &orig_ra);
136} 137}
137 138
138static ssize_t show_mmustat_enable(struct sys_device *s, char *buf) 139static ssize_t show_mmustat_enable(struct sys_device *s,
140 struct sysdev_attribute *attr, char *buf)
139{ 141{
140 unsigned long val = run_on_cpu(s->id, read_mmustat_enable, 0); 142 unsigned long val = run_on_cpu(s->id, read_mmustat_enable, 0);
141 return sprintf(buf, "%lx\n", val); 143 return sprintf(buf, "%lx\n", val);
142} 144}
143 145
144static ssize_t store_mmustat_enable(struct sys_device *s, const char *buf, size_t count) 146static ssize_t store_mmustat_enable(struct sys_device *s,
147 struct sysdev_attribute *attr, const char *buf,
148 size_t count)
145{ 149{
146 unsigned long val, err; 150 unsigned long val, err;
147 int ret = sscanf(buf, "%ld", &val); 151 int ret = sscanf(buf, "%ld", &val);
@@ -179,14 +183,16 @@ static void unregister_mmu_stats(struct sys_device *s)
179#endif 183#endif
180 184
181#define SHOW_CPUDATA_ULONG_NAME(NAME, MEMBER) \ 185#define SHOW_CPUDATA_ULONG_NAME(NAME, MEMBER) \
182static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 186static ssize_t show_##NAME(struct sys_device *dev, \
187 struct sysdev_attribute *attr, char *buf) \
183{ \ 188{ \
184 cpuinfo_sparc *c = &cpu_data(dev->id); \ 189 cpuinfo_sparc *c = &cpu_data(dev->id); \
185 return sprintf(buf, "%lu\n", c->MEMBER); \ 190 return sprintf(buf, "%lu\n", c->MEMBER); \
186} 191}
187 192
188#define SHOW_CPUDATA_UINT_NAME(NAME, MEMBER) \ 193#define SHOW_CPUDATA_UINT_NAME(NAME, MEMBER) \
189static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 194static ssize_t show_##NAME(struct sys_device *dev, \
195 struct sysdev_attribute *attr, char *buf) \
190{ \ 196{ \
191 cpuinfo_sparc *c = &cpu_data(dev->id); \ 197 cpuinfo_sparc *c = &cpu_data(dev->id); \
192 return sprintf(buf, "%u\n", c->MEMBER); \ 198 return sprintf(buf, "%u\n", c->MEMBER); \
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c
index 369749262653..bd30ecba5630 100644
--- a/arch/sparc64/kernel/traps.c
+++ b/arch/sparc64/kernel/traps.c
@@ -1,6 +1,6 @@
1/* arch/sparc64/kernel/traps.c 1/* arch/sparc64/kernel/traps.c
2 * 2 *
3 * Copyright (C) 1995,1997 David S. Miller (davem@davemloft.net) 3 * Copyright (C) 1995,1997,2008 David S. Miller (davem@davemloft.net)
4 * Copyright (C) 1997,1999,2000 Jakub Jelinek (jakub@redhat.com) 4 * Copyright (C) 1997,1999,2000 Jakub Jelinek (jakub@redhat.com)
5 */ 5 */
6 6
@@ -11,7 +11,6 @@
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/kallsyms.h>
15#include <linux/signal.h> 14#include <linux/signal.h>
16#include <linux/smp.h> 15#include <linux/smp.h>
17#include <linux/mm.h> 16#include <linux/mm.h>
@@ -37,9 +36,6 @@
37#include <asm/processor.h> 36#include <asm/processor.h>
38#include <asm/timer.h> 37#include <asm/timer.h>
39#include <asm/head.h> 38#include <asm/head.h>
40#ifdef CONFIG_KMOD
41#include <linux/kmod.h>
42#endif
43#include <asm/prom.h> 39#include <asm/prom.h>
44 40
45#include "entry.h" 41#include "entry.h"
@@ -74,7 +70,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p)
74 i + 1, 70 i + 1,
75 p->trapstack[i].tstate, p->trapstack[i].tpc, 71 p->trapstack[i].tstate, p->trapstack[i].tpc,
76 p->trapstack[i].tnpc, p->trapstack[i].tt); 72 p->trapstack[i].tnpc, p->trapstack[i].tt);
77 print_symbol("TRAPLOG: TPC<%s>\n", p->trapstack[i].tpc); 73 printk("TRAPLOG: TPC<%pS>\n", (void *) p->trapstack[i].tpc);
78 } 74 }
79} 75}
80 76
@@ -1081,7 +1077,7 @@ static void cheetah_log_errors(struct pt_regs *regs, struct cheetah_err_info *in
1081 regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate); 1077 regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate);
1082 printk("%s" "ERROR(%d): ", 1078 printk("%s" "ERROR(%d): ",
1083 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id()); 1079 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id());
1084 print_symbol("TPC<%s>\n", regs->tpc); 1080 printk("TPC<%pS>\n", (void *) regs->tpc);
1085 printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n", 1081 printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n",
1086 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), 1082 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(),
1087 (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT, 1083 (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT,
@@ -1689,7 +1685,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs)
1689 smp_processor_id(), 1685 smp_processor_id(),
1690 (type & 0x1) ? 'I' : 'D', 1686 (type & 0x1) ? 'I' : 'D',
1691 regs->tpc); 1687 regs->tpc);
1692 print_symbol(KERN_EMERG "TPC<%s>\n", regs->tpc); 1688 printk(KERN_EMERG "TPC<%pS>\n", (void *) regs->tpc);
1693 panic("Irrecoverable Cheetah+ parity error."); 1689 panic("Irrecoverable Cheetah+ parity error.");
1694 } 1690 }
1695 1691
@@ -1697,7 +1693,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs)
1697 smp_processor_id(), 1693 smp_processor_id(),
1698 (type & 0x1) ? 'I' : 'D', 1694 (type & 0x1) ? 'I' : 'D',
1699 regs->tpc); 1695 regs->tpc);
1700 print_symbol(KERN_WARNING "TPC<%s>\n", regs->tpc); 1696 printk(KERN_WARNING "TPC<%pS>\n", (void *) regs->tpc);
1701} 1697}
1702 1698
1703struct sun4v_error_entry { 1699struct sun4v_error_entry {
@@ -1904,9 +1900,10 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl)
1904 1900
1905 printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n", 1901 printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n",
1906 regs->tpc, tl); 1902 regs->tpc, tl);
1907 print_symbol(KERN_EMERG "SUN4V-ITLB: TPC<%s>\n", regs->tpc); 1903 printk(KERN_EMERG "SUN4V-ITLB: TPC<%pS>\n", (void *) regs->tpc);
1908 printk(KERN_EMERG "SUN4V-ITLB: O7[%lx]\n", regs->u_regs[UREG_I7]); 1904 printk(KERN_EMERG "SUN4V-ITLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
1909 print_symbol(KERN_EMERG "SUN4V-ITLB: O7<%s>\n", regs->u_regs[UREG_I7]); 1905 printk(KERN_EMERG "SUN4V-ITLB: O7<%pS>\n",
1906 (void *) regs->u_regs[UREG_I7]);
1910 printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] " 1907 printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] "
1911 "pte[%lx] error[%lx]\n", 1908 "pte[%lx] error[%lx]\n",
1912 sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx, 1909 sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx,
@@ -1927,9 +1924,10 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl)
1927 1924
1928 printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n", 1925 printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n",
1929 regs->tpc, tl); 1926 regs->tpc, tl);
1930 print_symbol(KERN_EMERG "SUN4V-DTLB: TPC<%s>\n", regs->tpc); 1927 printk(KERN_EMERG "SUN4V-DTLB: TPC<%pS>\n", (void *) regs->tpc);
1931 printk(KERN_EMERG "SUN4V-DTLB: O7[%lx]\n", regs->u_regs[UREG_I7]); 1928 printk(KERN_EMERG "SUN4V-DTLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
1932 print_symbol(KERN_EMERG "SUN4V-DTLB: O7<%s>\n", regs->u_regs[UREG_I7]); 1929 printk(KERN_EMERG "SUN4V-DTLB: O7<%pS>\n",
1930 (void *) regs->u_regs[UREG_I7]);
1933 printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] " 1931 printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] "
1934 "pte[%lx] error[%lx]\n", 1932 "pte[%lx] error[%lx]\n",
1935 sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx, 1933 sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx,
@@ -2111,10 +2109,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
2111 fp = ksp + STACK_BIAS; 2109 fp = ksp + STACK_BIAS;
2112 thread_base = (unsigned long) tp; 2110 thread_base = (unsigned long) tp;
2113 2111
2114 printk("Call Trace:"); 2112 printk("Call Trace:\n");
2115#ifdef CONFIG_KALLSYMS
2116 printk("\n");
2117#endif
2118 do { 2113 do {
2119 struct sparc_stackf *sf; 2114 struct sparc_stackf *sf;
2120 struct pt_regs *regs; 2115 struct pt_regs *regs;
@@ -2137,12 +2132,8 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
2137 fp = (unsigned long)sf->fp + STACK_BIAS; 2132 fp = (unsigned long)sf->fp + STACK_BIAS;
2138 } 2133 }
2139 2134
2140 printk(" [%016lx] ", pc); 2135 printk(" [%016lx] %pS\n", pc, (void *) pc);
2141 print_symbol("%s\n", pc);
2142 } while (++count < 16); 2136 } while (++count < 16);
2143#ifndef CONFIG_KALLSYMS
2144 printk("\n");
2145#endif
2146} 2137}
2147 2138
2148void dump_stack(void) 2139void dump_stack(void)
@@ -2211,9 +2202,8 @@ void die_if_kernel(char *str, struct pt_regs *regs)
2211 while (rw && 2202 while (rw &&
2212 count++ < 30&& 2203 count++ < 30&&
2213 is_kernel_stack(current, rw)) { 2204 is_kernel_stack(current, rw)) {
2214 printk("Caller[%016lx]", rw->ins[7]); 2205 printk("Caller[%016lx]: %pS\n", rw->ins[7],
2215 print_symbol(": %s", rw->ins[7]); 2206 (void *) rw->ins[7]);
2216 printk("\n");
2217 2207
2218 rw = kernel_stack_up(rw); 2208 rw = kernel_stack_up(rw);
2219 } 2209 }
diff --git a/arch/sparc64/kernel/ttable.S b/arch/sparc64/kernel/ttable.S
index 450053af039e..1ade3d6fb7fc 100644
--- a/arch/sparc64/kernel/ttable.S
+++ b/arch/sparc64/kernel/ttable.S
@@ -58,7 +58,12 @@ tl0_irq3: BTRAP(0x43)
58tl0_irq4: BTRAP(0x44) 58tl0_irq4: BTRAP(0x44)
59#endif 59#endif
60tl0_irq5: TRAP_IRQ(handler_irq, 5) 60tl0_irq5: TRAP_IRQ(handler_irq, 5)
61tl0_irq6: BTRAP(0x46) BTRAP(0x47) BTRAP(0x48) BTRAP(0x49) 61#ifdef CONFIG_SMP
62tl0_irq6: TRAP_IRQ(smp_call_function_single_client, 6)
63#else
64tl0_irq6: BTRAP(0x46)
65#endif
66tl0_irq7: BTRAP(0x47) BTRAP(0x48) BTRAP(0x49)
62tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d) 67tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d)
63tl0_irq14: TRAP_IRQ(timer_interrupt, 14) 68tl0_irq14: TRAP_IRQ(timer_interrupt, 14)
64tl0_irq15: TRAP_IRQ(handler_irq, 15) 69tl0_irq15: TRAP_IRQ(handler_irq, 15)
diff --git a/arch/sparc64/kernel/unaligned.c b/arch/sparc64/kernel/unaligned.c
index afa7fc4f5193..203ddfad9f27 100644
--- a/arch/sparc64/kernel/unaligned.c
+++ b/arch/sparc64/kernel/unaligned.c
@@ -2,7 +2,7 @@
2 * unaligned.c: Unaligned load/store trap handling with special 2 * unaligned.c: Unaligned load/store trap handling with special
3 * cases for the kernel to do them more quickly. 3 * cases for the kernel to do them more quickly.
4 * 4 *
5 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 5 * Copyright (C) 1996,2008 David S. Miller (davem@davemloft.net)
6 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 6 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
7 */ 7 */
8 8
@@ -20,7 +20,6 @@
20#include <asm/uaccess.h> 20#include <asm/uaccess.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/bitops.h> 22#include <linux/bitops.h>
23#include <linux/kallsyms.h>
24#include <asm/fpumacro.h> 23#include <asm/fpumacro.h>
25 24
26/* #define DEBUG_MNA */ 25/* #define DEBUG_MNA */
@@ -289,8 +288,8 @@ static void log_unaligned(struct pt_regs *regs)
289 if (count < 5) { 288 if (count < 5) {
290 last_time = jiffies; 289 last_time = jiffies;
291 count++; 290 count++;
292 printk("Kernel unaligned access at TPC[%lx] ", regs->tpc); 291 printk("Kernel unaligned access at TPC[%lx] %pS\n",
293 print_symbol("%s\n", regs->tpc); 292 regs->tpc, (void *) regs->tpc);
294 } 293 }
295} 294}
296 295
diff --git a/arch/sparc64/kernel/vio.c b/arch/sparc64/kernel/vio.c
index e78b3517940b..a490077891a4 100644
--- a/arch/sparc64/kernel/vio.c
+++ b/arch/sparc64/kernel/vio.c
@@ -224,7 +224,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
224 if (!strcmp(type, "domain-services-port")) 224 if (!strcmp(type, "domain-services-port"))
225 bus_id_name = "ds"; 225 bus_id_name = "ds";
226 226
227 if (strlen(bus_id_name) >= KOBJ_NAME_LEN - 4) { 227 if (strlen(bus_id_name) >= BUS_ID_SIZE - 4) {
228 printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n", 228 printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n",
229 bus_id_name); 229 bus_id_name);
230 return NULL; 230 return NULL;
@@ -260,16 +260,14 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
260 vio_fill_channel_info(hp, mp, vdev); 260 vio_fill_channel_info(hp, mp, vdev);
261 261
262 if (!id) { 262 if (!id) {
263 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s", 263 dev_set_name(&vdev->dev, "%s", bus_id_name);
264 bus_id_name);
265 vdev->dev_no = ~(u64)0; 264 vdev->dev_no = ~(u64)0;
266 } else if (!cfg_handle) { 265 } else if (!cfg_handle) {
267 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu", 266 dev_set_name(&vdev->dev, "%s-%lu", bus_id_name, *id);
268 bus_id_name, *id);
269 vdev->dev_no = *id; 267 vdev->dev_no = *id;
270 } else { 268 } else {
271 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu-%lu", 269 dev_set_name(&vdev->dev, "%s-%lu-%lu", bus_id_name,
272 bus_id_name, *cfg_handle, *id); 270 *cfg_handle, *id);
273 vdev->dev_no = *cfg_handle; 271 vdev->dev_no = *cfg_handle;
274 } 272 }
275 273
@@ -292,12 +290,12 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
292 } 290 }
293 vdev->dp = dp; 291 vdev->dp = dp;
294 292
295 printk(KERN_INFO "VIO: Adding device %s\n", vdev->dev.bus_id); 293 printk(KERN_INFO "VIO: Adding device %s\n", dev_name(&vdev->dev));
296 294
297 err = device_register(&vdev->dev); 295 err = device_register(&vdev->dev);
298 if (err) { 296 if (err) {
299 printk(KERN_ERR "VIO: Could not register device %s, err=%d\n", 297 printk(KERN_ERR "VIO: Could not register device %s, err=%d\n",
300 vdev->dev.bus_id, err); 298 dev_name(&vdev->dev), err);
301 kfree(vdev); 299 kfree(vdev);
302 return NULL; 300 return NULL;
303 } 301 }
@@ -330,7 +328,7 @@ static void vio_remove(struct mdesc_handle *hp, u64 node)
330 dev = device_find_child(&root_vdev->dev, (void *) node, 328 dev = device_find_child(&root_vdev->dev, (void *) node,
331 vio_md_node_match); 329 vio_md_node_match);
332 if (dev) { 330 if (dev) {
333 printk(KERN_INFO "VIO: Removing device %s\n", dev->bus_id); 331 printk(KERN_INFO "VIO: Removing device %s\n", dev_name(dev));
334 332
335 device_unregister(dev); 333 device_unregister(dev);
336 } 334 }
diff --git a/arch/sparc64/lib/copy_page.S b/arch/sparc64/lib/copy_page.S
index 37460666a5c3..b243d3b606ba 100644
--- a/arch/sparc64/lib/copy_page.S
+++ b/arch/sparc64/lib/copy_page.S
@@ -25,9 +25,9 @@
25 25
26#define DCACHE_SIZE (PAGE_SIZE * 2) 26#define DCACHE_SIZE (PAGE_SIZE * 2)
27 27
28#if (PAGE_SHIFT == 13) || (PAGE_SHIFT == 19) 28#if (PAGE_SHIFT == 13)
29#define PAGE_SIZE_REM 0x80 29#define PAGE_SIZE_REM 0x80
30#elif (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) 30#elif (PAGE_SHIFT == 16)
31#define PAGE_SIZE_REM 0x100 31#define PAGE_SIZE_REM 0x100
32#else 32#else
33#error Wrong PAGE_SHIFT specified 33#error Wrong PAGE_SHIFT specified
@@ -198,7 +198,7 @@ cheetah_copy_page_insn:
198 cmp %o2, PAGE_SIZE_REM 198 cmp %o2, PAGE_SIZE_REM
199 bne,pt %xcc, 1b 199 bne,pt %xcc, 1b
200 add %o0, 0x40, %o0 200 add %o0, 0x40, %o0
201#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) 201#if (PAGE_SHIFT == 16)
202 TOUCH(f0, f2, f4, f6, f8, f10, f12, f14) 202 TOUCH(f0, f2, f4, f6, f8, f10, f12, f14)
203 ldda [%o1] ASI_BLK_P, %f32 203 ldda [%o1] ASI_BLK_P, %f32
204 stda %f48, [%o0] %asi 204 stda %f48, [%o0] %asi
diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c
index 236f4d228d2b..ea7d7ae76bc2 100644
--- a/arch/sparc64/mm/fault.c
+++ b/arch/sparc64/mm/fault.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc. 2 * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc.
3 * 3 *
4 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 4 * Copyright (C) 1996, 2008 David S. Miller (davem@davemloft.net)
5 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz) 5 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
6 */ 6 */
7 7
@@ -18,7 +18,6 @@
18#include <linux/init.h> 18#include <linux/init.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/kprobes.h> 20#include <linux/kprobes.h>
21#include <linux/kallsyms.h>
22#include <linux/kdebug.h> 21#include <linux/kdebug.h>
23 22
24#include <asm/page.h> 23#include <asm/page.h>
@@ -115,7 +114,7 @@ static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
115 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n", 114 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
116 regs->tpc); 115 regs->tpc);
117 printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]); 116 printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]);
118 print_symbol("RPC: <%s>\n", regs->u_regs[15]); 117 printk("OOPS: RPC <%pS>\n", (void *) regs->u_regs[15]);
119 printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr); 118 printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
120 dump_stack(); 119 dump_stack();
121 unhandled_fault(regs->tpc, current, regs); 120 unhandled_fault(regs->tpc, current, regs);
diff --git a/arch/sparc64/mm/tsb.c b/arch/sparc64/mm/tsb.c
index fe70c8a557b5..3547937b17a2 100644
--- a/arch/sparc64/mm/tsb.c
+++ b/arch/sparc64/mm/tsb.c
@@ -96,12 +96,6 @@ void flush_tsb_user(struct mmu_gather *mp)
96#elif defined(CONFIG_SPARC64_PAGE_SIZE_64KB) 96#elif defined(CONFIG_SPARC64_PAGE_SIZE_64KB)
97#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_64K 97#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_64K
98#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_64K 98#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_64K
99#elif defined(CONFIG_SPARC64_PAGE_SIZE_512KB)
100#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_512K
101#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_512K
102#elif defined(CONFIG_SPARC64_PAGE_SIZE_4MB)
103#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_4MB
104#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_4MB
105#else 99#else
106#error Broken base page size setting... 100#error Broken base page size setting...
107#endif 101#endif
diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S
index 9bb2d90a9df6..4c8ca131ffaf 100644
--- a/arch/sparc64/mm/ultra.S
+++ b/arch/sparc64/mm/ultra.S
@@ -688,6 +688,11 @@ xcall_call_function:
688 wr %g0, (1 << PIL_SMP_CALL_FUNC), %set_softint 688 wr %g0, (1 << PIL_SMP_CALL_FUNC), %set_softint
689 retry 689 retry
690 690
691 .globl xcall_call_function_single
692xcall_call_function_single:
693 wr %g0, (1 << PIL_SMP_CALL_FUNC_SNGL), %set_softint
694 retry
695
691 .globl xcall_receive_signal 696 .globl xcall_receive_signal
692xcall_receive_signal: 697xcall_receive_signal:
693 wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint 698 wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 85a87d2ac0c0..092f019e033a 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -8,7 +8,7 @@ source "lib/Kconfig.debug"
8config STRICT_DEVMEM 8config STRICT_DEVMEM
9 bool "Filter access to /dev/mem" 9 bool "Filter access to /dev/mem"
10 help 10 help
11 If this option is left on, you allow userspace (root) access to all 11 If this option is disabled, you allow userspace (root) access to all
12 of memory, including kernel and userspace memory. Accidental 12 of memory, including kernel and userspace memory. Accidental
13 access to this is obviously disastrous, but specific access can 13 access to this is obviously disastrous, but specific access can
14 be used by people debugging the kernel. Note that with PAT support 14 be used by people debugging the kernel. Note that with PAT support
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k7.h b/arch/x86/kernel/cpu/cpufreq/powernow-k7.h
index f8a63b3664e3..35fb4eaf6e1c 100644
--- a/arch/x86/kernel/cpu/cpufreq/powernow-k7.h
+++ b/arch/x86/kernel/cpu/cpufreq/powernow-k7.h
@@ -1,5 +1,4 @@
1/* 1/*
2 * $Id: powernow-k7.h,v 1.2 2003/02/10 18:26:01 davej Exp $
3 * (C) 2003 Dave Jones. 2 * (C) 2003 Dave Jones.
4 * 3 *
5 * Licensed under the terms of the GNU GPL License version 2. 4 * Licensed under the terms of the GNU GPL License version 2.
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c
index c4a7ec31394c..9ab65be82427 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_64.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_64.c
@@ -762,10 +762,14 @@ DEFINE_PER_CPU(struct sys_device, device_mce);
762 762
763/* Why are there no generic functions for this? */ 763/* Why are there no generic functions for this? */
764#define ACCESSOR(name, var, start) \ 764#define ACCESSOR(name, var, start) \
765 static ssize_t show_ ## name(struct sys_device *s, char *buf) { \ 765 static ssize_t show_ ## name(struct sys_device *s, \
766 struct sysdev_attribute *attr, \
767 char *buf) { \
766 return sprintf(buf, "%lx\n", (unsigned long)var); \ 768 return sprintf(buf, "%lx\n", (unsigned long)var); \
767 } \ 769 } \
768 static ssize_t set_ ## name(struct sys_device *s,const char *buf,size_t siz) { \ 770 static ssize_t set_ ## name(struct sys_device *s, \
771 struct sysdev_attribute *attr, \
772 const char *buf, size_t siz) { \
769 char *end; \ 773 char *end; \
770 unsigned long new = simple_strtoul(buf, &end, 0); \ 774 unsigned long new = simple_strtoul(buf, &end, 0); \
771 if (end == buf) return -EINVAL; \ 775 if (end == buf) return -EINVAL; \
@@ -786,14 +790,16 @@ ACCESSOR(bank3ctl,bank[3],mce_restart())
786ACCESSOR(bank4ctl,bank[4],mce_restart()) 790ACCESSOR(bank4ctl,bank[4],mce_restart())
787ACCESSOR(bank5ctl,bank[5],mce_restart()) 791ACCESSOR(bank5ctl,bank[5],mce_restart())
788 792
789static ssize_t show_trigger(struct sys_device *s, char *buf) 793static ssize_t show_trigger(struct sys_device *s, struct sysdev_attribute *attr,
794 char *buf)
790{ 795{
791 strcpy(buf, trigger); 796 strcpy(buf, trigger);
792 strcat(buf, "\n"); 797 strcat(buf, "\n");
793 return strlen(trigger) + 1; 798 return strlen(trigger) + 1;
794} 799}
795 800
796static ssize_t set_trigger(struct sys_device *s,const char *buf,size_t siz) 801static ssize_t set_trigger(struct sys_device *s, struct sysdev_attribute *attr,
802 const char *buf,size_t siz)
797{ 803{
798 char *p; 804 char *p;
799 int len; 805 int len;
@@ -806,12 +812,12 @@ static ssize_t set_trigger(struct sys_device *s,const char *buf,size_t siz)
806} 812}
807 813
808static SYSDEV_ATTR(trigger, 0644, show_trigger, set_trigger); 814static SYSDEV_ATTR(trigger, 0644, show_trigger, set_trigger);
809ACCESSOR(tolerant,tolerant,) 815static SYSDEV_INT_ATTR(tolerant, 0644, tolerant);
810ACCESSOR(check_interval,check_interval,mce_restart()) 816ACCESSOR(check_interval,check_interval,mce_restart())
811static struct sysdev_attribute *mce_attributes[] = { 817static struct sysdev_attribute *mce_attributes[] = {
812 &attr_bank0ctl, &attr_bank1ctl, &attr_bank2ctl, 818 &attr_bank0ctl, &attr_bank1ctl, &attr_bank2ctl,
813 &attr_bank3ctl, &attr_bank4ctl, &attr_bank5ctl, 819 &attr_bank3ctl, &attr_bank4ctl, &attr_bank5ctl,
814 &attr_tolerant, &attr_check_interval, &attr_trigger, 820 &attr_tolerant.attr, &attr_check_interval, &attr_trigger,
815 NULL 821 NULL
816}; 822};
817 823
diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
index 1f4cc48c14c6..d5ae2243f0b9 100644
--- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
+++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
@@ -35,6 +35,7 @@ atomic_t therm_throt_en = ATOMIC_INIT(0);
35 35
36#define define_therm_throt_sysdev_show_func(name) \ 36#define define_therm_throt_sysdev_show_func(name) \
37static ssize_t therm_throt_sysdev_show_##name(struct sys_device *dev, \ 37static ssize_t therm_throt_sysdev_show_##name(struct sys_device *dev, \
38 struct sysdev_attribute *attr, \
38 char *buf) \ 39 char *buf) \
39{ \ 40{ \
40 unsigned int cpu = dev->id; \ 41 unsigned int cpu = dev->id; \
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
index 2de5fa2bbf77..14b11b3be31c 100644
--- a/arch/x86/kernel/cpuid.c
+++ b/arch/x86/kernel/cpuid.c
@@ -141,8 +141,8 @@ static __cpuinit int cpuid_device_create(int cpu)
141{ 141{
142 struct device *dev; 142 struct device *dev;
143 143
144 dev = device_create(cpuid_class, NULL, MKDEV(CPUID_MAJOR, cpu), 144 dev = device_create_drvdata(cpuid_class, NULL, MKDEV(CPUID_MAJOR, cpu),
145 "cpu%d", cpu); 145 NULL, "cpu%d", cpu);
146 return IS_ERR(dev) ? PTR_ERR(dev) : 0; 146 return IS_ERR(dev) ? PTR_ERR(dev) : 0;
147} 147}
148 148
diff --git a/arch/x86/kernel/microcode.c b/arch/x86/kernel/microcode.c
index 56b933119a04..fc4790638b69 100644
--- a/arch/x86/kernel/microcode.c
+++ b/arch/x86/kernel/microcode.c
@@ -644,7 +644,9 @@ static void microcode_fini_cpu(int cpu)
644 mutex_unlock(&microcode_mutex); 644 mutex_unlock(&microcode_mutex);
645} 645}
646 646
647static ssize_t reload_store(struct sys_device *dev, const char *buf, size_t sz) 647static ssize_t reload_store(struct sys_device *dev,
648 struct sysdev_attribute *attr,
649 const char *buf, size_t sz)
648{ 650{
649 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id; 651 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id;
650 char *end; 652 char *end;
@@ -674,14 +676,16 @@ static ssize_t reload_store(struct sys_device *dev, const char *buf, size_t sz)
674 return sz; 676 return sz;
675} 677}
676 678
677static ssize_t version_show(struct sys_device *dev, char *buf) 679static ssize_t version_show(struct sys_device *dev,
680 struct sysdev_attribute *attr, char *buf)
678{ 681{
679 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id; 682 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id;
680 683
681 return sprintf(buf, "0x%x\n", uci->rev); 684 return sprintf(buf, "0x%x\n", uci->rev);
682} 685}
683 686
684static ssize_t pf_show(struct sys_device *dev, char *buf) 687static ssize_t pf_show(struct sys_device *dev,
688 struct sysdev_attribute *attr, char *buf)
685{ 689{
686 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id; 690 struct ucode_cpu_info *uci = ucode_cpu_info + dev->id;
687 691
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
index a153b3905f60..9fd809552447 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
@@ -149,8 +149,8 @@ static int __cpuinit msr_device_create(int cpu)
149{ 149{
150 struct device *dev; 150 struct device *dev;
151 151
152 dev = device_create(msr_class, NULL, MKDEV(MSR_MAJOR, cpu), 152 dev = device_create_drvdata(msr_class, NULL, MKDEV(MSR_MAJOR, cpu),
153 "msr%d", cpu); 153 NULL, "msr%d", cpu);
154 return IS_ERR(dev) ? PTR_ERR(dev) : 0; 154 return IS_ERR(dev) ? PTR_ERR(dev) : 0;
155} 155}
156 156
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index a4213c00dffc..cbecb05551bb 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -314,8 +314,7 @@ int dma_supported(struct device *dev, u64 mask)
314{ 314{
315#ifdef CONFIG_PCI 315#ifdef CONFIG_PCI
316 if (mask > 0xffffffff && forbid_dac > 0) { 316 if (mask > 0xffffffff && forbid_dac > 0) {
317 printk(KERN_INFO "PCI: Disallowing DAC for device %s\n", 317 dev_info(dev, "PCI: Disallowing DAC for device\n");
318 dev->bus_id);
319 return 0; 318 return 0;
320 } 319 }
321#endif 320#endif
@@ -342,8 +341,7 @@ int dma_supported(struct device *dev, u64 mask)
342 type. Normally this doesn't make any difference, but gives 341 type. Normally this doesn't make any difference, but gives
343 more gentle handling of IOMMU overflow. */ 342 more gentle handling of IOMMU overflow. */
344 if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) { 343 if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) {
345 printk(KERN_INFO "%s: Force SAC with mask %Lx\n", 344 dev_info(dev, "Force SAC with mask %Lx\n", mask);
346 dev->bus_id, mask);
347 return 0; 345 return 0;
348 } 346 }
349 347
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c
index be60961f8695..df5f142657d2 100644
--- a/arch/x86/kernel/pci-gart_64.c
+++ b/arch/x86/kernel/pci-gart_64.c
@@ -198,9 +198,7 @@ static void iommu_full(struct device *dev, size_t size, int dir)
198 * out. Hopefully no network devices use single mappings that big. 198 * out. Hopefully no network devices use single mappings that big.
199 */ 199 */
200 200
201 printk(KERN_ERR 201 dev_err(dev, "PCI-DMA: Out of IOMMU space for %lu bytes\n", size);
202 "PCI-DMA: Out of IOMMU space for %lu bytes at device %s\n",
203 size, dev->bus_id);
204 202
205 if (size > PAGE_SIZE*EMERGENCY_PAGES) { 203 if (size > PAGE_SIZE*EMERGENCY_PAGES) {
206 if (dir == PCI_DMA_FROMDEVICE || dir == PCI_DMA_BIDIRECTIONAL) 204 if (dir == PCI_DMA_FROMDEVICE || dir == PCI_DMA_BIDIRECTIONAL)
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 9fc8551a1cf6..02e417d3d8e9 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -194,8 +194,8 @@ config HOTPLUG
194 plugged into slots found on all modern laptop computers. Another 194 plugged into slots found on all modern laptop computers. Another
195 example, used on modern desktops as well as laptops, is USB. 195 example, used on modern desktops as well as laptops, is USB.
196 196
197 Enable HOTPLUG and KMOD, and build a modular kernel. Get agent 197 Enable HOTPLUG and build a modular kernel. Get agent software
198 software (at <http://linux-hotplug.sourceforge.net/>) and install it. 198 (from <http://linux-hotplug.sourceforge.net/>) and install it.
199 Then your kernel will automatically call out to a user mode "policy 199 Then your kernel will automatically call out to a user mode "policy
200 agent" (/sbin/hotplug) to load modules and set up software needed 200 agent" (/sbin/hotplug) to load modules and set up software needed
201 to use devices as you hotplug them. 201 to use devices as you hotplug them.