From 08c13941673a874edd9c16ef6a702d121f500415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8F=AF=E4=BA=AE?= Date: Mon, 2 Dec 2024 11:10:03 +0800 Subject: [PATCH] add cmu and userid patch --- bsp/artinchip/hal/cmu/aic_hal_pll_clk.c | 75 ++++++++++-------- packages/artinchip/userid/spinand_bare.c | 2 +- packages/artinchip/userid/spinand_rtt.c | 2 +- patches/20241204/CMU-PLL-PSRAM-instablity.tgz | Bin 0 -> 2837 bytes ...fix-heap-corrupt-by-buf-overflow-issue.tgz | Bin 0 -> 1800 bytes 5 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 patches/20241204/CMU-PLL-PSRAM-instablity.tgz create mode 100644 patches/20241204/userid-fix-heap-corrupt-by-buf-overflow-issue.tgz diff --git a/bsp/artinchip/hal/cmu/aic_hal_pll_clk.c b/bsp/artinchip/hal/cmu/aic_hal_pll_clk.c index b70b37d3..28bcdf17 100644 --- a/bsp/artinchip/hal/cmu/aic_hal_pll_clk.c +++ b/bsp/artinchip/hal/cmu/aic_hal_pll_clk.c @@ -92,6 +92,34 @@ static int clk_pll_is_enable(struct aic_clk_comm_cfg *comm_cfg) return 0; } +static void clk_pll_enable_sdm(struct aic_clk_pll_cfg *pll, unsigned long parent_rate, u32 factor_n) +{ + u32 reg_val, ppm_max, sdm_amp; + u64 sdm_step; + + ppm_max = 1000000 / (factor_n + 1); + /* 1% spread */ + if (ppm_max < PLL_SDM_SPREAD_PPM) + sdm_amp = 0; + else + sdm_amp = PLL_SDM_AMP_MAX - + PLL_SDM_SPREAD_PPM * PLL_SDM_AMP_MAX / ppm_max; + + /* SDM uses triangular wave, 33KHz by default */ + sdm_step = (u64)(PLL_SDM_AMP_MAX - sdm_amp) * 2 * PLL_SDM_SPREAD_FREQ; + do_div(sdm_step, parent_rate); + if (sdm_step > 511) + sdm_step = 511; + + reg_val = (1UL << PLL_SDM_EN_BIT) | + (2 << PLL_SDM_MODE_BIT) | + (sdm_step << PLL_SDM_STEP_BIT) | + (3 << PLL_SDM_FREQ_BIT) | + (sdm_amp << PLL_SDM_AMP_BIT); + + writel(reg_val, cmu_reg(pll->offset_sdm)); +} + static unsigned long clk_pll_recalc_rate(struct aic_clk_comm_cfg *comm_cfg, unsigned long parent_rate) { @@ -99,7 +127,7 @@ static unsigned long clk_pll_recalc_rate(struct aic_clk_comm_cfg *comm_cfg, u32 factor_n, factor_m, factor_p, fra_in; u64 rate, rate_int, rate_fra; u8 fra_en = 0; - u32 sdm_en = 0; + u32 reg_val, sdm_en, sdm_bot; /* PLL output mux is CLK_24M */ if (!((readl(cmu_reg(pll->offset_gen)) >> PLL_OUT_MUX) & 0x1)) @@ -126,14 +154,17 @@ static unsigned long clk_pll_recalc_rate(struct aic_clk_comm_cfg *comm_cfg, } if (pll->type == AIC_PLL_SDM) { - sdm_en = readl(cmu_reg(pll->offset_sdm)); - sdm_en >>= 31; + reg_val = readl(cmu_reg(pll->offset_sdm)); + sdm_en = reg_val >> 31; + sdm_bot = reg_val & 0xFFFF; - /* Pll is SDM mode, but SDM is not enable - * Create a small deviation, let sys setup again + /* + * When the PLL is fractional PLL, SDM_EN will also be set to 1, + * so SDM_BOT is needed to help determine whether the spreading function + * has been enabled. */ - if (sdm_en == 0) - rate += 1; + if (!sdm_en || !sdm_bot) + clk_pll_enable_sdm(pll, parent_rate, factor_n); } #ifdef FPGA_BOARD_ARTINCHIP rate = fpga_board_rate[pll->id]; @@ -192,9 +223,8 @@ static int clk_pll_set_rate(struct aic_clk_comm_cfg *comm_cfg, u32 factor_n, factor_m, factor_p, reg_val; u64 val, fra_in = 0; u8 fra_en, factor_m_en; + u32 sdm_en; unsigned long vco_rate, pll_vco_min, pll_vco_max; - u32 ppm_max, sdm_amp, sdm_en = 0; - u64 sdm_step; struct aic_clk_pll_cfg *pll = to_clk_pll(comm_cfg); if (pll->flag & CLK_NO_CHANGE) @@ -266,32 +296,7 @@ static int clk_pll_set_rate(struct aic_clk_comm_cfg *comm_cfg, sdm_en = (1UL << PLL_SDM_EN_BIT) | (2UL << PLL_SDM_MODE_BIT); writel(sdm_en, cmu_reg(pll->offset_sdm)); } else if (pll->type == AIC_PLL_SDM) { - sdm_en = readl(cmu_reg(pll->offset_sdm)); - sdm_en >>= 31; - - ppm_max = 1000000 / (factor_n + 1); - /* 1% spread */ - if (ppm_max < PLL_SDM_SPREAD_PPM) - sdm_amp = 0; - else - sdm_amp = PLL_SDM_AMP_MAX - - PLL_SDM_SPREAD_PPM * - PLL_SDM_AMP_MAX / ppm_max; - - /* SDM uses triangular wave, 33KHz by default */ - sdm_step = (u64)(PLL_SDM_AMP_MAX - sdm_amp) * 2 * - PLL_SDM_SPREAD_FREQ; - do_div(sdm_step, parent_rate); - if (sdm_step > 511) - sdm_step = 511; - - reg_val = (1UL << PLL_SDM_EN_BIT) | - (2 << PLL_SDM_MODE_BIT) | - (sdm_step << PLL_SDM_STEP_BIT) | - (3 << PLL_SDM_FREQ_BIT) | - (sdm_amp << PLL_SDM_AMP_BIT); - - writel(reg_val, cmu_reg(pll->offset_sdm)); + clk_pll_enable_sdm(pll, parent_rate, factor_n); } reg_val = readl(cmu_reg(pll->offset_gen)); diff --git a/packages/artinchip/userid/spinand_bare.c b/packages/artinchip/userid/spinand_bare.c index 066cd8d1..b957d800 100644 --- a/packages/artinchip/userid/spinand_bare.c +++ b/packages/artinchip/userid/spinand_bare.c @@ -37,7 +37,7 @@ static int read_userid(struct mtd_dev *mtd, size_t offset, u8 *buf, size_t size) if (mtd->erasesize < USERID_MAX_SIZE) remain = mtd->erasesize; else - remain = USERID_MAX_SIZE; + remain = size; ptr = buf; while ((remain > 0) && (offset < end)) { diff --git a/packages/artinchip/userid/spinand_rtt.c b/packages/artinchip/userid/spinand_rtt.c index 59dda0a6..3a28c7ee 100644 --- a/packages/artinchip/userid/spinand_rtt.c +++ b/packages/artinchip/userid/spinand_rtt.c @@ -42,7 +42,7 @@ static int read_userid(struct rt_mtd_nand_device *mtd, size_t offset, u8 *buf, s if (erasesize < USERID_MAX_SIZE) remain = erasesize; else - remain = USERID_MAX_SIZE; + remain = size; ptr = buf; while ((remain > 0) && (offset < end)) { diff --git a/patches/20241204/CMU-PLL-PSRAM-instablity.tgz b/patches/20241204/CMU-PLL-PSRAM-instablity.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7c9e4e406d03e64323d04a34aea3f89ecb542171 GIT binary patch literal 2837 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 literal 0 HcmV?d00001 diff --git a/patches/20241204/userid-fix-heap-corrupt-by-buf-overflow-issue.tgz b/patches/20241204/userid-fix-heap-corrupt-by-buf-overflow-issue.tgz new file mode 100644 index 0000000000000000000000000000000000000000..33568e9b4164b54bf62994e417c6dc7cc5286415 GIT binary patch literal 1800 zcmV+j2lx0NiwFP!000001MOJrPa8Q9=X3rFlT)i*8uB8*i2%BYq-~@WDxlZubkb_c zI*HrOI`VpfUd8`@&?dA{@zBt z+1%M}ZJ_#N4*gjKKDQY{8{>d}4ZNyDy>a0>hfZzcAz>VU9dfM+wXG7`LML?gossc` zBV%YHxQA8+bz+A=mv}hws7uG+VPUm`2Hb&7V&BEb?w9QW8Dh`J+kFRnoQw!&2dFc% zhZDTrtk$EIoq$g$^AFJH0Cn*su)Q%lbmWifP4HLZe$^qJ9>b1Wsq_a>+`z%;(B}@J z)yZ*|LTJ> zwoAqycB~u1C)Slqhu50*2pHl{9(3*e(m?80}tu9j?Hsfiro~gm4%X7H; z?MCW>sT&AeZK|QF-iJ76#^@C`%vAYYT#Geh%!NFVd5y?}&871vh9pIyCkySrbfpUr< zGiJn!uKP$_UTo4h)@~T#iWf?bY9`5eS&}Xkp_mAZRHhjdnb{}{9?`9%5u?*siu&!V zTQssEM4jrtUb%vd!1Kev6E|u`vD41$*z2F&qvaG&hqLd-YvEIhq;zBmim6B}{;y8$ zF?jIiQEdPBy-v4x4%hIme_|G#q+0S#vGF3i<}MU%Kg808aG5u`o#t< zTxbBSO0e`Gkyp?XPBI=w4C6E!8tKW`Ba{`)b9*h*lw@T)Sr4=g>pLL;n~DzRUw4 zhE$~L*;6cj9HCf|az%a-{i*y?(6~lxLY0fwh!2(0UAwgU`+s)t{D*P=xbe?D^Pfhu zwb#hcf10gbJ^xt;^!(@7&3_n|l{Zi26VWF>#b}6eQKPLej^$ZTGbJkGJ2x;AsVeSd z)0R(;PLknE)DzCc<2xj5r3BxaVJ1({B;M@wX{Eu_LcyPK1_fsXaQsda7KM5d@$Pe> zQ_hYKWJ6g&xqdj?zCX}XqN1%f;ac}_OBy7#U@b2}ti}T;VCqdnDuONHM!82GzT~0u zkT*(n*Q!d{8_VjY3YgB#5{C(&HQD_Ybbe`xc!i#6m8Z@kDWZqXqR;7zsA$Dn$8QV5 z_MS-`i=Q^|6@Db~_oxY-WF#8%g!_ni&eGRY%rxG66klZC0S9OAte#Omu|1D+B>19N zzMP2M$6vV&^$B#B>xWaR=?r_3M4@AKdw=&&de+(7LFb)y-u--@6F%3FE8?C3C-mX6 z3$n(o_~xoIhtHgOp>xG*SsFLhD}K3y&s>=Og2CsD8g=H(wS3gMnr+olXR`C@N1ZQt zxVdsS_3%08@6c2|!zlHqyPy}<&L~sbb@nsM8k+#iv1@2(XlQ6?XlQ6? qXlQ6?XlQ6?XlQ6?XlQ6?XlQ6?XlQ6?XlQ6WGyVryaARixPyhh&H;#G$ literal 0 HcmV?d00001