forked from mirrors/linux
		
	PCI: dwc: dra7xx: Push request_irq() call to the bottom of probe
Currently devm_request_irq() is being called before base, PCI fields of dra7xx_pcie structure are populated. It is called even before pm_runtime_enable() and pm_runtime_get_sync() are called. This will lead to exceptions if in case an interrupt is triggered before the all of the above are done. Hence push the devm_request_irq() call to the end of the probe. Signed-off-by: Keerthy <j-keerthy@ti.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									edd45e3968
								
							
						
					
					
						commit
						d4c7d1a089
					
				
					 1 changed files with 7 additions and 7 deletions
				
			
		| 
						 | 
					@ -410,13 +410,6 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = devm_request_irq(dev, irq, dra7xx_pcie_irq_handler,
 | 
					 | 
				
			||||||
			       IRQF_SHARED, "dra7xx-pcie-main", dra7xx);
 | 
					 | 
				
			||||||
	if (ret) {
 | 
					 | 
				
			||||||
		dev_err(dev, "failed to request irq\n");
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ti_conf");
 | 
						res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ti_conf");
 | 
				
			||||||
	base = devm_ioremap_nocache(dev, res->start, resource_size(res));
 | 
						base = devm_ioremap_nocache(dev, res->start, resource_size(res));
 | 
				
			||||||
	if (!base)
 | 
						if (!base)
 | 
				
			||||||
| 
						 | 
					@ -478,6 +471,13 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto err_gpio;
 | 
							goto err_gpio;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = devm_request_irq(dev, irq, dra7xx_pcie_irq_handler,
 | 
				
			||||||
 | 
								       IRQF_SHARED, "dra7xx-pcie-main", dra7xx);
 | 
				
			||||||
 | 
						if (ret) {
 | 
				
			||||||
 | 
							dev_err(dev, "failed to request irq\n");
 | 
				
			||||||
 | 
							goto err_gpio;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_gpio:
 | 
					err_gpio:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue