É improvável que o dispositivo funcione novamente, mas pode fazer com que o dispositivo responda o suficiente para responder à remoção. Enquanto o dispositivo estiver ok, salve todos os registradores de configuração pci e, após o ciclo de energia, os restaure. Você pode obter algum caminho para isso, encontrando o slot do controlador
$ lspci | grep SATA
00:1f.2 SATA controller: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)
listando os nomes dos registradores e passando cada um para setpci (você não precisa ser root):
$ setpci --dumpregs |
awk -v slot='00:1f.2' 'NR>1 && !/ E?CAP/{
reg = tolower($NF)
printf "%s=",reg
system("setpci -s " slot " " reg)
}'
Isso gera linhas como
vendor_id=8086
device_id=1e03
command=0407
status=02b0
base_address_0=0000f0b1
base_address_1=0000f0a1
base_address_2=0000f091
base_address_3=0000f081
base_address_4=0000f061
base_address_5=f7c06000
Obviamente, alguns desses registradores são somente leitura, ou possuem somente leitura de bits. A idéia é chamar sudo setpci -s "$slot"
com cada uma dessas linhas, ignorando esse aspecto.
O acima apenas lida com os registradores básicos de configuração pci. No entanto, você precisará salvar e restaurar alguns registros de capacidade também. Isso vai exigir mais esforço, dependendo do registro. Você também precisa ser root para lê-los. Por exemplo,
sudo setpci -s 00:1f.2 CAP_MSI+0.l CAP_MSI+4.l CAP_MSI+8.l
imprimirá os registros de recursos MSI:
00017005
fee0200c
000041b1
Compare isso com os valores mostrados por
sudo lspci -s "$slot" -vvv
...
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0200c Data: 41b1