Re: [PATCH] Fix boot on jetson-tk1 related to platform_nouveau

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Le 25 févr. 2016 10:14, "Nicolas Chauvet" <kwizart@xxxxxxxxx> a écrit :
>
> 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
Koji scratch build: http://koji.fedoraproject.org/taskinfo?taskID=13117597
_______________________________________________
kernel mailing list
kernel@xxxxxxxxxxxxxxxxxxxxxxx
http://lists.fedoraproject.org/admin/lists/kernel@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [USB]     [Asterisk PBX]

  Powered by Linux