mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 05:16:08 +07:00
drm/msm: dpu: Remove dpu_power_handle
Now that we don't have any event handlers, remove dpu_power_handle! Changes in v2: - None Reviewed-by: Jeykumar Sankaran <jsanka@codeaurora.org> Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
aeb7b49a1b
commit
09a2e645b0
@ -74,7 +74,6 @@ msm-y := \
|
||||
disp/dpu1/dpu_kms.o \
|
||||
disp/dpu1/dpu_mdss.o \
|
||||
disp/dpu1/dpu_plane.o \
|
||||
disp/dpu1/dpu_power_handle.o \
|
||||
disp/dpu1/dpu_rm.o \
|
||||
disp/dpu1/dpu_vbif.o \
|
||||
msm_atomic.o \
|
||||
|
@ -1064,8 +1064,6 @@ static int dpu_bind(struct device *dev, struct device *master, void *data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
dpu_power_resource_init(pdev, &dpu_kms->phandle);
|
||||
|
||||
platform_set_drvdata(pdev, dpu_kms);
|
||||
|
||||
msm_kms_init(&dpu_kms->base, &kms_funcs);
|
||||
@ -1085,7 +1083,6 @@ static void dpu_unbind(struct device *dev, struct device *master, void *data)
|
||||
struct dpu_kms *dpu_kms = platform_get_drvdata(pdev);
|
||||
struct dss_module_power *mp = &dpu_kms->mp;
|
||||
|
||||
dpu_power_resource_deinit(pdev, &dpu_kms->phandle);
|
||||
msm_dss_put_clk(mp->clk_config, mp->num_clk);
|
||||
devm_kfree(&pdev->dev, mp->clk_config);
|
||||
mp->num_clk = 0;
|
||||
@ -1124,10 +1121,6 @@ static int __maybe_unused dpu_runtime_suspend(struct device *dev)
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = dpu_power_resource_enable(&dpu_kms->phandle, false);
|
||||
if (rc)
|
||||
DPU_ERROR("resource disable failed: %d\n", rc);
|
||||
|
||||
rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, false);
|
||||
if (rc)
|
||||
DPU_ERROR("clock disable failed rc:%d\n", rc);
|
||||
@ -1161,10 +1154,6 @@ static int __maybe_unused dpu_runtime_resume(struct device *dev)
|
||||
drm_for_each_crtc(crtc, ddev)
|
||||
dpu_crtc_runtime_resume(crtc);
|
||||
|
||||
rc = dpu_power_resource_enable(&dpu_kms->phandle, true);
|
||||
if (rc)
|
||||
DPU_ERROR("resource enable failed: %d\n", rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "dpu_hw_top.h"
|
||||
#include "dpu_io_util.h"
|
||||
#include "dpu_rm.h"
|
||||
#include "dpu_power_handle.h"
|
||||
#include "dpu_irq.h"
|
||||
#include "dpu_core_perf.h"
|
||||
|
||||
@ -114,8 +113,6 @@ struct dpu_kms {
|
||||
int core_rev;
|
||||
struct dpu_mdss_cfg *catalog;
|
||||
|
||||
struct dpu_power_handle phandle;
|
||||
|
||||
/* directory entry for debugfs */
|
||||
struct dentry *debugfs_root;
|
||||
struct dentry *debugfs_danger;
|
||||
|
@ -1,136 +0,0 @@
|
||||
/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "[drm:%s:%d]: " fmt, __func__, __LINE__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/of_platform.h>
|
||||
|
||||
#include "dpu_power_handle.h"
|
||||
#include "dpu_trace.h"
|
||||
|
||||
static void dpu_power_event_trigger_locked(struct dpu_power_handle *phandle,
|
||||
u32 event_type)
|
||||
{
|
||||
struct dpu_power_event *event;
|
||||
|
||||
list_for_each_entry(event, &phandle->event_list, list) {
|
||||
if (event->event_type & event_type)
|
||||
event->cb_fnc(event_type, event->usr);
|
||||
}
|
||||
}
|
||||
|
||||
void dpu_power_resource_init(struct platform_device *pdev,
|
||||
struct dpu_power_handle *phandle)
|
||||
{
|
||||
phandle->dev = &pdev->dev;
|
||||
|
||||
INIT_LIST_HEAD(&phandle->event_list);
|
||||
|
||||
mutex_init(&phandle->phandle_lock);
|
||||
}
|
||||
|
||||
void dpu_power_resource_deinit(struct platform_device *pdev,
|
||||
struct dpu_power_handle *phandle)
|
||||
{
|
||||
struct dpu_power_event *curr_event, *next_event;
|
||||
|
||||
if (!phandle || !pdev) {
|
||||
pr_err("invalid input param\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mutex_lock(&phandle->phandle_lock);
|
||||
list_for_each_entry_safe(curr_event, next_event,
|
||||
&phandle->event_list, list) {
|
||||
pr_err("event:%d, client:%s still registered\n",
|
||||
curr_event->event_type,
|
||||
curr_event->client_name);
|
||||
curr_event->active = false;
|
||||
list_del(&curr_event->list);
|
||||
}
|
||||
mutex_unlock(&phandle->phandle_lock);
|
||||
}
|
||||
|
||||
int dpu_power_resource_enable(struct dpu_power_handle *phandle, bool enable)
|
||||
{
|
||||
u32 event_type;
|
||||
|
||||
if (!phandle) {
|
||||
pr_err("invalid input argument\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&phandle->phandle_lock);
|
||||
|
||||
event_type = enable ? DPU_POWER_EVENT_ENABLE : DPU_POWER_EVENT_DISABLE;
|
||||
|
||||
dpu_power_event_trigger_locked(phandle, event_type);
|
||||
|
||||
mutex_unlock(&phandle->phandle_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dpu_power_event *dpu_power_handle_register_event(
|
||||
struct dpu_power_handle *phandle,
|
||||
u32 event_type, void (*cb_fnc)(u32 event_type, void *usr),
|
||||
void *usr, char *client_name)
|
||||
{
|
||||
struct dpu_power_event *event;
|
||||
|
||||
if (!phandle) {
|
||||
pr_err("invalid power handle\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
} else if (!cb_fnc || !event_type) {
|
||||
pr_err("no callback fnc or event type\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
event = kzalloc(sizeof(struct dpu_power_event), GFP_KERNEL);
|
||||
if (!event)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
event->event_type = event_type;
|
||||
event->cb_fnc = cb_fnc;
|
||||
event->usr = usr;
|
||||
strlcpy(event->client_name, client_name, MAX_CLIENT_NAME_LEN);
|
||||
event->active = true;
|
||||
|
||||
mutex_lock(&phandle->phandle_lock);
|
||||
list_add(&event->list, &phandle->event_list);
|
||||
mutex_unlock(&phandle->phandle_lock);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
void dpu_power_handle_unregister_event(
|
||||
struct dpu_power_handle *phandle,
|
||||
struct dpu_power_event *event)
|
||||
{
|
||||
if (!phandle || !event) {
|
||||
pr_err("invalid phandle or event\n");
|
||||
} else if (!event->active) {
|
||||
pr_err("power handle deinit already done\n");
|
||||
kfree(event);
|
||||
} else {
|
||||
mutex_lock(&phandle->phandle_lock);
|
||||
list_del_init(&event->list);
|
||||
mutex_unlock(&phandle->phandle_lock);
|
||||
kfree(event);
|
||||
}
|
||||
}
|
@ -1,113 +0,0 @@
|
||||
/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DPU_POWER_HANDLE_H_
|
||||
#define _DPU_POWER_HANDLE_H_
|
||||
|
||||
#define MAX_CLIENT_NAME_LEN 128
|
||||
|
||||
#define DPU_POWER_HANDLE_ENABLE_BUS_AB_QUOTA 0
|
||||
#define DPU_POWER_HANDLE_DISABLE_BUS_AB_QUOTA 0
|
||||
#define DPU_POWER_HANDLE_ENABLE_BUS_IB_QUOTA 1600000000
|
||||
#define DPU_POWER_HANDLE_DISABLE_BUS_IB_QUOTA 0
|
||||
|
||||
#include "dpu_io_util.h"
|
||||
|
||||
/* events will be triggered on power handler enable/disable */
|
||||
#define DPU_POWER_EVENT_DISABLE BIT(0)
|
||||
#define DPU_POWER_EVENT_ENABLE BIT(1)
|
||||
|
||||
/*
|
||||
* struct dpu_power_event - local event registration structure
|
||||
* @client_name: name of the client registering
|
||||
* @cb_fnc: pointer to desired callback function
|
||||
* @usr: user pointer to pass to callback event trigger
|
||||
* @event: refer to DPU_POWER_HANDLE_EVENT_*
|
||||
* @list: list to attach event master list
|
||||
* @active: indicates the state of dpu power handle
|
||||
*/
|
||||
struct dpu_power_event {
|
||||
char client_name[MAX_CLIENT_NAME_LEN];
|
||||
void (*cb_fnc)(u32 event_type, void *usr);
|
||||
void *usr;
|
||||
u32 event_type;
|
||||
struct list_head list;
|
||||
bool active;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dpu_power_handle: power handle main struct
|
||||
* @phandle_lock: lock to synchronize the enable/disable
|
||||
* @dev: pointer to device structure
|
||||
* @usecase_ndx: current usecase index
|
||||
* @event_list: current power handle event list
|
||||
*/
|
||||
struct dpu_power_handle {
|
||||
struct mutex phandle_lock;
|
||||
struct device *dev;
|
||||
u32 current_usecase_ndx;
|
||||
struct list_head event_list;
|
||||
};
|
||||
|
||||
/**
|
||||
* dpu_power_resource_init() - initializes the dpu power handle
|
||||
* @pdev: platform device to search the power resources
|
||||
* @pdata: power handle to store the power resources
|
||||
*/
|
||||
void dpu_power_resource_init(struct platform_device *pdev,
|
||||
struct dpu_power_handle *pdata);
|
||||
|
||||
/**
|
||||
* dpu_power_resource_deinit() - release the dpu power handle
|
||||
* @pdev: platform device for power resources
|
||||
* @pdata: power handle containing the resources
|
||||
*
|
||||
* Return: error code.
|
||||
*/
|
||||
void dpu_power_resource_deinit(struct platform_device *pdev,
|
||||
struct dpu_power_handle *pdata);
|
||||
|
||||
/**
|
||||
* dpu_power_resource_enable() - enable/disable the power resources
|
||||
* @pdata: power handle containing the resources
|
||||
* @enable: boolean request for enable/disable
|
||||
*
|
||||
* Return: error code.
|
||||
*/
|
||||
int dpu_power_resource_enable(struct dpu_power_handle *pdata, bool enable);
|
||||
|
||||
/**
|
||||
* dpu_power_handle_register_event - register a callback function for an event.
|
||||
* Clients can register for multiple events with a single register.
|
||||
* Any block with access to phandle can register for the event
|
||||
* notification.
|
||||
* @phandle: power handle containing the resources
|
||||
* @event_type: event type to register; refer DPU_POWER_HANDLE_EVENT_*
|
||||
* @cb_fnc: pointer to desired callback function
|
||||
* @usr: user pointer to pass to callback on event trigger
|
||||
*
|
||||
* Return: event pointer if success, or error code otherwise
|
||||
*/
|
||||
struct dpu_power_event *dpu_power_handle_register_event(
|
||||
struct dpu_power_handle *phandle,
|
||||
u32 event_type, void (*cb_fnc)(u32 event_type, void *usr),
|
||||
void *usr, char *client_name);
|
||||
/**
|
||||
* dpu_power_handle_unregister_event - unregister callback for event(s)
|
||||
* @phandle: power handle containing the resources
|
||||
* @event: event pointer returned after power handle register
|
||||
*/
|
||||
void dpu_power_handle_unregister_event(struct dpu_power_handle *phandle,
|
||||
struct dpu_power_event *event);
|
||||
|
||||
#endif /* _DPU_POWER_HANDLE_H_ */
|
Loading…
Reference in New Issue
Block a user