-
Hacer que la tarjeta Inspur X540-AT2 china sea detectada por macOS
Si tenemos una tarjeta Inspur X540-AT2 comprada en AliExpress, de esas que vienen en PCIe x8 + x1 (aunque el x1 seguramente venga cortado), deberemos saber que podemos hacer que funcione en macOS. El truco es utilizar los kexts de SmallTree, que son oficialmente compatibles con esta tarjeta pero, para que funcionen, la tarjeta debe tener un PciID subsystem correcto. Eso sí, en vez de andar metiendo kexts extra para «fakear» el PciID, lo vamos a hacer sobre la propia EEPROM de la tarjeta. Entonces:
Para determinar el PciID de la tarjeta Inspur que hemos comprado, ejecutamos:
lspci -nnvv -d ::200 | grep -E "X540-AT2|nspur"
Podemos ver la siguiente salida de terminal:
01:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 [8086:1528] (rev 01) Subsystem: Inspur Electronic Information Industry Co., Ltd. 10G base-T DP EP102Ti3A Adapter [1bd4:0034] 01:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 [8086:1528] (rev 01) Subsystem: Inspur Electronic Information Industry Co., Ltd. 10G base-T DP EP102Ti3A Adapter [1bd4:0034]
En ese texto, podemos observar que el PciID correspondiente a nuestra tarjeta es el [8086:1528] con subsistema [1bd4:0034]. Para que el kext de SmallTree cargue correctamente, el subsistema debería ser, en este caso, [1bd4:000a], por lo que deberemos cambiarlo.
Entonces, antes de tocar nada, identificamos cada uno de los dos puertos (en mi caso eth1 y eth2) y hacemos una copia de seguridad de la EEPROM, ejecutando como root:
ethtool -e eth1 raw on > /home/usuariox/eth1.bin ethtool -e eth2 raw on > /home/usuariox/eth2.bin
Ahora vamos a usar ethtool para buscar en que offset de la EEPROM se encuentra hardcodeado el subsistema, sabiendo que siempre será de atrás hacia adelante, en pares de dos. Por ejemplo, para el subsistema 1bd4:0034 deberíamos buscar 34 00 d4 1b. Entonces, podemos ejecutar como root:
ethtool -e eth1 | grep -E '34 00|d4 1b'
…lo que nos da una salida como esta:
0x0480: 3b 3f ba 81 07 00 1f 00 14 00 00 00 03 4e 34 00 0x0490: d4 1b a6 10 00 00 f7 17 15 15 35 00 64 6e 01 00
Que vemos ahí? pues que en el offset 0x0480 encontramos 0034 (como 34 00) e, inmediatamente después, aunque en otro offset, encontramos 1b d4 (como d4 1b).
Tuvimos suerte de que nos funcionara el grep porque pedimos que grepeara en dos líneas (-E ‘x|x’) y casualmente encontramos ambas combinaciones, una en cada línea. Si no fuera así, tendríamos que adaptar el grep para conseguir lo mismo. El caso es que sabemos exactamente en que offset de cada EEPROM está hardcodeado el subsistema de cada puerto, por lo que podemos comenzar a modificarlo.
En hexadecimal se cuenta 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f. Sabiendo eso vemos que en el offset 0x0480 debemos modificar la posición e (que es donde se encuentra 34) y la posición f (que es donde se encuentra 00), y que debemos reemplazarla ambas por 0a y 00, respecticamente (que sería 000a, al revés). Pero, para realizar dicha modificación, primero deberemos saber el parámetro magic, que no es otra cosa que el 0x<device id><vendor id> principal de la tarjeta, en este caso 0x15288086 [8086:1528, al revés]. Entonces, para realizar los cambios, ejecutamos:
ethtool -E eth1 magic 0x15288086 offset 0x048e value 0x0a ethtool -E eth1 magic 0x15288086 offset 0x048f value 0x00 ethtool -E eth2 magic 0x15288086 offset 0x048e value 0x0a ethtool -E eth2 magic 0x15288086 offset 0x048f value 0x00
Al reiniciar el sistema, ya deberían poder cargarse los drivers de SmallTree.
HACERLA RECONOCIBLE EN UN MAC PRO ORIGINAL
Para que la tarjeta sea reconocida en un MacPro3,1 de 2008 (o cualquier otra placa base con puertos PCIE 2.0) además de cambiar la EEPROM, debemos:
- Serruchar/cortar (o aislar con cinta) el PCIe x1 del final de la propia tarjeta. Si es que todavía lo tiene.
- Soldar entre sí los dos últimos pines del PCIe x8. Estos pines son el Bpin48 (PRSNT-2) y el Bpin49 (Tierra), que se encuentran en el lado B de la tarjeta, que es el lado que tiene el chipset y el disipador. El Bpin47 también es masa. Por otro lado el Apin1 (PRSNT-1) ya está «jumpeado», así que no hace falta. Esto hay que hacerlo porque la tarjeta no tiene el indicador de longitud, por el tema de que tenía también una parte de x1 al final. Aunque lo normal es que si la compramos en AliEpress, se lo hayan cortado.
- Conectarla al slot 1 o 2 del MacPro, que son los dos slots compatibles con x8.
Si instalamos Linux en el MacPro, la tarjeta funcionara a 5Gbits en los slots 1 y 2, que son PCIe 2.0 x8. Y funcionará a 2,5Gbits en los slots 3 y 4, que son PCIe 2.0 x4