@@ -280,9 +280,6 @@ static void acpi_set_vec_parent(int node, struct irq_domain *parent, struct acpi
280280{
281281 int i ;
282282
283- if (cpu_has_flatmode )
284- node = cpu_to_node (node * CORES_PER_EIO_NODE );
285-
286283 for (i = 0 ; i < MAX_IO_PICS ; i ++ ) {
287284 if (node == vec_group [i ].node ) {
288285 vec_group [i ].parent = parent ;
@@ -343,19 +340,27 @@ static int __init pch_pic_parse_madt(union acpi_subtable_headers *header,
343340 if (parent )
344341 return pch_pic_acpi_init (parent , pchpic_entry );
345342
346- return - EINVAL ;
343+ return 0 ;
347344}
348345
349346static int __init pch_msi_parse_madt (union acpi_subtable_headers * header ,
350347 const unsigned long end )
351348{
349+ struct irq_domain * parent ;
352350 struct acpi_madt_msi_pic * pchmsi_entry = (struct acpi_madt_msi_pic * )header ;
353- struct irq_domain * parent = acpi_get_vec_parent (eiointc_priv [nr_pics - 1 ]-> node , msi_group );
351+ int node ;
352+
353+ if (cpu_has_flatmode )
354+ node = cpu_to_node (eiointc_priv [nr_pics - 1 ]-> node * CORES_PER_EIO_NODE );
355+ else
356+ node = eiointc_priv [nr_pics - 1 ]-> node ;
357+
358+ parent = acpi_get_vec_parent (node , msi_group );
354359
355360 if (parent )
356361 return pch_msi_acpi_init (parent , pchmsi_entry );
357362
358- return - EINVAL ;
363+ return 0 ;
359364}
360365
361366static int __init acpi_cascade_irqdomain_init (void )
@@ -379,6 +384,7 @@ int __init eiointc_acpi_init(struct irq_domain *parent,
379384 int i , ret , parent_irq ;
380385 unsigned long node_map ;
381386 struct eiointc_priv * priv ;
387+ int node ;
382388
383389 priv = kzalloc (sizeof (* priv ), GFP_KERNEL );
384390 if (!priv )
@@ -416,13 +422,19 @@ int __init eiointc_acpi_init(struct irq_domain *parent,
416422 parent_irq = irq_create_mapping (parent , acpi_eiointc -> cascade );
417423 irq_set_chained_handler_and_data (parent_irq , eiointc_irq_dispatch , priv );
418424
419- register_syscore_ops (& eiointc_syscore_ops );
420- cpuhp_setup_state_nocalls (CPUHP_AP_IRQ_LOONGARCH_STARTING ,
425+ if (nr_pics == 1 ) {
426+ register_syscore_ops (& eiointc_syscore_ops );
427+ cpuhp_setup_state_nocalls (CPUHP_AP_IRQ_LOONGARCH_STARTING ,
421428 "irqchip/loongarch/intc:starting" ,
422429 eiointc_router_init , NULL );
430+ }
423431
424- acpi_set_vec_parent (acpi_eiointc -> node , priv -> eiointc_domain , pch_group );
425- acpi_set_vec_parent (acpi_eiointc -> node , priv -> eiointc_domain , msi_group );
432+ if (cpu_has_flatmode )
433+ node = cpu_to_node (acpi_eiointc -> node * CORES_PER_EIO_NODE );
434+ else
435+ node = acpi_eiointc -> node ;
436+ acpi_set_vec_parent (node , priv -> eiointc_domain , pch_group );
437+ acpi_set_vec_parent (node , priv -> eiointc_domain , msi_group );
426438 ret = acpi_cascade_irqdomain_init ();
427439
428440 return ret ;
0 commit comments