I am sponsoring the following fast-track on behalf of Geetanjali Krishna and Jiang Liu, with timeout of 02/13/2009. The project requests micro/patch binding.
The proposed cfgadm_fw.man man page is in the case folder in the materials directory. ----------- Template Version: @(#)onepager.txt 1.35 07/11/07 SMI 1. Introduction 1.1. Project/Component Working Name: Device tree definition for system devices on an x86 System to support enabling of hotplug features. 1.2. Name of Document Author/Supplier: Author: Geeta Krishna <geetanjali.krishna at intel.com> Gerry Liu <jiang.liu at intel.com> 1.3. Date of This Document: January 29th, 2009 2. Project Summary 2.1. Project Description: This project will scan the ACPI namespace and present an ACPI nexus driver on IA. It will also create device nodes for cpu, memory and root ports (IO Hubs) in cases where the platform supports hotplug of these devices. An additional branch will be added to the device tree to populate devices not currently enumerated by standard methods. The scope could be extended to enumerate other ACPI objects such as buttons and HPETs where today these drivers scan ACPI name space. This nexus driver approach provides for a natural fit into the solaris driver framework. 2.2. Risks and Assumptions: 1. ACPI device enumeration and corresponding device node creation will be done only if the OS is ACPI 3.0+ compatible and supports module device(ACPI0004). 2. Hotplug functionality is based on cfgadm framework. 4. Technical Description: 4.1.1 Problem Description By X86 system devices, we refer to the suite of hardware components which are common to x86 platform and play improtant role in the system architecture but can not be enumerated/discovered through industry standard bus specifications. Examples of these X86 system devices include: logical CPU, memory device, iommu, IOAPIC, high precesion event timer(HPET), ACPI sleep button, ACPI power button etc. These X86 system devices are enumerated through firmware methods as they can not be enumerated through industry standard bus specifications. Some of these firmware methods include SMBIOS table, MPS table and ACPI table etc. Currently Solaris lacks a uniform way to enumerate all system devices, so each device driver needs to take the responsibility to probe corresponding devices. For example, iommu driver needs to probe iommu hardware, HPET driver needs to probe HPET hardware. To use the existing Dynamic Reconfiguration framework, all hotpluggable devices need to be enumerated,linked into the device tree and have Attachment Points generated for them. 4.1.2. Proposal We are proposing additions and minor re-organization of the current Solaris device tree structure on x86 system to achieve the following goals: 1) Provide a system device enumerator based on ACPI specification 2) Organize system devices into a firmware device subtree 3) Build a device subtree to reflect hardware topology information if possbile 4) Provide a nexus driver for pseudo system bus to support all system device drivers and make them DDI compliant. 5) Generate a device tree which aids in the implementation of CPU/Memory/IOH hotplug 4.1.2.1 Device tree structure when ACPI is disabled or not available /devices/fw Pseudo nexus node to host system devices /devices/fw/cpu at x Logical CPU /devices/pci at x,0 PCI host bridge 4.1.2.2 Device tree structure for system with CPU/memory/IOH hotplug feature /devices/fw Pseudo nexus node to host system devices /devices/fw/sb at x Pseudo nexus node for system board /devices/fw/sb at x/socket at y Pseudo nexus node to host devices in physical CPU /devices/fw/sb at x/socket at y/cpu at z Logical CPU /devices/fw/sb at x/socket at y/mem at z ACPI memory device /devices/fw/sb at x/socket at y/ioh at z IOH embedded in physical CPU /devices/fw/sb at x/ioh at y Pseudo nexus node to host device in IOH except PCI host bridge /devices/fw/sb at x/hpet at y High precesion event timer /devices/fw/sb at x/slpbtn at y ACPI sleep button /devices/fw/sb at x/pwrbtn at y ACPI power button /devices/pci at x,0 PCI host bridge 4.1.2.3 Attachment point for CPU/memory/IOH Hotplug Attachment points will be created only for nodes that are hot pluggable. This can vary from platform to platform and the information is available from the ACPI table. Examples of possible Attachment Points are: i) System board is hot pluggable. Socket on the board is hotpluggable. AP Device Minor Node Configuration Node sbx /devices/fw:sbx /dev/cfg/sbx sbx::sockety - /dev/cfg/sbx/sockety ii) Socket is hot pluggable. Non-embedded IOH is hotpluggable. System board is not hot pluggable. AP Device Minor Node Configuration Node sockety /devices/fw/sbx:socket /dev/cfg/sbx/sockety iohy /devices/fw/sbx:iohy /dev/cfg/iohy 4.1.2.4 Device node properties Properties for all device nodes created by acpi device enumerator: compatible device_type unit-address Properties for device nodes if corresponding ACPI object exists: acpi-namespace (if corresponding ACPI object exists) Properties for device nodes if it or its children comsume hw resources: reg assigned-addresses #size-cells #address-cells ranges Note: Some of these properties will not be available if the system is booted with ACPI disabled. 4.2. Bug/RFE Number(s): None 4.3. In Scope: Hotplug support on IA 4.4. Out of Scope: NA 4.5. Interfaces: |______________________|________________________|______________________________| |Interface | Classification | Comments | |______________________|________________________|______________________________| | /platform/i86pc/ | | | | kernel/misc/acpidev | Project Private | ACPI device enumerator | | /platform/i86pc/ | | | | kernel/misc/amd64/ | | | | acpidev | | | | | | | |/usr/include/sys/ | | | | acpidev.h | Project/Private | Header file for ACPI device | | | | enumerator | |______________________|________________________|______________________________| | /platform/i86pc/ | | | | kernel/drv/acpinex | Project Private | Bus driver for ACPI virtual | /platform/i86pc/ | | bus | | kernel/drv/amd64/ | | | | acpinex | | | | /platform/i86pc/ | | | | kernel/drv/acpinex.conf| Project Private | Driver conf file | |__________________|____________________________|______________________________| Interface Classification Comments ----------------------------------------------------------------------------- /devices/fw Cons Priv Pseudo nexus node to host system devices /devices/fw/sb at x Cons Priv Pseudo nexus node for system board /devices/fw/sb at x/ Cons Priv Pseudo nexus node to host devices in socket at y physical CPU /devices/fw/sb at x/ Cons Priv Logical CPU socket at y/cpu at z /devices/fw/sb at x/ Cons Priv ACPI memory device socket at y/mem at z /devices/fw/sb at x/ Cons Priv IOH embedded in physical CPU socket at y/ioh at z /devices/fw/sb at x/ioh at y Cons Priv Pseudo nexus node to host device in IOH except PCI host bridge 4.6. Doc Impact: cfgadm_fw(1M) man page will be added. This will be similiar to cfgadm_sbd(1M) with x86 specific platform information cfgadm(1M) will need to be modified to point to cfgadm_fw(1M) 4.11. Security Impact: None 4.12. Dependencies: ACPI 3.0+ compatibility 5. Reference Documents: None 6. Resources and Schedule: 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: ON 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open