summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorJianlong Huang <jianlong.huang@starfivetech.com>2022-09-24 03:21:47 +0300
committerJianlong Huang <jianlong.huang@starfivetech.com>2022-11-03 11:31:41 +0300
commitbdae9f6eaef5c8ced3bf90f81be78dd16248c9d4 (patch)
treeecf25ac7ea7525f31908d2928b1819bf434fb71a /board
parent7e0268be6a6cd721230ea549e20588999170e37b (diff)
downloadu-boot-bdae9f6eaef5c8ced3bf90f81be78dd16248c9d4.tar.xz
spl: starfive: jh7110: switch pll2 to 1188M
Switch the pll2 clk to 1188M with the comm pll interface on JH7110. Signed-off-by: Jianlong Huang <jianlong.huang@starfivetech.com>
Diffstat (limited to 'board')
-rw-r--r--board/starfive/visionfive2/spl.c182
-rwxr-xr-xboard/starfive/visionfive2/starfive_visionfive2.c6
2 files changed, 23 insertions, 165 deletions
diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c
index ba76c15c89..7061bfd2d0 100644
--- a/board/starfive/visionfive2/spl.c
+++ b/board/starfive/visionfive2/spl.c
@@ -11,138 +11,13 @@
#include <asm/io.h>
#include <asm/arch/gpio.h>
#include <asm/arch/jh7110-regs.h>
+#include <asm/arch/clk.h>
#include <image.h>
-#include <linux/bitops.h>
#include <log.h>
-#include <linux/delay.h>
#include <spl.h>
#define MODE_SELECT_REG 0x1702002c
-struct starfive_pll0_freq {
- u32 freq;
- u32 prediv;
- u32 fbdiv;
- u32 postdiv1;
- u32 dacpd; /* Both daxpd and dsmpd set 1 while integer multiple mode */
- u32 dsmpd; /* Both daxpd and dsmpd set 0 while fraction multiple mode */
-};
-
-enum starfive_cpu_freq {
- CPU_FREQ_375 = 0,
- CPU_FREQ_500,
- CPU_FREQ_625,
- CPU_FREQ_750,
- CPU_FREQ_875,
- CPU_FREQ_1000,
- CPU_FREQ_1250,
- CPU_FREQ_1375,
- CPU_FREQ_1500,
- CPU_FREQ_1625,
- CPU_FREQ_1750,
- CPU_FREQ_1800,
- CPU_FREQ_MAX = CPU_FREQ_1800
-};
-
-struct starfive_pll0_freq jh7110_pll0_freq[] = {
- {
- .freq = CPU_FREQ_375,
- .prediv = 8,
- .fbdiv = 125,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_500,
- .prediv = 6,
- .fbdiv = 125,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_625,
- .prediv = 24,
- .fbdiv = 625,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_750,
- .prediv = 4,
- .fbdiv = 125,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_875,
- .prediv = 24,
- .fbdiv = 875,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1000,
- .prediv = 3,
- .fbdiv = 125,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1250,
- .prediv = 12,
- .fbdiv = 625,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1375,
- .prediv = 24,
- .fbdiv = 1375,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1500,
- .prediv = 2,
- .fbdiv = 125,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1625,
- .prediv = 24,
- .fbdiv = 1625,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1750,
- .prediv = 12,
- .fbdiv = 875,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
- {
- .freq = CPU_FREQ_1800,
- .prediv = 3,
- .fbdiv = 225,
- .postdiv1 = 1,
- .dacpd = 1,
- .dsmpd = 1
- },
-};
-
int spl_board_init_f(void)
{
int ret;
@@ -182,42 +57,15 @@ struct image_header *spl_get_load_buffer(ssize_t offset, size_t size)
return (struct image_header *)(STARFIVE_SPL_BOOT_LOAD_ADDR);
}
-static int spl_cpu_set_rate(enum starfive_cpu_freq rate)
-{
- struct starfive_pll0_freq *cpu_freq;
- int i;
-
- if (rate < 0 || rate > CPU_FREQ_MAX) {
- debug("invalid input value=%d\n", rate);
- return -EINVAL;
- }
-
- for (i = 0; i<CPU_FREQ_MAX; i++) {
- if (jh7110_pll0_freq[i].freq == rate) {
- cpu_freq = &jh7110_pll0_freq[i];
- break;
- }
- }
-
- clrsetbits_le32(SYS_SYSCON_BASE + SYS_SYSCON_24, PLL0_DACPD_MASK,
- (cpu_freq->dacpd << PLL0_DACPD_SHIFT) & PLL0_DACPD_MASK);
- clrsetbits_le32(SYS_SYSCON_BASE + SYS_SYSCON_24, PLL0_DSMPD_MASK,
- (cpu_freq->dsmpd << PLL0_DSMPD_SHIFT) & PLL0_DSMPD_MASK);
- clrsetbits_le32(SYS_SYSCON_BASE + SYS_SYSCON_36, PLL0_PREDIV_MASK,
- (cpu_freq->prediv << PLL0_PREDIV_SHIFT) & PLL0_PREDIV_MASK);
- clrsetbits_le32(SYS_SYSCON_BASE + SYS_SYSCON_28, PLL0_FBDIV_MASK,
- (cpu_freq->fbdiv << PLL0_FBDIV_SHIFT) & PLL0_FBDIV_MASK);
- clrsetbits_le32(SYS_SYSCON_BASE + SYS_SYSCON_32, PLL0_POSTDIV1_MASK,
- ((cpu_freq->postdiv1 >> 1) << PLL0_POSTDIV1_SHIFT) & PLL0_POSTDIV1_MASK);
- return 0;
-}
-
void board_init_f(ulong dummy)
{
int ret;
/* Adjust cpu frequency, the default is 1.25GHz */
- spl_cpu_set_rate(CPU_FREQ_1250);
+ starfive_jh7110_pll_set_rate(PLL0, 1250000000);
+
+ /*change pll2 to 1188MHz*/
+ starfive_jh7110_pll_set_rate(PLL2, 1188000000);
/*DDR control depend clk init*/
clrsetbits_le32(SYS_CRG_BASE, CLK_CPU_ROOT_SW_MASK,
@@ -227,6 +75,11 @@ void board_init_f(ulong dummy)
CLK_BUS_ROOT_SW_MASK,
BIT(CLK_BUS_ROOT_SW_SHIFT) & CLK_BUS_ROOT_SW_MASK);
+ /*Set clk_perh_root clk default mux sel to pll2*/
+ clrsetbits_le32(SYS_CRG_BASE + CLK_PERH_ROOT_OFFSET,
+ CLK_PERH_ROOT_MASK,
+ BIT(CLK_PERH_ROOT_SHIFT) & CLK_PERH_ROOT_MASK);
+
clrsetbits_le32(SYS_CRG_BASE + CLK_NOC_BUS_STG_AXI_OFFSET,
CLK_NOC_BUS_STG_AXI_EN_MASK,
BIT(CLK_NOC_BUS_STG_AXI_EN_SHIFT)
@@ -240,6 +93,7 @@ void board_init_f(ulong dummy)
CLK_QSPI_REF_SW_MASK,
(0 << CLK_QSPI_REF_SW_SHIFT) & CLK_QSPI_REF_SW_MASK);
+
/*set GPIO to 3.3v*/
setbits_le32(SYS_SYSCON_BASE + 0xC, 0x0);
@@ -262,25 +116,23 @@ void board_init_f(ulong dummy)
SYS_IOMUX_DOEN(44, 8);
SYS_IOMUX_DOUT(44, 22);
- /*set sdio0/1 sdcard clk default div to 4*/
- clrsetbits_le32(SYS_CRG_BASE + CLK_SDIO0_SDCARD_OFFSET,
- CLK_SDIO0_SDCARD_MASK,
- (4 << CLK_SDIO0_SDCARD_SHIFT) & CLK_SDIO0_SDCARD_MASK);
- clrsetbits_le32(SYS_CRG_BASE + CLK_SDIO1_SDCARD_OFFSET,
- CLK_SDIO1_SDCARD_MASK,
- (4 << CLK_SDIO1_SDCARD_SHIFT) & CLK_SDIO1_SDCARD_MASK);
-
/* reset emmc */
SYS_IOMUX_DOEN(62, LOW);
SYS_IOMUX_DOUT(62, 19);
/* reset sdio */
SYS_IOMUX_DOEN(10, LOW);
SYS_IOMUX_DOUT(10, 55);
+ SYS_IOMUX_SET_DS(10, 3);
SYS_IOMUX_COMPLEX(9, 44, 57, 19);
+ SYS_IOMUX_SET_DS(9, 3);
SYS_IOMUX_COMPLEX(11, 45, 58, 20);
+ SYS_IOMUX_SET_DS(11, 3);
SYS_IOMUX_COMPLEX(12, 46, 59, 21);
+ SYS_IOMUX_SET_DS(12, 3);
SYS_IOMUX_COMPLEX(7, 47, 60, 22);
+ SYS_IOMUX_SET_DS(7, 3);
SYS_IOMUX_COMPLEX(8, 48, 61, 23);
+ SYS_IOMUX_SET_DS(8, 3);
ret = spl_early_init();
if (ret)
diff --git a/board/starfive/visionfive2/starfive_visionfive2.c b/board/starfive/visionfive2/starfive_visionfive2.c
index 6ad7e38968..27e9ed7eb0 100755
--- a/board/starfive/visionfive2/starfive_visionfive2.c
+++ b/board/starfive/visionfive2/starfive_visionfive2.c
@@ -219,11 +219,17 @@ static void jh7110_mmc_init(int id)
} else {
SYS_IOMUX_DOEN(10, LOW);
SYS_IOMUX_DOUT(10, 55);
+ SYS_IOMUX_SET_DS(10, 3);
SYS_IOMUX_COMPLEX(9, 44, 57, 19);
+ SYS_IOMUX_SET_DS(9, 3);
SYS_IOMUX_COMPLEX(11, 45, 58, 20);
+ SYS_IOMUX_SET_DS(11, 3);
SYS_IOMUX_COMPLEX(12, 46, 59, 21);
+ SYS_IOMUX_SET_DS(12, 3);
SYS_IOMUX_COMPLEX(7, 47, 60, 22);
+ SYS_IOMUX_SET_DS(7, 3);
SYS_IOMUX_COMPLEX(8, 48, 61, 23);
+ SYS_IOMUX_SET_DS(8, 3);
}
}