diff options
author | Jordan Crouse <jcrouse@codeaurora.org> | 2017-11-21 14:40:54 -0500 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2018-01-10 08:58:42 -0500 |
commit | 728bde66df82e8a0ed6114aa55c2ee3e94ff993b (patch) | |
tree | 40edcb28cf22391952bc2c41c6fba98be0981aba | |
parent | 1babd706b455802d17762cb44ecdfcd953bb3dd5 (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.c | 44 |
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 | ||
164 | static int find_chipid(struct device *dev, u32 *chipid) | 164 | static 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; |