Message ID | 20231231103057.35837-6-hdegoede@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: atomisp: NULL pointer deref + missing firmware fixes | expand |
On Sun, Dec 31, 2023 at 12:31 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Now that a single build supports both the ISP 2400 and the ISP 2401 > this function is no longer necessary. The main probe() already > contains a similar switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) > checking for a known device_id. > > Move the revision check into the main probe() and drop > the is_valid_device() function. ... > + if (pdev->revision <= ATOMISP_PCI_REV_BYT_A0_MAX) { > + dev_err(&pdev->dev, "revision %d is not unsupported\n", pdev->revision); While at it, can you fix the logic error in the message ("is not un" -- double negation)? > + return -ENODEV; > + }
Hi, On 1/2/24 01:19, Andy Shevchenko wrote: > On Sun, Dec 31, 2023 at 12:31 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Now that a single build supports both the ISP 2400 and the ISP 2401 >> this function is no longer necessary. The main probe() already >> contains a similar switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) >> checking for a known device_id. >> >> Move the revision check into the main probe() and drop >> the is_valid_device() function. > > ... > >> + if (pdev->revision <= ATOMISP_PCI_REV_BYT_A0_MAX) { >> + dev_err(&pdev->dev, "revision %d is not unsupported\n", pdev->revision); > > While at it, can you fix the logic error in the message ("is not un" > -- double negation)? Good point, I've added a patch for this to my upcoming atomisp pull-req for 6.9 Regards, Hans
diff --git a/drivers/staging/media/atomisp/pci/atomisp_v4l2.c b/drivers/staging/media/atomisp/pci/atomisp_v4l2.c index 206fdaee5952..176b39906d10 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_v4l2.c +++ b/drivers/staging/media/atomisp/pci/atomisp_v4l2.c @@ -1192,48 +1192,6 @@ atomisp_load_firmware(struct atomisp_device *isp) return fw; } -/* - * Check for flags the driver was compiled with against the PCI - * device. Always returns true on other than ISP 2400. - */ -static bool is_valid_device(struct pci_dev *pdev, const struct pci_device_id *id) -{ - const char *name; - const char *product; - - product = dmi_get_system_info(DMI_PRODUCT_NAME); - - switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) { - case ATOMISP_PCI_DEVICE_SOC_MRFLD: - name = "Merrifield"; - break; - case ATOMISP_PCI_DEVICE_SOC_BYT: - name = "Baytrail"; - break; - case ATOMISP_PCI_DEVICE_SOC_ANN: - name = "Anniedale"; - break; - case ATOMISP_PCI_DEVICE_SOC_CHT: - name = "Cherrytrail"; - break; - default: - dev_err(&pdev->dev, "%s: unknown device ID %x04:%x04\n", - product, id->vendor, id->device); - return false; - } - - if (pdev->revision <= ATOMISP_PCI_REV_BYT_A0_MAX) { - dev_err(&pdev->dev, "%s revision %d is not unsupported\n", - name, pdev->revision); - return false; - } - - dev_info(&pdev->dev, "Detected %s version %d (ISP240%c) on %s\n", - name, pdev->revision, IS_ISP2401 ? '1' : '0', product); - - return true; -} - #define ATOM_ISP_PCI_BAR 0 static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) @@ -1244,9 +1202,6 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i int err, val; u32 irq; - if (!is_valid_device(pdev, id)) - return -ENODEV; - /* Pointer to struct device. */ atomisp_dev = &pdev->dev; @@ -1386,6 +1341,11 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i goto atomisp_dev_alloc_fail; } + if (pdev->revision <= ATOMISP_PCI_REV_BYT_A0_MAX) { + dev_err(&pdev->dev, "revision %d is not unsupported\n", pdev->revision); + return -ENODEV; + } + dev_info(&pdev->dev, "ISP HPLL frequency base = %d MHz\n", isp->hpll_freq); isp->max_isr_latency = ATOMISP_MAX_ISR_LATENCY;
Now that a single build supports both the ISP 2400 and the ISP 2401 this function is no longer necessary. The main probe() already contains a similar switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) checking for a known device_id. Move the revision check into the main probe() and drop the is_valid_device() function. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- .../staging/media/atomisp/pci/atomisp_v4l2.c | 50 ++----------------- 1 file changed, 5 insertions(+), 45 deletions(-)