drm/amdgpu: add sub block parameter in ras inject command
authorTao Zhou <tao.zhou1@amd.com>
Wed, 7 Aug 2019 06:27:42 +0000 (14:27 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 12 Aug 2019 17:47:48 +0000 (12:47 -0500)
ras sub block index could be passed from shell command

Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Guchun Chen <guchun.chen@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index 523f43732deeb52e4d299d44d3867925f02fc051..d055ac31386ef3a6819e7cefa8f001fd78f9c666 100644 (file)
@@ -131,6 +131,7 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
        char err[9] = "ue";
        int op = -1;
        int block_id;
+       uint32_t sub_block;
        u64 address, value;
 
        if (*pos)
@@ -169,11 +170,12 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
                data->op = op;
 
                if (op == 2) {
-                       if (sscanf(str, "%*s %*s %*s %llu %llu",
-                                               &address, &value) != 2)
-                               if (sscanf(str, "%*s %*s %*s 0x%llx 0x%llx",
-                                                       &address, &value) != 2)
+                       if (sscanf(str, "%*s %*s %*s %u %llu %llu",
+                                               &sub_block, &address, &value) != 3)
+                               if (sscanf(str, "%*s %*s %*s 0x%x 0x%llx 0x%llx",
+                                                       &sub_block, &address, &value) != 3)
                                        return -EINVAL;
+                       data->head.sub_block_index = sub_block;
                        data->inject.address = address;
                        data->inject.value = value;
                }
@@ -218,7 +220,7 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
  * write the struct to the control node.
  *
  * bash:
- * echo op block [error [address value]] > .../ras/ras_ctrl
+ * echo op block [error [sub_blcok address value]] > .../ras/ras_ctrl
  *     op: disable, enable, inject
  *             disable: only block is needed
  *             enable: block and error are needed
@@ -228,10 +230,11 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
  *     error: ue, ce
  *             ue: multi_uncorrectable
  *             ce: single_correctable
+ *     sub_block: sub block index, pass 0 if there is no sub block
  *
  * here are some examples for bash commands,
- *     echo inject umc ue 0x0 0x0 > /sys/kernel/debug/dri/0/ras/ras_ctrl
- *     echo inject umc ce 0 0 > /sys/kernel/debug/dri/0/ras/ras_ctrl
+ *     echo inject umc ue 0x0 0x0 0x0 > /sys/kernel/debug/dri/0/ras/ras_ctrl
+ *     echo inject umc ce 0 0 > /sys/kernel/debug/dri/0/ras/ras_ctrl
  *     echo disable umc > /sys/kernel/debug/dri/0/ras/ras_ctrl
  *
  * How to check the result?