[PATCH 02/76] drm/amd/dal: clean up asic cap
Harry Wentland
harry.wentland at amd.com
Mon Nov 21 23:00:22 UTC 2016
From: Tony Cheng <tony.cheng at amd.com>
ASIC_DATA_LINEBUFFER_NUM:
not used. each pipe has it's own lb.
ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS:
not needed. clk_src management algorithm take care of this.
ASIC_DATA_CLOCKSOURCES_NUM:
verify correct num of clk to create is already baked in resource.
remove duplicate information from hw_asic_id.
Signed-off-by: Tony Cheng <tony.cheng at amd.com>
Acked-by: Harry Wentland <harry.wentland at amd.com>
---
.../gpu/drm/amd/dal/dc/adapter/adapter_service.c | 88 ----------------------
.../amd/dal/dc/asic_capability/asic_capability.c | 5 --
.../dc/asic_capability/carrizo_asic_capability.c | 11 ---
.../dc/asic_capability/hawaii_asic_capability.c | 9 ---
.../dc/asic_capability/polaris10_asic_capability.c | 18 -----
.../dal/dc/asic_capability/tonga_asic_capability.c | 9 ---
drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 +
drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 4 +-
drivers/gpu/drm/amd/dal/dc/core/dc_resource.c | 2 +-
.../gpu/drm/amd/dal/dc/dce100/dce100_resource.c | 9 ++-
.../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 40 ++++++----
.../gpu/drm/amd/dal/dc/dce112/dce112_resource.c | 32 ++++++--
drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c | 11 ++-
drivers/gpu/drm/amd/dal/dc/inc/core_dc.h | 1 +
drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 1 +
drivers/gpu/drm/amd/dal/dc/inc/resource.h | 4 +-
.../amd/dal/include/adapter_service_interface.h | 20 +----
.../drm/amd/dal/include/asic_capability_types.h | 13 +---
18 files changed, 77 insertions(+), 202 deletions(-)
diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
index 57228a87d5a1..4c2c2fc164be 100644
--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
+++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
@@ -109,10 +109,8 @@ static const struct feature_source_entry feature_entry_table[] = {
{FEATURE_NO_HPD_LOW_POLLING_VCC_OFF, false, true},
{FEATURE_ENABLE_DFS_BYPASS, false, true},
{FEATURE_WIRELESS_FULL_TIMING_ADJUSTMENT, false, true},
- {FEATURE_MAX_COFUNC_NON_DP_DISPLAYS, 2, false},
{FEATURE_WIRELESS_LIMIT_720P, false, true},
{FEATURE_MODIFY_TIMINGS_FOR_WIRELESS, false, true},
- {FEATURE_SUPPORTED_HDMI_CONNECTION_NUM, 0, false},
{FEATURE_DETECT_REQUIRE_HPD_HIGH, false, true},
{FEATURE_NO_HPD_LOW_POLLING_VCC_OFF, false, true},
{FEATURE_LB_HIGH_RESOLUTION, false, true},
@@ -453,10 +451,6 @@ static bool get_feature_value_from_data_sources(
}
switch (feature_entry_table[idx].feature_id) {
- case FEATURE_MAX_COFUNC_NON_DP_DISPLAYS:
- *data = as->asic_cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS];
- break;
-
case FEATURE_WIRELESS_LIMIT_720P:
*data = as->asic_cap->caps.WIRELESS_LIMIT_TO_720P;
break;
@@ -469,11 +463,6 @@ static bool get_feature_value_from_data_sources(
*data = as->asic_cap->caps.WIRELESS_TIMING_ADJUSTMENT;
break;
- case FEATURE_SUPPORTED_HDMI_CONNECTION_NUM:
- *data =
- as->asic_cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM];
- break;
-
case FEATURE_DETECT_REQUIRE_HPD_HIGH:
*data = as->asic_cap->caps.HPD_CHECK_FOR_EDID;
break;
@@ -893,72 +882,6 @@ bool dal_adapter_service_is_device_id_supported(struct adapter_service *as,
}
/*
- * dal_adapter_service_get_clock_sources_num
- *
- * Get number of clock sources
- */
-uint8_t dal_adapter_service_get_clock_sources_num(
- struct adapter_service *as)
-{
- struct firmware_info fw_info;
- uint32_t max_clk_src = 0;
- uint32_t num = as->asic_cap->data[ASIC_DATA_CLOCKSOURCES_NUM];
- struct dc_bios *dcb = as->ctx->dc_bios;
-
- /*
- * Check is system supports the use of the External clock source
- * as a clock source for DP
- */
- enum bp_result bp_result = dcb->funcs->get_firmware_info(dcb, &fw_info);
-
- if (BP_RESULT_OK == bp_result &&
- fw_info.external_clock_source_frequency_for_dp != 0)
- ++num;
-
- /*
- * Add clock source for wireless if supported
- */
- num += (uint32_t)wireless_get_clocks_num(as);
-
- /* Check the "max number of clock sources" feature */
- if (dal_adapter_service_get_feature_value(as,
- FEATURE_MAX_CLOCK_SOURCE_NUM,
- &max_clk_src,
- sizeof(uint32_t)))
- if ((max_clk_src != 0) && (max_clk_src < num))
- num = max_clk_src;
-
- return num;
-}
-
-/*
- * dal_adapter_service_get_func_controllers_num
- *
- * Get number of controllers
- */
-uint8_t dal_adapter_service_get_func_controllers_num(
- struct adapter_service *as)
-{
- uint32_t result =
- as->asic_cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM];
-
- /* Check the "max num of controllers" feature,
- * use it for debugging purposes only */
-
- /* Limit number of controllers by OS */
-
- struct asic_feature_flags flags;
-
- flags.raw = as->asic_cap->data[ASIC_DATA_FEATURE_FLAGS];
-
- if (flags.bits.LEGACY_CLIENT &&
- (result > LEGACY_MAX_NUM_OF_CONTROLLERS))
- result = LEGACY_MAX_NUM_OF_CONTROLLERS;
-
- return result;
-}
-
-/*
* dal_adapter_service_is_feature_supported
*
* Return if a given feature is supported by the ASIC. The feature has to be
@@ -1098,17 +1021,6 @@ bool dal_adapter_service_get_firmware_info(
}
/*
- * dal_adapter_service_get_stream_engines_num
- *
- * Get number of stream engines
- */
-uint8_t dal_adapter_service_get_stream_engines_num(
- struct adapter_service *as)
-{
- return as->asic_cap->data[ASIC_DATA_DIGFE_NUM];
-}
-
-/*
* dal_adapter_service_get_feature_value
*
* Get the cached value of a given feature. This value can be a boolean, int,
diff --git a/drivers/gpu/drm/amd/dal/dc/asic_capability/asic_capability.c b/drivers/gpu/drm/amd/dal/dc/asic_capability/asic_capability.c
index 3e83b1e4ab9e..24ab4a5b5232 100644
--- a/drivers/gpu/drm/amd/dal/dc/asic_capability/asic_capability.c
+++ b/drivers/gpu/drm/amd/dal/dc/asic_capability/asic_capability.c
@@ -54,15 +54,10 @@ static bool construct(
memset(cap->data, 0, sizeof(cap->data));
/* ASIC data */
- cap->data[ASIC_DATA_VRAM_TYPE] = init->vram_type;
cap->data[ASIC_DATA_VRAM_BITWIDTH] = init->vram_width;
- cap->data[ASIC_DATA_FEATURE_FLAGS] = init->feature_flags;
cap->runtime_flags = init->runtime_flags;
- cap->data[ASIC_DATA_REVISION_ID] = init->hw_internal_rev;
cap->data[ASIC_DATA_MAX_UNDERSCAN_PERCENTAGE] = 10;
cap->data[ASIC_DATA_VIEWPORT_PIXEL_GRANULARITY] = 4;
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 1;
- cap->data[ASIC_DATA_NUM_OF_VIDEO_PLANES] = 0;
cap->data[ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ] = 25;
cap->data[ASIC_DATA_DOWNSCALE_LIMIT] = 200;
diff --git a/drivers/gpu/drm/amd/dal/dc/asic_capability/carrizo_asic_capability.c b/drivers/gpu/drm/amd/dal/dc/asic_capability/carrizo_asic_capability.c
index 340c1f1a41d6..d23d186c670f 100644
--- a/drivers/gpu/drm/amd/dal/dc/asic_capability/carrizo_asic_capability.c
+++ b/drivers/gpu/drm/amd/dal/dc/asic_capability/carrizo_asic_capability.c
@@ -48,23 +48,15 @@ void carrizo_asic_capability_create(struct asic_capability *cap,
{
uint32_t e_fuse_setting;
/* ASIC data */
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 3;
- cap->data[ASIC_DATA_DIGFE_NUM] = 3;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 3;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 3;
cap->data[ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR] = 4;
cap->data[ASIC_DATA_DCE_VERSION] = 0x110; /* DCE 11 */
cap->data[ASIC_DATA_LINEBUFFER_SIZE] = 1712 * 144;
cap->data[ASIC_DATA_DRAM_BANDWIDTH_EFFICIENCY] = 45;
- cap->data[ASIC_DATA_CLOCKSOURCES_NUM] = 2;
cap->data[ASIC_DATA_MC_LATENCY] = 5000;
cap->data[ASIC_DATA_STUTTERMODE] = 0x200A;
cap->data[ASIC_DATA_VIEWPORT_PIXEL_GRANULARITY] = 2;
- cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS] = 2;
cap->data[ASIC_DATA_MEMORYTYPE_MULTIPLIER] = 2;
cap->data[ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ] = 100;
- cap->data[ASIC_DATA_NUM_OF_VIDEO_PLANES] = 1;
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 3;
cap->data[ASIC_DATA_DOWNSCALE_LIMIT] = 150;
/* ASIC basic capability */
@@ -135,9 +127,6 @@ void carrizo_asic_capability_create(struct asic_capability *cap,
{
/* Stoney is the same DCE11, but only two pipes, three digs.
* and HW added 64bit back for non SG */
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 2;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 2;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 2;
/*3 DP MST per connector, limited by number of pipe and number
* of Dig.*/
cap->data[ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR] = 2;
diff --git a/drivers/gpu/drm/amd/dal/dc/asic_capability/hawaii_asic_capability.c b/drivers/gpu/drm/amd/dal/dc/asic_capability/hawaii_asic_capability.c
index d5eb323f5e87..6678053d4601 100644
--- a/drivers/gpu/drm/amd/dal/dc/asic_capability/hawaii_asic_capability.c
+++ b/drivers/gpu/drm/amd/dal/dc/asic_capability/hawaii_asic_capability.c
@@ -54,11 +54,6 @@ void dal_hawaii_asic_capability_create(struct asic_capability *cap,
uint32_t mc_seq_misc0;
/* ASIC data */
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_DIGFE_NUM] = 6;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 6;
- cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS] = 2;
cap->data[ASIC_DATA_MIN_DISPCLK_FOR_UNDERSCAN] = 300000;
cap->data[ASIC_DATA_DCE_VERSION] = 0x80; /* DCE 8.0 */
@@ -67,7 +62,6 @@ void dal_hawaii_asic_capability_create(struct asic_capability *cap,
* in other words 246528 bits. */
cap->data[ASIC_DATA_LINEBUFFER_SIZE] = 1712 * 144;
cap->data[ASIC_DATA_DRAM_BANDWIDTH_EFFICIENCY] = 70;
- cap->data[ASIC_DATA_CLOCKSOURCES_NUM] = 3;
cap->data[ASIC_DATA_MC_LATENCY] = 5000; /* units of ns */
/* StutterModeEnhanced; Quad DMIF Buffer */
@@ -75,9 +69,6 @@ void dal_hawaii_asic_capability_create(struct asic_capability *cap,
cap->data[ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR] = 4;
cap->data[ASIC_DATA_VIEWPORT_PIXEL_GRANULARITY] = 2;
- /* 3 HDMI support by default */
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 3;
-
cap->data[ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ] = 40;
mc_seq_misc0 = dm_read_reg(cap->ctx, mmMC_SEQ_MISC0);
diff --git a/drivers/gpu/drm/amd/dal/dc/asic_capability/polaris10_asic_capability.c b/drivers/gpu/drm/amd/dal/dc/asic_capability/polaris10_asic_capability.c
index 9e4fdfaaf76c..15b1f7a59066 100644
--- a/drivers/gpu/drm/amd/dal/dc/asic_capability/polaris10_asic_capability.c
+++ b/drivers/gpu/drm/amd/dal/dc/asic_capability/polaris10_asic_capability.c
@@ -47,23 +47,6 @@ void polaris10_asic_capability_create(struct asic_capability *cap,
{
uint32_t e_fuse_setting;
/* ASIC data */
- if (ASIC_REV_IS_POLARIS11_M(init->hw_internal_rev)) {
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 5;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 5;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 5;
- cap->data[ASIC_DATA_DIGFE_NUM] = 5;
- cap->data[ASIC_DATA_CLOCKSOURCES_NUM] = 7;
- cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS] = 5;
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 5;
- } else {
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 6;
- cap->data[ASIC_DATA_DIGFE_NUM] = 6;
- cap->data[ASIC_DATA_CLOCKSOURCES_NUM] = 8;
- cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS] = 6;
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 6;
- }
cap->data[ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR] = 4;
cap->data[ASIC_DATA_DCE_VERSION] = 0x112; /* DCE 11 */
@@ -76,7 +59,6 @@ void polaris10_asic_capability_create(struct asic_capability *cap,
cap->data[ASIC_DATA_MEMORYTYPE_MULTIPLIER] = 4;
cap->data[ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ] = 100;
- cap->data[ASIC_DATA_NUM_OF_VIDEO_PLANES] = 0;
cap->data[ASIC_DATA_MIN_DISPCLK_FOR_UNDERSCAN] = 300000;
diff --git a/drivers/gpu/drm/amd/dal/dc/asic_capability/tonga_asic_capability.c b/drivers/gpu/drm/amd/dal/dc/asic_capability/tonga_asic_capability.c
index 8fa4d856a134..2475de9c0bf5 100644
--- a/drivers/gpu/drm/amd/dal/dc/asic_capability/tonga_asic_capability.c
+++ b/drivers/gpu/drm/amd/dal/dc/asic_capability/tonga_asic_capability.c
@@ -47,27 +47,18 @@ void tonga_asic_capability_create(struct asic_capability *cap,
{
uint32_t e_fuse_setting;
/* ASIC data */
- cap->data[ASIC_DATA_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM] = 6;
- cap->data[ASIC_DATA_DIGFE_NUM] = 6;
- cap->data[ASIC_DATA_LINEBUFFER_NUM] = 6;
-
cap->data[ASIC_DATA_LINEBUFFER_SIZE] = 1712 * 144;
cap->data[ASIC_DATA_DRAM_BANDWIDTH_EFFICIENCY] = 70;
- cap->data[ASIC_DATA_CLOCKSOURCES_NUM] = 3;
cap->data[ASIC_DATA_MC_LATENCY] = 5000;
cap->data[ASIC_DATA_STUTTERMODE] = 0x2002;
cap->data[ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR] = 4;
cap->data[ASIC_DATA_VIEWPORT_PIXEL_GRANULARITY] = 2;
- cap->data[ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM] = 3;
cap->data[ASIC_DATA_MIN_DISPCLK_FOR_UNDERSCAN] = 300000;
cap->data[ASIC_DATA_DCE_VERSION] = 0x100; /* DCE 11 */
- cap->data[ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS] = 2;
cap->data[ASIC_DATA_MEMORYTYPE_MULTIPLIER] = 4;
cap->data[ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ] = 40;
- cap->data[ASIC_DATA_NUM_OF_VIDEO_PLANES] = 0;
/* ASIC basic capability */
cap->caps.IS_FUSION = true;
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
index 47db0fd82fe6..c66cb6607752 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
@@ -504,6 +504,8 @@ static bool construct(struct core_dc *dc,
dc_ctx->driver_context = init_params->driver;
dc_ctx->dc = &dc->public;
+ dc->asic_id = init_params->asic_id;
+
/* Create logger */
logger = dal_logger_create(dc_ctx);
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
index 44ed32575b02..c2eb27a257d6 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
@@ -37,6 +37,7 @@
#include "stream_encoder.h"
#include "link_encoder.h"
#include "hw_sequencer.h"
+#include "resource.h"
#include "fixed31_32.h"
#include "adapter/adapter_service.h"
#include "include/asic_capability_interface.h"
@@ -1566,8 +1567,7 @@ bool dc_link_setup_psr(const struct dc_link *dc_link,
asic_cap->caps.SKIP_PSR_WAIT_FOR_PLL_LOCK_BIT;
psr_context.numberOfControllers =
- link->link_enc->adapter_service->asic_cap->
- data[ASIC_DATA_CONTROLLERS_NUM];
+ link->dc->res_pool->res_cap->num_timing_generator;
psr_context.rfb_update_auto_en = true;
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
index 204b49bae9ee..276833847c4d 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
@@ -133,10 +133,10 @@ bool resource_construct(
unsigned int num_virtual_links,
struct core_dc *dc,
struct resource_pool *pool,
- const struct resource_caps *caps,
const struct resource_create_funcs *create_funcs)
{
struct dc_context *ctx = dc->ctx;
+ const struct resource_caps *caps = pool->res_cap;
int i;
unsigned int num_audio = caps->num_audio;
struct resource_straps straps = {0};
diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
index f1ca073fcaa7..42c1eff389a3 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
@@ -360,8 +360,10 @@ static const struct dce110_opp_reg_offsets dce100_opp_reg_offsets[] = {
};
static const struct resource_caps res_cap = {
+ .num_timing_generator = 6,
.num_audio = 6,
- .num_stream_encoder = 6
+ .num_stream_encoder = 6,
+ .num_pll = 3
};
#define CTX ctx
@@ -855,6 +857,7 @@ static bool construct(
struct dm_pp_static_clock_info static_clk_info = {0};
pool->base.adapter_srv = as;
+ pool->base.res_cap = &res_cap;
pool->base.funcs = &dce100_res_pool_funcs;
pool->base.underlay_pipe_index = -1;
@@ -936,7 +939,7 @@ static bool construct(
* Resource + asic cap harcoding *
*************************************************/
pool->base.underlay_pipe_index = -1;
- pool->base.pipe_count = dal_adapter_service_get_func_controllers_num(as);
+ pool->base.pipe_count = res_cap.num_timing_generator;
pool->base.scaler_filter = dal_scaler_filter_create(ctx);
dc->public.caps.max_downscale_ratio = 200;
dc->public.caps.i2c_speed_in_khz = 40;
@@ -1000,7 +1003,7 @@ static bool construct(
}
if (!resource_construct(num_virtual_links, dc, &pool->base,
- &res_cap, &res_create_funcs))
+ &res_create_funcs))
goto res_create_fail;
/* Create hardware sequencer */
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
index db7686842e36..6e6e2a629175 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
@@ -325,9 +325,20 @@ static const struct dce110_clk_src_reg_offsets dce110_clk_src_reg_offsets[] = {
};
-static const struct resource_caps res_cap = {
- .num_audio = 3,
- .num_stream_encoder = 3
+static const struct resource_caps carrizo_resource_cap = {
+ .num_timing_generator = 3,
+ .num_video_plane = 1,
+ .num_audio = 3,
+ .num_stream_encoder = 3,
+ .num_pll = 2,
+};
+
+static const struct resource_caps stoney_resource_cap = {
+ .num_timing_generator = 2,
+ .num_video_plane = 1,
+ .num_audio = 3,
+ .num_stream_encoder = 3,
+ .num_pll = 2,
};
#define CTX ctx
@@ -1140,6 +1151,15 @@ enum clocks_state dce110_resource_convert_clock_state_pp_to_dc(
return dc_clocks_state;
}
+const struct resource_caps *dce110_resource_cap(
+ struct hw_asic_id *asic_id)
+{
+ if (ASIC_REV_IS_STONEY(asic_id->hw_internal_rev))
+ return &stoney_resource_cap;
+ else
+ return &carrizo_resource_cap;
+}
+
static bool construct(
struct adapter_service *as,
uint8_t num_virtual_links,
@@ -1155,19 +1175,15 @@ static bool construct(
struct resource_straps straps = {0};
pool->base.adapter_srv = as;
+ pool->base.res_cap = dce110_resource_cap(&dc->asic_id);
pool->base.funcs = &dce110_res_pool_funcs;
/*************************************************
* Resource + asic cap harcoding *
*************************************************/
- pool->base.pipe_count = 3;
- pool->base.underlay_pipe_index = 3;
-
- if (ASIC_REV_IS_STONEY(asic_id.hw_internal_rev)) {
- pool->base.pipe_count = 2;
- pool->base.underlay_pipe_index = 2;
- }
+ pool->base.pipe_count = pool->base.res_cap->num_timing_generator;
+ pool->base.underlay_pipe_index = pool->base.pipe_count;
dc->public.caps.max_downscale_ratio = 150;
dc->public.caps.i2c_speed_in_khz = 100;
@@ -1175,8 +1191,6 @@ static bool construct(
/*************************************************
* Create resources *
*************************************************/
-
-
pool->base.stream_engines.engine.ENGINE_ID_DIGA = 1;
pool->base.stream_engines.engine.ENGINE_ID_DIGB = 1;
pool->base.stream_engines.engine.ENGINE_ID_DIGC = 1;
@@ -1299,7 +1313,7 @@ static bool construct(
underlay_create(ctx, &pool->base);
if (!resource_construct(num_virtual_links, dc, &pool->base,
- &res_cap, &res_create_funcs))
+ &res_create_funcs))
goto res_create_fail;
/* Create hardware sequencer */
diff --git a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
index ab203dfd2914..485221696c26 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
@@ -375,9 +375,18 @@ static const struct dce112_clk_src_reg_offsets dce112_clk_src_reg_offsets[] = {
}
};
-static const struct resource_caps res_cap = {
- .num_audio = 6,
- .num_stream_encoder = 6
+static const struct resource_caps polaris_10_resource_cap = {
+ .num_timing_generator = 6,
+ .num_audio = 6,
+ .num_stream_encoder = 6,
+ .num_pll = 8, /* why 8? 6 combo PHY PLL + 2 regular PLLs? */
+};
+
+static const struct resource_caps polaris_11_resource_cap = {
+ .num_timing_generator = 5,
+ .num_audio = 5,
+ .num_stream_encoder = 5,
+ .num_pll = 8, /* why 8? 6 combo PHY PLL + 2 regular PLLs? */
};
#define CTX ctx
@@ -1155,6 +1164,15 @@ static void bw_calcs_data_update_from_pplib(struct core_dc *dc)
dm_pp_notify_wm_clock_changes(dc->ctx, &clk_ranges);
}
+const struct resource_caps *dce112_resource_cap(
+ struct hw_asic_id *asic_id)
+{
+ if (ASIC_REV_IS_POLARIS11_M(asic_id->hw_internal_rev))
+ return &polaris_11_resource_cap;
+ else
+ return &polaris_10_resource_cap;
+}
+
static bool construct(
struct adapter_service *adapter_serv,
uint8_t num_virtual_links,
@@ -1166,14 +1184,14 @@ static bool construct(
struct dm_pp_static_clock_info static_clk_info = {0};
pool->base.adapter_srv = adapter_serv;
+ pool->base.res_cap = dce112_resource_cap(&dc->asic_id);
pool->base.funcs = &dce112_res_pool_funcs;
/*************************************************
* Resource + asic cap harcoding *
*************************************************/
pool->base.underlay_pipe_index = -1;
- pool->base.pipe_count =
- dal_adapter_service_get_func_controllers_num(adapter_serv);
+ pool->base.pipe_count = pool->base.res_cap->num_timing_generator;
dc->public.caps.max_downscale_ratio = 200;
dc->public.caps.i2c_speed_in_khz = 100;
@@ -1332,8 +1350,8 @@ static bool construct(
}
}
- if (!resource_construct(num_virtual_links, dc,
- &pool->base, &res_cap, &res_create_funcs))
+ if (!resource_construct(num_virtual_links, dc, &pool->base,
+ &res_create_funcs))
goto res_create_fail;
/* Create hardware sequencer */
diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
index 506b93f816df..d557fcc40ccb 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
@@ -350,8 +350,10 @@ static const struct dce110_clk_src_reg_offsets dce80_clk_src_reg_offsets[] = {
};
static const struct resource_caps res_cap = {
- .num_audio = 6,
- .num_stream_encoder = 6
+ .num_timing_generator = 6,
+ .num_audio = 6,
+ .num_stream_encoder = 6,
+ .num_pll = 3,
};
#define CTX ctx
@@ -848,6 +850,7 @@ static bool construct(
struct dm_pp_static_clock_info static_clk_info = {0};
pool->base.adapter_srv = as;
+ pool->base.res_cap = &res_cap;
pool->base.funcs = &dce80_res_pool_funcs;
@@ -855,7 +858,7 @@ static bool construct(
* Resource + asic cap harcoding *
*************************************************/
pool->base.underlay_pipe_index = -1;
- pool->base.pipe_count = dal_adapter_service_get_func_controllers_num(as);
+ pool->base.pipe_count = res_cap.num_timing_generator;
dc->public.caps.max_downscale_ratio = 200;
dc->public.caps.i2c_speed_in_khz = 40;
@@ -986,7 +989,7 @@ static bool construct(
}
if (!resource_construct(num_virtual_links, dc, &pool->base,
- &res_cap, &res_create_funcs))
+ &res_create_funcs))
goto res_create_fail;
/* Create hardware sequencer */
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
index 826ae7a8998f..668e6c826090 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
@@ -17,6 +17,7 @@
struct core_dc {
struct dc public;
struct dc_context *ctx;
+ struct hw_asic_id asic_id;
uint8_t link_count;
struct core_link *links[MAX_PIPES * 2];
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
index 5ae6ed603d62..2c0072265d8b 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
@@ -270,6 +270,7 @@ struct resource_pool {
struct irq_service *irqs;
const struct resource_funcs *funcs;
+ const struct resource_caps *res_cap;
};
struct pipe_ctx {
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/resource.h b/drivers/gpu/drm/amd/dal/dc/inc/resource.h
index 20a3b08442de..4e64e45e897b 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/resource.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/resource.h
@@ -37,8 +37,11 @@ enum dce_version resource_parse_asic_id(
struct hw_asic_id asic_id);
struct resource_caps {
+ int num_timing_generator;
+ int num_video_plane;
int num_audio;
int num_stream_encoder;
+ int num_pll;
};
struct resource_straps {
@@ -64,7 +67,6 @@ bool resource_construct(
unsigned int num_virtual_links,
struct core_dc *dc,
struct resource_pool *pool,
- const struct resource_caps *caps,
const struct resource_create_funcs *create_funcs);
struct resource_pool *dc_create_resource_pool(struct adapter_service *adapter_serv,
diff --git a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
index e9c31c32cc25..52bf06b8b507 100644
--- a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
+++ b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
@@ -145,18 +145,8 @@ enum adapter_feature_id {
FEATURE_SET_06_START = FEATURE_DCP_PROGRAMMING_WA,
FEATURE_SET_06_END = FEATURE_SET_06_START + 31,
- /* UInt set, 1 entry: Maximum co-functional non-DP displays */
- FEATURE_MAX_COFUNC_NON_DP_DISPLAYS = FEATURE_SET_06_END + 1,
- FEATURE_SET_07_START = FEATURE_MAX_COFUNC_NON_DP_DISPLAYS,
- FEATURE_SET_07_END = FEATURE_SET_07_START + 31,
-
- /* UInt set, 1 entry: Number of supported HDMI connection */
- FEATURE_SUPPORTED_HDMI_CONNECTION_NUM = FEATURE_SET_07_END + 1,
- FEATURE_SET_08_START = FEATURE_SUPPORTED_HDMI_CONNECTION_NUM,
- FEATURE_SET_08_END = FEATURE_SET_08_START + 31,
-
/* UInt set, 1 entry: Maximum number of controllers */
- FEATURE_MAX_CONTROLLER_NUM = FEATURE_SET_08_END + 1,
+ FEATURE_MAX_CONTROLLER_NUM = FEATURE_SET_06_END + 1,
FEATURE_SET_09_START = FEATURE_MAX_CONTROLLER_NUM,
FEATURE_SET_09_END = FEATURE_SET_09_START + 31,
@@ -336,14 +326,6 @@ bool dal_adapter_service_get_firmware_info(
struct adapter_service *as,
struct firmware_info *info);
-/* Get number of controllers */
-uint8_t dal_adapter_service_get_func_controllers_num(
- struct adapter_service *as);
-
-/* Get number of stream engines */
-uint8_t dal_adapter_service_get_stream_engines_num(
- struct adapter_service *as);
-
/* Get number of spread spectrum entries from BIOS */
uint32_t dal_adapter_service_get_ss_info_num(
struct adapter_service *as,
diff --git a/drivers/gpu/drm/amd/dal/include/asic_capability_types.h b/drivers/gpu/drm/amd/dal/include/asic_capability_types.h
index 7841662108e8..1f78dc9f52f3 100644
--- a/drivers/gpu/drm/amd/dal/include/asic_capability_types.h
+++ b/drivers/gpu/drm/amd/dal/include/asic_capability_types.h
@@ -84,30 +84,19 @@ struct asic_bugs {
*/
enum asic_data {
ASIC_DATA_FIRST = 0,
- ASIC_DATA_CONTROLLERS_NUM = ASIC_DATA_FIRST,
- ASIC_DATA_FUNCTIONAL_CONTROLLERS_NUM,
- ASIC_DATA_DCE_VERSION,
+ ASIC_DATA_DCE_VERSION = ASIC_DATA_FIRST,
ASIC_DATA_DCE_VERSION_MINOR,
- ASIC_DATA_VRAM_TYPE,
ASIC_DATA_VRAM_BITWIDTH,
- ASIC_DATA_FEATURE_FLAGS,
- ASIC_DATA_LINEBUFFER_NUM,
ASIC_DATA_LINEBUFFER_SIZE,
ASIC_DATA_DRAM_BANDWIDTH_EFFICIENCY,
ASIC_DATA_MC_LATENCY,
ASIC_DATA_MC_LATENCY_SLOW,
- ASIC_DATA_CLOCKSOURCES_NUM,
ASIC_DATA_MEMORYTYPE_MULTIPLIER,
ASIC_DATA_STUTTERMODE,
ASIC_DATA_PATH_NUM_PER_DPMST_CONNECTOR,
- ASIC_DATA_MAX_COFUNC_NONDP_DISPLAYS,
- ASIC_DATA_REVISION_ID,
ASIC_DATA_MAX_UNDERSCAN_PERCENTAGE,
ASIC_DATA_VIEWPORT_PIXEL_GRANULARITY,
- ASIC_DATA_DIGFE_NUM,
- ASIC_DATA_SUPPORTED_HDMI_CONNECTION_NUM,
ASIC_DATA_MIN_DISPCLK_FOR_UNDERSCAN,
- ASIC_DATA_NUM_OF_VIDEO_PLANES,
ASIC_DATA_DEFAULT_I2C_SPEED_IN_KHZ,
ASIC_DATA_DOWNSCALE_LIMIT,
ASIC_DATA_MAX_NUMBER /* end of enum */
--
2.10.1
More information about the amd-gfx
mailing list