[PATCH] drm/mgag200: fix null pointer dereference
we are referencing the pointer after doing alloc_apertures, as alloc_apertures kzallocs, the kzalloc may fail and we get a NULL. so we need to check for NULL before we dereference this pointer Signed-off-by: Devendra Naga --- drivers/gpu/drm/mgag200/mgag200_drv.c |3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c index 93e832d..ea1024d 100644 --- a/drivers/gpu/drm/mgag200/mgag200_drv.c +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c @@ -47,6 +47,9 @@ static void mgag200_kick_out_firmware_fb(struct pci_dev *pdev) bool primary = false; ap = alloc_apertures(1); + if (!ap) + return; + ap->ranges[0].base = pci_resource_start(pdev, 0); ap->ranges[0].size = pci_resource_len(pdev, 0); -- 1.7.9.5
[PATCH 2/2] drm/radeon: Make sure the correct TA bit is used for R700
The declarations were moved around because of a GCC warning, "ISO C90 forbids mixed declarations and code". (why so strict?) Signed-off-by: Lauri Kasanen --- drivers/gpu/drm/radeon/r600.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index bff6272..c77cdba 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c @@ -1278,15 +1278,24 @@ void r600_vram_scratch_fini(struct radeon_device *rdev) int r600_gpu_soft_reset(struct radeon_device *rdev) { struct rv515_mc_save save; - u32 grbm_busy_mask = S_008010_VC_BUSY(1) | S_008010_VGT_BUSY_NO_DMA(1) | - S_008010_VGT_BUSY(1) | S_008010_TA03_BUSY(1) | + u32 grbm_busy_mask; + u32 grbm2_busy_mask; + u32 tmp; + + u32 ta_busy = S_008010_TA03_BUSY(1); + + if (rdev->family >= CHIP_RV770) + ta_busy = S_008010_R700_TA03_BUSY(1); + + grbm_busy_mask = S_008010_VC_BUSY(1) | S_008010_VGT_BUSY_NO_DMA(1) | + S_008010_VGT_BUSY(1) | ta_busy | S_008010_TC_BUSY(1) | S_008010_SX_BUSY(1) | S_008010_SH_BUSY(1) | S_008010_SPI03_BUSY(1) | S_008010_SMX_BUSY(1) | S_008010_SC_BUSY(1) | S_008010_PA_BUSY(1) | S_008010_DB03_BUSY(1) | S_008010_CR_BUSY(1) | S_008010_CB03_BUSY(1) | S_008010_GUI_ACTIVE(1); - u32 grbm2_busy_mask = S_008014_SPI0_BUSY(1) | S_008014_SPI1_BUSY(1) | + grbm2_busy_mask = S_008014_SPI0_BUSY(1) | S_008014_SPI1_BUSY(1) | S_008014_SPI2_BUSY(1) | S_008014_SPI3_BUSY(1) | S_008014_TA0_BUSY(1) | S_008014_TA1_BUSY(1) | S_008014_TA2_BUSY(1) | S_008014_TA3_BUSY(1) | @@ -1294,7 +1303,6 @@ int r600_gpu_soft_reset(struct radeon_device *rdev) S_008014_DB2_BUSY(1) | S_008014_DB3_BUSY(1) | S_008014_CB0_BUSY(1) | S_008014_CB1_BUSY(1) | S_008014_CB2_BUSY(1) | S_008014_CB3_BUSY(1); - u32 tmp; if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE)) return 0; -- 1.7.2.1
[PATCH 1/2] drm/radeon: Document that R700 has a different TA status bit than R600
Hi This info comes from r600_demo, and was confirmed correct on a RV710. Signed-off-by: Lauri Kasanen --- drivers/gpu/drm/radeon/r600d.h |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h index 025fd5b..b818a5c 100644 --- a/drivers/gpu/drm/radeon/r600d.h +++ b/drivers/gpu/drm/radeon/r600d.h @@ -1192,6 +1192,7 @@ #defineS_008010_VC_BUSY(x) (((x) & 1) << 11) #defineS_008010_DB03_CLEAN(x) (((x) & 1) << 12) #defineS_008010_CB03_CLEAN(x) (((x) & 1) << 13) +#defineS_008010_R700_TA03_BUSY(x) (((x) & 1) << 14) #defineS_008010_VGT_BUSY_NO_DMA(x) (((x) & 1) << 16) #defineS_008010_VGT_BUSY(x)(((x) & 1) << 17) #defineS_008010_TA03_BUSY(x) (((x) & 1) << 18) -- 1.7.2.1
[PATCH 1/2] video: drm: exynos: Add device tree support
Hi, On Fri, Jul 6, 2012 at 9:28 PM, Leela Krishna Amudala wrote: > Add device tree based discovery support for DRM-FIMD driver. > > Signed-off-by: Leela Krishna Amudala > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 29fdbfe..37769cf 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -788,12 +789,84 @@ static int fimd_power_on(struct fimd_context *ctx, bool > enable) > return 0; > } > > +#ifdef CONFIG_OF > +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device > *dev) > +{ > + struct device_node *np = dev->of_node; > + struct device_node *disp_np; > + struct exynos_drm_fimd_pdata *pd; > + u32 data[4]; > + > + pd = kzalloc(sizeof(*pd), GFP_KERNEL); > + if (!pd) { > + dev_err(dev, "memory allocation for pdata failed\n"); > + return ERR_PTR(-ENOMEM); > + } > + > + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) > + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; > + if (of_get_property(np, "samsung,fimd-vidout-tv", NULL)) > + pd->vidcon0 |= VIDCON0_VIDOUT_TV; > + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_HSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VCLK; > + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VDEN; > + > + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); > + if (!disp_np) { > + dev_err(dev, "unable to find display panel info\n"); > + return ERR_PTR(-EINVAL); > + } > + > + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { > + dev_err(dev, "invalid horizontal timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.left_margin = data[0]; > + pd->panel.timing.right_margin = data[1]; > + pd->panel.timing.hsync_len = data[2]; > + pd->panel.timing.xres = data[3]; > + > + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { > + dev_err(dev, "invalid vertical timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.upper_margin = data[0]; > + pd->panel.timing.lower_margin = data[1]; > + pd->panel.timing.vsync_len = data[2]; > + pd->panel.timing.yres = data[3]; > + > + of_property_read_u32(disp_np, "lcd-panel-type", >panel_type); > + > + of_property_read_u32(np, "samsung,fimd-frame-rate", > + >panel.timing.refresh); > + > + of_property_read_u32(np, "samsung, defalut-window", >default_win); No space between after comma. > + > + of_property_read_u32(np, "samsung,fimd-win-bpp", >bpp); > + > + return pd; > +} > +#else > +static int drm_fimd_dt_parse_pdata(struct device *dev, > + struct exynos_drm_fimd_pdata **pdata) > +{ > + return 0; > +} > +#endif /* CONFIG_OF */ > + > +static const struct of_device_id drm_fimd_dt_match[]; > + > static int __devinit fimd_probe(struct platform_device *pdev) > { > struct device *dev = >dev; > struct fimd_context *ctx; > struct exynos_drm_subdrv *subdrv; > - struct exynos_drm_fimd_pdata *pdata; > + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; > struct exynos_drm_panel_info *panel; > struct resource *res; > int win; > @@ -801,7 +874,11 @@ static int __devinit fimd_probe(struct platform_device > *pdev) > > DRM_DEBUG_KMS("%s\n", __FILE__); > > - pdata = pdev->dev.platform_data; > + if (pdev->dev.of_node) { > + pdata = drm_fimd_dt_parse_pdata(>dev); > + if (IS_ERR(pdata)) > + return PTR_ERR(pdata); > + } > if (!pdata) { > dev_err(dev, "no platform data specified\n"); > return -EINVAL; > @@ -1006,6 +1083,15 @@ static int fimd_runtime_resume(struct device *dev) > } > #endif > > +#ifdef CONFIG_OF > +static const struct of_device_id drm_fimd_dt_match[] = { > + { .compatible = "samsung,exynos5-fb", It's ambiguous. it's better to use "samsung,exynos5-drm". Yes I know, previous it uses exynos4-fb to reduce the modification with mainline. but correct name is exynoxX-drm. Thank you, Kyungmin Park > + .data = (void *)NULL }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, drm_fimd_dt_match); > +#endif > + > static const struct dev_pm_ops fimd_pm_ops
general protection fault on ttm_init()
On Fri, Jul 06, 2012 at 06:09:20PM +0100, Dave Airlie wrote: > On Fri, Jul 6, 2012 at 5:49 PM, Dave Airlie wrote: > > On Fri, Jul 6, 2012 at 3:48 PM, Fengguang Wu > > wrote: > >> ... The missed kconfig. > >> > >> On Fri, Jul 06, 2012 at 10:46:22PM +0800, Fengguang Wu wrote: > >>> Hi Thomas, > > > > Wierd, I'm sorta tempted to just depend drm on CONFIG_PROC_FS, but it > > looks like the error path is failing to dtrt. > > I've attached a patch that should fix it, let me know if it works. It does not work.. The dmesg (attached) remains the same. > though since the drm fails on proc not being there I wonder should we > just enforce proc being there if you pick drm. Yeah, enabling PROC_FS does fix the error :) Thanks, Fengguang -- next part -- [0.00] Linux version 3.5.0-rc2-00059-gc5fb75a-dirty (wfg at wfg-t420) (gcc version 4.7.0 (Debian 4.7.0-10) ) #3 PREEMPT Sat Jul 7 09:42:37 CST 2012 [0.00] Command line: console=ttyS0,115200 console=tty nokeymap root=/dev/ram0 rw [0.00] e820: BIOS-provided physical RAM map: [0.00] BIOS-e820: [mem 0x-0x0009f3ff] usable [0.00] BIOS-e820: [mem 0x0009f400-0x0009] reserved [0.00] BIOS-e820: [mem 0x000f-0x000f] reserved [0.00] BIOS-e820: [mem 0x0010-0x1fffcfff] usable [0.00] BIOS-e820: [mem 0x1fffd000-0x1fff] reserved [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] reserved [0.00] BIOS-e820: [mem 0xfffc-0x] reserved [0.00] NX (Execute Disable) protection: active [0.00] DMI 2.4 present. [0.00] e820: last_pfn = 0x1fffd max_arch_pfn = 0x4 [0.00] x86 PAT enabled: cpu 0, old 0x70406, new 0x7010600070106 [0.00] init_memory_mapping: [mem 0x-0x1fffcfff] [0.00] RAMDISK: [mem 0x1e8d6000-0x1ffe] [0.00] ACPI: RSDP 000fd9a0 00014 (v00 BOCHS ) [0.00] ACPI: RSDT 1fffd7b0 00034 (v01 BOCHS BXPCRSDT 0001 BXPC 0001) [0.00] ACPI: FACP 1f80 00074 (v01 BOCHS BXPCFACP 0001 BXPC 0001) [0.00] ACPI: DSDT 1fffd9b0 02589 (v01 BXPC BXDSDT 0001 INTL 20100528) [0.00] ACPI: FACS 1f40 00040 [0.00] ACPI: SSDT 1fffd910 0009E (v01 BOCHS BXPCSSDT 0001 BXPC 0001) [0.00] ACPI: APIC 1fffd830 00072 (v01 BOCHS BXPCAPIC 0001 BXPC 0001) [0.00] ACPI: HPET 1fffd7f0 00038 (v01 BOCHS BXPCHPET 0001 BXPC 0001) [0.00] kvm-clock: Using msrs 4b564d01 and 4b564d00 [0.00] kvm-clock: cpu 0, msr 0:1a2cc81, boot clock [0.00] Zone ranges: [0.00] DMA32[mem 0x0001-0x] [0.00] Normal empty [0.00] Movable zone start for each node [0.00] Early memory node ranges [0.00] node 0: [mem 0x0001-0x0009efff] [0.00] node 0: [mem 0x0010-0x1fffcfff] [0.00] ACPI: PM-Timer IO Port: 0xb008 [0.00] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [0.00] ACPI: IOAPIC (id[0x01] address[0xfec0] gsi_base[0]) [0.00] IOAPIC[0]: apic_id 1, version 17, address 0xfec0, GSI 0-23 [0.00] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [0.00] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level) [0.00] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [0.00] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level) [0.00] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level) [0.00] Using ACPI (MADT) for SMP configuration information [0.00] ACPI: HPET id: 0x8086a201 base: 0xfed0 [0.00] KVM setup async PF for cpu 0 [0.00] kvm-stealtime: cpu 0, msr 1a2cc00 [0.00] e820: [mem 0x2000-0xfeffbfff] available for PCI devices [0.00] Booting paravirtualized kernel on KVM [0.00] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 128902 [0.00] Kernel command line: [0.00] PID hash table entries: 2048 (order: 2, 16384 bytes) [0.00] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes) [0.00] Inode-cache hash table entries: 32768 (order: 6, 262144 bytes) [0.00] __ex_table already sorted, skipping sort [0.00] Memory: 469120k/524276k available (5504k kernel code, 452k absent, 54704k reserved, 7636k data, 820k init) [0.00] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [0.00] NR_IRQS:4352 nr_irqs:256 16 [0.00] console [ttyS0] enabled [0.00] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar [0.00] ... MAX_LOCKDEP_SUBCLASSES: 8 [0.00] ... MAX_LOCK_DEPTH: 48 [0.00] ... MAX_LOCKDEP_KEYS:
[PATCH] gma500: move the ASLE enable
From: Alan CoxOtherwise we end up getting the masks wrong, can get events before we are doing power control and other ungood things. Signed-off-by: Alan Cox --- drivers/gpu/drm/gma500/opregion.c |8 +++- drivers/gpu/drm/gma500/opregion.h |5 + drivers/gpu/drm/gma500/psb_drv.c |1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/gma500/opregion.c b/drivers/gpu/drm/gma500/opregion.c index 4f186ec..c430bd4 100644 --- a/drivers/gpu/drm/gma500/opregion.c +++ b/drivers/gpu/drm/gma500/opregion.c @@ -144,6 +144,8 @@ struct opregion_asle { #define ASLE_CBLV_VALID (1<<31) +static struct psb_intel_opregion *system_opregion; + static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) { struct drm_psb_private *dev_priv = dev->dev_private; @@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev) struct drm_psb_private *dev_priv = dev->dev_private; struct opregion_asle *asle = dev_priv->opregion.asle; - if (asle) { + if (asle && system_opregion ) { /* Don't do this on Medfield or other non PC like devices, they use the bit for something different altogether */ psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); @@ -221,7 +223,6 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev) #define ACPI_EV_LID(1<<1) #define ACPI_EV_DOCK (1<<2) -static struct psb_intel_opregion *system_opregion; static int psb_intel_opregion_video_event(struct notifier_block *nb, unsigned long val, void *data) @@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev) system_opregion = opregion; register_acpi_notifier(_intel_opregion_notifier); } - - if (opregion->asle) - psb_intel_opregion_enable_asle(dev); } void psb_intel_opregion_fini(struct drm_device *dev) diff --git a/drivers/gpu/drm/gma500/opregion.h b/drivers/gpu/drm/gma500/opregion.h index 72dc6b9..4a90f8b 100644 --- a/drivers/gpu/drm/gma500/opregion.h +++ b/drivers/gpu/drm/gma500/opregion.h @@ -27,6 +27,7 @@ extern void psb_intel_opregion_asle_intr(struct drm_device *dev); extern void psb_intel_opregion_init(struct drm_device *dev); extern void psb_intel_opregion_fini(struct drm_device *dev); extern int psb_intel_opregion_setup(struct drm_device *dev); +extern void psb_intel_opregion_enable_asle(struct drm_device *dev); #else @@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev) { return 0; } + +extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev) +{ +} #endif diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c index caba6e0..a8858a9 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c @@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) if (ret) return ret; + psb_intel_opregion_enable_asle(dev); #if 0 /*enable runtime pm at last*/ pm_runtime_enable(>pdev->dev);
[PATCH] drm/mgag200: fix null pointer dereference
we are referencing the pointer after doing alloc_apertures, as alloc_apertures kzallocs, the kzalloc may fail and we get a NULL. so we need to check for NULL before we dereference this pointer Signed-off-by: Devendra Naga devendra.a...@gmail.com --- drivers/gpu/drm/mgag200/mgag200_drv.c |3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c index 93e832d..ea1024d 100644 --- a/drivers/gpu/drm/mgag200/mgag200_drv.c +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c @@ -47,6 +47,9 @@ static void mgag200_kick_out_firmware_fb(struct pci_dev *pdev) bool primary = false; ap = alloc_apertures(1); + if (!ap) + return; + ap-ranges[0].base = pci_resource_start(pdev, 0); ap-ranges[0].size = pci_resource_len(pdev, 0); -- 1.7.9.5 ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH 1/2] drm/radeon: Document that R700 has a different TA status bit than R600
Hi This info comes from r600_demo, and was confirmed correct on a RV710. Signed-off-by: Lauri Kasanen c...@gmx.com --- drivers/gpu/drm/radeon/r600d.h |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h index 025fd5b..b818a5c 100644 --- a/drivers/gpu/drm/radeon/r600d.h +++ b/drivers/gpu/drm/radeon/r600d.h @@ -1192,6 +1192,7 @@ #defineS_008010_VC_BUSY(x) (((x) 1) 11) #defineS_008010_DB03_CLEAN(x) (((x) 1) 12) #defineS_008010_CB03_CLEAN(x) (((x) 1) 13) +#defineS_008010_R700_TA03_BUSY(x) (((x) 1) 14) #defineS_008010_VGT_BUSY_NO_DMA(x) (((x) 1) 16) #defineS_008010_VGT_BUSY(x)(((x) 1) 17) #defineS_008010_TA03_BUSY(x) (((x) 1) 18) -- 1.7.2.1 ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH 2/2] drm/radeon: Make sure the correct TA bit is used for R700
The declarations were moved around because of a GCC warning, ISO C90 forbids mixed declarations and code. (why so strict?) Signed-off-by: Lauri Kasanen c...@gmx.com --- drivers/gpu/drm/radeon/r600.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index bff6272..c77cdba 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c @@ -1278,15 +1278,24 @@ void r600_vram_scratch_fini(struct radeon_device *rdev) int r600_gpu_soft_reset(struct radeon_device *rdev) { struct rv515_mc_save save; - u32 grbm_busy_mask = S_008010_VC_BUSY(1) | S_008010_VGT_BUSY_NO_DMA(1) | - S_008010_VGT_BUSY(1) | S_008010_TA03_BUSY(1) | + u32 grbm_busy_mask; + u32 grbm2_busy_mask; + u32 tmp; + + u32 ta_busy = S_008010_TA03_BUSY(1); + + if (rdev-family = CHIP_RV770) + ta_busy = S_008010_R700_TA03_BUSY(1); + + grbm_busy_mask = S_008010_VC_BUSY(1) | S_008010_VGT_BUSY_NO_DMA(1) | + S_008010_VGT_BUSY(1) | ta_busy | S_008010_TC_BUSY(1) | S_008010_SX_BUSY(1) | S_008010_SH_BUSY(1) | S_008010_SPI03_BUSY(1) | S_008010_SMX_BUSY(1) | S_008010_SC_BUSY(1) | S_008010_PA_BUSY(1) | S_008010_DB03_BUSY(1) | S_008010_CR_BUSY(1) | S_008010_CB03_BUSY(1) | S_008010_GUI_ACTIVE(1); - u32 grbm2_busy_mask = S_008014_SPI0_BUSY(1) | S_008014_SPI1_BUSY(1) | + grbm2_busy_mask = S_008014_SPI0_BUSY(1) | S_008014_SPI1_BUSY(1) | S_008014_SPI2_BUSY(1) | S_008014_SPI3_BUSY(1) | S_008014_TA0_BUSY(1) | S_008014_TA1_BUSY(1) | S_008014_TA2_BUSY(1) | S_008014_TA3_BUSY(1) | @@ -1294,7 +1303,6 @@ int r600_gpu_soft_reset(struct radeon_device *rdev) S_008014_DB2_BUSY(1) | S_008014_DB3_BUSY(1) | S_008014_CB0_BUSY(1) | S_008014_CB1_BUSY(1) | S_008014_CB2_BUSY(1) | S_008014_CB3_BUSY(1); - u32 tmp; if (!(RREG32(GRBM_STATUS) GUI_ACTIVE)) return 0; -- 1.7.2.1 ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: general protection fault on ttm_init()
On Sat, Jul 07, 2012 at 10:08:47AM +0800, Fengguang Wu wrote: On Fri, Jul 06, 2012 at 06:09:20PM +0100, Dave Airlie wrote: On Fri, Jul 6, 2012 at 5:49 PM, Dave Airlie airl...@gmail.com wrote: On Fri, Jul 6, 2012 at 3:48 PM, Fengguang Wu fengguang...@intel.com wrote: ... The missed kconfig. On Fri, Jul 06, 2012 at 10:46:22PM +0800, Fengguang Wu wrote: Hi Thomas, Wierd, I'm sorta tempted to just depend drm on CONFIG_PROC_FS, but it looks like the error path is failing to dtrt. I've attached a patch that should fix it, let me know if it works. It does not work.. The dmesg (attached) remains the same. I got more interesting back traces in a clean kernel: device class 'drm': registering kobject: 'drm' (88000f07f050): kobject_add_internal: parent: 'class', set: 'class' kobject: 'drm' (88000f07f050): kobject_uevent_env kobject: 'drm' (88000f07f050): fill_kobj_path: path = '/class/drm' [drm:drm_core_init] *ERROR* Cannot create /proc/dri device class 'drm': unregistering kobject: 'drm' (88000f07f050): kobject_cleanup kobject: 'drm' (88000f07f050): auto cleanup 'remove' event kobject: 'drm' (88000f07f050): kobject_uevent_env kobject: 'drm' (88000f07f050): fill_kobj_path: path = '/class/drm' kobject: 'drm' (88000f07f050): auto cleanup kobject_del kobject: 'drm' (88000f07f050): calling ktype release class 'drm': release. class_create_release called for drm kobject: 'drm': free name kobject: 'drm' (88000f080070): kobject_cleanup kobject: 'drm' (88000f080070): calling ktype release kobject: 'drm': free name device: 'ttm': device_add kobject: '(null)' (88000f080230): kobject_add_internal: parent: 'virtual', set: '(null)' kobject: 'ttm' (824709b0): kobject_add_internal: parent: '(null)', set: 'devices' general protection fault: [#1] SMP CPU 1 Pid: 1, comm: swapper/0 Not tainted 3.5.0-rc5-bisect #207 RIP: 0010:[8115eb59] [8115eb59] sysfs_do_create_link+0x59/0x1c0 RSP: 0018:88107db0 EFLAGS: 00010206 RAX: 8810 RBX: 00cc RCX: dad9 RDX: d9d9 RSI: RDI: 8243b320 RBP: 88107e00 R08: 88100580 R09: fe80 R10: 8810 R11: 0200 R12: 821622db R13: 88000f080150 R14: 0001 R15: 88000f080308 FS: () GS:88000df0() knlGS: CS: 0010 DS: ES: CR0: 8005003b CR2: CR3: 02411000 CR4: 06a0 DR0: DR1: DR2: DR3: DR6: 0ff0 DR7: 0400 Process swapper/0 (pid: 1, threadinfo 88106000, task 8810) Stack: 88000f080308 824709b0 02ec 824709b0 02ec 824709a0 88107e10 8115ecce Call Trace: [8115ecce] sysfs_create_link+0xe/0x10 [81580309] device_add+0x289/0x610 [8255aae2] ? drm_core_init+0xca/0xca [81589d09] ? device_pm_init+0x69/0x90 [8255aae2] ? drm_core_init+0xca/0xca [815806a9] device_register+0x19/0x20 [8147d507] drm_class_device_register+0x17/0x20 [8255ab19] ttm_init+0x37/0x62 [8252ed56] do_one_initcall+0x7a/0x139 [8252ef18] kernel_init+0x103/0x187 [8252e614] ? do_early_param+0x8c/0x8c [81ccf334] kernel_thread_helper+0x4/0x10 [81ccd8b0] ? retint_restore_args+0x13/0x13 [8252ee15] ? do_one_initcall+0x139/0x139 [81ccf330] ? gs_change+0x13/0x13 Code: 4c 8b 7f 30 bb f2 ff ff ff 4d 85 ff 0f 84 a2 00 00 00 48 c7 c7 20 b3 43 82 e8 c4 e2 b6 00 49 8b 5d 30 48 85 db 0f 84 27 01 00 00 8b 03 f0 ff 03 48 c7 c7 20 b3 43 82 e8 d6 e3 b6 00 4c 89 e7 ba RIP [8115eb59] sysfs_do_create_link+0x59/0x1c0 RSP 88107db0 and: kobject: 'drm': free name device: 'ttm': device_add BUG: unable to handle kernel paging request at 00010001 IP: [8137b7ad] strnlen+0xd/0x40 PGD 0 Oops: [#1] SMP CPU 1 Pid: 1, comm: swapper/0 Not tainted 3.5.0-rc5-bisect #207 RIP: 0010:[8137b7ad] [8137b7ad] strnlen+0xd/0x40 RSP: 0018:88107c30 EFLAGS: 00010286 RAX: 8210a8fc RBX: RCX: fffe RDX: 00010001 RSI: RDI: 00010001 RBP: 88107c30 R08: R09: R10: 88000f0750f0 R11: 824384e0 R12: 00010001 R13: R14: R15: FS: () GS:88000df0() knlGS: CS: 0010 DS: ES: CR0: 8005003b CR2: 00010001 CR3: 02411000 CR4: 06a0 DR0: DR1: DR2: DR3: DR6: 0ff0 DR7: