• Worked on the firmware side a bit. Now the microcontroller reads the VSA-100 I2C temperature sensor, internal temperature sensor, and monitors the PGOOD signals of the PSUs.
    If the VSA or MCU temperature are greater than a certain threshold, or if one of the power rails goes down (eg. due to overtemperature) the MCU immediately turns off the power rails and sends an emergency shutdown signal to the laptop. This is tested and works fine.
    Fan is now controlled depending on the VSA-100 temperature. For now, it's just a simple LUT, I'll implement some hysteresis.
    Backlight control was switched back to the MCU, and the scaler backlight control is fed into the MCU. The scaler can override the MCU backlight control only when it wants to turn it off.

    Now for the more interesting part. The PCIe to PCI bridge has 5 GPIOs. Two of them are used for the I2C EEPROM that stores the bridge configuration. 3 GPIOs are left, and I used them to implement a bidirectional communication bus between the bridge and the MCU. These pins are set as RX, TX and CLOCK. On the MCU and host side there are two state machines implemented that are basically a shift register, and package/parse the data.
    On the host side, by reading/writing the PCI configuration registers of the PCIe-PCI bridge, the GPIOs are configured as input/output and their values can be set or read. The MCU also stores configuration persistently in the FRAM.

    Now, this is the first time I write a GUI application, (or a Windows application for that matter ), so the design maybe isn't the prettiest thing, but it works.
    I wrote this in Visual Studio Express C# 2008, which, unexpectedly , was a joy to use.

    It also runs in the system tray when minimized:

    Now backlight control from the OS works, the VSA-100 frequency can be changed, VSA-100 core voltage can be changed from 2.5V to 3.1V, and Framebuffer Size can be changed between 32MB and 64MB without tearing down the laptop and flipping a switch.

    It can also read back the data that's persistently stored on the card, card model and revision, temperature sensors.

  • Amazing!!! Since 20y people here use VSA100 and now you just program a tool that can read the internal sensor? Afaik that has not been done before neither...

  • Thanks for the kind words!

    Tobi sorry to disapoint, I'm not reading the internal VSA temperature. There's an external temperature sensor, right underneath the VSA, in the middle of all the thermal VIAs.

    Edited once, last by sdz (June 21, 2024 at 6:30 AM).

  • Today I worked a bit on this, and I got 1920x1080 working perfectly (without breaking other resolutions)

    This will need further testing on multiple boards (there's only 1 at the moment), as the FPGA is running a bit out of spec at this resolution.

    I looked closer at the display and the image is still shifted to the right (not as much as before) and I started to investigate. It's either the VSA, my FPGA code, or the scaler.

    -tested the scaler, by using the devboard I previously made, connected to a PC and to the laptop display. It looked fine.

    -generated a test image from the FPGA (on the MXM card), in the laptop, it looked fine.

    -plugged a V5 DVI in a PC, connected to the scaler devboard and to the laptop display, offset

    -V5 DVI in a PC, connected to a regular HDMI monitor, and the offset is there.