mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-24 02:01:36 +03:00
platform: dce: reworked dce FSM design
Redesign DCE KMD drive state machine to handle new PM events. Bug 3583331 Change-Id: I89adcfa2f311a9a1e86b70e14821468203365266 Signed-off-by: Mahesh Kumar <mahkumar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2673665 Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: Arun Swain <arswain@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Laxman Dewangan
parent
a6cc70f8d5
commit
28a1cfd1c1
@@ -576,6 +576,14 @@ void dce_thread_join(struct dce_thread *thread)
|
||||
usleep_range(10000, 20000);
|
||||
};
|
||||
|
||||
/**
|
||||
* dce_get_nxt_pow_of_2 : get next power of 2 number for a given number
|
||||
*
|
||||
* @addr : Address of given number
|
||||
* @nbits : bits in given number
|
||||
*
|
||||
* Return : unsigned long next power of 2 value
|
||||
*/
|
||||
unsigned long dce_get_nxt_pow_of_2(unsigned long *addr, u8 nbits)
|
||||
{
|
||||
u8 l_bit = 0;
|
||||
@@ -600,3 +608,53 @@ unsigned long dce_get_nxt_pow_of_2(unsigned long *addr, u8 nbits)
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/*
|
||||
* dce_schedule_work : schedule work in global workqueue
|
||||
*
|
||||
* @work : dce work to be scheduled
|
||||
*
|
||||
* Return : void
|
||||
*/
|
||||
void dce_schedule_work(struct dce_work_struct *work)
|
||||
{
|
||||
schedule_work(&work->work);
|
||||
}
|
||||
|
||||
/*
|
||||
* dce_work_handle_fn : handler function for scheduled dce-work
|
||||
*
|
||||
* @work : Pointer to the scheduled work
|
||||
*
|
||||
* Return : void
|
||||
*/
|
||||
void dce_work_handle_fn(struct work_struct *work)
|
||||
{
|
||||
struct dce_work_struct *dce_work = container_of(work,
|
||||
struct dce_work_struct,
|
||||
work);
|
||||
|
||||
if (dce_work->dce_work_fn != NULL)
|
||||
dce_work->dce_work_fn(dce_work->d);
|
||||
}
|
||||
|
||||
/*
|
||||
* dce_init_work : Init dce work structure
|
||||
*
|
||||
* @d : Pointer to tegra_dce struct.
|
||||
* @work : Pointer to dce work structure
|
||||
* @work_fn : worker function to be called
|
||||
*
|
||||
* Return : 0 if successful
|
||||
*/
|
||||
int dce_init_work(struct tegra_dce *d,
|
||||
struct dce_work_struct *work,
|
||||
void (*work_fn)(struct tegra_dce *d))
|
||||
{
|
||||
work->d = d;
|
||||
work->dce_work_fn = work_fn;
|
||||
|
||||
INIT_WORK(&work->work, dce_work_handle_fn);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user