Skip To Main Content

Toggle Close Container - Mobile

Mobile Elements Wrapper

English

I want to...

Mobile Main Nav

Decorative Mountain Image

Nsc6001: Acpi

Abstract The ACPI NSC6001 Hardware ID identifies the GPIO (General Purpose Input/Output) controller found on the AMD Geode LX series of system-on-chip (SoC) devices. While this hardware is largely obsolete, its implementation within the Linux kernel (specifically drivers/gpio/gpio-nsc768.c and the legacy nsc_gpio driver) provides a rich case study in the transition from legacy x86 embedded I/O to ACPI-enumerated device drivers. This paper dissects the hardware architecture, the Linux driver model complexities, and the specific role of ACPI in bridging a non-PnP legacy device into a modern OS framework. 1. Introduction The Advanced Configuration and Power Interface (ACPI) is the standard for device enumeration, power management, and configuration in x86-based systems. While modern systems are dominated by PCIe and ACPI-defined standard devices (e.g., PNP0C09 for EC), legacy embedded controllers often hide behind proprietary or semi-standard Hardware IDs (HIDs).

static void nsc_gpio_set(struct gpio_chip *chip, unsigned offset, int value)

Note: Documentation varies; the Linux nsc_gpio driver actually uses a simpler 2-register model: OUT and IN at offsets 0 and 1 (byte-wide). This discrepancy suggests two different revisions or the driver abstracts only a subset. acpi nsc6001

Example (simplified):

The actual hardware uses a memory-mapped I/O (MMIO) or port I/O scheme. In typical Geode LX designs, the GPIO is memory-mapped at 0xF0000000 + offset or via PCI config space of the CS5536. The NSC6001 can generate interrupts on GPIO pin state changes. However, the interrupt lines are routed through the Geode’s PIC (8259-compatible) or IOAPIC via a chained interrupt. Linux drivers must parse the ACPI _CRS to find the IRQ resource. 3. ACPI Implementation for NSC6001 3.1. ACPI Device Object In the system’s DSDT (Differentiated System Description Table), the NSC6001 appears as: Abstract The ACPI NSC6001 Hardware ID identifies the

| Offset | Register | Purpose | |--------|---------------|-------------------------------------------------------------------------| | 0x00 | OUT_SELECT | 0 = output, 1 = input (direction). Actually, the Geode uses "OUT_EN". | | 0x04 | OUT_AUX_SELECT| Alternate function selection. | | 0x08 | OUT_DATA | Output data register (set/clear output bits). | | 0x0C | IN_DATA | Input data register (read pin states). | | 0x10 | IN_STATUS | Edge detection status. | | 0x14 | IN_AUX_SELECT | Debounce / IRQ configuration. |

unsigned long flags; u8 reg; spin_lock_irqsave(&nsc_gpio_lock, flags); reg = inb(nsc_gpio_base + 1); if (value) reg : This driver cannot access the advanced features (interrupts, debounce, alternate functions) because ACPI NSC6001 does not expose those register offsets in a standard way. For full Geode GPIO, the gpio-cs5535 driver is preferred. 5. ACPI vs. Legacy Probing Conflict A key technical challenge is that the Geode CS5536 also provides PCI configuration space for GPIO (Vendor ID 0x1022 National Semiconductor/AMD). If both the ACPI NSC6001 device and the PCI CS5536 driver bind to the same hardware, resource contention occurs. "NSC6001") // Hardware ID Name (_CID

Device (GPIO) Name (_HID, "NSC6001") // Hardware ID Name (_CID, "NSC6001") // Compatible ID Name (_CRS, ResourceTemplate () IO (Decode16, 0x6100, 0x6100, 0x01, 0x10) // I/O port range IRQ (Edge, ActiveHigh, Shared) 11 // IRQ line ) Name (_DSD, Package () ... ) // Device-Specific Data (optional)

Header Holder

I want to...

Header Logo Container

