[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Unbootable system after fresh install on Sun Ultra 45 workstation



(Please keep the list CC'ed)

Hi Marcello,

On Mon, 2025-05-19 at 18:51 +0200, Marcelo Bezerra wrote:
> I wonder if the code in
> https://github.com/torvalds/linux/blob/a5806cd506af5a7c19bcd596e4708b5c464bfd21/arch/sparc/lib/crc32_glue.c#L62
> should be returning non 0 when it lacks HWCAP_SPARC_CRYPTO or fails
> the CFR_CRC32C checks.
> 
> static int __init crc32_sparc_init(void)
> {
>     unsigned long cfr;
> 
>     if (!(sparc64_elf_hwcap & HWCAP_SPARC_CRYPTO))
>         return 0; <=== here
> 
>     __asm__ __volatile__("rd %%asr26, %0" : "=r" (cfr));
>     if (!(cfr & CFR_CRC32C))
>         return 0; <=== and here
> 
>     static_branch_enable(&have_crc32c_opcode);
>     pr_info("Using sparc64 crc32c opcode optimized CRC32C implementation\n");
>     return 0;
> }
> arch_initcall(crc32_sparc_init);

This is actually correct as the conditional checks only determine whether
static_branch_enable() is called or not and as you can see from the code
above, that only happens when both the flags HWCAP_SPARC_CRYPTO and
CFR_CRC32C are present.

The code is similar to the one on powerpc which also returns zero even when
no hardware support for crc32 instructions was found [1].

Adrian

> [1] https://elixir.bootlin.com/linux/v6.14.7/source/arch/powerpc/lib/crc32-glue.c#L73

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913


Reply to: