diff options
Diffstat (limited to 'arch/ia64/sn')
-rw-r--r-- | arch/ia64/sn/kernel/io_init.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/iomv.c | 6 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/setup.c | 43 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/sn2/ptc_deadlock.S | 1 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/tiocx.c | 14 | ||||
-rw-r--r-- | arch/ia64/sn/pci/tioca_provider.c | 8 |
6 files changed, 50 insertions, 24 deletions
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 9e07f5463f21..783eb4323847 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
@@ -384,7 +384,7 @@ static int __init sn_pci_init(void) | |||
384 | extern void register_sn_procfs(void); | 384 | extern void register_sn_procfs(void); |
385 | #endif | 385 | #endif |
386 | 386 | ||
387 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_SIMULATOR()) | 387 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) |
388 | return 0; | 388 | return 0; |
389 | 389 | ||
390 | /* | 390 | /* |
diff --git a/arch/ia64/sn/kernel/iomv.c b/arch/ia64/sn/kernel/iomv.c index fec6d8b8237b..7ce3cdad627b 100644 --- a/arch/ia64/sn/kernel/iomv.c +++ b/arch/ia64/sn/kernel/iomv.c | |||
@@ -9,12 +9,16 @@ | |||
9 | #include <linux/module.h> | 9 | #include <linux/module.h> |
10 | #include <asm/io.h> | 10 | #include <asm/io.h> |
11 | #include <asm/delay.h> | 11 | #include <asm/delay.h> |
12 | #include <asm/vga.h> | ||
12 | #include <asm/sn/nodepda.h> | 13 | #include <asm/sn/nodepda.h> |
13 | #include <asm/sn/simulator.h> | 14 | #include <asm/sn/simulator.h> |
14 | #include <asm/sn/pda.h> | 15 | #include <asm/sn/pda.h> |
15 | #include <asm/sn/sn_cpuid.h> | 16 | #include <asm/sn/sn_cpuid.h> |
16 | #include <asm/sn/shub_mmr.h> | 17 | #include <asm/sn/shub_mmr.h> |
17 | 18 | ||
19 | #define IS_LEGACY_VGA_IOPORT(p) \ | ||
20 | (((p) >= 0x3b0 && (p) <= 0x3bb) || ((p) >= 0x3c0 && (p) <= 0x3df)) | ||
21 | |||
18 | /** | 22 | /** |
19 | * sn_io_addr - convert an in/out port to an i/o address | 23 | * sn_io_addr - convert an in/out port to an i/o address |
20 | * @port: port to convert | 24 | * @port: port to convert |
@@ -26,6 +30,8 @@ | |||
26 | void *sn_io_addr(unsigned long port) | 30 | void *sn_io_addr(unsigned long port) |
27 | { | 31 | { |
28 | if (!IS_RUNNING_ON_SIMULATOR()) { | 32 | if (!IS_RUNNING_ON_SIMULATOR()) { |
33 | if (IS_LEGACY_VGA_IOPORT(port)) | ||
34 | port += vga_console_iobase; | ||
29 | /* On sn2, legacy I/O ports don't point at anything */ | 35 | /* On sn2, legacy I/O ports don't point at anything */ |
30 | if (port < (64 * 1024)) | 36 | if (port < (64 * 1024)) |
31 | return NULL; | 37 | return NULL; |
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index 44bfc7f318cb..22e10d282c7f 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <asm/machvec.h> | 36 | #include <asm/machvec.h> |
37 | #include <asm/system.h> | 37 | #include <asm/system.h> |
38 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
39 | #include <asm/vga.h> | ||
39 | #include <asm/sn/arch.h> | 40 | #include <asm/sn/arch.h> |
40 | #include <asm/sn/addrs.h> | 41 | #include <asm/sn/addrs.h> |
41 | #include <asm/sn/pda.h> | 42 | #include <asm/sn/pda.h> |
@@ -95,6 +96,7 @@ u8 sn_coherency_id; | |||
95 | EXPORT_SYMBOL(sn_coherency_id); | 96 | EXPORT_SYMBOL(sn_coherency_id); |
96 | u8 sn_region_size; | 97 | u8 sn_region_size; |
97 | EXPORT_SYMBOL(sn_region_size); | 98 | EXPORT_SYMBOL(sn_region_size); |
99 | int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */ | ||
98 | 100 | ||
99 | short physical_node_map[MAX_PHYSNODE_ID]; | 101 | short physical_node_map[MAX_PHYSNODE_ID]; |
100 | 102 | ||
@@ -273,14 +275,17 @@ void __init sn_setup(char **cmdline_p) | |||
273 | 275 | ||
274 | ia64_sn_plat_set_error_handling_features(); | 276 | ia64_sn_plat_set_error_handling_features(); |
275 | 277 | ||
278 | #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) | ||
276 | /* | 279 | /* |
277 | * If the generic code has enabled vga console support - lets | 280 | * If there was a primary vga adapter identified through the |
278 | * get rid of it again. This is a kludge for the fact that ACPI | 281 | * EFI PCDP table, make it the preferred console. Otherwise |
279 | * currtently has no way of informing us if legacy VGA is available | 282 | * zero out conswitchp. |
280 | * or not. | ||
281 | */ | 283 | */ |
282 | #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) | 284 | |
283 | if (conswitchp == &vga_con) { | 285 | if (vga_console_membase) { |
286 | /* usable vga ... make tty0 the preferred default console */ | ||
287 | add_preferred_console("tty", 0, NULL); | ||
288 | } else { | ||
284 | printk(KERN_DEBUG "SGI: Disabling VGA console\n"); | 289 | printk(KERN_DEBUG "SGI: Disabling VGA console\n"); |
285 | #ifdef CONFIG_DUMMY_CONSOLE | 290 | #ifdef CONFIG_DUMMY_CONSOLE |
286 | conswitchp = &dummy_con; | 291 | conswitchp = &dummy_con; |
@@ -350,7 +355,7 @@ void __init sn_setup(char **cmdline_p) | |||
350 | 355 | ||
351 | ia64_mark_idle = &snidle; | 356 | ia64_mark_idle = &snidle; |
352 | 357 | ||
353 | /* | 358 | /* |
354 | * For the bootcpu, we do this here. All other cpus will make the | 359 | * For the bootcpu, we do this here. All other cpus will make the |
355 | * call as part of cpu_init in slave cpu initialization. | 360 | * call as part of cpu_init in slave cpu initialization. |
356 | */ | 361 | */ |
@@ -397,7 +402,7 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
397 | nodepdaindr[cnode] = | 402 | nodepdaindr[cnode] = |
398 | alloc_bootmem_node(NODE_DATA(cnode), sizeof(nodepda_t)); | 403 | alloc_bootmem_node(NODE_DATA(cnode), sizeof(nodepda_t)); |
399 | memset(nodepdaindr[cnode], 0, sizeof(nodepda_t)); | 404 | memset(nodepdaindr[cnode], 0, sizeof(nodepda_t)); |
400 | memset(nodepdaindr[cnode]->phys_cpuid, -1, | 405 | memset(nodepdaindr[cnode]->phys_cpuid, -1, |
401 | sizeof(nodepdaindr[cnode]->phys_cpuid)); | 406 | sizeof(nodepdaindr[cnode]->phys_cpuid)); |
402 | } | 407 | } |
403 | 408 | ||
@@ -427,7 +432,7 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
427 | } | 432 | } |
428 | 433 | ||
429 | /* | 434 | /* |
430 | * Initialize the per node hubdev. This includes IO Nodes and | 435 | * Initialize the per node hubdev. This includes IO Nodes and |
431 | * headless/memless nodes. | 436 | * headless/memless nodes. |
432 | */ | 437 | */ |
433 | for (cnode = 0; cnode < numionodes; cnode++) { | 438 | for (cnode = 0; cnode < numionodes; cnode++) { |
@@ -455,6 +460,14 @@ void __init sn_cpu_init(void) | |||
455 | int i; | 460 | int i; |
456 | static int wars_have_been_checked; | 461 | static int wars_have_been_checked; |
457 | 462 | ||
463 | if (smp_processor_id() == 0 && IS_MEDUSA()) { | ||
464 | if (ia64_sn_is_fake_prom()) | ||
465 | sn_prom_type = 2; | ||
466 | else | ||
467 | sn_prom_type = 1; | ||
468 | printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake"); | ||
469 | } | ||
470 | |||
458 | memset(pda, 0, sizeof(pda)); | 471 | memset(pda, 0, sizeof(pda)); |
459 | if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift, | 472 | if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift, |
460 | &sn_system_size, &sn_sharing_domain_size, &sn_partition_id, | 473 | &sn_system_size, &sn_sharing_domain_size, &sn_partition_id, |
@@ -520,7 +533,7 @@ void __init sn_cpu_init(void) | |||
520 | */ | 533 | */ |
521 | { | 534 | { |
522 | u64 pio1[] = {SH1_PIO_WRITE_STATUS_0, 0, SH1_PIO_WRITE_STATUS_1, 0}; | 535 | u64 pio1[] = {SH1_PIO_WRITE_STATUS_0, 0, SH1_PIO_WRITE_STATUS_1, 0}; |
523 | u64 pio2[] = {SH2_PIO_WRITE_STATUS_0, SH2_PIO_WRITE_STATUS_1, | 536 | u64 pio2[] = {SH2_PIO_WRITE_STATUS_0, SH2_PIO_WRITE_STATUS_1, |
524 | SH2_PIO_WRITE_STATUS_2, SH2_PIO_WRITE_STATUS_3}; | 537 | SH2_PIO_WRITE_STATUS_2, SH2_PIO_WRITE_STATUS_3}; |
525 | u64 *pio; | 538 | u64 *pio; |
526 | pio = is_shub1() ? pio1 : pio2; | 539 | pio = is_shub1() ? pio1 : pio2; |
@@ -552,6 +565,10 @@ static void __init scan_for_ionodes(void) | |||
552 | int nasid = 0; | 565 | int nasid = 0; |
553 | lboard_t *brd; | 566 | lboard_t *brd; |
554 | 567 | ||
568 | /* fakeprom does not support klgraph */ | ||
569 | if (IS_RUNNING_ON_FAKE_PROM()) | ||
570 | return; | ||
571 | |||
555 | /* Setup ionodes with memory */ | 572 | /* Setup ionodes with memory */ |
556 | for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) { | 573 | for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) { |
557 | char *klgraph_header; | 574 | char *klgraph_header; |
@@ -563,8 +580,6 @@ static void __init scan_for_ionodes(void) | |||
563 | cnodeid = -1; | 580 | cnodeid = -1; |
564 | klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid)); | 581 | klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid)); |
565 | if (!klgraph_header) { | 582 | if (!klgraph_header) { |
566 | if (IS_RUNNING_ON_SIMULATOR()) | ||
567 | continue; | ||
568 | BUG(); /* All nodes must have klconfig tables! */ | 583 | BUG(); /* All nodes must have klconfig tables! */ |
569 | } | 584 | } |
570 | cnodeid = nasid_to_cnodeid(nasid); | 585 | cnodeid = nasid_to_cnodeid(nasid); |
@@ -630,8 +645,8 @@ int | |||
630 | nasid_slice_to_cpuid(int nasid, int slice) | 645 | nasid_slice_to_cpuid(int nasid, int slice) |
631 | { | 646 | { |
632 | long cpu; | 647 | long cpu; |
633 | 648 | ||
634 | for (cpu=0; cpu < NR_CPUS; cpu++) | 649 | for (cpu=0; cpu < NR_CPUS; cpu++) |
635 | if (cpuid_to_nasid(cpu) == nasid && | 650 | if (cpuid_to_nasid(cpu) == nasid && |
636 | cpuid_to_slice(cpu) == slice) | 651 | cpuid_to_slice(cpu) == slice) |
637 | return cpu; | 652 | return cpu; |
diff --git a/arch/ia64/sn/kernel/sn2/ptc_deadlock.S b/arch/ia64/sn/kernel/sn2/ptc_deadlock.S index 7947312801ec..96cb71d15682 100644 --- a/arch/ia64/sn/kernel/sn2/ptc_deadlock.S +++ b/arch/ia64/sn/kernel/sn2/ptc_deadlock.S | |||
@@ -6,6 +6,7 @@ | |||
6 | * Copyright (C) 2000-2004 Silicon Graphics, Inc. All rights reserved. | 6 | * Copyright (C) 2000-2004 Silicon Graphics, Inc. All rights reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <asm/types.h> | ||
9 | #include <asm/sn/shub_mmr.h> | 10 | #include <asm/sn/shub_mmr.h> |
10 | 11 | ||
11 | #define DEADLOCKBIT SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_SHFT | 12 | #define DEADLOCKBIT SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_SHFT |
diff --git a/arch/ia64/sn/kernel/tiocx.c b/arch/ia64/sn/kernel/tiocx.c index a087b274847e..8716f4d5314b 100644 --- a/arch/ia64/sn/kernel/tiocx.c +++ b/arch/ia64/sn/kernel/tiocx.c | |||
@@ -204,8 +204,8 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num, | |||
204 | cx_dev->dev.parent = NULL; | 204 | cx_dev->dev.parent = NULL; |
205 | cx_dev->dev.bus = &tiocx_bus_type; | 205 | cx_dev->dev.bus = &tiocx_bus_type; |
206 | cx_dev->dev.release = tiocx_bus_release; | 206 | cx_dev->dev.release = tiocx_bus_release; |
207 | snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d.0x%x", | 207 | snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d", |
208 | cx_dev->cx_id.nasid, cx_dev->cx_id.part_num); | 208 | cx_dev->cx_id.nasid); |
209 | device_register(&cx_dev->dev); | 209 | device_register(&cx_dev->dev); |
210 | get_device(&cx_dev->dev); | 210 | get_device(&cx_dev->dev); |
211 | 211 | ||
@@ -236,7 +236,6 @@ int cx_device_unregister(struct cx_dev *cx_dev) | |||
236 | */ | 236 | */ |
237 | static int cx_device_reload(struct cx_dev *cx_dev) | 237 | static int cx_device_reload(struct cx_dev *cx_dev) |
238 | { | 238 | { |
239 | device_remove_file(&cx_dev->dev, &dev_attr_cxdev_control); | ||
240 | cx_device_unregister(cx_dev); | 239 | cx_device_unregister(cx_dev); |
241 | return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num, | 240 | return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num, |
242 | cx_dev->cx_id.mfg_num, cx_dev->hubdev); | 241 | cx_dev->cx_id.mfg_num, cx_dev->hubdev); |
@@ -383,6 +382,7 @@ static int is_fpga_brick(int nasid) | |||
383 | switch (tiocx_btchar_get(nasid)) { | 382 | switch (tiocx_btchar_get(nasid)) { |
384 | case L1_BRICKTYPE_SA: | 383 | case L1_BRICKTYPE_SA: |
385 | case L1_BRICKTYPE_ATHENA: | 384 | case L1_BRICKTYPE_ATHENA: |
385 | case L1_BRICKTYPE_DAYTONA: | ||
386 | return 1; | 386 | return 1; |
387 | } | 387 | } |
388 | return 0; | 388 | return 0; |
@@ -409,7 +409,7 @@ static int tiocx_reload(struct cx_dev *cx_dev) | |||
409 | uint64_t cx_id; | 409 | uint64_t cx_id; |
410 | 410 | ||
411 | cx_id = | 411 | cx_id = |
412 | *(volatile int32_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) + | 412 | *(volatile uint64_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) + |
413 | WIDGET_ID); | 413 | WIDGET_ID); |
414 | part_num = XWIDGET_PART_NUM(cx_id); | 414 | part_num = XWIDGET_PART_NUM(cx_id); |
415 | mfg_num = XWIDGET_MFG_NUM(cx_id); | 415 | mfg_num = XWIDGET_MFG_NUM(cx_id); |
@@ -458,6 +458,10 @@ static ssize_t store_cxdev_control(struct device *dev, struct device_attribute * | |||
458 | 458 | ||
459 | switch (n) { | 459 | switch (n) { |
460 | case 1: | 460 | case 1: |
461 | tio_corelet_reset(cx_dev->cx_id.nasid, TIOCX_CORELET); | ||
462 | tiocx_reload(cx_dev); | ||
463 | break; | ||
464 | case 2: | ||
461 | tiocx_reload(cx_dev); | 465 | tiocx_reload(cx_dev); |
462 | break; | 466 | break; |
463 | case 3: | 467 | case 3: |
@@ -537,7 +541,7 @@ static void __exit tiocx_exit(void) | |||
537 | bus_unregister(&tiocx_bus_type); | 541 | bus_unregister(&tiocx_bus_type); |
538 | } | 542 | } |
539 | 543 | ||
540 | module_init(tiocx_init); | 544 | subsys_initcall(tiocx_init); |
541 | module_exit(tiocx_exit); | 545 | module_exit(tiocx_exit); |
542 | 546 | ||
543 | /************************************************************************ | 547 | /************************************************************************ |
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c index 8dae9eb45456..05aa8c2fe9bb 100644 --- a/arch/ia64/sn/pci/tioca_provider.c +++ b/arch/ia64/sn/pci/tioca_provider.c | |||
@@ -336,7 +336,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr) | |||
336 | if (!ct_addr) | 336 | if (!ct_addr) |
337 | return 0; | 337 | return 0; |
338 | 338 | ||
339 | bus_addr = (dma_addr_t) (ct_addr & 0xffffffffffff); | 339 | bus_addr = (dma_addr_t) (ct_addr & 0xffffffffffffUL); |
340 | node_upper = ct_addr >> 48; | 340 | node_upper = ct_addr >> 48; |
341 | 341 | ||
342 | if (node_upper > 64) { | 342 | if (node_upper > 64) { |
@@ -464,7 +464,7 @@ map_return: | |||
464 | * For mappings created using the direct modes (64 or 48) there are no | 464 | * For mappings created using the direct modes (64 or 48) there are no |
465 | * resources to release. | 465 | * resources to release. |
466 | */ | 466 | */ |
467 | void | 467 | static void |
468 | tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir) | 468 | tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir) |
469 | { | 469 | { |
470 | int i, entry; | 470 | int i, entry; |
@@ -514,7 +514,7 @@ tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir) | |||
514 | * The mapping mode used is based on the devices dma_mask. As a last resort | 514 | * The mapping mode used is based on the devices dma_mask. As a last resort |
515 | * use the GART mapped mode. | 515 | * use the GART mapped mode. |
516 | */ | 516 | */ |
517 | uint64_t | 517 | static uint64_t |
518 | tioca_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) | 518 | tioca_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) |
519 | { | 519 | { |
520 | uint64_t mapaddr; | 520 | uint64_t mapaddr; |
@@ -580,7 +580,7 @@ tioca_error_intr_handler(int irq, void *arg, struct pt_regs *pt) | |||
580 | * On successful setup, returns the kernel version of tioca_common back to | 580 | * On successful setup, returns the kernel version of tioca_common back to |
581 | * the caller. | 581 | * the caller. |
582 | */ | 582 | */ |
583 | void * | 583 | static void * |
584 | tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft) | 584 | tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft) |
585 | { | 585 | { |
586 | struct tioca_common *tioca_common; | 586 | struct tioca_common *tioca_common; |