LCOV - code coverage report
Current view: top level - drivers/gpu/drm/amd/display/dc/gpio/dcn30 - hw_translate_dcn30.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 165 0.0 %
Date: 2022-12-09 01:23:36 Functions: 0 3 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright 2020 Advanced Micro Devices, Inc.
       3             :  *
       4             :  * Permission is hereby granted, free of charge, to any person obtaining a
       5             :  * copy of this software and associated documentation files (the "Software"),
       6             :  * to deal in the Software without restriction, including without limitation
       7             :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
       8             :  * and/or sell copies of the Software, and to permit persons to whom the
       9             :  * Software is furnished to do so, subject to the following conditions:
      10             :  *
      11             :  * The above copyright notice and this permission notice shall be included in
      12             :  * all copies or substantial portions of the Software.
      13             :  *
      14             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      15             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      16             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      17             :  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
      18             :  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
      19             :  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
      20             :  * OTHER DEALINGS IN THE SOFTWARE.
      21             :  *
      22             :  * Authors: AMD
      23             :  *
      24             :  */
      25             : 
      26             : /*
      27             :  * Pre-requisites: headers required by header of this unit
      28             :  */
      29             : #include "hw_translate_dcn30.h"
      30             : 
      31             : #include "dm_services.h"
      32             : #include "include/gpio_types.h"
      33             : #include "../hw_translate.h"
      34             : 
      35             : 
      36             : #include "sienna_cichlid_ip_offset.h"
      37             : #include "dcn/dcn_3_0_0_offset.h"
      38             : #include "dcn/dcn_3_0_0_sh_mask.h"
      39             : 
      40             : #include "nbio/nbio_7_4_offset.h"
      41             : 
      42             : #include "dpcs/dpcs_3_0_0_offset.h"
      43             : #include "dpcs/dpcs_3_0_0_sh_mask.h"
      44             : 
      45             : #include "mmhub/mmhub_2_0_0_offset.h"
      46             : #include "mmhub/mmhub_2_0_0_sh_mask.h"
      47             : /* begin *********************
      48             :  * macros to expend register list macro defined in HW object header file */
      49             : 
      50             : /* DCN */
      51             : #define block HPD
      52             : #define reg_num 0
      53             : 
      54             : #undef BASE_INNER
      55             : #define BASE_INNER(seg) DCN_BASE__INST0_SEG ## seg
      56             : 
      57             : #define BASE(seg) BASE_INNER(seg)
      58             : 
      59             : #undef REG
      60             : #define REG(reg_name)\
      61             :                 BASE(mm ## reg_name ## _BASE_IDX) + mm ## reg_name
      62             : #define SF_HPD(reg_name, field_name, post_fix)\
      63             :         .field_name = reg_name ## __ ## field_name ## post_fix
      64             : 
      65             : 
      66             : /* macros to expend register list macro defined in HW object header file
      67             :  * end *********************/
      68             : 
      69             : 
      70           0 : static bool offset_to_id(
      71             :         uint32_t offset,
      72             :         uint32_t mask,
      73             :         enum gpio_id *id,
      74             :         uint32_t *en)
      75             : {
      76           0 :         switch (offset) {
      77             :         /* GENERIC */
      78             :         case REG(DC_GPIO_GENERIC_A):
      79           0 :                 *id = GPIO_ID_GENERIC;
      80           0 :                 switch (mask) {
      81             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICA_A_MASK:
      82           0 :                         *en = GPIO_GENERIC_A;
      83           0 :                         return true;
      84             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICB_A_MASK:
      85           0 :                         *en = GPIO_GENERIC_B;
      86           0 :                         return true;
      87             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICC_A_MASK:
      88           0 :                         *en = GPIO_GENERIC_C;
      89           0 :                         return true;
      90             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICD_A_MASK:
      91           0 :                         *en = GPIO_GENERIC_D;
      92           0 :                         return true;
      93             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICE_A_MASK:
      94           0 :                         *en = GPIO_GENERIC_E;
      95           0 :                         return true;
      96             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICF_A_MASK:
      97           0 :                         *en = GPIO_GENERIC_F;
      98           0 :                         return true;
      99             :                 case DC_GPIO_GENERIC_A__DC_GPIO_GENERICG_A_MASK:
     100           0 :                         *en = GPIO_GENERIC_G;
     101           0 :                         return true;
     102             :                 default:
     103           0 :                         ASSERT_CRITICAL(false);
     104           0 :                         return false;
     105             :                 }
     106             :         break;
     107             :         /* HPD */
     108             :         case REG(DC_GPIO_HPD_A):
     109           0 :                 *id = GPIO_ID_HPD;
     110           0 :                 switch (mask) {
     111             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD1_A_MASK:
     112           0 :                         *en = GPIO_HPD_1;
     113           0 :                         return true;
     114             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD2_A_MASK:
     115           0 :                         *en = GPIO_HPD_2;
     116           0 :                         return true;
     117             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD3_A_MASK:
     118           0 :                         *en = GPIO_HPD_3;
     119           0 :                         return true;
     120             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD4_A_MASK:
     121           0 :                         *en = GPIO_HPD_4;
     122           0 :                         return true;
     123             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD5_A_MASK:
     124           0 :                         *en = GPIO_HPD_5;
     125           0 :                         return true;
     126             :                 case DC_GPIO_HPD_A__DC_GPIO_HPD6_A_MASK:
     127           0 :                         *en = GPIO_HPD_6;
     128           0 :                         return true;
     129             :                 default:
     130           0 :                         ASSERT_CRITICAL(false);
     131           0 :                         return false;
     132             :                 }
     133             :         break;
     134             :         /* REG(DC_GPIO_GENLK_MASK */
     135             :         case REG(DC_GPIO_GENLK_A):
     136           0 :                 *id = GPIO_ID_GSL;
     137           0 :                 switch (mask) {
     138             :                 case DC_GPIO_GENLK_A__DC_GPIO_GENLK_CLK_A_MASK:
     139           0 :                         *en = GPIO_GSL_GENLOCK_CLOCK;
     140           0 :                         return true;
     141             :                 case DC_GPIO_GENLK_A__DC_GPIO_GENLK_VSYNC_A_MASK:
     142           0 :                         *en = GPIO_GSL_GENLOCK_VSYNC;
     143           0 :                         return true;
     144             :                 case DC_GPIO_GENLK_A__DC_GPIO_SWAPLOCK_A_A_MASK:
     145           0 :                         *en = GPIO_GSL_SWAPLOCK_A;
     146           0 :                         return true;
     147             :                 case DC_GPIO_GENLK_A__DC_GPIO_SWAPLOCK_B_A_MASK:
     148           0 :                         *en = GPIO_GSL_SWAPLOCK_B;
     149           0 :                         return true;
     150             :                 default:
     151           0 :                         ASSERT_CRITICAL(false);
     152           0 :                         return false;
     153             :                 }
     154             :         break;
     155             :         /* DDC */
     156             :         /* we don't care about the GPIO_ID for DDC
     157             :          * in DdcHandle it will use GPIO_ID_DDC_DATA/GPIO_ID_DDC_CLOCK
     158             :          * directly in the create method
     159             :          */
     160             :         case REG(DC_GPIO_DDC1_A):
     161           0 :                 *en = GPIO_DDC_LINE_DDC1;
     162           0 :                 return true;
     163             :         case REG(DC_GPIO_DDC2_A):
     164           0 :                 *en = GPIO_DDC_LINE_DDC2;
     165           0 :                 return true;
     166             :         case REG(DC_GPIO_DDC3_A):
     167           0 :                 *en = GPIO_DDC_LINE_DDC3;
     168           0 :                 return true;
     169             :         case REG(DC_GPIO_DDC4_A):
     170           0 :                 *en = GPIO_DDC_LINE_DDC4;
     171           0 :                 return true;
     172             :         case REG(DC_GPIO_DDC5_A):
     173           0 :                 *en = GPIO_DDC_LINE_DDC5;
     174           0 :                 return true;
     175             :         case REG(DC_GPIO_DDC6_A):
     176           0 :                 *en = GPIO_DDC_LINE_DDC6;
     177           0 :                 return true;
     178             :         case REG(DC_GPIO_DDCVGA_A):
     179           0 :                 *en = GPIO_DDC_LINE_DDC_VGA;
     180           0 :                 return true;
     181             : 
     182             : /*
     183             :  *      case REG(DC_GPIO_I2CPAD_A): not exit
     184             :  *      case REG(DC_GPIO_PWRSEQ_A):
     185             :  *      case REG(DC_GPIO_PAD_STRENGTH_1):
     186             :  *      case REG(DC_GPIO_PAD_STRENGTH_2):
     187             :  *      case REG(DC_GPIO_DEBUG):
     188             :  */
     189             :         /* UNEXPECTED */
     190             :         default:
     191             : /*      case REG(DC_GPIO_SYNCA_A): not exist */
     192           0 :                 ASSERT_CRITICAL(false);
     193           0 :                 return false;
     194             :         }
     195             : }
     196             : 
     197           0 : static bool id_to_offset(
     198             :         enum gpio_id id,
     199             :         uint32_t en,
     200             :         struct gpio_pin_info *info)
     201             : {
     202           0 :         bool result = true;
     203             : 
     204           0 :         switch (id) {
     205             :         case GPIO_ID_DDC_DATA:
     206           0 :                 info->mask = DC_GPIO_DDC6_A__DC_GPIO_DDC6DATA_A_MASK;
     207           0 :                 switch (en) {
     208             :                 case GPIO_DDC_LINE_DDC1:
     209           0 :                         info->offset = REG(DC_GPIO_DDC1_A);
     210           0 :                 break;
     211             :                 case GPIO_DDC_LINE_DDC2:
     212           0 :                         info->offset = REG(DC_GPIO_DDC2_A);
     213           0 :                 break;
     214             :                 case GPIO_DDC_LINE_DDC3:
     215           0 :                         info->offset = REG(DC_GPIO_DDC3_A);
     216           0 :                 break;
     217             :                 case GPIO_DDC_LINE_DDC4:
     218           0 :                         info->offset = REG(DC_GPIO_DDC4_A);
     219           0 :                 break;
     220             :                 case GPIO_DDC_LINE_DDC5:
     221           0 :                         info->offset = REG(DC_GPIO_DDC5_A);
     222           0 :                 break;
     223             :                 case GPIO_DDC_LINE_DDC6:
     224           0 :                         info->offset = REG(DC_GPIO_DDC6_A);
     225           0 :                 break;
     226             :                 case GPIO_DDC_LINE_DDC_VGA:
     227           0 :                         info->offset = REG(DC_GPIO_DDCVGA_A);
     228           0 :                 break;
     229             :                 case GPIO_DDC_LINE_I2C_PAD:
     230             :                 default:
     231           0 :                         ASSERT_CRITICAL(false);
     232           0 :                         result = false;
     233             :                 }
     234             :         break;
     235             :         case GPIO_ID_DDC_CLOCK:
     236           0 :                 info->mask = DC_GPIO_DDC6_A__DC_GPIO_DDC6CLK_A_MASK;
     237           0 :                 switch (en) {
     238             :                 case GPIO_DDC_LINE_DDC1:
     239           0 :                         info->offset = REG(DC_GPIO_DDC1_A);
     240           0 :                 break;
     241             :                 case GPIO_DDC_LINE_DDC2:
     242           0 :                         info->offset = REG(DC_GPIO_DDC2_A);
     243           0 :                 break;
     244             :                 case GPIO_DDC_LINE_DDC3:
     245           0 :                         info->offset = REG(DC_GPIO_DDC3_A);
     246           0 :                 break;
     247             :                 case GPIO_DDC_LINE_DDC4:
     248           0 :                         info->offset = REG(DC_GPIO_DDC4_A);
     249           0 :                 break;
     250             :                 case GPIO_DDC_LINE_DDC5:
     251           0 :                         info->offset = REG(DC_GPIO_DDC5_A);
     252           0 :                 break;
     253             :                 case GPIO_DDC_LINE_DDC6:
     254           0 :                         info->offset = REG(DC_GPIO_DDC6_A);
     255           0 :                 break;
     256             :                 case GPIO_DDC_LINE_DDC_VGA:
     257           0 :                         info->offset = REG(DC_GPIO_DDCVGA_A);
     258           0 :                 break;
     259             :                 case GPIO_DDC_LINE_I2C_PAD:
     260             :                 default:
     261           0 :                         ASSERT_CRITICAL(false);
     262           0 :                         result = false;
     263             :                 }
     264             :         break;
     265             :         case GPIO_ID_GENERIC:
     266           0 :                 info->offset = REG(DC_GPIO_GENERIC_A);
     267           0 :                 switch (en) {
     268             :                 case GPIO_GENERIC_A:
     269           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICA_A_MASK;
     270           0 :                 break;
     271             :                 case GPIO_GENERIC_B:
     272           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICB_A_MASK;
     273           0 :                 break;
     274             :                 case GPIO_GENERIC_C:
     275           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICC_A_MASK;
     276           0 :                 break;
     277             :                 case GPIO_GENERIC_D:
     278           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICD_A_MASK;
     279           0 :                 break;
     280             :                 case GPIO_GENERIC_E:
     281           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICE_A_MASK;
     282           0 :                 break;
     283             :                 case GPIO_GENERIC_F:
     284           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICF_A_MASK;
     285           0 :                 break;
     286             :                 case GPIO_GENERIC_G:
     287           0 :                         info->mask = DC_GPIO_GENERIC_A__DC_GPIO_GENERICG_A_MASK;
     288           0 :                 break;
     289             :                 default:
     290           0 :                         ASSERT_CRITICAL(false);
     291           0 :                         result = false;
     292             :                 }
     293             :         break;
     294             :         case GPIO_ID_HPD:
     295           0 :                 info->offset = REG(DC_GPIO_HPD_A);
     296           0 :                 switch (en) {
     297             :                 case GPIO_HPD_1:
     298           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD1_A_MASK;
     299           0 :                 break;
     300             :                 case GPIO_HPD_2:
     301           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD2_A_MASK;
     302           0 :                 break;
     303             :                 case GPIO_HPD_3:
     304           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD3_A_MASK;
     305           0 :                 break;
     306             :                 case GPIO_HPD_4:
     307           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD4_A_MASK;
     308           0 :                 break;
     309             :                 case GPIO_HPD_5:
     310           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD5_A_MASK;
     311           0 :                 break;
     312             :                 case GPIO_HPD_6:
     313           0 :                         info->mask = DC_GPIO_HPD_A__DC_GPIO_HPD6_A_MASK;
     314           0 :                 break;
     315             :                 default:
     316           0 :                         ASSERT_CRITICAL(false);
     317           0 :                         result = false;
     318             :                 }
     319             :         break;
     320             :         case GPIO_ID_GSL:
     321           0 :                 switch (en) {
     322             :                 case GPIO_GSL_GENLOCK_CLOCK:
     323             :                                 /*not implmented*/
     324           0 :                         ASSERT_CRITICAL(false);
     325           0 :                         result = false;
     326           0 :                 break;
     327             :                 case GPIO_GSL_GENLOCK_VSYNC:
     328             :                         /*not implmented*/
     329           0 :                         ASSERT_CRITICAL(false);
     330           0 :                         result = false;
     331           0 :                 break;
     332             :                 case GPIO_GSL_SWAPLOCK_A:
     333             :                         /*not implmented*/
     334           0 :                         ASSERT_CRITICAL(false);
     335           0 :                         result = false;
     336           0 :                 break;
     337             :                 case GPIO_GSL_SWAPLOCK_B:
     338             :                         /*not implmented*/
     339           0 :                         ASSERT_CRITICAL(false);
     340           0 :                         result = false;
     341             : 
     342           0 :                 break;
     343             :                 default:
     344           0 :                         ASSERT_CRITICAL(false);
     345           0 :                         result = false;
     346             :                 }
     347             :         break;
     348             :         case GPIO_ID_SYNC:
     349             :         case GPIO_ID_VIP_PAD:
     350             :         default:
     351           0 :                 ASSERT_CRITICAL(false);
     352           0 :                 result = false;
     353             :         }
     354             : 
     355           0 :         if (result) {
     356           0 :                 info->offset_y = info->offset + 2;
     357           0 :                 info->offset_en = info->offset + 1;
     358           0 :                 info->offset_mask = info->offset - 1;
     359             : 
     360           0 :                 info->mask_y = info->mask;
     361           0 :                 info->mask_en = info->mask;
     362           0 :                 info->mask_mask = info->mask;
     363             :         }
     364             : 
     365           0 :         return result;
     366             : }
     367             : 
     368             : /* function table */
     369             : static const struct hw_translate_funcs funcs = {
     370             :         .offset_to_id = offset_to_id,
     371             :         .id_to_offset = id_to_offset,
     372             : };
     373             : 
     374             : /*
     375             :  * dal_hw_translate_dcn30_init
     376             :  *
     377             :  * @brief
     378             :  * Initialize Hw translate function pointers.
     379             :  *
     380             :  * @param
     381             :  * struct hw_translate *tr - [out] struct of function pointers
     382             :  *
     383             :  */
     384           0 : void dal_hw_translate_dcn30_init(struct hw_translate *tr)
     385             : {
     386           0 :         tr->funcs = &funcs;
     387           0 : }
     388             : 

Generated by: LCOV version 1.14