Saltar al contenido

¿PCIe hotplug realmente funciona en la práctica?

Después de consultar expertos en esta materia, programadores de varias áreas y maestros dimos con la solución a la cuestión y la dejamos plasmada en este post.

Solución:

Solía ​​diseñar hardware PCI-Express que requería soporte completo de conexión en caliente en hardware y software, y ciertamente es posible, pero es bastante complicado y requiere un amplio soporte de software; el hardware es en realidad bastante simple. Tuve que diseñar el hardware, luego implementar BIOS (UEFI) y soporte de kernel (Linux) para dispositivos PCIe arbitrarios de conexión en caliente a través de fibra y cobre.

Desde el punto de vista del software, hay que recordar que PCIe continúa con el modelo de software PCI, incluyendo los conceptos de direccionamiento de bus, dispositivo y función. Cuando se enumera el bus PCI, se realiza como una búsqueda en amplitud:
Topología de bus PCI de tldp.org

La enumeración de PCIe generalmente se realiza dos veces. Primero, su BIOS (UEFI o de otro tipo) lo hará, para averiguar quién está presente y cuánta memoria necesitan. Luego, estos datos se pueden transmitir al sistema operativo host, que puede tomarlos como están, pero Linux y Windows a menudo también realizan su propio procedimiento de enumeración. En Linux, esto se hace a través del subsistema PCI central, que busca en el bus, aplica cualquier peculiaridad si es necesario en función de la ID del dispositivo y luego carga un controlador que tiene una ID coincidente en su función de sonda. Un dispositivo PCI se identifica mediante una combinación de su ID de proveedor (16 bits, por ejemplo, Intel es 0x8086) y la ID de dispositivo (otros 16 bits); la fuente de Internet más común está aquí: http://pcidatabase.com /.

La parte del software personalizado entra durante este proceso de enumeración y es necesario reservar con anticipación Números de bus PCI y segmentos de memoria para posibles dispositivos futuros; esto a veces se denomina ‘acolchado de autobús‘. Esto evita la necesidad de volver a enumerar el bus en el futuro, lo que a menudo no se puede hacer sin interrumpir el sistema. Un dispositivo PCI tiene BAR (registros de direcciones base) que solicitan al host la cantidad y el tipo (memoria o espacio de E / S) de memoria que necesita el dispositivo; es por eso que ya no necesita puentes como ISA 🙂 Del mismo modo, el kernel de Linux implementa PCIe hotplug a través de pciehp conductor. Windows hace cosas diferentes según la versión: las versiones anteriores (creo que XP) ignoran todo lo que dice el BIOS y hacen su propio sondeo. Creo que las versiones más nuevas son más respetuosas con el ACPI DSDT proporcionado por el firmware del host (BIOS / EFI) e incorporarán esa información.

¡Esto puede parecer bastante complicado y lo es! Pero recuerde que cualquier computadora portátil / dispositivo con una ranura ExpressCard (que implemente PCIe, ya que puede tener ExpressCards solo USB) debe hacer esto, aunque generalmente el relleno es bastante simple: solo un bus. Mi antiguo hardware solía ser un conmutador PCIe que tenía otros 8 dispositivos detrás, por lo que el relleno se volvió algo más complicado.

Desde el punto de vista del hardware, es mucho más fácil. Los pines GND de la tarjeta hacen contacto primero, y colocamos un controlador IC de intercambio en caliente de LTC o similar en la tarjeta para secuenciar la alimentación una vez que se realiza la conexión. En este punto, el ASIC o FPGA integrado comienza su secuencia de encendido y comienza a intentar entrenar el enlace de su enlace PCI Express. Suponiendo que el host admite conexión en caliente y PCI Express SLTCAP/SLTCTRL registro (en especificaciones: Registro de capacidad de ranura PCI Express, Registro de control de ranura PCI Express. También hay un 1 y 2 para esto, suficientes bits para dividir en dos registros). para ese puerto se configuró para indicar que el puerto tiene capacidad de conexión en caliente, el software puede comenzar a enumerar el nuevo dispositivo. El registro de estado de la ranura (SLTSTA, PCI Express Slot Status Register) contiene bits que el dispositivo de destino puede configurar para indicar fallas de energía, pestillo de liberación mecánica y, por supuesto, detección de presencia + cambio de presencia.

Los registros mencionados anteriormente se encuentran en el ‘Espacio de configuración PCI (Express)’, que es una pequeña región del mapa de memoria (4K para PCIe) asignada a cada bdf potencial (bus: dispositivo: función). Los registros reales generalmente residen en el dispositivo periférico.

