lkml.org 
[lkml]   [2026]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH v2 2/2] memory: ti-k3-fsas: Add TI FSS_FSAS driver
From
On 29/06/2026 09:20, Santhosh Kumar K wrote:
> Add a platform driver for the TI Flash SubSystem Application Subsystem
> (FSS_FSAS_GENREGS) in K3 SoCs. This driver takes care of disabling the
> OSPI XIP prefetch which causes DMA transfer data corruption.
>
> Set SYSCONFIG.DISXIP to disable XIP read prefetch, preventing DMA data
> corruption when the OSPI DMA source address is not 4K-aligned.
>
> Signed-off-by: Santhosh Kumar K <s-k6@ti.com>
> ---
> drivers/memory/Kconfig | 10 +++++
> drivers/memory/Makefile | 1 +
> drivers/memory/ti-k3-fsas.c | 74 +++++++++++++++++++++++++++++++++++++
> 3 files changed, 85 insertions(+)
> create mode 100644 drivers/memory/ti-k3-fsas.c
>
> diff --git a/drivers/memory/Kconfig b/drivers/memory/Kconfig
> index e5527020ff33..954e47810e8d 100644
> --- a/drivers/memory/Kconfig
> +++ b/drivers/memory/Kconfig
> @@ -125,6 +125,16 @@ config TI_EMIF_SRAM
> sequence so this driver provides several relocatable PM functions
> for the SoC PM code to use.
>
> +config TI_K3_FSS_FSAS
> + tristate "TI K3 Flash Subsystem Application Subsystem (FSAS) support"
> + depends on ARCH_K3 || COMPILE_TEST
> + help
> + Driver for the TI K3 Flash Subsystem Application Subsystem
> + (FSS_FSAS_GENREGS) wrapper found on K3 related SoCs.
> +
> + This driver takes care of disabling the OSPI XIP prefetch which
> + causes DMA transfer data corruption.
> +
> config FPGA_DFL_EMIF
> tristate "FPGA DFL EMIF Driver"
> depends on FPGA_DFL && HAS_IOMEM
> diff --git a/drivers/memory/Makefile b/drivers/memory/Makefile
> index 3ee883c8759a..8dc4860f615d 100644
> --- a/drivers/memory/Makefile
> +++ b/drivers/memory/Makefile
> @@ -28,6 +28,7 @@ obj-$(CONFIG_STM32_OMM) += stm32_omm.o
> obj-$(CONFIG_SAMSUNG_MC) += samsung/
> obj-$(CONFIG_TEGRA_MC) += tegra/
> obj-$(CONFIG_TI_EMIF_SRAM) += ti-emif-sram.o
> +obj-$(CONFIG_TI_K3_FSS_FSAS) += ti-k3-fsas.o
> obj-$(CONFIG_FPGA_DFL_EMIF) += dfl-emif.o
>
> ti-emif-sram-objs := ti-emif-pm.o ti-emif-sram-pm.o
> diff --git a/drivers/memory/ti-k3-fsas.c b/drivers/memory/ti-k3-fsas.c
> new file mode 100644
> index 000000000000..a5f42afc694c
> --- /dev/null
> +++ b/drivers/memory/ti-k3-fsas.c
> @@ -0,0 +1,74 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * TI K3 Flash Subsystem Application Subsystem (FSS_FSAS) driver
> + *
> + * Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com
> + */
> +
> +#include <linux/io.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm.h>
> +
> +#define FSAS_GENREGS_SYSCONFIG 0x04
> +#define FSAS_SYSCONFIG_DISXIP BIT(7)
> +
> +struct k3_fsas {
> + void __iomem *base;
> +};
> +
> +static void k3_fsas_disable_xip_prefetch(struct k3_fsas *fsas)
> +{
> + u32 val;
> +
> + val = readl(fsas->base + FSAS_GENREGS_SYSCONFIG);
> + val |= FSAS_SYSCONFIG_DISXIP;
> + writel(val, fsas->base + FSAS_GENREGS_SYSCONFIG);
> +}
> +
> +static int k3_fsas_probe(struct platform_device *pdev)
> +{
> + struct k3_fsas *fsas;
> +
> + fsas = devm_kzalloc(&pdev->dev, sizeof(*fsas), GFP_KERNEL);
> + if (!fsas)
> + return -ENOMEM;
> +
> + fsas->base = devm_platform_ioremap_resource(pdev, 0);
> + if (IS_ERR(fsas->base))
> + return PTR_ERR(fsas->base);
> +
> + platform_set_drvdata(pdev, fsas);
> +
> + k3_fsas_disable_xip_prefetch(fsas);

So a driver for FSAS device just writes to one register. That's why I
claim binding is either incomplete or not really a separate device.

Plus how does this work when you probe QSPI before this FSAS?

Best regards,
Krzysztof

\
 
 \ /
  Last update: 2026-07-08 13:11    [W:0.077 / U:0.204 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog