172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa/* 272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * Copyright (C) 2013 Samsung Electronics Co., Ltd. 372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * Tomasz Figa <t.figa@samsung.com> 472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * Copyright (c) 2004 Simtec Electronics 572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * http://armlinux.simtec.co.uk/ 672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * Written by Ben Dooks, <ben@simtec.co.uk> 772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * 872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * This program is free software; you can redistribute it and/or modify 972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * it under the terms of the GNU General Public License version 2 as 1072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * published by the Free Software Foundation. 1172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa*/ 1272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 1372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#ifndef __PLAT_SAMSUNG_PM_COMMON_H 1472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#define __PLAT_SAMSUNG_PM_COMMON_H __FILE__ 1572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 16b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa#include <linux/irq.h> 17b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 18b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa/* sleep save info */ 19b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 20b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa/** 21b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * struct sleep_save - save information for shared peripherals. 22b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * @reg: Pointer to the register to save. 23b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * @val: Holder for the value saved from reg. 24b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * 25b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * This describes a list of registers which is used by the pm core and 26b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa * other subsystem to save and restore register values over suspend. 27b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa */ 28b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figastruct sleep_save { 29b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa void __iomem *reg; 30b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa unsigned long val; 31b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa}; 32b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 33b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa#define SAVE_ITEM(x) \ 34b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa { .reg = (x) } 35b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 36b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa/* helper functions to save/restore lists of registers. */ 37b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 38b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figaextern void s3c_pm_do_save(struct sleep_save *ptr, int count); 39b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figaextern void s3c_pm_do_restore(const struct sleep_save *ptr, int count); 40b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figaextern void s3c_pm_do_restore_core(const struct sleep_save *ptr, int count); 41b27899178c53226a5ff780a17657c84eb5e32338Tomasz Figa 4272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa/* PM debug functions */ 4372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 4472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa/** 4572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * struct pm_uart_save - save block for core UART 4672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @ulcon: Save value for S3C2410_ULCON 4772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @ucon: Save value for S3C2410_UCON 4872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @ufcon: Save value for S3C2410_UFCON 4972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @umcon: Save value for S3C2410_UMCON 5072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @ubrdiv: Save value for S3C2410_UBRDIV 5172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * 5272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * Save block for UART registers to be held over sleep and restored if they 5372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * are needed (say by debug). 5472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa*/ 5572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figastruct pm_uart_save { 5672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 ulcon; 5772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 ucon; 5872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 ufcon; 5972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 umcon; 6072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 ubrdiv; 6172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa u32 udivslot; 6272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa}; 6372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 6472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#ifdef CONFIG_SAMSUNG_PM_DEBUG 6572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa/** 6672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * s3c_pm_dbg() - low level debug function for use in suspend/resume. 6772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @msg: The message to print. 6872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * 6972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * This function is used mainly to debug the resume process before the system 7072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * can rely on printk/console output. It uses the low-level debugging output 7172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * routine printascii() to do its work. 7272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa */ 7372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figaextern void s3c_pm_dbg(const char *msg, ...); 7472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 7572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa/** 7672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * s3c_pm_debug_init() - suspend/resume low level debug initialization. 7772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * @base: Virtual base of UART to use for suspend/resume debugging. 7872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * 7972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * This function needs to be called before S3C_PMDBG() can be used, to set up 8072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa * UART port base address and configuration. 8172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa */ 8272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figaextern void s3c_pm_debug_init(void); 8372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 8472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#define S3C_PMDBG(fmt...) s3c_pm_dbg(fmt) 8572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 8672551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figaextern void s3c_pm_save_uarts(void); 8772551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figaextern void s3c_pm_restore_uarts(void); 8872551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#else 8972551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#define S3C_PMDBG(fmt...) pr_debug(fmt) 9072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#define s3c_pm_debug_init() do { } while (0) 9172551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 9272551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figastatic inline void s3c_pm_save_uarts(void) { } 9372551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figastatic inline void s3c_pm_restore_uarts(void) { } 9472551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#endif 9572551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa 96f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa/* suspend memory checking */ 97f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa 98f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#ifdef CONFIG_SAMSUNG_PM_CHECK 99f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figaextern void s3c_pm_check_prepare(void); 100f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figaextern void s3c_pm_check_restore(void); 101f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figaextern void s3c_pm_check_cleanup(void); 102f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figaextern void s3c_pm_check_store(void); 103f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#else 104f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#define s3c_pm_check_prepare() do { } while (0) 105f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#define s3c_pm_check_restore() do { } while (0) 106f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#define s3c_pm_check_cleanup() do { } while (0) 107f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#define s3c_pm_check_store() do { } while (0) 108f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa#endif 109f682426630c620a2b8ae488a4f0d85ec6c272d66Tomasz Figa 11072551f6cf13e2f3a1d273b7007b5d7d7fd69c554Tomasz Figa#endif 111