• Vladimir Oltean's avatar
    net: dsa: ocelot: move devm_request_threaded_irq() to felix_setup() · 0367a177
    Vladimir Oltean authored
    The current placement of devm_request_threaded_irq() is inconvenient.
    It is between the allocation of the "felix" structure and
    dsa_register_switch(), both of which we'd like to refactor into a
    function that's common for all switches. But the IRQ is specific to
    felix_vsc9959.
    
    A closer inspection of the felix_irq_handler() code suggests that
    it does things that depend on the data structures having been fully
    initialized. For example, ocelot_get_txtstamp() takes
    &port->tx_skbs.lock, which has only been initialized in
    ocelot_init_port() which has not run yet.
    
    It is not one of those IRQF_SHARED IRQs, so CONFIG_DEBUG_SHIRQ_FIXME
    shouldn't apply here, and thus, it doesn't really matter, because in
    practice, the IRQ will not be triggered so early. Nonetheless, it is a
    good practice for the driver to be prepared for it to fire as soon as it
    is requested.
    
    Create a new felix->info method for running custom code for vsc9959 from
    within felix_setup(), and move the request_irq() call there. The
    ocelot_ext should have an IRQ as well, so this should be a step in the
    right direction for that model (VSC7512) as well.
    
    Some minor changes are made while moving the code. Casts from void *
    aren't necessary, so drop them, and rename felix_irq_handler() to the
    more specific vsc9959_irq_handler().
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0367a177
felix.c 59.1 KB