blob: 06d6fdc140dd8e8095fa87383da9bcad291722cc [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{ name: "edn",
clock_primary: "clk_i",
bus_device: "tlul",
bus_host: "none",
param_list: [
{ name: "NumEndPoints",
desc: "The number of endpoint ports supported by this EDN instance",
type: "int",
default: "64",
local: "true"
},
{ name: "BootInsCmd",
desc: "Default boot-time CSRNG application interface instantiate command",
type: "int",
default: "1",
local: "true"
},
{ name: "BootGenCmd",
desc: "Default boot-time CSRNG application interface generate command",
type: "int",
default: "12291",
local: "true"
},
],
interrupt_list: [
{ name: "edn_cmd_req_done"
desc: "Asserted when a software CSRNG request has completed."}
{ name: "edn_fifo_err"
desc: "Asserted when a FIFO error occurs."}
],
inter_signal_list: [
{ struct: "csrng", // csrng_req_t, csrng_rsp_t
type: "req_rsp",
name: "csrng_cmd",
act: "req",
width: "1",
package: "csrng_pkg",
desc: '''
EDN supports a signal CSRNG application interface.
''',
}
{ struct: "edn", // edn_req_t, edn_rsp_t
type: "req_rsp",
name: "edn",
act: "rsp",
width: "4",
desc: '''
The collection of peripheral ports supported by edn. The width (4)
indicates the number of peripheral ports on a single instance.
Due to limitations in the parametrization of top-level interconnects
this value is not currently parameterizable. However, the number
of peripheral ports may change in a future revision.
''',
package: "edn_pkg",
}
],
regwidth: "32",
registers: [
{ name: "REGEN",
desc: "Register write enable for all control registers",
swaccess: "rw1c",
hwaccess: "hro",
fields: [
{ bits: "0",
desc: '''
When true, the BOOT_REQ_DIS and BCAST_MODE_DIS fields within the CTRL registers
can be modified. When false, this field read-only. Defaults true, write one to clear.
Note that this needs to be cleared after initial configuration at boot in order to
lock in the listed register settings.
'''
resval: 1
},
]
},
{ name: "CTRL",
desc: "EDN control register",
swaccess: "rw",
hwaccess: "hro",
tags: [ // Exclude from writes to these bits since hardware actions will start.
"excl:CsrAllTests:CsrExclWrite"]
fields: [
{ bits: "0",
name: "EDN_ENABLE",
desc: '''
Setting this bit enables the EDN module.
'''
},
{ bits: "1",
name: "CMD_FIFO_RST",
desc: '''
Setting this bit clears the three command FIFOs: the SW_CMD_REQ FIFO, the
RESEED_CMD FIFO, and the GENERATE_CMD FIFO. This bit must be cleared by
software before any further commands can be issued to these FIFOs.
'''
}
{ bits: "2",
name: "AUTO_REQ_MODE",
desc: '''
Setting this bit will enable the EDN block to automatically send another request to
CSRNG application interface. It is assumed that the command has been set up ahead of
time, such that when the previous command has returned ack, then a new command will be
send out again without software intervention. It is expected that the generate command
will be sent repeatedly so that a continuous supply of entropy can be delivered to the
endpoints.
'''
},
{ bits: "3",
name: "BOOT_REQ_DIS",
desc: '''
Setting this bit will disable the feature where the EDN block will automatically
send a boot-time request to the CSRNG application interface.
The purpose of this feature is to request entropy as fast as possible after reset,
and during chip boot-time.
'''
},
]
},
{ name: "SUM_STS",
desc: "EDN summary status register",
swaccess: "rw",
hwaccess: "hwo",
tags: [ // EDN internal HW can modify status register
"excl:CsrAllTests:CsrExclCheck"]
fields: [
{ bits: "0",
name: "REQ_MODE_SM_STS",
desc: '''
This bit reflects the status of the EDN command state machine. This bit is asserted
whenever the the state machine is actively managing commands in either auto
request mode, or boot-time request mode. After the state machine has
been suspended, this status bit should be polled to know when the last remaining
state machine command has been completed, at which point is safe to issue custom
commands via the software command forwarding interface. A value of zero indicates
that all commands have completed, and the state machine is idle.
'''
}
{ bits: "1",
name: "BOOT_INST_ACK",
desc: '''
This bit indicates that the EDN state machine has started the instantiation
process. If this bit is asserted it means the state machine has started in
boot-time request mode and that the CSRNG has confirmed that this
EDN will be the next application to receive a seed from the entropy_src IP.
'''
}
{ bits: "31",
name: "INTERNAL_USE",
desc: "This bit is for internal use only."
}
]
},
{ name: "SW_CMD_REQ",
desc: "EDN csrng app command request register",
swaccess: "wo",
hwaccess: "hro",
hwext: "true",
hwqe: "true",
regwen: "REGEN",
fields: [
{ bits: "31:0",
name: "SW_CMD_REQ",
desc: '''
Any CSRNG action can be initiated by writing a CSRNG command to this
register. The application interface must wait for the "ack" to
return before issuing new commands. This interface is intended
to be controlled solely by software. If AUTO_REQ_MODE is set, this
register will have no effect on operation.
'''
}
]
},
{ name: "SW_CMD_STS",
desc: "EDN command status register",
swaccess: "ro",
hwaccess: "hwo",
fields: [
{ bits: "0",
name: "CMD_RDY",
desc: '''
This bit indicates when the command interface is ready to accept commands.
'''
resval: "1"
}
{ bits: "1",
name: "CMD_STS",
desc: '''
This one bit field is the status code returned with the application command ack.
It is updated each time a command ack is asserted on the CSRNG interface.
0b0: Request completed successfully
0b1: Request completed with an error
'''
resval: "0"
}
]
},
{ name: "RESEED_CMD",
desc: "EDN csrng reseed command register",
swaccess: "wo",
hwaccess: "hro",
hwext: "true",
hwqe: "true",
regwen: "REGEN",
fields: [
{ bits: "31:0",
name: "RESEED_CMD",
desc: '''
Writing this register will fill a FIFO with up to 13 command words (32b words).
This FIFO will be used to automatically send out a reseed command to the CSRNG
application interface when in AUTO_REQ_MODE. This command will be sent only after
the MAX_NUM_REQS_BETWEEN_RESEEDS counter value has reached zero. On overflow this
FIFO pops the oldest word from the previous command. Updated commands can be inserted
by pushing 13 command words into the FIFO, pushing the previous command out.
'''
}
]
},
{ name: "GENERATE_CMD",
desc: "EDN csrng generate command register",
swaccess: "wo",
hwaccess: "hro",
hwext: "true",
hwqe: "true",
regwen: "REGEN",
fields: [
{ bits: "31:0",
name: "GENERATE_CMD",
desc: '''
Writing this register will fill a FIFO with up to 13 command words (32b words).
This FIFO will be used to automatically send out a generate command to the CSRNG
appl interface when in AUTO_REQ_MODE. This command will be sent only after
receiving a command ack from the previous command. On overflow this
FIFO pops the oldest word from the previous command. Updated commands can be inserted
by pushing 13 command words into the FIFO, pushing the previous command out.
'''
}
]
},
{ name: "MAX_NUM_REQS_BETWEEN_RESEEDS",
desc: "EDN maximum number of requests between reseeds register",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
fields: [
{ bits: "31:0",
name: "MAX_NUM_REQS_BETWEEN_RESEEDS",
desc: '''
Setting this field will set the number of generate requests that can be made
to CSRNG before a reseed request is made. This value only has meaning when in
AUTO_REQ_MODE. This register supports a maximum of 2^32 requests between reseeds.
This register will be used by a counter that counts down, triggering an
automatic reseed when it reaches zero.
'''
}
]
},
{
name: "ERR_CODE",
desc: "Hardware detection of error conditions status register",
swaccess: "rw",
hwaccess: "hwo",
fields: [
{ bits: "0",
name: "SFIFO_RESCMD_ERR",
desc: '''
This bit will be set to one when an error has been detected for the
reseed command FIFO. The type of error is reflected in the type status
bits (bits 28 through 30 of this register).
This bit will stay set until firmware clears it.
'''
}
{ bits: "1",
name: "SFIFO_GENCMD_ERR",
desc: '''
This bit will be set to one when an error has been detected for the
generate command FIFO. The type of error is reflected in the type status
bits (bits 28 through 30 of this register).
This bit will stay set until firmware clears it.
'''
}
{ bits: "28",
name: "FIFO_WRITE_ERR",
desc: '''
This bit will be set to one when any of the source bits (bits 0 through 1 of this
this register) are asserted as a result of an error pulse generated from
any full FIFO that has been recieved a write pulse.
This bit will stay set until firmware clears it.
'''
}
{ bits: "29",
name: "FIFO_READ_ERR",
desc: '''
This bit will be set to one when any of the source bits (bits 0 through 1 of this
this register) are asserted as a result of an error pulse generated from
any empty FIFO that has recieved a read pulse.
This bit will stay set until firmware clears it.
'''
}
{ bits: "30",
name: "FIFO_STATE_ERR",
desc: '''
This bit will be set to one when any of the source bits (bits 0 through 1 of this
this register) are asserted as a result of an error pulse generated from
any FIFO where both the empty and full status bits are set.
This bit will stay set until firmware clears it.
'''
}
]
},
]
}