ci(c2/c3): add major eco version tests(v5.2)

This commit is contained in:
luaijun
2025-03-19 20:16:21 +08:00
parent 34a92965d0
commit a4401e5256
29 changed files with 459 additions and 16 deletions

View File

@ -328,6 +328,15 @@ pytest_examples_esp32c3_wifi_ap:
artifacts: false
tags: [ esp32c3, wifi_ap ]
pytest_examples_esp32c3eco7_wifi_ap:
extends:
- .pytest_examples_dir_template
- .rules:test:example_test-esp32c3-wifi
needs:
- job: build_pytest_examples_esp32c3
artifacts: false
tags: [ esp32c3eco7, wifi_ap ,esp32c3]
pytest_examples_esp32s3_wifi_ap:
extends:
- .pytest_examples_dir_template
@ -364,6 +373,15 @@ pytest_examples_esp32c2_26m_wifi_ap:
artifacts: false
tags: [ esp32c2, wifi_ap, xtal_26mhz ]
pytest_examples_esp32c2eco4_26m_wifi_ap:
extends:
- .pytest_examples_dir_template
- .rules:test:example_test-esp32c2-wifi
needs:
- job: build_pytest_examples_esp32c2
artifacts: false
tags: [ esp32c2eco4, wifi_ap, xtal_26mhz ,esp32c2 ]
pytest_examples_esp32c6_wifi_ap:
extends:
- .pytest_examples_dir_template
@ -519,6 +537,15 @@ pytest_examples_esp32c3_wifi_two_dut:
artifacts: false
tags: [ esp32c3, wifi_two_dut ]
pytest_examples_esp32c3eco7_wifi_two_dut:
extends:
- .pytest_examples_dir_template
- .rules:test:example_test-esp32c3-wifi
needs:
- job: build_pytest_examples_esp32c3
artifacts: false
tags: [ esp32c3eco7, wifi_two_dut, esp32c3 ]
pytest_examples_esp32s3_wifi_two_dut:
extends:
- .pytest_examples_dir_template
@ -537,6 +564,15 @@ pytest_examples_esp32c2_wifi_two_dut:
artifacts: false
tags: [ esp32c2, wifi_two_dut, xtal_26mhz ]
pytest_examples_esp32c2eco4_wifi_two_dut:
extends:
- .pytest_examples_dir_template
- .rules:test:example_test-esp32c2-wifi
needs:
- job: build_pytest_examples_esp32c2
artifacts: false
tags: [ esp32c2eco4, wifi_two_dut, xtal_26mhz , esp32c2]
pytest_examples_esp32c3_flash_encryption:
extends:
- .pytest_examples_dir_template
@ -1455,6 +1491,15 @@ pytest_test_apps_esp32c2_generic:
artifacts: false
tags: [ esp32c2, generic, xtal_40mhz ]
pytest_test_apps_esp32c2eco4_generic:
extends:
- .pytest_test_apps_dir_template
- .rules:test:custom_test-esp32c2
needs:
- job: build_pytest_test_apps_esp32c2
artifacts: false
tags: [ esp32c2eco4, generic, xtal_26mhz , esp32c2]
pytest_test_apps_esp32c3_generic:
extends:
- .pytest_test_apps_dir_template
@ -1464,6 +1509,15 @@ pytest_test_apps_esp32c3_generic:
artifacts: false
tags: [ esp32c3, generic ]
pytest_test_apps_esp32c3eco7_generic:
extends:
- .pytest_test_apps_dir_template
- .rules:test:custom_test-esp32c3
needs:
- job: build_pytest_test_apps_esp32c3
artifacts: false
tags: [ esp32c3eco7, generic , esp32c3]
pytest_test_apps_esp32c6_generic:
extends:
- .pytest_test_apps_dir_template
@ -1544,3 +1598,21 @@ pytest_test_apps_esp32c3_wifi_two_dut:
- job: build_pytest_test_apps_esp32c3
artifacts: false
tags: [ esp32c3, wifi_two_dut]
pytest_test_apps_esp32c2eco4_wifi_two_dut:
extends:
- .pytest_test_apps_dir_template
- .rules:test:custom_test-esp32c2-wifi
needs:
- job: build_pytest_test_apps_esp32c2
artifacts: false
tags: [ esp32c2eco4, wifi_two_dut, xtal_26mhz, esp32c2 ]
pytest_test_apps_esp32c3eco7_wifi_two_dut:
extends:
- .pytest_test_apps_dir_template
- .rules:test:custom_test-esp32c3-wifi
needs:
- job: build_pytest_test_apps_esp32c3
artifacts: false
tags: [ esp32c3eco7, wifi_two_dut, esp32c3]

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0
import pytest
from pytest_embedded_idf.unity_tester import CaseTester
@ -26,3 +25,32 @@ def test_wifi_connect_cases(case_tester: CaseTester) -> None: # type: ignore
)
def test_wifi_connect_cases_esp32c2_xtal26m(case_tester: CaseTester) -> None:
case_tester.run_all_cases()
@pytest.mark.esp32c2
@pytest.mark.esp32c2eco4
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, config, baud',
[
(2, 'esp32c2eco4_xtal26m', '74880'),
],
indirect=True,
)
def test_wifi_connect_cases_esp32c2eco4_xtal26m(case_tester: CaseTester) -> None:
case_tester.run_all_cases()
@pytest.mark.esp32c3
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c3eco7
@pytest.mark.parametrize(
'count, config',
[
(2, 'esp32c3eco7',),
],
indirect=True,
)
def test_wifi_connect_cases_esp32c3eco7(case_tester: CaseTester) -> None:
case_tester.run_all_cases()

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -0,0 +1,2 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0
import pytest
from pytest_embedded import Dut
@ -27,3 +26,32 @@ def test_wifi_unit_test(dut: Dut) -> None:
)
def test_wifi_connect_cases_esp32c2_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases()
@pytest.mark.esp32c2
@pytest.mark.esp32c2eco4
@pytest.mark.xtal_26mhz
@pytest.mark.generic
@pytest.mark.parametrize(
'config, target, baud',
[
('esp32c2eco4_xtal26m', 'esp32c2', '74880'),
],
indirect=True,
)
def test_wifi_unit_test_esp32c2eco4_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases()
@pytest.mark.esp32c3
@pytest.mark.esp32c3eco7
@pytest.mark.generic
@pytest.mark.parametrize(
'config, target',
[
('esp32c3eco7','esp32c3')
],
indirect=True,
)
def test_wifi_unit_test_esp32c3eco7(dut: Dut) -> None:
dut.run_all_single_board_cases()

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -0,0 +1,2 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import pytest
from pytest_embedded import Dut
from pytest_embedded_idf.unity_tester import CaseTester
@ -30,3 +29,43 @@ def test_wpa_supplicant_ut_offchan(case_tester: CaseTester) -> None:
for case in case_tester.test_menu:
if case.attributes.get('test_env') == 'wifi_two_dut':
case_tester.run_multi_dev_case(case=case, reset=True)
@pytest.mark.esp32c2
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c2eco4
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, config, baud',
[
(
2,
'esp32c2eco4_xtal26m',
'74880',
),
],
indirect=True,
)
def test_wpa_supplicant_esp32c2eco4_xtal26mhz(case_tester: CaseTester) -> None:
for case in case_tester.test_menu:
if case.attributes.get('test_env') == 'wifi_two_dut':
case_tester.run_multi_dev_case(case=case, reset=True)
@pytest.mark.esp32c3
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c3eco7
@pytest.mark.parametrize(
'count, config,',
[
(
2,
'esp32c3eco7',
),
],
indirect=True,
)
def test_wpa_supplicant_esp32c3eco7(case_tester: CaseTester) -> None:
for case in case_tester.test_menu:
if case.attributes.get('test_env') == 'wifi_two_dut':
case_tester.run_multi_dev_case(case=case, reset=True)

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -0,0 +1,2 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y

