Having trouble getting Genport.sys to work on SB600 SMBus Contoller
I am trying to gain control over a GPIO port on an (AMD) ATI IXP SB600 SMBus controller (PCI VendorID: 1002 DevID: 4385)
using the Genport.sys, Gpdwrite.exe, and Gpdread.exe utilities supplied in the Windows Driver Develpment Kit (2008 edition
No. 6001.18001). I have successfully built the genport driver and the read/write utilities according to the instructions
included with the source code, and by following the instructions for installing the driver on Windows XP using the "Add
Hardware" wizard and the Genport.inf file (with the appropriately modified Logical Configuration, see below), the driver
appears to have been installed, and in Device Manager is assigned the use of I/O ports 0xB80 and 0xB81, in accordance with
the AMD SB600 Register Reference Manual, which identifies the SMBus controller as Bus:0, Device:20, Function:0, and the GPIO3
I/O port that I am interested in as being controlled through register 0x80.
************************ fragment from Genport.inf:
[PortIO.LC0]
ConfigPriority=DESIRED
;IOConfig=300-303(3ff: ; 10 bit decode ranging from 300 - 303
IOConfig=b80-b81(fff: ; 16 bit decode ranging from b80 - b81
**************************
AMD supplies a utility called ATI Register Explorer which gives you the ability to "peek and poke" values on the various PCI
devices present on the system (at least the AMD ones). Using this utility I can successfully control the behavior of the
GPIO3 port on the 4385 (SMBus Controller) by poking the words "0A70" and "0A78" to port 0x80, but when I do the same using
the Gpdwrite.exe utility, the GPIO3 port does not respond. The command line I use is:
gpdwrite -w 0 a78
and the command line response is:
Wrote data a78 to port 0
but the GPIO3 port shows no sign of change. (I have an LED connected, which does respond when I use the AMD Register Explorer
utility.)
Other utilities I have run corroborate the identity, port assignments, and values of the hardware, and the command line
responses seem to indicate that I am close, but something is just not working. Does anyone have any suggestions about what
might be wrong or missing in my approach?