Unverified Commit 1c37b63a authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'imx-drivers-6.17' of...

Merge tag 'imx-drivers-6.17' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into soc/drivers

i.MX drivers changes for 6.17:

- A couple of MAINTAINERS updates
- A new bus driver for i.MX AIPSTZ bridge and a follow-up fix from
  Laurentiu Mihalcea

* tag 'imx-drivers-6.17' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
  bus: imx-aipstz: allow creating pdevs for child buses
  MAINTAINERS: Update i.MX entry
  bus: add driver for IMX AIPSTZ bridge
  MAINTAINERS: add NXP S32G RTC driver

Link: https://lore.kernel.org/r/20250713055441.221235-1-shawnguo2@yeah.net


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 62bd59ca 5080cf63
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2585,6 +2585,8 @@ L: imx@lists.linux.dev
L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S:	Maintained
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
F:	Documentation/devicetree/bindings/firmware/fsl*
F:	Documentation/devicetree/bindings/firmware/nxp*
F:	arch/arm/boot/dts/nxp/imx/
F:	arch/arm/boot/dts/nxp/mxs/
F:	arch/arm64/boot/dts/freescale/
@@ -3000,8 +3002,10 @@ R: Ghennadi Procopciuc <ghennadi.procopciuc@oss.nxp.com>
R:	NXP S32 Linux Team <s32@nxp.com>
L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S:	Maintained
F:	Documentation/devicetree/bindings/rtc/nxp,s32g-rtc.yaml
F:	arch/arm64/boot/dts/freescale/s32g*.dts*
F:	drivers/pinctrl/nxp/
F:	drivers/rtc/rtc-s32g.c
ARM/NXP S32G/S32R DWMAC ETHERNET DRIVER
M:	Jan Petrous <jan.petrous@oss.nxp.com>
+6 −0
Original line number Diff line number Diff line
@@ -87,6 +87,12 @@ config HISILICON_LPC
	  Driver to enable I/O access to devices attached to the Low Pin
	  Count bus on the HiSilicon Hip06/7 SoC.

config IMX_AIPSTZ
	tristate "Support for IMX Secure AHB to IP Slave bus (AIPSTZ) bridge"
	depends on ARCH_MXC
	help
	  Enable support for IMX AIPSTZ bridge.

config IMX_WEIM
	bool "Freescale EIM DRIVER"
	depends on ARCH_MXC || COMPILE_TEST
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ obj-$(CONFIG_FSL_MC_BUS) += fsl-mc/

obj-$(CONFIG_BT1_APB)		+= bt1-apb.o
obj-$(CONFIG_BT1_AXI)		+= bt1-axi.o
obj-$(CONFIG_IMX_AIPSTZ)	+= imx-aipstz.o
obj-$(CONFIG_IMX_WEIM)		+= imx-weim.o
obj-$(CONFIG_INTEL_IXP4XX_EB)	+= intel-ixp4xx-eb.o
obj-$(CONFIG_MIPS_CDMM)		+= mips_cdmm.o
+108 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright 2025 NXP
 */

#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>

#define IMX_AIPSTZ_MPR0 0x0

struct imx_aipstz_config {
	u32 mpr0;
};

struct imx_aipstz_data {
	void __iomem *base;
	const struct imx_aipstz_config *default_cfg;
};

static void imx_aipstz_apply_default(struct imx_aipstz_data *data)
{
	writel(data->default_cfg->mpr0, data->base + IMX_AIPSTZ_MPR0);
}

static const struct of_device_id imx_aipstz_match_table[] = {
	{ .compatible = "simple-bus", },
	{ }
};

static int imx_aipstz_probe(struct platform_device *pdev)
{
	struct imx_aipstz_data *data;

	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
	if (!data)
		return dev_err_probe(&pdev->dev, -ENOMEM,
				     "failed to allocate data memory\n");

	data->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
	if (IS_ERR(data->base))
		return dev_err_probe(&pdev->dev, -ENOMEM,
				     "failed to get/ioremap AC memory\n");

	data->default_cfg = of_device_get_match_data(&pdev->dev);

	imx_aipstz_apply_default(data);

	dev_set_drvdata(&pdev->dev, data);

	pm_runtime_set_active(&pdev->dev);
	devm_pm_runtime_enable(&pdev->dev);

	return of_platform_populate(pdev->dev.of_node, imx_aipstz_match_table,
				    NULL, &pdev->dev);
}

static void imx_aipstz_remove(struct platform_device *pdev)
{
	of_platform_depopulate(&pdev->dev);
}

static int imx_aipstz_runtime_resume(struct device *dev)
{
	struct imx_aipstz_data *data = dev_get_drvdata(dev);

	/* restore potentially lost configuration during domain power-off */
	imx_aipstz_apply_default(data);

	return 0;
}

static const struct dev_pm_ops imx_aipstz_pm_ops = {
	RUNTIME_PM_OPS(NULL, imx_aipstz_runtime_resume, NULL)
	SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
};

/*
 * following configuration is equivalent to:
 *	masters 0-7 => trusted for R/W + use AHB's HPROT[1] to det. privilege
 */
static const struct imx_aipstz_config imx8mp_aipstz_default_cfg = {
	.mpr0 = 0x77777777,
};

static const struct of_device_id imx_aipstz_of_ids[] = {
	{ .compatible = "fsl,imx8mp-aipstz", .data = &imx8mp_aipstz_default_cfg },
	{ }
};
MODULE_DEVICE_TABLE(of, imx_aipstz_of_ids);

static struct platform_driver imx_aipstz_of_driver = {
	.probe = imx_aipstz_probe,
	.remove = imx_aipstz_remove,
	.driver = {
		.name = "imx-aipstz",
		.of_match_table = imx_aipstz_of_ids,
		.pm = pm_ptr(&imx_aipstz_pm_ops),
	},
};
module_platform_driver(imx_aipstz_of_driver);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("IMX secure AHB to IP Slave bus (AIPSTZ) bridge driver");
MODULE_AUTHOR("Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>");