blob: 83e4754565846dcee5e5acae2e35911539de5f7e [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: "rbox",
clock_primary: "clk_i",
other_clock_list: [
"clk_aon_i"
]
bus_device: "tlul",
bus_host: "none",
reset_primary: "rst_ni",
other_reset_list: [
"rst_slow_ni"
],
interrupt_list: [
{ name: "rbox_intr_o",
desc: "combo or keyboard triggered interrupt",
}
],
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_l_i", desc: "ec_rst_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" }
],
available_output_list: [
{ name: "bat_disable", desc: "Battery is disconnected" }
{ name: "ec_rst_l_o", desc: "ec_rst_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" }
],
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: "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",
}
]
}
{ 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: "bat_disable_1",
desc: "0: disable ;1: enable ",
}
{ bits: "7",
name: "ec_rst_l_1",
desc: "0: disable ;1: enable ",
}
{ bits: "8",
name: "pwrb_out_1",
desc: "0: disable ;1: enable ",
}
{ bits: "9",
name: "key0_out_1",
desc: "0: disable ;1: enable ",
}
{ bits: "10",
name: "key1_out_1",
desc: "0: disable ;1: enable ",
}
{ bits: "11",
name: "key2_out_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",
}
]
}
{ 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",
}
]
}
{ name: "pin_in_value",
desc: "For SW to read the rbox inputs like GPIO",
swaccess: "ro",
hwaccess: "hwo",
resval: "0",
fields: [
{ bits: "0",
name: "ac_present",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "1",
name: "ec_rst_l",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "2",
name: "pwrb_in",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "3",
name: "key0_in",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "4",
name: "key1_in",
desc: "raw ac_present value; before the invert logic",
}
{ bits: "5",
name: "key2_in",
desc: "raw ac_present 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: "rbox",
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: "rbox",
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: "rbox",
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",
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",
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",
}
]
}
],
}