View File

@ -2,4 +2,4 @@ CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
CONFIG_ESP_WIFI_TESTING_OPTIONS=y
CONFIG_ESP_WIFI_DPP_SUPPORT=y
CONFIG_WPA3_SAE=y
CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y

View File

@ -1,4 +1,5 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_EXAMPLE_USE_CI_ADDRESS=y
CONFIG_EXAMPLE_PEER_ADDR="${CI_PIPELINE_ID}"

View File

@ -0,0 +1,6 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y
CONFIG_EXAMPLE_USE_CI_ADDRESS=y
CONFIG_EXAMPLE_PEER_ADDR="${CI_PIPELINE_ID}"

View File

@ -0,0 +1,12 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y
#
# BT config
#
CONFIG_BT_ENABLED=y
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=n
CONFIG_BTDM_CTRL_MODE_BTDM=n
CONFIG_BT_BLUEDROID_ENABLED=n
CONFIG_BT_NIMBLE_ENABLED=y

View File

@ -0,0 +1,7 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y
CONFIG_EXAMPLE_USE_CI_ADDRESS=y
CONFIG_EXAMPLE_CI_ADDRESS_OFFSET="${CI_PIPELINE_ID}"

View File

@ -0,0 +1,14 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y
# MODEM SLEEP Options
CONFIG_BT_CTRL_MODEM_SLEEP=y
CONFIG_BT_CTRL_MODEM_SLEEP_MODE_1=y
# Bluetooth low power clock
CONFIG_BT_CTRL_LPCLK_SEL_MAIN_XTAL=y
# Power up main XTAL during light sleep
CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP=y
# Enable power down of MAC and baseband in light sleep mode
CONFIG_ESP_PHY_MAC_BB_PD=y

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import os.path
from typing import Tuple
@ -61,3 +60,63 @@ def test_power_save_conn_esp32c2_26mhz(dut: Tuple[IdfDut, IdfDut]) -> None:
peripheral.expect('connection established; status=0', timeout=30)
output = peripheral.expect(pexpect.TIMEOUT, timeout=30)
assert 'rst:' not in str(output) and 'boot:' not in str(output)
# Case 2: BLE power save test for ESP32C2ECO4
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.esp32c2
@pytest.mark.esp32c2eco4
@pytest.mark.parametrize(
'config, count, app_path, baud',
[
(
'esp32c2eco4_xtal26m',
2,
f'{os.path.join(os.path.dirname(__file__), "power_save")}|{os.path.join(os.path.dirname(__file__), "blecent")}',
'74880',
),
],
indirect=True,
)
def test_power_save_conn_esp32c2eco4(dut: Tuple[IdfDut, IdfDut]) -> None:
peripheral = dut[0]
central = dut[1]
peripheral.expect('NimBLE_BLE_PRPH: BLE Host Task Started', timeout=5)
central.expect('NimBLE_BLE_CENT: BLE Host Task Started', timeout=5)
peripheral.expect('Returned from app_main()', timeout=5)
central.expect('Returned from app_main()', timeout=5)
central.expect('Connection established', timeout=30)
peripheral.expect('connection established; status=0', timeout=30)
output = peripheral.expect(pexpect.TIMEOUT, timeout=30)
assert 'rst:' not in str(output) and 'boot:' not in str(output)
# Case 2: BLE power save test for ESP32C3ECO7
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c3
@pytest.mark.esp32c3eco7
@pytest.mark.parametrize(
'config, count, app_path',
[
(
'esp32c3eco7',
2,
f'{os.path.join(os.path.dirname(__file__), "power_save")}|{os.path.join(os.path.dirname(__file__), "blecent")}',
),
],
indirect=True,
)
def test_power_save_conn_esp32c3eco7(dut: Tuple[IdfDut, IdfDut]) -> None:
peripheral = dut[0]
central = dut[1]
peripheral.expect('NimBLE_BLE_PRPH: BLE Host Task Started', timeout=5)
central.expect('NimBLE_BLE_CENT: BLE Host Task Started', timeout=5)
peripheral.expect('Returned from app_main()', timeout=5)
central.expect('Returned from app_main()', timeout=5)
central.expect('Connection established', timeout=30)
peripheral.expect('connection established; status=0', timeout=30)
output = peripheral.expect(pexpect.TIMEOUT, timeout=30)
assert 'rst:' not in str(output) and 'boot:' not in str(output)

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import os.path
from typing import Tuple
@ -69,3 +68,65 @@ def test_wifi_getting_started_esp32c2_xtal_26mhz(dut: Tuple[IdfDut, IdfDut]) ->
station.expect(f'{tag}: got ip:', timeout=60)
station.expect(f'{tag}: connected to ap SSID:{ssid} password:{password}', timeout=60)
softap.expect('station .+ join, AID=', timeout=60)
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.esp32c2eco4
@pytest.mark.esp32c2
@pytest.mark.parametrize(
'count, config, baud, app_path',
[
(
2,
'esp32c2eco4_xtal26m',
'74880',
f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}',
),
],
indirect=True,
)
def test_wifi_getting_started_esp32c2eco4_xtal_26mhz(dut: Tuple[IdfDut, IdfDut]) -> None:
softap = dut[0]
station = dut[1]
assert station.app.sdkconfig['ESP_WIFI_SOFTAP_SUPPORT'] is False
ssid = softap.app.sdkconfig.get('ESP_WIFI_SSID')
password = softap.app.sdkconfig.get('ESP_WIFI_PASSWORD')
assert station.app.sdkconfig.get('ESP_WIFI_SSID') == ssid
assert station.app.sdkconfig.get('ESP_WIFI_PASSWORD') == password
tag = 'wifi station'
station.expect(f'{tag}: got ip:', timeout=60)
station.expect(f'{tag}: connected to ap SSID:{ssid} password:{password}', timeout=60)
softap.expect('station .+ join, AID=', timeout=60)
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c3eco7
@pytest.mark.esp32c3
@pytest.mark.parametrize(
'count, config, app_path',
[
(
2,
'esp32c3eco7',
f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}',
),
],
indirect=True,
)
def test_wifi_getting_started_esp32c3eco7(dut: Tuple[IdfDut, IdfDut]) -> None:
softap = dut[0]
station = dut[1]
assert station.app.sdkconfig['ESP_WIFI_SOFTAP_SUPPORT'] is False
ssid = softap.app.sdkconfig.get('ESP_WIFI_SSID')
password = softap.app.sdkconfig.get('ESP_WIFI_PASSWORD')
assert station.app.sdkconfig.get('ESP_WIFI_SSID') == ssid
assert station.app.sdkconfig.get('ESP_WIFI_PASSWORD') == password
tag = 'wifi station'
station.expect(f'{tag}: got ip:', timeout=60)
station.expect(f'{tag}: connected to ap SSID:{ssid} password:{password}', timeout=60)
softap.expect('station .+ join, AID=', timeout=60)

