tpmcrb_transmit() read CRB_CTRL_STS before requesting locality 0. An AMD Pluton fTPM (FrameWork Desktop) using the plain CRB start method reads the control area as all-ones until locality is assigned, so bit 0 looks like a stuck tpmSts and every command failed with EIO.
With RANDOM_ENABLE_TPM the harvester retries every 10 seconds, so this printed "Device has Error bit set" forever.