From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: Jonathan Corbet <corbet@lwn.net>
Cc: linux-kernel@vger.kernel.org, Harald Welte <laforge@gnumonks.org>,
JosephChan@via.com.tw, ScottFang@viatech.com.cn,
Deepak Saxena <dsaxena@laptop.org>,
linux-fbdev-devel@lists.sourceforge.net
Subject: Re: [PATCH 02/16] viafb: use proper pci config API
Date: Thu, 08 Apr 2010 20:42:17 +0200 [thread overview]
Message-ID: <4BBE2389.5010802@gmx.de> (raw)
In-Reply-To: <1270746946-12467-3-git-send-email-corbet@lwn.net>
Hi,
something I am wondering about is whether we can't simply do:
viaparinfo->memsize = pci_resource_len(pdev, 0);
I suppose that this is not possible meaning that the pci len can be
longer than the actual memory but I just wanted to use the moment to
make sure.
Jonathan Corbet schrieb:
> From: Harald Welte <laforge@gnumonks.org>
>
> 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.
>
> Signed-off-by: Harald Welte <HaraldWelte@viatech.com>
> ---
> 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 ea0f8ec..f2e4bda 100644
> --- a/drivers/video/via/hw.c
> +++ b/drivers/video/via/hw.c
> @@ -2542,24 +2542,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++) {
Would it be possible to replace this loop with a lookup table that uses
the fact that we already know which IGP we have?
Yeah, that's not a bug it only feels a bit awkward to do it this way.
> + struct pci_dev *pdev;
> +
> + pdev = pci_get_device(PCI_VENDOR_ID_VIA, via_function3[i],
> + NULL);
> + if (!pdev)
> + continue;
> +
> + DEBUG_MSG(KERN_INFO "Device ID = %x\n", pdev->device);
>
> + switch (pdev->device) {
> + case CLE266_FUNCTION3:
> + case KM400_FUNCTION3:
> + offset = 0xE0;
> + break;
> case CN400_FUNCTION3:
> case CN700_FUNCTION3:
> case CX700_FUNCTION3:
> @@ -2569,21 +2582,22 @@ int viafb_get_fb_size_from_pci(void)
> case P4M900_FUNCTION3:
> case VX800_FUNCTION3:
> case VX855_FUNCTION3:
> - /*case CN750_FUNCTION3: */
> - outl(configid + 0xA0, (unsigned long)0xCF8);
> - FBSize = inl((unsigned long)0xCFC);
> - DeviceFound = true; /* Found device id */
> - break;
> -
> - default:
> + /*case CN750_FUNCTION3: */
> + offset = 0xA0;
> break;
> }
> -
> - if (DeviceFound)
> +
> + if (!offset)
> break;
> +
> + pci_read_config_dword(pdev, offset, &FBSize);
> + pci_dev_put(pdev);
> }
>
> - DEBUG_MSG(KERN_INFO "Device ID = %lx\n", deviceid);
> + if (!offset) {
> + printk(KERN_ERR "cannot determine framebuffer size\n");
> + return -EIO;
This function was not designed to return an error (memsize is not
checked). Either return a default value (let's say 8MB) or add a check
for memsize.
> + }
>
> FBSize = FBSize & 0x00007000;
> DEBUG_MSG(KERN_INFO "FB Size = %x\n", FBSize);
> diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h
> index b874d95..f67a56a 100644
> --- a/drivers/video/via/hw.h
> +++ b/drivers/video/via/hw.h
> @@ -822,8 +822,8 @@ struct iga2_crtc_timing {
> };
>
> /* device ID */
> -#define CLE266 0x3123
> -#define KM400 0x3205
> +#define CLE266_FUNCTION3 0x3123
> +#define KM400_FUNCTION3 0x3205
> #define CN400_FUNCTION2 0x2259
> #define CN400_FUNCTION3 0x3259
> /* support VT3314 chipset */
Thanks,
Florian Tobias Schandinat
next prev parent reply other threads:[~2010-04-08 18:42 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-08 17:15 [RFC] Initial OLPC Viafb merge Jonathan Corbet
2010-04-08 17:15 ` [PATCH 01/16] [FB] viafb: Fix various resource leaks during module_init() Jonathan Corbet
2010-04-08 18:22 ` Florian Tobias Schandinat
2010-04-09 19:31 ` Jonathan Corbet
2010-04-08 17:15 ` [PATCH 02/16] viafb: use proper pci config API Jonathan Corbet
2010-04-08 18:42 ` Florian Tobias Schandinat [this message]
2010-04-09 19:46 ` Jonathan Corbet
2010-04-10 6:41 ` Harald Welte
2010-04-08 17:15 ` [PATCH 03/16] viafb: Unmap the frame buffer on initialization error Jonathan Corbet
2010-04-08 18:55 ` Florian Tobias Schandinat
2010-04-08 17:15 ` [PATCH 04/16] viafb: Retain GEMODE reserved bits Jonathan Corbet
2010-04-09 3:07 ` Florian Tobias Schandinat
2010-04-09 19:59 ` Jonathan Corbet
2010-04-09 20:23 ` Florian Tobias Schandinat
2010-04-09 20:30 ` Jonathan Corbet
2010-04-08 17:15 ` [PATCH 05/16] viafb: Determine type of 2D engine and store it in chip_info Jonathan Corbet
2010-04-09 3:20 ` Florian Tobias Schandinat
2010-04-09 20:11 ` Jonathan Corbet
2010-04-09 20:34 ` Florian Tobias Schandinat
2010-04-18 17:34 ` Jonathan Corbet
2010-04-18 18:00 ` Harald Welte
2010-04-18 18:05 ` Florian Tobias Schandinat
2010-04-08 17:15 ` [PATCH 06/16] viafb: complete support for VX800/VX855 accelerated framebuffer Jonathan Corbet
2010-04-09 4:21 ` Florian Tobias Schandinat
2010-04-09 20:18 ` Jonathan Corbet
2010-04-08 17:15 ` [PATCH 07/16] viafb: Add 1200x900 DCON/LCD panel modes for OLPC XO-1.5 Jonathan Corbet
2010-04-09 21:27 ` Florian Tobias Schandinat
2010-04-18 17:39 ` Jonathan Corbet
2010-04-18 18:24 ` Florian Tobias Schandinat
2010-04-08 17:15 ` [PATCH 08/16] viafb: Do not probe for LVDS/TMDS on " Jonathan Corbet
2010-04-09 21:40 ` Florian Tobias Schandinat
2010-04-10 0:19 ` Jonathan Corbet
2010-04-10 0:42 ` Florian Tobias Schandinat
2010-04-10 0:55 ` Jonathan Corbet
2010-04-10 6:34 ` Harald Welte
2010-04-08 17:15 ` [PATCH 09/16] viafb: rework the I2C support in the VIA framebuffer driver Jonathan Corbet
2010-04-09 22:07 ` Florian Tobias Schandinat
2010-04-08 17:15 ` [PATCH 10/16] suppress verbose debug messages: change printk() to DEBUG_MSG() Jonathan Corbet
2010-04-09 22:09 ` Florian Tobias Schandinat
2010-04-08 17:15 ` [PATCH 11/16] Minimal support for viafb suspend/resume Jonathan Corbet
2010-04-08 17:15 ` [PATCH 12/16] fix register save count, so it matches the restore count Jonathan Corbet
2010-04-08 17:15 ` [PATCH 13/16] VIAFB: Update suspend/resume to selectively restore registers Jonathan Corbet
2010-04-08 17:15 ` [PATCH 14/16] Remove cursor restore hack in viafb Jonathan Corbet
2010-04-08 17:15 ` [PATCH 15/16] viafb: rework suspend/resume Jonathan Corbet
2010-04-08 17:15 ` [PATCH 16/16] viafb: Only suspend/resume on VX855 Jonathan Corbet
2010-04-09 5:43 ` [RFC] Initial OLPC Viafb merge Florian Tobias Schandinat
2010-04-09 18:46 ` Jonathan Corbet
2010-04-09 23:32 ` Florian Tobias Schandinat
2010-04-10 0:27 ` Jonathan Corbet
2010-04-10 1:02 ` Florian Tobias Schandinat
2010-04-10 8:52 ` Bruno Prémont
2010-04-13 3:03 ` Florian Tobias Schandinat
2010-04-21 20:37 ` Jonathan Corbet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BBE2389.5010802@gmx.de \
--to=florianschandinat@gmx.de \
--cc=JosephChan@via.com.tw \
--cc=ScottFang@viatech.com.cn \
--cc=corbet@lwn.net \
--cc=dsaxena@laptop.org \
--cc=laforge@gnumonks.org \
--cc=linux-fbdev-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.