On 08/09/2016 01:47 PM, Emily Deng wrote: > For virtual display feature, as there may be mutiple GPUs, > for user could choose whiche GPU need to enable this feature, change > the type of virtual_display from int to char*. The variable will be set > like this virtual_display="xx:xx.x;xx:xx.x;". > > Signed-off-by: Emily Deng <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 ++- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 31 > +++++++++++++++++++++++++++++- > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 6 +++--- > drivers/gpu/drm/amd/amdgpu/cik.c | 2 +- > drivers/gpu/drm/amd/amdgpu/vi.c | 2 +- > 5 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index c309eaf..b6bed4e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -93,7 +93,7 @@ extern unsigned amdgpu_pcie_lane_cap; > extern unsigned amdgpu_cg_mask; > extern unsigned amdgpu_pg_mask; > extern int amdgpu_sclk_deep_sleep_en; > -extern int amdgpu_virtual_display; > +extern char *amdgpu_virtual_display; > > #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 > #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ > @@ -2142,6 +2142,7 @@ struct amdgpu_device { > struct kfd_dev *kfd; > > struct amdgpu_virtualization virtualization; > + int enable_virtual_display; > }; > > bool amdgpu_device_is_px(struct drm_device *dev); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 68cce12..62efe14 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -47,6 +47,7 @@ > #endif > #include "vi.h" > #include "bif/bif_4_1_d.h" > +#include <linux/pci.h> > > static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); > static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); > @@ -1182,11 +1183,39 @@ int amdgpu_ip_block_version_cmp(struct amdgpu_device > *adev, > return 1; > } > > +static void amdgpu_whether_enable_virtual_display(struct amdgpu_device *adev) > +{ > + adev->enable_virtual_display = 0; > + > + if (amdgpu_virtual_display) { > + char pci_address_name[8]; > + char *pciaddstr, *pciaddstr_tmp, *pciaddname; > + struct drm_device *ddev = adev->ddev; > + > + sprintf(pci_address_name, "%02x:%02x.%d", > ddev->pdev->bus->number, > + PCI_SLOT(ddev->pdev->devfn), > PCI_FUNC(ddev->pdev->devfn)); > + > + pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL); > + pciaddstr_tmp = pciaddstr; > + while ((pciaddname = strsep(&pciaddstr_tmp, ";"))) { > + if (!strncmp(pci_address_name, pciaddname, > sizeof(pci_address_name))) { > + adev->enable_virtual_display = 1; > + break; > + } > + } > + > + DRM_INFO("virtual display string:%s, %s:virtual_display:%d\n", > amdgpu_virtual_display, pci_address_name, adev->enable_virtual_display); > + > + if(pciaddstr) > + kfree(pciaddstr); kfree() should be NULL-safe so no need for the branch.
Kind Regards,
Edward.
> + }
> +}
> +
> static int amdgpu_early_init(struct amdgpu_device *adev)
> {
> int i, r;
>
> - DRM_INFO("virtual display enabled:%d\n", amdgpu_virtual_display);
> + amdgpu_whether_enable_virtual_display(adev);
>
> switch (adev->asic_type) {
> case CHIP_TOPAZ:
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 7007cf7..4202602 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -90,7 +90,7 @@ unsigned amdgpu_pcie_gen_cap = 0;
> unsigned amdgpu_pcie_lane_cap = 0;
> unsigned amdgpu_cg_mask = 0xffffffff;
> unsigned amdgpu_pg_mask = 0xffffffff;
> -int amdgpu_virtual_display = 0;
> +char *amdgpu_virtual_display = NULL;
>
> MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes");
> module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
> @@ -190,8 +190,8 @@ module_param_named(cg_mask, amdgpu_cg_mask, uint, 0444);
> MODULE_PARM_DESC(pg_mask, "Powergating flags mask (0 = disable power
> gating)");
> module_param_named(pg_mask, amdgpu_pg_mask, uint, 0444);
>
> -MODULE_PARM_DESC(virtual_display, "enable virtual display (0 = disable
> virtual display)");
> -module_param_named(virtual_display, amdgpu_virtual_display, int, 0444);
> +MODULE_PARM_DESC(virtual_display, "Enable virtual display feature (the
> virtual_display will be set like xx:xx.x;xx:xx.x)");
> +module_param_named(virtual_display, amdgpu_virtual_display, charp, 0444);
>
> static const struct pci_device_id pciidlist[] = {
> #ifdef CONFIG_DRM_AMDGPU_CIK
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c
> b/drivers/gpu/drm/amd/amdgpu/cik.c
> index 4b48bcd..c97d700 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
> @@ -2464,7 +2464,7 @@ static const struct amdgpu_ip_block_version
> kaveri_ip_blocks_vd[] =
>
> int cik_set_ip_blocks(struct amdgpu_device *adev)
> {
> - if (amdgpu_virtual_display) {
> + if (adev->enable_virtual_display) {
> amdgpu_dal = 0;
> adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
> switch (adev->asic_type) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
> index 4afa053..1e973b5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
> @@ -1676,7 +1676,7 @@ static const struct amdgpu_ip_block_version
> fiji_ip_blocks_dal[] =
>
> int vi_set_ip_blocks(struct amdgpu_device *adev)
> {
> - if (amdgpu_virtual_display) {
> + if (adev->enable_virtual_display) {
> amdgpu_dal = 0;
> adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
> switch (adev->asic_type) {
>
signature.asc
Description: OpenPGP digital signature
_______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
