1 /* SPDX-License-Identifier: GPL-2.0-only */
4 #include <console/console.h>
5 #include <device/pci_ops.h>
6 #include <device/device.h>
7 #include <device/pci.h>
9 #include <cpu/x86/smm.h>
13 static void mch_domain_read_resources(struct device
*dev
)
16 uint64_t tom
, remapbase
, remaplimit
;
17 struct device
*mc_dev
;
19 pci_domain_read_resources(dev
);
21 mc_dev
= pcidev_on_root(0, 0);
23 die("Could not find MCH device\n");
25 tom
= pci_read_config8(mc_dev
, DRB_ROW_7
);
28 /* Remapped region with a 64 MiB granularity in register
29 definition. Limit is inclusive, so add one. */
30 remapbase
= pci_read_config16(mc_dev
, REMAPBASE
) & 0x3ff;
33 remaplimit
= pci_read_config16(mc_dev
, REMAPLIMIT
) & 0x3ff;
37 /* Report the memory regions */
39 ram_range(dev
, idx
++, 0, 0xa0000);
40 mmio_from_to(dev
, idx
++, 0xa0000, 0xc0000);
41 ram_from_to(dev
, idx
++, 0xc0000, 1 * MiB
);
45 smm_region(&tseg_base
, &tseg_size
);
46 ram_from_to(dev
, idx
++, 1 * MiB
, tseg_base
);
47 mmio_range(dev
, idx
++, tseg_base
, tseg_size
);
49 ASSERT(tom
== remapbase
);
50 upper_ram_end(dev
, idx
++, remaplimit
);
53 static void mch_domain_set_resources(struct device
*dev
)
55 assign_resources(dev
->downstream
);
58 struct device_operations e7505_pci_domain_ops
= {
59 .read_resources
= mch_domain_read_resources
,
60 .set_resources
= mch_domain_set_resources
,
61 .scan_bus
= pci_host_bridge_scan_bus
,
62 .ops_pci
= &pci_dev_ops_pci
,
66 struct device_operations e7505_cpu_bus_ops
= {
67 .read_resources
= noop_read_resources
,
68 .set_resources
= noop_set_resources
,
69 .init
= mp_cpu_bus_init
,
72 struct chip_operations northbridge_intel_e7505_ops
= {
73 .name
= "Intel E7505 Northbridge",