@@ -719,6 +719,12 @@ static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
719
719
},
720
720
};
721
721
722
+ static const struct freq_tbl ftbl_gcc_ce1_clk_msm8226 [] = {
723
+ F (50000000 , P_GPLL0 , 12 , 0 , 0 ),
724
+ F (100000000 , P_GPLL0 , 6 , 0 , 0 ),
725
+ { }
726
+ };
727
+
722
728
static const struct freq_tbl ftbl_gcc_ce1_clk [] = {
723
729
F (50000000 , P_GPLL0 , 12 , 0 , 0 ),
724
730
F (75000000 , P_GPLL0 , 8 , 0 , 0 ),
@@ -761,6 +767,11 @@ static struct clk_rcg2 ce2_clk_src = {
761
767
},
762
768
};
763
769
770
+ static const struct freq_tbl ftbl_gcc_gp_clk_msm8226 [] = {
771
+ F (19200000 , P_XO , 1 , 0 , 0 ),
772
+ { }
773
+ };
774
+
764
775
static const struct freq_tbl ftbl_gcc_gp_clk [] = {
765
776
F (4800000 , P_XO , 4 , 0 , 0 ),
766
777
F (6000000 , P_GPLL0 , 10 , 1 , 10 ),
@@ -1955,6 +1966,10 @@ static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1955
1966
.enable_mask = BIT (0 ),
1956
1967
.hw .init = & (struct clk_init_data ){
1957
1968
.name = "gcc_mss_q6_bimc_axi_clk" ,
1969
+ .parent_names = (const char * []){
1970
+ "system_noc_clk_src" ,
1971
+ },
1972
+ .num_parents = 1 ,
1958
1973
.ops = & clk_branch2_ops ,
1959
1974
},
1960
1975
},
@@ -1993,6 +2008,20 @@ static struct clk_branch gcc_pdm_ahb_clk = {
1993
2008
},
1994
2009
};
1995
2010
2011
+ static struct clk_branch gcc_pdm_xo4_clk = {
2012
+ .halt_reg = 0x0cc8 ,
2013
+ .clkr = {
2014
+ .enable_reg = 0x0cc8 ,
2015
+ .enable_mask = BIT (0 ),
2016
+ .hw .init = & (struct clk_init_data ){
2017
+ .name = "gcc_pdm_xo4_clk" ,
2018
+ .parent_names = (const char * []){ "xo" },
2019
+ .num_parents = 1 ,
2020
+ .ops = & clk_branch2_ops ,
2021
+ },
2022
+ },
2023
+ };
2024
+
1996
2025
static struct clk_branch gcc_prng_ahb_clk = {
1997
2026
.halt_reg = 0x0d04 ,
1998
2027
.halt_check = BRANCH_HALT_VOTED ,
@@ -2430,6 +2459,121 @@ static struct gdsc usb_hs_hsic_gdsc = {
2430
2459
.pwrsts = PWRSTS_OFF_ON ,
2431
2460
};
2432
2461
2462
+ static struct clk_regmap * gcc_msm8226_clocks [] = {
2463
+ [GPLL0 ] = & gpll0 .clkr ,
2464
+ [GPLL0_VOTE ] = & gpll0_vote ,
2465
+ [GPLL1 ] = & gpll1 .clkr ,
2466
+ [GPLL1_VOTE ] = & gpll1_vote ,
2467
+ [CONFIG_NOC_CLK_SRC ] = & config_noc_clk_src .clkr ,
2468
+ [PERIPH_NOC_CLK_SRC ] = & periph_noc_clk_src .clkr ,
2469
+ [SYSTEM_NOC_CLK_SRC ] = & system_noc_clk_src .clkr ,
2470
+ [BLSP1_QUP1_I2C_APPS_CLK_SRC ] = & blsp1_qup1_i2c_apps_clk_src .clkr ,
2471
+ [BLSP1_QUP1_SPI_APPS_CLK_SRC ] = & blsp1_qup1_spi_apps_clk_src .clkr ,
2472
+ [BLSP1_QUP2_I2C_APPS_CLK_SRC ] = & blsp1_qup2_i2c_apps_clk_src .clkr ,
2473
+ [BLSP1_QUP2_SPI_APPS_CLK_SRC ] = & blsp1_qup2_spi_apps_clk_src .clkr ,
2474
+ [BLSP1_QUP3_I2C_APPS_CLK_SRC ] = & blsp1_qup3_i2c_apps_clk_src .clkr ,
2475
+ [BLSP1_QUP3_SPI_APPS_CLK_SRC ] = & blsp1_qup3_spi_apps_clk_src .clkr ,
2476
+ [BLSP1_QUP4_I2C_APPS_CLK_SRC ] = & blsp1_qup4_i2c_apps_clk_src .clkr ,
2477
+ [BLSP1_QUP4_SPI_APPS_CLK_SRC ] = & blsp1_qup4_spi_apps_clk_src .clkr ,
2478
+ [BLSP1_QUP5_I2C_APPS_CLK_SRC ] = & blsp1_qup5_i2c_apps_clk_src .clkr ,
2479
+ [BLSP1_QUP5_SPI_APPS_CLK_SRC ] = & blsp1_qup5_spi_apps_clk_src .clkr ,
2480
+ [BLSP1_QUP6_I2C_APPS_CLK_SRC ] = & blsp1_qup6_i2c_apps_clk_src .clkr ,
2481
+ [BLSP1_QUP6_SPI_APPS_CLK_SRC ] = & blsp1_qup6_spi_apps_clk_src .clkr ,
2482
+ [BLSP1_UART1_APPS_CLK_SRC ] = & blsp1_uart1_apps_clk_src .clkr ,
2483
+ [BLSP1_UART2_APPS_CLK_SRC ] = & blsp1_uart2_apps_clk_src .clkr ,
2484
+ [BLSP1_UART3_APPS_CLK_SRC ] = & blsp1_uart3_apps_clk_src .clkr ,
2485
+ [BLSP1_UART4_APPS_CLK_SRC ] = & blsp1_uart4_apps_clk_src .clkr ,
2486
+ [BLSP1_UART5_APPS_CLK_SRC ] = & blsp1_uart5_apps_clk_src .clkr ,
2487
+ [BLSP1_UART6_APPS_CLK_SRC ] = & blsp1_uart6_apps_clk_src .clkr ,
2488
+ [CE1_CLK_SRC ] = & ce1_clk_src .clkr ,
2489
+ [GP1_CLK_SRC ] = & gp1_clk_src .clkr ,
2490
+ [GP2_CLK_SRC ] = & gp2_clk_src .clkr ,
2491
+ [GP3_CLK_SRC ] = & gp3_clk_src .clkr ,
2492
+ [PDM2_CLK_SRC ] = & pdm2_clk_src .clkr ,
2493
+ [SDCC1_APPS_CLK_SRC ] = & sdcc1_apps_clk_src .clkr ,
2494
+ [SDCC2_APPS_CLK_SRC ] = & sdcc2_apps_clk_src .clkr ,
2495
+ [SDCC3_APPS_CLK_SRC ] = & sdcc3_apps_clk_src .clkr ,
2496
+ [USB_HS_SYSTEM_CLK_SRC ] = & usb_hs_system_clk_src .clkr ,
2497
+ [USB_HSIC_CLK_SRC ] = & usb_hsic_clk_src .clkr ,
2498
+ [USB_HSIC_IO_CAL_CLK_SRC ] = & usb_hsic_io_cal_clk_src .clkr ,
2499
+ [USB_HSIC_SYSTEM_CLK_SRC ] = & usb_hsic_system_clk_src .clkr ,
2500
+ [GCC_BAM_DMA_AHB_CLK ] = & gcc_bam_dma_ahb_clk .clkr ,
2501
+ [GCC_BLSP1_AHB_CLK ] = & gcc_blsp1_ahb_clk .clkr ,
2502
+ [GCC_BLSP1_QUP1_I2C_APPS_CLK ] = & gcc_blsp1_qup1_i2c_apps_clk .clkr ,
2503
+ [GCC_BLSP1_QUP1_SPI_APPS_CLK ] = & gcc_blsp1_qup1_spi_apps_clk .clkr ,
2504
+ [GCC_BLSP1_QUP2_I2C_APPS_CLK ] = & gcc_blsp1_qup2_i2c_apps_clk .clkr ,
2505
+ [GCC_BLSP1_QUP2_SPI_APPS_CLK ] = & gcc_blsp1_qup2_spi_apps_clk .clkr ,
2506
+ [GCC_BLSP1_QUP3_I2C_APPS_CLK ] = & gcc_blsp1_qup3_i2c_apps_clk .clkr ,
2507
+ [GCC_BLSP1_QUP3_SPI_APPS_CLK ] = & gcc_blsp1_qup3_spi_apps_clk .clkr ,
2508
+ [GCC_BLSP1_QUP4_I2C_APPS_CLK ] = & gcc_blsp1_qup4_i2c_apps_clk .clkr ,
2509
+ [GCC_BLSP1_QUP4_SPI_APPS_CLK ] = & gcc_blsp1_qup4_spi_apps_clk .clkr ,
2510
+ [GCC_BLSP1_QUP5_I2C_APPS_CLK ] = & gcc_blsp1_qup5_i2c_apps_clk .clkr ,
2511
+ [GCC_BLSP1_QUP5_SPI_APPS_CLK ] = & gcc_blsp1_qup5_spi_apps_clk .clkr ,
2512
+ [GCC_BLSP1_QUP6_I2C_APPS_CLK ] = & gcc_blsp1_qup6_i2c_apps_clk .clkr ,
2513
+ [GCC_BLSP1_QUP6_SPI_APPS_CLK ] = & gcc_blsp1_qup6_spi_apps_clk .clkr ,
2514
+ [GCC_BLSP1_UART1_APPS_CLK ] = & gcc_blsp1_uart1_apps_clk .clkr ,
2515
+ [GCC_BLSP1_UART2_APPS_CLK ] = & gcc_blsp1_uart2_apps_clk .clkr ,
2516
+ [GCC_BLSP1_UART3_APPS_CLK ] = & gcc_blsp1_uart3_apps_clk .clkr ,
2517
+ [GCC_BLSP1_UART4_APPS_CLK ] = & gcc_blsp1_uart4_apps_clk .clkr ,
2518
+ [GCC_BLSP1_UART5_APPS_CLK ] = & gcc_blsp1_uart5_apps_clk .clkr ,
2519
+ [GCC_BLSP1_UART6_APPS_CLK ] = & gcc_blsp1_uart6_apps_clk .clkr ,
2520
+ [GCC_BOOT_ROM_AHB_CLK ] = & gcc_boot_rom_ahb_clk .clkr ,
2521
+ [GCC_CE1_AHB_CLK ] = & gcc_ce1_ahb_clk .clkr ,
2522
+ [GCC_CE1_AXI_CLK ] = & gcc_ce1_axi_clk .clkr ,
2523
+ [GCC_CE1_CLK ] = & gcc_ce1_clk .clkr ,
2524
+ [GCC_GP1_CLK ] = & gcc_gp1_clk .clkr ,
2525
+ [GCC_GP2_CLK ] = & gcc_gp2_clk .clkr ,
2526
+ [GCC_GP3_CLK ] = & gcc_gp3_clk .clkr ,
2527
+ [GCC_LPASS_Q6_AXI_CLK ] = & gcc_lpass_q6_axi_clk .clkr ,
2528
+ [GCC_MSS_CFG_AHB_CLK ] = & gcc_mss_cfg_ahb_clk .clkr ,
2529
+ [GCC_MSS_Q6_BIMC_AXI_CLK ] = & gcc_mss_q6_bimc_axi_clk .clkr ,
2530
+ [GCC_PDM2_CLK ] = & gcc_pdm2_clk .clkr ,
2531
+ [GCC_PDM_AHB_CLK ] = & gcc_pdm_ahb_clk .clkr ,
2532
+ [GCC_PDM_XO4_CLK ] = & gcc_pdm_xo4_clk .clkr ,
2533
+ [GCC_PRNG_AHB_CLK ] = & gcc_prng_ahb_clk .clkr ,
2534
+ [GCC_SDCC1_AHB_CLK ] = & gcc_sdcc1_ahb_clk .clkr ,
2535
+ [GCC_SDCC1_APPS_CLK ] = & gcc_sdcc1_apps_clk .clkr ,
2536
+ [GCC_SDCC2_AHB_CLK ] = & gcc_sdcc2_ahb_clk .clkr ,
2537
+ [GCC_SDCC2_APPS_CLK ] = & gcc_sdcc2_apps_clk .clkr ,
2538
+ [GCC_SDCC3_AHB_CLK ] = & gcc_sdcc3_ahb_clk .clkr ,
2539
+ [GCC_SDCC3_APPS_CLK ] = & gcc_sdcc3_apps_clk .clkr ,
2540
+ [GCC_USB2A_PHY_SLEEP_CLK ] = & gcc_usb2a_phy_sleep_clk .clkr ,
2541
+ [GCC_USB_HS_AHB_CLK ] = & gcc_usb_hs_ahb_clk .clkr ,
2542
+ [GCC_USB_HS_SYSTEM_CLK ] = & gcc_usb_hs_system_clk .clkr ,
2543
+ [GCC_USB_HSIC_AHB_CLK ] = & gcc_usb_hsic_ahb_clk .clkr ,
2544
+ [GCC_USB_HSIC_CLK ] = & gcc_usb_hsic_clk .clkr ,
2545
+ [GCC_USB_HSIC_IO_CAL_CLK ] = & gcc_usb_hsic_io_cal_clk .clkr ,
2546
+ [GCC_USB_HSIC_SYSTEM_CLK ] = & gcc_usb_hsic_system_clk .clkr ,
2547
+ };
2548
+
2549
+ static const struct qcom_reset_map gcc_msm8226_resets [] = {
2550
+ [GCC_USB_HS_HSIC_BCR ] = { 0x0400 },
2551
+ [GCC_USB_HS_BCR ] = { 0x0480 },
2552
+ [GCC_USB2A_PHY_BCR ] = { 0x04a8 },
2553
+ };
2554
+
2555
+ static struct gdsc * gcc_msm8226_gdscs [] = {
2556
+ [USB_HS_HSIC_GDSC ] = & usb_hs_hsic_gdsc ,
2557
+ };
2558
+
2559
+ static const struct regmap_config gcc_msm8226_regmap_config = {
2560
+ .reg_bits = 32 ,
2561
+ .reg_stride = 4 ,
2562
+ .val_bits = 32 ,
2563
+ .max_register = 0x1a80 ,
2564
+ .fast_io = true,
2565
+ };
2566
+
2567
+ static const struct qcom_cc_desc gcc_msm8226_desc = {
2568
+ .config = & gcc_msm8226_regmap_config ,
2569
+ .clks = gcc_msm8226_clocks ,
2570
+ .num_clks = ARRAY_SIZE (gcc_msm8226_clocks ),
2571
+ .resets = gcc_msm8226_resets ,
2572
+ .num_resets = ARRAY_SIZE (gcc_msm8226_resets ),
2573
+ .gdscs = gcc_msm8226_gdscs ,
2574
+ .num_gdscs = ARRAY_SIZE (gcc_msm8226_gdscs ),
2575
+ };
2576
+
2433
2577
static struct clk_regmap * gcc_msm8974_clocks [] = {
2434
2578
[GPLL0 ] = & gpll0 .clkr ,
2435
2579
[GPLL0_VOTE ] = & gpll0_vote ,
@@ -2682,13 +2826,22 @@ static const struct qcom_cc_desc gcc_msm8974_desc = {
2682
2826
};
2683
2827
2684
2828
static const struct of_device_id gcc_msm8974_match_table [] = {
2685
- { .compatible = "qcom,gcc-msm8974" },
2686
- { .compatible = "qcom,gcc-msm8974pro" , .data = (void * )1UL },
2687
- { .compatible = "qcom,gcc-msm8974pro-ac" , .data = (void * )1UL },
2829
+ { .compatible = "qcom,gcc-msm8226" , .data = & gcc_msm8226_desc },
2830
+ { .compatible = "qcom,gcc-msm8974" , .data = & gcc_msm8974_desc },
2831
+ { .compatible = "qcom,gcc-msm8974pro" , .data = & gcc_msm8974_desc },
2832
+ { .compatible = "qcom,gcc-msm8974pro-ac" , .data = & gcc_msm8974_desc },
2688
2833
{ }
2689
2834
};
2690
2835
MODULE_DEVICE_TABLE (of , gcc_msm8974_match_table );
2691
2836
2837
+ static void msm8226_clock_override (void )
2838
+ {
2839
+ ce1_clk_src .freq_tbl = ftbl_gcc_ce1_clk_msm8226 ;
2840
+ gp1_clk_src .freq_tbl = ftbl_gcc_gp_clk_msm8226 ;
2841
+ gp2_clk_src .freq_tbl = ftbl_gcc_gp_clk_msm8226 ;
2842
+ gp3_clk_src .freq_tbl = ftbl_gcc_gp_clk_msm8226 ;
2843
+ }
2844
+
2692
2845
static void msm8974_pro_clock_override (void )
2693
2846
{
2694
2847
sdcc1_apps_clk_src_init .parent_names = gcc_xo_gpll0_gpll4 ;
@@ -2708,16 +2861,18 @@ static int gcc_msm8974_probe(struct platform_device *pdev)
2708
2861
{
2709
2862
int ret ;
2710
2863
struct device * dev = & pdev -> dev ;
2711
- bool pro ;
2712
2864
const struct of_device_id * id ;
2713
2865
2714
2866
id = of_match_device (gcc_msm8974_match_table , dev );
2715
2867
if (!id )
2716
2868
return - ENODEV ;
2717
- pro = !!(id -> data );
2718
2869
2719
- if (pro )
2720
- msm8974_pro_clock_override ();
2870
+ if (!of_device_is_compatible (dev -> of_node , "qcom,gcc-msm8974" )) {
2871
+ if (id -> data == & gcc_msm8226_desc )
2872
+ msm8226_clock_override ();
2873
+ else
2874
+ msm8974_pro_clock_override ();
2875
+ }
2721
2876
2722
2877
ret = qcom_cc_register_board_clk (dev , "xo_board" , "xo" , 19200000 );
2723
2878
if (ret )
0 commit comments