En el lado del host, podemos usar PRSNT1 # / PRSNT2 # como señales de CC simples que alimentan la habilitación de un interruptor de encendido IC, o ejecutar GPIO en el chipset / PCH para causar un IRQ y activar un SW ‘oye, algo se insertó , ve a buscarlo y configúralo! ‘ rutina.

Esta es una gran cantidad de información que no responde directamente a su pregunta (vea a continuación el resumen rápido), pero es de esperar que le brinde una mejor base para comprender el proceso. Si tiene alguna pregunta sobre partes específicas del proceso, hágamelo saber en un comentario aquí o envíeme un correo electrónico y puedo discutir más + actualizar esta respuesta con esa información.

Para resumir – el dispositivo periférico debe haber sido diseñado teniendo en cuenta el soporte de conexión en caliente desde un punto de vista de hardware. Un host / ranura correctamente diseñado también puede conectarse en caliente, y en una placa base de gama alta esperaría que sea seguro. Sin embargo, el soporte del software para esto es otra cuestión completamente diferente y, lamentablemente, está en deuda con el BIOS que su OEM le ha proporcionado.

En la práctica, utiliza esta tecnología cada vez que extrae / inserta una PCIe ExpressCard de una computadora. Además, los sistemas blade de alto rendimiento (telecomunicaciones o de otro tipo) también utilizan esta tecnología con regularidad.

Comentario final: guarde el PDF que estaba vinculado a la Especificación base, PCI-SIG generalmente cobra dólares por eso 🙂

Siempre que las conexiones de monitoreo del estado de energía hayan sido expuestas al conector por el interruptor ascendente, y la unidad enchufable ha expuesto estos pines y está configurada para usarlos correctamente y (como señala Jippie) el software puede detectar el evento hotplug y responder correctamente, la respuesta es sí.

Generalmente, esta capacidad se usa principalmente en granjas de servidores y centros de datos para conectar en caliente discos PCIe, entre otras cosas; No estoy seguro de que los equipos de consumo sean totalmente compatibles con hotplug (entiendo que es opcional en la especificación).

Tenga en cuenta que proporcionar el hardware necesario para admitir hotplug cuesta dinero (aunque la mayoría se encuentra dentro del punto final PCIe, aún debe configurarse, generalmente a través de una eeprom), generalmente no se ofrecerá en un mercado sensible al precio.

Tenga en cuenta que la actualización dinámica del mapa de direcciones PCI agrega significativo complejidad para el controlador PCI (e); si se inserta un nuevo dispositivo, entonces tiene que ser mapeado en cualquier bus en el que viva, con las nuevas traducciones de dirección asociadas, pero si se quita un dispositivo y luego se reemplaza con algo diferente, hace que el seguimiento de las direcciones de espacio PCI sea bastante complejo.

Sin esta complejidad, el subsistema PCI se escanea una vez (al reiniciar el sistema) y permanece static; no se requiere más esfuerzo.

Aquí está la especificación básica de PCIe v3.0, página 514, sección 6.7 sobre compatibilidad con Hot Plug. Aquí se puede ver un ejemplo de una tarjeta PCIe que admite conexión en caliente, cortesía de iocrest. Se puede ver claramente que la traza del conector más corta se enruta:
Tarjeta controladora PCI-e SATA III (6G) de 2 puertos, chipset Marvell 88SE9120

Sin embargo, en esta carta de Axxon, el rastro más corto se puede ver claramente enrutado al adyacente. Solo a nivel físico, esta tarjeta no admite conexión en caliente:
MAP / 950 1 Tarjeta de E / S de puerto serie RS232 para PCI Express (PCIe)

Se supone que funciona en todo el hardware compatible con PCIe, si todo el hardware del consumidor es realmente compatible es una buena pregunta, ya que no estoy muy familiarizado con las especificaciones de PCIe para conocer los requisitos de prueba e incluso entonces, ¿todos los minoristas verifican la validez de la afirmación? Creo que casi nadie lo hace.

Al igual que todo el asunto de las normas de seguridad. La mitad (<-¿hiperbole?) De las etiquetas EE que tenemos con las que puede reclamar compatibilidad, sin tener que probar todo lo que hace. Dado que las cosas de hotplug no ponen en peligro la vida, no puedo imaginar que la gente sea más estricta al respecto.

Yo, por mi parte, nunca lo he probado y, dado que mi computadora portátil Clevo sacó la computadora de escritorio por completo de mi casa, no voy a intentarlo, ya que el módulo de GPU de mi computadora portátil afirma que no tiene capacidad de conexión en caliente y es demasiado caro sin ser Dave Jones y ganando $$$ por el video de una GPU explosiva.

Tienes la posibilidad recomendar este escrito si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *