mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
// |
|
// Copyright (C) 2013 Samsung Electronics Co., Ltd. |
|
// Tomasz Figa <[email protected]> |
|
// Copyright (C) 2008 Openmoko, Inc. |
|
// Copyright (C) 2004-2008 Simtec Electronics |
|
// Ben Dooks <[email protected]> |
|
// http://armlinux.simtec.co.uk/ |
|
// |
|
// Samsung common power management helper functions. |
|
|
|
#include <linux/io.h> |
|
#include <linux/kernel.h> |
|
|
|
#include "pm-common.h" |
|
|
|
/* helper functions to save and restore register state */ |
|
|
|
/** |
|
* s3c_pm_do_save() - save a set of registers for restoration on resume. |
|
* @ptr: Pointer to an array of registers. |
|
* @count: Size of the ptr array. |
|
* |
|
* Run through the list of registers given, saving their contents in the |
|
* array for later restoration when we wakeup. |
|
*/ |
|
void s3c_pm_do_save(struct sleep_save *ptr, int count) |
|
{ |
|
for (; count > 0; count--, ptr++) { |
|
ptr->val = readl_relaxed(ptr->reg); |
|
S3C_PMDBG("saved %p value %08lx\n", ptr->reg, ptr->val); |
|
} |
|
} |
|
|
|
/** |
|
* s3c_pm_do_restore() - restore register values from the save list. |
|
* @ptr: Pointer to an array of registers. |
|
* @count: Size of the ptr array. |
|
* |
|
* Restore the register values saved from s3c_pm_do_save(). |
|
* |
|
* Note, we do not use S3C_PMDBG() in here, as the system may not have |
|
* restore the UARTs state yet |
|
*/ |
|
|
|
void s3c_pm_do_restore(const struct sleep_save *ptr, int count) |
|
{ |
|
for (; count > 0; count--, ptr++) { |
|
pr_debug("restore %p (restore %08lx, was %08x)\n", |
|
ptr->reg, ptr->val, readl_relaxed(ptr->reg)); |
|
|
|
writel_relaxed(ptr->val, ptr->reg); |
|
} |
|
} |
|
|
|
/** |
|
* s3c_pm_do_restore_core() - early restore register values from save list. |
|
* @ptr: Pointer to an array of registers. |
|
* @count: Size of the ptr array. |
|
* |
|
* This is similar to s3c_pm_do_restore() except we try and minimise the |
|
* side effects of the function in case registers that hardware might need |
|
* to work has been restored. |
|
* |
|
* WARNING: Do not put any debug in here that may effect memory or use |
|
* peripherals, as things may be changing! |
|
*/ |
|
|
|
void s3c_pm_do_restore_core(const struct sleep_save *ptr, int count) |
|
{ |
|
for (; count > 0; count--, ptr++) |
|
writel_relaxed(ptr->val, ptr->reg); |
|
}
|
|
|