English

Toggle Search Container

Toggle Menu Container - Mobile

Header Sidebar

Container Triggers

Toggle Menu Container - Desktop

Toggle Close Container Desktop

Toggle Schools Container

Utility Nav

Homepage Logo

District Canvas Container

Close District Canvas

Desktop Schools Tabs

Mobile Schools Accordions

Horizontal Nav

Breadcrumb

Abstract The ACPI NSC6001 Hardware ID identifies the GPIO (General Purpose Input/Output) controller found on the AMD Geode LX series of system-on-chip (SoC) devices. While this hardware is largely obsolete, its implementation within the Linux kernel (specifically drivers/gpio/gpio-nsc768.c and the legacy nsc_gpio driver) provides a rich case study in the transition from legacy x86 embedded I/O to ACPI-enumerated device drivers. This paper dissects the hardware architecture, the Linux driver model complexities, and the specific role of ACPI in bridging a non-PnP legacy device into a modern OS framework. 1. Introduction The Advanced Configuration and Power Interface (ACPI) is the standard for device enumeration, power management, and configuration in x86-based systems. While modern systems are dominated by PCIe and ACPI-defined standard devices (e.g., PNP0C09 for EC), legacy embedded controllers often hide behind proprietary or semi-standard Hardware IDs (HIDs).

static void nsc_gpio_set(struct gpio_chip *chip, unsigned offset, int value)

Note: Documentation varies; the Linux nsc_gpio driver actually uses a simpler 2-register model: OUT and IN at offsets 0 and 1 (byte-wide). This discrepancy suggests two different revisions or the driver abstracts only a subset.

Example (simplified):

The actual hardware uses a memory-mapped I/O (MMIO) or port I/O scheme. In typical Geode LX designs, the GPIO is memory-mapped at 0xF0000000 + offset or via PCI config space of the CS5536. The NSC6001 can generate interrupts on GPIO pin state changes. However, the interrupt lines are routed through the Geode’s PIC (8259-compatible) or IOAPIC via a chained interrupt. Linux drivers must parse the ACPI _CRS to find the IRQ resource. 3. ACPI Implementation for NSC6001 3.1. ACPI Device Object In the system’s DSDT (Differentiated System Description Table), the NSC6001 appears as:

| Offset | Register | Purpose | |--------|---------------|-------------------------------------------------------------------------| | 0x00 | OUT_SELECT | 0 = output, 1 = input (direction). Actually, the Geode uses "OUT_EN". | | 0x04 | OUT_AUX_SELECT| Alternate function selection. | | 0x08 | OUT_DATA | Output data register (set/clear output bits). | | 0x0C | IN_DATA | Input data register (read pin states). | | 0x10 | IN_STATUS | Edge detection status. | | 0x14 | IN_AUX_SELECT | Debounce / IRQ configuration. |

unsigned long flags; u8 reg; spin_lock_irqsave(&nsc_gpio_lock, flags); reg = inb(nsc_gpio_base + 1); if (value) reg : This driver cannot access the advanced features (interrupts, debounce, alternate functions) because ACPI NSC6001 does not expose those register offsets in a standard way. For full Geode GPIO, the gpio-cs5535 driver is preferred. 5. ACPI vs. Legacy Probing Conflict A key technical challenge is that the Geode CS5536 also provides PCI configuration space for GPIO (Vendor ID 0x1022 National Semiconductor/AMD). If both the ACPI NSC6001 device and the PCI CS5536 driver bind to the same hardware, resource contention occurs.

Device (GPIO) Name (_HID, "NSC6001") // Hardware ID Name (_CID, "NSC6001") // Compatible ID Name (_CRS, ResourceTemplate () IO (Decode16, 0x6100, 0x6100, 0x01, 0x10) // I/O port range IRQ (Edge, ActiveHigh, Shared) 11 // IRQ line ) Name (_DSD, Package () ... ) // Device-Specific Data (optional)