gpu: nvgpu: add priv_ring.intr_retrigger HAL

Add a priv_ring.intr_retrigger HAL for chips that need to
retrigger pending interrupts in the PRIV_RING ISR.

Jira NVGPU-9217

Change-Id: I976f26a39d148a0ce1ad54b53d982dc0af58197b
Signed-off-by: Austin Tajiri <atajiri@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2839756
Reviewed-by: Rajesh Devaraj <rdevaraj@nvidia.com>
Reviewed-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Austin Tajiri
2023-01-09 06:44:16 +00:00
committed by mobile promotions
parent 976b4efe64
commit 6fffdddb7a
2 changed files with 21 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
/* /*
* GP10B priv ring * GP10B priv ring
* *
* Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. * Copyright (c) 2017-2023, NVIDIA CORPORATION. All rights reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"), * copy of this software and associated documentation files (the "Software"),
@@ -240,4 +240,8 @@ void gp10b_priv_ring_isr(struct gk20a *g)
if (retries == 0U) { if (retries == 0U) {
nvgpu_err(g, "priv ringmaster intr ack failed"); nvgpu_err(g, "priv ringmaster intr ack failed");
} }
if (g->ops.priv_ring.intr_retrigger != NULL) {
g->ops.priv_ring.intr_retrigger(g);
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2019-2022, NVIDIA CORPORATION. All rights reserved. * Copyright (c) 2019-2023, NVIDIA CORPORATION. All rights reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"), * copy of this software and associated documentation files (the "Software"),
@@ -167,6 +167,21 @@ struct gops_priv_ring {
void (*isr_handle_1)(struct gk20a *g, u32 status1); void (*isr_handle_1)(struct gk20a *g, u32 status1);
/**
* @brief Writes the unit level INTR_RETRIGGER register.
*
* @param g [in] Pointer to GPU driver struct.
*
* This function writes the INTR_RETRIGGER register to handle the case
* in which an interrupt is triggered between reading the interrupt
* status register and clearing the interrupts. In this case, the rolled
* up OR of pending interrupts will not change from 0 to 1, so an
* interrupt message would not be sent to GIN. Writing to INTR_RETRIGGER
* ensures that a new message is sent to GIN.
*/
void (*intr_retrigger)(struct gk20a *g);
/** /**
* @brief Returns number of enumerated Level Two Cache (LTC) chiplets. * @brief Returns number of enumerated Level Two Cache (LTC) chiplets.
* *