FSConfig.py (10437:caec4a7b8b74) FSConfig.py (10438:08fa6ad59594)
1# Copyright (c) 2010-2012 ARM Limited
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license

--- 334 unchanged lines hidden (view full) ---

343
344 x86_sys.membus = MemBus()
345
346 # North Bridge
347 x86_sys.iobus = NoncoherentXBar()
348 x86_sys.bridge = Bridge(delay='50ns')
349 x86_sys.bridge.master = x86_sys.iobus.slave
350 x86_sys.bridge.slave = x86_sys.membus.master
1# Copyright (c) 2010-2012 ARM Limited
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license

--- 334 unchanged lines hidden (view full) ---

343
344 x86_sys.membus = MemBus()
345
346 # North Bridge
347 x86_sys.iobus = NoncoherentXBar()
348 x86_sys.bridge = Bridge(delay='50ns')
349 x86_sys.bridge.master = x86_sys.iobus.slave
350 x86_sys.bridge.slave = x86_sys.membus.master
351 # Allow the bridge to pass through the IO APIC (two pages),
352 # everything in the IO address range up to the local APIC, and
353 # then the entire PCI address space and beyond
351 # Allow the bridge to pass through:
352 # 1) kernel configured PCI device memory map address: address range
353 # [0xC0000000, 0xFFFF0000). (The upper 64kB are reserved for m5ops.)
354 # 2) the bridge to pass through the IO APIC (two pages, already contained in 1),
355 # 3) everything in the IO address range up to the local APIC, and
356 # 4) then the entire PCI address space and beyond.
354 x86_sys.bridge.ranges = \
355 [
357 x86_sys.bridge.ranges = \
358 [
356 AddrRange(x86_sys.pc.south_bridge.io_apic.pio_addr,
357 x86_sys.pc.south_bridge.io_apic.pio_addr +
358 APIC_range_size - 1),
359 AddrRange(0xC0000000, 0xFFFF0000),
359 AddrRange(IO_address_space_base,
360 interrupts_address_space_base - 1),
361 AddrRange(pci_config_address_space_base,
362 Addr.max)
363 ]
364
365 # Create a bridge from the IO bus to the memory bus to allow access to
366 # the local APIC (two pages)

--- 149 unchanged lines hidden (view full) ---

516 [
517 # Mark the first megabyte of memory as reserved
518 X86E820Entry(addr = 0, size = '639kB', range_type = 1),
519 X86E820Entry(addr = 0x9fc00, size = '385kB', range_type = 2),
520 # Mark the rest of physical memory as available
521 X86E820Entry(addr = 0x100000,
522 size = '%dB' % (self.mem_ranges[0].size() - 0x100000),
523 range_type = 1),
360 AddrRange(IO_address_space_base,
361 interrupts_address_space_base - 1),
362 AddrRange(pci_config_address_space_base,
363 Addr.max)
364 ]
365
366 # Create a bridge from the IO bus to the memory bus to allow access to
367 # the local APIC (two pages)

--- 149 unchanged lines hidden (view full) ---

517 [
518 # Mark the first megabyte of memory as reserved
519 X86E820Entry(addr = 0, size = '639kB', range_type = 1),
520 X86E820Entry(addr = 0x9fc00, size = '385kB', range_type = 2),
521 # Mark the rest of physical memory as available
522 X86E820Entry(addr = 0x100000,
523 size = '%dB' % (self.mem_ranges[0].size() - 0x100000),
524 range_type = 1),
524 # Reserve the last 16kB of the 32-bit address space for the
525 # m5op interface
526 X86E820Entry(addr=0xFFFF0000, size='64kB', range_type=2),
527 ]
528
525 ]
526
527 # Mark [mem_size, 3GB) as reserved if memory less than 3GB, which force
528 # IO devices to be mapped to [0xC0000000, 0xFFFF0000). Requests to this
529 # specific range can pass though bridge to iobus.
530 if len(self.mem_ranges) == 1:
531 entries.append(X86E820Entry(addr = self.mem_ranges[0].size(),
532 size='%dB' % (0xC0000000 - self.mem_ranges[0].size()),
533 range_type=2))
534
535 # Reserve the last 16kB of the 32-bit address space for the m5op interface
536 entries.append(X86E820Entry(addr=0xFFFF0000, size='64kB', range_type=2))
537
529 # In case the physical memory is greater than 3GB, we split it into two
530 # parts and add a separate e820 entry for the second part. This entry
531 # starts at 0x100000000, which is the first address after the space
532 # reserved for devices.
533 if len(self.mem_ranges) == 2:
534 entries.append(X86E820Entry(addr = 0x100000000,
535 size = '%dB' % (self.mem_ranges[1].size()), range_type = 1))
536

--- 29 unchanged lines hidden ---
538 # In case the physical memory is greater than 3GB, we split it into two
539 # parts and add a separate e820 entry for the second part. This entry
540 # starts at 0x100000000, which is the first address after the space
541 # reserved for devices.
542 if len(self.mem_ranges) == 2:
543 entries.append(X86E820Entry(addr = 0x100000000,
544 size = '%dB' % (self.mem_ranges[1].size()), range_type = 1))
545

--- 29 unchanged lines hidden ---