if (amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(10, 3, 0) && !amdgpu_sriov_vf(adev))
gfx_v10_3_set_power_brake_sequence(adev);
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
+ if (r)
+ goto err_bad_op;
+
+ return 0;
+
+err_bad_op:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
return r;
}
cancel_delayed_work_sync(&adev->gfx.idle_work);
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
/* WA added for Vangogh asic fixing the SMU suspend failure
* It needs to set power gating again during gfxoff control
return gfx_v10_0_init_microcode(adev);
}
-static int gfx_v10_0_late_init(struct amdgpu_ip_block *ip_block)
-{
- struct amdgpu_device *adev = ip_block->adev;
- int r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
- if (r)
- return r;
-
- return 0;
-}
-
static bool gfx_v10_0_is_rlc_enabled(struct amdgpu_device *adev)
{
uint32_t rlc_cntl;
static const struct amd_ip_funcs gfx_v10_0_ip_funcs = {
.name = "gfx_v10_0",
.early_init = gfx_v10_0_early_init,
- .late_init = gfx_v10_0_late_init,
.sw_init = gfx_v10_0_sw_init,
.sw_fini = gfx_v10_0_sw_fini,
.hw_init = gfx_v10_0_hw_init,
WREG32_SOC15(GC, 0, regCPG_PSP_DEBUG, data);
}
+static int gfx_v11_0_set_userq_eop_interrupts(struct amdgpu_device *adev,
+ bool enable)
+{
+ unsigned int irq_type;
+ int m, p, r;
+
+ if (adev->userq_funcs[AMDGPU_HW_IP_GFX]) {
+ for (m = 0; m < adev->gfx.me.num_me; m++) {
+ for (p = 0; p < adev->gfx.me.num_pipe_per_me; p++) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ if (enable)
+ r = amdgpu_irq_get(adev, &adev->gfx.eop_irq, irq_type);
+ else
+ r = amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ if (r) {
+ if (!enable)
+ return r;
+ goto err_gfx;
+ }
+ }
+ }
+ }
+
+ if (adev->userq_funcs[AMDGPU_HW_IP_COMPUTE]) {
+ for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
+ for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec)
+ + p;
+ if (enable)
+ r = amdgpu_irq_get(adev, &adev->gfx.eop_irq, irq_type);
+ else
+ r = amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ if (r) {
+ if (!enable)
+ return r;
+ goto err_compute;
+ }
+ }
+ }
+ }
+
+ return 0;
+
+err_compute:
+ for (p--; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ for (m--; m >= 0; m--) {
+ for (p = adev->gfx.mec.num_pipe_per_mec - 1; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ }
+ m = adev->gfx.me.num_me;
+err_gfx:
+ for (p--; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ for (m--; m >= 0; m--) {
+ for (p = adev->gfx.me.num_pipe_per_me - 1; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ }
+ return r;
+}
+
static int gfx_v11_0_hw_init(struct amdgpu_ip_block *ip_block)
{
int r;
if (!adev->gfx.imu_fw_version)
adev->gfx.imu_fw_version = RREG32_SOC15(GC, 0, regGFX_IMU_SCRATCH_0);
- return r;
-}
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
-static int gfx_v11_0_set_userq_eop_interrupts(struct amdgpu_device *adev,
- bool enable)
-{
- unsigned int irq_type;
- int m, p, r;
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
- if (adev->userq_funcs[AMDGPU_HW_IP_GFX]) {
- for (m = 0; m < adev->gfx.me.num_me; m++) {
- for (p = 0; p < adev->gfx.me.num_pipe_per_me; p++) {
- irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
- if (enable)
- r = amdgpu_irq_get(adev, &adev->gfx.eop_irq,
- irq_type);
- else
- r = amdgpu_irq_put(adev, &adev->gfx.eop_irq,
- irq_type);
- if (r)
- return r;
- }
- }
- }
+ r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
+ if (r)
+ goto err_bad_op;
- if (adev->userq_funcs[AMDGPU_HW_IP_COMPUTE]) {
- for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
- for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
- irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
- + (m * adev->gfx.mec.num_pipe_per_mec)
- + p;
- if (enable)
- r = amdgpu_irq_get(adev, &adev->gfx.eop_irq,
- irq_type);
- else
- r = amdgpu_irq_put(adev, &adev->gfx.eop_irq,
- irq_type);
- if (r)
- return r;
- }
- }
- }
+ r = gfx_v11_0_set_userq_eop_interrupts(adev, true);
+ if (r)
+ goto err_userq_eop;
return 0;
+
+err_userq_eop:
+ amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+err_bad_op:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
+ return r;
}
static int gfx_v11_0_hw_fini(struct amdgpu_ip_block *ip_block)
cancel_delayed_work_sync(&adev->gfx.idle_work);
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
gfx_v11_0_set_userq_eop_interrupts(adev, false);
+ amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
if (!adev->no_hw_access) {
if (amdgpu_async_gfx_ring &&
return gfx_v11_0_init_microcode(adev);
}
-static int gfx_v11_0_late_init(struct amdgpu_ip_block *ip_block)
-{
- struct amdgpu_device *adev = ip_block->adev;
- int r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
- if (r)
- return r;
-
- r = gfx_v11_0_set_userq_eop_interrupts(adev, true);
- if (r)
- return r;
-
- return 0;
-}
-
static bool gfx_v11_0_is_rlc_enabled(struct amdgpu_device *adev)
{
uint32_t rlc_cntl;
static const struct amd_ip_funcs gfx_v11_0_ip_funcs = {
.name = "gfx_v11_0",
.early_init = gfx_v11_0_early_init,
- .late_init = gfx_v11_0_late_init,
.sw_init = gfx_v11_0_sw_init,
.sw_fini = gfx_v11_0_sw_fini,
.hw_init = gfx_v11_0_hw_init,
}
}
+static int gfx_v12_0_set_userq_eop_interrupts(struct amdgpu_device *adev,
+ bool enable)
+{
+ unsigned int irq_type;
+ int m, p, r;
+
+ if (adev->userq_funcs[AMDGPU_HW_IP_GFX]) {
+ for (m = 0; m < adev->gfx.me.num_me; m++) {
+ for (p = 0; p < adev->gfx.me.num_pipe_per_me; p++) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ if (enable)
+ r = amdgpu_irq_get(adev, &adev->gfx.eop_irq, irq_type);
+ else
+ r = amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ if (r) {
+ if (!enable)
+ return r;
+ goto err_gfx;
+ }
+ }
+ }
+ }
+
+ if (adev->userq_funcs[AMDGPU_HW_IP_COMPUTE]) {
+ for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
+ for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec)
+ + p;
+ if (enable)
+ r = amdgpu_irq_get(adev, &adev->gfx.eop_irq, irq_type);
+ else
+ r = amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ if (r) {
+ if (!enable)
+ return r;
+ goto err_compute;
+ }
+ }
+ }
+ }
+
+ return 0;
+
+err_compute:
+ for (p--; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ for (m--; m >= 0; m--) {
+ for (p = adev->gfx.mec.num_pipe_per_mec - 1; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ }
+ m = adev->gfx.me.num_me;
+err_gfx:
+ for (p--; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ for (m--; m >= 0; m--) {
+ for (p = adev->gfx.me.num_pipe_per_me - 1; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ }
+ return r;
+}
+
static int gfx_v12_0_hw_init(struct amdgpu_ip_block *ip_block)
{
int r;
if (r)
return r;
- return r;
-}
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
-static int gfx_v12_0_set_userq_eop_interrupts(struct amdgpu_device *adev,
- bool enable)
-{
- unsigned int irq_type;
- int m, p, r;
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
- if (adev->userq_funcs[AMDGPU_HW_IP_GFX]) {
- for (m = 0; m < adev->gfx.me.num_me; m++) {
- for (p = 0; p < adev->gfx.me.num_pipe_per_me; p++) {
- irq_type = AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP + p;
- if (enable)
- r = amdgpu_irq_get(adev, &adev->gfx.eop_irq,
- irq_type);
- else
- r = amdgpu_irq_put(adev, &adev->gfx.eop_irq,
- irq_type);
- if (r)
- return r;
- }
- }
- }
+ r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
+ if (r)
+ goto err_bad_op;
- if (adev->userq_funcs[AMDGPU_HW_IP_COMPUTE]) {
- for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
- for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
- irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
- + (m * adev->gfx.mec.num_pipe_per_mec)
- + p;
- if (enable)
- r = amdgpu_irq_get(adev, &adev->gfx.eop_irq,
- irq_type);
- else
- r = amdgpu_irq_put(adev, &adev->gfx.eop_irq,
- irq_type);
- if (r)
- return r;
- }
- }
- }
+ r = gfx_v12_0_set_userq_eop_interrupts(adev, true);
+ if (r)
+ goto err_userq_eop;
return 0;
+
+err_userq_eop:
+ amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+err_bad_op:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
+ return r;
}
static int gfx_v12_0_hw_fini(struct amdgpu_ip_block *ip_block)
cancel_delayed_work_sync(&adev->gfx.idle_work);
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
gfx_v12_0_set_userq_eop_interrupts(adev, false);
+ amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
if (!adev->no_hw_access) {
if (amdgpu_async_gfx_ring) {
return gfx_v12_0_init_microcode(adev);
}
-static int gfx_v12_0_late_init(struct amdgpu_ip_block *ip_block)
-{
- struct amdgpu_device *adev = ip_block->adev;
- int r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
- if (r)
- return r;
-
- r = gfx_v12_0_set_userq_eop_interrupts(adev, true);
- if (r)
- return r;
-
- return 0;
-}
-
static bool gfx_v12_0_is_rlc_enabled(struct amdgpu_device *adev)
{
uint32_t rlc_cntl;
static const struct amd_ip_funcs gfx_v12_0_ip_funcs = {
.name = "gfx_v12_0",
.early_init = gfx_v12_0_early_init,
- .late_init = gfx_v12_0_late_init,
.sw_init = gfx_v12_0_sw_init,
.sw_fini = gfx_v12_0_sw_fini,
.hw_init = gfx_v12_0_hw_init,
}
}
+static int gfx_v12_1_set_userq_eop_interrupts(struct amdgpu_device *adev,
+ bool enable)
+{
+ unsigned int irq_type;
+ int m, p, r;
+
+ if (!adev->gfx.disable_kq)
+ return 0;
+
+ for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
+ for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec)
+ + p;
+ if (enable)
+ r = amdgpu_irq_get(adev, &adev->gfx.eop_irq, irq_type);
+ else
+ r = amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ if (r) {
+ if (!enable)
+ return r;
+ goto err_unwind;
+ }
+ }
+ }
+
+ return 0;
+
+err_unwind:
+ for (p--; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ for (m--; m >= 0; m--) {
+ for (p = adev->gfx.mec.num_pipe_per_mec - 1; p >= 0; p--) {
+ irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
+ + (m * adev->gfx.mec.num_pipe_per_mec) + p;
+ amdgpu_irq_put(adev, &adev->gfx.eop_irq, irq_type);
+ }
+ }
+ return r;
+}
+
static int gfx_v12_1_hw_init(struct amdgpu_ip_block *ip_block)
{
int r, i, num_xcc;
if (r)
return r;
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
+
+ r = gfx_v12_1_set_userq_eop_interrupts(adev, true);
+ if (r)
+ goto err_userq_eop;
+
+ return 0;
+
+err_userq_eop:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
return r;
}
gfx_v12_1_xcc_enable_gui_idle_interrupt(adev, false, xcc_id);
}
-static int gfx_v12_1_set_userq_eop_interrupts(struct amdgpu_device *adev,
- bool enable)
-{
- unsigned int irq_type;
- int m, p, r;
-
- if (adev->gfx.disable_kq) {
- for (m = 0; m < adev->gfx.mec.num_mec; ++m) {
- for (p = 0; p < adev->gfx.mec.num_pipe_per_mec; p++) {
- irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP
- + (m * adev->gfx.mec.num_pipe_per_mec)
- + p;
- if (enable)
- r = amdgpu_irq_get(adev, &adev->gfx.eop_irq,
- irq_type);
- else
- r = amdgpu_irq_put(adev, &adev->gfx.eop_irq,
- irq_type);
- if (r)
- return r;
- }
- }
- }
-
- return 0;
-}
-
static int gfx_v12_1_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
int i, num_xcc;
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
gfx_v12_1_set_userq_eop_interrupts(adev, false);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
return gfx_v12_1_init_microcode(adev);
}
-static int gfx_v12_1_late_init(struct amdgpu_ip_block *ip_block)
-{
- struct amdgpu_device *adev = ip_block->adev;
- int r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = gfx_v12_1_set_userq_eop_interrupts(adev, true);
- if (r)
- return r;
-
- return 0;
-}
-
static bool gfx_v12_1_is_rlc_enabled(struct amdgpu_device *adev)
{
uint32_t rlc_cntl;
static const struct amd_ip_funcs gfx_v12_1_ip_funcs = {
.name = "gfx_v12_1",
.early_init = gfx_v12_1_early_init,
- .late_init = gfx_v12_1_late_init,
.sw_init = gfx_v12_1_sw_init,
.sw_fini = gfx_v12_1_sw_fini,
.hw_init = gfx_v12_1_hw_init,
!amdgpu_sriov_vf(adev))
gfx_v9_4_2_set_power_brake_sequence(adev);
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
+ if (r)
+ goto err_bad_op;
+
+ return 0;
+
+err_bad_op:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
return r;
}
{
struct amdgpu_device *adev = ip_block->adev;
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
/* DF freeze and kcq disable will fail */
if (!amdgpu_ras_intr_triggered())
struct amdgpu_device *adev = ip_block->adev;
int r;
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
- if (r)
- return r;
-
r = gfx_v9_0_ecc_late_init(ip_block);
if (r)
return r;
if (r)
return r;
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
+ if (r)
+ return r;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
+ if (r)
+ goto err_priv_inst;
+
+ r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
+ if (r)
+ goto err_bad_op;
+
+ return 0;
+
+err_bad_op:
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+err_priv_inst:
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
return r;
}
if (adev->psp.ptl.hw_supported && !amdgpu_in_reset(adev))
gfx_v9_4_3_perf_monitor_ptl_init(adev, false);
- amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
- amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.bad_op_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
+ amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
static int gfx_v9_4_3_late_init(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
- int r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.priv_inst_irq, 0);
- if (r)
- return r;
-
- r = amdgpu_irq_get(adev, &adev->gfx.bad_op_irq, 0);
- if (r)
- return r;
if (adev->gfx.ras &&
adev->gfx.ras->enable_watchdog_timer)