Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi: spi-fsl-dspi: DSPI support for NXP S32G

Merge series from James Clark <james.clark@linaro.org>:

DT and driver changes for DSPI on S32G platforms. First 3 commits are
fixes for various edge cases which also apply to other platforms.
Remaining commits add new S32G registers and device settings, some S32G
specific fixes and then finally add the DT compatibles and binding docs.

Tested in both host and target mode on S32G-VNP-RDB3 by transferring to
an external device over spi1 using spidev_test.c

Mark Brown 3d594a64 c4592621

+253 -125
+18
Documentation/devicetree/bindings/spi/fsl,dspi.yaml
··· 23 23 - fsl,ls2080a-dspi 24 24 - fsl,ls2085a-dspi 25 25 - fsl,lx2160a-dspi 26 + - nxp,s32g2-dspi 26 27 - items: 27 28 - enum: 28 29 - fsl,ls1012a-dspi ··· 38 37 - items: 39 38 - const: fsl,lx2160a-dspi 40 39 - const: fsl,ls2085a-dspi 40 + - items: 41 + - const: nxp,s32g3-dspi 42 + - const: nxp,s32g2-dspi 41 43 42 44 reg: 43 45 maxItems: 1 ··· 117 113 spi-cs-setup-delay-ns = <100>; 118 114 spi-cs-hold-delay-ns = <50>; 119 115 }; 116 + }; 117 + # S32G3 in target mode 118 + - | 119 + spi@401d4000 { 120 + compatible = "nxp,s32g3-dspi", "nxp,s32g2-dspi"; 121 + reg = <0x401d4000 0x1000>; 122 + interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>; 123 + clocks = <&clks 26>; 124 + clock-names = "dspi"; 125 + spi-num-chipselects = <8>; 126 + bus-num = <0>; 127 + dmas = <&edma0 0 7>, <&edma0 0 8>; 128 + dma-names = "tx", "rx"; 129 + spi-slave; 120 130 };
+2 -2
drivers/spi/Kconfig
··· 647 647 config SPI_FSL_DSPI 648 648 tristate "Freescale DSPI controller" 649 649 select REGMAP_MMIO 650 - depends on SOC_VF610 || SOC_LS1021A || ARCH_LAYERSCAPE || M5441x || COMPILE_TEST 650 + depends on ARCH_MXC || ARCH_NXP || M54541x || COMPILE_TEST 651 651 help 652 652 This enables support for the Freescale DSPI controller in master 653 - mode. VF610, LS1021A and ColdFire platforms uses the controller. 653 + mode. S32, VF610, LS1021A and ColdFire platforms uses the controller. 654 654 655 655 config SPI_FSL_ESPI 656 656 tristate "Freescale eSPI controller"
+233 -123
drivers/spi/spi-fsl-dspi.c
··· 24 24 25 25 #define SPI_MCR 0x00 26 26 #define SPI_MCR_HOST BIT(31) 27 + #define SPI_MCR_MTFE BIT(26) 27 28 #define SPI_MCR_PCSIS(x) ((x) << 16) 28 29 #define SPI_MCR_CLR_TXF BIT(11) 29 30 #define SPI_MCR_CLR_RXF BIT(10) ··· 36 35 #define SPI_TCR 0x08 37 36 #define SPI_TCR_GET_TCNT(x) (((x) & GENMASK(31, 16)) >> 16) 38 37 39 - #define SPI_CTAR(x) (0x0c + (((x) & GENMASK(1, 0)) * 4)) 38 + #define SPI_CTAR(x) (0x0c + (((x) & GENMASK(2, 0)) * 4)) 40 39 #define SPI_CTAR_FMSZ(x) (((x) << 27) & GENMASK(30, 27)) 40 + #define SPI_CTAR_DBR BIT(31) 41 41 #define SPI_CTAR_CPOL BIT(26) 42 42 #define SPI_CTAR_CPHA BIT(25) 43 43 #define SPI_CTAR_LSBFE BIT(24) ··· 95 93 #define SPI_TXFR1 0x40 96 94 #define SPI_TXFR2 0x44 97 95 #define SPI_TXFR3 0x48 96 + #define SPI_TXFR4 0x4C 98 97 #define SPI_RXFR0 0x7c 99 98 #define SPI_RXFR1 0x80 100 99 #define SPI_RXFR2 0x84 101 100 #define SPI_RXFR3 0x88 101 + #define SPI_RXFR4 0x8C 102 102 103 - #define SPI_CTARE(x) (0x11c + (((x) & GENMASK(1, 0)) * 4)) 103 + #define SPI_CTARE(x) (0x11c + (((x) & GENMASK(2, 0)) * 4)) 104 104 #define SPI_CTARE_FMSZE(x) (((x) & 0x1) << 16) 105 105 #define SPI_CTARE_DTCP(x) ((x) & 0x7ff) 106 106 ··· 112 108 #define SPI_FRAME_EBITS(bits) SPI_CTARE_FMSZE(((bits) - 1) >> 4) 113 109 114 110 #define DMA_COMPLETION_TIMEOUT msecs_to_jiffies(3000) 111 + 112 + #define SPI_25MHZ 25000000 115 113 116 114 struct chip_data { 117 115 u32 ctar_val; ··· 128 122 enum dspi_trans_mode trans_mode; 129 123 u8 max_clock_factor; 130 124 int fifo_size; 125 + const struct regmap_config *regmap; 131 126 }; 132 127 133 128 enum { ··· 142 135 LX2160A, 143 136 MCF5441X, 144 137 VF610, 138 + S32G, 139 + S32G_TARGET, 140 + }; 141 + 142 + static const struct regmap_range dspi_yes_ranges[] = { 143 + regmap_reg_range(SPI_MCR, SPI_MCR), 144 + regmap_reg_range(SPI_TCR, SPI_CTAR(3)), 145 + regmap_reg_range(SPI_SR, SPI_TXFR3), 146 + regmap_reg_range(SPI_RXFR0, SPI_RXFR3), 147 + regmap_reg_range(SPI_CTARE(0), SPI_CTARE(3)), 148 + regmap_reg_range(SPI_SREX, SPI_SREX), 149 + }; 150 + 151 + static const struct regmap_range s32g_dspi_yes_ranges[] = { 152 + regmap_reg_range(SPI_MCR, SPI_MCR), 153 + regmap_reg_range(SPI_TCR, SPI_CTAR(5)), 154 + regmap_reg_range(SPI_SR, SPI_TXFR4), 155 + regmap_reg_range(SPI_RXFR0, SPI_RXFR4), 156 + regmap_reg_range(SPI_CTARE(0), SPI_CTARE(5)), 157 + regmap_reg_range(SPI_SREX, SPI_SREX), 158 + }; 159 + 160 + static const struct regmap_access_table dspi_access_table = { 161 + .yes_ranges = dspi_yes_ranges, 162 + .n_yes_ranges = ARRAY_SIZE(dspi_yes_ranges), 163 + }; 164 + 165 + static const struct regmap_access_table s32g_dspi_access_table = { 166 + .yes_ranges = s32g_dspi_yes_ranges, 167 + .n_yes_ranges = ARRAY_SIZE(s32g_dspi_yes_ranges), 168 + }; 169 + 170 + static const struct regmap_range dspi_volatile_ranges[] = { 171 + regmap_reg_range(SPI_MCR, SPI_TCR), 172 + regmap_reg_range(SPI_SR, SPI_SR), 173 + regmap_reg_range(SPI_PUSHR, SPI_RXFR4), 174 + regmap_reg_range(SPI_SREX, SPI_SREX), 175 + }; 176 + 177 + static const struct regmap_access_table dspi_volatile_table = { 178 + .yes_ranges = dspi_volatile_ranges, 179 + .n_yes_ranges = ARRAY_SIZE(dspi_volatile_ranges), 180 + }; 181 + 182 + enum { 183 + DSPI_REGMAP, 184 + S32G_DSPI_REGMAP, 185 + DSPI_XSPI_REGMAP, 186 + S32G_DSPI_XSPI_REGMAP, 187 + DSPI_PUSHR, 188 + }; 189 + 190 + static const struct regmap_config dspi_regmap_config[] = { 191 + [DSPI_REGMAP] = { 192 + .reg_bits = 32, 193 + .val_bits = 32, 194 + .reg_stride = 4, 195 + .max_register = SPI_RXFR3, 196 + .volatile_table = &dspi_volatile_table, 197 + .rd_table = &dspi_access_table, 198 + .wr_table = &dspi_access_table, 199 + }, 200 + [S32G_DSPI_REGMAP] = { 201 + .reg_bits = 32, 202 + .val_bits = 32, 203 + .reg_stride = 4, 204 + .max_register = SPI_RXFR4, 205 + .volatile_table = &dspi_volatile_table, 206 + .wr_table = &s32g_dspi_access_table, 207 + .rd_table = &s32g_dspi_access_table, 208 + }, 209 + [DSPI_XSPI_REGMAP] = { 210 + .reg_bits = 32, 211 + .val_bits = 32, 212 + .reg_stride = 4, 213 + .max_register = SPI_SREX, 214 + .volatile_table = &dspi_volatile_table, 215 + .rd_table = &dspi_access_table, 216 + .wr_table = &dspi_access_table, 217 + }, 218 + [S32G_DSPI_XSPI_REGMAP] = { 219 + .reg_bits = 32, 220 + .val_bits = 32, 221 + .reg_stride = 4, 222 + .max_register = SPI_SREX, 223 + .volatile_table = &dspi_volatile_table, 224 + .wr_table = &s32g_dspi_access_table, 225 + .rd_table = &s32g_dspi_access_table, 226 + }, 227 + [DSPI_PUSHR] = { 228 + .name = "pushr", 229 + .reg_bits = 16, 230 + .val_bits = 16, 231 + .reg_stride = 2, 232 + .max_register = 0x2, 233 + }, 145 234 }; 146 235 147 236 static const struct fsl_dspi_devtype_data devtype_data[] = { ··· 245 142 .trans_mode = DSPI_DMA_MODE, 246 143 .max_clock_factor = 2, 247 144 .fifo_size = 4, 145 + .regmap = &dspi_regmap_config[DSPI_REGMAP], 248 146 }, 249 147 [LS1021A] = { 250 148 /* Has A-011218 DMA erratum */ 251 149 .trans_mode = DSPI_XSPI_MODE, 252 150 .max_clock_factor = 8, 253 151 .fifo_size = 4, 152 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 254 153 }, 255 154 [LS1012A] = { 256 155 /* Has A-011218 DMA erratum */ 257 156 .trans_mode = DSPI_XSPI_MODE, 258 157 .max_clock_factor = 8, 259 158 .fifo_size = 16, 159 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 260 160 }, 261 161 [LS1028A] = { 262 162 .trans_mode = DSPI_XSPI_MODE, 263 163 .max_clock_factor = 8, 264 164 .fifo_size = 4, 165 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 265 166 }, 266 167 [LS1043A] = { 267 168 /* Has A-011218 DMA erratum */ 268 169 .trans_mode = DSPI_XSPI_MODE, 269 170 .max_clock_factor = 8, 270 171 .fifo_size = 16, 172 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 271 173 }, 272 174 [LS1046A] = { 273 175 /* Has A-011218 DMA erratum */ 274 176 .trans_mode = DSPI_XSPI_MODE, 275 177 .max_clock_factor = 8, 276 178 .fifo_size = 16, 179 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 277 180 }, 278 181 [LS2080A] = { 279 182 .trans_mode = DSPI_XSPI_MODE, 280 183 .max_clock_factor = 8, 281 184 .fifo_size = 4, 185 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 282 186 }, 283 187 [LS2085A] = { 284 188 .trans_mode = DSPI_XSPI_MODE, 285 189 .max_clock_factor = 8, 286 190 .fifo_size = 4, 191 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 287 192 }, 288 193 [LX2160A] = { 289 194 .trans_mode = DSPI_XSPI_MODE, 290 195 .max_clock_factor = 8, 291 196 .fifo_size = 4, 197 + .regmap = &dspi_regmap_config[DSPI_XSPI_REGMAP], 292 198 }, 293 199 [MCF5441X] = { 294 200 .trans_mode = DSPI_DMA_MODE, 295 201 .max_clock_factor = 8, 296 202 .fifo_size = 16, 203 + .regmap = &dspi_regmap_config[DSPI_REGMAP], 204 + }, 205 + [S32G] = { 206 + .trans_mode = DSPI_XSPI_MODE, 207 + .max_clock_factor = 1, 208 + .fifo_size = 5, 209 + .regmap = &dspi_regmap_config[S32G_DSPI_XSPI_REGMAP], 210 + }, 211 + [S32G_TARGET] = { 212 + .trans_mode = DSPI_DMA_MODE, 213 + .max_clock_factor = 1, 214 + .fifo_size = 5, 215 + .regmap = &dspi_regmap_config[S32G_DSPI_REGMAP], 297 216 }, 298 217 }; 299 218 ··· 350 225 const void *tx; 351 226 void *rx; 352 227 u16 tx_cmd; 228 + bool mtf_enabled; 353 229 const struct fsl_dspi_devtype_data *devtype_data; 354 230 355 231 struct completion xfer_done; ··· 372 246 void (*host_to_dev)(struct fsl_dspi *dspi, u32 *txdata); 373 247 void (*dev_to_host)(struct fsl_dspi *dspi, u32 rxdata); 374 248 }; 249 + 250 + static bool is_s32g_dspi(struct fsl_dspi *data) 251 + { 252 + return data->devtype_data == &devtype_data[S32G] || 253 + data->devtype_data == &devtype_data[S32G_TARGET]; 254 + } 375 255 376 256 static void dspi_native_host_to_dev(struct fsl_dspi *dspi, u32 *txdata) 377 257 { ··· 727 595 } 728 596 729 597 static void hz_to_spi_baud(char *pbr, char *br, int speed_hz, 730 - unsigned long clkrate) 598 + unsigned long clkrate, bool mtf_enabled) 731 599 { 732 600 /* Valid baud rate pre-scaler values */ 733 601 int pbr_tbl[4] = {2, 3, 5, 7}; ··· 744 612 745 613 for (i = 0; i < ARRAY_SIZE(brs); i++) 746 614 for (j = 0; j < ARRAY_SIZE(pbr_tbl); j++) { 747 - scale = brs[i] * pbr_tbl[j]; 615 + if (mtf_enabled) { 616 + /* In MTF mode DBR=1 so frequency is doubled */ 617 + scale = (brs[i] * pbr_tbl[j]) / 2; 618 + } else { 619 + scale = brs[i] * pbr_tbl[j]; 620 + } 621 + 748 622 if (scale >= scale_needed) { 749 623 if (scale < minscale) { 750 624 minscale = scale; ··· 884 746 struct spi_transfer *xfer = dspi->cur_transfer; 885 747 bool odd = !!(dspi->len & 1); 886 748 887 - /* No accel for frames not multiple of 8 bits at the moment */ 888 - if (xfer->bits_per_word % 8) 749 + /* 750 + * No accel for DMA transfers or frames not multiples of 8 bits at the 751 + * moment. 752 + */ 753 + if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE || 754 + xfer->bits_per_word % 8) 889 755 goto no_accel; 890 756 891 757 if (!odd && dspi->len <= dspi->devtype_data->fifo_size * 2) { ··· 898 756 dspi->oper_bits_per_word = 8; 899 757 } else { 900 758 /* Start off with maximum supported by hardware */ 901 - if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) 902 - dspi->oper_bits_per_word = 32; 903 - else 904 - dspi->oper_bits_per_word = 16; 759 + dspi->oper_bits_per_word = 32; 905 760 906 761 /* 907 762 * And go down only if the buffer can't be sent with ··· 1157 1018 return status; 1158 1019 } 1159 1020 1021 + static int dspi_set_mtf(struct fsl_dspi *dspi) 1022 + { 1023 + if (spi_controller_is_target(dspi->ctlr)) 1024 + return 0; 1025 + 1026 + if (dspi->mtf_enabled) 1027 + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_MTFE, 1028 + SPI_MCR_MTFE); 1029 + else 1030 + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_MTFE, 0); 1031 + 1032 + return 0; 1033 + } 1034 + 1160 1035 static int dspi_setup(struct spi_device *spi) 1161 1036 { 1162 1037 struct fsl_dspi *dspi = spi_controller_get_devdata(spi->controller); ··· 1229 1076 cs_sck_delay, sck_cs_delay); 1230 1077 1231 1078 clkrate = clk_get_rate(dspi->clk); 1232 - hz_to_spi_baud(&pbr, &br, spi->max_speed_hz, clkrate); 1079 + 1080 + if (is_s32g_dspi(dspi) && spi->max_speed_hz > SPI_25MHZ) 1081 + dspi->mtf_enabled = true; 1082 + else 1083 + dspi->mtf_enabled = false; 1084 + 1085 + dspi_set_mtf(dspi); 1086 + 1087 + hz_to_spi_baud(&pbr, &br, spi->max_speed_hz, clkrate, 1088 + dspi->mtf_enabled); 1233 1089 1234 1090 /* Set PCS to SCK delay scale values */ 1235 1091 ns_delay_scale(&pcssck, &cssck, cs_sck_delay, clkrate); ··· 1259 1097 SPI_CTAR_ASC(asc) | 1260 1098 SPI_CTAR_PBR(pbr) | 1261 1099 SPI_CTAR_BR(br); 1100 + 1101 + if (dspi->mtf_enabled) 1102 + chip->ctar_val |= SPI_CTAR_DBR; 1262 1103 1263 1104 if (spi->mode & SPI_LSB_FIRST) 1264 1105 chip->ctar_val |= SPI_CTAR_LSBFE; ··· 1316 1151 }, { 1317 1152 .compatible = "fsl,lx2160a-dspi", 1318 1153 .data = &devtype_data[LX2160A], 1154 + }, { 1155 + .compatible = "nxp,s32g2-dspi", 1156 + .data = &devtype_data[S32G], 1319 1157 }, 1320 1158 { /* sentinel */ } 1321 1159 }; 1322 1160 MODULE_DEVICE_TABLE(of, fsl_dspi_dt_ids); 1323 - 1324 - #ifdef CONFIG_PM_SLEEP 1325 - static int dspi_suspend(struct device *dev) 1326 - { 1327 - struct fsl_dspi *dspi = dev_get_drvdata(dev); 1328 - 1329 - if (dspi->irq) 1330 - disable_irq(dspi->irq); 1331 - spi_controller_suspend(dspi->ctlr); 1332 - clk_disable_unprepare(dspi->clk); 1333 - 1334 - pinctrl_pm_select_sleep_state(dev); 1335 - 1336 - return 0; 1337 - } 1338 - 1339 - static int dspi_resume(struct device *dev) 1340 - { 1341 - struct fsl_dspi *dspi = dev_get_drvdata(dev); 1342 - int ret; 1343 - 1344 - pinctrl_pm_select_default_state(dev); 1345 - 1346 - ret = clk_prepare_enable(dspi->clk); 1347 - if (ret) 1348 - return ret; 1349 - spi_controller_resume(dspi->ctlr); 1350 - if (dspi->irq) 1351 - enable_irq(dspi->irq); 1352 - 1353 - return 0; 1354 - } 1355 - #endif /* CONFIG_PM_SLEEP */ 1356 - 1357 - static SIMPLE_DEV_PM_OPS(dspi_pm, dspi_suspend, dspi_resume); 1358 - 1359 - static const struct regmap_range dspi_yes_ranges[] = { 1360 - regmap_reg_range(SPI_MCR, SPI_MCR), 1361 - regmap_reg_range(SPI_TCR, SPI_CTAR(3)), 1362 - regmap_reg_range(SPI_SR, SPI_TXFR3), 1363 - regmap_reg_range(SPI_RXFR0, SPI_RXFR3), 1364 - regmap_reg_range(SPI_CTARE(0), SPI_CTARE(3)), 1365 - regmap_reg_range(SPI_SREX, SPI_SREX), 1366 - }; 1367 - 1368 - static const struct regmap_access_table dspi_access_table = { 1369 - .yes_ranges = dspi_yes_ranges, 1370 - .n_yes_ranges = ARRAY_SIZE(dspi_yes_ranges), 1371 - }; 1372 - 1373 - static const struct regmap_range dspi_volatile_ranges[] = { 1374 - regmap_reg_range(SPI_MCR, SPI_TCR), 1375 - regmap_reg_range(SPI_SR, SPI_SR), 1376 - regmap_reg_range(SPI_PUSHR, SPI_RXFR3), 1377 - }; 1378 - 1379 - static const struct regmap_access_table dspi_volatile_table = { 1380 - .yes_ranges = dspi_volatile_ranges, 1381 - .n_yes_ranges = ARRAY_SIZE(dspi_volatile_ranges), 1382 - }; 1383 - 1384 - static const struct regmap_config dspi_regmap_config = { 1385 - .reg_bits = 32, 1386 - .val_bits = 32, 1387 - .reg_stride = 4, 1388 - .max_register = 0x88, 1389 - .volatile_table = &dspi_volatile_table, 1390 - .rd_table = &dspi_access_table, 1391 - .wr_table = &dspi_access_table, 1392 - }; 1393 - 1394 - static const struct regmap_range dspi_xspi_volatile_ranges[] = { 1395 - regmap_reg_range(SPI_MCR, SPI_TCR), 1396 - regmap_reg_range(SPI_SR, SPI_SR), 1397 - regmap_reg_range(SPI_PUSHR, SPI_RXFR3), 1398 - regmap_reg_range(SPI_SREX, SPI_SREX), 1399 - }; 1400 - 1401 - static const struct regmap_access_table dspi_xspi_volatile_table = { 1402 - .yes_ranges = dspi_xspi_volatile_ranges, 1403 - .n_yes_ranges = ARRAY_SIZE(dspi_xspi_volatile_ranges), 1404 - }; 1405 - 1406 - static const struct regmap_config dspi_xspi_regmap_config[] = { 1407 - { 1408 - .reg_bits = 32, 1409 - .val_bits = 32, 1410 - .reg_stride = 4, 1411 - .max_register = 0x13c, 1412 - .volatile_table = &dspi_xspi_volatile_table, 1413 - .rd_table = &dspi_access_table, 1414 - .wr_table = &dspi_access_table, 1415 - }, 1416 - { 1417 - .name = "pushr", 1418 - .reg_bits = 16, 1419 - .val_bits = 16, 1420 - .reg_stride = 2, 1421 - .max_register = 0x2, 1422 - }, 1423 - }; 1424 1161 1425 1162 static int dspi_init(struct fsl_dspi *dspi) 1426 1163 { ··· 1359 1292 return 0; 1360 1293 } 1361 1294 1295 + #ifdef CONFIG_PM_SLEEP 1296 + static int dspi_suspend(struct device *dev) 1297 + { 1298 + struct fsl_dspi *dspi = dev_get_drvdata(dev); 1299 + 1300 + if (dspi->irq) 1301 + disable_irq(dspi->irq); 1302 + spi_controller_suspend(dspi->ctlr); 1303 + clk_disable_unprepare(dspi->clk); 1304 + 1305 + pinctrl_pm_select_sleep_state(dev); 1306 + 1307 + return 0; 1308 + } 1309 + 1310 + static int dspi_resume(struct device *dev) 1311 + { 1312 + struct fsl_dspi *dspi = dev_get_drvdata(dev); 1313 + int ret; 1314 + 1315 + pinctrl_pm_select_default_state(dev); 1316 + 1317 + ret = clk_prepare_enable(dspi->clk); 1318 + if (ret) 1319 + return ret; 1320 + spi_controller_resume(dspi->ctlr); 1321 + 1322 + ret = dspi_init(dspi); 1323 + if (ret) { 1324 + dev_err(dev, "failed to initialize dspi during resume\n"); 1325 + return ret; 1326 + } 1327 + 1328 + dspi_set_mtf(dspi); 1329 + 1330 + if (dspi->irq) 1331 + enable_irq(dspi->irq); 1332 + 1333 + return 0; 1334 + } 1335 + #endif /* CONFIG_PM_SLEEP */ 1336 + 1337 + static SIMPLE_DEV_PM_OPS(dspi_pm, dspi_suspend, dspi_resume); 1338 + 1362 1339 static int dspi_target_abort(struct spi_controller *host) 1363 1340 { 1364 1341 struct fsl_dspi *dspi = spi_controller_get_devdata(host); ··· 1427 1316 static int dspi_probe(struct platform_device *pdev) 1428 1317 { 1429 1318 struct device_node *np = pdev->dev.of_node; 1430 - const struct regmap_config *regmap_config; 1431 1319 struct fsl_dspi_platform_data *pdata; 1432 1320 struct spi_controller *ctlr; 1433 1321 int ret, cs_num, bus_num = -1; ··· 1439 1329 if (!dspi) 1440 1330 return -ENOMEM; 1441 1331 1442 - ctlr = spi_alloc_host(&pdev->dev, 0); 1332 + if (of_property_read_bool(np, "spi-slave")) 1333 + ctlr = spi_alloc_target(&pdev->dev, 0); 1334 + else 1335 + ctlr = spi_alloc_host(&pdev->dev, 0); 1443 1336 if (!ctlr) 1444 1337 return -ENOMEM; 1445 1338 ··· 1481 1368 of_property_read_u32(np, "bus-num", &bus_num); 1482 1369 ctlr->bus_num = bus_num; 1483 1370 1484 - if (of_property_read_bool(np, "spi-slave")) 1485 - ctlr->target = true; 1486 - 1487 1371 dspi->devtype_data = of_device_get_match_data(&pdev->dev); 1488 1372 if (!dspi->devtype_data) { 1489 1373 dev_err(&pdev->dev, "can't get devtype_data\n"); ··· 1498 1388 dspi->pushr_tx = 0; 1499 1389 } 1500 1390 1391 + if (spi_controller_is_target(ctlr) && is_s32g_dspi(dspi)) 1392 + dspi->devtype_data = &devtype_data[S32G_TARGET]; 1393 + 1501 1394 if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) 1502 1395 ctlr->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); 1503 1396 else ··· 1512 1399 goto out_ctlr_put; 1513 1400 } 1514 1401 1515 - if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) 1516 - regmap_config = &dspi_xspi_regmap_config[0]; 1517 - else 1518 - regmap_config = &dspi_regmap_config; 1519 - dspi->regmap = devm_regmap_init_mmio(&pdev->dev, base, regmap_config); 1402 + dspi->regmap = devm_regmap_init_mmio(&pdev->dev, base, 1403 + dspi->devtype_data->regmap); 1520 1404 if (IS_ERR(dspi->regmap)) { 1521 1405 dev_err(&pdev->dev, "failed to init regmap: %ld\n", 1522 1406 PTR_ERR(dspi->regmap)); ··· 1524 1414 if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) { 1525 1415 dspi->regmap_pushr = devm_regmap_init_mmio( 1526 1416 &pdev->dev, base + SPI_PUSHR, 1527 - &dspi_xspi_regmap_config[1]); 1417 + &dspi_regmap_config[DSPI_PUSHR]); 1528 1418 if (IS_ERR(dspi->regmap_pushr)) { 1529 1419 dev_err(&pdev->dev, 1530 1420 "failed to init pushr regmap: %ld\n",