drm/radeon/kms/atom: Make card_info per device
Make the struct card_info, which is a per struct radeon_device dataset, a struct member of the radeon device instead of a static per kernel module value. This should avoid potential problems with two radeon cards installed in one system. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
d56ef9c8fd
commit
61c4b24b3e
2 changed files with 18 additions and 12 deletions
|
@ -443,20 +443,24 @@ static uint32_t cail_reg_read(struct card_info *info, uint32_t reg)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct card_info atom_card_info = {
|
|
||||||
.dev = NULL,
|
|
||||||
.reg_read = cail_reg_read,
|
|
||||||
.reg_write = cail_reg_write,
|
|
||||||
.mc_read = cail_mc_read,
|
|
||||||
.mc_write = cail_mc_write,
|
|
||||||
.pll_read = cail_pll_read,
|
|
||||||
.pll_write = cail_pll_write,
|
|
||||||
};
|
|
||||||
|
|
||||||
int radeon_atombios_init(struct radeon_device *rdev)
|
int radeon_atombios_init(struct radeon_device *rdev)
|
||||||
{
|
{
|
||||||
atom_card_info.dev = rdev->ddev;
|
struct card_info *atom_card_info =
|
||||||
rdev->mode_info.atom_context = atom_parse(&atom_card_info, rdev->bios);
|
kzalloc(sizeof(struct card_info), GFP_KERNEL);
|
||||||
|
|
||||||
|
if (!atom_card_info)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
rdev->mode_info.atom_card_info = atom_card_info;
|
||||||
|
atom_card_info->dev = rdev->ddev;
|
||||||
|
atom_card_info->reg_read = cail_reg_read;
|
||||||
|
atom_card_info->reg_write = cail_reg_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;
|
||||||
|
atom_card_info->pll_write = cail_pll_write;
|
||||||
|
|
||||||
|
rdev->mode_info.atom_context = atom_parse(atom_card_info, rdev->bios);
|
||||||
radeon_atom_initialize_bios_scratch_regs(rdev->ddev);
|
radeon_atom_initialize_bios_scratch_regs(rdev->ddev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -464,6 +468,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
|
||||||
void radeon_atombios_fini(struct radeon_device *rdev)
|
void radeon_atombios_fini(struct radeon_device *rdev)
|
||||||
{
|
{
|
||||||
kfree(rdev->mode_info.atom_context);
|
kfree(rdev->mode_info.atom_context);
|
||||||
|
kfree(rdev->mode_info.atom_card_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
int radeon_combios_init(struct radeon_device *rdev)
|
int radeon_combios_init(struct radeon_device *rdev)
|
||||||
|
|
|
@ -172,6 +172,7 @@ enum radeon_connector_table {
|
||||||
|
|
||||||
struct radeon_mode_info {
|
struct radeon_mode_info {
|
||||||
struct atom_context *atom_context;
|
struct atom_context *atom_context;
|
||||||
|
struct card_info *atom_card_info;
|
||||||
enum radeon_connector_table connector_table;
|
enum radeon_connector_table connector_table;
|
||||||
bool mode_config_initialized;
|
bool mode_config_initialized;
|
||||||
struct radeon_crtc *crtcs[2];
|
struct radeon_crtc *crtcs[2];
|
||||||
|
|
Loading…
Reference in a new issue