// SPDX-License-Identifier: GPL-2.0
//
// Copyright (C) 2013 Samsung Electronics Co., Ltd.
// Tomasz Figa <t.figa@samsung.com>
// Copyright (C) 2008 Openmoko, Inc.
// Copyright (C) 2004-2008 Simtec Electronics
// Ben Dooks <ben@simtec.co.uk>
// 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);
}
Messung V0.5 in Prozent C=82 H=58 G=70
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland