Re: [PATCH 2/2] viafb: use proper pci config API
From: Krzysztof Helt <hidden>
Date: 2009-05-19 21:18:28
On Tue, 19 May 2009 16:35:34 +0800 Harald Welte [off-list ref] wrote:
quoted hunk ↗ jump to hunk
This patch alters viafb to use the proper Linux in-kernel API to access PCI configuration space, rather than poking at I/O ports by itself. It also removes a minor inconsistency with naming of constants for the PCI device ID of the FUNCTION3 devices. Signed-off-by: Harald Welte <redacted> --- drivers/video/via/hw.c | 64 +++++++++++++++++++++++++++++------------------ drivers/video/via/hw.h | 4 +- 2 files changed, 41 insertions(+), 27 deletions(-)diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 6306c88..40b7c0c 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c@@ -2599,24 +2599,37 @@ static void disable_second_display_channel(void) viafb_write_reg_mask(CR6A, VIACR, BIT6, BIT6); } +static u_int16_t via_function3[] = { + CLE266_FUNCTION3, KM400_FUNCTION3, CN400_FUNCTION3, CN700_FUNCTION3, + CX700_FUNCTION3, KM800_FUNCTION3, KM890_FUNCTION3, P4M890_FUNCTION3, + P4M900_FUNCTION3, VX800_FUNCTION3, VX855_FUNCTION3, +}; + +/* Get the BIOS-configured framebuffer size from PCI configuration space + * of function 3 in the respective chipset */ int viafb_get_fb_size_from_pci(void) { - unsigned long configid, deviceid, FBSize = 0; - int VideoMemSize; - int DeviceFound = false; - - for (configid = 0x80000000; configid < 0x80010800; configid += 0x100) { - outl(configid, (unsigned long)0xCF8); - deviceid = (inl((unsigned long)0xCFC) >> 16) & 0xffff; - - switch (deviceid) { - case CLE266: - case KM400: - outl(configid + 0xE0, (unsigned long)0xCF8); - FBSize = inl((unsigned long)0xCFC); - DeviceFound = true; /* Found device id */ - break; + int i; + u_int8_t offset = 0; + u_int32_t FBSize; + u_int32_t VideoMemSize; + + /* search for the "FUNCTION3" device in this chipset */ + for (i = 0; i < ARRAY_SIZE(via_function3); i++) { + struct pci_dev *pdev; + + pdev = pci_get_device(PCI_VENDOR_ID_VIA, via_function3[i], + NULL);
Can you pass the pdev pointer from the probe function here and skip the whole searching of the PCI device? Regards, Krzysztof ---------------------------------------------------------------------- Audi kilka tysiecy zlotych taniej? Przebieraj wsrod tysiecy ogloszen! Sprawdz: http://link.interia.pl/f216f ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects