#
# This file is part of the coreboot project.
#
# Copyright (C) 2011 Advanced Micro Devices, Inc.
#
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
chip northbridge/amd/agesa/family14/root_complex
	device cpu_cluster 0 on
			chip cpu/amd/agesa/family14
			  device lapic 0 on end
			end
	end
	device domain 0 on
		subsystemid 0x1022 0x1510 inherit
			chip northbridge/amd/agesa/family14 # CPU side of HT root complex
#					device pci 18.0 on #  northbridge
					chip northbridge/amd/agesa/family14 # PCI side of HT root complex
						device pci 0.0 on end # Root Complex
						device pci 1.0 on end # Internal Graphics P2P bridge 0x980[2456]
						device pci 4.0 on end # PCIE P2P bridge on-board NIC
						device pci 5.0 off end # PCIE P2P bridge
						device pci 6.0 off end # PCIE P2P bridge
						device pci 7.0 off end # PCIE P2P bridge
						device pci 8.0 off end # NB/SB Link P2P bridge
					end # agesa northbridge

					chip southbridge/amd/cimx/sb800 # it is under NB/SB Link, but on the same pri bus
						device pci 11.0 on end # SATA
						device pci 12.0 on end # OHCI USB 0-4
						device pci 12.2 on end # EHCI USB 0-4
						device pci 13.0 on end # OHCI USB 5-9
						device pci 13.2 on end # EHCI USB 5-9
						device pci 14.0 on # SM
						chip drivers/generic/generic #dimm 0-0-0
							device i2c 50 on end
						end
						chip drivers/generic/generic #dimm 0-0-1
							device i2c 51 off end
						end
					end # SM
					device pci 14.1 off end # IDE	0x439c
					device pci 14.2 on end # HDA	0x4383
					device pci 14.3 on # LPC		0x439d
					chip superio/smsc/smscsuperio
						device pnp 4e.0 off end		# Floppy
						device pnp 4e.3 off end		# Parallel Port
						device pnp 4e.4 on		# COM1
							io 0x60 = 0x3f8
							irq 0x70 = 4
						end
						device pnp 4e.5 on		# COM2
							io 0x60 = 0x2f8
							irq 0x70 = 3
						end
						device pnp 4e.7 on		# Keyboard
							io 0x60 = 0x60
							io 0x62 = 0x64
							irq 0x70 = 1
							irq 0x72 = 12
						end
						device pnp 4e.A on		# Runtime Regs
							io 0x60 = 0x0E00
							drq 0xF0 = 0x0B # no 32kHz
						end
					end # smscsuperio
				end #LPC
				device pci 14.4 on  end # PCIB 0x4384, NOTE: PCI interface pins shared with GPIO {GPIO 35:0}
				device pci 14.5 off end # OHCI FS/LS USB
				device pci 14.6 off end # Hudson-E1 GbE MAC: Broadcom BCM5785 (14E4:1699)
				device pci 15.0 off end # PCIe PortA
				device pci 15.1 off end # PCIe PortB
				device pci 15.2 off end # PCIe PortC
				device pci 15.3 off end # PCIe PortD
				device pci 16.0 on  end # OHCI USB 10-13
				device pci 16.2 on  end # EHCI USB 10-13
				register "gpp_configuration" = "4" #1:1:1:1
				register "boot_switch_sata_ide" = "0"	# 0: boot from SATA. 1: IDE
			end	#southbridge/amd/cimx/sb800
#			end #  device pci 18.0
# These seem unnecessary
			device pci 18.0 on end
			device pci 18.1 on end
			device pci 18.2 on end
			device pci 18.3 on end
			device pci 18.4 on end
			device pci 18.5 on end
			device pci 18.6 on end
			device pci 18.7 on end

			register "spdAddrLookup" = "
			{
				{ {0xA0, 0xA2}, {0x00, 0x00}, }, // socket 0 - Channel 0 & 1 - 8-bit SPD addresses
				{ {0x00, 0x00}, {0x00, 0x00}, }, // socket 1 - Channel 0 & 1 - 8-bit SPD addresses
			}"

		end #chip northbridge/amd/agesa/family14 # CPU side of HT root complex
	end #domain
end #northbridge/amd/agesa/family14/root_complex
