Patch is reported at http://marc.info/?l=linux-tegra&m=145633528825832&w=2 This will fix boot on kernel 4.3+ as experienced with fedora kernel 4.3.5 Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = c29f7cc0 [00000000] *pgd=00000000 Internal error: Oops: 205 [#1] SMP ARM Modules linked in: gpio_keys(+) phy_tegra_usb(+) ahci_tegra libahci_platform nouveau(+) rtc_tegra i2c_algo_bit i2c_tegra tegra_drm ttm drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm host1x mmc_block sdhci_tegra sdhci_pltfm sdhci mmc_core CPU: 2 PID: 318 Comm: systemd-udevd Not tainted 4.4.2-300.fc23.armv7hl+lpae #1 Hardware name: NVIDIA Tegra SoC (Flattened Device Tree) task: edc67500 ti: c28ae000 task.ti: c28ae000 PC is at __list_del_entry+0x40/0x94 LR is at list_del+0xc/0x1c pc : [<c035b498>] lr : [<c035b4f8>] psr: 80010013 sp : c28afd08 ip : 00000020 fp : c28aff58 r10: c242d488 r9 : 0000001b r8 : c0b4d528 r7 : c28afd6c r6 : ffffffff r5 : c28afd6c r4 : c288b02c r3 : c288b02c r2 : 00000000 r1 : 00000000 r0 : c288b02c Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user Control: 30c5387d Table: 829f7cc0 DAC: 55555555 Process systemd-udevd (pid: 318, stack limit = 0xc28ae220) --- drm-nouveau-platform-fix_deferred_probe.patch | 114 +++++++++++++++++++++++++ kernel.spec | 3 + 2 files changed, 117 insertions(+), 0 deletions(-) create mode 100644 drm-nouveau-platform-fix_deferred_probe.patch diff --git a/drm-nouveau-platform-fix_deferred_probe.patch b/drm-nouveau-platform-fix_deferred_probe.patch new file mode 100644 index 0000000..36aeb91 --- /dev/null +++ b/drm-nouveau-platform-fix_deferred_probe.patch @@ -0,0 +1,114 @@ +From: Thierry Reding <thierry.reding@xxxxxxxxx> +To: Ben Skeggs <bskeggs@xxxxxxxxxx> +Cc: Alexandre Courbot <gnurou@xxxxxxxxx>, + Nicolas Chauvet <kwizart@xxxxxxxxx>, + dri-devel@xxxxxxxxxxxxxxxxxxxxx, + linux-tegra@xxxxxxxxxxxxxxx +Subject: [PATCH] drm/nouveau: platform: Fix deferred probe +Date: Wed, 24 Feb 2016 18:34:43 +0100 +Message-Id: <1456335283-22097-1-git-send-email-thierry.reding@xxxxxxxxx> +X-Mailer: git-send-email 2.7.1 + +From: Thierry Reding <treding@xxxxxxxxxx> + +The error cleanup paths aren't quite correct and will crash upon +deferred probe. + +Cc: stable@xxxxxxxxxxxxxxx # v4.3+ +Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> +--- + drivers/gpu/drm/nouveau/nouveau_platform.c | 2 +- + drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 40 ++++++++++++++++------ + 2 files changed, 30 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.c b/drivers/gpu/drm/nouveau/nouveau_platform.c +index 8a70cec59bcd..2dfe58af12e4 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_platform.c ++++ b/drivers/gpu/drm/nouveau/nouveau_platform.c +@@ -24,7 +24,7 @@ + static int nouveau_platform_probe(struct platform_device *pdev) + { + const struct nvkm_device_tegra_func *func; +- struct nvkm_device *device; ++ struct nvkm_device *device = NULL; + struct drm_device *drm; + int ret; + +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c +index 7f8a42721eb2..e7e581d6a8ff 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c +@@ -252,32 +252,40 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func, + + if (!(tdev = kzalloc(sizeof(*tdev), GFP_KERNEL))) + return -ENOMEM; +- *pdevice = &tdev->device; ++ + tdev->func = func; + tdev->pdev = pdev; + tdev->irq = -1; + + tdev->vdd = devm_regulator_get(&pdev->dev, "vdd"); +- if (IS_ERR(tdev->vdd)) +- return PTR_ERR(tdev->vdd); ++ if (IS_ERR(tdev->vdd)) { ++ ret = PTR_ERR(tdev->vdd); ++ goto free; ++ } + + tdev->rst = devm_reset_control_get(&pdev->dev, "gpu"); +- if (IS_ERR(tdev->rst)) +- return PTR_ERR(tdev->rst); ++ if (IS_ERR(tdev->rst)) { ++ ret = PTR_ERR(tdev->rst); ++ goto free; ++ } + + tdev->clk = devm_clk_get(&pdev->dev, "gpu"); +- if (IS_ERR(tdev->clk)) +- return PTR_ERR(tdev->clk); ++ if (IS_ERR(tdev->clk)) { ++ ret = PTR_ERR(tdev->clk); ++ goto free; ++ } + + tdev->clk_pwr = devm_clk_get(&pdev->dev, "pwr"); +- if (IS_ERR(tdev->clk_pwr)) +- return PTR_ERR(tdev->clk_pwr); ++ if (IS_ERR(tdev->clk_pwr)) { ++ ret = PTR_ERR(tdev->clk_pwr); ++ goto free; ++ } + + nvkm_device_tegra_probe_iommu(tdev); + + ret = nvkm_device_tegra_power_up(tdev); + if (ret) +- return ret; ++ goto remove; + + tdev->gpu_speedo = tegra_sku_info.gpu_speedo_value; + ret = nvkm_device_ctor(&nvkm_device_tegra_func, NULL, &pdev->dev, +@@ -285,9 +293,19 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func, + cfg, dbg, detect, mmio, subdev_mask, + &tdev->device); + if (ret) +- return ret; ++ goto powerdown; ++ ++ *pdevice = &tdev->device; + + return 0; ++ ++powerdown: ++ nvkm_device_tegra_power_down(tdev); ++remove: ++ nvkm_device_tegra_remove_iommu(tdev); ++free: ++ kfree(tdev); ++ return ret; + } + #else + int +-- +2.7.1 diff --git a/kernel.spec b/kernel.spec index a5a6997..edbb653 100644 --- a/kernel.spec +++ b/kernel.spec @@ -604,6 +604,9 @@ Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch #rhbz 1288684 Patch647: 0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch +# Fix nouveau on arm for 4.3+ +Patch658: drm-nouveau-platform-fix_deferred_probe.patch + # END OF PATCH DEFINITIONS %endif -- 1.7.2.1 _______________________________________________ kernel mailing list kernel@xxxxxxxxxxxxxxxxxxxxxxx http://lists.fedoraproject.org/admin/lists/kernel@xxxxxxxxxxxxxxxxxxxxxxx