···11+/*22+ * Copyright 2020 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)2626+#ifndef __DAL_HW_FACTORY_DCN30_H__2727+#define __DAL_HW_FACTORY_DCN30_H__2828+2929+/* Initialize HW factory function pointers and pin info */3030+void dal_hw_factory_dcn30_init(struct hw_factory *factory);3131+3232+#endif /* __DAL_HW_FACTORY_DCN30_H__ */3333+#endif
···11+/*22+ * Copyright 2020 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+2626+/*2727+ * Pre-requisites: headers required by header of this unit2828+ */2929+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)3030+#include "hw_translate_dcn30.h"3131+3232+#include "dm_services.h"3333+#include "include/gpio_types.h"3434+#include "../hw_translate.h"3535+3636+3737+#include "sienna_cichlid_ip_offset.h"3838+#include "dcn/dcn_3_0_0_offset.h"3939+#include "dcn/dcn_3_0_0_sh_mask.h"4040+4141+#include "nbio/nbio_7_4_offset.h"4242+4343+#include "dcn/dpcs_3_0_0_offset.h"4444+#include "dcn/dpcs_3_0_0_sh_mask.h"4545+4646+#include "mmhub/mmhub_2_0_0_offset.h"4747+#include "mmhub/mmhub_2_0_0_sh_mask.h"4848+/* begin *********************4949+ * macros to expend register list macro defined in HW object header file */5050+5151+/* DCN */5252+#define block HPD5353+#define reg_num 05454+5555+#undef BASE_INNER5656+#define BASE_INNER(seg) DCN_BASE__INST0_SEG ## seg5757+5858+#define BASE(seg) BASE_INNER(seg)5959+6060+#undef REG6161+#define REG(reg_name)\6262+ BASE(mm ## reg_name ## _BASE_IDX) + mm ## reg_name6363+#define SF_HPD(reg_name, field_name, post_fix)\6464+ .field_name = reg_name ## __ ## field_name ## post_fix6565+6666+6767+/* macros to expend register list macro defined in HW object header file6868+ * end *********************/6969+7070+7171+static bool offset_to_id(7272+ uint32_t offset,7373+ uint32_t mask,7474+ enum gpio_id *id,7575+ uint32_t *en)7676+{7777+ switch (offset) {7878+ /* GENERIC */7979+ case REG(DC_GPIO_GENERIC_A):8080+ *id = GPIO_ID_GENERIC;8181+ switch (mask) {8282+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICA_A_MASK:8383+ *en = GPIO_GENERIC_A;8484+ return true;8585+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICB_A_MASK:8686+ *en = GPIO_GENERIC_B;8787+ return true;8888+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICC_A_MASK:8989+ *en = GPIO_GENERIC_C;9090+ return true;9191+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICD_A_MASK:9292+ *en = GPIO_GENERIC_D;9393+ return true;9494+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICE_A_MASK:9595+ *en = GPIO_GENERIC_E;9696+ return true;9797+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICF_A_MASK:9898+ *en = GPIO_GENERIC_F;9999+ return true;100100+ case DC_GPIO_GENERIC_A__DC_GPIO_GENERICG_A_MASK:101101+ *en = GPIO_GENERIC_G;102102+ return true;103103+ default:104104+ ASSERT_CRITICAL(false);105105+ return false;106106+ }107107+ break;108108+ /* HPD */109109+ case REG(DC_GPIO_HPD_A):110110+ *id = GPIO_ID_HPD;111111+ switch (mask) {112112+ case DC_GPIO_HPD_A__DC_GPIO_HPD1_A_MASK:113113+ *en = GPIO_HPD_1;114114+ return true;115115+ case DC_GPIO_HPD_A__DC_GPIO_HPD2_A_MASK:116116+ *en = GPIO_HPD_2;117117+ return true;118118+ case DC_GPIO_HPD_A__DC_GPIO_HPD3_A_MASK:119119+ *en = GPIO_HPD_3;120120+ return true;121121+ case DC_GPIO_HPD_A__DC_GPIO_HPD4_A_MASK:122122+ *en = GPIO_HPD_4;123123+ return true;124124+ case DC_GPIO_HPD_A__DC_GPIO_HPD5_A_MASK:125125+ *en = GPIO_HPD_5;126126+ return true;127127+ case DC_GPIO_HPD_A__DC_GPIO_HPD6_A_MASK:128128+ *en = GPIO_HPD_6;129129+ return true;130130+ default:131131+ ASSERT_CRITICAL(false);132132+ return false;133133+ }134134+ break;135135+ /* REG(DC_GPIO_GENLK_MASK */136136+ case REG(DC_GPIO_GENLK_A):137137+ *id = GPIO_ID_GSL;138138+ switch (mask) {139139+ case DC_GPIO_GENLK_A__DC_GPIO_GENLK_CLK_A_MASK:140140+ *en = GPIO_GSL_GENLOCK_CLOCK;141141+ return true;142142+ case DC_GPIO_GENLK_A__DC_GPIO_GENLK_VSYNC_A_MASK:143143+ *en = GPIO_GSL_GENLOCK_VSYNC;144144+ return true;145145+ case DC_GPIO_GENLK_A__DC_GPIO_SWAPLOCK_A_A_MASK:146146+ *en = GPIO_GSL_SWAPLOCK_A;147147+ return true;148148+ case DC_GPIO_GENLK_A__DC_GPIO_SWAPLOCK_B_A_MASK:149149+ *en = GPIO_GSL_SWAPLOCK_B;150150+ return true;151151+ default:152152+ ASSERT_CRITICAL(false);153153+ return false;154154+ }155155+ break;156156+ /* DDC */157157+ /* we don't care about the GPIO_ID for DDC158158+ * in DdcHandle it will use GPIO_ID_DDC_DATA/GPIO_ID_DDC_CLOCK159159+ * directly in the create method */160160+ case REG(DC_GPIO_DDC1_A):161161+ *en = GPIO_DDC_LINE_DDC1;162162+ return true;163163+ case REG(DC_GPIO_DDC2_A):164164+ *en = GPIO_DDC_LINE_DDC2;165165+ return true;166166+ case REG(DC_GPIO_DDC3_A):167167+ *en = GPIO_DDC_LINE_DDC3;168168+ return true;169169+ case REG(DC_GPIO_DDC4_A):170170+ *en = GPIO_DDC_LINE_DDC4;171171+ return true;172172+ case REG(DC_GPIO_DDC5_A):173173+ *en = GPIO_DDC_LINE_DDC5;174174+ return true;175175+ case REG(DC_GPIO_DDC6_A):176176+ *en = GPIO_DDC_LINE_DDC6;177177+ return true;178178+ case REG(DC_GPIO_DDCVGA_A):179179+ *en = GPIO_DDC_LINE_DDC_VGA;180180+ return true;181181+182182+// case REG(DC_GPIO_I2CPAD_A): not exit183183+// case REG(DC_GPIO_PWRSEQ_A):184184+// case REG(DC_GPIO_PAD_STRENGTH_1):185185+// case REG(DC_GPIO_PAD_STRENGTH_2):186186+// case REG(DC_GPIO_DEBUG):187187+ /* UNEXPECTED */188188+ default:189189+// case REG(DC_GPIO_SYNCA_A): not exist190190+ ASSERT_CRITICAL(false);191191+ return false;192192+ }193193+}194194+195195+static bool id_to_offset(196196+ enum gpio_id id,197197+ uint32_t en,198198+ struct gpio_pin_info *info)199199+{200200+ bool result = true;201201+202202+ switch (id) {203203+ case GPIO_ID_DDC_DATA:204204+ info->mask = DC_GPIO_DDC6_A__DC_GPIO_DDC6DATA_A_MASK;205205+ switch (en) {206206+ case GPIO_DDC_LINE_DDC1:207207+ info->offset = REG(DC_GPIO_DDC1_A);208208+ break;209209+ case GPIO_DDC_LINE_DDC2:210210+ info->offset = REG(DC_GPIO_DDC2_A);211211+ break;212212+ case GPIO_DDC_LINE_DDC3:213213+ info->offset = REG(DC_GPIO_DDC3_A);214214+ break;215215+ case GPIO_DDC_LINE_DDC4:216216+ info->offset = REG(DC_GPIO_DDC4_A);217217+ break;218218+ case GPIO_DDC_LINE_DDC5:219219+ info->offset = REG(DC_GPIO_DDC5_A);220220+ break;221221+ case GPIO_DDC_LINE_DDC6:222222+ info->offset = REG(DC_GPIO_DDC6_A);223223+ break;224224+ case GPIO_DDC_LINE_DDC_VGA:225225+ info->offset = REG(DC_GPIO_DDCVGA_A);226226+ break;227227+ case GPIO_DDC_LINE_I2C_PAD:228228+ default:229229+ ASSERT_CRITICAL(false);230230+ result = false;231231+ }232232+ break;233233+ case GPIO_ID_DDC_CLOCK:234234+ info->mask = DC_GPIO_DDC6_A__DC_GPIO_DDC6CLK_A_MASK;235235+ switch (en) {236236+ case GPIO_DDC_LINE_DDC1:237237+ info->offset = REG(DC_GPIO_DDC1_A);238238+ break;239239+ case GPIO_DDC_LINE_DDC2:240240+ info->offset = REG(DC_GPIO_DDC2_A);241241+ break;242242+ case GPIO_DDC_LINE_DDC3:243243+ info->offset = REG(DC_GPIO_DDC3_A);244244+ break;245245+ case GPIO_DDC_LINE_DDC4:246246+ info->offset = REG(DC_GPIO_DDC4_A);247247+ break;248248+ case GPIO_DDC_LINE_DDC5:249249+ info->offset = REG(DC_GPIO_DDC5_A);250250+ break;251251+ case GPIO_DDC_LINE_DDC6:252252+ info->offset = REG(DC_GPIO_DDC6_A);253253+ break;254254+ case GPIO_DDC_LINE_DDC_VGA:255255+ info->offset = REG(DC_GPIO_DDCVGA_A);256256+ break;257257+ case GPIO_DDC_LINE_I2C_PAD:258258+ default:259259+ ASSERT_CRITICAL(false);260260+ result = false;261261+ }262262+ break;263263+ case GPIO_ID_GENERIC:264264+ info->offset = REG(DC_GPIO_GENERIC_A);265265+ switch (en) {266266+ case GPIO_GENERIC_A:267267+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICA_A_MASK;268268+ break;269269+ case GPIO_GENERIC_B:270270+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICB_A_MASK;271271+ break;272272+ case GPIO_GENERIC_C:273273+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICC_A_MASK;274274+ break;275275+ case GPIO_GENERIC_D:276276+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICD_A_MASK;277277+ break;278278+ case GPIO_GENERIC_E:279279+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICE_A_MASK;280280+ break;281281+ case GPIO_GENERIC_F:282282+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICF_A_MASK;283283+ break;284284+ case GPIO_GENERIC_G:285285+ info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICG_A_MASK;286286+ break;287287+ default:288288+ ASSERT_CRITICAL(false);289289+ result = false;290290+ }291291+ break;292292+ case GPIO_ID_HPD:293293+ info->offset = REG(DC_GPIO_HPD_A);294294+ switch (en) {295295+ case GPIO_HPD_1:296296+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD1_A_MASK;297297+ break;298298+ case GPIO_HPD_2:299299+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD2_A_MASK;300300+ break;301301+ case GPIO_HPD_3:302302+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD3_A_MASK;303303+ break;304304+ case GPIO_HPD_4:305305+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD4_A_MASK;306306+ break;307307+ case GPIO_HPD_5:308308+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD5_A_MASK;309309+ break;310310+ case GPIO_HPD_6:311311+ info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD6_A_MASK;312312+ break;313313+ default:314314+ ASSERT_CRITICAL(false);315315+ result = false;316316+ }317317+ break;318318+ case GPIO_ID_GSL:319319+ switch (en) {320320+ case GPIO_GSL_GENLOCK_CLOCK:321321+ /*not implmented*/322322+ ASSERT_CRITICAL(false);323323+ result = false;324324+ break;325325+ case GPIO_GSL_GENLOCK_VSYNC:326326+ /*not implmented*/327327+ ASSERT_CRITICAL(false);328328+ result = false;329329+ break;330330+ case GPIO_GSL_SWAPLOCK_A:331331+ /*not implmented*/332332+ ASSERT_CRITICAL(false);333333+ result = false;334334+ break;335335+ case GPIO_GSL_SWAPLOCK_B:336336+ /*not implmented*/337337+ ASSERT_CRITICAL(false);338338+ result = false;339339+340340+ break;341341+ default:342342+ ASSERT_CRITICAL(false);343343+ result = false;344344+ }345345+ break;346346+ case GPIO_ID_SYNC:347347+ case GPIO_ID_VIP_PAD:348348+ default:349349+ ASSERT_CRITICAL(false);350350+ result = false;351351+ }352352+353353+ if (result) {354354+ info->offset_y = info->offset + 2;355355+ info->offset_en = info->offset + 1;356356+ info->offset_mask = info->offset - 1;357357+358358+ info->mask_y = info->mask;359359+ info->mask_en = info->mask;360360+ info->mask_mask = info->mask;361361+ }362362+363363+ return result;364364+}365365+366366+/* function table */367367+static const struct hw_translate_funcs funcs = {368368+ .offset_to_id = offset_to_id,369369+ .id_to_offset = id_to_offset,370370+};371371+372372+/*373373+ * dal_hw_translate_dcn10_init374374+ *375375+ * @brief376376+ * Initialize Hw translate function pointers.377377+ *378378+ * @param379379+ * struct hw_translate *tr - [out] struct of function pointers380380+ *381381+ */382382+void dal_hw_translate_dcn30_init(struct hw_translate *tr)383383+{384384+ tr->funcs = &funcs;385385+}386386+387387+#endif
···11+/*22+ * Copyright 2020 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)2626+#ifndef __DAL_HW_TRANSLATE_DCN30_H__2727+#define __DAL_HW_TRANSLATE_DCN30_H__2828+2929+struct hw_translate;3030+3131+/* Initialize Hw translate function pointers */3232+void dal_hw_translate_dcn30_init(struct hw_translate *tr);3333+3434+#endif /* __DAL_HW_TRANSLATE_DCN30_H__ */3535+#endif