From nobody Sat Jul 25 03:46:04 2026 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (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 28E3029C33F for ; Sun, 19 Jul 2026 19:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784491187; cv=none; b=Tf1fj4FKhRarQshlGZ3NxRbHdF5qlgMYyjVtFx1klyn7S60ZzDlcGwtpystQq/zl3RGtWMUBhfTdU5pvAlWEKWB4Pi97r7XxXS4Xtx3y8VsaQViCQsHOuurppji8yOwoIjC+iY2yzbAb8g2CRFpPUsBbMg7CANoNJyUQQg8raAQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784491187; c=relaxed/simple; bh=HtlgJEOcV9TvPw40PlMf9ou3r6CO7zfIG3w3eY986jw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EoXjJ4+7GL8vJwYp3XbQZujLmcwzdOwrtIF5lQBc5UPsFf376ZGNKPHnAItnu4GSZKWMMRZ08prOf8nUp4HDFlQ35UZ/7OfAapzHW+E+e0RLY07baPPVb2zGVRuhcnMydqYFBRThAZR94UooxywtFF8ReBQpNc0lIVhlGb8Yvd8= 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=dJBN9KC6; arc=none smtp.client-ip=209.85.215.171 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="dJBN9KC6" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-c999f162c9aso5894557a12.3 for ; Sun, 19 Jul 2026 12:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784491185; x=1785095985; 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=OXeHE7LmM8N9m7jjvtApZJl6UZon5En6RknZ9/+XFyo=; b=dJBN9KC6lmC0KvFQPaM8oN+LsMYR//j8g2ZxGlXy5J1t732tKP8GLeAMYDdymcL4nc 2T7JUBBLCP6wI7hooCqwcLgSYoAyA7HueAIRFC07+BtAGsWNeP0FXPP505kpy0RuvFTI Ut0qO+JUjqxxjG6qY2oT0N3ZWv2r0VAHGP8LVdv63CaiWNtsjbzFmn7FNfANiyyqV8J1 KMeP9YJxVycOIYFgWdn3Ll9k2SQJbV/5F5VFan7Mt6h8PT8LiHtCxqhBBLx8BIHV52nh YFZp8QANDgAbST5kWHJZljMPUUEd42i0ETDsmZXnFDO2eR5xEfv470Iwc4lUGNtt25EP vpeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784491185; x=1785095985; 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=OXeHE7LmM8N9m7jjvtApZJl6UZon5En6RknZ9/+XFyo=; b=gYSE5QpnflZsHSOn9QEnZF+Yq4ubNvP0ynDF7MU5+m/J01E9oj9YL4D5cV8KlPs91c /+MB0mgwnEKD0yj2hZTZcxeg4iyBpjyHBBKwbkNGifiD/1h5cHzkE5j3CS1gctr7Oqx/ NPVYo0k6pCDtIj+EZRpYDrHIsbXVoLm/3l/TFcSU5M9sq+Sqypv9GADdJH6SVpf4y9sk 0gnVaPV/94NBkuGaKSLi/I0C4A5DNoR6bQokVlveIAhS4Hf6O2FM2Zx9+Hgzcv/wlTt+ eg1xz0oFki94aM0vbbMZMfkZ9ye7MPAq8SjE8uPbCgK9IpfL4oFKagBupUKcP86o6FPe P2UQ== X-Forwarded-Encrypted: i=1; AHgh+RqTvRZofkgmP39Fr2w+aJY06XM0nllpiOBYL+zrbbDAf5HDU1kk8LGtZgITnDKLAeyD6NisxlLz4gc8Rak=@vger.kernel.org X-Gm-Message-State: AOJu0YyGKWClCR1x5k/P6dhYaz5/bCtohKCCH9DqaZT8zFVIK/56xzeo uzVkgRHOpEPhNjZB1/oHUXYLHcVm5ivv8KQu6NAUgygzysTgxGX8yNlK X-Gm-Gg: AfdE7cmHcZn9+fN5oyr1/Y1RJ/KVAP/ylcLzdx9lg4PCGAxMISGfCkZbQc2HEIlCHuH htSIa+UyEiapVAAONzMRq3NMnOdedb94XQO0WONH8QzXs6X+lUFb0ynedpqfjKlDBEy0Hl1B9Mz OM/Obsc24fn4f5oThmoyjW8ILogmqvMoUaCal/UYThIOePe0+vkOQzOhjDUSjoXIOy4l7ZfAn8O bcNdi6q17AKNViHVdJelHrsFQTBuBmTjdyW5La4UvMatLYEoQc90urVDViE09F3CxYTBQr62Am6 kUc1A5mcOgPNCL7C/MZMy+eVGX59RKe8gcaNF8cZlrRyW396nZuNiohlp8Or6haeYnADJHjXdFo LKPcrZpb30qRaRTdtt1fg+ZPant6C/pIgpRSOE8v0eZH74ORznt2rtimGq1ehU4FQw8/dSQfMWw iYVz6wC5yln4M= X-Received: by 2002:a05:6300:4047:b0:3c3:704d:57c4 with SMTP id adf61e73a8af0-3c3ad66819fmr11031755637.12.1784491185390; Sun, 19 Jul 2026 12:59:45 -0700 (PDT) Received: from PC.. ([103.172.209.59]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3142a20c158sm31076333eec.29.2026.07.19.12.59.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 12:59:44 -0700 (PDT) From: MishraMohit21 To: Sudip Mukherjee , Teddy Wang , Greg Kroah-Hartman Cc: linux-fbdev@vger.kernel.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, MishraMohit21 Subject: [PATCH] staging: sm750fb: Refactor init_status to use initchip_param Date: Mon, 20 Jul 2026 01:28:39 +0530 Message-ID: <20260719195839.24937-2-mishraloopmohit@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260719195839.24937-1-mishraloopmohit@gmail.com> References: <20260719195839.24937-1-mishraloopmohit@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The driver initializes the hardware by casting 'struct init_status *' to 'struct initchip_param *' in ddk750_init_hw(). This is technically undefined behavior, violates strict-aliasing rules, and is fragile. Furthermore, 'struct init_status' defines the 'reset_memory' field as a 2-byte 'ushort', while 'struct initchip_param' defines it as a 1-byte 'unsigned char'. On little-endian architectures, reading the low byte of the ushort happens to evaluate to the correct value (0 or 1) by accident. However, on big-endian architectures, casting and reading this field reads the high byte (0x00) instead, causing a silent failure where the memory controller is never reset. This endianness layout mismatch was empirically verified using a standalone test harness (scratch/be_test.c) compiled under a mips-linux-gnu-gcc cross-compiler and executed under qemu-mips. Resolve this by removing the duplicate 'struct init_status' entirely and using 'struct initchip_param' directly. This removes the unsafe pointer cast and ensures endian-safe hardware initialization. This change has been compile-tested only. No hardware was available to verify runtime behavior. Signed-off-by: MishraMohit21 --- drivers/staging/sm750fb/sm750.c | 8 ++++---- drivers/staging/sm750fb/sm750.h | 12 ++---------- drivers/staging/sm750fb/sm750_hw.c | 16 ++++++++-------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm75= 0.c index 89c811e0806c..5986dbef67c0 100644 --- a/drivers/staging/sm750fb/sm750.c +++ b/drivers/staging/sm750fb/sm750.c @@ -844,11 +844,11 @@ static void sm750fb_setup(struct sm750_dev *sm750_dev= , char *src) =20 swap =3D 0; =20 - sm750_dev->init_parm.chip_clk =3D 0; - sm750_dev->init_parm.mem_clk =3D 0; - sm750_dev->init_parm.master_clk =3D 0; + sm750_dev->init_parm.chip_clock =3D 0; + sm750_dev->init_parm.mem_clock =3D 0; + sm750_dev->init_parm.master_clock =3D 0; sm750_dev->init_parm.power_mode =3D 0; - sm750_dev->init_parm.setAllEngOff =3D 0; + sm750_dev->init_parm.set_all_eng_off =3D 0; sm750_dev->init_parm.reset_memory =3D 1; =20 /* defaultly turn g_hwcursor on for both view */ diff --git a/drivers/staging/sm750fb/sm750.h b/drivers/staging/sm750fb/sm75= 0.h index d2c522e67f26..313c2683bf6c 100644 --- a/drivers/staging/sm750fb/sm750.h +++ b/drivers/staging/sm750fb/sm750.h @@ -38,15 +38,7 @@ enum sm750_path { sm750_pnc =3D 3, /* panel and crt */ }; =20 -struct init_status { - ushort power_mode; - /* below three clocks are in unit of MHZ*/ - ushort chip_clk; - ushort mem_clk; - ushort master_clk; - ushort setAllEngOff; - ushort reset_memory; -}; +#include "ddk750_chip.h" =20 struct lynx_accel { /* base virtual address of DPR registers */ @@ -102,7 +94,7 @@ struct sm750_dev { /* locks*/ spinlock_t slock; =20 - struct init_status init_parm; + struct initchip_param init_parm; enum sm750_pnltype pnltype; enum sm750_dataflow dataflow; int nocrt; diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/s= m750_hw.c index 34a837fb4b64..54c1b241ae6e 100644 --- a/drivers/staging/sm750fb/sm750_hw.c +++ b/drivers/staging/sm750fb/sm750_hw.c @@ -66,20 +66,20 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pc= i_dev *pdev) =20 int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev) { - struct init_status *parm; + struct initchip_param *parm; =20 parm =3D &sm750_dev->init_parm; - if (parm->chip_clk =3D=3D 0) - parm->chip_clk =3D (sm750_get_chip_type() =3D=3D SM750LE) ? + if (parm->chip_clock =3D=3D 0) + parm->chip_clock =3D (sm750_get_chip_type() =3D=3D SM750LE) ? DEFAULT_SM750LE_CHIP_CLOCK : DEFAULT_SM750_CHIP_CLOCK; =20 - if (parm->mem_clk =3D=3D 0) - parm->mem_clk =3D parm->chip_clk; - if (parm->master_clk =3D=3D 0) - parm->master_clk =3D parm->chip_clk / 3; + if (parm->mem_clock =3D=3D 0) + parm->mem_clock =3D parm->chip_clock; + if (parm->master_clock =3D=3D 0) + parm->master_clock =3D parm->chip_clock / 3; =20 - ddk750_init_hw((struct initchip_param *)&sm750_dev->init_parm); + ddk750_init_hw(&sm750_dev->init_parm); /* for sm718, open pci burst */ if (sm750_dev->devid =3D=3D 0x718) { poke32(SYSTEM_CTRL, --=20 2.43.0