+++ /dev/null
-/*
- * intel_mid_pm.h
- * Copyright (c) 2010, Intel Corporation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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.
- *
- */
-#include <linux/errno.h>
-
-#ifndef INTEL_MID_PM_H
-#define INTEL_MID_PM_H
-
-#include "../asm/intel-mid.h"
-#include <linux/init.h>
-#include <linux/pci.h>
-
-
-/* Chip ID of Intel Atom SOC*/
-#define INTEL_ATOM_MRST 0x26
-#define INTEL_ATOM_MFLD 0x27
-#define INTEL_ATOM_CLV 0x35
-#define INTEL_ATOM_MRFLD 0x4a
-#define INTEL_ATOM_BYT 0x37
-#define INTEL_ATOM_MOORFLD 0x5a
-#define INTEL_ATOM_CHT 0x4c
-
-static inline int platform_is(u8 model)
-{
- return boot_cpu_data.x86_model == model;
-}
-
-/* Register Type definitions */
-#define OSPM_REG_TYPE 0x0
-#define APM_REG_TYPE 0x1
-#define OSPM_MAX_POWER_ISLANDS 16
-#define OSPM_ISLAND_UP 0x0
-#define OSPM_ISLAND_DOWN 0x1
-/*Soft reset*/
-#define OSPM_ISLAND_SR 0x2
-
-/* North complex power islands definitions for APM block*/
-#define APM_GRAPHICS_ISLAND 0x1
-#define APM_VIDEO_DEC_ISLAND 0x2
-#define APM_VIDEO_ENC_ISLAND 0x4
-#define APM_GL3_CACHE_ISLAND 0x8
-#define APM_ISP_ISLAND 0x10
-#define APM_IPH_ISLAND 0x20
-
-/* North complex power islands definitions for OSPM block*/
-#define OSPM_DISPLAY_A_ISLAND 0x2
-#define OSPM_DISPLAY_B_ISLAND 0x80
-#define OSPM_DISPLAY_C_ISLAND 0x100
-#define OSPM_MIPI_ISLAND 0x200
-
-/* North Complex power islands definitions for Tangier */
-#define TNG_ISP_ISLAND 0x1
-/* North Complex Register definitions for Tangier */
-#define ISP_SS_PM0 0x39
-
-#define C4_STATE_IDX 3
-#define C6_STATE_IDX 4
-#define S0I1_STATE_IDX 5
-#define LPMP3_STATE_IDX 6
-#define S0I3_STATE_IDX 7
-
-#define C4_HINT (0x30)
-#define C6_HINT (0x52)
-
-#define CSTATE_EXIT_LATENCY_C1 1
-#define CSTATE_EXIT_LATENCY_C2 20
-#define CSTATE_EXIT_LATENCY_C4 100
-#define CSTATE_EXIT_LATENCY_C6 140
-#define CSTATE_EXIT_LATENCY_C7 1200
-
-/* Since entry latency is substantial
- * put exit_latency = entry+exit latency
- */
-#ifdef CONFIG_REMOVEME_INTEL_ATOM_MRFLD_POWER
-#define CSTATE_EXIT_LATENCY_S0i1 1200
-#define CSTATE_EXIT_LATENCY_S0i2 2000
-#define CSTATE_EXIT_LATENCY_S0i3 10000
-#else
-#define CSTATE_EXIT_LATENCY_LPMP3 1040
-#define CSTATE_EXIT_LATENCY_S0i1 1040
-#define CSTATE_EXIT_LATENCY_S0i3 2800
-#endif
-#define BYT_S0I1_STATE 0x60
-#define BYT_S0I2_STATE 0x62
-#define BYT_LPMP3_STATE 0x62
-#define BYT_S0I3_STATE 0x64
-
-enum s3_parts {
- PROC_FRZ,
- DEV_SUS,
- NB_CPU_OFF,
- NB_CPU_ON,
- DEV_RES,
- PROC_UNFRZ,
- MAX_S3_PARTS
-};
-
-#ifdef CONFIG_ATOM_SOC_POWER
-#define LOG_PMU_EVENTS
-
-/* Error codes for pmu */
-#define PMU_SUCCESS 0
-#define PMU_FAILED -1
-#define PMU_BUSY_STATUS 0
-#define PMU_MODE_ID 1
-#define SET_MODE 1
-#define SET_AOAC_S0i1 2
-#define SET_AOAC_S0i3 3
-#define SET_LPAUDIO 4
-#define SET_AOAC_S0i2 7
-
-#ifdef CONFIG_REMOVEME_INTEL_ATOM_MRFLD_POWER
-#define MID_S0I1_STATE 0x60
-#define MID_S0I2_STATE 0x62
-#define MID_LPMP3_STATE 0x62
-#define MID_S0I3_STATE 0x64
-#else
-#define MID_S0I1_STATE 0x1
-#define MID_LPMP3_STATE 0x3
-#define MID_S0I2_STATE 0x7
-#define MID_S0I3_STATE 0x7
-#endif
-
-#define MID_S0IX_STATE 0xf
-#define MID_S3_STATE 0x1f
-#define MID_FAST_ON_OFF_STATE 0x3f
-
-/* combinations */
-#define MID_LPI1_STATE 0x1f
-#define MID_LPI3_STATE 0x7f
-#define MID_I1I3_STATE 0xff
-
-#define REMOVE_LP_FROM_LPIX 4
-
-/* Power number for MID_POWER */
-#define C0_POWER_USAGE 450
-#define C6_POWER_USAGE 200
-#define LPMP3_POWER_USAGE 130
-#define S0I1_POWER_USAGE 50
-#define S0I3_POWER_USAGE 31
-
-extern unsigned int enable_s3;
-extern unsigned int enable_s0ix;
-
-extern void pmu_s0ix_demotion_stat(int req_state, int grant_state);
-extern unsigned int pmu_get_new_cstate(unsigned int cstate, int *index);
-extern int get_target_platform_state(unsigned long *eax);
-extern int mid_s0ix_enter(int);
-extern int pmu_set_devices_in_d0i0(void);
-extern int pmu_pci_set_power_state(struct pci_dev *pdev, pci_power_t state);
-extern pci_power_t pmu_pci_choose_state(struct pci_dev *pdev);
-
-extern void time_stamp_in_suspend_flow(int mark, bool start);
-extern void time_stamp_for_sleep_state_latency(int sleep_state,
- bool start, bool entry);
-extern int mid_state_to_sys_state(int mid_state);
-extern void pmu_power_off(void);
-extern void pmu_set_s0ix_complete(void);
-extern bool pmu_is_s0ix_in_progress(void);
-extern int pmu_nc_set_power_state
- (int islands, int state_type, int reg_type);
-extern int pmu_nc_get_power_state(int island, int reg_type);
-extern int pmu_set_emmc_to_d0i0_atomic(void);
-
-#ifdef LOG_PMU_EVENTS
-extern void pmu_log_ipc(u32 command);
-extern void pmu_log_ipc_irq(void);
-#else
-static inline void pmu_log_ipc(u32 command) { return; };
-static inline void pmu_log_ipc_irq(void) { return; };
-#endif
-extern void dump_nc_power_history(void);
-
-extern bool mid_pmu_is_wake_source(u32 lss_number);
-
-extern void (*nc_report_power_state) (u32, int);
-#else
-
-/*
- * If CONFIG_ATOM_SOC_POWER is not defined
- * fall back to C6
- */
-
-#define MID_S0I1_STATE C6_HINT
-#define MID_LPMP3_STATE C6_HINT
-#define MID_S0I3_STATE C6_HINT
-#define MID_S3_STATE C6_HINT
-#define MID_FAST_ON_OFF_STATE C6_HINT
-
-/* Power usage unknown if MID_POWER not defined */
-#define C0_POWER_USAGE 0
-#define C6_POWER_USAGE 0
-#define LPMP3_POWER_USAGE 0
-#define S0I1_POWER_USAGE 0
-#define S0I3_POWER_USAGE 0
-
-#define TEMP_DTS_ID 43
-
-static inline int pmu_nc_set_power_state
- (int islands, int state_type, int reg_type) { return 0; }
-static inline int pmu_nc_get_power_state(int island, int reg_type) { return 0; }
-
-static inline void pmu_set_s0ix_complete(void) { return; }
-static inline bool pmu_is_s0ix_in_progress(void) { return false; };
-static inline unsigned int pmu_get_new_cstate
- (unsigned int cstate, int *index) { return cstate; };
-
-/*returns function not implemented*/
-static inline void time_stamp_in_suspend_flow(int mark, bool start) {}
-static inline void time_stamp_for_sleep_state_latency(int sleep_state,
- bool start, bool entry) {}
-static inline int mid_state_to_sys_state(int mid_state) { return 0; }
-
-static inline int pmu_set_devices_in_d0i0(void) { return 0; }
-static inline void pmu_log_ipc(u32 command) { return; };
-static inline void pmu_log_ipc_irq(void) { return; };
-static inline int pmu_set_emmc_to_d0i0_atomic(void) { return -ENOSYS; }
-static inline void pmu_power_off(void) { return; }
-static inline bool mid_pmu_is_wake_source(u32 lss_number) { return false; }
-#endif /* #ifdef CONFIG_ATOM_SOC_POWER */
-
-#endif /* #ifndef INTEL_MID_PM_H */
/*
* Support for Medifield PNW Camera Imaging ISP subsystem.
*
- * Copyright (c) 2010 Intel Corporation. All Rights Reserved.
+ * Copyright (c) 2010-2017 Intel Corporation. All Rights Reserved.
*
* Copyright (c) 2010 Silicon Hive www.siliconhive.com.
*
#include <linux/timer.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
-#include "../../include/linux/intel_mid_pm.h"
#include "../../include/linux/atomisp_gmin_platform.h"
#include "hrt/hive_isp_css_mm_hrt.h"
#include "device_access.h"
-#include "../../include/linux/intel_mid_pm.h"
#include <asm/intel-mid.h>
/* G-Min addition: pull this in from intel_mid_pm.h */
#define CSTATE_EXIT_LATENCY_C1 1
-/* Moorefield lacks PCI PM, BYT advertises it but it's broken, use PUNIT */
-#define ATOMISP_INTERNAL_PM (IS_MOFD || IS_BYT || IS_CHT)
-
#ifdef ISP2401
static uint skip_fwload = 0;
module_param(skip_fwload, uint, 0644);
if (ret)
return ret;
pm_qos_update_request(&isp->pm_qos, PM_QOS_DEFAULT_VALUE);
- if (ATOMISP_INTERNAL_PM)
- ret = atomisp_mrfld_power_down(isp);
+ ret = atomisp_mrfld_power_down(isp);
return ret;
}
dev_get_drvdata(dev);
int ret;
- if (ATOMISP_INTERNAL_PM) {
- ret = atomisp_mrfld_power_up(isp);
- if (ret)
+ ret = atomisp_mrfld_power_up(isp);
+ if (ret)
return ret;
- }
pm_qos_update_request(&isp->pm_qos, isp->max_isr_latency);
if (isp->sw_contex.power_state == ATOM_ISP_POWER_DOWN) {
return ret;
}
pm_qos_update_request(&isp->pm_qos, PM_QOS_DEFAULT_VALUE);
- if (ATOMISP_INTERNAL_PM)
- ret = atomisp_mrfld_power_down(isp);
+ ret = atomisp_mrfld_power_down(isp);
return ret;
}
dev_get_drvdata(dev);
int ret;
- if (ATOMISP_INTERNAL_PM) {
- ret = atomisp_mrfld_power_up(isp);
- if (ret)
- return ret;
- }
+ ret = atomisp_mrfld_power_up(isp);
+ if (ret)
+ return ret;
pm_qos_update_request(&isp->pm_qos, isp->max_isr_latency);
atomisp_ospm_dphy_down(isp);
/* Address later when we worry about the ...field chips */
- if (ATOMISP_INTERNAL_PM) {
- if (atomisp_mrfld_power_down(isp))
- dev_err(&dev->dev, "Failed to switch off ISP\n");
- }
+ if (atomisp_mrfld_power_down(isp))
+ dev_err(&dev->dev, "Failed to switch off ISP\n");
pci_dev_put(isp->pci_root);
return err;
}