From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0131113DDAA for ; Mon, 3 Aug 2026 12:48:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785761295; cv=none; b=fkljcGS+qwPTBYN6HrMQ2pKHpWkdFCa6tbuE97Q3fwvTOB3gfi5xt3Y36xatweHiUz3o4RfW4z8mj6LLPZMU+RMby1QLIG8w+9r0hZWXRIP2RgQvmrKE3cKLRMP2Ne1g0Oj2B8qZVRJL5ececD+bLoUg5ok7EMED/PUfrwSvmHQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785761295; c=relaxed/simple; bh=20Q+ifxIqvJahyckms4IAzXB/cQsXmbN39auEy23OLg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gj9EN6W0U8DTA0HaaVX4QBrMETmX4SwUYewWCcoZaqqEqCGCP45DELTlQA9yvEgmp/N90U+zJRgROV4GbFIg80X1AFSqHs8rxuLsR6mHmSgP5sOJRlsjZ+9yzmZHhQUMyys8Sw5ttpPU4rqXH2NSdZzoiDhfEvfXAQvSLQE7f+k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WLAFVEOv; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WLAFVEOv" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4954afac04bso24410675e9.0 for ; Mon, 03 Aug 2026 05:48:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785761291; x=1786366091; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VGjGkq5L6MDjlfKKy2P7J8KhfuvXYKdXAT9JWAbQVl4=; b=WLAFVEOvrySCTYmXynnJbBpCXc6PohA+sePFEf84guPhhLpgNqDrkVSugbJ5KV7qfF cxztnr7IdFXD4Yijv/z3XNFDBeb7VbqW4Hu2pH0xzs6hkTTzYSEpVGJNCgnz/WeHe3pO lBPU+s7yygq36VUFsbs2KQeAjgGy9FsHp2uP8y7Blcnv91+oAByEecBvvW6EqXSR1XSq PAukTMUR4+loiBuPe4YsVNo10XlrO+lGRI6PgVeoFiCug8XMgrmgcJ0DsxuTGSOMRg67 wsJxWwS99/9yi9kZsYDka7zvAq/qAjC/fj5yYP2tzCuqKtY8TArEc/cBYY0MMXr1ePjn gZxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785761291; x=1786366091; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=VGjGkq5L6MDjlfKKy2P7J8KhfuvXYKdXAT9JWAbQVl4=; b=TMFPXaJGd8egWVsA9IHeuNL17jG0SkHgwyvU3qqKfbmZp8LI/6E06AzQ+Pqc8VUaWm 78+CqMSmyjHBO+aS0DpO+QJwtWD/E6X3YDMnJAsA/teZcwf95OjbCfzGGBJWI1Yraybi SH7TaEfp+xImnAFOvCtJMUKcVea3VSkTAUWpfUvBRr5Vd2qrhmadzoBFKlsj5s6VfE8E OB3oF6f+PjXyhf00bV6Fn40bBROzdG2O/R6iZvlkF4YBdaPicyY/eJPrzMLgxuc3YqFo hB2rHjk6lvWUONQNiGgouZf1BFKPf2YoSHG6M28h0fRmWNlkUf3DAcdxHokcMA5OGCgo njgQ== X-Forwarded-Encrypted: i=1; AHgh+RpSwpBf06pYmue7hdNPpAheS1j7pciGxyDbPH6rkuvEpZk/ZpUCtvIOK8OU9fM9Dl4giTI4kev9pbA7qIM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzl6fgcHGasXkrOZ2oq7wXHCdUqIYlU2fEVw7scFOaxaAbNmODc 31na2U1ceADe6veVdeY53wNN2evwpIB3hCMjFarDdcootrtXO3GRwjac X-Gm-Gg: AR+sD13fuO2U+gz5r2xyBlKvMn6gaI3LSA2+q/y3J4xr/jTqL1wl8SIhVR3t8DPEBos am0tNZ8pxCiZh1b5/yFwc8L7VIXlRBrX6KAos3kXcmiO0IPHmG91JmJLomrh2lmlcVWLufErbH4 OrySwIz7QwuwSaoD0rLSQkRmwqzSmPZ0uwjhJgkozh0fo9pDl6fwQaL4rz9LsiauX17npqkd/l2 Q0NVaM1/QqDBKpBPxG17mfcOWvmNHYTUcpzFjuQvSYhSiAbbstuZm/V6EqTn041icG7Lrzx/uIO tgFZnEQZB7XAviKiLKxukZtv3R/1HMZuuSMxKcIhf6FyjtrD5meXb62gNhJ7eu5G7WRuM9gG8po N5vjOooo7wD5Z+XYwGADVRDbU9SV95EdWCVQSD6GTa52KU61fFXF2nUkq8ZunI6cEfja6lJOBs9 X8KX1QymOh4PypedLXjYM5nj/DAqdBgEyf+SH4MTX7N2OiI6gOU/dYyvouE22eLIt5zXZPgICrK FfF2hWZ5RS1bCclKYPawhAS X-Received: by 2002:a05:600c:3b01:b0:493:f0f5:f2d7 with SMTP id 5b1f17b1804b1-4980c66c90fmr179358945e9.7.1785761290518; Mon, 03 Aug 2026 05:48:10 -0700 (PDT) Received: from osama.. ([2a02:908:185:7e40:d656:7858:1438:5d8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd4562a38sm32378263f8f.21.2026.08.03.05.48.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 05:48:09 -0700 (PDT) From: Osama Abdelkader To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Osama Abdelkader Subject: [PATCH v2] drm/panthor: use local variables for firmware interface counts Date: Mon, 3 Aug 2026 14:48:06 +0200 Message-ID: <20260803124807.27094-1-osama.abdelkader@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <2125ea5a-d878-4032-9338-d0cd0970ccfa@arm.com> References: <2125ea5a-d878-4032-9338-d0cd0970ccfa@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit panthor_fw_init_ifaces() validates the firmware interface group count before iterating over the CSG interfaces. panthor_init_csg_iface() does the same for the per-group stream count before iterating over the CS interfaces. Store those validated counts in local variables and use the locals as the loop bounds. This avoids reading the same control interface fields twice and makes it explicit that the loops use the values that were just validated. Signed-off-by: Osama Abdelkader Reviewed-by: Steven Price --- v2: - Reword as an optimization/cleanup instead of a firmware trust-boundary fix. - Drop the Fixes and stable tags. drivers/gpu/drm/panthor/panthor_fw.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor/panthor_fw.c index e2fcbd639c3c..6e6da98d795e 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -959,6 +959,7 @@ static int panthor_init_csg_iface(struct panthor_device *ptdev, u64 shared_section_sz = panthor_kernel_bo_size(ptdev->fw->shared_section->mem); u64 iface_offset = CSF_GROUP_CONTROL_OFFSET + ((u64)csg_idx * glb_iface->control->group_stride); + u32 stream_num; unsigned int i; if (iface_offset > shared_section_sz || @@ -972,8 +973,8 @@ static int panthor_init_csg_iface(struct panthor_device *ptdev, csg_iface->output = iface_fw_to_cpu_addr(ptdev, csg_iface->control->output_va, sizeof(*csg_iface->output)); - if (csg_iface->control->stream_num < MIN_CS_PER_CSG || - csg_iface->control->stream_num > MAX_CS_PER_CSG) + stream_num = READ_ONCE(csg_iface->control->stream_num); + if (stream_num < MIN_CS_PER_CSG || stream_num > MAX_CS_PER_CSG) return -EINVAL; if (!csg_iface->input || !csg_iface->output) { @@ -990,7 +991,7 @@ static int panthor_init_csg_iface(struct panthor_device *ptdev, } } - for (i = 0; i < csg_iface->control->stream_num; i++) { + for (i = 0; i < stream_num; i++) { int ret = panthor_init_cs_iface(ptdev, csg_idx, i); if (ret) @@ -1015,6 +1016,7 @@ static int panthor_fw_init_ifaces(struct panthor_device *ptdev) { struct panthor_fw_global_iface *glb_iface = &ptdev->fw->iface.global; u64 shared_section_sz = panthor_kernel_bo_size(ptdev->fw->shared_section->mem); + u32 group_num; unsigned int i; if (!ptdev->fw->shared_section->mem->kmap) @@ -1034,17 +1036,17 @@ static int panthor_fw_init_ifaces(struct panthor_device *ptdev) return -EINVAL; } - if (glb_iface->control->group_num > MAX_CSGS || - glb_iface->control->group_num < MIN_CSGS) { + group_num = READ_ONCE(glb_iface->control->group_num); + if (group_num > MAX_CSGS || group_num < MIN_CSGS) { drm_err(&ptdev->base, "Invalid number of control groups"); return -EINVAL; } - for (i = 0; i < glb_iface->control->group_num; i++) { + for (i = 0; i < group_num; i++) { int ret = panthor_init_csg_iface(ptdev, i); if (ret) return ret; } drm_info(&ptdev->base, "CSF FW using interface v%d.%d.%d, Features %#x Instrumentation features %#x", -- 2.43.0