Samuel Iglesias Gonsálvez <sigles...@igalia.com> writes: > On 25/11/15 14:45, Francisco Jerez wrote: >> Samuel Iglesias Gonsálvez <sigles...@igalia.com> writes: >> >>> On 25/11/15 13:56, Samuel Iglesias Gonsálvez wrote: >>>> >>>> >>>> On 25/11/15 13:20, Samuel Iglesias Gonsálvez wrote: >>>>> >>>>> >>>>> On 18/11/15 06:54, Jordan Justen wrote: >>>>>> From: Francisco Jerez <curroje...@riseup.net> >>>>>> >>>>>> It should be possible to use additional L3 configurations other than >>>>>> the ones listed in the tables of validated allocations ("BSpec » >>>>>> 3D-Media-GPGPU Engine » L3 Cache and URB [IVB+] » L3 Cache and URB [*] >>>>>> » L3 Allocation and Programming"), but it seems sensible for now to >>>>>> hard-code the tables in order to stick to the hardware docs. Instead >>>>>> of setting up the arbitrary L3 partitioning given as input, the >>>>>> closest validated L3 configuration will be looked up in these tables >>>>>> and used to program the hardware. >>>>>> >>>>>> The included tables should work for Gen7-9. Note that the quantities >>>>>> are specified in ways rather than in KB, this is because the L3 >>>>>> control registers expect the value in ways, and because by doing that >>>>>> we can re-use a single table for all GT variants of the same >>>>>> generation (and in the case of IVB/HSW and CHV/SKL across different >>>>>> generations) which generally have different L3 way sizes but allow the >>>>>> same combinations of way allocations. >>>>>> --- >>>>>> src/mesa/drivers/dri/i965/Makefile.sources | 1 + >>>>>> src/mesa/drivers/dri/i965/gen7_l3_state.c | 163 >>>>>> +++++++++++++++++++++++++++++ >>>>>> 2 files changed, 164 insertions(+) >>>>>> create mode 100644 src/mesa/drivers/dri/i965/gen7_l3_state.c >>>>>> >>>>>> diff --git a/src/mesa/drivers/dri/i965/Makefile.sources >>>>>> b/src/mesa/drivers/dri/i965/Makefile.sources >>>>>> index 5a88d66..91901ad 100644 >>>>>> --- a/src/mesa/drivers/dri/i965/Makefile.sources >>>>>> +++ b/src/mesa/drivers/dri/i965/Makefile.sources >>>>>> @@ -184,6 +184,7 @@ i965_FILES = \ >>>>>> gen7_cs_state.c \ >>>>>> gen7_disable.c \ >>>>>> gen7_gs_state.c \ >>>>>> + gen7_l3_state.c \ >>>>>> gen7_misc_state.c \ >>>>>> gen7_sf_state.c \ >>>>>> gen7_sol_state.c \ >>>>>> diff --git a/src/mesa/drivers/dri/i965/gen7_l3_state.c >>>>>> b/src/mesa/drivers/dri/i965/gen7_l3_state.c >>>>>> new file mode 100644 >>>>>> index 0000000..8f9ba5b >>>>>> --- /dev/null >>>>>> +++ b/src/mesa/drivers/dri/i965/gen7_l3_state.c >>>>>> @@ -0,0 +1,163 @@ >>>>>> +/* >>>>>> + * Copyright (c) 2015 Intel Corporation >>>>>> + * >>>>>> + * Permission is hereby granted, free of charge, to any person >>>>>> obtaining a >>>>>> + * copy of this software and associated documentation files (the >>>>>> "Software"), >>>>>> + * to deal in the Software without restriction, including without >>>>>> limitation >>>>>> + * the rights to use, copy, modify, merge, publish, distribute, >>>>>> sublicense, >>>>>> + * and/or sell copies of the Software, and to permit persons to whom the >>>>>> + * Software is furnished to do so, subject to the following conditions: >>>>>> + * >>>>>> + * The above copyright notice and this permission notice (including the >>>>>> next >>>>>> + * paragraph) shall be included in all copies or substantial portions >>>>>> of the >>>>>> + * Software. >>>>>> + * >>>>>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >>>>>> EXPRESS OR >>>>>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >>>>>> MERCHANTABILITY, >>>>>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT >>>>>> SHALL >>>>>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >>>>>> OTHER >>>>>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, >>>>>> ARISING >>>>>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >>>>>> DEALINGS >>>>>> + * IN THE SOFTWARE. >>>>>> + */ >>>>>> + >>>>>> +#include "brw_context.h" >>>>>> +#include "brw_defines.h" >>>>>> +#include "brw_state.h" >>>>>> +#include "intel_batchbuffer.h" >>>>>> + >>>>>> +/** >>>>>> + * Chunk of L3 cache reserved for some specific purpose. >>>>>> + */ >>>>>> +enum brw_l3_partition { >>>>>> + /** Shared local memory. */ >>>>>> + L3P_SLM = 0, >>>>>> + /** Unified return buffer. */ >>>>>> + L3P_URB, >>>>>> + /** Union of DC and RO. */ >>>>>> + L3P_ALL, >>>>>> + /** Data cluster RW partition. */ >>>>>> + L3P_DC, >>>>>> + /** Union of IS, C and T. */ >>>>>> + L3P_RO, >>>>>> + /** Instruction and state cache. */ >>>>>> + L3P_IS, >>>>>> + /** Constant cache. */ >>>>>> + L3P_C, >>>>>> + /** Texture cache. */ >>>>>> + L3P_T, >>>>>> + /** Number of supported L3 partitions. */ >>>>>> + NUM_L3P >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + * L3 configuration represented as the number of ways allocated for each >>>>>> + * partition. \sa get_l3_way_size(). >>>>>> + */ >>>>>> +struct brw_l3_config { >>>>>> + unsigned n[NUM_L3P]; >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + * IVB/HSW validated L3 configurations. >>>>>> + */ >>>>>> +static const struct brw_l3_config ivb_l3_configs[] = { >>>>>> + {{ 0, 32, 0, 0, 32, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 16, 16, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 4, 0, 8, 4, 16 }}, >>>>>> + {{ 0, 28, 0, 8, 0, 8, 4, 16 }}, >>>>>> + {{ 0, 28, 0, 16, 0, 8, 4, 8 }}, >>>>>> + {{ 0, 28, 0, 8, 0, 16, 4, 8 }}, >>>>>> + {{ 0, 28, 0, 0, 0, 16, 4, 16 }}, >>>>>> + {{ 0, 32, 0, 0, 0, 16, 0, 16 }}, >>>>>> + {{ 0, 28, 0, 4, 32, 0, 0, 0 }}, >>> >>> I don't find this in IVB/HSW PRM docs... >>> >>>>>> + {{ 16, 16, 0, 16, 16, 0, 0, 0 }}, >>>>>> + {{ 16, 16, 0, 8, 0, 8, 8, 8 }}, >>>>>> + {{ 16, 16, 0, 4, 0, 8, 4, 16 }}, >>>>>> + {{ 16, 16, 0, 4, 0, 16, 4, 8 }}, >>>>>> + {{ 16, 16, 0, 0, 32, 0, 0, 0 }}, >>> >>> ...nor this one. Where are they defined? >>> >> Not sure if those are part of the PRMs, according to the internal >> hardware docs (BSpec » 3D-Media-GPGPU Engine » L3 Cache and URB [IVB+] » >> L3 Cache and URB [IVB,EXCLUDE(VLV)] » L3 Cache Allocation and >> Programming [IVB]) those two were "validated as a later supported >> configuration and can be utilized if desired". >> > > I finally found them in public PRM too. Thanks for the citation. > > Please, add my R-b: > > Reviewed-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> > Sorry, but I just made a two-line change to this patch and re-sent, does your review still stand?
> Sam > >>> Sam >>> >>>>>> + {{ 0 }} >>>>>> +}; >>>>>> + >>>>> >>>>> This definition is wrong. It defines 15 elements when NUM_L3P value is 9. >>>>> >>>> >>>> Sorry, I read it wrongly. It is fine. >>>> >>>> Sam >>>> >>>>>> +/** >>>>>> + * VLV validated L3 configurations. >>>>>> + */ >>>>>> +static const struct brw_l3_config vlv_l3_configs[] = { >>>>>> + {{ 0, 80, 0, 0, 16, 0, 0, 0 }}, >>>>>> + {{ 0, 80, 0, 8, 8, 0, 0, 0 }}, >>>>>> + {{ 0, 64, 0, 16, 16, 0, 0, 0 }}, >>>>>> + {{ 0, 64, 0, 0, 32, 0, 0, 0 }}, >>>>>> + {{ 0, 60, 0, 4, 32, 0, 0, 0 }}, >>>>>> + {{ 32, 32, 0, 16, 16, 0, 0, 0 }}, >>>>>> + {{ 32, 40, 0, 8, 16, 0, 0, 0 }}, >>>>>> + {{ 32, 40, 0, 16, 8, 0, 0, 0 }}, >>>>>> + {{ 0 }} >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + * BDW validated L3 configurations. >>>>>> + */ >>>>>> +static const struct brw_l3_config bdw_l3_configs[] = { >>>>>> + {{ 0, 48, 48, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 0, 48, 0, 16, 32, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 16, 48, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 0, 64, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 64, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 24, 16, 48, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 24, 16, 0, 16, 32, 0, 0, 0 }}, >>>>>> + {{ 24, 16, 0, 32, 16, 0, 0, 0 }}, >>>>>> + {{ 0 }} >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + * CHV/SKL validated L3 configurations. >>>>>> + */ >>>>>> +static const struct brw_l3_config chv_l3_configs[] = { >>>>>> + {{ 0, 48, 48, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 0, 48, 0, 16, 32, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 16, 48, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 0, 0, 64, 0, 0, 0 }}, >>>>>> + {{ 0, 32, 64, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 32, 16, 48, 0, 0, 0, 0, 0 }}, >>>>>> + {{ 32, 16, 0, 16, 32, 0, 0, 0 }}, >>>>>> + {{ 32, 16, 0, 32, 16, 0, 0, 0 }}, >>>>>> + {{ 0 }} >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + * Return a zero-terminated array of validated L3 configurations for the >>>>>> + * specified device. >>>>>> + */ >>>>>> +static const struct brw_l3_config * >>>>>> +get_l3_configs(const struct brw_device_info *devinfo) >>>>>> +{ >>>>>> + switch (devinfo->gen) { >>>>>> + case 7: >>>>>> + return (devinfo->is_baytrail ? vlv_l3_configs : ivb_l3_configs); >>>>>> + >>>>>> + case 8: >>>>>> + return (devinfo->is_cherryview ? chv_l3_configs : bdw_l3_configs); >>>>>> + >>>>>> + case 9: >>>>>> + return chv_l3_configs; >>>>>> + >>>>>> + default: >>>>>> + unreachable("Not implemented"); >>>>>> + } >>>>>> +} >>>>>> + >>>>>> +/** >>>>>> + * Return the size of an L3 way in KB. >>>>>> + */ >>>>>> +static unsigned >>>>>> +get_l3_way_size(const struct brw_device_info *devinfo) >>>>>> +{ >>>>>> + if (devinfo->is_baytrail) >>>>>> + return 2; >>>>>> + >>>>>> + else if (devinfo->is_cherryview) >>>>>> + return 4; >>>>>> + >>>>>> + else >>>>>> + return 2 << devinfo->gt; >>>>>> +} >>>>>> >>>>> _______________________________________________ >>>>> mesa-dev mailing list >>>>> mesa-dev@lists.freedesktop.org >>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >>>>> >>>> _______________________________________________ >>>> mesa-dev mailing list >>>> mesa-dev@lists.freedesktop.org >>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >>>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev