blob: 4d1eb9c8bb02d4f69cc57f27eb329c62125e9432 [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: "sysrst_ctrl",
clock_primary: "clk_i",
other_clock_list: [
"clk_aon_i"
]
bus_interfaces: [
{ protocol: "tlul", direction: "device" }
],
reset_primary: "rst_ni",
other_reset_list: [
"rst_aon_ni"
],
interrupt_list: [
{ name: "sysrst_ctrl",
desc: "common interrupt triggered by combo or keyboard actions",
}
],
alert_list: [
{ name: "fatal_fault",
desc: '''
This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected.
'''
}
],
wakeup_list: [
{ name: "gsc_wk",
desc: "user directed wakeup",
}
],
reset_request_list: [
{ name: "gsc_rst",
desc: "user directed reset"
},
],
param_list: [
{ name: "NumCombo",
type: "int",
default: "4",
desc: "Number of keyboard combos",
local: "true",
}
],
available_input_list: [
{ name: "ac_present", desc: "A/C power is present" }
{ name: "ec_rst_in_l", desc: "ec_rst_in_l as an input from the open drain IO" }
{ name: "key0_in", desc: "VolUp button in tablet; column output from the EC in a laptop" }
{ name: "key1_in", desc: "VolDown button in tablet; row input from keyboard matrix in a laptop" }
{ name: "key2_in", desc: "TBD button in tablet; row input from keyboard matrix in a laptop" }
{ name: "pwrb_in", desc: "Power button in both tablet and laptop" }
{ name: "lid_open", desc: "Lid is open" }
],
available_output_list: [
{ name: "bat_disable", desc: "Battery is disconnected" }
{ name: "ec_rst_out_l", desc: "ec_rst_out_l as an output to the open drain IO" }
{ name: "key0_out", desc: "Passthrough from key0_in, can be configured to invert" }
{ name: "key1_out", desc: "Passthrough from key1_in, can be configured to invert" }
{ name: "key2_out", desc: "Passthrough from key2_in, can be configured to invert" }
{ name: "pwrb_out", desc: "Passthrough from pwrb_in, can be configured to invert" }
{ name: "z3_wakeup", desc: "To enter Z3 mode and exit from Z4 sleep mode" }
],
inter_signal_list: [
{ name: "gsc_wk",
package: "",
struct: "logic",
act: "req"
type: "uni",
width: "1"
}
{ name: "gsc_rst",
package: "",
struct: "logic",
act: "req"
type: "uni",
width: "1"
}
],
regwidth: "32",
registers: [
{ name: "REGWEN",
desc: "Configuration write enable control register",
swaccess: "rw0c",
hwaccess: "none",
resval: "1",
fields: [
{ bits: "0",
name: "write_en",
desc: '''config write enable.
0: cfg is locked(not writable); 1: cfg is not locked(writable)
''',
}
]
}
{ name: "ec_rst_ctl",
desc: "EC reset control register",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "2000",
fields: [
{ bits: "15:0",
name: "ec_rst_pulse",
desc: "Configure the pulse width of ec_rst_l. 10-200ms, each step is 5us(200KHz clock)",
}
],
}
{ name: "ulp_ac_debounce_ctl",
desc: "Ultra low power AC debounce control register",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "8000",
fields: [
{ bits: "15:0",
name: "ulp_ac_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
],
}
{ name: "ulp_lid_debounce_ctl",
desc: "Ultra low power lid debounce control register",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "8000",
fields: [
{ bits: "15:0",
name: "ulp_lid_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
],
}
{ name: "ulp_pwrb_debounce_ctl",
desc: "Ultra low power pwrb debounce control register",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "8000",
fields: [
{ bits: "15:0",
name: "ulp_pwrb_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
],
}
{ name: "ulp_ctl",
desc: "Ultra low power control register",
swaccess: "rw",
hwaccess: "hro",
resval: "0",
fields: [
{ bits: "0",
name: "ulp_enable",
desc: "0: disable ULP wakeup feature and reset the ULP FSM; 1: enable ULP wakeup feature",
}
],
}
{ name: "ulp_status",
desc: "Ultra low power status",
swaccess: "rw1c",
hwaccess: "hwo",
resval: "0",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
fields: [
{ bits: "0",
name: "ulp_wakeup",
desc: "0: ULP wakeup not detected; 1: ULP wakeup event is detected",
}
],
}
{ name: "wk_status",
desc: "wakeup status",
swaccess: "rw1c",
hwaccess: "hrw",
resval: "0",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
fields: [
{ bits: "0",
name: "wakeup_sts",
desc: "0: wakeup event not detected; 1: wakeup event is detected",
}
],
}
{ name: "key_invert_ctl",
desc: "configure key input output invert property",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "0",
name: "key0_in",
desc: "0: don't invert; 1: invert",
}
{ bits: "1",
name: "key0_out",
desc: "0: don't invert; 1: invert",
}
{ bits: "2",
name: "key1_in",
desc: "0: don't invert; 1: invert",
}
{ bits: "3",
name: "key1_out",
desc: "0: don't invert; 1: invert",
}
{ bits: "4",
name: "key2_in",
desc: "0: don't invert; 1: invert",
}
{ bits: "5",
name: "key2_out",
desc: "0: don't invert; 1: invert",
}
{ bits: "6",
name: "pwrb_in",
desc: "0: don't invert; 1: invert",
}
{ bits: "7",
name: "pwrb_out",
desc: "0: don't invert; 1: invert",
}
{ bits: "8",
name: "ac_present",
desc: "0: don't invert; 1: invert",
}
{ bits: "9",
name: "bat_disable",
desc: "0: don't invert; 1: invert",
}
{ bits: "10",
name: "lid_open",
desc: "0: don't invert; 1: invert",
}
{ bits: "11",
name: "z3_wakeup",
desc: "0: don't invert; 1: invert",
}
]
}
{ name: "pin_allowed_ctl",
desc: "configure the allowed pinout override value",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "2",
fields: [
{ bits: "0",
name: "bat_disable_0",
desc: "0: disable; 1: enable",
}
{ bits: "1",
name: "ec_rst_l_0",
desc: "0: disable; 1: enable",
}
{ bits: "2",
name: "pwrb_out_0",
desc: "0: disable; 1: enable",
}
{ bits: "3",
name: "key0_out_0",
desc: "0: disable; 1: enable",
}
{ bits: "4",
name: "key1_out_0",
desc: "0: disable; 1: enable",
}
{ bits: "5",
name: "key2_out_0",
desc: "0: disable; 1: enable",
}
{ bits: "6",
name: "z3_wakeup_0",
desc: "0: disable; 1: enable",
}
{ bits: "7",
name: "bat_disable_1",
desc: "0: disable; 1: enable",
}
{ bits: "8",
name: "ec_rst_l_1",
desc: "0: disable; 1: enable",
}
{ bits: "9",
name: "pwrb_out_1",
desc: "0: disable; 1: enable",
}
{ bits: "10",
name: "key0_out_1",
desc: "0: disable; 1: enable",
}
{ bits: "11",
name: "key1_out_1",
desc: "0: disable; 1: enable",
}
{ bits: "12",
name: "key2_out_1",
desc: "0: disable; 1: enable",
}
{ bits: "13",
name: "z3_wakeup_1",
desc: "0: disable; 1: enable",
}
]
}
{ name: "pin_out_ctl",
desc: "configure the pin out directly to override the function",
swaccess: "rw",
hwaccess: "hro",
resval: "2",
fields: [
{ bits: "0",
name: "bat_disable",
desc: "0: disable override; 1: enable override",
}
{ bits: "1",
name: "ec_rst_l",
desc: "0: disable override; 1: enable override",
}
{ bits: "2",
name: "pwrb_out",
desc: "0: disable override; 1: enable override",
}
{ bits: "3",
name: "key0_out",
desc: "0: disable override; 1: enable override",
}
{ bits: "4",
name: "key1_out",
desc: "0: disable override; 1: enable override",
}
{ bits: "5",
name: "key2_out",
desc: "0: disable override; 1: enable override",
}
{ bits: "6",
name: "z3_wakeup",
desc: "0: disable override; 1: enable override",
}
]
}
{ name: "pin_out_value",
desc: "confiure the pin out value directly to override the function",
swaccess: "rw",
hwaccess: "hro",
resval: "0",
fields: [
{ bits: "0",
name: "bat_disable",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "1",
name: "ec_rst_l",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "2",
name: "pwrb_out",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "3",
name: "key0_out",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "4",
name: "key1_out",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "5",
name: "key2_out",
desc: "0: override to 1b0; 1: override to 1b1",
}
{ bits: "6",
name: "z3_wakeup",
desc: "0: override to 1b0; 1: override to 1b1",
}
]
}
{ name: "pin_in_value",
desc: "For SW to read the sysrst_ctrl inputs like GPIO",
swaccess: "ro",
hwaccess: "hwo",
resval: "0",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrAllTests:CsrExclCheck"],
fields: [
{ bits: "0",
name: "ac_present",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "1",
name: "ec_rst_l",
desc: "raw ec_rst_l value; before the invert logic",
}
{ bits: "2",
name: "pwrb_in",
desc: "raw pwrb_in value; before the invert logic",
}
{ bits: "3",
name: "key0_in",
desc: "raw key0_in value; before the invert logic",
}
{ bits: "4",
name: "key1_in",
desc: "raw key1_in value; before the invert logic",
}
{ bits: "5",
name: "key2_in",
desc: "raw key2_in value; before the invert logic",
}
{ bits: "6",
name: "lid_open",
desc: "raw lid_open value; before the invert logic",
}
]
}
{ name: "key_intr_ctl",
desc: "Define the keys or inputs that can trigger the interrupt ",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "0",
name: "pwrb_in_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "1",
name: "key0_in_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "2",
name: "key1_in_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "3",
name: "key2_in_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "4",
name: "ac_present_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "5",
name: "ec_rst_l_H2L",
desc: "0: disable, 1: enable",
}
{ bits: "8",
name: "pwrb_in_L2H",
desc: "0: disable, 1: enable",
}
{ bits: "9",
name: "key0_in_L2H",
desc: "0: disable, 1: enable",
}
{ bits: "10",
name: "key1_in_L2H",
desc: "0: disable, 1: enable",
}
{ bits: "11",
name: "key2_in_L2H",
desc: "0: disable, 1: enable",
}
{ bits: "12",
name: "ac_present_L2H",
desc: "0: disable, 1: enable",
}
{ bits: "13",
name: "ec_rst_l_L2H",
desc: "0: disable, 1: enable",
}
]
}
{ name: "key_intr_debounce_ctl",
desc: "Debounce timer control register for key-triggered interrupt",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "15:0",
name: "debounce_timer",
desc: "Define the timer valure so that the key or input is not oscillating for 0-200ms, each step is 5us(200KHz clock)",
}
],
}
{ name: "auto_block_debounce_ctl",
desc: "Debounce timer control register for pwrb_in H2L transition",
swaccess: "rw",
hwaccess: "hro",
hwqe: "true",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "15:0",
name: "debounce_timer",
desc: "Define the timer valure so that pwrb_in is not oscillating for 0-200ms, each step is 5us(200KHz clock)",
}
{ bits: "16",
name: "auto_block_enable",
desc: "0: disable, 1: enable",
}
],
}
{ name: "auto_block_out_ctl",
desc: "confiure the key outputs to auto-override and their value",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "0",
name: "key0_out_sel",
desc: "0: disable auto-block; 1: enable auto-block",
}
{ bits: "1",
name: "key1_out_sel",
desc: "0: disable auto-block; 1: enable auto-block",
}
{ bits: "2",
name: "key2_out_sel",
desc: "0: disable auto-block; 1: enable auto-block",
}
{ bits: "4",
name: "key0_out_value",
desc: "0: override to 1'b0; 1: override to 1'b1",
}
{ bits: "5",
name: "key1_out_value",
desc: "0: override to 1'b0; 1: override to 1'b1",
}
{ bits: "6",
name: "key2_out_value",
desc: "0: override to 1'b0; 1: override to 1'b1",
}
]
}
{ multireg: {
name: "com_sel_ctl",
desc: '''To define the keys that trigger the combo
[0]: key0_in_sel
[1]: key1_in_sel
[2]: key2_in_sel
[3]: pwrb_in_sel
[4]: ac_present_sel
HW will detect H2L transition in the combo use case
''',
count: "NumCombo",
cname: "sysrst_ctrl",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "0",
name: "key0_in_sel",
desc: "0: disable, 1: enable",
}
{ bits: "1",
name: "key1_in_sel",
desc: "0: disable, 1: enable",
}
{ bits: "2",
name: "key2_in_sel",
desc: "0: disable, 1: enable",
}
{ bits: "3",
name: "pwrb_in_sel",
desc: "0: disable, 1: enable",
}
{ bits: "4",
name: "ac_present_sel",
desc: "0: disable, 1: enable",
}
],
}
}
{ multireg: {
name: "com_det_ctl",
desc: '''To define the duration that the combo should be pressed
0-60s, each step is 5us(200KHz clock)
''',
count: "NumCombo",
cname: "sysrst_ctrl",
hwqe: "true",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "31:0",
name: "detection_timer",
desc: "0-60s, each step is 5us(200KHz clock)",
}
],
}
}
{ multireg: {
name: "com_out_ctl",
desc: '''To define the actions once the combo is detected
[0]: bat_disable
[1]: interrupt
[2]: ec_rst
[3]: gsc_rst
''',
count: "NumCombo",
cname: "sysrst_ctrl",
swaccess: "rw",
hwaccess: "hro",
regwen: "REGWEN",
resval: "0",
fields: [
{ bits: "0",
name: "bat_disable",
desc: "0: disable, 1: enable",
}
{ bits: "1",
name: "interrupt",
desc: "0: disable, 1: enable",
}
{ bits: "2",
name: "ec_rst",
desc: "0: disable, 1: enable",
}
{ bits: "3",
name: "gsc_rst",
desc: "0: disable, 1: enable",
}
],
}
}
{ name: "combo_intr_status",
desc: "combo interrupt source",
swaccess: "rw1c",
hwaccess: "hwo",
resval: "0",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
fields: [
{ bits: "0",
name: "combo0_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "1",
name: "combo1_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "2",
name: "combo2_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "3",
name: "combo3_H2L",
desc: "0: case not detected;1: case detected",
}
]
}
{ name: "key_intr_status",
desc: "key interrupt source",
swaccess: "rw1c",
hwaccess: "hwo",
resval: "0",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
fields: [
{ bits: "0",
name: "pwrb_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "1",
name: "key0_in_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "2",
name: "key1_in_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "3",
name: "key2_in_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "4",
name: "ac_present_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "5",
name: "ec_rst_l_H2L",
desc: "0: case not detected;1: case detected",
}
{ bits: "6",
name: "pwrb_L2H",
desc: "0: case not detected;1: case detected",
}
{ bits: "7",
name: "key0_in_L2H",
desc: "0: case not detected;1: case detected",
}
{ bits: "8",
name: "key1_in_L2H",
desc: "0: case not detected;1: case detected",
}
{ bits: "9",
name: "key2_in_L2H",
desc: "0: case not detected;1: case detected",
}
{ bits: "10",
name: "ac_present_L2H",
desc: "0: case not detected;1: case detected",
}
{ bits: "11",
name: "ec_rst_l_L2H",
desc: "0: case not detected;1: case detected",
}
]
}
],
}