162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Authors: 	Shlomi Gridish <gridish@freescale.com>
662306a36Sopenharmony_ci * 		Li Yang <leoli@freescale.com>
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Description:
962306a36Sopenharmony_ci * Internal header file for UCC unit routines.
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci#ifndef __UCC_H__
1262306a36Sopenharmony_ci#define __UCC_H__
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <soc/fsl/qe/immap_qe.h>
1562306a36Sopenharmony_ci#include <soc/fsl/qe/qe.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define STATISTICS
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define UCC_MAX_NUM	8
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* Slow or fast type for UCCs.
2262306a36Sopenharmony_ci*/
2362306a36Sopenharmony_cienum ucc_speed_type {
2462306a36Sopenharmony_ci	UCC_SPEED_TYPE_FAST = UCC_GUEMR_MODE_FAST_RX | UCC_GUEMR_MODE_FAST_TX,
2562306a36Sopenharmony_ci	UCC_SPEED_TYPE_SLOW = UCC_GUEMR_MODE_SLOW_RX | UCC_GUEMR_MODE_SLOW_TX
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* ucc_set_type
2962306a36Sopenharmony_ci * Sets UCC to slow or fast mode.
3062306a36Sopenharmony_ci *
3162306a36Sopenharmony_ci * ucc_num - (In) number of UCC (0-7).
3262306a36Sopenharmony_ci * speed   - (In) slow or fast mode for UCC.
3362306a36Sopenharmony_ci */
3462306a36Sopenharmony_ciint ucc_set_type(unsigned int ucc_num, enum ucc_speed_type speed);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciint ucc_set_qe_mux_mii_mng(unsigned int ucc_num);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciint ucc_set_qe_mux_rxtx(unsigned int ucc_num, enum qe_clock clock,
3962306a36Sopenharmony_ci	enum comm_dir mode);
4062306a36Sopenharmony_ciint ucc_set_tdm_rxtx_clk(unsigned int tdm_num, enum qe_clock clock,
4162306a36Sopenharmony_ci			 enum comm_dir mode);
4262306a36Sopenharmony_ciint ucc_set_tdm_rxtx_sync(unsigned int tdm_num, enum qe_clock clock,
4362306a36Sopenharmony_ci			  enum comm_dir mode);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciint ucc_mux_set_grant_tsa_bkpt(unsigned int ucc_num, int set, u32 mask);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/* QE MUX clock routing for UCC
4862306a36Sopenharmony_ci*/
4962306a36Sopenharmony_cistatic inline int ucc_set_qe_mux_grant(unsigned int ucc_num, int set)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci	return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_GRANT);
5262306a36Sopenharmony_ci}
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistatic inline int ucc_set_qe_mux_tsa(unsigned int ucc_num, int set)
5562306a36Sopenharmony_ci{
5662306a36Sopenharmony_ci	return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_TSA);
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistatic inline int ucc_set_qe_mux_bkpt(unsigned int ucc_num, int set)
6062306a36Sopenharmony_ci{
6162306a36Sopenharmony_ci	return ucc_mux_set_grant_tsa_bkpt(ucc_num, set, QE_CMXUCR_BKPT);
6262306a36Sopenharmony_ci}
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#endif				/* __UCC_H__ */
65