drivers: mspi_dw: Add support for slave mode
MSPI slave mode is selected through devicetree using the
op-mode property. Mode selected by SSIISMST bit in the
CTRLR0 register. EXMIF can only be Master (controller).
Signed-off-by: David Jewsbury <david.jewsbury@nordicsemi.no>
diff --git a/drivers/mspi/mspi_dw.c b/drivers/mspi/mspi_dw.c
index e8c9a81..cefcb5e 100644
--- a/drivers/mspi/mspi_dw.c
+++ b/drivers/mspi/mspi_dw.c
@@ -114,6 +114,7 @@
uint8_t rx_fifo_threshold;
DECLARE_REG_ACCESS();
bool sw_multi_periph;
+ enum mspi_op_mode op_mode;
};
/* Register access helpers. */
@@ -1748,6 +1749,7 @@
static int dev_init(const struct device *dev)
{
+ struct mspi_dw_data *dev_data = dev->data;
const struct mspi_dw_config *dev_config = dev->config;
const struct gpio_dt_spec *ce_gpio;
int rc;
@@ -1756,11 +1758,12 @@
vendor_specific_init(dev);
+ dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SSI_IS_MST_BIT,
+ dev_config->op_mode == MSPI_OP_MODE_CONTROLLER);
+
dev_config->irq_config();
#if defined(CONFIG_MULTITHREADING)
- struct mspi_dw_data *dev_data = dev->data;
-
dev_data->dev = dev;
k_sem_init(&dev_data->finished, 0, 1);
k_sem_init(&dev_data->cfg_lock, 1, 1);
@@ -1885,6 +1888,7 @@
DEFINE_REG_ACCESS(inst) \
.sw_multi_periph = \
DT_INST_PROP(inst, software_multiperipheral), \
+ .op_mode = DT_INST_STRING_TOKEN(inst, op_mode), \
}; \
DEVICE_DT_INST_DEFINE(inst, \
dev_init, PM_DEVICE_DT_INST_GET(inst), \
diff --git a/drivers/mspi/mspi_dw.h b/drivers/mspi/mspi_dw.h
index 28e4bed..894bee4 100644
--- a/drivers/mspi/mspi_dw.h
+++ b/drivers/mspi/mspi_dw.h
@@ -19,6 +19,7 @@
*/
/* CTRLR0 - Control Register 0 */
+#define CTRLR0_SSI_IS_MST_BIT BIT(31)
#define CTRLR0_SPI_FRF_MASK COND_CODE_1(SSI_VERSION_2, GENMASK(22, 21), GENMASK(23, 22))
#define CTRLR0_SPI_FRF_STANDARD 0UL
#define CTRLR0_SPI_FRF_DUAL 1UL
diff --git a/dts/bindings/mspi/nordic,nrf-exmif.yaml b/dts/bindings/mspi/nordic,nrf-exmif.yaml
index 294254a..4e46e5d 100644
--- a/dts/bindings/mspi/nordic,nrf-exmif.yaml
+++ b/dts/bindings/mspi/nordic,nrf-exmif.yaml
@@ -6,3 +6,7 @@
compatible: "nordic,nrf-exmif"
include: snps,designware-ssi.yaml
+
+properties:
+ op-mode:
+ default: "MSPI_OP_MODE_CONTROLLER"