2008-08-06 02:37:25 +08:00
|
|
|
/*
|
|
|
|
* Copyright 2008 Intel Corporation <hong.liu@intel.com>
|
|
|
|
* Copyright 2008 Red Hat <mjg@redhat.com>
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sub license, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice (including the
|
|
|
|
* next paragraph) shall be included in all copies or substantial
|
|
|
|
* portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
|
|
* NON-INFRINGEMENT. IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE
|
|
|
|
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
* SOFTWARE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/acpi.h>
|
2015-12-14 18:50:46 +08:00
|
|
|
#include <linux/dmi.h>
|
2017-08-17 19:52:09 +08:00
|
|
|
#include <linux/firmware.h>
|
2009-03-20 05:35:39 +08:00
|
|
|
#include <acpi/video.h>
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
#include "i915_drv.h"
|
2019-12-21 04:03:51 +08:00
|
|
|
#include "intel_acpi.h"
|
2021-08-25 19:06:50 +08:00
|
|
|
#include "intel_backlight.h"
|
2019-08-06 19:39:33 +08:00
|
|
|
#include "intel_display_types.h"
|
2019-04-05 19:00:14 +08:00
|
|
|
#include "intel_opregion.h"
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
#define OPREGION_HEADER_OFFSET 0
|
|
|
|
#define OPREGION_ACPI_OFFSET 0x100
|
2011-02-25 02:13:42 +08:00
|
|
|
#define ACPI_CLID 0x01ac /* current lid state indicator */
|
|
|
|
#define ACPI_CDCK 0x01b0 /* current docking state indicator */
|
2008-08-06 02:37:25 +08:00
|
|
|
#define OPREGION_SWSCI_OFFSET 0x200
|
|
|
|
#define OPREGION_ASLE_OFFSET 0x300
|
2010-08-19 23:09:23 +08:00
|
|
|
#define OPREGION_VBT_OFFSET 0x400
|
2015-12-14 18:50:45 +08:00
|
|
|
#define OPREGION_ASLE_EXT_OFFSET 0x1C00
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
#define OPREGION_SIGNATURE "IntelGraphicsMem"
|
|
|
|
#define MBOX_ACPI (1<<0)
|
|
|
|
#define MBOX_SWSCI (1<<1)
|
|
|
|
#define MBOX_ASLE (1<<2)
|
2015-07-02 22:43:22 +08:00
|
|
|
#define MBOX_ASLE_EXT (1<<4)
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
struct opregion_header {
|
2011-08-17 03:34:10 +08:00
|
|
|
u8 signature[16];
|
|
|
|
u32 size;
|
2019-02-09 02:42:52 +08:00
|
|
|
struct {
|
|
|
|
u8 rsvd;
|
|
|
|
u8 revision;
|
|
|
|
u8 minor;
|
|
|
|
u8 major;
|
|
|
|
} __packed over;
|
2011-08-17 03:34:10 +08:00
|
|
|
u8 bios_ver[32];
|
|
|
|
u8 vbios_ver[16];
|
|
|
|
u8 driver_ver[16];
|
|
|
|
u32 mboxes;
|
2015-07-02 22:43:22 +08:00
|
|
|
u32 driver_model;
|
|
|
|
u32 pcon;
|
|
|
|
u8 dver[32];
|
|
|
|
u8 rsvd[124];
|
2013-12-02 21:26:09 +08:00
|
|
|
} __packed;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
/* OpRegion mailbox #1: public ACPI methods */
|
|
|
|
struct opregion_acpi {
|
2011-08-17 03:34:10 +08:00
|
|
|
u32 drdy; /* driver readiness */
|
|
|
|
u32 csts; /* notification status */
|
|
|
|
u32 cevt; /* current event */
|
|
|
|
u8 rsvd1[20];
|
|
|
|
u32 didl[8]; /* supported display devices ID list */
|
|
|
|
u32 cpdl[8]; /* currently presented display list */
|
|
|
|
u32 cadl[8]; /* currently active display list */
|
|
|
|
u32 nadl[8]; /* next active devices list */
|
|
|
|
u32 aslp; /* ASL sleep time-out */
|
|
|
|
u32 tidx; /* toggle table index */
|
|
|
|
u32 chpd; /* current hotplug enable indicator */
|
|
|
|
u32 clid; /* current lid state*/
|
|
|
|
u32 cdck; /* current docking state */
|
|
|
|
u32 sxsw; /* Sx state resume */
|
|
|
|
u32 evts; /* ASL supported events */
|
|
|
|
u32 cnot; /* current OS notification */
|
|
|
|
u32 nrdy; /* driver status */
|
2015-07-02 22:43:22 +08:00
|
|
|
u32 did2[7]; /* extended supported display devices ID list */
|
|
|
|
u32 cpd2[7]; /* extended attached display devices list */
|
|
|
|
u8 rsvd2[4];
|
2013-12-02 21:26:09 +08:00
|
|
|
} __packed;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
/* OpRegion mailbox #2: SWSCI */
|
|
|
|
struct opregion_swsci {
|
2011-08-17 03:34:10 +08:00
|
|
|
u32 scic; /* SWSCI command|status|data */
|
|
|
|
u32 parm; /* command parameters */
|
|
|
|
u32 dslp; /* driver sleep time-out */
|
|
|
|
u8 rsvd[244];
|
2013-12-02 21:26:09 +08:00
|
|
|
} __packed;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
/* OpRegion mailbox #3: ASLE */
|
|
|
|
struct opregion_asle {
|
2011-08-17 03:34:10 +08:00
|
|
|
u32 ardy; /* driver readiness */
|
|
|
|
u32 aslc; /* ASLE interrupt command */
|
|
|
|
u32 tche; /* technology enabled indicator */
|
|
|
|
u32 alsi; /* current ALS illuminance reading */
|
|
|
|
u32 bclp; /* backlight brightness to set */
|
|
|
|
u32 pfit; /* panel fitting state */
|
|
|
|
u32 cblv; /* current brightness level */
|
|
|
|
u16 bclm[20]; /* backlight level duty cycle mapping table */
|
|
|
|
u32 cpfm; /* current panel fitting mode */
|
|
|
|
u32 epfm; /* enabled panel fitting modes */
|
|
|
|
u8 plut[74]; /* panel LUT and identifier */
|
|
|
|
u32 pfmb; /* PWM freq and min brightness */
|
2013-09-17 22:14:11 +08:00
|
|
|
u32 cddv; /* color correction default values */
|
|
|
|
u32 pcft; /* power conservation features */
|
|
|
|
u32 srot; /* supported rotation angles */
|
|
|
|
u32 iuer; /* IUER events */
|
2015-07-02 22:43:22 +08:00
|
|
|
u64 fdss;
|
|
|
|
u32 fdsp;
|
|
|
|
u32 stat;
|
2019-02-09 02:42:53 +08:00
|
|
|
u64 rvda; /* Physical (2.0) or relative from opregion (2.1+)
|
|
|
|
* address of raw VBT data. */
|
2015-12-01 06:47:05 +08:00
|
|
|
u32 rvds; /* Size of raw vbt data */
|
|
|
|
u8 rsvd[58];
|
2013-12-02 21:26:09 +08:00
|
|
|
} __packed;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2015-12-14 18:50:45 +08:00
|
|
|
/* OpRegion mailbox #5: ASLE ext */
|
|
|
|
struct opregion_asle_ext {
|
|
|
|
u32 phed; /* Panel Header */
|
|
|
|
u8 bddc[256]; /* Panel EDID */
|
|
|
|
u8 rsvd[764];
|
|
|
|
} __packed;
|
|
|
|
|
2013-04-29 18:02:51 +08:00
|
|
|
/* Driver readiness indicator */
|
|
|
|
#define ASLE_ARDY_READY (1 << 0)
|
|
|
|
#define ASLE_ARDY_NOT_READY (0 << 0)
|
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
/* ASLE Interrupt Command (ASLC) bits */
|
|
|
|
#define ASLC_SET_ALS_ILLUM (1 << 0)
|
|
|
|
#define ASLC_SET_BACKLIGHT (1 << 1)
|
|
|
|
#define ASLC_SET_PFIT (1 << 2)
|
|
|
|
#define ASLC_SET_PWM_FREQ (1 << 3)
|
|
|
|
#define ASLC_SUPPORTED_ROTATION_ANGLES (1 << 4)
|
|
|
|
#define ASLC_BUTTON_ARRAY (1 << 5)
|
|
|
|
#define ASLC_CONVERTIBLE_INDICATOR (1 << 6)
|
|
|
|
#define ASLC_DOCKING_INDICATOR (1 << 7)
|
|
|
|
#define ASLC_ISCT_STATE_CHANGE (1 << 8)
|
|
|
|
#define ASLC_REQ_MSK 0x1ff
|
|
|
|
/* response bits */
|
|
|
|
#define ASLC_ALS_ILLUM_FAILED (1 << 10)
|
|
|
|
#define ASLC_BACKLIGHT_FAILED (1 << 12)
|
|
|
|
#define ASLC_PFIT_FAILED (1 << 14)
|
|
|
|
#define ASLC_PWM_FREQ_FAILED (1 << 16)
|
|
|
|
#define ASLC_ROTATION_ANGLES_FAILED (1 << 18)
|
|
|
|
#define ASLC_BUTTON_ARRAY_FAILED (1 << 20)
|
|
|
|
#define ASLC_CONVERTIBLE_FAILED (1 << 22)
|
|
|
|
#define ASLC_DOCKING_FAILED (1 << 24)
|
|
|
|
#define ASLC_ISCT_STATE_FAILED (1 << 26)
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-04-29 18:02:50 +08:00
|
|
|
/* Technology enabled indicator */
|
|
|
|
#define ASLE_TCHE_ALS_EN (1 << 0)
|
|
|
|
#define ASLE_TCHE_BLC_EN (1 << 1)
|
|
|
|
#define ASLE_TCHE_PFIT_EN (1 << 2)
|
|
|
|
#define ASLE_TCHE_PFMB_EN (1 << 3)
|
|
|
|
|
2008-08-06 02:37:25 +08:00
|
|
|
/* ASLE backlight brightness to set */
|
|
|
|
#define ASLE_BCLP_VALID (1<<31)
|
|
|
|
#define ASLE_BCLP_MSK (~(1<<31))
|
|
|
|
|
|
|
|
/* ASLE panel fitting request */
|
|
|
|
#define ASLE_PFIT_VALID (1<<31)
|
|
|
|
#define ASLE_PFIT_CENTER (1<<0)
|
|
|
|
#define ASLE_PFIT_STRETCH_TEXT (1<<1)
|
|
|
|
#define ASLE_PFIT_STRETCH_GFX (1<<2)
|
|
|
|
|
|
|
|
/* PWM frequency and minimum brightness */
|
|
|
|
#define ASLE_PFMB_BRIGHTNESS_MASK (0xff)
|
|
|
|
#define ASLE_PFMB_BRIGHTNESS_VALID (1<<8)
|
|
|
|
#define ASLE_PFMB_PWM_MASK (0x7ffffe00)
|
|
|
|
#define ASLE_PFMB_PWM_VALID (1<<31)
|
|
|
|
|
|
|
|
#define ASLE_CBLV_VALID (1<<31)
|
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
/* IUER */
|
|
|
|
#define ASLE_IUER_DOCKING (1 << 7)
|
|
|
|
#define ASLE_IUER_CONVERTIBLE (1 << 6)
|
|
|
|
#define ASLE_IUER_ROTATION_LOCK_BTN (1 << 4)
|
|
|
|
#define ASLE_IUER_VOLUME_DOWN_BTN (1 << 3)
|
|
|
|
#define ASLE_IUER_VOLUME_UP_BTN (1 << 2)
|
|
|
|
#define ASLE_IUER_WINDOWS_BTN (1 << 1)
|
|
|
|
#define ASLE_IUER_POWER_BTN (1 << 0)
|
|
|
|
|
2013-09-02 15:38:59 +08:00
|
|
|
/* Software System Control Interrupt (SWSCI) */
|
|
|
|
#define SWSCI_SCIC_INDICATOR (1 << 0)
|
|
|
|
#define SWSCI_SCIC_MAIN_FUNCTION_SHIFT 1
|
|
|
|
#define SWSCI_SCIC_MAIN_FUNCTION_MASK (0xf << 1)
|
|
|
|
#define SWSCI_SCIC_SUB_FUNCTION_SHIFT 8
|
|
|
|
#define SWSCI_SCIC_SUB_FUNCTION_MASK (0xff << 8)
|
|
|
|
#define SWSCI_SCIC_EXIT_PARAMETER_SHIFT 8
|
|
|
|
#define SWSCI_SCIC_EXIT_PARAMETER_MASK (0xff << 8)
|
|
|
|
#define SWSCI_SCIC_EXIT_STATUS_SHIFT 5
|
|
|
|
#define SWSCI_SCIC_EXIT_STATUS_MASK (7 << 5)
|
|
|
|
#define SWSCI_SCIC_EXIT_STATUS_SUCCESS 1
|
|
|
|
|
|
|
|
#define SWSCI_FUNCTION_CODE(main, sub) \
|
|
|
|
((main) << SWSCI_SCIC_MAIN_FUNCTION_SHIFT | \
|
|
|
|
(sub) << SWSCI_SCIC_SUB_FUNCTION_SHIFT)
|
|
|
|
|
|
|
|
/* SWSCI: Get BIOS Data (GBDA) */
|
|
|
|
#define SWSCI_GBDA 4
|
|
|
|
#define SWSCI_GBDA_SUPPORTED_CALLS SWSCI_FUNCTION_CODE(SWSCI_GBDA, 0)
|
|
|
|
#define SWSCI_GBDA_REQUESTED_CALLBACKS SWSCI_FUNCTION_CODE(SWSCI_GBDA, 1)
|
|
|
|
#define SWSCI_GBDA_BOOT_DISPLAY_PREF SWSCI_FUNCTION_CODE(SWSCI_GBDA, 4)
|
|
|
|
#define SWSCI_GBDA_PANEL_DETAILS SWSCI_FUNCTION_CODE(SWSCI_GBDA, 5)
|
|
|
|
#define SWSCI_GBDA_TV_STANDARD SWSCI_FUNCTION_CODE(SWSCI_GBDA, 6)
|
|
|
|
#define SWSCI_GBDA_INTERNAL_GRAPHICS SWSCI_FUNCTION_CODE(SWSCI_GBDA, 7)
|
|
|
|
#define SWSCI_GBDA_SPREAD_SPECTRUM SWSCI_FUNCTION_CODE(SWSCI_GBDA, 10)
|
|
|
|
|
|
|
|
/* SWSCI: System BIOS Callbacks (SBCB) */
|
|
|
|
#define SWSCI_SBCB 6
|
|
|
|
#define SWSCI_SBCB_SUPPORTED_CALLBACKS SWSCI_FUNCTION_CODE(SWSCI_SBCB, 0)
|
|
|
|
#define SWSCI_SBCB_INIT_COMPLETION SWSCI_FUNCTION_CODE(SWSCI_SBCB, 1)
|
|
|
|
#define SWSCI_SBCB_PRE_HIRES_SET_MODE SWSCI_FUNCTION_CODE(SWSCI_SBCB, 3)
|
|
|
|
#define SWSCI_SBCB_POST_HIRES_SET_MODE SWSCI_FUNCTION_CODE(SWSCI_SBCB, 4)
|
|
|
|
#define SWSCI_SBCB_DISPLAY_SWITCH SWSCI_FUNCTION_CODE(SWSCI_SBCB, 5)
|
|
|
|
#define SWSCI_SBCB_SET_TV_FORMAT SWSCI_FUNCTION_CODE(SWSCI_SBCB, 6)
|
|
|
|
#define SWSCI_SBCB_ADAPTER_POWER_STATE SWSCI_FUNCTION_CODE(SWSCI_SBCB, 7)
|
|
|
|
#define SWSCI_SBCB_DISPLAY_POWER_STATE SWSCI_FUNCTION_CODE(SWSCI_SBCB, 8)
|
|
|
|
#define SWSCI_SBCB_SET_BOOT_DISPLAY SWSCI_FUNCTION_CODE(SWSCI_SBCB, 9)
|
|
|
|
#define SWSCI_SBCB_SET_PANEL_DETAILS SWSCI_FUNCTION_CODE(SWSCI_SBCB, 10)
|
|
|
|
#define SWSCI_SBCB_SET_INTERNAL_GFX SWSCI_FUNCTION_CODE(SWSCI_SBCB, 11)
|
|
|
|
#define SWSCI_SBCB_POST_HIRES_TO_DOS_FS SWSCI_FUNCTION_CODE(SWSCI_SBCB, 16)
|
|
|
|
#define SWSCI_SBCB_SUSPEND_RESUME SWSCI_FUNCTION_CODE(SWSCI_SBCB, 17)
|
|
|
|
#define SWSCI_SBCB_SET_SPREAD_SPECTRUM SWSCI_FUNCTION_CODE(SWSCI_SBCB, 18)
|
|
|
|
#define SWSCI_SBCB_POST_VBE_PM SWSCI_FUNCTION_CODE(SWSCI_SBCB, 19)
|
|
|
|
#define SWSCI_SBCB_ENABLE_DISABLE_AUDIO SWSCI_FUNCTION_CODE(SWSCI_SBCB, 21)
|
|
|
|
|
2014-01-31 21:49:08 +08:00
|
|
|
#define MAX_DSLP 1500
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static int swsci(struct drm_i915_private *dev_priv,
|
|
|
|
u32 function, u32 parm, u32 *parm_out)
|
2013-09-02 15:38:59 +08:00
|
|
|
{
|
2015-10-13 05:12:57 +08:00
|
|
|
struct opregion_swsci *swsci = dev_priv->opregion.swsci;
|
2021-01-28 21:31:23 +08:00
|
|
|
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
2013-09-02 15:38:59 +08:00
|
|
|
u32 main_function, sub_function, scic;
|
2016-04-15 17:03:39 +08:00
|
|
|
u16 swsci_val;
|
2013-09-02 15:38:59 +08:00
|
|
|
u32 dslp;
|
|
|
|
|
|
|
|
if (!swsci)
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
main_function = (function & SWSCI_SCIC_MAIN_FUNCTION_MASK) >>
|
|
|
|
SWSCI_SCIC_MAIN_FUNCTION_SHIFT;
|
|
|
|
sub_function = (function & SWSCI_SCIC_SUB_FUNCTION_MASK) >>
|
|
|
|
SWSCI_SCIC_SUB_FUNCTION_SHIFT;
|
|
|
|
|
|
|
|
/* Check if we can call the function. See swsci_setup for details. */
|
|
|
|
if (main_function == SWSCI_SBCB) {
|
|
|
|
if ((dev_priv->opregion.swsci_sbcb_sub_functions &
|
|
|
|
(1 << sub_function)) == 0)
|
|
|
|
return -EINVAL;
|
|
|
|
} else if (main_function == SWSCI_GBDA) {
|
|
|
|
if ((dev_priv->opregion.swsci_gbda_sub_functions &
|
|
|
|
(1 << sub_function)) == 0)
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Driver sleep timeout in ms. */
|
2015-10-13 05:12:57 +08:00
|
|
|
dslp = swsci->dslp;
|
2013-09-02 15:38:59 +08:00
|
|
|
if (!dslp) {
|
2013-10-10 03:39:57 +08:00
|
|
|
/* The spec says 2ms should be the default, but it's too small
|
|
|
|
* for some machines. */
|
|
|
|
dslp = 50;
|
2014-01-31 21:49:08 +08:00
|
|
|
} else if (dslp > MAX_DSLP) {
|
2013-09-02 15:38:59 +08:00
|
|
|
/* Hey bios, trust must be earned. */
|
2014-01-31 21:49:08 +08:00
|
|
|
DRM_INFO_ONCE("ACPI BIOS requests an excessive sleep of %u ms, "
|
|
|
|
"using %u ms instead\n", dslp, MAX_DSLP);
|
|
|
|
dslp = MAX_DSLP;
|
2013-09-02 15:38:59 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* The spec tells us to do this, but we are the only user... */
|
2015-10-13 05:12:57 +08:00
|
|
|
scic = swsci->scic;
|
2013-09-02 15:38:59 +08:00
|
|
|
if (scic & SWSCI_SCIC_INDICATOR) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "SWSCI request already in progress\n");
|
2013-09-02 15:38:59 +08:00
|
|
|
return -EBUSY;
|
|
|
|
}
|
|
|
|
|
|
|
|
scic = function | SWSCI_SCIC_INDICATOR;
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
swsci->parm = parm;
|
|
|
|
swsci->scic = scic;
|
2013-09-02 15:38:59 +08:00
|
|
|
|
|
|
|
/* Ensure SCI event is selected and event trigger is cleared. */
|
2016-05-23 22:08:09 +08:00
|
|
|
pci_read_config_word(pdev, SWSCI, &swsci_val);
|
2016-04-15 17:03:39 +08:00
|
|
|
if (!(swsci_val & SWSCI_SCISEL) || (swsci_val & SWSCI_GSSCIE)) {
|
|
|
|
swsci_val |= SWSCI_SCISEL;
|
|
|
|
swsci_val &= ~SWSCI_GSSCIE;
|
2016-05-23 22:08:09 +08:00
|
|
|
pci_write_config_word(pdev, SWSCI, swsci_val);
|
2013-09-02 15:38:59 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Use event trigger to tell bios to check the mail. */
|
2016-04-15 17:03:39 +08:00
|
|
|
swsci_val |= SWSCI_GSSCIE;
|
2016-05-23 22:08:09 +08:00
|
|
|
pci_write_config_word(pdev, SWSCI, swsci_val);
|
2013-09-02 15:38:59 +08:00
|
|
|
|
|
|
|
/* Poll for the result. */
|
2015-10-13 05:12:57 +08:00
|
|
|
#define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0)
|
2013-09-02 15:38:59 +08:00
|
|
|
if (wait_for(C, dslp)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "SWSCI request timed out\n");
|
2013-09-02 15:38:59 +08:00
|
|
|
return -ETIMEDOUT;
|
|
|
|
}
|
|
|
|
|
|
|
|
scic = (scic & SWSCI_SCIC_EXIT_STATUS_MASK) >>
|
|
|
|
SWSCI_SCIC_EXIT_STATUS_SHIFT;
|
|
|
|
|
|
|
|
/* Note: scic == 0 is an error! */
|
|
|
|
if (scic != SWSCI_SCIC_EXIT_STATUS_SUCCESS) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "SWSCI request error %u\n", scic);
|
2013-09-02 15:38:59 +08:00
|
|
|
return -EIO;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (parm_out)
|
2015-10-13 05:12:57 +08:00
|
|
|
*parm_out = swsci->parm;
|
2013-09-02 15:38:59 +08:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
#undef C
|
|
|
|
}
|
|
|
|
|
2013-08-31 00:40:30 +08:00
|
|
|
#define DISPLAY_TYPE_CRT 0
|
|
|
|
#define DISPLAY_TYPE_TV 1
|
|
|
|
#define DISPLAY_TYPE_EXTERNAL_FLAT_PANEL 2
|
|
|
|
#define DISPLAY_TYPE_INTERNAL_FLAT_PANEL 3
|
|
|
|
|
|
|
|
int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
|
|
|
|
bool enable)
|
|
|
|
{
|
2016-05-23 22:08:09 +08:00
|
|
|
struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
|
2013-08-31 00:40:30 +08:00
|
|
|
u32 parm = 0;
|
|
|
|
u32 type = 0;
|
|
|
|
u32 port;
|
|
|
|
|
|
|
|
/* don't care about old stuff for now */
|
2016-05-23 22:08:09 +08:00
|
|
|
if (!HAS_DDI(dev_priv))
|
2013-08-31 00:40:30 +08:00
|
|
|
return 0;
|
|
|
|
|
2015-10-02 00:53:49 +08:00
|
|
|
if (intel_encoder->type == INTEL_OUTPUT_DSI)
|
|
|
|
port = 0;
|
|
|
|
else
|
2017-10-28 03:31:25 +08:00
|
|
|
port = intel_encoder->port;
|
2015-10-02 00:53:49 +08:00
|
|
|
|
|
|
|
if (port == PORT_E) {
|
2013-08-31 00:40:30 +08:00
|
|
|
port = 0;
|
|
|
|
} else {
|
|
|
|
parm |= 1 << port;
|
|
|
|
port++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!enable)
|
|
|
|
parm |= 4 << 8;
|
|
|
|
|
|
|
|
switch (intel_encoder->type) {
|
|
|
|
case INTEL_OUTPUT_ANALOG:
|
|
|
|
type = DISPLAY_TYPE_CRT;
|
|
|
|
break;
|
2017-10-28 03:31:24 +08:00
|
|
|
case INTEL_OUTPUT_DDI:
|
2016-06-23 02:57:06 +08:00
|
|
|
case INTEL_OUTPUT_DP:
|
2013-08-31 00:40:30 +08:00
|
|
|
case INTEL_OUTPUT_HDMI:
|
2014-05-02 12:02:48 +08:00
|
|
|
case INTEL_OUTPUT_DP_MST:
|
2013-08-31 00:40:30 +08:00
|
|
|
type = DISPLAY_TYPE_EXTERNAL_FLAT_PANEL;
|
|
|
|
break;
|
|
|
|
case INTEL_OUTPUT_EDP:
|
2015-10-02 00:53:49 +08:00
|
|
|
case INTEL_OUTPUT_DSI:
|
2013-08-31 00:40:30 +08:00
|
|
|
type = DISPLAY_TYPE_INTERNAL_FLAT_PANEL;
|
|
|
|
break;
|
|
|
|
default:
|
drm/i915/display: Make WARN* drm specific where drm_device ptr is available
drm specific WARN* calls include device information in the
backtrace, so we know what device the warnings originate from.
Covert all the calls of WARN* with device specific drm_WARN*
variants in functions where drm_device or drm_i915_private struct
pointer is readily available.
The conversion was done automatically with below coccinelle semantic
patch. checkpatch errors/warnings are fixed manually.
@rule1@
identifier func, T;
@@
func(...) {
...
struct drm_device *T = ...;
<...
(
-WARN(
+drm_WARN(T,
...)
|
-WARN_ON(
+drm_WARN_ON(T,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(T,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(T,
...)
)
...>
}
@rule2@
identifier func, T;
@@
func(struct drm_device *T,...) {
<...
(
-WARN(
+drm_WARN(T,
...)
|
-WARN_ON(
+drm_WARN_ON(T,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(T,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(T,
...)
)
...>
}
@rule3@
identifier func, T;
@@
func(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-WARN(
+drm_WARN(&T->drm,
...)
|
-WARN_ON(
+drm_WARN_ON(&T->drm,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(&T->drm,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(&T->drm,
...)
)
...+>
}
@rule4@
identifier func, T;
@@
func(struct drm_i915_private *T,...) {
<+...
(
-WARN(
+drm_WARN(&T->drm,
...)
|
-WARN_ON(
+drm_WARN_ON(&T->drm,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(&T->drm,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(&T->drm,
...)
)
...+>
}
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200128181603.27767-20-pankaj.laxminarayan.bharadiya@intel.com
2020-01-29 02:16:01 +08:00
|
|
|
drm_WARN_ONCE(&dev_priv->drm, 1,
|
|
|
|
"unsupported intel_encoder type %d\n",
|
|
|
|
intel_encoder->type);
|
2013-08-31 00:40:30 +08:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
parm |= type << (16 + port * 3);
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
return swsci(dev_priv, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
|
2013-08-31 00:40:30 +08:00
|
|
|
}
|
|
|
|
|
2013-08-31 00:40:31 +08:00
|
|
|
static const struct {
|
|
|
|
pci_power_t pci_power_state;
|
|
|
|
u32 parm;
|
|
|
|
} power_state_map[] = {
|
|
|
|
{ PCI_D0, 0x00 },
|
|
|
|
{ PCI_D1, 0x01 },
|
|
|
|
{ PCI_D2, 0x02 },
|
|
|
|
{ PCI_D3hot, 0x04 },
|
|
|
|
{ PCI_D3cold, 0x04 },
|
|
|
|
};
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
|
|
|
|
pci_power_t state)
|
2013-08-31 00:40:31 +08:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
if (!HAS_DDI(dev_priv))
|
2013-08-31 00:40:31 +08:00
|
|
|
return 0;
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(power_state_map); i++) {
|
|
|
|
if (state == power_state_map[i].pci_power_state)
|
2016-05-23 22:08:09 +08:00
|
|
|
return swsci(dev_priv, SWSCI_SBCB_ADAPTER_POWER_STATE,
|
2013-08-31 00:40:31 +08:00
|
|
|
power_state_map[i].parm, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_backlight(struct drm_i915_private *dev_priv, u32 bclp)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
2015-12-16 18:48:16 +08:00
|
|
|
struct intel_connector *connector;
|
2017-03-01 17:52:23 +08:00
|
|
|
struct drm_connector_list_iter conn_iter;
|
2015-10-13 05:12:57 +08:00
|
|
|
struct opregion_asle *asle = dev_priv->opregion.asle;
|
2016-07-05 17:40:23 +08:00
|
|
|
struct drm_device *dev = &dev_priv->drm;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "bclp = 0x%08x\n", bclp);
|
2012-10-01 19:25:30 +08:00
|
|
|
|
2015-06-16 22:27:50 +08:00
|
|
|
if (acpi_video_get_backlight_type() == acpi_backlight_native) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"opregion backlight request ignored\n");
|
2014-07-07 15:43:51 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-08-06 02:37:25 +08:00
|
|
|
if (!(bclp & ASLE_BCLP_VALID))
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_BACKLIGHT_FAILED;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
bclp &= ASLE_BCLP_MSK;
|
2010-08-22 20:18:16 +08:00
|
|
|
if (bclp > 255)
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_BACKLIGHT_FAILED;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-11-20 01:10:12 +08:00
|
|
|
drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
|
2013-11-08 22:48:55 +08:00
|
|
|
|
2013-11-01 00:55:49 +08:00
|
|
|
/*
|
2013-11-08 22:48:55 +08:00
|
|
|
* Update backlight on all connectors that support backlight (usually
|
|
|
|
* only one).
|
2013-11-01 00:55:49 +08:00
|
|
|
*/
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm, "updating opregion backlight %d/255\n",
|
|
|
|
bclp);
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_begin(dev, &conn_iter);
|
|
|
|
for_each_intel_connector_iter(connector, &conn_iter)
|
2021-08-25 19:06:51 +08:00
|
|
|
intel_backlight_set_acpi(connector->base.state, bclp, 255);
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_end(&conn_iter);
|
2015-10-13 05:12:57 +08:00
|
|
|
asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-11-20 01:10:12 +08:00
|
|
|
drm_modeset_unlock(&dev->mode_config.connection_mutex);
|
2013-11-01 00:55:49 +08:00
|
|
|
|
2013-11-08 22:48:55 +08:00
|
|
|
|
|
|
|
return 0;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_als_illum(struct drm_i915_private *dev_priv, u32 alsi)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
|
|
|
/* alsi is the current ALS reading in lux. 0 indicates below sensor
|
|
|
|
range, 0xffff indicates above sensor range. 1-0xfffe are valid */
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "Illum is not supported\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_ALS_ILLUM_FAILED;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_pwm_freq(struct drm_i915_private *dev_priv, u32 pfmb)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "PWM freq is not supported\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_PWM_FREQ_FAILED;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_pfit(struct drm_i915_private *dev_priv, u32 pfit)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
|
|
|
/* Panel fitting is currently controlled by the X code, so this is a
|
|
|
|
noop until modesetting support works fully */
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "Pfit is not supported\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_PFIT_FAILED;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_supported_rotation_angles(struct drm_i915_private *dev_priv, u32 srot)
|
2013-09-17 22:14:11 +08:00
|
|
|
{
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "SROT is not supported\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_ROTATION_ANGLES_FAILED;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_button_array(struct drm_i915_private *dev_priv, u32 iuer)
|
2013-09-17 22:14:11 +08:00
|
|
|
{
|
|
|
|
if (!iuer)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (nothing)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
if (iuer & ASLE_IUER_ROTATION_LOCK_BTN)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (rotation lock)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
if (iuer & ASLE_IUER_VOLUME_DOWN_BTN)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (volume down)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
if (iuer & ASLE_IUER_VOLUME_UP_BTN)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (volume up)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
if (iuer & ASLE_IUER_WINDOWS_BTN)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (windows)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
if (iuer & ASLE_IUER_POWER_BTN)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Button array event is not supported (power)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
return ASLC_BUTTON_ARRAY_FAILED;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_convertible(struct drm_i915_private *dev_priv, u32 iuer)
|
2013-09-17 22:14:11 +08:00
|
|
|
{
|
|
|
|
if (iuer & ASLE_IUER_CONVERTIBLE)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Convertible is not supported (clamshell)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
else
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Convertible is not supported (slate)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
return ASLC_CONVERTIBLE_FAILED;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_set_docking(struct drm_i915_private *dev_priv, u32 iuer)
|
2013-09-17 22:14:11 +08:00
|
|
|
{
|
|
|
|
if (iuer & ASLE_IUER_DOCKING)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "Docking is not supported (docked)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
else
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"Docking is not supported (undocked)\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
return ASLC_DOCKING_FAILED;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static u32 asle_isct_state(struct drm_i915_private *dev_priv)
|
2013-09-17 22:14:11 +08:00
|
|
|
{
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "ISCT is not supported\n");
|
2013-09-17 22:14:11 +08:00
|
|
|
return ASLC_ISCT_STATE_FAILED;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2013-11-01 00:55:48 +08:00
|
|
|
static void asle_work(struct work_struct *work)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
2013-11-01 00:55:48 +08:00
|
|
|
struct intel_opregion *opregion =
|
|
|
|
container_of(work, struct intel_opregion, asle_work);
|
|
|
|
struct drm_i915_private *dev_priv =
|
|
|
|
container_of(opregion, struct drm_i915_private, opregion);
|
2015-10-13 05:12:57 +08:00
|
|
|
struct opregion_asle *asle = dev_priv->opregion.asle;
|
2013-09-17 22:14:11 +08:00
|
|
|
u32 aslc_stat = 0;
|
|
|
|
u32 aslc_req;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
|
|
|
if (!asle)
|
|
|
|
return;
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
aslc_req = asle->aslc;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
if (!(aslc_req & ASLC_REQ_MSK)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"No request on ASLC interrupt 0x%08x\n", aslc_req);
|
2008-08-06 02:37:25 +08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
if (aslc_req & ASLC_SET_ALS_ILLUM)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_als_illum(dev_priv, asle->alsi);
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
if (aslc_req & ASLC_SET_BACKLIGHT)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_backlight(dev_priv, asle->bclp);
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
if (aslc_req & ASLC_SET_PFIT)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_pfit(dev_priv, asle->pfit);
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
if (aslc_req & ASLC_SET_PWM_FREQ)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_pwm_freq(dev_priv, asle->pfmb);
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
if (aslc_req & ASLC_SUPPORTED_ROTATION_ANGLES)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_supported_rotation_angles(dev_priv,
|
2015-10-13 05:12:57 +08:00
|
|
|
asle->srot);
|
2013-09-17 22:14:11 +08:00
|
|
|
|
|
|
|
if (aslc_req & ASLC_BUTTON_ARRAY)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_button_array(dev_priv, asle->iuer);
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
if (aslc_req & ASLC_CONVERTIBLE_INDICATOR)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_convertible(dev_priv, asle->iuer);
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
if (aslc_req & ASLC_DOCKING_INDICATOR)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_set_docking(dev_priv, asle->iuer);
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2013-09-17 22:14:11 +08:00
|
|
|
if (aslc_req & ASLC_ISCT_STATE_CHANGE)
|
2016-05-23 22:08:09 +08:00
|
|
|
aslc_stat |= asle_isct_state(dev_priv);
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
asle->aslc = aslc_stat;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2016-05-06 21:48:28 +08:00
|
|
|
void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
|
2013-11-01 00:55:48 +08:00
|
|
|
{
|
|
|
|
if (dev_priv->opregion.asle)
|
|
|
|
schedule_work(&dev_priv->opregion.asle_work);
|
|
|
|
}
|
|
|
|
|
2008-08-06 02:37:25 +08:00
|
|
|
#define ACPI_EV_DISPLAY_SWITCH (1<<0)
|
|
|
|
#define ACPI_EV_LID (1<<1)
|
|
|
|
#define ACPI_EV_DOCK (1<<2)
|
|
|
|
|
2018-06-13 19:39:27 +08:00
|
|
|
/*
|
|
|
|
* The only video events relevant to opregion are 0x80. These indicate either a
|
|
|
|
* docking event, lid switch or display switch request. In Linux, these are
|
|
|
|
* handled by the dock, button and video drivers.
|
|
|
|
*/
|
2008-12-19 04:18:47 +08:00
|
|
|
static int intel_opregion_video_event(struct notifier_block *nb,
|
|
|
|
unsigned long val, void *data)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
2018-06-13 19:39:27 +08:00
|
|
|
struct intel_opregion *opregion = container_of(nb, struct intel_opregion,
|
|
|
|
acpi_notifier);
|
2011-07-13 06:30:52 +08:00
|
|
|
struct acpi_bus_event *event = data;
|
2015-10-13 05:12:57 +08:00
|
|
|
struct opregion_acpi *acpi;
|
2011-07-13 06:30:52 +08:00
|
|
|
int ret = NOTIFY_OK;
|
|
|
|
|
|
|
|
if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0)
|
|
|
|
return NOTIFY_DONE;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2018-06-13 19:39:27 +08:00
|
|
|
acpi = opregion->acpi;
|
2011-07-13 06:30:52 +08:00
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
if (event->type == 0x80 && ((acpi->cevt & 1) == 0))
|
2011-07-13 06:30:52 +08:00
|
|
|
ret = NOTIFY_BAD;
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
acpi->csts = 0;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2011-07-13 06:30:52 +08:00
|
|
|
return ret;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2009-03-20 05:35:39 +08:00
|
|
|
/*
|
|
|
|
* Initialise the DIDL field in opregion. This passes a list of devices to
|
|
|
|
* the firmware. Values are defined by section B.4.2 of the ACPI specification
|
|
|
|
* (version 3)
|
|
|
|
*/
|
|
|
|
|
2015-07-02 22:43:24 +08:00
|
|
|
static void set_did(struct intel_opregion *opregion, int i, u32 val)
|
|
|
|
{
|
|
|
|
if (i < ARRAY_SIZE(opregion->acpi->didl)) {
|
2015-10-13 05:12:57 +08:00
|
|
|
opregion->acpi->didl[i] = val;
|
2015-07-02 22:43:24 +08:00
|
|
|
} else {
|
|
|
|
i -= ARRAY_SIZE(opregion->acpi->didl);
|
|
|
|
|
|
|
|
if (WARN_ON(i >= ARRAY_SIZE(opregion->acpi->did2)))
|
|
|
|
return;
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
opregion->acpi->did2[i] = val;
|
2015-07-02 22:43:24 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static void intel_didl_outputs(struct drm_i915_private *dev_priv)
|
2009-03-20 05:35:39 +08:00
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
struct intel_connector *connector;
|
2017-03-01 17:52:23 +08:00
|
|
|
struct drm_connector_list_iter conn_iter;
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
int i = 0, max_outputs;
|
2010-03-29 15:12:16 +08:00
|
|
|
|
2015-07-02 22:43:25 +08:00
|
|
|
/*
|
|
|
|
* In theory, did2, the extended didl, gets added at opregion version
|
|
|
|
* 3.0. In practice, however, we're supposed to set it for earlier
|
|
|
|
* versions as well, since a BIOS that doesn't understand did2 should
|
|
|
|
* not look at it anyway. Use a variable so we can tweak this if a need
|
|
|
|
* arises later.
|
|
|
|
*/
|
|
|
|
max_outputs = ARRAY_SIZE(opregion->acpi->didl) +
|
|
|
|
ARRAY_SIZE(opregion->acpi->did2);
|
|
|
|
|
2019-12-21 04:03:51 +08:00
|
|
|
intel_acpi_device_id_update(dev_priv);
|
|
|
|
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
|
|
|
|
for_each_intel_connector_iter(connector, &conn_iter) {
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
if (i < max_outputs)
|
2019-12-21 04:03:51 +08:00
|
|
|
set_did(opregion, i, connector->acpi_device_id);
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
i++;
|
2010-03-29 15:12:16 +08:00
|
|
|
}
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_end(&conn_iter);
|
2010-03-29 15:12:16 +08:00
|
|
|
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm, "%d outputs detected\n", i);
|
2015-07-02 22:43:25 +08:00
|
|
|
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
if (i > max_outputs)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_err(&dev_priv->drm,
|
|
|
|
"More than %d outputs in connector list\n",
|
|
|
|
max_outputs);
|
drm/i915: make i915 the source of acpi device ids for _DOD
The graphics driver is supposed to define the DIDL, which are used for
_DOD, not the BIOS. Restore that behaviour.
This is basically a revert of
commit 3143751ff51a163b77f7efd389043e038f3e008e
Author: Zhang Rui <rui.zhang@intel.com>
Date: Mon Mar 29 15:12:16 2010 +0800
drm/i915: set DIDL using the ACPI video output device _ADR method return.
which went out of its way to cater to a specific BIOS, setting up DIDL
based on _ADR method. Perhaps that approach worked on that specific
machine, but on the machines I checked the _ADR method invents the
device identifiers out of thin air if DIDL has not been set. The source
for _ADR is also supposed to be the DIDL set by the driver, not the
other way around.
With this, we'll also limit the number of outputs to what the driver
actually has.
A side effect of this change is that the DIDL, and by proxy CADL, will
be initialized in the order of the connector list. That, in turn, has
internal panels in front, ensuring they're included in the DIDL and CADL
lists. Hopefully this ensures the BIOS does not block backlight hotkey
events, thinking the internal panel is off.
v2: do not set ACPI_DEVICE_ID_SCHEME in the device id (Peter Wu)
v3: Rebase
Cc: Peter Wu <peter@lekensteyn.nl>
Cc: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Cc: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Cc: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Rainer Koenig <Rainer.Koenig@ts.fujitsu.com>
Tested-by: Paolo Stivanin <paolostivanin@fastmail.fm>
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Reviewed-and-tested-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/9660d29cf310c17bbf4d58c0e09d5b047446e2d5.1479295490.git.jani.nikula@intel.com
2016-11-16 19:29:56 +08:00
|
|
|
|
2015-07-02 22:43:25 +08:00
|
|
|
/* If fewer than max outputs, the list must be null terminated */
|
|
|
|
if (i < max_outputs)
|
2015-07-02 22:43:24 +08:00
|
|
|
set_did(opregion, i, 0);
|
2009-03-20 05:35:39 +08:00
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static void intel_setup_cadls(struct drm_i915_private *dev_priv)
|
2012-06-26 06:36:24 +08:00
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
2016-11-16 19:29:57 +08:00
|
|
|
struct intel_connector *connector;
|
2017-03-01 17:52:23 +08:00
|
|
|
struct drm_connector_list_iter conn_iter;
|
2012-06-26 06:36:24 +08:00
|
|
|
int i = 0;
|
2016-11-16 19:29:57 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Initialize the CADL field from the connector device ids. This is
|
|
|
|
* essentially the same as copying from the DIDL. Technically, this is
|
|
|
|
* not always correct as display outputs may exist, but not active. This
|
|
|
|
* initialization is necessary for some Clevo laptops that check this
|
|
|
|
* field before processing the brightness and display switching hotkeys.
|
|
|
|
*
|
|
|
|
* Note that internal panels should be at the front of the connector
|
|
|
|
* list already, ensuring they're not left out.
|
|
|
|
*/
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
|
|
|
|
for_each_intel_connector_iter(connector, &conn_iter) {
|
2016-11-16 19:29:57 +08:00
|
|
|
if (i >= ARRAY_SIZE(opregion->acpi->cadl))
|
|
|
|
break;
|
|
|
|
opregion->acpi->cadl[i++] = connector->acpi_device_id;
|
|
|
|
}
|
2017-03-01 17:52:23 +08:00
|
|
|
drm_connector_list_iter_end(&conn_iter);
|
2016-11-16 19:29:57 +08:00
|
|
|
|
|
|
|
/* If fewer than 8 active devices, the list must be null terminated */
|
|
|
|
if (i < ARRAY_SIZE(opregion->acpi->cadl))
|
|
|
|
opregion->acpi->cadl[i] = 0;
|
2012-06-26 06:36:24 +08:00
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
static void swsci_setup(struct drm_i915_private *dev_priv)
|
2013-09-02 15:38:59 +08:00
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
|
|
|
bool requested_callbacks = false;
|
|
|
|
u32 tmp;
|
|
|
|
|
|
|
|
/* Sub-function code 0 is okay, let's allow them. */
|
|
|
|
opregion->swsci_gbda_sub_functions = 1;
|
|
|
|
opregion->swsci_sbcb_sub_functions = 1;
|
|
|
|
|
|
|
|
/* We use GBDA to ask for supported GBDA calls. */
|
2016-05-23 22:08:09 +08:00
|
|
|
if (swsci(dev_priv, SWSCI_GBDA_SUPPORTED_CALLS, 0, &tmp) == 0) {
|
2013-09-02 15:38:59 +08:00
|
|
|
/* make the bits match the sub-function codes */
|
|
|
|
tmp <<= 1;
|
|
|
|
opregion->swsci_gbda_sub_functions |= tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We also use GBDA to ask for _requested_ SBCB callbacks. The driver
|
|
|
|
* must not call interfaces that are not specifically requested by the
|
|
|
|
* bios.
|
|
|
|
*/
|
2016-05-23 22:08:09 +08:00
|
|
|
if (swsci(dev_priv, SWSCI_GBDA_REQUESTED_CALLBACKS, 0, &tmp) == 0) {
|
2013-09-02 15:38:59 +08:00
|
|
|
/* here, the bits already match sub-function codes */
|
|
|
|
opregion->swsci_sbcb_sub_functions |= tmp;
|
|
|
|
requested_callbacks = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* But we use SBCB to ask for _supported_ SBCB calls. This does not mean
|
|
|
|
* the callback is _requested_. But we still can't call interfaces that
|
|
|
|
* are not requested.
|
|
|
|
*/
|
2016-05-23 22:08:09 +08:00
|
|
|
if (swsci(dev_priv, SWSCI_SBCB_SUPPORTED_CALLBACKS, 0, &tmp) == 0) {
|
2013-09-02 15:38:59 +08:00
|
|
|
/* make the bits match the sub-function codes */
|
|
|
|
u32 low = tmp & 0x7ff;
|
|
|
|
u32 high = tmp & ~0xfff; /* bit 11 is reserved */
|
|
|
|
tmp = (high << 4) | (low << 1) | 1;
|
|
|
|
|
|
|
|
/* best guess what to do with supported wrt requested */
|
|
|
|
if (requested_callbacks) {
|
|
|
|
u32 req = opregion->swsci_sbcb_sub_functions;
|
|
|
|
if ((req & tmp) != req)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"SWSCI BIOS requested (%08x) SBCB callbacks that are not supported (%08x)\n",
|
|
|
|
req, tmp);
|
2013-09-02 15:38:59 +08:00
|
|
|
/* XXX: for now, trust the requested callbacks */
|
|
|
|
/* opregion->swsci_sbcb_sub_functions &= tmp; */
|
|
|
|
} else {
|
|
|
|
opregion->swsci_sbcb_sub_functions |= tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm,
|
|
|
|
"SWSCI GBDA callbacks %08x, SBCB callbacks %08x\n",
|
|
|
|
opregion->swsci_gbda_sub_functions,
|
|
|
|
opregion->swsci_sbcb_sub_functions);
|
2013-09-02 15:38:59 +08:00
|
|
|
}
|
2010-08-19 23:09:23 +08:00
|
|
|
|
2015-12-14 18:50:46 +08:00
|
|
|
static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
|
|
|
|
{
|
|
|
|
DRM_DEBUG_KMS("Falling back to manually reading VBT from "
|
|
|
|
"VBIOS ROM for %s\n", id->ident);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const struct dmi_system_id intel_no_opregion_vbt[] = {
|
|
|
|
{
|
|
|
|
.callback = intel_no_opregion_vbt_callback,
|
|
|
|
.ident = "ThinkCentre A57",
|
|
|
|
.matches = {
|
|
|
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
|
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
2017-08-17 19:52:09 +08:00
|
|
|
static int intel_load_vbt_firmware(struct drm_i915_private *dev_priv)
|
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
|
|
|
const struct firmware *fw = NULL;
|
2020-06-18 23:04:02 +08:00
|
|
|
const char *name = dev_priv->params.vbt_firmware;
|
2017-08-17 19:52:09 +08:00
|
|
|
int ret;
|
|
|
|
|
|
|
|
if (!name || !*name)
|
|
|
|
return -ENOENT;
|
|
|
|
|
2021-01-28 21:31:23 +08:00
|
|
|
ret = request_firmware(&fw, name, dev_priv->drm.dev);
|
2017-08-17 19:52:09 +08:00
|
|
|
if (ret) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_err(&dev_priv->drm,
|
|
|
|
"Requesting VBT firmware \"%s\" failed (%d)\n",
|
|
|
|
name, ret);
|
2017-08-17 19:52:09 +08:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (intel_bios_is_valid_vbt(fw->data, fw->size)) {
|
|
|
|
opregion->vbt_firmware = kmemdup(fw->data, fw->size, GFP_KERNEL);
|
|
|
|
if (opregion->vbt_firmware) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Found valid VBT firmware \"%s\"\n", name);
|
2017-08-17 19:52:09 +08:00
|
|
|
opregion->vbt = opregion->vbt_firmware;
|
|
|
|
opregion->vbt_size = fw->size;
|
|
|
|
ret = 0;
|
|
|
|
} else {
|
|
|
|
ret = -ENOMEM;
|
|
|
|
}
|
|
|
|
} else {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm, "Invalid VBT firmware \"%s\"\n",
|
|
|
|
name);
|
2017-08-17 19:52:09 +08:00
|
|
|
ret = -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
release_firmware(fw);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
int intel_opregion_setup(struct drm_i915_private *dev_priv)
|
2008-08-06 02:37:25 +08:00
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
2021-01-28 21:31:23 +08:00
|
|
|
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
2008-08-06 02:37:25 +08:00
|
|
|
u32 asls, mboxes;
|
2012-04-17 05:07:42 +08:00
|
|
|
char buf[sizeof(OPREGION_SIGNATURE)];
|
2008-08-06 02:37:25 +08:00
|
|
|
int err = 0;
|
2015-10-13 05:12:57 +08:00
|
|
|
void *base;
|
2017-03-29 18:32:56 +08:00
|
|
|
const void *vbt;
|
|
|
|
u32 vbt_size;
|
2008-08-06 02:37:25 +08:00
|
|
|
|
2015-07-02 22:43:21 +08:00
|
|
|
BUILD_BUG_ON(sizeof(struct opregion_header) != 0x100);
|
|
|
|
BUILD_BUG_ON(sizeof(struct opregion_acpi) != 0x100);
|
|
|
|
BUILD_BUG_ON(sizeof(struct opregion_swsci) != 0x100);
|
|
|
|
BUILD_BUG_ON(sizeof(struct opregion_asle) != 0x100);
|
2015-12-14 18:50:45 +08:00
|
|
|
BUILD_BUG_ON(sizeof(struct opregion_asle_ext) != 0x400);
|
2015-07-02 22:43:21 +08:00
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
pci_read_config_dword(pdev, ASLS, &asls);
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "graphic opregion physical addr: 0x%x\n",
|
|
|
|
asls);
|
2008-08-06 02:37:25 +08:00
|
|
|
if (asls == 0) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "ACPI OpRegion not supported!\n");
|
2008-08-06 02:37:25 +08:00
|
|
|
return -ENOTSUPP;
|
|
|
|
}
|
|
|
|
|
2013-11-01 00:55:48 +08:00
|
|
|
INIT_WORK(&opregion->asle_work, asle_work);
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
base = memremap(asls, OPREGION_SIZE, MEMREMAP_WB);
|
2008-08-06 02:37:25 +08:00
|
|
|
if (!base)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
memcpy(buf, base, sizeof(buf));
|
2012-04-17 05:07:42 +08:00
|
|
|
|
|
|
|
if (memcmp(buf, OPREGION_SIGNATURE, 16)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "opregion signature mismatch\n");
|
2008-08-06 02:37:25 +08:00
|
|
|
err = -EINVAL;
|
|
|
|
goto err_out;
|
|
|
|
}
|
2010-08-19 23:09:23 +08:00
|
|
|
opregion->header = base;
|
2011-02-25 02:13:42 +08:00
|
|
|
opregion->lid_state = base + ACPI_CLID;
|
2011-01-17 03:37:30 +08:00
|
|
|
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "ACPI OpRegion version %u.%u.%u\n",
|
|
|
|
opregion->header->over.major,
|
|
|
|
opregion->header->over.minor,
|
|
|
|
opregion->header->over.revision);
|
2019-02-09 02:42:52 +08:00
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
mboxes = opregion->header->mboxes;
|
2008-08-06 02:37:25 +08:00
|
|
|
if (mboxes & MBOX_ACPI) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "Public ACPI methods supported\n");
|
2008-08-06 02:37:25 +08:00
|
|
|
opregion->acpi = base + OPREGION_ACPI_OFFSET;
|
drm/i915: opregion: set opregion chpd value to indicate the driver handles hotplug
According to both the old acpi_igd_opregion_spec_0.pdf and the newer
skl_opregion_rev0p5.pdf opregion specification documents, if a driver
handles hotplug events itself, it should set the opregion CHPD field to
1 to indicate this and the firmware should respond to this by no longer
sending ACPI 0x00 notification events on e.g. lid-state changes.
Specifically skl_opregion_rev0p5.pdf states thid in the documentation of
the CHPD word: "Re-enumeration trigger logic in System BIOS MUST be
disabled for all the Operating Systems supporting Hot-Plug
(e.g., Windows* Longhorn and above)." Note the MUST in there.
We ignore these notifications, so this should not be a problem but many
recent DSTDs seem to all have the same copy-pasted bug in the GNOT() AML
function which is used to send these notifications. Windows likely does not
hit this bug as it presumably correcty sets CHPD to 1.
Here is an example of the broken GNOT() method:
Method (GNOT, 2, NotSerialized)
{
...
CEVT = Arg0
CSTS = 0x03
If (((CHPD == Zero) && (Arg1 == Zero)))
{
If (((OSYS > 0x07D0) || (OSYS < 0x07D6)))
{
Notify (PCI0, Arg1)
}
Else
{
Notify (GFX0, Arg1)
}
}
...
Notice that the condition for the If is always true I believe that the
|| like needs to be an &&, but there is nothing we can do about this and
in my own DSDT archive 55 of the 93 DSDTs have this issue.
When the if is true the notification gets send to the PCI root instead
of only to the GFX0 device. This causes Linux to re-enumerate PCI devices
whenever the LID opens / closes, leading to unexpected messages in dmesg:
Suspend through lid close:
[ 313.598199] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3
[ 313.664453] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3
[ 313.737982] pci_bus 0000:01: Allocating resources
[ 313.738036] pcieport 0000:00:1c.0: bridge window [io 0x1000-0x0fff] to [bus 01] add_size 1000
[ 313.738051] pcieport 0000:00:1c.0: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 01] add_size 200000 add_align 100000
[ 313.738111] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0x91000000-0x911fffff 64bit pref]
[ 313.738128] pcieport 0000:00:1c.0: BAR 13: assigned [io 0x1000-0x1fff]
Resume:
[ 813.623894] pci 0000:00:03.0: [8086:22b8] type 00 class 0x048000
[ 813.623955] pci 0000:00:03.0: reg 0x10: [mem 0x00000000-0x003fffff]
[ 813.630477] pci 0000:00:03.0: BAR 0: assigned [mem 0x91c00000-0x91ffffff]
[ 854.579101] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3
And more importantly this re-enumeration races with suspend/resume causing
enumeration to not be complete when assert_isp_power_gated() from
drivers/gpu/drm/i915/display/intel_display_power.c runs. This causes
the !pci_dev_present(isp_ids) check in assert_isp_power_gated() to fail
making the condition for the WARN true, leading to:
[ 813.327886] ------------[ cut here ]------------
[ 813.327898] ISP not power gated
[ 813.328028] WARNING: CPU: 2 PID: 2317 at drivers/gpu/drm/i915/display/intel_display_power.c:4870 intel_display_print_error_state+0x2b98/0x3a80 [i915]
...
[ 813.328599] ---[ end trace f01e81b599596774 ]---
This commit fixes the unwanted ACPI notification on the PCI root device
by setting CHPD to 1, so that the broken if condition in the AML never
gets checked as notifications of type 0x00 are disabled altogether.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191212204828.191288-1-hdegoede@redhat.com
2019-12-13 04:48:28 +08:00
|
|
|
/*
|
|
|
|
* Indicate we handle monitor hotplug events ourselves so we do
|
|
|
|
* not need ACPI notifications for them. Disabling these avoids
|
|
|
|
* triggering the AML code doing the notifation, which may be
|
|
|
|
* broken as Windows also seems to disable these.
|
|
|
|
*/
|
|
|
|
opregion->acpi->chpd = 1;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (mboxes & MBOX_SWSCI) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "SWSCI supported\n");
|
2008-08-06 02:37:25 +08:00
|
|
|
opregion->swsci = base + OPREGION_SWSCI_OFFSET;
|
2016-05-23 22:08:09 +08:00
|
|
|
swsci_setup(dev_priv);
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
2015-12-14 18:50:45 +08:00
|
|
|
|
2008-08-06 02:37:25 +08:00
|
|
|
if (mboxes & MBOX_ASLE) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "ASLE supported\n");
|
2008-08-06 02:37:25 +08:00
|
|
|
opregion->asle = base + OPREGION_ASLE_OFFSET;
|
2013-04-29 18:02:51 +08:00
|
|
|
|
2015-10-13 05:12:57 +08:00
|
|
|
opregion->asle->ardy = ASLE_ARDY_NOT_READY;
|
2008-08-06 02:37:25 +08:00
|
|
|
}
|
|
|
|
|
2015-12-14 18:50:45 +08:00
|
|
|
if (mboxes & MBOX_ASLE_EXT)
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg(&dev_priv->drm, "ASLE extension supported\n");
|
2015-12-14 18:50:45 +08:00
|
|
|
|
2017-08-17 19:52:09 +08:00
|
|
|
if (intel_load_vbt_firmware(dev_priv) == 0)
|
|
|
|
goto out;
|
|
|
|
|
2017-03-29 18:32:55 +08:00
|
|
|
if (dmi_check_system(intel_no_opregion_vbt))
|
|
|
|
goto out;
|
|
|
|
|
2019-02-09 02:42:52 +08:00
|
|
|
if (opregion->header->over.major >= 2 && opregion->asle &&
|
2017-03-29 18:32:55 +08:00
|
|
|
opregion->asle->rvda && opregion->asle->rvds) {
|
2019-02-09 02:42:53 +08:00
|
|
|
resource_size_t rvda = opregion->asle->rvda;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* opregion 2.0: rvda is the physical VBT address.
|
|
|
|
*
|
|
|
|
* opregion 2.1+: rvda is unsigned, relative offset from
|
|
|
|
* opregion base, and should never point within opregion.
|
|
|
|
*/
|
|
|
|
if (opregion->header->over.major > 2 ||
|
|
|
|
opregion->header->over.minor >= 1) {
|
drm/i915/display: Make WARN* drm specific where drm_device ptr is available
drm specific WARN* calls include device information in the
backtrace, so we know what device the warnings originate from.
Covert all the calls of WARN* with device specific drm_WARN*
variants in functions where drm_device or drm_i915_private struct
pointer is readily available.
The conversion was done automatically with below coccinelle semantic
patch. checkpatch errors/warnings are fixed manually.
@rule1@
identifier func, T;
@@
func(...) {
...
struct drm_device *T = ...;
<...
(
-WARN(
+drm_WARN(T,
...)
|
-WARN_ON(
+drm_WARN_ON(T,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(T,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(T,
...)
)
...>
}
@rule2@
identifier func, T;
@@
func(struct drm_device *T,...) {
<...
(
-WARN(
+drm_WARN(T,
...)
|
-WARN_ON(
+drm_WARN_ON(T,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(T,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(T,
...)
)
...>
}
@rule3@
identifier func, T;
@@
func(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-WARN(
+drm_WARN(&T->drm,
...)
|
-WARN_ON(
+drm_WARN_ON(&T->drm,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(&T->drm,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(&T->drm,
...)
)
...+>
}
@rule4@
identifier func, T;
@@
func(struct drm_i915_private *T,...) {
<+...
(
-WARN(
+drm_WARN(&T->drm,
...)
|
-WARN_ON(
+drm_WARN_ON(&T->drm,
...)
|
-WARN_ONCE(
+drm_WARN_ONCE(&T->drm,
...)
|
-WARN_ON_ONCE(
+drm_WARN_ON_ONCE(&T->drm,
...)
)
...+>
}
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200128181603.27767-20-pankaj.laxminarayan.bharadiya@intel.com
2020-01-29 02:16:01 +08:00
|
|
|
drm_WARN_ON(&dev_priv->drm, rvda < OPREGION_SIZE);
|
2019-02-09 02:42:53 +08:00
|
|
|
|
|
|
|
rvda += asls;
|
|
|
|
}
|
|
|
|
|
|
|
|
opregion->rvda = memremap(rvda, opregion->asle->rvds,
|
2017-03-29 18:32:55 +08:00
|
|
|
MEMREMAP_WB);
|
2019-02-09 02:42:53 +08:00
|
|
|
|
2017-03-29 18:32:55 +08:00
|
|
|
vbt = opregion->rvda;
|
|
|
|
vbt_size = opregion->asle->rvds;
|
2017-03-29 18:32:56 +08:00
|
|
|
if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Found valid VBT in ACPI OpRegion (RVDA)\n");
|
2017-03-29 18:32:56 +08:00
|
|
|
opregion->vbt = vbt;
|
|
|
|
opregion->vbt_size = vbt_size;
|
|
|
|
goto out;
|
2017-03-29 18:32:57 +08:00
|
|
|
} else {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Invalid VBT in ACPI OpRegion (RVDA)\n");
|
2019-02-09 02:42:53 +08:00
|
|
|
memunmap(opregion->rvda);
|
|
|
|
opregion->rvda = NULL;
|
2017-03-29 18:32:56 +08:00
|
|
|
}
|
2017-03-29 18:32:55 +08:00
|
|
|
}
|
2015-12-15 19:16:15 +08:00
|
|
|
|
2017-03-29 18:32:56 +08:00
|
|
|
vbt = base + OPREGION_VBT_OFFSET;
|
|
|
|
/*
|
|
|
|
* The VBT specification says that if the ASLE ext mailbox is not used
|
|
|
|
* its area is reserved, but on some CHT boards the VBT extends into the
|
|
|
|
* ASLE ext area. Allow this even though it is against the spec, so we
|
|
|
|
* do not end up rejecting the VBT on those boards (and end up not
|
|
|
|
* finding the LCD panel because of this).
|
|
|
|
*/
|
|
|
|
vbt_size = (mboxes & MBOX_ASLE_EXT) ?
|
|
|
|
OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
|
|
|
|
vbt_size -= OPREGION_VBT_OFFSET;
|
2017-03-29 18:32:55 +08:00
|
|
|
if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
|
2017-03-29 18:32:55 +08:00
|
|
|
opregion->vbt = vbt;
|
|
|
|
opregion->vbt_size = vbt_size;
|
2017-03-29 18:32:57 +08:00
|
|
|
} else {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Invalid VBT in ACPI OpRegion (Mailbox #4)\n");
|
2015-12-15 19:16:15 +08:00
|
|
|
}
|
2015-12-14 18:50:46 +08:00
|
|
|
|
2017-03-29 18:32:55 +08:00
|
|
|
out:
|
2008-08-06 02:37:25 +08:00
|
|
|
return 0;
|
|
|
|
|
|
|
|
err_out:
|
2015-10-13 05:12:57 +08:00
|
|
|
memunmap(base);
|
2008-08-06 02:37:25 +08:00
|
|
|
return err;
|
|
|
|
}
|
2016-04-11 15:23:51 +08:00
|
|
|
|
2016-09-13 17:22:19 +08:00
|
|
|
static int intel_use_opregion_panel_type_callback(const struct dmi_system_id *id)
|
|
|
|
{
|
|
|
|
DRM_INFO("Using panel type from OpRegion on %s\n", id->ident);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const struct dmi_system_id intel_use_opregion_panel_type[] = {
|
|
|
|
{
|
|
|
|
.callback = intel_use_opregion_panel_type_callback,
|
|
|
|
.ident = "Conrac GmbH IX45GM2",
|
|
|
|
.matches = {DMI_MATCH(DMI_SYS_VENDOR, "Conrac GmbH"),
|
|
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "IX45GM2"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
2016-04-11 15:23:51 +08:00
|
|
|
int
|
2016-05-23 22:08:09 +08:00
|
|
|
intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
|
2016-04-11 15:23:51 +08:00
|
|
|
{
|
|
|
|
u32 panel_details;
|
|
|
|
int ret;
|
|
|
|
|
2016-05-23 22:08:09 +08:00
|
|
|
ret = swsci(dev_priv, SWSCI_GBDA_PANEL_DETAILS, 0x0, &panel_details);
|
2020-10-27 12:46:17 +08:00
|
|
|
if (ret)
|
2016-04-11 15:23:51 +08:00
|
|
|
return ret;
|
|
|
|
|
|
|
|
ret = (panel_details >> 8) & 0xff;
|
|
|
|
if (ret > 0x10) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Invalid OpRegion panel type 0x%x\n", ret);
|
2016-04-11 15:23:51 +08:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* fall back to VBT panel type? */
|
|
|
|
if (ret == 0x0) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm, "No panel type in OpRegion\n");
|
2016-04-11 15:23:51 +08:00
|
|
|
return -ENODEV;
|
|
|
|
}
|
|
|
|
|
2016-09-13 17:22:19 +08:00
|
|
|
/*
|
|
|
|
* So far we know that some machined must use it, others must not use it.
|
|
|
|
* There doesn't seem to be any way to determine which way to go, except
|
|
|
|
* via a quirk list :(
|
|
|
|
*/
|
|
|
|
if (!dmi_check_system(intel_use_opregion_panel_type)) {
|
drm/i915/opregion: conversion to struct drm_device logging macros.
This converts various instances of the printk based logging macros in
i915/display/intel_opregion.c with the new struct drm_device based
logging macros using the following coccinelle script:
@rule1@
identifier fn, T;
@@
fn(...,struct drm_i915_private *T,...) {
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
@rule2@
identifier fn, T;
@@
fn(...) {
...
struct drm_i915_private *T = ...;
<+...
(
-DRM_INFO(
+drm_info(&T->drm,
...)
|
-DRM_ERROR(
+drm_err(&T->drm,
...)
|
-DRM_WARN(
+drm_warn(&T->drm,
...)
|
-DRM_DEBUG(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_KMS(
+drm_dbg_kms(&T->drm,
...)
|
-DRM_DEBUG_DRIVER(
+drm_dbg(&T->drm,
...)
|
-DRM_DEBUG_ATOMIC(
+drm_dbg_atomic(&T->drm,
...)
)
...+>
}
Checkpatch warnings were addressed manually.
Signed-off-by: Wambui Karuga <wambui.karugax@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200122110844.2022-6-wambui.karugax@gmail.com
2020-01-22 19:08:43 +08:00
|
|
|
drm_dbg_kms(&dev_priv->drm,
|
|
|
|
"Ignoring OpRegion panel type (%d)\n", ret - 1);
|
2016-09-13 17:22:19 +08:00
|
|
|
return -ENODEV;
|
|
|
|
}
|
|
|
|
|
2016-04-11 15:23:51 +08:00
|
|
|
return ret - 1;
|
|
|
|
}
|
2018-10-30 19:05:54 +08:00
|
|
|
|
|
|
|
void intel_opregion_register(struct drm_i915_private *i915)
|
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &i915->opregion;
|
|
|
|
|
|
|
|
if (!opregion->header)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (opregion->acpi) {
|
|
|
|
opregion->acpi_notifier.notifier_call =
|
|
|
|
intel_opregion_video_event;
|
|
|
|
register_acpi_notifier(&opregion->acpi_notifier);
|
|
|
|
}
|
|
|
|
|
|
|
|
intel_opregion_resume(i915);
|
|
|
|
}
|
|
|
|
|
|
|
|
void intel_opregion_resume(struct drm_i915_private *i915)
|
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &i915->opregion;
|
|
|
|
|
|
|
|
if (!opregion->header)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (opregion->acpi) {
|
|
|
|
intel_didl_outputs(i915);
|
|
|
|
intel_setup_cadls(i915);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Notify BIOS we are ready to handle ACPI video ext notifs.
|
|
|
|
* Right now, all the events are handled by the ACPI video
|
|
|
|
* module. We don't actually need to do anything with them.
|
|
|
|
*/
|
|
|
|
opregion->acpi->csts = 0;
|
|
|
|
opregion->acpi->drdy = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (opregion->asle) {
|
|
|
|
opregion->asle->tche = ASLE_TCHE_BLC_EN;
|
|
|
|
opregion->asle->ardy = ASLE_ARDY_READY;
|
|
|
|
}
|
|
|
|
|
2021-05-20 14:58:20 +08:00
|
|
|
/* Some platforms abuse the _DSM to enable MUX */
|
|
|
|
intel_dsm_get_bios_data_funcs_supported(i915);
|
|
|
|
|
2018-10-30 19:05:54 +08:00
|
|
|
intel_opregion_notify_adapter(i915, PCI_D0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void intel_opregion_suspend(struct drm_i915_private *i915, pci_power_t state)
|
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &i915->opregion;
|
|
|
|
|
|
|
|
if (!opregion->header)
|
|
|
|
return;
|
|
|
|
|
|
|
|
intel_opregion_notify_adapter(i915, state);
|
|
|
|
|
|
|
|
if (opregion->asle)
|
|
|
|
opregion->asle->ardy = ASLE_ARDY_NOT_READY;
|
|
|
|
|
|
|
|
cancel_work_sync(&i915->opregion.asle_work);
|
|
|
|
|
|
|
|
if (opregion->acpi)
|
|
|
|
opregion->acpi->drdy = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void intel_opregion_unregister(struct drm_i915_private *i915)
|
|
|
|
{
|
|
|
|
struct intel_opregion *opregion = &i915->opregion;
|
|
|
|
|
|
|
|
intel_opregion_suspend(i915, PCI_D1);
|
|
|
|
|
|
|
|
if (!opregion->header)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (opregion->acpi_notifier.notifier_call) {
|
|
|
|
unregister_acpi_notifier(&opregion->acpi_notifier);
|
|
|
|
opregion->acpi_notifier.notifier_call = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* just clear all opregion memory pointers now */
|
|
|
|
memunmap(opregion->header);
|
|
|
|
if (opregion->rvda) {
|
|
|
|
memunmap(opregion->rvda);
|
|
|
|
opregion->rvda = NULL;
|
|
|
|
}
|
|
|
|
if (opregion->vbt_firmware) {
|
|
|
|
kfree(opregion->vbt_firmware);
|
|
|
|
opregion->vbt_firmware = NULL;
|
|
|
|
}
|
|
|
|
opregion->header = NULL;
|
|
|
|
opregion->acpi = NULL;
|
|
|
|
opregion->swsci = NULL;
|
|
|
|
opregion->asle = NULL;
|
|
|
|
opregion->vbt = NULL;
|
|
|
|
opregion->lid_state = NULL;
|
|
|
|
}
|