diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/1059-drm-amd-dal-Use-dce110-audio-for-dce112.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/1059-drm-amd-dal-Use-dce110-audio-for-dce112.patch | 620 |
1 files changed, 620 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/1059-drm-amd-dal-Use-dce110-audio-for-dce112.patch b/common/recipes-kernel/linux/files/1059-drm-amd-dal-Use-dce110-audio-for-dce112.patch new file mode 100644 index 00000000..3b29a25f --- /dev/null +++ b/common/recipes-kernel/linux/files/1059-drm-amd-dal-Use-dce110-audio-for-dce112.patch @@ -0,0 +1,620 @@ +From bd1f37712022f6ca489104cf356f760314f0b1bd Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Wed, 20 Apr 2016 16:42:09 -0400 +Subject: [PATCH 1059/1110] drm/amd/dal: Use dce110 audio for dce112 + +The code and registers are the same for both. No need +to duplicate code. + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/audio/Makefile | 7 - + drivers/gpu/drm/amd/dal/dc/audio/audio_base.c | 6 +- + .../gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.c | 451 --------------------- + .../gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.h | 40 -- + .../amd/dal/dc/audio/dce112/hw_ctx_audio_dce112.h | 47 --- + 5 files changed, 1 insertion(+), 550 deletions(-) + delete mode 100644 drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.c + delete mode 100644 drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.h + delete mode 100644 drivers/gpu/drm/amd/dal/dc/audio/dce112/hw_ctx_audio_dce112.h + +diff --git a/drivers/gpu/drm/amd/dal/dc/audio/Makefile b/drivers/gpu/drm/amd/dal/dc/audio/Makefile +index 9a9a64c..90bdaa6 100644 +--- a/drivers/gpu/drm/amd/dal/dc/audio/Makefile ++++ b/drivers/gpu/drm/amd/dal/dc/audio/Makefile +@@ -33,10 +33,3 @@ AMD_DAL_AUDIO_DCE11 = $(addprefix $(AMDDALPATH)/dc/audio/dce110/,$(AUDIO_DCE11)) + AMD_DAL_FILES += $(AMD_DAL_AUDIO_DCE11) + endif + +-ifdef CONFIG_DRM_AMD_DAL_DCE11_2 +-AUDIO_DCE112 = audio_dce112.o hw_ctx_audio_dce112.o +- +-AMD_DAL_AUDIO_DCE112 = $(addprefix $(AMDDALPATH)/dc/audio/dce112/,$(AUDIO_DCE112)) +- +-AMD_DAL_FILES += $(AMD_DAL_AUDIO_DCE112) +-endif +diff --git a/drivers/gpu/drm/amd/dal/dc/audio/audio_base.c b/drivers/gpu/drm/amd/dal/dc/audio/audio_base.c +index a8137e0..31c600c 100644 +--- a/drivers/gpu/drm/amd/dal/dc/audio/audio_base.c ++++ b/drivers/gpu/drm/amd/dal/dc/audio/audio_base.c +@@ -40,10 +40,6 @@ + #include "dce110/hw_ctx_audio_dce110.h" + #endif + +-#if defined(CONFIG_DRM_AMD_DAL_DCE11_2) +-#include "dce112/audio_dce112.h" +-#include "dce112/hw_ctx_audio_dce112.h" +-#endif + + /***** static function : only used within audio.c *****/ + +@@ -288,7 +284,7 @@ struct audio *dal_audio_create( + #endif + #if defined(CONFIG_DRM_AMD_DAL_DCE11_2) + case DCE_VERSION_11_2: +- return dal_audio_create_dce112(init_data); ++ return dal_audio_create_dce110(init_data); + #endif + default: + BREAK_TO_DEBUGGER(); +diff --git a/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.c b/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.c +deleted file mode 100644 +index 66c32b0..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.c ++++ /dev/null +@@ -1,451 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. +- * +- * Authors: AMD +- * +- */ +- +-#include "dm_services.h" +- +-#include "include/logger_interface.h" +- +-#include "audio_dce112.h" +- +-/***** static functions *****/ +- +-static void destruct(struct audio_dce112 *audio) +-{ +- /*release memory allocated for hw_ctx -- allocated is initiated +- *by audio_dce112 power_up +- *audio->base->hw_ctx = NULL is done within hw-ctx->destroy +- */ +- if (audio->base.hw_ctx) +- audio->base.hw_ctx->funcs->destroy(&(audio->base.hw_ctx)); +- +- /* reset base_audio_block */ +- dal_audio_destruct_base(&audio->base); +-} +- +-static void destroy(struct audio **ptr) +-{ +- struct audio_dce112 *audio = NULL; +- +- audio = container_of(*ptr, struct audio_dce112, base); +- +- destruct(audio); +- +- /* release memory allocated for audio_dce112*/ +- dm_free(audio); +- *ptr = NULL; +-} +- +-/* The inital call of hook function comes from audio object level. +- *The passing object handle "struct audio *audio" point to base object +- *already.There is not need to get base object from audio_dce112. +- */ +- +-/** +-* setup +-* +-* @brief +-* setup Audio HW block, to be called by dal_audio_setup +-* +-*/ +-static enum audio_result setup( +- struct audio *audio, +- struct audio_output *output, +- struct audio_info *info) +-{ +- switch (output->signal) { +- case SIGNAL_TYPE_HDMI_TYPE_A: +- /*setup HDMI audio engine*/ +- audio->hw_ctx->funcs->enable_afmt_clock( +- audio->hw_ctx, +- output->engine_id, +- true); +- audio->hw_ctx->funcs->setup_hdmi_audio( +- audio->hw_ctx, output->engine_id, &output->crtc_info); +- +- audio->hw_ctx->funcs->setup_azalia( +- audio->hw_ctx, +- output->engine_id, +- output->signal, +- &output->crtc_info, +- &output->pll_info, +- info); +- break; +- +- case SIGNAL_TYPE_WIRELESS: +- /* setup Azalia block for Wireless Display - This +- is different than for wired +- displays because there is no +- DIG to program.*/ +- /*TODO: +- audio->hw_ctx->funcs->setup_azalia_for_vce( +- audio->hw_ctx, +- audio->signal, +- audio->crtc_info, +- info); +- */ +- break; +- case SIGNAL_TYPE_DISPLAY_PORT: +- case SIGNAL_TYPE_DISPLAY_PORT_MST: +- case SIGNAL_TYPE_EDP: +- /* setup DP audio engine will be done at enable output */ +- +- /* setup Azalia block*/ +- audio->hw_ctx->funcs->setup_azalia( +- audio->hw_ctx, +- output->engine_id, +- output->signal, +- &output->crtc_info, +- &output->pll_info, +- info); +- +- break; +- default: +- return AUDIO_RESULT_ERROR; +- } +- +- return AUDIO_RESULT_OK; +-} +- +-/** +-* enable_output +-* +-* @brief +-* enable Audio HW block, to be called by dal_audio_enable_output +-*/ +-static enum audio_result enable_output( +- struct audio *audio, +- enum engine_id engine_id, +- enum signal_type signal) +-{ +- /* enable audio output */ +- switch (signal) { +- case SIGNAL_TYPE_HDMI_TYPE_A: +- break; +- case SIGNAL_TYPE_DISPLAY_PORT: +- case SIGNAL_TYPE_DISPLAY_PORT_MST: +- case SIGNAL_TYPE_EDP: { +- /* enable AFMT clock before enable audio*/ +- audio->hw_ctx->funcs->enable_afmt_clock( +- audio->hw_ctx, engine_id, true); +- /* setup DP audio engine */ +- audio->hw_ctx->funcs->setup_dp_audio( +- audio->hw_ctx, engine_id); +- /* enabl DP audio packets will be done at unblank */ +- audio->hw_ctx->funcs->enable_dp_audio( +- audio->hw_ctx, engine_id); +- } +- break; +- case SIGNAL_TYPE_WIRELESS: +- /* route audio to VCE block */ +- audio->hw_ctx->funcs->setup_vce_audio(audio->hw_ctx); +- break; +- default: +- return AUDIO_RESULT_ERROR; +- } +- return AUDIO_RESULT_OK; +-} +- +-/** +-* disable_output +-* +-* @brief +-* disable Audio HW block, to be called by dal_audio_disable_output +-* +-*/ +-static enum audio_result disable_output( +- struct audio *audio, +- enum engine_id engine_id, +- enum signal_type signal) +-{ +- switch (signal) { +- case SIGNAL_TYPE_HDMI_TYPE_A: +- case SIGNAL_TYPE_WIRELESS: +- /* disable HDMI audio */ +- audio->hw_ctx-> +- funcs->disable_azalia_audio( +- audio->hw_ctx, engine_id); +- audio->hw_ctx-> +- funcs->enable_afmt_clock( +- audio->hw_ctx, engine_id, +- false); +- +- break; +- case SIGNAL_TYPE_DISPLAY_PORT: +- case SIGNAL_TYPE_DISPLAY_PORT_MST: +- case SIGNAL_TYPE_EDP: { +- /* disable DP audio */ +- audio->hw_ctx->funcs->disable_dp_audio( +- audio->hw_ctx, engine_id); +- audio->hw_ctx->funcs->disable_azalia_audio( +- audio->hw_ctx, engine_id); +- audio->hw_ctx->funcs->enable_afmt_clock( +- audio->hw_ctx, engine_id, false); +- } +- break; +- default: +- return AUDIO_RESULT_ERROR; +- } +- +- return AUDIO_RESULT_OK; +-} +- +-/** +-* unmute +-* +-* @brief +-* unmute audio, to be called by dal_audio_unmute +-* +-*/ +-static enum audio_result unmute( +- struct audio *audio, +- enum engine_id engine_id, +- enum signal_type signal) +-{ +- switch (signal) { +- case SIGNAL_TYPE_HDMI_TYPE_A: +- case SIGNAL_TYPE_DISPLAY_PORT: +- case SIGNAL_TYPE_DISPLAY_PORT_MST: +- case SIGNAL_TYPE_EDP: +- /* unmute Azalia audio */ +- audio->hw_ctx->funcs->unmute_azalia_audio( +- audio->hw_ctx, engine_id); +- break; +- case SIGNAL_TYPE_WIRELESS: +- /*Do nothing for wireless display*/ +- break; +- default: +- return AUDIO_RESULT_ERROR; +- } +- return AUDIO_RESULT_OK; +-} +- +-/** +-* mute +-* +-* @brief +-* mute audio, to be called by dal_audio_nmute +-* +-*/ +-static enum audio_result mute( +- struct audio *audio, +- enum engine_id engine_id, +- enum signal_type signal) +-{ +- switch (signal) { +- case SIGNAL_TYPE_HDMI_TYPE_A: +- case SIGNAL_TYPE_DISPLAY_PORT: +- case SIGNAL_TYPE_DISPLAY_PORT_MST: +- case SIGNAL_TYPE_EDP: +- /* mute Azalia audio */ +- audio->hw_ctx->funcs->mute_azalia_audio( +- audio->hw_ctx, engine_id); +- break; +- case SIGNAL_TYPE_WIRELESS: +- /*Do nothing for wireless display*/ +- break; +- default: +- return AUDIO_RESULT_ERROR; +- } +- return AUDIO_RESULT_OK; +-} +- +-/** +-* initialize +-* +-* @brief +-* Perform SW initialization - create audio hw context. Then do HW +-* initialization. this function is called at dal_audio_power_up. +-* +-*/ +-static enum audio_result initialize( +- struct audio *audio) +-{ +- uint8_t audio_endpoint_enum_id = 0; +- +- audio_endpoint_enum_id = audio->id.enum_id; +- +- /* HW CTX already create*/ +- if (audio->hw_ctx != NULL) +- return AUDIO_RESULT_OK; +- +- audio->hw_ctx = dal_hw_ctx_audio_dce112_create( +- audio->ctx, +- audio_endpoint_enum_id); +- +- if (audio->hw_ctx == NULL) +- return AUDIO_RESULT_ERROR; +- +- /* override HW default settings */ +- audio->hw_ctx->funcs->hw_initialize(audio->hw_ctx); +- +- return AUDIO_RESULT_OK; +-} +- +-/* enable multi channel split */ +-static void enable_channel_splitting_mapping( +- struct audio *audio, +- enum engine_id engine_id, +- enum signal_type signal, +- const struct audio_channel_associate_info *audio_mapping, +- bool enable) +-{ +- audio->hw_ctx->funcs->setup_channel_splitting_mapping( +- audio->hw_ctx, +- engine_id, +- signal, +- audio_mapping, enable); +-} +- +-/* get current multi channel split. */ +-static enum audio_result get_channel_splitting_mapping( +- struct audio *audio, +- enum engine_id engine_id, +- struct audio_channel_associate_info *audio_mapping) +-{ +- if (audio->hw_ctx->funcs->get_channel_splitting_mapping( +- audio->hw_ctx, engine_id, audio_mapping)) { +- return AUDIO_RESULT_OK; +- } else { +- return AUDIO_RESULT_ERROR; +- } +-} +- +-/** +-* set_unsolicited_response_payload +-* +-* @brief +-* Set payload value for the unsolicited response +-*/ +-static void set_unsolicited_response_payload( +- struct audio *audio, +- enum audio_payload payload) +-{ +- audio->hw_ctx->funcs->set_unsolicited_response_payload( +- audio->hw_ctx, payload); +-} +- +-/** +-* setup_audio_wall_dto +-* +-* @brief +-* Update audio source clock from hardware context. +-* +-*/ +-static void setup_audio_wall_dto( +- struct audio *audio, +- enum signal_type signal, +- const struct audio_crtc_info *crtc_info, +- const struct audio_pll_info *pll_info) +-{ +- audio->hw_ctx->funcs->setup_audio_wall_dto( +- audio->hw_ctx, signal, crtc_info, pll_info); +-} +- +-/** +-* get_supported_features +-* +-* @brief +-* options and features supported by Audio +-* returns supported engines, signals. +-* features are reported for HW audio/Azalia block rather then Audio object +-* itself the difference for DCE6.x is that MultiStream Audio is now supported +-* +-*/ +-static struct audio_feature_support get_supported_features(struct audio *audio) +-{ +- struct audio_feature_support afs = {0}; +- +- afs.ENGINE_DIGA = 1; +- afs.ENGINE_DIGB = 1; +- afs.ENGINE_DIGC = 1; +- afs.MULTISTREAM_AUDIO = 1; +- +- return afs; +-} +- +-static const struct audio_funcs funcs = { +- .destroy = destroy, +- .setup = setup, +- .enable_output = enable_output, +- .disable_output = disable_output, +- .unmute = unmute, +- .mute = mute, +- .initialize = initialize, +- .enable_channel_splitting_mapping = +- enable_channel_splitting_mapping, +- .get_channel_splitting_mapping = +- get_channel_splitting_mapping, +- .set_unsolicited_response_payload = +- set_unsolicited_response_payload, +- .setup_audio_wall_dto = setup_audio_wall_dto, +- .get_supported_features = get_supported_features, +-}; +- +-static bool construct( +- struct audio_dce112 *audio, +- const struct audio_init_data *init_data) +-{ +- struct audio *base = &audio->base; +- +- /* base audio construct*/ +- if (!dal_audio_construct_base(base, init_data)) +- return false; +- +- /*vtable methods*/ +- base->funcs = &funcs; +- return true; +-} +- +-/* --- audio scope functions --- */ +- +-struct audio *dal_audio_create_dce112( +- const struct audio_init_data *init_data) +-{ +- /*allocate memory for audio_dce112 */ +- struct audio_dce112 *audio = dm_alloc(sizeof(*audio)); +- +- if (audio == NULL) { +- ASSERT_CRITICAL(audio); +- return NULL; +- } +- /*pointer to base_audio_block of audio_dce112 ==> audio base object */ +- if (construct(audio, init_data)) +- return &audio->base; +- +- dal_logger_write( +- init_data->ctx->logger, +- LOG_MAJOR_ERROR, +- LOG_MINOR_COMPONENT_AUDIO, +- "Failed to create audio object for DCE11\n"); +- +- /*release memory allocated if fail */ +- dm_free(audio); +- return NULL; +-} +- +-/* Do not need expose construct_dce112 and destruct_dce112 becuase there is +- *derived object after dce112 +- */ +- +diff --git a/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.h b/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.h +deleted file mode 100644 +index 7c8d71c..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/audio/dce112/audio_dce112.h ++++ /dev/null +@@ -1,40 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. +- * +- * Authors: AMD +- * +- */ +-#ifndef __DAL_AUDIO_DCE_112_H__ +-#define __DAL_AUDIO_DCE_112_H__ +- +-#include "audio/audio.h" +-#include "audio/hw_ctx_audio.h" +-#include "audio/dce112/hw_ctx_audio_dce112.h" +- +-struct audio_dce112 { +- struct audio base; +- /* dce-specific members are following */ +- /* none */ +-}; +- +-struct audio *dal_audio_create_dce112(const struct audio_init_data *init_data); +- +-#endif /*__DAL_AUDIO_DCE_112_H__*/ +diff --git a/drivers/gpu/drm/amd/dal/dc/audio/dce112/hw_ctx_audio_dce112.h b/drivers/gpu/drm/amd/dal/dc/audio/dce112/hw_ctx_audio_dce112.h +deleted file mode 100644 +index af61aad..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/audio/dce112/hw_ctx_audio_dce112.h ++++ /dev/null +@@ -1,47 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. +- * +- * Authors: AMD +- * +- */ +- +-#ifndef __DAL_HW_CTX_AUDIO_DCE112_H__ +-#define __DAL_HW_CTX_AUDIO_DCE112_H__ +- +-#include "audio/hw_ctx_audio.h" +- +-struct hw_ctx_audio_dce112 { +- struct hw_ctx_audio base; +- +- /* azalia stream id 1 based indexing, corresponding to audio GO enumId*/ +- uint32_t azalia_stream_id; +- +- /* azalia stream endpoint register offsets */ +- struct azalia_reg_offsets az_mm_reg_offsets; +- +- /* audio encoder block MM register offset -- associate with DIG FRONT */ +-}; +- +-struct hw_ctx_audio *dal_hw_ctx_audio_dce112_create( +- struct dc_context *ctx, +- uint32_t azalia_stream_id); +- +-#endif /* __DAL_HW_CTX_AUDIO_DCE110_H__ */ +-- +2.7.4 + |