mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-30 07:39:24 +00:00
Merge changes from topic "stm32mp13" into integration
* changes: feat(stm32mp1): select platform compilation either by flag or DT feat(stm32mp1-fdts): add support for STM32MP13 DK board feat(stm32mp1-fdts): add DDR support for STM32MP13 feat(stm32mp1-fdts): add st-io_policies node for STM32MP13 feat(stm32mp1): updates for STM32MP13 device tree compilation feat(stm32mp1-fdts): add DT files for STM32MP13 feat(dt-bindings): add TZC400 bindings for STM32MP13 feat(stm32mp1): add "Boot mode" management for STM32MP13 feat(stm32mp1): manage HSLV on STM32MP13 feat(stm32mp1): add sdmmc compatible in platform define feat(st-sdmmc2): allow compatible to be defined in platform code feat(stm32mp1): update IO compensation on STM32MP13 feat(stm32mp1): call pmic_voltages_init() in platform init feat(st-pmic): add pmic_voltages_init() function feat(stm32mp1): update CFG0 OTP for STM32MP13 feat(stm32mp1): usb descriptor update for STM32MP13 feat(st-clock): add clock driver for STM32MP13 feat(dt-bindings): add bindings for STM32MP13 feat(stm32mp1): get CPU info from SYSCFG on STM32MP13 feat(stm32mp1): use only one filter for TZC400 on STM32MP13 feat(stm32mp1): add a second fixed regulator feat(stm32mp1): adaptations for STM32MP13 image header feat(stm32mp1): update boot API for header v2.0 feat(stm32mp1): update IP addresses for STM32MP13 feat(stm32mp1): add part numbers for STM32MP13 feat(stm32mp1): chip rev. Z is 0x1001 on STM32MP13 feat(stm32mp1): update BACKUP_BOOT_MODE for STM32MP13 feat(stm32mp1): stm32mp_is_single_core() for STM32MP13 feat(stm32mp1): remove unsupported features on STM32MP13 feat(stm32mp1): update memory mapping for STM32MP13 feat(stm32mp1): introduce new flag for STM32MP13 feat(st): update stm32image tool for header v2
This commit is contained in:
commit
2ff6a49ea6
46 changed files with 12120 additions and 3058 deletions
|
@ -2,15 +2,34 @@ STMicroelectronics STM32MP1
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
STM32MP1 is a microprocessor designed by STMicroelectronics
|
STM32MP1 is a microprocessor designed by STMicroelectronics
|
||||||
based on a dual Arm Cortex-A7.
|
based on Arm Cortex-A7.
|
||||||
It is an Armv7-A platform, using dedicated code from TF-A.
|
It is an Armv7-A platform, using dedicated code from TF-A.
|
||||||
The STM32MP1 chip also embeds a Cortex-M4.
|
|
||||||
More information can be found on `STM32MP1 Series`_ page.
|
More information can be found on `STM32MP1 Series`_ page.
|
||||||
|
|
||||||
|
|
||||||
STM32MP1 Versions
|
STM32MP1 Versions
|
||||||
-----------------
|
-----------------
|
||||||
The STM32MP1 series is available in 3 different lines which are pin-to-pin compatible:
|
|
||||||
|
There are 2 variants for STM32MP1: STM32MP13 and STM32MP15
|
||||||
|
|
||||||
|
STM32MP13 Versions
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
The STM32MP13 series is available in 3 different lines which are pin-to-pin compatible:
|
||||||
|
|
||||||
|
- STM32MP131: Single Cortex-A7 core
|
||||||
|
- STM32MP133: STM32MP131 + 2*CAN, ETH2(GMAC), ADC1
|
||||||
|
- STM32MP135: STM32MP133 + DCMIPP, LTDC
|
||||||
|
|
||||||
|
Each line comes with a security option (cryptography & secure boot) and a Cortex-A frequency option:
|
||||||
|
|
||||||
|
- A Cortex-A7 @ 650 MHz
|
||||||
|
- C Secure Boot + HW Crypto + Cortex-A7 @ 650 MHz
|
||||||
|
- D Cortex-A7 @ 900 MHz
|
||||||
|
- F Secure Boot + HW Crypto + Cortex-A7 @ 900 MHz
|
||||||
|
|
||||||
|
STM32MP15 Versions
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
The STM32MP15 series is available in 3 different lines which are pin-to-pin compatible:
|
||||||
|
|
||||||
- STM32MP157: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz, 3D GPU, DSI display interface and CAN FD
|
- STM32MP157: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz, 3D GPU, DSI display interface and CAN FD
|
||||||
- STM32MP153: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz and CAN FD
|
- STM32MP153: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz and CAN FD
|
||||||
|
@ -131,6 +150,10 @@ Other configuration flags:
|
||||||
| Default: 115200
|
| Default: 115200
|
||||||
- | ``STM32_TF_VERSION``: to manage BL2 monotonic counter.
|
- | ``STM32_TF_VERSION``: to manage BL2 monotonic counter.
|
||||||
| Default: 0
|
| Default: 0
|
||||||
|
- | ``STM32MP13``: to select STM32MP13 variant configuration.
|
||||||
|
| Default: 0
|
||||||
|
- | ``STM32MP15``: to select STM32MP15 variant configuration.
|
||||||
|
| Default: 1
|
||||||
|
|
||||||
|
|
||||||
Boot with FIP
|
Boot with FIP
|
||||||
|
|
1097
drivers/st/clk/clk-stm32-core.c
Normal file
1097
drivers/st/clk/clk-stm32-core.c
Normal file
File diff suppressed because it is too large
Load diff
405
drivers/st/clk/clk-stm32-core.h
Normal file
405
drivers/st/clk/clk-stm32-core.h
Normal file
|
@ -0,0 +1,405 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLK_STM32_CORE_H
|
||||||
|
#define CLK_STM32_CORE_H
|
||||||
|
|
||||||
|
struct mux_cfg {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t shift;
|
||||||
|
uint8_t width;
|
||||||
|
uint8_t bitrdy;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct gate_cfg {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t bit_idx;
|
||||||
|
uint8_t set_clr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_div_table {
|
||||||
|
unsigned int val;
|
||||||
|
unsigned int div;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct div_cfg {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t shift;
|
||||||
|
uint8_t width;
|
||||||
|
uint8_t flags;
|
||||||
|
uint8_t bitrdy;
|
||||||
|
const struct clk_div_table *table;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct parent_cfg {
|
||||||
|
uint8_t num_parents;
|
||||||
|
const uint16_t *id_parents;
|
||||||
|
struct mux_cfg *mux;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct stm32_clk_priv;
|
||||||
|
|
||||||
|
struct stm32_clk_ops {
|
||||||
|
unsigned long (*recalc_rate)(struct stm32_clk_priv *priv, int id, unsigned long rate);
|
||||||
|
int (*get_parent)(struct stm32_clk_priv *priv, int id);
|
||||||
|
int (*set_rate)(struct stm32_clk_priv *priv, int id, unsigned long rate,
|
||||||
|
unsigned long prate);
|
||||||
|
int (*enable)(struct stm32_clk_priv *priv, int id);
|
||||||
|
void (*disable)(struct stm32_clk_priv *priv, int id);
|
||||||
|
bool (*is_enabled)(struct stm32_clk_priv *priv, int id);
|
||||||
|
void (*init)(struct stm32_clk_priv *priv, int id);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_stm32 {
|
||||||
|
const char *name;
|
||||||
|
uint16_t binding;
|
||||||
|
uint16_t parent;
|
||||||
|
uint8_t flags;
|
||||||
|
void *clock_cfg;
|
||||||
|
const struct stm32_clk_ops *ops;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct stm32_clk_priv {
|
||||||
|
uintptr_t base;
|
||||||
|
const uint32_t num;
|
||||||
|
const struct clk_stm32 *clks;
|
||||||
|
const struct parent_cfg *parents;
|
||||||
|
const uint32_t nb_parents;
|
||||||
|
const struct gate_cfg *gates;
|
||||||
|
const uint32_t nb_gates;
|
||||||
|
const struct div_cfg *div;
|
||||||
|
const uint32_t nb_div;
|
||||||
|
struct clk_oscillator_data *osci_data;
|
||||||
|
const uint32_t nb_osci_data;
|
||||||
|
uint32_t *gate_refcounts;
|
||||||
|
void *pdata;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct stm32_clk_bypass {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t bit_byp;
|
||||||
|
uint8_t bit_digbyp;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct stm32_clk_css {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t bit_css;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct stm32_clk_drive {
|
||||||
|
uint16_t offset;
|
||||||
|
uint8_t drv_shift;
|
||||||
|
uint8_t drv_width;
|
||||||
|
uint8_t drv_default;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_oscillator_data {
|
||||||
|
const char *name;
|
||||||
|
uint16_t id_clk;
|
||||||
|
unsigned long frequency;
|
||||||
|
uint16_t gate_id;
|
||||||
|
uint16_t gate_rdy_id;
|
||||||
|
struct stm32_clk_bypass *bypass;
|
||||||
|
struct stm32_clk_css *css;
|
||||||
|
struct stm32_clk_drive *drive;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_fixed_rate {
|
||||||
|
const char *name;
|
||||||
|
unsigned long fixed_rate;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_gate_cfg {
|
||||||
|
uint32_t offset;
|
||||||
|
uint8_t bit_idx;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* CLOCK FLAGS */
|
||||||
|
#define CLK_IS_CRITICAL BIT(0)
|
||||||
|
#define CLK_IGNORE_UNUSED BIT(1)
|
||||||
|
#define CLK_SET_RATE_PARENT BIT(2)
|
||||||
|
|
||||||
|
#define CLK_DIVIDER_ONE_BASED BIT(0)
|
||||||
|
#define CLK_DIVIDER_POWER_OF_TWO BIT(1)
|
||||||
|
#define CLK_DIVIDER_ALLOW_ZERO BIT(2)
|
||||||
|
#define CLK_DIVIDER_HIWORD_MASK BIT(3)
|
||||||
|
#define CLK_DIVIDER_ROUND_CLOSEST BIT(4)
|
||||||
|
#define CLK_DIVIDER_READ_ONLY BIT(5)
|
||||||
|
#define CLK_DIVIDER_MAX_AT_ZERO BIT(6)
|
||||||
|
#define CLK_DIVIDER_BIG_ENDIAN BIT(7)
|
||||||
|
|
||||||
|
#define MUX_MAX_PARENTS U(0x8000)
|
||||||
|
#define MUX_PARENT_MASK GENMASK(14, 0)
|
||||||
|
#define MUX_FLAG U(0x8000)
|
||||||
|
#define MUX(mux) ((mux) | MUX_FLAG)
|
||||||
|
|
||||||
|
#define NO_GATE 0
|
||||||
|
#define _NO_ID UINT16_MAX
|
||||||
|
#define CLK_IS_ROOT UINT16_MAX
|
||||||
|
#define MUX_NO_BIT_RDY UINT8_MAX
|
||||||
|
#define DIV_NO_BIT_RDY UINT8_MAX
|
||||||
|
|
||||||
|
#define MASK_WIDTH_SHIFT(_width, _shift) \
|
||||||
|
GENMASK(((_width) + (_shift) - 1U), (_shift))
|
||||||
|
|
||||||
|
int clk_stm32_init(struct stm32_clk_priv *priv, uintptr_t base);
|
||||||
|
void clk_stm32_enable_critical_clocks(void);
|
||||||
|
|
||||||
|
struct stm32_clk_priv *clk_stm32_get_priv(void);
|
||||||
|
|
||||||
|
int clk_get_index(struct stm32_clk_priv *priv, unsigned long binding_id);
|
||||||
|
const struct clk_stm32 *_clk_get(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
void clk_oscillator_set_bypass(struct stm32_clk_priv *priv, int id, bool digbyp, bool bypass);
|
||||||
|
void clk_oscillator_set_drive(struct stm32_clk_priv *priv, int id, uint8_t lsedrv);
|
||||||
|
void clk_oscillator_set_css(struct stm32_clk_priv *priv, int id, bool css);
|
||||||
|
|
||||||
|
int _clk_stm32_gate_wait_ready(struct stm32_clk_priv *priv, uint16_t gate_id, bool ready_on);
|
||||||
|
|
||||||
|
int clk_oscillator_wait_ready(struct stm32_clk_priv *priv, int id, bool ready_on);
|
||||||
|
int clk_oscillator_wait_ready_on(struct stm32_clk_priv *priv, int id);
|
||||||
|
int clk_oscillator_wait_ready_off(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
const char *_clk_stm32_get_name(struct stm32_clk_priv *priv, int id);
|
||||||
|
const char *clk_stm32_get_name(struct stm32_clk_priv *priv, unsigned long binding_id);
|
||||||
|
int clk_stm32_get_counter(unsigned long binding_id);
|
||||||
|
|
||||||
|
void _clk_stm32_gate_disable(struct stm32_clk_priv *priv, uint16_t gate_id);
|
||||||
|
int _clk_stm32_gate_enable(struct stm32_clk_priv *priv, uint16_t gate_id);
|
||||||
|
|
||||||
|
int _clk_stm32_set_parent(struct stm32_clk_priv *priv, int id, int src_id);
|
||||||
|
int _clk_stm32_set_parent_by_index(struct stm32_clk_priv *priv, int clk, int sel);
|
||||||
|
|
||||||
|
int _clk_stm32_get_parent(struct stm32_clk_priv *priv, int id);
|
||||||
|
int _clk_stm32_get_parent_by_index(struct stm32_clk_priv *priv, int clk_id, int idx);
|
||||||
|
int _clk_stm32_get_parent_index(struct stm32_clk_priv *priv, int clk_id);
|
||||||
|
|
||||||
|
unsigned long _clk_stm32_get_rate(struct stm32_clk_priv *priv, int id);
|
||||||
|
unsigned long _clk_stm32_get_parent_rate(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
bool _stm32_clk_is_flags(struct stm32_clk_priv *priv, int id, uint8_t flag);
|
||||||
|
|
||||||
|
int _clk_stm32_enable(struct stm32_clk_priv *priv, int id);
|
||||||
|
void _clk_stm32_disable(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
int clk_stm32_enable_call_ops(struct stm32_clk_priv *priv, uint16_t id);
|
||||||
|
void clk_stm32_disable_call_ops(struct stm32_clk_priv *priv, uint16_t id);
|
||||||
|
|
||||||
|
bool _clk_stm32_is_enabled(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
int _clk_stm32_divider_set_rate(struct stm32_clk_priv *priv, int div_id,
|
||||||
|
unsigned long rate, unsigned long parent_rate);
|
||||||
|
|
||||||
|
int clk_stm32_divider_set_rate(struct stm32_clk_priv *priv, int id, unsigned long rate,
|
||||||
|
unsigned long prate);
|
||||||
|
|
||||||
|
unsigned long _clk_stm32_divider_recalc(struct stm32_clk_priv *priv,
|
||||||
|
int div_id,
|
||||||
|
unsigned long prate);
|
||||||
|
|
||||||
|
unsigned long clk_stm32_divider_recalc(struct stm32_clk_priv *priv, int idx,
|
||||||
|
unsigned long prate);
|
||||||
|
|
||||||
|
int clk_stm32_gate_enable(struct stm32_clk_priv *priv, int idx);
|
||||||
|
void clk_stm32_gate_disable(struct stm32_clk_priv *priv, int idx);
|
||||||
|
|
||||||
|
bool _clk_stm32_gate_is_enabled(struct stm32_clk_priv *priv, int gate_id);
|
||||||
|
bool clk_stm32_gate_is_enabled(struct stm32_clk_priv *priv, int idx);
|
||||||
|
|
||||||
|
uint32_t clk_stm32_div_get_value(struct stm32_clk_priv *priv, int div_id);
|
||||||
|
int clk_stm32_set_div(struct stm32_clk_priv *priv, uint32_t div_id, uint32_t value);
|
||||||
|
int clk_mux_set_parent(struct stm32_clk_priv *priv, uint16_t pid, uint8_t sel);
|
||||||
|
int clk_mux_get_parent(struct stm32_clk_priv *priv, uint32_t mux_id);
|
||||||
|
|
||||||
|
int stm32_clk_parse_fdt_by_name(void *fdt, int node, const char *name, uint32_t *tab, uint32_t *nb);
|
||||||
|
|
||||||
|
#ifdef CFG_STM32_CLK_DEBUG
|
||||||
|
void clk_stm32_display_clock_info(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct clk_stm32_div_cfg {
|
||||||
|
int id;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define STM32_DIV(idx, _binding, _parent, _flags, _div_id) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_binding),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = (_flags),\
|
||||||
|
.clock_cfg = &(struct clk_stm32_div_cfg){\
|
||||||
|
.id = (_div_id),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_stm32_divider_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
struct clk_stm32_gate_cfg {
|
||||||
|
int id;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define STM32_GATE(idx, _binding, _parent, _flags, _gate_id) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_binding),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = (_flags),\
|
||||||
|
.clock_cfg = &(struct clk_stm32_gate_cfg){\
|
||||||
|
.id = (_gate_id),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_stm32_gate_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
struct fixed_factor_cfg {
|
||||||
|
unsigned int mult;
|
||||||
|
unsigned int div;
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned long fixed_factor_recalc_rate(struct stm32_clk_priv *priv,
|
||||||
|
int _idx, unsigned long prate);
|
||||||
|
|
||||||
|
#define FIXED_FACTOR(idx, _idx, _parent, _mult, _div) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_idx),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.clock_cfg = &(struct fixed_factor_cfg){\
|
||||||
|
.mult = (_mult),\
|
||||||
|
.div = (_div),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_fixed_factor_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GATE(idx, _binding, _parent, _flags, _offset, _bit_idx) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_binding),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = (_flags),\
|
||||||
|
.clock_cfg = &(struct clk_gate_cfg){\
|
||||||
|
.offset = (_offset),\
|
||||||
|
.bit_idx = (_bit_idx),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_gate_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define STM32_MUX(idx, _binding, _mux_id, _flags) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_binding),\
|
||||||
|
.parent = (MUX(_mux_id)),\
|
||||||
|
.flags = (_flags),\
|
||||||
|
.clock_cfg = NULL,\
|
||||||
|
.ops = (&clk_mux_ops),\
|
||||||
|
}
|
||||||
|
|
||||||
|
struct clk_timer_cfg {
|
||||||
|
uint32_t apbdiv;
|
||||||
|
uint32_t timpre;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CK_TIMER(idx, _idx, _parent, _flags, _apbdiv, _timpre) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_idx),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = (CLK_SET_RATE_PARENT | (_flags)),\
|
||||||
|
.clock_cfg = &(struct clk_timer_cfg){\
|
||||||
|
.apbdiv = (_apbdiv),\
|
||||||
|
.timpre = (_timpre),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_timer_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
struct clk_stm32_fixed_rate_cfg {
|
||||||
|
unsigned long rate;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CLK_FIXED_RATE(idx, _binding, _rate) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_binding),\
|
||||||
|
.parent = (CLK_IS_ROOT),\
|
||||||
|
.clock_cfg = &(struct clk_stm32_fixed_rate_cfg){\
|
||||||
|
.rate = (_rate),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_stm32_fixed_rate_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BYPASS(_offset, _bit_byp, _bit_digbyp) &(struct stm32_clk_bypass){\
|
||||||
|
.offset = (_offset),\
|
||||||
|
.bit_byp = (_bit_byp),\
|
||||||
|
.bit_digbyp = (_bit_digbyp),\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CSS(_offset, _bit_css) &(struct stm32_clk_css){\
|
||||||
|
.offset = (_offset),\
|
||||||
|
.bit_css = (_bit_css),\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DRIVE(_offset, _shift, _width, _default) &(struct stm32_clk_drive){\
|
||||||
|
.offset = (_offset),\
|
||||||
|
.drv_shift = (_shift),\
|
||||||
|
.drv_width = (_width),\
|
||||||
|
.drv_default = (_default),\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define OSCILLATOR(idx_osc, _id, _name, _gate_id, _gate_rdy_id, _bypass, _css, _drive) \
|
||||||
|
[(idx_osc)] = (struct clk_oscillator_data){\
|
||||||
|
.name = (_name),\
|
||||||
|
.id_clk = (_id),\
|
||||||
|
.gate_id = (_gate_id),\
|
||||||
|
.gate_rdy_id = (_gate_rdy_id),\
|
||||||
|
.bypass = (_bypass),\
|
||||||
|
.css = (_css),\
|
||||||
|
.drive = (_drive),\
|
||||||
|
}
|
||||||
|
|
||||||
|
struct clk_oscillator_data *clk_oscillator_get_data(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
void clk_stm32_osc_init(struct stm32_clk_priv *priv, int id);
|
||||||
|
bool clk_stm32_osc_gate_is_enabled(struct stm32_clk_priv *priv, int id);
|
||||||
|
int clk_stm32_osc_gate_enable(struct stm32_clk_priv *priv, int id);
|
||||||
|
void clk_stm32_osc_gate_disable(struct stm32_clk_priv *priv, int id);
|
||||||
|
|
||||||
|
struct stm32_osc_cfg {
|
||||||
|
int osc_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CLK_OSC(idx, _idx, _parent, _osc_id) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_idx),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = CLK_IS_CRITICAL,\
|
||||||
|
.clock_cfg = &(struct stm32_osc_cfg){\
|
||||||
|
.osc_id = (_osc_id),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_stm32_osc_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CLK_OSC_FIXED(idx, _idx, _parent, _osc_id) \
|
||||||
|
[(idx)] = (struct clk_stm32){ \
|
||||||
|
.name = #idx,\
|
||||||
|
.binding = (_idx),\
|
||||||
|
.parent = (_parent),\
|
||||||
|
.flags = CLK_IS_CRITICAL,\
|
||||||
|
.clock_cfg = &(struct stm32_osc_cfg){\
|
||||||
|
.osc_id = (_osc_id),\
|
||||||
|
},\
|
||||||
|
.ops = &clk_stm32_osc_nogate_ops,\
|
||||||
|
}
|
||||||
|
|
||||||
|
extern const struct stm32_clk_ops clk_mux_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_stm32_divider_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_stm32_gate_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_fixed_factor_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_gate_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_timer_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_stm32_fixed_rate_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_stm32_osc_ops;
|
||||||
|
extern const struct stm32_clk_ops clk_stm32_osc_nogate_ops;
|
||||||
|
|
||||||
|
#endif /* CLK_STM32_CORE_H */
|
2334
drivers/st/clk/clk-stm32mp13.c
Normal file
2334
drivers/st/clk/clk-stm32mp13.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -125,7 +125,9 @@
|
||||||
#define POWER_OFF_DELAY 2
|
#define POWER_OFF_DELAY 2
|
||||||
#define POWER_ON_DELAY 1
|
#define POWER_ON_DELAY 1
|
||||||
|
|
||||||
|
#ifndef DT_SDMMC2_COMPAT
|
||||||
#define DT_SDMMC2_COMPAT "st,stm32-sdmmc2"
|
#define DT_SDMMC2_COMPAT "st,stm32-sdmmc2"
|
||||||
|
#endif
|
||||||
|
|
||||||
static void stm32_sdmmc2_init(void);
|
static void stm32_sdmmc2_init(void);
|
||||||
static int stm32_sdmmc2_send_cmd_req(struct mmc_cmd *cmd);
|
static int stm32_sdmmc2_send_cmd_req(struct mmc_cmd *cmd);
|
||||||
|
|
|
@ -219,17 +219,20 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
uint16_t buck3_min_mv;
|
uint16_t buck3_min_mv;
|
||||||
struct rdev *buck2, *buck3, *ldo3, *vref;
|
struct rdev *buck2, *buck3, *vref;
|
||||||
|
struct rdev *ldo3 __unused;
|
||||||
|
|
||||||
buck2 = regulator_get_by_name("buck2");
|
buck2 = regulator_get_by_name("buck2");
|
||||||
if (buck2 == NULL) {
|
if (buck2 == NULL) {
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
ldo3 = regulator_get_by_name("ldo3");
|
ldo3 = regulator_get_by_name("ldo3");
|
||||||
if (ldo3 == NULL) {
|
if (ldo3 == NULL) {
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
vref = regulator_get_by_name("vref_ddr");
|
vref = regulator_get_by_name("vref_ddr");
|
||||||
if (vref == NULL) {
|
if (vref == NULL) {
|
||||||
|
@ -238,10 +241,12 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
|
|
||||||
switch (ddr_type) {
|
switch (ddr_type) {
|
||||||
case STM32MP_DDR3:
|
case STM32MP_DDR3:
|
||||||
|
#if STM32MP15
|
||||||
status = regulator_set_flag(ldo3, REGUL_SINK_SOURCE);
|
status = regulator_set_flag(ldo3, REGUL_SINK_SOURCE);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
status = regulator_set_min_voltage(buck2);
|
status = regulator_set_min_voltage(buck2);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
|
@ -258,10 +263,12 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
status = regulator_enable(ldo3);
|
status = regulator_enable(ldo3);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STM32MP_LPDDR2:
|
case STM32MP_LPDDR2:
|
||||||
|
@ -278,6 +285,7 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
|
|
||||||
regulator_get_range(buck3, &buck3_min_mv, NULL);
|
regulator_get_range(buck3, &buck3_min_mv, NULL);
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
if (buck3_min_mv != 1800) {
|
if (buck3_min_mv != 1800) {
|
||||||
status = regulator_set_min_voltage(ldo3);
|
status = regulator_set_min_voltage(ldo3);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
|
@ -289,16 +297,19 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
status = regulator_set_min_voltage(buck2);
|
status = regulator_set_min_voltage(buck2);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
status = regulator_enable(ldo3);
|
status = regulator_enable(ldo3);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
status = regulator_enable(buck2);
|
status = regulator_enable(buck2);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
|
@ -318,6 +329,36 @@ int pmic_ddr_power_init(enum ddr_type ddr_type)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int pmic_voltages_init(void)
|
||||||
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
struct rdev *buck1, *buck4;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
buck1 = regulator_get_by_name("buck1");
|
||||||
|
if (buck1 == NULL) {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
buck4 = regulator_get_by_name("buck4");
|
||||||
|
if (buck4 == NULL) {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = regulator_set_min_voltage(buck1);
|
||||||
|
if (status != 0) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = regulator_set_min_voltage(buck4);
|
||||||
|
if (status != 0) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
STPMIC1_BUCK1 = 0,
|
STPMIC1_BUCK1 = 0,
|
||||||
STPMIC1_BUCK2,
|
STPMIC1_BUCK2,
|
||||||
|
|
130
fdts/stm32mp13-bl2.dtsi
Normal file
130
fdts/stm32mp13-bl2.dtsi
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
aliases {
|
||||||
|
#if !STM32MP_EMMC && !STM32MP_SDMMC
|
||||||
|
/delete-property/ mmc0;
|
||||||
|
/delete-property/ mmc1;
|
||||||
|
#endif
|
||||||
|
/delete-property/ ethernet0;
|
||||||
|
/delete-property/ ethernet1;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
cpu@0 {
|
||||||
|
/delete-property/ operating-points-v2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/delete-node/ cpu0-opp-table;
|
||||||
|
/delete-node/ psci;
|
||||||
|
|
||||||
|
soc {
|
||||||
|
/delete-node/ sram@30000000;
|
||||||
|
/delete-node/ timer@40000000;
|
||||||
|
/delete-node/ timer@40001000;
|
||||||
|
/delete-node/ timer@40002000;
|
||||||
|
/delete-node/ timer@40003000;
|
||||||
|
/delete-node/ timer@40004000;
|
||||||
|
/delete-node/ timer@40005000;
|
||||||
|
/delete-node/ timer@40009000;
|
||||||
|
/delete-node/ spi@4000b000;
|
||||||
|
/delete-node/ audio-controller@4000b000;
|
||||||
|
/delete-node/ spi@4000c000;
|
||||||
|
/delete-node/ audio-controller@4000c000;
|
||||||
|
/delete-node/ audio-controller@4000d000;
|
||||||
|
/delete-node/ i2c@40012000;
|
||||||
|
/delete-node/ i2c@40013000;
|
||||||
|
/delete-node/ timer@44000000;
|
||||||
|
/delete-node/ timer@44001000;
|
||||||
|
/delete-node/ spi@44004000;
|
||||||
|
/delete-node/ audio-controller@44004000;
|
||||||
|
/delete-node/ sai@4400a000;
|
||||||
|
/delete-node/ sai@4400b000;
|
||||||
|
/delete-node/ dfsdm@4400d000;
|
||||||
|
/delete-node/ can@4400e000;
|
||||||
|
/delete-node/ can@4400f000;
|
||||||
|
/delete-node/ dma-controller@48000000;
|
||||||
|
/delete-node/ dma-controller@48001000;
|
||||||
|
/delete-node/ dma-router@48002000;
|
||||||
|
/delete-node/ adc@48003000;
|
||||||
|
/delete-node/ adc@48004000;
|
||||||
|
/delete-node/ dma@48005000;
|
||||||
|
/delete-node/ dma-router@48006000;
|
||||||
|
#if !STM32MP_USB_PROGRAMMER
|
||||||
|
/delete-node/ usb-otg@49000000;
|
||||||
|
#endif
|
||||||
|
/delete-node/ spi@4c002000;
|
||||||
|
/delete-node/ spi@4c003000;
|
||||||
|
/delete-node/ timer@4c007000;
|
||||||
|
/delete-node/ timer@4c008000;
|
||||||
|
/delete-node/ timer@4c009000;
|
||||||
|
/delete-node/ timer@4c00a000;
|
||||||
|
/delete-node/ timer@4c00b000;
|
||||||
|
/delete-node/ timer@4c00c000;
|
||||||
|
/delete-node/ timer@50021000;
|
||||||
|
/delete-node/ timer@50022000;
|
||||||
|
/delete-node/ timer@50023000;
|
||||||
|
/delete-node/ timer@50024000;
|
||||||
|
/delete-node/ vrefbuf@50025000;
|
||||||
|
/delete-node/ thermal@50028000;
|
||||||
|
/delete-node/ hdp@5002a000;
|
||||||
|
/delete-node/ dma-controller@58000000;
|
||||||
|
#if !STM32MP_RAW_NAND
|
||||||
|
/delete-node/ memory-controller@58002000;
|
||||||
|
#endif
|
||||||
|
#if !STM32MP_SPI_NAND && !STM32MP_SPI_NOR
|
||||||
|
/delete-node/ spi@58003000;
|
||||||
|
#endif
|
||||||
|
#if !STM32MP_EMMC && !STM32MP_SDMMC
|
||||||
|
/delete-node/ mmc@58005000;
|
||||||
|
/delete-node/ mmc@58007000;
|
||||||
|
#endif
|
||||||
|
/delete-node/ crc@58009000;
|
||||||
|
/delete-node/ stmmac-axi-config;
|
||||||
|
/delete-node/ eth1@5800a000;
|
||||||
|
#if !STM32MP_USB_PROGRAMMER
|
||||||
|
/delete-node/ usbh-ohci@5800c000;
|
||||||
|
/delete-node/ usbh-ehci@5800d000;
|
||||||
|
#endif
|
||||||
|
/delete-node/ eth2@5800e000;
|
||||||
|
/delete-node/ dcmipp@5a000000;
|
||||||
|
/delete-node/ display-controller@5a001000;
|
||||||
|
#if !STM32MP_USB_PROGRAMMER
|
||||||
|
/delete-node/ usbphyc@5a006000;
|
||||||
|
#endif
|
||||||
|
/delete-node/ perf@5a007000;
|
||||||
|
/delete-node/ rtc@5c004000;
|
||||||
|
/delete-node/ tamp@5c00a000;
|
||||||
|
/delete-node/ stgen@5c008000;
|
||||||
|
|
||||||
|
pin-controller@50002000 {
|
||||||
|
#if !STM32MP_EMMC && !STM32MP_SDMMC
|
||||||
|
/delete-node/ sdmmc1-b4-0;
|
||||||
|
/delete-node/ sdmmc2-b4-0;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* UUID's here are UUID RFC 4122 compliant meaning fieds are stored in
|
||||||
|
* network order (big endian)
|
||||||
|
*/
|
||||||
|
|
||||||
|
st-io_policies {
|
||||||
|
fip-handles {
|
||||||
|
compatible = "st,io-fip-handle";
|
||||||
|
fw_cfg_uuid = "5807e16a-8459-47be-8ed5-648e8dddab0e";
|
||||||
|
bl32_uuid = "05d0e189-53dc-1347-8d2b-500a4b7a3e38";
|
||||||
|
bl32_extra1_uuid = "0b70c29b-2a5a-7840-9f65-0a5682738288";
|
||||||
|
bl32_extra2_uuid = "8ea87bb1-cfa2-3f4d-85fd-e7bba50220d9";
|
||||||
|
bl33_uuid = "d6d0eea7-fcea-d54b-9782-9934f234b6e4";
|
||||||
|
hw_cfg_uuid = "08b8f1d9-c9cf-9349-a962-6fbc6b7265cc";
|
||||||
|
tos_fw_cfg_uuid = "26257c1a-dbc6-7f47-8d96-c4c4b0248021";
|
||||||
|
nt_fw_cfg_uuid = "28da9815-93e8-7e44-ac66-1aaf801550f9";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
184
fdts/stm32mp13-ddr.dtsi
Normal file
184
fdts/stm32mp13-ddr.dtsi
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
&ddr {
|
||||||
|
st,mem-name = DDR_MEM_NAME;
|
||||||
|
st,mem-speed = <DDR_MEM_SPEED>;
|
||||||
|
st,mem-size = <DDR_MEM_SIZE>;
|
||||||
|
|
||||||
|
st,ctl-reg = <
|
||||||
|
DDR_MSTR
|
||||||
|
DDR_MRCTRL0
|
||||||
|
DDR_MRCTRL1
|
||||||
|
DDR_DERATEEN
|
||||||
|
DDR_DERATEINT
|
||||||
|
DDR_PWRCTL
|
||||||
|
DDR_PWRTMG
|
||||||
|
DDR_HWLPCTL
|
||||||
|
DDR_RFSHCTL0
|
||||||
|
DDR_RFSHCTL3
|
||||||
|
DDR_CRCPARCTL0
|
||||||
|
DDR_ZQCTL0
|
||||||
|
DDR_DFITMG0
|
||||||
|
DDR_DFITMG1
|
||||||
|
DDR_DFILPCFG0
|
||||||
|
DDR_DFIUPD0
|
||||||
|
DDR_DFIUPD1
|
||||||
|
DDR_DFIUPD2
|
||||||
|
DDR_DFIPHYMSTR
|
||||||
|
DDR_ODTMAP
|
||||||
|
DDR_DBG0
|
||||||
|
DDR_DBG1
|
||||||
|
DDR_DBGCMD
|
||||||
|
DDR_POISONCFG
|
||||||
|
DDR_PCCFG
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,ctl-timing = <
|
||||||
|
DDR_RFSHTMG
|
||||||
|
DDR_DRAMTMG0
|
||||||
|
DDR_DRAMTMG1
|
||||||
|
DDR_DRAMTMG2
|
||||||
|
DDR_DRAMTMG3
|
||||||
|
DDR_DRAMTMG4
|
||||||
|
DDR_DRAMTMG5
|
||||||
|
DDR_DRAMTMG6
|
||||||
|
DDR_DRAMTMG7
|
||||||
|
DDR_DRAMTMG8
|
||||||
|
DDR_DRAMTMG14
|
||||||
|
DDR_ODTCFG
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,ctl-map = <
|
||||||
|
DDR_ADDRMAP1
|
||||||
|
DDR_ADDRMAP2
|
||||||
|
DDR_ADDRMAP3
|
||||||
|
DDR_ADDRMAP4
|
||||||
|
DDR_ADDRMAP5
|
||||||
|
DDR_ADDRMAP6
|
||||||
|
DDR_ADDRMAP9
|
||||||
|
DDR_ADDRMAP10
|
||||||
|
DDR_ADDRMAP11
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,ctl-perf = <
|
||||||
|
DDR_SCHED
|
||||||
|
DDR_SCHED1
|
||||||
|
DDR_PERFHPR1
|
||||||
|
DDR_PERFLPR1
|
||||||
|
DDR_PERFWR1
|
||||||
|
DDR_PCFGR_0
|
||||||
|
DDR_PCFGW_0
|
||||||
|
DDR_PCFGQOS0_0
|
||||||
|
DDR_PCFGQOS1_0
|
||||||
|
DDR_PCFGWQOS0_0
|
||||||
|
DDR_PCFGWQOS1_0
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,phy-reg = <
|
||||||
|
DDR_PGCR
|
||||||
|
DDR_ACIOCR
|
||||||
|
DDR_DXCCR
|
||||||
|
DDR_DSGCR
|
||||||
|
DDR_DCR
|
||||||
|
DDR_ODTCR
|
||||||
|
DDR_ZQ0CR1
|
||||||
|
DDR_DX0GCR
|
||||||
|
DDR_DX1GCR
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,phy-timing = <
|
||||||
|
DDR_PTR0
|
||||||
|
DDR_PTR1
|
||||||
|
DDR_PTR2
|
||||||
|
DDR_DTPR0
|
||||||
|
DDR_DTPR1
|
||||||
|
DDR_DTPR2
|
||||||
|
DDR_MR0
|
||||||
|
DDR_MR1
|
||||||
|
DDR_MR2
|
||||||
|
DDR_MR3
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
#undef DDR_MEM_NAME
|
||||||
|
#undef DDR_MEM_SPEED
|
||||||
|
#undef DDR_MEM_SIZE
|
||||||
|
#undef DDR_MSTR
|
||||||
|
#undef DDR_MRCTRL0
|
||||||
|
#undef DDR_MRCTRL1
|
||||||
|
#undef DDR_DERATEEN
|
||||||
|
#undef DDR_DERATEINT
|
||||||
|
#undef DDR_PWRCTL
|
||||||
|
#undef DDR_PWRTMG
|
||||||
|
#undef DDR_HWLPCTL
|
||||||
|
#undef DDR_RFSHCTL0
|
||||||
|
#undef DDR_RFSHCTL3
|
||||||
|
#undef DDR_RFSHTMG
|
||||||
|
#undef DDR_CRCPARCTL0
|
||||||
|
#undef DDR_DRAMTMG0
|
||||||
|
#undef DDR_DRAMTMG1
|
||||||
|
#undef DDR_DRAMTMG2
|
||||||
|
#undef DDR_DRAMTMG3
|
||||||
|
#undef DDR_DRAMTMG4
|
||||||
|
#undef DDR_DRAMTMG5
|
||||||
|
#undef DDR_DRAMTMG6
|
||||||
|
#undef DDR_DRAMTMG7
|
||||||
|
#undef DDR_DRAMTMG8
|
||||||
|
#undef DDR_DRAMTMG14
|
||||||
|
#undef DDR_ZQCTL0
|
||||||
|
#undef DDR_DFITMG0
|
||||||
|
#undef DDR_DFITMG1
|
||||||
|
#undef DDR_DFILPCFG0
|
||||||
|
#undef DDR_DFIUPD0
|
||||||
|
#undef DDR_DFIUPD1
|
||||||
|
#undef DDR_DFIUPD2
|
||||||
|
#undef DDR_DFIPHYMSTR
|
||||||
|
#undef DDR_ADDRMAP1
|
||||||
|
#undef DDR_ADDRMAP2
|
||||||
|
#undef DDR_ADDRMAP3
|
||||||
|
#undef DDR_ADDRMAP4
|
||||||
|
#undef DDR_ADDRMAP5
|
||||||
|
#undef DDR_ADDRMAP6
|
||||||
|
#undef DDR_ADDRMAP9
|
||||||
|
#undef DDR_ADDRMAP10
|
||||||
|
#undef DDR_ADDRMAP11
|
||||||
|
#undef DDR_ODTCFG
|
||||||
|
#undef DDR_ODTMAP
|
||||||
|
#undef DDR_SCHED
|
||||||
|
#undef DDR_SCHED1
|
||||||
|
#undef DDR_PERFHPR1
|
||||||
|
#undef DDR_PERFLPR1
|
||||||
|
#undef DDR_PERFWR1
|
||||||
|
#undef DDR_DBG0
|
||||||
|
#undef DDR_DBG1
|
||||||
|
#undef DDR_DBGCMD
|
||||||
|
#undef DDR_POISONCFG
|
||||||
|
#undef DDR_PCCFG
|
||||||
|
#undef DDR_PCFGR_0
|
||||||
|
#undef DDR_PCFGW_0
|
||||||
|
#undef DDR_PCFGQOS0_0
|
||||||
|
#undef DDR_PCFGQOS1_0
|
||||||
|
#undef DDR_PCFGWQOS0_0
|
||||||
|
#undef DDR_PCFGWQOS1_0
|
||||||
|
#undef DDR_PGCR
|
||||||
|
#undef DDR_PTR0
|
||||||
|
#undef DDR_PTR1
|
||||||
|
#undef DDR_PTR2
|
||||||
|
#undef DDR_ACIOCR
|
||||||
|
#undef DDR_DXCCR
|
||||||
|
#undef DDR_DSGCR
|
||||||
|
#undef DDR_DCR
|
||||||
|
#undef DDR_DTPR0
|
||||||
|
#undef DDR_DTPR1
|
||||||
|
#undef DDR_DTPR2
|
||||||
|
#undef DDR_MR0
|
||||||
|
#undef DDR_MR1
|
||||||
|
#undef DDR_MR2
|
||||||
|
#undef DDR_MR3
|
||||||
|
#undef DDR_ODTCR
|
||||||
|
#undef DDR_ZQ0CR1
|
||||||
|
#undef DDR_DX0GCR
|
||||||
|
#undef DDR_DX1GCR
|
100
fdts/stm32mp13-ddr3-1x4Gb-1066-binF.dtsi
Normal file
100
fdts/stm32mp13-ddr3-1x4Gb-1066-binF.dtsi
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*
|
||||||
|
* STM32MP135C DISCO BOARD configuration
|
||||||
|
* 1x DDR3L 4Gb, 16-bit, 533MHz.
|
||||||
|
* Reference used MT41K256M16TW-107 P from Micron
|
||||||
|
*
|
||||||
|
* DDR type / Platform DDR3/3L
|
||||||
|
* freq 533MHz
|
||||||
|
* width 16
|
||||||
|
* datasheet 1
|
||||||
|
* DDR density 4
|
||||||
|
* timing mode optimized
|
||||||
|
* Scheduling/QoS options : type = 6
|
||||||
|
* address mapping : RBC
|
||||||
|
* Tc > + 85C : N
|
||||||
|
*/
|
||||||
|
#define DDR_MEM_NAME "DDR3-1066 bin F 1x4Gb 533MHz v1.53"
|
||||||
|
#define DDR_MEM_SPEED 533000
|
||||||
|
#define DDR_MEM_SIZE 0x20000000
|
||||||
|
|
||||||
|
#define DDR_MSTR 0x00040401
|
||||||
|
#define DDR_MRCTRL0 0x00000010
|
||||||
|
#define DDR_MRCTRL1 0x00000000
|
||||||
|
#define DDR_DERATEEN 0x00000000
|
||||||
|
#define DDR_DERATEINT 0x00800000
|
||||||
|
#define DDR_PWRCTL 0x00000000
|
||||||
|
#define DDR_PWRTMG 0x00400010
|
||||||
|
#define DDR_HWLPCTL 0x00000000
|
||||||
|
#define DDR_RFSHCTL0 0x00210000
|
||||||
|
#define DDR_RFSHCTL3 0x00000000
|
||||||
|
#define DDR_RFSHTMG 0x0081008B
|
||||||
|
#define DDR_CRCPARCTL0 0x00000000
|
||||||
|
#define DDR_DRAMTMG0 0x121B2414
|
||||||
|
#define DDR_DRAMTMG1 0x000A041B
|
||||||
|
#define DDR_DRAMTMG2 0x0607080F
|
||||||
|
#define DDR_DRAMTMG3 0x0050400C
|
||||||
|
#define DDR_DRAMTMG4 0x07040607
|
||||||
|
#define DDR_DRAMTMG5 0x06060403
|
||||||
|
#define DDR_DRAMTMG6 0x02020002
|
||||||
|
#define DDR_DRAMTMG7 0x00000202
|
||||||
|
#define DDR_DRAMTMG8 0x00001005
|
||||||
|
#define DDR_DRAMTMG14 0x000000A0
|
||||||
|
#define DDR_ZQCTL0 0xC2000040
|
||||||
|
#define DDR_DFITMG0 0x02050105
|
||||||
|
#define DDR_DFITMG1 0x00000202
|
||||||
|
#define DDR_DFILPCFG0 0x07000000
|
||||||
|
#define DDR_DFIUPD0 0xC0400003
|
||||||
|
#define DDR_DFIUPD1 0x00000000
|
||||||
|
#define DDR_DFIUPD2 0x00000000
|
||||||
|
#define DDR_DFIPHYMSTR 0x00000000
|
||||||
|
#define DDR_ADDRMAP1 0x00080808
|
||||||
|
#define DDR_ADDRMAP2 0x00000000
|
||||||
|
#define DDR_ADDRMAP3 0x00000000
|
||||||
|
#define DDR_ADDRMAP4 0x00001F1F
|
||||||
|
#define DDR_ADDRMAP5 0x07070707
|
||||||
|
#define DDR_ADDRMAP6 0x0F070707
|
||||||
|
#define DDR_ADDRMAP9 0x00000000
|
||||||
|
#define DDR_ADDRMAP10 0x00000000
|
||||||
|
#define DDR_ADDRMAP11 0x00000000
|
||||||
|
#define DDR_ODTCFG 0x06000600
|
||||||
|
#define DDR_ODTMAP 0x00000001
|
||||||
|
#define DDR_SCHED 0x00000F01
|
||||||
|
#define DDR_SCHED1 0x00000000
|
||||||
|
#define DDR_PERFHPR1 0x00000001
|
||||||
|
#define DDR_PERFLPR1 0x04000200
|
||||||
|
#define DDR_PERFWR1 0x08000400
|
||||||
|
#define DDR_DBG0 0x00000000
|
||||||
|
#define DDR_DBG1 0x00000000
|
||||||
|
#define DDR_DBGCMD 0x00000000
|
||||||
|
#define DDR_POISONCFG 0x00000000
|
||||||
|
#define DDR_PCCFG 0x00000010
|
||||||
|
#define DDR_PCFGR_0 0x00000000
|
||||||
|
#define DDR_PCFGW_0 0x00000000
|
||||||
|
#define DDR_PCFGQOS0_0 0x00100009
|
||||||
|
#define DDR_PCFGQOS1_0 0x00000020
|
||||||
|
#define DDR_PCFGWQOS0_0 0x01100B03
|
||||||
|
#define DDR_PCFGWQOS1_0 0x01000200
|
||||||
|
#define DDR_PGCR 0x01442E02
|
||||||
|
#define DDR_PTR0 0x0022AA5B
|
||||||
|
#define DDR_PTR1 0x04841104
|
||||||
|
#define DDR_PTR2 0x042DA068
|
||||||
|
#define DDR_ACIOCR 0x10400812
|
||||||
|
#define DDR_DXCCR 0x00000C40
|
||||||
|
#define DDR_DSGCR 0xF200011F
|
||||||
|
#define DDR_DCR 0x0000000B
|
||||||
|
#define DDR_DTPR0 0x36D477D0
|
||||||
|
#define DDR_DTPR1 0x098B00D8
|
||||||
|
#define DDR_DTPR2 0x10023600
|
||||||
|
#define DDR_MR0 0x00000830
|
||||||
|
#define DDR_MR1 0x00000000
|
||||||
|
#define DDR_MR2 0x00000208
|
||||||
|
#define DDR_MR3 0x00000000
|
||||||
|
#define DDR_ODTCR 0x00010000
|
||||||
|
#define DDR_ZQ0CR1 0x00000038
|
||||||
|
#define DDR_DX0GCR 0x0000CE81
|
||||||
|
#define DDR_DX1GCR 0x0000CE81
|
||||||
|
|
||||||
|
#include "stm32mp13-ddr.dtsi"
|
55
fdts/stm32mp13-fw-config.dtsi
Normal file
55
fdts/stm32mp13-fw-config.dtsi
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common/tbbr/tbbr_img_def.h>
|
||||||
|
#include <dt-bindings/soc/stm32mp13-tzc400.h>
|
||||||
|
|
||||||
|
#include <platform_def.h>
|
||||||
|
|
||||||
|
#ifndef DDR_SIZE
|
||||||
|
#error "DDR_SIZE is not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DDR_NS_BASE STM32MP_DDR_BASE
|
||||||
|
#define DDR_SEC_SIZE 0x01e00000
|
||||||
|
#define DDR_SEC_BASE (STM32MP_DDR_BASE + (DDR_SIZE - DDR_SEC_SIZE))
|
||||||
|
#define DDR_SHARE_SIZE 0x00200000
|
||||||
|
#define DDR_SHARE_BASE (DDR_SEC_BASE - DDR_SHARE_SIZE)
|
||||||
|
#define DDR_NS_SIZE (DDR_SHARE_BASE - DDR_NS_BASE)
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
dtb-registry {
|
||||||
|
compatible = "fconf,dyn_cfg-dtb_registry";
|
||||||
|
|
||||||
|
hw-config {
|
||||||
|
load-address = <0x0 STM32MP_HW_CONFIG_BASE>;
|
||||||
|
max-size = <STM32MP_HW_CONFIG_MAX_SIZE>;
|
||||||
|
id = <HW_CONFIG_ID>;
|
||||||
|
};
|
||||||
|
|
||||||
|
nt_fw {
|
||||||
|
load-address = <0x0 STM32MP_BL33_BASE>;
|
||||||
|
max-size = <STM32MP_BL33_MAX_SIZE>;
|
||||||
|
id = <BL33_IMAGE_ID>;
|
||||||
|
};
|
||||||
|
|
||||||
|
tos_fw {
|
||||||
|
load-address = <0x0 DDR_SEC_BASE>;
|
||||||
|
max-size = <DDR_SEC_SIZE>;
|
||||||
|
id = <BL32_IMAGE_ID>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
st-mem-firewall {
|
||||||
|
compatible = "st,mem-firewall";
|
||||||
|
memory-ranges = <
|
||||||
|
DDR_NS_BASE DDR_NS_SIZE TZC_REGION_S_NONE TZC_REGION_NSEC_ALL_ACCESS_RDWR
|
||||||
|
DDR_SHARE_BASE DDR_SHARE_SIZE TZC_REGION_S_NONE
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_A7_ID)
|
||||||
|
DDR_SEC_BASE DDR_SEC_SIZE TZC_REGION_S_RDWR 0>;
|
||||||
|
};
|
||||||
|
};
|
97
fdts/stm32mp13-pinctrl.dtsi
Normal file
97
fdts/stm32mp13-pinctrl.dtsi
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com>
|
||||||
|
*/
|
||||||
|
#include <dt-bindings/pinctrl/stm32-pinfunc.h>
|
||||||
|
|
||||||
|
&pinctrl {
|
||||||
|
i2c4_pins_a: i2c4-0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32_PINMUX('E', 15, AF6)>, /* I2C4_SCL */
|
||||||
|
<STM32_PINMUX('B', 9, AF6)>; /* I2C4_SDA */
|
||||||
|
bias-disable;
|
||||||
|
drive-open-drain;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sdmmc1_b4_pins_a: sdmmc1-b4-0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32_PINMUX('C', 8, AF12)>, /* SDMMC1_D0 */
|
||||||
|
<STM32_PINMUX('C', 9, AF12)>, /* SDMMC1_D1 */
|
||||||
|
<STM32_PINMUX('C', 10, AF12)>, /* SDMMC1_D2 */
|
||||||
|
<STM32_PINMUX('C', 11, AF12)>, /* SDMMC1_D3 */
|
||||||
|
<STM32_PINMUX('D', 2, AF12)>; /* SDMMC1_CMD */
|
||||||
|
slew-rate = <1>;
|
||||||
|
drive-push-pull;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32_PINMUX('C', 12, AF12)>; /* SDMMC1_CK */
|
||||||
|
slew-rate = <2>;
|
||||||
|
drive-push-pull;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sdmmc2_b4_pins_a: sdmmc2-b4-0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32_PINMUX('B', 14, AF10)>, /* SDMMC2_D0 */
|
||||||
|
<STM32_PINMUX('B', 15, AF10)>, /* SDMMC2_D1 */
|
||||||
|
<STM32_PINMUX('B', 3, AF10)>, /* SDMMC2_D2 */
|
||||||
|
<STM32_PINMUX('B', 4, AF10)>, /* SDMMC2_D3 */
|
||||||
|
<STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
|
||||||
|
slew-rate = <1>;
|
||||||
|
drive-push-pull;
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32_PINMUX('E', 3, AF10)>; /* SDMMC2_CK */
|
||||||
|
slew-rate = <2>;
|
||||||
|
drive-push-pull;
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
uart4_pins_a: uart4-0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32_PINMUX('D', 6, AF8)>; /* UART4_TX */
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32_PINMUX('D', 8, AF8)>; /* UART4_RX */
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usart1_pins_a: usart1-0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32_PINMUX('C', 0, AF7)>, /* USART1_TX */
|
||||||
|
<STM32_PINMUX('C', 2, AF7)>; /* USART1_RTS */
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32_PINMUX('B', 0, AF4)>, /* USART1_RX */
|
||||||
|
<STM32_PINMUX('A', 7, AF7)>; /* USART1_CTS_NSS */
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
uart8_pins_a: uart8-0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32_PINMUX('E', 1, AF8)>; /* UART8_TX */
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32_PINMUX('F', 9, AF8)>; /* UART8_RX */
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
621
fdts/stm32mp131.dtsi
Normal file
621
fdts/stm32mp131.dtsi
Normal file
|
@ -0,0 +1,621 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
#include <dt-bindings/clock/stm32mp13-clks.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/reset/stm32mp13-resets.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
cpu0: cpu@0 {
|
||||||
|
compatible = "arm,cortex-a7";
|
||||||
|
device_type = "cpu";
|
||||||
|
reg = <0>;
|
||||||
|
clocks = <&rcc CK_MPU>;
|
||||||
|
clock-names = "cpu";
|
||||||
|
nvmem-cells = <&part_number_otp>;
|
||||||
|
nvmem-cell-names = "part_number";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nvmem_layout: nvmem_layout@0 {
|
||||||
|
compatible = "st,stm32-nvmem-layout";
|
||||||
|
|
||||||
|
nvmem-cells = <&cfg0_otp>,
|
||||||
|
<&part_number_otp>,
|
||||||
|
<&monotonic_otp>,
|
||||||
|
<&nand_otp>,
|
||||||
|
<&nand2_otp>,
|
||||||
|
<&uid_otp>,
|
||||||
|
<&hw2_otp>;
|
||||||
|
|
||||||
|
nvmem-cell-names = "cfg0_otp",
|
||||||
|
"part_number_otp",
|
||||||
|
"monotonic_otp",
|
||||||
|
"nand_otp",
|
||||||
|
"nand2_otp",
|
||||||
|
"uid_otp",
|
||||||
|
"hw2_otp";
|
||||||
|
};
|
||||||
|
|
||||||
|
clocks {
|
||||||
|
clk_csi: clk-csi {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <4000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_hse: clk-hse {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <24000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_hsi: clk-hsi {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <64000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_lse: clk-lse {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <32768>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_lsi: clk-lsi {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <32000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
intc: interrupt-controller@a0021000 {
|
||||||
|
compatible = "arm,cortex-a7-gic";
|
||||||
|
#interrupt-cells = <3>;
|
||||||
|
interrupt-controller;
|
||||||
|
reg = <0xa0021000 0x1000>,
|
||||||
|
<0xa0022000 0x2000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
psci {
|
||||||
|
compatible = "arm,psci-1.0";
|
||||||
|
method = "smc";
|
||||||
|
};
|
||||||
|
|
||||||
|
soc {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
interrupt-parent = <&intc>;
|
||||||
|
ranges;
|
||||||
|
|
||||||
|
usart3: serial@4000f000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x4000f000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc USART3_K>;
|
||||||
|
resets = <&rcc USART3_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart4: serial@40010000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x40010000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc UART4_K>;
|
||||||
|
resets = <&rcc UART4_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart5: serial@40011000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x40011000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc UART5_K>;
|
||||||
|
resets = <&rcc UART5_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart7: serial@40018000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x40018000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc UART7_K>;
|
||||||
|
resets = <&rcc UART7_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart8: serial@40019000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x40019000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc UART8_K>;
|
||||||
|
resets = <&rcc UART8_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart6: serial@44003000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x44003000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc USART6_K>;
|
||||||
|
resets = <&rcc USART6_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usbotg_hs: usb-otg@49000000 {
|
||||||
|
compatible = "st,stm32mp15-hsotg", "snps,dwc2";
|
||||||
|
reg = <0x49000000 0x40000>;
|
||||||
|
clocks = <&rcc USBO_K>;
|
||||||
|
clock-names = "otg";
|
||||||
|
resets = <&rcc USBO_R>;
|
||||||
|
reset-names = "dwc2";
|
||||||
|
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
g-rx-fifo-size = <512>;
|
||||||
|
g-np-tx-fifo-size = <32>;
|
||||||
|
g-tx-fifo-size = <256 16 16 16 16 16 16 16>;
|
||||||
|
dr_mode = "otg";
|
||||||
|
usb33d-supply = <&usb33>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart1: serial@4c000000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x4c000000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc USART1_K>;
|
||||||
|
resets = <&rcc USART1_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart2: serial@4c001000 {
|
||||||
|
compatible = "st,stm32h7-uart";
|
||||||
|
reg = <0x4c001000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc USART2_K>;
|
||||||
|
resets = <&rcc USART2_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c3: i2c@4c004000 {
|
||||||
|
compatible = "st,stm32mp13-i2c";
|
||||||
|
reg = <0x4c004000 0x400>;
|
||||||
|
interrupt-names = "event", "error";
|
||||||
|
interrupts-extended = <&exti 23 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<&intc GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc I2C3_K>;
|
||||||
|
resets = <&rcc I2C3_R>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
st,syscfg-fmp = <&syscfg 0x4 0x4>;
|
||||||
|
i2c-analog-filter;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c4: i2c@4c005000 {
|
||||||
|
compatible = "st,stm32mp13-i2c";
|
||||||
|
reg = <0x4c005000 0x400>;
|
||||||
|
interrupt-names = "event", "error";
|
||||||
|
interrupts-extended = <&exti 24 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<&intc GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc I2C4_K>;
|
||||||
|
resets = <&rcc I2C4_R>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
st,syscfg-fmp = <&syscfg 0x4 0x8>;
|
||||||
|
i2c-analog-filter;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c5: i2c@4c006000 {
|
||||||
|
compatible = "st,stm32mp13-i2c";
|
||||||
|
reg = <0x4c006000 0x400>;
|
||||||
|
interrupt-names = "event", "error";
|
||||||
|
interrupts-extended = <&exti 25 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<&intc GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc I2C5_K>;
|
||||||
|
resets = <&rcc I2C5_R>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
st,syscfg-fmp = <&syscfg 0x4 0x10>;
|
||||||
|
i2c-analog-filter;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
rcc: rcc@50000000 {
|
||||||
|
compatible = "st,stm32mp13-rcc", "syscon";
|
||||||
|
reg = <0x50000000 0x1000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
#reset-cells = <1>;
|
||||||
|
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
secure-interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
secure-interrupt-names = "wakeup";
|
||||||
|
};
|
||||||
|
|
||||||
|
pwr_regulators: pwr@50001000 {
|
||||||
|
compatible = "st,stm32mp1,pwr-reg";
|
||||||
|
reg = <0x50001000 0x10>;
|
||||||
|
|
||||||
|
reg11: reg11 {
|
||||||
|
regulator-name = "reg11";
|
||||||
|
regulator-min-microvolt = <1100000>;
|
||||||
|
regulator-max-microvolt = <1100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
reg18: reg18 {
|
||||||
|
regulator-name = "reg18";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb33: usb33 {
|
||||||
|
regulator-name = "usb33";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
exti: interrupt-controller@5000d000 {
|
||||||
|
compatible = "st,stm32mp13-exti", "syscon";
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x5000d000 0x400>;
|
||||||
|
};
|
||||||
|
|
||||||
|
syscfg: syscon@50020000 {
|
||||||
|
compatible = "st,stm32mp157-syscfg", "syscon";
|
||||||
|
reg = <0x50020000 0x400>;
|
||||||
|
clocks = <&rcc SYSCFG>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vrefbuf: vrefbuf@50025000 {
|
||||||
|
compatible = "st,stm32-vrefbuf";
|
||||||
|
reg = <0x50025000 0x8>;
|
||||||
|
regulator-min-microvolt = <1500000>;
|
||||||
|
regulator-max-microvolt = <2500000>;
|
||||||
|
clocks = <&rcc VREF>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
hash: hash@54003000 {
|
||||||
|
compatible = "st,stm32mp13-hash";
|
||||||
|
reg = <0x54003000 0x400>;
|
||||||
|
clocks = <&rcc HASH1>;
|
||||||
|
resets = <&rcc HASH1_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
rng: rng@54004000 {
|
||||||
|
compatible = "st,stm32mp13-rng";
|
||||||
|
reg = <0x54004000 0x400>;
|
||||||
|
clocks = <&rcc RNG1_K>;
|
||||||
|
resets = <&rcc RNG1_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
fmc: memory-controller@58002000 {
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "st,stm32mp1-fmc2-ebi";
|
||||||
|
reg = <0x58002000 0x1000>;
|
||||||
|
clocks = <&rcc FMC_K>;
|
||||||
|
resets = <&rcc FMC_R>;
|
||||||
|
status = "disabled";
|
||||||
|
|
||||||
|
ranges = <0 0 0x60000000 0x04000000>, /* EBI CS 1 */
|
||||||
|
<1 0 0x64000000 0x04000000>, /* EBI CS 2 */
|
||||||
|
<2 0 0x68000000 0x04000000>, /* EBI CS 3 */
|
||||||
|
<3 0 0x6c000000 0x04000000>, /* EBI CS 4 */
|
||||||
|
<4 0 0x80000000 0x10000000>; /* NAND */
|
||||||
|
|
||||||
|
nand-controller@4,0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "st,stm32mp1-fmc2-nfc";
|
||||||
|
reg = <4 0x00000000 0x1000>,
|
||||||
|
<4 0x08010000 0x1000>,
|
||||||
|
<4 0x08020000 0x1000>,
|
||||||
|
<4 0x01000000 0x1000>,
|
||||||
|
<4 0x09010000 0x1000>,
|
||||||
|
<4 0x09020000 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
qspi: spi@58003000 {
|
||||||
|
compatible = "st,stm32f469-qspi";
|
||||||
|
reg = <0x58003000 0x1000>, <0x70000000 0x10000000>;
|
||||||
|
reg-names = "qspi", "qspi_mm";
|
||||||
|
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc QSPI_K>;
|
||||||
|
resets = <&rcc QSPI_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
sdmmc1: mmc@58005000 {
|
||||||
|
compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
|
||||||
|
arm,primecell-periphid = <0x20253180>;
|
||||||
|
reg = <0x58005000 0x1000>, <0x58006000 0x1000>;
|
||||||
|
clocks = <&rcc SDMMC1_K>;
|
||||||
|
clock-names = "apb_pclk";
|
||||||
|
resets = <&rcc SDMMC1_R>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
cap-mmc-highspeed;
|
||||||
|
max-frequency = <120000000>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
sdmmc2: mmc@58007000 {
|
||||||
|
compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
|
||||||
|
arm,primecell-periphid = <0x20253180>;
|
||||||
|
reg = <0x58007000 0x1000>, <0x58008000 0x1000>;
|
||||||
|
clocks = <&rcc SDMMC2_K>;
|
||||||
|
clock-names = "apb_pclk";
|
||||||
|
resets = <&rcc SDMMC2_R>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
cap-mmc-highspeed;
|
||||||
|
max-frequency = <120000000>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
crc1: crc@58009000 {
|
||||||
|
compatible = "st,stm32f7-crc";
|
||||||
|
reg = <0x58009000 0x400>;
|
||||||
|
clocks = <&rcc CRC1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usbh_ohci: usbh-ohci@5800c000 {
|
||||||
|
compatible = "generic-ohci";
|
||||||
|
reg = <0x5800c000 0x1000>;
|
||||||
|
clocks = <&rcc USBH>;
|
||||||
|
resets = <&rcc USBH_R>;
|
||||||
|
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usbh_ehci: usbh-ehci@5800d000 {
|
||||||
|
compatible = "generic-ehci";
|
||||||
|
reg = <0x5800d000 0x1000>;
|
||||||
|
clocks = <&rcc USBH>;
|
||||||
|
resets = <&rcc USBH_R>;
|
||||||
|
interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
companion = <&usbh_ohci>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
iwdg2: watchdog@5a002000 {
|
||||||
|
compatible = "st,stm32mp1-iwdg";
|
||||||
|
reg = <0x5a002000 0x400>;
|
||||||
|
clocks = <&rcc IWDG2>, <&rcc CK_LSI>;
|
||||||
|
clock-names = "pclk", "lsi";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr: ddr@5a003000{
|
||||||
|
compatible = "st,stm32mp13-ddr";
|
||||||
|
reg = <0x5a003000 0x550>, <0x5a004000 0x234>;
|
||||||
|
clocks = <&rcc AXIDCG>,
|
||||||
|
<&rcc DDRC1>,
|
||||||
|
<&rcc DDRPHYC>,
|
||||||
|
<&rcc DDRCAPB>,
|
||||||
|
<&rcc DDRPHYCAPB>;
|
||||||
|
clock-names = "axidcg",
|
||||||
|
"ddrc1",
|
||||||
|
"ddrphyc",
|
||||||
|
"ddrcapb",
|
||||||
|
"ddrphycapb";
|
||||||
|
};
|
||||||
|
|
||||||
|
usbphyc: usbphyc@5a006000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "st,stm32mp1-usbphyc";
|
||||||
|
reg = <0x5a006000 0x1000>;
|
||||||
|
clocks = <&rcc USBPHY_K>;
|
||||||
|
resets = <&rcc USBPHY_R>;
|
||||||
|
vdda1v1-supply = <®11>;
|
||||||
|
vdda1v8-supply = <®18>;
|
||||||
|
status = "disabled";
|
||||||
|
|
||||||
|
usbphyc_port0: usb-phy@0 {
|
||||||
|
#phy-cells = <0>;
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usbphyc_port1: usb-phy@1 {
|
||||||
|
#phy-cells = <1>;
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
iwdg1: watchdog@5c003000 {
|
||||||
|
compatible = "st,stm32mp1-iwdg";
|
||||||
|
reg = <0x5c003000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc IWDG1>, <&rcc CK_LSI>;
|
||||||
|
clock-names = "pclk", "lsi";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
bsec: efuse@5c005000 {
|
||||||
|
compatible = "st,stm32mp15-bsec";
|
||||||
|
reg = <0x5c005000 0x400>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
cfg0_otp: cfg0_otp@0 {
|
||||||
|
reg = <0x0 0x2>;
|
||||||
|
};
|
||||||
|
part_number_otp: part_number_otp@4 {
|
||||||
|
reg = <0x4 0x2>;
|
||||||
|
};
|
||||||
|
monotonic_otp: monotonic_otp@10 {
|
||||||
|
reg = <0x10 0x4>;
|
||||||
|
};
|
||||||
|
nand_otp: cfg9_otp@24 {
|
||||||
|
reg = <0x24 0x4>;
|
||||||
|
};
|
||||||
|
nand2_otp: cfg10_otp@28 {
|
||||||
|
reg = <0x28 0x4>;
|
||||||
|
};
|
||||||
|
uid_otp: uid_otp@34 {
|
||||||
|
reg = <0x34 0xc>;
|
||||||
|
};
|
||||||
|
hw2_otp: hw2_otp@48 {
|
||||||
|
reg = <0x48 0x4>;
|
||||||
|
};
|
||||||
|
ts_cal1: calib@5c {
|
||||||
|
reg = <0x5c 0x2>;
|
||||||
|
};
|
||||||
|
ts_cal2: calib@5e {
|
||||||
|
reg = <0x5e 0x2>;
|
||||||
|
};
|
||||||
|
pkh_otp: pkh_otp@60 {
|
||||||
|
reg = <0x60 0x20>;
|
||||||
|
};
|
||||||
|
mac_addr: mac_addr@e4 {
|
||||||
|
reg = <0xe4 0xc>;
|
||||||
|
st,non-secure-otp;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
tamp: tamp@5c00a000 {
|
||||||
|
reg = <0x5c00a000 0x400>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Break node order to solve dependency probe issue between
|
||||||
|
* pinctrl and exti.
|
||||||
|
*/
|
||||||
|
pinctrl: pin-controller@50002000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "st,stm32mp135-pinctrl";
|
||||||
|
ranges = <0 0x50002000 0x8400>;
|
||||||
|
interrupt-parent = <&exti>;
|
||||||
|
st,syscfg = <&exti 0x60 0xff>;
|
||||||
|
pins-are-numbered;
|
||||||
|
|
||||||
|
gpioa: gpio@50002000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x0 0x400>;
|
||||||
|
clocks = <&rcc GPIOA>;
|
||||||
|
st,bank-name = "GPIOA";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 0 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiob: gpio@50003000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x1000 0x400>;
|
||||||
|
clocks = <&rcc GPIOB>;
|
||||||
|
st,bank-name = "GPIOB";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 16 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioc: gpio@50004000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x2000 0x400>;
|
||||||
|
clocks = <&rcc GPIOC>;
|
||||||
|
st,bank-name = "GPIOC";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 32 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiod: gpio@50005000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x3000 0x400>;
|
||||||
|
clocks = <&rcc GPIOD>;
|
||||||
|
st,bank-name = "GPIOD";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 48 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioe: gpio@50006000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x4000 0x400>;
|
||||||
|
clocks = <&rcc GPIOE>;
|
||||||
|
st,bank-name = "GPIOE";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 64 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiof: gpio@50007000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x5000 0x400>;
|
||||||
|
clocks = <&rcc GPIOF>;
|
||||||
|
st,bank-name = "GPIOF";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 80 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiog: gpio@50008000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x6000 0x400>;
|
||||||
|
clocks = <&rcc GPIOG>;
|
||||||
|
st,bank-name = "GPIOG";
|
||||||
|
ngpios = <16>;
|
||||||
|
gpio-ranges = <&pinctrl 0 96 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioh: gpio@50009000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x7000 0x400>;
|
||||||
|
clocks = <&rcc GPIOH>;
|
||||||
|
st,bank-name = "GPIOH";
|
||||||
|
ngpios = <15>;
|
||||||
|
gpio-ranges = <&pinctrl 0 112 15>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioi: gpio@5000a000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x8000 0x400>;
|
||||||
|
clocks = <&rcc GPIOI>;
|
||||||
|
st,bank-name = "GPIOI";
|
||||||
|
ngpios = <8>;
|
||||||
|
gpio-ranges = <&pinctrl 0 128 8>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
21
fdts/stm32mp133.dtsi
Normal file
21
fdts/stm32mp133.dtsi
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32mp131.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
m_can1: can@4400e000 {
|
||||||
|
reg = <0x4400e000 0x400>, <0x44011000 0x1400>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
m_can2: can@4400f000 {
|
||||||
|
reg = <0x4400f000 0x400>, <0x44011000 0x2800>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
12
fdts/stm32mp135.dtsi
Normal file
12
fdts/stm32mp135.dtsi
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32mp133.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
};
|
||||||
|
};
|
7
fdts/stm32mp135f-dk-fw-config.dts
Normal file
7
fdts/stm32mp135f-dk-fw-config.dts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DDR_SIZE 0x20000000 /* 512MB */
|
||||||
|
#include "stm32mp13-fw-config.dtsi"
|
353
fdts/stm32mp135f-dk.dts
Normal file
353
fdts/stm32mp135f-dk.dts
Normal file
|
@ -0,0 +1,353 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include <dt-bindings/clock/stm32mp13-clksrc.h>
|
||||||
|
#include "stm32mp135.dtsi"
|
||||||
|
#include "stm32mp13xf.dtsi"
|
||||||
|
#include "stm32mp13-ddr3-1x4Gb-1066-binF.dtsi"
|
||||||
|
#include "stm32mp13-pinctrl.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "STMicroelectronics STM32MP135F-DK Discovery Board";
|
||||||
|
compatible = "st,stm32mp135f-dk", "st,stm32mp135";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &uart4;
|
||||||
|
serial1 = &usart1;
|
||||||
|
serial2 = &uart8;
|
||||||
|
serial3 = &usart2;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = "serial0:115200n8";
|
||||||
|
};
|
||||||
|
|
||||||
|
memory@c0000000 {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0xc0000000 0x20000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vin: vin {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vin";
|
||||||
|
regulator-min-microvolt = <5000000>;
|
||||||
|
regulator-max-microvolt = <5000000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
v3v3_ao: v3v3_ao {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "v3v3_ao";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&bsec {
|
||||||
|
board_id: board_id@f0 {
|
||||||
|
reg = <0xf0 0x4>;
|
||||||
|
st,non-secure-otp;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu0 {
|
||||||
|
cpu-supply = <&vddcpu>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&hash {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c4 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c4_pins_a>;
|
||||||
|
i2c-scl-rising-time-ns = <185>;
|
||||||
|
i2c-scl-falling-time-ns = <20>;
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
status = "disabled";
|
||||||
|
secure-status = "okay";
|
||||||
|
|
||||||
|
pmic: stpmic@33 {
|
||||||
|
compatible = "st,stpmic1";
|
||||||
|
reg = <0x33>;
|
||||||
|
|
||||||
|
status = "disabled";
|
||||||
|
secure-status = "okay";
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
compatible = "st,stpmic1-regulators";
|
||||||
|
buck1-supply = <&vin>;
|
||||||
|
buck2-supply = <&vin>;
|
||||||
|
buck3-supply = <&vin>;
|
||||||
|
buck4-supply = <&vin>;
|
||||||
|
ldo1-supply = <&vin>;
|
||||||
|
ldo4-supply = <&vin>;
|
||||||
|
ldo5-supply = <&vin>;
|
||||||
|
ldo6-supply = <&vin>;
|
||||||
|
vref_ddr-supply = <&vin>;
|
||||||
|
pwr_sw1-supply = <&bst_out>;
|
||||||
|
pwr_sw2-supply = <&v3v3_ao>;
|
||||||
|
|
||||||
|
vddcpu: buck1 {
|
||||||
|
regulator-name = "vddcpu";
|
||||||
|
regulator-min-microvolt = <1250000>;
|
||||||
|
regulator-max-microvolt = <1250000>;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-over-current-protection;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_ddr: buck2 {
|
||||||
|
regulator-name = "vdd_ddr";
|
||||||
|
regulator-min-microvolt = <1350000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-over-current-protection;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd: buck3 {
|
||||||
|
regulator-name = "vdd";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-always-on;
|
||||||
|
st,mask-reset;
|
||||||
|
regulator-over-current-protection;
|
||||||
|
};
|
||||||
|
|
||||||
|
vddcore: buck4 {
|
||||||
|
regulator-name = "vddcore";
|
||||||
|
regulator-min-microvolt = <1250000>;
|
||||||
|
regulator-max-microvolt = <1250000>;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-over-current-protection;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_adc: ldo1 {
|
||||||
|
regulator-name = "vdd_adc";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_usb: ldo4 {
|
||||||
|
regulator-name = "vdd_usb";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_sd: ldo5 {
|
||||||
|
regulator-name = "vdd_sd";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
v1v8_periph: ldo6 {
|
||||||
|
regulator-name = "v1v8_periph";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vref_ddr: vref_ddr {
|
||||||
|
regulator-name = "vref_ddr";
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
bst_out: boost {
|
||||||
|
regulator-name = "bst_out";
|
||||||
|
};
|
||||||
|
|
||||||
|
v3v3_sw: pwr_sw2 {
|
||||||
|
regulator-name = "v3v3_sw";
|
||||||
|
regulator-active-discharge = <1>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&iwdg2 {
|
||||||
|
timeout-sec = <32>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&nvmem_layout {
|
||||||
|
nvmem-cells = <&cfg0_otp>,
|
||||||
|
<&part_number_otp>,
|
||||||
|
<&monotonic_otp>,
|
||||||
|
<&nand_otp>,
|
||||||
|
<&nand2_otp>,
|
||||||
|
<&uid_otp>,
|
||||||
|
<&hw2_otp>,
|
||||||
|
<&pkh_otp>,
|
||||||
|
<&board_id>;
|
||||||
|
|
||||||
|
nvmem-cell-names = "cfg0_otp",
|
||||||
|
"part_number_otp",
|
||||||
|
"monotonic_otp",
|
||||||
|
"nand_otp",
|
||||||
|
"nand2_otp",
|
||||||
|
"uid_otp",
|
||||||
|
"hw2_otp",
|
||||||
|
"pkh_otp",
|
||||||
|
"board_id";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pka {
|
||||||
|
secure-status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pwr_regulators {
|
||||||
|
vdd-supply = <&vdd>;
|
||||||
|
vdd_3v3_usbfs-supply = <&vdd_usb>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&rcc {
|
||||||
|
st,clksrc = <
|
||||||
|
CLK_MPU_PLL1P
|
||||||
|
CLK_AXI_PLL2P
|
||||||
|
CLK_MLAHBS_PLL3
|
||||||
|
CLK_CKPER_HSE
|
||||||
|
CLK_RTC_LSE
|
||||||
|
CLK_SDMMC1_PLL4P
|
||||||
|
CLK_SDMMC2_PLL4P
|
||||||
|
CLK_STGEN_HSE
|
||||||
|
CLK_USBPHY_HSE
|
||||||
|
CLK_I2C4_HSI
|
||||||
|
CLK_USBO_USBPHY
|
||||||
|
CLK_I2C12_HSI
|
||||||
|
CLK_UART2_HSI
|
||||||
|
CLK_UART4_HSI
|
||||||
|
CLK_SAES_AXI
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,clkdiv = <
|
||||||
|
DIV(DIV_AXI, 0)
|
||||||
|
DIV(DIV_MLAHB, 0)
|
||||||
|
DIV(DIV_APB1, 1)
|
||||||
|
DIV(DIV_APB2, 1)
|
||||||
|
DIV(DIV_APB3, 1)
|
||||||
|
DIV(DIV_APB4, 1)
|
||||||
|
DIV(DIV_APB5, 2)
|
||||||
|
DIV(DIV_APB6, 1)
|
||||||
|
DIV(DIV_RTC, 0)
|
||||||
|
>;
|
||||||
|
|
||||||
|
st,pll_vco {
|
||||||
|
pll1_vco_1300Mhz: pll1-vco-1300Mhz {
|
||||||
|
src = < CLK_PLL12_HSE >;
|
||||||
|
divmn = < 2 80 >;
|
||||||
|
frac = < 0x800 >;
|
||||||
|
};
|
||||||
|
|
||||||
|
pll2_vco_1066Mhz: pll2-vco-1066Mhz {
|
||||||
|
src = < CLK_PLL12_HSE >;
|
||||||
|
divmn = < 2 65 >;
|
||||||
|
frac = < 0x1400 >;
|
||||||
|
};
|
||||||
|
|
||||||
|
pll3_vco_417_8Mhz: pll2-vco-417_8Mhz {
|
||||||
|
src = < CLK_PLL3_HSE >;
|
||||||
|
divmn = < 1 33 >;
|
||||||
|
frac = < 0x1a04 >;
|
||||||
|
};
|
||||||
|
|
||||||
|
pll4_vco_600Mhz: pll2-vco-600Mhz {
|
||||||
|
src = < CLK_PLL4_HSE >;
|
||||||
|
divmn = < 1 49 >;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* VCO = 1300.0 MHz => P = 650 (CPU) */
|
||||||
|
pll1:st,pll@0 {
|
||||||
|
compatible = "st,stm32mp1-pll";
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
st,pll = < &pll1_cfg1 >;
|
||||||
|
|
||||||
|
pll1_cfg1: pll1_cfg1 {
|
||||||
|
st,pll_vco = < &pll1_vco_1300Mhz >;
|
||||||
|
st,pll_div_pqr = < 0 1 1 >;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* VCO = 1066.0 MHz => P = 266 (AXI), Q = 266, R = 533 (DDR) */
|
||||||
|
pll2:st,pll@1 {
|
||||||
|
compatible = "st,stm32mp1-pll";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
st,pll = < &pll2_cfg1 >;
|
||||||
|
|
||||||
|
pll2_cfg1: pll2_cfg1 {
|
||||||
|
st,pll_vco = < &pll2_vco_1066Mhz >;
|
||||||
|
st,pll_div_pqr = < 1 1 0 >;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* VCO = 417.8 MHz => P = 209, Q = 24, R = 209 */
|
||||||
|
pll3:st,pll@2 {
|
||||||
|
compatible = "st,stm32mp1-pll";
|
||||||
|
reg = <2>;
|
||||||
|
|
||||||
|
st,pll = < &pll3_cfg1 >;
|
||||||
|
|
||||||
|
pll3_cfg1: pll3_cfg1 {
|
||||||
|
st,pll_vco = < &pll3_vco_417_8Mhz >;
|
||||||
|
st,pll_div_pqr = < 1 16 1 >;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* VCO = 600.0 MHz => P = 50, Q = 10, R = 100 */
|
||||||
|
pll4:st,pll@3 {
|
||||||
|
compatible = "st,stm32mp1-pll";
|
||||||
|
reg = <3>;
|
||||||
|
|
||||||
|
st,pll = < &pll4_cfg1 >;
|
||||||
|
|
||||||
|
pll4_cfg1: pll4_cfg1 {
|
||||||
|
st,pll_vco = < &pll4_vco_600Mhz >;
|
||||||
|
st,pll_div_pqr = < 11 59 5 >;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&rng {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&saes {
|
||||||
|
secure-status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdmmc1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdmmc1_b4_pins_a>;
|
||||||
|
disable-wp;
|
||||||
|
st,neg-edge;
|
||||||
|
bus-width = <4>;
|
||||||
|
vmmc-supply = <&vdd_sd>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart4 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart4_pins_a>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart8 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart8_pins_a>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usart1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usart1_pins_a>;
|
||||||
|
uart-has-rtscts;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
5
fdts/stm32mp13xa.dtsi
Normal file
5
fdts/stm32mp13xa.dtsi
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
36
fdts/stm32mp13xc.dtsi
Normal file
36
fdts/stm32mp13xc.dtsi
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32mp13xa.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
cryp: crypto@54002000 {
|
||||||
|
compatible = "st,stm32mp1-cryp";
|
||||||
|
reg = <0x54002000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc CRYP1>;
|
||||||
|
resets = <&rcc CRYP1_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
saes: saes@54005000 {
|
||||||
|
compatible = "st,stm32-saes";
|
||||||
|
reg = <0x54005000 0x400>;
|
||||||
|
clocks = <&rcc SAES_K>;
|
||||||
|
resets = <&rcc SAES_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pka: pka@54006000 {
|
||||||
|
compatible = "st,stm32-pka64";
|
||||||
|
reg = <0x54006000 0x2000>;
|
||||||
|
clocks = <&rcc PKA>;
|
||||||
|
resets = <&rcc PKA_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
5
fdts/stm32mp13xd.dtsi
Normal file
5
fdts/stm32mp13xd.dtsi
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
35
fdts/stm32mp13xf.dtsi
Normal file
35
fdts/stm32mp13xf.dtsi
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
#include "stm32mp13xd.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
cryp: crypto@54002000 {
|
||||||
|
compatible = "st,stm32mp1-cryp";
|
||||||
|
reg = <0x54002000 0x400>;
|
||||||
|
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rcc CRYP1>;
|
||||||
|
resets = <&rcc CRYP1_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
saes: saes@54005000 {
|
||||||
|
compatible = "st,stm32-saes";
|
||||||
|
reg = <0x54005000 0x400>;
|
||||||
|
clocks = <&rcc SAES_K>;
|
||||||
|
resets = <&rcc SAES_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pka: pka@54006000 {
|
||||||
|
compatible = "st,stm32-pka64";
|
||||||
|
reg = <0x54006000 0x2000>;
|
||||||
|
clocks = <&rcc PKA>;
|
||||||
|
resets = <&rcc PKA_R>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
1878
include/drivers/st/stm32mp13_rcc.h
Normal file
1878
include/drivers/st/stm32mp13_rcc.h
Normal file
File diff suppressed because it is too large
Load diff
2328
include/drivers/st/stm32mp15_rcc.h
Normal file
2328
include/drivers/st/stm32mp15_rcc.h
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2021, STMicroelectronics - All Rights Reserved
|
* Copyright (c) 2017-2022, STMicroelectronics - All Rights Reserved
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -48,4 +48,11 @@ static inline void print_pmic_info_and_debug(void)
|
||||||
*/
|
*/
|
||||||
int pmic_ddr_power_init(enum ddr_type ddr_type);
|
int pmic_ddr_power_init(enum ddr_type ddr_type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* pmic_voltages_init - Update voltages for platform init
|
||||||
|
*
|
||||||
|
* Returns 0 on success, and negative values on errors
|
||||||
|
*/
|
||||||
|
int pmic_voltages_init(void);
|
||||||
|
|
||||||
#endif /* STM32MP_PMIC_H */
|
#endif /* STM32MP_PMIC_H */
|
||||||
|
|
|
@ -1,278 +1,12 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) STMicroelectronics 2018 - All Rights Reserved
|
* Copyright (C) STMicroelectronics 2018-2022 - All Rights Reserved
|
||||||
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _DT_BINDINGS_STM32MP1_CLKS_H_
|
#if STM32MP13
|
||||||
#define _DT_BINDINGS_STM32MP1_CLKS_H_
|
#include "stm32mp13-clks.h"
|
||||||
|
#endif
|
||||||
/* OSCILLATOR clocks */
|
#if STM32MP15
|
||||||
#define CK_HSE 0
|
#include "stm32mp15-clks.h"
|
||||||
#define CK_CSI 1
|
#endif
|
||||||
#define CK_LSI 2
|
|
||||||
#define CK_LSE 3
|
|
||||||
#define CK_HSI 4
|
|
||||||
#define CK_HSE_DIV2 5
|
|
||||||
|
|
||||||
/* Bus clocks */
|
|
||||||
#define TIM2 6
|
|
||||||
#define TIM3 7
|
|
||||||
#define TIM4 8
|
|
||||||
#define TIM5 9
|
|
||||||
#define TIM6 10
|
|
||||||
#define TIM7 11
|
|
||||||
#define TIM12 12
|
|
||||||
#define TIM13 13
|
|
||||||
#define TIM14 14
|
|
||||||
#define LPTIM1 15
|
|
||||||
#define SPI2 16
|
|
||||||
#define SPI3 17
|
|
||||||
#define USART2 18
|
|
||||||
#define USART3 19
|
|
||||||
#define UART4 20
|
|
||||||
#define UART5 21
|
|
||||||
#define UART7 22
|
|
||||||
#define UART8 23
|
|
||||||
#define I2C1 24
|
|
||||||
#define I2C2 25
|
|
||||||
#define I2C3 26
|
|
||||||
#define I2C5 27
|
|
||||||
#define SPDIF 28
|
|
||||||
#define CEC 29
|
|
||||||
#define DAC12 30
|
|
||||||
#define MDIO 31
|
|
||||||
#define TIM1 32
|
|
||||||
#define TIM8 33
|
|
||||||
#define TIM15 34
|
|
||||||
#define TIM16 35
|
|
||||||
#define TIM17 36
|
|
||||||
#define SPI1 37
|
|
||||||
#define SPI4 38
|
|
||||||
#define SPI5 39
|
|
||||||
#define USART6 40
|
|
||||||
#define SAI1 41
|
|
||||||
#define SAI2 42
|
|
||||||
#define SAI3 43
|
|
||||||
#define DFSDM 44
|
|
||||||
#define FDCAN 45
|
|
||||||
#define LPTIM2 46
|
|
||||||
#define LPTIM3 47
|
|
||||||
#define LPTIM4 48
|
|
||||||
#define LPTIM5 49
|
|
||||||
#define SAI4 50
|
|
||||||
#define SYSCFG 51
|
|
||||||
#define VREF 52
|
|
||||||
#define TMPSENS 53
|
|
||||||
#define PMBCTRL 54
|
|
||||||
#define HDP 55
|
|
||||||
#define LTDC 56
|
|
||||||
#define DSI 57
|
|
||||||
#define IWDG2 58
|
|
||||||
#define USBPHY 59
|
|
||||||
#define STGENRO 60
|
|
||||||
#define SPI6 61
|
|
||||||
#define I2C4 62
|
|
||||||
#define I2C6 63
|
|
||||||
#define USART1 64
|
|
||||||
#define RTCAPB 65
|
|
||||||
#define TZC1 66
|
|
||||||
#define TZPC 67
|
|
||||||
#define IWDG1 68
|
|
||||||
#define BSEC 69
|
|
||||||
#define STGEN 70
|
|
||||||
#define DMA1 71
|
|
||||||
#define DMA2 72
|
|
||||||
#define DMAMUX 73
|
|
||||||
#define ADC12 74
|
|
||||||
#define USBO 75
|
|
||||||
#define SDMMC3 76
|
|
||||||
#define DCMI 77
|
|
||||||
#define CRYP2 78
|
|
||||||
#define HASH2 79
|
|
||||||
#define RNG2 80
|
|
||||||
#define CRC2 81
|
|
||||||
#define HSEM 82
|
|
||||||
#define IPCC 83
|
|
||||||
#define GPIOA 84
|
|
||||||
#define GPIOB 85
|
|
||||||
#define GPIOC 86
|
|
||||||
#define GPIOD 87
|
|
||||||
#define GPIOE 88
|
|
||||||
#define GPIOF 89
|
|
||||||
#define GPIOG 90
|
|
||||||
#define GPIOH 91
|
|
||||||
#define GPIOI 92
|
|
||||||
#define GPIOJ 93
|
|
||||||
#define GPIOK 94
|
|
||||||
#define GPIOZ 95
|
|
||||||
#define CRYP1 96
|
|
||||||
#define HASH1 97
|
|
||||||
#define RNG1 98
|
|
||||||
#define BKPSRAM 99
|
|
||||||
#define MDMA 100
|
|
||||||
#define GPU 101
|
|
||||||
#define ETHCK 102
|
|
||||||
#define ETHTX 103
|
|
||||||
#define ETHRX 104
|
|
||||||
#define ETHMAC 105
|
|
||||||
#define FMC 106
|
|
||||||
#define QSPI 107
|
|
||||||
#define SDMMC1 108
|
|
||||||
#define SDMMC2 109
|
|
||||||
#define CRC1 110
|
|
||||||
#define USBH 111
|
|
||||||
#define ETHSTP 112
|
|
||||||
#define TZC2 113
|
|
||||||
|
|
||||||
/* Kernel clocks */
|
|
||||||
#define SDMMC1_K 118
|
|
||||||
#define SDMMC2_K 119
|
|
||||||
#define SDMMC3_K 120
|
|
||||||
#define FMC_K 121
|
|
||||||
#define QSPI_K 122
|
|
||||||
#define ETHCK_K 123
|
|
||||||
#define RNG1_K 124
|
|
||||||
#define RNG2_K 125
|
|
||||||
#define GPU_K 126
|
|
||||||
#define USBPHY_K 127
|
|
||||||
#define STGEN_K 128
|
|
||||||
#define SPDIF_K 129
|
|
||||||
#define SPI1_K 130
|
|
||||||
#define SPI2_K 131
|
|
||||||
#define SPI3_K 132
|
|
||||||
#define SPI4_K 133
|
|
||||||
#define SPI5_K 134
|
|
||||||
#define SPI6_K 135
|
|
||||||
#define CEC_K 136
|
|
||||||
#define I2C1_K 137
|
|
||||||
#define I2C2_K 138
|
|
||||||
#define I2C3_K 139
|
|
||||||
#define I2C4_K 140
|
|
||||||
#define I2C5_K 141
|
|
||||||
#define I2C6_K 142
|
|
||||||
#define LPTIM1_K 143
|
|
||||||
#define LPTIM2_K 144
|
|
||||||
#define LPTIM3_K 145
|
|
||||||
#define LPTIM4_K 146
|
|
||||||
#define LPTIM5_K 147
|
|
||||||
#define USART1_K 148
|
|
||||||
#define USART2_K 149
|
|
||||||
#define USART3_K 150
|
|
||||||
#define UART4_K 151
|
|
||||||
#define UART5_K 152
|
|
||||||
#define USART6_K 153
|
|
||||||
#define UART7_K 154
|
|
||||||
#define UART8_K 155
|
|
||||||
#define DFSDM_K 156
|
|
||||||
#define FDCAN_K 157
|
|
||||||
#define SAI1_K 158
|
|
||||||
#define SAI2_K 159
|
|
||||||
#define SAI3_K 160
|
|
||||||
#define SAI4_K 161
|
|
||||||
#define ADC12_K 162
|
|
||||||
#define DSI_K 163
|
|
||||||
#define DSI_PX 164
|
|
||||||
#define ADFSDM_K 165
|
|
||||||
#define USBO_K 166
|
|
||||||
#define LTDC_PX 167
|
|
||||||
#define DAC12_K 168
|
|
||||||
#define ETHPTP_K 169
|
|
||||||
|
|
||||||
/* PLL */
|
|
||||||
#define PLL1 176
|
|
||||||
#define PLL2 177
|
|
||||||
#define PLL3 178
|
|
||||||
#define PLL4 179
|
|
||||||
|
|
||||||
/* ODF */
|
|
||||||
#define PLL1_P 180
|
|
||||||
#define PLL1_Q 181
|
|
||||||
#define PLL1_R 182
|
|
||||||
#define PLL2_P 183
|
|
||||||
#define PLL2_Q 184
|
|
||||||
#define PLL2_R 185
|
|
||||||
#define PLL3_P 186
|
|
||||||
#define PLL3_Q 187
|
|
||||||
#define PLL3_R 188
|
|
||||||
#define PLL4_P 189
|
|
||||||
#define PLL4_Q 190
|
|
||||||
#define PLL4_R 191
|
|
||||||
|
|
||||||
/* AUX */
|
|
||||||
#define RTC 192
|
|
||||||
|
|
||||||
/* MCLK */
|
|
||||||
#define CK_PER 193
|
|
||||||
#define CK_MPU 194
|
|
||||||
#define CK_AXI 195
|
|
||||||
#define CK_MCU 196
|
|
||||||
|
|
||||||
/* Time base */
|
|
||||||
#define TIM2_K 197
|
|
||||||
#define TIM3_K 198
|
|
||||||
#define TIM4_K 199
|
|
||||||
#define TIM5_K 200
|
|
||||||
#define TIM6_K 201
|
|
||||||
#define TIM7_K 202
|
|
||||||
#define TIM12_K 203
|
|
||||||
#define TIM13_K 204
|
|
||||||
#define TIM14_K 205
|
|
||||||
#define TIM1_K 206
|
|
||||||
#define TIM8_K 207
|
|
||||||
#define TIM15_K 208
|
|
||||||
#define TIM16_K 209
|
|
||||||
#define TIM17_K 210
|
|
||||||
|
|
||||||
/* MCO clocks */
|
|
||||||
#define CK_MCO1 211
|
|
||||||
#define CK_MCO2 212
|
|
||||||
|
|
||||||
/* TRACE & DEBUG clocks */
|
|
||||||
#define CK_DBG 214
|
|
||||||
#define CK_TRACE 215
|
|
||||||
|
|
||||||
/* DDR */
|
|
||||||
#define DDRC1 220
|
|
||||||
#define DDRC1LP 221
|
|
||||||
#define DDRC2 222
|
|
||||||
#define DDRC2LP 223
|
|
||||||
#define DDRPHYC 224
|
|
||||||
#define DDRPHYCLP 225
|
|
||||||
#define DDRCAPB 226
|
|
||||||
#define DDRCAPBLP 227
|
|
||||||
#define AXIDCG 228
|
|
||||||
#define DDRPHYCAPB 229
|
|
||||||
#define DDRPHYCAPBLP 230
|
|
||||||
#define DDRPERFM 231
|
|
||||||
|
|
||||||
#define STM32MP1_LAST_CLK 232
|
|
||||||
|
|
||||||
/* SCMI clock identifiers */
|
|
||||||
#define CK_SCMI0_HSE 0
|
|
||||||
#define CK_SCMI0_HSI 1
|
|
||||||
#define CK_SCMI0_CSI 2
|
|
||||||
#define CK_SCMI0_LSE 3
|
|
||||||
#define CK_SCMI0_LSI 4
|
|
||||||
#define CK_SCMI0_PLL2_Q 5
|
|
||||||
#define CK_SCMI0_PLL2_R 6
|
|
||||||
#define CK_SCMI0_MPU 7
|
|
||||||
#define CK_SCMI0_AXI 8
|
|
||||||
#define CK_SCMI0_BSEC 9
|
|
||||||
#define CK_SCMI0_CRYP1 10
|
|
||||||
#define CK_SCMI0_GPIOZ 11
|
|
||||||
#define CK_SCMI0_HASH1 12
|
|
||||||
#define CK_SCMI0_I2C4 13
|
|
||||||
#define CK_SCMI0_I2C6 14
|
|
||||||
#define CK_SCMI0_IWDG1 15
|
|
||||||
#define CK_SCMI0_RNG1 16
|
|
||||||
#define CK_SCMI0_RTC 17
|
|
||||||
#define CK_SCMI0_RTCAPB 18
|
|
||||||
#define CK_SCMI0_SPI6 19
|
|
||||||
#define CK_SCMI0_USART1 20
|
|
||||||
|
|
||||||
#define CK_SCMI1_PLL3_Q 0
|
|
||||||
#define CK_SCMI1_PLL3_R 1
|
|
||||||
#define CK_SCMI1_MCU 2
|
|
||||||
|
|
||||||
#endif /* _DT_BINDINGS_STM32MP1_CLKS_H_ */
|
|
||||||
|
|
|
@ -1,283 +1,11 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2017, STMicroelectronics - All Rights Reserved
|
* Copyright (C) 2017-2022, STMicroelectronics - All Rights Reserved
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _DT_BINDINGS_CLOCK_STM32MP1_CLKSRC_H_
|
#if STM32MP13
|
||||||
#define _DT_BINDINGS_CLOCK_STM32MP1_CLKSRC_H_
|
#include "stm32mp13-clksrc.h"
|
||||||
|
#endif
|
||||||
/* PLL output is enable when x=1, with x=p,q or r */
|
#if STM32MP15
|
||||||
#define PQR(p, q, r) (((p) & 1) | (((q) & 1) << 1) | (((r) & 1) << 2))
|
#include "stm32mp15-clksrc.h"
|
||||||
|
|
||||||
/* st,clksrc: mandatory clock source */
|
|
||||||
|
|
||||||
#define CLK_MPU_HSI 0x00000200
|
|
||||||
#define CLK_MPU_HSE 0x00000201
|
|
||||||
#define CLK_MPU_PLL1P 0x00000202
|
|
||||||
#define CLK_MPU_PLL1P_DIV 0x00000203
|
|
||||||
|
|
||||||
#define CLK_AXI_HSI 0x00000240
|
|
||||||
#define CLK_AXI_HSE 0x00000241
|
|
||||||
#define CLK_AXI_PLL2P 0x00000242
|
|
||||||
|
|
||||||
#define CLK_MCU_HSI 0x00000480
|
|
||||||
#define CLK_MCU_HSE 0x00000481
|
|
||||||
#define CLK_MCU_CSI 0x00000482
|
|
||||||
#define CLK_MCU_PLL3P 0x00000483
|
|
||||||
|
|
||||||
#define CLK_PLL12_HSI 0x00000280
|
|
||||||
#define CLK_PLL12_HSE 0x00000281
|
|
||||||
|
|
||||||
#define CLK_PLL3_HSI 0x00008200
|
|
||||||
#define CLK_PLL3_HSE 0x00008201
|
|
||||||
#define CLK_PLL3_CSI 0x00008202
|
|
||||||
|
|
||||||
#define CLK_PLL4_HSI 0x00008240
|
|
||||||
#define CLK_PLL4_HSE 0x00008241
|
|
||||||
#define CLK_PLL4_CSI 0x00008242
|
|
||||||
#define CLK_PLL4_I2SCKIN 0x00008243
|
|
||||||
|
|
||||||
#define CLK_RTC_DISABLED 0x00001400
|
|
||||||
#define CLK_RTC_LSE 0x00001401
|
|
||||||
#define CLK_RTC_LSI 0x00001402
|
|
||||||
#define CLK_RTC_HSE 0x00001403
|
|
||||||
|
|
||||||
#define CLK_MCO1_HSI 0x00008000
|
|
||||||
#define CLK_MCO1_HSE 0x00008001
|
|
||||||
#define CLK_MCO1_CSI 0x00008002
|
|
||||||
#define CLK_MCO1_LSI 0x00008003
|
|
||||||
#define CLK_MCO1_LSE 0x00008004
|
|
||||||
#define CLK_MCO1_DISABLED 0x0000800F
|
|
||||||
|
|
||||||
#define CLK_MCO2_MPU 0x00008040
|
|
||||||
#define CLK_MCO2_AXI 0x00008041
|
|
||||||
#define CLK_MCO2_MCU 0x00008042
|
|
||||||
#define CLK_MCO2_PLL4P 0x00008043
|
|
||||||
#define CLK_MCO2_HSE 0x00008044
|
|
||||||
#define CLK_MCO2_HSI 0x00008045
|
|
||||||
#define CLK_MCO2_DISABLED 0x0000804F
|
|
||||||
|
|
||||||
/* st,pkcs: peripheral kernel clock source */
|
|
||||||
|
|
||||||
#define CLK_I2C12_PCLK1 0x00008C00
|
|
||||||
#define CLK_I2C12_PLL4R 0x00008C01
|
|
||||||
#define CLK_I2C12_HSI 0x00008C02
|
|
||||||
#define CLK_I2C12_CSI 0x00008C03
|
|
||||||
#define CLK_I2C12_DISABLED 0x00008C07
|
|
||||||
|
|
||||||
#define CLK_I2C35_PCLK1 0x00008C40
|
|
||||||
#define CLK_I2C35_PLL4R 0x00008C41
|
|
||||||
#define CLK_I2C35_HSI 0x00008C42
|
|
||||||
#define CLK_I2C35_CSI 0x00008C43
|
|
||||||
#define CLK_I2C35_DISABLED 0x00008C47
|
|
||||||
|
|
||||||
#define CLK_I2C46_PCLK5 0x00000C00
|
|
||||||
#define CLK_I2C46_PLL3Q 0x00000C01
|
|
||||||
#define CLK_I2C46_HSI 0x00000C02
|
|
||||||
#define CLK_I2C46_CSI 0x00000C03
|
|
||||||
#define CLK_I2C46_DISABLED 0x00000C07
|
|
||||||
|
|
||||||
#define CLK_SAI1_PLL4Q 0x00008C80
|
|
||||||
#define CLK_SAI1_PLL3Q 0x00008C81
|
|
||||||
#define CLK_SAI1_I2SCKIN 0x00008C82
|
|
||||||
#define CLK_SAI1_CKPER 0x00008C83
|
|
||||||
#define CLK_SAI1_PLL3R 0x00008C84
|
|
||||||
#define CLK_SAI1_DISABLED 0x00008C87
|
|
||||||
|
|
||||||
#define CLK_SAI2_PLL4Q 0x00008CC0
|
|
||||||
#define CLK_SAI2_PLL3Q 0x00008CC1
|
|
||||||
#define CLK_SAI2_I2SCKIN 0x00008CC2
|
|
||||||
#define CLK_SAI2_CKPER 0x00008CC3
|
|
||||||
#define CLK_SAI2_SPDIF 0x00008CC4
|
|
||||||
#define CLK_SAI2_PLL3R 0x00008CC5
|
|
||||||
#define CLK_SAI2_DISABLED 0x00008CC7
|
|
||||||
|
|
||||||
#define CLK_SAI3_PLL4Q 0x00008D00
|
|
||||||
#define CLK_SAI3_PLL3Q 0x00008D01
|
|
||||||
#define CLK_SAI3_I2SCKIN 0x00008D02
|
|
||||||
#define CLK_SAI3_CKPER 0x00008D03
|
|
||||||
#define CLK_SAI3_PLL3R 0x00008D04
|
|
||||||
#define CLK_SAI3_DISABLED 0x00008D07
|
|
||||||
|
|
||||||
#define CLK_SAI4_PLL4Q 0x00008D40
|
|
||||||
#define CLK_SAI4_PLL3Q 0x00008D41
|
|
||||||
#define CLK_SAI4_I2SCKIN 0x00008D42
|
|
||||||
#define CLK_SAI4_CKPER 0x00008D43
|
|
||||||
#define CLK_SAI4_PLL3R 0x00008D44
|
|
||||||
#define CLK_SAI4_DISABLED 0x00008D47
|
|
||||||
|
|
||||||
#define CLK_SPI2S1_PLL4P 0x00008D80
|
|
||||||
#define CLK_SPI2S1_PLL3Q 0x00008D81
|
|
||||||
#define CLK_SPI2S1_I2SCKIN 0x00008D82
|
|
||||||
#define CLK_SPI2S1_CKPER 0x00008D83
|
|
||||||
#define CLK_SPI2S1_PLL3R 0x00008D84
|
|
||||||
#define CLK_SPI2S1_DISABLED 0x00008D87
|
|
||||||
|
|
||||||
#define CLK_SPI2S23_PLL4P 0x00008DC0
|
|
||||||
#define CLK_SPI2S23_PLL3Q 0x00008DC1
|
|
||||||
#define CLK_SPI2S23_I2SCKIN 0x00008DC2
|
|
||||||
#define CLK_SPI2S23_CKPER 0x00008DC3
|
|
||||||
#define CLK_SPI2S23_PLL3R 0x00008DC4
|
|
||||||
#define CLK_SPI2S23_DISABLED 0x00008DC7
|
|
||||||
|
|
||||||
#define CLK_SPI45_PCLK2 0x00008E00
|
|
||||||
#define CLK_SPI45_PLL4Q 0x00008E01
|
|
||||||
#define CLK_SPI45_HSI 0x00008E02
|
|
||||||
#define CLK_SPI45_CSI 0x00008E03
|
|
||||||
#define CLK_SPI45_HSE 0x00008E04
|
|
||||||
#define CLK_SPI45_DISABLED 0x00008E07
|
|
||||||
|
|
||||||
#define CLK_SPI6_PCLK5 0x00000C40
|
|
||||||
#define CLK_SPI6_PLL4Q 0x00000C41
|
|
||||||
#define CLK_SPI6_HSI 0x00000C42
|
|
||||||
#define CLK_SPI6_CSI 0x00000C43
|
|
||||||
#define CLK_SPI6_HSE 0x00000C44
|
|
||||||
#define CLK_SPI6_PLL3Q 0x00000C45
|
|
||||||
#define CLK_SPI6_DISABLED 0x00000C47
|
|
||||||
|
|
||||||
#define CLK_UART6_PCLK2 0x00008E40
|
|
||||||
#define CLK_UART6_PLL4Q 0x00008E41
|
|
||||||
#define CLK_UART6_HSI 0x00008E42
|
|
||||||
#define CLK_UART6_CSI 0x00008E43
|
|
||||||
#define CLK_UART6_HSE 0x00008E44
|
|
||||||
#define CLK_UART6_DISABLED 0x00008E47
|
|
||||||
|
|
||||||
#define CLK_UART24_PCLK1 0x00008E80
|
|
||||||
#define CLK_UART24_PLL4Q 0x00008E81
|
|
||||||
#define CLK_UART24_HSI 0x00008E82
|
|
||||||
#define CLK_UART24_CSI 0x00008E83
|
|
||||||
#define CLK_UART24_HSE 0x00008E84
|
|
||||||
#define CLK_UART24_DISABLED 0x00008E87
|
|
||||||
|
|
||||||
#define CLK_UART35_PCLK1 0x00008EC0
|
|
||||||
#define CLK_UART35_PLL4Q 0x00008EC1
|
|
||||||
#define CLK_UART35_HSI 0x00008EC2
|
|
||||||
#define CLK_UART35_CSI 0x00008EC3
|
|
||||||
#define CLK_UART35_HSE 0x00008EC4
|
|
||||||
#define CLK_UART35_DISABLED 0x00008EC7
|
|
||||||
|
|
||||||
#define CLK_UART78_PCLK1 0x00008F00
|
|
||||||
#define CLK_UART78_PLL4Q 0x00008F01
|
|
||||||
#define CLK_UART78_HSI 0x00008F02
|
|
||||||
#define CLK_UART78_CSI 0x00008F03
|
|
||||||
#define CLK_UART78_HSE 0x00008F04
|
|
||||||
#define CLK_UART78_DISABLED 0x00008F07
|
|
||||||
|
|
||||||
#define CLK_UART1_PCLK5 0x00000C80
|
|
||||||
#define CLK_UART1_PLL3Q 0x00000C81
|
|
||||||
#define CLK_UART1_HSI 0x00000C82
|
|
||||||
#define CLK_UART1_CSI 0x00000C83
|
|
||||||
#define CLK_UART1_PLL4Q 0x00000C84
|
|
||||||
#define CLK_UART1_HSE 0x00000C85
|
|
||||||
#define CLK_UART1_DISABLED 0x00000C87
|
|
||||||
|
|
||||||
#define CLK_SDMMC12_HCLK6 0x00008F40
|
|
||||||
#define CLK_SDMMC12_PLL3R 0x00008F41
|
|
||||||
#define CLK_SDMMC12_PLL4P 0x00008F42
|
|
||||||
#define CLK_SDMMC12_HSI 0x00008F43
|
|
||||||
#define CLK_SDMMC12_DISABLED 0x00008F47
|
|
||||||
|
|
||||||
#define CLK_SDMMC3_HCLK2 0x00008F80
|
|
||||||
#define CLK_SDMMC3_PLL3R 0x00008F81
|
|
||||||
#define CLK_SDMMC3_PLL4P 0x00008F82
|
|
||||||
#define CLK_SDMMC3_HSI 0x00008F83
|
|
||||||
#define CLK_SDMMC3_DISABLED 0x00008F87
|
|
||||||
|
|
||||||
#define CLK_ETH_PLL4P 0x00008FC0
|
|
||||||
#define CLK_ETH_PLL3Q 0x00008FC1
|
|
||||||
#define CLK_ETH_DISABLED 0x00008FC3
|
|
||||||
|
|
||||||
#define CLK_QSPI_ACLK 0x00009000
|
|
||||||
#define CLK_QSPI_PLL3R 0x00009001
|
|
||||||
#define CLK_QSPI_PLL4P 0x00009002
|
|
||||||
#define CLK_QSPI_CKPER 0x00009003
|
|
||||||
|
|
||||||
#define CLK_FMC_ACLK 0x00009040
|
|
||||||
#define CLK_FMC_PLL3R 0x00009041
|
|
||||||
#define CLK_FMC_PLL4P 0x00009042
|
|
||||||
#define CLK_FMC_CKPER 0x00009043
|
|
||||||
|
|
||||||
#define CLK_FDCAN_HSE 0x000090C0
|
|
||||||
#define CLK_FDCAN_PLL3Q 0x000090C1
|
|
||||||
#define CLK_FDCAN_PLL4Q 0x000090C2
|
|
||||||
#define CLK_FDCAN_PLL4R 0x000090C3
|
|
||||||
|
|
||||||
#define CLK_SPDIF_PLL4P 0x00009140
|
|
||||||
#define CLK_SPDIF_PLL3Q 0x00009141
|
|
||||||
#define CLK_SPDIF_HSI 0x00009142
|
|
||||||
#define CLK_SPDIF_DISABLED 0x00009143
|
|
||||||
|
|
||||||
#define CLK_CEC_LSE 0x00009180
|
|
||||||
#define CLK_CEC_LSI 0x00009181
|
|
||||||
#define CLK_CEC_CSI_DIV122 0x00009182
|
|
||||||
#define CLK_CEC_DISABLED 0x00009183
|
|
||||||
|
|
||||||
#define CLK_USBPHY_HSE 0x000091C0
|
|
||||||
#define CLK_USBPHY_PLL4R 0x000091C1
|
|
||||||
#define CLK_USBPHY_HSE_DIV2 0x000091C2
|
|
||||||
#define CLK_USBPHY_DISABLED 0x000091C3
|
|
||||||
|
|
||||||
#define CLK_USBO_PLL4R 0x800091C0
|
|
||||||
#define CLK_USBO_USBPHY 0x800091C1
|
|
||||||
|
|
||||||
#define CLK_RNG1_CSI 0x00000CC0
|
|
||||||
#define CLK_RNG1_PLL4R 0x00000CC1
|
|
||||||
#define CLK_RNG1_LSE 0x00000CC2
|
|
||||||
#define CLK_RNG1_LSI 0x00000CC3
|
|
||||||
|
|
||||||
#define CLK_RNG2_CSI 0x00009200
|
|
||||||
#define CLK_RNG2_PLL4R 0x00009201
|
|
||||||
#define CLK_RNG2_LSE 0x00009202
|
|
||||||
#define CLK_RNG2_LSI 0x00009203
|
|
||||||
|
|
||||||
#define CLK_CKPER_HSI 0x00000D00
|
|
||||||
#define CLK_CKPER_CSI 0x00000D01
|
|
||||||
#define CLK_CKPER_HSE 0x00000D02
|
|
||||||
#define CLK_CKPER_DISABLED 0x00000D03
|
|
||||||
|
|
||||||
#define CLK_STGEN_HSI 0x00000D40
|
|
||||||
#define CLK_STGEN_HSE 0x00000D41
|
|
||||||
#define CLK_STGEN_DISABLED 0x00000D43
|
|
||||||
|
|
||||||
#define CLK_DSI_DSIPLL 0x00009240
|
|
||||||
#define CLK_DSI_PLL4P 0x00009241
|
|
||||||
|
|
||||||
#define CLK_ADC_PLL4R 0x00009280
|
|
||||||
#define CLK_ADC_CKPER 0x00009281
|
|
||||||
#define CLK_ADC_PLL3Q 0x00009282
|
|
||||||
#define CLK_ADC_DISABLED 0x00009283
|
|
||||||
|
|
||||||
#define CLK_LPTIM45_PCLK3 0x000092C0
|
|
||||||
#define CLK_LPTIM45_PLL4P 0x000092C1
|
|
||||||
#define CLK_LPTIM45_PLL3Q 0x000092C2
|
|
||||||
#define CLK_LPTIM45_LSE 0x000092C3
|
|
||||||
#define CLK_LPTIM45_LSI 0x000092C4
|
|
||||||
#define CLK_LPTIM45_CKPER 0x000092C5
|
|
||||||
#define CLK_LPTIM45_DISABLED 0x000092C7
|
|
||||||
|
|
||||||
#define CLK_LPTIM23_PCLK3 0x00009300
|
|
||||||
#define CLK_LPTIM23_PLL4Q 0x00009301
|
|
||||||
#define CLK_LPTIM23_CKPER 0x00009302
|
|
||||||
#define CLK_LPTIM23_LSE 0x00009303
|
|
||||||
#define CLK_LPTIM23_LSI 0x00009304
|
|
||||||
#define CLK_LPTIM23_DISABLED 0x00009307
|
|
||||||
|
|
||||||
#define CLK_LPTIM1_PCLK1 0x00009340
|
|
||||||
#define CLK_LPTIM1_PLL4P 0x00009341
|
|
||||||
#define CLK_LPTIM1_PLL3Q 0x00009342
|
|
||||||
#define CLK_LPTIM1_LSE 0x00009343
|
|
||||||
#define CLK_LPTIM1_LSI 0x00009344
|
|
||||||
#define CLK_LPTIM1_CKPER 0x00009345
|
|
||||||
#define CLK_LPTIM1_DISABLED 0x00009347
|
|
||||||
|
|
||||||
/* define for st,pll /csg */
|
|
||||||
#define SSCG_MODE_CENTER_SPREAD 0
|
|
||||||
#define SSCG_MODE_DOWN_SPREAD 1
|
|
||||||
|
|
||||||
/* define for st,drive */
|
|
||||||
#define LSEDRV_LOWEST 0
|
|
||||||
#define LSEDRV_MEDIUM_LOW 1
|
|
||||||
#define LSEDRV_MEDIUM_HIGH 2
|
|
||||||
#define LSEDRV_HIGHEST 3
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
230
include/dt-bindings/clock/stm32mp13-clks.h
Normal file
230
include/dt-bindings/clock/stm32mp13-clks.h
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ or BSD-3-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_STM32MP13_CLKS_H_
|
||||||
|
#define _DT_BINDINGS_STM32MP13_CLKS_H_
|
||||||
|
|
||||||
|
/* OSCILLATOR clocks */
|
||||||
|
#define CK_HSE 0
|
||||||
|
#define CK_CSI 1
|
||||||
|
#define CK_LSI 2
|
||||||
|
#define CK_LSE 3
|
||||||
|
#define CK_HSI 4
|
||||||
|
#define CK_HSE_DIV2 5
|
||||||
|
|
||||||
|
/* PLL */
|
||||||
|
#define PLL1 6
|
||||||
|
#define PLL2 7
|
||||||
|
#define PLL3 8
|
||||||
|
#define PLL4 9
|
||||||
|
|
||||||
|
/* ODF */
|
||||||
|
#define PLL1_P 10
|
||||||
|
#define PLL1_Q 11
|
||||||
|
#define PLL1_R 12
|
||||||
|
#define PLL2_P 13
|
||||||
|
#define PLL2_Q 14
|
||||||
|
#define PLL2_R 15
|
||||||
|
#define PLL3_P 16
|
||||||
|
#define PLL3_Q 17
|
||||||
|
#define PLL3_R 18
|
||||||
|
#define PLL4_P 19
|
||||||
|
#define PLL4_Q 20
|
||||||
|
#define PLL4_R 21
|
||||||
|
|
||||||
|
#define PCLK1 22
|
||||||
|
#define PCLK2 23
|
||||||
|
#define PCLK3 24
|
||||||
|
#define PCLK4 25
|
||||||
|
#define PCLK5 26
|
||||||
|
#define PCLK6 27
|
||||||
|
|
||||||
|
/* SYSTEM CLOCK */
|
||||||
|
#define CK_PER 28
|
||||||
|
#define CK_MPU 29
|
||||||
|
#define CK_AXI 30
|
||||||
|
#define CK_MLAHB 31
|
||||||
|
|
||||||
|
/* BASE TIMER */
|
||||||
|
#define CK_TIMG1 32
|
||||||
|
#define CK_TIMG2 33
|
||||||
|
#define CK_TIMG3 34
|
||||||
|
|
||||||
|
/* AUX */
|
||||||
|
#define RTC 35
|
||||||
|
|
||||||
|
/* TRACE & DEBUG clocks */
|
||||||
|
#define CK_DBG 36
|
||||||
|
#define CK_TRACE 37
|
||||||
|
|
||||||
|
/* MCO clocks */
|
||||||
|
#define CK_MCO1 38
|
||||||
|
#define CK_MCO2 39
|
||||||
|
|
||||||
|
/* IP clocks */
|
||||||
|
#define SYSCFG 40
|
||||||
|
#define VREF 41
|
||||||
|
#define TMPSENS 42
|
||||||
|
#define PMBCTRL 43
|
||||||
|
#define HDP 44
|
||||||
|
#define IWDG2 45
|
||||||
|
#define STGENRO 46
|
||||||
|
#define USART1 47
|
||||||
|
#define RTCAPB 48
|
||||||
|
#define TZC 49
|
||||||
|
#define TZPC 50
|
||||||
|
#define IWDG1 51
|
||||||
|
#define BSEC 52
|
||||||
|
#define DMA1 53
|
||||||
|
#define DMA2 54
|
||||||
|
#define DMAMUX1 55
|
||||||
|
#define DMAMUX2 56
|
||||||
|
#define GPIOA 57
|
||||||
|
#define GPIOB 58
|
||||||
|
#define GPIOC 59
|
||||||
|
#define GPIOD 60
|
||||||
|
#define GPIOE 61
|
||||||
|
#define GPIOF 62
|
||||||
|
#define GPIOG 63
|
||||||
|
#define GPIOH 64
|
||||||
|
#define GPIOI 65
|
||||||
|
#define CRYP1 66
|
||||||
|
#define HASH1 67
|
||||||
|
#define BKPSRAM 68
|
||||||
|
#define MDMA 69
|
||||||
|
#define CRC1 70
|
||||||
|
#define USBH 71
|
||||||
|
#define DMA3 72
|
||||||
|
#define TSC 73
|
||||||
|
#define PKA 74
|
||||||
|
#define AXIMC 75
|
||||||
|
#define MCE 76
|
||||||
|
#define ETH1TX 77
|
||||||
|
#define ETH2TX 78
|
||||||
|
#define ETH1RX 79
|
||||||
|
#define ETH2RX 80
|
||||||
|
#define ETH1MAC 81
|
||||||
|
#define ETH2MAC 82
|
||||||
|
#define ETH1STP 83
|
||||||
|
#define ETH2STP 84
|
||||||
|
|
||||||
|
/* IP clocks with parents */
|
||||||
|
#define SDMMC1_K 85
|
||||||
|
#define SDMMC2_K 86
|
||||||
|
#define ADC1_K 87
|
||||||
|
#define ADC2_K 88
|
||||||
|
#define FMC_K 89
|
||||||
|
#define QSPI_K 90
|
||||||
|
#define RNG1_K 91
|
||||||
|
#define USBPHY_K 92
|
||||||
|
#define STGEN_K 93
|
||||||
|
#define SPDIF_K 94
|
||||||
|
#define SPI1_K 95
|
||||||
|
#define SPI2_K 96
|
||||||
|
#define SPI3_K 97
|
||||||
|
#define SPI4_K 98
|
||||||
|
#define SPI5_K 99
|
||||||
|
#define I2C1_K 100
|
||||||
|
#define I2C2_K 101
|
||||||
|
#define I2C3_K 102
|
||||||
|
#define I2C4_K 103
|
||||||
|
#define I2C5_K 104
|
||||||
|
#define TIM2_K 105
|
||||||
|
#define TIM3_K 106
|
||||||
|
#define TIM4_K 107
|
||||||
|
#define TIM5_K 108
|
||||||
|
#define TIM6_K 109
|
||||||
|
#define TIM7_K 110
|
||||||
|
#define TIM12_K 111
|
||||||
|
#define TIM13_K 112
|
||||||
|
#define TIM14_K 113
|
||||||
|
#define TIM1_K 114
|
||||||
|
#define TIM8_K 115
|
||||||
|
#define TIM15_K 116
|
||||||
|
#define TIM16_K 117
|
||||||
|
#define TIM17_K 118
|
||||||
|
#define LPTIM1_K 119
|
||||||
|
#define LPTIM2_K 120
|
||||||
|
#define LPTIM3_K 121
|
||||||
|
#define LPTIM4_K 122
|
||||||
|
#define LPTIM5_K 123
|
||||||
|
#define USART1_K 124
|
||||||
|
#define USART2_K 125
|
||||||
|
#define USART3_K 126
|
||||||
|
#define UART4_K 127
|
||||||
|
#define UART5_K 128
|
||||||
|
#define USART6_K 129
|
||||||
|
#define UART7_K 130
|
||||||
|
#define UART8_K 131
|
||||||
|
#define DFSDM_K 132
|
||||||
|
#define FDCAN_K 133
|
||||||
|
#define SAI1_K 134
|
||||||
|
#define SAI2_K 135
|
||||||
|
#define ADFSDM_K 136
|
||||||
|
#define USBO_K 137
|
||||||
|
#define LTDC_PX 138
|
||||||
|
#define ETH1CK_K 139
|
||||||
|
#define ETH1PTP_K 140
|
||||||
|
#define ETH2CK_K 141
|
||||||
|
#define ETH2PTP_K 142
|
||||||
|
#define DCMIPP_K 143
|
||||||
|
#define SAES_K 144
|
||||||
|
#define DTS_K 145
|
||||||
|
|
||||||
|
/* DDR */
|
||||||
|
#define DDRC1 146
|
||||||
|
#define DDRC1LP 147
|
||||||
|
#define DDRC2 148
|
||||||
|
#define DDRC2LP 149
|
||||||
|
#define DDRPHYC 150
|
||||||
|
#define DDRPHYCLP 151
|
||||||
|
#define DDRCAPB 152
|
||||||
|
#define DDRCAPBLP 153
|
||||||
|
#define AXIDCG 154
|
||||||
|
#define DDRPHYCAPB 155
|
||||||
|
#define DDRPHYCAPBLP 156
|
||||||
|
#define DDRPERFM 157
|
||||||
|
|
||||||
|
#define ADC1 158
|
||||||
|
#define ADC2 159
|
||||||
|
#define SAI1 160
|
||||||
|
#define SAI2 161
|
||||||
|
|
||||||
|
#define STM32MP1_LAST_CLK 162
|
||||||
|
|
||||||
|
/* SCMI clock identifiers */
|
||||||
|
#define CK_SCMI0_HSE 0
|
||||||
|
#define CK_SCMI0_HSI 1
|
||||||
|
#define CK_SCMI0_CSI 2
|
||||||
|
#define CK_SCMI0_LSE 3
|
||||||
|
#define CK_SCMI0_LSI 4
|
||||||
|
#define CK_SCMI0_HSE_DIV2 5
|
||||||
|
#define CK_SCMI0_PLL2_Q 6
|
||||||
|
#define CK_SCMI0_PLL2_R 7
|
||||||
|
#define CK_SCMI0_PLL3_P 8
|
||||||
|
#define CK_SCMI0_PLL3_Q 9
|
||||||
|
#define CK_SCMI0_PLL3_R 10
|
||||||
|
#define CK_SCMI0_PLL4_P 11
|
||||||
|
#define CK_SCMI0_PLL4_Q 12
|
||||||
|
#define CK_SCMI0_PLL4_R 13
|
||||||
|
#define CK_SCMI0_MPU 14
|
||||||
|
#define CK_SCMI0_AXI 15
|
||||||
|
#define CK_SCMI0_MLAHB 16
|
||||||
|
#define CK_SCMI0_CKPER 17
|
||||||
|
#define CK_SCMI0_PCLK1 18
|
||||||
|
#define CK_SCMI0_PCLK2 19
|
||||||
|
#define CK_SCMI0_PCLK3 20
|
||||||
|
#define CK_SCMI0_PCLK4 21
|
||||||
|
#define CK_SCMI0_PCLK5 22
|
||||||
|
#define CK_SCMI0_PCLK6 23
|
||||||
|
#define CK_SCMI0_CKTIMG1 24
|
||||||
|
#define CK_SCMI0_CKTIMG2 25
|
||||||
|
#define CK_SCMI0_CKTIMG3 26
|
||||||
|
#define CK_SCMI0_RTC 27
|
||||||
|
#define CK_SCMI0_RTCAPB 28
|
||||||
|
#define CK_SCMI0_BSEC 29
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_STM32MP13_CLKS_H_ */
|
394
include/dt-bindings/clock/stm32mp13-clksrc.h
Normal file
394
include/dt-bindings/clock/stm32mp13-clksrc.h
Normal file
|
@ -0,0 +1,394 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_
|
||||||
|
#define _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_
|
||||||
|
|
||||||
|
#define CMD_DIV 0
|
||||||
|
#define CMD_MUX 1
|
||||||
|
#define CMD_CLK 2
|
||||||
|
#define CMD_RESERVED1 3
|
||||||
|
|
||||||
|
#define CMD_SHIFT 26
|
||||||
|
#define CMD_MASK 0xFC000000
|
||||||
|
#define CMD_DATA_MASK 0x03FFFFFF
|
||||||
|
|
||||||
|
#define DIV_ID_SHIFT 8
|
||||||
|
#define DIV_ID_MASK 0x0000FF00
|
||||||
|
|
||||||
|
#define DIV_DIVN_SHIFT 0
|
||||||
|
#define DIV_DIVN_MASK 0x000000FF
|
||||||
|
|
||||||
|
#define MUX_ID_SHIFT 4
|
||||||
|
#define MUX_ID_MASK 0x00000FF0
|
||||||
|
|
||||||
|
#define MUX_SEL_SHIFT 0
|
||||||
|
#define MUX_SEL_MASK 0x0000000F
|
||||||
|
|
||||||
|
#define CLK_ID_MASK GENMASK_32(19, 11)
|
||||||
|
#define CLK_ID_SHIFT 11
|
||||||
|
#define CLK_ON_MASK 0x00000400
|
||||||
|
#define CLK_ON_SHIFT 10
|
||||||
|
#define CLK_DIV_MASK GENMASK_32(9, 4)
|
||||||
|
#define CLK_DIV_SHIFT 4
|
||||||
|
#define CLK_SEL_MASK GENMASK_32(3, 0)
|
||||||
|
#define CLK_SEL_SHIFT 0
|
||||||
|
|
||||||
|
#define DIV_PLL1DIVP 0
|
||||||
|
#define DIV_PLL2DIVP 1
|
||||||
|
#define DIV_PLL2DIVQ 2
|
||||||
|
#define DIV_PLL2DIVR 3
|
||||||
|
#define DIV_PLL3DIVP 4
|
||||||
|
#define DIV_PLL3DIVQ 5
|
||||||
|
#define DIV_PLL3DIVR 6
|
||||||
|
#define DIV_PLL4DIVP 7
|
||||||
|
#define DIV_PLL4DIVQ 8
|
||||||
|
#define DIV_PLL4DIVR 9
|
||||||
|
#define DIV_MPU 10
|
||||||
|
#define DIV_AXI 11
|
||||||
|
#define DIV_MLAHB 12
|
||||||
|
#define DIV_APB1 13
|
||||||
|
#define DIV_APB2 14
|
||||||
|
#define DIV_APB3 15
|
||||||
|
#define DIV_APB4 16
|
||||||
|
#define DIV_APB5 17
|
||||||
|
#define DIV_APB6 18
|
||||||
|
#define DIV_RTC 19
|
||||||
|
#define DIV_MCO1 20
|
||||||
|
#define DIV_MCO2 21
|
||||||
|
#define DIV_HSI 22
|
||||||
|
#define DIV_TRACE 23
|
||||||
|
#define DIV_ETH1PTP 24
|
||||||
|
#define DIV_ETH2PTP 25
|
||||||
|
#define DIV_MAX 26
|
||||||
|
|
||||||
|
#define DIV(div_id, div) ((CMD_DIV << CMD_SHIFT) |\
|
||||||
|
((div_id) << DIV_ID_SHIFT |\
|
||||||
|
(div)))
|
||||||
|
|
||||||
|
#define CLKSRC(mux_id, sel) ((CMD_MUX << CMD_SHIFT) |\
|
||||||
|
((mux_id) << MUX_ID_SHIFT |\
|
||||||
|
(sel)))
|
||||||
|
|
||||||
|
/* MCO output is enable */
|
||||||
|
#define MCO_SRC(mco_id, sel) ((CMD_CLK << CMD_SHIFT) |\
|
||||||
|
(((mco_id) << CLK_ID_SHIFT) |\
|
||||||
|
(sel)) | CLK_ON_MASK)
|
||||||
|
|
||||||
|
#define MCO_DISABLED(mco_id) ((CMD_CLK << CMD_SHIFT) |\
|
||||||
|
((mco_id) << CLK_ID_SHIFT))
|
||||||
|
|
||||||
|
/* CLK output is enable */
|
||||||
|
#define CLK_SRC(clk_id, sel) ((CMD_CLK << CMD_SHIFT) |\
|
||||||
|
(((clk_id) << CLK_ID_SHIFT) |\
|
||||||
|
(sel)) | CLK_ON_MASK)
|
||||||
|
|
||||||
|
#define CLK_DISABLED(clk_id) ((CMD_CLK << CMD_SHIFT) |\
|
||||||
|
((clk_id) << CLK_ID_SHIFT))
|
||||||
|
|
||||||
|
#define MUX_MPU 0
|
||||||
|
#define MUX_AXI 1
|
||||||
|
#define MUX_MLAHB 2
|
||||||
|
#define MUX_PLL12 3
|
||||||
|
#define MUX_PLL3 4
|
||||||
|
#define MUX_PLL4 5
|
||||||
|
#define MUX_RTC 6
|
||||||
|
#define MUX_MCO1 7
|
||||||
|
#define MUX_MCO2 8
|
||||||
|
#define MUX_CKPER 9
|
||||||
|
#define MUX_KERNEL_BEGIN 10
|
||||||
|
#define MUX_ADC1 10
|
||||||
|
#define MUX_ADC2 11
|
||||||
|
#define MUX_DCMIPP 12
|
||||||
|
#define MUX_ETH1 13
|
||||||
|
#define MUX_ETH2 14
|
||||||
|
#define MUX_FDCAN 15
|
||||||
|
#define MUX_FMC 16
|
||||||
|
#define MUX_I2C12 17
|
||||||
|
#define MUX_I2C3 18
|
||||||
|
#define MUX_I2C4 19
|
||||||
|
#define MUX_I2C5 20
|
||||||
|
#define MUX_LPTIM1 21
|
||||||
|
#define MUX_LPTIM2 22
|
||||||
|
#define MUX_LPTIM3 23
|
||||||
|
#define MUX_LPTIM45 24
|
||||||
|
#define MUX_QSPI 25
|
||||||
|
#define MUX_RNG1 26
|
||||||
|
#define MUX_SAES 27
|
||||||
|
#define MUX_SAI1 28
|
||||||
|
#define MUX_SAI2 29
|
||||||
|
#define MUX_SDMMC1 30
|
||||||
|
#define MUX_SDMMC2 31
|
||||||
|
#define MUX_SPDIF 32
|
||||||
|
#define MUX_SPI1 33
|
||||||
|
#define MUX_SPI23 34
|
||||||
|
#define MUX_SPI4 35
|
||||||
|
#define MUX_SPI5 36
|
||||||
|
#define MUX_STGEN 37
|
||||||
|
#define MUX_UART1 38
|
||||||
|
#define MUX_UART2 39
|
||||||
|
#define MUX_UART35 40
|
||||||
|
#define MUX_UART4 41
|
||||||
|
#define MUX_UART6 42
|
||||||
|
#define MUX_UART78 43
|
||||||
|
#define MUX_USBO 44
|
||||||
|
#define MUX_USBPHY 45
|
||||||
|
#define MUX_MAX 46
|
||||||
|
|
||||||
|
#define CLK_MPU_HSI CLKSRC(MUX_MPU, 0)
|
||||||
|
#define CLK_MPU_HSE CLKSRC(MUX_MPU, 1)
|
||||||
|
#define CLK_MPU_PLL1P CLKSRC(MUX_MPU, 2)
|
||||||
|
#define CLK_MPU_PLL1P_DIV CLKSRC(MUX_MPU, 3)
|
||||||
|
|
||||||
|
#define CLK_AXI_HSI CLKSRC(MUX_AXI, 0)
|
||||||
|
#define CLK_AXI_HSE CLKSRC(MUX_AXI, 1)
|
||||||
|
#define CLK_AXI_PLL2P CLKSRC(MUX_AXI, 2)
|
||||||
|
|
||||||
|
#define CLK_MLAHBS_HSI CLKSRC(MUX_MLAHB, 0)
|
||||||
|
#define CLK_MLAHBS_HSE CLKSRC(MUX_MLAHB, 1)
|
||||||
|
#define CLK_MLAHBS_CSI CLKSRC(MUX_MLAHB, 2)
|
||||||
|
#define CLK_MLAHBS_PLL3 CLKSRC(MUX_MLAHB, 3)
|
||||||
|
|
||||||
|
#define CLK_PLL12_HSI CLKSRC(MUX_PLL12, 0)
|
||||||
|
#define CLK_PLL12_HSE CLKSRC(MUX_PLL12, 1)
|
||||||
|
|
||||||
|
#define CLK_PLL3_HSI CLKSRC(MUX_PLL3, 0)
|
||||||
|
#define CLK_PLL3_HSE CLKSRC(MUX_PLL3, 1)
|
||||||
|
#define CLK_PLL3_CSI CLKSRC(MUX_PLL3, 2)
|
||||||
|
|
||||||
|
#define CLK_PLL4_HSI CLKSRC(MUX_PLL4, 0)
|
||||||
|
#define CLK_PLL4_HSE CLKSRC(MUX_PLL4, 1)
|
||||||
|
#define CLK_PLL4_CSI CLKSRC(MUX_PLL4, 2)
|
||||||
|
|
||||||
|
#define CLK_RTC_DISABLED CLK_DISABLED(RTC)
|
||||||
|
#define CLK_RTC_LSE CLK_SRC(RTC, 1)
|
||||||
|
#define CLK_RTC_LSI CLK_SRC(RTC, 2)
|
||||||
|
#define CLK_RTC_HSE CLK_SRC(RTC, 3)
|
||||||
|
|
||||||
|
#define CLK_MCO1_HSI CLK_SRC(CK_MCO1, 0)
|
||||||
|
#define CLK_MCO1_HSE CLK_SRC(CK_MCO1, 1)
|
||||||
|
#define CLK_MCO1_CSI CLK_SRC(CK_MCO1, 2)
|
||||||
|
#define CLK_MCO1_LSI CLK_SRC(CK_MCO1, 3)
|
||||||
|
#define CLK_MCO1_LSE CLK_SRC(CK_MCO1, 4)
|
||||||
|
#define CLK_MCO1_DISABLED CLK_DISABLED(CK_MCO1)
|
||||||
|
|
||||||
|
#define CLK_MCO2_MPU CLK_SRC(CK_MCO2, 0)
|
||||||
|
#define CLK_MCO2_AXI CLK_SRC(CK_MCO2, 1)
|
||||||
|
#define CLK_MCO2_MLAHB CLK_SRC(CK_MCO2, 2)
|
||||||
|
#define CLK_MCO2_PLL4 CLK_SRC(CK_MCO2, 3)
|
||||||
|
#define CLK_MCO2_HSE CLK_SRC(CK_MCO2, 4)
|
||||||
|
#define CLK_MCO2_HSI CLK_SRC(CK_MCO2, 5)
|
||||||
|
#define CLK_MCO2_DISABLED CLK_DISABLED(CK_MCO2)
|
||||||
|
|
||||||
|
#define CLK_CKPER_HSI CLKSRC(MUX_CKPER, 0)
|
||||||
|
#define CLK_CKPER_CSI CLKSRC(MUX_CKPER, 1)
|
||||||
|
#define CLK_CKPER_HSE CLKSRC(MUX_CKPER, 2)
|
||||||
|
#define CLK_CKPER_DISABLED CLKSRC(MUX_CKPER, 3)
|
||||||
|
|
||||||
|
#define CLK_I2C12_PCLK1 CLKSRC(MUX_I2C12, 0)
|
||||||
|
#define CLK_I2C12_PLL4R CLKSRC(MUX_I2C12, 1)
|
||||||
|
#define CLK_I2C12_HSI CLKSRC(MUX_I2C12, 2)
|
||||||
|
#define CLK_I2C12_CSI CLKSRC(MUX_I2C12, 3)
|
||||||
|
|
||||||
|
#define CLK_I2C3_PCLK6 CLKSRC(MUX_I2C3, 0)
|
||||||
|
#define CLK_I2C3_PLL4R CLKSRC(MUX_I2C3, 1)
|
||||||
|
#define CLK_I2C3_HSI CLKSRC(MUX_I2C3, 2)
|
||||||
|
#define CLK_I2C3_CSI CLKSRC(MUX_I2C3, 3)
|
||||||
|
|
||||||
|
#define CLK_I2C4_PCLK6 CLKSRC(MUX_I2C4, 0)
|
||||||
|
#define CLK_I2C4_PLL4R CLKSRC(MUX_I2C4, 1)
|
||||||
|
#define CLK_I2C4_HSI CLKSRC(MUX_I2C4, 2)
|
||||||
|
#define CLK_I2C4_CSI CLKSRC(MUX_I2C4, 3)
|
||||||
|
|
||||||
|
#define CLK_I2C5_PCLK6 CLKSRC(MUX_I2C5, 0)
|
||||||
|
#define CLK_I2C5_PLL4R CLKSRC(MUX_I2C5, 1)
|
||||||
|
#define CLK_I2C5_HSI CLKSRC(MUX_I2C5, 2)
|
||||||
|
#define CLK_I2C5_CSI CLKSRC(MUX_I2C5, 3)
|
||||||
|
|
||||||
|
#define CLK_SPI1_PLL4P CLKSRC(MUX_SPI1, 0)
|
||||||
|
#define CLK_SPI1_PLL3Q CLKSRC(MUX_SPI1, 1)
|
||||||
|
#define CLK_SPI1_I2SCKIN CLKSRC(MUX_SPI1, 2)
|
||||||
|
#define CLK_SPI1_CKPER CLKSRC(MUX_SPI1, 3)
|
||||||
|
#define CLK_SPI1_PLL3R CLKSRC(MUX_SPI1, 4)
|
||||||
|
|
||||||
|
#define CLK_SPI23_PLL4P CLKSRC(MUX_SPI23, 0)
|
||||||
|
#define CLK_SPI23_PLL3Q CLKSRC(MUX_SPI23, 1)
|
||||||
|
#define CLK_SPI23_I2SCKIN CLKSRC(MUX_SPI23, 2)
|
||||||
|
#define CLK_SPI23_CKPER CLKSRC(MUX_SPI23, 3)
|
||||||
|
#define CLK_SPI23_PLL3R CLKSRC(MUX_SPI23, 4)
|
||||||
|
|
||||||
|
#define CLK_SPI4_PCLK6 CLKSRC(MUX_SPI4, 0)
|
||||||
|
#define CLK_SPI4_PLL4Q CLKSRC(MUX_SPI4, 1)
|
||||||
|
#define CLK_SPI4_HSI CLKSRC(MUX_SPI4, 2)
|
||||||
|
#define CLK_SPI4_CSI CLKSRC(MUX_SPI4, 3)
|
||||||
|
#define CLK_SPI4_HSE CLKSRC(MUX_SPI4, 4)
|
||||||
|
#define CLK_SPI4_I2SCKIN CLKSRC(MUX_SPI4, 5)
|
||||||
|
|
||||||
|
#define CLK_SPI5_PCLK6 CLKSRC(MUX_SPI5, 0)
|
||||||
|
#define CLK_SPI5_PLL4Q CLKSRC(MUX_SPI5, 1)
|
||||||
|
#define CLK_SPI5_HSI CLKSRC(MUX_SPI5, 2)
|
||||||
|
#define CLK_SPI5_CSI CLKSRC(MUX_SPI5, 3)
|
||||||
|
#define CLK_SPI5_HSE CLKSRC(MUX_SPI5, 4)
|
||||||
|
|
||||||
|
#define CLK_UART1_PCLK6 CLKSRC(MUX_UART1, 0)
|
||||||
|
#define CLK_UART1_PLL3Q CLKSRC(MUX_UART1, 1)
|
||||||
|
#define CLK_UART1_HSI CLKSRC(MUX_UART1, 2)
|
||||||
|
#define CLK_UART1_CSI CLKSRC(MUX_UART1, 3)
|
||||||
|
#define CLK_UART1_PLL4Q CLKSRC(MUX_UART1, 4)
|
||||||
|
#define CLK_UART1_HSE CLKSRC(MUX_UART1, 5)
|
||||||
|
|
||||||
|
#define CLK_UART2_PCLK6 CLKSRC(MUX_UART2, 0)
|
||||||
|
#define CLK_UART2_PLL3Q CLKSRC(MUX_UART2, 1)
|
||||||
|
#define CLK_UART2_HSI CLKSRC(MUX_UART2, 2)
|
||||||
|
#define CLK_UART2_CSI CLKSRC(MUX_UART2, 3)
|
||||||
|
#define CLK_UART2_PLL4Q CLKSRC(MUX_UART2, 4)
|
||||||
|
#define CLK_UART2_HSE CLKSRC(MUX_UART2, 5)
|
||||||
|
|
||||||
|
#define CLK_UART35_PCLK1 CLKSRC(MUX_UART35, 0)
|
||||||
|
#define CLK_UART35_PLL4Q CLKSRC(MUX_UART35, 1)
|
||||||
|
#define CLK_UART35_HSI CLKSRC(MUX_UART35, 2)
|
||||||
|
#define CLK_UART35_CSI CLKSRC(MUX_UART35, 3)
|
||||||
|
#define CLK_UART35_HSE CLKSRC(MUX_UART35, 4)
|
||||||
|
|
||||||
|
#define CLK_UART4_PCLK1 CLKSRC(MUX_UART4, 0)
|
||||||
|
#define CLK_UART4_PLL4Q CLKSRC(MUX_UART4, 1)
|
||||||
|
#define CLK_UART4_HSI CLKSRC(MUX_UART4, 2)
|
||||||
|
#define CLK_UART4_CSI CLKSRC(MUX_UART4, 3)
|
||||||
|
#define CLK_UART4_HSE CLKSRC(MUX_UART4, 4)
|
||||||
|
|
||||||
|
#define CLK_UART6_PCLK2 CLKSRC(MUX_UART6, 0)
|
||||||
|
#define CLK_UART6_PLL4Q CLKSRC(MUX_UART6, 1)
|
||||||
|
#define CLK_UART6_HSI CLKSRC(MUX_UART6, 2)
|
||||||
|
#define CLK_UART6_CSI CLKSRC(MUX_UART6, 3)
|
||||||
|
#define CLK_UART6_HSE CLKSRC(MUX_UART6, 4)
|
||||||
|
|
||||||
|
#define CLK_UART78_PCLK1 CLKSRC(MUX_UART78, 0)
|
||||||
|
#define CLK_UART78_PLL4Q CLKSRC(MUX_UART78, 1)
|
||||||
|
#define CLK_UART78_HSI CLKSRC(MUX_UART78, 2)
|
||||||
|
#define CLK_UART78_CSI CLKSRC(MUX_UART78, 3)
|
||||||
|
#define CLK_UART78_HSE CLKSRC(MUX_UART78, 4)
|
||||||
|
|
||||||
|
#define CLK_LPTIM1_PCLK1 CLKSRC(MUX_LPTIM1, 0)
|
||||||
|
#define CLK_LPTIM1_PLL4P CLKSRC(MUX_LPTIM1, 1)
|
||||||
|
#define CLK_LPTIM1_PLL3Q CLKSRC(MUX_LPTIM1, 2)
|
||||||
|
#define CLK_LPTIM1_LSE CLKSRC(MUX_LPTIM1, 3)
|
||||||
|
#define CLK_LPTIM1_LSI CLKSRC(MUX_LPTIM1, 4)
|
||||||
|
#define CLK_LPTIM1_CKPER CLKSRC(MUX_LPTIM1, 5)
|
||||||
|
|
||||||
|
#define CLK_LPTIM2_PCLK3 CLKSRC(MUX_LPTIM2, 0)
|
||||||
|
#define CLK_LPTIM2_PLL4Q CLKSRC(MUX_LPTIM2, 1)
|
||||||
|
#define CLK_LPTIM2_CKPER CLKSRC(MUX_LPTIM2, 2)
|
||||||
|
#define CLK_LPTIM2_LSE CLKSRC(MUX_LPTIM2, 3)
|
||||||
|
#define CLK_LPTIM2_LSI CLKSRC(MUX_LPTIM2, 4)
|
||||||
|
|
||||||
|
#define CLK_LPTIM3_PCLK3 CLKSRC(MUX_LPTIM3, 0)
|
||||||
|
#define CLK_LPTIM3_PLL4Q CLKSRC(MUX_LPTIM3, 1)
|
||||||
|
#define CLK_LPTIM3_CKPER CLKSRC(MUX_LPTIM3, 2)
|
||||||
|
#define CLK_LPTIM3_LSE CLKSRC(MUX_LPTIM3, 3)
|
||||||
|
#define CLK_LPTIM3_LSI CLKSRC(MUX_LPTIM3, 4)
|
||||||
|
|
||||||
|
#define CLK_LPTIM45_PCLK3 CLKSRC(MUX_LPTIM45, 0)
|
||||||
|
#define CLK_LPTIM45_PLL4P CLKSRC(MUX_LPTIM45, 1)
|
||||||
|
#define CLK_LPTIM45_PLL3Q CLKSRC(MUX_LPTIM45, 2)
|
||||||
|
#define CLK_LPTIM45_LSE CLKSRC(MUX_LPTIM45, 3)
|
||||||
|
#define CLK_LPTIM45_LSI CLKSRC(MUX_LPTIM45, 4)
|
||||||
|
#define CLK_LPTIM45_CKPER CLKSRC(MUX_LPTIM45, 5)
|
||||||
|
|
||||||
|
#define CLK_SAI1_PLL4Q CLKSRC(MUX_SAI1, 0)
|
||||||
|
#define CLK_SAI1_PLL3Q CLKSRC(MUX_SAI1, 1)
|
||||||
|
#define CLK_SAI1_I2SCKIN CLKSRC(MUX_SAI1, 2)
|
||||||
|
#define CLK_SAI1_CKPER CLKSRC(MUX_SAI1, 3)
|
||||||
|
#define CLK_SAI1_PLL3R CLKSRC(MUX_SAI1, 4)
|
||||||
|
|
||||||
|
#define CLK_SAI2_PLL4Q CLKSRC(MUX_SAI2, 0)
|
||||||
|
#define CLK_SAI2_PLL3Q CLKSRC(MUX_SAI2, 1)
|
||||||
|
#define CLK_SAI2_I2SCKIN CLKSRC(MUX_SAI2, 2)
|
||||||
|
#define CLK_SAI2_CKPER CLKSRC(MUX_SAI2, 3)
|
||||||
|
#define CLK_SAI2_SPDIF CLKSRC(MUX_SAI2, 4)
|
||||||
|
#define CLK_SAI2_PLL3R CLKSRC(MUX_SAI2, 5)
|
||||||
|
|
||||||
|
#define CLK_FDCAN_HSE CLKSRC(MUX_FDCAN, 0)
|
||||||
|
#define CLK_FDCAN_PLL3Q CLKSRC(MUX_FDCAN, 1)
|
||||||
|
#define CLK_FDCAN_PLL4Q CLKSRC(MUX_FDCAN, 2)
|
||||||
|
#define CLK_FDCAN_PLL4R CLKSRC(MUX_FDCAN, 3)
|
||||||
|
|
||||||
|
#define CLK_SPDIF_PLL4P CLKSRC(MUX_SPDIF, 0)
|
||||||
|
#define CLK_SPDIF_PLL3Q CLKSRC(MUX_SPDIF, 1)
|
||||||
|
#define CLK_SPDIF_HSI CLKSRC(MUX_SPDIF, 2)
|
||||||
|
|
||||||
|
#define CLK_ADC1_PLL4R CLKSRC(MUX_ADC1, 0)
|
||||||
|
#define CLK_ADC1_CKPER CLKSRC(MUX_ADC1, 1)
|
||||||
|
#define CLK_ADC1_PLL3Q CLKSRC(MUX_ADC1, 2)
|
||||||
|
|
||||||
|
#define CLK_ADC2_PLL4R CLKSRC(MUX_ADC2, 0)
|
||||||
|
#define CLK_ADC2_CKPER CLKSRC(MUX_ADC2, 1)
|
||||||
|
#define CLK_ADC2_PLL3Q CLKSRC(MUX_ADC2, 2)
|
||||||
|
|
||||||
|
#define CLK_SDMMC1_HCLK6 CLKSRC(MUX_SDMMC1, 0)
|
||||||
|
#define CLK_SDMMC1_PLL3R CLKSRC(MUX_SDMMC1, 1)
|
||||||
|
#define CLK_SDMMC1_PLL4P CLKSRC(MUX_SDMMC1, 2)
|
||||||
|
#define CLK_SDMMC1_HSI CLKSRC(MUX_SDMMC1, 3)
|
||||||
|
|
||||||
|
#define CLK_SDMMC2_HCLK6 CLKSRC(MUX_SDMMC2, 0)
|
||||||
|
#define CLK_SDMMC2_PLL3R CLKSRC(MUX_SDMMC2, 1)
|
||||||
|
#define CLK_SDMMC2_PLL4P CLKSRC(MUX_SDMMC2, 2)
|
||||||
|
#define CLK_SDMMC2_HSI CLKSRC(MUX_SDMMC2, 3)
|
||||||
|
|
||||||
|
#define CLK_ETH1_PLL4P CLKSRC(MUX_ETH1, 0)
|
||||||
|
#define CLK_ETH1_PLL3Q CLKSRC(MUX_ETH1, 1)
|
||||||
|
|
||||||
|
#define CLK_ETH2_PLL4P CLKSRC(MUX_ETH2, 0)
|
||||||
|
#define CLK_ETH2_PLL3Q CLKSRC(MUX_ETH2, 1)
|
||||||
|
|
||||||
|
#define CLK_USBPHY_HSE CLKSRC(MUX_USBPHY, 0)
|
||||||
|
#define CLK_USBPHY_PLL4R CLKSRC(MUX_USBPHY, 1)
|
||||||
|
#define CLK_USBPHY_HSE_DIV2 CLKSRC(MUX_USBPHY, 2)
|
||||||
|
|
||||||
|
#define CLK_USBO_PLL4R CLKSRC(MUX_USBO, 0)
|
||||||
|
#define CLK_USBO_USBPHY CLKSRC(MUX_USBO, 1)
|
||||||
|
|
||||||
|
#define CLK_QSPI_ACLK CLKSRC(MUX_QSPI, 0)
|
||||||
|
#define CLK_QSPI_PLL3R CLKSRC(MUX_QSPI, 1)
|
||||||
|
#define CLK_QSPI_PLL4P CLKSRC(MUX_QSPI, 2)
|
||||||
|
#define CLK_QSPI_CKPER CLKSRC(MUX_QSPI, 3)
|
||||||
|
|
||||||
|
#define CLK_FMC_ACLK CLKSRC(MUX_FMC, 0)
|
||||||
|
#define CLK_FMC_PLL3R CLKSRC(MUX_FMC, 1)
|
||||||
|
#define CLK_FMC_PLL4P CLKSRC(MUX_FMC, 2)
|
||||||
|
#define CLK_FMC_CKPER CLKSRC(MUX_FMC, 3)
|
||||||
|
|
||||||
|
#define CLK_RNG1_CSI CLKSRC(MUX_RNG1, 0)
|
||||||
|
#define CLK_RNG1_PLL4R CLKSRC(MUX_RNG1, 1)
|
||||||
|
/* WARNING: POSITION 2 OF RNG1 MUX IS RESERVED */
|
||||||
|
#define CLK_RNG1_LSI CLKSRC(MUX_RNG1, 3)
|
||||||
|
|
||||||
|
#define CLK_STGEN_HSI CLKSRC(MUX_STGEN, 0)
|
||||||
|
#define CLK_STGEN_HSE CLKSRC(MUX_STGEN, 1)
|
||||||
|
|
||||||
|
#define CLK_DCMIPP_ACLK CLKSRC(MUX_DCMIPP, 0)
|
||||||
|
#define CLK_DCMIPP_PLL2Q CLKSRC(MUX_DCMIPP, 1)
|
||||||
|
#define CLK_DCMIPP_PLL4P CLKSRC(MUX_DCMIPP, 2)
|
||||||
|
#define CLK_DCMIPP_CKPER CLKSRC(MUX_DCMIPP, 3)
|
||||||
|
|
||||||
|
#define CLK_SAES_AXI CLKSRC(MUX_SAES, 0)
|
||||||
|
#define CLK_SAES_CKPER CLKSRC(MUX_SAES, 1)
|
||||||
|
#define CLK_SAES_PLL4R CLKSRC(MUX_SAES, 2)
|
||||||
|
#define CLK_SAES_LSI CLKSRC(MUX_SAES, 3)
|
||||||
|
|
||||||
|
/* PLL output is enable when x=1, with x=p,q or r */
|
||||||
|
#define PQR(p, q, r) (((p) & 1) | (((q) & 1) << 1) | (((r) & 1) << 2))
|
||||||
|
|
||||||
|
/* define for st,pll /csg */
|
||||||
|
#define SSCG_MODE_CENTER_SPREAD 0
|
||||||
|
#define SSCG_MODE_DOWN_SPREAD 1
|
||||||
|
|
||||||
|
/* define for st,drive */
|
||||||
|
#define LSEDRV_LOWEST 0
|
||||||
|
#define LSEDRV_MEDIUM_LOW 1
|
||||||
|
#define LSEDRV_MEDIUM_HIGH 2
|
||||||
|
#define LSEDRV_HIGHEST 3
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_ */
|
278
include/dt-bindings/clock/stm32mp15-clks.h
Normal file
278
include/dt-bindings/clock/stm32mp15-clks.h
Normal file
|
@ -0,0 +1,278 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ or BSD-3-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2018-2022 - All Rights Reserved
|
||||||
|
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_STM32MP1_CLKS_H_
|
||||||
|
#define _DT_BINDINGS_STM32MP1_CLKS_H_
|
||||||
|
|
||||||
|
/* OSCILLATOR clocks */
|
||||||
|
#define CK_HSE 0
|
||||||
|
#define CK_CSI 1
|
||||||
|
#define CK_LSI 2
|
||||||
|
#define CK_LSE 3
|
||||||
|
#define CK_HSI 4
|
||||||
|
#define CK_HSE_DIV2 5
|
||||||
|
|
||||||
|
/* Bus clocks */
|
||||||
|
#define TIM2 6
|
||||||
|
#define TIM3 7
|
||||||
|
#define TIM4 8
|
||||||
|
#define TIM5 9
|
||||||
|
#define TIM6 10
|
||||||
|
#define TIM7 11
|
||||||
|
#define TIM12 12
|
||||||
|
#define TIM13 13
|
||||||
|
#define TIM14 14
|
||||||
|
#define LPTIM1 15
|
||||||
|
#define SPI2 16
|
||||||
|
#define SPI3 17
|
||||||
|
#define USART2 18
|
||||||
|
#define USART3 19
|
||||||
|
#define UART4 20
|
||||||
|
#define UART5 21
|
||||||
|
#define UART7 22
|
||||||
|
#define UART8 23
|
||||||
|
#define I2C1 24
|
||||||
|
#define I2C2 25
|
||||||
|
#define I2C3 26
|
||||||
|
#define I2C5 27
|
||||||
|
#define SPDIF 28
|
||||||
|
#define CEC 29
|
||||||
|
#define DAC12 30
|
||||||
|
#define MDIO 31
|
||||||
|
#define TIM1 32
|
||||||
|
#define TIM8 33
|
||||||
|
#define TIM15 34
|
||||||
|
#define TIM16 35
|
||||||
|
#define TIM17 36
|
||||||
|
#define SPI1 37
|
||||||
|
#define SPI4 38
|
||||||
|
#define SPI5 39
|
||||||
|
#define USART6 40
|
||||||
|
#define SAI1 41
|
||||||
|
#define SAI2 42
|
||||||
|
#define SAI3 43
|
||||||
|
#define DFSDM 44
|
||||||
|
#define FDCAN 45
|
||||||
|
#define LPTIM2 46
|
||||||
|
#define LPTIM3 47
|
||||||
|
#define LPTIM4 48
|
||||||
|
#define LPTIM5 49
|
||||||
|
#define SAI4 50
|
||||||
|
#define SYSCFG 51
|
||||||
|
#define VREF 52
|
||||||
|
#define TMPSENS 53
|
||||||
|
#define PMBCTRL 54
|
||||||
|
#define HDP 55
|
||||||
|
#define LTDC 56
|
||||||
|
#define DSI 57
|
||||||
|
#define IWDG2 58
|
||||||
|
#define USBPHY 59
|
||||||
|
#define STGENRO 60
|
||||||
|
#define SPI6 61
|
||||||
|
#define I2C4 62
|
||||||
|
#define I2C6 63
|
||||||
|
#define USART1 64
|
||||||
|
#define RTCAPB 65
|
||||||
|
#define TZC1 66
|
||||||
|
#define TZPC 67
|
||||||
|
#define IWDG1 68
|
||||||
|
#define BSEC 69
|
||||||
|
#define STGEN 70
|
||||||
|
#define DMA1 71
|
||||||
|
#define DMA2 72
|
||||||
|
#define DMAMUX 73
|
||||||
|
#define ADC12 74
|
||||||
|
#define USBO 75
|
||||||
|
#define SDMMC3 76
|
||||||
|
#define DCMI 77
|
||||||
|
#define CRYP2 78
|
||||||
|
#define HASH2 79
|
||||||
|
#define RNG2 80
|
||||||
|
#define CRC2 81
|
||||||
|
#define HSEM 82
|
||||||
|
#define IPCC 83
|
||||||
|
#define GPIOA 84
|
||||||
|
#define GPIOB 85
|
||||||
|
#define GPIOC 86
|
||||||
|
#define GPIOD 87
|
||||||
|
#define GPIOE 88
|
||||||
|
#define GPIOF 89
|
||||||
|
#define GPIOG 90
|
||||||
|
#define GPIOH 91
|
||||||
|
#define GPIOI 92
|
||||||
|
#define GPIOJ 93
|
||||||
|
#define GPIOK 94
|
||||||
|
#define GPIOZ 95
|
||||||
|
#define CRYP1 96
|
||||||
|
#define HASH1 97
|
||||||
|
#define RNG1 98
|
||||||
|
#define BKPSRAM 99
|
||||||
|
#define MDMA 100
|
||||||
|
#define GPU 101
|
||||||
|
#define ETHCK 102
|
||||||
|
#define ETHTX 103
|
||||||
|
#define ETHRX 104
|
||||||
|
#define ETHMAC 105
|
||||||
|
#define FMC 106
|
||||||
|
#define QSPI 107
|
||||||
|
#define SDMMC1 108
|
||||||
|
#define SDMMC2 109
|
||||||
|
#define CRC1 110
|
||||||
|
#define USBH 111
|
||||||
|
#define ETHSTP 112
|
||||||
|
#define TZC2 113
|
||||||
|
|
||||||
|
/* Kernel clocks */
|
||||||
|
#define SDMMC1_K 118
|
||||||
|
#define SDMMC2_K 119
|
||||||
|
#define SDMMC3_K 120
|
||||||
|
#define FMC_K 121
|
||||||
|
#define QSPI_K 122
|
||||||
|
#define ETHCK_K 123
|
||||||
|
#define RNG1_K 124
|
||||||
|
#define RNG2_K 125
|
||||||
|
#define GPU_K 126
|
||||||
|
#define USBPHY_K 127
|
||||||
|
#define STGEN_K 128
|
||||||
|
#define SPDIF_K 129
|
||||||
|
#define SPI1_K 130
|
||||||
|
#define SPI2_K 131
|
||||||
|
#define SPI3_K 132
|
||||||
|
#define SPI4_K 133
|
||||||
|
#define SPI5_K 134
|
||||||
|
#define SPI6_K 135
|
||||||
|
#define CEC_K 136
|
||||||
|
#define I2C1_K 137
|
||||||
|
#define I2C2_K 138
|
||||||
|
#define I2C3_K 139
|
||||||
|
#define I2C4_K 140
|
||||||
|
#define I2C5_K 141
|
||||||
|
#define I2C6_K 142
|
||||||
|
#define LPTIM1_K 143
|
||||||
|
#define LPTIM2_K 144
|
||||||
|
#define LPTIM3_K 145
|
||||||
|
#define LPTIM4_K 146
|
||||||
|
#define LPTIM5_K 147
|
||||||
|
#define USART1_K 148
|
||||||
|
#define USART2_K 149
|
||||||
|
#define USART3_K 150
|
||||||
|
#define UART4_K 151
|
||||||
|
#define UART5_K 152
|
||||||
|
#define USART6_K 153
|
||||||
|
#define UART7_K 154
|
||||||
|
#define UART8_K 155
|
||||||
|
#define DFSDM_K 156
|
||||||
|
#define FDCAN_K 157
|
||||||
|
#define SAI1_K 158
|
||||||
|
#define SAI2_K 159
|
||||||
|
#define SAI3_K 160
|
||||||
|
#define SAI4_K 161
|
||||||
|
#define ADC12_K 162
|
||||||
|
#define DSI_K 163
|
||||||
|
#define DSI_PX 164
|
||||||
|
#define ADFSDM_K 165
|
||||||
|
#define USBO_K 166
|
||||||
|
#define LTDC_PX 167
|
||||||
|
#define DAC12_K 168
|
||||||
|
#define ETHPTP_K 169
|
||||||
|
|
||||||
|
/* PLL */
|
||||||
|
#define PLL1 176
|
||||||
|
#define PLL2 177
|
||||||
|
#define PLL3 178
|
||||||
|
#define PLL4 179
|
||||||
|
|
||||||
|
/* ODF */
|
||||||
|
#define PLL1_P 180
|
||||||
|
#define PLL1_Q 181
|
||||||
|
#define PLL1_R 182
|
||||||
|
#define PLL2_P 183
|
||||||
|
#define PLL2_Q 184
|
||||||
|
#define PLL2_R 185
|
||||||
|
#define PLL3_P 186
|
||||||
|
#define PLL3_Q 187
|
||||||
|
#define PLL3_R 188
|
||||||
|
#define PLL4_P 189
|
||||||
|
#define PLL4_Q 190
|
||||||
|
#define PLL4_R 191
|
||||||
|
|
||||||
|
/* AUX */
|
||||||
|
#define RTC 192
|
||||||
|
|
||||||
|
/* MCLK */
|
||||||
|
#define CK_PER 193
|
||||||
|
#define CK_MPU 194
|
||||||
|
#define CK_AXI 195
|
||||||
|
#define CK_MCU 196
|
||||||
|
|
||||||
|
/* Time base */
|
||||||
|
#define TIM2_K 197
|
||||||
|
#define TIM3_K 198
|
||||||
|
#define TIM4_K 199
|
||||||
|
#define TIM5_K 200
|
||||||
|
#define TIM6_K 201
|
||||||
|
#define TIM7_K 202
|
||||||
|
#define TIM12_K 203
|
||||||
|
#define TIM13_K 204
|
||||||
|
#define TIM14_K 205
|
||||||
|
#define TIM1_K 206
|
||||||
|
#define TIM8_K 207
|
||||||
|
#define TIM15_K 208
|
||||||
|
#define TIM16_K 209
|
||||||
|
#define TIM17_K 210
|
||||||
|
|
||||||
|
/* MCO clocks */
|
||||||
|
#define CK_MCO1 211
|
||||||
|
#define CK_MCO2 212
|
||||||
|
|
||||||
|
/* TRACE & DEBUG clocks */
|
||||||
|
#define CK_DBG 214
|
||||||
|
#define CK_TRACE 215
|
||||||
|
|
||||||
|
/* DDR */
|
||||||
|
#define DDRC1 220
|
||||||
|
#define DDRC1LP 221
|
||||||
|
#define DDRC2 222
|
||||||
|
#define DDRC2LP 223
|
||||||
|
#define DDRPHYC 224
|
||||||
|
#define DDRPHYCLP 225
|
||||||
|
#define DDRCAPB 226
|
||||||
|
#define DDRCAPBLP 227
|
||||||
|
#define AXIDCG 228
|
||||||
|
#define DDRPHYCAPB 229
|
||||||
|
#define DDRPHYCAPBLP 230
|
||||||
|
#define DDRPERFM 231
|
||||||
|
|
||||||
|
#define STM32MP1_LAST_CLK 232
|
||||||
|
|
||||||
|
/* SCMI clock identifiers */
|
||||||
|
#define CK_SCMI0_HSE 0
|
||||||
|
#define CK_SCMI0_HSI 1
|
||||||
|
#define CK_SCMI0_CSI 2
|
||||||
|
#define CK_SCMI0_LSE 3
|
||||||
|
#define CK_SCMI0_LSI 4
|
||||||
|
#define CK_SCMI0_PLL2_Q 5
|
||||||
|
#define CK_SCMI0_PLL2_R 6
|
||||||
|
#define CK_SCMI0_MPU 7
|
||||||
|
#define CK_SCMI0_AXI 8
|
||||||
|
#define CK_SCMI0_BSEC 9
|
||||||
|
#define CK_SCMI0_CRYP1 10
|
||||||
|
#define CK_SCMI0_GPIOZ 11
|
||||||
|
#define CK_SCMI0_HASH1 12
|
||||||
|
#define CK_SCMI0_I2C4 13
|
||||||
|
#define CK_SCMI0_I2C6 14
|
||||||
|
#define CK_SCMI0_IWDG1 15
|
||||||
|
#define CK_SCMI0_RNG1 16
|
||||||
|
#define CK_SCMI0_RTC 17
|
||||||
|
#define CK_SCMI0_RTCAPB 18
|
||||||
|
#define CK_SCMI0_SPI6 19
|
||||||
|
#define CK_SCMI0_USART1 20
|
||||||
|
|
||||||
|
#define CK_SCMI1_PLL3_Q 0
|
||||||
|
#define CK_SCMI1_PLL3_R 1
|
||||||
|
#define CK_SCMI1_MCU 2
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_STM32MP1_CLKS_H_ */
|
282
include/dt-bindings/clock/stm32mp15-clksrc.h
Normal file
282
include/dt-bindings/clock/stm32mp15-clksrc.h
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017-2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_CLOCK_STM32MP15_CLKSRC_H_
|
||||||
|
#define _DT_BINDINGS_CLOCK_STM32MP15_CLKSRC_H_
|
||||||
|
|
||||||
|
/* PLL output is enable when x=1, with x=p,q or r */
|
||||||
|
#define PQR(p, q, r) (((p) & 1) | (((q) & 1) << 1) | (((r) & 1) << 2))
|
||||||
|
|
||||||
|
/* st,clksrc: mandatory clock source */
|
||||||
|
#define CLK_MPU_HSI 0x00000200
|
||||||
|
#define CLK_MPU_HSE 0x00000201
|
||||||
|
#define CLK_MPU_PLL1P 0x00000202
|
||||||
|
#define CLK_MPU_PLL1P_DIV 0x00000203
|
||||||
|
|
||||||
|
#define CLK_AXI_HSI 0x00000240
|
||||||
|
#define CLK_AXI_HSE 0x00000241
|
||||||
|
#define CLK_AXI_PLL2P 0x00000242
|
||||||
|
|
||||||
|
#define CLK_MCU_HSI 0x00000480
|
||||||
|
#define CLK_MCU_HSE 0x00000481
|
||||||
|
#define CLK_MCU_CSI 0x00000482
|
||||||
|
#define CLK_MCU_PLL3P 0x00000483
|
||||||
|
|
||||||
|
#define CLK_PLL12_HSI 0x00000280
|
||||||
|
#define CLK_PLL12_HSE 0x00000281
|
||||||
|
|
||||||
|
#define CLK_PLL3_HSI 0x00008200
|
||||||
|
#define CLK_PLL3_HSE 0x00008201
|
||||||
|
#define CLK_PLL3_CSI 0x00008202
|
||||||
|
|
||||||
|
#define CLK_PLL4_HSI 0x00008240
|
||||||
|
#define CLK_PLL4_HSE 0x00008241
|
||||||
|
#define CLK_PLL4_CSI 0x00008242
|
||||||
|
#define CLK_PLL4_I2SCKIN 0x00008243
|
||||||
|
|
||||||
|
#define CLK_RTC_DISABLED 0x00001400
|
||||||
|
#define CLK_RTC_LSE 0x00001401
|
||||||
|
#define CLK_RTC_LSI 0x00001402
|
||||||
|
#define CLK_RTC_HSE 0x00001403
|
||||||
|
|
||||||
|
#define CLK_MCO1_HSI 0x00008000
|
||||||
|
#define CLK_MCO1_HSE 0x00008001
|
||||||
|
#define CLK_MCO1_CSI 0x00008002
|
||||||
|
#define CLK_MCO1_LSI 0x00008003
|
||||||
|
#define CLK_MCO1_LSE 0x00008004
|
||||||
|
#define CLK_MCO1_DISABLED 0x0000800F
|
||||||
|
|
||||||
|
#define CLK_MCO2_MPU 0x00008040
|
||||||
|
#define CLK_MCO2_AXI 0x00008041
|
||||||
|
#define CLK_MCO2_MCU 0x00008042
|
||||||
|
#define CLK_MCO2_PLL4P 0x00008043
|
||||||
|
#define CLK_MCO2_HSE 0x00008044
|
||||||
|
#define CLK_MCO2_HSI 0x00008045
|
||||||
|
#define CLK_MCO2_DISABLED 0x0000804F
|
||||||
|
|
||||||
|
/* st,pkcs: peripheral kernel clock source */
|
||||||
|
|
||||||
|
#define CLK_I2C12_PCLK1 0x00008C00
|
||||||
|
#define CLK_I2C12_PLL4R 0x00008C01
|
||||||
|
#define CLK_I2C12_HSI 0x00008C02
|
||||||
|
#define CLK_I2C12_CSI 0x00008C03
|
||||||
|
#define CLK_I2C12_DISABLED 0x00008C07
|
||||||
|
|
||||||
|
#define CLK_I2C35_PCLK1 0x00008C40
|
||||||
|
#define CLK_I2C35_PLL4R 0x00008C41
|
||||||
|
#define CLK_I2C35_HSI 0x00008C42
|
||||||
|
#define CLK_I2C35_CSI 0x00008C43
|
||||||
|
#define CLK_I2C35_DISABLED 0x00008C47
|
||||||
|
|
||||||
|
#define CLK_I2C46_PCLK5 0x00000C00
|
||||||
|
#define CLK_I2C46_PLL3Q 0x00000C01
|
||||||
|
#define CLK_I2C46_HSI 0x00000C02
|
||||||
|
#define CLK_I2C46_CSI 0x00000C03
|
||||||
|
#define CLK_I2C46_DISABLED 0x00000C07
|
||||||
|
|
||||||
|
#define CLK_SAI1_PLL4Q 0x00008C80
|
||||||
|
#define CLK_SAI1_PLL3Q 0x00008C81
|
||||||
|
#define CLK_SAI1_I2SCKIN 0x00008C82
|
||||||
|
#define CLK_SAI1_CKPER 0x00008C83
|
||||||
|
#define CLK_SAI1_PLL3R 0x00008C84
|
||||||
|
#define CLK_SAI1_DISABLED 0x00008C87
|
||||||
|
|
||||||
|
#define CLK_SAI2_PLL4Q 0x00008CC0
|
||||||
|
#define CLK_SAI2_PLL3Q 0x00008CC1
|
||||||
|
#define CLK_SAI2_I2SCKIN 0x00008CC2
|
||||||
|
#define CLK_SAI2_CKPER 0x00008CC3
|
||||||
|
#define CLK_SAI2_SPDIF 0x00008CC4
|
||||||
|
#define CLK_SAI2_PLL3R 0x00008CC5
|
||||||
|
#define CLK_SAI2_DISABLED 0x00008CC7
|
||||||
|
|
||||||
|
#define CLK_SAI3_PLL4Q 0x00008D00
|
||||||
|
#define CLK_SAI3_PLL3Q 0x00008D01
|
||||||
|
#define CLK_SAI3_I2SCKIN 0x00008D02
|
||||||
|
#define CLK_SAI3_CKPER 0x00008D03
|
||||||
|
#define CLK_SAI3_PLL3R 0x00008D04
|
||||||
|
#define CLK_SAI3_DISABLED 0x00008D07
|
||||||
|
|
||||||
|
#define CLK_SAI4_PLL4Q 0x00008D40
|
||||||
|
#define CLK_SAI4_PLL3Q 0x00008D41
|
||||||
|
#define CLK_SAI4_I2SCKIN 0x00008D42
|
||||||
|
#define CLK_SAI4_CKPER 0x00008D43
|
||||||
|
#define CLK_SAI4_PLL3R 0x00008D44
|
||||||
|
#define CLK_SAI4_DISABLED 0x00008D47
|
||||||
|
|
||||||
|
#define CLK_SPI2S1_PLL4P 0x00008D80
|
||||||
|
#define CLK_SPI2S1_PLL3Q 0x00008D81
|
||||||
|
#define CLK_SPI2S1_I2SCKIN 0x00008D82
|
||||||
|
#define CLK_SPI2S1_CKPER 0x00008D83
|
||||||
|
#define CLK_SPI2S1_PLL3R 0x00008D84
|
||||||
|
#define CLK_SPI2S1_DISABLED 0x00008D87
|
||||||
|
|
||||||
|
#define CLK_SPI2S23_PLL4P 0x00008DC0
|
||||||
|
#define CLK_SPI2S23_PLL3Q 0x00008DC1
|
||||||
|
#define CLK_SPI2S23_I2SCKIN 0x00008DC2
|
||||||
|
#define CLK_SPI2S23_CKPER 0x00008DC3
|
||||||
|
#define CLK_SPI2S23_PLL3R 0x00008DC4
|
||||||
|
#define CLK_SPI2S23_DISABLED 0x00008DC7
|
||||||
|
|
||||||
|
#define CLK_SPI45_PCLK2 0x00008E00
|
||||||
|
#define CLK_SPI45_PLL4Q 0x00008E01
|
||||||
|
#define CLK_SPI45_HSI 0x00008E02
|
||||||
|
#define CLK_SPI45_CSI 0x00008E03
|
||||||
|
#define CLK_SPI45_HSE 0x00008E04
|
||||||
|
#define CLK_SPI45_DISABLED 0x00008E07
|
||||||
|
|
||||||
|
#define CLK_SPI6_PCLK5 0x00000C40
|
||||||
|
#define CLK_SPI6_PLL4Q 0x00000C41
|
||||||
|
#define CLK_SPI6_HSI 0x00000C42
|
||||||
|
#define CLK_SPI6_CSI 0x00000C43
|
||||||
|
#define CLK_SPI6_HSE 0x00000C44
|
||||||
|
#define CLK_SPI6_PLL3Q 0x00000C45
|
||||||
|
#define CLK_SPI6_DISABLED 0x00000C47
|
||||||
|
|
||||||
|
#define CLK_UART6_PCLK2 0x00008E40
|
||||||
|
#define CLK_UART6_PLL4Q 0x00008E41
|
||||||
|
#define CLK_UART6_HSI 0x00008E42
|
||||||
|
#define CLK_UART6_CSI 0x00008E43
|
||||||
|
#define CLK_UART6_HSE 0x00008E44
|
||||||
|
#define CLK_UART6_DISABLED 0x00008E47
|
||||||
|
|
||||||
|
#define CLK_UART24_PCLK1 0x00008E80
|
||||||
|
#define CLK_UART24_PLL4Q 0x00008E81
|
||||||
|
#define CLK_UART24_HSI 0x00008E82
|
||||||
|
#define CLK_UART24_CSI 0x00008E83
|
||||||
|
#define CLK_UART24_HSE 0x00008E84
|
||||||
|
#define CLK_UART24_DISABLED 0x00008E87
|
||||||
|
|
||||||
|
#define CLK_UART35_PCLK1 0x00008EC0
|
||||||
|
#define CLK_UART35_PLL4Q 0x00008EC1
|
||||||
|
#define CLK_UART35_HSI 0x00008EC2
|
||||||
|
#define CLK_UART35_CSI 0x00008EC3
|
||||||
|
#define CLK_UART35_HSE 0x00008EC4
|
||||||
|
#define CLK_UART35_DISABLED 0x00008EC7
|
||||||
|
|
||||||
|
#define CLK_UART78_PCLK1 0x00008F00
|
||||||
|
#define CLK_UART78_PLL4Q 0x00008F01
|
||||||
|
#define CLK_UART78_HSI 0x00008F02
|
||||||
|
#define CLK_UART78_CSI 0x00008F03
|
||||||
|
#define CLK_UART78_HSE 0x00008F04
|
||||||
|
#define CLK_UART78_DISABLED 0x00008F07
|
||||||
|
|
||||||
|
#define CLK_UART1_PCLK5 0x00000C80
|
||||||
|
#define CLK_UART1_PLL3Q 0x00000C81
|
||||||
|
#define CLK_UART1_HSI 0x00000C82
|
||||||
|
#define CLK_UART1_CSI 0x00000C83
|
||||||
|
#define CLK_UART1_PLL4Q 0x00000C84
|
||||||
|
#define CLK_UART1_HSE 0x00000C85
|
||||||
|
#define CLK_UART1_DISABLED 0x00000C87
|
||||||
|
|
||||||
|
#define CLK_SDMMC12_HCLK6 0x00008F40
|
||||||
|
#define CLK_SDMMC12_PLL3R 0x00008F41
|
||||||
|
#define CLK_SDMMC12_PLL4P 0x00008F42
|
||||||
|
#define CLK_SDMMC12_HSI 0x00008F43
|
||||||
|
#define CLK_SDMMC12_DISABLED 0x00008F47
|
||||||
|
|
||||||
|
#define CLK_SDMMC3_HCLK2 0x00008F80
|
||||||
|
#define CLK_SDMMC3_PLL3R 0x00008F81
|
||||||
|
#define CLK_SDMMC3_PLL4P 0x00008F82
|
||||||
|
#define CLK_SDMMC3_HSI 0x00008F83
|
||||||
|
#define CLK_SDMMC3_DISABLED 0x00008F87
|
||||||
|
|
||||||
|
#define CLK_ETH_PLL4P 0x00008FC0
|
||||||
|
#define CLK_ETH_PLL3Q 0x00008FC1
|
||||||
|
#define CLK_ETH_DISABLED 0x00008FC3
|
||||||
|
|
||||||
|
#define CLK_QSPI_ACLK 0x00009000
|
||||||
|
#define CLK_QSPI_PLL3R 0x00009001
|
||||||
|
#define CLK_QSPI_PLL4P 0x00009002
|
||||||
|
#define CLK_QSPI_CKPER 0x00009003
|
||||||
|
|
||||||
|
#define CLK_FMC_ACLK 0x00009040
|
||||||
|
#define CLK_FMC_PLL3R 0x00009041
|
||||||
|
#define CLK_FMC_PLL4P 0x00009042
|
||||||
|
#define CLK_FMC_CKPER 0x00009043
|
||||||
|
|
||||||
|
#define CLK_FDCAN_HSE 0x000090C0
|
||||||
|
#define CLK_FDCAN_PLL3Q 0x000090C1
|
||||||
|
#define CLK_FDCAN_PLL4Q 0x000090C2
|
||||||
|
#define CLK_FDCAN_PLL4R 0x000090C3
|
||||||
|
|
||||||
|
#define CLK_SPDIF_PLL4P 0x00009140
|
||||||
|
#define CLK_SPDIF_PLL3Q 0x00009141
|
||||||
|
#define CLK_SPDIF_HSI 0x00009142
|
||||||
|
#define CLK_SPDIF_DISABLED 0x00009143
|
||||||
|
|
||||||
|
#define CLK_CEC_LSE 0x00009180
|
||||||
|
#define CLK_CEC_LSI 0x00009181
|
||||||
|
#define CLK_CEC_CSI_DIV122 0x00009182
|
||||||
|
#define CLK_CEC_DISABLED 0x00009183
|
||||||
|
|
||||||
|
#define CLK_USBPHY_HSE 0x000091C0
|
||||||
|
#define CLK_USBPHY_PLL4R 0x000091C1
|
||||||
|
#define CLK_USBPHY_HSE_DIV2 0x000091C2
|
||||||
|
#define CLK_USBPHY_DISABLED 0x000091C3
|
||||||
|
|
||||||
|
#define CLK_USBO_PLL4R 0x800091C0
|
||||||
|
#define CLK_USBO_USBPHY 0x800091C1
|
||||||
|
|
||||||
|
#define CLK_RNG1_CSI 0x00000CC0
|
||||||
|
#define CLK_RNG1_PLL4R 0x00000CC1
|
||||||
|
#define CLK_RNG1_LSE 0x00000CC2
|
||||||
|
#define CLK_RNG1_LSI 0x00000CC3
|
||||||
|
|
||||||
|
#define CLK_RNG2_CSI 0x00009200
|
||||||
|
#define CLK_RNG2_PLL4R 0x00009201
|
||||||
|
#define CLK_RNG2_LSE 0x00009202
|
||||||
|
#define CLK_RNG2_LSI 0x00009203
|
||||||
|
|
||||||
|
#define CLK_CKPER_HSI 0x00000D00
|
||||||
|
#define CLK_CKPER_CSI 0x00000D01
|
||||||
|
#define CLK_CKPER_HSE 0x00000D02
|
||||||
|
#define CLK_CKPER_DISABLED 0x00000D03
|
||||||
|
|
||||||
|
#define CLK_STGEN_HSI 0x00000D40
|
||||||
|
#define CLK_STGEN_HSE 0x00000D41
|
||||||
|
#define CLK_STGEN_DISABLED 0x00000D43
|
||||||
|
|
||||||
|
#define CLK_DSI_DSIPLL 0x00009240
|
||||||
|
#define CLK_DSI_PLL4P 0x00009241
|
||||||
|
|
||||||
|
#define CLK_ADC_PLL4R 0x00009280
|
||||||
|
#define CLK_ADC_CKPER 0x00009281
|
||||||
|
#define CLK_ADC_PLL3Q 0x00009282
|
||||||
|
#define CLK_ADC_DISABLED 0x00009283
|
||||||
|
|
||||||
|
#define CLK_LPTIM45_PCLK3 0x000092C0
|
||||||
|
#define CLK_LPTIM45_PLL4P 0x000092C1
|
||||||
|
#define CLK_LPTIM45_PLL3Q 0x000092C2
|
||||||
|
#define CLK_LPTIM45_LSE 0x000092C3
|
||||||
|
#define CLK_LPTIM45_LSI 0x000092C4
|
||||||
|
#define CLK_LPTIM45_CKPER 0x000092C5
|
||||||
|
#define CLK_LPTIM45_DISABLED 0x000092C7
|
||||||
|
|
||||||
|
#define CLK_LPTIM23_PCLK3 0x00009300
|
||||||
|
#define CLK_LPTIM23_PLL4Q 0x00009301
|
||||||
|
#define CLK_LPTIM23_CKPER 0x00009302
|
||||||
|
#define CLK_LPTIM23_LSE 0x00009303
|
||||||
|
#define CLK_LPTIM23_LSI 0x00009304
|
||||||
|
#define CLK_LPTIM23_DISABLED 0x00009307
|
||||||
|
|
||||||
|
#define CLK_LPTIM1_PCLK1 0x00009340
|
||||||
|
#define CLK_LPTIM1_PLL4P 0x00009341
|
||||||
|
#define CLK_LPTIM1_PLL3Q 0x00009342
|
||||||
|
#define CLK_LPTIM1_LSE 0x00009343
|
||||||
|
#define CLK_LPTIM1_LSI 0x00009344
|
||||||
|
#define CLK_LPTIM1_CKPER 0x00009345
|
||||||
|
#define CLK_LPTIM1_DISABLED 0x00009347
|
||||||
|
|
||||||
|
/* define for st,pll /csg */
|
||||||
|
#define SSCG_MODE_CENTER_SPREAD 0
|
||||||
|
#define SSCG_MODE_DOWN_SPREAD 1
|
||||||
|
|
||||||
|
/* define for st,drive */
|
||||||
|
#define LSEDRV_LOWEST 0
|
||||||
|
#define LSEDRV_MEDIUM_LOW 1
|
||||||
|
#define LSEDRV_MEDIUM_HIGH 2
|
||||||
|
#define LSEDRV_HIGHEST 3
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,121 +1,11 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
|
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) STMicroelectronics 2018 - All Rights Reserved
|
* Copyright (C) 2020-2022, STMicroelectronics - All Rights Reserved
|
||||||
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _DT_BINDINGS_STM32MP1_RESET_H_
|
#if STM32MP13
|
||||||
#define _DT_BINDINGS_STM32MP1_RESET_H_
|
#include "stm32mp13-resets.h"
|
||||||
|
#endif
|
||||||
#define LTDC_R 3072
|
#if STM32MP15
|
||||||
#define DSI_R 3076
|
#include "stm32mp15-resets.h"
|
||||||
#define DDRPERFM_R 3080
|
#endif
|
||||||
#define USBPHY_R 3088
|
|
||||||
#define SPI6_R 3136
|
|
||||||
#define I2C4_R 3138
|
|
||||||
#define I2C6_R 3139
|
|
||||||
#define USART1_R 3140
|
|
||||||
#define STGEN_R 3156
|
|
||||||
#define GPIOZ_R 3200
|
|
||||||
#define CRYP1_R 3204
|
|
||||||
#define HASH1_R 3205
|
|
||||||
#define RNG1_R 3206
|
|
||||||
#define AXIM_R 3216
|
|
||||||
#define GPU_R 3269
|
|
||||||
#define ETHMAC_R 3274
|
|
||||||
#define FMC_R 3276
|
|
||||||
#define QSPI_R 3278
|
|
||||||
#define SDMMC1_R 3280
|
|
||||||
#define SDMMC2_R 3281
|
|
||||||
#define CRC1_R 3284
|
|
||||||
#define USBH_R 3288
|
|
||||||
#define MDMA_R 3328
|
|
||||||
#define MCU_R 8225
|
|
||||||
#define TIM2_R 19456
|
|
||||||
#define TIM3_R 19457
|
|
||||||
#define TIM4_R 19458
|
|
||||||
#define TIM5_R 19459
|
|
||||||
#define TIM6_R 19460
|
|
||||||
#define TIM7_R 19461
|
|
||||||
#define TIM12_R 16462
|
|
||||||
#define TIM13_R 16463
|
|
||||||
#define TIM14_R 16464
|
|
||||||
#define LPTIM1_R 19465
|
|
||||||
#define SPI2_R 19467
|
|
||||||
#define SPI3_R 19468
|
|
||||||
#define USART2_R 19470
|
|
||||||
#define USART3_R 19471
|
|
||||||
#define UART4_R 19472
|
|
||||||
#define UART5_R 19473
|
|
||||||
#define UART7_R 19474
|
|
||||||
#define UART8_R 19475
|
|
||||||
#define I2C1_R 19477
|
|
||||||
#define I2C2_R 19478
|
|
||||||
#define I2C3_R 19479
|
|
||||||
#define I2C5_R 19480
|
|
||||||
#define SPDIF_R 19482
|
|
||||||
#define CEC_R 19483
|
|
||||||
#define DAC12_R 19485
|
|
||||||
#define MDIO_R 19847
|
|
||||||
#define TIM1_R 19520
|
|
||||||
#define TIM8_R 19521
|
|
||||||
#define TIM15_R 19522
|
|
||||||
#define TIM16_R 19523
|
|
||||||
#define TIM17_R 19524
|
|
||||||
#define SPI1_R 19528
|
|
||||||
#define SPI4_R 19529
|
|
||||||
#define SPI5_R 19530
|
|
||||||
#define USART6_R 19533
|
|
||||||
#define SAI1_R 19536
|
|
||||||
#define SAI2_R 19537
|
|
||||||
#define SAI3_R 19538
|
|
||||||
#define DFSDM_R 19540
|
|
||||||
#define FDCAN_R 19544
|
|
||||||
#define LPTIM2_R 19584
|
|
||||||
#define LPTIM3_R 19585
|
|
||||||
#define LPTIM4_R 19586
|
|
||||||
#define LPTIM5_R 19587
|
|
||||||
#define SAI4_R 19592
|
|
||||||
#define SYSCFG_R 19595
|
|
||||||
#define VREF_R 19597
|
|
||||||
#define TMPSENS_R 19600
|
|
||||||
#define PMBCTRL_R 19601
|
|
||||||
#define DMA1_R 19648
|
|
||||||
#define DMA2_R 19649
|
|
||||||
#define DMAMUX_R 19650
|
|
||||||
#define ADC12_R 19653
|
|
||||||
#define USBO_R 19656
|
|
||||||
#define SDMMC3_R 19664
|
|
||||||
#define CAMITF_R 19712
|
|
||||||
#define CRYP2_R 19716
|
|
||||||
#define HASH2_R 19717
|
|
||||||
#define RNG2_R 19718
|
|
||||||
#define CRC2_R 19719
|
|
||||||
#define HSEM_R 19723
|
|
||||||
#define MBOX_R 19724
|
|
||||||
#define GPIOA_R 19776
|
|
||||||
#define GPIOB_R 19777
|
|
||||||
#define GPIOC_R 19778
|
|
||||||
#define GPIOD_R 19779
|
|
||||||
#define GPIOE_R 19780
|
|
||||||
#define GPIOF_R 19781
|
|
||||||
#define GPIOG_R 19782
|
|
||||||
#define GPIOH_R 19783
|
|
||||||
#define GPIOI_R 19784
|
|
||||||
#define GPIOJ_R 19785
|
|
||||||
#define GPIOK_R 19786
|
|
||||||
|
|
||||||
/* SCMI reset domain identifiers */
|
|
||||||
#define RST_SCMI0_SPI6 0
|
|
||||||
#define RST_SCMI0_I2C4 1
|
|
||||||
#define RST_SCMI0_I2C6 2
|
|
||||||
#define RST_SCMI0_USART1 3
|
|
||||||
#define RST_SCMI0_STGEN 4
|
|
||||||
#define RST_SCMI0_GPIOZ 5
|
|
||||||
#define RST_SCMI0_CRYP1 6
|
|
||||||
#define RST_SCMI0_HASH1 7
|
|
||||||
#define RST_SCMI0_RNG1 8
|
|
||||||
#define RST_SCMI0_MDMA 9
|
|
||||||
#define RST_SCMI0_MCU 10
|
|
||||||
|
|
||||||
#endif /* _DT_BINDINGS_STM32MP1_RESET_H_ */
|
|
||||||
|
|
96
include/dt-bindings/reset/stm32mp13-resets.h
Normal file
96
include/dt-bindings/reset/stm32mp13-resets.h
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||||
|
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_STM32MP13_RESET_H_
|
||||||
|
#define _DT_BINDINGS_STM32MP13_RESET_H_
|
||||||
|
|
||||||
|
#define TIM2_R 13568
|
||||||
|
#define TIM3_R 13569
|
||||||
|
#define TIM4_R 13570
|
||||||
|
#define TIM5_R 13571
|
||||||
|
#define TIM6_R 13572
|
||||||
|
#define TIM7_R 13573
|
||||||
|
#define LPTIM1_R 13577
|
||||||
|
#define SPI2_R 13579
|
||||||
|
#define SPI3_R 13580
|
||||||
|
#define USART3_R 13583
|
||||||
|
#define UART4_R 13584
|
||||||
|
#define UART5_R 13585
|
||||||
|
#define UART7_R 13586
|
||||||
|
#define UART8_R 13587
|
||||||
|
#define I2C1_R 13589
|
||||||
|
#define I2C2_R 13590
|
||||||
|
#define SPDIF_R 13594
|
||||||
|
#define TIM1_R 13632
|
||||||
|
#define TIM8_R 13633
|
||||||
|
#define SPI1_R 13640
|
||||||
|
#define USART6_R 13645
|
||||||
|
#define SAI1_R 13648
|
||||||
|
#define SAI2_R 13649
|
||||||
|
#define DFSDM_R 13652
|
||||||
|
#define FDCAN_R 13656
|
||||||
|
#define LPTIM2_R 13696
|
||||||
|
#define LPTIM3_R 13697
|
||||||
|
#define LPTIM4_R 13698
|
||||||
|
#define LPTIM5_R 13699
|
||||||
|
#define SYSCFG_R 13707
|
||||||
|
#define VREF_R 13709
|
||||||
|
#define DTS_R 13712
|
||||||
|
#define PMBCTRL_R 13713
|
||||||
|
#define LTDC_R 13760
|
||||||
|
#define DCMIPP_R 13761
|
||||||
|
#define DDRPERFM_R 13768
|
||||||
|
#define USBPHY_R 13776
|
||||||
|
#define STGEN_R 13844
|
||||||
|
#define USART1_R 13888
|
||||||
|
#define USART2_R 13889
|
||||||
|
#define SPI4_R 13890
|
||||||
|
#define SPI5_R 13891
|
||||||
|
#define I2C3_R 13892
|
||||||
|
#define I2C4_R 13893
|
||||||
|
#define I2C5_R 13894
|
||||||
|
#define TIM12_R 13895
|
||||||
|
#define TIM13_R 13896
|
||||||
|
#define TIM14_R 13897
|
||||||
|
#define TIM15_R 13898
|
||||||
|
#define TIM16_R 13899
|
||||||
|
#define TIM17_R 13900
|
||||||
|
#define DMA1_R 13952
|
||||||
|
#define DMA2_R 13953
|
||||||
|
#define DMAMUX1_R 13954
|
||||||
|
#define DMA3_R 13955
|
||||||
|
#define DMAMUX2_R 13956
|
||||||
|
#define ADC1_R 13957
|
||||||
|
#define ADC2_R 13958
|
||||||
|
#define USBO_R 13960
|
||||||
|
#define GPIOA_R 14080
|
||||||
|
#define GPIOB_R 14081
|
||||||
|
#define GPIOC_R 14082
|
||||||
|
#define GPIOD_R 14083
|
||||||
|
#define GPIOE_R 14084
|
||||||
|
#define GPIOF_R 14085
|
||||||
|
#define GPIOG_R 14086
|
||||||
|
#define GPIOH_R 14087
|
||||||
|
#define GPIOI_R 14088
|
||||||
|
#define TSC_R 14095
|
||||||
|
#define PKA_R 14146
|
||||||
|
#define SAES_R 14147
|
||||||
|
#define CRYP1_R 14148
|
||||||
|
#define HASH1_R 14149
|
||||||
|
#define RNG1_R 14150
|
||||||
|
#define AXIMC_R 14160
|
||||||
|
#define MDMA_R 14208
|
||||||
|
#define MCE_R 14209
|
||||||
|
#define ETH1MAC_R 14218
|
||||||
|
#define FMC_R 14220
|
||||||
|
#define QSPI_R 14222
|
||||||
|
#define SDMMC1_R 14224
|
||||||
|
#define SDMMC2_R 14225
|
||||||
|
#define CRC1_R 14228
|
||||||
|
#define USBH_R 14232
|
||||||
|
#define ETH2MAC_R 14238
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_STM32MP13_RESET_H_ */
|
123
include/dt-bindings/reset/stm32mp15-resets.h
Normal file
123
include/dt-bindings/reset/stm32mp15-resets.h
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) STMicroelectronics 2018-2022 - All Rights Reserved
|
||||||
|
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_STM32MP15_RESET_H_
|
||||||
|
#define _DT_BINDINGS_STM32MP15_RESET_H_
|
||||||
|
|
||||||
|
#define MCU_HOLD_BOOT_R 2144
|
||||||
|
#define LTDC_R 3072
|
||||||
|
#define DSI_R 3076
|
||||||
|
#define DDRPERFM_R 3080
|
||||||
|
#define USBPHY_R 3088
|
||||||
|
#define SPI6_R 3136
|
||||||
|
#define I2C4_R 3138
|
||||||
|
#define I2C6_R 3139
|
||||||
|
#define USART1_R 3140
|
||||||
|
#define STGEN_R 3156
|
||||||
|
#define GPIOZ_R 3200
|
||||||
|
#define CRYP1_R 3204
|
||||||
|
#define HASH1_R 3205
|
||||||
|
#define RNG1_R 3206
|
||||||
|
#define AXIM_R 3216
|
||||||
|
#define GPU_R 3269
|
||||||
|
#define ETHMAC_R 3274
|
||||||
|
#define FMC_R 3276
|
||||||
|
#define QSPI_R 3278
|
||||||
|
#define SDMMC1_R 3280
|
||||||
|
#define SDMMC2_R 3281
|
||||||
|
#define CRC1_R 3284
|
||||||
|
#define USBH_R 3288
|
||||||
|
#define MDMA_R 3328
|
||||||
|
#define MCU_R 8225
|
||||||
|
#define TIM2_R 19456
|
||||||
|
#define TIM3_R 19457
|
||||||
|
#define TIM4_R 19458
|
||||||
|
#define TIM5_R 19459
|
||||||
|
#define TIM6_R 19460
|
||||||
|
#define TIM7_R 19461
|
||||||
|
#define TIM12_R 16462
|
||||||
|
#define TIM13_R 16463
|
||||||
|
#define TIM14_R 16464
|
||||||
|
#define LPTIM1_R 19465
|
||||||
|
#define SPI2_R 19467
|
||||||
|
#define SPI3_R 19468
|
||||||
|
#define USART2_R 19470
|
||||||
|
#define USART3_R 19471
|
||||||
|
#define UART4_R 19472
|
||||||
|
#define UART5_R 19473
|
||||||
|
#define UART7_R 19474
|
||||||
|
#define UART8_R 19475
|
||||||
|
#define I2C1_R 19477
|
||||||
|
#define I2C2_R 19478
|
||||||
|
#define I2C3_R 19479
|
||||||
|
#define I2C5_R 19480
|
||||||
|
#define SPDIF_R 19482
|
||||||
|
#define CEC_R 19483
|
||||||
|
#define DAC12_R 19485
|
||||||
|
#define MDIO_R 19847
|
||||||
|
#define TIM1_R 19520
|
||||||
|
#define TIM8_R 19521
|
||||||
|
#define TIM15_R 19522
|
||||||
|
#define TIM16_R 19523
|
||||||
|
#define TIM17_R 19524
|
||||||
|
#define SPI1_R 19528
|
||||||
|
#define SPI4_R 19529
|
||||||
|
#define SPI5_R 19530
|
||||||
|
#define USART6_R 19533
|
||||||
|
#define SAI1_R 19536
|
||||||
|
#define SAI2_R 19537
|
||||||
|
#define SAI3_R 19538
|
||||||
|
#define DFSDM_R 19540
|
||||||
|
#define FDCAN_R 19544
|
||||||
|
#define LPTIM2_R 19584
|
||||||
|
#define LPTIM3_R 19585
|
||||||
|
#define LPTIM4_R 19586
|
||||||
|
#define LPTIM5_R 19587
|
||||||
|
#define SAI4_R 19592
|
||||||
|
#define SYSCFG_R 19595
|
||||||
|
#define VREF_R 19597
|
||||||
|
#define TMPSENS_R 19600
|
||||||
|
#define PMBCTRL_R 19601
|
||||||
|
#define DMA1_R 19648
|
||||||
|
#define DMA2_R 19649
|
||||||
|
#define DMAMUX_R 19650
|
||||||
|
#define ADC12_R 19653
|
||||||
|
#define USBO_R 19656
|
||||||
|
#define SDMMC3_R 19664
|
||||||
|
#define CAMITF_R 19712
|
||||||
|
#define CRYP2_R 19716
|
||||||
|
#define HASH2_R 19717
|
||||||
|
#define RNG2_R 19718
|
||||||
|
#define CRC2_R 19719
|
||||||
|
#define HSEM_R 19723
|
||||||
|
#define MBOX_R 19724
|
||||||
|
#define GPIOA_R 19776
|
||||||
|
#define GPIOB_R 19777
|
||||||
|
#define GPIOC_R 19778
|
||||||
|
#define GPIOD_R 19779
|
||||||
|
#define GPIOE_R 19780
|
||||||
|
#define GPIOF_R 19781
|
||||||
|
#define GPIOG_R 19782
|
||||||
|
#define GPIOH_R 19783
|
||||||
|
#define GPIOI_R 19784
|
||||||
|
#define GPIOJ_R 19785
|
||||||
|
#define GPIOK_R 19786
|
||||||
|
|
||||||
|
/* SCMI reset domain identifiers */
|
||||||
|
#define RST_SCMI0_SPI6 0
|
||||||
|
#define RST_SCMI0_I2C4 1
|
||||||
|
#define RST_SCMI0_I2C6 2
|
||||||
|
#define RST_SCMI0_USART1 3
|
||||||
|
#define RST_SCMI0_STGEN 4
|
||||||
|
#define RST_SCMI0_GPIOZ 5
|
||||||
|
#define RST_SCMI0_CRYP1 6
|
||||||
|
#define RST_SCMI0_HASH1 7
|
||||||
|
#define RST_SCMI0_RNG1 8
|
||||||
|
#define RST_SCMI0_MDMA 9
|
||||||
|
#define RST_SCMI0_MCU 10
|
||||||
|
#define RST_SCMI0_MCU_HOLD_BOOT 11
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_STM32MP15_RESET_H_ */
|
35
include/dt-bindings/soc/stm32mp13-tzc400.h
Normal file
35
include/dt-bindings/soc/stm32mp13-tzc400.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022, STMicroelectronics - All Rights Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_STM32MP13_TZC400_H
|
||||||
|
#define _DT_BINDINGS_STM32MP13_TZC400_H
|
||||||
|
|
||||||
|
#include <drivers/arm/tzc_common.h>
|
||||||
|
|
||||||
|
#define STM32MP1_TZC_A7_ID U(0)
|
||||||
|
#define STM32MP1_TZC_LCD_ID U(3)
|
||||||
|
#define STM32MP1_TZC_MDMA_ID U(5)
|
||||||
|
#define STM32MP1_TZC_DMA_ID U(6)
|
||||||
|
#define STM32MP1_TZC_USB_HOST_ID U(7)
|
||||||
|
#define STM32MP1_TZC_USB_OTG_ID U(8)
|
||||||
|
#define STM32MP1_TZC_SDMMC_ID U(9)
|
||||||
|
#define STM32MP1_TZC_ETH_ID U(10)
|
||||||
|
#define STM32MP1_TZC_DCMIPP_ID U(11)
|
||||||
|
#define STM32MP1_TZC_DAP_ID U(15)
|
||||||
|
|
||||||
|
#define TZC_REGION_NSEC_ALL_ACCESS_RDWR \
|
||||||
|
(TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_A7_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_LCD_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_MDMA_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_DMA_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_USB_HOST_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_USB_OTG_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_SDMMC_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_ETH_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_DCMIPP_ID) | \
|
||||||
|
TZC_REGION_ACCESS_RDWR(STM32MP1_TZC_DAP_ID))
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_STM32MP13_TZC400_H */
|
|
@ -47,7 +47,9 @@ static const char debug_msg[] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
static struct stm32mp_auth_ops stm32mp1_auth_ops;
|
static struct stm32mp_auth_ops stm32mp1_auth_ops;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void print_reset_reason(void)
|
static void print_reset_reason(void)
|
||||||
{
|
{
|
||||||
|
@ -82,6 +84,7 @@ static void print_reset_reason(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
if ((rstsr & RCC_MP_RSTSCLRR_MCSYSRSTF) != 0U) {
|
if ((rstsr & RCC_MP_RSTSCLRR_MCSYSRSTF) != 0U) {
|
||||||
if ((rstsr & RCC_MP_RSTSCLRR_PADRSTF) != 0U) {
|
if ((rstsr & RCC_MP_RSTSCLRR_PADRSTF) != 0U) {
|
||||||
INFO(" System reset generated by MCU (MCSYSRST)\n");
|
INFO(" System reset generated by MCU (MCSYSRST)\n");
|
||||||
|
@ -90,6 +93,7 @@ static void print_reset_reason(void)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((rstsr & RCC_MP_RSTSCLRR_MPSYSRSTF) != 0U) {
|
if ((rstsr & RCC_MP_RSTSCLRR_MPSYSRSTF) != 0U) {
|
||||||
INFO(" System reset generated by MPU (MPSYSRST)\n");
|
INFO(" System reset generated by MPU (MPSYSRST)\n");
|
||||||
|
@ -116,10 +120,12 @@ static void print_reset_reason(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
if ((rstsr & RCC_MP_RSTSCLRR_MPUP1RSTF) != 0U) {
|
if ((rstsr & RCC_MP_RSTSCLRR_MPUP1RSTF) != 0U) {
|
||||||
INFO(" MPU Processor 1 Reset\n");
|
INFO(" MPU Processor 1 Reset\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((rstsr & RCC_MP_RSTSCLRR_PADRSTF) != 0U) {
|
if ((rstsr & RCC_MP_RSTSCLRR_PADRSTF) != 0U) {
|
||||||
INFO(" Pad Reset from NRST\n");
|
INFO(" Pad Reset from NRST\n");
|
||||||
|
@ -171,6 +177,7 @@ void bl2_platform_setup(void)
|
||||||
#endif /* STM32MP_USE_STM32IMAGE */
|
#endif /* STM32MP_USE_STM32IMAGE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
static void update_monotonic_counter(void)
|
static void update_monotonic_counter(void)
|
||||||
{
|
{
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
|
@ -204,6 +211,7 @@ static void update_monotonic_counter(void)
|
||||||
version);
|
version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void bl2_el3_plat_arch_setup(void)
|
void bl2_el3_plat_arch_setup(void)
|
||||||
{
|
{
|
||||||
|
@ -271,8 +279,10 @@ void bl2_el3_plat_arch_setup(void)
|
||||||
mmio_clrbits_32(rcc_base + RCC_BDCR, RCC_BDCR_VSWRST);
|
mmio_clrbits_32(rcc_base + RCC_BDCR, RCC_BDCR_VSWRST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
/* Disable MCKPROT */
|
/* Disable MCKPROT */
|
||||||
mmio_clrbits_32(rcc_base + RCC_TZCR, RCC_TZCR_MCKPROT);
|
mmio_clrbits_32(rcc_base + RCC_TZCR, RCC_TZCR_MCKPROT);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set minimum reset pulse duration to 31ms for discrete power
|
* Set minimum reset pulse duration to 31ms for discrete power
|
||||||
|
@ -307,7 +317,7 @@ void bl2_el3_plat_arch_setup(void)
|
||||||
stm32_save_boot_interface(boot_context->boot_interface_selected,
|
stm32_save_boot_interface(boot_context->boot_interface_selected,
|
||||||
boot_context->boot_interface_instance);
|
boot_context->boot_interface_instance);
|
||||||
|
|
||||||
#if STM32MP_USB_PROGRAMMER
|
#if STM32MP_USB_PROGRAMMER && STM32MP15
|
||||||
/* Deconfigure all UART RX pins configured by ROM code */
|
/* Deconfigure all UART RX pins configured by ROM code */
|
||||||
stm32mp1_deconfigure_uart_pins();
|
stm32mp1_deconfigure_uart_pins();
|
||||||
#endif
|
#endif
|
||||||
|
@ -338,6 +348,10 @@ skip_console_init:
|
||||||
|
|
||||||
if (dt_pmic_status() > 0) {
|
if (dt_pmic_status() > 0) {
|
||||||
initialize_pmic();
|
initialize_pmic();
|
||||||
|
if (pmic_voltages_init() != 0) {
|
||||||
|
ERROR("PMIC voltages init failed\n");
|
||||||
|
panic();
|
||||||
|
}
|
||||||
print_pmic_info_and_debug();
|
print_pmic_info_and_debug();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,6 +373,7 @@ skip_console_init:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
if (stm32mp_is_auth_supported()) {
|
if (stm32mp_is_auth_supported()) {
|
||||||
stm32mp1_auth_ops.check_key =
|
stm32mp1_auth_ops.check_key =
|
||||||
boot_context->bootrom_ecdsa_check_key;
|
boot_context->bootrom_ecdsa_check_key;
|
||||||
|
@ -367,12 +382,15 @@ skip_console_init:
|
||||||
|
|
||||||
stm32mp_init_auth(&stm32mp1_auth_ops);
|
stm32mp_init_auth(&stm32mp1_auth_ops);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
stm32mp1_arch_security_setup();
|
stm32mp1_arch_security_setup();
|
||||||
|
|
||||||
print_reset_reason();
|
print_reset_reason();
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
update_monotonic_counter();
|
update_monotonic_counter();
|
||||||
|
#endif
|
||||||
|
|
||||||
stm32mp1_syscfg_enable_io_compensation_finish();
|
stm32mp1_syscfg_enable_io_compensation_finish();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2021, STMicroelectronics - All Rights Reserved
|
* Copyright (c) 2017-2022, STMicroelectronics - All Rights Reserved
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -13,12 +13,22 @@
|
||||||
/*
|
/*
|
||||||
* Possible value of boot context field 'auth_status'
|
* Possible value of boot context field 'auth_status'
|
||||||
*/
|
*/
|
||||||
|
#if STM32MP13
|
||||||
|
/* No authentication done */
|
||||||
|
#define BOOT_API_CTX_AUTH_NO 0x7CFDD351U
|
||||||
|
/* Authentication done and failed */
|
||||||
|
#define BOOT_API_CTX_AUTH_FAILED 0x51330884U
|
||||||
|
/* Authentication done and success */
|
||||||
|
#define BOOT_API_CTX_AUTH_SUCCESS 0x67E8CAE1U
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
/* No authentication done */
|
/* No authentication done */
|
||||||
#define BOOT_API_CTX_AUTH_NO 0x0U
|
#define BOOT_API_CTX_AUTH_NO 0x0U
|
||||||
/* Authentication done and failed */
|
/* Authentication done and failed */
|
||||||
#define BOOT_API_CTX_AUTH_FAILED 0x1U
|
#define BOOT_API_CTX_AUTH_FAILED 0x1U
|
||||||
/* Authentication done and succeeded */
|
/* Authentication done and succeeded */
|
||||||
#define BOOT_API_CTX_AUTH_SUCCESS 0x2U
|
#define BOOT_API_CTX_AUTH_SUCCESS 0x2U
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Possible value of boot context field 'boot_interface_sel'
|
* Possible value of boot context field 'boot_interface_sel'
|
||||||
|
@ -70,11 +80,17 @@
|
||||||
#define BOOT_API_CTX_EMMC_ERROR_STATUS_HEADER_NOT_FOUND 0x5U
|
#define BOOT_API_CTX_EMMC_ERROR_STATUS_HEADER_NOT_FOUND 0x5U
|
||||||
#define BOOT_API_CTX_EMMC_ERROR_STATUS_HEADER_SIZE_ZERO 0x6U
|
#define BOOT_API_CTX_EMMC_ERROR_STATUS_HEADER_SIZE_ZERO 0x6U
|
||||||
#define BOOT_API_CTX_EMMC_ERROR_STATUS_IMAGE_NOT_COMPLETE 0x7U
|
#define BOOT_API_CTX_EMMC_ERROR_STATUS_IMAGE_NOT_COMPLETE 0x7U
|
||||||
|
#define BOOT_API_CTX_EMMC_ERROR_STATUS_ACK_ERROR 0x8U
|
||||||
|
|
||||||
/* Image Header related definitions */
|
/* Image Header related definitions */
|
||||||
|
|
||||||
/* Definition of header version */
|
/* Definition of header version */
|
||||||
|
#if STM32MP13
|
||||||
|
#define BOOT_API_HEADER_VERSION 0x00020000U
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define BOOT_API_HEADER_VERSION 0x00010000U
|
#define BOOT_API_HEADER_VERSION 0x00010000U
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Magic number used to detect header in memory
|
* Magic number used to detect header in memory
|
||||||
|
@ -93,6 +109,49 @@
|
||||||
#define BOOT_API_ECDSA_ALGO_TYPE_P256NIST 1
|
#define BOOT_API_ECDSA_ALGO_TYPE_P256NIST 1
|
||||||
#define BOOT_API_ECDSA_ALGO_TYPE_BRAINPOOL256 2
|
#define BOOT_API_ECDSA_ALGO_TYPE_BRAINPOOL256 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extension headers related definitions
|
||||||
|
*/
|
||||||
|
/* 'bootapi_image_header_t.extension_flag' used for authentication feature */
|
||||||
|
#define BOOT_API_AUTHENTICATION_EXTENSION_BIT BIT(0)
|
||||||
|
/* 'bootapi_image_header_t.extension_flag' used for FSBL decryption feature */
|
||||||
|
#define BOOT_API_FSBL_DECRYPTION_EXTENSION_BIT BIT(1)
|
||||||
|
/* 'bootapi_image_header_t.extension_flag' used for padding header feature */
|
||||||
|
#define BOOT_API_PADDING_EXTENSION_BIT BIT(31)
|
||||||
|
/*
|
||||||
|
* mask of bits of field 'bootapi_image_header_t.extension_flag'
|
||||||
|
* used for extension headers
|
||||||
|
*/
|
||||||
|
#define BOOT_API_ALL_EXTENSIONS_MASK \
|
||||||
|
(BOOT_API_AUTHENTICATION_EXTENSION_BIT | \
|
||||||
|
BOOT_API_FSBL_DECRYPTION_EXTENSION_BIT | \
|
||||||
|
BOOT_API_PADDING_EXTENSION_BIT)
|
||||||
|
/*
|
||||||
|
* Magic number of FSBL decryption extension header
|
||||||
|
* The value shall gives the four bytes 'S','T',0x00,0x01 in memory
|
||||||
|
*/
|
||||||
|
#define BOOT_API_FSBL_DECRYPTION_HEADER_MAGIC_NB 0x01005453U
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic number of PKH revocation extension header
|
||||||
|
* The value shall gives the four bytes 'S','T',0x00,0x02 in memory
|
||||||
|
*/
|
||||||
|
#define BOOT_API_AUTHENTICATION_HEADER_MAGIC_NB 0x02005453U
|
||||||
|
|
||||||
|
/* Max number of ECDSA public key hash in table */
|
||||||
|
#define BOOT_API_AUTHENTICATION_NB_PKH_MAX 8U
|
||||||
|
|
||||||
|
/* ECDSA public key hash table size in bytes */
|
||||||
|
#define BOOT_API_AUTHENTICATION_TABLE_SIZE_BYTES \
|
||||||
|
(BOOT_API_AUTHENTICATION_NB_PKH_MAX * \
|
||||||
|
BOOT_API_SHA256_DIGEST_SIZE_IN_BYTES)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic number of padding extension header
|
||||||
|
* The value shall gives the four bytes 'S','T',0xFF,0xFF in memory
|
||||||
|
*/
|
||||||
|
#define BOOT_API_PADDING_HEADER_MAGIC_NB 0xFFFF5453U
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cores secure magic numbers
|
* Cores secure magic numbers
|
||||||
* Constant to be stored in bakcup register
|
* Constant to be stored in bakcup register
|
||||||
|
@ -157,11 +216,20 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
uint16_t boot_interface_selected;
|
uint16_t boot_interface_selected;
|
||||||
uint16_t boot_interface_instance;
|
uint16_t boot_interface_instance;
|
||||||
|
#if STM32MP13
|
||||||
|
uint32_t reserved1[12];
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
uint32_t reserved1[13];
|
uint32_t reserved1[13];
|
||||||
|
#endif
|
||||||
uint32_t otp_afmux_values[3];
|
uint32_t otp_afmux_values[3];
|
||||||
uint32_t reserved[5];
|
uint32_t reserved[3];
|
||||||
|
#if STM32MP15
|
||||||
|
uint32_t reserved2[2];
|
||||||
|
#endif
|
||||||
uint32_t auth_status;
|
uint32_t auth_status;
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
/*
|
/*
|
||||||
* Pointers to bootROM External Secure Services
|
* Pointers to bootROM External Secure Services
|
||||||
* - ECDSA check key
|
* - ECDSA check key
|
||||||
|
@ -179,7 +247,7 @@ typedef struct {
|
||||||
uint8_t *signature,
|
uint8_t *signature,
|
||||||
uint32_t ecc_algo,
|
uint32_t ecc_algo,
|
||||||
uint32_t *entry_in);
|
uint32_t *entry_in);
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* Information specific to an SD boot
|
* Information specific to an SD boot
|
||||||
* Updated each time an SD boot is at least attempted,
|
* Updated each time an SD boot is at least attempted,
|
||||||
|
@ -227,10 +295,10 @@ typedef struct {
|
||||||
uint8_t image_signature[BOOT_API_ECDSA_SIGNATURE_LEN_IN_BYTES];
|
uint8_t image_signature[BOOT_API_ECDSA_SIGNATURE_LEN_IN_BYTES];
|
||||||
/*
|
/*
|
||||||
* Checksum of payload
|
* Checksum of payload
|
||||||
* 32-bit sum all all payload bytes considered as 8 bit unigned numbers,
|
* 32-bit sum all payload bytes considered as 8 bit unsigned
|
||||||
* discarding any overflow bits.
|
* numbers, discarding any overflow bits.
|
||||||
* Use to check UART/USB downloaded image integrity when signature
|
* Use to check UART/USB downloaded image integrity when signature
|
||||||
* is not used (i.e bit 0 : 'No_sig_check' = 1 in option flags)
|
* is not used
|
||||||
*/
|
*/
|
||||||
uint32_t payload_checksum;
|
uint32_t payload_checksum;
|
||||||
/* Image header version : should have value BOOT_API_HEADER_VERSION */
|
/* Image header version : should have value BOOT_API_HEADER_VERSION */
|
||||||
|
@ -255,6 +323,25 @@ typedef struct {
|
||||||
* counter value in OTP_CFG4 prior executing the downloaded image
|
* counter value in OTP_CFG4 prior executing the downloaded image
|
||||||
*/
|
*/
|
||||||
uint32_t image_version;
|
uint32_t image_version;
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
/*
|
||||||
|
* Extension flags :
|
||||||
|
*
|
||||||
|
* Bit 0 : Authentication extension header
|
||||||
|
* value 0 : No signature check request
|
||||||
|
* Bit 1 : Encryption extension header
|
||||||
|
* Bit 2 : Padding extension header
|
||||||
|
*/
|
||||||
|
uint32_t extension_flags;
|
||||||
|
/* Length in bytes of all extension headers */
|
||||||
|
uint32_t extension_headers_length;
|
||||||
|
/* Add binary type information */
|
||||||
|
uint32_t binary_type;
|
||||||
|
/* Pad up to 128 byte total size */
|
||||||
|
uint8_t pad[16];
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
/*
|
/*
|
||||||
* Option flags:
|
* Option flags:
|
||||||
* Bit 0 : No signature check request : 'No_sig_check'
|
* Bit 0 : No signature check request : 'No_sig_check'
|
||||||
|
@ -280,6 +367,7 @@ typedef struct {
|
||||||
uint8_t pad[83];
|
uint8_t pad[83];
|
||||||
/* Add binary type information */
|
/* Add binary type information */
|
||||||
uint8_t binary_type;
|
uint8_t binary_type;
|
||||||
|
#endif
|
||||||
} __packed boot_api_image_header_t;
|
} __packed boot_api_image_header_t;
|
||||||
|
|
||||||
#endif /* BOOT_API_H */
|
#endif /* BOOT_API_H */
|
||||||
|
|
|
@ -21,6 +21,16 @@ void stm32mp1_syscfg_init(void);
|
||||||
void stm32mp1_syscfg_enable_io_compensation_start(void);
|
void stm32mp1_syscfg_enable_io_compensation_start(void);
|
||||||
void stm32mp1_syscfg_enable_io_compensation_finish(void);
|
void stm32mp1_syscfg_enable_io_compensation_finish(void);
|
||||||
void stm32mp1_syscfg_disable_io_compensation(void);
|
void stm32mp1_syscfg_disable_io_compensation(void);
|
||||||
|
uint32_t stm32mp1_syscfg_get_chip_version(void);
|
||||||
|
uint32_t stm32mp1_syscfg_get_chip_dev_id(void);
|
||||||
|
#if STM32MP13
|
||||||
|
void stm32mp1_syscfg_boot_mode_enable(void);
|
||||||
|
void stm32mp1_syscfg_boot_mode_disable(void);
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
|
static inline void stm32mp1_syscfg_boot_mode_enable(void){}
|
||||||
|
static inline void stm32mp1_syscfg_boot_mode_disable(void){}
|
||||||
|
#endif
|
||||||
|
|
||||||
void stm32mp1_deconfigure_uart_pins(void);
|
void stm32mp1_deconfigure_uart_pins(void);
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,52 @@ STM32_TF_VERSION ?= 0
|
||||||
# Enable dynamic memory mapping
|
# Enable dynamic memory mapping
|
||||||
PLAT_XLAT_TABLES_DYNAMIC := 1
|
PLAT_XLAT_TABLES_DYNAMIC := 1
|
||||||
|
|
||||||
|
# Default Device tree
|
||||||
|
DTB_FILE_NAME ?= stm32mp157c-ev1.dtb
|
||||||
|
|
||||||
|
STM32MP13 ?= 0
|
||||||
|
STM32MP15 ?= 0
|
||||||
|
|
||||||
|
ifeq ($(STM32MP13),1)
|
||||||
|
ifeq ($(STM32MP15),1)
|
||||||
|
$(error Cannot enable both flags STM32MP13 and STM32MP15)
|
||||||
|
endif
|
||||||
|
STM32MP13 := 1
|
||||||
|
STM32MP15 := 0
|
||||||
|
else ifeq ($(STM32MP15),1)
|
||||||
|
STM32MP13 := 0
|
||||||
|
STM32MP15 := 1
|
||||||
|
else ifneq ($(findstring stm32mp13,$(DTB_FILE_NAME)),)
|
||||||
|
STM32MP13 := 1
|
||||||
|
STM32MP15 := 0
|
||||||
|
else ifneq ($(findstring stm32mp15,$(DTB_FILE_NAME)),)
|
||||||
|
STM32MP13 := 0
|
||||||
|
STM32MP15 := 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(STM32MP13),1)
|
||||||
|
# DDR controller with single AXI port and 16-bit interface
|
||||||
|
STM32MP_DDR_DUAL_AXI_PORT:= 0
|
||||||
|
STM32MP_DDR_32BIT_INTERFACE:= 0
|
||||||
|
|
||||||
|
# STM32 image header version v2.0
|
||||||
|
STM32_HEADER_VERSION_MAJOR:= 2
|
||||||
|
STM32_HEADER_VERSION_MINOR:= 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(STM32MP15),1)
|
||||||
# DDR controller with dual AXI port and 32-bit interface
|
# DDR controller with dual AXI port and 32-bit interface
|
||||||
STM32MP_DDR_DUAL_AXI_PORT:= 1
|
STM32MP_DDR_DUAL_AXI_PORT:= 1
|
||||||
STM32MP_DDR_32BIT_INTERFACE:= 1
|
STM32MP_DDR_32BIT_INTERFACE:= 1
|
||||||
|
|
||||||
|
# STM32 image header version v1.0
|
||||||
|
STM32_HEADER_VERSION_MAJOR:= 1
|
||||||
|
STM32_HEADER_VERSION_MINOR:= 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
# STM32 image header binary type for BL2
|
||||||
|
STM32_HEADER_BL2_BINARY_TYPE:= 0x10
|
||||||
|
|
||||||
ifeq ($(AARCH32_SP),sp_min)
|
ifeq ($(AARCH32_SP),sp_min)
|
||||||
# Disable Neon support: sp_min runtime may conflict with non-secure world
|
# Disable Neon support: sp_min runtime may conflict with non-secure world
|
||||||
TF_CFLAGS += -mfloat-abi=soft
|
TF_CFLAGS += -mfloat-abi=soft
|
||||||
|
@ -82,7 +124,10 @@ STM32MP_USB_PROGRAMMER ?= 0
|
||||||
STM32MP_UART_PROGRAMMER ?= 0
|
STM32MP_UART_PROGRAMMER ?= 0
|
||||||
|
|
||||||
# Device tree
|
# Device tree
|
||||||
DTB_FILE_NAME ?= stm32mp157c-ev1.dtb
|
ifeq ($(STM32MP13),1)
|
||||||
|
BL2_DTSI := stm32mp13-bl2.dtsi
|
||||||
|
FDT_SOURCES := $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME)))
|
||||||
|
else
|
||||||
ifeq ($(STM32MP_USE_STM32IMAGE),1)
|
ifeq ($(STM32MP_USE_STM32IMAGE),1)
|
||||||
ifeq ($(AARCH32_SP),optee)
|
ifeq ($(AARCH32_SP),optee)
|
||||||
BL2_DTSI := stm32mp15-bl2.dtsi
|
BL2_DTSI := stm32mp15-bl2.dtsi
|
||||||
|
@ -98,6 +143,7 @@ BL32_DTSI := stm32mp15-bl32.dtsi
|
||||||
FDT_SOURCES += $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dts,$(DTB_FILE_NAME)))
|
FDT_SOURCES += $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dts,$(DTB_FILE_NAME)))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
$(eval DTC_V = $(shell $(DTC) -v | awk '{print $$NF}'))
|
$(eval DTC_V = $(shell $(DTC) -v | awk '{print $$NF}'))
|
||||||
$(eval DTC_VERSION = $(shell printf "%d" $(shell echo ${DTC_V} | cut -d- -f1 | sed "s/\./0/g")))
|
$(eval DTC_VERSION = $(shell printf "%d" $(shell echo ${DTC_V} | cut -d- -f1 | sed "s/\./0/g")))
|
||||||
|
@ -167,6 +213,8 @@ $(eval $(call assert_booleans,\
|
||||||
STM32MP_UART_PROGRAMMER \
|
STM32MP_UART_PROGRAMMER \
|
||||||
STM32MP_USB_PROGRAMMER \
|
STM32MP_USB_PROGRAMMER \
|
||||||
STM32MP_USE_STM32IMAGE \
|
STM32MP_USE_STM32IMAGE \
|
||||||
|
STM32MP13 \
|
||||||
|
STM32MP15 \
|
||||||
)))
|
)))
|
||||||
|
|
||||||
$(eval $(call assert_numerics,\
|
$(eval $(call assert_numerics,\
|
||||||
|
@ -196,6 +244,8 @@ $(eval $(call add_defines,\
|
||||||
STM32MP_UART_PROGRAMMER \
|
STM32MP_UART_PROGRAMMER \
|
||||||
STM32MP_USB_PROGRAMMER \
|
STM32MP_USB_PROGRAMMER \
|
||||||
STM32MP_USE_STM32IMAGE \
|
STM32MP_USE_STM32IMAGE \
|
||||||
|
STM32MP13 \
|
||||||
|
STM32MP15 \
|
||||||
)))
|
)))
|
||||||
|
|
||||||
# Include paths and source files
|
# Include paths and source files
|
||||||
|
@ -230,7 +280,6 @@ PLAT_BL_COMMON_SOURCES += drivers/arm/tzc/tzc400.c \
|
||||||
drivers/delay_timer/generic_delay_timer.c \
|
drivers/delay_timer/generic_delay_timer.c \
|
||||||
drivers/st/bsec/bsec2.c \
|
drivers/st/bsec/bsec2.c \
|
||||||
drivers/st/clk/stm32mp_clkfunc.c \
|
drivers/st/clk/stm32mp_clkfunc.c \
|
||||||
drivers/st/clk/stm32mp1_clk.c \
|
|
||||||
drivers/st/ddr/stm32mp_ddr.c \
|
drivers/st/ddr/stm32mp_ddr.c \
|
||||||
drivers/st/ddr/stm32mp1_ddr_helpers.c \
|
drivers/st/ddr/stm32mp1_ddr_helpers.c \
|
||||||
drivers/st/gpio/stm32_gpio.c \
|
drivers/st/gpio/stm32_gpio.c \
|
||||||
|
@ -246,6 +295,13 @@ PLAT_BL_COMMON_SOURCES += drivers/arm/tzc/tzc400.c \
|
||||||
plat/st/stm32mp1/stm32mp1_helper.S \
|
plat/st/stm32mp1/stm32mp1_helper.S \
|
||||||
plat/st/stm32mp1/stm32mp1_syscfg.c
|
plat/st/stm32mp1/stm32mp1_syscfg.c
|
||||||
|
|
||||||
|
ifeq ($(STM32MP13),1)
|
||||||
|
PLAT_BL_COMMON_SOURCES += drivers/st/clk/clk-stm32-core.c \
|
||||||
|
drivers/st/clk/clk-stm32mp13.c
|
||||||
|
else
|
||||||
|
PLAT_BL_COMMON_SOURCES += drivers/st/clk/stm32mp1_clk.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq (${STM32MP_USE_STM32IMAGE},1)
|
ifneq (${STM32MP_USE_STM32IMAGE},1)
|
||||||
BL2_SOURCES += ${FCONF_SOURCES} ${FCONF_DYN_SOURCES}
|
BL2_SOURCES += ${FCONF_SOURCES} ${FCONF_DYN_SOURCES}
|
||||||
|
|
||||||
|
@ -275,9 +331,13 @@ BL2_SOURCES += drivers/io/io_block.c \
|
||||||
drivers/io/io_mtd.c \
|
drivers/io/io_mtd.c \
|
||||||
drivers/io/io_storage.c \
|
drivers/io/io_storage.c \
|
||||||
drivers/st/crypto/stm32_hash.c \
|
drivers/st/crypto/stm32_hash.c \
|
||||||
plat/st/common/stm32mp_auth.c \
|
|
||||||
plat/st/stm32mp1/bl2_plat_setup.c
|
plat/st/stm32mp1/bl2_plat_setup.c
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(STM32MP15),1)
|
||||||
|
BL2_SOURCES += plat/st/common/stm32mp_auth.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),)
|
ifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),)
|
||||||
BL2_SOURCES += drivers/mmc/mmc.c \
|
BL2_SOURCES += drivers/mmc/mmc.c \
|
||||||
drivers/partition/gpt.c \
|
drivers/partition/gpt.c \
|
||||||
|
@ -427,5 +487,8 @@ tf-a-%.stm32: ${STM32IMAGE} tf-a-%.bin
|
||||||
$(eval ENTRY = $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}'))
|
$(eval ENTRY = $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}'))
|
||||||
${Q}${STM32IMAGE} -s $(word 2,$^) -d $@ \
|
${Q}${STM32IMAGE} -s $(word 2,$^) -d $@ \
|
||||||
-l $(LOADADDR) -e ${ENTRY} \
|
-l $(LOADADDR) -e ${ENTRY} \
|
||||||
-v ${STM32_TF_VERSION}
|
-v ${STM32_TF_VERSION} \
|
||||||
|
-m ${STM32_HEADER_VERSION_MAJOR} \
|
||||||
|
-n ${STM32_HEADER_VERSION_MINOR} \
|
||||||
|
-b ${STM32_HEADER_BL2_BINARY_TYPE}
|
||||||
@echo
|
@echo
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
|
ifeq ($(STM32MP13),1)
|
||||||
|
$(error "SP_min is not supported on STM32MP13 platform")
|
||||||
|
endif
|
||||||
|
|
||||||
SP_MIN_WITH_SECURE_FIQ := 1
|
SP_MIN_WITH_SECURE_FIQ := 1
|
||||||
|
|
||||||
ifneq ($(STM32MP_USE_STM32IMAGE),1)
|
ifneq ($(STM32MP_USE_STM32IMAGE),1)
|
||||||
|
|
|
@ -36,6 +36,23 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* CHIP ID
|
* CHIP ID
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP1_CHIP_ID U(0x501)
|
||||||
|
|
||||||
|
#define STM32MP135C_PART_NB U(0x05010000)
|
||||||
|
#define STM32MP135A_PART_NB U(0x05010001)
|
||||||
|
#define STM32MP133C_PART_NB U(0x050100C0)
|
||||||
|
#define STM32MP133A_PART_NB U(0x050100C1)
|
||||||
|
#define STM32MP131C_PART_NB U(0x050106C8)
|
||||||
|
#define STM32MP131A_PART_NB U(0x050106C9)
|
||||||
|
#define STM32MP135F_PART_NB U(0x05010800)
|
||||||
|
#define STM32MP135D_PART_NB U(0x05010801)
|
||||||
|
#define STM32MP133F_PART_NB U(0x050108C0)
|
||||||
|
#define STM32MP133D_PART_NB U(0x050108C1)
|
||||||
|
#define STM32MP131F_PART_NB U(0x05010EC8)
|
||||||
|
#define STM32MP131D_PART_NB U(0x05010EC9)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP1_CHIP_ID U(0x500)
|
#define STM32MP1_CHIP_ID U(0x500)
|
||||||
|
|
||||||
#define STM32MP157C_PART_NB U(0x05000000)
|
#define STM32MP157C_PART_NB U(0x05000000)
|
||||||
|
@ -50,17 +67,25 @@
|
||||||
#define STM32MP153D_PART_NB U(0x050000A5)
|
#define STM32MP153D_PART_NB U(0x050000A5)
|
||||||
#define STM32MP151F_PART_NB U(0x050000AE)
|
#define STM32MP151F_PART_NB U(0x050000AE)
|
||||||
#define STM32MP151D_PART_NB U(0x050000AF)
|
#define STM32MP151D_PART_NB U(0x050000AF)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define STM32MP1_REV_B U(0x2000)
|
#define STM32MP1_REV_B U(0x2000)
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP1_REV_Z U(0x1001)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP1_REV_Z U(0x2001)
|
#define STM32MP1_REV_Z U(0x2001)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* PACKAGE ID
|
* PACKAGE ID
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if STM32MP15
|
||||||
#define PKG_AA_LFBGA448 U(4)
|
#define PKG_AA_LFBGA448 U(4)
|
||||||
#define PKG_AB_LFBGA354 U(3)
|
#define PKG_AB_LFBGA354 U(3)
|
||||||
#define PKG_AC_TFBGA361 U(2)
|
#define PKG_AC_TFBGA361 U(2)
|
||||||
#define PKG_AD_TFBGA257 U(1)
|
#define PKG_AD_TFBGA257 U(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* STM32MP1 memory map related constants
|
* STM32MP1 memory map related constants
|
||||||
|
@ -69,8 +94,22 @@
|
||||||
#define STM32MP_ROM_SIZE U(0x00020000)
|
#define STM32MP_ROM_SIZE U(0x00020000)
|
||||||
#define STM32MP_ROM_SIZE_2MB_ALIGNED U(0x00200000)
|
#define STM32MP_ROM_SIZE_2MB_ALIGNED U(0x00200000)
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP_SYSRAM_BASE U(0x2FFE0000)
|
||||||
|
#define STM32MP_SYSRAM_SIZE U(0x00020000)
|
||||||
|
#define SRAM1_BASE U(0x30000000)
|
||||||
|
#define SRAM1_SIZE U(0x00004000)
|
||||||
|
#define SRAM2_BASE U(0x30004000)
|
||||||
|
#define SRAM2_SIZE U(0x00002000)
|
||||||
|
#define SRAM3_BASE U(0x30006000)
|
||||||
|
#define SRAM3_SIZE U(0x00002000)
|
||||||
|
#define SRAMS_BASE SRAM1_BASE
|
||||||
|
#define SRAMS_SIZE_2MB_ALIGNED U(0x00200000)
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_SYSRAM_BASE U(0x2FFC0000)
|
#define STM32MP_SYSRAM_BASE U(0x2FFC0000)
|
||||||
#define STM32MP_SYSRAM_SIZE U(0x00040000)
|
#define STM32MP_SYSRAM_SIZE U(0x00040000)
|
||||||
|
#endif /* STM32MP15 */
|
||||||
|
|
||||||
#define STM32MP_NS_SYSRAM_SIZE PAGE_SIZE
|
#define STM32MP_NS_SYSRAM_SIZE PAGE_SIZE
|
||||||
#define STM32MP_NS_SYSRAM_BASE (STM32MP_SYSRAM_BASE + \
|
#define STM32MP_NS_SYSRAM_BASE (STM32MP_SYSRAM_BASE + \
|
||||||
|
@ -98,6 +137,15 @@ enum ddr_type {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Section used inside TF binaries */
|
/* Section used inside TF binaries */
|
||||||
|
#if STM32MP13
|
||||||
|
/* 512 Octets reserved for header */
|
||||||
|
#define STM32MP_HEADER_RESERVED_SIZE U(0x200)
|
||||||
|
|
||||||
|
#define STM32MP_BINARY_BASE STM32MP_SEC_SYSRAM_BASE
|
||||||
|
|
||||||
|
#define STM32MP_BINARY_SIZE STM32MP_SEC_SYSRAM_SIZE
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_PARAM_LOAD_SIZE U(0x00002400) /* 9 KB for param */
|
#define STM32MP_PARAM_LOAD_SIZE U(0x00002400) /* 9 KB for param */
|
||||||
/* 256 Octets reserved for header */
|
/* 256 Octets reserved for header */
|
||||||
#define STM32MP_HEADER_SIZE U(0x00000100)
|
#define STM32MP_HEADER_SIZE U(0x00000100)
|
||||||
|
@ -111,6 +159,7 @@ enum ddr_type {
|
||||||
#define STM32MP_BINARY_SIZE (STM32MP_SEC_SYSRAM_SIZE - \
|
#define STM32MP_BINARY_SIZE (STM32MP_SEC_SYSRAM_SIZE - \
|
||||||
(STM32MP_PARAM_LOAD_SIZE + \
|
(STM32MP_PARAM_LOAD_SIZE + \
|
||||||
STM32MP_HEADER_SIZE))
|
STM32MP_HEADER_SIZE))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* BL2 and BL32/sp_min require finer granularity tables */
|
/* BL2 and BL32/sp_min require finer granularity tables */
|
||||||
#if defined(IMAGE_BL2)
|
#if defined(IMAGE_BL2)
|
||||||
|
@ -170,9 +219,11 @@ enum ddr_type {
|
||||||
#define GPIOG_BASE U(0x50008000)
|
#define GPIOG_BASE U(0x50008000)
|
||||||
#define GPIOH_BASE U(0x50009000)
|
#define GPIOH_BASE U(0x50009000)
|
||||||
#define GPIOI_BASE U(0x5000A000)
|
#define GPIOI_BASE U(0x5000A000)
|
||||||
|
#if STM32MP15
|
||||||
#define GPIOJ_BASE U(0x5000B000)
|
#define GPIOJ_BASE U(0x5000B000)
|
||||||
#define GPIOK_BASE U(0x5000C000)
|
#define GPIOK_BASE U(0x5000C000)
|
||||||
#define GPIOZ_BASE U(0x54004000)
|
#define GPIOZ_BASE U(0x54004000)
|
||||||
|
#endif
|
||||||
#define GPIO_BANK_OFFSET U(0x1000)
|
#define GPIO_BANK_OFFSET U(0x1000)
|
||||||
|
|
||||||
/* Bank IDs used in GPIO driver API */
|
/* Bank IDs used in GPIO driver API */
|
||||||
|
@ -185,11 +236,13 @@ enum ddr_type {
|
||||||
#define GPIO_BANK_G U(6)
|
#define GPIO_BANK_G U(6)
|
||||||
#define GPIO_BANK_H U(7)
|
#define GPIO_BANK_H U(7)
|
||||||
#define GPIO_BANK_I U(8)
|
#define GPIO_BANK_I U(8)
|
||||||
|
#if STM32MP15
|
||||||
#define GPIO_BANK_J U(9)
|
#define GPIO_BANK_J U(9)
|
||||||
#define GPIO_BANK_K U(10)
|
#define GPIO_BANK_K U(10)
|
||||||
#define GPIO_BANK_Z U(25)
|
#define GPIO_BANK_Z U(25)
|
||||||
|
|
||||||
#define STM32MP_GPIOZ_PIN_MAX_COUNT 8
|
#define STM32MP_GPIOZ_PIN_MAX_COUNT 8
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* STM32MP1 UART
|
* STM32MP1 UART
|
||||||
|
@ -205,6 +258,18 @@ enum ddr_type {
|
||||||
|
|
||||||
/* For UART crash console */
|
/* For UART crash console */
|
||||||
#define STM32MP_DEBUG_USART_BASE UART4_BASE
|
#define STM32MP_DEBUG_USART_BASE UART4_BASE
|
||||||
|
#if STM32MP13
|
||||||
|
/* UART4 on HSI@64MHz, TX on GPIOF12 Alternate 8 (Disco board) */
|
||||||
|
#define STM32MP_DEBUG_USART_CLK_FRQ 64000000
|
||||||
|
#define DEBUG_UART_TX_GPIO_BANK_ADDRESS GPIOD_BASE
|
||||||
|
#define DEBUG_UART_TX_GPIO_BANK_CLK_REG RCC_MP_S_AHB4ENSETR
|
||||||
|
#define DEBUG_UART_TX_GPIO_BANK_CLK_EN RCC_MP_S_AHB4ENSETR_GPIODEN
|
||||||
|
#define DEBUG_UART_TX_GPIO_PORT 6
|
||||||
|
#define DEBUG_UART_TX_GPIO_ALTERNATE 8
|
||||||
|
#define DEBUG_UART_TX_CLKSRC_REG RCC_UART4CKSELR
|
||||||
|
#define DEBUG_UART_TX_CLKSRC RCC_UART4CKSELR_HSI
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
/* UART4 on HSI@64MHz, TX on GPIOG11 Alternate 6 */
|
/* UART4 on HSI@64MHz, TX on GPIOG11 Alternate 6 */
|
||||||
#define STM32MP_DEBUG_USART_CLK_FRQ 64000000
|
#define STM32MP_DEBUG_USART_CLK_FRQ 64000000
|
||||||
#define DEBUG_UART_TX_GPIO_BANK_ADDRESS GPIOG_BASE
|
#define DEBUG_UART_TX_GPIO_BANK_ADDRESS GPIOG_BASE
|
||||||
|
@ -214,6 +279,7 @@ enum ddr_type {
|
||||||
#define DEBUG_UART_TX_GPIO_ALTERNATE 6
|
#define DEBUG_UART_TX_GPIO_ALTERNATE 6
|
||||||
#define DEBUG_UART_TX_CLKSRC_REG RCC_UART24CKSELR
|
#define DEBUG_UART_TX_CLKSRC_REG RCC_UART24CKSELR
|
||||||
#define DEBUG_UART_TX_CLKSRC RCC_UART24CKSELR_HSI
|
#define DEBUG_UART_TX_CLKSRC RCC_UART24CKSELR_HSI
|
||||||
|
#endif /* STM32MP15 */
|
||||||
#define DEBUG_UART_TX_EN_REG RCC_MP_APB1ENSETR
|
#define DEBUG_UART_TX_EN_REG RCC_MP_APB1ENSETR
|
||||||
#define DEBUG_UART_TX_EN RCC_MP_APB1ENSETR_UART4EN
|
#define DEBUG_UART_TX_EN RCC_MP_APB1ENSETR_UART4EN
|
||||||
#define DEBUG_UART_RST_REG RCC_APB1RSTSETR
|
#define DEBUG_UART_RST_REG RCC_APB1RSTSETR
|
||||||
|
@ -322,8 +388,13 @@ enum ddr_type {
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define STM32MP1_TZC_BASE U(0x5C006000)
|
#define STM32MP1_TZC_BASE U(0x5C006000)
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP1_FILTER_BIT_ALL TZC_400_REGION_ATTR_FILTER_BIT(0)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP1_FILTER_BIT_ALL (TZC_400_REGION_ATTR_FILTER_BIT(0) | \
|
#define STM32MP1_FILTER_BIT_ALL (TZC_400_REGION_ATTR_FILTER_BIT(0) | \
|
||||||
TZC_400_REGION_ATTR_FILTER_BIT(1))
|
TZC_400_REGION_ATTR_FILTER_BIT(1))
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* STM32MP1 SDMMC
|
* STM32MP1 SDMMC
|
||||||
|
@ -349,7 +420,9 @@ enum ddr_type {
|
||||||
/* OTP labels */
|
/* OTP labels */
|
||||||
#define CFG0_OTP "cfg0_otp"
|
#define CFG0_OTP "cfg0_otp"
|
||||||
#define PART_NUMBER_OTP "part_number_otp"
|
#define PART_NUMBER_OTP "part_number_otp"
|
||||||
|
#if STM32MP15
|
||||||
#define PACKAGE_OTP "package_otp"
|
#define PACKAGE_OTP "package_otp"
|
||||||
|
#endif
|
||||||
#define HW2_OTP "hw2_otp"
|
#define HW2_OTP "hw2_otp"
|
||||||
#define NAND_OTP "nand_otp"
|
#define NAND_OTP "nand_otp"
|
||||||
#define MONOTONIC_OTP "monotonic_otp"
|
#define MONOTONIC_OTP "monotonic_otp"
|
||||||
|
@ -358,15 +431,32 @@ enum ddr_type {
|
||||||
|
|
||||||
/* OTP mask */
|
/* OTP mask */
|
||||||
/* CFG0 */
|
/* CFG0 */
|
||||||
|
#if STM32MP13
|
||||||
|
#define CFG0_OTP_MODE_MASK GENMASK_32(9, 0)
|
||||||
|
#define CFG0_OTP_MODE_SHIFT 0
|
||||||
|
#define CFG0_OPEN_DEVICE 0x17U
|
||||||
|
#define CFG0_CLOSED_DEVICE 0x3FU
|
||||||
|
#define CFG0_CLOSED_DEVICE_NO_BOUNDARY_SCAN 0x17FU
|
||||||
|
#define CFG0_CLOSED_DEVICE_NO_JTAG 0x3FFU
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define CFG0_CLOSED_DEVICE BIT(6)
|
#define CFG0_CLOSED_DEVICE BIT(6)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* PART NUMBER */
|
/* PART NUMBER */
|
||||||
|
#if STM32MP13
|
||||||
|
#define PART_NUMBER_OTP_PART_MASK GENMASK_32(11, 0)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define PART_NUMBER_OTP_PART_MASK GENMASK_32(7, 0)
|
#define PART_NUMBER_OTP_PART_MASK GENMASK_32(7, 0)
|
||||||
|
#endif
|
||||||
#define PART_NUMBER_OTP_PART_SHIFT 0
|
#define PART_NUMBER_OTP_PART_SHIFT 0
|
||||||
|
|
||||||
/* PACKAGE */
|
/* PACKAGE */
|
||||||
|
#if STM32MP15
|
||||||
#define PACKAGE_OTP_PKG_MASK GENMASK_32(29, 27)
|
#define PACKAGE_OTP_PKG_MASK GENMASK_32(29, 27)
|
||||||
#define PACKAGE_OTP_PKG_SHIFT 27
|
#define PACKAGE_OTP_PKG_SHIFT 27
|
||||||
|
#endif
|
||||||
|
|
||||||
/* IWDG OTP */
|
/* IWDG OTP */
|
||||||
#define HW2_OTP_IWDG_HW_POS U(3)
|
#define HW2_OTP_IWDG_HW_POS U(3)
|
||||||
|
@ -463,34 +553,84 @@ static inline uintptr_t tamp_bkpr(uint32_t idx)
|
||||||
* Miscellaneous STM32MP1 peripherals base address
|
* Miscellaneous STM32MP1 peripherals base address
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define BSEC_BASE U(0x5C005000)
|
#define BSEC_BASE U(0x5C005000)
|
||||||
|
#if STM32MP13
|
||||||
|
#define CRYP_BASE U(0x54002000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define CRYP1_BASE U(0x54001000)
|
#define CRYP1_BASE U(0x54001000)
|
||||||
|
#endif
|
||||||
#define DBGMCU_BASE U(0x50081000)
|
#define DBGMCU_BASE U(0x50081000)
|
||||||
|
#if STM32MP13
|
||||||
|
#define HASH_BASE U(0x54003000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define HASH1_BASE U(0x54002000)
|
#define HASH1_BASE U(0x54002000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP13
|
||||||
|
#define I2C3_BASE U(0x4C004000)
|
||||||
|
#define I2C4_BASE U(0x4C005000)
|
||||||
|
#define I2C5_BASE U(0x4C006000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define I2C4_BASE U(0x5C002000)
|
#define I2C4_BASE U(0x5C002000)
|
||||||
#define I2C6_BASE U(0x5c009000)
|
#define I2C6_BASE U(0x5c009000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP13
|
||||||
|
#define RNG_BASE U(0x54004000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define RNG1_BASE U(0x54003000)
|
#define RNG1_BASE U(0x54003000)
|
||||||
|
#endif
|
||||||
#define RTC_BASE U(0x5c004000)
|
#define RTC_BASE U(0x5c004000)
|
||||||
|
#if STM32MP13
|
||||||
|
#define SPI4_BASE U(0x4C002000)
|
||||||
|
#define SPI5_BASE U(0x4C003000)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define SPI6_BASE U(0x5c001000)
|
#define SPI6_BASE U(0x5c001000)
|
||||||
|
#endif
|
||||||
#define STGEN_BASE U(0x5c008000)
|
#define STGEN_BASE U(0x5c008000)
|
||||||
#define SYSCFG_BASE U(0x50020000)
|
#define SYSCFG_BASE U(0x50020000)
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* STM32MP13 SAES
|
||||||
|
******************************************************************************/
|
||||||
|
#define SAES_BASE U(0x54005000)
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* STM32MP13 PKA
|
||||||
|
******************************************************************************/
|
||||||
|
#define PKA_BASE U(0x54006000)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* REGULATORS
|
* REGULATORS
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/* 3 PWR + 1 VREFBUF + 14 PMIC regulators + 1 FIXED */
|
/* 3 PWR + 1 VREFBUF + 14 PMIC regulators + 1 FIXED */
|
||||||
#define PLAT_NB_RDEVS U(19)
|
#define PLAT_NB_RDEVS U(19)
|
||||||
/* 1 FIXED */
|
/* 2 FIXED */
|
||||||
#define PLAT_NB_FIXED_REGS U(1)
|
#define PLAT_NB_FIXED_REGS U(2)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Device Tree defines
|
* Device Tree defines
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define DT_BSEC_COMPAT "st,stm32mp15-bsec"
|
#define DT_BSEC_COMPAT "st,stm32mp15-bsec"
|
||||||
|
#if STM32MP13
|
||||||
|
#define DT_DDR_COMPAT "st,stm32mp13-ddr"
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define DT_DDR_COMPAT "st,stm32mp1-ddr"
|
#define DT_DDR_COMPAT "st,stm32mp1-ddr"
|
||||||
|
#endif
|
||||||
#define DT_IWDG_COMPAT "st,stm32mp1-iwdg"
|
#define DT_IWDG_COMPAT "st,stm32mp1-iwdg"
|
||||||
#define DT_NVMEM_LAYOUT_COMPAT "st,stm32-nvmem-layout"
|
#define DT_NVMEM_LAYOUT_COMPAT "st,stm32-nvmem-layout"
|
||||||
#define DT_PWR_COMPAT "st,stm32mp1,pwr-reg"
|
#define DT_PWR_COMPAT "st,stm32mp1,pwr-reg"
|
||||||
|
#if STM32MP13
|
||||||
|
#define DT_RCC_CLK_COMPAT "st,stm32mp13-rcc"
|
||||||
|
#define DT_RCC_SEC_CLK_COMPAT "st,stm32mp13-rcc-secure"
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define DT_RCC_CLK_COMPAT "st,stm32mp1-rcc"
|
#define DT_RCC_CLK_COMPAT "st,stm32mp1-rcc"
|
||||||
#define DT_RCC_SEC_CLK_COMPAT "st,stm32mp1-rcc-secure"
|
#define DT_RCC_SEC_CLK_COMPAT "st,stm32mp1-rcc-secure"
|
||||||
|
#endif
|
||||||
|
#define DT_SDMMC2_COMPAT "st,stm32-sdmmc2"
|
||||||
|
|
||||||
#endif /* STM32MP1_DEF_H */
|
#endif /* STM32MP1_DEF_H */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, STMicroelectronics - All Rights Reserved
|
* Copyright (c) 2021-2022, STMicroelectronics - All Rights Reserved
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -31,8 +31,13 @@ struct dt_id_attr {
|
||||||
|
|
||||||
void stm32mp1_arch_security_setup(void)
|
void stm32mp1_arch_security_setup(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
clk_enable(TZC);
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
clk_enable(TZC1);
|
clk_enable(TZC1);
|
||||||
clk_enable(TZC2);
|
clk_enable(TZC2);
|
||||||
|
#endif
|
||||||
|
|
||||||
tzc400_init(STM32MP1_TZC_BASE);
|
tzc400_init(STM32MP1_TZC_BASE);
|
||||||
tzc400_disable_filters();
|
tzc400_disable_filters();
|
||||||
|
|
|
@ -10,29 +10,51 @@
|
||||||
#define STM32MP_DDR_S_SIZE U(0x01E00000) /* 30 MB */
|
#define STM32MP_DDR_S_SIZE U(0x01E00000) /* 30 MB */
|
||||||
#define STM32MP_DDR_SHMEM_SIZE U(0x00200000) /* 2 MB */
|
#define STM32MP_DDR_SHMEM_SIZE U(0x00200000) /* 2 MB */
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP_BL2_RO_SIZE U(0x00015000) /* 84 KB */
|
||||||
|
#define STM32MP_BL2_SIZE U(0x00017000) /* 92 KB for BL2 */
|
||||||
|
#define STM32MP_BL2_DTB_SIZE U(0x00004000) /* 16 KB for DTB */
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_BL2_RO_SIZE U(0x00011000) /* 68 KB */
|
#define STM32MP_BL2_RO_SIZE U(0x00011000) /* 68 KB */
|
||||||
#define STM32MP_BL2_SIZE U(0x00016000) /* 88 KB for BL2 */
|
#define STM32MP_BL2_SIZE U(0x00016000) /* 88 KB for BL2 */
|
||||||
#define STM32MP_BL2_DTB_SIZE U(0x00007000) /* 28 KB for DTB */
|
#define STM32MP_BL2_DTB_SIZE U(0x00007000) /* 28 KB for DTB */
|
||||||
|
#endif /* STM32MP15 */
|
||||||
#define STM32MP_BL32_SIZE U(0x0001B000) /* 108 KB for BL32 */
|
#define STM32MP_BL32_SIZE U(0x0001B000) /* 108 KB for BL32 */
|
||||||
#define STM32MP_BL32_DTB_SIZE U(0x00005000) /* 20 KB for DTB */
|
#define STM32MP_BL32_DTB_SIZE U(0x00005000) /* 20 KB for DTB */
|
||||||
#define STM32MP_FW_CONFIG_MAX_SIZE PAGE_SIZE /* 4 KB for FCONF DTB */
|
#define STM32MP_FW_CONFIG_MAX_SIZE PAGE_SIZE /* 4 KB for FCONF DTB */
|
||||||
#define STM32MP_HW_CONFIG_MAX_SIZE U(0x40000) /* 256 KB for HW config DTB */
|
#define STM32MP_HW_CONFIG_MAX_SIZE U(0x40000) /* 256 KB for HW config DTB */
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP_BL2_BASE (STM32MP_BL2_DTB_BASE + \
|
||||||
|
STM32MP_BL2_DTB_SIZE)
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_BL2_BASE (STM32MP_SEC_SYSRAM_BASE + \
|
#define STM32MP_BL2_BASE (STM32MP_SEC_SYSRAM_BASE + \
|
||||||
STM32MP_SEC_SYSRAM_SIZE - \
|
STM32MP_SEC_SYSRAM_SIZE - \
|
||||||
STM32MP_BL2_SIZE)
|
STM32MP_BL2_SIZE)
|
||||||
|
#endif /* STM32MP15 */
|
||||||
|
|
||||||
#define STM32MP_BL2_RO_BASE STM32MP_BL2_BASE
|
#define STM32MP_BL2_RO_BASE STM32MP_BL2_BASE
|
||||||
|
|
||||||
#define STM32MP_BL2_RW_BASE (STM32MP_BL2_RO_BASE + \
|
#define STM32MP_BL2_RW_BASE (STM32MP_BL2_RO_BASE + \
|
||||||
STM32MP_BL2_RO_SIZE)
|
STM32MP_BL2_RO_SIZE)
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP_BL2_RW_SIZE (STM32MP_SYSRAM_BASE + \
|
||||||
|
STM32MP_SYSRAM_SIZE - \
|
||||||
|
STM32MP_BL2_RW_BASE)
|
||||||
|
|
||||||
|
#define STM32MP_BL2_DTB_BASE STM32MP_SEC_SYSRAM_BASE
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_BL2_RW_SIZE (STM32MP_SEC_SYSRAM_BASE + \
|
#define STM32MP_BL2_RW_SIZE (STM32MP_SEC_SYSRAM_BASE + \
|
||||||
STM32MP_SEC_SYSRAM_SIZE - \
|
STM32MP_SEC_SYSRAM_SIZE - \
|
||||||
STM32MP_BL2_RW_BASE)
|
STM32MP_BL2_RW_BASE)
|
||||||
|
|
||||||
#define STM32MP_BL2_DTB_BASE (STM32MP_BL2_BASE - \
|
#define STM32MP_BL2_DTB_BASE (STM32MP_BL2_BASE - \
|
||||||
STM32MP_BL2_DTB_SIZE)
|
STM32MP_BL2_DTB_SIZE)
|
||||||
|
#endif /* STM32MP15 */
|
||||||
|
|
||||||
#define STM32MP_BL32_DTB_BASE STM32MP_SYSRAM_BASE
|
#define STM32MP_BL32_DTB_BASE STM32MP_SYSRAM_BASE
|
||||||
|
|
||||||
|
@ -56,9 +78,14 @@
|
||||||
STM32MP_OPTEE_BASE)
|
STM32MP_OPTEE_BASE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define STM32MP_FW_CONFIG_BASE SRAM3_BASE
|
||||||
|
#endif /* STM32MP13 */
|
||||||
|
#if STM32MP15
|
||||||
#define STM32MP_FW_CONFIG_BASE (STM32MP_SYSRAM_BASE + \
|
#define STM32MP_FW_CONFIG_BASE (STM32MP_SYSRAM_BASE + \
|
||||||
STM32MP_SYSRAM_SIZE - \
|
STM32MP_SYSRAM_SIZE - \
|
||||||
PAGE_SIZE)
|
PAGE_SIZE)
|
||||||
|
#endif /* STM32MP15 */
|
||||||
#define STM32MP_HW_CONFIG_BASE (STM32MP_BL33_BASE + \
|
#define STM32MP_HW_CONFIG_BASE (STM32MP_BL33_BASE + \
|
||||||
STM32MP_BL33_MAX_SIZE)
|
STM32MP_BL33_MAX_SIZE)
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,12 @@
|
||||||
BOARD_ID_VARFG_SHIFT)
|
BOARD_ID_VARFG_SHIFT)
|
||||||
#define BOARD_ID2BOM(_id) ((_id) & BOARD_ID_BOM_MASK)
|
#define BOARD_ID2BOM(_id) ((_id) & BOARD_ID_BOM_MASK)
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define TAMP_BOOT_MODE_BACKUP_REG_ID U(30)
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define TAMP_BOOT_MODE_BACKUP_REG_ID U(20)
|
#define TAMP_BOOT_MODE_BACKUP_REG_ID U(20)
|
||||||
|
#endif
|
||||||
#define TAMP_BOOT_MODE_ITF_MASK U(0x0000FF00)
|
#define TAMP_BOOT_MODE_ITF_MASK U(0x0000FF00)
|
||||||
#define TAMP_BOOT_MODE_ITF_SHIFT 8
|
#define TAMP_BOOT_MODE_ITF_SHIFT 8
|
||||||
|
|
||||||
|
@ -67,6 +72,15 @@
|
||||||
MT_EXECUTE_NEVER)
|
MT_EXECUTE_NEVER)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define MAP_SRAM_ALL MAP_REGION_FLAT(SRAMS_BASE, \
|
||||||
|
SRAMS_SIZE_2MB_ALIGNED, \
|
||||||
|
MT_MEMORY | \
|
||||||
|
MT_RW | \
|
||||||
|
MT_SECURE | \
|
||||||
|
MT_EXECUTE_NEVER)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MAP_DEVICE1 MAP_REGION_FLAT(STM32MP1_DEVICE1_BASE, \
|
#define MAP_DEVICE1 MAP_REGION_FLAT(STM32MP1_DEVICE1_BASE, \
|
||||||
STM32MP1_DEVICE1_SIZE, \
|
STM32MP1_DEVICE1_SIZE, \
|
||||||
MT_DEVICE | \
|
MT_DEVICE | \
|
||||||
|
@ -84,6 +98,9 @@
|
||||||
#if defined(IMAGE_BL2)
|
#if defined(IMAGE_BL2)
|
||||||
static const mmap_region_t stm32mp1_mmap[] = {
|
static const mmap_region_t stm32mp1_mmap[] = {
|
||||||
MAP_SEC_SYSRAM,
|
MAP_SEC_SYSRAM,
|
||||||
|
#if STM32MP13
|
||||||
|
MAP_SRAM_ALL,
|
||||||
|
#endif
|
||||||
MAP_DEVICE1,
|
MAP_DEVICE1,
|
||||||
#if STM32MP_RAW_NAND
|
#if STM32MP_RAW_NAND
|
||||||
MAP_DEVICE2,
|
MAP_DEVICE2,
|
||||||
|
@ -111,42 +128,62 @@ void configure_mmu(void)
|
||||||
|
|
||||||
uintptr_t stm32_get_gpio_bank_base(unsigned int bank)
|
uintptr_t stm32_get_gpio_bank_base(unsigned int bank)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_I);
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
if (bank == GPIO_BANK_Z) {
|
if (bank == GPIO_BANK_Z) {
|
||||||
return GPIOZ_BASE;
|
return GPIOZ_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
||||||
|
#endif
|
||||||
|
|
||||||
return GPIOA_BASE + (bank * GPIO_BANK_OFFSET);
|
return GPIOA_BASE + (bank * GPIO_BANK_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t stm32_get_gpio_bank_offset(unsigned int bank)
|
uint32_t stm32_get_gpio_bank_offset(unsigned int bank)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_I);
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
if (bank == GPIO_BANK_Z) {
|
if (bank == GPIO_BANK_Z) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
||||||
|
#endif
|
||||||
|
|
||||||
return bank * GPIO_BANK_OFFSET;
|
return bank * GPIO_BANK_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool stm32_gpio_is_secure_at_reset(unsigned int bank)
|
bool stm32_gpio_is_secure_at_reset(unsigned int bank)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
if (bank == GPIO_BANK_Z) {
|
if (bank == GPIO_BANK_Z) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long stm32_get_gpio_bank_clock(unsigned int bank)
|
unsigned long stm32_get_gpio_bank_clock(unsigned int bank)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_I);
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
if (bank == GPIO_BANK_Z) {
|
if (bank == GPIO_BANK_Z) {
|
||||||
return GPIOZ;
|
return GPIOZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
|
||||||
|
#endif
|
||||||
|
|
||||||
return GPIOA + (bank - GPIO_BANK_A);
|
return GPIOA + (bank - GPIO_BANK_A);
|
||||||
}
|
}
|
||||||
|
@ -163,11 +200,15 @@ int stm32_get_gpio_bank_pinctrl_node(void *fdt, unsigned int bank)
|
||||||
case GPIO_BANK_G:
|
case GPIO_BANK_G:
|
||||||
case GPIO_BANK_H:
|
case GPIO_BANK_H:
|
||||||
case GPIO_BANK_I:
|
case GPIO_BANK_I:
|
||||||
|
#if STM32MP15
|
||||||
case GPIO_BANK_J:
|
case GPIO_BANK_J:
|
||||||
case GPIO_BANK_K:
|
case GPIO_BANK_K:
|
||||||
|
#endif
|
||||||
return fdt_path_offset(fdt, "/soc/pin-controller");
|
return fdt_path_offset(fdt, "/soc/pin-controller");
|
||||||
|
#if STM32MP15
|
||||||
case GPIO_BANK_Z:
|
case GPIO_BANK_Z:
|
||||||
return fdt_path_offset(fdt, "/soc/pin-controller-z");
|
return fdt_path_offset(fdt, "/soc/pin-controller-z");
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
panic();
|
panic();
|
||||||
}
|
}
|
||||||
|
@ -248,6 +289,10 @@ void stm32mp1_deconfigure_uart_pins(void)
|
||||||
|
|
||||||
uint32_t stm32mp_get_chip_version(void)
|
uint32_t stm32mp_get_chip_version(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
return stm32mp1_syscfg_get_chip_version();
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
uint32_t version = 0U;
|
uint32_t version = 0U;
|
||||||
|
|
||||||
if (stm32mp1_dbgmcu_get_chip_version(&version) < 0) {
|
if (stm32mp1_dbgmcu_get_chip_version(&version) < 0) {
|
||||||
|
@ -256,10 +301,15 @@ uint32_t stm32mp_get_chip_version(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
return version;
|
return version;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t stm32mp_get_chip_dev_id(void)
|
uint32_t stm32mp_get_chip_dev_id(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
return stm32mp1_syscfg_get_chip_dev_id();
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
uint32_t dev_id;
|
uint32_t dev_id;
|
||||||
|
|
||||||
if (stm32mp1_dbgmcu_get_chip_dev_id(&dev_id) < 0) {
|
if (stm32mp1_dbgmcu_get_chip_dev_id(&dev_id) < 0) {
|
||||||
|
@ -268,6 +318,7 @@ uint32_t stm32mp_get_chip_dev_id(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
return dev_id;
|
return dev_id;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t get_part_number(void)
|
static uint32_t get_part_number(void)
|
||||||
|
@ -290,6 +341,7 @@ static uint32_t get_part_number(void)
|
||||||
return part_number;
|
return part_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
static uint32_t get_cpu_package(void)
|
static uint32_t get_cpu_package(void)
|
||||||
{
|
{
|
||||||
uint32_t package;
|
uint32_t package;
|
||||||
|
@ -303,6 +355,7 @@ static uint32_t get_cpu_package(void)
|
||||||
|
|
||||||
return package;
|
return package;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
|
void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
|
||||||
{
|
{
|
||||||
|
@ -310,6 +363,45 @@ void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
|
||||||
|
|
||||||
/* MPUs Part Numbers */
|
/* MPUs Part Numbers */
|
||||||
switch (get_part_number()) {
|
switch (get_part_number()) {
|
||||||
|
#if STM32MP13
|
||||||
|
case STM32MP135F_PART_NB:
|
||||||
|
cpu_s = "135F";
|
||||||
|
break;
|
||||||
|
case STM32MP135D_PART_NB:
|
||||||
|
cpu_s = "135D";
|
||||||
|
break;
|
||||||
|
case STM32MP135C_PART_NB:
|
||||||
|
cpu_s = "135C";
|
||||||
|
break;
|
||||||
|
case STM32MP135A_PART_NB:
|
||||||
|
cpu_s = "135A";
|
||||||
|
break;
|
||||||
|
case STM32MP133F_PART_NB:
|
||||||
|
cpu_s = "133F";
|
||||||
|
break;
|
||||||
|
case STM32MP133D_PART_NB:
|
||||||
|
cpu_s = "133D";
|
||||||
|
break;
|
||||||
|
case STM32MP133C_PART_NB:
|
||||||
|
cpu_s = "133C";
|
||||||
|
break;
|
||||||
|
case STM32MP133A_PART_NB:
|
||||||
|
cpu_s = "133A";
|
||||||
|
break;
|
||||||
|
case STM32MP131F_PART_NB:
|
||||||
|
cpu_s = "131F";
|
||||||
|
break;
|
||||||
|
case STM32MP131D_PART_NB:
|
||||||
|
cpu_s = "131D";
|
||||||
|
break;
|
||||||
|
case STM32MP131C_PART_NB:
|
||||||
|
cpu_s = "131C";
|
||||||
|
break;
|
||||||
|
case STM32MP131A_PART_NB:
|
||||||
|
cpu_s = "131A";
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
case STM32MP157C_PART_NB:
|
case STM32MP157C_PART_NB:
|
||||||
cpu_s = "157C";
|
cpu_s = "157C";
|
||||||
break;
|
break;
|
||||||
|
@ -346,12 +438,18 @@ void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
|
||||||
case STM32MP151D_PART_NB:
|
case STM32MP151D_PART_NB:
|
||||||
cpu_s = "151D";
|
cpu_s = "151D";
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
cpu_s = "????";
|
cpu_s = "????";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Package */
|
/* Package */
|
||||||
|
#if STM32MP13
|
||||||
|
/* On STM32MP13, package is not present in OTP */
|
||||||
|
pkg = "";
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
switch (get_cpu_package()) {
|
switch (get_cpu_package()) {
|
||||||
case PKG_AA_LFBGA448:
|
case PKG_AA_LFBGA448:
|
||||||
pkg = "AA";
|
pkg = "AA";
|
||||||
|
@ -369,6 +467,7 @@ void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
|
||||||
pkg = "??";
|
pkg = "??";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* REVISION */
|
/* REVISION */
|
||||||
switch (stm32mp_get_chip_version()) {
|
switch (stm32mp_get_chip_version()) {
|
||||||
|
@ -420,6 +519,10 @@ void stm32mp_print_boardinfo(void)
|
||||||
/* Return true when SoC provides a single Cortex-A7 core, and false otherwise */
|
/* Return true when SoC provides a single Cortex-A7 core, and false otherwise */
|
||||||
bool stm32mp_is_single_core(void)
|
bool stm32mp_is_single_core(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
bool single_core = false;
|
bool single_core = false;
|
||||||
|
|
||||||
switch (get_part_number()) {
|
switch (get_part_number()) {
|
||||||
|
@ -434,6 +537,7 @@ bool stm32mp_is_single_core(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
return single_core;
|
return single_core;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return true when device is in closed state */
|
/* Return true when device is in closed state */
|
||||||
|
@ -445,7 +549,23 @@ bool stm32mp_is_closed_device(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
value = (value & CFG0_OTP_MODE_MASK) >> CFG0_OTP_MODE_SHIFT;
|
||||||
|
|
||||||
|
switch (value) {
|
||||||
|
case CFG0_OPEN_DEVICE:
|
||||||
|
return false;
|
||||||
|
case CFG0_CLOSED_DEVICE:
|
||||||
|
case CFG0_CLOSED_DEVICE_NO_BOUNDARY_SCAN:
|
||||||
|
case CFG0_CLOSED_DEVICE_NO_JTAG:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
panic();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
return (value & CFG0_CLOSED_DEVICE) == CFG0_CLOSED_DEVICE;
|
return (value & CFG0_CLOSED_DEVICE) == CFG0_CLOSED_DEVICE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return true when device supports secure boot */
|
/* Return true when device supports secure boot */
|
||||||
|
@ -454,12 +574,22 @@ bool stm32mp_is_auth_supported(void)
|
||||||
bool supported = false;
|
bool supported = false;
|
||||||
|
|
||||||
switch (get_part_number()) {
|
switch (get_part_number()) {
|
||||||
|
#if STM32MP13
|
||||||
|
case STM32MP131C_PART_NB:
|
||||||
|
case STM32MP131F_PART_NB:
|
||||||
|
case STM32MP133C_PART_NB:
|
||||||
|
case STM32MP133F_PART_NB:
|
||||||
|
case STM32MP135C_PART_NB:
|
||||||
|
case STM32MP135F_PART_NB:
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
case STM32MP151C_PART_NB:
|
case STM32MP151C_PART_NB:
|
||||||
case STM32MP151F_PART_NB:
|
case STM32MP151F_PART_NB:
|
||||||
case STM32MP153C_PART_NB:
|
case STM32MP153C_PART_NB:
|
||||||
case STM32MP153F_PART_NB:
|
case STM32MP153F_PART_NB:
|
||||||
case STM32MP157C_PART_NB:
|
case STM32MP157C_PART_NB:
|
||||||
case STM32MP157F_PART_NB:
|
case STM32MP157F_PART_NB:
|
||||||
|
#endif
|
||||||
supported = true;
|
supported = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -4,11 +4,16 @@
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
#include <drivers/clk.h>
|
#include <drivers/clk.h>
|
||||||
#include <drivers/delay_timer.h>
|
#include <drivers/delay_timer.h>
|
||||||
#include <drivers/st/stpmic1.h>
|
#include <drivers/st/stpmic1.h>
|
||||||
#include <lib/mmio.h>
|
#include <lib/mmio.h>
|
||||||
|
#include <lib/utils_def.h>
|
||||||
|
#include <libfdt.h>
|
||||||
|
|
||||||
#include <platform_def.h>
|
#include <platform_def.h>
|
||||||
#include <stm32mp_common.h>
|
#include <stm32mp_common.h>
|
||||||
|
@ -19,11 +24,24 @@
|
||||||
* SYSCFG REGISTER OFFSET (base relative)
|
* SYSCFG REGISTER OFFSET (base relative)
|
||||||
*/
|
*/
|
||||||
#define SYSCFG_BOOTR 0x00U
|
#define SYSCFG_BOOTR 0x00U
|
||||||
|
#define SYSCFG_BOOTCR 0x0CU
|
||||||
|
#if STM32MP15
|
||||||
#define SYSCFG_IOCTRLSETR 0x18U
|
#define SYSCFG_IOCTRLSETR 0x18U
|
||||||
#define SYSCFG_ICNR 0x1CU
|
#define SYSCFG_ICNR 0x1CU
|
||||||
|
#endif
|
||||||
#define SYSCFG_CMPCR 0x20U
|
#define SYSCFG_CMPCR 0x20U
|
||||||
#define SYSCFG_CMPENSETR 0x24U
|
#define SYSCFG_CMPENSETR 0x24U
|
||||||
#define SYSCFG_CMPENCLRR 0x28U
|
#define SYSCFG_CMPENCLRR 0x28U
|
||||||
|
#if STM32MP13
|
||||||
|
#define SYSCFG_CMPSD1CR 0x30U
|
||||||
|
#define SYSCFG_CMPSD1ENSETR 0x34U
|
||||||
|
#define SYSCFG_CMPSD1ENCLRR 0x38U
|
||||||
|
#define SYSCFG_CMPSD2CR 0x40U
|
||||||
|
#define SYSCFG_CMPSD2ENSETR 0x44U
|
||||||
|
#define SYSCFG_CMPSD2ENCLRR 0x48U
|
||||||
|
#define SYSCFG_HSLVEN0R 0x50U
|
||||||
|
#endif
|
||||||
|
#define SYSCFG_IDC 0x380U
|
||||||
|
|
||||||
#define CMPCR_CMPENSETR_OFFSET 0x4U
|
#define CMPCR_CMPENSETR_OFFSET 0x4U
|
||||||
#define CMPCR_CMPENCLRR_OFFSET 0x8U
|
#define CMPCR_CMPENCLRR_OFFSET 0x8U
|
||||||
|
@ -32,8 +50,16 @@
|
||||||
* SYSCFG_BOOTR Register
|
* SYSCFG_BOOTR Register
|
||||||
*/
|
*/
|
||||||
#define SYSCFG_BOOTR_BOOT_MASK GENMASK(2, 0)
|
#define SYSCFG_BOOTR_BOOT_MASK GENMASK(2, 0)
|
||||||
|
#if STM32MP15
|
||||||
#define SYSCFG_BOOTR_BOOTPD_MASK GENMASK(6, 4)
|
#define SYSCFG_BOOTR_BOOTPD_MASK GENMASK(6, 4)
|
||||||
#define SYSCFG_BOOTR_BOOTPD_SHIFT 4
|
#define SYSCFG_BOOTR_BOOTPD_SHIFT 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SYSCFG_BOOTCR Register
|
||||||
|
*/
|
||||||
|
#define SYSCFG_BOOTCR_BMEN BIT(0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SYSCFG_IOCTRLSETR Register
|
* SYSCFG_IOCTRLSETR Register
|
||||||
*/
|
*/
|
||||||
|
@ -65,6 +91,32 @@
|
||||||
*/
|
*/
|
||||||
#define SYSCFG_CMPENSETR_MPU_EN BIT(0)
|
#define SYSCFG_CMPENSETR_MPU_EN BIT(0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HSLV definitions
|
||||||
|
*/
|
||||||
|
#define HSLV_IDX_TPIU 0U
|
||||||
|
#define HSLV_IDX_QSPI 1U
|
||||||
|
#define HSLV_IDX_ETH1 2U
|
||||||
|
#define HSLV_IDX_ETH2 3U
|
||||||
|
#define HSLV_IDX_SDMMC1 4U
|
||||||
|
#define HSLV_IDX_SDMMC2 5U
|
||||||
|
#define HSLV_IDX_SPI1 6U
|
||||||
|
#define HSLV_IDX_SPI2 7U
|
||||||
|
#define HSLV_IDX_SPI3 8U
|
||||||
|
#define HSLV_IDX_SPI4 9U
|
||||||
|
#define HSLV_IDX_SPI5 10U
|
||||||
|
#define HSLV_IDX_LTDC 11U
|
||||||
|
#define HSLV_NB_IDX 12U
|
||||||
|
|
||||||
|
#define HSLV_KEY 0x1018U
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SYSCFG_IDC Register
|
||||||
|
*/
|
||||||
|
#define SYSCFG_IDC_DEV_ID_MASK GENMASK(11, 0)
|
||||||
|
#define SYSCFG_IDC_REV_ID_MASK GENMASK(31, 16)
|
||||||
|
#define SYSCFG_IDC_REV_ID_SHIFT 16
|
||||||
|
|
||||||
static void enable_io_comp_cell_finish(uintptr_t cmpcr_off)
|
static void enable_io_comp_cell_finish(uintptr_t cmpcr_off)
|
||||||
{
|
{
|
||||||
uint64_t start;
|
uint64_t start;
|
||||||
|
@ -104,14 +156,107 @@ static void disable_io_comp_cell(uintptr_t cmpcr_off)
|
||||||
mmio_setbits_32(SYSCFG_BASE + cmpcr_off + CMPCR_CMPENCLRR_OFFSET, SYSCFG_CMPENSETR_MPU_EN);
|
mmio_setbits_32(SYSCFG_BASE + cmpcr_off + CMPCR_CMPENCLRR_OFFSET, SYSCFG_CMPENSETR_MPU_EN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
static int get_regu_max_voltage(void *fdt, int sdmmc_node,
|
||||||
|
const char *regu_name, uint32_t *regu_val)
|
||||||
|
{
|
||||||
|
int node;
|
||||||
|
const fdt32_t *cuint;
|
||||||
|
|
||||||
|
cuint = fdt_getprop(fdt, sdmmc_node, regu_name, NULL);
|
||||||
|
if (cuint == NULL) {
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = fdt_node_offset_by_phandle(fdt, fdt32_to_cpu(*cuint));
|
||||||
|
if (node < 0) {
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
cuint = fdt_getprop(fdt, node, "regulator-max-microvolt", NULL);
|
||||||
|
if (cuint == NULL) {
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
*regu_val = fdt32_to_cpu(*cuint);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool sdmmc_is_low_voltage(uintptr_t sdmmc_base)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
int node;
|
||||||
|
void *fdt = NULL;
|
||||||
|
uint32_t regu_max_val;
|
||||||
|
|
||||||
|
if (fdt_get_address(&fdt) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdt == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = dt_match_instance_by_compatible(DT_SDMMC2_COMPAT, sdmmc_base);
|
||||||
|
if (node < 0) {
|
||||||
|
/* No SD or eMMC device on this instance, enable HSLV */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = get_regu_max_voltage(fdt, node, "vqmmc-supply", ®u_max_val);
|
||||||
|
if ((ret < 0) || (regu_max_val > 1800000U)) {
|
||||||
|
/*
|
||||||
|
* The vqmmc-supply property should always be present for eMMC.
|
||||||
|
* For SD-card, if it is not, then the card only supports 3.3V.
|
||||||
|
*/
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void enable_hslv_by_index(uint32_t index)
|
||||||
|
{
|
||||||
|
bool apply_hslv;
|
||||||
|
|
||||||
|
assert(index < HSLV_NB_IDX);
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case HSLV_IDX_SDMMC1:
|
||||||
|
apply_hslv = sdmmc_is_low_voltage(STM32MP_SDMMC1_BASE);
|
||||||
|
break;
|
||||||
|
case HSLV_IDX_SDMMC2:
|
||||||
|
apply_hslv = sdmmc_is_low_voltage(STM32MP_SDMMC2_BASE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
apply_hslv = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apply_hslv) {
|
||||||
|
mmio_write_32(SYSCFG_BASE + SYSCFG_HSLVEN0R + index * sizeof(uint32_t), HSLV_KEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void enable_high_speed_mode_low_voltage(void)
|
static void enable_high_speed_mode_low_voltage(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP13
|
||||||
|
uint32_t idx;
|
||||||
|
|
||||||
|
for (idx = 0U; idx < HSLV_NB_IDX; idx++) {
|
||||||
|
enable_hslv_by_index(idx);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
mmio_write_32(SYSCFG_BASE + SYSCFG_IOCTRLSETR,
|
mmio_write_32(SYSCFG_BASE + SYSCFG_IOCTRLSETR,
|
||||||
SYSCFG_IOCTRLSETR_HSLVEN_TRACE |
|
SYSCFG_IOCTRLSETR_HSLVEN_TRACE |
|
||||||
SYSCFG_IOCTRLSETR_HSLVEN_QUADSPI |
|
SYSCFG_IOCTRLSETR_HSLVEN_QUADSPI |
|
||||||
SYSCFG_IOCTRLSETR_HSLVEN_ETH |
|
SYSCFG_IOCTRLSETR_HSLVEN_ETH |
|
||||||
SYSCFG_IOCTRLSETR_HSLVEN_SDMMC |
|
SYSCFG_IOCTRLSETR_HSLVEN_SDMMC |
|
||||||
SYSCFG_IOCTRLSETR_HSLVEN_SPI);
|
SYSCFG_IOCTRLSETR_HSLVEN_SPI);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stm32mp1_syscfg_set_hslv(void)
|
static void stm32mp1_syscfg_set_hslv(void)
|
||||||
|
@ -165,6 +310,7 @@ static void stm32mp1_syscfg_set_hslv(void)
|
||||||
|
|
||||||
void stm32mp1_syscfg_init(void)
|
void stm32mp1_syscfg_init(void)
|
||||||
{
|
{
|
||||||
|
#if STM32MP15
|
||||||
uint32_t bootr;
|
uint32_t bootr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -178,6 +324,7 @@ void stm32mp1_syscfg_init(void)
|
||||||
SYSCFG_BOOTR_BOOT_MASK;
|
SYSCFG_BOOTR_BOOT_MASK;
|
||||||
mmio_clrsetbits_32(SYSCFG_BASE + SYSCFG_BOOTR, SYSCFG_BOOTR_BOOTPD_MASK,
|
mmio_clrsetbits_32(SYSCFG_BASE + SYSCFG_BOOTR, SYSCFG_BOOTR_BOOTPD_MASK,
|
||||||
bootr << SYSCFG_BOOTR_BOOTPD_SHIFT);
|
bootr << SYSCFG_BOOTR_BOOTPD_SHIFT);
|
||||||
|
#endif
|
||||||
|
|
||||||
stm32mp1_syscfg_set_hslv();
|
stm32mp1_syscfg_set_hslv();
|
||||||
|
|
||||||
|
@ -195,11 +342,22 @@ void stm32mp1_syscfg_enable_io_compensation_start(void)
|
||||||
|
|
||||||
mmio_setbits_32(SYSCFG_BASE + CMPCR_CMPENSETR_OFFSET + SYSCFG_CMPCR,
|
mmio_setbits_32(SYSCFG_BASE + CMPCR_CMPENSETR_OFFSET + SYSCFG_CMPCR,
|
||||||
SYSCFG_CMPENSETR_MPU_EN);
|
SYSCFG_CMPENSETR_MPU_EN);
|
||||||
|
#if STM32MP13
|
||||||
|
mmio_setbits_32(SYSCFG_BASE + CMPCR_CMPENSETR_OFFSET + SYSCFG_CMPSD1CR,
|
||||||
|
SYSCFG_CMPENSETR_MPU_EN);
|
||||||
|
mmio_setbits_32(SYSCFG_BASE + CMPCR_CMPENSETR_OFFSET + SYSCFG_CMPSD2CR,
|
||||||
|
SYSCFG_CMPENSETR_MPU_EN);
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void stm32mp1_syscfg_enable_io_compensation_finish(void)
|
void stm32mp1_syscfg_enable_io_compensation_finish(void)
|
||||||
{
|
{
|
||||||
enable_io_comp_cell_finish(SYSCFG_CMPCR);
|
enable_io_comp_cell_finish(SYSCFG_CMPCR);
|
||||||
|
#if STM32MP13
|
||||||
|
enable_io_comp_cell_finish(SYSCFG_CMPSD1CR);
|
||||||
|
enable_io_comp_cell_finish(SYSCFG_CMPSD2CR);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void stm32mp1_syscfg_disable_io_compensation(void)
|
void stm32mp1_syscfg_disable_io_compensation(void)
|
||||||
|
@ -213,6 +371,41 @@ void stm32mp1_syscfg_disable_io_compensation(void)
|
||||||
* Disable non-secure SYSCFG clock, we assume non-secure is suspended.
|
* Disable non-secure SYSCFG clock, we assume non-secure is suspended.
|
||||||
*/
|
*/
|
||||||
disable_io_comp_cell(SYSCFG_CMPCR);
|
disable_io_comp_cell(SYSCFG_CMPCR);
|
||||||
|
#if STM32MP13
|
||||||
|
disable_io_comp_cell(SYSCFG_CMPSD1CR);
|
||||||
|
disable_io_comp_cell(SYSCFG_CMPSD2CR);
|
||||||
|
#endif
|
||||||
|
|
||||||
clk_disable(SYSCFG);
|
clk_disable(SYSCFG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Get silicon revision from SYSCFG registers.
|
||||||
|
* @retval chip version (REV_ID).
|
||||||
|
*/
|
||||||
|
uint32_t stm32mp1_syscfg_get_chip_version(void)
|
||||||
|
{
|
||||||
|
return (mmio_read_32(SYSCFG_BASE + SYSCFG_IDC) &
|
||||||
|
SYSCFG_IDC_REV_ID_MASK) >> SYSCFG_IDC_REV_ID_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Get device ID from SYSCFG registers.
|
||||||
|
* @retval device ID (DEV_ID).
|
||||||
|
*/
|
||||||
|
uint32_t stm32mp1_syscfg_get_chip_dev_id(void)
|
||||||
|
{
|
||||||
|
return mmio_read_32(SYSCFG_BASE + SYSCFG_IDC) & SYSCFG_IDC_DEV_ID_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
void stm32mp1_syscfg_boot_mode_enable(void)
|
||||||
|
{
|
||||||
|
mmio_setbits_32(SYSCFG_BASE + SYSCFG_BOOTCR, SYSCFG_BOOTCR_BMEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void stm32mp1_syscfg_boot_mode_disable(void)
|
||||||
|
{
|
||||||
|
mmio_clrbits_32(SYSCFG_BASE + SYSCFG_BOOTCR, SYSCFG_BOOTCR_BMEN);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -28,7 +28,12 @@
|
||||||
#define USBD_CONFIGURATION_STRING "DFU Config"
|
#define USBD_CONFIGURATION_STRING "DFU Config"
|
||||||
#define USBD_INTERFACE_STRING "DFU Interface"
|
#define USBD_INTERFACE_STRING "DFU Interface"
|
||||||
|
|
||||||
|
#if STM32MP13
|
||||||
|
#define USB_DFU_ITF_NUM 2
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
#define USB_DFU_ITF_NUM 6
|
#define USB_DFU_ITF_NUM 6
|
||||||
|
#endif
|
||||||
|
|
||||||
#define USB_DFU_CONFIG_DESC_SIZ USB_DFU_DESC_SIZ(USB_DFU_ITF_NUM)
|
#define USB_DFU_CONFIG_DESC_SIZ USB_DFU_DESC_SIZ(USB_DFU_ITF_NUM)
|
||||||
|
|
||||||
|
@ -98,11 +103,18 @@ static const uint8_t usb_stm32mp1_config_desc[USB_DFU_CONFIG_DESC_SIZ] = {
|
||||||
/* Descriptor of DFU interface 0 Alternate setting 0..N */
|
/* Descriptor of DFU interface 0 Alternate setting 0..N */
|
||||||
USBD_DFU_IF_DESC(0),
|
USBD_DFU_IF_DESC(0),
|
||||||
USBD_DFU_IF_DESC(1),
|
USBD_DFU_IF_DESC(1),
|
||||||
|
#if USB_DFU_ITF_NUM > 2
|
||||||
USBD_DFU_IF_DESC(2),
|
USBD_DFU_IF_DESC(2),
|
||||||
|
#endif
|
||||||
|
#if USB_DFU_ITF_NUM > 3
|
||||||
USBD_DFU_IF_DESC(3),
|
USBD_DFU_IF_DESC(3),
|
||||||
|
#endif
|
||||||
|
#if USB_DFU_ITF_NUM > 4
|
||||||
USBD_DFU_IF_DESC(4),
|
USBD_DFU_IF_DESC(4),
|
||||||
|
#endif
|
||||||
|
#if USB_DFU_ITF_NUM > 5
|
||||||
USBD_DFU_IF_DESC(5),
|
USBD_DFU_IF_DESC(5),
|
||||||
|
#endif
|
||||||
/* DFU Functional Descriptor */
|
/* DFU Functional Descriptor */
|
||||||
0x09, /* blength = 9 Bytes */
|
0x09, /* blength = 9 Bytes */
|
||||||
DFU_DESCRIPTOR_TYPE, /* DFU Functional Descriptor */
|
DFU_DESCRIPTOR_TYPE, /* DFU Functional Descriptor */
|
||||||
|
@ -115,6 +127,13 @@ static const uint8_t usb_stm32mp1_config_desc[USB_DFU_CONFIG_DESC_SIZ] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The user strings: one by alternate as defined in USBD_DFU_IF_DESC */
|
/* The user strings: one by alternate as defined in USBD_DFU_IF_DESC */
|
||||||
|
#if STM32MP13
|
||||||
|
const char *const if_desc_string[USB_DFU_ITF_NUM] = {
|
||||||
|
"@SSBL /0x03/1*16Me",
|
||||||
|
"@virtual /0xF1/1*512Ba"
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
const char *const if_desc_string[USB_DFU_ITF_NUM] = {
|
const char *const if_desc_string[USB_DFU_ITF_NUM] = {
|
||||||
"@Partition0 /0x00/1*256Ke",
|
"@Partition0 /0x00/1*256Ke",
|
||||||
"@FSBL /0x01/1*1Me",
|
"@FSBL /0x01/1*1Me",
|
||||||
|
@ -123,6 +142,7 @@ const char *const if_desc_string[USB_DFU_ITF_NUM] = {
|
||||||
"@Partition4 /0x04/1*16Me",
|
"@Partition4 /0x04/1*16Me",
|
||||||
"@virtual /0xF1/1*512Ba"
|
"@virtual /0xF1/1*512Ba"
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Buffer to build the unicode string provided to USB device stack */
|
/* Buffer to build the unicode string provided to USB device stack */
|
||||||
static uint8_t usb_str_dec[USBD_MAX_STR_DESC_SIZ];
|
static uint8_t usb_str_dec[USBD_MAX_STR_DESC_SIZ];
|
||||||
|
@ -354,9 +374,11 @@ struct usb_handle *usb_dfu_plat_init(void)
|
||||||
stm32mp1_usb_init_driver(&usb_core_handle, &pcd_handle,
|
stm32mp1_usb_init_driver(&usb_core_handle, &pcd_handle,
|
||||||
(uint32_t *)USB_OTG_BASE);
|
(uint32_t *)USB_OTG_BASE);
|
||||||
|
|
||||||
|
#if STM32MP15
|
||||||
/* STM32MP15 = keep the configuration from ROM code */
|
/* STM32MP15 = keep the configuration from ROM code */
|
||||||
usb_core_handle.ep0_state = USBD_EP0_DATA_IN;
|
usb_core_handle.ep0_state = USBD_EP0_DATA_IN;
|
||||||
usb_core_handle.dev_state = USBD_STATE_CONFIGURED;
|
usb_core_handle.dev_state = USBD_STATE_CONFIGURED;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Update the serial number string descriptor from the unique ID */
|
/* Update the serial number string descriptor from the unique ID */
|
||||||
update_serial_num_string();
|
update_serial_num_string();
|
||||||
|
@ -376,12 +398,22 @@ uint8_t usb_dfu_get_phase(uint8_t alt)
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
|
|
||||||
switch (alt) {
|
switch (alt) {
|
||||||
|
#if STM32MP13
|
||||||
|
case 0:
|
||||||
|
ret = PHASE_SSBL;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ret = PHASE_CMD;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if STM32MP15
|
||||||
case 3:
|
case 3:
|
||||||
ret = PHASE_SSBL;
|
ret = PHASE_SSBL;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
ret = PHASE_CMD;
|
ret = PHASE_CMD;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ret = PHASE_RESET;
|
ret = PHASE_RESET;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2021, STMicroelectronics - All Rights Reserved
|
* Copyright (c) 2017-2022, STMicroelectronics - All Rights Reserved
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -22,16 +22,16 @@
|
||||||
#define VER_MINOR 1
|
#define VER_MINOR 1
|
||||||
#define VER_VARIANT 0
|
#define VER_VARIANT 0
|
||||||
#define HEADER_VERSION_V1 0x1
|
#define HEADER_VERSION_V1 0x1
|
||||||
#define TF_BINARY_TYPE 0x10
|
#define HEADER_VERSION_V2 0x2
|
||||||
|
#define PADDING_HEADER_MAGIC __be32_to_cpu(0x5354FFFF)
|
||||||
|
#define PADDING_HEADER_FLAG (1 << 31)
|
||||||
|
#define PADDING_HEADER_LENGTH 0x180
|
||||||
|
|
||||||
/* Default option : bit0 => no signature */
|
struct stm32_header_v1 {
|
||||||
#define HEADER_DEFAULT_OPTION (__cpu_to_le32(0x00000001))
|
|
||||||
|
|
||||||
struct stm32_header {
|
|
||||||
uint32_t magic_number;
|
uint32_t magic_number;
|
||||||
uint8_t image_signature[64];
|
uint8_t image_signature[64];
|
||||||
uint32_t image_checksum;
|
uint32_t image_checksum;
|
||||||
uint8_t header_version[4];
|
uint8_t header_version[4];
|
||||||
uint32_t image_length;
|
uint32_t image_length;
|
||||||
uint32_t image_entry_point;
|
uint32_t image_entry_point;
|
||||||
uint32_t reserved1;
|
uint32_t reserved1;
|
||||||
|
@ -45,31 +45,50 @@ struct stm32_header {
|
||||||
uint8_t binary_type;
|
uint8_t binary_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stm32image_default_header(struct stm32_header *ptr)
|
struct stm32_header_v2 {
|
||||||
|
uint32_t magic_number;
|
||||||
|
uint8_t image_signature[64];
|
||||||
|
uint32_t image_checksum;
|
||||||
|
uint8_t header_version[4];
|
||||||
|
uint32_t image_length;
|
||||||
|
uint32_t image_entry_point;
|
||||||
|
uint32_t reserved1;
|
||||||
|
uint32_t load_address;
|
||||||
|
uint32_t reserved2;
|
||||||
|
uint32_t version_number;
|
||||||
|
uint32_t extension_flags;
|
||||||
|
uint32_t extension_headers_length;
|
||||||
|
uint32_t binary_type;
|
||||||
|
uint8_t padding[16];
|
||||||
|
uint32_t extension_header_type;
|
||||||
|
uint32_t extension_header_length;
|
||||||
|
uint8_t extension_padding[376];
|
||||||
|
};
|
||||||
|
|
||||||
|
static void stm32image_default_header(void *ptr)
|
||||||
{
|
{
|
||||||
if (!ptr) {
|
struct stm32_header_v1 *header = (struct stm32_header_v1 *)ptr;
|
||||||
|
|
||||||
|
if (!header) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr->magic_number = HEADER_MAGIC;
|
header->magic_number = HEADER_MAGIC;
|
||||||
ptr->option_flags = HEADER_DEFAULT_OPTION;
|
header->version_number = __cpu_to_le32(0);
|
||||||
ptr->ecdsa_algorithm = __cpu_to_le32(1);
|
|
||||||
ptr->version_number = __cpu_to_le32(0);
|
|
||||||
ptr->binary_type = TF_BINARY_TYPE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t stm32image_checksum(void *start, uint32_t len)
|
static uint32_t stm32image_checksum(void *start, uint32_t len,
|
||||||
|
uint32_t header_size)
|
||||||
{
|
{
|
||||||
uint32_t csum = 0;
|
uint32_t csum = 0;
|
||||||
uint32_t hdr_len = sizeof(struct stm32_header);
|
|
||||||
uint8_t *p;
|
uint8_t *p;
|
||||||
|
|
||||||
if (len < hdr_len) {
|
if (len < header_size) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = (unsigned char *)start + hdr_len;
|
p = (unsigned char *)start + header_size;
|
||||||
len -= hdr_len;
|
len -= header_size;
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
csum += *p;
|
csum += *p;
|
||||||
|
@ -82,7 +101,8 @@ static uint32_t stm32image_checksum(void *start, uint32_t len)
|
||||||
|
|
||||||
static void stm32image_print_header(const void *ptr)
|
static void stm32image_print_header(const void *ptr)
|
||||||
{
|
{
|
||||||
struct stm32_header *stm32hdr = (struct stm32_header *)ptr;
|
struct stm32_header_v1 *stm32hdr = (struct stm32_header_v1 *)ptr;
|
||||||
|
struct stm32_header_v2 *stm32hdr_v2 = (struct stm32_header_v2 *)ptr;
|
||||||
|
|
||||||
printf("Image Type : ST Microelectronics STM32 V%d.%d\n",
|
printf("Image Type : ST Microelectronics STM32 V%d.%d\n",
|
||||||
stm32hdr->header_version[VER_MAJOR],
|
stm32hdr->header_version[VER_MAJOR],
|
||||||
|
@ -95,40 +115,87 @@ static void stm32image_print_header(const void *ptr)
|
||||||
__le32_to_cpu(stm32hdr->image_entry_point));
|
__le32_to_cpu(stm32hdr->image_entry_point));
|
||||||
printf("Checksum : 0x%08x\n",
|
printf("Checksum : 0x%08x\n",
|
||||||
__le32_to_cpu(stm32hdr->image_checksum));
|
__le32_to_cpu(stm32hdr->image_checksum));
|
||||||
printf("Option : 0x%08x\n",
|
|
||||||
__le32_to_cpu(stm32hdr->option_flags));
|
switch (stm32hdr->header_version[VER_MAJOR]) {
|
||||||
printf("Version : 0x%08x\n",
|
case HEADER_VERSION_V1:
|
||||||
|
printf("Option : 0x%08x\n",
|
||||||
|
__le32_to_cpu(stm32hdr->option_flags));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HEADER_VERSION_V2:
|
||||||
|
printf("Extension : 0x%08x\n",
|
||||||
|
__le32_to_cpu(stm32hdr_v2->extension_flags));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Incorrect header version\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Version : 0x%08x\n",
|
||||||
__le32_to_cpu(stm32hdr->version_number));
|
__le32_to_cpu(stm32hdr->version_number));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stm32image_set_header(void *ptr, struct stat *sbuf, int ifd,
|
static int stm32image_set_header(void *ptr, struct stat *sbuf, int ifd,
|
||||||
uint32_t loadaddr, uint32_t ep, uint32_t ver,
|
uint32_t loadaddr, uint32_t ep, uint32_t ver,
|
||||||
uint32_t major, uint32_t minor)
|
uint32_t major, uint32_t minor,
|
||||||
|
uint32_t binary_type, uint32_t header_size)
|
||||||
{
|
{
|
||||||
struct stm32_header *stm32hdr = (struct stm32_header *)ptr;
|
struct stm32_header_v1 *stm32hdr = (struct stm32_header_v1 *)ptr;
|
||||||
|
struct stm32_header_v2 *stm32hdr_v2 = (struct stm32_header_v2 *)ptr;
|
||||||
|
uint32_t ext_size = 0U;
|
||||||
|
uint32_t ext_flags = 0U;
|
||||||
|
|
||||||
stm32image_default_header(stm32hdr);
|
stm32image_default_header(ptr);
|
||||||
|
|
||||||
stm32hdr->header_version[VER_MAJOR] = major;
|
stm32hdr->header_version[VER_MAJOR] = major;
|
||||||
stm32hdr->header_version[VER_MINOR] = minor;
|
stm32hdr->header_version[VER_MINOR] = minor;
|
||||||
stm32hdr->load_address = __cpu_to_le32(loadaddr);
|
stm32hdr->load_address = __cpu_to_le32(loadaddr);
|
||||||
stm32hdr->image_entry_point = __cpu_to_le32(ep);
|
stm32hdr->image_entry_point = __cpu_to_le32(ep);
|
||||||
stm32hdr->image_length = __cpu_to_le32((uint32_t)sbuf->st_size -
|
stm32hdr->image_length = __cpu_to_le32((uint32_t)sbuf->st_size -
|
||||||
sizeof(struct stm32_header));
|
header_size);
|
||||||
stm32hdr->image_checksum =
|
stm32hdr->image_checksum =
|
||||||
__cpu_to_le32(stm32image_checksum(ptr, sbuf->st_size));
|
__cpu_to_le32(stm32image_checksum(ptr, sbuf->st_size,
|
||||||
|
header_size));
|
||||||
|
|
||||||
|
switch (stm32hdr->header_version[VER_MAJOR]) {
|
||||||
|
case HEADER_VERSION_V1:
|
||||||
|
/* Default option for header v1 : bit0 => no signature */
|
||||||
|
stm32hdr->option_flags = __cpu_to_le32(0x00000001);
|
||||||
|
stm32hdr->ecdsa_algorithm = __cpu_to_le32(1);
|
||||||
|
stm32hdr->binary_type = (uint8_t)binary_type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HEADER_VERSION_V2:
|
||||||
|
stm32hdr_v2->binary_type = binary_type;
|
||||||
|
ext_size += PADDING_HEADER_LENGTH;
|
||||||
|
ext_flags |= PADDING_HEADER_FLAG;
|
||||||
|
stm32hdr_v2->extension_flags =
|
||||||
|
__cpu_to_le32(ext_flags);
|
||||||
|
stm32hdr_v2->extension_headers_length =
|
||||||
|
__cpu_to_le32(ext_size);
|
||||||
|
stm32hdr_v2->extension_header_type = PADDING_HEADER_MAGIC;
|
||||||
|
stm32hdr_v2->extension_header_length =
|
||||||
|
__cpu_to_le32(PADDING_HEADER_LENGTH);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
stm32hdr->version_number = __cpu_to_le32(ver);
|
stm32hdr->version_number = __cpu_to_le32(ver);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32image_create_header_file(char *srcname, char *destname,
|
static int stm32image_create_header_file(char *srcname, char *destname,
|
||||||
uint32_t loadaddr, uint32_t entry,
|
uint32_t loadaddr, uint32_t entry,
|
||||||
uint32_t version, uint32_t major,
|
uint32_t version, uint32_t major,
|
||||||
uint32_t minor)
|
uint32_t minor, uint32_t binary_type)
|
||||||
{
|
{
|
||||||
int src_fd, dest_fd;
|
int src_fd, dest_fd, header_size;
|
||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
struct stm32_header stm32image_header;
|
void *stm32image_header;
|
||||||
|
|
||||||
dest_fd = open(destname, O_RDWR | O_CREAT | O_TRUNC | O_APPEND, 0666);
|
dest_fd = open(destname, O_RDWR | O_CREAT | O_TRUNC | O_APPEND, 0666);
|
||||||
if (dest_fd == -1) {
|
if (dest_fd == -1) {
|
||||||
|
@ -154,15 +221,32 @@ static int stm32image_create_header_file(char *srcname, char *destname,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&stm32image_header, 0, sizeof(struct stm32_header));
|
switch (major) {
|
||||||
|
case HEADER_VERSION_V1:
|
||||||
|
stm32image_header = malloc(sizeof(struct stm32_header_v1));
|
||||||
|
header_size = sizeof(struct stm32_header_v1);
|
||||||
|
break;
|
||||||
|
|
||||||
if (write(dest_fd, &stm32image_header, sizeof(struct stm32_header)) !=
|
case HEADER_VERSION_V2:
|
||||||
sizeof(struct stm32_header)) {
|
stm32image_header = malloc(sizeof(struct stm32_header_v2));
|
||||||
fprintf(stderr, "Write error %s: %s\n", destname,
|
header_size = sizeof(struct stm32_header_v2);
|
||||||
strerror(errno));
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(stm32image_header, 0, header_size);
|
||||||
|
if (write(dest_fd, stm32image_header, header_size) !=
|
||||||
|
header_size) {
|
||||||
|
fprintf(stderr, "Write error %s: %s\n", destname,
|
||||||
|
strerror(errno));
|
||||||
|
free(stm32image_header);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(stm32image_header);
|
||||||
|
|
||||||
if (write(dest_fd, ptr, sbuf.st_size) != sbuf.st_size) {
|
if (write(dest_fd, ptr, sbuf.st_size) != sbuf.st_size) {
|
||||||
fprintf(stderr, "Write error on %s: %s\n", destname,
|
fprintf(stderr, "Write error on %s: %s\n", destname,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
@ -184,8 +268,11 @@ static int stm32image_create_header_file(char *srcname, char *destname,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
stm32image_set_header(ptr, &sbuf, dest_fd, loadaddr, entry, version,
|
if (stm32image_set_header(ptr, &sbuf, dest_fd, loadaddr,
|
||||||
major, minor);
|
entry, version, major, minor,
|
||||||
|
binary_type, header_size) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
stm32image_print_header(ptr);
|
stm32image_print_header(ptr);
|
||||||
|
|
||||||
|
@ -196,13 +283,22 @@ static int stm32image_create_header_file(char *srcname, char *destname,
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int opt, loadaddr = -1, entry = -1, err = 0, version = 0;
|
int opt;
|
||||||
int major = HEADER_VERSION_V1;
|
int loadaddr = -1;
|
||||||
|
int entry = -1;
|
||||||
|
int err = 0;
|
||||||
|
int version = 0;
|
||||||
|
int binary_type = -1;
|
||||||
|
int major = HEADER_VERSION_V2;
|
||||||
int minor = 0;
|
int minor = 0;
|
||||||
char *dest = NULL, *src = NULL;
|
char *dest = NULL;
|
||||||
|
char *src = NULL;
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, ":s:d:l:e:v:m:n:")) != -1) {
|
while ((opt = getopt(argc, argv, ":b:s:d:l:e:v:m:n:")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
case 'b':
|
||||||
|
binary_type = strtol(optarg, NULL, 0);
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
src = optarg;
|
src = optarg;
|
||||||
break;
|
break;
|
||||||
|
@ -226,7 +322,7 @@ int main(int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage : %s [-s srcfile] [-d destfile] [-l loadaddr] [-e entry_point] [-m major] [-n minor]\n",
|
"Usage : %s [-s srcfile] [-d destfile] [-l loadaddr] [-e entry_point] [-m major] [-n minor] [-b binary_type]\n",
|
||||||
argv[0]);
|
argv[0]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -252,8 +348,14 @@ int main(int argc, char *argv[])
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (binary_type == -1) {
|
||||||
|
fprintf(stderr, "Missing -b option\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
err = stm32image_create_header_file(src, dest, loadaddr,
|
err = stm32image_create_header_file(src, dest, loadaddr,
|
||||||
entry, version, major, minor);
|
entry, version, major, minor,
|
||||||
|
binary_type);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue