| /* Copyright 2015 The ChromiumOS Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "key_ladder.h" |
| #include "debug_printf.h" |
| #include "registers.h" |
| /* #include "setup.h" */ |
| |
| #include "dcrypto.h" |
| |
| void key_ladder_step(uint32_t cert, const uint32_t *input) |
| { |
| uint32_t flags; |
| |
| GREG32(KEYMGR, SHA_ITOP) = 0; /* Clear status. */ |
| |
| VERBOSE("Cert %2u: ", cert); |
| |
| GWRITE_FIELD(KEYMGR, SHA_USE_CERT, INDEX, cert); |
| GWRITE_FIELD(KEYMGR, SHA_USE_CERT, ENABLE, 1); |
| GWRITE_FIELD(KEYMGR, SHA_CFG_EN, INT_EN_DONE, 1); |
| GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_GO, 1); |
| |
| if (input) { |
| int i; |
| |
| for (i = 0; i < 8; ++i) |
| GREG32(KEYMGR, SHA_INPUT_FIFO) = *input++; |
| |
| GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_STOP, 1); |
| } |
| |
| while (!GREG32(KEYMGR, SHA_ITOP)) |
| ; |
| |
| GREG32(KEYMGR, SHA_ITOP) = 0; /* Clear status. */ |
| |
| flags = GREG32(KEYMGR, HKEY_ERR_FLAGS); |
| if (flags) |
| debug_printf("Cert %2u: fail %x\n", cert, flags); |
| else |
| VERBOSE("flags %x\n", flags); |
| } |