On Thu, Jul 30, 2026 at 07:36:42PM +0200, Leander Kieweg wrote:
> + if (ret) {
> + drm_err(&gdev->drm, "Failed to request IRQ %d\n",
> + gdev->irq);
> + return ret;
> + }
> +
> + writel(INT_DONE, gdev->mmio_base + REG_IER);
> + drm_info(&gdev->drm, "IRQ %d requested and enabled\n",
> gdev->irq);
Please drop
> + } else {
> + drm_warn(&gdev->drm, "No IRQ found, falling back to polling\n");
> + }
> +
> + ret = drm_dev_register(&gdev->drm, 0);
> + if (ret)
> + return ret;
> +
> + drm_info(&gdev->drm, "GlandaGPU DRM Initialized (/dev/dri/cardX
> created)\n");
Please drop all such messages.
> + return 0;
> +}
> +
> +/* Shared teardown, mirrors glanda_drm_init() */
> +static void glanda_drm_fini(struct glanda_device *gdev)
> +{
> + drm_dev_unplug(&gdev->drm);
> + drm_atomic_helper_shutdown(&gdev->drm);
> +
> + /* Disable interrupts */
> + writel(0, gdev->mmio_base + REG_IER);
> +
> + drm_info(&gdev->drm, "GlandaGPU DRM Driver removed\n");
Ditto
> +}
> +
> +static int glandagpu_probe(struct platform_device *pdev)
> +{
> + struct resource *res;
> + struct glanda_device *gdev;
> + int irq;
> +
> + dev_info(&pdev->dev, "GlandaGPU Probe started\n");
Ditto, Driver should be silent on success.
> +
> + gdev = devm_drm_dev_alloc(&pdev->dev, &glanda_drm_driver, struct
> glanda_device, drm);
> + if (IS_ERR(gdev))
> + return PTR_ERR(gdev);
> +
> + platform_set_drvdata(pdev, gdev);
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!res)
> + return -ENODEV;
> +
> + gdev->vram_phys = res->start;
> + gdev->vram_base = devm_ioremap(&pdev->dev, res->start,
> GLANDA_VRAM_SIZE);
> + gdev->mmio_base = devm_ioremap(&pdev->dev, res->start +
> GLANDA_MMIO_OFFSET,
> + GLANDA_MMIO_SIZE);
> + if (!gdev->vram_base || !gdev->mmio_base) {
> + drm_err(&gdev->drm, "failed to ioremap\n");
> + return -ENOMEM;
> + }
> +
> + irq = platform_get_irq(pdev, 0);
> + if (irq == -ENXIO)
> + irq = -1; /* no IRQ resource, fall back to polling */
> + else if (irq < 0)
> + return irq;
> +
> + return glanda_drm_init(gdev, irq);
> +}
> +
> +static void glandagpu_remove(struct platform_device *pdev)
> +{
> + glanda_drm_fini(platform_get_drvdata(pdev));
> +}
> +
> +/* Device Tree match table. */
> +static const struct of_device_id glanda_of_match[] = {
> + { .compatible = "glanda,gpu-1.0" },
> + { /* end of table */ }
Drop comment, obvious.
> +};
> +
> +MODULE_DEVICE_TABLE(of, glanda_of_match);
> +
> +static struct platform_driver glandagpu_driver = {
> + .driver = {
> + .name = "glandagpu",
> + .of_match_table = glanda_of_match,
Messed indent.
> + },
> + .probe = glandagpu_probe,
> + .remove = glandagpu_remove,
> +};
> +
> +/* PCI probe path for the QEMU test device, real hardware uses
> platform_driver */
> +static int glandagpu_pci_probe(struct pci_dev *pdev, const struct
> pci_device_id *id)
> +{
> + struct glanda_device *gdev;
> + int ret;
> +
> + dev_info(&pdev->dev, "GlandaGPU PCI Probe started\n");
Drop. Driver should be silent on success.
> +
> + ret = pcim_enable_device(pdev);
> + if (ret)
> + return ret;
> + pci_set_master(pdev);
> +
> + ret = pcim_iomap_regions(pdev, BIT(0) | BIT(1), "glandagpu");
> + if (ret)
> + return ret;
> +
> + gdev = devm_drm_dev_alloc(&pdev->dev, &glanda_drm_driver, struct
> glanda_device, drm);
> + if (IS_ERR(gdev))
> + return PTR_ERR(gdev);
> +
> + pci_set_drvdata(pdev, gdev);
> +
> + gdev->mmio_base = pcim_iomap_table(pdev)[0];
> + gdev->vram_base = pcim_iomap_table(pdev)[1];
> + gdev->vram_phys = pci_resource_start(pdev, 1);
> +
> + return glanda_drm_init(gdev, pdev->irq);
> +}
> +
> +static void glandagpu_pci_remove(struct pci_dev *pdev)
> +{
> + glanda_drm_fini(pci_get_drvdata(pdev));
> +}
> +
> +static const struct pci_device_id glanda_pci_ids[] = {
> + { PCI_DEVICE(PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_DEVICE_ID_GLANDA_GPU) },
> + { /* end of table */ }
> +};
> +
> +MODULE_DEVICE_TABLE(pci, glanda_pci_ids);
> +
> +static struct pci_driver glandagpu_pci_driver = {
> + .name = "glandagpu-pci",
> + .id_table = glanda_pci_ids,
> + .probe = glandagpu_pci_probe,
> + .remove = glandagpu_pci_remove,
> +};
> +
> +static int __init glandagpu_init(void)
> +{
> + int ret;
> +
> + ret = platform_driver_register(&glandagpu_driver);
> + if (ret) {
> + pr_err("GlandaGPU: Failed to register platform driver\n");
> + return ret;
> + }
> +
> + ret = pci_register_driver(&glandagpu_pci_driver);
> + if (ret) {
> + pr_err("GlandaGPU: Failed to register PCI driver\n");
> + platform_driver_unregister(&glandagpu_driver);
> + return ret;
> + }
> +
> + pr_info("GlandaGPU: Module loaded successfully\n");
Drop. Kernel does not print such messages. It pollutes dmesg even
without actual hardware.
> + return 0;
> +}
> +
> +static void __exit glandagpu_exit(void)
> +{
> + pci_unregister_driver(&glandagpu_pci_driver);
> + platform_driver_unregister(&glandagpu_driver);
> + pr_info("GlandaGPU: Module unloaded\n");
Same here.
> +}
> +
> +module_init(glandagpu_init);
> +module_exit(glandagpu_exit);
> +
> +MODULE_LICENSE("GPL");
> +MODULE_AUTHOR("Leander Kieweg <[email protected]>");
> +MODULE_DESCRIPTION("DRM driver for GlandaGPU, an FPGA-based 2D GPU with VGA
> output");
> --
> 2.43.0
>