diff --git a/repos/os/run/pci.run b/repos/os/run/pci.run deleted file mode 100644 index 30d1abd36c..0000000000 --- a/repos/os/run/pci.run +++ /dev/null @@ -1,81 +0,0 @@ -# -# Build -# -set build_components { core init test/pci timer } - -set use_acpica_as_acpi_drv 0 - -source ${genode_dir}/repos/base/run/platform_drv.inc - -# override default platform driver policy -proc platform_drv_policy {} { - global use_acpica_as_acpi_drv - set policy "" - - append_if $use_acpica_as_acpi_drv policy { - } - - append policy { - } - - return $policy -} - -append_platform_drv_build_components - -build $build_components -create_boot_directory - -# -# Generate config -# - -append config { - - - - - - - - - - - - - - - - - - - - } - -append_platform_drv_config - -append config { - - - -} - -install_config $config - -# -# Boot modules -# - -# generic modules -set boot_modules { - core ld.lib.so init test-pci timer -} - -# platform-specific modules -append_platform_drv_boot_modules -build_boot_image $boot_modules - -append qemu_args "-nographic " - -run_genode_until "--- Platform test finished ---.*\n" 10 - diff --git a/repos/os/src/test/pci/target.mk b/repos/os/src/test/pci/target.mk deleted file mode 100644 index eaf0a717f7..0000000000 --- a/repos/os/src/test/pci/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = test-pci -SRC_CC = test.cc -LIBS = base -REQUIRES = x86 - -CC_CXX_WARN_STRICT_CONVERSION = diff --git a/repos/os/src/test/pci/test.cc b/repos/os/src/test/pci/test.cc deleted file mode 100644 index ab9f788177..0000000000 --- a/repos/os/src/test/pci/test.cc +++ /dev/null @@ -1,239 +0,0 @@ -/* - * \brief Test for PCI bus driver - * \author Norman Feske - * \date 2008-01-18 - */ - -/* - * Copyright (C) 2008-2020 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#include -#include -#include -#include -#include - -using namespace Genode; - -enum { AMD_VENDOR_ID = 0x1022, INTEL_VENDOR_ID = 0x8086 }; -enum { - CLASS_CODE_SATA = 0x106, - CLASS_CODE_ETHERNET = 0x200, - CLASS_CODE_VGA = 0x300, - CLASS_CODE_HOST_BRIDGE = 0x600, - CLASS_CODE_HOST_ISA = 0x601, - CLASS_CODE_PCI_PCI_BRIDGE = 0x604, - CLASS_CODE_IOMMU = 0x806, - CLASS_CODE_USB = 0xc03, - CLASS_CODE_SMBUS = 0xc05, -}; - -enum { - USB_UHCI = 0x00, - USB_OHCI = 0x10, - USB_EHCI = 0x20, - USB_XHCI = 0x30 -}; - -enum { - DEVICE_AMD_HUDSON2_SMBUS = 0x780b, -}; - -enum { - CAP_PWRM = 0x01, - CAP_MSI = 0x05, - CAP_HT = 0x08, - CAP_SECDEV = 0x0f, - CAP_PCI_E = 0x10, - CAP_MSIX = 0x11 -}; - -enum { - EXT_CAP_ERRREP = 0x01, /* advanced error reporting */ - EXT_CAP_DEVSNR = 0x03, /* device serial number */ - EXT_CAP_VENDOR = 0x0b, /* vendor specific */ - EXT_CAP_ACSERV = 0x0d, /* access control service */ -}; - -typedef Platform::Device::Access_size Size; - -static void dump_extended_pci_caps(Platform::Device_client &device) -{ - unsigned cap = 0x100; - unsigned max_caps = (0x1000 - cap) / 8; - - String<128> cap_string { }; - while (max_caps) { - unsigned const val = device.config_read(cap, Size::ACCESS_32BIT); - switch (val & 0xffff) { - case 0: - break; - case EXT_CAP_ERRREP: - cap_string = String<128>(cap_string, " ERR_REP"); - break; - case EXT_CAP_DEVSNR: - cap_string = String<128>(cap_string, " DEV_SNR"); - break; - case EXT_CAP_VENDOR: - cap_string = String<128>(cap_string, " VENDOR"); - break; - case EXT_CAP_ACSERV: - cap_string = String<128>(cap_string, " ACS"); - break; - default: - cap_string = String<128>(cap_string, " ", Hex(val & 0xffff)); - }; - - max_caps --; - cap = (val >> 20) & 0xffc; - if (cap <= 0x100 || cap >= 0x1000 - 4 /* size of 32Bit */) - break; - } - - if (cap_string.valid()) - log(" ECAP:", cap_string); -} - -/** - * Print device information - */ -static void print_device_info(Platform::Device_capability device_cap) -{ - if (!device_cap.valid()) { - error("invalid device capability"); - return; - } - - Platform::Device_client device(device_cap); - - unsigned char bus = 0, dev = 0, fun = 0; - device.bus_address(&bus, &dev, &fun); - unsigned short const vendor_id = device.vendor_id(); - unsigned short const device_id = device.device_id(); - unsigned const class_code = device.class_code() >> 8; - unsigned char const revision = device.config_read(0x8, Size::ACCESS_8BIT); - unsigned char const prog_if = device.config_read(0x9, Size::ACCESS_8BIT); - unsigned const pci_cmd = device.config_read(0x4, Size::ACCESS_16BIT); - - - log(Hex(bus, Hex::OMIT_PREFIX), ":", - Hex(dev, Hex::OMIT_PREFIX), ".", - Hex(fun, Hex::OMIT_PREFIX), " " - "class=", Hex(class_code), " ", - (class_code == CLASS_CODE_VGA) ? "(VGA)" : - (class_code == CLASS_CODE_HOST_BRIDGE) ? "(bridge host)" : - (class_code == CLASS_CODE_HOST_ISA) ? "(bridge ISA)" : - (class_code == CLASS_CODE_PCI_PCI_BRIDGE) ? "(bridge PCI)" : - (class_code == CLASS_CODE_IOMMU) ? "(IOMMU)" : - (class_code == CLASS_CODE_USB) ? "(USB)" : - (class_code == CLASS_CODE_SMBUS) ? "(SMBUS)" : - (class_code == CLASS_CODE_SATA) ? "(SATA)" : "", - (class_code == CLASS_CODE_ETHERNET) ? "(Ethernet)" : "", - " vendor=", Hex(vendor_id), " ", - ((vendor_id == INTEL_VENDOR_ID) ? "(Intel)" : - (vendor_id == AMD_VENDOR_ID) ? "(AMD)" : "(unknown)"), - " device=", Hex(device_id), - " prog_if=", Genode::Hex(prog_if), - (class_code != CLASS_CODE_USB) ? "" : - (prog_if == USB_UHCI) ? "(UHCI)" : - (prog_if == USB_OHCI) ? "(OHCI)" : - (prog_if == USB_EHCI) ? "(EHCI)" : - (prog_if == USB_XHCI) ? "(XHCI)" : "", - " revision=", Genode::Hex(revision), - " pci_cmd=", Genode::Hex(pci_cmd)); - - if (vendor_id == AMD_VENDOR_ID && device_id == DEVICE_AMD_HUDSON2_SMBUS) { - if (revision >= 0x11 && revision <= 0x14) - log("chipset: AMD HUDSON2"); - else if (revision >= 0x15 && revision <= 0x18) - log("chipset: AMD BOLTON"); - else if (revision >= 0x39 && revision <= 0x3a) - log("chipset: AMD ANGTZE"); - } - - for (int resource_id = 0; resource_id < 6; resource_id++) { - - typedef Platform::Device::Resource Resource; - - Resource const resource = device.resource(resource_id); - - if (resource.type() != Resource::INVALID) { - log(" Resource ", resource_id, " " - "(", (resource.type() == Resource::IO ? "I/O" : "MEM"), "): " - "base=", Genode::Hex(resource.base()), " " - "size=", Genode::Hex(resource.size()), " ", - (resource.prefetchable() ? "prefetchable" : "") - ); - } - } - - unsigned cap = device.config_read(0x34, Size::ACCESS_8BIT); - if (cap) { - String<128> cap_string { }; - for (Genode::uint32_t val = 0; cap; cap = (val >> 8) & 0xff) { - val = device.config_read(cap, Size::ACCESS_32BIT); - unsigned const type = val & 0xff; - switch (type) { - case CAP_MSI: { - uint16_t msi_val = device.config_read(cap + 2, Size::ACCESS_16BIT); - if (msi_val & 0x80) - cap_string = String<128>(cap_string, " MSI-64"); - else - cap_string = String<128>(cap_string, " MSI"); - break; - } - case CAP_HT: cap_string = String<128>(cap_string, " HYPERTRANSPORT"); break; - case CAP_MSIX: cap_string = String<128>(cap_string, " MSI-X"); break; - case CAP_PCI_E: cap_string = String<128>(cap_string, " PCI-E"); break; - case CAP_SECDEV: cap_string = String<128>(cap_string, " SECURE-DEVICE"); break; - case CAP_PWRM: cap_string = String<128>(cap_string, " PWRM"); break; - default: - cap_string = String<128>(cap_string, " ", Hex(type)); - } - - if (type == CAP_PCI_E) { - uint16_t flags = device.config_read(cap + 2, Size::ACCESS_16BIT); - uint8_t type = (flags >> 4) & 0xf; - cap_string = String<128>(cap_string, "(T", Hex(type, Hex::OMIT_PREFIX), ")"); - } - } - log(" CAP:", cap_string); - } - - dump_extended_pci_caps(device); -} - - -void Component::construct(Genode::Env &env) -{ - log("--- Platform test started ---"); - - /* open session to pci service */ - static Platform::Connection pci(env); - - Platform::Device_capability prev_device_cap, device_cap; - - pci.with_upgrade([&] () { device_cap = pci.first_device(); }); - - /* - * Iterate through all installed devices - * and print the available device information. - */ - while (device_cap.valid()) { - print_device_info(device_cap); - - pci.release_device(prev_device_cap); - prev_device_cap = device_cap; - - pci.with_upgrade([&] () { device_cap = pci.next_device(device_cap); }); - } - - /* release last device */ - pci.release_device(prev_device_cap); - - log("--- Platform test finished ---"); -}