Skip to content

Commit a6df111

Browse files
Lanik123andersson
authored andcommitted
clk: qcom: gcc: Add support for Global Clock controller found on SDM439
Modify existing MSM8917 driver to support SDM439 SoC. SDM439 SoC has the same changes as MSM8937 SoC, but with different gpll3 vco rate and different GFX3D clock frequency table. Signed-off-by: Daniil Titov <daniilt971@gmail.com> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Link: https://lore.kernel.org/r/20251117-gcc-msm8940-sdm439-v2-4-4af57c8bc7eb@mainlining.org Signed-off-by: Bjorn Andersson <andersson@kernel.org>
1 parent 7a5a8a6 commit a6df111

2 files changed

Lines changed: 51 additions & 2 deletions

File tree

drivers/clk/qcom/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,12 +387,12 @@ config MSM_GCC_8916
387387
SD/eMMC, display, graphics, camera etc.
388388

389389
config MSM_GCC_8917
390-
tristate "MSM89(17/37/40)/QM215 Global Clock Controller"
390+
tristate "MSM89(17/37/40)/QM215/SDM439 Global Clock Controller"
391391
depends on ARM64 || COMPILE_TEST
392392
select QCOM_GDSC
393393
help
394394
Support for the global clock controller on msm8917, msm8937,
395-
msm8940 and qm215 devices.
395+
msm8940, qm215 and sdm439 devices.
396396
Say Y if you want to use devices such as UART, SPI i2c, USB,
397397
SD/eMMC, display, graphics, camera etc.
398398

drivers/clk/qcom/gcc-msm8917.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,27 @@ static const struct freq_tbl ftbl_gfx3d_clk_src_msm8940[] = {
978978
{ }
979979
};
980980

981+
static const struct freq_tbl ftbl_gfx3d_clk_src_sdm439[] = {
982+
F(19200000, P_XO, 1, 0, 0),
983+
F(50000000, P_GPLL0, 16, 0, 0),
984+
F(80000000, P_GPLL0, 10, 0, 0),
985+
F(100000000, P_GPLL0, 8, 0, 0),
986+
F(160000000, P_GPLL0, 5, 0, 0),
987+
F(200000000, P_GPLL0, 4, 0, 0),
988+
F(216000000, P_GPLL6, 5, 0, 0),
989+
F(228570000, P_GPLL0, 3.5, 0, 0),
990+
F(240000000, P_GPLL6, 4.5, 0, 0),
991+
F(266670000, P_GPLL0, 3, 0, 0),
992+
F(320000000, P_GPLL0, 2.5, 0, 0),
993+
F(355200000, P_GPLL3, 1, 0, 0),
994+
F(400000000, P_GPLL0, 2, 0, 0),
995+
F(450000000, P_GPLL3, 1, 0, 0),
996+
F(510000000, P_GPLL3, 1, 0, 0),
997+
F(560000000, P_GPLL3, 1, 0, 0),
998+
F(650000000, P_GPLL3, 1, 0, 0),
999+
{ }
1000+
};
1001+
9811002
static struct clk_rcg2 gfx3d_clk_src = {
9821003
.cmd_rcgr = 0x59000,
9831004
.hid_width = 5,
@@ -4061,6 +4082,16 @@ static const struct qcom_cc_desc gcc_msm8940_desc = {
40614082
.num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs),
40624083
};
40634084

4085+
static const struct qcom_cc_desc gcc_sdm439_desc = {
4086+
.config = &gcc_msm8917_regmap_config,
4087+
.clks = gcc_msm8937_clocks,
4088+
.num_clks = ARRAY_SIZE(gcc_msm8937_clocks),
4089+
.resets = gcc_msm8917_resets,
4090+
.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
4091+
.gdscs = gcc_msm8937_gdscs,
4092+
.num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs),
4093+
};
4094+
40644095
static void msm8937_clock_override(void)
40654096
{
40664097
/* GPLL3 750MHz configuration */
@@ -4086,6 +4117,21 @@ static void msm8937_clock_override(void)
40864117
usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937;
40874118
}
40884119

4120+
static void sdm439_clock_override(void)
4121+
{
4122+
vcodec0_clk_src.parent_map = gcc_cpp_map;
4123+
vcodec0_clk_src.clkr.hw.init = &vcodec0_clk_src_init_msm8937;
4124+
4125+
vfe0_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
4126+
vfe1_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
4127+
cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_msm8937;
4128+
vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_msm8937;
4129+
gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_sdm439;
4130+
csi0phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
4131+
csi1phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
4132+
usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937;
4133+
}
4134+
40894135
static int gcc_msm8917_probe(struct platform_device *pdev)
40904136
{
40914137
struct regmap *regmap;
@@ -4101,6 +4147,8 @@ static int gcc_msm8917_probe(struct platform_device *pdev)
41014147
} else if (gcc_desc == &gcc_msm8940_desc) {
41024148
msm8937_clock_override();
41034149
gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_msm8940;
4150+
} else if (gcc_desc == &gcc_sdm439_desc) {
4151+
sdm439_clock_override();
41044152
}
41054153

41064154
regmap = qcom_cc_map(pdev, gcc_desc);
@@ -4117,6 +4165,7 @@ static const struct of_device_id gcc_msm8917_match_table[] = {
41174165
{ .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
41184166
{ .compatible = "qcom,gcc-msm8937", .data = &gcc_msm8937_desc },
41194167
{ .compatible = "qcom,gcc-msm8940", .data = &gcc_msm8940_desc },
4168+
{ .compatible = "qcom,gcc-sdm439", .data = &gcc_sdm439_desc },
41204169
{},
41214170
};
41224171
MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);

0 commit comments

Comments
 (0)