From 3de6c05f6356250348ec9a9e2ff3dab63b517413 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:37:34 +0300 Subject: [PATCH 01/50] soc: riscv: telink_b91: new Telink B91 (TLSR9) SoC system A new RISC-V platform SoC for Telink B91 (TLSR9). Signed-off-by: Yuriy Vynnychek --- .../riscv-privilege/telink_b91/CMakeLists.txt | 15 +++ .../telink_b91/Kconfig.defconfig.series | 46 +++++++ .../riscv-privilege/telink_b91/Kconfig.series | 10 ++ .../riscv-privilege/telink_b91/Kconfig.soc | 33 +++++ .../riscv-privilege/telink_b91/linker.ld | 61 +++++++++ soc/riscv/riscv-privilege/telink_b91/soc.c | 126 ++++++++++++++++++ soc/riscv/riscv-privilege/telink_b91/soc.h | 17 +++ .../riscv-privilege/telink_b91/soc_context.h | 50 +++++++ .../riscv-privilege/telink_b91/soc_irq.S | 56 ++++++++ .../riscv-privilege/telink_b91/soc_offsets.h | 30 +++++ soc/riscv/riscv-privilege/telink_b91/start.S | 71 ++++++++++ 11 files changed, 515 insertions(+) create mode 100644 soc/riscv/riscv-privilege/telink_b91/CMakeLists.txt create mode 100644 soc/riscv/riscv-privilege/telink_b91/Kconfig.defconfig.series create mode 100644 soc/riscv/riscv-privilege/telink_b91/Kconfig.series create mode 100644 soc/riscv/riscv-privilege/telink_b91/Kconfig.soc create mode 100644 soc/riscv/riscv-privilege/telink_b91/linker.ld create mode 100644 soc/riscv/riscv-privilege/telink_b91/soc.c create mode 100644 soc/riscv/riscv-privilege/telink_b91/soc.h create mode 100644 soc/riscv/riscv-privilege/telink_b91/soc_context.h create mode 100644 soc/riscv/riscv-privilege/telink_b91/soc_irq.S create mode 100644 soc/riscv/riscv-privilege/telink_b91/soc_offsets.h create mode 100644 soc/riscv/riscv-privilege/telink_b91/start.S diff --git a/soc/riscv/riscv-privilege/telink_b91/CMakeLists.txt b/soc/riscv/riscv-privilege/telink_b91/CMakeLists.txt new file mode 100644 index 0000000000000..a116969d93d65 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +zephyr_sources( + start.S + soc_irq.S + soc.c +) + +# Force using BFD-LD +zephyr_ld_options(-fuse-ld=bfd) + +# Set compile options +zephyr_compile_options_ifdef(CONFIG_TELINK_B91_HWDSP -mext-dsp) +zephyr_compile_options(-mno-relax) diff --git a/soc/riscv/riscv-privilege/telink_b91/Kconfig.defconfig.series b/soc/riscv/riscv-privilege/telink_b91/Kconfig.defconfig.series new file mode 100644 index 0000000000000..7f2c12d6b480a --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/Kconfig.defconfig.series @@ -0,0 +1,46 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_RISCV_TELINK_B91 + +config SOC_SERIES + string + default "telink_b91" + +config SYS_CLOCK_HW_CYCLES_PER_SEC + int + default 32000 + +config RISCV_SOC_INTERRUPT_INIT + bool + default y + +config RISCV_HAS_CPU_IDLE + bool + default y + +config RISCV_HAS_PLIC + bool + default y + +config NUM_IRQS + int + default 64 + +config XIP + bool + default n + +config MAIN_STACK_SIZE + int + default 2048 + +config IDLE_STACK_SIZE + int + default 1536 + +config TEST_EXTRA_STACKSIZE + int + default 1024 + +endif # SOC_SERIES_RISCV_TELINK_B91 diff --git a/soc/riscv/riscv-privilege/telink_b91/Kconfig.series b/soc/riscv/riscv-privilege/telink_b91/Kconfig.series new file mode 100644 index 0000000000000..ba9aba0840e71 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/Kconfig.series @@ -0,0 +1,10 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_RISCV_TELINK_B91 + bool "Telink B91 SoC Implementation" + select RISCV + select SOC_FAMILY_RISCV_PRIVILEGE + select HAS_TELINK_DRIVERS + help + Enable support for Telink B91 SoC diff --git a/soc/riscv/riscv-privilege/telink_b91/Kconfig.soc b/soc/riscv/riscv-privilege/telink_b91/Kconfig.soc new file mode 100644 index 0000000000000..973bef47a1931 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/Kconfig.soc @@ -0,0 +1,33 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +choice +prompt "CPU Architecture of SoC" +depends on SOC_SERIES_RISCV_TELINK_B91 + +config B91_CPU_RISCV32 + bool "RISCV32 CPU Architecture" + +endchoice + +config TELINK_B91_HWDSP + bool "Support Hardware DSP" + select RISCV_SOC_CONTEXT_SAVE + depends on SOC_SERIES_RISCV_TELINK_B91 + +config TELINK_B91_PFT_ARCH + bool "Support performance throttling" + default y + select RISCV_SOC_CONTEXT_SAVE + depends on SOC_SERIES_RISCV_TELINK_B91 + +choice +prompt "Telink B91 SoC implementation" +depends on SOC_SERIES_RISCV_TELINK_B91 + +config SOC_RISCV_TELINK_B91 + bool "Telink B91 SoC implementation" + select ATOMIC_OPERATIONS_BUILTIN + select CPU_HAS_FPU + +endchoice diff --git a/soc/riscv/riscv-privilege/telink_b91/linker.ld b/soc/riscv/riscv-privilege/telink_b91/linker.ld new file mode 100644 index 0000000000000..03aecd466775f --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/linker.ld @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @brief Linker script for the Telink B91 SoC + */ + +#include +#include +#include + +MEMORY +{ + ROM_INIT (rx) : ORIGIN = DT_REG_ADDR(DT_CHOSEN(zephyr_flash)), LENGTH = DT_REG_SIZE(DT_CHOSEN(zephyr_flash)) + RAM_ILM (rwx) : ORIGIN = DT_REG_ADDR(DT_NODELABEL(ram_ilm)), LENGTH = DT_REG_SIZE(DT_NODELABEL(ram_ilm)) +} + +SECTIONS +{ + SECTION_PROLOGUE(vector,,) + { + . = ALIGN(4); + KEEP(*(.init.*)) + } GROUP_LINK_IN(ROM_INIT) +} + +#include + +SECTIONS +{ + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) + { + . = ALIGN(8); + PROVIDE (__global_pointer$ = __data_ram_start + 0x800); + } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + + SECTION_DATA_PROLOGUE(retention_data,,) + { + . = ALIGN(8); + *(.retention_data) + *(".retention_data.*") + + PROVIDE (_RETENTION_DATA_VMA_END = .); + PROVIDE (_RETENTION_DATA_VMA_START = ADDR(retention_data)); + PROVIDE (_RETENTION_DATA_LMA_START = LOADADDR(retention_data)); + } GROUP_DATA_LINK_IN(RAM_ILM, ROMABLE_REGION) + + SECTION_DATA_PROLOGUE(ram_code,,) + { + . = ALIGN(8); + *(.ram_code) + *(".ram_code.*") + + PROVIDE (_RAMCODE_VMA_END = .); + PROVIDE (_RAMCODE_VMA_START = ADDR(ram_code)); + PROVIDE (_RAMCODE_LMA_START = LOADADDR(ram_code)); + } GROUP_DATA_LINK_IN(RAM_ILM, ROMABLE_REGION) +} diff --git a/soc/riscv/riscv-privilege/telink_b91/soc.c b/soc/riscv/riscv-privilege/telink_b91/soc.c new file mode 100644 index 0000000000000..05735b68ee61b --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/soc.c @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "sys.h" +#include "clock.h" +#include + +/* Software reset defines */ +#define reg_reset REG_ADDR8(0x1401ef) +#define SOFT_RESET 0x20u + +/* List of supported CCLK fregencies */ +#define CLK_16MHZ 16000000u +#define CLK_24MHZ 24000000u +#define CLK_32MHZ 32000000u +#define CLK_48MHZ 48000000u +#define CLK_64MHZ 64000000u +#define CLK_96MHZ 96000000u + +/* Define 48 MHz and 96 MHz CCLK clock options (not present in HAL) */ +#define CCLK_64M_HCLK_32M_PCLK_16M clock_init(PLL_CLK_192M, \ + PAD_PLL_DIV, \ + PLL_DIV3_TO_CCLK, \ + CCLK_DIV2_TO_HCLK, \ + HCLK_DIV2_TO_PCLK, \ + PLL_DIV4_TO_MSPI_CLK) + +#define CCLK_96M_HCLK_48M_PCLK_24M clock_init(PLL_CLK_192M, \ + PAD_PLL_DIV, \ + PLL_DIV2_TO_CCLK, \ + CCLK_DIV2_TO_HCLK, \ + HCLK_DIV2_TO_PCLK, \ + PLL_DIV4_TO_MSPI_CLK) + +/* Power Mode value */ +#if DT_ENUM_IDX(DT_NODELABEL(power), power_mode) == 0 + #define POWER_MODE LDO_1P4_LDO_1P8 +#elif DT_ENUM_IDX(DT_NODELABEL(power), power_mode) == 1 + #define POWER_MODE DCDC_1P4_LDO_1P8 +#elif DT_ENUM_IDX(DT_NODELABEL(power), power_mode) == 2 + #define POWER_MODE DCDC_1P4_DCDC_1P8 +#else + #error "Wrong value for power-mode parameter" +#endif + +/* Vbat Type value */ +#if DT_ENUM_IDX(DT_NODELABEL(power), vbat_type) == 0 + #define VBAT_TYPE VBAT_MAX_VALUE_LESS_THAN_3V6 +#elif DT_ENUM_IDX(DT_NODELABEL(power), vbat_type) == 1 + #define VBAT_TYPE VBAT_MAX_VALUE_GREATER_THAN_3V6 +#else + #error "Wrong value for vbat-type parameter" +#endif + +/* Check System Clock value. */ +#if ((DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_16MHZ) && \ + (DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_24MHZ) && \ + (DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_32MHZ) && \ + (DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_48MHZ) && \ + (DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_64MHZ) && \ + (DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) != CLK_96MHZ)) + #error "Unsupported clock-frequency. Supported values: 16, 24, 32, 48, 64 and 96 MHz" +#endif + +/** + * @brief Perform basic initialization at boot. + * + * @return 0 + */ +static int soc_b91_init(const struct device *arg) +{ + unsigned int cclk = DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency); + + ARG_UNUSED(arg); + + /* system init */ + sys_init(POWER_MODE, VBAT_TYPE); + + /* clocks init: CCLK, HCLK, PCLK */ + switch (cclk) { + case CLK_16MHZ: + CCLK_16M_HCLK_16M_PCLK_16M; + break; + + case CLK_24MHZ: + CCLK_24M_HCLK_24M_PCLK_24M; + break; + + case CLK_32MHZ: + CCLK_32M_HCLK_32M_PCLK_16M; + break; + + case CLK_48MHZ: + CCLK_48M_HCLK_48M_PCLK_24M; + break; + + case CLK_64MHZ: + CCLK_64M_HCLK_32M_PCLK_16M; + break; + + case CLK_96MHZ: + CCLK_96M_HCLK_48M_PCLK_24M; + break; + } + + /* Init Machine Timer source clock: 32 KHz RC */ + clock_32k_init(CLK_32K_RC); + clock_cal_32k_rc(); + + return 0; +} + +/** + * @brief Reset the system. + */ +void sys_arch_reboot(int type) +{ + ARG_UNUSED(type); + + reg_reset = SOFT_RESET; +} + +SYS_INIT(soc_b91_init, PRE_KERNEL_1, 0); diff --git a/soc/riscv/riscv-privilege/telink_b91/soc.h b/soc/riscv/riscv-privilege/telink_b91/soc.h new file mode 100644 index 0000000000000..2f932c09d40ce --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/soc.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef RISCV_TELINK_B91_SOC_H +#define RISCV_TELINK_B91_SOC_H + +#include +#include + +/* Machine timer memory-mapped registers */ +#define RISCV_MTIME_BASE 0xE6000000 +#define RISCV_MTIMECMP_BASE 0xE6000008 + +#endif /* RISCV_TELINK_B91_SOC_H */ diff --git a/soc/riscv/riscv-privilege/telink_b91/soc_context.h b/soc/riscv/riscv-privilege/telink_b91/soc_context.h new file mode 100644 index 0000000000000..0f06686453988 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/soc_context.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SOC_RISCV_TELINK_B91_SOC_CONTEXT_H +#define SOC_RISCV_TELINK_B91_SOC_CONTEXT_H + +#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE + +/* Telink B91 specific registers. */ +#if defined(CONFIG_TELINK_B91_PFT_ARCH) && defined(__riscv_dsp) + #define SOC_ESF_MEMBERS \ + uint32_t mxstatus; \ + uint32_t ucode \ + + #define SOC_ESF_INIT \ + 0xdeadbaad, \ + 0xdeadbaad + + #define SOC_ESF_THREAD_INIT(soc_context) \ + (soc_context)->mxstatus = 0; \ + (soc_context)->ucode = 0 + +#elif defined(CONFIG_TELINK_B91_PFT_ARCH) + #define SOC_ESF_MEMBERS \ + uint32_t mxstatus + + #define SOC_ESF_INIT \ + 0xdeadbaad + + #define SOC_ESF_THREAD_INIT(soc_context) \ + (soc_context)->mxstatus = 0 + +#elif defined(__riscv_dsp) + + #define SOC_ESF_MEMBERS \ + uint32_t ucode + + #define SOC_ESF_INIT \ + 0xdeadbaad + + #define SOC_ESF_THREAD_INIT(soc_context) \ + (soc_context)->ucode = 0 +#endif + +#endif /* CONFIG_RISCV_SOC_CONTEXT_SAVE */ + +#endif /* SOC_RISCV_TELINK_B91_SOC_CONTEXT_H */ diff --git a/soc/riscv/riscv-privilege/telink_b91/soc_irq.S b/soc/riscv/riscv-privilege/telink_b91/soc_irq.S new file mode 100644 index 0000000000000..abc9015b66be0 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/soc_irq.S @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include + +#define NDS_MXSTATUS 0x7C4 + +/* Exports */ +#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE +GTEXT(__soc_save_context) +GTEXT(__soc_restore_context) +#endif + +#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE + +SECTION_FUNC(exception.other, __soc_save_context) + +#ifdef CONFIG_TELINK_B91_PFT_ARCH + csrr t0, NDS_MXSTATUS +#endif +#ifdef __riscv_dsp + csrr t1, ucode +#endif + +#ifdef CONFIG_TELINK_B91_PFT_ARCH + sw t0, __soc_esf_t_mxstatus_OFFSET(a0) +#endif +#ifdef __riscv_dsp + sw t1, __soc_esf_t_ucode_OFFSET(a0) +#endif + ret + +SECTION_FUNC(exception.other, __soc_restore_context) + +#ifdef CONFIG_TELINK_B91_PFT_ARCH + lw t0, __soc_esf_t_mxstatus_OFFSET(a0) +#endif +#ifdef __riscv_dsp + lw t1, __soc_esf_t_ucode_OFFSET(a0) +#endif + +#ifdef CONFIG_TELINK_B91_PFT_ARCH + csrw NDS_MXSTATUS, t0 +#endif +#ifdef __riscv_dsp + csrw ucode, t1 +#endif + ret + +#endif /* CONFIG_RISCV_SOC_CONTEXT_SAVE */ diff --git a/soc/riscv/riscv-privilege/telink_b91/soc_offsets.h b/soc/riscv/riscv-privilege/telink_b91/soc_offsets.h new file mode 100644 index 0000000000000..8b48bceedfffa --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/soc_offsets.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SOC_RISCV_TELINK_B91_SOC_OFFSETS_H +#define SOC_RISCV_TELINK_B91_SOC_OFFSETS_H + +#ifdef CONFIG_RISCV_SOC_OFFSETS + +/* Telink B91 specific registers. */ +#if defined(CONFIG_TELINK_B91_PFT_ARCH) && defined(__riscv_dsp) + #define GEN_SOC_OFFSET_SYMS() \ + GEN_OFFSET_SYM(soc_esf_t, mxstatus); \ + GEN_OFFSET_SYM(soc_esf_t, ucode) + +#elif defined(CONFIG_TELINK_B91_PFT_ARCH) + #define GEN_SOC_OFFSET_SYMS() \ + GEN_OFFSET_SYM(soc_esf_t, mxstatus) + +#elif defined(__riscv_dsp) + #define GEN_SOC_OFFSET_SYMS() \ + GEN_OFFSET_SYM(soc_esf_t, ucode) + +#endif + +#endif /* CONFIG_RISCV_SOC_OFFSETS */ + +#endif /* SOC_RISCV_TELINK_B91_SOC_OFFSETS_H*/ diff --git a/soc/riscv/riscv-privilege/telink_b91/start.S b/soc/riscv/riscv-privilege/telink_b91/start.S new file mode 100644 index 0000000000000..a791d2eeae980 --- /dev/null +++ b/soc/riscv/riscv-privilege/telink_b91/start.S @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define NDS_MCACHE_CTL 0x7CA +#define NDS_MMISC_CTL 0x7D0 + +#include + + .option push + .option norelax + .org 0x0 + +/* exports */ +GTEXT(entry) + +SECTION_FUNC(init, init) +entry: + + j start + + .org 0x20 + .word ('T'<<24 | 'L'<<16 | 'N'<<8 | 'K') + + .org 0x26 + .short (0x173B) + + .option pop + .align 2 + +start: + + /* Enable I/D-Cache */ + csrr t0, NDS_MCACHE_CTL + ori t0, t0, 1 #/I-Cache + ori t0, t0, 2 #/D-Cache + csrw NDS_MCACHE_CTL, t0 + fence.i + + /* Enable misaligned access and non-blocking load */ + li t0, (1 << 8) | (1 << 6) + csrs NDS_MMISC_CTL, t0 + +_RETENTION_DATA_INIT: + la t1, _RETENTION_DATA_LMA_START + la t2, _RETENTION_DATA_VMA_START + la t3, _RETENTION_DATA_VMA_END +_RETENTION_DATA_INIT_BEGIN: + bleu t3, t2, _RAMCODE_INIT + lw t0, 0(t1) + sw t0, 0(t2) + addi t1, t1, 4 + addi t2, t2, 4 + j _RETENTION_DATA_INIT_BEGIN + +_RAMCODE_INIT: + la t1, _RAMCODE_LMA_START + la t2, _RAMCODE_VMA_START + la t3, _RAMCODE_VMA_END +_RAMCODE_INIT_BEGIN: + bleu t3, t2, _START + lw t0, 0(t1) + sw t0, 0(t2) + addi t1, t1, 4 + addi t2, t2, 4 + j _RAMCODE_INIT_BEGIN + +_START: + j __start From ed743aaf45018d06855dd1402d96561b7008faad Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:38:06 +0300 Subject: [PATCH 02/50] include: dt-bindings: b91_pinctrl: add pinctrl bindings for B91 Added DT pinctrl bindings for new Telink B91 SoC. Signed-off-by: Yuriy Vynnychek --- include/dt-bindings/pinctrl/b91-pinctrl.h | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 include/dt-bindings/pinctrl/b91-pinctrl.h diff --git a/include/dt-bindings/pinctrl/b91-pinctrl.h b/include/dt-bindings/pinctrl/b91-pinctrl.h new file mode 100644 index 0000000000000..8878b953acd36 --- /dev/null +++ b/include/dt-bindings/pinctrl/b91-pinctrl.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_B91_PINCTRL_COMMON_H_ +#define ZEPHYR_B91_PINCTRL_COMMON_H_ + +/* IDs for GPIO functions */ + +#define B91_FUNC_A 0x000000 +#define B91_FUNC_B 0x010000 +#define B91_FUNC_C 0x020000 + +/* IDs for GPIO Ports */ + +#define B91_PORT_A 0x0000 +#define B91_PORT_B 0x0100 +#define B91_PORT_C 0x0200 +#define B91_PORT_D 0x0300 +#define B91_PORT_E 0x0400 + +/* IDs for GPIO Pins */ + +#define B91_PIN_0 0x01 +#define B91_PIN_1 0x02 +#define B91_PIN_2 0x04 +#define B91_PIN_3 0x08 +#define B91_PIN_4 0x10 +#define B91_PIN_5 0x20 +#define B91_PIN_6 0x40 +#define B91_PIN_7 0x80 + +/* Setters and getters */ + +#define B91_PINMUX_SET(func, port, pin) (func | port | pin) +#define B91_PINMUX_GET_FUNC(pinmux) ((pinmux >> 16) & 0xFF) +#define B91_PINMUX_GET_PIN(pinmux) (pinmux & 0xFFFF) + +#define B91_PINMUX_DT_INST_GET_ELEM(idx, x, inst) \ + DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), pinctrl_##x, idx, pinmux), + +#define B91_PINMUX_DT_INST_GET_ARRAY(inst, x) \ + { COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, pinctrl_##x), \ + (UTIL_LISTIFY(DT_INST_PROP_LEN(inst, pinctrl_##x), \ + B91_PINMUX_DT_INST_GET_ELEM, \ + x, \ + inst)), \ + ()) \ + } + +#endif /* ZEPHYR_B91_PINCTRL_COMMON_H_ */ From 77bd56f9b15dd39efc6f281562faaad093e2f9d7 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:40:02 +0300 Subject: [PATCH 03/50] dts: riscv: add basic dts support for new Telink B91 platform CPU, Power, GPIO, Serial and Pinctrl dtsi support for new Telink B91 RISC-V platform. Signed-off-by: Yuriy Vynnychek --- dts/bindings/cpu/telink,b91.yaml | 8 + dts/bindings/gpio/telink,b91-gpio.yaml | 22 +++ dts/bindings/pinctrl/telink,b91-pinmux.yaml | 29 +++ dts/bindings/power/telink,b91-power.yaml | 27 +++ dts/bindings/serial/telink,b91-uart.yaml | 19 ++ dts/riscv/telink_b91.dtsi | 204 ++++++++++++++++++++ 6 files changed, 309 insertions(+) create mode 100644 dts/bindings/cpu/telink,b91.yaml create mode 100644 dts/bindings/gpio/telink,b91-gpio.yaml create mode 100644 dts/bindings/pinctrl/telink,b91-pinmux.yaml create mode 100644 dts/bindings/power/telink,b91-power.yaml create mode 100644 dts/bindings/serial/telink,b91-uart.yaml create mode 100644 dts/riscv/telink_b91.dtsi diff --git a/dts/bindings/cpu/telink,b91.yaml b/dts/bindings/cpu/telink,b91.yaml new file mode 100644 index 0000000000000..f70640234df77 --- /dev/null +++ b/dts/bindings/cpu/telink,b91.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +description: Telink RISC-V CPU + +compatible: "telink,b91" + +include: cpu.yaml diff --git a/dts/bindings/gpio/telink,b91-gpio.yaml b/dts/bindings/gpio/telink,b91-gpio.yaml new file mode 100644 index 0000000000000..902be6ebb7333 --- /dev/null +++ b/dts/bindings/gpio/telink,b91-gpio.yaml @@ -0,0 +1,22 @@ +# Copyright (c) 2021, Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +description: Telink B91 GPIO node + +compatible: "telink,b91-gpio" + +include: [gpio-controller.yaml, base.yaml] + +properties: + reg: + required: true + + label: + required: true + + "#gpio-cells": + const: 2 + +gpio-cells: + - pin + - flags diff --git a/dts/bindings/pinctrl/telink,b91-pinmux.yaml b/dts/bindings/pinctrl/telink,b91-pinmux.yaml new file mode 100644 index 0000000000000..68419f09f3627 --- /dev/null +++ b/dts/bindings/pinctrl/telink,b91-pinmux.yaml @@ -0,0 +1,29 @@ +# Copyright (c) 2021, Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +description: Telink B91 PinMux + +compatible: "telink,b91-pinmux" + +include: base.yaml + +properties: + reg: + required: true + + label: + required: true + + pad-mul-sel: + type: int + required: true + description: PinMux pad_mul_sel register values. + +child-binding: + description: + This binding gives a base representation of the Telink B91 pins configration. + + properties: + pinmux: + required: true + type: int diff --git a/dts/bindings/power/telink,b91-power.yaml b/dts/bindings/power/telink,b91-power.yaml new file mode 100644 index 0000000000000..7132f9d027276 --- /dev/null +++ b/dts/bindings/power/telink,b91-power.yaml @@ -0,0 +1,27 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +description: Telink B91 power control node + +compatible: "telink,b91-power" + +include: base.yaml + +properties: + reg: + required: true + + power-mode: + type: string + required: true + enum: + - "LDO_1P4_LDO_1P8" + - "DCDC_1P4_LDO_1P8" + - "DCDC_1P4_DCDC_1P8" + + vbat-type: + type: string + required: true + enum: + - "VBAT_MAX_VALUE_LESS_THAN_3V6" + - "VBAT_MAX_VALUE_GREATER_THAN_3V6" diff --git a/dts/bindings/serial/telink,b91-uart.yaml b/dts/bindings/serial/telink,b91-uart.yaml new file mode 100644 index 0000000000000..fffb4f0e76f40 --- /dev/null +++ b/dts/bindings/serial/telink,b91-uart.yaml @@ -0,0 +1,19 @@ +# Copyright (c) 2021, Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +description: Telink B91 UART + +compatible: "telink,b91-uart" + +include: uart-controller.yaml + +properties: + reg: + required: true + + interrupts: + required: true + + pinctrl-0: + type: phandles + required: true diff --git a/dts/riscv/telink_b91.dtsi b/dts/riscv/telink_b91.dtsi new file mode 100644 index 0000000000000..dc37953edae3d --- /dev/null +++ b/dts/riscv/telink_b91.dtsi @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include + +/ { + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + cpu0: cpu@0 { + reg = <0>; + clock-frequency = <24000000>; + compatible ="telink,b91", "riscv"; + }; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "telink,telink_b91-soc"; + ranges; + + ram_ilm: memory@0 { + compatible = "mmio-sram"; + }; + + ram_dlm: memory@80000 { + compatible = "mmio-sram"; + }; + + flash_mspi: flash-controller@80140100 { + compatible = "telink,b91-flash-controller"; + label = "flash_mspi"; + reg = <0x80140100 0x40>; + + #address-cells = <1>; + #size-cells = <1>; + + flash: flash@20000000 { + compatible = "soc-nv-flash"; + write-block-size = <1>; + }; + }; + + power: power@80140180 { + compatible = "telink,b91-power"; + reg = <0x80140180 0x40>; + power-mode = "LDO_1P4_LDO_1P8"; + vbat-type = "VBAT_MAX_VALUE_GREATER_THAN_3V6"; + status = "okay"; + }; + + gpioa: gpio@80140300 { + compatible = "telink,b91-gpio"; + gpio-controller; + interrupt-parent = <&plic0>; + interrupts = <25 1>, <26 1>, <27 1>; + reg = <0x80140300 0x08>; + label = "gpio_a"; + status = "disabled"; + #gpio-cells = <2>; + }; + + gpiob: gpio@80140308 { + compatible = "telink,b91-gpio"; + gpio-controller; + interrupt-parent = <&plic0>; + interrupts = <25 1>, <26 1>, <27 1>; + reg = <0x80140308 0x08>; + label = "gpio_b"; + status = "disabled"; + #gpio-cells = <2>; + }; + + gpioc: gpio@80140310 { + compatible = "telink,b91-gpio"; + gpio-controller; + interrupt-parent = <&plic0>; + interrupts = <25 1>, <26 1>, <27 1>; + reg = <0x80140310 0x08>; + label = "gpio_c"; + status = "disabled"; + #gpio-cells = <2>; + }; + + gpiod: gpio@80140318 { + compatible = "telink,b91-gpio"; + gpio-controller; + interrupt-parent = <&plic0>; + interrupts = <25 1>, <26 1>, <27 1>; + reg = <0x80140318 0x08>; + label = "gpio_d"; + status = "disabled"; + #gpio-cells = <2>; + }; + + gpioe: gpio@80140320 { + compatible = "telink,b91-gpio"; + gpio-controller; + interrupt-parent = <&plic0>; + interrupts = <25 1>, <26 1>, <27 1>; + reg = <0x80140320 0x08>; + label = "gpio_e"; + status = "disabled"; + #gpio-cells = <2>; + }; + + plic0: interrupt-controller@e4000000 { + compatible = "sifive,plic-1.0.0"; + #interrupt-cells = <2>; + interrupt-controller; + reg = < 0xe4000000 0x00001000 + 0xe4002000 0x00000800 + 0xe4200000 0x00010000 >; + reg-names = "prio", "irq_en", "reg"; + riscv,max-priority = <3>; + riscv,ndev = <63>; + }; + + uart0: serial@80140080 { + compatible = "telink,b91-uart"; + label = "uart_0"; + reg = <0x80140080 0x40>; + interrupts = <19 1>; + interrupt-parent = <&plic0>; + status = "disabled"; + }; + + uart1: serial@801400C0 { + compatible = "telink,b91-uart"; + label = "uart_1"; + reg = <0x801400C0 0x40>; + interrupts = <18 1>; + interrupt-parent = <&plic0>; + status = "disabled"; + }; + + pinmux: pinmux@80140330 { + compatible = "telink,b91-pinmux"; + reg = <0x80140330 0x28 + 0x80140306 0x28 + 0x0000000e 0x0C>; + reg-names = "pin_mux", + "gpio_en", + "pull_up_en"; + label = "pinmux"; + status = "disabled"; + + /* Define UART0 pins: TX(PA3 PB2 PD2), RX(PA4 PB3 PD3) */ + + uart0_tx_pa3: uart0_tx_pa3 { + pinmux = ; + }; + uart0_tx_pb2: uart0_tx_pb2 { + pinmux = ; + }; + uart0_tx_pd2: uart0_tx_pd2 { + pinmux = ; + }; + + uart0_rx_pa4: uart0_rx_pa4 { + pinmux = ; + }; + uart0_rx_pb3: uart0_rx_pb3 { + pinmux = ; + }; + uart0_rx_pd3: uart0_rx_pd3 { + pinmux = ; + }; + + /* Define UART1 pins: TX(PC6 PD6 PE0), RX(PC7 PD7 PE2) */ + + uart1_tx_pc6: uart1_tx_pc6 { + pinmux = ; + }; + uart1_tx_pd6: uart1_tx_pd6 { + pinmux = ; + }; + uart1_tx_pe0: uart1_tx_pe0 { + pinmux = ; + }; + + uart1_rx_pc7: uart1_rx_pc7 { + pinmux = ; + }; + uart1_rx_pd7: uart1_rx_pd7 { + pinmux = ; + }; + uart1_rx_pe2: uart1_rx_pe2 { + pinmux = ; + }; + }; + }; +}; From 4b0b1e0eee61b2bf3951530b76ddc5462b3a5747 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:40:33 +0300 Subject: [PATCH 04/50] modules: hal_telink: introduce new HAL Telink module This commit introduce new HAL Telink module used by new Telink B91 RISC-V platform drivers. Signed-off-by: Yuriy Vynnychek --- modules/Kconfig | 1 + modules/Kconfig.telink | 7 +++++++ west.yml | 3 +++ 3 files changed, 11 insertions(+) create mode 100644 modules/Kconfig.telink diff --git a/modules/Kconfig b/modules/Kconfig index abae13373af4d..c8aeb4eb9d04d 100644 --- a/modules/Kconfig +++ b/modules/Kconfig @@ -26,6 +26,7 @@ source "modules/Kconfig.sof" source "modules/Kconfig.st" source "modules/Kconfig.stm32" source "modules/Kconfig.syst" +source "modules/Kconfig.telink" source "modules/Kconfig.tinycbor" source "modules/Kconfig.tinycrypt" source "modules/Kconfig.vega" diff --git a/modules/Kconfig.telink b/modules/Kconfig.telink new file mode 100644 index 0000000000000..d4e5e771ba76a --- /dev/null +++ b/modules/Kconfig.telink @@ -0,0 +1,7 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +config HAS_TELINK_DRIVERS + bool "Telink Drivers" + help + This option enables Telink Drivers APIs. diff --git a/west.yml b/west.yml index 2deafbf32aeb7..eed8dcf99243a 100644 --- a/west.yml +++ b/west.yml @@ -86,6 +86,9 @@ manifest: - name: hal_stm32 revision: 2016f613f8138b8abe42013ab983a0d2fe0459b9 path: modules/hal/stm32 + - name: hal_telink + revision: ffcfd6282aa213f1dc0848dbca6279b098f6b143 + path: modules/hal/telink - name: hal_ti revision: 3da6fae25fc44ec830fac4a92787b585ff55435e path: modules/hal/ti From 64a30831da7acba74cd5f3c813825248bfb7f6ae Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:36:26 +0300 Subject: [PATCH 05/50] boards: riscv: tlsr9518adk80d: new Telink B91 board support New Telink RISC-V B91 Generic Starter Kit board support. Signed-off-by: Yuriy Vynnychek --- boards/riscv/tlsr9518adk80d/Kconfig.board | 6 + boards/riscv/tlsr9518adk80d/Kconfig.defconfig | 21 ++ .../doc/img/tlsr9518_block_diagram.jpg | Bin 0 -> 114147 bytes .../tlsr9518adk80d/doc/img/tlsr9518adk80d.jpg | Bin 0 -> 599418 bytes boards/riscv/tlsr9518adk80d/doc/index.rst | 208 ++++++++++++++++++ .../riscv/tlsr9518adk80d/tlsr9518adk80d.dts | 125 +++++++++++ .../riscv/tlsr9518adk80d/tlsr9518adk80d.yaml | 11 + .../tlsr9518adk80d/tlsr9518adk80d_defconfig | 17 ++ 8 files changed, 388 insertions(+) create mode 100644 boards/riscv/tlsr9518adk80d/Kconfig.board create mode 100644 boards/riscv/tlsr9518adk80d/Kconfig.defconfig create mode 100644 boards/riscv/tlsr9518adk80d/doc/img/tlsr9518_block_diagram.jpg create mode 100644 boards/riscv/tlsr9518adk80d/doc/img/tlsr9518adk80d.jpg create mode 100644 boards/riscv/tlsr9518adk80d/doc/index.rst create mode 100644 boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts create mode 100644 boards/riscv/tlsr9518adk80d/tlsr9518adk80d.yaml create mode 100644 boards/riscv/tlsr9518adk80d/tlsr9518adk80d_defconfig diff --git a/boards/riscv/tlsr9518adk80d/Kconfig.board b/boards/riscv/tlsr9518adk80d/Kconfig.board new file mode 100644 index 0000000000000..bd36cb0e481f3 --- /dev/null +++ b/boards/riscv/tlsr9518adk80d/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_TLSR9518ADK80D + bool "Telink B91 Platform" + depends on SOC_RISCV_TELINK_B91 diff --git a/boards/riscv/tlsr9518adk80d/Kconfig.defconfig b/boards/riscv/tlsr9518adk80d/Kconfig.defconfig new file mode 100644 index 0000000000000..2b3208b03d1aa --- /dev/null +++ b/boards/riscv/tlsr9518adk80d/Kconfig.defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_TLSR9518ADK80D + +config BOARD + default "tlsr9518adk80d" + +config COMPRESSED_ISA + default y + +config GPIO_TELINK_B91 + default y if GPIO + +config UART_TELINK_B91 + default y if SERIAL + +config PINMUX_TELINK_B91 + default y if PINMUX + +endif diff --git a/boards/riscv/tlsr9518adk80d/doc/img/tlsr9518_block_diagram.jpg b/boards/riscv/tlsr9518adk80d/doc/img/tlsr9518_block_diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b0b2818ed3fb7d5962a21bae33c7ea9ddccd6af GIT binary patch literal 114147 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�#B!AH9;DJ?n}di?=<$?0%o!p#!;`X|1T= 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 literal 0 HcmV?d00001 diff --git a/boards/riscv/tlsr9518adk80d/doc/img/tlsr9518adk80d.jpg b/boards/riscv/tlsr9518adk80d/doc/img/tlsr9518adk80d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76f34a9dc9c36ff6354adee4823bb68ee05bad7e GIT binary patch literal 599418 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%0D#@IU+ndFa22ujF3kD{z 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 z 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 -LLUU6yojslCTAWg;h+*2e(nJ7GQKH-e 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π1^h7o*P8jXsUwifa`ccJPtlmSSX5uM35XB!p!FaJ(lBPdS(!V zg@V)-hPu1C?9$J2^;PE+2|?VbL=kY#d5d`E?X5KJ+)Jz|9=tb>=im8W02L5`xS^81`}+B9@SGB}Xtw|CsnisdW$)o*^r#TTDKHj~13B!B$V zGc<16#xoy2Kuw**aTOka^fjJ+`bCQ3B?wjEI4)M!qpYd|-%(ISJ=a|OGw%H5PnbMu z3Kw5?IlunZZ>g&p!|#9pFg10hXknc-tG4l*U*5~5U%8Ry<^!~M9^>LKe~tEIN7=e{ zC!~|y@PiwuuCC**yZ(R?3Xx6@vv2z`%D;0xc?$;m2bec@G*y-LeEjiBnwoa=#V>q; z+wS=@)ek(xORv5`qN0k=Ejy3*-h7d5Tet9?TW)34sL?$0%rk7*xEWp1kUj;?R3MrP zNcaNRb8EJPci9c%Y4AhZ{M(Q>SIi$M}hnG!J=9o;I0p-SR`)4|VYPeGgDwJ&F;d>M=Y> z4|dVj+soLAW4Zm;zvRug-lcKhCJr6Cnz!Ekh}(aAIS)SgF6%e0V%bIKvwlr4!dI!Q ztD(5Km}j4Qm4@m`%wD{ROFn-YEl2ypD1?eelFMWfPM+sp{D^QU!dd5D zLT$|mdV4m5W*~%uCnP9g9M5O^ta^U_hhMRN%~~G*`^%hs=6Q5=wsX^W@1(4>oHyQh zhyw?^ky;285K=>t8XetzoO#|7uD*Lyx~*-7Oqqdbow62qlX!4-p1&l)^#R1j2%;Go}zLijh2e6ahpsInsFtJ&`~QN7=e%3!WcP zy?uiC72o$!bp`2rWYZbkkb~_wf#6muASAY9lS-vAEr*KHqp@=)L;VBfA`z0AG@c$o zMicBhdW_VQFYwm0PtkU;mEwvjCQX@4|3EJTechCo7USB`xNQq1#TESZkq4Of;Wk*a z7gf(7$p^v*S4Coh?%_EW(hmoCA#3RQpM0z zG*v11Lp>-kEFI59cs{PLfGV+V6I>UCpo8N1K8mhlxh`%tLwPhxE;U4~Naye!|HLs} z#K17da4+$MN=l332#tI;Pdt%8(UtPM_Esvq1HBxsD^1d0W8s1 z2&shxfl!FB0LKL>AsUuAmWFGYsH%++5%2^dqX2h812ptd>_oA=Ve<}>!`;l8dkR}u z5ApGPYdQOZ^Wn@8jURu4E(~VRpHJhKCZsR%%c>acZbng#F?HHZb_v0bm8+StWDzHw zb~@WW{Ftrl)-&m(`E+#+Fmm(=rjDwkd!UZ?0wE?gKcsNh;$Y2(T!sR_KU1E>bGEo(VW; zn*Q&U1x4b!e&L!P-yWF3HIqs(#v2^M^ZY^_Rq(H*FYp{67mxSee~+`4jpy?h%pf&9 zOj&U;8`ke&&6+jfK+enu_l4&L_pX1unJ@**C4iyHbA%ya zc;FDWa|+=|luQm9#?Qu7irKVzJu5ctV$AgUeD&IIbMY6xPEY?ZU0t0VIM_lm=P~o7 z#njf;kSO_poN1#Op@12y1ayAqc>I_sgpvt?5eidOTtshwKi&Pk968#?@=sQCtfP~V zE)haOl_Jnfia;c<35Bp1DiCob!m)`&R1%d5a=AX9eDZ$uTn9gWZarriwI|kx1A7j! z?DVslHFF-#t*vB+TnxpcwzGci581M5H6s4;t$JT8}x%lEUS$y&mq#8n3d=Bhy;rVCY zqNb`0C8W^SmBV&|NFu3dcv7%&%T6vj|9pP@%bVG;?HF_B)^p@ojz9hRUkqiUOrAcM zeFw4(C3DD-j^_$|siW&5^1g=nYSvoJLzZ&z3FQNaACu2H*bfPZ_o? zQ~{->#UzSKFiks%fbczB*Fp$|R5FceTBw>9WEu)dDw!pjN(bOKRdV1^TR?#KeBNEL z8chqKAlZAcop;}PA212)263a9p42g_Mopr$rk0x8YMS@$#>&}15sjPIQ5El}=?A1@O(}pOgTYWic!RHq!Wc;qjYRQmub`okf&NWVas8kd;`#)j zL+Rlw5*!=HwvkdnNU&@>$headRX6Az9-{M*Np+cq5gn#;dncaMsIDu*DT|WvZB#?Y zN}FU&7Z<_E`WmXMYYX}y2g`Qxe20vcf`N9-;Uq*$@N#*!v@~+H+Rrs#xRAQ4GI|FF zks?CGh%wyT!<>^wGjU28*?ccjs^}`b_t8Gq?cIx}DhPaPYAP5vemqCp`q{O+oz(ur zbjRvhxcF2yuUf_XFTKq9pS=XhifZ2Ysox%2U7H=(ipnIv}t3plpMWn z-9+P+C`y7|o3=A`?pQWAHZf`16^tG=jzg^}GPXfOLp??)gjonsKMwcxJU1{-_#l;l z4t_i}!7vOg+X|e71>IJFQ?P^k3b5^fVHFOC@jNdW-MbFb7x<1x*0Crl(Fqw5EGvMz z`apR_3A5*%L~qY9(QvpB0(~3<5xCuikT|Z1?<(j@F+zBNhwJBX{Tz8SK_ucKFsZ7l zq_|jR(v(Sj<6B=RlNshOfB8F>X%h;Ch(<$Lw#93&zt6k{qliUA7@;DjPM=P1&j4W~ zif$N0B4OH(w$jtm!oZjj^rq7M>X$d586J1temjt+wJpieu+8+D6Il8FM{L=!6^v?r zddp9_?}>YP`StsGoXE zw5*Jwq2VAbUixg?(ZZL$avx3GHe`9ZeCBkvJ;Nstt(=~chgXrM|5`ioj zyrgi0tXxrWz$*&ACkjQa3Zf8h?g#yIDJ}3k@KvNxKn4;M&-01JLg4FkwFS-k{}ovO zg+sse%uo0HMUY*+OFsU<)0}%=G3Nin-hW5gRh;X)=u=fQtk^j!M}&kDLWrD`2?lIz zV{8)~z~1(D-nQA!IpVN!j@a170o&x9K_EZ^C6q%ew4}~yrJ1Vg{xO$id!IAT_}zPd z?0d$!o?~briSF60UTao;^?mRAyn*1k)q`YnGwGbtNn>+{;o$>JjQ7`Ff(bTpKsyL0 zi;#v|RK=(~Kl}Nu+tP9b>ggqijUV;YzzAF^;3^ z=WC1SXE54Qivo0=jYVP+!a@2TR$8)+1w1XVvB7cEjzmpK922CSCegsi*aTCiOvY7` zT6uywbLTTM7!Zdw?tSP{PIsmP&BS3y)ac*{iA*dQMVNq2ES^mDGMd9ViW;LW#t5VZ zX(gk+C3YnaAzl*Kbyc9l5HAT+A-e-{;-RcfyG=r%OpK00bR2+5&^kuO7G)h0Dbb-r zG%gXYhvT|n5}bm>CYoGTp`v*I#`)n_gZ; zsZ!w`?|m~btlhxAp52^&=9#Q}@j0aLbJc6FV9okXytsNb6|u=|N72{n7yDCm1)4i zAqwDgpZgszuG#?YO{u=jb;)(KlMIi6RrsApv48yzJe6nZ$tSSpsYkj0u0OH#gypmy zJ)NDa?qhtxu{5`|)7N_lD_Uu2pTy8eAJL|5%wM#Wo!hta($i0K;yLGW+*#-H($kNy zRm8M5HnMK>Zq7U9c-mTu2;eI>{e*{p`!LI1cRsC61-5QIh~Lx+s)~oQ0M{awa|Aq@<^h_ts6QOej9bsB zt8e5|;yTWec$L&_VsNFRIy#D()j?}(6GcxFn-p9+ecBYpM@H%0x&yzZrCzwDM0jIT z9pz#1J#}ZR^n4s8L0F<%38E@dY&rk@GnqgCI4b2KZomBxyx|R(;<|$B=mZET2LY9` z!p0Fde)sE~|C+_@-M@!#e)YR-T)i5ZDd0L;!k|W1R~H@KlNspgVaCi>F1u_Rzx?In zbhLHy*6Xk5r(gRN5Pe>l|=04EFU?Y;J)}fm%?*aiF!e4IOD#uG$Qq1ZBV`3=H+LbI0Dg z@-BmPa~KjTk;TXywIo4C7T@!+Nq{yQZ6l-=xWY}>9syPeLY-huLhnEyk3aVejK;@gedZ@bf)WN#DSXcZ<a+>@Nz$!H~)s` zR<2LM&nS=?6rgo4P1EO4Y=XYg3Xtbr*T0J`TXyiHpWMoW58g@`jPu3M{*)P0+W6on ze#W-loA~a{H*xYQr_$cq$eCv@;4`253?Kf$`zYqRxc2JzF#D)Re)QpgW8W*!aLh6D zxaF3g6HM%*QmJvq>F4o-AAgC@f8iz`dvZ0GzUg$1I(in)gX_?-#?R-eR?E0<9-(3e z21lq_gB}qO8B``mu4yU?&4Konl`F8zZO#MyvsQxS_qA(2Vi-Br>;irqd^L>UAYjg+Y*Hsz*h1R5o4D5H>8)=OuJ z6e(6jNP+7pa@l_sSpQ?!2Vdn5R;C384rI9h@t3)4^)QvV2z^^Q{YW;S6m#9`nNC)K$bQq^( zXK9c|fJjfxIxz@G5=Rl0YDko5l;dKs2o%0`(Xk*A>Da@;L5WlfB?L(6kZ4JWMJktk zv4NShXHhKXQI4cEK0kPz*T*a5Fy%5%5Rf*A zQp&u=q-&3r_12D{wWJ}NL5LV*BZLmq(~Sb_*D$^Z+QA#u=>zFGfPtunNFtPpF;SQj z%WaIb23PtBQ5jP3_|3#iucC(p0u>-i1yC*{oq?-0a2fF^WnJMn*#@9z*BM*@%osEea`DCeXP?@>nuSf?LS4YxVQYIAJ*_oqIN`p17ax z4xbNw@S}YEKflGm$RR%U;kU7IT@QEs=Qu8LlAtvx>0+s+<3D4VD3uUMJl{h~h3h!! zdjWwkdBQNJQmvvCG&dL14p)72FO`EU6;TinwYD%gvX|#yc$sAj&ZjmpN>_V3E1zA< z$k-TNv*(b>`1PVHY>~jPvW>i>TWY>_f$uXjE#-rs&?-9+j_q8)i0CD zD#peRvGUnzTyVi_xcrT;<$?Pj;~npM7eN@ZYsU_zO`FL(-uWT6ZQDWCFEDw=421NL zXax87?50vGGkNhs)^6R(GtVF3!N(qDN_PkU_Rjb5(;wbSE}v!fnqJ;@{SAbrfMV+; zf~W>~92hvrwyj%;a~5(1Hm_d8?4yri%ADEk-+v&@4waHxwF-{IhK*Zz>ZyZ_jSSLE6nTmL!M?Ya!N+z$W;P4>l&&Rdg*zNsUu4iXud6gP+mIGY zC`m02x%d7DkrFb}#dos!xjfp6dV)q8>Me!EwV)-$PTe^wEsil5E7*H*j6DN}nw=nc zVmDG1D9$*B&={1L#WN1J5>gp!qpEZ48iGF8#e4mI+{;@ z=u<2^aWUWf$!FN#+r!FLE4lRIi?9~nb;C7evW@)bjbCETGk23Mp3Q;X>rmkVj$d>p z54SjM*xZi<8uAhIj_xGml$klT0V`Y{e&8XJYMD%fQ%?n`8yg%4R|y=~C$s`#6j?tD z+M=U?mewu`g#Zvi@4hC+h7Vxs`a+AsaXcE@JE6S`<>zV6cYtgrOfs0r($JVE^h303 zP||^#PEkU2x2LVI+16@|byFi)U0RXy%hDnYEJ_3@;h}JkgmpVI?JfqP!Sf}vrt|lB ztA7<(ukN*@=~eEKwZf2>V4X?$jf<$%+Hof5DNbskXTwH@_U&Qbg6T9iOvgs!B(+h3 zsDe&H;-p;HaEKICs1#l%OAu=u*C7aNse7$fN~?3%BhfLoW{v<5g^(yAQLX@2ViH4G ztr3M9kSH9KQHWR~l|x912ym3bBr!FS93fL%3o2GfVTj`dog~DuW@4hm=y(YoMhpy( zaq4N8uxgW8EG6{_hWkzs08B(LSqoV z#&aT+j*3Y90+9G~^^w4KsO4JN>$W z#->?(`NkV*&cWNSdIPnIe)c@SicQP9(McotQ=yijp|wadbrPlBn;0KIglne}2UV2Q zK!5)TQ|D!9oZo_shUwk8hrDWJ_Ou0rVk+CW?;z4O;_-vL?oDU%;rG6V&RLV`A3Bqn zlRKHx(a2c~ZsOojmE(@>rgHT%PF^yT{k!+@@=GtX@~MqX)VkO&TbVQe95z>;<)x<{ zVcA(H(ss(3RJCDptB)>gMg}Ix&1m2)m!HR7_YUyzV|TOit~)vI?AJ1L_EdVdZbi9e zKK}8mdEc8BbM3`PGZJ|`^Yjir`|%yUkrPi^ilm0;Wl)ZbPGHd4xJimGiANkl#42&jtnKl}V9(rN~s%3H&Lq6w`Z=b>|tJiVMkN&{> z-*Xio{lJ^ZWE=R=k8fknoC2QO$G^Y(O&q)QShjCF$mc%)Eh-Zg95+K#V>2y_7qDs5 zM$EyG6(^s>{++|DTlF&A@(tW@{Rg@H%GdJ3Gf%N>`4s;2=kGGTYaXjsz0CVR@L@m_ zl`U~KM@Du)T!VNF*A4m5d#|Li3D&=~o~Q1=heQBDjZ;rq&Z#F&qN6#-hDtBle7#7u z4!ACkpTU@fFsTsQGEPG*Jy)+KcUs zl_tm)+Ss{cKaSVHy!j0jn_%wT>8xKfgsmww8ZU2I8#L`6ziRZZ}&mbF*7;*nqV7=PciW#r& z{R~3WnvMlo_>fV7-hlS$qe;Z8LNz7b%^quBZ1FK zx%Hy^??JCB>l_&w9A;cO%1tA3Y^vKaIu*j2dVX0LMMP1I<9G<+V0AiYmqMm(RWE&G zTa((+wM^ZJ)~1dbN7l2>90w>dWBOD^Mn>7QXAd)vp3hMK2pcxM!m{P3aL#e3&~;z} zL1w+Wq%O=PU3Vl`Sylr}gvZGMZx8FO`ZnUW5N8|6YNGM>kQJ$qTSWD&b|@1(n{ z1B+$zE3a_iKtFr-?xRu-nLKqCf964khlZIwX)%X-OAHT>QK<|uJUGC{12M;( zd^uU)qbX|$MtjL-Jl=in8`-jb3-eZ7gxfWP_M$^;u}J^HL!b{a(zh2WPQZ0C2xXZy zr-h@Bnagkf_yDF-#!gg;b%wzM{VYHITsqr51`dq!j?cY|FTDF~rgW#k&7-C^Fg{V{ zV9x-PXLQg#sgWJ~dueVf@*meN1C}vZx`Yq@$M^ZeAD`!7e;?&ov1suU_G}s9#U~%* zsFTm3QW@i(`=8>fOU^(g8FT_qtX#+Xwd*+k)HB$Dtydy)i-w36zoUVqW~yz8pVSbqHM`qSS0 zPsoZ8@PYZ0=CE+ir}@Tr?&b$Sy#s3?^_ANdc6 zhJkU0hP!d{bCGVDU)=mfe*62IY47Tyf6pG`SmI`y`Tei{hM%jkXwgEVP_T3BX0&y1 zaM)+}vh4Wdm^y75J==D(dHq%8+B+vPFf__r-f}&y%`U}UH~j~P zaUF=HWXrZaeE373VX$`)>11$=8MbeJnQPzrZyYs$A+_2#;qwK}aE+ zBMySp4j~Mf8s+MEY9cTOnp#Ue2Mu0lxqJkMZy$tNG2X zf2Os4Cb98YvV11lLd4p2dsukP(Oh))5=!My^1I*tiM#&tC~d8ceD%A(p`l|QuU&cu z>tA_=u{h5MZ~Qi;iG;T9R*KD?xVZ)pe)_sdLt-Wn^$>F*ofHETK{cr1W_*+s7-=X~ zCg^O*A(f$4E1{Hw6fruip{&6q30Q?D1zkJFps8V9fg>ZLsFv!cltWV2v!*f&2aJQo zL5LK&V{CoGakv##|Ng9T5om-oNF-Va4l6e-2CT;M{{NzZ^?#27>(+0*y7w1(&^?BN zKZp$Xk<`k#;QI_0KW6Kvp49#F zkG>`9g4*N=BS+MuauTgmzLw*rqCgy!bV;Np#r9Yb>0%`We-DqfX^ zF`$?j8)N5=9pth(l0>6*!j7$LIqmH8dF`2JGWV|!LmXh71f6#gN`R4I4B5~_%9x~( za)pdBByoZlk)A$;tcz84`5kQh?q*ClZaDW-JXHdu&*tu&rp6_7=co~=V8#W?1>3`9){S~tFCehQok7-k9u(M|`k3O@JTkl#= zXIm4;9zC6&9XkliB|wo_H+9x&i|Y!41fE~Dk?QXKSx`HkJ2%{ znHxWG6<>JYSpbwuF(n<)(o`hhPym^uT!umsrcUl={q6%)TNJHL1=@-pKmPtlk;U8i z{he!==-+aBJp<4&8^7oxmBbi{BU~b(*toZ!{wm~L&DdBUu9N5Z z6OSS53qoCIe$`*U&_EbkCgKqs3k8v5^3)t3{@CkzX8l&yZS2L%wc#=uuf=7gI!>mk zNU3&+HCqpH?BW?z5|@Gt+YSy;RYly+RvhUejf2n$j~%m5j6$3wi$Y zn~(7AA3qJ9C*fs_XdRKn6U3pwt%*$niR zx&QuG7}{N8%8c1u{D!5hTeptY&pk)Jy%Xu=>P1b=+I5>a_W0!>bM)-k&5Wa_G56Tx z*znTJ#5F^$6qE5=7#@yTcI+a`V-dq6qkv+@(eoMXKg8b6tLU1!1UHjm|E^tR3pr{* z#M+nF5hXBn+BAlSh5&~!2szXbGp0UP(gKx8l=ToIB9rrpqW~c+ zLTG~OC=nb9NIM+YZ1{U@GygC_Qlx94PhAfRm^!Ef1VYM`eTGdrWg^}D15w8H8<;Vx ziF|u2mB51VXliIh<~$MsHrDvAhe=YM<#2m}&bB6c`e0~y5XWobiAOh5DjA-;>uK)4 zYby&Eoxsr0^K9Q%W9g#fdGO)m+0mo9@{J$o^I!WdpZm=Fc>j(6!GYdB{`TY{GF@{y z<)SNCc-$d=d&}=Q@Y3THI%ksE(u=XMe)ne1J@0(3z2-8eOl_j8yMx_($03u!x(Shq zu>uq>28Go=p7n507#)#SdE%tT*w_fOXHBA|tAXv?d$E2>0~03IFQ$&fRGfZTlxT$l z8)EHP`ZZib5(5c1!b1udOAbs@57tgiC03*(@_(l9)iZl-k_zJM>_4j%HcUSz2qLse zXe$2Gr~RwIdR1M1kMDj}?{8%@DmsM9S26VA=QR_hend3P?oIp1W*nNE3OJ6XcYhDX zVwOU&h&E|UHc1kUl&M2Srv(#IrlLKO3Tu-jeFKVr=zD5oQad+bWa^MpPMXcSeqk`m8NSxiD|w9(`!uxr~kPCNY+IyyU9`{HvrnHb+oJ>O-+xGNRjbY}AuftYG7#$j*v9Ul`XA=i^Z$Y=W@xgbTc;o;e96_;ABuFPf zSR)akW%Y)=%wO2e;yKe;w|N&XF-~(6jh^6BAH9^PS8Zm0Z0Q>wBCZXx^wcw1dEb+? z6^opA#v=9|oWPfcuC6AQEnfmnE9u|35fw%(T5=rE1?$=M;)`UDo5tSV11y@=gsN|r zC#*OQk$IlL#CX1slrFU(f>@JpYN9a*H9VRcJ$w-$-3A;iVIt`r3ehGeN)m*~(2&b8 zqp_8mj!`y!MrTg)_{vwW=gMopMR_!)rPxWSRz~D9>1$k3v`uPDH+Rf&SgRFdto zPtQEZ$In|zwx!5#zPXyu{?`wA(;JslE<>dZ>o$Cjq5e($?yk=>b$SusznV{e{CC{? zv)gFuXhX*qCznI{dDd>&#`I~^Sa#wG-0*L2<R7&G~@y7S^{U863r=NU^?|=QneDagG@Q&**WONkP zZ`{SNZuvc0Yiff`@? zcQN&4H=D`e2tg1=xNeqAwt?w0rl8y`2M-NV8XsZbrtJ&`CA>l&p$!ei2BJt)3uDGc z#yI2570m1c*AXNWAvb;f`?$U$*FBBTeC9j2zKhloS6%gSTAG{4H5Sk&#eQsCw~gzs z`%jA9t@QWq!}EOR9yN>hwl?z0!(=Csn^M3!P>Q3p*vT}q`(TB89)1B#LSl99Nh&WfDsk9m8|aJVH>dQfO^Oc_6}sVxg6= zT0%M*tZ-8UNL^#4ltn6o(Fuu3ka+bqPaqs8<&~wag(G9V!+DNuL2b5c$5zY47Xf$Onf`LF8zvsuI5Jxy%e{voE%TteSKji(>EgEh}RN~Px0 z)!oVP@Bo7&11Kekq8iFkc$o}V$H=mS%R{}M3$0>iDu5B^Ys@~ zdFXM>lh2bE4i<@Y90JcUF{g{{d#)i@tuXSfACVaqfG9w5Ri0a>u0$d6B>1ao%J}?B30c2cZq&$Wd2{x(X`zgaHQ%;bM!upn23bZSU zvl44m>O}M<(r6kh4zaR?UQD)NaRY%d5*b0JYH6xkgtpXdOl%FF5JX{Ahm(r51Nnbg zFKimBTNjtAdgh!lhGM=*CYzyDsW3b`$fCuIIsd|oInXyq7+aPdzk-dMcd%{yE{;7o zpIQ)*%jIZpY9tCqIB?(~4b!JHxx1VGLkAEpOr3WWU;6Ur`RUEyq<7x|{6aUQL6N4Z zGZ`5kM!AZdn;}XwMcA=p7sf6mn=68}w6t|{%rQr^>iHgyU$%gQJ0#;{V+277>^LVb zKc9wd7EA@3Kp~sw`E7^z^p}3cp@ZWPMszk57#gDbpsgeA!V{OB!p_*q=iO`w=#xwW)}k^@&1_lg~1mG&3?hz;G3E zxdA2+bjaVBn+}=b>^CZ6ahbQ^)Th8JKcizu}6-n<uP+i7WQllm0kq%Lb2SXCK@4?BwP3>xilWhYs~oXm2D}Y-a0@ zJ*5|I)lk%Mp@;!-(1Tq^}h!sy=Z5GLSfkc~xL&!JKpr!w3Ro(#%y%p2-X=nj+5HF6Rq)NN`tr7;z&gj zMpX0!ekQ}wN6lr*lqsBe!b#)`Ilg!EcNiY7F?I43-ul+J;MBuU^Z6oscK5Jq<+B{z zwSyCnKLIPsXaU0mgG`K1)K3?dFs!m<{!&IOeT;<$6Dsmi4jUMP)<(KM{65@^kD}7% zv2))pX78IID>4Y_G9W@KOXe`;it}J1r1`gx;6Jkkd;=MkvZRDWNQaDdaHNZC6gE-F zD69kFT|8@WJ(cP*>!UbqT3sn8b$D0m1y(fF$G%-#nQdc~36W9|*#sdCNFNbv9HH=H zhfElut2N>z!e$gC0;dw=v}VEeNwS*3f<{||6AM};G)4|GN~k#+iy$$Uox68at<`WE ziz!UCUPN0+-AS%X6h~=Pi6cp(m^g}2DkbsHIqDRyeAAWu?ase2W%^X^fAAq1nwlw= z0yb>k#_)KF^Imf?mtB52AG`5UCQ4Nn%xEB}ghWw9K9{95UO{y_v^F)7OjJ0~)64#y zCGz<^)x@V1TH2a2)B=lDE+*DU6bfCEA>Th%V@88ey$IM`R zPY<5!v1D423obZ?TYvlraa)mm`wRwq_n{L>#$W1@Jjb1RCOdboXHU<5PCRZZNtk+-X3d<+87D4f)0TA1IH=HC za5>@FMHGGTu#gE5%A!P(uYKo-Jn+~vOrJdqJ)Y_ubpjJTRrcSsl@pg9&x)lDM1jVV z(A4Pg-uGR>H@|T^x;9Q@-b2ZRfm(&dN6%vZoGDl!Ti-usPU_&~<%`*}JA|mpf(3JU z&kYx{c=1#!Hbww>37dBG@#CM~MpI*fmgXF_Y6agGgSZ+!C^Y}l}azdX5%`|th>h3Rwov`wv?`749ZbQ^sI+}VQpGKc^=jp;y6ql#UeEl zS(|qB)Ap>P7N*G#O1T&#$Yk?0Hn)KgoXUxRKLjU+N~wgkl7^Ndk3P1B@Bif21SQL? zsnb|~x@P+HSx6;`;y4AP3V~FqL+*c-3&1SR%tvpLlDM-VG zp5(yZ{bXCZ@x21InkCeuoU&pm)k>Lt`+5;h7Go6%m1??7f{7JLoJV2EH3_8SBdvp# zlEg$HLkuAbpKK;a7zXLp&Q9kH-Sx>|?3|5_W8Bqf^stHAmnxSs#* z4_?*#%cM-jpGx+mIrNU~q`A3;Q_npU1e6B)*}r!?QY84EB#2_P1z{E1nlx0^rYJls zOls+`kNt$KYovrg*7+?$ND%3qI*#M?W5wU|(g18dPt6*G<2dAV8OFzkx#N!8G1f3K zI*O|lLyp5=|MW*{l?rpF&t&Pb%ee5Ivw72Hm+^&_C0RfrIPG`>X(-BDpr{X~flX3|?vl`ix zff*T}kqejNZ0?~c3sPzlA+erJZPhlx5gvGos8(Tge2A7@7HK?iC636ZIwxU|%>7XU z5`(gmtdd9|2+EX4hf!gKY-+@mE2;CR=;Py%sX53{!N>$PS5i4@4tjDUrol4qNTR+` z8lKz0^e~_R5<`#N;_wndcPqKgiAhTx7Wb&kLK7HfoD3@y-vuFi>yVGT0uml3C z)iObKf_$!-B#el|fT=C54EOdkw0|4ftRMzP%N6F%oyF|VWo+L)hBf(=DI*1$d;=|Q zOF8+J)6&f$h1crUwqhM7HQ0UF7tzxY$`{L`11Hf1usdk4tQDe%QlUBTX7!BbCeAs{9{ zX$B*^ws7q63pweOlNhZS3Ldx!2Ko=tzxjD0WmvK7Sd_}KbInF-VU1#5^5UA!oOs++ z!Z^b5eTIhndEv=>sg_3=?Jpwy0?~L0N~7%DG6h{b6XBK6Nd}cG@ax~L<%!37F_jtY z-BZNaG<|^>gl(X*?;t<>`5nyo?6njdB-Qdb#X>86eLd`X;StDAL-;P}DmJkU><$<@ zbSY{{D?u=U<25rnG{UCUE9u)8Lp)4j#WK!5V*$hwmFfh=Vl$iekMZ3f-pTGwTcA-f z(CeXO7OaadRUsIG=qi>TmFLgv1KxSfcX;~F^|bxlTu!=nE*%Rq47~Cb-6xz*9Cxzr z`SqN1&TF{!+jr1CV-g*cNF7^7GEuIP^D`(nOB5R@7TL13hryu{9(wp*&OH4b-gfmH z`1Ys1!s*w&iy!~&ekRI$$rl_bWYCTP(ZcE%*K+s62idx59f%_Fc#Z4d{~2C?<%N9Y zL!aQ$yZ;QC4wR4#?%Kk~|Kt5Qj*k$MlTKdF!w>$ACmy?-zx?4g&b#8ZFfojcMtJ1m zzp-`KOxoJJ=<6M&JTZcxz|85B={vCh$TKCStV=5_WOH@io=wGc)T4<0=~+xLM0K!i zp3#v(j4@=~6we`T3Vsz5G8q??gX?9Hj*C<-RwRI```ScGdvYYj=Eft>`r?H%Ibqon zOcb(r=XMSq=s|fYFxqH?>v-t_ElIO3jWIX~lz})gIIe@%X@Mn_Amb`xn@|nP6#N#( z9gm6eQQVBj*ibLVSfWVd`#FSANb90vg;fF8No5;aOI)XbNesD+M^v4lMu6Lp!I3Vd zQb5m+{gg*4_$}S!vju9Qz!*5?)Z=kP#Iuh-jYZMW&`Rv3kXEY`gpH6+fgpe=i7@rG z(s2|{p%G>H}ziaD@~!NHU_ z{jUP+f8aXn^LM<;Um?rBJv-UIyTbgVkD}1h3L*v@V?{zsdkfwkMKwrIGD^8AW*~`= z%$cn*>Foa>$kOVcHsgP2mx`219LGtTtL3J!L&tGQ;)HxYMKSR4 z#)cN|f8ai98@6-NNEQ6Foi37?#_m>}_5u=+%Hp-OP_tPoN+YWVC+E^S7*pG|ky32P z_4K2ZB5_kVoQw>*QYJZgkgBN=3YTKBh{!n9sw4E5prN$|uaHM4^+*eqNyjciVi7o2 zBaOyUDThkA9<7aSM7xKe=z>=S*CCfktcHnfhH}Owd-6hBUw0nU&GS!MBymI>cbF(8c~(S}?m!@Q|8cyVMc6{B&)VO@bZauQ43 zqK9>JD%H`6boA>ghoSxf?%KSYY~G={rARjCv!iD(W912kMkf%sY}mMo$DVzXe50nb zB}W+4h{6EZO;3;+-=j2MA&63q!-54%_`v(Fqq}=D14ALd`0YcC9o&S-O(k2%;ujj| zo-&n#`*u*N3;{4UQlZeCrqaCAy?tZMoZ7~l-ux!+dAQ8_XP;yfmPN;%%y>;RxOO#NXDndp@9rI42?|C)dJ<9it!4p-@J*&jwYrbGYc(6 z`hHdxr8PRSj8rGFVdp^(_6;*9p9ia`#1NJOW*)zsoY$3h7etIs3~?~Q-hBs&qeV=V zs$>ey3=a=cY;7mkmcjRCbJ@iw)8ImBqy{p^lZyKuSjq4H^eD5JolLG6V6BUeCBB=d zJYHev%P$c}4gB?iUaouJC!yK`ayk#(w~pSG<95fAT+g)Fq8hb77CD+|7}h6R}7TN}+XvBhmn5 zf;f$_k_Hk@q7#fv^+RE;M$J_5a|Mb`%_#_0rE7Df6I`K@^)6U?dh*EUa?G1E0~bwo zVuAzP)^KQVPYSYi-E@7hbxT|wB%RVx54-7P+H$Is*qw~Tgu}>eGfAnEs+S6lV0FE~ zQP{Aq&&_5*duWpdCjb@H52ZPT_5p*f?gLRyb7AwvbX-}gApJbWuIXSSFcUouoHLDIvqjw1T{ z4q-6$Gz0VZ;;ODcw(xhSPbjTAG`v1tCGGiK8UVp|kdgkR2)O2`n-Vg+AQ+#HNLV zHR#k1Sm#!y99wM+ekPMH05(Pmi4f`ON1J*ihc(2J#`97eY^_#fY;+{eL<|E)hllv{ zA8(^FQDSI(j1%Y1q$!)Dw^YT=<&i=XR8#(x<0xFC*t>f-f8O#69n)rU+N4Po^ASlD zr2d^Kq7?`8>_+x{?I$GV625V8BT!Zm#u36MRO5t(T9s_kBSfGgP>Dl$XpGW^?UW~4 zQI3OcC{mo=O?P_}I`Z*yIV6IlrZI^`6r6O_n%18wP*6gxUY-^wP2-qlCsEmW2q{bbd*PKktf4(1DJbar;(I9{3;sSYoa=?WpK+rwolC{ZYoPnmoS951%+#}?BDzn zb5~r%n`O6wsKJygC z_AX4MaHPlh{ywgI$HmN?)_?{Y3h5?&)m85Nb7%|7_pl2&gS~VecQV!#=$&ki zKgqzs5yr;Lbazi@V$K9(;{kWw^*AGA1L?-^Sbp}?zo4z<10Q)m>o#oVwx8ch^ZcV3 zKa^u&aEyb4ux;BGmdrbYIn!rw)cnPO4-SfXRBacXZMzEZl2}+2AWVX^8i^vG%`#`^9D<6* zwJy-el-4PXjgJ%8iz*{k8W$rJiB52{S#pgHkQjuulqO1CckREUO~|i*{VQ(#+_!k` zrDwBq=Rt0{<*z*c;5}S$>4m)Gx@)Ob%QQB4{OvDKaNj)-Ayk%FG-Fi-D+3HJf);G- zVUv(^ue_M6-m(H?i~Qh6ck}$pXL#QS-oP2Bp2*ax)A{3{@8AbNy_Gj#eI-j5E#>z4TVjhD0Hq!Wm==AL_>;5WZ{6cPtyzOLKK z;7COn1Y|N<65=$bsxFilLe`}+Ns`o9T&h;kNs@NKq{8SlV7jrffHeu| zkYYYdV=+&2v4LVH%jn<`+xG7x1Gqx5aOtt=N|i&~`-m}AYgIHL+ze5aAY|GhaXRwU zniM6K;1ZDOEHJun7rQ?88JdosL+<%)Oj)@pE$p(X=$>i}p#@igYp{)iu*u>C78SeT zxOkP2xaSaAVX#>bU8-OT9+}43(A)-bhz-+3Pw8e5^~vB7-mj}jNXKCcpsNkPdoodL zJNUUY5L9bG5mytO*%<=K!_AQJR%UYz(eSPrGirM`N?09F*|#K1pSexLji9!bN1- zCNnYkBIllaG#|L}^L*jcAL0IoA7fx}9|Hq}9PBIewzs{WOJ4s@u6)al;iHOk5$r#IP27*wrS=fi4U@Y@k)@6TbvAWl7Ok<&_H4gQVJ3+Nk&FsunHXsBx8gO z5)wnAfMG^=ZKkaNP7H&?W3;#Bxb~XY@Zggh*z(kaOgnxB$1GgLy0yE=HRot)N;y=; ztdH+0ZocPs?!VOl_!Jvo`MxjK4 zmKNj~_ul_Ep1yQ3$1j>f6a^Goo4EBi_pp2OHo7JqL!vc_P-GgKS-)vBxBU8HK5+f{ zR3-+PJgI{_?_I^JCszVhx?4R4MpG74E|1+yEnYd)VWhxe)fBL=IITDks{Mxq;_zCzy9E_v@e{`*n#~7!3b_wmIM3O zbL%a8NrISYXqeoTS?D+qlCx6u0Fp1$s6&yC*gI?;|E{;EREBSCkjHY zIR8pcI{!3Eqa&<;>_MEC8B9NV4t@Lg^2`7FK4g7FzJY_i{e0xzjjPdasKgrEM`T;Mjd6{F5n#blHTe;?%w=zCD z#xH(#3&z5m-teX)njEab+Iq@5sg_DxjWza2fOmbD#>#rrNI2NUf(sp8Q3q!KGJmqSYS{$c194i}Si4Jq!$tkt;M{aft^*PCsi2aa84&TMA5>I*(g^ za}TGVel)+h5$SYVAasxx=}J%(^YxEjNzaZk9)5HK#X3(x zVu^Kxn{kPf0MGSsU57A=>bM7uCDpg4Ev>q=M%3jMB0bPrHHttY4F50z`d5MVs$P%& zV(8W7U>S#ifTsCf^zQFxU}T7BU^f#zySVGoCkRSqv=!{{8%l}mNL;{`iqQ24wZK|M zl+^H(3a$>YVTGENsHRS2B5;F%VzEf;^frdZMj03yN(GrxfRco9l(trtz+zHooJm_c zlRLX{9fhMDf?9>~(LRzyGpVbKhGGK;^&w=b%<0D-$7?TnEt4is=Csq#;J?27RVv$h ziA)uvG!})8B#GnTXC+!jIAud|Owg=-GEoMIX&N7+`JtCk_r6S!k(kabCW%3WD9^(d zoVsun5H3~Fe;;0@N|^Uan)1XW5$rEfYjV?oPuC>?^0Q~*6{i0a z+a^qxydzl1@{`Z<%>DN;yCF;HNSwGzV-iE&#~BMKHn-s}nn`U(5943@Aqxi*GR=~B zdW2gEX?prW#ySGH;x)8qrc=sw5!q3EC)F)Yie1*53?($NNI=RIaA;zLjS)y}-BDwc z96FQWmd44HEA;A+QdHxb3(qCDV?76VZDwF3q%^F_HA{vz@1k0sV3O~pT|^Ak(JID5 z%VbHThFWOp=NTrz9ZhqSVB`92h-?8H=W+6xRMRWNv@mvEq?-r#5LJ^S5fWMdiMv|k)RMH& zO*#O}%#Ie`diCqryr++Ru87Ap93A5*NrF%R;6W}rsf8vWQWH-PV?$hU z(Q?i@{aA7yh?W*y$8zb#7x2W>1FYNl62)Q`o$=CWskqD~7oNnz`3+zzNaK?A6<5Cb zwe0BmGbR!gvyC`Oj1f5^WeJR--7WCOOHX0Rf*Is;5;yB01)O`~2|WJn21W*J6ulfR z*%qp`D($l-bHTX_X)8d%ZAJmhm(Jpp^IyYN=Y4=TTz&%53ux}jP{`-lwku}MT5!DS zbj)bP1{LxqM>R<(G~}6c^hvB)wUVAy_wkXheU=N(I|Ch;x&FG>@u81?i=8j7;h2+8 z;HI1YlljLq(>nk+-uNR{-hLl%|MJK9%ty~8sKJe&{5f~u{W!{LLJJ>jEuQ0mwuGfB zQ)aeu@kc+*uWtS;C!BITC!XfX$+E4gfV115Yi*6 zjd9eBR-S(Re&m^_b7;Jehn{(W6Hi@6V~fYpbLX&ZemDJn2k6<;OJidbUENbS`}_;* zl8e80_tjx-rZ#mQR_ZW3JYJGYp@c*Wi}jr&SeykXp1^_=Px!w^^c*SXY|712DX7>b z)d;3csQReVTC~x$cIE-g>#jVR*Ijw?f4gH+cQ_{anJlAY{oM7Z$NAH*)-aG*Y(qDF zO;gyisX|-PXYo<<`NC(vL1ZP1mUNNJ!ZGva^U}+LC!czWFe&rGWvBAgiyN47)NGoH zlW<)hV@jD zHNBbVo?6XKH=V$-OD6NFuRh4nzV%xgC(lM&Lv?sBI{`7V-^=s!U;mMNpIk*lOOZ%JAzvU0gLH;2 zQmqcUmX7HRG-qArO`6S&jv}>*F~-XwJ^iCNUV(GYzm$tFy@Y8qX7Ga_{g7Y%{#F_s zRo}={_u*mJg$0B*#BoexLnAl5=RGW5xQJS{#->*`@SU4)LhFS6hX$CHDRRl>Z@?sm zQ%*jaGtWL7@>w4H)9oDS>qBL8jEz??7TVf6*l9P=+B%u6?{M&7FO_PI#Au`=>k@$! z%%=)jgqBE^T5yF-iM^@hETt^}JC~NS?#;L4Y&B?V49YUeTs#qfsD$R_Oo zpHj~*3Ug=EaP{lae|VBgX)rBhd`sV=X}BM}fQk>Mca)}q3chr(J|rIG0*eg-G$~Nf zSc~JhX;F#-A+f^62wOKQD1zAHH?(1*GB0h~#u$a z6bm#pH4;>-I7(7178oC&Al8z$mS%DpMG%BIuFtfi7V^Vi+|J|At;MKj_Pw%)&P6Zt zi(mhWpZ;(OmC6uJ&CNJYhT~Tp!|pv#(LXTAzCF8evMm%^I~W@tOkJ7v4Ma*sl8{De z2#e7%Lb~<+Bh{@0wbZs_q`>Ggx>_@Q@0(W;q{b_J37)CL9u?F=LsCf?t0iPIf`+Cn zK8lZi<~MxryT9YCi{4CAQx_Xwe1S;|7c+mxbPgQc&&>9DNaauqL(V??G|sNgx%I(2dB^o{ z(WxcU3v;Dr}o$ ztWHfdQb;I|Gil0fuDId?US746_kHMX96YoODkCghG>w0I|LZw>`CEAOo(EZe^2v0} zp2e=7J-nf*g-?Fri!>B++;i96;O1~$m$mEGGi}N=-uT9gx$|#-V`N|e&?Iq$ln@0q zI@%|(?D#X-vh$B@-_^^<{`2!}-?EuG^XBmUb1Ny2k8{J~MO^WgYgoH>J=eVTZCrBs z<+OEm5>*50zPi+nCgp#3`5%!J9PVHl(lz<8xk$+WwWQ!Q(op_y-7=MOP%1?WH8*v0 z^>uHezkh^#pLvPVu*%eF9h`K=42BNuLb`o?=wol;#M4%AaOWmI{GP8d*juALm*@CJ zXY;wQy@%CnUS!XfJxuSMPA=O7rh-&HqJB7(5}ZkG3>-MfzrXt{yyeXoao_#l;qH6a zaPPg(GIMqpzr5wY7#W?QXYWC7{=qLf<&=|o^4SAS=zz1&UdCVk^e__>!xW0mT=&jP zIQFS_FmRAP8&;Ez zhUl2sP11P`>vrtNkzi0LN01~@8q%swdWp>lwUHMjlsZhm&lZH$hMV}cUh9i2GEM!K3hY3b-@U}%{3Nwb(YcODzp zucf7_jVawec~wY-`?4O}X>B@MI4tFs0x6s$0{-;-lmE;)v4WADA#yA^<={IG(pZve z4Ur`H+QYFH9fY_#f+#?aTB0OI?>k8R>}q0H5ylBMpirygMA1n=ZvG7eex+deu33J z6YLvX&5Z6YWOEBNwNjYsAqC{~1*EVP1(YWy2(mtYrz9K`>>4kVjMor0Lx0}@Ykv0w z_Vtg`&_0!8PdJI==bymV&D$6}bw1zy#s~lDt-ECp{Py?v5f1f|>70(AZ9^CdIH~&) zFgm3w$1xaPH*c62V^b%V5UH&_j_NK}t8i5bn;atV&Y>Xuzb|(Gu;>*tk}%^@i4C5R zNB&p7(T7UN6AwMfxffkVury)Eb5GNnJC$-d#8{B7AmjV|@i%v}`uSBXTC#-R?V8n3 zKh3h!U&GuJPo{s*YSymZ%!$X&qFk6K!2T7$C^5P4taXgon_I7+DNF&oDB58@0V#EOOKo7t3*t2^#dwTX!$V?(OF+{L_ z{br;REL^w{BLp>_YKFqg#84*+r-F^ozroI2D0go31BGoFJ40 z-=$~Y4p3E|z2_tRb>$8|deu9iVLJCb@E9NZ^o87h|9^48N!PIIk%wrQK9?=8^zp+V z|Afcy{2X^byoDEDTuY|8nN2Ug$d)Z@`NgfbAf%u?UalANDS+4aAfL}OR*u=eXOLXu zWY%u%VQBP0I@?+a%zi3?OD*1Q+S$f=Ty5}s$ z2%i~qTKM!wu4i<3khfj?8dk5{&ey*1BeuM}5hEJ0I>HmD5R4eU{e_>h`Q_&zGYcsM zQV(NPKroFA3-`w&j9UYU16Q4^iyODQX zcR34|%qQRIkt9{5n}SBAwkYLet%FG{p5vihl}5qYv?HnOgm*`TNO735uhPT2HgyhU zf|Uum7ErZ+6*JY>t{rB(v{r~>^YlW8ys4g))|L9YA<2%?bcThGU42Y4xR?rb#Rr7Noq);k-i{IYG5^@;7~Ri2aVE}ywy0u z#a04z5YpoK2<3t>;Mb3-`8)(cnr|Wm!gY}u7ti(Ss6;sB8d=+lfA({)1)7*mZ<*`;_v;gU%b)7L|K_N*rXdOXPLy{n+Oh*lIKokclQw%UV z0bM}2%|ymyG>9=6L}KtTcn%mTsU@in&sfQedq-()_L(0Tf-`-Hh(qMb(6ya>8-EvUUT{J^nbj9;cpm4A)(E30W69 zJDPAM{QLVa<>4px@yw(5QJ6dli=AZZedjyh$WtqKuy@B^S{fR#u4S||&cb76 za{Ucg(3}-C=TjcmYc4#KpZxMMo_u-@Z-4t~%%434jYaF2kKJ%NC#*Puw_W>5s$+`8 zO-N)+Y%Mcp&O|wiy<0YsX>MT7+)LTBXOypf^<8Z48Reo&ujkEgyo6dcq1@X`!{q72 zG+?YGlgm-g6+st^!Fda^NwN4wCU{KviV5o24KdFY2115W2|4lBRwQqO}R7yHbG%2SIR_DfKvx@ z3JLFh{|y{_?5SLR-E|xhWCFs7e=6!NX^x>i%owyB8Q-Nqy?Pg`zAlOX4-Uj@h{)w)YF&q(Bm(Y%{z!h;95XL7-EFg zn5c?W3LPbciNVR`aWVxA79G?M2c4vok8}sDXH+IYOs)~63%B;XdS%5mGyhd!{U5GX zm%sIY`#n7$diU?gMlW&UwI8R}znj75*Au^V2q)8qpU8x2>|ej0(E~k1x7~q?A__xQ!n|PEmYA_&m`;^L&uvBK zDzsJvtz+Q$Fl;5UBa!t5duVusO$Wx(LQ_eMPLNU%M={b(MZEdO77q0Gar4bTgG@Gc zOq(=C9w6LB-2zL}JhmGQkgP|st}!5!3UdwG1-I%ZCr!GYn3f&M{?g=Uads=)yM z?g65pjGxc&$ldpH$(2`-m?F3S{x9TnO-!4yn3;3u(APJDF-Zzk)G?TZsNRv%Iz}2l z6~tN%L|7AGY@ELP;sE6c9M7+NBqPYRvTa+5&)@V*w(c21W*ZT4j7Ngw*mPuO!LbgW z2L}%AC6iIio;8!_p59D8+sgSDU&ss3J;4(X+{x+ZU(BJN9o+ZOW4z^(bEpOBdw$ZS zZVJ<;Q6A}M`=(7Cy>KxicZmMpURJJrmhazu8y|T06$}jzk#A_^zkYlt&ph@hxwclK zu!>Y(T1X1ZZNK{?CmcJCqmODtMV`6 zFSkF+mgiToMR~mKx*A{o`iIH7Rg!p=&dv@-NB1!{xSP_jPvfK+j06)@t5y1khFNja ziG)#1-^PucbM`T;U;8p|ee?IpHMHP6E!=(QDo$8-3P1nd4_Ni$RxWtW>3sWpx6#nj z$(z3YZhrRT?@}$5a2+ss>Fkyi+N&HVtxb%ev$Go^U2eGgi@f=5r}EwJf1EYX4${@y z&b)cExcJ<6F?HHJUiXIAvGVy<3~t^;Q!!6$0ye$89-@$I-gP~1x#~^)L5VsePNYSUH6B)|w7{(d_!$>yAu$5wrbS6& zH7S&`&Ju)r2fc3nxBm#hu}7TQsjK_{``Oa}YGHN+KVbja8Ta2mUzjeQd15<{Jo`lo z`3_10eKa)BX2+Hi?|Ii(Y3k^v@0zoCW$j9|sF5#ZdG5JKccqKdc^z)WCzm~_Iet}IdZ6Vjxz%PGwJJqT~^Yn#aC9Y?i zT&XA&8yLkPygXqTqg}zBcR$E84?Rd_d=%v!pg)u}bW9>hf)r5dD5OZ=R7i=nI(4cj zh1D7*Bu)xl!XOB05s^;cjA3FhCPsKJiLq#tpp=WQ2b@N6Qa=?4s!@z|e4=uRj*d=F zI`Kq)x#5@OGd^=?&0(;=k5i6a%0*|M%4=hX@Tr&aL~2ovwMGgjEtagVYtB>}Z(s~k zDU8v?iAE?VO-`22nb z_L0V5ym}j4SWKgbO)OR#LN`Hp64U16mTE+6i0u}G8Lf`s=OqL|h*FYFHbW3pK{|{Ljj{I7ODI1>Cfks{ zmrR@%4{<9j1B|0xIPa z33WkmtVv>pj$_ajOp-^sxs)xGgk%dYj>-}OBF(_yFHdjbkH5GRT8=pqVT2CA#^6Yh z4g?;K2Y#WMC>Uqcnso>%7z%sH<$TUQ?^GUs_+eH)^bm^{&u4${5EgJfNdoNNy@zUf zf_!T;hYlVjjxCwiDKI+1l%uC`);VX;(BOk;!pr43=bW>-?Y7nQ?%9Ih(TuK@NfHC) zA(kvYk44AKCg)ed6vz}aT>0iJSo^}ah$`a<1R)6sOC%-Q0_7@4FFTeKRxF~ikl+R` zULM}`#*0|9rWaFlX=rK0%PB@CO0+dD;mRvtPu6p3Zfqh-A}+Y#WLCf9TGl+ffi1fx zs7?edT-eIMxPyb>HD{f`J@@{eAN}NhHf`QdYs-9whlbd?eLHJbKFfk7ix?dr<>80d zFsZv6tu?({50Pt}LTh&;H-6$feCD$^aN{RlN6)?y+B&j4^VsdY{`E__`R30fBz)!b zzvbYT9jNX}2t2H|C{Zt{J&)0$h^L?2M!utq+kSQzD^5FuOE0~g+y8I}le%Yc&%<}I zZ`Uw_h>?kLo*EqDz`=ubc674hjI((0(TCZ#V<*?Y=j|+5IvITP zrO;L%LF61pSlYi=T>s0X!T()_*gqCj|GnS>sMKN_8XK_MCD0Lt&Nf_OkX921Rg^2Z z@1aL{@$oxAhWM^vbVL&;A%c8e9PXebl;bK^WNGT0LoG2lxLBDX+ck|n2L|}kXTE{V zHBo5kMp)Rny_ak@hmUHs{%5aX(W`LNBIunicl}@;e}1MHnQKD~ z?xu)9sv^}|jVLj=O<6L2ktnJWn{?9>LSO}ibyvqzFRa1VM#(u2K>{}4itD*3Y6M{# zo8kLDNs^>*th&AcEHot){|r$MMnCVFhOX@=nUG%l$;o8EW#LMVsV7T z3Q3r<0MR+0Vj%FU2{x|?Jwa#^Y?MF{ku79!N(pf`W^cEkTL_w}AW8vAPSa;b5yKV4 zu3@${MogUC$)aPI(MB;9o^CNTngUsdp#avkBsItwhd7Lhbwm<|%;;#RHZh8+8jKPo z(HJx|;^uP*#~@_tnsMv;I~&B17*IZ#v2xl?h3rF&dPJ$z`&LOctH! z^kYN{-OC7twdv1YOHEU28$EmX^NY8=lf7HF(=lTi3(!bP{4lXX<9nd!SqtS+Gf+_U(|b zHskvO;nt9uB3?1UgfY4{&X%<=BUPDY%a-xXW6zUu6<1yL2KM$(&{)Wm_Y~Dy4O1=? z`_LFgh|!wNjyw@j+Um z7<%^~NZF1yPJ@0;y7@_A(N==vFg7+$P^%#ud>mKdOW3pb0K0bWASy{3o0~{Tm?)KK zDhT=pUxz~nuA3p}cuY(T^Zc``=-V@nC>HtLSANEKzVdG7&S*j>5!!0bST==wCuR8a z&mVyN6pmiFfD=zSmFHGH$AKuI=z9FRa0DZeiP&?R@e*cad#d zhSSo@hu;2Cik*w8RVtiy+NB(G>}iyGhuPV)i%fHou1Q^N+Pa&!zy1BRH#IPO$x_z8 zyq42WI)f8WUqOFwA3ZyEQ)p};pDR$QIC!o@E(5OXryZrbUeSuw6k}!T479ecV>B9} z>!UtuoOt32+MA15EUr{UQG~D-S?9M%nR;HOlz$)1{X=mh1xIwE|5y5`|H;DZ$i5W~ zpv4GowguN!ki=LbEE+c(p!^XWw*fcn^TsPK;>?qlGTeKJ@xc<^UDGHu6c{P>p&Us^ z(==XsWe2~z=MgeajyMX?%EelPm&u~Ky0J!K;us+X*^F239HzU2L6h-is%(ih(kcr1 z92SGoArPf_8ayOP%1x98YZ4sKBZ(5mN5}DUd4iDvKJgznaK`eb930q7F0077lBR}C z8bF;X5~(6hliT^z-Oq5-fBliDHjJk%IuhupidH@-2c} zK!@o@Eb9To^(dahwOVR{O+UxDE*)*H9J_cC6GOv1@z~?+@9!s@$&v9~Rvf>AS+nLK zwjRL7$q|t|wjO9;Qk|Ij@6H>?L8>|&R7!+YP6W<~A%laB92!)D5*b9K;nw@8 z-S-&bL=|tpM&aULdj`cfEM=HH+0hY(fA<(|_di4Po-u^$Qr00RE6{G1&RjQsW->kf zy_B?Of6s0j3R&Lxp10H0(Z~jkHn*i3ITa%vkw#2NO`HTo2Er&nI7P}8h?59>0XFTx zDMx_sP^*<08JWOg5;c?d3_6>0hSQ4j3ltk#Hj1U%AIAjYA zL>OdKH=ABu&)j1dvh<`AiK7r~NOxxg+jop&rWU#6k_))=qCTEj`7lOH@`XIL*d_El zMo0EhtEIVQkeV*a69FRw{S?}o(IP_SJai1Tj7xuCA91X39f$Gp625ZTzyBcU5GU&+ zg~fB7R3k&`cnYhUk%0jwN&!>4izG=69~d1Sr#3W1L)TGQsfZC|ij9o*?Pl;`KX4Sf z{!omLlo=kaKua5$Y?ep=_$0S4Si~1Ua}nc_K#7RN&2sK}EBNWpx+wKk*}7pPM=gdW z%a*Zy`&L#zyNXlKIE6D#dk=G_cN42DKfCoVp8wMy$U4(`-$&m?bE8L3&q40|%U$f= zwu@{-1E-&JA^UrJ={Y!r(K2OFSy9Ivr(wEUhvW)^nI|o0&z2h4gxSj$v43xXR+hy} z7cy;X3+)T$Fk|mb9)9RCrp=g1=hSJefAVoEwJOt2J_%PU_U+xx^G`p`iW5(zQi~ZG z9H5ZPrA0&-6D5$uX_ru`e-N9C!$UlS6&gcAqGMbHwQ8AMzK!?4@A`B+7$+zt(q|>E zf3iJnFi|Ke(~kImE3kx0JIDVxy8HkAm427ya)~&ONMsB$LXu!bjI}XVglJJC2_2@i zw{q!ur(rAow00F3vxe5ZBA*o`g9Fr}DvhmOT>bjjuzvF^JpIx({MIShI6ZVr4AR6{ z3R7uhl&*XDG^{DtW6_{;$(tKWsGdr$8`(nM54ngxE3KaK{df~Ju-ft zCVt>+plAIHlQl*?pYhdI-ya{t6I z`wniSG1rcgg15i@?X>tgo_OdnuB_@5t&kCEx1$!qLhoia)TN=?iL5EdrWsFc;WUfFdlSes<=4q4g7cHQn zvkjWEB(*G+(4sR5Mg;iP0IwVou6c!nPdrbdW@s?rj0TK%=E!J;-!nm1-#Eh;%xC2N z%b9!L1vD+4!N`^!jfPrCp^`f84(1h=IH9@FM6RWYXZG&q z#U~!)!pq*oo8SCKZvE}AX~=o(*|(dXU3+Nl>_9jkVUR#&AJy?Th7R@8-Pyqh-hCBY zHg9EzY~#&udL2zoEv$LrMV@@{K14$vVYAFxcnnb((0^zbQYmV+kgmzodF^GFv32Vf zo_X{U+^k0?<6#m_7}U7pogd-Ap+Op2C-M0&zn_8rasK_CpX9)<9ps7)XcK@+fv1=X zafUp=ki!5&h9S(rkh94dV~jDjal|>>l4VP> za#l;7yLa!rLREc#)Rt`K%=~`m%sJop&76y+tL;m=x_9re)~dJO_j>pqr~NyM&*9 z`%c(jMrRee4S>W`;AwPFcOyfag7nZfK!;Gw=8?9OAn9Z4nsqEWK1(so^6Tqv;UC}p zGUm+fWMXQDn{IoQsj+cRIr&63Z(2_yN-$p5IdqkeORMM2x;(}teL@JL|M=tBl z587jF533E$Y6EEmNd(gO56+HKV~ElejzoQl?ZWOI3>2oT1iq=VZwnkghH%0jaq zBQrTt5-`@0#a(02X^x~s*IQ8ZNfHk_7x9Z<-NUP|I+H^VEmDhOT4{@mPG8CU|M5M1 z>OM17XKGAOLlVVcEwMEym(JSm8n$nB z2GUfwBUC&r&}`P2nsASkrcD~P28DblVVI#^2{ z1}kd>VG9|gpe({Tr!H2K^8!o?CKX5{2$e)6b)+eC_JwCMwxO5t;SuJ{>tx5ary1M0 zivC51Ku3wkAKlFQhaVv@RSJb};;0TF@5Qq5wZ&R?eL{I$UP|G}|( z{rCTmKW4@c8LLik%8?2Y?nU@@#<%aH(U>L?DM}cMogsbwokY!j#H}exc^^rLHWqCK zCQZ=V@uC_8*i@5Rjjtk-C?O?<)QP+W&S4^O6nD|yeHk3K!S|iW93io20un6HYR+Jd z#n1I)(umMn;3V=GI&@#-Y~NuAzC z10gfWj7Oj?Bb5rfSIlGO+h0S+DJPK0=ZK>QO>5{X$B-sa%%g=Ro}9#_8iodmyGx|f zKPa4c=u=Ci8xUEtxjdz3HskNyi;y0)AXC+B_YB3$j$!`GFXz}xPJzxmjlENB|N6D; zzU3hnY_F3GeC*-#QMs66bqbZXe~C&-lWAu5jnZrmV7l^XowD?hLuf@Ue*3c@@Z)cM z2uL|}?lN9*&QUz`)Ea8#3Wa=u%dfbCOQ%wM>O7r*FI9)0{N`sWVuikG~R*S-F=eB|Tr_Df2M0-w~(JHcU_Y@wG%_dFoXR&Rf9djn5)g18Os5Iz3{bZlIA$LJfY{BHyX0O%0PP7KoY+ zwD6!YPH)fAv}{U62N5>!BJ5@c$z3T)Fts?lp6z7t$V(`wJc$K-jRC?;hEq;Df&H^J@`WOLAj8DIJ$&yMxAMi$ zzns(r=s2NJjQHfcF5uDo)^o>Ax8nB?vUA%W4molq3r;$OHLG^;`%)h_-~Kaf?xkch zom_D4xmNFW2FM2Y0rbO!WEb@Xfe=Z z`RPwS%*rDMdH+9r25RFhS$HbG4*1lEKf;CQ7;P zr`87outHk22!kAHI?FrX@lJ}xpK=R+gVh?VrNd7c z?MyUnD0qZLNrg(|gQggv)3z2=xaHbY?TkPH!r??6z|U!IUH4ugga+Z*|IULeI2bD- z{-SpJe?8VdGt9kfx06~)hqNf2U_HP}k~G0n9?fcnO*>X|`eF0wEA-JZ?`Winx%i@s zSpCSuta|hT@}8k2LrN%$1XP=vx>X=Go)@9CK^cp0T||!%DGFCy9q42^R+wlPSpq8} z1nEJInTV-4%EKB+nk@uAr~vCpqGm$T2y!aqsk`oF$74^hd+!cQJU6OHlBC_$dJ?rUkiT{^sR(;uDcc6F&65H`9m&4?nqM5!<%z;=FUtpj<9fn;s)+)=A?gsFWyf5QGY0B)Sm;9@(%!Vxbl%?V>#< z=gGF$-JN%y^zmd!%kSc`hc~isw8ers9kd!Ptkop3;T^9(ofo~}P#VpYAd^8Gfi?n9 zNjzim0|P3?^P!OK;hpcifop&FG+}>ix&4Y&>ym6{SH!3U=!26b{cf` zLt_zzd|_|vN?HxdX!Hb3<=^Op88cVG_PUH#mC*G~}2=c>y-%lR)j znSJ|q@yugeK~J!|9wJm1_=2?$Kh6F3JwdVP+`CeS7(_cJNIMgW3IIiUs?59rkMj>- z$bC;vvi_;nK#THhjh@bcU;X&=eE8$P=eu9{BiX^_>{_#lts7SJ_V>Pq&wTvrC@&zG zGmnceIh8lP_6n~3-J?8s-~Fs#vzp$y^Ptc}sk2BkhSAXxmM&hwMdzK##P}Gs$`oNB z2||yKt}aw2q^ULK*$RHrVr*=JE!%gqW7lT3Y}v}0XPwM~1xx7b>ZCk5!pO*8_D)Q& zbjf0R`}*1=b?t2ZZOxUnhEzz5NeQJz*US9=2j64g_N^52IrlvRtdihKiea97n8$h{ zN1S;&%T79lIBkJdcmxO%GzqB+Kv+DZP@ZIF&m_Bc>|)W;EBW)o4=_8?AeYIt2jdpk_PKS z)ZAFvNUV_vlyh$i3uy|n-3h}G>xdLdYN6E8#hzXJdE&N5$<0ha&hW_YXIXJn!WA!i z1xFq_mnD_?tlqMV>{yX>+Tcs*>L{YqmfPH!7_=ran#4-VM)6b`qSk+|z!IXZ<+Uye z>>!=?-yCQBwZQrxkHr;9wN`bM;{QVgUeCgK)Syx9VcD{ktbJw^g+i8Bz5dm-;wHcP z<*!-4VFRtGNwKqtP#%p&gf2YZ@L2oq|GKuD$-`e{N>Ae?ccrzRgW<@-^%cgO&l6nbO^z`KIZ-H zrNkW|n8$I^NEcd+mHB+YOC22t#$v2zQZ(HZo-`ef2Q7clwt?=mNy!4ETt4EU-^ zKIgi0VG7j1R~kPbqov<&{u*qvhN#yG62Qy2&Q=QoVuX>1IK`{iDdv29Bokw!M6=Tj zWkR=W&lrpj=xZ4=zrP>Gnlz&_)tn-q3&{pPwieP+&Eey)1l5fjXqd>2(lm%jP_Q9F z1qk264>Op!K|Ws~i8VR_BSUPq#DYT(XZOfHCR-6ckVXkJtvX%(^O>mCs3j4RFph>U z;NAc5X5RCmH*?qRkMh%>{TQ#So5|6=+6p9`0ZAc6~J^i$rF^8@^jIQopDwP@l zNt{yX>|}CeKR^7@_xZ#pKE|o19?K0k-OQS`PxHx-e;iVcmlf_tr~<6euJ32vO)B&{ zsMlcs$Sjpg1S;e77$U)l1_nvCC(njWn|b#KzQJ|B_#j=mEOA}as>gUa$%>(F{;j0N z{s)`*xr=;=$B40bIgdDwp?eN8=M!NGvjtLBW&d=UFcWb0Sts#mb~9rmqj;W2rqE3@ zl`2eRwr}{Y7-@ zVRgWD*WV0Hiq!O{p2O7ie&#J&#;vzL!pP(_14|Ai3_Xl7%w4dQEsx#Dhu-~3 zPI=@y7Ifv9sc4$1;hfXv^M=2>oUeT0$EdEk=qO;{+Knt*x`2t%2|oAvYdB=(VxD^V z5zadMNR}*KNVcXE6^wcr%&q4B31yljB?33#2o?9Gt~j12zT(eRCEw zHIw7GD?Y(n-*zeg@|Dl>_m_W^d`AcOKeUd|ee84W*f|b5=IJM&=K7!9 zfYlk^_Q7}X@>g8O#!X|q_BE$)+G!`Sci$L~-F6H39$}DUc-Sz!eIp043c0F43Cd(NUUFi)OXV>Q!sly>CC)-*huWLoRo=l|~f0x+!&+n5PYq z5hQVp)*9dQNK;Lcq|ZY$SbXD=CJA`3Ytv?O`64S1Jq(k!s5R=OCdCSY=P7hEV#nTn zj82sqT(OL0CLu|+6XELwUkGU`ANRZ8Q9XbaoKMF=?9qZ;KhTnGE&q+i6y+G-`FG z#>Xiw9wgI~VQkAVKm5_RsnyH$_4gAe38@eSK|mZQE<@007e%7=!B1HjS4yYSEkmB? zv<9ku#u#G`(tfRNYbSUv)D$5w?U7=!kf%I3$)9fi6RlQ@LO#Q$wU1Nq0vfZkta)M> z8D#kN&wj>>F1UnTm|@fU^*s61lbm_pC1gAwVIUKRj->AU_|oI%8*e5r1KzuAC7J!Z zNlc1N4GYQ^xo3vvk^x#zZ)fN2k8srcUr+9vA7f`%j?T~j5&xTav#SbAfAC&1Q(hWZ{AFCvH)^J*6R?Hl1MH`A#kC7~S*)W(jdBJ-qKfELB1 z!I45ax1@6}Govic#6x)jewe{l>x4muFbwG&n8UmUOBjB36+8BgvFOMpbd@>?{eX_r z0P_|t=f+#_<`>uBNU3iSl`D}VDRp%4wXgpOPf0Gm=zKc+2Pl_kAoQ8PcnPz!mG&sd zg@NC3=Ux2a=bz!_Z}=4FopU}n-*_v=NRl`v$Y&YdvzvFn<6X>MxBw+2qx(mQQbSlO zxEs1P&}ulMH5#KW9XSa7Ie0*QdX{QEfkZgXl9yuAnACI5LoZk4#vAVAeT!D`PanLT zuA;)rWYMW@Q^AeXTM3Pj4vOogd5{s-PqAc?WT-ak;I;5VK@!)UUMAZ^B}y3^Z?LE< zL+_kHlz?x1=ZF06mp^7`@sZf1MQl?{3em&}N1SpZm%ZqGj#^QoyyQqqS-AAF7jymZ zAD}!wLYOa+CXrjn>Qfwd+$Fr|(sKzySEm~d=bv){8`o^c3aD4BC{MP>K`Az}P^od` zDHrj=OHQRL56uWVL%8&X7jpjt>uFYI$&@mXXl7?B9C7q9yzJE%vt$q!4IYLBF1_q5 zZoJ_!hWC#lI!gGyhptDw;ObX%_Z>I$z3={pfBDF(=_nPcH7&jeANlZ=JhovckKDDM z{G55zXQ$b_D`LgUe(w3*1Ki`^1Nl66-1#_%AGv~0eBvXVcxslu?g75{?OS>9mMP|+ zcobJ(yo8m@2f6uA>zSRY6Bau#ZNV}JzH~}o|3Xv{uwnfMKL7c>-1XQ`xbSsvV9%bt zEM2jfm%aSu%vn6dhIKW5_}yE9fG9C6TsWVFE01H>x(%#);!*x__tQM}yvN z_fW0X@iKWi9q&dx68 z4$UQ_4AQ2=iR*R;p-(OhXwEj77@H#B*~2lXo{Y7YFbuHT$uuMiDQk&p~AvwQ*r&=Uw;&iu4ptVH`jlf`qK?wsoW#7yU z5t_w|hxpZv*Rf~I2EP5ZZ;-YO^STxg$1V0gbQd}|$e(Wi6NUnw24A&nAZgLEO_4Xw zbt$aH=+vz*7K{+>xEg^uSiy+rEMEsm*Fw6$ZF!({x9!&$6Zj#q(8M~S*=n+XY>YiK zd#RZQ3yxaO!lf(e80>}6J$5UO*}r=aONZt$GqaC0w&b$~T1n~*Q5FPl4V2R02X4Rk zzfxcc0WA%AtvO|`rqmfgMMFtJ{;wLW|Ec4+%P!=JhaP5V(GY$dk!iyb|96jhfne+U zElf|0Gk@LyhaA2fNLaXH35%D^XV>oSC?yF*=$J^U8{4I6;yO>tx;Pu_7)rKHIu{4F z`Bt=V4jSPpx0^Edpq<(n!(ZBN+-}12J>n=LiDP` z3R&qPho@ohBw5-U;BVi_)UKG)kN=LvpZOrul`J#gxQSqt0&YO zO=?9!cfLSaZ6buEP$+Te;YZ_T3(Q@-oNs;qXPAto&^1IMS3=5=*S-0Jlp8UpoOvM~ z{c|||tkb#Y&kqyFiuLQa^5|`Ma^{)maMhJp@xw2FjqW8Yxb(6YP%7kj;NHjBw)Qdh z?c2|luXq_pA9)=smM`Z|f4ZHdRwv)lO>8tmXuMEiY|5?;&mw{VU-=Y!da0JnXk!U- zF6b7MLMF#Oci+Pge>9iDxxJKfU95U+Bjs}0jg72Dk&+}0tP)7sg$i?6B;We_wXA>Y zDK5O=ILCQBf@-0;7igp#rHjGtqeQ1Z{wH0xQ-QvEF}|Wsa7I3ZFmM1fD|#gytA^qi_%?U zX)e#i=qSJZ`OO@6%%OC4=8-Dk$tTt_zIQJK-S{<+ByFGwS-*Y_KmFP7Is4qhD3laI zro^?^-p$61>o6iqdA5S|6uMcb)@pFvNvH9HpZ}4bIdiz;CFfGiSV$Dohb4=a@CaM* z!#v)=0>1H$pD-{qM9|wwJhh*E$9#5d+Qyq-_eL(e;$19Ub`-z=-F^K0XTOJxqS2^v z%`fjFN&@(3?|$t6sT?&C*4_$ke(ff62_-Cexnz3<@0 zn{MHzTkquRSHGGgjyS?C^S;89ZMU-LV^WRQ>A~a()$S5KS6~@D>!I46nL@~>du=qv>UMWZ;G;-%j7}oVYy~Ua=uM}o)8I;rK!Z(Pib5vKp51$SIg*;~pwwMtYHx#Fn8T!QY??^x z2796jEK~C|SloA63&wD+8EwKKlj%K-n@A<6Typ=*_hQ+zmJx%5P z=M`~*j~JPt(P*NR7DMxgsMn{cRi_!4zm!x*WOEspM;JSvNEAgRiEbx_89LV*)b zIF8<)Zgx)8_{Fu?v+BWBl=n~as#jk{)5P3<_rvrrSdNkh^0B~EJ`)pD{Q0iC$z=;v z#%4(e@)R(5$oj={4jk4LWA4&K{o{e9vd@M1p9f_#!yiT}gA2R@Tsx2}UMlwW6o#Trt*I zM+z1|;9;aeD~Sz!irF55z8=ce8qH>ek$E0`@KHLJ9LB3&^Cpt&7~lK$SK0mS4ssp+ z?A>1`pX=b+XCLQ?6VBt}OJ6})=wQuLyV$v7oK=syJUend{KNY{LouI2b`Fvx@RJ|k zK&hBRr!7>WgL1XXcfa#(PCD@f?z#KVJaEtb1i5T`8A zUd4U)KS5#P9V}hA7>r|S`JN(85(Jh^HcM;_t!9-V8xZD7Oiw24+&)3Bdp;r-gu){= z9$MxIJLhrZAMWL`M;~Y9vVNMC8H)KFr=NBM>*>@jV}@e3E*NOumyesUW@3<%nAA zE>tYpY!^E=Z{Y*)`XJo{ov!<21hq!W{H2TO=p01&lGLV1qaf8>d)*(n{)TJGWPQR+ zj+yC*rAwC*h8_4}h!K|9Xr6uIF#;tx=D5@N>_2~>FMjz)40e}TzF;vnKg0u1Y$Pal zk|Y*C@Gz=H|A5B@m!83vt$P?9so{GO(Zn8+3eT~o5 z{xY-UEy6iVvF&>aLOT78HF$*rBincJ$H#9V=sldy-hS@<{x?zGXP|m|dDDwt4YCWe zb*M@T^UkK&k!NPhT5jCE5&RyCg)aR5A!0uzRC(^c?RGl4`WRZWoQcs|S`|f>$ zfx&)W^rA~pfgqZlB#j%~{pZ^m-nE0#{Ud}KiP45*jy{}~%a@{)CbR7za^H6jNH6e_ z#>p!@Kq-l_0x6XPjV6&RCfnUBsoHU6aZ1>crIjRH_lG|)Il7O&-Vz<9BDs7H&zIyw zpRQ~NxlDo77>FXsI&C3FxXzMsYIbX#eepmclF#SJW^>Gx8`SDeq_SumxiO^@DB(hm zjf3fv>I8H|N1@>46F?d#1VKQvSwSZn&r=u+iSf|on9%cByKw_w{OZ5*g|Gh$OHWwI z^lXh2FFBt}Y8Rr*JNePIchiv*psQ4-+anXb`OaZ?|1k+x2*?y5wNz)aM5sLcjF0jx;4yFB z5Dz@?Fxgy0k{A-LN!v7Xr4(3!ZL@>gqj+}?3-|BJcOq?L45`+{NsQEE}eD9GM3;9kTDFTXf=CgBOh4;VrlQiN8lWK&CvBv$bT&at( zz55w8mSSfQQM19XesmqgO@g8(lT}2mCc`_nGrWBhXoJY)kiN5>+cb6vj{|6rKw+#V z$Of(plSU3NYh5ycB|;zwaygPHqE**G6X}KcUWzpd) ze*qU>(!urTypRvR@8bwF>|&Cj$u-}*g&TkI2w@@MeP8%6mtT1v zci#LMU;pwin4OwNih%y!Ie02Vtr0O)C?fg{d$&Bx>8GE{>8GE<=Re|kjFA~mjvXm^tCdH4xdZylyzK_L%eD4a&h7Yz3FuwY<57evs# z><~&_JuWobT7+@hDQjJHSzDL{3UXn9ZdGa3>)5nRvVWY}juP2i4&M*j8nFN=6j2fr zm>h5W`#1A~3r=KevQ82^XJ48|#8I7ktxP6RjE?Q&k%#W#?pv;7ps$bd>1kg7_iy9w zhwtZ)_uR-y#~#I|XYM5%$EfKEPF!{Z6X%@8spoVvHdSYE&RnEtF$%Qr;aP#u&Q<9; zSqdQ}Q4|wJF;aSjVSslap`rZ}rI2`j*eO(%G|^I$S6e; zH|Xf@rfNL=e13);#n$&piDbcJJCpvCv5pr?jHjv49SA zo!SCG(e6|oXkU9$qT~U`mZe^+Q)|}9WpduyVzb{PVy3GvE31pV;~I(**TC@&ekeE|zSaB>vzJu(cN5Gh-x$ zfUbI;Q$UlI3R#X2K?bCUQ5s_<;sAKix{w%Y zA)83Nrh$eFL&X=kZKdOlNePM3L{bteiEX4L#xhfHlB5x~6p+j1$z)n2k!50f7Ud;` zULNUpI*lC)q=Tw9%hS|nXWhcx{*_jzSOm$$w98@(Gt7?dai6(T5NP67jW}sTm1Nq^ zEi_mXTJ^FE{1d`O(-?bjbo~4lJ_oYd%z?Ygff12xThSd9)TB-7Q5|#^gwsi3Em~w9 z)lX$zG@+M5&Gbu8SX;o&4 zD|^8c)N4(IjuE8-mKfctQEqHMun%?Gv9>0|y^iO5;w3cN$dkXo3>mN~&!HzJ2ZGOa z+hDcrh{y;7n3?rqi#hA8DWwd zi8jc<=b2THaNKF9a@6Uku=at65ms{C8RxSh|1_1o`xxIpiVioq1O-n*(xj_zkU!q> z6z_b`dwKZY>zO~)&895{y1GhS^ZlRl$J->I``DXVzHl!6bLVpUnM*k1?3eJJ?|z)W zf7?rV?14?hNrdv1d)utUY7g6Jk)PYe<(Hkt?Kj=Qx=ri()EC~*>Qz-9zVROB&zs9l zH$23mBMN-tlYhsJzkY}-t~`qiE;*Lp{`Tj*?_F=<(MPv%_bq>foKLgaV&THYY}vMx zy?ggDG;b~{SHKUTP=KxL)-byND5|q5GE@Xz1AO44pXRJH&td(>4NT9>k}c%9|MAt7 zvOeWXoiollkIt^X1CqppS*Tbr+PIa-f;ARnb(X#WC z9d>}`)R4w0+G=9cB(5|_YY~a?8JU+fI6`Zbem*}8+ByLM8oR4LEaXlaA*g(TXrU}zzioOc2DKXxZ~-+3RM9i3RM zNu!p_+prN~sF<7_XKe3gy7DFV?;qu~7hl52Xpvuh;`^*v)B*hgyOOZZgllMFUB|EeC4?l76OuSVNJ-T4u|gxHTeFn%P|`!t zaK)yO1fGvkJ~0qt$@(76W|Q9j9_B540gv8$3#;#bgi73GW&aX-G8u0B(U&>2Gtb-= z3usO5VRFl(yxfp zECH6mp?O^N!WZ()`gKgqRQSLv-b8TsqhJkDCMH!4I+|I;GkZu>lT0rJp+OrBO<264 z4y(4h-9oW|?#r{^*MuS=OffVBxp)L_rE z8yJ4@5i*q){=gvBU^6Xc5q=&uUMF8}(C>RR0!`FvkT$><3X}1PJ%Qg)c-Ae7#F{_} zjCJ{iMhJxGST?B@cy0NO#DXv=De@9%tvX6t;<)K(?#&h%e=brA;-p2A zwvZAB&NL40=Xrq}bs2-F96eu2X9+j$;z|go-BZSQv}_r>V#WF(LO?ogh^#vpqs}8l zgz_}f3Oto3o9U)jYtT$)!E0hofG`;fr4mu(+=)n^Ae%>dA#vhhxH*}pR*TraYm_)m znLDqa?(P9RnGgtpG7@7`5}D9!B^U&`LY_vWib$FSriF-W#PwOU3fiIKhE%&^NJ{Da zrshDxfIwNtG_uw>x2+T?ZBqs1Ap(jX0LToipJ^l#Co_I3HoOLEo z|M@;5<8$os$FqehyY|rnI({<)-9-pIKJkwC(OFu^&u;rN`}a4XK7;X^^z>yp;p9UxK-6l1@d(2V zDg~9op`_fmkaNRRZ z&Q23s7bCU$fqSUcn-oi(Oi#~p&%O6?{`u$POGT0-2a_t?Qm%q7}R!2Yo`l*k#@ect6MQ9op9)B$PtUy&Kc=Vn>P;dT^BSLFIODOcglmGN3 z=Kt-B=w7)Js_lH=|7PU({}u(7NE3|bJIZo-41;wy(Er&N+00<7vxitLn>Rg6tz4m2 znPGI_Fi8}%WBWFQRH!z)N(h%hr*-PG0j0uI9!g4rtcMbg2pxufwCW8yOP!p3&N(bv zyofn-1}SxRkeHN=bq)`UYdA>Hb2tBX*wE)EKmQevKk^jKsTN6dKgLwqx_gSD1q&$@i;Rwr&^xpQ>3KZ0_G!wq6?W@{ zW3PMz{!?3Ed>_?}VLTHvSNU}MlBrG~!iYJw2C0|DcI7e3N3;woRwyM=p2vU{l)V;- zm(np4;o-Aj=M=;L@^ccML+o#%bPbWS#41mkHnAe1+a?V99)3QD9otDu$E1NFwmJOB zC$tK3A(@Ot>cm}LGQeVK3Qa2`DF}t%G_(_maDEhtQ5Me=G<+zBmQo5?BMFQpu@(^o zghJxS26do$I*4NgYK@nl@atidW>- zuY56!7A|1Vp6yIdj?-#2h~pN8T$bH?_F%Nr*UeU@sWqx7CCO!T7;RC?$MXWPiXhA) zrEH6SJ$%ncD5u>xkPYeCz%})i8~tHD($ulEgtVXRB8@W5hoh0O`CV* zI!2ywVdL7Q*!Gx6Dv6R#H)D)NrxJmS07-O=r(73LYYjr6lS0pV%N4}dNqgb+RKEL|Kb$sU2UkB~cYBtG)kO^Jxr*0!wGC@EpJ=QBuNS~L~F~kWy^TQE8fV4Ewik7`dNq~ z7M^qxpZnxTnVFvEL+}4rNSZu+|2hhVBl*Q$f8<5y9>#;KW=M@fc_FmBx>6{F^}tiq z8Wl<%Dc}0$XQ;O-JofM=?!4t3=i*N?%Y1Q zx=Uzl*t}^I#m){^9DW$PNA{E2052#~?CzyJTj9%J`Vyy~eg;7xsnsI_r3iz-buF|x z7%OJ1a|v5dp@hIHi%r1`1B?|YsociK>b921iJh&4RDx&S2AMERCY!~VV1+;=DPHOd z4k;y`lvttgv_yCgK1xz2lT}#R0BU5reU^34VcF3`uAO2Mn#~3~ckk!kyY3)VWiq86 zyg75pWwO{b!Rmyt&_fc{uvrg3P&BJ$s`V-@JuH%_c#%K%@#(n<<%m2U(@TYm&4eX}WvcfrfKpU9H#aL)eNa zZ+sZb3)@d#@Za(9{`)*t3x#eXYG1@KPz2i;ys>%l?xtL|O$|)@|QOD~?HxMhG8Ybx=uD z_DzjoEZn!|SvLw2f;-IJZMUrxLK8JO_QV0!J-wNk(J5@4uw(NU3LV{C_Oh$_+`qnu zZ{D8r_5OK?k$~Q6NGY`>q(m7gB^sFoB#|TtLst++EiCRLwtj%{L;NVBucqAvtg;Y5 z4$ZP!71A=~+riNYe9sUl+S;`cp**O^h%_eSE3#T)+aOG23XKS_3BHtWY#@je_$UAy@B0&_K!I-vJBtiY zjFF^}35%FiQ*8`mb&T`^1ghuh}f`~-x_Grw<3kzhkC5nXu`W;E!s^KZi{Go+pb6HYg-4joula&5> z^C%PwY}vhwxa9#|%v*Rk{hi(H*|dTB^bQCkh^8szGIVy#qqWcH`=9*?#)ZpKkD826 zPPto*@bSG28QDVE7$F@y%NT?2`>zU&qJ)93$=n}7cZ8@Jv`?}8r0&My3HK%rxR zVy;LB@VnnWMr$S|?C!;qAV}N%rWT~LbPWzr>YmGwzVc^&cf&2zq6TTT$h;HJA5UUG`^>h5~8T(axjIYAac}NWduzSEsi{9Ib&nP z%wISk&r`Ho8l@zjaA_A-3#8w6!U;Dmuc67qz7r0`Mt3*WK}* ztmEK97qq{gH)wutB~)$EccvZBW1mNZd)@*seX{uu4m+%arHkkC(387~XUmvI9nV*2 zlcLjz#F#cx1EM5G8IOD^hY18p&JY$AEeWwQR1ECan(m-Lx#^J=1!~f;r7{lEBOeC@ zslf)Cy5B%*A72M9X!{_>;CXzs1HrY%9+Vq6J-l?2d1VnOtg>V*WQ`$JmPl%}RVd*R zYC~vZI#i0+m7zMejmngvW(2eQYE(@pIlsv2$DZJIrFSjcwobNCiZTpXYnC4 zQ;8=9p-3raAn*B%Muy?J(1_X;8v!-|oxqU-@?}kwy3a%Y_pGb_8x~k?ny(k;34D)V z{r;c0=b;~x&vpI3a<_$$o9@vDzp;BNrFl(21Q3l zH-{g3IKRK)w{#6GAe+xIF*ZR@_X75=-9~d>2e~i=+ayh$3r1*3F7io3MU?Z1w01g& zb`D}{L0V0iw48P)=V6qiB^&8Fb2j!kkPD^`U@4@BN!#h}(sLXr4MJp{Lr5q1sl-2E z4{kdxjc(`QNsEvIi6lr5C^QAiI&RB>6kgTdxe6gM%EPn+u&q_jj9?5pHN=4+_9S_e z(qRmRjEA4iQ1Ut{$ZmX_C5~fao8T*pFdkBPSS8VE10@Ae=DlxuD{pzr8+gzA-b*#A zgYXHHCRvr?b+3O7@B8?NdBKY>^n_|~_+!WX~r z4LF(}W&XiXf)?wk?_ppdD9R06qN9?$de{eY>dofM0G{Qi$Ovu*2E zKKzkSkjv$`>dGrwuwWsT*)msMeKoh-avPuf%=c(TF*bBW?^?A+QlBMiR(bk~$H@*Y zXU^O~#D?6n>EBOJDg6Yu8Ni z*!^#&(QGhxXfDM^cJov!Pl*gVT>{&!g zFY|^L(mPP%m{a@s^P7Lh1NZFX9dG;^U;D~+{KJP|#LHfJ31j0ee)F3-;u0e&_MaSLkcJcP2OIt7B~n1KhB&+X6jFIq6xw#okg6L~iO8GhnltmxuDeEb7tSD5Xfr@Nap zO5Enu7_8P#7GiY!Y1`+TFhUaMvW!oSlkLr8CB&(wnOIsvF;S^AUWNfFnJ&+;fA22v zhTN)fuv=x@dA8=?DX^aR3@z<&Y}XM?+X7bQ`wmQ@HQE}KbyRpQv_n=1MUo~+15v#} zPfs`91n5g9h_cfPe)LzqoTCP!FgrYN3x@y(+L^# z|44DQA|v+n6Qu%hB}PnkkvKo5)H< z+7e{^ej4?Vr`GNvp+L`^A>y7Qv)W>##05FyTGHS`pskZ6y28p@tP!NzlEf`H0zw?@ zMjUAUN+d$Koq3Yzg9!*i2(&OnNklp`&XF&CF=w59GJp8PO(3)Q%45%t9lY|DujJyB zzt7UO+X!yI8?CkzWnyZ1A3ql4TLB0kr6JRB3)TULBp9rgpcE=GE|)+Vm$4%{0Rm8PZ{SWM_S;kgE1dr0Nt zNetjA0R)(|#dp5(C0=;R1$^uK-(qTVicnj&t$l{uZoP${Uh^%M4fXS6HplTt97#{9 z18kGQ!9jNI+)b<1!f1<0E#2K+H0lk`IPFZf@7~VZ&Fjg88S=S2y6r^uJy*QyB*j>Z z)(M{H5vPfZpg>S46)BZU#EH`t<@0%3ttvtY`upe5Y{o=s%+qVvv3Ku277X^``$G)& z7U{~u%=m8J`S-8m^fS)_W7t13!pOccHmzI3%dWbFAO83c>>Vz%>ZvDqbk$=>FUHm< zSTuAJ-~aB{=^iNY@SXP~WtHQPT}G`|;o%4GV*T3HjPKuzB!gi;g>ZhmX!aN!>>><9 z{2)LoMUq75)ErE1NYaQnj?rmKCX;oGnGjA>=lf`*@jRcv4{0`?$h{RsF2x{?0VtMA zC@HDe>vVKc<)yc@{ z7@b9rQql7Ex4eSyeEV8vc2APc4v@(On7BcrW5PlQiIz0#4T3O28$+v^kVY{zGlL%n z6o&fw`Okicu1}Eb>!&d}O}4wpU3cEaO~3gX+3aEb?plw^tfth}NqPUXeCFft!Gtwz zIVI>m6u(p;HMB9l_MmYfEc7tBFXG*A_&T=Q0qRiFI7W49Hg0@^v(Nl3VVtFRk%vw? zD3mhXb^C4H|KRuOU(&_c?m8wNpwQKiFb%*G$BA=D3&jDaPY_5qb|%Kp707q>q7K$1 z4yuVY7@d$LF=?70lNe!Re32(=&5)u9vyKXxrYV6^2gT0+cB5?DLU?n)HThpjw(=Ks zoEy7Y<76eqB_?wq&4PA^R`?#ZR*kr9cw*Hms`L9D637S|T9Af0td}s}nxa~rC8<@w zr1;XhEL2^T3Mx!}kB=XRyCP^X= zJK_kAJ9-IU{rG1I$~)*wtMmqWD&wOloiaFQkSH;Dr5=9p^K02MybZsnzpb(J9U$2l zbdnPIAwJU_J^+(t$mC(|A0B1Lt=F;e2-PAn>2N5&d`aQ7mlbkI~Q4+2PyNr{pKkZp0Z zY|qBs$*+`$Qh|$JFfNo7p&Sj@b0M@dk!It@E&TSnKe1)&b`DvwlHuWf1lbI~{P9nT zTZSK8{tBvIg31_7)*!O3`y&zwD6CB}Nz>&cw(Z{->z;>ntP`sZL8=icPHZXLUB&i| zPaMp^vd_80ERL-r-S0sg=ed;uR;TDFYKxY||F{=zo9SZT>EPV^`8-YrPSDwofW#`@I6{H zb)dzLZ5!FQYYT6A+nZUsd?`zpF9pDFOtNRiLR$41zW2Rv@tRk@obP_=n{3~_9;9G$ zc-U!-jHO;{;3=Q9Rz=4N8&^Hf#Ow^s*%=5zlFBSPO);q^;|F-YM-n9@QG^IQ;`V!0 zER>j>oT4=qQptqO)~X;p{J^IXRq>Qh5+~#fIaVIJlGBbmoTK0Hw_I`MRdnx)KA$5DLo%5RNs^GsW>HGgYQ=PSb(6#iv$M0* z8+F1kWdHsVDwSCR4}w4uHxjxEA%d9xo&p2?{p{Jfi5FdRKD&19B$qpzt6p|FBg30G z?W7~QfN_3JCTSe9nh#F0#P{c`s zP7+Moz=(*(%otby%|*QCm6x#f*-19<*vudQbU#yL)ATJ|#?_a#xOPvPoIU&YRSPxI4XeV^&6 z2GyxL3l<74e&I#znb^qfH#|%(I0Qcva^a;fBuRu4ZdRV^C}u(m&whay%iCIELVX zd!+I_Jf&QBh64dX_CJhm`mb?M-AG)M<^yiWDncQE0Sj4`3{F=g;H#lTTu3XaSEu@@HOhQihCYDNoEW9miCL zCs-&$$}wE~yFU;`GX%vhJn2wGp&wAL)UY}t@B`{m!mx%?4o=FzSZzC7OoW%u^MBj% z-?qR?(-u}4jLoz6$rKL{KldD0!wa7K-eLygsKl>+^Dt|l87Dh<9C`KVVj2FEARrDUYfYyDGHz`>w2pTD>B_N8ho=1}=Nj5?WAJKN`1b%>0 z-obpZFq6fLaCEzNRD)H*v1+7r!f<1eSUlxiT}EpN73c(M4MGN_R-?4V2#ac8^d?E# zyH)A*IPy8ieMTM_3AWqD+PDwbSV%NTA0(uHO6vI}X@tTONQJuMGW6`38s9n3692=o`>7iI1A%q~2lB7{)WZNc;O_;NI8U6hW z5W-`4cr(Rp53hK+bF;2_;t9I@3!HWK$t+yZPjz|^TbB?yH)xNICqLQtMZ)N0}T0e;{yTdp4L_Gx1% z77L_FLewtIYUOE+(IiomsquXnV_EgY!&qyXZZyC|oO061{QZ00&C(SssFlY_lLk*b z@))E0chWO=h`eW++`AVmBxEE<9C0|~wH-9#7I;3s=V6ir1@2r1gf>o;Z4E|9l&4&0 zr`hDZ3r-?eG(59z1ONQlSM&6mHPkCDzVp4WFf$Sm=9+x+6Yu7=TQ@R3Hpc7z?u{IM z)KLr$_H*QMOWCveada+^@ZI|(tVQ6V>$4OFGJNKrUq@e8ftEgsl_$QFH^1x~sQe(` zyylb4>FA<&?p0iW)>C}wwO?TAF-P&a&%TdFGQ;%LTE~_W0^e6y9Zj}th)f`fnoa7p3YE$Xanz!o#B`LLqj|Qx58cKqfIupbLN4dzP(kQY zdk=ip*5Z2}zVDN!iIWT*+)j!AvIa8W^YE3MJqS{yh#ia0rY^&_eM3uZLZTD$g*^32 z%-+#)7L|M=nPEHvuN)J2F}pRGLY6R_Col$OA}|Uo6v7I8YlyT)N=I>TFC}j8`8*Vm zwQg==4M^$Xs{rduOq3#V1`^YrGAN{r^+;1J5@~%Tib6+;uYcp4-1?{A5|_(#_YGh~ zgKD!yJxSOyK0}Kgs3+GjU9HhFSpwff>KLmHN(Jav6Vf`uMg+>^#aFx_N-IfJtj@yX zUQC#EI$dl3T44Q`8W+YO3x=U96J~dNl!u+0RS1}^x-dy8q1%IJca5@b>pFtsJfg~e zgq+6DSz4_+S~qFdD^yIK?&b4Q66%en%M1)Wj1+inbWheV5ZZRIvr*{OLrIILoV%$_ zxjJZ>70+Y22x}ZFz@#Lp%V_e2b0{V{MdI4)TBlg$VU=mKj|6Bz6gAL(NG8aTq%lSq z(pHUDvr0A_GCe)X)WjZgrMVOfoqY6DpQi7a`Rv}bl_OAOnvx*(u|h#pBK#bYRHTW; zkKB%5YlA`%Nac2AktPU2L~Kd5Kw5<{0+S|qQX!Ob-7t)Ms%^WyMq+J()V94l@^B&m z53LnR){uCvQ>HSGfSe@BLFSda0S9E#wyvQq)>MINgY*<$kU=L2HWBzTk0;!71n`W9 zH4;CQBil7dhZ59-ah@zk)W@ofNU+^=vC<=lAZfM;WgcH@Bo#tG0HZ07jPU;VyqU`` zJC9%d;H$j+Rc~PT@Hoc-kcX&7Vm(pk`|3xjcTRBnzb8Pbl71?6;P?RSi61;lMg=5-xRu;H-7=X=d)w;Hs;J- z!rk{i#H!V+XeA*N6BAe=i4)DP;m!Q;$3Ny%pZZ7YQA$r(Wa08T_?d#EX~dQkkHB}k zoT;&Kjz8`ge)_xLaMP`SA`AlhdwcOb&xx0HN~_t#T8r=b_(C3Z7aa)L1xpxaonA{w zip2uf8hquG^_^qT_kH}p6>Qc*vl&q+WXNWmAliZ(Gb+L3t5-9!Z!d3t%ilRYpAw=d+1^FKgGkIx_P_$9_O0hyqb&8If)OEW67cdN6v-c+&9c^x7|*oQX$*ZhtSbM8In+*Yi4Wf zMt}n6pp6@J6a#$O!bhNKAWe<9K1rHHB#jDz$P#!ST366X6D18YmuJ)3XL!}C{+4&Y z{jHpK+Gz;sVXcdk@sx1m@m9mVe{J%aMZ(`HRiOkmT5Y$l`@MNBjjx=US*>4^GFg%wBjF@MQo zw(T9kwqm3offNTx^g>A_7GF7xkk;BU>a<20(MB0PhjEZnIw!4i0ouwq8H;JZ!wMfM zd@vD)*oohDf-#D$XW6`E9Xod<^r{X{Ti$~#W~kN@lEkNMGi=^G#$(_4KK0pdgjRTg zah+QYN;>{l-cQ)OeLY)S4Mah7*B`n4>g=+iDd>GNYPPDadb6$l{cC~sUuqC;tsqSy z-{Xp_AcSfqX2-4uU7ekHUYo_JA})NvVdT2zlX?aAZ&M6!+X_Uqnl%OnODK_LWOxUy z`ZQ5e$5?}|+4g1rAN7YN3ITsXX@5=#$-g6+Jn((KR0LiIsXT(f&AicuFv#FZL7GGa zL4fZEWWpTP*$Pp!hVVM*$c9)Ht(sP@0rm4@eGte{jX683kr z(>fEt5H%Ypogj)Cq~{~!CYCHhI8h~9LF(ZZ`oPblW~Pv>CP5e=f{>`uz_c3Vb2$h+ zs?#(0nG7OdLinC*7bYqAK7mRQ)=(K6C)?SH>MBw9T--$}4RIV1S`T04@H%=3<}RSs zZ1U9pX*MHKxjb>9m)7(QBniY3VK$4%_8ZaF<{xeb+7B;B`MFY-^vjup9tErZOeMDyWuvXB;>q{FL2}h?jB~V zRUUuhQ9K0${k^y>Z_iof{Vb}hlabL8qNs@q^KNs~UdW6!2fM!73WTw3K9-jG5^f8f~XynD1fjGuyc3_6Jz? z^cGG#?G$pk0!oG)ar6mHm8ZD>zWb=_9Q}({kjv+&P1l?_-x^Y#(h&x(+oBwCUs%xQ zK~fe*fuYQ^VE|NL7Lor1A=%DE|ZY(a$7(s2eCj`FLUUPot7mS?wbVe6(EjFj2X zc$n|}{u`Wm-pTyKd%g>yX5*F-{^>in(a{s~-S7P~pZvrxx%IkRDGU@4o;-M?63BLe zE1Y~mWT?05+;h{$)oYTEEI}d`}><29xv0^S)yqY z5^X?uU@U1fMul0DRy%*Nt)TbX$sz~i2iu!@BLvb$ASF6A?XH%^q%MUK8DK?#l`TA_ zohivGY-+JmGPl2vLl0X>Po|f#txxdG&L&;fBNz4{dO9$bVfK!c(G4GE1B`UtE78^> zYikL8pW1YtmTob*ckA4tzE@mVZKSMPwd%2s{+^#KICR-V^-68Sfi?B7BKQA7he;t@ zaO78j)Q>1Gf0jcJKZ5DX1i5_3p>q>HeZ)JNw_rYxJpKfC-ZDu+baCX-r&G*lIPT~p z>Fe#}iN_wLGFxVLc7`O0XeAMiW`(HL?r0f7)HG;q!KV0u+g<56B~B93Bt;*XdjqL4 z7_G6|V5QSnIcJP(m+#!Qhw^M0PrAKeHWQ$&MPWc_e38;qD$?KA&D%f!akg&W%tt@} zNse81ByW7(8`&|upL-sDoI)X_)L8^6Xr(D(E~LA^pUha1?UQ?Wvf7}zXa(DM??8Bp zu-;-o!lCbYD}}xs(bzuLtbU40S_dRa6k`%aKHtfqD^}9i*GG~Kppc_6F~P0(-bKAS zOCbmu9T{f-$S|I=WQrwfsUh?PVIY~99>?F(`e?(%*r zv-`+VWo)d%RJ}}W68d`w=qhwjnI6ZsDpV)-F;;7`BlStM9kl!$x>jRw`CMLl(edco z41c)se#WLIC}z6Q)k%sya|lZvOik@){rZhiNm#pn51;t-*I4)LW^TXxPHY-s8!Z%) z!wx%?J#YU2hpb#oU}L)bdTB%{UN)du3Yo5y@$m>UAs9{8&yaX^LeD29MYNr8S~wS{ z$~Z%Wv4%KK&}r<(0a_CXk4z>YZFl{wfJ`PJX-F#CxtV+^XeKFPK2M*RLo-VG)wRE8 z+nzC|KKxmf6{K;@vBw@qAzxtYo{e~ZK&ut8V9{cJ^@qE7cKs&0dwQ6yrUYRTKg`i= z&I0pz`++rlc&f%ruX-UFFTl^2sMi|g zGkLnZdR%dsrf6eGBTaXI4{?+*Iyy?ClYe*NGi|GgXit!>73~p;6YNPTu}08pMMP1; zvZX8NEEX8o;}|Q+=X1==l(ANlFO;ZLWBaok=-pbXot>f8 zm<5?4h>#)zQl#|A76OFzX|+;}@zIG!n3O`HNX835M^sx4DidX-iBX<{sVc&b;Cop* zvNholH@Zvno_aw=wrF)groWP z*Z;u&v8gsgP$RSjtMNR6Ocff7CoHoQJH&l|zLhghJ(VR(m!7h0(UMb+JLQB{ZMOR8 z?CAL29bV7FLC$|DR97RQw3x^gEhC#a<11BE6f+RImstt6iQAt7)S825>BuNC?$EH3u1#OyGJBw8w_&L|D zQ67QklWI2xbS-07Y$Zk@+rs5AlciYd;<3jc=Phr2D~)E01@nd|&sM3`WBiJ@uYT+E+_B*) zzVya-@U6W&`0Ts?p6}muEf21KieRSBJ70J_wX;|9hhP1S%J?J?Ja`{twF$D>f^+L> zNTZaC%_YpK&7-StkoUd*U3~lFpW|Qd{Vj*hSwd}Qiee_@@80=lPCDZhD$OR1)S}QX zR8?43uU^gUu3_%oKFp79xRyBs^XOTyjHFcHXVqCAY3(4h_-}c`yDn$h{DnODlb@ho zb~QU5d6Xah=6Y=E;E{pvv2gKx&bsn+jyYx}mtS!y?|Ikz`2BT1qqpmD4msg;PCWfo zUh<*~`Q?v)%Wr=88?t>Rnn3}Z>7gS{$OxaR@Ss`YbD#QKj$TxvD+^a$eFiUn-M>=Z zzk_*w1%7`0zp{CEg}1%_J%}(vzN3R}+qUzW&wdIO&cXT_<_yl~@(V8IrWhO5z2c<6kL7WHi=# z7^|o^BC@$6%Fobfq_kRwBab|WJMX-M*S_gJ)RPcMIRE_1Iql3#`N@xe4AyeTpC9JV zyB@>y6kfiIOg=+LXD8MRsZEcQ3e$GaO5$dVAQNJYrBo_lw5HiG1i1`&8KOvV=bcY+ z>#u(gG6PC+?%Ahs$@xp!vT2epfBBQFTeF9EzvENfbmJh*W5yQ6@kn9*LbL%t*9`G!_IhAa2%ZRLYDE zR~T>RH$XSTu#N3P`QWFOmShw&t2Jc%?3CUV_)PHtp9&#v)Vf!-^+0F>5KW^cYjE^Jd=IJl`p4nU@mj!4s{&N37(UA6`d2WBL1!eu~e$^L57gOM_p@Je-A}$m*wIfEr+8rw>H7!-QL~B2`&{?u--3;qx8N*Z_11S0&mE!; zocGdK)0iIP=_em##VN;d)Qd0v_ot|HI(hudU+0|j&g0ml6AoFpl5hX^X2u#mrZ5PE z1buz%8G%#JT*2`teGwrutlP8=+X^Xlc9FCyM2$Kp9(gQ3{N9JC*CC&Wi!Qi;yKh~` zx4wD}SH5^J$c9ClA|AC8^~OSSoh-Pd&n0T6X_UTtAQA~Lj zp>kxyIW%TkB=s7HELp(zN<_8XWKLfX*)U|!&fVy81r>xy0nNCDUo2q!kV>UO+GwJU zcE$(VkZK%sQw2UThMe#TQj5@ntQRudYOr_b4(2Ue%K2xW$==<&7~MNeXFf-7v4foF z(WsYQ_sq}IH-Cst+sb&^9O>*Bha7hrm%sE1ZoB^pqBtc8Ggu?r*n|dBWkCg4DcYKu z93nqRF4xbKYj==FEiQi9RUCEldHnQOH#0g?!Q|#boTcG)vwG7m_D{~x-QB}%d5Tsm z!Wcsk1P2p6Mn^|6M!S($Q= z&C}OEK$;{pTXi}+JBUq#S`?#Yj-WV1EA2#AhFN~}aa?%eMf~ErKVnizHj{HYu{5F; zH3>aUD{7Hesw^HFVtnroT&RS>N<~*+7uD$n{&vB16fKX zT=AhblzP~OP+DMQq(W=i7`YC}Ysnwe995jGmVAswOPCelWpun7=xtxFHl{|Xq zt=w|swJ4)`{E>&5nkgfLkl0!PDnZr0MkgnnE410d5A$^O%sI#g%;fXr3VG%X&Er^k z0$|Z`3mrSXkJS;y<sn24P7Fpl9*wda)Oe11s zcA7q45b2a!)TGqeMXWUC`Xm7!J)OPKOrUBY0bPxuA@F@o#>RB!Lh3C=ZMH^QZ()rk zm(4mOOXAE+nJ|MNT4GU0NdvY;ViJV!6NUo6yPLhEV?4WU8e=8dz!G>pG&3IBQ}~&H zR=vVQ_dG(kS77;~EIoD}Dhbeyl*J3@QEg4~=$f@mw+t#yQ38509@WYuzqtN4^xsin zpnrf&u0&UNFPTh^iOH!GTgp4JXXjT>yY|ErUfDC)m$26hd}-Q-3)24%Jcs{l3#=%L zNRos`qt1mFpCgSiZ(X!>0dX2*q(-&CCMi`yIAy+{Dj+@-u4LJhP1&TDTOi)QkDXcfZP4KK222KD&yu zE;|KU327P1^(iu)847a-DUWaG*)@+LW?LM&gMAC?2?z;T} zjy$E4!w%^OV60LmjU}GwAVed~G$ts~LLt*81)+%Qid1!xmPh&FcmBxbuYM7kIg8l( z^bWrE)w@}^unVY>2?jBKKgJ6FKkWT?l$_O>wu@hT?>ANI9F-*`BmpAl98AU-<2cSZ zkHd_^IL*XqPE1$M)_Kulae8YAYUqxrG?o%YCpe#bbK#kv0%8| zU}&OBgpXJ12fv^DR&S=z^9al5&!N;-WPE%C$5l*~r*Iqx&-17^8l-7r$?ZZQjj=)M zXaox1n*oWMSv{63)nAB>g^*}%0i!xeab1r%iP<+kOk1IYwp<4$OX+COq1=e+<^=w9 z7f!AVzikm&*+4O7&*V5e_U|R}^0+}eM*1iRl4cpA2HhQPgi+G z;n2JI0H(_gCdcax%v(wC+(9%MbC)dQnEDj={OON0CnxAAw6kW*PR5%VezC~=Ui%8h z$0zu~um8lEiw|J_;>Ca+o$4&XC9`G-A(5WVsmyeSaFh*%meLk@Mw9b>3>j`(XZxln zsqEWMXVJF@V{H&#K+elk5IO2`LODuUu;O6mFFS}#24u#wIwl-TiU)+uTDzbI<#YYd zuVZw7jW@sPU3~fzUmzY!aa~26HAsk%o*^|EVHz{MZ$Ev#Jsf@NnJB-6i6@at*lRP9 zC=(!sB+VKa9nsb|hoG~YTpClaPE#(AApDG_OBd2p=%uoI9}~mFR7-hGlHiDhJ=^wS zV#xV0wsRLkwW0$R?B4+@12+@s#Bjvme3mUNP*O{QEoeL9yDX)g9M!h3|S^XJ^O0qfa{K@$Pa%#=4V|1gV@>tcQc=OYHHrCH6LA)@rI-_G9UKq+v*HdYU*%ZL&k_ zB(5BXW)x8@wXt;ha)w7ns7%*MMT*WKiVdUX24mG2lfl=&^*G|$$4H_E1HFTEb#^cv zPg9K)D5$3fuh`9;_5!`Vd2)UpXwu%Z^hBv*1sVPI8?Bd1YXYosK;f1|r zR?g|LhzK)Fj*_{?9nlybRA7)Kx?%9RT9;!cPy|4it( zMU9U!+P2;U-(%ju0KRh2%_dR{I=b4KGk-1`!G`rO;tVcf#k|Et^%}LQ3O)V(cKjtJ zLEsZ55u>ByB+8|`vlEP=*{G4GDOziiI6^9$$ELI-5E5icEsT&-kVS?ZF&!Q4R4UU9 zZ`(!B+-?Rsd)dEdFO6yiKTve!2B=ThIq=|>j8uIZ^(Kx2;s{3?`g=R@U6-&?Md;Ly zRZJ_6r$xB6U0XBTIkFI4W5*DV!@_xUY0DQFYgCYF0`)2@k3EFns-*YW@ z-1HDmcQ?v~Oxs{iTX6cQI3)80Z+-J?=<6BaTUT5UwLEhVoWsq({SUf|icKS<{L9C$ zWaHh>@`-Q!D7&$D}Yn5B#7vGu97P@Ce;JMJXI z7BdGdSU{_VeVk4>Oqt zDBnfMjEt1T#F!bjU#)>yJeOu6z|k2P{nAKM%9M zk3WJf+g{|<(@)~Q-~5_ye)$J9_Ds?v;mDO;6z3K39fOn_WQKHX;)UrJP!cHZKxEiI zG|8fc9&dZs#cbU496$Tndd|D>VlH~)Wt4gbN#Y2RY0}KTjeCNs^)4yN|sRZe`CD9ZNYXT$_p2MO``sHZdhO@m`)?oq%HIpD{};PgaU6es z{`~o004%VsWmPrCpp>$Ul9V6?NtjZrH;Cd0*Htv4m^h3{l9VLX_<@6;%h^mprL04! zB`_7J*5|Eg7G_e)1!>YCjT7=g9_jk6_B69p@|R*EAXg~R-qA_l;2ctI!)xo)Q?#}B zkoR0(eaR~k2G(!d!QlKQ9C!Q)t@~Ef)!m6fBXowR1R_i6XzyUxwjFHUyoJuL4u*z@ zc=MazLL7#e)S-W%pU#d>Fc3yfN?r3%ag)F=Q0nNlBfDG=hLH8^xATY1_wel67g%-V z;avL4b6LIS8Ls}}cUimkIRK76;UqfS+W{BV){7D@F3iGTRoenCecK0l?>pbhVFxee zcQ^c&Qf~)y`}+Cw4R>(=ZNDN4%Y5vE@1W>vhW0jzojkwz&2PB&n%~gTo@e*A7g&DC z#eDILpT>xgE57%0et+Ae4DTy*@QIi5$Gfg%%a%R-OWc4ZQ@&TtVlLtAi(LO>;os7*KNX=|fPmFNr#C`Zzmt~1uC z5a7^VY@-=BZIqFev5U^l!Oor5s~naNq5ikb07&RFG5EBeXH z5jA6`%T>$UalKX~lt3EE#8ibwJ*2&@#N?z;tyV{CJNB&AYeZ252+}M=Dn-t7$y(x8 zomo+?<2V!wzU8KAOSLyGmV;?QTr;DQLXykn$kLQ33PA{(jV61C_mZUv`$l$=%e!=U z=P6H3F|=n7eh}D@aShrCTrU9SVp0dw%C=Nq4pnMnWOyI@_e_8`csUO@mq+W&Iz3H> zawJ-Vt6Y>$F$~5?Nvqm<+j}nM6OTPjcaP8JZL4|f>psW(KlVo6 z{FZm{>tFqnIdkW8#~ruv?N5J}+gAUX_r2#_?zrtSw6UWe*O5peiNXe9)51Z8k$mtS zXLINwef;_lw=(?n7S4L_Ic(XwjVmwzF(3Z7H}fwae=F}=yMv>TTF6ybUBlY7&+x4) zuH>YX58RAst0#HFt}kDvYICp>WfBb;@{ z$?V*?fnWdh#~gRWVSMs4pX762_%ie6&*6%TUdjCrKFp%-66@Bjqc2d*9UN@EUzyEO z{0q@Ivv6UIwgKR+NEo!nppltCBtRk0_}+2;>qoz&5CrsecTgx5$(1_j?&_c;XNa_+ z)ZNRX=?Xe*AOojGSI+=RhK(t6&_Z^uzS+GMR_a7L8>a<01FFEZUE$!g?^E}h-&OgAbF?H}UW8?NOyzrG1G zImXwo_#%z43*{Mldx{7`3Iz!=0+AqHNt%TOK@UN$1D)EO$KJU`{`C9Xx%}V1!RNpF zE|z@tojmsBc5c4uZpO=13ONsSN+F-akpkH&YJJz>x_Oes!xJf9;G&cwYKHj5cAj|X z5t3$;Kx&%O7Q=Q*+B#xsjW)1n?|vpKRo?OT_cFHnH*8$@ICFai^=6Yz8#K4xw}bI0 zCRb{st*uCuq+}E@TGP>1ps%;czy*?6K%+|vu zSN`gUUycH;Km0HM{I$OqSpOFs8d+;${Xf%Lz5Ef!F-obg&YwU3UuS}1Rf`I&wQik+ zH3(2jV$uwu6hWbYPHmgn@pHJIj}$fwEo?NH7$0YRa*`#>4y3)iZ5%HAbu$YRZU0^JWxu~riYQ6gu<=E94-eDT-H&o5qhtFJ+VK6We$2dqJ__xf zytr{IXPt2_pZe-okfj^|dxrM0bm@WM=7_^4I*!Pq5Mc~y)3T2uFQicN(OOX`w>tuU}7BcPA@XE~8!@=eWa<;uD|#I*n$X{=Q|znITsy@%gWQlg^HA<_yj!))@nH zJ9yyA`wj?*W93Pne*9_r=Pf3}rI|UXAiygv;*sZeaPQ;K zvU_MNxsC$W%4F+Cl~igWb9&+SJ2&vH?|h%He*1C`Ty-$DMvdvQP4vxK&Mmk8gpSSv zm%Zz2XqDr|4Ld>h@NYl)7~KK9`U^i}?L+JM(2L(D2qdMx9t;su<#0rv$ZF+r91j&J zzJ0~7dGGt*LT6_uU;5HFc>1BI2)cUld|17DJ9V z3o5BKL~#mOaH$_>w$oH^*xWYHMF@v#qsj2-ew>_LuwBQ+bseH8#Bm&QxxCe#G*U}B zcU(M2p>m2u8XM;83LGt{hD{36rKlCI(F77)FTlqo%VKhlLwlh_Im>ur^=ef6VtmhU zVGaaJ2!fo0RMK{*1haWyW|liNyZg27yH>`T){rC!BpvNt_OE5OQ>=1D)~$Vxcfa%9 zTy(~<_(5Q`k)B7R(V$kVk!C5L>*D%8S&~_Jr+~B-6_n5C?U=|IYe|;^*O8=|v@lF5 zTk%nH7ROL1rG$*Y(MyAR5`jndht`aU8adz}aUX$~8~jL7GkyhMLWr_Y&5c^!LrjaXiANrmd}$ z!NIvqS3;`QQT7cFangblIpMr>SheaPdULRI`!*=$pgci&s!6l2!LH5suxay~IqQs* zIp+8iDNl~mC{H2lO+N7957XU0hoetAnYX^}t;lARhaY~J=Qh4T8ioAncfaG}*SwC@ zq^&GH8^kPUwB|;jwP+zCT5!=8Ni)qXg1`?G1{W{mgi~KZmc%W2IvC|riwuGcHwchH zkqAX2Oz=fw^|Znukz~pu2n;}`iQKiR;kMHaSf^&$4aJ7d0R>BmINq$3RE^F`veHa_&Juaja)7AA!h z_=k6dod5nafgO;IfGPpgt>=zkI>gH{U~UhAfNdREL>>+p)b7f z_X6v`#V%+~u~McCd^AI>{&{dBs42k#%p!TlT%bH723OdF*>s$2*SFaX5(5+ zD>F+7vQ%3JPOGD#4Tu(y(6km0Ar#FpVe{5)jF+c4;gpl{{D93{w$anm&E#}Qv80)t z7-z%QJ(T(uvu|ISxw#yp`}T9tVMo(7cpw{J*hx=UH-YbAqAFA4V;pkmVVraBc?=Kl zqf#5^_~Vb@$Rm#A@_+v>k3IM>j^}aXjlbm$|8OB6{@@3=|E@>)?)Sch*D5eQ$015% zCa3ms+8Gz}p%48N!y`M{JsNYsp(j!pIE=Mh_VDym8yW2BquABS#-W`=wJIu8s9YP` zE0QJ(x4nZxXB$yiCJLv}rp_UQi_0_A(ex16fv4gqk&&4Qfbt1ashrJPY@IU zNfd?Ta(NubK`BX^*fEydBDR}M<4TF}6|OR*afGWBaVu}IC)a_AV;pV6#cY&@Mmd69 z5TNSK*%5{fiM9N;I86}P(B&CRyu}~Lzwu_7)-`U7&BiR2N;J#k2*6R+At+lBDAG|N zT^eH(jE;^FN3n$-x;73aPGSnKjlzkd7$Y@83DPJ=A}AD!1inw2rleVl5yEz~TH012 zUkdz{(sr&I%_c_M!;zyDaVjX4N{|T}%?7z3M>DQ6RW4I3*%728<*chLiR0E9VKdqs zsYuck-*ZS~2iNzJ#S(F%(WC@FU-==)WQglJyy+ia zMR(~{+zFgxOW3T@-P22EB*F=B{SrZ`fOG|oYLz6^n54j*B`5REAK$~5zI`tV9vuu)$VJ3y zgweL!6!-ycr6OG&opg0}Q)=r3>eQx(F{weh3MB=u=Tm6wM57p;s!&TZa?rZZ@?_eM z@{t11aap!vCFq#vH}62Qj3p}v7_Vzg5OCy?b6B%|m_1Dooy$W$MTJx3rR2ba52mMQ zfG|plqJ${PNR31bMQRj6IaDUb@mo`ZIE`CP6T@_^h7d3{U2%VQ-F2ThyHS6TW)og~ z@$Vh1|J9>ft+pR@&_UlxlH|lJ%led39d=(6v&GU(5j9glfhB+cPplI8GD@rvf|nBQ zW_U6$>8DyE8IoZnJct7iS!Fk^I3k;I3QA!mSgjjq29KsQO`61Z25(I3sWaQ^ zZjBcW0_AyBrl%PlAE(-EvT4gUIy$?E63O2E6~?`gSo>6~HDXm@^@gpy{XHKdj8ZZk zl4K3~`{&cy(Z|^M6!lsS<>g4j2L1hgoPG9LJo@+(gkc|DU2RNGj*-jfAdT@$MQ*?C zc6RK39+62lta*`qX#gQI9LGl1q-jb=#{%xY?*Z<6;9+*}8{+sgPv!eR{2@QTb_MZt zow*%dTyynL`Na)CfqWaeu713Rz$uh)3!PNL4B`7I;d0>xujbXSI-6>3oNnPUXI>w} zd-p;|7k~cq-Q0WU?PPI;-_gU@zxoZd^ytbLDYR$o*u9sJe*AOP>oqzC1`$dU_#RQ# zB_{ooNK#<@l?GB*nN6xniEt=`wgOb9(18Q7$8;W2xkh&7;h+lsLB8h@Nj9QE8fz_bhuU)(MVs z@B=~MIJ6bpNy{~AX+*(yk%__)3YiHU$0HFb)0GO1T0-FZB&HQWZZxlWmLw7HI0|Pw#$a=27_C{WJ=_@$>wDV~13fQq_D_4E@R<8X182k5x_+AI? z?Ikv@dzx>5{wf}R@loFY-na7Q&s{?ryC_$*qERGhA3a&&)$cr=!;e_RC;#QgwD)*? z{!5o}=G*^)&dvh&-?yEQfAq&p*C(iq#dOR)fd0NgzVL+~GCaJ8FMi=mEI;ua=FC~l zA8x)C8JFnp%+pcoEtN3mxwdL#9n(yiJC4% zE9oCtNQom*jwEhGbo9+fc%9(1Lr_AC0Nj9lw}C7MugLiBom_R@V}wA5pQouM(l-cC z(b3jHKA)$(y~8GR7(*?MDNpT13XQJ{s6de#f#>^3&ttryEmtewg^FV0W)-2cmLAfO z%LQm-W8KnBlcs`!d5h@o=;DZj564}cv18No#7R3t$G}Yw4>279UVtV?6-hZ#P}3x- z0UV6uTlcU%8d~Ivu`y#hvun4Imi?7w8rMVRKoc8ZudpO;<4_ckk zzZY14_1Lgs1Kr)-{{dX4l$tG)X2yj|sh8=O%xqBT|7ERK>qEVKPCgS*3|56{z(`3J zHjv6iNJX56cJmaXWzCidM<5+xg|Nn8l9((BTM_07WEw|UBD~hxj+$D9)>OI7@ZNnS z2u7ZInr0l5&-EdMB#NqR-7}8kcu47zO^vZ}`>?fUE7uAh*F4XvLr<|7dnAQo0hG(s z^dvXm@<*O~_IVoNG~GQVbdoYPQRlRC&&6{+o?ZPY58iPN;G@)Bf_w?raS*}~x59TF z5>{d%5WSU$0G>r;UKIx z$&9hkTAfk|0)$Q}wC72+W~vdPTn{e;qXo)!5mI9^gYWrtwB>R3PmpNSqGZ2x_>fBc z6-8*~wn+c->%yKQecx&%CZ@(9i*Ox5K5)sh2xA+~NFi}uMN(-ZrN;Ffv^Ip1)e#9P z2*c)V&~sZ`iG03*>wAEqI$b4AQycL7vWzt)rOo(kjeKpF02>t|CAnO{fd?MQmaSWG zq@uH}i;ZTFG(`$CKZ=}NgzrC6BF1U;(i7(y}RXqLlX5RFUPf{z7waD8V9A(Ag zSrdq6op~6+mfep6b@FX(yynesuyJ5!W*lwMM%d-DrD3u0@s&1<)BAHa^WCe?Q4-D|7TImr8wt zr9D%u>`QolBu0e^H6(Qb^)MkQq$Ej-)&|e@TJRFR)+o;ZLss%!lq)7|Ol96h= zmrhrwx&4VJ&tG!#DG!gv_S!o7?*-Q1J|2Jk@!og6>s^;5Niu7}p3zRdeDs%P+5cnU zn0eW)BVVpZeA(v)Lm1k5yA7r_NRhR^KeeYw7qs6Bd=J#{j4+i(1$<70S7E#$Ieak_H^^iQ|tKl72hXpG&%nGV|c~6AHtI^ zJ2wsUUqAUFS&||hVQt_#W1>95nP;8D>tFXq_7Cml73ZG8(2h-fn5f~_tHOa3FlsN9wXx; zYI&y zNR;oeXJiD=56I_>j89D=lpt_&xXMK+Ws6H~<6k^awIVHBg}bz!PpJit5vas&AC+>2 zj#7z42x=mw%XKjsD91&jiJDdNg*-tkIN5V7=S(UEX^Pevj*_je7Jr3ld}(xUj0GWP zjg0B>{Wyg@p68LI5w-d>+qZ8ajv6FU6F(@B=nNe-&}kDPXTpP9*_6g=VGt4_6}cdX z=lQsvOWx!d86CB{NhL|s1e9Zco6LrbiTdGA=;0rk2LY5&u2gNd9*VM#cn?R?hg~pKZNEz<2e2_ zf$!67G`Z$S->0p65J!68b`nJ{qa!iCmq!))$($k`3m1?n$V`Uo*w-+N8l?4xO}LN| ziUgxOXin{9|LCOc{LV-*bOt(W6;85+PR(AXwH44J_KP&J2M^`i;tTPz7_*lS21d8m zSoxP-D}g~7+pM&emYDsS|AQJBjWf&P5-r!J5gJF>@9OR8rMs(>G)=85x7D#qlMK-+ z8W94|3veBc(KVzKV2nTkeqNGIghZL0fE<6qF_r;G14m>S8VDuPY8s7?5k+EIz-I!- zot*u5K_637n+f9t&%rt|r6EAl=H`*HMnu+xlT!gnn$oO>C`XZVePkK~5>G-9D3rEY zxmlW0YgCa^;JE>g=iz7wn++Ou`}KO*B$vO0;3KjW6D9UN z%nUi#>?jqdDfNli9apE8uY1Wp5)W#{BvhzhP{+OtaBI2#ud} ziCV9%$wKz-+s`A9JxXt`$Z@L%x#x~QvgYyM5-vQ7@jcsF*xSS9AOAFq4?U2!j!vX* zBU34Un}^9s);zbCO1Z&f53J^gSNy=Nx|b!JxRUMfHY?5(uKV3^@ni8$}9NB z6<2Z2Sx1q3atA*dt3cc!%mm|;Qyg;GVZ7zdZ=ipmm)Bi*Aiw(KGra8$U#G2W4kulD zKBv5532%AZ8~FNHf6Y&?xC7Z=Km{5jLb4cwLO|NA;d#Pl7PjSqjN0S`NtzKgrkT6y z5Ptk$UuR-+l()S3ZS2{$k7E1W*^bYQ?iM3(9NFqr*ba)L6axc;7-Iv&i^3yoEeeqo zRBBa3kR#C>7Y|d zW(1B@;3!h9X>V_9trzx?H6vjVDC&(W^A<1TEpNMo-`sFL`-Zo0!Nuot)Cr5Y^G{o8 zHb*$+)QcIP8fVqH7jW|}-y?}rzWk+I`NK_5P;Jyuu7h&YRxFD|N<)%`q-hLztXy$4 zuH*3R#>Yq!$;u;-qdMAT=!Knl-G-x1KZfnk?d9m>4&t33JcU}V&h^(k!u_|e<&aZP zB1(qXzV=y+<8k(@-+~V7JoEVDkW4Z1(F)hxhJK4cwgsGylCdzS%>nXx1Qp^{L%mO0j z5QvuWoenlUH%56HdfM#Xk;H~9QHXk;#;C#f+rcQpFe0oqkfKB`S45jSnlgE}om|d# z{Np&XhZ$q=r7cQzmLQa6(iwE?UiQf6a)eQW=OmCTFx}NdWq5?2-M*1`oPRK@PB@A4 zj#p+8b<#eLQYe#xF*wqoO-7Qn^5L*r7Nb)eMB56b zP16k5lUBEZBo>mOrEp1&RlDFjRFbA$Vmy~r+D?Izwwsa08A7-usUgX1&~2gANtncl z)NXji?jEMYknQ{SGEr|pP{j2L#ElU0ot$yOxh!9C5cRsG*%WNsz6)|C&^B@A>cw9W_{(-f7$aTG$i>|S>-FRc3`{k@0s@z4Ad3zy6R1m~Y|JVzYx z7M_3VDgOB*AH$p1^WVPK17U*)ZvQg}ng)kmaw(tq=*M{1XMRL^vc%}#DiG1znPYgL zVe#C6tG@X!lxr!Q);x+TR_N`TOMR-!*si^tdBSqu|E`m$PB(3#lcbaa#kD{9XI^

=|}C9Ebm!fTBqToNZGRaMd`!AS)IA8iEE&y&jsxN(i53JHZoDUU9{ zND~8LMtgrJL9xil=p=4KVpK-MOD)7!g7hpt!8np)M>|SMDwS!nM$`)Wb#Rr$4-}Y; zoR@<}OkP@WrysfCruGCZGjJpmV`U~LLo%gE+$P2paWfC(G>MK{yOV>^IYj0oOa_i1 zHePF!ib(3ycv;NxhaS$v*nZN9A&kzbRb%EHaSRuocNV|?)i0SEA0}7q!VxZUbDFqb zMW+fs$dP5X$TBU#yp)0<2xxC>!}onEl?sh!!`|nnH7XJr1g);O+< z(e^o0Z3{TZbxGocQn8C#r9qm-xSk|x3Y5sBl*G#wP()NK`>9Mrd3v0l&K{0A`cP_< zL)4}t+@Qds1q)by*i!C)>Nzsk!4aTLfDz#63=e~2QXE2ri3n61Lg#Q%VCpF0p|d(k zG{*U_IF2uU^h~yHTF0iRAK}Oqb2;iCPUqU6zJY9fA0N8zRPMU#Nw#j!cA4m zJqw6+g(5|h8iyY=G#XX1bbw3* z)N55r#R5V)#MPLrDM@1ct2?@LNeTNYzD?v=73Wt!$ z#kisj>}St&Pg^&=#(fw_X6v$AFEfdR!1Fml!Zg`w+ZJnf1dfT zlvV)z@`CGsuX`o=>%1v5lT6;aQMC}HLZVS1t^GF>%nH>}7Cxwiw$3dfTYGjY%RD*q`Yb zbe!S2ioU)cdi(kSK@_Ky+PnDjm%l`*6tH^Dv;62sS2JgBFQ5C&7wlpXhV0q3o1Qs~ zfqt^I%%}eKbJS}U{^P4(p{u74X*A#Z?iEapmr28f8y|R{`yYLZePa`VVbA`(eDy1z zr>EWHu3LV`Melqokxr>+pqq69lThp%L}W4Bwrpm2&rUx7t&dV1EE41c5Q=lpJD1~6 zIg)q2{T0+Jd(jQa{Dp%gndUrS3qx0^ZhIsvFv z8z^bG_L}Qivg%R}KA^o-K)c{6(kv#Bip(g4;}S<2uhdOk&Ukk9HZFeE$((TF(X4)E z1K;}QRpfdH$Wlp=%khhAe?TGM#%DhDHMWinQz}@Un-Bsm3|eHi>u57g$)q9`f+&q} zgvM8brm>XqdZkLUHOeZrbs(kHZ+XH21==-aS&Y|0LTF?00gYx8*LBetT-POwZAWXy zzAl7yz6DMvfh(y^Rxp{1$x>1gp`_I+xNe@#t`d8iQ`Ut>%l0lZgsbs$R=jTYF9str zvLwRGl?c-W(`-@@DHmRR0na}3G%s#=4%e|_cVnuoe)@54x$Q1qd|@rsi5-+jJ6rcx z42&b4GiYmXBTKWF#*oI~I4-q%-HsSMmrPqci;!Yg3Se4MQ*JBlH;N*%tkns_>d8P7 z$FU8}ZWUi?meSMR%g*iFAxmuZ6V~Bt(De6r;CYg5Th|grJ}}9~7dG+yhOLb3-bEUQ z$Xt=h;hmgx+=-lc+~GX*%m$R-LRv`MAu(EGv>n%GSwVIJK<~^Kt+VM0`i-m*^G28zs^*To4(FXYi%pQSw7IrrjuWYrT+XG|NYP1Th1f6aA~{l$ zCM^Pk6n`;Rm>KiVNGxX7X=9Xi<_U{!n3Z>!mx*fsW=8S1y4%0~KmR9Vjv4KhuZXhVQ z0dBF2Y;X<`(=-_mJh_wCzTsn3stpD^JIR+ygbnLV)f%d`1_p)edIYT~pL(;2HU@>j z@qBb^U2t3vlW9WHL^-MjM25ig>Fe!h^YhOwe&PDxQfbsU{!{P#dx7=Wk2!PZWHVy+ z|6Qbm_`eYVsatei@mKeybsNp7Pb9)OC{JLtV}nmIWSK-~wyTz6aE!#&_V!ZBK^cuP z@$Ahej6t>*U*Gf5Ela;w%G1@+fyh!M22UvBBtl4^I1WjZ23e*_qXtMHp^9M4M9oU#qfP@{QVzz=JAK9jgNEArLSRh?+DMWd7fe^Pte`Lt6qHx z_up$zr(@+R2P{93jT_cc%QC7-Leyxm>X>86`31Ib+RS0)JdI|G;}tplh%;@sz!hXU z!Sfr}aFP2OTpg1OYe?TgDId^`J035FDW|>dT^x1JS*(3}HM#yGZJjVYKEj^;I~g9G zpet}Nt^x-{Ua@84es=EJPqn;)EnBt$Rr=;GV&42-Zv5keoO8i>?A(`7p4!1v>wR+h z_wwAX3WqLiCrbrn5yEeh2#vw&V1gizi=o_<{PNmAf{56*YdgQa`UXV4hg>n>eed}g ziv$04;w4e3Z^AV_sW9L4A~#W)U0Vn<7EE=L?i=q#NL+>NsoM>;sJN0z0yu0tF( zadZBxuEdChByFNigcOiygM$qscZ5TlDWsbrlz}L-S}$eLA_0|RRDvP3^k@^J8&&e2 z;GFYc$=bE6*}VBhkRHYEURE7;IFpl;^bhpVjHfx}oYR>sACB)7QCg7qB%}Mc(bkn? z@1DkAY;C#)3XP(Wj`ofg|4x&oR?8%Wm<5hvtc71nVKr%3HxZha(ZFiSq~qF=W}1>D z2^}3BG#U;1ySu4QP1DidMx3Th*Xm46OmJk|QCx7*YZ;w(Xf&$?g(ACl?&gHE&tq(4 zoS|JqG^cAk{KQinciL$jbHt%Mw{Z`t(3q%++vZ~ui=!|yhw^f0YWRMNFB_1S334Tx z!y_Df^a_qYY$5kNHo+-J_wedVPh@Pe!FPZD2uB>TlrR0@8?1j}h%GzzbN)q#vvS2j z#IHJ;Am{U~Z~TO=qDyX3KihZh$IlnZghUoQsa0!G+s7OJ;ms(=Axz+nZ+#7q-ugJ@ z27LR54V?apS1^C>BKD1!**iLpAGkcc`dY#S?!NnZZu|4SEI;_eC;|WZ<8Ra1-NEMl zFi|c;qYlMR4qQ5){=Oo`Ql8;GFOt@$NU9!4gWDq6*XmWudcsat}i@Y7zv&EYH%kbeXQ_wWK@}p{>iXyRCypP93_=YvdYP*gXF4 zBf`IZ?BBm%3=R&?j{E+13apoh!2VAite1aX0GY5-O7*h)Qt%ST4P$5cu0K<}$yw{V z%rx3)(lkM*DZ&VRd@Fbr_Eeo^y2XakErf%?_XBc4fIlz*Ny^^M+xY2!T}_xYDHYnu z;t;eXUyzpjp*0KU&u7`CVXSb6BdOvk?>%4*#I$bCHehpUh@`O4=%N}iPQDb08_;Saan#m~S0 z6MLDaF-M&ATE6?OFVYM(pa0s=_~L)u$oOc=oI_6LnJ2!@(C{R$di|HU@Zz(1;^`Nm z(?#Y(;tWjY;ssXw5H=d-CvFenL*XMvnamXY&)+*D(< zKx$=+FyBWx9^rI|5()=vU{H>LG$BbdYW3LKqova-UhF@$Rvsho2V8W)xxBb>9UE6a z3~rJ63m0+B@h7r%`%d=mALaOykLSXRU&%v{-Ou>wD205Cz@Z@pVVbgI&u*s5<=KVO zYNf2hDi`GJXsE@EviJwpip6OeN7B~VLMa@_Ax&p6611{G^gjNy2SuHJr@Et}gS=gXbpE$^WC-?luxtm>NS zpb7JrvqsYrfN4m=1kw!SnwHL1;Rx$AOtTj5LqZru6bgC5v`SmCh|CqKwGILr80a6M zZEi1nH|*o#2e&h{J3|`DlEEUKof%WnZYHI=%7KgRI{;L`}YmAbNg--(AL&Q zF36EIQ|eKj&h9RPAkTDl+FtW5Jz1?uEr-993fFZ}LSRx&E|()t;@)jLx0m8LZvI_^_1`>> zIO2%5X0zGQTK~XtoN{ZY{@c!NYtfZbqLk8&Mk8}w_c-78UpZ4y{Z9p&d6_|1X*>F} z){^X{n^M?TFeU^1)~^v`w53!d6vkB;mDvt$OJylrJCh2V_H!vvN>VK3DCF9h8Xe=7 zpZ<(r{_2WqRPed4UCz|x7`eb}jVV$VFI>!(-~AHflXc$z-j7+a?3cgHudlnF z`|i7sojbNuDwSAq$U*EG+QL7)?p1vA@}JPz*+ysgLdHi%h*Qa1-|-<1T)Ld@{v|lR zLt7`@f6uLq?_JCB7rmQb-*gXoCF!5n$Mfs9v1iW?f@VhS%=qyDW z0YSiFhb`kje|QHs+;B5L{_(d7n+}(M_FFWXO|JOnf3j@F0etdP@8r4X*YWhj8_9R( zTh67_Mx{6b7{@Nf3Zx@Ql8{Puy2VO^)MPl0i%vC4CU2B3rF@L`)jTxGrSU zX^Dkh9A!CWm;jTdNa2&DR_NMM@VV&13)r}JHP1fzDELL@%$?6kr=7~^+lB1H0+&dOiIE1MJwgg&+uQ5<)AjK{<+v$qDlLJW^Ss zh-npIj#RVaVMjR#DM;dkD2`F~-bYA@>$=3rOPgRWXGQbna)m6*sFbJBEp}3-GnAvq z=kx5?xr3*l+(@(O0d;olJcGR>6RdsWNr+PBAAA_gmK})Dg381m9((Y9jyT~QjydvB z);#?*SteT>zC=lve6Afg-@(>xyQ!2T`UmDPH63!|35T#^`5~Nr?)xck*~EYT?kdi? z@N71{u#*!`K9g&HbvtkVhmUa6O;>To8E5k76Wdwy{C=K&?nQcf+j-k%ujOB!c$7!) z`!mO$dIpCcbO6t9-GkHFj~0s8Tyh%gwvX|;*L)Nz6>hlgr+na_KfrWDQ0QL3maBil zr#^oJANj~XP$&%Gcm%}XBH9T!Y)*jN zS732>H~G$X&<+}n&L9W|DfZ2w(QrvBuR?riI(XhN1>2!c?=}J7XU6%)MUCI zqLfP^Um}bXN?wsDs*@xU#Zn2!acG7i-Cf-nqnVtXq-&s?TCGO2*_hy(#$l* z&C%IE7Zv0!;(6vwWLnvTQoV#w5mqmwd=G?&azduYN4fj)JK4D5MTYkcvtq>x2ItM= zzWeTDs$8X`y`6!<0lOJYY$sPLa>&ZX?AWrN_rL3{9DBqO{PTzYiGTgfCwTiC-@ zi0gTLP1j8fy5Q!k))6ZC#5=AMZP(=EQypD0IRh-&5 zx!ytE^8QbIJ3g-Y^H1Ddb8J? zbc7XrXS(Gm^JpvNaiwHre3DW=PtvF&l;yIy$|1@!no)%7D1=GSNrO}uaC{%Mi_nUk z7obdlBN8MYakGNw`MmO?v)H_DEvuh+0Ngxt2M0Lq^iz4_p$FKtZ6{7&KWVj%W<#=l z%P^|choFG(mB_-Bw)|X5`GZ)x-jLuVSV;8Ckt5Nr_m zlnO=q2j{SN$~royD-}kD_mc1KAqx}sy!Zl2!$B(#V&n4_!trsQec}<0Jo*HVJmOF) zWBWimjE#+W`e<&y`A>|lThBMI_&F<=ETp}E9<}Ldo__oh zjz9A}mMvY#mYsWXy7Js}_Y3^;x;ue(=xpPP@7_hAa!gIts5WYdg(q>twfC}N{TSPJ zO!9@#UBk%8G{{cA{H0$qK0d+sue_T$X|Q$6Mwpu7s_*}V6HYva!;U$I4QtoX*49a* zHVy=2y20wF?&ZXz59WREehWPVy*zlw?Hs;h5sy508_%wP4nLP;`J9Cub>Ufzj_hF1 zP?f&k9=`p(?{Mm=r!rl!h7_q3iAq{i2!S-lI$USo=hjFe%j{tVV=y`-(>8ljNSn%$ zr5PrT5u~jY0z0K}y#VF-APfct(vFpEETOPQ5TR`lyp*ld26xMcW7LYOoy6HG`V9ify%K3_oVtOYc+2aGH=#7Qf8!hvw2!Bh8@S^r$d z%ELXDE$O7o@8tK_JNynIU%V+SLkUFCwMgXPZsk(idkqu1ld##HXx5105XW)x{2cj00f8b4o5V>>M@Jh;l90>g$mjFaYE>M^ zX0c)nwQ6fa<`zAk{}3L5hLn5z?-rxb7$$#S@t&_EF1TkLegMr-wrCHL)4~5**84Q z{*e*N(^V#?%A`%$yMKb-IScsI*RNn;`5}lic{* z-%y(x<=g-9@4WjTKf-4|{TY`0=9m2T&$lsAu5tV+=hNHQftT|@3zDfZ!s;}IywBG@ z`&mBr`OovtcfOnMt~^^eZ-r(9H{ZpsT|4>N&ws+zKfIbv>s}yVT8tDLAt6muJTFgM z$HDyhu1C1z&kq4>`Th@A@t;4vk*ojfY97ApVUAjMIFCR27(e*Mf0FmQNu^7sJ!)l* zYVSY<0;vSq*nVE~);Dq4>t4;KCmtis73uHoWO(-|6gs)*jt98srdv@WBj2@vFaGN{ zk#3GsXE*Jx%idi(`Rc!Y9#L$^>*+%|Ir5H2l%_m<&wUu`_{GI`tmIgs`Aj^Ray_!t z*g)P)6NVA4G&sH@?+6RUbUpkaAc+$&l1v+}zy2oP|Nb{|$iYk5^5_~;*F`!8DN|$? z(Wp)lH7nF>6VRN-cx@E&KHXiNWT_?}6v%{&D;->8>DArs?Myp@z;)QMcYkZ~kT|Y0 zdsvRMthJC>eW5l6lVvzUki{A==aaPfK@ve*p+r=xvv=2S=J)j@gB)ob5+w=RKx!mK zDR5kgqYOf2WTu4jG2?c9aa)`=vAFru@gk3$YR453|wc2Ky4QOr>%9?NBKe;r|SoNqsPBXJzl3`6S( zRElP!Nk@A-Nt#kD73t~eX1Z3J?Mx}F7RIDA5kB^Pl$o5(6txs^J5JP@CYN&=pO~Pt ztBd`6_tVi{LTj6W7>1!eoTVw1N`)Y>qFSBA5Qi*YFpnjR7Lr6EQn|RrB0INkfh6P1 zGtcC~M;~MFSc5fBKEbLZ4rAG}#jJhmaYU9fXP}pD>o*clS2^>%BS7R?|Kw`CVmr&0 z9n8ab-H&hsdX^o@hV{=fG;|$Doq7h(JpLFD-|`?QU3fmqtF!vf``EK}h+|GV39S`> zxcZ0eJpCMwKK=xrdg4iHwFXb!e-DSBdKSwU&tccjeXL%y4&g}JI~Ee9hPBV^u-Clj zA%vk+T1Xm}dGfK%6x!N&cFlG?KcKDm03Lm0Enbi(Z6*{;KBdk9Oy>a4ty#;O`|o7= zaVK!V(q*h!y^c4%;cR5EfTx~%jBkATV;q0#IqcoMk+E%)+;!W{Jo)q!wD)w-nRl4K zU=H*93*3C;wbUx(^mcd9-rd8YhaO5kpSSNBe<@hkIwjK@VXSs_#ykLmEQv|uh&YOA zR;&2FZ^N~Xm28Arg2*!TbeS+ts5c|xG-KJygK6*SYXwMKSf#P!30r8PZAPigbK~!C zq*88h%1LMPt6$zgYV1f_NNZeDQsTHSje5kBPp&3vG+4CkU_8$y30sH;GK*=@vNf_a zvqgVLdk1NKl8&}EhDImYH(8lIm>c0EWlVYN5Qhy4UUA|e<0EAb?C<1N-+eE){OVe^ zJ@p6+muI*KCM3WNA9(NX9Sm1M0QCBk}x z@^qQ5&MvCe8jj=A*49oON7h`U4MJFkW0J(ANlL+S$mav36f_zQ8x7<*)arFS$HjGB z8jXl*y@nfj6g%znRU0)F3Z0~A3{jj=C={$o4XexZl%nW)BuPrGUbhD(V~CUFr7YA| z_ggASrY$$iCl}5EpA?LDa{v5Ja7Ma2)PQh*KA)gN{xlmGyVDq+N_Ki+~k`%l9*tv5Dci(Xv z~gOwyQ!d^@t}At(^XO%mUwr>_H}CCvutG-Ybf zF5EUrp`!y#KSC1rBbp?&Sus%NA?m&(;RcgiHwI|Lk$^3cqaAZm|EYl2Q4nAllo)j#c+k<=3QEcD6 z8=Xc3u8YD!=nOYdkZ6>Vn- z1?<^5&Vfr85H`#7_O#=Bl2X2tz0D?%Jaiuey&h+taV(Cqxqfb9M#uBkVg%$qmQx{>NNgs}x{ zA)h0k3y8v))IicAzh_B;NmGiQZFr8LUMbVx)6JYY^9UTDCm(x~y+gZMyVkJs(8FlH zu!E_wN!G1?n#~*6pwMV-h^kdiI{9Sozw;jMxa}6syX0b&do<78{~%f!PP^btRzLA9 z<*9Mn<}GG=-*z^v*}##ZT zoqh&KpL{xNo?T0Qa*AgjyqDuoIDy>!9-iMeLLq1;)gH?ANpcZ6-^b__p&>~Hj@w45 ztAN&qTrm#ewGsh?t$0a1c1rftrFOy^2$TK@tI=J#^I;sd$w-e)NUKJ6VP z`sNMVYcq{`Vf{u_no^q>r&^h!8a6op%(FP|sDrucdsk48GCFz(h~t=Yxx$<|bMSnR zEROI352Opm=4WQcAhMZp-%Gr9&v#J*;${=ybLl7*T3ru8tW!K+LYm>^JgU_SWBd0r zZ_yHpxd5`n0!UjMww#e?(TX!`9oBEY`F4!)nK$oHzW1NkV4Px0YZQ^01cA-&%)$`T zh=Y$hfdhg9LTgMb)j?p9LbQrQE$s7$QAE97r=S#4O7i&}3yN)Q-m=B&9qTb!T;}NG zOB`|Hx!m!G2dKv>i~2@rYg^B|KC%>3j}eZKc5IOS%%SY@d!M8M^ad`CT7x-r=MzrU zm}-{oAyZk_o$vbuL7w*Z63r;2TC1U?L%m)nNn%Q+BChMOf8Rc$D7Nd6=URHabTGyq zzT-F|Nn(;D!5BlKkVosx(%p4NnkAIlN@T)j1~wZF0?$We28AY!5*m$=?iF2xtpY0W zeO$*uN~`5ck_6dGb1`NHCTytzMjAZV#RwOZY0$QajpLYFyKBewHioRqr z=iw?rzEHr=74h?Vd{079q?vi73c{#?kv9H8iUesA3=Uc=YZuN^gh`0P2FD$DG+ypx z>Jy_h8#R(7Mi`CfIW`PdTa8Vo^&x30yb@eh;ty zaC6}Jg0L2oGzD!XpOelym1eq^ja$ZvCIu$hgXj+E9Ox#EU22t#LZRIv2Xur`d2}Yw znS}&C^2jzm`q2wH=#Z8C{3kbZ{nful6uQ{FX&0AVdLezi7jVlT|HQAa|23Wnc;Wd` znvF6_gf!xm_ENyEom<#Dw3BDntVKr&1u2*qn?M;wvtFZ?M2N)Ts2o91py&sb@&)!z zO;POVCh+r=ibW=?)1<9DJs~B+=vh;R&QgSuctWA$lu9^BzO9W+fa~~d*}R3y#3cR2 zc51pwoEfBaaRLvGA#OI2O5nJ{j!&`}olcWxWnh@m(XDLRvX(TSBCS{1Kbr8n>mMSl zkAv!GaL!!LKI>GTc=!Q^_YTqC(T>KjVcj|st*KTLUflF7%eQq?F7Ic2bc`uELKddD z4wNT{s7wt~EEZ78X}JLHC`Kts6h#Ci9h~kL$jt-(QB2J>&#ZxI8MjdB%#P2#T zNZDd(S$spY*`(CghU++Vc62Z{K91-6OxLP-o=Zo2JHG3Jt|PT3%`|bE5jLA-VMZ;i zvUkrAYt}r&#P}rp_m1ERm#ERicLH8`VKcGvS-fZo%`ida97KHz*J#|pWoYw@c#h90 z=byntcizUGH($#ImtKN6=V;d6eJ4i59CPZiJn-<-G#Yg}=genhbRXuqXF2qURjkgc ztbXv%9C^m6oN?*--2aE0cqW|Yv~$nrLD%8Q2Oj2xi(bX5BaUIsa`&n|- zQOsX9hoK!~NY_I-0yl67n^Qai zmMIoHs3%Q^whu9Ppvd;xJ_dT{vSQULM9u{?+qQ4#55NCC#0mYKos3tTys&qg#~*r< zqgF1Wqv$hTucI78oQ7mA9ZeX91g^5kk{Rukc}XrMq{L(fVJwJL>kQ$#6x&OrwHm*_ z@wc3K@`=n@aUdqD6QRk%28F<*R+}d0y9^HWq6&d6yo8Gu0{OBa=D!9v^z_fgaXRsG z-8exnGT(<08EMu;=#W&0_-JIipf)j%_I#x0B3t+to1kW94I48MRah(H)-j2lm ze2Jdkezt7g3c&cteqLC&jYH2mmV@5>F7ADLoZ+DtIOh}ZqWsLw-1o%O9B}aA9I#># z&} z-3kVkD3qDu5(zL0B^{LKfpQ3PMe8aw1+vVtAe6GB57$vljExbv4!u3S6!Up1<70S! zo?|f657rlm~|8P6Y4nBy=RGE{{IF0$smQmUHB0Zg*1g^uXLk?oi+KtpEMj6AP z1ia_H@53#&@%8`s27Ns}bau8QP^@3Kk;$Q5T=Sb7Shsc^SO4%kNL?e2r_fo5aPl;p zQH%FA#in(S@K5i5GdZ`!?|%Oa9=h)#ZvEvIEM9UPBsH3qy?pv#-oxDGb2<2+h4}SJ zQfY`B2!*6!T%LJ;H_vab@WbzXibmaI{=DUE-Li@Pz7AlDWe4>0sxt>U>8LMr+|h?} z{wq)7*$or?DEvLdQy8g<8W}5>ui(A!`VehxE|;FafImL)G_QZ-H}UgxIp)NrT=LrE zc=aVG@}nQ!$K_x99gQrZ(4NPLwDlec9M8ezeQx=~tt?v9#fFXR`R!FdLv_r@FXXu9 z2Ul~$wLinnNz$-P8di}>8P{lXuA!&hrJ4vHx$jmUz32D%3RWy##&orYu8$E_%d{0s zIFUih1S1VelwiU-uHVk$!MSAn1>3goq@%r){&{mK6^k?)b+R-?Nr`9?!qdb87ZnOx zi%1|H0@q`Fe3aVAeweOu*s|s9*|d!`jxh>6&$jB5EVaSVzK4nu1Sy#oq)~;=j&^zv zIE2R^xSeO8e3ZZm@VZ@!`Iwr{=;|G$v-eOAJ@iN(e)v&#Y}i6aPZyGuW^IakTBWal zA%$L#=bpNQhwl0@NJ+kPfX?=S>2i$)^9DHfm{p9A??+0B<2VF?PaL;2H$o!Q3?=R6 zzhlQv`UeM)O5h2PdZS^tiq=>!Gj?q1xDIJ*BZXwE%h%q~LE!r&Ny3^nYw&%aVp}Ik z7^1bNR;x1^$E0aSzEq^Es~sf`I&0F|(T3+2_~VV&lP{L&ZOh|(C4`23S)E3Gg7&UH zc5T^$KUQY(vgPQ;G@I5A)7##LpKBwQnyni)U_{K>7oNvGx8K68zyBSVyz`xSxgt;9 zbPGy4oPEZzJaG4YOjoDr92{VD|322OeU4L3KZ8de)~tE_VNO2lR8G7293K4btu$}d zoP5En$TEk=Z@Hc0FT9B3k3WH@9=M07KE?XypW(1qoKMGr^LcLlE~MjO9B_kxEK7-^ z206cgBNR$`L~+z|>sh8$nno1zKAFkL(gd9fq^oef9BG)4FLW^7tTQ~apQDdCge_av zprb=sJh+0Po!hBQRXFgnaKDU-I4te0gCkb+GELzx3_rP3s4)4db zG)I=&Zqo{+rE=Q!+02BE>sf-o(AKb#hA~bMuzmeTZur%;6g&@K2+GwmZazoebI76y zl|gq$CrLAcB(tU@VXOhr_D5$qa#olvkPaNYd^uB78MX2xItgjkDld%)5xBx7P8wtq zZ~~Oqju8Qf6d`SFlfj}yjJEn*dz}k%K|ousK-`!liJJ7ZcM&#iC&&Y&4%xJMKXV6{ zfNJN+H_m0@cnNx5OLRatYp&bMgX`DwrgsM%cJKjYq8$b7+P!O52XBqiop0;Aij$<8k0^XTmCYz4WeE%S;(Itty2 zn{t&)E|<5TYi(VQ+9Dy^i)~it7KRiGd9r5Qk`}4I7g+zRN0wy-LBQU_ND`R`Z zI*BMKNj(jzSIYQO;kg0ja+OMRjG&g_cm;An7pMs3YZmmBZ~;eIp`tbtp}pDIhgoEV za4;BB4GNb;2Bb2xSyIZTpJ!=I4#={UYPEtk{j_&rkb+G(yFFci+w0XKtdqbCB-N0$m*gjF0RiS1i~-&)x#Nw>-_n zj%OJ>>;!g~>m0IVIpFh#vo7XypZQ1r{VV^>^sXm4?x>46?2x6v(||$)4SX6DcxvlT zysXRz-u*VtKlM_6_RBv~X&T1IMu9rM+hk-cqo6WA^`X~Nsld(8KY^RyNPF)bs-s1c zvcuy30p9wC1Bes*{;DLVM3XD7co%Q~hXZC$E(^OdL|mg-m`f4~jF&@aO&lSR7?Q~e zKJcmc^MUuC!1k@jamI-!^B-UPDMS1AiA-1B3;n}t9pO~cD47vA# zhgo&_QQUFIojm^dQ~ctWlbmwmX>@h;5+@N#b&|w&IyyToOD;{R)oQf2wSj=`J9jWR zI7nA_H(FR^Mba88YNHXZV~b8>snTQ_g&bs#7$Z(}dw1+VU}n9lVJ1&OetOJ9m=vb2OU~U0q$YwY78dsVDLHV~_H&kA59T zc2J)frR|`DN&Et24zkci;^c4&Z76S=?a!{kPbKGH{ATXD{Z4NF)$N?~>PtD|m9OR5 zKi`4ZnBw%4kKv)G)={Z6$o0%)Y_iM~_ddfB$DGW%IOWmX|IA6Jp2P{SyoAT^ypIR( z_%kP*awaMhJaPN29DVv}oOba=+WmEjbkogje{n09f8nc?aydL9ShZpW?OmO0+PR%#vB==O z`J8p(g>=td0#aC`7YXvaMCdfY7~)9VPcOo(RO4lVp0== z>myVLGU*^oJfs`qXffM460M*ffk129bt&e3a-Jek1=4(uQhO&;wT9(U0dx9`l)NG` ztpUGh#la!P?oR**(!02mcYo*wc5S|$zTP)thkxxAu`zk1v z5vCbN8=`s>VQ5d3x?aIkkdW+|JgkeOXqey3G7ild;;8|Dn-wUk2 zedKaE0G@c_3C=p}EGm@>aU8RI_inat-_FGsUreD;m}TC~XsixB^iUg=o2Dz$BtFl= z>smI>mIh_U?rXF?5tF5Oo=>P0yLRm1-aBt+^Oh}a-@PB>xESdoq|bD%#>ztv;rl=O z5kavX({g>y-u>b)(RLU^+A07Lz7_CgndRab?AW7aJ#TC8U~F=V!f2T!OKFBp#>Xl& z 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�dvpt@-5{V2;UtEnB89e#yJN)3kZUbx%J9IkR+*gnh)YK&Dcl%iJ zm)B_+*TkYlC$fFXCbqn|fpt%;V(#3-hR2Gvqw4waZJ*%B$9yxUm;de>8Yi@{>cM6I zthzG|3O%utEm@mJ+LE$gCJGegpcFg0s#DPZLY|XPIGnF9IRUrS&v(D|AkQz|it6#W z<-7Mne;X7AnS9uMg2+bLH8^&L?(QM(x#J{x%|Ut@TWWO=7pEv;Lt

- +

diff --git a/doc/_static/images/logo-readme.png b/doc/_static/images/logo-readme.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb6e008f6bfd6139209137573054b524a7fb2ff GIT binary patch literal 20797 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 Date: Wed, 21 Jul 2021 10:23:15 -0500 Subject: [PATCH 38/50] tests: bluetooth: shell: Filter tests on dts "storage_partition" Some of the shell tests need a devicetree "fixed-partition" and "storage_partition" for the settings partition support. Not all boards support this, so filter the tests on the devicetree having this. Fixes #37115 Signed-off-by: Kumar Gala --- tests/bluetooth/shell/testcase.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/bluetooth/shell/testcase.yaml b/tests/bluetooth/shell/testcase.yaml index 90f310d99e822..3fb3f9f9bbed7 100644 --- a/tests/bluetooth/shell/testcase.yaml +++ b/tests/bluetooth/shell/testcase.yaml @@ -32,6 +32,7 @@ tests: # Bluetooth Audio Compile validation tests bluetooth.shell.no_vcs: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -39,6 +40,7 @@ tests: tags: bluetooth bluetooth.shell.no_vocs: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -47,6 +49,7 @@ tests: tags: bluetooth bluetooth.shell.no_aics: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -56,6 +59,7 @@ tests: tags: bluetooth bluetooth.shell.no_aics_vocs: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -67,6 +71,7 @@ tests: tags: bluetooth bluetooth.shell.no_vcs_client: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -74,6 +79,7 @@ tests: tags: bluetooth bluetooth.shell.no_vcs_vcs_client: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -82,6 +88,7 @@ tests: tags: bluetooth bluetooth.shell.vcs_client_no_aics_client: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -89,6 +96,7 @@ tests: tags: bluetooth bluetooth.shell.vcs_client_no_vocs_client: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -96,6 +104,7 @@ tests: tags: bluetooth bluetooth.shell.no_mics: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: @@ -103,12 +112,14 @@ tests: tags: bluetooth bluetooth.shell.no_mics_client: build_only: true + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") integration_platforms: - native_posix extra_configs: - CONFIG_BT_MICS_CLIENT=n tags: bluetooth bluetooth.shell.no_mics_mics_client: + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") build_only: true integration_platforms: - native_posix @@ -117,6 +128,7 @@ tests: - CONFIG_BT_MICS_CLIENT=n tags: bluetooth bluetooth.shell.mics_client_no_aics_client: + filter: dt_label_with_parent_compat_enabled("storage_partition", "fixed-partitions") build_only: true integration_platforms: - native_posix From 590a53f6621927a7b318e962382feffda53aa963 Mon Sep 17 00:00:00 2001 From: David Leach Date: Thu, 8 Jul 2021 23:37:21 -0500 Subject: [PATCH 39/50] dts: rt600: Add TRNG support Add RT6xx TRNG support to enable the entropy driver. Signed-off-by: David Leach --- dts/arm/nxp/nxp_rt6xx_common.dtsi | 18 ++++++++++++++++++ soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.series | 4 ++++ soc/arm/nxp_imx/rt6xx/Kconfig.soc | 1 + 3 files changed, 23 insertions(+) diff --git a/dts/arm/nxp/nxp_rt6xx_common.dtsi b/dts/arm/nxp/nxp_rt6xx_common.dtsi index 06afd7ebb43d0..83d85d2e88563 100644 --- a/dts/arm/nxp/nxp_rt6xx_common.dtsi +++ b/dts/arm/nxp/nxp_rt6xx_common.dtsi @@ -11,6 +11,10 @@ #include / { + chosen { + zephyr,entropy = &trng; + }; + cpus { #address-cells = <1>; #size-cells = <0>; @@ -51,6 +55,12 @@ &peripheral { #address-cells = <1>; #size-cells = <1>; + /* + * Note that the offsets here are relative to the base address + * defined in either nxp_rt6xx_ns.dtsi or nxp_rt6xx.dtsi. The base + * addresses differ between non-secure (0x40000000) and secure + * modes (0x50000000). + */ clkctl0: clkctl@1000 { compatible = "nxp,lpc-syscon"; @@ -222,6 +232,14 @@ status = "disabled"; label = "RTC_0"; }; + + trng: random@138000 { + compatible = "nxp,kinetis-trng"; + reg = <0x138000 0x4000>; + status = "okay"; + interrupts = <31 0>; + label = "TRNG"; + }; }; &nvic { diff --git a/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.series b/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.series index d19f4db44fff6..2fef615b4e0df 100644 --- a/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.series +++ b/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.series @@ -23,6 +23,10 @@ config FLASH_SIZE config FLASH_BASE_ADDRESS default $(dt_node_reg_addr_hex,/soc/peripheral@50000000/spi@134000,1) +config ENTROPY_MCUX_TRNG + default y if HAS_MCUX_TRNG + depends on ENTROPY_GENERATOR + source "soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.mimxrt6*" endif # SOC_SERIES_MIMXRT6XX diff --git a/soc/arm/nxp_imx/rt6xx/Kconfig.soc b/soc/arm/nxp_imx/rt6xx/Kconfig.soc index d077fbbeef5ea..f4859fc699b14 100644 --- a/soc/arm/nxp_imx/rt6xx/Kconfig.soc +++ b/soc/arm/nxp_imx/rt6xx/Kconfig.soc @@ -23,6 +23,7 @@ config SOC_MIMXRT685S_CM33 select HAS_MCUX_LPC_DMA select HAS_MCUX_OS_TIMER select HAS_MCUX_LPC_RTC + select HAS_MCUX_TRNG select INIT_SYS_PLL endchoice From 48d55011ac2f672deeb2dab6faf1789f5d25051e Mon Sep 17 00:00:00 2001 From: Artem Panfilov Date: Thu, 15 Jul 2021 12:14:56 +0300 Subject: [PATCH 40/50] west.yml: add project groups Add project groups for enabling/disabling projects with group-filter. Example usage: west init -m https://github.com/zephyrproject-rtos/zephyr.git --mr main west update --group-filter=-hal -o=--depth=1 -n Fixes issue #36324. Signed-off-by: Artem Panfilov --- west.yml | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/west.yml b/west.yml index eed8dcf99243a..5b5146de36ef7 100644 --- a/west.yml +++ b/west.yml @@ -34,72 +34,118 @@ manifest: - name: cmsis revision: c3bd2094f92d574377f7af2aec147ae181aa5f8e path: modules/hal/cmsis + groups: + - hal - name: edtt revision: 7dd56fc100d79cc45c33d43e7401d1803e26f6e7 path: tools/edtt + groups: + - tools - name: fatfs revision: 1d1fcc725aa1cb3c32f366e0c53d7490d0fe1109 path: modules/fs/fatfs + groups: + - fs - name: hal_altera revision: 23c1c1dd7a0c1cc9a399509d1819375847c95b97 path: modules/hal/altera + groups: + - hal - name: hal_atmel revision: d17b7dd92d209b20bc1e15431d068edc29bf438d path: modules/hal/atmel + groups: + - hal - name: hal_cypress revision: 81a059f21435bc7e315bccd720da5a9b615bbb50 path: modules/hal/cypress + groups: + - hal - name: hal_espressif revision: f525ee6f468c2c68119731e1453ad72d189a1277 path: modules/hal/espressif + groups: + - hal west-commands: west/west-commands.yml revision: c21d252a2188fcb60d52dceb6b018a9f4a371817 path: modules/hal/espressif + groups: + - hal - name: hal_infineon revision: f1fa8241f8786198ba41155413243de36ed878a5 path: modules/hal/infineon + groups: + - hal - name: hal_microchip revision: b280eec5d3b1296b231117c1999bcd0269b6ecc4 path: modules/hal/microchip + groups: + - hal - name: hal_nordic revision: d979c8dc313e4dc3e52d5606c28622e5278be50c path: modules/hal/nordic + groups: + - hal - name: hal_nuvoton revision: b4d31f33238713a568e23618845702fadd67386f path: modules/hal/nuvoton + groups: + - hal - name: hal_nxp revision: 4b493d4346e841e786a8daa2eb2ee03cbe5cfd37 path: modules/hal/nxp + groups: + - hal - name: hal_openisa revision: 40d049f69c50b58ea20473bee14cf93f518bf262 path: modules/hal/openisa + groups: + - hal - name: hal_quicklogic revision: b3a66fe6d04d87fd1533a5c8de51d0599fcd08d0 path: modules/hal/quicklogic repo-path: hal_quicklogic + groups: + - hal - name: hal_silabs revision: be39d4eebeddac6e18e9c0c3ba1b31ad1e82eaed path: modules/hal/silabs + groups: + - hal - name: hal_st revision: 575de9d461aa6f430cf62c58a053675377e700f3 path: modules/hal/st + groups: + - hal - name: hal_stm32 revision: 2016f613f8138b8abe42013ab983a0d2fe0459b9 path: modules/hal/stm32 + groups: + - hal - name: hal_telink revision: ffcfd6282aa213f1dc0848dbca6279b098f6b143 path: modules/hal/telink + groups: + - hal - name: hal_ti revision: 3da6fae25fc44ec830fac4a92787b585ff55435e path: modules/hal/ti + groups: + - hal - name: hal_xtensa revision: 2f04b615cd5ad3a1b8abef33f9bdd10cc1990ed6 path: modules/hal/xtensa + groups: + - hal - name: libmetal revision: 39d049d4ae68e6f6d595fce7de1dcfc1024fb4eb path: modules/hal/libmetal + groups: + - hal - name: littlefs path: modules/fs/littlefs + groups: + - fs revision: 9e4498d1c73009acd84bb36036ee5e2869112a6c - name: loramac-node revision: 12019623bbad9eb54fe51066847a7cbd4b4eac57 @@ -113,6 +159,8 @@ manifest: - name: mbedtls revision: 5765cb7f75a9973ae9232d438e361a9d7bbc49e7 path: modules/crypto/mbedtls + groups: + - crypto - name: mcuboot revision: 7a5196820ba48a6ad7e7d573c9048c021960677c path: bootloader/mcuboot @@ -121,6 +169,8 @@ manifest: path: modules/lib/mcumgr - name: mipi-sys-t path: modules/debug/mipi-sys-t + groups: + - debug revision: 75e671550ac1acb502f315fe4952514dc73f7bfb - name: nanopb revision: d148bd26718e4c10414f07a7eb1bd24c62e56c5d @@ -128,6 +178,8 @@ manifest: - name: net-tools revision: f49bd1354616fae4093bf36e5eaee43c51a55127 path: tools/net-tools + groups: + - tools - name: nrf_hw_models revision: a47e326ca772ddd14cc3b9d4ca30a9ab44ecca16 path: modules/bsim_hw_models/nrf_hw_models @@ -140,6 +192,8 @@ manifest: - name: segger revision: 3a52ab222133193802d3c3b4d21730b9b1f1d2f6 path: modules/debug/segger + groups: + - debug - name: sof revision: 779f28ed465c03899c8a7d4aaf399856f4e51158 path: modules/audio/sof @@ -150,6 +204,8 @@ manifest: - name: tfm-mcuboot # This is used by the trusted-firmware-m module. revision: v1.7.2 path: modules/tee/tfm-mcuboot + groups: + - tee repo-path: mcuboot - name: tinycbor revision: 40daca97b478989884bffb5226e9ab73ca54b8c4 @@ -157,12 +213,18 @@ manifest: - name: tinycrypt revision: 3e9a49d2672ec01435ffbf0d788db6d95ef28de0 path: modules/crypto/tinycrypt + groups: + - crypto - name: TraceRecorderSource revision: 5b5f8d7adbf0e93a09087e8f5708f0eebb8b25bf path: modules/debug/TraceRecorder + groups: + - debug - name: trusted-firmware-m path: modules/tee/tfm revision: e18b7a9b040b5b5324520388047c9e7d678447e6 + groups: + - tee self: path: zephyr From f5b42d0aa310405b1e8ae22bf316f006c96738b7 Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Tue, 20 Jul 2021 15:08:52 -0700 Subject: [PATCH 41/50] doc: code_guidelines: Sort guidelines Guidelines between rules 21.x and 22.x where not properly sorted. Signed-off-by: Flavio Ceolin --- doc/contribute/coding_guidelines/index.rst | 90 +++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/doc/contribute/coding_guidelines/index.rst b/doc/contribute/coding_guidelines/index.rst index 9bec8abf8c951..76982e5574d63 100644 --- a/doc/contribute/coding_guidelines/index.rst +++ b/doc/contribute/coding_guidelines/index.rst @@ -706,51 +706,6 @@ severity and the equivlent rules from other standards for reference. - The library functions bsearch and qsort of shall not be used - N/A - `Rule 21.9 `_ - * - Rule 22.1 - - Required - - All resources obtained dynamically by means of Standard Library functions shall be explicitly released - - N/A - - `Rule 22.1 `_ - * - Rule 22.3 - - Required - - The same file shall not be open for read and write access at the same time on different streams - - N/A - - `Rule 22.3 `_ - * - Rule 22.4 - - Mandatory - - There shall be no attempt to write to a stream which has been opened as read-only - - N/A - - `Rule 22.4 `_ - * - Rule 22.5 - - Mandatory - - A pointer to a FILE object shall not be dereferenced - - N/A - - `Rule 22.5 `_ - * - Rule 22.6 - - Mandatory - - The value of a pointer to a FILE shall not be used after the associated stream has been closed - - N/A - - `Rule 22.6 `_ - * - Rule 22.7 - - Required - - The macro EOF shall only be compared with the unmodified return value from any Standard Library function capable of returning EOF - - N/A - - `Rule 22.7 `_ - * - Rule 22.8 - - Required - - The value of errno shall be set to zero prior to a call to an errno-setting-function - - N/A - - `Rule 22.8 `_ - * - Rule 22.9 - - Required - - The value of errno shall be tested against zero after calling an errno-setting-function - - N/A - - `Rule 22.9 `_ - * - Rule 22.10 - - Required - - The value of errno shall only be tested when the last function to be called was an errno-setting-function - - N/A - - `Rule 22.10 `_ * - Rule 21.11 - Required - The standard header file shall not be used @@ -796,6 +751,51 @@ severity and the equivlent rules from other standards for reference. - The pointer returned by the Standard Library functions asctime, ctime, gmtime, localtime, localeconv, getenv, setlocale or strerror shall not be used following a subsequent call to the same function - N/A - `Rule 21.20 `_ + * - Rule 22.1 + - Required + - All resources obtained dynamically by means of Standard Library functions shall be explicitly released + - N/A + - `Rule 22.1 `_ + * - Rule 22.3 + - Required + - The same file shall not be open for read and write access at the same time on different streams + - N/A + - `Rule 22.3 `_ + * - Rule 22.4 + - Mandatory + - There shall be no attempt to write to a stream which has been opened as read-only + - N/A + - `Rule 22.4 `_ + * - Rule 22.5 + - Mandatory + - A pointer to a FILE object shall not be dereferenced + - N/A + - `Rule 22.5 `_ + * - Rule 22.6 + - Mandatory + - The value of a pointer to a FILE shall not be used after the associated stream has been closed + - N/A + - `Rule 22.6 `_ + * - Rule 22.7 + - Required + - The macro EOF shall only be compared with the unmodified return value from any Standard Library function capable of returning EOF + - N/A + - `Rule 22.7 `_ + * - Rule 22.8 + - Required + - The value of errno shall be set to zero prior to a call to an errno-setting-function + - N/A + - `Rule 22.8 `_ + * - Rule 22.9 + - Required + - The value of errno shall be tested against zero after calling an errno-setting-function + - N/A + - `Rule 22.9 `_ + * - Rule 22.10 + - Required + - The value of errno shall only be tested when the last function to be called was an errno-setting-function + - N/A + - `Rule 22.10 `_ Additional rules **************** From d3f6b54f8e9c112f92971a458422b5ace02c7f66 Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Mon, 19 Jul 2021 14:14:20 -0400 Subject: [PATCH 42/50] Microchip: MEC172x clock control driver Implement a clock control driver for Microchip MEC172x handling configuring the 32 KHz input sources for the PLL and peripheral-32k clock domains. MEC172x differs from MEC152x. MEC152x had one 32K source for both PLL and peripherals. MEC172x allows the two domains to use independent 32 KHz sources. Device tree updated to provide addresses of hardware used by the driver. Signed-off-by: Scott Worley --- .../mec172xevb_assy6906.dts | 4 + .../mec172xevb_assy6906_defconfig | 1 + drivers/clock_control/CMakeLists.txt | 1 + drivers/clock_control/Kconfig | 2 + drivers/clock_control/Kconfig.xec | 10 + .../clock_control/clock_control_mchp_xec.c | 651 ++++++++++++++++++ dts/arm/microchip/mec172xnsz.dtsi | 39 ++ dts/bindings/clock/microchip,xec-pcr.yaml | 52 ++ .../clock_control/mchp_xec_clock_control.h | 24 + include/dt-bindings/clock/mchp_xec_pcr.h | 35 + soc/arm/microchip_mec/common/soc_pcr.h | 55 ++ .../mec172x/Kconfig.defconfig.mec172xnsz | 4 + .../mec172x/Kconfig.defconfig.series | 3 + soc/arm/microchip_mec/mec172x/soc.h | 1 + 14 files changed, 882 insertions(+) create mode 100644 drivers/clock_control/Kconfig.xec create mode 100644 drivers/clock_control/clock_control_mchp_xec.c create mode 100644 dts/bindings/clock/microchip,xec-pcr.yaml create mode 100644 include/drivers/clock_control/mchp_xec_clock_control.h create mode 100644 include/dt-bindings/clock/mchp_xec_pcr.h create mode 100644 soc/arm/microchip_mec/common/soc_pcr.h diff --git a/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906.dts b/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906.dts index 4c2bd206656d4..a9174eeb1bed0 100644 --- a/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906.dts +++ b/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906.dts @@ -27,6 +27,10 @@ status = "okay"; }; +&pcr { + status = "okay"; +}; + &uart1 { status = "okay"; }; diff --git a/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906_defconfig b/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906_defconfig index 0bbd57f0c4e9e..f8c33a22e5944 100644 --- a/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906_defconfig +++ b/boards/arm/mec172xevb_assy6906/mec172xevb_assy6906_defconfig @@ -10,6 +10,7 @@ CONFIG_BOARD_MEC172XEVB_ASSY6906=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=96000000 +CONFIG_CLOCK_CONTROL=y CONFIG_SERIAL=y CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y diff --git a/drivers/clock_control/CMakeLists.txt b/drivers/clock_control/CMakeLists.txt index 49a0f1ec7bba6..ceea9dd42283e 100644 --- a/drivers/clock_control/CMakeLists.txt +++ b/drivers/clock_control/CMakeLists.txt @@ -18,6 +18,7 @@ zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_RV32M1_PCC clock_control_rv32 zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_ESP32 clock_control_esp32.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_LITEX clock_control_litex.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_RCAR_CPG_MSSR clock_control_rcar_cpg_mssr.c) +zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCHP_XEC clock_control_mchp_xec.c) if(CONFIG_CLOCK_CONTROL_STM32_CUBE) if(CONFIG_SOC_SERIES_STM32MP1X) diff --git a/drivers/clock_control/Kconfig b/drivers/clock_control/Kconfig index 2308346b9de03..5a604cc54a105 100644 --- a/drivers/clock_control/Kconfig +++ b/drivers/clock_control/Kconfig @@ -52,4 +52,6 @@ source "drivers/clock_control/Kconfig.litex" source "drivers/clock_control/Kconfig.rcar" +source "drivers/clock_control/Kconfig.xec" + endif # CLOCK_CONTROL diff --git a/drivers/clock_control/Kconfig.xec b/drivers/clock_control/Kconfig.xec new file mode 100644 index 0000000000000..22db035c88a35 --- /dev/null +++ b/drivers/clock_control/Kconfig.xec @@ -0,0 +1,10 @@ +# Microchip XEC + +# Copyright (c) 2021 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config CLOCK_CONTROL_MCHP_XEC + bool "MCHP XEC PCR clock control driver" + depends on SOC_SERIES_MEC172X + help + Enable support for Microchip XEC PCR clock driver. diff --git a/drivers/clock_control/clock_control_mchp_xec.c b/drivers/clock_control/clock_control_mchp_xec.c new file mode 100644 index 0000000000000..851130fb78329 --- /dev/null +++ b/drivers/clock_control/clock_control_mchp_xec.c @@ -0,0 +1,651 @@ +/* + * Copyright (c) 2021 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define DT_DRV_COMPAT microchip_xec_pcr + +#include +#include +#include +#include +#include +#include + +#include +LOG_MODULE_REGISTER(clock_control_xec, LOG_LEVEL_ERR); + +#define CLK32K_SIL_OSC_DELAY 256 +#define CLK32K_PLL_LOCK_WAIT (16 * 1024) +#define CLK32K_PIN_WAIT 4096 +#define CLK32K_XTAL_WAIT (16 * 1024) +#define CLK32K_XTAL_MON_WAIT (64 * 1024) + +/* + * Counter checks: + * 32KHz period counter minimum for pass/fail: 16-bit + * 32KHz period counter maximum for pass/fail: 16-bit + * 32KHz duty cycle variation max for pass/fail: 16-bit + * 32KHz valid count minimum: 8-bit + * + * 32768 Hz period is 30.518 us + * HW count resolution is 48 MHz. + * One 32KHz clock pulse = 1464.84 48 MHz counts. + */ +#define CNT32K_TMIN 1435 +#define CNT32K_TMAX 1495 +#define CNT32K_DUTY_MAX 74 +#define CNT32K_VAL_MIN 4 + +#define DEST_PLL 0 +#define DEST_PERIPH 1 + +#define CLK32K_FLAG_CRYSTAL_SE BIT(0) +#define CLK32K_FLAG_PIN_FB_CRYSTAL BIT(1) + +#define PCR_PERIPH_RESET_SPIN 8u + +#define HIBTIMER_10_MS 328u +#define HIBTIMER_300_MS 9830u + +#define PCR_XEC_REG_BASE \ + ((struct pcr_regs *)(DT_REG_ADDR(DT_NODELABEL(pcr)))) + +#define HIBTIMER_0_XEC_REG_BASE \ + ((struct htmr_regs *)(DT_REG_ADDR(DT_NODELABEL(hibtimer0)))) + +#define GIRQ23_XEC_REG_BASE \ + ((struct girq_regs *)(DT_REG_ADDR(DT_NODELABEL(girq23)))) + +enum clk32k_src { + CLK32K_SRC_SIL_OSC = 0, + CLK32K_SRC_CRYSTAL, + CLK32K_SRC_MAX +}; + +enum clk32k_dest { CLK32K_DEST_PLL = 0, CLK32K_DEST_PERIPH, CLK32K_DEST_MAX }; + + +/* Driver config */ +struct xec_pcr_config { + uintptr_t pcr_base; /* pcr base address */ + uintptr_t vbr_base; /* vbat registers base address */ +}; + +/* Driver convenience defines */ + +#define PCR_NODE_LBL DT_NODELABEL(pcr) + +#define XEC_CORE_CLK_DIV \ + DT_PROP_OR(PCR_NODE_LBL, core_clk_div, CONFIG_SOC_MEC172X_PROC_CLK_DIV) + +#define DRV_CONFIG(dev) \ + ((const struct xec_pcr_config *)(dev)->config) + +#define XEC_PCR_REGS_BASE(dev) \ + (struct pcr_regs *)(DRV_CONFIG(dev)->pcr_base) + +#define XEC_VBATR_REGS_BASE(dev) \ + (struct vbatr_regs *)(DRV_CONFIG(dev)->vbr_base) + +/* + * In early Zephyr initialization we don't have timer services. Also, the SoC + * may be running on its ring oscillator (+/- 50% accuracy). Configuring the + * SoC's clock subsystem requires wait/delays. We implement a simple delay + * by writing to a read-only hardware register in the PCR block. + */ +static uint32_t spin_delay(struct pcr_regs *pcr, uint32_t cnt) +{ + uint32_t n; + + for (n = 0U; n < cnt; n++) { + pcr->OSC_ID = n; + } + + return n; +} + +/* + * Make sure PCR sleep enables are clear except for crypto + * which do not have internal clock gating. + */ +static void pcr_slp_init(struct pcr_regs *pcr) +{ + pcr->SYS_SLP_CTRL = 0U; + SCB->SCR &= ~BIT(2); + + for (int i = 0; i < MCHP_MAX_PCR_SCR_REGS; i++) { + pcr->SLP_EN[i] = 0U; + } + + pcr->SLP_EN[3] = MCHP_PCR3_CRYPTO_MASK; +} + +static bool is_sil_osc_enabled(struct vbatr_regs *vbr) +{ + if (vbr->CLK32_SRC & MCHP_VBATR_CS_SO_EN) { + return true; + } + + return false; +} + +static void enable_sil_osc(struct vbatr_regs *vbr) +{ + vbr->CLK32_SRC |= MCHP_VBATR_CS_SO_EN; +} + +/* caller has enabled internal silicon 32 KHz oscillator */ +static void hib_timer_delay(uint16_t hib_timer_count) +{ + struct htmr_regs *htmr0 = HIBTIMER_0_XEC_REG_BASE; + struct girq_regs *girq23 = GIRQ23_XEC_REG_BASE; + + htmr0->PRLD = 0; /* disable */ + htmr0->CTRL = 0; /* 32k time base */ + girq23->SRC = BIT(16); /* clear hibernation timer 0 status */ + htmr0->PRLD = hib_timer_count; + if (hib_timer_count == 0) { + return; + } + + while ((girq23->SRC & BIT(16)) == 0) { + ; + } + + girq23->SRC = BIT(16); + htmr0->PRLD = 0; /* disable */ +} + +/* + * Start external 32 KHz crystal. + * Assumes peripheral clocks source is Silicon OSC. + * If current configuration matches desired crystal configuration do nothing. + * NOTE: Crystal requires ~300 ms to stabilize. + */ +static int enable_32k_crystal(const struct device *dev, uint32_t flags) +{ + struct vbatr_regs *const vbr = XEC_VBATR_REGS_BASE(dev); + uint32_t vbcs = vbr->CLK32_SRC; + uint32_t cfg = MCHP_VBATR_CS_XTAL_EN; + + if (flags & CLK32K_FLAG_CRYSTAL_SE) { + cfg |= MCHP_VBATR_CS_XTAL_SE; + } + + if ((vbcs & cfg) == cfg) { + return 0; + } + + /* Configure crystal connection before enabling the crystal. */ + vbr->CLK32_SRC &= ~(MCHP_VBATR_CS_XTAL_SE | MCHP_VBATR_CS_XTAL_DHC | + MCHP_VBATR_CS_XTAL_CNTR_MSK); + if (flags & CLK32K_FLAG_CRYSTAL_SE) { + vbr->CLK32_SRC |= MCHP_VBATR_CS_XTAL_SE; + } + + /* Set crystal gain */ + vbr->CLK32_SRC |= MCHP_VBATR_CS_XTAL_CNTR_DG; + + /* enable crystal */ + vbr->CLK32_SRC |= MCHP_VBATR_CS_XTAL_EN; + /* wait for crystal stabilization */ + hib_timer_delay(HIBTIMER_300_MS); + /* turn off crystal high startup current */ + vbr->CLK32_SRC |= MCHP_VBATR_CS_XTAL_DHC; + + return 0; +} + +/* + * Use PCR clock monitor hardware to test crystal output. + * Requires crystal to have stabilized after enable. + * When enabled the clock monitor hardware measures high/low, edges, and + * duty cycle and compares to programmed limits. + */ +static int check_32k_crystal(const struct device *dev) +{ + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + struct htmr_regs *htmr0 = HIBTIMER_0_XEC_REG_BASE; + struct girq_regs *girq23 = GIRQ23_XEC_REG_BASE; + uint32_t status = 0; + int rc = 0; + + htmr0->PRLD = 0; + htmr0->CTRL = 0; + girq23->SRC = BIT(16); + + pcr->CNT32K_CTRL = 0U; + pcr->CLK32K_MON_IEN = 0U; + pcr->CLK32K_MON_ISTS = MCHP_PCR_CLK32M_ISTS_MASK; + + pcr->CNT32K_PER_MIN = CNT32K_TMIN; + pcr->CNT32K_PER_MAX = CNT32K_TMAX; + pcr->CNT32K_DV_MAX = CNT32K_DUTY_MAX; + pcr->CNT32K_VALID_MIN = CNT32K_VAL_MIN; + + pcr->CNT32K_CTRL = + MCHP_PCR_CLK32M_CTRL_PER_EN | MCHP_PCR_CLK32M_CTRL_DC_EN | + MCHP_PCR_CLK32M_CTRL_VAL_EN | MCHP_PCR_CLK32M_CTRL_CLR_CNT; + + rc = -ETIMEDOUT; + htmr0->PRLD = HIBTIMER_10_MS; + status = pcr->CLK32K_MON_ISTS; + + while ((girq23->SRC & BIT(16)) == 0) { + if (status == (MCHP_PCR_CLK32M_ISTS_PULSE_RDY | + MCHP_PCR_CLK32M_ISTS_PASS_PER | + MCHP_PCR_CLK32M_ISTS_PASS_DC | + MCHP_PCR_CLK32M_ISTS_VALID)) { + rc = 0; + break; + } + + if (status & (MCHP_PCR_CLK32M_ISTS_FAIL | + MCHP_PCR_CLK32M_ISTS_STALL)) { + rc = -EBUSY; + break; + } + + status = pcr->CLK32K_MON_ISTS; + } + + pcr->CNT32K_CTRL = 0u; + htmr0->PRLD = 0; + girq23->SRC = BIT(16); + + return rc; +} + +/* + * Set the clock source for either PLL or Peripheral-32K clock domain. + * The source must be a stable 32 KHz input: internal silicon oscillator, + * external crystal (parallel or single ended connection), or a 50% duty cycle + * waveform on the 32KHZ_PIN. The driver does not implement 32KHZ_PIN support + * at this time. + */ +static void connect_32k_source(const struct device *dev, enum clk32k_src src, + enum clk32k_dest dest, uint32_t flags) +{ + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + struct vbatr_regs *const vbr = XEC_VBATR_REGS_BASE(dev); + + if (dest == CLK32K_DEST_PLL) { + switch (src) { + case CLK32K_SRC_SIL_OSC: + pcr->CLK32K_SRC_VTR = MCHP_PCR_VTR_32K_SRC_SILOSC; + break; + case CLK32K_SRC_CRYSTAL: + pcr->CLK32K_SRC_VTR = MCHP_PCR_VTR_32K_SRC_XTAL; + break; + default: /* do not touch HW */ + break; + } + } else if (dest == CLK32K_DEST_PERIPH) { + uint32_t vbcs = vbr->CLK32_SRC & ~(MCHP_VBATR_CS_PCS_MSK); + + switch (src) { + case CLK32K_SRC_SIL_OSC: + vbr->CLK32_SRC = vbcs | MCHP_VBATR_CS_PCS_VTR_VBAT_SO; + break; + case CLK32K_SRC_CRYSTAL: + vbr->CLK32_SRC = vbcs | MCHP_VBATR_CS_PCS_VTR_VBAT_XTAL; + break; + default: /* do not touch HW */ + break; + } + } +} + +/* + * This routine checks if the PLL is locked to its input source. Minimum lock + * time is 3.3 ms. Lock time can be larger when the source is an external + * crystal. Crystal cold start times may vary greatly based on many factors. + * Crystals do not like being power cycled. + */ +static int pll_wait_lock(struct pcr_regs *const pcr, uint32_t wait_cnt) +{ + while (!(pcr->OSC_ID & MCHP_PCR_OSC_ID_PLL_LOCK)) { + if (wait_cnt == 0) { + return -ETIMEDOUT; + } + --wait_cnt; + } + + return 0; +} + +/* + * MEC172x has two 32 KHz clock domains + * PLL domain: 32 KHz clock input for PLL to produce 96 MHz and 48 MHz clocks + * Peripheral domain: 32 KHz clock for subset of peripherals. + * Each domain 32 KHz clock input can be from one of the following sources: + * Internal Silicon oscillator: +/- 2% + * External Crystal connected as parallel or single ended + * External 32KHZ_PIN 50% duty cycle waveform with fall back to either + * Silicon OSC or crystal when 32KHZ_PIN signal goes away or VTR power rail + * goes off. + * At chip reset the PLL is held in reset and the +/- 50% ring oscillator is + * the main clock. + * If no VBAT reset occurs the VBAT 32 KHz soure register maintains its state. + */ +static int soc_clk32_init(const struct device *dev, + enum clk32k_src pll_clk_src, + enum clk32k_src periph_clk_src, + uint32_t flags) +{ + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + struct vbatr_regs *const vbr = XEC_VBATR_REGS_BASE(dev); + int rc = 0; + + /* disable PCR 32K monitor and clear counters */ + pcr->CNT32K_CTRL = MCHP_PCR_CLK32M_CTRL_CLR_CNT; + pcr->CLK32K_MON_ISTS = MCHP_PCR_CLK32M_ISTS_MASK; + pcr->CLK32K_MON_IEN = 0; + + if (!is_sil_osc_enabled(vbr)) { + enable_sil_osc(vbr); + spin_delay(pcr, CLK32K_SIL_OSC_DELAY); + } + + /* Default to 32KHz Silicon OSC for PLL and peripherals */ + connect_32k_source(dev, CLK32K_SRC_SIL_OSC, CLK32K_DEST_PLL, 0); + connect_32k_source(dev, CLK32K_SRC_SIL_OSC, CLK32K_DEST_PERIPH, 0); + + rc = pll_wait_lock(pcr, CLK32K_PLL_LOCK_WAIT); + if (rc) { + return rc; + } + + /* We only allow Silicon OSC or Crystal as a source. */ + if ((pll_clk_src == CLK32K_SRC_CRYSTAL) || + (periph_clk_src == CLK32K_SRC_CRYSTAL)) { + enable_32k_crystal(dev, flags); + rc = check_32k_crystal(dev); + if (rc) { + /* disable crystal */ + vbr->CLK32_SRC &= ~(MCHP_VBATR_CS_XTAL_EN); + return rc; + } + if (pll_clk_src == CLK32K_SRC_CRYSTAL) { + connect_32k_source(dev, CLK32K_SRC_CRYSTAL, + CLK32K_DEST_PLL, flags); + } + if (periph_clk_src == CLK32K_SRC_CRYSTAL) { + connect_32k_source(dev, CLK32K_SRC_CRYSTAL, + CLK32K_DEST_PERIPH, flags); + } + rc = pll_wait_lock(pcr, CLK32K_PLL_LOCK_WAIT); + } + + return rc; +} + +/* + * MEC172x Errata document DS80000913C + * Programming the PCR clock divider that divides the clock input to the ARM + * Cortex-M4 may cause a clock glitch. The recommended work-around is to + * issue four NOP instruction before and after the write to the PCR processor + * clock control register. The final four NOP instructions are followed by + * data and instruction barriers to flush the Cortex-M4's pipeline. + * NOTE: Zephyr provides inline functions for Cortex-Mx NOP but not for + * data and instruction barrier instructions. Caller's should only invoke this + * function with interrupts locked. + */ +static void xec_clock_control_core_clock_divider_set(uint8_t clkdiv) +{ + struct pcr_regs *const pcr = + (struct pcr_regs *)(DT_REG_ADDR(DT_NODELABEL(pcr))); + + arch_nop(); + arch_nop(); + arch_nop(); + arch_nop(); + pcr->PROC_CLK_CTRL = (uint32_t)clkdiv; + arch_nop(); + arch_nop(); + arch_nop(); + arch_nop(); + __DSB(); + __ISB(); +} + +/* + * PCR peripheral sleep enable allows the clocks to a specific peripheral to + * be gated off if the peripheral is not requesting a clock. + * slp_idx = zero based index into 32-bit PCR sleep enable registers. + * slp_pos = bit position in the register + * slp_en if non-zero set the bit else clear the bit + */ +int z_mchp_xec_pcr_periph_sleep(uint8_t slp_idx, uint8_t slp_pos, + uint8_t slp_en) +{ + struct pcr_regs *regs = PCR_XEC_REG_BASE; + + if ((slp_idx >= MCHP_MAX_PCR_SCR_REGS) || (slp_pos >= 32)) { + return -EINVAL; + } + + if (slp_en) { + regs->SLP_EN[slp_idx] |= BIT(slp_pos); + } else { + regs->SLP_EN[slp_idx] &= ~BIT(slp_pos); + } + + return 0; +} + +/* clock control driver API implementation */ + +static int xec_cc_on(const struct device *dev, + clock_control_subsys_t sub_system, + bool turn_on) +{ + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + struct mchp_xec_pcr_clk_ctrl *cc = + (struct mchp_xec_pcr_clk_ctrl *)sub_system; + uint16_t pcr_idx = 0; + uint16_t bitpos = 0; + + if (!cc) { + return -EINVAL; + } + + switch (MCHP_XEC_CLK_SRC_GET(cc->pcr_info)) { + case MCHP_XEC_PCR_CLK_CORE: + case MCHP_XEC_PCR_CLK_BUS: + break; + case MCHP_XEC_PCR_CLK_CPU: + if (cc->pcr_info & MCHP_XEC_CLK_CPU_MASK) { + uint32_t lock = irq_lock(); + + xec_clock_control_core_clock_divider_set( + cc->pcr_info & MCHP_XEC_CLK_CPU_MASK); + + irq_unlock(lock); + } else { + return -EINVAL; + } + break; + case MCHP_XEC_PCR_CLK_PERIPH: + case MCHP_XEC_PCR_CLK_PERIPH_FAST: + pcr_idx = MCHP_XEC_PCR_SCR_GET_IDX(cc->pcr_info); + bitpos = MCHP_XEC_PCR_SCR_GET_BITPOS(cc->pcr_info); + + if (pcr_idx >= MCHP_MAX_PCR_SCR_REGS) { + return -EINVAL; + } + + if (turn_on) { + pcr->SLP_EN[pcr_idx] &= ~BIT(bitpos); + } else { + pcr->SLP_EN[pcr_idx] |= BIT(bitpos); + } + break; + case MCHP_XEC_PCR_CLK_PERIPH_SLOW: + if (turn_on) { + pcr->SLOW_CLK_CTRL = + cc->pcr_info & MCHP_XEC_CLK_SLOW_MASK; + } else { + pcr->SLOW_CLK_CTRL = 0; + } + break; + default: + return -EINVAL; + } + + return 0; +} + +/* + * Turn on requested clock source. + * Core, CPU, and Bus clocks are always on except in deep sleep state. + * Peripheral clocks can be gated off if the peripheral's PCR sleep enable + * is set and the peripheral indicates it does not need a clock by clearing + * its PCR CLOCK_REQ read-only status. + * Peripheral slow clock my be turned on by writing a non-zero divider value + * to its PCR control register. + */ +static int xec_clock_control_on(const struct device *dev, + clock_control_subsys_t sub_system) +{ + return xec_cc_on(dev, sub_system, true); +} + +/* + * Turn off clock source. + * Core, CPU, and Bus clocks are always on except in deep sleep when PLL is + * turned off. Exception is 32 KHz clock. + * Peripheral clocks are gated off when the peripheral's sleep enable is set + * and the peripheral indicates is no longer needs a clock by de-asserting + * its read-only PCR CLOCK_REQ bit. + * Peripheral slow clock can be turned off by writing 0 to its control register. + */ +static inline int xec_clock_control_off(const struct device *dev, + clock_control_subsys_t sub_system) +{ + return xec_cc_on(dev, sub_system, false); +} + +/* + * MEC172x clock subsystem: + * Two main clock domains: PLL and Peripheral-32K. Each domain's 32 KHz source + * can be selected from one of three inputs: + * internal silicon OSC +/- 2% accuracy + * external crystal connected parallel or single ended + * external 32 KHz 50% duty cycle waveform on 32KHZ_IN pin. + * PLL domain supplies 96 MHz, 48 MHz, and other high speed clocks to all + * peripherals except those in the Peripheral-32K clock domain. The slow clock + * is derived from the 48 MHz produced by the PLL. + * ARM Cortex-M4 core input: 96MHz + * AHB clock input: 48 MHz + * Fast AHB peripherals: 96 MHz internal and 48 MHz AHB interface. + * Slow clock peripherals: PWM, TACH, PROCHOT + * Peripheral-32K domain peripherals: + * WDT, RTC, RTOS timer, hibernation timers, week timer + * + * Peripherals using both PLL and 32K clock domains: + * BBLED, RPMFAN + */ +static int xec_clock_control_get_subsys_rate(const struct device *dev, + clock_control_subsys_t sub_system, + uint32_t *rate) +{ + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + uint32_t bus = (uint32_t)sub_system; + uint32_t temp = 0; + + switch (bus) { + case MCHP_XEC_PCR_CLK_CORE: + case MCHP_XEC_PCR_CLK_PERIPH_FAST: + *rate = MHZ(96); + break; + case MCHP_XEC_PCR_CLK_CPU: + /* if PCR PROC_CLK_CTRL is 0 the chip is not running */ + *rate = MHZ(96) / pcr->PROC_CLK_CTRL; + break; + case MCHP_XEC_PCR_CLK_BUS: + case MCHP_XEC_PCR_CLK_PERIPH: + *rate = MHZ(48); + break; + case MCHP_XEC_PCR_CLK_PERIPH_SLOW: + temp = pcr->SLOW_CLK_CTRL; + if (pcr->SLOW_CLK_CTRL) { + *rate = MHZ(48) / temp; + } else { + *rate = 0; /* slow clock off */ + } + break; + default: + *rate = 0; + return -EINVAL; + } + + return 0; +} + +#if defined(CONFIG_PM) +void mchp_xec_clk_ctrl_sys_sleep_enable(bool is_deep) +{ + struct pcr_regs *const pcr = + (struct pcr_regs *)(DT_REG_ADDR(DT_NODELABEL(pcr))); + uint32_t sys_sleep_mode = MCHP_PCR_SYS_SLP_CTRL_SLP_ALL; + + if (is_deep) { + sys_sleep_mode |= MCHP_PCR_SYS_SLP_CTRL_SLP_HEAVY; + } + + SCB->SCR |= BIT(2); + pcr->SYS_SLP_CTRL = sys_sleep_mode; +} + +void mchp_xec_clk_ctrl_sys_sleep_disable(void) +{ + struct pcr_regs *const pcr = + (struct pcr_regs *)(DT_REG_ADDR(DT_NODELABEL(pcr))); + + pcr->SYS_SLP_CTRL = 0; + SCB->SCR &= ~BIT(2); +} +#endif + +/* Clock controller driver registration */ +static struct clock_control_driver_api xec_clock_control_api = { + .on = xec_clock_control_on, + .off = xec_clock_control_off, + .get_rate = xec_clock_control_get_subsys_rate, +}; + +static int xec_clock_control_init(const struct device *dev) +{ + int rc = 0; + uint32_t clk32_flags = 0; + struct pcr_regs *const pcr = XEC_PCR_REGS_BASE(dev); + enum clk32k_src clk_src_pll = + DT_PROP_OR(PCR_NODE_LBL, pll_32k_src, CLK32K_SRC_SIL_OSC); + enum clk32k_src clk_src_periph = + DT_PROP_OR(PCR_NODE_LBL, periph_32k_src, CLK32K_SRC_SIL_OSC); + + pcr_slp_init(pcr); + + rc = soc_clk32_init(dev, clk_src_pll, clk_src_periph, clk32_flags); + __ASSERT(rc == 0, "XEC: PLL and 32 KHz clock initialization failed"); + + xec_clock_control_core_clock_divider_set(XEC_CORE_CLK_DIV); + + return rc; +} + +const struct xec_pcr_config xec_config = { + .pcr_base = DT_INST_REG_ADDR_BY_IDX(0, 0), + .vbr_base = DT_INST_REG_ADDR_BY_IDX(0, 1), +}; + +DEVICE_DT_INST_DEFINE(0, + &xec_clock_control_init, + NULL, + NULL, &xec_config, + PRE_KERNEL_1, + CONFIG_KERNEL_INIT_PRIORITY_OBJECTS, + &xec_clock_control_api); diff --git a/dts/arm/microchip/mec172xnsz.dtsi b/dts/arm/microchip/mec172xnsz.dtsi index 86cf9af079688..c43c8ecdf6088 100644 --- a/dts/arm/microchip/mec172xnsz.dtsi +++ b/dts/arm/microchip/mec172xnsz.dtsi @@ -8,6 +8,7 @@ #include #include +#include / { cpus { @@ -31,6 +32,37 @@ }; soc { + ecs: ecs@4000fc00 { + reg = <0x4000fc00 0x200>; + label = "ECS"; + }; + pcr: pcr@40080100 { + compatible = "microchip,xec-pcr"; + reg = <0x40080100 0x100 0x4000a400 0x100>; + reg-names = "pcrr", "vbatr"; + interrupts = <174 0>; + label = "PCR"; + core-clock-div = <1>; + pll-32k-src = ; + periph-32k-src = ; + #clock-cells = <2>; + }; + girq23: girq23@4000e12c { + reg = <0x4000e12c 0x14>; + label = "GIRQ_23"; + }; + hibtimer0: timer@40009800 { + reg = <0x40009800 0x20>; + interrupts = <112 0>; + girqs = <23 16>; + label = "HIBTIMER_0"; + }; + hibtimer1: timer@40009820 { + reg = <0x40009820 0x20>; + interrupts = <113 0>; + girqs = <23 17>; + label = "HIBTIMER_1"; + }; uart0: uart@400f2400 { compatible = "ns16550"; reg = <0x400f2400 0x400>; @@ -51,6 +83,13 @@ reg-shift = <0>; status = "disabled"; }; + glblcfg0: glblcfg@400fff00 { + reg = <0x400fff00 0x40>; + pcrs = <2 12>; + label = "GLBLCFG_0"; + #pcrs-cells = <2>; + status = "disabled"; + }; }; }; diff --git a/dts/bindings/clock/microchip,xec-pcr.yaml b/dts/bindings/clock/microchip,xec-pcr.yaml new file mode 100644 index 0000000000000..45412a1430d94 --- /dev/null +++ b/dts/bindings/clock/microchip,xec-pcr.yaml @@ -0,0 +1,52 @@ +# Copyright (c) 2021, Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +description: Microchip XEC Power Clock Reset and VBAT register (PCR) + +compatible: "microchip,xec-pcr" + +include: [clock-controller.yaml, base.yaml] + +properties: + reg: + required: true + + interrupts: + required: true + + label: + required: true + + core-clock-div: + type: int + required: true + description: Divide 96 MHz PLL clock to produce Cortex-M4 core clock + + slow-clock-div: + type: int + required: false + description: | + PWM and TACH clock domain divided down from 48 MHz AHB clock. The + default value is 480 for 100 kHz. + + pll-32k-src: + type: int + required: true + description: 32 KHz clock source for PLL + + periph-32k-src: + type: int + required: true + description: 32 KHz clock source for peripherals + + xtal-single-ended: + type: boolean + required: false + description: Use single ended crystal connection to XTAL2 pin. + + "#clock-cells": + const: 2 + +clock-cells: + - regidx + - bitpos diff --git a/include/drivers/clock_control/mchp_xec_clock_control.h b/include/drivers/clock_control/mchp_xec_clock_control.h new file mode 100644 index 0000000000000..c87aa7cfa229b --- /dev/null +++ b/include/drivers/clock_control/mchp_xec_clock_control.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_MCHP_XEC_H_ +#define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_MCHP_XEC_H_ + +#include +#include + +/* + * Set/clear Microchip XEC peripheral sleep enable. + * SoC layer contains the chip specific sleep index and positions + */ +int z_mchp_xec_pcr_periph_sleep(uint8_t slp_idx, uint8_t slp_pos, + uint8_t slp_en); + +#if defined(CONFIG_PM) +void mchp_xec_clk_ctrl_sys_sleep_enable(bool is_deep); +void mchp_xec_clk_ctrl_sys_sleep_disable(void); +#endif + +#endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_LPC11U6X_CLOCK_CONTROL_H_ */ diff --git a/include/dt-bindings/clock/mchp_xec_pcr.h b/include/dt-bindings/clock/mchp_xec_pcr.h new file mode 100644 index 0000000000000..2d2ed370ea432 --- /dev/null +++ b/include/dt-bindings/clock/mchp_xec_pcr.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_MCHP_XEC_H_ +#define ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_MCHP_XEC_H_ + +/* PLL and Peripheral 32 KHz clock source */ +#define MCHP_XEC_CLK32K_SRC_SIL_OSC 0U +#define MCHP_XEC_CLK32K_SRC_XTAL 1U +#define MCHP_XEC_CLK32K_SRC_PIN 2U + +/* Crystal connection */ +#define MCHP_XEC_XTAL_PARALLEL 0U +#define MCHP_XEC_XTAL_SINGLE_ENDED 1U + +/* + * When the 32KHz pin goes down fall back + * to either internal silicon oscillator + * or crystal. + */ +#define MCHP_XEC_PIN32K_FB_SIL_OSC 0U +#define MCHP_XEC_PIN32K_FB_XTAL 1U + +/* clocks supported by the driver */ +#define MCHP_XEC_PCR_CLK_CORE 0 +#define MCHP_XEC_PCR_CLK_CPU 1 +#define MCHP_XEC_PCR_CLK_BUS 2 +#define MCHP_XEC_PCR_CLK_PERIPH 3 +#define MCHP_XEC_PCR_CLK_PERIPH_FAST 4 +#define MCHP_XEC_PCR_CLK_PERIPH_SLOW 5 + +#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_MCHP_XEC_H_ */ diff --git a/soc/arm/microchip_mec/common/soc_pcr.h b/soc/arm/microchip_mec/common/soc_pcr.h new file mode 100644 index 0000000000000..81ce966b8e145 --- /dev/null +++ b/soc/arm/microchip_mec/common/soc_pcr.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef _SOC_MCHP_PCR_H_ +#define _SOC_MCHP_PCR_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* slp_idx = [0, 4], bitpos = [0, 31] refer above */ +#define MCHP_XEC_PCR_SCR_ENCODE(slp_idx, bitpos) \ + (((uint16_t)(slp_idx) & 0x7u) | (((uint16_t)bitpos & 0x1fu) << 3)) + +#define MCHP_XEC_PCR_SCR_GET_IDX(e) ((e) & 0x7u) +#define MCHP_XEC_PCR_SCR_GET_BITPOS(e) (((e) & 0xf8u) >> 3) + +/* cpu clock divider */ +#define MCHP_XEC_CLK_CPU_MASK GENMASK(7, 0) +#define MCHP_XEC_CLK_CPU_CLK_DIV_1 1u +#define MCHP_XEC_CLK_CPU_CLK_DIV_2 2u +#define MCHP_XEC_CLK_CPU_CLK_DIV_4 4u +#define MCHP_XEC_CLK_CPU_CLK_DIV_8 8u +#define MCHP_XEC_CLK_CPU_CLK_DIV_16 16u +#define MCHP_XEC_CLK_CPU_CLK_DIV_48 48u + +/* slow clock divider */ +#define MCHP_XEC_CLK_SLOW_MASK GENMASK(8, 0) +#define MCHP_XEC_CLK_SLOW_CLK_DIV_100K 480u + +#define MCHP_XEC_CLK_SRC_POS 24 +#define MCHP_XEC_CLK_SRC_MASK GENMASK(31, 24) + +#define MCHP_XEC_CLK_SRC_GET(n) \ + (((n) & MCHP_XEC_CLK_SRC_MASK) >> MCHP_XEC_CLK_SRC_POS) + +#define MCHP_XEC_CLK_SRC_SET(v, c) (((v) & ~MCHP_XEC_CLK_SRC_MASK) |\ + (((c) << MCHP_XEC_CLK_SRC_POS) & MCHP_XEC_CLK_SRC_MASK)) + +/* + * b[31:24] = clock source + * b[23:0] = clock source specific format + */ +struct mchp_xec_pcr_clk_ctrl { + uint32_t pcr_info; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _SOC_MCHP_PCR_H_ */ diff --git a/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.mec172xnsz b/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.mec172xnsz index f8fc88d43abd0..ffe67501aee57 100644 --- a/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.mec172xnsz +++ b/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.mec172xnsz @@ -8,4 +8,8 @@ if SOC_MEC172X_NSZ config SOC default "mec172xnsz" +config UART_NS16550 + default y + depends on SERIAL + endif # SOC_MEC172X_NSZ diff --git a/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.series b/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.series index 036eb2169f3ef..c783649418fce 100644 --- a/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.series +++ b/soc/arm/microchip_mec/mec172x/Kconfig.defconfig.series @@ -19,4 +19,7 @@ source "soc/arm/microchip_mec/mec172x/Kconfig.defconfig.mec172x*" config CORTEX_M_SYSTICK default y +config CLOCK_CONTROL_MCHP_XEC + default y + endif # SOC_SERIES_MEC172X diff --git a/soc/arm/microchip_mec/mec172x/soc.h b/soc/arm/microchip_mec/mec172x/soc.h index 675a16aeaadb6..0523753c59f1c 100644 --- a/soc/arm/microchip_mec/mec172x/soc.h +++ b/soc/arm/microchip_mec/mec172x/soc.h @@ -58,6 +58,7 @@ /* common SoC API */ #include "../common/soc_gpio.h" +#include "../common/soc_pcr.h" #include "../common/soc_pins.h" #include "../common/soc_espi_channels.h" #include "../common/soc_espi_saf.h" From 89482f0119f9ab80437dce7913e0cd22e0b897e9 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Fri, 25 Jun 2021 18:54:17 -0400 Subject: [PATCH 43/50] net: ethernet: bridging support This adds the ability to create Ethernet bridges for connecting separate Ethernet segments together to appear as a single Ethernet network. This mimics the Linux functionality of the same name. Signed-off-by: Nicolas Pitre --- boards/arm/ip_k66f/linker.ld | 3 +- include/linker/common-ram.ld | 3 +- include/net/ethernet.h | 8 + include/net/ethernet_bridge.h | 189 +++++++++++++++++++++ include/net/net_pkt.h | 19 +++ subsys/net/ip/net_pkt.c | 5 + subsys/net/l2/ethernet/CMakeLists.txt | 1 + subsys/net/l2/ethernet/Kconfig | 15 ++ subsys/net/l2/ethernet/bridge.c | 229 ++++++++++++++++++++++++++ subsys/net/l2/ethernet/bridge.h | 22 +++ subsys/net/l2/ethernet/ethernet.c | 28 +++- 11 files changed, 519 insertions(+), 3 deletions(-) create mode 100644 include/net/ethernet_bridge.h create mode 100644 subsys/net/l2/ethernet/bridge.c create mode 100644 subsys/net/l2/ethernet/bridge.h diff --git a/boards/arm/ip_k66f/linker.ld b/boards/arm/ip_k66f/linker.ld index 9641df553e1db..b8aa54b678b6b 100644 --- a/boards/arm/ip_k66f/linker.ld +++ b/boards/arm/ip_k66f/linker.ld @@ -39,6 +39,7 @@ SECTION_DATA_PROLOGUE(net_if_area,,SUBALIGN(4)) \ _net_if_list_end = .; \ } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) \ Z_ITERABLE_SECTION_RAM(net_if_dev, 4) \ -Z_ITERABLE_SECTION_RAM(net_l2, 4) +Z_ITERABLE_SECTION_RAM(net_l2, 4) \ +Z_ITERABLE_SECTION_RAM(eth_bridge, 4) #include diff --git a/include/linker/common-ram.ld b/include/linker/common-ram.ld index 9fb4292a21ba6..a324f4dbcad9e 100644 --- a/include/linker/common-ram.ld +++ b/include/linker/common-ram.ld @@ -5,7 +5,8 @@ #define NETWORK_RAM_SECTIONS \ Z_ITERABLE_SECTION_RAM(net_if, 4) \ Z_ITERABLE_SECTION_RAM(net_if_dev, 4) \ - Z_ITERABLE_SECTION_RAM(net_l2, 4) + Z_ITERABLE_SECTION_RAM(net_l2, 4) \ + Z_ITERABLE_SECTION_RAM(eth_bridge, 4) #endif #endif /* NETWORKING */ diff --git a/include/net/ethernet.h b/include/net/ethernet.h index 47cc0ae0dfc75..f12bffa1dafdf 100644 --- a/include/net/ethernet.h +++ b/include/net/ethernet.h @@ -34,6 +34,10 @@ #include #endif +#if defined(CONFIG_NET_ETHERNET_BRIDGE) +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -521,6 +525,10 @@ struct ethernet_context { ATOMIC_DEFINE(interfaces, NET_VLAN_MAX_COUNT); #endif +#if defined(CONFIG_NET_ETHERNET_BRIDGE) + struct eth_bridge_iface_context bridge; +#endif + /** Carrier ON/OFF handler worker. This is used to create * network interface UP/DOWN event when ethernet L2 driver * notices carrier ON/OFF situation. We must not create another diff --git a/include/net/ethernet_bridge.h b/include/net/ethernet_bridge.h new file mode 100644 index 0000000000000..ad546c56d0a16 --- /dev/null +++ b/include/net/ethernet_bridge.h @@ -0,0 +1,189 @@ +/** @file + * @brief Ethernet Bridge public header file + * + * Ethernet Bridges connect two or more Ethernet networks together and + * transparently forward packets from one network to the others as if + * they were part of the same network. + */ + +/* + * Copyright (c) 2021 BayLibre SAS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_ +#define ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Ethernet Bridging API + * @defgroup eth_bridge Ethernet Bridging API + * @ingroup networking + * @{ + */ + +/** @cond INTERNAL_HIDDEN */ + +struct eth_bridge { + struct k_mutex lock; + sys_slist_t interfaces; + sys_slist_t listeners; +}; + +#define ETH_BRIDGE_INITIALIZER(obj) \ + { \ + .lock = { }, \ + .interfaces = SYS_SLIST_STATIC_INIT(&obj.interfaces), \ + .listeners = SYS_SLIST_STATIC_INIT(&obj.listeners), \ + } + +/** @endcond */ + +/** + * @brief Statically define and initialize a bridge instance. + * + * @param name Name of the bridge object + */ +#define ETH_BRIDGE_INIT(name) \ + Z_STRUCT_SECTION_ITERABLE(eth_bridge, name) = \ + ETH_BRIDGE_INITIALIZER(name) + +struct eth_bridge_iface_context { + sys_snode_t node; + struct eth_bridge *instance; + bool allow_tx; +}; + +struct eth_bridge_listener { + sys_snode_t node; + struct k_fifo pkt_queue; +}; + +/** + * @brief Add an Ethernet network interface to a bridge + * + * This adds a network interface to a bridge. The interface is then put + * into promiscuous mode, all packets received by this interface are sent + * to the bridge, and any other packets sent to the bridge (with some + * exceptions) are transmitted via this interface. + * + * For transmission from the bridge to occur via this interface, it is + * necessary to enable TX mode with eth_bridge_iface_tx(). TX mode is + * initially disabled. + * + * Once an interface is added to a bridge, all its incoming traffic is + * diverted to the bridge. However, packets sent out with net_if_queue_tx() + * via this interface are not subjected to the bridge. + * + * @param br A pointer to an initialized bridge object + * @param iface Interface to add + * + * @return 0 if OK, negative error code otherwise. + */ +int eth_bridge_iface_add(struct eth_bridge *br, struct net_if *iface); + +/** + * @brief Remove an Ethernet network interface from a bridge + * + * @param br A pointer to an initialized bridge object + * @param iface Interface to remove + * + * @return 0 if OK, negative error code otherwise. + */ +int eth_bridge_iface_remove(struct eth_bridge *br, struct net_if *iface); + +/** + * @brief Enable/disable transmission mode for a bridged interface + * + * When TX mode is off, the interface may receive packets and send them to + * the bridge but no packets coming from the bridge will be sent through this + * interface. When TX mode is on, both incoming and outgoing packets are + * allowed. + * + * @param iface Interface to configure + * @param allow true to activate TX mode, false otherwise + * + * @return 0 if OK, negative error code otherwise. + */ +int eth_bridge_iface_allow_tx(struct net_if *iface, bool allow); + +/** + * @brief Add (register) a listener to the bridge + * + * This lets a software listener register a pointer to a provided FIFO for + * receiving packets sent to the bridge. The listener is responsible for + * emptying the FIFO with k_fifo_get() which will return a struct net_pkt + * pointer, and releasing the packet with net_pkt_unref() when done with it. + * + * The listener wishing not to receive any more packets should simply + * unregister itself with eth_bridge_listener_remove(). + * + * @param br A pointer to an initialized bridge object + * @param l A pointer to an initialized listener instance. + * + * @return 0 if OK, negative error code otherwise. + */ +int eth_bridge_listener_add(struct eth_bridge *br, struct eth_bridge_listener *l); + +/** + * @brief Remove (unregister) a listener from the bridge + * + * @param br A pointer to an initialized bridge object + * @param l A pointer to the listener instance to be removed. + * + * @return 0 if OK, negative error code otherwise. + */ +int eth_bridge_listener_remove(struct eth_bridge *br, struct eth_bridge_listener *l); + +/** + * @brief Get bridge index according to pointer + * + * @param br Pointer to bridge instance + * + * @return Bridge index + */ +int eth_bridge_get_index(struct eth_bridge *br); + +/** + * @brief Get bridge instance according to index + * + * @param index Bridge instance index + * + * @return Pointer to bridge instance or NULL if not found. + */ +struct eth_bridge *eth_bridge_get_by_index(int index); + +/** + * @typedef eth_bridge_cb_t + * @brief Callback used while iterating over bridge instances + * + * @param br Pointer to bridge instance + * @param user_data User supplied data + */ +typedef void (*eth_bridge_cb_t)(struct eth_bridge *br, void *user_data); + +/** + * @brief Go through all the bridge instances in order to get + * information about them. This is mainly useful in + * net-shell to print data about currently active bridges. + * + * @param cb Callback to call for each bridge instance + * @param user_data User supplied data + */ +void net_eth_bridge_foreach(eth_bridge_cb_t cb, void *user_data); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_ */ diff --git a/include/net/net_pkt.h b/include/net/net_pkt.h index d29ca2182569f..1c2ef1dd0a78e 100644 --- a/include/net/net_pkt.h +++ b/include/net/net_pkt.h @@ -181,10 +181,17 @@ struct net_pkt { * segment. */ #endif + uint8_t captured : 1; /* Set to 1 if this packet is already being * captured */ + uint8_t l2_bridged : 1; /* set to 1 if this packet comes from a bridge + * and already contains its L2 header to be + * preserved. Useful only if + * defined(CONFIG_NET_ETHERNET_BRIDGE). + */ + union { /* IPv6 hop limit or IPv4 ttl for this network packet. * The value is shared between IPv6 and IPv4. @@ -349,6 +356,18 @@ static inline void net_pkt_set_captured(struct net_pkt *pkt, bool is_captured) pkt->captured = is_captured; } +static inline bool net_pkt_is_l2_bridged(struct net_pkt *pkt) +{ + return IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) ? !!(pkt->l2_bridged) : 0; +} + +static inline void net_pkt_set_l2_bridged(struct net_pkt *pkt, bool is_l2_bridged) +{ + if (IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE)) { + pkt->l2_bridged = is_l2_bridged; + } +} + static inline uint8_t net_pkt_ip_hdr_len(struct net_pkt *pkt) { return pkt->ip_hdr_len; diff --git a/subsys/net/ip/net_pkt.c b/subsys/net/ip/net_pkt.c index e295201b8d37b..cd17fd1ce67e4 100644 --- a/subsys/net/ip/net_pkt.c +++ b/subsys/net/ip/net_pkt.c @@ -55,7 +55,11 @@ LOG_MODULE_REGISTER(net_pkt, CONFIG_NET_PKT_LOG_LEVEL); */ #define MAX_IP_PROTO_LEN 8 #else +#if defined(CONFIG_NET_ETHERNET_BRIDGE) +#define MAX_IP_PROTO_LEN 0 +#else #error "Either IPv6 or IPv4 needs to be selected." +#endif /* ETHERNET_BRIDGE */ #endif /* SOCKETS_CAN */ #endif /* IPv4 */ #endif /* IPv6 */ @@ -1769,6 +1773,7 @@ static void clone_pkt_attributes(struct net_pkt *pkt, struct net_pkt *clone_pkt) net_pkt_set_priority(clone_pkt, net_pkt_priority(pkt)); net_pkt_set_orig_iface(clone_pkt, net_pkt_orig_iface(pkt)); net_pkt_set_captured(clone_pkt, net_pkt_is_captured(pkt)); + net_pkt_set_l2_bridged(clone_pkt, net_pkt_is_l2_bridged(pkt)); if (IS_ENABLED(CONFIG_NET_IPV4) && net_pkt_family(pkt) == AF_INET) { net_pkt_set_ipv4_ttl(clone_pkt, net_pkt_ipv4_ttl(pkt)); diff --git a/subsys/net/l2/ethernet/CMakeLists.txt b/subsys/net/l2/ethernet/CMakeLists.txt index 7d8c4eb89abbf..4d76f4c16d7be 100644 --- a/subsys/net/l2/ethernet/CMakeLists.txt +++ b/subsys/net/l2/ethernet/CMakeLists.txt @@ -12,6 +12,7 @@ zephyr_library_sources_ifdef(CONFIG_NET_L2_ETHERNET_MGMT ethernet_mgmt.c) if(CONFIG_NET_NATIVE) zephyr_library_sources_ifdef(CONFIG_NET_ARP arp.c) zephyr_library_sources_ifdef(CONFIG_NET_STATISTICS_ETHERNET ethernet_stats.c) +zephyr_library_sources_ifdef(CONFIG_NET_ETHERNET_BRIDGE bridge.c) if(CONFIG_NET_GPTP) add_subdirectory(gptp) diff --git a/subsys/net/l2/ethernet/Kconfig b/subsys/net/l2/ethernet/Kconfig index 9fd0049de7aaa..fba8ab0e4c961 100644 --- a/subsys/net/l2/ethernet/Kconfig +++ b/subsys/net/l2/ethernet/Kconfig @@ -76,4 +76,19 @@ endif # NET_ARP source "subsys/net/l2/ethernet/gptp/Kconfig" source "subsys/net/l2/ethernet/lldp/Kconfig" +config NET_ETHERNET_BRIDGE + bool "Ethernet Bridging support" + select NET_PROMISCUOUS_MODE + help + Enables Ethernet bridging where packets can be transparently + forwarded across interfaces registered to a bridge. + +if NET_ETHERNET_BRIDGE +module = NET_ETHERNET_BRIDGE +module-dep = NET_LOG +module-str = Log level for Ethernet Bridging +module-help = Enables Ethernet Bridge code to output debug messages. +source "subsys/net/Kconfig.template.log_config.net" +endif # NET_ETHERNET_BRIDGE + endif # NET_L2_ETHERNET diff --git a/subsys/net/l2/ethernet/bridge.c b/subsys/net/l2/ethernet/bridge.c new file mode 100644 index 0000000000000..2df15dba44a64 --- /dev/null +++ b/subsys/net/l2/ethernet/bridge.c @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2021 BayLibre SAS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +LOG_MODULE_REGISTER(net_eth_bridge, CONFIG_NET_ETHERNET_BRIDGE_LOG_LEVEL); + +#include +#include +#include +#include +#include + +#include + +#include "bridge.h" + +extern struct eth_bridge _eth_bridge_list_start[]; +extern struct eth_bridge _eth_bridge_list_end[]; + +void net_eth_bridge_foreach(eth_bridge_cb_t cb, void *user_data) +{ + Z_STRUCT_SECTION_FOREACH(eth_bridge, br) { + cb(br, user_data); + } +} + +int eth_bridge_get_index(struct eth_bridge *br) +{ + if (!(br >= _eth_bridge_list_start && br < _eth_bridge_list_end)) { + return -1; + } + + return (br - _eth_bridge_list_start) + 1; +} + +struct eth_bridge *eth_bridge_get_by_index(int index) +{ + if (index <= 0) { + return NULL; + } + + if (&_eth_bridge_list_start[index - 1] >= _eth_bridge_list_end) { + NET_DBG("Index %d is too large", index); + return NULL; + } + + return &_eth_bridge_list_start[index - 1]; +} + +int eth_bridge_iface_add(struct eth_bridge *br, struct net_if *iface) +{ + struct ethernet_context *ctx = net_if_l2_data(iface); + + if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET) || + !(net_eth_get_hw_capabilities(iface) & ETHERNET_PROMISC_MODE)) { + return -EINVAL; + } + + k_mutex_lock(&br->lock, K_FOREVER); + + if (ctx->bridge.instance != NULL) { + k_mutex_unlock(&br->lock); + return -EBUSY; + } + + ctx->bridge.instance = br; + ctx->bridge.allow_tx = false; + sys_slist_append(&br->interfaces, &ctx->bridge.node); + + k_mutex_unlock(&br->lock); + + int ret = net_eth_promisc_mode(iface, true); + + if (ret != 0) { + NET_DBG("iface %p promiscuous mode failed: %d", iface, ret); + eth_bridge_iface_remove(br, iface); + return ret; + } + + NET_DBG("iface %p added to bridge %p", iface, br); + return 0; +} + +int eth_bridge_iface_remove(struct eth_bridge *br, struct net_if *iface) +{ + struct ethernet_context *ctx = net_if_l2_data(iface); + + if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET)) { + return -EINVAL; + } + + k_mutex_lock(&br->lock, K_FOREVER); + + if (ctx->bridge.instance != br) { + k_mutex_unlock(&br->lock); + return -EINVAL; + } + + sys_slist_find_and_remove(&br->interfaces, &ctx->bridge.node); + ctx->bridge.instance = NULL; + + k_mutex_unlock(&br->lock); + + NET_DBG("iface %p removed from bridge %p", iface, br); + return 0; +} + +int eth_bridge_iface_allow_tx(struct net_if *iface, bool allow) +{ + struct ethernet_context *ctx = net_if_l2_data(iface); + + if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET) || + ctx->bridge.instance == NULL) { + return -EINVAL; + } + + ctx->bridge.allow_tx = allow; + return 0; +} + +int eth_bridge_listener_add(struct eth_bridge *br, struct eth_bridge_listener *l) +{ + k_mutex_lock(&br->lock, K_FOREVER); + sys_slist_append(&br->listeners, &l->node); + k_mutex_unlock(&br->lock); + return 0; +} + +int eth_bridge_listener_remove(struct eth_bridge *br, struct eth_bridge_listener *l) +{ + k_mutex_lock(&br->lock, K_FOREVER); + sys_slist_find_and_remove(&br->listeners, &l->node); + k_mutex_unlock(&br->lock); + return 0; +} + +static inline bool is_link_local_addr(struct net_eth_addr *addr) +{ + if (addr->addr[0] == 0x01 && + addr->addr[1] == 0x80 && + addr->addr[2] == 0xc2 && + addr->addr[3] == 0x00 && + addr->addr[4] == 0x00 && + (addr->addr[5] & 0x0f) == 0x00) { + return true; + } + + return false; +} + +enum net_verdict net_eth_bridge_input(struct ethernet_context *ctx, + struct net_pkt *pkt) +{ + struct eth_bridge *br = ctx->bridge.instance; + sys_snode_t *node; + + NET_DBG("new pkt %p", pkt); + + /* Drop all link-local packets for now. */ + if (is_link_local_addr((struct net_eth_addr *)net_pkt_lladdr_dst(pkt))) { + return NET_DROP; + } + + k_mutex_lock(&br->lock, K_FOREVER); + + /* + * Send packet to all registered interfaces for now. + * Eventually we could get smarter with a MAC address cache. + */ + SYS_SLIST_FOR_EACH_NODE(&br->interfaces, node) { + struct ethernet_context *out_ctx; + struct net_pkt *out_pkt; + + out_ctx = CONTAINER_OF(node, struct ethernet_context, bridge.node); + + /* Don't xmit on the same interface as the incoming packet's */ + if (ctx == out_ctx) { + continue; + } + + /* Skip it if not allowed to transmit */ + if (!out_ctx->bridge.allow_tx) { + continue; + } + + /* Skip it if not up */ + if (!net_if_flag_is_set(out_ctx->iface, NET_IF_UP)) { + continue; + } + + out_pkt = net_pkt_shallow_clone(pkt, K_NO_WAIT); + if (out_pkt == NULL) { + continue; + } + + NET_DBG("sending pkt %p as %p on iface %p", pkt, out_pkt, out_ctx->iface); + + /* + * Use AF_UNSPEC to avoid interference, set the output + * interface and send the packet. + */ + net_pkt_set_family(out_pkt, AF_UNSPEC); + net_pkt_set_orig_iface(out_pkt, net_pkt_iface(pkt)); + net_pkt_set_iface(out_pkt, out_ctx->iface); + net_if_queue_tx(out_ctx->iface, out_pkt); + } + + SYS_SLIST_FOR_EACH_NODE(&br->listeners, node) { + struct eth_bridge_listener *l; + struct net_pkt *out_pkt; + + l = CONTAINER_OF(node, struct eth_bridge_listener, node); + + out_pkt = net_pkt_shallow_clone(pkt, K_NO_WAIT); + if (out_pkt == NULL) { + continue; + } + + k_fifo_put(&l->pkt_queue, out_pkt); + } + + k_mutex_unlock(&br->lock); + + net_pkt_unref(pkt); + return NET_OK; +} diff --git a/subsys/net/l2/ethernet/bridge.h b/subsys/net/l2/ethernet/bridge.h new file mode 100644 index 0000000000000..a4836fdc9d1bc --- /dev/null +++ b/subsys/net/l2/ethernet/bridge.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 BayLibre SAS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __BRIDGE_H +#define __BRIDGE_H + +enum net_verdict net_eth_bridge_input(struct ethernet_context *ctx, + struct net_pkt *pkt); + +static inline bool net_eth_iface_is_bridged(struct ethernet_context *ctx) +{ +#if defined(CONFIG_NET_ETHERNET_BRIDGE) + return ctx->bridge.instance != NULL; +#else + return false; +#endif +} + +#endif /* __BRIDGE_H */ diff --git a/subsys/net/l2/ethernet/ethernet.c b/subsys/net/l2/ethernet/ethernet.c index 7089d406c9b50..f656d066e73a0 100644 --- a/subsys/net/l2/ethernet/ethernet.c +++ b/subsys/net/l2/ethernet/ethernet.c @@ -30,6 +30,7 @@ LOG_MODULE_REGISTER(net_ethernet, CONFIG_NET_L2_ETHERNET_LOG_LEVEL); #include "net_private.h" #include "ipv6.h" #include "ipv4_autoconf_internal.h" +#include "bridge.h" #define NET_BUF_TIMEOUT K_MSEC(100) @@ -187,6 +188,19 @@ static enum net_verdict ethernet_recv(struct net_if *iface, goto drop; } + if (IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) && + net_eth_iface_is_bridged(ctx)) { + net_pkt_set_l2_bridged(pkt, true); + net_pkt_lladdr_src(pkt)->addr = hdr->src.addr; + net_pkt_lladdr_src(pkt)->len = sizeof(struct net_eth_addr); + net_pkt_lladdr_src(pkt)->type = NET_LINK_ETHERNET; + net_pkt_lladdr_dst(pkt)->addr = hdr->dst.addr; + net_pkt_lladdr_dst(pkt)->len = sizeof(struct net_eth_addr); + net_pkt_lladdr_dst(pkt)->type = NET_LINK_ETHERNET; + ethernet_update_rx_stats(iface, pkt, net_pkt_get_len(pkt)); + return net_eth_bridge_input(ctx, pkt); + } + type = ntohs(hdr->type); if (net_eth_is_vlan_enabled(ctx, iface) && @@ -578,7 +592,19 @@ static int ethernet_send(struct net_if *iface, struct net_pkt *pkt) goto error; } - if (IS_ENABLED(CONFIG_NET_IPV4) && + if (IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) && + net_pkt_is_l2_bridged(pkt)) { + net_pkt_cursor_init(pkt); + ret = net_l2_send(api->send, net_if_get_device(iface), iface, pkt); + if (ret != 0) { + eth_stats_update_errors_tx(iface); + goto error; + } + ethernet_update_tx_stats(iface, pkt); + ret = net_pkt_get_len(pkt); + net_pkt_unref(pkt); + return ret; + } else if (IS_ENABLED(CONFIG_NET_IPV4) && net_pkt_family(pkt) == AF_INET) { struct net_pkt *tmp; From 697f3544a7f373573b61bccbbac4817af06b7be9 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Fri, 2 Jul 2021 22:45:03 -0400 Subject: [PATCH 44/50] net: bridge: test to exercise the bridge facility This is accomplished with 3 fake ethernet interfaces hooked to a common bridge, simulating incoming packets and controlling each interface's transmission product. Signed-off-by: Nicolas Pitre --- tests/net/bridge/CMakeLists.txt | 9 + tests/net/bridge/prj.conf | 12 + tests/net/bridge/src/main.c | 381 ++++++++++++++++++++++++++++++++ tests/net/bridge/testcase.yaml | 13 ++ 4 files changed, 415 insertions(+) create mode 100644 tests/net/bridge/CMakeLists.txt create mode 100644 tests/net/bridge/prj.conf create mode 100644 tests/net/bridge/src/main.c create mode 100644 tests/net/bridge/testcase.yaml diff --git a/tests/net/bridge/CMakeLists.txt b/tests/net/bridge/CMakeLists.txt new file mode 100644 index 0000000000000..07f1c56f52516 --- /dev/null +++ b/tests/net/bridge/CMakeLists.txt @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.13.1) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(bridge) + +target_include_directories(app PRIVATE ${ZEPHYR_BASE}/subsys/net/ip) +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) diff --git a/tests/net/bridge/prj.conf b/tests/net/bridge/prj.conf new file mode 100644 index 0000000000000..8a568ddd56de8 --- /dev/null +++ b/tests/net/bridge/prj.conf @@ -0,0 +1,12 @@ +CONFIG_NETWORKING=y +CONFIG_NET_TEST=y +CONFIG_NET_L2_ETHERNET=y +CONFIG_NET_ETHERNET_BRIDGE=y +CONFIG_NET_LOG=y +CONFIG_ENTROPY_GENERATOR=y +CONFIG_TEST_RANDOM_GENERATOR=y +CONFIG_NET_PKT_TX_COUNT=10 +CONFIG_NET_PKT_RX_COUNT=10 +CONFIG_NET_BUF_RX_COUNT=10 +CONFIG_NET_BUF_TX_COUNT=10 +CONFIG_ZTEST=y diff --git a/tests/net/bridge/src/main.c b/tests/net/bridge/src/main.c new file mode 100644 index 0000000000000..11aec9d546d6d --- /dev/null +++ b/tests/net/bridge/src/main.c @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2021 BayLibre SAS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define NET_LOG_LEVEL CONFIG_NET_ETHERNET_BRIDGE_LOG_LEVEL + +#include +LOG_MODULE_REGISTER(net_test, NET_LOG_LEVEL); + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#if NET_LOG_LEVEL >= LOG_LEVEL_DBG +#define DBG(fmt, ...) printk(fmt, ##__VA_ARGS__) +#else +#define DBG(fmt, ...) +#endif + +struct eth_fake_context { + struct net_if *iface; + struct net_pkt *sent_pkt; + uint8_t mac_address[6]; + bool promisc_mode; +}; + +static void eth_fake_iface_init(struct net_if *iface) +{ + const struct device *dev = net_if_get_device(iface); + struct eth_fake_context *ctx = dev->data; + + ctx->iface = iface; + + ctx->mac_address[0] = 0xc2; + ctx->mac_address[1] = 0xaa; + ctx->mac_address[2] = 0xbb; + ctx->mac_address[3] = 0xcc; + ctx->mac_address[4] = 0xdd; + ctx->mac_address[5] = 0xee; + + net_if_set_link_addr(iface, ctx->mac_address, + sizeof(ctx->mac_address), + NET_LINK_ETHERNET); + + ethernet_init(iface); +} + +static int eth_fake_send(const struct device *dev, + struct net_pkt *pkt) +{ + struct eth_fake_context *ctx = dev->data; + struct net_eth_hdr *eth_hdr = NET_ETH_HDR(pkt); + + /* + * Ignore packets we don't care about for this test, like + * the IP autoconfig related ones, etc. + */ + if (eth_hdr->type != htons(NET_ETH_PTYPE_ALL)) { + DBG("Fake send ignoring pkt %p\n", pkt); + return 0; + } + + if (ctx->sent_pkt != NULL) { + DBG("Fake send found pkt %p while sending %p\n", + ctx->sent_pkt, pkt); + return -EBUSY; + } + ctx->sent_pkt = net_pkt_shallow_clone(pkt, K_NO_WAIT); + if (ctx->sent_pkt == NULL) { + DBG("Fake send out of mem while sending pkt %p\n", pkt); + return -ENOMEM; + } + + DBG("Fake send pkt %p kept locally as %p\n", pkt, ctx->sent_pkt); + return 0; +} + +static enum ethernet_hw_caps eth_fake_get_capabilities(const struct device *dev) +{ + return ETHERNET_PROMISC_MODE; +} + +static int eth_fake_set_config(const struct device *dev, + enum ethernet_config_type type, + const struct ethernet_config *config) +{ + struct eth_fake_context *ctx = dev->data; + + switch (type) { + case ETHERNET_CONFIG_TYPE_PROMISC_MODE: + if (config->promisc_mode == ctx->promisc_mode) { + return -EALREADY; + } + + ctx->promisc_mode = config->promisc_mode; + + break; + + default: + return -EINVAL; + } + + return 0; +} + +static const struct ethernet_api eth_fake_api_funcs = { + .iface_api.init = eth_fake_iface_init, + .get_capabilities = eth_fake_get_capabilities, + .set_config = eth_fake_set_config, + .send = eth_fake_send, +}; + +static int eth_fake_init(const struct device *dev) +{ + struct eth_fake_context *ctx = dev->data; + + ctx->promisc_mode = false; + + return 0; +} + +static struct eth_fake_context eth_fake_data[3]; + +ETH_NET_DEVICE_INIT(eth_fake0, "eth_fake0", + eth_fake_init, NULL, + ð_fake_data[0], NULL, CONFIG_ETH_INIT_PRIORITY, + ð_fake_api_funcs, NET_ETH_MTU); + +ETH_NET_DEVICE_INIT(eth_fake1, "eth_fake1", + eth_fake_init, NULL, + ð_fake_data[1], NULL, CONFIG_ETH_INIT_PRIORITY, + ð_fake_api_funcs, NET_ETH_MTU); + +ETH_NET_DEVICE_INIT(eth_fake2, "eth_fake2", + eth_fake_init, NULL, + ð_fake_data[2], NULL, CONFIG_ETH_INIT_PRIORITY, + ð_fake_api_funcs, NET_ETH_MTU); + +static struct net_if *fake_iface[3]; + +static void iface_cb(struct net_if *iface, void *user_data) +{ + static int if_count; + + if (if_count >= ARRAY_SIZE(fake_iface)) { + return; + } + + DBG("Interface %p [%d]\n", iface, net_if_get_by_iface(iface)); + + if (net_if_l2(iface) == &NET_L2_GET_NAME(ETHERNET)) { + const struct ethernet_api *api = + net_if_get_device(iface)->api; + + /* + * We want to only use struct net_if devices defined in + * this test as board on which it is run can have its + * own set of interfaces. + */ + if (api->get_capabilities == + eth_fake_api_funcs.get_capabilities) { + fake_iface[if_count++] = iface; + } + } +} + +static int orig_rx_num_blocks; +static int orig_tx_num_blocks; + +static void get_free_packet_count(void) +{ + struct k_mem_slab *rx, *tx; + + net_pkt_get_info(&rx, &tx, NULL, NULL); + orig_rx_num_blocks = rx->num_blocks; + orig_tx_num_blocks = tx->num_blocks; +} + +static void check_free_packet_count(void) +{ + struct k_mem_slab *rx, *tx; + + net_pkt_get_info(&rx, &tx, NULL, NULL); + zassert_equal(rx->num_blocks, orig_rx_num_blocks, ""); + zassert_equal(tx->num_blocks, orig_tx_num_blocks, ""); +} + +static void test_iface_setup(void) +{ + net_if_foreach(iface_cb, NULL); + + zassert_not_null(fake_iface[0], ""); + zassert_not_null(fake_iface[1], ""); + zassert_not_null(fake_iface[2], ""); + + DBG("Interfaces: [%d] iface0 %p, [%d] iface1 %p, [%d] iface2 %p\n", + net_if_get_by_iface(fake_iface[0]), fake_iface[0], + net_if_get_by_iface(fake_iface[1]), fake_iface[1], + net_if_get_by_iface(fake_iface[2]), fake_iface[2]); + + net_if_up(fake_iface[0]); + net_if_up(fake_iface[1]); + net_if_up(fake_iface[2]); + + /* Remember the initial number of free packets in the pool. */ + get_free_packet_count(); +} + +/* + * Simulate a packet reception from the outside world + */ +static void _recv_data(struct net_if *iface) +{ + struct net_pkt *pkt; + struct net_eth_hdr eth_hdr; + static uint8_t data[] = { 't', 'e', 's', 't', '\0' }; + int ret; + + pkt = net_pkt_rx_alloc_with_buffer(iface, sizeof(eth_hdr) + sizeof(data), + AF_UNSPEC, 0, K_FOREVER); + zassert_not_null(pkt, ""); + + /* + * The source and destination MAC addresses are completely arbitrary + * except for the U/L and I/G bits. However, the index of the faked + * incoming interface is mixed in as well to create some variation, + * and to help with validation on the transmit side. + */ + + eth_hdr.dst.addr[0] = 0xb2; + eth_hdr.dst.addr[1] = 0x11; + eth_hdr.dst.addr[2] = 0x22; + eth_hdr.dst.addr[3] = 0x33; + eth_hdr.dst.addr[4] = net_if_get_by_iface(iface); + eth_hdr.dst.addr[5] = 0x55; + + eth_hdr.src.addr[0] = 0xa2; + eth_hdr.src.addr[1] = 0x11; + eth_hdr.src.addr[2] = 0x22; + eth_hdr.src.addr[3] = net_if_get_by_iface(iface); + eth_hdr.src.addr[4] = 0x77; + eth_hdr.src.addr[5] = 0x88; + + eth_hdr.type = htons(NET_ETH_PTYPE_ALL); + + ret = net_pkt_write(pkt, ð_hdr, sizeof(eth_hdr)); + zassert_equal(ret, 0, ""); + + ret = net_pkt_write(pkt, data, sizeof(data)); + zassert_equal(ret, 0, ""); + + DBG("Fake recv pkt %p\n", pkt); + ret = net_recv_data(iface, pkt); + zassert_equal(ret, 0, ""); +} + +static void test_recv_before_bridging(void) +{ + /* fake some packet reception */ + _recv_data(fake_iface[0]); + _recv_data(fake_iface[1]); + _recv_data(fake_iface[2]); + + /* give time to the processing threads to run */ + k_sleep(K_MSEC(100)); + + /* nothing should have been transmitted at this point */ + zassert_is_null(eth_fake_data[0].sent_pkt, ""); + zassert_is_null(eth_fake_data[1].sent_pkt, ""); + zassert_is_null(eth_fake_data[2].sent_pkt, ""); + + /* and everything already dropped. */ + check_free_packet_count(); +} + +static ETH_BRIDGE_INIT(test_bridge); + +static void test_setup_bridge(void) +{ + int ret; + + /* add our interfaces to the bridge */ + ret = eth_bridge_iface_add(&test_bridge, fake_iface[0]); + zassert_equal(ret, 0, ""); + ret = eth_bridge_iface_add(&test_bridge, fake_iface[1]); + zassert_equal(ret, 0, ""); + ret = eth_bridge_iface_add(&test_bridge, fake_iface[2]); + zassert_equal(ret, 0, ""); + + /* enable tx for them except fake_iface[1] */ + ret = eth_bridge_iface_allow_tx(fake_iface[0], true); + zassert_equal(ret, 0, ""); + ret = eth_bridge_iface_allow_tx(fake_iface[2], true); + zassert_equal(ret, 0, ""); +} + +static void test_recv_with_bridge(void) +{ + int i, j; + + for (i = 0; i < 3; i++) { + int src_if_idx = net_if_get_by_iface(fake_iface[i]); + + /* fake reception of packets */ + _recv_data(fake_iface[i]); + + /* give time to the processing threads to run */ + k_sleep(K_MSEC(100)); + + /* nothing should have been transmitted on fake_iface[1] */ + zassert_is_null(eth_fake_data[1].sent_pkt, ""); + + /* + * fake_iface[0] and fake_iface[2] should have sent the packet + * but only if it didn't come from them. + * We skip fake_iface[1] handled above. + */ + for (j = 0; j < 3; j += 2) { + struct net_pkt *pkt = eth_fake_data[j].sent_pkt; + + if (eth_fake_data[j].iface == fake_iface[i]) { + zassert_is_null(pkt, ""); + continue; + } + + eth_fake_data[j].sent_pkt = NULL; + zassert_not_null(pkt, ""); + + /* make sure nothing messed up our ethernet header */ + struct net_eth_hdr *hdr = NET_ETH_HDR(pkt); + + zassert_equal(hdr->dst.addr[0], 0xb2, ""); + zassert_equal(hdr->src.addr[0], 0xa2, ""); + zassert_equal(hdr->dst.addr[4], src_if_idx, ""); + zassert_equal(hdr->src.addr[3], src_if_idx, ""); + + net_pkt_unref(pkt); + } + } + + check_free_packet_count(); +} + +static void test_recv_after_bridging(void) +{ + int ret; + + /* remove our interfaces from the bridge */ + ret = eth_bridge_iface_remove(&test_bridge, fake_iface[0]); + zassert_equal(ret, 0, ""); + ret = eth_bridge_iface_remove(&test_bridge, fake_iface[1]); + zassert_equal(ret, 0, ""); + ret = eth_bridge_iface_remove(&test_bridge, fake_iface[2]); + zassert_equal(ret, 0, ""); + + /* things should have returned to the pre-bridging state */ + test_recv_before_bridging(); +} + +void test_main(void) +{ + ztest_test_suite(net_eth_bridge_test, + ztest_unit_test(test_iface_setup), + ztest_unit_test(test_recv_before_bridging), + ztest_unit_test(test_setup_bridge), + ztest_unit_test(test_recv_with_bridge), + ztest_unit_test(test_recv_after_bridging)); + + ztest_run_test_suite(net_eth_bridge_test); +} diff --git a/tests/net/bridge/testcase.yaml b/tests/net/bridge/testcase.yaml new file mode 100644 index 0000000000000..178e5020d09c1 --- /dev/null +++ b/tests/net/bridge/testcase.yaml @@ -0,0 +1,13 @@ +common: + min_ram: 16 + tags: net bridge + depends_on: netif +tests: + net.eth_bridge: + extra_configs: + - CONFIG_NET_IPV4=n + - CONFIG_NET_IPV6=n + net.eth_bridge.ip: + extra_configs: + - CONFIG_NET_IPV4=y + - CONFIG_NET_IPV6=y From b6855b23b9659a2fd911d06308927da8210b0d41 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Mon, 28 Jun 2021 17:18:22 -0400 Subject: [PATCH 45/50] net: bridge: Ethernet bridge shell utility This provides a command line interface to query and modify bridge instances, similar to Linux's brctl utility. It can be used to inspect an application's bridge usage, or manage a bridge of its own in a generic way. Signed-off-by: Nicolas Pitre --- subsys/net/l2/ethernet/CMakeLists.txt | 1 + subsys/net/l2/ethernet/Kconfig | 17 ++ subsys/net/l2/ethernet/bridge_shell.c | 228 ++++++++++++++++++++++++++ 3 files changed, 246 insertions(+) create mode 100644 subsys/net/l2/ethernet/bridge_shell.c diff --git a/subsys/net/l2/ethernet/CMakeLists.txt b/subsys/net/l2/ethernet/CMakeLists.txt index 4d76f4c16d7be..9b13d0b2a48a8 100644 --- a/subsys/net/l2/ethernet/CMakeLists.txt +++ b/subsys/net/l2/ethernet/CMakeLists.txt @@ -13,6 +13,7 @@ if(CONFIG_NET_NATIVE) zephyr_library_sources_ifdef(CONFIG_NET_ARP arp.c) zephyr_library_sources_ifdef(CONFIG_NET_STATISTICS_ETHERNET ethernet_stats.c) zephyr_library_sources_ifdef(CONFIG_NET_ETHERNET_BRIDGE bridge.c) +zephyr_library_sources_ifdef(CONFIG_NET_ETHERNET_BRIDGE_SHELL bridge_shell.c) if(CONFIG_NET_GPTP) add_subdirectory(gptp) diff --git a/subsys/net/l2/ethernet/Kconfig b/subsys/net/l2/ethernet/Kconfig index fba8ab0e4c961..ba930c631ff05 100644 --- a/subsys/net/l2/ethernet/Kconfig +++ b/subsys/net/l2/ethernet/Kconfig @@ -91,4 +91,21 @@ module-help = Enables Ethernet Bridge code to output debug messages. source "subsys/net/Kconfig.template.log_config.net" endif # NET_ETHERNET_BRIDGE +config NET_ETHERNET_BRIDGE_SHELL + bool "Ethernet Bridging management shell" + depends on NET_ETHERNET_BRIDGE + select SHELL + help + Enables shell utility to manage bridge configuration interactively. + +config NET_ETHERNET_BRIDGE_DEFAULT + bool "Declare one bridge instance for shell usage" + depends on NET_ETHERNET_BRIDGE_SHELL + default y + help + If the bridge shell is the sole user of the bridge code then + it needs at least one bridge instance to be useful. + Say y if this is the case. If you only want to inspect + existing bridge instances then say n. + endif # NET_L2_ETHERNET diff --git a/subsys/net/l2/ethernet/bridge_shell.c b/subsys/net/l2/ethernet/bridge_shell.c new file mode 100644 index 0000000000000..7724973cff9a4 --- /dev/null +++ b/subsys/net/l2/ethernet/bridge_shell.c @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2021 BayLibre SAS + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include + +static int get_idx(const struct shell *sh, char *index_str) +{ + char *endptr; + int idx; + + idx = strtol(index_str, &endptr, 10); + if (*endptr != '\0') { + shell_warn(sh, "Invalid index %s\n", index_str); + return -ENOENT; + } + return idx; +} + +static int cmd_bridge_addif(const struct shell *sh, size_t argc, char *argv[]) +{ + int br_idx, if_idx; + struct eth_bridge *br; + struct net_if *iface; + + br_idx = get_idx(sh, argv[1]); + if (br_idx < 0) { + return br_idx; + } + if_idx = get_idx(sh, argv[2]); + if (if_idx < 0) { + return if_idx; + } + br = eth_bridge_get_by_index(br_idx); + if (br == NULL) { + shell_warn(sh, "Bridge %d not found\n", br_idx); + return -ENOENT; + } + iface = net_if_get_by_index(if_idx); + if (iface == NULL) { + shell_warn(sh, "Interface %d not found\n", if_idx); + return -ENOENT; + } + if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET)) { + shell_warn(sh, "Interface %d is not Ethernet\n", if_idx); + return -EINVAL; + } + if (!(net_eth_get_hw_capabilities(iface) & ETHERNET_PROMISC_MODE)) { + shell_warn(sh, "Interface %d cannot do promiscuous mode\n", if_idx); + return -EINVAL; + } + + int ret = eth_bridge_iface_add(br, iface); + + if (ret < 0) { + shell_error(sh, "error: eth_bridge_iface_add() returned %d\n", ret); + } + return ret; +} + +static int cmd_bridge_delif(const struct shell *sh, size_t argc, char *argv[]) +{ + int br_idx, if_idx; + struct eth_bridge *br; + struct net_if *iface; + + br_idx = get_idx(sh, argv[1]); + if (br_idx < 0) { + return br_idx; + } + if_idx = get_idx(sh, argv[2]); + if (if_idx < 0) { + return if_idx; + } + br = eth_bridge_get_by_index(br_idx); + if (br == NULL) { + shell_warn(sh, "Bridge %d not found\n", br_idx); + return -ENOENT; + } + iface = net_if_get_by_index(if_idx); + if (iface == NULL) { + shell_warn(sh, "Interface %d not found\n", if_idx); + return -ENOENT; + } + + int ret = eth_bridge_iface_remove(br, iface); + + if (ret < 0) { + shell_error(sh, "error: eth_bridge_iface_remove() returned %d\n", ret); + } + return ret; +} + +static int cmd_bridge_allow_tx(const struct shell *sh, size_t argc, char *argv[]) +{ + int br_idx, if_idx; + struct eth_bridge *br; + struct net_if *iface; + struct ethernet_context *ctx; + + br_idx = get_idx(sh, argv[1]); + if (br_idx < 0) { + return br_idx; + } + if_idx = get_idx(sh, argv[2]); + if (if_idx < 0) { + return if_idx; + } + br = eth_bridge_get_by_index(br_idx); + if (br == NULL) { + shell_error(sh, "Bridge %d not found\n", br_idx); + return -ENOENT; + } + iface = net_if_get_by_index(if_idx); + if (iface == NULL) { + shell_error(sh, "Interface %d not found", if_idx); + return -ENOENT; + } + ctx = net_if_l2_data(iface); + if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET) || + ctx->bridge.instance != br) { + shell_error(sh, "Interface %d is not tied to bridge %d", + if_idx, br_idx); + return -ENOENT; + } + + if (!strcmp(argv[2], "1") || + !strcmp(argv[2], "yes") || + !strcmp(argv[2], "on") || + !strcmp(argv[2], "true")) { + eth_bridge_iface_allow_tx(iface, true); + } else { + eth_bridge_iface_allow_tx(iface, false); + } + return 0; +} + +static void bridge_show(struct eth_bridge *br, void *data) +{ + const struct shell *sh = data; + int br_idx = eth_bridge_get_index(br); + sys_snode_t *node; + bool pad; + + shell_fprintf(sh, SHELL_NORMAL, "%-10d", br_idx); + pad = false; + + k_mutex_lock(&br->lock, K_FOREVER); + + SYS_SLIST_FOR_EACH_NODE(&br->interfaces, node) { + struct ethernet_context *ctx; + int if_idx; + + ctx = CONTAINER_OF(node, struct ethernet_context, bridge.node); + if_idx = net_if_get_by_iface(ctx->iface); + + if (pad) { + shell_fprintf(sh, SHELL_NORMAL, "%-10s", ""); + } + shell_fprintf(sh, SHELL_NORMAL, "%-10d%s", if_idx, + ctx->bridge.allow_tx ? "*" : ""); + pad = true; + } + shell_fprintf(sh, SHELL_NORMAL, "\n"); + + k_mutex_unlock(&br->lock); +} + +static int cmd_bridge_show(const struct shell *sh, size_t argc, char *argv[]) +{ + int br_idx; + struct eth_bridge *br = NULL; + + if (argc == 2) { + br_idx = get_idx(sh, argv[1]); + if (br_idx < 0) { + return br_idx; + } + br = eth_bridge_get_by_index(br_idx); + if (br == NULL) { + shell_warn(sh, "Bridge %d not found\n", br_idx); + return -ENOENT; + } + } + + shell_fprintf(sh, SHELL_NORMAL, "bridge iface tx_enabled\n"); + + if (br != NULL) { + bridge_show(br, (void *)sh); + } else { + net_eth_bridge_foreach(bridge_show, (void *)sh); + } + + return 0; +} + +SHELL_STATIC_SUBCMD_SET_CREATE(bridge_commands, + SHELL_CMD_ARG(addif, NULL, + "Add a network interface to a bridge.\n" + "'bridge addif '", + cmd_bridge_addif, 3, 0), + SHELL_CMD_ARG(delif, NULL, + "Delete a network interface from a bridge.\n" + "'bridge delif '", + cmd_bridge_delif, 3, 0), + SHELL_CMD_ARG(tx, NULL, + "Enable/disable tx from given bridged interface.\n" + "'bridge tx {on|off}'", + cmd_bridge_allow_tx, 4, 0), + SHELL_CMD_ARG(show, NULL, + "Show bridge information.\n" + "'bridge show []'", + cmd_bridge_show, 1, 1), + SHELL_SUBCMD_SET_END +); + +SHELL_CMD_REGISTER(bridge, &bridge_commands, "Ethernet Bridge commands", NULL); + +#if defined(CONFIG_NET_ETHERNET_BRIDGE_DEFAULT) +static ETH_BRIDGE_INIT(shell_default_bridge); +#endif From 28e214b315ea64f8eda58ba47dc21b10d3cb2643 Mon Sep 17 00:00:00 2001 From: Jose Alberto Meza Date: Wed, 14 Jul 2021 12:20:28 -0700 Subject: [PATCH 46/50] doc: reference: peripherals: Add eSPI interface to peripherals list Add missing eSPI driver interface under peripheral list. Signed-off-by: Jose Alberto Meza Co-authored-by: Gerard Marull-Paretas --- doc/reference/peripherals/espi.rst | 27 +++++++++++++++++++++++++++ doc/reference/peripherals/index.rst | 1 + 2 files changed, 28 insertions(+) create mode 100644 doc/reference/peripherals/espi.rst diff --git a/doc/reference/peripherals/espi.rst b/doc/reference/peripherals/espi.rst new file mode 100644 index 0000000000000..5a9d0871e2e93 --- /dev/null +++ b/doc/reference/peripherals/espi.rst @@ -0,0 +1,27 @@ +.. _espi_api: + +eSPI +#### + +Overview +******** + +The eSPI (enhanced serial peripheral interface) is a serial bus that is +based on SPI. It also features a four-wire interface (receive, transmit, clock +and slave select) and three configurations: single IO, dual IO and quad IO. + +The technical advancements include lower voltage signal levels (1.8V vs. 3.3V), +lower pin count, and the frequency is twice as fast (66MHz vs. 33MHz) +Because of its enhancements, the eSPI is used to replace the LPC +(lower pin count) interface, SPI, SMBus and sideband signals. + +See `eSPI interface specification`_ for additional details. + + +API Reference +************* + +.. doxygengroup:: espi_interface + +.. _eSPI interface specification: + https://www.intel.com/content/dam/support/us/en/documents/software/chipset-software/327432-004_espi_base_specification_rev1.0_cb.pdf diff --git a/doc/reference/peripherals/index.rst b/doc/reference/peripherals/index.rst index 1c2b81e83b298..2e6ed3f46e22a 100644 --- a/doc/reference/peripherals/index.rst +++ b/doc/reference/peripherals/index.rst @@ -34,3 +34,4 @@ Peripherals uart.rst watchdog.rst video.rst + espi.rst From 713cc0b6c1ff67b1129b7092672c0c02bcb3e3db Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Thu, 28 Feb 2019 16:54:13 +0200 Subject: [PATCH 47/50] drivers: can: Add support for native_posix board This initial version supports SocketCAN. The driver passes CANBUS data between Linux vcan virtual CAN driver and Zephyr. You also need to use can-setup.sh script from the net-tools project in order to make communication work with Linux vcan driver. Signed-off-by: Jukka Rissanen --- drivers/can/CMakeLists.txt | 12 + drivers/can/Kconfig | 1 + drivers/can/Kconfig.native_posix | 28 +++ drivers/can/canbus_native_posix.c | 313 ++++++++++++++++++++++++ drivers/can/canbus_native_posix_adapt.c | 179 ++++++++++++++ drivers/can/canbus_native_posix_priv.h | 24 ++ 6 files changed, 557 insertions(+) create mode 100644 drivers/can/Kconfig.native_posix create mode 100644 drivers/can/canbus_native_posix.c create mode 100644 drivers/can/canbus_native_posix_adapt.c create mode 100644 drivers/can/canbus_native_posix_priv.h diff --git a/drivers/can/CMakeLists.txt b/drivers/can/CMakeLists.txt index 8276094bd737e..28e36c324e83d 100644 --- a/drivers/can/CMakeLists.txt +++ b/drivers/can/CMakeLists.txt @@ -12,3 +12,15 @@ zephyr_sources_ifdef(CONFIG_CAN_RCAR can_rcar.c) zephyr_sources_ifdef(CONFIG_USERSPACE can_handlers.c) zephyr_sources_ifdef(CONFIG_CAN_SHELL can_shell.c) zephyr_sources_ifdef(CONFIG_CAN_NET can_net.c) + +if(CONFIG_CAN_NATIVE_POSIX) + zephyr_library() + zephyr_library_include_directories(${ZEPHYR_BASE}/subsys/net/l2) + zephyr_library_compile_definitions(NO_POSIX_CHEATS) + zephyr_library_compile_definitions(_BSD_SOURCE) + zephyr_library_compile_definitions(_DEFAULT_SOURCE) + zephyr_library_sources( + canbus_native_posix.c + canbus_native_posix_adapt.c + ) +endif() \ No newline at end of file diff --git a/drivers/can/Kconfig b/drivers/can/Kconfig index ba975e9640bdf..219282694d314 100644 --- a/drivers/can/Kconfig +++ b/drivers/can/Kconfig @@ -94,5 +94,6 @@ source "drivers/can/Kconfig.mcan" source "drivers/can/Kconfig.rcar" source "drivers/can/Kconfig.loopback" source "drivers/can/Kconfig.net" +source "drivers/can/Kconfig.native_posix" endif # CAN diff --git a/drivers/can/Kconfig.native_posix b/drivers/can/Kconfig.native_posix new file mode 100644 index 0000000000000..1efede3a36a2c --- /dev/null +++ b/drivers/can/Kconfig.native_posix @@ -0,0 +1,28 @@ +# Kconfig.native_posix - native_posix CAN configuration options + +# +# Copyright (c) 2019 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +config CAN_NATIVE_POSIX + bool "native_posix CAN Driver" + depends on ARCH_POSIX + help + Enable native_posix CAN driver + +config CAN_MAX_FILTER + int "Maximum number of concurrent active filters" + depends on CAN_NATIVE_POSIX + default 32 + range 1 56 + help + Defines the array size of the callback/msgq pointers. + Must be at least the size of concurrent reads. + +config CAN_NATIVE_POSIX_INTERFACE_NAME + string "CANBUS interface name in Linux side" + default "zcan" + help + This option sets the CANBUS network interface name in host system. diff --git a/drivers/can/canbus_native_posix.c b/drivers/can/canbus_native_posix.c new file mode 100644 index 0000000000000..81bdaa9fc2658 --- /dev/null +++ b/drivers/can/canbus_native_posix.c @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2019 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * + * CANBUS driver for native_posix board. This is meant to test CANBUS + * connectivity between host and Zephyr. + */ + +#define LOG_MODULE_NAME canbus_posix +#define LOG_LEVEL CONFIG_CAN_LOG_LEVEL + +#include +LOG_MODULE_REGISTER(LOG_MODULE_NAME); + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "canbus_native_posix_priv.h" + +#define NET_BUF_TIMEOUT K_MSEC(100) +#define DT_CAN_1_NAME "CAN_1" + +struct canbus_np_context { + u8_t recv[CAN_MTU]; + + struct device *can_dev; + struct k_msgq *msgq; + struct net_if *iface; + const char *if_name; + int dev_fd; + bool init_done; +}; + +NET_STACK_DEFINE(RX_ZCAN, canbus_rx_stack, + CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE, + CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); +static struct k_thread rx_thread_data; + +/* TODO: support multiple interfaces */ +static struct canbus_np_context canbus_context_data; + +static int read_data(struct canbus_np_context *ctx, int fd) +{ + struct net_pkt *pkt; + int count; + + count = canbus_np_read_data(fd, ctx->recv, sizeof(ctx->recv)); + if (count <= 0) { + return 0; + } + + pkt = net_pkt_rx_alloc_with_buffer(ctx->iface, count, + AF_CAN, 0, NET_BUF_TIMEOUT); + if (!pkt) { + return -ENOMEM; + } + + if (net_pkt_write_new(pkt, ctx->recv, count)) { + net_pkt_unref(pkt); + return -ENOBUFS; + } + + if (net_recv_data(ctx->iface, pkt) < 0) { + net_pkt_unref(pkt); + } + + return 0; +} + +static void canbus_np_rx(struct canbus_np_context *ctx) +{ + int ret; + + LOG_DBG("Starting ZCAN RX thread"); + + while (1) { + if (ctx->iface && net_if_is_up(ctx->iface)) { + ret = canbus_np_wait_data(ctx->dev_fd); + if (!ret) { + read_data(ctx, ctx->dev_fd); + } + } + + k_sleep(K_MSEC(50)); + } +} + +static void create_rx_handler(struct canbus_np_context *ctx) +{ + k_thread_create(&rx_thread_data, canbus_rx_stack, + K_THREAD_STACK_SIZEOF(canbus_rx_stack), + (k_thread_entry_t)canbus_np_rx, + ctx, NULL, NULL, K_PRIO_COOP(14), + 0, K_NO_WAIT); +} + +static int canbus_np_init(struct device *dev) +{ + struct canbus_np_context *ctx = dev->driver_data; + + ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_NAME; + + ctx->dev_fd = canbus_np_iface_open(ctx->if_name); + if (ctx->dev_fd < 0) { + LOG_ERR("Cannot open %s (%d)", ctx->if_name, ctx->dev_fd); + } else { + /* Create a thread that will handle incoming data from host */ + create_rx_handler(ctx); + } + + return 0; +} + +static int canbus_np_runtime_configure(struct device *dev, enum can_mode mode, + u32_t bitrate) +{ + ARG_UNUSED(dev); + ARG_UNUSED(mode); + ARG_UNUSED(bitrate); + + return 0; +} + +static int canbus_np_send(struct device *dev, const struct zcan_frame *msg, + s32_t timeout, can_tx_callback_t callback) +{ + struct canbus_np_context *ctx = dev->driver_data; + int ret = -ENODEV; + + ARG_UNUSED(timeout); + ARG_UNUSED(callback); + + if (ctx->dev_fd > 0) { + struct can_frame frame; + + can_copy_zframe_to_frame(msg, &frame); + + ret = canbus_np_write_data(ctx->dev_fd, &frame, sizeof(frame)); + if (ret < 0) { + LOG_ERR("Cannot send CAN data len %d (%d)", + frame.can_dlc, -errno); + } + } + + return ret < 0 ? ret : 0; +} + +static int canbus_np_attach_msgq(struct device *dev, struct k_msgq *msgq, + const struct zcan_filter *filter) +{ + ARG_UNUSED(dev); + ARG_UNUSED(msgq); + ARG_UNUSED(filter); + + return 0; +} + +static int canbus_np_attach_isr(struct device *dev, can_rx_callback_t isr, + const struct zcan_filter *filter) +{ + ARG_UNUSED(dev); + ARG_UNUSED(isr); + ARG_UNUSED(filter); + + return 0; +} + +static void canbus_np_detach(struct device *dev, int filter_nr) +{ + ARG_UNUSED(dev); + ARG_UNUSED(filter_nr); +} + +static const struct can_driver_api can_api_funcs = { + .configure = canbus_np_runtime_configure, + .send = canbus_np_send, + .attach_msgq = canbus_np_attach_msgq, + .attach_isr = canbus_np_attach_isr, + .detach = canbus_np_detach, +}; + +#ifdef CONFIG_CAN_1 + +DEVICE_AND_API_INIT(canbus_np_1, DT_CAN_1_NAME, + canbus_np_init, &canbus_context_data, NULL, + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + &can_api_funcs); + +#if defined(CONFIG_NET_SOCKETS_CAN) + +#define SOCKET_CAN_NAME_1 "SOCKET_CAN_1" +#define SEND_TIMEOUT K_MSEC(100) +#define BUF_ALLOC_TIMEOUT K_MSEC(50) + +/* TODO: make msgq size configurable */ +CAN_DEFINE_MSGQ(socket_can_msgq, 5); + +static void socket_can_iface_init(struct net_if *iface) +{ + struct device *dev = net_if_get_device(iface); + struct canbus_np_context *socket_context = dev->driver_data; + + socket_context->iface = iface; + + LOG_DBG("Init CAN interface %p dev %p", iface, dev); +} + +static void tx_irq_callback(u32_t error_flags) +{ + if (error_flags) { + LOG_DBG("Callback! error-code: %d", error_flags); + } +} + +/* This is called by net_if.c when packet is about to be sent */ +static int socket_can_send(struct device *dev, struct net_pkt *pkt) +{ + struct canbus_np_context *socket_context = dev->driver_data; + int ret; + + if (net_pkt_family(pkt) != AF_CAN) { + return -EPFNOSUPPORT; + } + + ret = can_send(socket_context->can_dev, + (struct zcan_frame *)pkt->frags->data, + SEND_TIMEOUT, tx_irq_callback); + if (ret) { + LOG_DBG("Cannot send socket CAN msg (%d)", ret); + } + + /* If something went wrong, then we need to return negative value to + * net_if.c:net_if_tx() so that the net_pkt will get released. + */ + return -ret; +} + +static int socket_can_setsockopt(struct device *dev, void *obj, + int level, int optname, + const void *optval, socklen_t optlen) +{ + struct canbus_np_context *socket_context = dev->driver_data; + struct can_filter filter; + + if (level != SOL_CAN_RAW && optname != CAN_RAW_FILTER) { + errno = EINVAL; + return -1; + } + + /* Our userspace can send either zcan_filter or can_filter struct. + * They are different sizes so we need to convert them if needed. + */ + if (optlen != sizeof(struct can_filter) && + optlen != sizeof(struct zcan_filter)) { + errno = EINVAL; + return -1; + } + + if (optlen == sizeof(struct zcan_filter)) { + can_copy_zfilter_to_filter((struct zcan_filter *)optval, + &filter); + } else { + memcpy(&filter, optval, sizeof(filter)); + } + + return canbus_np_setsockopt(socket_context->dev_fd, level, optname, + &filter, sizeof(filter)); +} + +static struct canbus_api socket_can_api = { + .iface_api.init = socket_can_iface_init, + .send = socket_can_send, + .setsockopt = socket_can_setsockopt, +}; + +static int socket_can_init_1(struct device *dev) +{ + struct device *can_dev = DEVICE_GET(canbus_np_1); + struct canbus_np_context *socket_context = dev->driver_data; + + LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", + dev, dev->config->name, can_dev, can_dev->config->name); + + socket_context->can_dev = can_dev; + socket_context->msgq = &socket_can_msgq; + + return 0; +} + +NET_DEVICE_INIT(socket_can_native_posix_1, SOCKET_CAN_NAME_1, + socket_can_init_1, &canbus_context_data, NULL, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, + CANBUS_L2, NET_L2_GET_CTX_TYPE(CANBUS_L2), CAN_MTU); + +#endif /* CONFIG_NET_SOCKETS_CAN */ + +#endif /* CONFIG_CAN_1 */ diff --git a/drivers/can/canbus_native_posix_adapt.c b/drivers/can/canbus_native_posix_adapt.c new file mode 100644 index 0000000000000..3d06b30e0ba63 --- /dev/null +++ b/drivers/can/canbus_native_posix_adapt.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2019 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * + * Routines setting up the host system. Those are placed in separate file + * because there is naming conflicts between host and zephyr network stacks. + */ + +/* Host include files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "posix_trace.h" + +#ifdef __linux +#include +#endif + +/* Zephyr include files. Be very careful here and only include minimum + * things needed. + */ +#define LOG_MODULE_NAME canbus_posix_adapt +#define LOG_LEVEL CONFIG_CAN_LOG_LEVEL + +#include +LOG_MODULE_REGISTER(LOG_MODULE_NAME); + +#include + +#include "canbus_native_posix_priv.h" + +int canbus_np_iface_open(const char *if_name) +{ + struct sockaddr_can addr; + struct ifreq ifr; + int fd, ret = -EINVAL; + + fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); + if (fd < 0) { + return -errno; + } + + (void)memset(&ifr, 0, sizeof(ifr)); + (void)memset(&addr, 0, sizeof(addr)); + +#ifdef __linux + strncpy(ifr.ifr_name, if_name, IFNAMSIZ); + + ret = ioctl(fd, SIOCGIFINDEX, (void *)&ifr); + if (ret < 0) { + ret = -errno; + close(fd); + return ret; + } + + /* Setup address for bind */ + addr.can_ifindex = ifr.ifr_ifindex; + addr.can_family = PF_CAN; + + /* bind socket to the zcan interface */ + ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); + if (ret < 0) { + ret = -errno; + close(fd); + return ret; + } +#endif + + return fd; +} + +int canbus_np_iface_remove(int fd) +{ + return close(fd); +} + +static int ssystem(const char *fmt, ...) + __attribute__((__format__(__printf__, 1, 2))); + +static int ssystem(const char *fmt, ...) +{ + char cmd[255]; + va_list ap; + int ret; + + va_start(ap, fmt); + vsnprintf(cmd, sizeof(cmd), fmt, ap); + va_end(ap); + + posix_print_trace("%s\n", cmd); + + ret = system(cmd); + + return -WEXITSTATUS(ret); +} + +int canbus_np_wait_data(int fd) +{ + struct timeval timeout; + fd_set rset; + int ret; + + FD_ZERO(&rset); + + FD_SET(fd, &rset); + + timeout.tv_sec = 0; + timeout.tv_usec = 0; + + ret = select(fd + 1, &rset, NULL, NULL, &timeout); + if (ret < 0 && errno != EINTR) { + return -errno; + } else if (ret > 0) { + if (FD_ISSET(fd, &rset)) { + return 0; + } + } + + return -EAGAIN; +} + +ssize_t canbus_np_read_data(int fd, void *buf, size_t buf_len) +{ + return read(fd, buf, buf_len); +} + +ssize_t canbus_np_write_data(int fd, void *buf, size_t buf_len) +{ + return write(fd, buf, buf_len); +} + +int canbus_np_setsockopt(int fd, int level, int optname, + const void *optval, socklen_t optlen) +{ + return setsockopt(fd, level, optname, optval, optlen); +} + +int canbus_np_getsockopt(int fd, int level, int optname, + void *optval, socklen_t *optlen) +{ + return getsockopt(fd, level, optname, optval, optlen); +} + +#if defined(CONFIG_NET_PROMISCUOUS_MODE) +int canbus_np_promisc_mode(const char *if_name, bool enable) +{ + return ssystem("ip link set dev %s promisc %s", + if_name, enable ? "on" : "off"); +} +#endif /* CONFIG_NET_PROMISCUOUS_MODE */ + +/* If we have enabled manual setup, then interface cannot be + * taken up or down by the driver as we normally do not have + * enough permissions. + */ + +int canbus_np_if_up(const char *if_name) +{ + return ssystem("ip link set dev %s up", if_name); +} + +int canbus_np_if_down(const char *if_name) +{ + return ssystem("ip link set dev %s down", if_name); +} diff --git a/drivers/can/canbus_native_posix_priv.h b/drivers/can/canbus_native_posix_priv.h new file mode 100644 index 0000000000000..1a42c22fb5bc1 --- /dev/null +++ b/drivers/can/canbus_native_posix_priv.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2019 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file + * @brief Private functions for native posix canbus driver. + */ + +#ifndef ZEPHYR_DRIVERS_CAN_NATIVE_POSIX_PRIV_H_ +#define ZEPHYR_DRIVERS_CAN_NATIVE_POSIX_PRIV_H_ + +int canbus_np_iface_open(const char *if_name); +int canbus_np_iface_close(int fd); +int canbus_np_wait_data(int fd); +ssize_t canbus_np_read_data(int fd, void *buf, size_t buf_len); +ssize_t canbus_np_write_data(int fd, void *buf, size_t buf_len); +int canbus_np_setsockopt(int fd, int level, int optname, + const void *optval, socklen_t optlen); +int canbus_np_getsockopt(int fd, int level, int optname, + void *optval, socklen_t *optlen); + +#endif /* ZEPHYR_DRIVERS_CAN_NATIVE_POSIX_PRIV_H_ */ From 2d0cb8bed7ffb58f5de00acb4cf821922cfaee1c Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Fri, 8 Mar 2019 16:19:42 +0200 Subject: [PATCH 48/50] samples: net: sockets: can: Add native_posix board support Add native_posix board support to socket-can sample application. Signed-off-by: Jukka Rissanen --- samples/net/sockets/can/boards/native_posix.conf | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 samples/net/sockets/can/boards/native_posix.conf diff --git a/samples/net/sockets/can/boards/native_posix.conf b/samples/net/sockets/can/boards/native_posix.conf new file mode 100644 index 0000000000000..e3f7d0a941002 --- /dev/null +++ b/samples/net/sockets/can/boards/native_posix.conf @@ -0,0 +1,2 @@ +CONFIG_CAN_NATIVE_POSIX=y +CONFIG_ETH_NATIVE_POSIX=n From cdcc8bef18a05173ccda6a47c8e72fc1dcc7826a Mon Sep 17 00:00:00 2001 From: Ruixiang Du Date: Thu, 8 Apr 2021 18:22:40 +0800 Subject: [PATCH 49/50] rebase: rebased jukkar:canbus-driver-for-native_posix to tag zephyr-v2.6.0 Update file name canbus_native_posix_xx.x to can_native_posix_xx.x to keep consistent with can driver for other platforms. Update implementation to work with the current state of zephyr and update samples/net/sockets/can/boards/native_posix.conf. Replace deprecated DEVICE_AND_API_INIT() with DEVICE_DT_INST_DEFINE() and add can_1 and can_2 in native_posix.dts. Signed-off-by: Ruixiang Du --- boards/posix/native_posix/Kconfig.defconfig | 3 + boards/posix/native_posix/native_posix.dts | 20 + drivers/can/CMakeLists.txt | 6 +- drivers/can/Kconfig.native_posix | 56 ++- drivers/can/can_native_posix.c | 369 ++++++++++++++++++ ...posix_adapt.c => can_native_posix_adapt.c} | 4 +- ...e_posix_priv.h => can_native_posix_priv.h} | 0 drivers/can/canbus_native_posix.c | 313 --------------- 8 files changed, 448 insertions(+), 323 deletions(-) create mode 100644 drivers/can/can_native_posix.c rename drivers/can/{canbus_native_posix_adapt.c => can_native_posix_adapt.c} (97%) rename drivers/can/{canbus_native_posix_priv.h => can_native_posix_priv.h} (100%) delete mode 100644 drivers/can/canbus_native_posix.c diff --git a/boards/posix/native_posix/Kconfig.defconfig b/boards/posix/native_posix/Kconfig.defconfig index a226c26d60310..160ccad25b416 100644 --- a/boards/posix/native_posix/Kconfig.defconfig +++ b/boards/posix/native_posix/Kconfig.defconfig @@ -23,6 +23,9 @@ config NET_L2_ETHERNET config ETH_NATIVE_POSIX default y if NET_L2_ETHERNET +config CAN_NATIVE_POSIX + default y if NET_SOCKETS_CAN + endif # NETWORKING config FAKE_ENTROPY_NATIVE_POSIX diff --git a/boards/posix/native_posix/native_posix.dts b/boards/posix/native_posix/native_posix.dts index 5e52d3cbca163..28995c8ffaf01 100644 --- a/boards/posix/native_posix/native_posix.dts +++ b/boards/posix/native_posix/native_posix.dts @@ -141,6 +141,26 @@ current-speed = <0>; }; + can1: can_1 { + status = "okay"; + compatible = "zephyr,native-posix-can"; + label = "CAN_1"; + /* Dummy bus-speed entry to comply with can + * DTS binding + */ + bus-speed = <500000>; + }; + + can2: can_2 { + status = "okay"; + compatible = "zephyr,native-posix-can"; + label = "CAN_2"; + /* Dummy bus-speed entry to comply with can + * DTS binding + */ + bus-speed = <500000>; + }; + rng: rng { status = "okay"; compatible = "zephyr,native-posix-rng"; diff --git a/drivers/can/CMakeLists.txt b/drivers/can/CMakeLists.txt index 28e36c324e83d..cbd130e5b1761 100644 --- a/drivers/can/CMakeLists.txt +++ b/drivers/can/CMakeLists.txt @@ -20,7 +20,7 @@ if(CONFIG_CAN_NATIVE_POSIX) zephyr_library_compile_definitions(_BSD_SOURCE) zephyr_library_compile_definitions(_DEFAULT_SOURCE) zephyr_library_sources( - canbus_native_posix.c - canbus_native_posix_adapt.c + can_native_posix.c + can_native_posix_adapt.c ) -endif() \ No newline at end of file +endif() diff --git a/drivers/can/Kconfig.native_posix b/drivers/can/Kconfig.native_posix index 1efede3a36a2c..0b227e0bbc8b7 100644 --- a/drivers/can/Kconfig.native_posix +++ b/drivers/can/Kconfig.native_posix @@ -8,10 +8,12 @@ config CAN_NATIVE_POSIX bool "native_posix CAN Driver" - depends on ARCH_POSIX + depends on ARCH_POSIX && NETWORKING help Enable native_posix CAN driver +if CAN_NATIVE_POSIX + config CAN_MAX_FILTER int "Maximum number of concurrent active filters" depends on CAN_NATIVE_POSIX @@ -21,8 +23,52 @@ config CAN_MAX_FILTER Defines the array size of the callback/msgq pointers. Must be at least the size of concurrent reads. -config CAN_NATIVE_POSIX_INTERFACE_NAME - string "CANBUS interface name in Linux side" - default "zcan" +## Interface 1 +config CAN_NATIVE_POSIX_INTERFACE_1_ENABLE + bool "CANBUS interface 1" + default y + depends on CAN_NATIVE_POSIX + help + This option enables the CANBUS network interface for Native POSIX board. + +config CAN_NATIVE_POSIX_INTERFACE_1_NAME + string "CANBUS interface 1 name on Linux side" + depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLE + default "vcan0" + help + This option sets the CANBUS network interface 1 name in host system. + +config CAN_NATIVE_POSIX_INTERFACE_1_SOCKETCAN_NAME + string "Network device name" + depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLE + default "SOCKET_CAN_1" + help + Name of the network device driver for SocketCAN. + +## Interface 2 +config CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + bool "CANBUS interface 2" + default y + depends on CAN_NATIVE_POSIX help - This option sets the CANBUS network interface name in host system. + This option enables the CANBUS network interface for Native POSIX board. + +if CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + +config CAN_NATIVE_POSIX_INTERFACE_2_NAME + string "CANBUS interface 2 name on Linux side" + depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + default "vcan1" + help + This option sets the CANBUS network interface 1 name in host system. + +config CAN_NATIVE_POSIX_INTERFACE_2_SOCKETCAN_NAME + string "Network device name" + depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + default "SOCKET_CAN_2" + help + Name of the network device driver for SocketCAN. + +endif # CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + +endif # CAN_NATIVE_POSIX \ No newline at end of file diff --git a/drivers/can/can_native_posix.c b/drivers/can/can_native_posix.c new file mode 100644 index 0000000000000..2b12f328d098c --- /dev/null +++ b/drivers/can/can_native_posix.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2019 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * + * CANBUS driver for native_posix board. This is meant to test CANBUS + * connectivity between host and Zephyr. + */ + +#define DT_DRV_COMPAT zephyr_native_posix_can + +#define LOG_MODULE_NAME canbus_posix +#define LOG_LEVEL CONFIG_CAN_LOG_LEVEL + +#include +LOG_MODULE_REGISTER(LOG_MODULE_NAME); + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "can_native_posix_priv.h" + +#define NET_BUF_TIMEOUT K_MSEC(100) + +struct canbus_np_context { + const struct device *can_dev; + struct k_msgq *msgq; + struct net_if *iface; + const char *if_name; + + int dev_fd; + struct can_frame frame; +}; + +static int read_data(struct canbus_np_context *ctx, int fd) +{ + struct net_pkt *pkt; + int count; + + count = canbus_np_read_data(fd, (void *)(&ctx->frame), + sizeof(ctx->frame)); + if (count <= 0) { + return 0; + } + + struct zcan_frame zframe; + can_copy_frame_to_zframe(&ctx->frame, &zframe); + pkt = net_pkt_rx_alloc_with_buffer(ctx->iface, sizeof(zframe), AF_CAN, + 0, NET_BUF_TIMEOUT); + if (!pkt) { + return -ENOMEM; + } + + if (net_pkt_write(pkt, (void *)(&zframe), sizeof(zframe))) { + net_pkt_unref(pkt); + return -ENOBUFS; + } + + if (net_recv_data(ctx->iface, pkt) < 0) { + net_pkt_unref(pkt); + } + + return 0; +} + +static void canbus_np_rx(struct canbus_np_context *ctx) +{ + LOG_DBG("Starting ZCAN RX thread"); + + while (1) { + if (ctx->iface && net_if_is_up(ctx->iface)) { + while (!canbus_np_wait_data(ctx->dev_fd)) { + read_data(ctx, ctx->dev_fd); + } + } + + k_sleep(K_MSEC(10)); + } +} + +static int canbus_np_send(const struct device *dev, + const struct zcan_frame *msg, k_timeout_t timeout, + can_tx_callback_t callback_isr, void *callback_arg) +{ + struct canbus_np_context *ctx = dev->data; + int ret = -ENODEV; + + ARG_UNUSED(timeout); + ARG_UNUSED(callback_isr); + ARG_UNUSED(callback_arg); + + if (ctx->dev_fd > 0) { + struct can_frame frame; + + can_copy_zframe_to_frame(msg, &frame); + + ret = canbus_np_write_data(ctx->dev_fd, &frame, sizeof(frame)); + if (ret < 0) { + LOG_ERR("Cannot send CAN data len %d (%d)", + frame.can_dlc, -errno); + } + } + + return ret < 0 ? ret : 0; +} + +static int canbus_np_attach_isr(const struct device *dev, can_rx_callback_t isr, + void *callback_arg, + const struct zcan_filter *filter) +{ + ARG_UNUSED(dev); + ARG_UNUSED(isr); + ARG_UNUSED(callback_arg); + ARG_UNUSED(filter); + + return 0; +} + +static void canbus_np_detach(const struct device *dev, int filter_nr) +{ + ARG_UNUSED(dev); + ARG_UNUSED(filter_nr); +} + +enum can_state canbus_np_get_state(const struct device *dev, + struct can_bus_err_cnt *err_cnt) +{ + ARG_UNUSED(dev); + ARG_UNUSED(err_cnt); + return CAN_ERROR_ACTIVE; +} + +void canbus_np_register_state_change_isr(const struct device *dev, + can_state_change_isr_t isr) +{ + ARG_UNUSED(dev); + ARG_UNUSED(isr); +} + +static const struct can_driver_api can_api_funcs = { + .send = canbus_np_send, + .attach_isr = canbus_np_attach_isr, + .detach = canbus_np_detach, + .get_state = canbus_np_get_state, + .register_state_change_isr = canbus_np_register_state_change_isr +}; + +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE +K_KERNEL_STACK_DEFINE(canbus_rx_stack1, + CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); +static struct k_thread rx_thread_data1; +static struct canbus_np_context canbus_context_data1; + +static int canbus_np1_init(const struct device *dev) +{ + struct canbus_np_context *ctx = dev->data; + + ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_NAME; + + ctx->dev_fd = canbus_np_iface_open(ctx->if_name); + if (ctx->dev_fd < 0) { + LOG_ERR("Cannot open %s (%d)", ctx->if_name, ctx->dev_fd); + } else { + /* Create a thread that will handle incoming data from host */ + k_thread_create(&rx_thread_data1, canbus_rx_stack1, + K_THREAD_STACK_SIZEOF(canbus_rx_stack1), + (k_thread_entry_t)canbus_np_rx, ctx, NULL, NULL, + K_PRIO_COOP(14), 0, K_NO_WAIT); + } + + return 0; +} + +DEVICE_DT_INST_DEFINE(0, &canbus_np1_init, NULL, + (void *)&canbus_context_data1, NULL, + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + &can_api_funcs); +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE */ + +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE +K_KERNEL_STACK_DEFINE(canbus_rx_stack2, + CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); +static struct k_thread rx_thread_data2; +static struct canbus_np_context canbus_context_data2; + +static int canbus_np2_init(const struct device *dev) +{ + struct canbus_np_context *ctx = dev->data; + + ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_NAME; + + ctx->dev_fd = canbus_np_iface_open(ctx->if_name); + if (ctx->dev_fd < 0) { + LOG_ERR("Cannot open %s (%d)", ctx->if_name, ctx->dev_fd); + } else { + /* Create a thread that will handle incoming data from host */ + k_thread_create(&rx_thread_data2, canbus_rx_stack2, + K_THREAD_STACK_SIZEOF(canbus_rx_stack2), + (k_thread_entry_t)canbus_np_rx, ctx, NULL, NULL, + K_PRIO_COOP(14), 0, K_NO_WAIT); + } + + return 0; +} + +DEVICE_DT_INST_DEFINE(1, &canbus_np2_init, NULL, + (void *)&canbus_context_data2, NULL, + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + &can_api_funcs); +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE */ + +#if defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE) || \ + defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE) + +#if defined(CONFIG_NET_SOCKETS_CAN) + +#define SEND_TIMEOUT K_MSEC(100) +#define BUF_ALLOC_TIMEOUT K_MSEC(50) + +static void socket_can_iface_init(struct net_if *iface) +{ + const struct device *dev = net_if_get_device(iface); + struct canbus_np_context *socket_context = dev->data; + + socket_context->iface = iface; + + LOG_DBG("Init CAN interface %p dev %p", iface, dev); +} + +static void tx_irq_callback(uint32_t error_flags, void *arg) +{ + if (error_flags) { + LOG_DBG("Callback! error-code: %d", error_flags); + } +} + +/* This is called by net_if.c when packet is about to be sent */ +static int socket_can_send(const struct device *dev, struct net_pkt *pkt) +{ + struct canbus_np_context *socket_context = dev->data; + int ret; + + if (net_pkt_family(pkt) != AF_CAN) { + return -EPFNOSUPPORT; + } + + ret = can_send(socket_context->can_dev, + (struct zcan_frame *)pkt->frags->data, SEND_TIMEOUT, + tx_irq_callback, NULL); + if (ret) { + LOG_DBG("Cannot send socket CAN msg (%d)", ret); + } + + /* If something went wrong, then we need to return negative value to + * net_if.c:net_if_tx() so that the net_pkt will get released. + */ + return -ret; +} + +static int socket_can_setsockopt(const struct device *dev, void *obj, int level, + int optname, const void *optval, + socklen_t optlen) +{ + struct canbus_np_context *socket_context = dev->data; + struct can_filter filter; + + if (level != SOL_CAN_RAW && optname != CAN_RAW_FILTER) { + errno = EINVAL; + return -1; + } + + /* Our userspace can send either zcan_filter or can_filter struct. + * They are different sizes so we need to convert them if needed. + */ + if (optlen != sizeof(struct can_filter) && + optlen != sizeof(struct zcan_filter)) { + errno = EINVAL; + return -1; + } + + if (optlen == sizeof(struct zcan_filter)) { + can_copy_zfilter_to_filter((struct zcan_filter *)optval, + &filter); + } else { + memcpy(&filter, optval, sizeof(filter)); + } + + return canbus_np_setsockopt(socket_context->dev_fd, level, optname, + &filter, sizeof(filter)); +} + +static void socket_can_close(const struct device *dev, int filter_id) +{ + struct canbus_np_context *socket_context = dev->data; + + can_detach(socket_context->can_dev, filter_id); +} + +static struct canbus_api socket_can_api = { + .iface_api.init = socket_can_iface_init, + .send = socket_can_send, + .close = socket_can_close, + .setsockopt = socket_can_setsockopt, +}; + +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE +// static struct socket_can_context socket_can_context_1; +static int socket_can_init_1(const struct device *dev) +{ + const struct device *can_dev = DEVICE_DT_INST_GET(0); + struct canbus_np_context *socket_context = dev->data; + + LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", dev, + dev->name, can_dev, can_dev->name); + + socket_context->can_dev = can_dev; + + return 0; +} + +NET_DEVICE_INIT_INSTANCE(socket_can_native_posix_1, + CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_SOCKETCAN_NAME, 0, + socket_can_init_1, NULL, + &canbus_context_data1, NULL, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, + CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE */ + +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE +static int socket_can_init_2(const struct device *dev) +{ + const struct device *can_dev = DEVICE_DT_INST_GET(1); + struct canbus_np_context *socket_context = dev->data; + + LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", dev, + dev->name, can_dev, can_dev->name); + + socket_context->can_dev = can_dev; + + return 0; +} + +NET_DEVICE_INIT_INSTANCE(socket_can_native_posix_2, + CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_SOCKETCAN_NAME, 1, + socket_can_init_2, NULL, + &canbus_context_data2, NULL, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, + CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE */ + +#endif /* CONFIG_NET_SOCKETS_CAN */ + +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1 */ diff --git a/drivers/can/canbus_native_posix_adapt.c b/drivers/can/can_native_posix_adapt.c similarity index 97% rename from drivers/can/canbus_native_posix_adapt.c rename to drivers/can/can_native_posix_adapt.c index 3d06b30e0ba63..b7bb51d84b85c 100644 --- a/drivers/can/canbus_native_posix_adapt.c +++ b/drivers/can/can_native_posix_adapt.c @@ -24,7 +24,7 @@ #include #include #include -#include "posix_trace.h" +#include "arch/posix/posix_trace.h" #ifdef __linux #include @@ -41,7 +41,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); #include -#include "canbus_native_posix_priv.h" +#include "can_native_posix_priv.h" int canbus_np_iface_open(const char *if_name) { diff --git a/drivers/can/canbus_native_posix_priv.h b/drivers/can/can_native_posix_priv.h similarity index 100% rename from drivers/can/canbus_native_posix_priv.h rename to drivers/can/can_native_posix_priv.h diff --git a/drivers/can/canbus_native_posix.c b/drivers/can/canbus_native_posix.c deleted file mode 100644 index 81bdaa9fc2658..0000000000000 --- a/drivers/can/canbus_native_posix.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright (c) 2019 Intel Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @file - * - * CANBUS driver for native_posix board. This is meant to test CANBUS - * connectivity between host and Zephyr. - */ - -#define LOG_MODULE_NAME canbus_posix -#define LOG_LEVEL CONFIG_CAN_LOG_LEVEL - -#include -LOG_MODULE_REGISTER(LOG_MODULE_NAME); - -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "canbus_native_posix_priv.h" - -#define NET_BUF_TIMEOUT K_MSEC(100) -#define DT_CAN_1_NAME "CAN_1" - -struct canbus_np_context { - u8_t recv[CAN_MTU]; - - struct device *can_dev; - struct k_msgq *msgq; - struct net_if *iface; - const char *if_name; - int dev_fd; - bool init_done; -}; - -NET_STACK_DEFINE(RX_ZCAN, canbus_rx_stack, - CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE, - CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); -static struct k_thread rx_thread_data; - -/* TODO: support multiple interfaces */ -static struct canbus_np_context canbus_context_data; - -static int read_data(struct canbus_np_context *ctx, int fd) -{ - struct net_pkt *pkt; - int count; - - count = canbus_np_read_data(fd, ctx->recv, sizeof(ctx->recv)); - if (count <= 0) { - return 0; - } - - pkt = net_pkt_rx_alloc_with_buffer(ctx->iface, count, - AF_CAN, 0, NET_BUF_TIMEOUT); - if (!pkt) { - return -ENOMEM; - } - - if (net_pkt_write_new(pkt, ctx->recv, count)) { - net_pkt_unref(pkt); - return -ENOBUFS; - } - - if (net_recv_data(ctx->iface, pkt) < 0) { - net_pkt_unref(pkt); - } - - return 0; -} - -static void canbus_np_rx(struct canbus_np_context *ctx) -{ - int ret; - - LOG_DBG("Starting ZCAN RX thread"); - - while (1) { - if (ctx->iface && net_if_is_up(ctx->iface)) { - ret = canbus_np_wait_data(ctx->dev_fd); - if (!ret) { - read_data(ctx, ctx->dev_fd); - } - } - - k_sleep(K_MSEC(50)); - } -} - -static void create_rx_handler(struct canbus_np_context *ctx) -{ - k_thread_create(&rx_thread_data, canbus_rx_stack, - K_THREAD_STACK_SIZEOF(canbus_rx_stack), - (k_thread_entry_t)canbus_np_rx, - ctx, NULL, NULL, K_PRIO_COOP(14), - 0, K_NO_WAIT); -} - -static int canbus_np_init(struct device *dev) -{ - struct canbus_np_context *ctx = dev->driver_data; - - ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_NAME; - - ctx->dev_fd = canbus_np_iface_open(ctx->if_name); - if (ctx->dev_fd < 0) { - LOG_ERR("Cannot open %s (%d)", ctx->if_name, ctx->dev_fd); - } else { - /* Create a thread that will handle incoming data from host */ - create_rx_handler(ctx); - } - - return 0; -} - -static int canbus_np_runtime_configure(struct device *dev, enum can_mode mode, - u32_t bitrate) -{ - ARG_UNUSED(dev); - ARG_UNUSED(mode); - ARG_UNUSED(bitrate); - - return 0; -} - -static int canbus_np_send(struct device *dev, const struct zcan_frame *msg, - s32_t timeout, can_tx_callback_t callback) -{ - struct canbus_np_context *ctx = dev->driver_data; - int ret = -ENODEV; - - ARG_UNUSED(timeout); - ARG_UNUSED(callback); - - if (ctx->dev_fd > 0) { - struct can_frame frame; - - can_copy_zframe_to_frame(msg, &frame); - - ret = canbus_np_write_data(ctx->dev_fd, &frame, sizeof(frame)); - if (ret < 0) { - LOG_ERR("Cannot send CAN data len %d (%d)", - frame.can_dlc, -errno); - } - } - - return ret < 0 ? ret : 0; -} - -static int canbus_np_attach_msgq(struct device *dev, struct k_msgq *msgq, - const struct zcan_filter *filter) -{ - ARG_UNUSED(dev); - ARG_UNUSED(msgq); - ARG_UNUSED(filter); - - return 0; -} - -static int canbus_np_attach_isr(struct device *dev, can_rx_callback_t isr, - const struct zcan_filter *filter) -{ - ARG_UNUSED(dev); - ARG_UNUSED(isr); - ARG_UNUSED(filter); - - return 0; -} - -static void canbus_np_detach(struct device *dev, int filter_nr) -{ - ARG_UNUSED(dev); - ARG_UNUSED(filter_nr); -} - -static const struct can_driver_api can_api_funcs = { - .configure = canbus_np_runtime_configure, - .send = canbus_np_send, - .attach_msgq = canbus_np_attach_msgq, - .attach_isr = canbus_np_attach_isr, - .detach = canbus_np_detach, -}; - -#ifdef CONFIG_CAN_1 - -DEVICE_AND_API_INIT(canbus_np_1, DT_CAN_1_NAME, - canbus_np_init, &canbus_context_data, NULL, - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, - &can_api_funcs); - -#if defined(CONFIG_NET_SOCKETS_CAN) - -#define SOCKET_CAN_NAME_1 "SOCKET_CAN_1" -#define SEND_TIMEOUT K_MSEC(100) -#define BUF_ALLOC_TIMEOUT K_MSEC(50) - -/* TODO: make msgq size configurable */ -CAN_DEFINE_MSGQ(socket_can_msgq, 5); - -static void socket_can_iface_init(struct net_if *iface) -{ - struct device *dev = net_if_get_device(iface); - struct canbus_np_context *socket_context = dev->driver_data; - - socket_context->iface = iface; - - LOG_DBG("Init CAN interface %p dev %p", iface, dev); -} - -static void tx_irq_callback(u32_t error_flags) -{ - if (error_flags) { - LOG_DBG("Callback! error-code: %d", error_flags); - } -} - -/* This is called by net_if.c when packet is about to be sent */ -static int socket_can_send(struct device *dev, struct net_pkt *pkt) -{ - struct canbus_np_context *socket_context = dev->driver_data; - int ret; - - if (net_pkt_family(pkt) != AF_CAN) { - return -EPFNOSUPPORT; - } - - ret = can_send(socket_context->can_dev, - (struct zcan_frame *)pkt->frags->data, - SEND_TIMEOUT, tx_irq_callback); - if (ret) { - LOG_DBG("Cannot send socket CAN msg (%d)", ret); - } - - /* If something went wrong, then we need to return negative value to - * net_if.c:net_if_tx() so that the net_pkt will get released. - */ - return -ret; -} - -static int socket_can_setsockopt(struct device *dev, void *obj, - int level, int optname, - const void *optval, socklen_t optlen) -{ - struct canbus_np_context *socket_context = dev->driver_data; - struct can_filter filter; - - if (level != SOL_CAN_RAW && optname != CAN_RAW_FILTER) { - errno = EINVAL; - return -1; - } - - /* Our userspace can send either zcan_filter or can_filter struct. - * They are different sizes so we need to convert them if needed. - */ - if (optlen != sizeof(struct can_filter) && - optlen != sizeof(struct zcan_filter)) { - errno = EINVAL; - return -1; - } - - if (optlen == sizeof(struct zcan_filter)) { - can_copy_zfilter_to_filter((struct zcan_filter *)optval, - &filter); - } else { - memcpy(&filter, optval, sizeof(filter)); - } - - return canbus_np_setsockopt(socket_context->dev_fd, level, optname, - &filter, sizeof(filter)); -} - -static struct canbus_api socket_can_api = { - .iface_api.init = socket_can_iface_init, - .send = socket_can_send, - .setsockopt = socket_can_setsockopt, -}; - -static int socket_can_init_1(struct device *dev) -{ - struct device *can_dev = DEVICE_GET(canbus_np_1); - struct canbus_np_context *socket_context = dev->driver_data; - - LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", - dev, dev->config->name, can_dev, can_dev->config->name); - - socket_context->can_dev = can_dev; - socket_context->msgq = &socket_can_msgq; - - return 0; -} - -NET_DEVICE_INIT(socket_can_native_posix_1, SOCKET_CAN_NAME_1, - socket_can_init_1, &canbus_context_data, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, - CANBUS_L2, NET_L2_GET_CTX_TYPE(CANBUS_L2), CAN_MTU); - -#endif /* CONFIG_NET_SOCKETS_CAN */ - -#endif /* CONFIG_CAN_1 */ From b1cf9c693b7f1700b9aef53ef266f991ed4c76f8 Mon Sep 17 00:00:00 2001 From: Pin Loon Lee Date: Wed, 21 Jul 2021 14:45:51 +0800 Subject: [PATCH 50/50] drivers: can: replace canbus_np_context with socket_can_context Move struct socket_can_context to socket_can_context.h to ensure struct socket_can_context can be included without replying on socket_can_generic.h. Change rx thread of canbus to be preemptive to avoid can frame loss. Update naming of _ENABLE to _ENABLED to follow convention in Kconfig.native_posix. Signed-off-by: Pin Loon Lee --- drivers/can/Kconfig.native_posix | 35 ++++---- drivers/can/can_native_posix.c | 140 +++++++++++-------------------- drivers/can/socket_can_context.h | 32 +++++++ drivers/can/socket_can_generic.h | 12 +-- 4 files changed, 99 insertions(+), 120 deletions(-) create mode 100644 drivers/can/socket_can_context.h diff --git a/drivers/can/Kconfig.native_posix b/drivers/can/Kconfig.native_posix index 0b227e0bbc8b7..5b8ae430c19a9 100644 --- a/drivers/can/Kconfig.native_posix +++ b/drivers/can/Kconfig.native_posix @@ -1,10 +1,7 @@ -# Kconfig.native_posix - native_posix CAN configuration options +# Native posix CAN configuration options -# # Copyright (c) 2019 Intel Corporation -# # SPDX-License-Identifier: Apache-2.0 -# config CAN_NATIVE_POSIX bool "native_posix CAN Driver" @@ -24,51 +21,51 @@ config CAN_MAX_FILTER Must be at least the size of concurrent reads. ## Interface 1 -config CAN_NATIVE_POSIX_INTERFACE_1_ENABLE +config CAN_NATIVE_POSIX_INTERFACE_1_ENABLED bool "CANBUS interface 1" - default y - depends on CAN_NATIVE_POSIX + default y + depends on CAN_NATIVE_POSIX help This option enables the CANBUS network interface for Native POSIX board. config CAN_NATIVE_POSIX_INTERFACE_1_NAME string "CANBUS interface 1 name on Linux side" - depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLE + depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLED default "vcan0" help This option sets the CANBUS network interface 1 name in host system. config CAN_NATIVE_POSIX_INTERFACE_1_SOCKETCAN_NAME string "Network device name" - depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLE + depends on CAN_NATIVE_POSIX_INTERFACE_1_ENABLED default "SOCKET_CAN_1" help Name of the network device driver for SocketCAN. ## Interface 2 -config CAN_NATIVE_POSIX_INTERFACE_2_ENABLE +config CAN_NATIVE_POSIX_INTERFACE_2_ENABLED bool "CANBUS interface 2" - default y - depends on CAN_NATIVE_POSIX + default n + depends on CAN_NATIVE_POSIX help This option enables the CANBUS network interface for Native POSIX board. -if CAN_NATIVE_POSIX_INTERFACE_2_ENABLE +if CAN_NATIVE_POSIX_INTERFACE_2_ENABLED config CAN_NATIVE_POSIX_INTERFACE_2_NAME string "CANBUS interface 2 name on Linux side" - depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLED default "vcan1" help - This option sets the CANBUS network interface 1 name in host system. + This option sets the CANBUS network interface 2 name in host system. config CAN_NATIVE_POSIX_INTERFACE_2_SOCKETCAN_NAME string "Network device name" - depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLE + depends on CAN_NATIVE_POSIX_INTERFACE_2_ENABLED default "SOCKET_CAN_2" help Name of the network device driver for SocketCAN. - -endif # CAN_NATIVE_POSIX_INTERFACE_2_ENABLE -endif # CAN_NATIVE_POSIX \ No newline at end of file +endif #CAN_NATIVE_POSIX_INTERFACE_2_ENABLED + +endif #CAN_NATIVE_POSIX diff --git a/drivers/can/can_native_posix.c b/drivers/can/can_native_posix.c index 2b12f328d098c..398abf8580d79 100644 --- a/drivers/can/can_native_posix.c +++ b/drivers/can/can_native_posix.c @@ -35,32 +35,27 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); #include #include "can_native_posix_priv.h" +#include "socket_can_context.h" #define NET_BUF_TIMEOUT K_MSEC(100) -struct canbus_np_context { - const struct device *can_dev; - struct k_msgq *msgq; - struct net_if *iface; - const char *if_name; - - int dev_fd; - struct can_frame frame; -}; - -static int read_data(struct canbus_np_context *ctx, int fd) +static int read_data(struct socket_can_context *ctx, int fd) { struct net_pkt *pkt; int count; - count = canbus_np_read_data(fd, (void *)(&ctx->frame), - sizeof(ctx->frame)); + struct can_frame frame; + + count = canbus_np_read_data(fd, (void *)(&frame), sizeof(frame)); + if (count <= 0) { return 0; } struct zcan_frame zframe; - can_copy_frame_to_zframe(&ctx->frame, &zframe); + + can_copy_frame_to_zframe(&frame, &zframe); + pkt = net_pkt_rx_alloc_with_buffer(ctx->iface, sizeof(zframe), AF_CAN, 0, NET_BUF_TIMEOUT); if (!pkt) { @@ -79,7 +74,7 @@ static int read_data(struct canbus_np_context *ctx, int fd) return 0; } -static void canbus_np_rx(struct canbus_np_context *ctx) +static void canbus_np_rx(struct socket_can_context *ctx) { LOG_DBG("Starting ZCAN RX thread"); @@ -98,7 +93,7 @@ static int canbus_np_send(const struct device *dev, const struct zcan_frame *msg, k_timeout_t timeout, can_tx_callback_t callback_isr, void *callback_arg) { - struct canbus_np_context *ctx = dev->data; + struct socket_can_context *ctx = dev->data; int ret = -ENODEV; ARG_UNUSED(timeout); @@ -161,15 +156,15 @@ static const struct can_driver_api can_api_funcs = { .register_state_change_isr = canbus_np_register_state_change_isr }; -#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLED K_KERNEL_STACK_DEFINE(canbus_rx_stack1, CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); static struct k_thread rx_thread_data1; -static struct canbus_np_context canbus_context_data1; +static struct socket_can_context canbus_context_data1; static int canbus_np1_init(const struct device *dev) { - struct canbus_np_context *ctx = dev->data; + struct socket_can_context *ctx = dev->data; ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_NAME; @@ -181,7 +176,7 @@ static int canbus_np1_init(const struct device *dev) k_thread_create(&rx_thread_data1, canbus_rx_stack1, K_THREAD_STACK_SIZEOF(canbus_rx_stack1), (k_thread_entry_t)canbus_np_rx, ctx, NULL, NULL, - K_PRIO_COOP(14), 0, K_NO_WAIT); + K_PRIO_PREEMPT(14), 0, K_NO_WAIT); } return 0; @@ -191,17 +186,17 @@ DEVICE_DT_INST_DEFINE(0, &canbus_np1_init, NULL, (void *)&canbus_context_data1, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &can_api_funcs); -#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE */ +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLED */ -#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLED K_KERNEL_STACK_DEFINE(canbus_rx_stack2, CONFIG_ARCH_POSIX_RECOMMENDED_STACK_SIZE); static struct k_thread rx_thread_data2; -static struct canbus_np_context canbus_context_data2; +static struct socket_can_context canbus_context_data2; static int canbus_np2_init(const struct device *dev) { - struct canbus_np_context *ctx = dev->data; + struct socket_can_context *ctx = dev->data; ctx->if_name = CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_NAME; @@ -213,7 +208,7 @@ static int canbus_np2_init(const struct device *dev) k_thread_create(&rx_thread_data2, canbus_rx_stack2, K_THREAD_STACK_SIZEOF(canbus_rx_stack2), (k_thread_entry_t)canbus_np_rx, ctx, NULL, NULL, - K_PRIO_COOP(14), 0, K_NO_WAIT); + K_PRIO_PREEMPT(14), 0, K_NO_WAIT); } return 0; @@ -223,61 +218,20 @@ DEVICE_DT_INST_DEFINE(1, &canbus_np2_init, NULL, (void *)&canbus_context_data2, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &can_api_funcs); -#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE */ +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLED */ -#if defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE) || \ - defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE) +#if defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLED) || \ + defined(CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLED) #if defined(CONFIG_NET_SOCKETS_CAN) -#define SEND_TIMEOUT K_MSEC(100) -#define BUF_ALLOC_TIMEOUT K_MSEC(50) +#include "socket_can_generic.h" -static void socket_can_iface_init(struct net_if *iface) -{ - const struct device *dev = net_if_get_device(iface); - struct canbus_np_context *socket_context = dev->data; - - socket_context->iface = iface; - - LOG_DBG("Init CAN interface %p dev %p", iface, dev); -} - -static void tx_irq_callback(uint32_t error_flags, void *arg) -{ - if (error_flags) { - LOG_DBG("Callback! error-code: %d", error_flags); - } -} - -/* This is called by net_if.c when packet is about to be sent */ -static int socket_can_send(const struct device *dev, struct net_pkt *pkt) -{ - struct canbus_np_context *socket_context = dev->data; - int ret; - - if (net_pkt_family(pkt) != AF_CAN) { - return -EPFNOSUPPORT; - } - - ret = can_send(socket_context->can_dev, - (struct zcan_frame *)pkt->frags->data, SEND_TIMEOUT, - tx_irq_callback, NULL); - if (ret) { - LOG_DBG("Cannot send socket CAN msg (%d)", ret); - } - - /* If something went wrong, then we need to return negative value to - * net_if.c:net_if_tx() so that the net_pkt will get released. - */ - return -ret; -} - -static int socket_can_setsockopt(const struct device *dev, void *obj, int level, +static int socket_can_np_setsockopt(const struct device *dev, void *obj, int level, int optname, const void *optval, socklen_t optlen) { - struct canbus_np_context *socket_context = dev->data; + struct socket_can_context *socket_context = dev->data; struct can_filter filter; if (level != SOL_CAN_RAW && optname != CAN_RAW_FILTER) { @@ -305,26 +259,24 @@ static int socket_can_setsockopt(const struct device *dev, void *obj, int level, &filter, sizeof(filter)); } -static void socket_can_close(const struct device *dev, int filter_id) -{ - struct canbus_np_context *socket_context = dev->data; - - can_detach(socket_context->can_dev, filter_id); -} - -static struct canbus_api socket_can_api = { +static struct canbus_api socket_can_np_api = { .iface_api.init = socket_can_iface_init, .send = socket_can_send, .close = socket_can_close, - .setsockopt = socket_can_setsockopt, + .setsockopt = socket_can_np_setsockopt, }; -#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE -// static struct socket_can_context socket_can_context_1; +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLED + static int socket_can_init_1(const struct device *dev) { + /* To avoid warning, use socket_can_api defined in socket_can_generic.h. + * For native posix, use socket_can_np_api instead. + */ + (void)socket_can_api; + const struct device *can_dev = DEVICE_DT_INST_GET(0); - struct canbus_np_context *socket_context = dev->data; + struct socket_can_context *socket_context = dev->data; LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", dev, dev->name, can_dev, can_dev->name); @@ -338,15 +290,21 @@ NET_DEVICE_INIT_INSTANCE(socket_can_native_posix_1, CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_SOCKETCAN_NAME, 0, socket_can_init_1, NULL, &canbus_context_data1, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_np_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); -#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLE */ +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1_ENABLED */ + +#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLED -#ifdef CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE static int socket_can_init_2(const struct device *dev) { + /* To avoid warning, use socket_can_api defined in socket_can_generic.h. + * For native posix, use socket_can_np_api instead. + */ + (void)socket_can_api; + const struct device *can_dev = DEVICE_DT_INST_GET(1); - struct canbus_np_context *socket_context = dev->data; + struct socket_can_context *socket_context = dev->data; LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", dev, dev->name, can_dev, can_dev->name); @@ -360,10 +318,10 @@ NET_DEVICE_INIT_INSTANCE(socket_can_native_posix_2, CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_SOCKETCAN_NAME, 1, socket_can_init_2, NULL, &canbus_context_data2, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_np_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); -#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLE */ +#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_2_ENABLED */ #endif /* CONFIG_NET_SOCKETS_CAN */ -#endif /* CONFIG_CAN_NATIVE_POSIX_INTERFACE_1 */ +#endif /* CAN_NATIVE_POSIX_INTERFACE_1_ENABLED || CAN_NATIVE_POSIX_INTERFACE_2_ENABLED */ diff --git a/drivers/can/socket_can_context.h b/drivers/can/socket_can_context.h new file mode 100644 index 0000000000000..7388e3fc81fdc --- /dev/null +++ b/drivers/can/socket_can_context.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019 Intel Corporation. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +/* CANBUS related functions that are generic in all the drivers. */ + +#include +#include + +#ifndef ZEPHYR_DRIVERS_CAN_SOCKET_CAN_CONTEXT_H_ +#define ZEPHYR_DRIVERS_CAN_SOCKET_CAN_CONTEXT_H_ + +struct socket_can_context { + const struct device *can_dev; + struct net_if *iface; + + /* for can on native posix */ + const char *if_name; + int dev_fd; + + /* for can on embedded board */ + struct k_msgq *msgq; + + /* TODO: remove the thread and push data to net directly from rx isr */ + k_tid_t rx_tid; + struct k_thread rx_thread_data; +}; + +#endif /* ZEPHYR_DRIVERS_CAN_SOCKET_CAN_CONTEXT_H_ */ diff --git a/drivers/can/socket_can_generic.h b/drivers/can/socket_can_generic.h index d6afbc0d4c97a..dce1b5199e999 100644 --- a/drivers/can/socket_can_generic.h +++ b/drivers/can/socket_can_generic.h @@ -13,6 +13,8 @@ #ifndef ZEPHYR_DRIVERS_CAN_SOCKET_CAN_GENERIC_H_ #define ZEPHYR_DRIVERS_CAN_SOCKET_CAN_GENERIC_H_ +#include "socket_can_context.h" + #define SOCKET_CAN_NAME_0 "SOCKET_CAN_0" #define SOCKET_CAN_NAME_1 "SOCKET_CAN_1" #define SOCKET_CAN_NAME_2 "SOCKET_CAN_2" @@ -25,16 +27,6 @@ CAN_DEFINE_MSGQ(socket_can_msgq, 5); K_KERNEL_STACK_DEFINE(rx_thread_stack, RX_THREAD_STACK_SIZE); -struct socket_can_context { - const struct device *can_dev; - struct net_if *iface; - struct k_msgq *msgq; - - /* TODO: remove the thread and push data to net directly from rx isr */ - k_tid_t rx_tid; - struct k_thread rx_thread_data; -}; - static inline void socket_can_iface_init(struct net_if *iface) { const struct device *dev = net_if_get_device(iface);

%|ZT=}a0w@bUckhJqFp%f&c$ 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 + }; + +PINs Configuration +------------------ + +The TLSR9518A SoC has five GPIO controllers (PORT_A to PORT_E), but only two are +currently enabled (PORT_B for LEDs control and PORT_C for buttons) in the board DTS file: + +- LED0 (blue): PB4, LED1 (green): PB5, LED2 (white): PB6, LED3 (red): PB7 +- Key Matrix SW0: PC2_PC3, SW1: PC2_PC1, SW2: PC0_PC3, SW3: PC0_PC1 + +Peripheral's pins on the SoC are mapped to the following GPIO pins in the +``boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts`` file: + +- UART0 RX: PB2, TX: PB3 +- UART1 RX: PC6, TX: PC7 + +Serial Port +----------- + +The TLSR9518A SoC has 2 UARTs. The Zephyr console output is assigned +to UART0 in the ``boards/riscv/tlsr9518adk80d/tlsr9518adk80d_defconfig`` file. +The default settings are 115200 8N1. + +Programming and debugging +************************* + +Building +======== + +You can build applications in the usual way. Here is an example for +the "hello_world" application. + +.. code-block:: console + + # From the root of the zephyr repository + west build -b tlsr9518adk80d samples/hello_world + +To use `Telink RISC-V Linux Toolchain`_, ``ZEPHYR_TOOLCHAIN_VARIANT`` and ``CROSS_COMPILE`` variables need to be set. + +.. code-block:: console + + # Set Zephyr toolchain variant to cross-compile + export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile + # Specify the Telink RISC-V Toolchain location + export CROSS_COMPILE=~/toolchains/nds32le-elf-mculib-v5f/bin/riscv32-elf- + # From the root of the zephyr repository + west build -b tlsr9518adk80d samples/hello_world + +`Telink RISC-V Linux Toolchain`_ is available on the `Burning and Debugging Tools for TLSR9 Series in Linux`_ page. + +Open a serial terminal with the following settings: + +- Speed: 115200 +- Data: 8 bits +- Parity: None +- Stop bits: 1 + +Flash the board, reset and observe the following messages on the selected +serial port: + +.. code-block:: console + + *** Booting Zephyr OS version 2.5.0 *** + Hello World! tlsr9518adk80d + + +Flashing +======== + +In order to flash the TLSR9518ADK80D board check the following resources: + +- `Burning and Debugging Tools for all Series`_ +- `Burning and Debugging Tools for TLSR9 Series`_ +- `Burning and Debugging Tools for TLSR9 Series in Linux`_ + +Debugging +========= + +Supporting UART debug and OpenOCD+GDB. + +References +********** + +.. target-notes:: + +.. _Telink TLSR9 series chipset: http://wiki.telink-semi.cn/wiki/chip-series/TLSR9-Series/ +.. _Telink B91 Generic Starter Kit Hardware Guide: http://wiki.telink-semi.cn/wiki/Hardware/B91_Generic_Starter_Kit_Hardware_Guide/ +.. _Telink RISC-V Linux Toolchain: http://wiki.telink-semi.cn/tools_and_sdk/Tools/IDE/telink_riscv_linux_toolchain.zip +.. _Burning and Debugging Tools for all Series: http://wiki.telink-semi.cn/wiki/IDE-and-Tools/Burning-and-Debugging-Tools-for-all-Series/ +.. _Burning and Debugging Tools for TLSR9 Series: http://wiki.telink-semi.cn/wiki/IDE-and-Tools/Burning-and-Debugging-Tools-for-TLSR9-Series/ +.. _Burning and Debugging Tools for TLSR9 Series in Linux: http://wiki.telink-semi.cn/wiki/IDE-and-Tools/BDT_for_TLSR9_Series_in_Linux/ diff --git a/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts new file mode 100644 index 0000000000000..82bee5e59e0db --- /dev/null +++ b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include + +/ { + model = "telink,b91"; + compatible = "telink,tlsr9518adk80d"; + + aliases { + led0 = &led_blue; + led1 = &led_green; + sw0 = &key_1; + }; + + leds { + compatible = "gpio-leds"; + + led_blue: led_0 { + gpios = <&gpiob 4 GPIO_ACTIVE_HIGH>; + label = "LED Blue"; + }; + + led_green: led_1 { + gpios = <&gpiob 5 GPIO_ACTIVE_HIGH>; + label = "LED Green"; + }; + + led_white: led_2 { + gpios = <&gpiob 6 GPIO_ACTIVE_HIGH>; + label = "LED White"; + }; + + led_red: led_3 { + gpios = <&gpiob 7 GPIO_ACTIVE_HIGH>; + label = "LED Red"; + }; + }; + + keys { + compatible = "gpio-keys"; + key_1: button_1 { + label = "User KEY1"; + gpios = <&gpioc 2 GPIO_PULL_DOWN>; + }; + }; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,sram = &ram_dlm; + zephyr,flash = &flash; + zephyr,flash-controller = &flash_mspi; + }; +}; + +&cpu0 { + clock-frequency = <48000000>; +}; + +&ram_ilm { + reg = <0x00000000 0x00020000>; +}; + +&ram_dlm { + reg = <0x00080000 0x00020000>; +}; + +&flash { + reg = <0x20000000 0x100000>; +}; + +&gpiob { + status = "okay"; +}; + +&gpioc { + interrupts = <25 1>; + status = "okay"; +}; + +&pinmux { + status = "okay"; + pad-mul-sel = <1>; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_tx_pb2 &uart0_rx_pb3>; +}; + +&flash_mspi { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x8000>; + }; + slot0_partition: partition@8000 { + label = "image-0"; + reg = <0x00008000 0x1a000>; + }; + slot1_partition: partition@22000 { + label = "image-1"; + reg = <0x00022000 0x1a000>; + }; + scratch_partition: partition@3c000 { + label = "image-scratch"; + reg = <0x0003c000 0x2000>; + }; + storage_partition: partition@f0000 { + label = "storage"; + reg = <0x000f0000 0x00010000>; + }; + }; +}; diff --git a/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.yaml b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.yaml new file mode 100644 index 0000000000000..e661002a9ef40 --- /dev/null +++ b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.yaml @@ -0,0 +1,11 @@ +identifier: tlsr9518adk80d +name: Telink TLSR9518ADK80D +type: mcu +arch: riscv32 +toolchain: + - cross-compile + - zephyr +ram: 128 +flash: 1024 +supported: + - gpio diff --git a/boards/riscv/tlsr9518adk80d/tlsr9518adk80d_defconfig b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d_defconfig new file mode 100644 index 0000000000000..0ed61f5764367 --- /dev/null +++ b/boards/riscv/tlsr9518adk80d/tlsr9518adk80d_defconfig @@ -0,0 +1,17 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_RISCV_TELINK_B91=y +CONFIG_SOC_RISCV_TELINK_B91=y +CONFIG_BOARD_TLSR9518ADK80D=y +CONFIG_PLIC=y +CONFIG_RISCV_MACHINE_TIMER=y +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_PINMUX=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# HW DSP options +CONFIG_TELINK_B91_HWDSP=n From 215cdc7a3c537a7a8c8099d1ef17775bb06201b1 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:44:22 +0300 Subject: [PATCH 06/50] drivers: gpio: introduce new Telink B91 GPIO driver GPIO driver basic support for new Telink B91 platform. Signed-off-by: Yuriy Vynnychek --- CODEOWNERS | 1 + drivers/gpio/CMakeLists.txt | 1 + drivers/gpio/Kconfig | 2 + drivers/gpio/Kconfig.b91 | 10 + drivers/gpio/gpio_b91.c | 568 ++++++++++++++++++ .../boards/tlsr9518adk80d.overlay | 13 + 6 files changed, 595 insertions(+) create mode 100644 drivers/gpio/Kconfig.b91 create mode 100644 drivers/gpio/gpio_b91.c create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/tlsr9518adk80d.overlay diff --git a/CODEOWNERS b/CODEOWNERS index 9de40dae95d14..3bd5c3a4343bd 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -221,6 +221,7 @@ /drivers/flash/ @nashif @nvlsianpu /drivers/flash/*nrf* @nvlsianpu /drivers/gpio/ @mnkp +/drivers/gpio/*b91* @yurvyn /drivers/gpio/*lmp90xxx* @henrikbrixandersen /drivers/gpio/*stm32* @erwango /drivers/gpio/*eos_s3* @wtatarski @kowalewskijan @kgugala diff --git a/drivers/gpio/CMakeLists.txt b/drivers/gpio/CMakeLists.txt index 97ab401878ace..9b57e095fdbd0 100644 --- a/drivers/gpio/CMakeLists.txt +++ b/drivers/gpio/CMakeLists.txt @@ -2,6 +2,7 @@ zephyr_library() +zephyr_library_sources_ifdef(CONFIG_GPIO_TELINK_B91 gpio_b91.c) zephyr_library_sources_ifdef(CONFIG_GPIO_CC13XX_CC26XX gpio_cc13xx_cc26xx.c) zephyr_library_sources_ifdef(CONFIG_GPIO_CC32XX gpio_cc32xx.c) zephyr_library_sources_ifdef(CONFIG_GPIO_CMSDK_AHB gpio_cmsdk_ahb.c) diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 309027fc7ed23..77712ece0ead8 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -21,6 +21,8 @@ config GPIO_SHELL help Enable GPIO Shell for testing. +source "drivers/gpio/Kconfig.b91" + source "drivers/gpio/Kconfig.dw" source "drivers/gpio/Kconfig.pca95xx" diff --git a/drivers/gpio/Kconfig.b91 b/drivers/gpio/Kconfig.b91 new file mode 100644 index 0000000000000..f6c26077ca054 --- /dev/null +++ b/drivers/gpio/Kconfig.b91 @@ -0,0 +1,10 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +# Telink B91 GPIO configuration options + +config GPIO_TELINK_B91 + bool "Telink B91 GPIO driver" + depends on SOC_RISCV_TELINK_B91 + help + Enable the B91 GPIO driver. diff --git a/drivers/gpio/gpio_b91.c b/drivers/gpio/gpio_b91.c new file mode 100644 index 0000000000000..6e7d11d0ac9b3 --- /dev/null +++ b/drivers/gpio/gpio_b91.c @@ -0,0 +1,568 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "analog.h" + +#include +#include +#include "gpio_utils.h" + + +/* Driver dts compatibility: telink,b91_gpio */ +#define DT_DRV_COMPAT telink_b91_gpio + +/* Get GPIO instance */ +#define GET_GPIO(dev) ((volatile struct gpio_b91_t *) \ + ((const struct gpio_b91_config *)dev->config)->gpio_base) + +/* Get GPIO configuration */ +#define GET_CFG(dev) ((const struct gpio_b91_config *)dev->config) + +/* Get GPIO IRQ number defined in dts */ +#define GET_IRQ_NUM(dev) (((const struct gpio_b91_config *)dev->config)->irq_num) + +/* Get GPIO IRQ priority defined in dts */ +#define GET_IRQ_PRIORITY(dev) (((const struct gpio_b91_config *)dev->config)->irq_priority) + +/* Get GPIO port number: port A - 0, port B - 1, ..., port F - 5 */ +#define GET_PORT_NUM(gpio) ((uint8_t)(((uint32_t)gpio - DT_REG_ADDR(DT_NODELABEL(gpioa))) / \ + DT_REG_SIZE(DT_NODELABEL(gpioa)))) + +/* Check that gpio is port C */ +#define IS_PORT_C(gpio) ((uint32_t)gpio == DT_REG_ADDR(DT_NODELABEL(gpioc))) + +/* Check that gpio is port D */ +#define IS_PORT_D(gpio) ((uint32_t)gpio == DT_REG_ADDR(DT_NODELABEL(gpiod))) + +/* Check that 'inst' has only 1 interrupt selected in dts */ +#define IS_INST_IRQ_EN(inst) (DT_NUM_IRQS(DT_DRV_INST(inst)) == 1) + +/* Max pin number per port (pin 0..7) */ +#define PIN_NUM_MAX ((uint8_t)7u) + +/* IRQ Enable registers */ +#define reg_irq_risc0_en(i) REG_ADDR8(0x140338 + i) +#define reg_irq_risc1_en(i) REG_ADDR8(0x140340 + i) + +/* Pull-up/down resistors */ +#define GPIO_PIN_UP_DOWN_FLOAT ((uint8_t)0u) +#define GPIO_PIN_PULLDOWN_100K ((uint8_t)2u) +#define GPIO_PIN_PULLUP_10K ((uint8_t)3u) + +/* GPIO interrupt types */ +#define INTR_RISING_EDGE ((uint8_t)0u) +#define INTR_FALLING_EDGE ((uint8_t)1u) +#define INTR_HIGH_LEVEL ((uint8_t)2u) +#define INTR_LOW_LEVEL ((uint8_t)3u) + +/* Supported IRQ numbers */ +#define IRQ_GPIO ((uint8_t)25u) +#define IRQ_GPIO2_RISC0 ((uint8_t)26u) +#define IRQ_GPIO2_RISC1 ((uint8_t)27u) + + +/* B91 GPIO registers structure */ +struct gpio_b91_t { + uint8_t input; /* Input: read GPI input */ + uint8_t ie; /* IE: input enable, high active. 1: enable, 0: disable */ + uint8_t oen; /* OEN: output enable, low active. 0: enable, 1: disable */ + uint8_t output; /* Output: configure GPIO output */ + uint8_t polarity; /* Polarity: interrupt polarity: rising, falling */ + uint8_t ds; /* DS: drive strength. 1: maximum (default), 0: minimal */ + uint8_t actas_gpio; /* Act as GPIO: enable (1) or disable (0) GPIO function */ + uint8_t irq_en; /* Act as GPIO: enable (1) or disable (0) GPIO function */ +}; + +/* GPIO driver configuration structure */ +struct gpio_b91_config { + struct gpio_driver_config common; + uint32_t gpio_base; + uint8_t irq_num; + uint8_t irq_priority; + void (*pirq_connect)(void); +}; + +/* GPIO driver data structure */ +struct gpio_b91_data { + struct gpio_driver_data common; /* driver data */ + sys_slist_t callbacks; /* list of callbacks */ +}; + + +/* Set IRQ Enable bit based on IRQ number */ +static inline void gpiob_b91_irq_en_set(const struct device *dev, gpio_pin_t pin) +{ + uint8_t irq = GET_IRQ_NUM(dev); + + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + if (irq == IRQ_GPIO) { + BM_SET(gpio->irq_en, BIT(pin)); + } else if (irq == IRQ_GPIO2_RISC0) { + BM_SET(reg_irq_risc0_en(GET_PORT_NUM(gpio)), BIT(pin)); + } else if (irq == IRQ_GPIO2_RISC1) { + BM_SET(reg_irq_risc1_en(GET_PORT_NUM(gpio)), BIT(pin)); + } else { + __ASSERT(false, "Not supported GPIO IRQ number."); + } +} + +/* Clear IRQ Enable bit based on IRQ number */ +static inline void gpiob_b91_irq_en_clr(const struct device *dev, gpio_pin_t pin) +{ + uint8_t irq = GET_IRQ_NUM(dev); + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + if (irq == IRQ_GPIO) { + BM_CLR(gpio->irq_en, BIT(pin)); + } else if (irq == IRQ_GPIO2_RISC0) { + BM_CLR(reg_irq_risc0_en(GET_PORT_NUM(gpio)), BIT(pin)); + } else if (irq == IRQ_GPIO2_RISC1) { + BM_CLR(reg_irq_risc1_en(GET_PORT_NUM(gpio)), BIT(pin)); + } +} + +/* Get IRQ Enable register value */ +static inline uint8_t gpio_b91_irq_en_get(const struct device *dev) +{ + uint8_t status = 0; + uint8_t irq = GET_IRQ_NUM(dev); + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + if (irq == IRQ_GPIO) { + status = gpio->irq_en; + } else if (irq == IRQ_GPIO2_RISC0) { + status = reg_irq_risc0_en(GET_PORT_NUM(gpio)); + } else if (irq == IRQ_GPIO2_RISC1) { + status = reg_irq_risc1_en(GET_PORT_NUM(gpio)); + } + + return status; +} + +/* Clear IRQ Status bit */ +static inline void gpio_b91_irq_status_clr(uint8_t irq) +{ + gpio_irq_status_e status = 0; + + if (irq == IRQ_GPIO) { + status = FLD_GPIO_IRQ_CLR; + } else if (irq == IRQ_GPIO2_RISC0) { + status = FLD_GPIO_IRQ_GPIO2RISC0_CLR; + } else if (irq == IRQ_GPIO2_RISC1) { + status = FLD_GPIO_IRQ_GPIO2RISC1_CLR; + } + + reg_gpio_irq_clr = status; +} + +/* Set pin's irq type */ +void gpio_b91_irq_set(const struct device *dev, gpio_pin_t pin, + uint8_t trigger_type) +{ + uint8_t irq_lvl = 0; + uint8_t irq_mask = 0; + uint8_t irq_num = GET_IRQ_NUM(dev); + uint8_t irq_prioriy = GET_IRQ_PRIORITY(dev); + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + /* Get level and mask bsed on IRQ number */ + if (irq_num == IRQ_GPIO) { + irq_lvl = FLD_GPIO_IRQ_LVL_GPIO; + irq_mask = FLD_GPIO_IRQ_MASK_GPIO; + } else if (irq_num == IRQ_GPIO2_RISC0) { + irq_lvl = FLD_GPIO_IRQ_LVL_GPIO2RISC0; + irq_mask = FLD_GPIO_IRQ_MASK_GPIO2RISC0; + } else if (irq_num == IRQ_GPIO2_RISC1) { + irq_lvl = FLD_GPIO_IRQ_LVL_GPIO2RISC1; + irq_mask = FLD_GPIO_IRQ_MASK_GPIO2RISC1; + } + + /* Set polarity and level */ + switch (trigger_type) { + case INTR_RISING_EDGE: + BM_CLR(gpio->polarity, BIT(pin)); + BM_CLR(reg_gpio_irq_risc_mask, irq_lvl); + break; + + case INTR_FALLING_EDGE: + BM_SET(gpio->polarity, BIT(pin)); + BM_CLR(reg_gpio_irq_risc_mask, irq_lvl); + break; + + case INTR_HIGH_LEVEL: + BM_CLR(gpio->polarity, BIT(pin)); + BM_SET(reg_gpio_irq_risc_mask, irq_lvl); + break; + + case INTR_LOW_LEVEL: + BM_SET(gpio->polarity, BIT(pin)); + BM_SET(reg_gpio_irq_risc_mask, irq_lvl); + break; + } + + if (irq_num == IRQ_GPIO) { + reg_gpio_irq_ctrl |= FLD_GPIO_CORE_INTERRUPT_EN; + } + gpio_b91_irq_status_clr(irq_num); + BM_SET(reg_gpio_irq_risc_mask, irq_mask); + + /* Enable peripheral interrupt */ + gpiob_b91_irq_en_set(dev, pin); + + /* Enable PLIC interrupt */ + riscv_plic_irq_enable(irq_num); + riscv_plic_set_priority(irq_num, irq_prioriy); +} + +/* Set pin's pull-up/down resistor */ +static void gpio_b91_up_down_res_set(volatile struct gpio_b91_t *gpio, + gpio_pin_t pin, + uint8_t up_down_res) +{ + uint8_t val; + uint8_t mask; + uint8_t analog_reg; + + pin = BIT(pin); + val = up_down_res & 0x03; + analog_reg = 0x0e + (GET_PORT_NUM(gpio) << 1) + ((pin & 0xf0) ? 1 : 0); + + if (pin & 0x11) { + val = val << 0; + mask = 0xfc; + } else if (pin & 0x22) { + val = val << 2; + mask = 0xf3; + } else if (pin & 0x44) { + val = val << 4; + mask = 0xcf; + } else if (pin & 0x88) { + val = val << 6; + mask = 0x3f; + } else { + return; + } + + analog_write_reg8(analog_reg, (analog_read_reg8(analog_reg) & mask) | val); +} + +/* Config Pin pull-up / pull-down resistors */ +static void gpio_b91_config_up_down_res(volatile struct gpio_b91_t *gpio, + gpio_pin_t pin, + gpio_flags_t flags) +{ + if ((flags & GPIO_PULL_UP) != 0) { + gpio_b91_up_down_res_set(gpio, pin, GPIO_PIN_PULLUP_10K); + } else if ((flags & GPIO_PULL_DOWN) != 0) { + gpio_b91_up_down_res_set(gpio, pin, GPIO_PIN_PULLDOWN_100K); + } else { + gpio_b91_up_down_res_set(gpio, pin, GPIO_PIN_UP_DOWN_FLOAT); + } +} + +/* Config Pin In/Out direction */ +static void gpio_b91_config_in_out(volatile struct gpio_b91_t *gpio, + gpio_pin_t pin, + gpio_flags_t flags) +{ + uint8_t ie_addr = 0; + + /* Port C and D Input Enable registers are located in another place: analog */ + if (IS_PORT_C(gpio)) { + ie_addr = areg_gpio_pc_ie; + } else if (IS_PORT_D(gpio)) { + ie_addr = areg_gpio_pd_ie; + } + + /* Enable/disable output */ + WRITE_BIT(gpio->oen, pin, ~flags & GPIO_OUTPUT); + + /* Enable/disable input */ + if (ie_addr != 0) { + /* Port C and D are located in analog space */ + if (flags & GPIO_INPUT) { + analog_write_reg8(ie_addr, analog_read_reg8(ie_addr) | BIT(pin)); + } else { + analog_write_reg8(ie_addr, analog_read_reg8(ie_addr) & (~BIT(pin))); + } + } else { + /* Input Enable registers of all other ports are located in common GPIO space */ + WRITE_BIT(gpio->ie, pin, flags & GPIO_INPUT); + } +} + +/* GPIO driver initialization */ +static int gpio_b91_init(const struct device *dev) +{ + const struct gpio_b91_config *cfg = GET_CFG(dev); + + cfg->pirq_connect(); + + return 0; +} + +/* API implementation: pin_configure */ +static int gpio_b91_pin_configure(const struct device *dev, + gpio_pin_t pin, + gpio_flags_t flags) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + /* Check input parameters: pin number */ + if (pin > PIN_NUM_MAX) { + return -ENOTSUP; + } + + /* Check input parameters: open-source and open-drain */ + if ((flags & GPIO_SINGLE_ENDED) != 0) { + return -ENOTSUP; + } + + /* Check input parameters: simultaneous in/out mode */ + if ((flags & GPIO_OUTPUT) && (flags & GPIO_INPUT)) { + return -ENOTSUP; + } + + /* Strengths not implemented */ + if ((flags & (GPIO_DS_ALT_LOW | GPIO_DS_ALT_HIGH)) != 0) { + return -ENOTSUP; + } + + /* Set GPIO init state if defined to avoid glitches */ + if ((flags & GPIO_OUTPUT_INIT_HIGH) != 0) { + gpio->output |= BIT(pin); + } else if ((flags & GPIO_OUTPUT_INIT_LOW) != 0) { + gpio->output &= ~BIT(pin); + } + + /* GPIO function enable */ + WRITE_BIT(gpio->actas_gpio, BIT(pin), 1); + + /* Set GPIO pull-up / pull-down resistors */ + gpio_b91_config_up_down_res(gpio, pin, flags); + + /* Enable/disable input/output */ + gpio_b91_config_in_out(gpio, pin, flags); + + return 0; +} + +/* API implementation: port_get_raw */ +static int gpio_b91_port_get_raw(const struct device *dev, + gpio_port_value_t *value) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + *value = gpio->input; + + return 0; +} + +/* API implementation: port_set_masked_raw */ +static int gpio_b91_port_set_masked_raw(const struct device *dev, + gpio_port_pins_t mask, + gpio_port_value_t value) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + gpio->output = (gpio->output & ~mask) | (value & mask); + + return 0; +} + +/* API implementation: port_set_bits_raw */ +static int gpio_b91_port_set_bits_raw(const struct device *dev, + gpio_port_pins_t mask) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + gpio->output |= mask; + + return 0; +} + +/* API implementation: port_clear_bits_raw */ +static int gpio_b91_port_clear_bits_raw(const struct device *dev, + gpio_port_pins_t mask) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + gpio->output &= ~mask; + + return 0; +} + +/* API implementation: port_toggle_bits */ +static int gpio_b91_port_toggle_bits(const struct device *dev, + gpio_port_pins_t mask) +{ + volatile struct gpio_b91_t *gpio = GET_GPIO(dev); + + gpio->output ^= mask; + + return 0; +} + +/* API implementation: interrupts handler */ +#if IS_INST_IRQ_EN(0) || IS_INST_IRQ_EN(1) || IS_INST_IRQ_EN(2) || \ + IS_INST_IRQ_EN(3) || IS_INST_IRQ_EN(4) +static void gpio_b91_irq_handler(const struct device *dev) +{ + struct gpio_b91_data *data = dev->data; + uint8_t irq = GET_IRQ_NUM(dev); + uint8_t status = gpio_b91_irq_en_get(dev); + + gpio_b91_irq_status_clr(irq); + gpio_fire_callbacks(&data->callbacks, dev, status); +} +#endif + +/* API implementation: pin_interrupt_configure */ +static int gpio_b91_pin_interrupt_configure(const struct device *dev, + gpio_pin_t pin, + enum gpio_int_mode mode, + enum gpio_int_trig trig) +{ + int ret_status = 0; + + switch (mode) { + case GPIO_INT_MODE_DISABLED: /* GPIO interrupt disable */ + gpiob_b91_irq_en_clr(dev, pin); + break; + + case GPIO_INT_MODE_LEVEL: + if (trig == GPIO_INT_TRIG_HIGH) { /* GPIO interrupt High level */ + gpio_b91_irq_set(dev, pin, INTR_HIGH_LEVEL); + } else if (trig == GPIO_INT_TRIG_LOW) { /* GPIO interrupt Low level */ + gpio_b91_irq_set(dev, pin, INTR_LOW_LEVEL); + } else { + ret_status = -ENOTSUP; + } + break; + + case GPIO_INT_MODE_EDGE: + if (trig == GPIO_INT_TRIG_HIGH) { /* GPIO interrupt Rising edge */ + gpio_b91_irq_set(dev, pin, INTR_RISING_EDGE); + } else if (trig == GPIO_INT_TRIG_LOW) { /* GPIO interrupt Falling edge */ + gpio_b91_irq_set(dev, pin, INTR_FALLING_EDGE); + } else { + ret_status = -ENOTSUP; + } + break; + + default: + ret_status = -ENOTSUP; + break; + } + + return ret_status; +} + +/* API implementation: manage_callback */ +static int gpio_b91_manage_callback(const struct device *dev, + struct gpio_callback *callback, + bool set) +{ + struct gpio_b91_data *data = dev->data; + + return gpio_manage_callback(&data->callbacks, callback, set); +} + +/* GPIO driver APIs structure */ +static const struct gpio_driver_api gpio_b91_driver_api = { + .pin_configure = gpio_b91_pin_configure, + .port_get_raw = gpio_b91_port_get_raw, + .port_set_masked_raw = gpio_b91_port_set_masked_raw, + .port_set_bits_raw = gpio_b91_port_set_bits_raw, + .port_clear_bits_raw = gpio_b91_port_clear_bits_raw, + .port_toggle_bits = gpio_b91_port_toggle_bits, + .pin_interrupt_configure = gpio_b91_pin_interrupt_configure, + .manage_callback = gpio_b91_manage_callback +}; + +/* If instance 0 is present and has interrupt enabled, connect IRQ */ +#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) > 0 +static void gpio_b91_irq_connect_0(void) +{ + #if IS_INST_IRQ_EN(0) + IRQ_CONNECT(DT_INST_IRQN(0), DT_INST_IRQ(0, priority), + gpio_b91_irq_handler, + DEVICE_DT_INST_GET(0), 0); + #endif +} +#endif + +/* If instance 1 is present and has interrupt enabled, connect IRQ */ +#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) > 1 +static void gpio_b91_irq_connect_1(void) +{ + #if IS_INST_IRQ_EN(1) + IRQ_CONNECT(DT_INST_IRQN(1), DT_INST_IRQ(1, priority), + gpio_b91_irq_handler, + DEVICE_DT_INST_GET(1), 0); + #endif +} +#endif + +/* If instance 2 is present and has interrupt enabled, connect IRQ */ +#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) > 2 +static void gpio_b91_irq_connect_2(void) +{ + #if IS_INST_IRQ_EN(2) + IRQ_CONNECT(DT_INST_IRQN(2), DT_INST_IRQ(2, priority), + gpio_b91_irq_handler, + DEVICE_DT_INST_GET(2), 0); + #endif +} +#endif + +/* If instance 3 is present and has interrupt enabled, connect IRQ */ +#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) > 3 +static void gpio_b91_irq_connect_3(void) +{ + #if IS_INST_IRQ_EN(3) + IRQ_CONNECT(DT_INST_IRQN(3), DT_INST_IRQ(3, priority), + gpio_b91_irq_handler, + DEVICE_DT_INST_GET(3), 0); + #endif +} +#endif + +/* If instance 4 is present and has interrupt enabled, connect IRQ */ +#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) > 4 +static void gpio_b91_irq_connect_4(void) +{ + #if IS_INST_IRQ_EN(4) + IRQ_CONNECT(DT_INST_IRQN(4), DT_INST_IRQ(4, priority), + gpio_b91_irq_handler, + DEVICE_DT_INST_GET(4), 0); + #endif +} +#endif + +/* GPIO driver registration */ +#define GPIO_B91_INIT(n) \ + static const struct gpio_b91_config gpio_b91_config_##n = { \ + .common = { \ + .port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(n) \ + }, \ + .gpio_base = DT_INST_REG_ADDR(n), \ + .irq_num = DT_INST_IRQN(n), \ + .irq_priority = DT_INST_IRQ(n, priority), \ + .pirq_connect = gpio_b91_irq_connect_##n \ + }; \ + static struct gpio_b91_data gpio_b91_data_##n; \ + \ + DEVICE_DT_INST_DEFINE(n, gpio_b91_init, \ + NULL, \ + &gpio_b91_data_##n, \ + &gpio_b91_config_##n, \ + POST_KERNEL, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &gpio_b91_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(GPIO_B91_INIT) diff --git a/tests/drivers/gpio/gpio_basic_api/boards/tlsr9518adk80d.overlay b/tests/drivers/gpio/gpio_basic_api/boards/tlsr9518adk80d.overlay new file mode 100644 index 0000000000000..8a9b8f2394705 --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/tlsr9518adk80d.overlay @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + resources { + compatible = "test,gpio_basic_api"; + out-gpios = <&gpioc 6 0>; /* Port C 6 */ + in-gpios = <&gpioc 7 0>; /* Port C 7 */ + }; +}; From 6c76b416eefb97a34a0167092fb124bd842cfc59 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:45:23 +0300 Subject: [PATCH 07/50] drivers: pinmux: introduce new Telink B91 Pinmux driver Pinmux driver basic support for new Telink B91 platform. Signed-off-by: Yuriy Vynnychek --- CODEOWNERS | 1 + drivers/pinmux/CMakeLists.txt | 1 + drivers/pinmux/Kconfig | 2 + drivers/pinmux/Kconfig.b91 | 9 ++ drivers/pinmux/pinmux_b91.c | 245 ++++++++++++++++++++++++++++++++++ 5 files changed, 258 insertions(+) create mode 100644 drivers/pinmux/Kconfig.b91 create mode 100644 drivers/pinmux/pinmux_b91.c diff --git a/CODEOWNERS b/CODEOWNERS index 3bd5c3a4343bd..c046100925cad 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -267,6 +267,7 @@ /drivers/modem/Kconfig.hl7800 @rerickson1 /drivers/pcie/ @dcpleung @nashif @jhedberg /drivers/peci/ @albertofloyd @franciscomunoz @scottwcpg +/drivers/pinmux/*b91* @yurvyn /drivers/pinmux/*hsdk* @iriszzw /drivers/pinmux/*it8xxx2* @ite /drivers/pm_cpu_ops/ @carlocaione diff --git a/drivers/pinmux/CMakeLists.txt b/drivers/pinmux/CMakeLists.txt index 55fd58d73cb0e..7961fca8f4299 100644 --- a/drivers/pinmux/CMakeLists.txt +++ b/drivers/pinmux/CMakeLists.txt @@ -1,6 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # Board initialization +zephyr_sources_ifdef(CONFIG_PINMUX_TELINK_B91 pinmux_b91.c) zephyr_sources_ifdef(CONFIG_PINMUX_CC13XX_CC26XX pinmux_cc13xx_cc26xx.c) zephyr_sources_ifdef(CONFIG_PINMUX_ESP32 pinmux_esp32.c) zephyr_sources_ifdef(CONFIG_PINMUX_HSDK pinmux_hsdk.c) diff --git a/drivers/pinmux/Kconfig b/drivers/pinmux/Kconfig index 1572fd92b24ba..668e9fbc8f152 100644 --- a/drivers/pinmux/Kconfig +++ b/drivers/pinmux/Kconfig @@ -24,6 +24,8 @@ config PINMUX_INIT_PRIORITY rule for particular boards. Don't change this value unless you know what you are doing. +source "drivers/pinmux/Kconfig.b91" + source "drivers/pinmux/Kconfig.beetle" source "drivers/pinmux/Kconfig.cc13xx_cc26xx" diff --git a/drivers/pinmux/Kconfig.b91 b/drivers/pinmux/Kconfig.b91 new file mode 100644 index 0000000000000..cb257986cae13 --- /dev/null +++ b/drivers/pinmux/Kconfig.b91 @@ -0,0 +1,9 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +config PINMUX_TELINK_B91 + bool "Telink Semiconductor B91 pinmux driver" + depends on SOC_RISCV_TELINK_B91 + default y + help + Enables Telink B91 pinmux driver. diff --git a/drivers/pinmux/pinmux_b91.c b/drivers/pinmux/pinmux_b91.c new file mode 100644 index 0000000000000..70912b32db979 --- /dev/null +++ b/drivers/pinmux/pinmux_b91.c @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define DT_DRV_COMPAT telink_b91_pinmux + +#include "analog.h" +#include + + +/** + * GPIO Function Enable Register + * ADDR PINS + * gpio_en: PORT_A[0-7] + * gpio_en + 1*8: PORT_B[0-7] + * gpio_en + 2*8: PORT_C[0-7] + * gpio_en + 3*8: PORT_D[0-7] + * gpio_en + 4*8: PORT_E[0-7] + * gpio_en + 5*8: PORT_F[0-7] + */ +#define reg_gpio_en(pin) (*(volatile uint8_t *)((uint32_t)DT_INST_REG_ADDR_BY_NAME(0, gpio_en) + \ + ((pin >> 8) * 8))) + +/** + * Function Multiplexer Register + * ADDR PINS + * pin_mux: PORT_A[0-3] + * pin_mux + 1: PORT_A[4-7] + * pin_mux + 2: PORT_B[0-3] + * pin_mux + 3: PORT_B[4-7] + * pin_mux + 4: PORT_C[0-3] + * pin_mux + 5: PORT_C[4-7] + * pin_mux + 6: PORT_D[0-3] + * pin_mux + 7: PORT_D[4-7] + * pin_mux + 0x20: PORT_E[0-3] + * pin_mux + 0x21: PORT_E[4-7] + * pin_mux + 0x26: PORT_F[0-3] + * pin_mux + 0x27: PORT_F[4-7] + */ +#define reg_pin_mux(pin) (*(volatile uint8_t *)((uint32_t)DT_INST_REG_ADDR_BY_NAME(0, pin_mux) + \ + (((pin >> 8) < 4) ? ((pin >> 8) * 2) : 0) + \ + (((pin >> 8) == 4) ? 0x20 : 0) + \ + (((pin >> 8) == 5) ? 0x26 : 0) + \ + ((pin & 0x0f0) ? 1 : 0))) + +/** + * Pull Up resistors enable + * ADDR PINS + * pull_up_en: PORT_A[0-3] + * pull_up_en + 1: PORT_A[4-7] + * pull_up_en + 2: PORT_B[0-3] + * pull_up_en + 3: PORT_B[4-7] + * pull_up_en + 4: PORT_C[0-3] + * pull_up_en + 5: PORT_C[4-7] + * pull_up_en + 6: PORT_D[0-3] + * pull_up_en + 7: PORT_D[4-7] + * pull_up_en + 8: PORT_E[0-3] + * pull_up_en + 9: PORT_E[4-7] + * pull_up_en + 10: PORT_F[0-3] + * pull_up_en + 11: PORT_F[4-7] + */ +#define reg_pull_up_en(pin) ((uint8_t)(DT_INST_REG_ADDR_BY_NAME(0, pull_up_en) + \ + ((pin >> 8) * 2) + \ + ((pin & 0xf0) ? 1 : 0))) + +/* GPIO Pull-Up options */ +#define PINMUX_B91_PULLUP_DISABLE ((uint8_t)0u) +#define PINMUX_B91_PULLUP_10K ((uint8_t)3u) + +/* Get PinMux configuration */ +#define GET_CFG(dev) ((const struct pinmux_b91_config *)dev->config) + + +/* B91 PinMux config structure */ +struct pinmux_b91_config { + uint8_t pad_mul_sel; +}; + + +/* Act as GPIO function disable */ +static inline void pinmux_b91_gpio_function_disable(uint32_t pin) +{ + uint8_t bit = pin & 0xff; + + reg_gpio_en(pin) &= ~bit; +} + +/* Get function value bits start position (offset) */ +static inline int pinmux_b91_get_func_offset(uint32_t pin, uint8_t *offset) +{ + switch ((pin & 0x0fu) != 0u ? pin & 0x0fu : (pin & 0xf0u) >> 4u) { + case BIT(0): + *offset = 0u; + break; + case BIT(1): + *offset = 2u; + break; + case BIT(2): + *offset = 4u; + break; + case BIT(3): + *offset = 6u; + break; + + default: + return -EINVAL; + } + + return 0; +} + +/* Set pin's pull-up/down resistor */ +static void pinmux_b91_set_pull_up(uint32_t pin, uint8_t val) +{ + uint8_t mask = 0; + uint8_t analog_reg = reg_pull_up_en(pin); + + if (pin & 0x11) { + val = val; + mask = 0xfc; + } else if (pin & 0x22) { + val = val << 2; + mask = 0xf3; + } else if (pin & 0x44) { + val = val << 4; + mask = 0xcf; + } else if (pin & 0x88) { + val = val << 6; + mask = 0x3f; + } else { + return; + } + + analog_write_reg8(analog_reg, (analog_read_reg8(analog_reg) & mask) | val); +} + +/* API implementation: init */ +static int pinmux_b91_init(const struct device *dev) +{ + const struct pinmux_b91_config *cfg = GET_CFG(dev); + + reg_gpio_pad_mul_sel |= cfg->pad_mul_sel; + + return 0; +} + +/* API implementation: set */ +static int pinmux_b91_set(const struct device *dev, uint32_t pin, uint32_t func) +{ + ARG_UNUSED(dev); + + uint8_t mask = 0; + uint8_t offset = 0; + int32_t status = 0; + + /* calculate offset and mask for the func value */ + status = pinmux_b91_get_func_offset(pin, &offset); + if (status != 0) { + return status; + } + mask = (uint8_t)~(BIT(offset) | BIT(offset + 1)); + + /* disable GPIO function (can be enabled back by GPIO init using GPIO driver) */ + pinmux_b91_gpio_function_disable(pin); + + /* set func value */ + reg_pin_mux(pin) = (reg_pin_mux(pin) & mask) | (func << offset); + + return status; +} + +/* API implementation: get */ +static int pinmux_b91_get(const struct device *dev, uint32_t pin, uint32_t *func) +{ + ARG_UNUSED(dev); + + uint8_t mask = 0u; + uint8_t offset = 0; + int32_t status = 0; + + /* calculate offset and mask for the func value */ + status = pinmux_b91_get_func_offset(pin, &offset); + if (status != 0) { + return status; + } + mask = (uint8_t)(BIT(offset) | BIT(offset + 1)); + + /* get func value */ + *func = (reg_pin_mux(pin) & mask) >> offset; + + return status; +} + +/* API implementation: pullup */ +static int pinmux_b91_pullup(const struct device *dev, uint32_t pin, uint8_t func) +{ + ARG_UNUSED(dev); + + switch (func) { + case PINMUX_PULLUP_ENABLE: + pinmux_b91_set_pull_up(pin, PINMUX_B91_PULLUP_10K); + break; + + case PINMUX_PULLUP_DISABLE: + pinmux_b91_set_pull_up(pin, PINMUX_B91_PULLUP_DISABLE); + break; + + default: + return -ENOTSUP; + } + + return 0; +} + +/* API implementation: input */ +static int pinmux_b91_input(const struct device *dev, uint32_t pin, uint8_t func) +{ + ARG_UNUSED(dev); + ARG_UNUSED(pin); + ARG_UNUSED(func); + + /* Implemented by GPIO driver */ + + return -ENOTSUP; +} + +/* PinMux driver APIs structure */ +static const struct pinmux_driver_api pinmux_b91_api = { + .set = pinmux_b91_set, + .get = pinmux_b91_get, + .pullup = pinmux_b91_pullup, + .input = pinmux_b91_input, +}; + +static const struct pinmux_b91_config pinmux_b91_cfg = { + .pad_mul_sel = DT_INST_PROP(0, pad_mul_sel) +}; + +/* PinMux driver registration */ +DEVICE_DT_INST_DEFINE(0, pinmux_b91_init, + NULL, NULL, &pinmux_b91_cfg, PRE_KERNEL_1, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &pinmux_b91_api); From 15818a8245c816b43b9df50a28a1e78c9b3d1538 Mon Sep 17 00:00:00 2001 From: Yuriy Vynnychek Date: Fri, 9 Jul 2021 11:46:07 +0300 Subject: [PATCH 08/50] drivers: serial: introduce new Telink B91 Serial driver Serial driver basic support for new Telink B91 platform. Signed-off-by: Yuriy Vynnychek --- CODEOWNERS | 1 + drivers/serial/CMakeLists.txt | 1 + drivers/serial/Kconfig | 2 + drivers/serial/Kconfig.b91 | 12 + drivers/serial/uart_b91.c | 569 ++++++++++++++++++++++++++++++++++ 5 files changed, 585 insertions(+) create mode 100644 drivers/serial/Kconfig.b91 create mode 100644 drivers/serial/uart_b91.c diff --git a/CODEOWNERS b/CODEOWNERS index c046100925cad..51d77e0cb526c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -291,6 +291,7 @@ /drivers/sensor/lsm*/ @avisconti /drivers/sensor/mpr/ @sven-hm /drivers/sensor/st*/ @avisconti +/drivers/serial/*b91* @yurvyn /drivers/serial/uart_altera_jtag_hal.c @nashif /drivers/serial/*ns16550* @dcpleung @nashif @jenmwms @aasthagr /drivers/serial/*nrfx* @Mierunski @anangl diff --git a/drivers/serial/CMakeLists.txt b/drivers/serial/CMakeLists.txt index 03cd54d84ffcd..c56b5c2fa58e4 100644 --- a/drivers/serial/CMakeLists.txt +++ b/drivers/serial/CMakeLists.txt @@ -2,6 +2,7 @@ zephyr_library() zephyr_library_sources_ifdef(CONFIG_UART_ALTERA_JTAG uart_altera_jtag_hal.c) +zephyr_library_sources_ifdef(CONFIG_UART_TELINK_B91 uart_b91.c) zephyr_library_sources_ifdef(CONFIG_UART_IMX uart_imx.c) zephyr_library_sources_ifdef(CONFIG_UART_CC13XX_CC26XX uart_cc13xx_cc26xx.c) zephyr_library_sources_ifdef(CONFIG_UART_CC32XX uart_cc32xx.c) diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 637c55f02b332..999f282dbb561 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -79,6 +79,8 @@ config UART_DRV_CMD comment "Serial Drivers" +source "drivers/serial/Kconfig.b91" + source "drivers/serial/Kconfig.ns16550" source "drivers/serial/Kconfig.mcux" diff --git a/drivers/serial/Kconfig.b91 b/drivers/serial/Kconfig.b91 new file mode 100644 index 0000000000000..298aa2be6fcab --- /dev/null +++ b/drivers/serial/Kconfig.b91 @@ -0,0 +1,12 @@ +# Copyright (c) 2021 Telink Semiconductor +# SPDX-License-Identifier: Apache-2.0 + +# Telink B91 UART configuration options + +config UART_TELINK_B91 + bool "Telink B91 UART driver" + depends on SOC_RISCV_TELINK_B91 + select SERIAL_HAS_DRIVER + select SERIAL_SUPPORT_INTERRUPT + help + This option enables the B91 serial driver. diff --git a/drivers/serial/uart_b91.c b/drivers/serial/uart_b91.c new file mode 100644 index 0000000000000..82b45f53b3ca1 --- /dev/null +++ b/drivers/serial/uart_b91.c @@ -0,0 +1,569 @@ +/* + * Copyright (c) 2021 Telink Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "analog.h" +#include "clock.h" + +#include +#include +#include +#include + + +/* Driver dts compatibility: telink,b91_uart */ +#define DT_DRV_COMPAT telink_b91_uart + +/* Get UART instance */ +#define GET_UART(dev) ((volatile struct uart_b91_t *) \ + ((const struct uart_b91_config *)dev->config)->uart_addr) + +/* Get UART configuration */ +#define GET_CFG(dev) ((const struct uart_b91_config *)dev->config) + +/* Get instance data */ +#define DEV_DATA(dev) ((struct uart_b91_data *const)dev->data) + +/* UART TX buffer count max value */ +#define UART_TX_BUF_CNT ((uint8_t)8u) + +/* Parity type */ +#define UART_PARITY_NONE ((uint8_t)0u) +#define UART_PARITY_EVEN ((uint8_t)1u) +#define UART_PARITY_ODD ((uint8_t)2u) + +/* Stop bits length */ +#define UART_STOP_BIT_1 ((uint8_t)0u) +#define UART_STOP_BIT_1P5 BIT(4) +#define UART_STOP_BIT_2 BIT(5) + + +/* B91 UART registers structure */ +struct uart_b91_t { + uint8_t data_buf[4]; + uint16_t clk_div; + uint8_t ctrl0; + uint8_t ctrl1; + uint8_t ctrl2; + uint8_t ctrl3; + uint16_t rxtimeout; + uint8_t bufcnt; + uint8_t status; + uint8_t txrx_status; + uint8_t state; +}; + +/* B91 UART data structure */ +struct uart_b91_data { + uint8_t tx_byte_index; + uint8_t rx_byte_index; + struct uart_config cfg; +#ifdef CONFIG_UART_INTERRUPT_DRIVEN + uart_irq_callback_user_data_t callback; + void *cb_data; +#endif +}; + +/* B91 UART config structure */ +struct uart_b91_config { + const uint32_t *pinctrl_list; + size_t pinctrl_list_size; + uint32_t uart_addr; + uint32_t baud_rate; + void (*pirq_connect)(void); +}; + +/* rxtimeout register enums */ +enum { + UART_ERR_IRQ_MASK = BIT(15), +}; + +/* ctrl0 register enums */ +enum { + UART_RX_IRQ_MASK = BIT(6), + UART_TX_IRQ_MASK = BIT(7), +}; + +/* ctrl3 register enums */ +enum { + FLD_UART_RX_IRQ_TRIQ_LEV_OFFSET = 0, + FLD_UART_TX_IRQ_TRIQ_LEV_OFFSET = 4, +}; + +/* bufcnt register enums */ +enum { + FLD_UART_RX_BUF_CNT_OFFSET = 0, + FLD_UART_TX_BUF_CNT_OFFSET = 4, +}; + +/* status register enums */ +enum { + UART_IRQ_STATUS = BIT(3), + UART_RX_ERR_STATUS = BIT(7), +}; + + +/* Get tx fifo count */ +static inline uint8_t uart_b91_get_tx_bufcnt(volatile struct uart_b91_t *uart) +{ + return (uart->bufcnt & FLD_UART_TX_BUF_CNT) >> FLD_UART_TX_BUF_CNT_OFFSET; +} + +/* Get rx fifo count */ +static inline uint8_t uart_b91_get_rx_bufcnt(volatile struct uart_b91_t *uart) +{ + return (uart->bufcnt & FLD_UART_RX_BUF_CNT) >> FLD_UART_RX_BUF_CNT_OFFSET; +} + +/* Check for prime */ +static uint8_t uart_b91_is_prime(uint32_t n) +{ + uint32_t i = 5; + + if (n <= 3) { + return 1; + } else if ((n % 2 == 0) || (n % 3 == 0)) { + return 0; + } + + for (i = 5; i * i < n; i += 6) { + if ((n % i == 0) || (n % (i + 2)) == 0) { + return 0; + } + } + + return 1; +} + +/* Calculate the best bit width */ +static void uart_b91_cal_div_and_bwpc(uint32_t baudrate, uint32_t pclk, + uint16_t *divider, uint8_t *bwpc) +{ + uint8_t i = 0, j = 0; + uint32_t primeInt = 0; + uint8_t primeDec = 0; + uint32_t D_intdec[13], D_int[13]; + uint8_t D_dec[13]; + + primeInt = pclk / baudrate; + primeDec = 10 * pclk / baudrate - 10 * primeInt; + + if (uart_b91_is_prime(primeInt)) { + primeInt += 1; + } else if (primeDec > 5) { + primeInt += 1; + if (uart_b91_is_prime(primeInt)) { + primeInt -= 1; + } + } + + for (i = 3; i <= 15; i++) { + D_intdec[i - 3] = (10 * primeInt) / (i + 1); + D_dec[i - 3] = D_intdec[i - 3] - 10 * (D_intdec[i - 3] / 10); + D_int[i - 3] = D_intdec[i - 3] / 10; + } + + /* find the max and min one decimation point */ + uint8_t position_min = 0, position_max = 0; + uint32_t min = 0xffffffff, max = 0x00; + + for (j = 0; j < 13; j++) { + if ((D_dec[j] <= min) && (D_int[j] != 0x01)) { + min = D_dec[j]; + position_min = j; + } + if (D_dec[j] >= max) { + max = D_dec[j]; + position_max = j; + } + } + + if ((D_dec[position_min] < 5) && (D_dec[position_max] >= 5)) { + if (D_dec[position_min] < (10 - D_dec[position_max])) { + *bwpc = position_min + 3; + *divider = D_int[position_min] - 1; + } else { + *bwpc = position_max + 3; + *divider = D_int[position_max]; + } + } else if ((D_dec[position_min] < 5) && (D_dec[position_max] < 5)) { + *bwpc = position_min + 3; + *divider = D_int[position_min] - 1; + } else { + *bwpc = position_max + 3; + *divider = D_int[position_max]; + } +} + +/* Initializes the UART instance */ +static void uart_b91_init(volatile struct uart_b91_t *uart, uint16_t divider, + uint8_t bwpc, uint8_t parity, uint8_t stop_bit) +{ + /* config clock */ + divider = divider | FLD_UART_CLK_DIV_EN; + uart->ctrl0 = bwpc; + uart->clk_div = divider; + + /* config parity */ + if (parity) { + /* enable parity function */ + uart->ctrl1 |= FLD_UART_PARITY_ENABLE; + + if (parity == UART_PARITY_EVEN) { + /* enable even parity */ + uart->ctrl1 &= (~FLD_UART_PARITY_POLARITY); + } else if (parity == UART_PARITY_ODD) { + /* enable odd parity */ + uart->ctrl1 |= FLD_UART_PARITY_POLARITY; + } + } else { + uart->ctrl1 &= (~FLD_UART_PARITY_ENABLE); /* disable parity function */ + } + + /* stop bit config */ + uart->ctrl1 &= (~FLD_UART_STOP_SEL); + uart->ctrl1 |= stop_bit; +} + +/* API implementation: irq handler */ +static void uart_b91_irq_handler(const struct device *dev) +{ +#ifndef CONFIG_UART_INTERRUPT_DRIVEN + ARG_UNUSED(dev); +#else + struct uart_b91_data *data = DEV_DATA(dev); + + if (data->callback != NULL) { + data->callback(dev, data->cb_data); + } +#endif +} + +/* API implementation: configure */ +static int uart_b91_configure(const struct device *dev, + const struct uart_config *cfg) +{ + uint16_t divider; + uint8_t bwpc; + uint8_t parity; + uint8_t stop_bits; + + volatile struct uart_b91_t *uart = GET_UART(dev); + + /* check parity */ + if (cfg->parity == UART_CFG_PARITY_NONE) { + parity = UART_PARITY_NONE; + } else if (cfg->parity == UART_CFG_PARITY_ODD) { + parity = UART_PARITY_ODD; + } else if (cfg->parity == UART_CFG_PARITY_EVEN) { + parity = UART_PARITY_EVEN; + } else { + return -ENOTSUP; + } + + /* check stop bits */ + if (cfg->stop_bits == UART_CFG_STOP_BITS_1) { + stop_bits = UART_STOP_BIT_1; + } else if (cfg->stop_bits == UART_CFG_STOP_BITS_1_5) { + stop_bits = UART_STOP_BIT_1P5; + } else if (cfg->stop_bits == UART_CFG_STOP_BITS_2) { + stop_bits = UART_STOP_BIT_2; + } else { + return -ENOTSUP; + } + + /* check flow control */ + if (cfg->flow_ctrl != UART_CFG_FLOW_CTRL_NONE) { + return -ENOTSUP; + } + + /* UART configure */ + uart_b91_cal_div_and_bwpc(cfg->baudrate, sys_clk.pclk * 1000 * 1000, ÷r, &bwpc); + uart_b91_init(uart, divider, bwpc, parity, stop_bits); + + /* save configuration */ + DEV_DATA(dev)->cfg = *cfg; + + return 0; +} + +/* API implementation: config_get */ +static int uart_b91_config_get(const struct device *dev, + struct uart_config *cfg) +{ + *cfg = DEV_DATA(dev)->cfg; + + return 0; +} + +/* API implementation: driver initialization */ +static int uart_b91_driver_init(const struct device *dev) +{ + uint16_t divider = 0u; + uint8_t bwpc = 0u; + const struct device *pinmux; + volatile struct uart_b91_t *uart = GET_UART(dev); + const struct uart_b91_config *cfg = GET_CFG(dev); + + pinmux = DEVICE_DT_GET(DT_NODELABEL(pinmux)); + if (!device_is_ready(pinmux)) { + return -ENODEV; + } + + for (int i = 0; i < cfg->pinctrl_list_size; i++) { + pinmux_pin_set(pinmux, B91_PINMUX_GET_PIN(cfg->pinctrl_list[i]), + B91_PINMUX_GET_FUNC(cfg->pinctrl_list[i])); + } + + uart_b91_cal_div_and_bwpc(cfg->baud_rate, sys_clk.pclk * 1000 * 1000, ÷r, &bwpc); + uart_b91_init(uart, divider, bwpc, UART_PARITY_NONE, UART_STOP_BIT_1); + +#ifdef CONFIG_UART_INTERRUPT_DRIVEN + cfg->pirq_connect(); +#endif + + return 0; +} + +/* API implementation: poll_out */ +static void uart_b91_poll_out(const struct device *dev, uint8_t c) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + struct uart_b91_data *data = DEV_DATA(dev); + + while (uart_b91_get_tx_bufcnt(uart) >= UART_TX_BUF_CNT) { + }; + + uart->data_buf[data->tx_byte_index] = c; + data->tx_byte_index = (data->tx_byte_index + 1) % ARRAY_SIZE(uart->data_buf); +} + +/* API implementation: poll_in */ +static int uart_b91_poll_in(const struct device *dev, unsigned char *c) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + struct uart_b91_data *data = DEV_DATA(dev); + + if (uart_b91_get_rx_bufcnt(uart) == 0) { + return -1; + } + + *c = uart->data_buf[data->rx_byte_index]; + data->rx_byte_index = (data->rx_byte_index + 1) % ARRAY_SIZE(uart->data_buf); + + return 0; +} + +/* API implementation: err_check */ +static int uart_b91_err_check(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + return ((uart->status & UART_RX_ERR_STATUS) != 0) ? 1 : 0; +} + +#ifdef CONFIG_UART_INTERRUPT_DRIVEN + +/* API implementation: fifo_fill */ +static int uart_b91_fifo_fill(const struct device *dev, + const uint8_t *tx_data, + int size) +{ + int i = 0; + + for (i = 0; i < size; i++) { + uart_b91_poll_out(dev, tx_data[i]); + } + + return i; +} + +/* API implementation: fifo_read */ +static int uart_b91_fifo_read(const struct device *dev, + uint8_t *rx_data, + const int size) +{ + int rx_count; + volatile struct uart_b91_t *uart = GET_UART(dev); + + for (rx_count = 0; rx_count < size; rx_count++) { + if (uart_b91_get_rx_bufcnt(uart) == 0) { + break; + } + + uart_b91_poll_in(dev, &rx_data[rx_count]); + } + + return rx_count; +} + +/* API implementation: irq_tx_enable */ +static void uart_b91_irq_tx_enable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->ctrl3 = (uart->ctrl3 & (~FLD_UART_TX_IRQ_TRIQ_LEV)) | + BIT(FLD_UART_TX_IRQ_TRIQ_LEV_OFFSET); + uart->ctrl0 |= UART_TX_IRQ_MASK; +} + +/* API implementation: irq_tx_disable */ +static void uart_b91_irq_tx_disable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->ctrl0 &= ~UART_TX_IRQ_MASK; +} + +/* API implementation: irq_tx_ready */ +static int uart_b91_irq_tx_ready(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + return (uart_b91_get_tx_bufcnt(uart) < UART_TX_BUF_CNT) ? 1 : 0; +} + +/* API implementation: irq_tx_complete */ +static int uart_b91_irq_tx_complete(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + return (uart_b91_get_tx_bufcnt(uart) == 0) ? 1 : 0; +} + +/* API implementation: irq_rx_enable */ +static void uart_b91_irq_rx_enable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->ctrl3 = (uart->ctrl3 & (~FLD_UART_RX_IRQ_TRIQ_LEV)) | + BIT(FLD_UART_RX_IRQ_TRIQ_LEV_OFFSET); + uart->ctrl0 |= UART_RX_IRQ_MASK; +} + +/* API implementation: irq_rx_disable */ +static void uart_b91_irq_rx_disable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->ctrl0 &= ~UART_RX_IRQ_MASK; +} + +/* API implementation: irq_rx_ready */ +static int uart_b91_irq_rx_ready(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + return (uart_b91_get_rx_bufcnt(uart) > 0) ? 1 : 0; +} + +/* API implementation: irq_err_enable */ +static void uart_b91_irq_err_enable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->rxtimeout |= UART_ERR_IRQ_MASK; +} + +/* API implementation: irq_err_disable*/ +static void uart_b91_irq_err_disable(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + uart->rxtimeout &= ~UART_ERR_IRQ_MASK; +} + +/* API implementation: irq_is_pending */ +static int uart_b91_irq_is_pending(const struct device *dev) +{ + volatile struct uart_b91_t *uart = GET_UART(dev); + + return ((uart->status & UART_IRQ_STATUS) != 0) ? 1 : 0; +} + +/* API implementation: irq_update */ +static int uart_b91_irq_update(const struct device *dev) +{ + ARG_UNUSED(dev); + + /* nothing to be done */ + return 1; +} + +/* API implementation: irq_callback_set */ +static void uart_b91_irq_callback_set(const struct device *dev, + uart_irq_callback_user_data_t cb, + void *cb_data) +{ + struct uart_b91_data *data = DEV_DATA(dev); + + data->callback = cb; + data->cb_data = cb_data; +} + +#endif /* CONFIG_UART_INTERRUPT_DRIVEN */ + +static const struct uart_driver_api uart_b91_driver_api = { + .poll_in = uart_b91_poll_in, + .poll_out = uart_b91_poll_out, + .err_check = uart_b91_err_check, + .configure = uart_b91_configure, + .config_get = uart_b91_config_get, +#ifdef CONFIG_UART_INTERRUPT_DRIVEN + .fifo_fill = uart_b91_fifo_fill, + .fifo_read = uart_b91_fifo_read, + .irq_tx_enable = uart_b91_irq_tx_enable, + .irq_tx_disable = uart_b91_irq_tx_disable, + .irq_tx_ready = uart_b91_irq_tx_ready, + .irq_tx_complete = uart_b91_irq_tx_complete, + .irq_rx_enable = uart_b91_irq_rx_enable, + .irq_rx_disable = uart_b91_irq_rx_disable, + .irq_rx_ready = uart_b91_irq_rx_ready, + .irq_err_enable = uart_b91_irq_err_enable, + .irq_err_disable = uart_b91_irq_err_disable, + .irq_is_pending = uart_b91_irq_is_pending, + .irq_update = uart_b91_irq_update, + .irq_callback_set = uart_b91_irq_callback_set, +#endif +}; + + +#define UART_B91_INIT(n) \ + \ + static void uart_b91_irq_connect_##n(void); \ + \ + static const uint32_t uart_pins_##n[] = \ + B91_PINMUX_DT_INST_GET_ARRAY(n, 0); \ + \ + static const struct uart_b91_config uart_b91_cfg_##n = \ + { \ + .uart_addr = DT_INST_REG_ADDR(n), \ + .baud_rate = DT_INST_PROP(n, current_speed), \ + .pinctrl_list_size = ARRAY_SIZE(uart_pins_##n), \ + .pinctrl_list = uart_pins_##n, \ + .pirq_connect = uart_b91_irq_connect_##n \ + }; \ + \ + static struct uart_b91_data uart_b91_data_##n; \ + \ + DEVICE_DT_INST_DEFINE(n, uart_b91_driver_init, \ + NULL, \ + &uart_b91_data_##n, \ + &uart_b91_cfg_##n, \ + PRE_KERNEL_1, \ + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ + (void *)&uart_b91_driver_api); \ + \ + static void uart_b91_irq_connect_##n(void) \ + { \ + IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \ + uart_b91_irq_handler, \ + DEVICE_DT_INST_GET(n), 0); \ + \ + riscv_plic_irq_enable(DT_INST_IRQN(n)); \ + riscv_plic_set_priority(DT_INST_IRQN(n), DT_INST_IRQ(n, priority)); \ + } + +DT_INST_FOREACH_STATUS_OKAY(UART_B91_INIT) From 17d978803b7e3ddb22b8085cf4bd59e6bf426bc5 Mon Sep 17 00:00:00 2001 From: Alexandre Bourdiol Date: Fri, 2 Jul 2021 10:36:58 +0200 Subject: [PATCH 09/50] soc: arm: stm32wb power: implement HSEM for power management Implementation of hardware semaphore algorithm of STM32 AN5289 to enter and exit low power Signed-off-by: Alexandre Bourdiol --- soc/arm/st_stm32/stm32wb/power.c | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/soc/arm/st_stm32/stm32wb/power.c b/soc/arm/st_stm32/stm32wb/power.c index b9d5086a2928a..6d08ac2104dd5 100644 --- a/soc/arm/st_stm32/stm32wb/power.c +++ b/soc/arm/st_stm32/stm32wb/power.c @@ -14,10 +14,28 @@ #include #include #include +#include "stm32_hsem.h" #include LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); +/* + * @brief Switch the system clock on HSI + * @param none + * @retval none + */ +static void switch_on_hsi(void) +{ + LL_RCC_HSI_Enable(); + while (!LL_RCC_HSI_IsReady()) { + } + + LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI); + LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSI); + while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI) { + } +} + /* Invoke Low Power/System Off specific Tasks */ void pm_power_state_set(struct pm_state_info info) { @@ -26,12 +44,28 @@ void pm_power_state_set(struct pm_state_info info) return; } + /* Implementation of STM32 AN5289 algorithm to enter/exit lowpower */ + z_stm32_hsem_lock(CFG_HW_RCC_SEMID, HSEM_LOCK_WAIT_FOREVER); + if (!LL_HSEM_1StepLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID)) { + if (LL_PWR_IsActiveFlag_C2DS()) { + /* Release ENTRY_STOP_MODE semaphore */ + LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0); + + /* The switch on HSI before entering Stop Mode is required */ + switch_on_hsi(); + } + } else { + /* The switch on HSI before entering Stop Mode is required */ + switch_on_hsi(); + } + switch (info.substate_id) { case 1: /* this corresponds to the STOP0 mode: */ /* ensure HSI is the wake-up system clock */ LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI); /* enter STOP0 mode */ LL_PWR_SetPowerMode(LL_PWR_MODE_STOP0); + z_stm32_hsem_unlock(CFG_HW_RCC_SEMID); LL_LPM_EnableDeepSleep(); /* enter SLEEP mode : WFE or WFI */ k_cpu_idle(); @@ -41,6 +75,7 @@ void pm_power_state_set(struct pm_state_info info) LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI); /* enter STOP1 mode */ LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1); + z_stm32_hsem_unlock(CFG_HW_RCC_SEMID); LL_LPM_EnableDeepSleep(); /* enter SLEEP mode : WFE or WFI */ k_cpu_idle(); @@ -53,11 +88,14 @@ void pm_power_state_set(struct pm_state_info info) #endif /* PWR_CR1_RRSTP */ /* enter STOP2 mode */ LL_PWR_SetPowerMode(LL_PWR_MODE_STOP2); + z_stm32_hsem_unlock(CFG_HW_RCC_SEMID); LL_LPM_EnableDeepSleep(); /* enter SLEEP mode : WFE or WFI */ k_cpu_idle(); break; default: + /* Release RCC semaphore */ + z_stm32_hsem_unlock(CFG_HW_RCC_SEMID); LOG_DBG("Unsupported power substate-id %u", info.substate_id); break; } @@ -66,6 +104,11 @@ void pm_power_state_set(struct pm_state_info info) /* Handle SOC specific activity after Low Power Mode Exit */ void pm_power_state_exit_post_ops(struct pm_state_info info) { + /* Implementation of STM32 AN5289 algorithm to enter/exit lowpower */ + /* Release ENTRY_STOP_MODE semaphore */ + LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0); + z_stm32_hsem_lock(CFG_HW_RCC_SEMID, HSEM_LOCK_WAIT_FOREVER); + if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); } else { @@ -87,6 +130,9 @@ void pm_power_state_exit_post_ops(struct pm_state_info info) stm32_clock_control_init(NULL); } + /* Release RCC semaphore */ + z_stm32_hsem_unlock(CFG_HW_RCC_SEMID); + /* * System is now in active mode. * Reenable interrupts which were disabled From b2ab115893d2bcfd4b2f3276a7dab93b6deef48b Mon Sep 17 00:00:00 2001 From: Julia Hathaway Date: Mon, 19 Jul 2021 14:13:41 -0500 Subject: [PATCH 10/50] frdm_k64f/doc: Add tabs to debug section to improve readability Reformatted "Configuring a Debug Probe" to display only one of the debug probe options at a time to simplify text on screen when following along Signed-off-by: Julia Hathaway --- boards/arm/frdm_k64f/doc/index.rst | 54 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/boards/arm/frdm_k64f/doc/index.rst b/boards/arm/frdm_k64f/doc/index.rst index 18675b4ee1ccc..565956306e277 100644 --- a/boards/arm/frdm_k64f/doc/index.rst +++ b/boards/arm/frdm_k64f/doc/index.rst @@ -223,40 +223,40 @@ Early versions of this board have an outdated version of the OpenSDA bootloader and require an update. Please see the `DAPLink Bootloader Update`_ page for instructions to update from the CMSIS-DAP bootloader to the DAPLink bootloader. -Option 1: :ref:`opensda-daplink-onboard-debug-probe` (Recommended) ------------------------------------------------------------------- +.. tabs:: -Install the :ref:`pyocd-debug-host-tools` and make sure they are in your search -path. + .. group-tab:: OpenSDA DAPLink Onboard (Recommended) -Follow the instructions in :ref:`opensda-daplink-onboard-debug-probe` to program -the `OpenSDA DAPLink FRDM-K64F Firmware`_. + Install the :ref:`pyocd-debug-host-tools` and make sure they are in your search + path. -Option 2: :ref:`opensda-jlink-onboard-debug-probe` --------------------------------------------------- + Follow the instructions in :ref:`opensda-daplink-onboard-debug-probe` to program + the `OpenSDA DAPLink FRDM-K64F Firmware`_. -Install the :ref:`jlink-debug-host-tools` and make sure they are in your search -path. + .. group-tab:: OpenSDA JLink Onboard -The version of J-Link firmware to program to the board depends on the version -of the DAPLink bootloader. Refer to `OpenSDA Serial and Debug Adapter`_ for -more details. On this page, change the pull-down menu for "Choose your board to -start" to FRDM-K64F, and review the section "To update your board with OpenSDA -applications". Note that Segger does provide an OpenSDA J-Link Board-Specific -Firmware for this board, however it is not compatible with the DAPLink -bootloader. After downloading the appropriate J-Link firmware, follow the -instructions in :ref:`opensda-jlink-onboard-debug-probe` to program to the -board. + Install the :ref:`jlink-debug-host-tools` and make sure they are in your search + path. -Add the arguments ``-DBOARD_FLASH_RUNNER=jlink`` and -``-DBOARD_DEBUG_RUNNER=jlink`` when you invoke ``west build`` to override the -default runner from pyOCD to J-Link: + The version of J-Link firmware to program to the board depends on the version + of the DAPLink bootloader. Refer to `OpenSDA Serial and Debug Adapter`_ for + more details. On this page, change the pull-down menu for "Choose your board to + start" to FRDM-K64F, and review the section "To update your board with OpenSDA + applications". Note that Segger does provide an OpenSDA J-Link Board-Specific + Firmware for this board, however it is not compatible with the DAPLink + bootloader. After downloading the appropriate J-Link firmware, follow the + instructions in :ref:`opensda-jlink-onboard-debug-probe` to program to the + board. -.. zephyr-app-commands:: - :zephyr-app: samples/hello_world - :board: frdm_k64f - :gen-args: -DBOARD_FLASH_RUNNER=jlink -DBOARD_DEBUG_RUNNER=jlink - :goals: build + Add the arguments ``-DBOARD_FLASH_RUNNER=jlink`` and + ``-DBOARD_DEBUG_RUNNER=jlink`` when you invoke ``west build`` to override the + default runner from pyOCD to J-Link: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: frdm_k64f + :gen-args: -DBOARD_FLASH_RUNNER=jlink -DBOARD_DEBUG_RUNNER=jlink + :goals: build Configuring a Console ===================== From 4a62213df97d6cdbb09a39cc67052f1ec44fa309 Mon Sep 17 00:00:00 2001 From: Julia Hathaway Date: Mon, 19 Jul 2021 14:13:41 -0500 Subject: [PATCH 11/50] mimxrt685_evk/doc: Add tabs to debug section to improve readability Reformatted "Configuring a Debug Probe" to display only one of the options at a time to improve reading flow, and split paragraph instructions into an easy to follow list with emphasized differences Signed-off-by: Julia Hathaway --- boards/arm/mimxrt685_evk/doc/index.rst | 32 +++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/boards/arm/mimxrt685_evk/doc/index.rst b/boards/arm/mimxrt685_evk/doc/index.rst index 14cab7fc1cafc..e2932da3fa206 100644 --- a/boards/arm/mimxrt685_evk/doc/index.rst +++ b/boards/arm/mimxrt685_evk/doc/index.rst @@ -184,24 +184,28 @@ Configuring a Debug Probe A debug probe is used for both flashing and debugging the board. This board is configured by default to use the LPC-Link2. -:ref:`lpclink2-jlink-onboard-debug-probe` ------------------------------------------ +.. tabs:: -Install the :ref:`jlink-debug-host-tools` and make sure they are in your search -path. Install jumpers JP17, JP18 and JP19, to connect the SWD signals from onboard -debug circuit. These jumpers are installed by default. + .. group-tab:: LPCLink2 JLink Onboard -Follow the instructions in :ref:`lpclink2-jlink-onboard-debug-probe` to program -the J-Link firmware. Please make sure you have the latest firmware for this -board. -:ref:`jlink-external-debug-probe` ------------------------------------------ + 1. Install the :ref:`jlink-debug-host-tools` and make sure they are in your search path. + 2. To connect the SWD signals to onboard debug circuit, install jumpers JP17, JP18 and JP19, + if not already done (these jumpers are installed by default). + 3. Follow the instructions in :ref:`lpclink2-jlink-onboard-debug-probe` to program the + J-Link firmware. Please make sure you have the latest firmware for this board. -Install the :ref:`jlink-debug-host-tools` and make sure they are in your search -path. Remove jumpers JP17, JP18 and JP19, to disconnect the SWD signals from onboard -debug circuit. These jumpers are installed by default. Connect the J-Link probe -to J2 10-pin header. + .. group-tab:: JLink External + + + 1. Install the :ref:`jlink-debug-host-tools` and make sure they are in your search path. + + 2. To disconnect the SWD signals from onboard debug circuit, **remove** jumpers J17, J18, + and J19 (these are installed by default). + + 3. Connect the J-Link probe to J2 10-pin header. + + See :ref:`jlink-external-debug-probe` for more information. Configuring a Console ===================== From 0161c170b9dadb6430efc3216c7d64908666bd7c Mon Sep 17 00:00:00 2001 From: Francois Ramu Date: Tue, 20 Jul 2021 14:36:57 +0200 Subject: [PATCH 12/50] tests: dac: testing dac loopback on stm32f429zi board This adds the dts to PASS the tests/drivers/dac/dac_loopback on the nucleo_f429zi board, when PA0 and PA4 are connected. Signed-off-by: Francois Ramu --- dts/arm/st/f4/stm32f429.dtsi | 13 +++++++++++++ .../dac/dac_loopback/boards/nucleo_f429zi.overlay | 10 ++++++++++ tests/drivers/dac/dac_loopback/src/test_dac.c | 3 ++- tests/drivers/dac/dac_loopback/testcase.yaml | 2 +- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 tests/drivers/dac/dac_loopback/boards/nucleo_f429zi.overlay diff --git a/dts/arm/st/f4/stm32f429.dtsi b/dts/arm/st/f4/stm32f429.dtsi index 5db367b2a24d7..8a0fa5019106d 100644 --- a/dts/arm/st/f4/stm32f429.dtsi +++ b/dts/arm/st/f4/stm32f429.dtsi @@ -5,3 +5,16 @@ */ #include + +/ { + soc { + dac1: dac@40007400 { + compatible = "st,stm32-dac"; + reg = <0x40007400 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x20000000>; + status = "disabled"; + label = "DAC_1"; + #io-channel-cells = <1>; + }; + }; +}; diff --git a/tests/drivers/dac/dac_loopback/boards/nucleo_f429zi.overlay b/tests/drivers/dac/dac_loopback/boards/nucleo_f429zi.overlay new file mode 100644 index 0000000000000..c0ef8350ed63d --- /dev/null +++ b/tests/drivers/dac/dac_loopback/boards/nucleo_f429zi.overlay @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2021 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&dac1 { + status = "okay"; + pinctrl-0 = <&dac_out1_pa4>; +}; diff --git a/tests/drivers/dac/dac_loopback/src/test_dac.c b/tests/drivers/dac/dac_loopback/src/test_dac.c index 8926dd278b2e9..c635436916917 100644 --- a/tests/drivers/dac/dac_loopback/src/test_dac.c +++ b/tests/drivers/dac/dac_loopback/src/test_dac.c @@ -49,7 +49,8 @@ #define ADC_REFERENCE ADC_REF_INTERNAL #define ADC_ACQUISITION_TIME ADC_ACQ_TIME_DEFAULT -#elif defined(CONFIG_BOARD_NUCLEO_F207ZG) +#elif defined(CONFIG_BOARD_NUCLEO_F207ZG) || \ + defined(CONFIG_BOARD_NUCLEO_F429ZI) /* * DAC output on PA4 * ADC input read from PA0 diff --git a/tests/drivers/dac/dac_loopback/testcase.yaml b/tests/drivers/dac/dac_loopback/testcase.yaml index 41e9c7413a88a..620f5b2a2b90b 100644 --- a/tests/drivers/dac/dac_loopback/testcase.yaml +++ b/tests/drivers/dac/dac_loopback/testcase.yaml @@ -9,4 +9,4 @@ tests: platform_allow: | frdm_k22f frdm_k64f nucleo_f207zg nucleo_l073rz nucleo_l152re twr_ke18f bl652_dvk bl653_dvk bl654_dvk bl5340_dvk_cpuapp stm32f3_disco stm32l562e_dk - nucleo_l552ze_q + nucleo_l552ze_q nucleo_f429zi From d6e1ddcc25802e04aed184d9b6f224d48d3f7ce1 Mon Sep 17 00:00:00 2001 From: Francois Ramu Date: Tue, 20 Jul 2021 14:38:52 +0200 Subject: [PATCH 13/50] tests: dac: testing dac loopback on stm32f746zg board This adds the config to PASS the tests/drivers/dac/dac_loopback on the nucleo_f746zg board, when PA0 and PA4 are connected. The DTS of the nucleo_f746zg defines the ADC1 ch0 and DAC1 ch1. Signed-off-by: Francois Ramu --- tests/drivers/dac/dac_loopback/src/test_dac.c | 3 ++- tests/drivers/dac/dac_loopback/testcase.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/drivers/dac/dac_loopback/src/test_dac.c b/tests/drivers/dac/dac_loopback/src/test_dac.c index c635436916917..80e741b007f44 100644 --- a/tests/drivers/dac/dac_loopback/src/test_dac.c +++ b/tests/drivers/dac/dac_loopback/src/test_dac.c @@ -50,7 +50,8 @@ #define ADC_ACQUISITION_TIME ADC_ACQ_TIME_DEFAULT #elif defined(CONFIG_BOARD_NUCLEO_F207ZG) || \ - defined(CONFIG_BOARD_NUCLEO_F429ZI) + defined(CONFIG_BOARD_NUCLEO_F429ZI) || \ + defined(CONFIG_BOARD_NUCLEO_F746ZG) /* * DAC output on PA4 * ADC input read from PA0 diff --git a/tests/drivers/dac/dac_loopback/testcase.yaml b/tests/drivers/dac/dac_loopback/testcase.yaml index 620f5b2a2b90b..a68b09f50e298 100644 --- a/tests/drivers/dac/dac_loopback/testcase.yaml +++ b/tests/drivers/dac/dac_loopback/testcase.yaml @@ -9,4 +9,4 @@ tests: platform_allow: | frdm_k22f frdm_k64f nucleo_f207zg nucleo_l073rz nucleo_l152re twr_ke18f bl652_dvk bl653_dvk bl654_dvk bl5340_dvk_cpuapp stm32f3_disco stm32l562e_dk - nucleo_l552ze_q nucleo_f429zi + nucleo_l552ze_q nucleo_f429zi nucleo_f746zg From f87135bbee3de8b168afdeda85e764a46ae12df7 Mon Sep 17 00:00:00 2001 From: Alexander Wachter Date: Tue, 20 Jul 2021 17:21:36 +0200 Subject: [PATCH 14/50] drivers: clock_control: clock_stm32g4: Fix ifdef STM32_LSE_CLOCK the macro STM32_LSE_CLOCK is always defined and therefore systems without lse crystals hang on startup. Used #if instead of #ifdef. Signed-off-by: Alexander Wachter --- drivers/clock_control/clock_stm32g4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clock_control/clock_stm32g4.c b/drivers/clock_control/clock_stm32g4.c index b1cdb32246fad..cf370cf84453c 100644 --- a/drivers/clock_control/clock_stm32g4.c +++ b/drivers/clock_control/clock_stm32g4.c @@ -49,7 +49,7 @@ void config_enable_default_clocks(void) /* Enable the power interface clock */ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); -#ifdef STM32_LSE_CLOCK +#if STM32_LSE_CLOCK /* LSE belongs to the back-up domain, enable access.*/ /* Set the DBP bit in the Power control register 1 (PWR_CR1) */ From 26beb415a56bb28b9db357c226ef4c1f37aba569 Mon Sep 17 00:00:00 2001 From: Rihards Skuja Date: Wed, 21 Jul 2021 10:57:28 +0300 Subject: [PATCH 15/50] Bluetooth: fix C++ linker errors Add missing header guards. Signed-off-by: Rihards Skuja --- include/bluetooth/buf.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/bluetooth/buf.h b/include/bluetooth/buf.h index 2c98fc25a8fb3..f0adfef9f95c0 100644 --- a/include/bluetooth/buf.h +++ b/include/bluetooth/buf.h @@ -23,6 +23,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** Possible types of buffers passed around the Bluetooth stack */ enum bt_buf_type { /** HCI command */ @@ -155,4 +159,8 @@ static inline enum bt_buf_type bt_buf_get_type(struct net_buf *buf) * @} */ +#ifdef __cplusplus +} +#endif + #endif /* ZEPHYR_INCLUDE_BLUETOOTH_BUF_H_ */ From abda02ff0b31539615c7d2d812784b81e41d2d1b Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Wed, 21 Jul 2021 12:15:47 +0200 Subject: [PATCH 16/50] doc: ci: publish: install graphviz Graphviz was missing from the doc publish workflow. Signed-off-by: Gerard Marull-Paretas --- .github/workflows/doc-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/doc-publish.yml b/.github/workflows/doc-publish.yml index b2f6fc5edc57c..b50731889fe02 100644 --- a/.github/workflows/doc-publish.yml +++ b/.github/workflows/doc-publish.yml @@ -56,7 +56,7 @@ jobs: - name: install-pkgs run: | - sudo apt-get install -y ninja-build doxygen + sudo apt-get install -y ninja-build doxygen graphviz - name: cache-pip uses: actions/cache@v1 From 1829dc8875bedc941a75414167a3f857a6e93b00 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 20 Jul 2021 14:25:27 +0200 Subject: [PATCH 17/50] doc: do not use env vars to discover paths ZEPHYR_BASE and ZEPHYR_BUILD directories were passed to Sphinx via environment variables. However, these paths can be easily discovered by the conf.py file itself. As a result, Sphinx is less dependent on CMake to operate. Signed-off-by: Gerard Marull-Paretas --- doc/CMakeLists.txt | 2 -- doc/conf.py | 13 ++++--------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index e7b1c8a91bc65..5f97f337b2d1c 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -45,8 +45,6 @@ find_program(WEST west) # Environment & Paths set(SPHINX_ENV - ZEPHYR_BASE=${ZEPHYR_BASE} - ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR} DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE} DOT_EXECUTABLE=${DOXYGEN_DOT_EXECUTABLE} ) diff --git a/doc/conf.py b/doc/conf.py index 721464aa53ba1..47be5fd1047c6 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -6,18 +6,13 @@ from pathlib import Path import re +from sphinx.cmd.build import get_parser import sphinx_rtd_theme -ZEPHYR_BASE = os.environ.get("ZEPHYR_BASE") -if not ZEPHYR_BASE: - raise ValueError("ZEPHYR_BASE environment variable undefined") -ZEPHYR_BASE = Path(ZEPHYR_BASE) - -ZEPHYR_BUILD = os.environ.get("ZEPHYR_BUILD") -if not ZEPHYR_BUILD: - raise ValueError("ZEPHYR_BUILD environment variable undefined") -ZEPHYR_BUILD = Path(ZEPHYR_BUILD) +args = get_parser().parse_args() +ZEPHYR_BASE = Path(__file__).resolve().parents[1] +ZEPHYR_BUILD = Path(args.outputdir).resolve() # Add the '_extensions' directory to sys.path, to enable finding Sphinx # extensions within. From ac85886070aa746d7419f5bc2c4ba6556df61b0c Mon Sep 17 00:00:00 2001 From: David Palchak Date: Mon, 12 Jul 2021 11:16:21 -0700 Subject: [PATCH 18/50] toolchain: linker: Add kconfig header to link script generation Add auto-generated kconfig header to linker script pre-processing via -imacros flag. This permits link scripts supplied via zephyr_linker_sources() to use CONFIG_* variables. Signed-off-by: David Palchak --- cmake/linker/arcmwdt/target.cmake | 2 ++ cmake/linker/ld/target.cmake | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cmake/linker/arcmwdt/target.cmake b/cmake/linker/arcmwdt/target.cmake index 6b49a0c966eed..1db1f6f307bbc 100644 --- a/cmake/linker/arcmwdt/target.cmake +++ b/cmake/linker/arcmwdt/target.cmake @@ -35,6 +35,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define) OUTPUT ${linker_script_gen} DEPENDS ${LINKER_SCRIPT} + ${AUTOCONF_H} ${extra_dependencies} # NB: 'linker_script_dep' will use a keyword that ends 'DEPENDS' ${linker_script_dep} @@ -45,6 +46,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define) -MD -MF ${linker_script_gen}.dep -MT ${base_name}/${linker_script_gen} -D_LINKER -D_ASMLANGUAGE + -imacros ${AUTOCONF_H} ${current_includes} ${current_defines} ${linker_pass_define} diff --git a/cmake/linker/ld/target.cmake b/cmake/linker/ld/target.cmake index ba790789f195c..571964fcbe934 100644 --- a/cmake/linker/ld/target.cmake +++ b/cmake/linker/ld/target.cmake @@ -54,6 +54,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define) OUTPUT ${linker_script_gen} DEPENDS ${LINKER_SCRIPT} + ${AUTOCONF_H} ${extra_dependencies} # NB: 'linker_script_dep' will use a keyword that ends 'DEPENDS' ${linker_script_dep} @@ -63,6 +64,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define) -MD -MF ${linker_script_gen}.dep -MT ${base_name}/${linker_script_gen} -D_LINKER -D_ASMLANGUAGE + -imacros ${AUTOCONF_H} ${current_includes} ${current_defines} ${linker_pass_define} From 4e3e01305068a72e956c73c99e87823d6be87065 Mon Sep 17 00:00:00 2001 From: Krzysztof Chruscinski Date: Mon, 12 Jul 2021 14:14:00 +0200 Subject: [PATCH 19/50] lib: os: cbprintf: Add compile time switch for assert usage Assert header is including printk header and cbprintf header may be included by printk.h when printk is redirected to logging v2. That creates circular includes which must be prevented by preventing using assertion and including assert header file. Signed-off-by: Krzysztof Chruscinski --- include/sys/cbprintf_internal.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/sys/cbprintf_internal.h b/include/sys/cbprintf_internal.h index d435a69c83c85..1578b069a5821 100644 --- a/include/sys/cbprintf_internal.h +++ b/include/sys/cbprintf_internal.h @@ -13,7 +13,10 @@ #include #include #include + +#ifdef CONFIG_CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT #include +#endif /* * Special alignment cases @@ -336,10 +339,9 @@ do { \ "Xtensa requires aligned package."); \ BUILD_ASSERT((_align_offset % sizeof(int)) == 0, \ "Alignment offset must be multiply of a word."); \ - if (IS_ENABLED(CONFIG_CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT)) { \ - __ASSERT(!((uintptr_t)buf & (CBPRINTF_PACKAGE_ALIGNMENT - 1)), \ - "Buffer must be aligned."); \ - } \ + IF_ENABLED(CONFIG_CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT, \ + (__ASSERT(!((uintptr_t)buf & (CBPRINTF_PACKAGE_ALIGNMENT - 1)), \ + "Buffer must be aligned.");)) \ uint8_t *_pbuf = buf; \ size_t _pmax = (buf != NULL) ? _inlen : INT32_MAX; \ int _pkg_len = 0; \ From 69d2cc473517760c1cea49c4904d520e692305f4 Mon Sep 17 00:00:00 2001 From: Krzysztof Chruscinski Date: Mon, 12 Jul 2021 14:16:22 +0200 Subject: [PATCH 20/50] lib: os: cbprintf: Add dependency to cbprintf Kconfig Prevent CONFIG_CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT when LOG_PRINTK. Prevent use of assert in cbprintf header when printk is redirected to logging. Enabling it would lead to circular header includes and compilation failure. Signed-off-by: Krzysztof Chruscinski --- lib/os/Kconfig.cbprintf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/os/Kconfig.cbprintf b/lib/os/Kconfig.cbprintf index 93b38c253f6bf..f201af13ddcbd 100644 --- a/lib/os/Kconfig.cbprintf +++ b/lib/os/Kconfig.cbprintf @@ -127,6 +127,8 @@ config CBPRINTF_PACKAGE_LONGDOUBLE config CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT bool "Validate alignment of a static package buffer" + # To avoid self referential macro when printk is redirected to logging + depends on !LOG_PRINTK help When enabled, CBPRINTF_STATIC_PACKAGE asserts when buffer is not properly aligned. If macro is widely used then assert may impact From f026b470d8bd7e9923ae236c0acf93c44b99e318 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Fri, 4 Jun 2021 13:09:47 -0400 Subject: [PATCH 21/50] scripts: introduce footprint diffing Very simple script to diff between two ram or rom reports generated by size_report. When you call call the ram_report or rom_report targets you end up with a json file in the build directory that can be used as input for this script. The output shows which symbols insreased and which decreased in size and also tracked added/remove symbols as well. Signed-off-by: Anas Nashif --- scripts/footprint/fpdiff.py | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 scripts/footprint/fpdiff.py diff --git a/scripts/footprint/fpdiff.py b/scripts/footprint/fpdiff.py new file mode 100755 index 0000000000000..3c4172b1d85ef --- /dev/null +++ b/scripts/footprint/fpdiff.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# Copyright (c) 2021 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +# A script to diff between two ram or rom reports generated by +# size_report. When you call call the ram_report or rom_report targets you +# end up with a json file in the build directory that can be used as input +# for this script. + +# The output shows which symbols insreased and which decreased in size and +# also tracked added/remove symbols as well. + +# Example: +# ./scripts/footprint/fpdiff.py ram1.json ram2.json + +from anytree.importer import DictImporter +from anytree import PreOrderIter +from anytree.search import find + +from colorama import Fore +import json +import argparse + +importer = DictImporter() + +def parse_args(): + parser = argparse.ArgumentParser( + description="Compare footprint sizes of two builds.") + parser.add_argument("file1", help="First file") + parser.add_argument("file2", help="Second file") + + return parser.parse_args() + +def main(): + args = parse_args() + + with open(args.file1, "r") as f: + data = json.load(f) + root1 = importer.import_(data['symbols']) + + with open(args.file2, "r") as f: + data = json.load(f) + root2 = importer.import_(data['symbols']) + + for node in PreOrderIter(root1): + # pylint: disable=undefined-loop-variable + n = find(root2, lambda node2: node2.identifier == node.identifier) + if n: + if n.size != node.size: + diff = n.size - node.size + if diff == 0: + continue + if not n.children or not n.parent: + if diff < 0: + print(f"{n.identifier} -> {Fore.GREEN}{diff}{Fore.RESET}") + else: + print(f"{n.identifier} -> {Fore.RED}+{diff}{Fore.RESET}") + + else: + if not node.children: + print(f"{node.identifier} ({Fore.GREEN}-{node.size}{Fore.RESET}) disappeared.") + + for node in PreOrderIter(root2): + n = find(root1, lambda node2: node2.identifier == node.identifier) + if not n: + if not node.children and node.size != 0: + print(f"{node.identifier} ({Fore.RED}+{node.size}{Fore.RESET}) is new.") + + +if __name__ == "__main__": + main() From eaed951e96399c150f7216445a9bce9fc16702b7 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Fri, 4 Jun 2021 13:22:57 -0400 Subject: [PATCH 22/50] size_report: add --quiet argument Add a new argument to allow generating json files without printing the complete diff on the screen. Signed-off-by: Anas Nashif --- scripts/footprint/size_report | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/footprint/size_report b/scripts/footprint/size_report index 884e06ad9e5ef..4f53dac692830 100755 --- a/scripts/footprint/size_report +++ b/scripts/footprint/size_report @@ -711,6 +711,8 @@ def parse_args(): help="Zephyr ELF binary") parser.add_argument("-z", "--zephyrbase", required=True, help="Zephyr base path") + parser.add_argument("-q", "--quiet", action="store_true", + help="Do not output anything on the screen.") parser.add_argument("-o", "--output", required=True, help="Output path") parser.add_argument("-w", "--workspace", default=None, @@ -777,7 +779,8 @@ def main(): print("INFO: Unmapped symbol: {0}".format(sym)) root = generate_any_tree(symbol_dict, symsize, common_path_prefix) - print_any_tree(root, symsize, args.depth) + if not args.quiet: + print_any_tree(root, symsize, args.depth) if args.json: exporter = DictExporter() From 8d34fbad9f73f9d0eb859e228c2f0f9ccd53299b Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Fri, 4 Jun 2021 14:57:55 -0400 Subject: [PATCH 23/50] actions: add footprint diff action This action will run on each PR and will post a comment if footprint of some reference applications has changed, initially as a FYI but later it will be enforced when footprint for example is gone beyond a certain threshold. Signed-off-by: Anas Nashif --- .github/workflows/footprint.yml | 69 +++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/footprint.yml diff --git a/.github/workflows/footprint.yml b/.github/workflows/footprint.yml new file mode 100644 index 0000000000000..ff6e32fe8da25 --- /dev/null +++ b/.github/workflows/footprint.yml @@ -0,0 +1,69 @@ +name: Footprint Delta + +on: pull_request + +jobs: + footprint-cancel: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + footprint-delta: + runs-on: ubuntu-latest + needs: footprint-cancel + container: + image: zephyrprojectrtos/ci:v0.17.1 + options: '--entrypoint /bin/bash' + strategy: + fail-fast: false + env: + ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.12.4 + CLANG_ROOT_DIR: /usr/lib/llvm-12 + ZEPHYR_TOOLCHAIN_VARIANT: zephyr + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + - name: Update PATH for west + run: | + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: west setup + run: | + west init -l . || true + west update + + - name: Detect Changes in Footprint + env: + BASE_REF: ${{ github.base_ref }} + run: | + export ZEPHYR_BASE=${PWD} + git config --global user.email "actions@zephyrproject.org" + git config --global user.name "Github Actions" + git remote -v + git rebase origin/${BASE_REF} + git checkout -b this_pr + west build -b frdm_k64f tests/benchmarks/footprints -t ram_report + cp build/ram.json ram2.json + west build -b frdm_k64f tests/benchmarks/footprints -t rom_report + cp build/rom.json rom2.json + + git checkout origin/${BASE_REF} + west update + west build -p always -b frdm_k64f tests/benchmarks/footprints -t ram_report + west build -b frdm_k64f tests/benchmarks/footprints -t rom_report + cp build/ram.json ram1.json + cp build/rom.json rom1.json + + git checkout this_pr + ./scripts/footprint/fpdiff.py ram1.json ram2.json + ./scripts/footprint/fpdiff.py rom1.json rom2.json From e230e00677eb143eb8f6f60f527c82d6b93f7222 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sun, 6 Jun 2021 17:02:19 -0400 Subject: [PATCH 24/50] size_report: generate multiple reports Generate both ram/rom reports in one call. Signed-off-by: Anas Nashif --- scripts/footprint/size_report | 78 +++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/scripts/footprint/size_report b/scripts/footprint/size_report index 4f53dac692830..db3d0d729c506 100755 --- a/scripts/footprint/size_report +++ b/scripts/footprint/size_report @@ -717,7 +717,7 @@ def parse_args(): help="Output path") parser.add_argument("-w", "--workspace", default=None, help="Workspace path (Usually the same as WEST_TOPDIR)") - parser.add_argument("target", choices=['rom', 'ram']) + parser.add_argument("target", choices=['rom', 'ram', 'all']) parser.add_argument("-d", "--depth", dest="depth", type=int, default=None, help="How deep should we go into the tree", @@ -738,56 +738,64 @@ def main(): init() assert os.path.exists(args.kernel), "{0} does not exist.".format(args.kernel) + if args.target == 'ram': + targets = ['ram'] + elif args.target == 'rom': + targets = ['rom'] + elif args.target == 'all': + targets = ['rom', 'ram'] - elf = ELFFile(open(args.kernel, "rb")) + for t in targets: - assert elf.has_dwarf_info(), "ELF file has no DWARF information" + elf = ELFFile(open(args.kernel, "rb")) - set_global_machine_arch(elf.get_machine_arch()) + assert elf.has_dwarf_info(), "ELF file has no DWARF information" - addr_ranges = get_section_ranges(elf) + set_global_machine_arch(elf.get_machine_arch()) - symbols = get_symbols(elf, addr_ranges) + addr_ranges = get_section_ranges(elf) - for sym in symbols['unassigned'].values(): - print("WARN: Symbol '{0}' is not in RAM or ROM".format(sym['name'])) + symbols = get_symbols(elf, addr_ranges) - symbol_dict = None - if args.target == 'rom': - symbol_dict = symbols['rom'] - symsize = addr_ranges['rom_total_size'] - ranges = addr_ranges['rom'] - elif args.target == 'ram': - symbol_dict = symbols['ram'] - symsize = addr_ranges['ram_total_size'] - ranges = addr_ranges['ram'] + for sym in symbols['unassigned'].values(): + print("WARN: Symbol '{0}' is not in RAM or ROM".format(sym['name'])) - if symbol_dict is not None: - processed = {"mapped_symbols": set(), - "mapped_addr": set(), - "unmapped_symbols": set(symbol_dict.keys())} + symbol_dict = None - do_simple_name_matching(elf, symbol_dict, processed) - mark_address_aliases(symbol_dict, processed) - do_address_range_matching(elf, symbol_dict, processed) - mark_address_aliases(symbol_dict, processed) - common_path_prefix = find_common_path_prefix(symbol_dict) - set_root_path_for_unmapped_symbols(symbol_dict, ranges, processed) + if args.json: + jsonout = args.json + else: + jsonout = os.path.join(args.output, f'{t}.json') - if args.verbose: - for sym in processed['unmapped_symbols']: - print("INFO: Unmapped symbol: {0}".format(sym)) + symbol_dict = symbols[t] + symsize = addr_ranges[f'{t}_total_size'] + ranges = addr_ranges[t] - root = generate_any_tree(symbol_dict, symsize, common_path_prefix) - if not args.quiet: - print_any_tree(root, symsize, args.depth) + if symbol_dict is not None: + processed = {"mapped_symbols": set(), + "mapped_addr": set(), + "unmapped_symbols": set(symbol_dict.keys())} + + do_simple_name_matching(elf, symbol_dict, processed) + mark_address_aliases(symbol_dict, processed) + do_address_range_matching(elf, symbol_dict, processed) + mark_address_aliases(symbol_dict, processed) + common_path_prefix = find_common_path_prefix(symbol_dict) + set_root_path_for_unmapped_symbols(symbol_dict, ranges, processed) + + if args.verbose: + for sym in processed['unmapped_symbols']: + print("INFO: Unmapped symbol: {0}".format(sym)) + + root = generate_any_tree(symbol_dict, symsize, common_path_prefix) + if not args.quiet: + print_any_tree(root, symsize, args.depth) - if args.json: exporter = DictExporter() data = dict() data["symbols"] = exporter.export(root) data["total_size"] = symsize - with open(args.json, "w") as fp: + with open(jsonout, "w") as fp: json.dump(data, fp, indent=4) From 7a2266d5f5d4fd36f264581616f95bf87fae4580 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Mon, 7 Jun 2021 07:59:02 -0400 Subject: [PATCH 25/50] build: reports: publish all reports Publish all reports in json format. Signed-off-by: Anas Nashif --- cmake/reports/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/reports/CMakeLists.txt b/cmake/reports/CMakeLists.txt index 4749e8f744668..7dc3ef2181ff6 100644 --- a/cmake/reports/CMakeLists.txt +++ b/cmake/reports/CMakeLists.txt @@ -2,6 +2,7 @@ set(flag_for_ram_report ram) set(flag_for_rom_report rom) +set(flag_for_footprint all -q) set(report_depth 99) if(DEFINED ZEPHYR_WORKSPACE) @@ -10,7 +11,7 @@ elseif(DEFINED WEST_TOPDIR) set(workspace_arg "--workspace=${WEST_TOPDIR}") endif() -foreach(report ram_report rom_report) +foreach(report ram_report rom_report footprint) add_custom_target( ${report} ${PYTHON_EXECUTABLE} @@ -19,12 +20,12 @@ foreach(report ram_report rom_report) -z ${ZEPHYR_BASE} -o ${CMAKE_BINARY_DIR} ${workspace_arg} - --json ${CMAKE_BINARY_DIR}/${flag_for_${report}}.json -d ${report_depth} ${flag_for_${report}} DEPENDS ${logical_target_for_zephyr_elf} $ USES_TERMINAL + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() From 302ac4995b011571eb8ecd909111c49c7b77bd5f Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sun, 27 Jun 2021 09:57:33 -0400 Subject: [PATCH 26/50] size_report: report total and root size correctly Fix reporting totals. Signed-off-by: Anas Nashif --- scripts/footprint/size_report | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/footprint/size_report b/scripts/footprint/size_report index db3d0d729c506..d767c0afd0455 100755 --- a/scripts/footprint/size_report +++ b/scripts/footprint/size_report @@ -557,7 +557,7 @@ def generate_any_tree(symbol_dict, total_size, path_prefix): """ Generate a symbol tree for output. """ - root = TreeNode('Symbols', "root") + root = TreeNode('Root', "root") node_no_paths = TreeNode('(no paths)', ":", parent=root) if Path(path_prefix) == Path(args.zephyrbase): @@ -656,13 +656,12 @@ def generate_any_tree(symbol_dict, total_size, path_prefix): root.children = children - # Root node doesn't have sum of symbol size. So sum them up. - root.size = sum_node_children_size(root) + root.size = total_size # Need to account for code and data where there are not emitted # symbols associated with them. node_hidden_syms = TreeNode('(hidden)', "(hidden)", parent=root) - node_hidden_syms.size = total_size - root.size + node_hidden_syms.size = root.size - sum_node_children_size(root) return root From dfc259d13cc0eca44555f23aba0ff5a878cc84fa Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sun, 6 Jun 2021 17:03:08 -0400 Subject: [PATCH 27/50] action: footprint tracking Add action and scripts for footprint tracking. Signed-off-by: Anas Nashif --- .github/workflows/footprint-tracking.yml | 64 ++++++++++ CODEOWNERS | 1 + scripts/footprint/plan.txt | 10 ++ scripts/footprint/track.py | 63 ++++++++++ scripts/footprint/upload_data.py | 153 +++++++++++++++++++++++ 5 files changed, 291 insertions(+) create mode 100644 .github/workflows/footprint-tracking.yml create mode 100644 scripts/footprint/plan.txt create mode 100755 scripts/footprint/track.py create mode 100755 scripts/footprint/upload_data.py diff --git a/.github/workflows/footprint-tracking.yml b/.github/workflows/footprint-tracking.yml new file mode 100644 index 0000000000000..499596faad10a --- /dev/null +++ b/.github/workflows/footprint-tracking.yml @@ -0,0 +1,64 @@ +name: Footprint Tracking + +# Run every 12 hours and on tags +on: + schedule: + - cron: '50 1/12 * * *' + push: + paths: + - 'VERSION' + tags: + # only publish v* tags, do not care about zephyr-v* which point to the + # same commit + - 'v*' + +jobs: + footprint-tracking-cancel: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + footprint-tracking: + runs-on: ubuntu-latest + needs: footprint-tracking-cancel + container: + image: zephyrprojectrtos/ci:v0.17.1 + options: '--entrypoint /bin/bash' + strategy: + fail-fast: false + env: + ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.12.4 + CLANG_ROOT_DIR: /usr/lib/llvm-12 + ZEPHYR_TOOLCHAIN_VARIANT: zephyr + steps: + - name: Update PATH for west + run: | + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: west setup + run: | + west init -l . || true + west update + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.FOOTPRINT_AWS_KEY_ID }} + aws-secret-access-key: ${{ secrets.FOOTPRINT_AWS_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Record Footprint + env: + BASE_REF: ${{ github.base_ref }} + run: | + export ZEPHYR_BASE=${PWD} + ./scripts/footprint/track.py -p scripts/footprint/plan.txt + aws s3 sync --quiet footprint_data/ s3://testing.zephyrproject.org/footprint_data/ diff --git a/CODEOWNERS b/CODEOWNERS index 51d77e0cb526c..b020932088b6d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -564,6 +564,7 @@ /scripts/coccicheck @himanshujha199640 @JuliaLawall /scripts/coccinelle/ @himanshujha199640 @JuliaLawall /scripts/coredump/ @dcpleung +/scripts/footprint/ @nashif /scripts/kconfig/ @ulfalizer /scripts/logging/dictionary/ @dcpleung /scripts/pylib/twister/expr_parser.py @nashif diff --git a/scripts/footprint/plan.txt b/scripts/footprint/plan.txt new file mode 100644 index 0000000000000..6125e4e2be26a --- /dev/null +++ b/scripts/footprint/plan.txt @@ -0,0 +1,10 @@ +footprints,default,frdm_k64f,tests/benchmarks/footprints, +footprints,userspace,frdm_k64f,tests/benchmarks/footprints,-DCONF_FILE=prj_userspace.conf +footprints,default,disco_l475_iot1,tests/benchmarks/footprints, +footprints,userspace,disco_l475_iot1,tests/benchmarks/footprints,-DCONF_FILE=prj_userspace.conf +footprints,default,nrf5340dk_nrf5340_cpuapp,tests/benchmarks/footprints, +footprints,default,nrf51dk_nrf51422,tests/benchmarks/footprints, +footprints,default,altera_max10,tests/benchmarks/footprints, +footprints,default,hifive1_revb,tests/benchmarks/footprints, +footprints,default,ehl_crb,tests/benchmarks/footprints, +footprints,userspace,ehl_crb,tests/benchmarks/footprints,-DCONF_FILE=prj_userspace.conf diff --git a/scripts/footprint/track.py b/scripts/footprint/track.py new file mode 100755 index 0000000000000..86e76bbf51767 --- /dev/null +++ b/scripts/footprint/track.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# Copyright (c) 2021 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +import csv +import subprocess +from git import Git +import pathlib +import shutil +import argparse + +def parse_args(): + parser = argparse.ArgumentParser( + description="Generate footprint data based on a predefined plan.") + parser.add_argument("-p", "--plan", help="Path of test plan", required=True) + + return parser.parse_args() + +def main(): + args = parse_args() + g = Git(".") + version = g.describe("--abbrev=12") + pathlib.Path(f'footprint_data/{version}').mkdir(exist_ok=True, parents=True) + + with open(args.plan) as csvfile: + csvreader = csv.reader(csvfile) + for row in csvreader: + name=row[0] + feature=row[1] + board=row[2] + app=row[3] + options=row[4] + + cmd = ['west', + 'build', + '-d', + f'out/{name}/{feature}/{board}', + '-b', + board, + f'{app}', + '-t', + 'footprint'] + + if options != '': + cmd += ['--', f'{options}'] + + print(" ".join(cmd)) + + + try: + subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=120, universal_newlines=True) + print("Copying files...") + pathlib.Path(f'footprint_data/{version}/{name}/{feature}/{board}').mkdir(parents=True, exist_ok=True) + + shutil.copy(f'out/{name}/{feature}/{board}/ram.json', f'footprint_data/{version}/{name}/{feature}/{board}') + shutil.copy(f'out/{name}/{feature}/{board}/rom.json', f'footprint_data/{version}/{name}/{feature}/{board}') + except subprocess.CalledProcessError as exc: + print("Status : FAIL", exc.returncode, exc.output) + + +if __name__ == "__main__": + main() diff --git a/scripts/footprint/upload_data.py b/scripts/footprint/upload_data.py new file mode 100755 index 0000000000000..0084656b1ef89 --- /dev/null +++ b/scripts/footprint/upload_data.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +# Copyright (c) 2021 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +from anytree.importer import DictImporter +from anytree import PreOrderIter +from anytree.search import find +importer = DictImporter() +from datetime import datetime +from dateutil.relativedelta import relativedelta +import os +import json +from git import Repo +from git.exc import BadName + +from influxdb import InfluxDBClient +import glob +import argparse +from tabulate import tabulate + +TODAY = datetime.utcnow() +two_mon_rel = relativedelta(months=4) + +influx_dsn = 'influxdb://localhost:8086/footprint_tracking' + +def create_event(data, board, feature, commit, current_time, typ, application): + footprint_data = [] + client = InfluxDBClient.from_dsn(influx_dsn) + client.create_database('footprint_tracking') + for d in data.keys(): + footprint_data.append({ + "measurement": d, + "tags": { + "board": board, + "commit": commit, + "application": application, + "type": typ, + "feature": feature + }, + "time": current_time, + "fields": { + "value": data[d] + } + }) + + client.write_points(footprint_data, time_precision='s', database='footprint_tracking') + + +def parse_args(): + global args + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + parser.add_argument("-d", "--data", help="Data Directory") + parser.add_argument("-y", "--dryrun", action="store_true", help="Dry run, do not upload to database") + parser.add_argument("-z", "--zephyr-base", help="Zephyr tree") + parser.add_argument("-f", "--file", help="JSON file with footprint data") + args = parser.parse_args() + + +def parse_file(json_file): + + with open(json_file, "r") as fp: + contents = json.load(fp) + root = importer.import_(contents['symbols']) + + zr = find(root, lambda node: node.name == 'ZEPHYR_BASE') + ws = find(root, lambda node: node.name == 'WORKSPACE') + + data = {} + if zr and ws: + trees = [zr, ws] + else: + trees = [root] + + for node in PreOrderIter(root, maxlevel=2): + if node.name not in ['WORKSPACE', 'ZEPHYR_BASE']: + if node.name in ['Root', 'Symbols']: + data['all'] = node.size + else: + data[node.name] = node.size + + for t in trees: + root = t.name + for node in PreOrderIter(t, maxlevel=2): + if node.name == root: + continue + comp = node.name + if comp in ['Root', 'Symbols']: + data['all'] = node.size + else: + data[comp] = node.size + + return data + +def process_files(data_dir, zephyr_base, dry_run): + repo = Repo(zephyr_base) + + for hash in os.listdir(f'{data_dir}'): + if not dry_run: + client = InfluxDBClient.from_dsn(influx_dsn) + result = client.query(f"select * from kernel where commit = '{hash}';") + if result: + print(f"Skipping {hash}...") + continue + print(f"Importing {hash}...") + for file in glob.glob(f"{args.data}/{hash}/**/*json", recursive=True): + file_data = file.split("/") + json_file = os.path.basename(file) + if 'ram' in json_file: + typ = 'ram' + else: + typ = 'rom' + commit = file_data[1] + app = file_data[2] + feature = file_data[3] + board = file_data[4] + + data = parse_file(file) + + try: + gitcommit = repo.commit(f'{commit}') + current_time = gitcommit.committed_datetime + except BadName: + cidx = commit.find('-g') + 2 + gitcommit = repo.commit(f'{commit[cidx:]}') + current_time = gitcommit.committed_datetime + + print(current_time) + + if not dry_run: + create_event(data, board, feature, commit, current_time, typ, app) + +def main(): + parse_args() + + if args.data and args.zephyr_base: + process_files(args.data, args.zephyr_base, args.dryrun) + + if args.file: + data = parse_file(args.file) + items = [] + for component,value in data.items(): + items.append([component,value]) + + table = tabulate(items, headers=['Component', 'Size'], tablefmt='orgtbl') + print(table) + + +if __name__ == "__main__": + main() From 636fbcd0817dc855fb2c16f2edf6499d86500f62 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 15 Dec 2020 18:44:33 +0530 Subject: [PATCH 28/50] Bluetooth: Increase maximum allowed identity range to 64 Increase the maximum allowed identity range to 64. Signed-off-by: Vinayak Kariappa Chettimada --- subsys/bluetooth/host/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subsys/bluetooth/host/Kconfig b/subsys/bluetooth/host/Kconfig index 2bd2248accef6..90cdc8a4f6eef 100644 --- a/subsys/bluetooth/host/Kconfig +++ b/subsys/bluetooth/host/Kconfig @@ -539,7 +539,7 @@ config BT_DEVICE_APPEARANCE config BT_ID_MAX int "Maximum number of local identities" - range 1 10 + range 1 64 default 1 help Maximum number of supported local identity addresses. For most From 4c6174d5112b1bd2e8b1e4ba44700b99f8c3a2d8 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 15 Dec 2020 18:48:33 +0530 Subject: [PATCH 29/50] samples: Bluetooth: Mutiple peripheral identity Added sample to demonstrate use of multiple identity and be able to be connected to multiple times from same central device. Signed-off-by: Vinayak Kariappa Chettimada --- .../peripheral_identity/CMakeLists.txt | 12 + .../bluetooth/peripheral_identity/README.rst | 24 ++ .../bluetooth/peripheral_identity/prj.conf | 13 ++ .../bluetooth/peripheral_identity/sample.yaml | 8 + .../bluetooth/peripheral_identity/src/main.c | 14 ++ .../src/peripheral_identity.c | 218 ++++++++++++++++++ 6 files changed, 289 insertions(+) create mode 100644 samples/bluetooth/peripheral_identity/CMakeLists.txt create mode 100644 samples/bluetooth/peripheral_identity/README.rst create mode 100644 samples/bluetooth/peripheral_identity/prj.conf create mode 100644 samples/bluetooth/peripheral_identity/sample.yaml create mode 100644 samples/bluetooth/peripheral_identity/src/main.c create mode 100644 samples/bluetooth/peripheral_identity/src/peripheral_identity.c diff --git a/samples/bluetooth/peripheral_identity/CMakeLists.txt b/samples/bluetooth/peripheral_identity/CMakeLists.txt new file mode 100644 index 0000000000000..76efd84e42b66 --- /dev/null +++ b/samples/bluetooth/peripheral_identity/CMakeLists.txt @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.13.1) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(peripheral_identity) + +target_sources(app PRIVATE + src/main.c + src/peripheral_identity.c +) + +zephyr_library_include_directories(${ZEPHYR_BASE}/samples/bluetooth) diff --git a/samples/bluetooth/peripheral_identity/README.rst b/samples/bluetooth/peripheral_identity/README.rst new file mode 100644 index 0000000000000..2619e52a89533 --- /dev/null +++ b/samples/bluetooth/peripheral_identity/README.rst @@ -0,0 +1,24 @@ +.. _peripheral_identity: + +Bluetooth: Peripheral Identity +############################## + +Overview +******** + +This sample demonstrates use of multiple identity and the ability to be +connected to from multiple central devices. + +Requirements +************ + +* BlueZ running on the host, or +* A board with BLE support + +Building and Running +******************** + +This sample can be found under :zephyr_file:`samples/bluetooth/peripheral_identity` +in the Zephyr tree. + +See :ref:`bluetooth samples section ` for details. diff --git a/samples/bluetooth/peripheral_identity/prj.conf b/samples/bluetooth/peripheral_identity/prj.conf new file mode 100644 index 0000000000000..8bd97851e3684 --- /dev/null +++ b/samples/bluetooth/peripheral_identity/prj.conf @@ -0,0 +1,13 @@ +CONFIG_BT=y +CONFIG_BT_PERIPHERAL=y +CONFIG_BT_AUTO_PHY_UPDATE=n +CONFIG_BT_PRIVACY=y + +CONFIG_BT_DEVICE_NAME="Zephyr Peripheral" +CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n + +CONFIG_BT_MAX_CONN=62 +CONFIG_BT_ID_MAX=62 + +# CONFIG_BT_SMP=y +# CONFIG_BT_MAX_PAIRED=62 diff --git a/samples/bluetooth/peripheral_identity/sample.yaml b/samples/bluetooth/peripheral_identity/sample.yaml new file mode 100644 index 0000000000000..2ad924c725c88 --- /dev/null +++ b/samples/bluetooth/peripheral_identity/sample.yaml @@ -0,0 +1,8 @@ +sample: + description: TBD + name: TBD +tests: + sample.bluetooth.peripheral_identity: + harness: bluetooth + platform_allow: qemu_cortex_m3 qemu_x86 nrf52840dk_nrf52840 + tags: bluetooth diff --git a/samples/bluetooth/peripheral_identity/src/main.c b/samples/bluetooth/peripheral_identity/src/main.c new file mode 100644 index 0000000000000..9f3216e26f1bc --- /dev/null +++ b/samples/bluetooth/peripheral_identity/src/main.c @@ -0,0 +1,14 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2021 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +int init_peripheral(void); + +void main(void) +{ + (void)init_peripheral(); +} diff --git a/samples/bluetooth/peripheral_identity/src/peripheral_identity.c b/samples/bluetooth/peripheral_identity/src/peripheral_identity.c new file mode 100644 index 0000000000000..163e8df877e7e --- /dev/null +++ b/samples/bluetooth/peripheral_identity/src/peripheral_identity.c @@ -0,0 +1,218 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2021 Nordic Semiconductor ASA + * Copyright (c) 2015-2016 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include +#include + +static struct k_work work_adv_start; +static uint8_t volatile conn_count; +static uint8_t id_current; + +static const struct bt_data ad[] = { + BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), +}; + +static void adv_start(struct k_work *work) +{ + struct bt_le_adv_param adv_param = { + .id = BT_ID_DEFAULT, + .sid = 0, + .secondary_max_skip = 0, + .options = (BT_LE_ADV_OPT_CONNECTABLE | + BT_LE_ADV_OPT_USE_NAME | + BT_LE_ADV_OPT_ONE_TIME), + .interval_min = 0x0020, /* 20 ms */ + .interval_max = 0x0020, /* 20 ms */ + .peer = NULL, + }; + size_t id_count = 0xFF; + int err; + + bt_id_get(NULL, &id_count); + if (id_current == id_count) { + int id; + + id = bt_id_create(NULL, NULL); + if (id < 0) { + printk("Create id failed (%d)\n", id); + } else { + printk("New id: %d\n", id); + } + } + + printk("Using current id: %u\n", id_current); + adv_param.id = id_current; + + err = bt_le_adv_start(&adv_param, ad, ARRAY_SIZE(ad), NULL, 0); + if (err) { + printk("Advertising failed to start (err %d)\n", err); + return; + } + + id_current++; + if (id_current == CONFIG_BT_MAX_CONN) { + id_current = 0; + } + + printk("Advertising successfully started\n"); +} + +static void connected(struct bt_conn *conn, uint8_t err) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + if (err) { + printk("Connection failed (err 0x%02x)\n", err); + return; + } + + conn_count++; + if (conn_count < CONFIG_BT_MAX_CONN) { + k_work_submit(&work_adv_start); + } + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("Connected (%u): %s\n", conn_count, addr); +} + +static void disconnected(struct bt_conn *conn, uint8_t reason) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("Disconnected %s (reason 0x%02x)\n", addr, reason); + + if (conn_count == CONFIG_BT_MAX_CONN) { + k_work_submit(&work_adv_start); + } + conn_count--; +} + +static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("LE conn param req: %s int (0x%04x, 0x%04x) lat %d to %d\n", + addr, param->interval_min, param->interval_max, param->latency, + param->timeout); + + return true; +} + +static void le_param_updated(struct bt_conn *conn, uint16_t interval, + uint16_t latency, uint16_t timeout) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("LE conn param updated: %s int 0x%04x lat %d to %d\n", + addr, interval, latency, timeout); +} + +#if defined(CONFIG_BT_SMP) +static void security_changed(struct bt_conn *conn, bt_security_t level, + enum bt_security_err err) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (!err) { + printk("Security changed: %s level %u\n", addr, level); + } else { + printk("Security failed: %s level %u err %d\n", addr, level, + err); + } +} + +static void auth_cancel(struct bt_conn *conn) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("Pairing cancelled: %s\n", addr); +} + +static struct bt_conn_auth_cb auth_callbacks = { + .cancel = auth_cancel, +}; +#endif /* CONFIG_BT_SMP */ + +static struct bt_conn_cb conn_callbacks = { + .connected = connected, + .disconnected = disconnected, + .le_param_req = le_param_req, + .le_param_updated = le_param_updated, +#if defined(CONFIG_BT_SMP) + .security_changed = security_changed, +#endif /* CONFIG_BT_SMP */ +}; + +int init_peripheral(void) +{ + size_t id_count; + int err; + + err = bt_enable(NULL); + if (err) { + printk("Bluetooth init failed (err %d)\n", err); + return err; + } + + bt_conn_cb_register(&conn_callbacks); + +#if defined(CONFIG_BT_SMP) + bt_conn_auth_cb_register(&auth_callbacks); +#endif /* CONFIG_BT_SMP */ + + printk("Bluetooth initialized\n"); + + k_work_init(&work_adv_start, adv_start); + k_work_submit(&work_adv_start); + + /* wait for connection attempts on all identities */ + do { + k_sleep(K_MSEC(100)); + + id_count = 0xFF; + bt_id_get(NULL, &id_count); + } while (id_count != CONFIG_BT_MAX_CONN); + + /* rotate identities so reconnections are attempted in case of any + * disconnections + */ + while (1) { + k_sleep(K_SECONDS(1)); + + if (conn_count == CONFIG_BT_MAX_CONN) { + break; + } + + printk("Stop advertising...\n"); + err = bt_le_adv_stop(); + if (err) { + printk("Failed to stop advertising (%d)\n", err); + + return err; + } + + k_work_submit(&work_adv_start); + } + + return 0; +} From fd3655352cdd9dedcb649fb0df45750396f503b2 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 15 Dec 2020 18:52:49 +0530 Subject: [PATCH 30/50] samples: Bluetooth: Multiple central connections to peripherals Application demonstrating Bluetooth Low Energy Central role functionality by scanning for other devices and establishing connection to upto 62 peripherals with a strong enough signal. Signed-off-by: Vinayak Kariappa Chettimada --- .../central_multilink/CMakeLists.txt | 12 + .../bluetooth/central_multilink/README.rst | 24 ++ samples/bluetooth/central_multilink/prj.conf | 11 + .../bluetooth/central_multilink/sample.yaml | 7 + .../central_multilink/src/central_multilink.c | 264 ++++++++++++++++++ .../bluetooth/central_multilink/src/main.c | 14 + 6 files changed, 332 insertions(+) create mode 100644 samples/bluetooth/central_multilink/CMakeLists.txt create mode 100644 samples/bluetooth/central_multilink/README.rst create mode 100644 samples/bluetooth/central_multilink/prj.conf create mode 100644 samples/bluetooth/central_multilink/sample.yaml create mode 100644 samples/bluetooth/central_multilink/src/central_multilink.c create mode 100644 samples/bluetooth/central_multilink/src/main.c diff --git a/samples/bluetooth/central_multilink/CMakeLists.txt b/samples/bluetooth/central_multilink/CMakeLists.txt new file mode 100644 index 0000000000000..64be1f2b118ee --- /dev/null +++ b/samples/bluetooth/central_multilink/CMakeLists.txt @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.13.1) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(central_multilink) + +target_sources(app PRIVATE + src/main.c + src/central_multilink.c +) + +zephyr_library_include_directories(${ZEPHYR_BASE}/samples/bluetooth) diff --git a/samples/bluetooth/central_multilink/README.rst b/samples/bluetooth/central_multilink/README.rst new file mode 100644 index 0000000000000..1b31d8404fa63 --- /dev/null +++ b/samples/bluetooth/central_multilink/README.rst @@ -0,0 +1,24 @@ +.. _bluetooth_central_multilink: + +Bluetooth: Central +################## + +Overview +******** + +Application demonstrating BLE Central role functionality by scanning for other +BLE devices and establishing connection to upto 62 peripherals with a strong +enough signal. + +Requirements +************ + +* BlueZ running on the host, or +* A board with BLE support + +Building and Running +******************** +This sample can be found under :zephyr_file:`samples/bluetooth/central_multilink` +in the Zephyr tree. + +See :ref:`bluetooth samples section ` for details. diff --git a/samples/bluetooth/central_multilink/prj.conf b/samples/bluetooth/central_multilink/prj.conf new file mode 100644 index 0000000000000..68f8ca16f220a --- /dev/null +++ b/samples/bluetooth/central_multilink/prj.conf @@ -0,0 +1,11 @@ +CONFIG_BT=y +CONFIG_BT_CENTRAL=y +CONFIG_BT_AUTO_PHY_UPDATE=n +CONFIG_BT_PRIVACY=y + +CONFIG_BT_MAX_CONN=62 + +# CONFIG_BT_GATT_CLIENT=y + +# CONFIG_BT_SMP=y +# CONFIG_BT_MAX_PAIRED=62 diff --git a/samples/bluetooth/central_multilink/sample.yaml b/samples/bluetooth/central_multilink/sample.yaml new file mode 100644 index 0000000000000..46941426f07d4 --- /dev/null +++ b/samples/bluetooth/central_multilink/sample.yaml @@ -0,0 +1,7 @@ +sample: + name: Bluetooth Central Multilink +tests: + sample.bluetooth.central.multilink: + harness: bluetooth + platform_allow: qemu_cortex_m3 qemu_x86 nrf52840dk_nrf52840 + tags: bluetooth diff --git a/samples/bluetooth/central_multilink/src/central_multilink.c b/samples/bluetooth/central_multilink/src/central_multilink.c new file mode 100644 index 0000000000000..c84f9f47d64e1 --- /dev/null +++ b/samples/bluetooth/central_multilink/src/central_multilink.c @@ -0,0 +1,264 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2021 Nordic Semiconductor ASA + * Copyright (c) 2015-2016 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define SCAN_INTERVAL 0x0140 /* 200 ms */ +#define SCAN_WINDOW 0x0030 /* 30 ms */ +#define INIT_INTERVAL 0x0010 /* 10 ms */ +#define INIT_WINDOW 0x0010 /* 10 ms */ +#define CONN_INTERVAL 0x00A0 /* 200 ms */ +#define CONN_LATENCY 0 +#define CONN_TIMEOUT MIN(MAX((CONN_INTERVAL * 125 * \ + MAX(CONFIG_BT_MAX_CONN, 6) / 1000), 10), 3200) + +static void start_scan(void); + +static struct bt_conn *conn_connecting; +static uint8_t volatile conn_count; + +static void device_found(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, + struct net_buf_simple *ad) +{ + struct bt_conn_le_create_param create_param = { + .options = BT_CONN_LE_OPT_NONE, + .interval = INIT_INTERVAL, + .window = INIT_WINDOW, + .interval_coded = 0, + .window_coded = 0, + .timeout = 0, + }; + struct bt_le_conn_param conn_param = { + .interval_min = CONN_INTERVAL, + .interval_max = CONN_INTERVAL, + .latency = CONN_LATENCY, + .timeout = CONN_TIMEOUT, + }; + char addr_str[BT_ADDR_LE_STR_LEN]; + int err; + + if (conn_connecting) { + return; + } + + /* We're only interested in connectable events */ + if (type != BT_GAP_ADV_TYPE_ADV_IND && + type != BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { + return; + } + + bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); + printk("Device found: %s (RSSI %d)\n", addr_str, rssi); + + /* connect only to devices in close proximity */ + if (rssi < -35) { + return; + } + + if (bt_le_scan_stop()) { + return; + } + + err = bt_conn_le_create(addr, &create_param, &conn_param, + &conn_connecting); + if (err) { + printk("Create conn to %s failed (%d)\n", addr_str, err); + start_scan(); + } +} + +static void start_scan(void) +{ + struct bt_le_scan_param scan_param = { + .type = BT_HCI_LE_SCAN_PASSIVE, + .options = BT_LE_SCAN_OPT_NONE, + .interval = SCAN_INTERVAL, + .window = SCAN_WINDOW, + }; + int err; + + err = bt_le_scan_start(&scan_param, device_found); + if (err) { + printk("Scanning failed to start (err %d)\n", err); + return; + } + + printk("Scanning successfully started\n"); +} + +#if defined(CONFIG_BT_GATT_CLIENT) +static void mtu_exchange_cb(struct bt_conn *conn, uint8_t err, + struct bt_gatt_exchange_params *params) +{ + printk("MTU exchange %u %s (%u)\n", bt_conn_index(conn), + err == 0U ? "successful" : "failed", bt_gatt_get_mtu(conn)); +} + +static struct bt_gatt_exchange_params mtu_exchange_params[CONFIG_BT_MAX_CONN]; + +static int mtu_exchange(struct bt_conn *conn) +{ + uint8_t conn_index; + int err; + + conn_index = bt_conn_index(conn); + + printk("MTU (%u): %u\n", conn_index, bt_gatt_get_mtu(conn)); + + mtu_exchange_params[conn_index].func = mtu_exchange_cb; + + err = bt_gatt_exchange_mtu(conn, &mtu_exchange_params[conn_index]); + if (err) { + printk("MTU exchange failed (err %d)", err); + } else { + printk("Exchange pending..."); + } + + return err; +} +#endif /* CONFIG_BT_GATT_CLIENT */ + +static void connected(struct bt_conn *conn, uint8_t reason) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (reason) { + printk("Failed to connect to %s (%u)\n", addr, reason); + + bt_conn_unref(conn_connecting); + conn_connecting = NULL; + + start_scan(); + return; + } + + conn_connecting = NULL; + + conn_count++; + if (conn_count < CONFIG_BT_MAX_CONN) { + start_scan(); + } + + printk("Connected (%u): %s\n", conn_count, addr); + +#if defined(CONFIG_BT_SMP) + int err = bt_conn_set_security(conn, BT_SECURITY_L2); + + if (err) { + printk("Failed to set security (%d).\n", err); + } +#endif + +#if defined(CONFIG_BT_GATT_CLIENT) + mtu_exchange(conn); +#endif +} + +static void disconnected(struct bt_conn *conn, uint8_t reason) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("Disconnected: %s (reason 0x%02x)\n", addr, reason); + + bt_conn_unref(conn); + + if (conn_count == CONFIG_BT_MAX_CONN) { + start_scan(); + } + conn_count--; +} + +static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("LE conn param req: %s int (0x%04x, 0x%04x) lat %d to %d\n", + addr, param->interval_min, param->interval_max, param->latency, + param->timeout); + + return true; +} + +static void le_param_updated(struct bt_conn *conn, uint16_t interval, + uint16_t latency, uint16_t timeout) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + printk("LE conn param updated: %s int 0x%04x lat %d to %d\n", + addr, interval, latency, timeout); +} + +#if defined(CONFIG_BT_SMP) +static void security_changed(struct bt_conn *conn, bt_security_t level, + enum bt_security_err err) +{ + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (!err) { + printk("Security changed: %s level %u\n", addr, level); + } else { + printk("Security failed: %s level %u err %d\n", addr, level, + err); + } +} +#endif + +static struct bt_conn_cb conn_callbacks = { + .connected = connected, + .disconnected = disconnected, + .le_param_req = le_param_req, + .le_param_updated = le_param_updated, +#if defined(CONFIG_BT_SMP) + .security_changed = security_changed, +#endif +}; + +int init_central(void) +{ + int err; + + err = bt_enable(NULL); + if (err) { + printk("Bluetooth init failed (err %d)\n", err); + return err; + } + + printk("Bluetooth initialized\n"); + + bt_conn_cb_register(&conn_callbacks); + + start_scan(); + + while (conn_count < CONFIG_BT_MAX_CONN) { + k_sleep(K_SECONDS(1)); + } + + return 0; +} diff --git a/samples/bluetooth/central_multilink/src/main.c b/samples/bluetooth/central_multilink/src/main.c new file mode 100644 index 0000000000000..0018e8a014740 --- /dev/null +++ b/samples/bluetooth/central_multilink/src/main.c @@ -0,0 +1,14 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2021 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +int init_central(void); + +void main(void) +{ + (void)init_central(); +} From 529bb8d863c5d9b88b0311e79136e50ceadb1273 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 15 Dec 2020 18:52:49 +0530 Subject: [PATCH 31/50] tests: Bluetooth: bsim: Multiple central connections to peripherals Babblesim test of Bluetooth Low Energy Central role functionality by scanning for other devices and establishing connection to upto 62 peripherals with a strong enough signal. Signed-off-by: Vinayak Kariappa Chettimada --- .../bsim_bt/bsim_test_multiple/CMakeLists.txt | 24 ++++ .../bsim_bt/bsim_test_multiple/prj.conf | 16 +++ .../bsim_bt/bsim_test_multiple/src/main.c | 116 ++++++++++++++++++ .../tests_scripts/multiple.sh | 38 ++++++ tests/bluetooth/bsim_bt/compile.sh | 1 + 5 files changed, 195 insertions(+) create mode 100644 tests/bluetooth/bsim_bt/bsim_test_multiple/CMakeLists.txt create mode 100644 tests/bluetooth/bsim_bt/bsim_test_multiple/prj.conf create mode 100644 tests/bluetooth/bsim_bt/bsim_test_multiple/src/main.c create mode 100755 tests/bluetooth/bsim_bt/bsim_test_multiple/tests_scripts/multiple.sh diff --git a/tests/bluetooth/bsim_bt/bsim_test_multiple/CMakeLists.txt b/tests/bluetooth/bsim_bt/bsim_test_multiple/CMakeLists.txt new file mode 100644 index 0000000000000..85f3344b8d32b --- /dev/null +++ b/tests/bluetooth/bsim_bt/bsim_test_multiple/CMakeLists.txt @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.13.1) + +if (NOT DEFINED ENV{BSIM_COMPONENTS_PATH}) + message(FATAL_ERROR "This test requires the BabbleSim simulator. Please set \ + the environment variable BSIM_COMPONENTS_PATH to point to its \ + components folder. More information can be found in \ + https://babblesim.github.io/folder_structure_and_env.html") +endif() + +find_package(Zephyr HINTS $ENV{ZEPHYR_BASE}) +project(bsim_test_multiple) + +target_sources(app PRIVATE + src/main.c + ${ZEPHYR_BASE}/samples/bluetooth/central_multilink/src/central_multilink.c + ${ZEPHYR_BASE}/samples/bluetooth/peripheral_identity/src/peripheral_identity.c +) + +zephyr_include_directories( + $ENV{BSIM_COMPONENTS_PATH}/libUtilv1/src/ + $ENV{BSIM_COMPONENTS_PATH}/libPhyComv1/src/ +) diff --git a/tests/bluetooth/bsim_bt/bsim_test_multiple/prj.conf b/tests/bluetooth/bsim_bt/bsim_test_multiple/prj.conf new file mode 100644 index 0000000000000..2baba549f15c1 --- /dev/null +++ b/tests/bluetooth/bsim_bt/bsim_test_multiple/prj.conf @@ -0,0 +1,16 @@ +CONFIG_BT=y +CONFIG_BT_PERIPHERAL=y +CONFIG_BT_CENTRAL=y +CONFIG_BT_AUTO_PHY_UPDATE=n +CONFIG_BT_PRIVACY=y + +CONFIG_BT_DEVICE_NAME="Multiple" +CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n + +CONFIG_BT_MAX_CONN=62 +CONFIG_BT_ID_MAX=62 + +# CONFIG_BT_GATT_CLIENT=y + +# CONFIG_BT_SMP=y +# CONFIG_BT_MAX_PAIRED=62 diff --git a/tests/bluetooth/bsim_bt/bsim_test_multiple/src/main.c b/tests/bluetooth/bsim_bt/bsim_test_multiple/src/main.c new file mode 100644 index 0000000000000..20b42b494073e --- /dev/null +++ b/tests/bluetooth/bsim_bt/bsim_test_multiple/src/main.c @@ -0,0 +1,116 @@ +/* main.c - Application main entry point */ + +/* + * Copyright (c) 2015-2016 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include +#include + +#include "bs_types.h" +#include "bs_tracing.h" +#include "time_machine.h" +#include "bstests.h" + +int init_central(void); +int init_peripheral(void); + +#define FAIL(...) \ + do { \ + bst_result = Failed; \ + bs_trace_error_time_line(__VA_ARGS__); \ + } while (0) + +#define PASS(...) \ + do { \ + bst_result = Passed; \ + bs_trace_info_time(1, __VA_ARGS__); \ + } while (0) + +extern enum bst_result_t bst_result; + +static void test_central_main(void) +{ + int err; + + err = init_central(); + if (err) { + goto exit; + } + + PASS("Central tests passed\n"); + bs_trace_silent_exit(0); + + return; + +exit: + FAIL("Central tests failed (%d)\n", err); + bs_trace_silent_exit(0); +} + +static void test_peripheral_main(void) +{ + int err; + + err = init_peripheral(); + if (err) { + goto exit; + } + + PASS("Peripheral tests passed\n"); + + return; + +exit: + FAIL("Peripheral tests failed (%d)\n", err); + bs_trace_silent_exit(0); +} + +static void test_multiple_init(void) +{ + bst_ticker_set_next_tick_absolute(20e6); + bst_result = In_progress; +} + +static void test_multiple_tick(bs_time_t HW_device_time) +{ + bst_result = Failed; + bs_trace_error_line("Test multiple finished.\n"); +} + +static const struct bst_test_instance test_def[] = { + { + .test_id = "central", + .test_descr = "Central Multilink", + .test_post_init_f = test_multiple_init, + .test_tick_f = test_multiple_tick, + .test_main_f = test_central_main + }, + { + .test_id = "peripheral", + .test_descr = "Peripheral multiple identity", + .test_post_init_f = test_multiple_init, + .test_tick_f = test_multiple_tick, + .test_main_f = test_peripheral_main + }, + BSTEST_END_MARKER +}; + +struct bst_test_list *test_multiple_install(struct bst_test_list *tests) +{ + return bst_add_tests(tests, test_def); +} + +bst_test_install_t test_installers[] = { + test_multiple_install, + NULL +}; + +void main(void) +{ + bst_main(); +} diff --git a/tests/bluetooth/bsim_bt/bsim_test_multiple/tests_scripts/multiple.sh b/tests/bluetooth/bsim_bt/bsim_test_multiple/tests_scripts/multiple.sh new file mode 100755 index 0000000000000..0cea1fe022e88 --- /dev/null +++ b/tests/bluetooth/bsim_bt/bsim_test_multiple/tests_scripts/multiple.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# Copyright 2018 Oticon A/S +# SPDX-License-Identifier: Apache-2.0 + +# Multiple connection between two devices with multiple peripheral identity +simulation_id="multiple" +verbosity_level=2 +process_ids=""; exit_code=0 + +function Execute(){ + if [ ! -f $1 ]; then + echo -e " \e[91m`pwd`/`basename $1` cannot be found (did you forget to\ + compile it?)\e[39m" + exit 1 + fi + timeout 30 $@ & process_ids="$process_ids $!" +} + +: "${BSIM_OUT_PATH:?BSIM_OUT_PATH must be defined}" + +#Give a default value to BOARD if it does not have one yet: +BOARD="${BOARD:-nrf52_bsim}" + +cd ${BSIM_OUT_PATH}/bin + +Execute ./bs_${BOARD}_tests_bluetooth_bsim_bt_bsim_test_multiple_prj_conf \ + -v=${verbosity_level} -s=${simulation_id} -d=0 -testid=central + +Execute ./bs_${BOARD}_tests_bluetooth_bsim_bt_bsim_test_multiple_prj_conf\ + -v=${verbosity_level} -s=${simulation_id} -d=1 -testid=peripheral + +Execute ./bs_2G4_phy_v1 -v=${verbosity_level} -s=${simulation_id} \ + -D=2 -sim_length=60e6 $@ + +for process_id in $process_ids; do + wait $process_id || let "exit_code=$?" +done +exit $exit_code #the last exit code != 0 diff --git a/tests/bluetooth/bsim_bt/compile.sh b/tests/bluetooth/bsim_bt/compile.sh index 5a5a11fad0cbe..b559e3bc8efa6 100755 --- a/tests/bluetooth/bsim_bt/compile.sh +++ b/tests/bluetooth/bsim_bt/compile.sh @@ -57,6 +57,7 @@ app=tests/bluetooth/bsim_bt/bsim_test_app conf_file=prj_split_privacy.conf \ compile app=tests/bluetooth/bsim_bt/bsim_test_app conf_file=prj_split_low_lat.conf \ compile +app=tests/bluetooth/bsim_bt/bsim_test_multiple compile app=tests/bluetooth/bsim_bt/bsim_test_advx compile app=tests/bluetooth/bsim_bt/bsim_test_iso compile app=tests/bluetooth/bsim_bt/bsim_test_audio compile From ac82fbfad8876fc1010ed7d186dc89b30df78c6a Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Fri, 18 Jun 2021 15:19:46 +0530 Subject: [PATCH 32/50] samples: Bluetooth: Option to have scanning in peripheral Option to have continous scanning simultaneously while advertising and multiple peripheral role is active. Signed-off-by: Vinayak Kariappa Chettimada --- .../src/peripheral_identity.c | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/samples/bluetooth/peripheral_identity/src/peripheral_identity.c b/samples/bluetooth/peripheral_identity/src/peripheral_identity.c index 163e8df877e7e..94898ff53186a 100644 --- a/samples/bluetooth/peripheral_identity/src/peripheral_identity.c +++ b/samples/bluetooth/peripheral_identity/src/peripheral_identity.c @@ -163,6 +163,23 @@ static struct bt_conn_cb conn_callbacks = { #endif /* CONFIG_BT_SMP */ }; +#if defined(CONFIG_BT_OBSERVER) +#define BT_LE_SCAN_PASSIVE_ALLOW_DUPILCATES \ + BT_LE_SCAN_PARAM(BT_LE_SCAN_TYPE_PASSIVE, \ + BT_LE_SCAN_OPT_NONE, \ + BT_GAP_SCAN_FAST_INTERVAL, \ + BT_GAP_SCAN_FAST_INTERVAL) + +static void device_found(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, + struct net_buf_simple *ad) +{ + char addr_str[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); + printk("Device found: %s (RSSI %d)\n", addr_str, rssi); +} +#endif /* CONFIG_BT_OBSERVER */ + int init_peripheral(void) { size_t id_count; @@ -182,6 +199,17 @@ int init_peripheral(void) printk("Bluetooth initialized\n"); +#if defined(CONFIG_BT_OBSERVER) + printk("Start continuous passive scanning..."); + err = bt_le_scan_start(BT_LE_SCAN_PASSIVE_ALLOW_DUPILCATES, + device_found); + if (err) { + printk("Scan start failed (%d).\n", err); + return err; + } + printk("success.\n"); +#endif /* CONFIG_BT_OBSERVER */ + k_work_init(&work_adv_start, adv_start); k_work_submit(&work_adv_start); From 157509b37a06d0e81cd1afc1883f7226fc3b1a99 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 21 Jul 2021 15:32:31 +0300 Subject: [PATCH 33/50] doc: update slack invite update second link to the slack invite. Signed-off-by: Anas Nashif --- doc/getting_started/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/getting_started/index.rst b/doc/getting_started/index.rst index f4ebfc99f9f30..a35841c89b29d 100644 --- a/doc/getting_started/index.rst +++ b/doc/getting_started/index.rst @@ -649,6 +649,6 @@ search the archives. When copy/pasting more than 5 lines of text into Slack, create a `snippet`_. .. _Search archives and sign up here: https://lists.zephyrproject.org/g/users -.. _Slack invite: https://tinyurl.com/y5glwylp +.. _Slack invite: https://tinyurl.com/2vue8666 .. _GitHub issues: https://github.com/zephyrproject-rtos/zephyr/issues .. _snippet: https://get.slack.help/hc/en-us/articles/204145658-Create-a-snippet From c206c8fb98db1b6d39dba521df9916d389177f6f Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 21 Jul 2021 17:07:03 +0300 Subject: [PATCH 34/50] actions: footprint-tracking: install gitpython install missing packages for the workflow to run. Signed-off-by: Anas Nashif --- .github/workflows/footprint-tracking.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/footprint-tracking.yml b/.github/workflows/footprint-tracking.yml index 499596faad10a..caa1957daf3a6 100644 --- a/.github/workflows/footprint-tracking.yml +++ b/.github/workflows/footprint-tracking.yml @@ -7,6 +7,7 @@ on: push: paths: - 'VERSION' + - '.github/workflows/footprint-tracking.yml' tags: # only publish v* tags, do not care about zephyr-v* which point to the # same commit @@ -36,6 +37,9 @@ jobs: - name: Update PATH for west run: | echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Install pip packages + run: | + sudo pip3 install -U setuptools wheel pip gitpython - name: checkout uses: actions/checkout@v2 From 05a7039aab3f61c2e667226e01cd4af6d4c6a1ee Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Tue, 29 Jun 2021 09:54:50 -0700 Subject: [PATCH 35/50] power: dts: Add exit-latency info for SOC_SERIES_CC13X2_CC26X2 The exit latency for the standby state is available in policy/policy_residency_cc13x2_cc26x2.c. Just copying it to the state definition in dts. Signed-off-by: Flavio Ceolin --- boards/arm/cc1352r1_launchxl/cc1352r1_launchxl.dts | 1 + boards/arm/cc1352r_sensortag/cc1352r_sensortag.dts | 1 + boards/arm/cc26x2r1_launchxl/cc26x2r1_launchxl.dts | 1 + 3 files changed, 3 insertions(+) diff --git a/boards/arm/cc1352r1_launchxl/cc1352r1_launchxl.dts b/boards/arm/cc1352r1_launchxl/cc1352r1_launchxl.dts index a0e85217f8bda..e6b5275e80a24 100644 --- a/boards/arm/cc1352r1_launchxl/cc1352r1_launchxl.dts +++ b/boards/arm/cc1352r1_launchxl/cc1352r1_launchxl.dts @@ -71,6 +71,7 @@ compatible = "zephyr,power-state"; power-state-name = "standby"; min-residency-us = <5000>; + exit-latency-us = <240>; }; }; }; diff --git a/boards/arm/cc1352r_sensortag/cc1352r_sensortag.dts b/boards/arm/cc1352r_sensortag/cc1352r_sensortag.dts index 38cacc47c86a0..b69b8a03484c7 100644 --- a/boards/arm/cc1352r_sensortag/cc1352r_sensortag.dts +++ b/boards/arm/cc1352r_sensortag/cc1352r_sensortag.dts @@ -80,6 +80,7 @@ compatible = "zephyr,power-state"; power-state-name = "standby"; min-residency-us = <5000>; + exit-latency-us = <240>; }; }; }; diff --git a/boards/arm/cc26x2r1_launchxl/cc26x2r1_launchxl.dts b/boards/arm/cc26x2r1_launchxl/cc26x2r1_launchxl.dts index 7c5d968529b13..61781334f94da 100644 --- a/boards/arm/cc26x2r1_launchxl/cc26x2r1_launchxl.dts +++ b/boards/arm/cc26x2r1_launchxl/cc26x2r1_launchxl.dts @@ -71,6 +71,7 @@ compatible = "zephyr,power-state"; power-state-name = "standby"; min-residency-us = <5000>; + exit-latency-us = <240>; }; }; }; From 65e4add74ecae7281299ffb0a90292e6536ccc41 Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Tue, 29 Jun 2021 11:00:40 -0700 Subject: [PATCH 36/50] soc: cc13x2: Use residency policy cc13x2_cc26x2 had its own power policy that was implementing the same logic available in the default residency policy. Also, this policy was unnecessarily setting up a timeout to wakeup the system. This is not necessary, the power subsystem takes care of this. Signed-off-by: Flavio Ceolin --- soc/arm/ti_simplelink/cc13x2_cc26x2/power.c | 6 - subsys/pm/policy/CMakeLists.txt | 1 - subsys/pm/policy/Kconfig | 8 +- .../policy/policy_residency_cc13x2_cc26x2.c | 139 ------------------ 4 files changed, 1 insertion(+), 153 deletions(-) delete mode 100644 subsys/pm/policy/policy_residency_cc13x2_cc26x2.c diff --git a/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c b/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c index 011567e991acf..59874db878230 100644 --- a/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c +++ b/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c @@ -99,14 +99,8 @@ void pm_power_state_set(struct pm_state_info info) break; case PM_STATE_STANDBY: - /* schedule the wakeup event */ - ClockP_start(ClockP_handle((ClockP_Struct *) - &PowerCC26X2_module.clockObj)); - /* go to standby mode */ Power_sleep(PowerCC26XX_STANDBY); - ClockP_stop(ClockP_handle((ClockP_Struct *) - &PowerCC26X2_module.clockObj)); break; case PM_STATE_SUSPEND_TO_RAM: __fallthrough; diff --git a/subsys/pm/policy/CMakeLists.txt b/subsys/pm/policy/CMakeLists.txt index 7594f7e734fb9..b7657acb1e62e 100644 --- a/subsys/pm/policy/CMakeLists.txt +++ b/subsys/pm/policy/CMakeLists.txt @@ -2,4 +2,3 @@ zephyr_sources_ifdef(CONFIG_PM_POLICY_DUMMY policy_dummy.c) zephyr_sources_ifdef(CONFIG_PM_POLICY_RESIDENCY_DEFAULT policy_residency.c) -zephyr_sources_ifdef(CONFIG_PM_POLICY_RESIDENCY_CC13X2_CC26X2 policy_residency_cc13x2_cc26x2.c) diff --git a/subsys/pm/policy/Kconfig b/subsys/pm/policy/Kconfig index d8bfc7271221f..80fca155a01fd 100644 --- a/subsys/pm/policy/Kconfig +++ b/subsys/pm/policy/Kconfig @@ -7,8 +7,7 @@ choice config PM_POLICY_RESIDENCY bool "PM Policy based on CPU residency" - select PM_POLICY_RESIDENCY_DEFAULT if !SOC_SERIES_CC13X2_CC26X2 - select PM_POLICY_RESIDENCY_CC13X2_CC26X2 if SOC_SERIES_CC13X2_CC26X2 + select PM_POLICY_RESIDENCY_DEFAULT help Select this option for PM policy based on CPU residencies. @@ -28,8 +27,3 @@ config PM_POLICY_RESIDENCY_DEFAULT bool help Use the default residency policy implementation - -config PM_POLICY_RESIDENCY_CC13X2_CC26X2 - bool - help - Use the residency policy implementation for TI CC13x2/CC26x2 diff --git a/subsys/pm/policy/policy_residency_cc13x2_cc26x2.c b/subsys/pm/policy/policy_residency_cc13x2_cc26x2.c deleted file mode 100644 index f4858f31c27e5..0000000000000 --- a/subsys/pm/policy/policy_residency_cc13x2_cc26x2.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2019 Linaro Limited. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include - -#define LOG_LEVEL CONFIG_PM_LOG_LEVEL -#include -LOG_MODULE_DECLARE(power); - -/* Wakeup delay from standby in microseconds */ -#define WAKEDELAYSTANDBY 240 - -#define STATE_ACTIVE \ - (struct pm_state_info){PM_STATE_ACTIVE, 0, 0} - - -extern PowerCC26X2_ModuleState PowerCC26X2_module; - -/* PM Policy based on SoC/Platform residency requirements */ -static const struct pm_state_info residency_info[] = - PM_STATE_INFO_DT_ITEMS_LIST(DT_NODELABEL(cpu0)); - -struct pm_state_info pm_policy_next_state(int32_t ticks) -{ - uint32_t constraints; - bool disallowed = false; - int i; - - /* check operating conditions, optimally choose DCDC versus GLDO */ - SysCtrl_DCDC_VoltageConditionalControl(); - - /* query the declared constraints */ - constraints = Power_getConstraintMask(); - - if ((ticks != K_TICKS_FOREVER) && (ticks < - k_us_to_ticks_ceil32(residency_info[0].min_residency_us))) { - LOG_DBG("Not enough time for PM operations: %d", ticks); - return STATE_ACTIVE; - } - - for (i = ARRAY_SIZE(residency_info) - 1; i >= 0; i--) { - if (!pm_constraint_get(residency_info[i].state)) { - continue; - } - - if ((ticks < - k_us_to_ticks_ceil32(residency_info[i].min_residency_us)) - && (ticks != K_TICKS_FOREVER)) { - continue; - } - - /* Verify if Power module has constraints set to - * disallow a state - */ - switch (residency_info[i].state) { - case PM_STATE_SUSPEND_TO_IDLE: /* Idle mode */ - if ((constraints & (1 << - PowerCC26XX_DISALLOW_IDLE)) != 0) { - disallowed = true; - } - break; - case PM_STATE_STANDBY: /* Standby mode */ - if ((constraints & (1 << - PowerCC26XX_DISALLOW_STANDBY)) != 0) { - disallowed = true; - } - /* Set timeout for wakeup event */ - __ASSERT( - residency_info[i].min_residency_us > 1000, - "PM_STATE_STANDBY must be greater than 1000."); - if (ticks != K_TICKS_FOREVER) { - /* NOTE: Ideally we'd like to set a - * timer to wake up just a little - * earlier to take care of the wakeup - * sequence, ie. by WAKEDELAYSTANDBY - * microsecs. However, given - * k_timer_start (called later by - * ClockP_start) does not currently - * have sub-millisecond accuracy, wakeup - * would be at up to (WAKEDELAYSTANDBY - * + 1 ms) ahead of the next timeout. - * This also has the implication that - * PM_STATE_STANDBY - * must be greater than 1. - */ - ticks -= (WAKEDELAYSTANDBY * - CONFIG_SYS_CLOCK_TICKS_PER_SEC - + 1000000) / 1000000; -#if (CONFIG_SYS_CLOCK_TICKS_PER_SEC <= 1000) - /* - * ClockP_setTimeout cannot handle any - * more ticks - */ - ticks = MIN(ticks, UINT32_MAX / 1000 * - CONFIG_SYS_CLOCK_TICKS_PER_SEC); -#endif - ClockP_setTimeout(ClockP_handle( - (ClockP_Struct *) - &PowerCC26X2_module.clockObj), - ticks); - } - break; - default: - /* This should never be reached */ - LOG_ERR("Invalid sleep state detected\n"); - } - - if (disallowed) { - disallowed = false; - continue; - } - - LOG_DBG("Selected power state %d " - "(ticks: %d, min_residency: %u)", - residency_info[i].state, ticks, - k_us_to_ticks_ceil32( - residency_info[i].min_residency_us)); - return residency_info[i]; - } - - LOG_DBG("No suitable power state found!"); - return STATE_ACTIVE; -} From 049b44475284d982be3e988403eb75c6db84dc7e Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Wed, 21 Jul 2021 15:57:18 +0200 Subject: [PATCH 37/50] readme: add missing logo Logo was accidentally deleted as part of some docs cleanup. Add it back with a new name making it more explicit that it belongs to the readme. Signed-off-by: Gerard Marull-Paretas --- README.rst | 2 +- doc/_static/images/logo-readme.png | Bin 0 -> 20797 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/_static/images/logo-readme.png diff --git a/README.rst b/README.rst index dddeb60f47cac..5d6292ee71ffb 100644 --- a/README.rst +++ b/README.rst @@ -2,7 +2,7 @@