View File

@ -0,0 +1,2 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -0,0 +1,2 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import logging
import pexpect
@ -75,3 +74,32 @@ def test_wifi_power_save_pd_top(dut: Dut) -> None:
)
def test_wifi_power_save_esp32c2_26mhz(dut: Dut) -> None:
_run_test(dut)
@pytest.mark.wifi_ap
@pytest.mark.xtal_26mhz
@pytest.mark.esp32c2
@pytest.mark.esp32c2eco4
@pytest.mark.parametrize(
'config, baud',
[
('c2eco4_xtal26m', '74880',),
],
indirect=True,
)
def test_wifi_power_save_esp32c2eco4_26mhz(dut: Dut) -> None:
_run_test(dut)
@pytest.mark.wifi_ap
@pytest.mark.esp32c3
@pytest.mark.esp32c3eco7
@pytest.mark.parametrize(
'config',
[
('c3eco7',)
],
indirect=True,
)
def test_wifi_power_save_esp32c3eco7(dut: Dut) -> None:
_run_test(dut)

View File

@ -0,0 +1,4 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_XTAL_FREQ_26=y
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
CONFIG_ESP32C2_REV_MIN_200=y

View File

@ -0,0 +1,3 @@
CONFIG_IDF_TARGET="esp32c3"
CONFIG_ESP32C3_REV_MIN_101=y
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y

