@@ -678,11 +678,13 @@ static void hidma_free_msis(struct hidma_dev *dmadev)
678
678
{
679
679
#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
680
680
struct device * dev = dmadev -> ddev .dev ;
681
- struct msi_desc * desc ;
681
+ int i , virq ;
682
682
683
- /* free allocated MSI interrupts above */
684
- for_each_msi_entry (desc , dev )
685
- devm_free_irq (dev , desc -> irq , & dmadev -> lldev );
683
+ for (i = 0 ; i < HIDMA_MSI_INTS ; i ++ ) {
684
+ virq = msi_get_virq (dev , i );
685
+ if (virq )
686
+ devm_free_irq (dev , virq , & dmadev -> lldev );
687
+ }
686
688
687
689
platform_msi_domain_free_irqs (dev );
688
690
#endif
@@ -692,45 +694,37 @@ static int hidma_request_msi(struct hidma_dev *dmadev,
692
694
struct platform_device * pdev )
693
695
{
694
696
#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
695
- int rc ;
696
- struct msi_desc * desc ;
697
- struct msi_desc * failed_desc = NULL ;
697
+ int rc , i , virq ;
698
698
699
699
rc = platform_msi_domain_alloc_irqs (& pdev -> dev , HIDMA_MSI_INTS ,
700
700
hidma_write_msi_msg );
701
701
if (rc )
702
702
return rc ;
703
703
704
- for_each_msi_entry (desc , & pdev -> dev ) {
705
- if (!desc -> msi_index )
706
- dmadev -> msi_virqbase = desc -> irq ;
707
-
708
- rc = devm_request_irq (& pdev -> dev , desc -> irq ,
704
+ for (i = 0 ; i < HIDMA_MSI_INTS ; i ++ ) {
705
+ virq = msi_get_virq (& pdev -> dev , i );
706
+ rc = devm_request_irq (& pdev -> dev , virq ,
709
707
hidma_chirq_handler_msi ,
710
708
0 , "qcom-hidma-msi" ,
711
709
& dmadev -> lldev );
712
- if (rc ) {
713
- failed_desc = desc ;
710
+ if (rc )
714
711
break ;
715
- }
712
+ if (!i )
713
+ dmadev -> msi_virqbase = virq ;
716
714
}
717
715
718
716
if (rc ) {
719
717
/* free allocated MSI interrupts above */
720
- for_each_msi_entry (desc , & pdev -> dev ) {
721
- if (desc == failed_desc )
722
- break ;
723
- devm_free_irq (& pdev -> dev , desc -> irq ,
724
- & dmadev -> lldev );
718
+ for (-- i ; i >= 0 ; i -- ) {
719
+ virq = msi_get_virq (& pdev -> dev , i );
720
+ devm_free_irq (& pdev -> dev , virq , & dmadev -> lldev );
725
721
}
722
+ dev_warn (& pdev -> dev ,
723
+ "failed to request MSI irq, falling back to wired IRQ\n" );
726
724
} else {
727
725
/* Add callback to free MSIs on teardown */
728
726
hidma_ll_setup_irq (dmadev -> lldev , true);
729
-
730
727
}
731
- if (rc )
732
- dev_warn (& pdev -> dev ,
733
- "failed to request MSI irq, falling back to wired IRQ\n" );
734
728
return rc ;
735
729
#else
736
730
return - EINVAL ;
0 commit comments