Announcement

Collapse
No announcement yet.

Switch off Sapphire Nitro+ 5700 xt rgb leds (Linux)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #11
    Originally posted by CalcProgrammer1 View Post
    I still can't seem to set modes, as it reads back in register 0x00 but writing to that register has no effect. LumielGR, where did you find that screenshot of TriXX R/E? I would love to see what it's sending!
    Hi, check the issue 134. It worked fine for me when I tried it. Maybe something has changed for the AMD drivers? I can give it a try again, but maybe we can continue the discussion on the gitlab issue.

    Comment


    • #12
      Originally posted by CalcProgrammer1 View Post
      I'm the developer of OpenRGB. I just got an RX580 Nitro+ the other day and have been reverse engineering it on Windows. It is an i2c device, but unlike the screenshot above I was unable to capture calls to the I2C ADL function in API Monitor from either version of TriXX I tried. Fortunately someone had contributed an ADL i2c driver not long ago so I was dumping the controller registers after setting them with TriXX and figured out most of the control scheme. I still can't seem to set modes, as it reads back in register 0x00 but writing to that register has no effect. LumielGR, where did you find that screenshot of TriXX R/E? I would love to see what it's sending!

      As for control on Linux, we need to adapt https://github.com/twifty/aura-gpu (i2c driver for on-board bus of AMD GPUs) to work with Sapphire cards. This should give OpenRGB access to the i2c device.
      You might want to look at:

      The Linux GPU kernel driver already exposes the i2c buses.

      Comment


      • #13
        Originally posted by agd5f View Post

        You might want to look at:

        The Linux GPU kernel driver already exposes the i2c buses.
        I know about the i2c-dev interface. OpenRGB uses it fairly extensively for RGB motherboard, RAM, and GPU lighting control. The issue is that the amdgpu driver doesn't seem to expose a /dev/i2c-X device for the correct bus. ASUS Aura RX580 GPU users have said Twifty's driver works for them but I haven't been able to make it work for me. I noticed in the more recent kernel (5.8-rc4 I think) that I now see i2c hw and aux busses for the GPU that I didn't on my other box (using Debian's testing kernel, probably a few weeks out of date). I know the RGB controller is at address 0x55 and can be found using i2cdetect with READ mode. I tried detecting all of the AMD GPU busses and didn't find it. I can see it using the ADL I2C functionality in Windows (OpenRGB has a subset of i2c-tools functionality built in so it can be used on Windows).

        Comment


        • #14
          Originally posted by CalcProgrammer1 View Post

          I know about the i2c-dev interface. OpenRGB uses it fairly extensively for RGB motherboard, RAM, and GPU lighting control. The issue is that the amdgpu driver doesn't seem to expose a /dev/i2c-X device for the correct bus. ASUS Aura RX580 GPU users have said Twifty's driver works for them but I haven't been able to make it work for me. I noticed in the more recent kernel (5.8-rc4 I think) that I now see i2c hw and aux busses for the GPU that I didn't on my other box (using Debian's testing kernel, probably a few weeks out of date). I know the RGB controller is at address 0x55 and can be found using i2cdetect with READ mode. I tried detecting all of the AMD GPU busses and didn't find it. I can see it using the ADL I2C functionality in Windows (OpenRGB has a subset of i2c-tools functionality built in so it can be used on Windows).
          It might be the smu i2c bus. We only expose that on chips with RAS support since the only thing the driver uses that bus for is the EEPROM for data center features, but you could expose it for other boards.

          Comment


          • #15
            I was digging through the amdgpu code and it looks like SMU is only for Vega and newer? This is a Polaris card.

            Code:
            bool is_support_sw_smu(struct amdgpu_device *adev)
            {
            if (adev->asic_type == CHIP_VEGA20)
            return (amdgpu_dpm == 2) ? true : false;
            else if (adev->asic_type >= CHIP_ARCTURUS) {
            if (amdgpu_sriov_vf(adev)&& !amdgpu_sriov_is_pp_one_vf(adev))
            return false;
            else
            return true;
            } else
            return false;
            }

            Comment


            • #16
              Originally posted by CalcProgrammer1 View Post
              I was digging through the amdgpu code and it looks like SMU is only for Vega and newer? This is a Polaris card.
              All GPUs since R7xx have an SMU. There are just two different frameworks in the driver for handling the interactions with the SMU. Anyway, I think all of the relevant i2c information is in the register headers and vbios i2c tables if you wanted to enable additional i2c buses in the GPU kernel driver if they are not already exposed.

              Comment


              • #17
                I made some progress. I made the following changes to the kernel:

                Code:
                - if (!amdgpu_device_has_dc_support(adev))
                + //if (!amdgpu_device_has_dc_support(adev))
                    amdgpu_atombios_i2c_init(adev);
                which causes all the busses to show up with their addresses (0x90-0x97). The GPU RGB controller is on bus 0x97. I can change the mode by writing to it, but unfortunately I can't seem to set the colors.

                More details here:

                I got this GPU and am trying to figure out how to use this driver to control and reverse engineer it. I figured it would be a simple matter of copying in the correct subvendor ID: {0x1002, 0x67df, ...
                Last edited by CalcProgrammer1; 19 July 2020, 05:19 PM.

                Comment

                Working...
                X