mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
647dea9395
During HAL layer refactoring and new chip bringup, we have several caps.h for each part, to reduce the conflicts to minimum. But this is The capabilities headers will be relataive stable once completely written (maybe after the featues are supported by drivers). Now ESP32 and ESP32-S2 drivers are relative stable, making it a good time to combine all these caps.h into one soc_caps.h This cleanup also move HAL config and pin config into separated files, to make the responsibilities of these headers more clear. This is helpful for the stabilities of soc_caps.h because we want to make it public some day.
88 lines
2.9 KiB
C
88 lines
2.9 KiB
C
// Copyright 2019 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
#include <stdbool.h>
|
|
#include <assert.h>
|
|
#include "string.h"
|
|
#include "sdkconfig.h"
|
|
#include "esp_err.h"
|
|
#include "esp_log.h"
|
|
#include "esp32s2/rom/spi_flash.h"
|
|
#include "soc/efuse_reg.h"
|
|
#include "soc/spi_reg.h"
|
|
#include "soc/spi_mem_reg.h"
|
|
#include "soc/soc_caps.h"
|
|
#include "flash_qio_mode.h"
|
|
#include "bootloader_flash_config.h"
|
|
#include "bootloader_common.h"
|
|
|
|
#define FLASH_IO_MATRIX_DUMMY_40M 0
|
|
#define FLASH_IO_MATRIX_DUMMY_80M 0
|
|
|
|
#define FLASH_IO_DRIVE_GD_WITH_1V8PSRAM 3
|
|
|
|
void bootloader_flash_update_id()
|
|
{
|
|
g_rom_flashchip.device_id = bootloader_read_flash_id();
|
|
}
|
|
|
|
void bootloader_flash_update_size(uint32_t size)
|
|
{
|
|
g_rom_flashchip.chip_size = size;
|
|
}
|
|
|
|
void IRAM_ATTR bootloader_flash_cs_timing_config()
|
|
{
|
|
SET_PERI_REG_MASK(SPI_MEM_USER_REG(0), SPI_MEM_CS_HOLD_M | SPI_MEM_CS_SETUP_M);
|
|
SET_PERI_REG_BITS(SPI_MEM_CTRL2_REG(0), SPI_MEM_CS_HOLD_TIME_V, 0, SPI_MEM_CS_HOLD_TIME_S);
|
|
SET_PERI_REG_BITS(SPI_MEM_CTRL2_REG(0), SPI_MEM_CS_SETUP_TIME_V, 0, SPI_MEM_CS_SETUP_TIME_S);
|
|
SET_PERI_REG_MASK(SPI_MEM_USER_REG(1), SPI_MEM_CS_HOLD_M | SPI_MEM_CS_SETUP_M);
|
|
SET_PERI_REG_BITS(SPI_MEM_CTRL2_REG(1), SPI_MEM_CS_HOLD_TIME_V, 1, SPI_MEM_CS_HOLD_TIME_S);
|
|
SET_PERI_REG_BITS(SPI_MEM_CTRL2_REG(1), SPI_MEM_CS_SETUP_TIME_V, 0, SPI_MEM_CS_SETUP_TIME_S);
|
|
}
|
|
|
|
void IRAM_ATTR bootloader_flash_clock_config(const esp_image_header_t* pfhdr)
|
|
{
|
|
uint32_t spi_clk_div = 0;
|
|
switch (pfhdr->spi_speed) {
|
|
case ESP_IMAGE_SPI_SPEED_80M:
|
|
spi_clk_div = 1;
|
|
break;
|
|
case ESP_IMAGE_SPI_SPEED_40M:
|
|
spi_clk_div = 2;
|
|
break;
|
|
case ESP_IMAGE_SPI_SPEED_26M:
|
|
spi_clk_div = 3;
|
|
break;
|
|
case ESP_IMAGE_SPI_SPEED_20M:
|
|
spi_clk_div = 4;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
esp_rom_spiflash_config_clk(spi_clk_div, 0);
|
|
esp_rom_spiflash_config_clk(spi_clk_div, 1);
|
|
}
|
|
|
|
void IRAM_ATTR bootloader_flash_set_dummy_out(void)
|
|
{
|
|
REG_SET_BIT(SPI_MEM_CTRL_REG(0), SPI_MEM_FDUMMY_OUT | SPI_MEM_D_POL | SPI_MEM_Q_POL);
|
|
REG_SET_BIT(SPI_MEM_CTRL_REG(1), SPI_MEM_FDUMMY_OUT | SPI_MEM_D_POL | SPI_MEM_Q_POL);
|
|
}
|
|
|
|
void IRAM_ATTR bootloader_flash_dummy_config(const esp_image_header_t* pfhdr)
|
|
{
|
|
bootloader_configure_spi_pins(1);
|
|
bootloader_flash_set_dummy_out();
|
|
}
|