Commit 2f272ef3 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Herbert Xu

crypto: ccree - clean up clock handling

Use devm_clk_get_optional() instead of devm_clk_get() and explicit
optional clock handling.
As clk_prepare_enable() and clk_disable_unprepare() handle optional
clocks fine, the cc_clk_on() and cc_clk_off() wrappers can be removed.

While at it, use the new "%pe" format specifier to print error codes.
Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent fc3b8c11
...@@ -302,20 +302,10 @@ static int init_cc_resources(struct platform_device *plat_dev) ...@@ -302,20 +302,10 @@ static int init_cc_resources(struct platform_device *plat_dev)
platform_set_drvdata(plat_dev, new_drvdata); platform_set_drvdata(plat_dev, new_drvdata);
new_drvdata->plat_dev = plat_dev; new_drvdata->plat_dev = plat_dev;
clk = devm_clk_get(dev, NULL); clk = devm_clk_get_optional(dev, NULL);
if (IS_ERR(clk)) if (IS_ERR(clk)) {
switch (PTR_ERR(clk)) { if (PTR_ERR(clk) != -EPROBE_DEFER)
/* Clock is optional so this might be fine */ dev_err(dev, "Error getting clock: %pe\n", clk);
case -ENOENT:
break;
/* Clock not available, let's try again soon */
case -EPROBE_DEFER:
return -EPROBE_DEFER;
default:
dev_err(dev, "Error getting clock: %ld\n",
PTR_ERR(clk));
return PTR_ERR(clk); return PTR_ERR(clk);
} }
new_drvdata->clk = clk; new_drvdata->clk = clk;
...@@ -362,7 +352,7 @@ static int init_cc_resources(struct platform_device *plat_dev) ...@@ -362,7 +352,7 @@ static int init_cc_resources(struct platform_device *plat_dev)
return rc; return rc;
} }
rc = cc_clk_on(new_drvdata); rc = clk_prepare_enable(new_drvdata->clk);
if (rc) { if (rc) {
dev_err(dev, "Failed to enable clock"); dev_err(dev, "Failed to enable clock");
return rc; return rc;
...@@ -545,7 +535,7 @@ static int init_cc_resources(struct platform_device *plat_dev) ...@@ -545,7 +535,7 @@ static int init_cc_resources(struct platform_device *plat_dev)
post_regs_err: post_regs_err:
fini_cc_regs(new_drvdata); fini_cc_regs(new_drvdata);
post_clk_err: post_clk_err:
cc_clk_off(new_drvdata); clk_disable_unprepare(new_drvdata->clk);
return rc; return rc;
} }
...@@ -569,23 +559,7 @@ static void cleanup_cc_resources(struct platform_device *plat_dev) ...@@ -569,23 +559,7 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
cc_fips_fini(drvdata); cc_fips_fini(drvdata);
cc_debugfs_fini(drvdata); cc_debugfs_fini(drvdata);
fini_cc_regs(drvdata); fini_cc_regs(drvdata);
cc_clk_off(drvdata); clk_disable_unprepare(drvdata->clk);
}
int cc_clk_on(struct cc_drvdata *drvdata)
{
struct clk *clk = drvdata->clk;
int rc;
if (IS_ERR(clk))
/* Not all devices have a clock associated with CCREE */
return 0;
rc = clk_prepare_enable(clk);
if (rc)
return rc;
return 0;
} }
unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata) unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata)
...@@ -596,17 +570,6 @@ unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata) ...@@ -596,17 +570,6 @@ unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata)
return HASH_LEN_SIZE_630; return HASH_LEN_SIZE_630;
} }
void cc_clk_off(struct cc_drvdata *drvdata)
{
struct clk *clk = drvdata->clk;
if (IS_ERR(clk))
/* Not all devices have a clock associated with CCREE */
return;
clk_disable_unprepare(clk);
}
static int ccree_probe(struct platform_device *plat_dev) static int ccree_probe(struct platform_device *plat_dev)
{ {
int rc; int rc;
......
...@@ -212,8 +212,6 @@ static inline void dump_byte_array(const char *name, const u8 *the_array, ...@@ -212,8 +212,6 @@ static inline void dump_byte_array(const char *name, const u8 *the_array,
bool cc_wait_for_reset_completion(struct cc_drvdata *drvdata); bool cc_wait_for_reset_completion(struct cc_drvdata *drvdata);
int init_cc_regs(struct cc_drvdata *drvdata, bool is_probe); int init_cc_regs(struct cc_drvdata *drvdata, bool is_probe);
void fini_cc_regs(struct cc_drvdata *drvdata); void fini_cc_regs(struct cc_drvdata *drvdata);
int cc_clk_on(struct cc_drvdata *drvdata);
void cc_clk_off(struct cc_drvdata *drvdata);
unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata); unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata);
static inline void cc_iowrite(struct cc_drvdata *drvdata, u32 reg, u32 val) static inline void cc_iowrite(struct cc_drvdata *drvdata, u32 reg, u32 val)
......
...@@ -26,7 +26,7 @@ int cc_pm_suspend(struct device *dev) ...@@ -26,7 +26,7 @@ int cc_pm_suspend(struct device *dev)
dev_dbg(dev, "set HOST_POWER_DOWN_EN\n"); dev_dbg(dev, "set HOST_POWER_DOWN_EN\n");
fini_cc_regs(drvdata); fini_cc_regs(drvdata);
cc_iowrite(drvdata, CC_REG(HOST_POWER_DOWN_EN), POWER_DOWN_ENABLE); cc_iowrite(drvdata, CC_REG(HOST_POWER_DOWN_EN), POWER_DOWN_ENABLE);
cc_clk_off(drvdata); clk_disable_unprepare(drvdata->clk);
return 0; return 0;
} }
...@@ -37,7 +37,7 @@ int cc_pm_resume(struct device *dev) ...@@ -37,7 +37,7 @@ int cc_pm_resume(struct device *dev)
dev_dbg(dev, "unset HOST_POWER_DOWN_EN\n"); dev_dbg(dev, "unset HOST_POWER_DOWN_EN\n");
/* Enables the device source clk */ /* Enables the device source clk */
rc = cc_clk_on(drvdata); rc = clk_prepare_enable(drvdata->clk);
if (rc) { if (rc) {
dev_err(dev, "failed getting clock back on. We're toast.\n"); dev_err(dev, "failed getting clock back on. We're toast.\n");
return rc; return rc;
......
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