| /* |
| * Copyright (c) 2018 Synopsys, Inc. All rights reserved. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| |
| #ifndef _ARC_IOT_SYSCONF_H_ |
| #define _ARC_IOT_SYSCONF_H_ |
| |
| #include <stdint.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef struct sysconf_reg { |
| volatile uint32_t reserved1; /* 0x0 */ |
| volatile uint32_t AHBCLKDIV; /* AHB clock divisor */ |
| volatile uint32_t APBCLKDIV; /* APB clock divisor */ |
| volatile uint32_t APBCLKEN; /* APB module clock enable */ |
| volatile uint32_t CLKODIV; /* AHB clock output enable and divisor set */ |
| volatile uint32_t reserved2; /* 0x14 */ |
| volatile uint32_t RSTCON; /* reset contrl */ |
| volatile uint32_t RSTSTAT; /* reset status */ |
| volatile uint32_t AHBCLKDIV_SEL; /* AHB clock divisor select */ |
| volatile uint32_t CLKSEL; /* main clock source select */ |
| volatile uint32_t PLLSTAT; /* PLL status register */ |
| volatile uint32_t PLLCON; /* PLL control register */ |
| volatile uint32_t reserved3; /* 0x30 */ |
| volatile uint32_t AHBCLKEN; /* AHB module clock enable */ |
| volatile uint32_t reserved4[2]; /* 0x38, 0x3c */ |
| volatile uint32_t I2S_TX_SCLKDIV; /* I2S TX SCLK divisor */ |
| volatile uint32_t I2S_RX_SCLKDIV; /* I2S RX SCLK divisor */ |
| volatile uint32_t I2S_RX_SCLKSEL; /* I2S RX SCLK source select */ |
| volatile uint32_t SDIO_REFCLK_DIV; /* SDIO reference clock divisor */ |
| volatile uint32_t GPIO4B_DBCLK_DIV; /* GPIO4B DBCLK divisor */ |
| volatile uint32_t IMAGE_CHK; /* Image pad status */ |
| volatile uint32_t PROT_RANGE; /* PROT range */ |
| volatile uint32_t SPI_MST_CLKDIV; /* SPI master clock divisor */ |
| volatile uint32_t DVFS_CLKDIV; /* DFSS main clock domain divider */ |
| volatile uint32_t DVFS_VDDSET; /* VDD setting */ |
| volatile uint32_t DVFS_VWTIME; /* VDD adjust waiting time */ |
| volatile uint32_t PMC_PUWTIME; /* power up waiting time */ |
| volatile uint32_t PMOD_MUX; /* PMOD IO mux */ |
| volatile uint32_t ARDUINO_MUX; /* arduino IO mux */ |
| volatile uint32_t USBPHY_PLL; /* USBPHY PLL */ |
| volatile uint32_t USBCFG; /* USB configuration */ |
| volatile uint32_t TIMER_PAUSE; /* PWM timer pause */ |
| volatile uint32_t GPIO8B_DBCLK_DIV; /* GPIO8B DBCLK divisor */ |
| volatile uint32_t RESET_PD_VECTOR; /* reset powerdown vector */ |
| volatile uint32_t UART3SCLK_DIV; /* UART3SCLK_DIV */ |
| } sysconf_reg_t; |
| |
| /* CLKSEL_CONST is not described in spec. */ |
| #define CLKSEL_CONST (0x5A690000) |
| #define CLKSEL_EXT_16M (0 | CLKSEL_CONST) |
| #define CLKSEL_PLL (1 | CLKSEL_CONST) |
| #define CLKSEL_EXT_32K (2 | CLKSEL_CONST) |
| |
| #define PLLCON_BIT_OFFSET_N 0 |
| #define PLLCON_BIT_OFFSET_M 4 |
| #define PLLCON_BIT_OFFSET_OD 20 |
| #define PLLCON_BIT_OFFSET_BP 24 |
| #define PLLCON_BIT_OFFSET_PLLRST 26 |
| |
| |
| #define PLLSTAT_BIT_OFFSET_PLLSTB 2 |
| #define PLLSTAT_BIT_OFFSET_PLLRDY 3 |
| |
| |
| #define AHBCLKEN_BIT_I2S 0 |
| #define AHBCLKEN_BIT_USB 1 |
| #define AHBCLKEN_BIT_FLASH 2 |
| #define AHBCLKEN_BIT_FMC 3 |
| #define AHBCLKEN_BIT_DVFS 4 |
| #define AHBCLKEN_BIT_PMC 5 |
| #define AHBCLKEN_BIT_BOOT_SPI 6 |
| #define AHBCLKEN_BIT_SDIO 7 |
| |
| #define APBCLKEN_BIT_ADC 0 |
| #define APBCLKEN_BIT_I2S_TX 1 |
| #define APBCLKEN_BIT_I2S_RX 2 |
| #define APBCLKEN_BIT_RTC 3 |
| #define APBCLKEN_BIT_PWM 4 |
| #define APBCLKEN_BIT_I3C 5 |
| |
| |
| #define SPI_MASTER_0 0 |
| #define SPI_MASTER_1 1 |
| #define SPI_MASTER_2 2 |
| |
| #define GPIO8B_BANK0 0 |
| #define GPIO8B_BANK1 1 |
| #define GPIO8B_BANK2 2 |
| #define GPIO8B_BANK3 3 |
| |
| #define GPIO4B_BANK0 0 |
| #define GPIO4B_BANK1 1 |
| #define GPIO4B_BANK2 2 |
| |
| /* reset caused by power on */ |
| #define SYS_RST_SOFTWARE_ON 0x2 |
| |
| |
| #define DVFS_PERF_LEVEL0 0 |
| #define DVFS_PERF_LEVEL1 1 |
| #define DVFS_PERF_LEVEL2 2 |
| #define DVFS_PERF_LEVEL3 3 |
| |
| /* pmode mux definition */ |
| #define PMOD_MUX_PMA (0x1) |
| #define PMOD_MUX_PMB (0x2) |
| #define PMOD_MUX_PMC (0x4) |
| |
| /* arduino mux definition */ |
| #define ARDUINO_MUX_UART (0x1) |
| #define ARDUINO_MUX_SPI (0x2) |
| #define ARDUINO_MUX_PWM0 (0x4) |
| #define ARDUINO_MUX_PWM1 (0x8) |
| #define ARDUINO_MUX_PWM2 (0x10) |
| #define ARDUINO_MUX_PWM3 (0x20) |
| #define ARDUINO_MUX_PWM4 (0x40) |
| #define ARDUINO_MUX_PWM5 (0x80) |
| #define ARDUINO_MUX_I2C (0x100) |
| #define ARDUINO_MUX_ADC0 (0x400) |
| #define ARDUINO_MUX_ADC1 (0x800) |
| #define ARDUINO_MUX_ADC2 (0x1000) |
| #define ARDUINO_MUX_ADC3 (0x2000) |
| #define ARDUINO_MUX_ADC4 (0x4000) |
| #define ARDUINO_MUX_ADC5 (0x8000) |
| |
| #define PWM_TIMER0 0 |
| #define PWM_TIMER1 1 |
| #define PWM_TIMER2 2 |
| #define PWM_TIMER3 3 |
| #define PWM_TIMER4 4 |
| #define PWM_TIMER5 5 |
| |
| |
| extern void arc_iot_pll_conf_reg(uint32_t val); |
| extern int32_t arc_iot_pll_fout_config(uint32_t freq); |
| extern void arc_iot_ahb_clk_divisor(uint8_t div); |
| extern void arc_iot_ahb_clk_enable(uint8_t dev); |
| extern void arc_iot_ahb_clk_disable(uint8_t dev); |
| extern void arc_iot_sdio_clk_divisor(uint8_t div); |
| extern void arc_iot_spi_master_clk_divisor(uint8_t id, uint8_t div); |
| extern void arc_iot_gpio8b_dbclk_div(uint8_t bank, uint8_t div); |
| extern void arc_iot_gpio4b_dbclk_div(uint8_t bank, uint8_t div); |
| extern void arc_iot_i2s_tx_clk_div(uint8_t div); |
| extern void arc_iot_i2s_rx_clk_div(uint8_t div); |
| extern void arc_iot_i2s_rx_clk_sel(uint8_t sel); |
| extern void arc_iot_syscon_reset(void); |
| extern uint32_t arc_iot_is_poweron_rst(void); |
| extern void arc_iot_dvfs_clk_divisor(uint8_t level, uint8_t div); |
| extern void arc_iot_dvfs_vdd_config(uint8_t level, uint8_t val); |
| extern void arc_iot_dvfs_vwtime_config(uint8_t time); |
| extern void arc_iot_pmc_pwwtime_config(uint8_t time); |
| extern void arc_iot_uart3_clk_divisor(uint8_t div); |
| extern void arc_iot_reset_powerdown_vector(uint32_t addr); |
| extern void arc_iot_eflash_clk_div(uint8_t div); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _ARC_IOT_SYSCONF_H_ */ |