Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.9.4.
  1/*
  2 * Copyright 2016 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 */
 23// CZ Ucode Loading Definitions
 24#ifndef SMU_UCODE_XFER_CZ_H
 25#define SMU_UCODE_XFER_CZ_H
 26
 27#define NUM_JOBLIST_ENTRIES      32
 28
 29#define TASK_TYPE_NO_ACTION      0
 30#define TASK_TYPE_UCODE_LOAD     1
 31#define TASK_TYPE_UCODE_SAVE     2
 32#define TASK_TYPE_REG_LOAD       3
 33#define TASK_TYPE_REG_SAVE       4
 34#define TASK_TYPE_INITIALIZE     5
 35
 36#define TASK_ARG_REG_SMCIND      0
 37#define TASK_ARG_REG_MMIO        1
 38#define TASK_ARG_REG_FCH         2
 39#define TASK_ARG_REG_UNB         3
 40
 41#define TASK_ARG_INIT_MM_PWR_LOG 0
 42#define TASK_ARG_INIT_CLK_TABLE  1
 43
 44#define JOB_GFX_SAVE             0
 45#define JOB_GFX_RESTORE          1
 46#define JOB_FCH_SAVE             2
 47#define JOB_FCH_RESTORE          3
 48#define JOB_UNB_SAVE             4
 49#define JOB_UNB_RESTORE          5
 50#define JOB_GMC_SAVE             6
 51#define JOB_GMC_RESTORE          7
 52#define JOB_GNB_SAVE             8
 53#define JOB_GNB_RESTORE          9
 54
 55#define IGNORE_JOB               0xff
 56#define END_OF_TASK_LIST     (uint16_t)0xffff
 57
 58// Size of DRAM regions (in bytes) requested by SMU:
 59#define SMU_DRAM_REQ_MM_PWR_LOG 48 
 60
 61#define UCODE_ID_SDMA0           0
 62#define UCODE_ID_SDMA1           1
 63#define UCODE_ID_CP_CE           2
 64#define UCODE_ID_CP_PFP          3
 65#define UCODE_ID_CP_ME           4
 66#define UCODE_ID_CP_MEC_JT1      5
 67#define UCODE_ID_CP_MEC_JT2      6
 68#define UCODE_ID_GMCON_RENG      7
 69#define UCODE_ID_RLC_G           8
 70#define UCODE_ID_RLC_SCRATCH     9
 71#define UCODE_ID_RLC_SRM_ARAM    10
 72#define UCODE_ID_RLC_SRM_DRAM    11
 73#define UCODE_ID_DMCU_ERAM       12
 74#define UCODE_ID_DMCU_IRAM       13
 75
 76#define UCODE_ID_SDMA0_MASK           0x00000001       
 77#define UCODE_ID_SDMA1_MASK           0x00000002        
 78#define UCODE_ID_CP_CE_MASK           0x00000004      
 79#define UCODE_ID_CP_PFP_MASK          0x00000008         
 80#define UCODE_ID_CP_ME_MASK           0x00000010          
 81#define UCODE_ID_CP_MEC_JT1_MASK      0x00000020             
 82#define UCODE_ID_CP_MEC_JT2_MASK      0x00000040          
 83#define UCODE_ID_GMCON_RENG_MASK      0x00000080            
 84#define UCODE_ID_RLC_G_MASK           0x00000100           
 85#define UCODE_ID_RLC_SCRATCH_MASK     0x00000200         
 86#define UCODE_ID_RLC_SRM_ARAM_MASK    0x00000400                
 87#define UCODE_ID_RLC_SRM_DRAM_MASK    0x00000800                 
 88#define UCODE_ID_DMCU_ERAM_MASK       0x00001000             
 89#define UCODE_ID_DMCU_IRAM_MASK       0x00002000              
 90
 91#define UCODE_ID_SDMA0_SIZE_BYTE           10368        
 92#define UCODE_ID_SDMA1_SIZE_BYTE           10368          
 93#define UCODE_ID_CP_CE_SIZE_BYTE           8576        
 94#define UCODE_ID_CP_PFP_SIZE_BYTE          16768           
 95#define UCODE_ID_CP_ME_SIZE_BYTE           16768            
 96#define UCODE_ID_CP_MEC_JT1_SIZE_BYTE      384               
 97#define UCODE_ID_CP_MEC_JT2_SIZE_BYTE      384            
 98#define UCODE_ID_GMCON_RENG_SIZE_BYTE      4096              
 99#define UCODE_ID_RLC_G_SIZE_BYTE           2048             
100#define UCODE_ID_RLC_SCRATCH_SIZE_BYTE     132           
101#define UCODE_ID_RLC_SRM_ARAM_SIZE_BYTE    8192                  
102#define UCODE_ID_RLC_SRM_DRAM_SIZE_BYTE    4096                   
103#define UCODE_ID_DMCU_ERAM_SIZE_BYTE       24576               
104#define UCODE_ID_DMCU_IRAM_SIZE_BYTE       1024                 
105
106#define NUM_UCODES               14
107
108typedef struct {
109	uint32_t high;
110	uint32_t low;
111} data_64_t;
112
113struct SMU_Task {
114    uint8_t type;
115    uint8_t arg;
116    uint16_t next;
117    data_64_t addr;
118    uint32_t size_bytes;
119};
120typedef struct SMU_Task SMU_Task;
121
122struct TOC {
123    uint8_t JobList[NUM_JOBLIST_ENTRIES];
124    SMU_Task tasks[1];
125};
126
127// META DATA COMMAND Definitions
128#define METADATA_CMD_MODE0         0x00000103 
129#define METADATA_CMD_MODE1         0x00000113 
130#define METADATA_CMD_MODE2         0x00000123 
131#define METADATA_CMD_MODE3         0x00000133
132#define METADATA_CMD_DELAY         0x00000203
133#define METADATA_CMD_CHNG_REGSPACE 0x00000303
134#define METADATA_PERFORM_ON_SAVE   0x00001000
135#define METADATA_PERFORM_ON_LOAD   0x00002000
136#define METADATA_CMD_ARG_MASK      0xFFFF0000
137#define METADATA_CMD_ARG_SHIFT     16
138
139// Simple register addr/data fields
140struct SMU_MetaData_Mode0 {
141    uint32_t register_address;
142    uint32_t register_data;
143};
144typedef struct SMU_MetaData_Mode0 SMU_MetaData_Mode0;
145
146// Register addr/data with mask
147struct SMU_MetaData_Mode1 {
148    uint32_t register_address;
149    uint32_t register_mask;
150    uint32_t register_data;
151};
152typedef struct SMU_MetaData_Mode1 SMU_MetaData_Mode1;
153
154struct SMU_MetaData_Mode2 {
155    uint32_t register_address;
156    uint32_t register_mask;
157    uint32_t target_value;
158};
159typedef struct SMU_MetaData_Mode2 SMU_MetaData_Mode2;
160
161// Always write data (even on a save operation)
162struct SMU_MetaData_Mode3 {
163    uint32_t register_address;
164    uint32_t register_mask;
165    uint32_t register_data;
166};
167typedef struct SMU_MetaData_Mode3 SMU_MetaData_Mode3;
168
169#endif