Skip to content

Commit b9fbbcf

Browse files
Larisa Grigoregregkh
authored andcommitted
spi: spi-fsl-dspi: restrict register range for regmap access
[ Upstream commit 283ae0c ] DSPI registers are NOT continuous, some registers are reserved and accessing them from userspace will trigger external abort, add regmap register access table to avoid below abort. For example on S32G: # cat /sys/kernel/debug/regmap/401d8000.spi/registers Internal error: synchronous external abort: 96000210 1 PREEMPT SMP ... Call trace: regmap_mmio_read32le+0x24/0x48 regmap_mmio_read+0x48/0x70 _regmap_bus_reg_read+0x38/0x48 _regmap_read+0x68/0x1b0 regmap_read+0x50/0x78 regmap_read_debugfs+0x120/0x338 Fixes: 1acbdeb ("spi/fsl-dspi: Convert to use regmap and add big-endian support") Co-developed-by: Xulin Sun <[email protected]> Signed-off-by: Xulin Sun <[email protected]> Signed-off-by: Larisa Grigore <[email protected]> Signed-off-by: James Clark <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 1d45e01 commit b9fbbcf

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

drivers/spi/spi-fsl-dspi.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: GPL-2.0+
22
//
33
// Copyright 2013 Freescale Semiconductor, Inc.
4-
// Copyright 2020 NXP
4+
// Copyright 2020-2025 NXP
55
//
66
// Freescale DSPI driver
77
// This file contains a driver for the Freescale DSPI
@@ -1167,6 +1167,20 @@ static int dspi_resume(struct device *dev)
11671167

11681168
static SIMPLE_DEV_PM_OPS(dspi_pm, dspi_suspend, dspi_resume);
11691169

1170+
static const struct regmap_range dspi_yes_ranges[] = {
1171+
regmap_reg_range(SPI_MCR, SPI_MCR),
1172+
regmap_reg_range(SPI_TCR, SPI_CTAR(3)),
1173+
regmap_reg_range(SPI_SR, SPI_TXFR3),
1174+
regmap_reg_range(SPI_RXFR0, SPI_RXFR3),
1175+
regmap_reg_range(SPI_CTARE(0), SPI_CTARE(3)),
1176+
regmap_reg_range(SPI_SREX, SPI_SREX),
1177+
};
1178+
1179+
static const struct regmap_access_table dspi_access_table = {
1180+
.yes_ranges = dspi_yes_ranges,
1181+
.n_yes_ranges = ARRAY_SIZE(dspi_yes_ranges),
1182+
};
1183+
11701184
static const struct regmap_range dspi_volatile_ranges[] = {
11711185
regmap_reg_range(SPI_MCR, SPI_TCR),
11721186
regmap_reg_range(SPI_SR, SPI_SR),
@@ -1184,6 +1198,8 @@ static const struct regmap_config dspi_regmap_config = {
11841198
.reg_stride = 4,
11851199
.max_register = 0x88,
11861200
.volatile_table = &dspi_volatile_table,
1201+
.rd_table = &dspi_access_table,
1202+
.wr_table = &dspi_access_table,
11871203
};
11881204

11891205
static const struct regmap_range dspi_xspi_volatile_ranges[] = {
@@ -1205,6 +1221,8 @@ static const struct regmap_config dspi_xspi_regmap_config[] = {
12051221
.reg_stride = 4,
12061222
.max_register = 0x13c,
12071223
.volatile_table = &dspi_xspi_volatile_table,
1224+
.rd_table = &dspi_access_table,
1225+
.wr_table = &dspi_access_table,
12081226
},
12091227
{
12101228
.name = "pushr",

0 commit comments

Comments
 (0)