|
| 1 | +/* |
| 2 | +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates |
| 3 | +* |
| 4 | +* SPDX-License-Identifier: BSD-3-Clause |
| 5 | +*/ |
| 6 | + |
| 7 | +#include <zephyr/devicetree.h> |
| 8 | +#include <zephyr/dt-bindings/clock/ra_clock.h> |
| 9 | + |
| 10 | +#ifndef BSP_CLOCK_CFG_H_ |
| 11 | +#define BSP_CLOCK_CFG_H_ |
| 12 | + |
| 13 | +#define BSP_CFG_CLOCKS_SECURE (0) |
| 14 | +#define BSP_CFG_CLOCKS_OVERRIDE (0) |
| 15 | +#define BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(node_id, prop, default_value) \ |
| 16 | + (COND_CODE_1(DT_NODE_HAS_STATUS(node_id, okay), (DT_PROP(node_id, prop)), (default_value))) |
| 17 | + |
| 18 | +#define BSP_CFG_XTAL_HZ BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(xtal), clock_frequency, 0) |
| 19 | + |
| 20 | +#if DT_PROP(DT_NODELABEL(hoco), clock_frequency) == 16000000 |
| 21 | +#define BSP_CFG_HOCO_FREQUENCY 0 /* HOCO 16MHz */ |
| 22 | +#elif DT_PROP(DT_NODELABEL(hoco), clock_frequency) == 18000000 |
| 23 | +#define BSP_CFG_HOCO_FREQUENCY 1 /* HOCO 18MHz */ |
| 24 | +#elif DT_PROP(DT_NODELABEL(hoco), clock_frequency) == 20000000 |
| 25 | +#define BSP_CFG_HOCO_FREQUENCY 2 /* HOCO 20MHz */ |
| 26 | +#else |
| 27 | +#error "Invalid HOCO frequency, only can be set to 16MHz, 18MHz, and 20MHz" |
| 28 | +#endif |
| 29 | + |
| 30 | +#define BSP_CFG_PLL_SOURCE \ |
| 31 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pll), source, RA_PLL_SOURCE_DISABLE) |
| 32 | +#define BSP_CFG_PLL_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pll), div, RA_PLL_DIV_1) |
| 33 | +#define BSP_CFG_PLL_MUL \ |
| 34 | + DT_NODE_HAS_STATUS(DT_NODELABEL(pll), okay) \ |
| 35 | + ? BSP_CLOCKS_PLL_MUL(DT_PROP_BY_IDX(DT_NODELABEL(pll), mul, 0), \ |
| 36 | + DT_PROP_BY_IDX(DT_NODELABEL(pll), mul, 1)) \ |
| 37 | + : BSP_CLOCKS_PLL_MUL(0, 0) |
| 38 | + |
| 39 | +#define BSP_CFG_PLL2_SOURCE \ |
| 40 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pll2), source, RA_PLL_SOURCE_DISABLE) |
| 41 | +#define BSP_CFG_PLL2_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pll2), div, RA_PLL_DIV_1) |
| 42 | +#define BSP_CFG_PLL2_MUL \ |
| 43 | + DT_NODE_HAS_STATUS(DT_NODELABEL(pll2), okay) \ |
| 44 | + ? BSP_CLOCKS_PLL_MUL(DT_PROP_BY_IDX(DT_NODELABEL(pll2), mul, 0), \ |
| 45 | + DT_PROP_BY_IDX(DT_NODELABEL(pll2), mul, 1)) \ |
| 46 | + : BSP_CLOCKS_PLL_MUL(0, 0) |
| 47 | + |
| 48 | +#define BSP_CFG_CLOCK_SOURCE \ |
| 49 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pclkblock), sysclock_src, \ |
| 50 | + RA_PLL_SOURCE_DISABLE) |
| 51 | + |
| 52 | +#define BSP_CFG_ICLK_DIV \ |
| 53 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(iclk), clk_div, RA_SYS_CLOCK_DIV_1) |
| 54 | +#define BSP_CFG_PCLKA_DIV \ |
| 55 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pclka), clk_div, RA_SYS_CLOCK_DIV_2) |
| 56 | +#define BSP_CFG_PCLKB_DIV \ |
| 57 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pclkb), clk_div, RA_SYS_CLOCK_DIV_4) |
| 58 | +#define BSP_CFG_PCLKC_DIV \ |
| 59 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pclkc), clk_div, RA_SYS_CLOCK_DIV_4) |
| 60 | +#define BSP_CFG_PCLKD_DIV \ |
| 61 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(pclkd), clk_div, RA_SYS_CLOCK_DIV_2) |
| 62 | +#define BSP_CFG_BCLK_DIV \ |
| 63 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(bclk), clk_div, RA_SYS_CLOCK_DIV_2) |
| 64 | +#define BSP_CFG_BCLK_OUTPUT BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(bclkout), clk_out_div, 2) |
| 65 | +#define BSP_CFG_FCLK_DIV \ |
| 66 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(fclk), clk_div, RA_SYS_CLOCK_DIV_4) |
| 67 | + |
| 68 | +#define BSP_CFG_UCK_SOURCE \ |
| 69 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(uclk), clk_src, RA_CLOCK_SOURCE_DISABLE) |
| 70 | +#define BSP_CFG_UCK_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(uclk), clk_div, 0) |
| 71 | +#define BSP_CFG_U60CK_SOURCE \ |
| 72 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(u60clk), clk_src, RA_CLOCK_SOURCE_DISABLE) |
| 73 | +#define BSP_CFG_U60CK_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(u60clk), clk_div, 0) |
| 74 | +#define BSP_CFG_CLKOUT_SOURCE \ |
| 75 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(clkout), clk_src, RA_CLOCK_SOURCE_DISABLE) |
| 76 | +#define BSP_CFG_CLKOUT_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(clkout), clk_div, 0) |
| 77 | +#define BSP_CFG_CANFDCLK_SOURCE \ |
| 78 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(canfdclk), clk_src, RA_CLOCK_SOURCE_DISABLE) |
| 79 | +#define BSP_CFG_CANFDCLK_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(canfdclk), clk_div, 0) |
| 80 | +#define BSP_CFG_CECCLK_SOURCE \ |
| 81 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(cecclk), clk_src, \ |
| 82 | + RA_CLOCK_SOURCE_DISABLE) |
| 83 | +#define BSP_CFG_CECCLK_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(cecclk), clk_div, 0) |
| 84 | +#define BSP_CFG_OCTA_SOURCE \ |
| 85 | + BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(octaspiclk), clk_src, \ |
| 86 | + RA_CLOCK_SOURCE_DISABLE) |
| 87 | +#define BSP_CFG_OCTA_DIV BSP_CLOCK_PROP_HAS_STATUS_OKAY_OR(DT_NODELABEL(octaspiclk), clk_div, 0) |
| 88 | + |
| 89 | +#endif /* BSP_CLOCK_CFG_H_ */ |
0 commit comments