0 Replies Latest reply on Oct 30, 2008 11:42 AM by bill03055

    GPIO Control Using WinDDK Genport.sys Driver on (AMD) ATI SB600 SMBus Controller

    bill03055
      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?