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 <Emily.Deng at amd.com> > --- > 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) { > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: OpenPGP digital signature URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20160809/e4d7bf16/attachment.sig>