xref: /linux/drivers/soc/qcom/ubwc_config.c (revision 18ee2b9b7bd4e2346e467101c973d62300c8ba85)
11924272bSKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
21924272bSKonrad Dybcio /*
31924272bSKonrad Dybcio  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
41924272bSKonrad Dybcio  */
51924272bSKonrad Dybcio 
61924272bSKonrad Dybcio #include <linux/debugfs.h>
71924272bSKonrad Dybcio #include <linux/io.h>
81924272bSKonrad Dybcio #include <linux/module.h>
91924272bSKonrad Dybcio #include <linux/of.h>
101924272bSKonrad Dybcio #include <linux/of_address.h>
111924272bSKonrad Dybcio #include <linux/platform_device.h>
121924272bSKonrad Dybcio 
131924272bSKonrad Dybcio #include <linux/soc/qcom/ubwc.h>
141924272bSKonrad Dybcio 
15197713d0SDmitry Baryshkov static const struct qcom_ubwc_cfg_data no_ubwc_data = {
16197713d0SDmitry Baryshkov 	/* no UBWC, no HBB */
17197713d0SDmitry Baryshkov };
18197713d0SDmitry Baryshkov 
191924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data msm8937_data = {
201924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_1_0,
211924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_1_0,
2227282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL1 |
2327282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL2 |
2427282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
251924272bSKonrad Dybcio 	.highest_bank_bit = 14,
261924272bSKonrad Dybcio };
271924272bSKonrad Dybcio 
281924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data msm8998_data = {
291924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_1_0,
301924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_1_0,
3127282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL1 |
3227282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL2 |
3327282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
341924272bSKonrad Dybcio 	.highest_bank_bit = 15,
351924272bSKonrad Dybcio };
361924272bSKonrad Dybcio 
371924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data qcm2290_data = {
381924272bSKonrad Dybcio 	/* no UBWC */
391924272bSKonrad Dybcio 	.highest_bank_bit = 15,
401924272bSKonrad Dybcio };
411924272bSKonrad Dybcio 
421924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sa8775p_data = {
431924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
441924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_0,
45709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL3,
461924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
471924272bSKonrad Dybcio 	.highest_bank_bit = 13,
481924272bSKonrad Dybcio 	.macrotile_mode = true,
491924272bSKonrad Dybcio };
501924272bSKonrad Dybcio 
511924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sar2130p_data = {
521924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_3_0, /* 4.0.2 in hw */
531924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_3,
54709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
55709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
561924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
571924272bSKonrad Dybcio 	.highest_bank_bit = 13,
581924272bSKonrad Dybcio 	.macrotile_mode = true,
591924272bSKonrad Dybcio };
601924272bSKonrad Dybcio 
611924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sc7180_data = {
621924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
631924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
64709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
65709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
661924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
671924272bSKonrad Dybcio 	.highest_bank_bit = 14,
681924272bSKonrad Dybcio };
691924272bSKonrad Dybcio 
701924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sc7280_data = {
711924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_3_0,
721924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_0,
73709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
74709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
751924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
761924272bSKonrad Dybcio 	.highest_bank_bit = 14,
771924272bSKonrad Dybcio 	.macrotile_mode = true,
781924272bSKonrad Dybcio };
791924272bSKonrad Dybcio 
801924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sc8180x_data = {
811924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_3_0,
821924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_3_0,
8327282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
8427282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
851924272bSKonrad Dybcio 	.highest_bank_bit = 16,
861924272bSKonrad Dybcio 	.macrotile_mode = true,
871924272bSKonrad Dybcio };
881924272bSKonrad Dybcio 
891924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sc8280xp_data = {
901924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
911924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_0,
92709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
93709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
941924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
951924272bSKonrad Dybcio 	.highest_bank_bit = 16,
961924272bSKonrad Dybcio 	.macrotile_mode = true,
971924272bSKonrad Dybcio };
981924272bSKonrad Dybcio 
991924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sdm670_data = {
1001924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
1011924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
10227282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
10327282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1041924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1051924272bSKonrad Dybcio };
1061924272bSKonrad Dybcio 
1071924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sdm845_data = {
1081924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
1091924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
11027282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
11127282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1121924272bSKonrad Dybcio 	.highest_bank_bit = 15,
1131924272bSKonrad Dybcio };
1141924272bSKonrad Dybcio 
1151924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm6115_data = {
1161924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_1_0,
1171924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
118709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL1 |
119709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL2 |
120709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1211924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
1221924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1231924272bSKonrad Dybcio };
1241924272bSKonrad Dybcio 
1251924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm6125_data = {
1261924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_1_0,
1271924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_3_0,
128709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL1 |
129709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL2 |
130709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1311924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1321924272bSKonrad Dybcio };
1331924272bSKonrad Dybcio 
1341924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm6150_data = {
1351924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
1361924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
13727282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
13827282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1391924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1401924272bSKonrad Dybcio };
1411924272bSKonrad Dybcio 
1421924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm6350_data = {
1431924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
1441924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
145709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
146709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1471924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
1481924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1491924272bSKonrad Dybcio };
1501924272bSKonrad Dybcio 
1511924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm7150_data = {
1521924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_2_0,
1531924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_2_0,
15427282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
15527282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1561924272bSKonrad Dybcio 	.highest_bank_bit = 14,
1571924272bSKonrad Dybcio };
1581924272bSKonrad Dybcio 
1591924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm8150_data = {
1601924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_3_0,
1611924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_3_0,
16227282859SKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
16327282859SKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1641924272bSKonrad Dybcio 	.highest_bank_bit = 15,
1651924272bSKonrad Dybcio };
1661924272bSKonrad Dybcio 
1671924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm8250_data = {
1681924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
1691924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_0,
170709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
171709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1721924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
1731924272bSKonrad Dybcio 	/* TODO: highest_bank_bit = 15 for LP_DDR4 */
1741924272bSKonrad Dybcio 	.highest_bank_bit = 16,
1751924272bSKonrad Dybcio 	.macrotile_mode = true,
1761924272bSKonrad Dybcio };
1771924272bSKonrad Dybcio 
1781924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm8350_data = {
1791924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
1801924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_0,
181709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
182709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1831924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
1841924272bSKonrad Dybcio 	/* TODO: highest_bank_bit = 15 for LP_DDR4 */
1851924272bSKonrad Dybcio 	.highest_bank_bit = 16,
1861924272bSKonrad Dybcio 	.macrotile_mode = true,
1871924272bSKonrad Dybcio };
1881924272bSKonrad Dybcio 
1891924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm8550_data = {
1901924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
1911924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_3,
192709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
193709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
1941924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
1951924272bSKonrad Dybcio 	/* TODO: highest_bank_bit = 15 for LP_DDR4 */
1961924272bSKonrad Dybcio 	.highest_bank_bit = 16,
1971924272bSKonrad Dybcio 	.macrotile_mode = true,
1981924272bSKonrad Dybcio };
1991924272bSKonrad Dybcio 
2001924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data sm8750_data = {
2011924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_5_0,
2021924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_5_0,
2031924272bSKonrad Dybcio 	.ubwc_swizzle = 6,
2041924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
2051924272bSKonrad Dybcio 	/* TODO: highest_bank_bit = 15 for LP_DDR4 */
2061924272bSKonrad Dybcio 	.highest_bank_bit = 16,
2071924272bSKonrad Dybcio 	.macrotile_mode = true,
2081924272bSKonrad Dybcio };
2091924272bSKonrad Dybcio 
2101924272bSKonrad Dybcio static const struct qcom_ubwc_cfg_data x1e80100_data = {
2111924272bSKonrad Dybcio 	.ubwc_enc_version = UBWC_4_0,
2121924272bSKonrad Dybcio 	.ubwc_dec_version = UBWC_4_3,
213709dd2ffSKonrad Dybcio 	.ubwc_swizzle = UBWC_SWIZZLE_ENABLE_LVL2 |
214709dd2ffSKonrad Dybcio 			UBWC_SWIZZLE_ENABLE_LVL3,
2151924272bSKonrad Dybcio 	.ubwc_bank_spread = true,
2161924272bSKonrad Dybcio 	/* TODO: highest_bank_bit = 15 for LP_DDR4 */
2171924272bSKonrad Dybcio 	.highest_bank_bit = 16,
2181924272bSKonrad Dybcio 	.macrotile_mode = true,
2191924272bSKonrad Dybcio };
2201924272bSKonrad Dybcio 
2211924272bSKonrad Dybcio static const struct of_device_id qcom_ubwc_configs[] __maybe_unused = {
222197713d0SDmitry Baryshkov 	{ .compatible = "qcom,apq8016", .data = &no_ubwc_data },
223197713d0SDmitry Baryshkov 	{ .compatible = "qcom,apq8026", .data = &no_ubwc_data },
224197713d0SDmitry Baryshkov 	{ .compatible = "qcom,apq8074", .data = &no_ubwc_data },
2251924272bSKonrad Dybcio 	{ .compatible = "qcom,apq8096", .data = &msm8998_data },
226197713d0SDmitry Baryshkov 	{ .compatible = "qcom,msm8226", .data = &no_ubwc_data },
227197713d0SDmitry Baryshkov 	{ .compatible = "qcom,msm8916", .data = &no_ubwc_data },
2285cfd298cSDmitry Baryshkov 	{ .compatible = "qcom,msm8917", .data = &no_ubwc_data },
2291924272bSKonrad Dybcio 	{ .compatible = "qcom,msm8937", .data = &msm8937_data },
230ec770bb2SDmitry Baryshkov 	{ .compatible = "qcom,msm8929", .data = &no_ubwc_data },
231197713d0SDmitry Baryshkov 	{ .compatible = "qcom,msm8939", .data = &no_ubwc_data },
2321924272bSKonrad Dybcio 	{ .compatible = "qcom,msm8953", .data = &msm8937_data },
233*3cf6147fSDmitry Baryshkov 	{ .compatible = "qcom,msm8956", .data = &no_ubwc_data },
234197713d0SDmitry Baryshkov 	{ .compatible = "qcom,msm8974", .data = &no_ubwc_data },
235*3cf6147fSDmitry Baryshkov 	{ .compatible = "qcom,msm8976", .data = &no_ubwc_data },
2361924272bSKonrad Dybcio 	{ .compatible = "qcom,msm8996", .data = &msm8998_data },
2371924272bSKonrad Dybcio 	{ .compatible = "qcom,msm8998", .data = &msm8998_data },
2381924272bSKonrad Dybcio 	{ .compatible = "qcom,qcm2290", .data = &qcm2290_data, },
2391924272bSKonrad Dybcio 	{ .compatible = "qcom,qcm6490", .data = &sc7280_data, },
2401924272bSKonrad Dybcio 	{ .compatible = "qcom,sa8155p", .data = &sm8150_data, },
2411924272bSKonrad Dybcio 	{ .compatible = "qcom,sa8540p", .data = &sc8280xp_data, },
2421924272bSKonrad Dybcio 	{ .compatible = "qcom,sa8775p", .data = &sa8775p_data, },
2431924272bSKonrad Dybcio 	{ .compatible = "qcom,sar2130p", .data = &sar2130p_data },
2441924272bSKonrad Dybcio 	{ .compatible = "qcom,sc7180", .data = &sc7180_data },
2451924272bSKonrad Dybcio 	{ .compatible = "qcom,sc7280", .data = &sc7280_data, },
2461924272bSKonrad Dybcio 	{ .compatible = "qcom,sc8180x", .data = &sc8180x_data, },
2471924272bSKonrad Dybcio 	{ .compatible = "qcom,sc8280xp", .data = &sc8280xp_data, },
24861f3c19aSDmitry Baryshkov 	{ .compatible = "qcom,sda660", .data = &msm8937_data },
24961f3c19aSDmitry Baryshkov 	{ .compatible = "qcom,sdm450", .data = &msm8937_data },
2501924272bSKonrad Dybcio 	{ .compatible = "qcom,sdm630", .data = &msm8937_data },
25161f3c19aSDmitry Baryshkov 	{ .compatible = "qcom,sdm632", .data = &msm8937_data },
2521924272bSKonrad Dybcio 	{ .compatible = "qcom,sdm636", .data = &msm8937_data },
2531924272bSKonrad Dybcio 	{ .compatible = "qcom,sdm660", .data = &msm8937_data },
2541924272bSKonrad Dybcio 	{ .compatible = "qcom,sdm670", .data = &sdm670_data, },
2551924272bSKonrad Dybcio 	{ .compatible = "qcom,sdm845", .data = &sdm845_data, },
2561924272bSKonrad Dybcio 	{ .compatible = "qcom,sm4250", .data = &sm6115_data, },
2571924272bSKonrad Dybcio 	{ .compatible = "qcom,sm6115", .data = &sm6115_data, },
2581924272bSKonrad Dybcio 	{ .compatible = "qcom,sm6125", .data = &sm6125_data, },
2591924272bSKonrad Dybcio 	{ .compatible = "qcom,sm6150", .data = &sm6150_data, },
2601924272bSKonrad Dybcio 	{ .compatible = "qcom,sm6350", .data = &sm6350_data, },
2611924272bSKonrad Dybcio 	{ .compatible = "qcom,sm6375", .data = &sm6350_data, },
2621924272bSKonrad Dybcio 	{ .compatible = "qcom,sm7125", .data = &sc7180_data },
2631924272bSKonrad Dybcio 	{ .compatible = "qcom,sm7150", .data = &sm7150_data, },
2640b6974bbSLuca Weiss 	{ .compatible = "qcom,sm7225", .data = &sm6350_data, },
26561f3c19aSDmitry Baryshkov 	{ .compatible = "qcom,sm7325", .data = &sc7280_data, },
2661924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8150", .data = &sm8150_data, },
2671924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8250", .data = &sm8250_data, },
2681924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8350", .data = &sm8350_data, },
2691924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8450", .data = &sm8350_data, },
2701924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8550", .data = &sm8550_data, },
2711924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8650", .data = &sm8550_data, },
2721924272bSKonrad Dybcio 	{ .compatible = "qcom,sm8750", .data = &sm8750_data, },
2731924272bSKonrad Dybcio 	{ .compatible = "qcom,x1e80100", .data = &x1e80100_data, },
2741924272bSKonrad Dybcio 	{ .compatible = "qcom,x1p42100", .data = &x1e80100_data, },
2751924272bSKonrad Dybcio 	{ }
2761924272bSKonrad Dybcio };
2771924272bSKonrad Dybcio 
qcom_ubwc_config_get_data(void)2781924272bSKonrad Dybcio const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void)
2791924272bSKonrad Dybcio {
2801924272bSKonrad Dybcio 	const struct of_device_id *match;
2811924272bSKonrad Dybcio 	struct device_node *root;
2821924272bSKonrad Dybcio 
2831924272bSKonrad Dybcio 	root = of_find_node_by_path("/");
2841924272bSKonrad Dybcio 	if (!root)
2851924272bSKonrad Dybcio 		return ERR_PTR(-ENODEV);
2861924272bSKonrad Dybcio 
2871924272bSKonrad Dybcio 	match = of_match_node(qcom_ubwc_configs, root);
2881924272bSKonrad Dybcio 	of_node_put(root);
2891924272bSKonrad Dybcio 	if (!match) {
2901924272bSKonrad Dybcio 		pr_err("Couldn't find UBWC config data for this platform!\n");
2911924272bSKonrad Dybcio 		return ERR_PTR(-EINVAL);
2921924272bSKonrad Dybcio 	}
2931924272bSKonrad Dybcio 
2941924272bSKonrad Dybcio 	return match->data;
2951924272bSKonrad Dybcio }
2961924272bSKonrad Dybcio EXPORT_SYMBOL_GPL(qcom_ubwc_config_get_data);
2971924272bSKonrad Dybcio 
2981924272bSKonrad Dybcio MODULE_LICENSE("GPL");
2991924272bSKonrad Dybcio MODULE_DESCRIPTION("UBWC config database for QTI SoCs");
300