Commit 32725690 authored by Gilad Ben-Yossef's avatar Gilad Ben-Yossef Committed by Greg Kroah-Hartman
Browse files

staging: ccree: use Makefile to include PM code



Replace ugly ifdefs with some inline macros and Makefile magic
for optionally including power management related code for
better readability.

Signed-off-by: default avatarGilad Ben-Yossef <gilad@benyossef.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6e92010b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

obj-$(CONFIG_CRYPTO_DEV_CCREE) := ccree.o
ccree-y := ssi_driver.o ssi_buffer_mgr.o ssi_request_mgr.o ssi_cipher.o ssi_hash.o ssi_aead.o ssi_ivgen.o ssi_sram_mgr.o ssi_pm.o
ccree-y := ssi_driver.o ssi_buffer_mgr.o ssi_request_mgr.o ssi_cipher.o ssi_hash.o ssi_aead.o ssi_ivgen.o ssi_sram_mgr.o
ccree-$(CONFIG_CRYPTO_FIPS) += ssi_fips.o
ccree-$(CONFIG_DEBUG_FS) += cc_debugfs.o
ccree-$(CONFIG_PM) += ssi_pm.o
+1 −8
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
#include "ssi_hash.h"
#include "ssi_pm.h"

#if defined(CONFIG_PM)

#define POWER_DOWN_ENABLE 0x01
#define POWER_DOWN_DISABLE 0x00

@@ -103,12 +101,9 @@ int cc_pm_put_suspend(struct device *dev)
	return rc;
}

#endif

int cc_pm_init(struct cc_drvdata *drvdata)
{
	int rc = 0;
#if defined(CONFIG_PM)
	struct device *dev = drvdata_to_dev(drvdata);

	/* must be before the enabling to avoid resdundent suspending */
@@ -120,13 +115,11 @@ int cc_pm_init(struct cc_drvdata *drvdata)
		return rc;
	/* enable the PM module*/
	pm_runtime_enable(dev);
#endif

	return rc;
}

void cc_pm_fini(struct cc_drvdata *drvdata)
{
#if defined(CONFIG_PM)
	pm_runtime_disable(drvdata_to_dev(drvdata));
#endif
}
+32 −7
Original line number Diff line number Diff line
@@ -11,21 +11,46 @@

#define CC_SUSPEND_TIMEOUT 3000

int cc_pm_init(struct cc_drvdata *drvdata);

void cc_pm_fini(struct cc_drvdata *drvdata);

#if defined(CONFIG_PM)

extern const struct dev_pm_ops ccree_pm;

int cc_pm_init(struct cc_drvdata *drvdata);
void cc_pm_fini(struct cc_drvdata *drvdata);
int cc_pm_suspend(struct device *dev);

int cc_pm_resume(struct device *dev);

int cc_pm_get(struct device *dev);

int cc_pm_put_suspend(struct device *dev);

#else

static inline int cc_pm_init(struct cc_drvdata *drvdata)
{
	return 0;
}

static inline void cc_pm_fini(struct cc_drvdata *drvdata) {}

static inline int cc_pm_suspend(struct device *dev)
{
	return 0;
}

static inline int cc_pm_resume(struct device *dev)
{
	return 0;
}

static inline int cc_pm_get(struct device *dev)
{
	return 0;
}

static inline int cc_pm_put_suspend(struct device *dev)
{
	return 0;
}

#endif

#endif /*__POWER_MGR_H__*/
+2 −16
Original line number Diff line number Diff line
@@ -46,9 +46,7 @@ struct cc_req_mgr_handle {
#else
	struct tasklet_struct comptask;
#endif
#if defined(CONFIG_PM)
	bool is_runtime_suspended;
#endif
};

struct cc_bl_item {
@@ -404,9 +402,7 @@ static void cc_proc_backlog(struct cc_drvdata *drvdata)
		spin_unlock(&mgr->hw_lock);

		if (rc != -EINPROGRESS) {
#if defined(CONFIG_PM)
			cc_pm_put_suspend(dev);
#endif
			creq->user_cb(dev, req, rc);
		}

@@ -432,13 +428,12 @@ int cc_send_request(struct cc_drvdata *drvdata, struct cc_crypto_req *cc_req,
	gfp_t flags = cc_gfp_flags(req);
	struct cc_bl_item *bli;

#if defined(CONFIG_PM)
	rc = cc_pm_get(dev);
	if (rc) {
		dev_err(dev, "ssi_power_mgr_runtime_get returned %x\n", rc);
		return rc;
	}
#endif

	spin_lock_bh(&mgr->hw_lock);
	rc = cc_queues_status(drvdata, mgr, total_len);

@@ -452,9 +447,7 @@ int cc_send_request(struct cc_drvdata *drvdata, struct cc_crypto_req *cc_req,

		bli = kmalloc(sizeof(*bli), flags);
		if (!bli) {
#if defined(CONFIG_PM)
			cc_pm_put_suspend(dev);
#endif
			return -ENOMEM;
		}

@@ -486,13 +479,12 @@ int cc_send_sync_request(struct cc_drvdata *drvdata,
	cc_req->user_cb = request_mgr_complete;
	cc_req->user_arg = &cc_req->seq_compl;

#if defined(CONFIG_PM)
	rc = cc_pm_get(dev);
	if (rc) {
		dev_err(dev, "ssi_power_mgr_runtime_get returned %x\n", rc);
		return rc;
	}
#endif

	while (true) {
		spin_lock_bh(&mgr->hw_lock);
		rc = cc_queues_status(drvdata, mgr, len + 1);
@@ -502,9 +494,7 @@ int cc_send_sync_request(struct cc_drvdata *drvdata,

		spin_unlock_bh(&mgr->hw_lock);
		if (rc != -EAGAIN) {
#if defined(CONFIG_PM)
			cc_pm_put_suspend(dev);
#endif
			return rc;
		}
		wait_for_completion_interruptible(&drvdata->hw_queue_avail);
@@ -515,9 +505,7 @@ int cc_send_sync_request(struct cc_drvdata *drvdata,
	spin_unlock_bh(&mgr->hw_lock);

	if (rc != -EINPROGRESS) {
#if defined(CONFIG_PM)
		cc_pm_put_suspend(dev);
#endif
		return rc;
	}

@@ -621,9 +609,7 @@ static void proc_completions(struct cc_drvdata *drvdata)
		dev_dbg(dev, "Dequeue request tail=%u\n", *tail);
		dev_dbg(dev, "Request completed. axi_completed=%d\n",
			request_mgr_handle->axi_completed);
#if defined(CONFIG_PM)
		cc_pm_put_suspend(dev);
#endif
	}
}