aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Crouse <jcrouse@codeaurora.org>2017-11-21 14:40:54 -0500
committerRob Clark <robdclark@gmail.com>2018-01-10 08:58:42 -0500
commit728bde66df82e8a0ed6114aa55c2ee3e94ff993b (patch)
tree40edcb28cf22391952bc2c41c6fba98be0981aba
parent1babd706b455802d17762cb44ecdfcd953bb3dd5 (diff)
drm/msm/adreno: Cleanup chipid parsing
We don't need to convert the chipid to an intermediate value and then back again into a struct adreno_rev. Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_device.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
index deda55ee61f9..fd2145489c5f 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
@@ -161,39 +161,45 @@ static void set_gpu_pdev(struct drm_device *dev,
161 priv->gpu_pdev = pdev; 161 priv->gpu_pdev = pdev;
162} 162}
163 163
164static int find_chipid(struct device *dev, u32 *chipid) 164static int find_chipid(struct device *dev, struct adreno_rev *rev)
165{ 165{
166 struct device_node *node = dev->of_node; 166 struct device_node *node = dev->of_node;
167 const char *compat; 167 const char *compat;
168 int ret; 168 int ret;
169 u32 chipid;
169 170
170 /* first search the compat strings for qcom,adreno-XYZ.W: */ 171 /* first search the compat strings for qcom,adreno-XYZ.W: */
171 ret = of_property_read_string_index(node, "compatible", 0, &compat); 172 ret = of_property_read_string_index(node, "compatible", 0, &compat);
172 if (ret == 0) { 173 if (ret == 0) {
173 unsigned rev, patch; 174 unsigned int r, patch;
174 175
175 if (sscanf(compat, "qcom,adreno-%u.%u", &rev, &patch) == 2) { 176 if (sscanf(compat, "qcom,adreno-%u.%u", &r, &patch) == 2) {
176 *chipid = 0; 177 rev->core = r / 100;
177 *chipid |= (rev / 100) << 24; /* core */ 178 r %= 100;
178 rev %= 100; 179 rev->major = r / 10;
179 *chipid |= (rev / 10) << 16; /* major */ 180 r %= 10;
180 rev %= 10; 181 rev->minor = r;
181 *chipid |= rev << 8; /* minor */ 182 rev->patchid = patch;
182 *chipid |= patch;
183 183
184 return 0; 184 return 0;
185 } 185 }
186 } 186 }
187 187
188 /* and if that fails, fall back to legacy "qcom,chipid" property: */ 188 /* and if that fails, fall back to legacy "qcom,chipid" property: */
189 ret = of_property_read_u32(node, "qcom,chipid", chipid); 189 ret = of_property_read_u32(node, "qcom,chipid", &chipid);
190 if (ret) 190 if (ret) {
191 dev_err(dev, "could not parse qcom,chipid: %d\n", ret);
191 return ret; 192 return ret;
193 }
194
195 rev->core = (chipid >> 24) & 0xff;
196 rev->major = (chipid >> 16) & 0xff;
197 rev->minor = (chipid >> 8) & 0xff;
198 rev->patchid = (chipid & 0xff);
192 199
193 dev_warn(dev, "Using legacy qcom,chipid binding!\n"); 200 dev_warn(dev, "Using legacy qcom,chipid binding!\n");
194 dev_warn(dev, "Use compatible qcom,adreno-%u%u%u.%u instead.\n", 201 dev_warn(dev, "Use compatible qcom,adreno-%u%u%u.%u instead.\n",
195 (*chipid >> 24) & 0xff, (*chipid >> 16) & 0xff, 202 rev->core, rev->major, rev->minor, rev->patchid);
196 (*chipid >> 8) & 0xff, *chipid & 0xff);
197 203
198 return 0; 204 return 0;
199} 205}
@@ -268,17 +274,11 @@ static int adreno_bind(struct device *dev, struct device *master, void *data)
268 const struct adreno_info *info; 274 const struct adreno_info *info;
269 struct drm_device *drm = dev_get_drvdata(master); 275 struct drm_device *drm = dev_get_drvdata(master);
270 struct msm_gpu *gpu; 276 struct msm_gpu *gpu;
271 u32 val;
272 int ret; 277 int ret;
273 278
274 ret = find_chipid(dev, &val); 279 ret = find_chipid(dev, &config.rev);
275 if (ret) { 280 if (ret)
276 dev_err(dev, "could not find chipid: %d\n", ret);
277 return ret; 281 return ret;
278 }
279
280 config.rev = ADRENO_REV((val >> 24) & 0xff,
281 (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff);
282 282
283 /* find clock rates: */ 283 /* find clock rates: */
284 config.fast_rate = 0; 284 config.fast_rate = 0;