From nobody Tue Sep 29 07:42:02 2026 Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.48]) (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 37D48437455 for ; Mon, 10 Aug 2026 23:05:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403106; cv=none; b=ot/dTm3cmeZqo8JHZmk06UFwOVftwsUM4JValnHfrTgksbYA37q8cKET6phvW0maesmopFJ3Rn+dZQyCckD/zQbJcIirjxBAYg3OpaSlfdVWNlGIobv47kEK2U0r+X89eFh+g1YAiKUAVcBkeMo/1YIY/58HsOI9pbm7fJ0Dja0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403106; c=relaxed/simple; bh=C8wxNRLHTXJnjE555Pc5YpGfAsMOcsNHZykjvR8RKV4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mFotIejTF5IWT91UpPkDUZ7G4ujtGH9e3oW4A0vDPXacCFxvnNK9Mn2U1RFit9PQ29O77VJAQQ9HCG+WkxtpMnE/cdTVpZcVSu5L0ivUmfE7ig9Hq4AaXmQ+W4Bmp4SRlEo+zw9YWrMl+dDEBFbt59GCcYmfDouMc0S+2TIJKXE= 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=Auabhuik; arc=none smtp.client-ip=209.85.210.48 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="Auabhuik" Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-7ee125ec926so197573a34.2 for ; Mon, 10 Aug 2026 16:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786403103; x=1787007903; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WncUUdXp2NNgl8obhgaBdPAvIEYbLzW9R/2km9b9tx4=; b=Auabhuik/nthiUj0ZO8gKIV0CfhfN29Co96D9pfTyECRjqZlW29IusYkIVYjNmKrhS kRwJi07hrqcjsgYSCrCsxhsnKQB81P6GHoZDmvBB8H+SZ7/8uqflvrom26X/OJkghyog 3x/gRZN34xD72QtIB6WTInAxSFwX2oL3crLeVGnUOaqp5vg9cqEJQt7cp9dl7zrRG3Lg VHtqWWOK6w4MsaRvdB2aRM/Io74zv+8riTvnmNsxOfOkjxvUgzvccc+qo1F4xxurs/1m H3dUjQlxf71Q74KoAcyeQjwjxRcFsvfMHTfXxJ8ATW/vHtK1lzJkyAwJc6kY0vRAzdTm /H8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786403103; x=1787007903; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=WncUUdXp2NNgl8obhgaBdPAvIEYbLzW9R/2km9b9tx4=; b=l2GVojnh21MHiJTAEM/DU4RpBwwoU3jkQlsvfa3wSXR+gew+jHjVUwcoZbV9OT7lvf I5oG6gfj5cZOgsoGlNvwYeWIFcANbInNd1lDTbSi3joXqL8nvB80cb54/+f/u0t0idrv yf3AvLHlqJmMv/0fwOwT0Ld79eRhA9ryYcXUKIETWvmU/ZRHcNpOhQmNZ/MtItVfRxsr 54Ggswf5OchWt+ZzzNUt69RQx5trPTdNrwoLwI/8heb9Z0JO2UEOPN/xFxf2iQyqXNSK UZ/ERMzYv/ATdUQ+Hykd4qjEzEgFD63Vs92D2JRCxhrJXOHHOa2jyfeAkwoi55alpEGi +Hyg== X-Forwarded-Encrypted: i=1; AHgh+RpXUtLFH7byyj761RUyPmXl9AyGbUleA04MBhMHRbGRKnUw1LvrWNJExv4l3u5/+CzoESkW9mK7IwQMAbA=@vger.kernel.org X-Gm-Message-State: AOJu0YxsTDS1XOjF0kLt13GHBmdMkGcl3wrGSn9RXXMnDVe1AilMr9FJ heHym87Xk/itId2tahb3UbGQXWUn7ldO1FOkMhOs5KyULqI4m0aBV/u0 X-Gm-Gg: AR+sD104g3DMqNbPqWWETpecd4P69ukYZYxCNmrA0q5CUJUg4nCMpWu1+wKxnCb0xgc epLsudmdhN7lAIZBcMYMSEHHFZcYCFeDoTHByGMmVQTwzb2qtPxCIdohVP41qgxKAjXwN4sZMME OBZKNAYnYFtKreHhDt9ZDwXsLkS2lBsV0IypYrZN1/izvQt0G8/CoMK8X4RgODLCVU3o+PUiLjf ELHq2MzNYlRDFR/KBqOUV0yXQBmQPWPYy+k3RwyH7+5qPiPuiZx/8EPcJ1ogJUY1855DQv2z92g 8VqYF+fwZ6JRivZkcAYVK/vlopGxUUo/3ERuVCvoAma5joVBTm5if2CqbrbuTzThzQtoUy1Y4wr eoVm+q4UcLEXPqpoPLLh49ol7qMIqVTS5ZP7m/jgKN2F9DpEawa1uT8r5/wbkb0Mv9nQtI0xDhZ wsCw385Wg5UCoF6SQkuuhIdAXoKm+RhPtFq+Me00YWNntBr3iAsqr2VjC44jMRHXNvG4N05Dl4c U6e7CCXfy5VlpRBj6tWZbqHsp7mj8Kdxh5QvtlQhSOQqmF4f7b7JUz4x1Aj8FYOEKuoj8CdiBQ6 53vJPO8VjDAYRMDdRUMoavQsLpRIQcnRKKOiMH6JaL3uUh9Bkoj2mze3HK3Lt+xmPssDjoNec6P UX33YCItw7lud/gA6 X-Received: by 2002:a05:6830:4414:b0:7dc:d967:63de with SMTP id 46e09a7af769-7f1e5c98e5cmr32808491a34.3.1786403102967; Mon, 10 Aug 2026 16:05:02 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f35b5a7616sm8921584a34.8.2026.08.10.16.05.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 16:05:02 -0700 (PDT) From: James Hilliard Date: Mon, 10 Aug 2026 17:04:49 -0600 Subject: [PATCH 1/3] dt-bindings: mtd: sunxi: Add randomized OOB flag Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-1-463853a14ad9@gmail.com> References: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> In-Reply-To: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Maxime Ripard Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 Allwinner NAND firmware stores the bad block marker through the controller randomizer. The mainline driver instead compensates the first two randomized bytes so that the marker remains plain on flash. On H6 and H616, the firmware also uses a fixed protected user-data placement while mainline fills the OOB space left after ECC. Add an opt-in property for NAND using the randomized normal-page OOB format. Signed-off-by: James Hilliard --- .../devicetree/bindings/mtd/allwinner,sun4i-a10-nand.yaml | 9 +++++= ++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/mtd/allwinner,sun4i-a10-nand= .yaml b/Documentation/devicetree/bindings/mtd/allwinner,sun4i-a10-nand.yaml index 9d061e2216cb..7eda1275135d 100644 --- a/Documentation/devicetree/bindings/mtd/allwinner,sun4i-a10-nand.yaml +++ b/Documentation/devicetree/bindings/mtd/allwinner,sun4i-a10-nand.yaml @@ -79,6 +79,15 @@ patternProperties: minimum: 0 maximum: 1 =20 + allwinner,randomized-oob: + type: boolean + description: + Use the Allwinner randomized normal-page OOB format. This enables + the controller page randomizer, stores the bad block marker thro= ugh + it instead of compensating the marker so that it remains plain on + flash, and selects the controller-specific protected user-data + placement used by Allwinner NAND firmware. + unevaluatedProperties: false =20 required: --=20 2.53.0 From nobody Tue Sep 29 07:42:02 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (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 5CD2E3EF67D for ; Mon, 10 Aug 2026 23:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403107; cv=none; b=dsLGk6kXLMlTiFvtwsf34eionoLO+bTeouNKzGYvYmNDmSvRQot9Oa+58gnTXADmiOJDmOC9FbjwOZfJXfqv4c+xA1620PgVd3H80xHkfNORRRp9CR3LQVGA0Zud/DN6r9KyMinyzL+P+qSxMjJKXwCp31lQ7joHcH2TWqE/xhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403107; c=relaxed/simple; bh=d2jVZl2zwD18x6XmwVp2/7ZIbxAPDvJYdaWhpYa/9+I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AhNn74cLaSQovEKCDVtxNHP2JuL+nQPUEy28V8Q/NPnVBAJaV3bJQnHoUhavUEBO42q8Qqd8+vr9bc1O5Da8vX7jhuVSB9W7D6H6NJBICVE0o90bOphwvylNdISzWauxg+py9ruvnKR60q+LC8CHu9lc+2Y+iyXy2vud209xgPM= 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=Lpl6w7e8; arc=none smtp.client-ip=209.85.210.49 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="Lpl6w7e8" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-7eb63dbd229so292610a34.1 for ; Mon, 10 Aug 2026 16:05:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786403104; x=1787007904; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SgRrZ9Syd42HBAGwa14VS7M9xbVwRyd/vuhJqBFFn7w=; b=Lpl6w7e8RUst/mOmhN0aEFpe29dN4V7MwhZj7EW8AaIi99NXqlrFnPMNn2jqK/FP+d 0AOqPMrIHOhTRGPGsKSryv0QJ742RbqZr9qsT/L+JIIJxjdpYre50sXd2PqK6Wa/hegp IxEYnA/rEqGgR/zJkyypamAWhMgICLwFjIkSgYz0ktPff5586BAHdbfDxk3eJ/msaeT1 Ov1E1sT/yodokS99SwVZkMZIEC8bqSIfoIzUTOLYLSkVyLtYqDCH9rd/uY2JPFHvkNNx bpsqe+oLJGmVPgniZ5Kb6bag5z/H4qoTNqq5ncmBwY+GXoBqT9cwLEOK9pZPqZO/i723 Ji5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786403104; x=1787007904; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SgRrZ9Syd42HBAGwa14VS7M9xbVwRyd/vuhJqBFFn7w=; b=lSS7VRASbiMGbeIQf/yP4f8wMNbES5ubFANb9/Nlx7kJF11s7aW7+LmXC1xRTacEmd pDJAYO3IEHPeSBsAqClqjK8/0iyrVs0EfFnJTLvDGo8FRg7Me6OzuWUbDhSaSNxcxl4i giORjmzPb9K19FhvEUKoq1mFGhzPvnd2grDXiJekDrTaA1R1gVr7JvrDTPZNc8xRlcBT yK36lUrVL8ViXHvNWhxNahfmuRX1hbn6NoIkh14lgdH+W7oEzWYqmUwpE8t8atoH3nSF mZUS1XuxroY8VPAyqIeBox3y8TYKy/90A/OdhCc1iNu/p8Mi5ap8/2Un5hRLX7go+W0L J2gg== X-Forwarded-Encrypted: i=1; AHgh+Rp+CMWPPjyCfp1yp9UvbJ85gd9h+93oRYDAyALI2KZInSpiaorreK1x1fhdrBB3x0abNWukSXv/u1loX2w=@vger.kernel.org X-Gm-Message-State: AOJu0Yxod0sjRe+OXh8tcEVv2BbwJoNcOGtMdI/qXWL85W+X7MtHPxw0 URj9DImhhIADEv3ISkf7fX8rPb5YBY46SzrGch5HcfpGd0IJu0rnULwB X-Gm-Gg: AR+sD11NkRQZGOOY+ZrGCOB1m/RSurh6xSP+sfZVDcDq4wupcbracKmmWZ2k8y/bjN3 a/m0D2QAiYe8vqw5HZkK/Fh6ntiXBJLyQj6GpZYPbcGU737C6MsqJzaChreHN5vy1vk1mYpUSEa GjCrThWcBejmNFuD2reOvroVfBkbWoqim3sVTaflU2rueaje5M3U+GWyEZxH6InjzAiA1M1I5/w Hc5d9lqbO86rODm8+EiaNrmYkC1BZNaXuUIv8UEHjU+gjLTWcW5FWdJAlQV5tw+8ugL9UYbweCg 2gWOq0VvpuZ9U5EGpaj2C2R9IAO3Tc0i8/jcfcjjGtaQh1cRrNfwaPYmp1F58vgIzBSzXXGbcJ5 iRDF6pnszmtssztbvFFOuriXTFBexCrqmgoPD/w6mopCPCwp5aceF5u4dEP0eOLvCnQhp068uVC iHXEyI9E2vhpx6tTE9Rl7LvswMXBh9BhLcaYv08tP3MAzpUr6EwSGINBuWez0O+IS5CPZ59+8Sk OSsfAAtVPlCFrF7lyRmACEYbOkf/+0fYg/oVxSKR8vMaZRwHiCAEupbwdIOqQOKOC+L8LvpcxQn e/rdSMSmdv9ePm2riT+Qv5C3kcuwpkRSL8Hm5EV/aRgtKGI4VE9d9D5dSaSkHnTZtxVv7vBLolb hY1ElaRRI4btMvvBMfmIH9oflaY4= X-Received: by 2002:a05:6830:ed2:b0:7e9:f6b7:7752 with SMTP id 46e09a7af769-7f3a12ff443mr383041a34.12.1786403103828; Mon, 10 Aug 2026 16:05:03 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f35b5a7616sm8921584a34.8.2026.08.10.16.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 16:05:03 -0700 (PDT) From: James Hilliard Date: Mon, 10 Aug 2026 17:04:50 -0600 Subject: [PATCH 2/3] mtd: rawnand: sunxi: support randomized OOB formats Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-2-463853a14ad9@gmail.com> References: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> In-Reply-To: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Maxime Ripard Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 The controller randomizer covers the bad block marker along with the rest of the OOB data. The driver currently compensates the marker bytes before writes and after reads so that they remain plain on flash. Allwinner NAND firmware instead stores the marker through the randomizer. Media using that format appears to contain bad blocks unless the randomizer is enabled while reading the marker. Honor the allwinner,randomized-oob property by unconditionally enabling page scrambling and leaving the marker in the randomizer data stream. Keep the existing plain marker behavior when the property is absent. This changes marker handling on all supported controllers; the H6/H616 protected user-data placement is handled separately. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/sunxi_nand.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi= _nand.c index 45ccbce91551..92b26371a6d1 100644 --- a/drivers/mtd/nand/raw/sunxi_nand.c +++ b/drivers/mtd/nand/raw/sunxi_nand.c @@ -264,6 +264,7 @@ struct sunxi_nfc_timings { * @clk_rate: clk_rate required for this NAND chip * @timing_cfg: TIMING_CFG register value for this NAND chip * @timing_ctl: TIMING_CTL register value for this NAND chip + * @randomized_oob: use the randomized normal-page OOB format * @nsels: number of CS lines required by the NAND chip * @sels: array of CS lines descriptions * @user_data_bytes: array of user data lengths for all ECC steps @@ -276,6 +277,7 @@ struct sunxi_nand_chip { u32 timing_cfg; u32 timing_ctl; u8 *user_data_bytes; + bool randomized_oob; int nsels; struct sunxi_nand_chip_sel sels[] __counted_by(nsels); }; @@ -945,7 +947,8 @@ static void sunxi_nfc_hw_ecc_get_prot_oob_bytes(struct = nand_chip *nand, u8 *oob, } =20 /* De-randomize the Bad Block Marker. */ - if (bbm && (nand->options & NAND_NEED_SCRAMBLING)) + if (bbm && (nand->options & NAND_NEED_SCRAMBLING) && + !sunxi_nand->randomized_oob) sunxi_nfc_randomize_bbm(nand, page, oob); } =20 @@ -1006,7 +1009,8 @@ static void sunxi_nfc_hw_ecc_set_prot_oob_bytes(struc= t nand_chip *nand, u8 *user_data =3D NULL; =20 /* Randomize the Bad Block Marker. */ - if (bbm && (nand->options & NAND_NEED_SCRAMBLING)) { + if (bbm && (nand->options & NAND_NEED_SCRAMBLING) && + !sunxi_nand->randomized_oob) { user_data =3D kmalloc(user_data_sz, GFP_KERNEL); memcpy(user_data, oob, user_data_sz); sunxi_nfc_randomize_bbm(nand, page, user_data); @@ -2219,6 +2223,7 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_ch= ip *nand, =20 static int sunxi_nand_attach_chip(struct nand_chip *nand) { + struct sunxi_nand_chip *sunxi_nand =3D to_sunxi_nand(nand); const struct nand_ecc_props *requirements =3D nanddev_get_ecc_requirements(&nand->base); struct nand_ecc_ctrl *ecc =3D &nand->ecc; @@ -2228,6 +2233,9 @@ static int sunxi_nand_attach_chip(struct nand_chip *n= and) if (nand->bbt_options & NAND_BBT_USE_FLASH) nand->bbt_options |=3D NAND_BBT_NO_OOB; =20 + if (sunxi_nand->randomized_oob) + nand->options |=3D NAND_NEED_SCRAMBLING; + if (nand->options & NAND_NEED_SCRAMBLING) nand->options |=3D NAND_NO_SUBPAGE_WRITE; =20 @@ -2457,6 +2465,9 @@ static int sunxi_nand_chip_init(struct device *dev, s= truct sunxi_nfc *nfc, if (!sunxi_nand) return -ENOMEM; =20 + sunxi_nand->randomized_oob =3D + of_property_read_bool(np, "allwinner,randomized-oob"); + sunxi_nand->nsels =3D nsels; =20 for (i =3D 0; i < nsels; i++) { --=20 2.53.0 From nobody Tue Sep 29 07:42:02 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (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 2C968436BEF for ; Mon, 10 Aug 2026 23:05:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403108; cv=none; b=FrkkyO77yOFu9mr75Pr9joLNIJ8sOZPdoMds8nUpNbFoi7RAqpRyZEqFSCQ+TSd85ia4UAfa7Lj9hYRS3lj1bwDYFIbrY0bVII4ogVNI+s3u4GFPdyKnDl5v0ib9W+gw6hJpd9WBYltYU3PmbnGse/uNBZz1o0vj/JQF7DdEkyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403108; c=relaxed/simple; bh=Be/njScjEbeVgMustlkrQQ4N8+vAdJ4W8DhUcCS89Ls=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PGSr+xvq6BRMcgO/FEJJOdttvOVnTR6RukDrrXYTRd+GEd6E6amZgu3Ru/dHSjIk/gq46rTvUTO+4YCB/s2s14s28OWvRZprfJzMxcPha4qr5/wj7M3FRSY35NcZMOm0g2tLY8kzLKHlRoIqwoPNYsbtf7P3sLthVdyB+KfJHsc= 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=GysAGzjq; arc=none smtp.client-ip=209.85.210.49 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="GysAGzjq" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-7eb34c17b96so1818753a34.2 for ; Mon, 10 Aug 2026 16:05:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786403105; x=1787007905; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WTW3rnTf6gNY3ga4NJ5kmbTdCiFHL1I5Sk6ssF2oGp8=; b=GysAGzjqVTpGBFGMvamN1ofShDy+l3iDe7Pkfw15/YTNXx4FPkP4kVy75oKkIAIw+e gC1OTSarAjzthbIgRFg4DFmYfsbtqox4IGBgmYhQHmEkONsN8cpbbXmMahpWbvFQvknA Luaq5DAY2owl/Lx4nURGR2BPA5ZF7vY6C0VTr2mBZMBOAMafc2rDzm3FtuUCppbk+ewv gnjU/5VOTn0+BDwb20tSY1tp9z7OFm/KK27rp9m/vdc7GZ81lN0zrbTLaAmUrRMu2TWA sqICqgelI7a95yplwWLXs2kOqJXvQ2ODRFJBcv7WczACwVl2QTxh/6L3yAFXzhzfY2el cJ1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786403105; x=1787007905; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=WTW3rnTf6gNY3ga4NJ5kmbTdCiFHL1I5Sk6ssF2oGp8=; b=BEdqGuDHaYW1NHh5mf5Pq3JskDc2VpGDDltXCRtElHGEaOQRRPsxqaPMh4ADha9YVh MYAl/bbg1GYWSGPW9GqKza1kuJnOXYNuYTdx80dJiF5Hsp4iCsfpgoi+HvbamNjoKr6w rTB7q7tfPHOQmYr/APz4o5x0M/COdKF7jh1TVbhW66YiF/tvOlrwzTknyUzCv/QmdwX6 fx6PvRUNqF0qNj0syxIthj7OoUSVZXNRVXr5VxQnrfPW3BhXXsVvvKiTdCdPr+3rUFnR f09fn3Y3bMoJcyCuf2gvf0kwSxezH0v2qPzR9kDNoQYW5YfKmowuWJQG3lEYPehuq/Lu 6j0A== X-Forwarded-Encrypted: i=1; AHgh+RpuKfPdJ0d5kAZIBOxw7zBbIUgUn1ApNVyucmiyFHctdIq+X5Oubk4HvnCo+zVBlclCaUPK+RnlyrZRwJ4=@vger.kernel.org X-Gm-Message-State: AOJu0YxTu7GuIbzolULLwiLjwAafQ+lkoqe+EcYnwlXTAr6sz58wP2m6 IDWbycyc9lFp4OwBVlDzWt7C/R9emZAQ9HYHpG2ZHcXVkIQFLoZRvFZS X-Gm-Gg: AR+sD12bpRRuLCX+w3QZnDQYUy8ot1y7f9Pwgu2YQlidww15vPwZ9c8Be5V0OZDXbZV +CZgLof//yDx2bI8KWOnEizwJFvobqTurv7RPnVBN99R9k6cHhwjrZzmOEZMXY/ZJkCcvG7xo6s erpleAglGtU0XuicOB8HNRyeGHSZuHJ0xYhf+xoTcnUrLcFGmfjQDW6a8zvWM6z7GjN9sdk6qAG VLUct8Md9HvswdJI2VZ4JQ3eDU5lstNiyBqJmu2Fnk42KDCxAY7W53bYSIzRxD1ZjlFn0KQqY5w NYTcyqbYhoE1zIrsmZ23YQ0YJxvqH+NEzA46ZHhhcg01uCVHW3V59lYxV4EK71vzBPqILKEV95D /HY6Hsw5548r0XfTft7UMeqQxeXSMkYoqwtXSk/0P5ON3W1PxBid6rQzUvjlyY6JJ6fzQ3TuYms +iukVLN8MvJ3Nw2hDaFY2WwZZhbv7SrVRYlKtqwjiX9Y3fADrFUNHWLYrvgF+LNP2gkFO2ZcgJd ahtJ+vRVI5PstdK2CVKoz2sSufy/gkc3Icdd6v+mL49bdeuPcVwjaoXYPrwcgbomhxpnXdu4+D1 YdQckA/O0ns1FZVE5fTgnOIJNLTVEf0jhyO1bJri6VbfrMPDwhl14w9z+tGLfztHe3Nu+SwTnCw hCY6lrg9IxrK/CeFlJA== X-Received: by 2002:a05:6830:3591:b0:7e9:e5c0:e0a with SMTP id 46e09a7af769-7f39a872f1cmr4107850a34.5.1786403104757; Mon, 10 Aug 2026 16:05:04 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f35b5a7616sm8921584a34.8.2026.08.10.16.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 16:05:04 -0700 (PDT) From: James Hilliard Date: Mon, 10 Aug 2026 17:04:51 -0600 Subject: [PATCH 3/3] mtd: rawnand: sunxi: select the packed H6/H616 OOB layout Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-3-463853a14ad9@gmail.com> References: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> In-Reply-To: <20260810-submit-sunxi-nand-vendor-oob-layout-v1-v1-0-463853a14ad9@gmail.com> To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Maxime Ripard Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 The H6/H616 controller can configure a separate protected user-data length for every ECC step. Mainline fills all space left after ECC with user data. This changes the physical ECC offsets from those used by Allwinner NAND firmware, so pages written by one layout cannot be decoded with the other. The allwinner,randomized-oob property selects the randomized normal-page OOB format. When it is present on H6/H616, use four protected user-data bytes per 1 KiB ECC step, cap the total at 16 bytes, and assign the entire total to ECC step zero. Reserve the same total before maximizing ECC strength so the selected strength leaves enough room. Keep the existing maximized mainline user-data layout when the property is absent. Older controllers have fixed four-byte user-data registers and need no additional placement change. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/sunxi_nand.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi= _nand.c index 92b26371a6d1..2388cc361685 100644 --- a/drivers/mtd/nand/raw/sunxi_nand.c +++ b/drivers/mtd/nand/raw/sunxi_nand.c @@ -223,6 +223,9 @@ */ #define USER_DATA_SZ 4 =20 +/* The randomized H6/H616 layout packs at most 16 bytes before ECC step 0.= */ +#define SUNXI_NFC_H6_MAX_USER_DATA_SZ 16 + /** * struct sunxi_nand_chip_sel - stores information related to NAND Chip Se= lect * @@ -2036,8 +2039,14 @@ static void sunxi_nand_detach_chip(struct nand_chip = *nand) sunxi_nand->user_data_bytes =3D NULL; } =20 -static int sunxi_nfc_maximize_user_data(struct nand_chip *nand, uint32_t o= obsize, - int ecc_bytes, int nsectors) +static unsigned int sunxi_nfc_h6_user_data_sz(int nsectors) +{ + return min(nsectors * USER_DATA_SZ, + SUNXI_NFC_H6_MAX_USER_DATA_SZ); +} + +static int sunxi_nfc_init_user_data(struct nand_chip *nand, uint32_t oobsi= ze, + int ecc_bytes, int nsectors) { struct sunxi_nand_chip *sunxi_nand =3D to_sunxi_nand(nand); struct sunxi_nfc *nfc =3D to_sunxi_nfc(nand->controller); @@ -2050,6 +2059,12 @@ static int sunxi_nfc_maximize_user_data(struct nand_= chip *nand, uint32_t oobsize if (!sunxi_nand->user_data_bytes) return -ENOMEM; =20 + if (sunxi_nand->randomized_oob) { + sunxi_nand->user_data_bytes[0] =3D + sunxi_nfc_h6_user_data_sz(nsectors); + return 0; + } + for (step =3D 0; (step < nsectors) && (remaining_bytes > 0); step++) { for (i =3D 0; i < c->nuser_data_tab; i++) { if (c->user_data_len_tab[i] > remaining_bytes) @@ -2104,6 +2119,10 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_c= hip *nand, bytes -=3D 2; =20 bytes -=3D total_user_data_sz; + } else if (sunxi_nand->randomized_oob) { + total_user_data_sz =3D + sunxi_nfc_h6_user_data_sz(nsectors); + bytes -=3D total_user_data_sz; } else { /* * remove at least the BBM size before computing the @@ -2170,12 +2189,12 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_= chip *nand, nsectors =3D mtd->writesize / ecc->size; =20 /* - * The rationale for variable data length is to prioritize maximum ECC - * strength, and then use the remaining space for user data. + * The default variable-length layout prioritizes maximum ECC strength, + * then uses the remaining space for user data. */ if (nfc->caps->reg_user_data_len) - sunxi_nfc_maximize_user_data(nand, mtd->oobsize, ecc->bytes, - nsectors); + sunxi_nfc_init_user_data(nand, mtd->oobsize, ecc->bytes, + nsectors); =20 if (total_user_data_sz =3D=3D 0) for (i =3D 0; i < nsectors; i++) --=20 2.53.0