| 
									
										
										
										
											2010-09-17 18:03:43 +02:00
										 |  |  | #ifndef _ASM_X86_AMD_NB_H
 | 
					
						
							|  |  |  | #define _ASM_X86_AMD_NB_H
 | 
					
						
							| 
									
										
										
										
											2006-06-26 13:56:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-05 14:27:19 -07:00
										 |  |  | #include <linux/ioport.h>
 | 
					
						
							| 
									
										
										
										
											2006-06-26 13:56:40 +02:00
										 |  |  | #include <linux/pci.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 16:20:23 +00:00
										 |  |  | struct amd_nb_bus_dev_range { | 
					
						
							|  |  |  | 	u8 bus; | 
					
						
							|  |  |  | 	u8 dev_base; | 
					
						
							|  |  |  | 	u8 dev_limit; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-09 08:26:53 +00:00
										 |  |  | extern const struct pci_device_id amd_nb_misc_ids[]; | 
					
						
							| 
									
										
										
										
											2011-01-10 16:20:23 +00:00
										 |  |  | extern const struct amd_nb_bus_dev_range amd_nb_bus_dev_ranges[]; | 
					
						
							| 
									
										
										
										
											2006-06-26 13:56:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-03 12:59:32 +01:00
										 |  |  | extern bool early_is_amd_nb(u32 value); | 
					
						
							| 
									
										
										
										
											2012-01-05 14:27:19 -07:00
										 |  |  | extern struct resource *amd_get_mmconfig_range(struct resource *res); | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | extern int amd_cache_northbridges(void); | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:30 +02:00
										 |  |  | extern void amd_flush_garts(void); | 
					
						
							| 
									
										
										
										
											2011-02-16 12:13:06 +01:00
										 |  |  | extern int amd_numa_init(void); | 
					
						
							| 
									
										
										
										
											2011-02-07 18:10:39 +01:00
										 |  |  | extern int amd_get_subcaches(int); | 
					
						
							|  |  |  | extern int amd_set_subcaches(int, int); | 
					
						
							| 
									
										
										
										
											2006-06-26 13:56:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-24 09:46:09 +00:00
										 |  |  | struct amd_l3_cache { | 
					
						
							|  |  |  | 	unsigned indices; | 
					
						
							|  |  |  | 	u8	 subcaches[4]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-02 17:16:59 +02:00
										 |  |  | struct threshold_block { | 
					
						
							|  |  |  | 	unsigned int		block; | 
					
						
							|  |  |  | 	unsigned int		bank; | 
					
						
							|  |  |  | 	unsigned int		cpu; | 
					
						
							|  |  |  | 	u32			address; | 
					
						
							|  |  |  | 	u16			interrupt_enable; | 
					
						
							|  |  |  | 	bool			interrupt_capable; | 
					
						
							|  |  |  | 	u16			threshold_limit; | 
					
						
							|  |  |  | 	struct kobject		kobj; | 
					
						
							|  |  |  | 	struct list_head	miscj; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct threshold_bank { | 
					
						
							|  |  |  | 	struct kobject		*kobj; | 
					
						
							|  |  |  | 	struct threshold_block	*blocks; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* initialized to the number of CPUs on the node sharing this bank */ | 
					
						
							|  |  |  | 	atomic_t		cpus; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | struct amd_northbridge { | 
					
						
							|  |  |  | 	struct pci_dev *misc; | 
					
						
							| 
									
										
										
										
											2011-01-24 16:05:42 +01:00
										 |  |  | 	struct pci_dev *link; | 
					
						
							| 
									
										
										
										
											2011-07-24 09:46:09 +00:00
										 |  |  | 	struct amd_l3_cache l3_cache; | 
					
						
							| 
									
										
										
										
											2012-05-02 17:16:59 +02:00
										 |  |  | 	struct threshold_bank *bank4; | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:30 +02:00
										 |  |  | struct amd_northbridge_info { | 
					
						
							| 
									
										
										
										
											2010-09-17 18:02:54 +02:00
										 |  |  | 	u16 num; | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | 	u64 flags; | 
					
						
							|  |  |  | 	struct amd_northbridge *nb; | 
					
						
							| 
									
										
										
										
											2010-09-17 18:02:54 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:30 +02:00
										 |  |  | extern struct amd_northbridge_info amd_northbridges; | 
					
						
							| 
									
										
										
										
											2010-09-17 18:02:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-03 12:59:32 +01:00
										 |  |  | #define AMD_NB_GART			BIT(0)
 | 
					
						
							|  |  |  | #define AMD_NB_L3_INDEX_DISABLE		BIT(1)
 | 
					
						
							|  |  |  | #define AMD_NB_L3_PARTITIONING		BIT(2)
 | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 18:03:43 +02:00
										 |  |  | #ifdef CONFIG_AMD_NB
 | 
					
						
							| 
									
										
										
										
											2010-04-24 09:56:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-03 12:59:32 +01:00
										 |  |  | static inline u16 amd_nb_num(void) | 
					
						
							| 
									
										
										
										
											2009-04-14 23:04:37 +05:30
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | 	return amd_northbridges.num; | 
					
						
							| 
									
										
										
										
											2009-04-14 23:04:37 +05:30
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-04-24 09:56:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-03 12:59:32 +01:00
										 |  |  | static inline bool amd_nb_has_feature(unsigned feature) | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	return ((amd_northbridges.flags & feature) == feature); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-04-24 09:56:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | static inline struct amd_northbridge *node_to_amd_nb(int node) | 
					
						
							| 
									
										
										
										
											2009-04-14 23:04:37 +05:30
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | 	return (node < amd_northbridges.num) ? &amd_northbridges.nb[node] : NULL; | 
					
						
							| 
									
										
										
										
											2009-04-14 23:04:37 +05:30
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-27 14:32:09 +08:00
										 |  |  | static inline u16 amd_get_node_id(struct pci_dev *pdev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct pci_dev *misc; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (i = 0; i != amd_nb_num(); i++) { | 
					
						
							|  |  |  | 		misc = node_to_amd_nb(i)->misc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (pci_domain_nr(misc->bus) == pci_domain_nr(pdev->bus) && | 
					
						
							|  |  |  | 		    PCI_SLOT(misc->devfn) == PCI_SLOT(pdev->devfn)) | 
					
						
							|  |  |  | 			return i; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	WARN(1, "Unable to find AMD Northbridge id for %s\n", pci_name(pdev)); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-29 17:14:31 +02:00
										 |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define amd_nb_num(x)		0
 | 
					
						
							|  |  |  | #define amd_nb_has_feature(x)	false
 | 
					
						
							|  |  |  | #define node_to_amd_nb(x)	NULL
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-09 15:16:17 +02:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 18:03:43 +02:00
										 |  |  | #endif /* _ASM_X86_AMD_NB_H */
 |