aboutsummaryrefslogtreecommitdiff
path: root/product/synquacer/module/hsspi/src/hsspi_api.c
blob: e5a869e2e9b9ac366601109266fb70ec7e27058c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Arm SCP/MCP Software
 * Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "synquacer_mmap.h"

#include <internal/hsspi_api.h>
#include <internal/hsspi_driver.h>
#include <internal/reg_HSSPI.h>

#include <mod_synquacer_system.h>

#include <fwk_log.h>

#include <stdbool.h>

#define FILE_GRP_ID DBG_DRV_HSSPI
#define xcpb_bridge_mode_set(enable)

static const struct HSSPI_clk_config clk_config = CONFIG_SOC_HSSPI_CLK_CONFIG;

#define HSSPI_WINDOW_SIZE_INDEX_256MB (0xF)
#define HSSPI_WINDOW_SIZE_INDEX_128MB (0xE)
#define HSSPI_WINDOW_SIZE_INDEX_64MB (0xD)
#define HSSPI_WINDOW_SIZE_INDEX_32MB (0xC)
#define HSSPI_WINDOW_SIZE_INDEX_16MB (0xB)
#define HSSPI_WINDOW_SIZE_INDEX_8MB (0xA)
#define HSSPI_WINDOW_SIZE_INDEX_4MB (0x9)
#define HSSPI_WINDOW_SIZE_INDEX_2MB (0x8)

#define CONFIG_SCB_FORCE_HSSPI_RESOURCE_ALLOCATION_MODEL \
    HSSPI_WINDOW_SIZE_INDEX_256MB

void HSSPI_init(void)
{
    int model_index;

    xcpb_bridge_mode_set(true);

    model_index = CONFIG_SCB_FORCE_HSSPI_RESOURCE_ALLOCATION_MODEL;

    FWK_LOG_INFO(
        "[HS-SPI] Configuring HS-SPI controller with "
        "clk_sel=%d clk_div=%d syncon=%d use_hsspi_cs1_flag=%d msel=%d",
        clk_config.clk_sel,
        clk_config.clk_div,
        clk_config.syncon,
        false,
        model_index);

    /* Initialize HS-SPI controller and external serial flash memory */
    hsspi_command_switch(
        (volatile REG_ST_HSSPI_t *)HSSPI_REG_BASE,
        (volatile void *)HSSPI_MEM_BASE,
        (volatile void *)CONFIG_SOC_REG_ADDR_BOOT_CTL_TOP,
        clk_config.clk_sel,
        clk_config.clk_div,
        clk_config.syncon,
        0, /* use_hsspi_cs1_flag disable*/
        (HSSPI_EN_CSCFG_MSEL_t)model_index);

    xcpb_bridge_mode_set(false);
}

void HSSPI_exit(void)
{
    int model_index;

    xcpb_bridge_mode_set(true);

    model_index = CONFIG_SCB_FORCE_HSSPI_RESOURCE_ALLOCATION_MODEL;

    /* Initialize HS-SPI controller and external serial flash memory */
    hsspi_exit(
        (volatile REG_ST_HSSPI_t *)HSSPI_REG_BASE,
        (volatile void *)HSSPI_MEM_BASE,
        (volatile void *)CONFIG_SOC_REG_ADDR_BOOT_CTL_TOP,
        clk_config.clk_sel,
        clk_config.clk_div,
        clk_config.syncon,
        0, /* use_hsspi_cs1_flag disable*/
        (HSSPI_EN_CSCFG_MSEL_t)model_index);
}