26 Apr, 2016

8 commits

  • The omap_mbox_save_ctx() and omap_mbox_restore_ctx() API were
    previously provided to OMAP mailbox clients to save and restore
    the mailbox context during system suspend/resume. The save and
    restore functionality is now implemented through System PM driver
    callbacks, and there is no need for these functions, so kill these
    API.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • The OMAP mailbox driver is used by clients to communicate with remote
    processors in general. The mailbox clients are expected to have stopped
    communicating with these remote processors during a system suspend. The
    OMAP mailbox fifos are expected to not have any messages as such. Add a
    check for any pending unprocessed messages in the suspend callback, to
    detect any communication protocol issues of the mailbox clients. The
    system suspend is aborted if any messages are found.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • Support has been added to the OMAP mailbox driver to allow it
    to work across a system suspend/resume. The OMAP mailbox driver
    requires only the interrupt configuration registers to be saved
    and restored, and this is done in the suspend/resume callbacks.
    The registers need to be saved only if there are active clients
    at the time of suspend. The enabling and disabling of the mailbox
    clocks is done automatically by the omap_device layer.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • The interrupt type used for identifying the layout of the interrupt
    configuration registers between OMAP4+ SoCs and older SoCs is stored
    only in the sub-mailbox structures for easier access. Store this type
    in the the omap_mbox_device structure as well along with the other
    global variables. This is being done to facilitate the context save
    and restore of appropriate registers during system suspend/resume.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • Fix couple of checkpatch warnings of the type,
    "WARNING: Missing a blank line after declarations"

    Also, fixed a warning about a space after a typecast
    while at this.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • Remove the paragraph about writing to the Free Software
    Foundation's mailing address from the GPL license header
    as this address can change. This fixes the corresponding
    checkpatch warning.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • Fix the code formatting to use the kernel preferred style
    of using the actual variables to determize the size using
    the sizeof() operator. This fixes the corresponding checkpatch
    warning as well.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     
  • OMAP mailbox devices can no longer be created in legacy non-DT
    mode, all the relevant code has been cleaned up. The OMAP mailbox
    driver will only support devices created from DT going forward,
    so drop the legacy platform device support from the driver.

    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Suman Anna
     

23 Oct, 2015

1 commit

  • The mailbox framework controls the transmission queue and requires
    either its controller implementations or clients to run the state
    machine for the Tx queue. The OMAP mailbox controller uses a Tx-ready
    interrupt as the equivalent of a Tx-done interrupt to run this Tx
    queue state-machine.

    The WkupM3 processor on AM33xx and AM43xx SoCs is used to offload
    certain PM tasks, like doing the necessary operations for Device
    PM suspend/resume or for entering lower c-states during cpuidle.

    The CPUIdle on AM33xx requires the messages to be sent without
    having to trigger the Tx-ready interrupts, as the interrupt
    would immediately terminate the CPUIdle operation. Support for
    this has been added by introducing a DT quirk, "ti,mbox-send-noirq"
    and using it to modify the normal OMAP mailbox controller behavior
    on the sub-mailboxes used to communicate with the WkupM3 remote
    processor. This also requires the wkup_m3_ipc driver to adjust
    its mailbox usage logic to run the Tx state machine.

    NOTE:
    - AM43xx does not communicate with WkupM3 for CPU Idle, so is
    not affected by this behavior. But, it uses the same IPC driver
    for PM suspend/resume functionality, so requires the quirk as
    well, because of changes to the common wkup_m3_ipc driver.

    Signed-off-by: Dave Gerlach
    [s-anna@ti.com: revise logic and update comments/patch description]
    Signed-off-by: Suman Anna
    Signed-off-by: Jassi Brar

    Dave Gerlach
     

12 May, 2015

2 commits

  • mbox_request_channel() currently returns EBUSY in the event the controller
    is not present or if of_xlate() fails, but in neither case is EBUSY really
    appropriate. Return EPROBE_DEFER if the controller is not yet present
    and change of_xlate() to return an ERR_PTR instead of NULL so that the
    error can be propagated back to the caller of mbox_request_channel().

    Signed-off-by: Benson Leung
    Signed-off-by: Andrew Bresticker
    Acked-by: Suman Anna
    Reviewed-by: Jon Hunter
    Tested-by: Jon Hunter
    Signed-off-by: Jassi Brar

    Benson Leung
     
  • The mailbox controller's channel ops ought to be read-only. Update
    all the mailbox drivers to make their mbox_chan_ops const as well.

    Signed-off-by: Andrew Bresticker
    Cc: Ashwin Chaugule
    Cc: Ley Foon Tan
    Acked-by: Suman Anna
    Signed-off-by: Jassi Brar

    Andrew Bresticker
     

