Commit 72542d77 authored by Dave Airlie's avatar Dave Airlie

drm/radeon/kms: ignore unposted GPUs with no BIOS.

If we find a GPU but we can't find its BIOS and it isn't posted,
then ignore it.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 4b30b870
...@@ -3257,10 +3257,8 @@ int r100_init(struct radeon_device *rdev) ...@@ -3257,10 +3257,8 @@ int r100_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
radeon_combios_asic_init(rdev->ddev);
}
/* Set asic errata */ /* Set asic errata */
r100_errata(rdev); r100_errata(rdev);
/* Initialize clocks */ /* Initialize clocks */
......
...@@ -1309,10 +1309,8 @@ int r300_init(struct radeon_device *rdev) ...@@ -1309,10 +1309,8 @@ int r300_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
radeon_combios_asic_init(rdev->ddev);
}
/* Set asic errata */ /* Set asic errata */
r300_errata(rdev); r300_errata(rdev);
/* Initialize clocks */ /* Initialize clocks */
......
...@@ -301,14 +301,9 @@ int r420_init(struct radeon_device *rdev) ...@@ -301,14 +301,9 @@ int r420_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
if (rdev->is_atom_bios) {
atom_asic_init(rdev->mode_info.atom_context);
} else {
radeon_combios_asic_init(rdev->ddev);
}
}
/* Initialize clocks */ /* Initialize clocks */
radeon_get_clock_info(rdev->ddev); radeon_get_clock_info(rdev->ddev);
/* Initialize power management */ /* Initialize power management */
......
...@@ -254,6 +254,9 @@ int r520_init(struct radeon_device *rdev) ...@@ -254,6 +254,9 @@ int r520_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (radeon_boot_test_post_card(rdev) == false)
return -EINVAL;
if (!radeon_card_posted(rdev) && rdev->bios) { if (!radeon_card_posted(rdev) && rdev->bios) {
DRM_INFO("GPU not posted. posting now...\n"); DRM_INFO("GPU not posted. posting now...\n");
atom_asic_init(rdev->mode_info.atom_context); atom_asic_init(rdev->mode_info.atom_context);
......
...@@ -1631,7 +1631,11 @@ int r600_init(struct radeon_device *rdev) ...@@ -1631,7 +1631,11 @@ int r600_init(struct radeon_device *rdev)
if (r) if (r)
return r; return r;
/* Post card if necessary */ /* Post card if necessary */
if (!r600_card_posted(rdev) && rdev->bios) { if (!r600_card_posted(rdev)) {
if (!rdev->bios) {
dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
return -EINVAL;
}
DRM_INFO("GPU not posted. posting now...\n"); DRM_INFO("GPU not posted. posting now...\n");
atom_asic_init(rdev->mode_info.atom_context); atom_asic_init(rdev->mode_info.atom_context);
} }
......
...@@ -979,6 +979,7 @@ extern int radeon_gart_table_vram_pin(struct radeon_device *rdev); ...@@ -979,6 +979,7 @@ extern int radeon_gart_table_vram_pin(struct radeon_device *rdev);
extern int radeon_modeset_init(struct radeon_device *rdev); extern int radeon_modeset_init(struct radeon_device *rdev);
extern void radeon_modeset_fini(struct radeon_device *rdev); extern void radeon_modeset_fini(struct radeon_device *rdev);
extern bool radeon_card_posted(struct radeon_device *rdev); extern bool radeon_card_posted(struct radeon_device *rdev);
extern bool radeon_boot_test_post_card(struct radeon_device *rdev);
extern int radeon_clocks_init(struct radeon_device *rdev); extern int radeon_clocks_init(struct radeon_device *rdev);
extern void radeon_clocks_fini(struct radeon_device *rdev); extern void radeon_clocks_fini(struct radeon_device *rdev);
extern void radeon_scratch_init(struct radeon_device *rdev); extern void radeon_scratch_init(struct radeon_device *rdev);
......
...@@ -208,6 +208,24 @@ bool radeon_card_posted(struct radeon_device *rdev) ...@@ -208,6 +208,24 @@ bool radeon_card_posted(struct radeon_device *rdev)
} }
bool radeon_boot_test_post_card(struct radeon_device *rdev)
{
if (radeon_card_posted(rdev))
return true;
if (rdev->bios) {
DRM_INFO("GPU not posted. posting now...\n");
if (rdev->is_atom_bios)
atom_asic_init(rdev->mode_info.atom_context);
else
radeon_combios_asic_init(rdev->ddev);
return true;
} else {
dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
return false;
}
}
int radeon_dummy_page_init(struct radeon_device *rdev) int radeon_dummy_page_init(struct radeon_device *rdev)
{ {
rdev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO); rdev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO);
......
...@@ -491,10 +491,9 @@ int rs400_init(struct radeon_device *rdev) ...@@ -491,10 +491,9 @@ int rs400_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
radeon_combios_asic_init(rdev->ddev);
}
/* Initialize clocks */ /* Initialize clocks */
radeon_get_clock_info(rdev->ddev); radeon_get_clock_info(rdev->ddev);
/* Get vram informations */ /* Get vram informations */
......
...@@ -482,10 +482,9 @@ int rs600_init(struct radeon_device *rdev) ...@@ -482,10 +482,9 @@ int rs600_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
atom_asic_init(rdev->mode_info.atom_context);
}
/* Initialize clocks */ /* Initialize clocks */
radeon_get_clock_info(rdev->ddev); radeon_get_clock_info(rdev->ddev);
/* Initialize power management */ /* Initialize power management */
......
...@@ -700,10 +700,9 @@ int rs690_init(struct radeon_device *rdev) ...@@ -700,10 +700,9 @@ int rs690_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
atom_asic_init(rdev->mode_info.atom_context);
}
/* Initialize clocks */ /* Initialize clocks */
radeon_get_clock_info(rdev->ddev); radeon_get_clock_info(rdev->ddev);
/* Initialize power management */ /* Initialize power management */
......
...@@ -580,10 +580,8 @@ int rv515_init(struct radeon_device *rdev) ...@@ -580,10 +580,8 @@ int rv515_init(struct radeon_device *rdev)
RREG32(R_0007C0_CP_STAT)); RREG32(R_0007C0_CP_STAT));
} }
/* check if cards are posted or not */ /* check if cards are posted or not */
if (!radeon_card_posted(rdev) && rdev->bios) { if (radeon_boot_test_post_card(rdev) == false)
DRM_INFO("GPU not posted. posting now...\n"); return -EINVAL;
atom_asic_init(rdev->mode_info.atom_context);
}
/* Initialize clocks */ /* Initialize clocks */
radeon_get_clock_info(rdev->ddev); radeon_get_clock_info(rdev->ddev);
/* Initialize power management */ /* Initialize power management */
......
...@@ -975,7 +975,11 @@ int rv770_init(struct radeon_device *rdev) ...@@ -975,7 +975,11 @@ int rv770_init(struct radeon_device *rdev)
if (r) if (r)
return r; return r;
/* Post card if necessary */ /* Post card if necessary */
if (!r600_card_posted(rdev) && rdev->bios) { if (!r600_card_posted(rdev)) {
if (!rdev->bios) {
dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
return -EINVAL;
}
DRM_INFO("GPU not posted. posting now...\n"); DRM_INFO("GPU not posted. posting now...\n");
atom_asic_init(rdev->mode_info.atom_context); atom_asic_init(rdev->mode_info.atom_context);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment