[AMD Official Use Only - AMD Internal Distribution Only]

> -----Original Message-----
> From: Lazar, Lijo <[email protected]>
> Sent: Thursday, March 19, 2026 11:38 AM
> To: Yang, Stanley <[email protected]>; [email protected]
> Subject: Re: [PATCH Review 1/1] drm/amdgpu: Add amdgpu_regs_pcie64
> debugfs node
>
>
>
> On 19-Mar-26 8:47 AM, Yang, Stanley wrote:
> > [AMD Official Use Only - AMD Internal Distribution Only]
> >
> >> -----Original Message-----
> >> From: Lazar, Lijo <[email protected]>
> >> Sent: Wednesday, March 18, 2026 10:43 PM
> >> To: Yang, Stanley <[email protected]>;
> >> [email protected]
> >> Subject: Re: [PATCH Review 1/1] drm/amdgpu: Add amdgpu_regs_pcie64
> >> debugfs node
> >>
> >>
> >>
> >> On 18-Mar-26 4:52 PM, Stanley.Yang wrote:
> >>> Add amdgpu_regs_pcie64 debugfs node to read/write 64bit PCIE
> >>> registers.
> >>>
> >>> Signed-off-by: Stanley.Yang <[email protected]>
> >>> ---
> >>>    drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 113
> >> ++++++++++++++++++++
> >>>    1 file changed, 113 insertions(+)
> >>>
> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> >>> index 6fdcd9c78324..e15b3aa02919 100644
> >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> >>> @@ -622,6 +622,111 @@ static ssize_t
> >> amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user
> >>>      amdgpu_virt_disable_access_debugfs(adev);
> >>>      return r;
> >>>    }
> >>> +/**
> >>> + * amdgpu_debugfs_regs_pcie64_read - Read from a 64-bit PCIE
> >>> +register
> >>> + *
> >>> + * @f: open file handle
> >>> + * @buf: User buffer to store read data in
> >>> + * @size: Number of bytes to read
> >>> + * @pos:  Offset to seek to
> >>> + */
> >>> +static ssize_t amdgpu_debugfs_regs_pcie64_read(struct file *f, char
> >>> +__user
> >> *buf,
> >>> +                    size_t size, loff_t *pos) {
> >>> +   struct amdgpu_device *adev = file_inode(f)->i_private;
> >>> +   ssize_t result = 0;
> >>> +   int r;
> >>> +
> >>> +   if (size & 0x7 || *pos & 0x7)
> >>> +           return -EINVAL;
> >>> +
> >>> +   r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
> >>> +   if (r < 0) {
> >>> +           pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>> +           return r;
> >>> +   }
> >>> +
> >>> +   r = amdgpu_virt_enable_access_debugfs(adev);
> >>> +   if (r < 0) {
> >>> +           pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>> +           return r;
> >>> +   }
> >>> +
> >>> +   while (size) {
> >>> +           uint64_t value;
> >>> +
> >>> +           value = RREG64_PCIE_EXT(*pos);
> >>> +
> >>> +           r = put_user(value, (uint64_t *)buf);
> >>> +           if (r)
> >>> +                   goto out;
> >>> +
> >>> +           result += 8;
> >>> +           buf += 8;
> >>> +           *pos += 8;
> >>> +           size -= 8;
> >>> +   }
> >>> +
> >>> +   r = result;
> >>> +out:
> >>> +   pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
> >>> +   pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>
> >> autosuspend also marks last_busy, it's no longer required to call it
> separately.
> >
> > pm_runtime_put_autosuspend and pm_runtime_get_sync are paired,
> > autosuspend is used to release runtime pm usage count, and it reads
> last_busy not marks last_busy.
> >
>
> This is a recent change -
>
> https://lore.kernel.org/linux-pm/20250704075225.3212486-1-
> [email protected]/

Thank you Lijo, will send v2.

>
> Thanks,
> Lijo
>
> > Regards,
> > Stanley
> >
> >>
> >> Thanks,
> >> Lijo
> >>
> >>> +   amdgpu_virt_disable_access_debugfs(adev);
> >>> +   return r;
> >>> +}
> >>> +
> >>> +/**
> >>> + * amdgpu_debugfs_regs_pcie64_write - Write to a 64-bit PCIE
> >>> +register
> >>> + *
> >>> + * @f: open file handle
> >>> + * @buf: User buffer to write data from
> >>> + * @size: Number of bytes to write
> >>> + * @pos:  Offset to seek to
> >>> + */
> >>> +static ssize_t amdgpu_debugfs_regs_pcie64_write(struct file *f,
> >>> +const char
> >> __user *buf,
> >>> +                     size_t size, loff_t *pos) {
> >>> +   struct amdgpu_device *adev = file_inode(f)->i_private;
> >>> +   ssize_t result = 0;
> >>> +   int r;
> >>> +
> >>> +   if (size & 0x7 || *pos & 0x7)
> >>> +           return -EINVAL;
> >>> +
> >>> +   r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
> >>> +   if (r < 0) {
> >>> +           pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>> +           return r;
> >>> +   }
> >>> +
> >>> +   r = amdgpu_virt_enable_access_debugfs(adev);
> >>> +   if (r < 0) {
> >>> +           pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>> +           return r;
> >>> +   }
> >>> +
> >>> +   while (size) {
> >>> +           uint64_t value;
> >>> +
> >>> +           r = get_user(value, (uint64_t *)buf);
> >>> +           if (r)
> >>> +                   goto out;
> >>> +
> >>> +           WREG64_PCIE_EXT(*pos, value);
> >>> +
> >>> +           result += 8;
> >>> +           buf += 8;
> >>> +           *pos += 8;
> >>> +           size -= 8;
> >>> +   }
> >>> +
> >>> +   r = result;
> >>> +out:
> >>> +   pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
> >>> +   pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
> >>> +   amdgpu_virt_disable_access_debugfs(adev);
> >>> +   return r;
> >>> +}
> >>>
> >>>    /**
> >>>     * amdgpu_debugfs_regs_didt_read - Read from a DIDT register @@
> >>> -1544,6 +1649,12 @@ static const struct file_operations
> >> amdgpu_debugfs_regs_pcie_fops = {
> >>>      .write = amdgpu_debugfs_regs_pcie_write,
> >>>      .llseek = default_llseek
> >>>    };
> >>> +static const struct file_operations amdgpu_debugfs_regs_pcie64_fops = {
> >>> +   .owner = THIS_MODULE,
> >>> +   .read = amdgpu_debugfs_regs_pcie64_read,
> >>> +   .write = amdgpu_debugfs_regs_pcie64_write,
> >>> +   .llseek = default_llseek
> >>> +};
> >>>    static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
> >>>      .owner = THIS_MODULE,
> >>>      .read = amdgpu_debugfs_regs_smc_read, @@ -1606,6 +1717,7 @@
> >> static
> >>> const struct file_operations *debugfs_regs[] = {
> >>>      &amdgpu_debugfs_gprwave_fops,
> >>>      &amdgpu_debugfs_regs_didt_fops,
> >>>      &amdgpu_debugfs_regs_pcie_fops,
> >>> +   &amdgpu_debugfs_regs_pcie64_fops,
> >>>      &amdgpu_debugfs_regs_smc_fops,
> >>>      &amdgpu_debugfs_gca_config_fops,
> >>>      &amdgpu_debugfs_sensors_fops,
> >>> @@ -1623,6 +1735,7 @@ static const char * const
> debugfs_regs_names[]
> >>> =
> >> {
> >>>      "amdgpu_gprwave",
> >>>      "amdgpu_regs_didt",
> >>>      "amdgpu_regs_pcie",
> >>> +   "amdgpu_regs_pcie64",
> >>>      "amdgpu_regs_smc",
> >>>      "amdgpu_gca_config",
> >>>      "amdgpu_sensors",
> >

Reply via email to