2121#define LUT_MAX_ENTRIES 40U
2222#define LUT_SRC GENMASK(31, 30)
2323#define LUT_L_VAL GENMASK(7, 0)
24- #define LUT_ROW_SIZE 32
2524#define CLK_HW_DIV 2
2625
27- /* Register offsets */
26+ /* OSM Register offsets */
2827#define REG_ENABLE 0x0
29- #define REG_FREQ_LUT 0x110
30- #define REG_PERF_STATE 0x920
28+ #define OSM_LUT_ROW_SIZE 32
29+ #define OSM_REG_FREQ_LUT 0x110
30+ #define OSM_REG_PERF_STATE 0x920
3131
3232#define OSM_L3_MAX_LINKS 1
3333
3737struct qcom_osm_l3_icc_provider {
3838 void __iomem * base ;
3939 unsigned int max_state ;
40+ unsigned int reg_perf_state ;
4041 unsigned long lut_tables [LUT_MAX_ENTRIES ];
4142 struct icc_provider provider ;
4243};
@@ -60,6 +61,9 @@ struct qcom_icc_node {
6061struct qcom_icc_desc {
6162 struct qcom_icc_node * * nodes ;
6263 size_t num_nodes ;
64+ unsigned int lut_row_size ;
65+ unsigned int reg_freq_lut ;
66+ unsigned int reg_perf_state ;
6367};
6468
6569#define DEFINE_QNODE (_name , _id , _buswidth , ...) \
@@ -82,6 +86,9 @@ static struct qcom_icc_node *sdm845_osm_l3_nodes[] = {
8286static const struct qcom_icc_desc sdm845_icc_osm_l3 = {
8387 .nodes = sdm845_osm_l3_nodes ,
8488 .num_nodes = ARRAY_SIZE (sdm845_osm_l3_nodes ),
89+ .lut_row_size = OSM_LUT_ROW_SIZE ,
90+ .reg_freq_lut = OSM_REG_FREQ_LUT ,
91+ .reg_perf_state = OSM_REG_PERF_STATE ,
8592};
8693
8794DEFINE_QNODE (sc7180_osm_apps_l3 , SC7180_MASTER_OSM_L3_APPS , 16 , SC7180_SLAVE_OSM_L3 );
@@ -95,6 +102,9 @@ static struct qcom_icc_node *sc7180_osm_l3_nodes[] = {
95102static const struct qcom_icc_desc sc7180_icc_osm_l3 = {
96103 .nodes = sc7180_osm_l3_nodes ,
97104 .num_nodes = ARRAY_SIZE (sc7180_osm_l3_nodes ),
105+ .lut_row_size = OSM_LUT_ROW_SIZE ,
106+ .reg_freq_lut = OSM_REG_FREQ_LUT ,
107+ .reg_perf_state = OSM_REG_PERF_STATE ,
98108};
99109
100110DEFINE_QNODE (sm8150_osm_apps_l3 , SM8150_MASTER_OSM_L3_APPS , 32 , SM8150_SLAVE_OSM_L3 );
@@ -108,6 +118,9 @@ static struct qcom_icc_node *sm8150_osm_l3_nodes[] = {
108118static const struct qcom_icc_desc sm8150_icc_osm_l3 = {
109119 .nodes = sm8150_osm_l3_nodes ,
110120 .num_nodes = ARRAY_SIZE (sm8150_osm_l3_nodes ),
121+ .lut_row_size = OSM_LUT_ROW_SIZE ,
122+ .reg_freq_lut = OSM_REG_FREQ_LUT ,
123+ .reg_perf_state = OSM_REG_PERF_STATE ,
111124};
112125
113126static int qcom_icc_set (struct icc_node * src , struct icc_node * dst )
@@ -138,7 +151,7 @@ static int qcom_icc_set(struct icc_node *src, struct icc_node *dst)
138151 break ;
139152 }
140153
141- writel_relaxed (index , qp -> base + REG_PERF_STATE );
154+ writel_relaxed (index , qp -> base + qp -> reg_perf_state );
142155
143156 return 0 ;
144157}
@@ -193,9 +206,15 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
193206 return - ENODEV ;
194207 }
195208
209+ desc = device_get_match_data (& pdev -> dev );
210+ if (!desc )
211+ return - EINVAL ;
212+
213+ qp -> reg_perf_state = desc -> reg_perf_state ;
214+
196215 for (i = 0 ; i < LUT_MAX_ENTRIES ; i ++ ) {
197- info = readl_relaxed (qp -> base + REG_FREQ_LUT +
198- i * LUT_ROW_SIZE );
216+ info = readl_relaxed (qp -> base + desc -> reg_freq_lut +
217+ i * desc -> lut_row_size );
199218 src = FIELD_GET (LUT_SRC , info );
200219 lval = FIELD_GET (LUT_L_VAL , info );
201220 if (src )
@@ -214,10 +233,6 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
214233 }
215234 qp -> max_state = i ;
216235
217- desc = device_get_match_data (& pdev -> dev );
218- if (!desc )
219- return - EINVAL ;
220-
221236 qnodes = desc -> nodes ;
222237 num_nodes = desc -> num_nodes ;
223238
0 commit comments