qemu/ati-vga-make-i2c-register-and-bits-confi.patch
Bruce Rogers 0f796dd004 Accepting request 730437 from Virtualization:Staging
Update to v4.1.0. Also includes other major packaging changes as follows:
There is a new package maintenance workflow - see README.PACKAGING for details.
The sibling packages qemu-linux-user and qemu-testsuite are now created with the Build Service's MultiBuild feature. This also necessitates combining the qemu-linux-user changelog content back into qemu's. Luckily the delta there is quite small. Note that the qemu spec file is now that much busier, but added section markers should help reduce the confusion. Also qemu is being enabled for RISCV host compatibility, so some changes are related to that as well.

OBS-URL: https://build.opensuse.org/request/show/730437
OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=487
2019-09-12 15:54:03 +00:00

96 lines
2.7 KiB
Diff

From: Gerd Hoffmann <kraxel@redhat.com>
Date: Mon, 24 Jun 2019 12:08:32 +0200
Subject: ati-vga: make i2c register and bits configurable
Git-commit: ae9a9796ec395e66ff0ed6d4484ea40ce85c0300
Prepare to support other ati cards. Also log access mode and whenever
we got a valid edid block.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
vgasrc/atiext.c | 34 +++++++++++++++++++++++++++-------
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git a/roms/seabios/vgasrc/atiext.c b/roms/seabios/vgasrc/atiext.c
index a24b980638a9562daaa37fe236b4..901e82d013837f54f4db292628d1 100644
--- a/roms/seabios/vgasrc/atiext.c
+++ b/roms/seabios/vgasrc/atiext.c
@@ -43,6 +43,11 @@
#define CRT_CRTC_ON 0x00008000
static u32 ati_io_addr VAR16 = 0;
+static u32 ati_i2c_reg VAR16;
+static u32 ati_i2c_bit_scl_out VAR16;
+static u32 ati_i2c_bit_sda_out VAR16;
+static u32 ati_i2c_bit_sda_in VAR16;
+
int
is_ati_mode(struct vgamode_s *vmode_g)
@@ -206,18 +211,18 @@ ati_i2c_set_scl_sda(int scl, int sda)
u32 data = 0;
if (!scl)
- data |= (1 << 17);
+ data |= (1 << GET_GLOBAL(ati_i2c_bit_scl_out));
if (!sda)
- data |= (1 << 16);
- ati_write(GPIO_DVI_DDC, data);
+ data |= (1 << GET_GLOBAL(ati_i2c_bit_sda_out));
+ ati_write(GET_GLOBAL(ati_i2c_reg), data);
}
static int
ati_i2c_get_sda(void)
{
- u32 data = ati_read(GPIO_DVI_DDC);
+ u32 data = ati_read(GET_GLOBAL(ati_i2c_reg));
- return data & (1 << 8) ? 1 : 0;
+ return data & (1 << GET_GLOBAL(ati_i2c_bit_sda_in)) ? 1 : 0;
}
static void ati_i2c_start(void)
@@ -275,7 +280,6 @@ static void ati_i2c_edid(void)
u8 byte;
int i;
- dprintf(1, "ati: reading edid blob\n");
ati_i2c_start();
ati_i2c_send_byte(0x50 << 1 | 1);
ati_i2c_ack();
@@ -287,6 +291,22 @@ static void ati_i2c_edid(void)
ati_i2c_stop();
}
+static void ati_i2c_edid_radeon(void)
+{
+ int valid;
+
+ SET_VGA(ati_i2c_bit_scl_out, 17);
+ SET_VGA(ati_i2c_bit_sda_out, 16);
+ SET_VGA(ati_i2c_bit_sda_in, 8);
+
+ dprintf(1, "ati: reading edid blob (radeon dvi) ... \n");
+ SET_VGA(ati_i2c_reg, GPIO_DVI_DDC);
+ ati_i2c_edid();
+ valid = (GET_GLOBAL(VBE_edid[0]) == 0x00 &&
+ GET_GLOBAL(VBE_edid[1]) == 0xff);
+ dprintf(1, "ati: ... %s\n", valid ? "good" : "invalid");
+}
+
/****************************************************************
* init
****************************************************************/
@@ -351,7 +371,7 @@ ati_setup(void)
u16 device = pci_config_readw(bdf, PCI_DEVICE_ID);
switch (device) {
case 0x5159:
- ati_i2c_edid();
+ ati_i2c_edid_radeon();
break;
}