board: devsoc: update PCIE clk configuration

Change-Id: I9516a0ba9dc26428fcc5f717d4fac3645f5992c8
Signed-off-by: Vandhiadevan Karunamoorthy <quic_vkarunam@quicinc.com>
This commit is contained in:
Vandhiadevan Karunamoorthy 2022-07-04 16:49:00 +05:30 committed by Gerrit - the friendly Code Review server
parent bd605848ab
commit a4776e7a11
2 changed files with 209 additions and 82 deletions

View file

@ -197,6 +197,102 @@
#define PIPE3_PHYSTATUS_SW (0x1 << 3)
#define PIPE_UTMI_CLK_DIS (0x1 << 8)
/*
* PCIE
* PCIE0 ---> PCIE3X1_0
* PCIE1 ---> PCIE3X2
* PCIE2 ---> PCIE3X1_1
*/
#define GCC_CONFIG_PCIE0 0
#define GCC_CONFIG_PCIE1 1
#define GCC_CONFIG_PCIE2 2
#define GCC_SNOC_PCIE3_2LANE_S_CBCR 0x182E048
#define GCC_SNOC_PCIE3_1LANE_S_CBCR 0x182E04C
#define GCC_SNOC_PCIE3_1LANE_1_M_CBCR 0x182E050
#define GCC_SNOC_PCIE3_2LANE_M_CBCR 0x182E07C
#define GCC_SNOC_PCIE3_1LANE_M_CBCR 0x182E080
#define GCC_SNOC_PCIE3_1LANE_1_S_CBCR 0x182E0AC
#define GCC_PCIE3X2_BASE 0x1828000
#define GCC_PCIE3X1_0_BASE 0x1829000
#define GCC_PCIE3X1_1_BASE 0x182A000
#define GCC_PCIE_AUX_CMD_RCGR 0x1828004
#define GCC_PCIE_AUX_CFG_RCGR 0x1828008
#define GCC_PCIE_AUX_M 0x182800C
#define GCC_PCIE_AUX_N 0x1828010
#define GCC_PCIE_AUX_D 0x1828014
#define GCC_PCIE3X2_BCR (GCC_PCIE3X2_BASE+0x000)
#define GCC_PCIE3X2_AXI_M_CMD_RCGR (GCC_PCIE3X2_BASE+0x018)
#define GCC_PCIE3X2_AXI_M_CFG_RCGR (GCC_PCIE3X2_BASE+0x01C)
#define GCC_PCIE3X2_AHB_CBCR (GCC_PCIE3X2_BASE+0x030)
#define GCC_PCIE3X2_AXI_M_CBCR (GCC_PCIE3X2_BASE+0x038)
#define GCC_PCIE3X2_AXI_M_SREGR (GCC_PCIE3X2_BASE+0x03C)
#define GCC_PCIE3X2_AXI_S_CBCR (GCC_PCIE3X2_BASE+0x040)
#define GCC_PCIE3X2_AXI_S_SREGR (GCC_PCIE3X2_BASE+0x044)
#define GCC_PCIE3X2_AXI_S_BRIDGE_CBCR (GCC_PCIE3X2_BASE+0x048)
#define GCC_PCIE3X2_PIPE_CBCR (GCC_PCIE3X2_BASE+0x068)
#define GCC_PCIE3X2_AUX_CBCR (GCC_PCIE3X2_BASE+0x070)
#define GCC_PCIE3X2_RCHG_CMD_RCGR (GCC_PCIE3X2_BASE+0x078)
#define GCC_PCIE3X2_RCHG_CFG_RCGR (GCC_PCIE3X2_BASE+0x07C)
#define GCC_PCIE3X2_PHY_AHB_CBCR (GCC_PCIE3X2_BASE+0x080)
#define GCC_PCIE3X2_AXI_S_CMD_RCGR (GCC_PCIE3X2_BASE+0x084)
#define GCC_PCIE3X2_AXI_S_CFG_RCGR (GCC_PCIE3X2_BASE+0x088)
#define GCC_PCIE3X1_0_BCR (GCC_PCIE3X1_0_BASE+0x000)
#define GCC_PCIE3X1_0_AXI_CMD_RCGR (GCC_PCIE3X1_0_BASE+0x018)
#define GCC_PCIE3X1_0_AXI_CFG_RCGR (GCC_PCIE3X1_0_BASE+0x01C)
#define GCC_PCIE3X1_0_AHB_CBCR (GCC_PCIE3X1_0_BASE+0x030)
#define GCC_PCIE3X1_0_AXI_M_CBCR (GCC_PCIE3X1_0_BASE+0x038)
#define GCC_PCIE3X1_0_AXI_M_SREGR (GCC_PCIE3X1_0_BASE+0x03C)
#define GCC_PCIE3X1_0_AXI_S_CBCR (GCC_PCIE3X1_0_BASE+0x040)
#define GCC_PCIE3X1_0_AXI_S_SREGR (GCC_PCIE3X1_0_BASE+0x044)
#define GCC_PCIE3X1_0_AXI_S_BRIDGE_CBCR (GCC_PCIE3X1_0_BASE+0x048)
#define GCC_PCIE3X1_0_PIPE_CBCR (GCC_PCIE3X1_0_BASE+0x068)
#define GCC_PCIE3X1_0_AUX_CBCR (GCC_PCIE3X1_0_BASE+0x070)
#define GCC_PCIE3X1_PHY_AHB_CBCR (GCC_PCIE3X1_0_BASE+0x078)
#define GCC_PCIE3X1_0_RCHG_CMD_RCGR (GCC_PCIE3X1_0_BASE+0x07C)
#define GCC_PCIE3X1_0_RCHG_CFG_RCGR (GCC_PCIE3X1_0_BASE+0x080)
#define GCC_PCIE3X1_1_BCR (GCC_PCIE3X1_1_BASE+0x000)
#define GCC_PCIE3X1_1_AXI_CMD_RCGR (GCC_PCIE3X1_1_BASE+0x004)
#define GCC_PCIE3X1_1_AXI_CFG_RCGR (GCC_PCIE3X1_1_BASE+0x008)
#define GCC_PCIE3X1_1_AHB_CBCR (GCC_PCIE3X1_1_BASE+0x00C)
#define GCC_PCIE3X1_1_AXI_M_CBCR (GCC_PCIE3X1_1_BASE+0x014)
#define GCC_PCIE3X1_1_AXI_M_SREGR (GCC_PCIE3X1_1_BASE+0x018)
#define GCC_PCIE3X1_1_AXI_S_CBCR (GCC_PCIE3X1_1_BASE+0x01C)
#define GCC_PCIE3X1_1_AXI_S_SREGR (GCC_PCIE3X1_1_BASE+0x020)
#define GCC_PCIE3X1_1_AXI_S_BRIDGE_CBCR (GCC_PCIE3X1_1_BASE+0x024)
#define GCC_PCIE3X1_1_PIPE_CBCR (GCC_PCIE3X1_1_BASE+0x068)
#define GCC_PCIE3X1_1_AUX_CBCR (GCC_PCIE3X1_1_BASE+0x070)
#define GCC_PCIE3X1_1_AUX_SREGR (GCC_PCIE3X1_1_BASE+0x074)
#define GCC_PCIE3X1_1_RCHG_CMD_RCGR (GCC_PCIE3X1_1_BASE+0x078)
#define GCC_PCIE3X1_1_RCHG_CFG_RCGR (GCC_PCIE3X1_1_BASE+0x07C)
#define GCC_PCIE_AUX_CFG_RCGR_MN_MODE (2 << 12)
#define GCC_PCIE_AUX_CFG_RCGR_SRC_SEL (2 << 8)
#define GCC_PCIE_AUX_CFG_RCGR_SRC_DIV (0x1F << 0)
#define GCC_PCIE_AXI_CFG_RCGR_SRC_SEL (0x9 << 0)
#define GCC_PCIE_AXI_CFG_RCGR_SRC_DIV (2 << 8)
#define GCC_PCIE_AXI_S_CFG_RCGR_SRC_SEL (2 << 8)
#define GCC_PCIE_AXI_S_CFG_RCGR_SRC_DIV (9 << 0)
#define GCC_PCIE3X2_AXI_S_CFG_RCGR_SRC_SEL (2 << 8)
#define GCC_PCIE3X2_AXI_S_CFG_RCGR_SRC_DIV (9 << 0)
#define GCC_PCIE_RCHG_CFG_RCGR_SRC_SEL (1 << 8)
#define GCC_PCIE_RCHG_CFG_RCGR_SRC_DIV (0xF << 0)
#define CMD_UPDATE 0x1
#define ROOT_EN 0x2
#define PIPE_CLK_ENABLE 0x4FF1
#define CLK_DISABLE 0x0
#define NOC_HANDSHAKE_FSM_EN (1 << 15)
#define GCC_PCIE_PHY_PIPE_MISC_SRC_SEL (0x1 << 8)
#ifdef CONFIG_QCA_MMC
void emmc_clock_init(void);
void emmc_clock_reset(void);

View file

@ -131,70 +131,92 @@ void emmc_clock_reset(void)
void pcie_v2_clock_init(int pcie_id)
{
#ifdef QCA_CLOCK_ENABLE
int cfg, div;
int cfg, cfg1;
static int clk_configure;
/* Configure pcie_aux_clk_src */
cfg = (GCC_PCIE_AUX_CFG_RCGR_MN_MODE |
GCC_PCIE_AUX_CFG_RCGR_SRC_SEL |
GCC_PCIE_AUX_CFG_RCGR_SRC_DIV);
writel(cfg, GCC_PCIE_REG(GCC_PCIE_AUX_CFG_RCGR, 0));
writel(0x1, GCC_PCIE_REG(GCC_PCIE_AUX_M, 0));
writel(0xFFFC, GCC_PCIE_REG(GCC_PCIE_AUX_N, 0));
writel(0xFFFB, GCC_PCIE_REG(GCC_PCIE_AUX_D, 0));
writel(CMD_UPDATE, GCC_PCIE_REG(GCC_PCIE_AUX_CMD_RCGR, 0));
mdelay(100);
writel(ROOT_EN, GCC_PCIE_REG(GCC_PCIE_AUX_CMD_RCGR, 0));
/* Configure pcie_axi_m__clk_src */
if ((pcie_id == 2) || (pcie_id == 3))
div = GCC_PCIE_AXI_M_CFG_RCGR_SRC_DIV_LANE2;
else
div = GCC_PCIE_AXI_M_CFG_RCGR_SRC_DIV_LANE1;
cfg = (GCC_PCIE_AXI_M_CFG_RCGR_SRC_SEL | div);
writel(cfg, GCC_PCIE_REG(GCC_PCIE_AXI_M_CFG_RCGR, pcie_id));
writel(CMD_UPDATE, GCC_PCIE_REG(GCC_PCIE_AXI_M_CMD_RCGR, pcie_id));
mdelay(100);
writel(ROOT_EN, GCC_PCIE_REG(GCC_PCIE_AXI_M_CMD_RCGR, pcie_id));
/* Configure pcie_axi_s__clk_src */
cfg = (GCC_PCIE_AXI_S_CFG_RCGR_SRC_SEL | GCC_PCIE_AXI_S_CFG_RCGR_SRC_DIV);
writel(cfg, GCC_PCIE_REG(GCC_PCIE_AXI_S_CFG_RCGR, pcie_id));
writel(CMD_UPDATE, GCC_PCIE_REG(GCC_PCIE_AXI_S_CMD_RCGR, pcie_id));
mdelay(100);
writel(ROOT_EN, GCC_PCIE_REG(GCC_PCIE_AXI_S_CMD_RCGR, pcie_id));
/* Configure CBCRs */
writel(CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_AHB_CBCR, pcie_id));
writel(CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_AXI_M_CBCR, pcie_id));
writel(CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_AXI_S_CBCR, pcie_id));
writel(CLK_ENABLE, GCC_SNOC_PCIE0_1LANE_S_CBCR + (0x4 * pcie_id));
switch(pcie_id){
case 0:
writel(CLK_ENABLE, GCC_ANOC_PCIE0_1LANE_M_CBCR);
break;
case 1:
writel(CLK_ENABLE, GCC_ANOC_PCIE1_1LANE_M_CBCR);
break;
case 2:
writel(CLK_ENABLE, GCC_ANOC_PCIE2_2LANE_M_CBCR);
break;
case 3:
writel(CLK_ENABLE, GCC_ANOC_PCIE3_2LANE_M_CBCR);
break;
if (clk_configure == 0) {
cfg = (GCC_PCIE_AUX_CFG_RCGR_MN_MODE |
GCC_PCIE_AUX_CFG_RCGR_SRC_SEL |
GCC_PCIE_AUX_CFG_RCGR_SRC_DIV);
writel(cfg, GCC_PCIE_AUX_CFG_RCGR);
writel(0x1, GCC_PCIE_AUX_M);
writel(0xFFFC, GCC_PCIE_AUX_N);
writel(0xFFFA, GCC_PCIE_AUX_D);
writel(CMD_UPDATE, GCC_PCIE_AUX_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE_AUX_CMD_RCGR);
clk_configure = 1;
}
writel(CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_AXI_S_BRIDGE_CBCR, pcie_id));
writel(PIPE_CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_PIPE_CBCR, pcie_id));
/* Configure pcie_rchng_clk_src */
cfg = (GCC_PCIE_RCHNG_CFG_RCGR_SRC_SEL
| GCC_PCIE_RCHNG_CFG_RCGR_SRC_DIV);
writel(cfg, GCC_PCIE_REG(GCC_PCIE_RCHNG_CFG_RCGR, pcie_id));
writel(CMD_UPDATE, GCC_PCIE_REG(GCC_PCIE_RCHNG_CMD_RCGR, pcie_id));
mdelay(100);
writel(ROOT_EN, GCC_PCIE_REG(GCC_PCIE_RCHNG_CMD_RCGR, pcie_id));
writel(CLK_ENABLE, GCC_PCIE_REG(GCC_PCIE_AUX_CBCR, pcie_id));
/* Configure pcie axi clk source */
cfg = (GCC_PCIE_AXI_CFG_RCGR_SRC_SEL |
GCC_PCIE_AXI_CFG_RCGR_SRC_DIV);
cfg1 = (GCC_PCIE_RCHG_CFG_RCGR_SRC_SEL |
GCC_PCIE_RCHG_CFG_RCGR_SRC_DIV);
switch(pcie_id) {
case 0:
writel(cfg, GCC_PCIE3X1_0_AXI_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X1_0_AXI_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X1_0_AXI_CMD_RCGR);
writel(cfg1, GCC_PCIE3X1_0_RCHG_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X1_0_RCHG_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X1_0_RCHG_CMD_RCGR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_AHB_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_AXI_M_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_AXI_S_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_AXI_S_BRIDGE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_PIPE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_0_AUX_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_PHY_AHB_CBCR);
break;
case 1:
writel(cfg, GCC_PCIE3X2_AXI_M_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X2_AXI_M_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X2_AXI_M_CMD_RCGR);
cfg = (GCC_PCIE3X2_AXI_S_CFG_RCGR_SRC_SEL |
GCC_PCIE3X2_AXI_S_CFG_RCGR_SRC_DIV);
writel(cfg, GCC_PCIE3X2_AXI_S_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X2_AXI_S_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X2_AXI_S_CMD_RCGR);
writel(cfg1, GCC_PCIE3X2_RCHG_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X2_RCHG_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X2_RCHG_CMD_RCGR);
writel(CLK_ENABLE, GCC_PCIE3X2_AHB_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_AXI_M_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_AXI_S_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_AXI_S_BRIDGE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_PIPE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_AUX_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X2_PHY_AHB_CBCR);
break;
case 2:
writel(cfg, GCC_PCIE3X1_1_AXI_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X1_1_AXI_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X1_1_AXI_CMD_RCGR);
writel(cfg1, GCC_PCIE3X1_1_RCHG_CFG_RCGR);
writel(CMD_UPDATE, GCC_PCIE3X1_1_RCHG_CMD_RCGR);
mdelay(10);
writel(ROOT_EN, GCC_PCIE3X1_1_RCHG_CMD_RCGR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_AHB_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_AXI_M_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_AXI_S_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_AXI_S_BRIDGE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_PIPE_CBCR);
writel(CLK_ENABLE, GCC_PCIE3X1_1_AUX_CBCR);
break;
}
writel(CLK_ENABLE, GCC_SNOC_PCIE3_2LANE_M_CBCR);
writel(CLK_ENABLE, GCC_SNOC_PCIE3_2LANE_S_CBCR);
writel(CLK_ENABLE, GCC_SNOC_PCIE3_1LANE_M_CBCR);
writel(CLK_ENABLE, GCC_SNOC_PCIE3_1LANE_S_CBCR);
writel(CLK_ENABLE, GCC_SNOC_PCIE3_1LANE_1_M_CBCR);
writel(CLK_ENABLE, GCC_SNOC_PCIE3_1LANE_1_S_CBCR);
#else
return;
#endif
@ -203,30 +225,39 @@ void pcie_v2_clock_init(int pcie_id)
void pcie_v2_clock_deinit(int pcie_id)
{
#ifdef QCA_CLOCK_ENABLE
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AUX_CMD_RCGR, 0));
mdelay(100);
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AHB_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AXI_M_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AXI_S_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AUX_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_PIPE_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_AXI_S_BRIDGE_CBCR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_RCHNG_CFG_RCGR, pcie_id));
writel(0x0, GCC_PCIE_REG(GCC_PCIE_RCHNG_CMD_RCGR, pcie_id));
writel(0x0, GCC_SNOC_PCIE0_1LANE_S_CBCR + (0x4 * pcie_id));
switch(pcie_id){
writel(0x0, GCC_SNOC_PCIE3_2LANE_M_CBCR);
writel(0x0, GCC_SNOC_PCIE3_2LANE_S_CBCR);
writel(0x0, GCC_SNOC_PCIE3_1LANE_M_CBCR);
writel(0x0, GCC_SNOC_PCIE3_1LANE_S_CBCR);
writel(0x0, GCC_SNOC_PCIE3_1LANE_1_M_CBCR);
writel(0x0, GCC_SNOC_PCIE3_1LANE_1_S_CBCR);
switch(pcie_id) {
case 0:
writel(0x0, GCC_ANOC_PCIE0_1LANE_M_CBCR);
break;
writel(0x0, GCC_PCIE3X1_0_AHB_CBCR);
writel(0x0, GCC_PCIE3X1_0_AXI_M_CBCR);
writel(0x0, GCC_PCIE3X1_0_AXI_S_CBCR);
writel(0x0, GCC_PCIE3X1_0_AXI_S_BRIDGE_CBCR);
writel(0x0, GCC_PCIE3X1_0_PIPE_CBCR);
writel(0x0, GCC_PCIE3X1_0_AUX_CBCR);
writel(0x0, GCC_PCIE3X1_PHY_AHB_CBCR);
break;
case 1:
writel(0x0, GCC_ANOC_PCIE1_1LANE_M_CBCR);
break;
writel(0x0, GCC_PCIE3X2_AHB_CBCR);
writel(0x0, GCC_PCIE3X2_AXI_M_CBCR);
writel(0x0, GCC_PCIE3X2_AXI_S_CBCR);
writel(0x0, GCC_PCIE3X2_AXI_S_BRIDGE_CBCR);
writel(0x0, GCC_PCIE3X2_PIPE_CBCR);
writel(0x0, GCC_PCIE3X2_AUX_CBCR);
writel(0x0, GCC_PCIE3X2_PHY_AHB_CBCR);
break;
case 2:
writel(0x0, GCC_ANOC_PCIE2_2LANE_M_CBCR);
break;
case 3:
writel(0x0, GCC_ANOC_PCIE3_2LANE_M_CBCR);
break;
writel(0x0, GCC_PCIE3X1_1_AHB_CBCR);
writel(0x0, GCC_PCIE3X1_1_AXI_M_CBCR);
writel(0x0, GCC_PCIE3X1_1_AXI_S_CBCR);
writel(0x0, GCC_PCIE3X1_1_AXI_S_BRIDGE_CBCR);
writel(0x0, GCC_PCIE3X1_1_PIPE_CBCR);
writel(0x0, GCC_PCIE3X1_1_AUX_CBCR);
break;
}
#else
return;