On Mo, 2020-01-06 at 12:40 +0100, Christian Gmeiner wrote:
Hi Lucas
Am Mo., 6. Jan. 2020 um 12:22 Uhr schrieb Lucas Stach l.stach@pengutronix.de:
On Mo, 2020-01-06 at 11:57 +0100, Christian Gmeiner wrote:
Hi Lucas
Am Mo., 6. Jan. 2020 um 11:03 Uhr schrieb Lucas Stach l.stach@pengutronix.de:
On Do, 2020-01-02 at 11:02 +0100, Christian Gmeiner wrote:
They will be used for extended HWDB support. The eco id logic was taken from galcore kernel driver sources.
Signed-off-by: Christian Gmeiner christian.gmeiner@gmail.com
drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 17 +++++++++++++++++ drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index d47d1a8e0219..253301be9e95 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -321,6 +321,18 @@ static void etnaviv_hw_specs(struct etnaviv_gpu *gpu) gpu->identity.varyings_count -= 1; }
+static void etnaviv_hw_eco_id(struct etnaviv_gpu *gpu) +{
const u32 chipDate = gpu_read(gpu, VIVS_HI_CHIP_DATE);
gpu->identity.eco_id = gpu_read(gpu, VIVS_HI_CHIP_ECO_ID);
if (etnaviv_is_model_rev(gpu, GC1000, 0x5037) && (chipDate == 0x20120617))
gpu->identity.eco_id = 1;
if (etnaviv_is_model_rev(gpu, GC320, 0x5303) && (chipDate == 0x20140511))
gpu->identity.eco_id = 1;
I'm not sure if those two checks warrant a separate function. Maybe just place them besides the other ID fixups?
This is almost a 1:1 copy of _GetEcoID(..) but will try to move the fixups.
+}
static void etnaviv_hw_identify(struct etnaviv_gpu *gpu) { u32 chipIdentity; @@ -362,6 +374,8 @@ static void etnaviv_hw_identify(struct etnaviv_gpu *gpu) } }
gpu->identity.product_id = gpu_read(gpu, VIVS_HI_CHIP_PRODUCT_ID);
/* * NXP likes to call the GPU on the i.MX6QP GC2000+, but in * reality it's just a re-branded GC3000. We can identify this
@@ -375,6 +389,9 @@ static void etnaviv_hw_identify(struct etnaviv_gpu *gpu) } }
etnaviv_hw_eco_id(gpu);
gpu->identity.customer_id = gpu_read(gpu, VIVS_HI_CHIP_CUSTOMER_ID);
I don't like this scattering of identity register reads. Please move all of those reads to the else clause where we currently read model/rev. I doubt that the customer ID register is available on the really early cores, that only have the VIVS_HI_CHIP_IDENTITY register.
There is feature bit for it: chipMinorFeatures5_HAS_PRODUCTID Will change the code to make use of it. Shall I still put it in the else clause then?
If there's a feature bit we need to move the read toward the end of the function, as we currently read the features as the last step in the hw_identify.
But then I'm not sure if the HAS_PRODUCTID feature bit is correct. At least wumpus' gpus_comparison says that none of the known <= GC3000 cores has it set, which seems... suspicious.
Hmm... what if I just mimic what is done here? https://github.com/etnaviv/vivante_kernel_drivers/blob/master/imx8_v6.2.3.12...
Unconditionally read the product id at the end of the else clause. The same is done in the stm32 galcore kernel driver.
If we read it unconditionally, just move it to the start of the else clause, next to the model/rev reads and be done with it.
Regards, Lucas