grufile.c (9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e) | grufile.c (cf8e8658100d4eae80ce9b21f7a81cb024dd5057) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * SN Platform GRU Driver 4 * 5 * FILE OPERATIONS & DRIVER INITIALIZATION 6 * 7 * This file supports the user system call for file open, close, mmap, etc. 8 * This also incudes the driver initialization code. --- 323 unchanged lines hidden (view full) --- 332 } else { 333 BUG(); 334 } 335 336 *corep = core; 337 return mmr; 338} 339 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * SN Platform GRU Driver 4 * 5 * FILE OPERATIONS & DRIVER INITIALIZATION 6 * 7 * This file supports the user system call for file open, close, mmap, etc. 8 * This also incudes the driver initialization code. --- 323 unchanged lines hidden (view full) --- 332 } else { 333 BUG(); 334 } 335 336 *corep = core; 337 return mmr; 338} 339 |
340#ifdef CONFIG_IA64 341 342static int gru_irq_count[GRU_CHIPLETS_PER_BLADE]; 343 344static void gru_noop(struct irq_data *d) 345{ 346} 347 348static struct irq_chip gru_chip[GRU_CHIPLETS_PER_BLADE] = { 349 [0 ... GRU_CHIPLETS_PER_BLADE - 1] { 350 .irq_mask = gru_noop, 351 .irq_unmask = gru_noop, 352 .irq_ack = gru_noop 353 } 354}; 355 | |
356static int gru_chiplet_setup_tlb_irq(int chiplet, char *irq_name, 357 irq_handler_t irq_handler, int cpu, int blade) 358{ 359 unsigned long mmr; | 340static int gru_chiplet_setup_tlb_irq(int chiplet, char *irq_name, 341 irq_handler_t irq_handler, int cpu, int blade) 342{ 343 unsigned long mmr; |
360 int irq = IRQ_GRU + chiplet; 361 int ret, core; 362 363 mmr = gru_chiplet_cpu_to_mmr(chiplet, cpu, &core); 364 if (mmr == 0) 365 return 0; 366 367 if (gru_irq_count[chiplet] == 0) { 368 gru_chip[chiplet].name = irq_name; 369 ret = irq_set_chip(irq, &gru_chip[chiplet]); 370 if (ret) { 371 printk(KERN_ERR "%s: set_irq_chip failed, errno=%d\n", 372 GRU_DRIVER_ID_STR, -ret); 373 return ret; 374 } 375 376 ret = request_irq(irq, irq_handler, 0, irq_name, NULL); 377 if (ret) { 378 printk(KERN_ERR "%s: request_irq failed, errno=%d\n", 379 GRU_DRIVER_ID_STR, -ret); 380 return ret; 381 } 382 } 383 gru_irq_count[chiplet]++; 384 385 return 0; 386} 387 388static void gru_chiplet_teardown_tlb_irq(int chiplet, int cpu, int blade) 389{ 390 unsigned long mmr; 391 int core, irq = IRQ_GRU + chiplet; 392 393 if (gru_irq_count[chiplet] == 0) 394 return; 395 396 mmr = gru_chiplet_cpu_to_mmr(chiplet, cpu, &core); 397 if (mmr == 0) 398 return; 399 400 if (--gru_irq_count[chiplet] == 0) 401 free_irq(irq, NULL); 402} 403 404#elif defined CONFIG_X86_64 405 406static int gru_chiplet_setup_tlb_irq(int chiplet, char *irq_name, 407 irq_handler_t irq_handler, int cpu, int blade) 408{ 409 unsigned long mmr; | |
410 int irq, core; 411 int ret; 412 413 mmr = gru_chiplet_cpu_to_mmr(chiplet, cpu, &core); 414 if (mmr == 0) 415 return 0; 416 417 irq = uv_setup_irq(irq_name, cpu, blade, mmr, UV_AFFINITY_CPU); --- 24 unchanged lines hidden (view full) --- 442 irq = gru_base[blade]->bs_grus[chiplet].gs_irq[core]; 443 if (irq) { 444 free_irq(irq, NULL); 445 uv_teardown_irq(irq); 446 } 447 } 448} 449 | 344 int irq, core; 345 int ret; 346 347 mmr = gru_chiplet_cpu_to_mmr(chiplet, cpu, &core); 348 if (mmr == 0) 349 return 0; 350 351 irq = uv_setup_irq(irq_name, cpu, blade, mmr, UV_AFFINITY_CPU); --- 24 unchanged lines hidden (view full) --- 376 irq = gru_base[blade]->bs_grus[chiplet].gs_irq[core]; 377 if (irq) { 378 free_irq(irq, NULL); 379 uv_teardown_irq(irq); 380 } 381 } 382} 383 |
450#endif 451 | |
452static void gru_teardown_tlb_irqs(void) 453{ 454 int blade; 455 int cpu; 456 457 for_each_online_cpu(cpu) { 458 blade = uv_cpu_to_blade_id(cpu); 459 gru_chiplet_teardown_tlb_irq(0, cpu, blade); --- 49 unchanged lines hidden (view full) --- 509 */ 510static int __init gru_init(void) 511{ 512 int ret; 513 514 if (!gru_supported()) 515 return 0; 516 | 384static void gru_teardown_tlb_irqs(void) 385{ 386 int blade; 387 int cpu; 388 389 for_each_online_cpu(cpu) { 390 blade = uv_cpu_to_blade_id(cpu); 391 gru_chiplet_teardown_tlb_irq(0, cpu, blade); --- 49 unchanged lines hidden (view full) --- 441 */ 442static int __init gru_init(void) 443{ 444 int ret; 445 446 if (!gru_supported()) 447 return 0; 448 |
517#if defined CONFIG_IA64 518 gru_start_paddr = 0xd000000000UL; /* ZZZZZZZZZZZZZZZZZZZ fixme */ 519#else | |
520 gru_start_paddr = uv_read_local_mmr(UVH_RH_GAM_GRU_OVERLAY_CONFIG) & 521 0x7fffffffffffUL; | 449 gru_start_paddr = uv_read_local_mmr(UVH_RH_GAM_GRU_OVERLAY_CONFIG) & 450 0x7fffffffffffUL; |
522#endif | |
523 gru_start_vaddr = __va(gru_start_paddr); 524 gru_end_paddr = gru_start_paddr + GRU_MAX_BLADES * GRU_SIZE; 525 printk(KERN_INFO "GRU space: 0x%lx - 0x%lx\n", 526 gru_start_paddr, gru_end_paddr); 527 ret = misc_register(&gru_miscdev); 528 if (ret) { 529 printk(KERN_ERR "%s: misc_register failed\n", 530 GRU_DRIVER_ID_STR); --- 82 unchanged lines hidden --- | 451 gru_start_vaddr = __va(gru_start_paddr); 452 gru_end_paddr = gru_start_paddr + GRU_MAX_BLADES * GRU_SIZE; 453 printk(KERN_INFO "GRU space: 0x%lx - 0x%lx\n", 454 gru_start_paddr, gru_end_paddr); 455 ret = misc_register(&gru_miscdev); 456 if (ret) { 457 printk(KERN_ERR "%s: misc_register failed\n", 458 GRU_DRIVER_ID_STR); --- 82 unchanged lines hidden --- |