mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-22 08:44:20 -05:00
drm/xe/irq: allocate all possible msix interrupts
If platform supports MSIX, driver needs to allocate all possible interrupts. v2: - drop msix_cap and use the api return code instead. - fix commit message. v3: - pass specific type in irq flags. Cc: Ohad Sharabi <osharabi@habana.ai> Cc: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Dani Liberman <dliberman@habana.ai> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240124075058.2302235-1-dliberman@habana.ai
This commit is contained in:
committed by
Lucas De Marchi
parent
eb538b5574
commit
82bd83a0cf
@@ -683,8 +683,9 @@ static void irq_uninstall(struct drm_device *drm, void *arg)
|
||||
int xe_irq_install(struct xe_device *xe)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
|
||||
unsigned int irq_flags = PCI_IRQ_MSIX;
|
||||
irq_handler_t irq_handler;
|
||||
int err, irq;
|
||||
int err, irq, nvec;
|
||||
|
||||
irq_handler = xe_irq_handler(xe);
|
||||
if (!irq_handler) {
|
||||
@@ -694,7 +695,19 @@ int xe_irq_install(struct xe_device *xe)
|
||||
|
||||
xe_irq_reset(xe);
|
||||
|
||||
err = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI | PCI_IRQ_MSIX);
|
||||
nvec = pci_msix_vec_count(pdev);
|
||||
if (nvec <= 0) {
|
||||
if (nvec == -EINVAL) {
|
||||
/* MSIX capability is not supported in the device, using MSI */
|
||||
irq_flags = PCI_IRQ_MSI;
|
||||
nvec = 1;
|
||||
} else {
|
||||
drm_err(&xe->drm, "MSIX: Failed getting count\n");
|
||||
return nvec;
|
||||
}
|
||||
}
|
||||
|
||||
err = pci_alloc_irq_vectors(pdev, nvec, nvec, irq_flags);
|
||||
if (err < 0) {
|
||||
drm_err(&xe->drm, "MSI/MSIX: Failed to enable support %d\n", err);
|
||||
return err;
|
||||
|
||||
Reference in New Issue
Block a user