2016-07-05 10:40:20 +01:00
/*
* Copyright © 2016 Intel Corporation
*
* 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 , sublicense ,
* 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 NONINFRINGEMENT . IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS 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 .
*
*/
2017-12-19 11:43:44 +00:00
# include <drm/drm_print.h>
2020-02-25 15:31:31 +02:00
# include <drm/i915_pciids.h>
2017-12-19 11:43:44 +00:00
2020-02-16 16:34:45 +00:00
# include "display/intel_cdclk.h"
2020-07-07 17:39:44 -07:00
# include "display/intel_de.h"
2017-12-21 21:57:32 +00:00
# include "intel_device_info.h"
2016-07-05 10:40:20 +01:00
# include "i915_drv.h"
2016-12-01 14:49:55 +02:00
# define PLATFORM_NAME(x) [INTEL_##x] = #x
static const char * const platform_names [ ] = {
PLATFORM_NAME ( I830 ) ,
PLATFORM_NAME ( I845G ) ,
PLATFORM_NAME ( I85X ) ,
PLATFORM_NAME ( I865G ) ,
PLATFORM_NAME ( I915G ) ,
PLATFORM_NAME ( I915GM ) ,
PLATFORM_NAME ( I945G ) ,
PLATFORM_NAME ( I945GM ) ,
PLATFORM_NAME ( G33 ) ,
PLATFORM_NAME ( PINEVIEW ) ,
2016-12-07 12:13:04 +02:00
PLATFORM_NAME ( I965G ) ,
PLATFORM_NAME ( I965GM ) ,
2016-11-30 17:43:05 +02:00
PLATFORM_NAME ( G45 ) ,
PLATFORM_NAME ( GM45 ) ,
2016-12-01 14:49:55 +02:00
PLATFORM_NAME ( IRONLAKE ) ,
PLATFORM_NAME ( SANDYBRIDGE ) ,
PLATFORM_NAME ( IVYBRIDGE ) ,
PLATFORM_NAME ( VALLEYVIEW ) ,
PLATFORM_NAME ( HASWELL ) ,
PLATFORM_NAME ( BROADWELL ) ,
PLATFORM_NAME ( CHERRYVIEW ) ,
PLATFORM_NAME ( SKYLAKE ) ,
PLATFORM_NAME ( BROXTON ) ,
PLATFORM_NAME ( KABYLAKE ) ,
PLATFORM_NAME ( GEMINILAKE ) ,
2017-06-08 08:49:58 -07:00
PLATFORM_NAME ( COFFEELAKE ) ,
2020-06-02 15:05:40 +01:00
PLATFORM_NAME ( COMETLAKE ) ,
2017-06-06 13:30:30 -07:00
PLATFORM_NAME ( CANNONLAKE ) ,
2018-01-11 16:00:04 -02:00
PLATFORM_NAME ( ICELAKE ) ,
2019-03-22 10:58:43 -07:00
PLATFORM_NAME ( ELKHARTLAKE ) ,
2020-10-14 00:59:48 +05:30
PLATFORM_NAME ( JASPERLAKE ) ,
2019-07-11 10:30:56 -07:00
PLATFORM_NAME ( TIGERLAKE ) ,
2020-05-04 15:52:06 -07:00
PLATFORM_NAME ( ROCKETLAKE ) ,
2020-07-13 11:23:17 -07:00
PLATFORM_NAME ( DG1 ) ,
2016-12-01 14:49:55 +02:00
} ;
# undef PLATFORM_NAME
const char * intel_platform_name ( enum intel_platform platform )
{
2017-02-28 13:11:43 +02:00
BUILD_BUG_ON ( ARRAY_SIZE ( platform_names ) ! = INTEL_MAX_PLATFORMS ) ;
2016-12-01 14:49:55 +02:00
if ( WARN_ON_ONCE ( platform > = ARRAY_SIZE ( platform_names ) | |
platform_names [ platform ] = = NULL ) )
return " <unknown> " ;
return platform_names [ platform ] ;
}
2019-12-07 18:29:37 +00:00
static const char * iommu_name ( void )
2017-12-19 11:43:44 +00:00
{
2019-12-07 18:29:37 +00:00
const char * msg = " n/a " ;
# ifdef CONFIG_INTEL_IOMMU
msg = enableddisabled ( intel_iommu_gfx_mapped ) ;
# endif
return msg ;
}
void intel_device_info_print_static ( const struct intel_device_info * info ,
struct drm_printer * p )
{
drm_printf ( p , " gen: %d \n " , info - > gen ) ;
drm_printf ( p , " gt: %d \n " , info - > gt ) ;
drm_printf ( p , " iommu: %s \n " , iommu_name ( ) ) ;
drm_printf ( p , " memory-regions: %x \n " , info - > memory_regions ) ;
drm_printf ( p , " page-sizes: %x \n " , info - > page_sizes ) ;
drm_printf ( p , " platform: %s \n " , intel_platform_name ( info - > platform ) ) ;
drm_printf ( p , " ppgtt-size: %d \n " , info - > ppgtt_size ) ;
drm_printf ( p , " ppgtt-type: %d \n " , info - > ppgtt_type ) ;
2020-04-17 15:51:07 -04:00
drm_printf ( p , " dma_mask_size: %u \n " , info - > dma_mask_size ) ;
2019-12-07 18:29:37 +00:00
2020-11-27 08:28:28 -08:00
# define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, yesno(info->name))
2017-12-19 11:43:44 +00:00
DEV_INFO_FOR_EACH_FLAG ( PRINT_FLAG ) ;
# undef PRINT_FLAG
2018-11-30 15:20:48 -08:00
# define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, yesno(info->display.name));
DEV_INFO_DISPLAY_FOR_EACH_FLAG ( PRINT_FLAG ) ;
# undef PRINT_FLAG
2017-12-19 11:43:44 +00:00
}
2019-12-07 18:29:37 +00:00
void intel_device_info_print_runtime ( const struct intel_runtime_info * info ,
struct drm_printer * p )
2017-12-21 21:57:34 +00:00
{
2020-02-16 16:34:45 +00:00
drm_printf ( p , " rawclk rate: %u kHz \n " , info - > rawclk_freq ) ;
2017-11-10 19:08:44 +00:00
}
2019-03-27 14:23:28 +00:00
# undef INTEL_VGA_DEVICE
# define INTEL_VGA_DEVICE(id, info) (id)
static const u16 subplatform_ult_ids [ ] = {
INTEL_HSW_ULT_GT1_IDS ( 0 ) ,
INTEL_HSW_ULT_GT2_IDS ( 0 ) ,
INTEL_HSW_ULT_GT3_IDS ( 0 ) ,
INTEL_BDW_ULT_GT1_IDS ( 0 ) ,
INTEL_BDW_ULT_GT2_IDS ( 0 ) ,
INTEL_BDW_ULT_GT3_IDS ( 0 ) ,
INTEL_BDW_ULT_RSVD_IDS ( 0 ) ,
INTEL_SKL_ULT_GT1_IDS ( 0 ) ,
INTEL_SKL_ULT_GT2_IDS ( 0 ) ,
INTEL_SKL_ULT_GT3_IDS ( 0 ) ,
INTEL_KBL_ULT_GT1_IDS ( 0 ) ,
INTEL_KBL_ULT_GT2_IDS ( 0 ) ,
INTEL_KBL_ULT_GT3_IDS ( 0 ) ,
INTEL_CFL_U_GT2_IDS ( 0 ) ,
INTEL_CFL_U_GT3_IDS ( 0 ) ,
INTEL_WHL_U_GT1_IDS ( 0 ) ,
INTEL_WHL_U_GT2_IDS ( 0 ) ,
2019-06-05 19:29:45 +03:00
INTEL_WHL_U_GT3_IDS ( 0 ) ,
2019-12-10 23:04:15 +08:00
INTEL_CML_U_GT1_IDS ( 0 ) ,
INTEL_CML_U_GT2_IDS ( 0 ) ,
2019-03-27 14:23:28 +00:00
} ;
static const u16 subplatform_ulx_ids [ ] = {
INTEL_HSW_ULX_GT1_IDS ( 0 ) ,
INTEL_HSW_ULX_GT2_IDS ( 0 ) ,
INTEL_BDW_ULX_GT1_IDS ( 0 ) ,
INTEL_BDW_ULX_GT2_IDS ( 0 ) ,
INTEL_BDW_ULX_GT3_IDS ( 0 ) ,
INTEL_BDW_ULX_RSVD_IDS ( 0 ) ,
INTEL_SKL_ULX_GT1_IDS ( 0 ) ,
INTEL_SKL_ULX_GT2_IDS ( 0 ) ,
INTEL_KBL_ULX_GT1_IDS ( 0 ) ,
2019-06-05 19:29:45 +03:00
INTEL_KBL_ULX_GT2_IDS ( 0 ) ,
2019-03-27 14:23:28 +00:00
INTEL_AML_KBL_GT2_IDS ( 0 ) ,
2019-06-05 19:29:45 +03:00
INTEL_AML_CFL_GT2_IDS ( 0 ) ,
2019-03-27 14:23:28 +00:00
} ;
static const u16 subplatform_portf_ids [ ] = {
INTEL_CNL_PORT_F_IDS ( 0 ) ,
2019-06-05 19:29:45 +03:00
INTEL_ICL_PORT_F_IDS ( 0 ) ,
2019-03-27 14:23:28 +00:00
} ;
static bool find_devid ( u16 id , const u16 * p , unsigned int num )
{
for ( ; num ; num - - , p + + ) {
if ( * p = = id )
return true ;
}
return false ;
}
void intel_device_info_subplatform_init ( struct drm_i915_private * i915 )
{
const struct intel_device_info * info = INTEL_INFO ( i915 ) ;
const struct intel_runtime_info * rinfo = RUNTIME_INFO ( i915 ) ;
const unsigned int pi = __platform_mask_index ( rinfo , info - > platform ) ;
const unsigned int pb = __platform_mask_bit ( rinfo , info - > platform ) ;
u16 devid = INTEL_DEVID ( i915 ) ;
2019-04-03 07:44:07 +01:00
u32 mask = 0 ;
2019-03-27 14:23:28 +00:00
/* Make sure IS_<platform> checks are working. */
RUNTIME_INFO ( i915 ) - > platform_mask [ pi ] = BIT ( pb ) ;
/* Find and mark subplatform bits based on the PCI device id. */
if ( find_devid ( devid , subplatform_ult_ids ,
ARRAY_SIZE ( subplatform_ult_ids ) ) ) {
mask = BIT ( INTEL_SUBPLATFORM_ULT ) ;
} else if ( find_devid ( devid , subplatform_ulx_ids ,
ARRAY_SIZE ( subplatform_ulx_ids ) ) ) {
mask = BIT ( INTEL_SUBPLATFORM_ULX ) ;
if ( IS_HASWELL ( i915 ) | | IS_BROADWELL ( i915 ) ) {
/* ULX machines are also considered ULT. */
mask | = BIT ( INTEL_SUBPLATFORM_ULT ) ;
}
} else if ( find_devid ( devid , subplatform_portf_ids ,
ARRAY_SIZE ( subplatform_portf_ids ) ) ) {
mask = BIT ( INTEL_SUBPLATFORM_PORTF ) ;
}
2020-08-07 12:26:28 -07:00
if ( IS_TIGERLAKE ( i915 ) ) {
struct pci_dev * root , * pdev = i915 - > drm . pdev ;
root = list_first_entry ( & pdev - > bus - > devices , typeof ( * root ) , bus_list ) ;
drm_WARN_ON ( & i915 - > drm , mask ) ;
drm_WARN_ON ( & i915 - > drm , ( root - > device & TGL_ROOT_DEVICE_MASK ) ! =
TGL_ROOT_DEVICE_ID ) ;
switch ( root - > device & TGL_ROOT_DEVICE_SKU_MASK ) {
case TGL_ROOT_DEVICE_SKU_ULX :
mask = BIT ( INTEL_SUBPLATFORM_ULX ) ;
break ;
case TGL_ROOT_DEVICE_SKU_ULT :
mask = BIT ( INTEL_SUBPLATFORM_ULT ) ;
break ;
}
}
2019-03-27 14:23:28 +00:00
GEM_BUG_ON ( mask & ~ INTEL_SUBPLATFORM_BITS ) ;
RUNTIME_INFO ( i915 ) - > platform_mask [ pi ] | = mask ;
}
2017-12-21 21:57:33 +00:00
/**
* intel_device_info_runtime_init - initialize runtime info
2019-01-05 01:46:52 +00:00
* @ dev_priv : the i915 device
2017-12-21 21:57:33 +00:00
*
2016-07-05 10:40:20 +01:00
* Determine various intel_device_info fields at runtime .
*
* Use it when either :
* - it ' s judged too laborious to fill n static structures with the limit
* when a simple if statement does the job ,
* - run - time checks ( eg read fuse / strap registers ) are needed .
*
* This function needs to be called :
* - after the MMIO has been setup as we are reading registers ,
* - after the PCH has been detected ,
* - before the first usage of the fields it can tweak .
*/
2018-12-31 16:56:43 +02:00
void intel_device_info_runtime_init ( struct drm_i915_private * dev_priv )
2016-07-05 10:40:20 +01:00
{
2018-12-31 16:56:43 +02:00
struct intel_device_info * info = mkwrite_device_info ( dev_priv ) ;
2018-12-31 16:56:41 +02:00
struct intel_runtime_info * runtime = RUNTIME_INFO ( dev_priv ) ;
2016-07-05 10:40:20 +01:00
enum pipe pipe ;
2017-11-01 12:08:50 +02:00
if ( INTEL_GEN ( dev_priv ) > = 10 ) {
for_each_pipe ( dev_priv , pipe )
2018-12-31 16:56:41 +02:00
runtime - > num_scalers [ pipe ] = 2 ;
drm/i915: replace IS_GEN<N> with IS_GEN(..., N)
Define IS_GEN() similarly to our IS_GEN_RANGE(). but use gen instead of
gen_mask to do the comparison. Now callers can pass then gen as a parameter,
so we don't require one macro for each gen.
The following spatch was used to convert the users of these macros:
@@
expression e;
@@
(
- IS_GEN2(e)
+ IS_GEN(e, 2)
|
- IS_GEN3(e)
+ IS_GEN(e, 3)
|
- IS_GEN4(e)
+ IS_GEN(e, 4)
|
- IS_GEN5(e)
+ IS_GEN(e, 5)
|
- IS_GEN6(e)
+ IS_GEN(e, 6)
|
- IS_GEN7(e)
+ IS_GEN(e, 7)
|
- IS_GEN8(e)
+ IS_GEN(e, 8)
|
- IS_GEN9(e)
+ IS_GEN(e, 9)
|
- IS_GEN10(e)
+ IS_GEN(e, 10)
|
- IS_GEN11(e)
+ IS_GEN(e, 11)
)
v2: use IS_GEN rather than GT_GEN and compare to info.gen rather than
using the bitmask
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181212181044.15886-2-lucas.demarchi@intel.com
2018-12-12 10:10:43 -08:00
} else if ( IS_GEN ( dev_priv , 9 ) ) {
2018-12-31 16:56:41 +02:00
runtime - > num_scalers [ PIPE_A ] = 2 ;
runtime - > num_scalers [ PIPE_B ] = 2 ;
runtime - > num_scalers [ PIPE_C ] = 1 ;
2017-01-02 15:54:41 +02:00
}
2019-03-05 18:03:30 +00:00
BUILD_BUG_ON ( BITS_PER_TYPE ( intel_engine_mask_t ) < I915_NUM_ENGINES ) ;
2018-02-28 12:11:52 +02:00
2020-05-04 15:52:12 -07:00
if ( IS_ROCKETLAKE ( dev_priv ) )
for_each_pipe ( dev_priv , pipe )
runtime - > num_sprites [ pipe ] = 4 ;
else if ( INTEL_GEN ( dev_priv ) > = 11 )
2018-10-18 13:51:28 +02:00
for_each_pipe ( dev_priv , pipe )
2018-12-31 16:56:41 +02:00
runtime - > num_sprites [ pipe ] = 6 ;
drm/i915: replace IS_GEN<N> with IS_GEN(..., N)
Define IS_GEN() similarly to our IS_GEN_RANGE(). but use gen instead of
gen_mask to do the comparison. Now callers can pass then gen as a parameter,
so we don't require one macro for each gen.
The following spatch was used to convert the users of these macros:
@@
expression e;
@@
(
- IS_GEN2(e)
+ IS_GEN(e, 2)
|
- IS_GEN3(e)
+ IS_GEN(e, 3)
|
- IS_GEN4(e)
+ IS_GEN(e, 4)
|
- IS_GEN5(e)
+ IS_GEN(e, 5)
|
- IS_GEN6(e)
+ IS_GEN(e, 6)
|
- IS_GEN7(e)
+ IS_GEN(e, 7)
|
- IS_GEN8(e)
+ IS_GEN(e, 8)
|
- IS_GEN9(e)
+ IS_GEN(e, 9)
|
- IS_GEN10(e)
+ IS_GEN(e, 10)
|
- IS_GEN11(e)
+ IS_GEN(e, 11)
)
v2: use IS_GEN rather than GT_GEN and compare to info.gen rather than
using the bitmask
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181212181044.15886-2-lucas.demarchi@intel.com
2018-12-12 10:10:43 -08:00
else if ( IS_GEN ( dev_priv , 10 ) | | IS_GEMINILAKE ( dev_priv ) )
2016-12-02 10:23:57 +02:00
for_each_pipe ( dev_priv , pipe )
2018-12-31 16:56:41 +02:00
runtime - > num_sprites [ pipe ] = 3 ;
2016-12-02 10:23:57 +02:00
else if ( IS_BROXTON ( dev_priv ) ) {
2018-10-18 13:51:28 +02:00
/*
* Skylake and Broxton currently don ' t expose the topmost plane as its
* use is exclusive with the legacy cursor and we only want to expose
* one of those , not both . Until we can safely expose the topmost plane
* as a DRM_PLANE_TYPE_CURSOR with all the features exposed / supported ,
* we don ' t expose the topmost plane at all to prevent ABI breakage
* down the line .
*/
2018-12-31 16:56:41 +02:00
runtime - > num_sprites [ PIPE_A ] = 2 ;
runtime - > num_sprites [ PIPE_B ] = 2 ;
runtime - > num_sprites [ PIPE_C ] = 1 ;
2016-10-25 18:58:00 +03:00
} else if ( IS_VALLEYVIEW ( dev_priv ) | | IS_CHERRYVIEW ( dev_priv ) ) {
2016-07-05 10:40:20 +01:00
for_each_pipe ( dev_priv , pipe )
2018-12-31 16:56:41 +02:00
runtime - > num_sprites [ pipe ] = 2 ;
2017-04-21 21:14:32 +03:00
} else if ( INTEL_GEN ( dev_priv ) > = 5 | | IS_G4X ( dev_priv ) ) {
2016-07-05 10:40:20 +01:00
for_each_pipe ( dev_priv , pipe )
2018-12-31 16:56:41 +02:00
runtime - > num_sprites [ pipe ] = 1 ;
2016-10-25 18:58:00 +03:00
}
2016-07-05 10:40:20 +01:00
2019-09-16 12:29:01 +03:00
if ( HAS_DISPLAY ( dev_priv ) & & IS_GEN_RANGE ( dev_priv , 7 , 8 ) & &
HAS_PCH_SPLIT ( dev_priv ) ) {
2020-07-07 17:39:44 -07:00
u32 fuse_strap = intel_de_read ( dev_priv , FUSE_STRAP ) ;
u32 sfuse_strap = intel_de_read ( dev_priv , SFUSE_STRAP ) ;
2016-07-05 10:40:20 +01:00
/*
* SFUSE_STRAP is supposed to have a bit signalling the display
* is fused off . Unfortunately it seems that , at least in
* certain cases , fused off display means that PCH display
* reads don ' t land anywhere . In that case , we read 0 s .
*
* On CPT / PPT , we can detect this case as SFUSE_STRAP_FUSE_LOCK
* should be set when taking over after the firmware .
*/
if ( fuse_strap & ILK_INTERNAL_DISPLAY_DISABLE | |
sfuse_strap & SFUSE_STRAP_DISPLAY_DISABLED | |
2017-06-20 16:03:06 +03:00
( HAS_PCH_CPT ( dev_priv ) & &
2016-07-05 10:40:20 +01:00
! ( sfuse_strap & SFUSE_STRAP_FUSE_LOCK ) ) ) {
2020-01-09 12:06:44 +03:00
drm_info ( & dev_priv - > drm ,
" Display fused off, disabling \n " ) ;
2019-09-11 23:29:08 +03:00
info - > pipe_mask = 0 ;
2020-03-18 19:02:35 +02:00
info - > cpu_transcoder_mask = 0 ;
2016-07-05 10:40:20 +01:00
} else if ( fuse_strap & IVB_PIPE_C_DISABLE ) {
2020-01-09 12:06:44 +03:00
drm_info ( & dev_priv - > drm , " PipeC fused off \n " ) ;
2019-09-11 23:29:08 +03:00
info - > pipe_mask & = ~ BIT ( PIPE_C ) ;
2020-03-18 19:02:35 +02:00
info - > cpu_transcoder_mask & = ~ BIT ( TRANSCODER_C ) ;
2016-07-05 10:40:20 +01:00
}
2018-12-11 11:25:45 -08:00
} else if ( HAS_DISPLAY ( dev_priv ) & & INTEL_GEN ( dev_priv ) > = 9 ) {
2020-07-07 17:39:44 -07:00
u32 dfsm = intel_de_read ( dev_priv , SKL_DFSM ) ;
2016-07-05 10:40:20 +01:00
2020-03-18 19:02:35 +02:00
if ( dfsm & SKL_DFSM_PIPE_A_DISABLE ) {
info - > pipe_mask & = ~ BIT ( PIPE_A ) ;
info - > cpu_transcoder_mask & = ~ BIT ( TRANSCODER_A ) ;
}
if ( dfsm & SKL_DFSM_PIPE_B_DISABLE ) {
info - > pipe_mask & = ~ BIT ( PIPE_B ) ;
info - > cpu_transcoder_mask & = ~ BIT ( TRANSCODER_B ) ;
}
if ( dfsm & SKL_DFSM_PIPE_C_DISABLE ) {
info - > pipe_mask & = ~ BIT ( PIPE_C ) ;
info - > cpu_transcoder_mask & = ~ BIT ( TRANSCODER_C ) ;
}
if ( INTEL_GEN ( dev_priv ) > = 12 & &
( dfsm & TGL_DFSM_PIPE_D_DISABLE ) ) {
info - > pipe_mask & = ~ BIT ( PIPE_D ) ;
info - > cpu_transcoder_mask & = ~ BIT ( TRANSCODER_D ) ;
}
2019-10-25 17:13:20 -07:00
if ( dfsm & SKL_DFSM_DISPLAY_HDCP_DISABLE )
info - > display . has_hdcp = 0 ;
2019-10-25 17:13:21 -07:00
if ( dfsm & SKL_DFSM_DISPLAY_PM_DISABLE )
info - > display . has_fbc = 0 ;
2019-10-25 17:13:22 -07:00
if ( INTEL_GEN ( dev_priv ) > = 11 & & ( dfsm & ICL_DFSM_DMC_DISABLE ) )
info - > display . has_csr = 0 ;
2019-10-25 17:13:23 -07:00
if ( INTEL_GEN ( dev_priv ) > = 10 & &
( dfsm & CNL_DFSM_DISPLAY_DSC_DISABLE ) )
info - > display . has_dsc = 0 ;
2016-07-05 10:40:20 +01:00
}
drm/i915: replace IS_GEN<N> with IS_GEN(..., N)
Define IS_GEN() similarly to our IS_GEN_RANGE(). but use gen instead of
gen_mask to do the comparison. Now callers can pass then gen as a parameter,
so we don't require one macro for each gen.
The following spatch was used to convert the users of these macros:
@@
expression e;
@@
(
- IS_GEN2(e)
+ IS_GEN(e, 2)
|
- IS_GEN3(e)
+ IS_GEN(e, 3)
|
- IS_GEN4(e)
+ IS_GEN(e, 4)
|
- IS_GEN5(e)
+ IS_GEN(e, 5)
|
- IS_GEN6(e)
+ IS_GEN(e, 6)
|
- IS_GEN7(e)
+ IS_GEN(e, 7)
|
- IS_GEN8(e)
+ IS_GEN(e, 8)
|
- IS_GEN9(e)
+ IS_GEN(e, 9)
|
- IS_GEN10(e)
+ IS_GEN(e, 10)
|
- IS_GEN11(e)
+ IS_GEN(e, 11)
)
v2: use IS_GEN rather than GT_GEN and compare to info.gen rather than
using the bitmask
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181212181044.15886-2-lucas.demarchi@intel.com
2018-12-12 10:10:43 -08:00
if ( IS_GEN ( dev_priv , 6 ) & & intel_vtd_active ( ) ) {
2020-01-09 12:06:44 +03:00
drm_info ( & dev_priv - > drm ,
" Disabling ppGTT for VT-d support \n " ) ;
2019-03-14 22:38:36 +00:00
info - > ppgtt_type = INTEL_PPGTT_NONE ;
2018-09-26 21:12:22 +01:00
}
2020-02-16 16:34:45 +00:00
runtime - > rawclk_freq = intel_read_rawclk ( dev_priv ) ;
drm_dbg ( & dev_priv - > drm , " rawclk rate: %d kHz \n " , runtime - > rawclk_freq ) ;
2020-09-10 12:52:25 +03:00
if ( ! HAS_DISPLAY ( dev_priv ) ) {
dev_priv - > drm . driver_features & = ~ ( DRIVER_MODESET |
DRIVER_ATOMIC ) ;
memset ( & info - > display , 0 , sizeof ( info - > display ) ) ;
memset ( runtime - > num_sprites , 0 , sizeof ( runtime - > num_sprites ) ) ;
memset ( runtime - > num_scalers , 0 , sizeof ( runtime - > num_scalers ) ) ;
}
2016-07-05 10:40:20 +01:00
}
2018-02-07 21:05:43 +00:00
void intel_driver_caps_print ( const struct intel_driver_caps * caps ,
struct drm_printer * p )
{
2018-07-06 11:14:41 +01:00
drm_printf ( p , " Has logical contexts? %s \n " ,
yesno ( caps - > has_logical_contexts ) ) ;
2018-02-07 21:05:43 +00:00
drm_printf ( p , " scheduler: %x \n " , caps - > scheduler ) ;
}