Files
6CAR/drivers/source/xspi_mst_slv/sdrv_xspi_slv.c
2026-04-18 09:16:58 +08:00

475 lines
21 KiB
C

/**
* @file sdrv_xspi_slv.c
* @brief sdrv_xspi_slv driver
*
* @copyright Copyright (c) 2021 Semidrive Semiconductor.
* All rights reserved.
*/
#include <compiler.h>
#include <debug.h>
#include <param.h>
#include <reg.h>
#include <string.h>
#include "sdrv_xspi_slv.h"
#include "regs_base.h"
#include "sdrv_xspi_slv_reg.h"
#include "udelay/udelay.h"
status_t sdrv_xspi_slv_init(struct sdrv_xspi_slv *slave,
const struct sdrv_xspi_slv_conf *conf)
{
ASSERT(slave && conf);
memset(slave, 0, sizeof(*slave));
slave->base = conf->base;
slave->irq = conf->irq;
sdrv_xspi_slv_set_en(slave->base, 0);
sdrv_xspi_slv_set_crc_en(slave->base, !conf->crc_dis);
sdrv_xspi_slv_set_bit_endian(slave->base, conf->bit_endian);
sdrv_xspi_slv_set_tx_mode(slave->base, conf->tx_mode);
sdrv_xspi_slv_set_mode(slave->base, conf->mode);
sdrv_xspi_slv_set_rate(slave->base, conf->is_ddr);
sdrv_xspi_slv_set_line(slave->base, conf->line);
sdrv_xspi_slv_set_timeout_time(slave->base, 20000);
sdrv_xspi_slv_set_timeout_en(slave->base, 1);
sdrv_xspi_slv_set_cmd_write_trigger(slave->base, conf->cmd_wr_trg);
sdrv_xspi_slv_set_cmd_read_trigger(slave->base, conf->cmd_rd_trg);
sdrv_xspi_slv_set_cmd_write_packet0(slave->base, conf->cmd_wr_packet0);
sdrv_xspi_slv_set_cmd_write_packet1(slave->base, conf->cmd_wr_packet1);
sdrv_xspi_slv_set_cmd_write_payload(slave->base, conf->cmd_wr_payload);
sdrv_xspi_slv_set_cmd_write_wdata(slave->base, conf->cmd_wr_wdata);
sdrv_xspi_slv_set_cmd_write_status(slave->base, conf->cmd_wr_st);
sdrv_xspi_slv_set_cmd_read_id(slave->base, conf->cmd_rd_id);
sdrv_xspi_slv_set_cmd_read_status(slave->base, conf->cmd_rd_st);
sdrv_xspi_slv_set_cmd_read_rdata(slave->base, conf->cmd_rd_rdata);
sdrv_xspi_slv_set_cmd_read_rdata_crc(slave->base, conf->cmd_rd_rdata_crc);
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_clr_status(struct sdrv_xspi_slv *slave)
{
sdrv_xspi_slv_set_slv_status_update(slave->base, 0xe0u);
sdrv_xspi_slv_set_pad_crcb_mask(slave->base, 0x7cu);
udelay(1);
uint32_t val = sdrv_xspi_slv_get_slv_status(slave->base);
if (val & 0x1f00u) {
ssdk_printf(0, "update xspi slv status = 0x%x fail \r\n", val);
return SSDRV_STATUS_GROUP_XSPI_SLAVER_GET_STATUS_ERR;
}
sdrv_xspi_slv_set_pad_crcb_mask(slave->base, 0x0u);
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_enable(struct sdrv_xspi_slv *slave)
{
ASSERT(slave);
sdrv_xspi_slv_soft_reset(slave->base);
sdrv_xspi_slv_set_en(slave->base, 1);
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_disable(struct sdrv_xspi_slv *slave)
{
ASSERT(slave);
sdrv_xspi_slv_set_en(slave->base, 0);
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_set_attr(struct sdrv_xspi_slv *slave,
enum sdrv_xspi_slv_ioctl_flag flag, const void *buf)
{
ASSERT(slave && flag < XSPI_SLV_FLAG_MAX && buf);
const struct sdrv_xspi_slv_sclk_idle_time_conf *idle_time_conf;
const struct sdrv_xspi_slv_debounce_ctrl_conf *debounce_conf;
const struct sdrv_xspi_slv_timeout_mon_ctrl_conf *timeout_conf;
const struct sdrv_xspi_slv_aid_conf *aid_conf;
const struct sdrv_xspi_slv_acache_conf *acache_conf;
const struct sdrv_xspi_slv_aprot_conf *aprot_conf;
const struct sdrv_xspi_slv_mon_conf *mon_conf;
const struct sdrv_xspi_slv_region_map_conf *map_conf;
const struct sdrv_xspi_slv_dummy_cycle_conf *dummy_cycle_conf;
sdrv_xspi_slv_set_en(slave->base, 0);
switch (flag) {
case XSPI_SLV_FLAG_EN:
sdrv_xspi_slv_set_en(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_CRC_EN:
sdrv_xspi_slv_set_crc_en(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_BIT_ENDIAN:
sdrv_xspi_slv_set_bit_endian(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_PAD_RESET_MASK:
sdrv_xspi_slv_set_pad_reset_mask(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_WR_CHK_EN:
sdrv_xspi_slv_set_write_chk_en(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_TX_MODE:
sdrv_xspi_slv_set_tx_mode(slave->base, *(enum sdrv_xspi_slv_tx_mode *)buf);
break;
case XSPI_SLV_FLAG_AXI_WR_EN:
sdrv_xspi_slv_set_write_en(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_AXI_RD_EN:
sdrv_xspi_slv_set_read_en(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_MODE:
sdrv_xspi_slv_set_mode(slave->base, *(enum sdrv_xspi_slv_mode *)buf);
break;
case XSPI_SLV_FLAG_SCLK_IDLE_TIME:
idle_time_conf = buf;
sdrv_xspi_slv_set_sclk_idle_time_en(slave->base, idle_time_conf->enable);
sdrv_xspi_slv_set_sclk_idle_time(slave->base, idle_time_conf->idle_time);
break;
case XSPI_SLV_FLAG_RATE:
sdrv_xspi_slv_set_rate(slave->base, *(bool *)buf);
break;
case XSPI_SLV_FLAG_LINE:
sdrv_xspi_slv_set_line(slave->base, *(enum sdrv_xspi_slv_line *)buf);
break;
case XSPI_SLV_FLAG_DEBOUNCE_CTRL:
debounce_conf = buf;
sdrv_xspi_slv_set_debounce_en(slave->base, debounce_conf->enable);
sdrv_xspi_slv_set_debounce_time(slave->base, debounce_conf->time);
break;
case XSPI_SLV_FLAG_WR_DUMMY_CYCLE:
dummy_cycle_conf = buf;
sdrv_xspi_slv_set_dummy_cycle(slave->base, dummy_cycle_conf->dummy_val);
break;
case XSPI_SLV_FLAG_TIMEOUT_CTRL:
timeout_conf = buf;
sdrv_xspi_slv_set_timeout_en(slave->base, timeout_conf->enable);
sdrv_xspi_slv_set_timeout_time(slave->base, timeout_conf->time);
break;
case XSPI_SLV_FLAG_ST_ACCESS:
sdrv_xspi_slv_set_status_access_en(slave->base, *(uint16_t *)buf);
break;
case XSPI_SLV_FLAG_ID0:
sdrv_xspi_slv_set_id0(slave->base, *(uint32_t *)buf);
break;
case XSPI_SLV_FLAG_ID1:
sdrv_xspi_slv_set_id1(slave->base, *(uint32_t *)buf);
break;
case XSPI_SLV_FLAG_PAD_INTB_MASK:
sdrv_xspi_slv_set_pad_intb_mask(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_PAD_CRCB_MASK:
sdrv_xspi_slv_set_pad_crcb_mask(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_INT_MASK:
sdrv_xspi_slv_set_int_mask(slave->base, *(uint32_t *)buf);
break;
case XSPI_SLV_FLAG_ST_UPDATE:
sdrv_xspi_slv_set_slv_status_update(slave->base, *(uint16_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_TRG:
sdrv_xspi_slv_set_cmd_write_trigger(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_RD_TRG:
sdrv_xspi_slv_set_cmd_read_trigger(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_PACKET0:
sdrv_xspi_slv_set_cmd_write_packet0(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_PACKET1:
sdrv_xspi_slv_set_cmd_write_packet1(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_PAYLOAD:
sdrv_xspi_slv_set_cmd_write_payload(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_WDATA:
sdrv_xspi_slv_set_cmd_write_wdata(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_WR_ST:
sdrv_xspi_slv_set_cmd_write_status(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_RD_ID:
sdrv_xspi_slv_set_cmd_read_id(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_RD_ST:
sdrv_xspi_slv_set_cmd_read_status(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_RD_RDATA:
sdrv_xspi_slv_set_cmd_read_rdata(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_CMD_RD_RDATA_CRC:
sdrv_xspi_slv_set_cmd_read_rdata_crc(slave->base, *(uint8_t *)buf);
break;
case XSPI_SLV_FLAG_ARID_OVERRIDE:
aid_conf = buf;
sdrv_xspi_slv_set_arid_override_en(slave->base, aid_conf->enable);
sdrv_xspi_slv_set_override_arid(slave->base, aid_conf->aid);
break;
case XSPI_SLV_FLAG_ARCACHE_OVERRIDE:
acache_conf = buf;
sdrv_xspi_slv_set_arcache_override_en(slave->base,
acache_conf->enable);
sdrv_xspi_slv_set_override_arcache(slave->base,
acache_conf->acache);
break;
case XSPI_SLV_FLAG_ARPROT_OVERRIDE:
aprot_conf = buf;
sdrv_xspi_slv_set_arprot_override_en(slave->base,
aprot_conf->enable);
sdrv_xspi_slv_set_override_arprot(slave->base, aprot_conf->aprot);
break;
case XSPI_SLV_FLAG_AWID_OVERRIDE:
aid_conf = buf;
sdrv_xspi_slv_set_awid_override_en(slave->base, aid_conf->enable);
sdrv_xspi_slv_set_override_awid(slave->base, aid_conf->aid);
break;
case XSPI_SLV_FLAG_AWCACHE_OVERRIDE:
acache_conf = buf;
sdrv_xspi_slv_set_awcache_override_en(slave->base,
acache_conf->enable);
sdrv_xspi_slv_set_override_awcache(slave->base,
acache_conf->acache);
break;
case XSPI_SLV_FLAG_AWPROT_OVERRIDE:
aprot_conf = buf;
sdrv_xspi_slv_set_awprot_override_en(slave->base, aprot_conf->enable);
sdrv_xspi_slv_set_override_awprot(slave->base, aprot_conf->aprot);
break;
case XSPI_SLV_FLAG_REGION_MAP:
map_conf = buf;
sdrv_xspi_slv_set_region_map_en(slave->base, map_conf->enable, map_conf->id);
sdrv_xspi_slv_set_region_map_offset(slave->base, map_conf->offset_addr, map_conf->id);
sdrv_xspi_slv_set_region_map_begin_addr(slave->base,
map_conf->begin_addr, map_conf->id);
sdrv_xspi_slv_set_region_map_end_addr(slave->base,
map_conf->end_addr, map_conf->id);
break;
case XSPI_SLV_FLAG_RD_MON:
mon_conf = buf;
sdrv_xspi_slv_set_read_ctrl_addr_en(slave->base, mon_conf->addr_en);
sdrv_xspi_slv_set_read_mon_perm_addr_en(slave->base, mon_conf->addr_en, mon_conf->id);
sdrv_xspi_slv_set_r_mon_begin_addr(slave->base, mon_conf->begin_addr, mon_conf->id);
sdrv_xspi_slv_set_r_mon_end_addr(slave->base, mon_conf->end_addr, mon_conf->id);
sdrv_xspi_slv_set_read_mon_perm_addr_lock(slave->base, mon_conf->addr_lock, mon_conf->id);
break;
case XSPI_SLV_FLAG_WR_MON:
mon_conf = buf;
sdrv_xspi_slv_set_write_ctrl_addr_en(slave->base, mon_conf->addr_en);
sdrv_xspi_slv_set_write_mon_perm_addr_en(slave->base, mon_conf->addr_en, mon_conf->id);
sdrv_xspi_slv_set_w_mon_begin_addr(slave->base, mon_conf->begin_addr, mon_conf->id);
sdrv_xspi_slv_set_w_mon_end_addr(slave->base, mon_conf->end_addr, mon_conf->id);
sdrv_xspi_slv_set_write_mon_perm_addr_lock(slave->base, mon_conf->addr_lock, mon_conf->id);
break;
default:
ssdk_printf(SSDK_EMERG, "set flag error: %d\r\n", flag);
return SSDRV_STATUS_GROUP_XSPI_SLAVER_GET_FLAG_ATTR_ERR;
}
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_get_attr(struct sdrv_xspi_slv *slave,
enum sdrv_xspi_slv_ioctl_flag flag, void *buf)
{
ASSERT(slave && flag < XSPI_SLV_FLAG_MAX && buf);
struct sdrv_xspi_slv_sclk_idle_time_conf *idle_time_conf;
struct sdrv_xspi_slv_debounce_ctrl_conf *debounce_conf;
struct sdrv_xspi_slv_timeout_mon_ctrl_conf *timeout_conf;
struct sdrv_xspi_slv_aid_conf *aid_conf;
struct sdrv_xspi_slv_acache_conf *acache_conf;
struct sdrv_xspi_slv_aprot_conf *aprot_conf;
struct sdrv_xspi_slv_mon_conf *mon_conf;
struct sdrv_xspi_slv_region_map_conf *map_conf;
switch (flag) {
case XSPI_SLV_FLAG_EN:
*(bool *)buf = sdrv_xspi_slv_get_en(slave->base);
break;
case XSPI_SLV_FLAG_CRC_EN:
*(bool *)buf = sdrv_xspi_slv_get_crc_en(slave->base);
break;
case XSPI_SLV_FLAG_BIT_ENDIAN:
*(bool *)buf = sdrv_xspi_slv_get_crc_en(slave->base);
break;
case XSPI_SLV_FLAG_PAD_RESET_MASK:
*(bool *)buf = sdrv_xspi_slv_get_pad_reset_mask(slave->base);
break;
case XSPI_SLV_FLAG_WR_CHK_EN:
*(bool *)buf = sdrv_xspi_slv_get_write_chk_en(slave->base);
break;
case XSPI_SLV_FLAG_TX_MODE:
*(enum sdrv_xspi_slv_tx_mode *)buf =
(enum sdrv_xspi_slv_tx_mode)sdrv_xspi_slv_get_tx_mode(slave->base);
break;
case XSPI_SLV_FLAG_AXI_WR_EN:
*(bool *)buf = sdrv_xspi_slv_get_write_en(slave->base);
break;
case XSPI_SLV_FLAG_AXI_RD_EN:
*(bool *)buf = sdrv_xspi_slv_get_read_en(slave->base);
break;
case XSPI_SLV_FLAG_MODE:
*(enum sdrv_xspi_slv_mode *)buf = (enum sdrv_xspi_slv_mode)sdrv_xspi_slv_get_mode(slave->base);
break;
case XSPI_SLV_FLAG_SCLK_IDLE_TIME:
idle_time_conf = buf;
idle_time_conf->enable =
sdrv_xspi_slv_get_sclk_idle_time_en(slave->base);
idle_time_conf->idle_time =
sdrv_xspi_slv_get_sclk_idle_time(slave->base);
break;
case XSPI_SLV_FLAG_RATE:
*(bool *)buf = sdrv_xspi_slv_get_rate(slave->base);
break;
case XSPI_SLV_FLAG_LINE:
*(enum sdrv_xspi_slv_line *)buf = (enum sdrv_xspi_slv_line)sdrv_xspi_slv_get_line(slave->base);
break;
case XSPI_SLV_FLAG_DEBOUNCE_CTRL:
debounce_conf = buf;
debounce_conf->enable = sdrv_xspi_slv_get_debounce_en(slave->base);
debounce_conf->time = sdrv_xspi_slv_get_debounce_time(slave->base);
break;
case XSPI_SLV_FLAG_TIMEOUT_CTRL:
timeout_conf = buf;
timeout_conf->enable = sdrv_xspi_slv_get_timeout_en(slave->base);
timeout_conf->time = sdrv_xspi_slv_get_timeout_time(slave->base);
break;
case XSPI_SLV_FLAG_ST_ACCESS:
*(uint16_t *)buf = sdrv_xspi_slv_get_status_access_en(slave->base);
break;
case XSPI_SLV_FLAG_ID0:
*(uint32_t *)buf = sdrv_xspi_slv_get_id0(slave->base);
break;
case XSPI_SLV_FLAG_ID1:
*(uint32_t *)buf = sdrv_xspi_slv_get_id1(slave->base);
break;
case XSPI_SLV_FLAG_PAD_INTB_MASK:
*(uint8_t *)buf = sdrv_xspi_slv_get_pad_intb_mask(slave->base);
break;
case XSPI_SLV_FLAG_PAD_CRCB_MASK:
*(uint8_t *)buf = sdrv_xspi_slv_get_pad_crcb_mask(slave->base);
break;
case XSPI_SLV_FLAG_INT_ST:
*(uint32_t *)buf = sdrv_xspi_slv_get_int_st(slave->base);
break;
case XSPI_SLV_FLAG_INT_MASK:
*(uint32_t *)buf = sdrv_xspi_slv_get_int_mask(slave->base);
break;
case XSPI_SLV_FLAG_ST:
*(uint16_t *)buf = sdrv_xspi_slv_get_slv_status(slave->base);
break;
case XSPI_SLV_FLAG_ST_UPDATE:
*(uint16_t *)buf = sdrv_xspi_slv_get_slv_status_update(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_TRG:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_trigger(slave->base);
break;
case XSPI_SLV_FLAG_CMD_RD_TRG:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_read_trigger(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_PACKET0:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_packet0(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_PACKET1:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_packet1(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_PAYLOAD:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_payload(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_WDATA:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_wdata(slave->base);
break;
case XSPI_SLV_FLAG_CMD_WR_ST:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_write_status(slave->base);
break;
case XSPI_SLV_FLAG_CMD_RD_ID:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_read_id(slave->base);
break;
case XSPI_SLV_FLAG_CMD_RD_ST:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_read_status(slave->base);
break;
case XSPI_SLV_FLAG_CMD_RD_RDATA:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_read_rdata(slave->base);
break;
case XSPI_SLV_FLAG_CMD_RD_RDATA_CRC:
*(uint8_t *)buf = sdrv_xspi_slv_get_cmd_read_rdata_crc(slave->base);
break;
case XSPI_SLV_FLAG_ARID_OVERRIDE:
aid_conf = buf;
aid_conf->enable = sdrv_xspi_slv_get_arid_override_en(slave->base);
aid_conf->aid = sdrv_xspi_slv_get_override_arid(slave->base);
break;
case XSPI_SLV_FLAG_ARCACHE_OVERRIDE:
acache_conf = buf;
acache_conf->enable = sdrv_xspi_slv_get_arcache_override_en(slave->base);
acache_conf->acache = sdrv_xspi_slv_get_override_arcache(slave->base);
break;
case XSPI_SLV_FLAG_ARPROT_OVERRIDE:
aprot_conf = buf;
sdrv_xspi_slv_set_arprot_override_en(slave->base,
aprot_conf->enable);
sdrv_xspi_slv_set_override_arprot(slave->base, aprot_conf->aprot);
break;
case XSPI_SLV_FLAG_AWID_OVERRIDE:
aid_conf = buf;
aid_conf->enable = sdrv_xspi_slv_get_awid_override_en(slave->base);
aid_conf->aid = sdrv_xspi_slv_get_override_awid(slave->base);
break;
case XSPI_SLV_FLAG_AWCACHE_OVERRIDE:
acache_conf = buf;
acache_conf->enable = sdrv_xspi_slv_get_awcache_override_en(slave->base);
acache_conf->acache = sdrv_xspi_slv_get_override_awcache(slave->base);
break;
case XSPI_SLV_FLAG_AWPROT_OVERRIDE:
aprot_conf = buf;
aprot_conf->enable = sdrv_xspi_slv_get_awprot_override_en(slave->base);
aprot_conf->aprot = sdrv_xspi_slv_get_override_awprot(slave->base);
break;
case XSPI_SLV_FLAG_REGION_MAP:
map_conf = buf;
map_conf->enable = sdrv_xspi_slv_get_region_map_en(slave->base, map_conf->id);
map_conf->offset_addr = sdrv_xspi_slv_get_region_map_addr(slave->base, map_conf->id);
map_conf->begin_addr = sdrv_xspi_slv_get_region_map_begin_addr(slave->base, map_conf->id);
map_conf->end_addr = sdrv_xspi_slv_get_region_map_end_addr(slave->base, map_conf->id);
case XSPI_SLV_FLAG_RD_MON:
mon_conf = buf;
mon_conf->addr_en = sdrv_xspi_slv_get_read_ctrl_addr_en(slave->base);
mon_conf->addr_en = sdrv_xspi_slv_get_read_mon_perm_addr_en(slave->base, mon_conf->id);
mon_conf->begin_addr = sdrv_xspi_slv_get_r_mon_begin_addr(slave->base, mon_conf->id);
mon_conf->end_addr = sdrv_xspi_slv_get_r_mon_end_addr(slave->base, mon_conf->id);
mon_conf->addr_lock = sdrv_xspi_slv_get_read_mon_perm_addr_lock(slave->base, mon_conf->id);
break;
case XSPI_SLV_FLAG_WR_MON:
mon_conf = buf;
mon_conf->addr_en = sdrv_xspi_slv_get_write_ctrl_addr_en(slave->base);
mon_conf->addr_en = sdrv_xspi_slv_get_write_mon_perm_addr_en(slave->base, mon_conf->id);
mon_conf->begin_addr = sdrv_xspi_slv_get_w_mon_begin_addr(slave->base, mon_conf->id);
mon_conf->end_addr = sdrv_xspi_slv_get_w_mon_end_addr(slave->base, mon_conf->id);
mon_conf->addr_lock = sdrv_xspi_slv_get_write_mon_perm_addr_lock(slave->base, mon_conf->id);
break;
default:
ssdk_printf(SSDK_EMERG, "set flag error: %d\r\n", flag);
return SSDRV_STATUS_GROUP_XSPI_SLAVER_SET_FLAG_ATTR_ERR;
}
return SDRV_STATUS_OK;
}
status_t sdrv_xspi_slv_deinit(struct sdrv_xspi_slv *slave)
{
ASSERT(slave);
return SDRV_STATUS_OK;
}