[PATCH 4/8] drm/xe: Introduce a helper to get dpa from pfn

Zeng, Oak oak.zeng at intel.com
Wed Mar 20 22:34:16 UTC 2024


Hi Brian,

> -----Original Message-----
> From: Welty, Brian <brian.welty at intel.com>
> Sent: Wednesday, March 20, 2024 5:42 PM
> To: Zeng, Oak <oak.zeng at intel.com>; intel-xe at lists.freedesktop.org
> Cc: Hellstrom, Thomas <thomas.hellstrom at intel.com>; Brost, Matthew
> <matthew.brost at intel.com>; Ghimiray, Himal Prasad
> <himal.prasad.ghimiray at intel.com>
> Subject: Re: [PATCH 4/8] drm/xe: Introduce a helper to get dpa from pfn
> 
> 
> 
> On 3/19/2024 8:44 PM, Oak Zeng wrote:
> > Since we now create struct page backing for each vram page,
> > each vram page now also has a pfn, just like system memory.
> > This allow us to calcuate device physical address from pfn.
> >
> > v1: move the function to xe_svm.h (Matt)
> >      s/vram_pfn_to_dpa/xe_mem_region_pfn_to_dpa (Matt)
> >      add kernel document for the helper (Thomas)
> >
> > Signed-off-by: Oak Zeng <oak.zeng at intel.com>
> > ---
> >   drivers/gpu/drm/xe/xe_svm.h | 27 +++++++++++++++++++++++++--
> >   1 file changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
> > index e944971cfc6d..8a34429eb674 100644
> > --- a/drivers/gpu/drm/xe/xe_svm.h
> > +++ b/drivers/gpu/drm/xe/xe_svm.h
> > @@ -6,8 +6,31 @@
> >   #ifndef __XE_SVM_H
> >   #define __XE_SVM_H
> >
> > -struct xe_tile;
> > -struct xe_mem_region;
> > +#include "xe_device_types.h"
> > +#include "xe_device.h"
> > +#include "xe_assert.h"
> > +
> > +/**
> > + * xe_mem_region_pfn_to_dpa() - Calculate page's dpa from pfn
> > + *
> > + * @mr: The memory region that page resides in
> > + * @pfn: page frame number of the page
> > + *
> > + * Returns: the device physical address of the page
> > + */
> > +static inline u64 xe_mem_region_pfn_to_dpa(struct xe_mem_region *mr,
> u64 pfn)
> > +{
> > +	u64 dpa;
> > +	struct xe_tile *tile = xe_mem_region_to_tile(mr);
> 
> I believe you are dropping this patch for now, but wanted to comment.
> 
> Is above the only usage of xe_mem_region_to_tile() ?
> 
> As mentioned in earlier review, it's better to avoid the tight
> association with xe_mem_region and tile.  Such as for the UMA we talked
> before, it's nice to have flexibility for xe_mem_region to be associated
> with multiple tiles.  But I guess this is all future/pending, so can
> leave to solve in future if you prefer.
> 
> Not sure you have other usage of xe_mem_region_to_tile().  But here,
> looks only used for getting tile->xe pointer.
> Can caller of xe_mem_region_pfn_to_dpa() just pass in the xe device pointer?

Yes, in this case we can pass in the xe pointer. It is a good idea.

I agree what you said above. Couple region with tile is a bad idea. I will consider this perspective in the coming series.

Oak
> 
> -Brian
> 
> 
> > +	struct xe_device *xe = tile_to_xe(tile);
> > +	u64 offset;
> > +
> > +	xe_assert(xe, (pfn << PAGE_SHIFT) >= mr->hpa_base);
> > +	offset = (pfn << PAGE_SHIFT) - mr->hpa_base;
> > +	dpa = mr->dpa_base + offset;
> > +
> > +	return dpa;
> > +}
> >
> >   int xe_devm_add(struct xe_tile *tile, struct xe_mem_region *mr);
> >   void xe_devm_remove(struct xe_tile *tile, struct xe_mem_region *mr);


More information about the Intel-xe mailing list