• Oliver Hartkopp's avatar
    can: fix handling of unmodifiable configuration options · bb208f14
    Oliver Hartkopp authored
    As described in 'can: m_can: tag current CAN FD controllers as non-ISO'
    (6cfda7fb) it is possible to define fixed configuration options by
    setting the according bit in 'ctrlmode' and clear it in 'ctrlmode_supported'.
    This leads to the incovenience that the fixed configuration bits can not be
    passed by netlink even when they have the correct values (e.g. non-ISO, FD).
    
    This patch fixes that issue and not only allows fixed set bit values to be set
    again but now requires(!) to provide these fixed values at configuration time.
    A valid CAN FD configuration consists of a nominal/arbitration bittiming, a
    data bittiming and a control mode with CAN_CTRLMODE_FD set - which is now
    enforced by a new can_validate() function. This fix additionally removed the
    inconsistency that was prohibiting the support of 'CANFD-only' controller
    drivers, like the RCar CAN FD.
    
    For this reason a new helper can_set_static_ctrlmode() has been introduced to
    provide a proper interface to handle static enabled CAN controller options.
    Reported-by: default avatarRamesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
    Signed-off-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
    Reviewed-by: default avatarRamesh Shanmugasundaram  <ramesh.shanmugasundaram@bp.renesas.com>
    Cc: <stable@vger.kernel.org> # >= 3.18
    Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    bb208f14
m_can.c 31.4 KB