15 Dec, 2014

1 commit

  • Pull driver core update from Greg KH:
    "Here's the set of driver core patches for 3.19-rc1.

    They are dominated by the removal of the .owner field in platform
    drivers. They touch a lot of files, but they are "simple" changes,
    just removing a line in a structure.

    Other than that, a few minor driver core and debugfs changes. There
    are some ath9k patches coming in through this tree that have been
    acked by the wireless maintainers as they relied on the debugfs
    changes.

    Everything has been in linux-next for a while"

    * tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (324 commits)
    Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
    fs: debugfs: add forward declaration for struct device type
    firmware class: Deletion of an unnecessary check before the function call "vunmap"
    firmware loader: fix hung task warning dump
    devcoredump: provide a one-way disable function
    device: Add dev__once variants
    ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries
    ath: use seq_file api for ath9k debugfs files
    debugfs: add helper function to create device related seq_file
    drivers/base: cacheinfo: remove noisy error boot message
    Revert "core: platform: add warning if driver has no owner"
    drivers: base: support cpu cache information interface to userspace via sysfs
    drivers: base: add cpu_device_create to support per-cpu devices
    topology: replace custom attribute macros with standard DEVICE_ATTR*
    cpumask: factor out show_cpumap into separate helper function
    driver core: Fix unbalanced device reference in drivers_probe
    driver core: fix race with userland in device_add()
    sysfs/kernfs: make read requests on pre-alloc files use the buffer.
    sysfs/kernfs: allow attributes to request write buffer be pre-allocated.
    fs: sysfs: return EGBIG on write if offset is larger than file size
    ...

    Linus Torvalds
     

27 Nov, 2014

1 commit

  • The OMAP mailbox driver and its existing clients (remoteproc
    for OMAP4+) are adapted to use the generic mailbox framework.

    The main changes for the adaptation are:
    - The tasklet used for Tx is replaced with the state machine from
    the generic mailbox framework. The workqueue used for processing
    the received messages stays intact for minimizing the effects on
    the OMAP mailbox clients.
    - The existing exported client API, omap_mbox_get, omap_mbox_put and
    omap_mbox_send_msg are deleted, as the framework provides equivalent
    functionality. A OMAP-specific omap_mbox_request_channel is added
    though to support non-DT way of requesting mailboxes.
    - The OMAP mailbox driver is integrated with the mailbox framework
    through the proper implementations of mbox_chan_ops, except for
    .last_tx_done and .peek_data. The OMAP mailbox driver does not need
    these ops, as it is completely interrupt driven.
    - The OMAP mailbox driver uses a custom of_xlate controller ops that
    allows phandles for the pargs specifier instead of indexing to avoid
    any channel registration order dependencies.
    - The new framework does not support multiple clients operating on a
    single channel, so the reference counting logic is simplified.
    - The remoteproc driver (current client) is adapted to use the new API.
    The notifier callbacks used within this client is replaced with the
    regular callbacks from the newer framework.
    - The exported OMAP mailbox API are limited to omap_mbox_save_ctx,
    omap_mbox_restore_ctx, omap_mbox_enable_irq & omap_mbox_disable_irq,
    with the signature modified to take in the new mbox_chan handle instead
    of the OMAP specific omap_mbox handle. The first 2 will be removed when
    the OMAP mailbox driver is adapted to runtime_pm. The other exported
    API omap_mbox_request_channel will be removed once existing legacy
    users are converted to DT.

    Signed-off-by: Suman Anna
    Cc: Ohad Ben-Cohen
    Signed-off-by: Jassi Brar

    Suman Anna
     

20 Oct, 2014

1 commit


12 Sep, 2014

