help with setpci "no devices at"
Hi Everyone
Thanks again to Bjorn for helping me in the thread "updating firmware with setpci"
I have started a new thread as it's more specific than the previous one and might be more valuable this way in the archives.
I replaced a PCI chip on one card I am trying to copy the good PCI configuration space settings from another card, as-is they are very different and the repaired card is failing.
I found a perfect little awk script here to generate setpci commands from lspci -xxx :
https://gist.github.com/jlopez-git/4594728
I ended up with setpci complaining about missing a width. I found this thread:
https://access.redhat.com/site/solutions/45240
It looks like older versions of the tool did not require widths to be specified. The awk script may be a bit dated.
I changed XX= to XX.b=
setpci -sD 04:01.0 00.b=813010e8
based on:
http://www.tutorialspoint.com/unix_commands/setpci.htm
which gave this example:
setpci -s 13:8.4 40.b=50:d0,04:0c,ff
but now I have another error:
setpci: Warning: No devices selected for "04:01.0".
setpci: Invalid width "0".
lspci shows the device at:
04:01.0 Unassigned class [ff00]: Device a101:81ff
The example showed the b near the register address but the "invalid width 0" error has me wondering if it's supposed to go somewhere else or I should be using a different width flag.
Could someone point me in the right direction ?
Thanks for reading-Patrick
Quoted 31 lines · Patrick
Hi Everyone
Thanks again to Bjorn for helping me in the thread "updating firmware with setpci"
I have started a new thread as it's more specific than the previous one and might be more valuable this way in the archives.
I replaced a PCI chip on one card I am trying to copy the good PCI configuration space settings from another card, as-is they are very different and the repaired card is failing.
I found a perfect little awk script here to generate setpci commands from lspci -xxx :
https://gist.github.com/jlopez-git/4594728
I ended up with setpci complaining about missing a width. I found this thread:
https://access.redhat.com/site/solutions/45240It looks like older versions of the tool did not require widths to be specified. The awk script may be a bit dated.
I changed XX= to XX.b=
setpci -sD 04:01.0 00.b=813010e8based on:
http://www.tutorialspoint.com/unix_commands/setpci.htm
which gave this example:
setpci -s 13:8.4 40.b=50:d0,04:0c,ffbut now I have another error:
setpci: Warning: No devices selected for "04:01.0".
setpci: Invalid width "0".
Quoted 10 lines
lspci shows the device at:
04:01.0 Unassigned class [ff00]: Device a101:81ffThe example showed the b near the register address but the "invalid width 0" error has me wondering if it's supposed to go somewhere else or I should be using a different width flag.
Could someone point me in the right direction ?
Thanks for reading-Patrick
I am not sure if it is good etiquette to answer your own post but I wanted to mention that I found two of my mistakes.
I specified B but I was writing 4 bytes. I thought I better use the -D flag to test-run things but that doesn't look right in this situation.
setpci -s 04:01.0 0x00.L=813010e8
Ran without errors but the changes were not reflected in the card's configuration space. lspci -xxx gave the same results before and after. I have run all commands as root.
If anyone can point out another mistake I have made that would be so great.
Quoted 58 lines · Patrick
Quoted 41 lines · Patrick
Hi Everyone
Thanks again to Bjorn for helping me in the thread "updating firmware with setpci"
I have started a new thread as it's more specific than the previous one and might be more valuable this way in the archives.
I replaced a PCI chip on one card I am trying to copy the good PCI configuration space settings from another card, as-is they are very different and the repaired card is failing.
I found a perfect little awk script here to generate setpci commands from lspci -xxx :
https://gist.github.com/jlopez-git/4594728
I ended up with setpci complaining about missing a width. I found this thread:
https://access.redhat.com/site/solutions/45240It looks like older versions of the tool did not require widths to be specified. The awk script may be a bit dated.
I changed XX= to XX.b=
setpci -sD 04:01.0 00.b=813010e8based on:
http://www.tutorialspoint.com/unix_commands/setpci.htm
which gave this example:
setpci -s 13:8.4 40.b=50:d0,04:0c,ffbut now I have another error:
setpci: Warning: No devices selected for "04:01.0".
setpci: Invalid width "0".lspci shows the device at:
04:01.0 Unassigned class [ff00]: Device a101:81ffQuoted 9 lines
The example showed the b near the register address but the "invalid width 0" error has me wondering if it's supposed to go somewhere else or I should be using a different width flag.
Could someone point me in the right direction ?
Thanks for reading-Patrick
I am not sure if it is good etiquette to answer your own post but I wanted to mention that I found two of my mistakes.
I specified B but I was writing 4 bytes. I thought I better use the -D flag to test-run things but that doesn't look right in this situation.
Quoted 7 lines
setpci -s 04:01.0 0x00.L=813010e8
Ran without errors but the changes were not reflected in the card's configuration space. lspci -xxx gave the same results before and after. I have run all commands as root.
If anyone can point out another mistake I have made that would be so great.
I think the premise of being able to "update" a device via PCI config space is flawed. Much of config space is read-only, such as the vendor and device IDs that you're trying to change. The bits that can be changed are not persistent across boots. Some devices may have sequences where vendor capability fields can be used to access some sort of programming mode of the card, but they would be very device specific. You cannot simply write a new value to any given register and expect it to change and be persistent. Thanks,
Alex