Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: smu_ucode_xfer_cz.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $	*/
      2 
      3 /*
      4  * Copyright 2016 Advanced Micro Devices, Inc.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * OTHER DEALINGS IN THE SOFTWARE.
     23  *
     24  */
     25 // CZ Ucode Loading Definitions
     26 #ifndef SMU_UCODE_XFER_CZ_H
     27 #define SMU_UCODE_XFER_CZ_H
     28 
     29 #define NUM_JOBLIST_ENTRIES      32
     30 
     31 #define TASK_TYPE_NO_ACTION      0
     32 #define TASK_TYPE_UCODE_LOAD     1
     33 #define TASK_TYPE_UCODE_SAVE     2
     34 #define TASK_TYPE_REG_LOAD       3
     35 #define TASK_TYPE_REG_SAVE       4
     36 #define TASK_TYPE_INITIALIZE     5
     37 
     38 #define TASK_ARG_REG_SMCIND      0
     39 #define TASK_ARG_REG_MMIO        1
     40 #define TASK_ARG_REG_FCH         2
     41 #define TASK_ARG_REG_UNB         3
     42 
     43 #define TASK_ARG_INIT_MM_PWR_LOG 0
     44 #define TASK_ARG_INIT_CLK_TABLE  1
     45 
     46 #define JOB_GFX_SAVE             0
     47 #define JOB_GFX_RESTORE          1
     48 #define JOB_FCH_SAVE             2
     49 #define JOB_FCH_RESTORE          3
     50 #define JOB_UNB_SAVE             4
     51 #define JOB_UNB_RESTORE          5
     52 #define JOB_GMC_SAVE             6
     53 #define JOB_GMC_RESTORE          7
     54 #define JOB_GNB_SAVE             8
     55 #define JOB_GNB_RESTORE          9
     56 
     57 #define IGNORE_JOB               0xff
     58 #define END_OF_TASK_LIST     (uint16_t)0xffff
     59 
     60 // Size of DRAM regions (in bytes) requested by SMU:
     61 #define SMU_DRAM_REQ_MM_PWR_LOG 48
     62 
     63 #define UCODE_ID_SDMA0           0
     64 #define UCODE_ID_SDMA1           1
     65 #define UCODE_ID_CP_CE           2
     66 #define UCODE_ID_CP_PFP          3
     67 #define UCODE_ID_CP_ME           4
     68 #define UCODE_ID_CP_MEC_JT1      5
     69 #define UCODE_ID_CP_MEC_JT2      6
     70 #define UCODE_ID_GMCON_RENG      7
     71 #define UCODE_ID_RLC_G           8
     72 #define UCODE_ID_RLC_SCRATCH     9
     73 #define UCODE_ID_RLC_SRM_ARAM    10
     74 #define UCODE_ID_RLC_SRM_DRAM    11
     75 #define UCODE_ID_DMCU_ERAM       12
     76 #define UCODE_ID_DMCU_IRAM       13
     77 
     78 #define UCODE_ID_SDMA0_MASK           0x00000001
     79 #define UCODE_ID_SDMA1_MASK           0x00000002
     80 #define UCODE_ID_CP_CE_MASK           0x00000004
     81 #define UCODE_ID_CP_PFP_MASK          0x00000008
     82 #define UCODE_ID_CP_ME_MASK           0x00000010
     83 #define UCODE_ID_CP_MEC_JT1_MASK      0x00000020
     84 #define UCODE_ID_CP_MEC_JT2_MASK      0x00000040
     85 #define UCODE_ID_GMCON_RENG_MASK      0x00000080
     86 #define UCODE_ID_RLC_G_MASK           0x00000100
     87 #define UCODE_ID_RLC_SCRATCH_MASK     0x00000200
     88 #define UCODE_ID_RLC_SRM_ARAM_MASK    0x00000400
     89 #define UCODE_ID_RLC_SRM_DRAM_MASK    0x00000800
     90 #define UCODE_ID_DMCU_ERAM_MASK       0x00001000
     91 #define UCODE_ID_DMCU_IRAM_MASK       0x00002000
     92 
     93 #define UCODE_ID_SDMA0_SIZE_BYTE           10368
     94 #define UCODE_ID_SDMA1_SIZE_BYTE           10368
     95 #define UCODE_ID_CP_CE_SIZE_BYTE           8576
     96 #define UCODE_ID_CP_PFP_SIZE_BYTE          16768
     97 #define UCODE_ID_CP_ME_SIZE_BYTE           16768
     98 #define UCODE_ID_CP_MEC_JT1_SIZE_BYTE      384
     99 #define UCODE_ID_CP_MEC_JT2_SIZE_BYTE      384
    100 #define UCODE_ID_GMCON_RENG_SIZE_BYTE      4096
    101 #define UCODE_ID_RLC_G_SIZE_BYTE           2048
    102 #define UCODE_ID_RLC_SCRATCH_SIZE_BYTE     132
    103 #define UCODE_ID_RLC_SRM_ARAM_SIZE_BYTE    8192
    104 #define UCODE_ID_RLC_SRM_DRAM_SIZE_BYTE    4096
    105 #define UCODE_ID_DMCU_ERAM_SIZE_BYTE       24576
    106 #define UCODE_ID_DMCU_IRAM_SIZE_BYTE       1024
    107 
    108 #define NUM_UCODES               14
    109 
    110 typedef struct {
    111 	uint32_t high;
    112 	uint32_t low;
    113 } data_64_t;
    114 
    115 struct SMU_Task {
    116     uint8_t type;
    117     uint8_t arg;
    118     uint16_t next;
    119     data_64_t addr;
    120     uint32_t size_bytes;
    121 };
    122 typedef struct SMU_Task SMU_Task;
    123 
    124 struct TOC {
    125     uint8_t JobList[NUM_JOBLIST_ENTRIES];
    126     SMU_Task tasks[1];
    127 };
    128 
    129 // META DATA COMMAND Definitions
    130 #define METADATA_CMD_MODE0         0x00000103
    131 #define METADATA_CMD_MODE1         0x00000113
    132 #define METADATA_CMD_MODE2         0x00000123
    133 #define METADATA_CMD_MODE3         0x00000133
    134 #define METADATA_CMD_DELAY         0x00000203
    135 #define METADATA_CMD_CHNG_REGSPACE 0x00000303
    136 #define METADATA_PERFORM_ON_SAVE   0x00001000
    137 #define METADATA_PERFORM_ON_LOAD   0x00002000
    138 #define METADATA_CMD_ARG_MASK      0xFFFF0000
    139 #define METADATA_CMD_ARG_SHIFT     16
    140 
    141 // Simple register addr/data fields
    142 struct SMU_MetaData_Mode0 {
    143     uint32_t register_address;
    144     uint32_t register_data;
    145 };
    146 typedef struct SMU_MetaData_Mode0 SMU_MetaData_Mode0;
    147 
    148 // Register addr/data with mask
    149 struct SMU_MetaData_Mode1 {
    150     uint32_t register_address;
    151     uint32_t register_mask;
    152     uint32_t register_data;
    153 };
    154 typedef struct SMU_MetaData_Mode1 SMU_MetaData_Mode1;
    155 
    156 struct SMU_MetaData_Mode2 {
    157     uint32_t register_address;
    158     uint32_t register_mask;
    159     uint32_t target_value;
    160 };
    161 typedef struct SMU_MetaData_Mode2 SMU_MetaData_Mode2;
    162 
    163 // Always write data (even on a save operation)
    164 struct SMU_MetaData_Mode3 {
    165     uint32_t register_address;
    166     uint32_t register_mask;
    167     uint32_t register_data;
    168 };
    169 typedef struct SMU_MetaData_Mode3 SMU_MetaData_Mode3;
    170 
    171 #endif
    172