On Wed, Jul 7, 2010 at 12:29 AM, Dave Airlie <airlied at gmail.com> wrote:
>> ?int radeon_atombios_init(struct radeon_device *rdev)
>> ?{
>> ? ? ? ?struct card_info *atom_card_info =
>> @@ -427,6 +443,9 @@ int radeon_atombios_init(struct radeon_device *rdev)
>> ? ? ? ?atom_card_info->dev = rdev->ddev;
>> ? ? ? ?atom_card_info->reg_read = cail_reg_read;
>> ? ? ? ?atom_card_info->reg_write = cail_reg_write;
>> + ? ? ? /* needed for iio ops */
>> + ? ? ? atom_card_info->ioreg_read = cail_ioreg_read;
>> + ? ? ? atom_card_info->ioreg_write = cail_ioreg_write;
>> ? ? ? ?atom_card_info->mc_read = cail_mc_read;
>> ? ? ? ?atom_card_info->mc_write = cail_mc_write;
>> ? ? ? ?atom_card_info->pll_read = cail_pll_read;
>> @@ -659,6 +678,19 @@ int radeon_device_init(struct radeon_device *rdev,
>> ? ? ? ?DRM_INFO("register mmio base: 0x%08X\n", (uint32_t)rdev->rmmio_base);
>> ? ? ? ?DRM_INFO("register mmio size: %u\n", (unsigned)rdev->rmmio_size);
>>
>> + ? ? ? /* io port mapping */
>> + ? ? ? if (rdev->family >= CHIP_RV770) {
>> + ? ? ? ? ? ? ? rdev->rio_mem_size = pci_resource_len(rdev->pdev, 4);
>> + ? ? ? ? ? ? ? rdev->rio_mem = pci_iomap(rdev->pdev, 4, rdev->rio_mem_size);
>> + ? ? ? } else {
>> + ? ? ? ? ? ? ? rdev->rio_mem_size = pci_resource_len(rdev->pdev, 1);
>> + ? ? ? ? ? ? ? rdev->rio_mem = pci_iomap(rdev->pdev, 1, rdev->rio_mem_size);
>> + ? ? ? }
>> + ? ? ? if (rdev->rio_mem == NULL) {
>> + ? ? ? ? ? ? ? iounmap(rdev->rmmio);
>> + ? ? ? ? ? ? ? return -EIO;
>> + ? ? ? }
>> +
>
> This is all bad, my main r600 stopped working after this, from my
> quick boot test
> r100->r300 are all port 1, discrete r480 and upwards (not sure about
> rv410) is port 4,
> IGP, rs480 is port 1, rs690 is port 4, rs780 is port 1. We need to
> either guarantee these work
> or fallback gracefully instead of failing to load the driver.
>

The attached patch should handle it gracefully.

Alex

> Dave.
>
>> ? ? ? ?/* if we have > 1 VGA cards, then disable the radeon VGA resources */
>> ? ? ? ?/* this will fail for cards that aren't VGA class devices, just
>> ? ? ? ? * ignore it */
>> @@ -701,6 +733,8 @@ void radeon_device_fini(struct radeon_device *rdev)
>> ? ? ? ?destroy_workqueue(rdev->wq);
>> ? ? ? ?vga_switcheroo_unregister_client(rdev->pdev);
>> ? ? ? ?vga_client_register(rdev->pdev, NULL, NULL, NULL);
>> + ? ? ? pci_iounmap(rdev->pdev, rdev->rio_mem);
>> + ? ? ? rdev->rio_mem = NULL;
>> ? ? ? ?iounmap(rdev->rmmio);
>> ? ? ? ?rdev->rmmio = NULL;
>> ?}
>> --
>> 1.7.0.1
>>
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-drm-radeon-kms-ioport-fixes.patch
Type: text/x-patch
Size: 2766 bytes
Desc: not available
URL: 
<http://lists.freedesktop.org/archives/dri-devel/attachments/20100707/e3c61214/attachment.bin>

Reply via email to