crypto: ccp - Verify access to device registers before initializing
Check early whether device registers can be accessed. Some BIOSes have a broken security policy that prevents access to the device registers, and return values from ioread() can be misinterpreted. If a read of a feature register returns a -1, we may not be able to access any device register, so report the problem and suggestion, and return. For the PSP, the feature register is checked. For the CCP, the queue register is checked. Signed-off-by: Gary R Hook <gary.hook@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -789,6 +789,18 @@ static int ccp5_init(struct ccp_device *ccp)
|
||||
|
||||
/* Find available queues */
|
||||
qmr = ioread32(ccp->io_regs + Q_MASK_REG);
|
||||
/*
|
||||
* Check for a access to the registers. If this read returns
|
||||
* 0xffffffff, it's likely that the system is running a broken
|
||||
* BIOS which disallows access to the device. Stop here and fail
|
||||
* the initialization (but not the load, as the PSP could get
|
||||
* properly initialized).
|
||||
*/
|
||||
if (qmr == 0xffffffff) {
|
||||
dev_notice(dev, "ccp: unable to access the device: you might be running a broken BIOS.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; (i < MAX_HW_QUEUES) && (ccp->cmd_q_count < ccp->max_q_count); i++) {
|
||||
if (!(qmr & (1 << i)))
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user