lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
 <DS0PR12MB84790059CC52927471D9BA60FED9A@DS0PR12MB8479.namprd12.prod.outlook.com>
Date: Wed, 3 Dec 2025 15:24:47 +0000
From: "Lin, Leo" <Leo.Lin@....com>
To: "Lazar, Lijo" <Lijo.Lazar@....com>, "Deucher, Alexander"
	<Alexander.Deucher@....com>, "Koenig, Christian" <Christian.Koenig@....com>,
	David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>, Maarten
 Lankhorst <maarten.lankhorst@...ux.intel.com>, Maxime Ripard
	<mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>, Jonathan
 Corbet <corbet@....net>
CC: "amd-gfx@...ts.freedesktop.org" <amd-gfx@...ts.freedesktop.org>,
	"dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	"linux-doc@...r.kernel.org" <linux-doc@...r.kernel.org>, "Tsao, Anson"
	<anson.tsao@....com>, "Mario Limonciello (AMD) (kernel.org)"
	<superm1@...nel.org>
Subject: RE: [PATCH v4 2/5] drm/amdgpu: add helper to read UMA carveout info

[AMD Official Use Only - AMD Internal Distribution Only]

> -----Original Message-----
> From: Lazar, Lijo <Lijo.Lazar@....com>
> Sent: Monday, December 1, 2025 10:40 PM
> To: Lin, Leo <Leo.Lin@....com>; Deucher, Alexander
> <Alexander.Deucher@....com>; Koenig, Christian
> <Christian.Koenig@....com>; David Airlie <airlied@...il.com>; Simona
> Vetter <simona@...ll.ch>; Maarten Lankhorst
> <maarten.lankhorst@...ux.intel.com>; Maxime Ripard
> <mripard@...nel.org>; Thomas Zimmermann <tzimmermann@...e.de>;
> Jonathan Corbet <corbet@....net>
> Cc: amd-gfx@...ts.freedesktop.org; dri-devel@...ts.freedesktop.org; linux-
> kernel@...r.kernel.org; linux-doc@...r.kernel.org; Tsao, Anson
> <anson.tsao@....com>; Mario Limonciello (AMD) (kernel.org)
> <superm1@...nel.org>
> Subject: Re: [PATCH v4 2/5] drm/amdgpu: add helper to read UMA carveout
> info
>
>
>
> On 12/1/2025 4:38 PM, Yo-Jung Leo Lin (AMD) wrote:
> > Currently, the available UMA allocation configs in the integrated
> > system information table have not been parsed. Add a helper function
> > to retrieve and store these configs.
> >
> > Co-developed-by: Mario Limonciello (AMD) <superm1@...nel.org>
> > Signed-off-by: Mario Limonciello (AMD) <superm1@...nel.org>
> > Reviewed-by: Alex Deucher <alexander.deucher@....com>
> > Signed-off-by: Yo-Jung Leo Lin (AMD) <Leo.Lin@....com>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/amdgpu.h              | 32 ++++++++++
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c         |  2 +
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 77
> ++++++++++++++++++++++++
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h |  2 +
> >   4 files changed, 113 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > index 9f9774f58ce1..ca9c2b54045b 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > @@ -1675,6 +1675,38 @@ struct amdgpu_numa_info {
> >     int nid;
> >   };
> >
> > +#define MAX_UMA_OPTION_NAME        28
> > +#define MAX_UMA_OPTION_ENTRIES     19
> > +
> > +#define AMDGPU_UMA_FLAG_AUTO       BIT(1)
> > +#define AMDGPU_UMA_FLAG_CUSTOM     BIT(0)
> > +
> > +/**
> > + * struct amdgpu_uma_carveout_option - single UMA carveout option
> > + * @name: Name of the carveout option
> > + * @memory_carved_mb: Amount of memory carved in MB
> > + * @flags: ATCS flags supported by this option  */ struct
> > +amdgpu_uma_carveout_option {
> > +   char name[MAX_UMA_OPTION_NAME];
> > +   uint32_t memory_carved_mb;
> > +   uint8_t flags;
> > +};
> > +
> > +/**
> > + * struct amdgpu_uma_carveout_info - table of available UMA carveout
> > +options
> > + * @num_entries: Number of available options
> > + * @uma_option_index: The index of the option currently applied
> > + * @update_lock: Lock to serialize changes to the option
> > + * @entries: The array of carveout options  */ struct
> > +amdgpu_uma_carveout_info {
> > +   uint8_t num_entries;
> > +   uint8_t uma_option_index;
> > +   struct mutex update_lock;
> > +   struct amdgpu_uma_carveout_option
> entries[MAX_UMA_OPTION_ENTRIES];
> > +};
> > +
> >   /* ATCS Device/Driver State */
> >   #define AMDGPU_ATCS_PSC_DEV_STATE_D0              0
> >   #define AMDGPU_ATCS_PSC_DEV_STATE_D3_HOT  3
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> > index 610449d73a6c..92070738bd42 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> > @@ -38,6 +38,7 @@
> >   #include "amdgpu_display.h"
> >   #include "amd_acpi.h"
> >   #include "atom.h"
> > +#include "amdgpu_atomfirmware.h"
> >
> >   /* Declare GUID for AMD _DSM method for XCCs */
> >   static const guid_t amd_xcc_dsm_guid = GUID_INIT(0x8267f5d5, 0xa556,
> > 0x44f2, @@ -125,6 +126,7 @@ struct amdgpu_atcs {
> >     acpi_handle handle;
> >
> >     struct amdgpu_atcs_functions functions;
> > +   struct amdgpu_uma_carveout_info uma_info;
>
> Since carveout_info definition is part of amdgpu.h, I think moving this to
> amdgpu_device is better and then keeping the uma/sysfs options initialization
> (patch 4) in amdgpu_device.c. amdgpu_acpi doesn't really need to have
> atomfirmware included.
>

Ok, I'll move these structs into amdgpu_device (or into suitable member structure inside that) and move sysfs initialization functions into amdgpu_device.c

Thanks,
Leo

> Thanks,
> Lijo
>
> >   };
> >
> >   static struct amdgpu_acpi_priv {
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > index 636385c80f64..7f4751e5caaf 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > @@ -296,6 +296,83 @@ static int
> convert_atom_mem_type_to_vram_type(struct amdgpu_device *adev,
> >     return vram_type;
> >   }
> >
> > +static int amdgpu_atomfirmware_get_uma_carveout_info_v2_3(struct
> amdgpu_device *adev,
> > +                                                     union igp_info
> *igp_info,
> > +                                                     struct
> amdgpu_uma_carveout_info *uma_info) {
> > +   struct uma_carveout_option *opts;
> > +   uint8_t nr_uma_options;
> > +   int i;
> > +
> > +   nr_uma_options = igp_info->v23.UMACarveoutIndexMax;
> > +
> > +   if (!nr_uma_options)
> > +           return -ENODEV;
> > +
> > +   if (nr_uma_options > MAX_UMA_OPTION_ENTRIES) {
> > +           drm_dbg(adev_to_drm(adev),
> > +                   "Number of UMA options exceeds max table size.
> Options will not be parsed");
> > +           return -EINVAL;
> > +   }
> > +
> > +   uma_info->num_entries = nr_uma_options;
> > +   uma_info->uma_option_index = igp_info->v23.UMACarveoutIndex;
> > +
> > +   opts = igp_info->v23.UMASizeControlOption;
> > +
> > +   for (i = 0; i < nr_uma_options; i++) {
> > +           if (!opts[i].memoryCarvedGb)
> > +                   uma_info->entries[i].memory_carved_mb = 512;
> > +           else
> > +                   uma_info->entries[i].memory_carved_mb =
> > +(uint32_t)opts[i].memoryCarvedGb << 10;
> > +
> > +           uma_info->entries[i].flags =
> opts[i].uma_carveout_option_flags.all8;
> > +           strscpy(uma_info->entries[i].name, opts[i].optionName,
> MAX_UMA_OPTION_NAME);
> > +   }
> > +
> > +   return 0;
> > +}
> > +
> > +int amdgpu_atomfirmware_get_uma_carveout_info(struct amdgpu_device
> *adev,
> > +                                         struct
> amdgpu_uma_carveout_info *uma_info) {
> > +   struct amdgpu_mode_info *mode_info = &adev->mode_info;
> > +   union igp_info *igp_info;
> > +   u16 data_offset, size;
> > +   u8 frev, crev;
> > +   int index;
> > +
> > +   if (!(adev->flags & AMD_IS_APU))
> > +           return -ENODEV;
> > +
> > +   index =
> get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
> > +                                       integratedsysteminfo);
> > +
> > +   if (!amdgpu_atom_parse_data_header(mode_info->atom_context,
> > +                                     index, &size,
> > +                                     &frev, &crev, &data_offset)) {
> > +           return -EINVAL;
> > +   }
> > +
> > +   igp_info = (union igp_info *)
> > +                   (mode_info->atom_context->bios + data_offset);
> > +
> > +   switch (frev) {
> > +   case 2:
> > +           switch (crev) {
> > +           case 3:
> > +                   return
> amdgpu_atomfirmware_get_uma_carveout_info_v2_3(adev, igp_info,
> uma_info);
> > +           break;
> > +           default:
> > +                   break;
> > +           }
> > +           break;
> > +   default:
> > +           break;
> > +   }
> > +   return -ENODEV;
> > +}
> > +
> >   int
> >   amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> >                               int *vram_width, int *vram_type, diff --git
> > a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > index 649b5530d8ae..67c8d105729b 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > @@ -32,6 +32,8 @@ void amdgpu_atomfirmware_scratch_regs_init(struct
> amdgpu_device *adev);
> >   int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device
> *adev);
> >   int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> >     int *vram_width, int *vram_type, int *vram_vendor);
> > +int amdgpu_atomfirmware_get_uma_carveout_info(struct amdgpu_device
> *adev,
> > +                                         struct
> amdgpu_uma_carveout_info *uma_info);
> >   int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
> >   int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
> >   bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device
> > *adev);
> >

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