2016-08-03 23:42 GMT-04:00 Emily Deng <Emily.Deng at amd.com>: > For virtual display feature, if user set the option "amdgpu.virtual_display=1" > when load amdgpu.ko. Then need to set the ip_blocks with virtual display ip > blocks. And when enable virtual display, the amdgpu_dal need to be set to zero. > > Signed-off-by: Emily Deng <Emily.Deng at amd.com> For the old patches that were not replaced with new ones: Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 + > drivers/gpu/drm/amd/amdgpu/cik.c | 104 ++++++++++++++-------- > drivers/gpu/drm/amd/amdgpu/vi.c | 134 ++++++++++++++++++----------- > 3 files changed, 153 insertions(+), 87 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 2d7eb34..008e6a0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -1186,6 +1186,8 @@ static int amdgpu_early_init(struct amdgpu_device *adev) > { > int i, r; > > + DRM_INFO("virtual display enabled:%d\n", amdgpu_virtual_display); > + > switch (adev->asic_type) { > case CHIP_TOPAZ: > case CHIP_TONGA: > diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c > index d0442a9..4b48bcd 100644 > --- a/drivers/gpu/drm/amd/amdgpu/cik.c > +++ b/drivers/gpu/drm/amd/amdgpu/cik.c > @@ -2464,55 +2464,85 @@ static const struct amdgpu_ip_block_version kaveri_ip_blocks_vd[] = > > int cik_set_ip_blocks(struct amdgpu_device *adev) > { > - switch (adev->asic_type) { > - case CHIP_BONAIRE: > + if (amdgpu_virtual_display) { > + amdgpu_dal = 0; > + adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE; > + switch (adev->asic_type) { > + case CHIP_BONAIRE: > + adev->ip_blocks = bonaire_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_vd); > + break; > + case CHIP_HAWAII: > + adev->ip_blocks = hawaii_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_vd); > + break; > + case CHIP_KAVERI: > + adev->ip_blocks = kaveri_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks_vd); > + break; > + case CHIP_KABINI: > + adev->ip_blocks = kabini_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks_vd); > + break; > + case CHIP_MULLINS: > + adev->ip_blocks = mullins_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks_vd); > + break; > + default: > + /* FIXME: not supported yet */ > + return -EINVAL; > + } > + } else { > + switch (adev->asic_type) { > + case CHIP_BONAIRE: > #if defined(CONFIG_DRM_AMD_DAL_DCE8_0) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = bonaire_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = bonaire_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_dal); > + } else { > + adev->ip_blocks = bonaire_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks); > + } > +#else > adev->ip_blocks = bonaire_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks); > - } > -#else > - adev->ip_blocks = bonaire_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks); > #endif > - break; > - case CHIP_HAWAII: > + break; > + case CHIP_HAWAII: > #if defined(CONFIG_DRM_AMD_DAL_DCE8_0) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = hawaii_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = hawaii_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_dal); > + } else { > + adev->ip_blocks = hawaii_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks); > + } > +#else > adev->ip_blocks = hawaii_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks); > - } > -#else > - adev->ip_blocks = hawaii_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks); > #endif > - break; > - case CHIP_KAVERI: > - adev->ip_blocks = kaveri_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks); > - break; > - case CHIP_KABINI: > - adev->ip_blocks = kabini_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks); > - break; > - case CHIP_MULLINS: > - adev->ip_blocks = mullins_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks); > - break; > - default: > - /* FIXME: not supported yet */ > - return -EINVAL; > + break; > + case CHIP_KAVERI: > + adev->ip_blocks = kaveri_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks); > + break; > + case CHIP_KABINI: > + adev->ip_blocks = kabini_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks); > + break; > + case CHIP_MULLINS: > + adev->ip_blocks = mullins_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks); > + break; > + default: > + /* FIXME: not supported yet */ > + return -EINVAL; > + } > } > - > return 0; > } > > + > static const struct amdgpu_asic_funcs cik_asic_funcs = > { > .read_disabled_bios = &cik_read_disabled_bios, > diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c > index eecc92f..432a01c 100644 > --- a/drivers/gpu/drm/amd/amdgpu/vi.c > +++ b/drivers/gpu/drm/amd/amdgpu/vi.c > @@ -1676,77 +1676,111 @@ static const struct amdgpu_ip_block_version fiji_ip_blocks_dal[] = > > int vi_set_ip_blocks(struct amdgpu_device *adev) > { > - switch (adev->asic_type) { > - case CHIP_TOPAZ: > - adev->ip_blocks = topaz_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); > - break; > - case CHIP_FIJI: > + if (amdgpu_virtual_display) { > + amdgpu_dal = 0; > + adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE; > + switch (adev->asic_type) { > + case CHIP_TOPAZ: > + adev->ip_blocks = topaz_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); > + break; > + case CHIP_FIJI: > + adev->ip_blocks = fiji_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_vd); > + break; > + case CHIP_TONGA: > + adev->ip_blocks = tonga_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_vd); > + break; > + case CHIP_POLARIS11: > + case CHIP_POLARIS10: > + adev->ip_blocks = polaris11_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_vd); > + break; > + > + case CHIP_CARRIZO: > + case CHIP_STONEY: > + adev->ip_blocks = cz_ip_blocks_vd; > + adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_vd); > + break; > + default: > + /* FIXME: not supported yet */ > + return -EINVAL; > + } > + } else { > + switch (adev->asic_type) { > + case CHIP_TOPAZ: > + adev->ip_blocks = topaz_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); > + break; > + case CHIP_FIJI: > #if defined(CONFIG_DRM_AMD_DAL) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = fiji_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = fiji_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_dal); > + } else { > + adev->ip_blocks = fiji_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks); > + } > +#else > adev->ip_blocks = fiji_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks); > - } > -#else > - adev->ip_blocks = fiji_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks); > #endif > - break; > - case CHIP_TONGA: > + break; > + case CHIP_TONGA: > #if defined(CONFIG_DRM_AMD_DAL) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = tonga_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = tonga_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_dal); > + } else { > + adev->ip_blocks = tonga_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); > + } > +#else > adev->ip_blocks = tonga_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); > - } > -#else > - adev->ip_blocks = tonga_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); > #endif > - break; > - case CHIP_POLARIS11: > - case CHIP_POLARIS10: > + break; > + case CHIP_POLARIS11: > + case CHIP_POLARIS10: > #if defined(CONFIG_DRM_AMD_DAL) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = polaris11_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = polaris11_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_dal); > + } else { > + adev->ip_blocks = polaris11_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks); > + } > +#else > adev->ip_blocks = polaris11_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks); > - } > -#else > - adev->ip_blocks = polaris11_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks); > #endif > - break; > - case CHIP_CARRIZO: > - case CHIP_STONEY: > + break; > + case CHIP_CARRIZO: > + case CHIP_STONEY: > #if defined(CONFIG_DRM_AMD_DAL) > - if (amdgpu_device_has_dal_support(adev)) { > - adev->ip_blocks = cz_ip_blocks_dal; > - adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_dal); > - } else { > + if (amdgpu_device_has_dal_support(adev)) { > + adev->ip_blocks = cz_ip_blocks_dal; > + adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_dal); > + } else { > + adev->ip_blocks = cz_ip_blocks; > + adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); > + } > +#else > adev->ip_blocks = cz_ip_blocks; > adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); > - } > -#else > - adev->ip_blocks = cz_ip_blocks; > - adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); > #endif > - break; > - default: > - /* FIXME: not supported yet */ > - return -EINVAL; > + break; > + default: > + /* FIXME: not supported yet */ > + return -EINVAL; > + } > } > > return 0; > } > > + > #define ATI_REV_ID_FUSE_MACRO__ADDRESS 0xC0014044 > #define ATI_REV_ID_FUSE_MACRO__SHIFT 9 > #define ATI_REV_ID_FUSE_MACRO__MASK 0x00001E00 > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx