[keymgr] Widen sw_binding and salt registers
Address #5194
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/keymgr/data/keymgr.hjson b/hw/ip/keymgr/data/keymgr.hjson
index 667c09a..ba92a2e 100644
--- a/hw/ip/keymgr/data/keymgr.hjson
+++ b/hw/ip/keymgr/data/keymgr.hjson
@@ -175,9 +175,14 @@
randcount: "256",
randtype: "data",
},
-
- { name: "NumInReg",
- desc: "Number of Registers for SW inputs (SW binding / keyID / Salt)",
+ { name: "NumSaltReg",
+ desc: "Number of Registers for SW inputs (Salt)",
+ type: "int",
+ default: "4",
+ local: "true"
+ },
+ { name: "NumSwBindingReg",
+ desc: "Number of Registers for SW inputs (SW binding)",
type: "int",
default: "4",
local: "true"
@@ -357,7 +362,8 @@
},
// The following can potentially be replaced by a RAM if it gets too large
- // Currently there are 32b * NumInReg * 3 bits for inputs
+ // Currently there are 32b * NumSaltReg bits for salt inputs
+ // 32b * NumSwBindingReg bits for software binding inputs
// 32b * NumOutReg * 2 (if key shares desired) for outputs
// 32b * NumOutReg * NumCryptos * 2 (if key shares desired) for hidden key bus
// This totals to over 2kb of storage
@@ -394,7 +400,7 @@
The software binding is locked by software and unlocked by hardware upon a successful advance operation.
''',
- count: "NumInReg",
+ count: "NumSwBindingReg",
swaccess: "rw",
hwaccess: "hro",
fields: [
@@ -416,7 +422,7 @@
desc: '''
Salt value used as part of output generation
''',
- count: "NumInReg",
+ count: "NumSaltReg",
swaccess: "rw",
hwaccess: "hro",
fields: [
diff --git a/hw/ip/keymgr/keymgr.core b/hw/ip/keymgr/keymgr.core
index f24c945..0d1c4cb 100644
--- a/hw/ip/keymgr/keymgr.core
+++ b/hw/ip/keymgr/keymgr.core
@@ -14,7 +14,6 @@
- lowrisc:prim:lc_sync
- lowrisc:ip:keymgr_pkg
files:
- - rtl/keymgr_reg_pkg.sv
- rtl/keymgr_reg_top.sv
- rtl/keymgr_sideload_key_ctrl.sv
- rtl/keymgr_sideload_key.sv
diff --git a/hw/ip/keymgr/keymgr_pkg.core b/hw/ip/keymgr/keymgr_pkg.core
index 2a4ddef..9e02a72 100644
--- a/hw/ip/keymgr/keymgr_pkg.core
+++ b/hw/ip/keymgr/keymgr_pkg.core
@@ -13,6 +13,7 @@
- lowrisc:ip:otp_ctrl_pkg
- lowrisc:ip:flash_ctrl_pkg
files:
+ - rtl/keymgr_reg_pkg.sv
- rtl/keymgr_pkg.sv
file_type: systemVerilogSource
diff --git a/hw/ip/keymgr/rtl/keymgr_pkg.sv b/hw/ip/keymgr/rtl/keymgr_pkg.sv
index 18d0d6f..7577e4a 100644
--- a/hw/ip/keymgr/rtl/keymgr_pkg.sv
+++ b/hw/ip/keymgr/rtl/keymgr_pkg.sv
@@ -11,7 +11,8 @@
parameter int DigestWidth = 128; // uses truncated hash
parameter int KmacDataIfWidth = 64; // KMAC interface data width
parameter int KeyMgrStages = 3; // Number of key manager stages (creator, ownerInt, owner)
- parameter int SwBindingWidth = 128; // Size of rom_ext hash, truncated
+ parameter int SwBindingWidth = 32 * keymgr_reg_pkg::NumSwBindingReg;
+ parameter int SaltWidth = 32 * keymgr_reg_pkg::NumSaltReg;
parameter int Shares = 2; // number of key shares
parameter int EdnWidth = edn_pkg::ENDPOINT_BUS_WIDTH;
@@ -71,7 +72,7 @@
parameter int AdvDataWidth = SwBindingWidth + 2*KeyWidth + DevIdWidth + HealthStateWidth;
parameter int IdDataWidth = KeyWidth;
// key version + salt + key ID + constant
- parameter int GenDataWidth = 32 + 128 + KeyWidth*2;
+ parameter int GenDataWidth = 32 + SaltWidth + KeyWidth*2;
parameter int StageWidth = $clog2(KeyMgrStages);
// Max Payload Width to derivation function
diff --git a/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv b/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
index c485ec0..f28a4bf 100644
--- a/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
+++ b/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
@@ -7,7 +7,8 @@
package keymgr_reg_pkg;
// Param list
- parameter int NumInReg = 4;
+ parameter int NumSaltReg = 4;
+ parameter int NumSwBindingReg = 4;
parameter int NumOutReg = 8;
parameter int NumKeyVersion = 1;
parameter int NumAlerts = 2;