On 9/4/25 4:39 PM, Alexander Stein wrote:
Hi,

Am Donnerstag, 4. September 2025, 15:52:38 CEST schrieb Marek Vasut:
On 9/4/25 8:36 AM, Alexander Stein wrote:

Hello Alexander,

Maybe the GPU remains halted because
setting the GLB_HALT stops command stream processing, and the GPU never
samples the clearing of GLB_HALT and therefore remains halted forever ?

Exactly that, and that's expected.

FYI: in a new release of system manager software (starting from 
lf-6.12.3-1.0.0),
the GPU reset is reasserted in SM software already [1] and access to GPU
block control has been removed from Cortex-A [2]. Starting from B0 step this
version is required AFAIK.

I don't think the SM is involved in this, because if I do the following
test, the MCU also fails to boot unless I do a reset:

Is this some other reset than BLK_CTRL_GPUMIX? If so, it might be required.
Don't know much about internal details though.
Yes

   296  /**
   297   * panthor_gpu_soft_reset() - Issue a soft-reset
   298   * @ptdev: Device.
   299   *
   300   * Return: 0 on success, a negative error code otherwise.
   301   */
   302  int panthor_gpu_soft_reset(struct panthor_device *ptdev)
   303  {
   304          bool timedout = false;
   305          unsigned long flags;
   306  
   307          spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags);
   308          if (!drm_WARN_ON(&ptdev->base,
   309                           ptdev->gpu->pending_reqs & 
GPU_IRQ_RESET_COMPLETED)) {
   310                  ptdev->gpu->pending_reqs |= GPU_IRQ_RESET_COMPLETED;
   311                  gpu_write(ptdev, GPU_INT_CLEAR, 
GPU_IRQ_RESET_COMPLETED);
   312                  gpu_write(ptdev, GPU_CMD, GPU_SOFT_RESET);
   313          }
   314          spin_unlock_irqrestore(&ptdev->gpu->reqs_lock, flags);
   315  
   316          if (!wait_event_timeout(ptdev->gpu->reqs_acked,
   317                                  !(ptdev->gpu->pending_reqs & 
GPU_IRQ_RESET_COMPLETED),
   318                                  msecs_to_jiffies(100))) {
   319                  spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags);
   320                  if ((ptdev->gpu->pending_reqs & GPU_IRQ_RESET_COMPLETED) != 0 
&&
   321                      !(gpu_read(ptdev, GPU_INT_RAWSTAT) & 
GPU_IRQ_RESET_COMPLETED))
   322                          timedout = true;
   323                  else
   324                          ptdev->gpu->pending_reqs &= 
~GPU_IRQ_RESET_COMPLETED;
   325                  spin_unlock_irqrestore(&ptdev->gpu->reqs_lock, flags);
   326          }
   327  
   328          if (timedout) {
   329                  drm_err(&ptdev->base, "Soft reset timeout");
   330                  return -ETIMEDOUT;
   331          }
   332  
   333          return 0;
   334  }

Reply via email to