Skip to content
  • Andre Wolokita's avatar
    hwrng: omap - Change RNG_CONFIG_REG to RNG_CONTROL_REG when checking and disabling TRNG · 1a5addfe
    Andre Wolokita authored
    
    
    In omap4_rng_init(), a check of bit 10 of the RNG_CONFIG_REG is done to determine
    whether the RNG is running. This is suspicious firstly due to the use of
    RNG_CONTROL_ENABLE_TRNG_MASK and secondly because the same mask is written to
    RNG_CONTROL_REG after configuration of the FROs. Similar suspicious logic is
    repeated in omap4_rng_cleanup() when RNG_CONTROL_REG masked with
    RNG_CONTROL_ENABLE_TRNG_MASK is read, the same mask bit is cleared, and then
    written to RNG_CONFIG_REG. Unless the TRNG is enabled with one bit in RNG_CONTROL
    and disabled with another in RNG_CONFIG and these bits are mirrored in some way,
    I believe that the TRNG is not really shutting off.
    
    Apart from the strange logic, I have reason to suspect that the OMAP4 related
    code in this driver is driving an Inside Secure IP hardware RNG and strongly
    suspect that bit 10 of RNG_CONFIG_REG is one of the bits configuring the
    sampling rate of the FROs. This option is by default set to 0 and is not being
    set anywhere in omap-rng.c. Reading this bit during omap4_rng_init() will
    always return 0. It will remain 0 because ~(value of TRNG_MASK in control) will
    always be 0, because the TRNG is never shut off. This is of course presuming
    that the OMAP4 features the Inside Secure IP.
    
    I'm interested in knowing what the guys at TI think about this, as only they
    can confirm or deny the detailed structure of these registers.
    
    Signed-off-by: default avatarAndre Wolokita <Andre.Wolokita@analog.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    1a5addfe