From patchwork Thu Jul 26 20:30:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jordan Crouse X-Patchwork-Id: 10546419 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 50A231805 for ; Thu, 26 Jul 2018 20:30:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5C4B32B7DE for ; Thu, 26 Jul 2018 20:30:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 50DE92B808; Thu, 26 Jul 2018 20:30:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 47C742B7DE for ; Thu, 26 Jul 2018 20:30:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730794AbeGZVsv (ORCPT ); Thu, 26 Jul 2018 17:48:51 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:35730 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730533AbeGZVsv (ORCPT ); Thu, 26 Jul 2018 17:48:51 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 21FB2604D4; Thu, 26 Jul 2018 20:30:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1532637021; bh=OrItJXKskm1+rrhuNnOnviCqskn1hYKReqy7YvuI4fI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VRJroqVvWhlkiTy0VfPx9AwrR5CbqQVAaYHXEX8jT+jKWtQ7bsW7UIzRSSrtsbYJD CLpFcp0WG3YNeMT/7BL4cy0RINiMFYzBfUAWv6MFqWK4BI93+gFwVia1N5qu3WZGxH 5f7jsmomZj9seZpMgLcU/k/YFWszhgakCClzwbLU= Received: from jcrouse-lnx.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: jcrouse@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 7CF87604D4; Thu, 26 Jul 2018 20:30:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1532637020; bh=OrItJXKskm1+rrhuNnOnviCqskn1hYKReqy7YvuI4fI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OlDGNl+TExQylZ+fNDJVQA2+x6JztEphjFI5KtYo1QnMuCY/ZpqxYLNKy1s8qmilj JBcq4uTBZiM2WvZ6GUyBI8qhDtKl6V2m53M4x/nIRFwcXaLcTcvslY3DHtmkB58PPV JkWMwlZWhxCY6Aa4jDXjdaCH1w3+oRUtKGmfoLks= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 7CF87604D4 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=jcrouse@codeaurora.org From: Jordan Crouse To: freedreno@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, seanpaul@chromium.org, linux-arm-msm@vger.kernel.org Subject: [PATCH 2/5] drm/msm/disp/dpu: Remove unused code from drm_crtc.c Date: Thu, 26 Jul 2018 14:30:11 -0600 Message-Id: <20180726203014.3270-3-jcrouse@codeaurora.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180726203014.3270-1-jcrouse@codeaurora.org> References: <20180726203014.3270-1-jcrouse@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Remove a chunk of unused code from drm_crtc.c, namely dpu_crtc_res_add, dpu_crtc_res_get, dpu_crtc_res_put and associated static functions. Also zap dpu_crtc_event_queue(), helper functions and members. Signed-off-by: Jordan Crouse --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 383 +---------------------- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 61 ---- 2 files changed, 2 insertions(+), 442 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index 7ac0e0dda866..80cbf75bc2ff 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -280,289 +280,6 @@ static void _dpu_crtc_rp_reset(struct dpu_crtc_respool *rp, mutex_unlock(rp_lock); } -/** - * _dpu_crtc_rp_add_no_lock - add given resource to resource pool without lock - * @rp: Pointer to original resource pool - * @type: Resource type - * @tag: Search tag for given resource - * @val: Resource handle - * @ops: Resource callback operations - * return: 0 if success; error code otherwise - */ -static int _dpu_crtc_rp_add_no_lock(struct dpu_crtc_respool *rp, u32 type, - u64 tag, void *val, struct dpu_crtc_res_ops *ops) -{ - struct dpu_crtc_res *res; - struct drm_crtc *crtc; - - if (!rp || !ops) { - DPU_ERROR("invalid resource pool/ops\n"); - return -EINVAL; - } - - crtc = _dpu_crtc_rp_to_crtc(rp); - if (!crtc) { - DPU_ERROR("invalid crtc\n"); - return -EINVAL; - } - - list_for_each_entry(res, &rp->res_list, list) { - if (res->type != type || res->tag != tag) - continue; - DPU_ERROR("crtc%d.%u already exist res:0x%x/0x%llx/%pK/%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->tag, res->val, - atomic_read(&res->refcount)); - return -EEXIST; - } - res = kzalloc(sizeof(struct dpu_crtc_res), GFP_KERNEL); - if (!res) - return -ENOMEM; - INIT_LIST_HEAD(&res->list); - atomic_set(&res->refcount, 1); - res->type = type; - res->tag = tag; - res->val = val; - res->ops = *ops; - list_add_tail(&res->list, &rp->res_list); - DPU_DEBUG("crtc%d.%u added res:0x%x/0x%llx\n", - crtc->base.id, rp->sequence_id, type, tag); - return 0; -} - -/** - * _dpu_crtc_rp_add - add given resource to resource pool - * @rp: Pointer to original resource pool - * @type: Resource type - * @tag: Search tag for given resource - * @val: Resource handle - * @ops: Resource callback operations - * return: 0 if success; error code otherwise - */ -static int _dpu_crtc_rp_add(struct dpu_crtc_respool *rp, u32 type, u64 tag, - void *val, struct dpu_crtc_res_ops *ops) -{ - int rc; - - if (!rp) { - DPU_ERROR("invalid resource pool\n"); - return -EINVAL; - } - - mutex_lock(rp->rp_lock); - rc = _dpu_crtc_rp_add_no_lock(rp, type, tag, val, ops); - mutex_unlock(rp->rp_lock); - return rc; -} - -/** - * _dpu_crtc_rp_get - lookup the resource from given resource pool and obtain - * if available; otherwise, obtain resource from global pool - * @rp: Pointer to original resource pool - * @type: Resource type - * @tag: Search tag for given resource - * return: Resource handle if success; pointer error or null otherwise - */ -static void *_dpu_crtc_rp_get(struct dpu_crtc_respool *rp, u32 type, u64 tag) -{ - struct dpu_crtc_respool *old_rp; - struct dpu_crtc_res *res; - void *val = NULL; - int rc; - struct drm_crtc *crtc; - - if (!rp) { - DPU_ERROR("invalid resource pool\n"); - return NULL; - } - - crtc = _dpu_crtc_rp_to_crtc(rp); - if (!crtc) { - DPU_ERROR("invalid crtc\n"); - return NULL; - } - - mutex_lock(rp->rp_lock); - list_for_each_entry(res, &rp->res_list, list) { - if (res->type != type || res->tag != tag) - continue; - DPU_DEBUG("crtc%d.%u found res:0x%x/0x%llx/%pK/%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->tag, res->val, - atomic_read(&res->refcount)); - atomic_inc(&res->refcount); - res->flags &= ~DPU_CRTC_RES_FLAG_FREE; - mutex_unlock(rp->rp_lock); - return res->val; - } - list_for_each_entry(res, &rp->res_list, list) { - if (res->type != type || !(res->flags & DPU_CRTC_RES_FLAG_FREE)) - continue; - DPU_DEBUG("crtc%d.%u retag res:0x%x/0x%llx/%pK/%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->tag, res->val, - atomic_read(&res->refcount)); - atomic_inc(&res->refcount); - res->tag = tag; - res->flags &= ~DPU_CRTC_RES_FLAG_FREE; - mutex_unlock(rp->rp_lock); - return res->val; - } - /* not in this rp, try to grab from global pool */ - if (rp->ops.get) - val = rp->ops.get(NULL, type, -1); - if (!IS_ERR_OR_NULL(val)) - goto add_res; - /* - * Search older resource pools for hw blk with matching type, - * necessary when resource is being used by this object, - * but in previous states not yet cleaned up. - * - * This enables searching of all resources currently owned - * by this crtc even though the resource might not be used - * in the current atomic state. This allows those resources - * to be re-acquired by the new atomic state immediately - * without waiting for the resources to be fully released. - */ - else if (IS_ERR_OR_NULL(val) && (type < DPU_HW_BLK_MAX)) { - list_for_each_entry(old_rp, rp->rp_head, rp_list) { - if (old_rp == rp) - continue; - - list_for_each_entry(res, &old_rp->res_list, list) { - if (res->type != type) - continue; - DRM_DEBUG_KMS("crtc%d.%u found res:0x%x//%pK/ " - "in crtc%d.%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->val, - crtc->base.id, - old_rp->sequence_id); - if (res->ops.get) - res->ops.get(res->val, 0, -1); - val = res->val; - break; - } - - if (!IS_ERR_OR_NULL(val)) - break; - } - } - if (IS_ERR_OR_NULL(val)) { - DPU_DEBUG("crtc%d.%u failed to get res:0x%x//\n", - crtc->base.id, rp->sequence_id, type); - mutex_unlock(rp->rp_lock); - return NULL; - } -add_res: - rc = _dpu_crtc_rp_add_no_lock(rp, type, tag, val, &rp->ops); - if (rc) { - DPU_ERROR("crtc%d.%u failed to add res:0x%x/0x%llx\n", - crtc->base.id, rp->sequence_id, type, tag); - if (rp->ops.put) - rp->ops.put(val); - val = NULL; - } - mutex_unlock(rp->rp_lock); - return val; -} - -/** - * _dpu_crtc_rp_put - return given resource to resource pool - * @rp: Pointer to original resource pool - * @type: Resource type - * @tag: Search tag for given resource - * return: None - */ -static void _dpu_crtc_rp_put(struct dpu_crtc_respool *rp, u32 type, u64 tag) -{ - struct dpu_crtc_res *res, *next; - struct drm_crtc *crtc; - - if (!rp) { - DPU_ERROR("invalid resource pool\n"); - return; - } - - crtc = _dpu_crtc_rp_to_crtc(rp); - if (!crtc) { - DPU_ERROR("invalid crtc\n"); - return; - } - - mutex_lock(rp->rp_lock); - list_for_each_entry_safe(res, next, &rp->res_list, list) { - if (res->type != type || res->tag != tag) - continue; - DPU_DEBUG("crtc%d.%u found res:0x%x/0x%llx/%pK/%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->tag, res->val, - atomic_read(&res->refcount)); - if (res->flags & DPU_CRTC_RES_FLAG_FREE) - DPU_ERROR( - "crtc%d.%u already free res:0x%x/0x%llx/%pK/%d\n", - crtc->base.id, rp->sequence_id, - res->type, res->tag, res->val, - atomic_read(&res->refcount)); - else if (atomic_dec_return(&res->refcount) == 0) - res->flags |= DPU_CRTC_RES_FLAG_FREE; - - mutex_unlock(rp->rp_lock); - return; - } - DPU_ERROR("crtc%d.%u not found res:0x%x/0x%llx\n", - crtc->base.id, rp->sequence_id, type, tag); - mutex_unlock(rp->rp_lock); -} - -int dpu_crtc_res_add(struct drm_crtc_state *state, u32 type, u64 tag, - void *val, struct dpu_crtc_res_ops *ops) -{ - struct dpu_crtc_respool *rp; - - if (!state) { - DPU_ERROR("invalid parameters\n"); - return -EINVAL; - } - - rp = &to_dpu_crtc_state(state)->rp; - return _dpu_crtc_rp_add(rp, type, tag, val, ops); -} - -void *dpu_crtc_res_get(struct drm_crtc_state *state, u32 type, u64 tag) -{ - struct dpu_crtc_respool *rp; - void *val; - - if (!state) { - DPU_ERROR("invalid parameters\n"); - return NULL; - } - - rp = &to_dpu_crtc_state(state)->rp; - val = _dpu_crtc_rp_get(rp, type, tag); - if (IS_ERR(val)) { - DPU_ERROR("failed to get res type:0x%x:0x%llx\n", - type, tag); - return NULL; - } - - return val; -} - -void dpu_crtc_res_put(struct drm_crtc_state *state, u32 type, u64 tag) -{ - struct dpu_crtc_respool *rp; - - if (!state) { - DPU_ERROR("invalid parameters\n"); - return; - } - - rp = &to_dpu_crtc_state(state)->rp; - _dpu_crtc_rp_put(rp, type, tag); -} - static void dpu_crtc_destroy(struct drm_crtc *crtc) { struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc); @@ -2364,97 +2081,6 @@ static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { .atomic_flush = dpu_crtc_atomic_flush, }; -static void _dpu_crtc_event_cb(struct kthread_work *work) -{ - struct dpu_crtc_event *event; - struct dpu_crtc *dpu_crtc; - unsigned long irq_flags; - - if (!work) { - DPU_ERROR("invalid work item\n"); - return; - } - - event = container_of(work, struct dpu_crtc_event, kt_work); - - /* set dpu_crtc to NULL for static work structures */ - dpu_crtc = event->dpu_crtc; - if (!dpu_crtc) - return; - - if (event->cb_func) - event->cb_func(&dpu_crtc->base, event->usr); - - spin_lock_irqsave(&dpu_crtc->event_lock, irq_flags); - list_add_tail(&event->list, &dpu_crtc->event_free_list); - spin_unlock_irqrestore(&dpu_crtc->event_lock, irq_flags); -} - -int dpu_crtc_event_queue(struct drm_crtc *crtc, - void (*func)(struct drm_crtc *crtc, void *usr), void *usr) -{ - unsigned long irq_flags; - struct dpu_crtc *dpu_crtc; - struct msm_drm_private *priv; - struct dpu_crtc_event *event = NULL; - u32 crtc_id; - - if (!crtc || !crtc->dev || !crtc->dev->dev_private || !func) { - DPU_ERROR("invalid parameters\n"); - return -EINVAL; - } - dpu_crtc = to_dpu_crtc(crtc); - priv = crtc->dev->dev_private; - crtc_id = drm_crtc_index(crtc); - - /* - * Obtain an event struct from the private cache. This event - * queue may be called from ISR contexts, so use a private - * cache to avoid calling any memory allocation functions. - */ - spin_lock_irqsave(&dpu_crtc->event_lock, irq_flags); - if (!list_empty(&dpu_crtc->event_free_list)) { - event = list_first_entry(&dpu_crtc->event_free_list, - struct dpu_crtc_event, list); - list_del_init(&event->list); - } - spin_unlock_irqrestore(&dpu_crtc->event_lock, irq_flags); - - if (!event) - return -ENOMEM; - - /* populate event node */ - event->dpu_crtc = dpu_crtc; - event->cb_func = func; - event->usr = usr; - - /* queue new event request */ - kthread_init_work(&event->kt_work, _dpu_crtc_event_cb); - kthread_queue_work(&priv->event_thread[crtc_id].worker, - &event->kt_work); - - return 0; -} - -static int _dpu_crtc_init_events(struct dpu_crtc *dpu_crtc) -{ - int i, rc = 0; - - if (!dpu_crtc) { - DPU_ERROR("invalid crtc\n"); - return -EINVAL; - } - - spin_lock_init(&dpu_crtc->event_lock); - - INIT_LIST_HEAD(&dpu_crtc->event_free_list); - for (i = 0; i < DPU_CRTC_MAX_EVENT_COUNT; ++i) - list_add_tail(&dpu_crtc->event_cache[i].list, - &dpu_crtc->event_free_list); - - return rc; -} - /* initialize crtc */ struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane) { @@ -2462,7 +2088,7 @@ struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane) struct dpu_crtc *dpu_crtc = NULL; struct msm_drm_private *priv = NULL; struct dpu_kms *kms = NULL; - int i, rc; + int i; priv = dev->dev_private; kms = to_dpu_kms(priv->kms); @@ -2503,12 +2129,7 @@ struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane) snprintf(dpu_crtc->name, DPU_CRTC_NAME_SIZE, "crtc%u", crtc->base.id); /* initialize event handling */ - rc = _dpu_crtc_init_events(dpu_crtc); - if (rc) { - drm_crtc_cleanup(crtc); - kfree(dpu_crtc); - return ERR_PTR(rc); - } + spin_lock_init(&dpu_crtc->event_lock); dpu_crtc->phandle = &kms->phandle; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h index 4a97ba16735f..e87109e608e9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -112,23 +112,6 @@ struct dpu_crtc_frame_event { u32 event; }; -/** - * struct dpu_crtc_event - event callback tracking structure - * @list: Linked list tracking node - * @kt_work: Kthread worker structure - * @dpu_crtc: Pointer to associated dpu_crtc structure - * @cb_func: Pointer to callback function - * @usr: Pointer to user data to be provided to the callback - */ -struct dpu_crtc_event { - struct list_head list; - struct kthread_work kt_work; - void *dpu_crtc; - - void (*cb_func)(struct drm_crtc *crtc, void *usr); - void *usr; -}; - /* * Maximum number of free event structures to cache */ @@ -172,8 +155,6 @@ struct dpu_crtc_event { * @frame_done_comp : for frame_event_done synchronization * @event_thread : Pointer to event handler thread * @event_worker : Event worker queue - * @event_cache : Local cache of event worker structures - * @event_free_list : List of available event structures * @event_lock : Spinlock around event handling code * @misr_enable : boolean entry indicates misr enable/disable status. * @misr_frame_count : misr frame count provided by client @@ -224,8 +205,6 @@ struct dpu_crtc { struct completion frame_done_comp; /* for handling internal event thread */ - struct dpu_crtc_event event_cache[DPU_CRTC_MAX_EVENT_COUNT]; - struct list_head event_free_list; spinlock_t event_lock; bool misr_enable; u32 misr_frame_count; @@ -441,44 +420,4 @@ static inline bool dpu_crtc_is_enabled(struct drm_crtc *crtc) return crtc ? crtc->enabled : false; } -/** - * dpu_crtc_event_queue - request event callback - * @crtc: Pointer to drm crtc structure - * @func: Pointer to callback function - * @usr: Pointer to user data to be passed to callback - * Returns: Zero on success - */ -int dpu_crtc_event_queue(struct drm_crtc *crtc, - void (*func)(struct drm_crtc *crtc, void *usr), void *usr); - -/** - * dpu_crtc_res_add - add given resource to resource pool in crtc state - * @state: Pointer to drm crtc state - * @type: Resource type - * @tag: Search tag for given resource - * @val: Resource handle - * @ops: Resource callback operations - * return: 0 if success; error code otherwise - */ -int dpu_crtc_res_add(struct drm_crtc_state *state, u32 type, u64 tag, - void *val, struct dpu_crtc_res_ops *ops); - -/** - * dpu_crtc_res_get - get given resource from resource pool in crtc state - * @state: Pointer to drm crtc state - * @type: Resource type - * @tag: Search tag for given resource - * return: Resource handle if success; pointer error or null otherwise - */ -void *dpu_crtc_res_get(struct drm_crtc_state *state, u32 type, u64 tag); - -/** - * dpu_crtc_res_put - return given resource to resource pool in crtc state - * @state: Pointer to drm crtc state - * @type: Resource type - * @tag: Search tag for given resource - * return: None - */ -void dpu_crtc_res_put(struct drm_crtc_state *state, u32 type, u64 tag); - #endif /* _DPU_CRTC_H_ */