/* * Copyright (c) 2007-2017 Allwinnertech Co., Ltd. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ /* ********************************************************************************************************* * LINUX-KERNEL * AllWinner Linux Platform Develop Kits * Kernel Module * * (c) Copyright 2006-2011, kevin.z China * All Rights Reserved * * File : mem_gtbus.c * By : gq.yang * Version : v1.0 * Date : 2012-11-3 20:13 * Descript: interrupt for platform mem * Update : date auther ver notes ********************************************************************************************************* */ #include "pm_i.h" #ifdef CONFIG_ARCH_SUN9IW1P1 /* ********************************************************************************************************* * MEM gtbus SAVE * * Description: mem gtbus save. * * Arguments : none. * * Returns : 0/-1; ********************************************************************************************************* */ __s32 mem_gtbus_save(struct gtbus_state *gtbus_state) { int i = 0; gtbus_state->gtbus_reg = (gtbus_reg_list_t *) IO_ADDRESS(SUNXI_GTBUS_PBASE); gtbus_state->gtbus_reg_backup[0] = gtbus_state->gtbus_reg->master_config_reg[0]; gtbus_state->gtbus_reg_backup[1] = gtbus_state->gtbus_reg->master_config_reg[1]; gtbus_state->gtbus_reg_backup[2] = gtbus_state->gtbus_reg->master_config_reg[2]; gtbus_state->gtbus_reg_backup[3] = gtbus_state->gtbus_reg->master_config_reg[3]; gtbus_state->gtbus_reg_backup[4] = gtbus_state->gtbus_reg->master_config_reg[4]; gtbus_state->gtbus_reg_backup[5] = gtbus_state->gtbus_reg->master_config_reg[5]; gtbus_state->gtbus_reg_backup[6] = gtbus_state->gtbus_reg->master_config_reg[6]; gtbus_state->gtbus_reg_backup[7] = gtbus_state->gtbus_reg->master_config_reg[7]; gtbus_state->gtbus_reg_backup[8] = gtbus_state->gtbus_reg->master_config_reg[8]; gtbus_state->gtbus_reg_backup[9] = gtbus_state->gtbus_reg->master_config_reg[9]; gtbus_state->gtbus_reg_backup[10] = gtbus_state->gtbus_reg->master_config_reg[10]; gtbus_state->gtbus_reg_backup[11] = gtbus_state->gtbus_reg->master_config_reg[11]; gtbus_state->gtbus_reg_backup[12] = gtbus_state->gtbus_reg->master_config_reg[12]; gtbus_state->gtbus_reg_backup[13] = gtbus_state->gtbus_reg->master_config_reg[13]; gtbus_state->gtbus_reg_backup[14] = gtbus_state->gtbus_reg->master_config_reg[14]; gtbus_state->gtbus_reg_backup[15] = gtbus_state->gtbus_reg->master_config_reg[15]; gtbus_state->gtbus_reg_backup[16] = gtbus_state->gtbus_reg->master_config_reg[16]; gtbus_state->gtbus_reg_backup[17] = gtbus_state->gtbus_reg->master_config_reg[17]; gtbus_state->gtbus_reg_backup[18] = gtbus_state->gtbus_reg->master_config_reg[18]; gtbus_state->gtbus_reg_backup[19] = gtbus_state->gtbus_reg->master_config_reg[19]; gtbus_state->gtbus_reg_backup[20] = gtbus_state->gtbus_reg->master_config_reg[20]; gtbus_state->gtbus_reg_backup[21] = gtbus_state->gtbus_reg->master_config_reg[21]; gtbus_state->gtbus_reg_backup[22] = gtbus_state->gtbus_reg->master_config_reg[22]; gtbus_state->gtbus_reg_backup[23] = gtbus_state->gtbus_reg->master_config_reg[23]; gtbus_state->gtbus_reg_backup[24] = gtbus_state->gtbus_reg->master_config_reg[24]; gtbus_state->gtbus_reg_backup[25] = gtbus_state->gtbus_reg->master_config_reg[25]; gtbus_state->gtbus_reg_backup[26] = gtbus_state->gtbus_reg->master_config_reg[26]; gtbus_state->gtbus_reg_backup[27] = gtbus_state->gtbus_reg->master_config_reg[27]; gtbus_state->gtbus_reg_backup[28] = gtbus_state->gtbus_reg->master_config_reg[28]; gtbus_state->gtbus_reg_backup[29] = gtbus_state->gtbus_reg->master_config_reg[29]; gtbus_state->gtbus_reg_backup[30] = gtbus_state->gtbus_reg->master_config_reg[30]; gtbus_state->gtbus_reg_backup[31] = gtbus_state->gtbus_reg->master_config_reg[31]; gtbus_state->gtbus_reg_backup[32] = gtbus_state->gtbus_reg->master_config_reg[32]; gtbus_state->gtbus_reg_backup[33] = gtbus_state->gtbus_reg->master_config_reg[33]; gtbus_state->gtbus_reg_backup[34] = gtbus_state->gtbus_reg->master_config_reg[34]; gtbus_state->gtbus_reg_backup[35] = gtbus_state->gtbus_reg->master_config_reg[35]; gtbus_state->gtbus_reg_backup[36] = gtbus_state->gtbus_reg->band_win_config_reg; gtbus_state->gtbus_reg_backup[37] = gtbus_state->gtbus_reg->master_rd_pri_config_reg_0; gtbus_state->gtbus_reg_backup[38] = gtbus_state->gtbus_reg->master_rd_pri_config_reg_1; gtbus_state->gtbus_reg_backup[39] = gtbus_state->gtbus_reg->config_reg; gtbus_state->gtbus_reg_backup[40] = gtbus_state->gtbus_reg->soft_clk_on_reg; gtbus_state->gtbus_reg_backup[41] = gtbus_state->gtbus_reg->soft_clk_off_reg; gtbus_state->gtbus_reg_backup[42] = gtbus_state->gtbus_reg->pmu_en_reg; gtbus_state->gtbus_reg_backup[43] = gtbus_state->gtbus_reg->cci400_config_reg_0; gtbus_state->gtbus_reg_backup[44] = gtbus_state->gtbus_reg->cci400_config_reg_1; gtbus_state->gtbus_reg_backup[45] = gtbus_state->gtbus_reg->cci400_config_reg_2; gtbus_state->gtbus_reg_backup[46] = gtbus_state->gtbus_reg->ram_bist_config; if (debug_mask & PM_STANDBY_PRINT_GTBUS_REG) { for (i = 0; i < GTBUS_REG_BACKUP_LENGTH; i++) { printk("gtbus_state->gtbus_reg_backup[%d] = 0x%x .\n", i, gtbus_state->gtbus_reg_backup[i]); } } return 0; } /* ********************************************************************************************************* * MEM gtbus restore * * Description: mem gtbus restore. * * Arguments : none. * * Returns : 0/-1; ********************************************************************************************************* */ __s32 mem_gtbus_restore(struct gtbus_state *gtbus_state) { gtbus_state->gtbus_reg->master_config_reg[0] = gtbus_state->gtbus_reg_backup[0]; gtbus_state->gtbus_reg->master_config_reg[1] = gtbus_state->gtbus_reg_backup[1]; gtbus_state->gtbus_reg->master_config_reg[2] = gtbus_state->gtbus_reg_backup[2]; gtbus_state->gtbus_reg->master_config_reg[3] = gtbus_state->gtbus_reg_backup[3]; gtbus_state->gtbus_reg->master_config_reg[4] = gtbus_state->gtbus_reg_backup[4]; gtbus_state->gtbus_reg->master_config_reg[5] = gtbus_state->gtbus_reg_backup[5]; gtbus_state->gtbus_reg->master_config_reg[6] = gtbus_state->gtbus_reg_backup[6]; gtbus_state->gtbus_reg->master_config_reg[7] = gtbus_state->gtbus_reg_backup[7]; gtbus_state->gtbus_reg->master_config_reg[8] = gtbus_state->gtbus_reg_backup[8]; gtbus_state->gtbus_reg->master_config_reg[9] = gtbus_state->gtbus_reg_backup[9]; gtbus_state->gtbus_reg->master_config_reg[10] = gtbus_state->gtbus_reg_backup[10]; gtbus_state->gtbus_reg->master_config_reg[11] = gtbus_state->gtbus_reg_backup[11]; gtbus_state->gtbus_reg->master_config_reg[12] = gtbus_state->gtbus_reg_backup[12]; gtbus_state->gtbus_reg->master_config_reg[13] = gtbus_state->gtbus_reg_backup[13]; gtbus_state->gtbus_reg->master_config_reg[14] = gtbus_state->gtbus_reg_backup[14]; gtbus_state->gtbus_reg->master_config_reg[15] = gtbus_state->gtbus_reg_backup[15]; gtbus_state->gtbus_reg->master_config_reg[16] = gtbus_state->gtbus_reg_backup[16]; gtbus_state->gtbus_reg->master_config_reg[17] = gtbus_state->gtbus_reg_backup[17]; gtbus_state->gtbus_reg->master_config_reg[18] = gtbus_state->gtbus_reg_backup[18]; gtbus_state->gtbus_reg->master_config_reg[19] = gtbus_state->gtbus_reg_backup[19]; gtbus_state->gtbus_reg->master_config_reg[20] = gtbus_state->gtbus_reg_backup[20]; gtbus_state->gtbus_reg->master_config_reg[21] = gtbus_state->gtbus_reg_backup[21]; gtbus_state->gtbus_reg->master_config_reg[22] = gtbus_state->gtbus_reg_backup[22]; gtbus_state->gtbus_reg->master_config_reg[23] = gtbus_state->gtbus_reg_backup[23]; gtbus_state->gtbus_reg->master_config_reg[24] = gtbus_state->gtbus_reg_backup[24]; gtbus_state->gtbus_reg->master_config_reg[25] = gtbus_state->gtbus_reg_backup[25]; gtbus_state->gtbus_reg->master_config_reg[26] = gtbus_state->gtbus_reg_backup[26]; gtbus_state->gtbus_reg->master_config_reg[27] = gtbus_state->gtbus_reg_backup[27]; gtbus_state->gtbus_reg->master_config_reg[28] = gtbus_state->gtbus_reg_backup[28]; gtbus_state->gtbus_reg->master_config_reg[29] = gtbus_state->gtbus_reg_backup[29]; gtbus_state->gtbus_reg->master_config_reg[30] = gtbus_state->gtbus_reg_backup[30]; gtbus_state->gtbus_reg->master_config_reg[31] = gtbus_state->gtbus_reg_backup[31]; gtbus_state->gtbus_reg->master_config_reg[32] = gtbus_state->gtbus_reg_backup[32]; gtbus_state->gtbus_reg->master_config_reg[33] = gtbus_state->gtbus_reg_backup[33]; gtbus_state->gtbus_reg->master_config_reg[34] = gtbus_state->gtbus_reg_backup[34]; gtbus_state->gtbus_reg->master_config_reg[35] = gtbus_state->gtbus_reg_backup[35]; gtbus_state->gtbus_reg->band_win_config_reg = gtbus_state->gtbus_reg_backup[36]; gtbus_state->gtbus_reg->master_rd_pri_config_reg_0 = gtbus_state->gtbus_reg_backup[37]; gtbus_state->gtbus_reg->master_rd_pri_config_reg_1 = gtbus_state->gtbus_reg_backup[38]; gtbus_state->gtbus_reg->config_reg = gtbus_state->gtbus_reg_backup[39]; gtbus_state->gtbus_reg->soft_clk_on_reg = gtbus_state->gtbus_reg_backup[40]; gtbus_state->gtbus_reg->soft_clk_off_reg = gtbus_state->gtbus_reg_backup[41]; gtbus_state->gtbus_reg->pmu_en_reg = gtbus_state->gtbus_reg_backup[42]; #if 0 busy_waiting(); /* clk off: bit19 = 1; */ gtbus_state->gtbus_reg->cci400_config_reg_1 = 0x00080000; /* restore reg0, reg1 */ gtbus_state->gtbus_reg->cci400_config_reg_1 = (0x00080000 | ((~0x00080000) & gtbus_state->gtbus_reg_backup[44])); gtbus_state->gtbus_reg->cci400_config_reg_0 = gtbus_state->gtbus_reg_backup[43]; /* sec: reset cci400 */ gtbus_state->gtbus_reg->cci400_config_reg_0 = (0x80000000 | gtbus_state->gtbus_reg_backup[43]); /* make sure the reset bit is in effect? */ change_runtime_env(); delay_us(1); gtbus_state->gtbus_reg->cci400_config_reg_0 = (gtbus_state->gtbus_reg_backup[43]); /* clk on: bit19 = 0; */ gtbus_state->gtbus_reg->cci400_config_reg_1 = gtbus_state->gtbus_reg_backup[44]; gtbus_state->gtbus_reg->cci400_config_reg_2 = gtbus_state->gtbus_reg_backup[45]; #endif gtbus_state->gtbus_reg->ram_bist_config = gtbus_state->gtbus_reg_backup[46]; if (debug_mask & PM_STANDBY_PRINT_GTBUS_REG) { mem_gtbus_save(gtbus_state); } return 0; } #endif