From c03c62114c13efb6f58ce0ffd5dd3daf7221e611 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 11 May 2014 21:18:39 +0200 Subject: [PATCH] 3.14-stable patches added patches: drm-bochs-add-power-management-support.patch drm-cirrus-add-power-management-support.patch x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch --- ...m-bochs-add-power-management-support.patch | 92 +++++++++++++++ ...-cirrus-add-power-management-support.patch | 106 ++++++++++++++++++ queue-3.14/series | 3 + ...kefile-breakage-with-32-bit-userland.patch | 40 +++++++ 4 files changed, 241 insertions(+) create mode 100644 queue-3.14/drm-bochs-add-power-management-support.patch create mode 100644 queue-3.14/drm-cirrus-add-power-management-support.patch create mode 100644 queue-3.14/x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch diff --git a/queue-3.14/drm-bochs-add-power-management-support.patch b/queue-3.14/drm-bochs-add-power-management-support.patch new file mode 100644 index 00000000000..9466618bcf3 --- /dev/null +++ b/queue-3.14/drm-bochs-add-power-management-support.patch @@ -0,0 +1,92 @@ +From b8ccd70f1363f7d4e49219dbc46ec973a14f49cd Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Apr 2014 11:34:49 +0200 +Subject: drm: bochs: add power management support + +From: Gerd Hoffmann + +commit b8ccd70f1363f7d4e49219dbc46ec973a14f49cd upstream. + +bochs kms driver lacks power management support, thus +the vga display doesn't work any more after S3 resume. + +Fix this by adding suspend and resume functions. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/bochs/bochs.h | 1 + drivers/gpu/drm/bochs/bochs_drv.c | 44 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 45 insertions(+) + +--- a/drivers/gpu/drm/bochs/bochs.h ++++ b/drivers/gpu/drm/bochs/bochs.h +@@ -1,5 +1,6 @@ + #include + #include ++#include + + #include + #include +--- a/drivers/gpu/drm/bochs/bochs_drv.c ++++ b/drivers/gpu/drm/bochs/bochs_drv.c +@@ -95,6 +95,49 @@ static struct drm_driver bochs_driver = + }; + + /* ---------------------------------------------------------------------- */ ++/* pm interface */ ++ ++static int bochs_pm_suspend(struct device *dev) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev); ++ struct drm_device *drm_dev = pci_get_drvdata(pdev); ++ struct bochs_device *bochs = drm_dev->dev_private; ++ ++ drm_kms_helper_poll_disable(drm_dev); ++ ++ if (bochs->fb.initialized) { ++ console_lock(); ++ fb_set_suspend(bochs->fb.helper.fbdev, 1); ++ console_unlock(); ++ } ++ ++ return 0; ++} ++ ++static int bochs_pm_resume(struct device *dev) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev); ++ struct drm_device *drm_dev = pci_get_drvdata(pdev); ++ struct bochs_device *bochs = drm_dev->dev_private; ++ ++ drm_helper_resume_force_mode(drm_dev); ++ ++ if (bochs->fb.initialized) { ++ console_lock(); ++ fb_set_suspend(bochs->fb.helper.fbdev, 0); ++ console_unlock(); ++ } ++ ++ drm_kms_helper_poll_enable(drm_dev); ++ return 0; ++} ++ ++static const struct dev_pm_ops bochs_pm_ops = { ++ SET_SYSTEM_SLEEP_PM_OPS(bochs_pm_suspend, ++ bochs_pm_resume) ++}; ++ ++/* ---------------------------------------------------------------------- */ + /* pci interface */ + + static int bochs_kick_out_firmware_fb(struct pci_dev *pdev) +@@ -155,6 +198,7 @@ static struct pci_driver bochs_pci_drive + .id_table = bochs_pci_tbl, + .probe = bochs_pci_probe, + .remove = bochs_pci_remove, ++ .driver.pm = &bochs_pm_ops, + }; + + /* ---------------------------------------------------------------------- */ diff --git a/queue-3.14/drm-cirrus-add-power-management-support.patch b/queue-3.14/drm-cirrus-add-power-management-support.patch new file mode 100644 index 00000000000..5a85714ab7f --- /dev/null +++ b/queue-3.14/drm-cirrus-add-power-management-support.patch @@ -0,0 +1,106 @@ +From 2f1e800799bf478494cec3573cd63eb34ca89c9d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Apr 2014 11:34:48 +0200 +Subject: drm: cirrus: add power management support + +From: Gerd Hoffmann + +commit 2f1e800799bf478494cec3573cd63eb34ca89c9d upstream. + +cirrus kms driver lacks power management support, thus +the vga display doesn't work any more after S3 resume. + +Fix this by adding suspend and resume functions. +Also make the mode_set function unblank the screen. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/cirrus/cirrus_drv.c | 42 +++++++++++++++++++++++++++++++++++ + drivers/gpu/drm/cirrus/cirrus_mode.c | 3 ++ + 2 files changed, 45 insertions(+) + +--- a/drivers/gpu/drm/cirrus/cirrus_drv.c ++++ b/drivers/gpu/drm/cirrus/cirrus_drv.c +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + + #include "cirrus_drv.h" + +@@ -75,6 +76,41 @@ static void cirrus_pci_remove(struct pci + drm_put_dev(dev); + } + ++static int cirrus_pm_suspend(struct device *dev) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev); ++ struct drm_device *drm_dev = pci_get_drvdata(pdev); ++ struct cirrus_device *cdev = drm_dev->dev_private; ++ ++ drm_kms_helper_poll_disable(drm_dev); ++ ++ if (cdev->mode_info.gfbdev) { ++ console_lock(); ++ fb_set_suspend(cdev->mode_info.gfbdev->helper.fbdev, 1); ++ console_unlock(); ++ } ++ ++ return 0; ++} ++ ++static int cirrus_pm_resume(struct device *dev) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev); ++ struct drm_device *drm_dev = pci_get_drvdata(pdev); ++ struct cirrus_device *cdev = drm_dev->dev_private; ++ ++ drm_helper_resume_force_mode(drm_dev); ++ ++ if (cdev->mode_info.gfbdev) { ++ console_lock(); ++ fb_set_suspend(cdev->mode_info.gfbdev->helper.fbdev, 0); ++ console_unlock(); ++ } ++ ++ drm_kms_helper_poll_enable(drm_dev); ++ return 0; ++} ++ + static const struct file_operations cirrus_driver_fops = { + .owner = THIS_MODULE, + .open = drm_open, +@@ -103,11 +139,17 @@ static struct drm_driver driver = { + .dumb_destroy = drm_gem_dumb_destroy, + }; + ++static const struct dev_pm_ops cirrus_pm_ops = { ++ SET_SYSTEM_SLEEP_PM_OPS(cirrus_pm_suspend, ++ cirrus_pm_resume) ++}; ++ + static struct pci_driver cirrus_pci_driver = { + .name = DRIVER_NAME, + .id_table = pciidlist, + .probe = cirrus_pci_probe, + .remove = cirrus_pci_remove, ++ .driver.pm = &cirrus_pm_ops, + }; + + static int __init cirrus_init(void) +--- a/drivers/gpu/drm/cirrus/cirrus_mode.c ++++ b/drivers/gpu/drm/cirrus/cirrus_mode.c +@@ -308,6 +308,9 @@ static int cirrus_crtc_mode_set(struct d + + WREG_HDR(hdr); + cirrus_crtc_do_set_base(crtc, old_fb, x, y, 0); ++ ++ /* Unblank (needed on S3 resume, vgabios doesn't do it then) */ ++ outb(0x20, 0x3c0); + return 0; + } + diff --git a/queue-3.14/series b/queue-3.14/series index 375efc07f71..572338da70d 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -78,3 +78,6 @@ cpufreq-loongson2_cpufreq-don-t-declare-local-variable-as-static.patch cpufreq-at32ap-don-t-declare-local-variable-as-static.patch acpi-processor-fix-failure-of-loading-acpi-cpufreq-driver.patch cpufreq-unicore32-fix-typo-issue-for-clk.patch +drm-cirrus-add-power-management-support.patch +drm-bochs-add-power-management-support.patch +x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch diff --git a/queue-3.14/x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch b/queue-3.14/x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch new file mode 100644 index 00000000000..aa1cff1603a --- /dev/null +++ b/queue-3.14/x86-64-build-fix-stack-protector-makefile-breakage-with-32-bit-userland.patch @@ -0,0 +1,40 @@ +From 14262d67fe348018af368a07430fbc06eadeabb1 Mon Sep 17 00:00:00 2001 +From: George Spelvin +Date: Wed, 7 May 2014 17:05:52 -0400 +Subject: x86-64, build: Fix stack protector Makefile breakage with 32-bit userland + +From: George Spelvin + +commit 14262d67fe348018af368a07430fbc06eadeabb1 upstream. + +If you are using a 64-bit kernel with 32-bit userland, then +scripts/gcc-x86_64-has-stack-protector.sh invokes 32-bit gcc +with -mcmodel=kernel, which produces: + +:1:0: error: code model 'kernel' not supported in the 32 bit mode + +and trips the "broken compiler" test at arch/x86/Makefile:120. + +There are several places a fix is possible, but the following seems +cleanest. (But it's minimal; it would also be possible to factor +out a bunch of stuff from the two branches of the if.) + +Signed-off-by: George Spelvin +Link: http://lkml.kernel.org/r/20140507210552.7581.qmail@ns.horizon.com +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/Makefile | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/x86/Makefile ++++ b/arch/x86/Makefile +@@ -79,6 +79,7 @@ else + UTS_MACHINE := x86_64 + CHECKFLAGS += -D__x86_64__ -m64 + ++ biarch := -m64 + KBUILD_AFLAGS += -m64 + KBUILD_CFLAGS += -m64 + -- 2.47.3