From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 6A25A46EF66 for ; Thu, 6 Aug 2026 11:37:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786016281; cv=none; b=rA+V1xHrPeMPT1F1MmNkeodXjZ9z2sNwJq55QOyAg/qZBamqElWxBJC5LribARBpkjIWJw3bbEC3/lg/RwKk5H+u2D1ZOs4cQKQJ+WZu6ncVAhDo0Nx4pNfhyS2YTTQZk25KYhZNfpURp5FkRS/p1INkzKYv18/zGcgWXwcDuvg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786016281; c=relaxed/simple; bh=faQUEqVejvJ1DtpDHQdubTjVz3rqmGBSLD7U7PGpMCQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=IC5wWZDQ2ngOUvwRVqoV/ApK+BJrt5P36bi2LfftHSi2Jme4ShiaF0R1fdWgy4vs0VvqqDx/QspsmKtLb9Kn6LzjePku6Ew2HedvSs6Znn2dzQW/1BPL/KXp9jTf0RV2aEAkx6y0Jh8yeNssQIoJKvgnGlLqH4NwtH1qVTgT70g= 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=nEFZ7Nhm; arc=none smtp.client-ip=209.85.214.170 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="nEFZ7Nhm" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cc73e322dbso23964215ad.1 for ; Thu, 06 Aug 2026 04:37:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786016269; x=1786621069; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=ac2Di20naM1kK1rDBYOEASSwXxtiN9foNYcj9gl/wyc=; b=nEFZ7Nhmu1y6JmgZ3S9AKFP7KU8qVdhXUZCachpxZ6FnazCSMB9cgyjsaByZ9hPW0b GTKGsKp6S1cyukwmE+N7o+ZGUvSp9lNgIFXUsqkiHxFGhM/4TN5ZjGwUoTlvDP6LQn1T fa8F6SII+rt1SDprpeyfT29VJKrOAtu9Yne2rZB36+fdN1ZMCglp8P/Cpijl7oOzXuQ8 TZ8H/9w3NdhsL7JJix6vm+K338BHakfE9Ndf1MNW71cokxJjxHln/DSLjCsBWRLlmQES a/PfekhO4g9bOUkFpInshhOzrmsqS3zLQJh7jDsnnbGkL/tRGHk2K5OsHiGbEbb1VW7Q bwcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786016269; x=1786621069; h=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=ac2Di20naM1kK1rDBYOEASSwXxtiN9foNYcj9gl/wyc=; b=nD1EJGQ0tjb2dDzsnYLi11/5AJFm2M5rhSUiZcmUlFiTKWbnpYEaQTKDHzyk+yhAk9 juSe3sf0frmpRwai7hggX47BYBZvpLEEtVkReuxmrznMDbb+LDYbgf+bJ0fp6JFI2NB5 V7CBuSvJneE1nqxCOEbTnGHDofW49ChBTV24LpinzERZOaoI9AlDXg9SaERpjfafzov/ bYpYK+h3pIa7DYtiXNtcnN0lTXVa9V9F0kLSkv8pEesmbrN7BOmtM8hv5C9YSVqQT55P h0+jZjAQtJ5BjZIEBwxTVWfPJ/3Nf1sWuWZi+U8Mtyw1S6622XlgkuBKAr7BrCZLV++7 WxsA== X-Forwarded-Encrypted: i=1; AHgh+RrTlaQqUWFinwcztAx5ozZuIkWdaToCPpuOQZqkioM5jyVXvQ7UKkf/6/U0jedn1r9ue9Ez914MXpHgLNM=@vger.kernel.org X-Gm-Message-State: AOJu0YxPaPgNs9S7+kjz05J+l2wrX6K8E9tGsvuYKCRxND9FFx2xy+TW hK5zyJWx40taVGtIc89pztjdeWoihUAlQAwz6MpX0+a5+OHxUoaqxaMa X-Gm-Gg: AR+sD12kCredjjqwa8bVZDIyOpqnvyWPzEeb7rhSh+EukkOvoeKda9UuoOB+H/DlMWw +zLz8cP4rAO6MUwWciCOerMcR/EDmF38d0v0oxPFfe/N4Czb1UKwyPuSSbydNABq4JpvVFYIBo/ sxetuU5c4RadGHbU92nE8Ag6BoDkRdF+4DfhrQJOK7MB6z9getUFLbsBWjFp6arA0KbauZnI0BO 226NyFUpp4mh8PMTo8j5ZXli4oAlKRTLJVWK1D/nae1/pnJ7iP1yaWUZEdnqBzLTclAOusRDwPY VfwQKpK+OADfoSXdyY7n6wX131MeY9+INj6e/wWBcFA5fYsAT9qvtPsU6GV5cvfZIHjPmFdrBaQ Veb0rknJd3kOwkYJwc8ljcuPQelJhUe8UPxrplx4Xpm2E7bf9f0FdnNLTxKWG+pnkfcsZ0WmV0n r0h5U1CIzDzuNrRm117rlsN/uZKJIVZ/806nTY80HhP3I4uIh4WVvCUg== X-Received: by 2002:a17:90b:4b87:b0:38e:7a05:9c0a with SMTP id 98e67ed59e1d1-3903c5c0fedmr12125722a91.18.1786016268630; Thu, 06 Aug 2026 04:37:48 -0700 (PDT) Received: from SC-GAME.lan ([104.28.222.46]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31586162e80sm30561332eec.0.2026.08.06.04.37.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 04:37:47 -0700 (PDT) From: Chen Minqiang To: Pratyush Yadav , Michael Walle , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: Takahiro Kuwano , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Chen Minqiang Subject: [PATCH v2] mtd: spi-nor: allow force unlocking via DT property Date: Thu, 6 Aug 2026 19:37:33 +0800 Message-Id: <20260806113733.31042-1-ptpt52@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <2026-08-05171214.2934-1-ptpt52@gmail.com> References: <2026-08-05171214.2934-1-ptpt52@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Some SPI NOR flash chips (such as generic or unlisted chips used in vendor devices like Tenda AX12L Pro) have Block Protection (BP) bits set in the Status Register by bootloaders or factory settings, locking flash blocks. Because vendors frequently switch between various generic SPI NOR flash chips ("Flash Lottery"), it is impractical to upstream explicit chip ID flags (SNOR_F_HAS_LOCK) for every possible generic chip variant. This patch introduces support for the "linux,force-sr-unlock" Device Tree property: 1. In spi_nor_init_flags(), set the SNOR_F_HAS_LOCK flag on the flash instance if "linux,force-sr-unlock" is present in the flash DT node. This allows spi_nor_late_init_params() to automatically populate default locking_ops without altering swp.c. 2. In spi_nor_init(), trigger spi_nor_try_unlock_all() if "linux,force-sr-unlock" is set, invoking Linux kernel's native spi_nor_unlock() mechanism. Signed-off-by: Chen Minqiang --- v1 -> v2: - Set SNOR_F_HAS_LOCK in spi_nor_init_flags() when "linux,force-sr-unlock" is present in DT, allowing spi_nor_late_init_params() to set default locking_ops automatically without modifying swp.c. --- drivers/mtd/spi-nor/core.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index ccf4396cdcd0..9aa2aaa10c38 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -2956,6 +2956,9 @@ static void spi_nor_init_flags(struct spi_nor *nor) if (of_property_read_bool(np, "no-wp")) nor->flags |= SNOR_F_NO_WP; + if (of_property_read_bool(np, "linux,force-sr-unlock")) + nor->flags |= SNOR_F_HAS_LOCK; + if (flags & SPI_NOR_SWP_IS_VOLATILE) nor->flags |= SNOR_F_SWP_IS_VOLATILE; @@ -3332,7 +3335,8 @@ static int spi_nor_init(struct spi_nor *nor) spi_nor_cache_sr_lock_bits(nor, NULL); if (IS_ENABLED(CONFIG_MTD_SPI_NOR_SWP_DISABLE) || (IS_ENABLED(CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE) && - nor->flags & SNOR_F_SWP_IS_VOLATILE)) { + nor->flags & SNOR_F_SWP_IS_VOLATILE) || + of_property_read_bool(spi_nor_get_flash_node(nor), "linux,force-sr-unlock")) { spi_nor_try_unlock_all(nor); } -- 2.17.1