Support XiZi_AIoT
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# The following three platforms support compatiable instructions.
|
||||
SRC_DIR := armv7-a
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,4 @@
|
||||
# The following three platforms support compatiable instructions.
|
||||
SRC_DIR := cortex-a9
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,3 @@
|
||||
SRC_DIR := uart_io_for_imx6q_sabrelite
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
SRC_FILES := imx_uart.c iomux_v3.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
Executable
+189
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012, Freescale Semiconductor, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* o Redistributions of source code must retain the above copyright notice, this list
|
||||
* of conditions and the following disclaimer.
|
||||
*
|
||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file imx_uart.c
|
||||
* @brief support imx6q uart function
|
||||
* @version 3.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2023.09.08
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: imx_uart.c
|
||||
Description: imx6q board uart function
|
||||
Others:
|
||||
History:
|
||||
1. Date: 2023-08-28
|
||||
Author: AIIT XUOS Lab
|
||||
Modification:
|
||||
1. first version
|
||||
*************************************************/
|
||||
#include "crm_regs.h"
|
||||
#include "regs_pins.h"
|
||||
#include "regsuart.h"
|
||||
#include "soc_memory_map.h"
|
||||
|
||||
#include "imx_uart.h"
|
||||
|
||||
#include "uart_common_ope.h"
|
||||
|
||||
static void UartInitGpio(void)
|
||||
{
|
||||
/* UART1 TXD */
|
||||
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD3_DAT6__UART1_TXD);
|
||||
|
||||
/* UART1 RXD */
|
||||
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD3_DAT7__UART1_RXD);
|
||||
|
||||
/* UART2 TXD */
|
||||
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D26__UART2_TXD);
|
||||
|
||||
/* UART2 RXD */
|
||||
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_RXD);
|
||||
}
|
||||
|
||||
static uint32_t GetUartClk(void)
|
||||
{
|
||||
uint32_t freq = 80000000, reg, podf;
|
||||
|
||||
reg = mmio_read(MXC_CCM_CSCDR1);
|
||||
podf = (reg & MXC_CCM_CSCDR1_UART_CLK_PODF_MASK) >> MXC_CCM_CSCDR1_UART_CLK_PODF_OFFSET;
|
||||
freq /= (podf + 1);
|
||||
|
||||
return freq;
|
||||
}
|
||||
|
||||
static void UartInitRegsInstance(uint32_t instance, uint32_t uart_baud_rate)
|
||||
{
|
||||
uint32_t uart_clk;
|
||||
|
||||
HW_UART_UCR1_WR(instance, 0);
|
||||
HW_UART_UCR2_WR(instance, 0);
|
||||
|
||||
while (!(HW_UART_UCR2(instance).B.SRST))
|
||||
;
|
||||
|
||||
HW_UART_UCR3_WR(instance, 0x0704);
|
||||
HW_UART_UCR4_WR(instance, 0x8000);
|
||||
HW_UART_UESC_WR(instance, 0x002B);
|
||||
HW_UART_UTIM_WR(instance, 0);
|
||||
HW_UART_UTS_WR(instance, 0);
|
||||
|
||||
uart_clk = GetUartClk();
|
||||
|
||||
HW_UART_UFCR_WR(instance, 4 << 7);
|
||||
HW_UART_UBIR_WR(instance, 0x0F);
|
||||
HW_UART_UBMR_WR(instance, uart_clk / (2 * uart_baud_rate));
|
||||
|
||||
HW_UART_UCR2_WR(instance, BM_UART_UCR2_WS | BM_UART_UCR2_IRTS | BM_UART_UCR2_RXEN | BM_UART_UCR2_TXEN | BM_UART_UCR2_SRST);
|
||||
HW_UART_UCR1_WR(instance, 1);
|
||||
}
|
||||
|
||||
__attribute__((__always_inline__)) static inline void UartPutCharInstance(uint32_t instance, uint8_t* ch)
|
||||
{
|
||||
/* Wait for Tx FIFO not full */
|
||||
while (HW_UART_UTS(instance).B.TXFULL)
|
||||
;
|
||||
|
||||
if ((char)*ch == '\n') {
|
||||
HW_UART_UTXD_WR(instance, '\r');
|
||||
while (HW_UART_UTS(instance).B.TXFULL)
|
||||
;
|
||||
}
|
||||
HW_UART_UTXD_WR(instance, *ch);
|
||||
}
|
||||
|
||||
__attribute__((__always_inline__)) static inline uint8_t UartGetCharInstance(uint32_t instance)
|
||||
{
|
||||
uint32_t read_data;
|
||||
|
||||
/* If Rx FIFO has no data ready */
|
||||
if (!(HW_UART_USR2(instance).B.RDR))
|
||||
return 0xFF;
|
||||
|
||||
read_data = HW_UART_URXD_RD(instance);
|
||||
|
||||
/* If error are detected */
|
||||
if (read_data & 0x7C00)
|
||||
return 0xFF;
|
||||
|
||||
return (uint8_t) read_data;
|
||||
}
|
||||
|
||||
__attribute__((__always_inline__)) static inline uint32_t UartGetIrqnumInstance(uint32_t instance)
|
||||
{
|
||||
return UART_IRQS(instance);
|
||||
}
|
||||
|
||||
static inline void UartInitInstance(uint32_t instance)
|
||||
{
|
||||
static char init = 0;
|
||||
if (init == 0) {
|
||||
mxc_iomux_v3_init((void*)IOMUXC_BASE_ADDR);
|
||||
UartInitGpio();
|
||||
}
|
||||
init = 1;
|
||||
UartInitRegsInstance(instance, UART_BAUD_RATE);
|
||||
}
|
||||
|
||||
static void UartPutChar(uint8_t ch)
|
||||
{
|
||||
UartPutCharInstance(IMX6Q_UART_INSTANCE, &ch);
|
||||
}
|
||||
|
||||
static uint8_t UartGetChar()
|
||||
{
|
||||
return UartGetCharInstance(IMX6Q_UART_INSTANCE);
|
||||
}
|
||||
|
||||
static void UartInit()
|
||||
{
|
||||
UartInitInstance(IMX6Q_UART_INSTANCE);
|
||||
}
|
||||
|
||||
static uint32_t UartGetIrqnum()
|
||||
{
|
||||
return UartGetIrqnumInstance(IMX6Q_UART_INSTANCE);
|
||||
}
|
||||
|
||||
/// @todo make this static
|
||||
static struct XiziSerialDriver hardkernel_serial_driver = (struct XiziSerialDriver) {
|
||||
.sys_serial_init = UartInit,
|
||||
.get_serial_irqnum = UartGetIrqnum,
|
||||
.putc = UartPutChar,
|
||||
.getc = UartGetChar,
|
||||
};
|
||||
|
||||
struct XiziSerialDriver* hardkernel_uart_init(struct TraceTag* hardkernel_tag)
|
||||
{
|
||||
hardkernel_serial_driver.sys_serial_init();
|
||||
return &hardkernel_serial_driver;
|
||||
}
|
||||
+584
@@ -0,0 +1,584 @@
|
||||
/*
|
||||
* Copyright (C) 2010-2012 Freescale Semiconductor, Inc. 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 as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* 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.
|
||||
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file crm_regs.h
|
||||
* @brief support imx6q clock control module define, reference from u-boot-2009-08/cpu/arm_cortexa8/mx6/crm_regs.h
|
||||
* @version 3.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2023.09.08
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_MX6_CRM_REGS_H__
|
||||
#define __ARCH_ARM_MACH_MX6_CRM_REGS_H__
|
||||
|
||||
#define MXC_CCM_BASE CCM_BASE_ADDR
|
||||
|
||||
// /* Register addresses of CCM*/
|
||||
// #define MXC_CCM_CCR (MXC_CCM_BASE + 0x00)
|
||||
// #define MXC_CCM_CCDR (MXC_CCM_BASE + 0x04)
|
||||
// #define MXC_CCM_CSR (MXC_CCM_BASE + 0x08)
|
||||
// #define MXC_CCM_CCSR (MXC_CCM_BASE + 0x0C)
|
||||
// #define MXC_CCM_CACRR (MXC_CCM_BASE + 0x10)
|
||||
// #define MXC_CCM_CBCDR (MXC_CCM_BASE + 0x14)
|
||||
// #define MXC_CCM_CBCMR (MXC_CCM_BASE + 0x18)
|
||||
// #define MXC_CCM_CSCMR1 (MXC_CCM_BASE + 0x1C)
|
||||
// #define MXC_CCM_CSCMR2 (MXC_CCM_BASE + 0x20)
|
||||
#define MXC_CCM_CSCDR1 (MXC_CCM_BASE + 0x24)
|
||||
// #define MXC_CCM_CS1CDR (MXC_CCM_BASE + 0x28)
|
||||
// #define MXC_CCM_CS2CDR (MXC_CCM_BASE + 0x2C)
|
||||
// #define MXC_CCM_CDCDR (MXC_CCM_BASE + 0x30)
|
||||
// #define MXC_CCM_CHSCDR (MXC_CCM_BASE + 0x34)
|
||||
// #define MXC_CCM_CSCDR2 (MXC_CCM_BASE + 0x38)
|
||||
// #define MXC_CCM_CSCDR3 (MXC_CCM_BASE + 0x3C)
|
||||
// #define MXC_CCM_CSCDR4 (MXC_CCM_BASE + 0x40)
|
||||
// #define MXC_CCM_CWDR (MXC_CCM_BASE + 0x44)
|
||||
// #define MXC_CCM_CDHIPR (MXC_CCM_BASE + 0x48)
|
||||
// #define MXC_CCM_CDCR (MXC_CCM_BASE + 0x4C)
|
||||
// #define MXC_CCM_CTOR (MXC_CCM_BASE + 0x50)
|
||||
// #define MXC_CCM_CLPCR (MXC_CCM_BASE + 0x54)
|
||||
// #define MXC_CCM_CISR (MXC_CCM_BASE + 0x58)
|
||||
// #define MXC_CCM_CIMR (MXC_CCM_BASE + 0x5C)
|
||||
// #define MXC_CCM_CCOSR (MXC_CCM_BASE + 0x60)
|
||||
// #define MXC_CCM_CGPR (MXC_CCM_BASE + 0x64)
|
||||
// #define MXC_CCM_CCGR0 (MXC_CCM_BASE + 0x68)
|
||||
// #define MXC_CCM_CCGR1 (MXC_CCM_BASE + 0x6C)
|
||||
// #define MXC_CCM_CCGR2 (MXC_CCM_BASE + 0x70)
|
||||
// #define MXC_CCM_CCGR3 (MXC_CCM_BASE + 0x74)
|
||||
// #define MXC_CCM_CCGR4 (MXC_CCM_BASE + 0x78)
|
||||
// #define MXC_CCM_CCGR5 (MXC_CCM_BASE + 0x7C)
|
||||
// #define MXC_CCM_CCGR6 (MXC_CCM_BASE + 0x80)
|
||||
// #define MXC_CCM_CCGR7 (MXC_CCM_BASE + 0x80)
|
||||
// #define MXC_CCM_CMEOR (MXC_CCM_BASE + 0x88)
|
||||
|
||||
// /* Define the bits in register CCR */
|
||||
// #define MXC_CCM_CCR_RBC_EN (1 << 27)
|
||||
// #define MXC_CCM_CCR_REG_BYPASS_CNT_MASK (0x3F << 21)
|
||||
// #define MXC_CCM_CCR_REG_BYPASS_CNT_OFFSET (21)
|
||||
// #define MXC_CCM_CCR_WB_COUNT_MASK (0x7)
|
||||
// #define MXC_CCM_CCR_WB_COUNT_OFFSET (1 << 16)
|
||||
// #define MXC_CCM_CCR_COSC_EN (1 << 12)
|
||||
// #define MXC_CCM_CCR_OSCNT_MASK (0xFF)
|
||||
// #define MXC_CCM_CCR_OSCNT_OFFSET (0)
|
||||
|
||||
// /* Define the bits in register CCDR */
|
||||
// #define MXC_CCM_CCDR_MMDC_CH1_HS_MASK (1 << 16)
|
||||
// #define MXC_CCM_CCDR_MMDC_CH0_HS_MASK (1 << 17)
|
||||
|
||||
// /* Define the bits in register CSR */
|
||||
// #define MXC_CCM_CSR_COSC_READY (1 << 5)
|
||||
// #define MXC_CCM_CSR_REF_EN_B (1 << 0)
|
||||
|
||||
// /* Define the bits in register CCSR */
|
||||
// #define MXC_CCM_CCSR_PDF_540M_AUTO_DIS (1 << 15)
|
||||
// #define MXC_CCM_CCSR_PDF_720M_AUTO_DIS (1 << 14)
|
||||
// #define MXC_CCM_CCSR_PDF_454M_AUTO_DIS (1 << 13)
|
||||
// #define MXC_CCM_CCSR_PDF_508M_AUTO_DIS (1 << 12)
|
||||
// #define MXC_CCM_CCSR_PDF_594M_AUTO_DIS (1 << 11)
|
||||
// #define MXC_CCM_CCSR_PDF_352M_AUTO_DIS (1 << 10)
|
||||
// #define MXC_CCM_CCSR_PDF_400M_AUTO_DIS (1 << 9)
|
||||
// #define MXC_CCM_CCSR_STEP_SEL (1 << 8)
|
||||
// #define MXC_CCM_CCSR_PLL1_SW_CLK_SEL (1 << 2)
|
||||
// #define MXC_CCM_CCSR_PLL2_SW_CLK_SEL (1 << 1)
|
||||
// #define MXC_CCM_CCSR_PLL3_SW_CLK_SEL (1 << 0)
|
||||
|
||||
// /* Define the bits in register CACRR */
|
||||
// #define MXC_CCM_CACRR_ARM_PODF_OFFSET (0)
|
||||
// #define MXC_CCM_CACRR_ARM_PODF_MASK (0x7)
|
||||
|
||||
// /* Define the bits in register CBCDR */
|
||||
// #define MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK (0x7 << 27)
|
||||
// #define MXC_CCM_CBCDR_PERIPH_CLK2_PODF_OFFSET (27)
|
||||
// #define MXC_CCM_CBCDR_PERIPH2_CLK2_SEL (1 << 26)
|
||||
// #define MXC_CCM_CBCDR_PERIPH_CLK_SEL (1 << 25)
|
||||
// #define MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK (0x7 << 19)
|
||||
// #define MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET (19)
|
||||
// #define MXC_CCM_CBCDR_AXI_PODF_MASK (0x7 << 16)
|
||||
// #define MXC_CCM_CBCDR_AXI_PODF_OFFSET (16)
|
||||
// #define MXC_CCM_CBCDR_AHB_PODF_MASK (0x7 << 10)
|
||||
// #define MXC_CCM_CBCDR_AHB_PODF_OFFSET (10)
|
||||
// #define MXC_CCM_CBCDR_IPG_PODF_MASK (0x3 << 8)
|
||||
// #define MXC_CCM_CBCDR_IPG_PODF_OFFSET (8)
|
||||
// #define MXC_CCM_CBCDR_AXI_ALT_SEL (1 << 7)
|
||||
// #define MXC_CCM_CBCDR_AXI_SEL (1 << 6)
|
||||
// #define MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK (0x7 << 3)
|
||||
// #define MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET (3)
|
||||
// #define MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_MASK (0x7 << 0)
|
||||
// #define MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_OFFSET (0)
|
||||
|
||||
// /* Define the bits in register CBCMR */
|
||||
// #define MXC_CCM_CBCMR_GPU3D_SHADER_PODF_MASK (0x7 << 29)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_SHADER_PODF_OFFSET (29)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_CORE_PODF_MASK (0x7 << 26)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_CORE_PODF_OFFSET (26)
|
||||
// #define MXC_CCM_CBCMR_GPU2D_CORE_PODF_MASK (0x7 << 23)
|
||||
// #define MXC_CCM_CBCMR_GPU2D_CORE_PODF_OFFSET (23)
|
||||
// #define MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK (0x3 << 21)
|
||||
// #define MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET (21)
|
||||
// #define MXC_CCM_CBCMR_PRE_PERIPH2_CLK2_SEL (1 << 20)
|
||||
// #define MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_MASK (0x3 << 18)
|
||||
// #define MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_OFFSET (18)
|
||||
// #define MXC_CCM_CBCMR_GPU2D_CLK_SEL_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CBCMR_GPU2D_CLK_SEL_OFFSET (16)
|
||||
// #define MXC_CCM_CBCMR_VPU_AXI_CLK_SEL_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CBCMR_VPU_AXI_CLK_SEL_OFFSET (14)
|
||||
// #define MXC_CCM_CBCMR_PERIPH_CLK2_SEL_MASK (0x3 << 12)
|
||||
// #define MXC_CCM_CBCMR_PERIPH_CLK2_SEL_OFFSET (12)
|
||||
// #define MXC_CCM_CBCMR_VDOAXI_CLK_SEL (1 << 11)
|
||||
// #define MXC_CCM_CBCMR_PCIE_AXI_CLK_SEL (1 << 10)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_SHADER_CLK_SEL_MASK (0x3 << 8)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_SHADER_CLK_SEL_OFFSET (8)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_CORE_CLK_SEL_MASK (0x3 << 4)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_CORE_CLK_SEL_OFFSET (4)
|
||||
// #define MXC_CCM_CBCMR_GPU3D_AXI_CLK_SEL (1 << 1)
|
||||
// #define MXC_CCM_CBCMR_GPU2D_AXI_CLK_SEL (1 << 0)
|
||||
|
||||
// /* Define the bits in register CSCMR1 */
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_MASK (0x3 << 29)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_OFFSET (29)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_MASK (0x3 << 27)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_OFFSET (27)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_MASK (0x7 << 23)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_OFFSET (23)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_PODF_MASK (0x7 << 20)
|
||||
// #define MXC_CCM_CSCMR1_ACLK_EMI_PODF_OFFSET (20)
|
||||
// #define MXC_CCM_CSCMR1_USDHC4_CLK_SEL (1 << 19)
|
||||
// #define MXC_CCM_CSCMR1_USDHC3_CLK_SEL (1 << 18)
|
||||
// #define MXC_CCM_CSCMR1_USDHC2_CLK_SEL (1 << 17)
|
||||
// #define MXC_CCM_CSCMR1_USDHC1_CLK_SEL (1 << 16)
|
||||
// #define MXC_CCM_CSCMR1_SSI3_CLK_SEL_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CSCMR1_SSI3_CLK_SEL_OFFSET (14)
|
||||
// #define MXC_CCM_CSCMR1_SSI2_CLK_SEL_MASK (0x3 << 12)
|
||||
// #define MXC_CCM_CSCMR1_SSI2_CLK_SEL_OFFSET (12)
|
||||
// #define MXC_CCM_CSCMR1_SSI1_CLK_SEL_MASK (0x3 << 10)
|
||||
// #define MXC_CCM_CSCMR1_SSI1_CLK_SEL_OFFSET (10)
|
||||
// #define MXC_CCM_CSCMR1_PERCLK_PODF_MASK (0x3F)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CSCMR1_PERCLK_SEL (1 << 6)
|
||||
|
||||
// /* Define the bits in register CSCMR2 */
|
||||
// #define MXC_CCM_CSCMR2_ESAI_PRE_SEL_MASK (0x3 << 19)
|
||||
// #define MXC_CCM_CSCMR2_ESAI_PRE_SEL_OFFSET (19)
|
||||
// #define MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV (1 << 11)
|
||||
// #define MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV (1 << 10)
|
||||
// #define MXC_CCM_CSCMR2_CAN_CLK_SEL_MASK (0x3F << 2)
|
||||
// #define MXC_CCM_CSCMR2_CAN_CLK_SEL_OFFSET (2)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CSCMR2_EXTAUDIO_CLK_SEL_MASK (0x3 << 19)
|
||||
// #define MXC_CCM_CSCMR2_EXTAUDIO_CLK_SEL_OFFSET 19
|
||||
|
||||
// /* Define the bits in register CSCDR1 */
|
||||
// #define MXC_CCM_CSCDR1_VPU_AXI_PODF_MASK (0x7 << 25)
|
||||
// #define MXC_CCM_CSCDR1_VPU_AXI_PODF_OFFSET (25)
|
||||
// #define MXC_CCM_CSCDR1_USDHC4_PODF_MASK (0x7 << 22)
|
||||
// #define MXC_CCM_CSCDR1_USDHC4_PODF_OFFSET (22)
|
||||
// #define MXC_CCM_CSCDR1_USDHC3_PODF_MASK (0x7 << 19)
|
||||
// #define MXC_CCM_CSCDR1_USDHC3_PODF_OFFSET (19)
|
||||
// #define MXC_CCM_CSCDR1_USDHC2_PODF_MASK (0x7 << 16)
|
||||
// #define MXC_CCM_CSCDR1_USDHC2_PODF_OFFSET (16)
|
||||
// #define MXC_CCM_CSCDR1_USDHC1_PODF_MASK (0x7 << 11)
|
||||
// #define MXC_CCM_CSCDR1_USDHC1_PODF_OFFSET (11)
|
||||
// #define MXC_CCM_CSCDR1_USBOH3_CLK_PRED_OFFSET (8)
|
||||
// #define MXC_CCM_CSCDR1_USBOH3_CLK_PRED_MASK (0x7 << 8)
|
||||
// #define MXC_CCM_CSCDR1_USBOH3_CLK_PODF_OFFSET (6)
|
||||
// #define MXC_CCM_CSCDR1_USBOH3_CLK_PODF_MASK (0x3 << 6)
|
||||
#define MXC_CCM_CSCDR1_UART_CLK_PODF_MASK (0x3F)
|
||||
#define MXC_CCM_CSCDR1_UART_CLK_PODF_OFFSET (0)
|
||||
// /* On Sololite */
|
||||
// #define MXC_CCM_CSCDR1_UART_CLK_SEL (1 << 6)
|
||||
|
||||
// /* Define the bits in register CS1CDR */
|
||||
// #define MXC_CCM_CS1CDR_ESAI_CLK_PODF_MASK (0x3F << 25)
|
||||
// #define MXC_CCM_CS1CDR_ESAI_CLK_PODF_OFFSET (25)
|
||||
// #define MXC_CCM_CS1CDR_SSI3_CLK_PODF_MASK (0x3F << 16)
|
||||
// #define MXC_CCM_CS1CDR_SSI3_CLK_PODF_OFFSET (16)
|
||||
// #define MXC_CCM_CS1CDR_ESAI_CLK_PRED_MASK (0x3 << 9)
|
||||
// #define MXC_CCM_CS1CDR_ESAI_CLK_PRED_OFFSET (9)
|
||||
// #define MXC_CCM_CS1CDR_SSI1_CLK_PRED_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CS1CDR_SSI1_CLK_PRED_OFFSET (6)
|
||||
// #define MXC_CCM_CS1CDR_SSI1_CLK_PODF_MASK (0x3F)
|
||||
// #define MXC_CCM_CS1CDR_SSI1_CLK_PODF_OFFSET (0)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CS1CDR_EXTAUDIO_CLK_PODF_MASK (0x7 << 25)
|
||||
// #define MXC_CCM_CS1CDR_EXTAUDIO_CLK_PODF_OFFSET 25
|
||||
// #define MXC_CCM_CS1CDR_EXTAUDIO_CLK_PRED_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CS1CDR_EXTAUDIO_CLK_PRED_OFFSET 9
|
||||
|
||||
// /* Define the bits in register CS2CDR */
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_PODF_MASK (0x3F << 21)
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_PODF_OFFSET (21)
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_PRED_MASK (0x7 << 18)
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_PRED_OFFSET (18)
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET (16)
|
||||
// #define MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET (12)
|
||||
// #define MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET (9)
|
||||
// #define MXC_CCM_CS2CDR_SSI2_CLK_PRED_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CS2CDR_SSI2_CLK_PRED_OFFSET (6)
|
||||
// #define MXC_CCM_CS2CDR_SSI2_CLK_PODF_MASK (0x3F)
|
||||
// #define MXC_CCM_CS2CDR_SSI2_CLK_PODF_OFFSET (0)
|
||||
|
||||
// /* Define the bits in register CDCDR */
|
||||
// #define MXC_CCM_CDCDR_HSI_TX_PODF_MASK (0x7 << 29)
|
||||
// #define MXC_CCM_CDCDR_HSI_TX_PODF_OFFSET (29)
|
||||
// #define MXC_CCM_CDCDR_HSI_TX_CLK_SEL (1 << 28)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_PRED_MASK (0x7 << 25)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_PRED_OFFSET (25)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_PODF_MASK (0x7 << 19)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_PODF_OFFSET (19)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_SEL_MASK (0x3 << 20)
|
||||
// #define MXC_CCM_CDCDR_SPDIF0_CLK_SEL_OFFSET (20)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_PRED_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_PRED_OFFSET (12)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_PODF_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_PODF_OFFSET (9)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_SEL_MASK (0x3 << 7)
|
||||
// #define MXC_CCM_CDCDR_SPDIF1_CLK_SEL_OFFSET (7)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CDCDR_MSHC_XMSCKI_PODF_MASK (0x7 << 29)
|
||||
// #define MXC_CCM_CDCDR_MSHC_XMSCKI_PODF_OFFSET 29
|
||||
// #define MXC_CCM_CDCDR_MSHC_XMSCLI_CLK_SEL (0x1 << 28)
|
||||
|
||||
// /* Define the bits in register CHSCCDR */
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_PRE_CLK_SEL_MASK (0x7 << 15)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_PRE_CLK_SEL_OFFSET (15)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_PODF_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_PODF_OFFSET (12)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET (9)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_OFFSET (6)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_PODF_MASK (0x7 << 3)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_PODF_OFFSET (3)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK (0x7)
|
||||
// #define MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET (0)
|
||||
// /* On Sololite */
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_PRE_CLK_SEL_MASK (0x7 << 15)
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_PRE_CLK_SEL_OFFSET 15
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_PODF_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_PODF_OFFSET 12
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_CLK_SEL_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CHSCCDR_EPDC_AXI_CLK_SEL_OFFSET 9
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_PRE_CLK_SEL_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_PRE_CLK_SEL_OFFSET 6
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_PODF_MASK (0x7 << 3)
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_PODF_OFFSET 3
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_CLK_SEL_MASK 0x7
|
||||
// #define MXC_CCM_CHSCCDR_PXP_AXI_CLK_SEL_OFFSET 0
|
||||
|
||||
// /* Define the bits in register CSCDR2 */
|
||||
// #define MXC_CCM_CSCDR2_ECSPI_CLK_PODF_MASK (0x3F << 19)
|
||||
// #define MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET (19)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_MASK (0x7 << 15)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_OFFSET (15)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_PODF_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_PODF_OFFSET (12)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_CLK_SEL_MASK (0x7 << 9)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI1_CLK_SEL_OFFSET (9)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_PRE_CLK_SEL_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_PRE_CLK_SEL_OFFSET (6)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_PODF_MASK (0x7 << 3)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_PODF_OFFSET (3)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_CLK_SEL_MASK (0x7)
|
||||
// #define MXC_CCM_CHSCCDR_IPU2_DI0_CLK_SEL_OFFSET (0)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CSCDR2_ECSPI_CLK_SEL (0x1 << 18)
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_PRE_CLK_SEL_MASK (0x7 << 15)
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_PRE_CLK_SEL_OFFSET 15
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_PODF_MASK (0x7 << 12)
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_PODF_OFFSET 12
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_CLK_SEL_MASK (0X7 << 9)
|
||||
// #define MXC_CCM_CSCDR2_EPDC_PIX_CLK_SEL_OFFSET 9
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_PRE_CLK_SEL_MASK (0x7 << 6)
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_PRE_CLK_SEL_OFFSET 6
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_PODF_MASK (0x7 << 3)
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_PODF_OFFSET 3
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_MASK 0x7
|
||||
// #define MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_OFFSET 0
|
||||
|
||||
// /* Define the bits in register CSCDR3 */
|
||||
// #define MXC_CCM_CSCDR3_IPU2_HSP_PODF_MASK (0x7 << 16)
|
||||
// #define MXC_CCM_CSCDR3_IPU2_HSP_PODF_OFFSET (16)
|
||||
// #define MXC_CCM_CSCDR3_IPU2_HSP_CLK_SEL_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CSCDR3_IPU2_HSP_CLK_SEL_OFFSET (14)
|
||||
// #define MXC_CCM_CSCDR3_IPU1_HSP_PODF_MASK (0x7 << 11)
|
||||
// #define MXC_CCM_CSCDR3_IPU1_HSP_PODF_OFFSET (11)
|
||||
// #define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_MASK (0x3 << 9)
|
||||
// #define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_OFFSET (9)
|
||||
|
||||
// /* Define the bits in register CDHIPR */
|
||||
// #define MXC_CCM_CDHIPR_ARM_PODF_BUSY (1 << 16)
|
||||
// #define MXC_CCM_CDHIPR_PERIPH_CLK_SEL_BUSY (1 << 5)
|
||||
// #define MXC_CCM_CDHIPR_MMDC_CH0_PODF_BUSY (1 << 4)
|
||||
// #define MXC_CCM_CDHIPR_PERIPH2_CLK_SEL_BUSY (1 << 3)
|
||||
// #define MXC_CCM_CDHIPR_MMDC_CH1_PODF_BUSY (1 << 2)
|
||||
// #define MXC_CCM_CDHIPR_AHB_PODF_BUSY (1 << 1)
|
||||
// #define MXC_CCM_CDHIPR_AXI_PODF_BUSY (1)
|
||||
|
||||
// /* Define the bits in register CLPCR */
|
||||
// #define MXC_CCM_CLPCR_MASK_L2CC_IDLE (1 << 27)
|
||||
// #define MXC_CCM_CLPCR_MASK_SCU_IDLE (1 << 26)
|
||||
// #define MXC_CCM_CLPCR_MASK_CORE3_WFI (1 << 25)
|
||||
// #define MXC_CCM_CLPCR_MASK_CORE2_WFI (1 << 24)
|
||||
// #define MXC_CCM_CLPCR_MASK_CORE1_WFI (1 << 23)
|
||||
// #define MXC_CCM_CLPCR_MASK_CORE0_WFI (1 << 22)
|
||||
// #define MXC_CCM_CLPCR_BYP_MMDC_CH1_LPM_HS (1 << 21)
|
||||
// #define MXC_CCM_CLPCR_BYP_MMDC_CH0_LPM_HS (1 << 19)
|
||||
// #define MXC_CCM_CLPCR_WB_CORE_AT_LPM (1 << 17)
|
||||
// #define MXC_CCM_CLPCR_WB_PER_AT_LPM (1 << 16)
|
||||
// #define MXC_CCM_CLPCR_COSC_PWRDOWN (1 << 11)
|
||||
// #define MXC_CCM_CLPCR_STBY_COUNT_MASK (0x3 << 9)
|
||||
// #define MXC_CCM_CLPCR_STBY_COUNT_OFFSET (9)
|
||||
// #define MXC_CCM_CLPCR_VSTBY (1 << 8)
|
||||
// #define MXC_CCM_CLPCR_DIS_REF_OSC (1 << 7)
|
||||
// #define MXC_CCM_CLPCR_SBYOS (1 << 6)
|
||||
// #define MXC_CCM_CLPCR_ARM_CLK_DIS_ON_LPM (1 << 5)
|
||||
// #define MXC_CCM_CLPCR_LPSR_CLK_SEL_MASK (0x3 << 3)
|
||||
// #define MXC_CCM_CLPCR_LPSR_CLK_SEL_OFFSET (3)
|
||||
// #define MXC_CCM_CLPCR_BYPASS_PMIC_VFUNC_READY (1 << 2)
|
||||
// #define MXC_CCM_CLPCR_LPM_MASK (0x3)
|
||||
// #define MXC_CCM_CLPCR_LPM_OFFSET (0)
|
||||
|
||||
// /* Define the bits in register CISR */
|
||||
// #define MXC_CCM_CISR_ARM_PODF_LOADED (1 << 26)
|
||||
// #define MXC_CCM_CISR_MMDC_CH0_PODF_LOADED (1 << 23)
|
||||
// #define MXC_CCM_CISR_PERIPH_CLK_SEL_LOADED (1 << 22)
|
||||
// #define MXC_CCM_CISR_MMDC_CH1_PODF_LOADED (1 << 21)
|
||||
// #define MXC_CCM_CISR_AHB_PODF_LOADED (1 << 20)
|
||||
// #define MXC_CCM_CISR_PERIPH2_CLK_SEL_LOADED (1 << 19)
|
||||
// #define MXC_CCM_CISR_AXI_PODF_LOADED (1 << 17)
|
||||
// #define MXC_CCM_CISR_COSC_READY (1 << 6)
|
||||
// #define MXC_CCM_CISR_LRF_PLL (1)
|
||||
|
||||
// /* Define the bits in register CIMR */
|
||||
// #define MXC_CCM_CIMR_MASK_ARM_PODF_LOADED (1 << 26)
|
||||
// #define MXC_CCM_CIMR_MASK_MMDC_CH0_PODF_LOADED (1 << 23)
|
||||
// #define MXC_CCM_CIMR_MASK_PERIPH_CLK_SEL_LOADED (1 << 22)
|
||||
// #define MXC_CCM_CIMR_MASK_MMDC_CH1_PODF_LOADED (1 << 21)
|
||||
// #define MXC_CCM_CIMR_MASK_AHB_PODF_LOADED (1 << 20)
|
||||
// #define MXC_CCM_CIMR_MASK_PERIPH2_CLK_SEL_LOADED (1 << 22)
|
||||
// #define MXC_CCM_CIMR_MASK_AXI_PODF_LOADED (1 << 17)
|
||||
// #define MXC_CCM_CIMR_MASK_COSC_READY (1 << 6)
|
||||
// #define MXC_CCM_CIMR_MASK_LRF_PLL (1)
|
||||
|
||||
// /* Define the bits in register CCOSR */
|
||||
// #define MXC_CCM_CCOSR_CKO2_EN_OFFSET (1 << 24)
|
||||
// #define MXC_CCM_CCOSR_CKO2_DIV_MASK (0x7 << 21)
|
||||
// #define MXC_CCM_CCOSR_CKO2_DIV_OFFSET (21)
|
||||
// #define MXC_CCM_CCOSR_CKO2_SEL_OFFSET (16)
|
||||
// #define MXC_CCM_CCOSR_CKO2_SEL_MASK (0x1F << 16)
|
||||
// #define MXC_CCM_CCOSR_CLKO2_CLKO1_SEL (0x1 << 8)
|
||||
// #define MXC_CCM_CCOSR_CKO1_EN (0x1 << 7)
|
||||
// #define MXC_CCM_CCOSR_CKO1_DIV_MASK (0x7 << 4)
|
||||
// #define MXC_CCM_CCOSR_CKO1_DIV_OFFSET (4)
|
||||
// #define MXC_CCM_CCOSR_CKO1_SEL_MASK (0xF)
|
||||
// #define MXC_CCM_CCOSR_CKO1_SEL_OFFSET (0)
|
||||
|
||||
// /* Define the bits in registers CGPR */
|
||||
// #define MXC_CCM_CGPR_EFUSE_PROG_SUPPLY_GATE (1 << 4)
|
||||
// #define MXC_CCM_CGPR_MMDC_EXT_CLK_DIS (1 << 2)
|
||||
// #define MXC_CCM_CGPR_PMIC_DELAY_SCALER (1)
|
||||
// /* On SoloLite */
|
||||
// #define MXC_CCM_CGPR_MEM_IPG_STOP_MASK (0x1 << 1)
|
||||
|
||||
// /* Define the bits in registers CCGRx */
|
||||
// #define MXC_CCM_CCGR_CG_MASK 3
|
||||
|
||||
// #define MXC_CCM_CCGR0_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR0_CG15_MASK (0x3 << 30)
|
||||
// #define MXC_CCM_CCGR0_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR0_CG14_MASK (0x3 << 28)
|
||||
// #define MXC_CCM_CCGR0_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR0_CG13_MASK (0x3 << 26)
|
||||
// #define MXC_CCM_CCGR0_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR0_CG12_MASK (0x3 << 24)
|
||||
// #define MXC_CCM_CCGR0_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR0_CG11_MASK (0x3 << 22)
|
||||
// #define MXC_CCM_CCGR0_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR0_CG10_MASK (0x3 << 20)
|
||||
// #define MXC_CCM_CCGR0_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR0_CG9_MASK (0x3 << 18)
|
||||
// #define MXC_CCM_CCGR0_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR0_CG8_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CCGR0_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR0_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR0_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR0_CG5_MASK (0x3 << 10)
|
||||
// #define MXC_CCM_CCGR0_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR0_CG4_MASK (0x3 << 8)
|
||||
// #define MXC_CCM_CCGR0_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR0_CG3_MASK (0x3 << 6)
|
||||
// #define MXC_CCM_CCGR0_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR0_CG2_MASK (0x3 << 4)
|
||||
// #define MXC_CCM_CCGR0_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR0_CG1_MASK (0x3 << 2)
|
||||
// #define MXC_CCM_CCGR0_CG0_OFFSET 0
|
||||
// #define MXC_CCM_CCGR0_CG0_MASK 3
|
||||
|
||||
// #define MXC_CCM_CCGR1_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR1_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR1_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR1_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR1_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR1_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR1_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR1_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR1_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR1_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR1_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR1_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR1_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR1_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR1_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR1_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR2_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR2_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR2_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR2_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR2_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR2_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR2_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR2_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR2_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR2_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR2_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR2_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR2_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR2_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR2_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR2_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR3_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR3_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR3_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR3_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR3_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR3_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR3_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR3_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR3_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR3_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR3_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR3_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR3_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR3_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR3_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR3_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR4_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR4_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR4_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR4_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR4_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR4_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR4_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR4_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR4_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR4_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR4_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR4_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR4_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR4_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR4_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR4_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR5_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR5_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR5_CG14_MASK (0x3 << 28)
|
||||
// #define MXC_CCM_CCGR5_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR5_CG13_MASK (0x3 << 26)
|
||||
// #define MXC_CCM_CCGR5_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR5_CG12_MASK (0x3 << 24)
|
||||
// #define MXC_CCM_CCGR5_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR5_CG11_MASK (0x3 << 22)
|
||||
// #define MXC_CCM_CCGR5_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR5_CG10_MASK (0x3 << 20)
|
||||
// #define MXC_CCM_CCGR5_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR5_CG9_MASK (0x3 << 18)
|
||||
// #define MXC_CCM_CCGR5_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR5_CG8_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CCGR5_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR5_CG7_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CCGR5_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR5_CG6_MASK (0x3 << 12)
|
||||
// #define MXC_CCM_CCGR5_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR5_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR5_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR5_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR5_CG2_MASK (0x3 << 4)
|
||||
// #define MXC_CCM_CCGR5_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR5_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR6_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR6_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR6_CG14_MASK (0x3 << 28)
|
||||
// #define MXC_CCM_CCGR6_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR6_CG13_MASK (0x3 << 26)
|
||||
// #define MXC_CCM_CCGR6_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR6_CG12_MASK (0x3 << 24)
|
||||
// #define MXC_CCM_CCGR6_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR6_CG11_MASK (0x3 << 22)
|
||||
// #define MXC_CCM_CCGR6_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR6_CG10_MASK (0x3 << 20)
|
||||
// #define MXC_CCM_CCGR6_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR6_CG9_MASK (0x3 << 18)
|
||||
// #define MXC_CCM_CCGR6_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR6_CG8_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CCGR6_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR6_CG7_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CCGR6_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR6_CG6_MASK (0x3 << 12)
|
||||
// #define MXC_CCM_CCGR6_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR6_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR6_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR6_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR6_CG2_MASK (0x3 << 4)
|
||||
// #define MXC_CCM_CCGR6_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR6_CG0_OFFSET 0
|
||||
|
||||
// #define MXC_CCM_CCGR7_CG15_OFFSET 30
|
||||
// #define MXC_CCM_CCGR7_CG14_OFFSET 28
|
||||
// #define MXC_CCM_CCGR7_CG14_MASK (0x3 << 28)
|
||||
// #define MXC_CCM_CCGR7_CG13_OFFSET 26
|
||||
// #define MXC_CCM_CCGR7_CG13_MASK (0x3 << 26)
|
||||
// #define MXC_CCM_CCGR7_CG12_OFFSET 24
|
||||
// #define MXC_CCM_CCGR7_CG12_MASK (0x3 << 24)
|
||||
// #define MXC_CCM_CCGR7_CG11_OFFSET 22
|
||||
// #define MXC_CCM_CCGR7_CG11_MASK (0x3 << 22)
|
||||
// #define MXC_CCM_CCGR7_CG10_OFFSET 20
|
||||
// #define MXC_CCM_CCGR7_CG10_MASK (0x3 << 20)
|
||||
// #define MXC_CCM_CCGR7_CG9_OFFSET 18
|
||||
// #define MXC_CCM_CCGR7_CG9_MASK (0x3 << 18)
|
||||
// #define MXC_CCM_CCGR7_CG8_OFFSET 16
|
||||
// #define MXC_CCM_CCGR7_CG8_MASK (0x3 << 16)
|
||||
// #define MXC_CCM_CCGR7_CG7_OFFSET 14
|
||||
// #define MXC_CCM_CCGR7_CG7_MASK (0x3 << 14)
|
||||
// #define MXC_CCM_CCGR7_CG6_OFFSET 12
|
||||
// #define MXC_CCM_CCGR7_CG6_MASK (0x3 << 12)
|
||||
// #define MXC_CCM_CCGR7_CG5_OFFSET 10
|
||||
// #define MXC_CCM_CCGR7_CG4_OFFSET 8
|
||||
// #define MXC_CCM_CCGR7_CG3_OFFSET 6
|
||||
// #define MXC_CCM_CCGR7_CG2_OFFSET 4
|
||||
// #define MXC_CCM_CCGR7_CG2_MASK (0x3 << 4)
|
||||
// #define MXC_CCM_CCGR7_CG1_OFFSET 2
|
||||
// #define MXC_CCM_CCGR7_CG0_OFFSET 0
|
||||
|
||||
#endif /* __ARCH_ARM_MACH_MX6_CRM_REGS_H__ */
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file imx_uart.h
|
||||
* @brief support imx6q uart function
|
||||
* @version 3.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2023.09.08
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: imx_uart.h
|
||||
Description: imx6q board uart function
|
||||
Others:
|
||||
History:
|
||||
1. Date: 2023-08-28
|
||||
Author: AIIT XUOS Lab
|
||||
Modification:
|
||||
1. first version
|
||||
*************************************************/
|
||||
|
||||
#ifndef __IMX_UART_H__
|
||||
#define __IMX_UART_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <irq_numbers.h>
|
||||
|
||||
//! @addtogroup diag_uart
|
||||
//! @{
|
||||
// clang-format off
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Constants
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/* UART specific defines */
|
||||
#define IMX6Q_UART_INSTANCE HW_UART2
|
||||
#define UART_BAUD_RATE 115200
|
||||
#define IOMUXC_GPR1_OFFSET 0x4
|
||||
|
||||
#define UART_IRQS(x) ((x) == HW_UART1 ? IMX_INT_UART1 : (x) == HW_UART2 ? IMX_INT_UART2 \
|
||||
: (x) == HW_UART3 ? IMX_INT_UART3 \
|
||||
: (x) == HW_UART4 ? IMX_INT_UART4 \
|
||||
: (x) == HW_UART5 ? IMX_INT_UART5 \
|
||||
: 0xFFFFFFFF)
|
||||
|
||||
// clang-format on
|
||||
#endif //__IMX_UART_H__
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
|
||||
* <armlinux@phytec.de>
|
||||
*
|
||||
* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file iomux_v3.h
|
||||
* @brief support imx6q iomux function define, reference from u-boot-2009-08/include/asm-arm/arch-mx6/iomux_v3.h
|
||||
* @version 3.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2023.09.08
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __MACH_IOMUX_V3_H__
|
||||
#define __MACH_IOMUX_V3_H__
|
||||
|
||||
/*
|
||||
* build IOMUX_PAD structure
|
||||
*
|
||||
* This iomux scheme is based around pads, which are the physical balls
|
||||
* on the processor.
|
||||
*
|
||||
* - Each pad has a pad control register (IOMUXC_SW_PAD_CTRL_x) which controls
|
||||
* things like driving strength and pullup/pulldown.
|
||||
* - Each pad can have but not necessarily does have an output routing register
|
||||
* (IOMUXC_SW_MUX_CTL_PAD_x).
|
||||
* - Each pad can have but not necessarily does have an input routing register
|
||||
* (IOMUXC_x_SELECT_INPUT)
|
||||
*
|
||||
* The three register sets do not have a fixed offset to each other,
|
||||
* hence we order this table by pad control registers (which all pads
|
||||
* have) and put the optional i/o routing registers into additional
|
||||
* fields.
|
||||
*
|
||||
* The naming convention for the pad modes is MX35_PAD_<padname>__<padmode>
|
||||
* If <padname> or <padmode> refers to a GPIO, it is named
|
||||
* GPIO_<unit>_<num>
|
||||
*
|
||||
* IOMUX/PAD Bit field definitions
|
||||
*
|
||||
* MUX_CTRL_OFS: 0..11 (12)
|
||||
* PAD_CTRL_OFS: 12..23 (12)
|
||||
* SEL_INPUT_OFS: 24..35 (12)
|
||||
* MUX_MODE + SION: 36..40 (5)
|
||||
* PAD_CTRL + NO_PAD_CTRL: 41..59 (19)
|
||||
* SEL_INP: 60..63 (4)
|
||||
*/
|
||||
// clang-format off
|
||||
#include <stdint.h>
|
||||
|
||||
typedef uint64_t iomux_v3_cfg_t;
|
||||
typedef unsigned int iomux_pin_name_t;
|
||||
|
||||
#define MUX_CTRL_OFS_SHIFT 0
|
||||
#define MUX_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_CTRL_OFS_SHIFT)
|
||||
#define MUX_PAD_CTRL_OFS_SHIFT 12
|
||||
#define MUX_PAD_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_PAD_CTRL_OFS_SHIFT)
|
||||
#define MUX_SEL_INPUT_OFS_SHIFT 24
|
||||
#define MUX_SEL_INPUT_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_SEL_INPUT_OFS_SHIFT)
|
||||
|
||||
#define MUX_MODE_SHIFT 36
|
||||
#define MUX_MODE_MASK ((iomux_v3_cfg_t)0x1f << MUX_MODE_SHIFT)
|
||||
#define MUX_PAD_CTRL_SHIFT 41
|
||||
#define MUX_PAD_CTRL_MASK ((iomux_v3_cfg_t)0x7ffff << MUX_PAD_CTRL_SHIFT)
|
||||
#define MUX_SEL_INPUT_SHIFT 60
|
||||
#define MUX_SEL_INPUT_MASK ((iomux_v3_cfg_t)0xf << MUX_SEL_INPUT_SHIFT)
|
||||
|
||||
#define MUX_PAD_CTRL(x) ((iomux_v3_cfg_t)(x) << MUX_PAD_CTRL_SHIFT)
|
||||
|
||||
#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, _sel_input, _pad_ctrl) \
|
||||
(((iomux_v3_cfg_t)(_mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_mux_mode) << MUX_MODE_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_pad_ctrl_ofs) << MUX_PAD_CTRL_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_pad_ctrl) << MUX_PAD_CTRL_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_sel_input) << MUX_SEL_INPUT_SHIFT))
|
||||
|
||||
#if defined CONFIG_MX6Q
|
||||
#define MX6X_IOMUX(s) MX6Q_##s
|
||||
#elif defined CONFIG_MX6DL
|
||||
#define MX6X_IOMUX(s) MX6DL_##s
|
||||
#elif defined CONFIG_MX6SL
|
||||
#define MX6X_IOMUX(s) MX6SL_##s
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Use to set PAD control
|
||||
*/
|
||||
#define PAD_CTL_LVE_OFFSET (22)
|
||||
#define PAD_CTL_LVE (1 << 18)
|
||||
#define NO_PAD_CTRL (1 << 17)
|
||||
#define PAD_CTL_HYS (1 << 16)
|
||||
|
||||
#define NO_PAD_I 0
|
||||
#define NO_MUX_I 0
|
||||
#define IOMUX_CONFIG_SION (0x1 << 4)
|
||||
|
||||
#define PAD_CTL_PUS_100K_DOWN (0 << 14)
|
||||
#define PAD_CTL_PUS_47K_UP (1 << 14)
|
||||
#define PAD_CTL_PUS_100K_UP (2 << 14)
|
||||
#define PAD_CTL_PUS_22K_UP (3 << 14)
|
||||
|
||||
#define PAD_CTL_PUE (1 << 13)
|
||||
#define PAD_CTL_PKE (1 << 12)
|
||||
#define PAD_CTL_ODE (1 << 11)
|
||||
|
||||
#define PAD_CTL_SPEED_LOW (1 << 6)
|
||||
#define PAD_CTL_SPEED_MED (2 << 6)
|
||||
#define PAD_CTL_SPEED_HIGH (3 << 6)
|
||||
|
||||
#define PAD_CTL_DSE_DISABLE (0 << 3)
|
||||
#define PAD_CTL_DSE_240ohm (1 << 3)
|
||||
#define PAD_CTL_DSE_120ohm (2 << 3)
|
||||
#define PAD_CTL_DSE_80ohm (3 << 3)
|
||||
#define PAD_CTL_DSE_60ohm (4 << 3)
|
||||
#define PAD_CTL_DSE_48ohm (5 << 3)
|
||||
#define PAD_CTL_DSE_40ohm (6 << 3)
|
||||
#define PAD_CTL_DSE_34ohm (7 << 3)
|
||||
|
||||
#define PAD_CTL_SRE_FAST (1 << 0)
|
||||
#define PAD_CTL_SRE_SLOW (0 << 0)
|
||||
|
||||
#define GPIO_PIN_MASK 0x1f
|
||||
|
||||
#define GPIO_PORT_SHIFT 5
|
||||
#define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT)
|
||||
|
||||
#define GPIO_PORTA (0 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTB (1 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTC (2 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTD (3 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTE (4 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTF (5 << GPIO_PORT_SHIFT)
|
||||
// clang-format on
|
||||
|
||||
/*
|
||||
* setups a single pad in the iomuxer
|
||||
*/
|
||||
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
|
||||
|
||||
/*
|
||||
* Initialise the iomux controller
|
||||
*/
|
||||
void mxc_iomux_v3_init(void *iomux_v3_base);
|
||||
|
||||
#endif /* __MACH_IOMUX_V3_H__*/
|
||||
|
||||
+5609
File diff suppressed because it is too large
Load Diff
+3845
File diff suppressed because it is too large
Load Diff
+72
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
* Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
|
||||
* <armlinux@phytec.de>
|
||||
*
|
||||
* Copyright (C) 2004-2012 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
/**
|
||||
* @file iomux_v3.c
|
||||
* @brief support imx6q iomux function, reference from u-boot-2009-08/cpu/arm_cortexa8/mx6/iomux-v3.c
|
||||
* @version 3.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2023.09.08
|
||||
*/
|
||||
|
||||
#include <iomux_v3.h>
|
||||
|
||||
#include <regs_pins.h>
|
||||
#include <soc_memory_map.h>
|
||||
|
||||
#include "mmio_access.h"
|
||||
|
||||
static void* base;
|
||||
|
||||
void mxc_iomux_v3_init(void* iomux_v3_base)
|
||||
{
|
||||
base = iomux_v3_base;
|
||||
}
|
||||
|
||||
/*
|
||||
* configures a single pad in the iomuxer
|
||||
*/
|
||||
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||
{
|
||||
uint32_t mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT;
|
||||
uint32_t mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT;
|
||||
uint32_t sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT;
|
||||
uint32_t sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT;
|
||||
uint32_t pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
|
||||
uint32_t pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
|
||||
|
||||
if (mux_ctrl_ofs)
|
||||
mmio_write((uintptr_t)(base + mux_ctrl_ofs), (uintptr_t)(mux_mode));
|
||||
|
||||
if (sel_input_ofs)
|
||||
mmio_write((uintptr_t)(base + sel_input_ofs), (uintptr_t)(sel_input));
|
||||
|
||||
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs) {
|
||||
if (pad_ctrl & PAD_CTL_LVE) {
|
||||
/* Set the bit for LVE */
|
||||
pad_ctrl |= (1 << PAD_CTL_LVE_OFFSET);
|
||||
pad_ctrl &= ~(PAD_CTL_LVE);
|
||||
}
|
||||
mmio_write((uintptr_t)(base + pad_ctrl_ofs), (uintptr_t)(pad_ctrl));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user