From nobody Fri Dec 19 19:08:40 2025 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.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 85F782153C1 for ; Thu, 9 Jan 2025 07:54:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736409275; cv=none; b=lkabRNBXh2FgNppgvK9wLlaRtnIaQgVDr0c5b2YUrEoOpYrgo9NM1VfXCTUROHlqiWjiTHjkIh62qgKBXMRVklAZJY/BaPV6Hff8Lg6i8KvY5Q1L1/e9LAFpT/ZtkjcNWihpwKyW0RCHGZCw1KmagT439YgTLut3Z/fb2vf+T4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736409275; c=relaxed/simple; bh=4RRkEogMd7QjQPnjkVx5WfzhLc7lRU3S4y2imsT9m54=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=irxaUYHGBPUAp8TFUalMweRkVDeA8PkNqeRTo7Ywl8Vr78QGpSPELrvwHG4bB9UPSOtfAAd+IQkhdjJtDaB5OLxvTk3NA77OtHTbNhYVvF6H5kMcQzVzh/J+G/hHVVOIJrSn2jbAn3u9gyhuvXwxtyLW4spZNaiTdoftwTNQccY= 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=Nbh7I6m5; arc=none smtp.client-ip=209.85.208.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="Nbh7I6m5" Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-30167f4c1e3so4784311fa.3 for ; Wed, 08 Jan 2025 23:54:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736409271; x=1737014071; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=8V4crV2FeWRfveitKpJ63XibO/TLrojs3TWs8+SPtXk=; b=Nbh7I6m5gCuQB/HNMj1eKb9r0Nbo7Oxe1sgAD+P6iZoZMmrYJxvJGEEUGKcsWfvY3A kjJE1zRFEOBWQungu+XzDn2BpjPE1CiyWc4wBhrnTyGm4ftr/EByRwZirB2x8alrOnjH RPzkca/WEnKEhw2Td267GTkpxpN0xjBm6MEoXBupPjPLaf7aS6g5Kjf+tpkTEqXG7/e+ vvDoPBlIYEsM/izDcFvgOp1X94Ymohhmh9tWzPP1LHdxQN7NuAH1PGTPwihVwcrxVYuS IdOfnumxx3TNYXD4KMjioayGZwJtLIeO3eiGTY2yhj7ZBQHYuDonEGYm7UrRQql/Iws4 riMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736409271; x=1737014071; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8V4crV2FeWRfveitKpJ63XibO/TLrojs3TWs8+SPtXk=; b=j8/m36uBJwOMPdjDEE+DoPe+JK9A5Wo1jGezGPiN4hCRVsyFVf1ltmuPUHmUuL2/uJ YaZgJhAJaui5e4T4TN4KDhVMfV4G7Yj+jPx3BVKUXYRMXzCwST4HJhZmS/S2hBoWRQqo kGrc44OX8ozWOW+x+2wO7upzdxu46RqnxhDkNeRPQbUcozMrd0QoO4RwaciT5mk2/ZEW Akf8fvdKQWj3bZYW+vWOwFEdgJuDHG4Jmgz+uU9yekOJrsEJFPC4vqI9A+nbhCJb3o2l a6lo4pxHONxAE0ZQ6oq5vmU6/JwLCT3XEfrq7hPKSHiYB9FpTOH8GfLpZOUZM0NMJo9H 71qA== X-Forwarded-Encrypted: i=1; AJvYcCUtakkX4o1g2zr1zUAwGYFL7Ov92JzBMXUS++0EedNs7qZA+knUjgYVjRODuaLf/67ncFOwBHTKOA19+cA=@vger.kernel.org X-Gm-Message-State: AOJu0YztA7aoqtEvN3kcRDBCYwWwbqtCk6jOl2gQWCTUulW8YXyy8LwF WU4AGJRhTtKBvJviOXScSgYy4HUt+YdrA1mxe5y64eO65cIDQhZ9NApQqx7b X-Gm-Gg: ASbGnctCI+DbMrVbj5ZexuzmeRVW0nnXccljSJNVW3z1e3I9PcpgqYQBF1/AkLcaheS 0YcaOYsuYuiTSO9H2/oP2yNjADjnzh6xOzGb+aEYDNRftbX/JsVF8UDFjqO9JL4NZY6CROXokUP w5N1I2RXW6jDhWwMi+zQG7ReeC+53jMMwM8uhfeQl0aS/qRwPdvu8R024ZP/1kGrQLovB5/s/t5 wdLbfgP73UfAVknsG0FvP4sakJnuXjS1TI6LfyyQW5c+CatPCUR3i4/U13wtFKNRKf59lR9esqj JOtqEapJXOvsCRvIeliEMHbOoA== X-Google-Smtp-Source: AGHT+IH5z3Xpigl2EfMVodGcxZpLyeffhttGD26F/U84usfTRlkz8O6vjYHadTbndFGsc9jDImeejA== X-Received: by 2002:a05:651c:501:b0:305:d86a:4f01 with SMTP id 38308e7fff4ca-305f45db5d9mr14749801fa.31.1736409270899; Wed, 08 Jan 2025 23:54:30 -0800 (PST) Received: from [192.168.1.199] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-305ff1ebb63sm1128391fa.96.2025.01.08.23.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 23:54:29 -0800 (PST) From: Marcus Folkesson Date: Thu, 09 Jan 2025 08:54:18 +0100 Subject: [PATCH] mtd: rawnand: davinci: add ROM supported 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: <20250109-davinci-nand-v1-1-d5b3cc305143@gmail.com> X-B4-Tracking: v=1; b=H4sIAKmAf2cC/x3MQQqAIBBA0avIrBPUaGFXiRaTjjWbKRQkEO+et HyL/xsUykwFVtUgU+XCtwzYSUG4UE7SHIfBGbcYa7yOWFkCa0GJOnhymFxKMx4wkidT4vffbXv vH3iVhAdeAAAA X-Change-ID: 20250109-davinci-nand-c9e2af2ff3ab To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Marcus Folkesson , Marcus Folkesson X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3052; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=7wtVSdDhd9RCbheH5qAQfpjpLNHqvdb68FH8XOizzf8=; b=owEBbQKS/ZANAwAIAYiATm9ZXVIyAcsmYgBnf4CuU6mlBZudKUeuHm6XJupTA6e72JBGqioQM WsQ8qLybSKJAjMEAAEIAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCZ3+ArgAKCRCIgE5vWV1S MvYIEACARwCEwh6ecW1tRRev+hpYjiYBKCAwKvgUqadahrltf2fBcgiul+LO2JkelBSZw4UeCJa DLIumMyDE/egJXZchGSZZb9HQVW7jt2axsSuaagjy95YIXYi2m7TrRrEZivtqPKINBGOjW4Dr1y ngh7jputcNJLK5M0301n6h3uAbkgbq0g/tLDVbWIrOKUttYnLXZSZFM4gnbNoDowKCSayVWb7Uz G0++ybtXZu4TLSXkmhu9wQ1PLHS0Aw+moMxg84HSp7HphZcPAuiHi8etWji6IViUQq/SCI6P1Fx 2IIDFWdPgpF2cZ6gEZkGg6yX59yGzeg35+K7BJw1VU84x9mUV0DQ/6W5oNIJlWdfo974Po1ldDs AnERFeEYUWFYVN4gGaX2OoW1ze2RFoRuykOAw0KbEb2APzV4ZaTlpUF/4s6jt46hTVdYteBz+vZ 3iD5PrsDizG7WAdc1zcXYDiBcboMDftC6tABxihj3JS0HM2YjubCErWDeMcyg3gvsq7duiCTGaD eBMRznzlsp55LPwrMmvKtKTCU+jUXsC9AcKGuzixnket5wVYNFfRwCOWnO0Fni62BGkMBIWBCox dqddf9oO+r25by0Ci4xnfCHOrYMmHpTLzH//zroG0x5aa32/eAG/kMjWf4tXYD52mWL/SuPXype 6h1lQKu9r5KPBFQ== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 From: Marcus Folkesson Add support for the OOB layout used by the ROM bootloader. The same layout is used by both Keystone [1] and OMAPL138/DA850 [2] which currently is the only users of davinci-nand. Only select this layout if the `nand-is-boot-medium` property is set. This to avoid breaking any existing devices out there. [1] https://www.ti.com/lit/ug/spruhj3/spruhj3.pdf [2] https://www.ti.com/lit/an/sprab41f/sprab41f.pdf Signed-off-by: Marcus Folkesson --- Signed-off-by: Marcus Folkesson --- drivers/mtd/nand/raw/davinci_nand.c | 45 +++++++++++++++++++++++++++++++++= ++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/davinci_nand.c b/drivers/mtd/nand/raw/dav= inci_nand.c index 1f8354acfb50b2f4d155cdfc03afcf2863539f66..09119a8db0210cb14236dd2f887= 2c18fcb9be7d8 100644 --- a/drivers/mtd/nand/raw/davinci_nand.c +++ b/drivers/mtd/nand/raw/davinci_nand.c @@ -479,6 +479,44 @@ static const struct mtd_ooblayout_ops hwecc4_small_oob= layout_ops =3D { .free =3D hwecc4_ooblayout_small_free, }; =20 +static int hwecc4_ooblayout_large_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + struct nand_device *nand =3D mtd_to_nanddev(mtd); + unsigned int total_ecc_bytes =3D nand->ecc.ctx.total; + int nregions =3D total_ecc_bytes / 10; /* 10 bytes per chunk */ + + if (section >=3D nregions) + return -ERANGE; + + oobregion->offset =3D (section * 16) + 6; + oobregion->length =3D 10; + + return 0; +} + +static int hwecc4_ooblayout_large_free(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + struct nand_device *nand =3D mtd_to_nanddev(mtd); + unsigned int total_ecc_bytes =3D nand->ecc.ctx.total; + int nregions =3D total_ecc_bytes / 10; /* 10 bytes per chunk */ + + /* First region is used for BBT */ + if (section >=3D (nregions - 1)) + return -ERANGE; + + oobregion->offset =3D ((section + 1) * 16); + oobregion->length =3D 6; + + return 0; +} + +static const struct mtd_ooblayout_ops hwecc4_large_ooblayout_ops =3D { + .ecc =3D hwecc4_ooblayout_large_ecc, + .free =3D hwecc4_ooblayout_large_free, +}; + #if defined(CONFIG_OF) static const struct of_device_id davinci_nand_of_match[] =3D { {.compatible =3D "ti,davinci-nand", }, @@ -638,9 +676,12 @@ static int davinci_nand_attach_chip(struct nand_chip *= chip) mtd_set_ooblayout(mtd, &hwecc4_small_ooblayout_ops); } else if (chunks =3D=3D 4 || chunks =3D=3D 8) { - mtd_set_ooblayout(mtd, - nand_get_large_page_ooblayout()); chip->ecc.read_page =3D nand_read_page_hwecc_oob_first; + + if (chip->options & NAND_IS_BOOT_MEDIUM) + mtd_set_ooblayout(mtd, &hwecc4_large_ooblayout_ops); + else + mtd_set_ooblayout(mtd, nand_get_large_page_ooblayout()); } else { return -EIO; } --- base-commit: eea6e4b4dfb8859446177c32961c96726d0117be change-id: 20250109-davinci-nand-c9e2af2ff3ab Best regards, --=20 Marcus Folkesson