mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 00:01:35 +00:00 
			
		
		
		
	 2530573e45
			
		
	
	
		2530573e45
		
	
	
	
	
		
			
			Use __cpuinit instead of __init for the cpufreq_driver init function like it is done in powernow-k8.c. Use the __cpuinitdata for data used by the routines marked as __cpuinit. This is removing the warning generated when compiling with the CONFIG_DEBUG_SECTION_MISMATCH=y option. Signed-off-by: Holger Hans Peter Freyther <holger@moiji-mobile.com> Signed-off-by: Dave Jones <davej@redhat.com>
		
			
				
	
	
		
			354 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			354 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  longhaul.h
 | |
|  *  (C) 2003 Dave Jones.
 | |
|  *
 | |
|  *  Licensed under the terms of the GNU GPL License version 2.
 | |
|  *
 | |
|  *  VIA-specific information
 | |
|  */
 | |
| 
 | |
| union msr_bcr2 {
 | |
| 	struct {
 | |
| 		unsigned Reseved:19,	// 18:0
 | |
| 		ESOFTBF:1,		// 19
 | |
| 		Reserved2:3,		// 22:20
 | |
| 		CLOCKMUL:4,		// 26:23
 | |
| 		Reserved3:5;		// 31:27
 | |
| 	} bits;
 | |
| 	unsigned long val;
 | |
| };
 | |
| 
 | |
