• Yipeng Zou's avatar
    irqchip/mbigen: Fix mbigen node address layout · 6be6cba9
    Yipeng Zou authored
    The mbigen interrupt chip has its per node registers located in a
    contiguous region of page sized chunks. The code maps them into virtual
    address space as a contiguous region and determines the address of a node
    by using the node ID as index.
    
                        mbigen chip
           |-----------------|------------|--------------|
       mgn_node_0         mgn_node_1     ...         mgn_node_i
    |--------------|   |--------------|       |----------------------|
    [0x0000, 0x0x0FFF] [0x1000, 0x1FFF]    [i*0x1000, (i+1)*0x1000 - 1]
    
    This works correctly up to 10 nodes, but then fails because the 11th's
    array slot is used for the MGN_CLEAR registers.
    
                             mbigen chip
        |-----------|--------|--------|---------------|--------|
    mgn_node_0  mgn_node_1  ...  mgn_clear_register  ...   mgn_node_i
                                |-----------------|
                                 [0xA000, 0xAFFF]
    
    Skip the MGN_CLEAR register space when calculating the offset for node IDs
    greater than or equal to ten.
    
    Fixes: a6c2f87b ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
    Signed-off-by: default avatarYipeng Zou <zouyipeng@huawei.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/all/20240730014400.1751530-1-zouyipeng@huawei.com
    6be6cba9
irq-mbigen.c 9.06 KB