diff options
Diffstat (limited to 'arch/sparc')
| -rw-r--r-- | arch/sparc/include/asm/stat.h | 4 | ||||
| -rw-r--r-- | arch/sparc/kernel/devices.c | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/kstack.h | 4 | ||||
| -rw-r--r-- | arch/sparc/kernel/of_device_32.c | 4 | ||||
| -rw-r--r-- | arch/sparc/kernel/of_device_64.c | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/pci.c | 7 | ||||
| -rw-r--r-- | arch/sparc/kernel/prom.h | 3 | ||||
| -rw-r--r-- | arch/sparc/kernel/prom_common.c | 18 | ||||
| -rw-r--r-- | arch/sparc/kernel/smp_64.c | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/tsb.S | 6 |
10 files changed, 25 insertions, 27 deletions
diff --git a/arch/sparc/include/asm/stat.h b/arch/sparc/include/asm/stat.h index 55db5eca08e2..39327d6a57eb 100644 --- a/arch/sparc/include/asm/stat.h +++ b/arch/sparc/include/asm/stat.h | |||
| @@ -53,8 +53,8 @@ struct stat { | |||
| 53 | ino_t st_ino; | 53 | ino_t st_ino; |
| 54 | mode_t st_mode; | 54 | mode_t st_mode; |
| 55 | short st_nlink; | 55 | short st_nlink; |
| 56 | uid_t st_uid; | 56 | uid16_t st_uid; |
| 57 | gid_t st_gid; | 57 | gid16_t st_gid; |
| 58 | unsigned short st_rdev; | 58 | unsigned short st_rdev; |
| 59 | off_t st_size; | 59 | off_t st_size; |
| 60 | time_t st_atime; | 60 | time_t st_atime; |
diff --git a/arch/sparc/kernel/devices.c b/arch/sparc/kernel/devices.c index b171ae8de90d..b062de9424a4 100644 --- a/arch/sparc/kernel/devices.c +++ b/arch/sparc/kernel/devices.c | |||
| @@ -59,7 +59,7 @@ static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg, | |||
| 59 | 59 | ||
| 60 | cur_inst = 0; | 60 | cur_inst = 0; |
| 61 | for_each_node_by_type(dp, "cpu") { | 61 | for_each_node_by_type(dp, "cpu") { |
| 62 | int err = check_cpu_node(dp->node, &cur_inst, | 62 | int err = check_cpu_node(dp->phandle, &cur_inst, |
| 63 | compare, compare_arg, | 63 | compare, compare_arg, |
| 64 | prom_node, mid); | 64 | prom_node, mid); |
| 65 | if (!err) { | 65 | if (!err) { |
diff --git a/arch/sparc/kernel/kstack.h b/arch/sparc/kernel/kstack.h index 4248d969272f..5247283d1c03 100644 --- a/arch/sparc/kernel/kstack.h +++ b/arch/sparc/kernel/kstack.h | |||
| @@ -11,6 +11,10 @@ static inline bool kstack_valid(struct thread_info *tp, unsigned long sp) | |||
| 11 | { | 11 | { |
| 12 | unsigned long base = (unsigned long) tp; | 12 | unsigned long base = (unsigned long) tp; |
| 13 | 13 | ||
| 14 | /* Stack pointer must be 16-byte aligned. */ | ||
| 15 | if (sp & (16UL - 1)) | ||
| 16 | return false; | ||
| 17 | |||
| 14 | if (sp >= (base + sizeof(struct thread_info)) && | 18 | if (sp >= (base + sizeof(struct thread_info)) && |
| 15 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) | 19 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) |
| 16 | return true; | 20 | return true; |
diff --git a/arch/sparc/kernel/of_device_32.c b/arch/sparc/kernel/of_device_32.c index 4c26eb59e742..da527b33ebc7 100644 --- a/arch/sparc/kernel/of_device_32.c +++ b/arch/sparc/kernel/of_device_32.c | |||
| @@ -105,7 +105,7 @@ static unsigned long of_bus_sbus_get_flags(const u32 *addr, unsigned long flags) | |||
| 105 | 105 | ||
| 106 | static int of_bus_ambapp_match(struct device_node *np) | 106 | static int of_bus_ambapp_match(struct device_node *np) |
| 107 | { | 107 | { |
| 108 | return !strcmp(np->name, "ambapp"); | 108 | return !strcmp(np->type, "ambapp"); |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | static void of_bus_ambapp_count_cells(struct device_node *child, | 111 | static void of_bus_ambapp_count_cells(struct device_node *child, |
| @@ -433,7 +433,7 @@ build_resources: | |||
| 433 | if (!parent) | 433 | if (!parent) |
| 434 | dev_set_name(&op->dev, "root"); | 434 | dev_set_name(&op->dev, "root"); |
| 435 | else | 435 | else |
| 436 | dev_set_name(&op->dev, "%08x", dp->node); | 436 | dev_set_name(&op->dev, "%08x", dp->phandle); |
| 437 | 437 | ||
| 438 | if (of_device_register(op)) { | 438 | if (of_device_register(op)) { |
| 439 | printk("%s: Could not register of device.\n", | 439 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c index 0a6f2d1798d1..b3d4cb5d21b3 100644 --- a/arch/sparc/kernel/of_device_64.c +++ b/arch/sparc/kernel/of_device_64.c | |||
| @@ -676,7 +676,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 676 | if (!parent) | 676 | if (!parent) |
| 677 | dev_set_name(&op->dev, "root"); | 677 | dev_set_name(&op->dev, "root"); |
| 678 | else | 678 | else |
| 679 | dev_set_name(&op->dev, "%08x", dp->node); | 679 | dev_set_name(&op->dev, "%08x", dp->phandle); |
| 680 | 680 | ||
| 681 | if (of_device_register(op)) { | 681 | if (of_device_register(op)) { |
| 682 | printk("%s: Could not register of device.\n", | 682 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c index 539e83f8e087..592b03d85167 100644 --- a/arch/sparc/kernel/pci.c +++ b/arch/sparc/kernel/pci.c | |||
| @@ -247,6 +247,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 247 | struct pci_bus *bus, int devfn) | 247 | struct pci_bus *bus, int devfn) |
| 248 | { | 248 | { |
| 249 | struct dev_archdata *sd; | 249 | struct dev_archdata *sd; |
| 250 | struct pci_slot *slot; | ||
| 250 | struct of_device *op; | 251 | struct of_device *op; |
| 251 | struct pci_dev *dev; | 252 | struct pci_dev *dev; |
| 252 | const char *type; | 253 | const char *type; |
| @@ -286,6 +287,11 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 286 | dev->dev.bus = &pci_bus_type; | 287 | dev->dev.bus = &pci_bus_type; |
| 287 | dev->devfn = devfn; | 288 | dev->devfn = devfn; |
| 288 | dev->multifunction = 0; /* maybe a lie? */ | 289 | dev->multifunction = 0; /* maybe a lie? */ |
| 290 | set_pcie_port_type(dev); | ||
| 291 | |||
| 292 | list_for_each_entry(slot, &dev->bus->slots, list) | ||
| 293 | if (PCI_SLOT(dev->devfn) == slot->number) | ||
| 294 | dev->slot = slot; | ||
| 289 | 295 | ||
| 290 | dev->vendor = of_getintprop_default(node, "vendor-id", 0xffff); | 296 | dev->vendor = of_getintprop_default(node, "vendor-id", 0xffff); |
| 291 | dev->device = of_getintprop_default(node, "device-id", 0xffff); | 297 | dev->device = of_getintprop_default(node, "device-id", 0xffff); |
| @@ -322,6 +328,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 322 | 328 | ||
| 323 | dev->current_state = 4; /* unknown power state */ | 329 | dev->current_state = 4; /* unknown power state */ |
| 324 | dev->error_state = pci_channel_io_normal; | 330 | dev->error_state = pci_channel_io_normal; |
| 331 | dev->dma_mask = 0xffffffff; | ||
| 325 | 332 | ||
| 326 | if (!strcmp(node->name, "pci")) { | 333 | if (!strcmp(node->name, "pci")) { |
| 327 | /* a PCI-PCI bridge */ | 334 | /* a PCI-PCI bridge */ |
diff --git a/arch/sparc/kernel/prom.h b/arch/sparc/kernel/prom.h index 453397fe5e14..a8591ef2636d 100644 --- a/arch/sparc/kernel/prom.h +++ b/arch/sparc/kernel/prom.h | |||
| @@ -4,9 +4,6 @@ | |||
| 4 | #include <linux/spinlock.h> | 4 | #include <linux/spinlock.h> |
| 5 | #include <asm/prom.h> | 5 | #include <asm/prom.h> |
| 6 | 6 | ||
| 7 | extern struct device_node *allnodes; /* temporary while merging */ | ||
| 8 | extern rwlock_t devtree_lock; /* temporary while merging */ | ||
| 9 | |||
| 10 | extern void * prom_early_alloc(unsigned long size); | 7 | extern void * prom_early_alloc(unsigned long size); |
| 11 | extern void irq_trans_init(struct device_node *dp); | 8 | extern void irq_trans_init(struct device_node *dp); |
| 12 | 9 | ||
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c index d80a65d9e893..57ac9e28be0c 100644 --- a/arch/sparc/kernel/prom_common.c +++ b/arch/sparc/kernel/prom_common.c | |||
| @@ -37,18 +37,6 @@ EXPORT_SYMBOL(of_console_path); | |||
| 37 | char *of_console_options; | 37 | char *of_console_options; |
| 38 | EXPORT_SYMBOL(of_console_options); | 38 | EXPORT_SYMBOL(of_console_options); |
| 39 | 39 | ||
| 40 | struct device_node *of_find_node_by_phandle(phandle handle) | ||
| 41 | { | ||
| 42 | struct device_node *np; | ||
| 43 | |||
| 44 | for (np = allnodes; np; np = np->allnext) | ||
| 45 | if (np->node == handle) | ||
| 46 | break; | ||
| 47 | |||
| 48 | return np; | ||
| 49 | } | ||
| 50 | EXPORT_SYMBOL(of_find_node_by_phandle); | ||
| 51 | |||
| 52 | int of_getintprop_default(struct device_node *np, const char *name, int def) | 40 | int of_getintprop_default(struct device_node *np, const char *name, int def) |
| 53 | { | 41 | { |
| 54 | struct property *prop; | 42 | struct property *prop; |
| @@ -89,7 +77,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len | |||
| 89 | void *old_val = prop->value; | 77 | void *old_val = prop->value; |
| 90 | int ret; | 78 | int ret; |
| 91 | 79 | ||
| 92 | ret = prom_setprop(dp->node, name, val, len); | 80 | ret = prom_setprop(dp->phandle, name, val, len); |
| 93 | 81 | ||
| 94 | err = -EINVAL; | 82 | err = -EINVAL; |
| 95 | if (ret >= 0) { | 83 | if (ret >= 0) { |
| @@ -236,7 +224,7 @@ static struct device_node * __init prom_create_node(phandle node, | |||
| 236 | 224 | ||
| 237 | dp->name = get_one_property(node, "name"); | 225 | dp->name = get_one_property(node, "name"); |
| 238 | dp->type = get_one_property(node, "device_type"); | 226 | dp->type = get_one_property(node, "device_type"); |
| 239 | dp->node = node; | 227 | dp->phandle = node; |
| 240 | 228 | ||
| 241 | dp->properties = build_prop_list(node); | 229 | dp->properties = build_prop_list(node); |
| 242 | 230 | ||
| @@ -313,7 +301,7 @@ void __init prom_build_devicetree(void) | |||
| 313 | 301 | ||
| 314 | nextp = &allnodes->allnext; | 302 | nextp = &allnodes->allnext; |
| 315 | allnodes->child = prom_build_tree(allnodes, | 303 | allnodes->child = prom_build_tree(allnodes, |
| 316 | prom_getchild(allnodes->node), | 304 | prom_getchild(allnodes->phandle), |
| 317 | &nextp); | 305 | &nextp); |
| 318 | of_console_init(); | 306 | of_console_init(); |
| 319 | 307 | ||
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index aa36223497b9..eb14844a0021 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c | |||
| @@ -370,7 +370,7 @@ static int __cpuinit smp_boot_one_cpu(unsigned int cpu) | |||
| 370 | } else { | 370 | } else { |
| 371 | struct device_node *dp = of_find_node_by_cpuid(cpu); | 371 | struct device_node *dp = of_find_node_by_cpuid(cpu); |
| 372 | 372 | ||
| 373 | prom_startcpu(dp->node, entry, cookie); | 373 | prom_startcpu(dp->phandle, entry, cookie); |
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | for (timeout = 0; timeout < 50000; timeout++) { | 376 | for (timeout = 0; timeout < 50000; timeout++) { |
diff --git a/arch/sparc/kernel/tsb.S b/arch/sparc/kernel/tsb.S index 8c91d9b29a2f..db15d123f054 100644 --- a/arch/sparc/kernel/tsb.S +++ b/arch/sparc/kernel/tsb.S | |||
| @@ -191,10 +191,12 @@ tsb_dtlb_load: | |||
| 191 | 191 | ||
| 192 | tsb_itlb_load: | 192 | tsb_itlb_load: |
| 193 | /* Executable bit must be set. */ | 193 | /* Executable bit must be set. */ |
| 194 | 661: andcc %g5, _PAGE_EXEC_4U, %g0 | 194 | 661: sethi %hi(_PAGE_EXEC_4U), %g4 |
| 195 | .section .sun4v_1insn_patch, "ax" | 195 | andcc %g5, %g4, %g0 |
| 196 | .section .sun4v_2insn_patch, "ax" | ||
| 196 | .word 661b | 197 | .word 661b |
| 197 | andcc %g5, _PAGE_EXEC_4V, %g0 | 198 | andcc %g5, _PAGE_EXEC_4V, %g0 |
| 199 | nop | ||
| 198 | .previous | 200 | .previous |
| 199 | 201 | ||
| 200 | be,pn %xcc, tsb_do_fault | 202 | be,pn %xcc, tsb_do_fault |
