![Bryan O'Donoghue](/assets/img/avatar_default.png)
This patch adds the core timesync functionality. 0. arche-platform.c/arche-apb-ctrl.c Modifies the platform layer to hook the incoming TIME_SYNC signal up to the timesync strobe IRQ handler. If the arche-platform driver can't satisfy the request for the wake-detect line, it will return -EAGAIN and the calling work-queue must reschedule the attempt to get exclusive access to the wake-detect pin logic. A private data field is added to the arche-platform driver to enable passing of a timesync pointer to the ISR responsible for synchronizing time. 1. timesync.c A new file added which contains all of the logic associated with sending greybus commands to SVC, APBx or Interfaces to enable, disable and disseminate timing information. 2. timesync_platform.c Any platform/arch specific code goes into timesync_platform.c. Originally the idea was to keep the x86 and ARM arch dependencies in a timesync_platform_arch.c file - however with further refinement that's currently not necessary however just-in-case it becomes necessary to resuscitate arch or platform specific methods for accessing timer resources that access shouldn't be part of the core timesync.c logic and so for the moment we access these timer resources through a thin access layer in timesync_platform.c. Expect this to go away long term ideally. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Acked-by: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
40 lines
1 KiB
C
40 lines
1 KiB
C
/*
|
|
* Arche Platform driver to enable Unipro link.
|
|
*
|
|
* Copyright 2015-2016 Google Inc.
|
|
* Copyright 2015-2016 Linaro Ltd.
|
|
*
|
|
* Released under the GPLv2 only.
|
|
*/
|
|
|
|
#ifndef __ARCHE_PLATFORM_H
|
|
#define __ARCHE_PLATFORM_H
|
|
|
|
#include "timesync.h"
|
|
|
|
enum arche_platform_state {
|
|
ARCHE_PLATFORM_STATE_OFF,
|
|
ARCHE_PLATFORM_STATE_ACTIVE,
|
|
ARCHE_PLATFORM_STATE_STANDBY,
|
|
ARCHE_PLATFORM_STATE_FW_FLASHING,
|
|
ARCHE_PLATFORM_STATE_TIME_SYNC,
|
|
};
|
|
|
|
int arche_platform_change_state(enum arche_platform_state state,
|
|
struct gb_timesync_svc *pdata);
|
|
|
|
extern int (*arche_platform_change_state_cb)(enum arche_platform_state state,
|
|
struct gb_timesync_svc *pdata);
|
|
int __init arche_apb_init(void);
|
|
void __exit arche_apb_exit(void);
|
|
|
|
/* Operational states for the APB device */
|
|
int apb_ctrl_coldboot(struct device *dev);
|
|
int apb_ctrl_fw_flashing(struct device *dev);
|
|
int apb_ctrl_standby_boot(struct device *dev);
|
|
void apb_ctrl_poweroff(struct device *dev);
|
|
void apb_bootret_assert(struct device *dev);
|
|
void apb_bootret_deassert(struct device *dev);
|
|
|
|
#endif /* __ARCHE_PLATFORM_H */
|