11 Mar, 2020

1 commit


10 Mar, 2020

1 commit

  • Commit adb72394e2ab ("ARM: OMAP2+: Drop legacy platform data for am3
    lcdc") dropped legacy platform data but we never added the quirks for
    SWSUP_SIDLE and SWSUP_MSTANDBY for lcdc for ti-sysc driver.

    This breaks suspend/resume. Let's fix the issue by enabling the same
    quirks for ti-sysc driver as we had earlier with platform data.

    Fixes: adb72394e2ab ("ARM: OMAP2+: Drop legacy platform data for am3 lcdc")
    Fixes: 23731eac9848 ("bus: ti-sysc: Detect devices on am335x when DEBUG is enabled")
    Reported-by: Keerthy
    Cc: Jyri Sarha
    Cc: Keerthy
    Cc: Dave Gerlach
    Cc: Tero Kristo
    Tested-by: Dave Gerlach
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

04 Mar, 2020

2 commits

  • The PRU-ICSS present on AM33xx/AM43xx/AM57xx has a very unique
    SYSCFG register. The register follows the OMAP4-style SYSC_TYPE3
    for Master Standby and Slave Idle, but also has two additional
    unique fields - STANDBY_INIT and SUB_MWAIT. The STANDBY_INIT is
    a control bit that is used to initiate a Standby sequence (when
    set) and trigger a MStandby request to the SoC's PRCM module. This
    same bit is also used to enable the OCP master ports (when cleared)
    to allow the PRU cores to access any peripherals or memory beyond
    the PRU subsystem. The SUB_MWAIT is a ready status field for the
    external access.

    Add support for this SYSC type. The STANDBY_INIT has to be set
    during suspend, without which it results in a hang in the resume
    sequence on AM33xx/AM43xx boards and requires a board reset to
    come out of the hang. Any PRU applications requiring external
    access are supposed to clear the STANDBY_INIT bit. Note that
    the PRUSS context is lost during a suspend sequence because the
    PRUSS module is reset and/or disabled.

    Signed-off-by: Suman Anna
    Signed-off-by: Roger Quadros
    [tony@atomide.com: updated quirk define number and to use -ENODEV]
    Signed-off-by: Tony Lindgren

    Suman Anna
     
  • In order to probe EDMA with ti-sysc interconnect target module and with
    device tree data, we need to properly detect EDMA and set the flags for
    SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY for tptc.

    We have these flags currently set for am4 and dra7, but not for am335x.
    Let's set them for all the SoCs as the tptc module should behave the
    same for all of them. It's likely that am335x was never tested to idle
    EDMA tptc.

    Cc: Peter Ujfalusi
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

03 Mar, 2020

1 commit

  • Commit 7324a7a0d5e2 ("bus: ti-sysc: Implement display subsystem reset
    quirk") added support for DSS reset, but is using dispc offset also for
    DSS also registers as reported by Tomi Valkeinen .
    Also, we're not using dispc_offset for dispc IRQSTATUS register so let's
    fix that too.

    Fixes: 7324a7a0d5e2 ("bus: ti-sysc: Implement display subsystem reset quirk")
    Reported-by: Tomi Valkeinen
    Reviewed-by: Tomi Valkeinen
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

27 Feb, 2020

9 commits

  • The display subsystem (DSS) needs the child outputs disabled for reset.
    In order to prepare to probe DSS without legacy platform data, let's
    implement sysc_pre_reset_quirk_dss() similar to what we have for the
    platform data with omap_dss_reset().

    Note that we cannot directly use the old omap_dss_reset() without
    platform data callbacks and updating omap_dss_reset() to understand
    struct device. And we will be dropping omap_dss_reset() anyways when
    all the SoCs are probing with device tree, so let's not mess with the
    legacy code at all.

    Cc: Jyri Sarha
    Cc: Laurent Pinchart
    Cc: Tomi Valkeinen
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • In order to prepare probing display subsystem (DSS) with ti-sysc
    interconnect target module driver and device tree data, let's
    detect DSS related modules.

    We need to also add reset quirk handling for DSS, but until that's
    done, let's just enable the optional clock quirks for DSS and
    omap4 HDMI. The rest is just naming of modules if CONFIG_DEBUG
    is set.

    Cc: Jyri Sarha
    Cc: Laurent Pinchart
    Cc: Tomi Valkeinen
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • The RTC modules on am3 and am4 need quirk handling to unlock and lock
    them for reset so let's add the quirk handling based on what we already
    have for legacy platform data. In later patches we will simply drop the
    RTC related platform data and the old quirk handling.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • We need to know SoC type and features for cases where the same SoC
    may be installed in various versions on the same board and would need
    a separate dts file otherwise for the different variants.

    For example, am3703 is pin compatible with omap3630, but has sgx and
    iva accelerators disabled. We must not try to access the sgx or iva
    module registers on am3703, and need to set the unavailable devices
    disabled early.

    Let's also detect omap3430 as that is needed for display subsystem
    (DSS) reset later on, and GP vs EMU or HS devices. Further SoC
    specific disabled device detection can be added as needed, such as
    dra71x vs dra76x rtc and usb4.

    Cc: Adam Ford
    Cc: André Hentschel
    Cc: H. Nikolaus Schaller
    Cc: Keerthy
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • In some cases we can have nested ti-sysc instances that may still use the
    legacy "ti,hwmods" property. Let's not warn if that's the case.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • We are currently setting -1 for non-existing sysconfig related registers
    for quirks, but setting -ENODEV elsewhere. And for matching the quirks,
    we're now just ignoring the non-existing registers. This will cause issues
    with misdetecting DSS registers as the hardware revision numbers can have
    duplicates.

    To avoid this, let's standardize on using -ENODEV also for the quirks
    instead of -1. That way we can always just test for a match without adding
    any more complicated logic.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • At least display susbsystem (DSS) has modules with no sysconfig registers
    and rely on custom function for module reset handling. Let's make reset
    work with that too.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • The clk_disable_quirk and clk_enable_quirk should really be called
    pre_reset_quirk and post_reset_quirk to avoid confusion like we had
    with hdq1w reset.

    Let's also rename the related functions so the code is easier to follow.
    Note that we also have reset_done_quirk that is needed in some cases
    after checking the separate register for reset done bit.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • Because of the i2c quirk we have the reset quirks named in a confusing
    way. Let's fix the 1-wire quirk accordinlyg. Then let's switch to using
    better naming later on.

    Fixes: 4e23be473e30 ("bus: ti-sysc: Add support for module specific reset quirks")
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

09 Feb, 2020

1 commit

  • Pull ARM SoC-related driver updates from Olof Johansson:
    "Various driver updates for platforms:

    - Nvidia: Fuse support for Tegra194, continued memory controller
    pieces for Tegra30

    - NXP/FSL: Refactorings of QuickEngine drivers to support
    ARM/ARM64/PPC

    - NXP/FSL: i.MX8MP SoC driver pieces

    - TI Keystone: ring accelerator driver

    - Qualcomm: SCM driver cleanup/refactoring + support for new SoCs.

    - Xilinx ZynqMP: feature checking interface for firmware. Mailbox
    communication for power management

    - Overall support patch set for cpuidle on more complex hierarchies
    (PSCI-based)

    and misc cleanups, refactorings of Marvell, TI, other platforms"

    * tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (166 commits)
    drivers: soc: xilinx: Use mailbox IPI callback
    dt-bindings: power: reset: xilinx: Add bindings for ipi mailbox
    drivers: soc: ti: knav_qmss_queue: Pass lockdep expression to RCU lists
    MAINTAINERS: Add brcmstb PCIe controller entry
    soc/tegra: fuse: Unmap registers once they are not needed anymore
    soc/tegra: fuse: Correct straps' address for older Tegra124 device trees
    soc/tegra: fuse: Warn if straps are not ready
    soc/tegra: fuse: Cache values of straps and Chip ID registers
    memory: tegra30-emc: Correct error message for timed out auto calibration
    memory: tegra30-emc: Firm up hardware programming sequence
    memory: tegra30-emc: Firm up suspend/resume sequence
    soc/tegra: regulators: Do nothing if voltage is unchanged
    memory: tegra: Correct reset value of xusb_hostr
    soc/tegra: fuse: Add APB DMA dependency for Tegra20
    bus: tegra-aconnect: Remove PM_CLK dependency
    dt-bindings: mediatek: add MT6765 power dt-bindings
    soc: mediatek: cmdq: delete not used define
    memory: tegra: Add support for the Tegra194 memory controller
    memory: tegra: Only include support for enabled SoCs
    memory: tegra: Support DVFS on Tegra186 and later
    ...

    Linus Torvalds
     

17 Dec, 2019

1 commit

  • Commit d878970f6ce1 ("bus: ti-sysc: Add separate functions for handling
    clocks") separated handling of optional clocks from the main clocks, but
    introduced an issue where we do not necessarily allocate a slot for both
    fck and ick clocks, but still assume fixed slots for enumerating over the
    clocks.

    Let's fix the issue by ensuring we always have slots for both fck and ick
    even if we don't use ick, and don't attempt to enumerate optional clocks
    if not allocated.

    In the long run we might want to simplify things a bit by only allocating
    space only for the optional clocks as we have only few devices with
    optional clocks.

    Fixes: d878970f6ce1 ("bus: ti-sysc: Add separate functions for handling clocks")
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

13 Dec, 2019

4 commits


10 Dec, 2019

1 commit

  • Commit 03856e928b0e ("bus: ti-sysc: Handle mstandby quirk and use it for
    musb") added quirk handling for mstandby quirk but did not consider that
    we also need a quirk variant for SYSC_QUIRK_FORCE_MSTANDBY.

    We need to use forced idle mode for both SYSC_QUIRK_SWSUP_MSTANDBY and
    SYSC_QUIRK_FORCE_MSTANDBY, but SYSC_QUIRK_SWSUP_MSTANDBY also need to
    additionally also configure no-idle mode when enabled.

    Fixes: 03856e928b0e ("bus: ti-sysc: Handle mstandby quirk and use it for musb")
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

15 Nov, 2019

2 commits


22 Oct, 2019

2 commits


18 Oct, 2019

2 commits


08 Oct, 2019

3 commits

  • Current implementation for ti-sysc powers down the module once module
    init is complete. However, right after power is disabled, it is enabled
    via runtime PM. This is unnecessary so avoid it by re-ordering the
    events a bit; move powering down of the module post runtime PM enable
    which makes sure the use counts are maintained properly and there is
    no extra power down/up sequence for the module.

    Signed-off-by: Tero Kristo
    Signed-off-by: Tony Lindgren

    Tero Kristo
     
  • There seems to be unnecessary extra hardreset line toggling applied
    during module init. This is unnecessary, as the reset lines are already
    asserted during boot, and it can cause certain modules to hang (iommus,
    remoteprocs.) Remove the extra hardreset toggle, and remove the now
    redundant function to handle this also.

    Signed-off-by: Tero Kristo
    Signed-off-by: Tony Lindgren

    Tero Kristo
     
  • The main clocks and reset controls have a hardware level dependency,
    where one can't transition state without the other one transitioning.
    Because we don't have the dependency implemented in software, we must
    ensure the ordering of these two is done properly; they way this is
    handled is that clocks transition on software level without delay,
    and the status is only polled on reset side. Because of this, we must
    re-order the main clock and reset handling on the ti-sysc driver.

    Signed-off-by: Tero Kristo
    Signed-off-by: Tony Lindgren

    Tero Kristo
     

01 Oct, 2019

1 commit

  • Pull ARM SoC fixes from Olof Johansson:
    "A few fixes that have trickled in through the merge window:

    - Video fixes for OMAP due to panel-dpi driver removal

    - Clock fixes for OMAP that broke no-idle quirks + nfsroot on DRA7

    - Fixing arch version on ASpeed ast2500

    - Two fixes for reset handling on ARM SCMI"

    * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
    ARM: aspeed: ast2500 is ARMv6K
    reset: reset-scmi: add missing handle initialisation
    firmware: arm_scmi: reset: fix reset_state assignment in scmi_domain_reset
    bus: ti-sysc: Remove unpaired sysc_clkdm_deny_idle()
    ARM: dts: logicpd-som-lv: Fix i2c2 and i2c3 Pin mux
    ARM: dts: am3517-evm: Fix missing video
    ARM: dts: logicpd-torpedo-baseboard: Fix missing video
    ARM: omap2plus_defconfig: Fix missing video
    bus: ti-sysc: Fix handling of invalid clocks
    bus: ti-sysc: Fix clock handling for no-idle quirks

    Linus Torvalds
     

07 Sep, 2019

1 commit

  • Commit d098913a10f8 ("bus: ti-sysc: Fix clock handling for no-idle
    quirks") fixed handling for no-idle quirk modules that are not enabled
    by the bootloader.

    But it also caused unpaired clockdomain calls that won't allow idling
    the system. That's because clkdm_allow_idle_nolock() and
    clkdm_deny_idle_nolock() have usage count with clkdm->forcewake_count.

    Let's drop the unpaired sysc_clkdm_deny_idle() to fix idling of devices.

    Fixes: d098913a10f8 ("bus: ti-sysc: Fix clock handling for no-idle quirks")
    Cc: Keerthy
    Cc: Vignesh Raghavendra
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

06 Sep, 2019

1 commit

  • We can currently get "Unable to handle kernel paging request at
    virtual address" for invalid clocks with dts node but no driver:

    (__clk_get_hw) from [] (ti_sysc_find_one_clockdomain+0x18/0x34)
    (ti_sysc_find_one_clockdomain) from [] (ti_sysc_clkdm_init+0x34/0xdc)
    (ti_sysc_clkdm_init) from [] (sysc_probe+0xa50/0x10e8)
    (sysc_probe) from [] (platform_drv_probe+0x58/0xa8)

    Let's add IS_ERR checks to ti_sysc_clkdm_init() as And let's start treating
    clk_get() with -ENOENT as a proper error. If the clock name is specified
    in device tree we must succeed with clk_get() to continue. For modules with
    no clock names specified in device tree we will just ignore the clocks.

    Fixes: 2b2f7def058a ("bus: ti-sysc: Add support for missing clockdomain handling")
    Acked-by: Roger Quadros
    Tested-by: Keerthy
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

05 Sep, 2019

1 commit

  • NFSroot can fail on dra7 when cpsw is probed using ti-sysc interconnect
    target module driver as reported by Keerthy.

    Device clocks and the interconnect target module may or may not be
    enabled by the bootloader on init, but we currently assume the clocks
    and module are on from the bootloader for "ti,no-idle" and
    "ti,no-idle-on-init" quirks as reported by Grygorii Strashko.

    Let's fix the issue by always enabling clocks init, and
    never disable them for "ti,no-idle" quirk. For "ti,no-idle-on-init"
    quirk, we must decrement the usage count later on to allow PM
    runtime to idle the module if requested.

    Fixes: 1a5cd7c23cc5 ("bus: ti-sysc: Enable all clocks directly during init to read revision")
    Cc: Keerthy
    Cc: Vignesh Raghavendra
    Reported-by: Keerthy
    Reported-by: Grygorii Strashko
    Reviewed-by: Grygorii Strashko
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

26 Aug, 2019

3 commits


13 Aug, 2019

3 commits

  • Fixes gcc '-Wunused-but-set-variable' warning:

    drivers/bus/ti-sysc.c: In function sysc_reset:
    drivers/bus/ti-sysc.c:1452:50: warning: variable quirks set but not used [-Wunused-but-set-variable]

    It is never used since commit e0db94fe87da ("bus: ti-sysc: Make
    OCP reset work for sysstatus and sysconfig reset bits")

    Reported-by: Hulk Robot
    Signed-off-by: YueHaibing
    Signed-off-by: Tony Lindgren

    YueHaibing
     
  • Some devices need to share their reset signals, like DSP MMUs, thus drop
    the exclusive notation from reset request. Also, balance the init time
    reset count, otherwise the resets will never be applied post boot.

    Signed-off-by: Tero Kristo
    Signed-off-by: Tony Lindgren

    Tero Kristo
     
  • If reset controllers are assigned to the ti-sysc target-module, only
    ti-sysc is going to be able to control these. Thus, remove all the
    disable_on_idle flag usage, and assert/de-assert the reset always
    in the idle path. Otherwise the reset signal will always just be
    de-asserted.

    Signed-off-by: Tero Kristo
    Signed-off-by: Tony Lindgren

    Tero Kristo