| union msr_longhaul {
 | |
| 	struct {
 | |
| 		unsigned RevisionID:4,	// 3:0
 | |
| 		RevisionKey:4,		// 7:4
 | |
| 		EnableSoftBusRatio:1,	// 8
 | |
| 		EnableSoftVID:1,	// 9
 | |
| 		EnableSoftBSEL:1,	// 10
 | |
| 		Reserved:3,		// 11:13
 | |
| 		SoftBusRatio4:1,	// 14
 | |
| 		VRMRev:1,		// 15
 | |
| 		SoftBusRatio:4,		// 19:16
 | |
| 		SoftVID:5,		// 24:20
 | |
| 		Reserved2:3,		// 27:25
 | |
| 		SoftBSEL:2,		// 29:28
 | |
| 		Reserved3:2,		// 31:30
 | |
| 		MaxMHzBR:4,		// 35:32
 | |
| 		MaximumVID:5,		// 40:36
 | |
| 		MaxMHzFSB:2,		// 42:41
 | |
| 		MaxMHzBR4:1,		// 43
 | |
| 		Reserved4:4,		// 47:44
 | |
| 		MinMHzBR:4,		// 51:48
 | |
| 		MinimumVID:5,		// 56:52
 | |
| 		MinMHzFSB:2,		// 58:57
 | |
| 		MinMHzBR4:1,		// 59
 | |
| 		Reserved5:4;		// 63:60
 | |
| 	} bits;
 | |
| 	unsigned long long val;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Clock ratio tables. Div/Mod by 10 to get ratio.
 | |
|  * The eblcr values specify the ratio read from the CPU.
 | |
|  * The mults values specify what to write to the CPU.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * VIA C3 Samuel 1  & Samuel 2 (stepping 0)
 | |
|  */
 | |
| static const int __cpuinitdata samuel1_mults[16] = {
 | |
| 	-1, /* 0000 -> RESERVED */
 | |
| 	30, /* 0001 ->  3.0x */
 | |
| 	40, /* 0010 ->  4.0x */
 | |
| 	-1, /* 0011 -> RESERVED */
 | |
| 	-1, /* 0100 -> RESERVED */
 | |
| 	35, /* 0101 ->  3.5x */
 | |
| 	45, /* 0110 ->  4.5x */
 | |
| 	55, /* 0111 ->  5.5x */
 | |
| 	60, /* 1000 ->  6.0x */
 | |
| 	70, /* 1001 ->  7.0x */
 | |
| 	80, /* 1010 ->  8.0x */
 | |
| 	50, /* 1011 ->  5.0x */
 | |
| 	65, /* 1100 ->  6.5x */
 | |
| 	75, /* 1101 ->  7.5x */
 | |
| 	-1, /* 1110 -> RESERVED */
 | |
| 	-1, /* 1111 -> RESERVED */
 | |
| };
 | |
| 
 | |
| static const int __cpuinitdata samuel1_eblcr[16] = {
 | |
| 	50, /* 0000 -> RESERVED */
 | |
| 	30, /* 0001 ->  3.0x */
 | |
| 	40, /* 0010 ->  4.0x */
 | |
| 	-1, /* 0011 -> RESERVED */
 | |
| 	55, /* 0100 ->  5.5x */
 | |
| 	35, /* 0101 ->  3.5x */
 | |
| 	45, /* 0110 ->  4.5x */
 | |
| 	-1, /* 0111 -> RESERVED */
 | |
| 	-1, /* 1000 -> RESERVED */
 | |
| 	70, /* 1001 ->  7.0x */
 | |
| 	80, /* 1010 ->  8.0x */
 | |
| 	60, /* 1011 ->  6.0x */
 | |
| 	-1, /* 1100 -> RESERVED */
 | |
| 	75, /* 1101 ->  7.5x */
 | |
| 	-1, /* 1110 -> RESERVED */
 | |
| 	65, /* 1111 ->  6.5x */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * VIA C3 Samuel2 Stepping 1->15
 | |
|  */
 | |
| static const int __cpuinitdata samuel2_eblcr[16] = {
 | |
| 	50,  /* 0000 ->  5.0x */
 | |
| 	30,  /* 0001 ->  3.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	100, /* 0011 -> 10.0x */
 | |
| 	55,  /* 0100 ->  5.5x */
 | |
| 	35,  /* 0101 ->  3.5x */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	110, /* 0111 -> 11.0x */
 | |
| 	90,  /* 1000 ->  9.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	60,  /* 1011 ->  6.0x */
 | |
| 	120, /* 1100 -> 12.0x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	130, /* 1110 -> 13.0x */
 | |
| 	65,  /* 1111 ->  6.5x */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * VIA C3 Ezra
 | |
|  */
 | |
| static const int __cpuinitdata ezra_mults[16] = {
 | |
| 	100, /* 0000 -> 10.0x */
 | |
| 	30,  /* 0001 ->  3.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	90,  /* 0011 ->  9.0x */
 | |
| 	95,  /* 0100 ->  9.5x */
 | |
| 	35,  /* 0101 ->  3.5x */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	55,  /* 0111 ->  5.5x */
 | |
| 	60,  /* 1000 ->  6.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	50,  /* 1011 ->  5.0x */
 | |
| 	65,  /* 1100 ->  6.5x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	120, /* 1111 -> 12.0x */
 | |
| };
 | |
| 
 | |
| static const int __cpuinitdata ezra_eblcr[16] = {
 | |
| 	50,  /* 0000 ->  5.0x */
 | |
| 	30,  /* 0001 ->  3.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	100, /* 0011 -> 10.0x */
 | |
| 	55,  /* 0100 ->  5.5x */
 | |
| 	35,  /* 0101 ->  3.5x */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	95,  /* 0111 ->  9.5x */
 | |
| 	90,  /* 1000 ->  9.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	60,  /* 1011 ->  6.0x */
 | |
| 	120, /* 1100 -> 12.0x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	65,  /* 1111 ->  6.5x */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * VIA C3 (Ezra-T) [C5M].
 | |
|  */
 | |
| static const int __cpuinitdata ezrat_mults[32] = {
 | |
| 	100, /* 0000 -> 10.0x */
 | |
| 	30,  /* 0001 ->  3.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	90,  /* 0011 ->  9.0x */
 | |
| 	95,  /* 0100 ->  9.5x */
 | |
| 	35,  /* 0101 ->  3.5x */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	55,  /* 0111 ->  5.5x */
 | |
| 	60,  /* 1000 ->  6.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	50,  /* 1011 ->  5.0x */
 | |
| 	65,  /* 1100 ->  6.5x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	120, /* 1111 ->  12.0x */
 | |
| 
 | |
| 	-1,  /* 0000 -> RESERVED (10.0x) */
 | |
| 	110, /* 0001 -> 11.0x */
 | |
| 	-1, /* 0010 -> 12.0x */
 | |
| 	-1,  /* 0011 -> RESERVED (9.0x)*/
 | |
| 	105, /* 0100 -> 10.5x */
 | |
| 	115, /* 0101 -> 11.5x */
 | |
| 	125, /* 0110 -> 12.5x */
 | |
| 	135, /* 0111 -> 13.5x */
 | |
| 	140, /* 1000 -> 14.0x */
 | |
| 	150, /* 1001 -> 15.0x */
 | |
| 	160, /* 1010 -> 16.0x */
 | |
| 	130, /* 1011 -> 13.0x */
 | |
| 	145, /* 1100 -> 14.5x */
 | |
| 	155, /* 1101 -> 15.5x */
 | |
| 	-1,  /* 1110 -> RESERVED (13.0x) */
 | |
| 	-1,  /* 1111 -> RESERVED (12.0x) */
 | |
| };
 | |
| 
 | |
| static const int __cpuinitdata ezrat_eblcr[32] = {
 | |
| 	50,  /* 0000 ->  5.0x */
 | |
| 	30,  /* 0001 ->  3.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	100, /* 0011 -> 10.0x */
 | |
| 	55,  /* 0100 ->  5.5x */
 | |
| 	35,  /* 0101 ->  3.5x */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	95,  /* 0111 ->  9.5x */
 | |
| 	90,  /* 1000 ->  9.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	60,  /* 1011 ->  6.0x */
 | |
| 	120, /* 1100 -> 12.0x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	65,  /* 1111 ->  6.5x */
 | |
| 
 | |
| 	-1,  /* 0000 -> RESERVED (9.0x) */
 | |
| 	110, /* 0001 -> 11.0x */
 | |
| 	120, /* 0010 -> 12.0x */
 | |
| 	-1,  /* 0011 -> RESERVED (10.0x)*/
 | |
| 	135, /* 0100 -> 13.5x */
 | |
| 	115, /* 0101 -> 11.5x */
 | |
| 	125, /* 0110 -> 12.5x */
 | |
| 	105, /* 0111 -> 10.5x */
 | |
| 	130, /* 1000 -> 13.0x */
 | |
| 	150, /* 1001 -> 15.0x */
 | |
| 	160, /* 1010 -> 16.0x */
 | |
| 	140, /* 1011 -> 14.0x */
 | |
| 	-1,  /* 1100 -> RESERVED (12.0x) */
 | |
| 	155, /* 1101 -> 15.5x */
 | |
| 	-1,  /* 1110 -> RESERVED (13.0x) */
 | |
| 	145, /* 1111 -> 14.5x */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * VIA C3 Nehemiah */
 | |
| 
 | |
| static const int __cpuinitdata nehemiah_mults[32] = {
 | |
| 	100, /* 0000 -> 10.0x */
 | |
| 	-1, /* 0001 -> 16.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	90,  /* 0011 ->  9.0x */
 | |
| 	95,  /* 0100 ->  9.5x */
 | |
| 	-1,  /* 0101 ->  RESERVED */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	55,  /* 0111 ->  5.5x */
 | |
| 	60,  /* 1000 ->  6.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	50,  /* 1011 ->  5.0x */
 | |
| 	65,  /* 1100 ->  6.5x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	120, /* 1111 -> 12.0x */
 | |
| 	-1, /* 0000 -> 10.0x */
 | |
| 	110, /* 0001 -> 11.0x */
 | |
| 	-1, /* 0010 -> 12.0x */
 | |
| 	-1,  /* 0011 ->  9.0x */
 | |
| 	105, /* 0100 -> 10.5x */
 | |
| 	115, /* 0101 -> 11.5x */
 | |
| 	125, /* 0110 -> 12.5x */
 | |
| 	135, /* 0111 -> 13.5x */
 | |
| 	140, /* 1000 -> 14.0x */
 | |
| 	150, /* 1001 -> 15.0x */
 | |
| 	160, /* 1010 -> 16.0x */
 | |
| 	130, /* 1011 -> 13.0x */
 | |
| 	145, /* 1100 -> 14.5x */
 | |
| 	155, /* 1101 -> 15.5x */
 | |
| 	-1,  /* 1110 -> RESERVED (13.0x) */
 | |
| 	-1, /* 1111 -> 12.0x */
 | |
| };
 | |
| 
 | |
| static const int __cpuinitdata nehemiah_eblcr[32] = {
 | |
| 	50,  /* 0000 ->  5.0x */
 | |
| 	160, /* 0001 -> 16.0x */
 | |
| 	40,  /* 0010 ->  4.0x */
 | |
| 	100, /* 0011 -> 10.0x */
 | |
| 	55,  /* 0100 ->  5.5x */
 | |
| 	-1,  /* 0101 ->  RESERVED */
 | |
| 	45,  /* 0110 ->  4.5x */
 | |
| 	95,  /* 0111 ->  9.5x */
 | |
| 	90,  /* 1000 ->  9.0x */
 | |
| 	70,  /* 1001 ->  7.0x */
 | |
| 	80,  /* 1010 ->  8.0x */
 | |
| 	60,  /* 1011 ->  6.0x */
 | |
| 	120, /* 1100 -> 12.0x */
 | |
| 	75,  /* 1101 ->  7.5x */
 | |
| 	85,  /* 1110 ->  8.5x */
 | |
| 	65,  /* 1111 ->  6.5x */
 | |
| 	90,  /* 0000 ->  9.0x */
 | |
| 	110, /* 0001 -> 11.0x */
 | |
| 	120, /* 0010 -> 12.0x */
 | |
| 	100, /* 0011 -> 10.0x */
 | |
| 	135, /* 0100 -> 13.5x */
 | |
| 	115, /* 0101 -> 11.5x */
 | |
| 	125, /* 0110 -> 12.5x */
 | |
| 	105, /* 0111 -> 10.5x */
 | |
| 	130, /* 1000 -> 13.0x */
 | |
| 	150, /* 1001 -> 15.0x */
 | |
| 	160, /* 1010 -> 16.0x */
 | |
| 	140, /* 1011 -> 14.0x */
 | |
| 	120, /* 1100 -> 12.0x */
 | |
| 	155, /* 1101 -> 15.5x */
 | |
| 	-1,  /* 1110 -> RESERVED (13.0x) */
 | |
| 	145 /* 1111 -> 14.5x */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Voltage scales. Div/Mod by 1000 to get actual voltage.
 | |
|  * Which scale to use depends on the VRM type in use.
 | |
|  */
 | |
| 
 | |
| struct mV_pos {
 | |
| 	unsigned short mV;
 | |
| 	unsigned short pos;
 | |
| };
 | |
| 
 | |
| static const struct mV_pos __cpuinitdata vrm85_mV[32] = {
 | |
| 	{1250, 8},	{1200, 6},	{1150, 4},	{1100, 2},
 | |
| 	{1050, 0},	{1800, 30},	{1750, 28},	{1700, 26},
 | |
| 	{1650, 24},	{1600, 22},	{1550, 20},	{1500, 18},
 | |
| 	{1450, 16},	{1400, 14},	{1350, 12},	{1300, 10},
 | |
| 	{1275, 9},	{1225, 7},	{1175, 5},	{1125, 3},
 | |
| 	{1075, 1},	{1825, 31},	{1775, 29},	{1725, 27},
 | |
| 	{1675, 25},	{1625, 23},	{1575, 21},	{1525, 19},
 | |
| 	{1475, 17},	{1425, 15},	{1375, 13},	{1325, 11}
 | |
| };
 | |
| 
 | |
| static const unsigned char __cpuinitdata mV_vrm85[32] = {
 | |
| 	0x04,	0x14,	0x03,	0x13,	0x02,	0x12,	0x01,	0x11,
 | |
| 	0x00,	0x10,	0x0f,	0x1f,	0x0e,	0x1e,	0x0d,	0x1d,
 | |
| 	0x0c,	0x1c,	0x0b,	0x1b,	0x0a,	0x1a,	0x09,	0x19,
 | |
| 	0x08,	0x18,	0x07,	0x17,	0x06,	0x16,	0x05,	0x15
 | |
| };
 | |
| 
 | |
| static const struct mV_pos __cpuinitdata mobilevrm_mV[32] = {
 | |
| 	{1750, 31},	{1700, 30},	{1650, 29},	{1600, 28},
 | |
| 	{1550, 27},	{1500, 26},	{1450, 25},	{1400, 24},
 | |
| 	{1350, 23},	{1300, 22},	{1250, 21},	{1200, 20},
 | |
| 	{1150, 19},	{1100, 18},	{1050, 17},	{1000, 16},
 | |
| 	{975, 15},	{950, 14},	{925, 13},	{900, 12},
 | |
| 	{875, 11},	{850, 10},	{825, 9},	{800, 8},
 | |
| 	{775, 7},	{750, 6},	{725, 5},	{700, 4},
 | |
| 	{675, 3},	{650, 2},	{625, 1},	{600, 0}
 | |
| };
 | |
| 
 | |
| static const unsigned char __cpuinitdata mV_mobilevrm[32] = {
 | |
| 	0x1f,	0x1e,	0x1d,	0x1c,	0x1b,	0x1a,	0x19,	0x18,
 | |
| 	0x17,	0x16,	0x15,	0x14,	0x13,	0x12,	0x11,	0x10,
 | |
| 	0x0f,	0x0e,	0x0d,	0x0c,	0x0b,	0x0a,	0x09,	0x08,
 | |
| 	0x07,	0x06,	0x05,	0x04,	0x03,	0x02,	0x01,	0x00
 | |
| };
 | |
| 
 |