Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: [SPARC64]: Fix 'niu' complex IRQ probing. [SPARC64]: check fork_idle() error [SPARC64]: Temporary workaround for PCI-E slot on T1000. [SPARC64]: VIO device addition log message level is too high. [SPARC64]: Fix domain-services port probing. [SPARC64]: Don't use in/local regs for ldx/stx data in N1 memcpy.
This commit is contained in:
commit
af299901ef
|
@ -264,7 +264,7 @@ static int sun4v_read_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn,
|
|||
unsigned int func = PCI_FUNC(devfn);
|
||||
unsigned long ret;
|
||||
|
||||
if (bus_dev == pbm->pci_bus && devfn == 0x00)
|
||||
if (!bus && devfn == 0x00)
|
||||
return pci_host_bridge_read_pci_cfg(bus_dev, devfn, where,
|
||||
size, value);
|
||||
if (config_out_of_range(pbm, bus, devfn, where)) {
|
||||
|
@ -300,7 +300,7 @@ static int sun4v_write_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn,
|
|||
unsigned int func = PCI_FUNC(devfn);
|
||||
unsigned long ret;
|
||||
|
||||
if (bus_dev == pbm->pci_bus && devfn == 0x00)
|
||||
if (!bus && devfn == 0x00)
|
||||
return pci_host_bridge_write_pci_cfg(bus_dev, devfn, where,
|
||||
size, value);
|
||||
if (config_out_of_range(pbm, bus, devfn, where)) {
|
||||
|
|
|
@ -1046,7 +1046,8 @@ static void __init irq_trans_init(struct device_node *dp)
|
|||
if (!strcmp(dp->name, "fhc") &&
|
||||
!strcmp(dp->parent->name, "central"))
|
||||
return central_irq_trans_init(dp);
|
||||
if (!strcmp(dp->name, "virtual-devices"))
|
||||
if (!strcmp(dp->name, "virtual-devices") ||
|
||||
!strcmp(dp->name, "niu"))
|
||||
return sun4v_vdev_irq_trans_init(dp);
|
||||
}
|
||||
|
||||
|
|
|
@ -353,6 +353,8 @@ static int __devinit smp_boot_one_cpu(unsigned int cpu)
|
|||
int timeout, ret;
|
||||
|
||||
p = fork_idle(cpu);
|
||||
if (IS_ERR(p))
|
||||
return PTR_ERR(p);
|
||||
callin_flag = 0;
|
||||
cpu_new_thread = task_thread_info(p);
|
||||
|
||||
|
|
|
@ -292,7 +292,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
|
|||
}
|
||||
vdev->dp = dp;
|
||||
|
||||
printk(KERN_ERR "VIO: Adding device %s\n", vdev->dev.bus_id);
|
||||
printk(KERN_INFO "VIO: Adding device %s\n", vdev->dev.bus_id);
|
||||
|
||||
err = device_register(&vdev->dev);
|
||||
if (err) {
|
||||
|
@ -342,8 +342,33 @@ static struct mdesc_notifier_client vio_device_notifier = {
|
|||
.node_name = "virtual-device-port",
|
||||
};
|
||||
|
||||
/* We are only interested in domain service ports under the
|
||||
* "domain-services" node. On control nodes there is another port
|
||||
* under "openboot" that we should not mess with as aparently that is
|
||||
* reserved exclusively for OBP use.
|
||||
*/
|
||||
static void vio_add_ds(struct mdesc_handle *hp, u64 node)
|
||||
{
|
||||
int found;
|
||||
u64 a;
|
||||
|
||||
found = 0;
|
||||
mdesc_for_each_arc(a, hp, node, MDESC_ARC_TYPE_BACK) {
|
||||
u64 target = mdesc_arc_target(hp, a);
|
||||
const char *name = mdesc_node_name(hp, target);
|
||||
|
||||
if (!strcmp(name, "domain-services")) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found)
|
||||
(void) vio_create_one(hp, node, &root_vdev->dev);
|
||||
}
|
||||
|
||||
static struct mdesc_notifier_client vio_ds_notifier = {
|
||||
.add = vio_add,
|
||||
.add = vio_add_ds,
|
||||
.remove = vio_remove,
|
||||
.node_name = "domain-services-port",
|
||||
};
|
||||
|
|
|
@ -321,11 +321,11 @@ FUNC_NAME: /* %i0=dst, %i1=src, %i2=len */
|
|||
andn %i2, 0xf, %i4
|
||||
and %i2, 0xf, %i2
|
||||
1: subcc %i4, 0x10, %i4
|
||||
EX_LD(LOAD(ldx, %i1, %i5))
|
||||
EX_LD(LOAD(ldx, %i1, %o4))
|
||||
add %i1, 0x08, %i1
|
||||
EX_LD(LOAD(ldx, %i1, %g1))
|
||||
sub %i1, 0x08, %i1
|
||||
EX_ST(STORE(stx, %i5, %i1 + %i3))
|
||||
EX_ST(STORE(stx, %o4, %i1 + %i3))
|
||||
add %i1, 0x8, %i1
|
||||
EX_ST(STORE(stx, %g1, %i1 + %i3))
|
||||
bgu,pt %XCC, 1b
|
||||
|
@ -334,8 +334,8 @@ FUNC_NAME: /* %i0=dst, %i1=src, %i2=len */
|
|||
be,pt %XCC, 1f
|
||||
nop
|
||||
sub %i2, 0x8, %i2
|
||||
EX_LD(LOAD(ldx, %i1, %i5))
|
||||
EX_ST(STORE(stx, %i5, %i1 + %i3))
|
||||
EX_LD(LOAD(ldx, %i1, %o4))
|
||||
EX_ST(STORE(stx, %o4, %i1 + %i3))
|
||||
add %i1, 0x8, %i1
|
||||
1: andcc %i2, 0x4, %g0
|
||||
be,pt %XCC, 1f
|
||||
|
|
Loading…
Reference in a new issue