Skip to content

Commit 25c1e74

Browse files
YiPeng Chaialexdeucher
authored andcommitted
drm/amd/ras: Update function and remove redundant code
Update function and remove redundant code: 1. Update function to prepare for internal use. 2. Remove unused function code previously prepared for ioctl. V2: Update commit message content. Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com> Reviewed-by: Tao Zhou <tao.zhou1@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 4c74635 commit 25c1e74

7 files changed

Lines changed: 55 additions & 127 deletions

File tree

drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c

Lines changed: 16 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -36,67 +36,6 @@
3636
#define AMDGPU_RAS_TYPE_AMDGPU 0x2
3737
#define AMDGPU_RAS_TYPE_VF 0x3
3838

39-
static int amdgpu_ras_query_interface_info(struct ras_core_context *ras_core,
40-
struct ras_cmd_ctx *cmd)
41-
{
42-
struct amdgpu_device *adev = (struct amdgpu_device *)ras_core->dev;
43-
struct ras_query_interface_info_rsp *output_data =
44-
(struct ras_query_interface_info_rsp *)cmd->output_buff_raw;
45-
int ret;
46-
47-
if (cmd->input_size != sizeof(struct ras_query_interface_info_req))
48-
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
49-
50-
ret = ras_cmd_query_interface_info(ras_core, output_data);
51-
if (!ret) {
52-
output_data->plat_major_ver = 0;
53-
output_data->plat_minor_ver = 0;
54-
55-
output_data->interface_type = amdgpu_sriov_vf(adev) ?
56-
RAS_CMD_INTERFACE_TYPE_VF : RAS_CMD_INTERFACE_TYPE_AMDGPU;
57-
58-
cmd->output_size = sizeof(struct ras_query_interface_info_rsp);
59-
}
60-
61-
return ret;
62-
}
63-
64-
static struct ras_core_context *ras_cmd_get_ras_core(uint64_t dev_handle)
65-
{
66-
struct ras_core_context *ras_core;
67-
68-
if (!dev_handle || (dev_handle == RAS_CMD_DEV_HANDLE_MAGIC))
69-
return NULL;
70-
71-
ras_core = (struct ras_core_context *)(uintptr_t)(dev_handle ^ RAS_CMD_DEV_HANDLE_MAGIC);
72-
73-
if (ras_cmd_get_dev_handle(ras_core) == dev_handle)
74-
return ras_core;
75-
76-
return NULL;
77-
}
78-
79-
static int amdgpu_ras_get_devices_info(struct ras_core_context *ras_core,
80-
struct ras_cmd_ctx *cmd)
81-
{
82-
struct amdgpu_device *adev = (struct amdgpu_device *)ras_core->dev;
83-
struct ras_cmd_devices_info_rsp *output_data =
84-
(struct ras_cmd_devices_info_rsp *)cmd->output_buff_raw;
85-
struct ras_cmd_dev_info *dev_info;
86-
87-
dev_info = &output_data->devs[0];
88-
dev_info->dev_handle = ras_cmd_get_dev_handle(ras_core);
89-
dev_info->oam_id = adev->smuio.funcs->get_socket_id(adev);
90-
dev_info->ecc_enabled = 1;
91-
dev_info->ecc_supported = 1;
92-
93-
output_data->dev_num = 1;
94-
output_data->version = 0;
95-
cmd->output_size = sizeof(struct ras_cmd_devices_info_rsp);
96-
97-
return 0;
98-
}
99-
10039
static int amdgpu_ras_trigger_error_prepare(struct ras_core_context *ras_core,
10140
struct ras_cmd_inject_error_req *block_info)
10241
{
@@ -311,51 +250,34 @@ int amdgpu_ras_handle_cmd(struct ras_core_context *ras_core, struct ras_cmd_ctx
311250
return res;
312251
}
313252

314-
int amdgpu_ras_cmd_ioctl_handler(struct ras_core_context *ras_core,
315-
uint8_t *cmd_buf, uint32_t buf_size)
253+
int amdgpu_ras_submit_cmd(struct ras_core_context *ras_core, struct ras_cmd_ctx *cmd)
316254
{
317-
struct ras_cmd_ctx *cmd = (struct ras_cmd_ctx *)cmd_buf;
318-
struct ras_core_context *cmd_core = NULL;
319-
struct ras_cmd_dev_handle *cmd_handle = NULL;
255+
struct ras_core_context *cmd_core = ras_core;
320256
int timeout = 60;
321257
int res;
322258

323259
cmd->cmd_res = RAS_CMD__ERROR_INVALID_CMD;
324260
cmd->output_size = 0;
325261

326-
if (!ras_core_is_enabled(ras_core))
262+
if (!ras_core_is_enabled(cmd_core))
327263
return RAS_CMD__ERROR_ACCESS_DENIED;
328264

329-
if (cmd->cmd_id == RAS_CMD__QUERY_INTERFACE_INFO) {
330-
cmd->cmd_res = amdgpu_ras_query_interface_info(ras_core, cmd);
331-
} else if (cmd->cmd_id == RAS_CMD__GET_DEVICES_INFO) {
332-
cmd->cmd_res = amdgpu_ras_get_devices_info(ras_core, cmd);
333-
} else {
334-
cmd_handle = (struct ras_cmd_dev_handle *)cmd->input_buff_raw;
335-
cmd_core = ras_cmd_get_ras_core(cmd_handle->dev_handle);
336-
if (!cmd_core)
337-
return RAS_CMD__ERROR_INVALID_INPUT_DATA;
338-
339-
while (ras_core_gpu_in_reset(cmd_core)) {
340-
msleep(1000);
341-
if (!timeout--)
342-
return RAS_CMD__ERROR_TIMEOUT;
343-
}
344-
345-
346-
if (!ras_core_is_enabled(cmd_core))
347-
return RAS_CMD__ERROR_ACCESS_DENIED;
265+
while (ras_core_gpu_in_reset(cmd_core)) {
266+
msleep(1000);
267+
if (!timeout--)
268+
return RAS_CMD__ERROR_TIMEOUT;
269+
}
348270

349-
res = amdgpu_ras_handle_cmd(cmd_core, cmd, NULL);
350-
if (res == RAS_CMD__ERROR_UKNOWN_CMD)
351-
res = rascore_handle_cmd(cmd_core, cmd, NULL);
271+
res = amdgpu_ras_handle_cmd(cmd_core, cmd, NULL);
272+
if (res == RAS_CMD__ERROR_UKNOWN_CMD)
273+
res = rascore_handle_cmd(cmd_core, cmd, NULL);
352274

353-
cmd->cmd_res = res;
354-
}
275+
cmd->cmd_res = res;
355276

356-
if ((cmd->cmd_res == RAS_CMD__SUCCESS) &&
357-
((cmd->output_size + sizeof(*cmd)) > buf_size)) {
358-
RAS_INFO("Insufficient command buffer size 0x%x!\n", buf_size);
277+
if (cmd->output_size > cmd->output_buf_size) {
278+
RAS_DEV_ERR(cmd_core->dev,
279+
"Output size 0x%x exceeds output buffer size 0x%x!\n",
280+
cmd->output_size, cmd->output_buf_size);
359281
return RAS_CMD__SUCCESS_EXEED_BUFFER;
360282
}
361283

drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ struct ras_cmd_translate_memory_fd_rsp {
4949

5050
int amdgpu_ras_handle_cmd(struct ras_core_context *ras_core,
5151
struct ras_cmd_ctx *cmd, void *data);
52-
int amdgpu_ras_cmd_ioctl_handler(struct ras_core_context *ras_core,
53-
uint8_t *cmd_buf, uint32_t buf_size);
52+
int amdgpu_ras_submit_cmd(struct ras_core_context *ras_core, struct ras_cmd_ctx *cmd);
5453

5554
#endif

drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,3 +578,34 @@ bool amdgpu_ras_mgr_is_rma(struct amdgpu_device *adev)
578578

579579
return ras_core_gpu_is_rma(ras_mgr->ras_core);
580580
}
581+
582+
int amdgpu_ras_mgr_handle_ras_cmd(struct amdgpu_device *adev,
583+
uint32_t cmd_id, void *input, uint32_t input_size,
584+
void *output, uint32_t out_size)
585+
{
586+
struct amdgpu_ras_mgr *ras_mgr = amdgpu_ras_mgr_get_context(adev);
587+
struct ras_cmd_ctx *cmd_ctx;
588+
uint32_t ctx_buf_size = PAGE_SIZE;
589+
int ret;
590+
591+
if (!amdgpu_ras_mgr_is_ready(adev))
592+
return -EPERM;
593+
594+
cmd_ctx = kzalloc(ctx_buf_size, GFP_KERNEL);
595+
if (!cmd_ctx)
596+
return -ENOMEM;
597+
598+
cmd_ctx->cmd_id = cmd_id;
599+
600+
memcpy(cmd_ctx->input_buff_raw, input, input_size);
601+
cmd_ctx->input_size = input_size;
602+
cmd_ctx->output_buf_size = ctx_buf_size - sizeof(*cmd_ctx);
603+
604+
ret = amdgpu_ras_submit_cmd(ras_mgr->ras_core, cmd_ctx);
605+
if (!ret && !cmd_ctx->cmd_res && output && (out_size == cmd_ctx->output_size))
606+
memcpy(output, cmd_ctx->output_buff_raw, cmd_ctx->output_size);
607+
608+
kfree(cmd_ctx);
609+
610+
return ret;
611+
}

drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,7 @@ int amdgpu_ras_mgr_get_curr_nps_mode(struct amdgpu_device *adev, uint32_t *nps_m
7272
bool amdgpu_ras_mgr_check_retired_addr(struct amdgpu_device *adev,
7373
uint64_t addr);
7474
bool amdgpu_ras_mgr_is_rma(struct amdgpu_device *adev);
75+
int amdgpu_ras_mgr_handle_ras_cmd(struct amdgpu_device *adev,
76+
uint32_t cmd_id, void *input, uint32_t input_size,
77+
void *output, uint32_t out_size);
7578
#endif

drivers/gpu/drm/amd/ras/rascore/ras_cmd.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ struct ras_cmd_ctx {
153153
uint32_t cmd_res;
154154
uint32_t input_size;
155155
uint32_t output_size;
156-
uint32_t reserved[6];
156+
uint32_t output_buf_size;
157+
uint32_t reserved[5];
157158
uint8_t input_buff_raw[RAS_CMD_MAX_IN_SIZE];
158159
uint8_t output_buff_raw[];
159160
};

drivers/gpu/drm/amd/ras/rascore/ras_core.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ int ras_core_convert_timestamp_to_time(struct ras_core_context *ras_core,
6262
uint64_t timestamp, struct ras_time *tm)
6363
{
6464
int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
65-
uint64_t year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
65+
uint64_t month = 0, day = 0, hour = 0, minute = 0, second = 0;
66+
uint32_t year = 0;
6667
int seconds_per_day = 24 * 60 * 60;
6768
int seconds_per_hour = 60 * 60;
6869
int seconds_per_minute = 60;

drivers/gpu/drm/amd/ras/rascore/ras_eeprom.c

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -199,17 +199,6 @@ static int __ras_eeprom_xfer(struct ras_core_context *ras_core, u32 eeprom_addr,
199199
return -EINVAL;
200200
}
201201

202-
203-
/**
204-
* __eeprom_xfer -- Read/write from/to an I2C EEPROM device
205-
* @i2c_adap: pointer to the I2C adapter to use
206-
* @eeprom_addr: EEPROM address from which to read/write
207-
* @eeprom_buf: pointer to data buffer to read into/write from
208-
* @buf_size: the size of @eeprom_buf
209-
* @read: True if reading from the EEPROM, false if writing
210-
*
211-
* Returns the number of bytes read/written; -errno on error.
212-
*/
213202
static int __eeprom_xfer(struct ras_core_context *ras_core, u32 eeprom_addr,
214203
u8 *eeprom_buf, u32 buf_size, bool read)
215204
{
@@ -454,13 +443,6 @@ static void ras_set_eeprom_table_version(struct ras_eeprom_control *control)
454443
hdr->version = RAS_TABLE_VER_V3;
455444
}
456445

457-
/**
458-
* ras_eeprom_reset_table -- Reset the RAS EEPROM table
459-
* @control: pointer to control structure
460-
*
461-
* Reset the contents of the header of the RAS EEPROM table.
462-
* Return 0 on success, -errno on error.
463-
*/
464446
int ras_eeprom_reset_table(struct ras_core_context *ras_core)
465447
{
466448
struct ras_eeprom_control *control = &ras_core->ras_eeprom;
@@ -928,17 +910,6 @@ static int __ras_eeprom_read(struct ras_eeprom_control *control,
928910
return res;
929911
}
930912

931-
/**
932-
* ras_eeprom_read -- read EEPROM
933-
* @control: pointer to control structure
934-
* @record: array of records to read into
935-
* @num: number of records in @record
936-
*
937-
* Reads num records from the RAS table in EEPROM and
938-
* writes the data into @record array.
939-
*
940-
* Returns 0 on success, -errno on error.
941-
*/
942913
int ras_eeprom_read(struct ras_core_context *ras_core,
943914
struct eeprom_umc_record *record, const u32 num)
944915
{

0 commit comments

Comments
 (0)