mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 10:11:36 +00:00
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: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
4b30b87042
commit
72542d7705
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
|||||||
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)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user