diff --git a/arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h b/arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h
index e5b406e..b722b46 100644
--- a/arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h
+++ b/arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h
@@ -46,40 +46,6 @@
 
     /** Set the input, weights, biases and output tensors.
      *
-     * @note This method will be deprecated in the next release.
-     *
-     * @param[in,out] input              Input tensor. 3 lower dimensions represent a single input, and an optional 4th dimension for batch of inputs. Data types supported: QASYMM8/F16/F32.
-     * @param[in]     weights            The 4d weights with dimensions [width, height, IFM, OFM]. Data type supported: Same as @p input.
-     * @param[in]     bias               (Optional) The biases have one dimension. Data type supported: Same as @p input.
-     * @param[out]    output             Output tensor. The output has the same number of dimensions as the @p input.
-     * @param[in]     deconv_info        Contains padding and policies to be used in the deconvolution, this is described in @ref PadStrideInfo.
-     * @param[in]     inner_border_right The number of zeros added to right edge of the input.
-     * @param[in]     inner_border_top   The number of zeros added to top edge of the input.
-     * @param[in]     weights_info       (Optional) Weights information needed for @ref CLConvolutionLayer, specifies if the weights tensor has been reshaped with @ref CLWeightsReshapeKernel.
-     *
-     */
-    void configure(ICLTensor *input, ICLTensor *weights, const ICLTensor *bias, ICLTensor *output, const PadStrideInfo &deconv_info,
-                   unsigned int inner_border_right, unsigned int inner_border_top, const WeightsInfo &weights_info = WeightsInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref CLDeconvolutionLayer
-     *
-     * @note This method will be deprecated in the next release.
-     *
-     * @param[in] input              Input tensor info. 3 lower dimensions represent a single input, and an optional 4th dimension for batch of inputs. Data types supported: QASYMM8/F16/F32.
-     * @param[in] weights            The 4d weights info with dimensions [width, height, IFM, OFM]. Data type supported: Same as @p input.
-     * @param[in] bias               (Optional) The biases have one dimension. Data type supported: Same as @p input.
-     * @param[in] output             Output tensor info. The output has the same number of dimensions as the @p input.
-     * @param[in] deconv_info        Contains padding and policies to be used in the deconvolution, this is described in @ref PadStrideInfo.
-     * @param[in] inner_border_right The number of zeros added to right edge of the input.
-     * @param[in] inner_border_top   The number of zeros added to top edge of the input.
-     * @param[in] weights_info       (Optional) Weights information needed for @ref CLConvolutionLayer, specifies if the weights tensor has been reshaped with @ref CLWeightsReshapeKernel.
-     *
-     * @return a status
-     */
-    static Status validate(const ITensorInfo *input, const ITensorInfo *weights, const ITensorInfo *bias, ITensorInfo *output, const PadStrideInfo &deconv_info,
-                           unsigned int inner_border_right, unsigned int inner_border_top, const WeightsInfo &weights_info = WeightsInfo());
-
-    /** Set the input, weights, biases and output tensors.
-     *
      * @param[in,out] input        Input tensor. 3 lower dimensions represent a single input, and an optional 4th dimension for batch of inputs. Data types supported: QASYMM8/F16/F32.
      * @param[in]     weights      The 4d weights with dimensions [width, height, IFM, OFM]. Data type supported: Same as @p input.
      * @param[in]     bias         (Optional) The biases have one dimension. Data type supported: Same as @p input.
diff --git a/arm_compute/runtime/CL/functions/CLDeconvolutionLayerUpsample.h b/arm_compute/runtime/CL/functions/CLDeconvolutionLayerUpsample.h
index 3751178..cab252f 100644
--- a/arm_compute/runtime/CL/functions/CLDeconvolutionLayerUpsample.h
+++ b/arm_compute/runtime/CL/functions/CLDeconvolutionLayerUpsample.h
@@ -61,24 +61,20 @@
 
     /** Initialize the function's source, destination, interpolation type and border_mode.
      *
-     * @param[in, out] input        Source tensor. Data type supported: QASYMM8/F16/F32.
-     * @param[out]     output       Destination tensor. Data type supported: same as @p input.
-     * @param[in]      inner_border The number of zeros added to right and top edges of the input.
-     * @param[in]      info         Contains padding and policies to be used in the deconvolution.
+     * @param[in, out] input  Source tensor. Data type supported: QASYMM8/F16/F32.
+     * @param[out]     output Destination tensor. Data type supported: same as @p input.
+     * @param[in]      info   Contains padding and policies to be used in the deconvolution.
      */
-    void configure(ICLTensor *input, ICLTensor *output, const BorderSize &inner_border,
-                   const PadStrideInfo &info);
+    void configure(ICLTensor *input, ICLTensor *output, const PadStrideInfo &info);
     /** Static function to check if given info will lead to a valid configuration of @ref CLDeconvolutionLayerUpsample
      *
-     * @param[in] input        Source tensor info. Data type supported: QASYMM8/F16/F32.
-     * @param[in] output       Destination tensor info. Data type supported: same as @p input.
-     * @param[in] inner_border The number of zeros added to right and top edges of the input.
-     * @param[in] info         Contains padding and policies to be used in the deconvolution.
+     * @param[in] input  Source tensor info. Data type supported: QASYMM8/F16/F32.
+     * @param[in] output Destination tensor info. Data type supported: same as @p input.
+     * @param[in] info   Contains padding and policies to be used in the deconvolution.
      *
      * @return a status
      */
-    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const BorderSize &inner_border,
-                           const PadStrideInfo &info);
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const PadStrideInfo &info);
 
     // Inherited methods overridden:
     void run() override;
