2019-06-01 10:08:55 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2010-02-12 10:31:47 -08:00
/*
2013-10-17 15:35:27 -07:00
* intel - mid . h : Intel MID specific setup code
2010-02-12 10:31:47 -08:00
*
* ( C ) Copyright 2009 Intel Corporation
*/
2013-10-17 15:35:27 -07:00
# ifndef _ASM_X86_INTEL_MID_H
# define _ASM_X86_INTEL_MID_H
2010-09-13 15:08:55 +08:00
# include <linux/sfi.h>
2016-06-14 21:29:45 +03:00
# include <linux/pci.h>
2013-10-17 15:35:36 -07:00
# include <linux/platform_device.h>
2010-09-13 15:08:55 +08:00
2013-10-17 15:35:29 -07:00
extern int intel_mid_pci_init ( void ) ;
2016-06-14 21:29:45 +03:00
extern int intel_mid_pci_set_power_state ( struct pci_dev * pdev , pci_power_t state ) ;
2016-10-23 13:55:34 +02:00
extern pci_power_t intel_mid_pci_get_power_state ( struct pci_dev * pdev ) ;
2016-06-14 21:29:45 +03:00
2016-09-07 15:39:55 +03:00
extern void intel_mid_pwr_power_off ( void ) ;
2016-06-14 21:29:45 +03:00
# define INTEL_MID_PWR_LSS_OFFSET 4
# define INTEL_MID_PWR_LSS_TYPE (1 << 7)
extern int intel_mid_pwr_get_lss_id ( struct pci_dev * pdev ) ;
2013-10-17 15:35:36 -07:00
extern int get_gpio_by_name ( const char * name ) ;
2010-11-10 17:29:00 +00:00
extern int __init sfi_parse_mrtc ( struct sfi_table_header * table ) ;
2013-10-17 15:35:33 -07:00
extern int __init sfi_parse_mtmr ( struct sfi_table_header * table ) ;
2010-11-10 17:29:00 +00:00
extern int sfi_mrtc_num ;
extern struct sfi_rtc_table_entry sfi_mrtc_array [ ] ;
2010-02-12 10:31:47 -08:00
2013-10-17 15:35:32 -07:00
/*
* Here defines the array of devices platform data that IAFW would export
* through SFI " DEVS " table , we use name and type to match the device and
* its platform data .
*/
struct devs_id {
char name [ SFI_NAME_LEN + 1 ] ;
u8 type ;
u8 delay ;
2017-01-05 15:02:35 +02:00
u8 msic ;
2013-10-17 15:35:32 -07:00
void * ( * get_platform_data ) ( void * info ) ;
} ;
2016-06-15 15:04:20 +03:00
# define sfi_device(i) \
static const struct devs_id * const __intel_mid_sfi_ # # i # # _dev __used \
2013-10-17 15:35:36 -07:00
__attribute__ ( ( __section__ ( " .x86_intel_mid_dev.init " ) ) ) = & i
2016-07-12 14:16:32 +03:00
/**
* struct mid_sd_board_info - template for SD device creation
* @ name : identifies the driver
* @ bus_num : board - specific identifier for a given SD controller
* @ max_clk : the maximum frequency device supports
* @ platform_data : the particular data stored there is driver - specific
*/
struct mid_sd_board_info {
char name [ SFI_NAME_LEN ] ;
int bus_num ;
unsigned short addr ;
u32 max_clk ;
void * platform_data ;
} ;
2010-05-19 12:01:24 -07:00
/*
* Medfield is the follow - up of Moorestown , it combines two chip solution into
* one . Other than that it also added always - on and constant tsc and lapic
* timers . Medfield is the platform name , and the chip name is called Penwell
* we treat Medfield / Penwell as a variant of Moorestown . Penwell can be
* identified via MSRs .
*/
2013-10-17 15:35:29 -07:00
enum intel_mid_cpu_type {
2012-01-26 17:33:30 +00:00
/* 1 was Moorestown */
2013-10-17 15:35:29 -07:00
INTEL_MID_CPU_CHIP_PENWELL = 2 ,
2013-12-16 12:07:37 -08:00
INTEL_MID_CPU_CHIP_CLOVERVIEW ,
2013-12-16 12:07:38 -08:00
INTEL_MID_CPU_CHIP_TANGIER ,
2010-05-19 12:01:24 -07:00
} ;
2013-10-17 15:35:29 -07:00
extern enum intel_mid_cpu_type __intel_mid_cpu_chip ;
2011-11-15 14:46:52 -08:00
# ifdef CONFIG_X86_INTEL_MID
2013-10-17 15:35:29 -07:00
static inline enum intel_mid_cpu_type intel_mid_identify_cpu ( void )
2010-05-19 13:40:14 -07:00
{
2013-10-17 15:35:29 -07:00
return __intel_mid_cpu_chip ;
2010-05-19 13:40:14 -07:00
}
2013-10-17 15:35:36 -07:00
static inline bool intel_mid_has_msic ( void )
{
return ( intel_mid_identify_cpu ( ) = = INTEL_MID_CPU_CHIP_PENWELL ) ;
}
2011-11-15 14:46:52 -08:00
# else /* !CONFIG_X86_INTEL_MID */
2016-06-15 15:04:20 +03:00
# define intel_mid_identify_cpu() 0
# define intel_mid_has_msic() 0
2011-11-15 14:46:52 -08:00
# endif /* !CONFIG_X86_INTEL_MID */
2013-10-17 15:35:29 -07:00
enum intel_mid_timer_options {
INTEL_MID_TIMER_DEFAULT ,
INTEL_MID_TIMER_APBT_ONLY ,
INTEL_MID_TIMER_LAPIC_APBT ,
2010-05-19 12:01:24 -07:00
} ;
2013-10-17 15:35:29 -07:00
extern enum intel_mid_timer_options intel_mid_timer_options ;
2010-05-19 14:37:40 -07:00
2013-12-16 12:07:37 -08:00
/* Bus Select SoC Fuse value */
2016-06-15 15:04:20 +03:00
# define BSEL_SOC_FUSE_MASK 0x7
/* FSB 133MHz */
# define BSEL_SOC_FUSE_001 0x1
/* FSB 100MHz */
# define BSEL_SOC_FUSE_101 0x5
/* FSB 83MHz */
# define BSEL_SOC_FUSE_111 0x7
2011-11-10 13:42:53 +00:00
2016-06-15 15:04:20 +03:00
# define SFI_MTMR_MAX_NUM 8
# define SFI_MRTC_MAX 8
2010-02-12 03:08:30 -08:00
2010-11-09 11:22:58 +00:00
extern void intel_scu_devices_create ( void ) ;
extern void intel_scu_devices_destroy ( void ) ;
2010-11-10 17:29:00 +00:00
/* VRTC timer */
2016-06-15 15:04:20 +03:00
# define MRST_VRTC_MAP_SZ 1024
/* #define MRST_VRTC_PGOFFSET 0xc00 */
2010-11-10 17:29:00 +00:00
2013-10-17 15:35:29 -07:00
extern void intel_mid_rtc_init ( void ) ;
2010-11-10 17:29:00 +00:00
2016-06-15 15:04:20 +03:00
/* The offset for the mapping of global gpio pin to irq */
# define INTEL_MID_IRQ_OFFSET 0x100
2013-10-17 15:35:36 -07:00
2013-10-17 15:35:27 -07:00
# endif /* _ASM_X86_INTEL_MID_H */