Lines Matching refs:dev_data

136 	struct mspi_dw_data *dev_data = dev->data;  in tx_data()  local
138 const uint8_t *buf_pos = dev_data->buf_pos; in tx_data()
139 const uint8_t *buf_end = dev_data->buf_end; in tx_data()
149 uint8_t bytes_per_frame_exp = dev_data->bytes_per_frame_exp; in tx_data()
184 dev_data->buf_pos = (uint8_t *)buf_pos; in tx_data()
189 struct mspi_dw_data *dev_data = dev->data; in tx_dummy_bytes() local
194 uint16_t dummy_bytes = dev_data->dummy_bytes; in tx_dummy_bytes()
208 dev_data->dummy_bytes = dummy_bytes - fifo_room; in tx_dummy_bytes()
234 struct mspi_dw_data *dev_data = dev->data; in read_rx_fifo() local
236 uint8_t bytes_to_discard = dev_data->bytes_to_discard; in read_rx_fifo()
237 uint8_t *buf_pos = dev_data->buf_pos; in read_rx_fifo()
239 uint8_t bytes_per_frame_exp = dev_data->bytes_per_frame_exp; in read_rx_fifo()
262 dev_data->buf_pos = buf_pos; in read_rx_fifo()
278 dev_data->bytes_to_discard = bytes_to_discard; in read_rx_fifo()
279 dev_data->buf_pos = buf_pos; in read_rx_fifo()
285 struct mspi_dw_data *dev_data = dev->data; in mspi_dw_isr() local
287 &dev_data->xfer.packets[dev_data->packets_done]; in mspi_dw_isr()
291 if (dev_data->buf_pos < dev_data->buf_end) { in mspi_dw_isr()
339 k_sem_give(&dev_data->finished); in mspi_dw_isr()
352 static bool apply_io_mode(struct mspi_dw_data *dev_data, in apply_io_mode() argument
355 dev_data->ctrlr0 &= ~CTRLR0_SPI_FRF_MASK; in apply_io_mode()
356 dev_data->spi_ctrlr0 &= ~SPI_CTRLR0_TRANS_TYPE_MASK; in apply_io_mode()
361 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SPI_FRF_MASK, in apply_io_mode()
363 dev_data->standard_spi = true; in apply_io_mode()
367 dev_data->standard_spi = false; in apply_io_mode()
373 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SPI_FRF_MASK, in apply_io_mode()
379 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SPI_FRF_MASK, in apply_io_mode()
385 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SPI_FRF_MASK, in apply_io_mode()
400 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_TRANS_TYPE_MASK, in apply_io_mode()
409 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_TRANS_TYPE_MASK, in apply_io_mode()
414 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_TRANS_TYPE_MASK, in apply_io_mode()
422 static bool apply_cmd_length(struct mspi_dw_data *dev_data, uint32_t cmd_length) in apply_cmd_length() argument
426 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_INST_L_MASK, in apply_cmd_length()
430 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_INST_L_MASK, in apply_cmd_length()
434 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_INST_L_MASK, in apply_cmd_length()
445 static bool apply_addr_length(struct mspi_dw_data *dev_data, in apply_addr_length() argument
453 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_ADDR_L_MASK, in apply_addr_length()
460 static bool apply_xip_io_mode(const struct mspi_dw_data *dev_data, in apply_xip_io_mode() argument
463 enum mspi_io_mode io_mode = dev_data->xip_params_active.io_mode; in apply_xip_io_mode()
537 static bool apply_xip_cmd_length(const struct mspi_dw_data *dev_data, in apply_xip_cmd_length() argument
540 uint8_t cmd_length = dev_data->xip_params_active.cmd_length; in apply_xip_cmd_length()
571 static bool apply_xip_addr_length(const struct mspi_dw_data *dev_data, in apply_xip_addr_length() argument
574 uint8_t addr_length = dev_data->xip_params_active.addr_length; in apply_xip_addr_length()
593 struct mspi_dw_data *dev_data = dev->data; in _api_dev_config() local
625 dev_data->xip_params_stored.io_mode = cfg->io_mode; in _api_dev_config()
628 if (!apply_io_mode(dev_data, cfg->io_mode)) { in _api_dev_config()
638 if (!dev_data->xip_enabled) { in _api_dev_config()
639 dev_data->xip_cpp = cfg->cpp; in _api_dev_config()
640 } else if (dev_data->xip_cpp != cfg->cpp) { in _api_dev_config()
646 dev_data->ctrlr0 &= ~(CTRLR0_SCPOL_BIT | CTRLR0_SCPH_BIT); in _api_dev_config()
651 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SCPOL_BIT, 0) | in _api_dev_config()
655 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SCPOL_BIT, 0) | in _api_dev_config()
659 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SCPOL_BIT, 1) | in _api_dev_config()
663 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_SCPOL_BIT, 1) | in _api_dev_config()
682 if (!dev_data->xip_enabled) { in _api_dev_config()
683 dev_data->xip_freq = cfg->freq; in _api_dev_config()
684 } else if (dev_data->xip_freq != cfg->freq) { in _api_dev_config()
690 dev_data->baudr = dev_config->clock_frequency / cfg->freq; in _api_dev_config()
695 dev_data->spi_ctrlr0 &= ~(SPI_CTRLR0_SPI_DDR_EN_BIT | in _api_dev_config()
701 dev_data->spi_ctrlr0 |= SPI_CTRLR0_INST_DDR_EN_BIT; in _api_dev_config()
705 dev_data->spi_ctrlr0 |= SPI_CTRLR0_SPI_DDR_EN_BIT; in _api_dev_config()
724 dev_data->xip_params_stored.read_cmd = cfg->read_cmd; in _api_dev_config()
727 dev_data->xip_params_stored.write_cmd = cfg->write_cmd; in _api_dev_config()
730 dev_data->xip_params_stored.rx_dummy = cfg->rx_dummy; in _api_dev_config()
733 dev_data->xip_params_stored.tx_dummy = cfg->tx_dummy; in _api_dev_config()
736 dev_data->xip_params_stored.cmd_length = cfg->cmd_length; in _api_dev_config()
739 dev_data->xip_params_stored.addr_length = cfg->addr_length; in _api_dev_config()
744 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_FRF_MASK, CTRLR0_FRF_SPI); in _api_dev_config()
746 dev_data->spi_ctrlr0 |= SPI_CTRLR0_CLK_STRETCH_EN_BIT; in _api_dev_config()
757 struct mspi_dw_data *dev_data = dev->data; in api_dev_config() local
760 if (dev_id != dev_data->dev_id) { in api_dev_config()
761 rc = k_sem_take(&dev_data->cfg_lock, in api_dev_config()
768 dev_data->dev_id = dev_id; in api_dev_config()
776 (void)k_sem_take(&dev_data->ctx_lock, K_FOREVER); in api_dev_config()
780 k_sem_give(&dev_data->ctx_lock); in api_dev_config()
783 dev_data->dev_id = NULL; in api_dev_config()
784 k_sem_give(&dev_data->cfg_lock); in api_dev_config()
794 struct mspi_dw_data *dev_data = dev->data; in api_get_channel_status() local
796 (void)k_sem_take(&dev_data->ctx_lock, K_FOREVER); in api_get_channel_status()
798 dev_data->dev_id = NULL; in api_get_channel_status()
799 k_sem_give(&dev_data->cfg_lock); in api_get_channel_status()
801 k_sem_give(&dev_data->ctx_lock); in api_get_channel_status()
820 struct mspi_dw_data *dev_data = dev->data; in start_next_packet() local
822 &dev_data->xfer.packets[dev_data->packets_done]; in start_next_packet()
824 (dev_data->xip_enabled != 0), in start_next_packet()
832 dev_data->xfer.cmd_length == 0 && in start_next_packet()
833 dev_data->xfer.addr_length == 0) { in start_next_packet()
837 dev_data->dummy_bytes = 0; in start_next_packet()
838 dev_data->bytes_to_discard = 0; in start_next_packet()
840 dev_data->ctrlr0 &= ~(CTRLR0_TMOD_MASK) in start_next_packet()
844 dev_data->spi_ctrlr0 &= ~SPI_CTRLR0_WAIT_CYCLES_MASK; in start_next_packet()
846 if (dev_data->standard_spi && in start_next_packet()
847 (dev_data->xfer.cmd_length != 0 || in start_next_packet()
848 dev_data->xfer.addr_length != 0)) { in start_next_packet()
849 dev_data->bytes_per_frame_exp = 0; in start_next_packet()
850 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS_MASK, 7); in start_next_packet()
851 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS32_MASK, 7); in start_next_packet()
854 dev_data->bytes_per_frame_exp = 2; in start_next_packet()
855 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS_MASK, 31); in start_next_packet()
856 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS32_MASK, 31); in start_next_packet()
858 dev_data->bytes_per_frame_exp = 1; in start_next_packet()
859 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS_MASK, 15); in start_next_packet()
860 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS32_MASK, 15); in start_next_packet()
862 dev_data->bytes_per_frame_exp = 0; in start_next_packet()
863 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS_MASK, 7); in start_next_packet()
864 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_DFS32_MASK, 7); in start_next_packet()
868 packet_frames = packet->num_bytes >> dev_data->bytes_per_frame_exp; in start_next_packet()
878 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_TMOD_MASK, in start_next_packet()
880 dev_data->spi_ctrlr0 |= FIELD_PREP(SPI_CTRLR0_WAIT_CYCLES_MASK, in start_next_packet()
881 dev_data->xfer.tx_dummy); in start_next_packet()
896 if (dev_data->standard_spi && in start_next_packet()
897 (dev_data->xfer.cmd_length != 0 || in start_next_packet()
898 dev_data->xfer.addr_length != 0)) { in start_next_packet()
900 uint32_t dummy_cycles = dev_data->xfer.rx_dummy; in start_next_packet()
902 dev_data->bytes_to_discard = dev_data->xfer.cmd_length in start_next_packet()
903 + dev_data->xfer.addr_length in start_next_packet()
905 rx_total_bytes = dev_data->bytes_to_discard in start_next_packet()
908 dev_data->dummy_bytes = dummy_cycles / 8 in start_next_packet()
922 dev_data->spi_ctrlr0 |= in start_next_packet()
924 dev_data->xfer.rx_dummy); in start_next_packet()
927 dev_data->ctrlr0 |= FIELD_PREP(CTRLR0_TMOD_MASK, tmod); in start_next_packet()
933 if (dev_data->dev_id->ce.port) { in start_next_packet()
934 rc = gpio_pin_set_dt(&dev_data->dev_id->ce, 1); in start_next_packet()
950 write_ctrlr0(dev, dev_data->ctrlr0); in start_next_packet()
954 write_spi_ctrlr0(dev, dev_data->spi_ctrlr0); in start_next_packet()
955 write_baudr(dev, dev_data->baudr); in start_next_packet()
956 write_rx_sample_dly(dev, dev_data->rx_sample_dly); in start_next_packet()
957 if (dev_data->spi_ctrlr0 & (SPI_CTRLR0_SPI_DDR_EN_BIT | in start_next_packet()
959 int txd = (CONFIG_MSPI_DW_TXD_MUL * dev_data->baudr) / in start_next_packet()
972 dev_data->buf_pos = packet->data_buf; in start_next_packet()
973 dev_data->buf_end = &packet->data_buf[packet->num_bytes]; in start_next_packet()
988 uint8_t start_level = dev_data->dummy_bytes != 0 in start_next_packet()
1003 if (dev_data->xfer.cmd_length) { in start_next_packet()
1004 if (dev_data->standard_spi) { in start_next_packet()
1005 total_tx_entries += dev_data->xfer.cmd_length; in start_next_packet()
1011 if (dev_data->xfer.addr_length) { in start_next_packet()
1012 if (dev_data->standard_spi) { in start_next_packet()
1013 total_tx_entries += dev_data->xfer.addr_length; in start_next_packet()
1032 if (dev_data->standard_spi) { in start_next_packet()
1033 if (dev_data->xfer.cmd_length) { in start_next_packet()
1035 dev_data->xfer.cmd_length); in start_next_packet()
1038 if (dev_data->xfer.addr_length) { in start_next_packet()
1040 dev_data->xfer.addr_length); in start_next_packet()
1043 if (dev_data->xfer.cmd_length) { in start_next_packet()
1047 if (dev_data->xfer.addr_length) { in start_next_packet()
1053 if (dev_data->dummy_bytes && tx_dummy_bytes(dev)) { in start_next_packet()
1062 write_ser(dev, BIT(dev_data->dev_id->dev_idx)); in start_next_packet()
1064 rc = k_sem_take(&dev_data->finished, timeout); in start_next_packet()
1095 if (dev_data->dev_id->ce.port) { in start_next_packet()
1099 rc2 = gpio_pin_set_dt(&dev_data->dev_id->ce, 0); in start_next_packet()
1112 struct mspi_dw_data *dev_data = dev->data; in _api_transceive() local
1115 dev_data->spi_ctrlr0 &= ~SPI_CTRLR0_INST_L_MASK in _api_transceive()
1118 if (!apply_cmd_length(dev_data, req->cmd_length) || in _api_transceive()
1119 !apply_addr_length(dev_data, req->addr_length)) { in _api_transceive()
1123 if (dev_data->standard_spi) { in _api_transceive()
1139 dev_data->xfer = *req; in _api_transceive()
1141 for (dev_data->packets_done = 0; in _api_transceive()
1142 dev_data->packets_done < dev_data->xfer.num_packet; in _api_transceive()
1143 dev_data->packets_done++) { in _api_transceive()
1144 rc = start_next_packet(dev, K_MSEC(dev_data->xfer.timeout)); in _api_transceive()
1157 struct mspi_dw_data *dev_data = dev->data; in api_transceive() local
1160 if (dev_id != dev_data->dev_id) { in api_transceive()
1177 (void)k_sem_take(&dev_data->ctx_lock, K_FOREVER); in api_transceive()
1179 if (dev_data->suspended) { in api_transceive()
1185 k_sem_give(&dev_data->ctx_lock); in api_transceive()
1201 struct mspi_dw_data *dev_data = dev->data; in _api_xip_config() local
1210 dev_data->xip_enabled &= ~BIT(dev_id->dev_idx); in _api_xip_config()
1212 if (!dev_data->xip_enabled) { in _api_xip_config()
1228 if (!dev_data->xip_enabled) { in _api_xip_config()
1229 struct xip_params *params = &dev_data->xip_params_active; in _api_xip_config()
1232 *params = dev_data->xip_params_stored; in _api_xip_config()
1234 if (!apply_xip_io_mode(dev_data, &ctrl) || in _api_xip_config()
1235 !apply_xip_cmd_length(dev_data, &ctrl) || in _api_xip_config()
1236 !apply_xip_addr_length(dev_data, &ctrl)) { in _api_xip_config()
1265 write_ctrlr0(dev, dev_data->ctrlr0); in _api_xip_config()
1266 write_baudr(dev, dev_data->baudr); in _api_xip_config()
1274 } else if (dev_data->xip_params_active.read_cmd != in _api_xip_config()
1275 dev_data->xip_params_stored.read_cmd || in _api_xip_config()
1276 dev_data->xip_params_active.write_cmd != in _api_xip_config()
1277 dev_data->xip_params_stored.write_cmd || in _api_xip_config()
1278 dev_data->xip_params_active.cmd_length != in _api_xip_config()
1279 dev_data->xip_params_stored.cmd_length || in _api_xip_config()
1280 dev_data->xip_params_active.addr_length != in _api_xip_config()
1281 dev_data->xip_params_stored.addr_length || in _api_xip_config()
1282 dev_data->xip_params_active.rx_dummy != in _api_xip_config()
1283 dev_data->xip_params_stored.rx_dummy || in _api_xip_config()
1284 dev_data->xip_params_active.tx_dummy != in _api_xip_config()
1285 dev_data->xip_params_stored.tx_dummy) { in _api_xip_config()
1297 dev_data->xip_enabled |= BIT(dev_id->dev_idx); in _api_xip_config()
1306 struct mspi_dw_data *dev_data = dev->data; in api_timing_config() local
1310 dev_data->rx_sample_dly = config->rx_sample_dly; in api_timing_config()
1320 struct mspi_dw_data *dev_data = dev->data; in api_xip_config() local
1323 if (cfg->enable && dev_id != dev_data->dev_id) { in api_xip_config()
1334 (void)k_sem_take(&dev_data->ctx_lock, K_FOREVER); in api_xip_config()
1336 if (dev_data->suspended) { in api_xip_config()
1342 k_sem_give(&dev_data->ctx_lock); in api_xip_config()
1357 struct mspi_dw_data *dev_data = dev->data; in dev_pm_action_cb() local
1372 dev_data->suspended = false; in dev_pm_action_cb()
1380 (dev_data->xip_enabled != 0), in dev_pm_action_cb()
1394 k_sem_take(&dev_data->ctx_lock, K_NO_WAIT) != 0) { in dev_pm_action_cb()
1399 dev_data->suspended = true; in dev_pm_action_cb()
1403 k_sem_give(&dev_data->ctx_lock); in dev_pm_action_cb()
1413 struct mspi_dw_data *dev_data = dev->data; in dev_init() local
1424 k_sem_init(&dev_data->finished, 0, 1); in dev_init()
1425 k_sem_init(&dev_data->cfg_lock, 1, 1); in dev_init()
1426 k_sem_init(&dev_data->ctx_lock, 1, 1); in dev_init()