mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
Add 2.6.31 patches and files.
This commit is contained in:
committed by
Xiangfu Liu
parent
f58d88c0f1
commit
7d446f792e
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* linux/include/asm-mips/jzsoc.h
|
||||
*
|
||||
* Ingenic's JZXXXX SoC common include.
|
||||
*
|
||||
* Copyright (C) 2006 - 2008 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <jlwei@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZSOC_H__
|
||||
#define __ASM_JZSOC_H__
|
||||
|
||||
/*
|
||||
* SoC include
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SOC_JZ4740
|
||||
#include <asm/mach-jz4740/jz4740.h>
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_JZSOC_H__ */
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/board-dipper.h
|
||||
*
|
||||
* JZ4725-based (16bit) Dipper board ver 1.x definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4725_DIPPER_H__
|
||||
#define __ASM_JZ4725_DIPPER_H__
|
||||
|
||||
/*======================================================================
|
||||
* Frequencies of on-board oscillators
|
||||
*/
|
||||
#define JZ_EXTAL 12000000 /* Main extal freq: 12 MHz */
|
||||
#define JZ_EXTAL2 32768 /* RTC extal freq: 32.768 KHz */
|
||||
|
||||
/*======================================================================
|
||||
* GPIO JZ4725
|
||||
*/
|
||||
#define GPIO_SD_VCC_EN_N 85 /* GPC21 */
|
||||
#define GPIO_SD_CD_N 91 /* GPC27 */
|
||||
#define GPIO_SD_WP 112 /* GPD16 */
|
||||
#define GPIO_USB_DETE 124 /* GPD28 */
|
||||
#define GPIO_DC_DETE_N 103 /* GPD7 */
|
||||
#define GPIO_CHARG_STAT_N 86 /* GPC22 */
|
||||
#define GPIO_DISP_OFF_N 118 /* GPD22 */
|
||||
|
||||
#define GPIO_UDC_HOTPLUG GPIO_USB_DETE
|
||||
|
||||
/*======================================================================
|
||||
* MMC/SD
|
||||
*/
|
||||
|
||||
#define MSC_WP_PIN GPIO_SD_WP
|
||||
#define MSC_HOTPLUG_PIN GPIO_SD_CD_N
|
||||
#define MSC_HOTPLUG_IRQ (IRQ_GPIO_0 + GPIO_SD_CD_N)
|
||||
|
||||
#define __msc_init_io() \
|
||||
do { \
|
||||
__gpio_as_output(GPIO_SD_VCC_EN_N); \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_enable_power() \
|
||||
do { \
|
||||
__gpio_clear_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_disable_power() \
|
||||
do { \
|
||||
__gpio_set_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_card_detected(s) \
|
||||
({ \
|
||||
int detected = 1; \
|
||||
if (__gpio_get_pin(GPIO_SD_CD_N)) \
|
||||
detected = 0; \
|
||||
detected; \
|
||||
})
|
||||
|
||||
#endif /* __ASM_JZ4740_DIPPER_H__ */
|
||||
@@ -0,0 +1,56 @@
|
||||
#ifndef __ASM_JZ4740_LEO_H__
|
||||
#define __ASM_JZ4740_LEO_H__
|
||||
|
||||
/*
|
||||
* Define your board specific codes here !!!
|
||||
*/
|
||||
|
||||
/*======================================================================
|
||||
* Frequencies of on-board oscillators
|
||||
*/
|
||||
#define JZ_EXTAL 12000000 /* Main extal freq: 12 MHz */
|
||||
#define JZ_EXTAL2 32768 /* RTC extal freq: 32.768 KHz */
|
||||
|
||||
|
||||
/*======================================================================
|
||||
* GPIO
|
||||
*/
|
||||
#define GPIO_DISP_OFF_N 100
|
||||
#define GPIO_SD_VCC_EN_N 119
|
||||
#define GPIO_SD_CD_N 120
|
||||
#define GPIO_SD_WP 111
|
||||
|
||||
/*======================================================================
|
||||
* MMC/SD
|
||||
*/
|
||||
|
||||
#define MSC_WP_PIN GPIO_SD_WP
|
||||
#define MSC_HOTPLUG_PIN GPIO_SD_CD_N
|
||||
#define MSC_HOTPLUG_IRQ (IRQ_GPIO_0 + GPIO_SD_CD_N)
|
||||
|
||||
#define __msc_init_io() \
|
||||
do { \
|
||||
__gpio_as_output(GPIO_SD_VCC_EN_N); \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_enable_power() \
|
||||
do { \
|
||||
__gpio_clear_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_disable_power() \
|
||||
do { \
|
||||
__gpio_set_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_card_detected(s) \
|
||||
({ \
|
||||
int detected = 1; \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
if (__gpio_get_pin(GPIO_SD_CD_N)) \
|
||||
detected = 0; \
|
||||
detected; \
|
||||
})
|
||||
|
||||
#endif /* __ASM_JZ4740_BOARD_LEO_H__ */
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/board-lyra.h
|
||||
*
|
||||
* JZ4740-based LYRA board ver 2.x definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_LYRA_H__
|
||||
#define __ASM_JZ4740_LYRA_H__
|
||||
|
||||
/*======================================================================
|
||||
* Frequencies of on-board oscillators
|
||||
*/
|
||||
#define JZ_EXTAL 12000000 /* Main extal freq: 12 MHz */
|
||||
#define JZ_EXTAL2 32768 /* RTC extal freq: 32.768 KHz */
|
||||
|
||||
|
||||
/*======================================================================
|
||||
* GPIO
|
||||
*/
|
||||
#define GPIO_SD_VCC_EN_N 113 /* GPD17 */
|
||||
#define GPIO_SD_CD_N 110 /* GPD14 */
|
||||
#define GPIO_SD_WP 112 /* GPD16 */
|
||||
#define GPIO_USB_DETE 102 /* GPD6 */
|
||||
#define GPIO_DC_DETE_N 103 /* GPD7 */
|
||||
#define GPIO_CHARG_STAT_N 111 /* GPD15 */
|
||||
#define GPIO_DISP_OFF_N 118 /* GPD22 */
|
||||
#define GPIO_LED_EN 124 /* GPD28 */
|
||||
|
||||
#define GPIO_UDC_HOTPLUG GPIO_USB_DETE
|
||||
/*======================================================================
|
||||
* MMC/SD
|
||||
*/
|
||||
|
||||
#define MSC_WP_PIN GPIO_SD_WP
|
||||
#define MSC_HOTPLUG_PIN GPIO_SD_CD_N
|
||||
#define MSC_HOTPLUG_IRQ (IRQ_GPIO_0 + GPIO_SD_CD_N)
|
||||
|
||||
#define __msc_init_io() \
|
||||
do { \
|
||||
__gpio_as_output(GPIO_SD_VCC_EN_N); \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_enable_power() \
|
||||
do { \
|
||||
__gpio_clear_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_disable_power() \
|
||||
do { \
|
||||
__gpio_set_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_card_detected(s) \
|
||||
({ \
|
||||
int detected = 1; \
|
||||
if (!(__gpio_get_pin(GPIO_SD_CD_N))) \
|
||||
detected = 0; \
|
||||
detected; \
|
||||
})
|
||||
|
||||
#endif /* __ASM_JZ4740_LYRA_H__ */
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/board-pavo.h
|
||||
*
|
||||
* JZ4730-based PAVO board ver 2.x definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_PAVO_H__
|
||||
#define __ASM_JZ4740_PAVO_H__
|
||||
|
||||
/*======================================================================
|
||||
* Frequencies of on-board oscillators
|
||||
*/
|
||||
#define JZ_EXTAL 12000000 /* Main extal freq: 12 MHz */
|
||||
#define JZ_EXTAL2 32768 /* RTC extal freq: 32.768 KHz */
|
||||
|
||||
|
||||
/*======================================================================
|
||||
* GPIO
|
||||
*/
|
||||
#define GPIO_SD_VCC_EN_N 113 /* GPD17 */
|
||||
#define GPIO_SD_CD_N 110 /* GPD14 */
|
||||
#define GPIO_SD_WP 112 /* GPD16 */
|
||||
#define GPIO_USB_DETE 102 /* GPD6 */
|
||||
#define GPIO_DC_DETE_N 103 /* GPD7 */
|
||||
#define GPIO_CHARG_STAT_N 111 /* GPD15 */
|
||||
#define GPIO_DISP_OFF_N 118 /* GPD22 */
|
||||
#define GPIO_LED_EN 124 /* GPD28 */
|
||||
|
||||
#define GPIO_UDC_HOTPLUG GPIO_USB_DETE
|
||||
/*======================================================================
|
||||
* MMC/SD
|
||||
*/
|
||||
|
||||
#define MSC_WP_PIN GPIO_SD_WP
|
||||
#define MSC_HOTPLUG_PIN GPIO_SD_CD_N
|
||||
#define MSC_HOTPLUG_IRQ (IRQ_GPIO_0 + GPIO_SD_CD_N)
|
||||
|
||||
#define __msc_init_io() \
|
||||
do { \
|
||||
__gpio_as_output(GPIO_SD_VCC_EN_N); \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_enable_power() \
|
||||
do { \
|
||||
__gpio_clear_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_disable_power() \
|
||||
do { \
|
||||
__gpio_set_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_card_detected(s) \
|
||||
({ \
|
||||
int detected = 1; \
|
||||
if (__gpio_get_pin(GPIO_SD_CD_N)) \
|
||||
detected = 0; \
|
||||
detected; \
|
||||
})
|
||||
|
||||
#endif /* __ASM_JZ4740_PAVO_H__ */
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/board-virgo.h
|
||||
*
|
||||
* JZ4720-based VIRGO board ver 1.x definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4720_VIRGO_H__
|
||||
#define __ASM_JZ4720_VIRGO_H__
|
||||
|
||||
/*======================================================================
|
||||
* Frequencies of on-board oscillators
|
||||
*/
|
||||
#define JZ_EXTAL 12000000 /* Main extal freq: 12 MHz */
|
||||
#define JZ_EXTAL2 32768 /* RTC extal freq: 32.768 KHz */
|
||||
|
||||
/*======================================================================
|
||||
* GPIO VIRGO(JZ4720)
|
||||
*/
|
||||
#define GPIO_SD_VCC_EN_N 115 /* GPD19 */
|
||||
#define GPIO_SD_CD_N 116 /* GPD20 */
|
||||
#define GPIO_USB_DETE 114 /* GPD18 */
|
||||
#define GPIO_DC_DETE_N 120 /* GPD24 */
|
||||
#define GPIO_DISP_OFF_N 118 /* GPD22 */
|
||||
#define GPIO_LED_EN 117 /* GPD21 */
|
||||
|
||||
#define GPIO_UDC_HOTPLUG GPIO_USB_DETE
|
||||
|
||||
/*======================================================================
|
||||
* MMC/SD
|
||||
*/
|
||||
|
||||
#define MSC_HOTPLUG_PIN GPIO_SD_CD_N
|
||||
#define MSC_HOTPLUG_IRQ (IRQ_GPIO_0 + GPIO_SD_CD_N)
|
||||
|
||||
#define __msc_init_io() \
|
||||
do { \
|
||||
__gpio_as_output(GPIO_SD_VCC_EN_N); \
|
||||
__gpio_as_input(GPIO_SD_CD_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_enable_power() \
|
||||
do { \
|
||||
__gpio_clear_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_disable_power() \
|
||||
do { \
|
||||
__gpio_set_pin(GPIO_SD_VCC_EN_N); \
|
||||
} while (0)
|
||||
|
||||
#define __msc_card_detected(s) \
|
||||
({ \
|
||||
int detected = 1; \
|
||||
if (__gpio_get_pin(GPIO_SD_CD_N)) \
|
||||
detected = 0; \
|
||||
detected; \
|
||||
})
|
||||
|
||||
#endif /* __ASM_JZ4720_VIRGO_H__ */
|
||||
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/clock.h
|
||||
*
|
||||
* JZ4740 clocks definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_CLOCK_H__
|
||||
#define __ASM_JZ4740_CLOCK_H__
|
||||
|
||||
#ifndef JZ_EXTAL
|
||||
//#define JZ_EXTAL 3686400 /* 3.6864 MHz */
|
||||
#define JZ_EXTAL 12000000 /* 3.6864 MHz */
|
||||
#endif
|
||||
#ifndef JZ_EXTAL2
|
||||
#define JZ_EXTAL2 32768 /* 32.768 KHz */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* JZ4740 clocks structure
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned int cclk; /* CPU clock */
|
||||
unsigned int hclk; /* System bus clock */
|
||||
unsigned int pclk; /* Peripheral bus clock */
|
||||
unsigned int mclk; /* Flash/SRAM/SDRAM clock */
|
||||
unsigned int lcdclk; /* LCDC module clock */
|
||||
unsigned int pixclk; /* LCD pixel clock */
|
||||
unsigned int i2sclk; /* AIC module clock */
|
||||
unsigned int usbclk; /* USB module clock */
|
||||
unsigned int mscclk; /* MSC module clock */
|
||||
unsigned int extalclk; /* EXTAL clock for UART,I2C,SSI,TCU,USB-PHY */
|
||||
unsigned int rtcclk; /* RTC clock for CPM,INTC,RTC,TCU,WDT */
|
||||
} jz_clocks_t;
|
||||
|
||||
extern jz_clocks_t jz_clocks;
|
||||
|
||||
|
||||
/* PLL output frequency */
|
||||
static __inline__ unsigned int __cpm_get_pllout(void)
|
||||
{
|
||||
unsigned long m, n, no, pllout;
|
||||
unsigned long cppcr = REG_CPM_CPPCR;
|
||||
unsigned long od[4] = {1, 2, 2, 4};
|
||||
if ((cppcr & CPM_CPPCR_PLLEN) && !(cppcr & CPM_CPPCR_PLLBP)) {
|
||||
m = __cpm_get_pllm() + 2;
|
||||
n = __cpm_get_plln() + 2;
|
||||
no = od[__cpm_get_pllod()];
|
||||
pllout = ((JZ_EXTAL) / (n * no)) * m;
|
||||
} else
|
||||
pllout = JZ_EXTAL;
|
||||
return pllout;
|
||||
}
|
||||
|
||||
/* PLL output frequency for MSC/I2S/LCD/USB */
|
||||
static __inline__ unsigned int __cpm_get_pllout2(void)
|
||||
{
|
||||
if (REG_CPM_CPCCR & CPM_CPCCR_PCS)
|
||||
return __cpm_get_pllout();
|
||||
else
|
||||
return __cpm_get_pllout()/2;
|
||||
}
|
||||
|
||||
/* CPU core clock */
|
||||
static __inline__ unsigned int __cpm_get_cclk(void)
|
||||
{
|
||||
int div[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32};
|
||||
|
||||
return __cpm_get_pllout() / div[__cpm_get_cdiv()];
|
||||
}
|
||||
|
||||
/* AHB system bus clock */
|
||||
static __inline__ unsigned int __cpm_get_hclk(void)
|
||||
{
|
||||
int div[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32};
|
||||
|
||||
return __cpm_get_pllout() / div[__cpm_get_hdiv()];
|
||||
}
|
||||
|
||||
/* Memory bus clock */
|
||||
static __inline__ unsigned int __cpm_get_mclk(void)
|
||||
{
|
||||
int div[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32};
|
||||
|
||||
return __cpm_get_pllout() / div[__cpm_get_mdiv()];
|
||||
}
|
||||
|
||||
/* APB peripheral bus clock */
|
||||
static __inline__ unsigned int __cpm_get_pclk(void)
|
||||
{
|
||||
int div[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32};
|
||||
|
||||
return __cpm_get_pllout() / div[__cpm_get_pdiv()];
|
||||
}
|
||||
|
||||
/* LCDC module clock */
|
||||
static __inline__ unsigned int __cpm_get_lcdclk(void)
|
||||
{
|
||||
return __cpm_get_pllout2() / (__cpm_get_ldiv() + 1);
|
||||
}
|
||||
|
||||
/* LCD pixel clock */
|
||||
static __inline__ unsigned int __cpm_get_pixclk(void)
|
||||
{
|
||||
return __cpm_get_pllout2() / (__cpm_get_pixdiv() + 1);
|
||||
}
|
||||
|
||||
/* I2S clock */
|
||||
static __inline__ unsigned int __cpm_get_i2sclk(void)
|
||||
{
|
||||
if (REG_CPM_CPCCR & CPM_CPCCR_I2CS) {
|
||||
return __cpm_get_pllout2() / (__cpm_get_i2sdiv() + 1);
|
||||
}
|
||||
else {
|
||||
return JZ_EXTAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* USB clock */
|
||||
static __inline__ unsigned int __cpm_get_usbclk(void)
|
||||
{
|
||||
if (REG_CPM_CPCCR & CPM_CPCCR_UCS) {
|
||||
return __cpm_get_pllout2() / (__cpm_get_udiv() + 1);
|
||||
}
|
||||
else {
|
||||
return JZ_EXTAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* MSC clock */
|
||||
static __inline__ unsigned int __cpm_get_mscclk(void)
|
||||
{
|
||||
return __cpm_get_pllout2() / (__cpm_get_mscdiv() + 1);
|
||||
}
|
||||
|
||||
/* EXTAL clock for UART,I2C,SSI,TCU,USB-PHY */
|
||||
static __inline__ unsigned int __cpm_get_extalclk(void)
|
||||
{
|
||||
return JZ_EXTAL;
|
||||
}
|
||||
|
||||
/* RTC clock for CPM,INTC,RTC,TCU,WDT */
|
||||
static __inline__ unsigned int __cpm_get_rtcclk(void)
|
||||
{
|
||||
return JZ_EXTAL2;
|
||||
}
|
||||
|
||||
/*
|
||||
* Output 24MHz for SD and 16MHz for MMC.
|
||||
*/
|
||||
static inline void __cpm_select_msc_clk(int sd)
|
||||
{
|
||||
unsigned int pllout2 = __cpm_get_pllout2();
|
||||
unsigned int div = 0;
|
||||
|
||||
if (sd) {
|
||||
div = pllout2 / 24000000;
|
||||
}
|
||||
else {
|
||||
div = pllout2 / 16000000;
|
||||
}
|
||||
|
||||
REG_CPM_MSCCDR = div - 1;
|
||||
}
|
||||
|
||||
#endif /* __ASM_JZ4740_CLOCK_H__ */
|
||||
@@ -0,0 +1,265 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/dma.h
|
||||
*
|
||||
* JZ4740 DMA definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_DMA_H__
|
||||
#define __ASM_JZ4740_DMA_H__
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/io.h> /* need byte IO */
|
||||
#include <linux/spinlock.h> /* And spinlocks */
|
||||
#include <linux/delay.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/*
|
||||
* Descriptor structure for JZ4740 DMA engine
|
||||
* Note: this structure must always be aligned to a 16-bytes boundary.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
volatile u32 dcmd; /* DCMD value for the current transfer */
|
||||
volatile u32 dsadr; /* DSAR value for the current transfer */
|
||||
volatile u32 dtadr; /* DTAR value for the current transfer */
|
||||
volatile u32 ddadr; /* Points to the next descriptor + transfer count */
|
||||
} jz_dma_desc;
|
||||
|
||||
|
||||
/* DMA Device ID's follow */
|
||||
enum {
|
||||
DMA_ID_UART0_TX = 0,
|
||||
DMA_ID_UART0_RX,
|
||||
DMA_ID_SSI_TX,
|
||||
DMA_ID_SSI_RX,
|
||||
DMA_ID_AIC_TX,
|
||||
DMA_ID_AIC_RX,
|
||||
DMA_ID_MSC_TX,
|
||||
DMA_ID_MSC_RX,
|
||||
DMA_ID_TCU_OVERFLOW,
|
||||
DMA_ID_AUTO,
|
||||
DMA_ID_RAW_SET,
|
||||
DMA_ID_MAX
|
||||
};
|
||||
|
||||
/* DMA modes, simulated by sw */
|
||||
#define DMA_MODE_READ 0x0 /* I/O to memory, no autoinit, increment, single mode */
|
||||
#define DMA_MODE_WRITE 0x1 /* memory to I/O, no autoinit, increment, single mode */
|
||||
#define DMA_AUTOINIT 0x2
|
||||
#define DMA_MODE_MASK 0x3
|
||||
|
||||
struct jz_dma_chan {
|
||||
int dev_id; /* DMA ID: this channel is allocated if >=0, free otherwise */
|
||||
unsigned int io; /* DMA channel number */
|
||||
const char *dev_str; /* string describes the DMA channel */
|
||||
int irq; /* DMA irq number */
|
||||
void *irq_dev; /* DMA private device structure */
|
||||
unsigned int fifo_addr; /* physical fifo address of the requested device */
|
||||
unsigned int cntl; /* DMA controll */
|
||||
unsigned int mode; /* DMA configuration */
|
||||
unsigned int source; /* DMA request source */
|
||||
};
|
||||
|
||||
extern struct jz_dma_chan jz_dma_table[];
|
||||
|
||||
|
||||
#define DMA_8BIT_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_8 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_8BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_8BIT_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_8 | \
|
||||
DMAC_DCMD_DS_8BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_16BIT_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_16 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_16BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_16BIT_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_16 | \
|
||||
DMAC_DCMD_DS_16BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_32BIT_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_32BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_32BIT_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_32BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_16BYTE_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_8 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_16BYTE_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_8 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_32BYTE_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_8 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_32BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_32BYTE_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_8 | \
|
||||
DMAC_DCMD_DS_32BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_32_16BYTE_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_32_16BYTE_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_32 | DMAC_DCMD_DWDH_32 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_16BIT_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_16 | DMAC_DCMD_DWDH_16 | \
|
||||
DMAC_DCMD_DS_16BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_16BIT_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_16 | DMAC_DCMD_DWDH_16 | \
|
||||
DMAC_DCMD_DS_16BIT | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_16BYTE_RX_CMD \
|
||||
DMAC_DCMD_DAI | \
|
||||
DMAC_DCMD_SWDH_16 | DMAC_DCMD_DWDH_16 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
#define DMA_AIC_16BYTE_TX_CMD \
|
||||
DMAC_DCMD_SAI | \
|
||||
DMAC_DCMD_SWDH_16 | DMAC_DCMD_DWDH_16 | \
|
||||
DMAC_DCMD_DS_16BYTE | DMAC_DCMD_RDIL_IGN
|
||||
|
||||
extern int jz_request_dma(int dev_id,
|
||||
const char *dev_str,
|
||||
irqreturn_t (*irqhandler)(int, void *),
|
||||
unsigned long irqflags,
|
||||
void *irq_dev_id);
|
||||
extern void jz_free_dma(unsigned int dmanr);
|
||||
|
||||
extern int jz_dma_read_proc(char *buf, char **start, off_t fpos,
|
||||
int length, int *eof, void *data);
|
||||
extern void dump_jz_dma_channel(unsigned int dmanr);
|
||||
|
||||
extern void enable_dma(unsigned int dmanr);
|
||||
extern void disable_dma(unsigned int dmanr);
|
||||
extern void set_dma_addr(unsigned int dmanr, unsigned int phyaddr);
|
||||
extern void set_dma_count(unsigned int dmanr, unsigned int bytecnt);
|
||||
extern void set_dma_mode(unsigned int dmanr, unsigned int mode);
|
||||
extern void jz_set_oss_dma(unsigned int dmanr, unsigned int mode, unsigned int audio_fmt);
|
||||
extern void jz_set_alsa_dma(unsigned int dmanr, unsigned int mode, unsigned int audio_fmt);
|
||||
extern unsigned int get_dma_residue(unsigned int dmanr);
|
||||
|
||||
extern spinlock_t dma_spin_lock;
|
||||
|
||||
static __inline__ unsigned long claim_dma_lock(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&dma_spin_lock, flags);
|
||||
return flags;
|
||||
}
|
||||
|
||||
static __inline__ void release_dma_lock(unsigned long flags)
|
||||
{
|
||||
spin_unlock_irqrestore(&dma_spin_lock, flags);
|
||||
}
|
||||
|
||||
/* Clear the 'DMA Pointer Flip Flop'.
|
||||
* Write 0 for LSB/MSB, 1 for MSB/LSB access.
|
||||
*/
|
||||
#define clear_dma_ff(channel)
|
||||
|
||||
static __inline__ struct jz_dma_chan *get_dma_chan(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr > MAX_DMA_NUM
|
||||
|| jz_dma_table[dmanr].dev_id < 0)
|
||||
return NULL;
|
||||
return &jz_dma_table[dmanr];
|
||||
}
|
||||
|
||||
static __inline__ int dma_halted(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return 1;
|
||||
return __dmac_channel_transmit_halt_detected(dmanr) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ unsigned int get_dma_mode(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return 0;
|
||||
return chan->mode;
|
||||
}
|
||||
|
||||
static __inline__ void clear_dma_done(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return;
|
||||
REG_DMAC_DCCSR(chan->io) &= ~(DMAC_DCCSR_HLT | DMAC_DCCSR_TT | DMAC_DCCSR_AR);
|
||||
}
|
||||
|
||||
static __inline__ void clear_dma_halt(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return;
|
||||
REG_DMAC_DCCSR(chan->io) &= ~(DMAC_DCCSR_HLT);
|
||||
REG_DMAC_DMACR &= ~(DMAC_DMACR_HLT);
|
||||
}
|
||||
|
||||
static __inline__ void clear_dma_flag(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return;
|
||||
REG_DMAC_DCCSR(chan->io) &= ~(DMAC_DCCSR_HLT | DMAC_DCCSR_TT | DMAC_DCCSR_AR);
|
||||
REG_DMAC_DMACR &= ~(DMAC_DMACR_HLT | DMAC_DMACR_AR);
|
||||
}
|
||||
|
||||
static __inline__ void set_dma_page(unsigned int dmanr, char pagenr)
|
||||
{
|
||||
}
|
||||
|
||||
static __inline__ unsigned int get_dma_done_status(unsigned int dmanr)
|
||||
{
|
||||
unsigned long dccsr;
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return 0;
|
||||
dccsr = REG_DMAC_DCCSR(chan->io);
|
||||
return dccsr & (DMAC_DCCSR_HLT | DMAC_DCCSR_TT | DMAC_DCCSR_AR);
|
||||
}
|
||||
|
||||
static __inline__ int get_dma_done_irq(unsigned int dmanr)
|
||||
{
|
||||
struct jz_dma_chan *chan = get_dma_chan(dmanr);
|
||||
if (!chan)
|
||||
return -1;
|
||||
return chan->irq;
|
||||
}
|
||||
|
||||
#endif /* __ASM_JZ4740_DMA_H__ */
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/jz4740.h
|
||||
*
|
||||
* JZ4740 common definition.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <lhhuang@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_H__
|
||||
#define __ASM_JZ4740_H__
|
||||
|
||||
#include <asm/mach-jz4740/regs.h>
|
||||
#include <asm/mach-jz4740/ops.h>
|
||||
#include <asm/mach-jz4740/dma.h>
|
||||
#include <asm/mach-jz4740/misc.h>
|
||||
|
||||
/*------------------------------------------------------------------
|
||||
* Platform definitions
|
||||
*/
|
||||
#ifdef CONFIG_JZ4740_PAVO
|
||||
#include <asm/mach-jz4740/board-pavo.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_JZ4740_LEO
|
||||
#include <asm/mach-jz4740/board-leo.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_JZ4740_LYRA
|
||||
#include <asm/mach-jz4740/board-lyra.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_JZ4725_DIPPER
|
||||
#include <asm/mach-jz4740/board-dipper.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_JZ4720_VIRGO
|
||||
#include <asm/mach-jz4740/board-virgo.h>
|
||||
#endif
|
||||
|
||||
/* Add other platform definition here ... */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------
|
||||
* Follows are related to platform definitions
|
||||
*/
|
||||
|
||||
#include <asm/mach-jz4740/clock.h>
|
||||
#include <asm/mach-jz4740/serial.h>
|
||||
|
||||
#endif /* __ASM_JZ4740_H__ */
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/misc.h
|
||||
*
|
||||
* Ingenic's JZ4740 common include.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <yliu@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_JZ4740_MISC_H__
|
||||
#define __ASM_JZ4740_MISC_H__
|
||||
|
||||
/*==========================================================
|
||||
* I2C
|
||||
*===========================================================*/
|
||||
|
||||
#define I2C_EEPROM_DEV 0xA /* b'1010 */
|
||||
#define I2C_RTC_DEV 0xD /* b'1101 */
|
||||
#define DIMM0_SPD_ADDR 0
|
||||
#define DIMM1_SPD_ADDR 1
|
||||
#define DIMM2_SPD_ADDR 2
|
||||
#define DIMM3_SPD_ADDR 3
|
||||
#define JZ_HCI_ADDR 7
|
||||
|
||||
#define DIMM_SPD_LEN 128
|
||||
#define JZ_HCI_LEN 512 /* 4K bits E2PROM */
|
||||
#define I2C_RTC_LEN 16
|
||||
#define HCI_MAC_OFFSET 64
|
||||
|
||||
extern void i2c_open(void);
|
||||
extern void i2c_close(void);
|
||||
extern void i2c_setclk(unsigned int i2cclk);
|
||||
extern int i2c_read(unsigned char device, unsigned char *buf,
|
||||
unsigned char address, int count);
|
||||
extern int i2c_write(unsigned char device, unsigned char *buf,
|
||||
unsigned char address, int count);
|
||||
|
||||
#endif /* __ASM_JZ4740_MISC_H__ */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* linux/include/asm-mips/mach-jz4740/serial.h
|
||||
*
|
||||
* Ingenic's JZ4740 common include.
|
||||
*
|
||||
* Copyright (C) 2006 - 2007 Ingenic Semiconductor Inc.
|
||||
*
|
||||
* Author: <yliu@ingenic.cn>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_BOARD_SERIAL_H__
|
||||
#define __ASM_BOARD_SERIAL_H__
|
||||
|
||||
#ifndef CONFIG_SERIAL_MANY_PORTS
|
||||
#undef RS_TABLE_SIZE
|
||||
#define RS_TABLE_SIZE 1
|
||||
#endif
|
||||
|
||||
#define JZ_BASE_BAUD (12000000/16)
|
||||
|
||||
#define JZ_SERIAL_PORT_DEFNS \
|
||||
{ .baud_base = JZ_BASE_BAUD, .irq = IRQ_UART0, \
|
||||
.flags = STD_COM_FLAGS, .iomem_base = (u8 *)UART0_BASE, \
|
||||
.iomem_reg_shift = 2, .io_type = SERIAL_IO_MEM },
|
||||
|
||||
#endif /* __ASM_BORAD_SERIAL_H__ */
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
|
||||
*/
|
||||
#ifndef __ASM_MIPS_MACH_JZ4740_WAR_H
|
||||
#define __ASM_MIPS_MACH_JZ4740_WAR_H
|
||||
|
||||
#define R4600_V1_INDEX_ICACHEOP_WAR 0
|
||||
#define R4600_V1_HIT_CACHEOP_WAR 0
|
||||
#define R4600_V2_HIT_CACHEOP_WAR 0
|
||||
#define R5432_CP0_INTERRUPT_WAR 0
|
||||
#define BCM1250_M3_WAR 0
|
||||
#define SIBYTE_1956_WAR 0
|
||||
#define MIPS4K_ICACHE_REFILL_WAR 0
|
||||
#define MIPS_CACHE_SYNC_WAR 0
|
||||
#define TX49XX_ICACHE_INDEX_INV_WAR 0
|
||||
#define RM9000_CDEX_SMP_WAR 0
|
||||
#define ICACHE_REFILLS_WORKAROUND_WAR 0
|
||||
#define R10000_LLSC_WAR 0
|
||||
#define MIPS34K_MISSED_ITLB_WAR 0
|
||||
|
||||
#endif /* __ASM_MIPS_MACH_JZ4740_WAR_H */
|
||||
Reference in New Issue
Block a user