Signed-off-by: hmz007 <hmz007@gmail.com>master
parent
6ed7f19e59
commit
ea5b08db35
@ -0,0 +1,30 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "rv1126b.dtsi"
|
||||
#include "rv1126b-u-boot.dtsi"
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
model = "Rockchip RV1126B Evaluation board";
|
||||
compatible = "rockchip,rv1126b-evb", "rockchip,rv1126b";
|
||||
|
||||
adc-keys {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc0 0>;
|
||||
io-channel-names = "buttons";
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
|
||||
volumeup-key {
|
||||
u-boot,dm-pre-reloc;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
label = "volume up";
|
||||
press-threshold-microvolt = <1750>;
|
||||
};
|
||||
};
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,173 @@
|
||||
/*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
mmc0 = &emmc;
|
||||
mmc1 = &sdmmc0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart0;
|
||||
u-boot,spl-boot-order = &sdmmc0, &spi_nand, &spi_nor, &emmc;
|
||||
};
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&grf {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ioc_grf {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cru {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&crypto {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&psci {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hw_decompress {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rng {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fspi0 {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
spi_nand: flash@0 {
|
||||
u-boot,dm-spl;
|
||||
compatible = "spi-nand";
|
||||
reg = <0>;
|
||||
spi-tx-bus-width = <1>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <80000000>;
|
||||
};
|
||||
|
||||
spi_nor: flash@1 {
|
||||
u-boot,dm-spl;
|
||||
compatible = "jedec,spi-nor";
|
||||
label = "sfc_nor";
|
||||
reg = <0>;
|
||||
spi-tx-bus-width = <1>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <80000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&saradc0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc0 {
|
||||
bus-width = <4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sdmmc0_bus4_pins &sdmmc0_cmd_pins &sdmmc0_clk_pins &sdmmc0_detn_pins>;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&emmc {
|
||||
bus-width = <8>;
|
||||
mmc-hs200-1_8v;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc0_pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc0_bus4_pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc0_cmd_pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc0_clk_pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc0_detn_pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcfg_pull_up {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pcfg_pull_none {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usb2phy {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2phy_otg {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,387 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co. Ltd.
|
||||
* Author: Elaine Zhang <zhangqing@rock-chips.com>
|
||||
*/
|
||||
|
||||
#ifndef _ASM_ARCH_CRU_RV1126B_H
|
||||
#define _ASM_ARCH_CRU_RV1126B_H
|
||||
|
||||
#include <common.h>
|
||||
|
||||
#define MHz 1000000
|
||||
#define KHz 1000
|
||||
#define OSC_HZ (24 * MHz)
|
||||
#define RC_OSC_HZ (125 * MHz)
|
||||
|
||||
#define GPLL_HZ (1188 * MHz)
|
||||
#define AUPLL_HZ (983040000)
|
||||
#define CPLL_HZ (1000 * MHz)
|
||||
|
||||
/* RV1126B pll id */
|
||||
enum rv1126b_pll_id {
|
||||
GPLL,
|
||||
AUPLL,
|
||||
CPLL,
|
||||
PLL_COUNT,
|
||||
};
|
||||
|
||||
struct rv1126b_clk_info {
|
||||
unsigned long id;
|
||||
char *name;
|
||||
bool is_cru;
|
||||
};
|
||||
|
||||
struct rv1126b_clk_priv {
|
||||
struct rv1126b_cru *cru;
|
||||
struct rv1126b_grf *grf;
|
||||
ulong gpll_hz;
|
||||
ulong aupll_hz;
|
||||
ulong cpll_hz;
|
||||
ulong armclk_hz;
|
||||
ulong armclk_enter_hz;
|
||||
ulong armclk_init_hz;
|
||||
bool sync_kernel;
|
||||
bool set_armclk_rate;
|
||||
};
|
||||
|
||||
struct rv1126b_grf_clk_priv {
|
||||
struct rv1126b_grf *grf;
|
||||
};
|
||||
|
||||
struct rv1126b_pll {
|
||||
unsigned int con0;
|
||||
unsigned int con1;
|
||||
unsigned int con2;
|
||||
unsigned int con3;
|
||||
unsigned int con4;
|
||||
unsigned int reserved0[3];
|
||||
};
|
||||
|
||||
struct rv1126b_cru {
|
||||
struct rv1126b_pll pll[2];
|
||||
unsigned int reserved0[176];
|
||||
unsigned int clksel_con[71];
|
||||
unsigned int reserved1[249];
|
||||
unsigned int clkgate_con[16];
|
||||
unsigned int reserved2[112];
|
||||
unsigned int softrst_con[16];
|
||||
unsigned int reserved3[112];
|
||||
unsigned int glb_cnt_th;
|
||||
unsigned int glb_rst_st;
|
||||
unsigned int glb_srst_fst;
|
||||
unsigned int glb_srst_snd;
|
||||
unsigned int glb_rst_con[3];
|
||||
unsigned int reserved4[41];
|
||||
unsigned int clk_cm_frac0_div_h;
|
||||
unsigned int clk_cm_frac1_div_h;
|
||||
unsigned int clk_cm_frac2_div_h;
|
||||
unsigned int clk_uart_frac0_div_h;
|
||||
unsigned int clk_uart_frac1_div_h;
|
||||
unsigned int clk_audio_frac0_div_h;
|
||||
unsigned int clk_audio_frac1_div_h;
|
||||
unsigned int reserved5[15753];
|
||||
unsigned int bus_clksel_con[4];
|
||||
unsigned int reserved6[316];
|
||||
unsigned int bus_clkgate_con[7];
|
||||
unsigned int reserved7[121];
|
||||
unsigned int bus_softrst_con[8];
|
||||
unsigned int reserved8[15928];
|
||||
unsigned int peri_clksel_con[2];
|
||||
unsigned int reserved9[318];
|
||||
unsigned int peri_clkgate_con[2];
|
||||
unsigned int reserved10[126];
|
||||
unsigned int peri_softrst_con[2];
|
||||
unsigned int reserved11[15934];
|
||||
unsigned int core_clksel_con[3];
|
||||
unsigned int reserved12[317];
|
||||
unsigned int core_clkgate_con[2];
|
||||
unsigned int reserved13[126];
|
||||
unsigned int core_softrst_con[2];
|
||||
unsigned int reserved14[15934];
|
||||
unsigned int pmu_clksel_con[9];
|
||||
unsigned int reserved15[311];
|
||||
unsigned int pmu_clkgate_con[4];
|
||||
unsigned int reserved16[124];
|
||||
unsigned int pmu_softrst_con[4];
|
||||
unsigned int reserved17[15932];
|
||||
unsigned int pmu1_clksel_con[2];
|
||||
unsigned int reserved18[318];
|
||||
unsigned int pmu1_clkgate_con[2];
|
||||
unsigned int reserved19[126];
|
||||
unsigned int pmu1_softrst_con[2];
|
||||
unsigned int reserved20[32318];
|
||||
unsigned int vi_clksel_con[1];
|
||||
unsigned int reserved21[319];
|
||||
unsigned int vi_clkgate_con[5];
|
||||
unsigned int reserved22[123];
|
||||
unsigned int vi_softrst_con[4];
|
||||
};
|
||||
|
||||
check_member(rv1126b_cru, clksel_con[0], 0x300);
|
||||
check_member(rv1126b_cru, clkgate_con[0], 0x800);
|
||||
check_member(rv1126b_cru, softrst_con[0], 0xa00);
|
||||
check_member(rv1126b_cru, clk_cm_frac0_div_h, 0xcc0);
|
||||
check_member(rv1126b_cru, bus_clksel_con[0], 0x10300);
|
||||
check_member(rv1126b_cru, bus_clkgate_con[0], 0x10800);
|
||||
check_member(rv1126b_cru, bus_softrst_con[0], 0x10a00);
|
||||
check_member(rv1126b_cru, peri_clksel_con[0], 0x20300);
|
||||
check_member(rv1126b_cru, peri_clkgate_con[0], 0x20800);
|
||||
check_member(rv1126b_cru, peri_softrst_con[0], 0x20a00);
|
||||
check_member(rv1126b_cru, core_clksel_con[0], 0x30300);
|
||||
check_member(rv1126b_cru, core_clkgate_con[0], 0x30800);
|
||||
check_member(rv1126b_cru, core_softrst_con[0], 0x30a00);
|
||||
check_member(rv1126b_cru, pmu_clksel_con[0], 0x40300);
|
||||
check_member(rv1126b_cru, pmu_clkgate_con[0], 0x40800);
|
||||
check_member(rv1126b_cru, pmu_softrst_con[0], 0x40a00);
|
||||
check_member(rv1126b_cru, pmu1_clksel_con[0], 0x50300);
|
||||
check_member(rv1126b_cru, pmu1_clkgate_con[0], 0x50800);
|
||||
check_member(rv1126b_cru, pmu1_softrst_con[0], 0x50a00);
|
||||
check_member(rv1126b_cru, vi_clksel_con[0], 0x70300);
|
||||
check_member(rv1126b_cru, vi_clkgate_con[0], 0x70800);
|
||||
check_member(rv1126b_cru, vi_softrst_con[0], 0x70a00);
|
||||
|
||||
struct pll_rate_table {
|
||||
unsigned long rate;
|
||||
unsigned int fbdiv;
|
||||
unsigned int postdiv1;
|
||||
unsigned int refdiv;
|
||||
unsigned int postdiv2;
|
||||
unsigned int dsmpd;
|
||||
unsigned int frac;
|
||||
};
|
||||
|
||||
#define RV1126B_CRU_BASE 0x20000000
|
||||
#define RV1126B_TOPCRU_BASE 0x0
|
||||
#define RV1126B_BUSCRU_BASE 0x10000
|
||||
#define RV1126B_PERICRU_BASE 0x20000
|
||||
#define RV1126B_CORECRU_BASE 0x30000
|
||||
#define RV1126B_PMUCRU_BASE 0x40000
|
||||
#define RV1126B_PMU1CRU_BASE 0x50000
|
||||
#define RV1126B_DDRCRU_BASE 0x60000
|
||||
#define RV1126B_SUBDDRCRU_BASE 0x68000
|
||||
#define RV1126B_VICRU_BASE 0x70000
|
||||
#define RV1126B_VEPUCRU_BASE 0x80000
|
||||
#define RV1126B_NPUCRU_BASE 0x90000
|
||||
#define RV1126B_VDOCRU_BASE 0xA0000
|
||||
#define RV1126B_VCPCRU_BASE 0xB0000
|
||||
|
||||
#define RV1126B_PLL_CON(x) ((x) * 0x4 + RV1126B_TOPCRU_BASE)
|
||||
#define RV1126B_MODE_CON (0x280 + RV1126B_TOPCRU_BASE)
|
||||
#define RV1126B_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_TOPCRU_BASE)
|
||||
#define RV1126B_PERIPLL_CON(x) ((x) * 0x4 + RV1126B_PERICRU_BASE)
|
||||
#define RV1126B_SUBDDRPLL_CON(x) ((x) * 0x4 + RV1126B_SUBDDRCRU_BASE)
|
||||
|
||||
enum {
|
||||
/* CRU_CLK_SEL10_CON */
|
||||
CLK_AUDIO_FRAC1_SRC_SEL_SHIFT = 12,
|
||||
CLK_AUDIO_FRAC1_SRC_SEL_MASK = 0x3 << CLK_AUDIO_FRAC1_SRC_SEL_SHIFT,
|
||||
CLK_AUDIO_FRAC0_SRC_SEL_SHIFT = 10,
|
||||
CLK_AUDIO_FRAC0_SRC_SEL_MASK = 0x3 << CLK_AUDIO_FRAC0_SRC_SEL_SHIFT,
|
||||
CLK_UART_FRAC1_SRC_SEL_SHIFT = 8,
|
||||
CLK_UART_FRAC1_SRC_SEL_MASK = 0x3 << CLK_UART_FRAC1_SRC_SEL_SHIFT,
|
||||
CLK_UART_FRAC0_SRC_SEL_SHIFT = 6,
|
||||
CLK_UART_FRAC0_SRC_SEL_MASK = 0x3 << CLK_UART_FRAC0_SRC_SEL_SHIFT,
|
||||
CLK_CM_FRAC2_SRC_SEL_SHIFT = 4,
|
||||
CLK_CM_FRAC2_SRC_SEL_MASK = 0x3 << CLK_CM_FRAC2_SRC_SEL_SHIFT,
|
||||
CLK_CM_FRAC1_SRC_SEL_SHIFT = 2,
|
||||
CLK_CM_FRAC1_SRC_SEL_MASK = 0x3 << CLK_CM_FRAC1_SRC_SEL_SHIFT,
|
||||
CLK_CM_FRAC0_SRC_SEL_SHIFT = 0,
|
||||
CLK_CM_FRAC0_SRC_SEL_MASK = 0x3 << CLK_CM_FRAC0_SRC_SEL_SHIFT,
|
||||
CLK_FRAC_SRC_SEL_24M = 0,
|
||||
CLK_FRAC_SRC_SEL_GPLL,
|
||||
CLK_FRAC_SRC_SEL_AUPLL,
|
||||
CLK_FRAC_SRC_SEL_CPLL,
|
||||
|
||||
/* CRU_CLK_SEL12_CON */
|
||||
SCLK_UART1_SEL_SHIFT = 13,
|
||||
SCLK_UART1_SEL_MASK = 0x7 << SCLK_UART1_SEL_SHIFT,
|
||||
SCLK_UART1_DIV_SHIFT = 8,
|
||||
SCLK_UART1_DIV_MASK = 0x1f << SCLK_UART1_DIV_SHIFT,
|
||||
SCLK_UART0_SRC_SEL_SHIFT = 5,
|
||||
SCLK_UART0_SRC_SEL_MASK = 0x7 << SCLK_UART0_SRC_SEL_SHIFT,
|
||||
SCLK_UART_SEL_OSC = 0,
|
||||
SCLK_UART_SEL_CM_FRAC0,
|
||||
SCLK_UART_SEL_CM_FRAC1,
|
||||
SCLK_UART_SEL_CM_FRAC2,
|
||||
SCLK_UART_SEL_UART_FRAC0,
|
||||
SCLK_UART_SEL_UART_FRAC1,
|
||||
SCLK_UART0_SRC_DIV_SHIFT = 0,
|
||||
SCLK_UART0_SRC_DIV_MASK = 0x1f << SCLK_UART0_SRC_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL13_CON */
|
||||
SCLK_UART3_SEL_SHIFT = 13,
|
||||
SCLK_UART3_SEL_MASK = 0x7 << SCLK_UART3_SEL_SHIFT,
|
||||
SCLK_UART3_DIV_SHIFT = 8,
|
||||
SCLK_UART3_DIV_MASK = 0x1f << SCLK_UART3_DIV_SHIFT,
|
||||
SCLK_UART2_SEL_SHIFT = 5,
|
||||
SCLK_UART2_SEL_MASK = 0x7 << SCLK_UART2_SEL_SHIFT,
|
||||
SCLK_UART2_DIV_SHIFT = 0,
|
||||
SCLK_UART2_DIV_MASK = 0x1f << SCLK_UART2_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL14_CON */
|
||||
SCLK_UART5_SEL_SHIFT = 13,
|
||||
SCLK_UART5_SEL_MASK = 0x7 << SCLK_UART5_SEL_SHIFT,
|
||||
SCLK_UART5_DIV_SHIFT = 8,
|
||||
SCLK_UART5_DIV_MASK = 0x1f << SCLK_UART5_DIV_SHIFT,
|
||||
SCLK_UART4_SEL_SHIFT = 5,
|
||||
SCLK_UART4_SEL_MASK = 0x7 << SCLK_UART4_SEL_SHIFT,
|
||||
SCLK_UART4_DIV_SHIFT = 0,
|
||||
SCLK_UART4_DIV_MASK = 0x1f << SCLK_UART4_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL15_CON */
|
||||
SCLK_UART7_SEL_SHIFT = 13,
|
||||
SCLK_UART7_SEL_MASK = 0x7 << SCLK_UART7_SEL_SHIFT,
|
||||
SCLK_UART7_DIV_SHIFT = 8,
|
||||
SCLK_UART7_DIV_MASK = 0x1f << SCLK_UART7_DIV_SHIFT,
|
||||
SCLK_UART6_SEL_SHIFT = 5,
|
||||
SCLK_UART6_SEL_MASK = 0x7 << SCLK_UART6_SEL_SHIFT,
|
||||
SCLK_UART6_DIV_SHIFT = 0,
|
||||
SCLK_UART6_DIV_MASK = 0x1f << SCLK_UART6_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL25_CON */
|
||||
CLK_FRAC_NUMERATOR_SHIFT = 16,
|
||||
CLK_FRAC_NUMERATOR_MASK = 0xffff << 16,
|
||||
CLK_FRAC_DENOMINATOR_SHIFT = 0,
|
||||
CLK_FRAC_DENOMINATOR_MASK = 0xffff,
|
||||
CLK_FRAC_H_NUMERATOR_SHIFT = 8,
|
||||
CLK_FRAC_H_NUMERATOR_MASK = 0xff << 8,
|
||||
CLK_FRAC_H_DENOMINATOR_SHIFT = 0,
|
||||
CLK_FRAC_H_DENOMINATOR_MASK = 0xff,
|
||||
|
||||
/* CRU_CLK_SEL43_CON */
|
||||
DCLK_VOP_SEL_SHIFT = 8,
|
||||
DCLK_VOP_SEL_MASK = 0x1 << DCLK_VOP_SEL_SHIFT,
|
||||
DCLK_VOP_SEL_GPLL = 0,
|
||||
DCLK_VOP_SEL_CPLL,
|
||||
DCLK_VOP_DIV_SHIFT = 0,
|
||||
DCLK_VOP_DIV_MASK = 0xff << DCLK_VOP_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL44_CON */
|
||||
HCLK_BUS_SEL_SHIFT = 10,
|
||||
HCLK_BUS_SEL_MASK = 0x1 << HCLK_BUS_SEL_SHIFT,
|
||||
HCLK_BUS_SEL_200M = 0,
|
||||
HCLK_BUS_SEL_100M,
|
||||
ACLK_BUS_SEL_SHIFT = 8,
|
||||
ACLK_BUS_SEL_MASK = 0x3 << ACLK_BUS_SEL_SHIFT,
|
||||
ACLK_BUS_SEL_400M = 0,
|
||||
ACLK_BUS_SEL_300M,
|
||||
ACLK_BUS_SEL_200M,
|
||||
ACLK_TOP_SEL_SHIFT = 6,
|
||||
ACLK_TOP_SEL_MASK = 0x3 << ACLK_TOP_SEL_SHIFT,
|
||||
ACLK_TOP_SEL_600M = 0,
|
||||
ACLK_TOP_SEL_400M,
|
||||
ACLK_TOP_SEL_200M,
|
||||
|
||||
/* CRU_CLK_SEL45_CON */
|
||||
CLK_SDMMC_SEL_SHIFT = 8,
|
||||
CLK_SDMMC_SEL_MASK = 0x3 << CLK_SDMMC_SEL_SHIFT,
|
||||
CLK_SDMMC_SEL_GPLL = 0,
|
||||
CLK_SDMMC_SEL_CPLL,
|
||||
CLK_SDMMC_SEL_24M,
|
||||
CLK_SDMMC_DIV_SHIFT = 0,
|
||||
CLK_SDMMC_DIV_MASK = 0xff << CLK_SDMMC_DIV_SHIFT,
|
||||
|
||||
/* CRU_CLK_SEL46_CON */
|
||||
TCLK_WDT_HPMCU_SEL_SHIFT = 14,
|
||||
TCLK_WDT_HPMCU_SEL_MASK = 0x1 << TCLK_WDT_HPMCU_SEL_SHIFT,
|
||||
TCLK_WDT_S_SEL_SHIFT = 13,
|
||||
TCLK_WDT_S_SEL_MASK = 0x1 << TCLK_WDT_S_SEL_SHIFT,
|
||||
TCLK_WDT_NS_SEL_SHIFT = 12,
|
||||
TCLK_WDT_NS_SEL_MASK = 0x1 << TCLK_WDT_NS_SEL_SHIFT,
|
||||
TCLK_WDT_SEL_100M = 0,
|
||||
TCLK_WDT_SEL_OSC,
|
||||
|
||||
/* CRU_CLK_SEL47_CON */
|
||||
ACLK_PERI_SEL_SHIFT = 13,
|
||||
ACLK_PERI_SEL_MASK = 0x1 << ACLK_PERI_SEL_SHIFT,
|
||||
ACLK_PERI_SEL_200M = 0,
|
||||
ACLK_PERI_SEL_24M,
|
||||
PCLK_PERI_SEL_SHIFT = 12,
|
||||
PCLK_PERI_SEL_MASK = 0x1 << PCLK_PERI_SEL_SHIFT,
|
||||
PCLK_PERI_SEL_100M = 0,
|
||||
PCLK_PERI_SEL_24M,
|
||||
|
||||
/* CRU_CLK_SEL50_CON */
|
||||
ACLK_RKCE_SEL_SHIFT = 13,
|
||||
ACLK_RKCE_SEL_MASK = 0x1 << ACLK_RKCE_SEL_SHIFT,
|
||||
ACLK_RKCE_SEL_200M = 0,
|
||||
ACLK_RKCE_SEL_24M,
|
||||
CLK_PKA_RKCE_SEL_SHIFT = 12,
|
||||
CLK_PKA_RKCE_SEL_MASK = 0x1 << CLK_PKA_RKCE_SEL_SHIFT,
|
||||
CLK_PKA_RKCE_SEL_300M = 0,
|
||||
CLK_PKA_RKCE_SEL_200M,
|
||||
CLK_PWM3_SEL_SHIFT = 11,
|
||||
CLK_PWM3_SEL_MASK = 0x1 << CLK_PWM3_SEL_SHIFT,
|
||||
CLK_PWM2_SEL_SHIFT = 10,
|
||||
CLK_PWM2_SEL_MASK = 0x1 << CLK_PWM2_SEL_SHIFT,
|
||||
CLK_PWM0_SEL_SHIFT = 8,
|
||||
CLK_PWM0_SEL_MASK = 0x1 << CLK_PWM0_SEL_SHIFT,
|
||||
CLK_PWM_SEL_100M = 0,
|
||||
CLK_PWM_SEL_24M,
|
||||
CLK_SPI1_SEL_SHIFT = 4,
|
||||
CLK_SPI1_SEL_MASK = 0x3 << CLK_SPI1_SEL_SHIFT,
|
||||
CLK_SPI0_SEL_SHIFT = 2,
|
||||
CLK_SPI0_SEL_MASK = 0x3 << CLK_SPI0_SEL_SHIFT,
|
||||
CLK_SPI0_SEL_200M = 0,
|
||||
CLK_SPI0_SEL_100M,
|
||||
CLK_SPI0_SEL_50M,
|
||||
CLK_SPI0_SEL_24M,
|
||||
CLK_I2C_SEL_SHIFT = 1,
|
||||
CLK_I2C_SEL_MASK = 0x1 << CLK_I2C_SEL_SHIFT,
|
||||
CLK_I2C_SEL_200M = 0,
|
||||
CLK_I2C_SEL_24M,
|
||||
|
||||
/* CRU_CLK_SEL63_CON */
|
||||
CLK_SARADC2_SEL_SHIFT = 14,
|
||||
CLK_SARADC2_SEL_MASK = 0x1 << CLK_SARADC2_SEL_SHIFT,
|
||||
CLK_SARADC1_SEL_SHIFT = 13,
|
||||
CLK_SARADC1_SEL_MASK = 0x1 << CLK_SARADC1_SEL_SHIFT,
|
||||
CLK_SARADC0_SEL_SHIFT = 12,
|
||||
CLK_SARADC0_SEL_MASK = 0x1 << CLK_SARADC0_SEL_SHIFT,
|
||||
CLK_SARADC_SEL_200M = 0,
|
||||
CLK_SARADC_SEL_24M,
|
||||
CLK_SARADC2_DIV_SHIFT = 8,
|
||||
CLK_SARADC2_DIV_MASK = 0x7 << CLK_SARADC2_DIV_SHIFT,
|
||||
CLK_SARADC1_DIV_SHIFT = 4,
|
||||
CLK_SARADC1_DIV_MASK = 0x7 << CLK_SARADC1_DIV_SHIFT,
|
||||
CLK_SARADC0_DIV_SHIFT = 0,
|
||||
CLK_SARADC0_DIV_MASK = 0x7 << CLK_SARADC0_DIV_SHIFT,
|
||||
|
||||
/* PMUCRU_CLK_SEL2_CON */
|
||||
CLK_I2C2_SEL_SHIFT = 14,
|
||||
CLK_I2C2_SEL_MASK = 0x3 << CLK_I2C2_SEL_SHIFT,
|
||||
CLK_I2C2_SEL_24M = 0,
|
||||
CLK_I2C2_SEL_RCOSC,
|
||||
CLK_I2C2_SEL_100M,
|
||||
CLK_PWM1_SEL_SHIFT = 8,
|
||||
CLK_PWM1_SEL_MASK = 0x3 << CLK_PWM1_SEL_SHIFT,
|
||||
CLK_PWM1_SEL_24M = 0,
|
||||
CLK_PWM1_SEL_RCOSC,
|
||||
CLK_PWM1_SEL_100M,
|
||||
CLK_PWM1_DIV_SHIFT = 6,
|
||||
CLK_PWM1_DIV_MASK = 0x3 << CLK_PWM1_DIV_SHIFT,
|
||||
|
||||
/* PMUCRU_CLK_SEL3_CON */
|
||||
TCLK_WDT_LPMCU_SEL_SHIFT = 6,
|
||||
TCLK_WDT_LPMCU_SEL_MASK = 0x3 << TCLK_WDT_LPMCU_SEL_SHIFT,
|
||||
TCLK_WDT_LPMCU_SEL_OSC = 0,
|
||||
TCLK_WDT_LPMCU_SEL_RCOSC,
|
||||
TCLK_WDT_LPMCU_SEL_100M,
|
||||
TCLK_WDT_LPMCU_SEL_32K,
|
||||
SCLK_UART0_SEL_SHIFT = 0,
|
||||
SCLK_UART0_SEL_MASK = 0x3 << SCLK_UART0_SEL_SHIFT,
|
||||
SCLK_UART0_SEL_UART0_SRC = 0,
|
||||
SCLK_UART0_SEL_OSC,
|
||||
SCLK_UART0_SEL_RCOSC,
|
||||
|
||||
/* PMU1CRU_CLK_SEL0_CON */
|
||||
SCLK_1X_FSPI1_DIV_SHIFT = 2,
|
||||
SCLK_1X_FSPI1_DIV_MASK = 0x7 << SCLK_1X_FSPI1_DIV_SHIFT,
|
||||
SCLK_1X_FSPI1_SEL_SHIFT = 0,
|
||||
SCLK_1X_FSPI1_SEL_MASK = 0x3 << SCLK_1X_FSPI1_SEL_SHIFT,
|
||||
SCLK_1X_FSPI1_SEL_24M = 0,
|
||||
SCLK_1X_FSPI1_SEL_RCOSC,
|
||||
SCLK_1X_FSPI1_SEL_100M,
|
||||
};
|
||||
#endif
|
||||
@ -0,0 +1,327 @@
|
||||
/*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#ifndef _ASM_ARCH_GRF_RV1126B_H
|
||||
#define _ASM_ARCH_GRF_RV1126B_H
|
||||
|
||||
#include <common.h>
|
||||
|
||||
/* cpu_grf register structure define */
|
||||
struct rv1126b_cpu_grf_reg {
|
||||
uint32_t con0; /* address offset: 0x0000 */
|
||||
uint32_t con1; /* address offset: 0x0004 */
|
||||
uint32_t mem_cfg_uhdspra; /* address offset: 0x0008 */
|
||||
uint32_t status0; /* address offset: 0x000c */
|
||||
uint32_t status1; /* address offset: 0x0010 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_cpu_grf_reg, status1, 0x0010);
|
||||
|
||||
/* ddr_grf register structure define */
|
||||
struct rv1126b_ddr_grf_reg {
|
||||
uint32_t con0; /* address offset: 0x0000 */
|
||||
uint32_t con1; /* address offset: 0x0004 */
|
||||
uint32_t reserved0008[2]; /* address offset: 0x0008 */
|
||||
uint32_t con4; /* address offset: 0x0010 */
|
||||
uint32_t reserved0014[7]; /* address offset: 0x0014 */
|
||||
uint32_t con12; /* address offset: 0x0030 */
|
||||
uint32_t con13; /* address offset: 0x0034 */
|
||||
uint32_t con14; /* address offset: 0x0038 */
|
||||
uint32_t con15; /* address offset: 0x003c */
|
||||
uint32_t con16; /* address offset: 0x0040 */
|
||||
uint32_t con17; /* address offset: 0x0044 */
|
||||
uint32_t con18; /* address offset: 0x0048 */
|
||||
uint32_t reserved004c; /* address offset: 0x004c */
|
||||
uint32_t con20; /* address offset: 0x0050 */
|
||||
uint32_t con21; /* address offset: 0x0054 */
|
||||
uint32_t con22; /* address offset: 0x0058 */
|
||||
uint32_t con23; /* address offset: 0x005c */
|
||||
uint32_t reserved0060[8]; /* address offset: 0x0060 */
|
||||
uint32_t probe_ctrl; /* address offset: 0x0080 */
|
||||
uint32_t reserved0084[31]; /* address offset: 0x0084 */
|
||||
uint32_t status0; /* address offset: 0x0100 */
|
||||
uint32_t status1; /* address offset: 0x0104 */
|
||||
uint32_t status2; /* address offset: 0x0108 */
|
||||
uint32_t status3; /* address offset: 0x010c */
|
||||
uint32_t status4; /* address offset: 0x0110 */
|
||||
uint32_t status5; /* address offset: 0x0114 */
|
||||
uint32_t status6; /* address offset: 0x0118 */
|
||||
uint32_t status7; /* address offset: 0x011c */
|
||||
uint32_t status8; /* address offset: 0x0120 */
|
||||
uint32_t status9; /* address offset: 0x0124 */
|
||||
uint32_t status10; /* address offset: 0x0128 */
|
||||
uint32_t status11; /* address offset: 0x012c */
|
||||
uint32_t status12; /* address offset: 0x0130 */
|
||||
uint32_t status13; /* address offset: 0x0134 */
|
||||
uint32_t status14; /* address offset: 0x0138 */
|
||||
uint32_t status15; /* address offset: 0x013c */
|
||||
uint32_t status16; /* address offset: 0x0140 */
|
||||
uint32_t status17; /* address offset: 0x0144 */
|
||||
uint32_t reserved0148; /* address offset: 0x0148 */
|
||||
uint32_t status19; /* address offset: 0x014c */
|
||||
uint32_t reserved0150[10]; /* address offset: 0x0150 */
|
||||
uint32_t status30; /* address offset: 0x0178 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_ddr_grf_reg, status30, 0x0178);
|
||||
|
||||
/* pmu_grf register structure define */
|
||||
struct rv1126b_pmu_grf_reg {
|
||||
uint32_t soc_con0; /* address offset: 0x0000 */
|
||||
uint32_t soc_con1; /* address offset: 0x0004 */
|
||||
uint32_t soc_con2; /* address offset: 0x0008 */
|
||||
uint32_t soc_con3; /* address offset: 0x000c */
|
||||
uint32_t soc_con4; /* address offset: 0x0010 */
|
||||
uint32_t soc_con5; /* address offset: 0x0014 */
|
||||
uint32_t soc_con6; /* address offset: 0x0018 */
|
||||
uint32_t soc_con7; /* address offset: 0x001c */
|
||||
uint32_t soc_con8; /* address offset: 0x0020 */
|
||||
uint32_t soc_con9; /* address offset: 0x0024 */
|
||||
uint32_t soc_con10; /* address offset: 0x0028 */
|
||||
uint32_t soc_con11; /* address offset: 0x002c */
|
||||
uint32_t soc_con12; /* address offset: 0x0030 */
|
||||
uint32_t soc_con13; /* address offset: 0x0034 */
|
||||
uint32_t soc_con14; /* address offset: 0x0038 */
|
||||
uint32_t soc_con15; /* address offset: 0x003c */
|
||||
uint32_t reserved0040[16]; /* address offset: 0x0040 */
|
||||
uint32_t aad_con0; /* address offset: 0x0080 */
|
||||
uint32_t reserved0084[47]; /* address offset: 0x0084 */
|
||||
uint32_t men_con0; /* address offset: 0x0140 */
|
||||
uint32_t men_con1; /* address offset: 0x0144 */
|
||||
uint32_t men_con2; /* address offset: 0x0148 */
|
||||
uint32_t reserved014c; /* address offset: 0x014c */
|
||||
uint32_t soc_special0; /* address offset: 0x0150 */
|
||||
uint32_t reserved0154[3]; /* address offset: 0x0154 */
|
||||
uint32_t soc_aov_int_con; /* address offset: 0x0160 */
|
||||
uint32_t reserved0164[3]; /* address offset: 0x0164 */
|
||||
uint32_t soc_status0; /* address offset: 0x0170 */
|
||||
uint32_t soc_status1; /* address offset: 0x0174 */
|
||||
uint32_t soc_status2; /* address offset: 0x0178 */
|
||||
uint32_t reserved017c[33]; /* address offset: 0x017c */
|
||||
uint32_t os_reg0; /* address offset: 0x0200 */
|
||||
uint32_t os_reg1; /* address offset: 0x0204 */
|
||||
uint32_t os_reg2; /* address offset: 0x0208 */
|
||||
uint32_t os_reg3; /* address offset: 0x020c */
|
||||
uint32_t os_reg4; /* address offset: 0x0210 */
|
||||
uint32_t os_reg5; /* address offset: 0x0214 */
|
||||
uint32_t os_reg6; /* address offset: 0x0218 */
|
||||
uint32_t os_reg7; /* address offset: 0x021c */
|
||||
uint32_t os_reg8; /* address offset: 0x0220 */
|
||||
uint32_t os_reg9; /* address offset: 0x0224 */
|
||||
uint32_t os_reg10; /* address offset: 0x0228 */
|
||||
uint32_t os_reg11; /* address offset: 0x022c */
|
||||
uint32_t reset_function_status; /* address offset: 0x0230 */
|
||||
uint32_t reset_function_clr; /* address offset: 0x0234 */
|
||||
uint32_t reserved0238[82]; /* address offset: 0x0238 */
|
||||
uint32_t sig_detect_con; /* address offset: 0x0380 */
|
||||
uint32_t reserved0384[3]; /* address offset: 0x0384 */
|
||||
uint32_t sig_detect_status; /* address offset: 0x0390 */
|
||||
uint32_t reserved0394[3]; /* address offset: 0x0394 */
|
||||
uint32_t sig_detect_status_clear; /* address offset: 0x03a0 */
|
||||
uint32_t reserved03a4[3]; /* address offset: 0x03a4 */
|
||||
uint32_t sdmmc_det_counter; /* address offset: 0x03b0 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_pmu_grf_reg, sdmmc_det_counter, 0x03b0);
|
||||
|
||||
/* npu_grf register structure define */
|
||||
struct rv1126b_npu_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t npu_grf_cbuf_mem_soft_gate; /* address offset: 0x0008 */
|
||||
uint32_t npu_grf_cfg_nsp_slv_addr; /* address offset: 0x000c */
|
||||
uint32_t npu_grf_nsp_mem_soft_gate; /* address offset: 0x0010 */
|
||||
uint32_t npu_grf_cfg_use_nsp; /* address offset: 0x0014 */
|
||||
uint32_t npu_grf_shape; /* address offset: 0x0018 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_npu_grf_reg, npu_grf_shape, 0x0018);
|
||||
|
||||
/* peri_grf register structure define */
|
||||
struct rv1126b_peri_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t reserved0008; /* address offset: 0x0008 */
|
||||
uint32_t usb3_grf_con_pending; /* address offset: 0x000c */
|
||||
uint32_t reserved0010; /* address offset: 0x0010 */
|
||||
uint32_t mem_gate_grf_con; /* address offset: 0x0014 */
|
||||
uint32_t hprot_grf_con; /* address offset: 0x0018 */
|
||||
uint32_t usbhostphy_con0; /* address offset: 0x001c */
|
||||
uint32_t usbotgphy_con0; /* address offset: 0x0020 */
|
||||
uint32_t usbotgphy_con1; /* address offset: 0x0024 */
|
||||
uint32_t usbotgphy_con2; /* address offset: 0x0028 */
|
||||
uint32_t usbotgphy_con3; /* address offset: 0x002c */
|
||||
uint32_t host0_con0; /* address offset: 0x0030 */
|
||||
uint32_t host0_con1; /* address offset: 0x0034 */
|
||||
uint32_t usb3otg0_con0; /* address offset: 0x0038 */
|
||||
uint32_t usb3otg0_con1; /* address offset: 0x003c */
|
||||
uint32_t reserved0040[13]; /* address offset: 0x0040 */
|
||||
uint32_t otgphy_int_en; /* address offset: 0x0074 */
|
||||
uint32_t otgphy_int_st; /* address offset: 0x0078 */
|
||||
uint32_t otgphy_int_st_clr; /* address offset: 0x007c */
|
||||
uint32_t otgphy_ls_con; /* address offset: 0x0080 */
|
||||
uint32_t otgphy_dis_con; /* address offset: 0x0084 */
|
||||
uint32_t otgphy_bvalid_con; /* address offset: 0x0088 */
|
||||
uint32_t otgphy_id_con; /* address offset: 0x008c */
|
||||
uint32_t hostphy_int_en; /* address offset: 0x0090 */
|
||||
uint32_t hostphy_int_st; /* address offset: 0x0094 */
|
||||
uint32_t hostphy_int_st_clr; /* address offset: 0x0098 */
|
||||
uint32_t hostphy_ls_con; /* address offset: 0x009c */
|
||||
uint32_t hostphy_dis_con; /* address offset: 0x00a0 */
|
||||
uint32_t hostphy_bvalid_con; /* address offset: 0x00a4 */
|
||||
uint32_t hostphy_id_con; /* address offset: 0x00a8 */
|
||||
uint32_t reserved00ac[21]; /* address offset: 0x00ac */
|
||||
uint32_t usb3otg0_status; /* address offset: 0x0100 */
|
||||
uint32_t usb3otg0_status_cb; /* address offset: 0x0104 */
|
||||
uint32_t usb3otg0_status_lat0; /* address offset: 0x0108 */
|
||||
uint32_t usb3otg0_status_lat1; /* address offset: 0x010c */
|
||||
uint32_t usbphy_st; /* address offset: 0x0110 */
|
||||
uint32_t host0_st; /* address offset: 0x0114 */
|
||||
uint32_t usb3_host_utmi_st; /* address offset: 0x0118 */
|
||||
uint32_t rtc_grf_st; /* address offset: 0x011c */
|
||||
};
|
||||
|
||||
check_member(rv1126b_peri_grf_reg, rtc_grf_st, 0x011c);
|
||||
|
||||
/* usb3_phy_grf register structure define */
|
||||
struct rv1126b_usb3_phy_grf_reg {
|
||||
uint32_t pipe_con0; /* address offset: 0x0000 */
|
||||
uint32_t pipe_con1; /* address offset: 0x0004 */
|
||||
uint32_t pipe_con2; /* address offset: 0x0008 */
|
||||
uint32_t pipe_con3; /* address offset: 0x000c */
|
||||
uint32_t pipe_con4; /* address offset: 0x0010 */
|
||||
uint32_t reserved0014[8]; /* address offset: 0x0014 */
|
||||
uint32_t pipe_status1; /* address offset: 0x0034 */
|
||||
uint32_t reserved0038[18]; /* address offset: 0x0038 */
|
||||
uint32_t lfps_det_con; /* address offset: 0x0080 */
|
||||
uint32_t reserved0084[7]; /* address offset: 0x0084 */
|
||||
uint32_t phy_int_en; /* address offset: 0x00a0 */
|
||||
uint32_t phy_int_status; /* address offset: 0x00a4 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_usb3_phy_grf_reg, phy_int_status, 0x00a4);
|
||||
|
||||
/* sys_grf register structure define */
|
||||
struct rv1126b_sys_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t mem_grf_rom; /* address offset: 0x0008 */
|
||||
uint32_t bus_grf_misc; /* address offset: 0x000c */
|
||||
uint32_t mem_con_gate; /* address offset: 0x0010 */
|
||||
uint32_t bus_grf_hprot_stall; /* address offset: 0x0014 */
|
||||
uint32_t hpmcu_cache_misc; /* address offset: 0x0018 */
|
||||
uint32_t hpmcu_cache_addr_start; /* address offset: 0x001c */
|
||||
uint32_t hpmcu_cache_addr_end; /* address offset: 0x0020 */
|
||||
uint32_t hpmcu_code_addr_start; /* address offset: 0x0024 */
|
||||
uint32_t hpmcu_sram_addr_start; /* address offset: 0x0028 */
|
||||
uint32_t hpmcu_exsram_addr_start; /* address offset: 0x002c */
|
||||
uint32_t biu_con0; /* address offset: 0x0030 */
|
||||
uint32_t biu_con1; /* address offset: 0x0034 */
|
||||
uint32_t uart_grf_rts_cts; /* address offset: 0x0038 */
|
||||
uint32_t uart_grf_dma_bypass; /* address offset: 0x003c */
|
||||
uint32_t audio_con0; /* address offset: 0x0040 */
|
||||
uint32_t reserved0044; /* address offset: 0x0044 */
|
||||
uint32_t audio_con2; /* address offset: 0x0048 */
|
||||
uint32_t otp_con; /* address offset: 0x004c */
|
||||
uint32_t tsadc_grf_con0; /* address offset: 0x0050 */
|
||||
uint32_t tsadc_grf_con1; /* address offset: 0x0054 */
|
||||
uint32_t tsadc_grf_con2; /* address offset: 0x0058 */
|
||||
uint32_t tsadc_grf_con3; /* address offset: 0x005c */
|
||||
uint32_t tsadc_grf_con4; /* address offset: 0x0060 */
|
||||
uint32_t tsadc_grf_con5; /* address offset: 0x0064 */
|
||||
uint32_t tsadc_grf_con6; /* address offset: 0x0068 */
|
||||
uint32_t reserved006c[37]; /* address offset: 0x006c */
|
||||
uint32_t biu_status0; /* address offset: 0x0100 */
|
||||
uint32_t biu_status1; /* address offset: 0x0104 */
|
||||
uint32_t biu_status2; /* address offset: 0x0108 */
|
||||
uint32_t hpmcu_cache_status; /* address offset: 0x010c */
|
||||
uint32_t tsadc_grf_status0; /* address offset: 0x0110 */
|
||||
uint32_t tsadc_grf_status1; /* address offset: 0x0114 */
|
||||
uint32_t sys_status; /* address offset: 0x0118 */
|
||||
uint32_t reserved011c[441]; /* address offset: 0x011c */
|
||||
uint32_t chip_id; /* address offset: 0x0800 */
|
||||
uint32_t chip_version; /* address offset: 0x0804 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_sys_grf_reg, chip_version, 0x0804);
|
||||
|
||||
/* vcp_grf register structure define */
|
||||
struct rv1126b_vcp_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t vcp_grf_aisp_mem_con; /* address offset: 0x0008 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vcp_grf_reg, vcp_grf_aisp_mem_con, 0x0008);
|
||||
|
||||
/* vdo_grf register structure define */
|
||||
struct rv1126b_vdo_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t mem_gate_grf_con; /* address offset: 0x0008 */
|
||||
uint32_t dsi_grf_con; /* address offset: 0x000c */
|
||||
uint32_t dsiphy_grf_con; /* address offset: 0x0010 */
|
||||
uint32_t rkmmu_grf_con; /* address offset: 0x0014 */
|
||||
uint32_t reserved0018[14]; /* address offset: 0x0018 */
|
||||
uint32_t vdo_grf_status0; /* address offset: 0x0050 */
|
||||
uint32_t vdo_grf_status1; /* address offset: 0x0054 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vdo_grf_reg, vdo_grf_status1, 0x0054);
|
||||
|
||||
/* vepu_grf register structure define */
|
||||
struct rv1126b_vepu_grf_reg {
|
||||
uint32_t mem_grf_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_grf_dpra; /* address offset: 0x0004 */
|
||||
uint32_t vepu_grf_con0; /* address offset: 0x0008 */
|
||||
uint32_t saradc0_grf_con0; /* address offset: 0x000c */
|
||||
uint32_t saradc0_grf_con1; /* address offset: 0x0010 */
|
||||
uint32_t saradc0_grf_con2; /* address offset: 0x0014 */
|
||||
uint32_t reserved0018[3]; /* address offset: 0x0018 */
|
||||
uint32_t sdmmc1_det_cnt; /* address offset: 0x0024 */
|
||||
uint32_t sdmmc1_sig_detect_con; /* address offset: 0x0028 */
|
||||
uint32_t sdmmc1_sig_detect_status; /* address offset: 0x002c */
|
||||
uint32_t sdmmc1_status_clr; /* address offset: 0x0030 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vepu_grf_reg, sdmmc1_status_clr, 0x0030);
|
||||
|
||||
/* vi_grf register structure define */
|
||||
struct rv1126b_vi_grf_reg {
|
||||
uint32_t mem_con_spra; /* address offset: 0x0000 */
|
||||
uint32_t mem_con_dpra; /* address offset: 0x0004 */
|
||||
uint32_t vi_grf_status; /* address offset: 0x0008 */
|
||||
uint32_t reserved000c; /* address offset: 0x000c */
|
||||
uint32_t csiphy0_grf_con; /* address offset: 0x0010 */
|
||||
uint32_t csiphy1_grf_con; /* address offset: 0x0014 */
|
||||
uint32_t csiphy0_grf_status; /* address offset: 0x0018 */
|
||||
uint32_t csiphy1_grf_status; /* address offset: 0x001c */
|
||||
uint32_t misc_grf_con; /* address offset: 0x0020 */
|
||||
uint32_t reserved0024[11]; /* address offset: 0x0024 */
|
||||
uint32_t gmac_grf_con0; /* address offset: 0x0050 */
|
||||
uint32_t gmac_dma_ack; /* address offset: 0x0054 */
|
||||
uint32_t reserved0058[2]; /* address offset: 0x0058 */
|
||||
uint32_t gmac_grf_status0; /* address offset: 0x0060 */
|
||||
uint32_t gmac_grf_status1; /* address offset: 0x0064 */
|
||||
uint32_t gmac_grf_status2; /* address offset: 0x0068 */
|
||||
uint32_t reserved006c[5]; /* address offset: 0x006c */
|
||||
uint32_t saradc1_grf_con0; /* address offset: 0x0080 */
|
||||
uint32_t saradc1_grf_con1; /* address offset: 0x0084 */
|
||||
uint32_t saradc1_grf_con2; /* address offset: 0x0088 */
|
||||
uint32_t reserved008c; /* address offset: 0x008c */
|
||||
uint32_t saradc2_grf_con0; /* address offset: 0x0090 */
|
||||
uint32_t saradc2_grf_con1; /* address offset: 0x0094 */
|
||||
uint32_t saradc2_grf_con2; /* address offset: 0x0098 */
|
||||
uint32_t reserved009c[6]; /* address offset: 0x009c */
|
||||
uint32_t rkmacphy_grf_con0; /* address offset: 0x00b4 */
|
||||
uint32_t rkmacphy_grf_con1; /* address offset: 0x00b8 */
|
||||
uint32_t rkmacphy_grf_con2; /* address offset: 0x00bc */
|
||||
uint32_t rkmacphy_grf_status; /* address offset: 0x00c0 */
|
||||
uint32_t rkmacphy_calib_con; /* address offset: 0x00c4 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vi_grf_reg, rkmacphy_calib_con, 0x00c4);
|
||||
|
||||
#endif /* _ASM_ARCH_GRF_RV1126B_H */
|
||||
@ -0,0 +1,457 @@
|
||||
/*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#ifndef _ASM_ARCH_IOC_RV1126B_H
|
||||
#define _ASM_ARCH_IOC_RV1126B_H
|
||||
|
||||
#include <common.h>
|
||||
|
||||
/* pmuio0_ioc register structure define */
|
||||
struct rv1126b_pmuio0_ioc_reg {
|
||||
uint32_t gpio0a_iomux_sel_0; /* address offset: 0x0000 */
|
||||
uint32_t gpio0a_iomux_sel_1; /* address offset: 0x0004 */
|
||||
uint32_t gpio0b_iomux_sel_0; /* address offset: 0x0008 */
|
||||
uint32_t gpio0b_iomux_sel_1; /* address offset: 0x000c */
|
||||
uint32_t reserved0010[60]; /* address offset: 0x0010 */
|
||||
uint32_t gpio0a_ds_0; /* address offset: 0x0100 */
|
||||
uint32_t gpio0a_ds_1; /* address offset: 0x0104 */
|
||||
uint32_t gpio0a_ds_2; /* address offset: 0x0108 */
|
||||
uint32_t gpio0a_ds_3; /* address offset: 0x010c */
|
||||
uint32_t gpio0b_ds_0; /* address offset: 0x0110 */
|
||||
uint32_t gpio0b_ds_1; /* address offset: 0x0114 */
|
||||
uint32_t gpio0b_ds_2; /* address offset: 0x0118 */
|
||||
uint32_t reserved011c[121]; /* address offset: 0x011c */
|
||||
uint32_t gpio0a_pull; /* address offset: 0x0300 */
|
||||
uint32_t gpio0b_pull; /* address offset: 0x0304 */
|
||||
uint32_t reserved0308[62]; /* address offset: 0x0308 */
|
||||
uint32_t gpio0a_ie; /* address offset: 0x0400 */
|
||||
uint32_t gpio0b_ie; /* address offset: 0x0404 */
|
||||
uint32_t reserved0408[62]; /* address offset: 0x0408 */
|
||||
uint32_t gpio0a_smt; /* address offset: 0x0500 */
|
||||
uint32_t gpio0b_smt; /* address offset: 0x0504 */
|
||||
uint32_t reserved0508[62]; /* address offset: 0x0508 */
|
||||
uint32_t gpio0a_sus; /* address offset: 0x0600 */
|
||||
uint32_t gpio0b_sus; /* address offset: 0x0604 */
|
||||
uint32_t reserved0608[62]; /* address offset: 0x0608 */
|
||||
uint32_t gpio0a_sl; /* address offset: 0x0700 */
|
||||
uint32_t gpio0b_sl; /* address offset: 0x0704 */
|
||||
uint32_t reserved0708[62]; /* address offset: 0x0708 */
|
||||
uint32_t gpio0a_od; /* address offset: 0x0800 */
|
||||
uint32_t gpio0b_od; /* address offset: 0x0804 */
|
||||
uint32_t reserved0808[62]; /* address offset: 0x0808 */
|
||||
uint32_t io_vsel; /* address offset: 0x0900 */
|
||||
uint32_t grf_jtag_con0; /* address offset: 0x0904 */
|
||||
uint32_t grf_jtag_con1; /* address offset: 0x0908 */
|
||||
uint32_t reserved090c; /* address offset: 0x090c */
|
||||
uint32_t xin_con; /* address offset: 0x0910 */
|
||||
uint32_t reserved0914[187]; /* address offset: 0x0914 */
|
||||
uint32_t grf_gpio0_filter_con0; /* address offset: 0x0c00 */
|
||||
uint32_t grf_gpio0_filter_con1; /* address offset: 0x0c04 */
|
||||
uint32_t grf_gpio0_filter_con2; /* address offset: 0x0c08 */
|
||||
uint32_t grf_gpio0_filter_con3; /* address offset: 0x0c0c */
|
||||
uint32_t grf_gpio0_filter_con4; /* address offset: 0x0c10 */
|
||||
uint32_t grf_gpio0_filter_con5; /* address offset: 0x0c14 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_pmuio0_ioc_reg, grf_gpio0_filter_con5, 0x0c14);
|
||||
|
||||
/* pmuio1_ioc register structure define */
|
||||
struct rv1126b_pmuio1_ioc_reg {
|
||||
uint32_t reserved0000[4]; /* address offset: 0x0000 */
|
||||
uint32_t gpio0c_iomux_sel_0; /* address offset: 0x0010 */
|
||||
uint32_t gpio0c_iomux_sel_1; /* address offset: 0x0014 */
|
||||
uint32_t gpio0d_iomux_sel_0; /* address offset: 0x0018 */
|
||||
uint32_t reserved001c[65]; /* address offset: 0x001c */
|
||||
uint32_t gpio0c_ds_0; /* address offset: 0x0120 */
|
||||
uint32_t gpio0c_ds_1; /* address offset: 0x0124 */
|
||||
uint32_t gpio0c_ds_2; /* address offset: 0x0128 */
|
||||
uint32_t gpio0c_ds_3; /* address offset: 0x012c */
|
||||
uint32_t gpio0d_ds_0; /* address offset: 0x0130 */
|
||||
uint32_t reserved0134[117]; /* address offset: 0x0134 */
|
||||
uint32_t gpio0c_pull; /* address offset: 0x0308 */
|
||||
uint32_t gpio0d_pull; /* address offset: 0x030c */
|
||||
uint32_t reserved0310[62]; /* address offset: 0x0310 */
|
||||
uint32_t gpio0c_ie; /* address offset: 0x0408 */
|
||||
uint32_t gpio0d_ie; /* address offset: 0x040c */
|
||||
uint32_t reserved0410[62]; /* address offset: 0x0410 */
|
||||
uint32_t gpio0c_smt; /* address offset: 0x0508 */
|
||||
uint32_t gpio0d_smt; /* address offset: 0x050c */
|
||||
uint32_t reserved0510[62]; /* address offset: 0x0510 */
|
||||
uint32_t gpio0c_sus; /* address offset: 0x0608 */
|
||||
uint32_t gpio0d_sus; /* address offset: 0x060c */
|
||||
uint32_t reserved0610[62]; /* address offset: 0x0610 */
|
||||
uint32_t gpio0c_sl; /* address offset: 0x0708 */
|
||||
uint32_t gpio0d_sl; /* address offset: 0x070c */
|
||||
uint32_t reserved0710[62]; /* address offset: 0x0710 */
|
||||
uint32_t gpio0c_od; /* address offset: 0x0808 */
|
||||
uint32_t gpio0d_od; /* address offset: 0x080c */
|
||||
uint32_t reserved0810[60]; /* address offset: 0x0810 */
|
||||
uint32_t io_vsel; /* address offset: 0x0900 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_pmuio1_ioc_reg, io_vsel, 0x0900);
|
||||
|
||||
/* vccio1_ioc register structure define */
|
||||
struct rv1126b_vccio1_ioc_reg {
|
||||
uint32_t reserved0000[8]; /* address offset: 0x0000 */
|
||||
uint32_t gpio1a_iomux_sel_0; /* address offset: 0x0020 */
|
||||
uint32_t gpio1a_iomux_sel_1; /* address offset: 0x0024 */
|
||||
uint32_t gpio1b_iomux_sel_0; /* address offset: 0x0028 */
|
||||
uint32_t gpio1b_iomux_sel_1; /* address offset: 0x002c */
|
||||
uint32_t reserved0030[68]; /* address offset: 0x0030 */
|
||||
uint32_t gpio1a_ds_0; /* address offset: 0x0140 */
|
||||
uint32_t gpio1a_ds_1; /* address offset: 0x0144 */
|
||||
uint32_t gpio1a_ds_2; /* address offset: 0x0148 */
|
||||
uint32_t gpio1a_ds_3; /* address offset: 0x014c */
|
||||
uint32_t gpio1b_ds_0; /* address offset: 0x0150 */
|
||||
uint32_t gpio1b_ds_1; /* address offset: 0x0154 */
|
||||
uint32_t gpio1b_ds_2; /* address offset: 0x0158 */
|
||||
uint32_t gpio1b_ds_3; /* address offset: 0x015c */
|
||||
uint32_t reserved0160[108]; /* address offset: 0x0160 */
|
||||
uint32_t gpio1a_pull; /* address offset: 0x0310 */
|
||||
uint32_t gpio1b_pull; /* address offset: 0x0314 */
|
||||
uint32_t reserved0318[62]; /* address offset: 0x0318 */
|
||||
uint32_t gpio1a_ie; /* address offset: 0x0410 */
|
||||
uint32_t gpio1b_ie; /* address offset: 0x0414 */
|
||||
uint32_t reserved0418[62]; /* address offset: 0x0418 */
|
||||
uint32_t gpio1a_smt; /* address offset: 0x0510 */
|
||||
uint32_t gpio1b_smt; /* address offset: 0x0514 */
|
||||
uint32_t reserved0518[62]; /* address offset: 0x0518 */
|
||||
uint32_t gpio1a_sus; /* address offset: 0x0610 */
|
||||
uint32_t gpio1b_sus; /* address offset: 0x0614 */
|
||||
uint32_t reserved0618[62]; /* address offset: 0x0618 */
|
||||
uint32_t gpio1a_sl; /* address offset: 0x0710 */
|
||||
uint32_t gpio1b_sl; /* address offset: 0x0714 */
|
||||
uint32_t reserved0718[62]; /* address offset: 0x0718 */
|
||||
uint32_t gpio1a_od; /* address offset: 0x0810 */
|
||||
uint32_t gpio1b_od; /* address offset: 0x0814 */
|
||||
uint32_t reserved0818[60]; /* address offset: 0x0818 */
|
||||
uint32_t io1_vsel; /* address offset: 0x0908 */
|
||||
uint32_t reserved090c[61]; /* address offset: 0x090c */
|
||||
uint32_t ioc_misc_con0; /* address offset: 0x0a00 */
|
||||
uint32_t ioc_misc_con1; /* address offset: 0x0a04 */
|
||||
uint32_t ioc_misc_con2; /* address offset: 0x0a08 */
|
||||
uint32_t ioc_misc_con3; /* address offset: 0x0a0c */
|
||||
uint32_t ioc_misc_con4; /* address offset: 0x0a10 */
|
||||
uint32_t ioc_misc_con5; /* address offset: 0x0a14 */
|
||||
uint32_t ioc_misc_con6; /* address offset: 0x0a18 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio1_ioc_reg, ioc_misc_con6, 0x0a18);
|
||||
|
||||
/* vccio2_ioc register structure define */
|
||||
struct rv1126b_vccio2_ioc_reg {
|
||||
uint32_t reserved0000[16]; /* address offset: 0x0000 */
|
||||
uint32_t gpio2a_iomux_sel_0; /* address offset: 0x0040 */
|
||||
uint32_t gpio2a_iomux_sel_1; /* address offset: 0x0044 */
|
||||
uint32_t reserved0048[78]; /* address offset: 0x0048 */
|
||||
uint32_t gpio2a_ds_0; /* address offset: 0x0180 */
|
||||
uint32_t gpio2a_ds_1; /* address offset: 0x0184 */
|
||||
uint32_t gpio2a_ds_2; /* address offset: 0x0188 */
|
||||
uint32_t reserved018c[101]; /* address offset: 0x018c */
|
||||
uint32_t gpio2a_pull; /* address offset: 0x0320 */
|
||||
uint32_t reserved0324[63]; /* address offset: 0x0324 */
|
||||
uint32_t gpio2a_ie; /* address offset: 0x0420 */
|
||||
uint32_t reserved0424[63]; /* address offset: 0x0424 */
|
||||
uint32_t gpio2a_smt; /* address offset: 0x0520 */
|
||||
uint32_t reserved0524[63]; /* address offset: 0x0524 */
|
||||
uint32_t gpio2a_sus; /* address offset: 0x0620 */
|
||||
uint32_t reserved0624[63]; /* address offset: 0x0624 */
|
||||
uint32_t gpio2a_sl; /* address offset: 0x0720 */
|
||||
uint32_t reserved0724[63]; /* address offset: 0x0724 */
|
||||
uint32_t gpio2a_od; /* address offset: 0x0820 */
|
||||
uint32_t reserved0824[58]; /* address offset: 0x0824 */
|
||||
uint32_t io_vsel; /* address offset: 0x090c */
|
||||
uint32_t reserved0910[159]; /* address offset: 0x0910 */
|
||||
uint32_t grf_sddet_dly_con; /* address offset: 0x0b8c */
|
||||
uint32_t grf_jtag_con; /* address offset: 0x0b90 */
|
||||
uint32_t reserved0b94[27]; /* address offset: 0x0b94 */
|
||||
uint32_t grf_gpio2_filter_con0; /* address offset: 0x0c00 */
|
||||
uint32_t grf_gpio2_filter_con1; /* address offset: 0x0c04 */
|
||||
uint32_t grf_gpio2_filter_con2; /* address offset: 0x0c08 */
|
||||
uint32_t grf_gpio2_filter_con3; /* address offset: 0x0c0c */
|
||||
uint32_t grf_gpio2_filter_con4; /* address offset: 0x0c10 */
|
||||
uint32_t grf_gpio2_filter_con5; /* address offset: 0x0c14 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio2_ioc_reg, grf_gpio2_filter_con5, 0x0c14);
|
||||
|
||||
/* vccio3_ioc register structure define */
|
||||
struct rv1126b_vccio3_ioc_reg {
|
||||
uint32_t reserved0000[24]; /* address offset: 0x0000 */
|
||||
uint32_t gpio3a_iomux_sel_0; /* address offset: 0x0060 */
|
||||
uint32_t gpio3a_iomux_sel_1; /* address offset: 0x0064 */
|
||||
uint32_t gpio3b_iomux_sel_0; /* address offset: 0x0068 */
|
||||
uint32_t gpio3b_iomux_sel_1; /* address offset: 0x006c */
|
||||
uint32_t reserved0070[84]; /* address offset: 0x0070 */
|
||||
uint32_t gpio3a_ds_0; /* address offset: 0x01c0 */
|
||||
uint32_t gpio3a_ds_1; /* address offset: 0x01c4 */
|
||||
uint32_t gpio3a_ds_2; /* address offset: 0x01c8 */
|
||||
uint32_t gpio3a_ds_3; /* address offset: 0x01cc */
|
||||
uint32_t gpio3b_ds_0; /* address offset: 0x01d0 */
|
||||
uint32_t gpio3b_ds_1; /* address offset: 0x01d4 */
|
||||
uint32_t gpio3b_ds_2; /* address offset: 0x01d8 */
|
||||
uint32_t gpio3b_ds_3; /* address offset: 0x01dc */
|
||||
uint32_t reserved01e0[84]; /* address offset: 0x01e0 */
|
||||
uint32_t gpio3a_pull; /* address offset: 0x0330 */
|
||||
uint32_t gpio3b_pull; /* address offset: 0x0334 */
|
||||
uint32_t reserved0338[62]; /* address offset: 0x0338 */
|
||||
uint32_t gpio3a_ie; /* address offset: 0x0430 */
|
||||
uint32_t gpio3b_ie; /* address offset: 0x0434 */
|
||||
uint32_t reserved0438[62]; /* address offset: 0x0438 */
|
||||
uint32_t gpio3a_smt; /* address offset: 0x0530 */
|
||||
uint32_t gpio3b_smt; /* address offset: 0x0534 */
|
||||
uint32_t reserved0538[62]; /* address offset: 0x0538 */
|
||||
uint32_t gpio3a_sus; /* address offset: 0x0630 */
|
||||
uint32_t gpio3b_sus; /* address offset: 0x0634 */
|
||||
uint32_t reserved0638[62]; /* address offset: 0x0638 */
|
||||
uint32_t gpio3a_sl; /* address offset: 0x0730 */
|
||||
uint32_t gpio3b_sl; /* address offset: 0x0734 */
|
||||
uint32_t reserved0738[62]; /* address offset: 0x0738 */
|
||||
uint32_t gpio3a_od; /* address offset: 0x0830 */
|
||||
uint32_t gpio3b_od; /* address offset: 0x0834 */
|
||||
uint32_t reserved0838[54]; /* address offset: 0x0838 */
|
||||
uint32_t io3_vsel; /* address offset: 0x0910 */
|
||||
uint32_t reserved0914[59]; /* address offset: 0x0914 */
|
||||
uint32_t ioc_misc_con0; /* address offset: 0x0a00 */
|
||||
uint32_t ioc_misc_con1; /* address offset: 0x0a04 */
|
||||
uint32_t ioc_misc_con2; /* address offset: 0x0a08 */
|
||||
uint32_t ioc_misc_con3; /* address offset: 0x0a0c */
|
||||
uint32_t ioc_misc_con4; /* address offset: 0x0a10 */
|
||||
uint32_t ioc_misc_con5; /* address offset: 0x0a14 */
|
||||
uint32_t ioc_misc_con6; /* address offset: 0x0a18 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio3_ioc_reg, ioc_misc_con6, 0x0a18);
|
||||
|
||||
/* vccio4_ioc register structure define */
|
||||
struct rv1126b_vccio4_ioc_reg {
|
||||
uint32_t reserved0000[32]; /* address offset: 0x0000 */
|
||||
uint32_t gpio4a_iomux_sel_0; /* address offset: 0x0080 */
|
||||
uint32_t gpio4a_iomux_sel_1; /* address offset: 0x0084 */
|
||||
uint32_t gpio4b_iomux_sel_0; /* address offset: 0x0088 */
|
||||
uint32_t reserved008c[93]; /* address offset: 0x008c */
|
||||
uint32_t gpio4a_ds_0; /* address offset: 0x0200 */
|
||||
uint32_t gpio4a_ds_1; /* address offset: 0x0204 */
|
||||
uint32_t gpio4a_ds_2; /* address offset: 0x0208 */
|
||||
uint32_t gpio4a_ds_3; /* address offset: 0x020c */
|
||||
uint32_t gpio4b_ds_0; /* address offset: 0x0210 */
|
||||
uint32_t reserved0214[75]; /* address offset: 0x0214 */
|
||||
uint32_t gpio4a_pull; /* address offset: 0x0340 */
|
||||
uint32_t gpio4b_pull; /* address offset: 0x0344 */
|
||||
uint32_t reserved0348[62]; /* address offset: 0x0348 */
|
||||
uint32_t gpio4a_ie; /* address offset: 0x0440 */
|
||||
uint32_t gpio4b_ie; /* address offset: 0x0444 */
|
||||
uint32_t reserved0448[62]; /* address offset: 0x0448 */
|
||||
uint32_t gpio4a_smt; /* address offset: 0x0540 */
|
||||
uint32_t gpio4b_smt; /* address offset: 0x0544 */
|
||||
uint32_t reserved0548[62]; /* address offset: 0x0548 */
|
||||
uint32_t gpio4a_sus; /* address offset: 0x0640 */
|
||||
uint32_t gpio4b_sus; /* address offset: 0x0644 */
|
||||
uint32_t reserved0648[62]; /* address offset: 0x0648 */
|
||||
uint32_t gpio4a_sl; /* address offset: 0x0740 */
|
||||
uint32_t gpio4b_sl; /* address offset: 0x0744 */
|
||||
uint32_t reserved0748[62]; /* address offset: 0x0748 */
|
||||
uint32_t gpio4a_od; /* address offset: 0x0840 */
|
||||
uint32_t gpio4b_od; /* address offset: 0x0844 */
|
||||
uint32_t reserved0848[51]; /* address offset: 0x0848 */
|
||||
uint32_t io_vsel; /* address offset: 0x0914 */
|
||||
uint32_t reserved0918[194]; /* address offset: 0x0918 */
|
||||
uint32_t grf_gpio4_filter_con0; /* address offset: 0x0c20 */
|
||||
uint32_t grf_gpio4_filter_con1; /* address offset: 0x0c24 */
|
||||
uint32_t grf_gpio4_filter_con2; /* address offset: 0x0c28 */
|
||||
uint32_t grf_gpio4_filter_con3; /* address offset: 0x0c2c */
|
||||
uint32_t grf_gpio4_filter_con4; /* address offset: 0x0c30 */
|
||||
uint32_t grf_gpio4_filter_con5; /* address offset: 0x0c34 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio4_ioc_reg, grf_gpio4_filter_con5, 0x0c34);
|
||||
|
||||
/* vccio5_ioc register structure define */
|
||||
struct rv1126b_vccio5_ioc_reg {
|
||||
uint32_t reserved0000[40]; /* address offset: 0x0000 */
|
||||
uint32_t gpio5a_iomux_sel_0; /* address offset: 0x00a0 */
|
||||
uint32_t gpio5a_iomux_sel_1; /* address offset: 0x00a4 */
|
||||
uint32_t gpio5b_iomux_sel_0; /* address offset: 0x00a8 */
|
||||
uint32_t gpio5b_iomux_sel_1; /* address offset: 0x00ac */
|
||||
uint32_t gpio5c_iomux_sel_0; /* address offset: 0x00b0 */
|
||||
uint32_t gpio5c_iomux_sel_1; /* address offset: 0x00b4 */
|
||||
uint32_t gpio5d_iomux_sel_0; /* address offset: 0x00b8 */
|
||||
uint32_t gpio5d_iomux_sel_1; /* address offset: 0x00bc */
|
||||
uint32_t reserved00c0[96]; /* address offset: 0x00c0 */
|
||||
uint32_t gpio5a_ds_0; /* address offset: 0x0240 */
|
||||
uint32_t gpio5a_ds_1; /* address offset: 0x0244 */
|
||||
uint32_t gpio5a_ds_2; /* address offset: 0x0248 */
|
||||
uint32_t gpio5a_ds_3; /* address offset: 0x024c */
|
||||
uint32_t gpio5b_ds_0; /* address offset: 0x0250 */
|
||||
uint32_t gpio5b_ds_1; /* address offset: 0x0254 */
|
||||
uint32_t gpio5b_ds_2; /* address offset: 0x0258 */
|
||||
uint32_t gpio5b_ds_3; /* address offset: 0x025c */
|
||||
uint32_t gpio5c_ds_0; /* address offset: 0x0260 */
|
||||
uint32_t gpio5c_ds_1; /* address offset: 0x0264 */
|
||||
uint32_t gpio5c_ds_2; /* address offset: 0x0268 */
|
||||
uint32_t gpio5c_ds_3; /* address offset: 0x026c */
|
||||
uint32_t gpio5d_ds_0; /* address offset: 0x0270 */
|
||||
uint32_t gpio5d_ds_1; /* address offset: 0x0274 */
|
||||
uint32_t gpio5d_ds_2; /* address offset: 0x0278 */
|
||||
uint32_t gpio5d_ds_3; /* address offset: 0x027c */
|
||||
uint32_t reserved0280[52]; /* address offset: 0x0280 */
|
||||
uint32_t gpio5a_pull; /* address offset: 0x0350 */
|
||||
uint32_t gpio5b_pull; /* address offset: 0x0354 */
|
||||
uint32_t gpio5c_pull; /* address offset: 0x0358 */
|
||||
uint32_t gpio5d_pull; /* address offset: 0x035c */
|
||||
uint32_t reserved0360[60]; /* address offset: 0x0360 */
|
||||
uint32_t gpio5a_ie; /* address offset: 0x0450 */
|
||||
uint32_t gpio5b_ie; /* address offset: 0x0454 */
|
||||
uint32_t gpio5c_ie; /* address offset: 0x0458 */
|
||||
uint32_t gpio5d_ie; /* address offset: 0x045c */
|
||||
uint32_t reserved0460[60]; /* address offset: 0x0460 */
|
||||
uint32_t gpio5a_smt; /* address offset: 0x0550 */
|
||||
uint32_t gpio5b_smt; /* address offset: 0x0554 */
|
||||
uint32_t gpio5c_smt; /* address offset: 0x0558 */
|
||||
uint32_t gpio5d_smt; /* address offset: 0x055c */
|
||||
uint32_t reserved0560[60]; /* address offset: 0x0560 */
|
||||
uint32_t gpio5a_sus; /* address offset: 0x0650 */
|
||||
uint32_t gpio5b_sus; /* address offset: 0x0654 */
|
||||
uint32_t gpio5c_sus; /* address offset: 0x0658 */
|
||||
uint32_t gpio5d_sus; /* address offset: 0x065c */
|
||||
uint32_t reserved0660[60]; /* address offset: 0x0660 */
|
||||
uint32_t gpio5a_sl; /* address offset: 0x0750 */
|
||||
uint32_t gpio5b_sl; /* address offset: 0x0754 */
|
||||
uint32_t gpio5c_sl; /* address offset: 0x0758 */
|
||||
uint32_t gpio5d_sl; /* address offset: 0x075c */
|
||||
uint32_t reserved0760[60]; /* address offset: 0x0760 */
|
||||
uint32_t gpio5a_od; /* address offset: 0x0850 */
|
||||
uint32_t gpio5b_od; /* address offset: 0x0854 */
|
||||
uint32_t gpio5c_od; /* address offset: 0x0858 */
|
||||
uint32_t gpio5d_od; /* address offset: 0x085c */
|
||||
uint32_t reserved0860[46]; /* address offset: 0x0860 */
|
||||
uint32_t io_vsel; /* address offset: 0x0918 */
|
||||
uint32_t reserved091c[159]; /* address offset: 0x091c */
|
||||
uint32_t grf_vicif_m1_con; /* address offset: 0x0b98 */
|
||||
uint32_t grf_vop_lcdc_con; /* address offset: 0x0b9c */
|
||||
uint32_t reserved0ba0[2]; /* address offset: 0x0ba0 */
|
||||
uint32_t grf_gmacio_m1_con0; /* address offset: 0x0ba8 */
|
||||
uint32_t grf_gmacio_m1_con1; /* address offset: 0x0bac */
|
||||
uint32_t grf_uart0_dly_con; /* address offset: 0x0bb0 */
|
||||
uint32_t grf_uart_jtag_con; /* address offset: 0x0bb4 */
|
||||
uint32_t reserved0bb8[34]; /* address offset: 0x0bb8 */
|
||||
uint32_t grf_gpio5_filter_con0; /* address offset: 0x0c40 */
|
||||
uint32_t grf_gpio5_filter_con1; /* address offset: 0x0c44 */
|
||||
uint32_t grf_gpio5_filter_con2; /* address offset: 0x0c48 */
|
||||
uint32_t grf_gpio5_filter_con3; /* address offset: 0x0c4c */
|
||||
uint32_t grf_gpio5_filter_con4; /* address offset: 0x0c50 */
|
||||
uint32_t grf_gpio5_filter_con5; /* address offset: 0x0c54 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio5_ioc_reg, grf_gpio5_filter_con5, 0x0c54);
|
||||
|
||||
/* vccio6_ioc register structure define */
|
||||
struct rv1126b_vccio6_ioc_reg {
|
||||
uint32_t reserved0000[48]; /* address offset: 0x0000 */
|
||||
uint32_t gpio6a_iomux_sel_0; /* address offset: 0x00c0 */
|
||||
uint32_t gpio6a_iomux_sel_1; /* address offset: 0x00c4 */
|
||||
uint32_t gpio6b_iomux_sel_0; /* address offset: 0x00c8 */
|
||||
uint32_t gpio6b_iomux_sel_1; /* address offset: 0x00cc */
|
||||
uint32_t gpio6c_iomux_sel_0; /* address offset: 0x00d0 */
|
||||
uint32_t reserved00d4[107]; /* address offset: 0x00d4 */
|
||||
uint32_t gpio6a_ds_0; /* address offset: 0x0280 */
|
||||
uint32_t gpio6a_ds_1; /* address offset: 0x0284 */
|
||||
uint32_t gpio6a_ds_2; /* address offset: 0x0288 */
|
||||
uint32_t gpio6a_ds_3; /* address offset: 0x028c */
|
||||
uint32_t gpio6b_ds_0; /* address offset: 0x0290 */
|
||||
uint32_t gpio6b_ds_1; /* address offset: 0x0294 */
|
||||
uint32_t gpio6b_ds_2; /* address offset: 0x0298 */
|
||||
uint32_t gpio6b_ds_3; /* address offset: 0x029c */
|
||||
uint32_t gpio6c_ds_0; /* address offset: 0x02a0 */
|
||||
uint32_t gpio6c_ds_1; /* address offset: 0x02a4 */
|
||||
uint32_t reserved02a8[46]; /* address offset: 0x02a8 */
|
||||
uint32_t gpio6a_pull; /* address offset: 0x0360 */
|
||||
uint32_t gpio6b_pull; /* address offset: 0x0364 */
|
||||
uint32_t gpio6c_pull; /* address offset: 0x0368 */
|
||||
uint32_t reserved036c[61]; /* address offset: 0x036c */
|
||||
uint32_t gpio6a_ie; /* address offset: 0x0460 */
|
||||
uint32_t gpio6b_ie; /* address offset: 0x0464 */
|
||||
uint32_t gpio6c_ie; /* address offset: 0x0468 */
|
||||
uint32_t reserved046c[61]; /* address offset: 0x046c */
|
||||
uint32_t gpio6a_smt; /* address offset: 0x0560 */
|
||||
uint32_t gpio6b_smt; /* address offset: 0x0564 */
|
||||
uint32_t gpio6c_smt; /* address offset: 0x0568 */
|
||||
uint32_t reserved056c[61]; /* address offset: 0x056c */
|
||||
uint32_t gpio6a_sus; /* address offset: 0x0660 */
|
||||
uint32_t gpio6b_sus; /* address offset: 0x0664 */
|
||||
uint32_t gpio6c_sus; /* address offset: 0x0668 */
|
||||
uint32_t reserved066c[61]; /* address offset: 0x066c */
|
||||
uint32_t gpio6a_sl; /* address offset: 0x0760 */
|
||||
uint32_t gpio6b_sl; /* address offset: 0x0764 */
|
||||
uint32_t gpio6c_sl; /* address offset: 0x0768 */
|
||||
uint32_t reserved076c[61]; /* address offset: 0x076c */
|
||||
uint32_t gpio6a_od; /* address offset: 0x0860 */
|
||||
uint32_t gpio6b_od; /* address offset: 0x0864 */
|
||||
uint32_t gpio6c_od; /* address offset: 0x0868 */
|
||||
uint32_t reserved086c[44]; /* address offset: 0x086c */
|
||||
uint32_t io_vsel; /* address offset: 0x091c */
|
||||
uint32_t reserved0920[157]; /* address offset: 0x0920 */
|
||||
uint32_t grf_vicif_m0_con; /* address offset: 0x0b94 */
|
||||
uint32_t reserved0b98[2]; /* address offset: 0x0b98 */
|
||||
uint32_t grf_gmacio_m0_con0; /* address offset: 0x0ba0 */
|
||||
uint32_t grf_gmacio_m0_con1; /* address offset: 0x0ba4 */
|
||||
uint32_t reserved0ba8[46]; /* address offset: 0x0ba8 */
|
||||
uint32_t grf_gpio6_filter_con0; /* address offset: 0x0c60 */
|
||||
uint32_t grf_gpio6_filter_con1; /* address offset: 0x0c64 */
|
||||
uint32_t grf_gpio6_filter_con2; /* address offset: 0x0c68 */
|
||||
uint32_t grf_gpio6_filter_con3; /* address offset: 0x0c6c */
|
||||
uint32_t grf_gpio6_filter_con4; /* address offset: 0x0c70 */
|
||||
uint32_t grf_gpio6_filter_con5; /* address offset: 0x0c74 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio6_ioc_reg, grf_gpio6_filter_con5, 0x0c74);
|
||||
|
||||
/* vccio7_ioc register structure define */
|
||||
struct rv1126b_vccio7_ioc_reg {
|
||||
uint32_t reserved0000[56]; /* address offset: 0x0000 */
|
||||
uint32_t gpio7a_iomux_sel_0; /* address offset: 0x00e0 */
|
||||
uint32_t gpio7a_iomux_sel_1; /* address offset: 0x00e4 */
|
||||
uint32_t gpio7b_iomux_sel_0; /* address offset: 0x00e8 */
|
||||
uint32_t reserved00ec[117]; /* address offset: 0x00ec */
|
||||
uint32_t gpio7a_ds_0; /* address offset: 0x02c0 */
|
||||
uint32_t gpio7a_ds_1; /* address offset: 0x02c4 */
|
||||
uint32_t gpio7a_ds_2; /* address offset: 0x02c8 */
|
||||
uint32_t gpio7a_ds_3; /* address offset: 0x02cc */
|
||||
uint32_t gpio7b_ds_0; /* address offset: 0x02d0 */
|
||||
uint32_t reserved02d4[39]; /* address offset: 0x02d4 */
|
||||
uint32_t gpio7a_pull; /* address offset: 0x0370 */
|
||||
uint32_t gpio7b_pull; /* address offset: 0x0374 */
|
||||
uint32_t reserved0378[62]; /* address offset: 0x0378 */
|
||||
uint32_t gpio7a_ie; /* address offset: 0x0470 */
|
||||
uint32_t gpio7b_ie; /* address offset: 0x0474 */
|
||||
uint32_t reserved0478[62]; /* address offset: 0x0478 */
|
||||
uint32_t gpio7a_smt; /* address offset: 0x0570 */
|
||||
uint32_t gpio7b_smt; /* address offset: 0x0574 */
|
||||
uint32_t reserved0578[62]; /* address offset: 0x0578 */
|
||||
uint32_t gpio7a_sus; /* address offset: 0x0670 */
|
||||
uint32_t gpio7b_sus; /* address offset: 0x0674 */
|
||||
uint32_t reserved0678[62]; /* address offset: 0x0678 */
|
||||
uint32_t gpio7a_sl; /* address offset: 0x0770 */
|
||||
uint32_t gpio7b_sl; /* address offset: 0x0774 */
|
||||
uint32_t reserved0778[62]; /* address offset: 0x0778 */
|
||||
uint32_t gpio7a_od; /* address offset: 0x0870 */
|
||||
uint32_t gpio7b_od; /* address offset: 0x0874 */
|
||||
uint32_t reserved0878[42]; /* address offset: 0x0878 */
|
||||
uint32_t io_vsel; /* address offset: 0x0920 */
|
||||
uint32_t reserved0924[215]; /* address offset: 0x0924 */
|
||||
uint32_t grf_gpio7_filter_con0; /* address offset: 0x0c80 */
|
||||
uint32_t grf_gpio7_filter_con1; /* address offset: 0x0c84 */
|
||||
uint32_t grf_gpio7_filter_con2; /* address offset: 0x0c88 */
|
||||
uint32_t grf_gpio7_filter_con3; /* address offset: 0x0c8c */
|
||||
uint32_t grf_gpio7_filter_con4; /* address offset: 0x0c90 */
|
||||
uint32_t grf_gpio7_filter_con5; /* address offset: 0x0c94 */
|
||||
uint32_t reserved0c98[2]; /* address offset: 0x0c98 */
|
||||
uint32_t grf_dsm_ioc_con; /* address offset: 0x0ca0 */
|
||||
};
|
||||
|
||||
check_member(rv1126b_vccio7_ioc_reg, grf_dsm_ioc_con, 0x0ca0);
|
||||
|
||||
#endif /* _ASM_ARCH_GRF_RV1126B_H */
|
||||
@ -0,0 +1,17 @@
|
||||
if ROCKCHIP_RV1126B
|
||||
|
||||
config TARGET_EVB_RV1126B
|
||||
bool "EVB_RV1126B"
|
||||
select BOARD_LATE_INIT
|
||||
help
|
||||
RV1126B EVB is a evaluation board for Rockchp RV1126B.
|
||||
|
||||
config SYS_SOC
|
||||
default "rockchip"
|
||||
|
||||
config SYS_MALLOC_F_LEN
|
||||
default 0x400
|
||||
|
||||
source board/rockchip/evb_rv1126b/Kconfig
|
||||
|
||||
endif
|
||||
@ -0,0 +1,11 @@
|
||||
#
|
||||
# (C) Copyright 2025 Rockchip Electronics Co., Ltd
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
ifneq ($(CONFIG_TPL_BUILD)$(CONFIG_TPL_TINY_FRAMEWORK),yy)
|
||||
obj-y += syscon_rv1126b.o
|
||||
endif
|
||||
obj-y += rv1126b.o
|
||||
obj-y += clk_rv1126b.o
|
||||
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <syscon.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/cru_rv1126b.h>
|
||||
|
||||
int rockchip_get_clk(struct udevice **devp)
|
||||
{
|
||||
return uclass_get_device_by_driver(UCLASS_CLK,
|
||||
DM_GET_DRIVER(rockchip_rv1126b_cru), devp);
|
||||
}
|
||||
|
||||
#if CONFIG_IS_ENABLED(CLK_SCMI)
|
||||
int rockchip_get_scmi_clk(struct udevice **devp)
|
||||
{
|
||||
return uclass_get_device_by_driver(UCLASS_CLK,
|
||||
DM_GET_DRIVER(scmi_clock), devp);
|
||||
}
|
||||
#endif
|
||||
|
||||
void *rockchip_get_cru(void)
|
||||
{
|
||||
struct rv1126b_clk_priv *priv;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
ret = rockchip_get_clk(&dev);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
priv = dev_get_priv(dev);
|
||||
|
||||
return priv->cru;
|
||||
}
|
||||
|
||||
@ -0,0 +1,360 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <misc.h>
|
||||
#include <mmc.h>
|
||||
#include <spl.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/grf_rv1126b.h>
|
||||
#include <asm/arch/ioc_rv1126b.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/* CRU */
|
||||
#define CRU_BUS_BASE 0x20010000
|
||||
#define CRU_BUS_GATE_CON06 0x818
|
||||
#define CRU_BUS_SOFTRST_CON01 0x0a04
|
||||
#define CRU_PMU_BASE 0x20040000
|
||||
#define CRU_PMU_SOFTRST_CON03 0x0a0c
|
||||
#define PERI_CRU_BASE 0x20020000
|
||||
#define PERICRU_PERI_SOFTRST_CON01 0x0a04
|
||||
|
||||
/* GRF */
|
||||
#define SYS_GRF_BASE 0x20100000
|
||||
#define TSADC_GRF_CON0 0x50
|
||||
#define TSADC_GRF_CON1 0x54
|
||||
#define TSADC_GRF_CON6 0x68
|
||||
#define GRF_JTAG_CON0 0x904
|
||||
|
||||
#define PERI_GRF_BASE 0x20110000
|
||||
#define PERI_GRF_USB2HOSTPHY_CON0 0x001c
|
||||
#define PERI_GRF_USB3DRD_CON1 0x003C
|
||||
|
||||
#define VI_GRF_BASE 0x20150000
|
||||
#define SARADC1_GRF_CON0 0x80
|
||||
#define SARADC2_GRF_CON0 0x90
|
||||
|
||||
#define VEPU_GRF_BASE 0x20160000
|
||||
#define SARADC0_GRF_CON0 0x0C
|
||||
|
||||
/* PMU */
|
||||
#define PMU_GRF_BASE 0x20130000
|
||||
#define PMU_GRF_SOC_CON0 0x0000
|
||||
#define PMU2_BASE 0x20838000
|
||||
#define PMU2_PWR_GATE_SFTCON0 0x0210
|
||||
|
||||
/* GPIO/IOC */
|
||||
#define GPIO0_BASE 0x20600000
|
||||
#define GPIO_SWPORT_DR_L 0x00
|
||||
#define GPIO_SWPORT_DDR_L 0x08
|
||||
|
||||
#define PMUIO0_IOC_BASE 0x201a0000
|
||||
#define GPIO0A_IOMUX_SEL_L 0x0
|
||||
#define GPIO0A_IOMUX_SEL_H 0x4
|
||||
#define GPIO0B_IOMUX_SEL_L 0x8
|
||||
|
||||
#define VCCIO1_IOC_BASE 0x201b0000
|
||||
#define GPIO1A_IOMUX_SEL_L 0x20
|
||||
#define GPIO1A_IOMUX_SEL_H 0x24
|
||||
#define GPIO1B_IOMUX_SEL_L 0x28
|
||||
#define GPIO1B_IOMUX_SEL_H 0x2c
|
||||
|
||||
#define VCCIO2_IOC_BASE 0x201b8000
|
||||
#define GPIO2A_IOMUX_SEL_L 0x40
|
||||
#define GPIO2A_IOMUX_SEL_H 0x44
|
||||
#define GPIO2A_PULL 0x320
|
||||
|
||||
#define VCCIO3_IOC_BASE 0x201c0000
|
||||
#define GPIO3A_IOMUX_SEL_L 0x60
|
||||
#define GPIO3A_IOMUX_SEL_H 0x64
|
||||
#define GPIO3B_IOMUX_SEL_H 0x6c
|
||||
#define GPIO3A_PULL 0x330
|
||||
|
||||
/* SGRF/FIREWALL */
|
||||
#define SGRF_SYS_BASE 0x20220000
|
||||
#define SGRF_HPMCU_BOOT_ADDR 0x0c
|
||||
#define SGRF_SYS_AHB_SECURE_SGRF_CON 0x14
|
||||
#define SGRF_SYS_AXI_SECURE_SGRF_CON0 0x18
|
||||
#define FIREWALL_SLV_CON0 0x20
|
||||
#define FIREWALL_SLV_CON1 0x24
|
||||
#define FIREWALL_SLV_CON2 0x28
|
||||
#define FIREWALL_SLV_CON3 0x2c
|
||||
#define FIREWALL_SLV_CON4 0x30
|
||||
#define FIREWALL_SLV_CON5 0x34
|
||||
#define OTP_SGRF_CON 0x1c
|
||||
|
||||
#define SGRF_PMU_BASE 0x20230000
|
||||
#define SGRF_PMU_SOC_CON0 0x00
|
||||
#define SGRF_LPMCU_BOOT_ADDR 0x20
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
#include <asm/armv8/mmu.h>
|
||||
|
||||
static struct mm_region rv1126b_mem_map[] = {
|
||||
{
|
||||
.virt = 0x20000000UL,
|
||||
.phys = 0x20000000UL,
|
||||
.size = 0x2800000UL,
|
||||
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE |
|
||||
PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
}, {
|
||||
.virt = 0x3ff1e000UL,
|
||||
.phys = 0x3ff1e000UL,
|
||||
.size = 0xe2000UL,
|
||||
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE |
|
||||
PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
}, {
|
||||
.virt = 0x40000000UL,
|
||||
.phys = 0x40000000UL,
|
||||
.size = 0x100000000UL - 0x40000000UL,
|
||||
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
|
||||
PTE_BLOCK_INNER_SHARE
|
||||
}, {
|
||||
/* List terminator */
|
||||
0,
|
||||
}
|
||||
};
|
||||
|
||||
struct mm_region *mem_map = rv1126b_mem_map;
|
||||
#endif
|
||||
|
||||
void board_debug_uart_init(void)
|
||||
{
|
||||
/* No need to change uart in most time. */
|
||||
}
|
||||
|
||||
void board_set_iomux(enum if_type if_type, int devnum, int routing)
|
||||
{
|
||||
switch (if_type) {
|
||||
case IF_TYPE_MMC:
|
||||
if (devnum == 0) {
|
||||
writel(0xffff1111, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_L);
|
||||
writel(0xffff1111, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_H);
|
||||
writel(0xf0f01010, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
} else if (devnum == 1) {
|
||||
#if CONFIG_SPL_BUILD
|
||||
/* set SDMMC D0-3/CMD/CLK to gpio and pull down */
|
||||
writel(0xffff0000, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_L);
|
||||
writel(0x00ff0000, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_H);
|
||||
writel(0x00f00000, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_H);
|
||||
writel(0x0fff0aaa, VCCIO2_IOC_BASE + GPIO2A_PULL);
|
||||
|
||||
/* SDMMC PWREN GPIO0A4 power down and power up */
|
||||
writel(0x01000100, GPIO0_BASE + GPIO_SWPORT_DR_L);
|
||||
writel(0x01000100, GPIO0_BASE + GPIO_SWPORT_DDR_L);
|
||||
mdelay(50);
|
||||
writel(0x01000000, GPIO0_BASE + GPIO_SWPORT_DR_L);
|
||||
#endif
|
||||
/* set SDMMC D0-3/CMD/CLK and pull up */
|
||||
writel(0xffff1111, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_L);
|
||||
writel(0x00ff0011, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_H);
|
||||
writel(0x00f00010, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_H);
|
||||
writel(0x0fff0555, VCCIO2_IOC_BASE + GPIO2A_PULL);
|
||||
} else if (devnum == 2) {
|
||||
writel(0xffff1111, VCCIO3_IOC_BASE + GPIO3A_IOMUX_SEL_L);
|
||||
writel(0x00ff0011, VCCIO3_IOC_BASE + GPIO3A_IOMUX_SEL_H);
|
||||
writel(0x0f000300, VCCIO3_IOC_BASE + GPIO3B_IOMUX_SEL_H);
|
||||
/* Pull up */
|
||||
writel(0x0ffc0554, VCCIO2_IOC_BASE + GPIO3A_PULL);
|
||||
}
|
||||
break;
|
||||
case IF_TYPE_MTD:
|
||||
if (routing == 0) {
|
||||
/* FSPI0 M0 */
|
||||
writel(0x0f0f0101, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
writel(0xffff1111, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_H);
|
||||
writel(0x00f00020, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_H);
|
||||
} else if (routing == 1) {
|
||||
/* FSPI1 M0 */
|
||||
writel(0x0fff0111, PMUIO0_IOC_BASE + GPIO0B_IOMUX_SEL_L);
|
||||
writel(0xff001100, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_H);
|
||||
writel(0x00f00010, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_L);
|
||||
} else if (routing == 2) {
|
||||
/* FSPI1 M1 */
|
||||
writel(0xffff2222, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_L);
|
||||
writel(0xf0f02020, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Bootdev 0x%x is not support\n", if_type);
|
||||
}
|
||||
}
|
||||
|
||||
void board_unset_iomux(enum if_type if_type, int devnum, int routing)
|
||||
{
|
||||
switch (if_type) {
|
||||
case IF_TYPE_MMC:
|
||||
if (devnum == 0) {
|
||||
writel(0xffff0000, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_L);
|
||||
writel(0xffff0000, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_H);
|
||||
writel(0xf0f00000, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
} else if (devnum == 1) {
|
||||
/* SDMMC0_D2,D3 -> JTAG_TMS_M1, JTAG_TCK_M1 */
|
||||
writel(0xffff4400, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_L);
|
||||
/* Other SDMMC0 PINS -> GPIO */
|
||||
writel(0x00ff0000, VCCIO2_IOC_BASE + GPIO2A_IOMUX_SEL_H);
|
||||
writel(0x00f00000, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_H);
|
||||
/* Pull down */
|
||||
writel(0x0fff0aaa, VCCIO2_IOC_BASE + GPIO2A_PULL);
|
||||
} else if (devnum == 2) {
|
||||
writel(0xffff0000, VCCIO3_IOC_BASE + GPIO3A_IOMUX_SEL_L);
|
||||
writel(0x00ff0000, VCCIO3_IOC_BASE + GPIO3A_IOMUX_SEL_H);
|
||||
writel(0x0f000000, VCCIO3_IOC_BASE + GPIO3B_IOMUX_SEL_H);
|
||||
/* Pull down */
|
||||
writel(0x0ffc0000, VCCIO2_IOC_BASE + GPIO3A_PULL);
|
||||
}
|
||||
break;
|
||||
case IF_TYPE_MTD:
|
||||
if (routing == 0) {
|
||||
/* FSPI0 M0 */
|
||||
writel(0x0f0f0000, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
writel(0xffff0000, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_H);
|
||||
writel(0x00f00000, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_H);
|
||||
} else if (routing == 1) {
|
||||
/* FSPI1 M0 */
|
||||
writel(0x0fff0000, PMUIO0_IOC_BASE + GPIO0B_IOMUX_SEL_L);
|
||||
writel(0xff000000, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_H);
|
||||
writel(0x00f00000, PMUIO0_IOC_BASE + GPIO0A_IOMUX_SEL_L);
|
||||
} else if (routing == 2) {
|
||||
/* FSPI1 M1 */
|
||||
writel(0xffff0000, VCCIO1_IOC_BASE + GPIO1A_IOMUX_SEL_L);
|
||||
writel(0xf0f00000, VCCIO1_IOC_BASE + GPIO1B_IOMUX_SEL_L);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
void rockchip_stimer_init(void)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
/* If Timer already enabled, don't re-init it */
|
||||
reg = readl(CONFIG_ROCKCHIP_STIMER_BASE + 0x4);
|
||||
if (reg & 0x1)
|
||||
return;
|
||||
#ifdef COUNTER_FREQUENCY
|
||||
asm volatile("msr CNTFRQ_EL0, %0" : : "r" (COUNTER_FREQUENCY));
|
||||
#endif
|
||||
writel(0xffffffff, CONFIG_ROCKCHIP_STIMER_BASE + 0x14);
|
||||
writel(0xffffffff, CONFIG_ROCKCHIP_STIMER_BASE + 0x18);
|
||||
writel(0x00010001, CONFIG_ROCKCHIP_STIMER_BASE + 0x04);
|
||||
}
|
||||
|
||||
void spl_board_storages_fixup(struct spl_image_loader *loader)
|
||||
{
|
||||
if (!loader)
|
||||
return;
|
||||
|
||||
if (loader->boot_device == BOOT_DEVICE_MMC2)
|
||||
/* Unset the sdmmc0 iomux */
|
||||
board_unset_iomux(IF_TYPE_MMC, 1, 0);
|
||||
}
|
||||
|
||||
int spl_fit_standalone_release(char *id, uintptr_t entry_point)
|
||||
{
|
||||
if (!strcmp(id, "mcu0")) {
|
||||
writel(0x1e001e0, CRU_BUS_BASE + CRU_BUS_SOFTRST_CON01);
|
||||
writel(entry_point, SGRF_SYS_BASE + SGRF_HPMCU_BOOT_ADDR);
|
||||
writel(0x1 << 20, SGRF_SYS_BASE + SGRF_SYS_AHB_SECURE_SGRF_CON);
|
||||
writel(0x1e00000, CRU_BUS_BASE + CRU_BUS_SOFTRST_CON01);
|
||||
} else if (!strcmp(id, "mcu1")) {
|
||||
writel(0x1c001c, CRU_PMU_BASE + CRU_PMU_SOFTRST_CON03);
|
||||
writel(entry_point, SGRF_PMU_BASE + SGRF_LPMCU_BOOT_ADDR);
|
||||
writel(0x1 << 23, SGRF_PMU_BASE + SGRF_PMU_SOC_CON0);
|
||||
writel(0x1c0000, CRU_PMU_BASE + CRU_PMU_SOFTRST_CON03);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_TPL_BUILD
|
||||
int arch_cpu_init(void)
|
||||
{
|
||||
#if defined(CONFIG_SPL_BUILD) || defined(CONFIG_SUPPORT_USBPLUG)
|
||||
/* Enable npu pd */
|
||||
writel(0x00010000, PMU2_BASE + PMU2_PWR_GATE_SFTCON0);
|
||||
/* Set emmc master secure */
|
||||
writel(0x10000, SGRF_SYS_BASE + SGRF_SYS_AHB_SECURE_SGRF_CON);
|
||||
/* Set fspi master secure */
|
||||
writel(0x20000, SGRF_SYS_BASE + SGRF_SYS_AHB_SECURE_SGRF_CON);
|
||||
/* Set sdmmc0 master secure */
|
||||
writel(0x40000, SGRF_SYS_BASE + SGRF_SYS_AHB_SECURE_SGRF_CON);
|
||||
/* Set sdmmc1 master secure */
|
||||
writel(0x80000, SGRF_SYS_BASE + SGRF_SYS_AHB_SECURE_SGRF_CON);
|
||||
/* Set rkce master secure */
|
||||
writel(0x80030000, SGRF_SYS_BASE + SGRF_SYS_AXI_SECURE_SGRF_CON0);
|
||||
/* Set decom master secure */
|
||||
writel(0xC00000, SGRF_SYS_BASE + SGRF_SYS_AXI_SECURE_SGRF_CON0);
|
||||
|
||||
/* Set all devices slave non-secure */
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON0);
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON1);
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON2);
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON3);
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON4);
|
||||
writel(0xffff0000, SGRF_SYS_BASE + FIREWALL_SLV_CON5);
|
||||
/* Set OTP to none secure mode */
|
||||
writel(0x00020000, SGRF_SYS_BASE + OTP_SGRF_CON);
|
||||
|
||||
/* Set usb3phy clamp enable */
|
||||
writel(0x40000000, PMU_GRF_BASE + PMU_GRF_SOC_CON0);
|
||||
|
||||
/* Assert the pipe phy reset and de-assert when in use */
|
||||
writel(0x00800080, PERI_CRU_BASE + PERICRU_PERI_SOFTRST_CON01);
|
||||
|
||||
/* Restore pipe phy status to default from phy */
|
||||
writel(0xffff1100, PERI_GRF_BASE + PERI_GRF_USB3DRD_CON1);
|
||||
|
||||
/* Set the USB 2.0 PHY Port1 to enter the sleep mode to save power consumption */
|
||||
writel(0x01ff01d1, PERI_GRF_BASE + PERI_GRF_USB2HOSTPHY_CON0);
|
||||
|
||||
/* Enable tsadc phy */
|
||||
writel(0x01000000, CRU_BUS_BASE + CRU_BUS_GATE_CON06);
|
||||
writel(0x80788028, SYS_GRF_BASE + TSADC_GRF_CON0);
|
||||
writel(0xff000300, SYS_GRF_BASE + TSADC_GRF_CON6);
|
||||
writel(0x00ff00a5, SYS_GRF_BASE + TSADC_GRF_CON1);
|
||||
writel(0x01000100, SYS_GRF_BASE + TSADC_GRF_CON1);
|
||||
writel(0x01000000, SYS_GRF_BASE + TSADC_GRF_CON1);
|
||||
|
||||
/* set saradc ibp to 7 */
|
||||
writel(0x00700070, VEPU_GRF_BASE + SARADC0_GRF_CON0);
|
||||
writel(0x00700070, VI_GRF_BASE + SARADC1_GRF_CON0);
|
||||
writel(0x00700070, VI_GRF_BASE + SARADC2_GRF_CON0);
|
||||
|
||||
#if defined(CONFIG_ROCKCHIP_EMMC_IOMUX)
|
||||
board_set_iomux(IF_TYPE_MMC, 0, 0);
|
||||
#elif defined(CONFIG_ROCKCHIP_SFC_IOMUX)
|
||||
/*
|
||||
* (IF_TYPE_MTD, 0, 0) FSPI0
|
||||
* (IF_TYPE_MTD, 1, 0) FSPI1 M0
|
||||
* (IF_TYPE_MTD, 2, 0) FSPI1 M1
|
||||
*/
|
||||
board_set_iomux(IF_TYPE_MTD, 0, 0);
|
||||
#endif /* CONFIG_ROCKCHIP_EMMC_IOMUX */
|
||||
|
||||
#if defined(CONFIG_MMC_DW_ROCKCHIP)
|
||||
/* Set the sdmmc iomux and power cycle */
|
||||
board_set_iomux(IF_TYPE_MMC, 1, 0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ROCKCHIP_EMMC_IOMUX) && defined(CONFIG_ROCKCHIP_SFC_IOMUX)
|
||||
#error FSPI0 M0 and eMMC iomux is incompatible for rv1126b Soc. You should close one of them.
|
||||
#endif
|
||||
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <syscon.h>
|
||||
#include <asm/arch/clock.h>
|
||||
|
||||
static const struct udevice_id rv1126b_syscon_ids[] = {
|
||||
{ .compatible = "rockchip,rv1126b-grf", .data = ROCKCHIP_SYSCON_GRF },
|
||||
{ .compatible = "rockchip,rv1126b-ioc-grf", .data = ROCKCHIP_SYSCON_IOC },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(syscon_rv1126b) = {
|
||||
.name = "rv1126b_syscon",
|
||||
.id = UCLASS_SYSCON,
|
||||
.of_match = rv1126b_syscon_ids,
|
||||
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
|
||||
.bind = dm_scan_fdt_dev,
|
||||
#endif
|
||||
};
|
||||
@ -0,0 +1,15 @@
|
||||
if TARGET_EVB_RV1126B
|
||||
|
||||
config SYS_BOARD
|
||||
default "evb_rv1126b"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "rockchip"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "evb_rv1126b"
|
||||
|
||||
config BOARD_SPECIFIC_OPTIONS # dummy
|
||||
def_bool y
|
||||
|
||||
endif
|
||||
@ -0,0 +1,7 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Copyright (c) 2025 Rockchip Electronics Co., Ltd
|
||||
#
|
||||
|
||||
obj-y += evb_rv1126b.o
|
||||
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
* (C) Copyright 2025 Rockchip Electronics Co., Ltd
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dwc3-uboot.h>
|
||||
#include <usb.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_USB_DWC3
|
||||
static struct dwc3_device dwc3_device_data = {
|
||||
.maximum_speed = USB_SPEED_HIGH,
|
||||
.base = 0x21500000,
|
||||
.dr_mode = USB_DR_MODE_PERIPHERAL,
|
||||
.index = 0,
|
||||
.dis_u2_susphy_quirk = 1,
|
||||
.usb2_phyif_utmi_width = 16,
|
||||
};
|
||||
|
||||
int usb_gadget_handle_interrupts(void)
|
||||
{
|
||||
dwc3_uboot_handle_interrupt(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_usb_init(int index, enum usb_init_type init)
|
||||
{
|
||||
return dwc3_uboot_init(&dwc3_device_data);
|
||||
}
|
||||
#endif
|
||||
@ -0,0 +1,139 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||
CONFIG_ROCKCHIP_PX30=y
|
||||
CONFIG_ROCKCHIP_RK3358=y
|
||||
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py"
|
||||
CONFIG_ROCKCHIP_SPL_RESERVE_IRAM=0x0
|
||||
CONFIG_ROCKCHIP_VENDOR_PARTITION=y
|
||||
CONFIG_UBOOT_SIZE_KB=2048
|
||||
CONFIG_UBOOT_NUM=2
|
||||
CONFIG_TRUST_RSA_MODE=3
|
||||
CONFIG_TARGET_EVB_PX30=y
|
||||
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||
CONFIG_SPL_STACK_R_ADDR=0x600000
|
||||
CONFIG_DEFAULT_DEVICE_TREE="px30-evb"
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_TPL_SYS_MALLOC_F_LEN=0x600
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_BOOTDELAY=0
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_ANDROID_BOOTLOADER=y
|
||||
CONFIG_SPL_STACK_R=y
|
||||
CONFIG_SPL_ATF=y
|
||||
CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x800800
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x04000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_IMI is not set
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_XIMG is not set
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
# CONFIG_CMD_UNZIP is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
# CONFIG_CMD_FPGA is not set
|
||||
CONFIG_CMD_GPT=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_BOOT_ANDROID=y
|
||||
CONFIG_CMD_BOOT_ROCKCHIP=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_ITEST is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
# CONFIG_CMD_MISC is not set
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=64
|
||||
CONFIG_RKPARM_PARTITION=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_SPL_SYSCON=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
CONFIG_DM_KEY=y
|
||||
CONFIG_RK8XX_PWRKEY=y
|
||||
CONFIG_ADC_KEY=y
|
||||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_ETH_DESIGNWARE=y
|
||||
CONFIG_GMAC_ROCKCHIP=y
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_DM_FUEL_GAUGE=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_RK8XX=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_REGULATOR_RK8XX=y
|
||||
CONFIG_DM_DVFS=y
|
||||
CONFIG_ROCKCHIP_WTEMP_DVFS=y
|
||||
CONFIG_DM_CHARGE_DISPLAY=y
|
||||
CONFIG_CHARGE_ANIMATION=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
CONFIG_RAM=y
|
||||
CONFIG_SPL_RAM=y
|
||||
CONFIG_TPL_RAM=y
|
||||
CONFIG_DM_DMC=y
|
||||
CONFIG_ROCKCHIP_DMC_FSP=y
|
||||
CONFIG_ROCKCHIP_SDRAM_COMMON=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_RKNAND=y
|
||||
CONFIG_BAUDRATE=1500000
|
||||
CONFIG_DEBUG_UART_BASE=0xFF160000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_DEBUG_UART_SKIP_INIT=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_I2S_ROCKCHIP=y
|
||||
CONFIG_SOUND_RK817=y
|
||||
CONFIG_SOUND_ROCKCHIP=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_ROCKCHIP_THERMAL=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Rockchip"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x2207
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x330d
|
||||
CONFIG_USB_GADGET_DWC2_OTG=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_DISPLAY=y
|
||||
CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_DRM_ROCKCHIP_INNO_VIDEO_COMBO_PHY=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_MIPI_DSI=y
|
||||
CONFIG_DRM_ROCKCHIP_LVDS=y
|
||||
CONFIG_DRM_ROCKCHIP_RGB=y
|
||||
CONFIG_DRM_ROCKCHIP_RK618=y
|
||||
CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y
|
||||
CONFIG_LCD=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_SPL_TINY_MEMSET=y
|
||||
CONFIG_LZ4=y
|
||||
CONFIG_LZO=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_OPTEE_CLIENT=y
|
||||
CONFIG_OPTEE_V2=y
|
||||
CONFIG_TEST_ROCKCHIP=y
|
||||
@ -0,0 +1,227 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x80000
|
||||
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.sh"
|
||||
CONFIG_ROCKCHIP_RK3568=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE=y
|
||||
CONFIG_ROCKCHIP_VENDOR_PARTITION=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y
|
||||
CONFIG_ROCKCHIP_NEW_IDB=y
|
||||
CONFIG_LOADER_INI="RK3566MINIALL.ini"
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||
CONFIG_TARGET_NANOPI_R3=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_SPL_NAND_SUPPORT=y
|
||||
CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
CONFIG_SPL_SPI_SUPPORT=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rk356x-nanopi-r3"
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_IMAGE_GZIP=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_FIT_HW_CRYPTO=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_SPL_FIT_HW_CRYPTO=y
|
||||
# CONFIG_SPL_SYS_DCACHE_OFF is not set
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_ANDROID_BOOTLOADER=y
|
||||
CONFIG_ANDROID_AB=y
|
||||
CONFIG_ANDROID_AVB=y
|
||||
CONFIG_ANDROID_BOOT_IMAGE_HASH=y
|
||||
CONFIG_BOARD_RNG_SEED=y
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
# CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
|
||||
CONFIG_SPL_SHA256_SUPPORT=y
|
||||
CONFIG_SPL_CRYPTO_SUPPORT=y
|
||||
CONFIG_SPL_HASH_SUPPORT=y
|
||||
CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y
|
||||
CONFIG_SPL_ATF=y
|
||||
CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
|
||||
CONFIG_SPL_AB=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0xc00800
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x04000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_DTIMG=y
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_IMI is not set
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_XIMG is not set
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
# CONFIG_CMD_UNZIP is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
# CONFIG_CMD_FPGA is not set
|
||||
CONFIG_CMD_GPT=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_BOOT_ANDROID=y
|
||||
CONFIG_CMD_BOOT_ROCKCHIP=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_NAND=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_ITEST is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_TFTPPUT=y
|
||||
CONFIG_CMD_TFTP_BOOTM=y
|
||||
CONFIG_CMD_TFTP_FLASH=y
|
||||
# CONFIG_CMD_MISC is not set
|
||||
# CONFIG_CMD_CHARGE_DISPLAY is not set
|
||||
CONFIG_CMD_MTD_BLK=y
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=64
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_SPL_DTB_MINIMUM=y
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
# CONFIG_NET_TFTP_VARS is not set
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_SPL_SYSCON=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_CLK_SCMI=y
|
||||
CONFIG_DM_CRYPTO=y
|
||||
CONFIG_SPL_DM_CRYPTO=y
|
||||
CONFIG_ROCKCHIP_CRYPTO_V2=y
|
||||
CONFIG_SPL_ROCKCHIP_CRYPTO_V2=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_RNG_ROCKCHIP=y
|
||||
CONFIG_SCMI_FIRMWARE=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_ROCKCHIP_GPIO_V2=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
CONFIG_DM_KEY=y
|
||||
CONFIG_RK8XX_PWRKEY=y
|
||||
CONFIG_ADC_KEY=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_SPL_MISC=y
|
||||
CONFIG_ROCKCHIP_OTP=y
|
||||
CONFIG_SPL_ROCKCHIP_SECURE_OTP=y
|
||||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_SDMA=y
|
||||
CONFIG_MMC_SDHCI_ROCKCHIP=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_BLK=y
|
||||
CONFIG_MTD_DEVICE=y
|
||||
CONFIG_NAND=y
|
||||
CONFIG_NAND_ROCKCHIP_V9=y
|
||||
CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
|
||||
CONFIG_SYS_NAND_U_BOOT_OFFS=0x8000
|
||||
CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND=0x10000
|
||||
CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_SPEED=20000000
|
||||
CONFIG_SPI_FLASH_EON=y
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_XMC=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_DWC_ETH_QOS=y
|
||||
CONFIG_GMAC_ROCKCHIP=y
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_EDP=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_DM_FUEL_GAUGE=y
|
||||
CONFIG_POWER_FG_RK817=y
|
||||
CONFIG_IO_DOMAIN=y
|
||||
CONFIG_ROCKCHIP_IO_DOMAIN=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_RK8XX=y
|
||||
CONFIG_REGULATOR_FAN53555=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_REGULATOR_RK8XX=y
|
||||
CONFIG_DM_CHARGE_DISPLAY=y
|
||||
CONFIG_CHARGE_ANIMATION=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
CONFIG_RAM=y
|
||||
CONFIG_SPL_RAM=y
|
||||
CONFIG_TPL_RAM=y
|
||||
CONFIG_DM_RAMDISK=y
|
||||
CONFIG_RAMDISK_RO=y
|
||||
CONFIG_DM_DMC=y
|
||||
CONFIG_ROCKCHIP_DMC_FSP=y
|
||||
CONFIG_ROCKCHIP_SDRAM_COMMON=y
|
||||
CONFIG_ROCKCHIP_TPL_INIT_DRAM_TYPE=0
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_SPL_DM_RESET=y
|
||||
CONFIG_SPL_RESET_ROCKCHIP=y
|
||||
CONFIG_BAUDRATE=1500000
|
||||
CONFIG_DEBUG_UART_BASE=0xFE660000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_ROCKCHIP_SFC=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_GENERIC=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Rockchip"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x2207
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x350a
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_DISPLAY=y
|
||||
CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_HDMI=y
|
||||
CONFIG_DRM_ROCKCHIP_INNO_MIPI_PHY=y
|
||||
CONFIG_DRM_ROCKCHIP_INNO_VIDEO_COMBO_PHY=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_MIPI_DSI=y
|
||||
CONFIG_DRM_ROCKCHIP_ANALOGIX_DP=y
|
||||
CONFIG_DRM_ROCKCHIP_LVDS=y
|
||||
CONFIG_DRM_ROCKCHIP_RGB=y
|
||||
CONFIG_ROCKCHIP_CUBIC_LUT_SIZE=9
|
||||
CONFIG_LCD=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_SPL_TINY_MEMSET=y
|
||||
CONFIG_RSA=y
|
||||
CONFIG_SPL_RSA=y
|
||||
CONFIG_RSA_N_SIZE=0x200
|
||||
CONFIG_RSA_E_SIZE=0x10
|
||||
CONFIG_RSA_C_SIZE=0x20
|
||||
CONFIG_XBC=y
|
||||
CONFIG_SHA512=y
|
||||
CONFIG_LZ4=y
|
||||
CONFIG_LZMA=y
|
||||
CONFIG_SPL_GZIP=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_AVB_LIBAVB=y
|
||||
CONFIG_AVB_LIBAVB_AB=y
|
||||
CONFIG_AVB_LIBAVB_ATX=y
|
||||
CONFIG_AVB_LIBAVB_USER=y
|
||||
CONFIG_RK_AVB_LIBAVB_USER=y
|
||||
CONFIG_OPTEE_CLIENT=y
|
||||
CONFIG_OPTEE_V2=y
|
||||
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y
|
||||
@ -1 +1,2 @@
|
||||
CONFIG_ROCKCHIP_SFC_IOMUX=y
|
||||
# CONFIG_ROCKCHIP_EMMC_IOMUX is not set
|
||||
|
||||
@ -1 +0,0 @@
|
||||
CONFIG_SPL_ATF_AARCH32_BL33=y
|
||||
@ -0,0 +1,2 @@
|
||||
CONFIG_BASE_DEFCONFIG="rk3506_defconfig"
|
||||
CONFIG_LOADER_INI="RK3506MINIALL_RT.ini"
|
||||
@ -0,0 +1,2 @@
|
||||
CONFIG_BASE_DEFCONFIG="rk3506_defconfig"
|
||||
CONFIG_LOADER_INI="RK3506BMINIALL_RT.ini"
|
||||
@ -0,0 +1,24 @@
|
||||
CONFIG_ARM64_BOOT_AARCH32=y
|
||||
# CONFIG_ARM64_SUPPORT_AARCH32 is not set
|
||||
# CONFIG_ARMV7_LPAE is not set
|
||||
CONFIG_BASE_DEFCONFIG="rk3562_defconfig"
|
||||
CONFIG_BOOTP_PXE_CLIENTARCH=0x15
|
||||
CONFIG_BOOTP_VCI_STRING="U-Boot.armv7"
|
||||
CONFIG_CPU_V7=y
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
CONFIG_HAS_THUMB2=y
|
||||
CONFIG_HAS_VBAR=y
|
||||
CONFIG_HAVE_PRIVATE_LIBGCC=y
|
||||
# CONFIG_PHYS_64BIT is not set
|
||||
# CONFIG_SPL_OF_LIBFDT is not set
|
||||
CONFIG_SPL_SYS_THUMB_BUILD=y
|
||||
CONFIG_SPL_USE_ARCH_MEMCPY=y
|
||||
CONFIG_SPL_USE_ARCH_MEMSET=y
|
||||
CONFIG_SYS_ARM_ARCH=7
|
||||
CONFIG_SYS_CPU="armv7"
|
||||
CONFIG_SYS_THUMB_BUILD=y
|
||||
CONFIG_TPL_USE_ARCH_MEMCPY=y
|
||||
CONFIG_TPL_USE_ARCH_MEMSET=y
|
||||
CONFIG_USE_ARCH_MEMCPY=y
|
||||
CONFIG_USE_ARCH_MEMSET=y
|
||||
CONFIG_USE_PRIVATE_LIBGCC=y
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,222 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SPL_GPIO_SUPPORT=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x80000
|
||||
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.sh"
|
||||
CONFIG_ROCKCHIP_RK3576=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE=y
|
||||
CONFIG_USING_KERNEL_DTB_V2=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y
|
||||
CONFIG_ROCKCHIP_NEW_IDB=y
|
||||
CONFIG_SANITY_CPU_SWAP=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||
CONFIG_TARGET_EVB_RK3576=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
CONFIG_SPL_SPI_SUPPORT=y
|
||||
CONFIG_ARMV8_CRYPTO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rk3576-evb"
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_SPL_FIT_HW_CRYPTO=y
|
||||
# CONFIG_SPL_SYS_DCACHE_OFF is not set
|
||||
CONFIG_SPL_FIT_IMAGE_MULTIPLE=1
|
||||
CONFIG_BOOTDELAY=0
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_BOARD_RNG_SEED=y
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
# CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x1
|
||||
CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_UFS_SUPPORT=y
|
||||
CONFIG_SPL_ATF=y
|
||||
CONFIG_SPL_AB=y
|
||||
# CONFIG_FASTBOOT is not set
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_DTIMG=y
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_IMI is not set
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_XIMG is not set
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
# CONFIG_CMD_UNZIP is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
# CONFIG_CMD_FPGA is not set
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_GPT=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_UFS=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_ITEST is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_TFTPPUT=y
|
||||
CONFIG_CMD_TFTP_BOOTM=y
|
||||
CONFIG_CMD_TFTP_FLASH=y
|
||||
# CONFIG_CMD_MISC is not set
|
||||
CONFIG_CMD_MTD_BLK=y
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=64
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_SPL_DTB_MINIMUM=y
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
CONFIG_OF_U_BOOT_REMOVE_PROPS="interrupt-parent"
|
||||
CONFIG_ENVF=y
|
||||
# CONFIG_NET_TFTP_VARS is not set
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_SPL_SYSCON=y
|
||||
# CONFIG_SARADC_ROCKCHIP is not set
|
||||
CONFIG_SARADC_ROCKCHIP_V2=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_CLK_SCMI=y
|
||||
CONFIG_DM_CRYPTO=y
|
||||
CONFIG_SPL_DM_CRYPTO=y
|
||||
CONFIG_ROCKCHIP_CRYPTO_V2=y
|
||||
CONFIG_SPL_ROCKCHIP_CRYPTO_V2=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_RNG_ROCKCHIP=y
|
||||
CONFIG_SCMI_FIRMWARE=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_ROCKCHIP_GPIO_V2=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_DM_KEY=y
|
||||
CONFIG_RK8XX_PWRKEY=y
|
||||
CONFIG_ADC_KEY=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_SPL_MISC=y
|
||||
CONFIG_MISC_DECOMPRESS=y
|
||||
CONFIG_SPL_MISC_DECOMPRESS=y
|
||||
CONFIG_ROCKCHIP_OTP=y
|
||||
CONFIG_ROCKCHIP_HW_DECOMPRESS=y
|
||||
CONFIG_SPL_ROCKCHIP_HW_DECOMPRESS=y
|
||||
CONFIG_SPL_ROCKCHIP_SECURE_OTP=y
|
||||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_SDMA=y
|
||||
CONFIG_MMC_SDHCI_ROCKCHIP=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_BLK=y
|
||||
CONFIG_MTD_DEVICE=y
|
||||
CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_MODE=0x1
|
||||
CONFIG_SF_DEFAULT_SPEED=50000000
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_DWC_ETH_QOS=y
|
||||
CONFIG_GMAC_ROCKCHIP=y
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX=y
|
||||
CONFIG_PHY_ROCKCHIP_USBDP=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_DM_FUEL_GAUGE=y
|
||||
CONFIG_POWER_FG_CW201X=y
|
||||
CONFIG_POWER_FG_CW221X=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_RK8XX=y
|
||||
CONFIG_DM_POWER_DELIVERY=y
|
||||
CONFIG_TYPEC_TCPM=y
|
||||
CONFIG_TYPEC_TCPCI=y
|
||||
CONFIG_TYPEC_HUSB311=y
|
||||
CONFIG_TYPEC_FUSB302=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_REGULATOR_RK8XX=y
|
||||
CONFIG_CHARGER_BQ25700=y
|
||||
CONFIG_CHARGER_BQ25890=y
|
||||
CONFIG_CHARGER_SGM41542=y
|
||||
CONFIG_DM_CHARGE_DISPLAY=y
|
||||
CONFIG_CHARGE_ANIMATION=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
CONFIG_RAM=y
|
||||
CONFIG_SPL_RAM=y
|
||||
CONFIG_TPL_RAM=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_SPL_DM_RESET=y
|
||||
CONFIG_SPL_RESET_ROCKCHIP=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_BAUDRATE=1500000
|
||||
CONFIG_DEBUG_UART_BASE=0x2ad40000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_ROCKCHIP_SFC=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_GENERIC=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Rockchip"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x2207
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x350e
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_UFS=y
|
||||
CONFIG_ROCKCHIP_UFS=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_DISPLAY=y
|
||||
CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_HDMI_QP=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_MIPI_DSI2=y
|
||||
CONFIG_DRM_ROCKCHIP_DW_DP=y
|
||||
CONFIG_DRM_ROCKCHIP_ANALOGIX_DP=y
|
||||
CONFIG_DRM_ROCKCHIP_RGB=y
|
||||
CONFIG_DRM_ROCKCHIP_SAMSUNG_MIPI_DCPHY=y
|
||||
CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX_HDMI=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_LIB_RAND=y
|
||||
CONFIG_SPL_TINY_MEMSET=y
|
||||
CONFIG_RSA=y
|
||||
CONFIG_SPL_RSA=y
|
||||
CONFIG_RSA_N_SIZE=0x200
|
||||
CONFIG_RSA_E_SIZE=0x10
|
||||
CONFIG_RSA_C_SIZE=0x20
|
||||
CONFIG_LZ4=y
|
||||
CONFIG_SPL_GZIP=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_AVB_LIBAVB=y
|
||||
CONFIG_AVB_LIBAVB_AB=y
|
||||
CONFIG_AVB_LIBAVB_ATX=y
|
||||
CONFIG_AVB_LIBAVB_USER=y
|
||||
CONFIG_RK_AVB_LIBAVB_USER=y
|
||||
CONFIG_OPTEE_CLIENT=y
|
||||
CONFIG_OPTEE_V2=y
|
||||
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y
|
||||
@ -0,0 +1,23 @@
|
||||
CONFIG_ARM64_BOOT_AARCH32=y
|
||||
# CONFIG_ARM64_SUPPORT_AARCH32 is not set
|
||||
# CONFIG_ARMV7_LPAE is not set
|
||||
CONFIG_BOOTP_PXE_CLIENTARCH=0x15
|
||||
CONFIG_BOOTP_VCI_STRING="U-Boot.armv7"
|
||||
CONFIG_CPU_V7=y
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
CONFIG_HAS_THUMB2=y
|
||||
CONFIG_HAS_VBAR=y
|
||||
CONFIG_HAVE_PRIVATE_LIBGCC=y
|
||||
# CONFIG_PHYS_64BIT is not set
|
||||
# CONFIG_SPL_OF_LIBFDT is not set
|
||||
CONFIG_SPL_SYS_THUMB_BUILD=y
|
||||
CONFIG_SPL_USE_ARCH_MEMCPY=y
|
||||
CONFIG_SPL_USE_ARCH_MEMSET=y
|
||||
CONFIG_SYS_ARM_ARCH=7
|
||||
CONFIG_SYS_CPU="armv7"
|
||||
CONFIG_SYS_THUMB_BUILD=y
|
||||
CONFIG_TPL_USE_ARCH_MEMCPY=y
|
||||
CONFIG_TPL_USE_ARCH_MEMSET=y
|
||||
CONFIG_USE_ARCH_MEMCPY=y
|
||||
CONFIG_USE_ARCH_MEMSET=y
|
||||
CONFIG_USE_PRIVATE_LIBGCC=y
|
||||
@ -0,0 +1,21 @@
|
||||
CONFIG_BASE_DEFCONFIG="rv1126b_defconfig"
|
||||
# CONFIG_CMD_GPT is not set
|
||||
CONFIG_CMD_SCRIPT_UPDATE=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_ENVF_LIST="blkdevparts mtdparts sys_bootargs app reserved ipaddr serverip netmask gatewayip ethaddr"
|
||||
CONFIG_ENVF=y
|
||||
CONFIG_ENV_NAND_OFFSET=0x0
|
||||
CONFIG_ENV_NAND_OFFSET_REDUND=0x0
|
||||
CONFIG_ENV_NAND_SIZE=0x40000
|
||||
CONFIG_ENV_NOR_OFFSET=0x0
|
||||
CONFIG_ENV_NOR_OFFSET_REDUND=0x0
|
||||
CONFIG_ENV_NOR_SIZE=0x10000
|
||||
CONFIG_ENV_OFFSET=0x0
|
||||
CONFIG_ENV_OFFSET_REDUND=0x0
|
||||
CONFIG_ENV_PARTITION=y
|
||||
CONFIG_LOADER_INI="RV1126BMINIALL_IPC.ini"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_SPL_ENVF=y
|
||||
CONFIG_SPL_ENV_PARTITION=y
|
||||
CONFIG_SPL_FIT_IMAGE_KB=512
|
||||
CONFIG_SPL_FIT_IMAGE_MULTIPLE=1
|
||||
@ -0,0 +1,166 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SPL_GPIO_SUPPORT=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x80000
|
||||
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.sh"
|
||||
CONFIG_ROCKCHIP_RV1126B=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE=y
|
||||
CONFIG_ROCKCHIP_VENDOR_PARTITION=y
|
||||
CONFIG_USING_KERNEL_DTB_V2=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y
|
||||
CONFIG_ROCKCHIP_NEW_IDB=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||
CONFIG_TARGET_EVB_RV1126B=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
CONFIG_SPL_SPI_SUPPORT=y
|
||||
CONFIG_ARMV8_CRYPTO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rv1126b-evb"
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_FIT_IMAGE_POST_PROCESS=y
|
||||
# CONFIG_SPL_SYS_DCACHE_OFF is not set
|
||||
CONFIG_SPL_FIT_IMAGE_KB=896
|
||||
CONFIG_SPL_FIT_IMAGE_MULTIPLE=1
|
||||
CONFIG_BOOTDELAY=0
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_ANDROID_BOOTLOADER=y
|
||||
CONFIG_ANDROID_AVB=y
|
||||
CONFIG_ANDROID_BOOT_IMAGE_HASH=y
|
||||
CONFIG_BOARD_RNG_SEED=y
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
# CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x1
|
||||
CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_ATF=y
|
||||
CONFIG_SPL_AB=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x40c00800
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x07000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_DTIMG=y
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_IMI is not set
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_XIMG is not set
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
# CONFIG_CMD_UNZIP is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
# CONFIG_CMD_FPGA is not set
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_RANDOM_UUID=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_BOOT_ANDROID=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_ITEST is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
# CONFIG_CMD_MISC is not set
|
||||
CONFIG_CMD_MTD_BLK=y
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_SPL_DTB_MINIMUM=y
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
CONFIG_OF_U_BOOT_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
# CONFIG_NET_TFTP_VARS is not set
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_SPL_SYSCON=y
|
||||
# CONFIG_SARADC_ROCKCHIP is not set
|
||||
CONFIG_SARADC_ROCKCHIP_V2=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_RNG_ROCKCHIP=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_ROCKCHIP_GPIO_V2=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_DM_KEY=y
|
||||
CONFIG_ADC_KEY=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_SPL_MISC=y
|
||||
CONFIG_MISC_DECOMPRESS=y
|
||||
CONFIG_SPL_MISC_DECOMPRESS=y
|
||||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_BLK=y
|
||||
CONFIG_MTD_DEVICE=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_MODE=0x1
|
||||
CONFIG_SF_DEFAULT_SPEED=50000000
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_RK801=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_REGULATOR_RK801=y
|
||||
CONFIG_RAM=y
|
||||
CONFIG_SPL_RAM=y
|
||||
CONFIG_TPL_RAM=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_SPL_DM_RESET=y
|
||||
CONFIG_SPL_RESET_ROCKCHIP=y
|
||||
CONFIG_BAUDRATE=1500000
|
||||
CONFIG_DEBUG_UART_BASE=0x20810000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_ROCKCHIP_SFC=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_GENERIC=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Rockchip"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x2207
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x110f
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_LIB_RAND=y
|
||||
CONFIG_SPL_TINY_MEMSET=y
|
||||
CONFIG_LZ4=y
|
||||
CONFIG_SPL_LZMA=y
|
||||
CONFIG_SPL_GZIP=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_AVB_LIBAVB=y
|
||||
CONFIG_AVB_LIBAVB_AB=y
|
||||
CONFIG_AVB_LIBAVB_ATX=y
|
||||
CONFIG_AVB_LIBAVB_USER=y
|
||||
CONFIG_RK_AVB_LIBAVB_USER=y
|
||||
@ -0,0 +1,81 @@
|
||||
CONFIG_ARM64=y
|
||||
CONFIG_ARM_PSCI_FW=y
|
||||
CONFIG_ARM_SMCCC=y
|
||||
# CONFIG_ARMV8_CRYPTO is not set
|
||||
# CONFIG_ARMV8_MULTIENTRY is not set
|
||||
# CONFIG_ARMV8_PSCI is not set
|
||||
# CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT is not set
|
||||
# CONFIG_ARMV8_SET_SMPEN is not set
|
||||
CONFIG_BASE_DEFCONFIG="rockchip-usbplug_defconfig"
|
||||
CONFIG_CMD_BOOTI=y
|
||||
CONFIG_DEBUG_UART_BASE=0x20810000
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rv1126b-evb"
|
||||
CONFIG_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_FIRMWARE=y
|
||||
CONFIG_GICV2=y
|
||||
CONFIG_IRQ=y
|
||||
CONFIG_MTD_NAND_BBT_USING_FLASH=y
|
||||
CONFIG_MTD_NAND_CORE=y
|
||||
CONFIG_MTD_SPI_NAND=y
|
||||
# CONFIG_NAND_ARASAN is not set
|
||||
# CONFIG_NAND_ATMEL is not set
|
||||
# CONFIG_NAND_BRCMNAND is not set
|
||||
# CONFIG_NAND_DAVINCI is not set
|
||||
# CONFIG_NAND_DENALI_DT is not set
|
||||
# CONFIG_NAND_LPC32XX_SLC is not set
|
||||
# CONFIG_NAND_PXA3XX is not set
|
||||
# CONFIG_NAND_ROCKCHIP is not set
|
||||
# CONFIG_NAND_ROCKCHIP_V9 is not set
|
||||
# CONFIG_NAND_VF610_NFC is not set
|
||||
CONFIG_NAND=y
|
||||
# CONFIG_NAND_ZYNQ is not set
|
||||
# CONFIG_NOP_PHY is not set
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_PHYS_64BIT=y
|
||||
CONFIG_PHY=y
|
||||
# CONFIG_POSITION_INDEPENDENT is not set
|
||||
CONFIG_PSCI_RESET=y
|
||||
CONFIG_RESET_ROCKCHIP=y
|
||||
CONFIG_ROCKCHIP_BOOT_MODE_REG=0x20130220
|
||||
CONFIG_ROCKCHIP_BROM_HELPER=y
|
||||
# CONFIG_ROCKCHIP_DEBUGGER is not set
|
||||
CONFIG_ROCKCHIP_IRAM_START_ADDR=0x3ffb0000
|
||||
CONFIG_ROCKCHIP_NEW_IDB=y
|
||||
CONFIG_ROCKCHIP_RV1126B=y
|
||||
# CONFIG_ROCKCHIP_RV1126 is not set
|
||||
CONFIG_ROCKCHIP_STIMER_BASE=0x20820000
|
||||
# CONFIG_SCMI_FIRMWARE is not set
|
||||
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||
CONFIG_SPI_FLASH_XMC=y
|
||||
CONFIG_SPI_FLASH_XTX=y
|
||||
CONFIG_SPI_NAND_BIWIN=y
|
||||
CONFIG_SPI_NAND_DOSILICON=y
|
||||
CONFIG_SPI_NAND_ESMT=y
|
||||
CONFIG_SPI_NAND_ETRON=y
|
||||
CONFIG_SPI_NAND_FMSH=y
|
||||
CONFIG_SPI_NAND_FORESEE=y
|
||||
CONFIG_SPI_NAND_GIGADEVICE=y
|
||||
CONFIG_SPI_NAND_GSTO=y
|
||||
CONFIG_SPI_NAND_HYF=y
|
||||
CONFIG_SPI_NAND_JSC=y
|
||||
CONFIG_SPI_NAND_MACRONIX=y
|
||||
CONFIG_SPI_NAND_MICRON=y
|
||||
CONFIG_SPI_NAND_SILICONGO=y
|
||||
CONFIG_SPI_NAND_SKYHIGH=y
|
||||
CONFIG_SPI_NAND_TOSHIBA=y
|
||||
CONFIG_SPI_NAND_UNIM=y
|
||||
CONFIG_SPI_NAND_WINBOND=y
|
||||
CONFIG_SPI_NAND_XINCUN=y
|
||||
CONFIG_SPI_NAND_XTX=y
|
||||
# CONFIG_SPL_ARMV8_SEC_FIRMWARE_SUPPORT is not set
|
||||
CONFIG_SPL_LDSCRIPT="arch/arm/cpu/armv8/u-boot-spl.lds"
|
||||
# CONFIG_SPL_SCMI_FIRMWARE is not set
|
||||
CONFIG_STATIC_RELA=y
|
||||
CONFIG_SYS_ARM_ARCH=8
|
||||
CONFIG_SYS_BOARD="evb_rv1126b"
|
||||
CONFIG_SYS_CONFIG_NAME="evb_rv1126b"
|
||||
CONFIG_SYS_CPU="armv8"
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_TARGET_EVB_RV1126B=y
|
||||
CONFIG_OF_ADDR_SIZE_AUTO_NOPARENT=y
|
||||
@ -0,0 +1,175 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SPL_GPIO_SUPPORT=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x80000
|
||||
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.sh"
|
||||
CONFIG_ROCKCHIP_RV1126B=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE=y
|
||||
CONFIG_ROCKCHIP_VENDOR_PARTITION=y
|
||||
CONFIG_USING_KERNEL_DTB_V2=y
|
||||
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y
|
||||
CONFIG_ROCKCHIP_NEW_IDB=y
|
||||
CONFIG_ROCKCHIP_EMMC_IOMUX=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||
CONFIG_TARGET_EVB_RV1126B=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
CONFIG_SPL_SPI_SUPPORT=y
|
||||
CONFIG_ARMV8_CRYPTO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rv1126b-evb"
|
||||
CONFIG_DEBUG_UART=y
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_IMAGE_POST_PROCESS=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_FIT_IMAGE_POST_PROCESS=y
|
||||
# CONFIG_SPL_SYS_DCACHE_OFF is not set
|
||||
CONFIG_BOOTDELAY=0
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_BOARD_RNG_SEED=y
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
# CONFIG_SPL_LEGACY_IMAGE_SUPPORT is not set
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x1
|
||||
CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_ATF=y
|
||||
CONFIG_SPL_AB=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x40c00800
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x07000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_DTIMG=y
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_IMI is not set
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_XIMG is not set
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
# CONFIG_CMD_UNZIP is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
# CONFIG_CMD_FPGA is not set
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_GPT=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_ITEST is not set
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
# CONFIG_CMD_MISC is not set
|
||||
CONFIG_CMD_MTD_BLK=y
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=64
|
||||
CONFIG_OF_ADDR_SIZE_AUTO_NOPARENT=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_SPL_DTB_MINIMUM=y
|
||||
CONFIG_OF_LIVE=y
|
||||
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
CONFIG_OF_U_BOOT_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
# CONFIG_NET_TFTP_VARS is not set
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SPL_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_SPL_SYSCON=y
|
||||
# CONFIG_SARADC_ROCKCHIP is not set
|
||||
CONFIG_SARADC_ROCKCHIP_V2=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_DM_CRYPTO=y
|
||||
CONFIG_SPL_DM_CRYPTO=y
|
||||
CONFIG_ROCKCHIP_EC=y
|
||||
CONFIG_ROCKCHIP_CRYPTO_CE=y
|
||||
CONFIG_SPL_ROCKCHIP_CRYPTO_CE=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_RNG_ROCKCHIP=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_ROCKCHIP_GPIO_V2=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_DM_KEY=y
|
||||
CONFIG_RK8XX_PWRKEY=y
|
||||
CONFIG_ADC_KEY=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_SPL_MISC=y
|
||||
CONFIG_MISC_DECOMPRESS=y
|
||||
CONFIG_SPL_MISC_DECOMPRESS=y
|
||||
CONFIG_ROCKCHIP_OTP=y
|
||||
CONFIG_ROCKCHIP_HW_DECOMPRESS=y
|
||||
CONFIG_SPL_ROCKCHIP_HW_DECOMPRESS=y
|
||||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_BLK=y
|
||||
CONFIG_MTD_DEVICE=y
|
||||
CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_MODE=0x1
|
||||
CONFIG_SF_DEFAULT_SPEED=50000000
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_RK801=y
|
||||
CONFIG_PMIC_RK8XX=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_REGULATOR_RK801=y
|
||||
CONFIG_REGULATOR_RK8XX=y
|
||||
CONFIG_RAM=y
|
||||
CONFIG_SPL_RAM=y
|
||||
CONFIG_TPL_RAM=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_SPL_DM_RESET=y
|
||||
CONFIG_SPL_RESET_ROCKCHIP=y
|
||||
CONFIG_BAUDRATE=1500000
|
||||
CONFIG_DEBUG_UART_BASE=0x20810000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_ROCKCHIP_SFC=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_GENERIC=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Rockchip"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x2207
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x110f
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_LIB_RAND=y
|
||||
CONFIG_SPL_TINY_MEMSET=y
|
||||
CONFIG_LZ4=y
|
||||
CONFIG_SPL_LZMA=y
|
||||
CONFIG_SPL_GZIP=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_AVB_LIBAVB=y
|
||||
CONFIG_AVB_LIBAVB_AB=y
|
||||
CONFIG_AVB_LIBAVB_ATX=y
|
||||
CONFIG_AVB_LIBAVB_USER=y
|
||||
CONFIG_RK_AVB_LIBAVB_USER=y
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,424 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2024 Rockchip Electronics Co., Ltd
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <crypto.h>
|
||||
#include <dm.h>
|
||||
#include <linux/errno.h>
|
||||
#include <rockchip/crypto_mpa.h>
|
||||
#include <rockchip/crypto_v2.h>
|
||||
#include <rockchip/crypto_ecc.h>
|
||||
|
||||
#define WORDS2BYTES(words) ((words) * 4)
|
||||
|
||||
#define RK_ECP_IS_BIGNUM_INVALID(b) (!b || !b->d || b->size > RK_ECP_MAX_WORDS)
|
||||
#define RK_ECP_IS_POINT_INVALID(p) (RK_ECP_IS_BIGNUM_INVALID(p->x) && \
|
||||
RK_ECP_IS_BIGNUM_INVALID(p->y))
|
||||
|
||||
/*************************************************************/
|
||||
/* Macros for waiting EC machine ready states */
|
||||
/*************************************************************/
|
||||
#define RK_ECP_WRITE_REG(offset, val) crypto_write((val), (offset))
|
||||
#define RK_ECP_READ_REG(offset) crypto_read((offset))
|
||||
|
||||
#define RK_ECP_RAM_FOR_ECC() \
|
||||
RK_ECP_WRITE_REG(RK_ECC_RAM_CTL, RK_ECC_RAM_CTL_SEL_MASK | RK_ECC_RAM_CTL_ECC)
|
||||
|
||||
#define RK_ECP_RAM_FOR_CPU() \
|
||||
RK_ECP_WRITE_REG(RK_ECC_RAM_CTL, RK_ECC_RAM_CTL_SEL_MASK | RK_ECC_RAM_CTL_CPU)
|
||||
|
||||
/* big endian to little endian */
|
||||
#define RK_ECP_LOAD_DATA(dst, big_src) rk_ecp_load_data(dst, big_src)
|
||||
|
||||
/* little endian to littel endian */
|
||||
#define RK_ECP_LOAD_DATA_EXT(dst, src, n_bytes) \
|
||||
do { \
|
||||
util_word_memset((void *)(dst), 0, RK_ECP_MAX_WORDS);\
|
||||
util_word_memcpy((void *)(dst), (void *)(src), (n_bytes) / 4); \
|
||||
} while (0)
|
||||
|
||||
#define RK_GET_GRPOUP_NBYTES(grp) ((grp)->p_len)
|
||||
|
||||
#define RK_LOAD_GROUP_A(G) do { \
|
||||
grp->curve_name = #G; \
|
||||
grp->wide = G ## _wide;\
|
||||
grp->p = G ## _p; \
|
||||
grp->p_len = sizeof(G ## _p); \
|
||||
grp->a = G ## _a; \
|
||||
grp->a_len = sizeof(G ## _a); \
|
||||
grp->n = G ## _n; \
|
||||
grp->n_len = sizeof(G ## _n); \
|
||||
grp->gx = G ## _gx; \
|
||||
grp->gx_len = sizeof(G ## _gx); \
|
||||
grp->gy = G ## _gy; \
|
||||
grp->gy_len = sizeof(G ## _gy); \
|
||||
} while (0)
|
||||
|
||||
/* transform to big endian */
|
||||
/*
|
||||
* Domain parameters for secp192r1
|
||||
*/
|
||||
static const uint32_t secp192r1_wide = RK_ECC_CURVE_WIDE_192;
|
||||
|
||||
static const uint8_t secp192r1_p[] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t secp192r1_a[] = {
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t secp192r1_gx[] = {
|
||||
0x12, 0x10, 0xFF, 0x82, 0xFD, 0x0A, 0xFF, 0xF4,
|
||||
0x00, 0x88, 0xA1, 0x43, 0xEB, 0x20, 0xBF, 0x7C,
|
||||
0xF6, 0x90, 0x30, 0xB0, 0x0E, 0xA8, 0x8D, 0x18,
|
||||
};
|
||||
|
||||
static const uint8_t secp192r1_gy[] = {
|
||||
0x11, 0x48, 0x79, 0x1E, 0xA1, 0x77, 0xF9, 0x73,
|
||||
0xD5, 0xCD, 0x24, 0x6B, 0xED, 0x11, 0x10, 0x63,
|
||||
0x78, 0xDA, 0xC8, 0xFF, 0x95, 0x2B, 0x19, 0x07,
|
||||
};
|
||||
|
||||
static const uint8_t secp192r1_n[] = {
|
||||
0x31, 0x28, 0xD2, 0xB4, 0xB1, 0xC9, 0x6B, 0x14,
|
||||
0x36, 0xF8, 0xDE, 0x99, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
/*
|
||||
* Domain parameters for secp224r1
|
||||
*/
|
||||
static const uint32_t secp224r1_wide = RK_ECC_CURVE_WIDE_224;
|
||||
|
||||
static const uint8_t secp224r1_p[] = {
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
static const uint8_t secp224r1_a[] = {
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
static const uint8_t secp224r1_gx[] = {
|
||||
0x21, 0x1D, 0x5C, 0x11, 0xD6, 0x80, 0x32, 0x34,
|
||||
0x22, 0x11, 0xC2, 0x56, 0xD3, 0xC1, 0x03, 0x4A,
|
||||
0xB9, 0x90, 0x13, 0x32, 0x7F, 0xBF, 0xB4, 0x6B,
|
||||
0xBD, 0x0C, 0x0E, 0xB7,
|
||||
};
|
||||
|
||||
static const uint8_t secp224r1_gy[] = {
|
||||
0x34, 0x7E, 0x00, 0x85, 0x99, 0x81, 0xD5, 0x44,
|
||||
0x64, 0x47, 0x07, 0x5A, 0xA0, 0x75, 0x43, 0xCD,
|
||||
0xE6, 0xDF, 0x22, 0x4C, 0xFB, 0x23, 0xF7, 0xB5,
|
||||
0x88, 0x63, 0x37, 0xBD,
|
||||
};
|
||||
|
||||
static const uint8_t secp224r1_n[] = {
|
||||
0x3D, 0x2A, 0x5C, 0x5C, 0x45, 0x29, 0xDD, 0x13,
|
||||
0x3E, 0xF0, 0xB8, 0xE0, 0xA2, 0x16, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
/*
|
||||
* Domain parameters for secp256r1
|
||||
*/
|
||||
static const uint32_t secp256r1_wide = RK_ECC_CURVE_WIDE_256;
|
||||
|
||||
static const uint8_t secp256r1_p[] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t secp256r1_a[] = {
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t secp256r1_gx[] = {
|
||||
0x96, 0xC2, 0x98, 0xD8, 0x45, 0x39, 0xA1, 0xF4,
|
||||
0xA0, 0x33, 0xEB, 0x2D, 0x81, 0x7D, 0x03, 0x77,
|
||||
0xF2, 0x40, 0xA4, 0x63, 0xE5, 0xE6, 0xBC, 0xF8,
|
||||
0x47, 0x42, 0x2C, 0xE1, 0xF2, 0xD1, 0x17, 0x6B,
|
||||
};
|
||||
|
||||
static const uint8_t secp256r1_gy[] = {
|
||||
0xF5, 0x51, 0xBF, 0x37, 0x68, 0x40, 0xB6, 0xCB,
|
||||
0xCE, 0x5E, 0x31, 0x6B, 0x57, 0x33, 0xCE, 0x2B,
|
||||
0x16, 0x9E, 0x0F, 0x7C, 0x4A, 0xEB, 0xE7, 0x8E,
|
||||
0x9B, 0x7F, 0x1A, 0xFE, 0xE2, 0x42, 0xE3, 0x4F,
|
||||
};
|
||||
|
||||
static const uint8_t secp256r1_n[] = {
|
||||
0x51, 0x25, 0x63, 0xFC, 0xC2, 0xCA, 0xB9, 0xF3,
|
||||
0x84, 0x9E, 0x17, 0xA7, 0xAD, 0xFA, 0xE6, 0xBC,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
/*
|
||||
* Domain parameters for sm2p256v1_p
|
||||
*/
|
||||
static const uint32_t sm2p256v1_wide = RK_ECC_CURVE_WIDE_256;
|
||||
|
||||
static const uint8_t sm2p256v1_p[] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t sm2p256v1_a[] = {
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static const uint8_t sm2p256v1_gx[] = {
|
||||
0xC7, 0x74, 0x4C, 0x33, 0x89, 0x45, 0x5A, 0x71,
|
||||
0xE1, 0x0B, 0x66, 0xF2, 0xBF, 0x0B, 0xE3, 0x8F,
|
||||
0x94, 0xC9, 0x39, 0x6A, 0x46, 0x04, 0x99, 0x5F,
|
||||
0x19, 0x81, 0x19, 0x1F, 0x2C, 0xAE, 0xC4, 0x32,
|
||||
};
|
||||
|
||||
static const uint8_t sm2p256v1_gy[] = {
|
||||
0xA0, 0xF0, 0x39, 0x21, 0xE5, 0x32, 0xDF, 0x02,
|
||||
0x40, 0x47, 0x2A, 0xC6, 0x7C, 0x87, 0xA9, 0xD0,
|
||||
0x53, 0x21, 0x69, 0x6B, 0xE3, 0xCE, 0xBD, 0x59,
|
||||
0x9C, 0x77, 0xF6, 0xF4, 0xA2, 0x36, 0x37, 0xBC,
|
||||
};
|
||||
|
||||
static const uint8_t sm2p256v1_n[] = {
|
||||
0x23, 0x41, 0xD5, 0x39, 0x09, 0xF4, 0xBB, 0x53,
|
||||
0x2B, 0x05, 0xC6, 0x21, 0x6B, 0xDF, 0x03, 0x72,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
static inline u32 word_reverse(u32 word)
|
||||
{
|
||||
u32 i;
|
||||
u32 new_word = 0;
|
||||
|
||||
for (i = 0; i < sizeof(u32); i++) {
|
||||
new_word |= (word & 0xff) << (8 * (sizeof(u32) - i - 1));
|
||||
word >>= 8;
|
||||
}
|
||||
|
||||
return new_word;
|
||||
}
|
||||
|
||||
static inline bool is_ec_supported(void)
|
||||
{
|
||||
return !!RK_ECP_READ_REG(RK_ECC_MAX_CURVE_WIDE);
|
||||
}
|
||||
|
||||
/* reverse endian word copy */
|
||||
static int rk_ecp_load_data(u32 *dst, struct mpa_num *src)
|
||||
{
|
||||
u32 i;
|
||||
u32 dst_pos, src_pos;
|
||||
|
||||
util_word_memset(dst, 0, RK_ECP_MAX_WORDS);
|
||||
|
||||
dst_pos = src->size - 1;
|
||||
src_pos = 0;
|
||||
|
||||
for (i = 0; i < src->size; i++)
|
||||
dst[dst_pos--] = word_reverse(src->d[src_pos++]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk_word_cmp_zero(uint32_t *buf1, uint32_t n_words)
|
||||
{
|
||||
int ret = 0;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0 ; i < n_words; i++) {
|
||||
if (buf1[i] != 0)
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set a group using well-known domain parameters
|
||||
*/
|
||||
static int rk_ecp_group_load(struct rk_ecp_group *grp, enum rk_ecp_group_id id)
|
||||
{
|
||||
memset(grp, 0x00, sizeof(*grp));
|
||||
|
||||
grp->id = id;
|
||||
|
||||
switch (id) {
|
||||
case RK_ECP_DP_SECP192R1:
|
||||
RK_LOAD_GROUP_A(secp192r1);
|
||||
return 0;
|
||||
|
||||
case RK_ECP_DP_SECP224R1:
|
||||
RK_LOAD_GROUP_A(secp224r1);
|
||||
return 0;
|
||||
|
||||
case RK_ECP_DP_SECP256R1:
|
||||
RK_LOAD_GROUP_A(secp256r1);
|
||||
return 0;
|
||||
|
||||
case RK_ECP_DP_SM2P256V1:
|
||||
RK_LOAD_GROUP_A(sm2p256v1);
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static int rockchip_ecc_request_set(uint32_t ecc_ctl, uint32_t wide)
|
||||
{
|
||||
RK_ECP_WRITE_REG(RK_ECC_CURVE_WIDE, wide);
|
||||
|
||||
RK_ECP_WRITE_REG(RK_ECC_INT_EN, 0);
|
||||
RK_ECP_WRITE_REG(RK_ECC_INT_ST, RK_ECP_READ_REG(RK_ECC_INT_ST));
|
||||
RK_ECP_WRITE_REG(RK_ECC_CTL, ecc_ctl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rockchip_ecc_request_wait_done(void)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 reg_val = 0;
|
||||
|
||||
do {
|
||||
reg_val = crypto_read(RK_ECC_INT_ST);
|
||||
} while ((reg_val & 0x01) != RK_ECC_INT_ST_DONE);
|
||||
|
||||
if (RK_ECP_READ_REG(RK_ECC_ABN_ST)) {
|
||||
ret = -EFAULT;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
exit:
|
||||
if (ret) {
|
||||
printf("RK_ECC_CTL = %08x\n", RK_ECP_READ_REG(RK_ECC_CTL));
|
||||
printf("RK_ECC_INT_EN = %08x\n", RK_ECP_READ_REG(RK_ECC_INT_EN));
|
||||
printf("RK_ECC_CURVE_WIDE = %08x\n", RK_ECP_READ_REG(RK_ECC_CURVE_WIDE));
|
||||
printf("RK_ECC_RAM_CTL = %08x\n", RK_ECP_READ_REG(RK_ECC_RAM_CTL));
|
||||
printf("RK_ECC_INT_ST = %08x\n", RK_ECP_READ_REG(RK_ECC_INT_ST));
|
||||
printf("RK_ECC_ABN_ST = %08x\n", RK_ECP_READ_REG(RK_ECC_ABN_ST));
|
||||
}
|
||||
|
||||
RK_ECP_WRITE_REG(RK_ECC_CTL, 0);
|
||||
RK_ECP_RAM_FOR_CPU();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rockchip_ecc_request_trigger(void)
|
||||
{
|
||||
uint32_t ecc_ctl = RK_ECP_READ_REG(RK_ECC_CTL);
|
||||
|
||||
RK_ECP_RAM_FOR_ECC();
|
||||
|
||||
RK_ECP_WRITE_REG(RK_ECC_CTL, ecc_ctl | RK_ECC_CTL_REQ_ECC);
|
||||
|
||||
return rockchip_ecc_request_wait_done();
|
||||
}
|
||||
|
||||
static uint32_t rockchip_ecc_get_group_id(uint32_t crypto_algo)
|
||||
{
|
||||
switch (crypto_algo) {
|
||||
case CRYPTO_ECC_192R1:
|
||||
return RK_ECP_DP_SECP192R1;
|
||||
case CRYPTO_ECC_224R1:
|
||||
return RK_ECP_DP_SECP224R1;
|
||||
case CRYPTO_ECC_256R1:
|
||||
return RK_ECP_DP_SECP256R1;
|
||||
case CRYPTO_SM2:
|
||||
return RK_ECP_DP_SM2P256V1;
|
||||
default:
|
||||
return RK_ECP_DP_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
int rockchip_ecc_verify(uint32_t crypto_algo, uint8_t *hash, uint32_t hash_len,
|
||||
struct rk_ecp_point *point_P, struct rk_ecp_point *point_sign)
|
||||
{
|
||||
int ret;
|
||||
uint32_t curve_sel = 0;
|
||||
struct mpa_num *bn_hash = NULL;
|
||||
uint32_t group_id = rockchip_ecc_get_group_id(crypto_algo);
|
||||
struct rk_ecp_group grp;
|
||||
struct rk_ecc_verify *ecc_st = (struct rk_ecc_verify *)SM2_RAM_BASE;
|
||||
|
||||
if (!is_ec_supported())
|
||||
return -ENOSYS;
|
||||
|
||||
if (!hash ||
|
||||
hash_len == 0 ||
|
||||
hash_len > RK_ECP_MAX_BYTES ||
|
||||
RK_ECP_IS_POINT_INVALID(point_P) ||
|
||||
RK_ECP_IS_POINT_INVALID(point_sign)) {
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ret = rk_ecp_group_load(&grp, group_id);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
rk_mpa_alloc(&bn_hash, hash, BYTE2WORD(hash_len));
|
||||
if (!bn_hash) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
RK_ECP_RAM_FOR_CPU();
|
||||
|
||||
curve_sel = group_id == RK_ECP_DP_SM2P256V1 ?
|
||||
RK_ECC_CTL_FUNC_SM2_CURVER : RK_ECC_CTL_FUNC_ECC_CURVER;
|
||||
|
||||
RK_ECP_LOAD_DATA(ecc_st->e, bn_hash);
|
||||
RK_ECP_LOAD_DATA(ecc_st->r_, point_sign->x);
|
||||
RK_ECP_LOAD_DATA(ecc_st->s_, point_sign->y);
|
||||
RK_ECP_LOAD_DATA(ecc_st->p_x, point_P->x);
|
||||
RK_ECP_LOAD_DATA(ecc_st->p_y, point_P->y);
|
||||
|
||||
RK_ECP_LOAD_DATA_EXT(ecc_st->A, grp.a, grp.a_len);
|
||||
RK_ECP_LOAD_DATA_EXT(ecc_st->P, grp.p, grp.p_len);
|
||||
RK_ECP_LOAD_DATA_EXT(ecc_st->N, grp.n, grp.n_len);
|
||||
|
||||
RK_ECP_LOAD_DATA_EXT(ecc_st->G_x, grp.gx, grp.gx_len);
|
||||
RK_ECP_LOAD_DATA_EXT(ecc_st->G_y, grp.gy, grp.gy_len);
|
||||
|
||||
rockchip_ecc_request_set(curve_sel | RK_ECC_CTL_FUNC_SEL_VERIFY, grp.wide);
|
||||
|
||||
ret = rockchip_ecc_request_trigger();
|
||||
if (ret ||
|
||||
rk_word_cmp_zero(ecc_st->v, RK_ECP_MAX_WORDS) ||
|
||||
rk_word_cmp_zero(ecc_st->r_, RK_ECP_MAX_WORDS) == 0) {
|
||||
ret = -EKEYREJECTED;
|
||||
}
|
||||
exit:
|
||||
rk_mpa_free(&bn_hash);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2024 Rockchip Electronics Co., Ltd
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <malloc.h>
|
||||
#include <rockchip/crypto_mpa.h>
|
||||
|
||||
int rk_mpa_alloc(struct mpa_num **mpa, void *data, u32 word_size)
|
||||
{
|
||||
u32 alignment = sizeof(u32);
|
||||
u32 byte_size = word_size * sizeof(u32);
|
||||
struct mpa_num *tmp_mpa = NULL;
|
||||
|
||||
if (!mpa || word_size == 0)
|
||||
return -EINVAL;
|
||||
|
||||
*mpa = NULL;
|
||||
|
||||
tmp_mpa = malloc(sizeof(*tmp_mpa));
|
||||
if (!tmp_mpa)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(tmp_mpa, 0x00, sizeof(*tmp_mpa));
|
||||
|
||||
if (!data || (unsigned long)data % alignment) {
|
||||
tmp_mpa->d = memalign(alignment, byte_size);
|
||||
if (!tmp_mpa->d) {
|
||||
free(tmp_mpa);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (data)
|
||||
memcpy(tmp_mpa->d, data, byte_size);
|
||||
else
|
||||
memset(tmp_mpa->d, 0x00, byte_size);
|
||||
|
||||
tmp_mpa->alloc = MPA_USE_ALLOC;
|
||||
} else {
|
||||
tmp_mpa->d = data;
|
||||
}
|
||||
|
||||
tmp_mpa->size = word_size;
|
||||
|
||||
*mpa = tmp_mpa;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rk_mpa_free(struct mpa_num **mpa)
|
||||
{
|
||||
struct mpa_num *tmp_mpa = NULL;
|
||||
|
||||
if (mpa && (*mpa)) {
|
||||
tmp_mpa = *mpa;
|
||||
if (tmp_mpa->alloc == MPA_USE_ALLOC)
|
||||
free(tmp_mpa->d);
|
||||
|
||||
free(tmp_mpa);
|
||||
}
|
||||
}
|
||||
|
||||
/*get bignum data length*/
|
||||
int rk_check_size(u32 *data, u32 max_word_size)
|
||||
{
|
||||
for (int i = (max_word_size - 1); i >= 0; i--) {
|
||||
if (data[i] == 0)
|
||||
continue;
|
||||
else
|
||||
return (i + 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -0,0 +1,623 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Crypto acceleration support for Rockchip crypto engine
|
||||
*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
* Author: Lin Jinhan <troy.lin@rock-chips.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/bug.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include "rockchip/rkce_core.h"
|
||||
#include "rockchip/rkce_debug.h"
|
||||
#include "rockchip/rkce_error.h"
|
||||
#include "rockchip/rkce_reg.h"
|
||||
|
||||
struct rkce_chn_info {
|
||||
void *td_virt;
|
||||
uint32_t int_st;
|
||||
uint32_t td_id;
|
||||
int result;
|
||||
|
||||
request_cb_func cb_func;
|
||||
};
|
||||
|
||||
struct rkce_hardware {
|
||||
struct RKCE_REG *rkce_reg;
|
||||
|
||||
struct rkce_chn_info chn[RKCE_TD_TYPE_MAX];
|
||||
};
|
||||
|
||||
#define RST_TIMEOUT_MS 100
|
||||
#define TD_PUSH_TIMEOUT_MS 3000
|
||||
|
||||
#define IP_VERSION_MASK (0xfU >> 28)
|
||||
#define IP_VERSION_RKCE (0x1U >> 28)
|
||||
#define GET_IP_VERSION(ver) ((ver) & IP_VERSION_MASK)
|
||||
|
||||
#define IS_SYMM_TD(td_type) ((td_type) == RKCE_TD_TYPE_SYMM || \
|
||||
(td_type) == RKCE_TD_TYPE_SYMM_HASH_IN || \
|
||||
(td_type) == RKCE_TD_TYPE_SYMM_HASH_OUT)
|
||||
|
||||
#define IS_HASH_TD(td_type) ((td_type) == RKCE_TD_TYPE_HASH)
|
||||
|
||||
#define GET_RKCE_REG(hardware) (((struct rkce_hardware *)(hardware))->rkce_reg)
|
||||
#define CHECK_RKCE_INITED(hardware) WARN_ON_ONCE(!(hardware) || \
|
||||
!(((struct rkce_hardware *)(hardware))->rkce_reg))
|
||||
#define POLL_TIMEOUT(condition, timeout_ms) ({ \
|
||||
int timeout = timeout_ms; \
|
||||
while ((condition) && timeout--) { \
|
||||
udelay(1000); \
|
||||
} \
|
||||
if (timeout < 0) \
|
||||
rk_err("%s timeout!\n", #condition); \
|
||||
(timeout < 0) ? -RKCE_TIMEOUT : 0; \
|
||||
})
|
||||
|
||||
static const uint32_t cipher_mode2bit_mask[] = {
|
||||
[RKCE_SYMM_MODE_ECB] = RKCE_AES_VER_ECB_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CBC] = RKCE_AES_VER_CBC_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CFB] = RKCE_AES_VER_CFB_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_OFB] = RKCE_AES_VER_OFB_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CTR] = RKCE_AES_VER_CTR_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_XTS] = RKCE_AES_VER_XTS_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CTS] = RKCE_AES_VER_CTS_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CCM] = RKCE_AES_VER_CCM_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_GCM] = RKCE_AES_VER_GCM_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CMAC] = RKCE_AES_VER_CMAC_FLAG_MASK,
|
||||
[RKCE_SYMM_MODE_CBC_MAC] = RKCE_AES_VER_CBC_MAC_FLAG_MASK,
|
||||
};
|
||||
|
||||
static const uint32_t hash_algo2bit_mask[] = {
|
||||
[RKCE_HASH_ALGO_SHA1] = RKCE_HASH_VER_SHA1_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA224] = RKCE_HASH_VER_SHA224_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA256] = RKCE_HASH_VER_SHA256_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA384] = RKCE_HASH_VER_SHA384_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA512] = RKCE_HASH_VER_SHA512_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA512_224] = RKCE_HASH_VER_SHA512_224_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA512_256] = RKCE_HASH_VER_SHA512_256_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_MD5] = RKCE_HASH_VER_MD5_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SM3] = RKCE_HASH_VER_SM3_FLAG_MASK,
|
||||
};
|
||||
|
||||
static const uint32_t hmac_algo2bit_mask[] = {
|
||||
[RKCE_HASH_ALGO_SHA1] = RKCE_HMAC_VER_SHA1_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA256] = RKCE_HMAC_VER_SHA256_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SHA512] = RKCE_HMAC_VER_SHA512_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_MD5] = RKCE_HMAC_VER_MD5_FLAG_MASK,
|
||||
[RKCE_HASH_ALGO_SM3] = RKCE_HMAC_VER_SM3_FLAG_MASK,
|
||||
};
|
||||
|
||||
static bool rk_is_cipher_support(struct RKCE_REG *rkce_reg,
|
||||
uint32_t algo, uint32_t mode, uint32_t key_len)
|
||||
{
|
||||
uint32_t version = 0;
|
||||
uint32_t mask = 0;
|
||||
bool key_len_valid = true;
|
||||
|
||||
switch (algo) {
|
||||
case RKCE_SYMM_ALGO_DES:
|
||||
case RKCE_SYMM_ALGO_TDES:
|
||||
version = rkce_reg->DES_VER;
|
||||
|
||||
if (key_len == RKCE_DES_BLOCK_SIZE)
|
||||
key_len_valid = true;
|
||||
else if (key_len == 2 * RKCE_DES_BLOCK_SIZE ||
|
||||
key_len == 3 * RKCE_DES_BLOCK_SIZE)
|
||||
key_len_valid = version & RKCE_DES_VER_TDES_FLAG_MASK;
|
||||
else
|
||||
key_len_valid = false;
|
||||
break;
|
||||
case RKCE_SYMM_ALGO_AES:
|
||||
version = rkce_reg->AES_VER;
|
||||
|
||||
if (key_len == RKCE_AES_KEYSIZE_128)
|
||||
key_len_valid = version & RKCE_AES_VER_AES128_FLAG_MASK;
|
||||
else if (key_len == RKCE_AES_KEYSIZE_192)
|
||||
key_len_valid = version & RKCE_AES_VER_AES192_FLAG_MASK;
|
||||
else if (key_len == RKCE_KEY_AES_256)
|
||||
key_len_valid = version & RKCE_AES_VER_AES256_FLAG_MASK;
|
||||
else
|
||||
key_len_valid = false;
|
||||
break;
|
||||
case RKCE_SYMM_ALGO_SM4:
|
||||
version = rkce_reg->SM4_VER;
|
||||
|
||||
key_len_valid = (key_len == RKCE_SM4_KEYSIZE) ? true : false;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
mask = cipher_mode2bit_mask[mode];
|
||||
|
||||
if (key_len == 0)
|
||||
key_len_valid = true;
|
||||
|
||||
return (version & mask) && key_len_valid;
|
||||
}
|
||||
|
||||
static bool rk_is_hash_support(struct RKCE_REG *rkce_reg, uint32_t algo, uint32_t type)
|
||||
{
|
||||
uint32_t version = 0;
|
||||
uint32_t mask = 0;
|
||||
|
||||
if (type == RKCE_ALGO_TYPE_HMAC) {
|
||||
version = rkce_reg->HMAC_VER;
|
||||
mask = hmac_algo2bit_mask[algo];
|
||||
} else if (type == RKCE_ALGO_TYPE_HASH) {
|
||||
version = rkce_reg->HASH_VER;
|
||||
mask = hash_algo2bit_mask[algo];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return version & mask;
|
||||
}
|
||||
|
||||
static bool rk_is_asym_support(struct RKCE_REG *rkce_reg, uint32_t algo)
|
||||
{
|
||||
switch (algo) {
|
||||
case RKCE_ASYM_ALGO_RSA:
|
||||
return !!rkce_reg->PKA_VER;
|
||||
case RKCE_ASYM_ALGO_ECC_P192:
|
||||
case RKCE_ASYM_ALGO_ECC_P224:
|
||||
case RKCE_ASYM_ALGO_ECC_P256:
|
||||
case RKCE_ASYM_ALGO_SM2:
|
||||
return !!rkce_reg->ECC_MAX_CURVE_WIDE;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool rkce_hw_algo_valid(void *rkce_hw, uint32_t type, uint32_t algo, uint32_t mode)
|
||||
{
|
||||
struct RKCE_REG *rkce_reg;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
if (type == RKCE_ALGO_TYPE_CIPHER || type == RKCE_ALGO_TYPE_AEAD) {
|
||||
rk_debug("CIPHER");
|
||||
return rk_is_cipher_support(rkce_reg, algo, mode, 0);
|
||||
} else if (type == RKCE_ALGO_TYPE_HASH || type == RKCE_ALGO_TYPE_HMAC) {
|
||||
rk_debug("HASH/HMAC");
|
||||
return rk_is_hash_support(rkce_reg, algo, type);
|
||||
} else if (type == RKCE_ALGO_TYPE_ASYM) {
|
||||
rk_debug("ASYM");
|
||||
return rk_is_asym_support(rkce_reg, algo);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t rkce_get_td_type(void *td)
|
||||
{
|
||||
if (!td)
|
||||
return ~((uint32_t)0);
|
||||
|
||||
return ((struct rkce_symm_td *)td)->ctrl.td_type;
|
||||
}
|
||||
|
||||
int rkce_soft_reset(void *rkce_hw, uint32_t reset_sel)
|
||||
{
|
||||
struct RKCE_REG *rkce_reg;
|
||||
uint32_t value = 0;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
if (reset_sel & RKCE_RESET_SYMM)
|
||||
value |= RKCE_RST_CTL_SW_SYMM_RESET_SHIFT;
|
||||
|
||||
if (reset_sel & RKCE_RESET_HASH)
|
||||
value |= RKCE_RST_CTL_SW_HASH_RESET_SHIFT;
|
||||
|
||||
if (reset_sel & RKCE_RESET_PKA)
|
||||
value |= RKCE_RST_CTL_SW_PKA_RESET_SHIFT;
|
||||
|
||||
rkce_reg->RST_CTL = value | RKCE_WRITE_MASK_ALL;
|
||||
|
||||
return POLL_TIMEOUT(rkce_reg->RST_CTL, RST_TIMEOUT_MS);
|
||||
}
|
||||
|
||||
static int rkce_check_version(struct RKCE_REG *rkce_reg)
|
||||
{
|
||||
rk_debug("rkce_reg->CE_VER = %08x\n", rkce_reg->CE_VER);
|
||||
|
||||
if (GET_IP_VERSION(rkce_reg->CE_VER) != IP_VERSION_RKCE) {
|
||||
rk_err("IP version is %08x not a RKCE module.\n", rkce_reg->CE_VER);
|
||||
return -RKCE_FAULT;
|
||||
}
|
||||
|
||||
return RKCE_SUCCESS;
|
||||
}
|
||||
|
||||
static int rkce_init(void *rkce_hw)
|
||||
{
|
||||
struct RKCE_REG *rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
uint32_t value = 0;
|
||||
int ret;
|
||||
|
||||
ret = rkce_check_version(rkce_hw);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
rkce_soft_reset(rkce_hw, RKCE_RESET_SYMM | RKCE_RESET_HASH | RKCE_RESET_PKA);
|
||||
|
||||
/* clear symm interrupt register */
|
||||
rkce_reg->SYMM_INT_EN = 0;
|
||||
value = rkce_reg->SYMM_INT_ST;
|
||||
rkce_reg->SYMM_INT_ST = value;
|
||||
|
||||
ret = POLL_TIMEOUT(rkce_reg->SYMM_INT_ST, RST_TIMEOUT_MS);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
/* clear hash interrupt register */
|
||||
rkce_reg->HASH_INT_EN = 0;
|
||||
value = rkce_reg->HASH_INT_ST;
|
||||
rkce_reg->HASH_INT_ST = value;
|
||||
|
||||
ret = POLL_TIMEOUT(rkce_reg->HASH_INT_ST, RST_TIMEOUT_MS);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
if (rkce_reg->SYMM_CONTEXT_SIZE != RKCE_TD_SYMM_CTX_SIZE) {
|
||||
rk_err("rkce symm context size (%u) != %u\n",
|
||||
rkce_reg->SYMM_CONTEXT_SIZE, RKCE_TD_SYMM_CTX_SIZE);
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
if (rkce_reg->HASH_CONTEXT_SIZE != RKCE_TD_HASH_CTX_SIZE) {
|
||||
rk_err("rkce hash context size (%u) != %u\n",
|
||||
rkce_reg->HASH_CONTEXT_SIZE, RKCE_TD_HASH_CTX_SIZE);
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void *rkce_hardware_alloc(void __iomem *reg_base)
|
||||
{
|
||||
struct rkce_hardware *hardware;
|
||||
|
||||
rk_debug("reg_base = %p", reg_base);
|
||||
|
||||
if (!reg_base)
|
||||
return NULL;
|
||||
|
||||
hardware = malloc(sizeof(*hardware));
|
||||
if (!hardware)
|
||||
return NULL;
|
||||
|
||||
hardware->rkce_reg = reg_base;
|
||||
|
||||
if (rkce_init(hardware) != 0) {
|
||||
free(hardware);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rk_debug("hardware = %p", hardware);
|
||||
|
||||
return hardware;
|
||||
}
|
||||
|
||||
void rkce_hardware_free(void *rkce_hw)
|
||||
{
|
||||
if (!rkce_hw)
|
||||
return;
|
||||
|
||||
free(rkce_hw);
|
||||
}
|
||||
|
||||
void rkce_dump_reginfo(void *rkce_hw)
|
||||
{
|
||||
struct RKCE_REG *rkce_reg;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
rk_info("\n============================== reg info ===========================\n");
|
||||
rk_info("FIFO_ST = %08x\n", rkce_reg->FIFO_ST);
|
||||
rk_info("\n");
|
||||
rk_info("SYMM_INT_EN = %08x\n", rkce_reg->SYMM_INT_EN);
|
||||
rk_info("SYMM_INT_ST = %08x\n", rkce_reg->SYMM_INT_ST);
|
||||
rk_info("SYMM_TD_ST = %08x\n", rkce_reg->SYMM_TD_ST);
|
||||
rk_info("SYMM_TD_ID = %08x\n", rkce_reg->SYMM_TD_ID);
|
||||
rk_info("SYMM_ST_DBG = %08x\n", rkce_reg->SYMM_ST_DBG);
|
||||
rk_info("SYMM_TD_ADDR_DBG = %08x\n", rkce_reg->SYMM_TD_ADDR_DBG);
|
||||
rk_info("SYMM_TD_GRANT_DBG = %08x\n", rkce_reg->SYMM_TD_GRANT_DBG);
|
||||
rk_info("\n");
|
||||
rk_info("HASH_INT_EN = %08x\n", rkce_reg->HASH_INT_EN);
|
||||
rk_info("HASH_INT_ST = %08x\n", rkce_reg->HASH_INT_ST);
|
||||
rk_info("HASH_TD_ST = %08x\n", rkce_reg->HASH_TD_ST);
|
||||
rk_info("HASH_TD_ID = %08x\n", rkce_reg->HASH_TD_ID);
|
||||
rk_info("HASH_ST_DBG = %08x\n", rkce_reg->HASH_ST_DBG);
|
||||
rk_info("HASH_TD_ADDR_DBG = %08x\n", rkce_reg->HASH_TD_ADDR_DBG);
|
||||
rk_info("HASH_TD_GRANT_DBG = %08x\n", rkce_reg->HASH_TD_GRANT_DBG);
|
||||
rk_info("===================================================================\n");
|
||||
}
|
||||
|
||||
int rkce_push_td(void *rkce_hw, void *td)
|
||||
{
|
||||
int ret = RKCE_SUCCESS;
|
||||
struct RKCE_REG *rkce_reg;
|
||||
uint32_t td_type;
|
||||
struct rkce_hardware *hardware = rkce_hw;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
if (!td)
|
||||
return -RKCE_INVAL;
|
||||
|
||||
td_type = rkce_get_td_type(td);
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
rkce_dump_td(td);
|
||||
|
||||
if (IS_SYMM_TD(td_type)) {
|
||||
rk_debug("rkce symm push td virt(%p), phys(%lx)\n",
|
||||
td, rkce_cma_virt2phys(td));
|
||||
|
||||
WRITE_ONCE(rkce_reg->SYMM_INT_EN, 0x3f);
|
||||
|
||||
/* wait symm fifo valid */
|
||||
ret = POLL_TIMEOUT(rkce_reg->TD_LOAD_CTRL & RKCE_TD_LOAD_CTRL_SYMM_TLR_MASK,
|
||||
TD_PUSH_TIMEOUT_MS);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
/* set task desc address */
|
||||
rkce_reg->TD_ADDR = rkce_cma_virt2phys(td);
|
||||
hardware->chn[RKCE_TD_TYPE_SYMM].td_virt = td;
|
||||
|
||||
/* tell rkce to load task desc address as symm td */
|
||||
rkce_reg->TD_LOAD_CTRL = 0xffff0000 | RKCE_TD_LOAD_CTRL_SYMM_TLR_MASK;
|
||||
} else if (IS_HASH_TD(td_type)) {
|
||||
rk_debug("rkce hash push td virt(%p), phys(%lx)\n",
|
||||
td, rkce_cma_virt2phys(td));
|
||||
|
||||
WRITE_ONCE(rkce_reg->HASH_INT_EN, 0x3f);
|
||||
|
||||
/* wait hash fifo valid */
|
||||
ret = POLL_TIMEOUT(rkce_reg->TD_LOAD_CTRL & RKCE_TD_LOAD_CTRL_HASH_TLR_MASK,
|
||||
TD_PUSH_TIMEOUT_MS);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
/* set task desc address */
|
||||
rkce_reg->TD_ADDR = rkce_cma_virt2phys(td);
|
||||
hardware->chn[RKCE_TD_TYPE_HASH].td_virt = td;
|
||||
|
||||
/* tell rkce to load task desc address as hash td */
|
||||
rkce_reg->TD_LOAD_CTRL = 0xffff0000 | RKCE_TD_LOAD_CTRL_HASH_TLR_MASK;
|
||||
} else {
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rkce_push_td_sync(void *rkce_hw, void *td, uint32_t timeout_ms)
|
||||
{
|
||||
int ret = RKCE_SUCCESS;
|
||||
struct RKCE_REG *rkce_reg;
|
||||
uint32_t td_type;
|
||||
uint32_t value, mask;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
if (!td)
|
||||
return -RKCE_INVAL;
|
||||
|
||||
td_type = rkce_get_td_type(td);
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
rkce_dump_td(td);
|
||||
|
||||
if (IS_SYMM_TD(td_type)) {
|
||||
rk_debug("rkce symm push td virt(%p), phys(%lx)\n",
|
||||
td, rkce_cma_virt2phys(td));
|
||||
|
||||
WRITE_ONCE(rkce_reg->SYMM_INT_EN, 0x00);
|
||||
|
||||
/* wait symm fifo valid */
|
||||
ret = POLL_TIMEOUT(rkce_reg->TD_LOAD_CTRL & RKCE_TD_LOAD_CTRL_SYMM_TLR_MASK,
|
||||
timeout_ms);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
/* set task desc address */
|
||||
rkce_reg->TD_ADDR = rkce_cma_virt2phys(td);
|
||||
|
||||
/* tell rkce to load task desc address as symm td */
|
||||
rkce_reg->TD_LOAD_CTRL = 0xffff0000 | RKCE_TD_LOAD_CTRL_SYMM_TLR_MASK;
|
||||
|
||||
/* wait symm done */
|
||||
ret = POLL_TIMEOUT(!(rkce_reg->SYMM_INT_ST), timeout_ms);
|
||||
mask = RKCE_SYMM_INT_ST_TD_DONE_MASK;
|
||||
value = READ_ONCE(rkce_reg->SYMM_INT_ST);
|
||||
WRITE_ONCE(rkce_reg->SYMM_INT_ST, value);
|
||||
rk_debug("symm ret = %d, value = %08x, IN_ST = %08x\n",
|
||||
ret, value, READ_ONCE(rkce_reg->SYMM_INT_ST));
|
||||
} else if (IS_HASH_TD(td_type)) {
|
||||
rk_debug("rkce hash push td virt(%p), phys(%lx)\n",
|
||||
td, rkce_cma_virt2phys(td));
|
||||
|
||||
WRITE_ONCE(rkce_reg->HASH_INT_EN, 0x00);
|
||||
|
||||
/* wait hash fifo valid */
|
||||
ret = POLL_TIMEOUT(rkce_reg->TD_LOAD_CTRL & RKCE_TD_LOAD_CTRL_HASH_TLR_MASK,
|
||||
timeout_ms);
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
/* set task desc address */
|
||||
rkce_reg->TD_ADDR = rkce_cma_virt2phys(td);
|
||||
|
||||
/* tell rkce to load task desc address as hash td */
|
||||
rkce_reg->TD_LOAD_CTRL = 0xffff0000 | RKCE_TD_LOAD_CTRL_HASH_TLR_MASK;
|
||||
|
||||
/* wait hash done */
|
||||
ret = POLL_TIMEOUT(!(rkce_reg->HASH_INT_ST), timeout_ms);
|
||||
mask = RKCE_HASH_INT_ST_TD_DONE_MASK;
|
||||
value = READ_ONCE(rkce_reg->HASH_INT_ST);
|
||||
WRITE_ONCE(rkce_reg->HASH_INT_ST, value);
|
||||
rk_debug("hash ret = %d, value = %08x, INT_ST = %08x\n",
|
||||
ret, value, READ_ONCE(rkce_reg->HASH_INT_ST));
|
||||
} else {
|
||||
rk_debug("unknown td_type = %u\n", td_type);
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
ret = (value == mask) ? 0 : -RKCE_FAULT;
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rkce_init_symm_td(struct rkce_symm_td *td, struct rkce_symm_td_buf *buf)
|
||||
{
|
||||
if (!td ||
|
||||
!buf ||
|
||||
!rkce_cma_virt2phys(td) ||
|
||||
!rkce_cma_virt2phys(buf)) {
|
||||
rk_debug("td = %p buf = %p", td, buf);
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
memset(td, 0x00, sizeof(*td));
|
||||
|
||||
td->ctrl.td_type = RKCE_TD_TYPE_SYMM;
|
||||
td->task_id = rkce_cma_virt2phys(buf);
|
||||
td->key_addr = rkce_cma_virt2phys(buf->key1);
|
||||
td->iv_addr = rkce_cma_virt2phys(buf->iv);
|
||||
td->gcm_len_addr = rkce_cma_virt2phys(&buf->gcm_len);
|
||||
td->tag_addr = rkce_cma_virt2phys(buf->tag);
|
||||
td->symm_ctx_addr = rkce_cma_virt2phys(buf->ctx);
|
||||
|
||||
return RKCE_SUCCESS;
|
||||
}
|
||||
|
||||
int rkce_init_hash_td(struct rkce_hash_td *td, struct rkce_hash_td_buf *buf)
|
||||
{
|
||||
if (!td ||
|
||||
!buf ||
|
||||
!rkce_cma_virt2phys(td) ||
|
||||
!rkce_cma_virt2phys(buf)) {
|
||||
rk_debug("td = %p buf = %p", td, buf);
|
||||
return -RKCE_INVAL;
|
||||
}
|
||||
|
||||
memset(td, 0x00, sizeof(*td));
|
||||
|
||||
td->ctrl.td_type = RKCE_TD_TYPE_HASH;
|
||||
td->task_id = rkce_cma_virt2phys(buf);
|
||||
td->key_addr = rkce_cma_virt2phys(buf->key);
|
||||
td->hash_addr = rkce_cma_virt2phys(buf->hash);
|
||||
td->hash_ctx_addr = rkce_cma_virt2phys(buf->ctx);
|
||||
|
||||
return RKCE_SUCCESS;
|
||||
}
|
||||
|
||||
int rkce_irq_callback_set(void *rkce_hw, enum rkce_td_type td_type, request_cb_func cb_func)
|
||||
{
|
||||
struct rkce_hardware *hardware = rkce_hw;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
if (!cb_func)
|
||||
return -RKCE_INVAL;
|
||||
|
||||
if (td_type == RKCE_TD_TYPE_SYMM)
|
||||
hardware->chn[RKCE_TD_TYPE_SYMM].cb_func = cb_func;
|
||||
else if (td_type == RKCE_TD_TYPE_HASH)
|
||||
hardware->chn[RKCE_TD_TYPE_HASH].cb_func = cb_func;
|
||||
else
|
||||
return -RKCE_INVAL;
|
||||
|
||||
return RKCE_SUCCESS;
|
||||
}
|
||||
|
||||
void rkce_irq_handler(void *rkce_hw)
|
||||
{
|
||||
struct rkce_chn_info *cur_chn;
|
||||
struct RKCE_REG *rkce_reg;
|
||||
struct rkce_hardware *hardware = rkce_hw;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
rkce_reg = GET_RKCE_REG(rkce_hw);
|
||||
|
||||
if (rkce_reg->SYMM_INT_ST) {
|
||||
cur_chn = &hardware->chn[RKCE_TD_TYPE_SYMM];
|
||||
cur_chn->int_st = READ_ONCE(rkce_reg->SYMM_INT_ST);
|
||||
cur_chn->td_id = rkce_reg->SYMM_TD_ID;
|
||||
|
||||
/* clear symm int */
|
||||
WRITE_ONCE(rkce_reg->SYMM_INT_ST, cur_chn->int_st);
|
||||
|
||||
cur_chn->result = (cur_chn->int_st == RKCE_SYMM_INT_ST_TD_DONE_MASK) ?
|
||||
RKCE_SUCCESS : cur_chn->int_st;
|
||||
}
|
||||
|
||||
if (rkce_reg->HASH_INT_ST) {
|
||||
cur_chn = &hardware->chn[RKCE_TD_TYPE_HASH];
|
||||
cur_chn->int_st = READ_ONCE(rkce_reg->HASH_INT_ST);
|
||||
cur_chn->td_id = rkce_reg->HASH_TD_ID;
|
||||
|
||||
/* clear hash int */
|
||||
WRITE_ONCE(rkce_reg->HASH_INT_ST, cur_chn->int_st);
|
||||
|
||||
cur_chn->result = (cur_chn->int_st == RKCE_HASH_INT_ST_TD_DONE_MASK) ?
|
||||
RKCE_SUCCESS : cur_chn->int_st;
|
||||
}
|
||||
}
|
||||
|
||||
void rkce_irq_thread(void *rkce_hw)
|
||||
{
|
||||
uint32_t i;
|
||||
bool is_fault = false;
|
||||
struct rkce_hardware *hardware = rkce_hw;
|
||||
|
||||
CHECK_RKCE_INITED(rkce_hw);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hardware->chn); i++) {
|
||||
struct rkce_chn_info *cur_chn = &hardware->chn[i];
|
||||
|
||||
if (cur_chn->result) {
|
||||
is_fault = true;
|
||||
rk_err("td_type = %u, wrong SISR = %08x, td_id = %08x, td_virt = %p\n",
|
||||
i, cur_chn->int_st, cur_chn->td_id, cur_chn->td_virt);
|
||||
}
|
||||
|
||||
if (cur_chn->int_st == 0 || !(cur_chn->cb_func))
|
||||
continue;
|
||||
|
||||
rk_debug("##################### finalize td %p, result = %d\n",
|
||||
cur_chn->td_virt, cur_chn->result);
|
||||
|
||||
if (cur_chn->cb_func && cur_chn->td_virt)
|
||||
cur_chn->cb_func(cur_chn->result, cur_chn->td_id, cur_chn->td_virt);
|
||||
|
||||
cur_chn->result = 0;
|
||||
cur_chn->int_st = 0;
|
||||
cur_chn->td_id = 0;
|
||||
cur_chn->td_virt = NULL;
|
||||
}
|
||||
|
||||
if (is_fault)
|
||||
rkce_dump_reginfo(hardware);
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
menu "Keylad devices"
|
||||
|
||||
config SPL_DM_KEYLAD
|
||||
bool "Enable Driver Model for KEYLAD drivers in spl"
|
||||
depends on SPL_DM
|
||||
---help---
|
||||
This config enables the dm keylad support.
|
||||
|
||||
endmenu
|
||||
@ -0,0 +1,6 @@
|
||||
#
|
||||
# Copyright (c) 2025 Rockchip Electronics Co., Ltd
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
obj-$(CONFIG_$(SPL_TPL_)DM_KEYLAD) += keylad-uclass.o rk_keylad.o
|
||||
@ -0,0 +1,49 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd
|
||||
*/
|
||||
|
||||
#include <keylad.h>
|
||||
|
||||
struct udevice *keylad_get_device(void)
|
||||
{
|
||||
const struct dm_keylad_ops *ops;
|
||||
struct udevice *dev;
|
||||
struct uclass *uc;
|
||||
int ret;
|
||||
|
||||
ret = uclass_get(UCLASS_KEYLAD, &uc);
|
||||
if (ret)
|
||||
return NULL;
|
||||
|
||||
for (uclass_first_device(UCLASS_KEYLAD, &dev);
|
||||
dev;
|
||||
uclass_next_device(&dev)) {
|
||||
ops = device_get_ops(dev);
|
||||
if (!ops || !ops->transfer_fwkey)
|
||||
continue;
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int keylad_transfer_fwkey(struct udevice *dev, ulong dst,
|
||||
enum RK_FW_KEYID fw_keyid, u32 keylen)
|
||||
{
|
||||
const struct dm_keylad_ops *ops = device_get_ops(dev);
|
||||
|
||||
if (!ops || !ops->transfer_fwkey)
|
||||
return -ENOSYS;
|
||||
|
||||
if (dst == 0)
|
||||
return -EINVAL;
|
||||
|
||||
return ops->transfer_fwkey(dev, dst, fw_keyid, keylen);
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(keylad) = {
|
||||
.id = UCLASS_KEYLAD,
|
||||
.name = "keylad",
|
||||
};
|
||||
@ -0,0 +1,221 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <clk.h>
|
||||
#include <keylad.h>
|
||||
#include <dm.h>
|
||||
#include <asm/io.h>
|
||||
#include <clk-uclass.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/clock.h>
|
||||
|
||||
#define KEYLAD_APB_CMD 0x0450
|
||||
#define REG_APB_CMD_EN BIT(0)
|
||||
#define VALUE_APB_CMD_DISABLE 0
|
||||
#define VALUE_APB_CMD_ENABLE BIT(0)
|
||||
|
||||
#define KEYLAD_APB_PADDR 0x0454
|
||||
#define KEYLAD_APB_PWDATA 0x0458
|
||||
#define KEYLAD_APB_PWRITE 0x045C
|
||||
#define KEYLAD_DATA_CTL 0x0460
|
||||
#define VALUE_DATA_CTL_EN BIT(15)
|
||||
|
||||
#define KEYLAD_KEY_SEL 0x0610
|
||||
#define VALUE_KEY_SEL_OUTER_KEY 0x00000000
|
||||
|
||||
#define KEYLAD_LOCKSTEP_FLAG 0x0618
|
||||
#define KEYLAD_LOCKSTEP_EN 0x061C
|
||||
|
||||
#define KEY_LADDER_OTP_KEY_REQ 0x0640
|
||||
#define KL_OTP_KEY_REQ_DST_ADDR(addr) ((addr) & 0x3) // 256bit algin address
|
||||
#define KL_OTP_KEY_REQ_BYTE_SWAP BIT(4)
|
||||
#define KL_OTP_KEY_REQ_WORD_SWAP BIT(5)
|
||||
#define KL_OTP_KEY_REQ_EN BIT(8)
|
||||
#define KL_OTP_KEY_ECC_ST BIT(12)
|
||||
#define KL_OTP_KEY_REQ_SRC_ADDR(addr) (((addr) & 0xffff) << 16)// byte address, dword align
|
||||
|
||||
#define KEY_LADDER_KEY_LEN 0x0648
|
||||
#define KL_KEY_LEN(len) ((len) & 0x3f)
|
||||
|
||||
#define KEYLAD_KEY_REG_SIZE_BYTES 4
|
||||
#define KEYLAD_KEY_REG_NUM 32
|
||||
#define KEYLAD_AREA_NUM 2
|
||||
|
||||
#define RK_KEYLAD_TIME_OUT 10000 /* max 10ms */
|
||||
|
||||
#define KEYLAD_POLL_TIMEOUT(condition, timeout, ret) do { \
|
||||
u32 time_out = timeout; \
|
||||
while (condition) { \
|
||||
if (time_out-- == 0) { \
|
||||
printf("[%s] %d: time out!\n", __func__, __LINE__); \
|
||||
ret = -ETIMEDOUT; \
|
||||
break; \
|
||||
} \
|
||||
udelay(1); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
struct rockchip_keylad_priv {
|
||||
fdt_addr_t reg;
|
||||
};
|
||||
|
||||
fdt_addr_t keylad_base;
|
||||
|
||||
static inline u32 keylad_read(u32 offset)
|
||||
{
|
||||
return readl(keylad_base + offset);
|
||||
}
|
||||
|
||||
static inline void keylad_write(u32 offset, u32 val)
|
||||
{
|
||||
writel(val, keylad_base + offset);
|
||||
}
|
||||
|
||||
static int rk_get_fwkey_param(u32 keyid, u32 *offset, u32 *max_len)
|
||||
{
|
||||
switch (keyid) {
|
||||
case RK_FW_KEY0:
|
||||
*offset = OEM_CIPHER_KEY_FW_ADDR;
|
||||
*max_len = OEM_CIPHER_KEY_FW_LEN;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk_keylad_send_key(u32 key_reg, u32 n_words, ulong dst_addr)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
/* key_reg of 32bits can be 0-31 */
|
||||
if ((key_reg + n_words) > KEYLAD_KEY_REG_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
for (u32 i = 0; i < n_words; i++) {
|
||||
/* set destination addr */
|
||||
keylad_write(KEYLAD_APB_PADDR,
|
||||
(dst_addr & 0xffffffff) + (i * KEYLAD_KEY_REG_SIZE_BYTES));
|
||||
/* select which word of key table to be sent */
|
||||
keylad_write(KEYLAD_APB_PWDATA, key_reg + i);
|
||||
|
||||
keylad_write(KEYLAD_APB_CMD, VALUE_APB_CMD_ENABLE);
|
||||
KEYLAD_POLL_TIMEOUT((keylad_read(KEYLAD_APB_CMD) & REG_APB_CMD_EN) ==
|
||||
VALUE_APB_CMD_ENABLE, RK_KEYLAD_TIME_OUT, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rk_keylad_read_otp_key(u32 otp_offset, u32 keylad_area, u32 keylen)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 val = 0;
|
||||
u32 nbytes = keylen;
|
||||
|
||||
/* keylad_area of 256bits can be 0-1 */
|
||||
if (keylad_area >= KEYLAD_AREA_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
// rk_otp_keylad_read_init();
|
||||
|
||||
/* src use byte address, dst use keytable block address */
|
||||
val = KL_OTP_KEY_REQ_SRC_ADDR(otp_offset / 2) |
|
||||
KL_OTP_KEY_REQ_DST_ADDR(keylad_area) |
|
||||
KL_OTP_KEY_REQ_BYTE_SWAP |
|
||||
KL_OTP_KEY_REQ_EN;
|
||||
|
||||
keylad_write(KEYLAD_KEY_SEL, VALUE_KEY_SEL_OUTER_KEY);
|
||||
|
||||
keylad_write(KEY_LADDER_KEY_LEN, KL_KEY_LEN(nbytes));
|
||||
|
||||
keylad_write(KEY_LADDER_OTP_KEY_REQ, val);
|
||||
|
||||
KEYLAD_POLL_TIMEOUT(keylad_read(KEY_LADDER_OTP_KEY_REQ) & KL_OTP_KEY_REQ_EN,
|
||||
RK_KEYLAD_TIME_OUT, ret);
|
||||
|
||||
val = keylad_read(KEY_LADDER_OTP_KEY_REQ);
|
||||
if (val & KL_OTP_KEY_ECC_ST) {
|
||||
printf("KEYLAD transfer OTP key ECC check error!");
|
||||
ret = -EIO;
|
||||
}
|
||||
|
||||
// rk_otp_keylad_read_deinit();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rockchip_keylad_transfer_fwkey(struct udevice *dev, ulong dst,
|
||||
u32 fw_keyid, u32 keylen)
|
||||
{
|
||||
int res = 0;
|
||||
u32 fw_key_offset;
|
||||
u32 max_key_len = 0;
|
||||
|
||||
if (keylen % 4) {
|
||||
printf("key_len(%u) must be multiple of 4 error.", keylen);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
res = rk_get_fwkey_param(fw_keyid, &fw_key_offset, &max_key_len);
|
||||
if (res)
|
||||
return res;
|
||||
|
||||
if (keylen > max_key_len) {
|
||||
printf("key_len(%u) > %u error.", keylen, max_key_len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
res = rk_keylad_read_otp_key(fw_key_offset, 0, keylen);
|
||||
if (res) {
|
||||
printf("Keyladder read otp key err: 0x%x.", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/// TODO: enable clock
|
||||
res = rk_keylad_send_key(0, keylen / 4, dst);
|
||||
if (res) {
|
||||
printf("Keyladder transfer key err: 0x%x.", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static const struct dm_keylad_ops rockchip_keylad_ops = {
|
||||
.transfer_fwkey = rockchip_keylad_transfer_fwkey,
|
||||
};
|
||||
|
||||
static int rockchip_keylad_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct rockchip_keylad_priv *priv = dev_get_priv(dev);
|
||||
|
||||
memset(priv, 0x00, sizeof(*priv));
|
||||
|
||||
priv->reg = (fdt_addr_t)dev_read_addr_ptr(dev);
|
||||
if (priv->reg == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
keylad_base = priv->reg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct udevice_id rockchip_keylad_ids[] = {
|
||||
{
|
||||
.compatible = "rockchip,keylad",
|
||||
},
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(rockchip_keylad) = {
|
||||
.name = "rockchip_keylad",
|
||||
.id = UCLASS_KEYLAD,
|
||||
.of_match = rockchip_keylad_ids,
|
||||
.ops = &rockchip_keylad_ops,
|
||||
.ofdata_to_platdata = rockchip_keylad_ofdata_to_platdata,
|
||||
.priv_auto_alloc_size = sizeof(struct rockchip_keylad_priv),
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue