diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-03-18 19:28:51 +0100 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2017-04-14 17:20:06 +0200 |
commit | 38d1eb44031eb023f00d52481fc77286d28e5157 (patch) | |
tree | ea98d3ab21f5aa81463fd6c3cd0f150dc7c34bde | |
parent | 43156f662587b094c5a64dbb98a1499107e57b82 (diff) |
northbridge/via/cn700/acpi: Add the host bridge
Includes the DRAM controller device that knows which where the division
between addresses routed to the main memory and to the PCI bus is.
Change-Id: Id4cfeb8ff32de37723eee68a61c576e657dad30b
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Reviewed-on: https://review.coreboot.org/18896
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martinroth@google.com>
-rw-r--r-- | src/northbridge/via/cn700/acpi/hostbridge.asl | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/northbridge/via/cn700/acpi/hostbridge.asl b/src/northbridge/via/cn700/acpi/hostbridge.asl new file mode 100644 index 0000000000..2fb41588bb --- /dev/null +++ b/src/northbridge/via/cn700/acpi/hostbridge.asl @@ -0,0 +1,89 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2017 Lubomir Rintel <lkundrak@v3.sk> + * + * 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, either version 2 of the License, or + * (at your option) any later version. + * + * 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. + */ + +#include <arch/ioapic.h> + +Name (_HID, EisaId ("PNP0A03")) +Name (_UID, 1) +Name (_ADR, 0x00000000) +Name (_BBN, 0) + +/* The DRAM controller */ +Device (MEMC) +{ + Name (_ADR, 0x00000003) + + OperationRegion (MEMB, PCI_Config, 0x00, 0xEF) + Field (MEMB, DWordAcc, NoLock, Preserve) { + + /* DRAM Rank Ending Address */ + Offset (0x40), + R0EA, 8, /* Rank 0 Ending Address */ + R1EA, 8, /* Rank 1 Ending Address */ + R2EA, 8, /* Rank 2 Ending Address */ + R3EA, 8, /* Rank 3 Ending Address */ + } + + /* Find the top of DRAM */ + Method (TOLM, 0) { + /* Find the last occupied rank's end. */ + Store (R3EA, Local0) + If (LEqual (Local0, Zero)) { + Store (R2EA, Local0) + } + If (LEqual (Local0, Zero)) { + Store (R1EA, Local0) + } + If (LEqual (Local0, Zero)) { + Store (R0EA, Local0) + } + /* The granularity is 64M */ + ShiftLeft (Local0, 26, Local0) + Return (Local0) + } +} + +Name (XCRS, ResourceTemplate () { + /* All PCI busses */ + WordBusNumber (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, + 0x0000, 0x0000, 0x00ff, 0x0000, 0x0100,,,) + + /* IO-space, sans the PCI regs. */ + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, 0x0000, 0x0CF7, 0x0000, 0x0CF8, + ,,, TypeStatic) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300, + ,,, TypeStatic) + + /* The space from top of DRAM to IOAPIC */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + /* This is a template that gets filled in _CRS() */ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,,, + MEM0, AddressRangeMemory, TypeStatic) +}) +Method (_CRS, 0) { + + /* MEM0 is from the top of RAM to IOAPIC */ + CreateDWordField (XCRS, \_SB.PCI0.MEM0._MIN, MEML) + CreateDWordField (XCRS, \_SB.PCI0.MEM0._MAX, MEMH) + CreateDWordField (XCRS, \_SB.PCI0.MEM0._LEN, LENM) + Store (\_SB.PCI0.MEMC.TOLM, MEML) + Subtract (IO_APIC_ADDR, 1, MEMH) + Subtract (IO_APIC_ADDR, MEML, LENM) + + Return (XCRS); +} |