1 commit

  • Logic has been added to the OMAP2+ mailbox code to parse the
    mailbox dt nodes and construct the different sub-mailboxes
    associated with the instance. The DT representation of the
    sub-mailbox devices is different from legacy platform data
    representation to allow flexibility of interrupt configuration
    between Tx and Rx fifos (to also possibly allow simplex devices
    in the future). The DT representation gathers similar information
    that was being passed previously through the platform data, except
    for the interrupt type information, which is gathered through driver
    compatible match data.

    The non-DT support has to be maintained for now to not break
    OMAP3 legacy boot, and the legacy-style code will be cleaned
    up once OMAP3 is also converted to DT-boot only.

    Cc: Jassi Brar
    Cc: Rob Herring
    Signed-off-by: Suman Anna
    Acked-by: Pavel Machek
    Signed-off-by: Tony Lindgren

    Suman Anna
     

29 Jul, 2014

4 commits

  • A new structure, omap_mbox_device, is added to contain
    the global variables pertinent to a mailbox h/w IP block.
    This enables the support for having multiple instances of
    the same h/w IP block in the SoC. This is in preparation
    to support the DRA7 SoC, which is the first SoC in the OMAP
    family to have multiple mailbox IP instances.

    The changes include enhancements to the sub-mailbox registration
    logic and mbox startup sequencing, removing the usage of single
    global configuration variables for all h/w instances, and storing
    the registered sub-mailboxes with the parent mailbox device
    structure.

    Signed-off-by: Suman Anna
    Signed-off-by: Tony Lindgren

    Suman Anna
     
  • The structure omap_mbox_priv is used previously to store arch
    specific (OMAP1 vs OMAP2+) data, and is no longer required to be
    maintained separately. Instead, absorb its elements into either
    the sub-mailbox device structure, omap_mbox, or the individual
    fifo descriptor structure, omap_mbox_fifo.

    The newmsg_bit and notfull_bit used on Rx and Tx fifos respectively
    are represented by the new intr_bit field in the fifo descriptor
    structure. The interrupt configuration registers are also moved
    into the fifo descriptor structure to allow the Rx and Tx fifos
    to use different interrupt lines/users.

    Signed-off-by: Suman Anna
    Signed-off-by: Tony Lindgren

    Suman Anna
     
  • There is no need for a separate common OMAP mailbox module
    now that the OMAP1 mailbox driver has been removed. So,
    consolidate the two individual OMAP mailbox modules into a
    single driver. This streamlines the driver for converting
    to mailbox framework.

    The following are the main changes:
    - collapse mailbox-omap2.c into omap-mailbox.c
    - remove omap_mbox_ops and replace the ops calls with
    the equivalent functionality.
    - simplify the sub-mailbox startup/shutdown functionality,
    the one-time operations are moved into probe, and the
    pm_runtime_get_sync and pm_runtime_put_sync can be invoked
    without using a configuration counter.
    - move all definitions from private omap_mbox.h into the
    source code, and eliminate this internal header.
    - rename some variables that used the omap2_mbox prefix with
    a generic omap_mbox prefix.

    Signed-off-by: Suman Anna
    Signed-off-by: Tony Lindgren

    Suman Anna
     
  • The type definition omap_mbox_type_t used for distinguishing
    OMAP1 from OMAP2+ mailboxes is no longer needed after the
    removal of OMAP1 mailbox driver, and has therefore been
    cleaned up. This cleanup also eliminates the need for the
    polling logic used for checking the transmit readiness.

    Signed-off-by: Suman Anna
    Signed-off-by: Tony Lindgren

    Suman Anna
     

12 Jun, 2013

1 commit

  • The mailbox hardware (in OMAP) uses a queued mailbox interrupt
    mechanism that provides a communication channel between processors
    through a set of registers and their associated interrupt signals
    by sending and receiving messages.

    The OMAP mailbox framework/driver code is moved to be under
    drivers/mailbox, in preparation for adapting to a common mailbox
    driver framework. This allows the build for OMAP mailbox to be
    enabled (it was disabled during the multi-platform support).

    As part of the migration from plat and mach code:
    - Kconfig symbols have been renamed to build OMAP1 or OMAP2+ drivers.
    - mailbox.h under plat-omap/plat/include has been split into a public
    and private header files. The public header has only the API related
    functions and types.
    - The module name mailbox.ko from plat-omap is changed to
    omap-mailbox.ko
    - The module name mailbox_mach.ko from mach-omapX is changed as
    mailbox_omap1.ko for OMAP1
    mailbox_omap2.ko for OMAP2+

    Cc: Tony Lindgren
    [gregkh@linuxfoundation.org: ack for staging part]
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Omar Ramirez Luna
    Signed-off-by: Suman Anna

    Suman Anna