Commit b1a14c6e authored by Jani Nikula's avatar Jani Nikula

drm/i915: refactor stepping info retrieval

Have only one if ladder for platforms and only one range check for
size. Makes it easier to handle new platforms. Remove the use of
negative return values in char, which might underflow to be positive for
some negative error codes.
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1445344713-1407-3-git-send-email-jani.nikula@intel.com
parent b9cd5bfd
...@@ -177,28 +177,25 @@ static const struct stepping_info bxt_stepping_info[] = { ...@@ -177,28 +177,25 @@ static const struct stepping_info bxt_stepping_info[] = {
{'B', '0'}, {'B', '1'}, {'B', '2'} {'B', '0'}, {'B', '1'}, {'B', '2'}
}; };
static char intel_get_stepping(struct drm_device *dev) static const struct stepping_info *intel_get_stepping_info(struct drm_device *dev)
{ {
if (IS_SKYLAKE(dev) && (dev->pdev->revision < const struct stepping_info *si;
ARRAY_SIZE(skl_stepping_info))) unsigned int size;
return skl_stepping_info[dev->pdev->revision].stepping;
else if (IS_BROXTON(dev) && (dev->pdev->revision < if (IS_SKYLAKE(dev)) {
ARRAY_SIZE(bxt_stepping_info))) size = ARRAY_SIZE(skl_stepping_info);
return bxt_stepping_info[dev->pdev->revision].stepping; si = skl_stepping_info;
else } else if (IS_BROXTON(dev)) {
return -ENODATA; size = ARRAY_SIZE(bxt_stepping_info);
} si = bxt_stepping_info;
} else {
return NULL;
}
static char intel_get_substepping(struct drm_device *dev) if (INTEL_REVID(dev) < size)
{ return si + INTEL_REVID(dev);
if (IS_SKYLAKE(dev) && (dev->pdev->revision <
ARRAY_SIZE(skl_stepping_info))) return NULL;
return skl_stepping_info[dev->pdev->revision].substepping;
else if (IS_BROXTON(dev) && (dev->pdev->revision <
ARRAY_SIZE(bxt_stepping_info)))
return bxt_stepping_info[dev->pdev->revision].substepping;
else
return -ENODATA;
} }
/** /**
...@@ -285,8 +282,8 @@ static void finish_csr_load(const struct firmware *fw, void *context) ...@@ -285,8 +282,8 @@ static void finish_csr_load(const struct firmware *fw, void *context)
struct intel_package_header *package_header; struct intel_package_header *package_header;
struct intel_dmc_header *dmc_header; struct intel_dmc_header *dmc_header;
struct intel_csr *csr = &dev_priv->csr; struct intel_csr *csr = &dev_priv->csr;
char stepping = intel_get_stepping(dev); const struct stepping_info *stepping_info = intel_get_stepping_info(dev);
char substepping = intel_get_substepping(dev); char stepping, substepping;
uint32_t dmc_offset = CSR_DEFAULT_FW_OFFSET, readcount = 0, nbytes; uint32_t dmc_offset = CSR_DEFAULT_FW_OFFSET, readcount = 0, nbytes;
uint32_t i; uint32_t i;
uint32_t *dmc_payload; uint32_t *dmc_payload;
...@@ -295,11 +292,14 @@ static void finish_csr_load(const struct firmware *fw, void *context) ...@@ -295,11 +292,14 @@ static void finish_csr_load(const struct firmware *fw, void *context)
if (!fw) if (!fw)
goto out; goto out;
if ((stepping == -ENODATA) || (substepping == -ENODATA)) { if (!stepping_info) {
DRM_ERROR("Unknown stepping info, firmware loading failed\n"); DRM_ERROR("Unknown stepping info, firmware loading failed\n");
goto out; goto out;
} }
stepping = stepping_info->stepping;
substepping = stepping_info->substepping;
/* Extract CSS Header information*/ /* Extract CSS Header information*/
css_header = (struct intel_css_header *)fw->data; css_header = (struct intel_css_header *)fw->data;
if (sizeof(struct intel_css_header) != if (sizeof(struct intel_css_header) !=
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment