Message ID | 20171124073017.22212-1-joonas.lahtinen@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
* Joonas Lahtinen <joonas.lahtinen@linux.intel.com> wrote: > In preparation for upcoming SKUs, allow more freedom in placement > of the Intel graphics stolen memory by BIOS to full 64bit range. > > Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Matthew Auld <matthew.auld@intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> > Cc: Ingo Molnar <mingo@kernel.org> > Cc: H. Peter Anvin <hpa@zytor.com> > Cc: x86@kernel.org > --- > arch/x86/kernel/early-quirks.c | 75 +++++++++++++++++++++--------------------- > 1 file changed, 38 insertions(+), 37 deletions(-) So I'm wondering how this interacts with: drm/i915: export the stolen region as a resource ? Thanks, Ingo
On Fri, 2017-11-24 at 08:35 +0100, Ingo Molnar wrote: > * Joonas Lahtinen <joonas.lahtinen@linux.intel.com> wrote: > > > In preparation for upcoming SKUs, allow more freedom in placement > > of the Intel graphics stolen memory by BIOS to full 64bit range. > > > > Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > > Cc: Matthew Auld <matthew.auld@intel.com> > > Cc: Chris Wilson <chris@chris-wilson.co.uk> > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> > > Cc: Ingo Molnar <mingo@kernel.org> > > Cc: H. Peter Anvin <hpa@zytor.com> > > Cc: x86@kernel.org > > --- > > arch/x86/kernel/early-quirks.c | 75 +++++++++++++++++++++--------------------- > > 1 file changed, 38 insertions(+), 37 deletions(-) > > So I'm wondering how this interacts with: > > drm/i915: export the stolen region as a resource I replied in the other mail thread. My suggestion is to squash the early-quirks portion of that other patch here for a clean split, then we can iterate purely on the i915 as necessary. Sorry for confusion :) Regards, Joonas
Quoting Joonas Lahtinen (2017-11-24 07:30:17) > In preparation for upcoming SKUs, allow more freedom in placement > of the Intel graphics stolen memory by BIOS to full 64bit range. > > Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Matthew Auld <matthew.auld@intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> > Cc: Ingo Molnar <mingo@kernel.org> > Cc: H. Peter Anvin <hpa@zytor.com> > Cc: x86@kernel.org > --- > arch/x86/kernel/early-quirks.c | 75 +++++++++++++++++++++--------------------- > 1 file changed, 38 insertions(+), 37 deletions(-) > > diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c > index 1e82f787c160..7b775f9afa16 100644 > --- a/arch/x86/kernel/early-quirks.c > +++ b/arch/x86/kernel/early-quirks.c > @@ -243,7 +243,7 @@ static void __init intel_remapping_check(int num, int slot, int func) > #define KB(x) ((x) * 1024UL) > #define MB(x) (KB (KB (x))) > > -static size_t __init i830_tseg_size(void) > +static resource_size_t __init i830_tseg_size(void) > { > u8 esmramc = read_pci_config_byte(0, 0, 0, I830_ESMRAMC); > > @@ -256,7 +256,7 @@ static size_t __init i830_tseg_size(void) > return KB(512); > } > > -static size_t __init i845_tseg_size(void) > +static resource_size_t __init i845_tseg_size(void) > { > u8 esmramc = read_pci_config_byte(0, 0, 0, I845_ESMRAMC); > u8 tseg_size = esmramc & I845_TSEG_SIZE_MASK; > @@ -273,7 +273,7 @@ static size_t __init i845_tseg_size(void) > return 0; > } > > -static size_t __init i85x_tseg_size(void) > +static resource_size_t __init i85x_tseg_size(void) > { > u8 esmramc = read_pci_config_byte(0, 0, 0, I85X_ESMRAMC); > > @@ -283,12 +283,12 @@ static size_t __init i85x_tseg_size(void) > return MB(1); > } > > -static size_t __init i830_mem_size(void) > +static resource_size_t __init i830_mem_size(void) > { > return read_pci_config_byte(0, 0, 0, I830_DRB3) * MB(32); > } > > -static size_t __init i85x_mem_size(void) > +static resource_size_t __init i85x_mem_size(void) > { > return read_pci_config_byte(0, 0, 1, I85X_DRB3) * MB(32); > } > @@ -297,36 +297,36 @@ static size_t __init i85x_mem_size(void) > * On 830/845/85x the stolen memory base isn't available in any > * register. We need to calculate it as TOM-TSEG_SIZE-stolen_size. > */ > -static phys_addr_t __init i830_stolen_base(int num, int slot, int func, > - size_t stolen_size) > +static resource_size_t __init i830_stolen_base(int num, int slot, int func, > + resource_size_t stolen_size) > { > - return (phys_addr_t)i830_mem_size() - i830_tseg_size() - stolen_size; > + return i830_mem_size() - i830_tseg_size() - stolen_size; > } > > -static phys_addr_t __init i845_stolen_base(int num, int slot, int func, > - size_t stolen_size) > +static resource_size_t __init i845_stolen_base(int num, int slot, int func, > + resource_size_t stolen_size) > { > - return (phys_addr_t)i830_mem_size() - i845_tseg_size() - stolen_size; > + return i830_mem_size() - i845_tseg_size() - stolen_size; > } > > -static phys_addr_t __init i85x_stolen_base(int num, int slot, int func, > - size_t stolen_size) > +static resource_size_t __init i85x_stolen_base(int num, int slot, int func, > + resource_size_t stolen_size) > { > - return (phys_addr_t)i85x_mem_size() - i85x_tseg_size() - stolen_size; > + return i85x_mem_size() - i85x_tseg_size() - stolen_size; > } > > -static phys_addr_t __init i865_stolen_base(int num, int slot, int func, > - size_t stolen_size) > +static resource_size_t __init i865_stolen_base(int num, int slot, int func, > + resource_size_t stolen_size) > { > u16 toud = 0; > > toud = read_pci_config_16(0, 0, 0, I865_TOUD); > > - return (phys_addr_t)(toud << 16) + i845_tseg_size(); > + return (toud << 16) + i845_tseg_size(); Uh oh, this is a u16 << 16, that's not going to work. (We have the same bug in i915.ko, so you do get a told you so on the merits of bug duplication.) All the other cases are u16 * UL, which should be promoted to UL prior to the calculation and so be safe. Other than it looks fine, Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> -Chris
On Fri, Nov 24, 2017 at 09:30:17AM +0200, Joonas Lahtinen wrote: > @@ -426,14 +426,14 @@ static size_t __init chv_stolen_size(int num, int slot, int func) > * 0x17 to 0x1d: 4MB increments start at 36MB > */ > if (gms < 0x11) > - return (size_t)gms * MB(32); > + return gms * MB(32); > else if (gms < 0x17) > - return (size_t)(gms - 0x11 + 2) * MB(4); > + return (gms - 0x11 + 2) * MB(4); > else > - return (size_t)(gms - 0x17 + 9) * MB(4); > + return (gms - 0x17 + 9) * MB(4); Unrelated random idea: Maybe someone could replace the semi-magic looking +2,+9 etc. with just +MB(whatever)?
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c index 1e82f787c160..7b775f9afa16 100644 --- a/arch/x86/kernel/early-quirks.c +++ b/arch/x86/kernel/early-quirks.c @@ -243,7 +243,7 @@ static void __init intel_remapping_check(int num, int slot, int func) #define KB(x) ((x) * 1024UL) #define MB(x) (KB (KB (x))) -static size_t __init i830_tseg_size(void) +static resource_size_t __init i830_tseg_size(void) { u8 esmramc = read_pci_config_byte(0, 0, 0, I830_ESMRAMC); @@ -256,7 +256,7 @@ static size_t __init i830_tseg_size(void) return KB(512); } -static size_t __init i845_tseg_size(void) +static resource_size_t __init i845_tseg_size(void) { u8 esmramc = read_pci_config_byte(0, 0, 0, I845_ESMRAMC); u8 tseg_size = esmramc & I845_TSEG_SIZE_MASK; @@ -273,7 +273,7 @@ static size_t __init i845_tseg_size(void) return 0; } -static size_t __init i85x_tseg_size(void) +static resource_size_t __init i85x_tseg_size(void) { u8 esmramc = read_pci_config_byte(0, 0, 0, I85X_ESMRAMC); @@ -283,12 +283,12 @@ static size_t __init i85x_tseg_size(void) return MB(1); } -static size_t __init i830_mem_size(void) +static resource_size_t __init i830_mem_size(void) { return read_pci_config_byte(0, 0, 0, I830_DRB3) * MB(32); } -static size_t __init i85x_mem_size(void) +static resource_size_t __init i85x_mem_size(void) { return read_pci_config_byte(0, 0, 1, I85X_DRB3) * MB(32); } @@ -297,36 +297,36 @@ static size_t __init i85x_mem_size(void) * On 830/845/85x the stolen memory base isn't available in any * register. We need to calculate it as TOM-TSEG_SIZE-stolen_size. */ -static phys_addr_t __init i830_stolen_base(int num, int slot, int func, - size_t stolen_size) +static resource_size_t __init i830_stolen_base(int num, int slot, int func, + resource_size_t stolen_size) { - return (phys_addr_t)i830_mem_size() - i830_tseg_size() - stolen_size; + return i830_mem_size() - i830_tseg_size() - stolen_size; } -static phys_addr_t __init i845_stolen_base(int num, int slot, int func, - size_t stolen_size) +static resource_size_t __init i845_stolen_base(int num, int slot, int func, + resource_size_t stolen_size) { - return (phys_addr_t)i830_mem_size() - i845_tseg_size() - stolen_size; + return i830_mem_size() - i845_tseg_size() - stolen_size; } -static phys_addr_t __init i85x_stolen_base(int num, int slot, int func, - size_t stolen_size) +static resource_size_t __init i85x_stolen_base(int num, int slot, int func, + resource_size_t stolen_size) { - return (phys_addr_t)i85x_mem_size() - i85x_tseg_size() - stolen_size; + return i85x_mem_size() - i85x_tseg_size() - stolen_size; } -static phys_addr_t __init i865_stolen_base(int num, int slot, int func, - size_t stolen_size) +static resource_size_t __init i865_stolen_base(int num, int slot, int func, + resource_size_t stolen_size) { u16 toud = 0; toud = read_pci_config_16(0, 0, 0, I865_TOUD); - return (phys_addr_t)(toud << 16) + i845_tseg_size(); + return (toud << 16) + i845_tseg_size(); } -static phys_addr_t __init gen3_stolen_base(int num, int slot, int func, - size_t stolen_size) +static resource_size_t __init gen3_stolen_base(int num, int slot, int func, + resource_size_t stolen_size) { u32 bsm; @@ -337,10 +337,10 @@ static phys_addr_t __init gen3_stolen_base(int num, int slot, int func, */ bsm = read_pci_config(num, slot, func, INTEL_BSM); - return (phys_addr_t)bsm & INTEL_BSM_MASK; + return bsm & INTEL_BSM_MASK; } -static size_t __init i830_stolen_size(int num, int slot, int func) +static resource_size_t __init i830_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -361,7 +361,7 @@ static size_t __init i830_stolen_size(int num, int slot, int func) return 0; } -static size_t __init gen3_stolen_size(int num, int slot, int func) +static resource_size_t __init gen3_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -390,7 +390,7 @@ static size_t __init gen3_stolen_size(int num, int slot, int func) return 0; } -static size_t __init gen6_stolen_size(int num, int slot, int func) +static resource_size_t __init gen6_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -398,10 +398,10 @@ static size_t __init gen6_stolen_size(int num, int slot, int func) gmch_ctrl = read_pci_config_16(num, slot, func, SNB_GMCH_CTRL); gms = (gmch_ctrl >> SNB_GMCH_GMS_SHIFT) & SNB_GMCH_GMS_MASK; - return (size_t)gms * MB(32); + return gms * MB(32); } -static size_t __init gen8_stolen_size(int num, int slot, int func) +static resource_size_t __init gen8_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -409,10 +409,10 @@ static size_t __init gen8_stolen_size(int num, int slot, int func) gmch_ctrl = read_pci_config_16(num, slot, func, SNB_GMCH_CTRL); gms = (gmch_ctrl >> BDW_GMCH_GMS_SHIFT) & BDW_GMCH_GMS_MASK; - return (size_t)gms * MB(32); + return gms * MB(32); } -static size_t __init chv_stolen_size(int num, int slot, int func) +static resource_size_t __init chv_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -426,14 +426,14 @@ static size_t __init chv_stolen_size(int num, int slot, int func) * 0x17 to 0x1d: 4MB increments start at 36MB */ if (gms < 0x11) - return (size_t)gms * MB(32); + return gms * MB(32); else if (gms < 0x17) - return (size_t)(gms - 0x11 + 2) * MB(4); + return (gms - 0x11 + 2) * MB(4); else - return (size_t)(gms - 0x17 + 9) * MB(4); + return (gms - 0x17 + 9) * MB(4); } -static size_t __init gen9_stolen_size(int num, int slot, int func) +static resource_size_t __init gen9_stolen_size(int num, int slot, int func) { u16 gmch_ctrl; u16 gms; @@ -444,14 +444,15 @@ static size_t __init gen9_stolen_size(int num, int slot, int func) /* 0x0 to 0xef: 32MB increments starting at 0MB */ /* 0xf0 to 0xfe: 4MB increments starting at 4MB */ if (gms < 0xf0) - return (size_t)gms * MB(32); + return gms * MB(32); else - return (size_t)(gms - 0xf0 + 1) * MB(4); + return (gms - 0xf0 + 1) * MB(4); } struct intel_early_ops { - size_t (*stolen_size)(int num, int slot, int func); - phys_addr_t (*stolen_base)(int num, int slot, int func, size_t size); + resource_size_t (*stolen_size)(int num, int slot, int func); + resource_size_t (*stolen_base)(int num, int slot, int func, + resource_size_t size); }; static const struct intel_early_ops i830_early_ops __initconst = { @@ -535,8 +536,8 @@ static void __init intel_graphics_stolen(int num, int slot, int func, const struct intel_early_ops *early_ops) { - phys_addr_t base, end; - size_t size; + resource_size_t base, size; + resource_size_t end; size = early_ops->stolen_size(num, slot, func); base = early_ops->stolen_base(num, slot, func, size);
In preparation for upcoming SKUs, allow more freedom in placement of the Intel graphics stolen memory by BIOS to full 64bit range. Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: H. Peter Anvin <hpa@zytor.com> Cc: x86@kernel.org --- arch/x86/kernel/early-quirks.c | 75 +++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 37 deletions(-)