Jump to content

North bridge support!


  • Please log in to reply
16 replies to this topic

#1
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow
North Bridge has PCIClass=060000 also known as
PCI-CPU Bridge
Host controller
AGP host controller
Yes! We need it!

Looking into MacBookPro I found
| | +-o AppleACPICPU  <class AppleACPICPU, registered, matched, active, busy 0, retain count 7>
	| |   | {
	| |   |   "IOCPUID" = 0x38b5c80
	| |   |   "IOCPUNumber" = 0x0
	| |   |   
	| |   +-o ACPI_SMC_PlatformPlugin  <class ACPI_SMC_PlatformPlugin, registered, matched, active, busy 0, retain count 8>
	| |	   {
	| |		 "IOMatchCategory" = "IODefaultMatchCategory"
	| |		 "CFBundleIdentifier" = "com.apple.driver.ACPI_SMC_PlatformPlugin"
	| |		 "MCHThrottleArray" = 
	| |		 "IOPropertyMatch" = {"IOCPUNumber"=0x0}
	| |   |   
	| |   +-o pci8086,27a0@0  <class IOPCIDevice, registered, matched, active, busy 0, retain count 8>
	| |	 | {
	| |	 |   "compatible" = <"pci8086,7270","pci8086,27a0","pciclass,060000">
	| |	 | }
	| |	 | 
	| |	 +-o AppleSMCPDRC  <class AppleSMCPDRC, registered, matched, active, busy 0, retain count 4>
	| |		 {
	| |		   "IOMatchCategory" = "IODefaultMatchCategory"
	| |		   "IOClass" = "AppleSMCPDRC"
	| |		   "IOProviderClass" = "IOPCIDevice"
	| |		   "IONameMatched" = "pci8086,27a0"
	| |		   "CFBundleIdentifier" = "com.apple.driver.ACPI_SMC_PlatformPlugin"

So instructions:
1. Find VendorID/DeviceID of your North Bridge
ioreg -l | grep 0600
2. My result
| | "compatible" = <"pci144d,b028","pci1002,5831","pciclass,060000"$
3. Edit info.plist into
IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/
4. At the bottom you find
<key>AppleSMCPDRC</key>
		<dict>
			<key>CFBundleIdentifier</key>
			<string>com.apple.driver.ACPI_SMC_PlatformPlugin</string>
			<key>IOClass</key>
			<string>AppleSMCPDRC</string>
			<key>IONameMatch</key>
			<string>pci8086,27a0</string>
5. Edit the name.
6. Don't forget to delete extensions cache.
7. Reboot

Be careful. It is not for all!

Look also about South bridge support
http://forum.insanel...showtopic=84814

#2
SticMAC™

SticMAC™

    "Nobody likes a SmartASS"

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 2,590 posts
  • Gender:Male
  • Location:Da Bathroom!!
i've blindly done it! please tell us why we need it?


SticMAN

#3
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow

i've blindly done it! please tell us why we need it?
SticMAN

If stars are light on thou it is necessary for someone :rolleyes:

1. It makes PCI-CPU bridge. May be for DMA transactions.
2. AGP host controller.
I dunno the theory so deep.

if anyone has more then 1 controller with the same class he must choose only one with
DeviceNumber=0
It is here
pci8086,27a0@0

#4
lewellyn

lewellyn

    InsanelyMac Protégé

  • Members
  • Pip
  • 29 posts
  • Gender:Male
Quick question... If there are separate threads for North and South bridges, won't you confuse newbies? :rolleyes: And won't info get out of sync?

Anyhow, though I can't get my south bridge out of "compatible" mode (see that thread), I seem to not need to modify this Info.plist...

| |   +-o XVR2@C  <class IOPCIDevice, registered, matched, active, busy 0, retain count 9>
	| |   | | {
	| |   | |   "device-id" = <e9030000>
	| |   | |   "name" = "pci-bridge"
	| |   | |   "IOPCIConfigured" = Yes
	| |   | |   "#size-cells" = <02000000>
	| |   | |   "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/XVR2@c0000"
	| |   | |   "IOName" = "pci-bridge"
	| |   | |   "vendor-id" = <de100000>
	| |   | |   "revision-id" = <a2000000>
	| |   | |   "IOPCIResourced" = Yes
	| |   | |   "Power Management private data" = "{ this object = 02c8d680, interested driver = 02c8d680, driverDesire = 0, deviceDesire = 0, ourDesiredPowerState = 2, previousRequest = 2 }"
	| |   | |   "Power Management protected data" = "{ theNumberOfPowerStates = 3, version 1, power state 0 = { capabilityFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPowe$
	| |   | |   "acpi-reg" = <00600000>
	| |   | |   "IOPCIExpressLinkStatus" = 4113
	| |   | |   "IOPCIExpressLinkCapabilities" = 34683921
	| |   | |   "class-code" = <00040600>
	| |   | |   "compatible" = <"pci10de,3e9","pciclass,060400">
	| |   | |   "IODTPersist" = <a6e85a2adee85a2a>
	| |   | |   "#address-cells" = <03000000>
	| |   | |   "reg" = <0060000000000000000000000000000000000000>
	| |   | |   "ranges" = <00000082000000000000a0fd00000082000000000000a0fd0000000000001000000000c20000
000000090fd000000c200000000000090fd0000000000001000>
	| |   | | }

Or is it possible that I edited the wrong plist (or part of it) earlier? (Again questioning the wisdom of 2 threads)

#5
Dense

Dense

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 230 posts
Nice find.

What do you notice is fixed when making this change (I assume it solves the SMC errors on a -v boot).

For those that it makes a difference to, can you please post the PCIID of the memory controller you added. It will help with a project I am working on.

#6
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow
2 lewellyn
You are right. It will be better to join these threads. I dunno how. Moderators?

You found PCIE bridge
"compatible" = <"pci10de,3e9","pciclass,060400">
As I said you need to found
South bridge 060100
North bridge 060000

#7
Dense

Dense

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 230 posts

2 lewellyn
You are right. It will be better to join these threads. I dunno how. Moderators?

You found PCIE bridge
"compatible" = <"pci10de,3e9","pciclass,060400">
As I said you need to found
South bridge 060100
North bridge 060000


PCI Class 060100 is the memory controller
PCI Class 060000 is the LPC controller

AppleLPC should have the PCI ID added to it as well but my testing has found that it causes more problems rather than fixing any.

#8
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow

PCI Class 060100 is the memory controller
PCI Class 060000 is the LPC controller

?????
If you never see ioregs look into IOKit
#define PCIC_BRIDGE	0x06
#define PCIS_BRIDGE_HOST	0x00
#define PCIS_BRIDGE_ISA		0x01
#define PCIS_BRIDGE_EISA	0x02
#define PCIS_BRIDGE_MCA		0x03
#define PCIS_BRIDGE_PCI		0x04
#define PCIS_BRIDGE_PCMCIA	0x05
#define PCIS_BRIDGE_NUBUS	0x06
#define PCIS_BRIDGE_CARDBUS	0x07
#define PCIS_BRIDGE_RACEWAY	0x08
#define PCIS_BRIDGE_OTHER	0x80

AppleLPC should have the PCI ID added to it as well but my testing has found that it causes more problems rather than fixing any.

Not everyone is successful because these drivers written for Apple's chipset only. My hack may help, may no. Sorry!

Another interesting information
http://discussions.a...t...17&tstart=0

#9
lewellyn

lewellyn

    InsanelyMac Protégé

  • Members
  • Pip
  • 29 posts
  • Gender:Male
Hm... This is what I get...

Duchess:~ lewellyn$ ioreg -l|grep 0600  
	| |   | |   "class-code" = <01040600>
	| |   |   |	   |   "FireWire Device ROM" = <0425c74531333934f800a2420011060000303587000927043800000403000a27810000071700
00a8100000d0c0083c08d000011d1000013d10000150007ac7500000000000000004170706c65204
6f$
	| |   |   |		 |   "IOFWHWAddr" = <00110600003035870a02010000000000>
	| |   |   |		 |   "IOMACAddress" = <0011060000303587>
	| |   | |   "class-code" = <00040600>
	| |   | |   "class-code" = <00040600>
	| |   | |   "acpi-reg" = <00600000>
	| |   | |   "class-code" = <00040600>
	| |   | |   "reg" = <0060000000000000000000000000000000000000>
	| |   | |   "class-code" = <00010600>
	| |   |   | | | | |   |   "HIDIdleTime" = 239060004
	| |   | |   "class-code" = <00800600>
	| |	 "IOInterruptSpecifiers" = (<0600000000000000>)

I'd like to blame it on middle-of-the-night brainfarts. But, I simply pasted the section with the exact match for "060000". And that happened to only be acpi-reg that matched... Does this mean I have no north bridge? ;)

#10
Dense

Dense

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 230 posts

?????
If you never see ioregs look into IOKit

#define PCIC_BRIDGE	0x06
#define PCIS_BRIDGE_HOST	0x00
#define PCIS_BRIDGE_ISA		0x01
#define PCIS_BRIDGE_EISA	0x02
#define PCIS_BRIDGE_MCA		0x03
#define PCIS_BRIDGE_PCI		0x04
#define PCIS_BRIDGE_PCMCIA	0x05
#define PCIS_BRIDGE_NUBUS	0x06
#define PCIS_BRIDGE_CARDBUS	0x07
#define PCIS_BRIDGE_RACEWAY	0x08
#define PCIS_BRIDGE_OTHER	0x80

Not everyone is successful because these drivers written for Apple's chipset only. My hack may help, may no. Sorry!

Another interesting information
http://discussions.a...t...17&tstart=0


"pci8086,2641","pciclass,060100"
"pci8086,2590","pciclass,060000"

Check this url http://pci-ids.ucw.cz/iii/?i=8086

2641 82801FBM (ICH6M) LPC Interface Bridge
2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller

For 2641 its the LPC bridge. Which is why its PCI Class 06 subclass 01 (isa based)

The problem is I have not seen any impact on adding this (memory controller) to the plugin. This has nothing to do with my pc, can anyone confirm it improves SOMETHING?

#11
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow

Hm... This is what I get...
I'd like to blame it on middle-of-the-night brainfarts. But, I simply pasted the section with the exact match for "060000". And that happened to only be acpi-reg that matched... Does this mean I have no north bridge? :)

I really don't see your north bridge. How it possible?
What is your configuration?
Ups-s, did you use Paulicat AppleSMBIOS? It may explain why you see not all devices.
http://forum.insanel...o...5&hl=smbios
post 8

"pci8086,2641","pciclass,060100"
"pci8086,2590","pciclass,060000"

Check this url http://pci-ids.ucw.cz/iii/?i=8086

2641 82801FBM (ICH6M) LPC Interface Bridge
2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller

For 2641 its the LPC bridge. Which is why its PCI Class 06 subclass 01 (isa based)

All correct!

The problem is I have not seen any impact on adding this (memory controller) to the plugin. This has nothing to do with my pc, can anyone confirm it improves SOMETHING?

Did you see at your ioreg that ACPI_SMC_.. connected also to CPU? (as in topic)

#12
Slice

Slice

    InsanelyMacaholic

  • Local Moderators
  • 2,926 posts
  • Gender:Male
  • Location:Moscow
Attempt to launch North Bridge at Gigabyte 965P-S3 failed!
DeviceID=29a0 Vendor=8086
unrecognized controller type and kernel panic.
System 10.4.9 is too old for the hardware
or AGP host controller not needed for PCIE motherboard :)

#13
fred2000

fred2000

    InsanelyMac Protégé

  • Just Joined
  • Pip
  • 4 posts
Has anyone tried this method on an ATI sb600 motherboard.
i,m trying to get to the bottom of a problem with Eye TV where there is digital distortion and blocky pictures on playback with both digital and analog signals.

#14
cyclonefr

cyclonefr

    InsanelyMacaholic

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 2,751 posts
  • Gender:Male
  • Location:Paris, France
i also get the kernel panic on my i865
here my dev id
Dr-Benj:~ drbenj$ ioreg -l | grep 0600
| | | | "class-code" = <00040600>
| | | | "class-code" = <00010600>
| | | | "class-code" = <00040600>
| | | | | "display-pixel-component-bits" = <06000000>
| | | | | "display-link-component-bits" = <06000000>
| | | | | "IOFBConfig" = {"dims"=<5005000000030000000200000600000$
| | "class-code" = <00000600>
| | "compatible" = <"pci1043,80f2","pci8086,2570","pciclass,060000"$
| | "IOInterruptSpecifiers" = (<0600000000000000>)
| | | "HIDPointerResolution" = <00006000>


ive moded the plist changin the first pci8086,27d0 with 2570 and got directly a KP any idea?

#15
ole2

ole2

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 180 posts
  • Gender:Male
  • Location:Grenoble, France

Has anyone tried this method on an ATI sb600 motherboard.
i,m trying to get to the bottom of a problem with Eye TV where there is digital distortion and blocky pictures on playback with both digital and analog signals.


do you mean ATI/AMD 690g chipset?

| | +-o pci1002,7930@0 <class IOPCIDevice, registered, matched, active, busy 0, retain count 7>
| | {
| | "device-id" = <"0y">
| | "vendor-id" = <02100000>
| | "IOName" = "pci1002,7930"
| | "subsystem-vendor-id" = <4d140000>
| | "Power Management protected data" = "{ theNumberOfPowerStates = 3, version 1, power state 0 = { capabilityFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 1 = { capabilityFlags 00000000, outputPowerCharacter 00000400, inputPowerRequirement 00000400, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 2 = { capabilityFlags 00000000, outputPowerCharacter 00000002, inputPowerRequirement 00000002, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, aggressiveness = 0, myCurrentState = 2, parentsCurrentPowerFlags = 00000002, maxCapability = 2 }"
| | "revision-id" = <00000000>
| | "reg" = <0000000000000000000000000000000000000000>
| | "IOPCIResourced" = Yes
| | "class-code" = <00000600>
| | "subsystem-id" = <11c50000>
| | "Power Management private data" = "{ this object = 02d0d580, interested driver = 02d0d580, driverDesire = 0, deviceDesire = 0, ourDesiredPowerState = 2, previousRequest = 2 }"
| | "compatible" = <"pci144d,c511","pci1002,7930","pciclass,060000">
| | "name" = "pci1002,7930"
| | }

if yes, same story - unrecognized controller type, kernel panic

#16
toadspit

toadspit

    InsanelyMac Protégé

  • Members
  • PipPip
  • 86 posts
KP on 0x10025833 (Radeon 9100 IGP Host Bridge)

device details:

| | +-o pci1002,5833@0 <class IOPCIDevice, registered, matched, active, busy 0, retain count 7>
| | {
| | "device-id" = <"3X">
| | "vendor-id" = <02100000>
| | "IOName" = "pci1002,5833"
| | "subsystem-vendor-id" = <31160000>
| | "IOPCIResourced" = Yes
| | "revision-id" = <02000000>
| | "reg" = <0000000000000000000000000000000000000000>
| | "IODeviceMemory" = (({"address"=18446744073575333888,"length"=67108864}),({"address"=18446744073574285312,"length"=4096}))
| | "IOAGPFlags" = 1
| | "Power Management protected data" = "{ theNumberOfPowerStates = 3, version 1, power state 0 = { capabilityFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 1 = { capabilityFlags 00000000, outputPowerCharacter 00000400, inputPowerRequirement 00000400, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 2 = { capabilityFlags 00000000, outputPowerCharacter 00000002, inputPowerRequirement 00000002, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, aggressiveness = 0, myCurrentState = 2, parentsCurrentPowerFlags = 00000002, maxCapability = 2 }"
| | "class-code" = <00000600>
| | "AGP_Target" = <>
| | "subsystem-id" = <0de00000>
| | "Power Management private data" = "{ this object = 02330380, interested driver = 02330380, driverDesire = 0, deviceDesire = 0, ourDesiredPowerState = 2, previousRequest = 2 }"
| | "compatible" = <"pci1631,e00d","pci1002,5833","pciclass,060000">
| | "assigned-addresses" = <1000004200000000000000f8000000000000000414000002000000000000f0f70000000000100
00>
| | "name" = "pci1002,5833"
| | }

#17
ole2

ole2

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 180 posts
  • Gender:Male
  • Location:Grenoble, France
kernel panic happened inside method AppleSMCPDRC::Start (I was expected on probe, but...)
it reports "unrecognized controller type"
which I believe (and I've seen some hardcoded text strings inside ACPI_SMC...)
due to mismatch with 27d0 identities.

patch might be a good idea, also SMBus isn't a complex I2C bus protocol
however, due to latest reading IONDRVSupport code, found NUB name could be important also

NUB name of macbookpro = SBUS:

| | +-o SBUS@1F,3 <class IOPCIDevice, registered, matched, active, busy 0, retain count 7>
| | | {
| | | "built-in" = <00>
| | | "IODeviceMemory" = ({"offset"=0xefa0,"parent"=({"address"=0x0,"length"=0x10000}),"length"=0x20})
| | | "device-id" = <da270000>
| | | "name" = "pci8086,27da"
| | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/SBUS@1f0003"
| | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | "vendor-id" = <86800000>
| | | "revision-id" = <02000000>
| | | "IOName" = "pci8086,27da"
| | | "IOPCIResourced" = Yes
| | | "subsystem-vendor-id" = <86800000>
| | | "Power Management private data" = "{ this object = 038e2a00, interested driver = 038e2a00, driverDesire
= 0, deviceDesire = 0, ourDesiredPowerState = 2, previousRequest = 2 }"
| | | "IOInterruptControllers" = ("io-apic-0")
| | | "Power Management protected data" = "{ theNumberOfPowerStates = 3, version 1, power state 0 = { capabili
tyFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, power
ToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 1 = { ca
pabilityFlags 00000000, outputPowerCharacter 00000400, inputPowerRequirement 00000400, staticPower 0, unbudgetedPower 0,
powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 2
= { capabilityFlags 00000000, outputPowerCharacter 00000002, inputPowerRequirement 00000002, staticPower 0, unbudgetedPo
wer 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, aggressi
veness = 0, myCurrentState = 2, parentsCurrentPowerFlags = 00000002, maxCapability = 2 }"
| | | "class-code" = <00050c00>
| | | "compatible" = <"pci8086,7270","pci8086,27da","pciclass,0c0500">
| | | "assigned-addresses" = <20fb008100000000a0ef00000000000020000000>
| | | "subsystem-id" = <"pr">
| | | "reg" = <00fb00000000000000000000000000000000000020fb000100000000000000000000000020000
00>
| | | "IOInterruptSpecifiers" = (<1300000007000000>)
| | | }


NUB name of appleUnknown (aka Samsung R20) = SMB:

| | +-o SMB@14 <class IOPCIDevice, registered, matched, active, busy 0, retain count 7>
| | | {
| | | "device-id" = <85430000>
| | | "vendor-id" = <02100000>
| | | "IOName" = "pci1002,4385"
| | | "subsystem-vendor-id" = <4d140000>
| | | "Power Management protected data" = "{ theNumberOfPowerStates = 3, version 1, power state 0 = { capabili
tyFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, power
ToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 1 = { ca
pabilityFlags 00000000, outputPowerCharacter 00000400, inputPowerRequirement 00000400, staticPower 0, unbudgetedPower 0,
powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 2
= { capabilityFlags 00000000, outputPowerCharacter 00000002, inputPowerRequirement 00000002, staticPower 0, unbudgetedPo
wer 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, aggressi
veness = 0, myCurrentState = 2, parentsCurrentPowerFlags = 00000002, maxCapability = 2 }"
| | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/SMB@140000"
| | | "reg" = <00a000000000000000000000000000000000000010a0000100000000000000000000000010000
00>
| | | "revision-id" = <14000000>
| | | "IOPCIResourced" = Yes
| | | "IODeviceMemory" = ({"offset"=0x8410,"parent"=({"address"=0x0,"length"=0x10000}),"length"=0x10})
| | | "class-code" = <00050c00>
| | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | "subsystem-id" = <11c50000>
| | | "Power Management private data" = "{ this object = 02d0d880, interested driver = 02d0d880, driverDesire
= 0, deviceDesire = 0, ourDesiredPowerState = 2, previousRequest = 2 }"
| | | "assigned-addresses" = <10a0008100000000108400000000000010000000>
| | | "compatible" = <"pci144d,c511","pci1002,4385","pciclass,0c0500">
| | | "name" = "pci1002,4385"
| | | }

but PCIClasses are same - pciclass,0c0500

any ideas on how to fix NUB naming? which kext/field has to be fixed for this?





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy