lkml.org 
[lkml]   [2022]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v3 11/23] ata: libahci_platform: Introduce reset assertion/deassertion methods
    From
    On 5/12/22 01:17, Serge Semin wrote:
    > Currently the ACHI-platform library supports only the assert and deassert
    > reset signals and ignores the platforms with self-deasserting reset lines.
    > That prone to having the platforms with self-deasserting reset method
    > misbehaviour when it comes to resuming from sleep state after the clocks
    > have been fully disabled. For such cases the controller needs to be fully
    > reset all over after the reference clocks are enabled and stable,
    > otherwise the controller state machine might be in an undetermined state.
    >
    > The best solution would be to auto-detect which reset method is supported
    > by the particular platform and use it implicitly in the framework of the
    > ahci_platform_enable_resources()/ahci_platform_disable_resources()
    > methods. Alas it can't be implemented due to the AHCI-platform library
    > already supporting the shared reset control lines. As [1] says in such
    > case we have to use only one of the next methods:
    > + reset_control_assert()/reset_control_deassert();
    > + reset_control_reset()/reset_control_rearm().
    > If the driver had an exclusive control over the reset lines we could have
    > been able to manipulate the lines with no much limitation and just used
    > the combination of the methods above to cover all the possible
    > reset-control cases. Since the shared reset control has already been
    > advertised and couldn't be changed with no risk to breaking the platforms
    > relying on it, we have no choice but to make the platform drivers to
    > determine which reset methods the platform reset system supports.
    >
    > In order to implement both types of reset control support we suggest to
    > introduce the new AHCI-platform flag: AHCI_PLATFORM_RST_TRIGGER, which
    > when passed to the ahci_platform_get_resources() method together with the
    > AHCI_PLATFORM_GET_RESETS flag will indicate that the reset lines are
    > self-deasserting thus the reset_control_reset()/reset_control_rearm() will
    > be used to control the reset state. Otherwise the
    > reset_control_deassert()/reset_control_assert() methods will be utilized.
    >
    > [1] Documentation/driver-api/reset.rst
    >
    > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
    >
    > ---
    >
    > Changelog v2:
    > - Convert the ahci_platform_assert_rsts() method to returning int status
    > (@Damien).
    > - Fix some grammar mistakes in the ahci_platform_deassert_rsts() doc
    > (@Damien).
    > ---
    > drivers/ata/ahci.h | 1 +
    > drivers/ata/libahci_platform.c | 50 ++++++++++++++++++++++++++++++----
    > include/linux/ahci_platform.h | 5 +++-
    > 3 files changed, 50 insertions(+), 6 deletions(-)
    >
    Reviewed-by: Hannes Reinecke <hare@suse.de>

    Cheers,

    Hannes
    --
    Dr. Hannes Reinecke Kernel Storage Architect
    hare@suse.de +49 911 74053 688
    SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg
    HRB 36809 (AG Nürnberg), GF: Felix Imendörffer

    \
     
     \ /
      Last update: 2022-05-12 08:55    [W:4.193 / U:0.516 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site