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] [thread-next>] [day] [month] [year] [list]
Message-ID: <292f7c44-a19a-4e0d-a73d-ca621ec26813@loongson.cn>
Date:   Mon, 30 Oct 2023 16:50:49 +0800
From:   Sui Jingfeng <suijingfeng@...ngson.cn>
To:     Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
Cc:     Maxime Ripard <mripard@...nel.org>,
        Thomas Zimmermann <tzimmermann@...e.de>,
        linux-kernel@...r.kernel.org, dri-devel@...ts.freedesktop.org
Subject: Re: [PATCH 7/8] drm/loongson: Support to infer DC reversion from
 CPU's PRID value

Hi,

On 2023/10/30 07:19, Dmitry Baryshkov wrote:
> On Sun, 29 Oct 2023 at 21:46, Sui Jingfeng <suijingfeng@...ngson.cn> wrote:
>> Due to the fact that the same display IP core has been integrated into
>> different platform, there is a need to differentiate them on the runtime.
>> The DC in LS7A1000/LS2K1000 has the PCI vendor & device ID of 0x0014:0x7A06
>> The DC in LS7A2000/LS2K2000 has the PCI vendor & device ID of 0x0014:0x7A36
>>
>> Because the output ports and host platform of the DC IP varies, without a
>> revision information we can't achieve fine-grained controls. The canonical
>> approach to do such a thing is to read reversion register from the PCIe
>> device. But LS2K1000 SoC was taped out at 2017, it is rather old. Our BIOS
>> engineer don't assign a different revision ID to it, probably because of
>> ignorance.
>>
>> LS2K2000 SoC was newly taped on 2023, we strictly force the BIOS engineer
>> assign a different revision ID(0x10) to it. But the problem is that it is
>> too casual, there is no formal convention or public documented rule
>> established. For Loongson LS2K series SoC, the display controller IP is
>> taped togather with the CPU core. For Loongson LS7A series bridge chips,
>> the display controller IP is taped togather with the bridge chips itself.
>> Consider the fact the all Loongson CPU has a unique PRID, this patch choose
>> to infer DC reversion from CPU's PRID value.
>>
>>   - LS3A4000/LS3A5000 has 0xC0 as its processor ID.
>>   - LS2K2000 has 0xB0 as its processor ID.
>>   - LS2K2000LA has 0xA0 as its processor ID.
>>
>> The provided approach has no dependency on DT or ACPI, thus is preferfed.
>> Besides, this approach can be used to acquire more addtional HW features.
>> So the provided method has the potential to bring more benifits.
>>
>> Signed-off-by: Sui Jingfeng <suijingfeng@...ngson.cn>
>> ---
>>   drivers/gpu/drm/loongson/lsdc_drv.h   |  2 ++
>>   drivers/gpu/drm/loongson/lsdc_probe.c | 35 +++++++++++++++++++++++++++
>>   drivers/gpu/drm/loongson/lsdc_probe.h |  2 ++
>>   3 files changed, 39 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/loongson/lsdc_drv.h b/drivers/gpu/drm/loongson/lsdc_drv.h
>> index 46ba9b88a30d..e1f4a2db2a0a 100644
>> --- a/drivers/gpu/drm/loongson/lsdc_drv.h
>> +++ b/drivers/gpu/drm/loongson/lsdc_drv.h
>> @@ -42,6 +42,8 @@
>>   enum loongson_chip_id {
>>          CHIP_LS7A1000 = 0,
>>          CHIP_LS7A2000 = 1,
>> +       CHIP_LS2K1000 = 2,
>> +       CHIP_LS2K2000 = 3,
>>          CHIP_LS_LAST,
>>   };
>>
>> diff --git a/drivers/gpu/drm/loongson/lsdc_probe.c b/drivers/gpu/drm/loongson/lsdc_probe.c
>> index 48ba69bb8a98..f49b642d8f65 100644
>> --- a/drivers/gpu/drm/loongson/lsdc_probe.c
>> +++ b/drivers/gpu/drm/loongson/lsdc_probe.c
>> @@ -54,3 +54,38 @@ unsigned int loongson_cpu_get_prid(u8 *imp, u8 *rev)
>>
>>          return prid;
>>   }
>> +
>> +enum loongson_chip_id loongson_chip_id_fixup(enum loongson_chip_id chip_id)
>> +{
>> +       u8 impl;
>> +
>> +       if (loongson_cpu_get_prid(&impl, NULL)) {
>> +               /*
>> +                * LS2K2000 only has the LoongArch edition.
>> +                */
>> +               if (chip_id == CHIP_LS7A2000) {
>> +                       if (impl == LOONGARCH_CPU_IMP_LS2K2000)
>> +                               return CHIP_LS2K2000;
>> +               }
>> +
>> +               /*
>> +                * LS2K1000 has the LoongArch edition(with two LA264 CPU core)
>> +                * and the Mips edition(with two mips64r2 CPU core), Only the
>> +                * instruction set of the CPU are changed, the peripheral
>> +                * devices are basically same.
>> +                */
>> +               if (chip_id == CHIP_LS7A1000) {
>> +#if defined(__loongarch__)
>> +                       if (impl == LOONGARCH_CPU_IMP_LS2K1000)
>> +                               return CHIP_LS2K1000;
>> +#endif
>> +
>> +#if defined(__mips__)
>> +                       if (impl == LOONGSON_CPU_MIPS_IMP_LS2K)
>> +                               return CHIP_LS2K1000;
>> +#endif
> Can you drop the ifdefs here? The code blocks do not seem to conflict
> with each other.

OK, no problem. Will be fixed at the next version.

>> +               }
>> +       }
>> +
>> +       return chip_id;
>> +}
>> diff --git a/drivers/gpu/drm/loongson/lsdc_probe.h b/drivers/gpu/drm/loongson/lsdc_probe.h
>> index 8bb6de2e3c64..8c630c5c90ce 100644
>> --- a/drivers/gpu/drm/loongson/lsdc_probe.h
>> +++ b/drivers/gpu/drm/loongson/lsdc_probe.h
>> @@ -9,4 +9,6 @@
>>   /* Helpers for chip detection */
>>   unsigned int loongson_cpu_get_prid(u8 *impl, u8 *rev);
>>
>> +enum loongson_chip_id loongson_chip_id_fixup(enum loongson_chip_id chip_id);
>> +
>>   #endif
>> --
>> 2.34.1
>>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