mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-26 06:33:19 -04:00
- Remoteproc Recovery - by Fernando Guzman Lugo - when a remote processor
crash is detected, this mechanism will remove all virtio children devices, wait until their drivers let go, hard reset the remote processor and reload the firmware (resulting in the relevant virtio children devices re-added). Essentially the entire software stack is reset, together with the relevant hardware, so users don't have to reset the entire phone. - STE Modem driver is added - by Sjur Brændeland - OMAP DSP boot address support is added - by Juan Gutierrez - A handful of fixes/cleanups - Sjur Brændeland, Dan Carpenter, Emil Goode -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQbU3JAAoJELLolMlTRIoMJn4QANjLHhYw/BdfMF9E2DRQe0ew HFD/siXpQKXMwJ+xDCP9RfGm88tHdn8l/q6NFCOL/hr6TywnY3RrYfijL7O8qQOQ coIMaigOwWr9b55YBGD17ahNDsPGFdfAblWVyJBPfFf/kgVYb2NBNgTCMbGisqrK g83t85ULZeGXeWHZxCOxGEQ1cai4HXpsPOGRxDQFeZKU7qM2fVbY+3zeQIymdZ7v dByifhkwexjqD3n4n2TYRKQo1nC6dSBIaoF5rhRfdKk7L4rmf5J5oII66iRYIuDD vCPblfnrLjd6nwOp/fKqEQlno8uDV8Ryjx90YyWp+IpLJO9RbQko3TDwojgjN6e/ Edg+08nmck1mfE3qKNROCmwK3Dr3j/MOkqwKfS3l7U6VMsBebwdk5me4RBTexSiH QZzFK3Q2q5K9U+GPOgb3uBI8dHfW4/Q2rkIcM9fGEuSRUzRBPO7OwCU85KTEQxxy PxhAYvXWzJM4lk8dUqCq0+z0Wj35RolEK/TsrwSKL/D8NxgFEgRSkAVR0TlFihEy VOqtuGQ30OqAHByggfbtJyYVC67BIeFJPMACxKL5682cJRiZ4wCRXwMmtged/K0p 2BI3Gmz7j22mrTV2ziixNIX7fT6FoTO5KSmbJGJwbHWgctDHHFcWqSmcia6MxWzY GxJkH+jEd3qos08kcWaZ =cpBc -----END PGP SIGNATURE----- Merge tag 'remoteproc-for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc Pull remoteproc update from Ohad Ben-Cohen: - Remoteproc Recovery - by Fernando Guzman Lugo When a remote processor crash is detected, this mechanism will remove all virtio children devices, wait until their drivers let go, hard reset the remote processor and reload the firmware (resulting in the relevant virtio children devices re-added). Essentially the entire software stack is reset, together with the relevant hardware, so users don't have to reset the entire phone. - STE Modem driver is added - by Sjur Brændeland - OMAP DSP boot address support is added - by Juan Gutierrez - A handful of fixes/cleanups - Sjur Brændeland, Dan Carpenter, Emil Goode * tag 'remoteproc-for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc: remoteproc: Fix use of format specifyer remoteproc: fix a potential NULL-dereference on cleanup remoteproc: select VIRTIO to avoid build breakage remoteproc: return -EFAULT on copy_from_user failure remoteproc: snprintf() can return more than was printed remoteproc: Add STE modem driver remtoteproc: maintain max notifyid remoteproc: create a 'recovery' debugfs entry remoteproc: add actual recovery implementation remoteproc: add rproc_report_crash function to notify rproc crashes remoteproc: Add dependency to HAS_DMA remoteproc/omap: set bootaddr support
This commit is contained in:
commit
4d6d367232
11 changed files with 682 additions and 42 deletions
|
|
@ -30,6 +30,7 @@ struct platform_device;
|
|||
* @ops: start/stop rproc handlers
|
||||
* @device_enable: omap-specific handler for enabling a device
|
||||
* @device_shutdown: omap-specific handler for shutting down a device
|
||||
* @set_bootaddr: omap-specific handler for setting the rproc boot address
|
||||
*/
|
||||
struct omap_rproc_pdata {
|
||||
const char *name;
|
||||
|
|
@ -40,6 +41,7 @@ struct omap_rproc_pdata {
|
|||
const struct rproc_ops *ops;
|
||||
int (*device_enable) (struct platform_device *pdev);
|
||||
int (*device_shutdown) (struct platform_device *pdev);
|
||||
void(*set_bootaddr)(u32);
|
||||
};
|
||||
|
||||
#if defined(CONFIG_OMAP_REMOTEPROC) || defined(CONFIG_OMAP_REMOTEPROC_MODULE)
|
||||
|
|
|
|||
|
|
@ -360,6 +360,19 @@ enum rproc_state {
|
|||
RPROC_LAST = 4,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rproc_crash_type - remote processor crash types
|
||||
* @RPROC_MMUFAULT: iommu fault
|
||||
*
|
||||
* Each element of the enum is used as an array index. So that, the value of
|
||||
* the elements should be always something sane.
|
||||
*
|
||||
* Feel free to add more types when needed.
|
||||
*/
|
||||
enum rproc_crash_type {
|
||||
RPROC_MMUFAULT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rproc - represents a physical remote processor device
|
||||
* @node: klist node of this rproc object
|
||||
|
|
@ -383,6 +396,11 @@ enum rproc_state {
|
|||
* @rvdevs: list of remote virtio devices
|
||||
* @notifyids: idr for dynamically assigning rproc-wide unique notify ids
|
||||
* @index: index of this rproc device
|
||||
* @crash_handler: workqueue for handling a crash
|
||||
* @crash_cnt: crash counter
|
||||
* @crash_comp: completion used to sync crash handler and the rproc reload
|
||||
* @recovery_disabled: flag that state if recovery was disabled
|
||||
* @max_notifyid: largest allocated notify id.
|
||||
*/
|
||||
struct rproc {
|
||||
struct klist_node node;
|
||||
|
|
@ -406,6 +424,11 @@ struct rproc {
|
|||
struct list_head rvdevs;
|
||||
struct idr notifyids;
|
||||
int index;
|
||||
struct work_struct crash_handler;
|
||||
unsigned crash_cnt;
|
||||
struct completion crash_comp;
|
||||
bool recovery_disabled;
|
||||
int max_notifyid;
|
||||
};
|
||||
|
||||
/* we currently support only two vrings per rvdev */
|
||||
|
|
@ -460,6 +483,7 @@ int rproc_del(struct rproc *rproc);
|
|||
|
||||
int rproc_boot(struct rproc *rproc);
|
||||
void rproc_shutdown(struct rproc *rproc);
|
||||
void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type);
|
||||
|
||||
static inline struct rproc_vdev *vdev_to_rvdev(struct virtio_device *vdev)
|
||||
{
|
||||
|
|
|
|||
56
include/linux/ste_modem_shm.h
Normal file
56
include/linux/ste_modem_shm.h
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (C) ST-Ericsson AB 2012
|
||||
* Author: Sjur Brendeland / sjur.brandeland@stericsson.com
|
||||
*
|
||||
* License terms: GNU General Public License (GPL) version 2
|
||||
*/
|
||||
|
||||
#ifndef __INC_MODEM_DEV_H
|
||||
#define __INC_MODEM_DEV_H
|
||||
#include <linux/types.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
struct ste_modem_device;
|
||||
|
||||
/**
|
||||
* struct ste_modem_dev_cb - Callbacks for modem initiated events.
|
||||
* @kick: Called when the modem kicks the host.
|
||||
*
|
||||
* This structure contains callbacks for actions triggered by the modem.
|
||||
*/
|
||||
struct ste_modem_dev_cb {
|
||||
void (*kick)(struct ste_modem_device *mdev, int notify_id);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ste_modem_dev_ops - Functions to control modem and modem interface.
|
||||
*
|
||||
* @power: Main power switch, used for cold-start or complete power off.
|
||||
* @kick: Kick the modem.
|
||||
* @kick_subscribe: Subscribe for notifications from the modem.
|
||||
* @setup: Provide callback functions to modem device.
|
||||
*
|
||||
* This structure contains functions used by the ste remoteproc driver
|
||||
* to manage the modem.
|
||||
*/
|
||||
struct ste_modem_dev_ops {
|
||||
int (*power)(struct ste_modem_device *mdev, bool on);
|
||||
int (*kick)(struct ste_modem_device *mdev, int notify_id);
|
||||
int (*kick_subscribe)(struct ste_modem_device *mdev, int notify_id);
|
||||
int (*setup)(struct ste_modem_device *mdev,
|
||||
struct ste_modem_dev_cb *cfg);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ste_modem_device - represent the STE modem device
|
||||
* @pdev: Reference to platform device
|
||||
* @ops: Operations used to manage the modem.
|
||||
* @drv_data: Driver private data.
|
||||
*/
|
||||
struct ste_modem_device {
|
||||
struct platform_device pdev;
|
||||
struct ste_modem_dev_ops ops;
|
||||
void *drv_data;
|
||||
};
|
||||
|
||||
#endif /*INC_MODEM_DEV_H*/
|
||||
Loading…
Reference in a new issue