View File

@ -42,3 +42,4 @@ tools/ci/get_known_failure_cases_file.py
tools/unit-test-app/**/*
tools/bt/bt_hci_to_btsnoop.py
tools/bt/README.md
tools/ci/dynamic_pipelines/templates/known_generate_test_child_pipeline_warnings.yml

View File

@ -105,7 +105,9 @@ ENV_MARKERS = {
'generic_multi_device': 'generic multiple devices whose corresponding gpio pins are connected to each other.',
'twai_network': 'multiple runners form a TWAI network.',
'sdio_master_slave': 'Test sdio multi board.',
'usj_device': 'Test usb_serial_jtag and usb_serial_jtag is used as serial only (not console)'
'usj_device': 'Test usb_serial_jtag and usb_serial_jtag is used as serial only (not console)',
'esp32c3eco7': 'esp32c3 major version(v1.1) chips',
'esp32c2eco4': 'esp32c2 major version(v2.0) chips',
}

View File

@ -1,6 +1,5 @@
# SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import random
import string
from typing import Tuple
@ -190,3 +189,56 @@ def test_phy_tsens_coexist_c2_xtal26m(dut: Tuple[Dut, Dut]) -> None:
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_with_light_sleep(dut)
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.esp32c2
@pytest.mark.esp32c2eco4
@pytest.mark.parametrize(
'count, config, baud',
[
(2, 'c2_eco4', '74880'),
],
indirect=True,
)
def test_phy_tsens_coexist_c2eco4_xtal26m(dut: Tuple[Dut, Dut]) -> None:
for _dut in dut:
_dut.expect('esp>')
run_phy_tsens_test(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_init_wifi_first(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_with_light_sleep(dut)
@pytest.mark.wifi_two_dut
@pytest.mark.esp32c3eco7
@pytest.mark.esp32c3
@pytest.mark.parametrize(
'count, config,',
[
(2, 'c3_eco7',),
],
indirect=True,
)
def test_phy_tsens_coexist_c3eco7(dut: Tuple[Dut, Dut]) -> None:
for _dut in dut:
_dut.expect('esp>')
run_phy_tsens_test(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_init_wifi_first(dut)
for _dut in dut:
_dut.write('restart')
_dut.expect('boot:')
_dut.expect('esp>')
run_phy_tsens_test_with_light_sleep(dut)

View File

@ -1,2 +1,3 @@
CONFIG_IDF_TARGET="esp32c2"
CONFIG_ESP32C2_REV_MIN_200=y
CONFIG_XTAL_FREQ_26=y