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
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; version 2
* of the License .
*/
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>
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 ) ;
2013-10-17 15:35:36 -07:00
extern int get_gpio_by_name ( const char * name ) ;
extern void intel_scu_device_register ( struct platform_device * pdev ) ;
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 ;
void * ( * get_platform_data ) ( void * info ) ;
/* Custom handler for devices */
void ( * device_handler ) ( struct sfi_device_table_entry * pentry ,
struct devs_id * dev ) ;
} ;
2013-10-17 15:35:36 -07:00
# define sfi_device(i) \
static const struct devs_id * const __intel_mid_sfi_ # # i # # _dev __used \
__attribute__ ( ( __section__ ( " .x86_intel_mid_dev.init " ) ) ) = & i
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
2013-12-16 12:07:37 -08:00
/**
* struct intel_mid_ops - Interface between intel - mid & sub archs
* @ arch_setup : arch_setup function to re - initialize platform
* structures ( x86_init , x86_platform_init )
*
* This structure can be extended if any new interface is required
* between intel - mid & its sub arch files .
*/
struct intel_mid_ops {
void ( * arch_setup ) ( void ) ;
} ;
/* Helper API's for INTEL_MID_OPS_INIT */
# define DECLARE_INTEL_MID_OPS_INIT(cpuname, cpuid) \
[ cpuid ] = get_ # # cpuname # # _ops
/* Maximum number of CPU ops */
# define MAX_CPU_OPS(a) (sizeof(a) / sizeof(void *))
/*
* For every new cpu addition , a weak get_ < cpuname > _ops ( ) function needs be
* declared in arch / x86 / platform / intel_mid / intel_mid_weak_decls . h .
*/
# define INTEL_MID_OPS_INIT {\
DECLARE_INTEL_MID_OPS_INIT ( penwell , INTEL_MID_CPU_CHIP_PENWELL ) , \
DECLARE_INTEL_MID_OPS_INIT ( cloverview , INTEL_MID_CPU_CHIP_CLOVERVIEW ) , \
2013-12-16 12:07:38 -08:00
DECLARE_INTEL_MID_OPS_INIT ( tangier , INTEL_MID_CPU_CHIP_TANGIER ) \
2013-12-16 12:07:37 -08:00
} ;
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 */
2013-10-17 15:35:29 -07:00
# define intel_mid_identify_cpu() (0)
2013-10-17 15:35:36 -07:00
# 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
2011-11-10 13:42:53 +00:00
/*
* Penwell uses spread spectrum clock , so the freq number is not exactly
* the same as reported by MSR based on SDM .
*/
2013-12-16 12:07:37 -08:00
# define FSB_FREQ_83SKU 83200
# define FSB_FREQ_100SKU 99840
# define FSB_FREQ_133SKU 133000
# define FSB_FREQ_167SKU 167000
# define FSB_FREQ_200SKU 200000
# define FSB_FREQ_267SKU 267000
# define FSB_FREQ_333SKU 333000
# define FSB_FREQ_400SKU 400000
/* Bus Select SoC Fuse value */
# define BSEL_SOC_FUSE_MASK 0x7
# define BSEL_SOC_FUSE_001 0x1 /* FSB 133MHz */
# define BSEL_SOC_FUSE_101 0x5 /* FSB 100MHz */
# define BSEL_SOC_FUSE_111 0x7 /* FSB 83MHz */
2011-11-10 13:42:53 +00:00
2010-02-12 03:08:30 -08:00
# define SFI_MTMR_MAX_NUM 8
2010-02-12 03:37:38 -08:00
# define SFI_MRTC_MAX 8
2010-02-12 03:08:30 -08:00
2010-09-13 15:08:55 +08:00
extern struct console early_mrst_console ;
extern void mrst_early_console_init ( void ) ;
2010-09-13 15:08:56 +08:00
extern struct console early_hsu_console ;
2011-11-10 13:18:09 +00:00
extern void hsu_early_console_init ( const char * ) ;
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 */
# define MRST_VRTC_MAP_SZ (1024)
/*#define MRST_VRTC_PGOFFSET (0xc00) */
2013-10-17 15:35:29 -07:00
extern void intel_mid_rtc_init ( void ) ;
2010-11-10 17:29:00 +00:00
2013-10-17 15:35:36 -07:00
/* the offset for the mapping of global gpio pin to irq */
# define INTEL_MID_IRQ_OFFSET 0x100
2013-10-17 15:35:27 -07:00
# endif /* _ASM_X86_INTEL_MID_H */