From nobody Thu Dec 18 18:02:46 2025 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 14CBD199384 for ; Thu, 27 Jun 2024 16:05:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719504344; cv=none; b=o6mxjSQaLbGQEeHxcumrkrsOWdzW9OIsPPABGzEbWKdCGZAZt1ZYscYyFBNceuaxU2Jqv0JMcV0yEiw3JqVK/1wd+Vq1qsKzX8eI/9+/TpA/wGSViRDZS56Pw4eEWnFGvaRFHbK5I03sd/hrqcJgtuuESYMBG8jsNLyKcfAFKV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719504344; c=relaxed/simple; bh=7MQUtBtmxwtqSjwHgGQHzsi6UX1cWt9yIlLizuWjabU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VzWndz2IHppk/oNauR1R/y6eA9jPmqkldL8GqX+ChqDc6RVEmnX79BdohuDrv5+N6lkIWhfKYAym1pQiYFmpSSAESEGzMK8l/Zt4wCeMnwPPJld4hZsA69Px9Jmfb9hBAUeuiNoagHLauoye7uwC6Daaz26vcGazhcuK/cmhOPs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yoseli.org; spf=none smtp.mailfrom=yoseli.org; dkim=pass (2048-bit key) header.d=yoseli.org header.i=@yoseli.org header.b=ZVO1kRfE; arc=none smtp.client-ip=217.70.183.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yoseli.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=yoseli.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yoseli.org header.i=@yoseli.org header.b="ZVO1kRfE" Received: by mail.gandi.net (Postfix) with ESMTPSA id 16C8F1C000B; Thu, 27 Jun 2024 16:05:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yoseli.org; s=gm1; t=1719504337; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dtm6RuQJK7HKXMqLOw3rQerxE/QDxsxWMgh9vmm6n3k=; b=ZVO1kRfEaJlPja4FjGy+YaxVv2IN7F8Z6Yo36vhnWUVJEcpQW89uhnRI2AiEd4zu6Dzkrt 4AOF/EonhspOx/8+7FDoPuX0AhK6z2jfAQV3vkFbHp5ZKuGYfsGcDGOtL41FV3L1Fula25 iQ6VE6z+ovdSuEcKmx8jkQJR8wlN9GxgVYRWZ62TLiXztV2DIpFsu85NzrnTIKq2iJFNSi JydmPPqNjM6ptGPKi2eY+YZVmdareA92mFavAF5YIZwsu/DJqRhHGoXdR2cK2xjn67k2Q6 S8fZiaf1tJdbb9f7QYlqD5d1pQ22a+qsIIhemVKHj3B6mNbTs6dKxy/YZRGARw== From: Jean-Michel Hautbois Date: Thu, 27 Jun 2024 18:05:28 +0200 Subject: [PATCH v2 1/2] arch: m68k: Add definitions for flash NFC support 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: <20240627-upstream-nfc-mcf5441x-v2-1-312929d09ee5@yoseli.org> References: <20240627-upstream-nfc-mcf5441x-v2-0-312929d09ee5@yoseli.org> In-Reply-To: <20240627-upstream-nfc-mcf5441x-v2-0-312929d09ee5@yoseli.org> To: Geert Uytterhoeven , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Stefan Agner Cc: linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Jean-Michel Hautbois X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1719504334; l=968; i=jeanmichel.hautbois@yoseli.org; s=20240608; h=from:subject:message-id; bh=7MQUtBtmxwtqSjwHgGQHzsi6UX1cWt9yIlLizuWjabU=; b=r2PAnoXwjNQlDMjnfDZiZz4dyFqRDwOrUTG3Glt35IMJoP78EndtTyrT7IvPZX8LH2hPKhM0L 9jolZSxpmurBQeDAEmH7t6FHruD54qiX1tgjkzAD70B1BvdQpnwzjdU X-Developer-Key: i=jeanmichel.hautbois@yoseli.org; a=ed25519; pk=oMZuYhJzT0j5MI73RlNUVYaA8VdWpFR/Sao0JKz1D2I= X-GND-Sasl: jeanmichel.hautbois@yoseli.org Add a few definitions, as the base address for the NFC for the M5441x. Signed-off-by: Jean-Michel Hautbois --- arch/m68k/include/asm/m5441xsim.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/m68k/include/asm/m5441xsim.h b/arch/m68k/include/asm/m544= 1xsim.h index f48cf63bd782..d4ee1eab7c4a 100644 --- a/arch/m68k/include/asm/m5441xsim.h +++ b/arch/m68k/include/asm/m5441xsim.h @@ -99,6 +99,7 @@ #define MCFINT2_PIT1 14 #define MCFINT2_PIT2 15 #define MCFINT2_PIT3 16 +#define MCFINT2_NFC 25 #define MCFINT2_RTC 26 =20 /* @@ -333,4 +334,10 @@ #define MCF_IRQ_BOFF1 (MCFINT1_VECBASE + MCFINT1_FLEXCAN1_BOFF) #define MCF_IRQ_ERR1 (MCFINT1_VECBASE + MCFINT1_FLEXCAN1_ERR) =20 +/* + * Flash module + */ +#define MCF_NFC_BASE 0xfc0fc000 +#define MCF_NFC_SIZE (0xfc0fff3b - 0xfc0fc000) +#define MCF_NFC_ISR (MCFINT2_VECBASE + MCFINT2_NFC) #endif /* m5441xsim_h */ --=20 2.43.0 From nobody Thu Dec 18 18:02:46 2025 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0614C199254 for ; Thu, 27 Jun 2024 16:05:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719504344; cv=none; b=NN1jvU6GD9M7w1yi92/tPy+pgsfwRR5QgA9s031wHOexGRB6W+dhlgHZjfSbjPZBuZsbctqotCx4BmSP9EuVXWPiCXmnJH9VRqEIsF/88fizqAjJYoVUD+h3nODGk7kIo9V44VpEOyCLQ9lP3Y42cdV1Rmerm2gYdzQafNib0tc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719504344; c=relaxed/simple; bh=L5mkXD5zVVQu9YpRwyWdMkObLsTkmQTCYOs8qYThsZo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EgmgKsVwAJDHXU77kEFQabKToot2+G+pdpCK0R3bOeAqzOzNJjs4YzmuiVZFugH9xgKNz1FShv5OT709W54cvwz/iSAsPRn9+JC92BCwAOollu7GOdr7zXZIAIwwxodODSNI7b1BOiMUPcFUaO9CSjoSGdX4QMdlFeND10t1n3s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yoseli.org; spf=none smtp.mailfrom=yoseli.org; dkim=pass (2048-bit key) header.d=yoseli.org header.i=@yoseli.org header.b=b76MvPX4; arc=none smtp.client-ip=217.70.183.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yoseli.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=yoseli.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yoseli.org header.i=@yoseli.org header.b="b76MvPX4" Received: by mail.gandi.net (Postfix) with ESMTPSA id F187A1C0005; Thu, 27 Jun 2024 16:05:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yoseli.org; s=gm1; t=1719504338; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Q/F6X4rUaUT62SKKSOeWMriVtMrBxmj7Qe14pCP9AiM=; b=b76MvPX4KnkFO6JvB0ADN8awbVKTZMg0hb+gUo0Q1PvBm3YGftglPYWsRvwD4WyQ73Rt+5 sgAULYoAunZrtOIPCXMVGHL7frMCO10en1Qu+Gt+5vOXdT6om6+CnolhlvQM6eS8gPWqw4 ZMU3lXU4E7eLoaGkKpUWk4/mR8XLzdiUyf53uMgGo0G6xP/CVv5/Yt7PPBMZw0r1nLA8n3 HcVTBjzCrF3nZziFWt37w+zlYARx2MKxefBzPLm/Te7acjLFFP7M42w/9WRVwtvArWCneY dHygddslgW//KAqY5bM7jD33TMOr/kW93e7vabrGJvbMy59/h7Ga9etdNyl6bw== From: Jean-Michel Hautbois Date: Thu, 27 Jun 2024 18:05:29 +0200 Subject: [PATCH v2 2/2] mtd: nand: Add support for M5441x NFC 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: <20240627-upstream-nfc-mcf5441x-v2-2-312929d09ee5@yoseli.org> References: <20240627-upstream-nfc-mcf5441x-v2-0-312929d09ee5@yoseli.org> In-Reply-To: <20240627-upstream-nfc-mcf5441x-v2-0-312929d09ee5@yoseli.org> To: Geert Uytterhoeven , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Stefan Agner Cc: linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Jean-Michel Hautbois X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1719504334; l=6726; i=jeanmichel.hautbois@yoseli.org; s=20240608; h=from:subject:message-id; bh=L5mkXD5zVVQu9YpRwyWdMkObLsTkmQTCYOs8qYThsZo=; b=Ytk6wHocEqGvUrABXF7NyDmNx8aG+yeVebk0+kzOnGnhxvF5OUkBblYKQYJQQNX14uEhN4Jnd jHCXGrxpkL4Bd1N6uweRNrH6vh9paLCUj/lPsb6Ijyx9TH+Ou2TRpnh X-Developer-Key: i=jeanmichel.hautbois@yoseli.org; a=ed25519; pk=oMZuYhJzT0j5MI73RlNUVYaA8VdWpFR/Sao0JKz1D2I= X-GND-Sasl: jeanmichel.hautbois@yoseli.org The vf610_nfc driver is also the one which should be used for the coldfire series. Sadly, these device don't support device-tree and so we need to do a few modifications: - Adapt the probe to use pdata if available - Add a new variant as there is a small part to adapt in vf610_nfc_select_target() - Add the corresponding missing register definitions Tested successfully on a 54418 custom board with a raw NAND: [ 2.640000] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xdc [ 2.650000] nand: Micron MT29F4G08ABADAWP [ 2.650000] nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OO= B size: 64 Signed-off-by: Jean-Michel Hautbois --- drivers/mtd/nand/raw/Kconfig | 2 +- drivers/mtd/nand/raw/vf610_nfc.c | 102 +++++++++++++++++++++++++++++------= ---- 2 files changed, 78 insertions(+), 26 deletions(-) diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig index cbf8ae85e1ae..2ea3ee32a540 100644 --- a/drivers/mtd/nand/raw/Kconfig +++ b/drivers/mtd/nand/raw/Kconfig @@ -252,7 +252,7 @@ config MTD_NAND_FSL_UPM =20 config MTD_NAND_VF610_NFC tristate "Freescale VF610/MPC5125 NAND controller" - depends on (SOC_VF610 || COMPILE_TEST) + depends on (SOC_VF610 || COMPILE_TEST || M5441x) depends on HAS_IOMEM help Enables support for NAND Flash Controller on some Freescale diff --git a/drivers/mtd/nand/raw/vf610_nfc.c b/drivers/mtd/nand/raw/vf610_= nfc.c index f31d23219f91..9d46b4f57f31 100644 --- a/drivers/mtd/nand/raw/vf610_nfc.c +++ b/drivers/mtd/nand/raw/vf610_nfc.c @@ -146,6 +146,7 @@ =20 enum vf610_nfc_variant { NFC_VFC610 =3D 1, + NFC_M54418 =3D 2, }; =20 struct vf610_nfc { @@ -486,10 +487,24 @@ static void vf610_nfc_select_target(struct nand_chip = *chip, unsigned int cs) if (nfc->variant !=3D NFC_VFC610) return; =20 - tmp =3D vf610_nfc_read(nfc, NFC_ROW_ADDR); - tmp &=3D ~(ROW_ADDR_CHIP_SEL_RB_MASK | ROW_ADDR_CHIP_SEL_MASK); - tmp |=3D 1 << ROW_ADDR_CHIP_SEL_RB_SHIFT; - tmp |=3D BIT(cs) << ROW_ADDR_CHIP_SEL_SHIFT; + if (nfc->variant =3D=3D NFC_M54418) { + /* + * According to the Reference Manual: + * bit 24: Reserved, must be set (ROW_ADDR_CHIP_SEL_SHIFT) + * bit 25-27: Reserved, must be cleared + * bit 28: Reserved, must be set (ROW_ADDR_CHIP_SEL_RB_SHIFT) + * bit 29-31: Reserved, must be cleared + */ + tmp =3D vf610_nfc_read(nfc, NFC_ROW_ADDR); + tmp &=3D ~(ROW_ADDR_CHIP_SEL_RB_MASK | ROW_ADDR_CHIP_SEL_MASK); + tmp |=3D 1 << ROW_ADDR_CHIP_SEL_RB_SHIFT; + tmp |=3D 1 << ROW_ADDR_CHIP_SEL_SHIFT; + } else { + tmp =3D vf610_nfc_read(nfc, NFC_ROW_ADDR); + tmp &=3D ~(ROW_ADDR_CHIP_SEL_RB_MASK | ROW_ADDR_CHIP_SEL_MASK); + tmp |=3D 1 << ROW_ADDR_CHIP_SEL_RB_SHIFT; + tmp |=3D BIT(cs) << ROW_ADDR_CHIP_SEL_SHIFT; + } =20 vf610_nfc_write(nfc, NFC_ROW_ADDR, tmp); } @@ -706,6 +721,19 @@ static const struct of_device_id vf610_nfc_dt_ids[] = =3D { }; MODULE_DEVICE_TABLE(of, vf610_nfc_dt_ids); =20 +static const struct platform_device_id vf610_nfc_id_table[] =3D { + { + .name =3D "mcf5441x-nfc", + .driver_data =3D (kernel_ulong_t)NFC_M54418, + }, { + .name =3D "vf610-nfc", + .driver_data =3D (kernel_ulong_t)NFC_VFC610, + }, { + /* sentinel */ + }, +}; +MODULE_DEVICE_TABLE(platform, vf610_nfc_id_table); + static void vf610_nfc_preinit_controller(struct vf610_nfc *nfc) { vf610_nfc_clear(nfc, NFC_FLASH_CONFIG, CONFIG_16BIT); @@ -810,7 +838,7 @@ static int vf610_nfc_probe(struct platform_device *pdev) struct vf610_nfc *nfc; struct mtd_info *mtd; struct nand_chip *chip; - struct device_node *child; + struct nand_chip *pdata; int err; int irq; =20 @@ -820,47 +848,70 @@ static int vf610_nfc_probe(struct platform_device *pd= ev) =20 nfc->dev =3D &pdev->dev; chip =3D &nfc->chip; + pdata =3D dev_get_platdata(&pdev->dev); + if (pdata) + *chip =3D *pdata; + mtd =3D nand_to_mtd(chip); =20 mtd->owner =3D THIS_MODULE; mtd->dev.parent =3D nfc->dev; - mtd->name =3D DRV_NAME; + + /* + * We keep the MTD name unchanged to avoid breaking platforms + * where the MTD cmdline parser is used and the bootloader + * has not been updated to use the new naming scheme. + */ + if (!nfc->dev->of_node) + mtd->name =3D "NAND"; + else + mtd->name =3D DRV_NAME; =20 irq =3D platform_get_irq(pdev, 0); if (irq < 0) return irq; =20 nfc->regs =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(nfc->regs)) + if (IS_ERR(nfc->regs)) { + dev_err(nfc->dev, "Unable to map registers!\n"); return PTR_ERR(nfc->regs); + } =20 - nfc->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); + nfc->clk =3D devm_clk_get_optional_enabled(&pdev->dev, NULL); if (IS_ERR(nfc->clk)) { dev_err(nfc->dev, "Unable to get and enable clock!\n"); return PTR_ERR(nfc->clk); } =20 - nfc->variant =3D (enum vf610_nfc_variant)device_get_match_data(&pdev->dev= ); - if (!nfc->variant) - return -ENODEV; + if (pdev->dev.of_node) { + const void *data =3D device_get_match_data(&pdev->dev); =20 - for_each_available_child_of_node(nfc->dev->of_node, child) { - if (of_device_is_compatible(child, "fsl,vf610-nfc-nandcs")) { + nfc->variant =3D (enum vf610_nfc_variant)data; + if (!nfc->variant) { + dev_err(nfc->dev, "No variant data found!\n"); + return -ENODEV; + } =20 - if (nand_get_flash_node(chip)) { - dev_err(nfc->dev, - "Only one NAND chip supported!\n"); - of_node_put(child); - return -EINVAL; - } + for_each_available_child_of_node_scoped(nfc->dev->of_node, child) { + if (of_device_is_compatible(child, "fsl,vf610-nfc-nandcs")) { =20 - nand_set_flash_node(chip, child); + if (nand_get_flash_node(chip)) { + dev_err(nfc->dev, + "Only one NAND chip supported!\n"); + of_node_put(child); + return -EINVAL; + } + + nand_set_flash_node(chip, child); + } } - } =20 - if (!nand_get_flash_node(chip)) { - dev_err(nfc->dev, "NAND chip sub-node missing!\n"); - return -ENODEV; + if (!nand_get_flash_node(chip)) { + dev_err(nfc->dev, "NAND chip sub-node missing!\n"); + return -ENODEV; + } + } else { + nfc->variant =3D (enum vf610_nfc_variant)platform_get_device_id(pdev)->d= river_data; } =20 chip->options |=3D NAND_NO_SUBPAGE_WRITE; @@ -937,11 +988,12 @@ static SIMPLE_DEV_PM_OPS(vf610_nfc_pm_ops, vf610_nfc_= suspend, vf610_nfc_resume); static struct platform_driver vf610_nfc_driver =3D { .driver =3D { .name =3D DRV_NAME, - .of_match_table =3D vf610_nfc_dt_ids, + .of_match_table =3D of_match_ptr(vf610_nfc_dt_ids), .pm =3D &vf610_nfc_pm_ops, }, .probe =3D vf610_nfc_probe, .remove_new =3D vf610_nfc_remove, + .id_table =3D vf610_nfc_id_table, }; =20 module_platform_driver(vf610_nfc_driver); --=20 2.43.0